2025-12-31T09:00:01.840 [DEBUG] [Thread-124880 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:00:07.599 [DEBUG] [Thread-124881 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:00:12.751 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:00:12.752 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:00:21.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T09:00:21.598 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T09:00:21.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T09:00:22.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 9, 0, 4), 29.13, 13.86, 0.0, 9.39, 22.62, 0, 0, 0, 2, 0, 0),)
2025-12-31T09:00:22.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 09:00:04
2025-12-31T09:00:22.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T09:00:22.622 [DEBUG] [Thread-124882] [transport.py] [_log()] starting thread (client mode): 0xb6be4a60
2025-12-31T09:00:22.622 [DEBUG] [Thread-124882] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:00:22.634 [DEBUG] [Thread-124883 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:00:22.642 [DEBUG] [Thread-124882] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T09:00:22.642 [INFO] [Thread-124882] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T09:00:22.645 [DEBUG] [Thread-124882] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:00:22.645 [DEBUG] [Thread-124882] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T09:00:22.645 [DEBUG] [Thread-124882] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:00:22.645 [DEBUG] [Thread-124882] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:00:22.645 [DEBUG] [Thread-124882] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:00:22.645 [DEBUG] [Thread-124882] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:00:22.645 [DEBUG] [Thread-124882] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:00:22.645 [DEBUG] [Thread-124882] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:00:22.645 [DEBUG] [Thread-124882] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:00:22.645 [DEBUG] [Thread-124882] [transport.py] [_log()] client lang: <none>
2025-12-31T09:00:22.645 [DEBUG] [Thread-124882] [transport.py] [_log()] server lang: <none>
2025-12-31T09:00:22.646 [DEBUG] [Thread-124882] [transport.py] [_log()] kex follows: False
2025-12-31T09:00:22.646 [DEBUG] [Thread-124882] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:00:22.646 [DEBUG] [Thread-124882] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:00:22.646 [DEBUG] [Thread-124882] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:00:22.646 [DEBUG] [Thread-124882] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:00:22.646 [DEBUG] [Thread-124882] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:00:22.646 [DEBUG] [Thread-124882] [transport.py] [_log()] Compression: none
2025-12-31T09:00:22.646 [DEBUG] [Thread-124882] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:00:22.666 [DEBUG] [Thread-124882] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:00:22.667 [DEBUG] [Thread-124882] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:00:22.667 [DEBUG] [Thread-124882] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T09:00:22.667 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T09:00:22.667 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:00:22.668 [DEBUG] [Thread-124882] [transport.py] [_log()] userauth is OK
2025-12-31T09:00:22.668 [DEBUG] [Thread-124882] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:00:22.668 [DEBUG] [Thread-124882] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:00:22.668 [DEBUG] [Thread-124882] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T09:00:22.668 [DEBUG] [Thread-124882] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:00:22.700 [INFO] [Thread-124882] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:00:22.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:00:23.358 [DEBUG] [Thread-124882] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:00:23.359 [DEBUG] [Thread-124882] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:00:23.368 [DEBUG] [Thread-124882] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T09:00:23.399 [DEBUG] [Thread-124882] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:00:23.399 [DEBUG] [Thread-124882] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:00:23.402 [DEBUG] [Thread-124882] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:00:23.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:00:23.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T09:00:23.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T09:00:23.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T09:00:23.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:00:23.429 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T09:00:23.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:00:23.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:00:23.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T09:00:23.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.291464 -999.00  +22.50  11.15     19   -1.70 1 1 1 1 1   888    0 26.73 102.14 ----- 14.2 11.2 309.6 16.3 29.3 -28.0 28.8 -27.4 26.8 -25.7 27.2 -26.4
2025-12-31T09:00:23.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T09:00:23.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T09:00:23.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.291464
2025-12-31T09:00:23.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T09:00:23.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T09:00:23.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T09:00:23.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T09:00:23.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T09:00:23.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T09:00:04', tmtdew=29.13, humidity=13.86, cloud=0.0, wind=9.39, temperature=22.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T06:59:42.490', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T09:00:23.432 [DEBUG] [Thread-124882] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:00:23.515 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T09:00:23.531 [DEBUG] [Thread-124886] [transport.py] [_log()] starting thread (client mode): 0xb6b49f30
2025-12-31T09:00:23.531 [DEBUG] [Thread-124886] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:00:23.545 [DEBUG] [Thread-124886] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T09:00:23.545 [INFO] [Thread-124886] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T09:00:23.552 [DEBUG] [Thread-124886] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:00:23.553 [DEBUG] [Thread-124886] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T09:00:23.553 [DEBUG] [Thread-124886] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:00:23.553 [DEBUG] [Thread-124886] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:00:23.553 [DEBUG] [Thread-124886] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:00:23.553 [DEBUG] [Thread-124886] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:00:23.553 [DEBUG] [Thread-124886] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:00:23.553 [DEBUG] [Thread-124886] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:00:23.553 [DEBUG] [Thread-124886] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:00:23.553 [DEBUG] [Thread-124886] [transport.py] [_log()] client lang: <none>
2025-12-31T09:00:23.553 [DEBUG] [Thread-124886] [transport.py] [_log()] server lang: <none>
2025-12-31T09:00:23.553 [DEBUG] [Thread-124886] [transport.py] [_log()] kex follows: False
2025-12-31T09:00:23.553 [DEBUG] [Thread-124886] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:00:23.553 [DEBUG] [Thread-124886] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:00:23.554 [DEBUG] [Thread-124886] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:00:23.554 [DEBUG] [Thread-124886] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:00:23.554 [DEBUG] [Thread-124886] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:00:23.554 [DEBUG] [Thread-124886] [transport.py] [_log()] Compression: none
2025-12-31T09:00:23.554 [DEBUG] [Thread-124886] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:00:23.610 [DEBUG] [Thread-124886] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:00:23.611 [DEBUG] [Thread-124886] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:00:23.611 [DEBUG] [Thread-124886] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T09:00:23.611 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T09:00:23.612 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:00:23.667 [DEBUG] [Thread-124886] [transport.py] [_log()] userauth is OK
2025-12-31T09:00:23.667 [DEBUG] [Thread-124886] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:00:23.668 [DEBUG] [Thread-124886] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:00:23.668 [DEBUG] [Thread-124886] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T09:00:23.668 [DEBUG] [Thread-124886] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:00:23.691 [INFO] [Thread-124886] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:00:23.692 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T09:00:23.692 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:00:24.504 [DEBUG] [Thread-124886] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:00:24.505 [DEBUG] [Thread-124886] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:00:24.553 [DEBUG] [Thread-124886] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:00:24.553 [DEBUG] [Thread-124886] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:00:24.563 [DEBUG] [Thread-124886] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:00:24.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:00:24.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T09:00:24.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T09:00:24.591 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:00:24.591 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:00:24.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:00:24.599 [DEBUG] [Thread-124886] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:00:37.665 [DEBUG] [Thread-124888 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:00:52.707 [DEBUG] [Thread-124889 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:00:54.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T09:00:54.612 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T09:00:54.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T09:00:55.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 9, 0, 36), 29.36, 13.53, 0.0, 11.19, 22.9, 0, 0, 0, 2, 0, 0),)
2025-12-31T09:00:55.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 09:00:36
2025-12-31T09:00:55.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T09:00:55.607 [DEBUG] [Thread-124890] [transport.py] [_log()] starting thread (client mode): 0xb6b28ca0
2025-12-31T09:00:55.607 [DEBUG] [Thread-124890] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:00:55.625 [DEBUG] [Thread-124890] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T09:00:55.626 [INFO] [Thread-124890] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T09:00:55.629 [DEBUG] [Thread-124890] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:00:55.629 [DEBUG] [Thread-124890] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T09:00:55.629 [DEBUG] [Thread-124890] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:00:55.629 [DEBUG] [Thread-124890] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:00:55.629 [DEBUG] [Thread-124890] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:00:55.629 [DEBUG] [Thread-124890] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:00:55.629 [DEBUG] [Thread-124890] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:00:55.629 [DEBUG] [Thread-124890] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:00:55.629 [DEBUG] [Thread-124890] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:00:55.629 [DEBUG] [Thread-124890] [transport.py] [_log()] client lang: <none>
2025-12-31T09:00:55.629 [DEBUG] [Thread-124890] [transport.py] [_log()] server lang: <none>
2025-12-31T09:00:55.629 [DEBUG] [Thread-124890] [transport.py] [_log()] kex follows: False
2025-12-31T09:00:55.629 [DEBUG] [Thread-124890] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:00:55.629 [DEBUG] [Thread-124890] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:00:55.629 [DEBUG] [Thread-124890] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:00:55.629 [DEBUG] [Thread-124890] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:00:55.629 [DEBUG] [Thread-124890] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:00:55.629 [DEBUG] [Thread-124890] [transport.py] [_log()] Compression: none
2025-12-31T09:00:55.629 [DEBUG] [Thread-124890] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:00:55.644 [DEBUG] [Thread-124890] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:00:55.644 [DEBUG] [Thread-124890] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:00:55.644 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T09:00:55.644 [DEBUG] [Thread-124890] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T09:00:55.644 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:00:55.644 [DEBUG] [Thread-124890] [transport.py] [_log()] userauth is OK
2025-12-31T09:00:55.644 [DEBUG] [Thread-124890] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:00:55.644 [DEBUG] [Thread-124890] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:00:55.644 [DEBUG] [Thread-124890] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T09:00:55.644 [DEBUG] [Thread-124890] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:00:55.653 [INFO] [Thread-124890] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:00:55.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:00:56.293 [DEBUG] [Thread-124890] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:00:56.294 [DEBUG] [Thread-124890] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:00:56.294 [DEBUG] [Thread-124890] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T09:00:56.334 [DEBUG] [Thread-124890] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:00:56.343 [DEBUG] [Thread-124890] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:00:56.345 [DEBUG] [Thread-124890] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:00:56.356 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:00:56.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T09:00:56.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T09:00:56.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T09:00:56.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:00:56.363 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T09:00:56.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:00:56.363 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:00:56.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T09:00:56.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.292158 -999.00  +22.40  12.88     19   -1.80 1 1 1 1 1   888    0 27.32 109.04 ----- 12.9 12.9 279.5 19.7 29.3 -28.5 28.8 -27.4 26.8 -25.9 27.2 -26.6
2025-12-31T09:00:56.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T09:00:56.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T09:00:56.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.292158
2025-12-31T09:00:56.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T09:00:56.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T09:00:56.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T09:00:56.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T09:00:56.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T09:00:56.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T09:00:36', tmtdew=29.36, humidity=13.53, cloud=0.0, wind=11.19, temperature=22.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T07:00:42.451', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T09:00:56.364 [DEBUG] [Thread-124890] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:00:56.443 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T09:00:56.459 [DEBUG] [Thread-124893] [transport.py] [_log()] starting thread (client mode): 0xb6be42e0
2025-12-31T09:00:56.459 [DEBUG] [Thread-124893] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:00:56.474 [DEBUG] [Thread-124893] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T09:00:56.474 [INFO] [Thread-124893] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T09:00:56.481 [DEBUG] [Thread-124893] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:00:56.481 [DEBUG] [Thread-124893] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T09:00:56.481 [DEBUG] [Thread-124893] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:00:56.481 [DEBUG] [Thread-124893] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:00:56.481 [DEBUG] [Thread-124893] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:00:56.481 [DEBUG] [Thread-124893] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:00:56.481 [DEBUG] [Thread-124893] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:00:56.481 [DEBUG] [Thread-124893] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:00:56.481 [DEBUG] [Thread-124893] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:00:56.481 [DEBUG] [Thread-124893] [transport.py] [_log()] client lang: <none>
2025-12-31T09:00:56.481 [DEBUG] [Thread-124893] [transport.py] [_log()] server lang: <none>
2025-12-31T09:00:56.481 [DEBUG] [Thread-124893] [transport.py] [_log()] kex follows: False
2025-12-31T09:00:56.482 [DEBUG] [Thread-124893] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:00:56.482 [DEBUG] [Thread-124893] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:00:56.482 [DEBUG] [Thread-124893] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:00:56.482 [DEBUG] [Thread-124893] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:00:56.482 [DEBUG] [Thread-124893] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:00:56.482 [DEBUG] [Thread-124893] [transport.py] [_log()] Compression: none
2025-12-31T09:00:56.482 [DEBUG] [Thread-124893] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:00:56.540 [DEBUG] [Thread-124893] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:00:56.540 [DEBUG] [Thread-124893] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:00:56.540 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T09:00:56.540 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:00:56.540 [DEBUG] [Thread-124893] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T09:00:56.597 [DEBUG] [Thread-124893] [transport.py] [_log()] userauth is OK
2025-12-31T09:00:56.597 [DEBUG] [Thread-124893] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:00:56.597 [DEBUG] [Thread-124893] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:00:56.597 [DEBUG] [Thread-124893] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T09:00:56.597 [DEBUG] [Thread-124893] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:00:56.615 [INFO] [Thread-124893] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:00:56.615 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T09:00:56.616 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:00:57.431 [DEBUG] [Thread-124893] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:00:57.431 [DEBUG] [Thread-124893] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:00:57.479 [DEBUG] [Thread-124893] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:00:57.480 [DEBUG] [Thread-124893] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:00:57.488 [DEBUG] [Thread-124893] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:00:57.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:00:57.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T09:00:57.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T09:00:57.512 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:00:57.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:00:57.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:00:57.520 [DEBUG] [Thread-124893] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:01:01.887 [DEBUG] [Thread-124895 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:01:07.739 [DEBUG] [Thread-124896 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:01:12.894 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:01:12.895 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:01:22.800 [DEBUG] [Thread-124897 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:01:27.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T09:01:27.516 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T09:01:27.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T09:01:28.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 9, 1, 8), 29.14, 13.77, 0.0, 11.66, 23.0, 0, 0, 0, 2, 0, 0),)
2025-12-31T09:01:28.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 09:01:08
2025-12-31T09:01:28.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T09:01:28.497 [DEBUG] [Thread-124898] [transport.py] [_log()] starting thread (client mode): 0xb9558c70
2025-12-31T09:01:28.497 [DEBUG] [Thread-124898] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:01:28.517 [DEBUG] [Thread-124898] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T09:01:28.517 [INFO] [Thread-124898] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T09:01:28.521 [DEBUG] [Thread-124898] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:01:28.521 [DEBUG] [Thread-124898] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T09:01:28.521 [DEBUG] [Thread-124898] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:01:28.521 [DEBUG] [Thread-124898] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:01:28.521 [DEBUG] [Thread-124898] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:01:28.521 [DEBUG] [Thread-124898] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:01:28.521 [DEBUG] [Thread-124898] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:01:28.521 [DEBUG] [Thread-124898] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:01:28.521 [DEBUG] [Thread-124898] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:01:28.521 [DEBUG] [Thread-124898] [transport.py] [_log()] client lang: <none>
2025-12-31T09:01:28.521 [DEBUG] [Thread-124898] [transport.py] [_log()] server lang: <none>
2025-12-31T09:01:28.521 [DEBUG] [Thread-124898] [transport.py] [_log()] kex follows: False
2025-12-31T09:01:28.521 [DEBUG] [Thread-124898] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:01:28.522 [DEBUG] [Thread-124898] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:01:28.522 [DEBUG] [Thread-124898] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:01:28.522 [DEBUG] [Thread-124898] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:01:28.522 [DEBUG] [Thread-124898] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:01:28.522 [DEBUG] [Thread-124898] [transport.py] [_log()] Compression: none
2025-12-31T09:01:28.522 [DEBUG] [Thread-124898] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:01:28.539 [DEBUG] [Thread-124898] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:01:28.539 [DEBUG] [Thread-124898] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:01:28.539 [DEBUG] [Thread-124898] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T09:01:28.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T09:01:28.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:01:28.540 [DEBUG] [Thread-124898] [transport.py] [_log()] userauth is OK
2025-12-31T09:01:28.540 [DEBUG] [Thread-124898] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:01:28.540 [DEBUG] [Thread-124898] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:01:28.540 [DEBUG] [Thread-124898] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T09:01:28.540 [DEBUG] [Thread-124898] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:01:28.555 [INFO] [Thread-124898] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:01:28.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:01:29.211 [DEBUG] [Thread-124898] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:01:29.212 [DEBUG] [Thread-124898] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:01:29.212 [DEBUG] [Thread-124898] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T09:01:29.254 [DEBUG] [Thread-124898] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:01:29.254 [DEBUG] [Thread-124898] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:01:29.258 [DEBUG] [Thread-124898] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:01:29.271 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:01:29.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T09:01:29.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T09:01:29.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T09:01:29.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:01:29.287 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T09:01:29.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:01:29.288 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:01:29.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T09:01:29.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.292505 -999.00  +22.60  16.16     19   -1.50 1 1 1 1 1   888    0 27.52 101.87 ----- 15.9 16.2 298.2 23.7 29.4 -28.9 28.8 -26.7 26.9 -25.6 27.2 -26.8
2025-12-31T09:01:29.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T09:01:29.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T09:01:29.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.292505
2025-12-31T09:01:29.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T09:01:29.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T09:01:29.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T09:01:29.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T09:01:29.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T09:01:29.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T09:01:08', tmtdew=29.14, humidity=13.77, cloud=0.0, wind=11.66, temperature=23.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T07:01:12.432', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T09:01:29.290 [DEBUG] [Thread-124898] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:01:29.373 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T09:01:29.385 [DEBUG] [Thread-124901] [transport.py] [_log()] starting thread (client mode): 0xb6b19ae0
2025-12-31T09:01:29.385 [DEBUG] [Thread-124901] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:01:29.400 [DEBUG] [Thread-124901] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T09:01:29.400 [INFO] [Thread-124901] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T09:01:29.407 [DEBUG] [Thread-124901] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:01:29.408 [DEBUG] [Thread-124901] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T09:01:29.408 [DEBUG] [Thread-124901] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:01:29.408 [DEBUG] [Thread-124901] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:01:29.408 [DEBUG] [Thread-124901] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:01:29.408 [DEBUG] [Thread-124901] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:01:29.408 [DEBUG] [Thread-124901] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:01:29.408 [DEBUG] [Thread-124901] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:01:29.408 [DEBUG] [Thread-124901] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:01:29.408 [DEBUG] [Thread-124901] [transport.py] [_log()] client lang: <none>
2025-12-31T09:01:29.408 [DEBUG] [Thread-124901] [transport.py] [_log()] server lang: <none>
2025-12-31T09:01:29.408 [DEBUG] [Thread-124901] [transport.py] [_log()] kex follows: False
2025-12-31T09:01:29.408 [DEBUG] [Thread-124901] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:01:29.408 [DEBUG] [Thread-124901] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:01:29.408 [DEBUG] [Thread-124901] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:01:29.408 [DEBUG] [Thread-124901] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:01:29.408 [DEBUG] [Thread-124901] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:01:29.408 [DEBUG] [Thread-124901] [transport.py] [_log()] Compression: none
2025-12-31T09:01:29.408 [DEBUG] [Thread-124901] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:01:29.465 [DEBUG] [Thread-124901] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:01:29.465 [DEBUG] [Thread-124901] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:01:29.466 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T09:01:29.466 [DEBUG] [Thread-124901] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T09:01:29.467 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:01:29.525 [DEBUG] [Thread-124901] [transport.py] [_log()] userauth is OK
2025-12-31T09:01:29.525 [DEBUG] [Thread-124901] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:01:29.525 [DEBUG] [Thread-124901] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:01:29.525 [DEBUG] [Thread-124901] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T09:01:29.525 [DEBUG] [Thread-124901] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:01:29.549 [INFO] [Thread-124901] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:01:29.549 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T09:01:29.550 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:01:30.383 [DEBUG] [Thread-124901] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:01:30.384 [DEBUG] [Thread-124901] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:01:30.432 [DEBUG] [Thread-124901] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:01:30.432 [DEBUG] [Thread-124901] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:01:30.442 [DEBUG] [Thread-124901] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:01:30.452 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:01:30.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T09:01:30.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T09:01:30.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:01:30.473 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:01:30.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:01:30.483 [DEBUG] [Thread-124901] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:01:37.832 [DEBUG] [Thread-124903 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:01:52.879 [DEBUG] [Thread-124904 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:02:00.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T09:02:00.504 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T09:02:00.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T09:02:01.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 9, 1, 41), 29.32, 13.74, 0.0, 12.83, 22.99, 0, 0, 0, 2, 0, 0),)
2025-12-31T09:02:01.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 09:01:41
2025-12-31T09:02:01.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T09:02:01.500 [DEBUG] [Thread-124905] [transport.py] [_log()] starting thread (client mode): 0xb6b18ee0
2025-12-31T09:02:01.500 [DEBUG] [Thread-124905] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:02:01.515 [DEBUG] [Thread-124905] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T09:02:01.516 [INFO] [Thread-124905] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T09:02:01.517 [DEBUG] [Thread-124905] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:02:01.517 [DEBUG] [Thread-124905] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T09:02:01.517 [DEBUG] [Thread-124905] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:02:01.517 [DEBUG] [Thread-124905] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:02:01.517 [DEBUG] [Thread-124905] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:02:01.517 [DEBUG] [Thread-124905] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:02:01.517 [DEBUG] [Thread-124905] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:02:01.517 [DEBUG] [Thread-124905] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:02:01.517 [DEBUG] [Thread-124905] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:02:01.517 [DEBUG] [Thread-124905] [transport.py] [_log()] client lang: <none>
2025-12-31T09:02:01.517 [DEBUG] [Thread-124905] [transport.py] [_log()] server lang: <none>
2025-12-31T09:02:01.517 [DEBUG] [Thread-124905] [transport.py] [_log()] kex follows: False
2025-12-31T09:02:01.517 [DEBUG] [Thread-124905] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:02:01.517 [DEBUG] [Thread-124905] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:02:01.517 [DEBUG] [Thread-124905] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:02:01.518 [DEBUG] [Thread-124905] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:02:01.518 [DEBUG] [Thread-124905] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:02:01.518 [DEBUG] [Thread-124905] [transport.py] [_log()] Compression: none
2025-12-31T09:02:01.518 [DEBUG] [Thread-124905] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:02:01.527 [DEBUG] [Thread-124905] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:02:01.528 [DEBUG] [Thread-124905] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:02:01.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T09:02:01.529 [DEBUG] [Thread-124905] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T09:02:01.530 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:02:01.531 [DEBUG] [Thread-124905] [transport.py] [_log()] userauth is OK
2025-12-31T09:02:01.531 [DEBUG] [Thread-124905] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:02:01.532 [DEBUG] [Thread-124905] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:02:01.532 [DEBUG] [Thread-124905] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T09:02:01.532 [DEBUG] [Thread-124905] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:02:01.558 [INFO] [Thread-124905] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:02:01.559 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:02:01.947 [DEBUG] [Thread-124907 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:02:02.140 [DEBUG] [Thread-124905] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:02:02.141 [DEBUG] [Thread-124905] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:02:02.142 [DEBUG] [Thread-124905] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T09:02:02.182 [DEBUG] [Thread-124905] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:02:02.182 [DEBUG] [Thread-124905] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:02:02.185 [DEBUG] [Thread-124905] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:02:02.201 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:02:02.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T09:02:02.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T09:02:02.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T09:02:02.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:02:02.211 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T09:02:02.211 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:02:02.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:02:02.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T09:02:02.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.292853 -999.00  +22.70  17.81     19   -2.10 1 1 1 1 1   888    0 26.67 96.93 ----- 13.7 17.8 278.8 22.8 29.3 -29.0 28.8 -28.3 26.7 -27.1 27.3 -26.8
2025-12-31T09:02:02.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T09:02:02.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T09:02:02.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.292853
2025-12-31T09:02:02.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T09:02:02.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T09:02:02.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T09:02:02.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T09:02:02.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T09:02:02.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T09:01:41', tmtdew=29.32, humidity=13.74, cloud=0.0, wind=12.83, temperature=22.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T07:01:42.499', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T09:02:02.214 [DEBUG] [Thread-124905] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:02:02.298 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T09:02:02.311 [DEBUG] [Thread-124909] [transport.py] [_log()] starting thread (client mode): 0xb95d41c0
2025-12-31T09:02:02.311 [DEBUG] [Thread-124909] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:02:02.328 [DEBUG] [Thread-124909] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T09:02:02.328 [INFO] [Thread-124909] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T09:02:02.336 [DEBUG] [Thread-124909] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:02:02.336 [DEBUG] [Thread-124909] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T09:02:02.336 [DEBUG] [Thread-124909] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:02:02.336 [DEBUG] [Thread-124909] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:02:02.336 [DEBUG] [Thread-124909] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:02:02.336 [DEBUG] [Thread-124909] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:02:02.336 [DEBUG] [Thread-124909] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:02:02.336 [DEBUG] [Thread-124909] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:02:02.336 [DEBUG] [Thread-124909] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:02:02.336 [DEBUG] [Thread-124909] [transport.py] [_log()] client lang: <none>
2025-12-31T09:02:02.336 [DEBUG] [Thread-124909] [transport.py] [_log()] server lang: <none>
2025-12-31T09:02:02.336 [DEBUG] [Thread-124909] [transport.py] [_log()] kex follows: False
2025-12-31T09:02:02.336 [DEBUG] [Thread-124909] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:02:02.336 [DEBUG] [Thread-124909] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:02:02.336 [DEBUG] [Thread-124909] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:02:02.337 [DEBUG] [Thread-124909] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:02:02.337 [DEBUG] [Thread-124909] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:02:02.337 [DEBUG] [Thread-124909] [transport.py] [_log()] Compression: none
2025-12-31T09:02:02.337 [DEBUG] [Thread-124909] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:02:02.400 [DEBUG] [Thread-124909] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:02:02.400 [DEBUG] [Thread-124909] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:02:02.401 [DEBUG] [Thread-124909] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T09:02:02.401 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T09:02:02.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:02:02.456 [DEBUG] [Thread-124909] [transport.py] [_log()] userauth is OK
2025-12-31T09:02:02.456 [DEBUG] [Thread-124909] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:02:02.456 [DEBUG] [Thread-124909] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:02:02.456 [DEBUG] [Thread-124909] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T09:02:02.456 [DEBUG] [Thread-124909] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:02:02.475 [INFO] [Thread-124909] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:02:02.476 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T09:02:02.476 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:02:03.330 [DEBUG] [Thread-124909] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:02:03.330 [DEBUG] [Thread-124909] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:02:03.378 [DEBUG] [Thread-124909] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:02:03.378 [DEBUG] [Thread-124909] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:02:03.387 [DEBUG] [Thread-124909] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:02:03.397 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:02:03.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T09:02:03.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T09:02:03.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:02:03.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:02:03.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:02:03.424 [DEBUG] [Thread-124909] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:02:07.915 [DEBUG] [Thread-124911 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:02:13.034 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:02:13.035 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:02:22.966 [DEBUG] [Thread-124912 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:02:33.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T09:02:33.425 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T09:02:33.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T09:02:34.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 9, 2, 13), 29.13, 13.94, 0.0, 13.2, 22.99, 0, 0, 0, 2, 0, 0),)
2025-12-31T09:02:34.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 09:02:13
2025-12-31T09:02:34.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T09:02:34.403 [DEBUG] [Thread-124913] [transport.py] [_log()] starting thread (client mode): 0xb955b130
2025-12-31T09:02:34.403 [DEBUG] [Thread-124913] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:02:34.418 [DEBUG] [Thread-124913] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T09:02:34.419 [INFO] [Thread-124913] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T09:02:34.420 [DEBUG] [Thread-124913] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:02:34.420 [DEBUG] [Thread-124913] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T09:02:34.420 [DEBUG] [Thread-124913] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:02:34.420 [DEBUG] [Thread-124913] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:02:34.420 [DEBUG] [Thread-124913] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:02:34.420 [DEBUG] [Thread-124913] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:02:34.420 [DEBUG] [Thread-124913] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:02:34.420 [DEBUG] [Thread-124913] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:02:34.420 [DEBUG] [Thread-124913] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:02:34.420 [DEBUG] [Thread-124913] [transport.py] [_log()] client lang: <none>
2025-12-31T09:02:34.420 [DEBUG] [Thread-124913] [transport.py] [_log()] server lang: <none>
2025-12-31T09:02:34.420 [DEBUG] [Thread-124913] [transport.py] [_log()] kex follows: False
2025-12-31T09:02:34.420 [DEBUG] [Thread-124913] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:02:34.420 [DEBUG] [Thread-124913] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:02:34.420 [DEBUG] [Thread-124913] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:02:34.421 [DEBUG] [Thread-124913] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:02:34.421 [DEBUG] [Thread-124913] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:02:34.421 [DEBUG] [Thread-124913] [transport.py] [_log()] Compression: none
2025-12-31T09:02:34.421 [DEBUG] [Thread-124913] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:02:34.432 [DEBUG] [Thread-124913] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:02:34.432 [DEBUG] [Thread-124913] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:02:34.433 [DEBUG] [Thread-124913] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T09:02:34.433 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T09:02:34.433 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:02:34.434 [DEBUG] [Thread-124913] [transport.py] [_log()] userauth is OK
2025-12-31T09:02:34.434 [DEBUG] [Thread-124913] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:02:34.434 [DEBUG] [Thread-124913] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:02:34.434 [DEBUG] [Thread-124913] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T09:02:34.434 [DEBUG] [Thread-124913] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:02:34.457 [INFO] [Thread-124913] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:02:34.457 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:02:35.026 [DEBUG] [Thread-124913] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:02:35.026 [DEBUG] [Thread-124913] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:02:35.027 [DEBUG] [Thread-124913] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T09:02:35.067 [DEBUG] [Thread-124913] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:02:35.067 [DEBUG] [Thread-124913] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:02:35.069 [DEBUG] [Thread-124913] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:02:35.078 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:02:35.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T09:02:35.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T09:02:35.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T09:02:35.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:02:35.088 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T09:02:35.088 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:02:35.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:02:35.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T09:02:35.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.293200 -999.00  +22.40   9.12     19   -2.00 1 1 1 1 1   888    0 26.97 93.97 ----- 7.3 9.1 268.6 16.7 29.1 -29.8 28.8 -27.5 26.6 -27.7 27.2 -27.4
2025-12-31T09:02:35.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T09:02:35.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T09:02:35.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.293200
2025-12-31T09:02:35.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T09:02:35.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T09:02:35.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T09:02:35.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T09:02:35.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T09:02:35.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T09:02:13', tmtdew=29.13, humidity=13.94, cloud=0.0, wind=13.2, temperature=22.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T07:02:12.480', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T09:02:35.090 [DEBUG] [Thread-124913] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:02:35.174 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T09:02:35.187 [DEBUG] [Thread-124916] [transport.py] [_log()] starting thread (client mode): 0xb6b28e50
2025-12-31T09:02:35.187 [DEBUG] [Thread-124916] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:02:35.202 [DEBUG] [Thread-124916] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T09:02:35.202 [INFO] [Thread-124916] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T09:02:35.210 [DEBUG] [Thread-124916] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:02:35.210 [DEBUG] [Thread-124916] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T09:02:35.210 [DEBUG] [Thread-124916] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:02:35.210 [DEBUG] [Thread-124916] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:02:35.210 [DEBUG] [Thread-124916] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:02:35.210 [DEBUG] [Thread-124916] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:02:35.210 [DEBUG] [Thread-124916] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:02:35.211 [DEBUG] [Thread-124916] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:02:35.211 [DEBUG] [Thread-124916] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:02:35.211 [DEBUG] [Thread-124916] [transport.py] [_log()] client lang: <none>
2025-12-31T09:02:35.211 [DEBUG] [Thread-124916] [transport.py] [_log()] server lang: <none>
2025-12-31T09:02:35.211 [DEBUG] [Thread-124916] [transport.py] [_log()] kex follows: False
2025-12-31T09:02:35.211 [DEBUG] [Thread-124916] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:02:35.211 [DEBUG] [Thread-124916] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:02:35.211 [DEBUG] [Thread-124916] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:02:35.211 [DEBUG] [Thread-124916] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:02:35.211 [DEBUG] [Thread-124916] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:02:35.211 [DEBUG] [Thread-124916] [transport.py] [_log()] Compression: none
2025-12-31T09:02:35.211 [DEBUG] [Thread-124916] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:02:35.266 [DEBUG] [Thread-124916] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:02:35.266 [DEBUG] [Thread-124916] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:02:35.267 [DEBUG] [Thread-124916] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T09:02:35.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T09:02:35.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:02:35.323 [DEBUG] [Thread-124916] [transport.py] [_log()] userauth is OK
2025-12-31T09:02:35.323 [DEBUG] [Thread-124916] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:02:35.323 [DEBUG] [Thread-124916] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:02:35.323 [DEBUG] [Thread-124916] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T09:02:35.324 [DEBUG] [Thread-124916] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:02:35.342 [INFO] [Thread-124916] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:02:35.342 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T09:02:35.343 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:02:36.145 [DEBUG] [Thread-124916] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:02:36.145 [DEBUG] [Thread-124916] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:02:36.192 [DEBUG] [Thread-124916] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:02:36.192 [DEBUG] [Thread-124916] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:02:36.202 [DEBUG] [Thread-124916] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:02:36.211 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:02:36.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T09:02:36.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T09:02:36.229 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:02:36.230 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:02:36.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:02:36.242 [DEBUG] [Thread-124916] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:02:38.005 [DEBUG] [Thread-124918 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:02:53.055 [DEBUG] [Thread-124919 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:03:01.999 [DEBUG] [Thread-124920 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:03:06.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T09:03:06.253 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T09:03:06.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T09:03:06.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 9, 2, 45), 28.79, 14.06, 0.0, 10.15, 22.99, 0, 0, 0, 2, 0, 0),)
2025-12-31T09:03:06.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 09:02:45
2025-12-31T09:03:07.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T09:03:07.231 [DEBUG] [Thread-124921] [transport.py] [_log()] starting thread (client mode): 0xb6b29360
2025-12-31T09:03:07.231 [DEBUG] [Thread-124921] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:03:07.251 [DEBUG] [Thread-124921] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T09:03:07.251 [INFO] [Thread-124921] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T09:03:07.254 [DEBUG] [Thread-124921] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:03:07.254 [DEBUG] [Thread-124921] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T09:03:07.254 [DEBUG] [Thread-124921] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:03:07.254 [DEBUG] [Thread-124921] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:03:07.254 [DEBUG] [Thread-124921] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:03:07.254 [DEBUG] [Thread-124921] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:03:07.254 [DEBUG] [Thread-124921] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:03:07.254 [DEBUG] [Thread-124921] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:03:07.254 [DEBUG] [Thread-124921] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:03:07.255 [DEBUG] [Thread-124921] [transport.py] [_log()] client lang: <none>
2025-12-31T09:03:07.255 [DEBUG] [Thread-124921] [transport.py] [_log()] server lang: <none>
2025-12-31T09:03:07.255 [DEBUG] [Thread-124921] [transport.py] [_log()] kex follows: False
2025-12-31T09:03:07.255 [DEBUG] [Thread-124921] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:03:07.255 [DEBUG] [Thread-124921] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:03:07.255 [DEBUG] [Thread-124921] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:03:07.255 [DEBUG] [Thread-124921] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:03:07.255 [DEBUG] [Thread-124921] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:03:07.255 [DEBUG] [Thread-124921] [transport.py] [_log()] Compression: none
2025-12-31T09:03:07.255 [DEBUG] [Thread-124921] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:03:07.264 [DEBUG] [Thread-124921] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:03:07.264 [DEBUG] [Thread-124921] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:03:07.265 [DEBUG] [Thread-124921] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T09:03:07.265 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T09:03:07.266 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:03:07.267 [DEBUG] [Thread-124921] [transport.py] [_log()] userauth is OK
2025-12-31T09:03:07.267 [DEBUG] [Thread-124921] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:03:07.267 [DEBUG] [Thread-124921] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:03:07.267 [DEBUG] [Thread-124921] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T09:03:07.267 [DEBUG] [Thread-124921] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:03:07.286 [INFO] [Thread-124921] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:03:07.286 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:03:07.922 [DEBUG] [Thread-124921] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:03:07.922 [DEBUG] [Thread-124921] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:03:07.922 [DEBUG] [Thread-124921] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T09:03:07.963 [DEBUG] [Thread-124921] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:03:07.963 [DEBUG] [Thread-124921] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:03:07.966 [DEBUG] [Thread-124921] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:03:07.973 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:03:07.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T09:03:07.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T09:03:07.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T09:03:07.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:03:07.984 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T09:03:07.984 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:03:07.984 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:03:07.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T09:03:07.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.293547 -999.00  +22.50  10.13     20   -1.30 1 1 1 1 1   888    0 26.61 81.69 ----- 10.2 10.1 275.4 13.4 29.4 -28.3 28.9 -26.8 26.8 -25.8 27.3 -26.1
2025-12-31T09:03:07.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T09:03:07.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T09:03:07.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.293547
2025-12-31T09:03:07.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T09:03:07.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T09:03:07.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T09:03:07.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T09:03:07.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T09:03:07.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T09:02:45', tmtdew=28.79, humidity=14.06, cloud=0.0, wind=10.15, temperature=22.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T07:02:42.461', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T09:03:07.987 [DEBUG] [Thread-124921] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:03:08.070 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T09:03:08.082 [DEBUG] [Thread-124924] [transport.py] [_log()] starting thread (client mode): 0xb6b6b190
2025-12-31T09:03:08.082 [DEBUG] [Thread-124924] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:03:08.083 [DEBUG] [Thread-124925 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:03:08.097 [DEBUG] [Thread-124924] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T09:03:08.097 [INFO] [Thread-124924] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T09:03:08.105 [DEBUG] [Thread-124924] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:03:08.105 [DEBUG] [Thread-124924] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T09:03:08.105 [DEBUG] [Thread-124924] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:03:08.105 [DEBUG] [Thread-124924] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:03:08.105 [DEBUG] [Thread-124924] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:03:08.105 [DEBUG] [Thread-124924] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:03:08.105 [DEBUG] [Thread-124924] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:03:08.105 [DEBUG] [Thread-124924] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:03:08.105 [DEBUG] [Thread-124924] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:03:08.105 [DEBUG] [Thread-124924] [transport.py] [_log()] client lang: <none>
2025-12-31T09:03:08.105 [DEBUG] [Thread-124924] [transport.py] [_log()] server lang: <none>
2025-12-31T09:03:08.105 [DEBUG] [Thread-124924] [transport.py] [_log()] kex follows: False
2025-12-31T09:03:08.105 [DEBUG] [Thread-124924] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:03:08.106 [DEBUG] [Thread-124924] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:03:08.106 [DEBUG] [Thread-124924] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:03:08.106 [DEBUG] [Thread-124924] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:03:08.106 [DEBUG] [Thread-124924] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:03:08.106 [DEBUG] [Thread-124924] [transport.py] [_log()] Compression: none
2025-12-31T09:03:08.106 [DEBUG] [Thread-124924] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:03:08.161 [DEBUG] [Thread-124924] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:03:08.162 [DEBUG] [Thread-124924] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:03:08.162 [DEBUG] [Thread-124924] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T09:03:08.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T09:03:08.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:03:08.223 [DEBUG] [Thread-124924] [transport.py] [_log()] userauth is OK
2025-12-31T09:03:08.224 [DEBUG] [Thread-124924] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:03:08.224 [DEBUG] [Thread-124924] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:03:08.224 [DEBUG] [Thread-124924] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T09:03:08.224 [DEBUG] [Thread-124924] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:03:08.242 [INFO] [Thread-124924] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:03:08.243 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T09:03:08.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:03:09.088 [DEBUG] [Thread-124924] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:03:09.088 [DEBUG] [Thread-124924] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:03:09.136 [DEBUG] [Thread-124924] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:03:09.136 [DEBUG] [Thread-124924] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:03:09.145 [DEBUG] [Thread-124924] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:03:09.155 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:03:09.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T09:03:09.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T09:03:09.177 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:03:09.177 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:03:09.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:03:09.186 [DEBUG] [Thread-124924] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:03:13.175 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:03:13.177 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:03:23.122 [DEBUG] [Thread-124927 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:03:38.154 [DEBUG] [Thread-124928 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:03:39.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T09:03:39.209 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T09:03:39.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T09:03:39.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 9, 3, 17), 29.11, 13.79, 0.0, 9.55, 23.32, 0, 0, 0, 2, 0, 0),)
2025-12-31T09:03:39.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 09:03:17
2025-12-31T09:03:40.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T09:03:40.184 [DEBUG] [Thread-124929] [transport.py] [_log()] starting thread (client mode): 0xb6b29750
2025-12-31T09:03:40.184 [DEBUG] [Thread-124929] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:03:40.205 [DEBUG] [Thread-124929] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T09:03:40.205 [INFO] [Thread-124929] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T09:03:40.208 [DEBUG] [Thread-124929] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:03:40.208 [DEBUG] [Thread-124929] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T09:03:40.208 [DEBUG] [Thread-124929] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:03:40.208 [DEBUG] [Thread-124929] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:03:40.208 [DEBUG] [Thread-124929] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:03:40.208 [DEBUG] [Thread-124929] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:03:40.209 [DEBUG] [Thread-124929] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:03:40.209 [DEBUG] [Thread-124929] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:03:40.209 [DEBUG] [Thread-124929] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:03:40.209 [DEBUG] [Thread-124929] [transport.py] [_log()] client lang: <none>
2025-12-31T09:03:40.209 [DEBUG] [Thread-124929] [transport.py] [_log()] server lang: <none>
2025-12-31T09:03:40.209 [DEBUG] [Thread-124929] [transport.py] [_log()] kex follows: False
2025-12-31T09:03:40.209 [DEBUG] [Thread-124929] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:03:40.209 [DEBUG] [Thread-124929] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:03:40.209 [DEBUG] [Thread-124929] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:03:40.209 [DEBUG] [Thread-124929] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:03:40.209 [DEBUG] [Thread-124929] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:03:40.209 [DEBUG] [Thread-124929] [transport.py] [_log()] Compression: none
2025-12-31T09:03:40.209 [DEBUG] [Thread-124929] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:03:40.217 [DEBUG] [Thread-124929] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:03:40.218 [DEBUG] [Thread-124929] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:03:40.218 [DEBUG] [Thread-124929] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T09:03:40.219 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T09:03:40.219 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:03:40.220 [DEBUG] [Thread-124929] [transport.py] [_log()] userauth is OK
2025-12-31T09:03:40.220 [DEBUG] [Thread-124929] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:03:40.220 [DEBUG] [Thread-124929] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:03:40.220 [DEBUG] [Thread-124929] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T09:03:40.220 [DEBUG] [Thread-124929] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:03:40.238 [INFO] [Thread-124929] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:03:40.239 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:03:40.812 [DEBUG] [Thread-124929] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:03:40.812 [DEBUG] [Thread-124929] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:03:40.812 [DEBUG] [Thread-124929] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T09:03:40.853 [DEBUG] [Thread-124929] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:03:40.853 [DEBUG] [Thread-124929] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:03:40.856 [DEBUG] [Thread-124929] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:03:40.867 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:03:40.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T09:03:40.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T09:03:40.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T09:03:40.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:03:40.879 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T09:03:40.879 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:03:40.880 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:03:40.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T09:03:40.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.293894 -999.00  +22.70  20.23     19   -1.40 1 1 1 1 1   888    0 26.03 70.39 ----- 20.1 20.2 294.4 22.4 29.5 -28.4 28.9 -27.1 26.9 -25.6 27.4 -25.8
2025-12-31T09:03:40.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T09:03:40.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T09:03:40.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.293894
2025-12-31T09:03:40.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T09:03:40.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T09:03:40.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T09:03:40.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T09:03:40.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T09:03:40.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T09:03:17', tmtdew=29.11, humidity=13.79, cloud=0.0, wind=9.55, temperature=23.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T07:03:12.442', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T09:03:40.882 [DEBUG] [Thread-124929] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:03:40.966 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T09:03:40.986 [DEBUG] [Thread-124932] [transport.py] [_log()] starting thread (client mode): 0xb6b19ba0
2025-12-31T09:03:40.986 [DEBUG] [Thread-124932] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:03:41.005 [DEBUG] [Thread-124932] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T09:03:41.005 [INFO] [Thread-124932] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T09:03:41.014 [DEBUG] [Thread-124932] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:03:41.014 [DEBUG] [Thread-124932] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T09:03:41.014 [DEBUG] [Thread-124932] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:03:41.014 [DEBUG] [Thread-124932] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:03:41.014 [DEBUG] [Thread-124932] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:03:41.014 [DEBUG] [Thread-124932] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:03:41.015 [DEBUG] [Thread-124932] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:03:41.015 [DEBUG] [Thread-124932] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:03:41.015 [DEBUG] [Thread-124932] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:03:41.015 [DEBUG] [Thread-124932] [transport.py] [_log()] client lang: <none>
2025-12-31T09:03:41.015 [DEBUG] [Thread-124932] [transport.py] [_log()] server lang: <none>
2025-12-31T09:03:41.015 [DEBUG] [Thread-124932] [transport.py] [_log()] kex follows: False
2025-12-31T09:03:41.015 [DEBUG] [Thread-124932] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:03:41.015 [DEBUG] [Thread-124932] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:03:41.015 [DEBUG] [Thread-124932] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:03:41.015 [DEBUG] [Thread-124932] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:03:41.015 [DEBUG] [Thread-124932] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:03:41.015 [DEBUG] [Thread-124932] [transport.py] [_log()] Compression: none
2025-12-31T09:03:41.015 [DEBUG] [Thread-124932] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:03:41.080 [DEBUG] [Thread-124932] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:03:41.081 [DEBUG] [Thread-124932] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:03:41.082 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T09:03:41.082 [DEBUG] [Thread-124932] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T09:03:41.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:03:41.142 [DEBUG] [Thread-124932] [transport.py] [_log()] userauth is OK
2025-12-31T09:03:41.142 [DEBUG] [Thread-124932] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:03:41.143 [DEBUG] [Thread-124932] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:03:41.143 [DEBUG] [Thread-124932] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T09:03:41.143 [DEBUG] [Thread-124932] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:03:41.168 [INFO] [Thread-124932] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:03:41.168 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T09:03:41.169 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:03:42.066 [DEBUG] [Thread-124932] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:03:42.066 [DEBUG] [Thread-124932] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:03:42.114 [DEBUG] [Thread-124932] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:03:42.115 [DEBUG] [Thread-124932] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:03:42.125 [DEBUG] [Thread-124932] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:03:42.138 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:03:42.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T09:03:42.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-12-31T09:03:42.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:03:42.168 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:03:42.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:03:42.181 [DEBUG] [Thread-124932] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:03:53.190 [DEBUG] [Thread-124934 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:04:02.059 [DEBUG] [Thread-124935 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:04:08.239 [DEBUG] [Thread-124936 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:04:12.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T09:04:12.199 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T09:04:12.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T09:04:12.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 9, 3, 49), 29.72, 13.16, 0.0, 12.6, 23.27, 0, 0, 0, 2, 0, 0),)
2025-12-31T09:04:12.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 09:03:49
2025-12-31T09:04:13.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T09:04:13.221 [DEBUG] [Thread-124937] [transport.py] [_log()] starting thread (client mode): 0xb955b7c0
2025-12-31T09:04:13.221 [DEBUG] [Thread-124937] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:04:13.242 [DEBUG] [Thread-124937] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T09:04:13.243 [INFO] [Thread-124937] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T09:04:13.246 [DEBUG] [Thread-124937] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:04:13.246 [DEBUG] [Thread-124937] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T09:04:13.246 [DEBUG] [Thread-124937] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:04:13.246 [DEBUG] [Thread-124937] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:04:13.246 [DEBUG] [Thread-124937] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:04:13.246 [DEBUG] [Thread-124937] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:04:13.246 [DEBUG] [Thread-124937] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:04:13.246 [DEBUG] [Thread-124937] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:04:13.246 [DEBUG] [Thread-124937] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:04:13.246 [DEBUG] [Thread-124937] [transport.py] [_log()] client lang: <none>
2025-12-31T09:04:13.246 [DEBUG] [Thread-124937] [transport.py] [_log()] server lang: <none>
2025-12-31T09:04:13.246 [DEBUG] [Thread-124937] [transport.py] [_log()] kex follows: False
2025-12-31T09:04:13.246 [DEBUG] [Thread-124937] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:04:13.246 [DEBUG] [Thread-124937] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:04:13.247 [DEBUG] [Thread-124937] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:04:13.247 [DEBUG] [Thread-124937] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:04:13.247 [DEBUG] [Thread-124937] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:04:13.247 [DEBUG] [Thread-124937] [transport.py] [_log()] Compression: none
2025-12-31T09:04:13.247 [DEBUG] [Thread-124937] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:04:13.261 [DEBUG] [Thread-124937] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:04:13.261 [DEBUG] [Thread-124937] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:04:13.261 [DEBUG] [Thread-124937] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T09:04:13.262 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T09:04:13.262 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:04:13.262 [DEBUG] [Thread-124937] [transport.py] [_log()] userauth is OK
2025-12-31T09:04:13.262 [DEBUG] [Thread-124937] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:04:13.262 [DEBUG] [Thread-124937] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:04:13.262 [DEBUG] [Thread-124937] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T09:04:13.262 [DEBUG] [Thread-124937] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:04:13.275 [INFO] [Thread-124937] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:04:13.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:04:13.317 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:04:13.318 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:04:14.044 [DEBUG] [Thread-124937] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:04:14.045 [DEBUG] [Thread-124937] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:04:14.045 [DEBUG] [Thread-124937] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T09:04:14.085 [DEBUG] [Thread-124937] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:04:14.086 [DEBUG] [Thread-124937] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:04:14.087 [DEBUG] [Thread-124937] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:04:14.101 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:04:14.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T09:04:14.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T09:04:14.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T09:04:14.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:04:14.106 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T09:04:14.106 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:04:14.106 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:04:14.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T09:04:14.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.293894 -999.00  +22.70  20.23     19   -1.40 1 1 1 1 1   888    0 26.03 70.39 ----- 20.1 20.2 294.4 22.4 29.5 -28.4 28.9 -27.1 26.9 -25.6 27.4 -25.8
2025-12-31T09:04:14.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T09:04:14.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T09:04:14.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.293894
2025-12-31T09:04:14.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T09:04:14.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T09:04:14.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T09:04:14.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T09:04:14.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T09:04:14.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T09:03:49', tmtdew=29.72, humidity=13.16, cloud=0.0, wind=12.6, temperature=23.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T07:03:12.442', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T09:04:14.106 [DEBUG] [Thread-124937] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:04:14.181 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T09:04:14.193 [DEBUG] [Thread-124940] [transport.py] [_log()] starting thread (client mode): 0xb95d48e0
2025-12-31T09:04:14.193 [DEBUG] [Thread-124940] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:04:14.208 [DEBUG] [Thread-124940] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T09:04:14.208 [INFO] [Thread-124940] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T09:04:14.215 [DEBUG] [Thread-124940] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:04:14.215 [DEBUG] [Thread-124940] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T09:04:14.215 [DEBUG] [Thread-124940] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:04:14.215 [DEBUG] [Thread-124940] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:04:14.215 [DEBUG] [Thread-124940] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:04:14.215 [DEBUG] [Thread-124940] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:04:14.215 [DEBUG] [Thread-124940] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:04:14.215 [DEBUG] [Thread-124940] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:04:14.215 [DEBUG] [Thread-124940] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:04:14.215 [DEBUG] [Thread-124940] [transport.py] [_log()] client lang: <none>
2025-12-31T09:04:14.215 [DEBUG] [Thread-124940] [transport.py] [_log()] server lang: <none>
2025-12-31T09:04:14.215 [DEBUG] [Thread-124940] [transport.py] [_log()] kex follows: False
2025-12-31T09:04:14.215 [DEBUG] [Thread-124940] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:04:14.215 [DEBUG] [Thread-124940] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:04:14.215 [DEBUG] [Thread-124940] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:04:14.216 [DEBUG] [Thread-124940] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:04:14.216 [DEBUG] [Thread-124940] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:04:14.216 [DEBUG] [Thread-124940] [transport.py] [_log()] Compression: none
2025-12-31T09:04:14.216 [DEBUG] [Thread-124940] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:04:14.276 [DEBUG] [Thread-124940] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:04:14.276 [DEBUG] [Thread-124940] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:04:14.276 [DEBUG] [Thread-124940] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T09:04:14.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T09:04:14.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:04:14.333 [DEBUG] [Thread-124940] [transport.py] [_log()] userauth is OK
2025-12-31T09:04:14.333 [DEBUG] [Thread-124940] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:04:14.333 [DEBUG] [Thread-124940] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:04:14.333 [DEBUG] [Thread-124940] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T09:04:14.333 [DEBUG] [Thread-124940] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:04:14.350 [INFO] [Thread-124940] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:04:14.350 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T09:04:14.350 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:04:15.185 [DEBUG] [Thread-124940] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:04:15.185 [DEBUG] [Thread-124940] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:04:15.232 [DEBUG] [Thread-124940] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:04:15.232 [DEBUG] [Thread-124940] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:04:15.241 [DEBUG] [Thread-124940] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:04:15.249 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:04: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-12-31T09:04: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-12-31T09:04:15.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:04:15.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:04:15.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:04:15.273 [DEBUG] [Thread-124940] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:04:23.268 [DEBUG] [Thread-124942 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:04:38.313 [DEBUG] [Thread-124943 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:04:45.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T09:04:45.283 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T09:04:45.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T09:04:45.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 9, 4, 21), 29.64, 13.21, 0.0, 12.25, 23.12, 0, 0, 0, 2, 0, 0),)
2025-12-31T09:04:45.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 09:04:21
2025-12-31T09:04:46.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T09:04:46.275 [DEBUG] [Thread-124944] [transport.py] [_log()] starting thread (client mode): 0xb6b6b340
2025-12-31T09:04:46.275 [DEBUG] [Thread-124944] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:04:46.296 [DEBUG] [Thread-124944] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T09:04:46.296 [INFO] [Thread-124944] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T09:04:46.299 [DEBUG] [Thread-124944] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:04:46.299 [DEBUG] [Thread-124944] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T09:04:46.299 [DEBUG] [Thread-124944] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:04:46.299 [DEBUG] [Thread-124944] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:04:46.299 [DEBUG] [Thread-124944] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:04:46.299 [DEBUG] [Thread-124944] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:04:46.299 [DEBUG] [Thread-124944] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:04:46.299 [DEBUG] [Thread-124944] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:04:46.299 [DEBUG] [Thread-124944] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:04:46.299 [DEBUG] [Thread-124944] [transport.py] [_log()] client lang: <none>
2025-12-31T09:04:46.299 [DEBUG] [Thread-124944] [transport.py] [_log()] server lang: <none>
2025-12-31T09:04:46.299 [DEBUG] [Thread-124944] [transport.py] [_log()] kex follows: False
2025-12-31T09:04:46.299 [DEBUG] [Thread-124944] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:04:46.299 [DEBUG] [Thread-124944] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:04:46.300 [DEBUG] [Thread-124944] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:04:46.300 [DEBUG] [Thread-124944] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:04:46.300 [DEBUG] [Thread-124944] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:04:46.300 [DEBUG] [Thread-124944] [transport.py] [_log()] Compression: none
2025-12-31T09:04:46.300 [DEBUG] [Thread-124944] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:04:46.322 [DEBUG] [Thread-124944] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:04:46.323 [DEBUG] [Thread-124944] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:04:46.323 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T09:04:46.324 [DEBUG] [Thread-124944] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T09:04:46.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:04:46.365 [DEBUG] [Thread-124944] [transport.py] [_log()] userauth is OK
2025-12-31T09:04:46.365 [DEBUG] [Thread-124944] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:04:46.365 [DEBUG] [Thread-124944] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:04:46.365 [DEBUG] [Thread-124944] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T09:04:46.365 [DEBUG] [Thread-124944] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:04:46.403 [INFO] [Thread-124944] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:04:46.404 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:04:47.035 [DEBUG] [Thread-124944] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:04:47.035 [DEBUG] [Thread-124944] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:04:47.036 [DEBUG] [Thread-124944] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T09:04:47.076 [DEBUG] [Thread-124944] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:04:47.076 [DEBUG] [Thread-124944] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:04:47.078 [DEBUG] [Thread-124944] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:04:47.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:04:47.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T09:04:47.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T09:04:47.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T09:04:47.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:04:47.097 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T09:04:47.097 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:04:47.097 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:04:47.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T09:04:47.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.294589 -999.00  +23.00  13.37     19   -1.60 1 1 1 1 1   888    0 26.08 68.30 ----- 13.6 13.4 305.8 18.0 29.6 -28.1 29.0 -26.9 27.1 -26.4 27.5 -26.0
2025-12-31T09:04:47.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T09:04:47.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T09:04:47.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.294589
2025-12-31T09:04:47.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T09:04:47.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T09:04:47.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T09:04:47.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T09:04:47.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T09:04:47.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T09:04:21', tmtdew=29.64, humidity=13.21, cloud=0.0, wind=12.25, temperature=23.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T07:04:12.490', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T09:04:47.098 [DEBUG] [Thread-124944] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:04:47.176 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T09:04:47.186 [DEBUG] [Thread-124947] [transport.py] [_log()] starting thread (client mode): 0xb6b4b670
2025-12-31T09:04:47.186 [DEBUG] [Thread-124947] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:04:47.201 [DEBUG] [Thread-124947] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T09:04:47.201 [INFO] [Thread-124947] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T09:04:47.209 [DEBUG] [Thread-124947] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:04:47.209 [DEBUG] [Thread-124947] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T09:04:47.209 [DEBUG] [Thread-124947] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:04:47.209 [DEBUG] [Thread-124947] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:04:47.209 [DEBUG] [Thread-124947] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:04:47.209 [DEBUG] [Thread-124947] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:04:47.209 [DEBUG] [Thread-124947] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:04:47.209 [DEBUG] [Thread-124947] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:04:47.209 [DEBUG] [Thread-124947] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:04:47.209 [DEBUG] [Thread-124947] [transport.py] [_log()] client lang: <none>
2025-12-31T09:04:47.209 [DEBUG] [Thread-124947] [transport.py] [_log()] server lang: <none>
2025-12-31T09:04:47.209 [DEBUG] [Thread-124947] [transport.py] [_log()] kex follows: False
2025-12-31T09:04:47.209 [DEBUG] [Thread-124947] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:04:47.209 [DEBUG] [Thread-124947] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:04:47.210 [DEBUG] [Thread-124947] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:04:47.210 [DEBUG] [Thread-124947] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:04:47.210 [DEBUG] [Thread-124947] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:04:47.210 [DEBUG] [Thread-124947] [transport.py] [_log()] Compression: none
2025-12-31T09:04:47.210 [DEBUG] [Thread-124947] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:04:47.268 [DEBUG] [Thread-124947] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:04:47.269 [DEBUG] [Thread-124947] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:04:47.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T09:04:47.270 [DEBUG] [Thread-124947] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T09:04:47.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:04:47.328 [DEBUG] [Thread-124947] [transport.py] [_log()] userauth is OK
2025-12-31T09:04:47.329 [DEBUG] [Thread-124947] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:04:47.329 [DEBUG] [Thread-124947] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:04:47.329 [DEBUG] [Thread-124947] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T09:04:47.329 [DEBUG] [Thread-124947] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:04:47.348 [INFO] [Thread-124947] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:04:47.348 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T09:04:47.348 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:04:48.205 [DEBUG] [Thread-124947] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:04:48.205 [DEBUG] [Thread-124947] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:04:48.254 [DEBUG] [Thread-124947] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:04:48.254 [DEBUG] [Thread-124947] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:04:48.263 [DEBUG] [Thread-124947] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:04:48.272 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:04: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')
2025-12-31T09:04:48.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T09:04:48.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:04:48.291 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:04:48.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:04:48.300 [DEBUG] [Thread-124947] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:04:53.351 [DEBUG] [Thread-124949 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:05:02.123 [DEBUG] [Thread-124950 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:05:08.393 [DEBUG] [Thread-124951 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:05:13.458 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:05:13.459 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:05:18.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T09:05:18.313 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T09:05:18.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T09:05:19.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 9, 4, 53), 29.31, 13.49, 0.0, 15.4, 23.32, 0, 0, 0, 2, 0, 0),)
2025-12-31T09:05:19.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 09:04:53
2025-12-31T09:05:19.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T09:05:19.291 [DEBUG] [Thread-124952] [transport.py] [_log()] starting thread (client mode): 0xb6b6af20
2025-12-31T09:05:19.291 [DEBUG] [Thread-124952] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:05:19.313 [DEBUG] [Thread-124952] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T09:05:19.313 [INFO] [Thread-124952] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T09:05:19.316 [DEBUG] [Thread-124952] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:05:19.316 [DEBUG] [Thread-124952] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T09:05:19.317 [DEBUG] [Thread-124952] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:05:19.317 [DEBUG] [Thread-124952] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:05:19.317 [DEBUG] [Thread-124952] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:05:19.317 [DEBUG] [Thread-124952] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:05:19.317 [DEBUG] [Thread-124952] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:05:19.317 [DEBUG] [Thread-124952] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:05:19.317 [DEBUG] [Thread-124952] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:05:19.317 [DEBUG] [Thread-124952] [transport.py] [_log()] client lang: <none>
2025-12-31T09:05:19.317 [DEBUG] [Thread-124952] [transport.py] [_log()] server lang: <none>
2025-12-31T09:05:19.317 [DEBUG] [Thread-124952] [transport.py] [_log()] kex follows: False
2025-12-31T09:05:19.317 [DEBUG] [Thread-124952] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:05:19.317 [DEBUG] [Thread-124952] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:05:19.317 [DEBUG] [Thread-124952] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:05:19.317 [DEBUG] [Thread-124952] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:05:19.317 [DEBUG] [Thread-124952] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:05:19.317 [DEBUG] [Thread-124952] [transport.py] [_log()] Compression: none
2025-12-31T09:05:19.317 [DEBUG] [Thread-124952] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:05:19.333 [DEBUG] [Thread-124952] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:05:19.334 [DEBUG] [Thread-124952] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:05:19.334 [DEBUG] [Thread-124952] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T09:05:19.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T09:05:19.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:05:19.336 [DEBUG] [Thread-124952] [transport.py] [_log()] userauth is OK
2025-12-31T09:05:19.336 [DEBUG] [Thread-124952] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:05:19.337 [DEBUG] [Thread-124952] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:05:19.337 [DEBUG] [Thread-124952] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T09:05:19.337 [DEBUG] [Thread-124952] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:05:19.373 [INFO] [Thread-124952] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:05:19.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:05:20.044 [DEBUG] [Thread-124952] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:05:20.045 [DEBUG] [Thread-124952] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:05:20.045 [DEBUG] [Thread-124952] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T09:05:20.086 [DEBUG] [Thread-124952] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:05:20.086 [DEBUG] [Thread-124952] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:05:20.090 [DEBUG] [Thread-124952] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:05:20.101 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:05:20.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T09:05:20.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T09:05:20.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T09:05:20.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:05:20.112 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T09:05:20.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:05:20.113 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:05:20.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T09:05:20.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.294936 -999.00  +22.80  12.56     19   -1.70 1 1 1 1 1   888    0 26.05 70.03 ----- 9.7 12.6 308.8 20.9 29.7 -27.8 29.1 -27.3 27.1 -27.4 27.6 -26.2
2025-12-31T09:05:20.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T09:05:20.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T09:05:20.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.294936
2025-12-31T09:05:20.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T09:05:20.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T09:05:20.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T09:05:20.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T09:05:20.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T09:05:20.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T09:04:53', tmtdew=29.31, humidity=13.49, cloud=0.0, wind=15.4, temperature=23.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T07:04:42.470', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T09:05:20.115 [DEBUG] [Thread-124952] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:05:20.198 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T09:05:20.215 [DEBUG] [Thread-124955] [transport.py] [_log()] starting thread (client mode): 0xb955b7c0
2025-12-31T09:05:20.215 [DEBUG] [Thread-124955] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:05:20.230 [DEBUG] [Thread-124955] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T09:05:20.231 [INFO] [Thread-124955] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T09:05:20.238 [DEBUG] [Thread-124955] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:05:20.238 [DEBUG] [Thread-124955] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T09:05:20.238 [DEBUG] [Thread-124955] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:05:20.238 [DEBUG] [Thread-124955] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:05:20.238 [DEBUG] [Thread-124955] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:05:20.239 [DEBUG] [Thread-124955] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:05:20.239 [DEBUG] [Thread-124955] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:05:20.239 [DEBUG] [Thread-124955] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:05:20.239 [DEBUG] [Thread-124955] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:05:20.239 [DEBUG] [Thread-124955] [transport.py] [_log()] client lang: <none>
2025-12-31T09:05:20.239 [DEBUG] [Thread-124955] [transport.py] [_log()] server lang: <none>
2025-12-31T09:05:20.239 [DEBUG] [Thread-124955] [transport.py] [_log()] kex follows: False
2025-12-31T09:05:20.239 [DEBUG] [Thread-124955] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:05:20.239 [DEBUG] [Thread-124955] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:05:20.239 [DEBUG] [Thread-124955] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:05:20.239 [DEBUG] [Thread-124955] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:05:20.239 [DEBUG] [Thread-124955] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:05:20.239 [DEBUG] [Thread-124955] [transport.py] [_log()] Compression: none
2025-12-31T09:05:20.239 [DEBUG] [Thread-124955] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:05:20.296 [DEBUG] [Thread-124955] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:05:20.296 [DEBUG] [Thread-124955] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:05:20.297 [DEBUG] [Thread-124955] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T09:05:20.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T09:05:20.298 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:05:20.356 [DEBUG] [Thread-124955] [transport.py] [_log()] userauth is OK
2025-12-31T09:05:20.356 [DEBUG] [Thread-124955] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:05:20.356 [DEBUG] [Thread-124955] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:05:20.356 [DEBUG] [Thread-124955] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T09:05:20.356 [DEBUG] [Thread-124955] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:05:20.375 [INFO] [Thread-124955] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:05:20.375 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T09:05:20.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:05:21.212 [DEBUG] [Thread-124955] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:05:21.213 [DEBUG] [Thread-124955] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:05:21.261 [DEBUG] [Thread-124955] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:05:21.261 [DEBUG] [Thread-124955] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:05:21.270 [DEBUG] [Thread-124955] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:05:21.280 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:05: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-12-31T09:05:21.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T09:05:21.298 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:05:21.298 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:05:21.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:05:21.307 [DEBUG] [Thread-124955] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:05:23.430 [DEBUG] [Thread-124957 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:05:38.478 [DEBUG] [Thread-124958 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:05:51.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T09:05:51.324 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T09:05:51.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T09:05:52.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 9, 5, 25), 29.79, 13.06, 0.0, 15.53, 23.47, 0, 0, 0, 2, 0, 0),)
2025-12-31T09:05:52.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 09:05:25
2025-12-31T09:05:52.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T09:05:52.323 [DEBUG] [Thread-124959] [transport.py] [_log()] starting thread (client mode): 0xb9558190
2025-12-31T09:05:52.323 [DEBUG] [Thread-124959] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:05:52.343 [DEBUG] [Thread-124959] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T09:05:52.343 [INFO] [Thread-124959] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T09:05:52.346 [DEBUG] [Thread-124959] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:05:52.346 [DEBUG] [Thread-124959] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T09:05:52.346 [DEBUG] [Thread-124959] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:05:52.346 [DEBUG] [Thread-124959] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:05:52.346 [DEBUG] [Thread-124959] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:05:52.347 [DEBUG] [Thread-124959] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:05:52.347 [DEBUG] [Thread-124959] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:05:52.347 [DEBUG] [Thread-124959] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:05:52.347 [DEBUG] [Thread-124959] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:05:52.347 [DEBUG] [Thread-124959] [transport.py] [_log()] client lang: <none>
2025-12-31T09:05:52.347 [DEBUG] [Thread-124959] [transport.py] [_log()] server lang: <none>
2025-12-31T09:05:52.347 [DEBUG] [Thread-124959] [transport.py] [_log()] kex follows: False
2025-12-31T09:05:52.347 [DEBUG] [Thread-124959] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:05:52.347 [DEBUG] [Thread-124959] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:05:52.347 [DEBUG] [Thread-124959] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:05:52.347 [DEBUG] [Thread-124959] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:05:52.347 [DEBUG] [Thread-124959] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:05:52.347 [DEBUG] [Thread-124959] [transport.py] [_log()] Compression: none
2025-12-31T09:05:52.347 [DEBUG] [Thread-124959] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:05:52.364 [DEBUG] [Thread-124959] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:05:52.365 [DEBUG] [Thread-124959] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:05:52.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T09:05:52.366 [DEBUG] [Thread-124959] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T09:05:52.367 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:05:52.409 [DEBUG] [Thread-124959] [transport.py] [_log()] userauth is OK
2025-12-31T09:05:52.409 [DEBUG] [Thread-124959] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:05:52.409 [DEBUG] [Thread-124959] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:05:52.409 [DEBUG] [Thread-124959] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T09:05:52.409 [DEBUG] [Thread-124959] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:05:52.430 [INFO] [Thread-124959] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:05:52.431 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:05:53.066 [DEBUG] [Thread-124959] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:05:53.066 [DEBUG] [Thread-124959] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:05:53.067 [DEBUG] [Thread-124959] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T09:05:53.107 [DEBUG] [Thread-124959] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:05:53.107 [DEBUG] [Thread-124959] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:05:53.111 [DEBUG] [Thread-124959] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:05:53.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:05:53.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T09:05:53.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T09:05:53.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T09:05:53.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:05:53.136 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T09:05:53.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:05:53.136 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:05:53.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T09:05:53.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.295283 -999.00  +22.70  16.21     19   -1.60 1 1 1 1 1   888    0 25.53 58.96 ----- 13.9 16.2 310.8 19.1 29.7 -27.7 29.1 -27.6 27.2 -26.3 27.6 -26.1
2025-12-31T09:05:53.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T09:05:53.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T09:05:53.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.295283
2025-12-31T09:05:53.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T09:05:53.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T09:05:53.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T09:05:53.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T09:05:53.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T09:05:53.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T09:05:25', tmtdew=29.79, humidity=13.06, cloud=0.0, wind=15.53, temperature=23.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T07:05:12.451', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T09:05:53.139 [DEBUG] [Thread-124959] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:05:53.223 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T09:05:53.235 [DEBUG] [Thread-124962] [transport.py] [_log()] starting thread (client mode): 0xb9559ab0
2025-12-31T09:05:53.235 [DEBUG] [Thread-124962] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:05:53.251 [DEBUG] [Thread-124962] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T09:05:53.251 [INFO] [Thread-124962] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T09:05:53.259 [DEBUG] [Thread-124962] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:05:53.259 [DEBUG] [Thread-124962] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T09:05:53.259 [DEBUG] [Thread-124962] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:05:53.259 [DEBUG] [Thread-124962] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:05:53.259 [DEBUG] [Thread-124962] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:05:53.259 [DEBUG] [Thread-124962] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:05:53.259 [DEBUG] [Thread-124962] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:05:53.259 [DEBUG] [Thread-124962] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:05:53.259 [DEBUG] [Thread-124962] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:05:53.259 [DEBUG] [Thread-124962] [transport.py] [_log()] client lang: <none>
2025-12-31T09:05:53.259 [DEBUG] [Thread-124962] [transport.py] [_log()] server lang: <none>
2025-12-31T09:05:53.260 [DEBUG] [Thread-124962] [transport.py] [_log()] kex follows: False
2025-12-31T09:05:53.260 [DEBUG] [Thread-124962] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:05:53.260 [DEBUG] [Thread-124962] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:05:53.260 [DEBUG] [Thread-124962] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:05:53.260 [DEBUG] [Thread-124962] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:05:53.260 [DEBUG] [Thread-124962] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:05:53.260 [DEBUG] [Thread-124962] [transport.py] [_log()] Compression: none
2025-12-31T09:05:53.260 [DEBUG] [Thread-124962] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:05:53.319 [DEBUG] [Thread-124962] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:05:53.320 [DEBUG] [Thread-124962] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:05:53.321 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T09:05:53.321 [DEBUG] [Thread-124962] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T09:05:53.322 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:05:53.375 [DEBUG] [Thread-124962] [transport.py] [_log()] userauth is OK
2025-12-31T09:05:53.376 [DEBUG] [Thread-124962] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:05:53.376 [DEBUG] [Thread-124962] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:05:53.376 [DEBUG] [Thread-124962] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T09:05:53.376 [DEBUG] [Thread-124962] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:05:53.396 [INFO] [Thread-124962] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:05:53.397 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T09:05:53.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:05:53.518 [DEBUG] [Thread-124964 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:05:54.274 [DEBUG] [Thread-124962] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:05:54.275 [DEBUG] [Thread-124962] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:05:54.323 [DEBUG] [Thread-124962] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:05:54.323 [DEBUG] [Thread-124962] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:05:54.333 [DEBUG] [Thread-124962] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:05:54.342 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:05:54.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T09:05:54.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T09:05:54.361 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:05:54.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:05:54.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:05:54.370 [DEBUG] [Thread-124962] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:06:02.186 [DEBUG] [Thread-124965 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:06:08.568 [DEBUG] [Thread-124966 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:06:13.606 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:06:13.608 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:06:23.602 [DEBUG] [Thread-124967 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:06:24.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T09:06:24.392 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T09:06:24.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-12-31T09:06:25.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 9, 5, 57), 30.26, 12.91, 0.0, 14.27, 23.83, 0, 0, 0, 2, 0, 0),)
2025-12-31T09:06:25.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 09:05:57
2025-12-31T09:06:25.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T09:06:25.380 [DEBUG] [Thread-124968] [transport.py] [_log()] starting thread (client mode): 0xb6b6b5e0
2025-12-31T09:06:25.380 [DEBUG] [Thread-124968] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:06:25.400 [DEBUG] [Thread-124968] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T09:06:25.401 [INFO] [Thread-124968] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T09:06:25.403 [DEBUG] [Thread-124968] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:06:25.404 [DEBUG] [Thread-124968] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T09:06:25.404 [DEBUG] [Thread-124968] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:06:25.404 [DEBUG] [Thread-124968] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:06:25.404 [DEBUG] [Thread-124968] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:06:25.404 [DEBUG] [Thread-124968] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:06:25.404 [DEBUG] [Thread-124968] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:06:25.404 [DEBUG] [Thread-124968] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:06:25.404 [DEBUG] [Thread-124968] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:06:25.404 [DEBUG] [Thread-124968] [transport.py] [_log()] client lang: <none>
2025-12-31T09:06:25.404 [DEBUG] [Thread-124968] [transport.py] [_log()] server lang: <none>
2025-12-31T09:06:25.404 [DEBUG] [Thread-124968] [transport.py] [_log()] kex follows: False
2025-12-31T09:06:25.404 [DEBUG] [Thread-124968] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:06:25.404 [DEBUG] [Thread-124968] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:06:25.404 [DEBUG] [Thread-124968] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:06:25.405 [DEBUG] [Thread-124968] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:06:25.405 [DEBUG] [Thread-124968] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:06:25.405 [DEBUG] [Thread-124968] [transport.py] [_log()] Compression: none
2025-12-31T09:06:25.405 [DEBUG] [Thread-124968] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:06:25.416 [DEBUG] [Thread-124968] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:06:25.416 [DEBUG] [Thread-124968] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:06:25.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T09:06:25.417 [DEBUG] [Thread-124968] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T09:06:25.418 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:06:25.419 [DEBUG] [Thread-124968] [transport.py] [_log()] userauth is OK
2025-12-31T09:06:25.419 [DEBUG] [Thread-124968] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:06:25.419 [DEBUG] [Thread-124968] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:06:25.419 [DEBUG] [Thread-124968] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T09:06:25.420 [DEBUG] [Thread-124968] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:06:25.443 [INFO] [Thread-124968] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:06:25.444 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:06:26.050 [DEBUG] [Thread-124968] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:06:26.050 [DEBUG] [Thread-124968] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:06:26.050 [DEBUG] [Thread-124968] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T09:06:26.091 [DEBUG] [Thread-124968] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:06:26.091 [DEBUG] [Thread-124968] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:06:26.095 [DEBUG] [Thread-124968] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:06:26.106 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:06:26.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T09:06:26.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T09:06:26.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T09:06:26.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:06:26.120 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T09:06:26.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:06:26.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:06:26.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T09:06:26.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.295630 -999.00  +22.70  16.24     19   -1.40 1 1 1 1 1   888    0 26.06 59.59 ----- 17.2 16.2 283.2 19.4 29.7 -27.7 29.1 -27.2 27.1 -26.8 27.6 -26.2
2025-12-31T09:06:26.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T09:06:26.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T09:06:26.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.295630
2025-12-31T09:06:26.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T09:06:26.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T09:06:26.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T09:06:26.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T09:06:26.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T09:06:26.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T09:05:57', tmtdew=30.26, humidity=12.91, cloud=0.0, wind=14.27, temperature=23.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T07:05:42.432', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T09:06:26.122 [DEBUG] [Thread-124968] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:06:26.206 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T09:06:26.217 [DEBUG] [Thread-124971] [transport.py] [_log()] starting thread (client mode): 0xb6b489d0
2025-12-31T09:06:26.218 [DEBUG] [Thread-124971] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:06:26.232 [DEBUG] [Thread-124971] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T09:06:26.232 [INFO] [Thread-124971] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T09:06:26.240 [DEBUG] [Thread-124971] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:06:26.240 [DEBUG] [Thread-124971] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T09:06:26.240 [DEBUG] [Thread-124971] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:06:26.240 [DEBUG] [Thread-124971] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:06:26.240 [DEBUG] [Thread-124971] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:06:26.241 [DEBUG] [Thread-124971] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:06:26.241 [DEBUG] [Thread-124971] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:06:26.241 [DEBUG] [Thread-124971] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:06:26.241 [DEBUG] [Thread-124971] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:06:26.241 [DEBUG] [Thread-124971] [transport.py] [_log()] client lang: <none>
2025-12-31T09:06:26.241 [DEBUG] [Thread-124971] [transport.py] [_log()] server lang: <none>
2025-12-31T09:06:26.241 [DEBUG] [Thread-124971] [transport.py] [_log()] kex follows: False
2025-12-31T09:06:26.241 [DEBUG] [Thread-124971] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:06:26.241 [DEBUG] [Thread-124971] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:06:26.242 [DEBUG] [Thread-124971] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:06:26.242 [DEBUG] [Thread-124971] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:06:26.242 [DEBUG] [Thread-124971] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:06:26.242 [DEBUG] [Thread-124971] [transport.py] [_log()] Compression: none
2025-12-31T09:06:26.242 [DEBUG] [Thread-124971] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:06:26.303 [DEBUG] [Thread-124971] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:06:26.303 [DEBUG] [Thread-124971] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:06:26.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T09:06:26.304 [DEBUG] [Thread-124971] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T09:06:26.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:06:26.359 [DEBUG] [Thread-124971] [transport.py] [_log()] userauth is OK
2025-12-31T09:06:26.359 [DEBUG] [Thread-124971] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:06:26.359 [DEBUG] [Thread-124971] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:06:26.359 [DEBUG] [Thread-124971] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T09:06:26.359 [DEBUG] [Thread-124971] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:06:26.379 [INFO] [Thread-124971] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:06:26.379 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T09:06:26.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:06:27.196 [DEBUG] [Thread-124971] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:06:27.196 [DEBUG] [Thread-124971] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:06:27.244 [DEBUG] [Thread-124971] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:06:27.244 [DEBUG] [Thread-124971] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:06:27.253 [DEBUG] [Thread-124971] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:06:27.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:06:27.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T09:06:27.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T09:06:27.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:06:27.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:06:27.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:06:27.290 [DEBUG] [Thread-124971] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:06:38.637 [DEBUG] [Thread-124973 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:06:53.689 [DEBUG] [Thread-124974 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:06:57.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T09:06:57.297 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T09:06:57.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T09:06:58.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 9, 6, 29), 30.68, 12.53, 0.0, 14.42, 23.78, 0, 0, 0, 2, 0, 0),)
2025-12-31T09:06:58.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 09:06:29
2025-12-31T09:06:58.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T09:06:58.282 [DEBUG] [Thread-124975] [transport.py] [_log()] starting thread (client mode): 0xb9559a50
2025-12-31T09:06:58.283 [DEBUG] [Thread-124975] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:06:58.305 [DEBUG] [Thread-124975] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T09:06:58.305 [INFO] [Thread-124975] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T09:06:58.307 [DEBUG] [Thread-124975] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:06:58.307 [DEBUG] [Thread-124975] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T09:06:58.307 [DEBUG] [Thread-124975] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:06:58.307 [DEBUG] [Thread-124975] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:06:58.307 [DEBUG] [Thread-124975] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:06:58.307 [DEBUG] [Thread-124975] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:06:58.307 [DEBUG] [Thread-124975] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:06:58.307 [DEBUG] [Thread-124975] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:06:58.307 [DEBUG] [Thread-124975] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:06:58.307 [DEBUG] [Thread-124975] [transport.py] [_log()] client lang: <none>
2025-12-31T09:06:58.308 [DEBUG] [Thread-124975] [transport.py] [_log()] server lang: <none>
2025-12-31T09:06:58.308 [DEBUG] [Thread-124975] [transport.py] [_log()] kex follows: False
2025-12-31T09:06:58.308 [DEBUG] [Thread-124975] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:06:58.308 [DEBUG] [Thread-124975] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:06:58.308 [DEBUG] [Thread-124975] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:06:58.308 [DEBUG] [Thread-124975] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:06:58.308 [DEBUG] [Thread-124975] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:06:58.308 [DEBUG] [Thread-124975] [transport.py] [_log()] Compression: none
2025-12-31T09:06:58.308 [DEBUG] [Thread-124975] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:06:58.327 [DEBUG] [Thread-124975] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:06:58.328 [DEBUG] [Thread-124975] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:06:58.329 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T09:06:58.329 [DEBUG] [Thread-124975] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T09:06:58.330 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:06:58.331 [DEBUG] [Thread-124975] [transport.py] [_log()] userauth is OK
2025-12-31T09:06:58.332 [DEBUG] [Thread-124975] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:06:58.332 [DEBUG] [Thread-124975] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:06:58.332 [DEBUG] [Thread-124975] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T09:06:58.332 [DEBUG] [Thread-124975] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:06:58.367 [INFO] [Thread-124975] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:06:58.367 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:06:58.923 [DEBUG] [Thread-124975] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:06:58.924 [DEBUG] [Thread-124975] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:06:58.924 [DEBUG] [Thread-124975] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T09:06:58.965 [DEBUG] [Thread-124975] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:06:58.965 [DEBUG] [Thread-124975] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:06:58.968 [DEBUG] [Thread-124975] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:06:58.981 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:06:58.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T09:06:58.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T09:06:58.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T09:06:58.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:06:58.991 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T09:06:58.992 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:06:58.992 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:06:58.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T09:06:58.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.295978 -999.00  +22.50  13.87     20   -1.30 1 1 1 1 1   888    0 25.89 50.89 ----- 12.2 13.9 292.5 15.3 29.6 -28.7 29.0 -27.0 27.0 -25.1 27.5 -26.2
2025-12-31T09:06:58.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T09:06:58.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T09:06:58.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.295978
2025-12-31T09:06:58.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T09:06:58.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T09:06:58.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T09:06:58.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T09:06:58.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T09:06:58.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T09:06:29', tmtdew=30.68, humidity=12.53, cloud=0.0, wind=14.42, temperature=23.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T07:06:12.499', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T09:06:58.994 [DEBUG] [Thread-124975] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:06:59.077 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T09:06:59.091 [DEBUG] [Thread-124978] [transport.py] [_log()] starting thread (client mode): 0xb6b6b5e0
2025-12-31T09:06:59.091 [DEBUG] [Thread-124978] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:06:59.106 [DEBUG] [Thread-124978] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T09:06:59.106 [INFO] [Thread-124978] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T09:06:59.114 [DEBUG] [Thread-124978] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:06:59.114 [DEBUG] [Thread-124978] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T09:06:59.114 [DEBUG] [Thread-124978] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:06:59.115 [DEBUG] [Thread-124978] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:06:59.115 [DEBUG] [Thread-124978] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:06:59.115 [DEBUG] [Thread-124978] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:06:59.115 [DEBUG] [Thread-124978] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:06:59.115 [DEBUG] [Thread-124978] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:06:59.115 [DEBUG] [Thread-124978] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:06:59.115 [DEBUG] [Thread-124978] [transport.py] [_log()] client lang: <none>
2025-12-31T09:06:59.115 [DEBUG] [Thread-124978] [transport.py] [_log()] server lang: <none>
2025-12-31T09:06:59.115 [DEBUG] [Thread-124978] [transport.py] [_log()] kex follows: False
2025-12-31T09:06:59.115 [DEBUG] [Thread-124978] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:06:59.116 [DEBUG] [Thread-124978] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:06:59.116 [DEBUG] [Thread-124978] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:06:59.116 [DEBUG] [Thread-124978] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:06:59.116 [DEBUG] [Thread-124978] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:06:59.116 [DEBUG] [Thread-124978] [transport.py] [_log()] Compression: none
2025-12-31T09:06:59.116 [DEBUG] [Thread-124978] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:06:59.174 [DEBUG] [Thread-124978] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:06:59.175 [DEBUG] [Thread-124978] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:06:59.176 [DEBUG] [Thread-124978] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T09:06:59.176 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T09:06:59.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:06:59.231 [DEBUG] [Thread-124978] [transport.py] [_log()] userauth is OK
2025-12-31T09:06:59.231 [DEBUG] [Thread-124978] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:06:59.232 [DEBUG] [Thread-124978] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:06:59.232 [DEBUG] [Thread-124978] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T09:06:59.232 [DEBUG] [Thread-124978] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:06:59.251 [INFO] [Thread-124978] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:06:59.252 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T09:06:59.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:07:00.064 [DEBUG] [Thread-124978] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:07:00.064 [DEBUG] [Thread-124978] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:07:00.112 [DEBUG] [Thread-124978] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:07:00.112 [DEBUG] [Thread-124978] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:07:00.121 [DEBUG] [Thread-124978] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:07:00.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:07: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')
2025-12-31T09:07:00.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T09:07:00.149 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:07:00.149 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:07:00.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:07:00.158 [DEBUG] [Thread-124978] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:07:02.235 [DEBUG] [Thread-124980 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:07:08.725 [DEBUG] [Thread-124981 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:07:13.749 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:07:13.750 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:07:23.783 [DEBUG] [Thread-124982 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:07:30.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T09:07:30.180 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T09:07:30.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T09:07:30.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 9, 7, 1), 30.53, 12.66, 0.0, 14.57, 23.8, 0, 0, 0, 2, 0, 0),)
2025-12-31T09:07:30.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 09:07:01
2025-12-31T09:07:31.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T09:07:31.221 [DEBUG] [Thread-124983] [transport.py] [_log()] starting thread (client mode): 0xb9579810
2025-12-31T09:07:31.221 [DEBUG] [Thread-124983] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:07:31.243 [DEBUG] [Thread-124983] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T09:07:31.243 [INFO] [Thread-124983] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T09:07:31.247 [DEBUG] [Thread-124983] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:07:31.247 [DEBUG] [Thread-124983] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T09:07:31.247 [DEBUG] [Thread-124983] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:07:31.247 [DEBUG] [Thread-124983] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:07:31.247 [DEBUG] [Thread-124983] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:07:31.247 [DEBUG] [Thread-124983] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:07:31.247 [DEBUG] [Thread-124983] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:07:31.247 [DEBUG] [Thread-124983] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:07:31.247 [DEBUG] [Thread-124983] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:07:31.247 [DEBUG] [Thread-124983] [transport.py] [_log()] client lang: <none>
2025-12-31T09:07:31.247 [DEBUG] [Thread-124983] [transport.py] [_log()] server lang: <none>
2025-12-31T09:07:31.247 [DEBUG] [Thread-124983] [transport.py] [_log()] kex follows: False
2025-12-31T09:07:31.247 [DEBUG] [Thread-124983] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:07:31.247 [DEBUG] [Thread-124983] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:07:31.247 [DEBUG] [Thread-124983] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:07:31.247 [DEBUG] [Thread-124983] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:07:31.247 [DEBUG] [Thread-124983] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:07:31.247 [DEBUG] [Thread-124983] [transport.py] [_log()] Compression: none
2025-12-31T09:07:31.247 [DEBUG] [Thread-124983] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:07:31.264 [DEBUG] [Thread-124983] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:07:31.264 [DEBUG] [Thread-124983] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:07:31.264 [DEBUG] [Thread-124983] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T09:07:31.264 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T09:07:31.264 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:07:31.265 [DEBUG] [Thread-124983] [transport.py] [_log()] userauth is OK
2025-12-31T09:07:31.265 [DEBUG] [Thread-124983] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:07:31.265 [DEBUG] [Thread-124983] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:07:31.265 [DEBUG] [Thread-124983] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T09:07:31.265 [DEBUG] [Thread-124983] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:07:31.274 [INFO] [Thread-124983] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:07:31.274 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:07:31.926 [DEBUG] [Thread-124983] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:07:31.927 [DEBUG] [Thread-124983] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:07:31.927 [DEBUG] [Thread-124983] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T09:07:31.968 [DEBUG] [Thread-124983] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:07:31.968 [DEBUG] [Thread-124983] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:07:31.984 [DEBUG] [Thread-124983] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:07:31.997 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:07:31.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T09:07:32.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T09:07:32.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T09:07:32.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:07:32.011 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T09:07:32.011 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:07:32.011 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:07:32.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T09:07:32.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.296325 -999.00  +22.90  14.51     19   -1.30 1 1 1 1 1   888    0 25.19 45.85 ----- 13.6 14.5 266.2 17.9 29.8 -28.4 29.1 -27.2 27.1 -28.5 27.6 -26.5
2025-12-31T09:07:32.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T09:07:32.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T09:07:32.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.296325
2025-12-31T09:07:32.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T09:07:32.014 [DEBUG] [Thread-124983] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:07:32.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T09:07:32.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T09:07:32.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T09:07:32.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T09:07:32.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T09:07:01', tmtdew=30.53, humidity=12.66, cloud=0.0, wind=14.57, temperature=23.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T07:06:42.480', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T09:07:32.103 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T09:07:32.115 [DEBUG] [Thread-124986] [transport.py] [_log()] starting thread (client mode): 0xb9592d40
2025-12-31T09:07:32.115 [DEBUG] [Thread-124986] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:07:32.131 [DEBUG] [Thread-124986] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T09:07:32.131 [INFO] [Thread-124986] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T09:07:32.138 [DEBUG] [Thread-124986] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:07:32.139 [DEBUG] [Thread-124986] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T09:07:32.139 [DEBUG] [Thread-124986] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:07:32.139 [DEBUG] [Thread-124986] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:07:32.139 [DEBUG] [Thread-124986] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:07:32.139 [DEBUG] [Thread-124986] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:07:32.139 [DEBUG] [Thread-124986] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:07:32.139 [DEBUG] [Thread-124986] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:07:32.139 [DEBUG] [Thread-124986] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:07:32.139 [DEBUG] [Thread-124986] [transport.py] [_log()] client lang: <none>
2025-12-31T09:07:32.139 [DEBUG] [Thread-124986] [transport.py] [_log()] server lang: <none>
2025-12-31T09:07:32.139 [DEBUG] [Thread-124986] [transport.py] [_log()] kex follows: False
2025-12-31T09:07:32.139 [DEBUG] [Thread-124986] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:07:32.139 [DEBUG] [Thread-124986] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:07:32.139 [DEBUG] [Thread-124986] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:07:32.139 [DEBUG] [Thread-124986] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:07:32.140 [DEBUG] [Thread-124986] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:07:32.140 [DEBUG] [Thread-124986] [transport.py] [_log()] Compression: none
2025-12-31T09:07:32.140 [DEBUG] [Thread-124986] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:07:32.200 [DEBUG] [Thread-124986] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:07:32.201 [DEBUG] [Thread-124986] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:07:32.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T09:07:32.202 [DEBUG] [Thread-124986] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T09:07:32.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:07:32.260 [DEBUG] [Thread-124986] [transport.py] [_log()] userauth is OK
2025-12-31T09:07:32.260 [DEBUG] [Thread-124986] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:07:32.260 [DEBUG] [Thread-124986] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:07:32.260 [DEBUG] [Thread-124986] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T09:07:32.260 [DEBUG] [Thread-124986] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:07:32.279 [INFO] [Thread-124986] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:07:32.279 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T09:07:32.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:07:33.103 [DEBUG] [Thread-124986] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:07:33.103 [DEBUG] [Thread-124986] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:07:33.151 [DEBUG] [Thread-124986] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:07:33.151 [DEBUG] [Thread-124986] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:07:33.160 [DEBUG] [Thread-124986] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:07:33.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:07:33.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T09:07:33.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T09:07:33.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:07:33.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:07:33.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:07:33.197 [DEBUG] [Thread-124986] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:07:38.816 [DEBUG] [Thread-124988 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:07:53.881 [DEBUG] [Thread-124989 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:08:02.283 [DEBUG] [Thread-124990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:08:03.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T09:08:03.195 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T09:08:03.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T09:08:03.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 9, 7, 33), 30.74, 12.36, 0.0, 20.25, 23.9, 0, 0, 0, 2, 0, 0),)
2025-12-31T09:08:03.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 09:07:33
2025-12-31T09:08:04.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T09:08:04.202 [DEBUG] [Thread-124991] [transport.py] [_log()] starting thread (client mode): 0xb6b6bdc0
2025-12-31T09:08:04.202 [DEBUG] [Thread-124991] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:08:04.223 [DEBUG] [Thread-124991] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T09:08:04.223 [INFO] [Thread-124991] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T09:08:04.226 [DEBUG] [Thread-124991] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:08:04.226 [DEBUG] [Thread-124991] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T09:08:04.226 [DEBUG] [Thread-124991] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:08:04.226 [DEBUG] [Thread-124991] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:08:04.226 [DEBUG] [Thread-124991] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:08:04.226 [DEBUG] [Thread-124991] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:08:04.226 [DEBUG] [Thread-124991] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:08:04.227 [DEBUG] [Thread-124991] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:08:04.227 [DEBUG] [Thread-124991] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:08:04.227 [DEBUG] [Thread-124991] [transport.py] [_log()] client lang: <none>
2025-12-31T09:08:04.227 [DEBUG] [Thread-124991] [transport.py] [_log()] server lang: <none>
2025-12-31T09:08:04.227 [DEBUG] [Thread-124991] [transport.py] [_log()] kex follows: False
2025-12-31T09:08:04.227 [DEBUG] [Thread-124991] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:08:04.227 [DEBUG] [Thread-124991] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:08:04.227 [DEBUG] [Thread-124991] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:08:04.227 [DEBUG] [Thread-124991] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:08:04.227 [DEBUG] [Thread-124991] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:08:04.227 [DEBUG] [Thread-124991] [transport.py] [_log()] Compression: none
2025-12-31T09:08:04.227 [DEBUG] [Thread-124991] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:08:04.244 [DEBUG] [Thread-124991] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:08:04.245 [DEBUG] [Thread-124991] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:08:04.245 [DEBUG] [Thread-124991] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T09:08:04.245 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T09:08:04.246 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:08:04.247 [DEBUG] [Thread-124991] [transport.py] [_log()] userauth is OK
2025-12-31T09:08:04.247 [DEBUG] [Thread-124991] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:08:04.247 [DEBUG] [Thread-124991] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:08:04.247 [DEBUG] [Thread-124991] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T09:08:04.248 [DEBUG] [Thread-124991] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:08:04.271 [INFO] [Thread-124991] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:08:04.271 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:08:04.897 [DEBUG] [Thread-124991] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:08:04.897 [DEBUG] [Thread-124991] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:08:04.897 [DEBUG] [Thread-124991] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T09:08:04.938 [DEBUG] [Thread-124991] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:08:04.938 [DEBUG] [Thread-124991] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:08:04.940 [DEBUG] [Thread-124991] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:08:04.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:08:04.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T09:08:04.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T09:08:04.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T09:08:04.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:08:04.964 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T09:08:04.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:08:04.965 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:08:04.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T09:08:04.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.296672 -999.00  +22.90  12.69     19   -1.20 1 1 1 1 1   888    0 25.70 41.52 ----- 10.5 12.7 273.0 19.6 29.6 -29.4 29.1 -27.7 26.9 -26.6 27.5 -26.5
2025-12-31T09:08:04.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T09:08:04.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T09:08:04.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.296672
2025-12-31T09:08:04.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T09:08:04.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T09:08:04.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T09:08:04.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T09:08:04.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T09:08:04.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T09:07:33', tmtdew=30.74, humidity=12.36, cloud=0.0, wind=20.25, temperature=23.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T07:07:12.461', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T09:08:04.966 [DEBUG] [Thread-124991] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:08:05.040 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T09:08:05.054 [DEBUG] [Thread-124994] [transport.py] [_log()] starting thread (client mode): 0xb6b48070
2025-12-31T09:08:05.054 [DEBUG] [Thread-124994] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:08:05.072 [DEBUG] [Thread-124994] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T09:08:05.072 [INFO] [Thread-124994] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T09:08:05.079 [DEBUG] [Thread-124994] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:08:05.079 [DEBUG] [Thread-124994] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T09:08:05.079 [DEBUG] [Thread-124994] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:08:05.079 [DEBUG] [Thread-124994] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:08:05.079 [DEBUG] [Thread-124994] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:08:05.079 [DEBUG] [Thread-124994] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:08:05.079 [DEBUG] [Thread-124994] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:08:05.079 [DEBUG] [Thread-124994] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:08:05.079 [DEBUG] [Thread-124994] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:08:05.080 [DEBUG] [Thread-124994] [transport.py] [_log()] client lang: <none>
2025-12-31T09:08:05.080 [DEBUG] [Thread-124994] [transport.py] [_log()] server lang: <none>
2025-12-31T09:08:05.080 [DEBUG] [Thread-124994] [transport.py] [_log()] kex follows: False
2025-12-31T09:08:05.080 [DEBUG] [Thread-124994] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:08:05.080 [DEBUG] [Thread-124994] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:08:05.080 [DEBUG] [Thread-124994] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:08:05.080 [DEBUG] [Thread-124994] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:08:05.080 [DEBUG] [Thread-124994] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:08:05.080 [DEBUG] [Thread-124994] [transport.py] [_log()] Compression: none
2025-12-31T09:08:05.080 [DEBUG] [Thread-124994] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:08:05.135 [DEBUG] [Thread-124994] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:08:05.135 [DEBUG] [Thread-124994] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:08:05.135 [DEBUG] [Thread-124994] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T09:08:05.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T09:08:05.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:08:05.192 [DEBUG] [Thread-124994] [transport.py] [_log()] userauth is OK
2025-12-31T09:08:05.192 [DEBUG] [Thread-124994] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:08:05.192 [DEBUG] [Thread-124994] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:08:05.192 [DEBUG] [Thread-124994] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T09:08:05.192 [DEBUG] [Thread-124994] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:08:05.206 [INFO] [Thread-124994] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:08:05.206 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T09:08:05.206 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:08:06.003 [DEBUG] [Thread-124994] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:08:06.003 [DEBUG] [Thread-124994] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:08:06.052 [DEBUG] [Thread-124994] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:08:06.052 [DEBUG] [Thread-124994] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:08:06.060 [DEBUG] [Thread-124994] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:08:06.068 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:08:06.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T09:08:06.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T09:08:06.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:08:06.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:08:06.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:08:06.091 [DEBUG] [Thread-124994] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:08:08.911 [DEBUG] [Thread-124996 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:08:13.891 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:08:13.892 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:08:23.951 [DEBUG] [Thread-124997 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:08:36.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T09:08:36.114 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T09:08:36.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T09:08:36.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 9, 8, 5), 29.6, 13.21, 0.0, 16.81, 23.23, 0, 0, 0, 2, 0, 0),)
2025-12-31T09:08:36.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 09:08:05
2025-12-31T09:08:36.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T09:08:37.101 [DEBUG] [Thread-124998] [transport.py] [_log()] starting thread (client mode): 0xb6b4bcd0
2025-12-31T09:08:37.101 [DEBUG] [Thread-124998] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:08:37.122 [DEBUG] [Thread-124998] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T09:08:37.122 [INFO] [Thread-124998] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T09:08:37.123 [DEBUG] [Thread-124998] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:08:37.123 [DEBUG] [Thread-124998] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T09:08:37.123 [DEBUG] [Thread-124998] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:08:37.123 [DEBUG] [Thread-124998] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:08:37.123 [DEBUG] [Thread-124998] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:08:37.124 [DEBUG] [Thread-124998] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:08:37.124 [DEBUG] [Thread-124998] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:08:37.124 [DEBUG] [Thread-124998] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:08:37.124 [DEBUG] [Thread-124998] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:08:37.124 [DEBUG] [Thread-124998] [transport.py] [_log()] client lang: <none>
2025-12-31T09:08:37.124 [DEBUG] [Thread-124998] [transport.py] [_log()] server lang: <none>
2025-12-31T09:08:37.124 [DEBUG] [Thread-124998] [transport.py] [_log()] kex follows: False
2025-12-31T09:08:37.124 [DEBUG] [Thread-124998] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:08:37.124 [DEBUG] [Thread-124998] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:08:37.124 [DEBUG] [Thread-124998] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:08:37.124 [DEBUG] [Thread-124998] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:08:37.124 [DEBUG] [Thread-124998] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:08:37.124 [DEBUG] [Thread-124998] [transport.py] [_log()] Compression: none
2025-12-31T09:08:37.124 [DEBUG] [Thread-124998] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:08:37.137 [DEBUG] [Thread-124998] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:08:37.137 [DEBUG] [Thread-124998] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:08:37.137 [DEBUG] [Thread-124998] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T09:08:37.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T09:08:37.138 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:08:37.139 [DEBUG] [Thread-124998] [transport.py] [_log()] userauth is OK
2025-12-31T09:08:37.139 [DEBUG] [Thread-124998] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:08:37.139 [DEBUG] [Thread-124998] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:08:37.139 [DEBUG] [Thread-124998] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T09:08:37.139 [DEBUG] [Thread-124998] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:08:37.159 [INFO] [Thread-124998] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:08:37.159 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:08:37.804 [DEBUG] [Thread-124998] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:08:37.804 [DEBUG] [Thread-124998] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:08:37.804 [DEBUG] [Thread-124998] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T09:08:37.845 [DEBUG] [Thread-124998] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:08:37.845 [DEBUG] [Thread-124998] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:08:37.848 [DEBUG] [Thread-124998] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:08:37.861 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:08:37.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T09:08:37.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T09:08:37.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T09:08:37.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:08:37.873 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T09:08:37.874 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:08:37.874 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:08:37.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T09:08:37.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.297019 -999.00  +22.80  10.16     19   -1.40 1 1 1 1 1   888    0 24.95 33.89 ----- 8.6 10.2 282.8 15.9 29.6 -29.6 29.1 -28.4 27.1 -26.1 27.5 -27.0
2025-12-31T09:08:37.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T09:08:37.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T09:08:37.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.297019
2025-12-31T09:08:37.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T09:08:37.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T09:08:37.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T09:08:37.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T09:08:37.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T09:08:37.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T09:08:05', tmtdew=29.6, humidity=13.21, cloud=0.0, wind=16.81, temperature=23.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T07:07:42.442', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T09:08:37.876 [DEBUG] [Thread-124998] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:08:37.960 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T09:08:37.973 [DEBUG] [Thread-125001] [transport.py] [_log()] starting thread (client mode): 0xb6b6ba00
2025-12-31T09:08:37.973 [DEBUG] [Thread-125001] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:08:37.988 [DEBUG] [Thread-125001] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T09:08:37.988 [INFO] [Thread-125001] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T09:08:37.995 [DEBUG] [Thread-125001] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:08:37.996 [DEBUG] [Thread-125001] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T09:08:37.996 [DEBUG] [Thread-125001] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:08:37.996 [DEBUG] [Thread-125001] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:08:37.996 [DEBUG] [Thread-125001] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:08:37.996 [DEBUG] [Thread-125001] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:08:37.996 [DEBUG] [Thread-125001] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:08:37.996 [DEBUG] [Thread-125001] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:08:37.996 [DEBUG] [Thread-125001] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:08:37.996 [DEBUG] [Thread-125001] [transport.py] [_log()] client lang: <none>
2025-12-31T09:08:37.996 [DEBUG] [Thread-125001] [transport.py] [_log()] server lang: <none>
2025-12-31T09:08:37.996 [DEBUG] [Thread-125001] [transport.py] [_log()] kex follows: False
2025-12-31T09:08:37.996 [DEBUG] [Thread-125001] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:08:37.996 [DEBUG] [Thread-125001] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:08:37.996 [DEBUG] [Thread-125001] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:08:37.996 [DEBUG] [Thread-125001] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:08:37.996 [DEBUG] [Thread-125001] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:08:37.996 [DEBUG] [Thread-125001] [transport.py] [_log()] Compression: none
2025-12-31T09:08:37.996 [DEBUG] [Thread-125001] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:08:38.052 [DEBUG] [Thread-125001] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:08:38.052 [DEBUG] [Thread-125001] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:08:38.053 [DEBUG] [Thread-125001] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T09:08:38.053 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T09:08:38.053 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:08:38.107 [DEBUG] [Thread-125001] [transport.py] [_log()] userauth is OK
2025-12-31T09:08:38.108 [DEBUG] [Thread-125001] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:08:38.108 [DEBUG] [Thread-125001] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:08:38.108 [DEBUG] [Thread-125001] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T09:08:38.108 [DEBUG] [Thread-125001] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:08:38.122 [INFO] [Thread-125001] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:08:38.122 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T09:08:38.122 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:08:38.984 [DEBUG] [Thread-125003 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:08:39.304 [DEBUG] [Thread-125001] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:08:39.304 [DEBUG] [Thread-125001] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:08:39.352 [DEBUG] [Thread-125001] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:08:39.352 [DEBUG] [Thread-125001] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:08:39.361 [DEBUG] [Thread-125001] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:08:39.369 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:08:39.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T09:08:39.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T09:08:39.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:08:39.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:08:39.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:08:39.397 [DEBUG] [Thread-125001] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:08:54.020 [DEBUG] [Thread-125004 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:09:02.339 [DEBUG] [Thread-125005 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:09:09.059 [DEBUG] [Thread-125006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:09:09.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T09:09:09.418 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T09:09:09.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T09:09:10.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 9, 8, 38), 29.51, 13.59, 0.0, 20.15, 23.13, 0, 0, 0, 2, 0, 0),)
2025-12-31T09:09:10.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 09:08:38
2025-12-31T09:09:10.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T09:09:10.413 [DEBUG] [Thread-125007] [transport.py] [_log()] starting thread (client mode): 0xb6b36e30
2025-12-31T09:09:10.413 [DEBUG] [Thread-125007] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:09:10.433 [DEBUG] [Thread-125007] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T09:09:10.433 [INFO] [Thread-125007] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T09:09:10.436 [DEBUG] [Thread-125007] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:09:10.436 [DEBUG] [Thread-125007] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T09:09:10.436 [DEBUG] [Thread-125007] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:09:10.436 [DEBUG] [Thread-125007] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:09:10.436 [DEBUG] [Thread-125007] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:09:10.436 [DEBUG] [Thread-125007] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:09:10.436 [DEBUG] [Thread-125007] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:09:10.436 [DEBUG] [Thread-125007] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:09:10.436 [DEBUG] [Thread-125007] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:09:10.436 [DEBUG] [Thread-125007] [transport.py] [_log()] client lang: <none>
2025-12-31T09:09:10.436 [DEBUG] [Thread-125007] [transport.py] [_log()] server lang: <none>
2025-12-31T09:09:10.436 [DEBUG] [Thread-125007] [transport.py] [_log()] kex follows: False
2025-12-31T09:09:10.436 [DEBUG] [Thread-125007] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:09:10.436 [DEBUG] [Thread-125007] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:09:10.436 [DEBUG] [Thread-125007] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:09:10.436 [DEBUG] [Thread-125007] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:09:10.436 [DEBUG] [Thread-125007] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:09:10.436 [DEBUG] [Thread-125007] [transport.py] [_log()] Compression: none
2025-12-31T09:09:10.436 [DEBUG] [Thread-125007] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:09:10.453 [DEBUG] [Thread-125007] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:09:10.453 [DEBUG] [Thread-125007] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:09:10.453 [DEBUG] [Thread-125007] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T09:09:10.453 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T09:09:10.453 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:09:10.454 [DEBUG] [Thread-125007] [transport.py] [_log()] userauth is OK
2025-12-31T09:09:10.454 [DEBUG] [Thread-125007] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:09:10.454 [DEBUG] [Thread-125007] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:09:10.454 [DEBUG] [Thread-125007] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T09:09:10.454 [DEBUG] [Thread-125007] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:09:10.481 [INFO] [Thread-125007] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:09:10.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:09:11.125 [DEBUG] [Thread-125007] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:09:11.125 [DEBUG] [Thread-125007] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:09:11.126 [DEBUG] [Thread-125007] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T09:09:11.166 [DEBUG] [Thread-125007] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:09:11.166 [DEBUG] [Thread-125007] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:09:11.169 [DEBUG] [Thread-125007] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:09:11.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:09:11.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T09:09:11.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T09:09:11.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T09:09:11.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:09:11.186 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T09:09:11.186 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:09:11.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:09:11.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T09:09:11.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.297714 -999.00  +23.20  16.06     19   -1.50 1 1 1 1 1   888    0 25.12 28.31 ----- 11.3 16.1 299.6 18.1 29.4 -29.5 28.9 -29.3 26.9 -27.6 27.4 -27.7
2025-12-31T09:09:11.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T09:09:11.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T09:09:11.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.297714
2025-12-31T09:09:11.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T09:09:11.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T09:09:11.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T09:09:11.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T09:09:11.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T09:09:11.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T09:08:38', tmtdew=29.51, humidity=13.59, cloud=0.0, wind=20.15, temperature=23.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T07:08:42.490', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T09:09:11.187 [DEBUG] [Thread-125007] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:09:11.261 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T09:09:11.274 [DEBUG] [Thread-125010] [transport.py] [_log()] starting thread (client mode): 0xb6be48b0
2025-12-31T09:09:11.274 [DEBUG] [Thread-125010] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:09:11.293 [DEBUG] [Thread-125010] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T09:09:11.293 [INFO] [Thread-125010] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T09:09:11.304 [DEBUG] [Thread-125010] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:09:11.304 [DEBUG] [Thread-125010] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T09:09:11.304 [DEBUG] [Thread-125010] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:09:11.304 [DEBUG] [Thread-125010] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:09:11.304 [DEBUG] [Thread-125010] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:09:11.304 [DEBUG] [Thread-125010] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:09:11.304 [DEBUG] [Thread-125010] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:09:11.304 [DEBUG] [Thread-125010] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:09:11.304 [DEBUG] [Thread-125010] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:09:11.304 [DEBUG] [Thread-125010] [transport.py] [_log()] client lang: <none>
2025-12-31T09:09:11.304 [DEBUG] [Thread-125010] [transport.py] [_log()] server lang: <none>
2025-12-31T09:09:11.304 [DEBUG] [Thread-125010] [transport.py] [_log()] kex follows: False
2025-12-31T09:09:11.304 [DEBUG] [Thread-125010] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:09:11.304 [DEBUG] [Thread-125010] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:09:11.304 [DEBUG] [Thread-125010] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:09:11.304 [DEBUG] [Thread-125010] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:09:11.304 [DEBUG] [Thread-125010] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:09:11.304 [DEBUG] [Thread-125010] [transport.py] [_log()] Compression: none
2025-12-31T09:09:11.304 [DEBUG] [Thread-125010] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:09:11.364 [DEBUG] [Thread-125010] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:09:11.364 [DEBUG] [Thread-125010] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:09:11.364 [DEBUG] [Thread-125010] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T09:09:11.364 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T09:09:11.364 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:09:11.425 [DEBUG] [Thread-125010] [transport.py] [_log()] userauth is OK
2025-12-31T09:09:11.425 [DEBUG] [Thread-125010] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:09:11.425 [DEBUG] [Thread-125010] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:09:11.425 [DEBUG] [Thread-125010] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T09:09:11.425 [DEBUG] [Thread-125010] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:09:11.443 [INFO] [Thread-125010] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:09:11.443 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T09:09:11.444 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:09:12.630 [DEBUG] [Thread-125010] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:09:12.631 [DEBUG] [Thread-125010] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:09:12.681 [DEBUG] [Thread-125010] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:09:12.682 [DEBUG] [Thread-125010] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:09:12.691 [DEBUG] [Thread-125010] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:09:12.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:09:12.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T09:09:12.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-12-31T09:09:12.726 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:09:12.726 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:09:12.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:09:12.735 [DEBUG] [Thread-125010] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:09:14.031 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:09:14.032 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:09:24.093 [DEBUG] [Thread-125012 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:09:39.142 [DEBUG] [Thread-125013 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:09:42.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T09:09:42.757 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T09:09:42.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T09:09:43.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 9, 9, 10), 29.32, 13.78, 0.0, 17.03, 23.15, 0, 0, 0, 2, 0, 0),)
2025-12-31T09:09:43.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 09:09:10
2025-12-31T09:09:43.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T09:09:43.806 [DEBUG] [Thread-125014] [transport.py] [_log()] starting thread (client mode): 0xb6be5cf0
2025-12-31T09:09:43.806 [DEBUG] [Thread-125014] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:09:43.826 [DEBUG] [Thread-125014] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T09:09:43.827 [INFO] [Thread-125014] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T09:09:43.828 [DEBUG] [Thread-125014] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:09:43.828 [DEBUG] [Thread-125014] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T09:09:43.828 [DEBUG] [Thread-125014] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:09:43.828 [DEBUG] [Thread-125014] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:09:43.828 [DEBUG] [Thread-125014] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:09:43.828 [DEBUG] [Thread-125014] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:09:43.828 [DEBUG] [Thread-125014] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:09:43.828 [DEBUG] [Thread-125014] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:09:43.828 [DEBUG] [Thread-125014] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:09:43.828 [DEBUG] [Thread-125014] [transport.py] [_log()] client lang: <none>
2025-12-31T09:09:43.828 [DEBUG] [Thread-125014] [transport.py] [_log()] server lang: <none>
2025-12-31T09:09:43.828 [DEBUG] [Thread-125014] [transport.py] [_log()] kex follows: False
2025-12-31T09:09:43.828 [DEBUG] [Thread-125014] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:09:43.828 [DEBUG] [Thread-125014] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:09:43.828 [DEBUG] [Thread-125014] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:09:43.828 [DEBUG] [Thread-125014] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:09:43.828 [DEBUG] [Thread-125014] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:09:43.828 [DEBUG] [Thread-125014] [transport.py] [_log()] Compression: none
2025-12-31T09:09:43.828 [DEBUG] [Thread-125014] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:09:43.836 [DEBUG] [Thread-125014] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:09:43.836 [DEBUG] [Thread-125014] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:09:43.836 [DEBUG] [Thread-125014] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T09:09:43.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T09:09:43.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:09:43.837 [DEBUG] [Thread-125014] [transport.py] [_log()] userauth is OK
2025-12-31T09:09:43.837 [DEBUG] [Thread-125014] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:09:43.838 [DEBUG] [Thread-125014] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:09:43.838 [DEBUG] [Thread-125014] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T09:09:43.838 [DEBUG] [Thread-125014] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:09:43.856 [INFO] [Thread-125014] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:09:43.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:09:44.529 [DEBUG] [Thread-125014] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:09:44.530 [DEBUG] [Thread-125014] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:09:44.530 [DEBUG] [Thread-125014] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T09:09:44.571 [DEBUG] [Thread-125014] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:09:44.571 [DEBUG] [Thread-125014] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:09:44.575 [DEBUG] [Thread-125014] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:09:44.588 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:09:44.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T09:09:44.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T09:09:44.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T09:09:44.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:09:44.602 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T09:09:44.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:09:44.602 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:09:44.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T09:09:44.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.298061 -999.00  +23.20  20.74     18   -1.80 1 1 1 1 1   888    0 24.73 26.95 ----- 17.6 20.7 304.0 24.5 29.3 -29.5 28.8 -28.5 26.9 -28.2 27.4 -27.7
2025-12-31T09:09:44.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T09:09:44.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T09:09:44.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.298061
2025-12-31T09:09:44.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T09:09:44.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T09:09:44.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T09:09:44.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T09:09:44.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T09:09:44.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T09:09:10', tmtdew=29.32, humidity=13.78, cloud=0.0, wind=17.03, temperature=23.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T07:09:12.470', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T09:09:44.605 [DEBUG] [Thread-125014] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:09:44.689 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T09:09:44.738 [DEBUG] [Thread-125017] [transport.py] [_log()] starting thread (client mode): 0xb9592710
2025-12-31T09:09:44.739 [DEBUG] [Thread-125017] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:09:44.753 [DEBUG] [Thread-125017] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T09:09:44.753 [INFO] [Thread-125017] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T09:09:44.760 [DEBUG] [Thread-125017] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:09:44.761 [DEBUG] [Thread-125017] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T09:09:44.761 [DEBUG] [Thread-125017] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:09:44.761 [DEBUG] [Thread-125017] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:09:44.761 [DEBUG] [Thread-125017] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:09:44.761 [DEBUG] [Thread-125017] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:09:44.761 [DEBUG] [Thread-125017] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:09:44.761 [DEBUG] [Thread-125017] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:09:44.761 [DEBUG] [Thread-125017] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:09:44.761 [DEBUG] [Thread-125017] [transport.py] [_log()] client lang: <none>
2025-12-31T09:09:44.761 [DEBUG] [Thread-125017] [transport.py] [_log()] server lang: <none>
2025-12-31T09:09:44.761 [DEBUG] [Thread-125017] [transport.py] [_log()] kex follows: False
2025-12-31T09:09:44.761 [DEBUG] [Thread-125017] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:09:44.761 [DEBUG] [Thread-125017] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:09:44.761 [DEBUG] [Thread-125017] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:09:44.761 [DEBUG] [Thread-125017] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:09:44.762 [DEBUG] [Thread-125017] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:09:44.762 [DEBUG] [Thread-125017] [transport.py] [_log()] Compression: none
2025-12-31T09:09:44.762 [DEBUG] [Thread-125017] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:09:44.819 [DEBUG] [Thread-125017] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:09:44.819 [DEBUG] [Thread-125017] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:09:44.820 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T09:09:44.820 [DEBUG] [Thread-125017] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T09:09:44.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:09:44.875 [DEBUG] [Thread-125017] [transport.py] [_log()] userauth is OK
2025-12-31T09:09:44.876 [DEBUG] [Thread-125017] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:09:44.876 [DEBUG] [Thread-125017] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:09:44.876 [DEBUG] [Thread-125017] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T09:09:44.876 [DEBUG] [Thread-125017] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:09:44.900 [INFO] [Thread-125017] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:09:44.901 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T09:09:44.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:09:46.269 [DEBUG] [Thread-125017] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:09:46.269 [DEBUG] [Thread-125017] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:09:46.317 [DEBUG] [Thread-125017] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:09:46.317 [DEBUG] [Thread-125017] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:09:46.329 [DEBUG] [Thread-125017] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:09:46.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:09:46.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T09:09:46.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T09:09:46.367 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:09:46.367 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:09:46.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:09:46.375 [DEBUG] [Thread-125017] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:09:54.179 [DEBUG] [Thread-125019 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:10:02.385 [DEBUG] [Thread-125020 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:10:09.235 [DEBUG] [Thread-125021 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:10:14.172 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:10:14.173 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:10:16.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T09:10:16.398 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T09:10:16.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T09:10:17.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 9, 10, 14), 29.41, 13.46, 0.0, 18.69, 23.15, 0, 0, 0, 2, 0, 0),)
2025-12-31T09:10:17.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 09:10:14
2025-12-31T09:10:17.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T09:10:17.410 [DEBUG] [Thread-125022] [transport.py] [_log()] starting thread (client mode): 0xb95d4b80
2025-12-31T09:10:17.410 [DEBUG] [Thread-125022] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:10:17.422 [DEBUG] [Thread-125022] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T09:10:17.422 [INFO] [Thread-125022] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T09:10:17.425 [DEBUG] [Thread-125022] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:10:17.425 [DEBUG] [Thread-125022] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T09:10:17.425 [DEBUG] [Thread-125022] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:10:17.425 [DEBUG] [Thread-125022] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:10:17.425 [DEBUG] [Thread-125022] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:10:17.425 [DEBUG] [Thread-125022] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:10:17.425 [DEBUG] [Thread-125022] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:10:17.425 [DEBUG] [Thread-125022] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:10:17.425 [DEBUG] [Thread-125022] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:10:17.425 [DEBUG] [Thread-125022] [transport.py] [_log()] client lang: <none>
2025-12-31T09:10:17.425 [DEBUG] [Thread-125022] [transport.py] [_log()] server lang: <none>
2025-12-31T09:10:17.425 [DEBUG] [Thread-125022] [transport.py] [_log()] kex follows: False
2025-12-31T09:10:17.425 [DEBUG] [Thread-125022] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:10:17.425 [DEBUG] [Thread-125022] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:10:17.425 [DEBUG] [Thread-125022] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:10:17.425 [DEBUG] [Thread-125022] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:10:17.425 [DEBUG] [Thread-125022] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:10:17.425 [DEBUG] [Thread-125022] [transport.py] [_log()] Compression: none
2025-12-31T09:10:17.425 [DEBUG] [Thread-125022] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:10:17.442 [DEBUG] [Thread-125022] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:10:17.442 [DEBUG] [Thread-125022] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:10:17.443 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T09:10:17.443 [DEBUG] [Thread-125022] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T09:10:17.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:10:17.445 [DEBUG] [Thread-125022] [transport.py] [_log()] userauth is OK
2025-12-31T09:10:17.445 [DEBUG] [Thread-125022] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:10:17.445 [DEBUG] [Thread-125022] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:10:17.445 [DEBUG] [Thread-125022] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T09:10:17.445 [DEBUG] [Thread-125022] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:10:17.464 [INFO] [Thread-125022] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:10:17.465 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:10:18.253 [DEBUG] [Thread-125022] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:10:18.253 [DEBUG] [Thread-125022] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:10:18.254 [DEBUG] [Thread-125022] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T09:10:18.294 [DEBUG] [Thread-125022] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:10:18.294 [DEBUG] [Thread-125022] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:10:18.297 [DEBUG] [Thread-125022] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:10:18.308 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:10:18.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T09:10:18.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T09:10:18.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T09:10:18.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:10:18.317 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T09:10:18.317 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:10:18.317 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:10:18.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T09:10:18.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.298408 -999.00  +22.90  18.73     19   -1.70 1 1 1 1 1   888    0 25.25 21.63 ----- 12.9 18.7 293.0 21.7 29.3 -29.7 28.6 -29.7 26.9 -28.7 27.4 -28.1
2025-12-31T09:10:18.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T09:10:18.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T09:10:18.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.298408
2025-12-31T09:10:18.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T09:10:18.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T09:10:18.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T09:10:18.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T09:10:18.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T09:10:18.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T09:10:14', tmtdew=29.41, humidity=13.46, cloud=0.0, wind=18.69, temperature=23.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T07:09:42.451', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T09:10:18.319 [DEBUG] [Thread-125022] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:10:18.405 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T09:10:18.417 [DEBUG] [Thread-125025] [transport.py] [_log()] starting thread (client mode): 0xb95d70a0
2025-12-31T09:10:18.417 [DEBUG] [Thread-125025] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:10:18.432 [DEBUG] [Thread-125025] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T09:10:18.432 [INFO] [Thread-125025] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T09:10:18.439 [DEBUG] [Thread-125025] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:10:18.439 [DEBUG] [Thread-125025] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T09:10:18.440 [DEBUG] [Thread-125025] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:10:18.440 [DEBUG] [Thread-125025] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:10:18.440 [DEBUG] [Thread-125025] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:10:18.440 [DEBUG] [Thread-125025] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:10:18.440 [DEBUG] [Thread-125025] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:10:18.440 [DEBUG] [Thread-125025] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:10:18.440 [DEBUG] [Thread-125025] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:10:18.440 [DEBUG] [Thread-125025] [transport.py] [_log()] client lang: <none>
2025-12-31T09:10:18.440 [DEBUG] [Thread-125025] [transport.py] [_log()] server lang: <none>
2025-12-31T09:10:18.440 [DEBUG] [Thread-125025] [transport.py] [_log()] kex follows: False
2025-12-31T09:10:18.441 [DEBUG] [Thread-125025] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:10:18.441 [DEBUG] [Thread-125025] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:10:18.441 [DEBUG] [Thread-125025] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:10:18.441 [DEBUG] [Thread-125025] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:10:18.441 [DEBUG] [Thread-125025] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:10:18.441 [DEBUG] [Thread-125025] [transport.py] [_log()] Compression: none
2025-12-31T09:10:18.441 [DEBUG] [Thread-125025] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:10:18.504 [DEBUG] [Thread-125025] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:10:18.505 [DEBUG] [Thread-125025] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:10:18.506 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T09:10:18.506 [DEBUG] [Thread-125025] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T09:10:18.507 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:10:18.564 [DEBUG] [Thread-125025] [transport.py] [_log()] userauth is OK
2025-12-31T09:10:18.564 [DEBUG] [Thread-125025] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:10:18.564 [DEBUG] [Thread-125025] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:10:18.564 [DEBUG] [Thread-125025] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T09:10:18.564 [DEBUG] [Thread-125025] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:10:18.583 [INFO] [Thread-125025] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:10:18.584 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T09:10:18.584 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:10:19.833 [DEBUG] [Thread-125025] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:10:19.833 [DEBUG] [Thread-125025] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:10:19.885 [DEBUG] [Thread-125025] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:10:19.885 [DEBUG] [Thread-125025] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:10:19.895 [DEBUG] [Thread-125025] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:10:19.904 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:10:19.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-12-31T09:10:19.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-12-31T09:10:19.921 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:10:19.921 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:10:19.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:10:19.929 [DEBUG] [Thread-125025] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:10:24.270 [DEBUG] [Thread-125027 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:10:39.318 [DEBUG] [Thread-125028 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:10:49.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T09:10:49.941 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T09:10:49.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T09:10:50.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 9, 10, 46), 28.98, 14.08, 0.0, 15.58, 22.93, 0, 0, 0, 2, 0, 0),)
2025-12-31T09:10:50.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 09:10:46
2025-12-31T09:10:50.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T09:10:50.945 [DEBUG] [Thread-125029] [transport.py] [_log()] starting thread (client mode): 0xb6b19690
2025-12-31T09:10:50.945 [DEBUG] [Thread-125029] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:10:50.956 [DEBUG] [Thread-125029] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T09:10:50.956 [INFO] [Thread-125029] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T09:10:50.960 [DEBUG] [Thread-125029] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:10:50.960 [DEBUG] [Thread-125029] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T09:10:50.960 [DEBUG] [Thread-125029] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:10:50.960 [DEBUG] [Thread-125029] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:10:50.960 [DEBUG] [Thread-125029] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:10:50.960 [DEBUG] [Thread-125029] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:10:50.960 [DEBUG] [Thread-125029] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:10:50.960 [DEBUG] [Thread-125029] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:10:50.960 [DEBUG] [Thread-125029] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:10:50.960 [DEBUG] [Thread-125029] [transport.py] [_log()] client lang: <none>
2025-12-31T09:10:50.960 [DEBUG] [Thread-125029] [transport.py] [_log()] server lang: <none>
2025-12-31T09:10:50.960 [DEBUG] [Thread-125029] [transport.py] [_log()] kex follows: False
2025-12-31T09:10:50.960 [DEBUG] [Thread-125029] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:10:50.960 [DEBUG] [Thread-125029] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:10:50.960 [DEBUG] [Thread-125029] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:10:50.960 [DEBUG] [Thread-125029] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:10:50.960 [DEBUG] [Thread-125029] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:10:50.960 [DEBUG] [Thread-125029] [transport.py] [_log()] Compression: none
2025-12-31T09:10:50.960 [DEBUG] [Thread-125029] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:10:50.976 [DEBUG] [Thread-125029] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:10:50.976 [DEBUG] [Thread-125029] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:10:50.977 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T09:10:50.977 [DEBUG] [Thread-125029] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T09:10:50.978 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:10:50.979 [DEBUG] [Thread-125029] [transport.py] [_log()] userauth is OK
2025-12-31T09:10:50.979 [DEBUG] [Thread-125029] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:10:50.979 [DEBUG] [Thread-125029] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:10:50.979 [DEBUG] [Thread-125029] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T09:10:50.979 [DEBUG] [Thread-125029] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:10:50.995 [INFO] [Thread-125029] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:10:50.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:10:51.656 [DEBUG] [Thread-125029] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:10:51.656 [DEBUG] [Thread-125029] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:10:51.657 [DEBUG] [Thread-125029] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T09:10:51.697 [DEBUG] [Thread-125029] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:10:51.697 [DEBUG] [Thread-125029] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:10:51.700 [DEBUG] [Thread-125029] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:10:51.712 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:10:51.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T09:10:51.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T09:10:51.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T09:10:51.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:10:51.724 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T09:10:51.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:10:51.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:10:51.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T09:10:51.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.298755 -999.00  +23.20  10.25     19   -1.40 1 1 1 1 1   888    0 24.58 16.59 ----- 11.5 10.2 286.0 19.6 29.1 -30.0 28.6 -29.5 26.9 -27.1 27.3 -28.1
2025-12-31T09:10:51.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T09:10:51.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T09:10:51.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.298755
2025-12-31T09:10:51.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T09:10:51.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T09:10:51.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T09:10:51.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T09:10:51.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T09:10:51.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T09:10:46', tmtdew=28.98, humidity=14.08, cloud=0.0, wind=15.58, temperature=22.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T07:10:12.432', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T09:10:51.728 [DEBUG] [Thread-125029] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:10:51.811 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T09:10:51.832 [DEBUG] [Thread-125032] [transport.py] [_log()] starting thread (client mode): 0xb957b880
2025-12-31T09:10:51.832 [DEBUG] [Thread-125032] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:10:51.850 [DEBUG] [Thread-125032] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T09:10:51.850 [INFO] [Thread-125032] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T09:10:51.861 [DEBUG] [Thread-125032] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:10:51.862 [DEBUG] [Thread-125032] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T09:10:51.862 [DEBUG] [Thread-125032] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:10:51.862 [DEBUG] [Thread-125032] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:10:51.862 [DEBUG] [Thread-125032] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:10:51.863 [DEBUG] [Thread-125032] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:10:51.863 [DEBUG] [Thread-125032] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:10:51.863 [DEBUG] [Thread-125032] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:10:51.863 [DEBUG] [Thread-125032] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:10:51.863 [DEBUG] [Thread-125032] [transport.py] [_log()] client lang: <none>
2025-12-31T09:10:51.863 [DEBUG] [Thread-125032] [transport.py] [_log()] server lang: <none>
2025-12-31T09:10:51.863 [DEBUG] [Thread-125032] [transport.py] [_log()] kex follows: False
2025-12-31T09:10:51.863 [DEBUG] [Thread-125032] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:10:51.863 [DEBUG] [Thread-125032] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:10:51.864 [DEBUG] [Thread-125032] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:10:51.864 [DEBUG] [Thread-125032] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:10:51.864 [DEBUG] [Thread-125032] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:10:51.864 [DEBUG] [Thread-125032] [transport.py] [_log()] Compression: none
2025-12-31T09:10:51.864 [DEBUG] [Thread-125032] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:10:51.930 [DEBUG] [Thread-125032] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:10:51.930 [DEBUG] [Thread-125032] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:10:51.931 [DEBUG] [Thread-125032] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T09:10:51.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T09:10:51.932 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:10:51.999 [DEBUG] [Thread-125032] [transport.py] [_log()] userauth is OK
2025-12-31T09:10:51.999 [DEBUG] [Thread-125032] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:10:51.999 [DEBUG] [Thread-125032] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:10:52.000 [DEBUG] [Thread-125032] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T09:10:52.000 [DEBUG] [Thread-125032] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:10:52.026 [INFO] [Thread-125032] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:10:52.026 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T09:10:52.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:10:53.305 [DEBUG] [Thread-125032] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:10:53.306 [DEBUG] [Thread-125032] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:10:53.354 [DEBUG] [Thread-125032] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:10:53.355 [DEBUG] [Thread-125032] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:10:53.368 [DEBUG] [Thread-125032] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:10:53.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:10: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-12-31T09:10: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-12-31T09:10:53.397 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:10:53.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:10:53.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:10:53.409 [DEBUG] [Thread-125032] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:10:54.353 [DEBUG] [Thread-125034 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:11:02.437 [DEBUG] [Thread-125035 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:11:09.406 [DEBUG] [Thread-125036 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:11:14.312 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:11:14.313 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:11:23.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T09:11:23.428 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T09:11:23.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T09:11:24.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 9, 11, 18), 28.91, 14.14, 0.0, 16.67, 22.93, 0, 0, 0, 2, 0, 0),)
2025-12-31T09:11:24.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 09:11:18
2025-12-31T09:11:24.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T09:11:24.417 [DEBUG] [Thread-125037] [transport.py] [_log()] starting thread (client mode): 0xb6b22c80
2025-12-31T09:11:24.418 [DEBUG] [Thread-125037] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:11:24.437 [DEBUG] [Thread-125037] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T09:11:24.437 [DEBUG] [Thread-125038 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:11:24.437 [INFO] [Thread-125037] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T09:11:24.442 [DEBUG] [Thread-125037] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:11:24.442 [DEBUG] [Thread-125037] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T09:11:24.442 [DEBUG] [Thread-125037] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:11:24.442 [DEBUG] [Thread-125037] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:11:24.442 [DEBUG] [Thread-125037] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:11:24.442 [DEBUG] [Thread-125037] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:11:24.442 [DEBUG] [Thread-125037] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:11:24.442 [DEBUG] [Thread-125037] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:11:24.442 [DEBUG] [Thread-125037] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:11:24.442 [DEBUG] [Thread-125037] [transport.py] [_log()] client lang: <none>
2025-12-31T09:11:24.442 [DEBUG] [Thread-125037] [transport.py] [_log()] server lang: <none>
2025-12-31T09:11:24.442 [DEBUG] [Thread-125037] [transport.py] [_log()] kex follows: False
2025-12-31T09:11:24.442 [DEBUG] [Thread-125037] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:11:24.442 [DEBUG] [Thread-125037] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:11:24.442 [DEBUG] [Thread-125037] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:11:24.442 [DEBUG] [Thread-125037] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:11:24.442 [DEBUG] [Thread-125037] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:11:24.442 [DEBUG] [Thread-125037] [transport.py] [_log()] Compression: none
2025-12-31T09:11:24.442 [DEBUG] [Thread-125037] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:11:24.457 [DEBUG] [Thread-125037] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:11:24.458 [DEBUG] [Thread-125037] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:11:24.458 [DEBUG] [Thread-125037] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T09:11:24.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T09:11:24.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:11:24.459 [DEBUG] [Thread-125037] [transport.py] [_log()] userauth is OK
2025-12-31T09:11:24.459 [DEBUG] [Thread-125037] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:11:24.459 [DEBUG] [Thread-125037] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:11:24.459 [DEBUG] [Thread-125037] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T09:11:24.459 [DEBUG] [Thread-125037] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:11:24.471 [INFO] [Thread-125037] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:11:24.471 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:11:25.112 [DEBUG] [Thread-125037] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:11:25.112 [DEBUG] [Thread-125037] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:11:25.112 [DEBUG] [Thread-125037] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T09:11:25.154 [DEBUG] [Thread-125037] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:11:25.154 [DEBUG] [Thread-125037] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:11:25.156 [DEBUG] [Thread-125037] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:11:25.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:11:25.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T09:11:25.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T09:11:25.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T09:11:25.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:11:25.173 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T09:11:25.173 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:11:25.173 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:11:25.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T09:11:25.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.299103 -999.00  +23.20  12.28     19   -1.20 1 1 1 1 1   888    0 24.32 12.22 ----- 16.1 12.3 299.4 15.4 29.1 -28.3 28.7 -27.3 27.1 -25.5 27.4 -26.5
2025-12-31T09:11:25.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T09:11:25.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T09:11:25.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.299103
2025-12-31T09:11:25.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T09:11:25.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T09:11:25.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T09:11:25.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T09:11:25.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T09:11:25.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T09:11:18', tmtdew=28.91, humidity=14.14, cloud=0.0, wind=16.67, temperature=22.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T07:10:42.499', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T09:11:25.175 [DEBUG] [Thread-125037] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:11:25.249 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T09:11:25.260 [DEBUG] [Thread-125041] [transport.py] [_log()] starting thread (client mode): 0xb6bb2260
2025-12-31T09:11:25.260 [DEBUG] [Thread-125041] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:11:25.277 [DEBUG] [Thread-125041] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T09:11:25.277 [INFO] [Thread-125041] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T09:11:25.284 [DEBUG] [Thread-125041] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:11:25.285 [DEBUG] [Thread-125041] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T09:11:25.285 [DEBUG] [Thread-125041] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:11:25.285 [DEBUG] [Thread-125041] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:11:25.285 [DEBUG] [Thread-125041] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:11:25.285 [DEBUG] [Thread-125041] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:11:25.285 [DEBUG] [Thread-125041] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:11:25.285 [DEBUG] [Thread-125041] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:11:25.285 [DEBUG] [Thread-125041] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:11:25.285 [DEBUG] [Thread-125041] [transport.py] [_log()] client lang: <none>
2025-12-31T09:11:25.285 [DEBUG] [Thread-125041] [transport.py] [_log()] server lang: <none>
2025-12-31T09:11:25.285 [DEBUG] [Thread-125041] [transport.py] [_log()] kex follows: False
2025-12-31T09:11:25.285 [DEBUG] [Thread-125041] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:11:25.285 [DEBUG] [Thread-125041] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:11:25.285 [DEBUG] [Thread-125041] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:11:25.285 [DEBUG] [Thread-125041] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:11:25.285 [DEBUG] [Thread-125041] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:11:25.285 [DEBUG] [Thread-125041] [transport.py] [_log()] Compression: none
2025-12-31T09:11:25.285 [DEBUG] [Thread-125041] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:11:25.343 [DEBUG] [Thread-125041] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:11:25.343 [DEBUG] [Thread-125041] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:11:25.343 [DEBUG] [Thread-125041] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T09:11:25.343 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T09:11:25.343 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:11:25.402 [DEBUG] [Thread-125041] [transport.py] [_log()] userauth is OK
2025-12-31T09:11:25.402 [DEBUG] [Thread-125041] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:11:25.403 [DEBUG] [Thread-125041] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:11:25.403 [DEBUG] [Thread-125041] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T09:11:25.403 [DEBUG] [Thread-125041] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:11:25.427 [INFO] [Thread-125041] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:11:25.427 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T09:11:25.428 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:11:26.064 [DEBUG] [Thread-125041] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:11:26.064 [DEBUG] [Thread-125041] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:11:26.112 [DEBUG] [Thread-125041] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:11:26.112 [DEBUG] [Thread-125041] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:11:26.121 [DEBUG] [Thread-125041] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:11:26.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:11: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')
2025-12-31T09:11:26.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T09:11:26.148 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:11:26.148 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:11:26.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:11:26.156 [DEBUG] [Thread-125041] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:11:39.473 [DEBUG] [Thread-125043 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:11:54.526 [DEBUG] [Thread-125044 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:11:56.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T09:11:56.175 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T09:11:56.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T09:11:56.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 9, 11, 50), 29.44, 13.39, 0.0, 13.64, 23.22, 0, 0, 0, 2, 0, 0),)
2025-12-31T09:11:56.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 09:11:50
2025-12-31T09:11:57.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T09:11:57.166 [DEBUG] [Thread-125045] [transport.py] [_log()] starting thread (client mode): 0xb6bb3ca0
2025-12-31T09:11:57.166 [DEBUG] [Thread-125045] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:11:57.186 [DEBUG] [Thread-125045] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T09:11:57.187 [INFO] [Thread-125045] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T09:11:57.190 [DEBUG] [Thread-125045] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:11:57.190 [DEBUG] [Thread-125045] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T09:11:57.190 [DEBUG] [Thread-125045] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:11:57.190 [DEBUG] [Thread-125045] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:11:57.190 [DEBUG] [Thread-125045] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:11:57.190 [DEBUG] [Thread-125045] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:11:57.190 [DEBUG] [Thread-125045] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:11:57.190 [DEBUG] [Thread-125045] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:11:57.190 [DEBUG] [Thread-125045] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:11:57.190 [DEBUG] [Thread-125045] [transport.py] [_log()] client lang: <none>
2025-12-31T09:11:57.190 [DEBUG] [Thread-125045] [transport.py] [_log()] server lang: <none>
2025-12-31T09:11:57.191 [DEBUG] [Thread-125045] [transport.py] [_log()] kex follows: False
2025-12-31T09:11:57.191 [DEBUG] [Thread-125045] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:11:57.191 [DEBUG] [Thread-125045] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:11:57.191 [DEBUG] [Thread-125045] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:11:57.191 [DEBUG] [Thread-125045] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:11:57.191 [DEBUG] [Thread-125045] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:11:57.191 [DEBUG] [Thread-125045] [transport.py] [_log()] Compression: none
2025-12-31T09:11:57.191 [DEBUG] [Thread-125045] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:11:57.208 [DEBUG] [Thread-125045] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:11:57.208 [DEBUG] [Thread-125045] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:11:57.209 [DEBUG] [Thread-125045] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T09:11:57.209 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T09:11:57.209 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:11:57.211 [DEBUG] [Thread-125045] [transport.py] [_log()] userauth is OK
2025-12-31T09:11:57.211 [DEBUG] [Thread-125045] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:11:57.211 [DEBUG] [Thread-125045] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:11:57.211 [DEBUG] [Thread-125045] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T09:11:57.211 [DEBUG] [Thread-125045] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:11:57.234 [INFO] [Thread-125045] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:11:57.234 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:11:57.877 [DEBUG] [Thread-125045] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:11:57.877 [DEBUG] [Thread-125045] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:11:57.877 [DEBUG] [Thread-125045] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T09:11:57.918 [DEBUG] [Thread-125045] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:11:57.918 [DEBUG] [Thread-125045] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:11:57.920 [DEBUG] [Thread-125045] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:11:57.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:11:57.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T09:11:57.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T09:11:57.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T09:11:57.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:11:57.938 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T09:11:57.938 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:11:57.938 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:11:57.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T09:11:57.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.299450 -999.00  +23.00  12.11     19   -1.60 1 1 1 1 1   888    0 24.30 8.75 ----- 11.3 12.1 305.0 20.4 29.3 -28.6 28.8 -27.6 27.1 -26.0 27.5 -27.0
2025-12-31T09:11:57.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T09:11:57.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T09:11:57.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.299450
2025-12-31T09:11:57.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T09:11:57.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T09:11:57.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T09:11:57.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T09:11:57.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T09:11:57.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T09:11:50', tmtdew=29.44, humidity=13.39, cloud=0.0, wind=13.64, temperature=23.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T07:11:12.480', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T09:11:57.939 [DEBUG] [Thread-125045] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:11:58.013 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T09:11:58.024 [DEBUG] [Thread-125048] [transport.py] [_log()] starting thread (client mode): 0xb6b21b40
2025-12-31T09:11:58.024 [DEBUG] [Thread-125048] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:11:58.038 [DEBUG] [Thread-125048] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T09:11:58.038 [INFO] [Thread-125048] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T09:11:58.047 [DEBUG] [Thread-125048] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:11:58.047 [DEBUG] [Thread-125048] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T09:11:58.047 [DEBUG] [Thread-125048] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:11:58.047 [DEBUG] [Thread-125048] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:11:58.047 [DEBUG] [Thread-125048] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:11:58.047 [DEBUG] [Thread-125048] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:11:58.047 [DEBUG] [Thread-125048] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:11:58.047 [DEBUG] [Thread-125048] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:11:58.047 [DEBUG] [Thread-125048] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:11:58.047 [DEBUG] [Thread-125048] [transport.py] [_log()] client lang: <none>
2025-12-31T09:11:58.047 [DEBUG] [Thread-125048] [transport.py] [_log()] server lang: <none>
2025-12-31T09:11:58.047 [DEBUG] [Thread-125048] [transport.py] [_log()] kex follows: False
2025-12-31T09:11:58.047 [DEBUG] [Thread-125048] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:11:58.047 [DEBUG] [Thread-125048] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:11:58.047 [DEBUG] [Thread-125048] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:11:58.047 [DEBUG] [Thread-125048] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:11:58.047 [DEBUG] [Thread-125048] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:11:58.047 [DEBUG] [Thread-125048] [transport.py] [_log()] Compression: none
2025-12-31T09:11:58.047 [DEBUG] [Thread-125048] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:11:58.104 [DEBUG] [Thread-125048] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:11:58.104 [DEBUG] [Thread-125048] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:11:58.104 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T09:11:58.105 [DEBUG] [Thread-125048] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T09:11:58.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:11:58.161 [DEBUG] [Thread-125048] [transport.py] [_log()] userauth is OK
2025-12-31T09:11:58.162 [DEBUG] [Thread-125048] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:11:58.162 [DEBUG] [Thread-125048] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:11:58.162 [DEBUG] [Thread-125048] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T09:11:58.162 [DEBUG] [Thread-125048] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:11:58.179 [INFO] [Thread-125048] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:11:58.179 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T09:11:58.180 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:11:59.166 [DEBUG] [Thread-125048] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:11:59.166 [DEBUG] [Thread-125048] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:11:59.213 [DEBUG] [Thread-125048] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:11:59.213 [DEBUG] [Thread-125048] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:11:59.222 [DEBUG] [Thread-125048] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:11:59.229 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:11:59.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T09:11:59.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T09:11:59.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:11:59.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:11:59.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:11:59.252 [DEBUG] [Thread-125048] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:12:02.491 [DEBUG] [Thread-125050 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:12:09.561 [DEBUG] [Thread-125051 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:12:14.461 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:12:14.463 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:12:24.615 [DEBUG] [Thread-125052 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:12:29.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T09:12:29.275 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T09:12:29.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T09:12:30.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 9, 12, 22), 29.75, 13.08, 0.0, 13.37, 23.15, 0, 0, 0, 2, 0, 0),)
2025-12-31T09:12:30.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 09:12:22
2025-12-31T09:12:30.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T09:12:30.280 [DEBUG] [Thread-125053] [transport.py] [_log()] starting thread (client mode): 0xb9559d80
2025-12-31T09:12:30.280 [DEBUG] [Thread-125053] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:12:30.300 [DEBUG] [Thread-125053] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T09:12:30.300 [INFO] [Thread-125053] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T09:12:30.304 [DEBUG] [Thread-125053] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:12:30.304 [DEBUG] [Thread-125053] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T09:12:30.304 [DEBUG] [Thread-125053] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:12:30.304 [DEBUG] [Thread-125053] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:12:30.304 [DEBUG] [Thread-125053] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:12:30.304 [DEBUG] [Thread-125053] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:12:30.304 [DEBUG] [Thread-125053] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:12:30.304 [DEBUG] [Thread-125053] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:12:30.304 [DEBUG] [Thread-125053] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:12:30.304 [DEBUG] [Thread-125053] [transport.py] [_log()] client lang: <none>
2025-12-31T09:12:30.304 [DEBUG] [Thread-125053] [transport.py] [_log()] server lang: <none>
2025-12-31T09:12:30.305 [DEBUG] [Thread-125053] [transport.py] [_log()] kex follows: False
2025-12-31T09:12:30.305 [DEBUG] [Thread-125053] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:12:30.305 [DEBUG] [Thread-125053] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:12:30.305 [DEBUG] [Thread-125053] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:12:30.305 [DEBUG] [Thread-125053] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:12:30.305 [DEBUG] [Thread-125053] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:12:30.305 [DEBUG] [Thread-125053] [transport.py] [_log()] Compression: none
2025-12-31T09:12:30.305 [DEBUG] [Thread-125053] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:12:30.324 [DEBUG] [Thread-125053] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:12:30.325 [DEBUG] [Thread-125053] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:12:30.326 [DEBUG] [Thread-125053] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T09:12:30.326 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T09:12:30.327 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:12:30.328 [DEBUG] [Thread-125053] [transport.py] [_log()] userauth is OK
2025-12-31T09:12:30.328 [DEBUG] [Thread-125053] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:12:30.328 [DEBUG] [Thread-125053] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:12:30.328 [DEBUG] [Thread-125053] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T09:12:30.328 [DEBUG] [Thread-125053] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:12:30.363 [INFO] [Thread-125053] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:12:30.363 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:12:31.038 [DEBUG] [Thread-125053] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:12:31.038 [DEBUG] [Thread-125053] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:12:31.038 [DEBUG] [Thread-125053] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T09:12:31.079 [DEBUG] [Thread-125053] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:12:31.079 [DEBUG] [Thread-125053] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:12:31.082 [DEBUG] [Thread-125053] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:12:31.093 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:12:31.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T09:12:31.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T09:12:31.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T09:12:31.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:12:31.102 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T09:12:31.102 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:12:31.102 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:12:31.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T09:12:31.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.299797 -999.00  +22.90   9.42     19   -1.30 1 1 1 1 1   888    0 24.48 4.89 ----- 13.2 9.4 293.4 13.8 29.5 -28.9 28.9 -27.4 27.2 -25.9 27.6 -26.7
2025-12-31T09:12:31.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T09:12:31.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T09:12:31.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.299797
2025-12-31T09:12:31.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T09:12:31.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T09:12:31.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T09:12:31.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T09:12:31.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T09:12:31.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T09:12:22', tmtdew=29.75, humidity=13.08, cloud=0.0, wind=13.37, temperature=23.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T07:11:42.461', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T09:12:31.104 [DEBUG] [Thread-125053] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:12:31.189 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T09:12:31.201 [DEBUG] [Thread-125056] [transport.py] [_log()] starting thread (client mode): 0xb955b280
2025-12-31T09:12:31.201 [DEBUG] [Thread-125056] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:12:31.217 [DEBUG] [Thread-125056] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T09:12:31.217 [INFO] [Thread-125056] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T09:12:31.224 [DEBUG] [Thread-125056] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:12:31.225 [DEBUG] [Thread-125056] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T09:12:31.225 [DEBUG] [Thread-125056] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:12:31.225 [DEBUG] [Thread-125056] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:12:31.225 [DEBUG] [Thread-125056] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:12:31.225 [DEBUG] [Thread-125056] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:12:31.225 [DEBUG] [Thread-125056] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:12:31.225 [DEBUG] [Thread-125056] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:12:31.225 [DEBUG] [Thread-125056] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:12:31.225 [DEBUG] [Thread-125056] [transport.py] [_log()] client lang: <none>
2025-12-31T09:12:31.226 [DEBUG] [Thread-125056] [transport.py] [_log()] server lang: <none>
2025-12-31T09:12:31.226 [DEBUG] [Thread-125056] [transport.py] [_log()] kex follows: False
2025-12-31T09:12:31.226 [DEBUG] [Thread-125056] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:12:31.226 [DEBUG] [Thread-125056] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:12:31.226 [DEBUG] [Thread-125056] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:12:31.226 [DEBUG] [Thread-125056] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:12:31.226 [DEBUG] [Thread-125056] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:12:31.226 [DEBUG] [Thread-125056] [transport.py] [_log()] Compression: none
2025-12-31T09:12:31.227 [DEBUG] [Thread-125056] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:12:31.280 [DEBUG] [Thread-125056] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:12:31.280 [DEBUG] [Thread-125056] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:12:31.281 [DEBUG] [Thread-125056] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T09:12:31.281 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T09:12:31.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:12:31.337 [DEBUG] [Thread-125056] [transport.py] [_log()] userauth is OK
2025-12-31T09:12:31.337 [DEBUG] [Thread-125056] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:12:31.337 [DEBUG] [Thread-125056] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:12:31.337 [DEBUG] [Thread-125056] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T09:12:31.337 [DEBUG] [Thread-125056] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:12:31.360 [INFO] [Thread-125056] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:12:31.360 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T09:12:31.360 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:12:31.746 [DEBUG] [Thread-125056] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:12:31.747 [DEBUG] [Thread-125056] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:12:31.795 [DEBUG] [Thread-125056] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:12:31.796 [DEBUG] [Thread-125056] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:12:31.805 [DEBUG] [Thread-125056] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:12:31.814 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:12:31.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T09:12:31.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T09:12:31.838 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:12:31.839 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:12:31.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:12:31.850 [DEBUG] [Thread-125056] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:12:39.646 [DEBUG] [Thread-125058 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:12:54.686 [DEBUG] [Thread-125059 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:13:01.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T09:13:01.843 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T09:13:01.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T09:13:02.542 [DEBUG] [Thread-125060 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:13:02.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 9, 12, 54), 29.5, 13.33, 0.0, 15.4, 22.97, 0, 0, 0, 2, 0, 0),)
2025-12-31T09:13:02.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 09:12:54
2025-12-31T09:13:02.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T09:13:02.831 [DEBUG] [Thread-125061] [transport.py] [_log()] starting thread (client mode): 0xb6b001c0
2025-12-31T09:13:02.831 [DEBUG] [Thread-125061] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:13:02.847 [DEBUG] [Thread-125061] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T09:13:02.847 [INFO] [Thread-125061] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T09:13:02.850 [DEBUG] [Thread-125061] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:13:02.850 [DEBUG] [Thread-125061] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T09:13:02.850 [DEBUG] [Thread-125061] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:13:02.850 [DEBUG] [Thread-125061] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:13:02.850 [DEBUG] [Thread-125061] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:13:02.850 [DEBUG] [Thread-125061] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:13:02.850 [DEBUG] [Thread-125061] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:13:02.850 [DEBUG] [Thread-125061] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:13:02.850 [DEBUG] [Thread-125061] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:13:02.850 [DEBUG] [Thread-125061] [transport.py] [_log()] client lang: <none>
2025-12-31T09:13:02.850 [DEBUG] [Thread-125061] [transport.py] [_log()] server lang: <none>
2025-12-31T09:13:02.851 [DEBUG] [Thread-125061] [transport.py] [_log()] kex follows: False
2025-12-31T09:13:02.851 [DEBUG] [Thread-125061] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:13:02.851 [DEBUG] [Thread-125061] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:13:02.851 [DEBUG] [Thread-125061] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:13:02.851 [DEBUG] [Thread-125061] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:13:02.851 [DEBUG] [Thread-125061] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:13:02.851 [DEBUG] [Thread-125061] [transport.py] [_log()] Compression: none
2025-12-31T09:13:02.851 [DEBUG] [Thread-125061] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:13:02.868 [DEBUG] [Thread-125061] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:13:02.868 [DEBUG] [Thread-125061] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:13:02.869 [DEBUG] [Thread-125061] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T09:13:02.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T09:13:02.870 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:13:02.871 [DEBUG] [Thread-125061] [transport.py] [_log()] userauth is OK
2025-12-31T09:13:02.871 [DEBUG] [Thread-125061] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:13:02.871 [DEBUG] [Thread-125061] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:13:02.871 [DEBUG] [Thread-125061] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T09:13:02.871 [DEBUG] [Thread-125061] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:13:02.895 [INFO] [Thread-125061] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:13:02.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:13:03.506 [DEBUG] [Thread-125061] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:13:03.506 [DEBUG] [Thread-125061] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:13:03.507 [DEBUG] [Thread-125061] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T09:13:03.547 [DEBUG] [Thread-125061] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:13:03.547 [DEBUG] [Thread-125061] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:13:03.551 [DEBUG] [Thread-125061] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:13:03.562 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:13:03.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T09:13:03.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T09:13:03.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T09:13:03.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:13:03.574 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T09:13:03.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:13:03.574 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:13:03.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T09:13:03.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.300491 -999.00  +23.50  18.23     19   -1.20 1 1 1 1 1   888    0 24.71 6.20 ----- 15.0 18.2 293.7 21.3 29.7 -27.2 29.1 -27.0 27.3 -26.8 27.7 -26.3
2025-12-31T09:13:03.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T09:13:03.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T09:13:03.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.300491
2025-12-31T09:13:03.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T09:13:03.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T09:13:03.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T09:13:03.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T09:13:03.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T09:13:03.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T09:12:54', tmtdew=29.5, humidity=13.33, cloud=0.0, wind=15.4, temperature=22.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T07:12:42.422', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T09:13:03.577 [DEBUG] [Thread-125061] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:13:03.661 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T09:13:03.674 [DEBUG] [Thread-125064] [transport.py] [_log()] starting thread (client mode): 0xb6b027d0
2025-12-31T09:13:03.674 [DEBUG] [Thread-125064] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:13:03.689 [DEBUG] [Thread-125064] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T09:13:03.689 [INFO] [Thread-125064] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T09:13:03.696 [DEBUG] [Thread-125064] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:13:03.696 [DEBUG] [Thread-125064] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T09:13:03.696 [DEBUG] [Thread-125064] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:13:03.696 [DEBUG] [Thread-125064] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:13:03.696 [DEBUG] [Thread-125064] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:13:03.697 [DEBUG] [Thread-125064] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:13:03.697 [DEBUG] [Thread-125064] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:13:03.697 [DEBUG] [Thread-125064] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:13:03.697 [DEBUG] [Thread-125064] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:13:03.697 [DEBUG] [Thread-125064] [transport.py] [_log()] client lang: <none>
2025-12-31T09:13:03.697 [DEBUG] [Thread-125064] [transport.py] [_log()] server lang: <none>
2025-12-31T09:13:03.697 [DEBUG] [Thread-125064] [transport.py] [_log()] kex follows: False
2025-12-31T09:13:03.697 [DEBUG] [Thread-125064] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:13:03.697 [DEBUG] [Thread-125064] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:13:03.697 [DEBUG] [Thread-125064] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:13:03.697 [DEBUG] [Thread-125064] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:13:03.697 [DEBUG] [Thread-125064] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:13:03.697 [DEBUG] [Thread-125064] [transport.py] [_log()] Compression: none
2025-12-31T09:13:03.697 [DEBUG] [Thread-125064] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:13:03.756 [DEBUG] [Thread-125064] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:13:03.757 [DEBUG] [Thread-125064] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:13:03.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T09:13:03.758 [DEBUG] [Thread-125064] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T09:13:03.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:13:03.816 [DEBUG] [Thread-125064] [transport.py] [_log()] userauth is OK
2025-12-31T09:13:03.816 [DEBUG] [Thread-125064] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:13:03.816 [DEBUG] [Thread-125064] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:13:03.816 [DEBUG] [Thread-125064] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T09:13:03.816 [DEBUG] [Thread-125064] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:13:03.835 [INFO] [Thread-125064] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:13:03.835 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T09:13:03.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:13:04.675 [DEBUG] [Thread-125064] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:13:04.676 [DEBUG] [Thread-125064] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:13:04.723 [DEBUG] [Thread-125064] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:13:04.724 [DEBUG] [Thread-125064] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:13:04.736 [DEBUG] [Thread-125064] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:13:04.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:13:04.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T09:13:04.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T09:13:04.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:13:04.766 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:13:04.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:13:04.775 [DEBUG] [Thread-125064] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:13:09.720 [DEBUG] [Thread-125066 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:13:14.605 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:13:14.606 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:13:24.779 [DEBUG] [Thread-125067 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:13:34.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T09:13:34.797 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T09:13:34.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T09:13:35.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 9, 13, 26), 29.22, 13.62, 0.0, 17.84, 23.02, 0, 0, 0, 2, 0, 0),)
2025-12-31T09:13:35.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 09:13:26
2025-12-31T09:13:35.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T09:13:35.784 [DEBUG] [Thread-125068] [transport.py] [_log()] starting thread (client mode): 0xb6b20b20
2025-12-31T09:13:35.784 [DEBUG] [Thread-125068] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:13:35.804 [DEBUG] [Thread-125068] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T09:13:35.804 [INFO] [Thread-125068] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T09:13:35.807 [DEBUG] [Thread-125068] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:13:35.807 [DEBUG] [Thread-125068] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T09:13:35.808 [DEBUG] [Thread-125068] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:13:35.808 [DEBUG] [Thread-125068] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:13:35.808 [DEBUG] [Thread-125068] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:13:35.808 [DEBUG] [Thread-125068] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:13:35.808 [DEBUG] [Thread-125068] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:13:35.808 [DEBUG] [Thread-125068] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:13:35.808 [DEBUG] [Thread-125068] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:13:35.808 [DEBUG] [Thread-125068] [transport.py] [_log()] client lang: <none>
2025-12-31T09:13:35.808 [DEBUG] [Thread-125068] [transport.py] [_log()] server lang: <none>
2025-12-31T09:13:35.808 [DEBUG] [Thread-125068] [transport.py] [_log()] kex follows: False
2025-12-31T09:13:35.808 [DEBUG] [Thread-125068] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:13:35.808 [DEBUG] [Thread-125068] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:13:35.808 [DEBUG] [Thread-125068] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:13:35.809 [DEBUG] [Thread-125068] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:13:35.809 [DEBUG] [Thread-125068] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:13:35.809 [DEBUG] [Thread-125068] [transport.py] [_log()] Compression: none
2025-12-31T09:13:35.809 [DEBUG] [Thread-125068] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:13:35.827 [DEBUG] [Thread-125068] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:13:35.828 [DEBUG] [Thread-125068] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:13:35.829 [DEBUG] [Thread-125068] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T09:13:35.830 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T09:13:35.830 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:13:35.831 [DEBUG] [Thread-125068] [transport.py] [_log()] userauth is OK
2025-12-31T09:13:35.831 [DEBUG] [Thread-125068] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:13:35.832 [DEBUG] [Thread-125068] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:13:35.832 [DEBUG] [Thread-125068] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T09:13:35.832 [DEBUG] [Thread-125068] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:13:35.848 [INFO] [Thread-125068] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:13:35.849 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:13:36.512 [DEBUG] [Thread-125068] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:13:36.512 [DEBUG] [Thread-125068] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:13:36.512 [DEBUG] [Thread-125068] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T09:13:36.554 [DEBUG] [Thread-125068] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:13:36.554 [DEBUG] [Thread-125068] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:13:36.558 [DEBUG] [Thread-125068] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:13:36.571 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:13:36.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T09:13:36.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T09:13:36.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T09:13:36.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:13:36.586 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T09:13:36.586 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:13:36.586 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:13:36.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T09:13:36.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.300839 -999.00  +23.50  16.88     19   -1.00 1 1 1 1 1   888    0 24.39 8.68 ----- 13.4 16.9 277.6 20.9 29.7 -28.8 29.1 -27.9 27.2 -28.1 27.8 -26.9
2025-12-31T09:13:36.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T09:13:36.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T09:13:36.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.300839
2025-12-31T09:13:36.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T09:13:36.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T09:13:36.589 [DEBUG] [Thread-125068] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:13:36.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T09:13:36.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T09:13:36.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T09:13:36.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T09:13:26', tmtdew=29.22, humidity=13.62, cloud=0.0, wind=17.84, temperature=23.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T07:13:12.490', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T09:13:36.686 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T09:13:36.698 [DEBUG] [Thread-125071] [transport.py] [_log()] starting thread (client mode): 0xb955b280
2025-12-31T09:13:36.698 [DEBUG] [Thread-125071] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:13:36.712 [DEBUG] [Thread-125071] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T09:13:36.712 [INFO] [Thread-125071] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T09:13:36.720 [DEBUG] [Thread-125071] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:13:36.720 [DEBUG] [Thread-125071] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T09:13:36.721 [DEBUG] [Thread-125071] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:13:36.721 [DEBUG] [Thread-125071] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:13:36.721 [DEBUG] [Thread-125071] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:13:36.721 [DEBUG] [Thread-125071] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:13:36.721 [DEBUG] [Thread-125071] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:13:36.721 [DEBUG] [Thread-125071] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:13:36.721 [DEBUG] [Thread-125071] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:13:36.721 [DEBUG] [Thread-125071] [transport.py] [_log()] client lang: <none>
2025-12-31T09:13:36.721 [DEBUG] [Thread-125071] [transport.py] [_log()] server lang: <none>
2025-12-31T09:13:36.722 [DEBUG] [Thread-125071] [transport.py] [_log()] kex follows: False
2025-12-31T09:13:36.722 [DEBUG] [Thread-125071] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:13:36.722 [DEBUG] [Thread-125071] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:13:36.722 [DEBUG] [Thread-125071] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:13:36.722 [DEBUG] [Thread-125071] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:13:36.722 [DEBUG] [Thread-125071] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:13:36.722 [DEBUG] [Thread-125071] [transport.py] [_log()] Compression: none
2025-12-31T09:13:36.723 [DEBUG] [Thread-125071] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:13:36.781 [DEBUG] [Thread-125071] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:13:36.781 [DEBUG] [Thread-125071] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:13:36.782 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T09:13:36.782 [DEBUG] [Thread-125071] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T09:13:36.783 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:13:36.840 [DEBUG] [Thread-125071] [transport.py] [_log()] userauth is OK
2025-12-31T09:13:36.840 [DEBUG] [Thread-125071] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:13:36.841 [DEBUG] [Thread-125071] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:13:36.841 [DEBUG] [Thread-125071] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T09:13:36.841 [DEBUG] [Thread-125071] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:13:36.860 [INFO] [Thread-125071] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:13:36.860 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T09:13:36.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:13:37.704 [DEBUG] [Thread-125071] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:13:37.704 [DEBUG] [Thread-125071] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:13:37.752 [DEBUG] [Thread-125071] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:13:37.752 [DEBUG] [Thread-125071] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:13:37.761 [DEBUG] [Thread-125071] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:13:37.770 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:13:37.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T09:13:37.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T09:13:37.788 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:13:37.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:13:37.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:13:37.796 [DEBUG] [Thread-125071] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:13:39.816 [DEBUG] [Thread-125073 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:13:54.866 [DEBUG] [Thread-125074 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:14:02.596 [DEBUG] [Thread-125075 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:14:07.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T09:14:07.793 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T09:14:07.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T09:14:08.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 9, 13, 58), 29.22, 13.54, 0.0, 15.97, 23.32, 0, 0, 0, 2, 0, 0),)
2025-12-31T09:14:08.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 09:13:58
2025-12-31T09:14:08.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T09:14:08.775 [DEBUG] [Thread-125076] [transport.py] [_log()] starting thread (client mode): 0xb6bb3880
2025-12-31T09:14:08.775 [DEBUG] [Thread-125076] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:14:08.795 [DEBUG] [Thread-125076] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T09:14:08.795 [INFO] [Thread-125076] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T09:14:08.798 [DEBUG] [Thread-125076] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:14:08.798 [DEBUG] [Thread-125076] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T09:14:08.798 [DEBUG] [Thread-125076] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:14:08.798 [DEBUG] [Thread-125076] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:14:08.798 [DEBUG] [Thread-125076] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:14:08.798 [DEBUG] [Thread-125076] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:14:08.798 [DEBUG] [Thread-125076] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:14:08.798 [DEBUG] [Thread-125076] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:14:08.798 [DEBUG] [Thread-125076] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:14:08.798 [DEBUG] [Thread-125076] [transport.py] [_log()] client lang: <none>
2025-12-31T09:14:08.798 [DEBUG] [Thread-125076] [transport.py] [_log()] server lang: <none>
2025-12-31T09:14:08.798 [DEBUG] [Thread-125076] [transport.py] [_log()] kex follows: False
2025-12-31T09:14:08.798 [DEBUG] [Thread-125076] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:14:08.798 [DEBUG] [Thread-125076] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:14:08.798 [DEBUG] [Thread-125076] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:14:08.798 [DEBUG] [Thread-125076] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:14:08.798 [DEBUG] [Thread-125076] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:14:08.798 [DEBUG] [Thread-125076] [transport.py] [_log()] Compression: none
2025-12-31T09:14:08.798 [DEBUG] [Thread-125076] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:14:08.815 [DEBUG] [Thread-125076] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:14:08.816 [DEBUG] [Thread-125076] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:14:08.816 [DEBUG] [Thread-125076] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T09:14:08.816 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T09:14:08.817 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:14:08.818 [DEBUG] [Thread-125076] [transport.py] [_log()] userauth is OK
2025-12-31T09:14:08.818 [DEBUG] [Thread-125076] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:14:08.819 [DEBUG] [Thread-125076] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:14:08.819 [DEBUG] [Thread-125076] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T09:14:08.819 [DEBUG] [Thread-125076] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:14:08.844 [INFO] [Thread-125076] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:14:08.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:14:09.457 [DEBUG] [Thread-125076] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:14:09.458 [DEBUG] [Thread-125076] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:14:09.458 [DEBUG] [Thread-125076] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T09:14:09.499 [DEBUG] [Thread-125076] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:14:09.499 [DEBUG] [Thread-125076] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:14:09.503 [DEBUG] [Thread-125076] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:14:09.514 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:14:09.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T09:14:09.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T09:14:09.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T09:14:09.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:14:09.525 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T09:14:09.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:14:09.526 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:14:09.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T09:14:09.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.301186 -999.00  +23.50  12.86     19   -1.00 1 1 1 1 1   888    0 24.43 8.63 ----- 11.7 12.9 291.4 16.0 29.7 -28.4 29.1 -27.5 27.3 -25.7 27.8 -26.7
2025-12-31T09:14:09.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T09:14:09.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T09:14:09.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.301186
2025-12-31T09:14:09.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T09:14:09.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T09:14:09.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T09:14:09.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T09:14:09.528 [DEBUG] [Thread-125076] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:14:09.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T09:14:09.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T09:13:58', tmtdew=29.22, humidity=13.54, cloud=0.0, wind=15.97, temperature=23.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T07:13:42.470', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T09:14:09.611 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T09:14:09.623 [DEBUG] [Thread-125079] [transport.py] [_log()] starting thread (client mode): 0xb9590c40
2025-12-31T09:14:09.624 [DEBUG] [Thread-125079] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:14:09.639 [DEBUG] [Thread-125079] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T09:14:09.639 [INFO] [Thread-125079] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T09:14:09.650 [DEBUG] [Thread-125079] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:14:09.651 [DEBUG] [Thread-125079] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T09:14:09.651 [DEBUG] [Thread-125079] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:14:09.651 [DEBUG] [Thread-125079] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:14:09.651 [DEBUG] [Thread-125079] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:14:09.651 [DEBUG] [Thread-125079] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:14:09.651 [DEBUG] [Thread-125079] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:14:09.651 [DEBUG] [Thread-125079] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:14:09.651 [DEBUG] [Thread-125079] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:14:09.652 [DEBUG] [Thread-125079] [transport.py] [_log()] client lang: <none>
2025-12-31T09:14:09.652 [DEBUG] [Thread-125079] [transport.py] [_log()] server lang: <none>
2025-12-31T09:14:09.652 [DEBUG] [Thread-125079] [transport.py] [_log()] kex follows: False
2025-12-31T09:14:09.652 [DEBUG] [Thread-125079] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:14:09.652 [DEBUG] [Thread-125079] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:14:09.652 [DEBUG] [Thread-125079] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:14:09.652 [DEBUG] [Thread-125079] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:14:09.653 [DEBUG] [Thread-125079] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:14:09.653 [DEBUG] [Thread-125079] [transport.py] [_log()] Compression: none
2025-12-31T09:14:09.653 [DEBUG] [Thread-125079] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:14:09.708 [DEBUG] [Thread-125079] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:14:09.709 [DEBUG] [Thread-125079] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:14:09.709 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T09:14:09.710 [DEBUG] [Thread-125079] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T09:14:09.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:14:09.768 [DEBUG] [Thread-125079] [transport.py] [_log()] userauth is OK
2025-12-31T09:14:09.768 [DEBUG] [Thread-125079] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:14:09.768 [DEBUG] [Thread-125079] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:14:09.768 [DEBUG] [Thread-125079] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T09:14:09.768 [DEBUG] [Thread-125079] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:14:09.787 [INFO] [Thread-125079] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:14:09.788 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T09:14:09.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:14:09.903 [DEBUG] [Thread-125081 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:14:10.615 [DEBUG] [Thread-125079] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:14:10.615 [DEBUG] [Thread-125079] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:14:10.663 [DEBUG] [Thread-125079] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:14:10.663 [DEBUG] [Thread-125079] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:14:10.673 [DEBUG] [Thread-125079] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:14:10.684 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:14:10.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T09:14:10.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T09:14:10.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:14:10.706 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:14:10.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:14:10.715 [DEBUG] [Thread-125079] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:14:14.754 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:14:14.755 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:14:24.956 [DEBUG] [Thread-125082 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:14:39.986 [DEBUG] [Thread-125083 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:14:40.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T09:14:40.725 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T09:14:40.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T09:14:41.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 9, 14, 30), 29.41, 13.41, 0.0, 16.71, 23.56, 0, 0, 0, 2, 0, 0),)
2025-12-31T09:14:41.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 09:14:30
2025-12-31T09:14:41.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T09:14:41.706 [DEBUG] [Thread-125084] [transport.py] [_log()] starting thread (client mode): 0xb6bb29b0
2025-12-31T09:14:41.706 [DEBUG] [Thread-125084] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:14:41.725 [DEBUG] [Thread-125084] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T09:14:41.725 [INFO] [Thread-125084] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T09:14:41.729 [DEBUG] [Thread-125084] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:14:41.729 [DEBUG] [Thread-125084] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T09:14:41.729 [DEBUG] [Thread-125084] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:14:41.729 [DEBUG] [Thread-125084] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:14:41.729 [DEBUG] [Thread-125084] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:14:41.729 [DEBUG] [Thread-125084] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:14:41.729 [DEBUG] [Thread-125084] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:14:41.729 [DEBUG] [Thread-125084] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:14:41.729 [DEBUG] [Thread-125084] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:14:41.729 [DEBUG] [Thread-125084] [transport.py] [_log()] client lang: <none>
2025-12-31T09:14:41.729 [DEBUG] [Thread-125084] [transport.py] [_log()] server lang: <none>
2025-12-31T09:14:41.729 [DEBUG] [Thread-125084] [transport.py] [_log()] kex follows: False
2025-12-31T09:14:41.729 [DEBUG] [Thread-125084] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:14:41.729 [DEBUG] [Thread-125084] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:14:41.729 [DEBUG] [Thread-125084] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:14:41.729 [DEBUG] [Thread-125084] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:14:41.729 [DEBUG] [Thread-125084] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:14:41.729 [DEBUG] [Thread-125084] [transport.py] [_log()] Compression: none
2025-12-31T09:14:41.729 [DEBUG] [Thread-125084] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:14:41.745 [DEBUG] [Thread-125084] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:14:41.746 [DEBUG] [Thread-125084] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:14:41.747 [DEBUG] [Thread-125084] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T09:14:41.747 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T09:14:41.747 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:14:41.749 [DEBUG] [Thread-125084] [transport.py] [_log()] userauth is OK
2025-12-31T09:14:41.749 [DEBUG] [Thread-125084] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:14:41.749 [DEBUG] [Thread-125084] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:14:41.749 [DEBUG] [Thread-125084] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T09:14:41.749 [DEBUG] [Thread-125084] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:14:41.774 [INFO] [Thread-125084] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:14:41.774 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:14:42.396 [DEBUG] [Thread-125084] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:14:42.397 [DEBUG] [Thread-125084] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:14:42.397 [DEBUG] [Thread-125084] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T09:14:42.438 [DEBUG] [Thread-125084] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:14:42.438 [DEBUG] [Thread-125084] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:14:42.442 [DEBUG] [Thread-125084] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:14:42.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:14:42.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T09:14:42.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T09:14:42.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T09:14:42.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:14:42.467 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T09:14:42.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:14:42.467 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:14:42.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T09:14:42.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.301533 -999.00  +23.50  16.08     18   -1.60 1 1 1 1 1   888    0 24.88 10.78 ----- 15.8 16.1 303.7 22.1 29.8 -29.6 29.2 -28.1 27.4 -28.2 27.8 -27.1
2025-12-31T09:14:42.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T09:14:42.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T09:14:42.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.301533
2025-12-31T09:14:42.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T09:14:42.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T09:14:42.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T09:14:42.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T09:14:42.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T09:14:42.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T09:14:30', tmtdew=29.41, humidity=13.41, cloud=0.0, wind=16.71, temperature=23.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T07:14:12.451', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T09:14:42.470 [DEBUG] [Thread-125084] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:14:42.550 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T09:14:42.561 [DEBUG] [Thread-125087] [transport.py] [_log()] starting thread (client mode): 0xb6bb16c0
2025-12-31T09:14:42.561 [DEBUG] [Thread-125087] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:14:42.576 [DEBUG] [Thread-125087] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T09:14:42.576 [INFO] [Thread-125087] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T09:14:42.585 [DEBUG] [Thread-125087] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:14:42.585 [DEBUG] [Thread-125087] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T09:14:42.585 [DEBUG] [Thread-125087] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:14:42.585 [DEBUG] [Thread-125087] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:14:42.585 [DEBUG] [Thread-125087] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:14:42.586 [DEBUG] [Thread-125087] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:14:42.586 [DEBUG] [Thread-125087] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:14:42.586 [DEBUG] [Thread-125087] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:14:42.586 [DEBUG] [Thread-125087] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:14:42.586 [DEBUG] [Thread-125087] [transport.py] [_log()] client lang: <none>
2025-12-31T09:14:42.586 [DEBUG] [Thread-125087] [transport.py] [_log()] server lang: <none>
2025-12-31T09:14:42.586 [DEBUG] [Thread-125087] [transport.py] [_log()] kex follows: False
2025-12-31T09:14:42.586 [DEBUG] [Thread-125087] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:14:42.586 [DEBUG] [Thread-125087] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:14:42.586 [DEBUG] [Thread-125087] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:14:42.586 [DEBUG] [Thread-125087] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:14:42.586 [DEBUG] [Thread-125087] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:14:42.586 [DEBUG] [Thread-125087] [transport.py] [_log()] Compression: none
2025-12-31T09:14:42.586 [DEBUG] [Thread-125087] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:14:42.644 [DEBUG] [Thread-125087] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:14:42.644 [DEBUG] [Thread-125087] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:14:42.645 [DEBUG] [Thread-125087] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T09:14:42.645 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T09:14:42.646 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:14:42.700 [DEBUG] [Thread-125087] [transport.py] [_log()] userauth is OK
2025-12-31T09:14:42.700 [DEBUG] [Thread-125087] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:14:42.700 [DEBUG] [Thread-125087] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:14:42.700 [DEBUG] [Thread-125087] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T09:14:42.700 [DEBUG] [Thread-125087] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:14:42.718 [INFO] [Thread-125087] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:14:42.719 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T09:14:42.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:14:43.551 [DEBUG] [Thread-125087] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:14:43.551 [DEBUG] [Thread-125087] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:14:43.599 [DEBUG] [Thread-125087] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:14:43.599 [DEBUG] [Thread-125087] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:14:43.611 [DEBUG] [Thread-125087] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:14:43.623 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:14:43.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T09:14:43.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T09:14:43.642 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:14:43.642 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:14:43.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:14:43.651 [DEBUG] [Thread-125087] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:14:55.021 [DEBUG] [Thread-125089 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:15:02.651 [DEBUG] [Thread-125090 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:15:10.068 [DEBUG] [Thread-125091 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:15:13.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T09:15:13.673 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T09:15:13.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-12-31T09:15:14.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 9, 15, 2), 29.55, 13.29, 0.0, 16.59, 23.66, 0, 0, 0, 2, 0, 0),)
2025-12-31T09:15:14.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 09:15:02
2025-12-31T09:15:14.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T09:15:14.704 [DEBUG] [Thread-125092] [transport.py] [_log()] starting thread (client mode): 0xb6b22c50
2025-12-31T09:15:14.704 [DEBUG] [Thread-125092] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:15:14.724 [DEBUG] [Thread-125092] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T09:15:14.724 [INFO] [Thread-125092] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T09:15:14.728 [DEBUG] [Thread-125092] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:15:14.728 [DEBUG] [Thread-125092] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T09:15:14.728 [DEBUG] [Thread-125092] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:15:14.728 [DEBUG] [Thread-125092] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:15:14.728 [DEBUG] [Thread-125092] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:15:14.728 [DEBUG] [Thread-125092] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:15:14.728 [DEBUG] [Thread-125092] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:15:14.728 [DEBUG] [Thread-125092] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:15:14.728 [DEBUG] [Thread-125092] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:15:14.728 [DEBUG] [Thread-125092] [transport.py] [_log()] client lang: <none>
2025-12-31T09:15:14.728 [DEBUG] [Thread-125092] [transport.py] [_log()] server lang: <none>
2025-12-31T09:15:14.728 [DEBUG] [Thread-125092] [transport.py] [_log()] kex follows: False
2025-12-31T09:15:14.728 [DEBUG] [Thread-125092] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:15:14.728 [DEBUG] [Thread-125092] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:15:14.728 [DEBUG] [Thread-125092] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:15:14.728 [DEBUG] [Thread-125092] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:15:14.728 [DEBUG] [Thread-125092] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:15:14.728 [DEBUG] [Thread-125092] [transport.py] [_log()] Compression: none
2025-12-31T09:15:14.728 [DEBUG] [Thread-125092] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:15:14.743 [DEBUG] [Thread-125092] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:15:14.743 [DEBUG] [Thread-125092] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:15:14.743 [DEBUG] [Thread-125092] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T09:15:14.743 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T09:15:14.743 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:15:14.744 [DEBUG] [Thread-125092] [transport.py] [_log()] userauth is OK
2025-12-31T09:15:14.744 [DEBUG] [Thread-125092] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:15:14.744 [DEBUG] [Thread-125092] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:15:14.744 [DEBUG] [Thread-125092] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T09:15:14.744 [DEBUG] [Thread-125092] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:15:14.758 [INFO] [Thread-125092] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:15:14.759 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:15:14.893 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:15:14.894 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:15:15.497 [DEBUG] [Thread-125092] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:15:15.497 [DEBUG] [Thread-125092] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:15:15.497 [DEBUG] [Thread-125092] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T09:15:15.538 [DEBUG] [Thread-125092] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:15:15.538 [DEBUG] [Thread-125092] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:15:15.540 [DEBUG] [Thread-125092] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:15:15.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:15:15.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T09:15:15.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T09:15:15.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T09:15:15.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:15:15.557 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T09:15:15.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:15:15.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:15:15.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T09:15:15.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.301880 -999.00  +23.50  11.35     18   -1.60 1 1 1 1 1   888    0 24.88 12.14 ----- 11.1 11.3 286.2 17.0 29.8 -29.9 29.2 -27.8 27.4 -26.1 27.8 -27.3
2025-12-31T09:15:15.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T09:15:15.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T09:15:15.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.301880
2025-12-31T09:15:15.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T09:15:15.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T09:15:15.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T09:15:15.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T09:15:15.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T09:15:15.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T09:15:02', tmtdew=29.55, humidity=13.29, cloud=0.0, wind=16.59, temperature=23.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T07:14:42.432', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T09:15:15.559 [DEBUG] [Thread-125092] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:15:15.636 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T09:15:15.648 [DEBUG] [Thread-125095] [transport.py] [_log()] starting thread (client mode): 0xb6b230a0
2025-12-31T09:15:15.648 [DEBUG] [Thread-125095] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:15:15.663 [DEBUG] [Thread-125095] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T09:15:15.663 [INFO] [Thread-125095] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T09:15:15.671 [DEBUG] [Thread-125095] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:15:15.671 [DEBUG] [Thread-125095] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T09:15:15.671 [DEBUG] [Thread-125095] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:15:15.671 [DEBUG] [Thread-125095] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:15:15.671 [DEBUG] [Thread-125095] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:15:15.671 [DEBUG] [Thread-125095] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:15:15.671 [DEBUG] [Thread-125095] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:15:15.671 [DEBUG] [Thread-125095] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:15:15.671 [DEBUG] [Thread-125095] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:15:15.671 [DEBUG] [Thread-125095] [transport.py] [_log()] client lang: <none>
2025-12-31T09:15:15.671 [DEBUG] [Thread-125095] [transport.py] [_log()] server lang: <none>
2025-12-31T09:15:15.671 [DEBUG] [Thread-125095] [transport.py] [_log()] kex follows: False
2025-12-31T09:15:15.671 [DEBUG] [Thread-125095] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:15:15.671 [DEBUG] [Thread-125095] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:15:15.671 [DEBUG] [Thread-125095] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:15:15.671 [DEBUG] [Thread-125095] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:15:15.671 [DEBUG] [Thread-125095] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:15:15.671 [DEBUG] [Thread-125095] [transport.py] [_log()] Compression: none
2025-12-31T09:15:15.671 [DEBUG] [Thread-125095] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:15:15.734 [DEBUG] [Thread-125095] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:15:15.734 [DEBUG] [Thread-125095] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:15:15.734 [DEBUG] [Thread-125095] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T09:15:15.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T09:15:15.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:15:15.790 [DEBUG] [Thread-125095] [transport.py] [_log()] userauth is OK
2025-12-31T09:15:15.790 [DEBUG] [Thread-125095] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:15:15.790 [DEBUG] [Thread-125095] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:15:15.790 [DEBUG] [Thread-125095] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T09:15:15.790 [DEBUG] [Thread-125095] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:15:15.805 [INFO] [Thread-125095] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:15:15.805 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T09:15:15.805 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:15:16.706 [DEBUG] [Thread-125095] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:15:16.706 [DEBUG] [Thread-125095] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:15:16.756 [DEBUG] [Thread-125095] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:15:16.756 [DEBUG] [Thread-125095] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:15:16.764 [DEBUG] [Thread-125095] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:15:16.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:15:16.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T09:15: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-12-31T09:15:16.793 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:15:16.793 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:15:16.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:15:16.801 [DEBUG] [Thread-125095] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:15:25.110 [DEBUG] [Thread-125097 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:15:40.161 [DEBUG] [Thread-125098 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:15:46.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T09:15:46.824 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T09:15:46.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-12-31T09:15:47.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 9, 15, 34), 29.82, 13.16, 0.0, 15.33, 23.61, 0, 0, 0, 2, 0, 0),)
2025-12-31T09:15:47.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 09:15:34
2025-12-31T09:15:47.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T09:15:47.794 [DEBUG] [Thread-125099] [transport.py] [_log()] starting thread (client mode): 0xb6b21990
2025-12-31T09:15:47.794 [DEBUG] [Thread-125099] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:15:47.814 [DEBUG] [Thread-125099] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T09:15:47.814 [INFO] [Thread-125099] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T09:15:47.817 [DEBUG] [Thread-125099] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:15:47.817 [DEBUG] [Thread-125099] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T09:15:47.817 [DEBUG] [Thread-125099] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:15:47.817 [DEBUG] [Thread-125099] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:15:47.818 [DEBUG] [Thread-125099] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:15:47.818 [DEBUG] [Thread-125099] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:15:47.818 [DEBUG] [Thread-125099] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:15:47.818 [DEBUG] [Thread-125099] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:15:47.818 [DEBUG] [Thread-125099] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:15:47.818 [DEBUG] [Thread-125099] [transport.py] [_log()] client lang: <none>
2025-12-31T09:15:47.818 [DEBUG] [Thread-125099] [transport.py] [_log()] server lang: <none>
2025-12-31T09:15:47.818 [DEBUG] [Thread-125099] [transport.py] [_log()] kex follows: False
2025-12-31T09:15:47.818 [DEBUG] [Thread-125099] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:15:47.818 [DEBUG] [Thread-125099] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:15:47.818 [DEBUG] [Thread-125099] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:15:47.818 [DEBUG] [Thread-125099] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:15:47.818 [DEBUG] [Thread-125099] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:15:47.818 [DEBUG] [Thread-125099] [transport.py] [_log()] Compression: none
2025-12-31T09:15:47.818 [DEBUG] [Thread-125099] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:15:47.834 [DEBUG] [Thread-125099] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:15:47.834 [DEBUG] [Thread-125099] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:15:47.835 [DEBUG] [Thread-125099] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T09:15:47.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T09:15:47.836 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:15:47.837 [DEBUG] [Thread-125099] [transport.py] [_log()] userauth is OK
2025-12-31T09:15:47.837 [DEBUG] [Thread-125099] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:15:47.837 [DEBUG] [Thread-125099] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:15:47.837 [DEBUG] [Thread-125099] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T09:15:47.837 [DEBUG] [Thread-125099] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:15:47.862 [INFO] [Thread-125099] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:15:47.864 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:15:48.533 [DEBUG] [Thread-125099] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:15:48.534 [DEBUG] [Thread-125099] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:15:48.534 [DEBUG] [Thread-125099] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T09:15:48.575 [DEBUG] [Thread-125099] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:15:48.575 [DEBUG] [Thread-125099] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:15:48.578 [DEBUG] [Thread-125099] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:15:48.592 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:15:48.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T09:15:48.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T09:15:48.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T09:15:48.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:15:48.605 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T09:15:48.605 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:15:48.605 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:15:48.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T09:15:48.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.302227 -999.00  +23.50  12.17     19   -1.40 1 1 1 1 1   888    0 25.12 12.35 ----- 11.6 12.2 294.0 16.7 29.8 -29.4 29.3 -27.7 27.3 -26.7 27.8 -26.8
2025-12-31T09:15:48.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T09:15:48.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T09:15:48.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.302227
2025-12-31T09:15:48.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T09:15:48.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T09:15:48.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T09:15:48.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T09:15:48.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T09:15:48.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T09:15:34', tmtdew=29.82, humidity=13.16, cloud=0.0, wind=15.33, temperature=23.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T07:15:12.413', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T09:15:48.608 [DEBUG] [Thread-125099] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:15:48.691 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T09:15:48.702 [DEBUG] [Thread-125102] [transport.py] [_log()] starting thread (client mode): 0xb6b37fa0
2025-12-31T09:15:48.702 [DEBUG] [Thread-125102] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:15:48.716 [DEBUG] [Thread-125102] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T09:15:48.716 [INFO] [Thread-125102] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T09:15:48.724 [DEBUG] [Thread-125102] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:15:48.724 [DEBUG] [Thread-125102] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T09:15:48.724 [DEBUG] [Thread-125102] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:15:48.724 [DEBUG] [Thread-125102] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:15:48.724 [DEBUG] [Thread-125102] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:15:48.724 [DEBUG] [Thread-125102] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:15:48.724 [DEBUG] [Thread-125102] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:15:48.724 [DEBUG] [Thread-125102] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:15:48.724 [DEBUG] [Thread-125102] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:15:48.724 [DEBUG] [Thread-125102] [transport.py] [_log()] client lang: <none>
2025-12-31T09:15:48.724 [DEBUG] [Thread-125102] [transport.py] [_log()] server lang: <none>
2025-12-31T09:15:48.724 [DEBUG] [Thread-125102] [transport.py] [_log()] kex follows: False
2025-12-31T09:15:48.724 [DEBUG] [Thread-125102] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:15:48.724 [DEBUG] [Thread-125102] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:15:48.724 [DEBUG] [Thread-125102] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:15:48.724 [DEBUG] [Thread-125102] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:15:48.724 [DEBUG] [Thread-125102] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:15:48.724 [DEBUG] [Thread-125102] [transport.py] [_log()] Compression: none
2025-12-31T09:15:48.724 [DEBUG] [Thread-125102] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:15:48.785 [DEBUG] [Thread-125102] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:15:48.785 [DEBUG] [Thread-125102] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:15:48.786 [DEBUG] [Thread-125102] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T09:15:48.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T09:15:48.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:15:48.843 [DEBUG] [Thread-125102] [transport.py] [_log()] userauth is OK
2025-12-31T09:15:48.843 [DEBUG] [Thread-125102] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:15:48.843 [DEBUG] [Thread-125102] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:15:48.843 [DEBUG] [Thread-125102] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T09:15:48.843 [DEBUG] [Thread-125102] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:15:48.861 [INFO] [Thread-125102] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:15:48.862 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T09:15:48.862 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:15:49.752 [DEBUG] [Thread-125102] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:15:49.752 [DEBUG] [Thread-125102] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:15:49.800 [DEBUG] [Thread-125102] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:15:49.800 [DEBUG] [Thread-125102] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:15:49.809 [DEBUG] [Thread-125102] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:15:49.819 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:15:49.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-12-31T09:15:49.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T09:15:49.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:15:49.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:15:49.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:15:49.846 [DEBUG] [Thread-125102] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:15:55.193 [DEBUG] [Thread-125104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:16:02.700 [DEBUG] [Thread-125105 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:16:10.235 [DEBUG] [Thread-125106 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:16:15.033 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:16:15.034 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:16:19.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T09:16:19.849 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T09:16:19.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T09:16:20.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 9, 16, 6), 29.76, 13.16, 0.0, 14.12, 23.35, 0, 0, 0, 2, 0, 0),)
2025-12-31T09:16:20.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 09:16:06
2025-12-31T09:16:20.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T09:16:20.824 [DEBUG] [Thread-125107] [transport.py] [_log()] starting thread (client mode): 0xb6b00700
2025-12-31T09:16:20.825 [DEBUG] [Thread-125107] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:16:20.846 [DEBUG] [Thread-125107] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T09:16:20.846 [INFO] [Thread-125107] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T09:16:20.849 [DEBUG] [Thread-125107] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:16:20.849 [DEBUG] [Thread-125107] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T09:16:20.850 [DEBUG] [Thread-125107] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:16:20.850 [DEBUG] [Thread-125107] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:16:20.850 [DEBUG] [Thread-125107] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:16:20.850 [DEBUG] [Thread-125107] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:16:20.850 [DEBUG] [Thread-125107] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:16:20.850 [DEBUG] [Thread-125107] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:16:20.850 [DEBUG] [Thread-125107] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:16:20.850 [DEBUG] [Thread-125107] [transport.py] [_log()] client lang: <none>
2025-12-31T09:16:20.850 [DEBUG] [Thread-125107] [transport.py] [_log()] server lang: <none>
2025-12-31T09:16:20.850 [DEBUG] [Thread-125107] [transport.py] [_log()] kex follows: False
2025-12-31T09:16:20.850 [DEBUG] [Thread-125107] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:16:20.850 [DEBUG] [Thread-125107] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:16:20.850 [DEBUG] [Thread-125107] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:16:20.850 [DEBUG] [Thread-125107] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:16:20.850 [DEBUG] [Thread-125107] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:16:20.850 [DEBUG] [Thread-125107] [transport.py] [_log()] Compression: none
2025-12-31T09:16:20.850 [DEBUG] [Thread-125107] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:16:20.869 [DEBUG] [Thread-125107] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:16:20.870 [DEBUG] [Thread-125107] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:16:20.871 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T09:16:20.871 [DEBUG] [Thread-125107] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T09:16:20.872 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:16:20.873 [DEBUG] [Thread-125107] [transport.py] [_log()] userauth is OK
2025-12-31T09:16:20.873 [DEBUG] [Thread-125107] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:16:20.873 [DEBUG] [Thread-125107] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:16:20.873 [DEBUG] [Thread-125107] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T09:16:20.874 [DEBUG] [Thread-125107] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:16:20.898 [INFO] [Thread-125107] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:16:20.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:16:21.532 [DEBUG] [Thread-125107] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:16:21.532 [DEBUG] [Thread-125107] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:16:21.532 [DEBUG] [Thread-125107] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T09:16:21.573 [DEBUG] [Thread-125107] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:16:21.573 [DEBUG] [Thread-125107] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:16:21.577 [DEBUG] [Thread-125107] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:16:21.588 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:16:21.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T09:16:21.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T09:16:21.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T09:16:21.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:16:21.599 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T09:16:21.599 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:16:21.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:16:21.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T09:16:21.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.302575 -999.00  +23.60  19.11     18   -1.50 1 1 1 1 1   888    0 25.06 10.56 ----- 18.3 19.1 298.6 22.4 29.8 -29.0 29.2 -28.1 27.4 -26.0 27.9 -27.3
2025-12-31T09:16:21.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T09:16:21.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T09:16:21.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.302575
2025-12-31T09:16:21.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T09:16:21.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T09:16:21.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T09:16:21.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T09:16:21.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T09:16:21.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T09:16:06', tmtdew=29.76, humidity=13.16, cloud=0.0, wind=14.12, temperature=23.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T07:15:42.480', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T09:16:21.602 [DEBUG] [Thread-125107] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:16:21.687 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T09:16:21.700 [DEBUG] [Thread-125110] [transport.py] [_log()] starting thread (client mode): 0xb6b205b0
2025-12-31T09:16:21.700 [DEBUG] [Thread-125110] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:16:21.715 [DEBUG] [Thread-125110] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T09:16:21.715 [INFO] [Thread-125110] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T09:16:21.723 [DEBUG] [Thread-125110] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:16:21.723 [DEBUG] [Thread-125110] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T09:16:21.723 [DEBUG] [Thread-125110] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:16:21.723 [DEBUG] [Thread-125110] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:16:21.723 [DEBUG] [Thread-125110] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:16:21.723 [DEBUG] [Thread-125110] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:16:21.723 [DEBUG] [Thread-125110] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:16:21.723 [DEBUG] [Thread-125110] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:16:21.724 [DEBUG] [Thread-125110] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:16:21.724 [DEBUG] [Thread-125110] [transport.py] [_log()] client lang: <none>
2025-12-31T09:16:21.724 [DEBUG] [Thread-125110] [transport.py] [_log()] server lang: <none>
2025-12-31T09:16:21.724 [DEBUG] [Thread-125110] [transport.py] [_log()] kex follows: False
2025-12-31T09:16:21.724 [DEBUG] [Thread-125110] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:16:21.724 [DEBUG] [Thread-125110] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:16:21.724 [DEBUG] [Thread-125110] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:16:21.724 [DEBUG] [Thread-125110] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:16:21.724 [DEBUG] [Thread-125110] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:16:21.724 [DEBUG] [Thread-125110] [transport.py] [_log()] Compression: none
2025-12-31T09:16:21.724 [DEBUG] [Thread-125110] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:16:21.783 [DEBUG] [Thread-125110] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:16:21.783 [DEBUG] [Thread-125110] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:16:21.784 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T09:16:21.785 [DEBUG] [Thread-125110] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T09:16:21.785 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:16:21.838 [DEBUG] [Thread-125110] [transport.py] [_log()] userauth is OK
2025-12-31T09:16:21.839 [DEBUG] [Thread-125110] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:16:21.839 [DEBUG] [Thread-125110] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:16:21.839 [DEBUG] [Thread-125110] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T09:16:21.839 [DEBUG] [Thread-125110] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:16:21.864 [INFO] [Thread-125110] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:16:21.864 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T09:16:21.865 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:16:22.703 [DEBUG] [Thread-125110] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:16:22.703 [DEBUG] [Thread-125110] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:16:22.751 [DEBUG] [Thread-125110] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:16:22.751 [DEBUG] [Thread-125110] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:16:22.760 [DEBUG] [Thread-125110] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:16:22.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:16:22.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T09:16:22.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T09:16:22.789 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:16:22.789 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:16:22.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:16:22.797 [DEBUG] [Thread-125110] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:16:25.273 [DEBUG] [Thread-125112 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:16:40.315 [DEBUG] [Thread-125113 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:16:52.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T09:16:52.806 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T09:16:52.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-12-31T09:16:53.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 9, 16, 39), 30.06, 12.74, 0.0, 16.53, 23.28, 0, 0, 0, 2, 0, 0),)
2025-12-31T09:16:53.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 09:16:39
2025-12-31T09:16:53.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T09:16:53.798 [DEBUG] [Thread-125114] [transport.py] [_log()] starting thread (client mode): 0xb6b225f0
2025-12-31T09:16:53.798 [DEBUG] [Thread-125114] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:16:53.817 [DEBUG] [Thread-125114] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T09:16:53.817 [INFO] [Thread-125114] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T09:16:53.820 [DEBUG] [Thread-125114] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:16:53.820 [DEBUG] [Thread-125114] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T09:16:53.820 [DEBUG] [Thread-125114] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:16:53.820 [DEBUG] [Thread-125114] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:16:53.820 [DEBUG] [Thread-125114] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:16:53.820 [DEBUG] [Thread-125114] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:16:53.820 [DEBUG] [Thread-125114] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:16:53.821 [DEBUG] [Thread-125114] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:16:53.821 [DEBUG] [Thread-125114] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:16:53.821 [DEBUG] [Thread-125114] [transport.py] [_log()] client lang: <none>
2025-12-31T09:16:53.821 [DEBUG] [Thread-125114] [transport.py] [_log()] server lang: <none>
2025-12-31T09:16:53.821 [DEBUG] [Thread-125114] [transport.py] [_log()] kex follows: False
2025-12-31T09:16:53.821 [DEBUG] [Thread-125114] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:16:53.821 [DEBUG] [Thread-125114] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:16:53.821 [DEBUG] [Thread-125114] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:16:53.821 [DEBUG] [Thread-125114] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:16:53.821 [DEBUG] [Thread-125114] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:16:53.821 [DEBUG] [Thread-125114] [transport.py] [_log()] Compression: none
2025-12-31T09:16:53.821 [DEBUG] [Thread-125114] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:16:53.839 [DEBUG] [Thread-125114] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:16:53.839 [DEBUG] [Thread-125114] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:16:53.840 [DEBUG] [Thread-125114] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T09:16:53.840 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T09:16:53.841 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:16:53.842 [DEBUG] [Thread-125114] [transport.py] [_log()] userauth is OK
2025-12-31T09:16:53.842 [DEBUG] [Thread-125114] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:16:53.842 [DEBUG] [Thread-125114] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:16:53.842 [DEBUG] [Thread-125114] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T09:16:53.842 [DEBUG] [Thread-125114] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:16:53.867 [INFO] [Thread-125114] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:16:53.867 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:16:54.524 [DEBUG] [Thread-125114] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:16:54.524 [DEBUG] [Thread-125114] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:16:54.524 [DEBUG] [Thread-125114] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T09:16:54.565 [DEBUG] [Thread-125114] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:16:54.565 [DEBUG] [Thread-125114] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:16:54.568 [DEBUG] [Thread-125114] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:16:54.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:16:54.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T09:16:54.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T09:16:54.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T09:16:54.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:16:54.593 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T09:16:54.593 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:16:54.593 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:16:54.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T09:16:54.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.302922 -999.00  +23.50  20.12     17   -2.20 1 1 1 1 1   888    0 25.39 11.59 ----- 19.0 20.1 279.4 22.8 29.8 -30.1 29.2 -28.9 27.1 -29.6 27.8 -27.9
2025-12-31T09:16:54.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T09:16:54.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T09:16:54.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.302922
2025-12-31T09:16:54.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T09:16:54.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T09:16:54.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T09:16:54.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T09:16:54.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T09:16:54.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T09:16:39', tmtdew=30.06, humidity=12.74, cloud=0.0, wind=16.53, temperature=23.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T07:16:12.461', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T09:16:54.596 [DEBUG] [Thread-125114] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:16:54.678 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T09:16:54.690 [DEBUG] [Thread-125117] [transport.py] [_log()] starting thread (client mode): 0xb6be5ab0
2025-12-31T09:16:54.690 [DEBUG] [Thread-125117] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:16:54.706 [DEBUG] [Thread-125117] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T09:16:54.706 [INFO] [Thread-125117] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T09:16:54.714 [DEBUG] [Thread-125117] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:16:54.714 [DEBUG] [Thread-125117] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T09:16:54.714 [DEBUG] [Thread-125117] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:16:54.714 [DEBUG] [Thread-125117] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:16:54.714 [DEBUG] [Thread-125117] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:16:54.714 [DEBUG] [Thread-125117] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:16:54.714 [DEBUG] [Thread-125117] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:16:54.714 [DEBUG] [Thread-125117] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:16:54.714 [DEBUG] [Thread-125117] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:16:54.714 [DEBUG] [Thread-125117] [transport.py] [_log()] client lang: <none>
2025-12-31T09:16:54.715 [DEBUG] [Thread-125117] [transport.py] [_log()] server lang: <none>
2025-12-31T09:16:54.715 [DEBUG] [Thread-125117] [transport.py] [_log()] kex follows: False
2025-12-31T09:16:54.715 [DEBUG] [Thread-125117] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:16:54.715 [DEBUG] [Thread-125117] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:16:54.715 [DEBUG] [Thread-125117] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:16:54.715 [DEBUG] [Thread-125117] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:16:54.715 [DEBUG] [Thread-125117] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:16:54.715 [DEBUG] [Thread-125117] [transport.py] [_log()] Compression: none
2025-12-31T09:16:54.715 [DEBUG] [Thread-125117] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:16:54.774 [DEBUG] [Thread-125117] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:16:54.775 [DEBUG] [Thread-125117] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:16:54.775 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T09:16:54.776 [DEBUG] [Thread-125117] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T09:16:54.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:16:54.829 [DEBUG] [Thread-125117] [transport.py] [_log()] userauth is OK
2025-12-31T09:16:54.830 [DEBUG] [Thread-125117] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:16:54.830 [DEBUG] [Thread-125117] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:16:54.830 [DEBUG] [Thread-125117] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T09:16:54.830 [DEBUG] [Thread-125117] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:16:54.845 [INFO] [Thread-125117] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:16:54.845 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T09:16:54.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:16:55.345 [DEBUG] [Thread-125119 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:16:55.663 [DEBUG] [Thread-125117] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:16:55.663 [DEBUG] [Thread-125117] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:16:55.710 [DEBUG] [Thread-125117] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:16:55.710 [DEBUG] [Thread-125117] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:16:55.718 [DEBUG] [Thread-125117] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:16:55.726 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:16:55.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T09:16:55.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T09:16:55.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:16:55.743 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:16:55.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:16:55.751 [DEBUG] [Thread-125117] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:17:02.753 [DEBUG] [Thread-125120 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:17:10.395 [DEBUG] [Thread-125121 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:17:15.174 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:17:15.175 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:17:25.428 [DEBUG] [Thread-125122 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:17:25.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T09:17:25.773 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T09:17:25.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T09:17:26.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 9, 17, 11), 29.87, 12.94, 0.0, 16.85, 23.36, 0, 0, 0, 2, 0, 0),)
2025-12-31T09:17:26.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 09:17:11
2025-12-31T09:17:26.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T09:17:26.755 [DEBUG] [Thread-125123] [transport.py] [_log()] starting thread (client mode): 0xb6bb27d0
2025-12-31T09:17:26.755 [DEBUG] [Thread-125123] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:17:26.776 [DEBUG] [Thread-125123] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T09:17:26.776 [INFO] [Thread-125123] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T09:17:26.778 [DEBUG] [Thread-125123] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:17:26.778 [DEBUG] [Thread-125123] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T09:17:26.778 [DEBUG] [Thread-125123] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:17:26.778 [DEBUG] [Thread-125123] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:17:26.778 [DEBUG] [Thread-125123] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:17:26.778 [DEBUG] [Thread-125123] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:17:26.778 [DEBUG] [Thread-125123] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:17:26.778 [DEBUG] [Thread-125123] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:17:26.778 [DEBUG] [Thread-125123] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:17:26.778 [DEBUG] [Thread-125123] [transport.py] [_log()] client lang: <none>
2025-12-31T09:17:26.778 [DEBUG] [Thread-125123] [transport.py] [_log()] server lang: <none>
2025-12-31T09:17:26.778 [DEBUG] [Thread-125123] [transport.py] [_log()] kex follows: False
2025-12-31T09:17:26.779 [DEBUG] [Thread-125123] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:17:26.779 [DEBUG] [Thread-125123] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:17:26.779 [DEBUG] [Thread-125123] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:17:26.779 [DEBUG] [Thread-125123] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:17:26.779 [DEBUG] [Thread-125123] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:17:26.779 [DEBUG] [Thread-125123] [transport.py] [_log()] Compression: none
2025-12-31T09:17:26.779 [DEBUG] [Thread-125123] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:17:26.789 [DEBUG] [Thread-125123] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:17:26.790 [DEBUG] [Thread-125123] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:17:26.791 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T09:17:26.792 [DEBUG] [Thread-125123] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T09:17:26.793 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:17:26.794 [DEBUG] [Thread-125123] [transport.py] [_log()] userauth is OK
2025-12-31T09:17:26.794 [DEBUG] [Thread-125123] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:17:26.795 [DEBUG] [Thread-125123] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:17:26.795 [DEBUG] [Thread-125123] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T09:17:26.795 [DEBUG] [Thread-125123] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:17:26.821 [INFO] [Thread-125123] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:17:26.821 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:17:27.406 [DEBUG] [Thread-125123] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:17:27.406 [DEBUG] [Thread-125123] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:17:27.406 [DEBUG] [Thread-125123] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T09:17:27.447 [DEBUG] [Thread-125123] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:17:27.447 [DEBUG] [Thread-125123] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:17:27.451 [DEBUG] [Thread-125123] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:17:27.456 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:17:27.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T09:17:27.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T09:17:27.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T09:17:27.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:17:27.462 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T09:17:27.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:17:27.463 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:17:27.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T09:17:27.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.303616 -999.00  +23.00  13.51     18   -2.20 1 1 1 1 1   888    0 24.88 11.46 ----- 13.1 13.5 262.0 14.8 29.7 -29.3 29.1 -27.5 27.3 -26.0 27.7 -27.5
2025-12-31T09:17:27.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T09:17:27.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T09:17:27.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.303616
2025-12-31T09:17:27.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T09:17:27.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T09:17:27.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T09:17:27.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T09:17:27.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T09:17:27.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T09:17:11', tmtdew=29.87, humidity=12.94, cloud=0.0, wind=16.85, temperature=23.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T07:17:12.422', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T09:17:27.463 [DEBUG] [Thread-125123] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:17:27.534 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T09:17:27.545 [DEBUG] [Thread-125126] [transport.py] [_log()] starting thread (client mode): 0xb95932b0
2025-12-31T09:17:27.545 [DEBUG] [Thread-125126] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:17:27.561 [DEBUG] [Thread-125126] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T09:17:27.561 [INFO] [Thread-125126] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T09:17:27.568 [DEBUG] [Thread-125126] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:17:27.568 [DEBUG] [Thread-125126] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T09:17:27.568 [DEBUG] [Thread-125126] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:17:27.569 [DEBUG] [Thread-125126] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:17:27.569 [DEBUG] [Thread-125126] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:17:27.569 [DEBUG] [Thread-125126] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:17:27.569 [DEBUG] [Thread-125126] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:17:27.569 [DEBUG] [Thread-125126] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:17:27.569 [DEBUG] [Thread-125126] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:17:27.569 [DEBUG] [Thread-125126] [transport.py] [_log()] client lang: <none>
2025-12-31T09:17:27.569 [DEBUG] [Thread-125126] [transport.py] [_log()] server lang: <none>
2025-12-31T09:17:27.569 [DEBUG] [Thread-125126] [transport.py] [_log()] kex follows: False
2025-12-31T09:17:27.569 [DEBUG] [Thread-125126] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:17:27.570 [DEBUG] [Thread-125126] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:17:27.570 [DEBUG] [Thread-125126] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:17:27.570 [DEBUG] [Thread-125126] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:17:27.570 [DEBUG] [Thread-125126] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:17:27.570 [DEBUG] [Thread-125126] [transport.py] [_log()] Compression: none
2025-12-31T09:17:27.570 [DEBUG] [Thread-125126] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:17:27.625 [DEBUG] [Thread-125126] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:17:27.626 [DEBUG] [Thread-125126] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:17:27.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T09:17:27.627 [DEBUG] [Thread-125126] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T09:17:27.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:17:27.681 [DEBUG] [Thread-125126] [transport.py] [_log()] userauth is OK
2025-12-31T09:17:27.682 [DEBUG] [Thread-125126] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:17:27.682 [DEBUG] [Thread-125126] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:17:27.682 [DEBUG] [Thread-125126] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T09:17:27.682 [DEBUG] [Thread-125126] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:17:27.701 [INFO] [Thread-125126] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:17:27.701 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T09:17:27.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:17:28.593 [DEBUG] [Thread-125126] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:17:28.593 [DEBUG] [Thread-125126] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:17:28.641 [DEBUG] [Thread-125126] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:17:28.641 [DEBUG] [Thread-125126] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:17:28.649 [DEBUG] [Thread-125126] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:17:28.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:17:28.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T09:17:28.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T09:17:28.681 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:17:28.681 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:17:28.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:17:28.689 [DEBUG] [Thread-125126] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:17:40.462 [DEBUG] [Thread-125128 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:17:55.512 [DEBUG] [Thread-125129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:17:58.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T09:17:58.711 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T09:17:58.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T09:17:59.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 9, 17, 43), 30.28, 12.79, 0.0, 13.5, 23.38, 0, 0, 0, 2, 0, 0),)
2025-12-31T09:17:59.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 09:17:43
2025-12-31T09:17:59.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T09:17:59.683 [DEBUG] [Thread-125130] [transport.py] [_log()] starting thread (client mode): 0xb6bb2e00
2025-12-31T09:17:59.683 [DEBUG] [Thread-125130] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:17:59.703 [DEBUG] [Thread-125130] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T09:17:59.703 [INFO] [Thread-125130] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T09:17:59.706 [DEBUG] [Thread-125130] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:17:59.706 [DEBUG] [Thread-125130] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T09:17:59.706 [DEBUG] [Thread-125130] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:17:59.706 [DEBUG] [Thread-125130] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:17:59.706 [DEBUG] [Thread-125130] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:17:59.706 [DEBUG] [Thread-125130] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:17:59.706 [DEBUG] [Thread-125130] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:17:59.706 [DEBUG] [Thread-125130] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:17:59.706 [DEBUG] [Thread-125130] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:17:59.706 [DEBUG] [Thread-125130] [transport.py] [_log()] client lang: <none>
2025-12-31T09:17:59.706 [DEBUG] [Thread-125130] [transport.py] [_log()] server lang: <none>
2025-12-31T09:17:59.706 [DEBUG] [Thread-125130] [transport.py] [_log()] kex follows: False
2025-12-31T09:17:59.706 [DEBUG] [Thread-125130] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:17:59.706 [DEBUG] [Thread-125130] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:17:59.706 [DEBUG] [Thread-125130] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:17:59.706 [DEBUG] [Thread-125130] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:17:59.706 [DEBUG] [Thread-125130] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:17:59.707 [DEBUG] [Thread-125130] [transport.py] [_log()] Compression: none
2025-12-31T09:17:59.707 [DEBUG] [Thread-125130] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:17:59.724 [DEBUG] [Thread-125130] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:17:59.725 [DEBUG] [Thread-125130] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:17:59.725 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T09:17:59.726 [DEBUG] [Thread-125130] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T09:17:59.726 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:17:59.727 [DEBUG] [Thread-125130] [transport.py] [_log()] userauth is OK
2025-12-31T09:17:59.727 [DEBUG] [Thread-125130] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:17:59.727 [DEBUG] [Thread-125130] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:17:59.728 [DEBUG] [Thread-125130] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T09:17:59.728 [DEBUG] [Thread-125130] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:17:59.752 [INFO] [Thread-125130] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:17:59.752 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:18:00.400 [DEBUG] [Thread-125130] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:18:00.400 [DEBUG] [Thread-125130] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:18:00.401 [DEBUG] [Thread-125130] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T09:18:00.441 [DEBUG] [Thread-125130] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:18:00.441 [DEBUG] [Thread-125130] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:18:00.444 [DEBUG] [Thread-125130] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:18:00.460 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:18:00.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T09:18:00.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T09:18:00.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T09:18:00.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:18:00.471 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T09:18:00.471 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:18:00.471 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:18:00.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T09:18:00.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.303964 -999.00  +22.90   7.99     18   -2.30 1 1 1 1 1   888    0 25.32 18.25 ----- 8.7 8.0 243.4 12.6 29.7 -29.4 29.2 -27.3 27.4 -26.0 27.7 -27.9
2025-12-31T09:18:00.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T09:18:00.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T09:18:00.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.303964
2025-12-31T09:18:00.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T09:18:00.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T09:18:00.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T09:18:00.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T09:18:00.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T09:18:00.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T09:17:43', tmtdew=30.28, humidity=12.79, cloud=0.0, wind=13.5, temperature=23.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T07:17:42.490', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T09:18:00.474 [DEBUG] [Thread-125130] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:18:00.557 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T09:18:00.569 [DEBUG] [Thread-125133] [transport.py] [_log()] starting thread (client mode): 0xb6bb25f0
2025-12-31T09:18:00.569 [DEBUG] [Thread-125133] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:18:00.584 [DEBUG] [Thread-125133] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T09:18:00.585 [INFO] [Thread-125133] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T09:18:00.592 [DEBUG] [Thread-125133] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:18:00.593 [DEBUG] [Thread-125133] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T09:18:00.593 [DEBUG] [Thread-125133] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:18:00.593 [DEBUG] [Thread-125133] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:18:00.593 [DEBUG] [Thread-125133] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:18:00.593 [DEBUG] [Thread-125133] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:18:00.593 [DEBUG] [Thread-125133] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:18:00.593 [DEBUG] [Thread-125133] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:18:00.593 [DEBUG] [Thread-125133] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:18:00.593 [DEBUG] [Thread-125133] [transport.py] [_log()] client lang: <none>
2025-12-31T09:18:00.593 [DEBUG] [Thread-125133] [transport.py] [_log()] server lang: <none>
2025-12-31T09:18:00.593 [DEBUG] [Thread-125133] [transport.py] [_log()] kex follows: False
2025-12-31T09:18:00.593 [DEBUG] [Thread-125133] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:18:00.593 [DEBUG] [Thread-125133] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:18:00.593 [DEBUG] [Thread-125133] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:18:00.593 [DEBUG] [Thread-125133] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:18:00.594 [DEBUG] [Thread-125133] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:18:00.594 [DEBUG] [Thread-125133] [transport.py] [_log()] Compression: none
2025-12-31T09:18:00.594 [DEBUG] [Thread-125133] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:18:00.653 [DEBUG] [Thread-125133] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:18:00.653 [DEBUG] [Thread-125133] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:18:00.654 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T09:18:00.655 [DEBUG] [Thread-125133] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T09:18:00.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:18:00.709 [DEBUG] [Thread-125133] [transport.py] [_log()] userauth is OK
2025-12-31T09:18:00.710 [DEBUG] [Thread-125133] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:18:00.710 [DEBUG] [Thread-125133] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:18:00.710 [DEBUG] [Thread-125133] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T09:18:00.710 [DEBUG] [Thread-125133] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:18:00.729 [INFO] [Thread-125133] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:18:00.729 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T09:18:00.729 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:18:01.586 [DEBUG] [Thread-125133] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:18:01.586 [DEBUG] [Thread-125133] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:18:01.633 [DEBUG] [Thread-125133] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:18:01.634 [DEBUG] [Thread-125133] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:18:01.643 [DEBUG] [Thread-125133] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:18:01.651 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:18:01.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T09:18:01.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T09:18:01.668 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:18:01.669 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:18:01.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:18:01.680 [DEBUG] [Thread-125133] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:18:02.787 [DEBUG] [Thread-125135 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:18:10.549 [DEBUG] [Thread-125136 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:18:15.314 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:18:15.315 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:18:25.599 [DEBUG] [Thread-125137 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:18:31.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T09:18:31.699 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T09:18:31.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T09:18:32.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 9, 18, 15), 30.6, 12.53, 0.0, 13.92, 23.58, 0, 0, 0, 2, 0, 0),)
2025-12-31T09:18:32.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 09:18:15
2025-12-31T09:18:32.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T09:18:32.715 [DEBUG] [Thread-125138] [transport.py] [_log()] starting thread (client mode): 0xb6be7b20
2025-12-31T09:18:32.716 [DEBUG] [Thread-125138] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:18:32.735 [DEBUG] [Thread-125138] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T09:18:32.735 [INFO] [Thread-125138] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T09:18:32.738 [DEBUG] [Thread-125138] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:18:32.738 [DEBUG] [Thread-125138] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T09:18:32.739 [DEBUG] [Thread-125138] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:18:32.739 [DEBUG] [Thread-125138] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:18:32.739 [DEBUG] [Thread-125138] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:18:32.739 [DEBUG] [Thread-125138] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:18:32.739 [DEBUG] [Thread-125138] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:18:32.739 [DEBUG] [Thread-125138] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:18:32.739 [DEBUG] [Thread-125138] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:18:32.739 [DEBUG] [Thread-125138] [transport.py] [_log()] client lang: <none>
2025-12-31T09:18:32.739 [DEBUG] [Thread-125138] [transport.py] [_log()] server lang: <none>
2025-12-31T09:18:32.739 [DEBUG] [Thread-125138] [transport.py] [_log()] kex follows: False
2025-12-31T09:18:32.739 [DEBUG] [Thread-125138] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:18:32.739 [DEBUG] [Thread-125138] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:18:32.739 [DEBUG] [Thread-125138] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:18:32.739 [DEBUG] [Thread-125138] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:18:32.739 [DEBUG] [Thread-125138] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:18:32.739 [DEBUG] [Thread-125138] [transport.py] [_log()] Compression: none
2025-12-31T09:18:32.739 [DEBUG] [Thread-125138] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:18:32.757 [DEBUG] [Thread-125138] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:18:32.757 [DEBUG] [Thread-125138] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:18:32.757 [DEBUG] [Thread-125138] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T09:18:32.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T09:18:32.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:18:32.758 [DEBUG] [Thread-125138] [transport.py] [_log()] userauth is OK
2025-12-31T09:18:32.758 [DEBUG] [Thread-125138] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:18:32.758 [DEBUG] [Thread-125138] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:18:32.758 [DEBUG] [Thread-125138] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T09:18:32.758 [DEBUG] [Thread-125138] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:18:32.775 [INFO] [Thread-125138] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:18:32.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:18:33.395 [DEBUG] [Thread-125138] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:18:33.395 [DEBUG] [Thread-125138] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:18:33.395 [DEBUG] [Thread-125138] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T09:18:33.435 [DEBUG] [Thread-125138] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:18:33.435 [DEBUG] [Thread-125138] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:18:33.438 [DEBUG] [Thread-125138] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:18:33.449 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:18:33.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T09:18:33.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T09:18:33.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T09:18:33.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:18:33.455 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T09:18:33.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:18:33.455 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:18:33.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T09:18:33.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.304311 -999.00  +23.10  13.02     18   -2.00 1 1 1 1 1   888    0 24.94 25.37 ----- 19.1 13.0 268.7 15.9 29.9 -29.5 29.2 -27.9 27.2 -29.3 27.8 -27.1
2025-12-31T09:18:33.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T09:18:33.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T09:18:33.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.304311
2025-12-31T09:18:33.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T09:18:33.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T09:18:33.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T09:18:33.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T09:18:33.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T09:18:33.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T09:18:15', tmtdew=30.6, humidity=12.53, cloud=0.0, wind=13.92, temperature=23.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T07:18:12.470', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T09:18:33.456 [DEBUG] [Thread-125138] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:18:33.530 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T09:18:33.541 [DEBUG] [Thread-125141] [transport.py] [_log()] starting thread (client mode): 0xb6b19ea0
2025-12-31T09:18:33.541 [DEBUG] [Thread-125141] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:18:33.556 [DEBUG] [Thread-125141] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T09:18:33.556 [INFO] [Thread-125141] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T09:18:33.565 [DEBUG] [Thread-125141] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:18:33.565 [DEBUG] [Thread-125141] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T09:18:33.565 [DEBUG] [Thread-125141] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:18:33.565 [DEBUG] [Thread-125141] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:18:33.565 [DEBUG] [Thread-125141] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:18:33.565 [DEBUG] [Thread-125141] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:18:33.565 [DEBUG] [Thread-125141] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:18:33.565 [DEBUG] [Thread-125141] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:18:33.565 [DEBUG] [Thread-125141] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:18:33.565 [DEBUG] [Thread-125141] [transport.py] [_log()] client lang: <none>
2025-12-31T09:18:33.565 [DEBUG] [Thread-125141] [transport.py] [_log()] server lang: <none>
2025-12-31T09:18:33.565 [DEBUG] [Thread-125141] [transport.py] [_log()] kex follows: False
2025-12-31T09:18:33.565 [DEBUG] [Thread-125141] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:18:33.565 [DEBUG] [Thread-125141] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:18:33.565 [DEBUG] [Thread-125141] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:18:33.565 [DEBUG] [Thread-125141] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:18:33.565 [DEBUG] [Thread-125141] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:18:33.565 [DEBUG] [Thread-125141] [transport.py] [_log()] Compression: none
2025-12-31T09:18:33.565 [DEBUG] [Thread-125141] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:18:33.619 [DEBUG] [Thread-125141] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:18:33.619 [DEBUG] [Thread-125141] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:18:33.619 [DEBUG] [Thread-125141] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T09:18:33.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T09:18:33.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:18:33.676 [DEBUG] [Thread-125141] [transport.py] [_log()] userauth is OK
2025-12-31T09:18:33.677 [DEBUG] [Thread-125141] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:18:33.677 [DEBUG] [Thread-125141] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:18:33.677 [DEBUG] [Thread-125141] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T09:18:33.677 [DEBUG] [Thread-125141] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:18:33.691 [INFO] [Thread-125141] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:18:33.692 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T09:18:33.692 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:18:34.529 [DEBUG] [Thread-125141] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:18:34.530 [DEBUG] [Thread-125141] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:18:34.577 [DEBUG] [Thread-125141] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:18:34.577 [DEBUG] [Thread-125141] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:18:34.586 [DEBUG] [Thread-125141] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:18:34.596 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:18:34.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-12-31T09:18:34.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T09:18:34.615 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:18:34.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:18:34.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:18:34.624 [DEBUG] [Thread-125141] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:18:40.632 [DEBUG] [Thread-125143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:18:55.688 [DEBUG] [Thread-125144 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:19:02.842 [DEBUG] [Thread-125145 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:19:04.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T09:19:04.646 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T09:19:04.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T09:19:05.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 9, 18, 47), 30.35, 13.01, 0.0, 15.76, 23.8, 0, 0, 0, 2, 0, 0),)
2025-12-31T09:19:05.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 09:18:47
2025-12-31T09:19:05.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T09:19:05.624 [DEBUG] [Thread-125146] [transport.py] [_log()] starting thread (client mode): 0xb6b37cd0
2025-12-31T09:19:05.625 [DEBUG] [Thread-125146] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:19:05.645 [DEBUG] [Thread-125146] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T09:19:05.645 [INFO] [Thread-125146] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T09:19:05.649 [DEBUG] [Thread-125146] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:19:05.649 [DEBUG] [Thread-125146] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T09:19:05.649 [DEBUG] [Thread-125146] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:19:05.649 [DEBUG] [Thread-125146] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:19:05.649 [DEBUG] [Thread-125146] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:19:05.649 [DEBUG] [Thread-125146] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:19:05.649 [DEBUG] [Thread-125146] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:19:05.649 [DEBUG] [Thread-125146] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:19:05.649 [DEBUG] [Thread-125146] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:19:05.649 [DEBUG] [Thread-125146] [transport.py] [_log()] client lang: <none>
2025-12-31T09:19:05.649 [DEBUG] [Thread-125146] [transport.py] [_log()] server lang: <none>
2025-12-31T09:19:05.649 [DEBUG] [Thread-125146] [transport.py] [_log()] kex follows: False
2025-12-31T09:19:05.649 [DEBUG] [Thread-125146] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:19:05.649 [DEBUG] [Thread-125146] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:19:05.649 [DEBUG] [Thread-125146] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:19:05.649 [DEBUG] [Thread-125146] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:19:05.650 [DEBUG] [Thread-125146] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:19:05.650 [DEBUG] [Thread-125146] [transport.py] [_log()] Compression: none
2025-12-31T09:19:05.650 [DEBUG] [Thread-125146] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:19:05.666 [DEBUG] [Thread-125146] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:19:05.667 [DEBUG] [Thread-125146] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:19:05.667 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T09:19:05.668 [DEBUG] [Thread-125146] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T09:19:05.668 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:19:05.670 [DEBUG] [Thread-125146] [transport.py] [_log()] userauth is OK
2025-12-31T09:19:05.670 [DEBUG] [Thread-125146] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:19:05.670 [DEBUG] [Thread-125146] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:19:05.670 [DEBUG] [Thread-125146] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T09:19:05.670 [DEBUG] [Thread-125146] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:19:05.694 [INFO] [Thread-125146] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:19:05.694 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:19:06.312 [DEBUG] [Thread-125146] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:19:06.313 [DEBUG] [Thread-125146] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:19:06.313 [DEBUG] [Thread-125146] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T09:19:06.354 [DEBUG] [Thread-125146] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:19:06.354 [DEBUG] [Thread-125146] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:19:06.357 [DEBUG] [Thread-125146] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:19:06.369 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:19:06.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T09:19:06.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T09:19:06.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T09:19:06.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:19:06.381 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T09:19:06.381 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:19:06.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:19:06.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T09:19:06.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.304658 -999.00  +23.50  18.94     18   -1.90 1 1 1 1 1   888    0 25.22 30.85 ----- 16.6 18.9 280.2 21.9 29.8 -29.4 29.2 -27.6 27.1 -27.7 27.9 -26.6
2025-12-31T09:19:06.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T09:19:06.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T09:19:06.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.304658
2025-12-31T09:19:06.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T09:19:06.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T09:19:06.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T09:19:06.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T09:19:06.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T09:19:06.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T09:18:47', tmtdew=30.35, humidity=13.01, cloud=0.0, wind=15.76, temperature=23.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T07:18:42.451', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T09:19:06.384 [DEBUG] [Thread-125146] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:19:06.468 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T09:19:06.480 [DEBUG] [Thread-125149] [transport.py] [_log()] starting thread (client mode): 0xb6b36f20
2025-12-31T09:19:06.480 [DEBUG] [Thread-125149] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:19:06.495 [DEBUG] [Thread-125149] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T09:19:06.495 [INFO] [Thread-125149] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T09:19:06.503 [DEBUG] [Thread-125149] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:19:06.503 [DEBUG] [Thread-125149] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T09:19:06.503 [DEBUG] [Thread-125149] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:19:06.503 [DEBUG] [Thread-125149] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:19:06.503 [DEBUG] [Thread-125149] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:19:06.504 [DEBUG] [Thread-125149] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:19:06.504 [DEBUG] [Thread-125149] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:19:06.504 [DEBUG] [Thread-125149] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:19:06.504 [DEBUG] [Thread-125149] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:19:06.504 [DEBUG] [Thread-125149] [transport.py] [_log()] client lang: <none>
2025-12-31T09:19:06.504 [DEBUG] [Thread-125149] [transport.py] [_log()] server lang: <none>
2025-12-31T09:19:06.504 [DEBUG] [Thread-125149] [transport.py] [_log()] kex follows: False
2025-12-31T09:19:06.504 [DEBUG] [Thread-125149] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:19:06.504 [DEBUG] [Thread-125149] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:19:06.504 [DEBUG] [Thread-125149] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:19:06.504 [DEBUG] [Thread-125149] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:19:06.504 [DEBUG] [Thread-125149] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:19:06.504 [DEBUG] [Thread-125149] [transport.py] [_log()] Compression: none
2025-12-31T09:19:06.504 [DEBUG] [Thread-125149] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:19:06.560 [DEBUG] [Thread-125149] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:19:06.561 [DEBUG] [Thread-125149] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:19:06.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T09:19:06.562 [DEBUG] [Thread-125149] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T09:19:06.563 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:19:06.617 [DEBUG] [Thread-125149] [transport.py] [_log()] userauth is OK
2025-12-31T09:19:06.617 [DEBUG] [Thread-125149] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:19:06.617 [DEBUG] [Thread-125149] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:19:06.618 [DEBUG] [Thread-125149] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T09:19:06.618 [DEBUG] [Thread-125149] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:19:06.636 [INFO] [Thread-125149] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:19:06.637 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T09:19:06.637 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:19:07.495 [DEBUG] [Thread-125149] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:19:07.495 [DEBUG] [Thread-125149] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:19:07.543 [DEBUG] [Thread-125149] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:19:07.543 [DEBUG] [Thread-125149] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:19:07.552 [DEBUG] [Thread-125149] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:19:07.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:19:07.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T09:19:07.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T09:19:07.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:19:07.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:19:07.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:19:07.582 [DEBUG] [Thread-125149] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:19:10.717 [DEBUG] [Thread-125151 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:19:15.454 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:19:15.455 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:19:25.762 [DEBUG] [Thread-125152 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:19:37.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T09:19:37.605 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T09:19:37.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T09:19:38.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 9, 19, 19), 30.29, 13.04, 0.0, 18.21, 23.71, 0, 0, 0, 2, 0, 0),)
2025-12-31T09:19:38.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 09:19:19
2025-12-31T09:19:38.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T09:19:38.588 [DEBUG] [Thread-125153] [transport.py] [_log()] starting thread (client mode): 0xb6b35450
2025-12-31T09:19:38.588 [DEBUG] [Thread-125153] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:19:38.610 [DEBUG] [Thread-125153] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T09:19:38.610 [INFO] [Thread-125153] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T09:19:38.613 [DEBUG] [Thread-125153] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:19:38.613 [DEBUG] [Thread-125153] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T09:19:38.613 [DEBUG] [Thread-125153] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:19:38.613 [DEBUG] [Thread-125153] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:19:38.613 [DEBUG] [Thread-125153] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:19:38.613 [DEBUG] [Thread-125153] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:19:38.613 [DEBUG] [Thread-125153] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:19:38.613 [DEBUG] [Thread-125153] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:19:38.613 [DEBUG] [Thread-125153] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:19:38.613 [DEBUG] [Thread-125153] [transport.py] [_log()] client lang: <none>
2025-12-31T09:19:38.613 [DEBUG] [Thread-125153] [transport.py] [_log()] server lang: <none>
2025-12-31T09:19:38.613 [DEBUG] [Thread-125153] [transport.py] [_log()] kex follows: False
2025-12-31T09:19:38.613 [DEBUG] [Thread-125153] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:19:38.613 [DEBUG] [Thread-125153] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:19:38.613 [DEBUG] [Thread-125153] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:19:38.614 [DEBUG] [Thread-125153] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:19:38.614 [DEBUG] [Thread-125153] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:19:38.614 [DEBUG] [Thread-125153] [transport.py] [_log()] Compression: none
2025-12-31T09:19:38.614 [DEBUG] [Thread-125153] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:19:38.631 [DEBUG] [Thread-125153] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:19:38.632 [DEBUG] [Thread-125153] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:19:38.632 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T09:19:38.633 [DEBUG] [Thread-125153] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T09:19:38.633 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:19:38.634 [DEBUG] [Thread-125153] [transport.py] [_log()] userauth is OK
2025-12-31T09:19:38.635 [DEBUG] [Thread-125153] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:19:38.635 [DEBUG] [Thread-125153] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:19:38.635 [DEBUG] [Thread-125153] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T09:19:38.635 [DEBUG] [Thread-125153] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:19:38.659 [INFO] [Thread-125153] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:19:38.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:19:39.299 [DEBUG] [Thread-125153] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:19:39.299 [DEBUG] [Thread-125153] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:19:39.300 [DEBUG] [Thread-125153] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T09:19:39.340 [DEBUG] [Thread-125153] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:19:39.340 [DEBUG] [Thread-125153] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:19:39.344 [DEBUG] [Thread-125153] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:19:39.355 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:19:39.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T09:19:39.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T09:19:39.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T09:19:39.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:19:39.367 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T09:19:39.367 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:19:39.367 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:19:39.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T09:19:39.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.305005 -999.00  +23.30  16.19     18   -1.90 1 1 1 1 1   888    0 25.34 36.28 ----- 12.3 16.2 286.2 18.8 29.8 -28.5 29.2 -27.9 27.3 -26.1 27.8 -27.0
2025-12-31T09:19:39.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T09:19:39.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T09:19:39.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.305005
2025-12-31T09:19:39.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T09:19:39.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T09:19:39.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T09:19:39.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T09:19:39.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T09:19:39.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T09:19:19', tmtdew=30.29, humidity=13.04, cloud=0.0, wind=18.21, temperature=23.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T07:19:12.432', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T09:19:39.370 [DEBUG] [Thread-125153] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:19:39.454 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T09:19:39.468 [DEBUG] [Thread-125156] [transport.py] [_log()] starting thread (client mode): 0xb6b4a230
2025-12-31T09:19:39.469 [DEBUG] [Thread-125156] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:19:39.483 [DEBUG] [Thread-125156] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T09:19:39.483 [INFO] [Thread-125156] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T09:19:39.491 [DEBUG] [Thread-125156] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:19:39.491 [DEBUG] [Thread-125156] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T09:19:39.491 [DEBUG] [Thread-125156] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:19:39.491 [DEBUG] [Thread-125156] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:19:39.491 [DEBUG] [Thread-125156] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:19:39.491 [DEBUG] [Thread-125156] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:19:39.491 [DEBUG] [Thread-125156] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:19:39.491 [DEBUG] [Thread-125156] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:19:39.491 [DEBUG] [Thread-125156] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:19:39.491 [DEBUG] [Thread-125156] [transport.py] [_log()] client lang: <none>
2025-12-31T09:19:39.492 [DEBUG] [Thread-125156] [transport.py] [_log()] server lang: <none>
2025-12-31T09:19:39.492 [DEBUG] [Thread-125156] [transport.py] [_log()] kex follows: False
2025-12-31T09:19:39.492 [DEBUG] [Thread-125156] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:19:39.492 [DEBUG] [Thread-125156] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:19:39.492 [DEBUG] [Thread-125156] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:19:39.492 [DEBUG] [Thread-125156] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:19:39.492 [DEBUG] [Thread-125156] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:19:39.492 [DEBUG] [Thread-125156] [transport.py] [_log()] Compression: none
2025-12-31T09:19:39.492 [DEBUG] [Thread-125156] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:19:39.548 [DEBUG] [Thread-125156] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:19:39.549 [DEBUG] [Thread-125156] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:19:39.550 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T09:19:39.550 [DEBUG] [Thread-125156] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T09:19:39.551 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:19:39.604 [DEBUG] [Thread-125156] [transport.py] [_log()] userauth is OK
2025-12-31T09:19:39.605 [DEBUG] [Thread-125156] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:19:39.605 [DEBUG] [Thread-125156] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:19:39.605 [DEBUG] [Thread-125156] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T09:19:39.605 [DEBUG] [Thread-125156] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:19:39.623 [INFO] [Thread-125156] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:19:39.624 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T09:19:39.624 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:19:40.436 [DEBUG] [Thread-125156] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:19:40.436 [DEBUG] [Thread-125156] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:19:40.484 [DEBUG] [Thread-125156] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:19:40.484 [DEBUG] [Thread-125156] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:19:40.493 [DEBUG] [Thread-125156] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:19:40.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:19:40.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T09:19:40.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T09:19:40.521 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:19:40.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:19:40.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:19:40.530 [DEBUG] [Thread-125156] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:19:40.799 [DEBUG] [Thread-125158 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:19:55.850 [DEBUG] [Thread-125159 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:20:02.894 [DEBUG] [Thread-125160 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:20:10.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T09:20:10.553 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T09:20:10.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T09:20:10.885 [DEBUG] [Thread-125161 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:20:11.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 9, 19, 51), 30.39, 12.66, 0.0, 12.46, 23.63, 0, 0, 0, 2, 0, 0),)
2025-12-31T09:20:11.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 09:19:51
2025-12-31T09:20:11.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T09:20:11.531 [DEBUG] [Thread-125162] [transport.py] [_log()] starting thread (client mode): 0xb6b293f0
2025-12-31T09:20:11.531 [DEBUG] [Thread-125162] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:20:11.551 [DEBUG] [Thread-125162] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T09:20:11.552 [INFO] [Thread-125162] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T09:20:11.555 [DEBUG] [Thread-125162] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:20:11.555 [DEBUG] [Thread-125162] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T09:20:11.555 [DEBUG] [Thread-125162] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:20:11.555 [DEBUG] [Thread-125162] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:20:11.555 [DEBUG] [Thread-125162] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:20:11.555 [DEBUG] [Thread-125162] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:20:11.555 [DEBUG] [Thread-125162] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:20:11.555 [DEBUG] [Thread-125162] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:20:11.555 [DEBUG] [Thread-125162] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:20:11.555 [DEBUG] [Thread-125162] [transport.py] [_log()] client lang: <none>
2025-12-31T09:20:11.555 [DEBUG] [Thread-125162] [transport.py] [_log()] server lang: <none>
2025-12-31T09:20:11.555 [DEBUG] [Thread-125162] [transport.py] [_log()] kex follows: False
2025-12-31T09:20:11.556 [DEBUG] [Thread-125162] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:20:11.556 [DEBUG] [Thread-125162] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:20:11.556 [DEBUG] [Thread-125162] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:20:11.556 [DEBUG] [Thread-125162] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:20:11.556 [DEBUG] [Thread-125162] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:20:11.556 [DEBUG] [Thread-125162] [transport.py] [_log()] Compression: none
2025-12-31T09:20:11.556 [DEBUG] [Thread-125162] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:20:11.574 [DEBUG] [Thread-125162] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:20:11.575 [DEBUG] [Thread-125162] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:20:11.576 [DEBUG] [Thread-125162] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T09:20:11.576 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T09:20:11.577 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:20:11.621 [DEBUG] [Thread-125162] [transport.py] [_log()] userauth is OK
2025-12-31T09:20:11.621 [DEBUG] [Thread-125162] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:20:11.621 [DEBUG] [Thread-125162] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:20:11.622 [DEBUG] [Thread-125162] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T09:20:11.622 [DEBUG] [Thread-125162] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:20:11.647 [INFO] [Thread-125162] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:20:11.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:20:12.948 [DEBUG] [Thread-125162] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:20:12.949 [DEBUG] [Thread-125162] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:20:12.949 [DEBUG] [Thread-125162] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T09:20:12.989 [DEBUG] [Thread-125162] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:20:12.989 [DEBUG] [Thread-125162] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:20:12.993 [DEBUG] [Thread-125162] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:20:13.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:20:13.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T09:20:13.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T09:20:13.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T09:20:13.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:20:13.021 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T09:20:13.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:20:13.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:20:13.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T09:20:13.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.305005 -999.00  +23.30  16.19     18   -1.90 1 1 1 1 1   888    0 25.34 36.28 ----- 12.3 16.2 286.2 18.8 29.8 -28.5 29.2 -27.9 27.3 -26.1 27.8 -27.0
2025-12-31T09:20:13.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T09:20:13.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T09:20:13.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.305005
2025-12-31T09:20:13.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T09:20:13.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T09:20:13.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T09:20:13.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T09:20:13.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T09:20:13.023 [DEBUG] [Thread-125162] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:20:13.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T09:19:51', tmtdew=30.39, humidity=12.66, cloud=0.0, wind=12.46, temperature=23.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T07:19:12.432', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T09:20:13.107 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T09:20:15.593 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:20:15.594 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:20:25.915 [DEBUG] [Thread-125165 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:20:40.956 [DEBUG] [Thread-125166 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:20:55.990 [DEBUG] [Thread-125167 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:21:02.921 [DEBUG] [Thread-125168 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:21:11.017 [DEBUG] [Thread-125169 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:21:15.733 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:21:15.735 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:21:26.054 [DEBUG] [Thread-125170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:21:41.093 [DEBUG] [Thread-125171 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:21:56.127 [DEBUG] [Thread-125172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:22:02.974 [DEBUG] [Thread-125173 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:22:11.164 [DEBUG] [Thread-125174 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:22:15.873 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:22:15.873 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:22:25.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-12-31T09:22:26.198 [DEBUG] [Thread-125175 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:22:41.230 [DEBUG] [Thread-125176 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:22:55.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T09:22:55.139 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T09:22:55.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T09:22:55.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 9, 22, 31), 29.97, 13.19, 0.0, 10.68, 23.7, 0, 0, 0, 2, 0, 0),)
2025-12-31T09:22:55.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 09:22:31
2025-12-31T09:22:56.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T09:22:56.155 [DEBUG] [Thread-125177] [transport.py] [_log()] starting thread (client mode): 0xb6b4bf70
2025-12-31T09:22:56.155 [DEBUG] [Thread-125177] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:22:56.181 [DEBUG] [Thread-125177] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T09:22:56.181 [INFO] [Thread-125177] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T09:22:56.185 [DEBUG] [Thread-125177] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:22:56.185 [DEBUG] [Thread-125177] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T09:22:56.186 [DEBUG] [Thread-125177] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:22:56.186 [DEBUG] [Thread-125177] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:22:56.186 [DEBUG] [Thread-125177] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:22:56.186 [DEBUG] [Thread-125177] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:22:56.186 [DEBUG] [Thread-125177] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:22:56.186 [DEBUG] [Thread-125177] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:22:56.186 [DEBUG] [Thread-125177] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:22:56.187 [DEBUG] [Thread-125177] [transport.py] [_log()] client lang: <none>
2025-12-31T09:22:56.187 [DEBUG] [Thread-125177] [transport.py] [_log()] server lang: <none>
2025-12-31T09:22:56.187 [DEBUG] [Thread-125177] [transport.py] [_log()] kex follows: False
2025-12-31T09:22:56.187 [DEBUG] [Thread-125177] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:22:56.187 [DEBUG] [Thread-125177] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:22:56.187 [DEBUG] [Thread-125177] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:22:56.187 [DEBUG] [Thread-125177] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:22:56.187 [DEBUG] [Thread-125177] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:22:56.187 [DEBUG] [Thread-125177] [transport.py] [_log()] Compression: none
2025-12-31T09:22:56.187 [DEBUG] [Thread-125177] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:22:56.197 [DEBUG] [Thread-125177] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:22:56.198 [DEBUG] [Thread-125177] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:22:56.199 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T09:22:56.199 [DEBUG] [Thread-125177] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T09:22:56.200 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:22:56.201 [DEBUG] [Thread-125177] [transport.py] [_log()] userauth is OK
2025-12-31T09:22:56.201 [DEBUG] [Thread-125177] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:22:56.201 [DEBUG] [Thread-125177] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:22:56.201 [DEBUG] [Thread-125177] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T09:22:56.202 [DEBUG] [Thread-125177] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:22:56.225 [INFO] [Thread-125177] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:22:56.226 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:22:56.268 [DEBUG] [Thread-125179 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:22:56.965 [DEBUG] [Thread-125177] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:22:56.965 [DEBUG] [Thread-125177] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:22:56.966 [DEBUG] [Thread-125177] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T09:22:57.006 [DEBUG] [Thread-125177] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:22:57.006 [DEBUG] [Thread-125177] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:22:57.010 [DEBUG] [Thread-125177] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:22:57.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:22:57.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T09:22:57.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T09:22:57.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T09:22:57.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:22:57.032 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T09:22:57.032 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:22:57.032 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:22:57.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T09:22:57.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.307088 -999.00  +22.50  13.90     19   -1.90 1 1 1 1 1   888    0 26.32 45.19 ----- 13.7 13.9 325.0 15.4 30.0 -28.3 29.3 -28.2 27.6 -26.3 28.1 -26.4
2025-12-31T09:22:57.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T09:22:57.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T09:22:57.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.307088
2025-12-31T09:22:57.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T09:22:57.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T09:22:57.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T09:22:57.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T09:22:57.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T09:22:57.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T09:22:31', tmtdew=29.97, humidity=13.19, cloud=0.0, wind=10.68, temperature=23.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T07:22:12.403', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T09:22:57.035 [DEBUG] [Thread-125177] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:22:57.131 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T09:22:57.144 [DEBUG] [Thread-125181] [transport.py] [_log()] starting thread (client mode): 0xb6bb2e90
2025-12-31T09:22:57.144 [DEBUG] [Thread-125181] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:22:57.159 [DEBUG] [Thread-125181] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T09:22:57.159 [INFO] [Thread-125181] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T09:22:57.167 [DEBUG] [Thread-125181] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:22:57.167 [DEBUG] [Thread-125181] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T09:22:57.167 [DEBUG] [Thread-125181] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:22:57.167 [DEBUG] [Thread-125181] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:22:57.167 [DEBUG] [Thread-125181] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:22:57.167 [DEBUG] [Thread-125181] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:22:57.168 [DEBUG] [Thread-125181] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:22:57.168 [DEBUG] [Thread-125181] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:22:57.168 [DEBUG] [Thread-125181] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:22:57.168 [DEBUG] [Thread-125181] [transport.py] [_log()] client lang: <none>
2025-12-31T09:22:57.168 [DEBUG] [Thread-125181] [transport.py] [_log()] server lang: <none>
2025-12-31T09:22:57.168 [DEBUG] [Thread-125181] [transport.py] [_log()] kex follows: False
2025-12-31T09:22:57.168 [DEBUG] [Thread-125181] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:22:57.168 [DEBUG] [Thread-125181] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:22:57.168 [DEBUG] [Thread-125181] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:22:57.168 [DEBUG] [Thread-125181] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:22:57.168 [DEBUG] [Thread-125181] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:22:57.168 [DEBUG] [Thread-125181] [transport.py] [_log()] Compression: none
2025-12-31T09:22:57.168 [DEBUG] [Thread-125181] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:22:57.226 [DEBUG] [Thread-125181] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:22:57.227 [DEBUG] [Thread-125181] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:22:57.228 [DEBUG] [Thread-125181] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T09:22:57.228 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T09:22:57.229 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:22:57.283 [DEBUG] [Thread-125181] [transport.py] [_log()] userauth is OK
2025-12-31T09:22:57.283 [DEBUG] [Thread-125181] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:22:57.283 [DEBUG] [Thread-125181] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:22:57.283 [DEBUG] [Thread-125181] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T09:22:57.283 [DEBUG] [Thread-125181] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:22:57.305 [INFO] [Thread-125181] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:22:57.306 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T09:22:57.306 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:22:58.166 [DEBUG] [Thread-125181] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:22:58.166 [DEBUG] [Thread-125181] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:22:58.214 [DEBUG] [Thread-125181] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:22:58.214 [DEBUG] [Thread-125181] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:22:58.223 [DEBUG] [Thread-125181] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:22:58.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:22:58.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T09:22:58.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T09:22:58.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:22:58.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:22:58.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:22:58.260 [DEBUG] [Thread-125181] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:23:03.022 [DEBUG] [Thread-125183 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:23:11.309 [DEBUG] [Thread-125184 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:23:16.011 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:23:16.013 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:23:26.377 [DEBUG] [Thread-125185 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:23:28.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T09:23:28.283 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T09:23:28.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T09:23:28.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 9, 23, 3), 29.89, 13.24, 0.0, 11.22, 23.56, 0, 0, 0, 2, 0, 0),)
2025-12-31T09:23:28.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 09:23:03
2025-12-31T09:23:29.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T09:23:29.269 [DEBUG] [Thread-125186] [transport.py] [_log()] starting thread (client mode): 0xb6b1a0e0
2025-12-31T09:23:29.269 [DEBUG] [Thread-125186] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:23:29.289 [DEBUG] [Thread-125186] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T09:23:29.290 [INFO] [Thread-125186] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T09:23:29.293 [DEBUG] [Thread-125186] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:23:29.293 [DEBUG] [Thread-125186] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T09:23:29.293 [DEBUG] [Thread-125186] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:23:29.293 [DEBUG] [Thread-125186] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:23:29.293 [DEBUG] [Thread-125186] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:23:29.293 [DEBUG] [Thread-125186] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:23:29.293 [DEBUG] [Thread-125186] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:23:29.293 [DEBUG] [Thread-125186] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:23:29.293 [DEBUG] [Thread-125186] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:23:29.293 [DEBUG] [Thread-125186] [transport.py] [_log()] client lang: <none>
2025-12-31T09:23:29.293 [DEBUG] [Thread-125186] [transport.py] [_log()] server lang: <none>
2025-12-31T09:23:29.293 [DEBUG] [Thread-125186] [transport.py] [_log()] kex follows: False
2025-12-31T09:23:29.293 [DEBUG] [Thread-125186] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:23:29.293 [DEBUG] [Thread-125186] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:23:29.293 [DEBUG] [Thread-125186] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:23:29.293 [DEBUG] [Thread-125186] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:23:29.293 [DEBUG] [Thread-125186] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:23:29.293 [DEBUG] [Thread-125186] [transport.py] [_log()] Compression: none
2025-12-31T09:23:29.293 [DEBUG] [Thread-125186] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:23:29.310 [DEBUG] [Thread-125186] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:23:29.310 [DEBUG] [Thread-125186] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:23:29.311 [DEBUG] [Thread-125186] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T09:23:29.311 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T09:23:29.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:23:29.313 [DEBUG] [Thread-125186] [transport.py] [_log()] userauth is OK
2025-12-31T09:23:29.313 [DEBUG] [Thread-125186] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:23:29.313 [DEBUG] [Thread-125186] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:23:29.313 [DEBUG] [Thread-125186] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T09:23:29.313 [DEBUG] [Thread-125186] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:23:29.327 [INFO] [Thread-125186] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:23:29.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:23:29.965 [DEBUG] [Thread-125186] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:23:29.965 [DEBUG] [Thread-125186] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:23:29.965 [DEBUG] [Thread-125186] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T09:23:30.006 [DEBUG] [Thread-125186] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:23:30.006 [DEBUG] [Thread-125186] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:23:30.010 [DEBUG] [Thread-125186] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:23:30.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:23:30.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T09:23:30.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T09:23:30.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T09:23:30.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:23:30.035 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T09:23:30.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:23:30.036 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:23:30.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T09:23:30.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.307436 -999.00  +22.80  16.44     19   -1.90 1 1 1 1 1   888    0 26.09 42.76 ----- 25.7 16.4 303.7 20.8 30.0 -28.8 29.2 -27.7 27.6 -26.1 28.1 -26.5
2025-12-31T09:23:30.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T09:23:30.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T09:23:30.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.307436
2025-12-31T09:23:30.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T09:23:30.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T09:23:30.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T09:23:30.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T09:23:30.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T09:23:30.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T09:23:03', tmtdew=29.89, humidity=13.24, cloud=0.0, wind=11.22, temperature=23.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T07:22:42.470', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T09:23:30.038 [DEBUG] [Thread-125186] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:23:30.121 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T09:23:30.133 [DEBUG] [Thread-125189] [transport.py] [_log()] starting thread (client mode): 0xb6b23700
2025-12-31T09:23:30.133 [DEBUG] [Thread-125189] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:23:30.149 [DEBUG] [Thread-125189] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T09:23:30.149 [INFO] [Thread-125189] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T09:23:30.157 [DEBUG] [Thread-125189] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:23:30.157 [DEBUG] [Thread-125189] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T09:23:30.158 [DEBUG] [Thread-125189] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:23:30.158 [DEBUG] [Thread-125189] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:23:30.158 [DEBUG] [Thread-125189] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:23:30.158 [DEBUG] [Thread-125189] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:23:30.158 [DEBUG] [Thread-125189] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:23:30.158 [DEBUG] [Thread-125189] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:23:30.158 [DEBUG] [Thread-125189] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:23:30.158 [DEBUG] [Thread-125189] [transport.py] [_log()] client lang: <none>
2025-12-31T09:23:30.158 [DEBUG] [Thread-125189] [transport.py] [_log()] server lang: <none>
2025-12-31T09:23:30.158 [DEBUG] [Thread-125189] [transport.py] [_log()] kex follows: False
2025-12-31T09:23:30.158 [DEBUG] [Thread-125189] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:23:30.158 [DEBUG] [Thread-125189] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:23:30.158 [DEBUG] [Thread-125189] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:23:30.158 [DEBUG] [Thread-125189] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:23:30.158 [DEBUG] [Thread-125189] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:23:30.158 [DEBUG] [Thread-125189] [transport.py] [_log()] Compression: none
2025-12-31T09:23:30.158 [DEBUG] [Thread-125189] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:23:30.217 [DEBUG] [Thread-125189] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:23:30.217 [DEBUG] [Thread-125189] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:23:30.218 [DEBUG] [Thread-125189] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T09:23:30.218 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T09:23:30.219 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:23:30.274 [DEBUG] [Thread-125189] [transport.py] [_log()] userauth is OK
2025-12-31T09:23:30.274 [DEBUG] [Thread-125189] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:23:30.275 [DEBUG] [Thread-125189] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:23:30.275 [DEBUG] [Thread-125189] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T09:23:30.275 [DEBUG] [Thread-125189] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:23:30.294 [INFO] [Thread-125189] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:23:30.294 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T09:23:30.294 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:23:31.137 [DEBUG] [Thread-125189] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:23:31.137 [DEBUG] [Thread-125189] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:23:31.187 [DEBUG] [Thread-125189] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:23:31.188 [DEBUG] [Thread-125189] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:23:31.199 [DEBUG] [Thread-125189] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:23:31.211 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:23:31.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T09:23:31.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T09:23:31.235 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:23:31.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:23:31.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:23:31.246 [DEBUG] [Thread-125189] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:23:41.411 [DEBUG] [Thread-125191 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:23:56.460 [DEBUG] [Thread-125192 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:24:01.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T09:24:01.266 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T09:24:01.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T09:24:01.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 9, 23, 36), 30.09, 12.83, 0.0, 15.3, 23.48, 0, 0, 0, 2, 0, 0),)
2025-12-31T09:24:01.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 09:23:36
2025-12-31T09:24:02.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T09:24:02.268 [DEBUG] [Thread-125193] [transport.py] [_log()] starting thread (client mode): 0xb95791e0
2025-12-31T09:24:02.268 [DEBUG] [Thread-125193] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:24:02.288 [DEBUG] [Thread-125193] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T09:24:02.288 [INFO] [Thread-125193] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T09:24:02.290 [DEBUG] [Thread-125193] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:24:02.290 [DEBUG] [Thread-125193] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T09:24:02.290 [DEBUG] [Thread-125193] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:24:02.290 [DEBUG] [Thread-125193] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:24:02.290 [DEBUG] [Thread-125193] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:24:02.290 [DEBUG] [Thread-125193] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:24:02.290 [DEBUG] [Thread-125193] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:24:02.291 [DEBUG] [Thread-125193] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:24:02.291 [DEBUG] [Thread-125193] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:24:02.291 [DEBUG] [Thread-125193] [transport.py] [_log()] client lang: <none>
2025-12-31T09:24:02.291 [DEBUG] [Thread-125193] [transport.py] [_log()] server lang: <none>
2025-12-31T09:24:02.291 [DEBUG] [Thread-125193] [transport.py] [_log()] kex follows: False
2025-12-31T09:24:02.291 [DEBUG] [Thread-125193] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:24:02.291 [DEBUG] [Thread-125193] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:24:02.291 [DEBUG] [Thread-125193] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:24:02.291 [DEBUG] [Thread-125193] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:24:02.291 [DEBUG] [Thread-125193] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:24:02.291 [DEBUG] [Thread-125193] [transport.py] [_log()] Compression: none
2025-12-31T09:24:02.291 [DEBUG] [Thread-125193] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:24:02.302 [DEBUG] [Thread-125193] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:24:02.302 [DEBUG] [Thread-125193] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:24:02.302 [DEBUG] [Thread-125193] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T09:24:02.303 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T09:24:02.303 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:24:02.304 [DEBUG] [Thread-125193] [transport.py] [_log()] userauth is OK
2025-12-31T09:24:02.304 [DEBUG] [Thread-125193] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:24:02.304 [DEBUG] [Thread-125193] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:24:02.304 [DEBUG] [Thread-125193] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T09:24:02.305 [DEBUG] [Thread-125193] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:24:02.323 [INFO] [Thread-125193] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:24:02.323 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:24:03.078 [DEBUG] [Thread-125195 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:24:03.159 [DEBUG] [Thread-125193] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:24:03.160 [DEBUG] [Thread-125193] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:24:03.160 [DEBUG] [Thread-125193] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T09:24:03.201 [DEBUG] [Thread-125193] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:24:03.202 [DEBUG] [Thread-125193] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:24:03.205 [DEBUG] [Thread-125193] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:24:03.217 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:24:03.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T09:24:03.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T09:24:03.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T09:24:03.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:24:03.227 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T09:24:03.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:24:03.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:24:03.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T09:24:03.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.307783 -999.00  +22.80  14.38     19   -1.90 1 1 1 1 1   888    0 26.38 46.03 ----- 12.2 14.4 306.4 25.7 30.0 -28.4 29.3 -27.8 27.6 -25.9 28.0 -26.9
2025-12-31T09:24:03.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T09:24:03.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T09:24:03.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.307783
2025-12-31T09:24:03.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T09:24:03.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T09:24:03.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T09:24:03.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T09:24:03.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T09:24:03.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T09:23:36', tmtdew=30.09, humidity=12.83, cloud=0.0, wind=15.3, temperature=23.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T07:23:12.451', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T09:24:03.229 [DEBUG] [Thread-125193] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:24:03.314 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T09:24:03.326 [DEBUG] [Thread-125197] [transport.py] [_log()] starting thread (client mode): 0xb95d70d0
2025-12-31T09:24:03.327 [DEBUG] [Thread-125197] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:24:03.345 [DEBUG] [Thread-125197] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T09:24:03.345 [INFO] [Thread-125197] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T09:24:03.353 [DEBUG] [Thread-125197] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:24:03.353 [DEBUG] [Thread-125197] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T09:24:03.353 [DEBUG] [Thread-125197] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:24:03.353 [DEBUG] [Thread-125197] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:24:03.353 [DEBUG] [Thread-125197] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:24:03.353 [DEBUG] [Thread-125197] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:24:03.353 [DEBUG] [Thread-125197] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:24:03.353 [DEBUG] [Thread-125197] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:24:03.353 [DEBUG] [Thread-125197] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:24:03.354 [DEBUG] [Thread-125197] [transport.py] [_log()] client lang: <none>
2025-12-31T09:24:03.354 [DEBUG] [Thread-125197] [transport.py] [_log()] server lang: <none>
2025-12-31T09:24:03.354 [DEBUG] [Thread-125197] [transport.py] [_log()] kex follows: False
2025-12-31T09:24:03.354 [DEBUG] [Thread-125197] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:24:03.354 [DEBUG] [Thread-125197] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:24:03.354 [DEBUG] [Thread-125197] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:24:03.354 [DEBUG] [Thread-125197] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:24:03.354 [DEBUG] [Thread-125197] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:24:03.354 [DEBUG] [Thread-125197] [transport.py] [_log()] Compression: none
2025-12-31T09:24:03.354 [DEBUG] [Thread-125197] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:24:03.410 [DEBUG] [Thread-125197] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:24:03.411 [DEBUG] [Thread-125197] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:24:03.411 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T09:24:03.412 [DEBUG] [Thread-125197] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T09:24:03.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:24:03.478 [DEBUG] [Thread-125197] [transport.py] [_log()] userauth is OK
2025-12-31T09:24:03.479 [DEBUG] [Thread-125197] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:24:03.479 [DEBUG] [Thread-125197] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:24:03.479 [DEBUG] [Thread-125197] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T09:24:03.479 [DEBUG] [Thread-125197] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:24:03.504 [INFO] [Thread-125197] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:24:03.504 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T09:24:03.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:24:04.338 [DEBUG] [Thread-125197] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:24:04.339 [DEBUG] [Thread-125197] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:24:04.387 [DEBUG] [Thread-125197] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:24:04.387 [DEBUG] [Thread-125197] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:24:04.396 [DEBUG] [Thread-125197] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:24:04.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:24:04.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T09:24:04.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T09:24:04.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:24:04.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:24:04.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:24:04.434 [DEBUG] [Thread-125197] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:24:11.501 [DEBUG] [Thread-125199 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:24:16.153 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:24:16.154 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:24:26.549 [DEBUG] [Thread-125200 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:24:34.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T09:24:34.431 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T09:24:34.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T09:24:35.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 9, 24, 8), 30.4, 12.56, 0.0, 12.26, 23.61, 0, 0, 0, 2, 0, 0),)
2025-12-31T09:24:35.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 09:24:08
2025-12-31T09:24:35.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T09:24:35.432 [DEBUG] [Thread-125201] [transport.py] [_log()] starting thread (client mode): 0xb95d4f10
2025-12-31T09:24:35.432 [DEBUG] [Thread-125201] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:24:35.453 [DEBUG] [Thread-125201] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T09:24:35.453 [INFO] [Thread-125201] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T09:24:35.454 [DEBUG] [Thread-125201] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:24:35.455 [DEBUG] [Thread-125201] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T09:24:35.455 [DEBUG] [Thread-125201] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:24:35.455 [DEBUG] [Thread-125201] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:24:35.455 [DEBUG] [Thread-125201] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:24:35.455 [DEBUG] [Thread-125201] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:24:35.455 [DEBUG] [Thread-125201] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:24:35.455 [DEBUG] [Thread-125201] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:24:35.455 [DEBUG] [Thread-125201] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:24:35.455 [DEBUG] [Thread-125201] [transport.py] [_log()] client lang: <none>
2025-12-31T09:24:35.455 [DEBUG] [Thread-125201] [transport.py] [_log()] server lang: <none>
2025-12-31T09:24:35.455 [DEBUG] [Thread-125201] [transport.py] [_log()] kex follows: False
2025-12-31T09:24:35.455 [DEBUG] [Thread-125201] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:24:35.455 [DEBUG] [Thread-125201] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:24:35.455 [DEBUG] [Thread-125201] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:24:35.455 [DEBUG] [Thread-125201] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:24:35.456 [DEBUG] [Thread-125201] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:24:35.456 [DEBUG] [Thread-125201] [transport.py] [_log()] Compression: none
2025-12-31T09:24:35.456 [DEBUG] [Thread-125201] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:24:35.464 [DEBUG] [Thread-125201] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:24:35.464 [DEBUG] [Thread-125201] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:24:35.464 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T09:24:35.464 [DEBUG] [Thread-125201] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T09:24:35.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:24:35.466 [DEBUG] [Thread-125201] [transport.py] [_log()] userauth is OK
2025-12-31T09:24:35.466 [DEBUG] [Thread-125201] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:24:35.466 [DEBUG] [Thread-125201] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:24:35.466 [DEBUG] [Thread-125201] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T09:24:35.466 [DEBUG] [Thread-125201] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:24:35.484 [INFO] [Thread-125201] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:24:35.485 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:24:36.134 [DEBUG] [Thread-125201] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:24:36.135 [DEBUG] [Thread-125201] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:24:36.135 [DEBUG] [Thread-125201] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T09:24:36.176 [DEBUG] [Thread-125201] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:24:36.176 [DEBUG] [Thread-125201] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:24:36.180 [DEBUG] [Thread-125201] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:24:36.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:24:36.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T09:24:36.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T09:24:36.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T09:24:36.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:24:36.202 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T09:24:36.202 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:24:36.203 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:24:36.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T09:24:36.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.308130 -999.00  +23.20  15.59     18   -1.80 1 1 1 1 1   888    0 26.43 51.23 ----- 14.8 15.6 306.6 17.4 30.1 -28.0 29.4 -27.5 27.7 -27.2 28.2 -26.3
2025-12-31T09:24:36.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T09:24:36.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T09:24:36.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.308130
2025-12-31T09:24:36.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T09:24:36.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T09:24:36.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T09:24:36.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T09:24:36.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T09:24:36.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T09:24:08', tmtdew=30.4, humidity=12.56, cloud=0.0, wind=12.26, temperature=23.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T07:23:42.432', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T09:24:36.205 [DEBUG] [Thread-125201] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:24:36.288 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T09:24:36.301 [DEBUG] [Thread-125204] [transport.py] [_log()] starting thread (client mode): 0xb6b488e0
2025-12-31T09:24:36.301 [DEBUG] [Thread-125204] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:24:36.315 [DEBUG] [Thread-125204] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T09:24:36.316 [INFO] [Thread-125204] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T09:24:36.323 [DEBUG] [Thread-125204] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:24:36.323 [DEBUG] [Thread-125204] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T09:24:36.323 [DEBUG] [Thread-125204] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:24:36.324 [DEBUG] [Thread-125204] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:24:36.324 [DEBUG] [Thread-125204] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:24:36.324 [DEBUG] [Thread-125204] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:24:36.324 [DEBUG] [Thread-125204] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:24:36.324 [DEBUG] [Thread-125204] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:24:36.324 [DEBUG] [Thread-125204] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:24:36.324 [DEBUG] [Thread-125204] [transport.py] [_log()] client lang: <none>
2025-12-31T09:24:36.324 [DEBUG] [Thread-125204] [transport.py] [_log()] server lang: <none>
2025-12-31T09:24:36.324 [DEBUG] [Thread-125204] [transport.py] [_log()] kex follows: False
2025-12-31T09:24:36.324 [DEBUG] [Thread-125204] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:24:36.324 [DEBUG] [Thread-125204] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:24:36.324 [DEBUG] [Thread-125204] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:24:36.324 [DEBUG] [Thread-125204] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:24:36.324 [DEBUG] [Thread-125204] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:24:36.324 [DEBUG] [Thread-125204] [transport.py] [_log()] Compression: none
2025-12-31T09:24:36.324 [DEBUG] [Thread-125204] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:24:36.383 [DEBUG] [Thread-125204] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:24:36.383 [DEBUG] [Thread-125204] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:24:36.384 [DEBUG] [Thread-125204] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T09:24:36.384 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T09:24:36.385 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:24:36.442 [DEBUG] [Thread-125204] [transport.py] [_log()] userauth is OK
2025-12-31T09:24:36.442 [DEBUG] [Thread-125204] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:24:36.442 [DEBUG] [Thread-125204] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:24:36.442 [DEBUG] [Thread-125204] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T09:24:36.442 [DEBUG] [Thread-125204] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:24:36.466 [INFO] [Thread-125204] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:24: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-12-31T09:24:36.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:24:37.302 [DEBUG] [Thread-125204] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:24:37.302 [DEBUG] [Thread-125204] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:24:37.350 [DEBUG] [Thread-125204] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:24:37.350 [DEBUG] [Thread-125204] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:24:37.360 [DEBUG] [Thread-125204] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:24:37.369 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:24:37.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T09:24:37.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T09:24:37.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:24:37.389 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:24:37.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:24:37.398 [DEBUG] [Thread-125204] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:24:41.578 [DEBUG] [Thread-125206 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:24:56.621 [DEBUG] [Thread-125207 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:25:03.123 [DEBUG] [Thread-125208 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:25:07.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T09:25:07.420 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T09:25:07.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T09:25:08.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 9, 24, 40), 30.29, 12.66, 0.0, 10.83, 23.7, 0, 0, 0, 2, 0, 0),)
2025-12-31T09:25:08.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 09:24:40
2025-12-31T09:25:08.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T09:25:08.417 [DEBUG] [Thread-125209] [transport.py] [_log()] starting thread (client mode): 0xb6b221d0
2025-12-31T09:25:08.417 [DEBUG] [Thread-125209] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:25:08.438 [DEBUG] [Thread-125209] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T09:25:08.438 [INFO] [Thread-125209] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T09:25:08.442 [DEBUG] [Thread-125209] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:25:08.442 [DEBUG] [Thread-125209] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T09:25:08.442 [DEBUG] [Thread-125209] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:25:08.442 [DEBUG] [Thread-125209] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:25:08.442 [DEBUG] [Thread-125209] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:25:08.442 [DEBUG] [Thread-125209] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:25:08.442 [DEBUG] [Thread-125209] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:25:08.442 [DEBUG] [Thread-125209] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:25:08.442 [DEBUG] [Thread-125209] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:25:08.443 [DEBUG] [Thread-125209] [transport.py] [_log()] client lang: <none>
2025-12-31T09:25:08.443 [DEBUG] [Thread-125209] [transport.py] [_log()] server lang: <none>
2025-12-31T09:25:08.443 [DEBUG] [Thread-125209] [transport.py] [_log()] kex follows: False
2025-12-31T09:25:08.443 [DEBUG] [Thread-125209] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:25:08.443 [DEBUG] [Thread-125209] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:25:08.443 [DEBUG] [Thread-125209] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:25:08.443 [DEBUG] [Thread-125209] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:25:08.443 [DEBUG] [Thread-125209] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:25:08.443 [DEBUG] [Thread-125209] [transport.py] [_log()] Compression: none
2025-12-31T09:25:08.443 [DEBUG] [Thread-125209] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:25:08.463 [DEBUG] [Thread-125209] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:25:08.463 [DEBUG] [Thread-125209] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:25:08.464 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T09:25:08.465 [DEBUG] [Thread-125209] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T09:25:08.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:25:08.466 [DEBUG] [Thread-125209] [transport.py] [_log()] userauth is OK
2025-12-31T09:25:08.466 [DEBUG] [Thread-125209] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:25:08.467 [DEBUG] [Thread-125209] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:25:08.467 [DEBUG] [Thread-125209] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T09:25:08.467 [DEBUG] [Thread-125209] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:25:08.480 [INFO] [Thread-125209] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:25:08.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:25:11.657 [DEBUG] [Thread-125211 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:25:16.293 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:25:16.294 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:25:16.754 [DEBUG] [Thread-125209] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:25:16.754 [DEBUG] [Thread-125209] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:25:16.754 [DEBUG] [Thread-125209] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T09:25:16.794 [DEBUG] [Thread-125209] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:25:16.795 [DEBUG] [Thread-125209] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:25:16.799 [DEBUG] [Thread-125209] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:25:16.855 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:25:16.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T09:25:16.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T09:25:16.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T09:25:16.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:25:16.865 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T09:25:16.866 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:25:16.866 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:25:16.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T09:25:16.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.308825 -999.00  +23.20   8.79     18   -2.20 1 1 1 1 1   888    0 27.08 64.82 ----- 10.8 8.8 289.0 12.6 30.2 -27.7 29.6 -27.1 27.8 -25.8 28.2 -26.7
2025-12-31T09:25:16.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T09:25:16.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T09:25:16.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.308825
2025-12-31T09:25:16.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T09:25:16.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T09:25:16.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T09:25:16.867 [DEBUG] [Thread-125209] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:25:16.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T09:25:16.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T09:25:16.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T09:24:40', tmtdew=30.29, humidity=12.66, cloud=0.0, wind=10.83, temperature=23.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T07:24:42.480', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T09:25:16.954 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T09:25:16.966 [DEBUG] [Thread-125213] [transport.py] [_log()] starting thread (client mode): 0xb6b6ad70
2025-12-31T09:25:16.966 [DEBUG] [Thread-125213] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:25:16.980 [DEBUG] [Thread-125213] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T09:25:16.980 [INFO] [Thread-125213] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T09:25:16.988 [DEBUG] [Thread-125213] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:25:16.988 [DEBUG] [Thread-125213] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T09:25:16.988 [DEBUG] [Thread-125213] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:25:16.988 [DEBUG] [Thread-125213] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:25:16.988 [DEBUG] [Thread-125213] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:25:16.988 [DEBUG] [Thread-125213] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:25:16.988 [DEBUG] [Thread-125213] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:25:16.988 [DEBUG] [Thread-125213] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:25:16.988 [DEBUG] [Thread-125213] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:25:16.988 [DEBUG] [Thread-125213] [transport.py] [_log()] client lang: <none>
2025-12-31T09:25:16.988 [DEBUG] [Thread-125213] [transport.py] [_log()] server lang: <none>
2025-12-31T09:25:16.988 [DEBUG] [Thread-125213] [transport.py] [_log()] kex follows: False
2025-12-31T09:25:16.988 [DEBUG] [Thread-125213] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:25:16.988 [DEBUG] [Thread-125213] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:25:16.988 [DEBUG] [Thread-125213] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:25:16.988 [DEBUG] [Thread-125213] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:25:16.988 [DEBUG] [Thread-125213] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:25:16.988 [DEBUG] [Thread-125213] [transport.py] [_log()] Compression: none
2025-12-31T09:25:16.988 [DEBUG] [Thread-125213] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:25:17.044 [DEBUG] [Thread-125213] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:25:17.044 [DEBUG] [Thread-125213] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:25:17.045 [DEBUG] [Thread-125213] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T09:25:17.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T09:25:17.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:25:17.102 [DEBUG] [Thread-125213] [transport.py] [_log()] userauth is OK
2025-12-31T09:25:17.102 [DEBUG] [Thread-125213] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:25:17.102 [DEBUG] [Thread-125213] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:25:17.102 [DEBUG] [Thread-125213] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T09:25:17.102 [DEBUG] [Thread-125213] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:25:17.121 [INFO] [Thread-125213] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:25:17.121 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T09:25:17.122 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:25:17.977 [DEBUG] [Thread-125213] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:25:17.977 [DEBUG] [Thread-125213] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:25:18.025 [DEBUG] [Thread-125213] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:25:18.025 [DEBUG] [Thread-125213] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:25:18.034 [DEBUG] [Thread-125213] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:25:18.044 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:25:18.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T09:25:18.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-12-31T09:25:18.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:25:18.063 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:25:18.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:25:18.072 [DEBUG] [Thread-125213] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:25:26.694 [DEBUG] [Thread-125215 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:25:41.742 [DEBUG] [Thread-125216 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:25:48.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T09:25:48.094 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T09:25:48.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T09:25:48.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 9, 25, 44), 31.22, 11.7, 0.0, 8.89, 24.06, 0, 0, 0, 2, 0, 0),)
2025-12-31T09:25:48.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 09:25:44
2025-12-31T09:25:48.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T09:25:49.099 [DEBUG] [Thread-125217] [transport.py] [_log()] starting thread (client mode): 0xb95d7e50
2025-12-31T09:25:49.099 [DEBUG] [Thread-125217] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:25:49.120 [DEBUG] [Thread-125217] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T09:25:49.120 [INFO] [Thread-125217] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T09:25:49.122 [DEBUG] [Thread-125217] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:25:49.122 [DEBUG] [Thread-125217] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T09:25:49.122 [DEBUG] [Thread-125217] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:25:49.122 [DEBUG] [Thread-125217] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:25:49.122 [DEBUG] [Thread-125217] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:25:49.122 [DEBUG] [Thread-125217] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:25:49.123 [DEBUG] [Thread-125217] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:25:49.123 [DEBUG] [Thread-125217] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:25:49.123 [DEBUG] [Thread-125217] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:25:49.123 [DEBUG] [Thread-125217] [transport.py] [_log()] client lang: <none>
2025-12-31T09:25:49.123 [DEBUG] [Thread-125217] [transport.py] [_log()] server lang: <none>
2025-12-31T09:25:49.123 [DEBUG] [Thread-125217] [transport.py] [_log()] kex follows: False
2025-12-31T09:25:49.123 [DEBUG] [Thread-125217] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:25:49.123 [DEBUG] [Thread-125217] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:25:49.123 [DEBUG] [Thread-125217] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:25:49.123 [DEBUG] [Thread-125217] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:25:49.123 [DEBUG] [Thread-125217] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:25:49.124 [DEBUG] [Thread-125217] [transport.py] [_log()] Compression: none
2025-12-31T09:25:49.133 [DEBUG] [Thread-125217] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:25:49.152 [DEBUG] [Thread-125217] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:25:49.152 [DEBUG] [Thread-125217] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:25:49.153 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T09:25:49.153 [DEBUG] [Thread-125217] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T09:25:49.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:25:49.155 [DEBUG] [Thread-125217] [transport.py] [_log()] userauth is OK
2025-12-31T09:25:49.155 [DEBUG] [Thread-125217] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:25:49.155 [DEBUG] [Thread-125217] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:25:49.155 [DEBUG] [Thread-125217] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T09:25:49.155 [DEBUG] [Thread-125217] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:25:49.180 [INFO] [Thread-125217] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:25:49.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:25:49.783 [DEBUG] [Thread-125217] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:25:49.784 [DEBUG] [Thread-125217] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:25:49.784 [DEBUG] [Thread-125217] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T09:25:49.825 [DEBUG] [Thread-125217] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:25:49.825 [DEBUG] [Thread-125217] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:25:49.829 [DEBUG] [Thread-125217] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:25:49.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:25:49.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T09:25:49.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T09:25:49.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T09:25:49.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:25:49.857 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T09:25:49.857 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:25:49.857 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:25:49.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T09:25:49.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.309172 -999.00  +23.10  12.02     17   -2.70 1 1 1 1 1   888    0 27.08 70.09 ----- 15.3 12.0 308.8 13.7 30.4 -28.3 29.7 -27.6 27.9 -25.8 28.3 -26.2
2025-12-31T09:25:49.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T09:25:49.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T09:25:49.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.309172
2025-12-31T09:25:49.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T09:25:49.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T09:25:49.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T09:25:49.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T09:25:49.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T09:25:49.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T09:25:44', tmtdew=31.22, humidity=11.7, cloud=0.0, wind=8.89, temperature=24.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T07:25:12.461', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T09:25:49.860 [DEBUG] [Thread-125217] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:25:49.943 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T09:25:49.956 [DEBUG] [Thread-125220] [transport.py] [_log()] starting thread (client mode): 0xb955bd30
2025-12-31T09:25:49.956 [DEBUG] [Thread-125220] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:25:49.970 [DEBUG] [Thread-125220] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T09:25:49.971 [INFO] [Thread-125220] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T09:25:49.978 [DEBUG] [Thread-125220] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:25:49.978 [DEBUG] [Thread-125220] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T09:25:49.978 [DEBUG] [Thread-125220] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:25:49.978 [DEBUG] [Thread-125220] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:25:49.978 [DEBUG] [Thread-125220] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:25:49.978 [DEBUG] [Thread-125220] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:25:49.978 [DEBUG] [Thread-125220] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:25:49.978 [DEBUG] [Thread-125220] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:25:49.978 [DEBUG] [Thread-125220] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:25:49.978 [DEBUG] [Thread-125220] [transport.py] [_log()] client lang: <none>
2025-12-31T09:25:49.979 [DEBUG] [Thread-125220] [transport.py] [_log()] server lang: <none>
2025-12-31T09:25:49.979 [DEBUG] [Thread-125220] [transport.py] [_log()] kex follows: False
2025-12-31T09:25:49.979 [DEBUG] [Thread-125220] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:25:49.979 [DEBUG] [Thread-125220] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:25:49.979 [DEBUG] [Thread-125220] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:25:49.979 [DEBUG] [Thread-125220] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:25:49.979 [DEBUG] [Thread-125220] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:25:49.979 [DEBUG] [Thread-125220] [transport.py] [_log()] Compression: none
2025-12-31T09:25:49.979 [DEBUG] [Thread-125220] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:25:50.041 [DEBUG] [Thread-125220] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:25:50.042 [DEBUG] [Thread-125220] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:25:50.043 [DEBUG] [Thread-125220] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T09:25:50.043 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T09:25:50.044 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:25:50.097 [DEBUG] [Thread-125220] [transport.py] [_log()] userauth is OK
2025-12-31T09:25:50.097 [DEBUG] [Thread-125220] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:25:50.098 [DEBUG] [Thread-125220] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:25:50.098 [DEBUG] [Thread-125220] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T09:25:50.098 [DEBUG] [Thread-125220] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:25:50.117 [INFO] [Thread-125220] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:25:50.117 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T09:25:50.117 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:25:50.938 [DEBUG] [Thread-125220] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:25:50.939 [DEBUG] [Thread-125220] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:25:50.987 [DEBUG] [Thread-125220] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:25:50.987 [DEBUG] [Thread-125220] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:25:50.996 [DEBUG] [Thread-125220] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:25:51.006 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:25:51.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-12-31T09:25:51.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T09:25:51.024 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:25:51.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:25:51.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:25:51.033 [DEBUG] [Thread-125220] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:25:56.773 [DEBUG] [Thread-125222 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:26:03.174 [DEBUG] [Thread-125223 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:26:11.834 [DEBUG] [Thread-125224 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:26:16.433 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:26:16.434 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:26:21.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T09:26:21.055 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T09:26:21.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T09:26:21.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 9, 26, 16), 32.1, 10.97, 0.0, 11.56, 24.04, 0, 0, 0, 2, 0, 0),)
2025-12-31T09:26:21.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 09:26:16
2025-12-31T09:26:21.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T09:26:22.109 [DEBUG] [Thread-125225] [transport.py] [_log()] starting thread (client mode): 0xb95d6e00
2025-12-31T09:26:22.110 [DEBUG] [Thread-125225] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:26:22.133 [DEBUG] [Thread-125225] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T09:26:22.133 [INFO] [Thread-125225] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T09:26:22.137 [DEBUG] [Thread-125225] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:26:22.137 [DEBUG] [Thread-125225] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T09:26:22.137 [DEBUG] [Thread-125225] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:26:22.137 [DEBUG] [Thread-125225] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:26:22.137 [DEBUG] [Thread-125225] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:26:22.137 [DEBUG] [Thread-125225] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:26:22.137 [DEBUG] [Thread-125225] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:26:22.137 [DEBUG] [Thread-125225] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:26:22.137 [DEBUG] [Thread-125225] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:26:22.137 [DEBUG] [Thread-125225] [transport.py] [_log()] client lang: <none>
2025-12-31T09:26:22.137 [DEBUG] [Thread-125225] [transport.py] [_log()] server lang: <none>
2025-12-31T09:26:22.137 [DEBUG] [Thread-125225] [transport.py] [_log()] kex follows: False
2025-12-31T09:26:22.137 [DEBUG] [Thread-125225] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:26:22.137 [DEBUG] [Thread-125225] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:26:22.137 [DEBUG] [Thread-125225] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:26:22.137 [DEBUG] [Thread-125225] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:26:22.137 [DEBUG] [Thread-125225] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:26:22.137 [DEBUG] [Thread-125225] [transport.py] [_log()] Compression: none
2025-12-31T09:26:22.137 [DEBUG] [Thread-125225] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:26:22.153 [DEBUG] [Thread-125225] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:26:22.153 [DEBUG] [Thread-125225] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:26:22.153 [DEBUG] [Thread-125225] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T09:26:22.153 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T09:26:22.153 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:26:22.154 [DEBUG] [Thread-125225] [transport.py] [_log()] userauth is OK
2025-12-31T09:26:22.154 [DEBUG] [Thread-125225] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:26:22.154 [DEBUG] [Thread-125225] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:26:22.154 [DEBUG] [Thread-125225] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T09:26:22.154 [DEBUG] [Thread-125225] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:26:22.164 [INFO] [Thread-125225] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:26:22.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:26:22.970 [DEBUG] [Thread-125225] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:26:22.970 [DEBUG] [Thread-125225] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:26:22.970 [DEBUG] [Thread-125225] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T09:26:23.011 [DEBUG] [Thread-125225] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:26:23.012 [DEBUG] [Thread-125225] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:26:23.014 [DEBUG] [Thread-125225] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:26:23.020 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:26:23.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T09:26:23.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T09:26:23.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T09:26:23.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:26:23.024 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T09:26:23.024 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:26:23.024 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:26:23.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T09:26:23.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.309519 -999.00  +23.30  13.38     16   -3.60 1 1 1 1 1   888    0 26.99 79.00 ----- 16.9 13.4 296.0 19.7 30.3 -28.6 29.7 -27.0 27.8 -25.6 28.4 -26.4
2025-12-31T09:26:23.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T09:26:23.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T09:26:23.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.309519
2025-12-31T09:26:23.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T09:26:23.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T09:26:23.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T09:26:23.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T09:26:23.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T09:26:23.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T09:26:16', tmtdew=32.1, humidity=10.97, cloud=0.0, wind=11.56, temperature=24.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T07:25:42.442', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T09:26:23.025 [DEBUG] [Thread-125225] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:26:23.100 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T09:26:23.113 [DEBUG] [Thread-125228] [transport.py] [_log()] starting thread (client mode): 0xb95d70a0
2025-12-31T09:26:23.113 [DEBUG] [Thread-125228] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:26:23.127 [DEBUG] [Thread-125228] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T09:26:23.127 [INFO] [Thread-125228] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T09:26:23.135 [DEBUG] [Thread-125228] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:26:23.135 [DEBUG] [Thread-125228] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T09:26:23.135 [DEBUG] [Thread-125228] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:26:23.135 [DEBUG] [Thread-125228] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:26:23.135 [DEBUG] [Thread-125228] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:26:23.135 [DEBUG] [Thread-125228] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:26:23.135 [DEBUG] [Thread-125228] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:26:23.135 [DEBUG] [Thread-125228] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:26:23.135 [DEBUG] [Thread-125228] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:26:23.135 [DEBUG] [Thread-125228] [transport.py] [_log()] client lang: <none>
2025-12-31T09:26:23.135 [DEBUG] [Thread-125228] [transport.py] [_log()] server lang: <none>
2025-12-31T09:26:23.135 [DEBUG] [Thread-125228] [transport.py] [_log()] kex follows: False
2025-12-31T09:26:23.135 [DEBUG] [Thread-125228] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:26:23.135 [DEBUG] [Thread-125228] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:26:23.135 [DEBUG] [Thread-125228] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:26:23.135 [DEBUG] [Thread-125228] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:26:23.135 [DEBUG] [Thread-125228] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:26:23.135 [DEBUG] [Thread-125228] [transport.py] [_log()] Compression: none
2025-12-31T09:26:23.135 [DEBUG] [Thread-125228] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:26:23.191 [DEBUG] [Thread-125228] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:26:23.191 [DEBUG] [Thread-125228] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:26:23.191 [DEBUG] [Thread-125228] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T09:26:23.191 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T09:26:23.191 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:26:23.256 [DEBUG] [Thread-125228] [transport.py] [_log()] userauth is OK
2025-12-31T09:26:23.256 [DEBUG] [Thread-125228] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:26:23.256 [DEBUG] [Thread-125228] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:26:23.256 [DEBUG] [Thread-125228] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T09:26:23.256 [DEBUG] [Thread-125228] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:26:23.270 [INFO] [Thread-125228] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:26:23.270 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T09:26:23.270 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:26:24.115 [DEBUG] [Thread-125228] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:26:24.115 [DEBUG] [Thread-125228] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:26:24.163 [DEBUG] [Thread-125228] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:26:24.163 [DEBUG] [Thread-125228] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:26:24.172 [DEBUG] [Thread-125228] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:26:24.180 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:26:24.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T09:26:24.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T09:26:24.196 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:26:24.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:26:24.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:26:24.204 [DEBUG] [Thread-125228] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:26:26.867 [DEBUG] [Thread-125230 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:26:41.922 [DEBUG] [Thread-125231 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:26:54.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T09:26:54.221 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T09:26:54.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T09:26:54.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 9, 26, 48), 32.86, 10.47, 0.0, 19.18, 24.06, 0, 0, 0, 2, 0, 0),)
2025-12-31T09:26:54.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 09:26:48
2025-12-31T09:26:55.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T09:26:55.226 [DEBUG] [Thread-125232] [transport.py] [_log()] starting thread (client mode): 0xb95d79a0
2025-12-31T09:26:55.226 [DEBUG] [Thread-125232] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:26:55.245 [DEBUG] [Thread-125232] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T09:26:55.245 [INFO] [Thread-125232] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T09:26:55.248 [DEBUG] [Thread-125232] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:26:55.248 [DEBUG] [Thread-125232] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T09:26:55.248 [DEBUG] [Thread-125232] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:26:55.248 [DEBUG] [Thread-125232] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:26:55.249 [DEBUG] [Thread-125232] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:26:55.249 [DEBUG] [Thread-125232] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:26:55.249 [DEBUG] [Thread-125232] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:26:55.249 [DEBUG] [Thread-125232] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:26:55.249 [DEBUG] [Thread-125232] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:26:55.249 [DEBUG] [Thread-125232] [transport.py] [_log()] client lang: <none>
2025-12-31T09:26:55.249 [DEBUG] [Thread-125232] [transport.py] [_log()] server lang: <none>
2025-12-31T09:26:55.249 [DEBUG] [Thread-125232] [transport.py] [_log()] kex follows: False
2025-12-31T09:26:55.249 [DEBUG] [Thread-125232] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:26:55.249 [DEBUG] [Thread-125232] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:26:55.249 [DEBUG] [Thread-125232] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:26:55.249 [DEBUG] [Thread-125232] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:26:55.249 [DEBUG] [Thread-125232] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:26:55.249 [DEBUG] [Thread-125232] [transport.py] [_log()] Compression: none
2025-12-31T09:26:55.249 [DEBUG] [Thread-125232] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:26:55.267 [DEBUG] [Thread-125232] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:26:55.267 [DEBUG] [Thread-125232] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:26:55.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T09:26:55.268 [DEBUG] [Thread-125232] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T09:26:55.269 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:26:55.270 [DEBUG] [Thread-125232] [transport.py] [_log()] userauth is OK
2025-12-31T09:26:55.270 [DEBUG] [Thread-125232] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:26:55.271 [DEBUG] [Thread-125232] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:26:55.271 [DEBUG] [Thread-125232] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T09:26:55.271 [DEBUG] [Thread-125232] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:26:55.293 [INFO] [Thread-125232] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:26:55.294 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:26:55.927 [DEBUG] [Thread-125232] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:26:55.927 [DEBUG] [Thread-125232] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:26:55.927 [DEBUG] [Thread-125232] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T09:26:55.968 [DEBUG] [Thread-125232] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:26:55.968 [DEBUG] [Thread-125232] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:26:55.971 [DEBUG] [Thread-125232] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:26:55.986 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:26:55.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T09:26:55.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T09:26:55.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T09:26:55.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:26:55.997 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T09:26:55.997 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:26:55.997 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:26:55.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T09:26:55.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.309866 -999.00  +23.70  16.28     16   -3.00 1 1 1 1 1   888    0 27.38 89.29 ----- 11.4 16.3 312.6 20.1 30.5 -27.8 29.7 -27.0 28.0 -26.3 28.4 -26.0
2025-12-31T09:26:55.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T09:26:55.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T09:26:55.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.309866
2025-12-31T09:26:55.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T09:26:55.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T09:26:55.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T09:26:55.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T09:26:56.000 [DEBUG] [Thread-125232] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:26:56.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T09:26:56.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T09:26:48', tmtdew=32.86, humidity=10.47, cloud=0.0, wind=19.18, temperature=24.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T07:26:12.422', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T09:26:56.093 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T09:26:56.105 [DEBUG] [Thread-125235] [transport.py] [_log()] starting thread (client mode): 0xb6b6af20
2025-12-31T09:26:56.105 [DEBUG] [Thread-125235] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:26:56.120 [DEBUG] [Thread-125235] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T09:26:56.120 [INFO] [Thread-125235] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T09:26:56.127 [DEBUG] [Thread-125235] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:26:56.128 [DEBUG] [Thread-125235] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T09:26:56.128 [DEBUG] [Thread-125235] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:26:56.128 [DEBUG] [Thread-125235] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:26:56.128 [DEBUG] [Thread-125235] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:26:56.128 [DEBUG] [Thread-125235] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:26:56.128 [DEBUG] [Thread-125235] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:26:56.128 [DEBUG] [Thread-125235] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:26:56.128 [DEBUG] [Thread-125235] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:26:56.128 [DEBUG] [Thread-125235] [transport.py] [_log()] client lang: <none>
2025-12-31T09:26:56.128 [DEBUG] [Thread-125235] [transport.py] [_log()] server lang: <none>
2025-12-31T09:26:56.128 [DEBUG] [Thread-125235] [transport.py] [_log()] kex follows: False
2025-12-31T09:26:56.128 [DEBUG] [Thread-125235] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:26:56.128 [DEBUG] [Thread-125235] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:26:56.128 [DEBUG] [Thread-125235] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:26:56.128 [DEBUG] [Thread-125235] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:26:56.128 [DEBUG] [Thread-125235] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:26:56.129 [DEBUG] [Thread-125235] [transport.py] [_log()] Compression: none
2025-12-31T09:26:56.129 [DEBUG] [Thread-125235] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:26:56.188 [DEBUG] [Thread-125235] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:26:56.189 [DEBUG] [Thread-125235] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:26:56.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T09:26:56.190 [DEBUG] [Thread-125235] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T09:26:56.190 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:26:56.244 [DEBUG] [Thread-125235] [transport.py] [_log()] userauth is OK
2025-12-31T09:26:56.245 [DEBUG] [Thread-125235] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:26:56.245 [DEBUG] [Thread-125235] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:26:56.245 [DEBUG] [Thread-125235] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T09:26:56.245 [DEBUG] [Thread-125235] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:26:56.263 [INFO] [Thread-125235] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:26:56.264 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T09:26:56.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:26:56.957 [DEBUG] [Thread-125237 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:26:57.121 [DEBUG] [Thread-125235] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:26:57.121 [DEBUG] [Thread-125235] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:26:57.169 [DEBUG] [Thread-125235] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:26:57.169 [DEBUG] [Thread-125235] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:26:57.178 [DEBUG] [Thread-125235] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:26:57.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:26:57.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T09:26:57.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T09:26:57.207 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:26:57.207 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:26:57.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:26:57.215 [DEBUG] [Thread-125235] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:27:03.219 [DEBUG] [Thread-125238 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:27:12.005 [DEBUG] [Thread-125239 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:27:16.576 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:27:16.577 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:27:27.039 [DEBUG] [Thread-125240 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:27:27.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T09:27:27.238 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T09:27:27.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T09:27:27.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 9, 27, 20), 32.57, 10.68, 0.0, 19.64, 24.01, 0, 0, 0, 2, 0, 0),)
2025-12-31T09:27:27.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 09:27:20
2025-12-31T09:27:28.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T09:27:28.228 [DEBUG] [Thread-125241] [transport.py] [_log()] starting thread (client mode): 0xb6be5ff0
2025-12-31T09:27:28.228 [DEBUG] [Thread-125241] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:27:28.248 [DEBUG] [Thread-125241] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T09:27:28.248 [INFO] [Thread-125241] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T09:27:28.251 [DEBUG] [Thread-125241] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:27:28.251 [DEBUG] [Thread-125241] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T09:27:28.251 [DEBUG] [Thread-125241] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:27:28.251 [DEBUG] [Thread-125241] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:27:28.251 [DEBUG] [Thread-125241] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:27:28.251 [DEBUG] [Thread-125241] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:27:28.251 [DEBUG] [Thread-125241] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:27:28.251 [DEBUG] [Thread-125241] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:27:28.251 [DEBUG] [Thread-125241] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:27:28.251 [DEBUG] [Thread-125241] [transport.py] [_log()] client lang: <none>
2025-12-31T09:27:28.251 [DEBUG] [Thread-125241] [transport.py] [_log()] server lang: <none>
2025-12-31T09:27:28.251 [DEBUG] [Thread-125241] [transport.py] [_log()] kex follows: False
2025-12-31T09:27:28.251 [DEBUG] [Thread-125241] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:27:28.251 [DEBUG] [Thread-125241] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:27:28.251 [DEBUG] [Thread-125241] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:27:28.251 [DEBUG] [Thread-125241] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:27:28.251 [DEBUG] [Thread-125241] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:27:28.251 [DEBUG] [Thread-125241] [transport.py] [_log()] Compression: none
2025-12-31T09:27:28.251 [DEBUG] [Thread-125241] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:27:28.268 [DEBUG] [Thread-125241] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:27:28.268 [DEBUG] [Thread-125241] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:27:28.269 [DEBUG] [Thread-125241] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T09:27:28.269 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T09:27:28.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:27:28.271 [DEBUG] [Thread-125241] [transport.py] [_log()] userauth is OK
2025-12-31T09:27:28.271 [DEBUG] [Thread-125241] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:27:28.271 [DEBUG] [Thread-125241] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:27:28.271 [DEBUG] [Thread-125241] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T09:27:28.271 [DEBUG] [Thread-125241] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:27:28.306 [INFO] [Thread-125241] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:27:28.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:27:29.055 [DEBUG] [Thread-125241] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:27:29.056 [DEBUG] [Thread-125241] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:27:29.056 [DEBUG] [Thread-125241] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T09:27:29.097 [DEBUG] [Thread-125241] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:27:29.097 [DEBUG] [Thread-125241] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:27:29.100 [DEBUG] [Thread-125241] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:27:29.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:27:29.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T09:27:29.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T09:27:29.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T09:27:29.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:27:29.124 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T09:27:29.124 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:27:29.124 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:27:29.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T09:27:29.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.310214 -999.00  +23.50  21.56     16   -3.30 1 1 1 1 1   888    0 27.73 94.46 ----- 18.8 21.6 310.4 25.8 30.4 -28.7 29.7 -27.8 27.9 -25.9 28.4 -26.5
2025-12-31T09:27:29.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T09:27:29.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T09:27:29.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.310214
2025-12-31T09:27:29.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T09:27:29.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T09:27:29.126 [DEBUG] [Thread-125241] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:27:29.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T09:27:29.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T09:27:29.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T09:27:29.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T09:27:20', tmtdew=32.57, humidity=10.68, cloud=0.0, wind=19.64, temperature=24.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T07:26:42.490', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T09:27:29.209 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T09:27:29.221 [DEBUG] [Thread-125244] [transport.py] [_log()] starting thread (client mode): 0xb6be4e50
2025-12-31T09:27:29.221 [DEBUG] [Thread-125244] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:27:29.236 [DEBUG] [Thread-125244] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T09:27:29.236 [INFO] [Thread-125244] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T09:27:29.243 [DEBUG] [Thread-125244] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:27:29.243 [DEBUG] [Thread-125244] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T09:27:29.243 [DEBUG] [Thread-125244] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:27:29.243 [DEBUG] [Thread-125244] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:27:29.243 [DEBUG] [Thread-125244] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:27:29.243 [DEBUG] [Thread-125244] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:27:29.244 [DEBUG] [Thread-125244] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:27:29.244 [DEBUG] [Thread-125244] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:27:29.244 [DEBUG] [Thread-125244] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:27:29.244 [DEBUG] [Thread-125244] [transport.py] [_log()] client lang: <none>
2025-12-31T09:27:29.244 [DEBUG] [Thread-125244] [transport.py] [_log()] server lang: <none>
2025-12-31T09:27:29.244 [DEBUG] [Thread-125244] [transport.py] [_log()] kex follows: False
2025-12-31T09:27:29.244 [DEBUG] [Thread-125244] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:27:29.244 [DEBUG] [Thread-125244] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:27:29.244 [DEBUG] [Thread-125244] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:27:29.244 [DEBUG] [Thread-125244] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:27:29.244 [DEBUG] [Thread-125244] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:27:29.244 [DEBUG] [Thread-125244] [transport.py] [_log()] Compression: none
2025-12-31T09:27:29.244 [DEBUG] [Thread-125244] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:27:29.301 [DEBUG] [Thread-125244] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:27:29.301 [DEBUG] [Thread-125244] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:27:29.301 [DEBUG] [Thread-125244] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T09:27:29.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T09:27:29.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:27:29.361 [DEBUG] [Thread-125244] [transport.py] [_log()] userauth is OK
2025-12-31T09:27:29.362 [DEBUG] [Thread-125244] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:27:29.362 [DEBUG] [Thread-125244] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:27:29.362 [DEBUG] [Thread-125244] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T09:27:29.362 [DEBUG] [Thread-125244] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:27:29.384 [INFO] [Thread-125244] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:27:29.384 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T09:27:29.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:27:30.270 [DEBUG] [Thread-125244] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:27:30.270 [DEBUG] [Thread-125244] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:27:30.317 [DEBUG] [Thread-125244] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:27:30.318 [DEBUG] [Thread-125244] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:27:30.326 [DEBUG] [Thread-125244] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:27:30.335 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:27:30.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T09:27:30.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T09:27:30.353 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:27:30.354 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:27:30.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:27:30.362 [DEBUG] [Thread-125244] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:27:42.071 [DEBUG] [Thread-125246 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:27:57.114 [DEBUG] [Thread-125247 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:28:00.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T09:28:00.385 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T09:28:00.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T09:28:01.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 9, 27, 52), 32.39, 10.85, 0.0, 11.61, 23.89, 0, 0, 0, 2, 0, 0),)
2025-12-31T09:28:01.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 09:27:52
2025-12-31T09:28:01.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T09:28:01.369 [DEBUG] [Thread-125248] [transport.py] [_log()] starting thread (client mode): 0xb9559a50
2025-12-31T09:28:01.369 [DEBUG] [Thread-125248] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:28:01.389 [DEBUG] [Thread-125248] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T09:28:01.389 [INFO] [Thread-125248] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T09:28:01.392 [DEBUG] [Thread-125248] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:28:01.392 [DEBUG] [Thread-125248] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T09:28:01.392 [DEBUG] [Thread-125248] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:28:01.392 [DEBUG] [Thread-125248] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:28:01.392 [DEBUG] [Thread-125248] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:28:01.392 [DEBUG] [Thread-125248] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:28:01.393 [DEBUG] [Thread-125248] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:28:01.393 [DEBUG] [Thread-125248] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:28:01.393 [DEBUG] [Thread-125248] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:28:01.393 [DEBUG] [Thread-125248] [transport.py] [_log()] client lang: <none>
2025-12-31T09:28:01.393 [DEBUG] [Thread-125248] [transport.py] [_log()] server lang: <none>
2025-12-31T09:28:01.393 [DEBUG] [Thread-125248] [transport.py] [_log()] kex follows: False
2025-12-31T09:28:01.393 [DEBUG] [Thread-125248] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:28:01.393 [DEBUG] [Thread-125248] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:28:01.393 [DEBUG] [Thread-125248] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:28:01.393 [DEBUG] [Thread-125248] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:28:01.393 [DEBUG] [Thread-125248] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:28:01.393 [DEBUG] [Thread-125248] [transport.py] [_log()] Compression: none
2025-12-31T09:28:01.393 [DEBUG] [Thread-125248] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:28:01.401 [DEBUG] [Thread-125248] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:28:01.401 [DEBUG] [Thread-125248] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:28:01.402 [DEBUG] [Thread-125248] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T09:28:01.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T09:28:01.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:28:01.403 [DEBUG] [Thread-125248] [transport.py] [_log()] userauth is OK
2025-12-31T09:28:01.403 [DEBUG] [Thread-125248] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:28:01.404 [DEBUG] [Thread-125248] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:28:01.404 [DEBUG] [Thread-125248] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T09:28:01.404 [DEBUG] [Thread-125248] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:28:01.421 [INFO] [Thread-125248] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:28:01.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:28:02.055 [DEBUG] [Thread-125248] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:28:02.055 [DEBUG] [Thread-125248] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:28:02.055 [DEBUG] [Thread-125248] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T09:28:02.096 [DEBUG] [Thread-125248] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:28:02.096 [DEBUG] [Thread-125248] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:28:02.099 [DEBUG] [Thread-125248] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:28:02.110 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:28:02.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T09:28:02.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T09:28:02.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T09:28:02.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:28:02.121 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T09:28:02.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:28:02.121 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:28:02.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T09:28:02.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.310561 -999.00  +23.30  16.32     16   -3.40 1 1 1 1 1   888    0 27.80 96.37 ----- 21.7 16.3 283.7 22.1 30.4 -29.1 29.8 -27.4 27.9 -27.2 28.4 -26.9
2025-12-31T09:28:02.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T09:28:02.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T09:28:02.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.310561
2025-12-31T09:28:02.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T09:28:02.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T09:28:02.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T09:28:02.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T09:28:02.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T09:28:02.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T09:27:52', tmtdew=32.39, humidity=10.85, cloud=0.0, wind=11.61, temperature=23.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T07:27:12.470', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T09:28:02.123 [DEBUG] [Thread-125248] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:28:02.207 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T09:28:02.221 [DEBUG] [Thread-125251] [transport.py] [_log()] starting thread (client mode): 0xb955b280
2025-12-31T09:28:02.221 [DEBUG] [Thread-125251] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:28:02.236 [DEBUG] [Thread-125251] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T09:28:02.237 [INFO] [Thread-125251] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T09:28:02.244 [DEBUG] [Thread-125251] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:28:02.244 [DEBUG] [Thread-125251] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T09:28:02.244 [DEBUG] [Thread-125251] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:28:02.244 [DEBUG] [Thread-125251] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:28:02.244 [DEBUG] [Thread-125251] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:28:02.244 [DEBUG] [Thread-125251] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:28:02.244 [DEBUG] [Thread-125251] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:28:02.244 [DEBUG] [Thread-125251] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:28:02.244 [DEBUG] [Thread-125251] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:28:02.244 [DEBUG] [Thread-125251] [transport.py] [_log()] client lang: <none>
2025-12-31T09:28:02.244 [DEBUG] [Thread-125251] [transport.py] [_log()] server lang: <none>
2025-12-31T09:28:02.244 [DEBUG] [Thread-125251] [transport.py] [_log()] kex follows: False
2025-12-31T09:28:02.245 [DEBUG] [Thread-125251] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:28:02.245 [DEBUG] [Thread-125251] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:28:02.245 [DEBUG] [Thread-125251] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:28:02.245 [DEBUG] [Thread-125251] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:28:02.245 [DEBUG] [Thread-125251] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:28:02.245 [DEBUG] [Thread-125251] [transport.py] [_log()] Compression: none
2025-12-31T09:28:02.245 [DEBUG] [Thread-125251] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:28:02.302 [DEBUG] [Thread-125251] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:28:02.303 [DEBUG] [Thread-125251] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:28:02.303 [DEBUG] [Thread-125251] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T09:28:02.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T09:28:02.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:28:02.357 [DEBUG] [Thread-125251] [transport.py] [_log()] userauth is OK
2025-12-31T09:28:02.358 [DEBUG] [Thread-125251] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:28:02.358 [DEBUG] [Thread-125251] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:28:02.358 [DEBUG] [Thread-125251] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T09:28:02.358 [DEBUG] [Thread-125251] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:28:02.377 [INFO] [Thread-125251] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:28:02.378 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T09:28:02.378 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:28:03.232 [DEBUG] [Thread-125251] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:28:03.232 [DEBUG] [Thread-125251] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:28:03.279 [DEBUG] [Thread-125251] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:28:03.279 [DEBUG] [Thread-125251] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:28:03.288 [DEBUG] [Thread-125251] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:28:03.292 [DEBUG] [Thread-125253 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:28:03.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:28:03.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T09:28: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-12-31T09:28:03.317 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:28:03.317 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:28:03.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:28:03.326 [DEBUG] [Thread-125251] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:28:12.150 [DEBUG] [Thread-125254 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:28:16.717 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:28:16.718 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:28:27.201 [DEBUG] [Thread-125255 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:28:33.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T09:28:33.339 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T09:28:33.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T09:28:34.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 9, 28, 24), 32.63, 10.67, 0.0, 9.21, 23.96, 0, 0, 0, 2, 0, 0),)
2025-12-31T09:28:34.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 09:28:24
2025-12-31T09:28:34.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T09:28:34.344 [DEBUG] [Thread-125256] [transport.py] [_log()] starting thread (client mode): 0xb955a260
2025-12-31T09:28:34.345 [DEBUG] [Thread-125256] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:28:34.365 [DEBUG] [Thread-125256] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T09:28:34.365 [INFO] [Thread-125256] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T09:28:34.368 [DEBUG] [Thread-125256] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:28:34.368 [DEBUG] [Thread-125256] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T09:28:34.369 [DEBUG] [Thread-125256] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:28:34.369 [DEBUG] [Thread-125256] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:28:34.369 [DEBUG] [Thread-125256] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:28:34.369 [DEBUG] [Thread-125256] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:28:34.369 [DEBUG] [Thread-125256] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:28:34.369 [DEBUG] [Thread-125256] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:28:34.369 [DEBUG] [Thread-125256] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:28:34.369 [DEBUG] [Thread-125256] [transport.py] [_log()] client lang: <none>
2025-12-31T09:28:34.369 [DEBUG] [Thread-125256] [transport.py] [_log()] server lang: <none>
2025-12-31T09:28:34.369 [DEBUG] [Thread-125256] [transport.py] [_log()] kex follows: False
2025-12-31T09:28:34.369 [DEBUG] [Thread-125256] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:28:34.369 [DEBUG] [Thread-125256] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:28:34.369 [DEBUG] [Thread-125256] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:28:34.369 [DEBUG] [Thread-125256] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:28:34.369 [DEBUG] [Thread-125256] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:28:34.370 [DEBUG] [Thread-125256] [transport.py] [_log()] Compression: none
2025-12-31T09:28:34.370 [DEBUG] [Thread-125256] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:28:34.389 [DEBUG] [Thread-125256] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:28:34.390 [DEBUG] [Thread-125256] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:28:34.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T09:28:34.392 [DEBUG] [Thread-125256] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T09:28:34.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:28:34.394 [DEBUG] [Thread-125256] [transport.py] [_log()] userauth is OK
2025-12-31T09:28:34.394 [DEBUG] [Thread-125256] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:28:34.395 [DEBUG] [Thread-125256] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:28:34.395 [DEBUG] [Thread-125256] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T09:28:34.395 [DEBUG] [Thread-125256] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:28:34.417 [INFO] [Thread-125256] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:28:34.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:28:35.202 [DEBUG] [Thread-125256] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:28:35.202 [DEBUG] [Thread-125256] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:28:35.203 [DEBUG] [Thread-125256] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T09:28:35.243 [DEBUG] [Thread-125256] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:28:35.244 [DEBUG] [Thread-125256] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:28:35.247 [DEBUG] [Thread-125256] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:28:35.259 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:28:35.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T09:28:35.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T09:28:35.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T09:28:35.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:28:35.273 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T09:28:35.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:28:35.273 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:28:35.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T09:28:35.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.310908 -999.00  +23.30  15.50     16   -3.30 1 1 1 1 1   888    0 26.96 85.78 ----- 15.7 15.5 296.7 21.5 30.4 -28.6 29.7 -28.1 27.9 -27.2 28.4 -26.5
2025-12-31T09:28:35.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T09:28:35.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T09:28:35.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.310908
2025-12-31T09:28:35.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T09:28:35.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T09:28:35.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T09:28:35.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T09:28:35.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T09:28:35.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T09:28:24', tmtdew=32.63, humidity=10.67, cloud=0.0, wind=9.21, temperature=23.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T07:27:42.451', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T09:28:35.275 [DEBUG] [Thread-125256] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:28:35.357 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T09:28:35.368 [DEBUG] [Thread-125259] [transport.py] [_log()] starting thread (client mode): 0xb6b2b310
2025-12-31T09:28:35.368 [DEBUG] [Thread-125259] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:28:35.383 [DEBUG] [Thread-125259] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T09:28:35.384 [INFO] [Thread-125259] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T09:28:35.391 [DEBUG] [Thread-125259] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:28:35.392 [DEBUG] [Thread-125259] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T09:28:35.392 [DEBUG] [Thread-125259] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:28:35.392 [DEBUG] [Thread-125259] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:28:35.392 [DEBUG] [Thread-125259] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:28:35.392 [DEBUG] [Thread-125259] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:28:35.392 [DEBUG] [Thread-125259] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:28:35.392 [DEBUG] [Thread-125259] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:28:35.392 [DEBUG] [Thread-125259] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:28:35.393 [DEBUG] [Thread-125259] [transport.py] [_log()] client lang: <none>
2025-12-31T09:28:35.393 [DEBUG] [Thread-125259] [transport.py] [_log()] server lang: <none>
2025-12-31T09:28:35.393 [DEBUG] [Thread-125259] [transport.py] [_log()] kex follows: False
2025-12-31T09:28:35.393 [DEBUG] [Thread-125259] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:28:35.393 [DEBUG] [Thread-125259] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:28:35.393 [DEBUG] [Thread-125259] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:28:35.393 [DEBUG] [Thread-125259] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:28:35.393 [DEBUG] [Thread-125259] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:28:35.394 [DEBUG] [Thread-125259] [transport.py] [_log()] Compression: none
2025-12-31T09:28:35.394 [DEBUG] [Thread-125259] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:28:35.453 [DEBUG] [Thread-125259] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:28:35.453 [DEBUG] [Thread-125259] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:28:35.454 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T09:28:35.455 [DEBUG] [Thread-125259] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T09:28:35.455 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:28:35.510 [DEBUG] [Thread-125259] [transport.py] [_log()] userauth is OK
2025-12-31T09:28:35.510 [DEBUG] [Thread-125259] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:28:35.510 [DEBUG] [Thread-125259] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:28:35.511 [DEBUG] [Thread-125259] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T09:28:35.511 [DEBUG] [Thread-125259] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:28:35.533 [INFO] [Thread-125259] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:28:35.534 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T09:28:35.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:28:36.386 [DEBUG] [Thread-125259] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:28:36.387 [DEBUG] [Thread-125259] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:28:36.435 [DEBUG] [Thread-125259] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:28:36.436 [DEBUG] [Thread-125259] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:28:36.445 [DEBUG] [Thread-125259] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:28:36.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:28:36.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T09:28:36.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T09:28:36.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:28:36.472 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:28:36.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:28:36.480 [DEBUG] [Thread-125259] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:28:42.238 [DEBUG] [Thread-125261 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:28:57.289 [DEBUG] [Thread-125262 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:29:03.337 [DEBUG] [Thread-125263 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:29:06.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T09:29:06.503 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T09:29:06.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T09:29:07.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 9, 28, 56), 32.61, 10.65, 0.0, 11.13, 23.68, 0, 0, 0, 2, 0, 0),)
2025-12-31T09:29:07.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 09:28:56
2025-12-31T09:29:07.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T09:29:07.489 [DEBUG] [Thread-125264] [transport.py] [_log()] starting thread (client mode): 0xb6be7be0
2025-12-31T09:29:07.490 [DEBUG] [Thread-125264] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:29:07.511 [DEBUG] [Thread-125264] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T09:29:07.512 [INFO] [Thread-125264] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T09:29:07.514 [DEBUG] [Thread-125264] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:29:07.514 [DEBUG] [Thread-125264] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T09:29:07.514 [DEBUG] [Thread-125264] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:29:07.514 [DEBUG] [Thread-125264] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:29:07.514 [DEBUG] [Thread-125264] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:29:07.514 [DEBUG] [Thread-125264] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:29:07.514 [DEBUG] [Thread-125264] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:29:07.514 [DEBUG] [Thread-125264] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:29:07.515 [DEBUG] [Thread-125264] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:29:07.515 [DEBUG] [Thread-125264] [transport.py] [_log()] client lang: <none>
2025-12-31T09:29:07.515 [DEBUG] [Thread-125264] [transport.py] [_log()] server lang: <none>
2025-12-31T09:29:07.515 [DEBUG] [Thread-125264] [transport.py] [_log()] kex follows: False
2025-12-31T09:29:07.515 [DEBUG] [Thread-125264] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:29:07.515 [DEBUG] [Thread-125264] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:29:07.515 [DEBUG] [Thread-125264] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:29:07.515 [DEBUG] [Thread-125264] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:29:07.515 [DEBUG] [Thread-125264] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:29:07.515 [DEBUG] [Thread-125264] [transport.py] [_log()] Compression: none
2025-12-31T09:29:07.515 [DEBUG] [Thread-125264] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:29:07.532 [DEBUG] [Thread-125264] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:29:07.533 [DEBUG] [Thread-125264] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:29:07.533 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T09:29:07.534 [DEBUG] [Thread-125264] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T09:29:07.535 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:29:07.536 [DEBUG] [Thread-125264] [transport.py] [_log()] userauth is OK
2025-12-31T09:29:07.536 [DEBUG] [Thread-125264] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:29:07.536 [DEBUG] [Thread-125264] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:29:07.536 [DEBUG] [Thread-125264] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T09:29:07.536 [DEBUG] [Thread-125264] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:29:07.562 [INFO] [Thread-125264] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:29:07.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:29:08.198 [DEBUG] [Thread-125264] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:29:08.198 [DEBUG] [Thread-125264] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:29:08.198 [DEBUG] [Thread-125264] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T09:29:08.239 [DEBUG] [Thread-125264] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:29:08.239 [DEBUG] [Thread-125264] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:29:08.242 [DEBUG] [Thread-125264] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:29:08.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:29:08.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T09:29:08.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T09:29:08.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T09:29:08.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:29:08.263 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T09:29:08.264 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:29:08.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:29:08.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T09:29:08.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.311255 -999.00  +23.20  15.90     16   -3.60 1 1 1 1 1   888    0 27.81 88.08 ----- 14.4 15.9 311.6 17.2 30.5 -28.4 29.8 -27.5 27.9 -27.5 28.4 -26.6
2025-12-31T09:29:08.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T09:29:08.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T09:29:08.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.311255
2025-12-31T09:29:08.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T09:29:08.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T09:29:08.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T09:29:08.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T09:29:08.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T09:29:08.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T09:28:56', tmtdew=32.61, humidity=10.65, cloud=0.0, wind=11.13, temperature=23.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T07:28:12.432', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T09:29:08.266 [DEBUG] [Thread-125264] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:29:08.349 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T09:29:08.359 [DEBUG] [Thread-125267] [transport.py] [_log()] starting thread (client mode): 0xb6b4bd90
2025-12-31T09:29:08.359 [DEBUG] [Thread-125267] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:29:08.374 [DEBUG] [Thread-125267] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T09:29:08.375 [INFO] [Thread-125267] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T09:29:08.382 [DEBUG] [Thread-125267] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:29:08.382 [DEBUG] [Thread-125267] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T09:29:08.382 [DEBUG] [Thread-125267] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:29:08.383 [DEBUG] [Thread-125267] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:29:08.383 [DEBUG] [Thread-125267] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:29:08.383 [DEBUG] [Thread-125267] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:29:08.383 [DEBUG] [Thread-125267] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:29:08.383 [DEBUG] [Thread-125267] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:29:08.383 [DEBUG] [Thread-125267] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:29:08.383 [DEBUG] [Thread-125267] [transport.py] [_log()] client lang: <none>
2025-12-31T09:29:08.383 [DEBUG] [Thread-125267] [transport.py] [_log()] server lang: <none>
2025-12-31T09:29:08.383 [DEBUG] [Thread-125267] [transport.py] [_log()] kex follows: False
2025-12-31T09:29:08.383 [DEBUG] [Thread-125267] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:29:08.384 [DEBUG] [Thread-125267] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:29:08.384 [DEBUG] [Thread-125267] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:29:08.384 [DEBUG] [Thread-125267] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:29:08.384 [DEBUG] [Thread-125267] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:29:08.384 [DEBUG] [Thread-125267] [transport.py] [_log()] Compression: none
2025-12-31T09:29:08.384 [DEBUG] [Thread-125267] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:29:08.446 [DEBUG] [Thread-125267] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:29:08.447 [DEBUG] [Thread-125267] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:29:08.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T09:29:08.448 [DEBUG] [Thread-125267] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T09:29:08.448 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:29:08.507 [DEBUG] [Thread-125267] [transport.py] [_log()] userauth is OK
2025-12-31T09:29:08.507 [DEBUG] [Thread-125267] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:29:08.507 [DEBUG] [Thread-125267] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:29:08.507 [DEBUG] [Thread-125267] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T09:29:08.507 [DEBUG] [Thread-125267] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:29:08.529 [INFO] [Thread-125267] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:29:08.529 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T09:29:08.530 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:29:09.382 [DEBUG] [Thread-125267] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:29:09.382 [DEBUG] [Thread-125267] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:29:09.433 [DEBUG] [Thread-125267] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:29:09.433 [DEBUG] [Thread-125267] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:29:09.442 [DEBUG] [Thread-125267] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:29:09.452 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:29:09.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T09:29:09.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T09:29:09.471 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:29:09.471 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:29:09.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:29:09.479 [DEBUG] [Thread-125267] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:29:12.322 [DEBUG] [Thread-125269 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:29:16.858 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:29:16.859 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:29:27.371 [DEBUG] [Thread-125270 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:29:39.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T09:29:39.501 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T09:29:39.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T09:29:40.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 9, 29, 28), 32.32, 10.9, 0.0, 7.59, 23.74, 0, 0, 0, 2, 0, 0),)
2025-12-31T09:29:40.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 09:29:28
2025-12-31T09:29:40.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T09:29:40.523 [DEBUG] [Thread-125271] [transport.py] [_log()] starting thread (client mode): 0xb6b482e0
2025-12-31T09:29:40.523 [DEBUG] [Thread-125271] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:29:40.542 [DEBUG] [Thread-125271] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T09:29:40.542 [INFO] [Thread-125271] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T09:29:40.545 [DEBUG] [Thread-125271] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:29:40.545 [DEBUG] [Thread-125271] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T09:29:40.545 [DEBUG] [Thread-125271] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:29:40.545 [DEBUG] [Thread-125271] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:29:40.545 [DEBUG] [Thread-125271] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:29:40.545 [DEBUG] [Thread-125271] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:29:40.545 [DEBUG] [Thread-125271] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:29:40.545 [DEBUG] [Thread-125271] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:29:40.545 [DEBUG] [Thread-125271] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:29:40.545 [DEBUG] [Thread-125271] [transport.py] [_log()] client lang: <none>
2025-12-31T09:29:40.545 [DEBUG] [Thread-125271] [transport.py] [_log()] server lang: <none>
2025-12-31T09:29:40.545 [DEBUG] [Thread-125271] [transport.py] [_log()] kex follows: False
2025-12-31T09:29:40.545 [DEBUG] [Thread-125271] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:29:40.545 [DEBUG] [Thread-125271] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:29:40.545 [DEBUG] [Thread-125271] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:29:40.545 [DEBUG] [Thread-125271] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:29:40.545 [DEBUG] [Thread-125271] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:29:40.545 [DEBUG] [Thread-125271] [transport.py] [_log()] Compression: none
2025-12-31T09:29:40.545 [DEBUG] [Thread-125271] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:29:40.561 [DEBUG] [Thread-125271] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:29:40.561 [DEBUG] [Thread-125271] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:29:40.561 [DEBUG] [Thread-125271] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T09:29:40.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T09:29:40.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:29:40.562 [DEBUG] [Thread-125271] [transport.py] [_log()] userauth is OK
2025-12-31T09:29:40.562 [DEBUG] [Thread-125271] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:29:40.562 [DEBUG] [Thread-125271] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:29:40.562 [DEBUG] [Thread-125271] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T09:29:40.562 [DEBUG] [Thread-125271] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:29:40.578 [INFO] [Thread-125271] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:29:40.578 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:29:41.271 [DEBUG] [Thread-125271] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:29:41.271 [DEBUG] [Thread-125271] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:29:41.272 [DEBUG] [Thread-125271] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T09:29:41.312 [DEBUG] [Thread-125271] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:29:41.313 [DEBUG] [Thread-125271] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:29:41.315 [DEBUG] [Thread-125271] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:29:41.326 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:29:41.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T09:29:41.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T09:29:41.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T09:29:41.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:29:41.335 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T09:29:41.335 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:29:41.335 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:29:41.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T09:29:41.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.311950 -999.00  +23.00   6.11     16   -3.50 1 1 1 1 1   888    0 27.82 94.56 ----- 6.4 6.1 308.4 7.2 30.7 -28.5 30.0 -28.7 28.1 -25.8 28.6 -26.7
2025-12-31T09:29:41.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T09:29:41.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T09:29:41.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.311950
2025-12-31T09:29:41.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T09:29:41.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T09:29:41.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T09:29:41.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T09:29:41.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T09:29:41.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T09:29:28', tmtdew=32.32, humidity=10.9, cloud=0.0, wind=7.59, temperature=23.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T07:29:12.480', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T09:29:41.336 [DEBUG] [Thread-125271] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:29:41.410 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T09:29:41.421 [DEBUG] [Thread-125274] [transport.py] [_log()] starting thread (client mode): 0xb6b198a0
2025-12-31T09:29:41.421 [DEBUG] [Thread-125274] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:29:41.436 [DEBUG] [Thread-125274] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T09:29:41.436 [INFO] [Thread-125274] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T09:29:41.444 [DEBUG] [Thread-125274] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:29:41.444 [DEBUG] [Thread-125274] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T09:29:41.444 [DEBUG] [Thread-125274] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:29:41.444 [DEBUG] [Thread-125274] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:29:41.444 [DEBUG] [Thread-125274] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:29:41.444 [DEBUG] [Thread-125274] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:29:41.444 [DEBUG] [Thread-125274] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:29:41.444 [DEBUG] [Thread-125274] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:29:41.444 [DEBUG] [Thread-125274] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:29:41.444 [DEBUG] [Thread-125274] [transport.py] [_log()] client lang: <none>
2025-12-31T09:29:41.444 [DEBUG] [Thread-125274] [transport.py] [_log()] server lang: <none>
2025-12-31T09:29:41.444 [DEBUG] [Thread-125274] [transport.py] [_log()] kex follows: False
2025-12-31T09:29:41.444 [DEBUG] [Thread-125274] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:29:41.444 [DEBUG] [Thread-125274] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:29:41.444 [DEBUG] [Thread-125274] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:29:41.444 [DEBUG] [Thread-125274] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:29:41.444 [DEBUG] [Thread-125274] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:29:41.444 [DEBUG] [Thread-125274] [transport.py] [_log()] Compression: none
2025-12-31T09:29:41.444 [DEBUG] [Thread-125274] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:29:41.503 [DEBUG] [Thread-125274] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:29:41.503 [DEBUG] [Thread-125274] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:29:41.503 [DEBUG] [Thread-125274] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T09:29:41.503 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T09:29:41.503 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:29:41.559 [DEBUG] [Thread-125274] [transport.py] [_log()] userauth is OK
2025-12-31T09:29:41.559 [DEBUG] [Thread-125274] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:29:41.559 [DEBUG] [Thread-125274] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:29:41.559 [DEBUG] [Thread-125274] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T09:29:41.559 [DEBUG] [Thread-125274] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:29:41.573 [INFO] [Thread-125274] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:29:41.573 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T09:29:41.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:29:42.402 [DEBUG] [Thread-125276 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:29:42.412 [DEBUG] [Thread-125274] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:29:42.412 [DEBUG] [Thread-125274] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:29:42.459 [DEBUG] [Thread-125274] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:29:42.459 [DEBUG] [Thread-125274] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:29:42.467 [DEBUG] [Thread-125274] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:29:42.475 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:29:42.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T09:29:42.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T09:29:42.491 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:29:42.491 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:29:42.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:29:42.499 [DEBUG] [Thread-125274] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:29:57.446 [DEBUG] [Thread-125277 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:30:03.386 [DEBUG] [Thread-125278 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:30:12.474 [DEBUG] [Thread-125279 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:30:12.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T09:30:12.511 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T09:30:12.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T09:30:13.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 9, 30), 32.51, 10.77, 0.0, 11.19, 23.69, 0, 0, 0, 2, 0, 0),)
2025-12-31T09:30:13.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 09:30:00
2025-12-31T09:30:13.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T09:30:13.551 [DEBUG] [Thread-125280] [transport.py] [_log()] starting thread (client mode): 0xb6b4ba30
2025-12-31T09:30:13.551 [DEBUG] [Thread-125280] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:30:13.572 [DEBUG] [Thread-125280] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T09:30:13.572 [INFO] [Thread-125280] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T09:30:13.576 [DEBUG] [Thread-125280] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:30:13.577 [DEBUG] [Thread-125280] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T09:30:13.577 [DEBUG] [Thread-125280] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:30:13.577 [DEBUG] [Thread-125280] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:30:13.577 [DEBUG] [Thread-125280] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:30:13.577 [DEBUG] [Thread-125280] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:30:13.577 [DEBUG] [Thread-125280] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:30:13.577 [DEBUG] [Thread-125280] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:30:13.577 [DEBUG] [Thread-125280] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:30:13.577 [DEBUG] [Thread-125280] [transport.py] [_log()] client lang: <none>
2025-12-31T09:30:13.577 [DEBUG] [Thread-125280] [transport.py] [_log()] server lang: <none>
2025-12-31T09:30:13.577 [DEBUG] [Thread-125280] [transport.py] [_log()] kex follows: False
2025-12-31T09:30:13.577 [DEBUG] [Thread-125280] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:30:13.577 [DEBUG] [Thread-125280] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:30:13.577 [DEBUG] [Thread-125280] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:30:13.577 [DEBUG] [Thread-125280] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:30:13.577 [DEBUG] [Thread-125280] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:30:13.577 [DEBUG] [Thread-125280] [transport.py] [_log()] Compression: none
2025-12-31T09:30:13.577 [DEBUG] [Thread-125280] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:30:13.594 [DEBUG] [Thread-125280] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:30:13.594 [DEBUG] [Thread-125280] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:30:13.594 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T09:30:13.594 [DEBUG] [Thread-125280] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T09:30:13.595 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:30:13.596 [DEBUG] [Thread-125280] [transport.py] [_log()] userauth is OK
2025-12-31T09:30:13.596 [DEBUG] [Thread-125280] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:30:13.596 [DEBUG] [Thread-125280] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:30:13.596 [DEBUG] [Thread-125280] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T09:30:13.596 [DEBUG] [Thread-125280] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:30:13.620 [INFO] [Thread-125280] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:30:13.621 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:30:15.661 [DEBUG] [Thread-125280] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:30:15.661 [DEBUG] [Thread-125280] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:30:15.661 [DEBUG] [Thread-125280] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T09:30:15.703 [DEBUG] [Thread-125280] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:30:15.703 [DEBUG] [Thread-125280] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:30:15.705 [DEBUG] [Thread-125280] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:30:15.716 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:30:15.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T09:30:15.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T09:30:15.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T09:30:15.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:30:15.722 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T09:30:15.722 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:30:15.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:30:15.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T09:30:15.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.312297 -999.00  +23.20  11.28     16   -3.60 1 1 1 1 1   888    0 28.44 101.89 ----- 13.5 11.3 273.9 14.5 30.7 -29.2 30.0 -27.7 28.2 -26.1 28.6 -26.4
2025-12-31T09:30:15.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T09:30:15.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T09:30:15.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.312297
2025-12-31T09:30:15.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T09:30:15.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T09:30:15.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T09:30:15.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T09:30:15.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T09:30:15.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T09:30:00', tmtdew=32.51, humidity=10.77, cloud=0.0, wind=11.19, temperature=23.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T07:29:42.461', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T09:30:15.723 [DEBUG] [Thread-125280] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:30:15.798 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T09:30:17.003 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:30:17.004 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:30:27.504 [DEBUG] [Thread-125283 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:30:42.548 [DEBUG] [Thread-125284 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:30:57.581 [DEBUG] [Thread-125285 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:31:03.438 [DEBUG] [Thread-125286 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:31:12.613 [DEBUG] [Thread-125287 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:31:17.142 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:31:17.144 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:31:27.652 [DEBUG] [Thread-125288 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:31:42.682 [DEBUG] [Thread-125289 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:31:57.721 [DEBUG] [Thread-125290 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:32:03.491 [DEBUG] [Thread-125291 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:32:12.757 [DEBUG] [Thread-125292 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:32:17.284 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:32:17.285 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:32:27.221 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-12-31T09:32:27.790 [DEBUG] [Thread-125293 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:32:42.823 [DEBUG] [Thread-125294 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:32:57.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T09:32:57.252 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T09:32:57.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T09:32:57.851 [DEBUG] [Thread-125295 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:32:58.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 9, 32, 41), 33.28, 9.95, 0.0, 14.42, 23.84, 0, 0, 0, 2, 0, 0),)
2025-12-31T09:32:58.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 09:32:41
2025-12-31T09:32:58.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T09:32:58.296 [DEBUG] [Thread-125296] [transport.py] [_log()] starting thread (client mode): 0xb95d71c0
2025-12-31T09:32:58.296 [DEBUG] [Thread-125296] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:32:58.316 [DEBUG] [Thread-125296] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T09:32:58.316 [INFO] [Thread-125296] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T09:32:58.319 [DEBUG] [Thread-125296] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:32:58.319 [DEBUG] [Thread-125296] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T09:32:58.319 [DEBUG] [Thread-125296] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:32:58.319 [DEBUG] [Thread-125296] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:32:58.319 [DEBUG] [Thread-125296] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:32:58.319 [DEBUG] [Thread-125296] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:32:58.319 [DEBUG] [Thread-125296] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:32:58.319 [DEBUG] [Thread-125296] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:32:58.319 [DEBUG] [Thread-125296] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:32:58.319 [DEBUG] [Thread-125296] [transport.py] [_log()] client lang: <none>
2025-12-31T09:32:58.319 [DEBUG] [Thread-125296] [transport.py] [_log()] server lang: <none>
2025-12-31T09:32:58.319 [DEBUG] [Thread-125296] [transport.py] [_log()] kex follows: False
2025-12-31T09:32:58.319 [DEBUG] [Thread-125296] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:32:58.319 [DEBUG] [Thread-125296] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:32:58.319 [DEBUG] [Thread-125296] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:32:58.320 [DEBUG] [Thread-125296] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:32:58.320 [DEBUG] [Thread-125296] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:32:58.320 [DEBUG] [Thread-125296] [transport.py] [_log()] Compression: none
2025-12-31T09:32:58.320 [DEBUG] [Thread-125296] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:32:58.327 [DEBUG] [Thread-125296] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:32:58.327 [DEBUG] [Thread-125296] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:32:58.328 [DEBUG] [Thread-125296] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T09:32:58.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T09:32:58.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:32:58.329 [DEBUG] [Thread-125296] [transport.py] [_log()] userauth is OK
2025-12-31T09:32:58.329 [DEBUG] [Thread-125296] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:32:58.329 [DEBUG] [Thread-125296] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:32:58.329 [DEBUG] [Thread-125296] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T09:32:58.329 [DEBUG] [Thread-125296] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:32:58.338 [INFO] [Thread-125296] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:32:58.338 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:32:58.994 [DEBUG] [Thread-125296] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:32:58.994 [DEBUG] [Thread-125296] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:32:58.995 [DEBUG] [Thread-125296] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T09:32:59.035 [DEBUG] [Thread-125296] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:32:59.035 [DEBUG] [Thread-125296] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:32:59.038 [DEBUG] [Thread-125296] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:32:59.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:32:59.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T09:32:59.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T09:32:59.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T09:32:59.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:32:59.063 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T09:32:59.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:32:59.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:32:59.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T09:32:59.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.314033 -999.00  +23.20  16.11     15   -4.20 1 1 1 1 1   888    0 30.02 147.50 ----- 17.4 16.1 282.8 24.1 30.3 -28.8 29.8 -28.6 27.7 -29.9 28.4 -27.2
2025-12-31T09:32:59.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T09:32:59.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T09:32:59.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.314033
2025-12-31T09:32:59.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T09:32:59.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T09:32:59.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T09:32:59.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T09:32:59.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T09:32:59.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T09:32:41', tmtdew=33.28, humidity=9.95, cloud=0.0, wind=14.42, temperature=23.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T07:32:12.451', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T09:32:59.066 [DEBUG] [Thread-125296] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:32:59.149 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T09:32:59.162 [DEBUG] [Thread-125299] [transport.py] [_log()] starting thread (client mode): 0xb6b4a1d0
2025-12-31T09:32:59.163 [DEBUG] [Thread-125299] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:32:59.176 [DEBUG] [Thread-125299] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T09:32:59.176 [INFO] [Thread-125299] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T09:32:59.184 [DEBUG] [Thread-125299] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:32:59.185 [DEBUG] [Thread-125299] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T09:32:59.185 [DEBUG] [Thread-125299] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:32:59.185 [DEBUG] [Thread-125299] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:32:59.185 [DEBUG] [Thread-125299] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:32:59.185 [DEBUG] [Thread-125299] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:32:59.185 [DEBUG] [Thread-125299] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:32:59.185 [DEBUG] [Thread-125299] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:32:59.185 [DEBUG] [Thread-125299] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:32:59.185 [DEBUG] [Thread-125299] [transport.py] [_log()] client lang: <none>
2025-12-31T09:32:59.186 [DEBUG] [Thread-125299] [transport.py] [_log()] server lang: <none>
2025-12-31T09:32:59.186 [DEBUG] [Thread-125299] [transport.py] [_log()] kex follows: False
2025-12-31T09:32:59.186 [DEBUG] [Thread-125299] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:32:59.186 [DEBUG] [Thread-125299] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:32:59.186 [DEBUG] [Thread-125299] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:32:59.186 [DEBUG] [Thread-125299] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:32:59.186 [DEBUG] [Thread-125299] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:32:59.187 [DEBUG] [Thread-125299] [transport.py] [_log()] Compression: none
2025-12-31T09:32:59.187 [DEBUG] [Thread-125299] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:32:59.243 [DEBUG] [Thread-125299] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:32:59.244 [DEBUG] [Thread-125299] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:32:59.244 [DEBUG] [Thread-125299] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T09:32:59.245 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T09:32:59.245 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:32:59.299 [DEBUG] [Thread-125299] [transport.py] [_log()] userauth is OK
2025-12-31T09:32:59.299 [DEBUG] [Thread-125299] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:32:59.300 [DEBUG] [Thread-125299] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:32:59.300 [DEBUG] [Thread-125299] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T09:32:59.300 [DEBUG] [Thread-125299] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:32:59.318 [INFO] [Thread-125299] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:32:59.319 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T09:32:59.319 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:33:00.148 [DEBUG] [Thread-125299] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:33:00.149 [DEBUG] [Thread-125299] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:33:00.198 [DEBUG] [Thread-125299] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:33:00.199 [DEBUG] [Thread-125299] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:33:00.208 [DEBUG] [Thread-125299] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:33:00.217 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:33:00.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-12-31T09:33:00.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T09:33:00.236 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:33:00.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:33:00.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:33:00.245 [DEBUG] [Thread-125299] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:33:03.547 [DEBUG] [Thread-125301 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:33:12.886 [DEBUG] [Thread-125302 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:33:17.423 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:33:17.424 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:33:27.940 [DEBUG] [Thread-125303 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:33:30.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T09:33:30.268 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T09:33:30.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T09:33:30.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 9, 33, 14), 34.05, 9.44, 0.0, 16.48, 24.12, 0, 0, 0, 2, 0, 0),)
2025-12-31T09:33:30.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 09:33:14
2025-12-31T09:33:31.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T09:33:31.275 [DEBUG] [Thread-125304] [transport.py] [_log()] starting thread (client mode): 0xb955a620
2025-12-31T09:33:31.276 [DEBUG] [Thread-125304] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:33:31.297 [DEBUG] [Thread-125304] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T09:33:31.298 [INFO] [Thread-125304] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T09:33:31.300 [DEBUG] [Thread-125304] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:33:31.301 [DEBUG] [Thread-125304] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T09:33:31.301 [DEBUG] [Thread-125304] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:33:31.301 [DEBUG] [Thread-125304] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:33:31.301 [DEBUG] [Thread-125304] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:33:31.301 [DEBUG] [Thread-125304] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:33:31.301 [DEBUG] [Thread-125304] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:33:31.301 [DEBUG] [Thread-125304] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:33:31.301 [DEBUG] [Thread-125304] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:33:31.301 [DEBUG] [Thread-125304] [transport.py] [_log()] client lang: <none>
2025-12-31T09:33:31.301 [DEBUG] [Thread-125304] [transport.py] [_log()] server lang: <none>
2025-12-31T09:33:31.301 [DEBUG] [Thread-125304] [transport.py] [_log()] kex follows: False
2025-12-31T09:33:31.301 [DEBUG] [Thread-125304] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:33:31.302 [DEBUG] [Thread-125304] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:33:31.302 [DEBUG] [Thread-125304] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:33:31.302 [DEBUG] [Thread-125304] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:33:31.302 [DEBUG] [Thread-125304] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:33:31.302 [DEBUG] [Thread-125304] [transport.py] [_log()] Compression: none
2025-12-31T09:33:31.302 [DEBUG] [Thread-125304] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:33:31.311 [DEBUG] [Thread-125304] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:33:31.312 [DEBUG] [Thread-125304] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:33:31.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T09:33:31.313 [DEBUG] [Thread-125304] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T09:33:31.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:33:31.315 [DEBUG] [Thread-125304] [transport.py] [_log()] userauth is OK
2025-12-31T09:33:31.315 [DEBUG] [Thread-125304] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:33:31.315 [DEBUG] [Thread-125304] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:33:31.315 [DEBUG] [Thread-125304] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T09:33:31.315 [DEBUG] [Thread-125304] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:33:31.340 [INFO] [Thread-125304] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:33:31.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:33:31.938 [DEBUG] [Thread-125304] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:33:31.938 [DEBUG] [Thread-125304] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:33:31.939 [DEBUG] [Thread-125304] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T09:33:31.979 [DEBUG] [Thread-125304] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:33:31.979 [DEBUG] [Thread-125304] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:33:31.982 [DEBUG] [Thread-125304] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:33:31.996 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:33:31.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T09:33:31.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T09:33:32.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T09:33:32.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:33:32.007 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T09:33:32.007 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:33:32.007 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:33:32.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T09:33:32.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.314727 -999.00  +23.30  18.74     15   -4.20 1 1 1 1 1   888    0 30.43 160.10 ----- 17.8 18.7 277.8 21.7 30.2 -28.6 29.7 -27.9 27.6 -26.2 28.3 -26.9
2025-12-31T09:33:32.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T09:33:32.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T09:33:32.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.314727
2025-12-31T09:33:32.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T09:33:32.009 [DEBUG] [Thread-125304] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:33:32.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T09:33:32.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T09:33:32.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T09:33:32.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T09:33:32.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T09:33:14', tmtdew=34.05, humidity=9.44, cloud=0.0, wind=16.48, temperature=24.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T07:33:12.413', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T09:33:32.095 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T09:33:32.106 [DEBUG] [Thread-125307] [transport.py] [_log()] starting thread (client mode): 0xb95d7b50
2025-12-31T09:33:32.106 [DEBUG] [Thread-125307] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:33:32.120 [DEBUG] [Thread-125307] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T09:33:32.120 [INFO] [Thread-125307] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T09:33:32.127 [DEBUG] [Thread-125307] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:33:32.127 [DEBUG] [Thread-125307] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T09:33:32.127 [DEBUG] [Thread-125307] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:33:32.127 [DEBUG] [Thread-125307] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:33:32.127 [DEBUG] [Thread-125307] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:33:32.127 [DEBUG] [Thread-125307] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:33:32.127 [DEBUG] [Thread-125307] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:33:32.127 [DEBUG] [Thread-125307] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:33:32.127 [DEBUG] [Thread-125307] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:33:32.127 [DEBUG] [Thread-125307] [transport.py] [_log()] client lang: <none>
2025-12-31T09:33:32.127 [DEBUG] [Thread-125307] [transport.py] [_log()] server lang: <none>
2025-12-31T09:33:32.127 [DEBUG] [Thread-125307] [transport.py] [_log()] kex follows: False
2025-12-31T09:33:32.127 [DEBUG] [Thread-125307] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:33:32.127 [DEBUG] [Thread-125307] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:33:32.128 [DEBUG] [Thread-125307] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:33:32.128 [DEBUG] [Thread-125307] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:33:32.128 [DEBUG] [Thread-125307] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:33:32.128 [DEBUG] [Thread-125307] [transport.py] [_log()] Compression: none
2025-12-31T09:33:32.128 [DEBUG] [Thread-125307] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:33:32.185 [DEBUG] [Thread-125307] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:33:32.185 [DEBUG] [Thread-125307] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:33:32.185 [DEBUG] [Thread-125307] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T09:33:32.185 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T09:33:32.186 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:33:32.242 [DEBUG] [Thread-125307] [transport.py] [_log()] userauth is OK
2025-12-31T09:33:32.242 [DEBUG] [Thread-125307] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:33:32.242 [DEBUG] [Thread-125307] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:33:32.242 [DEBUG] [Thread-125307] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T09:33:32.242 [DEBUG] [Thread-125307] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:33:32.256 [INFO] [Thread-125307] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:33:32.256 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T09:33:32.256 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:33:33.108 [DEBUG] [Thread-125307] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:33:33.108 [DEBUG] [Thread-125307] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:33:33.156 [DEBUG] [Thread-125307] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:33:33.156 [DEBUG] [Thread-125307] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:33:33.164 [DEBUG] [Thread-125307] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:33:33.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:33:33.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T09:33:33.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T09:33:33.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:33:33.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:33:33.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:33:33.195 [DEBUG] [Thread-125307] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:33:42.971 [DEBUG] [Thread-125309 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:33:58.017 [DEBUG] [Thread-125310 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:34:03.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T09:34:03.218 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T09:34:03.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T09:34:03.593 [DEBUG] [Thread-125311 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:34:03.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 9, 33, 46), 33.79, 9.67, 0.0, 16.57, 24.14, 0, 0, 0, 2, 0, 0),)
2025-12-31T09:34:03.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 09:33:46
2025-12-31T09:34:04.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T09:34:04.210 [DEBUG] [Thread-125312] [transport.py] [_log()] starting thread (client mode): 0xb6b4bf70
2025-12-31T09:34:04.210 [DEBUG] [Thread-125312] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:34:04.231 [DEBUG] [Thread-125312] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T09:34:04.231 [INFO] [Thread-125312] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T09:34:04.234 [DEBUG] [Thread-125312] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:34:04.234 [DEBUG] [Thread-125312] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T09:34:04.234 [DEBUG] [Thread-125312] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:34:04.234 [DEBUG] [Thread-125312] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:34:04.234 [DEBUG] [Thread-125312] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:34:04.234 [DEBUG] [Thread-125312] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:34:04.234 [DEBUG] [Thread-125312] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:34:04.235 [DEBUG] [Thread-125312] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:34:04.235 [DEBUG] [Thread-125312] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:34:04.235 [DEBUG] [Thread-125312] [transport.py] [_log()] client lang: <none>
2025-12-31T09:34:04.235 [DEBUG] [Thread-125312] [transport.py] [_log()] server lang: <none>
2025-12-31T09:34:04.235 [DEBUG] [Thread-125312] [transport.py] [_log()] kex follows: False
2025-12-31T09:34:04.235 [DEBUG] [Thread-125312] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:34:04.235 [DEBUG] [Thread-125312] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:34:04.235 [DEBUG] [Thread-125312] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:34:04.235 [DEBUG] [Thread-125312] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:34:04.235 [DEBUG] [Thread-125312] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:34:04.235 [DEBUG] [Thread-125312] [transport.py] [_log()] Compression: none
2025-12-31T09:34:04.235 [DEBUG] [Thread-125312] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:34:04.251 [DEBUG] [Thread-125312] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:34:04.252 [DEBUG] [Thread-125312] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:34:04.252 [DEBUG] [Thread-125312] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T09:34:04.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T09:34:04.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:34:04.254 [DEBUG] [Thread-125312] [transport.py] [_log()] userauth is OK
2025-12-31T09:34:04.255 [DEBUG] [Thread-125312] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:34:04.255 [DEBUG] [Thread-125312] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:34:04.255 [DEBUG] [Thread-125312] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T09:34:04.255 [DEBUG] [Thread-125312] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:34:04.279 [INFO] [Thread-125312] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:34:04.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:34:04.950 [DEBUG] [Thread-125312] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:34:04.951 [DEBUG] [Thread-125312] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:34:04.951 [DEBUG] [Thread-125312] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T09:34:04.991 [DEBUG] [Thread-125312] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:34:04.991 [DEBUG] [Thread-125312] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:34:04.994 [DEBUG] [Thread-125312] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:34:05.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:34:05.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T09:34:05.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T09:34:05.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T09:34:05.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:34:05.020 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T09:34:05.020 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:34:05.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:34:05.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T09:34:05.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.315075 -999.00  +23.40  21.54     14   -5.00 1 1 1 1 1   888    0 30.48 160.43 ----- 19.0 21.5 281.4 23.9 30.1 -29.5 29.7 -28.3 27.7 -25.6 28.3 -26.7
2025-12-31T09:34:05.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T09:34:05.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T09:34:05.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.315075
2025-12-31T09:34:05.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T09:34:05.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T09:34:05.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T09:34:05.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T09:34:05.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T09:34:05.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T09:33:46', tmtdew=33.79, humidity=9.67, cloud=0.0, wind=16.57, temperature=24.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T07:33:42.480', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T09:34:05.023 [DEBUG] [Thread-125312] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:34:05.106 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T09:34:05.118 [DEBUG] [Thread-125315] [transport.py] [_log()] starting thread (client mode): 0xb95d4e50
2025-12-31T09:34:05.118 [DEBUG] [Thread-125315] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:34:05.134 [DEBUG] [Thread-125315] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T09:34:05.135 [INFO] [Thread-125315] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T09:34:05.144 [DEBUG] [Thread-125315] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:34:05.144 [DEBUG] [Thread-125315] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T09:34:05.144 [DEBUG] [Thread-125315] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:34:05.144 [DEBUG] [Thread-125315] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:34:05.144 [DEBUG] [Thread-125315] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:34:05.145 [DEBUG] [Thread-125315] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:34:05.145 [DEBUG] [Thread-125315] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:34:05.145 [DEBUG] [Thread-125315] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:34:05.145 [DEBUG] [Thread-125315] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:34:05.145 [DEBUG] [Thread-125315] [transport.py] [_log()] client lang: <none>
2025-12-31T09:34:05.145 [DEBUG] [Thread-125315] [transport.py] [_log()] server lang: <none>
2025-12-31T09:34:05.145 [DEBUG] [Thread-125315] [transport.py] [_log()] kex follows: False
2025-12-31T09:34:05.145 [DEBUG] [Thread-125315] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:34:05.145 [DEBUG] [Thread-125315] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:34:05.146 [DEBUG] [Thread-125315] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:34:05.146 [DEBUG] [Thread-125315] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:34:05.146 [DEBUG] [Thread-125315] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:34:05.146 [DEBUG] [Thread-125315] [transport.py] [_log()] Compression: none
2025-12-31T09:34:05.146 [DEBUG] [Thread-125315] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:34:05.205 [DEBUG] [Thread-125315] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:34:05.205 [DEBUG] [Thread-125315] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:34:05.206 [DEBUG] [Thread-125315] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T09:34:05.206 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T09:34:05.207 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:34:05.263 [DEBUG] [Thread-125315] [transport.py] [_log()] userauth is OK
2025-12-31T09:34:05.263 [DEBUG] [Thread-125315] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:34:05.264 [DEBUG] [Thread-125315] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:34:05.264 [DEBUG] [Thread-125315] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T09:34:05.264 [DEBUG] [Thread-125315] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:34:05.281 [INFO] [Thread-125315] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:34:05.282 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T09:34:05.282 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:34:06.102 [DEBUG] [Thread-125315] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:34:06.102 [DEBUG] [Thread-125315] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:34:06.150 [DEBUG] [Thread-125315] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:34:06.150 [DEBUG] [Thread-125315] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:34:06.160 [DEBUG] [Thread-125315] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:34:06.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:34:06.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T09:34:06.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T09:34:06.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:34:06.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:34:06.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:34:06.199 [DEBUG] [Thread-125315] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:34:13.052 [DEBUG] [Thread-125317 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:34:17.566 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:34:17.567 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:34:28.091 [DEBUG] [Thread-125318 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:34:36.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T09:34:36.223 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T09:34:36.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T09:34:36.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 9, 34, 18), 34.36, 9.27, 0.0, 18.95, 24.17, 0, 0, 0, 2, 0, 0),)
2025-12-31T09:34:36.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 09:34:18
2025-12-31T09:34:37.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T09:34:37.213 [DEBUG] [Thread-125319] [transport.py] [_log()] starting thread (client mode): 0xb6b4aef0
2025-12-31T09:34:37.214 [DEBUG] [Thread-125319] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:34:37.233 [DEBUG] [Thread-125319] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T09:34:37.233 [INFO] [Thread-125319] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T09:34:37.236 [DEBUG] [Thread-125319] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:34:37.237 [DEBUG] [Thread-125319] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T09:34:37.237 [DEBUG] [Thread-125319] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:34:37.237 [DEBUG] [Thread-125319] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:34:37.237 [DEBUG] [Thread-125319] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:34:37.237 [DEBUG] [Thread-125319] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:34:37.237 [DEBUG] [Thread-125319] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:34:37.237 [DEBUG] [Thread-125319] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:34:37.237 [DEBUG] [Thread-125319] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:34:37.237 [DEBUG] [Thread-125319] [transport.py] [_log()] client lang: <none>
2025-12-31T09:34:37.237 [DEBUG] [Thread-125319] [transport.py] [_log()] server lang: <none>
2025-12-31T09:34:37.237 [DEBUG] [Thread-125319] [transport.py] [_log()] kex follows: False
2025-12-31T09:34:37.237 [DEBUG] [Thread-125319] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:34:37.237 [DEBUG] [Thread-125319] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:34:37.237 [DEBUG] [Thread-125319] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:34:37.238 [DEBUG] [Thread-125319] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:34:37.238 [DEBUG] [Thread-125319] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:34:37.238 [DEBUG] [Thread-125319] [transport.py] [_log()] Compression: none
2025-12-31T09:34:37.238 [DEBUG] [Thread-125319] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:34:37.257 [DEBUG] [Thread-125319] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:34:37.258 [DEBUG] [Thread-125319] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:34:37.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T09:34:37.259 [DEBUG] [Thread-125319] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T09:34:37.260 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:34:37.260 [DEBUG] [Thread-125319] [transport.py] [_log()] userauth is OK
2025-12-31T09:34:37.261 [DEBUG] [Thread-125319] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:34:37.261 [DEBUG] [Thread-125319] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:34:37.261 [DEBUG] [Thread-125319] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T09:34:37.261 [DEBUG] [Thread-125319] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:34:37.283 [INFO] [Thread-125319] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:34:37.283 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:34:37.949 [DEBUG] [Thread-125319] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:34:37.949 [DEBUG] [Thread-125319] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:34:37.949 [DEBUG] [Thread-125319] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T09:34:37.990 [DEBUG] [Thread-125319] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:34:37.990 [DEBUG] [Thread-125319] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:34:37.994 [DEBUG] [Thread-125319] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:34:38.004 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:34:38.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T09:34:38.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T09:34:38.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T09:34:38.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:34:38.015 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T09:34:38.015 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:34:38.015 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:34:38.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T09:34:38.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.315422 -999.00  +23.60  12.42     15   -4.30 1 1 1 1 1   888    0 30.72 169.03 ----- 11.9 12.4 296.8 17.9 30.4 -27.9 29.8 -27.3 27.6 -27.0 28.4 -26.0
2025-12-31T09:34:38.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T09:34:38.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T09:34:38.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.315422
2025-12-31T09:34:38.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T09:34:38.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T09:34:38.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T09:34:38.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T09:34:38.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T09:34:38.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T09:34:18', tmtdew=34.36, humidity=9.27, cloud=0.0, wind=18.95, temperature=24.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T07:34:12.461', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T09:34:38.018 [DEBUG] [Thread-125319] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:34:38.099 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T09:34:38.111 [DEBUG] [Thread-125322] [transport.py] [_log()] starting thread (client mode): 0xb6b4bf10
2025-12-31T09:34:38.111 [DEBUG] [Thread-125322] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:34:38.125 [DEBUG] [Thread-125322] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T09:34:38.125 [INFO] [Thread-125322] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T09:34:38.132 [DEBUG] [Thread-125322] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:34:38.133 [DEBUG] [Thread-125322] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T09:34:38.133 [DEBUG] [Thread-125322] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:34:38.133 [DEBUG] [Thread-125322] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:34:38.133 [DEBUG] [Thread-125322] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:34:38.133 [DEBUG] [Thread-125322] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:34:38.133 [DEBUG] [Thread-125322] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:34:38.133 [DEBUG] [Thread-125322] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:34:38.133 [DEBUG] [Thread-125322] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:34:38.133 [DEBUG] [Thread-125322] [transport.py] [_log()] client lang: <none>
2025-12-31T09:34:38.133 [DEBUG] [Thread-125322] [transport.py] [_log()] server lang: <none>
2025-12-31T09:34:38.133 [DEBUG] [Thread-125322] [transport.py] [_log()] kex follows: False
2025-12-31T09:34:38.134 [DEBUG] [Thread-125322] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:34:38.134 [DEBUG] [Thread-125322] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:34:38.134 [DEBUG] [Thread-125322] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:34:38.134 [DEBUG] [Thread-125322] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:34:38.134 [DEBUG] [Thread-125322] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:34:38.134 [DEBUG] [Thread-125322] [transport.py] [_log()] Compression: none
2025-12-31T09:34:38.134 [DEBUG] [Thread-125322] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:34:38.192 [DEBUG] [Thread-125322] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:34:38.192 [DEBUG] [Thread-125322] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:34:38.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T09:34:38.193 [DEBUG] [Thread-125322] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T09:34:38.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:34:38.248 [DEBUG] [Thread-125322] [transport.py] [_log()] userauth is OK
2025-12-31T09:34:38.248 [DEBUG] [Thread-125322] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:34:38.248 [DEBUG] [Thread-125322] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:34:38.248 [DEBUG] [Thread-125322] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T09:34:38.248 [DEBUG] [Thread-125322] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:34:38.268 [INFO] [Thread-125322] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:34: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-12-31T09:34:38.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:34:39.093 [DEBUG] [Thread-125322] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:34:39.094 [DEBUG] [Thread-125322] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:34:39.142 [DEBUG] [Thread-125322] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:34:39.142 [DEBUG] [Thread-125322] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:34:39.151 [DEBUG] [Thread-125322] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:34:39.159 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:34: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')
2025-12-31T09:34:39.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T09:34:39.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:34:39.178 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:34:39.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:34:39.187 [DEBUG] [Thread-125322] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:34:43.128 [DEBUG] [Thread-125324 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:34:58.184 [DEBUG] [Thread-125325 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:35:03.644 [DEBUG] [Thread-125326 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:35:09.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T09:35:09.210 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T09:35:09.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T09:35:09.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 9, 34, 50), 34.41, 9.34, 0.0, 12.0, 24.14, 0, 0, 0, 2, 0, 0),)
2025-12-31T09:35:09.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 09:34:50
2025-12-31T09:35:10.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T09:35:10.188 [DEBUG] [Thread-125327] [transport.py] [_log()] starting thread (client mode): 0xb957b250
2025-12-31T09:35:10.188 [DEBUG] [Thread-125327] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:35:10.206 [DEBUG] [Thread-125327] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T09:35:10.207 [INFO] [Thread-125327] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T09:35:10.210 [DEBUG] [Thread-125327] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:35:10.210 [DEBUG] [Thread-125327] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T09:35:10.210 [DEBUG] [Thread-125327] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:35:10.210 [DEBUG] [Thread-125327] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:35:10.210 [DEBUG] [Thread-125327] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:35:10.210 [DEBUG] [Thread-125327] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:35:10.210 [DEBUG] [Thread-125327] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:35:10.210 [DEBUG] [Thread-125327] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:35:10.210 [DEBUG] [Thread-125327] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:35:10.210 [DEBUG] [Thread-125327] [transport.py] [_log()] client lang: <none>
2025-12-31T09:35:10.210 [DEBUG] [Thread-125327] [transport.py] [_log()] server lang: <none>
2025-12-31T09:35:10.211 [DEBUG] [Thread-125327] [transport.py] [_log()] kex follows: False
2025-12-31T09:35:10.211 [DEBUG] [Thread-125327] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:35:10.211 [DEBUG] [Thread-125327] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:35:10.211 [DEBUG] [Thread-125327] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:35:10.211 [DEBUG] [Thread-125327] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:35:10.211 [DEBUG] [Thread-125327] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:35:10.211 [DEBUG] [Thread-125327] [transport.py] [_log()] Compression: none
2025-12-31T09:35:10.211 [DEBUG] [Thread-125327] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:35:10.226 [DEBUG] [Thread-125327] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:35:10.227 [DEBUG] [Thread-125327] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:35:10.228 [DEBUG] [Thread-125327] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T09:35:10.228 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T09:35:10.229 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:35:10.230 [DEBUG] [Thread-125327] [transport.py] [_log()] userauth is OK
2025-12-31T09:35:10.230 [DEBUG] [Thread-125327] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:35:10.231 [DEBUG] [Thread-125327] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:35:10.231 [DEBUG] [Thread-125327] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T09:35:10.231 [DEBUG] [Thread-125327] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:35:10.249 [INFO] [Thread-125327] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:35:10.249 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:35:13.221 [DEBUG] [Thread-125329 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:35:14.955 [DEBUG] [Thread-125327] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:35:14.955 [DEBUG] [Thread-125327] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:35:14.955 [DEBUG] [Thread-125327] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T09:35:14.996 [DEBUG] [Thread-125327] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:35:14.996 [DEBUG] [Thread-125327] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:35:15.000 [DEBUG] [Thread-125327] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:35:15.140 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:35:15.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T09:35:15.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T09:35:15.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T09:35:15.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:35:15.163 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T09:35:15.164 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:35:15.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:35:15.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T09:35:15.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.315769 -999.00  +23.60  10.57     15   -4.50 1 1 1 1 1   888    0 31.12 174.14 ----- 10.5 10.6 304.6 17.8 30.4 -27.9 29.8 -27.2 27.9 -26.0 28.4 -26.3
2025-12-31T09:35:15.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T09:35:15.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T09:35:15.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.315769
2025-12-31T09:35:15.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T09:35:15.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T09:35:15.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T09:35:15.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T09:35:15.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T09:35:15.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T09:34:50', tmtdew=34.41, humidity=9.34, cloud=0.0, wind=12.0, temperature=24.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T07:34:42.442', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T09:35:15.167 [DEBUG] [Thread-125327] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:35:15.254 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T09:35:15.268 [DEBUG] [Thread-125331] [transport.py] [_log()] starting thread (client mode): 0xb6bb17b0
2025-12-31T09:35:15.269 [DEBUG] [Thread-125331] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:35:15.283 [DEBUG] [Thread-125331] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T09:35:15.283 [INFO] [Thread-125331] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T09:35:15.291 [DEBUG] [Thread-125331] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:35:15.291 [DEBUG] [Thread-125331] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T09:35:15.291 [DEBUG] [Thread-125331] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:35:15.291 [DEBUG] [Thread-125331] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:35:15.291 [DEBUG] [Thread-125331] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:35:15.291 [DEBUG] [Thread-125331] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:35:15.291 [DEBUG] [Thread-125331] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:35:15.291 [DEBUG] [Thread-125331] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:35:15.291 [DEBUG] [Thread-125331] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:35:15.291 [DEBUG] [Thread-125331] [transport.py] [_log()] client lang: <none>
2025-12-31T09:35:15.291 [DEBUG] [Thread-125331] [transport.py] [_log()] server lang: <none>
2025-12-31T09:35:15.291 [DEBUG] [Thread-125331] [transport.py] [_log()] kex follows: False
2025-12-31T09:35:15.291 [DEBUG] [Thread-125331] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:35:15.291 [DEBUG] [Thread-125331] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:35:15.291 [DEBUG] [Thread-125331] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:35:15.292 [DEBUG] [Thread-125331] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:35:15.292 [DEBUG] [Thread-125331] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:35:15.292 [DEBUG] [Thread-125331] [transport.py] [_log()] Compression: none
2025-12-31T09:35:15.292 [DEBUG] [Thread-125331] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:35:15.348 [DEBUG] [Thread-125331] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:35:15.349 [DEBUG] [Thread-125331] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:35:15.349 [DEBUG] [Thread-125331] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T09:35:15.350 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T09:35:15.350 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:35:15.404 [DEBUG] [Thread-125331] [transport.py] [_log()] userauth is OK
2025-12-31T09:35:15.404 [DEBUG] [Thread-125331] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:35:15.404 [DEBUG] [Thread-125331] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:35:15.405 [DEBUG] [Thread-125331] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T09:35:15.405 [DEBUG] [Thread-125331] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:35:15.422 [INFO] [Thread-125331] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:35:15.422 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T09:35:15.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:35:16.232 [DEBUG] [Thread-125331] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:35:16.232 [DEBUG] [Thread-125331] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:35:16.282 [DEBUG] [Thread-125331] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:35:16.282 [DEBUG] [Thread-125331] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:35:16.291 [DEBUG] [Thread-125331] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:35:16.300 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:35:16.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T09:35:16.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T09:35:16.319 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:35:16.319 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:35:16.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:35:16.328 [DEBUG] [Thread-125331] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:35:17.707 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:35:17.709 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:35:28.258 [DEBUG] [Thread-125333 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:35:43.305 [DEBUG] [Thread-125334 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:35:46.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T09:35:46.350 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T09:35:46.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T09:35:47.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 9, 35, 22), 34.53, 9.26, 0.0, 12.17, 24.14, 0, 0, 0, 2, 0, 0),)
2025-12-31T09:35:47.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 09:35:22
2025-12-31T09:35:47.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T09:35:47.337 [DEBUG] [Thread-125335] [transport.py] [_log()] starting thread (client mode): 0xb95d41c0
2025-12-31T09:35:47.337 [DEBUG] [Thread-125335] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:35:47.357 [DEBUG] [Thread-125335] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T09:35:47.357 [INFO] [Thread-125335] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T09:35:47.360 [DEBUG] [Thread-125335] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:35:47.360 [DEBUG] [Thread-125335] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T09:35:47.361 [DEBUG] [Thread-125335] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:35:47.361 [DEBUG] [Thread-125335] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:35:47.361 [DEBUG] [Thread-125335] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:35:47.361 [DEBUG] [Thread-125335] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:35:47.361 [DEBUG] [Thread-125335] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:35:47.361 [DEBUG] [Thread-125335] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:35:47.361 [DEBUG] [Thread-125335] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:35:47.361 [DEBUG] [Thread-125335] [transport.py] [_log()] client lang: <none>
2025-12-31T09:35:47.361 [DEBUG] [Thread-125335] [transport.py] [_log()] server lang: <none>
2025-12-31T09:35:47.361 [DEBUG] [Thread-125335] [transport.py] [_log()] kex follows: False
2025-12-31T09:35:47.361 [DEBUG] [Thread-125335] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:35:47.361 [DEBUG] [Thread-125335] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:35:47.361 [DEBUG] [Thread-125335] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:35:47.361 [DEBUG] [Thread-125335] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:35:47.361 [DEBUG] [Thread-125335] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:35:47.361 [DEBUG] [Thread-125335] [transport.py] [_log()] Compression: none
2025-12-31T09:35:47.361 [DEBUG] [Thread-125335] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:35:47.378 [DEBUG] [Thread-125335] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:35:47.378 [DEBUG] [Thread-125335] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:35:47.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T09:35:47.379 [DEBUG] [Thread-125335] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T09:35:47.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:35:47.381 [DEBUG] [Thread-125335] [transport.py] [_log()] userauth is OK
2025-12-31T09:35:47.381 [DEBUG] [Thread-125335] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:35:47.381 [DEBUG] [Thread-125335] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:35:47.381 [DEBUG] [Thread-125335] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T09:35:47.381 [DEBUG] [Thread-125335] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:35:47.404 [INFO] [Thread-125335] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:35:47.405 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:35:48.044 [DEBUG] [Thread-125335] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:35:48.044 [DEBUG] [Thread-125335] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:35:48.044 [DEBUG] [Thread-125335] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T09:35:48.085 [DEBUG] [Thread-125335] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:35:48.086 [DEBUG] [Thread-125335] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:35:48.088 [DEBUG] [Thread-125335] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:35:48.100 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:35:48.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T09:35:48.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T09:35:48.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T09:35:48.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:35:48.109 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T09:35:48.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:35:48.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:35:48.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T09:35:48.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.316116 -999.00  +23.60  14.12     15   -4.30 1 1 1 1 1   888    0 31.26 189.73 ----- 13.4 14.1 264.0 16.7 30.4 -29.7 29.9 -28.2 28.1 -25.3 28.4 -27.0
2025-12-31T09:35:48.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T09:35:48.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T09:35:48.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.316116
2025-12-31T09:35:48.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T09:35:48.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T09:35:48.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T09:35:48.111 [DEBUG] [Thread-125335] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:35:48.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T09:35:48.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T09:35:48.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T09:35:22', tmtdew=34.53, humidity=9.26, cloud=0.0, wind=12.17, temperature=24.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T07:35:12.422', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T09:35:48.205 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T09:35:48.216 [DEBUG] [Thread-125338] [transport.py] [_log()] starting thread (client mode): 0xb95d57b0
2025-12-31T09:35:48.216 [DEBUG] [Thread-125338] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:35:48.231 [DEBUG] [Thread-125338] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T09:35:48.231 [INFO] [Thread-125338] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T09:35:48.238 [DEBUG] [Thread-125338] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:35:48.238 [DEBUG] [Thread-125338] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T09:35:48.238 [DEBUG] [Thread-125338] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:35:48.238 [DEBUG] [Thread-125338] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:35:48.238 [DEBUG] [Thread-125338] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:35:48.238 [DEBUG] [Thread-125338] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:35:48.238 [DEBUG] [Thread-125338] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:35:48.238 [DEBUG] [Thread-125338] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:35:48.239 [DEBUG] [Thread-125338] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:35:48.239 [DEBUG] [Thread-125338] [transport.py] [_log()] client lang: <none>
2025-12-31T09:35:48.239 [DEBUG] [Thread-125338] [transport.py] [_log()] server lang: <none>
2025-12-31T09:35:48.239 [DEBUG] [Thread-125338] [transport.py] [_log()] kex follows: False
2025-12-31T09:35:48.239 [DEBUG] [Thread-125338] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:35:48.239 [DEBUG] [Thread-125338] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:35:48.239 [DEBUG] [Thread-125338] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:35:48.239 [DEBUG] [Thread-125338] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:35:48.239 [DEBUG] [Thread-125338] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:35:48.239 [DEBUG] [Thread-125338] [transport.py] [_log()] Compression: none
2025-12-31T09:35:48.239 [DEBUG] [Thread-125338] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:35:48.296 [DEBUG] [Thread-125338] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:35:48.297 [DEBUG] [Thread-125338] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:35:48.297 [DEBUG] [Thread-125338] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T09:35:48.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T09:35:48.298 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:35:48.352 [DEBUG] [Thread-125338] [transport.py] [_log()] userauth is OK
2025-12-31T09:35:48.352 [DEBUG] [Thread-125338] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:35:48.352 [DEBUG] [Thread-125338] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:35:48.352 [DEBUG] [Thread-125338] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T09:35:48.352 [DEBUG] [Thread-125338] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:35:48.374 [INFO] [Thread-125338] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:35:48.374 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T09:35:48.375 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:35:49.187 [DEBUG] [Thread-125338] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:35:49.187 [DEBUG] [Thread-125338] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:35:49.235 [DEBUG] [Thread-125338] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:35:49.235 [DEBUG] [Thread-125338] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:35:49.243 [DEBUG] [Thread-125338] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:35:49.252 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:35:49.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T09:35:49.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T09:35:49.268 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:35:49.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:35:49.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:35:49.277 [DEBUG] [Thread-125338] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:35:58.337 [DEBUG] [Thread-125340 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:36:03.675 [DEBUG] [Thread-125341 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:36:13.386 [DEBUG] [Thread-125342 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:36:17.848 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:36:17.849 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:36:19.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T09:36:19.300 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T09:36:19.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T09:36:20.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 9, 35, 54), 34.73, 9.02, 0.0, 15.14, 24.22, 0, 0, 0, 2, 0, 0),)
2025-12-31T09:36:20.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 09:35:54
2025-12-31T09:36:20.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T09:36:20.295 [DEBUG] [Thread-125343] [transport.py] [_log()] starting thread (client mode): 0xb6b6b970
2025-12-31T09:36:20.295 [DEBUG] [Thread-125343] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:36:20.319 [DEBUG] [Thread-125343] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T09:36:20.319 [INFO] [Thread-125343] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T09:36:20.322 [DEBUG] [Thread-125343] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:36:20.322 [DEBUG] [Thread-125343] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T09:36:20.322 [DEBUG] [Thread-125343] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:36:20.322 [DEBUG] [Thread-125343] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:36:20.322 [DEBUG] [Thread-125343] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:36:20.322 [DEBUG] [Thread-125343] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:36:20.322 [DEBUG] [Thread-125343] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:36:20.322 [DEBUG] [Thread-125343] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:36:20.322 [DEBUG] [Thread-125343] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:36:20.323 [DEBUG] [Thread-125343] [transport.py] [_log()] client lang: <none>
2025-12-31T09:36:20.323 [DEBUG] [Thread-125343] [transport.py] [_log()] server lang: <none>
2025-12-31T09:36:20.323 [DEBUG] [Thread-125343] [transport.py] [_log()] kex follows: False
2025-12-31T09:36:20.323 [DEBUG] [Thread-125343] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:36:20.323 [DEBUG] [Thread-125343] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:36:20.323 [DEBUG] [Thread-125343] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:36:20.323 [DEBUG] [Thread-125343] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:36:20.323 [DEBUG] [Thread-125343] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:36:20.323 [DEBUG] [Thread-125343] [transport.py] [_log()] Compression: none
2025-12-31T09:36:20.323 [DEBUG] [Thread-125343] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:36:20.339 [DEBUG] [Thread-125343] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:36:20.340 [DEBUG] [Thread-125343] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:36:20.340 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T09:36:20.341 [DEBUG] [Thread-125343] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T09:36:20.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:36:20.385 [DEBUG] [Thread-125343] [transport.py] [_log()] userauth is OK
2025-12-31T09:36:20.385 [DEBUG] [Thread-125343] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:36:20.385 [DEBUG] [Thread-125343] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:36:20.385 [DEBUG] [Thread-125343] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T09:36:20.385 [DEBUG] [Thread-125343] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:36:20.423 [INFO] [Thread-125343] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:36:20.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:36:21.222 [DEBUG] [Thread-125343] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:36:21.222 [DEBUG] [Thread-125343] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:36:21.223 [DEBUG] [Thread-125343] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T09:36:21.263 [DEBUG] [Thread-125343] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:36:21.264 [DEBUG] [Thread-125343] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:36:21.267 [DEBUG] [Thread-125343] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:36:21.280 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:36:21.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T09:36:21.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T09:36:21.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T09:36:21.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:36:21.291 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T09:36:21.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:36:21.291 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:36:21.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T09:36:21.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.316463 -999.00  +23.50  13.02     15   -4.50 1 1 1 1 1   888    0 31.32 188.29 ----- 11.4 13.0 274.2 18.6 30.4 -28.7 29.8 -27.2 27.8 -29.3 28.5 -27.0
2025-12-31T09:36:21.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T09:36:21.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T09:36:21.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.316463
2025-12-31T09:36:21.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T09:36:21.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T09:36:21.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T09:36:21.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T09:36:21.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T09:36:21.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T09:35:54', tmtdew=34.73, humidity=9.02, cloud=0.0, wind=15.14, temperature=24.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T07:35:42.403', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T09:36:21.294 [DEBUG] [Thread-125343] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:36:21.376 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T09:36:21.389 [DEBUG] [Thread-125346] [transport.py] [_log()] starting thread (client mode): 0xb6b4ab30
2025-12-31T09:36:21.389 [DEBUG] [Thread-125346] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:36:21.404 [DEBUG] [Thread-125346] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T09:36:21.404 [INFO] [Thread-125346] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T09:36:21.412 [DEBUG] [Thread-125346] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:36:21.412 [DEBUG] [Thread-125346] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T09:36:21.413 [DEBUG] [Thread-125346] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:36:21.413 [DEBUG] [Thread-125346] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:36:21.413 [DEBUG] [Thread-125346] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:36:21.413 [DEBUG] [Thread-125346] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:36:21.413 [DEBUG] [Thread-125346] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:36:21.413 [DEBUG] [Thread-125346] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:36:21.413 [DEBUG] [Thread-125346] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:36:21.413 [DEBUG] [Thread-125346] [transport.py] [_log()] client lang: <none>
2025-12-31T09:36:21.413 [DEBUG] [Thread-125346] [transport.py] [_log()] server lang: <none>
2025-12-31T09:36:21.413 [DEBUG] [Thread-125346] [transport.py] [_log()] kex follows: False
2025-12-31T09:36:21.413 [DEBUG] [Thread-125346] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:36:21.413 [DEBUG] [Thread-125346] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:36:21.413 [DEBUG] [Thread-125346] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:36:21.413 [DEBUG] [Thread-125346] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:36:21.413 [DEBUG] [Thread-125346] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:36:21.413 [DEBUG] [Thread-125346] [transport.py] [_log()] Compression: none
2025-12-31T09:36:21.413 [DEBUG] [Thread-125346] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:36:21.481 [DEBUG] [Thread-125346] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:36:21.482 [DEBUG] [Thread-125346] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:36:21.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T09:36:21.483 [DEBUG] [Thread-125346] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T09:36:21.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:36:21.528 [DEBUG] [Thread-125346] [transport.py] [_log()] userauth is OK
2025-12-31T09:36:21.529 [DEBUG] [Thread-125346] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:36:21.529 [DEBUG] [Thread-125346] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:36:21.529 [DEBUG] [Thread-125346] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T09:36:21.529 [DEBUG] [Thread-125346] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:36:21.553 [INFO] [Thread-125346] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:36:21.554 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T09:36:21.554 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:36:22.339 [DEBUG] [Thread-125346] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:36:22.339 [DEBUG] [Thread-125346] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:36:22.387 [DEBUG] [Thread-125346] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:36:22.387 [DEBUG] [Thread-125346] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:36:22.396 [DEBUG] [Thread-125346] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:36:22.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:36:22.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T09:36:22.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T09:36:22.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:36:22.425 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:36:22.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:36:22.433 [DEBUG] [Thread-125346] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:36:28.415 [DEBUG] [Thread-125348 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:36:43.470 [DEBUG] [Thread-125349 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:36:52.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T09:36:52.456 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T09:36:52.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T09:36:53.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 9, 36, 26), 35.09, 8.79, 0.0, 15.07, 24.17, 0, 0, 0, 2, 0, 0),)
2025-12-31T09:36:53.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 09:36:26
2025-12-31T09:36:53.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T09:36:53.492 [DEBUG] [Thread-125350] [transport.py] [_log()] starting thread (client mode): 0xb6b4ae60
2025-12-31T09:36:53.492 [DEBUG] [Thread-125350] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:36:53.513 [DEBUG] [Thread-125350] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T09:36:53.513 [INFO] [Thread-125350] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T09:36:53.515 [DEBUG] [Thread-125350] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:36:53.515 [DEBUG] [Thread-125350] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T09:36:53.515 [DEBUG] [Thread-125350] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:36:53.515 [DEBUG] [Thread-125350] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:36:53.515 [DEBUG] [Thread-125350] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:36:53.515 [DEBUG] [Thread-125350] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:36:53.515 [DEBUG] [Thread-125350] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:36:53.515 [DEBUG] [Thread-125350] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:36:53.515 [DEBUG] [Thread-125350] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:36:53.515 [DEBUG] [Thread-125350] [transport.py] [_log()] client lang: <none>
2025-12-31T09:36:53.515 [DEBUG] [Thread-125350] [transport.py] [_log()] server lang: <none>
2025-12-31T09:36:53.515 [DEBUG] [Thread-125350] [transport.py] [_log()] kex follows: False
2025-12-31T09:36:53.515 [DEBUG] [Thread-125350] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:36:53.516 [DEBUG] [Thread-125350] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:36:53.516 [DEBUG] [Thread-125350] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:36:53.516 [DEBUG] [Thread-125350] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:36:53.516 [DEBUG] [Thread-125350] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:36:53.516 [DEBUG] [Thread-125350] [transport.py] [_log()] Compression: none
2025-12-31T09:36:53.516 [DEBUG] [Thread-125350] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:36:53.531 [DEBUG] [Thread-125350] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:36:53.531 [DEBUG] [Thread-125350] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:36:53.532 [DEBUG] [Thread-125350] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T09:36:53.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T09:36:53.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:36:53.533 [DEBUG] [Thread-125350] [transport.py] [_log()] userauth is OK
2025-12-31T09:36:53.533 [DEBUG] [Thread-125350] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:36:53.533 [DEBUG] [Thread-125350] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:36:53.533 [DEBUG] [Thread-125350] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T09:36:53.533 [DEBUG] [Thread-125350] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:36:53.551 [INFO] [Thread-125350] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:36:53.551 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:36:54.178 [DEBUG] [Thread-125350] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:36:54.178 [DEBUG] [Thread-125350] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:36:54.178 [DEBUG] [Thread-125350] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T09:36:54.218 [DEBUG] [Thread-125350] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:36:54.218 [DEBUG] [Thread-125350] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:36:54.221 [DEBUG] [Thread-125350] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:36:54.232 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:36:54.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T09:36:54.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T09:36:54.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T09:36:54.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:36:54.238 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T09:36:54.238 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:36:54.238 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:36:54.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T09:36:54.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.316811 -999.00  +23.50   6.16     14   -4.80 1 1 1 1 1   888    0 31.38 178.14 ----- 5.9 6.2 276.4 12.0 30.5 -28.8 30.0 -27.0 27.9 -26.5 28.6 -26.1
2025-12-31T09:36:54.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T09:36:54.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T09:36:54.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.316811
2025-12-31T09:36:54.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T09:36:54.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T09:36:54.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T09:36:54.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T09:36:54.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T09:36:54.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T09:36:26', tmtdew=35.09, humidity=8.79, cloud=0.0, wind=15.07, temperature=24.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T07:36:12.470', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T09:36:54.240 [DEBUG] [Thread-125350] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:36:54.311 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T09:36:54.324 [DEBUG] [Thread-125353] [transport.py] [_log()] starting thread (client mode): 0xb95f3e80
2025-12-31T09:36:54.324 [DEBUG] [Thread-125353] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:36:54.339 [DEBUG] [Thread-125353] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T09:36:54.339 [INFO] [Thread-125353] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T09:36:54.347 [DEBUG] [Thread-125353] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:36:54.347 [DEBUG] [Thread-125353] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T09:36:54.347 [DEBUG] [Thread-125353] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:36:54.347 [DEBUG] [Thread-125353] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:36:54.347 [DEBUG] [Thread-125353] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:36:54.347 [DEBUG] [Thread-125353] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:36:54.347 [DEBUG] [Thread-125353] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:36:54.347 [DEBUG] [Thread-125353] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:36:54.347 [DEBUG] [Thread-125353] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:36:54.347 [DEBUG] [Thread-125353] [transport.py] [_log()] client lang: <none>
2025-12-31T09:36:54.347 [DEBUG] [Thread-125353] [transport.py] [_log()] server lang: <none>
2025-12-31T09:36:54.347 [DEBUG] [Thread-125353] [transport.py] [_log()] kex follows: False
2025-12-31T09:36:54.347 [DEBUG] [Thread-125353] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:36:54.347 [DEBUG] [Thread-125353] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:36:54.347 [DEBUG] [Thread-125353] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:36:54.347 [DEBUG] [Thread-125353] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:36:54.347 [DEBUG] [Thread-125353] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:36:54.347 [DEBUG] [Thread-125353] [transport.py] [_log()] Compression: none
2025-12-31T09:36:54.347 [DEBUG] [Thread-125353] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:36:54.402 [DEBUG] [Thread-125353] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:36:54.403 [DEBUG] [Thread-125353] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:36:54.403 [DEBUG] [Thread-125353] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T09:36:54.403 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T09:36:54.403 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:36:54.461 [DEBUG] [Thread-125353] [transport.py] [_log()] userauth is OK
2025-12-31T09:36:54.461 [DEBUG] [Thread-125353] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:36:54.461 [DEBUG] [Thread-125353] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:36:54.461 [DEBUG] [Thread-125353] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T09:36:54.461 [DEBUG] [Thread-125353] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:36:54.476 [INFO] [Thread-125353] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:36:54.477 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T09:36:54.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:36:55.311 [DEBUG] [Thread-125353] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:36:55.311 [DEBUG] [Thread-125353] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:36:55.358 [DEBUG] [Thread-125353] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:36:55.359 [DEBUG] [Thread-125353] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:36:55.367 [DEBUG] [Thread-125353] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:36:55.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:36:55.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T09:36:55.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T09:36:55.394 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:36:55.394 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:36:55.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:36:55.402 [DEBUG] [Thread-125353] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:36:58.503 [DEBUG] [Thread-125355 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:37:03.728 [DEBUG] [Thread-125356 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:37:13.551 [DEBUG] [Thread-125357 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:37:17.989 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:37:17.990 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:37:25.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T09:37:25.425 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T09:37:25.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T09:37:26.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 9, 36, 58), 34.86, 8.99, 0.0, 12.21, 24.04, 0, 0, 0, 2, 0, 0),)
2025-12-31T09:37:26.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 09:36:58
2025-12-31T09:37:26.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T09:37:26.413 [DEBUG] [Thread-125358] [transport.py] [_log()] starting thread (client mode): 0xb6bb3910
2025-12-31T09:37:26.413 [DEBUG] [Thread-125358] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:37:26.433 [DEBUG] [Thread-125358] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T09:37:26.433 [INFO] [Thread-125358] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T09:37:26.436 [DEBUG] [Thread-125358] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:37:26.436 [DEBUG] [Thread-125358] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T09:37:26.436 [DEBUG] [Thread-125358] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:37:26.436 [DEBUG] [Thread-125358] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:37:26.436 [DEBUG] [Thread-125358] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:37:26.436 [DEBUG] [Thread-125358] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:37:26.436 [DEBUG] [Thread-125358] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:37:26.436 [DEBUG] [Thread-125358] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:37:26.436 [DEBUG] [Thread-125358] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:37:26.436 [DEBUG] [Thread-125358] [transport.py] [_log()] client lang: <none>
2025-12-31T09:37:26.436 [DEBUG] [Thread-125358] [transport.py] [_log()] server lang: <none>
2025-12-31T09:37:26.436 [DEBUG] [Thread-125358] [transport.py] [_log()] kex follows: False
2025-12-31T09:37:26.436 [DEBUG] [Thread-125358] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:37:26.436 [DEBUG] [Thread-125358] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:37:26.436 [DEBUG] [Thread-125358] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:37:26.436 [DEBUG] [Thread-125358] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:37:26.436 [DEBUG] [Thread-125358] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:37:26.436 [DEBUG] [Thread-125358] [transport.py] [_log()] Compression: none
2025-12-31T09:37:26.436 [DEBUG] [Thread-125358] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:37:26.454 [DEBUG] [Thread-125358] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:37:26.454 [DEBUG] [Thread-125358] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:37:26.455 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T09:37:26.455 [DEBUG] [Thread-125358] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T09:37:26.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:37:26.457 [DEBUG] [Thread-125358] [transport.py] [_log()] userauth is OK
2025-12-31T09:37:26.457 [DEBUG] [Thread-125358] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:37:26.457 [DEBUG] [Thread-125358] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:37:26.457 [DEBUG] [Thread-125358] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T09:37:26.458 [DEBUG] [Thread-125358] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:37:26.482 [INFO] [Thread-125358] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:37:26.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:37:27.257 [DEBUG] [Thread-125358] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:37:27.257 [DEBUG] [Thread-125358] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:37:27.258 [DEBUG] [Thread-125358] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T09:37:27.298 [DEBUG] [Thread-125358] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:37:27.299 [DEBUG] [Thread-125358] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:37:27.302 [DEBUG] [Thread-125358] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:37:27.314 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:37:27.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T09:37:27.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T09:37:27.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T09:37:27.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:37:27.325 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T09:37:27.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:37:27.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:37:27.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T09:37:27.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.317158 -999.00  +23.50  10.39     15   -4.40 1 1 1 1 1   888    0 31.21 187.12 ----- 11.0 10.4 280.9 11.4 30.8 -28.2 30.1 -26.9 27.9 -25.3 28.7 -26.0
2025-12-31T09:37:27.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T09:37:27.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T09:37:27.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.317158
2025-12-31T09:37:27.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T09:37:27.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T09:37:27.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T09:37:27.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T09:37:27.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T09:37:27.328 [DEBUG] [Thread-125358] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:37:27.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T09:36:58', tmtdew=34.86, humidity=8.99, cloud=0.0, wind=12.21, temperature=24.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T07:36:42.451', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T09:37:27.411 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T09:37:27.423 [DEBUG] [Thread-125361] [transport.py] [_log()] starting thread (client mode): 0xb6b1ae30
2025-12-31T09:37:27.423 [DEBUG] [Thread-125361] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:37:27.438 [DEBUG] [Thread-125361] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T09:37:27.438 [INFO] [Thread-125361] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T09:37:27.445 [DEBUG] [Thread-125361] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:37:27.446 [DEBUG] [Thread-125361] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T09:37:27.446 [DEBUG] [Thread-125361] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:37:27.446 [DEBUG] [Thread-125361] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:37:27.446 [DEBUG] [Thread-125361] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:37:27.446 [DEBUG] [Thread-125361] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:37:27.446 [DEBUG] [Thread-125361] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:37:27.446 [DEBUG] [Thread-125361] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:37:27.446 [DEBUG] [Thread-125361] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:37:27.446 [DEBUG] [Thread-125361] [transport.py] [_log()] client lang: <none>
2025-12-31T09:37:27.446 [DEBUG] [Thread-125361] [transport.py] [_log()] server lang: <none>
2025-12-31T09:37:27.446 [DEBUG] [Thread-125361] [transport.py] [_log()] kex follows: False
2025-12-31T09:37:27.446 [DEBUG] [Thread-125361] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:37:27.446 [DEBUG] [Thread-125361] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:37:27.446 [DEBUG] [Thread-125361] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:37:27.446 [DEBUG] [Thread-125361] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:37:27.446 [DEBUG] [Thread-125361] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:37:27.446 [DEBUG] [Thread-125361] [transport.py] [_log()] Compression: none
2025-12-31T09:37:27.446 [DEBUG] [Thread-125361] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:37:27.508 [DEBUG] [Thread-125361] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:37:27.508 [DEBUG] [Thread-125361] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:37:27.509 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T09:37:27.509 [DEBUG] [Thread-125361] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T09:37:27.510 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:37:27.564 [DEBUG] [Thread-125361] [transport.py] [_log()] userauth is OK
2025-12-31T09:37:27.564 [DEBUG] [Thread-125361] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:37:27.565 [DEBUG] [Thread-125361] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:37:27.565 [DEBUG] [Thread-125361] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T09:37:27.565 [DEBUG] [Thread-125361] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:37:27.593 [INFO] [Thread-125361] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:37:27.594 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T09:37:27.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:37:28.458 [DEBUG] [Thread-125361] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:37:28.458 [DEBUG] [Thread-125361] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:37:28.505 [DEBUG] [Thread-125361] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:37:28.505 [DEBUG] [Thread-125361] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:37:28.514 [DEBUG] [Thread-125361] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:37:28.522 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:37:28.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T09:37:28.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T09:37:28.542 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:37:28.543 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:37:28.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:37:28.553 [DEBUG] [Thread-125361] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:37:28.584 [DEBUG] [Thread-125363 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:37:43.628 [DEBUG] [Thread-125364 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:37:58.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T09:37:58.555 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T09:37: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-12-31T09:37:58.662 [DEBUG] [Thread-125365 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:37:59.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 9, 37, 30), 34.57, 9.17, 0.0, 10.31, 23.99, 0, 0, 0, 2, 0, 0),)
2025-12-31T09:37:59.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 09:37:30
2025-12-31T09:37:59.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T09:37:59.564 [DEBUG] [Thread-125366] [transport.py] [_log()] starting thread (client mode): 0xb6b1a110
2025-12-31T09:37:59.564 [DEBUG] [Thread-125366] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:37:59.586 [DEBUG] [Thread-125366] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T09:37:59.586 [INFO] [Thread-125366] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T09:37:59.590 [DEBUG] [Thread-125366] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:37:59.590 [DEBUG] [Thread-125366] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T09:37:59.590 [DEBUG] [Thread-125366] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:37:59.590 [DEBUG] [Thread-125366] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:37:59.591 [DEBUG] [Thread-125366] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:37:59.591 [DEBUG] [Thread-125366] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:37:59.591 [DEBUG] [Thread-125366] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:37:59.591 [DEBUG] [Thread-125366] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:37:59.591 [DEBUG] [Thread-125366] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:37:59.591 [DEBUG] [Thread-125366] [transport.py] [_log()] client lang: <none>
2025-12-31T09:37:59.591 [DEBUG] [Thread-125366] [transport.py] [_log()] server lang: <none>
2025-12-31T09:37:59.591 [DEBUG] [Thread-125366] [transport.py] [_log()] kex follows: False
2025-12-31T09:37:59.591 [DEBUG] [Thread-125366] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:37:59.591 [DEBUG] [Thread-125366] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:37:59.591 [DEBUG] [Thread-125366] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:37:59.591 [DEBUG] [Thread-125366] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:37:59.591 [DEBUG] [Thread-125366] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:37:59.591 [DEBUG] [Thread-125366] [transport.py] [_log()] Compression: none
2025-12-31T09:37:59.592 [DEBUG] [Thread-125366] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:37:59.608 [DEBUG] [Thread-125366] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:37:59.609 [DEBUG] [Thread-125366] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:37:59.609 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T09:37:59.610 [DEBUG] [Thread-125366] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T09:37:59.611 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:37:59.612 [DEBUG] [Thread-125366] [transport.py] [_log()] userauth is OK
2025-12-31T09:37:59.612 [DEBUG] [Thread-125366] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:37:59.612 [DEBUG] [Thread-125366] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:37:59.612 [DEBUG] [Thread-125366] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T09:37:59.612 [DEBUG] [Thread-125366] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:37:59.647 [INFO] [Thread-125366] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:37:59.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:38:00.290 [DEBUG] [Thread-125366] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:38:00.290 [DEBUG] [Thread-125366] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:38:00.290 [DEBUG] [Thread-125366] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T09:38:00.330 [DEBUG] [Thread-125366] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:38:00.331 [DEBUG] [Thread-125366] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:38:00.333 [DEBUG] [Thread-125366] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:38:00.348 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:38:00.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T09:38:00.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T09:38:00.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T09:38:00.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:38:00.355 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T09:38:00.355 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:38:00.355 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:38:00.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T09:38:00.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.317852 -999.00  +23.50   8.42     14   -4.90 1 1 1 1 1   888    0 31.34 172.82 ----- 9.1 8.4 321.4 13.6 30.9 -27.4 30.2 -27.6 28.2 -25.5 28.9 -25.8
2025-12-31T09:38:00.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T09:38:00.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T09:38:00.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.317852
2025-12-31T09:38:00.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T09:38:00.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T09:38:00.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T09:38:00.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T09:38:00.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T09:38:00.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T09:37:30', tmtdew=34.57, humidity=9.17, cloud=0.0, wind=10.31, temperature=23.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T07:37:42.413', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T09:38:00.357 [DEBUG] [Thread-125366] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:38:00.440 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T09:38:00.454 [DEBUG] [Thread-125369] [transport.py] [_log()] starting thread (client mode): 0xb6b6b4f0
2025-12-31T09:38:00.454 [DEBUG] [Thread-125369] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:38:00.470 [DEBUG] [Thread-125369] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T09:38:00.470 [INFO] [Thread-125369] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T09:38:00.478 [DEBUG] [Thread-125369] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:38:00.478 [DEBUG] [Thread-125369] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T09:38:00.478 [DEBUG] [Thread-125369] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:38:00.478 [DEBUG] [Thread-125369] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:38:00.478 [DEBUG] [Thread-125369] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:38:00.478 [DEBUG] [Thread-125369] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:38:00.478 [DEBUG] [Thread-125369] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:38:00.478 [DEBUG] [Thread-125369] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:38:00.478 [DEBUG] [Thread-125369] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:38:00.479 [DEBUG] [Thread-125369] [transport.py] [_log()] client lang: <none>
2025-12-31T09:38:00.479 [DEBUG] [Thread-125369] [transport.py] [_log()] server lang: <none>
2025-12-31T09:38:00.479 [DEBUG] [Thread-125369] [transport.py] [_log()] kex follows: False
2025-12-31T09:38:00.479 [DEBUG] [Thread-125369] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:38:00.479 [DEBUG] [Thread-125369] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:38:00.479 [DEBUG] [Thread-125369] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:38:00.479 [DEBUG] [Thread-125369] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:38:00.479 [DEBUG] [Thread-125369] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:38:00.479 [DEBUG] [Thread-125369] [transport.py] [_log()] Compression: none
2025-12-31T09:38:00.479 [DEBUG] [Thread-125369] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:38:00.540 [DEBUG] [Thread-125369] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:38:00.540 [DEBUG] [Thread-125369] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:38:00.541 [DEBUG] [Thread-125369] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T09:38:00.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T09:38:00.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:38:00.596 [DEBUG] [Thread-125369] [transport.py] [_log()] userauth is OK
2025-12-31T09:38:00.596 [DEBUG] [Thread-125369] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:38:00.597 [DEBUG] [Thread-125369] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:38:00.597 [DEBUG] [Thread-125369] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T09:38:00.597 [DEBUG] [Thread-125369] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:38:00.619 [INFO] [Thread-125369] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:38:00.619 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T09:38:00.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:38:01.432 [DEBUG] [Thread-125369] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:38:01.432 [DEBUG] [Thread-125369] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:38:01.480 [DEBUG] [Thread-125369] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:38:01.480 [DEBUG] [Thread-125369] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:38:01.490 [DEBUG] [Thread-125369] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:38:01.505 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:38:01.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T09:38:01.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T09:38:01.523 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:38:01.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:38:01.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:38:01.531 [DEBUG] [Thread-125369] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:38:03.777 [DEBUG] [Thread-125371 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:38:13.692 [DEBUG] [Thread-125372 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:38:18.130 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:38:18.131 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:38:28.744 [DEBUG] [Thread-125373 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:38:31.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T09:38:31.555 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T09:38:31.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T09:38:32.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 9, 38, 2), 34.44, 9.26, 0.0, 9.85, 23.99, 0, 0, 0, 2, 0, 0),)
2025-12-31T09:38:32.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 09:38:02
2025-12-31T09:38:32.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T09:38:32.545 [DEBUG] [Thread-125374] [transport.py] [_log()] starting thread (client mode): 0xb6b4a980
2025-12-31T09:38:32.546 [DEBUG] [Thread-125374] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:38:32.565 [DEBUG] [Thread-125374] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T09:38:32.565 [INFO] [Thread-125374] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T09:38:32.568 [DEBUG] [Thread-125374] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:38:32.568 [DEBUG] [Thread-125374] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T09:38:32.568 [DEBUG] [Thread-125374] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:38:32.568 [DEBUG] [Thread-125374] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:38:32.568 [DEBUG] [Thread-125374] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:38:32.568 [DEBUG] [Thread-125374] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:38:32.568 [DEBUG] [Thread-125374] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:38:32.568 [DEBUG] [Thread-125374] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:38:32.568 [DEBUG] [Thread-125374] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:38:32.568 [DEBUG] [Thread-125374] [transport.py] [_log()] client lang: <none>
2025-12-31T09:38:32.569 [DEBUG] [Thread-125374] [transport.py] [_log()] server lang: <none>
2025-12-31T09:38:32.569 [DEBUG] [Thread-125374] [transport.py] [_log()] kex follows: False
2025-12-31T09:38:32.569 [DEBUG] [Thread-125374] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:38:32.569 [DEBUG] [Thread-125374] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:38:32.569 [DEBUG] [Thread-125374] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:38:32.569 [DEBUG] [Thread-125374] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:38:32.569 [DEBUG] [Thread-125374] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:38:32.569 [DEBUG] [Thread-125374] [transport.py] [_log()] Compression: none
2025-12-31T09:38:32.569 [DEBUG] [Thread-125374] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:38:32.585 [DEBUG] [Thread-125374] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:38:32.585 [DEBUG] [Thread-125374] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:38:32.586 [DEBUG] [Thread-125374] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T09:38:32.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T09:38:32.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:38:32.588 [DEBUG] [Thread-125374] [transport.py] [_log()] userauth is OK
2025-12-31T09:38:32.588 [DEBUG] [Thread-125374] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:38:32.588 [DEBUG] [Thread-125374] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:38:32.588 [DEBUG] [Thread-125374] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T09:38:32.588 [DEBUG] [Thread-125374] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:38:32.597 [INFO] [Thread-125374] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:38:32.598 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:38:33.249 [DEBUG] [Thread-125374] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:38:33.250 [DEBUG] [Thread-125374] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:38:33.250 [DEBUG] [Thread-125374] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T09:38:33.290 [DEBUG] [Thread-125374] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:38:33.290 [DEBUG] [Thread-125374] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:38:33.293 [DEBUG] [Thread-125374] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:38:33.305 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:38:33.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T09:38:33.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T09:38:33.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T09:38:33.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:38:33.315 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T09:38:33.315 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:38:33.315 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:38:33.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T09:38:33.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.318200 -999.00  +23.50  14.30     14   -4.70 1 1 1 1 1   888    0 30.72 169.37 ----- 11.5 14.3 299.0 16.4 31.0 -28.0 30.2 -27.3 28.4 -25.1 28.9 -25.6
2025-12-31T09:38:33.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T09:38:33.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T09:38:33.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.318200
2025-12-31T09:38:33.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T09:38:33.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T09:38:33.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T09:38:33.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T09:38:33.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T09:38:33.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T09:38:02', tmtdew=34.44, humidity=9.26, cloud=0.0, wind=9.85, temperature=23.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T07:38:12.480', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T09:38:33.318 [DEBUG] [Thread-125374] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:38:33.405 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T09:38:33.414 [DEBUG] [Thread-125377] [transport.py] [_log()] starting thread (client mode): 0xb6b20a60
2025-12-31T09:38:33.414 [DEBUG] [Thread-125377] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:38:33.429 [DEBUG] [Thread-125377] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T09:38:33.429 [INFO] [Thread-125377] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T09:38:33.437 [DEBUG] [Thread-125377] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:38:33.438 [DEBUG] [Thread-125377] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T09:38:33.438 [DEBUG] [Thread-125377] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:38:33.438 [DEBUG] [Thread-125377] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:38:33.438 [DEBUG] [Thread-125377] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:38:33.438 [DEBUG] [Thread-125377] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:38:33.438 [DEBUG] [Thread-125377] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:38:33.438 [DEBUG] [Thread-125377] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:38:33.438 [DEBUG] [Thread-125377] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:38:33.438 [DEBUG] [Thread-125377] [transport.py] [_log()] client lang: <none>
2025-12-31T09:38:33.438 [DEBUG] [Thread-125377] [transport.py] [_log()] server lang: <none>
2025-12-31T09:38:33.438 [DEBUG] [Thread-125377] [transport.py] [_log()] kex follows: False
2025-12-31T09:38:33.438 [DEBUG] [Thread-125377] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:38:33.439 [DEBUG] [Thread-125377] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:38:33.439 [DEBUG] [Thread-125377] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:38:33.439 [DEBUG] [Thread-125377] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:38:33.439 [DEBUG] [Thread-125377] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:38:33.439 [DEBUG] [Thread-125377] [transport.py] [_log()] Compression: none
2025-12-31T09:38:33.439 [DEBUG] [Thread-125377] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:38:33.503 [DEBUG] [Thread-125377] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:38:33.504 [DEBUG] [Thread-125377] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:38:33.504 [DEBUG] [Thread-125377] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T09:38:33.504 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T09:38:33.505 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:38:33.565 [DEBUG] [Thread-125377] [transport.py] [_log()] userauth is OK
2025-12-31T09:38:33.565 [DEBUG] [Thread-125377] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:38:33.565 [DEBUG] [Thread-125377] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:38:33.565 [DEBUG] [Thread-125377] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T09:38:33.565 [DEBUG] [Thread-125377] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:38:33.585 [INFO] [Thread-125377] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:38:33.585 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T09:38:33.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:38:34.439 [DEBUG] [Thread-125377] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:38:34.439 [DEBUG] [Thread-125377] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:38:34.709 [DEBUG] [Thread-125377] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:38:34.710 [DEBUG] [Thread-125377] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:38:34.719 [DEBUG] [Thread-125377] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:38:34.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:38:34.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T09:38:34.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T09:38:34.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:38:34.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:38:34.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:38:34.753 [DEBUG] [Thread-125377] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:38:43.778 [DEBUG] [Thread-125379 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:38:58.825 [DEBUG] [Thread-125380 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:39:03.827 [DEBUG] [Thread-125381 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:39:04.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T09:39:04.776 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T09:39:04.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T09:39:05.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 9, 38, 34), 35.07, 8.72, 0.0, 12.63, 24.24, 0, 0, 0, 2, 0, 0),)
2025-12-31T09:39:05.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 09:38:34
2025-12-31T09:39:05.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T09:39:05.777 [DEBUG] [Thread-125382] [transport.py] [_log()] starting thread (client mode): 0xb95d7a60
2025-12-31T09:39:05.777 [DEBUG] [Thread-125382] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:39:05.798 [DEBUG] [Thread-125382] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T09:39:05.798 [INFO] [Thread-125382] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T09:39:05.801 [DEBUG] [Thread-125382] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:39:05.801 [DEBUG] [Thread-125382] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T09:39:05.802 [DEBUG] [Thread-125382] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:39:05.802 [DEBUG] [Thread-125382] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:39:05.802 [DEBUG] [Thread-125382] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:39:05.802 [DEBUG] [Thread-125382] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:39:05.802 [DEBUG] [Thread-125382] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:39:05.802 [DEBUG] [Thread-125382] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:39:05.802 [DEBUG] [Thread-125382] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:39:05.802 [DEBUG] [Thread-125382] [transport.py] [_log()] client lang: <none>
2025-12-31T09:39:05.802 [DEBUG] [Thread-125382] [transport.py] [_log()] server lang: <none>
2025-12-31T09:39:05.802 [DEBUG] [Thread-125382] [transport.py] [_log()] kex follows: False
2025-12-31T09:39:05.802 [DEBUG] [Thread-125382] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:39:05.802 [DEBUG] [Thread-125382] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:39:05.802 [DEBUG] [Thread-125382] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:39:05.803 [DEBUG] [Thread-125382] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:39:05.803 [DEBUG] [Thread-125382] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:39:05.803 [DEBUG] [Thread-125382] [transport.py] [_log()] Compression: none
2025-12-31T09:39:05.803 [DEBUG] [Thread-125382] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:39:05.822 [DEBUG] [Thread-125382] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:39:05.822 [DEBUG] [Thread-125382] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:39:05.823 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T09:39:05.824 [DEBUG] [Thread-125382] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T09:39:05.825 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:39:05.826 [DEBUG] [Thread-125382] [transport.py] [_log()] userauth is OK
2025-12-31T09:39:05.827 [DEBUG] [Thread-125382] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:39:05.827 [DEBUG] [Thread-125382] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:39:05.827 [DEBUG] [Thread-125382] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T09:39:05.827 [DEBUG] [Thread-125382] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:39:05.851 [INFO] [Thread-125382] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:39:05.851 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:39:06.505 [DEBUG] [Thread-125382] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:39:06.513 [DEBUG] [Thread-125382] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:39:06.513 [DEBUG] [Thread-125382] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T09:39:06.547 [DEBUG] [Thread-125382] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:39:06.547 [DEBUG] [Thread-125382] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:39:06.551 [DEBUG] [Thread-125382] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:39:06.562 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:39:06.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T09:39:06.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T09:39:06.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T09:39:06.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:39:06.573 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T09:39:06.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:39:06.574 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:39:06.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T09:39:06.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.318547 -999.00  +23.90  18.91     13   -5.10 1 1 1 1 1   888    0 31.49 181.47 ----- 16.2 18.9 291.6 21.5 31.0 -28.6 30.3 -27.8 28.5 -24.5 29.0 -26.3
2025-12-31T09:39:06.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T09:39:06.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T09:39:06.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.318547
2025-12-31T09:39:06.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T09:39:06.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T09:39:06.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T09:39:06.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T09:39:06.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T09:39:06.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T09:38:34', tmtdew=35.07, humidity=8.72, cloud=0.0, wind=12.63, temperature=24.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T07:38:42.461', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T09:39:06.576 [DEBUG] [Thread-125382] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:39:06.656 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T09:39:06.669 [DEBUG] [Thread-125385] [transport.py] [_log()] starting thread (client mode): 0xb6b6b790
2025-12-31T09:39:06.669 [DEBUG] [Thread-125385] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:39:06.685 [DEBUG] [Thread-125385] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T09:39:06.685 [INFO] [Thread-125385] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T09:39:06.697 [DEBUG] [Thread-125385] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:39:06.697 [DEBUG] [Thread-125385] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T09:39:06.698 [DEBUG] [Thread-125385] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:39:06.698 [DEBUG] [Thread-125385] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:39:06.698 [DEBUG] [Thread-125385] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:39:06.698 [DEBUG] [Thread-125385] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:39:06.698 [DEBUG] [Thread-125385] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:39:06.698 [DEBUG] [Thread-125385] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:39:06.698 [DEBUG] [Thread-125385] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:39:06.698 [DEBUG] [Thread-125385] [transport.py] [_log()] client lang: <none>
2025-12-31T09:39:06.698 [DEBUG] [Thread-125385] [transport.py] [_log()] server lang: <none>
2025-12-31T09:39:06.698 [DEBUG] [Thread-125385] [transport.py] [_log()] kex follows: False
2025-12-31T09:39:06.698 [DEBUG] [Thread-125385] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:39:06.698 [DEBUG] [Thread-125385] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:39:06.698 [DEBUG] [Thread-125385] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:39:06.698 [DEBUG] [Thread-125385] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:39:06.698 [DEBUG] [Thread-125385] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:39:06.699 [DEBUG] [Thread-125385] [transport.py] [_log()] Compression: none
2025-12-31T09:39:06.699 [DEBUG] [Thread-125385] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:39:06.758 [DEBUG] [Thread-125385] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:39:06.759 [DEBUG] [Thread-125385] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:39:06.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T09:39:06.760 [DEBUG] [Thread-125385] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T09:39:06.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:39:06.823 [DEBUG] [Thread-125385] [transport.py] [_log()] userauth is OK
2025-12-31T09:39:06.823 [DEBUG] [Thread-125385] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:39:06.823 [DEBUG] [Thread-125385] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:39:06.824 [DEBUG] [Thread-125385] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T09:39:06.824 [DEBUG] [Thread-125385] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:39:06.844 [INFO] [Thread-125385] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:39:06.844 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T09:39:06.844 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:39:07.691 [DEBUG] [Thread-125385] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:39:07.691 [DEBUG] [Thread-125385] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:39:07.739 [DEBUG] [Thread-125385] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:39:07.739 [DEBUG] [Thread-125385] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:39:07.747 [DEBUG] [Thread-125385] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:39:07.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:39:07.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T09:39:07.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T09:39:07.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:39:07.771 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:39:07.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:39:07.779 [DEBUG] [Thread-125385] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:39:13.863 [DEBUG] [Thread-125387 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:39:18.272 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:39:18.274 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:39:28.913 [DEBUG] [Thread-125388 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:39:37.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T09:39:37.801 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T09:39:37.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T09:39:38.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 9, 39, 6), 35.55, 8.42, 0.0, 17.63, 24.34, 0, 0, 0, 2, 0, 0),)
2025-12-31T09:39:38.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 09:39:06
2025-12-31T09:39:38.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T09:39:38.812 [DEBUG] [Thread-125389] [transport.py] [_log()] starting thread (client mode): 0xb6b6b580
2025-12-31T09:39:38.812 [DEBUG] [Thread-125389] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:39:38.834 [DEBUG] [Thread-125389] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T09:39:38.835 [INFO] [Thread-125389] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T09:39:38.838 [DEBUG] [Thread-125389] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:39:38.838 [DEBUG] [Thread-125389] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T09:39:38.838 [DEBUG] [Thread-125389] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:39:38.838 [DEBUG] [Thread-125389] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:39:38.838 [DEBUG] [Thread-125389] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:39:38.838 [DEBUG] [Thread-125389] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:39:38.838 [DEBUG] [Thread-125389] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:39:38.838 [DEBUG] [Thread-125389] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:39:38.838 [DEBUG] [Thread-125389] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:39:38.838 [DEBUG] [Thread-125389] [transport.py] [_log()] client lang: <none>
2025-12-31T09:39:38.838 [DEBUG] [Thread-125389] [transport.py] [_log()] server lang: <none>
2025-12-31T09:39:38.839 [DEBUG] [Thread-125389] [transport.py] [_log()] kex follows: False
2025-12-31T09:39:38.839 [DEBUG] [Thread-125389] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:39:38.839 [DEBUG] [Thread-125389] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:39:38.839 [DEBUG] [Thread-125389] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:39:38.839 [DEBUG] [Thread-125389] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:39:38.839 [DEBUG] [Thread-125389] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:39:38.839 [DEBUG] [Thread-125389] [transport.py] [_log()] Compression: none
2025-12-31T09:39:38.839 [DEBUG] [Thread-125389] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:39:38.855 [DEBUG] [Thread-125389] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:39:38.855 [DEBUG] [Thread-125389] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:39:38.856 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T09:39:38.857 [DEBUG] [Thread-125389] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T09:39:38.857 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:39:38.857 [DEBUG] [Thread-125389] [transport.py] [_log()] userauth is OK
2025-12-31T09:39:38.857 [DEBUG] [Thread-125389] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:39:38.857 [DEBUG] [Thread-125389] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:39:38.857 [DEBUG] [Thread-125389] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T09:39:38.857 [DEBUG] [Thread-125389] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:39:38.867 [INFO] [Thread-125389] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:39:38.867 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:39:39.501 [DEBUG] [Thread-125389] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:39:39.501 [DEBUG] [Thread-125389] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:39:39.501 [DEBUG] [Thread-125389] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T09:39:39.541 [DEBUG] [Thread-125389] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:39:39.542 [DEBUG] [Thread-125389] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:39:39.543 [DEBUG] [Thread-125389] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:39:39.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:39:39.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T09:39:39.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T09:39:39.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T09:39:39.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:39:39.553 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T09:39:39.553 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:39:39.553 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:39:39.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T09:39:39.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.318894 -999.00  +24.00  15.94     13   -5.80 1 1 1 1 1   888    0 32.69 204.85 ----- 16.1 15.9 292.8 21.9 31.1 -27.6 30.4 -26.9 28.4 -27.4 29.1 -25.6
2025-12-31T09:39:39.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T09:39:39.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T09:39:39.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.318894
2025-12-31T09:39:39.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T09:39:39.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T09:39:39.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T09:39:39.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T09:39:39.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T09:39:39.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T09:39:06', tmtdew=35.55, humidity=8.42, cloud=0.0, wind=17.63, temperature=24.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T07:39:12.442', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T09:39:39.554 [DEBUG] [Thread-125389] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:39:39.628 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T09:39:39.640 [DEBUG] [Thread-125392] [transport.py] [_log()] starting thread (client mode): 0xb6b22740
2025-12-31T09:39:39.641 [DEBUG] [Thread-125392] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:39:39.656 [DEBUG] [Thread-125392] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T09:39:39.656 [INFO] [Thread-125392] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T09:39:39.668 [DEBUG] [Thread-125392] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:39:39.668 [DEBUG] [Thread-125392] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T09:39:39.668 [DEBUG] [Thread-125392] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:39:39.668 [DEBUG] [Thread-125392] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:39:39.668 [DEBUG] [Thread-125392] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:39:39.668 [DEBUG] [Thread-125392] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:39:39.668 [DEBUG] [Thread-125392] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:39:39.668 [DEBUG] [Thread-125392] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:39:39.668 [DEBUG] [Thread-125392] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:39:39.668 [DEBUG] [Thread-125392] [transport.py] [_log()] client lang: <none>
2025-12-31T09:39:39.668 [DEBUG] [Thread-125392] [transport.py] [_log()] server lang: <none>
2025-12-31T09:39:39.668 [DEBUG] [Thread-125392] [transport.py] [_log()] kex follows: False
2025-12-31T09:39:39.668 [DEBUG] [Thread-125392] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:39:39.668 [DEBUG] [Thread-125392] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:39:39.668 [DEBUG] [Thread-125392] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:39:39.668 [DEBUG] [Thread-125392] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:39:39.668 [DEBUG] [Thread-125392] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:39:39.668 [DEBUG] [Thread-125392] [transport.py] [_log()] Compression: none
2025-12-31T09:39:39.668 [DEBUG] [Thread-125392] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:39:39.723 [DEBUG] [Thread-125392] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:39:39.723 [DEBUG] [Thread-125392] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:39:39.723 [DEBUG] [Thread-125392] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T09:39:39.723 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T09:39:39.723 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:39:39.789 [DEBUG] [Thread-125392] [transport.py] [_log()] userauth is OK
2025-12-31T09:39:39.789 [DEBUG] [Thread-125392] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:39:39.789 [DEBUG] [Thread-125392] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:39:39.789 [DEBUG] [Thread-125392] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T09:39:39.789 [DEBUG] [Thread-125392] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:39:39.803 [INFO] [Thread-125392] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:39:39.803 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T09:39:39.803 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:39:40.602 [DEBUG] [Thread-125392] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:39:40.602 [DEBUG] [Thread-125392] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:39:40.650 [DEBUG] [Thread-125392] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:39:40.650 [DEBUG] [Thread-125392] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:39:40.659 [DEBUG] [Thread-125392] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:39:40.667 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:39: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')
2025-12-31T09:39:40.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T09:39:40.683 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:39:40.683 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:39:40.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:39:40.691 [DEBUG] [Thread-125392] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:39:43.947 [DEBUG] [Thread-125394 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:39:59.000 [DEBUG] [Thread-125395 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:40:03.901 [DEBUG] [Thread-125396 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:40:10.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T09:40:10.713 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T09:40:10.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T09:40:11.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 9, 39, 38), 38.24, 6.98, 0.0, 17.38, 24.54, 0, 0, 0, 2, 0, 0),)
2025-12-31T09:40:11.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 09:39:38
2025-12-31T09:40:11.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T09:40:11.744 [DEBUG] [Thread-125397] [transport.py] [_log()] starting thread (client mode): 0xb95f2950
2025-12-31T09:40:11.744 [DEBUG] [Thread-125397] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:40:11.763 [DEBUG] [Thread-125397] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T09:40:11.763 [INFO] [Thread-125397] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T09:40:11.767 [DEBUG] [Thread-125397] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:40:11.767 [DEBUG] [Thread-125397] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T09:40:11.767 [DEBUG] [Thread-125397] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:40:11.767 [DEBUG] [Thread-125397] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:40:11.767 [DEBUG] [Thread-125397] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:40:11.767 [DEBUG] [Thread-125397] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:40:11.767 [DEBUG] [Thread-125397] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:40:11.767 [DEBUG] [Thread-125397] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:40:11.767 [DEBUG] [Thread-125397] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:40:11.767 [DEBUG] [Thread-125397] [transport.py] [_log()] client lang: <none>
2025-12-31T09:40:11.767 [DEBUG] [Thread-125397] [transport.py] [_log()] server lang: <none>
2025-12-31T09:40:11.767 [DEBUG] [Thread-125397] [transport.py] [_log()] kex follows: False
2025-12-31T09:40:11.767 [DEBUG] [Thread-125397] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:40:11.767 [DEBUG] [Thread-125397] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:40:11.767 [DEBUG] [Thread-125397] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:40:11.767 [DEBUG] [Thread-125397] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:40:11.767 [DEBUG] [Thread-125397] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:40:11.767 [DEBUG] [Thread-125397] [transport.py] [_log()] Compression: none
2025-12-31T09:40:11.767 [DEBUG] [Thread-125397] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:40:11.783 [DEBUG] [Thread-125397] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:40:11.783 [DEBUG] [Thread-125397] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:40:11.783 [DEBUG] [Thread-125397] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T09:40:11.783 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T09:40:11.783 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:40:11.784 [DEBUG] [Thread-125397] [transport.py] [_log()] userauth is OK
2025-12-31T09:40:11.784 [DEBUG] [Thread-125397] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:40:11.784 [DEBUG] [Thread-125397] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:40:11.784 [DEBUG] [Thread-125397] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T09:40:11.784 [DEBUG] [Thread-125397] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:40:11.797 [INFO] [Thread-125397] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:40:11.797 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:40:12.985 [DEBUG] [Thread-125397] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:40:12.985 [DEBUG] [Thread-125397] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:40:12.985 [DEBUG] [Thread-125397] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T09:40:13.026 [DEBUG] [Thread-125397] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:40:13.026 [DEBUG] [Thread-125397] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:40:13.030 [DEBUG] [Thread-125397] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:40:13.041 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:40:13.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T09:40:13.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T09:40:13.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T09:40:13.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:40:13.053 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T09:40:13.053 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:40:13.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:40:13.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T09:40:13.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.319241 -999.00  +24.50  14.64     11   -6.90 1 1 1 1 1   888    0 32.79 202.98 ----- 11.5 14.6 285.6 21.8 31.1 -29.1 30.4 -28.0 28.6 -25.2 29.2 -26.7
2025-12-31T09:40:13.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T09:40:13.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T09:40:13.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.319241
2025-12-31T09:40:13.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T09:40:13.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T09:40:13.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T09:40:13.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T09:40:13.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T09:40:13.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T09:39:38', tmtdew=38.24, humidity=6.98, cloud=0.0, wind=17.38, temperature=24.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T07:39:42.422', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T09:40:13.056 [DEBUG] [Thread-125397] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:40:13.139 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T09:40:13.151 [DEBUG] [Thread-125400] [transport.py] [_log()] starting thread (client mode): 0xb95f3550
2025-12-31T09:40:13.151 [DEBUG] [Thread-125400] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:40:13.166 [DEBUG] [Thread-125400] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T09:40:13.166 [INFO] [Thread-125400] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T09:40:13.175 [DEBUG] [Thread-125400] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:40:13.175 [DEBUG] [Thread-125400] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T09:40:13.175 [DEBUG] [Thread-125400] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:40:13.175 [DEBUG] [Thread-125400] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:40:13.175 [DEBUG] [Thread-125400] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:40:13.175 [DEBUG] [Thread-125400] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:40:13.175 [DEBUG] [Thread-125400] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:40:13.175 [DEBUG] [Thread-125400] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:40:13.175 [DEBUG] [Thread-125400] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:40:13.175 [DEBUG] [Thread-125400] [transport.py] [_log()] client lang: <none>
2025-12-31T09:40:13.175 [DEBUG] [Thread-125400] [transport.py] [_log()] server lang: <none>
2025-12-31T09:40:13.175 [DEBUG] [Thread-125400] [transport.py] [_log()] kex follows: False
2025-12-31T09:40:13.175 [DEBUG] [Thread-125400] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:40:13.176 [DEBUG] [Thread-125400] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:40:13.176 [DEBUG] [Thread-125400] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:40:13.176 [DEBUG] [Thread-125400] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:40:13.176 [DEBUG] [Thread-125400] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:40:13.176 [DEBUG] [Thread-125400] [transport.py] [_log()] Compression: none
2025-12-31T09:40:13.176 [DEBUG] [Thread-125400] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:40:13.231 [DEBUG] [Thread-125400] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:40:13.231 [DEBUG] [Thread-125400] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:40:13.231 [DEBUG] [Thread-125400] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T09:40:13.231 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T09:40:13.231 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:40:13.290 [DEBUG] [Thread-125400] [transport.py] [_log()] userauth is OK
2025-12-31T09:40:13.291 [DEBUG] [Thread-125400] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:40:13.291 [DEBUG] [Thread-125400] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:40:13.291 [DEBUG] [Thread-125400] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T09:40:13.291 [DEBUG] [Thread-125400] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:40:13.311 [INFO] [Thread-125400] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:40:13.311 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T09:40:13.312 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:40:14.030 [DEBUG] [Thread-125402 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:40:14.103 [DEBUG] [Thread-125400] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:40:14.103 [DEBUG] [Thread-125400] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:40:14.151 [DEBUG] [Thread-125400] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:40:14.151 [DEBUG] [Thread-125400] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:40:14.161 [DEBUG] [Thread-125400] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:40:14.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:40:14.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T09:40:14.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T09:40:14.189 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:40:14.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:40:14.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:40:14.198 [DEBUG] [Thread-125400] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:40:18.411 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:40:18.412 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:40:29.089 [DEBUG] [Thread-125403 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:40:44.125 [DEBUG] [Thread-125404 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:40:44.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T09:40:44.220 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T09:40:44.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T09:40:45.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 9, 40, 10), 38.93, 6.61, 0.0, 14.79, 24.59, 0, 0, 0, 2, 0, 0),)
2025-12-31T09:40:45.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 09:40:10
2025-12-31T09:40:45.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T09:40:45.301 [DEBUG] [Thread-125405] [transport.py] [_log()] starting thread (client mode): 0xb6b37cd0
2025-12-31T09:40:45.301 [DEBUG] [Thread-125405] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:40:45.329 [DEBUG] [Thread-125405] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T09:40:45.329 [INFO] [Thread-125405] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T09:40:45.331 [DEBUG] [Thread-125405] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:40:45.331 [DEBUG] [Thread-125405] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T09:40:45.331 [DEBUG] [Thread-125405] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:40:45.331 [DEBUG] [Thread-125405] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:40:45.331 [DEBUG] [Thread-125405] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:40:45.331 [DEBUG] [Thread-125405] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:40:45.331 [DEBUG] [Thread-125405] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:40:45.331 [DEBUG] [Thread-125405] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:40:45.331 [DEBUG] [Thread-125405] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:40:45.331 [DEBUG] [Thread-125405] [transport.py] [_log()] client lang: <none>
2025-12-31T09:40:45.331 [DEBUG] [Thread-125405] [transport.py] [_log()] server lang: <none>
2025-12-31T09:40:45.331 [DEBUG] [Thread-125405] [transport.py] [_log()] kex follows: False
2025-12-31T09:40:45.331 [DEBUG] [Thread-125405] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:40:45.332 [DEBUG] [Thread-125405] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:40:45.332 [DEBUG] [Thread-125405] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:40:45.332 [DEBUG] [Thread-125405] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:40:45.332 [DEBUG] [Thread-125405] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:40:45.332 [DEBUG] [Thread-125405] [transport.py] [_log()] Compression: none
2025-12-31T09:40:45.332 [DEBUG] [Thread-125405] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:40:45.344 [DEBUG] [Thread-125405] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:40:45.344 [DEBUG] [Thread-125405] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:40:45.345 [DEBUG] [Thread-125405] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T09:40:45.345 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T09:40:45.345 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:40:45.345 [DEBUG] [Thread-125405] [transport.py] [_log()] userauth is OK
2025-12-31T09:40:45.345 [DEBUG] [Thread-125405] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:40:45.345 [DEBUG] [Thread-125405] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:40:45.345 [DEBUG] [Thread-125405] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T09:40:45.345 [DEBUG] [Thread-125405] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:40:45.358 [INFO] [Thread-125405] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:40:45.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:40:45.922 [DEBUG] [Thread-125405] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:40:45.922 [DEBUG] [Thread-125405] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:40:45.922 [DEBUG] [Thread-125405] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T09:40:45.962 [DEBUG] [Thread-125405] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:40:45.963 [DEBUG] [Thread-125405] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:40:45.965 [DEBUG] [Thread-125405] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:40:45.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:40:45.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T09:40:45.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T09:40:45.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T09:40:45.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:40:45.983 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T09:40:45.983 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:40:45.983 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:40:45.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T09:40:45.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.319588 -999.00  +24.40  12.28     10   -8.00 1 1 1 1 1   888    0 33.45 222.44 ----- 13.8 12.3 295.8 17.4 31.1 -28.6 30.4 -28.2 28.6 -26.6 29.2 -26.8
2025-12-31T09:40:45.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T09:40:45.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T09:40:45.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.319588
2025-12-31T09:40:45.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T09:40:45.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T09:40:45.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T09:40:45.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T09:40:45.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T09:40:45.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T09:40:10', tmtdew=38.93, humidity=6.61, cloud=0.0, wind=14.79, temperature=24.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T07:40:12.403', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T09:40:45.984 [DEBUG] [Thread-125405] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:40:46.058 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T09:40:46.069 [DEBUG] [Thread-125408] [transport.py] [_log()] starting thread (client mode): 0xb95f3130
2025-12-31T09:40:46.069 [DEBUG] [Thread-125408] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:40:46.083 [DEBUG] [Thread-125408] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T09:40:46.083 [INFO] [Thread-125408] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T09:40:46.090 [DEBUG] [Thread-125408] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:40:46.090 [DEBUG] [Thread-125408] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T09:40:46.090 [DEBUG] [Thread-125408] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:40:46.091 [DEBUG] [Thread-125408] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:40:46.091 [DEBUG] [Thread-125408] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:40:46.091 [DEBUG] [Thread-125408] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:40:46.091 [DEBUG] [Thread-125408] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:40:46.091 [DEBUG] [Thread-125408] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:40:46.091 [DEBUG] [Thread-125408] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:40:46.091 [DEBUG] [Thread-125408] [transport.py] [_log()] client lang: <none>
2025-12-31T09:40:46.091 [DEBUG] [Thread-125408] [transport.py] [_log()] server lang: <none>
2025-12-31T09:40:46.091 [DEBUG] [Thread-125408] [transport.py] [_log()] kex follows: False
2025-12-31T09:40:46.091 [DEBUG] [Thread-125408] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:40:46.091 [DEBUG] [Thread-125408] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:40:46.091 [DEBUG] [Thread-125408] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:40:46.091 [DEBUG] [Thread-125408] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:40:46.091 [DEBUG] [Thread-125408] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:40:46.091 [DEBUG] [Thread-125408] [transport.py] [_log()] Compression: none
2025-12-31T09:40:46.091 [DEBUG] [Thread-125408] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:40:46.147 [DEBUG] [Thread-125408] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:40:46.147 [DEBUG] [Thread-125408] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:40:46.147 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T09:40:46.148 [DEBUG] [Thread-125408] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T09:40:46.148 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:40:46.204 [DEBUG] [Thread-125408] [transport.py] [_log()] userauth is OK
2025-12-31T09:40:46.204 [DEBUG] [Thread-125408] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:40:46.205 [DEBUG] [Thread-125408] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:40:46.205 [DEBUG] [Thread-125408] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T09:40:46.205 [DEBUG] [Thread-125408] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:40:46.218 [INFO] [Thread-125408] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:40:46.218 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T09:40:46.218 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:40:47.089 [DEBUG] [Thread-125408] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:40:47.089 [DEBUG] [Thread-125408] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:40:47.137 [DEBUG] [Thread-125408] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:40:47.137 [DEBUG] [Thread-125408] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:40:47.145 [DEBUG] [Thread-125408] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:40:47.153 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:40:47.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T09:40:47.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T09:40:47.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:40:47.169 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:40:47.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:40:47.176 [DEBUG] [Thread-125408] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:40:59.155 [DEBUG] [Thread-125410 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:41:03.954 [DEBUG] [Thread-125411 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:41:14.209 [DEBUG] [Thread-125412 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:41:17.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T09:41:17.199 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T09:41:17.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T09:41:17.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 9, 41, 15), 39.69, 6.33, 0.0, 14.93, 24.47, 0, 0, 0, 2, 0, 0),)
2025-12-31T09:41:17.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 09:41:15
2025-12-31T09:41:18.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T09:41:18.181 [DEBUG] [Thread-125413] [transport.py] [_log()] starting thread (client mode): 0xb6b37a00
2025-12-31T09:41:18.181 [DEBUG] [Thread-125413] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:41:18.199 [DEBUG] [Thread-125413] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T09:41:18.199 [INFO] [Thread-125413] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T09:41:18.200 [DEBUG] [Thread-125413] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:41:18.200 [DEBUG] [Thread-125413] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T09:41:18.200 [DEBUG] [Thread-125413] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:41:18.200 [DEBUG] [Thread-125413] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:41:18.200 [DEBUG] [Thread-125413] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:41:18.200 [DEBUG] [Thread-125413] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:41:18.200 [DEBUG] [Thread-125413] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:41:18.200 [DEBUG] [Thread-125413] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:41:18.200 [DEBUG] [Thread-125413] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:41:18.200 [DEBUG] [Thread-125413] [transport.py] [_log()] client lang: <none>
2025-12-31T09:41:18.200 [DEBUG] [Thread-125413] [transport.py] [_log()] server lang: <none>
2025-12-31T09:41:18.200 [DEBUG] [Thread-125413] [transport.py] [_log()] kex follows: False
2025-12-31T09:41:18.200 [DEBUG] [Thread-125413] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:41:18.200 [DEBUG] [Thread-125413] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:41:18.200 [DEBUG] [Thread-125413] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:41:18.200 [DEBUG] [Thread-125413] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:41:18.200 [DEBUG] [Thread-125413] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:41:18.200 [DEBUG] [Thread-125413] [transport.py] [_log()] Compression: none
2025-12-31T09:41:18.200 [DEBUG] [Thread-125413] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:41:18.213 [DEBUG] [Thread-125413] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:41:18.213 [DEBUG] [Thread-125413] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:41:18.214 [DEBUG] [Thread-125413] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T09:41:18.214 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T09:41:18.214 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:41:18.215 [DEBUG] [Thread-125413] [transport.py] [_log()] userauth is OK
2025-12-31T09:41:18.215 [DEBUG] [Thread-125413] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:41:18.215 [DEBUG] [Thread-125413] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:41:18.215 [DEBUG] [Thread-125413] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T09:41:18.216 [DEBUG] [Thread-125413] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:41:18.240 [INFO] [Thread-125413] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:41:18.241 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:41:18.550 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:41:18.552 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:41:18.839 [DEBUG] [Thread-125413] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:41:18.839 [DEBUG] [Thread-125413] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:41:18.840 [DEBUG] [Thread-125413] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T09:41:18.880 [DEBUG] [Thread-125413] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:41:18.880 [DEBUG] [Thread-125413] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:41:18.883 [DEBUG] [Thread-125413] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:41:18.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:41:18.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T09:41:18.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T09:41:18.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T09:41:18.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:41:18.908 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T09:41:18.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:41:18.909 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:41:18.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T09:41:18.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.320283 -999.00  +24.00  13.54     12   -6.80 1 1 1 1 1   888    0 34.55 261.54 ----- 11.8 13.5 301.6 16.6 31.1 -28.3 30.4 -27.8 28.7 -25.5 29.2 -26.6
2025-12-31T09:41:18.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T09:41:18.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T09:41:18.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.320283
2025-12-31T09:41:18.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T09:41:18.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T09:41:18.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T09:41:18.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T09:41:18.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T09:41:18.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T09:41:15', tmtdew=39.69, humidity=6.33, cloud=0.0, wind=14.93, temperature=24.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T07:41:12.451', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T09:41:18.911 [DEBUG] [Thread-125413] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:41:18.994 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T09:41:19.008 [DEBUG] [Thread-125416] [transport.py] [_log()] starting thread (client mode): 0xb6bb3880
2025-12-31T09:41:19.008 [DEBUG] [Thread-125416] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:41:19.029 [DEBUG] [Thread-125416] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T09:41:19.029 [INFO] [Thread-125416] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T09:41:19.036 [DEBUG] [Thread-125416] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:41:19.037 [DEBUG] [Thread-125416] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T09:41:19.037 [DEBUG] [Thread-125416] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:41:19.037 [DEBUG] [Thread-125416] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:41:19.037 [DEBUG] [Thread-125416] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:41:19.037 [DEBUG] [Thread-125416] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:41:19.037 [DEBUG] [Thread-125416] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:41:19.037 [DEBUG] [Thread-125416] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:41:19.037 [DEBUG] [Thread-125416] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:41:19.037 [DEBUG] [Thread-125416] [transport.py] [_log()] client lang: <none>
2025-12-31T09:41:19.037 [DEBUG] [Thread-125416] [transport.py] [_log()] server lang: <none>
2025-12-31T09:41:19.037 [DEBUG] [Thread-125416] [transport.py] [_log()] kex follows: False
2025-12-31T09:41:19.037 [DEBUG] [Thread-125416] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:41:19.037 [DEBUG] [Thread-125416] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:41:19.038 [DEBUG] [Thread-125416] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:41:19.038 [DEBUG] [Thread-125416] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:41:19.038 [DEBUG] [Thread-125416] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:41:19.038 [DEBUG] [Thread-125416] [transport.py] [_log()] Compression: none
2025-12-31T09:41:19.038 [DEBUG] [Thread-125416] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:41:19.097 [DEBUG] [Thread-125416] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:41:19.098 [DEBUG] [Thread-125416] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:41:19.099 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T09:41:19.099 [DEBUG] [Thread-125416] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T09:41:19.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:41:19.153 [DEBUG] [Thread-125416] [transport.py] [_log()] userauth is OK
2025-12-31T09:41:19.153 [DEBUG] [Thread-125416] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:41:19.154 [DEBUG] [Thread-125416] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:41:19.154 [DEBUG] [Thread-125416] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T09:41:19.154 [DEBUG] [Thread-125416] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:41:19.173 [INFO] [Thread-125416] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:41:19.173 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T09:41:19.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:41:20.014 [DEBUG] [Thread-125416] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:41:20.014 [DEBUG] [Thread-125416] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:41:20.063 [DEBUG] [Thread-125416] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:41:20.063 [DEBUG] [Thread-125416] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:41:20.072 [DEBUG] [Thread-125416] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:41:20.082 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:41:20.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T09:41:20.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T09:41:20.100 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:41:20.101 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:41:20.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:41:20.109 [DEBUG] [Thread-125416] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:41:29.240 [DEBUG] [Thread-125418 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:41:44.293 [DEBUG] [Thread-125419 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:41:50.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T09:41:50.127 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T09:41:50.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T09:41:50.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 9, 41, 47), 38.63, 6.55, 0.0, 11.38, 24.55, 0, 0, 0, 2, 0, 0),)
2025-12-31T09:41:50.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 09:41:47
2025-12-31T09:41:50.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T09:41:51.114 [DEBUG] [Thread-125420] [transport.py] [_log()] starting thread (client mode): 0xb6b35a50
2025-12-31T09:41:51.114 [DEBUG] [Thread-125420] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:41:51.131 [DEBUG] [Thread-125420] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T09:41:51.131 [INFO] [Thread-125420] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T09:41:51.133 [DEBUG] [Thread-125420] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:41:51.133 [DEBUG] [Thread-125420] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T09:41:51.133 [DEBUG] [Thread-125420] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:41:51.133 [DEBUG] [Thread-125420] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:41:51.133 [DEBUG] [Thread-125420] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:41:51.133 [DEBUG] [Thread-125420] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:41:51.133 [DEBUG] [Thread-125420] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:41:51.133 [DEBUG] [Thread-125420] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:41:51.133 [DEBUG] [Thread-125420] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:41:51.133 [DEBUG] [Thread-125420] [transport.py] [_log()] client lang: <none>
2025-12-31T09:41:51.133 [DEBUG] [Thread-125420] [transport.py] [_log()] server lang: <none>
2025-12-31T09:41:51.133 [DEBUG] [Thread-125420] [transport.py] [_log()] kex follows: False
2025-12-31T09:41:51.133 [DEBUG] [Thread-125420] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:41:51.133 [DEBUG] [Thread-125420] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:41:51.133 [DEBUG] [Thread-125420] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:41:51.133 [DEBUG] [Thread-125420] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:41:51.133 [DEBUG] [Thread-125420] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:41:51.133 [DEBUG] [Thread-125420] [transport.py] [_log()] Compression: none
2025-12-31T09:41:51.133 [DEBUG] [Thread-125420] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:41:51.143 [DEBUG] [Thread-125420] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:41:51.143 [DEBUG] [Thread-125420] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:41:51.144 [DEBUG] [Thread-125420] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T09:41:51.144 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T09:41:51.144 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:41:51.144 [DEBUG] [Thread-125420] [transport.py] [_log()] userauth is OK
2025-12-31T09:41:51.144 [DEBUG] [Thread-125420] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:41:51.144 [DEBUG] [Thread-125420] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:41:51.144 [DEBUG] [Thread-125420] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T09:41:51.144 [DEBUG] [Thread-125420] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:41:51.153 [INFO] [Thread-125420] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:41:51.153 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:41:51.757 [DEBUG] [Thread-125420] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:41:51.758 [DEBUG] [Thread-125420] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:41:51.758 [DEBUG] [Thread-125420] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T09:41:51.799 [DEBUG] [Thread-125420] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:41:51.799 [DEBUG] [Thread-125420] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:41:51.804 [DEBUG] [Thread-125420] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:41:51.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:41:51.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T09:41:51.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T09:41:51.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T09:41:51.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:41:51.825 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T09:41:51.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:41:51.825 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:41:51.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T09:41:51.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.320630 -999.00  +24.00  15.21     12   -6.90 1 1 1 1 1   888    0 34.18 248.90 ----- 16.8 15.2 282.2 18.4 31.1 -28.8 30.5 -27.9 28.7 -26.4 29.2 -26.9
2025-12-31T09:41:51.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T09:41:51.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T09:41:51.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.320630
2025-12-31T09:41:51.826 [DEBUG] [Thread-125420] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:41:51.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T09:41:51.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T09:41:51.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T09:41:51.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T09:41:51.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T09:41:51.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T09:41:47', tmtdew=38.63, humidity=6.55, cloud=0.0, wind=11.38, temperature=24.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T07:41:42.432', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T09:41:51.908 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T09:41:51.921 [DEBUG] [Thread-125423] [transport.py] [_log()] starting thread (client mode): 0xb6b35f60
2025-12-31T09:41:51.921 [DEBUG] [Thread-125423] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:41:51.939 [DEBUG] [Thread-125423] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T09:41:51.939 [INFO] [Thread-125423] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T09:41:51.947 [DEBUG] [Thread-125423] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:41:51.947 [DEBUG] [Thread-125423] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T09:41:51.947 [DEBUG] [Thread-125423] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:41:51.947 [DEBUG] [Thread-125423] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:41:51.947 [DEBUG] [Thread-125423] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:41:51.947 [DEBUG] [Thread-125423] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:41:51.947 [DEBUG] [Thread-125423] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:41:51.947 [DEBUG] [Thread-125423] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:41:51.947 [DEBUG] [Thread-125423] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:41:51.947 [DEBUG] [Thread-125423] [transport.py] [_log()] client lang: <none>
2025-12-31T09:41:51.947 [DEBUG] [Thread-125423] [transport.py] [_log()] server lang: <none>
2025-12-31T09:41:51.948 [DEBUG] [Thread-125423] [transport.py] [_log()] kex follows: False
2025-12-31T09:41:51.948 [DEBUG] [Thread-125423] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:41:51.948 [DEBUG] [Thread-125423] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:41:51.948 [DEBUG] [Thread-125423] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:41:51.948 [DEBUG] [Thread-125423] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:41:51.948 [DEBUG] [Thread-125423] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:41:51.948 [DEBUG] [Thread-125423] [transport.py] [_log()] Compression: none
2025-12-31T09:41:51.948 [DEBUG] [Thread-125423] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:41:52.005 [DEBUG] [Thread-125423] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:41:52.006 [DEBUG] [Thread-125423] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:41:52.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T09:41:52.007 [DEBUG] [Thread-125423] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T09:41:52.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:41:52.062 [DEBUG] [Thread-125423] [transport.py] [_log()] userauth is OK
2025-12-31T09:41:52.062 [DEBUG] [Thread-125423] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:41:52.062 [DEBUG] [Thread-125423] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:41:52.062 [DEBUG] [Thread-125423] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T09:41:52.063 [DEBUG] [Thread-125423] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:41:52.083 [INFO] [Thread-125423] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:41:52.084 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T09:41:52.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:41:52.923 [DEBUG] [Thread-125423] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:41:52.924 [DEBUG] [Thread-125423] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:41:52.971 [DEBUG] [Thread-125423] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:41:52.971 [DEBUG] [Thread-125423] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:41:52.980 [DEBUG] [Thread-125423] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:41:52.988 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:41:52.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T09:41:52.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-12-31T09:41:53.004 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:41:53.004 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:41:53.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:41:53.015 [DEBUG] [Thread-125423] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:41:59.330 [DEBUG] [Thread-125425 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:42:03.998 [DEBUG] [Thread-125426 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:42:14.374 [DEBUG] [Thread-125427 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:42:18.693 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:42:18.694 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:42:23.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T09:42:23.035 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T09:42:23.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T09:42:23.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 9, 42, 19), 37.99, 6.88, 0.0, 9.94, 24.52, 0, 0, 0, 2, 0, 0),)
2025-12-31T09:42:23.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 09:42:19
2025-12-31T09:42:23.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T09:42:24.009 [DEBUG] [Thread-125428] [transport.py] [_log()] starting thread (client mode): 0xb6b34940
2025-12-31T09:42:24.009 [DEBUG] [Thread-125428] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:42:24.029 [DEBUG] [Thread-125428] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T09:42:24.029 [INFO] [Thread-125428] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T09:42:24.032 [DEBUG] [Thread-125428] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:42:24.032 [DEBUG] [Thread-125428] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T09:42:24.032 [DEBUG] [Thread-125428] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:42:24.032 [DEBUG] [Thread-125428] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:42:24.032 [DEBUG] [Thread-125428] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:42:24.032 [DEBUG] [Thread-125428] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:42:24.032 [DEBUG] [Thread-125428] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:42:24.032 [DEBUG] [Thread-125428] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:42:24.032 [DEBUG] [Thread-125428] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:42:24.032 [DEBUG] [Thread-125428] [transport.py] [_log()] client lang: <none>
2025-12-31T09:42:24.032 [DEBUG] [Thread-125428] [transport.py] [_log()] server lang: <none>
2025-12-31T09:42:24.032 [DEBUG] [Thread-125428] [transport.py] [_log()] kex follows: False
2025-12-31T09:42:24.032 [DEBUG] [Thread-125428] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:42:24.032 [DEBUG] [Thread-125428] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:42:24.032 [DEBUG] [Thread-125428] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:42:24.032 [DEBUG] [Thread-125428] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:42:24.032 [DEBUG] [Thread-125428] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:42:24.032 [DEBUG] [Thread-125428] [transport.py] [_log()] Compression: none
2025-12-31T09:42:24.033 [DEBUG] [Thread-125428] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:42:24.041 [DEBUG] [Thread-125428] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:42:24.041 [DEBUG] [Thread-125428] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:42:24.042 [DEBUG] [Thread-125428] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T09:42:24.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T09:42:24.043 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:42:24.044 [DEBUG] [Thread-125428] [transport.py] [_log()] userauth is OK
2025-12-31T09:42:24.044 [DEBUG] [Thread-125428] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:42:24.044 [DEBUG] [Thread-125428] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:42:24.044 [DEBUG] [Thread-125428] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T09:42:24.044 [DEBUG] [Thread-125428] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:42:24.067 [INFO] [Thread-125428] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:42:24.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:42:24.622 [DEBUG] [Thread-125428] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:42:24.623 [DEBUG] [Thread-125428] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:42:24.623 [DEBUG] [Thread-125428] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T09:42:24.663 [DEBUG] [Thread-125428] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:42:24.663 [DEBUG] [Thread-125428] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:42:24.669 [DEBUG] [Thread-125428] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:42:24.681 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:42:24.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T09:42:24.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T09:42:24.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T09:42:24.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:42:24.691 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T09:42:24.692 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:42:24.692 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:42:24.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T09:42:24.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.320977 -999.00  +24.00  18.37     11   -8.00 1 1 1 1 1   888    0 35.14 265.12 ----- 19.3 18.4 283.4 28.6 30.7 -31.4 30.2 -30.6 28.6 -27.0 28.9 -28.8
2025-12-31T09:42:24.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T09:42:24.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T09:42:24.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.320977
2025-12-31T09:42:24.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T09:42:24.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T09:42:24.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T09:42:24.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T09:42:24.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T09:42:24.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T09:42:19', tmtdew=37.99, humidity=6.88, cloud=0.0, wind=9.94, temperature=24.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T07:42:12.413', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T09:42:24.694 [DEBUG] [Thread-125428] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:42:24.777 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T09:42:24.790 [DEBUG] [Thread-125431] [transport.py] [_log()] starting thread (client mode): 0xb9579ab0
2025-12-31T09:42:24.790 [DEBUG] [Thread-125431] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:42:24.806 [DEBUG] [Thread-125431] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T09:42:24.806 [INFO] [Thread-125431] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T09:42:24.814 [DEBUG] [Thread-125431] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:42:24.814 [DEBUG] [Thread-125431] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T09:42:24.814 [DEBUG] [Thread-125431] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:42:24.814 [DEBUG] [Thread-125431] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:42:24.814 [DEBUG] [Thread-125431] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:42:24.814 [DEBUG] [Thread-125431] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:42:24.814 [DEBUG] [Thread-125431] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:42:24.814 [DEBUG] [Thread-125431] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:42:24.814 [DEBUG] [Thread-125431] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:42:24.814 [DEBUG] [Thread-125431] [transport.py] [_log()] client lang: <none>
2025-12-31T09:42:24.814 [DEBUG] [Thread-125431] [transport.py] [_log()] server lang: <none>
2025-12-31T09:42:24.815 [DEBUG] [Thread-125431] [transport.py] [_log()] kex follows: False
2025-12-31T09:42:24.815 [DEBUG] [Thread-125431] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:42:24.815 [DEBUG] [Thread-125431] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:42:24.815 [DEBUG] [Thread-125431] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:42:24.815 [DEBUG] [Thread-125431] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:42:24.815 [DEBUG] [Thread-125431] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:42:24.815 [DEBUG] [Thread-125431] [transport.py] [_log()] Compression: none
2025-12-31T09:42:24.815 [DEBUG] [Thread-125431] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:42:24.873 [DEBUG] [Thread-125431] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:42:24.874 [DEBUG] [Thread-125431] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:42:24.875 [DEBUG] [Thread-125431] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T09:42:24.875 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T09:42:24.876 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:42:24.930 [DEBUG] [Thread-125431] [transport.py] [_log()] userauth is OK
2025-12-31T09:42:24.930 [DEBUG] [Thread-125431] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:42:24.930 [DEBUG] [Thread-125431] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:42:24.930 [DEBUG] [Thread-125431] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T09:42:24.930 [DEBUG] [Thread-125431] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:42:24.951 [INFO] [Thread-125431] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:42:24.952 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T09:42:24.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:42:25.826 [DEBUG] [Thread-125431] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:42:25.826 [DEBUG] [Thread-125431] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:42:25.877 [DEBUG] [Thread-125431] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:42:25.877 [DEBUG] [Thread-125431] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:42:25.890 [DEBUG] [Thread-125431] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:42:25.898 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:42:25.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T09:42: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-12-31T09:42:25.915 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:42:25.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:42:25.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:42:25.924 [DEBUG] [Thread-125431] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:42:29.409 [DEBUG] [Thread-125433 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:42:44.460 [DEBUG] [Thread-125434 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:42:55.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T09:42:55.947 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T09:42:55.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T09:42:56.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 9, 42, 51), 38.68, 6.63, 0.0, 14.15, 24.32, 0, 0, 0, 2, 0, 0),)
2025-12-31T09:42:56.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 09:42:51
2025-12-31T09:42:56.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T09:42:56.922 [DEBUG] [Thread-125435] [transport.py] [_log()] starting thread (client mode): 0xb95f1f00
2025-12-31T09:42:56.922 [DEBUG] [Thread-125435] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:42:56.943 [DEBUG] [Thread-125435] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T09:42:56.943 [INFO] [Thread-125435] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T09:42:56.946 [DEBUG] [Thread-125435] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:42:56.947 [DEBUG] [Thread-125435] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T09:42:56.947 [DEBUG] [Thread-125435] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:42:56.947 [DEBUG] [Thread-125435] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:42:56.947 [DEBUG] [Thread-125435] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:42:56.947 [DEBUG] [Thread-125435] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:42:56.947 [DEBUG] [Thread-125435] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:42:56.947 [DEBUG] [Thread-125435] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:42:56.947 [DEBUG] [Thread-125435] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:42:56.947 [DEBUG] [Thread-125435] [transport.py] [_log()] client lang: <none>
2025-12-31T09:42:56.947 [DEBUG] [Thread-125435] [transport.py] [_log()] server lang: <none>
2025-12-31T09:42:56.947 [DEBUG] [Thread-125435] [transport.py] [_log()] kex follows: False
2025-12-31T09:42:56.947 [DEBUG] [Thread-125435] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:42:56.947 [DEBUG] [Thread-125435] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:42:56.947 [DEBUG] [Thread-125435] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:42:56.947 [DEBUG] [Thread-125435] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:42:56.947 [DEBUG] [Thread-125435] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:42:56.947 [DEBUG] [Thread-125435] [transport.py] [_log()] Compression: none
2025-12-31T09:42:56.947 [DEBUG] [Thread-125435] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:42:56.964 [DEBUG] [Thread-125435] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:42:56.965 [DEBUG] [Thread-125435] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:42:56.974 [DEBUG] [Thread-125435] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T09:42:56.974 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T09:42:56.975 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:42:56.977 [DEBUG] [Thread-125435] [transport.py] [_log()] userauth is OK
2025-12-31T09:42:56.977 [DEBUG] [Thread-125435] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:42:56.977 [DEBUG] [Thread-125435] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:42:56.977 [DEBUG] [Thread-125435] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T09:42:56.977 [DEBUG] [Thread-125435] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:42:57.011 [INFO] [Thread-125435] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:42:57.011 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:42:57.617 [DEBUG] [Thread-125435] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:42:57.618 [DEBUG] [Thread-125435] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:42:57.618 [DEBUG] [Thread-125435] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T09:42:57.659 [DEBUG] [Thread-125435] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:42:57.659 [DEBUG] [Thread-125435] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:42:57.662 [DEBUG] [Thread-125435] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:42:57.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:42:57.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T09:42:57.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T09:42:57.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T09:42:57.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:42:57.686 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T09:42:57.687 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:42:57.687 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:42:57.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T09:42:57.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.320977 -999.00  +24.00  18.37     11   -8.00 1 1 1 1 1   888    0 35.14 265.12 ----- 19.3 18.4 283.4 28.6 30.7 -31.4 30.2 -30.6 28.6 -27.0 28.9 -28.8
2025-12-31T09:42:57.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T09:42:57.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T09:42:57.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.320977
2025-12-31T09:42:57.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T09:42:57.688 [DEBUG] [Thread-125435] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:42:57.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T09:42:57.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T09:42:57.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T09:42:57.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T09:42:57.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T09:42:51', tmtdew=38.68, humidity=6.63, cloud=0.0, wind=14.15, temperature=24.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T07:42:12.413', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T09:42:57.770 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T09:42:57.783 [DEBUG] [Thread-125438] [transport.py] [_log()] starting thread (client mode): 0xb6b23340
2025-12-31T09:42:57.783 [DEBUG] [Thread-125438] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:42:57.798 [DEBUG] [Thread-125438] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T09:42:57.798 [INFO] [Thread-125438] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T09:42:57.805 [DEBUG] [Thread-125438] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:42:57.805 [DEBUG] [Thread-125438] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T09:42:57.805 [DEBUG] [Thread-125438] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:42:57.805 [DEBUG] [Thread-125438] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:42:57.805 [DEBUG] [Thread-125438] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:42:57.805 [DEBUG] [Thread-125438] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:42:57.805 [DEBUG] [Thread-125438] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:42:57.805 [DEBUG] [Thread-125438] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:42:57.805 [DEBUG] [Thread-125438] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:42:57.805 [DEBUG] [Thread-125438] [transport.py] [_log()] client lang: <none>
2025-12-31T09:42:57.805 [DEBUG] [Thread-125438] [transport.py] [_log()] server lang: <none>
2025-12-31T09:42:57.805 [DEBUG] [Thread-125438] [transport.py] [_log()] kex follows: False
2025-12-31T09:42:57.805 [DEBUG] [Thread-125438] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:42:57.805 [DEBUG] [Thread-125438] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:42:57.805 [DEBUG] [Thread-125438] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:42:57.805 [DEBUG] [Thread-125438] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:42:57.805 [DEBUG] [Thread-125438] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:42:57.805 [DEBUG] [Thread-125438] [transport.py] [_log()] Compression: none
2025-12-31T09:42:57.805 [DEBUG] [Thread-125438] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:42:57.863 [DEBUG] [Thread-125438] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:42:57.863 [DEBUG] [Thread-125438] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:42:57.863 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T09:42:57.864 [DEBUG] [Thread-125438] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T09:42:57.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:42:57.921 [DEBUG] [Thread-125438] [transport.py] [_log()] userauth is OK
2025-12-31T09:42:57.921 [DEBUG] [Thread-125438] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:42:57.921 [DEBUG] [Thread-125438] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:42:57.921 [DEBUG] [Thread-125438] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T09:42:57.921 [DEBUG] [Thread-125438] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:42:57.935 [INFO] [Thread-125438] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:42:57.935 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T09:42:57.935 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:42:58.756 [DEBUG] [Thread-125438] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:42:58.756 [DEBUG] [Thread-125438] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:42:58.804 [DEBUG] [Thread-125438] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:42:58.804 [DEBUG] [Thread-125438] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:42:58.812 [DEBUG] [Thread-125438] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:42:58.820 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:42:58.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T09:42:58.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T09:42:58.836 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:42:58.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:42:58.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:42:58.844 [DEBUG] [Thread-125438] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:42:59.493 [DEBUG] [Thread-125440 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:43:04.047 [DEBUG] [Thread-125441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:43:14.546 [DEBUG] [Thread-125442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:43:18.839 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:43:18.840 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:43:28.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T09:43:28.866 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T09:43:28.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-12-31T09:43:29.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 9, 43, 23), 38.66, 6.64, 0.0, 14.56, 24.37, 0, 0, 0, 2, 0, 0),)
2025-12-31T09:43:29.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 09:43:23
2025-12-31T09:43:29.576 [DEBUG] [Thread-125443 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:43:29.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T09:43:29.833 [DEBUG] [Thread-125444] [transport.py] [_log()] starting thread (client mode): 0xb6b22110
2025-12-31T09:43:29.833 [DEBUG] [Thread-125444] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:43:29.853 [DEBUG] [Thread-125444] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T09:43:29.854 [INFO] [Thread-125444] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T09:43:29.857 [DEBUG] [Thread-125444] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:43:29.857 [DEBUG] [Thread-125444] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T09:43:29.857 [DEBUG] [Thread-125444] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:43:29.857 [DEBUG] [Thread-125444] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:43:29.857 [DEBUG] [Thread-125444] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:43:29.857 [DEBUG] [Thread-125444] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:43:29.857 [DEBUG] [Thread-125444] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:43:29.857 [DEBUG] [Thread-125444] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:43:29.857 [DEBUG] [Thread-125444] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:43:29.857 [DEBUG] [Thread-125444] [transport.py] [_log()] client lang: <none>
2025-12-31T09:43:29.857 [DEBUG] [Thread-125444] [transport.py] [_log()] server lang: <none>
2025-12-31T09:43:29.858 [DEBUG] [Thread-125444] [transport.py] [_log()] kex follows: False
2025-12-31T09:43:29.858 [DEBUG] [Thread-125444] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:43:29.858 [DEBUG] [Thread-125444] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:43:29.858 [DEBUG] [Thread-125444] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:43:29.858 [DEBUG] [Thread-125444] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:43:29.858 [DEBUG] [Thread-125444] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:43:29.858 [DEBUG] [Thread-125444] [transport.py] [_log()] Compression: none
2025-12-31T09:43:29.858 [DEBUG] [Thread-125444] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:43:29.877 [DEBUG] [Thread-125444] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:43:29.878 [DEBUG] [Thread-125444] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:43:29.879 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T09:43:29.879 [DEBUG] [Thread-125444] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T09:43:29.880 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:43:29.881 [DEBUG] [Thread-125444] [transport.py] [_log()] userauth is OK
2025-12-31T09:43:29.881 [DEBUG] [Thread-125444] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:43:29.881 [DEBUG] [Thread-125444] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:43:29.881 [DEBUG] [Thread-125444] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T09:43:29.881 [DEBUG] [Thread-125444] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:43:29.915 [INFO] [Thread-125444] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:43:29.916 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:43:30.714 [DEBUG] [Thread-125444] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:43:30.715 [DEBUG] [Thread-125444] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:43:30.715 [DEBUG] [Thread-125444] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T09:43:30.756 [DEBUG] [Thread-125444] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:43:30.756 [DEBUG] [Thread-125444] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:43:30.759 [DEBUG] [Thread-125444] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:43:30.773 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:43:30.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T09:43:30.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T09:43:30.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T09:43:30.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:43:30.784 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T09:43:30.784 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:43:30.785 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:43:30.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T09:43:30.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.321324 -999.00  +24.00  23.03     11   -8.10 1 1 1 1 1   888    0 36.35 297.86 ----- 20.8 23.0 296.4 27.3 30.9 -28.0 30.2 -27.7 28.4 -27.7 29.1 -26.2
2025-12-31T09:43:30.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T09:43:30.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T09:43:30.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.321324
2025-12-31T09:43:30.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T09:43:30.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T09:43:30.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T09:43:30.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T09:43:30.787 [DEBUG] [Thread-125444] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:43:30.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T09:43:30.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T09:43:23', tmtdew=38.66, humidity=6.64, cloud=0.0, wind=14.56, temperature=24.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T07:42:42.394', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T09:43:30.868 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T09:43:30.879 [DEBUG] [Thread-125447] [transport.py] [_log()] starting thread (client mode): 0xb6b367a0
2025-12-31T09:43:30.879 [DEBUG] [Thread-125447] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:43:30.901 [DEBUG] [Thread-125447] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T09:43:30.902 [INFO] [Thread-125447] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T09:43:30.911 [DEBUG] [Thread-125447] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:43:30.911 [DEBUG] [Thread-125447] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T09:43:30.911 [DEBUG] [Thread-125447] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:43:30.911 [DEBUG] [Thread-125447] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:43:30.911 [DEBUG] [Thread-125447] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:43:30.911 [DEBUG] [Thread-125447] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:43:30.911 [DEBUG] [Thread-125447] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:43:30.911 [DEBUG] [Thread-125447] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:43:30.911 [DEBUG] [Thread-125447] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:43:30.912 [DEBUG] [Thread-125447] [transport.py] [_log()] client lang: <none>
2025-12-31T09:43:30.912 [DEBUG] [Thread-125447] [transport.py] [_log()] server lang: <none>
2025-12-31T09:43:30.912 [DEBUG] [Thread-125447] [transport.py] [_log()] kex follows: False
2025-12-31T09:43:30.912 [DEBUG] [Thread-125447] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:43:30.912 [DEBUG] [Thread-125447] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:43:30.912 [DEBUG] [Thread-125447] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:43:30.912 [DEBUG] [Thread-125447] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:43:30.912 [DEBUG] [Thread-125447] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:43:30.912 [DEBUG] [Thread-125447] [transport.py] [_log()] Compression: none
2025-12-31T09:43:30.912 [DEBUG] [Thread-125447] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:43:30.970 [DEBUG] [Thread-125447] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:43:30.970 [DEBUG] [Thread-125447] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:43:30.971 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T09:43:30.971 [DEBUG] [Thread-125447] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T09:43:30.972 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:43:31.025 [DEBUG] [Thread-125447] [transport.py] [_log()] userauth is OK
2025-12-31T09:43:31.026 [DEBUG] [Thread-125447] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:43:31.026 [DEBUG] [Thread-125447] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:43:31.026 [DEBUG] [Thread-125447] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T09:43:31.026 [DEBUG] [Thread-125447] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:43:31.045 [INFO] [Thread-125447] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:43:31.046 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T09:43:31.046 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:43:31.919 [DEBUG] [Thread-125447] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:43:31.920 [DEBUG] [Thread-125447] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:43:31.969 [DEBUG] [Thread-125447] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:43:31.969 [DEBUG] [Thread-125447] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:43:31.978 [DEBUG] [Thread-125447] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:43:31.987 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:43:31.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T09:43:31.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T09:43:32.007 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:43:32.007 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:43:32.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:43:32.016 [DEBUG] [Thread-125447] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:43:44.612 [DEBUG] [Thread-125449 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:43:59.670 [DEBUG] [Thread-125450 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:44:02.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T09:44:02.038 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T09:44:02.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-12-31T09:44:02.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 9, 43, 55), 40.32, 5.9, 0.0, 22.13, 24.45, 0, 0, 0, 2, 0, 0),)
2025-12-31T09:44:02.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 09:43:55
2025-12-31T09:44:02.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T09:44:03.026 [DEBUG] [Thread-125451] [transport.py] [_log()] starting thread (client mode): 0xb6b34cd0
2025-12-31T09:44:03.026 [DEBUG] [Thread-125451] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:44:03.048 [DEBUG] [Thread-125451] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T09:44:03.048 [INFO] [Thread-125451] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T09:44:03.051 [DEBUG] [Thread-125451] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:44:03.052 [DEBUG] [Thread-125451] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T09:44:03.052 [DEBUG] [Thread-125451] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:44:03.052 [DEBUG] [Thread-125451] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:44:03.052 [DEBUG] [Thread-125451] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:44:03.052 [DEBUG] [Thread-125451] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:44:03.052 [DEBUG] [Thread-125451] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:44:03.052 [DEBUG] [Thread-125451] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:44:03.052 [DEBUG] [Thread-125451] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:44:03.052 [DEBUG] [Thread-125451] [transport.py] [_log()] client lang: <none>
2025-12-31T09:44:03.052 [DEBUG] [Thread-125451] [transport.py] [_log()] server lang: <none>
2025-12-31T09:44:03.052 [DEBUG] [Thread-125451] [transport.py] [_log()] kex follows: False
2025-12-31T09:44:03.052 [DEBUG] [Thread-125451] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:44:03.052 [DEBUG] [Thread-125451] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:44:03.052 [DEBUG] [Thread-125451] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:44:03.052 [DEBUG] [Thread-125451] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:44:03.052 [DEBUG] [Thread-125451] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:44:03.052 [DEBUG] [Thread-125451] [transport.py] [_log()] Compression: none
2025-12-31T09:44:03.052 [DEBUG] [Thread-125451] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:44:03.067 [DEBUG] [Thread-125451] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:44:03.067 [DEBUG] [Thread-125451] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:44:03.067 [DEBUG] [Thread-125451] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T09:44:03.067 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T09:44:03.067 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:44:03.068 [DEBUG] [Thread-125451] [transport.py] [_log()] userauth is OK
2025-12-31T09:44:03.068 [DEBUG] [Thread-125451] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:44:03.068 [DEBUG] [Thread-125451] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:44:03.068 [DEBUG] [Thread-125451] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T09:44:03.068 [DEBUG] [Thread-125451] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:44:03.078 [INFO] [Thread-125451] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:44:03.078 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:44:03.693 [DEBUG] [Thread-125451] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:44:03.693 [DEBUG] [Thread-125451] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:44:03.693 [DEBUG] [Thread-125451] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T09:44:03.733 [DEBUG] [Thread-125451] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:44:03.733 [DEBUG] [Thread-125451] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:44:03.736 [DEBUG] [Thread-125451] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:44:03.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:44:03.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T09:44:03.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T09:44:03.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T09:44:03.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:44:03.751 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T09:44:03.751 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:44:03.751 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:44:03.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T09:44:03.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.321672 -999.00  +23.90  20.72     11   -8.30 1 1 1 1 1   888    0 36.26 299.30 ----- 17.8 20.7 286.6 25.3 30.8 -29.0 30.3 -27.5 28.6 -26.9 29.0 -28.0
2025-12-31T09:44:03.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T09:44:03.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T09:44:03.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.321672
2025-12-31T09:44:03.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T09:44:03.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T09:44:03.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T09:44:03.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T09:44:03.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T09:44:03.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T09:43:55', tmtdew=40.32, humidity=5.9, cloud=0.0, wind=22.13, temperature=24.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T07:43:12.461', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T09:44:03.752 [DEBUG] [Thread-125451] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:44:03.826 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T09:44:03.838 [DEBUG] [Thread-125454] [transport.py] [_log()] starting thread (client mode): 0xb9591f00
2025-12-31T09:44:03.838 [DEBUG] [Thread-125454] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:44:03.853 [DEBUG] [Thread-125454] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T09:44:03.853 [INFO] [Thread-125454] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T09:44:03.860 [DEBUG] [Thread-125454] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:44:03.860 [DEBUG] [Thread-125454] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T09:44:03.860 [DEBUG] [Thread-125454] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:44:03.860 [DEBUG] [Thread-125454] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:44:03.860 [DEBUG] [Thread-125454] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:44:03.860 [DEBUG] [Thread-125454] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:44:03.860 [DEBUG] [Thread-125454] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:44:03.860 [DEBUG] [Thread-125454] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:44:03.860 [DEBUG] [Thread-125454] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:44:03.860 [DEBUG] [Thread-125454] [transport.py] [_log()] client lang: <none>
2025-12-31T09:44:03.860 [DEBUG] [Thread-125454] [transport.py] [_log()] server lang: <none>
2025-12-31T09:44:03.860 [DEBUG] [Thread-125454] [transport.py] [_log()] kex follows: False
2025-12-31T09:44:03.860 [DEBUG] [Thread-125454] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:44:03.860 [DEBUG] [Thread-125454] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:44:03.860 [DEBUG] [Thread-125454] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:44:03.860 [DEBUG] [Thread-125454] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:44:03.860 [DEBUG] [Thread-125454] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:44:03.860 [DEBUG] [Thread-125454] [transport.py] [_log()] Compression: none
2025-12-31T09:44:03.860 [DEBUG] [Thread-125454] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:44:03.917 [DEBUG] [Thread-125454] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:44:03.917 [DEBUG] [Thread-125454] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:44:03.917 [DEBUG] [Thread-125454] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T09:44:03.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T09:44:03.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:44:03.977 [DEBUG] [Thread-125454] [transport.py] [_log()] userauth is OK
2025-12-31T09:44:03.977 [DEBUG] [Thread-125454] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:44:03.977 [DEBUG] [Thread-125454] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:44:03.977 [DEBUG] [Thread-125454] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T09:44:03.977 [DEBUG] [Thread-125454] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:44:03.990 [INFO] [Thread-125454] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:44:03.990 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T09:44:03.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:44:04.093 [DEBUG] [Thread-125456 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:44:04.824 [DEBUG] [Thread-125454] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:44:04.824 [DEBUG] [Thread-125454] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:44:04.872 [DEBUG] [Thread-125454] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:44:04.872 [DEBUG] [Thread-125454] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:44:04.880 [DEBUG] [Thread-125454] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:44:04.888 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:44:04.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T09:44:04.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T09:44:04.904 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:44:04.904 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:44:04.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:44:04.912 [DEBUG] [Thread-125454] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:44:14.703 [DEBUG] [Thread-125457 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:44:18.980 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:44:18.981 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:44:29.760 [DEBUG] [Thread-125458 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:44:34.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T09:44:34.935 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T09:44:34.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T09:44:35.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 9, 44, 27), 41.14, 5.53, 0.0, 21.03, 24.49, 0, 0, 0, 2, 0, 0),)
2025-12-31T09:44:35.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 09:44:27
2025-12-31T09:44:35.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T09:44:35.923 [DEBUG] [Thread-125459] [transport.py] [_log()] starting thread (client mode): 0xb6b22050
2025-12-31T09:44:35.923 [DEBUG] [Thread-125459] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:44:35.935 [DEBUG] [Thread-125459] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T09:44:35.935 [INFO] [Thread-125459] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T09:44:35.938 [DEBUG] [Thread-125459] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:44:35.938 [DEBUG] [Thread-125459] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T09:44:35.938 [DEBUG] [Thread-125459] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:44:35.938 [DEBUG] [Thread-125459] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:44:35.938 [DEBUG] [Thread-125459] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:44:35.938 [DEBUG] [Thread-125459] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:44:35.938 [DEBUG] [Thread-125459] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:44:35.938 [DEBUG] [Thread-125459] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:44:35.938 [DEBUG] [Thread-125459] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:44:35.938 [DEBUG] [Thread-125459] [transport.py] [_log()] client lang: <none>
2025-12-31T09:44:35.938 [DEBUG] [Thread-125459] [transport.py] [_log()] server lang: <none>
2025-12-31T09:44:35.938 [DEBUG] [Thread-125459] [transport.py] [_log()] kex follows: False
2025-12-31T09:44:35.938 [DEBUG] [Thread-125459] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:44:35.938 [DEBUG] [Thread-125459] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:44:35.938 [DEBUG] [Thread-125459] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:44:35.938 [DEBUG] [Thread-125459] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:44:35.938 [DEBUG] [Thread-125459] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:44:35.938 [DEBUG] [Thread-125459] [transport.py] [_log()] Compression: none
2025-12-31T09:44:35.938 [DEBUG] [Thread-125459] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:44:35.958 [DEBUG] [Thread-125459] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:44:35.958 [DEBUG] [Thread-125459] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:44:35.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T09:44:35.960 [DEBUG] [Thread-125459] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T09:44:35.961 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:44:35.962 [DEBUG] [Thread-125459] [transport.py] [_log()] userauth is OK
2025-12-31T09:44:35.962 [DEBUG] [Thread-125459] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:44:35.962 [DEBUG] [Thread-125459] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:44:35.962 [DEBUG] [Thread-125459] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T09:44:35.962 [DEBUG] [Thread-125459] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:44:35.982 [INFO] [Thread-125459] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:44:35.983 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:44:36.761 [DEBUG] [Thread-125459] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:44:36.762 [DEBUG] [Thread-125459] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:44:36.762 [DEBUG] [Thread-125459] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T09:44:36.802 [DEBUG] [Thread-125459] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:44:36.802 [DEBUG] [Thread-125459] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:44:36.806 [DEBUG] [Thread-125459] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:44:36.817 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:44:36.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T09:44:36.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T09:44:36.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T09:44:36.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:44:36.828 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T09:44:36.828 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:44:36.829 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:44:36.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T09:44:36.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.322019 -999.00  +24.00  22.51     10   -8.40 1 1 1 1 1   888    0 38.22 339.00 ----- 21.5 22.5 284.6 24.0 30.8 -27.9 30.3 -28.0 28.3 -28.3 29.1 -25.7
2025-12-31T09:44:36.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T09:44:36.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T09:44:36.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.322019
2025-12-31T09:44:36.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T09:44:36.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T09:44:36.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T09:44:36.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T09:44:36.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T09:44:36.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T09:44:27', tmtdew=41.14, humidity=5.53, cloud=0.0, wind=21.03, temperature=24.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T07:43:42.442', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T09:44:36.831 [DEBUG] [Thread-125459] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:44:36.920 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T09:44:36.931 [DEBUG] [Thread-125462] [transport.py] [_log()] starting thread (client mode): 0xb957a980
2025-12-31T09:44:36.931 [DEBUG] [Thread-125462] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:44:36.946 [DEBUG] [Thread-125462] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T09:44:36.946 [INFO] [Thread-125462] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T09:44:36.953 [DEBUG] [Thread-125462] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:44:36.953 [DEBUG] [Thread-125462] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T09:44:36.953 [DEBUG] [Thread-125462] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:44:36.953 [DEBUG] [Thread-125462] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:44:36.953 [DEBUG] [Thread-125462] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:44:36.953 [DEBUG] [Thread-125462] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:44:36.953 [DEBUG] [Thread-125462] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:44:36.953 [DEBUG] [Thread-125462] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:44:36.953 [DEBUG] [Thread-125462] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:44:36.953 [DEBUG] [Thread-125462] [transport.py] [_log()] client lang: <none>
2025-12-31T09:44:36.953 [DEBUG] [Thread-125462] [transport.py] [_log()] server lang: <none>
2025-12-31T09:44:36.953 [DEBUG] [Thread-125462] [transport.py] [_log()] kex follows: False
2025-12-31T09:44:36.953 [DEBUG] [Thread-125462] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:44:36.953 [DEBUG] [Thread-125462] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:44:36.953 [DEBUG] [Thread-125462] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:44:36.953 [DEBUG] [Thread-125462] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:44:36.954 [DEBUG] [Thread-125462] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:44:36.954 [DEBUG] [Thread-125462] [transport.py] [_log()] Compression: none
2025-12-31T09:44:36.954 [DEBUG] [Thread-125462] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:44:37.013 [DEBUG] [Thread-125462] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:44:37.014 [DEBUG] [Thread-125462] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:44:37.014 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T09:44:37.015 [DEBUG] [Thread-125462] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T09:44:37.016 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:44:37.069 [DEBUG] [Thread-125462] [transport.py] [_log()] userauth is OK
2025-12-31T09:44:37.070 [DEBUG] [Thread-125462] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:44:37.070 [DEBUG] [Thread-125462] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:44:37.070 [DEBUG] [Thread-125462] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T09:44:37.070 [DEBUG] [Thread-125462] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:44:37.085 [INFO] [Thread-125462] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:44:37.085 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T09:44:37.085 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:44:37.926 [DEBUG] [Thread-125462] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:44:37.927 [DEBUG] [Thread-125462] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:44:37.975 [DEBUG] [Thread-125462] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:44:37.975 [DEBUG] [Thread-125462] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:44:37.985 [DEBUG] [Thread-125462] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:44:37.994 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:44:37.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T09:44:38.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T09:44:38.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:44:38.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:44:38.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:44:38.022 [DEBUG] [Thread-125462] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:44:44.795 [DEBUG] [Thread-125464 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:44:59.847 [DEBUG] [Thread-125465 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:45:04.145 [DEBUG] [Thread-125466 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:45:08.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T09:45:08.026 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T09:45:08.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T09:45:08.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 9, 44, 59), 41.9, 4.87, 0.0, 12.16, 24.3, 0, 0, 0, 2, 0, 0),)
2025-12-31T09:45:08.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 09:44:59
2025-12-31T09:45:08.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T09:45:08.993 [DEBUG] [Thread-125467] [transport.py] [_log()] starting thread (client mode): 0xb6b37e80
2025-12-31T09:45:08.993 [DEBUG] [Thread-125467] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:45:09.013 [DEBUG] [Thread-125467] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T09:45:09.014 [INFO] [Thread-125467] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T09:45:09.017 [DEBUG] [Thread-125467] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:45:09.017 [DEBUG] [Thread-125467] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T09:45:09.017 [DEBUG] [Thread-125467] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:45:09.017 [DEBUG] [Thread-125467] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:45:09.017 [DEBUG] [Thread-125467] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:45:09.017 [DEBUG] [Thread-125467] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:45:09.017 [DEBUG] [Thread-125467] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:45:09.017 [DEBUG] [Thread-125467] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:45:09.017 [DEBUG] [Thread-125467] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:45:09.017 [DEBUG] [Thread-125467] [transport.py] [_log()] client lang: <none>
2025-12-31T09:45:09.017 [DEBUG] [Thread-125467] [transport.py] [_log()] server lang: <none>
2025-12-31T09:45:09.017 [DEBUG] [Thread-125467] [transport.py] [_log()] kex follows: False
2025-12-31T09:45:09.017 [DEBUG] [Thread-125467] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:45:09.017 [DEBUG] [Thread-125467] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:45:09.018 [DEBUG] [Thread-125467] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:45:09.018 [DEBUG] [Thread-125467] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:45:09.018 [DEBUG] [Thread-125467] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:45:09.018 [DEBUG] [Thread-125467] [transport.py] [_log()] Compression: none
2025-12-31T09:45:09.018 [DEBUG] [Thread-125467] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:45:09.026 [DEBUG] [Thread-125467] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:45:09.026 [DEBUG] [Thread-125467] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:45:09.027 [DEBUG] [Thread-125467] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T09:45:09.027 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T09:45:09.028 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:45:09.029 [DEBUG] [Thread-125467] [transport.py] [_log()] userauth is OK
2025-12-31T09:45:09.029 [DEBUG] [Thread-125467] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:45:09.029 [DEBUG] [Thread-125467] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:45:09.029 [DEBUG] [Thread-125467] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T09:45:09.029 [DEBUG] [Thread-125467] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:45:09.048 [INFO] [Thread-125467] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:45:09.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:45:14.882 [DEBUG] [Thread-125469 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:45:15.997 [DEBUG] [Thread-125467] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:45:15.997 [DEBUG] [Thread-125467] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:45:15.998 [DEBUG] [Thread-125467] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T09:45:16.037 [DEBUG] [Thread-125467] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:45:16.038 [DEBUG] [Thread-125467] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:45:16.040 [DEBUG] [Thread-125467] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:45:16.208 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:45:16.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T09:45:16.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T09:45:16.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T09:45:16.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:45:16.230 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T09:45:16.230 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:45:16.230 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:45:16.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T09:45:16.231 [WARNING] [poll_weather_worker] [driver.py] [poll_weather_state()] Unable to get atlas cloud data: list index out of range
2025-12-31T09:45:16.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T09:44:59', tmtdew=41.9, humidity=4.87, cloud=0.0, wind=12.16, temperature=24.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp=None, atlas_cloud=None, atlas_rain=None, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T09:45:16.232 [DEBUG] [Thread-125467] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:45:16.312 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T09:45:16.324 [DEBUG] [Thread-125471] [transport.py] [_log()] starting thread (client mode): 0xb6bb27d0
2025-12-31T09:45:16.325 [DEBUG] [Thread-125471] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:45:16.339 [DEBUG] [Thread-125471] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T09:45:16.339 [INFO] [Thread-125471] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T09:45:16.347 [DEBUG] [Thread-125471] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:45:16.347 [DEBUG] [Thread-125471] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T09:45:16.348 [DEBUG] [Thread-125471] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:45:16.348 [DEBUG] [Thread-125471] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:45:16.348 [DEBUG] [Thread-125471] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:45:16.348 [DEBUG] [Thread-125471] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:45:16.348 [DEBUG] [Thread-125471] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:45:16.348 [DEBUG] [Thread-125471] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:45:16.349 [DEBUG] [Thread-125471] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:45:16.349 [DEBUG] [Thread-125471] [transport.py] [_log()] client lang: <none>
2025-12-31T09:45:16.349 [DEBUG] [Thread-125471] [transport.py] [_log()] server lang: <none>
2025-12-31T09:45:16.349 [DEBUG] [Thread-125471] [transport.py] [_log()] kex follows: False
2025-12-31T09:45:16.349 [DEBUG] [Thread-125471] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:45:16.349 [DEBUG] [Thread-125471] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:45:16.349 [DEBUG] [Thread-125471] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:45:16.349 [DEBUG] [Thread-125471] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:45:16.349 [DEBUG] [Thread-125471] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:45:16.349 [DEBUG] [Thread-125471] [transport.py] [_log()] Compression: none
2025-12-31T09:45:16.349 [DEBUG] [Thread-125471] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:45:16.405 [DEBUG] [Thread-125471] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:45:16.406 [DEBUG] [Thread-125471] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:45:16.407 [DEBUG] [Thread-125471] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T09:45:16.407 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T09:45:16.408 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:45:16.461 [DEBUG] [Thread-125471] [transport.py] [_log()] userauth is OK
2025-12-31T09:45:16.462 [DEBUG] [Thread-125471] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:45:16.462 [DEBUG] [Thread-125471] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:45:16.462 [DEBUG] [Thread-125471] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T09:45:16.462 [DEBUG] [Thread-125471] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:45:16.486 [INFO] [Thread-125471] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:45:16.486 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T09:45:16.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:45:17.322 [DEBUG] [Thread-125471] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:45:17.322 [DEBUG] [Thread-125471] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:45:17.374 [DEBUG] [Thread-125471] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:45:17.374 [DEBUG] [Thread-125471] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:45:17.382 [DEBUG] [Thread-125471] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:45:17.391 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:45:17.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T09:45:17.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T09:45:17.409 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:45:17.409 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:45:17.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:45:17.420 [DEBUG] [Thread-125471] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:45:19.120 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:45:19.121 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:45:29.914 [DEBUG] [Thread-125473 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:45:44.969 [DEBUG] [Thread-125474 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:45:47.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T09:45:47.413 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T09:45:47.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T09:45:48.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 9, 45, 31), 41.51, 5.02, 0.0, 9.51, 24.19, 0, 0, 0, 2, 0, 0),)
2025-12-31T09:45:48.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 09:45:31
2025-12-31T09:45:48.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T09:45:48.397 [DEBUG] [Thread-125475] [transport.py] [_log()] starting thread (client mode): 0xb95f3a60
2025-12-31T09:45:48.397 [DEBUG] [Thread-125475] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:45:48.414 [DEBUG] [Thread-125475] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T09:45:48.414 [INFO] [Thread-125475] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T09:45:48.417 [DEBUG] [Thread-125475] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:45:48.418 [DEBUG] [Thread-125475] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T09:45:48.418 [DEBUG] [Thread-125475] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:45:48.418 [DEBUG] [Thread-125475] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:45:48.418 [DEBUG] [Thread-125475] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:45:48.418 [DEBUG] [Thread-125475] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:45:48.418 [DEBUG] [Thread-125475] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:45:48.418 [DEBUG] [Thread-125475] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:45:48.418 [DEBUG] [Thread-125475] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:45:48.418 [DEBUG] [Thread-125475] [transport.py] [_log()] client lang: <none>
2025-12-31T09:45:48.418 [DEBUG] [Thread-125475] [transport.py] [_log()] server lang: <none>
2025-12-31T09:45:48.418 [DEBUG] [Thread-125475] [transport.py] [_log()] kex follows: False
2025-12-31T09:45:48.418 [DEBUG] [Thread-125475] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:45:48.418 [DEBUG] [Thread-125475] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:45:48.418 [DEBUG] [Thread-125475] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:45:48.418 [DEBUG] [Thread-125475] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:45:48.418 [DEBUG] [Thread-125475] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:45:48.418 [DEBUG] [Thread-125475] [transport.py] [_log()] Compression: none
2025-12-31T09:45:48.418 [DEBUG] [Thread-125475] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:45:48.437 [DEBUG] [Thread-125475] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:45:48.437 [DEBUG] [Thread-125475] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:45:48.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T09:45:48.438 [DEBUG] [Thread-125475] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T09:45:48.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:45:48.440 [DEBUG] [Thread-125475] [transport.py] [_log()] userauth is OK
2025-12-31T09:45:48.441 [DEBUG] [Thread-125475] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:45:48.441 [DEBUG] [Thread-125475] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:45:48.441 [DEBUG] [Thread-125475] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T09:45:48.442 [DEBUG] [Thread-125475] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:45:48.465 [INFO] [Thread-125475] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:45:48.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:45:49.067 [DEBUG] [Thread-125475] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:45:49.067 [DEBUG] [Thread-125475] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:45:49.068 [DEBUG] [Thread-125475] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T09:45:49.108 [DEBUG] [Thread-125475] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:45:49.108 [DEBUG] [Thread-125475] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:45:49.113 [DEBUG] [Thread-125475] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:45:49.125 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:45:49.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T09:45:49.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T09:45:49.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T09:45:49.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:45:49.136 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T09:45:49.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:45:49.136 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:45:49.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T09:45:49.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.323061 -999.00  +24.20  16.06     11   -8.00 1 1 1 1 1   888    0 41.44 456.84 ----- 16.2 16.1 281.0 23.4 31.1 -28.4 30.6 -26.9 28.7 -25.1 29.3 -25.7
2025-12-31T09:45:49.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T09:45:49.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T09:45:49.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.323061
2025-12-31T09:45:49.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T09:45:49.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T09:45:49.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T09:45:49.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T09:45:49.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T09:45:49.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T09:45:31', tmtdew=41.51, humidity=5.02, cloud=0.0, wind=9.51, temperature=24.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T07:45:12.470', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T09:45:49.139 [DEBUG] [Thread-125475] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:45:49.222 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T09:45:49.234 [DEBUG] [Thread-125478] [transport.py] [_log()] starting thread (client mode): 0xb6b18c10
2025-12-31T09:45:49.234 [DEBUG] [Thread-125478] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:45:49.249 [DEBUG] [Thread-125478] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T09:45:49.249 [INFO] [Thread-125478] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T09:45:49.256 [DEBUG] [Thread-125478] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:45:49.256 [DEBUG] [Thread-125478] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T09:45:49.257 [DEBUG] [Thread-125478] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:45:49.257 [DEBUG] [Thread-125478] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:45:49.257 [DEBUG] [Thread-125478] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:45:49.257 [DEBUG] [Thread-125478] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:45:49.257 [DEBUG] [Thread-125478] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:45:49.257 [DEBUG] [Thread-125478] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:45:49.257 [DEBUG] [Thread-125478] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:45:49.257 [DEBUG] [Thread-125478] [transport.py] [_log()] client lang: <none>
2025-12-31T09:45:49.257 [DEBUG] [Thread-125478] [transport.py] [_log()] server lang: <none>
2025-12-31T09:45:49.257 [DEBUG] [Thread-125478] [transport.py] [_log()] kex follows: False
2025-12-31T09:45:49.257 [DEBUG] [Thread-125478] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:45:49.257 [DEBUG] [Thread-125478] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:45:49.257 [DEBUG] [Thread-125478] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:45:49.257 [DEBUG] [Thread-125478] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:45:49.257 [DEBUG] [Thread-125478] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:45:49.257 [DEBUG] [Thread-125478] [transport.py] [_log()] Compression: none
2025-12-31T09:45:49.257 [DEBUG] [Thread-125478] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:45:49.318 [DEBUG] [Thread-125478] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:45:49.319 [DEBUG] [Thread-125478] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:45:49.320 [DEBUG] [Thread-125478] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T09:45:49.320 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T09:45:49.321 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:45:49.381 [DEBUG] [Thread-125478] [transport.py] [_log()] userauth is OK
2025-12-31T09:45:49.381 [DEBUG] [Thread-125478] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:45:49.382 [DEBUG] [Thread-125478] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:45:49.382 [DEBUG] [Thread-125478] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T09:45:49.382 [DEBUG] [Thread-125478] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:45:49.400 [INFO] [Thread-125478] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:45:49.401 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T09:45:49.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:45:50.293 [DEBUG] [Thread-125478] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:45:50.293 [DEBUG] [Thread-125478] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:45:50.341 [DEBUG] [Thread-125478] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:45:50.341 [DEBUG] [Thread-125478] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:45:50.351 [DEBUG] [Thread-125478] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:45:50.360 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:45:50.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T09:45:50.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T09:45:50.379 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:45:50.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:45:50.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:45:50.388 [DEBUG] [Thread-125478] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:46:00.000 [DEBUG] [Thread-125480 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:46:04.188 [DEBUG] [Thread-125481 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:46:15.043 [DEBUG] [Thread-125482 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:46:19.258 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:46:19.259 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:46:20.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T09:46:20.388 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T09:46:20.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T09:46:21.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 9, 46, 3), 40.94, 5.27, 0.0, 11.58, 24.19, 0, 0, 0, 2, 0, 0),)
2025-12-31T09:46:21.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 09:46:03
2025-12-31T09:46:21.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T09:46:21.373 [DEBUG] [Thread-125483] [transport.py] [_log()] starting thread (client mode): 0xb95d43a0
2025-12-31T09:46:21.374 [DEBUG] [Thread-125483] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:46:21.396 [DEBUG] [Thread-125483] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T09:46:21.397 [INFO] [Thread-125483] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T09:46:21.400 [DEBUG] [Thread-125483] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:46:21.400 [DEBUG] [Thread-125483] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T09:46:21.401 [DEBUG] [Thread-125483] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:46:21.401 [DEBUG] [Thread-125483] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:46:21.401 [DEBUG] [Thread-125483] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:46:21.401 [DEBUG] [Thread-125483] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:46:21.401 [DEBUG] [Thread-125483] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:46:21.401 [DEBUG] [Thread-125483] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:46:21.401 [DEBUG] [Thread-125483] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:46:21.401 [DEBUG] [Thread-125483] [transport.py] [_log()] client lang: <none>
2025-12-31T09:46:21.401 [DEBUG] [Thread-125483] [transport.py] [_log()] server lang: <none>
2025-12-31T09:46:21.401 [DEBUG] [Thread-125483] [transport.py] [_log()] kex follows: False
2025-12-31T09:46:21.401 [DEBUG] [Thread-125483] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:46:21.401 [DEBUG] [Thread-125483] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:46:21.401 [DEBUG] [Thread-125483] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:46:21.401 [DEBUG] [Thread-125483] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:46:21.401 [DEBUG] [Thread-125483] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:46:21.401 [DEBUG] [Thread-125483] [transport.py] [_log()] Compression: none
2025-12-31T09:46:21.401 [DEBUG] [Thread-125483] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:46:21.420 [DEBUG] [Thread-125483] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:46:21.420 [DEBUG] [Thread-125483] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:46:21.421 [DEBUG] [Thread-125483] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T09:46:21.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T09:46:21.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:46:21.423 [DEBUG] [Thread-125483] [transport.py] [_log()] userauth is OK
2025-12-31T09:46:21.423 [DEBUG] [Thread-125483] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:46:21.423 [DEBUG] [Thread-125483] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:46:21.423 [DEBUG] [Thread-125483] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T09:46:21.423 [DEBUG] [Thread-125483] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:46:21.448 [INFO] [Thread-125483] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:46:21.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:46:22.200 [DEBUG] [Thread-125483] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:46:22.200 [DEBUG] [Thread-125483] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:46:22.201 [DEBUG] [Thread-125483] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T09:46:22.241 [DEBUG] [Thread-125483] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:46:22.241 [DEBUG] [Thread-125483] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:46:22.243 [DEBUG] [Thread-125483] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:46:22.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:46:22.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T09:46:22.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T09:46:22.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T09:46:22.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:46:22.264 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T09:46:22.264 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:46:22.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:46:22.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T09:46:22.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.323407 -999.00  +24.40  22.04     10   -8.20 1 1 1 1 1   888    0 41.77 453.80 ----- 23.3 22.0 294.0 23.6 31.2 -28.5 30.5 -27.3 28.7 -24.4 29.3 -26.4
2025-12-31T09:46:22.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T09:46:22.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T09:46:22.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.323407
2025-12-31T09:46:22.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T09:46:22.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T09:46:22.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T09:46:22.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T09:46:22.267 [DEBUG] [Thread-125483] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:46:22.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T09:46:22.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T09:46:03', tmtdew=40.94, humidity=5.27, cloud=0.0, wind=11.58, temperature=24.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T07:45:42.365', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T09:46:22.353 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T09:46:22.366 [DEBUG] [Thread-125486] [transport.py] [_log()] starting thread (client mode): 0xb95f2b00
2025-12-31T09:46:22.366 [DEBUG] [Thread-125486] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:46:22.380 [DEBUG] [Thread-125486] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T09:46:22.380 [INFO] [Thread-125486] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T09:46:22.388 [DEBUG] [Thread-125486] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:46:22.388 [DEBUG] [Thread-125486] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T09:46:22.388 [DEBUG] [Thread-125486] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:46:22.388 [DEBUG] [Thread-125486] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:46:22.388 [DEBUG] [Thread-125486] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:46:22.388 [DEBUG] [Thread-125486] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:46:22.388 [DEBUG] [Thread-125486] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:46:22.388 [DEBUG] [Thread-125486] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:46:22.388 [DEBUG] [Thread-125486] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:46:22.388 [DEBUG] [Thread-125486] [transport.py] [_log()] client lang: <none>
2025-12-31T09:46:22.388 [DEBUG] [Thread-125486] [transport.py] [_log()] server lang: <none>
2025-12-31T09:46:22.388 [DEBUG] [Thread-125486] [transport.py] [_log()] kex follows: False
2025-12-31T09:46:22.388 [DEBUG] [Thread-125486] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:46:22.389 [DEBUG] [Thread-125486] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:46:22.389 [DEBUG] [Thread-125486] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:46:22.389 [DEBUG] [Thread-125486] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:46:22.389 [DEBUG] [Thread-125486] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:46:22.389 [DEBUG] [Thread-125486] [transport.py] [_log()] Compression: none
2025-12-31T09:46:22.389 [DEBUG] [Thread-125486] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:46:22.445 [DEBUG] [Thread-125486] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:46:22.446 [DEBUG] [Thread-125486] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:46:22.446 [DEBUG] [Thread-125486] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T09:46:22.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T09:46:22.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:46:22.502 [DEBUG] [Thread-125486] [transport.py] [_log()] userauth is OK
2025-12-31T09:46:22.502 [DEBUG] [Thread-125486] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:46:22.502 [DEBUG] [Thread-125486] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:46:22.502 [DEBUG] [Thread-125486] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T09:46:22.503 [DEBUG] [Thread-125486] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:46:22.521 [INFO] [Thread-125486] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:46:22.522 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T09:46:22.522 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:46:23.333 [DEBUG] [Thread-125486] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:46:23.334 [DEBUG] [Thread-125486] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:46:23.382 [DEBUG] [Thread-125486] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:46:23.382 [DEBUG] [Thread-125486] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:46:23.391 [DEBUG] [Thread-125486] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:46:23.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:46:23.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T09:46:23.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T09:46:23.419 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:46:23.419 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:46:23.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:46:23.428 [DEBUG] [Thread-125486] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:46:30.079 [DEBUG] [Thread-125488 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:46:45.126 [DEBUG] [Thread-125489 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:46:53.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T09:46:53.446 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T09:46:53.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T09:46:54.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 9, 46, 35), 40.56, 5.78, 0.0, 18.12, 24.42, 0, 0, 0, 2, 0, 0),)
2025-12-31T09:46:54.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 09:46:35
2025-12-31T09:46:54.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T09:46:54.420 [DEBUG] [Thread-125490] [transport.py] [_log()] starting thread (client mode): 0xb95d5f00
2025-12-31T09:46:54.421 [DEBUG] [Thread-125490] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:46:54.440 [DEBUG] [Thread-125490] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T09:46:54.440 [INFO] [Thread-125490] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T09:46:54.443 [DEBUG] [Thread-125490] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:46:54.444 [DEBUG] [Thread-125490] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T09:46:54.444 [DEBUG] [Thread-125490] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:46:54.444 [DEBUG] [Thread-125490] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:46:54.444 [DEBUG] [Thread-125490] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:46:54.444 [DEBUG] [Thread-125490] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:46:54.444 [DEBUG] [Thread-125490] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:46:54.444 [DEBUG] [Thread-125490] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:46:54.444 [DEBUG] [Thread-125490] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:46:54.444 [DEBUG] [Thread-125490] [transport.py] [_log()] client lang: <none>
2025-12-31T09:46:54.444 [DEBUG] [Thread-125490] [transport.py] [_log()] server lang: <none>
2025-12-31T09:46:54.444 [DEBUG] [Thread-125490] [transport.py] [_log()] kex follows: False
2025-12-31T09:46:54.444 [DEBUG] [Thread-125490] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:46:54.445 [DEBUG] [Thread-125490] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:46:54.445 [DEBUG] [Thread-125490] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:46:54.445 [DEBUG] [Thread-125490] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:46:54.445 [DEBUG] [Thread-125490] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:46:54.445 [DEBUG] [Thread-125490] [transport.py] [_log()] Compression: none
2025-12-31T09:46:54.445 [DEBUG] [Thread-125490] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:46:54.462 [DEBUG] [Thread-125490] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:46:54.463 [DEBUG] [Thread-125490] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:46:54.463 [DEBUG] [Thread-125490] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T09:46:54.464 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T09:46:54.464 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:46:54.465 [DEBUG] [Thread-125490] [transport.py] [_log()] userauth is OK
2025-12-31T09:46:54.465 [DEBUG] [Thread-125490] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:46:54.465 [DEBUG] [Thread-125490] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:46:54.465 [DEBUG] [Thread-125490] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T09:46:54.466 [DEBUG] [Thread-125490] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:46:54.489 [INFO] [Thread-125490] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:46:54.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:46:55.140 [DEBUG] [Thread-125490] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:46:55.141 [DEBUG] [Thread-125490] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:46:55.141 [DEBUG] [Thread-125490] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T09:46:55.182 [DEBUG] [Thread-125490] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:46:55.182 [DEBUG] [Thread-125490] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:46:55.185 [DEBUG] [Thread-125490] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:46:55.197 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:46:55.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T09:46:55.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T09:46:55.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T09:46:55.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:46:55.207 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T09:46:55.208 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:46:55.208 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:46:55.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T09:46:55.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.323755 -999.00  +24.00  19.16     10   -8.40 1 1 1 1 1   888    0 43.34 496.66 ----- 17.5 19.2 279.8 24.1 30.8 -30.8 30.3 -29.5 28.7 -26.3 29.1 -27.6
2025-12-31T09:46:55.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T09:46:55.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T09:46:55.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.323755
2025-12-31T09:46:55.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T09:46:55.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T09:46:55.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T09:46:55.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T09:46:55.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T09:46:55.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T09:46:35', tmtdew=40.56, humidity=5.78, cloud=0.0, wind=18.12, temperature=24.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T07:46:12.432', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T09:46:55.210 [DEBUG] [Thread-125490] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:46:55.297 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T09:46:55.309 [DEBUG] [Thread-125493] [transport.py] [_log()] starting thread (client mode): 0xb6b6b370
2025-12-31T09:46:55.309 [DEBUG] [Thread-125493] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:46:55.324 [DEBUG] [Thread-125493] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T09:46:55.324 [INFO] [Thread-125493] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T09:46:55.331 [DEBUG] [Thread-125493] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:46:55.331 [DEBUG] [Thread-125493] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T09:46:55.331 [DEBUG] [Thread-125493] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:46:55.331 [DEBUG] [Thread-125493] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:46:55.332 [DEBUG] [Thread-125493] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:46:55.332 [DEBUG] [Thread-125493] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:46:55.332 [DEBUG] [Thread-125493] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:46:55.332 [DEBUG] [Thread-125493] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:46:55.332 [DEBUG] [Thread-125493] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:46:55.332 [DEBUG] [Thread-125493] [transport.py] [_log()] client lang: <none>
2025-12-31T09:46:55.332 [DEBUG] [Thread-125493] [transport.py] [_log()] server lang: <none>
2025-12-31T09:46:55.332 [DEBUG] [Thread-125493] [transport.py] [_log()] kex follows: False
2025-12-31T09:46:55.332 [DEBUG] [Thread-125493] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:46:55.332 [DEBUG] [Thread-125493] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:46:55.332 [DEBUG] [Thread-125493] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:46:55.332 [DEBUG] [Thread-125493] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:46:55.332 [DEBUG] [Thread-125493] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:46:55.332 [DEBUG] [Thread-125493] [transport.py] [_log()] Compression: none
2025-12-31T09:46:55.332 [DEBUG] [Thread-125493] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:46:55.388 [DEBUG] [Thread-125493] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:46:55.389 [DEBUG] [Thread-125493] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:46:55.389 [DEBUG] [Thread-125493] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T09:46:55.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T09:46:55.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:46:55.445 [DEBUG] [Thread-125493] [transport.py] [_log()] userauth is OK
2025-12-31T09:46:55.445 [DEBUG] [Thread-125493] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:46:55.445 [DEBUG] [Thread-125493] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:46:55.445 [DEBUG] [Thread-125493] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T09:46:55.445 [DEBUG] [Thread-125493] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:46:55.467 [INFO] [Thread-125493] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:46:55.467 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T09:46:55.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:46:56.294 [DEBUG] [Thread-125493] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:46:56.295 [DEBUG] [Thread-125493] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:46:56.343 [DEBUG] [Thread-125493] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:46:56.343 [DEBUG] [Thread-125493] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:46:56.353 [DEBUG] [Thread-125493] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:46:56.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:46:56.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-12-31T09:46:56.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-12-31T09:46:56.380 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:46:56.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:46:56.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:46:56.389 [DEBUG] [Thread-125493] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:47:00.163 [DEBUG] [Thread-125495 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:47:04.240 [DEBUG] [Thread-125496 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:47:15.210 [DEBUG] [Thread-125497 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:47:19.398 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:47:19.399 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:47:26.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T09:47:26.412 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T09:47: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-12-31T09:47:27.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 9, 47, 7), 40.99, 5.6, 0.0, 18.37, 24.5, 0, 0, 0, 2, 0, 0),)
2025-12-31T09:47:27.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 09:47:07
2025-12-31T09:47:27.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T09:47:27.393 [DEBUG] [Thread-125498] [transport.py] [_log()] starting thread (client mode): 0xb6bb27d0
2025-12-31T09:47:27.393 [DEBUG] [Thread-125498] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:47:27.413 [DEBUG] [Thread-125498] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T09:47:27.413 [INFO] [Thread-125498] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T09:47:27.416 [DEBUG] [Thread-125498] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:47:27.417 [DEBUG] [Thread-125498] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T09:47:27.417 [DEBUG] [Thread-125498] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:47:27.417 [DEBUG] [Thread-125498] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:47:27.417 [DEBUG] [Thread-125498] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:47:27.417 [DEBUG] [Thread-125498] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:47:27.417 [DEBUG] [Thread-125498] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:47:27.417 [DEBUG] [Thread-125498] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:47:27.417 [DEBUG] [Thread-125498] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:47:27.417 [DEBUG] [Thread-125498] [transport.py] [_log()] client lang: <none>
2025-12-31T09:47:27.417 [DEBUG] [Thread-125498] [transport.py] [_log()] server lang: <none>
2025-12-31T09:47:27.417 [DEBUG] [Thread-125498] [transport.py] [_log()] kex follows: False
2025-12-31T09:47:27.417 [DEBUG] [Thread-125498] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:47:27.417 [DEBUG] [Thread-125498] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:47:27.417 [DEBUG] [Thread-125498] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:47:27.417 [DEBUG] [Thread-125498] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:47:27.417 [DEBUG] [Thread-125498] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:47:27.417 [DEBUG] [Thread-125498] [transport.py] [_log()] Compression: none
2025-12-31T09:47:27.417 [DEBUG] [Thread-125498] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:47:27.433 [DEBUG] [Thread-125498] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:47:27.434 [DEBUG] [Thread-125498] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:47:27.434 [DEBUG] [Thread-125498] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T09:47:27.435 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T09:47:27.435 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:47:27.436 [DEBUG] [Thread-125498] [transport.py] [_log()] userauth is OK
2025-12-31T09:47:27.437 [DEBUG] [Thread-125498] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:47:27.437 [DEBUG] [Thread-125498] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:47:27.437 [DEBUG] [Thread-125498] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T09:47:27.437 [DEBUG] [Thread-125498] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:47:27.473 [INFO] [Thread-125498] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:47:27.473 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:47:28.226 [DEBUG] [Thread-125498] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:47:28.226 [DEBUG] [Thread-125498] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:47:28.227 [DEBUG] [Thread-125498] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T09:47:28.267 [DEBUG] [Thread-125498] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:47:28.267 [DEBUG] [Thread-125498] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:47:28.270 [DEBUG] [Thread-125498] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:47:28.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:47:28.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T09:47:28.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T09:47:28.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T09:47:28.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:47:28.292 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T09:47:28.292 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:47:28.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:47:28.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T09:47:28.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.324102 -999.00  +24.00  21.42     10   -9.00 1 1 1 1 1   888    0 44.02 526.87 ----- 20.8 21.4 289.2 22.8 30.5 -30.8 30.1 -31.0 28.4 -30.8 28.8 -27.4
2025-12-31T09:47:28.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T09:47:28.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T09:47:28.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.324102
2025-12-31T09:47:28.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T09:47:28.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T09:47:28.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T09:47:28.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T09:47:28.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T09:47:28.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T09:47:07', tmtdew=40.99, humidity=5.6, cloud=0.0, wind=18.37, temperature=24.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T07:46:42.413', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T09:47:28.295 [DEBUG] [Thread-125498] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:47:28.380 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T09:47:28.392 [DEBUG] [Thread-125501] [transport.py] [_log()] starting thread (client mode): 0xb95f32e0
2025-12-31T09:47:28.392 [DEBUG] [Thread-125501] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:47:28.407 [DEBUG] [Thread-125501] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T09:47:28.408 [INFO] [Thread-125501] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T09:47:28.415 [DEBUG] [Thread-125501] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:47:28.415 [DEBUG] [Thread-125501] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T09:47:28.415 [DEBUG] [Thread-125501] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:47:28.416 [DEBUG] [Thread-125501] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:47:28.416 [DEBUG] [Thread-125501] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:47:28.416 [DEBUG] [Thread-125501] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:47:28.416 [DEBUG] [Thread-125501] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:47:28.416 [DEBUG] [Thread-125501] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:47:28.416 [DEBUG] [Thread-125501] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:47:28.416 [DEBUG] [Thread-125501] [transport.py] [_log()] client lang: <none>
2025-12-31T09:47:28.416 [DEBUG] [Thread-125501] [transport.py] [_log()] server lang: <none>
2025-12-31T09:47:28.416 [DEBUG] [Thread-125501] [transport.py] [_log()] kex follows: False
2025-12-31T09:47:28.416 [DEBUG] [Thread-125501] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:47:28.416 [DEBUG] [Thread-125501] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:47:28.416 [DEBUG] [Thread-125501] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:47:28.416 [DEBUG] [Thread-125501] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:47:28.416 [DEBUG] [Thread-125501] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:47:28.416 [DEBUG] [Thread-125501] [transport.py] [_log()] Compression: none
2025-12-31T09:47:28.416 [DEBUG] [Thread-125501] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:47:28.473 [DEBUG] [Thread-125501] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:47:28.474 [DEBUG] [Thread-125501] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:47:28.475 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T09:47:28.475 [DEBUG] [Thread-125501] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T09:47:28.476 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:47:28.529 [DEBUG] [Thread-125501] [transport.py] [_log()] userauth is OK
2025-12-31T09:47:28.529 [DEBUG] [Thread-125501] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:47:28.529 [DEBUG] [Thread-125501] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:47:28.529 [DEBUG] [Thread-125501] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T09:47:28.529 [DEBUG] [Thread-125501] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:47:28.543 [INFO] [Thread-125501] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:47:28.543 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T09:47:28.544 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:47:29.398 [DEBUG] [Thread-125501] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:47:29.399 [DEBUG] [Thread-125501] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:47:29.448 [DEBUG] [Thread-125501] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:47:29.448 [DEBUG] [Thread-125501] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:47:29.462 [DEBUG] [Thread-125501] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:47:29.471 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:47:29.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-12-31T09:47:29.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T09:47:29.490 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:47:29.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:47:29.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:47:29.499 [DEBUG] [Thread-125501] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:47:30.242 [DEBUG] [Thread-125503 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:47:45.297 [DEBUG] [Thread-125504 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:47:59.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T09:47:59.515 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T09:47:59.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T09:48:00.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 9, 47, 39), 41.7, 4.97, 0.0, 19.11, 24.39, 0, 0, 0, 2, 0, 0),)
2025-12-31T09:48:00.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 09:47:39
2025-12-31T09:48:00.331 [DEBUG] [Thread-125505 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:48:00.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T09:48:00.496 [DEBUG] [Thread-125506] [transport.py] [_log()] starting thread (client mode): 0xb9593910
2025-12-31T09:48:00.496 [DEBUG] [Thread-125506] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:48:00.516 [DEBUG] [Thread-125506] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T09:48:00.516 [INFO] [Thread-125506] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T09:48:00.519 [DEBUG] [Thread-125506] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:48:00.520 [DEBUG] [Thread-125506] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T09:48:00.520 [DEBUG] [Thread-125506] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:48:00.520 [DEBUG] [Thread-125506] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:48:00.520 [DEBUG] [Thread-125506] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:48:00.520 [DEBUG] [Thread-125506] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:48:00.520 [DEBUG] [Thread-125506] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:48:00.520 [DEBUG] [Thread-125506] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:48:00.520 [DEBUG] [Thread-125506] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:48:00.520 [DEBUG] [Thread-125506] [transport.py] [_log()] client lang: <none>
2025-12-31T09:48:00.520 [DEBUG] [Thread-125506] [transport.py] [_log()] server lang: <none>
2025-12-31T09:48:00.520 [DEBUG] [Thread-125506] [transport.py] [_log()] kex follows: False
2025-12-31T09:48:00.520 [DEBUG] [Thread-125506] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:48:00.520 [DEBUG] [Thread-125506] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:48:00.520 [DEBUG] [Thread-125506] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:48:00.520 [DEBUG] [Thread-125506] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:48:00.521 [DEBUG] [Thread-125506] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:48:00.521 [DEBUG] [Thread-125506] [transport.py] [_log()] Compression: none
2025-12-31T09:48:00.521 [DEBUG] [Thread-125506] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:48:00.538 [DEBUG] [Thread-125506] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:48:00.539 [DEBUG] [Thread-125506] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:48:00.540 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T09:48:00.540 [DEBUG] [Thread-125506] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T09:48:00.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:48:00.542 [DEBUG] [Thread-125506] [transport.py] [_log()] userauth is OK
2025-12-31T09:48:00.543 [DEBUG] [Thread-125506] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:48:00.543 [DEBUG] [Thread-125506] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:48:00.543 [DEBUG] [Thread-125506] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T09:48:00.543 [DEBUG] [Thread-125506] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:48:00.566 [INFO] [Thread-125506] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:48:00.567 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:48:01.223 [DEBUG] [Thread-125506] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:48:01.224 [DEBUG] [Thread-125506] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:48:01.224 [DEBUG] [Thread-125506] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T09:48:01.265 [DEBUG] [Thread-125506] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:48:01.265 [DEBUG] [Thread-125506] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:48:01.269 [DEBUG] [Thread-125506] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:48:01.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:48:01.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T09:48:01.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T09:48:01.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T09:48:01.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:48:01.290 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T09:48:01.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:48:01.291 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:48:01.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T09:48:01.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.324449 -999.00  +24.00  17.14     10   -9.00 1 1 1 1 1   888    0 45.35 535.74 ----- 16.0 17.1 331.0 25.1 30.8 -27.4 30.1 -26.6 28.4 -25.1 28.8 -27.4
2025-12-31T09:48:01.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T09:48:01.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T09:48:01.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.324449
2025-12-31T09:48:01.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T09:48:01.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T09:48:01.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T09:48:01.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T09:48:01.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T09:48:01.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T09:47:39', tmtdew=41.7, humidity=4.97, cloud=0.0, wind=19.11, temperature=24.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T07:47:12.394', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T09:48:01.294 [DEBUG] [Thread-125506] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:48:01.385 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T09:48:01.396 [DEBUG] [Thread-125509] [transport.py] [_log()] starting thread (client mode): 0xb6b1a110
2025-12-31T09:48:01.396 [DEBUG] [Thread-125509] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:48:01.411 [DEBUG] [Thread-125509] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T09:48:01.411 [INFO] [Thread-125509] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T09:48:01.418 [DEBUG] [Thread-125509] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:48:01.418 [DEBUG] [Thread-125509] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T09:48:01.418 [DEBUG] [Thread-125509] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:48:01.418 [DEBUG] [Thread-125509] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:48:01.418 [DEBUG] [Thread-125509] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:48:01.418 [DEBUG] [Thread-125509] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:48:01.418 [DEBUG] [Thread-125509] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:48:01.418 [DEBUG] [Thread-125509] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:48:01.418 [DEBUG] [Thread-125509] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:48:01.418 [DEBUG] [Thread-125509] [transport.py] [_log()] client lang: <none>
2025-12-31T09:48:01.418 [DEBUG] [Thread-125509] [transport.py] [_log()] server lang: <none>
2025-12-31T09:48:01.418 [DEBUG] [Thread-125509] [transport.py] [_log()] kex follows: False
2025-12-31T09:48:01.418 [DEBUG] [Thread-125509] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:48:01.418 [DEBUG] [Thread-125509] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:48:01.418 [DEBUG] [Thread-125509] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:48:01.418 [DEBUG] [Thread-125509] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:48:01.418 [DEBUG] [Thread-125509] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:48:01.418 [DEBUG] [Thread-125509] [transport.py] [_log()] Compression: none
2025-12-31T09:48:01.419 [DEBUG] [Thread-125509] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:48:01.479 [DEBUG] [Thread-125509] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:48:01.480 [DEBUG] [Thread-125509] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:48:01.480 [DEBUG] [Thread-125509] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T09:48:01.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T09:48:01.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:48:01.537 [DEBUG] [Thread-125509] [transport.py] [_log()] userauth is OK
2025-12-31T09:48:01.537 [DEBUG] [Thread-125509] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:48:01.537 [DEBUG] [Thread-125509] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:48:01.537 [DEBUG] [Thread-125509] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T09:48:01.537 [DEBUG] [Thread-125509] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:48:01.556 [INFO] [Thread-125509] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:48:01.557 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T09:48:01.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:48:02.448 [DEBUG] [Thread-125509] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:48:02.448 [DEBUG] [Thread-125509] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:48:02.496 [DEBUG] [Thread-125509] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:48:02.496 [DEBUG] [Thread-125509] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:48:02.505 [DEBUG] [Thread-125509] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:48:02.514 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:48:02.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T09:48:02.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T09:48:02.532 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:48:02.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:48:02.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:48:02.541 [DEBUG] [Thread-125509] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:48:04.294 [DEBUG] [Thread-125511 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:48:15.362 [DEBUG] [Thread-125512 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:48:19.536 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:48:19.538 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:48:30.406 [DEBUG] [Thread-125513 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:48:32.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T09:48:32.563 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T09:48:32.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T09:48:33.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 9, 48, 12), 41.57, 5.02, 0.0, 18.53, 24.35, 0, 0, 0, 2, 0, 0),)
2025-12-31T09:48:33.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 09:48:12
2025-12-31T09:48:33.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T09:48:33.582 [DEBUG] [Thread-125514] [transport.py] [_log()] starting thread (client mode): 0xb6b1a080
2025-12-31T09:48:33.582 [DEBUG] [Thread-125514] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:48:33.600 [DEBUG] [Thread-125514] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T09:48:33.600 [INFO] [Thread-125514] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T09:48:33.604 [DEBUG] [Thread-125514] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:48:33.604 [DEBUG] [Thread-125514] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T09:48:33.604 [DEBUG] [Thread-125514] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:48:33.604 [DEBUG] [Thread-125514] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:48:33.604 [DEBUG] [Thread-125514] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:48:33.604 [DEBUG] [Thread-125514] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:48:33.604 [DEBUG] [Thread-125514] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:48:33.604 [DEBUG] [Thread-125514] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:48:33.604 [DEBUG] [Thread-125514] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:48:33.604 [DEBUG] [Thread-125514] [transport.py] [_log()] client lang: <none>
2025-12-31T09:48:33.604 [DEBUG] [Thread-125514] [transport.py] [_log()] server lang: <none>
2025-12-31T09:48:33.604 [DEBUG] [Thread-125514] [transport.py] [_log()] kex follows: False
2025-12-31T09:48:33.604 [DEBUG] [Thread-125514] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:48:33.604 [DEBUG] [Thread-125514] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:48:33.604 [DEBUG] [Thread-125514] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:48:33.604 [DEBUG] [Thread-125514] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:48:33.604 [DEBUG] [Thread-125514] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:48:33.604 [DEBUG] [Thread-125514] [transport.py] [_log()] Compression: none
2025-12-31T09:48:33.604 [DEBUG] [Thread-125514] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:48:33.619 [DEBUG] [Thread-125514] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:48:33.619 [DEBUG] [Thread-125514] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:48:33.620 [DEBUG] [Thread-125514] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T09:48:33.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T09:48:33.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:48:33.620 [DEBUG] [Thread-125514] [transport.py] [_log()] userauth is OK
2025-12-31T09:48:33.620 [DEBUG] [Thread-125514] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:48:33.620 [DEBUG] [Thread-125514] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:48:33.620 [DEBUG] [Thread-125514] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T09:48:33.620 [DEBUG] [Thread-125514] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:48:33.636 [INFO] [Thread-125514] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:48:33.637 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:48:34.400 [DEBUG] [Thread-125514] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:48:34.400 [DEBUG] [Thread-125514] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:48:34.400 [DEBUG] [Thread-125514] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T09:48:34.440 [DEBUG] [Thread-125514] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:48:34.440 [DEBUG] [Thread-125514] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:48:34.443 [DEBUG] [Thread-125514] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:48:34.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:48:34.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T09:48:34.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T09:48:34.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T09:48:34.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:48:34.458 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T09:48:34.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:48:34.458 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:48:34.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T09:48:34.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.324797 -999.00  +24.00  13.11     10   -8.50 1 1 1 1 1   888    0 45.03 542.05 ----- 12.9 13.1 310.8 20.9 30.8 -26.5 30.2 -26.6 28.6 -27.0 29.1 -25.6
2025-12-31T09:48:34.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T09:48:34.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T09:48:34.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.324797
2025-12-31T09:48:34.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T09:48:34.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T09:48:34.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T09:48:34.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T09:48:34.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T09:48:34.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T09:48:12', tmtdew=41.57, humidity=5.02, cloud=0.0, wind=18.53, temperature=24.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T07:47:42.461', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T09:48:34.460 [DEBUG] [Thread-125514] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:48:34.536 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T09:48:34.547 [DEBUG] [Thread-125517] [transport.py] [_log()] starting thread (client mode): 0xb6b48730
2025-12-31T09:48:34.547 [DEBUG] [Thread-125517] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:48:34.561 [DEBUG] [Thread-125517] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T09:48:34.561 [INFO] [Thread-125517] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T09:48:34.569 [DEBUG] [Thread-125517] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:48:34.569 [DEBUG] [Thread-125517] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T09:48:34.569 [DEBUG] [Thread-125517] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:48:34.569 [DEBUG] [Thread-125517] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:48:34.569 [DEBUG] [Thread-125517] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:48:34.569 [DEBUG] [Thread-125517] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:48:34.569 [DEBUG] [Thread-125517] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:48:34.569 [DEBUG] [Thread-125517] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:48:34.569 [DEBUG] [Thread-125517] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:48:34.569 [DEBUG] [Thread-125517] [transport.py] [_log()] client lang: <none>
2025-12-31T09:48:34.569 [DEBUG] [Thread-125517] [transport.py] [_log()] server lang: <none>
2025-12-31T09:48:34.569 [DEBUG] [Thread-125517] [transport.py] [_log()] kex follows: False
2025-12-31T09:48:34.569 [DEBUG] [Thread-125517] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:48:34.569 [DEBUG] [Thread-125517] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:48:34.569 [DEBUG] [Thread-125517] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:48:34.569 [DEBUG] [Thread-125517] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:48:34.569 [DEBUG] [Thread-125517] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:48:34.569 [DEBUG] [Thread-125517] [transport.py] [_log()] Compression: none
2025-12-31T09:48:34.569 [DEBUG] [Thread-125517] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:48:34.623 [DEBUG] [Thread-125517] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:48:34.623 [DEBUG] [Thread-125517] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:48:34.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T09:48:34.623 [DEBUG] [Thread-125517] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T09:48:34.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:48:34.683 [DEBUG] [Thread-125517] [transport.py] [_log()] userauth is OK
2025-12-31T09:48:34.683 [DEBUG] [Thread-125517] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:48:34.683 [DEBUG] [Thread-125517] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:48:34.683 [DEBUG] [Thread-125517] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T09:48:34.683 [DEBUG] [Thread-125517] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:48:34.698 [INFO] [Thread-125517] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:48: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-12-31T09:48:34.698 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:48:35.508 [DEBUG] [Thread-125517] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:48:35.508 [DEBUG] [Thread-125517] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:48:35.557 [DEBUG] [Thread-125517] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:48:35.558 [DEBUG] [Thread-125517] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:48:35.566 [DEBUG] [Thread-125517] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:48:35.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:48:35.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T09:48:35.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T09:48:35.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:48:35.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:48:35.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:48:35.597 [DEBUG] [Thread-125517] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:48:45.436 [DEBUG] [Thread-125519 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:49:00.478 [DEBUG] [Thread-125520 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:49:04.358 [DEBUG] [Thread-125521 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:49:05.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T09:49:05.619 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T09:49: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-12-31T09:49:06.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 9, 48, 44), 40.97, 5.58, 0.0, 12.67, 24.32, 0, 0, 0, 2, 0, 0),)
2025-12-31T09:49:06.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 09:48:44
2025-12-31T09:49:06.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T09:49:06.596 [DEBUG] [Thread-125522] [transport.py] [_log()] starting thread (client mode): 0xb6bb2e60
2025-12-31T09:49:06.596 [DEBUG] [Thread-125522] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:49:06.616 [DEBUG] [Thread-125522] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T09:49:06.616 [INFO] [Thread-125522] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T09:49:06.619 [DEBUG] [Thread-125522] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:49:06.619 [DEBUG] [Thread-125522] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T09:49:06.620 [DEBUG] [Thread-125522] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:49:06.620 [DEBUG] [Thread-125522] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:49:06.620 [DEBUG] [Thread-125522] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:49:06.620 [DEBUG] [Thread-125522] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:49:06.620 [DEBUG] [Thread-125522] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:49:06.620 [DEBUG] [Thread-125522] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:49:06.620 [DEBUG] [Thread-125522] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:49:06.620 [DEBUG] [Thread-125522] [transport.py] [_log()] client lang: <none>
2025-12-31T09:49:06.620 [DEBUG] [Thread-125522] [transport.py] [_log()] server lang: <none>
2025-12-31T09:49:06.620 [DEBUG] [Thread-125522] [transport.py] [_log()] kex follows: False
2025-12-31T09:49:06.620 [DEBUG] [Thread-125522] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:49:06.620 [DEBUG] [Thread-125522] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:49:06.620 [DEBUG] [Thread-125522] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:49:06.620 [DEBUG] [Thread-125522] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:49:06.620 [DEBUG] [Thread-125522] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:49:06.620 [DEBUG] [Thread-125522] [transport.py] [_log()] Compression: none
2025-12-31T09:49:06.620 [DEBUG] [Thread-125522] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:49:06.636 [DEBUG] [Thread-125522] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:49:06.637 [DEBUG] [Thread-125522] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:49:06.637 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T09:49:06.638 [DEBUG] [Thread-125522] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T09:49:06.639 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:49:06.640 [DEBUG] [Thread-125522] [transport.py] [_log()] userauth is OK
2025-12-31T09:49:06.640 [DEBUG] [Thread-125522] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:49:06.640 [DEBUG] [Thread-125522] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:49:06.640 [DEBUG] [Thread-125522] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T09:49:06.640 [DEBUG] [Thread-125522] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:49:06.659 [INFO] [Thread-125522] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:49:06.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:49:07.285 [DEBUG] [Thread-125522] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:49:07.285 [DEBUG] [Thread-125522] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:49:07.286 [DEBUG] [Thread-125522] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T09:49:07.326 [DEBUG] [Thread-125522] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:49:07.326 [DEBUG] [Thread-125522] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:49:07.330 [DEBUG] [Thread-125522] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:49:07.344 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:49:07.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T09:49:07.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T09:49:07.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T09:49:07.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:49:07.356 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T09:49:07.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:49:07.357 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:49:07.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T09:49:07.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.325144 -999.00  +24.10  14.63     10   -8.30 1 1 1 1 1   888    0 44.66 515.05 ----- 14.3 14.6 286.0 15.9 30.9 -26.6 30.3 -25.6 28.7 -24.7 29.1 -24.9
2025-12-31T09:49:07.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T09:49:07.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T09:49:07.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.325144
2025-12-31T09:49:07.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T09:49:07.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T09:49:07.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T09:49:07.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T09:49:07.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T09:49:07.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T09:48:44', tmtdew=40.97, humidity=5.58, cloud=0.0, wind=12.67, temperature=24.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T07:48:12.442', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T09:49:07.360 [DEBUG] [Thread-125522] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:49:07.446 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T09:49:07.459 [DEBUG] [Thread-125525] [transport.py] [_log()] starting thread (client mode): 0xb95f0790
2025-12-31T09:49:07.459 [DEBUG] [Thread-125525] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:49:07.473 [DEBUG] [Thread-125525] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T09:49:07.473 [INFO] [Thread-125525] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T09:49:07.481 [DEBUG] [Thread-125525] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:49:07.481 [DEBUG] [Thread-125525] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T09:49:07.482 [DEBUG] [Thread-125525] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:49:07.482 [DEBUG] [Thread-125525] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:49:07.482 [DEBUG] [Thread-125525] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:49:07.482 [DEBUG] [Thread-125525] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:49:07.482 [DEBUG] [Thread-125525] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:49:07.482 [DEBUG] [Thread-125525] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:49:07.482 [DEBUG] [Thread-125525] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:49:07.482 [DEBUG] [Thread-125525] [transport.py] [_log()] client lang: <none>
2025-12-31T09:49:07.483 [DEBUG] [Thread-125525] [transport.py] [_log()] server lang: <none>
2025-12-31T09:49:07.483 [DEBUG] [Thread-125525] [transport.py] [_log()] kex follows: False
2025-12-31T09:49:07.483 [DEBUG] [Thread-125525] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:49:07.483 [DEBUG] [Thread-125525] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:49:07.483 [DEBUG] [Thread-125525] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:49:07.483 [DEBUG] [Thread-125525] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:49:07.483 [DEBUG] [Thread-125525] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:49:07.484 [DEBUG] [Thread-125525] [transport.py] [_log()] Compression: none
2025-12-31T09:49:07.484 [DEBUG] [Thread-125525] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:49:07.542 [DEBUG] [Thread-125525] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:49:07.543 [DEBUG] [Thread-125525] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:49:07.543 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T09:49:07.544 [DEBUG] [Thread-125525] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T09:49:07.545 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:49:07.601 [DEBUG] [Thread-125525] [transport.py] [_log()] userauth is OK
2025-12-31T09:49:07.602 [DEBUG] [Thread-125525] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:49:07.602 [DEBUG] [Thread-125525] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:49:07.602 [DEBUG] [Thread-125525] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T09:49:07.602 [DEBUG] [Thread-125525] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:49:07.620 [INFO] [Thread-125525] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:49:07.621 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T09:49:07.621 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:49:08.468 [DEBUG] [Thread-125525] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:49:08.469 [DEBUG] [Thread-125525] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:49:08.516 [DEBUG] [Thread-125525] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:49:08.516 [DEBUG] [Thread-125525] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:49:08.526 [DEBUG] [Thread-125525] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:49:08.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:49:08.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T09:49:08.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T09:49:08.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:49:08.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:49:08.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:49:08.567 [DEBUG] [Thread-125525] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:49:15.509 [DEBUG] [Thread-125527 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:49:19.678 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:49:19.680 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:49:30.557 [DEBUG] [Thread-125528 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:49:38.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T09:49:38.563 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T09:49:38.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T09:49:39.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 9, 49, 16), 40.94, 5.58, 0.0, 12.62, 24.22, 0, 0, 0, 2, 0, 0),)
2025-12-31T09:49:39.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 09:49:16
2025-12-31T09:49:39.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T09:49:39.534 [DEBUG] [Thread-125529] [transport.py] [_log()] starting thread (client mode): 0xb6b18c10
2025-12-31T09:49:39.534 [DEBUG] [Thread-125529] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:49:39.554 [DEBUG] [Thread-125529] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T09:49:39.554 [INFO] [Thread-125529] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T09:49:39.558 [DEBUG] [Thread-125529] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:49:39.558 [DEBUG] [Thread-125529] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T09:49:39.558 [DEBUG] [Thread-125529] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:49:39.558 [DEBUG] [Thread-125529] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:49:39.558 [DEBUG] [Thread-125529] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:49:39.558 [DEBUG] [Thread-125529] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:49:39.558 [DEBUG] [Thread-125529] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:49:39.558 [DEBUG] [Thread-125529] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:49:39.558 [DEBUG] [Thread-125529] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:49:39.558 [DEBUG] [Thread-125529] [transport.py] [_log()] client lang: <none>
2025-12-31T09:49:39.558 [DEBUG] [Thread-125529] [transport.py] [_log()] server lang: <none>
2025-12-31T09:49:39.558 [DEBUG] [Thread-125529] [transport.py] [_log()] kex follows: False
2025-12-31T09:49:39.558 [DEBUG] [Thread-125529] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:49:39.558 [DEBUG] [Thread-125529] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:49:39.559 [DEBUG] [Thread-125529] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:49:39.559 [DEBUG] [Thread-125529] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:49:39.559 [DEBUG] [Thread-125529] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:49:39.559 [DEBUG] [Thread-125529] [transport.py] [_log()] Compression: none
2025-12-31T09:49:39.559 [DEBUG] [Thread-125529] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:49:39.576 [DEBUG] [Thread-125529] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:49:39.577 [DEBUG] [Thread-125529] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:49:39.577 [DEBUG] [Thread-125529] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T09:49:39.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T09:49:39.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:49:39.580 [DEBUG] [Thread-125529] [transport.py] [_log()] userauth is OK
2025-12-31T09:49:39.580 [DEBUG] [Thread-125529] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:49:39.580 [DEBUG] [Thread-125529] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:49:39.580 [DEBUG] [Thread-125529] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T09:49:39.580 [DEBUG] [Thread-125529] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:49:39.605 [INFO] [Thread-125529] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:49:39.606 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:49:40.338 [DEBUG] [Thread-125529] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:49:40.338 [DEBUG] [Thread-125529] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:49:40.339 [DEBUG] [Thread-125529] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T09:49:40.379 [DEBUG] [Thread-125529] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:49:40.379 [DEBUG] [Thread-125529] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:49:40.382 [DEBUG] [Thread-125529] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:49:40.395 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:49:40.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T09:49:40.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T09:49:40.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T09:49:40.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:49:40.407 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T09:49:40.407 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:49:40.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:49:40.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T09:49:40.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.325838 -999.00  +24.00  14.14     11   -8.10 1 1 1 1 1   888    0 44.96 531.44 ----- 13.9 14.1 294.4 21.2 31.2 -26.8 30.6 -25.7 28.9 -23.9 29.3 -24.8
2025-12-31T09:49:40.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T09:49:40.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T09:49:40.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.325838
2025-12-31T09:49:40.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T09:49:40.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T09:49:40.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T09:49:40.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T09:49:40.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T09:49:40.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T09:49:16', tmtdew=40.94, humidity=5.58, cloud=0.0, wind=12.62, temperature=24.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T07:49:12.403', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T09:49:40.410 [DEBUG] [Thread-125529] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:49:40.493 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T09:49:40.505 [DEBUG] [Thread-125532] [transport.py] [_log()] starting thread (client mode): 0xb6bb2e30
2025-12-31T09:49:40.506 [DEBUG] [Thread-125532] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:49:40.520 [DEBUG] [Thread-125532] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T09:49:40.520 [INFO] [Thread-125532] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T09:49:40.528 [DEBUG] [Thread-125532] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:49:40.528 [DEBUG] [Thread-125532] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T09:49:40.528 [DEBUG] [Thread-125532] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:49:40.528 [DEBUG] [Thread-125532] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:49:40.528 [DEBUG] [Thread-125532] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:49:40.528 [DEBUG] [Thread-125532] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:49:40.528 [DEBUG] [Thread-125532] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:49:40.528 [DEBUG] [Thread-125532] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:49:40.528 [DEBUG] [Thread-125532] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:49:40.528 [DEBUG] [Thread-125532] [transport.py] [_log()] client lang: <none>
2025-12-31T09:49:40.528 [DEBUG] [Thread-125532] [transport.py] [_log()] server lang: <none>
2025-12-31T09:49:40.528 [DEBUG] [Thread-125532] [transport.py] [_log()] kex follows: False
2025-12-31T09:49:40.528 [DEBUG] [Thread-125532] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:49:40.528 [DEBUG] [Thread-125532] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:49:40.528 [DEBUG] [Thread-125532] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:49:40.528 [DEBUG] [Thread-125532] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:49:40.529 [DEBUG] [Thread-125532] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:49:40.529 [DEBUG] [Thread-125532] [transport.py] [_log()] Compression: none
2025-12-31T09:49:40.529 [DEBUG] [Thread-125532] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:49:40.585 [DEBUG] [Thread-125532] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:49:40.586 [DEBUG] [Thread-125532] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:49:40.595 [DEBUG] [Thread-125532] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T09:49:40.596 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T09:49:40.597 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:49:40.641 [DEBUG] [Thread-125532] [transport.py] [_log()] userauth is OK
2025-12-31T09:49:40.642 [DEBUG] [Thread-125532] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:49:40.642 [DEBUG] [Thread-125532] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:49:40.642 [DEBUG] [Thread-125532] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T09:49:40.642 [DEBUG] [Thread-125532] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:49:40.661 [INFO] [Thread-125532] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:49:40.661 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T09:49:40.662 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:49:41.479 [DEBUG] [Thread-125532] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:49:41.479 [DEBUG] [Thread-125532] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:49:41.528 [DEBUG] [Thread-125532] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:49:41.528 [DEBUG] [Thread-125532] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:49:41.536 [DEBUG] [Thread-125532] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:49:41.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:49:41.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T09:49:41.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T09:49:41.564 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:49:41.564 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:49:41.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:49:41.572 [DEBUG] [Thread-125532] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:49:45.593 [DEBUG] [Thread-125534 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:50:00.643 [DEBUG] [Thread-125535 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:50:04.410 [DEBUG] [Thread-125536 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:50:11.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T09:50:11.595 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T09:50:11.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T09:50:12.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 9, 49, 48), 40.04, 5.86, 0.0, 21.77, 24.22, 0, 0, 0, 2, 0, 0),)
2025-12-31T09:50:12.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 09:49:48
2025-12-31T09:50:12.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T09:50:12.558 [DEBUG] [Thread-125537] [transport.py] [_log()] starting thread (client mode): 0xb6b36860
2025-12-31T09:50:12.558 [DEBUG] [Thread-125537] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:50:12.580 [DEBUG] [Thread-125537] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T09:50:12.580 [INFO] [Thread-125537] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T09:50:12.583 [DEBUG] [Thread-125537] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:50:12.583 [DEBUG] [Thread-125537] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T09:50:12.584 [DEBUG] [Thread-125537] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:50:12.584 [DEBUG] [Thread-125537] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:50:12.584 [DEBUG] [Thread-125537] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:50:12.584 [DEBUG] [Thread-125537] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:50:12.584 [DEBUG] [Thread-125537] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:50:12.584 [DEBUG] [Thread-125537] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:50:12.584 [DEBUG] [Thread-125537] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:50:12.584 [DEBUG] [Thread-125537] [transport.py] [_log()] client lang: <none>
2025-12-31T09:50:12.584 [DEBUG] [Thread-125537] [transport.py] [_log()] server lang: <none>
2025-12-31T09:50:12.584 [DEBUG] [Thread-125537] [transport.py] [_log()] kex follows: False
2025-12-31T09:50:12.584 [DEBUG] [Thread-125537] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:50:12.584 [DEBUG] [Thread-125537] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:50:12.585 [DEBUG] [Thread-125537] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:50:12.585 [DEBUG] [Thread-125537] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:50:12.585 [DEBUG] [Thread-125537] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:50:12.585 [DEBUG] [Thread-125537] [transport.py] [_log()] Compression: none
2025-12-31T09:50:12.585 [DEBUG] [Thread-125537] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:50:12.605 [DEBUG] [Thread-125537] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:50:12.606 [DEBUG] [Thread-125537] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:50:12.606 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T09:50:12.607 [DEBUG] [Thread-125537] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T09:50:12.608 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:50:12.609 [DEBUG] [Thread-125537] [transport.py] [_log()] userauth is OK
2025-12-31T09:50:12.609 [DEBUG] [Thread-125537] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:50:12.609 [DEBUG] [Thread-125537] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:50:12.609 [DEBUG] [Thread-125537] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T09:50:12.610 [DEBUG] [Thread-125537] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:50:12.632 [INFO] [Thread-125537] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:50:12.633 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:50:14.106 [DEBUG] [Thread-125537] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:50:14.115 [DEBUG] [Thread-125537] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:50:14.116 [DEBUG] [Thread-125537] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T09:50:14.147 [DEBUG] [Thread-125537] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:50:14.147 [DEBUG] [Thread-125537] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:50:14.150 [DEBUG] [Thread-125537] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:50:14.164 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:50:14.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T09:50:14.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T09:50:14.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T09:50:14.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:50:14.179 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T09:50:14.179 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:50:14.180 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:50:14.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T09:50:14.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.326186 -999.00  +24.20  19.79     11   -7.70 1 1 1 1 1   888    0 45.56 532.71 ----- 20.0 19.8 313.4 22.5 31.3 -28.0 30.6 -26.0 28.9 -24.5 29.4 -24.8
2025-12-31T09:50:14.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T09:50:14.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T09:50:14.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.326186
2025-12-31T09:50:14.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T09:50:14.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T09:50:14.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T09:50:14.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T09:50:14.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T09:50:14.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T09:49:48', tmtdew=40.04, humidity=5.86, cloud=0.0, wind=21.77, temperature=24.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T07:49:42.470', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T09:50:14.182 [DEBUG] [Thread-125537] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:50:14.266 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T09:50:14.278 [DEBUG] [Thread-125540] [transport.py] [_log()] starting thread (client mode): 0xb6b19d20
2025-12-31T09:50:14.278 [DEBUG] [Thread-125540] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:50:14.293 [DEBUG] [Thread-125540] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T09:50:14.293 [INFO] [Thread-125540] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T09:50:14.301 [DEBUG] [Thread-125540] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:50:14.302 [DEBUG] [Thread-125540] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T09:50:14.302 [DEBUG] [Thread-125540] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:50:14.302 [DEBUG] [Thread-125540] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:50:14.302 [DEBUG] [Thread-125540] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:50:14.302 [DEBUG] [Thread-125540] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:50:14.302 [DEBUG] [Thread-125540] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:50:14.303 [DEBUG] [Thread-125540] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:50:14.303 [DEBUG] [Thread-125540] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:50:14.303 [DEBUG] [Thread-125540] [transport.py] [_log()] client lang: <none>
2025-12-31T09:50:14.303 [DEBUG] [Thread-125540] [transport.py] [_log()] server lang: <none>
2025-12-31T09:50:14.303 [DEBUG] [Thread-125540] [transport.py] [_log()] kex follows: False
2025-12-31T09:50:14.303 [DEBUG] [Thread-125540] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:50:14.303 [DEBUG] [Thread-125540] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:50:14.303 [DEBUG] [Thread-125540] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:50:14.304 [DEBUG] [Thread-125540] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:50:14.304 [DEBUG] [Thread-125540] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:50:14.304 [DEBUG] [Thread-125540] [transport.py] [_log()] Compression: none
2025-12-31T09:50:14.304 [DEBUG] [Thread-125540] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:50:14.364 [DEBUG] [Thread-125540] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:50:14.365 [DEBUG] [Thread-125540] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:50:14.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T09:50:14.366 [DEBUG] [Thread-125540] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T09:50:14.367 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:50:14.421 [DEBUG] [Thread-125540] [transport.py] [_log()] userauth is OK
2025-12-31T09:50:14.421 [DEBUG] [Thread-125540] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:50:14.421 [DEBUG] [Thread-125540] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:50:14.421 [DEBUG] [Thread-125540] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T09:50:14.421 [DEBUG] [Thread-125540] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:50:14.441 [INFO] [Thread-125540] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:50:14.441 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T09:50:14.443 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:50:15.301 [DEBUG] [Thread-125540] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:50:15.302 [DEBUG] [Thread-125540] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:50:15.349 [DEBUG] [Thread-125540] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:50:15.349 [DEBUG] [Thread-125540] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:50:15.358 [DEBUG] [Thread-125540] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:50:15.367 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:50:15.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T09:50: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-12-31T09:50:15.386 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:50:15.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:50:15.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:50:15.396 [DEBUG] [Thread-125540] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:50:15.679 [DEBUG] [Thread-125542 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:50:19.826 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:50:19.827 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:50:30.722 [DEBUG] [Thread-125543 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:50:45.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T09:50:45.401 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T09:50:45.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T09:50:45.752 [DEBUG] [Thread-125544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:50:46.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 9, 50, 20), 39.95, 5.93, 0.0, 18.81, 24.4, 0, 0, 0, 2, 0, 0),)
2025-12-31T09:50:46.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 09:50:20
2025-12-31T09:50:46.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T09:50:46.384 [DEBUG] [Thread-125545] [transport.py] [_log()] starting thread (client mode): 0xb95d4550
2025-12-31T09:50:46.384 [DEBUG] [Thread-125545] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:50:46.404 [DEBUG] [Thread-125545] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T09:50:46.404 [INFO] [Thread-125545] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T09:50:46.407 [DEBUG] [Thread-125545] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:50:46.408 [DEBUG] [Thread-125545] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T09:50:46.408 [DEBUG] [Thread-125545] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:50:46.408 [DEBUG] [Thread-125545] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:50:46.408 [DEBUG] [Thread-125545] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:50:46.408 [DEBUG] [Thread-125545] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:50:46.408 [DEBUG] [Thread-125545] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:50:46.408 [DEBUG] [Thread-125545] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:50:46.408 [DEBUG] [Thread-125545] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:50:46.408 [DEBUG] [Thread-125545] [transport.py] [_log()] client lang: <none>
2025-12-31T09:50:46.408 [DEBUG] [Thread-125545] [transport.py] [_log()] server lang: <none>
2025-12-31T09:50:46.408 [DEBUG] [Thread-125545] [transport.py] [_log()] kex follows: False
2025-12-31T09:50:46.408 [DEBUG] [Thread-125545] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:50:46.408 [DEBUG] [Thread-125545] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:50:46.408 [DEBUG] [Thread-125545] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:50:46.408 [DEBUG] [Thread-125545] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:50:46.408 [DEBUG] [Thread-125545] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:50:46.408 [DEBUG] [Thread-125545] [transport.py] [_log()] Compression: none
2025-12-31T09:50:46.408 [DEBUG] [Thread-125545] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:50:46.424 [DEBUG] [Thread-125545] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:50:46.424 [DEBUG] [Thread-125545] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:50:46.425 [DEBUG] [Thread-125545] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T09:50:46.425 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T09:50:46.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:50:46.427 [DEBUG] [Thread-125545] [transport.py] [_log()] userauth is OK
2025-12-31T09:50:46.427 [DEBUG] [Thread-125545] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:50:46.427 [DEBUG] [Thread-125545] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:50:46.427 [DEBUG] [Thread-125545] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T09:50:46.428 [DEBUG] [Thread-125545] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:50:46.447 [INFO] [Thread-125545] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:50:46.448 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:50:47.085 [DEBUG] [Thread-125545] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:50:47.085 [DEBUG] [Thread-125545] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:50:47.085 [DEBUG] [Thread-125545] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T09:50:47.126 [DEBUG] [Thread-125545] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:50:47.126 [DEBUG] [Thread-125545] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:50:47.130 [DEBUG] [Thread-125545] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:50:47.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:50:47.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T09:50:47.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T09:50:47.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T09:50:47.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:50:47.151 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T09:50:47.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:50:47.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:50:47.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T09:50:47.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.326533 -999.00  +24.30  16.28     11   -7.80 1 1 1 1 1   888    0 43.62 492.84 ----- 17.9 16.3 304.4 20.7 31.1 -28.7 30.4 -27.3 28.8 -27.9 29.4 -25.0
2025-12-31T09:50:47.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T09:50:47.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T09:50:47.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.326533
2025-12-31T09:50:47.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T09:50:47.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T09:50:47.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T09:50:47.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T09:50:47.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T09:50:47.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T09:50:20', tmtdew=39.95, humidity=5.93, cloud=0.0, wind=18.81, temperature=24.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T07:50:12.451', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T09:50:47.153 [DEBUG] [Thread-125545] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:50:47.233 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T09:50:47.243 [DEBUG] [Thread-125548] [transport.py] [_log()] starting thread (client mode): 0xb95d6a40
2025-12-31T09:50:47.243 [DEBUG] [Thread-125548] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:50:47.258 [DEBUG] [Thread-125548] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T09:50:47.259 [INFO] [Thread-125548] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T09:50:47.266 [DEBUG] [Thread-125548] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:50:47.266 [DEBUG] [Thread-125548] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T09:50:47.267 [DEBUG] [Thread-125548] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:50:47.267 [DEBUG] [Thread-125548] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:50:47.267 [DEBUG] [Thread-125548] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:50:47.267 [DEBUG] [Thread-125548] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:50:47.267 [DEBUG] [Thread-125548] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:50:47.267 [DEBUG] [Thread-125548] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:50:47.267 [DEBUG] [Thread-125548] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:50:47.268 [DEBUG] [Thread-125548] [transport.py] [_log()] client lang: <none>
2025-12-31T09:50:47.268 [DEBUG] [Thread-125548] [transport.py] [_log()] server lang: <none>
2025-12-31T09:50:47.268 [DEBUG] [Thread-125548] [transport.py] [_log()] kex follows: False
2025-12-31T09:50:47.268 [DEBUG] [Thread-125548] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:50:47.268 [DEBUG] [Thread-125548] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:50:47.268 [DEBUG] [Thread-125548] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:50:47.268 [DEBUG] [Thread-125548] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:50:47.268 [DEBUG] [Thread-125548] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:50:47.268 [DEBUG] [Thread-125548] [transport.py] [_log()] Compression: none
2025-12-31T09:50:47.268 [DEBUG] [Thread-125548] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:50:47.325 [DEBUG] [Thread-125548] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:50:47.326 [DEBUG] [Thread-125548] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:50:47.327 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T09:50:47.327 [DEBUG] [Thread-125548] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T09:50:47.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:50:47.382 [DEBUG] [Thread-125548] [transport.py] [_log()] userauth is OK
2025-12-31T09:50:47.382 [DEBUG] [Thread-125548] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:50:47.382 [DEBUG] [Thread-125548] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:50:47.382 [DEBUG] [Thread-125548] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T09:50:47.382 [DEBUG] [Thread-125548] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:50:47.407 [INFO] [Thread-125548] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:50:47.407 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T09:50:47.408 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:50:48.253 [DEBUG] [Thread-125548] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:50:48.254 [DEBUG] [Thread-125548] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:50:48.303 [DEBUG] [Thread-125548] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:50:48.303 [DEBUG] [Thread-125548] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:50:48.313 [DEBUG] [Thread-125548] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:50:48.321 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:50:48.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-12-31T09:50:48.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T09:50:48.340 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:50:48.340 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:50:48.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:50:48.349 [DEBUG] [Thread-125548] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:51:00.786 [DEBUG] [Thread-125550 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:51:04.475 [DEBUG] [Thread-125551 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:51:15.852 [DEBUG] [Thread-125552 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:51:18.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T09:51:18.357 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T09:51:18.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T09:51:19.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 9, 50, 52), 40.35, 5.7, 0.0, 21.7, 24.97, 0, 0, 0, 2, 0, 0),)
2025-12-31T09:51:19.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 09:50:52
2025-12-31T09:51:19.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T09:51:19.352 [DEBUG] [Thread-125553] [transport.py] [_log()] starting thread (client mode): 0xb95d7850
2025-12-31T09:51:19.352 [DEBUG] [Thread-125553] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:51:19.367 [DEBUG] [Thread-125553] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T09:51:19.367 [INFO] [Thread-125553] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T09:51:19.370 [DEBUG] [Thread-125553] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:51:19.370 [DEBUG] [Thread-125553] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T09:51:19.370 [DEBUG] [Thread-125553] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:51:19.370 [DEBUG] [Thread-125553] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:51:19.370 [DEBUG] [Thread-125553] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:51:19.370 [DEBUG] [Thread-125553] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:51:19.370 [DEBUG] [Thread-125553] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:51:19.370 [DEBUG] [Thread-125553] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:51:19.370 [DEBUG] [Thread-125553] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:51:19.370 [DEBUG] [Thread-125553] [transport.py] [_log()] client lang: <none>
2025-12-31T09:51:19.370 [DEBUG] [Thread-125553] [transport.py] [_log()] server lang: <none>
2025-12-31T09:51:19.370 [DEBUG] [Thread-125553] [transport.py] [_log()] kex follows: False
2025-12-31T09:51:19.370 [DEBUG] [Thread-125553] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:51:19.370 [DEBUG] [Thread-125553] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:51:19.370 [DEBUG] [Thread-125553] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:51:19.371 [DEBUG] [Thread-125553] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:51:19.371 [DEBUG] [Thread-125553] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:51:19.371 [DEBUG] [Thread-125553] [transport.py] [_log()] Compression: none
2025-12-31T09:51:19.371 [DEBUG] [Thread-125553] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:51:19.387 [DEBUG] [Thread-125553] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:51:19.387 [DEBUG] [Thread-125553] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:51:19.387 [DEBUG] [Thread-125553] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T09:51:19.388 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T09:51:19.388 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:51:19.389 [DEBUG] [Thread-125553] [transport.py] [_log()] userauth is OK
2025-12-31T09:51:19.389 [DEBUG] [Thread-125553] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:51:19.389 [DEBUG] [Thread-125553] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:51:19.389 [DEBUG] [Thread-125553] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T09:51:19.389 [DEBUG] [Thread-125553] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:51:19.402 [INFO] [Thread-125553] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:51:19.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:51:19.969 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:51:19.970 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:51:20.167 [DEBUG] [Thread-125553] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:51:20.167 [DEBUG] [Thread-125553] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:51:20.168 [DEBUG] [Thread-125553] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T09:51:20.208 [DEBUG] [Thread-125553] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:51:20.208 [DEBUG] [Thread-125553] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:51:20.210 [DEBUG] [Thread-125553] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:51:20.224 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:51:20.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T09:51:20.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T09:51:20.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T09:51:20.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:51:20.235 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T09:51:20.235 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:51:20.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:51:20.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T09:51:20.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.326880 -999.00  +24.20  13.18     11   -7.50 1 1 1 1 1   888    0 42.54 438.94 ----- 21.2 13.2 311.6 24.6 31.3 -26.2 30.6 -25.4 28.8 -24.3 29.3 -26.8
2025-12-31T09:51:20.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T09:51:20.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T09:51:20.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.326880
2025-12-31T09:51:20.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T09:51:20.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T09:51:20.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T09:51:20.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T09:51:20.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T09:51:20.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T09:50:52', tmtdew=40.35, humidity=5.7, cloud=0.0, wind=21.7, temperature=24.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T07:50:42.432', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T09:51:20.238 [DEBUG] [Thread-125553] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:51:20.321 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T09:51:20.334 [DEBUG] [Thread-125556] [transport.py] [_log()] starting thread (client mode): 0xb6be4d90
2025-12-31T09:51:20.334 [DEBUG] [Thread-125556] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:51:20.352 [DEBUG] [Thread-125556] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T09:51:20.352 [INFO] [Thread-125556] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T09:51:20.359 [DEBUG] [Thread-125556] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:51:20.360 [DEBUG] [Thread-125556] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T09:51:20.360 [DEBUG] [Thread-125556] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:51:20.360 [DEBUG] [Thread-125556] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:51:20.360 [DEBUG] [Thread-125556] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:51:20.360 [DEBUG] [Thread-125556] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:51:20.360 [DEBUG] [Thread-125556] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:51:20.360 [DEBUG] [Thread-125556] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:51:20.360 [DEBUG] [Thread-125556] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:51:20.360 [DEBUG] [Thread-125556] [transport.py] [_log()] client lang: <none>
2025-12-31T09:51:20.360 [DEBUG] [Thread-125556] [transport.py] [_log()] server lang: <none>
2025-12-31T09:51:20.360 [DEBUG] [Thread-125556] [transport.py] [_log()] kex follows: False
2025-12-31T09:51:20.361 [DEBUG] [Thread-125556] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:51:20.361 [DEBUG] [Thread-125556] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:51:20.361 [DEBUG] [Thread-125556] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:51:20.361 [DEBUG] [Thread-125556] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:51:20.361 [DEBUG] [Thread-125556] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:51:20.361 [DEBUG] [Thread-125556] [transport.py] [_log()] Compression: none
2025-12-31T09:51:20.361 [DEBUG] [Thread-125556] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:51:20.416 [DEBUG] [Thread-125556] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:51:20.417 [DEBUG] [Thread-125556] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:51:20.417 [DEBUG] [Thread-125556] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T09:51:20.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T09:51:20.418 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:51:20.474 [DEBUG] [Thread-125556] [transport.py] [_log()] userauth is OK
2025-12-31T09:51:20.475 [DEBUG] [Thread-125556] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:51:20.475 [DEBUG] [Thread-125556] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:51:20.475 [DEBUG] [Thread-125556] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T09:51:20.476 [DEBUG] [Thread-125556] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:51:20.496 [INFO] [Thread-125556] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:51:20.496 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T09:51:20.497 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:51:21.341 [DEBUG] [Thread-125556] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:51:21.341 [DEBUG] [Thread-125556] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:51:21.389 [DEBUG] [Thread-125556] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:51:21.389 [DEBUG] [Thread-125556] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:51:21.399 [DEBUG] [Thread-125556] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:51:21.408 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:51:21.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T09:51:21.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T09:51:21.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:51:21.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:51:21.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:51:21.435 [DEBUG] [Thread-125556] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:51:30.887 [DEBUG] [Thread-125558 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:51:45.942 [DEBUG] [Thread-125559 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:51:51.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T09:51:51.436 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T09:51:51.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T09:51:52.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 9, 51, 24), 40.21, 5.77, 0.0, 21.16, 24.98, 0, 0, 0, 2, 0, 0),)
2025-12-31T09:51:52.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 09:51:24
2025-12-31T09:51:52.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T09:51:52.482 [DEBUG] [Thread-125560] [transport.py] [_log()] starting thread (client mode): 0xb95d4d90
2025-12-31T09:51:52.482 [DEBUG] [Thread-125560] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:51:52.502 [DEBUG] [Thread-125560] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T09:51:52.502 [INFO] [Thread-125560] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T09:51:52.504 [DEBUG] [Thread-125560] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:51:52.504 [DEBUG] [Thread-125560] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T09:51:52.504 [DEBUG] [Thread-125560] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:51:52.504 [DEBUG] [Thread-125560] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:51:52.504 [DEBUG] [Thread-125560] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:51:52.504 [DEBUG] [Thread-125560] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:51:52.504 [DEBUG] [Thread-125560] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:51:52.504 [DEBUG] [Thread-125560] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:51:52.504 [DEBUG] [Thread-125560] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:51:52.504 [DEBUG] [Thread-125560] [transport.py] [_log()] client lang: <none>
2025-12-31T09:51:52.504 [DEBUG] [Thread-125560] [transport.py] [_log()] server lang: <none>
2025-12-31T09:51:52.504 [DEBUG] [Thread-125560] [transport.py] [_log()] kex follows: False
2025-12-31T09:51:52.504 [DEBUG] [Thread-125560] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:51:52.504 [DEBUG] [Thread-125560] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:51:52.504 [DEBUG] [Thread-125560] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:51:52.504 [DEBUG] [Thread-125560] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:51:52.504 [DEBUG] [Thread-125560] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:51:52.504 [DEBUG] [Thread-125560] [transport.py] [_log()] Compression: none
2025-12-31T09:51:52.504 [DEBUG] [Thread-125560] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:51:52.521 [DEBUG] [Thread-125560] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:51:52.521 [DEBUG] [Thread-125560] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:51:52.521 [DEBUG] [Thread-125560] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T09:51:52.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T09:51:52.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:51:52.522 [DEBUG] [Thread-125560] [transport.py] [_log()] userauth is OK
2025-12-31T09:51:52.522 [DEBUG] [Thread-125560] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:51:52.522 [DEBUG] [Thread-125560] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:51:52.522 [DEBUG] [Thread-125560] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T09:51:52.522 [DEBUG] [Thread-125560] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:51:52.531 [INFO] [Thread-125560] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:51:52.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:51:53.184 [DEBUG] [Thread-125560] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:51:53.184 [DEBUG] [Thread-125560] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:51:53.184 [DEBUG] [Thread-125560] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T09:51:53.224 [DEBUG] [Thread-125560] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:51:53.224 [DEBUG] [Thread-125560] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:51:53.227 [DEBUG] [Thread-125560] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:51:53.239 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:51:53.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T09:51:53.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T09:51:53.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T09:51:53.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:51:53.245 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T09:51:53.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:51:53.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:51:53.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T09:51:53.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.327227 -999.00  +24.60  18.26     10   -7.90 1 1 1 1 1   888    0 42.70 440.07 ----- 18.9 18.3 280.4 26.5 31.1 -30.5 30.6 -27.5 28.9 -24.8 29.4 -24.8
2025-12-31T09:51:53.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T09:51:53.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T09:51:53.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.327227
2025-12-31T09:51:53.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T09:51:53.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T09:51:53.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T09:51:53.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T09:51:53.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T09:51:53.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T09:51:24', tmtdew=40.21, humidity=5.77, cloud=0.0, wind=21.16, temperature=24.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T07:51:12.413', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T09:51:53.246 [DEBUG] [Thread-125560] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:51:53.319 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T09:51:53.330 [DEBUG] [Thread-125563] [transport.py] [_log()] starting thread (client mode): 0xb6b6be80
2025-12-31T09:51:53.330 [DEBUG] [Thread-125563] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:51:53.345 [DEBUG] [Thread-125563] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T09:51:53.345 [INFO] [Thread-125563] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T09:51:53.352 [DEBUG] [Thread-125563] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:51:53.352 [DEBUG] [Thread-125563] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T09:51:53.352 [DEBUG] [Thread-125563] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:51:53.352 [DEBUG] [Thread-125563] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:51:53.352 [DEBUG] [Thread-125563] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:51:53.352 [DEBUG] [Thread-125563] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:51:53.352 [DEBUG] [Thread-125563] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:51:53.352 [DEBUG] [Thread-125563] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:51:53.352 [DEBUG] [Thread-125563] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:51:53.352 [DEBUG] [Thread-125563] [transport.py] [_log()] client lang: <none>
2025-12-31T09:51:53.352 [DEBUG] [Thread-125563] [transport.py] [_log()] server lang: <none>
2025-12-31T09:51:53.352 [DEBUG] [Thread-125563] [transport.py] [_log()] kex follows: False
2025-12-31T09:51:53.352 [DEBUG] [Thread-125563] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:51:53.352 [DEBUG] [Thread-125563] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:51:53.352 [DEBUG] [Thread-125563] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:51:53.353 [DEBUG] [Thread-125563] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:51:53.353 [DEBUG] [Thread-125563] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:51:53.353 [DEBUG] [Thread-125563] [transport.py] [_log()] Compression: none
2025-12-31T09:51:53.353 [DEBUG] [Thread-125563] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:51:53.410 [DEBUG] [Thread-125563] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:51:53.410 [DEBUG] [Thread-125563] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:51:53.410 [DEBUG] [Thread-125563] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T09:51:53.411 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T09:51:53.411 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:51:53.468 [DEBUG] [Thread-125563] [transport.py] [_log()] userauth is OK
2025-12-31T09:51:53.468 [DEBUG] [Thread-125563] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:51:53.469 [DEBUG] [Thread-125563] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:51:53.469 [DEBUG] [Thread-125563] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T09:51:53.469 [DEBUG] [Thread-125563] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:51:53.483 [INFO] [Thread-125563] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:51:53.483 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T09:51:53.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:51:54.264 [DEBUG] [Thread-125563] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:51:54.264 [DEBUG] [Thread-125563] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:51:54.312 [DEBUG] [Thread-125563] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:51:54.312 [DEBUG] [Thread-125563] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:51:54.322 [DEBUG] [Thread-125563] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:51:54.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:51:54.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T09:51:54.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T09:51:54.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:51:54.350 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:51:54.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:51:54.358 [DEBUG] [Thread-125563] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:52:00.975 [DEBUG] [Thread-125565 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:52:04.529 [DEBUG] [Thread-125566 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:52:16.029 [DEBUG] [Thread-125567 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:52:20.109 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:52:20.110 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:52:24.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T09:52:24.381 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T09:52:24.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T09:52:25.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 9, 51, 56), 40.72, 5.7, 0.0, 16.39, 24.48, 0, 0, 0, 2, 0, 0),)
2025-12-31T09:52:25.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 09:51:56
2025-12-31T09:52:25.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T09:52:25.375 [DEBUG] [Thread-125568] [transport.py] [_log()] starting thread (client mode): 0xb6b6ac20
2025-12-31T09:52:25.375 [DEBUG] [Thread-125568] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:52:25.394 [DEBUG] [Thread-125568] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T09:52:25.394 [INFO] [Thread-125568] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T09:52:25.397 [DEBUG] [Thread-125568] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:52:25.398 [DEBUG] [Thread-125568] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T09:52:25.398 [DEBUG] [Thread-125568] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:52:25.398 [DEBUG] [Thread-125568] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:52:25.398 [DEBUG] [Thread-125568] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:52:25.398 [DEBUG] [Thread-125568] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:52:25.398 [DEBUG] [Thread-125568] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:52:25.398 [DEBUG] [Thread-125568] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:52:25.398 [DEBUG] [Thread-125568] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:52:25.398 [DEBUG] [Thread-125568] [transport.py] [_log()] client lang: <none>
2025-12-31T09:52:25.398 [DEBUG] [Thread-125568] [transport.py] [_log()] server lang: <none>
2025-12-31T09:52:25.398 [DEBUG] [Thread-125568] [transport.py] [_log()] kex follows: False
2025-12-31T09:52:25.398 [DEBUG] [Thread-125568] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:52:25.398 [DEBUG] [Thread-125568] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:52:25.398 [DEBUG] [Thread-125568] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:52:25.398 [DEBUG] [Thread-125568] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:52:25.399 [DEBUG] [Thread-125568] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:52:25.399 [DEBUG] [Thread-125568] [transport.py] [_log()] Compression: none
2025-12-31T09:52:25.399 [DEBUG] [Thread-125568] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:52:25.421 [DEBUG] [Thread-125568] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:52:25.422 [DEBUG] [Thread-125568] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:52:25.423 [DEBUG] [Thread-125568] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T09:52:25.424 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T09:52:25.424 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:52:25.424 [DEBUG] [Thread-125568] [transport.py] [_log()] userauth is OK
2025-12-31T09:52:25.425 [DEBUG] [Thread-125568] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:52:25.425 [DEBUG] [Thread-125568] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:52:25.425 [DEBUG] [Thread-125568] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T09:52:25.425 [DEBUG] [Thread-125568] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:52:25.434 [INFO] [Thread-125568] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:52:25.434 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:52:26.080 [DEBUG] [Thread-125568] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:52:26.080 [DEBUG] [Thread-125568] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:52:26.081 [DEBUG] [Thread-125568] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T09:52:26.121 [DEBUG] [Thread-125568] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:52:26.121 [DEBUG] [Thread-125568] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:52:26.125 [DEBUG] [Thread-125568] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:52:26.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:52:26.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T09:52:26.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T09:52:26.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T09:52:26.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:52:26.147 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T09:52:26.147 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:52:26.147 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:52:26.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T09:52:26.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.327574 -999.00  +24.40  24.73     10   -8.10 1 1 1 1 1   888    0 42.18 408.86 ----- 20.6 24.7 290.5 27.3 30.9 -29.4 30.5 -27.4 28.6 -30.0 29.3 -27.0
2025-12-31T09:52:26.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T09:52:26.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T09:52:26.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.327574
2025-12-31T09:52:26.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T09:52:26.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T09:52:26.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T09:52:26.149 [DEBUG] [Thread-125568] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:52:26.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T09:52:26.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T09:52:26.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T09:51:56', tmtdew=40.72, humidity=5.7, cloud=0.0, wind=16.39, temperature=24.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T07:51:42.394', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T09:52:26.234 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T09:52:26.247 [DEBUG] [Thread-125571] [transport.py] [_log()] starting thread (client mode): 0xb6b20bb0
2025-12-31T09:52:26.247 [DEBUG] [Thread-125571] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:52:26.263 [DEBUG] [Thread-125571] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T09:52:26.263 [INFO] [Thread-125571] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T09:52:26.270 [DEBUG] [Thread-125571] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:52:26.271 [DEBUG] [Thread-125571] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T09:52:26.271 [DEBUG] [Thread-125571] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:52:26.271 [DEBUG] [Thread-125571] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:52:26.271 [DEBUG] [Thread-125571] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:52:26.271 [DEBUG] [Thread-125571] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:52:26.271 [DEBUG] [Thread-125571] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:52:26.271 [DEBUG] [Thread-125571] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:52:26.271 [DEBUG] [Thread-125571] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:52:26.271 [DEBUG] [Thread-125571] [transport.py] [_log()] client lang: <none>
2025-12-31T09:52:26.271 [DEBUG] [Thread-125571] [transport.py] [_log()] server lang: <none>
2025-12-31T09:52:26.271 [DEBUG] [Thread-125571] [transport.py] [_log()] kex follows: False
2025-12-31T09:52:26.271 [DEBUG] [Thread-125571] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:52:26.271 [DEBUG] [Thread-125571] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:52:26.271 [DEBUG] [Thread-125571] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:52:26.272 [DEBUG] [Thread-125571] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:52:26.272 [DEBUG] [Thread-125571] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:52:26.272 [DEBUG] [Thread-125571] [transport.py] [_log()] Compression: none
2025-12-31T09:52:26.272 [DEBUG] [Thread-125571] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:52:26.329 [DEBUG] [Thread-125571] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:52:26.329 [DEBUG] [Thread-125571] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:52:26.330 [DEBUG] [Thread-125571] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T09:52:26.330 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T09:52:26.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:52:26.389 [DEBUG] [Thread-125571] [transport.py] [_log()] userauth is OK
2025-12-31T09:52:26.389 [DEBUG] [Thread-125571] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:52:26.390 [DEBUG] [Thread-125571] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:52:26.390 [DEBUG] [Thread-125571] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T09:52:26.390 [DEBUG] [Thread-125571] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:52:26.411 [INFO] [Thread-125571] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:52: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-12-31T09:52:26.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:52:27.302 [DEBUG] [Thread-125571] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:52:27.302 [DEBUG] [Thread-125571] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:52:27.350 [DEBUG] [Thread-125571] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:52:27.350 [DEBUG] [Thread-125571] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:52:27.358 [DEBUG] [Thread-125571] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:52:27.366 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:52:27.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-12-31T09:52:27.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T09:52:27.382 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:52:27.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:52:27.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:52:27.390 [DEBUG] [Thread-125571] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:52:31.064 [DEBUG] [Thread-125573 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:52:46.108 [DEBUG] [Thread-125574 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:52:57.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T09:52:57.413 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T09:52:57.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T09:52:58.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 9, 52, 28), 40.45, 5.81, 0.0, 16.55, 24.42, 0, 0, 0, 2, 0, 0),)
2025-12-31T09:52:58.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 09:52:28
2025-12-31T09:52:58.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T09:52:58.386 [DEBUG] [Thread-125575] [transport.py] [_log()] starting thread (client mode): 0xb6b6b340
2025-12-31T09:52:58.386 [DEBUG] [Thread-125575] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:52:58.406 [DEBUG] [Thread-125575] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T09:52:58.406 [INFO] [Thread-125575] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T09:52:58.410 [DEBUG] [Thread-125575] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:52:58.410 [DEBUG] [Thread-125575] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T09:52:58.410 [DEBUG] [Thread-125575] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:52:58.410 [DEBUG] [Thread-125575] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:52:58.410 [DEBUG] [Thread-125575] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:52:58.410 [DEBUG] [Thread-125575] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:52:58.410 [DEBUG] [Thread-125575] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:52:58.410 [DEBUG] [Thread-125575] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:52:58.410 [DEBUG] [Thread-125575] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:52:58.410 [DEBUG] [Thread-125575] [transport.py] [_log()] client lang: <none>
2025-12-31T09:52:58.410 [DEBUG] [Thread-125575] [transport.py] [_log()] server lang: <none>
2025-12-31T09:52:58.410 [DEBUG] [Thread-125575] [transport.py] [_log()] kex follows: False
2025-12-31T09:52:58.410 [DEBUG] [Thread-125575] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:52:58.410 [DEBUG] [Thread-125575] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:52:58.410 [DEBUG] [Thread-125575] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:52:58.410 [DEBUG] [Thread-125575] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:52:58.410 [DEBUG] [Thread-125575] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:52:58.410 [DEBUG] [Thread-125575] [transport.py] [_log()] Compression: none
2025-12-31T09:52:58.410 [DEBUG] [Thread-125575] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:52:58.427 [DEBUG] [Thread-125575] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:52:58.428 [DEBUG] [Thread-125575] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:52:58.428 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T09:52:58.429 [DEBUG] [Thread-125575] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T09:52:58.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:52:58.431 [DEBUG] [Thread-125575] [transport.py] [_log()] userauth is OK
2025-12-31T09:52:58.431 [DEBUG] [Thread-125575] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:52:58.431 [DEBUG] [Thread-125575] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:52:58.431 [DEBUG] [Thread-125575] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T09:52:58.431 [DEBUG] [Thread-125575] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:52:58.451 [INFO] [Thread-125575] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:52:58.451 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:52:59.126 [DEBUG] [Thread-125575] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:52:59.126 [DEBUG] [Thread-125575] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:52:59.127 [DEBUG] [Thread-125575] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T09:52:59.168 [DEBUG] [Thread-125575] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:52:59.168 [DEBUG] [Thread-125575] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:52:59.171 [DEBUG] [Thread-125575] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:52:59.186 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:52:59.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T09:52:59.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T09:52:59.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T09:52:59.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:52:59.201 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T09:52:59.201 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:52:59.201 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:52:59.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T09:52:59.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.327922 -999.00  +24.20  16.70     10   -8.20 1 1 1 1 1   888    0 42.13 403.12 ----- 19.4 16.7 288.8 30.9 30.6 -30.0 30.1 -28.7 28.5 -33.2 29.2 -27.2
2025-12-31T09:52:59.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T09:52:59.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T09:52:59.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.327922
2025-12-31T09:52:59.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T09:52:59.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T09:52:59.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T09:52:59.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T09:52:59.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T09:52:59.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T09:52:28', tmtdew=40.45, humidity=5.81, cloud=0.0, wind=16.55, temperature=24.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T07:52:12.461', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T09:52:59.203 [DEBUG] [Thread-125575] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:52:59.280 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T09:52:59.292 [DEBUG] [Thread-125578] [transport.py] [_log()] starting thread (client mode): 0xb6b69b40
2025-12-31T09:52:59.292 [DEBUG] [Thread-125578] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:52:59.307 [DEBUG] [Thread-125578] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T09:52:59.307 [INFO] [Thread-125578] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T09:52:59.314 [DEBUG] [Thread-125578] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:52:59.315 [DEBUG] [Thread-125578] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T09:52:59.315 [DEBUG] [Thread-125578] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:52:59.315 [DEBUG] [Thread-125578] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:52:59.315 [DEBUG] [Thread-125578] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:52:59.315 [DEBUG] [Thread-125578] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:52:59.315 [DEBUG] [Thread-125578] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:52:59.315 [DEBUG] [Thread-125578] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:52:59.315 [DEBUG] [Thread-125578] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:52:59.315 [DEBUG] [Thread-125578] [transport.py] [_log()] client lang: <none>
2025-12-31T09:52:59.315 [DEBUG] [Thread-125578] [transport.py] [_log()] server lang: <none>
2025-12-31T09:52:59.316 [DEBUG] [Thread-125578] [transport.py] [_log()] kex follows: False
2025-12-31T09:52:59.316 [DEBUG] [Thread-125578] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:52:59.316 [DEBUG] [Thread-125578] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:52:59.316 [DEBUG] [Thread-125578] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:52:59.316 [DEBUG] [Thread-125578] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:52:59.316 [DEBUG] [Thread-125578] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:52:59.316 [DEBUG] [Thread-125578] [transport.py] [_log()] Compression: none
2025-12-31T09:52:59.316 [DEBUG] [Thread-125578] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:52:59.381 [DEBUG] [Thread-125578] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:52:59.381 [DEBUG] [Thread-125578] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:52:59.382 [DEBUG] [Thread-125578] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T09:52:59.382 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T09:52:59.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:52:59.437 [DEBUG] [Thread-125578] [transport.py] [_log()] userauth is OK
2025-12-31T09:52:59.437 [DEBUG] [Thread-125578] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:52:59.438 [DEBUG] [Thread-125578] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:52:59.438 [DEBUG] [Thread-125578] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T09:52:59.438 [DEBUG] [Thread-125578] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:52:59.456 [INFO] [Thread-125578] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:52:59.457 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T09:52:59.458 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:53:00.286 [DEBUG] [Thread-125578] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:53:00.286 [DEBUG] [Thread-125578] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:53:00.334 [DEBUG] [Thread-125578] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:53:00.334 [DEBUG] [Thread-125578] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:53:00.344 [DEBUG] [Thread-125578] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:53:00.353 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:53:00.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T09:53:00.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T09:53:00.372 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:53:00.372 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:53:00.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:53:00.381 [DEBUG] [Thread-125578] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:53:01.139 [DEBUG] [Thread-125580 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:53:04.583 [DEBUG] [Thread-125581 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:53:16.176 [DEBUG] [Thread-125582 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:53:20.251 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:53:20.252 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:53:30.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T09:53:30.403 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T09:53:30.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T09:53:31.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 9, 53), 40.45, 5.7, 0.0, 13.48, 24.37, 0, 0, 0, 2, 0, 0),)
2025-12-31T09:53:31.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 09:53:00
2025-12-31T09:53:31.209 [DEBUG] [Thread-125583 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:53:31.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T09:53:31.385 [DEBUG] [Thread-125584] [transport.py] [_log()] starting thread (client mode): 0xb6b4aec0
2025-12-31T09:53:31.385 [DEBUG] [Thread-125584] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:53:31.405 [DEBUG] [Thread-125584] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T09:53:31.405 [INFO] [Thread-125584] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T09:53:31.407 [DEBUG] [Thread-125584] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:53:31.408 [DEBUG] [Thread-125584] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T09:53:31.408 [DEBUG] [Thread-125584] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:53:31.408 [DEBUG] [Thread-125584] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:53:31.408 [DEBUG] [Thread-125584] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:53:31.408 [DEBUG] [Thread-125584] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:53:31.408 [DEBUG] [Thread-125584] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:53:31.408 [DEBUG] [Thread-125584] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:53:31.408 [DEBUG] [Thread-125584] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:53:31.408 [DEBUG] [Thread-125584] [transport.py] [_log()] client lang: <none>
2025-12-31T09:53:31.408 [DEBUG] [Thread-125584] [transport.py] [_log()] server lang: <none>
2025-12-31T09:53:31.408 [DEBUG] [Thread-125584] [transport.py] [_log()] kex follows: False
2025-12-31T09:53:31.408 [DEBUG] [Thread-125584] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:53:31.408 [DEBUG] [Thread-125584] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:53:31.408 [DEBUG] [Thread-125584] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:53:31.409 [DEBUG] [Thread-125584] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:53:31.409 [DEBUG] [Thread-125584] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:53:31.409 [DEBUG] [Thread-125584] [transport.py] [_log()] Compression: none
2025-12-31T09:53:31.409 [DEBUG] [Thread-125584] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:53:31.427 [DEBUG] [Thread-125584] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:53:31.427 [DEBUG] [Thread-125584] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:53:31.428 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T09:53:31.428 [DEBUG] [Thread-125584] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T09:53:31.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:53:31.431 [DEBUG] [Thread-125584] [transport.py] [_log()] userauth is OK
2025-12-31T09:53:31.431 [DEBUG] [Thread-125584] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:53:31.431 [DEBUG] [Thread-125584] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:53:31.431 [DEBUG] [Thread-125584] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T09:53:31.431 [DEBUG] [Thread-125584] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:53:31.448 [INFO] [Thread-125584] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:53:31.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:53:32.172 [DEBUG] [Thread-125584] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:53:32.172 [DEBUG] [Thread-125584] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:53:32.173 [DEBUG] [Thread-125584] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T09:53:32.213 [DEBUG] [Thread-125584] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:53:32.213 [DEBUG] [Thread-125584] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:53:32.216 [DEBUG] [Thread-125584] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:53:32.229 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:53:32.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T09:53:32.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T09:53:32.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T09:53:32.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:53:32.240 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T09:53:32.241 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:53:32.241 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:53:32.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T09:53:32.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.328269 -999.00  +23.90  12.66     11   -8.30 1 1 1 1 1   888    0 43.85 444.72 ----- 11.9 12.7 295.4 20.9 30.4 -30.2 30.0 -29.0 28.3 -27.9 29.0 -28.1
2025-12-31T09:53:32.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T09:53:32.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T09:53:32.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.328269
2025-12-31T09:53:32.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T09:53:32.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T09:53:32.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T09:53:32.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T09:53:32.243 [DEBUG] [Thread-125584] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:53:32.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T09:53:32.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T09:53:00', tmtdew=40.45, humidity=5.7, cloud=0.0, wind=13.48, temperature=24.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T07:52:42.442', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T09:53:32.326 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T09:53:32.338 [DEBUG] [Thread-125587] [transport.py] [_log()] starting thread (client mode): 0xb6be7c10
2025-12-31T09:53:32.338 [DEBUG] [Thread-125587] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:53:32.353 [DEBUG] [Thread-125587] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T09:53:32.353 [INFO] [Thread-125587] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T09:53:32.361 [DEBUG] [Thread-125587] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:53:32.361 [DEBUG] [Thread-125587] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T09:53:32.361 [DEBUG] [Thread-125587] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:53:32.361 [DEBUG] [Thread-125587] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:53:32.362 [DEBUG] [Thread-125587] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:53:32.362 [DEBUG] [Thread-125587] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:53:32.362 [DEBUG] [Thread-125587] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:53:32.362 [DEBUG] [Thread-125587] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:53:32.362 [DEBUG] [Thread-125587] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:53:32.362 [DEBUG] [Thread-125587] [transport.py] [_log()] client lang: <none>
2025-12-31T09:53:32.362 [DEBUG] [Thread-125587] [transport.py] [_log()] server lang: <none>
2025-12-31T09:53:32.362 [DEBUG] [Thread-125587] [transport.py] [_log()] kex follows: False
2025-12-31T09:53:32.362 [DEBUG] [Thread-125587] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:53:32.363 [DEBUG] [Thread-125587] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:53:32.363 [DEBUG] [Thread-125587] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:53:32.363 [DEBUG] [Thread-125587] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:53:32.363 [DEBUG] [Thread-125587] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:53:32.363 [DEBUG] [Thread-125587] [transport.py] [_log()] Compression: none
2025-12-31T09:53:32.363 [DEBUG] [Thread-125587] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:53:32.424 [DEBUG] [Thread-125587] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:53:32.425 [DEBUG] [Thread-125587] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:53:32.425 [DEBUG] [Thread-125587] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T09:53:32.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T09:53:32.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:53:32.480 [DEBUG] [Thread-125587] [transport.py] [_log()] userauth is OK
2025-12-31T09:53:32.480 [DEBUG] [Thread-125587] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:53:32.480 [DEBUG] [Thread-125587] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:53:32.480 [DEBUG] [Thread-125587] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T09:53:32.480 [DEBUG] [Thread-125587] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:53:32.499 [INFO] [Thread-125587] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:53:32.499 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T09:53:32.500 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:53:33.350 [DEBUG] [Thread-125587] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:53:33.350 [DEBUG] [Thread-125587] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:53:33.398 [DEBUG] [Thread-125587] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:53:33.398 [DEBUG] [Thread-125587] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:53:33.406 [DEBUG] [Thread-125587] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:53:33.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:53:33.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-12-31T09:53:33.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-12-31T09:53:33.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:53:33.431 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:53:33.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:53:33.441 [DEBUG] [Thread-125587] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:53:46.239 [DEBUG] [Thread-125589 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:54:01.284 [DEBUG] [Thread-125590 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:54:03.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T09:54:03.462 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T09:54:03.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T09:54:04.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 9, 53, 32), 40.21, 5.8, 0.0, 12.6, 24.27, 0, 0, 0, 2, 0, 0),)
2025-12-31T09:54:04.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 09:53:32
2025-12-31T09:54:04.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T09:54:04.462 [DEBUG] [Thread-125591] [transport.py] [_log()] starting thread (client mode): 0xb6be4250
2025-12-31T09:54:04.462 [DEBUG] [Thread-125591] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:54:04.489 [DEBUG] [Thread-125591] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T09:54:04.490 [INFO] [Thread-125591] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T09:54:04.492 [DEBUG] [Thread-125591] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:54:04.493 [DEBUG] [Thread-125591] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T09:54:04.493 [DEBUG] [Thread-125591] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:54:04.493 [DEBUG] [Thread-125591] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:54:04.493 [DEBUG] [Thread-125591] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:54:04.493 [DEBUG] [Thread-125591] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:54:04.493 [DEBUG] [Thread-125591] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:54:04.493 [DEBUG] [Thread-125591] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:54:04.493 [DEBUG] [Thread-125591] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:54:04.493 [DEBUG] [Thread-125591] [transport.py] [_log()] client lang: <none>
2025-12-31T09:54:04.493 [DEBUG] [Thread-125591] [transport.py] [_log()] server lang: <none>
2025-12-31T09:54:04.493 [DEBUG] [Thread-125591] [transport.py] [_log()] kex follows: False
2025-12-31T09:54:04.493 [DEBUG] [Thread-125591] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:54:04.493 [DEBUG] [Thread-125591] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:54:04.493 [DEBUG] [Thread-125591] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:54:04.493 [DEBUG] [Thread-125591] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:54:04.493 [DEBUG] [Thread-125591] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:54:04.493 [DEBUG] [Thread-125591] [transport.py] [_log()] Compression: none
2025-12-31T09:54:04.493 [DEBUG] [Thread-125591] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:54:04.508 [DEBUG] [Thread-125591] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:54:04.508 [DEBUG] [Thread-125591] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:54:04.509 [DEBUG] [Thread-125591] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T09:54:04.509 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T09:54:04.510 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:54:04.512 [DEBUG] [Thread-125591] [transport.py] [_log()] userauth is OK
2025-12-31T09:54:04.512 [DEBUG] [Thread-125591] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:54:04.512 [DEBUG] [Thread-125591] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:54:04.512 [DEBUG] [Thread-125591] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T09:54:04.512 [DEBUG] [Thread-125591] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:54:04.531 [INFO] [Thread-125591] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:54:04.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:54:04.632 [DEBUG] [Thread-125593 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:54:05.165 [DEBUG] [Thread-125591] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:54:05.166 [DEBUG] [Thread-125591] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:54:05.166 [DEBUG] [Thread-125591] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T09:54:05.206 [DEBUG] [Thread-125591] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:54:05.207 [DEBUG] [Thread-125591] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:54:05.209 [DEBUG] [Thread-125591] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:54:05.221 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:54:05.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T09:54:05.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T09:54:05.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T09:54:05.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:54:05.226 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T09:54:05.226 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:54:05.226 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:54:05.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T09:54:05.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.328963 -999.00  +24.00   9.53     12   -6.90 1 1 1 1 1   888    0 43.23 427.21 ----- 13.0 9.5 262.5 15.7 30.2 -28.6 29.6 -28.6 28.1 -29.1 28.6 -27.3
2025-12-31T09:54:05.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T09:54:05.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T09:54:05.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.328963
2025-12-31T09:54:05.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T09:54:05.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T09:54:05.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T09:54:05.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T09:54:05.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T09:54:05.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T09:53:32', tmtdew=40.21, humidity=5.8, cloud=0.0, wind=12.6, temperature=24.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T07:53:42.403', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T09:54:05.227 [DEBUG] [Thread-125591] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:54:05.302 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T09:54:05.314 [DEBUG] [Thread-125595] [transport.py] [_log()] starting thread (client mode): 0xb6b1acb0
2025-12-31T09:54:05.314 [DEBUG] [Thread-125595] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:54:05.330 [DEBUG] [Thread-125595] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T09:54:05.330 [INFO] [Thread-125595] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T09:54:05.337 [DEBUG] [Thread-125595] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:54:05.338 [DEBUG] [Thread-125595] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T09:54:05.338 [DEBUG] [Thread-125595] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:54:05.338 [DEBUG] [Thread-125595] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:54:05.338 [DEBUG] [Thread-125595] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:54:05.338 [DEBUG] [Thread-125595] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:54:05.338 [DEBUG] [Thread-125595] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:54:05.338 [DEBUG] [Thread-125595] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:54:05.338 [DEBUG] [Thread-125595] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:54:05.338 [DEBUG] [Thread-125595] [transport.py] [_log()] client lang: <none>
2025-12-31T09:54:05.338 [DEBUG] [Thread-125595] [transport.py] [_log()] server lang: <none>
2025-12-31T09:54:05.338 [DEBUG] [Thread-125595] [transport.py] [_log()] kex follows: False
2025-12-31T09:54:05.338 [DEBUG] [Thread-125595] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:54:05.338 [DEBUG] [Thread-125595] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:54:05.338 [DEBUG] [Thread-125595] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:54:05.338 [DEBUG] [Thread-125595] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:54:05.338 [DEBUG] [Thread-125595] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:54:05.338 [DEBUG] [Thread-125595] [transport.py] [_log()] Compression: none
2025-12-31T09:54:05.338 [DEBUG] [Thread-125595] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:54:05.394 [DEBUG] [Thread-125595] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:54:05.395 [DEBUG] [Thread-125595] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:54:05.395 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T09:54:05.395 [DEBUG] [Thread-125595] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T09:54:05.395 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:54:05.456 [DEBUG] [Thread-125595] [transport.py] [_log()] userauth is OK
2025-12-31T09:54:05.456 [DEBUG] [Thread-125595] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:54:05.456 [DEBUG] [Thread-125595] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:54:05.456 [DEBUG] [Thread-125595] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T09:54:05.456 [DEBUG] [Thread-125595] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:54:05.473 [INFO] [Thread-125595] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:54:05.473 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T09:54:05.473 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:54:06.345 [DEBUG] [Thread-125595] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:54:06.345 [DEBUG] [Thread-125595] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:54:06.393 [DEBUG] [Thread-125595] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:54:06.393 [DEBUG] [Thread-125595] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:54:06.402 [DEBUG] [Thread-125595] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:54:06.409 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:54:06.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T09:54:06.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T09:54:06.425 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:54:06.425 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:54:06.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:54:06.433 [DEBUG] [Thread-125595] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:54:16.317 [DEBUG] [Thread-125597 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:54:20.399 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:54:20.400 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:54:31.361 [DEBUG] [Thread-125598 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:54:36.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T09:54:36.456 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T09:54:36.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T09:54:37.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 9, 54, 4), 40.04, 5.86, 0.0, 14.63, 24.19, 0, 0, 0, 2, 0, 0),)
2025-12-31T09:54:37.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 09:54:04
2025-12-31T09:54:37.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T09:54:37.507 [DEBUG] [Thread-125599] [transport.py] [_log()] starting thread (client mode): 0xb6be5db0
2025-12-31T09:54:37.507 [DEBUG] [Thread-125599] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:54:37.528 [DEBUG] [Thread-125599] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T09:54:37.529 [INFO] [Thread-125599] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T09:54:37.532 [DEBUG] [Thread-125599] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:54:37.532 [DEBUG] [Thread-125599] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T09:54:37.532 [DEBUG] [Thread-125599] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:54:37.532 [DEBUG] [Thread-125599] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:54:37.532 [DEBUG] [Thread-125599] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:54:37.532 [DEBUG] [Thread-125599] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:54:37.532 [DEBUG] [Thread-125599] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:54:37.532 [DEBUG] [Thread-125599] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:54:37.532 [DEBUG] [Thread-125599] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:54:37.532 [DEBUG] [Thread-125599] [transport.py] [_log()] client lang: <none>
2025-12-31T09:54:37.532 [DEBUG] [Thread-125599] [transport.py] [_log()] server lang: <none>
2025-12-31T09:54:37.532 [DEBUG] [Thread-125599] [transport.py] [_log()] kex follows: False
2025-12-31T09:54:37.532 [DEBUG] [Thread-125599] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:54:37.532 [DEBUG] [Thread-125599] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:54:37.532 [DEBUG] [Thread-125599] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:54:37.532 [DEBUG] [Thread-125599] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:54:37.532 [DEBUG] [Thread-125599] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:54:37.533 [DEBUG] [Thread-125599] [transport.py] [_log()] Compression: none
2025-12-31T09:54:37.533 [DEBUG] [Thread-125599] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:54:37.552 [DEBUG] [Thread-125599] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:54:37.552 [DEBUG] [Thread-125599] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:54:37.552 [DEBUG] [Thread-125599] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T09:54:37.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T09:54:37.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:54:37.553 [DEBUG] [Thread-125599] [transport.py] [_log()] userauth is OK
2025-12-31T09:54:37.553 [DEBUG] [Thread-125599] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:54:37.554 [DEBUG] [Thread-125599] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:54:37.554 [DEBUG] [Thread-125599] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T09:54:37.554 [DEBUG] [Thread-125599] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:54:37.573 [INFO] [Thread-125599] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:54:37.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:54:38.295 [DEBUG] [Thread-125599] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:54:38.295 [DEBUG] [Thread-125599] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:54:38.295 [DEBUG] [Thread-125599] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T09:54:38.335 [DEBUG] [Thread-125599] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:54:38.335 [DEBUG] [Thread-125599] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:54:38.337 [DEBUG] [Thread-125599] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:54:38.343 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:54:38.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T09:54:38.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T09:54:38.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T09:54:38.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:54:38.348 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T09:54:38.348 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:54:38.348 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:54:38.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T09:54:38.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.329310 -999.00  +24.10  11.47     12   -6.80 1 1 1 1 1   888    0 43.13 427.59 ----- 11.8 11.5 285.0 17.6 29.9 -30.9 29.5 -27.5 28.0 -27.9 28.4 -28.8
2025-12-31T09:54:38.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T09:54:38.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T09:54:38.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.329310
2025-12-31T09:54:38.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T09:54:38.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T09:54:38.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T09:54:38.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T09:54:38.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T09:54:38.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T09:54:04', tmtdew=40.04, humidity=5.86, cloud=0.0, wind=14.63, temperature=24.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T07:54:12.384', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T09:54:38.349 [DEBUG] [Thread-125599] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:54:38.422 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T09:54:38.433 [DEBUG] [Thread-125602] [transport.py] [_log()] starting thread (client mode): 0xb6b20fa0
2025-12-31T09:54:38.433 [DEBUG] [Thread-125602] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:54:38.448 [DEBUG] [Thread-125602] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T09:54:38.448 [INFO] [Thread-125602] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T09:54:38.456 [DEBUG] [Thread-125602] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:54:38.456 [DEBUG] [Thread-125602] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T09:54:38.456 [DEBUG] [Thread-125602] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:54:38.456 [DEBUG] [Thread-125602] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:54:38.456 [DEBUG] [Thread-125602] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:54:38.456 [DEBUG] [Thread-125602] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:54:38.456 [DEBUG] [Thread-125602] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:54:38.456 [DEBUG] [Thread-125602] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:54:38.456 [DEBUG] [Thread-125602] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:54:38.456 [DEBUG] [Thread-125602] [transport.py] [_log()] client lang: <none>
2025-12-31T09:54:38.456 [DEBUG] [Thread-125602] [transport.py] [_log()] server lang: <none>
2025-12-31T09:54:38.456 [DEBUG] [Thread-125602] [transport.py] [_log()] kex follows: False
2025-12-31T09:54:38.456 [DEBUG] [Thread-125602] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:54:38.456 [DEBUG] [Thread-125602] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:54:38.456 [DEBUG] [Thread-125602] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:54:38.456 [DEBUG] [Thread-125602] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:54:38.456 [DEBUG] [Thread-125602] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:54:38.456 [DEBUG] [Thread-125602] [transport.py] [_log()] Compression: none
2025-12-31T09:54:38.456 [DEBUG] [Thread-125602] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:54:38.510 [DEBUG] [Thread-125602] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:54:38.510 [DEBUG] [Thread-125602] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:54:38.510 [DEBUG] [Thread-125602] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T09:54:38.510 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T09:54:38.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:54:38.568 [DEBUG] [Thread-125602] [transport.py] [_log()] userauth is OK
2025-12-31T09:54:38.568 [DEBUG] [Thread-125602] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:54:38.568 [DEBUG] [Thread-125602] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:54:38.568 [DEBUG] [Thread-125602] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T09:54:38.568 [DEBUG] [Thread-125602] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:54:38.582 [INFO] [Thread-125602] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:54:38.582 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T09:54:38.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:54:39.396 [DEBUG] [Thread-125602] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:54:39.397 [DEBUG] [Thread-125602] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:54:39.445 [DEBUG] [Thread-125602] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:54:39.445 [DEBUG] [Thread-125602] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:54:39.454 [DEBUG] [Thread-125602] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:54:39.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:54:39.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T09:54:39.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T09:54:39.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:54:39.482 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:54:39.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:54:39.491 [DEBUG] [Thread-125602] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:54:46.400 [DEBUG] [Thread-125604 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:55:01.450 [DEBUG] [Thread-125605 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:55:04.687 [DEBUG] [Thread-125606 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:55:09.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T09:55:09.513 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T09:55:09.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T09:55:10.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 9, 54, 36), 37.47, 7.49, 0.0, 17.52, 23.95, 0, 0, 0, 2, 0, 0),)
2025-12-31T09:55:10.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 09:54:36
2025-12-31T09:55:10.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T09:55:10.569 [DEBUG] [Thread-125607] [transport.py] [_log()] starting thread (client mode): 0xb957b880
2025-12-31T09:55:10.569 [DEBUG] [Thread-125607] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:55:10.591 [DEBUG] [Thread-125607] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T09:55:10.591 [INFO] [Thread-125607] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T09:55:10.595 [DEBUG] [Thread-125607] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:55:10.595 [DEBUG] [Thread-125607] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T09:55:10.595 [DEBUG] [Thread-125607] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:55:10.595 [DEBUG] [Thread-125607] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:55:10.595 [DEBUG] [Thread-125607] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:55:10.595 [DEBUG] [Thread-125607] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:55:10.595 [DEBUG] [Thread-125607] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:55:10.595 [DEBUG] [Thread-125607] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:55:10.595 [DEBUG] [Thread-125607] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:55:10.595 [DEBUG] [Thread-125607] [transport.py] [_log()] client lang: <none>
2025-12-31T09:55:10.595 [DEBUG] [Thread-125607] [transport.py] [_log()] server lang: <none>
2025-12-31T09:55:10.595 [DEBUG] [Thread-125607] [transport.py] [_log()] kex follows: False
2025-12-31T09:55:10.595 [DEBUG] [Thread-125607] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:55:10.595 [DEBUG] [Thread-125607] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:55:10.595 [DEBUG] [Thread-125607] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:55:10.595 [DEBUG] [Thread-125607] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:55:10.595 [DEBUG] [Thread-125607] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:55:10.595 [DEBUG] [Thread-125607] [transport.py] [_log()] Compression: none
2025-12-31T09:55:10.595 [DEBUG] [Thread-125607] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:55:10.610 [DEBUG] [Thread-125607] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:55:10.611 [DEBUG] [Thread-125607] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:55:10.611 [DEBUG] [Thread-125607] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T09:55:10.611 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T09:55:10.611 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:55:10.611 [DEBUG] [Thread-125607] [transport.py] [_log()] userauth is OK
2025-12-31T09:55:10.611 [DEBUG] [Thread-125607] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:55:10.611 [DEBUG] [Thread-125607] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:55:10.611 [DEBUG] [Thread-125607] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T09:55:10.611 [DEBUG] [Thread-125607] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:55:10.626 [INFO] [Thread-125607] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:55:10.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:55:12.414 [DEBUG] [Thread-125607] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:55:12.414 [DEBUG] [Thread-125607] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:55:12.415 [DEBUG] [Thread-125607] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T09:55:12.455 [DEBUG] [Thread-125607] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:55:12.455 [DEBUG] [Thread-125607] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:55:12.459 [DEBUG] [Thread-125607] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:55:12.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:55:12.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T09:55:12.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T09:55:12.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T09:55:12.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:55:12.482 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T09:55:12.483 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:55:12.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:55:12.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T09:55:12.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.329658 -999.00  +24.10  12.54     12   -6.70 1 1 1 1 1   888    0 42.35 401.70 ----- 13.0 12.5 285.4 14.7 29.9 -29.3 29.4 -27.9 28.0 -26.3 28.4 -27.0
2025-12-31T09:55:12.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T09:55:12.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T09:55:12.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.329658
2025-12-31T09:55:12.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T09:55:12.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T09:55:12.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T09:55:12.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T09:55:12.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T09:55:12.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T09:54:36', tmtdew=37.47, humidity=7.49, cloud=0.0, wind=17.52, temperature=23.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T07:54:42.451', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T09:55:12.485 [DEBUG] [Thread-125607] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:55:12.569 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T09:55:12.581 [DEBUG] [Thread-125610] [transport.py] [_log()] starting thread (client mode): 0xb6b23f70
2025-12-31T09:55:12.581 [DEBUG] [Thread-125610] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:55:12.596 [DEBUG] [Thread-125610] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T09:55:12.596 [INFO] [Thread-125610] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T09:55:12.604 [DEBUG] [Thread-125610] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:55:12.604 [DEBUG] [Thread-125610] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T09:55:12.604 [DEBUG] [Thread-125610] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:55:12.605 [DEBUG] [Thread-125610] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:55:12.605 [DEBUG] [Thread-125610] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:55:12.605 [DEBUG] [Thread-125610] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:55:12.605 [DEBUG] [Thread-125610] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:55:12.605 [DEBUG] [Thread-125610] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:55:12.605 [DEBUG] [Thread-125610] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:55:12.605 [DEBUG] [Thread-125610] [transport.py] [_log()] client lang: <none>
2025-12-31T09:55:12.605 [DEBUG] [Thread-125610] [transport.py] [_log()] server lang: <none>
2025-12-31T09:55:12.606 [DEBUG] [Thread-125610] [transport.py] [_log()] kex follows: False
2025-12-31T09:55:12.606 [DEBUG] [Thread-125610] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:55:12.606 [DEBUG] [Thread-125610] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:55:12.606 [DEBUG] [Thread-125610] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:55:12.606 [DEBUG] [Thread-125610] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:55:12.606 [DEBUG] [Thread-125610] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:55:12.606 [DEBUG] [Thread-125610] [transport.py] [_log()] Compression: none
2025-12-31T09:55:12.606 [DEBUG] [Thread-125610] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:55:12.665 [DEBUG] [Thread-125610] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:55:12.666 [DEBUG] [Thread-125610] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:55:12.667 [DEBUG] [Thread-125610] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T09:55:12.668 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T09:55:12.669 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:55:12.725 [DEBUG] [Thread-125610] [transport.py] [_log()] userauth is OK
2025-12-31T09:55:12.725 [DEBUG] [Thread-125610] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:55:12.725 [DEBUG] [Thread-125610] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:55:12.725 [DEBUG] [Thread-125610] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T09:55:12.726 [DEBUG] [Thread-125610] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:55:12.746 [INFO] [Thread-125610] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:55:12.746 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T09:55:12.747 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:55:13.577 [DEBUG] [Thread-125610] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:55:13.577 [DEBUG] [Thread-125610] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:55:13.625 [DEBUG] [Thread-125610] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:55:13.625 [DEBUG] [Thread-125610] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:55:13.634 [DEBUG] [Thread-125610] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:55:13.644 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:55:13.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T09:55:13.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T09:55:13.662 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:55:13.662 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:55:13.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:55:13.671 [DEBUG] [Thread-125610] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:55:16.478 [DEBUG] [Thread-125612 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:55:20.538 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:55:20.539 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:55:31.534 [DEBUG] [Thread-125613 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:55:43.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T09:55:43.693 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T09:55:43.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T09:55:44.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 9, 55, 40), 37.07, 7.54, 0.0, 15.58, 23.94, 0, 0, 0, 2, 0, 0),)
2025-12-31T09:55:44.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 09:55:40
2025-12-31T09:55:44.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T09:55:44.743 [DEBUG] [Thread-125614] [transport.py] [_log()] starting thread (client mode): 0xb6b4ab00
2025-12-31T09:55:44.743 [DEBUG] [Thread-125614] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:55:44.763 [DEBUG] [Thread-125614] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T09:55:44.763 [INFO] [Thread-125614] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T09:55:44.766 [DEBUG] [Thread-125614] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:55:44.766 [DEBUG] [Thread-125614] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T09:55:44.766 [DEBUG] [Thread-125614] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:55:44.766 [DEBUG] [Thread-125614] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:55:44.766 [DEBUG] [Thread-125614] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:55:44.766 [DEBUG] [Thread-125614] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:55:44.766 [DEBUG] [Thread-125614] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:55:44.766 [DEBUG] [Thread-125614] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:55:44.766 [DEBUG] [Thread-125614] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:55:44.766 [DEBUG] [Thread-125614] [transport.py] [_log()] client lang: <none>
2025-12-31T09:55:44.766 [DEBUG] [Thread-125614] [transport.py] [_log()] server lang: <none>
2025-12-31T09:55:44.766 [DEBUG] [Thread-125614] [transport.py] [_log()] kex follows: False
2025-12-31T09:55:44.766 [DEBUG] [Thread-125614] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:55:44.766 [DEBUG] [Thread-125614] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:55:44.766 [DEBUG] [Thread-125614] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:55:44.766 [DEBUG] [Thread-125614] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:55:44.767 [DEBUG] [Thread-125614] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:55:44.767 [DEBUG] [Thread-125614] [transport.py] [_log()] Compression: none
2025-12-31T09:55:44.767 [DEBUG] [Thread-125614] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:55:44.782 [DEBUG] [Thread-125614] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:55:44.782 [DEBUG] [Thread-125614] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:55:44.782 [DEBUG] [Thread-125614] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T09:55:44.782 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T09:55:44.782 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:55:44.824 [DEBUG] [Thread-125614] [transport.py] [_log()] userauth is OK
2025-12-31T09:55:44.824 [DEBUG] [Thread-125614] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:55:44.824 [DEBUG] [Thread-125614] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:55:44.824 [DEBUG] [Thread-125614] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T09:55:44.824 [DEBUG] [Thread-125614] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:55:44.840 [INFO] [Thread-125614] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:55:44.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:55:45.472 [DEBUG] [Thread-125614] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:55:45.472 [DEBUG] [Thread-125614] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:55:45.472 [DEBUG] [Thread-125614] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T09:55:45.512 [DEBUG] [Thread-125614] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:55:45.512 [DEBUG] [Thread-125614] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:55:45.514 [DEBUG] [Thread-125614] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:55:45.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:55:45.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T09:55:45.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T09:55:45.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T09:55:45.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:55:45.532 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T09:55:45.532 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:55:45.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:55:45.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T09:55:45.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.330005 -999.00  +24.20  12.12     12   -6.00 1 1 1 1 1   888    0 42.30 410.93 ----- 12.9 12.1 283.4 14.7 29.8 -28.7 29.3 -28.9 28.1 -27.3 28.4 -27.4
2025-12-31T09:55:45.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T09:55:45.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T09:55:45.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.330005
2025-12-31T09:55:45.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T09:55:45.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T09:55:45.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T09:55:45.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T09:55:45.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T09:55:45.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T09:55:40', tmtdew=37.07, humidity=7.54, cloud=0.0, wind=15.58, temperature=23.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T07:55:12.432', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T09:55:45.534 [DEBUG] [Thread-125614] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:55:45.614 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T09:55:45.625 [DEBUG] [Thread-125617] [transport.py] [_log()] starting thread (client mode): 0xb6b6af50
2025-12-31T09:55:45.625 [DEBUG] [Thread-125617] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:55:45.643 [DEBUG] [Thread-125617] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T09:55:45.643 [INFO] [Thread-125617] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T09:55:45.651 [DEBUG] [Thread-125617] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:55:45.651 [DEBUG] [Thread-125617] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T09:55:45.651 [DEBUG] [Thread-125617] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:55:45.651 [DEBUG] [Thread-125617] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:55:45.652 [DEBUG] [Thread-125617] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:55:45.652 [DEBUG] [Thread-125617] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:55:45.652 [DEBUG] [Thread-125617] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:55:45.652 [DEBUG] [Thread-125617] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:55:45.652 [DEBUG] [Thread-125617] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:55:45.652 [DEBUG] [Thread-125617] [transport.py] [_log()] client lang: <none>
2025-12-31T09:55:45.652 [DEBUG] [Thread-125617] [transport.py] [_log()] server lang: <none>
2025-12-31T09:55:45.652 [DEBUG] [Thread-125617] [transport.py] [_log()] kex follows: False
2025-12-31T09:55:45.652 [DEBUG] [Thread-125617] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:55:45.652 [DEBUG] [Thread-125617] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:55:45.652 [DEBUG] [Thread-125617] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:55:45.652 [DEBUG] [Thread-125617] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:55:45.652 [DEBUG] [Thread-125617] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:55:45.652 [DEBUG] [Thread-125617] [transport.py] [_log()] Compression: none
2025-12-31T09:55:45.652 [DEBUG] [Thread-125617] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:55:45.707 [DEBUG] [Thread-125617] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:55:45.707 [DEBUG] [Thread-125617] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:55:45.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T09:55:45.707 [DEBUG] [Thread-125617] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T09:55:45.708 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:55:45.764 [DEBUG] [Thread-125617] [transport.py] [_log()] userauth is OK
2025-12-31T09:55:45.764 [DEBUG] [Thread-125617] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:55:45.764 [DEBUG] [Thread-125617] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:55:45.764 [DEBUG] [Thread-125617] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T09:55:45.764 [DEBUG] [Thread-125617] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:55:45.778 [INFO] [Thread-125617] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:55:45.778 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T09:55:45.779 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:55:46.567 [DEBUG] [Thread-125619 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:55:46.633 [DEBUG] [Thread-125617] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:55:46.633 [DEBUG] [Thread-125617] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:55:46.681 [DEBUG] [Thread-125617] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:55:46.681 [DEBUG] [Thread-125617] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:55:46.689 [DEBUG] [Thread-125617] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:55:46.697 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:55:46.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T09:55:46.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T09:55:46.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:55:46.714 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:55:46.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:55:46.722 [DEBUG] [Thread-125617] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:56:01.607 [DEBUG] [Thread-125620 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:56:04.740 [DEBUG] [Thread-125621 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:56:16.643 [DEBUG] [Thread-125622 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:56:16.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T09:56:16.745 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T09:56:16.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T09:56:17.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 9, 56, 13), 35.82, 8.34, 0.0, 19.04, 23.99, 0, 0, 0, 2, 0, 0),)
2025-12-31T09:56:17.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 09:56:13
2025-12-31T09:56:17.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T09:56:17.736 [DEBUG] [Thread-125623] [transport.py] [_log()] starting thread (client mode): 0xb95d5330
2025-12-31T09:56:17.736 [DEBUG] [Thread-125623] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:56:17.757 [DEBUG] [Thread-125623] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T09:56:17.757 [INFO] [Thread-125623] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T09:56:17.758 [DEBUG] [Thread-125623] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:56:17.758 [DEBUG] [Thread-125623] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T09:56:17.758 [DEBUG] [Thread-125623] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:56:17.758 [DEBUG] [Thread-125623] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:56:17.758 [DEBUG] [Thread-125623] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:56:17.758 [DEBUG] [Thread-125623] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:56:17.759 [DEBUG] [Thread-125623] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:56:17.759 [DEBUG] [Thread-125623] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:56:17.759 [DEBUG] [Thread-125623] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:56:17.759 [DEBUG] [Thread-125623] [transport.py] [_log()] client lang: <none>
2025-12-31T09:56:17.759 [DEBUG] [Thread-125623] [transport.py] [_log()] server lang: <none>
2025-12-31T09:56:17.759 [DEBUG] [Thread-125623] [transport.py] [_log()] kex follows: False
2025-12-31T09:56:17.759 [DEBUG] [Thread-125623] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:56:17.759 [DEBUG] [Thread-125623] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:56:17.759 [DEBUG] [Thread-125623] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:56:17.759 [DEBUG] [Thread-125623] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:56:17.759 [DEBUG] [Thread-125623] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:56:17.759 [DEBUG] [Thread-125623] [transport.py] [_log()] Compression: none
2025-12-31T09:56:17.759 [DEBUG] [Thread-125623] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:56:17.780 [DEBUG] [Thread-125623] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:56:17.780 [DEBUG] [Thread-125623] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:56:17.781 [DEBUG] [Thread-125623] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T09:56:17.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T09:56:17.782 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:56:17.783 [DEBUG] [Thread-125623] [transport.py] [_log()] userauth is OK
2025-12-31T09:56:17.783 [DEBUG] [Thread-125623] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:56:17.783 [DEBUG] [Thread-125623] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:56:17.783 [DEBUG] [Thread-125623] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T09:56:17.783 [DEBUG] [Thread-125623] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:56:17.808 [INFO] [Thread-125623] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:56:17.808 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:56:18.575 [DEBUG] [Thread-125623] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:56:18.575 [DEBUG] [Thread-125623] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:56:18.576 [DEBUG] [Thread-125623] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T09:56:18.616 [DEBUG] [Thread-125623] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:56:18.616 [DEBUG] [Thread-125623] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:56:18.619 [DEBUG] [Thread-125623] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:56:18.632 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:56:18.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T09:56:18.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T09:56:18.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T09:56:18.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:56:18.645 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T09:56:18.646 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:56:18.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:56:18.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T09:56:18.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.330352 -999.00  +24.30  23.15     14   -4.80 1 1 1 1 1   888    0 41.50 377.25 ----- 23.5 23.1 303.0 26.7 29.7 -29.8 29.1 -29.6 28.0 -27.4 28.4 -28.2
2025-12-31T09:56:18.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T09:56:18.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T09:56:18.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.330352
2025-12-31T09:56:18.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T09:56:18.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T09:56:18.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T09:56:18.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T09:56:18.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T09:56:18.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T09:56:13', tmtdew=35.82, humidity=8.34, cloud=0.0, wind=19.04, temperature=23.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T07:55:42.413', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T09:56:18.649 [DEBUG] [Thread-125623] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:56:18.732 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T09:56:18.746 [DEBUG] [Thread-125626] [transport.py] [_log()] starting thread (client mode): 0xb6b23d90
2025-12-31T09:56:18.746 [DEBUG] [Thread-125626] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:56:18.763 [DEBUG] [Thread-125626] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T09:56:18.763 [INFO] [Thread-125626] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T09:56:18.771 [DEBUG] [Thread-125626] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:56:18.771 [DEBUG] [Thread-125626] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T09:56:18.771 [DEBUG] [Thread-125626] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:56:18.771 [DEBUG] [Thread-125626] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:56:18.771 [DEBUG] [Thread-125626] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:56:18.771 [DEBUG] [Thread-125626] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:56:18.771 [DEBUG] [Thread-125626] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:56:18.771 [DEBUG] [Thread-125626] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:56:18.772 [DEBUG] [Thread-125626] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:56:18.772 [DEBUG] [Thread-125626] [transport.py] [_log()] client lang: <none>
2025-12-31T09:56:18.772 [DEBUG] [Thread-125626] [transport.py] [_log()] server lang: <none>
2025-12-31T09:56:18.772 [DEBUG] [Thread-125626] [transport.py] [_log()] kex follows: False
2025-12-31T09:56:18.772 [DEBUG] [Thread-125626] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:56:18.772 [DEBUG] [Thread-125626] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:56:18.772 [DEBUG] [Thread-125626] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:56:18.772 [DEBUG] [Thread-125626] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:56:18.772 [DEBUG] [Thread-125626] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:56:18.772 [DEBUG] [Thread-125626] [transport.py] [_log()] Compression: none
2025-12-31T09:56:18.772 [DEBUG] [Thread-125626] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:56:18.833 [DEBUG] [Thread-125626] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:56:18.833 [DEBUG] [Thread-125626] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:56:18.834 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T09:56:18.834 [DEBUG] [Thread-125626] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T09:56:18.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:56:18.893 [DEBUG] [Thread-125626] [transport.py] [_log()] userauth is OK
2025-12-31T09:56:18.893 [DEBUG] [Thread-125626] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:56:18.893 [DEBUG] [Thread-125626] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:56:18.893 [DEBUG] [Thread-125626] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T09:56:18.893 [DEBUG] [Thread-125626] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:56:18.912 [INFO] [Thread-125626] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:56:18.912 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T09:56:18.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:56:19.731 [DEBUG] [Thread-125626] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:56:19.731 [DEBUG] [Thread-125626] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:56:19.779 [DEBUG] [Thread-125626] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:56:19.779 [DEBUG] [Thread-125626] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:56:19.789 [DEBUG] [Thread-125626] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:56:19.798 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:56:19.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T09:56:19.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-12-31T09:56:19.816 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:56:19.816 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:56:19.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:56:19.825 [DEBUG] [Thread-125626] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:56:20.677 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:56:20.679 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:56:31.679 [DEBUG] [Thread-125628 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:56:46.738 [DEBUG] [Thread-125629 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:56:49.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T09:56:49.848 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T09:56:49.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T09:56:50.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 9, 56, 45), 35.53, 8.71, 0.0, 24.67, 24.27, 0, 0, 0, 2, 0, 0),)
2025-12-31T09:56:50.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 09:56:45
2025-12-31T09:56:50.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T09:56:50.829 [DEBUG] [Thread-125630] [transport.py] [_log()] starting thread (client mode): 0xb95d6290
2025-12-31T09:56:50.829 [DEBUG] [Thread-125630] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:56:50.844 [DEBUG] [Thread-125630] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T09:56:50.844 [INFO] [Thread-125630] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T09:56:50.847 [DEBUG] [Thread-125630] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:56:50.848 [DEBUG] [Thread-125630] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T09:56:50.848 [DEBUG] [Thread-125630] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:56:50.848 [DEBUG] [Thread-125630] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:56:50.848 [DEBUG] [Thread-125630] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:56:50.848 [DEBUG] [Thread-125630] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:56:50.848 [DEBUG] [Thread-125630] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:56:50.848 [DEBUG] [Thread-125630] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:56:50.848 [DEBUG] [Thread-125630] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:56:50.848 [DEBUG] [Thread-125630] [transport.py] [_log()] client lang: <none>
2025-12-31T09:56:50.848 [DEBUG] [Thread-125630] [transport.py] [_log()] server lang: <none>
2025-12-31T09:56:50.848 [DEBUG] [Thread-125630] [transport.py] [_log()] kex follows: False
2025-12-31T09:56:50.848 [DEBUG] [Thread-125630] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:56:50.848 [DEBUG] [Thread-125630] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:56:50.848 [DEBUG] [Thread-125630] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:56:50.848 [DEBUG] [Thread-125630] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:56:50.848 [DEBUG] [Thread-125630] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:56:50.848 [DEBUG] [Thread-125630] [transport.py] [_log()] Compression: none
2025-12-31T09:56:50.848 [DEBUG] [Thread-125630] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:56:50.865 [DEBUG] [Thread-125630] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:56:50.866 [DEBUG] [Thread-125630] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:56:50.866 [DEBUG] [Thread-125630] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T09:56:50.866 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T09:56:50.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:56:50.868 [DEBUG] [Thread-125630] [transport.py] [_log()] userauth is OK
2025-12-31T09:56:50.868 [DEBUG] [Thread-125630] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:56:50.868 [DEBUG] [Thread-125630] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:56:50.868 [DEBUG] [Thread-125630] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T09:56:50.868 [DEBUG] [Thread-125630] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:56:50.900 [INFO] [Thread-125630] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:56:50.900 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:56:51.561 [DEBUG] [Thread-125630] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:56:51.561 [DEBUG] [Thread-125630] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:56:51.561 [DEBUG] [Thread-125630] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T09:56:51.602 [DEBUG] [Thread-125630] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:56:51.603 [DEBUG] [Thread-125630] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:56:51.605 [DEBUG] [Thread-125630] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:56:51.617 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:56:51.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T09:56:51.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T09:56:51.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T09:56:51.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:56:51.631 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T09:56:51.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:56:51.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:56:51.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T09:56:51.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.330699 -999.00  +24.30  16.89     13   -5.10 1 1 1 1 1   888    0 40.46 344.51 ----- 24.5 16.9 302.6 24.0 29.3 -30.0 28.9 -29.4 27.7 -28.0 28.1 -28.7
2025-12-31T09:56:51.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T09:56:51.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T09:56:51.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.330699
2025-12-31T09:56:51.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T09:56:51.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T09:56:51.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T09:56:51.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T09:56:51.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T09:56:51.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T09:56:45', tmtdew=35.53, humidity=8.71, cloud=0.0, wind=24.67, temperature=24.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T07:56:12.394', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T09:56:51.635 [DEBUG] [Thread-125630] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:56:51.717 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T09:56:51.730 [DEBUG] [Thread-125633] [transport.py] [_log()] starting thread (client mode): 0xb6bb3850
2025-12-31T09:56:51.731 [DEBUG] [Thread-125633] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:56:51.745 [DEBUG] [Thread-125633] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T09:56:51.746 [INFO] [Thread-125633] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T09:56:51.753 [DEBUG] [Thread-125633] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:56:51.754 [DEBUG] [Thread-125633] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T09:56:51.754 [DEBUG] [Thread-125633] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:56:51.754 [DEBUG] [Thread-125633] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:56:51.754 [DEBUG] [Thread-125633] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:56:51.754 [DEBUG] [Thread-125633] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:56:51.755 [DEBUG] [Thread-125633] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:56:51.755 [DEBUG] [Thread-125633] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:56:51.755 [DEBUG] [Thread-125633] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:56:51.755 [DEBUG] [Thread-125633] [transport.py] [_log()] client lang: <none>
2025-12-31T09:56:51.755 [DEBUG] [Thread-125633] [transport.py] [_log()] server lang: <none>
2025-12-31T09:56:51.755 [DEBUG] [Thread-125633] [transport.py] [_log()] kex follows: False
2025-12-31T09:56:51.755 [DEBUG] [Thread-125633] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:56:51.755 [DEBUG] [Thread-125633] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:56:51.755 [DEBUG] [Thread-125633] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:56:51.755 [DEBUG] [Thread-125633] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:56:51.755 [DEBUG] [Thread-125633] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:56:51.755 [DEBUG] [Thread-125633] [transport.py] [_log()] Compression: none
2025-12-31T09:56:51.755 [DEBUG] [Thread-125633] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:56:51.812 [DEBUG] [Thread-125633] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:56:51.813 [DEBUG] [Thread-125633] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:56:51.814 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T09:56:51.814 [DEBUG] [Thread-125633] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T09:56:51.815 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:56:51.868 [DEBUG] [Thread-125633] [transport.py] [_log()] userauth is OK
2025-12-31T09:56:51.868 [DEBUG] [Thread-125633] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:56:51.869 [DEBUG] [Thread-125633] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:56:51.869 [DEBUG] [Thread-125633] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T09:56:51.869 [DEBUG] [Thread-125633] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:56:51.888 [INFO] [Thread-125633] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:56:51.888 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T09:56:51.889 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:56:52.734 [DEBUG] [Thread-125633] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:56:52.734 [DEBUG] [Thread-125633] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:56:52.782 [DEBUG] [Thread-125633] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:56:52.782 [DEBUG] [Thread-125633] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:56:52.791 [DEBUG] [Thread-125633] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:56:52.800 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:56:52.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T09:56:52.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-12-31T09:56:52.819 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:56:52.819 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:56:52.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:56:52.830 [DEBUG] [Thread-125633] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:57:01.769 [DEBUG] [Thread-125635 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:57:04.790 [DEBUG] [Thread-125636 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:57:16.806 [DEBUG] [Thread-125637 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:57:20.819 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:57:20.820 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:57:22.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T09:57:22.845 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T09:57:22.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T09:57:23.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 9, 57, 17), 36.06, 8.36, 0.0, 22.81, 24.24, 0, 0, 0, 2, 0, 0),)
2025-12-31T09:57:23.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 09:57:17
2025-12-31T09:57:23.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T09:57:23.827 [DEBUG] [Thread-125638] [transport.py] [_log()] starting thread (client mode): 0xb6bb3f70
2025-12-31T09:57:23.827 [DEBUG] [Thread-125638] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:57:23.840 [DEBUG] [Thread-125638] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T09:57:23.840 [INFO] [Thread-125638] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T09:57:23.842 [DEBUG] [Thread-125638] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:57:23.842 [DEBUG] [Thread-125638] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T09:57:23.842 [DEBUG] [Thread-125638] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:57:23.842 [DEBUG] [Thread-125638] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:57:23.842 [DEBUG] [Thread-125638] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:57:23.842 [DEBUG] [Thread-125638] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:57:23.842 [DEBUG] [Thread-125638] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:57:23.842 [DEBUG] [Thread-125638] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:57:23.842 [DEBUG] [Thread-125638] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:57:23.842 [DEBUG] [Thread-125638] [transport.py] [_log()] client lang: <none>
2025-12-31T09:57:23.842 [DEBUG] [Thread-125638] [transport.py] [_log()] server lang: <none>
2025-12-31T09:57:23.842 [DEBUG] [Thread-125638] [transport.py] [_log()] kex follows: False
2025-12-31T09:57:23.842 [DEBUG] [Thread-125638] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:57:23.842 [DEBUG] [Thread-125638] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:57:23.842 [DEBUG] [Thread-125638] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:57:23.842 [DEBUG] [Thread-125638] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:57:23.842 [DEBUG] [Thread-125638] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:57:23.842 [DEBUG] [Thread-125638] [transport.py] [_log()] Compression: none
2025-12-31T09:57:23.842 [DEBUG] [Thread-125638] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:57:23.852 [DEBUG] [Thread-125638] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:57:23.852 [DEBUG] [Thread-125638] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:57:23.853 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T09:57:23.853 [DEBUG] [Thread-125638] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T09:57:23.853 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:57:23.855 [DEBUG] [Thread-125638] [transport.py] [_log()] userauth is OK
2025-12-31T09:57:23.855 [DEBUG] [Thread-125638] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:57:23.855 [DEBUG] [Thread-125638] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:57:23.855 [DEBUG] [Thread-125638] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T09:57:23.855 [DEBUG] [Thread-125638] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:57:23.891 [INFO] [Thread-125638] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:57:23.891 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:57:24.563 [DEBUG] [Thread-125638] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:57:24.563 [DEBUG] [Thread-125638] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:57:24.563 [DEBUG] [Thread-125638] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T09:57:24.604 [DEBUG] [Thread-125638] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:57:24.604 [DEBUG] [Thread-125638] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:57:24.607 [DEBUG] [Thread-125638] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:57:24.618 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:57:24.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T09:57:24.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T09:57:24.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T09:57:24.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:57:24.631 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T09:57:24.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:57:24.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:57:24.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T09:57:24.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.331047 -999.00  +24.20  22.95     13   -5.10 1 1 1 1 1   888    0 39.61 309.68 ----- 19.7 22.9 296.0 24.4 29.1 -29.8 28.7 -29.1 27.7 -27.6 28.0 -28.8
2025-12-31T09:57:24.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T09:57:24.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T09:57:24.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.331047
2025-12-31T09:57:24.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T09:57:24.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T09:57:24.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T09:57:24.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T09:57:24.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T09:57:24.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T09:57:17', tmtdew=36.06, humidity=8.36, cloud=0.0, wind=22.81, temperature=24.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T07:56:42.461', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T09:57:24.634 [DEBUG] [Thread-125638] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:57:24.732 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T09:57:24.744 [DEBUG] [Thread-125641] [transport.py] [_log()] starting thread (client mode): 0xb95d75e0
2025-12-31T09:57:24.744 [DEBUG] [Thread-125641] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:57:24.763 [DEBUG] [Thread-125641] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T09:57:24.763 [INFO] [Thread-125641] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T09:57:24.771 [DEBUG] [Thread-125641] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:57:24.771 [DEBUG] [Thread-125641] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T09:57:24.771 [DEBUG] [Thread-125641] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:57:24.772 [DEBUG] [Thread-125641] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:57:24.772 [DEBUG] [Thread-125641] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:57:24.772 [DEBUG] [Thread-125641] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:57:24.772 [DEBUG] [Thread-125641] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:57:24.772 [DEBUG] [Thread-125641] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:57:24.772 [DEBUG] [Thread-125641] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:57:24.772 [DEBUG] [Thread-125641] [transport.py] [_log()] client lang: <none>
2025-12-31T09:57:24.772 [DEBUG] [Thread-125641] [transport.py] [_log()] server lang: <none>
2025-12-31T09:57:24.772 [DEBUG] [Thread-125641] [transport.py] [_log()] kex follows: False
2025-12-31T09:57:24.773 [DEBUG] [Thread-125641] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:57:24.773 [DEBUG] [Thread-125641] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:57:24.773 [DEBUG] [Thread-125641] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:57:24.773 [DEBUG] [Thread-125641] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:57:24.773 [DEBUG] [Thread-125641] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:57:24.773 [DEBUG] [Thread-125641] [transport.py] [_log()] Compression: none
2025-12-31T09:57:24.773 [DEBUG] [Thread-125641] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:57:24.837 [DEBUG] [Thread-125641] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:57:24.837 [DEBUG] [Thread-125641] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:57:24.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T09:57:24.838 [DEBUG] [Thread-125641] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T09:57:24.839 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:57:24.896 [DEBUG] [Thread-125641] [transport.py] [_log()] userauth is OK
2025-12-31T09:57:24.896 [DEBUG] [Thread-125641] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:57:24.896 [DEBUG] [Thread-125641] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:57:24.896 [DEBUG] [Thread-125641] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T09:57:24.897 [DEBUG] [Thread-125641] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:57:24.921 [INFO] [Thread-125641] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:57:24.921 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T09:57:24.922 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:57:25.819 [DEBUG] [Thread-125641] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:57:25.820 [DEBUG] [Thread-125641] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:57:25.868 [DEBUG] [Thread-125641] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:57:25.868 [DEBUG] [Thread-125641] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:57:25.876 [DEBUG] [Thread-125641] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:57:25.884 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:57:25.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T09:57:25.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T09:57:25.905 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:57:25.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:57:25.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:57:25.914 [DEBUG] [Thread-125641] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:57:31.842 [DEBUG] [Thread-125643 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:57:46.896 [DEBUG] [Thread-125644 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:57:55.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T09:57:55.936 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T09:57:55.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T09:57:56.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 9, 57, 49), 35.86, 8.21, 0.0, 24.44, 24.02, 0, 0, 0, 2, 0, 0),)
2025-12-31T09:57:56.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 09:57:49
2025-12-31T09:57:56.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T09:57:56.922 [DEBUG] [Thread-125645] [transport.py] [_log()] starting thread (client mode): 0xb6b35e10
2025-12-31T09:57:56.922 [DEBUG] [Thread-125645] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:57:56.942 [DEBUG] [Thread-125645] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T09:57:56.942 [INFO] [Thread-125645] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T09:57:56.945 [DEBUG] [Thread-125645] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:57:56.945 [DEBUG] [Thread-125645] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T09:57:56.945 [DEBUG] [Thread-125645] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:57:56.945 [DEBUG] [Thread-125645] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:57:56.945 [DEBUG] [Thread-125645] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:57:56.945 [DEBUG] [Thread-125645] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:57:56.945 [DEBUG] [Thread-125645] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:57:56.945 [DEBUG] [Thread-125645] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:57:56.946 [DEBUG] [Thread-125645] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:57:56.946 [DEBUG] [Thread-125645] [transport.py] [_log()] client lang: <none>
2025-12-31T09:57:56.946 [DEBUG] [Thread-125645] [transport.py] [_log()] server lang: <none>
2025-12-31T09:57:56.946 [DEBUG] [Thread-125645] [transport.py] [_log()] kex follows: False
2025-12-31T09:57:56.946 [DEBUG] [Thread-125645] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:57:56.946 [DEBUG] [Thread-125645] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:57:56.946 [DEBUG] [Thread-125645] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:57:56.946 [DEBUG] [Thread-125645] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:57:56.946 [DEBUG] [Thread-125645] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:57:56.946 [DEBUG] [Thread-125645] [transport.py] [_log()] Compression: none
2025-12-31T09:57:56.946 [DEBUG] [Thread-125645] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:57:56.965 [DEBUG] [Thread-125645] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:57:56.966 [DEBUG] [Thread-125645] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:57:56.967 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T09:57:56.967 [DEBUG] [Thread-125645] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T09:57:56.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:57:56.969 [DEBUG] [Thread-125645] [transport.py] [_log()] userauth is OK
2025-12-31T09:57:56.969 [DEBUG] [Thread-125645] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:57:56.969 [DEBUG] [Thread-125645] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:57:56.969 [DEBUG] [Thread-125645] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T09:57:56.969 [DEBUG] [Thread-125645] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:57:57.003 [INFO] [Thread-125645] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:57:57.003 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:57:57.653 [DEBUG] [Thread-125645] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:57:57.653 [DEBUG] [Thread-125645] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:57:57.654 [DEBUG] [Thread-125645] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T09:57:57.694 [DEBUG] [Thread-125645] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:57:57.694 [DEBUG] [Thread-125645] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:57:57.698 [DEBUG] [Thread-125645] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:57:57.709 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:57:57.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T09:57:57.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T09:57:57.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T09:57:57.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:57:57.722 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T09:57:57.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:57:57.723 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:57:57.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T09:57:57.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.331741 -999.00  +23.80  22.92     14   -5.10 1 1 1 1 1   888    0 39.50 308.79 ----- 17.9 22.9 290.2 31.0 28.7 -30.2 28.4 -28.0 27.4 -29.7 27.8 -29.1
2025-12-31T09:57:57.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T09:57:57.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T09:57:57.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.331741
2025-12-31T09:57:57.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T09:57:57.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T09:57:57.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T09:57:57.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T09:57:57.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T09:57:57.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T09:57:49', tmtdew=35.86, humidity=8.21, cloud=0.0, wind=24.44, temperature=24.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T07:57:42.422', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T09:57:57.725 [DEBUG] [Thread-125645] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:57:57.808 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T09:57:57.821 [DEBUG] [Thread-125648] [transport.py] [_log()] starting thread (client mode): 0xb9578940
2025-12-31T09:57:57.821 [DEBUG] [Thread-125648] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:57:57.836 [DEBUG] [Thread-125648] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T09:57:57.836 [INFO] [Thread-125648] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T09:57:57.844 [DEBUG] [Thread-125648] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:57:57.844 [DEBUG] [Thread-125648] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T09:57:57.844 [DEBUG] [Thread-125648] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:57:57.844 [DEBUG] [Thread-125648] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:57:57.844 [DEBUG] [Thread-125648] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:57:57.844 [DEBUG] [Thread-125648] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:57:57.845 [DEBUG] [Thread-125648] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:57:57.845 [DEBUG] [Thread-125648] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:57:57.845 [DEBUG] [Thread-125648] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:57:57.845 [DEBUG] [Thread-125648] [transport.py] [_log()] client lang: <none>
2025-12-31T09:57:57.845 [DEBUG] [Thread-125648] [transport.py] [_log()] server lang: <none>
2025-12-31T09:57:57.845 [DEBUG] [Thread-125648] [transport.py] [_log()] kex follows: False
2025-12-31T09:57:57.845 [DEBUG] [Thread-125648] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:57:57.845 [DEBUG] [Thread-125648] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:57:57.845 [DEBUG] [Thread-125648] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:57:57.845 [DEBUG] [Thread-125648] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:57:57.845 [DEBUG] [Thread-125648] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:57:57.845 [DEBUG] [Thread-125648] [transport.py] [_log()] Compression: none
2025-12-31T09:57:57.845 [DEBUG] [Thread-125648] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:57:57.903 [DEBUG] [Thread-125648] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:57:57.904 [DEBUG] [Thread-125648] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:57:57.905 [DEBUG] [Thread-125648] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T09:57:57.905 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T09:57:57.906 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:57:57.960 [DEBUG] [Thread-125648] [transport.py] [_log()] userauth is OK
2025-12-31T09:57:57.960 [DEBUG] [Thread-125648] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:57:57.960 [DEBUG] [Thread-125648] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:57:57.960 [DEBUG] [Thread-125648] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T09:57:57.960 [DEBUG] [Thread-125648] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:57:57.979 [INFO] [Thread-125648] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:57:57.979 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T09:57:57.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:57:58.801 [DEBUG] [Thread-125648] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:57:58.802 [DEBUG] [Thread-125648] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:57:58.850 [DEBUG] [Thread-125648] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:57:58.850 [DEBUG] [Thread-125648] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:57:58.861 [DEBUG] [Thread-125648] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:57:58.871 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:57:58.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T09:57:58.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T09:57:58.890 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:57:58.890 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:57:58.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:57:58.899 [DEBUG] [Thread-125648] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:58:01.931 [DEBUG] [Thread-125650 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:58:04.848 [DEBUG] [Thread-125651 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:58:16.985 [DEBUG] [Thread-125652 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:58:20.964 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:58:20.965 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:58:28.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T09:58:28.910 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T09:58:28.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T09:58:29.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 9, 58, 21), 35.69, 8.31, 0.0, 22.66, 24.0, 0, 0, 0, 2, 0, 0),)
2025-12-31T09:58:29.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 09:58:21
2025-12-31T09:58:29.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T09:58:29.886 [DEBUG] [Thread-125653] [transport.py] [_log()] starting thread (client mode): 0xb6b484c0
2025-12-31T09:58:29.886 [DEBUG] [Thread-125653] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:58:29.906 [DEBUG] [Thread-125653] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T09:58:29.906 [INFO] [Thread-125653] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T09:58:29.909 [DEBUG] [Thread-125653] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:58:29.909 [DEBUG] [Thread-125653] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T09:58:29.909 [DEBUG] [Thread-125653] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:58:29.909 [DEBUG] [Thread-125653] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:58:29.909 [DEBUG] [Thread-125653] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:58:29.909 [DEBUG] [Thread-125653] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:58:29.909 [DEBUG] [Thread-125653] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:58:29.909 [DEBUG] [Thread-125653] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:58:29.909 [DEBUG] [Thread-125653] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:58:29.909 [DEBUG] [Thread-125653] [transport.py] [_log()] client lang: <none>
2025-12-31T09:58:29.909 [DEBUG] [Thread-125653] [transport.py] [_log()] server lang: <none>
2025-12-31T09:58:29.909 [DEBUG] [Thread-125653] [transport.py] [_log()] kex follows: False
2025-12-31T09:58:29.909 [DEBUG] [Thread-125653] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:58:29.909 [DEBUG] [Thread-125653] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:58:29.909 [DEBUG] [Thread-125653] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:58:29.909 [DEBUG] [Thread-125653] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:58:29.909 [DEBUG] [Thread-125653] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:58:29.909 [DEBUG] [Thread-125653] [transport.py] [_log()] Compression: none
2025-12-31T09:58:29.910 [DEBUG] [Thread-125653] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:58:29.922 [DEBUG] [Thread-125653] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:58:29.922 [DEBUG] [Thread-125653] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:58:29.923 [DEBUG] [Thread-125653] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T09:58:29.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T09:58:29.924 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:58:29.925 [DEBUG] [Thread-125653] [transport.py] [_log()] userauth is OK
2025-12-31T09:58:29.925 [DEBUG] [Thread-125653] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:58:29.925 [DEBUG] [Thread-125653] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:58:29.925 [DEBUG] [Thread-125653] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T09:58:29.925 [DEBUG] [Thread-125653] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:58:29.950 [INFO] [Thread-125653] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:58:29.951 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:58:30.532 [DEBUG] [Thread-125653] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:58:30.532 [DEBUG] [Thread-125653] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:58:30.532 [DEBUG] [Thread-125653] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T09:58:30.573 [DEBUG] [Thread-125653] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:58:30.573 [DEBUG] [Thread-125653] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:58:30.577 [DEBUG] [Thread-125653] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:58:30.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:58:30.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T09:58:30.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T09:58:30.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T09:58:30.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:58:30.603 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T09:58:30.603 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:58:30.603 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:58:30.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T09:58:30.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.332088 -999.00  +23.70  21.63     14   -5.30 1 1 1 1 1   888    0 38.84 289.84 ----- 21.8 21.6 285.0 24.1 28.6 -28.9 28.4 -28.3 27.4 -26.4 27.7 -28.3
2025-12-31T09:58:30.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T09:58:30.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T09:58:30.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.332088
2025-12-31T09:58:30.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T09:58:30.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T09:58:30.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T09:58:30.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T09:58:30.605 [DEBUG] [Thread-125653] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:58:30.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T09:58:30.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T09:58:21', tmtdew=35.69, humidity=8.31, cloud=0.0, wind=22.66, temperature=24.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T07:58:12.403', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T09:58:30.689 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T09:58:30.701 [DEBUG] [Thread-125656] [transport.py] [_log()] starting thread (client mode): 0xb6bb3c10
2025-12-31T09:58:30.701 [DEBUG] [Thread-125656] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:58:30.715 [DEBUG] [Thread-125656] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T09:58:30.715 [INFO] [Thread-125656] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T09:58:30.723 [DEBUG] [Thread-125656] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:58:30.723 [DEBUG] [Thread-125656] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T09:58:30.723 [DEBUG] [Thread-125656] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:58:30.724 [DEBUG] [Thread-125656] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:58:30.724 [DEBUG] [Thread-125656] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:58:30.724 [DEBUG] [Thread-125656] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:58:30.724 [DEBUG] [Thread-125656] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:58:30.724 [DEBUG] [Thread-125656] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:58:30.724 [DEBUG] [Thread-125656] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:58:30.724 [DEBUG] [Thread-125656] [transport.py] [_log()] client lang: <none>
2025-12-31T09:58:30.724 [DEBUG] [Thread-125656] [transport.py] [_log()] server lang: <none>
2025-12-31T09:58:30.724 [DEBUG] [Thread-125656] [transport.py] [_log()] kex follows: False
2025-12-31T09:58:30.724 [DEBUG] [Thread-125656] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:58:30.724 [DEBUG] [Thread-125656] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:58:30.724 [DEBUG] [Thread-125656] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:58:30.724 [DEBUG] [Thread-125656] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:58:30.724 [DEBUG] [Thread-125656] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:58:30.724 [DEBUG] [Thread-125656] [transport.py] [_log()] Compression: none
2025-12-31T09:58:30.724 [DEBUG] [Thread-125656] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:58:30.784 [DEBUG] [Thread-125656] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:58:30.784 [DEBUG] [Thread-125656] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:58:30.785 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T09:58:30.785 [DEBUG] [Thread-125656] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T09:58:30.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:58:30.840 [DEBUG] [Thread-125656] [transport.py] [_log()] userauth is OK
2025-12-31T09:58:30.840 [DEBUG] [Thread-125656] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:58:30.840 [DEBUG] [Thread-125656] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:58:30.840 [DEBUG] [Thread-125656] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T09:58:30.840 [DEBUG] [Thread-125656] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:58:30.859 [INFO] [Thread-125656] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:58:30.859 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T09:58:30.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:58:31.677 [DEBUG] [Thread-125656] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:58:31.677 [DEBUG] [Thread-125656] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:58:31.727 [DEBUG] [Thread-125656] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:58:31.727 [DEBUG] [Thread-125656] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:58:31.736 [DEBUG] [Thread-125656] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:58:31.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:58:31.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T09:58:31.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T09:58:31.764 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:58:31.764 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:58:31.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:58:31.772 [DEBUG] [Thread-125656] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:58:32.018 [DEBUG] [Thread-125658 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:58:47.082 [DEBUG] [Thread-125659 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:59:01.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T09:59:01.781 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T09:59:01.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-12-31T09:59:02.118 [DEBUG] [Thread-125660 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:59:02.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 9, 58, 53), 35.38, 8.51, 0.0, 17.75, 23.87, 0, 0, 0, 2, 0, 0),)
2025-12-31T09:59:02.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 09:58:53
2025-12-31T09:59:02.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T09:59:02.806 [DEBUG] [Thread-125661] [transport.py] [_log()] starting thread (client mode): 0xb955be20
2025-12-31T09:59:02.806 [DEBUG] [Thread-125661] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:59:02.825 [DEBUG] [Thread-125661] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T09:59:02.825 [INFO] [Thread-125661] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T09:59:02.829 [DEBUG] [Thread-125661] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:59:02.829 [DEBUG] [Thread-125661] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T09:59:02.829 [DEBUG] [Thread-125661] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:59:02.829 [DEBUG] [Thread-125661] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:59:02.829 [DEBUG] [Thread-125661] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:59:02.829 [DEBUG] [Thread-125661] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:59:02.829 [DEBUG] [Thread-125661] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:59:02.829 [DEBUG] [Thread-125661] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:59:02.829 [DEBUG] [Thread-125661] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:59:02.829 [DEBUG] [Thread-125661] [transport.py] [_log()] client lang: <none>
2025-12-31T09:59:02.829 [DEBUG] [Thread-125661] [transport.py] [_log()] server lang: <none>
2025-12-31T09:59:02.829 [DEBUG] [Thread-125661] [transport.py] [_log()] kex follows: False
2025-12-31T09:59:02.829 [DEBUG] [Thread-125661] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:59:02.829 [DEBUG] [Thread-125661] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:59:02.829 [DEBUG] [Thread-125661] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:59:02.829 [DEBUG] [Thread-125661] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:59:02.829 [DEBUG] [Thread-125661] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:59:02.829 [DEBUG] [Thread-125661] [transport.py] [_log()] Compression: none
2025-12-31T09:59:02.829 [DEBUG] [Thread-125661] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:59:02.844 [DEBUG] [Thread-125661] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:59:02.844 [DEBUG] [Thread-125661] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:59:02.844 [DEBUG] [Thread-125661] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T09:59:02.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T09:59:02.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:59:02.845 [DEBUG] [Thread-125661] [transport.py] [_log()] userauth is OK
2025-12-31T09:59:02.845 [DEBUG] [Thread-125661] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:59:02.845 [DEBUG] [Thread-125661] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:59:02.845 [DEBUG] [Thread-125661] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T09:59:02.845 [DEBUG] [Thread-125661] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:59:02.863 [INFO] [Thread-125661] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:59:02.863 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:59:03.517 [DEBUG] [Thread-125661] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:59:03.517 [DEBUG] [Thread-125661] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:59:03.517 [DEBUG] [Thread-125661] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T09:59:03.559 [DEBUG] [Thread-125661] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:59:03.559 [DEBUG] [Thread-125661] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:59:03.562 [DEBUG] [Thread-125661] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:59:03.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:59:03.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T09:59:03.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T09:59:03.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T09:59:03.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:59:03.588 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T09:59:03.588 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:59:03.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:59:03.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T09:59:03.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.332436 -999.00  +23.50  19.48     13   -5.90 1 1 1 1 1   888    0 38.72 269.49 ----- 16.2 19.5 296.8 25.9 28.6 -28.4 28.6 -25.7 27.2 -28.5 27.7 -27.9
2025-12-31T09:59:03.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T09:59:03.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T09:59:03.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.332436
2025-12-31T09:59:03.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T09:59:03.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T09:59:03.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T09:59:03.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T09:59:03.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T09:59:03.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T09:58:53', tmtdew=35.38, humidity=8.51, cloud=0.0, wind=17.75, temperature=23.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T07:58:42.470', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T09:59:03.591 [DEBUG] [Thread-125661] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:59:03.669 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T09:59:03.682 [DEBUG] [Thread-125664] [transport.py] [_log()] starting thread (client mode): 0xb6bb39d0
2025-12-31T09:59:03.682 [DEBUG] [Thread-125664] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:59:03.696 [DEBUG] [Thread-125664] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T09:59:03.697 [INFO] [Thread-125664] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T09:59:03.704 [DEBUG] [Thread-125664] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:59:03.704 [DEBUG] [Thread-125664] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T09:59:03.704 [DEBUG] [Thread-125664] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:59:03.705 [DEBUG] [Thread-125664] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:59:03.705 [DEBUG] [Thread-125664] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:59:03.705 [DEBUG] [Thread-125664] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:59:03.705 [DEBUG] [Thread-125664] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:59:03.705 [DEBUG] [Thread-125664] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:59:03.705 [DEBUG] [Thread-125664] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:59:03.705 [DEBUG] [Thread-125664] [transport.py] [_log()] client lang: <none>
2025-12-31T09:59:03.705 [DEBUG] [Thread-125664] [transport.py] [_log()] server lang: <none>
2025-12-31T09:59:03.705 [DEBUG] [Thread-125664] [transport.py] [_log()] kex follows: False
2025-12-31T09:59:03.705 [DEBUG] [Thread-125664] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:59:03.705 [DEBUG] [Thread-125664] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:59:03.705 [DEBUG] [Thread-125664] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:59:03.705 [DEBUG] [Thread-125664] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:59:03.705 [DEBUG] [Thread-125664] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:59:03.705 [DEBUG] [Thread-125664] [transport.py] [_log()] Compression: none
2025-12-31T09:59:03.705 [DEBUG] [Thread-125664] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:59:03.767 [DEBUG] [Thread-125664] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:59:03.768 [DEBUG] [Thread-125664] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:59:03.769 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T09:59:03.769 [DEBUG] [Thread-125664] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T09:59:03.770 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:59:03.823 [DEBUG] [Thread-125664] [transport.py] [_log()] userauth is OK
2025-12-31T09:59:03.823 [DEBUG] [Thread-125664] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:59:03.823 [DEBUG] [Thread-125664] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:59:03.824 [DEBUG] [Thread-125664] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T09:59:03.824 [DEBUG] [Thread-125664] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:59:03.847 [INFO] [Thread-125664] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:59:03.848 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T09:59:03.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:59:04.713 [DEBUG] [Thread-125664] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:59:04.714 [DEBUG] [Thread-125664] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:59:04.762 [DEBUG] [Thread-125664] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:59:04.762 [DEBUG] [Thread-125664] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:59:04.771 [DEBUG] [Thread-125664] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:59:04.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:59:04.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T09:59:04.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T09:59:04.799 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:59:04.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:59:04.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:59:04.808 [DEBUG] [Thread-125664] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:59:04.897 [DEBUG] [Thread-125666 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:59:17.151 [DEBUG] [Thread-125667 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:59:21.103 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:59:21.104 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:59:32.210 [DEBUG] [Thread-125668 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T09:59:34.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T09:59:34.829 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T09:59:34.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T09:59:35.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 9, 59, 25), 35.59, 8.39, 0.0, 19.62, 23.97, 0, 0, 0, 2, 0, 0),)
2025-12-31T09:59:35.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 09:59:25
2025-12-31T09:59:35.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T09:59:35.814 [DEBUG] [Thread-125669] [transport.py] [_log()] starting thread (client mode): 0xb95f3400
2025-12-31T09:59:35.814 [DEBUG] [Thread-125669] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:59:35.834 [DEBUG] [Thread-125669] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T09:59:35.834 [INFO] [Thread-125669] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T09:59:35.838 [DEBUG] [Thread-125669] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:59:35.838 [DEBUG] [Thread-125669] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T09:59:35.838 [DEBUG] [Thread-125669] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:59:35.838 [DEBUG] [Thread-125669] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:59:35.838 [DEBUG] [Thread-125669] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:59:35.838 [DEBUG] [Thread-125669] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:59:35.838 [DEBUG] [Thread-125669] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:59:35.838 [DEBUG] [Thread-125669] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:59:35.838 [DEBUG] [Thread-125669] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:59:35.838 [DEBUG] [Thread-125669] [transport.py] [_log()] client lang: <none>
2025-12-31T09:59:35.838 [DEBUG] [Thread-125669] [transport.py] [_log()] server lang: <none>
2025-12-31T09:59:35.838 [DEBUG] [Thread-125669] [transport.py] [_log()] kex follows: False
2025-12-31T09:59:35.838 [DEBUG] [Thread-125669] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:59:35.838 [DEBUG] [Thread-125669] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:59:35.838 [DEBUG] [Thread-125669] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:59:35.838 [DEBUG] [Thread-125669] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:59:35.838 [DEBUG] [Thread-125669] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:59:35.838 [DEBUG] [Thread-125669] [transport.py] [_log()] Compression: none
2025-12-31T09:59:35.839 [DEBUG] [Thread-125669] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:59:35.852 [DEBUG] [Thread-125669] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:59:35.852 [DEBUG] [Thread-125669] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:59:35.853 [DEBUG] [Thread-125669] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T09:59:35.853 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T09:59:35.854 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:59:35.855 [DEBUG] [Thread-125669] [transport.py] [_log()] userauth is OK
2025-12-31T09:59:35.855 [DEBUG] [Thread-125669] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:59:35.855 [DEBUG] [Thread-125669] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:59:35.855 [DEBUG] [Thread-125669] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T09:59:35.855 [DEBUG] [Thread-125669] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:59:35.880 [INFO] [Thread-125669] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:59:35.882 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:59:36.517 [DEBUG] [Thread-125669] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:59:36.517 [DEBUG] [Thread-125669] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:59:36.517 [DEBUG] [Thread-125669] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T09:59:36.559 [DEBUG] [Thread-125669] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:59:36.559 [DEBUG] [Thread-125669] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:59:36.561 [DEBUG] [Thread-125669] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:59:36.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:59:36.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T09:59:36.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T09:59:36.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T09:59:36.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:59:36.574 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T09:59:36.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:59:36.574 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:59:36.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T09:59:36.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.332783 -999.00  +23.70  22.30     14   -5.20 1 1 1 1 1   888    0 37.10 236.19 ----- 22.9 22.3 311.6 24.4 28.9 -25.9 28.6 -25.0 27.6 -25.1 27.9 -25.6
2025-12-31T09:59:36.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T09:59:36.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T09:59:36.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.332783
2025-12-31T09:59:36.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T09:59:36.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T09:59:36.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T09:59:36.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T09:59:36.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T09:59:36.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T09:59:25', tmtdew=35.59, humidity=8.39, cloud=0.0, wind=19.62, temperature=23.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T07:59:12.451', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T09:59:36.575 [DEBUG] [Thread-125669] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:59:36.649 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T09:59:36.661 [DEBUG] [Thread-125672] [transport.py] [_log()] starting thread (client mode): 0xb6b6b790
2025-12-31T09:59:36.661 [DEBUG] [Thread-125672] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T09:59:36.676 [DEBUG] [Thread-125672] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T09:59:36.676 [INFO] [Thread-125672] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T09:59:36.684 [DEBUG] [Thread-125672] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T09:59:36.684 [DEBUG] [Thread-125672] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T09:59:36.684 [DEBUG] [Thread-125672] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T09:59:36.684 [DEBUG] [Thread-125672] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:59:36.684 [DEBUG] [Thread-125672] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T09:59:36.684 [DEBUG] [Thread-125672] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:59:36.684 [DEBUG] [Thread-125672] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T09:59:36.684 [DEBUG] [Thread-125672] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T09:59:36.684 [DEBUG] [Thread-125672] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T09:59:36.684 [DEBUG] [Thread-125672] [transport.py] [_log()] client lang: <none>
2025-12-31T09:59:36.684 [DEBUG] [Thread-125672] [transport.py] [_log()] server lang: <none>
2025-12-31T09:59:36.684 [DEBUG] [Thread-125672] [transport.py] [_log()] kex follows: False
2025-12-31T09:59:36.684 [DEBUG] [Thread-125672] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T09:59:36.684 [DEBUG] [Thread-125672] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T09:59:36.684 [DEBUG] [Thread-125672] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T09:59:36.684 [DEBUG] [Thread-125672] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T09:59:36.684 [DEBUG] [Thread-125672] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T09:59:36.684 [DEBUG] [Thread-125672] [transport.py] [_log()] Compression: none
2025-12-31T09:59:36.684 [DEBUG] [Thread-125672] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T09:59:36.741 [DEBUG] [Thread-125672] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T09:59:36.742 [DEBUG] [Thread-125672] [transport.py] [_log()] Switch to new keys ...
2025-12-31T09:59:36.742 [DEBUG] [Thread-125672] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T09:59:36.742 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T09:59:36.742 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T09:59:36.799 [DEBUG] [Thread-125672] [transport.py] [_log()] userauth is OK
2025-12-31T09:59:36.799 [DEBUG] [Thread-125672] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T09:59:36.799 [DEBUG] [Thread-125672] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T09:59:36.799 [DEBUG] [Thread-125672] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T09:59:36.799 [DEBUG] [Thread-125672] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T09:59:36.817 [INFO] [Thread-125672] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T09:59:36.817 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T09:59:36.817 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T09:59:37.636 [DEBUG] [Thread-125672] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T09:59:37.637 [DEBUG] [Thread-125672] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T09:59:37.684 [DEBUG] [Thread-125672] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T09:59:37.684 [DEBUG] [Thread-125672] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T09:59:37.693 [DEBUG] [Thread-125672] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T09:59:37.701 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T09:59:37.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T09:59:37.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T09:59:37.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T09:59:37.717 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T09:59:37.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T09:59:37.725 [DEBUG] [Thread-125672] [transport.py] [_log()] EOF in transport thread
2025-12-31T09:59:47.243 [DEBUG] [Thread-125674 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:00:02.293 [DEBUG] [Thread-125675 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:00:04.966 [DEBUG] [Thread-125676 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:00:07.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T10:00:07.747 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T10:00:07.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T10:00:08.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 9, 59, 57), 34.83, 8.92, 0.0, 20.94, 24.32, 0, 0, 0, 2, 0, 0),)
2025-12-31T10:00:08.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 09:59:57
2025-12-31T10:00:08.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T10:00:08.733 [DEBUG] [Thread-125677] [transport.py] [_log()] starting thread (client mode): 0xb6bb2fe0
2025-12-31T10:00:08.733 [DEBUG] [Thread-125677] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:00:08.745 [DEBUG] [Thread-125677] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T10:00:08.745 [INFO] [Thread-125677] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T10:00:08.746 [DEBUG] [Thread-125677] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:00:08.746 [DEBUG] [Thread-125677] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T10:00:08.746 [DEBUG] [Thread-125677] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:00:08.746 [DEBUG] [Thread-125677] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:00:08.746 [DEBUG] [Thread-125677] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:00:08.746 [DEBUG] [Thread-125677] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:00:08.746 [DEBUG] [Thread-125677] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:00:08.746 [DEBUG] [Thread-125677] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:00:08.746 [DEBUG] [Thread-125677] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:00:08.746 [DEBUG] [Thread-125677] [transport.py] [_log()] client lang: <none>
2025-12-31T10:00:08.747 [DEBUG] [Thread-125677] [transport.py] [_log()] server lang: <none>
2025-12-31T10:00:08.747 [DEBUG] [Thread-125677] [transport.py] [_log()] kex follows: False
2025-12-31T10:00:08.747 [DEBUG] [Thread-125677] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:00:08.747 [DEBUG] [Thread-125677] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:00:08.747 [DEBUG] [Thread-125677] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:00:08.747 [DEBUG] [Thread-125677] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:00:08.747 [DEBUG] [Thread-125677] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:00:08.747 [DEBUG] [Thread-125677] [transport.py] [_log()] Compression: none
2025-12-31T10:00:08.747 [DEBUG] [Thread-125677] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:00:08.757 [DEBUG] [Thread-125677] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:00:08.758 [DEBUG] [Thread-125677] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:00:08.758 [DEBUG] [Thread-125677] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T10:00:08.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T10:00:08.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:00:08.760 [DEBUG] [Thread-125677] [transport.py] [_log()] userauth is OK
2025-12-31T10:00:08.760 [DEBUG] [Thread-125677] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:00:08.760 [DEBUG] [Thread-125677] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:00:08.760 [DEBUG] [Thread-125677] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T10:00:08.760 [DEBUG] [Thread-125677] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:00:08.786 [INFO] [Thread-125677] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:00:08.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:00:12.759 [DEBUG] [Thread-125677] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:00:12.759 [DEBUG] [Thread-125677] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:00:12.759 [DEBUG] [Thread-125677] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T10:00:12.800 [DEBUG] [Thread-125677] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:00:12.800 [DEBUG] [Thread-125677] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:00:12.804 [DEBUG] [Thread-125677] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:00:12.819 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:00:12.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T10:00:12.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T10:00:12.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T10:00:12.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:00:12.831 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T10:00:12.831 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:00:12.831 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:00:12.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T10:00:12.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.333130 -999.00  +23.60  26.57     15   -4.20 1 1 1 1 1   888    0 35.59 182.91 ----- 24.4 26.6 306.4 36.9 29.1 -25.0 28.8 -24.9 27.7 -24.4 28.0 -25.1
2025-12-31T10:00:12.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T10:00:12.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T10:00:12.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.333130
2025-12-31T10:00:12.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T10:00:12.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T10:00:12.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T10:00:12.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T10:00:12.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T10:00:12.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T09:59:57', tmtdew=34.83, humidity=8.92, cloud=0.0, wind=20.94, temperature=24.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T07:59:42.432', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T10:00:12.834 [DEBUG] [Thread-125677] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:00:12.920 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T10:00:12.932 [DEBUG] [Thread-125680] [transport.py] [_log()] starting thread (client mode): 0xb6b357e0
2025-12-31T10:00:12.932 [DEBUG] [Thread-125680] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:00:12.947 [DEBUG] [Thread-125680] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T10:00:12.947 [INFO] [Thread-125680] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T10:00:12.954 [DEBUG] [Thread-125680] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:00:12.955 [DEBUG] [Thread-125680] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T10:00:12.955 [DEBUG] [Thread-125680] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:00:12.955 [DEBUG] [Thread-125680] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:00:12.955 [DEBUG] [Thread-125680] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:00:12.955 [DEBUG] [Thread-125680] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:00:12.955 [DEBUG] [Thread-125680] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:00:12.955 [DEBUG] [Thread-125680] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:00:12.955 [DEBUG] [Thread-125680] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:00:12.955 [DEBUG] [Thread-125680] [transport.py] [_log()] client lang: <none>
2025-12-31T10:00:12.955 [DEBUG] [Thread-125680] [transport.py] [_log()] server lang: <none>
2025-12-31T10:00:12.955 [DEBUG] [Thread-125680] [transport.py] [_log()] kex follows: False
2025-12-31T10:00:12.955 [DEBUG] [Thread-125680] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:00:12.955 [DEBUG] [Thread-125680] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:00:12.955 [DEBUG] [Thread-125680] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:00:12.955 [DEBUG] [Thread-125680] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:00:12.955 [DEBUG] [Thread-125680] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:00:12.955 [DEBUG] [Thread-125680] [transport.py] [_log()] Compression: none
2025-12-31T10:00:12.955 [DEBUG] [Thread-125680] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:00:13.020 [DEBUG] [Thread-125680] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:00:13.021 [DEBUG] [Thread-125680] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:00:13.021 [DEBUG] [Thread-125680] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T10:00:13.022 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T10:00:13.022 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:00:13.079 [DEBUG] [Thread-125680] [transport.py] [_log()] userauth is OK
2025-12-31T10:00:13.079 [DEBUG] [Thread-125680] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:00:13.080 [DEBUG] [Thread-125680] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:00:13.080 [DEBUG] [Thread-125680] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T10:00:13.080 [DEBUG] [Thread-125680] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:00:13.100 [INFO] [Thread-125680] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:00:13.100 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T10:00:13.101 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:00:13.940 [DEBUG] [Thread-125680] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:00:13.940 [DEBUG] [Thread-125680] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:00:13.994 [DEBUG] [Thread-125680] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:00:13.994 [DEBUG] [Thread-125680] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:00:14.010 [DEBUG] [Thread-125680] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:00:14.026 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:00:14.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T10:00:14.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T10:00:14.059 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:00:14.059 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:00:14.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:00:14.075 [DEBUG] [Thread-125680] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:00:17.326 [DEBUG] [Thread-125682 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:00:21.244 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:00:21.245 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:00:32.378 [DEBUG] [Thread-125683 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:00:44.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T10:00:44.090 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T10:00: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-12-31T10:00:44.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 10, 0, 29), 34.66, 9.04, 0.0, 17.59, 24.27, 0, 0, 0, 2, 0, 0),)
2025-12-31T10:00:44.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 10:00:29
2025-12-31T10:00:44.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T10:00:45.078 [DEBUG] [Thread-125684] [transport.py] [_log()] starting thread (client mode): 0xb6b34b20
2025-12-31T10:00:45.078 [DEBUG] [Thread-125684] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:00:45.093 [DEBUG] [Thread-125684] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T10:00:45.093 [INFO] [Thread-125684] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T10:00:45.097 [DEBUG] [Thread-125684] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:00:45.097 [DEBUG] [Thread-125684] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T10:00:45.097 [DEBUG] [Thread-125684] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:00:45.097 [DEBUG] [Thread-125684] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:00:45.097 [DEBUG] [Thread-125684] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:00:45.097 [DEBUG] [Thread-125684] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:00:45.097 [DEBUG] [Thread-125684] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:00:45.097 [DEBUG] [Thread-125684] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:00:45.097 [DEBUG] [Thread-125684] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:00:45.097 [DEBUG] [Thread-125684] [transport.py] [_log()] client lang: <none>
2025-12-31T10:00:45.097 [DEBUG] [Thread-125684] [transport.py] [_log()] server lang: <none>
2025-12-31T10:00:45.097 [DEBUG] [Thread-125684] [transport.py] [_log()] kex follows: False
2025-12-31T10:00:45.097 [DEBUG] [Thread-125684] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:00:45.097 [DEBUG] [Thread-125684] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:00:45.097 [DEBUG] [Thread-125684] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:00:45.097 [DEBUG] [Thread-125684] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:00:45.097 [DEBUG] [Thread-125684] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:00:45.097 [DEBUG] [Thread-125684] [transport.py] [_log()] Compression: none
2025-12-31T10:00:45.097 [DEBUG] [Thread-125684] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:00:45.114 [DEBUG] [Thread-125684] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:00:45.115 [DEBUG] [Thread-125684] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:00:45.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T10:00:45.116 [DEBUG] [Thread-125684] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T10:00:45.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:00:45.118 [DEBUG] [Thread-125684] [transport.py] [_log()] userauth is OK
2025-12-31T10:00:45.118 [DEBUG] [Thread-125684] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:00:45.118 [DEBUG] [Thread-125684] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:00:45.118 [DEBUG] [Thread-125684] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T10:00:45.118 [DEBUG] [Thread-125684] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:00:45.136 [INFO] [Thread-125684] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:00:45.137 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:00:45.756 [DEBUG] [Thread-125684] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:00:45.756 [DEBUG] [Thread-125684] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:00:45.757 [DEBUG] [Thread-125684] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T10:00:45.797 [DEBUG] [Thread-125684] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:00:45.798 [DEBUG] [Thread-125684] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:00:45.800 [DEBUG] [Thread-125684] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:00:45.812 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:00:45.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T10:00:45.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T10:00:45.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T10:00:45.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:00:45.820 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T10:00:45.820 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:00:45.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:00:45.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T10:00:45.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.333477 -999.00  +23.60  19.35     15   -4.00 1 1 1 1 1   888    0 34.81 174.98 ----- 20.2 19.4 310.2 24.6 29.3 -26.4 28.8 -27.3 27.6 -26.6 28.1 -25.4
2025-12-31T10:00:45.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T10:00:45.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T10:00:45.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.333477
2025-12-31T10:00:45.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T10:00:45.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T10:00:45.822 [DEBUG] [Thread-125684] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:00:45.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T10:00:45.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T10:00:45.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T10:00:45.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T10:00:29', tmtdew=34.66, humidity=9.04, cloud=0.0, wind=17.59, temperature=24.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T08:00:12.413', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T10:00:45.909 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T10:00:45.919 [DEBUG] [Thread-125687] [transport.py] [_log()] starting thread (client mode): 0xb6bb3e20
2025-12-31T10:00:45.920 [DEBUG] [Thread-125687] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:00:45.934 [DEBUG] [Thread-125687] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T10:00:45.934 [INFO] [Thread-125687] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T10:00:45.942 [DEBUG] [Thread-125687] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:00:45.943 [DEBUG] [Thread-125687] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T10:00:45.943 [DEBUG] [Thread-125687] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:00:45.943 [DEBUG] [Thread-125687] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:00:45.943 [DEBUG] [Thread-125687] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:00:45.943 [DEBUG] [Thread-125687] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:00:45.943 [DEBUG] [Thread-125687] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:00:45.944 [DEBUG] [Thread-125687] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:00:45.944 [DEBUG] [Thread-125687] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:00:45.944 [DEBUG] [Thread-125687] [transport.py] [_log()] client lang: <none>
2025-12-31T10:00:45.944 [DEBUG] [Thread-125687] [transport.py] [_log()] server lang: <none>
2025-12-31T10:00:45.944 [DEBUG] [Thread-125687] [transport.py] [_log()] kex follows: False
2025-12-31T10:00:45.944 [DEBUG] [Thread-125687] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:00:45.944 [DEBUG] [Thread-125687] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:00:45.944 [DEBUG] [Thread-125687] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:00:45.944 [DEBUG] [Thread-125687] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:00:45.944 [DEBUG] [Thread-125687] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:00:45.944 [DEBUG] [Thread-125687] [transport.py] [_log()] Compression: none
2025-12-31T10:00:45.944 [DEBUG] [Thread-125687] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:00:45.999 [DEBUG] [Thread-125687] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:00:46.000 [DEBUG] [Thread-125687] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:00:46.000 [DEBUG] [Thread-125687] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T10:00:46.000 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T10:00:46.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:00:46.055 [DEBUG] [Thread-125687] [transport.py] [_log()] userauth is OK
2025-12-31T10:00:46.056 [DEBUG] [Thread-125687] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:00:46.056 [DEBUG] [Thread-125687] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:00:46.056 [DEBUG] [Thread-125687] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T10:00:46.056 [DEBUG] [Thread-125687] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:00:46.076 [INFO] [Thread-125687] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:00:46.076 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T10:00:46.077 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:00:46.951 [DEBUG] [Thread-125687] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:00:46.951 [DEBUG] [Thread-125687] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:00:46.999 [DEBUG] [Thread-125687] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:00:47.000 [DEBUG] [Thread-125687] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:00:47.009 [DEBUG] [Thread-125687] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:00:47.018 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:00:47.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T10:00:47.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T10:00:47.037 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:00:47.037 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:00:47.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:00:47.045 [DEBUG] [Thread-125687] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:00:47.410 [DEBUG] [Thread-125689 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:01:02.451 [DEBUG] [Thread-125690 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:01:05.016 [DEBUG] [Thread-125691 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:01:17.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T10:01:17.041 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T10:01:17.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T10:01:17.480 [DEBUG] [Thread-125692 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:01:17.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 10, 1, 1), 34.09, 9.55, 0.0, 15.77, 24.22, 0, 0, 0, 2, 0, 0),)
2025-12-31T10:01:17.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 10:01:01
2025-12-31T10:01:17.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T10:01:18.091 [DEBUG] [Thread-125693] [transport.py] [_log()] starting thread (client mode): 0xb6b191b0
2025-12-31T10:01:18.091 [DEBUG] [Thread-125693] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:01:18.111 [DEBUG] [Thread-125693] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T10:01:18.111 [INFO] [Thread-125693] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T10:01:18.114 [DEBUG] [Thread-125693] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:01:18.114 [DEBUG] [Thread-125693] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T10:01:18.114 [DEBUG] [Thread-125693] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:01:18.114 [DEBUG] [Thread-125693] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:01:18.114 [DEBUG] [Thread-125693] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:01:18.114 [DEBUG] [Thread-125693] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:01:18.114 [DEBUG] [Thread-125693] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:01:18.114 [DEBUG] [Thread-125693] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:01:18.115 [DEBUG] [Thread-125693] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:01:18.115 [DEBUG] [Thread-125693] [transport.py] [_log()] client lang: <none>
2025-12-31T10:01:18.115 [DEBUG] [Thread-125693] [transport.py] [_log()] server lang: <none>
2025-12-31T10:01:18.115 [DEBUG] [Thread-125693] [transport.py] [_log()] kex follows: False
2025-12-31T10:01:18.115 [DEBUG] [Thread-125693] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:01:18.115 [DEBUG] [Thread-125693] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:01:18.115 [DEBUG] [Thread-125693] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:01:18.115 [DEBUG] [Thread-125693] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:01:18.115 [DEBUG] [Thread-125693] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:01:18.115 [DEBUG] [Thread-125693] [transport.py] [_log()] Compression: none
2025-12-31T10:01:18.115 [DEBUG] [Thread-125693] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:01:18.140 [DEBUG] [Thread-125693] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:01:18.140 [DEBUG] [Thread-125693] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:01:18.140 [DEBUG] [Thread-125693] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T10:01:18.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T10:01:18.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:01:18.141 [DEBUG] [Thread-125693] [transport.py] [_log()] userauth is OK
2025-12-31T10:01:18.141 [DEBUG] [Thread-125693] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:01:18.141 [DEBUG] [Thread-125693] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:01:18.141 [DEBUG] [Thread-125693] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T10:01:18.141 [DEBUG] [Thread-125693] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:01:18.151 [INFO] [Thread-125693] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:01:18.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:01:18.778 [DEBUG] [Thread-125693] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:01:18.787 [DEBUG] [Thread-125693] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:01:18.787 [DEBUG] [Thread-125693] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T10:01:18.819 [DEBUG] [Thread-125693] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:01:18.819 [DEBUG] [Thread-125693] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:01:18.821 [DEBUG] [Thread-125693] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:01:18.833 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:01:18.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T10:01:18.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T10:01:18.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T10:01:18.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:01:18.838 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T10:01:18.838 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:01:18.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:01:18.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T10:01:18.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.333824 -999.00  +23.90  20.48     14   -4.30 1 1 1 1 1   888    0 33.80 131.34 ----- 22.5 20.5 306.4 26.2 29.3 -27.4 28.7 -27.9 27.5 -27.6 28.1 -26.6
2025-12-31T10:01:18.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T10:01:18.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T10:01:18.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.333824
2025-12-31T10:01:18.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T10:01:18.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T10:01:18.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T10:01:18.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T10:01:18.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T10:01:18.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T10:01:01', tmtdew=34.09, humidity=9.55, cloud=0.0, wind=15.77, temperature=24.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T08:00:42.394', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T10:01:18.839 [DEBUG] [Thread-125693] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:01:18.913 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T10:01:18.925 [DEBUG] [Thread-125696] [transport.py] [_log()] starting thread (client mode): 0xb6b19f00
2025-12-31T10:01:18.926 [DEBUG] [Thread-125696] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:01:18.940 [DEBUG] [Thread-125696] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T10:01:18.940 [INFO] [Thread-125696] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T10:01:18.951 [DEBUG] [Thread-125696] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:01:18.951 [DEBUG] [Thread-125696] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T10:01:18.952 [DEBUG] [Thread-125696] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:01:18.952 [DEBUG] [Thread-125696] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:01:18.952 [DEBUG] [Thread-125696] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:01:18.952 [DEBUG] [Thread-125696] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:01:18.952 [DEBUG] [Thread-125696] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:01:18.952 [DEBUG] [Thread-125696] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:01:18.952 [DEBUG] [Thread-125696] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:01:18.952 [DEBUG] [Thread-125696] [transport.py] [_log()] client lang: <none>
2025-12-31T10:01:18.952 [DEBUG] [Thread-125696] [transport.py] [_log()] server lang: <none>
2025-12-31T10:01:18.952 [DEBUG] [Thread-125696] [transport.py] [_log()] kex follows: False
2025-12-31T10:01:18.952 [DEBUG] [Thread-125696] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:01:18.952 [DEBUG] [Thread-125696] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:01:18.952 [DEBUG] [Thread-125696] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:01:18.952 [DEBUG] [Thread-125696] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:01:18.952 [DEBUG] [Thread-125696] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:01:18.952 [DEBUG] [Thread-125696] [transport.py] [_log()] Compression: none
2025-12-31T10:01:18.952 [DEBUG] [Thread-125696] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:01:19.009 [DEBUG] [Thread-125696] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:01:19.010 [DEBUG] [Thread-125696] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:01:19.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T10:01:19.010 [DEBUG] [Thread-125696] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T10:01:19.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:01:19.067 [DEBUG] [Thread-125696] [transport.py] [_log()] userauth is OK
2025-12-31T10:01:19.067 [DEBUG] [Thread-125696] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:01:19.067 [DEBUG] [Thread-125696] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:01:19.067 [DEBUG] [Thread-125696] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T10:01:19.067 [DEBUG] [Thread-125696] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:01:19.084 [INFO] [Thread-125696] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:01: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-12-31T10:01:19.085 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:01:19.969 [DEBUG] [Thread-125696] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:01:19.969 [DEBUG] [Thread-125696] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:01:20.016 [DEBUG] [Thread-125696] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:01:20.016 [DEBUG] [Thread-125696] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:01:20.024 [DEBUG] [Thread-125696] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:01:20.032 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:01:20.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T10:01:20.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T10:01:20.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:01:20.047 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:01:20.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:01:20.055 [DEBUG] [Thread-125696] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:01:21.385 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:01:21.386 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:01:32.512 [DEBUG] [Thread-125698 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:01:47.562 [DEBUG] [Thread-125699 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:01:50.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T10:01:50.064 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T10:01:50.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T10:01:50.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 10, 1, 33), 34.46, 9.29, 0.0, 18.42, 24.22, 0, 0, 0, 2, 0, 0),)
2025-12-31T10:01:50.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 10:01:33
2025-12-31T10:01:50.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T10:01:51.059 [DEBUG] [Thread-125700] [transport.py] [_log()] starting thread (client mode): 0xb955af80
2025-12-31T10:01:51.059 [DEBUG] [Thread-125700] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:01:51.079 [DEBUG] [Thread-125700] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T10:01:51.080 [INFO] [Thread-125700] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T10:01:51.083 [DEBUG] [Thread-125700] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:01:51.083 [DEBUG] [Thread-125700] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T10:01:51.083 [DEBUG] [Thread-125700] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:01:51.083 [DEBUG] [Thread-125700] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:01:51.083 [DEBUG] [Thread-125700] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:01:51.083 [DEBUG] [Thread-125700] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:01:51.083 [DEBUG] [Thread-125700] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:01:51.083 [DEBUG] [Thread-125700] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:01:51.083 [DEBUG] [Thread-125700] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:01:51.083 [DEBUG] [Thread-125700] [transport.py] [_log()] client lang: <none>
2025-12-31T10:01:51.083 [DEBUG] [Thread-125700] [transport.py] [_log()] server lang: <none>
2025-12-31T10:01:51.083 [DEBUG] [Thread-125700] [transport.py] [_log()] kex follows: False
2025-12-31T10:01:51.083 [DEBUG] [Thread-125700] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:01:51.083 [DEBUG] [Thread-125700] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:01:51.083 [DEBUG] [Thread-125700] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:01:51.083 [DEBUG] [Thread-125700] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:01:51.083 [DEBUG] [Thread-125700] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:01:51.083 [DEBUG] [Thread-125700] [transport.py] [_log()] Compression: none
2025-12-31T10:01:51.083 [DEBUG] [Thread-125700] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:01:51.103 [DEBUG] [Thread-125700] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:01:51.104 [DEBUG] [Thread-125700] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:01:51.105 [DEBUG] [Thread-125700] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T10:01:51.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T10:01:51.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:01:51.148 [DEBUG] [Thread-125700] [transport.py] [_log()] userauth is OK
2025-12-31T10:01:51.149 [DEBUG] [Thread-125700] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:01:51.149 [DEBUG] [Thread-125700] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:01:51.149 [DEBUG] [Thread-125700] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T10:01:51.149 [DEBUG] [Thread-125700] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:01:51.182 [INFO] [Thread-125700] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:01:51.183 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:01:51.793 [DEBUG] [Thread-125700] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:01:51.794 [DEBUG] [Thread-125700] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:01:51.795 [DEBUG] [Thread-125700] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T10:01:51.835 [DEBUG] [Thread-125700] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:01:51.836 [DEBUG] [Thread-125700] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:01:51.839 [DEBUG] [Thread-125700] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:01:51.850 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:01:51.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T10:01:51.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T10:01:51.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T10:01:51.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:01:51.862 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T10:01:51.862 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:01:51.862 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:01:51.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T10:01:51.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.334519 -999.00  +23.90  17.55     14   -4.30 1 1 1 1 1   888    0 32.41 68.20 ----- 18.8 17.6 294.4 24.1 29.5 -24.9 29.1 -25.0 27.8 -25.3 28.2 -25.0
2025-12-31T10:01:51.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T10:01:51.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T10:01:51.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.334519
2025-12-31T10:01:51.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T10:01:51.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T10:01:51.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T10:01:51.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T10:01:51.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T10:01:51.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T10:01:33', tmtdew=34.46, humidity=9.29, cloud=0.0, wind=18.42, temperature=24.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T08:01:42.442', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T10:01:51.865 [DEBUG] [Thread-125700] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:01:51.949 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T10:01:51.962 [DEBUG] [Thread-125703] [transport.py] [_log()] starting thread (client mode): 0xb6bbb2b0
2025-12-31T10:01:51.962 [DEBUG] [Thread-125703] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:01:51.976 [DEBUG] [Thread-125703] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T10:01:51.976 [INFO] [Thread-125703] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T10:01:51.984 [DEBUG] [Thread-125703] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:01:51.984 [DEBUG] [Thread-125703] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T10:01:51.984 [DEBUG] [Thread-125703] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:01:51.984 [DEBUG] [Thread-125703] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:01:51.984 [DEBUG] [Thread-125703] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:01:51.984 [DEBUG] [Thread-125703] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:01:51.984 [DEBUG] [Thread-125703] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:01:51.984 [DEBUG] [Thread-125703] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:01:51.984 [DEBUG] [Thread-125703] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:01:51.984 [DEBUG] [Thread-125703] [transport.py] [_log()] client lang: <none>
2025-12-31T10:01:51.984 [DEBUG] [Thread-125703] [transport.py] [_log()] server lang: <none>
2025-12-31T10:01:51.984 [DEBUG] [Thread-125703] [transport.py] [_log()] kex follows: False
2025-12-31T10:01:51.984 [DEBUG] [Thread-125703] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:01:51.985 [DEBUG] [Thread-125703] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:01:51.985 [DEBUG] [Thread-125703] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:01:51.985 [DEBUG] [Thread-125703] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:01:51.985 [DEBUG] [Thread-125703] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:01:51.985 [DEBUG] [Thread-125703] [transport.py] [_log()] Compression: none
2025-12-31T10:01:51.985 [DEBUG] [Thread-125703] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:01:52.044 [DEBUG] [Thread-125703] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:01:52.044 [DEBUG] [Thread-125703] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:01:52.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T10:01:52.045 [DEBUG] [Thread-125703] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T10:01:52.046 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:01:52.100 [DEBUG] [Thread-125703] [transport.py] [_log()] userauth is OK
2025-12-31T10:01:52.100 [DEBUG] [Thread-125703] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:01:52.100 [DEBUG] [Thread-125703] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:01:52.100 [DEBUG] [Thread-125703] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T10:01:52.100 [DEBUG] [Thread-125703] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:01:52.125 [INFO] [Thread-125703] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:01:52.125 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T10:01:52.126 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:01:52.969 [DEBUG] [Thread-125703] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:01:52.969 [DEBUG] [Thread-125703] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:01:53.017 [DEBUG] [Thread-125703] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:01:53.017 [DEBUG] [Thread-125703] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:01:53.027 [DEBUG] [Thread-125703] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:01:53.037 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:01:53.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T10:01:53.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T10:01:53.059 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:01:53.059 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:01:53.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:01:53.068 [DEBUG] [Thread-125703] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:02:02.598 [DEBUG] [Thread-125705 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:02:05.049 [DEBUG] [Thread-125706 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:02:17.659 [DEBUG] [Thread-125707 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:02:21.525 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:02:21.526 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:02:23.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T10:02:23.090 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T10:02:23.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T10:02:23.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 10, 2, 5), 34.26, 9.42, 0.0, 18.03, 24.18, 0, 0, 0, 2, 0, 0),)
2025-12-31T10:02:23.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 10:02:05
2025-12-31T10:02:23.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T10:02:24.079 [DEBUG] [Thread-125708] [transport.py] [_log()] starting thread (client mode): 0xb6bb8eb0
2025-12-31T10:02:24.079 [DEBUG] [Thread-125708] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:02:24.096 [DEBUG] [Thread-125708] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T10:02:24.096 [INFO] [Thread-125708] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T10:02:24.100 [DEBUG] [Thread-125708] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:02:24.100 [DEBUG] [Thread-125708] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T10:02:24.100 [DEBUG] [Thread-125708] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:02:24.100 [DEBUG] [Thread-125708] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:02:24.100 [DEBUG] [Thread-125708] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:02:24.100 [DEBUG] [Thread-125708] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:02:24.100 [DEBUG] [Thread-125708] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:02:24.100 [DEBUG] [Thread-125708] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:02:24.100 [DEBUG] [Thread-125708] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:02:24.100 [DEBUG] [Thread-125708] [transport.py] [_log()] client lang: <none>
2025-12-31T10:02:24.100 [DEBUG] [Thread-125708] [transport.py] [_log()] server lang: <none>
2025-12-31T10:02:24.100 [DEBUG] [Thread-125708] [transport.py] [_log()] kex follows: False
2025-12-31T10:02:24.100 [DEBUG] [Thread-125708] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:02:24.100 [DEBUG] [Thread-125708] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:02:24.100 [DEBUG] [Thread-125708] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:02:24.101 [DEBUG] [Thread-125708] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:02:24.101 [DEBUG] [Thread-125708] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:02:24.101 [DEBUG] [Thread-125708] [transport.py] [_log()] Compression: none
2025-12-31T10:02:24.101 [DEBUG] [Thread-125708] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:02:24.118 [DEBUG] [Thread-125708] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:02:24.118 [DEBUG] [Thread-125708] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:02:24.119 [DEBUG] [Thread-125708] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T10:02:24.119 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T10:02:24.120 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:02:24.122 [DEBUG] [Thread-125708] [transport.py] [_log()] userauth is OK
2025-12-31T10:02:24.122 [DEBUG] [Thread-125708] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:02:24.122 [DEBUG] [Thread-125708] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:02:24.122 [DEBUG] [Thread-125708] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T10:02:24.122 [DEBUG] [Thread-125708] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:02:24.142 [INFO] [Thread-125708] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:02:24.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:02:24.769 [DEBUG] [Thread-125708] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:02:24.769 [DEBUG] [Thread-125708] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:02:24.770 [DEBUG] [Thread-125708] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T10:02:24.810 [DEBUG] [Thread-125708] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:02:24.810 [DEBUG] [Thread-125708] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:02:24.814 [DEBUG] [Thread-125708] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:02:24.821 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:02:24.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T10:02:24.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T10:02:24.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T10:02:24.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:02:24.832 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T10:02:24.832 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:02:24.832 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:02:24.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T10:02:24.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.334866 -999.00  +24.00  18.97     15   -3.70 1 1 1 1 1   888    0 30.99 30.93 ----- 22.5 19.0 302.2 28.3 29.7 -26.4 29.2 -25.5 27.8 -25.2 28.3 -25.1
2025-12-31T10:02:24.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T10:02:24.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T10:02:24.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.334866
2025-12-31T10:02:24.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T10:02:24.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T10:02:24.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T10:02:24.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T10:02:24.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T10:02:24.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T10:02:05', tmtdew=34.26, humidity=9.42, cloud=0.0, wind=18.03, temperature=24.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T08:02:12.422', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T10:02:24.835 [DEBUG] [Thread-125708] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:02:24.918 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T10:02:24.930 [DEBUG] [Thread-125711] [transport.py] [_log()] starting thread (client mode): 0xb95f2920
2025-12-31T10:02:24.930 [DEBUG] [Thread-125711] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:02:24.944 [DEBUG] [Thread-125711] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T10:02:24.945 [INFO] [Thread-125711] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T10:02:24.952 [DEBUG] [Thread-125711] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:02:24.952 [DEBUG] [Thread-125711] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T10:02:24.953 [DEBUG] [Thread-125711] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:02:24.953 [DEBUG] [Thread-125711] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:02:24.953 [DEBUG] [Thread-125711] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:02:24.953 [DEBUG] [Thread-125711] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:02:24.953 [DEBUG] [Thread-125711] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:02:24.953 [DEBUG] [Thread-125711] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:02:24.953 [DEBUG] [Thread-125711] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:02:24.953 [DEBUG] [Thread-125711] [transport.py] [_log()] client lang: <none>
2025-12-31T10:02:24.953 [DEBUG] [Thread-125711] [transport.py] [_log()] server lang: <none>
2025-12-31T10:02:24.953 [DEBUG] [Thread-125711] [transport.py] [_log()] kex follows: False
2025-12-31T10:02:24.953 [DEBUG] [Thread-125711] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:02:24.953 [DEBUG] [Thread-125711] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:02:24.953 [DEBUG] [Thread-125711] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:02:24.953 [DEBUG] [Thread-125711] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:02:24.953 [DEBUG] [Thread-125711] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:02:24.953 [DEBUG] [Thread-125711] [transport.py] [_log()] Compression: none
2025-12-31T10:02:24.953 [DEBUG] [Thread-125711] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:02:25.012 [DEBUG] [Thread-125711] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:02:25.013 [DEBUG] [Thread-125711] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:02:25.014 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T10:02:25.014 [DEBUG] [Thread-125711] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T10:02:25.015 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:02:25.072 [DEBUG] [Thread-125711] [transport.py] [_log()] userauth is OK
2025-12-31T10:02:25.072 [DEBUG] [Thread-125711] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:02:25.073 [DEBUG] [Thread-125711] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:02:25.073 [DEBUG] [Thread-125711] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T10:02:25.073 [DEBUG] [Thread-125711] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:02:25.092 [INFO] [Thread-125711] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:02:25.092 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T10:02:25.093 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:02:25.922 [DEBUG] [Thread-125711] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:02:25.922 [DEBUG] [Thread-125711] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:02:25.972 [DEBUG] [Thread-125711] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:02:25.973 [DEBUG] [Thread-125711] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:02:25.986 [DEBUG] [Thread-125711] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:02:25.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:02:25.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T10:02:26.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T10:02:26.014 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:02:26.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:02:26.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:02:26.023 [DEBUG] [Thread-125711] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:02:32.704 [DEBUG] [Thread-125713 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:02:47.745 [DEBUG] [Thread-125714 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:02:56.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T10:02:56.035 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T10:02:56.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T10:02:56.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 10, 2, 37), 33.74, 9.64, 0.0, 16.43, 24.3, 0, 0, 0, 2, 0, 0),)
2025-12-31T10:02:56.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 10:02:37
2025-12-31T10:02:56.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T10:02:57.027 [DEBUG] [Thread-125715] [transport.py] [_log()] starting thread (client mode): 0xb95f1f60
2025-12-31T10:02:57.027 [DEBUG] [Thread-125715] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:02:57.048 [DEBUG] [Thread-125715] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T10:02:57.048 [INFO] [Thread-125715] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T10:02:57.051 [DEBUG] [Thread-125715] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:02:57.052 [DEBUG] [Thread-125715] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T10:02:57.052 [DEBUG] [Thread-125715] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:02:57.052 [DEBUG] [Thread-125715] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:02:57.052 [DEBUG] [Thread-125715] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:02:57.052 [DEBUG] [Thread-125715] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:02:57.052 [DEBUG] [Thread-125715] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:02:57.052 [DEBUG] [Thread-125715] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:02:57.052 [DEBUG] [Thread-125715] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:02:57.052 [DEBUG] [Thread-125715] [transport.py] [_log()] client lang: <none>
2025-12-31T10:02:57.052 [DEBUG] [Thread-125715] [transport.py] [_log()] server lang: <none>
2025-12-31T10:02:57.052 [DEBUG] [Thread-125715] [transport.py] [_log()] kex follows: False
2025-12-31T10:02:57.052 [DEBUG] [Thread-125715] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:02:57.052 [DEBUG] [Thread-125715] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:02:57.052 [DEBUG] [Thread-125715] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:02:57.052 [DEBUG] [Thread-125715] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:02:57.052 [DEBUG] [Thread-125715] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:02:57.052 [DEBUG] [Thread-125715] [transport.py] [_log()] Compression: none
2025-12-31T10:02:57.052 [DEBUG] [Thread-125715] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:02:57.071 [DEBUG] [Thread-125715] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:02:57.071 [DEBUG] [Thread-125715] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:02:57.072 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T10:02:57.073 [DEBUG] [Thread-125715] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T10:02:57.074 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:02:57.075 [DEBUG] [Thread-125715] [transport.py] [_log()] userauth is OK
2025-12-31T10:02:57.075 [DEBUG] [Thread-125715] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:02:57.075 [DEBUG] [Thread-125715] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:02:57.075 [DEBUG] [Thread-125715] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T10:02:57.075 [DEBUG] [Thread-125715] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:02:57.100 [INFO] [Thread-125715] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:02:57.101 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:02:57.717 [DEBUG] [Thread-125715] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:02:57.717 [DEBUG] [Thread-125715] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:02:57.718 [DEBUG] [Thread-125715] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T10:02:57.758 [DEBUG] [Thread-125715] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:02:57.758 [DEBUG] [Thread-125715] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:02:57.761 [DEBUG] [Thread-125715] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:02:57.774 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:02:57.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T10:02:57.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T10:02:57.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T10:02:57.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:02:57.786 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T10:02:57.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:02:57.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:02:57.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T10:02:57.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.335213 -999.00  +24.00  21.66     15   -3.40 1 1 1 1 1   888    0 30.00 -0.33 ----- 21.6 21.7 292.4 23.4 29.8 -26.5 29.4 -25.6 27.9 -24.1 28.4 -25.4
2025-12-31T10:02:57.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T10:02:57.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T10:02:57.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.335213
2025-12-31T10:02:57.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T10:02:57.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T10:02:57.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T10:02:57.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T10:02:57.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T10:02:57.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T10:02:37', tmtdew=33.74, humidity=9.64, cloud=0.0, wind=16.43, temperature=24.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T08:02:42.403', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T10:02:57.789 [DEBUG] [Thread-125715] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:02:57.873 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T10:02:57.885 [DEBUG] [Thread-125718] [transport.py] [_log()] starting thread (client mode): 0xb6bb95d0
2025-12-31T10:02:57.885 [DEBUG] [Thread-125718] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:02:57.900 [DEBUG] [Thread-125718] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T10:02:57.900 [INFO] [Thread-125718] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T10:02:57.907 [DEBUG] [Thread-125718] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:02:57.908 [DEBUG] [Thread-125718] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T10:02:57.908 [DEBUG] [Thread-125718] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:02:57.908 [DEBUG] [Thread-125718] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:02:57.908 [DEBUG] [Thread-125718] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:02:57.908 [DEBUG] [Thread-125718] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:02:57.908 [DEBUG] [Thread-125718] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:02:57.908 [DEBUG] [Thread-125718] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:02:57.908 [DEBUG] [Thread-125718] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:02:57.908 [DEBUG] [Thread-125718] [transport.py] [_log()] client lang: <none>
2025-12-31T10:02:57.908 [DEBUG] [Thread-125718] [transport.py] [_log()] server lang: <none>
2025-12-31T10:02:57.908 [DEBUG] [Thread-125718] [transport.py] [_log()] kex follows: False
2025-12-31T10:02:57.908 [DEBUG] [Thread-125718] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:02:57.908 [DEBUG] [Thread-125718] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:02:57.908 [DEBUG] [Thread-125718] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:02:57.908 [DEBUG] [Thread-125718] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:02:57.908 [DEBUG] [Thread-125718] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:02:57.908 [DEBUG] [Thread-125718] [transport.py] [_log()] Compression: none
2025-12-31T10:02:57.908 [DEBUG] [Thread-125718] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:02:57.964 [DEBUG] [Thread-125718] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:02:57.965 [DEBUG] [Thread-125718] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:02:57.965 [DEBUG] [Thread-125718] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T10:02:57.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T10:02:57.967 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:02:58.021 [DEBUG] [Thread-125718] [transport.py] [_log()] userauth is OK
2025-12-31T10:02:58.021 [DEBUG] [Thread-125718] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:02:58.021 [DEBUG] [Thread-125718] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:02:58.021 [DEBUG] [Thread-125718] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T10:02:58.021 [DEBUG] [Thread-125718] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:02:58.040 [INFO] [Thread-125718] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:02:58.040 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T10:02:58.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:02:58.875 [DEBUG] [Thread-125718] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:02:58.876 [DEBUG] [Thread-125718] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:02:58.923 [DEBUG] [Thread-125718] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:02:58.923 [DEBUG] [Thread-125718] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:02:58.932 [DEBUG] [Thread-125718] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:02:58.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:02:58.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T10:02:58.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T10:02:58.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:02:58.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:02:58.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:02:58.969 [DEBUG] [Thread-125718] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:03:02.785 [DEBUG] [Thread-125720 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:03:05.100 [DEBUG] [Thread-125721 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:03:17.838 [DEBUG] [Thread-125722 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:03:21.667 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:03:21.668 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:03:28.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T10:03:28.981 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T10:03:28.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T10:03:29.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 10, 3, 9), 33.55, 9.78, 0.0, 17.29, 24.33, 0, 0, 0, 2, 0, 0),)
2025-12-31T10:03:29.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 10:03:09
2025-12-31T10:03:29.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T10:03:29.969 [DEBUG] [Thread-125723] [transport.py] [_log()] starting thread (client mode): 0xb6b22800
2025-12-31T10:03:29.969 [DEBUG] [Thread-125723] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:03:29.984 [DEBUG] [Thread-125723] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T10:03:29.984 [INFO] [Thread-125723] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T10:03:29.986 [DEBUG] [Thread-125723] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:03:29.987 [DEBUG] [Thread-125723] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T10:03:29.987 [DEBUG] [Thread-125723] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:03:29.987 [DEBUG] [Thread-125723] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:03:29.987 [DEBUG] [Thread-125723] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:03:29.987 [DEBUG] [Thread-125723] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:03:29.987 [DEBUG] [Thread-125723] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:03:29.987 [DEBUG] [Thread-125723] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:03:29.987 [DEBUG] [Thread-125723] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:03:29.987 [DEBUG] [Thread-125723] [transport.py] [_log()] client lang: <none>
2025-12-31T10:03:29.987 [DEBUG] [Thread-125723] [transport.py] [_log()] server lang: <none>
2025-12-31T10:03:29.987 [DEBUG] [Thread-125723] [transport.py] [_log()] kex follows: False
2025-12-31T10:03:29.987 [DEBUG] [Thread-125723] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:03:29.987 [DEBUG] [Thread-125723] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:03:29.987 [DEBUG] [Thread-125723] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:03:29.987 [DEBUG] [Thread-125723] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:03:29.987 [DEBUG] [Thread-125723] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:03:29.987 [DEBUG] [Thread-125723] [transport.py] [_log()] Compression: none
2025-12-31T10:03:29.987 [DEBUG] [Thread-125723] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:03:30.004 [DEBUG] [Thread-125723] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:03:30.005 [DEBUG] [Thread-125723] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:03:30.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T10:03:30.006 [DEBUG] [Thread-125723] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T10:03:30.007 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:03:30.008 [DEBUG] [Thread-125723] [transport.py] [_log()] userauth is OK
2025-12-31T10:03:30.008 [DEBUG] [Thread-125723] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:03:30.008 [DEBUG] [Thread-125723] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:03:30.008 [DEBUG] [Thread-125723] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T10:03:30.009 [DEBUG] [Thread-125723] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:03:30.029 [INFO] [Thread-125723] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:03:30.030 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:03:30.682 [DEBUG] [Thread-125723] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:03:30.682 [DEBUG] [Thread-125723] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:03:30.683 [DEBUG] [Thread-125723] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T10:03:30.723 [DEBUG] [Thread-125723] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:03:30.723 [DEBUG] [Thread-125723] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:03:30.726 [DEBUG] [Thread-125723] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:03:30.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:03:30.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T10:03:30.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T10:03:30.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T10:03:30.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:03:30.747 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T10:03:30.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:03:30.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:03:30.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T10:03:30.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.335560 -999.00  +23.70  19.45     16   -3.40 1 1 1 1 1   888    0 28.69 -33.17 ----- 17.9 19.4 283.4 21.8 30.0 -26.5 29.5 -25.4 28.0 -24.3 28.5 -25.6
2025-12-31T10:03:30.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T10:03:30.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T10:03:30.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.335560
2025-12-31T10:03:30.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T10:03:30.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T10:03:30.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T10:03:30.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T10:03:30.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T10:03:30.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T10:03:09', tmtdew=33.55, humidity=9.78, cloud=0.0, wind=17.29, temperature=24.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T08:03:12.384', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T10:03:30.750 [DEBUG] [Thread-125723] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:03:30.837 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T10:03:30.850 [DEBUG] [Thread-125726] [transport.py] [_log()] starting thread (client mode): 0xb6b36740
2025-12-31T10:03:30.850 [DEBUG] [Thread-125726] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:03:30.864 [DEBUG] [Thread-125726] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T10:03:30.864 [INFO] [Thread-125726] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T10:03:30.872 [DEBUG] [Thread-125726] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:03:30.872 [DEBUG] [Thread-125726] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T10:03:30.872 [DEBUG] [Thread-125726] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:03:30.872 [DEBUG] [Thread-125726] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:03:30.872 [DEBUG] [Thread-125726] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:03:30.872 [DEBUG] [Thread-125726] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:03:30.872 [DEBUG] [Thread-125726] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:03:30.872 [DEBUG] [Thread-125726] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:03:30.872 [DEBUG] [Thread-125726] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:03:30.872 [DEBUG] [Thread-125726] [transport.py] [_log()] client lang: <none>
2025-12-31T10:03:30.872 [DEBUG] [Thread-125726] [transport.py] [_log()] server lang: <none>
2025-12-31T10:03:30.872 [DEBUG] [Thread-125726] [transport.py] [_log()] kex follows: False
2025-12-31T10:03:30.872 [DEBUG] [Thread-125726] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:03:30.873 [DEBUG] [Thread-125726] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:03:30.873 [DEBUG] [Thread-125726] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:03:30.873 [DEBUG] [Thread-125726] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:03:30.873 [DEBUG] [Thread-125726] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:03:30.873 [DEBUG] [Thread-125726] [transport.py] [_log()] Compression: none
2025-12-31T10:03:30.873 [DEBUG] [Thread-125726] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:03:30.928 [DEBUG] [Thread-125726] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:03:30.929 [DEBUG] [Thread-125726] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:03:30.929 [DEBUG] [Thread-125726] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T10:03:30.929 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T10:03:30.930 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:03:30.984 [DEBUG] [Thread-125726] [transport.py] [_log()] userauth is OK
2025-12-31T10:03:30.985 [DEBUG] [Thread-125726] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:03:30.985 [DEBUG] [Thread-125726] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:03:30.985 [DEBUG] [Thread-125726] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T10:03:30.985 [DEBUG] [Thread-125726] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:03:31.003 [INFO] [Thread-125726] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:03:31.003 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T10:03:31.004 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:03:31.841 [DEBUG] [Thread-125726] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:03:31.842 [DEBUG] [Thread-125726] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:03:31.889 [DEBUG] [Thread-125726] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:03:31.890 [DEBUG] [Thread-125726] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:03:31.898 [DEBUG] [Thread-125726] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:03:31.909 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:03:31.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T10:03:31.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T10:03:31.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:03:31.931 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:03:31.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:03:31.939 [DEBUG] [Thread-125726] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:03:32.870 [DEBUG] [Thread-125728 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:03:47.920 [DEBUG] [Thread-125729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:04:01.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T10:04:01.962 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T10:04:01.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T10:04:02.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 10, 3, 41), 33.45, 10.25, 0.0, 15.72, 24.55, 0, 0, 0, 2, 0, 0),)
2025-12-31T10:04:02.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 10:03:41
2025-12-31T10:04:02.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T10:04:02.952 [DEBUG] [Thread-125731 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:04:02.952 [DEBUG] [Thread-125730] [transport.py] [_log()] starting thread (client mode): 0xb6b20340
2025-12-31T10:04:02.952 [DEBUG] [Thread-125730] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:04:02.972 [DEBUG] [Thread-125730] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T10:04:02.972 [INFO] [Thread-125730] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T10:04:02.975 [DEBUG] [Thread-125730] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:04:02.975 [DEBUG] [Thread-125730] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T10:04:02.976 [DEBUG] [Thread-125730] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:04:02.976 [DEBUG] [Thread-125730] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:04:02.976 [DEBUG] [Thread-125730] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:04:02.976 [DEBUG] [Thread-125730] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:04:02.976 [DEBUG] [Thread-125730] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:04:02.976 [DEBUG] [Thread-125730] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:04:02.976 [DEBUG] [Thread-125730] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:04:02.976 [DEBUG] [Thread-125730] [transport.py] [_log()] client lang: <none>
2025-12-31T10:04:02.976 [DEBUG] [Thread-125730] [transport.py] [_log()] server lang: <none>
2025-12-31T10:04:02.976 [DEBUG] [Thread-125730] [transport.py] [_log()] kex follows: False
2025-12-31T10:04:02.976 [DEBUG] [Thread-125730] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:04:02.976 [DEBUG] [Thread-125730] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:04:02.976 [DEBUG] [Thread-125730] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:04:02.976 [DEBUG] [Thread-125730] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:04:02.976 [DEBUG] [Thread-125730] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:04:02.976 [DEBUG] [Thread-125730] [transport.py] [_log()] Compression: none
2025-12-31T10:04:02.976 [DEBUG] [Thread-125730] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:04:02.997 [DEBUG] [Thread-125730] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:04:02.997 [DEBUG] [Thread-125730] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:04:02.998 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T10:04:02.998 [DEBUG] [Thread-125730] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T10:04:02.999 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:04:03.000 [DEBUG] [Thread-125730] [transport.py] [_log()] userauth is OK
2025-12-31T10:04:03.001 [DEBUG] [Thread-125730] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:04:03.001 [DEBUG] [Thread-125730] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:04:03.001 [DEBUG] [Thread-125730] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T10:04:03.001 [DEBUG] [Thread-125730] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:04:03.038 [INFO] [Thread-125730] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:04:03.038 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:04:03.688 [DEBUG] [Thread-125730] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:04:03.688 [DEBUG] [Thread-125730] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:04:03.689 [DEBUG] [Thread-125730] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T10:04:03.729 [DEBUG] [Thread-125730] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:04:03.729 [DEBUG] [Thread-125730] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:04:03.732 [DEBUG] [Thread-125730] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:04:03.746 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:04:03.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T10:04:03.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T10:04:03.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T10:04:03.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:04:03.757 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T10:04:03.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:04:03.757 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:04:03.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T10:04:03.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.335908 -999.00  +23.80  16.82     16   -3.40 1 1 1 1 1   888    0 27.80 -63.36 ----- 15.5 16.8 288.6 21.9 30.1 -26.2 29.6 -26.3 28.1 -24.0 28.6 -25.1
2025-12-31T10:04:03.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T10:04:03.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T10:04:03.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.335908
2025-12-31T10:04:03.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T10:04:03.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T10:04:03.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T10:04:03.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T10:04:03.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T10:04:03.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T10:03:41', tmtdew=33.45, humidity=10.25, cloud=0.0, wind=15.72, temperature=24.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T08:03:42.451', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T10:04:03.760 [DEBUG] [Thread-125730] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:04:03.843 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T10:04:03.855 [DEBUG] [Thread-125734] [transport.py] [_log()] starting thread (client mode): 0xb6bb99c0
2025-12-31T10:04:03.856 [DEBUG] [Thread-125734] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:04:03.870 [DEBUG] [Thread-125734] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T10:04:03.870 [INFO] [Thread-125734] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T10:04:03.878 [DEBUG] [Thread-125734] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:04:03.878 [DEBUG] [Thread-125734] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T10:04:03.878 [DEBUG] [Thread-125734] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:04:03.878 [DEBUG] [Thread-125734] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:04:03.879 [DEBUG] [Thread-125734] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:04:03.879 [DEBUG] [Thread-125734] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:04:03.879 [DEBUG] [Thread-125734] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:04:03.879 [DEBUG] [Thread-125734] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:04:03.879 [DEBUG] [Thread-125734] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:04:03.879 [DEBUG] [Thread-125734] [transport.py] [_log()] client lang: <none>
2025-12-31T10:04:03.879 [DEBUG] [Thread-125734] [transport.py] [_log()] server lang: <none>
2025-12-31T10:04:03.879 [DEBUG] [Thread-125734] [transport.py] [_log()] kex follows: False
2025-12-31T10:04:03.879 [DEBUG] [Thread-125734] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:04:03.879 [DEBUG] [Thread-125734] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:04:03.879 [DEBUG] [Thread-125734] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:04:03.879 [DEBUG] [Thread-125734] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:04:03.879 [DEBUG] [Thread-125734] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:04:03.879 [DEBUG] [Thread-125734] [transport.py] [_log()] Compression: none
2025-12-31T10:04:03.879 [DEBUG] [Thread-125734] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:04:03.938 [DEBUG] [Thread-125734] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:04:03.938 [DEBUG] [Thread-125734] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:04:03.939 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T10:04:03.940 [DEBUG] [Thread-125734] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T10:04:03.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:04:03.993 [DEBUG] [Thread-125734] [transport.py] [_log()] userauth is OK
2025-12-31T10:04:03.993 [DEBUG] [Thread-125734] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:04:03.994 [DEBUG] [Thread-125734] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:04:03.994 [DEBUG] [Thread-125734] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T10:04:03.994 [DEBUG] [Thread-125734] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:04:04.013 [INFO] [Thread-125734] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:04:04.013 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T10:04:04.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:04:04.856 [DEBUG] [Thread-125734] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:04:04.856 [DEBUG] [Thread-125734] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:04:04.904 [DEBUG] [Thread-125734] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:04:04.904 [DEBUG] [Thread-125734] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:04:04.914 [DEBUG] [Thread-125734] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:04:04.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:04:04.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T10:04:04.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T10:04:04.942 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:04:04.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:04:04.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:04:04.951 [DEBUG] [Thread-125734] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:04:05.151 [DEBUG] [Thread-125736 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:04:17.985 [DEBUG] [Thread-125737 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:04:21.810 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:04:21.811 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:04:33.041 [DEBUG] [Thread-125738 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:04:34.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T10:04:34.973 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T10:04:34.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T10:04:35.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 10, 4, 13), 33.31, 10.35, 0.0, 14.24, 24.52, 0, 0, 0, 2, 0, 0),)
2025-12-31T10:04:35.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 10:04:13
2025-12-31T10:04:35.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T10:04:35.977 [DEBUG] [Thread-125739] [transport.py] [_log()] starting thread (client mode): 0xb95f35b0
2025-12-31T10:04:35.977 [DEBUG] [Thread-125739] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:04:35.988 [DEBUG] [Thread-125739] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T10:04:35.988 [INFO] [Thread-125739] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T10:04:35.990 [DEBUG] [Thread-125739] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:04:35.990 [DEBUG] [Thread-125739] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T10:04:35.990 [DEBUG] [Thread-125739] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:04:35.990 [DEBUG] [Thread-125739] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:04:35.990 [DEBUG] [Thread-125739] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:04:35.990 [DEBUG] [Thread-125739] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:04:35.990 [DEBUG] [Thread-125739] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:04:35.990 [DEBUG] [Thread-125739] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:04:35.990 [DEBUG] [Thread-125739] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:04:35.990 [DEBUG] [Thread-125739] [transport.py] [_log()] client lang: <none>
2025-12-31T10:04:35.990 [DEBUG] [Thread-125739] [transport.py] [_log()] server lang: <none>
2025-12-31T10:04:35.990 [DEBUG] [Thread-125739] [transport.py] [_log()] kex follows: False
2025-12-31T10:04:35.991 [DEBUG] [Thread-125739] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:04:35.991 [DEBUG] [Thread-125739] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:04:35.991 [DEBUG] [Thread-125739] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:04:35.991 [DEBUG] [Thread-125739] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:04:35.991 [DEBUG] [Thread-125739] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:04:35.991 [DEBUG] [Thread-125739] [transport.py] [_log()] Compression: none
2025-12-31T10:04:35.991 [DEBUG] [Thread-125739] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:04:36.004 [DEBUG] [Thread-125739] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:04:36.004 [DEBUG] [Thread-125739] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:04:36.004 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T10:04:36.004 [DEBUG] [Thread-125739] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T10:04:36.005 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:04:36.005 [DEBUG] [Thread-125739] [transport.py] [_log()] userauth is OK
2025-12-31T10:04:36.006 [DEBUG] [Thread-125739] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:04:36.006 [DEBUG] [Thread-125739] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:04:36.006 [DEBUG] [Thread-125739] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T10:04:36.006 [DEBUG] [Thread-125739] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:04:36.018 [INFO] [Thread-125739] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:04:36.018 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:04:36.667 [DEBUG] [Thread-125739] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:04:36.667 [DEBUG] [Thread-125739] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:04:36.668 [DEBUG] [Thread-125739] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T10:04:36.708 [DEBUG] [Thread-125739] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:04:36.708 [DEBUG] [Thread-125739] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:04:36.712 [DEBUG] [Thread-125739] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:04:36.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:04:36.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T10:04:36.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T10:04:36.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T10:04:36.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:04:36.736 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T10:04:36.736 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:04:36.736 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:04:36.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T10:04:36.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.336255 -999.00  +23.80  17.75     15   -3.80 1 1 1 1 1   888    0 27.00 -98.25 ----- 16.7 17.8 313.4 19.8 30.2 -27.8 29.8 -25.9 28.1 -25.1 28.6 -26.0
2025-12-31T10:04:36.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T10:04:36.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T10:04:36.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.336255
2025-12-31T10:04:36.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T10:04:36.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T10:04:36.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T10:04:36.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T10:04:36.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T10:04:36.738 [DEBUG] [Thread-125739] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:04:36.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T10:04:13', tmtdew=33.31, humidity=10.35, cloud=0.0, wind=14.24, temperature=24.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T08:04:12.432', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T10:04:36.822 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T10:04:36.835 [DEBUG] [Thread-125742] [transport.py] [_log()] starting thread (client mode): 0xb6b22920
2025-12-31T10:04:36.835 [DEBUG] [Thread-125742] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:04:36.849 [DEBUG] [Thread-125742] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T10:04:36.850 [INFO] [Thread-125742] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T10:04:36.857 [DEBUG] [Thread-125742] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:04:36.858 [DEBUG] [Thread-125742] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T10:04:36.858 [DEBUG] [Thread-125742] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:04:36.858 [DEBUG] [Thread-125742] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:04:36.858 [DEBUG] [Thread-125742] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:04:36.858 [DEBUG] [Thread-125742] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:04:36.858 [DEBUG] [Thread-125742] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:04:36.858 [DEBUG] [Thread-125742] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:04:36.858 [DEBUG] [Thread-125742] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:04:36.858 [DEBUG] [Thread-125742] [transport.py] [_log()] client lang: <none>
2025-12-31T10:04:36.859 [DEBUG] [Thread-125742] [transport.py] [_log()] server lang: <none>
2025-12-31T10:04:36.859 [DEBUG] [Thread-125742] [transport.py] [_log()] kex follows: False
2025-12-31T10:04:36.859 [DEBUG] [Thread-125742] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:04:36.859 [DEBUG] [Thread-125742] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:04:36.859 [DEBUG] [Thread-125742] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:04:36.859 [DEBUG] [Thread-125742] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:04:36.859 [DEBUG] [Thread-125742] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:04:36.860 [DEBUG] [Thread-125742] [transport.py] [_log()] Compression: none
2025-12-31T10:04:36.860 [DEBUG] [Thread-125742] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:04:36.918 [DEBUG] [Thread-125742] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:04:36.919 [DEBUG] [Thread-125742] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:04:36.919 [DEBUG] [Thread-125742] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T10:04:36.920 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T10:04:36.920 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:04:36.974 [DEBUG] [Thread-125742] [transport.py] [_log()] userauth is OK
2025-12-31T10:04:36.974 [DEBUG] [Thread-125742] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:04:36.974 [DEBUG] [Thread-125742] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:04:36.974 [DEBUG] [Thread-125742] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T10:04:36.974 [DEBUG] [Thread-125742] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:04:36.987 [INFO] [Thread-125742] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:04:36.988 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T10:04:36.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:04:37.821 [DEBUG] [Thread-125742] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:04:37.822 [DEBUG] [Thread-125742] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:04:37.871 [DEBUG] [Thread-125742] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:04:37.871 [DEBUG] [Thread-125742] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:04:37.881 [DEBUG] [Thread-125742] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:04:37.890 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:04:37.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-12-31T10:04:37.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T10:04:37.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:04:37.907 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:04:37.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:04:37.915 [DEBUG] [Thread-125742] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:04:48.070 [DEBUG] [Thread-125744 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:05:03.134 [DEBUG] [Thread-125745 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:05:05.209 [DEBUG] [Thread-125746 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:05:07.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T10:05:07.925 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T10:05:07.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T10:05:08.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 10, 4, 45), 33.76, 9.7, 0.0, 12.79, 24.6, 0, 0, 0, 2, 0, 0),)
2025-12-31T10:05:08.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 10:04:45
2025-12-31T10:05:08.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T10:05:08.911 [DEBUG] [Thread-125747] [transport.py] [_log()] starting thread (client mode): 0xb955a260
2025-12-31T10:05:08.911 [DEBUG] [Thread-125747] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:05:08.931 [DEBUG] [Thread-125747] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T10:05:08.931 [INFO] [Thread-125747] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T10:05:08.934 [DEBUG] [Thread-125747] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:05:08.934 [DEBUG] [Thread-125747] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T10:05:08.934 [DEBUG] [Thread-125747] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:05:08.934 [DEBUG] [Thread-125747] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:05:08.934 [DEBUG] [Thread-125747] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:05:08.934 [DEBUG] [Thread-125747] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:05:08.934 [DEBUG] [Thread-125747] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:05:08.934 [DEBUG] [Thread-125747] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:05:08.934 [DEBUG] [Thread-125747] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:05:08.934 [DEBUG] [Thread-125747] [transport.py] [_log()] client lang: <none>
2025-12-31T10:05:08.934 [DEBUG] [Thread-125747] [transport.py] [_log()] server lang: <none>
2025-12-31T10:05:08.934 [DEBUG] [Thread-125747] [transport.py] [_log()] kex follows: False
2025-12-31T10:05:08.934 [DEBUG] [Thread-125747] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:05:08.934 [DEBUG] [Thread-125747] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:05:08.934 [DEBUG] [Thread-125747] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:05:08.934 [DEBUG] [Thread-125747] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:05:08.934 [DEBUG] [Thread-125747] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:05:08.934 [DEBUG] [Thread-125747] [transport.py] [_log()] Compression: none
2025-12-31T10:05:08.934 [DEBUG] [Thread-125747] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:05:08.951 [DEBUG] [Thread-125747] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:05:08.951 [DEBUG] [Thread-125747] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:05:08.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T10:05:08.952 [DEBUG] [Thread-125747] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T10:05:08.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:05:08.953 [DEBUG] [Thread-125747] [transport.py] [_log()] userauth is OK
2025-12-31T10:05:08.954 [DEBUG] [Thread-125747] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:05:08.954 [DEBUG] [Thread-125747] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:05:08.954 [DEBUG] [Thread-125747] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T10:05:08.954 [DEBUG] [Thread-125747] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:05:08.968 [INFO] [Thread-125747] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:05:08.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:05:15.585 [DEBUG] [Thread-125747] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:05:15.585 [DEBUG] [Thread-125747] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:05:15.585 [DEBUG] [Thread-125747] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T10:05:15.626 [DEBUG] [Thread-125747] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:05:15.626 [DEBUG] [Thread-125747] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:05:15.630 [DEBUG] [Thread-125747] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:05:15.726 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:05:15.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T10:05:15.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T10:05:15.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T10:05:15.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:05:15.756 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T10:05:15.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:05:15.757 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:05:15.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T10:05:15.758 [WARNING] [poll_weather_worker] [driver.py] [poll_weather_state()] Unable to get atlas cloud data: list index out of range
2025-12-31T10:05:15.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T10:04:45', tmtdew=33.76, humidity=9.7, cloud=0.0, wind=12.79, temperature=24.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp=None, atlas_cloud=None, atlas_rain=None, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T10:05:15.761 [DEBUG] [Thread-125747] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:05:15.846 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T10:05:15.859 [DEBUG] [Thread-125750] [transport.py] [_log()] starting thread (client mode): 0xb95f3e80
2025-12-31T10:05:15.859 [DEBUG] [Thread-125750] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:05:15.874 [DEBUG] [Thread-125750] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T10:05:15.875 [INFO] [Thread-125750] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T10:05:15.882 [DEBUG] [Thread-125750] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:05:15.882 [DEBUG] [Thread-125750] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T10:05:15.882 [DEBUG] [Thread-125750] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:05:15.883 [DEBUG] [Thread-125750] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:05:15.883 [DEBUG] [Thread-125750] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:05:15.883 [DEBUG] [Thread-125750] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:05:15.883 [DEBUG] [Thread-125750] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:05:15.883 [DEBUG] [Thread-125750] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:05:15.883 [DEBUG] [Thread-125750] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:05:15.883 [DEBUG] [Thread-125750] [transport.py] [_log()] client lang: <none>
2025-12-31T10:05:15.883 [DEBUG] [Thread-125750] [transport.py] [_log()] server lang: <none>
2025-12-31T10:05:15.883 [DEBUG] [Thread-125750] [transport.py] [_log()] kex follows: False
2025-12-31T10:05:15.883 [DEBUG] [Thread-125750] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:05:15.883 [DEBUG] [Thread-125750] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:05:15.883 [DEBUG] [Thread-125750] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:05:15.883 [DEBUG] [Thread-125750] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:05:15.883 [DEBUG] [Thread-125750] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:05:15.883 [DEBUG] [Thread-125750] [transport.py] [_log()] Compression: none
2025-12-31T10:05:15.883 [DEBUG] [Thread-125750] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:05:15.942 [DEBUG] [Thread-125750] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:05:15.943 [DEBUG] [Thread-125750] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:05:15.944 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T10:05:15.945 [DEBUG] [Thread-125750] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T10:05:15.945 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:05:15.998 [DEBUG] [Thread-125750] [transport.py] [_log()] userauth is OK
2025-12-31T10:05:15.998 [DEBUG] [Thread-125750] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:05:15.999 [DEBUG] [Thread-125750] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:05:15.999 [DEBUG] [Thread-125750] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T10:05:15.999 [DEBUG] [Thread-125750] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:05:16.024 [INFO] [Thread-125750] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:05:16.024 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T10:05:16.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:05:16.827 [DEBUG] [Thread-125750] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:05:16.827 [DEBUG] [Thread-125750] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:05:16.876 [DEBUG] [Thread-125750] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:05:16.876 [DEBUG] [Thread-125750] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:05:16.885 [DEBUG] [Thread-125750] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:05:16.895 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:05:16.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T10:05:16.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-12-31T10:05:16.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:05:16.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:05:16.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:05:16.922 [DEBUG] [Thread-125750] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:05:18.164 [DEBUG] [Thread-125752 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:05:21.952 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:05:21.953 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:05:33.216 [DEBUG] [Thread-125753 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:05:46.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T10:05:46.925 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T10:05:46.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T10:05:47.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 10, 5, 17), 33.83, 9.65, 0.0, 12.26, 24.62, 0, 0, 0, 2, 0, 0),)
2025-12-31T10:05:47.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 10:05:17
2025-12-31T10:05:47.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T10:05:47.905 [DEBUG] [Thread-125754] [transport.py] [_log()] starting thread (client mode): 0xb6b21fc0
2025-12-31T10:05:47.905 [DEBUG] [Thread-125754] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:05:47.927 [DEBUG] [Thread-125754] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T10:05:47.927 [INFO] [Thread-125754] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T10:05:47.930 [DEBUG] [Thread-125754] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:05:47.930 [DEBUG] [Thread-125754] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T10:05:47.931 [DEBUG] [Thread-125754] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:05:47.931 [DEBUG] [Thread-125754] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:05:47.931 [DEBUG] [Thread-125754] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:05:47.931 [DEBUG] [Thread-125754] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:05:47.931 [DEBUG] [Thread-125754] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:05:47.931 [DEBUG] [Thread-125754] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:05:47.931 [DEBUG] [Thread-125754] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:05:47.931 [DEBUG] [Thread-125754] [transport.py] [_log()] client lang: <none>
2025-12-31T10:05:47.931 [DEBUG] [Thread-125754] [transport.py] [_log()] server lang: <none>
2025-12-31T10:05:47.931 [DEBUG] [Thread-125754] [transport.py] [_log()] kex follows: False
2025-12-31T10:05:47.931 [DEBUG] [Thread-125754] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:05:47.931 [DEBUG] [Thread-125754] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:05:47.931 [DEBUG] [Thread-125754] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:05:47.931 [DEBUG] [Thread-125754] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:05:47.931 [DEBUG] [Thread-125754] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:05:47.931 [DEBUG] [Thread-125754] [transport.py] [_log()] Compression: none
2025-12-31T10:05:47.931 [DEBUG] [Thread-125754] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:05:47.949 [DEBUG] [Thread-125754] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:05:47.950 [DEBUG] [Thread-125754] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:05:47.950 [DEBUG] [Thread-125754] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T10:05:47.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T10:05:47.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:05:47.952 [DEBUG] [Thread-125754] [transport.py] [_log()] userauth is OK
2025-12-31T10:05:47.953 [DEBUG] [Thread-125754] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:05:47.953 [DEBUG] [Thread-125754] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:05:47.953 [DEBUG] [Thread-125754] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T10:05:47.953 [DEBUG] [Thread-125754] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:05:47.989 [INFO] [Thread-125754] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:05:47.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:05:48.254 [DEBUG] [Thread-125756 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:05:48.648 [DEBUG] [Thread-125754] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:05:48.648 [DEBUG] [Thread-125754] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:05:48.648 [DEBUG] [Thread-125754] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T10:05:48.689 [DEBUG] [Thread-125754] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:05:48.690 [DEBUG] [Thread-125754] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:05:48.692 [DEBUG] [Thread-125754] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:05:48.703 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:05:48.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T10:05:48.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T10:05:48.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T10:05:48.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:05:48.708 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T10:05:48.708 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:05:48.708 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:05:48.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T10:05:48.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.336602 -999.00  +23.70  16.84     15   -3.80 1 1 1 1 1   888    0 27.04 -114.73 ----- 12.2 16.8 306.6 18.8 30.4 -27.2 29.8 -27.0 28.3 -25.3 28.7 -26.1
2025-12-31T10:05:48.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T10:05:48.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T10:05:48.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.336602
2025-12-31T10:05:48.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T10:05:48.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T10:05:48.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T10:05:48.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T10:05:48.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T10:05:48.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T10:05:17', tmtdew=33.83, humidity=9.65, cloud=0.0, wind=12.26, temperature=24.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T08:04:42.413', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T10:05:48.709 [DEBUG] [Thread-125754] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:05:48.783 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T10:05:48.793 [DEBUG] [Thread-125758] [transport.py] [_log()] starting thread (client mode): 0xb6b20fa0
2025-12-31T10:05:48.793 [DEBUG] [Thread-125758] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:05:48.808 [DEBUG] [Thread-125758] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T10:05:48.808 [INFO] [Thread-125758] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T10:05:48.815 [DEBUG] [Thread-125758] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:05:48.815 [DEBUG] [Thread-125758] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T10:05:48.816 [DEBUG] [Thread-125758] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:05:48.816 [DEBUG] [Thread-125758] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:05:48.816 [DEBUG] [Thread-125758] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:05:48.816 [DEBUG] [Thread-125758] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:05:48.816 [DEBUG] [Thread-125758] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:05:48.816 [DEBUG] [Thread-125758] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:05:48.816 [DEBUG] [Thread-125758] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:05:48.816 [DEBUG] [Thread-125758] [transport.py] [_log()] client lang: <none>
2025-12-31T10:05:48.816 [DEBUG] [Thread-125758] [transport.py] [_log()] server lang: <none>
2025-12-31T10:05:48.816 [DEBUG] [Thread-125758] [transport.py] [_log()] kex follows: False
2025-12-31T10:05:48.816 [DEBUG] [Thread-125758] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:05:48.816 [DEBUG] [Thread-125758] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:05:48.816 [DEBUG] [Thread-125758] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:05:48.816 [DEBUG] [Thread-125758] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:05:48.816 [DEBUG] [Thread-125758] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:05:48.816 [DEBUG] [Thread-125758] [transport.py] [_log()] Compression: none
2025-12-31T10:05:48.816 [DEBUG] [Thread-125758] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:05:48.876 [DEBUG] [Thread-125758] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:05:48.877 [DEBUG] [Thread-125758] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:05:48.877 [DEBUG] [Thread-125758] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T10:05:48.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T10:05:48.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:05:48.934 [DEBUG] [Thread-125758] [transport.py] [_log()] userauth is OK
2025-12-31T10:05:48.934 [DEBUG] [Thread-125758] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:05:48.934 [DEBUG] [Thread-125758] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:05:48.934 [DEBUG] [Thread-125758] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T10:05:48.934 [DEBUG] [Thread-125758] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:05:48.948 [INFO] [Thread-125758] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:05:48.948 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T10:05:48.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:05:49.840 [DEBUG] [Thread-125758] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:05:49.840 [DEBUG] [Thread-125758] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:05:49.887 [DEBUG] [Thread-125758] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:05:49.887 [DEBUG] [Thread-125758] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:05:49.895 [DEBUG] [Thread-125758] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:05:49.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:05:49.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T10:05:49.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T10:05:49.919 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:05:49.919 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:05:49.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:05:49.927 [DEBUG] [Thread-125758] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:06:03.288 [DEBUG] [Thread-125760 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:06:05.262 [DEBUG] [Thread-125761 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:06:18.342 [DEBUG] [Thread-125762 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:06:19.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T10:06:19.933 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T10:06:19.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-12-31T10:06:20.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 10, 5, 49), 34.45, 9.24, 0.0, 16.66, 24.72, 0, 0, 0, 2, 0, 0),)
2025-12-31T10:06:20.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 10:05:49
2025-12-31T10:06:20.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T10:06:20.905 [DEBUG] [Thread-125763] [transport.py] [_log()] starting thread (client mode): 0xb6bb38e0
2025-12-31T10:06:20.905 [DEBUG] [Thread-125763] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:06:20.926 [DEBUG] [Thread-125763] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T10:06:20.926 [INFO] [Thread-125763] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T10:06:20.929 [DEBUG] [Thread-125763] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:06:20.929 [DEBUG] [Thread-125763] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T10:06:20.929 [DEBUG] [Thread-125763] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:06:20.929 [DEBUG] [Thread-125763] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:06:20.929 [DEBUG] [Thread-125763] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:06:20.929 [DEBUG] [Thread-125763] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:06:20.929 [DEBUG] [Thread-125763] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:06:20.929 [DEBUG] [Thread-125763] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:06:20.929 [DEBUG] [Thread-125763] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:06:20.929 [DEBUG] [Thread-125763] [transport.py] [_log()] client lang: <none>
2025-12-31T10:06:20.929 [DEBUG] [Thread-125763] [transport.py] [_log()] server lang: <none>
2025-12-31T10:06:20.929 [DEBUG] [Thread-125763] [transport.py] [_log()] kex follows: False
2025-12-31T10:06:20.929 [DEBUG] [Thread-125763] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:06:20.929 [DEBUG] [Thread-125763] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:06:20.929 [DEBUG] [Thread-125763] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:06:20.929 [DEBUG] [Thread-125763] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:06:20.929 [DEBUG] [Thread-125763] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:06:20.929 [DEBUG] [Thread-125763] [transport.py] [_log()] Compression: none
2025-12-31T10:06:20.929 [DEBUG] [Thread-125763] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:06:20.947 [DEBUG] [Thread-125763] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:06:20.947 [DEBUG] [Thread-125763] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:06:20.948 [DEBUG] [Thread-125763] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T10:06:20.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T10:06:20.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:06:20.949 [DEBUG] [Thread-125763] [transport.py] [_log()] userauth is OK
2025-12-31T10:06:20.949 [DEBUG] [Thread-125763] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:06:20.949 [DEBUG] [Thread-125763] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:06:20.949 [DEBUG] [Thread-125763] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T10:06:20.949 [DEBUG] [Thread-125763] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:06:20.962 [INFO] [Thread-125763] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:06:20.962 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:06:21.770 [DEBUG] [Thread-125763] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:06:21.770 [DEBUG] [Thread-125763] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:06:21.770 [DEBUG] [Thread-125763] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T10:06:21.811 [DEBUG] [Thread-125763] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:06:21.812 [DEBUG] [Thread-125763] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:06:21.815 [DEBUG] [Thread-125763] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:06:21.827 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:06:21.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T10:06:21.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T10:06:21.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T10:06:21.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:06:21.840 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T10:06:21.840 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:06:21.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:06:21.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T10:06:21.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.337297 -999.00  +24.30  11.20     15   -3.80 1 1 1 1 1   888    0 25.50 -153.43 ----- 15.1 11.2 293.5 15.1 30.5 -28.3 29.9 -26.8 28.3 -26.7 28.8 -26.9
2025-12-31T10:06:21.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T10:06:21.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T10:06:21.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.337297
2025-12-31T10:06:21.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T10:06:21.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T10:06:21.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T10:06:21.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T10:06:21.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T10:06:21.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T10:05:49', tmtdew=34.45, humidity=9.24, cloud=0.0, wind=16.66, temperature=24.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T08:05:42.461', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T10:06:21.843 [DEBUG] [Thread-125763] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:06:21.927 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T10:06:21.939 [DEBUG] [Thread-125766] [transport.py] [_log()] starting thread (client mode): 0xb6b35360
2025-12-31T10:06:21.939 [DEBUG] [Thread-125766] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:06:21.954 [DEBUG] [Thread-125766] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T10:06:21.954 [INFO] [Thread-125766] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T10:06:21.962 [DEBUG] [Thread-125766] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:06:21.963 [DEBUG] [Thread-125766] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T10:06:21.963 [DEBUG] [Thread-125766] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:06:21.963 [DEBUG] [Thread-125766] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:06:21.963 [DEBUG] [Thread-125766] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:06:21.963 [DEBUG] [Thread-125766] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:06:21.963 [DEBUG] [Thread-125766] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:06:21.963 [DEBUG] [Thread-125766] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:06:21.964 [DEBUG] [Thread-125766] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:06:21.964 [DEBUG] [Thread-125766] [transport.py] [_log()] client lang: <none>
2025-12-31T10:06:21.964 [DEBUG] [Thread-125766] [transport.py] [_log()] server lang: <none>
2025-12-31T10:06:21.964 [DEBUG] [Thread-125766] [transport.py] [_log()] kex follows: False
2025-12-31T10:06:21.964 [DEBUG] [Thread-125766] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:06:21.964 [DEBUG] [Thread-125766] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:06:21.964 [DEBUG] [Thread-125766] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:06:21.964 [DEBUG] [Thread-125766] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:06:21.965 [DEBUG] [Thread-125766] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:06:21.965 [DEBUG] [Thread-125766] [transport.py] [_log()] Compression: none
2025-12-31T10:06:21.965 [DEBUG] [Thread-125766] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:06:22.024 [DEBUG] [Thread-125766] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:06:22.024 [DEBUG] [Thread-125766] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:06:22.025 [DEBUG] [Thread-125766] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T10:06:22.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T10:06:22.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:06:22.082 [DEBUG] [Thread-125766] [transport.py] [_log()] userauth is OK
2025-12-31T10:06:22.082 [DEBUG] [Thread-125766] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:06:22.082 [DEBUG] [Thread-125766] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:06:22.082 [DEBUG] [Thread-125766] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T10:06:22.082 [DEBUG] [Thread-125766] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:06:22.094 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:06:22.095 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:06:22.100 [INFO] [Thread-125766] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:06:22.100 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T10:06:22.101 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:06:22.953 [DEBUG] [Thread-125766] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:06:22.953 [DEBUG] [Thread-125766] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:06:23.000 [DEBUG] [Thread-125766] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:06:23.000 [DEBUG] [Thread-125766] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:06:23.009 [DEBUG] [Thread-125766] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:06:23.017 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:06:23.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T10:06:23.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T10:06:23.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:06:23.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:06:23.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:06:23.041 [DEBUG] [Thread-125766] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:06:33.372 [DEBUG] [Thread-125768 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:06:48.419 [DEBUG] [Thread-125769 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:06:53.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T10:06:53.056 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T10:06:53.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T10:06:53.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 10, 6, 22), 34.59, 9.12, 0.0, 15.65, 24.65, 0, 0, 0, 2, 0, 0),)
2025-12-31T10:06:53.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 10:06:22
2025-12-31T10:06:53.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T10:06:54.046 [DEBUG] [Thread-125770] [transport.py] [_log()] starting thread (client mode): 0xb9579e10
2025-12-31T10:06:54.046 [DEBUG] [Thread-125770] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:06:54.066 [DEBUG] [Thread-125770] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T10:06:54.066 [INFO] [Thread-125770] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T10:06:54.070 [DEBUG] [Thread-125770] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:06:54.071 [DEBUG] [Thread-125770] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T10:06:54.071 [DEBUG] [Thread-125770] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:06:54.071 [DEBUG] [Thread-125770] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:06:54.071 [DEBUG] [Thread-125770] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:06:54.071 [DEBUG] [Thread-125770] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:06:54.071 [DEBUG] [Thread-125770] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:06:54.071 [DEBUG] [Thread-125770] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:06:54.071 [DEBUG] [Thread-125770] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:06:54.071 [DEBUG] [Thread-125770] [transport.py] [_log()] client lang: <none>
2025-12-31T10:06:54.071 [DEBUG] [Thread-125770] [transport.py] [_log()] server lang: <none>
2025-12-31T10:06:54.071 [DEBUG] [Thread-125770] [transport.py] [_log()] kex follows: False
2025-12-31T10:06:54.071 [DEBUG] [Thread-125770] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:06:54.071 [DEBUG] [Thread-125770] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:06:54.072 [DEBUG] [Thread-125770] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:06:54.072 [DEBUG] [Thread-125770] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:06:54.072 [DEBUG] [Thread-125770] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:06:54.072 [DEBUG] [Thread-125770] [transport.py] [_log()] Compression: none
2025-12-31T10:06:54.072 [DEBUG] [Thread-125770] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:06:54.089 [DEBUG] [Thread-125770] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:06:54.089 [DEBUG] [Thread-125770] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:06:54.090 [DEBUG] [Thread-125770] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T10:06:54.090 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T10:06:54.091 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:06:54.092 [DEBUG] [Thread-125770] [transport.py] [_log()] userauth is OK
2025-12-31T10:06:54.092 [DEBUG] [Thread-125770] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:06:54.092 [DEBUG] [Thread-125770] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:06:54.092 [DEBUG] [Thread-125770] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T10:06:54.093 [DEBUG] [Thread-125770] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:06:54.111 [INFO] [Thread-125770] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:06:54.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:06:54.713 [DEBUG] [Thread-125770] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:06:54.713 [DEBUG] [Thread-125770] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:06:54.713 [DEBUG] [Thread-125770] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T10:06:54.753 [DEBUG] [Thread-125770] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:06:54.753 [DEBUG] [Thread-125770] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:06:54.756 [DEBUG] [Thread-125770] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:06:54.768 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:06:54.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T10:06:54.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T10:06:54.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T10:06:54.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:06:54.773 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T10:06:54.773 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:06:54.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:06:54.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T10:06:54.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.337644 -999.00  +24.40  27.20     14   -4.10 1 1 1 1 1   888    0 24.84 -178.05 ----- 20.8 27.2 296.8 29.6 30.6 -28.6 29.9 -27.3 28.4 -27.8 28.9 -26.6
2025-12-31T10:06:54.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T10:06:54.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T10:06:54.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.337644
2025-12-31T10:06:54.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T10:06:54.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T10:06:54.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T10:06:54.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T10:06:54.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T10:06:54.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T10:06:22', tmtdew=34.59, humidity=9.12, cloud=0.0, wind=15.65, temperature=24.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T08:06:12.442', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T10:06:54.774 [DEBUG] [Thread-125770] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:06:54.848 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T10:06:54.860 [DEBUG] [Thread-125773] [transport.py] [_log()] starting thread (client mode): 0xb6b37640
2025-12-31T10:06:54.860 [DEBUG] [Thread-125773] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:06:54.875 [DEBUG] [Thread-125773] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T10:06:54.875 [INFO] [Thread-125773] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T10:06:54.883 [DEBUG] [Thread-125773] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:06:54.883 [DEBUG] [Thread-125773] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T10:06:54.883 [DEBUG] [Thread-125773] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:06:54.883 [DEBUG] [Thread-125773] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:06:54.883 [DEBUG] [Thread-125773] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:06:54.883 [DEBUG] [Thread-125773] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:06:54.883 [DEBUG] [Thread-125773] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:06:54.883 [DEBUG] [Thread-125773] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:06:54.883 [DEBUG] [Thread-125773] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:06:54.883 [DEBUG] [Thread-125773] [transport.py] [_log()] client lang: <none>
2025-12-31T10:06:54.883 [DEBUG] [Thread-125773] [transport.py] [_log()] server lang: <none>
2025-12-31T10:06:54.883 [DEBUG] [Thread-125773] [transport.py] [_log()] kex follows: False
2025-12-31T10:06:54.883 [DEBUG] [Thread-125773] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:06:54.883 [DEBUG] [Thread-125773] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:06:54.883 [DEBUG] [Thread-125773] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:06:54.883 [DEBUG] [Thread-125773] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:06:54.883 [DEBUG] [Thread-125773] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:06:54.883 [DEBUG] [Thread-125773] [transport.py] [_log()] Compression: none
2025-12-31T10:06:54.883 [DEBUG] [Thread-125773] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:06:54.941 [DEBUG] [Thread-125773] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:06:54.941 [DEBUG] [Thread-125773] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:06:54.941 [DEBUG] [Thread-125773] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T10:06:54.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T10:06:54.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:06:54.998 [DEBUG] [Thread-125773] [transport.py] [_log()] userauth is OK
2025-12-31T10:06:54.998 [DEBUG] [Thread-125773] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:06:54.998 [DEBUG] [Thread-125773] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:06:54.998 [DEBUG] [Thread-125773] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T10:06:54.998 [DEBUG] [Thread-125773] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:06:55.012 [INFO] [Thread-125773] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:06:55.012 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T10:06:55.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:06:55.860 [DEBUG] [Thread-125773] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:06:55.861 [DEBUG] [Thread-125773] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:06:55.908 [DEBUG] [Thread-125773] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:06:55.908 [DEBUG] [Thread-125773] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:06:55.916 [DEBUG] [Thread-125773] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:06:55.924 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:06:55.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T10:06:55.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T10:06:55.940 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:06:55.940 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:06:55.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:06:55.948 [DEBUG] [Thread-125773] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:07:03.458 [DEBUG] [Thread-125775 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:07:05.310 [DEBUG] [Thread-125776 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:07:18.509 [DEBUG] [Thread-125777 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:07:22.234 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:07:22.235 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:07:25.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T10:07:25.971 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T10:07:25.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T10:07:26.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 10, 6, 54), 34.1, 9.78, 0.0, 24.6, 24.78, 0, 0, 0, 2, 0, 0),)
2025-12-31T10:07:26.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 10:06:54
2025-12-31T10:07:26.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T10:07:27.018 [DEBUG] [Thread-125778] [transport.py] [_log()] starting thread (client mode): 0xb6b29fc0
2025-12-31T10:07:27.018 [DEBUG] [Thread-125778] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:07:27.038 [DEBUG] [Thread-125778] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T10:07:27.038 [INFO] [Thread-125778] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T10:07:27.041 [DEBUG] [Thread-125778] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:07:27.041 [DEBUG] [Thread-125778] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T10:07:27.041 [DEBUG] [Thread-125778] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:07:27.041 [DEBUG] [Thread-125778] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:07:27.041 [DEBUG] [Thread-125778] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:07:27.041 [DEBUG] [Thread-125778] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:07:27.041 [DEBUG] [Thread-125778] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:07:27.041 [DEBUG] [Thread-125778] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:07:27.041 [DEBUG] [Thread-125778] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:07:27.041 [DEBUG] [Thread-125778] [transport.py] [_log()] client lang: <none>
2025-12-31T10:07:27.041 [DEBUG] [Thread-125778] [transport.py] [_log()] server lang: <none>
2025-12-31T10:07:27.042 [DEBUG] [Thread-125778] [transport.py] [_log()] kex follows: False
2025-12-31T10:07:27.042 [DEBUG] [Thread-125778] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:07:27.042 [DEBUG] [Thread-125778] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:07:27.042 [DEBUG] [Thread-125778] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:07:27.042 [DEBUG] [Thread-125778] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:07:27.042 [DEBUG] [Thread-125778] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:07:27.042 [DEBUG] [Thread-125778] [transport.py] [_log()] Compression: none
2025-12-31T10:07:27.042 [DEBUG] [Thread-125778] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:07:27.051 [DEBUG] [Thread-125778] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:07:27.051 [DEBUG] [Thread-125778] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:07:27.051 [DEBUG] [Thread-125778] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T10:07:27.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T10:07:27.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:07:27.052 [DEBUG] [Thread-125778] [transport.py] [_log()] userauth is OK
2025-12-31T10:07:27.052 [DEBUG] [Thread-125778] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:07:27.052 [DEBUG] [Thread-125778] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:07:27.052 [DEBUG] [Thread-125778] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T10:07:27.052 [DEBUG] [Thread-125778] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:07:27.061 [INFO] [Thread-125778] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:07:27.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:07:27.851 [DEBUG] [Thread-125778] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:07:27.851 [DEBUG] [Thread-125778] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:07:27.851 [DEBUG] [Thread-125778] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T10:07:27.892 [DEBUG] [Thread-125778] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:07:27.892 [DEBUG] [Thread-125778] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:07:27.895 [DEBUG] [Thread-125778] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:07:27.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:07:27.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T10:07:27.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T10:07:27.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T10:07:27.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:07:27.914 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T10:07:27.914 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:07:27.914 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:07:27.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T10:07:27.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.337991 -999.00  +24.30  21.46     15   -3.70 1 1 1 1 1   888    0 23.72 -211.03 ----- 22.5 21.5 288.0 25.0 30.6 -27.4 30.0 -26.2 28.4 -25.8 28.9 -25.6
2025-12-31T10:07:27.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T10:07:27.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T10:07:27.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.337991
2025-12-31T10:07:27.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T10:07:27.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T10:07:27.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T10:07:27.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T10:07:27.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T10:07:27.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T10:06:54', tmtdew=34.1, humidity=9.78, cloud=0.0, wind=24.6, temperature=24.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T08:06:42.422', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T10:07:27.915 [DEBUG] [Thread-125778] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:07:27.989 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T10:07:28.000 [DEBUG] [Thread-125781] [transport.py] [_log()] starting thread (client mode): 0xb6b29750
2025-12-31T10:07:28.000 [DEBUG] [Thread-125781] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:07:28.015 [DEBUG] [Thread-125781] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T10:07:28.015 [INFO] [Thread-125781] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T10:07:28.023 [DEBUG] [Thread-125781] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:07:28.023 [DEBUG] [Thread-125781] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T10:07:28.023 [DEBUG] [Thread-125781] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:07:28.023 [DEBUG] [Thread-125781] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:07:28.023 [DEBUG] [Thread-125781] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:07:28.023 [DEBUG] [Thread-125781] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:07:28.023 [DEBUG] [Thread-125781] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:07:28.023 [DEBUG] [Thread-125781] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:07:28.023 [DEBUG] [Thread-125781] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:07:28.023 [DEBUG] [Thread-125781] [transport.py] [_log()] client lang: <none>
2025-12-31T10:07:28.023 [DEBUG] [Thread-125781] [transport.py] [_log()] server lang: <none>
2025-12-31T10:07:28.023 [DEBUG] [Thread-125781] [transport.py] [_log()] kex follows: False
2025-12-31T10:07:28.023 [DEBUG] [Thread-125781] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:07:28.023 [DEBUG] [Thread-125781] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:07:28.023 [DEBUG] [Thread-125781] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:07:28.023 [DEBUG] [Thread-125781] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:07:28.023 [DEBUG] [Thread-125781] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:07:28.023 [DEBUG] [Thread-125781] [transport.py] [_log()] Compression: none
2025-12-31T10:07:28.023 [DEBUG] [Thread-125781] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:07:28.078 [DEBUG] [Thread-125781] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:07:28.078 [DEBUG] [Thread-125781] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:07:28.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T10:07:28.078 [DEBUG] [Thread-125781] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T10:07:28.079 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:07:28.135 [DEBUG] [Thread-125781] [transport.py] [_log()] userauth is OK
2025-12-31T10:07:28.135 [DEBUG] [Thread-125781] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:07:28.135 [DEBUG] [Thread-125781] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:07:28.135 [DEBUG] [Thread-125781] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T10:07:28.135 [DEBUG] [Thread-125781] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:07:28.149 [INFO] [Thread-125781] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:07:28.149 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T10:07:28.149 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:07:29.062 [DEBUG] [Thread-125781] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:07:29.062 [DEBUG] [Thread-125781] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:07:29.110 [DEBUG] [Thread-125781] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:07:29.110 [DEBUG] [Thread-125781] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:07:29.119 [DEBUG] [Thread-125781] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:07:29.128 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:07:29.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T10:07:29.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T10:07:29.147 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:07:29.148 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:07:29.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:07:29.156 [DEBUG] [Thread-125781] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:07:33.545 [DEBUG] [Thread-125783 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:07:48.597 [DEBUG] [Thread-125784 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:07:59.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T10:07:59.178 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T10:07:59.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T10:07:59.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 10, 7, 26), 34.6, 9.47, 0.0, 22.89, 25.06, 0, 0, 0, 2, 0, 0),)
2025-12-31T10:07:59.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 10:07:26
2025-12-31T10:08:00.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T10:08:00.229 [DEBUG] [Thread-125785] [transport.py] [_log()] starting thread (client mode): 0xb6bb2ce0
2025-12-31T10:08:00.229 [DEBUG] [Thread-125785] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:08:00.249 [DEBUG] [Thread-125785] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T10:08:00.249 [INFO] [Thread-125785] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T10:08:00.252 [DEBUG] [Thread-125785] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:08:00.252 [DEBUG] [Thread-125785] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T10:08:00.252 [DEBUG] [Thread-125785] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:08:00.252 [DEBUG] [Thread-125785] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:08:00.252 [DEBUG] [Thread-125785] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:08:00.252 [DEBUG] [Thread-125785] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:08:00.252 [DEBUG] [Thread-125785] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:08:00.252 [DEBUG] [Thread-125785] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:08:00.252 [DEBUG] [Thread-125785] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:08:00.252 [DEBUG] [Thread-125785] [transport.py] [_log()] client lang: <none>
2025-12-31T10:08:00.252 [DEBUG] [Thread-125785] [transport.py] [_log()] server lang: <none>
2025-12-31T10:08:00.252 [DEBUG] [Thread-125785] [transport.py] [_log()] kex follows: False
2025-12-31T10:08:00.252 [DEBUG] [Thread-125785] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:08:00.252 [DEBUG] [Thread-125785] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:08:00.252 [DEBUG] [Thread-125785] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:08:00.252 [DEBUG] [Thread-125785] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:08:00.252 [DEBUG] [Thread-125785] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:08:00.252 [DEBUG] [Thread-125785] [transport.py] [_log()] Compression: none
2025-12-31T10:08:00.252 [DEBUG] [Thread-125785] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:08:00.267 [DEBUG] [Thread-125785] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:08:00.267 [DEBUG] [Thread-125785] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:08:00.267 [DEBUG] [Thread-125785] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T10:08:00.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T10:08:00.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:08:00.268 [DEBUG] [Thread-125785] [transport.py] [_log()] userauth is OK
2025-12-31T10:08:00.268 [DEBUG] [Thread-125785] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:08:00.268 [DEBUG] [Thread-125785] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:08:00.268 [DEBUG] [Thread-125785] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T10:08:00.268 [DEBUG] [Thread-125785] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:08:00.284 [INFO] [Thread-125785] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:08:00.284 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:08:00.902 [DEBUG] [Thread-125785] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:08:00.902 [DEBUG] [Thread-125785] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:08:00.902 [DEBUG] [Thread-125785] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T10:08:00.943 [DEBUG] [Thread-125785] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:08:00.943 [DEBUG] [Thread-125785] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:08:00.947 [DEBUG] [Thread-125785] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:08:00.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:08:00.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T10:08:00.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T10:08:00.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T10:08:00.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:08:00.974 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T10:08:00.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:08:00.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:08:00.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T10:08:00.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.338338 -999.00  +24.40  17.70     15   -3.40 1 1 1 1 1   888    0 23.54 -204.83 ----- 17.4 17.7 273.9 31.1 30.6 -27.9 30.1 -26.0 28.5 -27.0 29.0 -26.0
2025-12-31T10:08:00.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T10:08:00.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T10:08:00.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.338338
2025-12-31T10:08:00.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T10:08:00.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T10:08:00.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T10:08:00.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T10:08:00.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T10:08:00.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T10:07:26', tmtdew=34.6, humidity=9.47, cloud=0.0, wind=22.89, temperature=25.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T08:07:12.403', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T10:08:00.977 [DEBUG] [Thread-125785] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:08:01.058 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T10:08:01.069 [DEBUG] [Thread-125788] [transport.py] [_log()] starting thread (client mode): 0xb95f32e0
2025-12-31T10:08:01.069 [DEBUG] [Thread-125788] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:08:01.085 [DEBUG] [Thread-125788] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T10:08:01.085 [INFO] [Thread-125788] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T10:08:01.093 [DEBUG] [Thread-125788] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:08:01.093 [DEBUG] [Thread-125788] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T10:08:01.093 [DEBUG] [Thread-125788] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:08:01.093 [DEBUG] [Thread-125788] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:08:01.093 [DEBUG] [Thread-125788] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:08:01.093 [DEBUG] [Thread-125788] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:08:01.093 [DEBUG] [Thread-125788] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:08:01.093 [DEBUG] [Thread-125788] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:08:01.093 [DEBUG] [Thread-125788] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:08:01.093 [DEBUG] [Thread-125788] [transport.py] [_log()] client lang: <none>
2025-12-31T10:08:01.094 [DEBUG] [Thread-125788] [transport.py] [_log()] server lang: <none>
2025-12-31T10:08:01.094 [DEBUG] [Thread-125788] [transport.py] [_log()] kex follows: False
2025-12-31T10:08:01.094 [DEBUG] [Thread-125788] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:08:01.094 [DEBUG] [Thread-125788] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:08:01.094 [DEBUG] [Thread-125788] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:08:01.094 [DEBUG] [Thread-125788] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:08:01.094 [DEBUG] [Thread-125788] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:08:01.094 [DEBUG] [Thread-125788] [transport.py] [_log()] Compression: none
2025-12-31T10:08:01.094 [DEBUG] [Thread-125788] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:08:01.150 [DEBUG] [Thread-125788] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:08:01.151 [DEBUG] [Thread-125788] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:08:01.151 [DEBUG] [Thread-125788] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T10:08:01.151 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T10:08:01.152 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:08:01.207 [DEBUG] [Thread-125788] [transport.py] [_log()] userauth is OK
2025-12-31T10:08:01.208 [DEBUG] [Thread-125788] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:08:01.208 [DEBUG] [Thread-125788] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:08:01.208 [DEBUG] [Thread-125788] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T10:08:01.208 [DEBUG] [Thread-125788] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:08:01.230 [INFO] [Thread-125788] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:08:01.230 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T10:08:01.230 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:08:02.097 [DEBUG] [Thread-125788] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:08:02.097 [DEBUG] [Thread-125788] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:08:02.145 [DEBUG] [Thread-125788] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:08:02.145 [DEBUG] [Thread-125788] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:08:02.154 [DEBUG] [Thread-125788] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:08:02.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:08:02.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T10:08:02.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T10:08:02.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:08:02.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:08:02.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:08:02.190 [DEBUG] [Thread-125788] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:08:03.628 [DEBUG] [Thread-125790 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:08:05.386 [DEBUG] [Thread-125791 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:08:18.683 [DEBUG] [Thread-125792 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:08:22.372 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:08:22.373 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:08:32.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T10:08:32.212 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T10:08:32.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T10:08:32.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 10, 7, 58), 33.94, 9.6, 0.0, 21.3, 24.61, 0, 0, 0, 2, 0, 0),)
2025-12-31T10:08:32.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 10:07:58
2025-12-31T10:08:33.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T10:08:33.198 [DEBUG] [Thread-125793] [transport.py] [_log()] starting thread (client mode): 0xb6b28460
2025-12-31T10:08:33.198 [DEBUG] [Thread-125793] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:08:33.218 [DEBUG] [Thread-125793] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T10:08:33.218 [INFO] [Thread-125793] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T10:08:33.219 [DEBUG] [Thread-125793] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:08:33.219 [DEBUG] [Thread-125793] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T10:08:33.219 [DEBUG] [Thread-125793] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:08:33.219 [DEBUG] [Thread-125793] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:08:33.219 [DEBUG] [Thread-125793] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:08:33.219 [DEBUG] [Thread-125793] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:08:33.220 [DEBUG] [Thread-125793] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:08:33.220 [DEBUG] [Thread-125793] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:08:33.220 [DEBUG] [Thread-125793] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:08:33.220 [DEBUG] [Thread-125793] [transport.py] [_log()] client lang: <none>
2025-12-31T10:08:33.220 [DEBUG] [Thread-125793] [transport.py] [_log()] server lang: <none>
2025-12-31T10:08:33.220 [DEBUG] [Thread-125793] [transport.py] [_log()] kex follows: False
2025-12-31T10:08:33.220 [DEBUG] [Thread-125793] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:08:33.220 [DEBUG] [Thread-125793] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:08:33.220 [DEBUG] [Thread-125793] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:08:33.220 [DEBUG] [Thread-125793] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:08:33.220 [DEBUG] [Thread-125793] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:08:33.220 [DEBUG] [Thread-125793] [transport.py] [_log()] Compression: none
2025-12-31T10:08:33.220 [DEBUG] [Thread-125793] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:08:33.237 [DEBUG] [Thread-125793] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:08:33.238 [DEBUG] [Thread-125793] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:08:33.238 [DEBUG] [Thread-125793] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T10:08:33.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T10:08:33.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:08:33.240 [DEBUG] [Thread-125793] [transport.py] [_log()] userauth is OK
2025-12-31T10:08:33.241 [DEBUG] [Thread-125793] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:08:33.241 [DEBUG] [Thread-125793] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:08:33.241 [DEBUG] [Thread-125793] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T10:08:33.241 [DEBUG] [Thread-125793] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:08:33.256 [INFO] [Thread-125793] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:08:33.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:08:33.719 [DEBUG] [Thread-125795 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:08:34.099 [DEBUG] [Thread-125793] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:08:34.099 [DEBUG] [Thread-125793] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:08:34.100 [DEBUG] [Thread-125793] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T10:08:34.140 [DEBUG] [Thread-125793] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:08:34.140 [DEBUG] [Thread-125793] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:08:34.143 [DEBUG] [Thread-125793] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:08:34.155 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:08:34.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T10:08:34.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T10:08:34.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T10:08:34.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:08:34.166 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T10:08:34.166 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:08:34.166 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:08:34.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T10:08:34.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.338685 -999.00  +24.00  19.12     15   -3.80 1 1 1 1 1   888    0 23.52 -226.66 ----- 20.5 19.1 268.8 24.2 30.6 -28.6 30.1 -27.0 28.1 -30.0 28.9 -27.6
2025-12-31T10:08:34.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T10:08:34.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T10:08:34.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.338685
2025-12-31T10:08:34.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T10:08:34.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T10:08:34.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T10:08:34.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T10:08:34.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T10:08:34.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T10:07:58', tmtdew=33.94, humidity=9.6, cloud=0.0, wind=21.3, temperature=24.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T08:07:42.384', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T10:08:34.169 [DEBUG] [Thread-125793] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:08:34.253 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T10:08:34.265 [DEBUG] [Thread-125797] [transport.py] [_log()] starting thread (client mode): 0xb6bb0550
2025-12-31T10:08:34.265 [DEBUG] [Thread-125797] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:08:34.283 [DEBUG] [Thread-125797] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T10:08:34.283 [INFO] [Thread-125797] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T10:08:34.291 [DEBUG] [Thread-125797] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:08:34.291 [DEBUG] [Thread-125797] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T10:08:34.291 [DEBUG] [Thread-125797] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:08:34.291 [DEBUG] [Thread-125797] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:08:34.291 [DEBUG] [Thread-125797] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:08:34.291 [DEBUG] [Thread-125797] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:08:34.291 [DEBUG] [Thread-125797] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:08:34.291 [DEBUG] [Thread-125797] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:08:34.291 [DEBUG] [Thread-125797] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:08:34.291 [DEBUG] [Thread-125797] [transport.py] [_log()] client lang: <none>
2025-12-31T10:08:34.291 [DEBUG] [Thread-125797] [transport.py] [_log()] server lang: <none>
2025-12-31T10:08:34.291 [DEBUG] [Thread-125797] [transport.py] [_log()] kex follows: False
2025-12-31T10:08:34.291 [DEBUG] [Thread-125797] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:08:34.292 [DEBUG] [Thread-125797] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:08:34.292 [DEBUG] [Thread-125797] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:08:34.292 [DEBUG] [Thread-125797] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:08:34.292 [DEBUG] [Thread-125797] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:08:34.292 [DEBUG] [Thread-125797] [transport.py] [_log()] Compression: none
2025-12-31T10:08:34.292 [DEBUG] [Thread-125797] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:08:34.347 [DEBUG] [Thread-125797] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:08:34.348 [DEBUG] [Thread-125797] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:08:34.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T10:08:34.349 [DEBUG] [Thread-125797] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T10:08:34.350 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:08:34.403 [DEBUG] [Thread-125797] [transport.py] [_log()] userauth is OK
2025-12-31T10:08:34.404 [DEBUG] [Thread-125797] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:08:34.404 [DEBUG] [Thread-125797] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:08:34.404 [DEBUG] [Thread-125797] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T10:08:34.404 [DEBUG] [Thread-125797] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:08:34.428 [INFO] [Thread-125797] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:08:34.428 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T10:08:34.428 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:08:35.271 [DEBUG] [Thread-125797] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:08:35.271 [DEBUG] [Thread-125797] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:08:35.319 [DEBUG] [Thread-125797] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:08:35.319 [DEBUG] [Thread-125797] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:08:35.329 [DEBUG] [Thread-125797] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:08:35.339 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:08:35.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T10:08:35.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T10:08:35.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:08:35.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:08:35.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:08:35.367 [DEBUG] [Thread-125797] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:08:48.760 [DEBUG] [Thread-125799 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:09:03.809 [DEBUG] [Thread-125800 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:09:05.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T10:09:05.389 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T10:09:05.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T10:09:05.437 [DEBUG] [Thread-125801 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:09:06.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 10, 9, 2), 33.53, 9.87, 0.0, 16.85, 24.41, 0, 0, 0, 2, 0, 0),)
2025-12-31T10:09:06.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 10:09:02
2025-12-31T10:09:06.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T10:09:06.419 [DEBUG] [Thread-125802] [transport.py] [_log()] starting thread (client mode): 0xb6b6b850
2025-12-31T10:09:06.419 [DEBUG] [Thread-125802] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:09:06.438 [DEBUG] [Thread-125802] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T10:09:06.438 [INFO] [Thread-125802] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T10:09:06.443 [DEBUG] [Thread-125802] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:09:06.443 [DEBUG] [Thread-125802] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T10:09:06.443 [DEBUG] [Thread-125802] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:09:06.443 [DEBUG] [Thread-125802] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:09:06.443 [DEBUG] [Thread-125802] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:09:06.443 [DEBUG] [Thread-125802] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:09:06.443 [DEBUG] [Thread-125802] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:09:06.443 [DEBUG] [Thread-125802] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:09:06.443 [DEBUG] [Thread-125802] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:09:06.443 [DEBUG] [Thread-125802] [transport.py] [_log()] client lang: <none>
2025-12-31T10:09:06.443 [DEBUG] [Thread-125802] [transport.py] [_log()] server lang: <none>
2025-12-31T10:09:06.443 [DEBUG] [Thread-125802] [transport.py] [_log()] kex follows: False
2025-12-31T10:09:06.443 [DEBUG] [Thread-125802] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:09:06.443 [DEBUG] [Thread-125802] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:09:06.443 [DEBUG] [Thread-125802] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:09:06.443 [DEBUG] [Thread-125802] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:09:06.443 [DEBUG] [Thread-125802] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:09:06.443 [DEBUG] [Thread-125802] [transport.py] [_log()] Compression: none
2025-12-31T10:09:06.443 [DEBUG] [Thread-125802] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:09:06.459 [DEBUG] [Thread-125802] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:09:06.459 [DEBUG] [Thread-125802] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:09:06.459 [DEBUG] [Thread-125802] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T10:09:06.459 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T10:09:06.459 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:09:06.460 [DEBUG] [Thread-125802] [transport.py] [_log()] userauth is OK
2025-12-31T10:09:06.460 [DEBUG] [Thread-125802] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:09:06.460 [DEBUG] [Thread-125802] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:09:06.460 [DEBUG] [Thread-125802] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T10:09:06.460 [DEBUG] [Thread-125802] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:09:06.470 [INFO] [Thread-125802] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:09:06.470 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:09:07.087 [DEBUG] [Thread-125802] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:09:07.087 [DEBUG] [Thread-125802] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:09:07.087 [DEBUG] [Thread-125802] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T10:09:07.127 [DEBUG] [Thread-125802] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:09:07.127 [DEBUG] [Thread-125802] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:09:07.130 [DEBUG] [Thread-125802] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:09:07.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:09:07.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T10:09:07.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T10:09:07.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T10:09:07.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:09:07.148 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T10:09:07.148 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:09:07.148 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:09:07.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T10:09:07.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.339033 -999.00  +23.70  12.29     16   -3.50 1 1 1 1 1   888    0 22.09 -251.54 ----- 12.7 12.3 280.8 22.9 30.6 -29.1 30.1 -26.0 28.1 -25.5 28.9 -26.6
2025-12-31T10:09:07.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T10:09:07.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T10:09:07.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.339033
2025-12-31T10:09:07.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T10:09:07.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T10:09:07.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T10:09:07.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T10:09:07.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T10:09:07.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T10:09:02', tmtdew=33.53, humidity=9.87, cloud=0.0, wind=16.85, temperature=24.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T08:08:12.451', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T10:09:07.149 [DEBUG] [Thread-125802] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:09:07.222 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T10:09:07.234 [DEBUG] [Thread-125805] [transport.py] [_log()] starting thread (client mode): 0xb6b6bc40
2025-12-31T10:09:07.234 [DEBUG] [Thread-125805] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:09:07.249 [DEBUG] [Thread-125805] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T10:09:07.249 [INFO] [Thread-125805] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T10:09:07.257 [DEBUG] [Thread-125805] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:09:07.257 [DEBUG] [Thread-125805] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T10:09:07.257 [DEBUG] [Thread-125805] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:09:07.257 [DEBUG] [Thread-125805] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:09:07.257 [DEBUG] [Thread-125805] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:09:07.257 [DEBUG] [Thread-125805] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:09:07.257 [DEBUG] [Thread-125805] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:09:07.257 [DEBUG] [Thread-125805] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:09:07.257 [DEBUG] [Thread-125805] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:09:07.257 [DEBUG] [Thread-125805] [transport.py] [_log()] client lang: <none>
2025-12-31T10:09:07.257 [DEBUG] [Thread-125805] [transport.py] [_log()] server lang: <none>
2025-12-31T10:09:07.257 [DEBUG] [Thread-125805] [transport.py] [_log()] kex follows: False
2025-12-31T10:09:07.257 [DEBUG] [Thread-125805] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:09:07.257 [DEBUG] [Thread-125805] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:09:07.257 [DEBUG] [Thread-125805] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:09:07.257 [DEBUG] [Thread-125805] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:09:07.257 [DEBUG] [Thread-125805] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:09:07.257 [DEBUG] [Thread-125805] [transport.py] [_log()] Compression: none
2025-12-31T10:09:07.257 [DEBUG] [Thread-125805] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:09:07.314 [DEBUG] [Thread-125805] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:09:07.314 [DEBUG] [Thread-125805] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:09:07.314 [DEBUG] [Thread-125805] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T10:09:07.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T10:09:07.315 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:09:07.371 [DEBUG] [Thread-125805] [transport.py] [_log()] userauth is OK
2025-12-31T10:09:07.371 [DEBUG] [Thread-125805] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:09:07.371 [DEBUG] [Thread-125805] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:09:07.371 [DEBUG] [Thread-125805] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T10:09:07.371 [DEBUG] [Thread-125805] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:09:07.385 [INFO] [Thread-125805] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:09:07.385 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T10:09:07.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:09:08.225 [DEBUG] [Thread-125805] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:09:08.225 [DEBUG] [Thread-125805] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:09:08.272 [DEBUG] [Thread-125805] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:09:08.272 [DEBUG] [Thread-125805] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:09:08.280 [DEBUG] [Thread-125805] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:09:08.288 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:09:08.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T10:09:08.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T10:09:08.304 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:09:08.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:09:08.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:09:08.312 [DEBUG] [Thread-125805] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:09:18.843 [DEBUG] [Thread-125807 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:09:22.511 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:09:22.513 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:09:33.898 [DEBUG] [Thread-125808 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:09:38.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T10:09:38.335 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T10:09:38.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T10:09:39.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 10, 9, 34), 32.88, 10.62, 0.0, 9.18, 24.27, 0, 0, 0, 2, 0, 0),)
2025-12-31T10:09:39.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 10:09:34
2025-12-31T10:09:39.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T10:09:39.304 [DEBUG] [Thread-125809] [transport.py] [_log()] starting thread (client mode): 0xb6b6b970
2025-12-31T10:09:39.304 [DEBUG] [Thread-125809] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:09:39.325 [DEBUG] [Thread-125809] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T10:09:39.325 [INFO] [Thread-125809] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T10:09:39.329 [DEBUG] [Thread-125809] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:09:39.329 [DEBUG] [Thread-125809] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T10:09:39.329 [DEBUG] [Thread-125809] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:09:39.329 [DEBUG] [Thread-125809] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:09:39.329 [DEBUG] [Thread-125809] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:09:39.329 [DEBUG] [Thread-125809] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:09:39.329 [DEBUG] [Thread-125809] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:09:39.329 [DEBUG] [Thread-125809] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:09:39.329 [DEBUG] [Thread-125809] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:09:39.329 [DEBUG] [Thread-125809] [transport.py] [_log()] client lang: <none>
2025-12-31T10:09:39.329 [DEBUG] [Thread-125809] [transport.py] [_log()] server lang: <none>
2025-12-31T10:09:39.329 [DEBUG] [Thread-125809] [transport.py] [_log()] kex follows: False
2025-12-31T10:09:39.329 [DEBUG] [Thread-125809] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:09:39.329 [DEBUG] [Thread-125809] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:09:39.329 [DEBUG] [Thread-125809] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:09:39.329 [DEBUG] [Thread-125809] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:09:39.329 [DEBUG] [Thread-125809] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:09:39.329 [DEBUG] [Thread-125809] [transport.py] [_log()] Compression: none
2025-12-31T10:09:39.329 [DEBUG] [Thread-125809] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:09:39.346 [DEBUG] [Thread-125809] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:09:39.347 [DEBUG] [Thread-125809] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:09:39.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T10:09:39.348 [DEBUG] [Thread-125809] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T10:09:39.348 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:09:39.350 [DEBUG] [Thread-125809] [transport.py] [_log()] userauth is OK
2025-12-31T10:09:39.350 [DEBUG] [Thread-125809] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:09:39.350 [DEBUG] [Thread-125809] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:09:39.350 [DEBUG] [Thread-125809] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T10:09:39.351 [DEBUG] [Thread-125809] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:09:39.371 [INFO] [Thread-125809] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:09:39.372 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:09:40.127 [DEBUG] [Thread-125809] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:09:40.127 [DEBUG] [Thread-125809] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:09:40.127 [DEBUG] [Thread-125809] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T10:09:40.169 [DEBUG] [Thread-125809] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:09:40.169 [DEBUG] [Thread-125809] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:09:40.172 [DEBUG] [Thread-125809] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:09:40.184 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:09:40.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T10:09:40.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T10:09:40.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T10:09:40.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:09:40.193 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T10:09:40.193 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:09:40.193 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:09:40.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T10:09:40.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.339727 -999.00  +23.90  12.25     16   -3.30 1 1 1 1 1   888    0 20.92 -281.52 ----- 10.4 12.2 262.6 13.3 30.9 -27.3 30.4 -25.8 28.4 -26.6 29.1 -25.2
2025-12-31T10:09:40.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T10:09:40.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T10:09:40.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.339727
2025-12-31T10:09:40.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T10:09:40.195 [DEBUG] [Thread-125809] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:09:40.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T10:09:40.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T10:09:40.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T10:09:40.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T10:09:40.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T10:09:34', tmtdew=32.88, humidity=10.62, cloud=0.0, wind=9.18, temperature=24.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T08:09:12.413', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T10:09:40.274 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T10:09:40.286 [DEBUG] [Thread-125812] [transport.py] [_log()] starting thread (client mode): 0xb6bb3c10
2025-12-31T10:09:40.286 [DEBUG] [Thread-125812] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:09:40.301 [DEBUG] [Thread-125812] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T10:09:40.301 [INFO] [Thread-125812] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T10:09:40.308 [DEBUG] [Thread-125812] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:09:40.309 [DEBUG] [Thread-125812] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T10:09:40.309 [DEBUG] [Thread-125812] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:09:40.309 [DEBUG] [Thread-125812] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:09:40.309 [DEBUG] [Thread-125812] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:09:40.309 [DEBUG] [Thread-125812] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:09:40.309 [DEBUG] [Thread-125812] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:09:40.309 [DEBUG] [Thread-125812] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:09:40.309 [DEBUG] [Thread-125812] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:09:40.309 [DEBUG] [Thread-125812] [transport.py] [_log()] client lang: <none>
2025-12-31T10:09:40.309 [DEBUG] [Thread-125812] [transport.py] [_log()] server lang: <none>
2025-12-31T10:09:40.309 [DEBUG] [Thread-125812] [transport.py] [_log()] kex follows: False
2025-12-31T10:09:40.309 [DEBUG] [Thread-125812] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:09:40.309 [DEBUG] [Thread-125812] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:09:40.309 [DEBUG] [Thread-125812] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:09:40.309 [DEBUG] [Thread-125812] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:09:40.309 [DEBUG] [Thread-125812] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:09:40.309 [DEBUG] [Thread-125812] [transport.py] [_log()] Compression: none
2025-12-31T10:09:40.309 [DEBUG] [Thread-125812] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:09:40.367 [DEBUG] [Thread-125812] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:09:40.368 [DEBUG] [Thread-125812] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:09:40.368 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T10:09:40.369 [DEBUG] [Thread-125812] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T10:09:40.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:09:40.424 [DEBUG] [Thread-125812] [transport.py] [_log()] userauth is OK
2025-12-31T10:09:40.424 [DEBUG] [Thread-125812] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:09:40.425 [DEBUG] [Thread-125812] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:09:40.425 [DEBUG] [Thread-125812] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T10:09:40.425 [DEBUG] [Thread-125812] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:09:40.446 [INFO] [Thread-125812] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:09:40.446 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T10:09:40.446 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:09:41.270 [DEBUG] [Thread-125812] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:09:41.270 [DEBUG] [Thread-125812] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:09:41.318 [DEBUG] [Thread-125812] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:09:41.318 [DEBUG] [Thread-125812] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:09:41.327 [DEBUG] [Thread-125812] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:09:41.341 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:09:41.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T10:09:41.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T10:09:41.364 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:09:41.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:09:41.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:09:41.372 [DEBUG] [Thread-125812] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:09:48.933 [DEBUG] [Thread-125814 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:10:03.973 [DEBUG] [Thread-125815 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:10:05.494 [DEBUG] [Thread-125816 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:10:11.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T10:10:11.395 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T10:10:11.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T10:10:12.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 10, 10, 6), 32.73, 10.75, 0.0, 10.62, 24.32, 0, 0, 0, 2, 0, 0),)
2025-12-31T10:10:12.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 10:10:06
2025-12-31T10:10:12.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T10:10:12.380 [DEBUG] [Thread-125817] [transport.py] [_log()] starting thread (client mode): 0xb95d7e20
2025-12-31T10:10:12.380 [DEBUG] [Thread-125817] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:10:12.402 [DEBUG] [Thread-125817] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T10:10:12.402 [INFO] [Thread-125817] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T10:10:12.406 [DEBUG] [Thread-125817] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:10:12.406 [DEBUG] [Thread-125817] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T10:10:12.406 [DEBUG] [Thread-125817] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:10:12.406 [DEBUG] [Thread-125817] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:10:12.406 [DEBUG] [Thread-125817] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:10:12.406 [DEBUG] [Thread-125817] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:10:12.406 [DEBUG] [Thread-125817] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:10:12.406 [DEBUG] [Thread-125817] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:10:12.407 [DEBUG] [Thread-125817] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:10:12.407 [DEBUG] [Thread-125817] [transport.py] [_log()] client lang: <none>
2025-12-31T10:10:12.407 [DEBUG] [Thread-125817] [transport.py] [_log()] server lang: <none>
2025-12-31T10:10:12.407 [DEBUG] [Thread-125817] [transport.py] [_log()] kex follows: False
2025-12-31T10:10:12.407 [DEBUG] [Thread-125817] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:10:12.407 [DEBUG] [Thread-125817] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:10:12.407 [DEBUG] [Thread-125817] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:10:12.407 [DEBUG] [Thread-125817] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:10:12.407 [DEBUG] [Thread-125817] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:10:12.407 [DEBUG] [Thread-125817] [transport.py] [_log()] Compression: none
2025-12-31T10:10:12.407 [DEBUG] [Thread-125817] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:10:12.425 [DEBUG] [Thread-125817] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:10:12.426 [DEBUG] [Thread-125817] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:10:12.426 [DEBUG] [Thread-125817] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T10:10:12.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T10:10:12.427 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:10:12.427 [DEBUG] [Thread-125817] [transport.py] [_log()] userauth is OK
2025-12-31T10:10:12.427 [DEBUG] [Thread-125817] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:10:12.427 [DEBUG] [Thread-125817] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:10:12.427 [DEBUG] [Thread-125817] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T10:10:12.427 [DEBUG] [Thread-125817] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:10:12.446 [INFO] [Thread-125817] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:10:12.447 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:10:15.163 [DEBUG] [Thread-125817] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:10:15.163 [DEBUG] [Thread-125817] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:10:15.163 [DEBUG] [Thread-125817] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T10:10:15.204 [DEBUG] [Thread-125817] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:10:15.204 [DEBUG] [Thread-125817] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:10:15.207 [DEBUG] [Thread-125817] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:10:15.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:10:15.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T10:10:15.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T10:10:15.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T10:10:15.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:10:15.274 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T10:10:15.274 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:10:15.274 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:10:15.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T10:10:15.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.340074 -999.00  +24.20   9.27     16   -2.90 1 1 1 1 1   888    0 20.02 -320.10 ----- 10.3 9.3 262.6 10.4 31.0 -26.7 30.5 -25.9 28.6 -23.8 29.1 -25.4
2025-12-31T10:10:15.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T10:10:15.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T10:10:15.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.340074
2025-12-31T10:10:15.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T10:10:15.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T10:10:15.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T10:10:15.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T10:10:15.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T10:10:15.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T10:10:06', tmtdew=32.73, humidity=10.75, cloud=0.0, wind=10.62, temperature=24.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T08:09:42.394', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T10:10:15.275 [DEBUG] [Thread-125817] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:10:15.348 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T10:10:15.357 [DEBUG] [Thread-125820] [transport.py] [_log()] starting thread (client mode): 0xb95f2dd0
2025-12-31T10:10:15.357 [DEBUG] [Thread-125820] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:10:15.377 [DEBUG] [Thread-125820] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T10:10:15.377 [INFO] [Thread-125820] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T10:10:15.385 [DEBUG] [Thread-125820] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:10:15.385 [DEBUG] [Thread-125820] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T10:10:15.385 [DEBUG] [Thread-125820] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:10:15.385 [DEBUG] [Thread-125820] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:10:15.385 [DEBUG] [Thread-125820] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:10:15.385 [DEBUG] [Thread-125820] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:10:15.385 [DEBUG] [Thread-125820] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:10:15.385 [DEBUG] [Thread-125820] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:10:15.385 [DEBUG] [Thread-125820] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:10:15.385 [DEBUG] [Thread-125820] [transport.py] [_log()] client lang: <none>
2025-12-31T10:10:15.385 [DEBUG] [Thread-125820] [transport.py] [_log()] server lang: <none>
2025-12-31T10:10:15.385 [DEBUG] [Thread-125820] [transport.py] [_log()] kex follows: False
2025-12-31T10:10:15.385 [DEBUG] [Thread-125820] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:10:15.385 [DEBUG] [Thread-125820] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:10:15.385 [DEBUG] [Thread-125820] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:10:15.385 [DEBUG] [Thread-125820] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:10:15.385 [DEBUG] [Thread-125820] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:10:15.385 [DEBUG] [Thread-125820] [transport.py] [_log()] Compression: none
2025-12-31T10:10:15.385 [DEBUG] [Thread-125820] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:10:15.443 [DEBUG] [Thread-125820] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:10:15.443 [DEBUG] [Thread-125820] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:10:15.443 [DEBUG] [Thread-125820] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T10:10:15.443 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T10:10:15.443 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:10:15.499 [DEBUG] [Thread-125820] [transport.py] [_log()] userauth is OK
2025-12-31T10:10:15.500 [DEBUG] [Thread-125820] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:10:15.500 [DEBUG] [Thread-125820] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:10:15.500 [DEBUG] [Thread-125820] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T10:10:15.500 [DEBUG] [Thread-125820] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:10:15.514 [INFO] [Thread-125820] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:10:15.514 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T10:10:15.514 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:10:16.371 [DEBUG] [Thread-125820] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:10:16.372 [DEBUG] [Thread-125820] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:10:16.419 [DEBUG] [Thread-125820] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:10:16.419 [DEBUG] [Thread-125820] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:10:16.428 [DEBUG] [Thread-125820] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:10:16.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:10:16.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T10:10:16.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T10:10:16.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:10:16.453 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:10:16.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:10:16.460 [DEBUG] [Thread-125820] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:10:18.999 [DEBUG] [Thread-125822 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:10:22.652 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:10:22.653 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:10:34.042 [DEBUG] [Thread-125823 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:10:46.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T10:10:46.483 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T10:10:46.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T10:10:47.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 10, 10, 38), 32.1, 11.2, 0.0, 10.32, 24.48, 0, 0, 0, 2, 0, 0),)
2025-12-31T10:10:47.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 10:10:38
2025-12-31T10:10:47.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T10:10:47.472 [DEBUG] [Thread-125824] [transport.py] [_log()] starting thread (client mode): 0xb957b9a0
2025-12-31T10:10:47.472 [DEBUG] [Thread-125824] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:10:47.492 [DEBUG] [Thread-125824] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T10:10:47.492 [INFO] [Thread-125824] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T10:10:47.495 [DEBUG] [Thread-125824] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:10:47.495 [DEBUG] [Thread-125824] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T10:10:47.495 [DEBUG] [Thread-125824] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:10:47.495 [DEBUG] [Thread-125824] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:10:47.495 [DEBUG] [Thread-125824] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:10:47.495 [DEBUG] [Thread-125824] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:10:47.495 [DEBUG] [Thread-125824] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:10:47.495 [DEBUG] [Thread-125824] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:10:47.495 [DEBUG] [Thread-125824] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:10:47.496 [DEBUG] [Thread-125824] [transport.py] [_log()] client lang: <none>
2025-12-31T10:10:47.496 [DEBUG] [Thread-125824] [transport.py] [_log()] server lang: <none>
2025-12-31T10:10:47.496 [DEBUG] [Thread-125824] [transport.py] [_log()] kex follows: False
2025-12-31T10:10:47.496 [DEBUG] [Thread-125824] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:10:47.496 [DEBUG] [Thread-125824] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:10:47.496 [DEBUG] [Thread-125824] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:10:47.496 [DEBUG] [Thread-125824] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:10:47.496 [DEBUG] [Thread-125824] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:10:47.496 [DEBUG] [Thread-125824] [transport.py] [_log()] Compression: none
2025-12-31T10:10:47.496 [DEBUG] [Thread-125824] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:10:47.511 [DEBUG] [Thread-125824] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:10:47.511 [DEBUG] [Thread-125824] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:10:47.511 [DEBUG] [Thread-125824] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T10:10:47.512 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T10:10:47.512 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:10:47.512 [DEBUG] [Thread-125824] [transport.py] [_log()] userauth is OK
2025-12-31T10:10:47.512 [DEBUG] [Thread-125824] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:10:47.512 [DEBUG] [Thread-125824] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:10:47.512 [DEBUG] [Thread-125824] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T10:10:47.513 [DEBUG] [Thread-125824] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:10:47.528 [INFO] [Thread-125824] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:10:47.528 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:10:48.139 [DEBUG] [Thread-125824] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:10:48.139 [DEBUG] [Thread-125824] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:10:48.139 [DEBUG] [Thread-125824] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T10:10:48.181 [DEBUG] [Thread-125824] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:10:48.181 [DEBUG] [Thread-125824] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:10:48.183 [DEBUG] [Thread-125824] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:10:48.195 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:10:48.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T10:10:48.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T10:10:48.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T10:10:48.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:10:48.202 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T10:10:48.202 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:10:48.202 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:10:48.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T10:10:48.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.340421 -999.00  +24.10  15.78     17   -2.00 1 1 1 1 1   888    0 20.05 -315.64 ----- 14.8 15.8 268.2 18.1 31.1 -28.4 30.5 -26.3 28.7 -24.8 29.2 -26.8
2025-12-31T10:10:48.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T10:10:48.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T10:10:48.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.340421
2025-12-31T10:10:48.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T10:10:48.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T10:10:48.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T10:10:48.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T10:10:48.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T10:10:48.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T10:10:38', tmtdew=32.1, humidity=11.2, cloud=0.0, wind=10.32, temperature=24.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T08:10:12.374', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T10:10:48.203 [DEBUG] [Thread-125824] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:10:48.274 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T10:10:48.285 [DEBUG] [Thread-125827] [transport.py] [_log()] starting thread (client mode): 0xb6b49c00
2025-12-31T10:10:48.285 [DEBUG] [Thread-125827] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:10:48.300 [DEBUG] [Thread-125827] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T10:10:48.300 [INFO] [Thread-125827] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T10:10:48.308 [DEBUG] [Thread-125827] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:10:48.308 [DEBUG] [Thread-125827] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T10:10:48.308 [DEBUG] [Thread-125827] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:10:48.308 [DEBUG] [Thread-125827] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:10:48.308 [DEBUG] [Thread-125827] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:10:48.308 [DEBUG] [Thread-125827] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:10:48.308 [DEBUG] [Thread-125827] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:10:48.308 [DEBUG] [Thread-125827] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:10:48.308 [DEBUG] [Thread-125827] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:10:48.308 [DEBUG] [Thread-125827] [transport.py] [_log()] client lang: <none>
2025-12-31T10:10:48.308 [DEBUG] [Thread-125827] [transport.py] [_log()] server lang: <none>
2025-12-31T10:10:48.308 [DEBUG] [Thread-125827] [transport.py] [_log()] kex follows: False
2025-12-31T10:10:48.308 [DEBUG] [Thread-125827] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:10:48.308 [DEBUG] [Thread-125827] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:10:48.308 [DEBUG] [Thread-125827] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:10:48.308 [DEBUG] [Thread-125827] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:10:48.308 [DEBUG] [Thread-125827] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:10:48.308 [DEBUG] [Thread-125827] [transport.py] [_log()] Compression: none
2025-12-31T10:10:48.308 [DEBUG] [Thread-125827] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:10:48.363 [DEBUG] [Thread-125827] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:10:48.363 [DEBUG] [Thread-125827] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:10:48.363 [DEBUG] [Thread-125827] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T10:10:48.363 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T10:10:48.363 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:10:48.420 [DEBUG] [Thread-125827] [transport.py] [_log()] userauth is OK
2025-12-31T10:10:48.420 [DEBUG] [Thread-125827] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:10:48.420 [DEBUG] [Thread-125827] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:10:48.420 [DEBUG] [Thread-125827] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T10:10:48.420 [DEBUG] [Thread-125827] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:10:48.437 [INFO] [Thread-125827] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:10:48.437 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T10:10:48.437 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:10:49.073 [DEBUG] [Thread-125829 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:10:49.294 [DEBUG] [Thread-125827] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:10:49.294 [DEBUG] [Thread-125827] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:10:49.343 [DEBUG] [Thread-125827] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:10:49.343 [DEBUG] [Thread-125827] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:10:49.352 [DEBUG] [Thread-125827] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:10:49.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:10:49.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-12-31T10:10:49.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-12-31T10:10:49.380 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:10:49.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:10:49.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:10:49.389 [DEBUG] [Thread-125827] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:11:04.139 [DEBUG] [Thread-125830 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:11:05.543 [DEBUG] [Thread-125831 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:11:19.167 [DEBUG] [Thread-125832 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:11:19.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T10:11:19.398 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T10:11:19.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T10:11:20.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 10, 11, 10), 31.98, 11.31, 0.0, 11.31, 24.58, 0, 0, 0, 2, 0, 0),)
2025-12-31T10:11:20.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 10:11:10
2025-12-31T10:11:20.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T10:11:20.378 [DEBUG] [Thread-125833] [transport.py] [_log()] starting thread (client mode): 0xb6bb2e60
2025-12-31T10:11:20.379 [DEBUG] [Thread-125833] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:11:20.400 [DEBUG] [Thread-125833] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T10:11:20.400 [INFO] [Thread-125833] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T10:11:20.404 [DEBUG] [Thread-125833] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:11:20.404 [DEBUG] [Thread-125833] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T10:11:20.404 [DEBUG] [Thread-125833] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:11:20.404 [DEBUG] [Thread-125833] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:11:20.404 [DEBUG] [Thread-125833] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:11:20.404 [DEBUG] [Thread-125833] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:11:20.404 [DEBUG] [Thread-125833] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:11:20.404 [DEBUG] [Thread-125833] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:11:20.404 [DEBUG] [Thread-125833] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:11:20.404 [DEBUG] [Thread-125833] [transport.py] [_log()] client lang: <none>
2025-12-31T10:11:20.404 [DEBUG] [Thread-125833] [transport.py] [_log()] server lang: <none>
2025-12-31T10:11:20.404 [DEBUG] [Thread-125833] [transport.py] [_log()] kex follows: False
2025-12-31T10:11:20.404 [DEBUG] [Thread-125833] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:11:20.404 [DEBUG] [Thread-125833] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:11:20.404 [DEBUG] [Thread-125833] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:11:20.404 [DEBUG] [Thread-125833] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:11:20.404 [DEBUG] [Thread-125833] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:11:20.404 [DEBUG] [Thread-125833] [transport.py] [_log()] Compression: none
2025-12-31T10:11:20.404 [DEBUG] [Thread-125833] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:11:20.422 [DEBUG] [Thread-125833] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:11:20.423 [DEBUG] [Thread-125833] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:11:20.432 [DEBUG] [Thread-125833] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T10:11:20.433 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T10:11:20.433 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:11:20.436 [DEBUG] [Thread-125833] [transport.py] [_log()] userauth is OK
2025-12-31T10:11:20.436 [DEBUG] [Thread-125833] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:11:20.436 [DEBUG] [Thread-125833] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:11:20.436 [DEBUG] [Thread-125833] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T10:11:20.436 [DEBUG] [Thread-125833] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:11:20.450 [INFO] [Thread-125833] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:11:20.450 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:11:21.172 [DEBUG] [Thread-125833] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:11:21.172 [DEBUG] [Thread-125833] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:11:21.172 [DEBUG] [Thread-125833] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T10:11:21.213 [DEBUG] [Thread-125833] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:11:21.213 [DEBUG] [Thread-125833] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:11:21.217 [DEBUG] [Thread-125833] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:11:21.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:11:21.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T10:11:21.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T10:11:21.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T10:11:21.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:11:21.232 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T10:11:21.232 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:11:21.232 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:11:21.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T10:11:21.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.340769 -999.00  +24.10   9.76     17   -2.00 1 1 1 1 1   888    0 19.38 -348.01 ----- 5.3 9.8 277.4 17.6 31.1 -27.0 30.6 -25.9 28.7 -25.2 29.2 -25.4
2025-12-31T10:11:21.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T10:11:21.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T10:11:21.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.340769
2025-12-31T10:11:21.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T10:11:21.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T10:11:21.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T10:11:21.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T10:11:21.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T10:11:21.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T10:11:10', tmtdew=31.98, humidity=11.31, cloud=0.0, wind=11.31, temperature=24.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T08:10:42.442', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T10:11:21.235 [DEBUG] [Thread-125833] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:11:21.308 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T10:11:21.320 [DEBUG] [Thread-125836] [transport.py] [_log()] starting thread (client mode): 0xb95f32e0
2025-12-31T10:11:21.320 [DEBUG] [Thread-125836] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:11:21.335 [DEBUG] [Thread-125836] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T10:11:21.335 [INFO] [Thread-125836] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T10:11:21.342 [DEBUG] [Thread-125836] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:11:21.343 [DEBUG] [Thread-125836] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T10:11:21.343 [DEBUG] [Thread-125836] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:11:21.343 [DEBUG] [Thread-125836] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:11:21.343 [DEBUG] [Thread-125836] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:11:21.343 [DEBUG] [Thread-125836] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:11:21.343 [DEBUG] [Thread-125836] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:11:21.343 [DEBUG] [Thread-125836] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:11:21.343 [DEBUG] [Thread-125836] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:11:21.343 [DEBUG] [Thread-125836] [transport.py] [_log()] client lang: <none>
2025-12-31T10:11:21.343 [DEBUG] [Thread-125836] [transport.py] [_log()] server lang: <none>
2025-12-31T10:11:21.343 [DEBUG] [Thread-125836] [transport.py] [_log()] kex follows: False
2025-12-31T10:11:21.343 [DEBUG] [Thread-125836] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:11:21.343 [DEBUG] [Thread-125836] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:11:21.343 [DEBUG] [Thread-125836] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:11:21.343 [DEBUG] [Thread-125836] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:11:21.343 [DEBUG] [Thread-125836] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:11:21.344 [DEBUG] [Thread-125836] [transport.py] [_log()] Compression: none
2025-12-31T10:11:21.344 [DEBUG] [Thread-125836] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:11:21.400 [DEBUG] [Thread-125836] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:11:21.401 [DEBUG] [Thread-125836] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:11:21.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T10:11:21.402 [DEBUG] [Thread-125836] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T10:11:21.403 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:11:21.456 [DEBUG] [Thread-125836] [transport.py] [_log()] userauth is OK
2025-12-31T10:11:21.457 [DEBUG] [Thread-125836] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:11:21.457 [DEBUG] [Thread-125836] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:11:21.457 [DEBUG] [Thread-125836] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T10:11:21.457 [DEBUG] [Thread-125836] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:11:21.477 [INFO] [Thread-125836] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:11:21.477 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T10:11:21.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:11:22.316 [DEBUG] [Thread-125836] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:11:22.316 [DEBUG] [Thread-125836] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:11:22.364 [DEBUG] [Thread-125836] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:11:22.364 [DEBUG] [Thread-125836] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:11:22.374 [DEBUG] [Thread-125836] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:11:22.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:11:22.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T10:11:22.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T10:11:22.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:11:22.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:11:22.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:11:22.410 [DEBUG] [Thread-125836] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:11:22.798 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:11:22.799 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:11:34.204 [DEBUG] [Thread-125838 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:11:49.255 [DEBUG] [Thread-125839 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:11:52.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T10:11:52.433 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T10:11: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-12-31T10:11:53.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 10, 11, 42), 31.91, 11.35, 0.0, 10.96, 24.73, 0, 0, 0, 2, 0, 0),)
2025-12-31T10:11:53.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 10:11:42
2025-12-31T10:11:53.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T10:11:53.411 [DEBUG] [Thread-125840] [transport.py] [_log()] starting thread (client mode): 0xb6b6b670
2025-12-31T10:11:53.411 [DEBUG] [Thread-125840] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:11:53.433 [DEBUG] [Thread-125840] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T10:11:53.433 [INFO] [Thread-125840] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T10:11:53.435 [DEBUG] [Thread-125840] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:11:53.436 [DEBUG] [Thread-125840] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T10:11:53.436 [DEBUG] [Thread-125840] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:11:53.436 [DEBUG] [Thread-125840] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:11:53.436 [DEBUG] [Thread-125840] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:11:53.436 [DEBUG] [Thread-125840] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:11:53.436 [DEBUG] [Thread-125840] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:11:53.436 [DEBUG] [Thread-125840] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:11:53.436 [DEBUG] [Thread-125840] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:11:53.436 [DEBUG] [Thread-125840] [transport.py] [_log()] client lang: <none>
2025-12-31T10:11:53.436 [DEBUG] [Thread-125840] [transport.py] [_log()] server lang: <none>
2025-12-31T10:11:53.436 [DEBUG] [Thread-125840] [transport.py] [_log()] kex follows: False
2025-12-31T10:11:53.436 [DEBUG] [Thread-125840] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:11:53.436 [DEBUG] [Thread-125840] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:11:53.436 [DEBUG] [Thread-125840] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:11:53.436 [DEBUG] [Thread-125840] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:11:53.436 [DEBUG] [Thread-125840] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:11:53.436 [DEBUG] [Thread-125840] [transport.py] [_log()] Compression: none
2025-12-31T10:11:53.436 [DEBUG] [Thread-125840] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:11:53.453 [DEBUG] [Thread-125840] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:11:53.454 [DEBUG] [Thread-125840] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:11:53.455 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T10:11:53.455 [DEBUG] [Thread-125840] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T10:11:53.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:11:53.457 [DEBUG] [Thread-125840] [transport.py] [_log()] userauth is OK
2025-12-31T10:11:53.458 [DEBUG] [Thread-125840] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:11:53.458 [DEBUG] [Thread-125840] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:11:53.458 [DEBUG] [Thread-125840] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T10:11:53.458 [DEBUG] [Thread-125840] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:11:53.477 [INFO] [Thread-125840] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:11:53.478 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:11:54.096 [DEBUG] [Thread-125840] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:11:54.096 [DEBUG] [Thread-125840] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:11:54.097 [DEBUG] [Thread-125840] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T10:11:54.137 [DEBUG] [Thread-125840] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:11:54.137 [DEBUG] [Thread-125840] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:11:54.141 [DEBUG] [Thread-125840] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:11:54.153 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:11:54.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T10:11:54.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T10:11:54.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T10:11:54.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:11:54.165 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T10:11:54.166 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:11:54.166 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:11:54.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T10:11:54.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.341116 -999.00  +24.30   8.00     17   -1.80 1 1 1 1 1   888    0 20.12 -310.02 ----- 10.7 8.0 268.6 10.0 31.3 -27.5 30.7 -25.5 28.9 -24.3 29.3 -25.8
2025-12-31T10:11:54.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T10:11:54.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T10:11:54.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.341116
2025-12-31T10:11:54.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T10:11:54.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T10:11:54.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T10:11:54.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T10:11:54.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T10:11:54.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T10:11:42', tmtdew=31.91, humidity=11.35, cloud=0.0, wind=10.96, temperature=24.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T08:11:12.422', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T10:11:54.168 [DEBUG] [Thread-125840] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:11:54.252 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T10:11:54.264 [DEBUG] [Thread-125843] [transport.py] [_log()] starting thread (client mode): 0xb6be4580
2025-12-31T10:11:54.264 [DEBUG] [Thread-125843] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:11:54.279 [DEBUG] [Thread-125843] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T10:11:54.279 [INFO] [Thread-125843] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T10:11:54.287 [DEBUG] [Thread-125843] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:11:54.287 [DEBUG] [Thread-125843] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T10:11:54.287 [DEBUG] [Thread-125843] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:11:54.287 [DEBUG] [Thread-125843] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:11:54.287 [DEBUG] [Thread-125843] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:11:54.287 [DEBUG] [Thread-125843] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:11:54.287 [DEBUG] [Thread-125843] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:11:54.287 [DEBUG] [Thread-125843] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:11:54.287 [DEBUG] [Thread-125843] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:11:54.287 [DEBUG] [Thread-125843] [transport.py] [_log()] client lang: <none>
2025-12-31T10:11:54.287 [DEBUG] [Thread-125843] [transport.py] [_log()] server lang: <none>
2025-12-31T10:11:54.287 [DEBUG] [Thread-125843] [transport.py] [_log()] kex follows: False
2025-12-31T10:11:54.287 [DEBUG] [Thread-125843] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:11:54.287 [DEBUG] [Thread-125843] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:11:54.287 [DEBUG] [Thread-125843] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:11:54.288 [DEBUG] [Thread-125843] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:11:54.288 [DEBUG] [Thread-125843] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:11:54.288 [DEBUG] [Thread-125843] [transport.py] [_log()] Compression: none
2025-12-31T10:11:54.288 [DEBUG] [Thread-125843] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:11:54.345 [DEBUG] [Thread-125843] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:11:54.345 [DEBUG] [Thread-125843] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:11:54.346 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T10:11:54.347 [DEBUG] [Thread-125843] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T10:11:54.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:11:54.400 [DEBUG] [Thread-125843] [transport.py] [_log()] userauth is OK
2025-12-31T10:11:54.401 [DEBUG] [Thread-125843] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:11:54.401 [DEBUG] [Thread-125843] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:11:54.401 [DEBUG] [Thread-125843] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T10:11:54.401 [DEBUG] [Thread-125843] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:11:54.420 [INFO] [Thread-125843] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:11:54.421 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T10:11:54.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:11:55.237 [DEBUG] [Thread-125843] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:11:55.238 [DEBUG] [Thread-125843] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:11:55.285 [DEBUG] [Thread-125843] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:11:55.286 [DEBUG] [Thread-125843] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:11:55.294 [DEBUG] [Thread-125843] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:11:55.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:11:55.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T10:11:55.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T10:11:55.321 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:11:55.321 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:11:55.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:11:55.329 [DEBUG] [Thread-125843] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:12:04.291 [DEBUG] [Thread-125845 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:12:05.602 [DEBUG] [Thread-125846 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:12:19.352 [DEBUG] [Thread-125847 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:12:22.935 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:12:22.936 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:12:25.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T10:12:25.351 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T10:12:25.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T10:12:26.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 10, 12, 15), 32.83, 10.69, 0.0, 14.56, 25.03, 0, 0, 0, 2, 0, 0),)
2025-12-31T10:12:26.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 10:12:15
2025-12-31T10:12:26.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T10:12:26.333 [DEBUG] [Thread-125848] [transport.py] [_log()] starting thread (client mode): 0xb6b29f00
2025-12-31T10:12:26.333 [DEBUG] [Thread-125848] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:12:26.353 [DEBUG] [Thread-125848] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T10:12:26.353 [INFO] [Thread-125848] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T10:12:26.357 [DEBUG] [Thread-125848] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:12:26.357 [DEBUG] [Thread-125848] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T10:12:26.357 [DEBUG] [Thread-125848] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:12:26.357 [DEBUG] [Thread-125848] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:12:26.357 [DEBUG] [Thread-125848] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:12:26.357 [DEBUG] [Thread-125848] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:12:26.357 [DEBUG] [Thread-125848] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:12:26.357 [DEBUG] [Thread-125848] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:12:26.357 [DEBUG] [Thread-125848] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:12:26.357 [DEBUG] [Thread-125848] [transport.py] [_log()] client lang: <none>
2025-12-31T10:12:26.357 [DEBUG] [Thread-125848] [transport.py] [_log()] server lang: <none>
2025-12-31T10:12:26.357 [DEBUG] [Thread-125848] [transport.py] [_log()] kex follows: False
2025-12-31T10:12:26.357 [DEBUG] [Thread-125848] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:12:26.357 [DEBUG] [Thread-125848] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:12:26.357 [DEBUG] [Thread-125848] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:12:26.357 [DEBUG] [Thread-125848] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:12:26.357 [DEBUG] [Thread-125848] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:12:26.357 [DEBUG] [Thread-125848] [transport.py] [_log()] Compression: none
2025-12-31T10:12:26.357 [DEBUG] [Thread-125848] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:12:26.373 [DEBUG] [Thread-125848] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:12:26.373 [DEBUG] [Thread-125848] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:12:26.373 [DEBUG] [Thread-125848] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T10:12:26.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T10:12:26.374 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:12:26.374 [DEBUG] [Thread-125848] [transport.py] [_log()] userauth is OK
2025-12-31T10:12:26.374 [DEBUG] [Thread-125848] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:12:26.374 [DEBUG] [Thread-125848] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:12:26.374 [DEBUG] [Thread-125848] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T10:12:26.374 [DEBUG] [Thread-125848] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:12:26.384 [INFO] [Thread-125848] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:12:26.384 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:12:27.114 [DEBUG] [Thread-125848] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:12:27.114 [DEBUG] [Thread-125848] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:12:27.115 [DEBUG] [Thread-125848] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T10:12:27.155 [DEBUG] [Thread-125848] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:12:27.155 [DEBUG] [Thread-125848] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:12:27.158 [DEBUG] [Thread-125848] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:12:27.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:12:27.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T10:12:27.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T10:12:27.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T10:12:27.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:12:27.182 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T10:12:27.182 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:12:27.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:12:27.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T10:12:27.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.341463 -999.00  +24.40  10.58     17   -2.00 1 1 1 1 1   888    0 19.18 -332.75 ----- 12.6 10.6 279.1 14.8 31.4 -28.8 30.8 -26.0 28.8 -25.6 29.4 -26.0
2025-12-31T10:12:27.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T10:12:27.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T10:12:27.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.341463
2025-12-31T10:12:27.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T10:12:27.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T10:12:27.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T10:12:27.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T10:12:27.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T10:12:27.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T10:12:15', tmtdew=32.83, humidity=10.69, cloud=0.0, wind=14.56, temperature=25.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T08:11:42.403', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T10:12:27.185 [DEBUG] [Thread-125848] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:12:27.272 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T10:12:27.283 [DEBUG] [Thread-125851] [transport.py] [_log()] starting thread (client mode): 0xb6b6af20
2025-12-31T10:12:27.284 [DEBUG] [Thread-125851] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:12:27.299 [DEBUG] [Thread-125851] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T10:12:27.299 [INFO] [Thread-125851] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T10:12:27.306 [DEBUG] [Thread-125851] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:12:27.307 [DEBUG] [Thread-125851] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T10:12:27.307 [DEBUG] [Thread-125851] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:12:27.307 [DEBUG] [Thread-125851] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:12:27.307 [DEBUG] [Thread-125851] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:12:27.307 [DEBUG] [Thread-125851] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:12:27.307 [DEBUG] [Thread-125851] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:12:27.307 [DEBUG] [Thread-125851] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:12:27.307 [DEBUG] [Thread-125851] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:12:27.307 [DEBUG] [Thread-125851] [transport.py] [_log()] client lang: <none>
2025-12-31T10:12:27.307 [DEBUG] [Thread-125851] [transport.py] [_log()] server lang: <none>
2025-12-31T10:12:27.307 [DEBUG] [Thread-125851] [transport.py] [_log()] kex follows: False
2025-12-31T10:12:27.307 [DEBUG] [Thread-125851] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:12:27.307 [DEBUG] [Thread-125851] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:12:27.307 [DEBUG] [Thread-125851] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:12:27.307 [DEBUG] [Thread-125851] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:12:27.307 [DEBUG] [Thread-125851] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:12:27.307 [DEBUG] [Thread-125851] [transport.py] [_log()] Compression: none
2025-12-31T10:12:27.308 [DEBUG] [Thread-125851] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:12:27.365 [DEBUG] [Thread-125851] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:12:27.365 [DEBUG] [Thread-125851] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:12:27.366 [DEBUG] [Thread-125851] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T10:12:27.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T10:12:27.367 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:12:27.424 [DEBUG] [Thread-125851] [transport.py] [_log()] userauth is OK
2025-12-31T10:12:27.425 [DEBUG] [Thread-125851] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:12:27.425 [DEBUG] [Thread-125851] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:12:27.425 [DEBUG] [Thread-125851] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T10:12:27.425 [DEBUG] [Thread-125851] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:12:27.444 [INFO] [Thread-125851] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:12:27.444 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T10:12:27.446 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:12:28.260 [DEBUG] [Thread-125851] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:12:28.261 [DEBUG] [Thread-125851] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:12:28.309 [DEBUG] [Thread-125851] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:12:28.309 [DEBUG] [Thread-125851] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:12:28.319 [DEBUG] [Thread-125851] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:12:28.328 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:12:28.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T10:12:28.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T10:12:28.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:12:28.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:12:28.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:12:28.356 [DEBUG] [Thread-125851] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:12:34.388 [DEBUG] [Thread-125853 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:12:49.443 [DEBUG] [Thread-125854 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:12:58.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T10:12:58.378 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T10:12:58.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T10:12:59.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 10, 12, 47), 33.3, 10.59, 0.0, 21.88, 25.44, 0, 0, 0, 2, 0, 0),)
2025-12-31T10:12:59.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 10:12:47
2025-12-31T10:12:59.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T10:12:59.343 [DEBUG] [Thread-125855] [transport.py] [_log()] starting thread (client mode): 0xb955bbe0
2025-12-31T10:12:59.343 [DEBUG] [Thread-125855] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:12:59.364 [DEBUG] [Thread-125855] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T10:12:59.364 [INFO] [Thread-125855] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T10:12:59.367 [DEBUG] [Thread-125855] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:12:59.367 [DEBUG] [Thread-125855] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T10:12:59.367 [DEBUG] [Thread-125855] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:12:59.367 [DEBUG] [Thread-125855] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:12:59.367 [DEBUG] [Thread-125855] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:12:59.367 [DEBUG] [Thread-125855] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:12:59.367 [DEBUG] [Thread-125855] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:12:59.367 [DEBUG] [Thread-125855] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:12:59.367 [DEBUG] [Thread-125855] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:12:59.367 [DEBUG] [Thread-125855] [transport.py] [_log()] client lang: <none>
2025-12-31T10:12:59.367 [DEBUG] [Thread-125855] [transport.py] [_log()] server lang: <none>
2025-12-31T10:12:59.368 [DEBUG] [Thread-125855] [transport.py] [_log()] kex follows: False
2025-12-31T10:12:59.368 [DEBUG] [Thread-125855] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:12:59.368 [DEBUG] [Thread-125855] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:12:59.368 [DEBUG] [Thread-125855] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:12:59.368 [DEBUG] [Thread-125855] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:12:59.368 [DEBUG] [Thread-125855] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:12:59.368 [DEBUG] [Thread-125855] [transport.py] [_log()] Compression: none
2025-12-31T10:12:59.368 [DEBUG] [Thread-125855] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:12:59.387 [DEBUG] [Thread-125855] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:12:59.387 [DEBUG] [Thread-125855] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:12:59.388 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T10:12:59.388 [DEBUG] [Thread-125855] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T10:12:59.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:12:59.429 [DEBUG] [Thread-125855] [transport.py] [_log()] userauth is OK
2025-12-31T10:12:59.430 [DEBUG] [Thread-125855] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:12:59.430 [DEBUG] [Thread-125855] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:12:59.430 [DEBUG] [Thread-125855] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T10:12:59.430 [DEBUG] [Thread-125855] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:12:59.463 [INFO] [Thread-125855] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:12:59.464 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:13:00.151 [DEBUG] [Thread-125855] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:13:00.151 [DEBUG] [Thread-125855] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:13:00.151 [DEBUG] [Thread-125855] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T10:13:00.192 [DEBUG] [Thread-125855] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:13:00.192 [DEBUG] [Thread-125855] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:13:00.193 [DEBUG] [Thread-125855] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:13:00.207 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:13:00.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T10:13:00.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T10:13:00.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T10:13:00.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:13:00.215 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T10:13:00.215 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:13:00.215 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:13:00.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T10:13:00.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.341810 -999.00  +24.80  15.78     17   -1.10 1 1 1 1 1   888    0 18.74 -349.57 ----- 14.0 15.8 275.8 18.4 31.4 -27.8 30.8 -26.0 29.0 -23.8 29.6 -25.5
2025-12-31T10:13:00.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T10:13:00.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T10:13:00.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.341810
2025-12-31T10:13:00.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T10:13:00.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T10:13:00.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T10:13:00.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T10:13:00.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T10:13:00.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T10:12:47', tmtdew=33.3, humidity=10.59, cloud=0.0, wind=21.88, temperature=25.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T08:12:12.384', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T10:13:00.216 [DEBUG] [Thread-125855] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:13:00.288 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T10:13:00.300 [DEBUG] [Thread-125858] [transport.py] [_log()] starting thread (client mode): 0xb6b6b7f0
2025-12-31T10:13:00.300 [DEBUG] [Thread-125858] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:13:00.315 [DEBUG] [Thread-125858] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T10:13:00.315 [INFO] [Thread-125858] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T10:13:00.322 [DEBUG] [Thread-125858] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:13:00.322 [DEBUG] [Thread-125858] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T10:13:00.323 [DEBUG] [Thread-125858] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:13:00.323 [DEBUG] [Thread-125858] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:13:00.323 [DEBUG] [Thread-125858] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:13:00.323 [DEBUG] [Thread-125858] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:13:00.323 [DEBUG] [Thread-125858] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:13:00.323 [DEBUG] [Thread-125858] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:13:00.323 [DEBUG] [Thread-125858] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:13:00.323 [DEBUG] [Thread-125858] [transport.py] [_log()] client lang: <none>
2025-12-31T10:13:00.323 [DEBUG] [Thread-125858] [transport.py] [_log()] server lang: <none>
2025-12-31T10:13:00.323 [DEBUG] [Thread-125858] [transport.py] [_log()] kex follows: False
2025-12-31T10:13:00.323 [DEBUG] [Thread-125858] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:13:00.323 [DEBUG] [Thread-125858] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:13:00.323 [DEBUG] [Thread-125858] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:13:00.323 [DEBUG] [Thread-125858] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:13:00.323 [DEBUG] [Thread-125858] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:13:00.323 [DEBUG] [Thread-125858] [transport.py] [_log()] Compression: none
2025-12-31T10:13:00.323 [DEBUG] [Thread-125858] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:13:00.379 [DEBUG] [Thread-125858] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:13:00.379 [DEBUG] [Thread-125858] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:13:00.379 [DEBUG] [Thread-125858] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T10:13:00.379 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T10:13:00.379 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:13:00.436 [DEBUG] [Thread-125858] [transport.py] [_log()] userauth is OK
2025-12-31T10:13:00.436 [DEBUG] [Thread-125858] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:13:00.436 [DEBUG] [Thread-125858] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:13:00.436 [DEBUG] [Thread-125858] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T10:13:00.436 [DEBUG] [Thread-125858] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:13:00.450 [INFO] [Thread-125858] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:13:00.450 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T10:13:00.450 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:13:01.285 [DEBUG] [Thread-125858] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:13:01.286 [DEBUG] [Thread-125858] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:13:01.333 [DEBUG] [Thread-125858] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:13:01.333 [DEBUG] [Thread-125858] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:13:01.341 [DEBUG] [Thread-125858] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:13:01.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:13:01.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T10:13:01.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T10:13:01.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:13:01.365 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:13:01.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:13:01.373 [DEBUG] [Thread-125858] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:13:04.473 [DEBUG] [Thread-125860 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:13:05.648 [DEBUG] [Thread-125861 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:13:19.513 [DEBUG] [Thread-125862 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:13:23.079 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:13:23.080 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:13:31.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T10:13:31.395 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T10:13:31.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T10:13:32.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 10, 13, 19), 33.25, 10.61, 0.0, 19.9, 25.36, 0, 0, 0, 2, 0, 0),)
2025-12-31T10:13:32.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 10:13:19
2025-12-31T10:13:32.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T10:13:32.368 [DEBUG] [Thread-125863] [transport.py] [_log()] starting thread (client mode): 0xb9559d80
2025-12-31T10:13:32.368 [DEBUG] [Thread-125863] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:13:32.389 [DEBUG] [Thread-125863] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T10:13:32.389 [INFO] [Thread-125863] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T10:13:32.393 [DEBUG] [Thread-125863] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:13:32.393 [DEBUG] [Thread-125863] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T10:13:32.393 [DEBUG] [Thread-125863] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:13:32.393 [DEBUG] [Thread-125863] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:13:32.393 [DEBUG] [Thread-125863] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:13:32.393 [DEBUG] [Thread-125863] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:13:32.393 [DEBUG] [Thread-125863] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:13:32.393 [DEBUG] [Thread-125863] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:13:32.393 [DEBUG] [Thread-125863] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:13:32.393 [DEBUG] [Thread-125863] [transport.py] [_log()] client lang: <none>
2025-12-31T10:13:32.393 [DEBUG] [Thread-125863] [transport.py] [_log()] server lang: <none>
2025-12-31T10:13:32.393 [DEBUG] [Thread-125863] [transport.py] [_log()] kex follows: False
2025-12-31T10:13:32.394 [DEBUG] [Thread-125863] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:13:32.394 [DEBUG] [Thread-125863] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:13:32.394 [DEBUG] [Thread-125863] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:13:32.394 [DEBUG] [Thread-125863] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:13:32.394 [DEBUG] [Thread-125863] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:13:32.394 [DEBUG] [Thread-125863] [transport.py] [_log()] Compression: none
2025-12-31T10:13:32.394 [DEBUG] [Thread-125863] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:13:32.412 [DEBUG] [Thread-125863] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:13:32.413 [DEBUG] [Thread-125863] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:13:32.414 [DEBUG] [Thread-125863] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T10:13:32.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T10:13:32.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:13:32.416 [DEBUG] [Thread-125863] [transport.py] [_log()] userauth is OK
2025-12-31T10:13:32.416 [DEBUG] [Thread-125863] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:13:32.417 [DEBUG] [Thread-125863] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:13:32.417 [DEBUG] [Thread-125863] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T10:13:32.417 [DEBUG] [Thread-125863] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:13:32.440 [INFO] [Thread-125863] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:13:32.442 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:13:33.162 [DEBUG] [Thread-125863] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:13:33.162 [DEBUG] [Thread-125863] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:13:33.163 [DEBUG] [Thread-125863] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T10:13:33.203 [DEBUG] [Thread-125863] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:13:33.203 [DEBUG] [Thread-125863] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:13:33.207 [DEBUG] [Thread-125863] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:13:33.219 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:13:33.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T10:13:33.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T10:13:33.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T10:13:33.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:13:33.232 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T10:13:33.232 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:13:33.232 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:13:33.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T10:13:33.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.342158 -999.00  +25.00  19.43     18   -0.50 1 1 1 1 1   888    0 18.34 -372.07 ----- 19.6 19.4 282.8 26.0 31.6 -28.0 30.9 -26.3 29.1 -25.2 29.7 -25.5
2025-12-31T10:13:33.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T10:13:33.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T10:13:33.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.342158
2025-12-31T10:13:33.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T10:13:33.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T10:13:33.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T10:13:33.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T10:13:33.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T10:13:33.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T10:13:19', tmtdew=33.25, humidity=10.61, cloud=0.0, wind=19.9, temperature=25.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T08:12:42.451', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T10:13:33.236 [DEBUG] [Thread-125863] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:13:33.319 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T10:13:33.330 [DEBUG] [Thread-125866] [transport.py] [_log()] starting thread (client mode): 0xb6b21180
2025-12-31T10:13:33.331 [DEBUG] [Thread-125866] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:13:33.345 [DEBUG] [Thread-125866] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T10:13:33.345 [INFO] [Thread-125866] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T10:13:33.353 [DEBUG] [Thread-125866] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:13:33.353 [DEBUG] [Thread-125866] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T10:13:33.353 [DEBUG] [Thread-125866] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:13:33.353 [DEBUG] [Thread-125866] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:13:33.353 [DEBUG] [Thread-125866] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:13:33.353 [DEBUG] [Thread-125866] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:13:33.353 [DEBUG] [Thread-125866] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:13:33.353 [DEBUG] [Thread-125866] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:13:33.354 [DEBUG] [Thread-125866] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:13:33.354 [DEBUG] [Thread-125866] [transport.py] [_log()] client lang: <none>
2025-12-31T10:13:33.354 [DEBUG] [Thread-125866] [transport.py] [_log()] server lang: <none>
2025-12-31T10:13:33.354 [DEBUG] [Thread-125866] [transport.py] [_log()] kex follows: False
2025-12-31T10:13:33.354 [DEBUG] [Thread-125866] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:13:33.354 [DEBUG] [Thread-125866] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:13:33.354 [DEBUG] [Thread-125866] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:13:33.354 [DEBUG] [Thread-125866] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:13:33.354 [DEBUG] [Thread-125866] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:13:33.354 [DEBUG] [Thread-125866] [transport.py] [_log()] Compression: none
2025-12-31T10:13:33.354 [DEBUG] [Thread-125866] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:13:33.413 [DEBUG] [Thread-125866] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:13:33.413 [DEBUG] [Thread-125866] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:13:33.414 [DEBUG] [Thread-125866] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T10:13:33.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T10:13:33.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:13:33.469 [DEBUG] [Thread-125866] [transport.py] [_log()] userauth is OK
2025-12-31T10:13:33.469 [DEBUG] [Thread-125866] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:13:33.469 [DEBUG] [Thread-125866] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:13:33.469 [DEBUG] [Thread-125866] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T10:13:33.469 [DEBUG] [Thread-125866] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:13:33.488 [INFO] [Thread-125866] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:13:33.489 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T10:13:33.489 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:13:34.322 [DEBUG] [Thread-125866] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:13:34.322 [DEBUG] [Thread-125866] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:13:34.370 [DEBUG] [Thread-125866] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:13:34.370 [DEBUG] [Thread-125866] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:13:34.379 [DEBUG] [Thread-125866] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:13:34.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:13:34.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-12-31T10:13:34.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-12-31T10:13:34.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:13:34.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:13:34.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:13:34.414 [DEBUG] [Thread-125866] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:13:34.544 [DEBUG] [Thread-125868 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:13:49.596 [DEBUG] [Thread-125869 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:14:04.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T10:14:04.437 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T10:14:04.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-12-31T10:14:04.633 [DEBUG] [Thread-125870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:14:05.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 10, 13, 51), 32.48, 11.19, 0.0, 20.87, 25.21, 0, 0, 0, 2, 0, 0),)
2025-12-31T10:14:05.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 10:13:51
2025-12-31T10:14:05.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T10:14:05.425 [DEBUG] [Thread-125871] [transport.py] [_log()] starting thread (client mode): 0xb9558190
2025-12-31T10:14:05.425 [DEBUG] [Thread-125871] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:14:05.446 [DEBUG] [Thread-125871] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T10:14:05.446 [INFO] [Thread-125871] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T10:14:05.449 [DEBUG] [Thread-125871] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:14:05.449 [DEBUG] [Thread-125871] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T10:14:05.449 [DEBUG] [Thread-125871] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:14:05.449 [DEBUG] [Thread-125871] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:14:05.449 [DEBUG] [Thread-125871] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:14:05.449 [DEBUG] [Thread-125871] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:14:05.449 [DEBUG] [Thread-125871] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:14:05.449 [DEBUG] [Thread-125871] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:14:05.449 [DEBUG] [Thread-125871] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:14:05.449 [DEBUG] [Thread-125871] [transport.py] [_log()] client lang: <none>
2025-12-31T10:14:05.449 [DEBUG] [Thread-125871] [transport.py] [_log()] server lang: <none>
2025-12-31T10:14:05.449 [DEBUG] [Thread-125871] [transport.py] [_log()] kex follows: False
2025-12-31T10:14:05.449 [DEBUG] [Thread-125871] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:14:05.449 [DEBUG] [Thread-125871] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:14:05.449 [DEBUG] [Thread-125871] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:14:05.449 [DEBUG] [Thread-125871] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:14:05.449 [DEBUG] [Thread-125871] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:14:05.449 [DEBUG] [Thread-125871] [transport.py] [_log()] Compression: none
2025-12-31T10:14:05.449 [DEBUG] [Thread-125871] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:14:05.466 [DEBUG] [Thread-125871] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:14:05.466 [DEBUG] [Thread-125871] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:14:05.467 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T10:14:05.467 [DEBUG] [Thread-125871] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T10:14:05.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:14:05.469 [DEBUG] [Thread-125871] [transport.py] [_log()] userauth is OK
2025-12-31T10:14:05.469 [DEBUG] [Thread-125871] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:14:05.469 [DEBUG] [Thread-125871] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:14:05.469 [DEBUG] [Thread-125871] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T10:14:05.469 [DEBUG] [Thread-125871] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:14:05.491 [INFO] [Thread-125871] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:14:05.491 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:14:05.711 [DEBUG] [Thread-125873 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:14:06.108 [DEBUG] [Thread-125871] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:14:06.108 [DEBUG] [Thread-125871] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:14:06.109 [DEBUG] [Thread-125871] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T10:14:06.150 [DEBUG] [Thread-125871] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:14:06.150 [DEBUG] [Thread-125871] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:14:06.153 [DEBUG] [Thread-125871] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:14:06.164 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:14:06.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T10:14:06.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T10:14:06.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T10:14:06.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:14:06.174 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T10:14:06.174 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:14:06.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:14:06.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T10:14:06.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.342852 -999.00  +24.70  20.23     18   -1.00 1 1 1 1 1   888    0 16.97 -404.09 ----- 16.7 20.2 284.0 27.7 31.4 -28.8 30.8 -26.5 28.9 -27.5 29.6 -26.0
2025-12-31T10:14:06.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T10:14:06.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T10:14:06.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.342852
2025-12-31T10:14:06.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T10:14:06.176 [DEBUG] [Thread-125871] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:14:06.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T10:14:06.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T10:14:06.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T10:14:06.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T10:14:06.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T10:13:51', tmtdew=32.48, humidity=11.19, cloud=0.0, wind=20.87, temperature=25.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T08:13:42.413', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T10:14:06.278 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T10:14:06.292 [DEBUG] [Thread-125875] [transport.py] [_log()] starting thread (client mode): 0xb6b4aef0
2025-12-31T10:14:06.292 [DEBUG] [Thread-125875] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:14:06.308 [DEBUG] [Thread-125875] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T10:14:06.308 [INFO] [Thread-125875] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T10:14:06.315 [DEBUG] [Thread-125875] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:14:06.315 [DEBUG] [Thread-125875] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T10:14:06.315 [DEBUG] [Thread-125875] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:14:06.315 [DEBUG] [Thread-125875] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:14:06.315 [DEBUG] [Thread-125875] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:14:06.315 [DEBUG] [Thread-125875] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:14:06.315 [DEBUG] [Thread-125875] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:14:06.316 [DEBUG] [Thread-125875] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:14:06.316 [DEBUG] [Thread-125875] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:14:06.316 [DEBUG] [Thread-125875] [transport.py] [_log()] client lang: <none>
2025-12-31T10:14:06.316 [DEBUG] [Thread-125875] [transport.py] [_log()] server lang: <none>
2025-12-31T10:14:06.316 [DEBUG] [Thread-125875] [transport.py] [_log()] kex follows: False
2025-12-31T10:14:06.316 [DEBUG] [Thread-125875] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:14:06.316 [DEBUG] [Thread-125875] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:14:06.316 [DEBUG] [Thread-125875] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:14:06.316 [DEBUG] [Thread-125875] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:14:06.316 [DEBUG] [Thread-125875] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:14:06.316 [DEBUG] [Thread-125875] [transport.py] [_log()] Compression: none
2025-12-31T10:14:06.316 [DEBUG] [Thread-125875] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:14:06.372 [DEBUG] [Thread-125875] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:14:06.372 [DEBUG] [Thread-125875] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:14:06.373 [DEBUG] [Thread-125875] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T10:14:06.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T10:14:06.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:14:06.429 [DEBUG] [Thread-125875] [transport.py] [_log()] userauth is OK
2025-12-31T10:14:06.429 [DEBUG] [Thread-125875] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:14:06.430 [DEBUG] [Thread-125875] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:14:06.430 [DEBUG] [Thread-125875] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T10:14:06.430 [DEBUG] [Thread-125875] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:14:06.452 [INFO] [Thread-125875] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:14:06.452 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T10:14:06.453 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:14:07.316 [DEBUG] [Thread-125875] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:14:07.317 [DEBUG] [Thread-125875] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:14:07.367 [DEBUG] [Thread-125875] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:14:07.368 [DEBUG] [Thread-125875] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:14:07.380 [DEBUG] [Thread-125875] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:14:07.390 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:14:07.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T10:14:07.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T10:14:07.407 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:14:07.408 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:14:07.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:14:07.416 [DEBUG] [Thread-125875] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:14:19.663 [DEBUG] [Thread-125877 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:14:23.218 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:14:23.219 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:14:34.703 [DEBUG] [Thread-125878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:14:37.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T10:14:37.425 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T10:14:37.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T10:14:38.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 10, 14, 23), 31.84, 11.67, 0.0, 21.65, 25.16, 0, 0, 0, 2, 0, 0),)
2025-12-31T10:14:38.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 10:14:23
2025-12-31T10:14:38.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T10:14:38.386 [DEBUG] [Thread-125879] [transport.py] [_log()] starting thread (client mode): 0xb6b18640
2025-12-31T10:14:38.386 [DEBUG] [Thread-125879] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:14:38.409 [DEBUG] [Thread-125879] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T10:14:38.409 [INFO] [Thread-125879] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T10:14:38.410 [DEBUG] [Thread-125879] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:14:38.410 [DEBUG] [Thread-125879] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T10:14:38.410 [DEBUG] [Thread-125879] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:14:38.410 [DEBUG] [Thread-125879] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:14:38.410 [DEBUG] [Thread-125879] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:14:38.410 [DEBUG] [Thread-125879] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:14:38.410 [DEBUG] [Thread-125879] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:14:38.410 [DEBUG] [Thread-125879] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:14:38.410 [DEBUG] [Thread-125879] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:14:38.410 [DEBUG] [Thread-125879] [transport.py] [_log()] client lang: <none>
2025-12-31T10:14:38.410 [DEBUG] [Thread-125879] [transport.py] [_log()] server lang: <none>
2025-12-31T10:14:38.410 [DEBUG] [Thread-125879] [transport.py] [_log()] kex follows: False
2025-12-31T10:14:38.410 [DEBUG] [Thread-125879] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:14:38.410 [DEBUG] [Thread-125879] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:14:38.410 [DEBUG] [Thread-125879] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:14:38.410 [DEBUG] [Thread-125879] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:14:38.410 [DEBUG] [Thread-125879] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:14:38.411 [DEBUG] [Thread-125879] [transport.py] [_log()] Compression: none
2025-12-31T10:14:38.411 [DEBUG] [Thread-125879] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:14:38.422 [DEBUG] [Thread-125879] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:14:38.423 [DEBUG] [Thread-125879] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:14:38.423 [DEBUG] [Thread-125879] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T10:14:38.424 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T10:14:38.424 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:14:38.426 [DEBUG] [Thread-125879] [transport.py] [_log()] userauth is OK
2025-12-31T10:14:38.426 [DEBUG] [Thread-125879] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:14:38.426 [DEBUG] [Thread-125879] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:14:38.426 [DEBUG] [Thread-125879] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T10:14:38.426 [DEBUG] [Thread-125879] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:14:38.444 [INFO] [Thread-125879] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:14:38.445 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:14:39.042 [DEBUG] [Thread-125879] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:14:39.042 [DEBUG] [Thread-125879] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:14:39.042 [DEBUG] [Thread-125879] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T10:14:39.084 [DEBUG] [Thread-125879] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:14:39.084 [DEBUG] [Thread-125879] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:14:39.087 [DEBUG] [Thread-125879] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:14:39.102 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:14:39.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T10:14:39.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T10:14:39.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T10:14:39.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:14:39.117 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T10:14:39.117 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:14:39.117 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:14:39.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T10:14:39.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.343200 -999.00  +24.70  16.13     18   -0.70 1 1 1 1 1   888    0 16.76 -389.28 ----- 8.2 16.1 271.4 23.3 31.4 -27.9 30.7 -28.0 29.1 -25.5 29.7 -25.6
2025-12-31T10:14:39.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T10:14:39.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T10:14:39.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.343200
2025-12-31T10:14:39.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T10:14:39.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T10:14:39.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T10:14:39.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T10:14:39.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T10:14:39.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T10:14:23', tmtdew=31.84, humidity=11.67, cloud=0.0, wind=21.65, temperature=25.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T08:14:12.480', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T10:14:39.120 [DEBUG] [Thread-125879] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:14:39.203 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T10:14:39.214 [DEBUG] [Thread-125882] [transport.py] [_log()] starting thread (client mode): 0xb6b6b6a0
2025-12-31T10:14:39.215 [DEBUG] [Thread-125882] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:14:39.229 [DEBUG] [Thread-125882] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T10:14:39.229 [INFO] [Thread-125882] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T10:14:39.237 [DEBUG] [Thread-125882] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:14:39.237 [DEBUG] [Thread-125882] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T10:14:39.237 [DEBUG] [Thread-125882] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:14:39.237 [DEBUG] [Thread-125882] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:14:39.237 [DEBUG] [Thread-125882] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:14:39.237 [DEBUG] [Thread-125882] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:14:39.238 [DEBUG] [Thread-125882] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:14:39.238 [DEBUG] [Thread-125882] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:14:39.238 [DEBUG] [Thread-125882] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:14:39.238 [DEBUG] [Thread-125882] [transport.py] [_log()] client lang: <none>
2025-12-31T10:14:39.238 [DEBUG] [Thread-125882] [transport.py] [_log()] server lang: <none>
2025-12-31T10:14:39.238 [DEBUG] [Thread-125882] [transport.py] [_log()] kex follows: False
2025-12-31T10:14:39.238 [DEBUG] [Thread-125882] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:14:39.238 [DEBUG] [Thread-125882] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:14:39.238 [DEBUG] [Thread-125882] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:14:39.238 [DEBUG] [Thread-125882] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:14:39.238 [DEBUG] [Thread-125882] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:14:39.238 [DEBUG] [Thread-125882] [transport.py] [_log()] Compression: none
2025-12-31T10:14:39.238 [DEBUG] [Thread-125882] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:14:39.297 [DEBUG] [Thread-125882] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:14:39.297 [DEBUG] [Thread-125882] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:14:39.298 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T10:14:39.299 [DEBUG] [Thread-125882] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T10:14:39.299 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:14:39.353 [DEBUG] [Thread-125882] [transport.py] [_log()] userauth is OK
2025-12-31T10:14:39.353 [DEBUG] [Thread-125882] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:14:39.354 [DEBUG] [Thread-125882] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:14:39.354 [DEBUG] [Thread-125882] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T10:14:39.354 [DEBUG] [Thread-125882] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:14:39.372 [INFO] [Thread-125882] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:14:39.373 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T10:14:39.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:14:40.220 [DEBUG] [Thread-125882] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:14:40.220 [DEBUG] [Thread-125882] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:14:40.268 [DEBUG] [Thread-125882] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:14:40.269 [DEBUG] [Thread-125882] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:14:40.278 [DEBUG] [Thread-125882] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:14:40.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:14:40.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T10:14:40.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T10:14:40.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:14:40.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:14:40.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:14:40.316 [DEBUG] [Thread-125882] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:14:49.744 [DEBUG] [Thread-125884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:15:04.794 [DEBUG] [Thread-125885 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:15:05.777 [DEBUG] [Thread-125886 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:15:10.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T10:15:10.338 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T10:15:10.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T10:15:11.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 10, 14, 55), 30.64, 12.73, 0.0, 13.13, 24.56, 0, 0, 0, 2, 0, 0),)
2025-12-31T10:15:11.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 10:14:55
2025-12-31T10:15:11.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T10:15:11.288 [DEBUG] [Thread-125887] [transport.py] [_log()] starting thread (client mode): 0xb95d6350
2025-12-31T10:15:11.288 [DEBUG] [Thread-125887] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:15:11.307 [DEBUG] [Thread-125887] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T10:15:11.307 [INFO] [Thread-125887] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T10:15:11.310 [DEBUG] [Thread-125887] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:15:11.311 [DEBUG] [Thread-125887] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T10:15:11.311 [DEBUG] [Thread-125887] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:15:11.311 [DEBUG] [Thread-125887] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:15:11.311 [DEBUG] [Thread-125887] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:15:11.311 [DEBUG] [Thread-125887] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:15:11.311 [DEBUG] [Thread-125887] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:15:11.311 [DEBUG] [Thread-125887] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:15:11.311 [DEBUG] [Thread-125887] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:15:11.311 [DEBUG] [Thread-125887] [transport.py] [_log()] client lang: <none>
2025-12-31T10:15:11.311 [DEBUG] [Thread-125887] [transport.py] [_log()] server lang: <none>
2025-12-31T10:15:11.311 [DEBUG] [Thread-125887] [transport.py] [_log()] kex follows: False
2025-12-31T10:15:11.311 [DEBUG] [Thread-125887] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:15:11.311 [DEBUG] [Thread-125887] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:15:11.311 [DEBUG] [Thread-125887] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:15:11.311 [DEBUG] [Thread-125887] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:15:11.311 [DEBUG] [Thread-125887] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:15:11.311 [DEBUG] [Thread-125887] [transport.py] [_log()] Compression: none
2025-12-31T10:15:11.311 [DEBUG] [Thread-125887] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:15:11.324 [DEBUG] [Thread-125887] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:15:11.324 [DEBUG] [Thread-125887] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:15:11.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T10:15:11.325 [DEBUG] [Thread-125887] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T10:15:11.326 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:15:11.327 [DEBUG] [Thread-125887] [transport.py] [_log()] userauth is OK
2025-12-31T10:15:11.327 [DEBUG] [Thread-125887] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:15:11.327 [DEBUG] [Thread-125887] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:15:11.327 [DEBUG] [Thread-125887] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T10:15:11.328 [DEBUG] [Thread-125887] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:15:11.352 [INFO] [Thread-125887] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:15:11.353 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:15:14.275 [DEBUG] [Thread-125887] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:15:14.275 [DEBUG] [Thread-125887] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:15:14.276 [DEBUG] [Thread-125887] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T10:15:14.316 [DEBUG] [Thread-125887] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:15:14.316 [DEBUG] [Thread-125887] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:15:14.320 [DEBUG] [Thread-125887] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:15:14.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:15:14.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T10:15:14.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T10:15:14.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T10:15:14.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:15:14.344 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T10:15:14.344 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:15:14.344 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:15:14.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T10:15:14.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.343547 -999.00  +24.50  12.43     18   -0.80 1 1 1 1 1   888    0 15.53 -428.05 ----- 15.3 12.4 259.6 19.9 31.2 -30.3 30.7 -27.3 28.8 -30.2 29.4 -28.7
2025-12-31T10:15:14.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T10:15:14.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T10:15:14.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.343547
2025-12-31T10:15:14.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T10:15:14.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T10:15:14.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T10:15:14.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T10:15:14.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T10:15:14.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T10:14:55', tmtdew=30.64, humidity=12.73, cloud=0.0, wind=13.13, temperature=24.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T08:14:42.461', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T10:15:14.346 [DEBUG] [Thread-125887] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:15:14.430 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T10:15:14.442 [DEBUG] [Thread-125890] [transport.py] [_log()] starting thread (client mode): 0xb6be5ff0
2025-12-31T10:15:14.442 [DEBUG] [Thread-125890] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:15:14.456 [DEBUG] [Thread-125890] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T10:15:14.456 [INFO] [Thread-125890] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T10:15:14.464 [DEBUG] [Thread-125890] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:15:14.464 [DEBUG] [Thread-125890] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T10:15:14.464 [DEBUG] [Thread-125890] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:15:14.464 [DEBUG] [Thread-125890] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:15:14.464 [DEBUG] [Thread-125890] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:15:14.464 [DEBUG] [Thread-125890] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:15:14.465 [DEBUG] [Thread-125890] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:15:14.465 [DEBUG] [Thread-125890] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:15:14.465 [DEBUG] [Thread-125890] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:15:14.465 [DEBUG] [Thread-125890] [transport.py] [_log()] client lang: <none>
2025-12-31T10:15:14.465 [DEBUG] [Thread-125890] [transport.py] [_log()] server lang: <none>
2025-12-31T10:15:14.465 [DEBUG] [Thread-125890] [transport.py] [_log()] kex follows: False
2025-12-31T10:15:14.465 [DEBUG] [Thread-125890] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:15:14.465 [DEBUG] [Thread-125890] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:15:14.465 [DEBUG] [Thread-125890] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:15:14.465 [DEBUG] [Thread-125890] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:15:14.465 [DEBUG] [Thread-125890] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:15:14.465 [DEBUG] [Thread-125890] [transport.py] [_log()] Compression: none
2025-12-31T10:15:14.465 [DEBUG] [Thread-125890] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:15:14.521 [DEBUG] [Thread-125890] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:15:14.522 [DEBUG] [Thread-125890] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:15:14.522 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T10:15:14.523 [DEBUG] [Thread-125890] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T10:15:14.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:15:14.577 [DEBUG] [Thread-125890] [transport.py] [_log()] userauth is OK
2025-12-31T10:15:14.577 [DEBUG] [Thread-125890] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:15:14.578 [DEBUG] [Thread-125890] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:15:14.578 [DEBUG] [Thread-125890] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T10:15:14.578 [DEBUG] [Thread-125890] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:15:14.597 [INFO] [Thread-125890] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:15:14.597 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T10:15:14.598 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:15:15.433 [DEBUG] [Thread-125890] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:15:15.433 [DEBUG] [Thread-125890] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:15:15.480 [DEBUG] [Thread-125890] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:15:15.480 [DEBUG] [Thread-125890] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:15:15.489 [DEBUG] [Thread-125890] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:15:15.498 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:15:15.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-12-31T10:15:15.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T10:15:15.515 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:15:15.515 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:15:15.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:15:15.523 [DEBUG] [Thread-125890] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:15:19.830 [DEBUG] [Thread-125892 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:15:23.359 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:15:23.360 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:15:34.883 [DEBUG] [Thread-125893 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:15:45.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T10:15:45.546 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T10:15:45.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T10:15:46.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 10, 15, 27), 30.95, 12.46, 0.0, 14.75, 24.6, 0, 0, 0, 2, 0, 0),)
2025-12-31T10:15:46.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 10:15:27
2025-12-31T10:15:46.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T10:15:46.514 [DEBUG] [Thread-125894] [transport.py] [_log()] starting thread (client mode): 0xb6b21ae0
2025-12-31T10:15:46.515 [DEBUG] [Thread-125894] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:15:46.534 [DEBUG] [Thread-125894] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T10:15:46.535 [INFO] [Thread-125894] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T10:15:46.538 [DEBUG] [Thread-125894] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:15:46.538 [DEBUG] [Thread-125894] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T10:15:46.538 [DEBUG] [Thread-125894] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:15:46.538 [DEBUG] [Thread-125894] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:15:46.538 [DEBUG] [Thread-125894] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:15:46.538 [DEBUG] [Thread-125894] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:15:46.538 [DEBUG] [Thread-125894] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:15:46.538 [DEBUG] [Thread-125894] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:15:46.539 [DEBUG] [Thread-125894] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:15:46.539 [DEBUG] [Thread-125894] [transport.py] [_log()] client lang: <none>
2025-12-31T10:15:46.539 [DEBUG] [Thread-125894] [transport.py] [_log()] server lang: <none>
2025-12-31T10:15:46.539 [DEBUG] [Thread-125894] [transport.py] [_log()] kex follows: False
2025-12-31T10:15:46.539 [DEBUG] [Thread-125894] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:15:46.539 [DEBUG] [Thread-125894] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:15:46.539 [DEBUG] [Thread-125894] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:15:46.539 [DEBUG] [Thread-125894] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:15:46.539 [DEBUG] [Thread-125894] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:15:46.539 [DEBUG] [Thread-125894] [transport.py] [_log()] Compression: none
2025-12-31T10:15:46.539 [DEBUG] [Thread-125894] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:15:46.557 [DEBUG] [Thread-125894] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:15:46.558 [DEBUG] [Thread-125894] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:15:46.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T10:15:46.560 [DEBUG] [Thread-125894] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T10:15:46.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:15:46.562 [DEBUG] [Thread-125894] [transport.py] [_log()] userauth is OK
2025-12-31T10:15:46.562 [DEBUG] [Thread-125894] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:15:46.563 [DEBUG] [Thread-125894] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:15:46.563 [DEBUG] [Thread-125894] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T10:15:46.563 [DEBUG] [Thread-125894] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:15:46.579 [INFO] [Thread-125894] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:15:46.579 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:15:47.223 [DEBUG] [Thread-125894] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:15:47.223 [DEBUG] [Thread-125894] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:15:47.223 [DEBUG] [Thread-125894] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T10:15:47.264 [DEBUG] [Thread-125894] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:15:47.264 [DEBUG] [Thread-125894] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:15:47.268 [DEBUG] [Thread-125894] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:15:47.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:15:47.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T10:15:47.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T10:15:47.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T10:15:47.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:15:47.293 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T10:15:47.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:15:47.294 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:15:47.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T10:15:47.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.343894 -999.00  +24.50  13.46     18   -0.70 1 1 1 1 1   888    0 16.03 -411.22 ----- 12.8 13.5 274.2 18.3 31.3 -27.7 30.8 -25.7 29.0 -26.2 29.5 -25.9
2025-12-31T10:15:47.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T10:15:47.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T10:15:47.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.343894
2025-12-31T10:15:47.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T10:15:47.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T10:15:47.296 [DEBUG] [Thread-125894] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:15:47.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T10:15:47.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T10:15:47.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T10:15:47.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T10:15:27', tmtdew=30.95, humidity=12.46, cloud=0.0, wind=14.75, temperature=24.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T08:15:12.442', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T10:15:47.370 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T10:15:47.382 [DEBUG] [Thread-125897] [transport.py] [_log()] starting thread (client mode): 0xb6be70a0
2025-12-31T10:15:47.382 [DEBUG] [Thread-125897] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:15:47.396 [DEBUG] [Thread-125897] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T10:15:47.396 [INFO] [Thread-125897] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T10:15:47.404 [DEBUG] [Thread-125897] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:15:47.404 [DEBUG] [Thread-125897] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T10:15:47.404 [DEBUG] [Thread-125897] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:15:47.404 [DEBUG] [Thread-125897] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:15:47.404 [DEBUG] [Thread-125897] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:15:47.404 [DEBUG] [Thread-125897] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:15:47.404 [DEBUG] [Thread-125897] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:15:47.404 [DEBUG] [Thread-125897] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:15:47.404 [DEBUG] [Thread-125897] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:15:47.404 [DEBUG] [Thread-125897] [transport.py] [_log()] client lang: <none>
2025-12-31T10:15:47.404 [DEBUG] [Thread-125897] [transport.py] [_log()] server lang: <none>
2025-12-31T10:15:47.404 [DEBUG] [Thread-125897] [transport.py] [_log()] kex follows: False
2025-12-31T10:15:47.404 [DEBUG] [Thread-125897] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:15:47.404 [DEBUG] [Thread-125897] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:15:47.404 [DEBUG] [Thread-125897] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:15:47.405 [DEBUG] [Thread-125897] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:15:47.405 [DEBUG] [Thread-125897] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:15:47.405 [DEBUG] [Thread-125897] [transport.py] [_log()] Compression: none
2025-12-31T10:15:47.405 [DEBUG] [Thread-125897] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:15:47.462 [DEBUG] [Thread-125897] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:15:47.463 [DEBUG] [Thread-125897] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:15:47.464 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T10:15:47.464 [DEBUG] [Thread-125897] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T10:15:47.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:15:47.521 [DEBUG] [Thread-125897] [transport.py] [_log()] userauth is OK
2025-12-31T10:15:47.522 [DEBUG] [Thread-125897] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:15:47.522 [DEBUG] [Thread-125897] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:15:47.522 [DEBUG] [Thread-125897] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T10:15:47.522 [DEBUG] [Thread-125897] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:15:47.540 [INFO] [Thread-125897] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:15:47.541 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T10:15:47.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:15:48.372 [DEBUG] [Thread-125897] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:15:48.372 [DEBUG] [Thread-125897] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:15:48.420 [DEBUG] [Thread-125897] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:15:48.420 [DEBUG] [Thread-125897] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:15:48.429 [DEBUG] [Thread-125897] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:15:48.439 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:15:48.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T10:15:48.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-12-31T10:15:48.457 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:15:48.457 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:15:48.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:15:48.466 [DEBUG] [Thread-125897] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:15:49.919 [DEBUG] [Thread-125899 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:16:04.971 [DEBUG] [Thread-125900 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:16:05.839 [DEBUG] [Thread-125901 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:16:18.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T10:16:18.488 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T10:16:18.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T10:16:19.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 10, 15, 59), 33.79, 10.23, 0.0, 18.7, 25.15, 0, 0, 0, 2, 0, 0),)
2025-12-31T10:16:19.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 10:15:59
2025-12-31T10:16:19.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T10:16:19.514 [DEBUG] [Thread-125902] [transport.py] [_log()] starting thread (client mode): 0xb6b6b7f0
2025-12-31T10:16:19.514 [DEBUG] [Thread-125902] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:16:19.535 [DEBUG] [Thread-125902] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T10:16:19.535 [INFO] [Thread-125902] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T10:16:19.537 [DEBUG] [Thread-125902] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:16:19.537 [DEBUG] [Thread-125902] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T10:16:19.537 [DEBUG] [Thread-125902] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:16:19.537 [DEBUG] [Thread-125902] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:16:19.537 [DEBUG] [Thread-125902] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:16:19.537 [DEBUG] [Thread-125902] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:16:19.537 [DEBUG] [Thread-125902] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:16:19.537 [DEBUG] [Thread-125902] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:16:19.537 [DEBUG] [Thread-125902] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:16:19.537 [DEBUG] [Thread-125902] [transport.py] [_log()] client lang: <none>
2025-12-31T10:16:19.537 [DEBUG] [Thread-125902] [transport.py] [_log()] server lang: <none>
2025-12-31T10:16:19.537 [DEBUG] [Thread-125902] [transport.py] [_log()] kex follows: False
2025-12-31T10:16:19.537 [DEBUG] [Thread-125902] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:16:19.537 [DEBUG] [Thread-125902] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:16:19.537 [DEBUG] [Thread-125902] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:16:19.537 [DEBUG] [Thread-125902] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:16:19.537 [DEBUG] [Thread-125902] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:16:19.537 [DEBUG] [Thread-125902] [transport.py] [_log()] Compression: none
2025-12-31T10:16:19.537 [DEBUG] [Thread-125902] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:16:19.548 [DEBUG] [Thread-125902] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:16:19.549 [DEBUG] [Thread-125902] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:16:19.549 [DEBUG] [Thread-125902] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T10:16:19.549 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T10:16:19.549 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:16:19.550 [DEBUG] [Thread-125902] [transport.py] [_log()] userauth is OK
2025-12-31T10:16:19.550 [DEBUG] [Thread-125902] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:16:19.550 [DEBUG] [Thread-125902] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:16:19.550 [DEBUG] [Thread-125902] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T10:16:19.550 [DEBUG] [Thread-125902] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:16:19.559 [INFO] [Thread-125902] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:16:19.559 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:16:20.001 [DEBUG] [Thread-125904 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:16:20.342 [DEBUG] [Thread-125902] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:16:20.342 [DEBUG] [Thread-125902] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:16:20.342 [DEBUG] [Thread-125902] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T10:16:20.383 [DEBUG] [Thread-125902] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:16:20.383 [DEBUG] [Thread-125902] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:16:20.385 [DEBUG] [Thread-125902] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:16:20.394 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:16:20.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T10:16:20.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T10:16:20.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T10:16:20.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:16:20.398 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T10:16:20.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:16:20.398 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:16:20.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T10:16:20.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.344241 -999.00  +24.70  15.07     18   -0.90 1 1 1 1 1   888    0 16.14 -402.94 ----- 14.3 15.1 278.8 18.8 31.5 -27.6 30.9 -26.3 29.1 -25.7 29.7 -25.0
2025-12-31T10:16:20.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T10:16:20.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T10:16:20.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.344241
2025-12-31T10:16:20.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T10:16:20.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T10:16:20.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T10:16:20.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T10:16:20.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T10:16:20.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T10:15:59', tmtdew=33.79, humidity=10.23, cloud=0.0, wind=18.7, temperature=25.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T08:15:42.422', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T10:16:20.399 [DEBUG] [Thread-125902] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:16:20.473 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T10:16:20.485 [DEBUG] [Thread-125906] [transport.py] [_log()] starting thread (client mode): 0xb9578a60
2025-12-31T10:16:20.485 [DEBUG] [Thread-125906] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:16:20.500 [DEBUG] [Thread-125906] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T10:16:20.500 [INFO] [Thread-125906] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T10:16:20.507 [DEBUG] [Thread-125906] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:16:20.507 [DEBUG] [Thread-125906] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T10:16:20.507 [DEBUG] [Thread-125906] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:16:20.507 [DEBUG] [Thread-125906] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:16:20.507 [DEBUG] [Thread-125906] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:16:20.507 [DEBUG] [Thread-125906] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:16:20.507 [DEBUG] [Thread-125906] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:16:20.507 [DEBUG] [Thread-125906] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:16:20.507 [DEBUG] [Thread-125906] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:16:20.508 [DEBUG] [Thread-125906] [transport.py] [_log()] client lang: <none>
2025-12-31T10:16:20.508 [DEBUG] [Thread-125906] [transport.py] [_log()] server lang: <none>
2025-12-31T10:16:20.508 [DEBUG] [Thread-125906] [transport.py] [_log()] kex follows: False
2025-12-31T10:16:20.508 [DEBUG] [Thread-125906] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:16:20.508 [DEBUG] [Thread-125906] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:16:20.508 [DEBUG] [Thread-125906] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:16:20.508 [DEBUG] [Thread-125906] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:16:20.508 [DEBUG] [Thread-125906] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:16:20.508 [DEBUG] [Thread-125906] [transport.py] [_log()] Compression: none
2025-12-31T10:16:20.508 [DEBUG] [Thread-125906] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:16:20.563 [DEBUG] [Thread-125906] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:16:20.563 [DEBUG] [Thread-125906] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:16:20.564 [DEBUG] [Thread-125906] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T10:16:20.564 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T10:16:20.564 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:16:20.620 [DEBUG] [Thread-125906] [transport.py] [_log()] userauth is OK
2025-12-31T10:16:20.621 [DEBUG] [Thread-125906] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:16:20.621 [DEBUG] [Thread-125906] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:16:20.621 [DEBUG] [Thread-125906] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T10:16:20.621 [DEBUG] [Thread-125906] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:16:20.638 [INFO] [Thread-125906] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:16:20.638 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T10:16:20.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:16:21.454 [DEBUG] [Thread-125906] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:16:21.454 [DEBUG] [Thread-125906] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:16:21.502 [DEBUG] [Thread-125906] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:16:21.502 [DEBUG] [Thread-125906] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:16:21.511 [DEBUG] [Thread-125906] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:16:21.520 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:16:21.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T10:16:21.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T10:16:21.539 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:16:21.539 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:16:21.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:16:21.548 [DEBUG] [Thread-125906] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:16:23.500 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:16:23.501 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:16:35.041 [DEBUG] [Thread-125908 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:16:50.099 [DEBUG] [Thread-125909 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:16:51.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T10:16:51.543 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T10:16:51.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T10:16:52.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 10, 16, 31), 33.7, 10.29, 0.0, 16.36, 25.21, 0, 0, 0, 2, 0, 0),)
2025-12-31T10:16:52.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 10:16:31
2025-12-31T10:16:52.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T10:16:52.522 [DEBUG] [Thread-125910] [transport.py] [_log()] starting thread (client mode): 0xb957a260
2025-12-31T10:16:52.522 [DEBUG] [Thread-125910] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:16:52.543 [DEBUG] [Thread-125910] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T10:16:52.543 [INFO] [Thread-125910] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T10:16:52.547 [DEBUG] [Thread-125910] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:16:52.547 [DEBUG] [Thread-125910] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T10:16:52.547 [DEBUG] [Thread-125910] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:16:52.547 [DEBUG] [Thread-125910] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:16:52.548 [DEBUG] [Thread-125910] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:16:52.548 [DEBUG] [Thread-125910] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:16:52.548 [DEBUG] [Thread-125910] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:16:52.548 [DEBUG] [Thread-125910] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:16:52.548 [DEBUG] [Thread-125910] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:16:52.548 [DEBUG] [Thread-125910] [transport.py] [_log()] client lang: <none>
2025-12-31T10:16:52.548 [DEBUG] [Thread-125910] [transport.py] [_log()] server lang: <none>
2025-12-31T10:16:52.548 [DEBUG] [Thread-125910] [transport.py] [_log()] kex follows: False
2025-12-31T10:16:52.548 [DEBUG] [Thread-125910] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:16:52.548 [DEBUG] [Thread-125910] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:16:52.548 [DEBUG] [Thread-125910] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:16:52.548 [DEBUG] [Thread-125910] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:16:52.549 [DEBUG] [Thread-125910] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:16:52.549 [DEBUG] [Thread-125910] [transport.py] [_log()] Compression: none
2025-12-31T10:16:52.549 [DEBUG] [Thread-125910] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:16:52.569 [DEBUG] [Thread-125910] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:16:52.570 [DEBUG] [Thread-125910] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:16:52.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T10:16:52.571 [DEBUG] [Thread-125910] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T10:16:52.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:16:52.574 [DEBUG] [Thread-125910] [transport.py] [_log()] userauth is OK
2025-12-31T10:16:52.574 [DEBUG] [Thread-125910] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:16:52.574 [DEBUG] [Thread-125910] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:16:52.574 [DEBUG] [Thread-125910] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T10:16:52.574 [DEBUG] [Thread-125910] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:16:52.598 [INFO] [Thread-125910] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:16:52.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:16:53.224 [DEBUG] [Thread-125910] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:16:53.224 [DEBUG] [Thread-125910] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:16:53.224 [DEBUG] [Thread-125910] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T10:16:53.265 [DEBUG] [Thread-125910] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:16:53.266 [DEBUG] [Thread-125910] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:16:53.269 [DEBUG] [Thread-125910] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:16:53.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:16:53.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T10:16:53.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T10:16:53.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T10:16:53.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:16:53.295 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T10:16:53.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:16:53.296 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:16:53.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T10:16:53.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.344588 -999.00  +24.50  13.86     18   -1.10 1 1 1 1 1   888    0 15.22 -427.90 ----- 15.5 13.9 290.8 16.7 31.4 -28.8 30.9 -26.4 29.0 -26.0 29.6 -26.7
2025-12-31T10:16:53.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T10:16:53.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T10:16:53.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.344588
2025-12-31T10:16:53.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T10:16:53.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T10:16:53.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T10:16:53.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T10:16:53.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T10:16:53.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T10:16:31', tmtdew=33.7, humidity=10.29, cloud=0.0, wind=16.36, temperature=25.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T08:16:12.403', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T10:16:53.298 [DEBUG] [Thread-125910] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:16:53.382 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T10:16:53.393 [DEBUG] [Thread-125913] [transport.py] [_log()] starting thread (client mode): 0xb6b1be20
2025-12-31T10:16:53.393 [DEBUG] [Thread-125913] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:16:53.408 [DEBUG] [Thread-125913] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T10:16:53.408 [INFO] [Thread-125913] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T10:16:53.415 [DEBUG] [Thread-125913] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:16:53.416 [DEBUG] [Thread-125913] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T10:16:53.416 [DEBUG] [Thread-125913] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:16:53.416 [DEBUG] [Thread-125913] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:16:53.416 [DEBUG] [Thread-125913] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:16:53.416 [DEBUG] [Thread-125913] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:16:53.416 [DEBUG] [Thread-125913] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:16:53.416 [DEBUG] [Thread-125913] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:16:53.416 [DEBUG] [Thread-125913] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:16:53.416 [DEBUG] [Thread-125913] [transport.py] [_log()] client lang: <none>
2025-12-31T10:16:53.416 [DEBUG] [Thread-125913] [transport.py] [_log()] server lang: <none>
2025-12-31T10:16:53.416 [DEBUG] [Thread-125913] [transport.py] [_log()] kex follows: False
2025-12-31T10:16:53.416 [DEBUG] [Thread-125913] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:16:53.417 [DEBUG] [Thread-125913] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:16:53.417 [DEBUG] [Thread-125913] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:16:53.417 [DEBUG] [Thread-125913] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:16:53.417 [DEBUG] [Thread-125913] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:16:53.417 [DEBUG] [Thread-125913] [transport.py] [_log()] Compression: none
2025-12-31T10:16:53.417 [DEBUG] [Thread-125913] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:16:53.473 [DEBUG] [Thread-125913] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:16:53.473 [DEBUG] [Thread-125913] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:16:53.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T10:16:53.474 [DEBUG] [Thread-125913] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T10:16:53.475 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:16:53.529 [DEBUG] [Thread-125913] [transport.py] [_log()] userauth is OK
2025-12-31T10:16:53.530 [DEBUG] [Thread-125913] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:16:53.530 [DEBUG] [Thread-125913] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:16:53.530 [DEBUG] [Thread-125913] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T10:16:53.530 [DEBUG] [Thread-125913] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:16:53.554 [INFO] [Thread-125913] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:16:53.554 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T10:16:53.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:16:54.348 [DEBUG] [Thread-125913] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:16:54.348 [DEBUG] [Thread-125913] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:16:54.396 [DEBUG] [Thread-125913] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:16:54.396 [DEBUG] [Thread-125913] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:16:54.404 [DEBUG] [Thread-125913] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:16:54.412 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:16:54.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T10:16: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') -> 00000000
2025-12-31T10:16:54.427 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:16:54.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:16:54.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:16:54.435 [DEBUG] [Thread-125913] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:17:05.128 [DEBUG] [Thread-125915 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:17:05.897 [DEBUG] [Thread-125916 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:17:20.179 [DEBUG] [Thread-125917 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:17:23.639 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:17:23.640 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:17:24.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T10:17:24.442 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T10:17:24.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-12-31T10:17:25.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 10, 17, 3), 33.7, 10.27, 0.0, 15.7, 25.11, 0, 0, 0, 2, 0, 0),)
2025-12-31T10:17:25.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 10:17:03
2025-12-31T10:17:25.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T10:17:25.416 [DEBUG] [Thread-125918] [transport.py] [_log()] starting thread (client mode): 0xb6b6b490
2025-12-31T10:17:25.416 [DEBUG] [Thread-125918] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:17:25.437 [DEBUG] [Thread-125918] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T10:17:25.437 [INFO] [Thread-125918] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T10:17:25.441 [DEBUG] [Thread-125918] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:17:25.441 [DEBUG] [Thread-125918] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T10:17:25.441 [DEBUG] [Thread-125918] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:17:25.441 [DEBUG] [Thread-125918] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:17:25.441 [DEBUG] [Thread-125918] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:17:25.441 [DEBUG] [Thread-125918] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:17:25.441 [DEBUG] [Thread-125918] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:17:25.441 [DEBUG] [Thread-125918] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:17:25.441 [DEBUG] [Thread-125918] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:17:25.441 [DEBUG] [Thread-125918] [transport.py] [_log()] client lang: <none>
2025-12-31T10:17:25.441 [DEBUG] [Thread-125918] [transport.py] [_log()] server lang: <none>
2025-12-31T10:17:25.441 [DEBUG] [Thread-125918] [transport.py] [_log()] kex follows: False
2025-12-31T10:17:25.441 [DEBUG] [Thread-125918] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:17:25.441 [DEBUG] [Thread-125918] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:17:25.441 [DEBUG] [Thread-125918] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:17:25.441 [DEBUG] [Thread-125918] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:17:25.442 [DEBUG] [Thread-125918] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:17:25.442 [DEBUG] [Thread-125918] [transport.py] [_log()] Compression: none
2025-12-31T10:17:25.442 [DEBUG] [Thread-125918] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:17:25.461 [DEBUG] [Thread-125918] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:17:25.462 [DEBUG] [Thread-125918] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:17:25.462 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T10:17:25.462 [DEBUG] [Thread-125918] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T10:17:25.463 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:17:25.464 [DEBUG] [Thread-125918] [transport.py] [_log()] userauth is OK
2025-12-31T10:17:25.464 [DEBUG] [Thread-125918] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:17:25.464 [DEBUG] [Thread-125918] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:17:25.464 [DEBUG] [Thread-125918] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T10:17:25.465 [DEBUG] [Thread-125918] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:17:25.481 [INFO] [Thread-125918] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:17:25.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:17:26.327 [DEBUG] [Thread-125918] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:17:26.328 [DEBUG] [Thread-125918] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:17:26.328 [DEBUG] [Thread-125918] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T10:17:26.369 [DEBUG] [Thread-125918] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:17:26.369 [DEBUG] [Thread-125918] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:17:26.373 [DEBUG] [Thread-125918] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:17:26.384 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:17:26.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T10:17:26.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T10:17:26.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T10:17:26.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:17:26.396 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T10:17:26.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:17:26.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:17:26.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T10:17:26.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.344935 -999.00  +24.40  12.06     18   -1.20 1 1 1 1 1   888    0 16.14 -390.93 ----- 10.1 12.1 291.6 20.8 31.6 -27.3 31.0 -26.2 29.2 -24.5 29.8 -25.4
2025-12-31T10:17:26.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T10:17:26.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T10:17:26.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.344935
2025-12-31T10:17:26.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T10:17:26.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T10:17:26.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T10:17:26.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T10:17:26.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T10:17:26.398 [DEBUG] [Thread-125918] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:17:26.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T10:17:03', tmtdew=33.7, humidity=10.27, cloud=0.0, wind=15.7, temperature=25.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T08:16:42.384', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T10:17:26.482 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T10:17:26.494 [DEBUG] [Thread-125921] [transport.py] [_log()] starting thread (client mode): 0xb6be49a0
2025-12-31T10:17:26.494 [DEBUG] [Thread-125921] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:17:26.509 [DEBUG] [Thread-125921] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T10:17:26.509 [INFO] [Thread-125921] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T10:17:26.516 [DEBUG] [Thread-125921] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:17:26.516 [DEBUG] [Thread-125921] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T10:17:26.516 [DEBUG] [Thread-125921] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:17:26.517 [DEBUG] [Thread-125921] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:17:26.517 [DEBUG] [Thread-125921] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:17:26.517 [DEBUG] [Thread-125921] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:17:26.517 [DEBUG] [Thread-125921] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:17:26.517 [DEBUG] [Thread-125921] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:17:26.517 [DEBUG] [Thread-125921] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:17:26.517 [DEBUG] [Thread-125921] [transport.py] [_log()] client lang: <none>
2025-12-31T10:17:26.517 [DEBUG] [Thread-125921] [transport.py] [_log()] server lang: <none>
2025-12-31T10:17:26.517 [DEBUG] [Thread-125921] [transport.py] [_log()] kex follows: False
2025-12-31T10:17:26.517 [DEBUG] [Thread-125921] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:17:26.518 [DEBUG] [Thread-125921] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:17:26.518 [DEBUG] [Thread-125921] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:17:26.518 [DEBUG] [Thread-125921] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:17:26.518 [DEBUG] [Thread-125921] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:17:26.518 [DEBUG] [Thread-125921] [transport.py] [_log()] Compression: none
2025-12-31T10:17:26.518 [DEBUG] [Thread-125921] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:17:26.574 [DEBUG] [Thread-125921] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:17:26.574 [DEBUG] [Thread-125921] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:17:26.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T10:17:26.575 [DEBUG] [Thread-125921] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T10:17:26.576 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:17:26.630 [DEBUG] [Thread-125921] [transport.py] [_log()] userauth is OK
2025-12-31T10:17:26.630 [DEBUG] [Thread-125921] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:17:26.630 [DEBUG] [Thread-125921] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:17:26.630 [DEBUG] [Thread-125921] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T10:17:26.630 [DEBUG] [Thread-125921] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:17:26.648 [INFO] [Thread-125921] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:17:26.649 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T10:17:26.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:17:27.485 [DEBUG] [Thread-125921] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:17:27.485 [DEBUG] [Thread-125921] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:17:27.533 [DEBUG] [Thread-125921] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:17:27.533 [DEBUG] [Thread-125921] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:17:27.542 [DEBUG] [Thread-125921] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:17:27.551 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:17:27.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T10:17:27.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T10:17:27.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:17:27.568 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:17:27.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:17:27.576 [DEBUG] [Thread-125921] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:17:35.212 [DEBUG] [Thread-125923 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:17:50.255 [DEBUG] [Thread-125924 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:17:57.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T10:17:57.599 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T10:17:57.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T10:17:58.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 10, 17, 35), 33.45, 10.24, 0.0, 14.2, 25.46, 0, 0, 0, 2, 0, 0),)
2025-12-31T10:17:58.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 10:17:35
2025-12-31T10:17:58.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T10:17:58.581 [DEBUG] [Thread-125925] [transport.py] [_log()] starting thread (client mode): 0xb95d5ff0
2025-12-31T10:17:58.581 [DEBUG] [Thread-125925] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:17:58.602 [DEBUG] [Thread-125925] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T10:17:58.602 [INFO] [Thread-125925] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T10:17:58.605 [DEBUG] [Thread-125925] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:17:58.605 [DEBUG] [Thread-125925] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T10:17:58.605 [DEBUG] [Thread-125925] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:17:58.605 [DEBUG] [Thread-125925] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:17:58.605 [DEBUG] [Thread-125925] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:17:58.605 [DEBUG] [Thread-125925] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:17:58.605 [DEBUG] [Thread-125925] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:17:58.605 [DEBUG] [Thread-125925] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:17:58.605 [DEBUG] [Thread-125925] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:17:58.605 [DEBUG] [Thread-125925] [transport.py] [_log()] client lang: <none>
2025-12-31T10:17:58.606 [DEBUG] [Thread-125925] [transport.py] [_log()] server lang: <none>
2025-12-31T10:17:58.606 [DEBUG] [Thread-125925] [transport.py] [_log()] kex follows: False
2025-12-31T10:17:58.606 [DEBUG] [Thread-125925] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:17:58.606 [DEBUG] [Thread-125925] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:17:58.606 [DEBUG] [Thread-125925] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:17:58.606 [DEBUG] [Thread-125925] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:17:58.606 [DEBUG] [Thread-125925] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:17:58.606 [DEBUG] [Thread-125925] [transport.py] [_log()] Compression: none
2025-12-31T10:17:58.606 [DEBUG] [Thread-125925] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:17:58.615 [DEBUG] [Thread-125925] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:17:58.615 [DEBUG] [Thread-125925] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:17:58.615 [DEBUG] [Thread-125925] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T10:17:58.616 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T10:17:58.616 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:17:58.617 [DEBUG] [Thread-125925] [transport.py] [_log()] userauth is OK
2025-12-31T10:17:58.617 [DEBUG] [Thread-125925] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:17:58.617 [DEBUG] [Thread-125925] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:17:58.617 [DEBUG] [Thread-125925] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T10:17:58.617 [DEBUG] [Thread-125925] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:17:58.633 [INFO] [Thread-125925] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:17:58.634 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:17:59.287 [DEBUG] [Thread-125925] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:17:59.288 [DEBUG] [Thread-125925] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:17:59.288 [DEBUG] [Thread-125925] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T10:17:59.329 [DEBUG] [Thread-125925] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:17:59.329 [DEBUG] [Thread-125925] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:17:59.332 [DEBUG] [Thread-125925] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:17:59.345 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:17:59.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T10:17:59.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T10:17:59.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T10:17:59.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:17:59.356 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T10:17:59.356 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:17:59.356 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:17:59.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T10:17:59.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.345630 -999.00  +24.30  13.74     18   -1.20 1 1 1 1 1   888    0 17.21 -367.45 ----- 13.2 13.7 271.5 18.7 31.6 -29.5 31.0 -26.7 29.1 -26.1 29.8 -26.7
2025-12-31T10:17:59.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T10:17:59.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T10:17:59.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.345630
2025-12-31T10:17:59.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T10:17:59.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T10:17:59.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T10:17:59.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T10:17:59.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T10:17:59.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T10:17:35', tmtdew=33.45, humidity=10.24, cloud=0.0, wind=14.2, temperature=25.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T08:17:42.432', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T10:17:59.359 [DEBUG] [Thread-125925] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:17:59.442 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T10:17:59.455 [DEBUG] [Thread-125928] [transport.py] [_log()] starting thread (client mode): 0xb95d7850
2025-12-31T10:17:59.455 [DEBUG] [Thread-125928] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:17:59.470 [DEBUG] [Thread-125928] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T10:17:59.470 [INFO] [Thread-125928] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T10:17:59.477 [DEBUG] [Thread-125928] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:17:59.478 [DEBUG] [Thread-125928] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T10:17:59.478 [DEBUG] [Thread-125928] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:17:59.478 [DEBUG] [Thread-125928] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:17:59.478 [DEBUG] [Thread-125928] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:17:59.478 [DEBUG] [Thread-125928] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:17:59.479 [DEBUG] [Thread-125928] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:17:59.479 [DEBUG] [Thread-125928] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:17:59.479 [DEBUG] [Thread-125928] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:17:59.479 [DEBUG] [Thread-125928] [transport.py] [_log()] client lang: <none>
2025-12-31T10:17:59.479 [DEBUG] [Thread-125928] [transport.py] [_log()] server lang: <none>
2025-12-31T10:17:59.479 [DEBUG] [Thread-125928] [transport.py] [_log()] kex follows: False
2025-12-31T10:17:59.479 [DEBUG] [Thread-125928] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:17:59.479 [DEBUG] [Thread-125928] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:17:59.479 [DEBUG] [Thread-125928] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:17:59.479 [DEBUG] [Thread-125928] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:17:59.479 [DEBUG] [Thread-125928] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:17:59.479 [DEBUG] [Thread-125928] [transport.py] [_log()] Compression: none
2025-12-31T10:17:59.479 [DEBUG] [Thread-125928] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:17:59.537 [DEBUG] [Thread-125928] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:17:59.538 [DEBUG] [Thread-125928] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:17:59.538 [DEBUG] [Thread-125928] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T10:17:59.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T10:17:59.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:17:59.594 [DEBUG] [Thread-125928] [transport.py] [_log()] userauth is OK
2025-12-31T10:17:59.594 [DEBUG] [Thread-125928] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:17:59.594 [DEBUG] [Thread-125928] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:17:59.594 [DEBUG] [Thread-125928] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T10:17:59.595 [DEBUG] [Thread-125928] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:17:59.613 [INFO] [Thread-125928] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:17:59.614 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T10:17:59.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:18:00.461 [DEBUG] [Thread-125928] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:18:00.461 [DEBUG] [Thread-125928] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:18:00.509 [DEBUG] [Thread-125928] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:18:00.509 [DEBUG] [Thread-125928] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:18:00.518 [DEBUG] [Thread-125928] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:18:00.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:18:00.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T10:18:00.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T10:18:00.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:18:00.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:18:00.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:18:00.553 [DEBUG] [Thread-125928] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:18:05.290 [DEBUG] [Thread-125930 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:18:05.962 [DEBUG] [Thread-125931 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:18:20.342 [DEBUG] [Thread-125932 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:18:23.788 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:18:23.789 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:18:30.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T10:18:30.556 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T10:18:30.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-12-31T10:18:31.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 10, 18, 7), 33.06, 10.57, 0.0, 19.9, 25.81, 0, 0, 0, 2, 0, 0),)
2025-12-31T10:18:31.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 10:18:07
2025-12-31T10:18:31.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T10:18:31.540 [DEBUG] [Thread-125933] [transport.py] [_log()] starting thread (client mode): 0xb95d5ff0
2025-12-31T10:18:31.540 [DEBUG] [Thread-125933] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:18:31.560 [DEBUG] [Thread-125933] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T10:18:31.560 [INFO] [Thread-125933] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T10:18:31.563 [DEBUG] [Thread-125933] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:18:31.564 [DEBUG] [Thread-125933] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T10:18:31.564 [DEBUG] [Thread-125933] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:18:31.564 [DEBUG] [Thread-125933] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:18:31.564 [DEBUG] [Thread-125933] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:18:31.564 [DEBUG] [Thread-125933] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:18:31.564 [DEBUG] [Thread-125933] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:18:31.564 [DEBUG] [Thread-125933] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:18:31.564 [DEBUG] [Thread-125933] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:18:31.564 [DEBUG] [Thread-125933] [transport.py] [_log()] client lang: <none>
2025-12-31T10:18:31.564 [DEBUG] [Thread-125933] [transport.py] [_log()] server lang: <none>
2025-12-31T10:18:31.564 [DEBUG] [Thread-125933] [transport.py] [_log()] kex follows: False
2025-12-31T10:18:31.564 [DEBUG] [Thread-125933] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:18:31.564 [DEBUG] [Thread-125933] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:18:31.564 [DEBUG] [Thread-125933] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:18:31.564 [DEBUG] [Thread-125933] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:18:31.564 [DEBUG] [Thread-125933] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:18:31.564 [DEBUG] [Thread-125933] [transport.py] [_log()] Compression: none
2025-12-31T10:18:31.564 [DEBUG] [Thread-125933] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:18:31.581 [DEBUG] [Thread-125933] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:18:31.582 [DEBUG] [Thread-125933] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:18:31.582 [DEBUG] [Thread-125933] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T10:18:31.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T10:18:31.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:18:31.584 [DEBUG] [Thread-125933] [transport.py] [_log()] userauth is OK
2025-12-31T10:18:31.584 [DEBUG] [Thread-125933] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:18:31.584 [DEBUG] [Thread-125933] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:18:31.585 [DEBUG] [Thread-125933] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T10:18:31.585 [DEBUG] [Thread-125933] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:18:31.609 [INFO] [Thread-125933] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:18:31.609 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:18:32.200 [DEBUG] [Thread-125933] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:18:32.201 [DEBUG] [Thread-125933] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:18:32.201 [DEBUG] [Thread-125933] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T10:18:32.242 [DEBUG] [Thread-125933] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:18:32.242 [DEBUG] [Thread-125933] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:18:32.246 [DEBUG] [Thread-125933] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:18:32.256 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:18:32.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T10:18:32.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T10:18:32.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T10:18:32.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:18:32.269 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T10:18:32.269 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:18:32.270 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:18:32.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T10:18:32.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.345977 -999.00  +24.40  12.02     18   -1.10 1 1 1 1 1   888    0 16.78 -357.03 ----- 12.6 12.0 282.4 15.8 31.6 -28.2 31.1 -26.4 29.2 -24.7 29.7 -26.8
2025-12-31T10:18:32.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T10:18:32.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T10:18:32.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.345977
2025-12-31T10:18:32.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T10:18:32.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T10:18:32.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T10:18:32.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T10:18:32.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T10:18:32.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T10:18:07', tmtdew=33.06, humidity=10.57, cloud=0.0, wind=19.9, temperature=25.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T08:18:12.413', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T10:18:32.272 [DEBUG] [Thread-125933] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:18:32.366 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T10:18:32.378 [DEBUG] [Thread-125936] [transport.py] [_log()] starting thread (client mode): 0xb6b6b1c0
2025-12-31T10:18:32.379 [DEBUG] [Thread-125936] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:18:32.393 [DEBUG] [Thread-125936] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T10:18:32.393 [INFO] [Thread-125936] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T10:18:32.401 [DEBUG] [Thread-125936] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:18:32.401 [DEBUG] [Thread-125936] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T10:18:32.401 [DEBUG] [Thread-125936] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:18:32.401 [DEBUG] [Thread-125936] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:18:32.401 [DEBUG] [Thread-125936] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:18:32.402 [DEBUG] [Thread-125936] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:18:32.402 [DEBUG] [Thread-125936] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:18:32.402 [DEBUG] [Thread-125936] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:18:32.402 [DEBUG] [Thread-125936] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:18:32.402 [DEBUG] [Thread-125936] [transport.py] [_log()] client lang: <none>
2025-12-31T10:18:32.402 [DEBUG] [Thread-125936] [transport.py] [_log()] server lang: <none>
2025-12-31T10:18:32.402 [DEBUG] [Thread-125936] [transport.py] [_log()] kex follows: False
2025-12-31T10:18:32.402 [DEBUG] [Thread-125936] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:18:32.402 [DEBUG] [Thread-125936] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:18:32.402 [DEBUG] [Thread-125936] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:18:32.402 [DEBUG] [Thread-125936] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:18:32.402 [DEBUG] [Thread-125936] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:18:32.402 [DEBUG] [Thread-125936] [transport.py] [_log()] Compression: none
2025-12-31T10:18:32.402 [DEBUG] [Thread-125936] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:18:32.462 [DEBUG] [Thread-125936] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:18:32.462 [DEBUG] [Thread-125936] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:18:32.463 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T10:18:32.463 [DEBUG] [Thread-125936] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T10:18:32.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:18:32.518 [DEBUG] [Thread-125936] [transport.py] [_log()] userauth is OK
2025-12-31T10:18:32.518 [DEBUG] [Thread-125936] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:18:32.518 [DEBUG] [Thread-125936] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:18:32.518 [DEBUG] [Thread-125936] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T10:18:32.518 [DEBUG] [Thread-125936] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:18:32.537 [INFO] [Thread-125936] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:18:32.537 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T10:18:32.537 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:18:33.388 [DEBUG] [Thread-125936] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:18:33.389 [DEBUG] [Thread-125936] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:18:33.437 [DEBUG] [Thread-125936] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:18:33.437 [DEBUG] [Thread-125936] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:18:33.446 [DEBUG] [Thread-125936] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:18:33.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:18:33.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T10:18:33.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T10:18:33.474 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:18:33.475 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:18:33.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:18:33.483 [DEBUG] [Thread-125936] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:18:35.377 [DEBUG] [Thread-125938 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:18:50.429 [DEBUG] [Thread-125939 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:19:03.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T10:19:03.505 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T10:19:03.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T10:19:04.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 10, 18, 40), 32.78, 10.9, 0.0, 15.53, 25.42, 0, 0, 0, 2, 0, 0),)
2025-12-31T10:19:04.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 10:18:40
2025-12-31T10:19:04.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T10:19:04.497 [DEBUG] [Thread-125940] [transport.py] [_log()] starting thread (client mode): 0xb6bba830
2025-12-31T10:19:04.497 [DEBUG] [Thread-125940] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:19:04.517 [DEBUG] [Thread-125940] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T10:19:04.517 [INFO] [Thread-125940] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T10:19:04.520 [DEBUG] [Thread-125940] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:19:04.521 [DEBUG] [Thread-125940] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T10:19:04.521 [DEBUG] [Thread-125940] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:19:04.521 [DEBUG] [Thread-125940] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:19:04.521 [DEBUG] [Thread-125940] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:19:04.521 [DEBUG] [Thread-125940] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:19:04.521 [DEBUG] [Thread-125940] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:19:04.521 [DEBUG] [Thread-125940] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:19:04.521 [DEBUG] [Thread-125940] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:19:04.521 [DEBUG] [Thread-125940] [transport.py] [_log()] client lang: <none>
2025-12-31T10:19:04.521 [DEBUG] [Thread-125940] [transport.py] [_log()] server lang: <none>
2025-12-31T10:19:04.521 [DEBUG] [Thread-125940] [transport.py] [_log()] kex follows: False
2025-12-31T10:19:04.521 [DEBUG] [Thread-125940] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:19:04.521 [DEBUG] [Thread-125940] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:19:04.521 [DEBUG] [Thread-125940] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:19:04.521 [DEBUG] [Thread-125940] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:19:04.521 [DEBUG] [Thread-125940] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:19:04.521 [DEBUG] [Thread-125940] [transport.py] [_log()] Compression: none
2025-12-31T10:19:04.521 [DEBUG] [Thread-125940] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:19:04.537 [DEBUG] [Thread-125940] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:19:04.537 [DEBUG] [Thread-125940] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:19:04.538 [DEBUG] [Thread-125940] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T10:19:04.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T10:19:04.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:19:04.539 [DEBUG] [Thread-125940] [transport.py] [_log()] userauth is OK
2025-12-31T10:19:04.540 [DEBUG] [Thread-125940] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:19:04.540 [DEBUG] [Thread-125940] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:19:04.540 [DEBUG] [Thread-125940] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T10:19:04.540 [DEBUG] [Thread-125940] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:19:04.558 [INFO] [Thread-125940] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:19:04.559 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:19:05.193 [DEBUG] [Thread-125940] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:19:05.194 [DEBUG] [Thread-125940] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:19:05.194 [DEBUG] [Thread-125940] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T10:19:05.235 [DEBUG] [Thread-125940] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:19:05.235 [DEBUG] [Thread-125940] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:19:05.237 [DEBUG] [Thread-125940] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:19:05.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:19:05.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T10:19:05.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T10:19:05.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T10:19:05.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:19:05.260 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T10:19:05.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:19:05.260 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:19:05.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T10:19:05.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.346324 -999.00  +24.40  12.77     17   -1.40 1 1 1 1 1   888    0 16.94 -349.76 ----- 10.3 12.8 279.2 15.8 31.8 -29.4 31.1 -26.4 29.2 -25.0 29.8 -26.9
2025-12-31T10:19:05.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T10:19:05.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T10:19:05.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.346324
2025-12-31T10:19:05.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T10:19:05.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T10:19:05.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T10:19:05.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T10:19:05.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T10:19:05.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T10:18:40', tmtdew=32.78, humidity=10.9, cloud=0.0, wind=15.53, temperature=25.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T08:18:42.394', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T10:19:05.262 [DEBUG] [Thread-125940] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:19:05.344 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T10:19:05.356 [DEBUG] [Thread-125943] [transport.py] [_log()] starting thread (client mode): 0xb6bb2b90
2025-12-31T10:19:05.356 [DEBUG] [Thread-125943] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:19:05.371 [DEBUG] [Thread-125943] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T10:19:05.372 [INFO] [Thread-125943] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T10:19:05.380 [DEBUG] [Thread-125943] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:19:05.381 [DEBUG] [Thread-125943] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T10:19:05.381 [DEBUG] [Thread-125943] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:19:05.381 [DEBUG] [Thread-125943] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:19:05.381 [DEBUG] [Thread-125943] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:19:05.381 [DEBUG] [Thread-125943] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:19:05.381 [DEBUG] [Thread-125943] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:19:05.381 [DEBUG] [Thread-125943] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:19:05.381 [DEBUG] [Thread-125943] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:19:05.382 [DEBUG] [Thread-125943] [transport.py] [_log()] client lang: <none>
2025-12-31T10:19:05.382 [DEBUG] [Thread-125943] [transport.py] [_log()] server lang: <none>
2025-12-31T10:19:05.382 [DEBUG] [Thread-125943] [transport.py] [_log()] kex follows: False
2025-12-31T10:19:05.382 [DEBUG] [Thread-125943] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:19:05.382 [DEBUG] [Thread-125943] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:19:05.382 [DEBUG] [Thread-125943] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:19:05.382 [DEBUG] [Thread-125943] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:19:05.383 [DEBUG] [Thread-125943] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:19:05.383 [DEBUG] [Thread-125943] [transport.py] [_log()] Compression: none
2025-12-31T10:19:05.383 [DEBUG] [Thread-125943] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:19:05.436 [DEBUG] [Thread-125943] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:19:05.437 [DEBUG] [Thread-125943] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:19:05.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T10:19:05.437 [DEBUG] [Thread-125943] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T10:19:05.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:19:05.462 [DEBUG] [Thread-125945 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:19:05.493 [DEBUG] [Thread-125943] [transport.py] [_log()] userauth is OK
2025-12-31T10:19:05.493 [DEBUG] [Thread-125943] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:19:05.493 [DEBUG] [Thread-125943] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:19:05.493 [DEBUG] [Thread-125943] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T10:19:05.494 [DEBUG] [Thread-125943] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:19:05.512 [INFO] [Thread-125943] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:19:05.513 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T10:19:05.513 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:19:06.030 [DEBUG] [Thread-125946 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:19:06.369 [DEBUG] [Thread-125943] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:19:06.369 [DEBUG] [Thread-125943] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:19:06.417 [DEBUG] [Thread-125943] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:19:06.417 [DEBUG] [Thread-125943] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:19:06.426 [DEBUG] [Thread-125943] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:19:06.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:19:06.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T10:19:06.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T10:19:06.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:19:06.455 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:19:06.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:19:06.463 [DEBUG] [Thread-125943] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:19:20.505 [DEBUG] [Thread-125947 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:19:23.928 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:19:23.929 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:19:35.533 [DEBUG] [Thread-125948 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:19:36.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T10:19:36.486 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T10:19:36.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T10:19:37.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 10, 19, 12), 32.34, 11.15, 0.0, 14.8, 25.04, 0, 0, 0, 2, 0, 0),)
2025-12-31T10:19:37.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 10:19:12
2025-12-31T10:19:37.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T10:19:37.487 [DEBUG] [Thread-125949] [transport.py] [_log()] starting thread (client mode): 0xb957bf70
2025-12-31T10:19:37.487 [DEBUG] [Thread-125949] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:19:37.507 [DEBUG] [Thread-125949] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T10:19:37.507 [INFO] [Thread-125949] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T10:19:37.510 [DEBUG] [Thread-125949] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:19:37.511 [DEBUG] [Thread-125949] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T10:19:37.511 [DEBUG] [Thread-125949] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:19:37.511 [DEBUG] [Thread-125949] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:19:37.511 [DEBUG] [Thread-125949] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:19:37.511 [DEBUG] [Thread-125949] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:19:37.511 [DEBUG] [Thread-125949] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:19:37.511 [DEBUG] [Thread-125949] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:19:37.511 [DEBUG] [Thread-125949] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:19:37.511 [DEBUG] [Thread-125949] [transport.py] [_log()] client lang: <none>
2025-12-31T10:19:37.511 [DEBUG] [Thread-125949] [transport.py] [_log()] server lang: <none>
2025-12-31T10:19:37.511 [DEBUG] [Thread-125949] [transport.py] [_log()] kex follows: False
2025-12-31T10:19:37.511 [DEBUG] [Thread-125949] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:19:37.511 [DEBUG] [Thread-125949] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:19:37.511 [DEBUG] [Thread-125949] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:19:37.511 [DEBUG] [Thread-125949] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:19:37.511 [DEBUG] [Thread-125949] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:19:37.511 [DEBUG] [Thread-125949] [transport.py] [_log()] Compression: none
2025-12-31T10:19:37.511 [DEBUG] [Thread-125949] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:19:37.520 [DEBUG] [Thread-125949] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:19:37.521 [DEBUG] [Thread-125949] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:19:37.521 [DEBUG] [Thread-125949] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T10:19:37.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T10:19:37.522 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:19:37.565 [DEBUG] [Thread-125949] [transport.py] [_log()] userauth is OK
2025-12-31T10:19:37.565 [DEBUG] [Thread-125949] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:19:37.565 [DEBUG] [Thread-125949] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:19:37.565 [DEBUG] [Thread-125949] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T10:19:37.565 [DEBUG] [Thread-125949] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:19:37.586 [INFO] [Thread-125949] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:19:37.587 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:19:38.212 [DEBUG] [Thread-125949] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:19:38.212 [DEBUG] [Thread-125949] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:19:38.212 [DEBUG] [Thread-125949] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T10:19:38.253 [DEBUG] [Thread-125949] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:19:38.254 [DEBUG] [Thread-125949] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:19:38.257 [DEBUG] [Thread-125949] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:19:38.269 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:19:38.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T10:19:38.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T10:19:38.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T10:19:38.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:19:38.280 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T10:19:38.280 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:19:38.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:19:38.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T10:19:38.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.346671 -999.00  +24.10  10.36     18   -1.40 1 1 1 1 1   888    0 18.04 -324.57 ----- 11.1 10.4 275.4 15.6 31.6 -28.6 31.1 -26.5 29.0 -26.1 29.8 -25.7
2025-12-31T10:19:38.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T10:19:38.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T10:19:38.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.346671
2025-12-31T10:19:38.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T10:19:38.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T10:19:38.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T10:19:38.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T10:19:38.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T10:19:38.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T10:19:12', tmtdew=32.34, humidity=11.15, cloud=0.0, wind=14.8, temperature=25.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T08:19:12.374', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T10:19:38.283 [DEBUG] [Thread-125949] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:19:38.366 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T10:19:38.379 [DEBUG] [Thread-125952] [transport.py] [_log()] starting thread (client mode): 0xb95d7c70
2025-12-31T10:19:38.379 [DEBUG] [Thread-125952] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:19:38.395 [DEBUG] [Thread-125952] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T10:19:38.395 [INFO] [Thread-125952] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T10:19:38.403 [DEBUG] [Thread-125952] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:19:38.403 [DEBUG] [Thread-125952] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T10:19:38.403 [DEBUG] [Thread-125952] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:19:38.404 [DEBUG] [Thread-125952] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:19:38.404 [DEBUG] [Thread-125952] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:19:38.404 [DEBUG] [Thread-125952] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:19:38.404 [DEBUG] [Thread-125952] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:19:38.404 [DEBUG] [Thread-125952] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:19:38.404 [DEBUG] [Thread-125952] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:19:38.404 [DEBUG] [Thread-125952] [transport.py] [_log()] client lang: <none>
2025-12-31T10:19:38.404 [DEBUG] [Thread-125952] [transport.py] [_log()] server lang: <none>
2025-12-31T10:19:38.405 [DEBUG] [Thread-125952] [transport.py] [_log()] kex follows: False
2025-12-31T10:19:38.405 [DEBUG] [Thread-125952] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:19:38.405 [DEBUG] [Thread-125952] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:19:38.405 [DEBUG] [Thread-125952] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:19:38.405 [DEBUG] [Thread-125952] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:19:38.405 [DEBUG] [Thread-125952] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:19:38.405 [DEBUG] [Thread-125952] [transport.py] [_log()] Compression: none
2025-12-31T10:19:38.405 [DEBUG] [Thread-125952] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:19:38.462 [DEBUG] [Thread-125952] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:19:38.462 [DEBUG] [Thread-125952] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:19:38.463 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T10:19:38.464 [DEBUG] [Thread-125952] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T10:19:38.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:19:38.518 [DEBUG] [Thread-125952] [transport.py] [_log()] userauth is OK
2025-12-31T10:19:38.518 [DEBUG] [Thread-125952] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:19:38.518 [DEBUG] [Thread-125952] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:19:38.518 [DEBUG] [Thread-125952] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T10:19:38.518 [DEBUG] [Thread-125952] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:19:38.537 [INFO] [Thread-125952] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:19:38.537 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T10:19:38.537 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:19:39.398 [DEBUG] [Thread-125952] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:19:39.398 [DEBUG] [Thread-125952] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:19:39.446 [DEBUG] [Thread-125952] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:19:39.446 [DEBUG] [Thread-125952] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:19:39.455 [DEBUG] [Thread-125952] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:19:39.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:19:39.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T10:19:39.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T10:19:39.483 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:19:39.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:19:39.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:19:39.492 [DEBUG] [Thread-125952] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:19:50.570 [DEBUG] [Thread-125954 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:20:05.618 [DEBUG] [Thread-125955 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:20:06.085 [DEBUG] [Thread-125956 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:20:09.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T10:20:09.507 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T10:20:09.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T10:20:10.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 10, 19, 44), 32.41, 11.28, 0.0, 16.2, 25.24, 0, 0, 0, 2, 0, 0),)
2025-12-31T10:20:10.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 10:19:44
2025-12-31T10:20:10.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T10:20:10.550 [DEBUG] [Thread-125957] [transport.py] [_log()] starting thread (client mode): 0xb6bb8a90
2025-12-31T10:20:10.550 [DEBUG] [Thread-125957] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:20:10.571 [DEBUG] [Thread-125957] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T10:20:10.571 [INFO] [Thread-125957] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T10:20:10.575 [DEBUG] [Thread-125957] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:20:10.575 [DEBUG] [Thread-125957] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T10:20:10.575 [DEBUG] [Thread-125957] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:20:10.575 [DEBUG] [Thread-125957] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:20:10.575 [DEBUG] [Thread-125957] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:20:10.575 [DEBUG] [Thread-125957] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:20:10.575 [DEBUG] [Thread-125957] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:20:10.575 [DEBUG] [Thread-125957] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:20:10.575 [DEBUG] [Thread-125957] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:20:10.575 [DEBUG] [Thread-125957] [transport.py] [_log()] client lang: <none>
2025-12-31T10:20:10.575 [DEBUG] [Thread-125957] [transport.py] [_log()] server lang: <none>
2025-12-31T10:20:10.575 [DEBUG] [Thread-125957] [transport.py] [_log()] kex follows: False
2025-12-31T10:20:10.575 [DEBUG] [Thread-125957] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:20:10.575 [DEBUG] [Thread-125957] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:20:10.575 [DEBUG] [Thread-125957] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:20:10.575 [DEBUG] [Thread-125957] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:20:10.575 [DEBUG] [Thread-125957] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:20:10.575 [DEBUG] [Thread-125957] [transport.py] [_log()] Compression: none
2025-12-31T10:20:10.575 [DEBUG] [Thread-125957] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:20:10.591 [DEBUG] [Thread-125957] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:20:10.591 [DEBUG] [Thread-125957] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:20:10.592 [DEBUG] [Thread-125957] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T10:20:10.592 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T10:20:10.592 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:20:10.593 [DEBUG] [Thread-125957] [transport.py] [_log()] userauth is OK
2025-12-31T10:20:10.593 [DEBUG] [Thread-125957] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:20:10.593 [DEBUG] [Thread-125957] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:20:10.593 [DEBUG] [Thread-125957] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T10:20:10.593 [DEBUG] [Thread-125957] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:20:10.610 [INFO] [Thread-125957] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:20:10.610 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:20:12.117 [DEBUG] [Thread-125957] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:20:12.117 [DEBUG] [Thread-125957] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:20:12.117 [DEBUG] [Thread-125957] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T10:20:12.158 [DEBUG] [Thread-125957] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:20:12.158 [DEBUG] [Thread-125957] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:20:12.160 [DEBUG] [Thread-125957] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:20:12.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:20:12.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T10:20:12.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T10:20:12.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T10:20:12.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:20:12.176 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T10:20:12.176 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:20:12.176 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:20:12.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T10:20:12.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.347019 -999.00  +24.10  11.31     18   -1.30 1 1 1 1 1   888    0 17.82 -325.02 ----- 11.9 11.3 263.4 20.6 31.6 -27.6 31.1 -26.4 29.1 -24.6 29.8 -25.4
2025-12-31T10:20:12.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T10:20:12.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T10:20:12.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.347019
2025-12-31T10:20:12.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T10:20:12.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T10:20:12.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T10:20:12.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T10:20:12.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T10:20:12.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T10:19:44', tmtdew=32.41, humidity=11.28, cloud=0.0, wind=16.2, temperature=25.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T08:19:42.442', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T10:20:12.177 [DEBUG] [Thread-125957] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:20:12.251 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T10:20:12.264 [DEBUG] [Thread-125960] [transport.py] [_log()] starting thread (client mode): 0xb6b35f60
2025-12-31T10:20:12.264 [DEBUG] [Thread-125960] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:20:12.278 [DEBUG] [Thread-125960] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T10:20:12.279 [INFO] [Thread-125960] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T10:20:12.286 [DEBUG] [Thread-125960] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:20:12.286 [DEBUG] [Thread-125960] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T10:20:12.286 [DEBUG] [Thread-125960] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:20:12.286 [DEBUG] [Thread-125960] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:20:12.286 [DEBUG] [Thread-125960] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:20:12.286 [DEBUG] [Thread-125960] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:20:12.286 [DEBUG] [Thread-125960] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:20:12.286 [DEBUG] [Thread-125960] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:20:12.286 [DEBUG] [Thread-125960] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:20:12.286 [DEBUG] [Thread-125960] [transport.py] [_log()] client lang: <none>
2025-12-31T10:20:12.286 [DEBUG] [Thread-125960] [transport.py] [_log()] server lang: <none>
2025-12-31T10:20:12.286 [DEBUG] [Thread-125960] [transport.py] [_log()] kex follows: False
2025-12-31T10:20:12.286 [DEBUG] [Thread-125960] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:20:12.286 [DEBUG] [Thread-125960] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:20:12.286 [DEBUG] [Thread-125960] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:20:12.286 [DEBUG] [Thread-125960] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:20:12.286 [DEBUG] [Thread-125960] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:20:12.286 [DEBUG] [Thread-125960] [transport.py] [_log()] Compression: none
2025-12-31T10:20:12.286 [DEBUG] [Thread-125960] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:20:12.344 [DEBUG] [Thread-125960] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:20:12.344 [DEBUG] [Thread-125960] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:20:12.344 [DEBUG] [Thread-125960] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T10:20:12.344 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T10:20:12.345 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:20:12.401 [DEBUG] [Thread-125960] [transport.py] [_log()] userauth is OK
2025-12-31T10:20:12.401 [DEBUG] [Thread-125960] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:20:12.401 [DEBUG] [Thread-125960] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:20:12.401 [DEBUG] [Thread-125960] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T10:20:12.401 [DEBUG] [Thread-125960] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:20:12.418 [INFO] [Thread-125960] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:20:12.419 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T10:20:12.419 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:20:13.244 [DEBUG] [Thread-125960] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:20:13.244 [DEBUG] [Thread-125960] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:20:13.293 [DEBUG] [Thread-125960] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:20:13.293 [DEBUG] [Thread-125960] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:20:13.302 [DEBUG] [Thread-125960] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:20:13.310 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:20:13.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T10:20:13.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T10:20:13.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:20:13.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:20:13.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:20:13.335 [DEBUG] [Thread-125960] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:20:20.651 [DEBUG] [Thread-125962 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:20:24.070 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:20:24.071 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:20:35.698 [DEBUG] [Thread-125963 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:20:43.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T10:20:43.357 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T10:20:43.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T10:20:44.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 10, 20, 16), 31.95, 11.6, 0.0, 15.1, 25.03, 0, 0, 0, 2, 0, 0),)
2025-12-31T10:20:44.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 10:20:16
2025-12-31T10:20:44.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T10:20:44.363 [DEBUG] [Thread-125964] [transport.py] [_log()] starting thread (client mode): 0xb6b19e10
2025-12-31T10:20:44.363 [DEBUG] [Thread-125964] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:20:44.383 [DEBUG] [Thread-125964] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T10:20:44.383 [INFO] [Thread-125964] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T10:20:44.386 [DEBUG] [Thread-125964] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:20:44.387 [DEBUG] [Thread-125964] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T10:20:44.387 [DEBUG] [Thread-125964] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:20:44.387 [DEBUG] [Thread-125964] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:20:44.387 [DEBUG] [Thread-125964] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:20:44.387 [DEBUG] [Thread-125964] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:20:44.387 [DEBUG] [Thread-125964] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:20:44.387 [DEBUG] [Thread-125964] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:20:44.387 [DEBUG] [Thread-125964] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:20:44.387 [DEBUG] [Thread-125964] [transport.py] [_log()] client lang: <none>
2025-12-31T10:20:44.387 [DEBUG] [Thread-125964] [transport.py] [_log()] server lang: <none>
2025-12-31T10:20:44.387 [DEBUG] [Thread-125964] [transport.py] [_log()] kex follows: False
2025-12-31T10:20:44.387 [DEBUG] [Thread-125964] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:20:44.387 [DEBUG] [Thread-125964] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:20:44.387 [DEBUG] [Thread-125964] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:20:44.388 [DEBUG] [Thread-125964] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:20:44.388 [DEBUG] [Thread-125964] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:20:44.388 [DEBUG] [Thread-125964] [transport.py] [_log()] Compression: none
2025-12-31T10:20:44.388 [DEBUG] [Thread-125964] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:20:44.407 [DEBUG] [Thread-125964] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:20:44.408 [DEBUG] [Thread-125964] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:20:44.409 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T10:20:44.409 [DEBUG] [Thread-125964] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T10:20:44.410 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:20:44.412 [DEBUG] [Thread-125964] [transport.py] [_log()] userauth is OK
2025-12-31T10:20:44.412 [DEBUG] [Thread-125964] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:20:44.412 [DEBUG] [Thread-125964] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:20:44.412 [DEBUG] [Thread-125964] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T10:20:44.412 [DEBUG] [Thread-125964] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:20:44.437 [INFO] [Thread-125964] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:20:44.438 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:20:45.104 [DEBUG] [Thread-125964] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:20:45.104 [DEBUG] [Thread-125964] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:20:45.105 [DEBUG] [Thread-125964] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T10:20:45.145 [DEBUG] [Thread-125964] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:20:45.145 [DEBUG] [Thread-125964] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:20:45.149 [DEBUG] [Thread-125964] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:20:45.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:20:45.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T10:20:45.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T10:20:45.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T10:20:45.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:20:45.174 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T10:20:45.174 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:20:45.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:20:45.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T10:20:45.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.347366 -999.00  +24.30   9.38     18   -1.20 1 1 1 1 1   888    0 19.09 -282.04 ----- 6.5 9.4 233.7 14.3 31.7 -28.3 31.1 -26.2 29.3 -24.6 29.7 -26.4
2025-12-31T10:20:45.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T10:20:45.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T10:20:45.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.347366
2025-12-31T10:20:45.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T10:20:45.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T10:20:45.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T10:20:45.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T10:20:45.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T10:20:45.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T10:20:16', tmtdew=31.95, humidity=11.6, cloud=0.0, wind=15.1, temperature=25.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T08:20:12.422', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T10:20:45.177 [DEBUG] [Thread-125964] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:20:45.259 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T10:20:45.271 [DEBUG] [Thread-125967] [transport.py] [_log()] starting thread (client mode): 0xb6b34cd0
2025-12-31T10:20:45.271 [DEBUG] [Thread-125967] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:20:45.285 [DEBUG] [Thread-125967] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T10:20:45.286 [INFO] [Thread-125967] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T10:20:45.293 [DEBUG] [Thread-125967] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:20:45.293 [DEBUG] [Thread-125967] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T10:20:45.293 [DEBUG] [Thread-125967] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:20:45.294 [DEBUG] [Thread-125967] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:20:45.294 [DEBUG] [Thread-125967] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:20:45.294 [DEBUG] [Thread-125967] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:20:45.294 [DEBUG] [Thread-125967] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:20:45.294 [DEBUG] [Thread-125967] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:20:45.294 [DEBUG] [Thread-125967] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:20:45.294 [DEBUG] [Thread-125967] [transport.py] [_log()] client lang: <none>
2025-12-31T10:20:45.294 [DEBUG] [Thread-125967] [transport.py] [_log()] server lang: <none>
2025-12-31T10:20:45.294 [DEBUG] [Thread-125967] [transport.py] [_log()] kex follows: False
2025-12-31T10:20:45.294 [DEBUG] [Thread-125967] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:20:45.294 [DEBUG] [Thread-125967] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:20:45.294 [DEBUG] [Thread-125967] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:20:45.294 [DEBUG] [Thread-125967] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:20:45.294 [DEBUG] [Thread-125967] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:20:45.294 [DEBUG] [Thread-125967] [transport.py] [_log()] Compression: none
2025-12-31T10:20:45.294 [DEBUG] [Thread-125967] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:20:45.358 [DEBUG] [Thread-125967] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:20:45.358 [DEBUG] [Thread-125967] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:20:45.359 [DEBUG] [Thread-125967] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T10:20:45.359 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T10:20:45.359 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:20:45.413 [DEBUG] [Thread-125967] [transport.py] [_log()] userauth is OK
2025-12-31T10:20:45.414 [DEBUG] [Thread-125967] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:20:45.414 [DEBUG] [Thread-125967] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:20:45.414 [DEBUG] [Thread-125967] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T10:20:45.414 [DEBUG] [Thread-125967] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:20:45.436 [INFO] [Thread-125967] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:20:45.436 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T10:20:45.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:20:46.289 [DEBUG] [Thread-125967] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:20:46.289 [DEBUG] [Thread-125967] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:20:46.337 [DEBUG] [Thread-125967] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:20:46.337 [DEBUG] [Thread-125967] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:20:46.347 [DEBUG] [Thread-125967] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:20:46.356 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:20:46.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T10:20:46.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-12-31T10:20:46.374 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:20:46.374 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:20:46.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:20:46.383 [DEBUG] [Thread-125967] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:20:50.734 [DEBUG] [Thread-125969 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:21:05.772 [DEBUG] [Thread-125970 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:21:06.145 [DEBUG] [Thread-125971 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:21:16.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T10:21:16.390 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T10:21:16.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T10:21:17.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 10, 20, 48), 31.08, 12.18, 0.0, 16.89, 24.8, 0, 0, 0, 2, 0, 0),)
2025-12-31T10:21:17.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 10:20:48
2025-12-31T10:21:17.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T10:21:17.377 [DEBUG] [Thread-125972] [transport.py] [_log()] starting thread (client mode): 0xb6b1a290
2025-12-31T10:21:17.377 [DEBUG] [Thread-125972] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:21:17.398 [DEBUG] [Thread-125972] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T10:21:17.398 [INFO] [Thread-125972] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T10:21:17.401 [DEBUG] [Thread-125972] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:21:17.401 [DEBUG] [Thread-125972] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T10:21:17.401 [DEBUG] [Thread-125972] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:21:17.401 [DEBUG] [Thread-125972] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:21:17.401 [DEBUG] [Thread-125972] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:21:17.401 [DEBUG] [Thread-125972] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:21:17.401 [DEBUG] [Thread-125972] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:21:17.401 [DEBUG] [Thread-125972] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:21:17.401 [DEBUG] [Thread-125972] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:21:17.401 [DEBUG] [Thread-125972] [transport.py] [_log()] client lang: <none>
2025-12-31T10:21:17.402 [DEBUG] [Thread-125972] [transport.py] [_log()] server lang: <none>
2025-12-31T10:21:17.402 [DEBUG] [Thread-125972] [transport.py] [_log()] kex follows: False
2025-12-31T10:21:17.402 [DEBUG] [Thread-125972] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:21:17.402 [DEBUG] [Thread-125972] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:21:17.402 [DEBUG] [Thread-125972] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:21:17.402 [DEBUG] [Thread-125972] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:21:17.402 [DEBUG] [Thread-125972] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:21:17.402 [DEBUG] [Thread-125972] [transport.py] [_log()] Compression: none
2025-12-31T10:21:17.402 [DEBUG] [Thread-125972] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:21:17.418 [DEBUG] [Thread-125972] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:21:17.419 [DEBUG] [Thread-125972] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:21:17.419 [DEBUG] [Thread-125972] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T10:21:17.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T10:21:17.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:21:17.422 [DEBUG] [Thread-125972] [transport.py] [_log()] userauth is OK
2025-12-31T10:21:17.422 [DEBUG] [Thread-125972] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:21:17.422 [DEBUG] [Thread-125972] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:21:17.422 [DEBUG] [Thread-125972] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T10:21:17.422 [DEBUG] [Thread-125972] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:21:17.445 [INFO] [Thread-125972] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:21:17.446 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:21:18.073 [DEBUG] [Thread-125972] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:21:18.073 [DEBUG] [Thread-125972] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:21:18.074 [DEBUG] [Thread-125972] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T10:21:18.115 [DEBUG] [Thread-125972] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:21:18.115 [DEBUG] [Thread-125972] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:21:18.119 [DEBUG] [Thread-125972] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:21:18.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:21:18.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T10:21:18.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T10:21:18.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T10:21:18.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:21:18.142 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T10:21:18.142 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:21:18.142 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:21:18.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T10:21:18.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.347713 -999.00  +24.60  13.55     18   -0.90 1 1 1 1 1   888    0 19.54 -274.01 ----- 11.3 13.6 285.6 17.7 31.8 -27.7 31.2 -26.1 29.4 -26.4 29.9 -25.9
2025-12-31T10:21:18.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T10:21:18.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T10:21:18.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.347713
2025-12-31T10:21:18.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T10:21:18.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T10:21:18.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T10:21:18.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T10:21:18.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T10:21:18.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T10:20:48', tmtdew=31.08, humidity=12.18, cloud=0.0, wind=16.89, temperature=24.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T08:20:42.403', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T10:21:18.145 [DEBUG] [Thread-125972] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:21:18.230 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T10:21:18.243 [DEBUG] [Thread-125975] [transport.py] [_log()] starting thread (client mode): 0xb6bb3910
2025-12-31T10:21:18.244 [DEBUG] [Thread-125975] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:21:18.258 [DEBUG] [Thread-125975] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T10:21:18.258 [INFO] [Thread-125975] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T10:21:18.265 [DEBUG] [Thread-125975] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:21:18.266 [DEBUG] [Thread-125975] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T10:21:18.266 [DEBUG] [Thread-125975] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:21:18.266 [DEBUG] [Thread-125975] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:21:18.266 [DEBUG] [Thread-125975] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:21:18.266 [DEBUG] [Thread-125975] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:21:18.266 [DEBUG] [Thread-125975] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:21:18.266 [DEBUG] [Thread-125975] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:21:18.266 [DEBUG] [Thread-125975] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:21:18.266 [DEBUG] [Thread-125975] [transport.py] [_log()] client lang: <none>
2025-12-31T10:21:18.266 [DEBUG] [Thread-125975] [transport.py] [_log()] server lang: <none>
2025-12-31T10:21:18.266 [DEBUG] [Thread-125975] [transport.py] [_log()] kex follows: False
2025-12-31T10:21:18.267 [DEBUG] [Thread-125975] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:21:18.267 [DEBUG] [Thread-125975] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:21:18.267 [DEBUG] [Thread-125975] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:21:18.267 [DEBUG] [Thread-125975] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:21:18.267 [DEBUG] [Thread-125975] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:21:18.267 [DEBUG] [Thread-125975] [transport.py] [_log()] Compression: none
2025-12-31T10:21:18.267 [DEBUG] [Thread-125975] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:21:18.326 [DEBUG] [Thread-125975] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:21:18.327 [DEBUG] [Thread-125975] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:21:18.328 [DEBUG] [Thread-125975] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T10:21:18.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T10:21:18.329 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:21:18.386 [DEBUG] [Thread-125975] [transport.py] [_log()] userauth is OK
2025-12-31T10:21:18.386 [DEBUG] [Thread-125975] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:21:18.386 [DEBUG] [Thread-125975] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:21:18.386 [DEBUG] [Thread-125975] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T10:21:18.387 [DEBUG] [Thread-125975] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:21:18.405 [INFO] [Thread-125975] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:21: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-12-31T10:21:18.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:21:19.227 [DEBUG] [Thread-125975] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:21:19.227 [DEBUG] [Thread-125975] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:21:19.275 [DEBUG] [Thread-125975] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:21:19.276 [DEBUG] [Thread-125975] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:21:19.285 [DEBUG] [Thread-125975] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:21:19.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:21:19.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T10:21:19.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T10:21:19.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:21:19.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:21:19.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:21:19.322 [DEBUG] [Thread-125975] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:21:20.806 [DEBUG] [Thread-125977 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:21:24.212 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:21:24.213 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:21:35.844 [DEBUG] [Thread-125978 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:21:49.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T10:21:49.329 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T10:21:49.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T10:21:50.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 10, 21, 20), 31.22, 12.08, 0.0, 19.16, 24.91, 0, 0, 0, 2, 0, 0),)
2025-12-31T10:21:50.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 10:21:20
2025-12-31T10:21:50.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T10:21:50.332 [DEBUG] [Thread-125979] [transport.py] [_log()] starting thread (client mode): 0xb6b36800
2025-12-31T10:21:50.332 [DEBUG] [Thread-125979] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:21:50.353 [DEBUG] [Thread-125979] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T10:21:50.353 [INFO] [Thread-125979] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T10:21:50.363 [DEBUG] [Thread-125979] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:21:50.363 [DEBUG] [Thread-125979] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T10:21:50.363 [DEBUG] [Thread-125979] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:21:50.363 [DEBUG] [Thread-125979] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:21:50.363 [DEBUG] [Thread-125979] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:21:50.363 [DEBUG] [Thread-125979] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:21:50.363 [DEBUG] [Thread-125979] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:21:50.363 [DEBUG] [Thread-125979] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:21:50.363 [DEBUG] [Thread-125979] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:21:50.363 [DEBUG] [Thread-125979] [transport.py] [_log()] client lang: <none>
2025-12-31T10:21:50.363 [DEBUG] [Thread-125979] [transport.py] [_log()] server lang: <none>
2025-12-31T10:21:50.363 [DEBUG] [Thread-125979] [transport.py] [_log()] kex follows: False
2025-12-31T10:21:50.363 [DEBUG] [Thread-125979] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:21:50.363 [DEBUG] [Thread-125979] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:21:50.364 [DEBUG] [Thread-125979] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:21:50.364 [DEBUG] [Thread-125979] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:21:50.364 [DEBUG] [Thread-125979] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:21:50.364 [DEBUG] [Thread-125979] [transport.py] [_log()] Compression: none
2025-12-31T10:21:50.364 [DEBUG] [Thread-125979] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:21:50.382 [DEBUG] [Thread-125979] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:21:50.383 [DEBUG] [Thread-125979] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:21:50.384 [DEBUG] [Thread-125979] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T10:21:50.384 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T10:21:50.385 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:21:50.386 [DEBUG] [Thread-125979] [transport.py] [_log()] userauth is OK
2025-12-31T10:21:50.386 [DEBUG] [Thread-125979] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:21:50.386 [DEBUG] [Thread-125979] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:21:50.386 [DEBUG] [Thread-125979] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T10:21:50.386 [DEBUG] [Thread-125979] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:21:50.414 [INFO] [Thread-125979] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:21:50.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:21:50.882 [DEBUG] [Thread-125981 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:21:51.065 [DEBUG] [Thread-125979] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:21:51.065 [DEBUG] [Thread-125979] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:21:51.066 [DEBUG] [Thread-125979] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T10:21:51.106 [DEBUG] [Thread-125979] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:21:51.106 [DEBUG] [Thread-125979] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:21:51.110 [DEBUG] [Thread-125979] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:21:51.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:21:51.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T10:21:51.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T10:21:51.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T10:21:51.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:21:51.134 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T10:21:51.134 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:21:51.134 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:21:51.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T10:21:51.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.348060 -999.00  +24.90  12.18     18   -1.00 1 1 1 1 1   888    0 19.42 -267.30 ----- 9.8 12.2 274.6 13.8 31.9 -27.8 31.2 -26.8 29.4 -28.9 30.0 -26.5
2025-12-31T10:21:51.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T10:21:51.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T10:21:51.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.348060
2025-12-31T10:21:51.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T10:21:51.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T10:21:51.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T10:21:51.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T10:21:51.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T10:21:51.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T10:21:20', tmtdew=31.22, humidity=12.08, cloud=0.0, wind=19.16, temperature=24.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T08:21:12.384', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T10:21:51.137 [DEBUG] [Thread-125979] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:21:51.220 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T10:21:51.233 [DEBUG] [Thread-125983] [transport.py] [_log()] starting thread (client mode): 0xb9590400
2025-12-31T10:21:51.234 [DEBUG] [Thread-125983] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:21:51.248 [DEBUG] [Thread-125983] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T10:21:51.249 [INFO] [Thread-125983] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T10:21:51.256 [DEBUG] [Thread-125983] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:21:51.257 [DEBUG] [Thread-125983] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T10:21:51.257 [DEBUG] [Thread-125983] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:21:51.257 [DEBUG] [Thread-125983] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:21:51.257 [DEBUG] [Thread-125983] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:21:51.257 [DEBUG] [Thread-125983] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:21:51.258 [DEBUG] [Thread-125983] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:21:51.258 [DEBUG] [Thread-125983] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:21:51.258 [DEBUG] [Thread-125983] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:21:51.258 [DEBUG] [Thread-125983] [transport.py] [_log()] client lang: <none>
2025-12-31T10:21:51.258 [DEBUG] [Thread-125983] [transport.py] [_log()] server lang: <none>
2025-12-31T10:21:51.258 [DEBUG] [Thread-125983] [transport.py] [_log()] kex follows: False
2025-12-31T10:21:51.258 [DEBUG] [Thread-125983] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:21:51.258 [DEBUG] [Thread-125983] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:21:51.259 [DEBUG] [Thread-125983] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:21:51.259 [DEBUG] [Thread-125983] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:21:51.259 [DEBUG] [Thread-125983] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:21:51.259 [DEBUG] [Thread-125983] [transport.py] [_log()] Compression: none
2025-12-31T10:21:51.259 [DEBUG] [Thread-125983] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:21:51.314 [DEBUG] [Thread-125983] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:21:51.315 [DEBUG] [Thread-125983] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:21:51.316 [DEBUG] [Thread-125983] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T10:21:51.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T10:21:51.317 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:21:51.370 [DEBUG] [Thread-125983] [transport.py] [_log()] userauth is OK
2025-12-31T10:21:51.370 [DEBUG] [Thread-125983] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:21:51.370 [DEBUG] [Thread-125983] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:21:51.371 [DEBUG] [Thread-125983] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T10:21:51.371 [DEBUG] [Thread-125983] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:21:51.393 [INFO] [Thread-125983] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:21:51.393 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T10:21:51.394 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:21:52.273 [DEBUG] [Thread-125983] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:21:52.273 [DEBUG] [Thread-125983] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:21:52.321 [DEBUG] [Thread-125983] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:21:52.321 [DEBUG] [Thread-125983] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:21:52.329 [DEBUG] [Thread-125983] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:21:52.338 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:21:52.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T10:21:52.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T10:21:52.354 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:21:52.354 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:21:52.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:21:52.362 [DEBUG] [Thread-125983] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:22:05.920 [DEBUG] [Thread-125985 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:22:06.200 [DEBUG] [Thread-125986 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:22:20.967 [DEBUG] [Thread-125987 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:22:22.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T10:22:22.380 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T10:22: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-12-31T10:22:23.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 10, 21, 52), 31.8, 11.78, 0.0, 14.56, 25.53, 0, 0, 0, 2, 0, 0),)
2025-12-31T10:22:23.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 10:21:52
2025-12-31T10:22:23.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T10:22:23.357 [DEBUG] [Thread-125988] [transport.py] [_log()] starting thread (client mode): 0xb95d4af0
2025-12-31T10:22:23.357 [DEBUG] [Thread-125988] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:22:23.377 [DEBUG] [Thread-125988] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T10:22:23.377 [INFO] [Thread-125988] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T10:22:23.379 [DEBUG] [Thread-125988] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:22:23.379 [DEBUG] [Thread-125988] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T10:22:23.379 [DEBUG] [Thread-125988] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:22:23.379 [DEBUG] [Thread-125988] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:22:23.379 [DEBUG] [Thread-125988] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:22:23.379 [DEBUG] [Thread-125988] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:22:23.379 [DEBUG] [Thread-125988] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:22:23.379 [DEBUG] [Thread-125988] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:22:23.379 [DEBUG] [Thread-125988] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:22:23.379 [DEBUG] [Thread-125988] [transport.py] [_log()] client lang: <none>
2025-12-31T10:22:23.379 [DEBUG] [Thread-125988] [transport.py] [_log()] server lang: <none>
2025-12-31T10:22:23.379 [DEBUG] [Thread-125988] [transport.py] [_log()] kex follows: False
2025-12-31T10:22:23.379 [DEBUG] [Thread-125988] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:22:23.379 [DEBUG] [Thread-125988] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:22:23.379 [DEBUG] [Thread-125988] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:22:23.379 [DEBUG] [Thread-125988] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:22:23.379 [DEBUG] [Thread-125988] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:22:23.379 [DEBUG] [Thread-125988] [transport.py] [_log()] Compression: none
2025-12-31T10:22:23.379 [DEBUG] [Thread-125988] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:22:23.392 [DEBUG] [Thread-125988] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:22:23.392 [DEBUG] [Thread-125988] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:22:23.393 [DEBUG] [Thread-125988] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T10:22:23.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T10:22:23.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:22:23.394 [DEBUG] [Thread-125988] [transport.py] [_log()] userauth is OK
2025-12-31T10:22:23.394 [DEBUG] [Thread-125988] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:22:23.394 [DEBUG] [Thread-125988] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:22:23.394 [DEBUG] [Thread-125988] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T10:22:23.394 [DEBUG] [Thread-125988] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:22:23.409 [INFO] [Thread-125988] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:22:23.409 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:22:24.060 [DEBUG] [Thread-125988] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:22:24.060 [DEBUG] [Thread-125988] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:22:24.061 [DEBUG] [Thread-125988] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T10:22:24.101 [DEBUG] [Thread-125988] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:22:24.101 [DEBUG] [Thread-125988] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:22:24.104 [DEBUG] [Thread-125988] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:22:24.116 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:22:24.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T10:22:24.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T10:22:24.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T10:22:24.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:22:24.125 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T10:22:24.125 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:22:24.125 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:22:24.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T10:22:24.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.348755 -999.00  +25.50  12.02     17   -0.90 1 1 1 1 1   888    0 19.49 -249.91 ----- 14.2 12.0 256.4 14.0 32.1 -27.6 31.4 -26.6 29.8 -24.2 30.2 -25.1
2025-12-31T10:22:24.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T10:22:24.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T10:22:24.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.348755
2025-12-31T10:22:24.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T10:22:24.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T10:22:24.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T10:22:24.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T10:22:24.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T10:22:24.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T10:21:52', tmtdew=31.8, humidity=11.78, cloud=0.0, wind=14.56, temperature=25.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T08:22:12.432', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T10:22:24.127 [DEBUG] [Thread-125988] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:22:24.210 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T10:22:24.224 [DEBUG] [Thread-125991] [transport.py] [_log()] starting thread (client mode): 0xb6b18e80
2025-12-31T10:22:24.224 [DEBUG] [Thread-125991] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:22:24.239 [DEBUG] [Thread-125991] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T10:22:24.239 [INFO] [Thread-125991] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T10:22:24.247 [DEBUG] [Thread-125991] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:22:24.247 [DEBUG] [Thread-125991] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T10:22:24.247 [DEBUG] [Thread-125991] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:22:24.247 [DEBUG] [Thread-125991] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:22:24.247 [DEBUG] [Thread-125991] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:22:24.247 [DEBUG] [Thread-125991] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:22:24.247 [DEBUG] [Thread-125991] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:22:24.248 [DEBUG] [Thread-125991] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:22:24.248 [DEBUG] [Thread-125991] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:22:24.248 [DEBUG] [Thread-125991] [transport.py] [_log()] client lang: <none>
2025-12-31T10:22:24.248 [DEBUG] [Thread-125991] [transport.py] [_log()] server lang: <none>
2025-12-31T10:22:24.248 [DEBUG] [Thread-125991] [transport.py] [_log()] kex follows: False
2025-12-31T10:22:24.248 [DEBUG] [Thread-125991] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:22:24.248 [DEBUG] [Thread-125991] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:22:24.248 [DEBUG] [Thread-125991] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:22:24.248 [DEBUG] [Thread-125991] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:22:24.248 [DEBUG] [Thread-125991] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:22:24.248 [DEBUG] [Thread-125991] [transport.py] [_log()] Compression: none
2025-12-31T10:22:24.248 [DEBUG] [Thread-125991] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:22:24.315 [DEBUG] [Thread-125991] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:22:24.316 [DEBUG] [Thread-125991] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:22:24.316 [DEBUG] [Thread-125991] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T10:22:24.317 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T10:22:24.317 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:22:24.355 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:22:24.357 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:22:24.374 [DEBUG] [Thread-125991] [transport.py] [_log()] userauth is OK
2025-12-31T10:22:24.374 [DEBUG] [Thread-125991] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:22:24.374 [DEBUG] [Thread-125991] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:22:24.374 [DEBUG] [Thread-125991] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T10:22:24.374 [DEBUG] [Thread-125991] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:22:24.394 [INFO] [Thread-125991] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:22:24.394 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T10:22:24.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:22:25.232 [DEBUG] [Thread-125991] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:22:25.232 [DEBUG] [Thread-125991] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:22:25.279 [DEBUG] [Thread-125991] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:22:25.279 [DEBUG] [Thread-125991] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:22:25.288 [DEBUG] [Thread-125991] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:22:25.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:22:25.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T10:22:25.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T10:22:25.321 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:22:25.321 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:22:25.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:22:25.332 [DEBUG] [Thread-125991] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:22:35.999 [DEBUG] [Thread-125993 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:22:51.054 [DEBUG] [Thread-125994 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:22:55.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T10:22:55.352 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T10:22:55.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T10:22:56.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 10, 22, 24), 31.93, 11.7, 0.0, 14.8, 25.64, 0, 0, 0, 2, 0, 0),)
2025-12-31T10:22:56.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 10:22:24
2025-12-31T10:22:56.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T10:22:56.364 [DEBUG] [Thread-125995] [transport.py] [_log()] starting thread (client mode): 0xb95d6140
2025-12-31T10:22:56.364 [DEBUG] [Thread-125995] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:22:56.386 [DEBUG] [Thread-125995] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T10:22:56.386 [INFO] [Thread-125995] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T10:22:56.387 [DEBUG] [Thread-125995] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:22:56.387 [DEBUG] [Thread-125995] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T10:22:56.387 [DEBUG] [Thread-125995] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:22:56.387 [DEBUG] [Thread-125995] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:22:56.387 [DEBUG] [Thread-125995] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:22:56.387 [DEBUG] [Thread-125995] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:22:56.387 [DEBUG] [Thread-125995] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:22:56.388 [DEBUG] [Thread-125995] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:22:56.388 [DEBUG] [Thread-125995] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:22:56.388 [DEBUG] [Thread-125995] [transport.py] [_log()] client lang: <none>
2025-12-31T10:22:56.388 [DEBUG] [Thread-125995] [transport.py] [_log()] server lang: <none>
2025-12-31T10:22:56.388 [DEBUG] [Thread-125995] [transport.py] [_log()] kex follows: False
2025-12-31T10:22:56.388 [DEBUG] [Thread-125995] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:22:56.388 [DEBUG] [Thread-125995] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:22:56.388 [DEBUG] [Thread-125995] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:22:56.388 [DEBUG] [Thread-125995] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:22:56.388 [DEBUG] [Thread-125995] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:22:56.388 [DEBUG] [Thread-125995] [transport.py] [_log()] Compression: none
2025-12-31T10:22:56.388 [DEBUG] [Thread-125995] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:22:56.404 [DEBUG] [Thread-125995] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:22:56.405 [DEBUG] [Thread-125995] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:22:56.405 [DEBUG] [Thread-125995] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T10:22:56.406 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T10:22:56.406 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:22:56.408 [DEBUG] [Thread-125995] [transport.py] [_log()] userauth is OK
2025-12-31T10:22:56.408 [DEBUG] [Thread-125995] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:22:56.408 [DEBUG] [Thread-125995] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:22:56.408 [DEBUG] [Thread-125995] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T10:22:56.408 [DEBUG] [Thread-125995] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:22:56.424 [INFO] [Thread-125995] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:22:56.425 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:22:57.034 [DEBUG] [Thread-125995] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:22:57.034 [DEBUG] [Thread-125995] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:22:57.034 [DEBUG] [Thread-125995] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T10:22:57.075 [DEBUG] [Thread-125995] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:22:57.075 [DEBUG] [Thread-125995] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:22:57.078 [DEBUG] [Thread-125995] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:22:57.091 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:22:57.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T10:22:57.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T10:22:57.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T10:22:57.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:22:57.097 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T10:22:57.097 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:22:57.097 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:22:57.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T10:22:57.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.349102 -999.00  +25.00  10.45     17   -1.00 1 1 1 1 1   888    0 19.56 -239.07 ----- 7.3 10.4 250.0 15.0 32.1 -27.4 31.5 -26.4 29.8 -24.3 30.2 -26.2
2025-12-31T10:22:57.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T10:22:57.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T10:22:57.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.349102
2025-12-31T10:22:57.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T10:22:57.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T10:22:57.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T10:22:57.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T10:22:57.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T10:22:57.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T10:22:24', tmtdew=31.93, humidity=11.7, cloud=0.0, wind=14.8, temperature=25.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T08:22:42.413', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T10:22:57.098 [DEBUG] [Thread-125995] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:22:57.172 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T10:23:06.084 [DEBUG] [Thread-125998 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:23:06.253 [DEBUG] [Thread-125999 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:23:21.136 [DEBUG] [Thread-126000 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:23:24.515 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:23:24.516 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:23:36.168 [DEBUG] [Thread-126001 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:23:51.211 [DEBUG] [Thread-126002 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:24:06.245 [DEBUG] [Thread-126003 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:24:06.280 [DEBUG] [Thread-126004 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:24:21.280 [DEBUG] [Thread-126005 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:24:24.658 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:24:24.659 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:24:36.316 [DEBUG] [Thread-126006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:24:51.356 [DEBUG] [Thread-126007 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:25:06.324 [DEBUG] [Thread-126008 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:25:06.392 [DEBUG] [Thread-126009 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:25:09.333 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-12-31T10:25:21.426 [DEBUG] [Thread-126010 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:25:24.799 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:25:24.800 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:25:36.458 [DEBUG] [Thread-126011 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:25:39.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T10:25:39.357 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T10:25:39.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T10:25:40.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 10, 25, 36), 31.25, 12.21, 0.0, 17.03, 25.01, 0, 0, 0, 2, 0, 0),)
2025-12-31T10:25:40.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 10:25:36
2025-12-31T10:25:40.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T10:25:40.356 [DEBUG] [Thread-126012] [transport.py] [_log()] starting thread (client mode): 0xb6bb8580
2025-12-31T10:25:40.356 [DEBUG] [Thread-126012] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:25:40.374 [DEBUG] [Thread-126012] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T10:25:40.374 [INFO] [Thread-126012] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T10:25:40.376 [DEBUG] [Thread-126012] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:25:40.376 [DEBUG] [Thread-126012] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T10:25:40.376 [DEBUG] [Thread-126012] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:25:40.376 [DEBUG] [Thread-126012] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:25:40.376 [DEBUG] [Thread-126012] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:25:40.376 [DEBUG] [Thread-126012] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:25:40.376 [DEBUG] [Thread-126012] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:25:40.376 [DEBUG] [Thread-126012] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:25:40.376 [DEBUG] [Thread-126012] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:25:40.376 [DEBUG] [Thread-126012] [transport.py] [_log()] client lang: <none>
2025-12-31T10:25:40.376 [DEBUG] [Thread-126012] [transport.py] [_log()] server lang: <none>
2025-12-31T10:25:40.376 [DEBUG] [Thread-126012] [transport.py] [_log()] kex follows: False
2025-12-31T10:25:40.376 [DEBUG] [Thread-126012] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:25:40.376 [DEBUG] [Thread-126012] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:25:40.376 [DEBUG] [Thread-126012] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:25:40.376 [DEBUG] [Thread-126012] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:25:40.376 [DEBUG] [Thread-126012] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:25:40.376 [DEBUG] [Thread-126012] [transport.py] [_log()] Compression: none
2025-12-31T10:25:40.376 [DEBUG] [Thread-126012] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:25:40.384 [DEBUG] [Thread-126012] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:25:40.384 [DEBUG] [Thread-126012] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:25:40.385 [DEBUG] [Thread-126012] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T10:25:40.385 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T10:25:40.385 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:25:40.386 [DEBUG] [Thread-126012] [transport.py] [_log()] userauth is OK
2025-12-31T10:25:40.386 [DEBUG] [Thread-126012] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:25:40.386 [DEBUG] [Thread-126012] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:25:40.386 [DEBUG] [Thread-126012] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T10:25:40.386 [DEBUG] [Thread-126012] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:25:40.419 [INFO] [Thread-126012] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:25:40.420 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:25:41.131 [DEBUG] [Thread-126012] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:25:41.131 [DEBUG] [Thread-126012] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:25:41.132 [DEBUG] [Thread-126012] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T10:25:41.172 [DEBUG] [Thread-126012] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:25:41.172 [DEBUG] [Thread-126012] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:25:41.175 [DEBUG] [Thread-126012] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:25:41.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:25:41.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T10:25:41.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T10:25:41.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T10:25:41.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:25:41.198 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T10:25:41.198 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:25:41.198 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:25:41.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T10:25:41.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.350491 -999.00  +25.50  17.63     17   -0.90 1 1 1 1 1   888    0 20.74 -197.69 ----- 14.8 17.6 284.2 20.2 32.7 -26.8 31.9 -27.0 30.3 -23.8 30.8 -24.7
2025-12-31T10:25:41.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T10:25:41.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T10:25:41.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.350491
2025-12-31T10:25:41.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T10:25:41.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T10:25:41.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T10:25:41.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T10:25:41.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T10:25:41.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T10:25:36', tmtdew=31.25, humidity=12.21, cloud=0.0, wind=17.03, temperature=25.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T08:24:42.422', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T10:25:41.201 [DEBUG] [Thread-126012] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:25:41.285 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T10:25:41.297 [DEBUG] [Thread-126015] [transport.py] [_log()] starting thread (client mode): 0xb95d6830
2025-12-31T10:25:41.297 [DEBUG] [Thread-126015] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:25:41.311 [DEBUG] [Thread-126015] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T10:25:41.311 [INFO] [Thread-126015] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T10:25:41.319 [DEBUG] [Thread-126015] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:25:41.319 [DEBUG] [Thread-126015] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T10:25:41.319 [DEBUG] [Thread-126015] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:25:41.319 [DEBUG] [Thread-126015] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:25:41.319 [DEBUG] [Thread-126015] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:25:41.319 [DEBUG] [Thread-126015] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:25:41.319 [DEBUG] [Thread-126015] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:25:41.319 [DEBUG] [Thread-126015] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:25:41.319 [DEBUG] [Thread-126015] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:25:41.320 [DEBUG] [Thread-126015] [transport.py] [_log()] client lang: <none>
2025-12-31T10:25:41.320 [DEBUG] [Thread-126015] [transport.py] [_log()] server lang: <none>
2025-12-31T10:25:41.320 [DEBUG] [Thread-126015] [transport.py] [_log()] kex follows: False
2025-12-31T10:25:41.320 [DEBUG] [Thread-126015] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:25:41.320 [DEBUG] [Thread-126015] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:25:41.320 [DEBUG] [Thread-126015] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:25:41.320 [DEBUG] [Thread-126015] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:25:41.320 [DEBUG] [Thread-126015] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:25:41.321 [DEBUG] [Thread-126015] [transport.py] [_log()] Compression: none
2025-12-31T10:25:41.321 [DEBUG] [Thread-126015] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:25:41.378 [DEBUG] [Thread-126015] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:25:41.379 [DEBUG] [Thread-126015] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:25:41.380 [DEBUG] [Thread-126015] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T10:25:41.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T10:25:41.381 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:25:41.438 [DEBUG] [Thread-126015] [transport.py] [_log()] userauth is OK
2025-12-31T10:25:41.438 [DEBUG] [Thread-126015] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:25:41.438 [DEBUG] [Thread-126015] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:25:41.439 [DEBUG] [Thread-126015] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T10:25:41.439 [DEBUG] [Thread-126015] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:25:41.461 [INFO] [Thread-126015] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:25:41.461 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T10:25:41.462 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:25:42.303 [DEBUG] [Thread-126015] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:25:42.304 [DEBUG] [Thread-126015] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:25:42.351 [DEBUG] [Thread-126015] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:25:42.352 [DEBUG] [Thread-126015] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:25:42.361 [DEBUG] [Thread-126015] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:25:42.370 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:25:42.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T10:25:42.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T10:25:42.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:25:42.389 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:25:42.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:25:42.398 [DEBUG] [Thread-126015] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:25:51.500 [DEBUG] [Thread-126017 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:26:06.374 [DEBUG] [Thread-126018 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:26:06.549 [DEBUG] [Thread-126019 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:26:12.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T10:26:12.397 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T10:26:12.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T10:26:13.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 10, 26, 8), 31.34, 12.18, 0.0, 14.89, 25.24, 0, 0, 0, 2, 0, 0),)
2025-12-31T10:26:13.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 10:26:08
2025-12-31T10:26:13.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T10:26:13.390 [DEBUG] [Thread-126020] [transport.py] [_log()] starting thread (client mode): 0xb6bb0550
2025-12-31T10:26:13.390 [DEBUG] [Thread-126020] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:26:13.411 [DEBUG] [Thread-126020] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T10:26:13.411 [INFO] [Thread-126020] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T10:26:13.414 [DEBUG] [Thread-126020] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:26:13.414 [DEBUG] [Thread-126020] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T10:26:13.414 [DEBUG] [Thread-126020] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:26:13.414 [DEBUG] [Thread-126020] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:26:13.414 [DEBUG] [Thread-126020] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:26:13.414 [DEBUG] [Thread-126020] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:26:13.414 [DEBUG] [Thread-126020] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:26:13.414 [DEBUG] [Thread-126020] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:26:13.414 [DEBUG] [Thread-126020] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:26:13.414 [DEBUG] [Thread-126020] [transport.py] [_log()] client lang: <none>
2025-12-31T10:26:13.414 [DEBUG] [Thread-126020] [transport.py] [_log()] server lang: <none>
2025-12-31T10:26:13.414 [DEBUG] [Thread-126020] [transport.py] [_log()] kex follows: False
2025-12-31T10:26:13.414 [DEBUG] [Thread-126020] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:26:13.415 [DEBUG] [Thread-126020] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:26:13.415 [DEBUG] [Thread-126020] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:26:13.415 [DEBUG] [Thread-126020] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:26:13.415 [DEBUG] [Thread-126020] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:26:13.415 [DEBUG] [Thread-126020] [transport.py] [_log()] Compression: none
2025-12-31T10:26:13.415 [DEBUG] [Thread-126020] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:26:13.432 [DEBUG] [Thread-126020] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:26:13.432 [DEBUG] [Thread-126020] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:26:13.433 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T10:26:13.433 [DEBUG] [Thread-126020] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T10:26:13.434 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:26:13.435 [DEBUG] [Thread-126020] [transport.py] [_log()] userauth is OK
2025-12-31T10:26:13.435 [DEBUG] [Thread-126020] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:26:13.435 [DEBUG] [Thread-126020] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:26:13.435 [DEBUG] [Thread-126020] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T10:26:13.435 [DEBUG] [Thread-126020] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:26:13.450 [INFO] [Thread-126020] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:26:13.451 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:26:14.051 [DEBUG] [Thread-126020] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:26:14.051 [DEBUG] [Thread-126020] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:26:14.052 [DEBUG] [Thread-126020] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T10:26:14.093 [DEBUG] [Thread-126020] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:26:14.094 [DEBUG] [Thread-126020] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:26:14.096 [DEBUG] [Thread-126020] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:26:14.108 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:26:14.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T10:26:14.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T10:26:14.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T10:26:14.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:26:14.118 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T10:26:14.118 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:26:14.118 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:26:14.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T10:26:14.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.351185 -999.00  +25.30  17.55     17   -1.10 1 1 1 1 1   888    0 20.86 -192.43 ----- 17.6 17.6 275.0 22.9 32.7 -26.7 31.9 -26.3 30.3 -24.0 30.9 -25.0
2025-12-31T10:26:14.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T10:26:14.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T10:26:14.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.351185
2025-12-31T10:26:14.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T10:26:14.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T10:26:14.120 [DEBUG] [Thread-126020] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:26:14.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T10:26:14.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T10:26:14.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T10:26:14.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T10:26:08', tmtdew=31.34, humidity=12.18, cloud=0.0, wind=14.89, temperature=25.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T08:25:42.384', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T10:26:14.208 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T10:26:14.220 [DEBUG] [Thread-126023] [transport.py] [_log()] starting thread (client mode): 0xb95f2b30
2025-12-31T10:26:14.221 [DEBUG] [Thread-126023] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:26:14.236 [DEBUG] [Thread-126023] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T10:26:14.236 [INFO] [Thread-126023] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T10:26:14.243 [DEBUG] [Thread-126023] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:26:14.244 [DEBUG] [Thread-126023] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T10:26:14.244 [DEBUG] [Thread-126023] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:26:14.244 [DEBUG] [Thread-126023] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:26:14.244 [DEBUG] [Thread-126023] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:26:14.244 [DEBUG] [Thread-126023] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:26:14.244 [DEBUG] [Thread-126023] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:26:14.244 [DEBUG] [Thread-126023] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:26:14.244 [DEBUG] [Thread-126023] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:26:14.244 [DEBUG] [Thread-126023] [transport.py] [_log()] client lang: <none>
2025-12-31T10:26:14.244 [DEBUG] [Thread-126023] [transport.py] [_log()] server lang: <none>
2025-12-31T10:26:14.244 [DEBUG] [Thread-126023] [transport.py] [_log()] kex follows: False
2025-12-31T10:26:14.244 [DEBUG] [Thread-126023] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:26:14.244 [DEBUG] [Thread-126023] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:26:14.244 [DEBUG] [Thread-126023] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:26:14.244 [DEBUG] [Thread-126023] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:26:14.244 [DEBUG] [Thread-126023] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:26:14.244 [DEBUG] [Thread-126023] [transport.py] [_log()] Compression: none
2025-12-31T10:26:14.244 [DEBUG] [Thread-126023] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:26:14.302 [DEBUG] [Thread-126023] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:26:14.302 [DEBUG] [Thread-126023] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:26:14.303 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T10:26:14.304 [DEBUG] [Thread-126023] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T10:26:14.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:26:14.357 [DEBUG] [Thread-126023] [transport.py] [_log()] userauth is OK
2025-12-31T10:26:14.358 [DEBUG] [Thread-126023] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:26:14.358 [DEBUG] [Thread-126023] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:26:14.358 [DEBUG] [Thread-126023] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T10:26:14.358 [DEBUG] [Thread-126023] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:26:14.379 [INFO] [Thread-126023] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:26:14.379 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T10:26:14.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:26:15.202 [DEBUG] [Thread-126023] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:26:15.202 [DEBUG] [Thread-126023] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:26:15.251 [DEBUG] [Thread-126023] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:26:15.252 [DEBUG] [Thread-126023] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:26:15.261 [DEBUG] [Thread-126023] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:26:15.270 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:26:15.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T10:26:15.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T10:26:15.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:26:15.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:26:15.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:26:15.299 [DEBUG] [Thread-126023] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:26:21.586 [DEBUG] [Thread-126025 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:26:24.939 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:26:24.941 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:26:36.638 [DEBUG] [Thread-126026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:26:45.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T10:26:45.321 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T10:26:45.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T10:26:46.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 10, 26, 40), 32.21, 11.4, 0.0, 17.26, 25.59, 0, 0, 0, 2, 0, 0),)
2025-12-31T10:26:46.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 10:26:40
2025-12-31T10:26:46.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T10:26:46.340 [DEBUG] [Thread-126027] [transport.py] [_log()] starting thread (client mode): 0xb95f05b0
2025-12-31T10:26:46.340 [DEBUG] [Thread-126027] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:26:46.359 [DEBUG] [Thread-126027] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T10:26:46.360 [INFO] [Thread-126027] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T10:26:46.363 [DEBUG] [Thread-126027] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:26:46.363 [DEBUG] [Thread-126027] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T10:26:46.363 [DEBUG] [Thread-126027] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:26:46.363 [DEBUG] [Thread-126027] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:26:46.363 [DEBUG] [Thread-126027] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:26:46.363 [DEBUG] [Thread-126027] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:26:46.363 [DEBUG] [Thread-126027] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:26:46.363 [DEBUG] [Thread-126027] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:26:46.363 [DEBUG] [Thread-126027] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:26:46.363 [DEBUG] [Thread-126027] [transport.py] [_log()] client lang: <none>
2025-12-31T10:26:46.363 [DEBUG] [Thread-126027] [transport.py] [_log()] server lang: <none>
2025-12-31T10:26:46.363 [DEBUG] [Thread-126027] [transport.py] [_log()] kex follows: False
2025-12-31T10:26:46.363 [DEBUG] [Thread-126027] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:26:46.363 [DEBUG] [Thread-126027] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:26:46.363 [DEBUG] [Thread-126027] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:26:46.363 [DEBUG] [Thread-126027] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:26:46.363 [DEBUG] [Thread-126027] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:26:46.363 [DEBUG] [Thread-126027] [transport.py] [_log()] Compression: none
2025-12-31T10:26:46.363 [DEBUG] [Thread-126027] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:26:46.378 [DEBUG] [Thread-126027] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:26:46.378 [DEBUG] [Thread-126027] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:26:46.378 [DEBUG] [Thread-126027] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T10:26:46.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T10:26:46.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:26:46.379 [DEBUG] [Thread-126027] [transport.py] [_log()] userauth is OK
2025-12-31T10:26:46.379 [DEBUG] [Thread-126027] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:26:46.379 [DEBUG] [Thread-126027] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:26:46.379 [DEBUG] [Thread-126027] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T10:26:46.379 [DEBUG] [Thread-126027] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:26:46.388 [INFO] [Thread-126027] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:26:46.389 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:26:47.181 [DEBUG] [Thread-126027] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:26:47.181 [DEBUG] [Thread-126027] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:26:47.181 [DEBUG] [Thread-126027] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T10:26:47.222 [DEBUG] [Thread-126027] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:26:47.222 [DEBUG] [Thread-126027] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:26:47.224 [DEBUG] [Thread-126027] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:26:47.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:26:47.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T10:26:47.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T10:26:47.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T10:26:47.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:26:47.242 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T10:26:47.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:26:47.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:26:47.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T10:26:47.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.351533 -999.00  +25.30  12.61     17   -1.40 1 1 1 1 1   888    0 21.04 -186.91 ----- 11.9 12.6 276.8 22.0 32.5 -29.3 31.9 -26.1 30.0 -26.9 30.8 -26.5
2025-12-31T10:26:47.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T10:26:47.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T10:26:47.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.351533
2025-12-31T10:26:47.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T10:26:47.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T10:26:47.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T10:26:47.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T10:26:47.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T10:26:47.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T10:26:40', tmtdew=32.21, humidity=11.4, cloud=0.0, wind=17.26, temperature=25.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T08:26:12.451', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T10:26:47.243 [DEBUG] [Thread-126027] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:26:47.317 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T10:26:47.328 [DEBUG] [Thread-126030] [transport.py] [_log()] starting thread (client mode): 0xb6b34d60
2025-12-31T10:26:47.328 [DEBUG] [Thread-126030] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:26:47.343 [DEBUG] [Thread-126030] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T10:26:47.343 [INFO] [Thread-126030] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T10:26:47.351 [DEBUG] [Thread-126030] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:26:47.351 [DEBUG] [Thread-126030] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T10:26:47.351 [DEBUG] [Thread-126030] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:26:47.351 [DEBUG] [Thread-126030] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:26:47.351 [DEBUG] [Thread-126030] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:26:47.351 [DEBUG] [Thread-126030] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:26:47.351 [DEBUG] [Thread-126030] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:26:47.351 [DEBUG] [Thread-126030] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:26:47.351 [DEBUG] [Thread-126030] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:26:47.351 [DEBUG] [Thread-126030] [transport.py] [_log()] client lang: <none>
2025-12-31T10:26:47.351 [DEBUG] [Thread-126030] [transport.py] [_log()] server lang: <none>
2025-12-31T10:26:47.351 [DEBUG] [Thread-126030] [transport.py] [_log()] kex follows: False
2025-12-31T10:26:47.351 [DEBUG] [Thread-126030] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:26:47.351 [DEBUG] [Thread-126030] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:26:47.351 [DEBUG] [Thread-126030] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:26:47.351 [DEBUG] [Thread-126030] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:26:47.351 [DEBUG] [Thread-126030] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:26:47.351 [DEBUG] [Thread-126030] [transport.py] [_log()] Compression: none
2025-12-31T10:26:47.351 [DEBUG] [Thread-126030] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:26:47.408 [DEBUG] [Thread-126030] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:26:47.408 [DEBUG] [Thread-126030] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:26:47.408 [DEBUG] [Thread-126030] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T10:26:47.408 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T10:26:47.409 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:26:47.465 [DEBUG] [Thread-126030] [transport.py] [_log()] userauth is OK
2025-12-31T10:26:47.465 [DEBUG] [Thread-126030] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:26:47.465 [DEBUG] [Thread-126030] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:26:47.465 [DEBUG] [Thread-126030] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T10:26:47.465 [DEBUG] [Thread-126030] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:26:47.480 [INFO] [Thread-126030] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:26:47.480 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T10:26:47.480 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:26:48.377 [DEBUG] [Thread-126030] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:26:48.378 [DEBUG] [Thread-126030] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:26:48.426 [DEBUG] [Thread-126030] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:26:48.426 [DEBUG] [Thread-126030] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:26:48.435 [DEBUG] [Thread-126030] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:26:48.445 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:26:48.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T10:26:48.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T10:26:48.462 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:26:48.462 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:26:48.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:26:48.470 [DEBUG] [Thread-126030] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:26:51.679 [DEBUG] [Thread-126032 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:27:06.428 [DEBUG] [Thread-126033 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:27:06.730 [DEBUG] [Thread-126034 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:27:18.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T10:27:18.467 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T10:27:18.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T10:27:19.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 10, 27, 13), 32.56, 11.15, 0.0, 16.36, 25.74, 0, 0, 0, 2, 0, 0),)
2025-12-31T10:27:19.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 10:27:13
2025-12-31T10:27:19.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T10:27:19.462 [DEBUG] [Thread-126035] [transport.py] [_log()] starting thread (client mode): 0xb6b374c0
2025-12-31T10:27:19.462 [DEBUG] [Thread-126035] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:27:19.481 [DEBUG] [Thread-126035] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T10:27:19.482 [INFO] [Thread-126035] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T10:27:19.484 [DEBUG] [Thread-126035] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:27:19.485 [DEBUG] [Thread-126035] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T10:27:19.485 [DEBUG] [Thread-126035] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:27:19.485 [DEBUG] [Thread-126035] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:27:19.485 [DEBUG] [Thread-126035] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:27:19.485 [DEBUG] [Thread-126035] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:27:19.485 [DEBUG] [Thread-126035] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:27:19.485 [DEBUG] [Thread-126035] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:27:19.485 [DEBUG] [Thread-126035] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:27:19.485 [DEBUG] [Thread-126035] [transport.py] [_log()] client lang: <none>
2025-12-31T10:27:19.485 [DEBUG] [Thread-126035] [transport.py] [_log()] server lang: <none>
2025-12-31T10:27:19.485 [DEBUG] [Thread-126035] [transport.py] [_log()] kex follows: False
2025-12-31T10:27:19.485 [DEBUG] [Thread-126035] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:27:19.485 [DEBUG] [Thread-126035] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:27:19.485 [DEBUG] [Thread-126035] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:27:19.485 [DEBUG] [Thread-126035] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:27:19.485 [DEBUG] [Thread-126035] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:27:19.485 [DEBUG] [Thread-126035] [transport.py] [_log()] Compression: none
2025-12-31T10:27:19.485 [DEBUG] [Thread-126035] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:27:19.502 [DEBUG] [Thread-126035] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:27:19.502 [DEBUG] [Thread-126035] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:27:19.503 [DEBUG] [Thread-126035] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T10:27:19.503 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T10:27:19.504 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:27:19.505 [DEBUG] [Thread-126035] [transport.py] [_log()] userauth is OK
2025-12-31T10:27:19.505 [DEBUG] [Thread-126035] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:27:19.505 [DEBUG] [Thread-126035] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:27:19.505 [DEBUG] [Thread-126035] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T10:27:19.505 [DEBUG] [Thread-126035] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:27:19.529 [INFO] [Thread-126035] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:27:19.530 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:27:20.151 [DEBUG] [Thread-126035] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:27:20.151 [DEBUG] [Thread-126035] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:27:20.152 [DEBUG] [Thread-126035] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T10:27:20.193 [DEBUG] [Thread-126035] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:27:20.194 [DEBUG] [Thread-126035] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:27:20.197 [DEBUG] [Thread-126035] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:27:20.208 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:27:20.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T10:27:20.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T10:27:20.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T10:27:20.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:27:20.219 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T10:27:20.219 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:27:20.219 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:27:20.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T10:27:20.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.351880 -999.00  +25.50  12.18     16   -1.30 1 1 1 1 1   888    0 21.68 -166.06 ----- 15.6 12.2 272.8 18.2 32.6 -27.5 32.0 -26.5 30.0 -26.0 30.9 -25.8
2025-12-31T10:27:20.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T10:27:20.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T10:27:20.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.351880
2025-12-31T10:27:20.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T10:27:20.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T10:27:20.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T10:27:20.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T10:27:20.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T10:27:20.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T10:27:13', tmtdew=32.56, humidity=11.15, cloud=0.0, wind=16.36, temperature=25.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T08:26:42.432', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T10:27:20.222 [DEBUG] [Thread-126035] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:27:20.306 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T10:27:20.318 [DEBUG] [Thread-126038] [transport.py] [_log()] starting thread (client mode): 0xb6bb2470
2025-12-31T10:27:20.318 [DEBUG] [Thread-126038] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:27:20.332 [DEBUG] [Thread-126038] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T10:27:20.332 [INFO] [Thread-126038] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T10:27:20.340 [DEBUG] [Thread-126038] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:27:20.340 [DEBUG] [Thread-126038] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T10:27:20.340 [DEBUG] [Thread-126038] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:27:20.340 [DEBUG] [Thread-126038] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:27:20.341 [DEBUG] [Thread-126038] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:27:20.341 [DEBUG] [Thread-126038] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:27:20.341 [DEBUG] [Thread-126038] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:27:20.341 [DEBUG] [Thread-126038] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:27:20.341 [DEBUG] [Thread-126038] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:27:20.341 [DEBUG] [Thread-126038] [transport.py] [_log()] client lang: <none>
2025-12-31T10:27:20.341 [DEBUG] [Thread-126038] [transport.py] [_log()] server lang: <none>
2025-12-31T10:27:20.341 [DEBUG] [Thread-126038] [transport.py] [_log()] kex follows: False
2025-12-31T10:27:20.341 [DEBUG] [Thread-126038] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:27:20.342 [DEBUG] [Thread-126038] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:27:20.342 [DEBUG] [Thread-126038] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:27:20.342 [DEBUG] [Thread-126038] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:27:20.342 [DEBUG] [Thread-126038] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:27:20.342 [DEBUG] [Thread-126038] [transport.py] [_log()] Compression: none
2025-12-31T10:27:20.342 [DEBUG] [Thread-126038] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:27:20.398 [DEBUG] [Thread-126038] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:27:20.399 [DEBUG] [Thread-126038] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:27:20.400 [DEBUG] [Thread-126038] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T10:27:20.400 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T10:27:20.401 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:27:20.458 [DEBUG] [Thread-126038] [transport.py] [_log()] userauth is OK
2025-12-31T10:27:20.458 [DEBUG] [Thread-126038] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:27:20.459 [DEBUG] [Thread-126038] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:27:20.459 [DEBUG] [Thread-126038] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T10:27:20.459 [DEBUG] [Thread-126038] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:27:20.478 [INFO] [Thread-126038] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:27:20.478 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T10:27:20.479 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:27:21.310 [DEBUG] [Thread-126038] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:27:21.310 [DEBUG] [Thread-126038] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:27:21.358 [DEBUG] [Thread-126038] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:27:21.358 [DEBUG] [Thread-126038] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:27:21.366 [DEBUG] [Thread-126038] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:27:21.374 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:27:21.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T10:27:21.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T10:27:21.390 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:27:21.390 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:27:21.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:27:21.398 [DEBUG] [Thread-126038] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:27:21.764 [DEBUG] [Thread-126040 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:27:25.081 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:27:25.081 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:27:36.811 [DEBUG] [Thread-126041 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:27:51.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T10:27:51.406 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T10:27:51.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T10:27:51.846 [DEBUG] [Thread-126042 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:27:52.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 10, 27, 45), 32.44, 11.25, 0.0, 18.62, 25.79, 0, 0, 0, 2, 0, 0),)
2025-12-31T10:27:52.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 10:27:45
2025-12-31T10:27:52.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T10:27:52.397 [DEBUG] [Thread-126043] [transport.py] [_log()] starting thread (client mode): 0xb6bb3580
2025-12-31T10:27:52.397 [DEBUG] [Thread-126043] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:27:52.418 [DEBUG] [Thread-126043] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T10:27:52.418 [INFO] [Thread-126043] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T10:27:52.421 [DEBUG] [Thread-126043] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:27:52.421 [DEBUG] [Thread-126043] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T10:27:52.421 [DEBUG] [Thread-126043] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:27:52.421 [DEBUG] [Thread-126043] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:27:52.421 [DEBUG] [Thread-126043] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:27:52.421 [DEBUG] [Thread-126043] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:27:52.421 [DEBUG] [Thread-126043] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:27:52.421 [DEBUG] [Thread-126043] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:27:52.421 [DEBUG] [Thread-126043] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:27:52.421 [DEBUG] [Thread-126043] [transport.py] [_log()] client lang: <none>
2025-12-31T10:27:52.421 [DEBUG] [Thread-126043] [transport.py] [_log()] server lang: <none>
2025-12-31T10:27:52.421 [DEBUG] [Thread-126043] [transport.py] [_log()] kex follows: False
2025-12-31T10:27:52.422 [DEBUG] [Thread-126043] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:27:52.422 [DEBUG] [Thread-126043] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:27:52.422 [DEBUG] [Thread-126043] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:27:52.422 [DEBUG] [Thread-126043] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:27:52.422 [DEBUG] [Thread-126043] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:27:52.422 [DEBUG] [Thread-126043] [transport.py] [_log()] Compression: none
2025-12-31T10:27:52.422 [DEBUG] [Thread-126043] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:27:52.438 [DEBUG] [Thread-126043] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:27:52.439 [DEBUG] [Thread-126043] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:27:52.439 [DEBUG] [Thread-126043] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T10:27:52.440 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T10:27:52.440 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:27:52.441 [DEBUG] [Thread-126043] [transport.py] [_log()] userauth is OK
2025-12-31T10:27:52.441 [DEBUG] [Thread-126043] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:27:52.441 [DEBUG] [Thread-126043] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:27:52.442 [DEBUG] [Thread-126043] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T10:27:52.442 [DEBUG] [Thread-126043] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:27:52.457 [INFO] [Thread-126043] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:27:52.457 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:27:53.223 [DEBUG] [Thread-126043] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:27:53.223 [DEBUG] [Thread-126043] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:27:53.223 [DEBUG] [Thread-126043] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T10:27:53.264 [DEBUG] [Thread-126043] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:27:53.264 [DEBUG] [Thread-126043] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:27:53.268 [DEBUG] [Thread-126043] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:27:53.280 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:27:53.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T10:27:53.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T10:27:53.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T10:27:53.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:27:53.292 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T10:27:53.292 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:27:53.293 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:27:53.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T10:27:53.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.352227 -999.00  +25.20  12.36     17   -1.40 1 1 1 1 1   888    0 21.15 -167.53 ----- 13.2 12.4 265.6 23.3 32.5 -28.9 31.9 -27.4 30.1 -26.2 30.7 -26.9
2025-12-31T10:27:53.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T10:27:53.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T10:27:53.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.352227
2025-12-31T10:27:53.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T10:27:53.294 [DEBUG] [Thread-126043] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:27:53.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T10:27:53.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T10:27:53.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T10:27:53.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T10:27:53.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T10:27:45', tmtdew=32.44, humidity=11.25, cloud=0.0, wind=18.62, temperature=25.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T08:27:12.413', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T10: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-12-31T10:27:53.390 [DEBUG] [Thread-126046] [transport.py] [_log()] starting thread (client mode): 0xb6b36a10
2025-12-31T10:27:53.391 [DEBUG] [Thread-126046] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:27:53.407 [DEBUG] [Thread-126046] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T10:27:53.408 [INFO] [Thread-126046] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T10:27:53.415 [DEBUG] [Thread-126046] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:27:53.416 [DEBUG] [Thread-126046] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T10:27:53.416 [DEBUG] [Thread-126046] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:27:53.416 [DEBUG] [Thread-126046] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:27:53.416 [DEBUG] [Thread-126046] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:27:53.416 [DEBUG] [Thread-126046] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:27:53.416 [DEBUG] [Thread-126046] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:27:53.416 [DEBUG] [Thread-126046] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:27:53.416 [DEBUG] [Thread-126046] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:27:53.417 [DEBUG] [Thread-126046] [transport.py] [_log()] client lang: <none>
2025-12-31T10:27:53.417 [DEBUG] [Thread-126046] [transport.py] [_log()] server lang: <none>
2025-12-31T10:27:53.417 [DEBUG] [Thread-126046] [transport.py] [_log()] kex follows: False
2025-12-31T10:27:53.417 [DEBUG] [Thread-126046] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:27:53.417 [DEBUG] [Thread-126046] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:27:53.417 [DEBUG] [Thread-126046] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:27:53.417 [DEBUG] [Thread-126046] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:27:53.418 [DEBUG] [Thread-126046] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:27:53.418 [DEBUG] [Thread-126046] [transport.py] [_log()] Compression: none
2025-12-31T10:27:53.418 [DEBUG] [Thread-126046] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:27:53.478 [DEBUG] [Thread-126046] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:27:53.479 [DEBUG] [Thread-126046] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:27:53.479 [DEBUG] [Thread-126046] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T10:27:53.479 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T10:27:53.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:27:53.534 [DEBUG] [Thread-126046] [transport.py] [_log()] userauth is OK
2025-12-31T10:27:53.534 [DEBUG] [Thread-126046] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:27:53.534 [DEBUG] [Thread-126046] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:27:53.534 [DEBUG] [Thread-126046] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T10:27:53.534 [DEBUG] [Thread-126046] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:27:53.555 [INFO] [Thread-126046] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:27:53.556 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T10:27:53.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:27:54.391 [DEBUG] [Thread-126046] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:27:54.391 [DEBUG] [Thread-126046] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:27:54.439 [DEBUG] [Thread-126046] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:27:54.439 [DEBUG] [Thread-126046] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:27:54.448 [DEBUG] [Thread-126046] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:27:54.457 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:27:54.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T10:27:54.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T10:27:54.475 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:27:54.475 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:27:54.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:27:54.483 [DEBUG] [Thread-126046] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:28:06.496 [DEBUG] [Thread-126048 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:28:06.879 [DEBUG] [Thread-126049 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:28:21.939 [DEBUG] [Thread-126050 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:28:24.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T10:28:24.506 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T10:28:24.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T10:28:25.220 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:28:25.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 10, 28, 17), 32.23, 11.4, 0.0, 18.72, 25.64, 0, 0, 0, 2, 0, 0),)
2025-12-31T10:28:25.221 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:28:25.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 10:28:17
2025-12-31T10:28:25.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T10:28:25.518 [DEBUG] [Thread-126051] [transport.py] [_log()] starting thread (client mode): 0xb95f0100
2025-12-31T10:28:25.518 [DEBUG] [Thread-126051] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:28:25.537 [DEBUG] [Thread-126051] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T10:28:25.538 [INFO] [Thread-126051] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T10:28:25.541 [DEBUG] [Thread-126051] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:28:25.541 [DEBUG] [Thread-126051] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T10:28:25.541 [DEBUG] [Thread-126051] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:28:25.541 [DEBUG] [Thread-126051] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:28:25.541 [DEBUG] [Thread-126051] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:28:25.541 [DEBUG] [Thread-126051] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:28:25.541 [DEBUG] [Thread-126051] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:28:25.541 [DEBUG] [Thread-126051] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:28:25.541 [DEBUG] [Thread-126051] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:28:25.541 [DEBUG] [Thread-126051] [transport.py] [_log()] client lang: <none>
2025-12-31T10:28:25.541 [DEBUG] [Thread-126051] [transport.py] [_log()] server lang: <none>
2025-12-31T10:28:25.541 [DEBUG] [Thread-126051] [transport.py] [_log()] kex follows: False
2025-12-31T10:28:25.541 [DEBUG] [Thread-126051] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:28:25.541 [DEBUG] [Thread-126051] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:28:25.541 [DEBUG] [Thread-126051] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:28:25.541 [DEBUG] [Thread-126051] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:28:25.541 [DEBUG] [Thread-126051] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:28:25.541 [DEBUG] [Thread-126051] [transport.py] [_log()] Compression: none
2025-12-31T10:28:25.541 [DEBUG] [Thread-126051] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:28:25.560 [DEBUG] [Thread-126051] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:28:25.561 [DEBUG] [Thread-126051] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:28:25.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T10:28:25.561 [DEBUG] [Thread-126051] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T10:28:25.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:28:25.563 [DEBUG] [Thread-126051] [transport.py] [_log()] userauth is OK
2025-12-31T10:28:25.563 [DEBUG] [Thread-126051] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:28:25.563 [DEBUG] [Thread-126051] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:28:25.563 [DEBUG] [Thread-126051] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T10:28:25.563 [DEBUG] [Thread-126051] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:28:25.576 [INFO] [Thread-126051] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:28:25.577 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:28:26.237 [DEBUG] [Thread-126051] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:28:26.237 [DEBUG] [Thread-126051] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:28:26.238 [DEBUG] [Thread-126051] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T10:28:26.278 [DEBUG] [Thread-126051] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:28:26.278 [DEBUG] [Thread-126051] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:28:26.282 [DEBUG] [Thread-126051] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:28:26.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:28:26.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T10:28:26.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T10:28:26.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T10:28:26.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:28:26.307 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T10:28:26.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:28:26.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:28:26.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T10:28:26.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.352574 -999.00  +25.00  14.41     17   -1.40 1 1 1 1 1   888    0 22.00 -145.38 ----- 18.9 14.4 272.2 23.0 32.4 -30.5 31.9 -27.5 29.9 -26.2 30.6 -27.9
2025-12-31T10:28:26.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T10:28:26.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T10:28:26.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.352574
2025-12-31T10:28:26.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T10:28:26.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T10:28:26.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T10:28:26.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T10:28:26.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T10:28:26.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T10:28:17', tmtdew=32.23, humidity=11.4, cloud=0.0, wind=18.72, temperature=25.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T08:27:42.394', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T10:28:26.310 [DEBUG] [Thread-126051] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:28:26.394 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T10:28:26.406 [DEBUG] [Thread-126054] [transport.py] [_log()] starting thread (client mode): 0xb6b37f10
2025-12-31T10:28:26.406 [DEBUG] [Thread-126054] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:28:26.420 [DEBUG] [Thread-126054] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T10:28:26.420 [INFO] [Thread-126054] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T10:28:26.428 [DEBUG] [Thread-126054] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:28:26.428 [DEBUG] [Thread-126054] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T10:28:26.429 [DEBUG] [Thread-126054] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:28:26.429 [DEBUG] [Thread-126054] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:28:26.429 [DEBUG] [Thread-126054] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:28:26.429 [DEBUG] [Thread-126054] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:28:26.429 [DEBUG] [Thread-126054] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:28:26.429 [DEBUG] [Thread-126054] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:28:26.430 [DEBUG] [Thread-126054] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:28:26.430 [DEBUG] [Thread-126054] [transport.py] [_log()] client lang: <none>
2025-12-31T10:28:26.430 [DEBUG] [Thread-126054] [transport.py] [_log()] server lang: <none>
2025-12-31T10:28:26.430 [DEBUG] [Thread-126054] [transport.py] [_log()] kex follows: False
2025-12-31T10:28:26.430 [DEBUG] [Thread-126054] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:28:26.430 [DEBUG] [Thread-126054] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:28:26.430 [DEBUG] [Thread-126054] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:28:26.430 [DEBUG] [Thread-126054] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:28:26.430 [DEBUG] [Thread-126054] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:28:26.430 [DEBUG] [Thread-126054] [transport.py] [_log()] Compression: none
2025-12-31T10:28:26.430 [DEBUG] [Thread-126054] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:28:26.485 [DEBUG] [Thread-126054] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:28:26.486 [DEBUG] [Thread-126054] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:28:26.487 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T10:28:26.487 [DEBUG] [Thread-126054] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T10:28:26.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:28:26.542 [DEBUG] [Thread-126054] [transport.py] [_log()] userauth is OK
2025-12-31T10:28:26.542 [DEBUG] [Thread-126054] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:28:26.542 [DEBUG] [Thread-126054] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:28:26.542 [DEBUG] [Thread-126054] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T10:28:26.542 [DEBUG] [Thread-126054] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:28:26.561 [INFO] [Thread-126054] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:28:26.561 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T10:28:26.562 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:28:27.376 [DEBUG] [Thread-126054] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:28:27.376 [DEBUG] [Thread-126054] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:28:27.424 [DEBUG] [Thread-126054] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:28:27.424 [DEBUG] [Thread-126054] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:28:27.433 [DEBUG] [Thread-126054] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:28:27.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:28:27.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T10:28:27.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T10:28:27.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:28:27.462 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:28:27.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:28:27.470 [DEBUG] [Thread-126054] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:28:36.978 [DEBUG] [Thread-126056 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:28:52.022 [DEBUG] [Thread-126057 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:28:57.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T10:28:57.493 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T10:28:57.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-12-31T10:28:58.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 10, 28, 49), 31.58, 11.65, 0.0, 22.87, 25.41, 0, 0, 0, 2, 0, 0),)
2025-12-31T10:28:58.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 10:28:49
2025-12-31T10:28:58.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T10:28:58.496 [DEBUG] [Thread-126058] [transport.py] [_log()] starting thread (client mode): 0xb6bb3940
2025-12-31T10:28:58.496 [DEBUG] [Thread-126058] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:28:58.517 [DEBUG] [Thread-126058] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T10:28:58.517 [INFO] [Thread-126058] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T10:28:58.520 [DEBUG] [Thread-126058] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:28:58.521 [DEBUG] [Thread-126058] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T10:28:58.521 [DEBUG] [Thread-126058] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:28:58.521 [DEBUG] [Thread-126058] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:28:58.521 [DEBUG] [Thread-126058] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:28:58.521 [DEBUG] [Thread-126058] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:28:58.521 [DEBUG] [Thread-126058] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:28:58.521 [DEBUG] [Thread-126058] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:28:58.521 [DEBUG] [Thread-126058] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:28:58.521 [DEBUG] [Thread-126058] [transport.py] [_log()] client lang: <none>
2025-12-31T10:28:58.521 [DEBUG] [Thread-126058] [transport.py] [_log()] server lang: <none>
2025-12-31T10:28:58.521 [DEBUG] [Thread-126058] [transport.py] [_log()] kex follows: False
2025-12-31T10:28:58.521 [DEBUG] [Thread-126058] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:28:58.521 [DEBUG] [Thread-126058] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:28:58.521 [DEBUG] [Thread-126058] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:28:58.521 [DEBUG] [Thread-126058] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:28:58.521 [DEBUG] [Thread-126058] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:28:58.522 [DEBUG] [Thread-126058] [transport.py] [_log()] Compression: none
2025-12-31T10:28:58.522 [DEBUG] [Thread-126058] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:28:58.539 [DEBUG] [Thread-126058] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:28:58.539 [DEBUG] [Thread-126058] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:28:58.540 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T10:28:58.540 [DEBUG] [Thread-126058] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T10:28:58.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:28:58.542 [DEBUG] [Thread-126058] [transport.py] [_log()] userauth is OK
2025-12-31T10:28:58.542 [DEBUG] [Thread-126058] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:28:58.542 [DEBUG] [Thread-126058] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:28:58.542 [DEBUG] [Thread-126058] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T10:28:58.542 [DEBUG] [Thread-126058] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:28:58.565 [INFO] [Thread-126058] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:28:58.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:28:59.348 [DEBUG] [Thread-126058] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:28:59.348 [DEBUG] [Thread-126058] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:28:59.348 [DEBUG] [Thread-126058] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T10:28:59.389 [DEBUG] [Thread-126058] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:28:59.389 [DEBUG] [Thread-126058] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:28:59.391 [DEBUG] [Thread-126058] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:28:59.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:28:59.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T10:28:59.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T10:28:59.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T10:28:59.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:28:59.413 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T10:28:59.413 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:28:59.413 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:28:59.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T10:28:59.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.352921 -999.00  +25.30  18.55     17   -1.20 1 1 1 1 1   888    0 22.86 -135.89 ----- 22.5 18.6 277.6 23.9 32.4 -28.9 31.6 -28.8 29.8 -28.8 30.5 -27.0
2025-12-31T10:28:59.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T10:28:59.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T10:28:59.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.352921
2025-12-31T10:28:59.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T10:28:59.415 [DEBUG] [Thread-126058] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:28:59.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T10:28:59.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T10:28:59.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T10:28:59.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T10:28:59.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T10:28:49', tmtdew=31.58, humidity=11.65, cloud=0.0, wind=22.87, temperature=25.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T08:28:12.374', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T10:28:59.498 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T10:28:59.509 [DEBUG] [Thread-126061] [transport.py] [_log()] starting thread (client mode): 0xb6b18640
2025-12-31T10:28:59.509 [DEBUG] [Thread-126061] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:28:59.524 [DEBUG] [Thread-126061] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T10:28:59.524 [INFO] [Thread-126061] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T10:28:59.531 [DEBUG] [Thread-126061] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:28:59.531 [DEBUG] [Thread-126061] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T10:28:59.532 [DEBUG] [Thread-126061] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:28:59.532 [DEBUG] [Thread-126061] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:28:59.532 [DEBUG] [Thread-126061] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:28:59.532 [DEBUG] [Thread-126061] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:28:59.532 [DEBUG] [Thread-126061] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:28:59.532 [DEBUG] [Thread-126061] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:28:59.532 [DEBUG] [Thread-126061] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:28:59.532 [DEBUG] [Thread-126061] [transport.py] [_log()] client lang: <none>
2025-12-31T10:28:59.532 [DEBUG] [Thread-126061] [transport.py] [_log()] server lang: <none>
2025-12-31T10:28:59.532 [DEBUG] [Thread-126061] [transport.py] [_log()] kex follows: False
2025-12-31T10:28:59.533 [DEBUG] [Thread-126061] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:28:59.533 [DEBUG] [Thread-126061] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:28:59.533 [DEBUG] [Thread-126061] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:28:59.533 [DEBUG] [Thread-126061] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:28:59.533 [DEBUG] [Thread-126061] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:28:59.533 [DEBUG] [Thread-126061] [transport.py] [_log()] Compression: none
2025-12-31T10:28:59.533 [DEBUG] [Thread-126061] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:28:59.589 [DEBUG] [Thread-126061] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:28:59.590 [DEBUG] [Thread-126061] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:28:59.590 [DEBUG] [Thread-126061] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T10:28:59.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T10:28:59.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:28:59.645 [DEBUG] [Thread-126061] [transport.py] [_log()] userauth is OK
2025-12-31T10:28:59.645 [DEBUG] [Thread-126061] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:28:59.646 [DEBUG] [Thread-126061] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:28:59.646 [DEBUG] [Thread-126061] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T10:28:59.646 [DEBUG] [Thread-126061] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:28:59.663 [INFO] [Thread-126061] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:28:59.663 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T10:28:59.663 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:29:00.461 [DEBUG] [Thread-126061] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:29:00.462 [DEBUG] [Thread-126061] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:29:00.510 [DEBUG] [Thread-126061] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:29:00.510 [DEBUG] [Thread-126061] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:29:00.519 [DEBUG] [Thread-126061] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:29:00.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:29:00.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T10:29: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-12-31T10:29:00.544 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:29:00.544 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:29:00.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:29:00.552 [DEBUG] [Thread-126061] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:29:06.550 [DEBUG] [Thread-126063 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:29:07.052 [DEBUG] [Thread-126064 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:29:22.102 [DEBUG] [Thread-126065 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:29:25.361 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:29:25.363 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:29:30.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T10:29:30.575 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T10:29:30.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T10:29:31.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 10, 29, 21), 31.69, 11.56, 0.0, 19.13, 25.48, 0, 0, 0, 2, 0, 0),)
2025-12-31T10:29:31.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 10:29:21
2025-12-31T10:29:31.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T10:29:31.554 [DEBUG] [Thread-126066] [transport.py] [_log()] starting thread (client mode): 0xb9559ab0
2025-12-31T10:29:31.554 [DEBUG] [Thread-126066] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:29:31.574 [DEBUG] [Thread-126066] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T10:29:31.574 [INFO] [Thread-126066] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T10:29:31.577 [DEBUG] [Thread-126066] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:29:31.577 [DEBUG] [Thread-126066] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T10:29:31.578 [DEBUG] [Thread-126066] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:29:31.578 [DEBUG] [Thread-126066] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:29:31.578 [DEBUG] [Thread-126066] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:29:31.578 [DEBUG] [Thread-126066] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:29:31.578 [DEBUG] [Thread-126066] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:29:31.578 [DEBUG] [Thread-126066] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:29:31.578 [DEBUG] [Thread-126066] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:29:31.578 [DEBUG] [Thread-126066] [transport.py] [_log()] client lang: <none>
2025-12-31T10:29:31.578 [DEBUG] [Thread-126066] [transport.py] [_log()] server lang: <none>
2025-12-31T10:29:31.578 [DEBUG] [Thread-126066] [transport.py] [_log()] kex follows: False
2025-12-31T10:29:31.578 [DEBUG] [Thread-126066] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:29:31.578 [DEBUG] [Thread-126066] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:29:31.578 [DEBUG] [Thread-126066] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:29:31.578 [DEBUG] [Thread-126066] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:29:31.579 [DEBUG] [Thread-126066] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:29:31.579 [DEBUG] [Thread-126066] [transport.py] [_log()] Compression: none
2025-12-31T10:29:31.579 [DEBUG] [Thread-126066] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:29:31.599 [DEBUG] [Thread-126066] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:29:31.600 [DEBUG] [Thread-126066] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:29:31.601 [DEBUG] [Thread-126066] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T10:29:31.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T10:29:31.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:29:31.603 [DEBUG] [Thread-126066] [transport.py] [_log()] userauth is OK
2025-12-31T10:29:31.603 [DEBUG] [Thread-126066] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:29:31.603 [DEBUG] [Thread-126066] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:29:31.604 [DEBUG] [Thread-126066] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T10:29:31.604 [DEBUG] [Thread-126066] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:29:31.627 [INFO] [Thread-126066] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:29:31.628 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:29:32.280 [DEBUG] [Thread-126066] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:29:32.280 [DEBUG] [Thread-126066] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:29:32.281 [DEBUG] [Thread-126066] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T10:29:32.321 [DEBUG] [Thread-126066] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:29:32.321 [DEBUG] [Thread-126066] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:29:32.324 [DEBUG] [Thread-126066] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:29:32.338 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:29:32.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T10:29:32.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T10:29:32.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T10:29:32.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:29:32.350 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T10:29:32.350 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:29:32.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:29:32.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T10:29:32.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.353269 -999.00  +25.00  15.75     17   -1.30 1 1 1 1 1   888    0 22.02 -126.38 ----- 20.5 15.8 270.4 23.4 32.0 -30.9 31.4 -30.2 29.7 -27.0 30.3 -27.7
2025-12-31T10:29:32.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T10:29:32.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T10:29:32.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.353269
2025-12-31T10:29:32.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T10:29:32.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T10:29:32.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T10:29:32.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T10:29:32.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T10:29:32.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T10:29:21', tmtdew=31.69, humidity=11.56, cloud=0.0, wind=19.13, temperature=25.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T08:28:42.442', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T10:29:32.353 [DEBUG] [Thread-126066] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:29:32.438 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T10:29:32.449 [DEBUG] [Thread-126069] [transport.py] [_log()] starting thread (client mode): 0xb6bb3eb0
2025-12-31T10:29:32.449 [DEBUG] [Thread-126069] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:29:32.470 [DEBUG] [Thread-126069] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T10:29:32.470 [INFO] [Thread-126069] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T10:29:32.477 [DEBUG] [Thread-126069] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:29:32.478 [DEBUG] [Thread-126069] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T10:29:32.478 [DEBUG] [Thread-126069] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:29:32.478 [DEBUG] [Thread-126069] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:29:32.478 [DEBUG] [Thread-126069] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:29:32.478 [DEBUG] [Thread-126069] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:29:32.478 [DEBUG] [Thread-126069] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:29:32.478 [DEBUG] [Thread-126069] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:29:32.478 [DEBUG] [Thread-126069] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:29:32.478 [DEBUG] [Thread-126069] [transport.py] [_log()] client lang: <none>
2025-12-31T10:29:32.479 [DEBUG] [Thread-126069] [transport.py] [_log()] server lang: <none>
2025-12-31T10:29:32.479 [DEBUG] [Thread-126069] [transport.py] [_log()] kex follows: False
2025-12-31T10:29:32.479 [DEBUG] [Thread-126069] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:29:32.479 [DEBUG] [Thread-126069] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:29:32.479 [DEBUG] [Thread-126069] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:29:32.479 [DEBUG] [Thread-126069] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:29:32.479 [DEBUG] [Thread-126069] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:29:32.479 [DEBUG] [Thread-126069] [transport.py] [_log()] Compression: none
2025-12-31T10:29:32.479 [DEBUG] [Thread-126069] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:29:32.545 [DEBUG] [Thread-126069] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:29:32.546 [DEBUG] [Thread-126069] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:29:32.546 [DEBUG] [Thread-126069] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T10:29:32.546 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T10:29:32.547 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:29:32.601 [DEBUG] [Thread-126069] [transport.py] [_log()] userauth is OK
2025-12-31T10:29:32.602 [DEBUG] [Thread-126069] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:29:32.602 [DEBUG] [Thread-126069] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:29:32.602 [DEBUG] [Thread-126069] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T10:29:32.602 [DEBUG] [Thread-126069] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:29:32.627 [INFO] [Thread-126069] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:29:32.627 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T10:29:32.628 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:29:33.432 [DEBUG] [Thread-126069] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:29:33.433 [DEBUG] [Thread-126069] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:29:33.480 [DEBUG] [Thread-126069] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:29:33.480 [DEBUG] [Thread-126069] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:29:33.489 [DEBUG] [Thread-126069] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:29:33.498 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:29:33.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T10:29:33.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T10:29:33.517 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:29:33.517 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:29:33.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:29:33.526 [DEBUG] [Thread-126069] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:29:37.137 [DEBUG] [Thread-126071 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:29:52.192 [DEBUG] [Thread-126072 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:30:03.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T10:30:03.542 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T10:30:03.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T10:30:04.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 10, 29, 53), 32.07, 11.58, 0.0, 14.82, 25.59, 0, 0, 0, 2, 0, 0),)
2025-12-31T10:30:04.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 10:29:53
2025-12-31T10:30:04.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T10:30:04.535 [DEBUG] [Thread-126073] [transport.py] [_log()] starting thread (client mode): 0xb9591a80
2025-12-31T10:30:04.535 [DEBUG] [Thread-126073] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:30:04.556 [DEBUG] [Thread-126073] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T10:30:04.556 [INFO] [Thread-126073] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T10:30:04.557 [DEBUG] [Thread-126073] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:30:04.557 [DEBUG] [Thread-126073] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T10:30:04.557 [DEBUG] [Thread-126073] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:30:04.557 [DEBUG] [Thread-126073] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:30:04.557 [DEBUG] [Thread-126073] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:30:04.557 [DEBUG] [Thread-126073] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:30:04.557 [DEBUG] [Thread-126073] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:30:04.557 [DEBUG] [Thread-126073] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:30:04.557 [DEBUG] [Thread-126073] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:30:04.557 [DEBUG] [Thread-126073] [transport.py] [_log()] client lang: <none>
2025-12-31T10:30:04.557 [DEBUG] [Thread-126073] [transport.py] [_log()] server lang: <none>
2025-12-31T10:30:04.557 [DEBUG] [Thread-126073] [transport.py] [_log()] kex follows: False
2025-12-31T10:30:04.557 [DEBUG] [Thread-126073] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:30:04.558 [DEBUG] [Thread-126073] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:30:04.558 [DEBUG] [Thread-126073] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:30:04.558 [DEBUG] [Thread-126073] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:30:04.558 [DEBUG] [Thread-126073] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:30:04.558 [DEBUG] [Thread-126073] [transport.py] [_log()] Compression: none
2025-12-31T10:30:04.558 [DEBUG] [Thread-126073] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:30:04.570 [DEBUG] [Thread-126073] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:30:04.571 [DEBUG] [Thread-126073] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:30:04.571 [DEBUG] [Thread-126073] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T10:30:04.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T10:30:04.572 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:30:04.573 [DEBUG] [Thread-126073] [transport.py] [_log()] userauth is OK
2025-12-31T10:30:04.573 [DEBUG] [Thread-126073] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:30:04.573 [DEBUG] [Thread-126073] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:30:04.573 [DEBUG] [Thread-126073] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T10:30:04.573 [DEBUG] [Thread-126073] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:30:04.597 [INFO] [Thread-126073] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:30:04.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:30:06.600 [DEBUG] [Thread-126075 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:30:07.222 [DEBUG] [Thread-126076 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:30:15.365 [DEBUG] [Thread-126073] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:30:15.366 [DEBUG] [Thread-126073] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:30:15.366 [DEBUG] [Thread-126073] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T10:30:15.407 [DEBUG] [Thread-126073] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:30:15.407 [DEBUG] [Thread-126073] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:30:15.410 [DEBUG] [Thread-126073] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:30:15.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:30:15.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T10:30:15.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T10:30:15.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T10:30:15.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:30:15.527 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T10:30:15.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:30:15.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:30:15.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T10:30:15.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.353963 -999.00  +24.60  20.57     17   -1.70 1 1 1 1 1   888    0 22.82 -103.39 ----- 16.1 20.6 270.6 22.2 31.4 -30.7 31.0 -27.2 29.1 -30.3 29.9 -27.4
2025-12-31T10:30:15.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T10:30:15.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T10:30:15.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.353963
2025-12-31T10:30:15.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T10:30:15.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T10:30:15.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T10:30:15.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T10:30:15.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T10:30:15.529 [DEBUG] [Thread-126073] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:30:15.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T10:29:53', tmtdew=32.07, humidity=11.58, cloud=0.0, wind=14.82, temperature=25.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T08:29:42.403', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T10:30:15.619 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T10:30:15.630 [DEBUG] [Thread-126078] [transport.py] [_log()] starting thread (client mode): 0xb9591120
2025-12-31T10:30:15.630 [DEBUG] [Thread-126078] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:30:15.644 [DEBUG] [Thread-126078] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T10:30:15.644 [INFO] [Thread-126078] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T10:30:15.652 [DEBUG] [Thread-126078] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:30:15.652 [DEBUG] [Thread-126078] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T10:30:15.652 [DEBUG] [Thread-126078] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:30:15.652 [DEBUG] [Thread-126078] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:30:15.652 [DEBUG] [Thread-126078] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:30:15.652 [DEBUG] [Thread-126078] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:30:15.652 [DEBUG] [Thread-126078] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:30:15.652 [DEBUG] [Thread-126078] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:30:15.652 [DEBUG] [Thread-126078] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:30:15.652 [DEBUG] [Thread-126078] [transport.py] [_log()] client lang: <none>
2025-12-31T10:30:15.652 [DEBUG] [Thread-126078] [transport.py] [_log()] server lang: <none>
2025-12-31T10:30:15.652 [DEBUG] [Thread-126078] [transport.py] [_log()] kex follows: False
2025-12-31T10:30:15.652 [DEBUG] [Thread-126078] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:30:15.652 [DEBUG] [Thread-126078] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:30:15.652 [DEBUG] [Thread-126078] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:30:15.652 [DEBUG] [Thread-126078] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:30:15.652 [DEBUG] [Thread-126078] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:30:15.652 [DEBUG] [Thread-126078] [transport.py] [_log()] Compression: none
2025-12-31T10:30:15.652 [DEBUG] [Thread-126078] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:30:15.709 [DEBUG] [Thread-126078] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:30:15.709 [DEBUG] [Thread-126078] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:30:15.710 [DEBUG] [Thread-126078] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T10:30:15.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T10:30:15.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:30:15.765 [DEBUG] [Thread-126078] [transport.py] [_log()] userauth is OK
2025-12-31T10:30:15.766 [DEBUG] [Thread-126078] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:30:15.766 [DEBUG] [Thread-126078] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:30:15.766 [DEBUG] [Thread-126078] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T10:30:15.766 [DEBUG] [Thread-126078] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:30:15.785 [INFO] [Thread-126078] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:30: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-12-31T10:30:15.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:30:16.632 [DEBUG] [Thread-126078] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:30:16.632 [DEBUG] [Thread-126078] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:30:16.680 [DEBUG] [Thread-126078] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:30:16.680 [DEBUG] [Thread-126078] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:30:16.689 [DEBUG] [Thread-126078] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:30:16.699 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:30:16.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T10:30:16.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T10:30:16.718 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:30:16.718 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:30:16.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:30:16.726 [DEBUG] [Thread-126078] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:30:22.259 [DEBUG] [Thread-126080 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:30:25.502 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:30:25.503 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:30:37.309 [DEBUG] [Thread-126081 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:30:46.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T10:30:46.744 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T10:30:46.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T10:30:47.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 10, 30, 25), 31.96, 11.68, 0.0, 16.07, 25.59, 0, 0, 0, 2, 0, 0),)
2025-12-31T10:30:47.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 10:30:25
2025-12-31T10:30:47.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T10:30:47.727 [DEBUG] [Thread-126082] [transport.py] [_log()] starting thread (client mode): 0xb6b37b20
2025-12-31T10:30:47.728 [DEBUG] [Thread-126082] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:30:47.749 [DEBUG] [Thread-126082] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T10:30:47.749 [INFO] [Thread-126082] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T10:30:47.752 [DEBUG] [Thread-126082] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:30:47.752 [DEBUG] [Thread-126082] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T10:30:47.752 [DEBUG] [Thread-126082] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:30:47.752 [DEBUG] [Thread-126082] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:30:47.753 [DEBUG] [Thread-126082] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:30:47.753 [DEBUG] [Thread-126082] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:30:47.753 [DEBUG] [Thread-126082] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:30:47.753 [DEBUG] [Thread-126082] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:30:47.753 [DEBUG] [Thread-126082] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:30:47.753 [DEBUG] [Thread-126082] [transport.py] [_log()] client lang: <none>
2025-12-31T10:30:47.753 [DEBUG] [Thread-126082] [transport.py] [_log()] server lang: <none>
2025-12-31T10:30:47.753 [DEBUG] [Thread-126082] [transport.py] [_log()] kex follows: False
2025-12-31T10:30:47.753 [DEBUG] [Thread-126082] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:30:47.753 [DEBUG] [Thread-126082] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:30:47.753 [DEBUG] [Thread-126082] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:30:47.753 [DEBUG] [Thread-126082] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:30:47.753 [DEBUG] [Thread-126082] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:30:47.753 [DEBUG] [Thread-126082] [transport.py] [_log()] Compression: none
2025-12-31T10:30:47.753 [DEBUG] [Thread-126082] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:30:47.771 [DEBUG] [Thread-126082] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:30:47.771 [DEBUG] [Thread-126082] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:30:47.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T10:30:47.772 [DEBUG] [Thread-126082] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T10:30:47.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:30:47.775 [DEBUG] [Thread-126082] [transport.py] [_log()] userauth is OK
2025-12-31T10:30:47.775 [DEBUG] [Thread-126082] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:30:47.775 [DEBUG] [Thread-126082] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:30:47.775 [DEBUG] [Thread-126082] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T10:30:47.775 [DEBUG] [Thread-126082] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:30:47.799 [INFO] [Thread-126082] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:30:47.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:30:48.429 [DEBUG] [Thread-126082] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:30:48.430 [DEBUG] [Thread-126082] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:30:48.430 [DEBUG] [Thread-126082] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T10:30:48.471 [DEBUG] [Thread-126082] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:30:48.471 [DEBUG] [Thread-126082] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:30:48.475 [DEBUG] [Thread-126082] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:30:48.488 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:30:48.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T10:30:48.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T10:30:48.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T10:30:48.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:30:48.500 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T10:30:48.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:30:48.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:30:48.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T10:30:48.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.354310 -999.00  +24.60  22.98     17   -1.80 1 1 1 1 1   888    0 23.57 -87.88 ----- 18.5 23.0 273.1 25.6 31.5 -27.7 31.0 -26.9 29.2 -24.6 30.0 -25.3
2025-12-31T10:30:48.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T10:30:48.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T10:30:48.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.354310
2025-12-31T10:30:48.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T10:30:48.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T10:30:48.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T10:30:48.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T10:30:48.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T10:30:48.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T10:30:25', tmtdew=31.96, humidity=11.68, cloud=0.0, wind=16.07, temperature=25.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T08:30:12.384', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T10:30:48.504 [DEBUG] [Thread-126082] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:30:48.586 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T10:30:48.596 [DEBUG] [Thread-126085] [transport.py] [_log()] starting thread (client mode): 0xb6b37f10
2025-12-31T10:30:48.597 [DEBUG] [Thread-126085] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:30:48.611 [DEBUG] [Thread-126085] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T10:30:48.611 [INFO] [Thread-126085] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T10:30:48.619 [DEBUG] [Thread-126085] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:30:48.619 [DEBUG] [Thread-126085] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T10:30:48.619 [DEBUG] [Thread-126085] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:30:48.619 [DEBUG] [Thread-126085] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:30:48.619 [DEBUG] [Thread-126085] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:30:48.619 [DEBUG] [Thread-126085] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:30:48.619 [DEBUG] [Thread-126085] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:30:48.619 [DEBUG] [Thread-126085] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:30:48.619 [DEBUG] [Thread-126085] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:30:48.619 [DEBUG] [Thread-126085] [transport.py] [_log()] client lang: <none>
2025-12-31T10:30:48.619 [DEBUG] [Thread-126085] [transport.py] [_log()] server lang: <none>
2025-12-31T10:30:48.619 [DEBUG] [Thread-126085] [transport.py] [_log()] kex follows: False
2025-12-31T10:30:48.619 [DEBUG] [Thread-126085] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:30:48.620 [DEBUG] [Thread-126085] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:30:48.620 [DEBUG] [Thread-126085] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:30:48.620 [DEBUG] [Thread-126085] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:30:48.620 [DEBUG] [Thread-126085] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:30:48.620 [DEBUG] [Thread-126085] [transport.py] [_log()] Compression: none
2025-12-31T10:30:48.620 [DEBUG] [Thread-126085] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:30:48.678 [DEBUG] [Thread-126085] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:30:48.678 [DEBUG] [Thread-126085] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:30:48.679 [DEBUG] [Thread-126085] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T10:30:48.679 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T10:30:48.680 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:30:48.734 [DEBUG] [Thread-126085] [transport.py] [_log()] userauth is OK
2025-12-31T10:30:48.734 [DEBUG] [Thread-126085] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:30:48.734 [DEBUG] [Thread-126085] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:30:48.734 [DEBUG] [Thread-126085] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T10:30:48.734 [DEBUG] [Thread-126085] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:30:48.753 [INFO] [Thread-126085] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:30:48.754 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T10:30:48.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:30:49.587 [DEBUG] [Thread-126085] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:30:49.587 [DEBUG] [Thread-126085] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:30:49.635 [DEBUG] [Thread-126085] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:30:49.635 [DEBUG] [Thread-126085] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:30:49.645 [DEBUG] [Thread-126085] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:30:49.654 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:30:49.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T10:30:49.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T10:30:49.673 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:30:49.673 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:30:49.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:30:49.682 [DEBUG] [Thread-126085] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:30:52.337 [DEBUG] [Thread-126087 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:31:06.662 [DEBUG] [Thread-126088 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:31:07.388 [DEBUG] [Thread-126089 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:31:19.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T10:31:19.704 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T10:31:19.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T10:31:20.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 10, 30, 57), 32.44, 11.05, 0.0, 15.92, 25.79, 0, 0, 0, 2, 0, 0),)
2025-12-31T10:31:20.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 10:30:57
2025-12-31T10:31:20.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T10:31:20.748 [DEBUG] [Thread-126090] [transport.py] [_log()] starting thread (client mode): 0xb6b36b60
2025-12-31T10:31:20.748 [DEBUG] [Thread-126090] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:31:20.771 [DEBUG] [Thread-126090] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T10:31:20.771 [INFO] [Thread-126090] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T10:31:20.774 [DEBUG] [Thread-126090] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:31:20.774 [DEBUG] [Thread-126090] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T10:31:20.775 [DEBUG] [Thread-126090] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:31:20.775 [DEBUG] [Thread-126090] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:31:20.775 [DEBUG] [Thread-126090] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:31:20.775 [DEBUG] [Thread-126090] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:31:20.775 [DEBUG] [Thread-126090] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:31:20.775 [DEBUG] [Thread-126090] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:31:20.775 [DEBUG] [Thread-126090] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:31:20.775 [DEBUG] [Thread-126090] [transport.py] [_log()] client lang: <none>
2025-12-31T10:31:20.775 [DEBUG] [Thread-126090] [transport.py] [_log()] server lang: <none>
2025-12-31T10:31:20.775 [DEBUG] [Thread-126090] [transport.py] [_log()] kex follows: False
2025-12-31T10:31:20.775 [DEBUG] [Thread-126090] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:31:20.775 [DEBUG] [Thread-126090] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:31:20.775 [DEBUG] [Thread-126090] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:31:20.775 [DEBUG] [Thread-126090] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:31:20.775 [DEBUG] [Thread-126090] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:31:20.775 [DEBUG] [Thread-126090] [transport.py] [_log()] Compression: none
2025-12-31T10:31:20.775 [DEBUG] [Thread-126090] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:31:20.791 [DEBUG] [Thread-126090] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:31:20.792 [DEBUG] [Thread-126090] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:31:20.792 [DEBUG] [Thread-126090] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T10:31:20.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T10:31:20.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:31:20.793 [DEBUG] [Thread-126090] [transport.py] [_log()] userauth is OK
2025-12-31T10:31:20.793 [DEBUG] [Thread-126090] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:31:20.793 [DEBUG] [Thread-126090] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:31:20.793 [DEBUG] [Thread-126090] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T10:31:20.793 [DEBUG] [Thread-126090] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:31:20.802 [INFO] [Thread-126090] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:31:20.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:31:21.528 [DEBUG] [Thread-126090] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:31:21.528 [DEBUG] [Thread-126090] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:31:21.528 [DEBUG] [Thread-126090] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T10:31:21.570 [DEBUG] [Thread-126090] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:31:21.570 [DEBUG] [Thread-126090] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:31:21.572 [DEBUG] [Thread-126090] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:31:21.582 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:31:21.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T10:31:21.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T10:31:21.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T10:31:21.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:31:21.587 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T10:31:21.587 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:31:21.587 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:31:21.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T10:31:21.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.354657 -999.00  +24.30  16.45     17   -2.10 1 1 1 1 1   888    0 24.01 -83.98 ----- 17.7 16.4 278.0 23.8 31.4 -29.0 31.0 -26.4 29.1 -25.4 29.9 -26.0
2025-12-31T10:31:21.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T10:31:21.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T10:31:21.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.354657
2025-12-31T10:31:21.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T10:31:21.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T10:31:21.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T10:31:21.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T10:31:21.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T10:31:21.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T10:30:57', tmtdew=32.44, humidity=11.05, cloud=0.0, wind=15.92, temperature=25.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T08:30:42.365', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T10:31:21.588 [DEBUG] [Thread-126090] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:31:21.662 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T10:31:21.675 [DEBUG] [Thread-126093] [transport.py] [_log()] starting thread (client mode): 0xb95f0be0
2025-12-31T10:31:21.675 [DEBUG] [Thread-126093] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:31:21.689 [DEBUG] [Thread-126093] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T10:31:21.689 [INFO] [Thread-126093] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T10:31:21.697 [DEBUG] [Thread-126093] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:31:21.697 [DEBUG] [Thread-126093] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T10:31:21.697 [DEBUG] [Thread-126093] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:31:21.697 [DEBUG] [Thread-126093] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:31:21.697 [DEBUG] [Thread-126093] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:31:21.697 [DEBUG] [Thread-126093] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:31:21.697 [DEBUG] [Thread-126093] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:31:21.697 [DEBUG] [Thread-126093] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:31:21.697 [DEBUG] [Thread-126093] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:31:21.697 [DEBUG] [Thread-126093] [transport.py] [_log()] client lang: <none>
2025-12-31T10:31:21.697 [DEBUG] [Thread-126093] [transport.py] [_log()] server lang: <none>
2025-12-31T10:31:21.697 [DEBUG] [Thread-126093] [transport.py] [_log()] kex follows: False
2025-12-31T10:31:21.697 [DEBUG] [Thread-126093] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:31:21.697 [DEBUG] [Thread-126093] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:31:21.697 [DEBUG] [Thread-126093] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:31:21.697 [DEBUG] [Thread-126093] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:31:21.697 [DEBUG] [Thread-126093] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:31:21.697 [DEBUG] [Thread-126093] [transport.py] [_log()] Compression: none
2025-12-31T10:31:21.697 [DEBUG] [Thread-126093] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:31:21.752 [DEBUG] [Thread-126093] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:31:21.752 [DEBUG] [Thread-126093] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:31:21.752 [DEBUG] [Thread-126093] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T10:31:21.752 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T10:31:21.753 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:31:21.809 [DEBUG] [Thread-126093] [transport.py] [_log()] userauth is OK
2025-12-31T10:31:21.809 [DEBUG] [Thread-126093] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:31:21.809 [DEBUG] [Thread-126093] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:31:21.809 [DEBUG] [Thread-126093] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T10:31:21.809 [DEBUG] [Thread-126093] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:31:21.825 [INFO] [Thread-126093] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:31:21.825 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T10:31:21.825 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:31:22.417 [DEBUG] [Thread-126095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:31:22.671 [DEBUG] [Thread-126093] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:31:22.671 [DEBUG] [Thread-126093] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:31:22.720 [DEBUG] [Thread-126093] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:31:22.720 [DEBUG] [Thread-126093] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:31:22.729 [DEBUG] [Thread-126093] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:31:22.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:31:22.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T10:31:22.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T10:31:22.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:31:22.757 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:31:22.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:31:22.765 [DEBUG] [Thread-126093] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:31:25.644 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:31:25.645 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:31:37.460 [DEBUG] [Thread-126096 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:31:52.498 [DEBUG] [Thread-126097 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:31:52.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T10:31:52.772 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T10:31:52.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T10:31:53.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 10, 31, 29), 32.32, 11.1, 0.0, 15.09, 25.56, 0, 0, 0, 2, 0, 0),)
2025-12-31T10:31:53.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 10:31:29
2025-12-31T10:31:53.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T10:31:53.769 [DEBUG] [Thread-126098] [transport.py] [_log()] starting thread (client mode): 0xb6b1bd60
2025-12-31T10:31:53.769 [DEBUG] [Thread-126098] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:31:53.788 [DEBUG] [Thread-126098] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T10:31:53.788 [INFO] [Thread-126098] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T10:31:53.791 [DEBUG] [Thread-126098] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:31:53.792 [DEBUG] [Thread-126098] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T10:31:53.792 [DEBUG] [Thread-126098] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:31:53.792 [DEBUG] [Thread-126098] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:31:53.792 [DEBUG] [Thread-126098] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:31:53.792 [DEBUG] [Thread-126098] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:31:53.792 [DEBUG] [Thread-126098] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:31:53.792 [DEBUG] [Thread-126098] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:31:53.792 [DEBUG] [Thread-126098] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:31:53.792 [DEBUG] [Thread-126098] [transport.py] [_log()] client lang: <none>
2025-12-31T10:31:53.792 [DEBUG] [Thread-126098] [transport.py] [_log()] server lang: <none>
2025-12-31T10:31:53.792 [DEBUG] [Thread-126098] [transport.py] [_log()] kex follows: False
2025-12-31T10:31:53.792 [DEBUG] [Thread-126098] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:31:53.792 [DEBUG] [Thread-126098] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:31:53.792 [DEBUG] [Thread-126098] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:31:53.792 [DEBUG] [Thread-126098] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:31:53.792 [DEBUG] [Thread-126098] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:31:53.792 [DEBUG] [Thread-126098] [transport.py] [_log()] Compression: none
2025-12-31T10:31:53.792 [DEBUG] [Thread-126098] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:31:53.801 [DEBUG] [Thread-126098] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:31:53.802 [DEBUG] [Thread-126098] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:31:53.802 [DEBUG] [Thread-126098] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T10:31:53.802 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T10:31:53.803 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:31:53.804 [DEBUG] [Thread-126098] [transport.py] [_log()] userauth is OK
2025-12-31T10:31:53.804 [DEBUG] [Thread-126098] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:31:53.805 [DEBUG] [Thread-126098] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:31:53.805 [DEBUG] [Thread-126098] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T10:31:53.805 [DEBUG] [Thread-126098] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:31:53.830 [INFO] [Thread-126098] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:31:53.831 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:31:54.485 [DEBUG] [Thread-126098] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:31:54.485 [DEBUG] [Thread-126098] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:31:54.485 [DEBUG] [Thread-126098] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T10:31:54.526 [DEBUG] [Thread-126098] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:31:54.526 [DEBUG] [Thread-126098] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:31:54.530 [DEBUG] [Thread-126098] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:31:54.542 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:31:54.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T10:31:54.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T10:31:54.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T10:31:54.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:31:54.555 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T10:31:54.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:31:54.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:31:54.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T10:31:54.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.355005 -999.00  +24.60  12.88     17   -1.90 1 1 1 1 1   888    0 24.38 -70.76 ----- 18.6 12.9 271.9 25.1 31.4 -27.5 31.0 -26.7 29.3 -24.0 29.9 -24.8
2025-12-31T10:31:54.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T10:31:54.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T10:31:54.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.355005
2025-12-31T10:31:54.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T10:31:54.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T10:31:54.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T10:31:54.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T10:31:54.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T10:31:54.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T10:31:29', tmtdew=32.32, humidity=11.1, cloud=0.0, wind=15.09, temperature=25.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T08:31:12.432', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T10:31:54.558 [DEBUG] [Thread-126098] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:31:54.642 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T10:31:54.655 [DEBUG] [Thread-126101] [transport.py] [_log()] starting thread (client mode): 0xb95d7b50
2025-12-31T10:31:54.655 [DEBUG] [Thread-126101] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:31:54.674 [DEBUG] [Thread-126101] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T10:31:54.675 [INFO] [Thread-126101] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T10:31:54.682 [DEBUG] [Thread-126101] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:31:54.683 [DEBUG] [Thread-126101] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T10:31:54.683 [DEBUG] [Thread-126101] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:31:54.683 [DEBUG] [Thread-126101] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:31:54.683 [DEBUG] [Thread-126101] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:31:54.683 [DEBUG] [Thread-126101] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:31:54.683 [DEBUG] [Thread-126101] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:31:54.683 [DEBUG] [Thread-126101] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:31:54.683 [DEBUG] [Thread-126101] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:31:54.683 [DEBUG] [Thread-126101] [transport.py] [_log()] client lang: <none>
2025-12-31T10:31:54.683 [DEBUG] [Thread-126101] [transport.py] [_log()] server lang: <none>
2025-12-31T10:31:54.683 [DEBUG] [Thread-126101] [transport.py] [_log()] kex follows: False
2025-12-31T10:31:54.683 [DEBUG] [Thread-126101] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:31:54.683 [DEBUG] [Thread-126101] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:31:54.683 [DEBUG] [Thread-126101] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:31:54.683 [DEBUG] [Thread-126101] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:31:54.684 [DEBUG] [Thread-126101] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:31:54.684 [DEBUG] [Thread-126101] [transport.py] [_log()] Compression: none
2025-12-31T10:31:54.684 [DEBUG] [Thread-126101] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:31:54.741 [DEBUG] [Thread-126101] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:31:54.742 [DEBUG] [Thread-126101] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:31:54.742 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T10:31:54.743 [DEBUG] [Thread-126101] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T10:31:54.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:31:54.797 [DEBUG] [Thread-126101] [transport.py] [_log()] userauth is OK
2025-12-31T10:31:54.798 [DEBUG] [Thread-126101] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:31:54.798 [DEBUG] [Thread-126101] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:31:54.798 [DEBUG] [Thread-126101] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T10:31:54.798 [DEBUG] [Thread-126101] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:31:54.816 [INFO] [Thread-126101] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:31:54.817 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T10:31:54.817 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:31:55.621 [DEBUG] [Thread-126101] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:31:55.621 [DEBUG] [Thread-126101] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:31:55.672 [DEBUG] [Thread-126101] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:31:55.672 [DEBUG] [Thread-126101] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:31:55.682 [DEBUG] [Thread-126101] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:31:55.692 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:31:55.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T10:31:55.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-12-31T10:31:55.709 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:31:55.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:31:55.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:31:55.717 [DEBUG] [Thread-126101] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:32:06.712 [DEBUG] [Thread-126103 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:32:07.529 [DEBUG] [Thread-126104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:32:22.585 [DEBUG] [Thread-126105 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:32:25.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T10:32:25.739 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T10:32: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-12-31T10:32:25.784 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:32:25.785 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:32:26.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 10, 32, 1), 32.4, 11.03, 0.0, 17.34, 25.56, 0, 0, 0, 2, 0, 0),)
2025-12-31T10:32:26.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 10:32:01
2025-12-31T10:32:26.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T10:32:26.734 [DEBUG] [Thread-126106] [transport.py] [_log()] starting thread (client mode): 0xb95f3d60
2025-12-31T10:32:26.734 [DEBUG] [Thread-126106] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:32:26.755 [DEBUG] [Thread-126106] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T10:32:26.755 [INFO] [Thread-126106] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T10:32:26.758 [DEBUG] [Thread-126106] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:32:26.758 [DEBUG] [Thread-126106] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T10:32:26.759 [DEBUG] [Thread-126106] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:32:26.759 [DEBUG] [Thread-126106] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:32:26.759 [DEBUG] [Thread-126106] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:32:26.759 [DEBUG] [Thread-126106] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:32:26.759 [DEBUG] [Thread-126106] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:32:26.759 [DEBUG] [Thread-126106] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:32:26.759 [DEBUG] [Thread-126106] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:32:26.759 [DEBUG] [Thread-126106] [transport.py] [_log()] client lang: <none>
2025-12-31T10:32:26.759 [DEBUG] [Thread-126106] [transport.py] [_log()] server lang: <none>
2025-12-31T10:32:26.759 [DEBUG] [Thread-126106] [transport.py] [_log()] kex follows: False
2025-12-31T10:32:26.759 [DEBUG] [Thread-126106] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:32:26.759 [DEBUG] [Thread-126106] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:32:26.759 [DEBUG] [Thread-126106] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:32:26.759 [DEBUG] [Thread-126106] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:32:26.760 [DEBUG] [Thread-126106] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:32:26.760 [DEBUG] [Thread-126106] [transport.py] [_log()] Compression: none
2025-12-31T10:32:26.760 [DEBUG] [Thread-126106] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:32:26.778 [DEBUG] [Thread-126106] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:32:26.779 [DEBUG] [Thread-126106] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:32:26.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T10:32:26.781 [DEBUG] [Thread-126106] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T10:32:26.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:32:26.782 [DEBUG] [Thread-126106] [transport.py] [_log()] userauth is OK
2025-12-31T10:32:26.783 [DEBUG] [Thread-126106] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:32:26.783 [DEBUG] [Thread-126106] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:32:26.783 [DEBUG] [Thread-126106] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T10:32:26.783 [DEBUG] [Thread-126106] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:32:26.797 [INFO] [Thread-126106] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:32:26.798 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:32:27.546 [DEBUG] [Thread-126106] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:32:27.547 [DEBUG] [Thread-126106] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:32:27.547 [DEBUG] [Thread-126106] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T10:32:27.588 [DEBUG] [Thread-126106] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:32:27.588 [DEBUG] [Thread-126106] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:32:27.590 [DEBUG] [Thread-126106] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:32:27.603 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:32:27.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T10:32:27.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T10:32:27.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T10:32:27.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:32:27.613 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T10:32:27.613 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:32:27.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:32:27.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T10:32:27.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.355352 -999.00  +24.70  15.83     16   -2.00 1 1 1 1 1   888    0 24.24 -67.63 ----- 18.3 15.8 284.6 24.9 31.5 -27.2 31.1 -26.4 29.3 -24.1 29.9 -25.1
2025-12-31T10:32:27.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T10:32:27.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T10:32:27.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.355352
2025-12-31T10:32:27.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T10:32:27.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T10:32:27.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T10:32:27.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T10:32:27.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T10:32:27.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T10:32:01', tmtdew=32.4, humidity=11.03, cloud=0.0, wind=17.34, temperature=25.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T08:31:42.413', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T10:32:27.615 [DEBUG] [Thread-126106] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:32:27.699 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T10:32:27.710 [DEBUG] [Thread-126109] [transport.py] [_log()] starting thread (client mode): 0xb6bb8d90
2025-12-31T10:32:27.710 [DEBUG] [Thread-126109] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:32:27.725 [DEBUG] [Thread-126109] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T10:32:27.725 [INFO] [Thread-126109] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T10:32:27.732 [DEBUG] [Thread-126109] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:32:27.732 [DEBUG] [Thread-126109] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T10:32:27.732 [DEBUG] [Thread-126109] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:32:27.733 [DEBUG] [Thread-126109] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:32:27.733 [DEBUG] [Thread-126109] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:32:27.733 [DEBUG] [Thread-126109] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:32:27.733 [DEBUG] [Thread-126109] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:32:27.733 [DEBUG] [Thread-126109] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:32:27.733 [DEBUG] [Thread-126109] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:32:27.733 [DEBUG] [Thread-126109] [transport.py] [_log()] client lang: <none>
2025-12-31T10:32:27.733 [DEBUG] [Thread-126109] [transport.py] [_log()] server lang: <none>
2025-12-31T10:32:27.733 [DEBUG] [Thread-126109] [transport.py] [_log()] kex follows: False
2025-12-31T10:32:27.733 [DEBUG] [Thread-126109] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:32:27.733 [DEBUG] [Thread-126109] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:32:27.733 [DEBUG] [Thread-126109] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:32:27.733 [DEBUG] [Thread-126109] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:32:27.733 [DEBUG] [Thread-126109] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:32:27.733 [DEBUG] [Thread-126109] [transport.py] [_log()] Compression: none
2025-12-31T10:32:27.733 [DEBUG] [Thread-126109] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:32:27.789 [DEBUG] [Thread-126109] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:32:27.789 [DEBUG] [Thread-126109] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:32:27.790 [DEBUG] [Thread-126109] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T10:32:27.790 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T10:32:27.791 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:32:27.845 [DEBUG] [Thread-126109] [transport.py] [_log()] userauth is OK
2025-12-31T10:32:27.845 [DEBUG] [Thread-126109] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:32:27.845 [DEBUG] [Thread-126109] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:32:27.845 [DEBUG] [Thread-126109] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T10:32:27.846 [DEBUG] [Thread-126109] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:32:27.863 [INFO] [Thread-126109] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:32:27.864 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T10:32:27.864 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:32:28.701 [DEBUG] [Thread-126109] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:32:28.701 [DEBUG] [Thread-126109] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:32:28.750 [DEBUG] [Thread-126109] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:32:28.750 [DEBUG] [Thread-126109] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:32:28.759 [DEBUG] [Thread-126109] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:32:28.768 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:32:28.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T10:32:28.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T10:32:28.785 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:32:28.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:32:28.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:32:28.794 [DEBUG] [Thread-126109] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:32:37.618 [DEBUG] [Thread-126111 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:32:52.670 [DEBUG] [Thread-126112 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:32:58.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T10:32:58.814 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T10:32:58.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T10:32:59.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 10, 32, 33), 33.04, 10.79, 0.0, 20.92, 26.28, 0, 0, 0, 2, 0, 0),)
2025-12-31T10:32:59.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 10:32:33
2025-12-31T10:32:59.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T10:32:59.800 [DEBUG] [Thread-126113] [transport.py] [_log()] starting thread (client mode): 0xb6b69b40
2025-12-31T10:32:59.800 [DEBUG] [Thread-126113] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:32:59.820 [DEBUG] [Thread-126113] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T10:32:59.820 [INFO] [Thread-126113] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T10:32:59.823 [DEBUG] [Thread-126113] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:32:59.823 [DEBUG] [Thread-126113] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T10:32:59.823 [DEBUG] [Thread-126113] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:32:59.824 [DEBUG] [Thread-126113] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:32:59.824 [DEBUG] [Thread-126113] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:32:59.824 [DEBUG] [Thread-126113] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:32:59.824 [DEBUG] [Thread-126113] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:32:59.824 [DEBUG] [Thread-126113] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:32:59.824 [DEBUG] [Thread-126113] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:32:59.824 [DEBUG] [Thread-126113] [transport.py] [_log()] client lang: <none>
2025-12-31T10:32:59.824 [DEBUG] [Thread-126113] [transport.py] [_log()] server lang: <none>
2025-12-31T10:32:59.824 [DEBUG] [Thread-126113] [transport.py] [_log()] kex follows: False
2025-12-31T10:32:59.824 [DEBUG] [Thread-126113] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:32:59.824 [DEBUG] [Thread-126113] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:32:59.824 [DEBUG] [Thread-126113] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:32:59.825 [DEBUG] [Thread-126113] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:32:59.825 [DEBUG] [Thread-126113] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:32:59.825 [DEBUG] [Thread-126113] [transport.py] [_log()] Compression: none
2025-12-31T10:32:59.825 [DEBUG] [Thread-126113] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:32:59.844 [DEBUG] [Thread-126113] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:32:59.845 [DEBUG] [Thread-126113] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:32:59.846 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T10:32:59.846 [DEBUG] [Thread-126113] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T10:32:59.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:32:59.849 [DEBUG] [Thread-126113] [transport.py] [_log()] userauth is OK
2025-12-31T10:32:59.849 [DEBUG] [Thread-126113] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:32:59.849 [DEBUG] [Thread-126113] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:32:59.849 [DEBUG] [Thread-126113] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T10:32:59.849 [DEBUG] [Thread-126113] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:32:59.873 [INFO] [Thread-126113] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:32:59.874 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:33:00.525 [DEBUG] [Thread-126113] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:33:00.525 [DEBUG] [Thread-126113] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:33:00.526 [DEBUG] [Thread-126113] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T10:33:00.566 [DEBUG] [Thread-126113] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:33:00.566 [DEBUG] [Thread-126113] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:33:00.570 [DEBUG] [Thread-126113] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:33:00.583 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:33:00.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T10:33:00.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T10:33:00.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T10:33:00.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:33:00.593 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T10:33:00.593 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:33:00.593 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:33:00.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T10:33:00.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.355699 -999.00  +25.00   7.43     16   -1.80 1 1 1 1 1   888    0 24.53 -54.96 ----- 12.0 7.4 285.3 19.7 31.6 -26.6 31.2 -25.9 29.5 -23.9 30.0 -24.4
2025-12-31T10:33:00.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T10:33:00.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T10:33:00.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.355699
2025-12-31T10:33:00.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T10:33:00.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T10:33:00.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T10:33:00.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T10:33:00.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T10:33:00.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T10:32:33', tmtdew=33.04, humidity=10.79, cloud=0.0, wind=20.92, temperature=26.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T08:32:12.394', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T10:33:00.596 [DEBUG] [Thread-126113] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:33:00.680 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T10:33:00.692 [DEBUG] [Thread-126116] [transport.py] [_log()] starting thread (client mode): 0xb6bb86a0
2025-12-31T10:33:00.692 [DEBUG] [Thread-126116] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:33:00.707 [DEBUG] [Thread-126116] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T10:33:00.707 [INFO] [Thread-126116] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T10:33:00.716 [DEBUG] [Thread-126116] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:33:00.716 [DEBUG] [Thread-126116] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T10:33:00.716 [DEBUG] [Thread-126116] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:33:00.716 [DEBUG] [Thread-126116] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:33:00.716 [DEBUG] [Thread-126116] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:33:00.716 [DEBUG] [Thread-126116] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:33:00.716 [DEBUG] [Thread-126116] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:33:00.717 [DEBUG] [Thread-126116] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:33:00.717 [DEBUG] [Thread-126116] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:33:00.717 [DEBUG] [Thread-126116] [transport.py] [_log()] client lang: <none>
2025-12-31T10:33:00.717 [DEBUG] [Thread-126116] [transport.py] [_log()] server lang: <none>
2025-12-31T10:33:00.717 [DEBUG] [Thread-126116] [transport.py] [_log()] kex follows: False
2025-12-31T10:33:00.717 [DEBUG] [Thread-126116] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:33:00.717 [DEBUG] [Thread-126116] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:33:00.717 [DEBUG] [Thread-126116] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:33:00.717 [DEBUG] [Thread-126116] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:33:00.717 [DEBUG] [Thread-126116] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:33:00.717 [DEBUG] [Thread-126116] [transport.py] [_log()] Compression: none
2025-12-31T10:33:00.717 [DEBUG] [Thread-126116] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:33:00.774 [DEBUG] [Thread-126116] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:33:00.774 [DEBUG] [Thread-126116] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:33:00.775 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T10:33:00.775 [DEBUG] [Thread-126116] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T10:33:00.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:33:00.830 [DEBUG] [Thread-126116] [transport.py] [_log()] userauth is OK
2025-12-31T10:33:00.830 [DEBUG] [Thread-126116] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:33:00.830 [DEBUG] [Thread-126116] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:33:00.830 [DEBUG] [Thread-126116] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T10:33:00.830 [DEBUG] [Thread-126116] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:33:00.854 [INFO] [Thread-126116] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:33: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-12-31T10:33:00.854 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:33:01.688 [DEBUG] [Thread-126116] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:33:01.689 [DEBUG] [Thread-126116] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:33:01.737 [DEBUG] [Thread-126116] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:33:01.738 [DEBUG] [Thread-126116] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:33:01.749 [DEBUG] [Thread-126116] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:33:01.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:33:01.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-12-31T10:33:01.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T10:33:01.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:33:01.778 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:33:01.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:33:01.786 [DEBUG] [Thread-126116] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:33:06.759 [DEBUG] [Thread-126118 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:33:07.702 [DEBUG] [Thread-126119 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:33:22.742 [DEBUG] [Thread-126120 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:33:25.923 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:33:25.925 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:33:31.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T10:33:31.809 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T10:33:31.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T10:33:32.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 10, 33, 5), 32.7, 10.9, 0.0, 18.77, 25.82, 0, 0, 0, 2, 0, 0),)
2025-12-31T10:33:32.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 10:33:05
2025-12-31T10:33:32.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T10:33:32.797 [DEBUG] [Thread-126121] [transport.py] [_log()] starting thread (client mode): 0xb95903d0
2025-12-31T10:33:32.798 [DEBUG] [Thread-126121] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:33:32.817 [DEBUG] [Thread-126121] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T10:33:32.818 [INFO] [Thread-126121] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T10:33:32.820 [DEBUG] [Thread-126121] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:33:32.820 [DEBUG] [Thread-126121] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T10:33:32.820 [DEBUG] [Thread-126121] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:33:32.820 [DEBUG] [Thread-126121] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:33:32.820 [DEBUG] [Thread-126121] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:33:32.820 [DEBUG] [Thread-126121] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:33:32.820 [DEBUG] [Thread-126121] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:33:32.820 [DEBUG] [Thread-126121] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:33:32.821 [DEBUG] [Thread-126121] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:33:32.821 [DEBUG] [Thread-126121] [transport.py] [_log()] client lang: <none>
2025-12-31T10:33:32.821 [DEBUG] [Thread-126121] [transport.py] [_log()] server lang: <none>
2025-12-31T10:33:32.821 [DEBUG] [Thread-126121] [transport.py] [_log()] kex follows: False
2025-12-31T10:33:32.821 [DEBUG] [Thread-126121] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:33:32.821 [DEBUG] [Thread-126121] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:33:32.821 [DEBUG] [Thread-126121] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:33:32.821 [DEBUG] [Thread-126121] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:33:32.821 [DEBUG] [Thread-126121] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:33:32.821 [DEBUG] [Thread-126121] [transport.py] [_log()] Compression: none
2025-12-31T10:33:32.821 [DEBUG] [Thread-126121] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:33:32.837 [DEBUG] [Thread-126121] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:33:32.838 [DEBUG] [Thread-126121] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:33:32.838 [DEBUG] [Thread-126121] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T10:33:32.839 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T10:33:32.839 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:33:32.841 [DEBUG] [Thread-126121] [transport.py] [_log()] userauth is OK
2025-12-31T10:33:32.841 [DEBUG] [Thread-126121] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:33:32.841 [DEBUG] [Thread-126121] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:33:32.841 [DEBUG] [Thread-126121] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T10:33:32.842 [DEBUG] [Thread-126121] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:33:32.861 [INFO] [Thread-126121] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:33:32.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:33:33.612 [DEBUG] [Thread-126121] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:33:33.612 [DEBUG] [Thread-126121] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:33:33.612 [DEBUG] [Thread-126121] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T10:33:33.653 [DEBUG] [Thread-126121] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:33:33.653 [DEBUG] [Thread-126121] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:33:33.657 [DEBUG] [Thread-126121] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:33:33.669 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:33:33.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T10:33:33.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T10:33:33.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T10:33:33.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:33:33.681 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T10:33:33.681 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:33:33.681 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:33:33.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T10:33:33.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.356046 -999.00  +25.30  22.39     16   -2.00 1 1 1 1 1   888    0 25.01 -42.89 ----- 26.4 22.4 263.9 31.0 31.8 -27.1 31.1 -27.5 29.5 -27.9 30.2 -24.9
2025-12-31T10:33:33.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T10:33:33.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T10:33:33.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.356046
2025-12-31T10:33:33.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T10:33:33.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T10:33:33.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T10:33:33.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T10:33:33.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T10:33:33.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T10:33:05', tmtdew=32.7, humidity=10.9, cloud=0.0, wind=18.77, temperature=25.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T08:32:42.374', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T10:33:33.683 [DEBUG] [Thread-126121] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:33: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-12-31T10:33:33.780 [DEBUG] [Thread-126124] [transport.py] [_log()] starting thread (client mode): 0xb6b36fe0
2025-12-31T10:33:33.780 [DEBUG] [Thread-126124] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:33:33.796 [DEBUG] [Thread-126124] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T10:33:33.796 [INFO] [Thread-126124] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T10:33:33.803 [DEBUG] [Thread-126124] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:33:33.804 [DEBUG] [Thread-126124] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T10:33:33.804 [DEBUG] [Thread-126124] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:33:33.804 [DEBUG] [Thread-126124] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:33:33.804 [DEBUG] [Thread-126124] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:33:33.804 [DEBUG] [Thread-126124] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:33:33.804 [DEBUG] [Thread-126124] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:33:33.804 [DEBUG] [Thread-126124] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:33:33.804 [DEBUG] [Thread-126124] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:33:33.804 [DEBUG] [Thread-126124] [transport.py] [_log()] client lang: <none>
2025-12-31T10:33:33.804 [DEBUG] [Thread-126124] [transport.py] [_log()] server lang: <none>
2025-12-31T10:33:33.804 [DEBUG] [Thread-126124] [transport.py] [_log()] kex follows: False
2025-12-31T10:33:33.804 [DEBUG] [Thread-126124] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:33:33.804 [DEBUG] [Thread-126124] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:33:33.804 [DEBUG] [Thread-126124] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:33:33.804 [DEBUG] [Thread-126124] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:33:33.804 [DEBUG] [Thread-126124] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:33:33.805 [DEBUG] [Thread-126124] [transport.py] [_log()] Compression: none
2025-12-31T10:33:33.805 [DEBUG] [Thread-126124] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:33:33.862 [DEBUG] [Thread-126124] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:33:33.863 [DEBUG] [Thread-126124] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:33:33.863 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T10:33:33.864 [DEBUG] [Thread-126124] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T10:33:33.865 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:33:33.922 [DEBUG] [Thread-126124] [transport.py] [_log()] userauth is OK
2025-12-31T10:33:33.922 [DEBUG] [Thread-126124] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:33:33.922 [DEBUG] [Thread-126124] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:33:33.922 [DEBUG] [Thread-126124] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T10:33:33.923 [DEBUG] [Thread-126124] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:33:33.942 [INFO] [Thread-126124] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:33:33.943 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T10:33:33.943 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:33:34.831 [DEBUG] [Thread-126124] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:33:34.831 [DEBUG] [Thread-126124] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:33:34.879 [DEBUG] [Thread-126124] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:33:34.879 [DEBUG] [Thread-126124] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:33:34.889 [DEBUG] [Thread-126124] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:33:34.898 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:33:34.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T10:33: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') -> 00000000
2025-12-31T10:33:34.917 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:33:34.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:33:34.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:33:34.925 [DEBUG] [Thread-126124] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:33:37.780 [DEBUG] [Thread-126126 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:33:52.834 [DEBUG] [Thread-126127 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:34:04.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T10:34:04.944 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T10:34:04.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T10:34:05.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 10, 33, 37), 32.44, 11.33, 0.0, 20.47, 25.17, 0, 0, 0, 2, 0, 0),)
2025-12-31T10:34:05.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 10:33:37
2025-12-31T10:34:05.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T10:34:05.957 [DEBUG] [Thread-126128] [transport.py] [_log()] starting thread (client mode): 0xb95f0be0
2025-12-31T10:34:05.957 [DEBUG] [Thread-126128] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:34:05.981 [DEBUG] [Thread-126128] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T10:34:05.981 [INFO] [Thread-126128] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T10:34:05.985 [DEBUG] [Thread-126128] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:34:05.985 [DEBUG] [Thread-126128] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T10:34:05.985 [DEBUG] [Thread-126128] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:34:05.985 [DEBUG] [Thread-126128] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:34:05.985 [DEBUG] [Thread-126128] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:34:05.985 [DEBUG] [Thread-126128] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:34:05.985 [DEBUG] [Thread-126128] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:34:05.985 [DEBUG] [Thread-126128] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:34:05.985 [DEBUG] [Thread-126128] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:34:05.985 [DEBUG] [Thread-126128] [transport.py] [_log()] client lang: <none>
2025-12-31T10:34:05.985 [DEBUG] [Thread-126128] [transport.py] [_log()] server lang: <none>
2025-12-31T10:34:05.985 [DEBUG] [Thread-126128] [transport.py] [_log()] kex follows: False
2025-12-31T10:34:05.985 [DEBUG] [Thread-126128] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:34:05.985 [DEBUG] [Thread-126128] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:34:05.985 [DEBUG] [Thread-126128] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:34:05.985 [DEBUG] [Thread-126128] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:34:05.985 [DEBUG] [Thread-126128] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:34:05.986 [DEBUG] [Thread-126128] [transport.py] [_log()] Compression: none
2025-12-31T10:34:05.986 [DEBUG] [Thread-126128] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:34:06.005 [DEBUG] [Thread-126128] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:34:06.005 [DEBUG] [Thread-126128] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:34:06.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T10:34:06.006 [DEBUG] [Thread-126128] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T10:34:06.007 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:34:06.008 [DEBUG] [Thread-126128] [transport.py] [_log()] userauth is OK
2025-12-31T10:34:06.008 [DEBUG] [Thread-126128] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:34:06.009 [DEBUG] [Thread-126128] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:34:06.009 [DEBUG] [Thread-126128] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T10:34:06.009 [DEBUG] [Thread-126128] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:34:06.043 [INFO] [Thread-126128] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:34:06.044 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:34:06.714 [DEBUG] [Thread-126128] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:34:06.714 [DEBUG] [Thread-126128] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:34:06.714 [DEBUG] [Thread-126128] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T10:34:06.755 [DEBUG] [Thread-126128] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:34:06.755 [DEBUG] [Thread-126128] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:34:06.759 [DEBUG] [Thread-126128] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:34:06.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:34:06.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T10:34:06.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T10:34:06.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T10:34:06.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:34:06.785 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T10:34:06.785 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:34:06.785 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:34:06.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T10:34:06.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.356741 -999.00  +24.30  17.25     16   -2.30 1 1 1 1 1   888    0 25.41 -32.25 ----- 20.1 17.2 279.8 22.6 31.4 -29.5 31.0 -27.6 29.0 -28.3 29.8 -27.4
2025-12-31T10:34:06.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T10:34:06.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T10:34:06.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.356741
2025-12-31T10:34:06.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T10:34:06.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T10:34:06.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T10:34:06.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T10:34:06.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T10:34:06.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T10:33:37', tmtdew=32.44, humidity=11.33, cloud=0.0, wind=20.47, temperature=25.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T08:33:42.422', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T10:34:06.788 [DEBUG] [Thread-126128] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:34:06.812 [DEBUG] [Thread-126131 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:34:06.860 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T10:34:06.873 [DEBUG] [Thread-126132] [transport.py] [_log()] starting thread (client mode): 0xb6b6b4f0
2025-12-31T10:34:06.874 [DEBUG] [Thread-126132] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:34:06.888 [DEBUG] [Thread-126132] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T10:34:06.888 [INFO] [Thread-126132] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T10:34:06.896 [DEBUG] [Thread-126132] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:34:06.896 [DEBUG] [Thread-126132] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T10:34:06.896 [DEBUG] [Thread-126132] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:34:06.896 [DEBUG] [Thread-126132] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:34:06.897 [DEBUG] [Thread-126132] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:34:06.897 [DEBUG] [Thread-126132] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:34:06.897 [DEBUG] [Thread-126132] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:34:06.897 [DEBUG] [Thread-126132] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:34:06.897 [DEBUG] [Thread-126132] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:34:06.897 [DEBUG] [Thread-126132] [transport.py] [_log()] client lang: <none>
2025-12-31T10:34:06.897 [DEBUG] [Thread-126132] [transport.py] [_log()] server lang: <none>
2025-12-31T10:34:06.897 [DEBUG] [Thread-126132] [transport.py] [_log()] kex follows: False
2025-12-31T10:34:06.897 [DEBUG] [Thread-126132] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:34:06.897 [DEBUG] [Thread-126132] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:34:06.897 [DEBUG] [Thread-126132] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:34:06.897 [DEBUG] [Thread-126132] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:34:06.897 [DEBUG] [Thread-126132] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:34:06.897 [DEBUG] [Thread-126132] [transport.py] [_log()] Compression: none
2025-12-31T10:34:06.897 [DEBUG] [Thread-126132] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:34:06.958 [DEBUG] [Thread-126132] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:34:06.958 [DEBUG] [Thread-126132] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:34:06.959 [DEBUG] [Thread-126132] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T10:34:06.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T10:34:06.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:34:07.013 [DEBUG] [Thread-126132] [transport.py] [_log()] userauth is OK
2025-12-31T10:34:07.014 [DEBUG] [Thread-126132] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:34:07.014 [DEBUG] [Thread-126132] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:34:07.014 [DEBUG] [Thread-126132] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T10:34:07.014 [DEBUG] [Thread-126132] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:34:07.033 [INFO] [Thread-126132] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:34:07.034 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T10:34:07.034 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:34:07.868 [DEBUG] [Thread-126134 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:34:07.907 [DEBUG] [Thread-126132] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:34:07.908 [DEBUG] [Thread-126132] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:34:07.956 [DEBUG] [Thread-126132] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:34:07.956 [DEBUG] [Thread-126132] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:34:07.965 [DEBUG] [Thread-126132] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:34:07.975 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:34:07.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T10:34:07.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-12-31T10:34:07.993 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:34:07.993 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:34:07.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:34:08.002 [DEBUG] [Thread-126132] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:34:22.917 [DEBUG] [Thread-126135 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:34:26.065 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:34:26.066 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:34:37.948 [DEBUG] [Thread-126136 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:34:38.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T10:34:38.024 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T10:34:38.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T10:34:38.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 10, 34, 9), 32.93, 10.97, 0.0, 18.84, 25.29, 0, 0, 0, 2, 0, 0),)
2025-12-31T10:34:38.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 10:34:09
2025-12-31T10:34:38.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T10:34:39.014 [DEBUG] [Thread-126137] [transport.py] [_log()] starting thread (client mode): 0xb6b4a560
2025-12-31T10:34:39.014 [DEBUG] [Thread-126137] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:34:39.034 [DEBUG] [Thread-126137] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T10:34:39.034 [INFO] [Thread-126137] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T10:34:39.037 [DEBUG] [Thread-126137] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:34:39.037 [DEBUG] [Thread-126137] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T10:34:39.037 [DEBUG] [Thread-126137] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:34:39.037 [DEBUG] [Thread-126137] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:34:39.037 [DEBUG] [Thread-126137] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:34:39.037 [DEBUG] [Thread-126137] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:34:39.037 [DEBUG] [Thread-126137] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:34:39.037 [DEBUG] [Thread-126137] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:34:39.037 [DEBUG] [Thread-126137] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:34:39.037 [DEBUG] [Thread-126137] [transport.py] [_log()] client lang: <none>
2025-12-31T10:34:39.037 [DEBUG] [Thread-126137] [transport.py] [_log()] server lang: <none>
2025-12-31T10:34:39.037 [DEBUG] [Thread-126137] [transport.py] [_log()] kex follows: False
2025-12-31T10:34:39.037 [DEBUG] [Thread-126137] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:34:39.037 [DEBUG] [Thread-126137] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:34:39.037 [DEBUG] [Thread-126137] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:34:39.037 [DEBUG] [Thread-126137] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:34:39.037 [DEBUG] [Thread-126137] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:34:39.037 [DEBUG] [Thread-126137] [transport.py] [_log()] Compression: none
2025-12-31T10:34:39.037 [DEBUG] [Thread-126137] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:34:39.045 [DEBUG] [Thread-126137] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:34:39.045 [DEBUG] [Thread-126137] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:34:39.045 [DEBUG] [Thread-126137] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T10:34:39.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T10:34:39.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:34:39.046 [DEBUG] [Thread-126137] [transport.py] [_log()] userauth is OK
2025-12-31T10:34:39.046 [DEBUG] [Thread-126137] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:34:39.046 [DEBUG] [Thread-126137] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:34:39.046 [DEBUG] [Thread-126137] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T10:34:39.046 [DEBUG] [Thread-126137] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:34:39.056 [INFO] [Thread-126137] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:34:39.056 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:34:39.713 [DEBUG] [Thread-126137] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:34:39.713 [DEBUG] [Thread-126137] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:34:39.713 [DEBUG] [Thread-126137] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T10:34:39.754 [DEBUG] [Thread-126137] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:34:39.754 [DEBUG] [Thread-126137] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:34:39.758 [DEBUG] [Thread-126137] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:34:39.770 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:34:39.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T10:34:39.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T10:34:39.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T10:34:39.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:34:39.782 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T10:34:39.782 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:34:39.782 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:34:39.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T10:34:39.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.357088 -999.00  +24.50   9.22     16   -2.30 1 1 1 1 1   888    0 25.69 -25.39 ----- 9.7 9.2 236.3 21.0 31.5 -27.7 31.0 -26.9 29.2 -24.7 29.9 -25.8
2025-12-31T10:34:39.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T10:34:39.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T10:34:39.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.357088
2025-12-31T10:34:39.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T10:34:39.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T10:34:39.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T10:34:39.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T10:34:39.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T10:34:39.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T10:34:09', tmtdew=32.93, humidity=10.97, cloud=0.0, wind=18.84, temperature=25.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T08:34:12.403', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T10:34:39.785 [DEBUG] [Thread-126137] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:34:39.858 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T10:34:39.874 [DEBUG] [Thread-126140] [transport.py] [_log()] starting thread (client mode): 0xb6b4aef0
2025-12-31T10:34:39.875 [DEBUG] [Thread-126140] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:34:39.890 [DEBUG] [Thread-126140] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T10:34:39.891 [INFO] [Thread-126140] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T10:34:39.901 [DEBUG] [Thread-126140] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:34:39.901 [DEBUG] [Thread-126140] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T10:34:39.901 [DEBUG] [Thread-126140] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:34:39.901 [DEBUG] [Thread-126140] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:34:39.901 [DEBUG] [Thread-126140] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:34:39.902 [DEBUG] [Thread-126140] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:34:39.902 [DEBUG] [Thread-126140] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:34:39.902 [DEBUG] [Thread-126140] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:34:39.902 [DEBUG] [Thread-126140] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:34:39.902 [DEBUG] [Thread-126140] [transport.py] [_log()] client lang: <none>
2025-12-31T10:34:39.902 [DEBUG] [Thread-126140] [transport.py] [_log()] server lang: <none>
2025-12-31T10:34:39.902 [DEBUG] [Thread-126140] [transport.py] [_log()] kex follows: False
2025-12-31T10:34:39.902 [DEBUG] [Thread-126140] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:34:39.902 [DEBUG] [Thread-126140] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:34:39.902 [DEBUG] [Thread-126140] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:34:39.902 [DEBUG] [Thread-126140] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:34:39.902 [DEBUG] [Thread-126140] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:34:39.902 [DEBUG] [Thread-126140] [transport.py] [_log()] Compression: none
2025-12-31T10:34:39.902 [DEBUG] [Thread-126140] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:34:39.959 [DEBUG] [Thread-126140] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:34:39.960 [DEBUG] [Thread-126140] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:34:39.961 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T10:34:39.961 [DEBUG] [Thread-126140] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T10:34:39.962 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:34:40.021 [DEBUG] [Thread-126140] [transport.py] [_log()] userauth is OK
2025-12-31T10:34:40.022 [DEBUG] [Thread-126140] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:34:40.022 [DEBUG] [Thread-126140] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:34:40.022 [DEBUG] [Thread-126140] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T10:34:40.022 [DEBUG] [Thread-126140] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:34:40.042 [INFO] [Thread-126140] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:34: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-12-31T10:34:40.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:34:40.891 [DEBUG] [Thread-126140] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:34:40.892 [DEBUG] [Thread-126140] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:34:40.940 [DEBUG] [Thread-126140] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:34:40.940 [DEBUG] [Thread-126140] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:34:40.951 [DEBUG] [Thread-126140] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:34:40.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:34:40.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T10:34:40.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T10:34:40.982 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:34:40.982 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:34:40.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:34:40.991 [DEBUG] [Thread-126140] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:34:52.982 [DEBUG] [Thread-126142 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:35:06.869 [DEBUG] [Thread-126143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:35:08.045 [DEBUG] [Thread-126144 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:35:11.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T10:35:11.013 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T10:35:11.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T10:35:11.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 10, 34, 42), 33.04, 10.52, 0.0, 18.0, 25.46, 0, 0, 0, 2, 0, 0),)
2025-12-31T10:35:11.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 10:34:42
2025-12-31T10:35:11.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T10:35:12.013 [DEBUG] [Thread-126145] [transport.py] [_log()] starting thread (client mode): 0xb95f3d60
2025-12-31T10:35:12.013 [DEBUG] [Thread-126145] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:35:12.032 [DEBUG] [Thread-126145] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T10:35:12.032 [INFO] [Thread-126145] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T10:35:12.036 [DEBUG] [Thread-126145] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:35:12.037 [DEBUG] [Thread-126145] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T10:35:12.037 [DEBUG] [Thread-126145] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:35:12.037 [DEBUG] [Thread-126145] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:35:12.037 [DEBUG] [Thread-126145] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:35:12.037 [DEBUG] [Thread-126145] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:35:12.037 [DEBUG] [Thread-126145] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:35:12.037 [DEBUG] [Thread-126145] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:35:12.037 [DEBUG] [Thread-126145] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:35:12.037 [DEBUG] [Thread-126145] [transport.py] [_log()] client lang: <none>
2025-12-31T10:35:12.037 [DEBUG] [Thread-126145] [transport.py] [_log()] server lang: <none>
2025-12-31T10:35:12.037 [DEBUG] [Thread-126145] [transport.py] [_log()] kex follows: False
2025-12-31T10:35:12.037 [DEBUG] [Thread-126145] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:35:12.037 [DEBUG] [Thread-126145] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:35:12.037 [DEBUG] [Thread-126145] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:35:12.037 [DEBUG] [Thread-126145] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:35:12.037 [DEBUG] [Thread-126145] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:35:12.037 [DEBUG] [Thread-126145] [transport.py] [_log()] Compression: none
2025-12-31T10:35:12.037 [DEBUG] [Thread-126145] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:35:12.053 [DEBUG] [Thread-126145] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:35:12.053 [DEBUG] [Thread-126145] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:35:12.053 [DEBUG] [Thread-126145] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T10:35:12.053 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T10:35:12.053 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:35:12.054 [DEBUG] [Thread-126145] [transport.py] [_log()] userauth is OK
2025-12-31T10:35:12.054 [DEBUG] [Thread-126145] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:35:12.054 [DEBUG] [Thread-126145] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:35:12.054 [DEBUG] [Thread-126145] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T10:35:12.054 [DEBUG] [Thread-126145] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:35:12.078 [INFO] [Thread-126145] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:35:12.078 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:35:15.075 [DEBUG] [Thread-126145] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:35:15.075 [DEBUG] [Thread-126145] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:35:15.075 [DEBUG] [Thread-126145] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T10:35:15.115 [DEBUG] [Thread-126145] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:35:15.115 [DEBUG] [Thread-126145] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:35:15.118 [DEBUG] [Thread-126145] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:35:15.132 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:35:15.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T10:35:15.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T10:35:15.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T10:35:15.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:35:15.188 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T10:35:15.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:35:15.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:35:15.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T10:35:15.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.357435 -999.00  +24.90  13.98     15   -2.80 1 1 1 1 1   888    0 25.79 -19.45 ----- 19.3 14.0 255.5 17.2 31.7 -27.7 31.1 -26.2 29.3 -26.7 29.9 -25.5
2025-12-31T10:35:15.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T10:35:15.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T10:35:15.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.357435
2025-12-31T10:35:15.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T10:35:15.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T10:35:15.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T10:35:15.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T10:35:15.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T10:35:15.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T10:34:42', tmtdew=33.04, humidity=10.52, cloud=0.0, wind=18.0, temperature=25.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T08:34:42.384', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T10:35:15.191 [DEBUG] [Thread-126145] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:35:15.268 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T10:35:15.280 [DEBUG] [Thread-126148] [transport.py] [_log()] starting thread (client mode): 0xb957ae90
2025-12-31T10:35:15.280 [DEBUG] [Thread-126148] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:35:15.297 [DEBUG] [Thread-126148] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T10:35:15.297 [INFO] [Thread-126148] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T10:35:15.305 [DEBUG] [Thread-126148] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:35:15.305 [DEBUG] [Thread-126148] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T10:35:15.305 [DEBUG] [Thread-126148] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:35:15.305 [DEBUG] [Thread-126148] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:35:15.305 [DEBUG] [Thread-126148] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:35:15.305 [DEBUG] [Thread-126148] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:35:15.305 [DEBUG] [Thread-126148] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:35:15.305 [DEBUG] [Thread-126148] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:35:15.305 [DEBUG] [Thread-126148] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:35:15.305 [DEBUG] [Thread-126148] [transport.py] [_log()] client lang: <none>
2025-12-31T10:35:15.305 [DEBUG] [Thread-126148] [transport.py] [_log()] server lang: <none>
2025-12-31T10:35:15.305 [DEBUG] [Thread-126148] [transport.py] [_log()] kex follows: False
2025-12-31T10:35:15.305 [DEBUG] [Thread-126148] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:35:15.305 [DEBUG] [Thread-126148] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:35:15.305 [DEBUG] [Thread-126148] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:35:15.305 [DEBUG] [Thread-126148] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:35:15.305 [DEBUG] [Thread-126148] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:35:15.305 [DEBUG] [Thread-126148] [transport.py] [_log()] Compression: none
2025-12-31T10:35:15.305 [DEBUG] [Thread-126148] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:35:15.360 [DEBUG] [Thread-126148] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:35:15.360 [DEBUG] [Thread-126148] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:35:15.360 [DEBUG] [Thread-126148] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T10:35:15.360 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T10:35:15.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:35:15.417 [DEBUG] [Thread-126148] [transport.py] [_log()] userauth is OK
2025-12-31T10:35:15.417 [DEBUG] [Thread-126148] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:35:15.417 [DEBUG] [Thread-126148] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:35:15.417 [DEBUG] [Thread-126148] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T10:35:15.417 [DEBUG] [Thread-126148] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:35:15.432 [INFO] [Thread-126148] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:35:15.432 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T10:35:15.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:35:16.247 [DEBUG] [Thread-126148] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:35:16.247 [DEBUG] [Thread-126148] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:35:16.295 [DEBUG] [Thread-126148] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:35:16.295 [DEBUG] [Thread-126148] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:35:16.303 [DEBUG] [Thread-126148] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:35:16.311 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:35:16.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T10:35:16.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T10:35:16.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:35:16.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:35:16.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:35:16.335 [DEBUG] [Thread-126148] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:35:23.079 [DEBUG] [Thread-126150 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:35:26.206 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:35:26.207 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:35:38.129 [DEBUG] [Thread-126151 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:35:46.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T10:35:46.338 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T10:35:46.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T10:35:47.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 10, 35, 14), 33.73, 10.04, 0.0, 23.1, 25.61, 0, 0, 0, 2, 0, 0),)
2025-12-31T10:35:47.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 10:35:14
2025-12-31T10:35:47.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T10:35:47.399 [DEBUG] [Thread-126152] [transport.py] [_log()] starting thread (client mode): 0xb6b36d10
2025-12-31T10:35:47.399 [DEBUG] [Thread-126152] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:35:47.416 [DEBUG] [Thread-126152] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T10:35:47.417 [INFO] [Thread-126152] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T10:35:47.420 [DEBUG] [Thread-126152] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:35:47.420 [DEBUG] [Thread-126152] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T10:35:47.420 [DEBUG] [Thread-126152] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:35:47.420 [DEBUG] [Thread-126152] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:35:47.420 [DEBUG] [Thread-126152] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:35:47.420 [DEBUG] [Thread-126152] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:35:47.420 [DEBUG] [Thread-126152] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:35:47.420 [DEBUG] [Thread-126152] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:35:47.420 [DEBUG] [Thread-126152] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:35:47.420 [DEBUG] [Thread-126152] [transport.py] [_log()] client lang: <none>
2025-12-31T10:35:47.420 [DEBUG] [Thread-126152] [transport.py] [_log()] server lang: <none>
2025-12-31T10:35:47.420 [DEBUG] [Thread-126152] [transport.py] [_log()] kex follows: False
2025-12-31T10:35:47.420 [DEBUG] [Thread-126152] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:35:47.420 [DEBUG] [Thread-126152] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:35:47.420 [DEBUG] [Thread-126152] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:35:47.420 [DEBUG] [Thread-126152] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:35:47.420 [DEBUG] [Thread-126152] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:35:47.420 [DEBUG] [Thread-126152] [transport.py] [_log()] Compression: none
2025-12-31T10:35:47.420 [DEBUG] [Thread-126152] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:35:47.438 [DEBUG] [Thread-126152] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:35:47.438 [DEBUG] [Thread-126152] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:35:47.438 [DEBUG] [Thread-126152] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T10:35:47.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T10:35:47.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:35:47.439 [DEBUG] [Thread-126152] [transport.py] [_log()] userauth is OK
2025-12-31T10:35:47.439 [DEBUG] [Thread-126152] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:35:47.439 [DEBUG] [Thread-126152] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:35:47.439 [DEBUG] [Thread-126152] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T10:35:47.439 [DEBUG] [Thread-126152] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:35:47.458 [INFO] [Thread-126152] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:35:47.458 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:35:48.065 [DEBUG] [Thread-126152] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:35:48.065 [DEBUG] [Thread-126152] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:35:48.065 [DEBUG] [Thread-126152] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T10:35:48.107 [DEBUG] [Thread-126152] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:35:48.107 [DEBUG] [Thread-126152] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:35:48.109 [DEBUG] [Thread-126152] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:35:48.116 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:35:48.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T10:35:48.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T10:35:48.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T10:35:48.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:35:48.121 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T10:35:48.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:35:48.121 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:35:48.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T10:35:48.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.357782 -999.00  +25.20  24.96     15   -3.20 1 1 1 1 1   888    0 26.37 -5.77 ----- 23.1 25.0 273.0 30.5 31.6 -29.3 31.0 -26.7 29.3 -27.7 29.9 -25.6
2025-12-31T10:35:48.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T10:35:48.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T10:35:48.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.357782
2025-12-31T10:35:48.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T10:35:48.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T10:35:48.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T10:35:48.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T10:35:48.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T10:35:48.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T10:35:14', tmtdew=33.73, humidity=10.04, cloud=0.0, wind=23.1, temperature=25.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T08:35:12.365', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T10:35:48.122 [DEBUG] [Thread-126152] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:35:48.200 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T10:35:48.210 [DEBUG] [Thread-126155] [transport.py] [_log()] starting thread (client mode): 0xb6bbb460
2025-12-31T10:35:48.210 [DEBUG] [Thread-126155] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:35:48.224 [DEBUG] [Thread-126155] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T10:35:48.224 [INFO] [Thread-126155] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T10:35:48.231 [DEBUG] [Thread-126155] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:35:48.231 [DEBUG] [Thread-126155] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T10:35:48.231 [DEBUG] [Thread-126155] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:35:48.231 [DEBUG] [Thread-126155] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:35:48.231 [DEBUG] [Thread-126155] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:35:48.231 [DEBUG] [Thread-126155] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:35:48.231 [DEBUG] [Thread-126155] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:35:48.231 [DEBUG] [Thread-126155] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:35:48.231 [DEBUG] [Thread-126155] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:35:48.231 [DEBUG] [Thread-126155] [transport.py] [_log()] client lang: <none>
2025-12-31T10:35:48.232 [DEBUG] [Thread-126155] [transport.py] [_log()] server lang: <none>
2025-12-31T10:35:48.232 [DEBUG] [Thread-126155] [transport.py] [_log()] kex follows: False
2025-12-31T10:35:48.232 [DEBUG] [Thread-126155] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:35:48.232 [DEBUG] [Thread-126155] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:35:48.232 [DEBUG] [Thread-126155] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:35:48.232 [DEBUG] [Thread-126155] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:35:48.232 [DEBUG] [Thread-126155] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:35:48.232 [DEBUG] [Thread-126155] [transport.py] [_log()] Compression: none
2025-12-31T10:35:48.232 [DEBUG] [Thread-126155] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:35:48.292 [DEBUG] [Thread-126155] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:35:48.292 [DEBUG] [Thread-126155] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:35:48.292 [DEBUG] [Thread-126155] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T10:35:48.292 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T10:35:48.292 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:35:48.353 [DEBUG] [Thread-126155] [transport.py] [_log()] userauth is OK
2025-12-31T10:35:48.353 [DEBUG] [Thread-126155] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:35:48.353 [DEBUG] [Thread-126155] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:35:48.353 [DEBUG] [Thread-126155] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T10:35:48.353 [DEBUG] [Thread-126155] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:35:48.371 [INFO] [Thread-126155] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:35:48.371 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T10:35:48.372 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:35:49.240 [DEBUG] [Thread-126155] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:35:49.240 [DEBUG] [Thread-126155] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:35:49.288 [DEBUG] [Thread-126155] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:35:49.288 [DEBUG] [Thread-126155] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:35:49.297 [DEBUG] [Thread-126155] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:35:49.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:35:49.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T10:35:49.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T10:35:49.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:35:49.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:35:49.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:35:49.334 [DEBUG] [Thread-126155] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:35:53.164 [DEBUG] [Thread-126157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:36:06.922 [DEBUG] [Thread-126158 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:36:08.212 [DEBUG] [Thread-126159 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:36:19.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T10:36:19.356 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T10:36:19.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T10:36:20.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 10, 35, 46), 34.45, 9.49, 0.0, 27.45, 25.37, 0, 0, 0, 2, 0, 0),)
2025-12-31T10:36:20.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 10:35:46
2025-12-31T10:36:20.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T10:36:20.391 [DEBUG] [Thread-126160] [transport.py] [_log()] starting thread (client mode): 0xb6bb1690
2025-12-31T10:36:20.391 [DEBUG] [Thread-126160] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:36:20.413 [DEBUG] [Thread-126160] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T10:36:20.413 [INFO] [Thread-126160] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T10:36:20.415 [DEBUG] [Thread-126160] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:36:20.415 [DEBUG] [Thread-126160] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T10:36:20.415 [DEBUG] [Thread-126160] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:36:20.415 [DEBUG] [Thread-126160] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:36:20.415 [DEBUG] [Thread-126160] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:36:20.415 [DEBUG] [Thread-126160] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:36:20.415 [DEBUG] [Thread-126160] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:36:20.415 [DEBUG] [Thread-126160] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:36:20.415 [DEBUG] [Thread-126160] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:36:20.415 [DEBUG] [Thread-126160] [transport.py] [_log()] client lang: <none>
2025-12-31T10:36:20.415 [DEBUG] [Thread-126160] [transport.py] [_log()] server lang: <none>
2025-12-31T10:36:20.415 [DEBUG] [Thread-126160] [transport.py] [_log()] kex follows: False
2025-12-31T10:36:20.415 [DEBUG] [Thread-126160] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:36:20.415 [DEBUG] [Thread-126160] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:36:20.416 [DEBUG] [Thread-126160] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:36:20.416 [DEBUG] [Thread-126160] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:36:20.416 [DEBUG] [Thread-126160] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:36:20.416 [DEBUG] [Thread-126160] [transport.py] [_log()] Compression: none
2025-12-31T10:36:20.416 [DEBUG] [Thread-126160] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:36:20.431 [DEBUG] [Thread-126160] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:36:20.431 [DEBUG] [Thread-126160] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:36:20.431 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T10:36:20.431 [DEBUG] [Thread-126160] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T10:36:20.431 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:36:20.433 [DEBUG] [Thread-126160] [transport.py] [_log()] userauth is OK
2025-12-31T10:36:20.433 [DEBUG] [Thread-126160] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:36:20.433 [DEBUG] [Thread-126160] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:36:20.433 [DEBUG] [Thread-126160] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T10:36:20.433 [DEBUG] [Thread-126160] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:36:20.459 [INFO] [Thread-126160] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:36:20.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:36:21.029 [DEBUG] [Thread-126160] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:36:21.030 [DEBUG] [Thread-126160] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:36:21.030 [DEBUG] [Thread-126160] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T10:36:21.071 [DEBUG] [Thread-126160] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:36:21.071 [DEBUG] [Thread-126160] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:36:21.074 [DEBUG] [Thread-126160] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:36:21.081 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:36:21.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T10:36:21.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T10:36:21.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T10:36:21.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:36:21.097 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T10:36:21.097 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:36:21.097 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:36:21.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T10:36:21.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.358130 -999.00  +25.30  12.66     14   -3.20 1 1 1 1 1   888    0 26.28 6.77 ----- 22.3 12.7 295.8 30.3 31.7 -27.6 31.2 -26.6 29.5 -24.7 30.1 -26.2
2025-12-31T10:36:21.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T10:36:21.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T10:36:21.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.358130
2025-12-31T10:36:21.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T10:36:21.106 [DEBUG] [Thread-126160] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:36:21.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T10:36:21.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T10:36:21.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T10:36:21.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T10:36:21.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T10:35:46', tmtdew=34.45, humidity=9.49, cloud=0.0, wind=27.45, temperature=25.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T08:35:42.432', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T10:36:21.197 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T10:36:21.209 [DEBUG] [Thread-126163] [transport.py] [_log()] starting thread (client mode): 0xb9590280
2025-12-31T10:36:21.210 [DEBUG] [Thread-126163] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:36:21.224 [DEBUG] [Thread-126163] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T10:36:21.225 [INFO] [Thread-126163] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T10:36:21.232 [DEBUG] [Thread-126163] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:36:21.232 [DEBUG] [Thread-126163] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T10:36:21.232 [DEBUG] [Thread-126163] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:36:21.232 [DEBUG] [Thread-126163] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:36:21.232 [DEBUG] [Thread-126163] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:36:21.232 [DEBUG] [Thread-126163] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:36:21.233 [DEBUG] [Thread-126163] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:36:21.233 [DEBUG] [Thread-126163] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:36:21.233 [DEBUG] [Thread-126163] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:36:21.233 [DEBUG] [Thread-126163] [transport.py] [_log()] client lang: <none>
2025-12-31T10:36:21.233 [DEBUG] [Thread-126163] [transport.py] [_log()] server lang: <none>
2025-12-31T10:36:21.233 [DEBUG] [Thread-126163] [transport.py] [_log()] kex follows: False
2025-12-31T10:36:21.233 [DEBUG] [Thread-126163] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:36:21.233 [DEBUG] [Thread-126163] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:36:21.233 [DEBUG] [Thread-126163] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:36:21.233 [DEBUG] [Thread-126163] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:36:21.233 [DEBUG] [Thread-126163] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:36:21.233 [DEBUG] [Thread-126163] [transport.py] [_log()] Compression: none
2025-12-31T10:36:21.233 [DEBUG] [Thread-126163] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:36:21.289 [DEBUG] [Thread-126163] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:36:21.290 [DEBUG] [Thread-126163] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:36:21.291 [DEBUG] [Thread-126163] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T10:36:21.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T10:36:21.292 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:36:21.346 [DEBUG] [Thread-126163] [transport.py] [_log()] userauth is OK
2025-12-31T10:36:21.346 [DEBUG] [Thread-126163] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:36:21.346 [DEBUG] [Thread-126163] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:36:21.346 [DEBUG] [Thread-126163] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T10:36:21.347 [DEBUG] [Thread-126163] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:36:21.365 [INFO] [Thread-126163] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:36:21.365 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T10:36:21.366 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:36:22.202 [DEBUG] [Thread-126163] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:36:22.202 [DEBUG] [Thread-126163] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:36:22.250 [DEBUG] [Thread-126163] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:36:22.250 [DEBUG] [Thread-126163] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:36:22.259 [DEBUG] [Thread-126163] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:36:22.268 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:36:22.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T10:36:22.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T10:36:22.286 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:36:22.286 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:36:22.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:36:22.295 [DEBUG] [Thread-126163] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:36:23.248 [DEBUG] [Thread-126165 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:36:26.347 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:36:26.348 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:36:38.305 [DEBUG] [Thread-126166 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:36:52.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T10:36:52.317 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T10:36:52.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T10:36:53.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 10, 36, 18), 34.23, 9.64, 0.0, 24.74, 25.31, 0, 0, 0, 2, 0, 0),)
2025-12-31T10:36:53.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 10:36:18
2025-12-31T10:36:53.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T10:36:53.306 [DEBUG] [Thread-126167] [transport.py] [_log()] starting thread (client mode): 0xb9593f10
2025-12-31T10:36:53.306 [DEBUG] [Thread-126167] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:36:53.326 [DEBUG] [Thread-126167] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T10:36:53.326 [INFO] [Thread-126167] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T10:36:53.329 [DEBUG] [Thread-126167] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:36:53.329 [DEBUG] [Thread-126167] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T10:36:53.329 [DEBUG] [Thread-126167] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:36:53.329 [DEBUG] [Thread-126167] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:36:53.329 [DEBUG] [Thread-126167] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:36:53.329 [DEBUG] [Thread-126167] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:36:53.329 [DEBUG] [Thread-126167] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:36:53.329 [DEBUG] [Thread-126167] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:36:53.329 [DEBUG] [Thread-126167] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:36:53.329 [DEBUG] [Thread-126167] [transport.py] [_log()] client lang: <none>
2025-12-31T10:36:53.329 [DEBUG] [Thread-126167] [transport.py] [_log()] server lang: <none>
2025-12-31T10:36:53.329 [DEBUG] [Thread-126167] [transport.py] [_log()] kex follows: False
2025-12-31T10:36:53.329 [DEBUG] [Thread-126167] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:36:53.330 [DEBUG] [Thread-126167] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:36:53.330 [DEBUG] [Thread-126167] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:36:53.330 [DEBUG] [Thread-126167] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:36:53.330 [DEBUG] [Thread-126167] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:36:53.330 [DEBUG] [Thread-126167] [transport.py] [_log()] Compression: none
2025-12-31T10:36:53.330 [DEBUG] [Thread-126167] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:36:53.340 [DEBUG] [Thread-126169 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:36:53.347 [DEBUG] [Thread-126167] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:36:53.347 [DEBUG] [Thread-126167] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:36:53.348 [DEBUG] [Thread-126167] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T10:36:53.348 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T10:36:53.348 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:36:53.349 [DEBUG] [Thread-126167] [transport.py] [_log()] userauth is OK
2025-12-31T10:36:53.350 [DEBUG] [Thread-126167] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:36:53.350 [DEBUG] [Thread-126167] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:36:53.350 [DEBUG] [Thread-126167] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T10:36:53.350 [DEBUG] [Thread-126167] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:36:53.368 [INFO] [Thread-126167] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:36:53.369 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:36:54.001 [DEBUG] [Thread-126167] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:36:54.001 [DEBUG] [Thread-126167] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:36:54.002 [DEBUG] [Thread-126167] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T10:36:54.042 [DEBUG] [Thread-126167] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:36:54.042 [DEBUG] [Thread-126167] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:36:54.046 [DEBUG] [Thread-126167] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:36:54.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:36:54.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T10:36:54.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T10:36:54.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T10:36:54.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:36:54.068 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T10:36:54.068 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:36:54.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:36:54.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T10:36:54.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.358477 -999.00  +24.60  24.46     15   -3.30 1 1 1 1 1   888    0 27.07 20.17 ----- 23.0 24.5 277.6 34.5 31.3 -30.6 30.9 -26.9 28.9 -27.2 29.9 -27.9
2025-12-31T10:36:54.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T10:36:54.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T10:36:54.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.358477
2025-12-31T10:36:54.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T10:36:54.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T10:36:54.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T10:36:54.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T10:36:54.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T10:36:54.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T10:36:18', tmtdew=34.23, humidity=9.64, cloud=0.0, wind=24.74, temperature=25.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T08:36:12.413', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T10:36:54.071 [DEBUG] [Thread-126167] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:36:54.153 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T10:36:54.163 [DEBUG] [Thread-126171] [transport.py] [_log()] starting thread (client mode): 0xb6b48730
2025-12-31T10:36:54.164 [DEBUG] [Thread-126171] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:36:54.179 [DEBUG] [Thread-126171] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T10:36:54.179 [INFO] [Thread-126171] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T10:36:54.189 [DEBUG] [Thread-126171] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:36:54.189 [DEBUG] [Thread-126171] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T10:36:54.190 [DEBUG] [Thread-126171] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:36:54.190 [DEBUG] [Thread-126171] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:36:54.190 [DEBUG] [Thread-126171] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:36:54.190 [DEBUG] [Thread-126171] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:36:54.190 [DEBUG] [Thread-126171] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:36:54.190 [DEBUG] [Thread-126171] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:36:54.190 [DEBUG] [Thread-126171] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:36:54.191 [DEBUG] [Thread-126171] [transport.py] [_log()] client lang: <none>
2025-12-31T10:36:54.191 [DEBUG] [Thread-126171] [transport.py] [_log()] server lang: <none>
2025-12-31T10:36:54.191 [DEBUG] [Thread-126171] [transport.py] [_log()] kex follows: False
2025-12-31T10:36:54.191 [DEBUG] [Thread-126171] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:36:54.191 [DEBUG] [Thread-126171] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:36:54.191 [DEBUG] [Thread-126171] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:36:54.191 [DEBUG] [Thread-126171] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:36:54.191 [DEBUG] [Thread-126171] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:36:54.192 [DEBUG] [Thread-126171] [transport.py] [_log()] Compression: none
2025-12-31T10:36:54.192 [DEBUG] [Thread-126171] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:36:54.246 [DEBUG] [Thread-126171] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:36:54.246 [DEBUG] [Thread-126171] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:36:54.247 [DEBUG] [Thread-126171] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T10:36:54.247 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T10:36:54.248 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:36:54.302 [DEBUG] [Thread-126171] [transport.py] [_log()] userauth is OK
2025-12-31T10:36:54.302 [DEBUG] [Thread-126171] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:36:54.302 [DEBUG] [Thread-126171] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:36:54.303 [DEBUG] [Thread-126171] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T10:36:54.303 [DEBUG] [Thread-126171] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:36:54.323 [INFO] [Thread-126171] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:36:54.323 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T10:36:54.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:36:55.174 [DEBUG] [Thread-126171] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:36:55.174 [DEBUG] [Thread-126171] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:36:55.221 [DEBUG] [Thread-126171] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:36:55.221 [DEBUG] [Thread-126171] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:36:55.230 [DEBUG] [Thread-126171] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:36:55.239 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:36:55.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-12-31T10:36:55.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T10:36:55.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:36:55.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:36:55.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:36:55.266 [DEBUG] [Thread-126171] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:37:06.970 [DEBUG] [Thread-126173 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:37:08.377 [DEBUG] [Thread-126174 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:37:23.435 [DEBUG] [Thread-126175 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:37:25.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T10:37:25.261 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T10:37:25.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T10:37:25.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 10, 37, 22), 33.97, 9.65, 0.0, 24.54, 25.21, 0, 0, 0, 2, 0, 0),)
2025-12-31T10:37:25.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 10:37:22
2025-12-31T10:37:26.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T10:37:26.251 [DEBUG] [Thread-126176] [transport.py] [_log()] starting thread (client mode): 0xb6be3670
2025-12-31T10:37:26.252 [DEBUG] [Thread-126176] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:37:26.258 [DEBUG] [Thread-126176] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T10:37:26.258 [INFO] [Thread-126176] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T10:37:26.260 [DEBUG] [Thread-126176] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:37:26.260 [DEBUG] [Thread-126176] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T10:37:26.260 [DEBUG] [Thread-126176] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:37:26.260 [DEBUG] [Thread-126176] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:37:26.260 [DEBUG] [Thread-126176] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:37:26.260 [DEBUG] [Thread-126176] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:37:26.260 [DEBUG] [Thread-126176] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:37:26.260 [DEBUG] [Thread-126176] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:37:26.260 [DEBUG] [Thread-126176] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:37:26.260 [DEBUG] [Thread-126176] [transport.py] [_log()] client lang: <none>
2025-12-31T10:37:26.260 [DEBUG] [Thread-126176] [transport.py] [_log()] server lang: <none>
2025-12-31T10:37:26.260 [DEBUG] [Thread-126176] [transport.py] [_log()] kex follows: False
2025-12-31T10:37:26.260 [DEBUG] [Thread-126176] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:37:26.260 [DEBUG] [Thread-126176] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:37:26.260 [DEBUG] [Thread-126176] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:37:26.260 [DEBUG] [Thread-126176] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:37:26.260 [DEBUG] [Thread-126176] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:37:26.261 [DEBUG] [Thread-126176] [transport.py] [_log()] Compression: none
2025-12-31T10:37:26.261 [DEBUG] [Thread-126176] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:37:26.269 [DEBUG] [Thread-126176] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:37:26.270 [DEBUG] [Thread-126176] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:37:26.270 [DEBUG] [Thread-126176] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T10:37:26.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T10:37:26.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:37:26.272 [DEBUG] [Thread-126176] [transport.py] [_log()] userauth is OK
2025-12-31T10:37:26.272 [DEBUG] [Thread-126176] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:37:26.272 [DEBUG] [Thread-126176] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:37:26.272 [DEBUG] [Thread-126176] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T10:37:26.272 [DEBUG] [Thread-126176] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:37:26.304 [INFO] [Thread-126176] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:37:26.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:37:26.490 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:37:26.491 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:37:27.058 [DEBUG] [Thread-126176] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:37:27.058 [DEBUG] [Thread-126176] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:37:27.058 [DEBUG] [Thread-126176] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T10:37:27.099 [DEBUG] [Thread-126176] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:37:27.099 [DEBUG] [Thread-126176] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:37:27.101 [DEBUG] [Thread-126176] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:37:27.108 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:37:27.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T10:37:27.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T10:37:27.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T10:37:27.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:37:27.118 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T10:37:27.118 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:37:27.118 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:37:27.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T10:37:27.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.358824 -999.00  +24.70  23.82     15   -3.30 1 1 1 1 1   888    0 27.29 31.00 ----- 23.3 23.8 274.4 29.8 31.5 -28.4 30.9 -26.8 29.2 -27.9 29.9 -25.6
2025-12-31T10:37:27.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T10:37:27.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T10:37:27.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.358824
2025-12-31T10:37:27.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T10:37:27.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T10:37:27.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T10:37:27.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T10:37:27.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T10:37:27.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T10:37:22', tmtdew=33.97, humidity=9.65, cloud=0.0, wind=24.54, temperature=25.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T08:36:42.394', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T10:37:27.120 [DEBUG] [Thread-126176] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:37:27.210 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T10:37:27.221 [DEBUG] [Thread-126179] [transport.py] [_log()] starting thread (client mode): 0xb95f0af0
2025-12-31T10:37:27.221 [DEBUG] [Thread-126179] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:37:27.236 [DEBUG] [Thread-126179] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T10:37:27.236 [INFO] [Thread-126179] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T10:37:27.243 [DEBUG] [Thread-126179] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:37:27.244 [DEBUG] [Thread-126179] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T10:37:27.244 [DEBUG] [Thread-126179] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:37:27.244 [DEBUG] [Thread-126179] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:37:27.244 [DEBUG] [Thread-126179] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:37:27.244 [DEBUG] [Thread-126179] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:37:27.244 [DEBUG] [Thread-126179] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:37:27.244 [DEBUG] [Thread-126179] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:37:27.244 [DEBUG] [Thread-126179] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:37:27.244 [DEBUG] [Thread-126179] [transport.py] [_log()] client lang: <none>
2025-12-31T10:37:27.244 [DEBUG] [Thread-126179] [transport.py] [_log()] server lang: <none>
2025-12-31T10:37:27.244 [DEBUG] [Thread-126179] [transport.py] [_log()] kex follows: False
2025-12-31T10:37:27.244 [DEBUG] [Thread-126179] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:37:27.245 [DEBUG] [Thread-126179] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:37:27.245 [DEBUG] [Thread-126179] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:37:27.245 [DEBUG] [Thread-126179] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:37:27.245 [DEBUG] [Thread-126179] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:37:27.245 [DEBUG] [Thread-126179] [transport.py] [_log()] Compression: none
2025-12-31T10:37:27.245 [DEBUG] [Thread-126179] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:37:27.301 [DEBUG] [Thread-126179] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:37:27.301 [DEBUG] [Thread-126179] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:37:27.302 [DEBUG] [Thread-126179] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T10:37:27.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T10:37:27.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:37:27.358 [DEBUG] [Thread-126179] [transport.py] [_log()] userauth is OK
2025-12-31T10:37:27.358 [DEBUG] [Thread-126179] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:37:27.358 [DEBUG] [Thread-126179] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:37:27.358 [DEBUG] [Thread-126179] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T10:37:27.358 [DEBUG] [Thread-126179] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:37:27.377 [INFO] [Thread-126179] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:37:27.378 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T10:37:27.378 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:37:28.254 [DEBUG] [Thread-126179] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:37:28.254 [DEBUG] [Thread-126179] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:37:28.301 [DEBUG] [Thread-126179] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:37:28.302 [DEBUG] [Thread-126179] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:37:28.310 [DEBUG] [Thread-126179] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:37:28.318 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:37:28.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T10:37:28.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T10:37:28.335 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:37:28.335 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:37:28.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:37:28.343 [DEBUG] [Thread-126179] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:37:38.463 [DEBUG] [Thread-126181 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:37:53.521 [DEBUG] [Thread-126182 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:37:58.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T10:37:58.357 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T10:37:58.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T10:37:59.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 10, 37, 54), 33.98, 9.8, 0.0, 20.08, 25.41, 0, 0, 0, 2, 0, 0),)
2025-12-31T10:37:59.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 10:37:54
2025-12-31T10:37:59.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T10:37:59.348 [DEBUG] [Thread-126183] [transport.py] [_log()] starting thread (client mode): 0xb95f0c40
2025-12-31T10:37:59.348 [DEBUG] [Thread-126183] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:37:59.370 [DEBUG] [Thread-126183] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T10:37:59.370 [INFO] [Thread-126183] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T10:37:59.371 [DEBUG] [Thread-126183] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:37:59.371 [DEBUG] [Thread-126183] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T10:37:59.372 [DEBUG] [Thread-126183] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:37:59.372 [DEBUG] [Thread-126183] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:37:59.372 [DEBUG] [Thread-126183] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:37:59.372 [DEBUG] [Thread-126183] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:37:59.372 [DEBUG] [Thread-126183] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:37:59.372 [DEBUG] [Thread-126183] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:37:59.372 [DEBUG] [Thread-126183] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:37:59.372 [DEBUG] [Thread-126183] [transport.py] [_log()] client lang: <none>
2025-12-31T10:37:59.372 [DEBUG] [Thread-126183] [transport.py] [_log()] server lang: <none>
2025-12-31T10:37:59.372 [DEBUG] [Thread-126183] [transport.py] [_log()] kex follows: False
2025-12-31T10:37:59.372 [DEBUG] [Thread-126183] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:37:59.372 [DEBUG] [Thread-126183] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:37:59.372 [DEBUG] [Thread-126183] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:37:59.372 [DEBUG] [Thread-126183] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:37:59.372 [DEBUG] [Thread-126183] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:37:59.372 [DEBUG] [Thread-126183] [transport.py] [_log()] Compression: none
2025-12-31T10:37:59.372 [DEBUG] [Thread-126183] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:37:59.391 [DEBUG] [Thread-126183] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:37:59.392 [DEBUG] [Thread-126183] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:37:59.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T10:37:59.393 [DEBUG] [Thread-126183] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T10:37:59.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:37:59.395 [DEBUG] [Thread-126183] [transport.py] [_log()] userauth is OK
2025-12-31T10:37:59.396 [DEBUG] [Thread-126183] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:37:59.396 [DEBUG] [Thread-126183] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:37:59.396 [DEBUG] [Thread-126183] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T10:37:59.396 [DEBUG] [Thread-126183] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:37:59.421 [INFO] [Thread-126183] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:37:59.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:38:00.061 [DEBUG] [Thread-126183] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:38:00.061 [DEBUG] [Thread-126183] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:38:00.061 [DEBUG] [Thread-126183] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T10:38:00.102 [DEBUG] [Thread-126183] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:38:00.102 [DEBUG] [Thread-126183] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:38:00.106 [DEBUG] [Thread-126183] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:38:00.117 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:38:00.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T10:38:00.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T10:38:00.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T10:38:00.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:38:00.133 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T10:38:00.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:38:00.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:38:00.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T10:38:00.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.359519 -999.00  +24.90  14.78     15   -3.10 1 1 1 1 1   888    0 27.83 52.42 ----- 13.8 14.8 296.4 22.4 31.6 -26.6 31.1 -25.7 29.4 -23.9 30.0 -24.8
2025-12-31T10:38:00.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T10:38:00.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T10:38:00.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.359519
2025-12-31T10:38:00.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T10:38:00.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T10:38:00.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T10:38:00.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T10:38:00.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T10:38:00.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T10:37:54', tmtdew=33.98, humidity=9.8, cloud=0.0, wind=20.08, temperature=25.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T08:37:42.442', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T10:38:00.136 [DEBUG] [Thread-126183] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:38:00.219 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T10:38:00.231 [DEBUG] [Thread-126186] [transport.py] [_log()] starting thread (client mode): 0xb6be1270
2025-12-31T10:38:00.231 [DEBUG] [Thread-126186] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:38:00.246 [DEBUG] [Thread-126186] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T10:38:00.246 [INFO] [Thread-126186] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T10:38:00.254 [DEBUG] [Thread-126186] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:38:00.254 [DEBUG] [Thread-126186] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T10:38:00.254 [DEBUG] [Thread-126186] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:38:00.254 [DEBUG] [Thread-126186] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:38:00.254 [DEBUG] [Thread-126186] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:38:00.254 [DEBUG] [Thread-126186] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:38:00.254 [DEBUG] [Thread-126186] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:38:00.255 [DEBUG] [Thread-126186] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:38:00.255 [DEBUG] [Thread-126186] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:38:00.255 [DEBUG] [Thread-126186] [transport.py] [_log()] client lang: <none>
2025-12-31T10:38:00.255 [DEBUG] [Thread-126186] [transport.py] [_log()] server lang: <none>
2025-12-31T10:38:00.255 [DEBUG] [Thread-126186] [transport.py] [_log()] kex follows: False
2025-12-31T10:38:00.255 [DEBUG] [Thread-126186] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:38:00.255 [DEBUG] [Thread-126186] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:38:00.255 [DEBUG] [Thread-126186] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:38:00.255 [DEBUG] [Thread-126186] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:38:00.255 [DEBUG] [Thread-126186] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:38:00.255 [DEBUG] [Thread-126186] [transport.py] [_log()] Compression: none
2025-12-31T10:38:00.255 [DEBUG] [Thread-126186] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:38:00.314 [DEBUG] [Thread-126186] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:38:00.314 [DEBUG] [Thread-126186] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:38:00.315 [DEBUG] [Thread-126186] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T10:38:00.315 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T10:38:00.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:38:00.371 [DEBUG] [Thread-126186] [transport.py] [_log()] userauth is OK
2025-12-31T10:38:00.371 [DEBUG] [Thread-126186] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:38:00.371 [DEBUG] [Thread-126186] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:38:00.371 [DEBUG] [Thread-126186] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T10:38:00.371 [DEBUG] [Thread-126186] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:38:00.390 [INFO] [Thread-126186] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:38:00.390 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T10:38:00.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:38:01.247 [DEBUG] [Thread-126186] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:38:01.248 [DEBUG] [Thread-126186] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:38:01.296 [DEBUG] [Thread-126186] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:38:01.296 [DEBUG] [Thread-126186] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:38:01.305 [DEBUG] [Thread-126186] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:38:01.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:38:01.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T10:38: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') -> 00000000
2025-12-31T10:38:01.330 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:38:01.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:38:01.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:38:01.339 [DEBUG] [Thread-126186] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:38:07.004 [DEBUG] [Thread-126188 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:38:08.552 [DEBUG] [Thread-126189 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:38:23.617 [DEBUG] [Thread-126190 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:38:26.631 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:38:26.633 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:38:31.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T10:38:31.361 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T10:38:31.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T10:38:32.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 10, 38, 26), 33.94, 9.8, 0.0, 19.11, 25.24, 0, 0, 0, 2, 0, 0),)
2025-12-31T10:38:32.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 10:38:26
2025-12-31T10:38:32.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T10:38:32.393 [DEBUG] [Thread-126191] [transport.py] [_log()] starting thread (client mode): 0xb6be2fe0
2025-12-31T10:38:32.393 [DEBUG] [Thread-126191] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:38:32.413 [DEBUG] [Thread-126191] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T10:38:32.413 [INFO] [Thread-126191] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T10:38:32.416 [DEBUG] [Thread-126191] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:38:32.416 [DEBUG] [Thread-126191] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T10:38:32.416 [DEBUG] [Thread-126191] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:38:32.416 [DEBUG] [Thread-126191] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:38:32.416 [DEBUG] [Thread-126191] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:38:32.416 [DEBUG] [Thread-126191] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:38:32.416 [DEBUG] [Thread-126191] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:38:32.416 [DEBUG] [Thread-126191] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:38:32.416 [DEBUG] [Thread-126191] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:38:32.416 [DEBUG] [Thread-126191] [transport.py] [_log()] client lang: <none>
2025-12-31T10:38:32.416 [DEBUG] [Thread-126191] [transport.py] [_log()] server lang: <none>
2025-12-31T10:38:32.416 [DEBUG] [Thread-126191] [transport.py] [_log()] kex follows: False
2025-12-31T10:38:32.416 [DEBUG] [Thread-126191] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:38:32.416 [DEBUG] [Thread-126191] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:38:32.416 [DEBUG] [Thread-126191] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:38:32.416 [DEBUG] [Thread-126191] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:38:32.416 [DEBUG] [Thread-126191] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:38:32.416 [DEBUG] [Thread-126191] [transport.py] [_log()] Compression: none
2025-12-31T10:38:32.416 [DEBUG] [Thread-126191] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:38:32.431 [DEBUG] [Thread-126191] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:38:32.431 [DEBUG] [Thread-126191] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:38:32.432 [DEBUG] [Thread-126191] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T10:38:32.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T10:38:32.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:38:32.432 [DEBUG] [Thread-126191] [transport.py] [_log()] userauth is OK
2025-12-31T10:38:32.432 [DEBUG] [Thread-126191] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:38:32.432 [DEBUG] [Thread-126191] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:38:32.432 [DEBUG] [Thread-126191] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T10:38:32.432 [DEBUG] [Thread-126191] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:38:32.441 [INFO] [Thread-126191] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:38:32.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:38:33.183 [DEBUG] [Thread-126191] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:38:33.183 [DEBUG] [Thread-126191] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:38:33.183 [DEBUG] [Thread-126191] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T10:38:33.224 [DEBUG] [Thread-126191] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:38:33.224 [DEBUG] [Thread-126191] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:38:33.227 [DEBUG] [Thread-126191] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:38:33.238 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:38:33.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T10:38:33.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T10:38:33.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T10:38:33.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:38:33.244 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T10:38:33.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:38:33.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:38:33.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T10:38:33.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.359866 -999.00  +25.00  25.71     15   -3.20 1 1 1 1 1   888    0 27.99 61.34 ----- 15.8 25.7 291.6 30.7 31.8 -27.6 31.1 -26.0 29.6 -24.7 30.1 -25.2
2025-12-31T10:38:33.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T10:38:33.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T10:38:33.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.359866
2025-12-31T10:38:33.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T10:38:33.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T10:38:33.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T10:38:33.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T10:38:33.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T10:38:33.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T10:38:26', tmtdew=33.94, humidity=9.8, cloud=0.0, wind=19.11, temperature=25.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T08:38:12.422', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T10:38:33.245 [DEBUG] [Thread-126191] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:38:33.319 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T10:38:33.331 [DEBUG] [Thread-126194] [transport.py] [_log()] starting thread (client mode): 0xb6b21390
2025-12-31T10:38:33.331 [DEBUG] [Thread-126194] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:38:33.345 [DEBUG] [Thread-126194] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T10:38:33.345 [INFO] [Thread-126194] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T10:38:33.353 [DEBUG] [Thread-126194] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:38:33.353 [DEBUG] [Thread-126194] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T10:38:33.353 [DEBUG] [Thread-126194] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:38:33.353 [DEBUG] [Thread-126194] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:38:33.353 [DEBUG] [Thread-126194] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:38:33.353 [DEBUG] [Thread-126194] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:38:33.353 [DEBUG] [Thread-126194] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:38:33.353 [DEBUG] [Thread-126194] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:38:33.353 [DEBUG] [Thread-126194] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:38:33.353 [DEBUG] [Thread-126194] [transport.py] [_log()] client lang: <none>
2025-12-31T10:38:33.353 [DEBUG] [Thread-126194] [transport.py] [_log()] server lang: <none>
2025-12-31T10:38:33.353 [DEBUG] [Thread-126194] [transport.py] [_log()] kex follows: False
2025-12-31T10:38:33.353 [DEBUG] [Thread-126194] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:38:33.353 [DEBUG] [Thread-126194] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:38:33.353 [DEBUG] [Thread-126194] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:38:33.353 [DEBUG] [Thread-126194] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:38:33.353 [DEBUG] [Thread-126194] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:38:33.353 [DEBUG] [Thread-126194] [transport.py] [_log()] Compression: none
2025-12-31T10:38:33.353 [DEBUG] [Thread-126194] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:38:33.409 [DEBUG] [Thread-126194] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:38:33.409 [DEBUG] [Thread-126194] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:38:33.409 [DEBUG] [Thread-126194] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T10:38:33.409 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T10:38:33.409 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:38:33.470 [DEBUG] [Thread-126194] [transport.py] [_log()] userauth is OK
2025-12-31T10:38:33.470 [DEBUG] [Thread-126194] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:38:33.470 [DEBUG] [Thread-126194] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:38:33.470 [DEBUG] [Thread-126194] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T10:38:33.470 [DEBUG] [Thread-126194] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:38:33.484 [INFO] [Thread-126194] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:38:33.484 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T10:38:33.484 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:38:34.324 [DEBUG] [Thread-126194] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:38:34.324 [DEBUG] [Thread-126194] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:38:34.371 [DEBUG] [Thread-126194] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:38:34.371 [DEBUG] [Thread-126194] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:38:34.379 [DEBUG] [Thread-126194] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:38:34.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:38:34.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T10:38:34.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-12-31T10:38:34.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:38:34.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:38:34.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:38:34.414 [DEBUG] [Thread-126194] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:38:38.655 [DEBUG] [Thread-126196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:38:53.709 [DEBUG] [Thread-126197 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:39:04.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T10:39:04.412 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T10:39:04.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T10:39:05.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 10, 38, 58), 33.93, 9.83, 0.0, 20.52, 24.84, 0, 0, 0, 2, 0, 0),)
2025-12-31T10:39:05.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 10:38:58
2025-12-31T10:39:05.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T10:39:05.393 [DEBUG] [Thread-126198] [transport.py] [_log()] starting thread (client mode): 0xb6be1e10
2025-12-31T10:39:05.394 [DEBUG] [Thread-126198] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:39:05.412 [DEBUG] [Thread-126198] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T10:39:05.412 [INFO] [Thread-126198] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T10:39:05.415 [DEBUG] [Thread-126198] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:39:05.416 [DEBUG] [Thread-126198] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T10:39:05.416 [DEBUG] [Thread-126198] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:39:05.416 [DEBUG] [Thread-126198] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:39:05.416 [DEBUG] [Thread-126198] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:39:05.416 [DEBUG] [Thread-126198] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:39:05.416 [DEBUG] [Thread-126198] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:39:05.416 [DEBUG] [Thread-126198] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:39:05.416 [DEBUG] [Thread-126198] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:39:05.416 [DEBUG] [Thread-126198] [transport.py] [_log()] client lang: <none>
2025-12-31T10:39:05.416 [DEBUG] [Thread-126198] [transport.py] [_log()] server lang: <none>
2025-12-31T10:39:05.416 [DEBUG] [Thread-126198] [transport.py] [_log()] kex follows: False
2025-12-31T10:39:05.416 [DEBUG] [Thread-126198] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:39:05.416 [DEBUG] [Thread-126198] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:39:05.416 [DEBUG] [Thread-126198] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:39:05.416 [DEBUG] [Thread-126198] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:39:05.416 [DEBUG] [Thread-126198] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:39:05.416 [DEBUG] [Thread-126198] [transport.py] [_log()] Compression: none
2025-12-31T10:39:05.416 [DEBUG] [Thread-126198] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:39:05.433 [DEBUG] [Thread-126198] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:39:05.433 [DEBUG] [Thread-126198] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:39:05.434 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T10:39:05.434 [DEBUG] [Thread-126198] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T10:39:05.434 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:39:05.435 [DEBUG] [Thread-126198] [transport.py] [_log()] userauth is OK
2025-12-31T10:39:05.435 [DEBUG] [Thread-126198] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:39:05.435 [DEBUG] [Thread-126198] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:39:05.435 [DEBUG] [Thread-126198] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T10:39:05.435 [DEBUG] [Thread-126198] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:39:05.461 [INFO] [Thread-126198] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:39:05.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:39:06.142 [DEBUG] [Thread-126198] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:39:06.142 [DEBUG] [Thread-126198] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:39:06.143 [DEBUG] [Thread-126198] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T10:39:06.183 [DEBUG] [Thread-126198] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:39:06.183 [DEBUG] [Thread-126198] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:39:06.187 [DEBUG] [Thread-126198] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:39:06.201 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:39:06.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T10:39:06.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T10:39:06.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T10:39:06.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:39:06.214 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T10:39:06.214 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:39:06.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:39:06.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T10:39:06.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.360213 -999.00  +24.60  16.61     15   -3.40 1 1 1 1 1   888    0 28.60 69.83 ----- 12.3 16.6 267.6 24.1 31.7 -29.7 31.2 -26.4 29.5 -27.7 30.0 -27.4
2025-12-31T10:39:06.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T10:39:06.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T10:39:06.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.360213
2025-12-31T10:39:06.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T10:39:06.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T10:39:06.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T10:39:06.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T10:39:06.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T10:39:06.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T10:38:58', tmtdew=33.93, humidity=9.83, cloud=0.0, wind=20.52, temperature=24.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T08:38:42.403', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T10:39:06.216 [DEBUG] [Thread-126198] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:39:06.293 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T10:39:06.305 [DEBUG] [Thread-126201] [transport.py] [_log()] starting thread (client mode): 0xb6be1180
2025-12-31T10:39:06.305 [DEBUG] [Thread-126201] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:39:06.320 [DEBUG] [Thread-126201] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T10:39:06.321 [INFO] [Thread-126201] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T10:39:06.328 [DEBUG] [Thread-126201] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:39:06.328 [DEBUG] [Thread-126201] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T10:39:06.328 [DEBUG] [Thread-126201] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:39:06.328 [DEBUG] [Thread-126201] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:39:06.328 [DEBUG] [Thread-126201] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:39:06.329 [DEBUG] [Thread-126201] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:39:06.329 [DEBUG] [Thread-126201] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:39:06.329 [DEBUG] [Thread-126201] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:39:06.329 [DEBUG] [Thread-126201] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:39:06.329 [DEBUG] [Thread-126201] [transport.py] [_log()] client lang: <none>
2025-12-31T10:39:06.329 [DEBUG] [Thread-126201] [transport.py] [_log()] server lang: <none>
2025-12-31T10:39:06.329 [DEBUG] [Thread-126201] [transport.py] [_log()] kex follows: False
2025-12-31T10:39:06.329 [DEBUG] [Thread-126201] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:39:06.329 [DEBUG] [Thread-126201] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:39:06.330 [DEBUG] [Thread-126201] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:39:06.330 [DEBUG] [Thread-126201] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:39:06.330 [DEBUG] [Thread-126201] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:39:06.330 [DEBUG] [Thread-126201] [transport.py] [_log()] Compression: none
2025-12-31T10:39:06.330 [DEBUG] [Thread-126201] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:39:06.391 [DEBUG] [Thread-126201] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:39:06.391 [DEBUG] [Thread-126201] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:39:06.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T10:39:06.393 [DEBUG] [Thread-126201] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T10:39:06.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:39:06.450 [DEBUG] [Thread-126201] [transport.py] [_log()] userauth is OK
2025-12-31T10:39:06.450 [DEBUG] [Thread-126201] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:39:06.451 [DEBUG] [Thread-126201] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:39:06.451 [DEBUG] [Thread-126201] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T10:39:06.451 [DEBUG] [Thread-126201] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:39:06.469 [INFO] [Thread-126201] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:39:06.470 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T10:39:06.471 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:39:07.054 [DEBUG] [Thread-126203 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:39:07.288 [DEBUG] [Thread-126201] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:39:07.288 [DEBUG] [Thread-126201] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:39:07.336 [DEBUG] [Thread-126201] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:39:07.336 [DEBUG] [Thread-126201] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:39:07.345 [DEBUG] [Thread-126201] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:39:07.354 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:39:07.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T10:39:07.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T10:39:07.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:39:07.374 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:39:07.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:39:07.382 [DEBUG] [Thread-126201] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:39:08.740 [DEBUG] [Thread-126204 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:39:23.781 [DEBUG] [Thread-126205 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:39:26.773 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:39:26.774 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:39:37.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T10:39:37.404 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T10:39:37.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T10:39:38.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 10, 39, 30), 33.72, 9.95, 0.0, 19.78, 24.59, 0, 0, 0, 2, 0, 0),)
2025-12-31T10:39:38.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 10:39:30
2025-12-31T10:39:38.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T10:39:38.395 [DEBUG] [Thread-126206] [transport.py] [_log()] starting thread (client mode): 0xb9592710
2025-12-31T10:39:38.395 [DEBUG] [Thread-126206] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:39:38.416 [DEBUG] [Thread-126206] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T10:39:38.416 [INFO] [Thread-126206] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T10:39:38.419 [DEBUG] [Thread-126206] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:39:38.419 [DEBUG] [Thread-126206] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T10:39:38.419 [DEBUG] [Thread-126206] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:39:38.419 [DEBUG] [Thread-126206] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:39:38.419 [DEBUG] [Thread-126206] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:39:38.419 [DEBUG] [Thread-126206] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:39:38.419 [DEBUG] [Thread-126206] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:39:38.419 [DEBUG] [Thread-126206] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:39:38.419 [DEBUG] [Thread-126206] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:39:38.419 [DEBUG] [Thread-126206] [transport.py] [_log()] client lang: <none>
2025-12-31T10:39:38.419 [DEBUG] [Thread-126206] [transport.py] [_log()] server lang: <none>
2025-12-31T10:39:38.420 [DEBUG] [Thread-126206] [transport.py] [_log()] kex follows: False
2025-12-31T10:39:38.420 [DEBUG] [Thread-126206] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:39:38.420 [DEBUG] [Thread-126206] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:39:38.420 [DEBUG] [Thread-126206] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:39:38.420 [DEBUG] [Thread-126206] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:39:38.420 [DEBUG] [Thread-126206] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:39:38.420 [DEBUG] [Thread-126206] [transport.py] [_log()] Compression: none
2025-12-31T10:39:38.420 [DEBUG] [Thread-126206] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:39:38.439 [DEBUG] [Thread-126206] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:39:38.439 [DEBUG] [Thread-126206] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:39:38.440 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T10:39:38.440 [DEBUG] [Thread-126206] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T10:39:38.441 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:39:38.442 [DEBUG] [Thread-126206] [transport.py] [_log()] userauth is OK
2025-12-31T10:39:38.442 [DEBUG] [Thread-126206] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:39:38.442 [DEBUG] [Thread-126206] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:39:38.442 [DEBUG] [Thread-126206] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T10:39:38.443 [DEBUG] [Thread-126206] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:39:38.466 [INFO] [Thread-126206] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:39:38.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:39:38.814 [DEBUG] [Thread-126208 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:39:39.025 [DEBUG] [Thread-126206] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:39:39.025 [DEBUG] [Thread-126206] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:39:39.026 [DEBUG] [Thread-126206] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T10:39:39.066 [DEBUG] [Thread-126206] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:39:39.066 [DEBUG] [Thread-126206] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:39:39.068 [DEBUG] [Thread-126206] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:39:39.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:39:39.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T10:39:39.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T10:39:39.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T10:39:39.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:39:39.086 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T10:39:39.086 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:39:39.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:39:39.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T10:39:39.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.360560 -999.00  +24.40  17.71     15   -3.20 1 1 1 1 1   888    0 28.70 77.65 ----- 17.9 17.7 275.8 22.1 31.6 -28.9 31.0 -27.6 29.3 -30.2 29.9 -25.9
2025-12-31T10:39:39.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T10:39:39.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T10:39:39.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.360560
2025-12-31T10:39:39.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T10:39:39.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T10:39:39.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T10:39:39.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T10:39:39.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T10:39:39.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T10:39:30', tmtdew=33.72, humidity=9.95, cloud=0.0, wind=19.78, temperature=24.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T08:39:12.384', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T10:39:39.088 [DEBUG] [Thread-126206] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:39:39.174 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T10:39:39.184 [DEBUG] [Thread-126210] [transport.py] [_log()] starting thread (client mode): 0xb95f3a00
2025-12-31T10:39:39.184 [DEBUG] [Thread-126210] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:39:39.199 [DEBUG] [Thread-126210] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T10:39:39.199 [INFO] [Thread-126210] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T10:39:39.207 [DEBUG] [Thread-126210] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:39:39.207 [DEBUG] [Thread-126210] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T10:39:39.207 [DEBUG] [Thread-126210] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:39:39.207 [DEBUG] [Thread-126210] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:39:39.207 [DEBUG] [Thread-126210] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:39:39.207 [DEBUG] [Thread-126210] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:39:39.207 [DEBUG] [Thread-126210] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:39:39.207 [DEBUG] [Thread-126210] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:39:39.208 [DEBUG] [Thread-126210] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:39:39.208 [DEBUG] [Thread-126210] [transport.py] [_log()] client lang: <none>
2025-12-31T10:39:39.208 [DEBUG] [Thread-126210] [transport.py] [_log()] server lang: <none>
2025-12-31T10:39:39.208 [DEBUG] [Thread-126210] [transport.py] [_log()] kex follows: False
2025-12-31T10:39:39.208 [DEBUG] [Thread-126210] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:39:39.208 [DEBUG] [Thread-126210] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:39:39.208 [DEBUG] [Thread-126210] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:39:39.208 [DEBUG] [Thread-126210] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:39:39.208 [DEBUG] [Thread-126210] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:39:39.209 [DEBUG] [Thread-126210] [transport.py] [_log()] Compression: none
2025-12-31T10:39:39.209 [DEBUG] [Thread-126210] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:39:39.269 [DEBUG] [Thread-126210] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:39:39.270 [DEBUG] [Thread-126210] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:39:39.279 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T10:39:39.280 [DEBUG] [Thread-126210] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T10:39:39.280 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:39:39.326 [DEBUG] [Thread-126210] [transport.py] [_log()] userauth is OK
2025-12-31T10:39:39.326 [DEBUG] [Thread-126210] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:39:39.326 [DEBUG] [Thread-126210] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:39:39.326 [DEBUG] [Thread-126210] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T10:39:39.326 [DEBUG] [Thread-126210] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:39:39.345 [INFO] [Thread-126210] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:39:39.345 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T10:39:39.346 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:39:40.172 [DEBUG] [Thread-126210] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:39:40.172 [DEBUG] [Thread-126210] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:39:40.219 [DEBUG] [Thread-126210] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:39:40.220 [DEBUG] [Thread-126210] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:39:40.228 [DEBUG] [Thread-126210] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:39:40.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:39:40.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T10:39:40.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T10:39:40.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:39:40.254 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:39:40.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:39:40.262 [DEBUG] [Thread-126210] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:39:53.845 [DEBUG] [Thread-126212 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:40:07.116 [DEBUG] [Thread-126213 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:40:08.906 [DEBUG] [Thread-126214 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:40:10.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T10:40:10.285 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T10:40:10.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T10:40:10.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 10, 40, 2), 33.63, 10.03, 0.0, 19.89, 24.66, 0, 0, 0, 2, 0, 0),)
2025-12-31T10:40:10.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 10:40:02
2025-12-31T10:40:11.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T10:40:11.258 [DEBUG] [Thread-126215] [transport.py] [_log()] starting thread (client mode): 0xb6b4a410
2025-12-31T10:40:11.258 [DEBUG] [Thread-126215] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:40:11.276 [DEBUG] [Thread-126215] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T10:40:11.276 [INFO] [Thread-126215] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T10:40:11.280 [DEBUG] [Thread-126215] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:40:11.280 [DEBUG] [Thread-126215] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T10:40:11.280 [DEBUG] [Thread-126215] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:40:11.280 [DEBUG] [Thread-126215] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:40:11.280 [DEBUG] [Thread-126215] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:40:11.280 [DEBUG] [Thread-126215] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:40:11.280 [DEBUG] [Thread-126215] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:40:11.280 [DEBUG] [Thread-126215] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:40:11.280 [DEBUG] [Thread-126215] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:40:11.280 [DEBUG] [Thread-126215] [transport.py] [_log()] client lang: <none>
2025-12-31T10:40:11.280 [DEBUG] [Thread-126215] [transport.py] [_log()] server lang: <none>
2025-12-31T10:40:11.280 [DEBUG] [Thread-126215] [transport.py] [_log()] kex follows: False
2025-12-31T10:40:11.280 [DEBUG] [Thread-126215] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:40:11.280 [DEBUG] [Thread-126215] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:40:11.280 [DEBUG] [Thread-126215] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:40:11.280 [DEBUG] [Thread-126215] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:40:11.280 [DEBUG] [Thread-126215] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:40:11.280 [DEBUG] [Thread-126215] [transport.py] [_log()] Compression: none
2025-12-31T10:40:11.280 [DEBUG] [Thread-126215] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:40:11.296 [DEBUG] [Thread-126215] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:40:11.296 [DEBUG] [Thread-126215] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:40:11.297 [DEBUG] [Thread-126215] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T10:40:11.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T10:40:11.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:40:11.299 [DEBUG] [Thread-126215] [transport.py] [_log()] userauth is OK
2025-12-31T10:40:11.299 [DEBUG] [Thread-126215] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:40:11.299 [DEBUG] [Thread-126215] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:40:11.299 [DEBUG] [Thread-126215] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T10:40:11.299 [DEBUG] [Thread-126215] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:40:11.323 [INFO] [Thread-126215] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:40:11.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:40:12.722 [DEBUG] [Thread-126215] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:40:12.722 [DEBUG] [Thread-126215] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:40:12.722 [DEBUG] [Thread-126215] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T10:40:12.763 [DEBUG] [Thread-126215] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:40:12.763 [DEBUG] [Thread-126215] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:40:12.767 [DEBUG] [Thread-126215] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:40:12.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:40:12.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T10:40:12.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T10:40:12.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T10:40:12.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:40:12.791 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T10:40:12.791 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:40:12.792 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:40:12.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T10:40:12.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.360908 -999.00  +24.30  15.48     15   -3.20 1 1 1 1 1   888    0 29.33 86.80 ----- 14.8 15.5 270.8 18.2 31.6 -27.8 31.1 -27.1 29.2 -26.9 29.9 -25.6
2025-12-31T10:40:12.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T10:40:12.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T10:40:12.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.360908
2025-12-31T10:40:12.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T10:40:12.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T10:40:12.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T10:40:12.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T10:40:12.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T10:40:12.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T10:40:02', tmtdew=33.63, humidity=10.03, cloud=0.0, wind=19.89, temperature=24.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T08:39:42.451', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T10:40:12.794 [DEBUG] [Thread-126215] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:40:12.877 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T10:40:12.888 [DEBUG] [Thread-126218] [transport.py] [_log()] starting thread (client mode): 0xb6b4a260
2025-12-31T10:40:12.888 [DEBUG] [Thread-126218] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:40:12.903 [DEBUG] [Thread-126218] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T10:40:12.903 [INFO] [Thread-126218] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T10:40:12.911 [DEBUG] [Thread-126218] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:40:12.911 [DEBUG] [Thread-126218] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T10:40:12.911 [DEBUG] [Thread-126218] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:40:12.911 [DEBUG] [Thread-126218] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:40:12.912 [DEBUG] [Thread-126218] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:40:12.912 [DEBUG] [Thread-126218] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:40:12.912 [DEBUG] [Thread-126218] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:40:12.912 [DEBUG] [Thread-126218] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:40:12.912 [DEBUG] [Thread-126218] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:40:12.912 [DEBUG] [Thread-126218] [transport.py] [_log()] client lang: <none>
2025-12-31T10:40:12.912 [DEBUG] [Thread-126218] [transport.py] [_log()] server lang: <none>
2025-12-31T10:40:12.912 [DEBUG] [Thread-126218] [transport.py] [_log()] kex follows: False
2025-12-31T10:40:12.912 [DEBUG] [Thread-126218] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:40:12.913 [DEBUG] [Thread-126218] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:40:12.913 [DEBUG] [Thread-126218] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:40:12.913 [DEBUG] [Thread-126218] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:40:12.913 [DEBUG] [Thread-126218] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:40:12.913 [DEBUG] [Thread-126218] [transport.py] [_log()] Compression: none
2025-12-31T10:40:12.913 [DEBUG] [Thread-126218] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:40:12.971 [DEBUG] [Thread-126218] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:40:12.971 [DEBUG] [Thread-126218] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:40:12.972 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T10:40:12.973 [DEBUG] [Thread-126218] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T10:40:12.974 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:40:13.026 [DEBUG] [Thread-126218] [transport.py] [_log()] userauth is OK
2025-12-31T10:40:13.027 [DEBUG] [Thread-126218] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:40:13.027 [DEBUG] [Thread-126218] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:40:13.027 [DEBUG] [Thread-126218] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T10:40:13.027 [DEBUG] [Thread-126218] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:40:13.059 [INFO] [Thread-126218] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:40:13.059 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T10:40:13.060 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:40:13.916 [DEBUG] [Thread-126218] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:40:13.916 [DEBUG] [Thread-126218] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:40:13.964 [DEBUG] [Thread-126218] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:40:13.964 [DEBUG] [Thread-126218] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:40:13.973 [DEBUG] [Thread-126218] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:40:13.982 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:40:13.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T10:40:13.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T10:40:14.000 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:40:14.000 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:40:14.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:40:14.008 [DEBUG] [Thread-126218] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:40:23.944 [DEBUG] [Thread-126220 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:40:26.912 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:40:26.913 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:40:38.994 [DEBUG] [Thread-126221 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:40:44.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T10:40:44.031 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T10:40:44.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T10:40:44.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 10, 40, 34), 33.32, 10.45, 0.0, 15.88, 24.74, 0, 0, 0, 2, 0, 0),)
2025-12-31T10:40:44.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 10:40:34
2025-12-31T10:40:44.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T10:40:45.009 [DEBUG] [Thread-126222] [transport.py] [_log()] starting thread (client mode): 0xb95932b0
2025-12-31T10:40:45.009 [DEBUG] [Thread-126222] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:40:45.029 [DEBUG] [Thread-126222] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T10:40:45.029 [INFO] [Thread-126222] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T10:40:45.032 [DEBUG] [Thread-126222] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:40:45.032 [DEBUG] [Thread-126222] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T10:40:45.032 [DEBUG] [Thread-126222] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:40:45.032 [DEBUG] [Thread-126222] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:40:45.032 [DEBUG] [Thread-126222] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:40:45.032 [DEBUG] [Thread-126222] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:40:45.032 [DEBUG] [Thread-126222] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:40:45.032 [DEBUG] [Thread-126222] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:40:45.033 [DEBUG] [Thread-126222] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:40:45.033 [DEBUG] [Thread-126222] [transport.py] [_log()] client lang: <none>
2025-12-31T10:40:45.033 [DEBUG] [Thread-126222] [transport.py] [_log()] server lang: <none>
2025-12-31T10:40:45.033 [DEBUG] [Thread-126222] [transport.py] [_log()] kex follows: False
2025-12-31T10:40:45.033 [DEBUG] [Thread-126222] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:40:45.033 [DEBUG] [Thread-126222] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:40:45.033 [DEBUG] [Thread-126222] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:40:45.033 [DEBUG] [Thread-126222] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:40:45.033 [DEBUG] [Thread-126222] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:40:45.033 [DEBUG] [Thread-126222] [transport.py] [_log()] Compression: none
2025-12-31T10:40:45.033 [DEBUG] [Thread-126222] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:40:45.049 [DEBUG] [Thread-126222] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:40:45.050 [DEBUG] [Thread-126222] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:40:45.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T10:40:45.051 [DEBUG] [Thread-126222] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T10:40:45.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:40:45.053 [DEBUG] [Thread-126222] [transport.py] [_log()] userauth is OK
2025-12-31T10:40:45.053 [DEBUG] [Thread-126222] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:40:45.053 [DEBUG] [Thread-126222] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:40:45.053 [DEBUG] [Thread-126222] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T10:40:45.054 [DEBUG] [Thread-126222] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:40:45.089 [INFO] [Thread-126222] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:40:45.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:40:45.728 [DEBUG] [Thread-126222] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:40:45.728 [DEBUG] [Thread-126222] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:40:45.729 [DEBUG] [Thread-126222] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T10:40:45.770 [DEBUG] [Thread-126222] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:40:45.770 [DEBUG] [Thread-126222] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:40:45.772 [DEBUG] [Thread-126222] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:40:45.785 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:40:45.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T10:40:45.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T10:40:45.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T10:40:45.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:40:45.791 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T10:40:45.792 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:40:45.792 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:40:45.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T10:40:45.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.361255 -999.00  +24.10  12.58     15   -3.30 1 1 1 1 1   888    0 29.44 95.34 ----- 13.9 12.6 267.6 18.0 31.6 -28.5 31.2 -26.5 29.4 -23.9 29.9 -26.6
2025-12-31T10:40:45.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T10:40:45.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T10:40:45.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.361255
2025-12-31T10:40:45.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T10:40:45.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T10:40:45.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T10:40:45.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T10:40:45.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T10:40:45.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T10:40:34', tmtdew=33.32, humidity=10.45, cloud=0.0, wind=15.88, temperature=24.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T08:40:12.432', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T10:40:45.794 [DEBUG] [Thread-126222] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:40:45.880 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T10:40:45.891 [DEBUG] [Thread-126225] [transport.py] [_log()] starting thread (client mode): 0xb95f0c40
2025-12-31T10:40:45.891 [DEBUG] [Thread-126225] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:40:45.907 [DEBUG] [Thread-126225] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T10:40:45.907 [INFO] [Thread-126225] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T10:40:45.914 [DEBUG] [Thread-126225] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:40:45.915 [DEBUG] [Thread-126225] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T10:40:45.915 [DEBUG] [Thread-126225] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:40:45.915 [DEBUG] [Thread-126225] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:40:45.915 [DEBUG] [Thread-126225] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:40:45.915 [DEBUG] [Thread-126225] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:40:45.915 [DEBUG] [Thread-126225] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:40:45.915 [DEBUG] [Thread-126225] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:40:45.915 [DEBUG] [Thread-126225] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:40:45.915 [DEBUG] [Thread-126225] [transport.py] [_log()] client lang: <none>
2025-12-31T10:40:45.915 [DEBUG] [Thread-126225] [transport.py] [_log()] server lang: <none>
2025-12-31T10:40:45.915 [DEBUG] [Thread-126225] [transport.py] [_log()] kex follows: False
2025-12-31T10:40:45.915 [DEBUG] [Thread-126225] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:40:45.915 [DEBUG] [Thread-126225] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:40:45.915 [DEBUG] [Thread-126225] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:40:45.915 [DEBUG] [Thread-126225] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:40:45.915 [DEBUG] [Thread-126225] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:40:45.916 [DEBUG] [Thread-126225] [transport.py] [_log()] Compression: none
2025-12-31T10:40:45.916 [DEBUG] [Thread-126225] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:40:45.974 [DEBUG] [Thread-126225] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:40:45.975 [DEBUG] [Thread-126225] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:40:45.976 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T10:40:45.976 [DEBUG] [Thread-126225] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T10:40:45.977 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:40:46.030 [DEBUG] [Thread-126225] [transport.py] [_log()] userauth is OK
2025-12-31T10:40:46.030 [DEBUG] [Thread-126225] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:40:46.030 [DEBUG] [Thread-126225] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:40:46.031 [DEBUG] [Thread-126225] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T10:40:46.031 [DEBUG] [Thread-126225] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:40:46.050 [INFO] [Thread-126225] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:40:46.050 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T10:40:46.051 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:40:46.911 [DEBUG] [Thread-126225] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:40:46.912 [DEBUG] [Thread-126225] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:40:46.959 [DEBUG] [Thread-126225] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:40:46.959 [DEBUG] [Thread-126225] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:40:46.968 [DEBUG] [Thread-126225] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:40:46.978 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:40:46.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T10:40:46.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T10:40:46.997 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:40:46.997 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:40:46.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:40:47.006 [DEBUG] [Thread-126225] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:40:54.034 [DEBUG] [Thread-126227 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:41:07.160 [DEBUG] [Thread-126228 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:41:09.084 [DEBUG] [Thread-126229 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:41:17.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T10:41:17.013 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T10:41:17.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T10:41:17.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 10, 41, 6), 33.34, 10.42, 0.0, 13.83, 24.64, 0, 0, 0, 2, 0, 0),)
2025-12-31T10:41:17.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 10:41:06
2025-12-31T10:41:17.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T10:41:17.986 [DEBUG] [Thread-126230] [transport.py] [_log()] starting thread (client mode): 0xb6b6bf70
2025-12-31T10:41:17.986 [DEBUG] [Thread-126230] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:41:18.006 [DEBUG] [Thread-126230] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T10:41:18.006 [INFO] [Thread-126230] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T10:41:18.009 [DEBUG] [Thread-126230] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:41:18.009 [DEBUG] [Thread-126230] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T10:41:18.009 [DEBUG] [Thread-126230] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:41:18.009 [DEBUG] [Thread-126230] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:41:18.009 [DEBUG] [Thread-126230] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:41:18.010 [DEBUG] [Thread-126230] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:41:18.010 [DEBUG] [Thread-126230] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:41:18.010 [DEBUG] [Thread-126230] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:41:18.010 [DEBUG] [Thread-126230] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:41:18.010 [DEBUG] [Thread-126230] [transport.py] [_log()] client lang: <none>
2025-12-31T10:41:18.010 [DEBUG] [Thread-126230] [transport.py] [_log()] server lang: <none>
2025-12-31T10:41:18.010 [DEBUG] [Thread-126230] [transport.py] [_log()] kex follows: False
2025-12-31T10:41:18.010 [DEBUG] [Thread-126230] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:41:18.010 [DEBUG] [Thread-126230] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:41:18.010 [DEBUG] [Thread-126230] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:41:18.010 [DEBUG] [Thread-126230] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:41:18.010 [DEBUG] [Thread-126230] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:41:18.010 [DEBUG] [Thread-126230] [transport.py] [_log()] Compression: none
2025-12-31T10:41:18.010 [DEBUG] [Thread-126230] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:41:18.029 [DEBUG] [Thread-126230] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:41:18.030 [DEBUG] [Thread-126230] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:41:18.030 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T10:41:18.031 [DEBUG] [Thread-126230] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T10:41:18.031 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:41:18.033 [DEBUG] [Thread-126230] [transport.py] [_log()] userauth is OK
2025-12-31T10:41:18.033 [DEBUG] [Thread-126230] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:41:18.033 [DEBUG] [Thread-126230] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:41:18.033 [DEBUG] [Thread-126230] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T10:41:18.033 [DEBUG] [Thread-126230] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:41:18.060 [INFO] [Thread-126230] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:41:18.060 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:41:18.701 [DEBUG] [Thread-126230] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:41:18.701 [DEBUG] [Thread-126230] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:41:18.702 [DEBUG] [Thread-126230] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T10:41:18.742 [DEBUG] [Thread-126230] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:41:18.742 [DEBUG] [Thread-126230] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:41:18.746 [DEBUG] [Thread-126230] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:41:18.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:41:18.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T10:41:18.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T10:41:18.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T10:41:18.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:41:18.767 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T10:41:18.767 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:41:18.767 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:41:18.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T10:41:18.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.361949 -999.00  +24.60  13.87     15   -2.80 1 1 1 1 1   888    0 29.79 107.72 ----- 19.8 13.9 279.2 18.5 31.9 -27.5 31.3 -27.0 29.6 -28.8 30.0 -26.2
2025-12-31T10:41:18.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T10:41:18.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T10:41:18.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.361949
2025-12-31T10:41:18.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T10:41:18.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T10:41:18.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T10:41:18.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T10:41:18.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T10:41:18.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T10:41:06', tmtdew=33.34, humidity=10.42, cloud=0.0, wind=13.83, temperature=24.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T08:41:12.394', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T10:41:18.770 [DEBUG] [Thread-126230] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:41:18.853 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T10:41:18.867 [DEBUG] [Thread-126233] [transport.py] [_log()] starting thread (client mode): 0xb6be6a40
2025-12-31T10:41:18.867 [DEBUG] [Thread-126233] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:41:18.882 [DEBUG] [Thread-126233] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T10:41:18.882 [INFO] [Thread-126233] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T10:41:18.889 [DEBUG] [Thread-126233] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:41:18.890 [DEBUG] [Thread-126233] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T10:41:18.890 [DEBUG] [Thread-126233] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:41:18.890 [DEBUG] [Thread-126233] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:41:18.890 [DEBUG] [Thread-126233] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:41:18.890 [DEBUG] [Thread-126233] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:41:18.890 [DEBUG] [Thread-126233] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:41:18.890 [DEBUG] [Thread-126233] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:41:18.890 [DEBUG] [Thread-126233] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:41:18.890 [DEBUG] [Thread-126233] [transport.py] [_log()] client lang: <none>
2025-12-31T10:41:18.890 [DEBUG] [Thread-126233] [transport.py] [_log()] server lang: <none>
2025-12-31T10:41:18.890 [DEBUG] [Thread-126233] [transport.py] [_log()] kex follows: False
2025-12-31T10:41:18.890 [DEBUG] [Thread-126233] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:41:18.890 [DEBUG] [Thread-126233] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:41:18.890 [DEBUG] [Thread-126233] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:41:18.890 [DEBUG] [Thread-126233] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:41:18.891 [DEBUG] [Thread-126233] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:41:18.891 [DEBUG] [Thread-126233] [transport.py] [_log()] Compression: none
2025-12-31T10:41:18.891 [DEBUG] [Thread-126233] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:41:18.946 [DEBUG] [Thread-126233] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:41:18.947 [DEBUG] [Thread-126233] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:41:18.947 [DEBUG] [Thread-126233] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T10:41:18.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T10:41:18.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:41:19.002 [DEBUG] [Thread-126233] [transport.py] [_log()] userauth is OK
2025-12-31T10:41:19.003 [DEBUG] [Thread-126233] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:41:19.003 [DEBUG] [Thread-126233] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:41:19.003 [DEBUG] [Thread-126233] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T10:41:19.003 [DEBUG] [Thread-126233] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:41:19.028 [INFO] [Thread-126233] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:41:19.028 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T10:41:19.029 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:41:19.889 [DEBUG] [Thread-126233] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:41:19.889 [DEBUG] [Thread-126233] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:41:19.939 [DEBUG] [Thread-126233] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:41:19.939 [DEBUG] [Thread-126233] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:41:19.948 [DEBUG] [Thread-126233] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:41:19.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:41:19.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T10:41:19.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T10:41:19.978 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:41:19.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:41:19.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:41:19.987 [DEBUG] [Thread-126233] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:41:24.118 [DEBUG] [Thread-126235 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:41:27.054 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:41:27.055 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:41:39.177 [DEBUG] [Thread-126236 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:41:50.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T10:41:50.009 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T10:41:50.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T10:41:50.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 10, 41, 39), 33.19, 10.47, 0.0, 13.43, 24.41, 0, 0, 0, 2, 0, 0),)
2025-12-31T10:41:50.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 10:41:39
2025-12-31T10:41:50.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T10:41:50.998 [DEBUG] [Thread-126237] [transport.py] [_log()] starting thread (client mode): 0xb6be52d0
2025-12-31T10:41:50.998 [DEBUG] [Thread-126237] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:41:51.013 [DEBUG] [Thread-126237] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T10:41:51.013 [INFO] [Thread-126237] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T10:41:51.017 [DEBUG] [Thread-126237] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:41:51.017 [DEBUG] [Thread-126237] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T10:41:51.017 [DEBUG] [Thread-126237] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:41:51.017 [DEBUG] [Thread-126237] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:41:51.017 [DEBUG] [Thread-126237] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:41:51.017 [DEBUG] [Thread-126237] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:41:51.017 [DEBUG] [Thread-126237] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:41:51.017 [DEBUG] [Thread-126237] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:41:51.017 [DEBUG] [Thread-126237] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:41:51.017 [DEBUG] [Thread-126237] [transport.py] [_log()] client lang: <none>
2025-12-31T10:41:51.017 [DEBUG] [Thread-126237] [transport.py] [_log()] server lang: <none>
2025-12-31T10:41:51.017 [DEBUG] [Thread-126237] [transport.py] [_log()] kex follows: False
2025-12-31T10:41:51.017 [DEBUG] [Thread-126237] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:41:51.017 [DEBUG] [Thread-126237] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:41:51.018 [DEBUG] [Thread-126237] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:41:51.018 [DEBUG] [Thread-126237] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:41:51.018 [DEBUG] [Thread-126237] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:41:51.018 [DEBUG] [Thread-126237] [transport.py] [_log()] Compression: none
2025-12-31T10:41:51.018 [DEBUG] [Thread-126237] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:41:51.036 [DEBUG] [Thread-126237] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:41:51.037 [DEBUG] [Thread-126237] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:41:51.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T10:41:51.038 [DEBUG] [Thread-126237] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T10:41:51.039 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:41:51.041 [DEBUG] [Thread-126237] [transport.py] [_log()] userauth is OK
2025-12-31T10:41:51.041 [DEBUG] [Thread-126237] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:41:51.041 [DEBUG] [Thread-126237] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:41:51.041 [DEBUG] [Thread-126237] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T10:41:51.041 [DEBUG] [Thread-126237] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:41:51.068 [INFO] [Thread-126237] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:41:51.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:41:51.727 [DEBUG] [Thread-126237] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:41:51.727 [DEBUG] [Thread-126237] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:41:51.728 [DEBUG] [Thread-126237] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T10:41:51.768 [DEBUG] [Thread-126237] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:41:51.769 [DEBUG] [Thread-126237] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:41:51.772 [DEBUG] [Thread-126237] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:41:51.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:41:51.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T10:41:51.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T10:41:51.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T10:41:51.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:41:51.801 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T10:41:51.801 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:41:51.801 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:41:51.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T10:41:51.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.362296 -999.00  +24.40  12.51     16   -2.90 1 1 1 1 1   888    0 29.91 105.82 ----- 11.9 12.5 268.4 22.9 31.9 -28.0 31.3 -26.5 29.6 -24.1 30.0 -26.1
2025-12-31T10:41:51.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T10:41:51.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T10:41:51.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.362296
2025-12-31T10:41:51.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T10:41:51.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T10:41:51.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T10:41:51.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T10:41:51.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T10:41:51.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T10:41:39', tmtdew=33.19, humidity=10.47, cloud=0.0, wind=13.43, temperature=24.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T08:41:42.374', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T10:41:51.804 [DEBUG] [Thread-126237] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:41:51.877 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T10:41:51.889 [DEBUG] [Thread-126240] [transport.py] [_log()] starting thread (client mode): 0xb6be4160
2025-12-31T10:41:51.890 [DEBUG] [Thread-126240] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:41:51.904 [DEBUG] [Thread-126240] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T10:41:51.905 [INFO] [Thread-126240] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T10:41:51.912 [DEBUG] [Thread-126240] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:41:51.912 [DEBUG] [Thread-126240] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T10:41:51.913 [DEBUG] [Thread-126240] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:41:51.913 [DEBUG] [Thread-126240] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:41:51.913 [DEBUG] [Thread-126240] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:41:51.913 [DEBUG] [Thread-126240] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:41:51.913 [DEBUG] [Thread-126240] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:41:51.913 [DEBUG] [Thread-126240] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:41:51.913 [DEBUG] [Thread-126240] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:41:51.913 [DEBUG] [Thread-126240] [transport.py] [_log()] client lang: <none>
2025-12-31T10:41:51.913 [DEBUG] [Thread-126240] [transport.py] [_log()] server lang: <none>
2025-12-31T10:41:51.913 [DEBUG] [Thread-126240] [transport.py] [_log()] kex follows: False
2025-12-31T10:41:51.913 [DEBUG] [Thread-126240] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:41:51.913 [DEBUG] [Thread-126240] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:41:51.913 [DEBUG] [Thread-126240] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:41:51.913 [DEBUG] [Thread-126240] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:41:51.913 [DEBUG] [Thread-126240] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:41:51.913 [DEBUG] [Thread-126240] [transport.py] [_log()] Compression: none
2025-12-31T10:41:51.913 [DEBUG] [Thread-126240] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:41:51.971 [DEBUG] [Thread-126240] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:41:51.972 [DEBUG] [Thread-126240] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:41:51.972 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T10:41:51.973 [DEBUG] [Thread-126240] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T10:41:51.974 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:41:52.031 [DEBUG] [Thread-126240] [transport.py] [_log()] userauth is OK
2025-12-31T10:41:52.031 [DEBUG] [Thread-126240] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:41:52.031 [DEBUG] [Thread-126240] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:41:52.031 [DEBUG] [Thread-126240] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T10:41:52.032 [DEBUG] [Thread-126240] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:41:52.053 [INFO] [Thread-126240] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:41:52.053 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T10:41:52.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:41:52.931 [DEBUG] [Thread-126240] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:41:52.932 [DEBUG] [Thread-126240] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:41:52.979 [DEBUG] [Thread-126240] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:41:52.979 [DEBUG] [Thread-126240] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:41:52.988 [DEBUG] [Thread-126240] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:41:52.997 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:41:52.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T10:41:53.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T10:41:53.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:41:53.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:41:53.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:41:53.022 [DEBUG] [Thread-126240] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:41:54.206 [DEBUG] [Thread-126242 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:42:07.220 [DEBUG] [Thread-126243 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:42:09.260 [DEBUG] [Thread-126244 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:42:23.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T10:42:23.044 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T10:42:23.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T10:42:23.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 10, 42, 11), 32.86, 10.71, 0.0, 15.86, 24.34, 0, 0, 0, 2, 0, 0),)
2025-12-31T10:42:23.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 10:42:11
2025-12-31T10:42:23.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T10:42:24.057 [DEBUG] [Thread-126245] [transport.py] [_log()] starting thread (client mode): 0xb6b6b7f0
2025-12-31T10:42:24.057 [DEBUG] [Thread-126245] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:42:24.069 [DEBUG] [Thread-126245] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T10:42:24.069 [INFO] [Thread-126245] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T10:42:24.071 [DEBUG] [Thread-126245] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:42:24.071 [DEBUG] [Thread-126245] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T10:42:24.071 [DEBUG] [Thread-126245] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:42:24.071 [DEBUG] [Thread-126245] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:42:24.071 [DEBUG] [Thread-126245] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:42:24.071 [DEBUG] [Thread-126245] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:42:24.071 [DEBUG] [Thread-126245] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:42:24.071 [DEBUG] [Thread-126245] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:42:24.071 [DEBUG] [Thread-126245] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:42:24.071 [DEBUG] [Thread-126245] [transport.py] [_log()] client lang: <none>
2025-12-31T10:42:24.071 [DEBUG] [Thread-126245] [transport.py] [_log()] server lang: <none>
2025-12-31T10:42:24.071 [DEBUG] [Thread-126245] [transport.py] [_log()] kex follows: False
2025-12-31T10:42:24.071 [DEBUG] [Thread-126245] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:42:24.071 [DEBUG] [Thread-126245] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:42:24.071 [DEBUG] [Thread-126245] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:42:24.072 [DEBUG] [Thread-126245] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:42:24.072 [DEBUG] [Thread-126245] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:42:24.072 [DEBUG] [Thread-126245] [transport.py] [_log()] Compression: none
2025-12-31T10:42:24.072 [DEBUG] [Thread-126245] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:42:24.086 [DEBUG] [Thread-126245] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:42:24.086 [DEBUG] [Thread-126245] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:42:24.086 [DEBUG] [Thread-126245] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T10:42:24.086 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T10:42:24.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:42:24.087 [DEBUG] [Thread-126245] [transport.py] [_log()] userauth is OK
2025-12-31T10:42:24.087 [DEBUG] [Thread-126245] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:42:24.087 [DEBUG] [Thread-126245] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:42:24.087 [DEBUG] [Thread-126245] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T10:42:24.087 [DEBUG] [Thread-126245] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:42:24.097 [INFO] [Thread-126245] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:42:24.097 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:42:24.293 [DEBUG] [Thread-126247 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:42:24.675 [DEBUG] [Thread-126245] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:42:24.675 [DEBUG] [Thread-126245] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:42:24.675 [DEBUG] [Thread-126245] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T10:42:24.717 [DEBUG] [Thread-126245] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:42:24.717 [DEBUG] [Thread-126245] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:42:24.719 [DEBUG] [Thread-126245] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:42:24.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:42:24.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T10:42:24.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T10:42:24.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T10:42:24.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:42:24.734 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T10:42:24.734 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:42:24.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:42:24.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T10:42:24.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.362644 -999.00  +24.50   2.78     16   -2.70 1 1 1 1 1   888    0 30.19 112.31 ----- 10.2 2.8 225.1 12.5 32.0 -27.1 31.4 -26.2 29.6 -23.8 30.1 -26.1
2025-12-31T10:42:24.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T10:42:24.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T10:42:24.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.362644
2025-12-31T10:42:24.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T10:42:24.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T10:42:24.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T10:42:24.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T10:42:24.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T10:42:24.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T10:42:11', tmtdew=32.86, humidity=10.71, cloud=0.0, wind=15.86, temperature=24.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T08:42:12.442', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T10:42:24.735 [DEBUG] [Thread-126245] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:42:24.810 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T10:42:24.821 [DEBUG] [Thread-126249] [transport.py] [_log()] starting thread (client mode): 0xb6b6b1c0
2025-12-31T10:42:24.821 [DEBUG] [Thread-126249] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:42:24.836 [DEBUG] [Thread-126249] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T10:42:24.836 [INFO] [Thread-126249] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T10:42:24.843 [DEBUG] [Thread-126249] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:42:24.843 [DEBUG] [Thread-126249] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T10:42:24.843 [DEBUG] [Thread-126249] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:42:24.843 [DEBUG] [Thread-126249] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:42:24.844 [DEBUG] [Thread-126249] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:42:24.844 [DEBUG] [Thread-126249] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:42:24.844 [DEBUG] [Thread-126249] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:42:24.844 [DEBUG] [Thread-126249] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:42:24.844 [DEBUG] [Thread-126249] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:42:24.844 [DEBUG] [Thread-126249] [transport.py] [_log()] client lang: <none>
2025-12-31T10:42:24.844 [DEBUG] [Thread-126249] [transport.py] [_log()] server lang: <none>
2025-12-31T10:42:24.844 [DEBUG] [Thread-126249] [transport.py] [_log()] kex follows: False
2025-12-31T10:42:24.844 [DEBUG] [Thread-126249] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:42:24.844 [DEBUG] [Thread-126249] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:42:24.844 [DEBUG] [Thread-126249] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:42:24.844 [DEBUG] [Thread-126249] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:42:24.844 [DEBUG] [Thread-126249] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:42:24.844 [DEBUG] [Thread-126249] [transport.py] [_log()] Compression: none
2025-12-31T10:42:24.844 [DEBUG] [Thread-126249] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:42:24.901 [DEBUG] [Thread-126249] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:42:24.901 [DEBUG] [Thread-126249] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:42:24.901 [DEBUG] [Thread-126249] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T10:42:24.901 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T10:42:24.901 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:42:24.958 [DEBUG] [Thread-126249] [transport.py] [_log()] userauth is OK
2025-12-31T10:42:24.958 [DEBUG] [Thread-126249] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:42:24.958 [DEBUG] [Thread-126249] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:42:24.958 [DEBUG] [Thread-126249] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T10:42:24.958 [DEBUG] [Thread-126249] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:42:24.975 [INFO] [Thread-126249] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:42:24.975 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T10:42:24.975 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:42:25.788 [DEBUG] [Thread-126249] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:42:25.788 [DEBUG] [Thread-126249] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:42:25.836 [DEBUG] [Thread-126249] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:42:25.836 [DEBUG] [Thread-126249] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:42:25.844 [DEBUG] [Thread-126249] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:42:25.852 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:42:25.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-12-31T10:42:25.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T10:42:25.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:42:25.868 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:42:25.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:42:25.876 [DEBUG] [Thread-126249] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:42:27.196 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:42:27.197 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:42:39.325 [DEBUG] [Thread-126251 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:42:54.389 [DEBUG] [Thread-126252 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:42:55.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T10:42:55.880 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T10:42:55.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T10:42:56.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 10, 42, 43), 32.56, 10.66, 0.0, 16.55, 24.46, 0, 0, 0, 2, 0, 0),)
2025-12-31T10:42:56.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 10:42:43
2025-12-31T10:42:56.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T10:42:56.852 [DEBUG] [Thread-126253] [transport.py] [_log()] starting thread (client mode): 0xb6be7be0
2025-12-31T10:42:56.852 [DEBUG] [Thread-126253] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:42:56.870 [DEBUG] [Thread-126253] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T10:42:56.871 [INFO] [Thread-126253] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T10:42:56.873 [DEBUG] [Thread-126253] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:42:56.873 [DEBUG] [Thread-126253] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T10:42:56.873 [DEBUG] [Thread-126253] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:42:56.873 [DEBUG] [Thread-126253] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:42:56.873 [DEBUG] [Thread-126253] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:42:56.873 [DEBUG] [Thread-126253] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:42:56.873 [DEBUG] [Thread-126253] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:42:56.873 [DEBUG] [Thread-126253] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:42:56.873 [DEBUG] [Thread-126253] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:42:56.873 [DEBUG] [Thread-126253] [transport.py] [_log()] client lang: <none>
2025-12-31T10:42:56.873 [DEBUG] [Thread-126253] [transport.py] [_log()] server lang: <none>
2025-12-31T10:42:56.874 [DEBUG] [Thread-126253] [transport.py] [_log()] kex follows: False
2025-12-31T10:42:56.874 [DEBUG] [Thread-126253] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:42:56.874 [DEBUG] [Thread-126253] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:42:56.874 [DEBUG] [Thread-126253] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:42:56.874 [DEBUG] [Thread-126253] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:42:56.874 [DEBUG] [Thread-126253] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:42:56.874 [DEBUG] [Thread-126253] [transport.py] [_log()] Compression: none
2025-12-31T10:42:56.874 [DEBUG] [Thread-126253] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:42:56.891 [DEBUG] [Thread-126253] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:42:56.892 [DEBUG] [Thread-126253] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:42:56.892 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T10:42:56.892 [DEBUG] [Thread-126253] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T10:42:56.893 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:42:56.895 [DEBUG] [Thread-126253] [transport.py] [_log()] userauth is OK
2025-12-31T10:42:56.895 [DEBUG] [Thread-126253] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:42:56.895 [DEBUG] [Thread-126253] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:42:56.895 [DEBUG] [Thread-126253] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T10:42:56.895 [DEBUG] [Thread-126253] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:42:56.920 [INFO] [Thread-126253] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:42:56.921 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:42:57.517 [DEBUG] [Thread-126253] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:42:57.517 [DEBUG] [Thread-126253] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:42:57.518 [DEBUG] [Thread-126253] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T10:42:57.558 [DEBUG] [Thread-126253] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:42:57.559 [DEBUG] [Thread-126253] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:42:57.563 [DEBUG] [Thread-126253] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:42:57.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:42:57.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T10:42:57.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T10:42:57.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T10:42:57.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:42:57.585 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T10:42:57.586 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:42:57.586 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:42:57.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T10:42:57.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.362991 -999.00  +24.70  13.02     16   -2.70 1 1 1 1 1   888    0 30.02 115.76 ----- 19.9 13.0 246.3 15.9 32.1 -27.5 31.4 -26.1 29.7 -23.4 30.2 -25.2
2025-12-31T10:42:57.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T10:42:57.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T10:42:57.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.362991
2025-12-31T10:42:57.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T10:42:57.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T10:42:57.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T10:42:57.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T10:42:57.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T10:42:57.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T10:42:43', tmtdew=32.56, humidity=10.66, cloud=0.0, wind=16.55, temperature=24.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T08:42:42.422', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T10:42:57.588 [DEBUG] [Thread-126253] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:42:57.683 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T10:43:07.270 [DEBUG] [Thread-126256 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:43:09.427 [DEBUG] [Thread-126257 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:43:24.487 [DEBUG] [Thread-126258 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:43:27.337 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:43:27.338 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:43:39.526 [DEBUG] [Thread-126259 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:43:54.556 [DEBUG] [Thread-126260 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:44:07.313 [DEBUG] [Thread-126261 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:44:09.593 [DEBUG] [Thread-126262 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:44:24.626 [DEBUG] [Thread-126263 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:44:27.477 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:44:27.478 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:44:39.661 [DEBUG] [Thread-126264 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:44:54.702 [DEBUG] [Thread-126265 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:45:07.367 [DEBUG] [Thread-126266 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:45:09.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-12-31T10:45:09.735 [DEBUG] [Thread-126267 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:45:24.770 [DEBUG] [Thread-126268 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:45:27.618 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:45:27.619 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:45:39.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T10:45:39.491 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T10:45:39.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T10:45:39.802 [DEBUG] [Thread-126269 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:45:40.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 10, 45, 23), 33.82, 9.88, 0.0, 22.43, 25.32, 0, 0, 0, 2, 0, 0),)
2025-12-31T10:45:40.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 10:45:23
2025-12-31T10:45:40.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T10:45:40.510 [DEBUG] [Thread-126270] [transport.py] [_log()] starting thread (client mode): 0xb95d5a50
2025-12-31T10:45:40.510 [DEBUG] [Thread-126270] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:45:40.531 [DEBUG] [Thread-126270] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T10:45:40.531 [INFO] [Thread-126270] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T10:45:40.534 [DEBUG] [Thread-126270] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:45:40.534 [DEBUG] [Thread-126270] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T10:45:40.534 [DEBUG] [Thread-126270] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:45:40.534 [DEBUG] [Thread-126270] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:45:40.534 [DEBUG] [Thread-126270] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:45:40.534 [DEBUG] [Thread-126270] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:45:40.534 [DEBUG] [Thread-126270] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:45:40.534 [DEBUG] [Thread-126270] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:45:40.535 [DEBUG] [Thread-126270] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:45:40.535 [DEBUG] [Thread-126270] [transport.py] [_log()] client lang: <none>
2025-12-31T10:45:40.535 [DEBUG] [Thread-126270] [transport.py] [_log()] server lang: <none>
2025-12-31T10:45:40.535 [DEBUG] [Thread-126270] [transport.py] [_log()] kex follows: False
2025-12-31T10:45:40.535 [DEBUG] [Thread-126270] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:45:40.535 [DEBUG] [Thread-126270] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:45:40.535 [DEBUG] [Thread-126270] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:45:40.535 [DEBUG] [Thread-126270] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:45:40.535 [DEBUG] [Thread-126270] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:45:40.535 [DEBUG] [Thread-126270] [transport.py] [_log()] Compression: none
2025-12-31T10:45:40.535 [DEBUG] [Thread-126270] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:45:40.553 [DEBUG] [Thread-126270] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:45:40.553 [DEBUG] [Thread-126270] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:45:40.553 [DEBUG] [Thread-126270] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T10:45:40.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T10:45:40.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:45:40.554 [DEBUG] [Thread-126270] [transport.py] [_log()] userauth is OK
2025-12-31T10:45:40.554 [DEBUG] [Thread-126270] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:45:40.554 [DEBUG] [Thread-126270] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:45:40.554 [DEBUG] [Thread-126270] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T10:45:40.554 [DEBUG] [Thread-126270] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:45:40.563 [INFO] [Thread-126270] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:45:40.564 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:45:41.217 [DEBUG] [Thread-126270] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:45:41.217 [DEBUG] [Thread-126270] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:45:41.217 [DEBUG] [Thread-126270] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T10:45:41.259 [DEBUG] [Thread-126270] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:45:41.259 [DEBUG] [Thread-126270] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:45:41.261 [DEBUG] [Thread-126270] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:45:41.272 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:45:41.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T10:45:41.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T10:45:41.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T10:45:41.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:45:41.279 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T10:45:41.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:45:41.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:45:41.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T10:45:41.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.364380 -999.00  +24.40  19.55     15   -3.00 1 1 1 1 1   888    0 31.34 149.74 ----- 18.2 19.6 275.2 24.0 31.8 -29.0 31.3 -26.9 29.2 -30.7 30.2 -27.0
2025-12-31T10:45:41.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T10:45:41.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T10:45:41.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.364380
2025-12-31T10:45:41.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T10:45:41.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T10:45:41.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T10:45:41.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T10:45:41.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T10:45:41.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T10:45:23', tmtdew=33.82, humidity=9.88, cloud=0.0, wind=22.43, temperature=25.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T08:44:42.432', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T10:45:41.281 [DEBUG] [Thread-126270] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:45:41.355 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T10:45:41.367 [DEBUG] [Thread-126273] [transport.py] [_log()] starting thread (client mode): 0xb6be1570
2025-12-31T10:45:41.367 [DEBUG] [Thread-126273] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:45:41.388 [DEBUG] [Thread-126273] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T10:45:41.388 [INFO] [Thread-126273] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T10:45:41.395 [DEBUG] [Thread-126273] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:45:41.395 [DEBUG] [Thread-126273] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T10:45:41.395 [DEBUG] [Thread-126273] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:45:41.395 [DEBUG] [Thread-126273] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:45:41.395 [DEBUG] [Thread-126273] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:45:41.395 [DEBUG] [Thread-126273] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:45:41.395 [DEBUG] [Thread-126273] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:45:41.395 [DEBUG] [Thread-126273] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:45:41.395 [DEBUG] [Thread-126273] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:45:41.395 [DEBUG] [Thread-126273] [transport.py] [_log()] client lang: <none>
2025-12-31T10:45:41.395 [DEBUG] [Thread-126273] [transport.py] [_log()] server lang: <none>
2025-12-31T10:45:41.395 [DEBUG] [Thread-126273] [transport.py] [_log()] kex follows: False
2025-12-31T10:45:41.395 [DEBUG] [Thread-126273] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:45:41.396 [DEBUG] [Thread-126273] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:45:41.396 [DEBUG] [Thread-126273] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:45:41.396 [DEBUG] [Thread-126273] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:45:41.396 [DEBUG] [Thread-126273] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:45:41.396 [DEBUG] [Thread-126273] [transport.py] [_log()] Compression: none
2025-12-31T10:45:41.396 [DEBUG] [Thread-126273] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:45:41.453 [DEBUG] [Thread-126273] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:45:41.453 [DEBUG] [Thread-126273] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:45:41.453 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T10:45:41.453 [DEBUG] [Thread-126273] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T10:45:41.454 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:45:41.514 [DEBUG] [Thread-126273] [transport.py] [_log()] userauth is OK
2025-12-31T10:45:41.514 [DEBUG] [Thread-126273] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:45:41.514 [DEBUG] [Thread-126273] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:45:41.514 [DEBUG] [Thread-126273] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T10:45:41.514 [DEBUG] [Thread-126273] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:45:41.531 [INFO] [Thread-126273] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:45:41.531 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T10:45:41.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:45:42.435 [DEBUG] [Thread-126273] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:45:42.435 [DEBUG] [Thread-126273] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:45:42.483 [DEBUG] [Thread-126273] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:45:42.483 [DEBUG] [Thread-126273] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:45:42.491 [DEBUG] [Thread-126273] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:45:42.499 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:45:42.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T10:45:42.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T10:45:42.515 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:45:42.515 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:45:42.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:45:42.522 [DEBUG] [Thread-126273] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:45:54.836 [DEBUG] [Thread-126275 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:46:07.400 [DEBUG] [Thread-126276 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:46:09.898 [DEBUG] [Thread-126277 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:46:12.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T10:46:12.546 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T10:46:12.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T10:46:13.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 10, 45, 55), 33.76, 9.78, 0.0, 21.16, 25.26, 0, 0, 0, 2, 0, 0),)
2025-12-31T10:46:13.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 10:45:55
2025-12-31T10:46:13.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T10:46:13.536 [DEBUG] [Thread-126278] [transport.py] [_log()] starting thread (client mode): 0xb6b487c0
2025-12-31T10:46:13.536 [DEBUG] [Thread-126278] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:46:13.556 [DEBUG] [Thread-126278] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T10:46:13.556 [INFO] [Thread-126278] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T10:46:13.559 [DEBUG] [Thread-126278] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:46:13.559 [DEBUG] [Thread-126278] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T10:46:13.559 [DEBUG] [Thread-126278] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:46:13.559 [DEBUG] [Thread-126278] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:46:13.559 [DEBUG] [Thread-126278] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:46:13.559 [DEBUG] [Thread-126278] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:46:13.559 [DEBUG] [Thread-126278] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:46:13.559 [DEBUG] [Thread-126278] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:46:13.559 [DEBUG] [Thread-126278] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:46:13.559 [DEBUG] [Thread-126278] [transport.py] [_log()] client lang: <none>
2025-12-31T10:46:13.559 [DEBUG] [Thread-126278] [transport.py] [_log()] server lang: <none>
2025-12-31T10:46:13.559 [DEBUG] [Thread-126278] [transport.py] [_log()] kex follows: False
2025-12-31T10:46:13.559 [DEBUG] [Thread-126278] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:46:13.559 [DEBUG] [Thread-126278] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:46:13.559 [DEBUG] [Thread-126278] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:46:13.559 [DEBUG] [Thread-126278] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:46:13.559 [DEBUG] [Thread-126278] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:46:13.559 [DEBUG] [Thread-126278] [transport.py] [_log()] Compression: none
2025-12-31T10:46:13.559 [DEBUG] [Thread-126278] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:46:13.576 [DEBUG] [Thread-126278] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:46:13.577 [DEBUG] [Thread-126278] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:46:13.578 [DEBUG] [Thread-126278] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T10:46:13.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T10:46:13.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:46:13.580 [DEBUG] [Thread-126278] [transport.py] [_log()] userauth is OK
2025-12-31T10:46:13.580 [DEBUG] [Thread-126278] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:46:13.580 [DEBUG] [Thread-126278] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:46:13.580 [DEBUG] [Thread-126278] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T10:46:13.580 [DEBUG] [Thread-126278] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:46:13.618 [INFO] [Thread-126278] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:46:13.619 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:46:15.234 [DEBUG] [Thread-126278] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:46:15.235 [DEBUG] [Thread-126278] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:46:15.235 [DEBUG] [Thread-126278] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T10:46:15.276 [DEBUG] [Thread-126278] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:46:15.276 [DEBUG] [Thread-126278] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:46:15.279 [DEBUG] [Thread-126278] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:46:15.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:46:15.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T10:46:15.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T10:46:15.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T10:46:15.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:46:15.304 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T10:46:15.305 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:46:15.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:46:15.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T10:46:15.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.365074 -999.00  +25.00  14.59     15   -3.10 1 1 1 1 1   888    0 31.95 153.75 ----- 17.0 14.6 272.6 31.0 32.0 -30.8 31.3 -26.9 29.5 -25.7 30.2 -26.8
2025-12-31T10:46:15.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T10:46:15.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T10:46:15.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.365074
2025-12-31T10:46:15.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T10:46:15.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T10:46:15.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T10:46:15.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T10:46:15.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T10:46:15.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T10:45:55', tmtdew=33.76, humidity=9.78, cloud=0.0, wind=21.16, temperature=25.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T08:45:42.394', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T10:46:15.308 [DEBUG] [Thread-126278] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:46:15.390 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T10:46:15.403 [DEBUG] [Thread-126281] [transport.py] [_log()] starting thread (client mode): 0xb6b200d0
2025-12-31T10:46:15.403 [DEBUG] [Thread-126281] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:46:15.417 [DEBUG] [Thread-126281] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T10:46:15.417 [INFO] [Thread-126281] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T10:46:15.424 [DEBUG] [Thread-126281] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:46:15.424 [DEBUG] [Thread-126281] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T10:46:15.424 [DEBUG] [Thread-126281] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:46:15.424 [DEBUG] [Thread-126281] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:46:15.424 [DEBUG] [Thread-126281] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:46:15.424 [DEBUG] [Thread-126281] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:46:15.424 [DEBUG] [Thread-126281] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:46:15.424 [DEBUG] [Thread-126281] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:46:15.424 [DEBUG] [Thread-126281] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:46:15.424 [DEBUG] [Thread-126281] [transport.py] [_log()] client lang: <none>
2025-12-31T10:46:15.424 [DEBUG] [Thread-126281] [transport.py] [_log()] server lang: <none>
2025-12-31T10:46:15.424 [DEBUG] [Thread-126281] [transport.py] [_log()] kex follows: False
2025-12-31T10:46:15.424 [DEBUG] [Thread-126281] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:46:15.424 [DEBUG] [Thread-126281] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:46:15.424 [DEBUG] [Thread-126281] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:46:15.425 [DEBUG] [Thread-126281] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:46:15.425 [DEBUG] [Thread-126281] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:46:15.425 [DEBUG] [Thread-126281] [transport.py] [_log()] Compression: none
2025-12-31T10:46:15.425 [DEBUG] [Thread-126281] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:46:15.483 [DEBUG] [Thread-126281] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:46:15.484 [DEBUG] [Thread-126281] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:46:15.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T10:46:15.485 [DEBUG] [Thread-126281] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T10:46:15.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:46:15.538 [DEBUG] [Thread-126281] [transport.py] [_log()] userauth is OK
2025-12-31T10:46:15.538 [DEBUG] [Thread-126281] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:46:15.539 [DEBUG] [Thread-126281] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:46:15.539 [DEBUG] [Thread-126281] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T10:46:15.539 [DEBUG] [Thread-126281] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:46:15.565 [INFO] [Thread-126281] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:46:15.565 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T10:46:15.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:46:16.378 [DEBUG] [Thread-126281] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:46:16.378 [DEBUG] [Thread-126281] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:46:16.425 [DEBUG] [Thread-126281] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:46:16.425 [DEBUG] [Thread-126281] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:46:16.433 [DEBUG] [Thread-126281] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:46:16.441 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:46: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-12-31T10:46:16.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T10:46:16.457 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:46:16.458 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:46:16.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:46:16.466 [DEBUG] [Thread-126281] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:46:24.928 [DEBUG] [Thread-126283 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:46:27.759 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:46:27.760 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:46:39.972 [DEBUG] [Thread-126284 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:46:46.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T10:46:46.489 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T10:46:46.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T10:46:47.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 10, 46, 27), 33.59, 9.88, 0.0, 23.4, 25.11, 0, 0, 0, 2, 0, 0),)
2025-12-31T10:46:47.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 10:46:27
2025-12-31T10:46:47.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T10:46:47.473 [DEBUG] [Thread-126285] [transport.py] [_log()] starting thread (client mode): 0xb6b4ab00
2025-12-31T10:46:47.473 [DEBUG] [Thread-126285] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:46:47.493 [DEBUG] [Thread-126285] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T10:46:47.494 [INFO] [Thread-126285] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T10:46:47.496 [DEBUG] [Thread-126285] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:46:47.497 [DEBUG] [Thread-126285] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T10:46:47.497 [DEBUG] [Thread-126285] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:46:47.497 [DEBUG] [Thread-126285] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:46:47.497 [DEBUG] [Thread-126285] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:46:47.497 [DEBUG] [Thread-126285] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:46:47.497 [DEBUG] [Thread-126285] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:46:47.497 [DEBUG] [Thread-126285] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:46:47.497 [DEBUG] [Thread-126285] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:46:47.497 [DEBUG] [Thread-126285] [transport.py] [_log()] client lang: <none>
2025-12-31T10:46:47.497 [DEBUG] [Thread-126285] [transport.py] [_log()] server lang: <none>
2025-12-31T10:46:47.497 [DEBUG] [Thread-126285] [transport.py] [_log()] kex follows: False
2025-12-31T10:46:47.497 [DEBUG] [Thread-126285] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:46:47.497 [DEBUG] [Thread-126285] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:46:47.498 [DEBUG] [Thread-126285] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:46:47.498 [DEBUG] [Thread-126285] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:46:47.498 [DEBUG] [Thread-126285] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:46:47.498 [DEBUG] [Thread-126285] [transport.py] [_log()] Compression: none
2025-12-31T10:46:47.498 [DEBUG] [Thread-126285] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:46:47.517 [DEBUG] [Thread-126285] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:46:47.518 [DEBUG] [Thread-126285] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:46:47.519 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T10:46:47.519 [DEBUG] [Thread-126285] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T10:46:47.520 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:46:47.521 [DEBUG] [Thread-126285] [transport.py] [_log()] userauth is OK
2025-12-31T10:46:47.522 [DEBUG] [Thread-126285] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:46:47.522 [DEBUG] [Thread-126285] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:46:47.522 [DEBUG] [Thread-126285] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T10:46:47.522 [DEBUG] [Thread-126285] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:46:47.546 [INFO] [Thread-126285] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:46:47.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:46:48.182 [DEBUG] [Thread-126285] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:46:48.182 [DEBUG] [Thread-126285] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:46:48.183 [DEBUG] [Thread-126285] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T10:46:48.224 [DEBUG] [Thread-126285] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:46:48.224 [DEBUG] [Thread-126285] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:46:48.229 [DEBUG] [Thread-126285] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:46:48.241 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:46:48.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T10:46:48.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T10:46:48.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T10:46:48.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:46:48.256 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T10:46:48.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:46:48.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:46:48.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T10:46:48.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.365421 -999.00  +25.10  19.70     15   -3.10 1 1 1 1 1   888    0 32.01 165.95 ----- 24.9 19.7 253.4 22.6 31.9 -28.0 31.3 -27.4 29.7 -23.6 30.2 -25.7
2025-12-31T10:46:48.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T10:46:48.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T10:46:48.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.365421
2025-12-31T10:46:48.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T10:46:48.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T10:46:48.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T10:46:48.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T10:46:48.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T10:46:48.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T10:46:27', tmtdew=33.59, humidity=9.88, cloud=0.0, wind=23.4, temperature=25.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T08:46:12.374', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T10:46:48.259 [DEBUG] [Thread-126285] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:46:48.343 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T10:46:48.355 [DEBUG] [Thread-126288] [transport.py] [_log()] starting thread (client mode): 0xb6b4afe0
2025-12-31T10:46:48.355 [DEBUG] [Thread-126288] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:46:48.369 [DEBUG] [Thread-126288] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T10:46:48.369 [INFO] [Thread-126288] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T10:46:48.376 [DEBUG] [Thread-126288] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:46:48.376 [DEBUG] [Thread-126288] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T10:46:48.376 [DEBUG] [Thread-126288] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:46:48.377 [DEBUG] [Thread-126288] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:46:48.377 [DEBUG] [Thread-126288] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:46:48.377 [DEBUG] [Thread-126288] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:46:48.377 [DEBUG] [Thread-126288] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:46:48.377 [DEBUG] [Thread-126288] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:46:48.377 [DEBUG] [Thread-126288] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:46:48.377 [DEBUG] [Thread-126288] [transport.py] [_log()] client lang: <none>
2025-12-31T10:46:48.377 [DEBUG] [Thread-126288] [transport.py] [_log()] server lang: <none>
2025-12-31T10:46:48.377 [DEBUG] [Thread-126288] [transport.py] [_log()] kex follows: False
2025-12-31T10:46:48.377 [DEBUG] [Thread-126288] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:46:48.378 [DEBUG] [Thread-126288] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:46:48.378 [DEBUG] [Thread-126288] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:46:48.378 [DEBUG] [Thread-126288] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:46:48.378 [DEBUG] [Thread-126288] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:46:48.378 [DEBUG] [Thread-126288] [transport.py] [_log()] Compression: none
2025-12-31T10:46:48.378 [DEBUG] [Thread-126288] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:46:48.436 [DEBUG] [Thread-126288] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:46:48.436 [DEBUG] [Thread-126288] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:46:48.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T10:46:48.438 [DEBUG] [Thread-126288] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T10:46:48.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:46:48.499 [DEBUG] [Thread-126288] [transport.py] [_log()] userauth is OK
2025-12-31T10:46:48.499 [DEBUG] [Thread-126288] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:46:48.499 [DEBUG] [Thread-126288] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:46:48.500 [DEBUG] [Thread-126288] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T10:46:48.500 [DEBUG] [Thread-126288] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:46:48.518 [INFO] [Thread-126288] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:46:48.519 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T10:46:48.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:46:49.435 [DEBUG] [Thread-126288] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:46:49.435 [DEBUG] [Thread-126288] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:46:49.483 [DEBUG] [Thread-126288] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:46:49.483 [DEBUG] [Thread-126288] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:46:49.492 [DEBUG] [Thread-126288] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:46:49.501 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:46:49.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T10:46:49.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-12-31T10:46:49.519 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:46:49.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:46:49.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:46:49.528 [DEBUG] [Thread-126288] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:46:55.006 [DEBUG] [Thread-126290 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:47:07.450 [DEBUG] [Thread-126291 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:47:10.043 [DEBUG] [Thread-126292 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:47:19.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T10:47:19.551 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T10:47:19.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T10:47:20.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 10, 46, 59), 33.48, 10.0, 0.0, 23.29, 25.01, 0, 0, 0, 2, 0, 0),)
2025-12-31T10:47:20.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 10:46:59
2025-12-31T10:47:20.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T10:47:20.534 [DEBUG] [Thread-126293] [transport.py] [_log()] starting thread (client mode): 0xb95d48e0
2025-12-31T10:47:20.534 [DEBUG] [Thread-126293] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:47:20.554 [DEBUG] [Thread-126293] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T10:47:20.555 [INFO] [Thread-126293] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T10:47:20.556 [DEBUG] [Thread-126293] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:47:20.556 [DEBUG] [Thread-126293] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T10:47:20.556 [DEBUG] [Thread-126293] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:47:20.556 [DEBUG] [Thread-126293] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:47:20.556 [DEBUG] [Thread-126293] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:47:20.556 [DEBUG] [Thread-126293] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:47:20.556 [DEBUG] [Thread-126293] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:47:20.556 [DEBUG] [Thread-126293] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:47:20.556 [DEBUG] [Thread-126293] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:47:20.556 [DEBUG] [Thread-126293] [transport.py] [_log()] client lang: <none>
2025-12-31T10:47:20.556 [DEBUG] [Thread-126293] [transport.py] [_log()] server lang: <none>
2025-12-31T10:47:20.556 [DEBUG] [Thread-126293] [transport.py] [_log()] kex follows: False
2025-12-31T10:47:20.557 [DEBUG] [Thread-126293] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:47:20.557 [DEBUG] [Thread-126293] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:47:20.557 [DEBUG] [Thread-126293] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:47:20.557 [DEBUG] [Thread-126293] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:47:20.557 [DEBUG] [Thread-126293] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:47:20.557 [DEBUG] [Thread-126293] [transport.py] [_log()] Compression: none
2025-12-31T10:47:20.557 [DEBUG] [Thread-126293] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:47:20.567 [DEBUG] [Thread-126293] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:47:20.567 [DEBUG] [Thread-126293] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:47:20.568 [DEBUG] [Thread-126293] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T10:47:20.568 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T10:47:20.569 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:47:20.570 [DEBUG] [Thread-126293] [transport.py] [_log()] userauth is OK
2025-12-31T10:47:20.571 [DEBUG] [Thread-126293] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:47:20.571 [DEBUG] [Thread-126293] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:47:20.571 [DEBUG] [Thread-126293] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T10:47:20.571 [DEBUG] [Thread-126293] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:47:20.595 [INFO] [Thread-126293] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:47:20.596 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:47:21.342 [DEBUG] [Thread-126293] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:47:21.342 [DEBUG] [Thread-126293] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:47:21.342 [DEBUG] [Thread-126293] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T10:47:21.384 [DEBUG] [Thread-126293] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:47:21.384 [DEBUG] [Thread-126293] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:47:21.388 [DEBUG] [Thread-126293] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:47:21.399 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:47:21.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T10:47:21.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T10:47:21.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T10:47:21.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:47:21.416 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T10:47:21.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:47:21.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:47:21.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T10:47:21.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.365769 -999.00  +25.10  22.10     15   -3.00 1 1 1 1 1   888    0 31.98 164.05 ----- 20.1 22.1 269.6 27.1 31.8 -28.6 31.1 -27.0 29.6 -25.1 30.1 -26.4
2025-12-31T10:47:21.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T10:47:21.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T10:47:21.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.365769
2025-12-31T10:47:21.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T10:47:21.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T10:47:21.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T10:47:21.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T10:47:21.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T10:47:21.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T10:46:59', tmtdew=33.48, humidity=10.0, cloud=0.0, wind=23.29, temperature=25.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T08:46:42.442', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T10:47:21.420 [DEBUG] [Thread-126293] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:47:21.503 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T10:47:21.516 [DEBUG] [Thread-126296] [transport.py] [_log()] starting thread (client mode): 0xb6b18eb0
2025-12-31T10:47:21.516 [DEBUG] [Thread-126296] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:47:21.530 [DEBUG] [Thread-126296] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T10:47:21.530 [INFO] [Thread-126296] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T10:47:21.538 [DEBUG] [Thread-126296] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:47:21.538 [DEBUG] [Thread-126296] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T10:47:21.538 [DEBUG] [Thread-126296] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:47:21.538 [DEBUG] [Thread-126296] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:47:21.538 [DEBUG] [Thread-126296] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:47:21.538 [DEBUG] [Thread-126296] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:47:21.538 [DEBUG] [Thread-126296] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:47:21.538 [DEBUG] [Thread-126296] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:47:21.538 [DEBUG] [Thread-126296] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:47:21.538 [DEBUG] [Thread-126296] [transport.py] [_log()] client lang: <none>
2025-12-31T10:47:21.538 [DEBUG] [Thread-126296] [transport.py] [_log()] server lang: <none>
2025-12-31T10:47:21.539 [DEBUG] [Thread-126296] [transport.py] [_log()] kex follows: False
2025-12-31T10:47:21.539 [DEBUG] [Thread-126296] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:47:21.539 [DEBUG] [Thread-126296] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:47:21.539 [DEBUG] [Thread-126296] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:47:21.539 [DEBUG] [Thread-126296] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:47:21.539 [DEBUG] [Thread-126296] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:47:21.539 [DEBUG] [Thread-126296] [transport.py] [_log()] Compression: none
2025-12-31T10:47:21.539 [DEBUG] [Thread-126296] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:47:21.598 [DEBUG] [Thread-126296] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:47:21.599 [DEBUG] [Thread-126296] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:47:21.600 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T10:47:21.600 [DEBUG] [Thread-126296] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T10:47:21.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:47:21.655 [DEBUG] [Thread-126296] [transport.py] [_log()] userauth is OK
2025-12-31T10:47:21.655 [DEBUG] [Thread-126296] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:47:21.655 [DEBUG] [Thread-126296] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:47:21.655 [DEBUG] [Thread-126296] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T10:47:21.655 [DEBUG] [Thread-126296] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:47:21.679 [INFO] [Thread-126296] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:47:21.680 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T10:47:21.680 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:47:22.533 [DEBUG] [Thread-126296] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:47:22.534 [DEBUG] [Thread-126296] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:47:22.582 [DEBUG] [Thread-126296] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:47:22.582 [DEBUG] [Thread-126296] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:47:22.591 [DEBUG] [Thread-126296] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:47:22.600 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:47: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-12-31T10:47: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-12-31T10:47:22.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:47:22.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:47:22.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:47:22.628 [DEBUG] [Thread-126296] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:47:25.082 [DEBUG] [Thread-126298 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:47:27.900 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:47:27.902 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:47:40.140 [DEBUG] [Thread-126299 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:47:52.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T10:47:52.651 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T10:47:52.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T10:47:53.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 10, 47, 31), 33.55, 9.95, 0.0, 23.27, 25.02, 0, 0, 0, 2, 0, 0),)
2025-12-31T10:47:53.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 10:47:31
2025-12-31T10:47:53.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T10:47:53.640 [DEBUG] [Thread-126300] [transport.py] [_log()] starting thread (client mode): 0xb95d7430
2025-12-31T10:47:53.640 [DEBUG] [Thread-126300] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:47:53.660 [DEBUG] [Thread-126300] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T10:47:53.660 [INFO] [Thread-126300] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T10:47:53.663 [DEBUG] [Thread-126300] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:47:53.663 [DEBUG] [Thread-126300] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T10:47:53.663 [DEBUG] [Thread-126300] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:47:53.663 [DEBUG] [Thread-126300] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:47:53.663 [DEBUG] [Thread-126300] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:47:53.663 [DEBUG] [Thread-126300] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:47:53.663 [DEBUG] [Thread-126300] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:47:53.663 [DEBUG] [Thread-126300] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:47:53.663 [DEBUG] [Thread-126300] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:47:53.663 [DEBUG] [Thread-126300] [transport.py] [_log()] client lang: <none>
2025-12-31T10:47:53.663 [DEBUG] [Thread-126300] [transport.py] [_log()] server lang: <none>
2025-12-31T10:47:53.663 [DEBUG] [Thread-126300] [transport.py] [_log()] kex follows: False
2025-12-31T10:47:53.663 [DEBUG] [Thread-126300] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:47:53.663 [DEBUG] [Thread-126300] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:47:53.663 [DEBUG] [Thread-126300] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:47:53.663 [DEBUG] [Thread-126300] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:47:53.663 [DEBUG] [Thread-126300] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:47:53.663 [DEBUG] [Thread-126300] [transport.py] [_log()] Compression: none
2025-12-31T10:47:53.663 [DEBUG] [Thread-126300] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:47:53.682 [DEBUG] [Thread-126300] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:47:53.683 [DEBUG] [Thread-126300] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:47:53.683 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T10:47:53.684 [DEBUG] [Thread-126300] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T10:47:53.685 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:47:53.686 [DEBUG] [Thread-126300] [transport.py] [_log()] userauth is OK
2025-12-31T10:47:53.686 [DEBUG] [Thread-126300] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:47:53.686 [DEBUG] [Thread-126300] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:47:53.686 [DEBUG] [Thread-126300] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T10:47:53.686 [DEBUG] [Thread-126300] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:47:53.711 [INFO] [Thread-126300] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:47:53.712 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:47:54.318 [DEBUG] [Thread-126300] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:47:54.318 [DEBUG] [Thread-126300] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:47:54.318 [DEBUG] [Thread-126300] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T10:47:54.359 [DEBUG] [Thread-126300] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:47:54.359 [DEBUG] [Thread-126300] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:47:54.363 [DEBUG] [Thread-126300] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:47:54.374 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:47:54.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T10:47:54.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T10:47:54.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T10:47:54.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:47:54.386 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T10:47:54.386 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:47:54.386 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:47:54.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T10:47:54.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.366116 -999.00  +24.60  26.14     15   -3.30 1 1 1 1 1   888    0 32.19 150.28 ----- 23.8 26.1 275.4 36.2 31.5 -29.8 30.9 -26.0 29.1 -29.0 30.0 -25.9
2025-12-31T10:47:54.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T10:47:54.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T10:47:54.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.366116
2025-12-31T10:47:54.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T10:47:54.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T10:47:54.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T10:47:54.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T10:47:54.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T10:47:54.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T10:47:31', tmtdew=33.55, humidity=9.95, cloud=0.0, wind=23.27, temperature=25.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T08:47:12.422', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T10:47:54.388 [DEBUG] [Thread-126300] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:47:54.472 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T10:47:54.490 [DEBUG] [Thread-126303] [transport.py] [_log()] starting thread (client mode): 0xb95d4af0
2025-12-31T10:47:54.490 [DEBUG] [Thread-126303] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:47:54.504 [DEBUG] [Thread-126303] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T10:47:54.505 [INFO] [Thread-126303] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T10:47:54.512 [DEBUG] [Thread-126303] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:47:54.512 [DEBUG] [Thread-126303] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T10:47:54.512 [DEBUG] [Thread-126303] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:47:54.512 [DEBUG] [Thread-126303] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:47:54.512 [DEBUG] [Thread-126303] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:47:54.513 [DEBUG] [Thread-126303] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:47:54.513 [DEBUG] [Thread-126303] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:47:54.513 [DEBUG] [Thread-126303] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:47:54.513 [DEBUG] [Thread-126303] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:47:54.513 [DEBUG] [Thread-126303] [transport.py] [_log()] client lang: <none>
2025-12-31T10:47:54.513 [DEBUG] [Thread-126303] [transport.py] [_log()] server lang: <none>
2025-12-31T10:47:54.513 [DEBUG] [Thread-126303] [transport.py] [_log()] kex follows: False
2025-12-31T10:47:54.513 [DEBUG] [Thread-126303] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:47:54.513 [DEBUG] [Thread-126303] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:47:54.513 [DEBUG] [Thread-126303] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:47:54.514 [DEBUG] [Thread-126303] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:47:54.514 [DEBUG] [Thread-126303] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:47:54.514 [DEBUG] [Thread-126303] [transport.py] [_log()] Compression: none
2025-12-31T10:47:54.514 [DEBUG] [Thread-126303] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:47:54.571 [DEBUG] [Thread-126303] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:47:54.571 [DEBUG] [Thread-126303] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:47:54.572 [DEBUG] [Thread-126303] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T10:47:54.572 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T10:47:54.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:47:54.627 [DEBUG] [Thread-126303] [transport.py] [_log()] userauth is OK
2025-12-31T10:47:54.627 [DEBUG] [Thread-126303] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:47:54.627 [DEBUG] [Thread-126303] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:47:54.627 [DEBUG] [Thread-126303] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T10:47:54.627 [DEBUG] [Thread-126303] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:47:54.646 [INFO] [Thread-126303] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:47:54.646 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T10:47:54.647 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:47:55.171 [DEBUG] [Thread-126305 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:47:55.469 [DEBUG] [Thread-126303] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:47:55.470 [DEBUG] [Thread-126303] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:47:55.519 [DEBUG] [Thread-126303] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:47:55.519 [DEBUG] [Thread-126303] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:47:55.528 [DEBUG] [Thread-126303] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:47:55.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:47:55.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T10:47:55.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T10:47:55.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:47:55.554 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:47:55.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:47:55.562 [DEBUG] [Thread-126303] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:48:07.502 [DEBUG] [Thread-126306 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:48:10.218 [DEBUG] [Thread-126307 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:48:25.253 [DEBUG] [Thread-126308 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:48:25.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T10:48:25.584 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T10:48:25.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T10:48:26.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 10, 48, 3), 33.66, 9.88, 0.0, 25.9, 25.14, 0, 0, 0, 2, 0, 0),)
2025-12-31T10:48:26.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 10:48:03
2025-12-31T10:48:26.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T10:48:26.559 [DEBUG] [Thread-126309] [transport.py] [_log()] starting thread (client mode): 0xb6b34dc0
2025-12-31T10:48:26.559 [DEBUG] [Thread-126309] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:48:26.580 [DEBUG] [Thread-126309] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T10:48:26.580 [INFO] [Thread-126309] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T10:48:26.583 [DEBUG] [Thread-126309] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:48:26.583 [DEBUG] [Thread-126309] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T10:48:26.583 [DEBUG] [Thread-126309] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:48:26.583 [DEBUG] [Thread-126309] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:48:26.583 [DEBUG] [Thread-126309] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:48:26.583 [DEBUG] [Thread-126309] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:48:26.583 [DEBUG] [Thread-126309] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:48:26.583 [DEBUG] [Thread-126309] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:48:26.583 [DEBUG] [Thread-126309] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:48:26.583 [DEBUG] [Thread-126309] [transport.py] [_log()] client lang: <none>
2025-12-31T10:48:26.583 [DEBUG] [Thread-126309] [transport.py] [_log()] server lang: <none>
2025-12-31T10:48:26.583 [DEBUG] [Thread-126309] [transport.py] [_log()] kex follows: False
2025-12-31T10:48:26.583 [DEBUG] [Thread-126309] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:48:26.583 [DEBUG] [Thread-126309] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:48:26.583 [DEBUG] [Thread-126309] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:48:26.583 [DEBUG] [Thread-126309] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:48:26.583 [DEBUG] [Thread-126309] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:48:26.583 [DEBUG] [Thread-126309] [transport.py] [_log()] Compression: none
2025-12-31T10:48:26.583 [DEBUG] [Thread-126309] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:48:26.600 [DEBUG] [Thread-126309] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:48:26.601 [DEBUG] [Thread-126309] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:48:26.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T10:48:26.602 [DEBUG] [Thread-126309] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T10:48:26.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:48:26.644 [DEBUG] [Thread-126309] [transport.py] [_log()] userauth is OK
2025-12-31T10:48:26.644 [DEBUG] [Thread-126309] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:48:26.644 [DEBUG] [Thread-126309] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:48:26.645 [DEBUG] [Thread-126309] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T10:48:26.645 [DEBUG] [Thread-126309] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:48:26.676 [INFO] [Thread-126309] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:48:26.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:48:27.385 [DEBUG] [Thread-126309] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:48:27.385 [DEBUG] [Thread-126309] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:48:27.386 [DEBUG] [Thread-126309] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T10:48:27.426 [DEBUG] [Thread-126309] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:48:27.426 [DEBUG] [Thread-126309] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:48:27.429 [DEBUG] [Thread-126309] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:48:27.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:48:27.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T10:48:27.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T10:48:27.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T10:48:27.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:48:27.453 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T10:48:27.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:48:27.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:48:27.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T10:48:27.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.366463 -999.00  +24.30  32.31     15   -3.50 1 1 2 1 1   888    0 31.61 157.13 ----- 26.2 32.3 273.1 39.0 31.4 -29.2 30.8 -27.1 29.1 -26.3 29.9 -24.9
2025-12-31T10:48:27.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T10:48:27.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T10:48:27.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.366463
2025-12-31T10:48:27.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T10:48:27.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T10:48:27.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T10:48:27.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T10:48:27.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T10:48:27.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T10:48:03', tmtdew=33.66, humidity=9.88, cloud=0.0, wind=25.9, temperature=25.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T08:47:42.403', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T10:48:27.456 [DEBUG] [Thread-126309] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:48:27.540 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T10:48:27.552 [DEBUG] [Thread-126312] [transport.py] [_log()] starting thread (client mode): 0xb6b18eb0
2025-12-31T10:48:27.552 [DEBUG] [Thread-126312] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:48:27.566 [DEBUG] [Thread-126312] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T10:48:27.566 [INFO] [Thread-126312] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T10:48:27.574 [DEBUG] [Thread-126312] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:48:27.574 [DEBUG] [Thread-126312] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T10:48:27.574 [DEBUG] [Thread-126312] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:48:27.574 [DEBUG] [Thread-126312] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:48:27.574 [DEBUG] [Thread-126312] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:48:27.575 [DEBUG] [Thread-126312] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:48:27.575 [DEBUG] [Thread-126312] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:48:27.575 [DEBUG] [Thread-126312] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:48:27.575 [DEBUG] [Thread-126312] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:48:27.575 [DEBUG] [Thread-126312] [transport.py] [_log()] client lang: <none>
2025-12-31T10:48:27.575 [DEBUG] [Thread-126312] [transport.py] [_log()] server lang: <none>
2025-12-31T10:48:27.575 [DEBUG] [Thread-126312] [transport.py] [_log()] kex follows: False
2025-12-31T10:48:27.575 [DEBUG] [Thread-126312] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:48:27.575 [DEBUG] [Thread-126312] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:48:27.576 [DEBUG] [Thread-126312] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:48:27.576 [DEBUG] [Thread-126312] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:48:27.576 [DEBUG] [Thread-126312] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:48:27.576 [DEBUG] [Thread-126312] [transport.py] [_log()] Compression: none
2025-12-31T10:48:27.576 [DEBUG] [Thread-126312] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:48:27.630 [DEBUG] [Thread-126312] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:48:27.631 [DEBUG] [Thread-126312] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:48:27.631 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T10:48:27.632 [DEBUG] [Thread-126312] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T10:48:27.632 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:48:27.690 [DEBUG] [Thread-126312] [transport.py] [_log()] userauth is OK
2025-12-31T10:48:27.691 [DEBUG] [Thread-126312] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:48:27.691 [DEBUG] [Thread-126312] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:48:27.691 [DEBUG] [Thread-126312] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T10:48:27.691 [DEBUG] [Thread-126312] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:48:27.709 [INFO] [Thread-126312] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:48:27.710 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T10:48:27.710 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:48:28.043 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:48:28.044 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:48:28.552 [DEBUG] [Thread-126312] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:48:28.553 [DEBUG] [Thread-126312] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:48:28.600 [DEBUG] [Thread-126312] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:48:28.600 [DEBUG] [Thread-126312] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:48:28.609 [DEBUG] [Thread-126312] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:48:28.617 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:48:28.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T10:48:28.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T10:48:28.633 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:48:28.633 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:48:28.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:48:28.641 [DEBUG] [Thread-126312] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:48:40.291 [DEBUG] [Thread-126314 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:48:55.352 [DEBUG] [Thread-126315 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:48:58.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T10:48:58.663 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T10:48:58.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T10:48:59.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 10, 48, 35), 33.53, 10.23, 0.0, 25.83, 24.87, 0, 0, 0, 2, 0, 0),)
2025-12-31T10:48:59.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 10:48:35
2025-12-31T10:48:59.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T10:48:59.696 [DEBUG] [Thread-126316] [transport.py] [_log()] starting thread (client mode): 0xb6b19a80
2025-12-31T10:48:59.697 [DEBUG] [Thread-126316] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:48:59.718 [DEBUG] [Thread-126316] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T10:48:59.718 [INFO] [Thread-126316] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T10:48:59.719 [DEBUG] [Thread-126316] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:48:59.719 [DEBUG] [Thread-126316] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T10:48:59.719 [DEBUG] [Thread-126316] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:48:59.719 [DEBUG] [Thread-126316] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:48:59.719 [DEBUG] [Thread-126316] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:48:59.719 [DEBUG] [Thread-126316] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:48:59.719 [DEBUG] [Thread-126316] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:48:59.719 [DEBUG] [Thread-126316] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:48:59.719 [DEBUG] [Thread-126316] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:48:59.719 [DEBUG] [Thread-126316] [transport.py] [_log()] client lang: <none>
2025-12-31T10:48:59.719 [DEBUG] [Thread-126316] [transport.py] [_log()] server lang: <none>
2025-12-31T10:48:59.719 [DEBUG] [Thread-126316] [transport.py] [_log()] kex follows: False
2025-12-31T10:48:59.719 [DEBUG] [Thread-126316] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:48:59.719 [DEBUG] [Thread-126316] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:48:59.719 [DEBUG] [Thread-126316] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:48:59.719 [DEBUG] [Thread-126316] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:48:59.719 [DEBUG] [Thread-126316] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:48:59.719 [DEBUG] [Thread-126316] [transport.py] [_log()] Compression: none
2025-12-31T10:48:59.719 [DEBUG] [Thread-126316] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:48:59.735 [DEBUG] [Thread-126316] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:48:59.735 [DEBUG] [Thread-126316] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:48:59.736 [DEBUG] [Thread-126316] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T10:48:59.736 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T10:48:59.736 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:48:59.737 [DEBUG] [Thread-126316] [transport.py] [_log()] userauth is OK
2025-12-31T10:48:59.737 [DEBUG] [Thread-126316] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:48:59.737 [DEBUG] [Thread-126316] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:48:59.737 [DEBUG] [Thread-126316] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T10:48:59.737 [DEBUG] [Thread-126316] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:48:59.746 [INFO] [Thread-126316] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:48:59.746 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:49:00.357 [DEBUG] [Thread-126316] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:49:00.357 [DEBUG] [Thread-126316] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:49:00.357 [DEBUG] [Thread-126316] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T10:49:00.399 [DEBUG] [Thread-126316] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:49:00.399 [DEBUG] [Thread-126316] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:49:00.401 [DEBUG] [Thread-126316] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:49:00.413 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:49:00.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T10:49:00.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T10:49:00.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T10:49:00.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:49:00.422 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T10:49:00.422 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:49:00.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:49:00.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T10:49:00.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.367157 -999.00  +24.40  15.55     15   -3.30 1 1 1 1 1   888    0 31.09 128.79 ----- 17.3 15.6 245.4 21.6 31.4 -27.2 30.8 -25.3 29.3 -24.8 29.8 -25.1
2025-12-31T10:49:00.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T10:49:00.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T10:49:00.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.367157
2025-12-31T10:49:00.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T10:49:00.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T10:49:00.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T10:49:00.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T10:49:00.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T10:49:00.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T10:48:35', tmtdew=33.53, humidity=10.23, cloud=0.0, wind=25.83, temperature=24.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T08:48:42.365', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T10:49:00.423 [DEBUG] [Thread-126316] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:49:00.497 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T10:49:00.510 [DEBUG] [Thread-126319] [transport.py] [_log()] starting thread (client mode): 0xb6be4070
2025-12-31T10:49:00.510 [DEBUG] [Thread-126319] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:49:00.525 [DEBUG] [Thread-126319] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T10:49:00.525 [INFO] [Thread-126319] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T10:49:00.532 [DEBUG] [Thread-126319] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:49:00.532 [DEBUG] [Thread-126319] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T10:49:00.532 [DEBUG] [Thread-126319] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:49:00.532 [DEBUG] [Thread-126319] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:49:00.532 [DEBUG] [Thread-126319] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:49:00.532 [DEBUG] [Thread-126319] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:49:00.532 [DEBUG] [Thread-126319] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:49:00.532 [DEBUG] [Thread-126319] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:49:00.532 [DEBUG] [Thread-126319] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:49:00.532 [DEBUG] [Thread-126319] [transport.py] [_log()] client lang: <none>
2025-12-31T10:49:00.532 [DEBUG] [Thread-126319] [transport.py] [_log()] server lang: <none>
2025-12-31T10:49:00.532 [DEBUG] [Thread-126319] [transport.py] [_log()] kex follows: False
2025-12-31T10:49:00.532 [DEBUG] [Thread-126319] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:49:00.532 [DEBUG] [Thread-126319] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:49:00.532 [DEBUG] [Thread-126319] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:49:00.532 [DEBUG] [Thread-126319] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:49:00.533 [DEBUG] [Thread-126319] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:49:00.533 [DEBUG] [Thread-126319] [transport.py] [_log()] Compression: none
2025-12-31T10:49:00.533 [DEBUG] [Thread-126319] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:49:00.589 [DEBUG] [Thread-126319] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:49:00.589 [DEBUG] [Thread-126319] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:49:00.589 [DEBUG] [Thread-126319] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T10:49:00.589 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T10:49:00.590 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:49:00.646 [DEBUG] [Thread-126319] [transport.py] [_log()] userauth is OK
2025-12-31T10:49:00.646 [DEBUG] [Thread-126319] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:49:00.646 [DEBUG] [Thread-126319] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:49:00.646 [DEBUG] [Thread-126319] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T10:49:00.646 [DEBUG] [Thread-126319] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:49:00.660 [INFO] [Thread-126319] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:49:00.661 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T10:49:00.661 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:49:01.509 [DEBUG] [Thread-126319] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:49:01.509 [DEBUG] [Thread-126319] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:49:01.556 [DEBUG] [Thread-126319] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:49:01.556 [DEBUG] [Thread-126319] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:49:01.564 [DEBUG] [Thread-126319] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:49:01.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:49:01.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T10:49:01.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T10:49:01.588 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:49:01.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:49:01.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:49:01.596 [DEBUG] [Thread-126319] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:49:07.556 [DEBUG] [Thread-126321 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:49:10.385 [DEBUG] [Thread-126322 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:49:25.439 [DEBUG] [Thread-126323 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:49:28.186 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:49:28.187 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:49:31.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T10:49:31.596 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T10:49:31.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T10:49:32.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 10, 49, 8), 33.64, 10.15, 0.0, 24.65, 24.84, 0, 0, 0, 2, 0, 0),)
2025-12-31T10:49:32.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 10:49:08
2025-12-31T10:49:32.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T10:49:32.589 [DEBUG] [Thread-126324] [transport.py] [_log()] starting thread (client mode): 0xb6b4ab60
2025-12-31T10:49:32.589 [DEBUG] [Thread-126324] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:49:32.609 [DEBUG] [Thread-126324] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T10:49:32.610 [INFO] [Thread-126324] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T10:49:32.613 [DEBUG] [Thread-126324] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:49:32.613 [DEBUG] [Thread-126324] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T10:49:32.613 [DEBUG] [Thread-126324] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:49:32.613 [DEBUG] [Thread-126324] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:49:32.613 [DEBUG] [Thread-126324] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:49:32.613 [DEBUG] [Thread-126324] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:49:32.613 [DEBUG] [Thread-126324] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:49:32.614 [DEBUG] [Thread-126324] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:49:32.614 [DEBUG] [Thread-126324] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:49:32.614 [DEBUG] [Thread-126324] [transport.py] [_log()] client lang: <none>
2025-12-31T10:49:32.614 [DEBUG] [Thread-126324] [transport.py] [_log()] server lang: <none>
2025-12-31T10:49:32.614 [DEBUG] [Thread-126324] [transport.py] [_log()] kex follows: False
2025-12-31T10:49:32.614 [DEBUG] [Thread-126324] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:49:32.614 [DEBUG] [Thread-126324] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:49:32.614 [DEBUG] [Thread-126324] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:49:32.614 [DEBUG] [Thread-126324] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:49:32.614 [DEBUG] [Thread-126324] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:49:32.614 [DEBUG] [Thread-126324] [transport.py] [_log()] Compression: none
2025-12-31T10:49:32.614 [DEBUG] [Thread-126324] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:49:32.633 [DEBUG] [Thread-126324] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:49:32.634 [DEBUG] [Thread-126324] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:49:32.634 [DEBUG] [Thread-126324] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T10:49:32.634 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T10:49:32.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:49:32.637 [DEBUG] [Thread-126324] [transport.py] [_log()] userauth is OK
2025-12-31T10:49:32.637 [DEBUG] [Thread-126324] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:49:32.637 [DEBUG] [Thread-126324] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:49:32.637 [DEBUG] [Thread-126324] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T10:49:32.637 [DEBUG] [Thread-126324] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:49:32.654 [INFO] [Thread-126324] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:49:32.655 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:49:33.222 [DEBUG] [Thread-126324] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:49:33.222 [DEBUG] [Thread-126324] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:49:33.223 [DEBUG] [Thread-126324] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T10:49:33.263 [DEBUG] [Thread-126324] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:49:33.263 [DEBUG] [Thread-126324] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:49:33.267 [DEBUG] [Thread-126324] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:49:33.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:49:33.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T10:49:33.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T10:49:33.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T10:49:33.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:49:33.292 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T10:49:33.292 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:49:33.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:49:33.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T10:49:33.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.367505 -999.00  +24.80  23.09     15   -3.40 1 1 1 1 1   888    0 30.97 135.02 ----- 21.0 23.1 262.6 29.0 31.4 -28.0 30.8 -26.4 29.1 -24.5 29.8 -25.5
2025-12-31T10:49:33.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T10:49:33.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T10:49:33.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.367505
2025-12-31T10:49:33.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T10:49:33.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T10:49:33.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T10:49:33.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T10:49:33.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T10:49:33.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T10:49:08', tmtdew=33.64, humidity=10.15, cloud=0.0, wind=24.65, temperature=24.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T08:49:12.432', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T10:49:33.295 [DEBUG] [Thread-126324] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:49:33.379 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T10:49:33.391 [DEBUG] [Thread-126327] [transport.py] [_log()] starting thread (client mode): 0xb6b6b7f0
2025-12-31T10:49:33.391 [DEBUG] [Thread-126327] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:49:33.405 [DEBUG] [Thread-126327] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T10:49:33.405 [INFO] [Thread-126327] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T10:49:33.417 [DEBUG] [Thread-126327] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:49:33.417 [DEBUG] [Thread-126327] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T10:49:33.417 [DEBUG] [Thread-126327] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:49:33.417 [DEBUG] [Thread-126327] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:49:33.418 [DEBUG] [Thread-126327] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:49:33.418 [DEBUG] [Thread-126327] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:49:33.418 [DEBUG] [Thread-126327] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:49:33.418 [DEBUG] [Thread-126327] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:49:33.418 [DEBUG] [Thread-126327] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:49:33.418 [DEBUG] [Thread-126327] [transport.py] [_log()] client lang: <none>
2025-12-31T10:49:33.418 [DEBUG] [Thread-126327] [transport.py] [_log()] server lang: <none>
2025-12-31T10:49:33.418 [DEBUG] [Thread-126327] [transport.py] [_log()] kex follows: False
2025-12-31T10:49:33.418 [DEBUG] [Thread-126327] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:49:33.419 [DEBUG] [Thread-126327] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:49:33.419 [DEBUG] [Thread-126327] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:49:33.419 [DEBUG] [Thread-126327] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:49:33.419 [DEBUG] [Thread-126327] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:49:33.419 [DEBUG] [Thread-126327] [transport.py] [_log()] Compression: none
2025-12-31T10:49:33.419 [DEBUG] [Thread-126327] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:49:33.471 [DEBUG] [Thread-126327] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:49:33.471 [DEBUG] [Thread-126327] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:49:33.472 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T10:49:33.473 [DEBUG] [Thread-126327] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T10:49:33.473 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:49:33.527 [DEBUG] [Thread-126327] [transport.py] [_log()] userauth is OK
2025-12-31T10:49:33.527 [DEBUG] [Thread-126327] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:49:33.528 [DEBUG] [Thread-126327] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:49:33.528 [DEBUG] [Thread-126327] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T10:49:33.528 [DEBUG] [Thread-126327] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:49:33.546 [INFO] [Thread-126327] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:49:33.547 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T10:49:33.547 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:49:34.377 [DEBUG] [Thread-126327] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:49:34.377 [DEBUG] [Thread-126327] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:49:34.425 [DEBUG] [Thread-126327] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:49:34.425 [DEBUG] [Thread-126327] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:49:34.434 [DEBUG] [Thread-126327] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:49:34.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:49:34.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T10:49:34.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T10:49:34.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:49:34.462 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:49:34.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:49:34.470 [DEBUG] [Thread-126327] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:49:40.471 [DEBUG] [Thread-126329 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:49:55.517 [DEBUG] [Thread-126330 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:50:04.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T10:50:04.492 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T10:50:04.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T10:50:05.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 10, 49, 40), 34.15, 9.65, 0.0, 17.68, 25.27, 0, 0, 0, 2, 0, 0),)
2025-12-31T10:50:05.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 10:49:40
2025-12-31T10:50:05.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T10:50:05.500 [DEBUG] [Thread-126331] [transport.py] [_log()] starting thread (client mode): 0xb6bba2f0
2025-12-31T10:50:05.500 [DEBUG] [Thread-126331] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:50:05.520 [DEBUG] [Thread-126331] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T10:50:05.520 [INFO] [Thread-126331] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T10:50:05.524 [DEBUG] [Thread-126331] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:50:05.524 [DEBUG] [Thread-126331] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T10:50:05.524 [DEBUG] [Thread-126331] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:50:05.524 [DEBUG] [Thread-126331] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:50:05.524 [DEBUG] [Thread-126331] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:50:05.524 [DEBUG] [Thread-126331] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:50:05.524 [DEBUG] [Thread-126331] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:50:05.524 [DEBUG] [Thread-126331] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:50:05.524 [DEBUG] [Thread-126331] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:50:05.524 [DEBUG] [Thread-126331] [transport.py] [_log()] client lang: <none>
2025-12-31T10:50:05.524 [DEBUG] [Thread-126331] [transport.py] [_log()] server lang: <none>
2025-12-31T10:50:05.524 [DEBUG] [Thread-126331] [transport.py] [_log()] kex follows: False
2025-12-31T10:50:05.524 [DEBUG] [Thread-126331] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:50:05.524 [DEBUG] [Thread-126331] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:50:05.525 [DEBUG] [Thread-126331] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:50:05.525 [DEBUG] [Thread-126331] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:50:05.525 [DEBUG] [Thread-126331] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:50:05.525 [DEBUG] [Thread-126331] [transport.py] [_log()] Compression: none
2025-12-31T10:50:05.525 [DEBUG] [Thread-126331] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:50:05.544 [DEBUG] [Thread-126331] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:50:05.544 [DEBUG] [Thread-126331] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:50:05.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T10:50:05.545 [DEBUG] [Thread-126331] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T10:50:05.545 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:50:05.546 [DEBUG] [Thread-126331] [transport.py] [_log()] userauth is OK
2025-12-31T10:50:05.546 [DEBUG] [Thread-126331] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:50:05.546 [DEBUG] [Thread-126331] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:50:05.546 [DEBUG] [Thread-126331] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T10:50:05.546 [DEBUG] [Thread-126331] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:50:05.563 [INFO] [Thread-126331] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:50:05.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:50:07.608 [DEBUG] [Thread-126333 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:50:10.551 [DEBUG] [Thread-126334 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:50:15.917 [DEBUG] [Thread-126331] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:50:15.917 [DEBUG] [Thread-126331] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:50:15.917 [DEBUG] [Thread-126331] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T10:50:15.957 [DEBUG] [Thread-126331] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:50:15.957 [DEBUG] [Thread-126331] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:50:15.960 [DEBUG] [Thread-126331] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:50:16.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:50:16.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T10:50:16.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T10:50:16.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T10:50:16.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:50:16.142 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T10:50:16.142 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:50:16.142 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:50:16.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T10:50:16.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.367852 -999.00  +24.80  15.70     15   -3.40 1 1 1 1 1   888    0 31.61 130.67 ----- 16.6 15.7 253.6 19.1 31.4 -27.1 30.8 -25.7 29.4 -23.2 29.8 -25.0
2025-12-31T10:50:16.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T10:50:16.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T10:50:16.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.367852
2025-12-31T10:50:16.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T10:50:16.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T10:50:16.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T10:50:16.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T10:50:16.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T10:50:16.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T10:49:40', tmtdew=34.15, humidity=9.65, cloud=0.0, wind=17.68, temperature=25.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T08:49:42.413', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T10:50:16.143 [DEBUG] [Thread-126331] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:50:16.218 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T10:50:16.229 [DEBUG] [Thread-126336] [transport.py] [_log()] starting thread (client mode): 0xb6bb2200
2025-12-31T10:50:16.229 [DEBUG] [Thread-126336] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:50:16.249 [DEBUG] [Thread-126336] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T10:50:16.249 [INFO] [Thread-126336] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T10:50:16.256 [DEBUG] [Thread-126336] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:50:16.256 [DEBUG] [Thread-126336] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T10:50:16.256 [DEBUG] [Thread-126336] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:50:16.256 [DEBUG] [Thread-126336] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:50:16.257 [DEBUG] [Thread-126336] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:50:16.257 [DEBUG] [Thread-126336] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:50:16.257 [DEBUG] [Thread-126336] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:50:16.257 [DEBUG] [Thread-126336] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:50:16.257 [DEBUG] [Thread-126336] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:50:16.257 [DEBUG] [Thread-126336] [transport.py] [_log()] client lang: <none>
2025-12-31T10:50:16.257 [DEBUG] [Thread-126336] [transport.py] [_log()] server lang: <none>
2025-12-31T10:50:16.257 [DEBUG] [Thread-126336] [transport.py] [_log()] kex follows: False
2025-12-31T10:50:16.257 [DEBUG] [Thread-126336] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:50:16.257 [DEBUG] [Thread-126336] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:50:16.257 [DEBUG] [Thread-126336] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:50:16.257 [DEBUG] [Thread-126336] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:50:16.257 [DEBUG] [Thread-126336] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:50:16.257 [DEBUG] [Thread-126336] [transport.py] [_log()] Compression: none
2025-12-31T10:50:16.257 [DEBUG] [Thread-126336] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:50:16.313 [DEBUG] [Thread-126336] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:50:16.313 [DEBUG] [Thread-126336] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:50:16.313 [DEBUG] [Thread-126336] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T10:50:16.313 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T10:50:16.313 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:50:16.370 [DEBUG] [Thread-126336] [transport.py] [_log()] userauth is OK
2025-12-31T10:50:16.370 [DEBUG] [Thread-126336] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:50:16.370 [DEBUG] [Thread-126336] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:50:16.370 [DEBUG] [Thread-126336] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T10:50:16.370 [DEBUG] [Thread-126336] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:50:16.384 [INFO] [Thread-126336] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:50:16.384 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T10:50:16.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:50:17.228 [DEBUG] [Thread-126336] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:50:17.228 [DEBUG] [Thread-126336] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:50:17.275 [DEBUG] [Thread-126336] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:50:17.275 [DEBUG] [Thread-126336] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:50:17.283 [DEBUG] [Thread-126336] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:50:17.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:50:17.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T10:50:17.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T10:50:17.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:50:17.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:50:17.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:50:17.315 [DEBUG] [Thread-126336] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:50:25.582 [DEBUG] [Thread-126338 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:50:28.329 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:50:28.330 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:50:40.632 [DEBUG] [Thread-126339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:50:47.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T10:50:47.338 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T10:50:47.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T10:50:48.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 10, 50, 44), 34.32, 9.49, 0.0, 21.02, 25.05, 0, 0, 0, 2, 0, 0),)
2025-12-31T10:50:48.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 10:50:44
2025-12-31T10:50:48.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T10:50:48.337 [DEBUG] [Thread-126340] [transport.py] [_log()] starting thread (client mode): 0xb95d4b80
2025-12-31T10:50:48.337 [DEBUG] [Thread-126340] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:50:48.357 [DEBUG] [Thread-126340] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T10:50:48.357 [INFO] [Thread-126340] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T10:50:48.360 [DEBUG] [Thread-126340] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:50:48.360 [DEBUG] [Thread-126340] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T10:50:48.360 [DEBUG] [Thread-126340] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:50:48.360 [DEBUG] [Thread-126340] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:50:48.360 [DEBUG] [Thread-126340] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:50:48.360 [DEBUG] [Thread-126340] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:50:48.360 [DEBUG] [Thread-126340] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:50:48.360 [DEBUG] [Thread-126340] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:50:48.360 [DEBUG] [Thread-126340] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:50:48.361 [DEBUG] [Thread-126340] [transport.py] [_log()] client lang: <none>
2025-12-31T10:50:48.361 [DEBUG] [Thread-126340] [transport.py] [_log()] server lang: <none>
2025-12-31T10:50:48.361 [DEBUG] [Thread-126340] [transport.py] [_log()] kex follows: False
2025-12-31T10:50:48.361 [DEBUG] [Thread-126340] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:50:48.361 [DEBUG] [Thread-126340] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:50:48.361 [DEBUG] [Thread-126340] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:50:48.361 [DEBUG] [Thread-126340] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:50:48.361 [DEBUG] [Thread-126340] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:50:48.361 [DEBUG] [Thread-126340] [transport.py] [_log()] Compression: none
2025-12-31T10:50:48.361 [DEBUG] [Thread-126340] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:50:48.372 [DEBUG] [Thread-126340] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:50:48.373 [DEBUG] [Thread-126340] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:50:48.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T10:50:48.374 [DEBUG] [Thread-126340] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T10:50:48.375 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:50:48.376 [DEBUG] [Thread-126340] [transport.py] [_log()] userauth is OK
2025-12-31T10:50:48.376 [DEBUG] [Thread-126340] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:50:48.376 [DEBUG] [Thread-126340] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:50:48.376 [DEBUG] [Thread-126340] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T10:50:48.376 [DEBUG] [Thread-126340] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:50:48.395 [INFO] [Thread-126340] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:50:48.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:50:49.009 [DEBUG] [Thread-126340] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:50:49.009 [DEBUG] [Thread-126340] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:50:49.009 [DEBUG] [Thread-126340] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T10:50:49.050 [DEBUG] [Thread-126340] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:50:49.050 [DEBUG] [Thread-126340] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:50:49.054 [DEBUG] [Thread-126340] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:50:49.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:50:49.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T10:50:49.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T10:50:49.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T10:50:49.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:50:49.078 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T10:50:49.079 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:50:49.079 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:50:49.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T10:50:49.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.368199 -999.00  +24.60  17.34     15   -3.50 1 1 1 1 1   888    0 31.10 125.23 ----- 18.4 17.3 263.6 28.2 31.3 -27.2 30.8 -26.1 29.4 -23.5 29.8 -25.0
2025-12-31T10:50:49.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T10:50:49.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T10:50:49.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.368199
2025-12-31T10:50:49.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T10:50:49.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T10:50:49.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T10:50:49.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T10:50:49.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T10:50:49.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T10:50:44', tmtdew=34.32, humidity=9.49, cloud=0.0, wind=21.02, temperature=25.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T08:50:12.394', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T10:50:49.082 [DEBUG] [Thread-126340] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:50:49.175 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T10:50:49.186 [DEBUG] [Thread-126343] [transport.py] [_log()] starting thread (client mode): 0xb6bb9780
2025-12-31T10:50:49.186 [DEBUG] [Thread-126343] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:50:49.201 [DEBUG] [Thread-126343] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T10:50:49.201 [INFO] [Thread-126343] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T10:50:49.208 [DEBUG] [Thread-126343] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:50:49.209 [DEBUG] [Thread-126343] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T10:50:49.209 [DEBUG] [Thread-126343] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:50:49.209 [DEBUG] [Thread-126343] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:50:49.209 [DEBUG] [Thread-126343] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:50:49.209 [DEBUG] [Thread-126343] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:50:49.209 [DEBUG] [Thread-126343] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:50:49.209 [DEBUG] [Thread-126343] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:50:49.209 [DEBUG] [Thread-126343] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:50:49.209 [DEBUG] [Thread-126343] [transport.py] [_log()] client lang: <none>
2025-12-31T10:50:49.209 [DEBUG] [Thread-126343] [transport.py] [_log()] server lang: <none>
2025-12-31T10:50:49.209 [DEBUG] [Thread-126343] [transport.py] [_log()] kex follows: False
2025-12-31T10:50:49.209 [DEBUG] [Thread-126343] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:50:49.209 [DEBUG] [Thread-126343] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:50:49.209 [DEBUG] [Thread-126343] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:50:49.210 [DEBUG] [Thread-126343] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:50:49.210 [DEBUG] [Thread-126343] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:50:49.210 [DEBUG] [Thread-126343] [transport.py] [_log()] Compression: none
2025-12-31T10:50:49.210 [DEBUG] [Thread-126343] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:50:49.266 [DEBUG] [Thread-126343] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:50:49.267 [DEBUG] [Thread-126343] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:50:49.267 [DEBUG] [Thread-126343] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T10:50:49.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T10:50:49.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:50:49.322 [DEBUG] [Thread-126343] [transport.py] [_log()] userauth is OK
2025-12-31T10:50:49.323 [DEBUG] [Thread-126343] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:50:49.323 [DEBUG] [Thread-126343] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:50:49.323 [DEBUG] [Thread-126343] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T10:50:49.323 [DEBUG] [Thread-126343] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:50:49.341 [INFO] [Thread-126343] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:50:49.342 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T10:50:49.344 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:50:50.165 [DEBUG] [Thread-126343] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:50:50.165 [DEBUG] [Thread-126343] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:50:50.213 [DEBUG] [Thread-126343] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:50:50.213 [DEBUG] [Thread-126343] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:50:50.223 [DEBUG] [Thread-126343] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:50:50.232 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:50:50.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T10:50:50.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T10:50:50.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:50:50.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:50:50.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:50:50.259 [DEBUG] [Thread-126343] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:50:55.665 [DEBUG] [Thread-126345 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:51:07.662 [DEBUG] [Thread-126346 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:51:10.703 [DEBUG] [Thread-126347 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:51:20.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T10:51:20.277 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T10:51:20.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T10:51:20.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 10, 51, 16), 34.06, 9.65, 0.0, 19.85, 24.94, 0, 0, 0, 2, 0, 0),)
2025-12-31T10:51:20.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 10:51:16
2025-12-31T10:51:21.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T10:51:21.276 [DEBUG] [Thread-126348] [transport.py] [_log()] starting thread (client mode): 0xb9558cd0
2025-12-31T10:51:21.276 [DEBUG] [Thread-126348] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:51:21.298 [DEBUG] [Thread-126348] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T10:51:21.299 [INFO] [Thread-126348] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T10:51:21.301 [DEBUG] [Thread-126348] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:51:21.301 [DEBUG] [Thread-126348] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T10:51:21.301 [DEBUG] [Thread-126348] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:51:21.301 [DEBUG] [Thread-126348] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:51:21.301 [DEBUG] [Thread-126348] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:51:21.301 [DEBUG] [Thread-126348] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:51:21.301 [DEBUG] [Thread-126348] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:51:21.301 [DEBUG] [Thread-126348] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:51:21.301 [DEBUG] [Thread-126348] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:51:21.301 [DEBUG] [Thread-126348] [transport.py] [_log()] client lang: <none>
2025-12-31T10:51:21.301 [DEBUG] [Thread-126348] [transport.py] [_log()] server lang: <none>
2025-12-31T10:51:21.301 [DEBUG] [Thread-126348] [transport.py] [_log()] kex follows: False
2025-12-31T10:51:21.301 [DEBUG] [Thread-126348] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:51:21.301 [DEBUG] [Thread-126348] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:51:21.301 [DEBUG] [Thread-126348] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:51:21.301 [DEBUG] [Thread-126348] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:51:21.301 [DEBUG] [Thread-126348] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:51:21.301 [DEBUG] [Thread-126348] [transport.py] [_log()] Compression: none
2025-12-31T10:51:21.301 [DEBUG] [Thread-126348] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:51:21.318 [DEBUG] [Thread-126348] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:51:21.319 [DEBUG] [Thread-126348] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:51:21.319 [DEBUG] [Thread-126348] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T10:51:21.319 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T10:51:21.320 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:51:21.322 [DEBUG] [Thread-126348] [transport.py] [_log()] userauth is OK
2025-12-31T10:51:21.323 [DEBUG] [Thread-126348] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:51:21.323 [DEBUG] [Thread-126348] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:51:21.323 [DEBUG] [Thread-126348] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T10:51:21.323 [DEBUG] [Thread-126348] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:51:21.359 [INFO] [Thread-126348] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:51:21.360 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:51:22.047 [DEBUG] [Thread-126348] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:51:22.047 [DEBUG] [Thread-126348] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:51:22.048 [DEBUG] [Thread-126348] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T10:51:22.089 [DEBUG] [Thread-126348] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:51:22.089 [DEBUG] [Thread-126348] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:51:22.092 [DEBUG] [Thread-126348] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:51:22.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:51:22.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T10:51:22.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T10:51:22.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T10:51:22.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:51:22.119 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T10:51:22.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:51:22.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:51:22.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T10:51:22.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.368546 -999.00  +24.30  22.64     15   -3.70 1 1 1 1 1   888    0 30.53 116.32 ----- 25.2 22.6 257.2 26.7 31.2 -27.7 30.7 -26.2 29.4 -23.4 29.6 -26.7
2025-12-31T10:51:22.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T10:51:22.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T10:51:22.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.368546
2025-12-31T10:51:22.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T10:51:22.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T10:51:22.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T10:51:22.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T10:51:22.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T10:51:22.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T10:51:16', tmtdew=34.06, humidity=9.65, cloud=0.0, wind=19.85, temperature=24.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T08:50:42.374', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T10:51:22.122 [DEBUG] [Thread-126348] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:51:22.212 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T10:51:22.223 [DEBUG] [Thread-126351] [transport.py] [_log()] starting thread (client mode): 0xb6b6b760
2025-12-31T10:51:22.223 [DEBUG] [Thread-126351] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:51:22.237 [DEBUG] [Thread-126351] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T10:51:22.237 [INFO] [Thread-126351] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T10:51:22.249 [DEBUG] [Thread-126351] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:51:22.249 [DEBUG] [Thread-126351] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T10:51:22.249 [DEBUG] [Thread-126351] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:51:22.249 [DEBUG] [Thread-126351] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:51:22.249 [DEBUG] [Thread-126351] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:51:22.249 [DEBUG] [Thread-126351] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:51:22.249 [DEBUG] [Thread-126351] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:51:22.249 [DEBUG] [Thread-126351] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:51:22.250 [DEBUG] [Thread-126351] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:51:22.250 [DEBUG] [Thread-126351] [transport.py] [_log()] client lang: <none>
2025-12-31T10:51:22.250 [DEBUG] [Thread-126351] [transport.py] [_log()] server lang: <none>
2025-12-31T10:51:22.250 [DEBUG] [Thread-126351] [transport.py] [_log()] kex follows: False
2025-12-31T10:51:22.250 [DEBUG] [Thread-126351] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:51:22.250 [DEBUG] [Thread-126351] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:51:22.250 [DEBUG] [Thread-126351] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:51:22.250 [DEBUG] [Thread-126351] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:51:22.250 [DEBUG] [Thread-126351] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:51:22.250 [DEBUG] [Thread-126351] [transport.py] [_log()] Compression: none
2025-12-31T10:51:22.250 [DEBUG] [Thread-126351] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:51:22.302 [DEBUG] [Thread-126351] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:51:22.303 [DEBUG] [Thread-126351] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:51:22.303 [DEBUG] [Thread-126351] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T10:51:22.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T10:51:22.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:51:22.359 [DEBUG] [Thread-126351] [transport.py] [_log()] userauth is OK
2025-12-31T10:51:22.359 [DEBUG] [Thread-126351] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:51:22.359 [DEBUG] [Thread-126351] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:51:22.359 [DEBUG] [Thread-126351] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T10:51:22.359 [DEBUG] [Thread-126351] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:51:22.378 [INFO] [Thread-126351] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:51:22.379 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T10:51:22.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:51:23.160 [DEBUG] [Thread-126351] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:51:23.161 [DEBUG] [Thread-126351] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:51:23.209 [DEBUG] [Thread-126351] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:51:23.209 [DEBUG] [Thread-126351] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:51:23.219 [DEBUG] [Thread-126351] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:51:23.228 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:51:23.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T10:51:23.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T10:51:23.246 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:51:23.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:51:23.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:51:23.255 [DEBUG] [Thread-126351] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:51:25.738 [DEBUG] [Thread-126353 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:51:28.466 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:51:28.467 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:51:40.785 [DEBUG] [Thread-126354 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:51:53.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T10:51:53.278 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T10:51:53.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-12-31T10:51:53.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 10, 51, 48), 33.96, 9.62, 0.0, 23.71, 24.74, 0, 0, 0, 2, 0, 0),)
2025-12-31T10:51:53.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 10:51:48
2025-12-31T10:51:54.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T10:51:54.272 [DEBUG] [Thread-126355] [transport.py] [_log()] starting thread (client mode): 0xb6b4a8c0
2025-12-31T10:51:54.272 [DEBUG] [Thread-126355] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:51:54.294 [DEBUG] [Thread-126355] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T10:51:54.294 [INFO] [Thread-126355] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T10:51:54.297 [DEBUG] [Thread-126355] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:51:54.297 [DEBUG] [Thread-126355] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T10:51:54.297 [DEBUG] [Thread-126355] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:51:54.297 [DEBUG] [Thread-126355] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:51:54.297 [DEBUG] [Thread-126355] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:51:54.297 [DEBUG] [Thread-126355] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:51:54.297 [DEBUG] [Thread-126355] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:51:54.297 [DEBUG] [Thread-126355] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:51:54.297 [DEBUG] [Thread-126355] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:51:54.297 [DEBUG] [Thread-126355] [transport.py] [_log()] client lang: <none>
2025-12-31T10:51:54.297 [DEBUG] [Thread-126355] [transport.py] [_log()] server lang: <none>
2025-12-31T10:51:54.297 [DEBUG] [Thread-126355] [transport.py] [_log()] kex follows: False
2025-12-31T10:51:54.297 [DEBUG] [Thread-126355] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:51:54.297 [DEBUG] [Thread-126355] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:51:54.297 [DEBUG] [Thread-126355] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:51:54.297 [DEBUG] [Thread-126355] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:51:54.297 [DEBUG] [Thread-126355] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:51:54.297 [DEBUG] [Thread-126355] [transport.py] [_log()] Compression: none
2025-12-31T10:51:54.297 [DEBUG] [Thread-126355] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:51:54.314 [DEBUG] [Thread-126355] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:51:54.315 [DEBUG] [Thread-126355] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:51:54.316 [DEBUG] [Thread-126355] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T10:51:54.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T10:51:54.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:51:54.318 [DEBUG] [Thread-126355] [transport.py] [_log()] userauth is OK
2025-12-31T10:51:54.318 [DEBUG] [Thread-126355] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:51:54.318 [DEBUG] [Thread-126355] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:51:54.318 [DEBUG] [Thread-126355] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T10:51:54.318 [DEBUG] [Thread-126355] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:51:54.344 [INFO] [Thread-126355] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:51:54.632 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:51:54.921 [DEBUG] [Thread-126355] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:51:54.921 [DEBUG] [Thread-126355] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:51:54.921 [DEBUG] [Thread-126355] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T10:51:54.922 [DEBUG] [Thread-126355] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:51:54.922 [DEBUG] [Thread-126355] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:51:54.924 [DEBUG] [Thread-126355] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:51:54.932 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:51:54.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T10:51:54.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T10:51:54.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T10:51:54.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:51:54.939 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T10:51:54.939 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:51:54.939 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:51:54.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T10:51:54.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.368893 -999.00  +24.50  15.98     15   -3.40 1 1 1 1 1   888    0 30.95 114.16 ----- 19.2 16.0 242.3 22.8 31.1 -27.1 30.7 -25.3 29.4 -23.4 29.6 -24.9
2025-12-31T10:51:54.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T10:51:54.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T10:51:54.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.368893
2025-12-31T10:51:54.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T10:51:54.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T10:51:54.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T10:51:54.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T10:51:54.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T10:51:54.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T10:51:48', tmtdew=33.96, humidity=9.62, cloud=0.0, wind=23.71, temperature=24.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T08:51:12.355', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T10:51:54.940 [DEBUG] [Thread-126355] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:51:55.011 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T10:51:55.023 [DEBUG] [Thread-126358] [transport.py] [_log()] starting thread (client mode): 0xb6bb2ad0
2025-12-31T10:51:55.023 [DEBUG] [Thread-126358] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:51:55.039 [DEBUG] [Thread-126358] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T10:51:55.039 [INFO] [Thread-126358] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T10:51:55.046 [DEBUG] [Thread-126358] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:51:55.046 [DEBUG] [Thread-126358] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T10:51:55.046 [DEBUG] [Thread-126358] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:51:55.046 [DEBUG] [Thread-126358] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:51:55.046 [DEBUG] [Thread-126358] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:51:55.046 [DEBUG] [Thread-126358] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:51:55.046 [DEBUG] [Thread-126358] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:51:55.046 [DEBUG] [Thread-126358] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:51:55.046 [DEBUG] [Thread-126358] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:51:55.046 [DEBUG] [Thread-126358] [transport.py] [_log()] client lang: <none>
2025-12-31T10:51:55.046 [DEBUG] [Thread-126358] [transport.py] [_log()] server lang: <none>
2025-12-31T10:51:55.046 [DEBUG] [Thread-126358] [transport.py] [_log()] kex follows: False
2025-12-31T10:51:55.047 [DEBUG] [Thread-126358] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:51:55.047 [DEBUG] [Thread-126358] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:51:55.047 [DEBUG] [Thread-126358] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:51:55.047 [DEBUG] [Thread-126358] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:51:55.047 [DEBUG] [Thread-126358] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:51:55.047 [DEBUG] [Thread-126358] [transport.py] [_log()] Compression: none
2025-12-31T10:51:55.047 [DEBUG] [Thread-126358] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:51:55.107 [DEBUG] [Thread-126358] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:51:55.107 [DEBUG] [Thread-126358] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:51:55.108 [DEBUG] [Thread-126358] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T10:51:55.109 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T10:51:55.110 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:51:55.166 [DEBUG] [Thread-126358] [transport.py] [_log()] userauth is OK
2025-12-31T10:51:55.166 [DEBUG] [Thread-126358] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:51:55.167 [DEBUG] [Thread-126358] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:51:55.167 [DEBUG] [Thread-126358] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T10:51:55.167 [DEBUG] [Thread-126358] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:51:55.200 [INFO] [Thread-126358] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:51:55.200 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T10:51:55.201 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:51:55.827 [DEBUG] [Thread-126360 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:51:56.085 [DEBUG] [Thread-126358] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:51:56.085 [DEBUG] [Thread-126358] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:51:56.136 [DEBUG] [Thread-126358] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:51:56.136 [DEBUG] [Thread-126358] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:51:56.148 [DEBUG] [Thread-126358] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:51:56.158 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:51:56.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T10:51:56.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T10:51:56.183 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:51:56.184 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:51:56.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:51:56.195 [DEBUG] [Thread-126358] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:52:07.716 [DEBUG] [Thread-126361 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:52:10.878 [DEBUG] [Thread-126362 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:52:25.908 [DEBUG] [Thread-126363 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:52:26.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T10:52:26.210 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T10:52:26.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T10:52:26.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 10, 52, 20), 33.93, 9.65, 0.0, 25.99, 24.82, 0, 0, 0, 2, 0, 0),)
2025-12-31T10:52:26.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 10:52:20
2025-12-31T10:52:27.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T10:52:27.177 [DEBUG] [Thread-126364] [transport.py] [_log()] starting thread (client mode): 0xb6bb1660
2025-12-31T10:52:27.177 [DEBUG] [Thread-126364] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:52:27.196 [DEBUG] [Thread-126364] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T10:52:27.196 [INFO] [Thread-126364] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T10:52:27.199 [DEBUG] [Thread-126364] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:52:27.199 [DEBUG] [Thread-126364] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T10:52:27.199 [DEBUG] [Thread-126364] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:52:27.199 [DEBUG] [Thread-126364] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:52:27.199 [DEBUG] [Thread-126364] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:52:27.199 [DEBUG] [Thread-126364] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:52:27.200 [DEBUG] [Thread-126364] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:52:27.200 [DEBUG] [Thread-126364] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:52:27.200 [DEBUG] [Thread-126364] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:52:27.200 [DEBUG] [Thread-126364] [transport.py] [_log()] client lang: <none>
2025-12-31T10:52:27.200 [DEBUG] [Thread-126364] [transport.py] [_log()] server lang: <none>
2025-12-31T10:52:27.200 [DEBUG] [Thread-126364] [transport.py] [_log()] kex follows: False
2025-12-31T10:52:27.200 [DEBUG] [Thread-126364] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:52:27.200 [DEBUG] [Thread-126364] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:52:27.200 [DEBUG] [Thread-126364] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:52:27.200 [DEBUG] [Thread-126364] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:52:27.200 [DEBUG] [Thread-126364] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:52:27.200 [DEBUG] [Thread-126364] [transport.py] [_log()] Compression: none
2025-12-31T10:52:27.200 [DEBUG] [Thread-126364] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:52:27.216 [DEBUG] [Thread-126364] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:52:27.217 [DEBUG] [Thread-126364] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:52:27.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T10:52:27.218 [DEBUG] [Thread-126364] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T10:52:27.219 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:52:27.220 [DEBUG] [Thread-126364] [transport.py] [_log()] userauth is OK
2025-12-31T10:52:27.220 [DEBUG] [Thread-126364] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:52:27.220 [DEBUG] [Thread-126364] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:52:27.220 [DEBUG] [Thread-126364] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T10:52:27.220 [DEBUG] [Thread-126364] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:52:27.246 [INFO] [Thread-126364] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:52:27.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:52:27.979 [DEBUG] [Thread-126364] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:52:27.979 [DEBUG] [Thread-126364] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:52:27.979 [DEBUG] [Thread-126364] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T10:52:28.020 [DEBUG] [Thread-126364] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:52:28.020 [DEBUG] [Thread-126364] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:52:28.023 [DEBUG] [Thread-126364] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:52:28.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:52:28.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T10:52:28.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T10:52:28.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T10:52:28.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:52:28.045 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T10:52:28.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:52:28.045 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:52:28.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T10:52:28.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.369241 -999.00  +24.90  18.27     15   -3.40 1 1 1 1 1   888    0 30.77 114.65 ----- 18.6 18.3 268.8 28.2 31.1 -27.3 30.7 -24.8 29.3 -22.3 29.7 -24.3
2025-12-31T10:52:28.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T10:52:28.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T10:52:28.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.369241
2025-12-31T10:52:28.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T10:52:28.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T10:52:28.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T10:52:28.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T10:52:28.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T10:52:28.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T10:52:20', tmtdew=33.93, humidity=9.65, cloud=0.0, wind=25.99, temperature=24.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T08:51:42.422', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T10:52:28.048 [DEBUG] [Thread-126364] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:52:28.131 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T10:52:28.142 [DEBUG] [Thread-126367] [transport.py] [_log()] starting thread (client mode): 0xb6bb3a00
2025-12-31T10:52:28.143 [DEBUG] [Thread-126367] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:52:28.158 [DEBUG] [Thread-126367] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T10:52:28.158 [INFO] [Thread-126367] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T10:52:28.167 [DEBUG] [Thread-126367] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:52:28.167 [DEBUG] [Thread-126367] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T10:52:28.167 [DEBUG] [Thread-126367] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:52:28.167 [DEBUG] [Thread-126367] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:52:28.167 [DEBUG] [Thread-126367] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:52:28.168 [DEBUG] [Thread-126367] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:52:28.168 [DEBUG] [Thread-126367] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:52:28.168 [DEBUG] [Thread-126367] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:52:28.168 [DEBUG] [Thread-126367] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:52:28.168 [DEBUG] [Thread-126367] [transport.py] [_log()] client lang: <none>
2025-12-31T10:52:28.168 [DEBUG] [Thread-126367] [transport.py] [_log()] server lang: <none>
2025-12-31T10:52:28.168 [DEBUG] [Thread-126367] [transport.py] [_log()] kex follows: False
2025-12-31T10:52:28.168 [DEBUG] [Thread-126367] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:52:28.168 [DEBUG] [Thread-126367] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:52:28.168 [DEBUG] [Thread-126367] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:52:28.168 [DEBUG] [Thread-126367] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:52:28.168 [DEBUG] [Thread-126367] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:52:28.168 [DEBUG] [Thread-126367] [transport.py] [_log()] Compression: none
2025-12-31T10:52:28.168 [DEBUG] [Thread-126367] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:52:28.223 [DEBUG] [Thread-126367] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:52:28.223 [DEBUG] [Thread-126367] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:52:28.224 [DEBUG] [Thread-126367] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T10:52:28.224 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T10:52:28.224 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:52:28.279 [DEBUG] [Thread-126367] [transport.py] [_log()] userauth is OK
2025-12-31T10:52:28.279 [DEBUG] [Thread-126367] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:52:28.279 [DEBUG] [Thread-126367] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:52:28.279 [DEBUG] [Thread-126367] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T10:52:28.280 [DEBUG] [Thread-126367] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:52:28.298 [INFO] [Thread-126367] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:52:28.298 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T10:52:28.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:52:28.607 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:52:28.608 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:52:29.231 [DEBUG] [Thread-126367] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:52:29.231 [DEBUG] [Thread-126367] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:52:29.279 [DEBUG] [Thread-126367] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:52:29.279 [DEBUG] [Thread-126367] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:52:29.288 [DEBUG] [Thread-126367] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:52:29.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:52:29.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T10:52:29.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T10:52:29.314 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:52:29.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:52:29.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:52:29.322 [DEBUG] [Thread-126367] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:52:40.944 [DEBUG] [Thread-126369 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:52:55.993 [DEBUG] [Thread-126370 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:52:59.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T10:52:59.318 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T10:52:59.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-12-31T10:53:00.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 10, 52, 52), 34.05, 9.59, 0.0, 19.8, 25.0, 0, 0, 0, 2, 0, 0),)
2025-12-31T10:53:00.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 10:52:52
2025-12-31T10:53:00.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T10:53:00.292 [DEBUG] [Thread-126371] [transport.py] [_log()] starting thread (client mode): 0xb6bb3700
2025-12-31T10:53:00.292 [DEBUG] [Thread-126371] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:53:00.312 [DEBUG] [Thread-126371] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T10:53:00.312 [INFO] [Thread-126371] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T10:53:00.316 [DEBUG] [Thread-126371] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:53:00.316 [DEBUG] [Thread-126371] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T10:53:00.316 [DEBUG] [Thread-126371] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:53:00.316 [DEBUG] [Thread-126371] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:53:00.316 [DEBUG] [Thread-126371] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:53:00.316 [DEBUG] [Thread-126371] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:53:00.316 [DEBUG] [Thread-126371] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:53:00.316 [DEBUG] [Thread-126371] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:53:00.316 [DEBUG] [Thread-126371] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:53:00.316 [DEBUG] [Thread-126371] [transport.py] [_log()] client lang: <none>
2025-12-31T10:53:00.316 [DEBUG] [Thread-126371] [transport.py] [_log()] server lang: <none>
2025-12-31T10:53:00.316 [DEBUG] [Thread-126371] [transport.py] [_log()] kex follows: False
2025-12-31T10:53:00.316 [DEBUG] [Thread-126371] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:53:00.316 [DEBUG] [Thread-126371] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:53:00.316 [DEBUG] [Thread-126371] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:53:00.316 [DEBUG] [Thread-126371] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:53:00.316 [DEBUG] [Thread-126371] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:53:00.316 [DEBUG] [Thread-126371] [transport.py] [_log()] Compression: none
2025-12-31T10:53:00.316 [DEBUG] [Thread-126371] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:53:00.335 [DEBUG] [Thread-126371] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:53:00.336 [DEBUG] [Thread-126371] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:53:00.336 [DEBUG] [Thread-126371] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T10:53:00.337 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T10:53:00.337 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:53:00.339 [DEBUG] [Thread-126371] [transport.py] [_log()] userauth is OK
2025-12-31T10:53:00.339 [DEBUG] [Thread-126371] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:53:00.339 [DEBUG] [Thread-126371] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:53:00.339 [DEBUG] [Thread-126371] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T10:53:00.339 [DEBUG] [Thread-126371] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:53:00.358 [INFO] [Thread-126371] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:53:00.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:53:01.023 [DEBUG] [Thread-126371] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:53:01.023 [DEBUG] [Thread-126371] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:53:01.024 [DEBUG] [Thread-126371] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T10:53:01.064 [DEBUG] [Thread-126371] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:53:01.064 [DEBUG] [Thread-126371] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:53:01.067 [DEBUG] [Thread-126371] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:53:01.079 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:53:01.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T10:53:01.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T10:53:01.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T10:53:01.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:53:01.090 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T10:53:01.091 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:53:01.091 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:53:01.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T10:53:01.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.369935 -999.00  +24.70  21.01     15   -3.60 1 1 1 1 1   888    0 31.06 110.03 ----- 18.7 21.0 268.8 29.9 31.1 -27.3 30.6 -24.8 29.2 -22.3 29.8 -23.3
2025-12-31T10:53:01.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T10:53:01.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T10:53:01.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.369935
2025-12-31T10:53:01.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T10:53:01.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T10:53:01.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T10:53:01.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T10:53:01.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T10:53:01.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T10:52:52', tmtdew=34.05, humidity=9.59, cloud=0.0, wind=19.8, temperature=25.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T08:52:42.384', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T10:53:01.093 [DEBUG] [Thread-126371] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:53:01.188 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T10:53:01.200 [DEBUG] [Thread-126374] [transport.py] [_log()] starting thread (client mode): 0xb6bb2260
2025-12-31T10:53:01.200 [DEBUG] [Thread-126374] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:53:01.215 [DEBUG] [Thread-126374] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T10:53:01.215 [INFO] [Thread-126374] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T10:53:01.223 [DEBUG] [Thread-126374] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:53:01.223 [DEBUG] [Thread-126374] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T10:53:01.223 [DEBUG] [Thread-126374] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:53:01.223 [DEBUG] [Thread-126374] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:53:01.223 [DEBUG] [Thread-126374] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:53:01.223 [DEBUG] [Thread-126374] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:53:01.224 [DEBUG] [Thread-126374] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:53:01.224 [DEBUG] [Thread-126374] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:53:01.224 [DEBUG] [Thread-126374] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:53:01.224 [DEBUG] [Thread-126374] [transport.py] [_log()] client lang: <none>
2025-12-31T10:53:01.224 [DEBUG] [Thread-126374] [transport.py] [_log()] server lang: <none>
2025-12-31T10:53:01.224 [DEBUG] [Thread-126374] [transport.py] [_log()] kex follows: False
2025-12-31T10:53:01.224 [DEBUG] [Thread-126374] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:53:01.224 [DEBUG] [Thread-126374] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:53:01.224 [DEBUG] [Thread-126374] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:53:01.224 [DEBUG] [Thread-126374] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:53:01.224 [DEBUG] [Thread-126374] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:53:01.224 [DEBUG] [Thread-126374] [transport.py] [_log()] Compression: none
2025-12-31T10:53:01.224 [DEBUG] [Thread-126374] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:53:01.281 [DEBUG] [Thread-126374] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:53:01.282 [DEBUG] [Thread-126374] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:53:01.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T10:53:01.283 [DEBUG] [Thread-126374] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T10:53:01.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:53:01.338 [DEBUG] [Thread-126374] [transport.py] [_log()] userauth is OK
2025-12-31T10:53:01.339 [DEBUG] [Thread-126374] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:53:01.339 [DEBUG] [Thread-126374] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:53:01.339 [DEBUG] [Thread-126374] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T10:53:01.339 [DEBUG] [Thread-126374] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:53:01.358 [INFO] [Thread-126374] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:53:01.358 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T10:53:01.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:53:02.232 [DEBUG] [Thread-126374] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:53:02.233 [DEBUG] [Thread-126374] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:53:02.281 [DEBUG] [Thread-126374] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:53:02.281 [DEBUG] [Thread-126374] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:53:02.291 [DEBUG] [Thread-126374] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:53:02.300 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:53:02.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T10:53:02.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T10:53:02.319 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:53:02.319 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:53:02.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:53:02.328 [DEBUG] [Thread-126374] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:53:07.764 [DEBUG] [Thread-126376 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:53:11.029 [DEBUG] [Thread-126377 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:53:26.083 [DEBUG] [Thread-126378 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:53:28.747 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:53:28.748 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:53:32.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T10:53:32.350 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T10:53:32.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T10:53:33.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 10, 53, 24), 34.16, 9.5, 0.0, 19.6, 24.99, 0, 0, 0, 2, 0, 0),)
2025-12-31T10:53:33.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 10:53:24
2025-12-31T10:53:33.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T10:53:33.371 [DEBUG] [Thread-126379] [transport.py] [_log()] starting thread (client mode): 0xb6bb25f0
2025-12-31T10:53:33.371 [DEBUG] [Thread-126379] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:53:33.381 [DEBUG] [Thread-126379] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T10:53:33.381 [INFO] [Thread-126379] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T10:53:33.382 [DEBUG] [Thread-126379] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:53:33.382 [DEBUG] [Thread-126379] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T10:53:33.382 [DEBUG] [Thread-126379] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:53:33.383 [DEBUG] [Thread-126379] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:53:33.383 [DEBUG] [Thread-126379] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:53:33.383 [DEBUG] [Thread-126379] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:53:33.383 [DEBUG] [Thread-126379] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:53:33.383 [DEBUG] [Thread-126379] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:53:33.383 [DEBUG] [Thread-126379] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:53:33.383 [DEBUG] [Thread-126379] [transport.py] [_log()] client lang: <none>
2025-12-31T10:53:33.383 [DEBUG] [Thread-126379] [transport.py] [_log()] server lang: <none>
2025-12-31T10:53:33.383 [DEBUG] [Thread-126379] [transport.py] [_log()] kex follows: False
2025-12-31T10:53:33.383 [DEBUG] [Thread-126379] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:53:33.383 [DEBUG] [Thread-126379] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:53:33.383 [DEBUG] [Thread-126379] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:53:33.383 [DEBUG] [Thread-126379] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:53:33.383 [DEBUG] [Thread-126379] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:53:33.383 [DEBUG] [Thread-126379] [transport.py] [_log()] Compression: none
2025-12-31T10:53:33.383 [DEBUG] [Thread-126379] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:53:33.390 [DEBUG] [Thread-126379] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:53:33.390 [DEBUG] [Thread-126379] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:53:33.391 [DEBUG] [Thread-126379] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T10:53:33.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T10:53:33.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:53:33.391 [DEBUG] [Thread-126379] [transport.py] [_log()] userauth is OK
2025-12-31T10:53:33.392 [DEBUG] [Thread-126379] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:53:33.392 [DEBUG] [Thread-126379] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:53:33.392 [DEBUG] [Thread-126379] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T10:53:33.392 [DEBUG] [Thread-126379] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:53:33.406 [INFO] [Thread-126379] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:53:33.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:53:34.103 [DEBUG] [Thread-126379] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:53:34.103 [DEBUG] [Thread-126379] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:53:34.103 [DEBUG] [Thread-126379] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T10:53:34.144 [DEBUG] [Thread-126379] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:53:34.144 [DEBUG] [Thread-126379] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:53:34.146 [DEBUG] [Thread-126379] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:53:34.160 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:53:34.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T10:53:34.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T10:53:34.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T10:53:34.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:53:34.167 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T10:53:34.167 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:53:34.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:53:34.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T10:53:34.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.370282 -999.00  +24.70  14.46     14   -3.70 1 1 1 1 1   888    0 30.33 106.69 ----- 18.6 14.5 276.2 24.8 31.1 -27.8 30.6 -25.9 29.2 -23.8 29.7 -25.2
2025-12-31T10:53:34.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T10:53:34.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T10:53:34.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.370282
2025-12-31T10:53:34.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T10:53:34.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T10:53:34.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T10:53:34.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T10:53:34.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T10:53:34.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T10:53:24', tmtdew=34.16, humidity=9.5, cloud=0.0, wind=19.6, temperature=24.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T08:53:12.365', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T10:53:34.168 [DEBUG] [Thread-126379] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:53:34.242 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T10:53:34.253 [DEBUG] [Thread-126382] [transport.py] [_log()] starting thread (client mode): 0xb6bb1bd0
2025-12-31T10:53:34.253 [DEBUG] [Thread-126382] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:53:34.268 [DEBUG] [Thread-126382] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T10:53:34.268 [INFO] [Thread-126382] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T10:53:34.275 [DEBUG] [Thread-126382] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:53:34.275 [DEBUG] [Thread-126382] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T10:53:34.275 [DEBUG] [Thread-126382] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:53:34.275 [DEBUG] [Thread-126382] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:53:34.275 [DEBUG] [Thread-126382] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:53:34.275 [DEBUG] [Thread-126382] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:53:34.275 [DEBUG] [Thread-126382] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:53:34.276 [DEBUG] [Thread-126382] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:53:34.276 [DEBUG] [Thread-126382] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:53:34.276 [DEBUG] [Thread-126382] [transport.py] [_log()] client lang: <none>
2025-12-31T10:53:34.276 [DEBUG] [Thread-126382] [transport.py] [_log()] server lang: <none>
2025-12-31T10:53:34.276 [DEBUG] [Thread-126382] [transport.py] [_log()] kex follows: False
2025-12-31T10:53:34.276 [DEBUG] [Thread-126382] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:53:34.276 [DEBUG] [Thread-126382] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:53:34.276 [DEBUG] [Thread-126382] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:53:34.276 [DEBUG] [Thread-126382] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:53:34.276 [DEBUG] [Thread-126382] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:53:34.276 [DEBUG] [Thread-126382] [transport.py] [_log()] Compression: none
2025-12-31T10:53:34.276 [DEBUG] [Thread-126382] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:53:34.333 [DEBUG] [Thread-126382] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:53:34.333 [DEBUG] [Thread-126382] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:53:34.333 [DEBUG] [Thread-126382] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T10:53:34.333 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T10:53:34.333 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:53:34.391 [DEBUG] [Thread-126382] [transport.py] [_log()] userauth is OK
2025-12-31T10:53:34.391 [DEBUG] [Thread-126382] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:53:34.391 [DEBUG] [Thread-126382] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:53:34.391 [DEBUG] [Thread-126382] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T10:53:34.391 [DEBUG] [Thread-126382] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:53:34.408 [INFO] [Thread-126382] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:53:34.408 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T10:53:34.409 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:53:35.265 [DEBUG] [Thread-126382] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:53:35.265 [DEBUG] [Thread-126382] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:53:35.315 [DEBUG] [Thread-126382] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:53:35.315 [DEBUG] [Thread-126382] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:53:35.324 [DEBUG] [Thread-126382] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:53:35.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:53:35.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T10:53:35.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T10:53:35.348 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:53:35.348 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:53:35.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:53:35.357 [DEBUG] [Thread-126382] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:53:41.113 [DEBUG] [Thread-126384 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:53:56.165 [DEBUG] [Thread-126385 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:54:05.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T10:54:05.360 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T10:54:05.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T10:54:06.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 10, 53, 56), 34.92, 9.25, 0.0, 27.0, 25.3, 0, 0, 0, 2, 0, 0),)
2025-12-31T10:54:06.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 10:53:56
2025-12-31T10:54:06.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T10:54:06.347 [DEBUG] [Thread-126386] [transport.py] [_log()] starting thread (client mode): 0xb6bb19f0
2025-12-31T10:54:06.347 [DEBUG] [Thread-126386] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:54:06.367 [DEBUG] [Thread-126386] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T10:54:06.367 [INFO] [Thread-126386] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T10:54:06.370 [DEBUG] [Thread-126386] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:54:06.370 [DEBUG] [Thread-126386] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T10:54:06.370 [DEBUG] [Thread-126386] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:54:06.370 [DEBUG] [Thread-126386] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:54:06.370 [DEBUG] [Thread-126386] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:54:06.370 [DEBUG] [Thread-126386] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:54:06.370 [DEBUG] [Thread-126386] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:54:06.370 [DEBUG] [Thread-126386] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:54:06.370 [DEBUG] [Thread-126386] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:54:06.370 [DEBUG] [Thread-126386] [transport.py] [_log()] client lang: <none>
2025-12-31T10:54:06.370 [DEBUG] [Thread-126386] [transport.py] [_log()] server lang: <none>
2025-12-31T10:54:06.370 [DEBUG] [Thread-126386] [transport.py] [_log()] kex follows: False
2025-12-31T10:54:06.370 [DEBUG] [Thread-126386] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:54:06.370 [DEBUG] [Thread-126386] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:54:06.370 [DEBUG] [Thread-126386] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:54:06.370 [DEBUG] [Thread-126386] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:54:06.370 [DEBUG] [Thread-126386] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:54:06.370 [DEBUG] [Thread-126386] [transport.py] [_log()] Compression: none
2025-12-31T10:54:06.370 [DEBUG] [Thread-126386] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:54:06.388 [DEBUG] [Thread-126386] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:54:06.389 [DEBUG] [Thread-126386] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:54:06.389 [DEBUG] [Thread-126386] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T10:54:06.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T10:54:06.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:54:06.392 [DEBUG] [Thread-126386] [transport.py] [_log()] userauth is OK
2025-12-31T10:54:06.392 [DEBUG] [Thread-126386] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:54:06.392 [DEBUG] [Thread-126386] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:54:06.392 [DEBUG] [Thread-126386] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T10:54:06.392 [DEBUG] [Thread-126386] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:54:06.418 [INFO] [Thread-126386] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:54:06.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:54:07.032 [DEBUG] [Thread-126386] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:54:07.032 [DEBUG] [Thread-126386] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:54:07.032 [DEBUG] [Thread-126386] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T10:54:07.073 [DEBUG] [Thread-126386] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:54:07.073 [DEBUG] [Thread-126386] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:54:07.075 [DEBUG] [Thread-126386] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:54:07.088 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:54:07.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T10:54:07.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T10:54:07.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T10:54:07.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:54:07.100 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T10:54:07.100 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:54:07.100 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:54:07.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T10:54:07.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.370630 -999.00  +24.90  18.46     14   -3.60 1 1 1 1 1   888    0 30.01 97.53 ----- 21.2 18.5 253.0 27.6 31.1 -28.0 30.5 -26.5 29.1 -23.0 29.7 -24.3
2025-12-31T10:54:07.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T10:54:07.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T10:54:07.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.370630
2025-12-31T10:54:07.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T10:54:07.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T10:54:07.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T10:54:07.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T10:54:07.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T10:54:07.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T10:53:56', tmtdew=34.92, humidity=9.25, cloud=0.0, wind=27.0, temperature=25.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T08:53:42.432', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T10:54:07.103 [DEBUG] [Thread-126386] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:54:07.187 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T10:54:07.199 [DEBUG] [Thread-126389] [transport.py] [_log()] starting thread (client mode): 0xb6bb3b50
2025-12-31T10:54:07.199 [DEBUG] [Thread-126389] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:54:07.213 [DEBUG] [Thread-126389] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T10:54:07.214 [INFO] [Thread-126389] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T10:54:07.221 [DEBUG] [Thread-126389] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:54:07.222 [DEBUG] [Thread-126389] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T10:54:07.222 [DEBUG] [Thread-126389] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:54:07.222 [DEBUG] [Thread-126389] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:54:07.222 [DEBUG] [Thread-126389] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:54:07.222 [DEBUG] [Thread-126389] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:54:07.223 [DEBUG] [Thread-126389] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:54:07.223 [DEBUG] [Thread-126389] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:54:07.223 [DEBUG] [Thread-126389] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:54:07.223 [DEBUG] [Thread-126389] [transport.py] [_log()] client lang: <none>
2025-12-31T10:54:07.223 [DEBUG] [Thread-126389] [transport.py] [_log()] server lang: <none>
2025-12-31T10:54:07.223 [DEBUG] [Thread-126389] [transport.py] [_log()] kex follows: False
2025-12-31T10:54:07.223 [DEBUG] [Thread-126389] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:54:07.223 [DEBUG] [Thread-126389] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:54:07.223 [DEBUG] [Thread-126389] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:54:07.223 [DEBUG] [Thread-126389] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:54:07.223 [DEBUG] [Thread-126389] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:54:07.223 [DEBUG] [Thread-126389] [transport.py] [_log()] Compression: none
2025-12-31T10:54:07.224 [DEBUG] [Thread-126389] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:54:07.282 [DEBUG] [Thread-126389] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:54:07.283 [DEBUG] [Thread-126389] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:54:07.283 [DEBUG] [Thread-126389] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T10:54:07.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T10:54:07.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:54:07.339 [DEBUG] [Thread-126389] [transport.py] [_log()] userauth is OK
2025-12-31T10:54:07.339 [DEBUG] [Thread-126389] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:54:07.339 [DEBUG] [Thread-126389] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:54:07.339 [DEBUG] [Thread-126389] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T10:54:07.339 [DEBUG] [Thread-126389] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:54:07.358 [INFO] [Thread-126389] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:54:07.359 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T10:54:07.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:54:07.827 [DEBUG] [Thread-126391 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:54:08.259 [DEBUG] [Thread-126389] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:54:08.259 [DEBUG] [Thread-126389] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:54:08.307 [DEBUG] [Thread-126389] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:54:08.307 [DEBUG] [Thread-126389] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:54:08.316 [DEBUG] [Thread-126389] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:54:08.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:54:08.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T10:54:08.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T10:54:08.344 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:54:08.344 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:54:08.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:54:08.353 [DEBUG] [Thread-126389] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:54:11.199 [DEBUG] [Thread-126392 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:54:26.248 [DEBUG] [Thread-126393 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:54:28.888 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:54:28.889 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:54:38.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T10:54:38.353 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T10:54:38.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T10:54:39.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 10, 54, 28), 35.12, 9.14, 0.0, 24.17, 25.37, 0, 0, 0, 2, 0, 0),)
2025-12-31T10:54:39.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 10:54:28
2025-12-31T10:54:39.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T10:54:39.328 [DEBUG] [Thread-126394] [transport.py] [_log()] starting thread (client mode): 0xb6bb2080
2025-12-31T10:54:39.328 [DEBUG] [Thread-126394] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:54:39.350 [DEBUG] [Thread-126394] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T10:54:39.350 [INFO] [Thread-126394] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T10:54:39.353 [DEBUG] [Thread-126394] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:54:39.353 [DEBUG] [Thread-126394] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T10:54:39.353 [DEBUG] [Thread-126394] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:54:39.353 [DEBUG] [Thread-126394] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:54:39.353 [DEBUG] [Thread-126394] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:54:39.353 [DEBUG] [Thread-126394] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:54:39.353 [DEBUG] [Thread-126394] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:54:39.353 [DEBUG] [Thread-126394] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:54:39.353 [DEBUG] [Thread-126394] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:54:39.353 [DEBUG] [Thread-126394] [transport.py] [_log()] client lang: <none>
2025-12-31T10:54:39.354 [DEBUG] [Thread-126394] [transport.py] [_log()] server lang: <none>
2025-12-31T10:54:39.354 [DEBUG] [Thread-126394] [transport.py] [_log()] kex follows: False
2025-12-31T10:54:39.354 [DEBUG] [Thread-126394] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:54:39.354 [DEBUG] [Thread-126394] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:54:39.354 [DEBUG] [Thread-126394] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:54:39.354 [DEBUG] [Thread-126394] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:54:39.354 [DEBUG] [Thread-126394] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:54:39.354 [DEBUG] [Thread-126394] [transport.py] [_log()] Compression: none
2025-12-31T10:54:39.354 [DEBUG] [Thread-126394] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:54:39.372 [DEBUG] [Thread-126394] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:54:39.373 [DEBUG] [Thread-126394] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:54:39.373 [DEBUG] [Thread-126394] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T10:54:39.374 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T10:54:39.374 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:54:39.375 [DEBUG] [Thread-126394] [transport.py] [_log()] userauth is OK
2025-12-31T10:54:39.375 [DEBUG] [Thread-126394] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:54:39.375 [DEBUG] [Thread-126394] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:54:39.375 [DEBUG] [Thread-126394] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T10:54:39.375 [DEBUG] [Thread-126394] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:54:39.399 [INFO] [Thread-126394] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:54:39.399 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:54:39.998 [DEBUG] [Thread-126394] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:54:39.999 [DEBUG] [Thread-126394] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:54:39.999 [DEBUG] [Thread-126394] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T10:54:40.041 [DEBUG] [Thread-126394] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:54:40.041 [DEBUG] [Thread-126394] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:54:40.044 [DEBUG] [Thread-126394] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:54:40.053 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:54:40.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T10:54:40.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T10:54:40.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T10:54:40.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:54:40.065 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T10:54:40.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:54:40.066 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:54:40.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T10:54:40.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.370977 -999.00  +24.90  15.56     14   -3.60 1 1 1 1 1   888    0 30.32 98.77 ----- 17.7 15.6 260.0 27.1 30.9 -26.7 30.4 -25.3 29.1 -22.3 29.6 -23.7
2025-12-31T10:54:40.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T10:54:40.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T10:54:40.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.370977
2025-12-31T10:54:40.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T10:54:40.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T10:54:40.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T10:54:40.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T10:54:40.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T10:54:40.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T10:54:28', tmtdew=35.12, humidity=9.14, cloud=0.0, wind=24.17, temperature=25.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T08:54:12.413', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T10:54:40.068 [DEBUG] [Thread-126394] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:54:40.151 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T10:54:40.163 [DEBUG] [Thread-126397] [transport.py] [_log()] starting thread (client mode): 0xb6bb3e80
2025-12-31T10:54:40.163 [DEBUG] [Thread-126397] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:54:40.180 [DEBUG] [Thread-126397] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T10:54:40.181 [INFO] [Thread-126397] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T10:54:40.188 [DEBUG] [Thread-126397] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:54:40.188 [DEBUG] [Thread-126397] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T10:54:40.188 [DEBUG] [Thread-126397] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:54:40.188 [DEBUG] [Thread-126397] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:54:40.188 [DEBUG] [Thread-126397] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:54:40.188 [DEBUG] [Thread-126397] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:54:40.188 [DEBUG] [Thread-126397] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:54:40.188 [DEBUG] [Thread-126397] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:54:40.188 [DEBUG] [Thread-126397] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:54:40.188 [DEBUG] [Thread-126397] [transport.py] [_log()] client lang: <none>
2025-12-31T10:54:40.188 [DEBUG] [Thread-126397] [transport.py] [_log()] server lang: <none>
2025-12-31T10:54:40.188 [DEBUG] [Thread-126397] [transport.py] [_log()] kex follows: False
2025-12-31T10:54:40.188 [DEBUG] [Thread-126397] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:54:40.188 [DEBUG] [Thread-126397] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:54:40.188 [DEBUG] [Thread-126397] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:54:40.188 [DEBUG] [Thread-126397] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:54:40.188 [DEBUG] [Thread-126397] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:54:40.188 [DEBUG] [Thread-126397] [transport.py] [_log()] Compression: none
2025-12-31T10:54:40.188 [DEBUG] [Thread-126397] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:54:40.246 [DEBUG] [Thread-126397] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:54:40.247 [DEBUG] [Thread-126397] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:54:40.248 [DEBUG] [Thread-126397] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T10:54:40.248 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T10:54:40.248 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:54:40.303 [DEBUG] [Thread-126397] [transport.py] [_log()] userauth is OK
2025-12-31T10:54:40.303 [DEBUG] [Thread-126397] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:54:40.303 [DEBUG] [Thread-126397] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:54:40.303 [DEBUG] [Thread-126397] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T10:54:40.303 [DEBUG] [Thread-126397] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:54:40.322 [INFO] [Thread-126397] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:54:40.323 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T10:54:40.323 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:54:41.164 [DEBUG] [Thread-126397] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:54:41.165 [DEBUG] [Thread-126397] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:54:41.212 [DEBUG] [Thread-126397] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:54:41.212 [DEBUG] [Thread-126397] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:54:41.221 [DEBUG] [Thread-126397] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:54:41.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:54:41.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-12-31T10:54:41.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T10:54:41.249 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:54:41.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:54:41.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:54:41.258 [DEBUG] [Thread-126397] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:54:41.280 [DEBUG] [Thread-126399 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:54:56.329 [DEBUG] [Thread-126400 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:55:07.876 [DEBUG] [Thread-126401 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:55:11.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T10:55:11.281 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T10:55:11.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T10:55:11.365 [DEBUG] [Thread-126402 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:55:11.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 10, 55), 34.88, 9.14, 0.0, 23.15, 25.45, 0, 0, 0, 2, 0, 0),)
2025-12-31T10:55:11.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 10:55:00
2025-12-31T10:55:12.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T10:55:12.268 [DEBUG] [Thread-126403] [transport.py] [_log()] starting thread (client mode): 0xb6bb3220
2025-12-31T10:55:12.268 [DEBUG] [Thread-126403] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:55:12.288 [DEBUG] [Thread-126403] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T10:55:12.288 [INFO] [Thread-126403] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T10:55:12.291 [DEBUG] [Thread-126403] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:55:12.291 [DEBUG] [Thread-126403] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T10:55:12.291 [DEBUG] [Thread-126403] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:55:12.291 [DEBUG] [Thread-126403] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:55:12.291 [DEBUG] [Thread-126403] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:55:12.291 [DEBUG] [Thread-126403] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:55:12.291 [DEBUG] [Thread-126403] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:55:12.291 [DEBUG] [Thread-126403] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:55:12.291 [DEBUG] [Thread-126403] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:55:12.291 [DEBUG] [Thread-126403] [transport.py] [_log()] client lang: <none>
2025-12-31T10:55:12.291 [DEBUG] [Thread-126403] [transport.py] [_log()] server lang: <none>
2025-12-31T10:55:12.291 [DEBUG] [Thread-126403] [transport.py] [_log()] kex follows: False
2025-12-31T10:55:12.291 [DEBUG] [Thread-126403] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:55:12.291 [DEBUG] [Thread-126403] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:55:12.292 [DEBUG] [Thread-126403] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:55:12.292 [DEBUG] [Thread-126403] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:55:12.292 [DEBUG] [Thread-126403] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:55:12.292 [DEBUG] [Thread-126403] [transport.py] [_log()] Compression: none
2025-12-31T10:55:12.292 [DEBUG] [Thread-126403] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:55:12.309 [DEBUG] [Thread-126403] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:55:12.310 [DEBUG] [Thread-126403] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:55:12.310 [DEBUG] [Thread-126403] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T10:55:12.311 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T10:55:12.311 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:55:12.312 [DEBUG] [Thread-126403] [transport.py] [_log()] userauth is OK
2025-12-31T10:55:12.312 [DEBUG] [Thread-126403] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:55:12.313 [DEBUG] [Thread-126403] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:55:12.313 [DEBUG] [Thread-126403] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T10:55:12.313 [DEBUG] [Thread-126403] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:55:12.337 [INFO] [Thread-126403] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:55:12.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:55:13.006 [DEBUG] [Thread-126403] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:55:13.007 [DEBUG] [Thread-126403] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:55:13.007 [DEBUG] [Thread-126403] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T10:55:13.048 [DEBUG] [Thread-126403] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:55:13.048 [DEBUG] [Thread-126403] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:55:13.051 [DEBUG] [Thread-126403] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:55:13.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:55:13.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T10:55:13.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T10:55:13.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T10:55:13.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:55:13.074 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T10:55:13.074 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:55:13.074 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:55:13.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T10:55:13.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.371324 -999.00  +25.00  26.32     14   -4.20 1 1 1 1 1   888    0 30.82 101.12 ----- 31.7 26.3 298.3 32.6 30.7 -28.0 30.2 -26.6 28.8 -25.3 29.5 -24.0
2025-12-31T10:55:13.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T10:55:13.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T10:55:13.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.371324
2025-12-31T10:55:13.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T10:55:13.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T10:55:13.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T10:55:13.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T10:55:13.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T10:55:13.076 [DEBUG] [Thread-126403] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:55:13.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T10:55:00', tmtdew=34.88, humidity=9.14, cloud=0.0, wind=23.15, temperature=25.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T08:54:42.394', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T10:55:13.160 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T10:55:13.172 [DEBUG] [Thread-126406] [transport.py] [_log()] starting thread (client mode): 0xb6bb3ee0
2025-12-31T10:55:13.172 [DEBUG] [Thread-126406] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:55:13.187 [DEBUG] [Thread-126406] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T10:55:13.187 [INFO] [Thread-126406] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T10:55:13.195 [DEBUG] [Thread-126406] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:55:13.195 [DEBUG] [Thread-126406] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T10:55:13.195 [DEBUG] [Thread-126406] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:55:13.195 [DEBUG] [Thread-126406] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:55:13.195 [DEBUG] [Thread-126406] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:55:13.195 [DEBUG] [Thread-126406] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:55:13.195 [DEBUG] [Thread-126406] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:55:13.195 [DEBUG] [Thread-126406] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:55:13.195 [DEBUG] [Thread-126406] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:55:13.195 [DEBUG] [Thread-126406] [transport.py] [_log()] client lang: <none>
2025-12-31T10:55:13.196 [DEBUG] [Thread-126406] [transport.py] [_log()] server lang: <none>
2025-12-31T10:55:13.196 [DEBUG] [Thread-126406] [transport.py] [_log()] kex follows: False
2025-12-31T10:55:13.196 [DEBUG] [Thread-126406] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:55:13.196 [DEBUG] [Thread-126406] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:55:13.196 [DEBUG] [Thread-126406] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:55:13.196 [DEBUG] [Thread-126406] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:55:13.196 [DEBUG] [Thread-126406] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:55:13.196 [DEBUG] [Thread-126406] [transport.py] [_log()] Compression: none
2025-12-31T10:55:13.196 [DEBUG] [Thread-126406] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:55:13.254 [DEBUG] [Thread-126406] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:55:13.255 [DEBUG] [Thread-126406] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:55:13.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T10:55:13.256 [DEBUG] [Thread-126406] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T10:55:13.257 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:55:13.311 [DEBUG] [Thread-126406] [transport.py] [_log()] userauth is OK
2025-12-31T10:55:13.311 [DEBUG] [Thread-126406] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:55:13.311 [DEBUG] [Thread-126406] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:55:13.311 [DEBUG] [Thread-126406] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T10:55:13.311 [DEBUG] [Thread-126406] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:55:13.331 [INFO] [Thread-126406] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:55:13.331 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T10:55:13.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:55:14.139 [DEBUG] [Thread-126406] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:55:14.139 [DEBUG] [Thread-126406] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:55:14.187 [DEBUG] [Thread-126406] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:55:14.187 [DEBUG] [Thread-126406] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:55:14.200 [DEBUG] [Thread-126406] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:55:14.209 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:55:14.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T10:55:14.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T10:55:14.236 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:55:14.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:55:14.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:55:14.248 [DEBUG] [Thread-126406] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:55:26.398 [DEBUG] [Thread-126408 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:55:29.028 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:55:29.028 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:55:41.446 [DEBUG] [Thread-126409 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:55:44.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T10:55:44.268 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T10:55:44.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T10:55:44.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 10, 55, 32), 35.03, 9.02, 0.0, 21.21, 25.37, 0, 0, 0, 2, 0, 0),)
2025-12-31T10:55:44.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 10:55:32
2025-12-31T10:55:45.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T10:55:45.247 [DEBUG] [Thread-126410] [transport.py] [_log()] starting thread (client mode): 0xb6bb2b00
2025-12-31T10:55:45.247 [DEBUG] [Thread-126410] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:55:45.271 [DEBUG] [Thread-126410] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T10:55:45.271 [INFO] [Thread-126410] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T10:55:45.273 [DEBUG] [Thread-126410] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:55:45.273 [DEBUG] [Thread-126410] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T10:55:45.274 [DEBUG] [Thread-126410] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:55:45.274 [DEBUG] [Thread-126410] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:55:45.274 [DEBUG] [Thread-126410] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:55:45.274 [DEBUG] [Thread-126410] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:55:45.274 [DEBUG] [Thread-126410] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:55:45.274 [DEBUG] [Thread-126410] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:55:45.274 [DEBUG] [Thread-126410] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:55:45.274 [DEBUG] [Thread-126410] [transport.py] [_log()] client lang: <none>
2025-12-31T10:55:45.274 [DEBUG] [Thread-126410] [transport.py] [_log()] server lang: <none>
2025-12-31T10:55:45.274 [DEBUG] [Thread-126410] [transport.py] [_log()] kex follows: False
2025-12-31T10:55:45.274 [DEBUG] [Thread-126410] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:55:45.275 [DEBUG] [Thread-126410] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:55:45.275 [DEBUG] [Thread-126410] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:55:45.275 [DEBUG] [Thread-126410] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:55:45.275 [DEBUG] [Thread-126410] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:55:45.275 [DEBUG] [Thread-126410] [transport.py] [_log()] Compression: none
2025-12-31T10:55:45.275 [DEBUG] [Thread-126410] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:55:45.292 [DEBUG] [Thread-126410] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:55:45.293 [DEBUG] [Thread-126410] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:55:45.294 [DEBUG] [Thread-126410] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T10:55:45.294 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T10:55:45.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:55:45.337 [DEBUG] [Thread-126410] [transport.py] [_log()] userauth is OK
2025-12-31T10:55:45.337 [DEBUG] [Thread-126410] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:55:45.338 [DEBUG] [Thread-126410] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:55:45.338 [DEBUG] [Thread-126410] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T10:55:45.338 [DEBUG] [Thread-126410] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:55:45.358 [INFO] [Thread-126410] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:55:45.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:55:45.953 [DEBUG] [Thread-126410] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:55:45.953 [DEBUG] [Thread-126410] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:55:45.953 [DEBUG] [Thread-126410] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T10:55:45.994 [DEBUG] [Thread-126410] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:55:45.994 [DEBUG] [Thread-126410] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:55:45.998 [DEBUG] [Thread-126410] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:55:46.010 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:55:46.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T10:55:46.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T10:55:46.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T10:55:46.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:55:46.023 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T10:55:46.023 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:55:46.024 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:55:46.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T10:55:46.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.372019 -999.00  +24.60  27.71     14   -4.30 1 1 1 1 1   888    0 30.97 108.87 ----- 23.9 27.7 314.6 29.7 30.5 -25.1 30.0 -24.5 28.8 -21.6 29.4 -22.9
2025-12-31T10:55:46.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T10:55:46.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T10:55:46.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.372019
2025-12-31T10:55:46.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T10:55:46.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T10:55:46.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T10:55:46.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T10:55:46.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T10:55:46.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T10:55:32', tmtdew=35.03, humidity=9.02, cloud=0.0, wind=21.21, temperature=25.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T08:55:42.442', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T10:55:46.027 [DEBUG] [Thread-126410] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:55:46.111 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T10:55:46.123 [DEBUG] [Thread-126413] [transport.py] [_log()] starting thread (client mode): 0xb6bb2410
2025-12-31T10:55:46.123 [DEBUG] [Thread-126413] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:55:46.137 [DEBUG] [Thread-126413] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T10:55:46.137 [INFO] [Thread-126413] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T10:55:46.145 [DEBUG] [Thread-126413] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:55:46.145 [DEBUG] [Thread-126413] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T10:55:46.145 [DEBUG] [Thread-126413] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:55:46.145 [DEBUG] [Thread-126413] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:55:46.145 [DEBUG] [Thread-126413] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:55:46.145 [DEBUG] [Thread-126413] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:55:46.145 [DEBUG] [Thread-126413] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:55:46.146 [DEBUG] [Thread-126413] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:55:46.146 [DEBUG] [Thread-126413] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:55:46.146 [DEBUG] [Thread-126413] [transport.py] [_log()] client lang: <none>
2025-12-31T10:55:46.146 [DEBUG] [Thread-126413] [transport.py] [_log()] server lang: <none>
2025-12-31T10:55:46.146 [DEBUG] [Thread-126413] [transport.py] [_log()] kex follows: False
2025-12-31T10:55:46.146 [DEBUG] [Thread-126413] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:55:46.146 [DEBUG] [Thread-126413] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:55:46.146 [DEBUG] [Thread-126413] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:55:46.146 [DEBUG] [Thread-126413] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:55:46.146 [DEBUG] [Thread-126413] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:55:46.146 [DEBUG] [Thread-126413] [transport.py] [_log()] Compression: none
2025-12-31T10:55:46.146 [DEBUG] [Thread-126413] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:55:46.202 [DEBUG] [Thread-126413] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:55:46.203 [DEBUG] [Thread-126413] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:55:46.203 [DEBUG] [Thread-126413] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T10:55:46.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T10:55:46.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:55:46.258 [DEBUG] [Thread-126413] [transport.py] [_log()] userauth is OK
2025-12-31T10:55:46.259 [DEBUG] [Thread-126413] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:55:46.259 [DEBUG] [Thread-126413] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:55:46.259 [DEBUG] [Thread-126413] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T10:55:46.259 [DEBUG] [Thread-126413] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:55:46.282 [INFO] [Thread-126413] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:55:46.283 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T10:55:46.283 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:55:47.120 [DEBUG] [Thread-126413] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:55:47.120 [DEBUG] [Thread-126413] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:55:47.168 [DEBUG] [Thread-126413] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:55:47.168 [DEBUG] [Thread-126413] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:55:47.177 [DEBUG] [Thread-126413] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:55:47.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:55:47.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T10:55:47.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T10:55:47.206 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:55:47.206 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:55:47.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:55:47.215 [DEBUG] [Thread-126413] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:55:56.482 [DEBUG] [Thread-126415 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:56:07.923 [DEBUG] [Thread-126416 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:56:11.531 [DEBUG] [Thread-126417 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:56:17.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T10:56:17.238 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T10:56:17.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T10:56:17.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 10, 56, 4), 34.95, 9.07, 0.0, 25.67, 25.35, 0, 0, 0, 2, 0, 0),)
2025-12-31T10:56:17.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 10:56:04
2025-12-31T10:56:18.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T10:56:18.223 [DEBUG] [Thread-126418] [transport.py] [_log()] starting thread (client mode): 0xb6b202e0
2025-12-31T10:56:18.223 [DEBUG] [Thread-126418] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:56:18.240 [DEBUG] [Thread-126418] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T10:56:18.241 [INFO] [Thread-126418] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T10:56:18.244 [DEBUG] [Thread-126418] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:56:18.244 [DEBUG] [Thread-126418] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T10:56:18.244 [DEBUG] [Thread-126418] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:56:18.244 [DEBUG] [Thread-126418] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:56:18.244 [DEBUG] [Thread-126418] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:56:18.244 [DEBUG] [Thread-126418] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:56:18.244 [DEBUG] [Thread-126418] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:56:18.244 [DEBUG] [Thread-126418] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:56:18.244 [DEBUG] [Thread-126418] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:56:18.244 [DEBUG] [Thread-126418] [transport.py] [_log()] client lang: <none>
2025-12-31T10:56:18.244 [DEBUG] [Thread-126418] [transport.py] [_log()] server lang: <none>
2025-12-31T10:56:18.244 [DEBUG] [Thread-126418] [transport.py] [_log()] kex follows: False
2025-12-31T10:56:18.244 [DEBUG] [Thread-126418] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:56:18.244 [DEBUG] [Thread-126418] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:56:18.244 [DEBUG] [Thread-126418] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:56:18.244 [DEBUG] [Thread-126418] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:56:18.244 [DEBUG] [Thread-126418] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:56:18.245 [DEBUG] [Thread-126418] [transport.py] [_log()] Compression: none
2025-12-31T10:56:18.245 [DEBUG] [Thread-126418] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:56:18.257 [DEBUG] [Thread-126418] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:56:18.258 [DEBUG] [Thread-126418] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:56:18.258 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T10:56:18.259 [DEBUG] [Thread-126418] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T10:56:18.260 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:56:18.262 [DEBUG] [Thread-126418] [transport.py] [_log()] userauth is OK
2025-12-31T10:56:18.262 [DEBUG] [Thread-126418] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:56:18.262 [DEBUG] [Thread-126418] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:56:18.262 [DEBUG] [Thread-126418] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T10:56:18.262 [DEBUG] [Thread-126418] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:56:18.276 [INFO] [Thread-126418] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:56:18.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:56:18.871 [DEBUG] [Thread-126418] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:56:18.871 [DEBUG] [Thread-126418] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:56:18.872 [DEBUG] [Thread-126418] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T10:56:18.912 [DEBUG] [Thread-126418] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:56:18.913 [DEBUG] [Thread-126418] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:56:18.915 [DEBUG] [Thread-126418] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:56:18.921 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:56:18.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T10:56:18.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T10:56:18.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T10:56:18.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:56:18.937 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T10:56:18.937 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:56:18.937 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:56:18.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T10:56:18.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.372366 -999.00  +24.10  13.90     14   -4.60 1 1 1 1 1   888    0 30.85 120.26 ----- 18.9 13.9 315.4 38.2 30.6 -25.0 30.1 -24.9 28.9 -21.5 29.5 -22.7
2025-12-31T10:56:18.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T10:56:18.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T10:56:18.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.372366
2025-12-31T10:56:18.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T10:56:18.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T10:56:18.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T10:56:18.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T10:56:18.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T10:56:18.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T10:56:04', tmtdew=34.95, humidity=9.07, cloud=0.0, wind=25.67, temperature=25.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T08:56:12.422', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T10:56:18.940 [DEBUG] [Thread-126418] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:56:19.023 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T10:56:19.035 [DEBUG] [Thread-126421] [transport.py] [_log()] starting thread (client mode): 0xb6b22b90
2025-12-31T10:56:19.035 [DEBUG] [Thread-126421] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:56:19.050 [DEBUG] [Thread-126421] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T10:56:19.050 [INFO] [Thread-126421] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T10:56:19.058 [DEBUG] [Thread-126421] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:56:19.058 [DEBUG] [Thread-126421] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T10:56:19.058 [DEBUG] [Thread-126421] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:56:19.058 [DEBUG] [Thread-126421] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:56:19.058 [DEBUG] [Thread-126421] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:56:19.058 [DEBUG] [Thread-126421] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:56:19.058 [DEBUG] [Thread-126421] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:56:19.058 [DEBUG] [Thread-126421] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:56:19.058 [DEBUG] [Thread-126421] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:56:19.058 [DEBUG] [Thread-126421] [transport.py] [_log()] client lang: <none>
2025-12-31T10:56:19.058 [DEBUG] [Thread-126421] [transport.py] [_log()] server lang: <none>
2025-12-31T10:56:19.058 [DEBUG] [Thread-126421] [transport.py] [_log()] kex follows: False
2025-12-31T10:56:19.058 [DEBUG] [Thread-126421] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:56:19.058 [DEBUG] [Thread-126421] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:56:19.058 [DEBUG] [Thread-126421] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:56:19.058 [DEBUG] [Thread-126421] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:56:19.058 [DEBUG] [Thread-126421] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:56:19.059 [DEBUG] [Thread-126421] [transport.py] [_log()] Compression: none
2025-12-31T10:56:19.059 [DEBUG] [Thread-126421] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:56:19.114 [DEBUG] [Thread-126421] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:56:19.115 [DEBUG] [Thread-126421] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:56:19.116 [DEBUG] [Thread-126421] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T10:56:19.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T10:56:19.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:56:19.175 [DEBUG] [Thread-126421] [transport.py] [_log()] userauth is OK
2025-12-31T10:56:19.176 [DEBUG] [Thread-126421] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:56:19.176 [DEBUG] [Thread-126421] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:56:19.176 [DEBUG] [Thread-126421] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T10:56:19.176 [DEBUG] [Thread-126421] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:56:19.195 [INFO] [Thread-126421] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:56:19.195 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T10:56:19.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:56:20.017 [DEBUG] [Thread-126421] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:56:20.018 [DEBUG] [Thread-126421] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:56:20.065 [DEBUG] [Thread-126421] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:56:20.066 [DEBUG] [Thread-126421] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:56:20.075 [DEBUG] [Thread-126421] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:56:20.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:56:20.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T10:56:20.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-12-31T10:56:20.102 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:56:20.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:56:20.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:56:20.111 [DEBUG] [Thread-126421] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:56:26.564 [DEBUG] [Thread-126423 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:56:29.167 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:56:29.168 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:56:41.613 [DEBUG] [Thread-126424 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:56:50.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T10:56:50.133 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T10:56:50.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T10:56:50.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 10, 56, 36), 35.35, 9.04, 0.0, 17.7, 25.14, 0, 0, 0, 2, 0, 0),)
2025-12-31T10:56:50.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 10:56:36
2025-12-31T10:56:51.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T10:56:51.154 [DEBUG] [Thread-126425] [transport.py] [_log()] starting thread (client mode): 0xb6b21c60
2025-12-31T10:56:51.154 [DEBUG] [Thread-126425] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:56:51.175 [DEBUG] [Thread-126425] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T10:56:51.175 [INFO] [Thread-126425] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T10:56:51.179 [DEBUG] [Thread-126425] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:56:51.179 [DEBUG] [Thread-126425] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T10:56:51.179 [DEBUG] [Thread-126425] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:56:51.179 [DEBUG] [Thread-126425] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:56:51.179 [DEBUG] [Thread-126425] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:56:51.179 [DEBUG] [Thread-126425] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:56:51.179 [DEBUG] [Thread-126425] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:56:51.179 [DEBUG] [Thread-126425] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:56:51.179 [DEBUG] [Thread-126425] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:56:51.179 [DEBUG] [Thread-126425] [transport.py] [_log()] client lang: <none>
2025-12-31T10:56:51.179 [DEBUG] [Thread-126425] [transport.py] [_log()] server lang: <none>
2025-12-31T10:56:51.179 [DEBUG] [Thread-126425] [transport.py] [_log()] kex follows: False
2025-12-31T10:56:51.179 [DEBUG] [Thread-126425] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:56:51.179 [DEBUG] [Thread-126425] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:56:51.179 [DEBUG] [Thread-126425] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:56:51.179 [DEBUG] [Thread-126425] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:56:51.179 [DEBUG] [Thread-126425] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:56:51.179 [DEBUG] [Thread-126425] [transport.py] [_log()] Compression: none
2025-12-31T10:56:51.179 [DEBUG] [Thread-126425] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:56:51.194 [DEBUG] [Thread-126425] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:56:51.194 [DEBUG] [Thread-126425] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:56:51.195 [DEBUG] [Thread-126425] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T10:56:51.195 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T10:56:51.195 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:56:51.195 [DEBUG] [Thread-126425] [transport.py] [_log()] userauth is OK
2025-12-31T10:56:51.195 [DEBUG] [Thread-126425] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:56:51.195 [DEBUG] [Thread-126425] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:56:51.195 [DEBUG] [Thread-126425] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T10:56:51.195 [DEBUG] [Thread-126425] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:56:51.214 [INFO] [Thread-126425] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:56:51.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:56:51.821 [DEBUG] [Thread-126425] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:56:51.822 [DEBUG] [Thread-126425] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:56:51.822 [DEBUG] [Thread-126425] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T10:56:51.863 [DEBUG] [Thread-126425] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:56:51.863 [DEBUG] [Thread-126425] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:56:51.867 [DEBUG] [Thread-126425] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:56:51.876 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:56:51.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T10:56:51.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T10:56:51.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T10:56:51.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:56:51.891 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T10:56:51.891 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:56:51.891 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:56:51.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T10:56:51.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.372366 -999.00  +24.10  13.90     14   -4.60 1 1 1 1 1   888    0 30.85 120.26 ----- 18.9 13.9 315.4 38.2 30.6 -25.0 30.1 -24.9 28.9 -21.5 29.5 -22.7
2025-12-31T10:56:51.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T10:56:51.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T10:56:51.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.372366
2025-12-31T10:56:51.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T10:56:51.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T10:56:51.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T10:56:51.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T10:56:51.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T10:56:51.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T10:56:36', tmtdew=35.35, humidity=9.04, cloud=0.0, wind=17.7, temperature=25.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T08:56:12.422', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T10:56:51.894 [DEBUG] [Thread-126425] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:56:51.977 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T10:56:51.990 [DEBUG] [Thread-126428] [transport.py] [_log()] starting thread (client mode): 0xb6bb19f0
2025-12-31T10:56:51.991 [DEBUG] [Thread-126428] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:56:52.006 [DEBUG] [Thread-126428] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T10:56:52.006 [INFO] [Thread-126428] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T10:56:52.013 [DEBUG] [Thread-126428] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:56:52.014 [DEBUG] [Thread-126428] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T10:56:52.014 [DEBUG] [Thread-126428] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:56:52.014 [DEBUG] [Thread-126428] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:56:52.014 [DEBUG] [Thread-126428] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:56:52.014 [DEBUG] [Thread-126428] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:56:52.014 [DEBUG] [Thread-126428] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:56:52.014 [DEBUG] [Thread-126428] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:56:52.014 [DEBUG] [Thread-126428] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:56:52.014 [DEBUG] [Thread-126428] [transport.py] [_log()] client lang: <none>
2025-12-31T10:56:52.014 [DEBUG] [Thread-126428] [transport.py] [_log()] server lang: <none>
2025-12-31T10:56:52.014 [DEBUG] [Thread-126428] [transport.py] [_log()] kex follows: False
2025-12-31T10:56:52.014 [DEBUG] [Thread-126428] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:56:52.014 [DEBUG] [Thread-126428] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:56:52.014 [DEBUG] [Thread-126428] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:56:52.014 [DEBUG] [Thread-126428] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:56:52.014 [DEBUG] [Thread-126428] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:56:52.014 [DEBUG] [Thread-126428] [transport.py] [_log()] Compression: none
2025-12-31T10:56:52.015 [DEBUG] [Thread-126428] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:56:52.070 [DEBUG] [Thread-126428] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:56:52.071 [DEBUG] [Thread-126428] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:56:52.072 [DEBUG] [Thread-126428] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T10:56:52.072 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T10:56:52.073 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:56:52.127 [DEBUG] [Thread-126428] [transport.py] [_log()] userauth is OK
2025-12-31T10:56:52.127 [DEBUG] [Thread-126428] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:56:52.127 [DEBUG] [Thread-126428] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:56:52.127 [DEBUG] [Thread-126428] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T10:56:52.127 [DEBUG] [Thread-126428] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:56:52.147 [INFO] [Thread-126428] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:56:52.147 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T10:56:52.148 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:56:53.013 [DEBUG] [Thread-126428] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:56:53.013 [DEBUG] [Thread-126428] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:56:53.061 [DEBUG] [Thread-126428] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:56:53.062 [DEBUG] [Thread-126428] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:56:53.071 [DEBUG] [Thread-126428] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:56:53.080 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:56: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')
2025-12-31T10:56: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-12-31T10:56:53.099 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:56:53.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:56:53.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:56:53.108 [DEBUG] [Thread-126428] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:56:56.642 [DEBUG] [Thread-126430 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:57:07.976 [DEBUG] [Thread-126431 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:57:11.681 [DEBUG] [Thread-126432 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:57:23.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T10:57:23.131 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T10:57:23.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T10:57:23.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 10, 57, 8), 34.93, 9.27, 0.0, 15.24, 24.87, 0, 0, 0, 2, 0, 0),)
2025-12-31T10:57:23.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 10:57:08
2025-12-31T10:57:23.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T10:57:24.115 [DEBUG] [Thread-126433] [transport.py] [_log()] starting thread (client mode): 0xb6b20c70
2025-12-31T10:57:24.115 [DEBUG] [Thread-126433] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:57:24.135 [DEBUG] [Thread-126433] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T10:57:24.136 [INFO] [Thread-126433] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T10:57:24.139 [DEBUG] [Thread-126433] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:57:24.139 [DEBUG] [Thread-126433] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T10:57:24.139 [DEBUG] [Thread-126433] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:57:24.139 [DEBUG] [Thread-126433] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:57:24.139 [DEBUG] [Thread-126433] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:57:24.139 [DEBUG] [Thread-126433] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:57:24.139 [DEBUG] [Thread-126433] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:57:24.139 [DEBUG] [Thread-126433] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:57:24.139 [DEBUG] [Thread-126433] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:57:24.139 [DEBUG] [Thread-126433] [transport.py] [_log()] client lang: <none>
2025-12-31T10:57:24.139 [DEBUG] [Thread-126433] [transport.py] [_log()] server lang: <none>
2025-12-31T10:57:24.139 [DEBUG] [Thread-126433] [transport.py] [_log()] kex follows: False
2025-12-31T10:57:24.139 [DEBUG] [Thread-126433] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:57:24.139 [DEBUG] [Thread-126433] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:57:24.139 [DEBUG] [Thread-126433] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:57:24.140 [DEBUG] [Thread-126433] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:57:24.140 [DEBUG] [Thread-126433] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:57:24.140 [DEBUG] [Thread-126433] [transport.py] [_log()] Compression: none
2025-12-31T10:57:24.140 [DEBUG] [Thread-126433] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:57:24.158 [DEBUG] [Thread-126433] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:57:24.158 [DEBUG] [Thread-126433] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:57:24.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T10:57:24.159 [DEBUG] [Thread-126433] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T10:57:24.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:57:24.201 [DEBUG] [Thread-126433] [transport.py] [_log()] userauth is OK
2025-12-31T10:57:24.201 [DEBUG] [Thread-126433] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:57:24.201 [DEBUG] [Thread-126433] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:57:24.201 [DEBUG] [Thread-126433] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T10:57:24.201 [DEBUG] [Thread-126433] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:57:24.226 [INFO] [Thread-126433] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:57:24.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:57:24.945 [DEBUG] [Thread-126433] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:57:24.945 [DEBUG] [Thread-126433] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:57:24.945 [DEBUG] [Thread-126433] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T10:57:24.985 [DEBUG] [Thread-126433] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:57:24.985 [DEBUG] [Thread-126433] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:57:24.988 [DEBUG] [Thread-126433] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:57:25.001 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:57:25.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T10:57:25.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T10:57:25.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T10:57:25.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:57:25.006 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T10:57:25.006 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:57:25.006 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:57:25.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T10:57:25.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.372713 -999.00  +23.70  11.89     14   -4.80 1 2 1 1 1   888    0 31.06 115.47 ----- 10.8 11.9 18.0 18.1 30.6 -24.1 30.0 -22.9 29.0 -21.2 29.3 -23.6
2025-12-31T10:57:25.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T10:57:25.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T10:57:25.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.372713
2025-12-31T10:57:25.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T10:57:25.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T10:57:25.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T10:57:25.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T10:57:25.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T10:57:25.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T10:57:08', tmtdew=34.93, humidity=9.27, cloud=0.0, wind=15.24, temperature=24.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T08:56:42.403', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T10:57:25.007 [DEBUG] [Thread-126433] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:57:25.078 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T10:57:25.089 [DEBUG] [Thread-126436] [transport.py] [_log()] starting thread (client mode): 0xb6b22410
2025-12-31T10:57:25.090 [DEBUG] [Thread-126436] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:57:25.104 [DEBUG] [Thread-126436] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T10:57:25.104 [INFO] [Thread-126436] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T10:57:25.111 [DEBUG] [Thread-126436] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:57:25.111 [DEBUG] [Thread-126436] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T10:57:25.111 [DEBUG] [Thread-126436] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:57:25.111 [DEBUG] [Thread-126436] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:57:25.111 [DEBUG] [Thread-126436] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:57:25.112 [DEBUG] [Thread-126436] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:57:25.112 [DEBUG] [Thread-126436] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:57:25.112 [DEBUG] [Thread-126436] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:57:25.112 [DEBUG] [Thread-126436] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:57:25.112 [DEBUG] [Thread-126436] [transport.py] [_log()] client lang: <none>
2025-12-31T10:57:25.112 [DEBUG] [Thread-126436] [transport.py] [_log()] server lang: <none>
2025-12-31T10:57:25.112 [DEBUG] [Thread-126436] [transport.py] [_log()] kex follows: False
2025-12-31T10:57:25.112 [DEBUG] [Thread-126436] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:57:25.112 [DEBUG] [Thread-126436] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:57:25.112 [DEBUG] [Thread-126436] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:57:25.112 [DEBUG] [Thread-126436] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:57:25.112 [DEBUG] [Thread-126436] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:57:25.112 [DEBUG] [Thread-126436] [transport.py] [_log()] Compression: none
2025-12-31T10:57:25.112 [DEBUG] [Thread-126436] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:57:25.173 [DEBUG] [Thread-126436] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:57:25.173 [DEBUG] [Thread-126436] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:57:25.173 [DEBUG] [Thread-126436] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T10:57:25.173 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T10:57:25.173 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:57:25.230 [DEBUG] [Thread-126436] [transport.py] [_log()] userauth is OK
2025-12-31T10:57:25.230 [DEBUG] [Thread-126436] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:57:25.230 [DEBUG] [Thread-126436] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:57:25.230 [DEBUG] [Thread-126436] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T10:57:25.230 [DEBUG] [Thread-126436] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:57:25.244 [INFO] [Thread-126436] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:57:25.244 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T10:57:25.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:57:26.091 [DEBUG] [Thread-126436] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:57:26.091 [DEBUG] [Thread-126436] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:57:26.141 [DEBUG] [Thread-126436] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:57:26.141 [DEBUG] [Thread-126436] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:57:26.150 [DEBUG] [Thread-126436] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:57:26.158 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:57:26.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-12-31T10:57:26.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T10:57:26.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:57:26.181 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:57:26.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:57:26.190 [DEBUG] [Thread-126436] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:57:26.715 [DEBUG] [Thread-126438 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:57:29.308 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:57:29.309 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:57:41.756 [DEBUG] [Thread-126439 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:57:56.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T10:57:56.187 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T10:57:56.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T10:57:56.788 [DEBUG] [Thread-126440 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:57:56.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 10, 57, 41), 35.04, 8.9, 0.0, 14.19, 25.07, 0, 0, 0, 2, 0, 0),)
2025-12-31T10:57:56.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 10:57:41
2025-12-31T10:57:57.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T10:57:57.170 [DEBUG] [Thread-126441] [transport.py] [_log()] starting thread (client mode): 0xb6bb19c0
2025-12-31T10:57:57.170 [DEBUG] [Thread-126441] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:57:57.189 [DEBUG] [Thread-126441] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T10:57:57.190 [INFO] [Thread-126441] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T10:57:57.193 [DEBUG] [Thread-126441] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:57:57.193 [DEBUG] [Thread-126441] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T10:57:57.193 [DEBUG] [Thread-126441] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:57:57.193 [DEBUG] [Thread-126441] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:57:57.193 [DEBUG] [Thread-126441] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:57:57.193 [DEBUG] [Thread-126441] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:57:57.193 [DEBUG] [Thread-126441] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:57:57.193 [DEBUG] [Thread-126441] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:57:57.193 [DEBUG] [Thread-126441] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:57:57.193 [DEBUG] [Thread-126441] [transport.py] [_log()] client lang: <none>
2025-12-31T10:57:57.193 [DEBUG] [Thread-126441] [transport.py] [_log()] server lang: <none>
2025-12-31T10:57:57.193 [DEBUG] [Thread-126441] [transport.py] [_log()] kex follows: False
2025-12-31T10:57:57.193 [DEBUG] [Thread-126441] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:57:57.193 [DEBUG] [Thread-126441] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:57:57.193 [DEBUG] [Thread-126441] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:57:57.193 [DEBUG] [Thread-126441] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:57:57.193 [DEBUG] [Thread-126441] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:57:57.194 [DEBUG] [Thread-126441] [transport.py] [_log()] Compression: none
2025-12-31T10:57:57.194 [DEBUG] [Thread-126441] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:57:57.211 [DEBUG] [Thread-126441] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:57:57.212 [DEBUG] [Thread-126441] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:57:57.212 [DEBUG] [Thread-126441] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T10:57:57.212 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T10:57:57.213 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:57:57.214 [DEBUG] [Thread-126441] [transport.py] [_log()] userauth is OK
2025-12-31T10:57:57.215 [DEBUG] [Thread-126441] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:57:57.215 [DEBUG] [Thread-126441] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:57:57.215 [DEBUG] [Thread-126441] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T10:57:57.215 [DEBUG] [Thread-126441] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:57:57.239 [INFO] [Thread-126441] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:57:57.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:57:57.892 [DEBUG] [Thread-126441] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:57:57.892 [DEBUG] [Thread-126441] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:57:57.893 [DEBUG] [Thread-126441] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T10:57:57.933 [DEBUG] [Thread-126441] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:57:57.933 [DEBUG] [Thread-126441] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:57:57.937 [DEBUG] [Thread-126441] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:57:57.950 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:57:57.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T10:57:57.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T10:57:57.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T10:57:57.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:57:57.963 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T10:57:57.963 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:57:57.963 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:57:57.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T10:57:57.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.373060 -999.00  +24.00  13.65     15   -4.10 1 2 1 1 1   888    0 31.03 115.79 ----- 12.2 13.7 286.5 17.9 30.7 -24.2 30.1 -22.3 29.0 -23.5 29.5 -22.7
2025-12-31T10:57:57.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T10:57:57.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T10:57:57.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.373060
2025-12-31T10:57:57.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T10:57:57.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T10:57:57.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T10:57:57.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T10:57:57.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T10:57:57.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T10:57:41', tmtdew=35.04, humidity=8.9, cloud=0.0, wind=14.19, temperature=25.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T08:57:12.384', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T10:57:57.966 [DEBUG] [Thread-126441] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:57:58.049 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T10:57:58.063 [DEBUG] [Thread-126444] [transport.py] [_log()] starting thread (client mode): 0xb6b21900
2025-12-31T10:57:58.063 [DEBUG] [Thread-126444] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:57:58.078 [DEBUG] [Thread-126444] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T10:57:58.078 [INFO] [Thread-126444] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T10:57:58.086 [DEBUG] [Thread-126444] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:57:58.086 [DEBUG] [Thread-126444] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T10:57:58.086 [DEBUG] [Thread-126444] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:57:58.086 [DEBUG] [Thread-126444] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:57:58.086 [DEBUG] [Thread-126444] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:57:58.086 [DEBUG] [Thread-126444] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:57:58.086 [DEBUG] [Thread-126444] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:57:58.086 [DEBUG] [Thread-126444] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:57:58.086 [DEBUG] [Thread-126444] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:57:58.086 [DEBUG] [Thread-126444] [transport.py] [_log()] client lang: <none>
2025-12-31T10:57:58.086 [DEBUG] [Thread-126444] [transport.py] [_log()] server lang: <none>
2025-12-31T10:57:58.086 [DEBUG] [Thread-126444] [transport.py] [_log()] kex follows: False
2025-12-31T10:57:58.086 [DEBUG] [Thread-126444] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:57:58.086 [DEBUG] [Thread-126444] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:57:58.086 [DEBUG] [Thread-126444] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:57:58.087 [DEBUG] [Thread-126444] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:57:58.087 [DEBUG] [Thread-126444] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:57:58.087 [DEBUG] [Thread-126444] [transport.py] [_log()] Compression: none
2025-12-31T10:57:58.087 [DEBUG] [Thread-126444] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:57:58.145 [DEBUG] [Thread-126444] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:57:58.146 [DEBUG] [Thread-126444] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:57:58.146 [DEBUG] [Thread-126444] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T10:57:58.147 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T10:57:58.147 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:57:58.203 [DEBUG] [Thread-126444] [transport.py] [_log()] userauth is OK
2025-12-31T10:57:58.203 [DEBUG] [Thread-126444] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:57:58.203 [DEBUG] [Thread-126444] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:57:58.203 [DEBUG] [Thread-126444] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T10:57:58.203 [DEBUG] [Thread-126444] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:57:58.225 [INFO] [Thread-126444] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:57:58.226 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T10:57:58.226 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:57:59.072 [DEBUG] [Thread-126444] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:57:59.072 [DEBUG] [Thread-126444] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:57:59.120 [DEBUG] [Thread-126444] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:57:59.120 [DEBUG] [Thread-126444] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:57:59.129 [DEBUG] [Thread-126444] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:57:59.138 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:57:59.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T10:57:59.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T10:57:59.157 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:57:59.157 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:57:59.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:57:59.166 [DEBUG] [Thread-126444] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:58:08.028 [DEBUG] [Thread-126446 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:58:11.819 [DEBUG] [Thread-126447 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:58:26.883 [DEBUG] [Thread-126448 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:58:29.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T10:58:29.194 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T10:58:29.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T10:58:29.450 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:58:29.451 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:58:29.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 10, 58, 13), 35.14, 8.85, 0.0, 15.63, 25.19, 0, 0, 0, 2, 0, 0),)
2025-12-31T10:58:29.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 10:58:13
2025-12-31T10:58:30.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T10:58:30.176 [DEBUG] [Thread-126449] [transport.py] [_log()] starting thread (client mode): 0xb6bb09a0
2025-12-31T10:58:30.176 [DEBUG] [Thread-126449] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:58:30.195 [DEBUG] [Thread-126449] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T10:58:30.195 [INFO] [Thread-126449] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T10:58:30.199 [DEBUG] [Thread-126449] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:58:30.199 [DEBUG] [Thread-126449] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T10:58:30.199 [DEBUG] [Thread-126449] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:58:30.199 [DEBUG] [Thread-126449] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:58:30.199 [DEBUG] [Thread-126449] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:58:30.199 [DEBUG] [Thread-126449] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:58:30.199 [DEBUG] [Thread-126449] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:58:30.199 [DEBUG] [Thread-126449] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:58:30.199 [DEBUG] [Thread-126449] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:58:30.199 [DEBUG] [Thread-126449] [transport.py] [_log()] client lang: <none>
2025-12-31T10:58:30.199 [DEBUG] [Thread-126449] [transport.py] [_log()] server lang: <none>
2025-12-31T10:58:30.199 [DEBUG] [Thread-126449] [transport.py] [_log()] kex follows: False
2025-12-31T10:58:30.199 [DEBUG] [Thread-126449] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:58:30.199 [DEBUG] [Thread-126449] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:58:30.199 [DEBUG] [Thread-126449] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:58:30.199 [DEBUG] [Thread-126449] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:58:30.199 [DEBUG] [Thread-126449] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:58:30.199 [DEBUG] [Thread-126449] [transport.py] [_log()] Compression: none
2025-12-31T10:58:30.199 [DEBUG] [Thread-126449] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:58:30.216 [DEBUG] [Thread-126449] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:58:30.217 [DEBUG] [Thread-126449] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:58:30.218 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T10:58:30.218 [DEBUG] [Thread-126449] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T10:58:30.219 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:58:30.220 [DEBUG] [Thread-126449] [transport.py] [_log()] userauth is OK
2025-12-31T10:58:30.220 [DEBUG] [Thread-126449] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:58:30.220 [DEBUG] [Thread-126449] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:58:30.220 [DEBUG] [Thread-126449] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T10:58:30.220 [DEBUG] [Thread-126449] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:58:30.239 [INFO] [Thread-126449] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:58:30.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:58:31.036 [DEBUG] [Thread-126449] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:58:31.037 [DEBUG] [Thread-126449] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:58:31.037 [DEBUG] [Thread-126449] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T10:58:31.078 [DEBUG] [Thread-126449] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:58:31.079 [DEBUG] [Thread-126449] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:58:31.082 [DEBUG] [Thread-126449] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:58:31.096 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:58:31.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T10:58:31.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T10:58:31.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T10:58:31.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:58:31.110 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T10:58:31.110 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:58:31.110 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:58:31.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T10:58:31.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.373407 -999.00  +24.70  15.52     15   -3.60 1 1 1 1 1   888    0 31.52 118.09 ----- 15.2 15.5 291.4 19.0 30.8 -23.7 30.2 -24.3 29.1 -21.9 29.6 -22.3
2025-12-31T10:58:31.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T10:58:31.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T10:58:31.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.373407
2025-12-31T10:58:31.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T10:58:31.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T10:58:31.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T10:58:31.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T10:58:31.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T10:58:31.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T10:58:13', tmtdew=35.14, humidity=8.85, cloud=0.0, wind=15.63, temperature=25.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T08:57:42.365', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T10:58:31.113 [DEBUG] [Thread-126449] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:58:31.208 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T10:58:31.220 [DEBUG] [Thread-126452] [transport.py] [_log()] starting thread (client mode): 0xb6bb29e0
2025-12-31T10:58:31.221 [DEBUG] [Thread-126452] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:58:31.235 [DEBUG] [Thread-126452] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T10:58:31.236 [INFO] [Thread-126452] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T10:58:31.243 [DEBUG] [Thread-126452] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:58:31.243 [DEBUG] [Thread-126452] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T10:58:31.243 [DEBUG] [Thread-126452] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:58:31.243 [DEBUG] [Thread-126452] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:58:31.244 [DEBUG] [Thread-126452] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:58:31.244 [DEBUG] [Thread-126452] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:58:31.244 [DEBUG] [Thread-126452] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:58:31.244 [DEBUG] [Thread-126452] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:58:31.244 [DEBUG] [Thread-126452] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:58:31.244 [DEBUG] [Thread-126452] [transport.py] [_log()] client lang: <none>
2025-12-31T10:58:31.244 [DEBUG] [Thread-126452] [transport.py] [_log()] server lang: <none>
2025-12-31T10:58:31.244 [DEBUG] [Thread-126452] [transport.py] [_log()] kex follows: False
2025-12-31T10:58:31.244 [DEBUG] [Thread-126452] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:58:31.244 [DEBUG] [Thread-126452] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:58:31.244 [DEBUG] [Thread-126452] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:58:31.244 [DEBUG] [Thread-126452] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:58:31.244 [DEBUG] [Thread-126452] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:58:31.244 [DEBUG] [Thread-126452] [transport.py] [_log()] Compression: none
2025-12-31T10:58:31.244 [DEBUG] [Thread-126452] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:58:31.303 [DEBUG] [Thread-126452] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:58:31.303 [DEBUG] [Thread-126452] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:58:31.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T10:58:31.304 [DEBUG] [Thread-126452] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T10:58:31.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:58:31.359 [DEBUG] [Thread-126452] [transport.py] [_log()] userauth is OK
2025-12-31T10:58:31.359 [DEBUG] [Thread-126452] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:58:31.359 [DEBUG] [Thread-126452] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:58:31.359 [DEBUG] [Thread-126452] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T10:58:31.360 [DEBUG] [Thread-126452] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:58:31.379 [INFO] [Thread-126452] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:58:31.379 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T10:58:31.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:58:32.215 [DEBUG] [Thread-126452] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:58:32.215 [DEBUG] [Thread-126452] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:58:32.263 [DEBUG] [Thread-126452] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:58:32.263 [DEBUG] [Thread-126452] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:58:32.272 [DEBUG] [Thread-126452] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:58:32.280 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:58:32.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T10:58:32.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T10:58:32.298 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:58:32.298 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:58:32.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:58:32.307 [DEBUG] [Thread-126452] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:58:41.921 [DEBUG] [Thread-126454 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:58:56.971 [DEBUG] [Thread-126455 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:59:02.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T10:59:02.327 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T10:59:02.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T10:59:03.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 10, 58, 45), 35.64, 8.75, 0.0, 21.88, 25.47, 0, 0, 0, 2, 0, 0),)
2025-12-31T10:59:03.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 10:58:45
2025-12-31T10:59:03.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T10:59:03.318 [DEBUG] [Thread-126456] [transport.py] [_log()] starting thread (client mode): 0xb6bb3490
2025-12-31T10:59:03.319 [DEBUG] [Thread-126456] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:59:03.339 [DEBUG] [Thread-126456] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T10:59:03.339 [INFO] [Thread-126456] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T10:59:03.341 [DEBUG] [Thread-126456] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:59:03.341 [DEBUG] [Thread-126456] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T10:59:03.341 [DEBUG] [Thread-126456] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:59:03.341 [DEBUG] [Thread-126456] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:59:03.341 [DEBUG] [Thread-126456] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:59:03.341 [DEBUG] [Thread-126456] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:59:03.341 [DEBUG] [Thread-126456] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:59:03.341 [DEBUG] [Thread-126456] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:59:03.341 [DEBUG] [Thread-126456] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:59:03.341 [DEBUG] [Thread-126456] [transport.py] [_log()] client lang: <none>
2025-12-31T10:59:03.341 [DEBUG] [Thread-126456] [transport.py] [_log()] server lang: <none>
2025-12-31T10:59:03.341 [DEBUG] [Thread-126456] [transport.py] [_log()] kex follows: False
2025-12-31T10:59:03.341 [DEBUG] [Thread-126456] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:59:03.342 [DEBUG] [Thread-126456] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:59:03.342 [DEBUG] [Thread-126456] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:59:03.342 [DEBUG] [Thread-126456] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:59:03.342 [DEBUG] [Thread-126456] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:59:03.342 [DEBUG] [Thread-126456] [transport.py] [_log()] Compression: none
2025-12-31T10:59:03.342 [DEBUG] [Thread-126456] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:59:03.354 [DEBUG] [Thread-126456] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:59:03.355 [DEBUG] [Thread-126456] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:59:03.356 [DEBUG] [Thread-126456] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T10:59:03.356 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T10:59:03.357 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:59:03.358 [DEBUG] [Thread-126456] [transport.py] [_log()] userauth is OK
2025-12-31T10:59:03.358 [DEBUG] [Thread-126456] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:59:03.359 [DEBUG] [Thread-126456] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:59:03.359 [DEBUG] [Thread-126456] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T10:59:03.359 [DEBUG] [Thread-126456] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:59:03.378 [INFO] [Thread-126456] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:59:03.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:59:04.036 [DEBUG] [Thread-126456] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:59:04.036 [DEBUG] [Thread-126456] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:59:04.036 [DEBUG] [Thread-126456] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T10:59:04.076 [DEBUG] [Thread-126456] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:59:04.077 [DEBUG] [Thread-126456] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:59:04.079 [DEBUG] [Thread-126456] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:59:04.091 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:59:04.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T10:59:04.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T10:59:04.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T10:59:04.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:59:04.100 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T10:59:04.100 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:59:04.100 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:59:04.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T10:59:04.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.373755 -999.00  +25.20  10.63     14   -3.70 1 2 1 1 1   888    0 32.13 117.72 ----- 15.4 10.6 255.5 19.9 30.8 -21.9 30.4 -22.6 29.3 -19.5 29.8 -20.5
2025-12-31T10:59:04.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T10:59:04.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T10:59:04.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.373755
2025-12-31T10:59:04.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T10:59:04.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T10:59:04.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T10:59:04.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T10:59:04.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T10:59:04.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T10:58:45', tmtdew=35.64, humidity=8.75, cloud=0.0, wind=21.88, temperature=25.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T08:58:12.432', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T10:59:04.102 [DEBUG] [Thread-126456] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:59:04.187 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T10:59:04.200 [DEBUG] [Thread-126459] [transport.py] [_log()] starting thread (client mode): 0xb6bb2e00
2025-12-31T10:59:04.200 [DEBUG] [Thread-126459] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:59:04.215 [DEBUG] [Thread-126459] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T10:59:04.216 [INFO] [Thread-126459] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T10:59:04.223 [DEBUG] [Thread-126459] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:59:04.223 [DEBUG] [Thread-126459] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T10:59:04.223 [DEBUG] [Thread-126459] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:59:04.223 [DEBUG] [Thread-126459] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:59:04.223 [DEBUG] [Thread-126459] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:59:04.223 [DEBUG] [Thread-126459] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:59:04.223 [DEBUG] [Thread-126459] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:59:04.223 [DEBUG] [Thread-126459] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:59:04.223 [DEBUG] [Thread-126459] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:59:04.223 [DEBUG] [Thread-126459] [transport.py] [_log()] client lang: <none>
2025-12-31T10:59:04.223 [DEBUG] [Thread-126459] [transport.py] [_log()] server lang: <none>
2025-12-31T10:59:04.223 [DEBUG] [Thread-126459] [transport.py] [_log()] kex follows: False
2025-12-31T10:59:04.223 [DEBUG] [Thread-126459] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:59:04.223 [DEBUG] [Thread-126459] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:59:04.223 [DEBUG] [Thread-126459] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:59:04.223 [DEBUG] [Thread-126459] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:59:04.223 [DEBUG] [Thread-126459] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:59:04.223 [DEBUG] [Thread-126459] [transport.py] [_log()] Compression: none
2025-12-31T10:59:04.223 [DEBUG] [Thread-126459] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:59:04.282 [DEBUG] [Thread-126459] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:59:04.283 [DEBUG] [Thread-126459] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:59:04.283 [DEBUG] [Thread-126459] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T10:59:04.283 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T10:59:04.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:59:04.343 [DEBUG] [Thread-126459] [transport.py] [_log()] userauth is OK
2025-12-31T10:59:04.343 [DEBUG] [Thread-126459] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:59:04.343 [DEBUG] [Thread-126459] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:59:04.343 [DEBUG] [Thread-126459] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T10:59:04.343 [DEBUG] [Thread-126459] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:59:04.362 [INFO] [Thread-126459] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:59:04.362 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T10:59:04.363 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:59:05.262 [DEBUG] [Thread-126459] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:59:05.262 [DEBUG] [Thread-126459] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:59:05.312 [DEBUG] [Thread-126459] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:59:05.313 [DEBUG] [Thread-126459] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:59:05.323 [DEBUG] [Thread-126459] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:59:05.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:59:05.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T10:59:05.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T10:59:05.350 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:59:05.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:59:05.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:59:05.359 [DEBUG] [Thread-126459] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:59:08.083 [DEBUG] [Thread-126461 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:59:12.007 [DEBUG] [Thread-126462 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:59:27.059 [DEBUG] [Thread-126463 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:59:29.591 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:59:29.592 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:59:35.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T10:59:35.382 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T10:59:35.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T10:59:36.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 10, 59, 17), 35.44, 8.87, 0.0, 21.55, 25.34, 0, 0, 0, 2, 0, 0),)
2025-12-31T10:59:36.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 10:59:17
2025-12-31T10:59:36.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T10:59:36.374 [DEBUG] [Thread-126464] [transport.py] [_log()] starting thread (client mode): 0xb6bb0730
2025-12-31T10:59:36.374 [DEBUG] [Thread-126464] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T10:59:36.395 [DEBUG] [Thread-126464] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T10:59:36.395 [INFO] [Thread-126464] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T10:59:36.398 [DEBUG] [Thread-126464] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T10:59:36.398 [DEBUG] [Thread-126464] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T10:59:36.398 [DEBUG] [Thread-126464] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T10:59:36.398 [DEBUG] [Thread-126464] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:59:36.399 [DEBUG] [Thread-126464] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T10:59:36.399 [DEBUG] [Thread-126464] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:59:36.399 [DEBUG] [Thread-126464] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T10:59:36.399 [DEBUG] [Thread-126464] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T10:59:36.399 [DEBUG] [Thread-126464] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T10:59:36.399 [DEBUG] [Thread-126464] [transport.py] [_log()] client lang: <none>
2025-12-31T10:59:36.399 [DEBUG] [Thread-126464] [transport.py] [_log()] server lang: <none>
2025-12-31T10:59:36.399 [DEBUG] [Thread-126464] [transport.py] [_log()] kex follows: False
2025-12-31T10:59:36.399 [DEBUG] [Thread-126464] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T10:59:36.399 [DEBUG] [Thread-126464] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T10:59:36.399 [DEBUG] [Thread-126464] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T10:59:36.399 [DEBUG] [Thread-126464] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T10:59:36.399 [DEBUG] [Thread-126464] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T10:59:36.399 [DEBUG] [Thread-126464] [transport.py] [_log()] Compression: none
2025-12-31T10:59:36.400 [DEBUG] [Thread-126464] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T10:59:36.414 [DEBUG] [Thread-126464] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T10:59:36.415 [DEBUG] [Thread-126464] [transport.py] [_log()] Switch to new keys ...
2025-12-31T10:59:36.416 [DEBUG] [Thread-126464] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T10:59:36.416 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T10:59:36.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T10:59:36.418 [DEBUG] [Thread-126464] [transport.py] [_log()] userauth is OK
2025-12-31T10:59:36.418 [DEBUG] [Thread-126464] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T10:59:36.418 [DEBUG] [Thread-126464] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T10:59:36.419 [DEBUG] [Thread-126464] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T10:59:36.419 [DEBUG] [Thread-126464] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T10:59:36.437 [INFO] [Thread-126464] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T10:59:36.438 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T10:59:37.272 [DEBUG] [Thread-126464] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T10:59:37.272 [DEBUG] [Thread-126464] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T10:59:37.282 [DEBUG] [Thread-126464] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T10:59:37.314 [DEBUG] [Thread-126464] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T10:59:37.314 [DEBUG] [Thread-126464] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T10:59:37.318 [DEBUG] [Thread-126464] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T10:59:37.329 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T10:59:37.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T10:59:37.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T10:59:37.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T10:59:37.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T10:59:37.345 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T10:59:37.345 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T10:59:37.345 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T10:59:37.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T10:59:37.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.374102 -999.00  +25.10  21.36     14   -4.10 1 2 1 1 1   888    0 31.18 122.22 ----- 26.2 21.4 265.6 32.3 30.8 -23.9 30.3 -23.6 29.3 -21.3 29.7 -23.3
2025-12-31T10:59:37.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T10:59:37.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T10:59:37.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.374102
2025-12-31T10:59:37.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T10:59:37.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T10:59:37.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T10:59:37.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T10:59:37.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T10:59:37.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T10:59:17', tmtdew=35.44, humidity=8.87, cloud=0.0, wind=21.55, temperature=25.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T08:58:42.413', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T10:59:37.349 [DEBUG] [Thread-126464] [transport.py] [_log()] EOF in transport thread
2025-12-31T10:59:37.431 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T10:59:42.092 [DEBUG] [Thread-126467 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T10:59:57.146 [DEBUG] [Thread-126468 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:00:08.138 [DEBUG] [Thread-126469 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:00:12.178 [DEBUG] [Thread-126470 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:00:27.214 [DEBUG] [Thread-126471 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:00:29.732 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:00:29.733 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:00:42.248 [DEBUG] [Thread-126472 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:00:57.276 [DEBUG] [Thread-126473 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:01:08.199 [DEBUG] [Thread-126474 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:01:12.314 [DEBUG] [Thread-126475 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:01:27.345 [DEBUG] [Thread-126476 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:01:29.885 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:01:29.886 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:01:42.378 [DEBUG] [Thread-126477 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:01:48.885 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-12-31T11:01:57.416 [DEBUG] [Thread-126478 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:02:08.254 [DEBUG] [Thread-126479 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:02:12.450 [DEBUG] [Thread-126480 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:02:18.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T11:02:18.916 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T11:02:18.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T11:02:19.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 11, 1, 57), 35.32, 8.7, 0.0, 19.46, 24.87, 0, 0, 0, 2, 0, 0),)
2025-12-31T11:02:19.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 11:01:57
2025-12-31T11:02:19.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T11:02:19.918 [DEBUG] [Thread-126481] [transport.py] [_log()] starting thread (client mode): 0xb6b203a0
2025-12-31T11:02:19.918 [DEBUG] [Thread-126481] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:02:19.929 [DEBUG] [Thread-126481] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T11:02:19.929 [INFO] [Thread-126481] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T11:02:19.933 [DEBUG] [Thread-126481] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:02:19.933 [DEBUG] [Thread-126481] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T11:02:19.933 [DEBUG] [Thread-126481] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:02:19.933 [DEBUG] [Thread-126481] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:02:19.933 [DEBUG] [Thread-126481] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:02:19.933 [DEBUG] [Thread-126481] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:02:19.933 [DEBUG] [Thread-126481] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:02:19.933 [DEBUG] [Thread-126481] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:02:19.933 [DEBUG] [Thread-126481] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:02:19.933 [DEBUG] [Thread-126481] [transport.py] [_log()] client lang: <none>
2025-12-31T11:02:19.933 [DEBUG] [Thread-126481] [transport.py] [_log()] server lang: <none>
2025-12-31T11:02:19.933 [DEBUG] [Thread-126481] [transport.py] [_log()] kex follows: False
2025-12-31T11:02:19.933 [DEBUG] [Thread-126481] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:02:19.933 [DEBUG] [Thread-126481] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:02:19.933 [DEBUG] [Thread-126481] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:02:19.933 [DEBUG] [Thread-126481] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:02:19.933 [DEBUG] [Thread-126481] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:02:19.933 [DEBUG] [Thread-126481] [transport.py] [_log()] Compression: none
2025-12-31T11:02:19.933 [DEBUG] [Thread-126481] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:02:19.952 [DEBUG] [Thread-126481] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:02:19.953 [DEBUG] [Thread-126481] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:02:19.953 [DEBUG] [Thread-126481] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T11:02:19.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T11:02:19.954 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:02:19.956 [DEBUG] [Thread-126481] [transport.py] [_log()] userauth is OK
2025-12-31T11:02:19.956 [DEBUG] [Thread-126481] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:02:19.956 [DEBUG] [Thread-126481] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:02:19.956 [DEBUG] [Thread-126481] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T11:02:19.956 [DEBUG] [Thread-126481] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:02:19.977 [INFO] [Thread-126481] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:02:19.977 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:02:20.648 [DEBUG] [Thread-126481] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:02:20.648 [DEBUG] [Thread-126481] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:02:20.649 [DEBUG] [Thread-126481] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T11:02:20.690 [DEBUG] [Thread-126481] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:02:20.691 [DEBUG] [Thread-126481] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:02:20.694 [DEBUG] [Thread-126481] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:02:20.707 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:02:20.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T11:02:20.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T11:02:20.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T11:02:20.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:02:20.720 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T11:02:20.720 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:02:20.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:02:20.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T11:02:20.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.376185 -999.00  +24.50  26.81     14   -4.70 1 1 1 1 1   888    0 31.09 92.98 ----- 24.3 26.8 270.2 31.5 29.9 -27.4 29.5 -26.2 28.1 -27.8 28.8 -25.7
2025-12-31T11:02:20.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T11:02:20.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T11:02:20.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.376185
2025-12-31T11:02:20.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T11:02:20.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T11:02:20.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T11:02:20.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T11:02:20.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T11:02:20.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T11:01:57', tmtdew=35.32, humidity=8.7, cloud=0.0, wind=19.46, temperature=24.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T09:01:42.384', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T11:02:20.723 [DEBUG] [Thread-126481] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:02:20.806 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T11:02:20.819 [DEBUG] [Thread-126484] [transport.py] [_log()] starting thread (client mode): 0xb6bb1c30
2025-12-31T11:02:20.819 [DEBUG] [Thread-126484] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:02:20.833 [DEBUG] [Thread-126484] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T11:02:20.833 [INFO] [Thread-126484] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T11:02:20.841 [DEBUG] [Thread-126484] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:02:20.841 [DEBUG] [Thread-126484] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T11:02:20.841 [DEBUG] [Thread-126484] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:02:20.841 [DEBUG] [Thread-126484] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:02:20.841 [DEBUG] [Thread-126484] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:02:20.841 [DEBUG] [Thread-126484] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:02:20.841 [DEBUG] [Thread-126484] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:02:20.841 [DEBUG] [Thread-126484] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:02:20.841 [DEBUG] [Thread-126484] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:02:20.841 [DEBUG] [Thread-126484] [transport.py] [_log()] client lang: <none>
2025-12-31T11:02:20.841 [DEBUG] [Thread-126484] [transport.py] [_log()] server lang: <none>
2025-12-31T11:02:20.841 [DEBUG] [Thread-126484] [transport.py] [_log()] kex follows: False
2025-12-31T11:02:20.842 [DEBUG] [Thread-126484] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:02:20.842 [DEBUG] [Thread-126484] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:02:20.842 [DEBUG] [Thread-126484] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:02:20.842 [DEBUG] [Thread-126484] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:02:20.842 [DEBUG] [Thread-126484] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:02:20.842 [DEBUG] [Thread-126484] [transport.py] [_log()] Compression: none
2025-12-31T11:02:20.842 [DEBUG] [Thread-126484] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:02:20.902 [DEBUG] [Thread-126484] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:02:20.902 [DEBUG] [Thread-126484] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:02:20.903 [DEBUG] [Thread-126484] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T11:02:20.903 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T11:02:20.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:02:20.958 [DEBUG] [Thread-126484] [transport.py] [_log()] userauth is OK
2025-12-31T11:02:20.958 [DEBUG] [Thread-126484] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:02:20.959 [DEBUG] [Thread-126484] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:02:20.959 [DEBUG] [Thread-126484] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T11:02:20.959 [DEBUG] [Thread-126484] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:02:20.977 [INFO] [Thread-126484] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:02:20.978 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T11:02:20.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:02:21.803 [DEBUG] [Thread-126484] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:02:21.803 [DEBUG] [Thread-126484] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:02:21.851 [DEBUG] [Thread-126484] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:02:21.851 [DEBUG] [Thread-126484] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:02:21.860 [DEBUG] [Thread-126484] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:02:21.870 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:02:21.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T11:02:21.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T11:02:21.888 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:02:21.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:02:21.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:02:21.897 [DEBUG] [Thread-126484] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:02:27.487 [DEBUG] [Thread-126486 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:02:30.026 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:02:30.027 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:02:42.538 [DEBUG] [Thread-126487 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:02:51.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T11:02:51.920 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T11:02:51.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T11:02:52.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 11, 2, 29), 35.17, 8.8, 0.0, 21.74, 24.89, 0, 0, 0, 2, 0, 0),)
2025-12-31T11:02:52.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 11:02:29
2025-12-31T11:02:52.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T11:02:52.922 [DEBUG] [Thread-126488] [transport.py] [_log()] starting thread (client mode): 0xb6bb3910
2025-12-31T11:02:52.922 [DEBUG] [Thread-126488] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:02:52.943 [DEBUG] [Thread-126488] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T11:02:52.943 [INFO] [Thread-126488] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T11:02:52.946 [DEBUG] [Thread-126488] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:02:52.946 [DEBUG] [Thread-126488] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T11:02:52.946 [DEBUG] [Thread-126488] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:02:52.946 [DEBUG] [Thread-126488] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:02:52.946 [DEBUG] [Thread-126488] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:02:52.946 [DEBUG] [Thread-126488] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:02:52.946 [DEBUG] [Thread-126488] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:02:52.946 [DEBUG] [Thread-126488] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:02:52.946 [DEBUG] [Thread-126488] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:02:52.946 [DEBUG] [Thread-126488] [transport.py] [_log()] client lang: <none>
2025-12-31T11:02:52.946 [DEBUG] [Thread-126488] [transport.py] [_log()] server lang: <none>
2025-12-31T11:02:52.946 [DEBUG] [Thread-126488] [transport.py] [_log()] kex follows: False
2025-12-31T11:02:52.947 [DEBUG] [Thread-126488] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:02:52.947 [DEBUG] [Thread-126488] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:02:52.947 [DEBUG] [Thread-126488] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:02:52.947 [DEBUG] [Thread-126488] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:02:52.947 [DEBUG] [Thread-126488] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:02:52.947 [DEBUG] [Thread-126488] [transport.py] [_log()] Compression: none
2025-12-31T11:02:52.947 [DEBUG] [Thread-126488] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:02:52.964 [DEBUG] [Thread-126488] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:02:52.965 [DEBUG] [Thread-126488] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:02:52.965 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T11:02:52.966 [DEBUG] [Thread-126488] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T11:02:52.967 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:02:52.968 [DEBUG] [Thread-126488] [transport.py] [_log()] userauth is OK
2025-12-31T11:02:52.969 [DEBUG] [Thread-126488] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:02:52.969 [DEBUG] [Thread-126488] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:02:52.969 [DEBUG] [Thread-126488] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T11:02:52.969 [DEBUG] [Thread-126488] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:02:52.995 [INFO] [Thread-126488] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:02:52.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:02:53.632 [DEBUG] [Thread-126488] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:02:53.632 [DEBUG] [Thread-126488] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:02:53.632 [DEBUG] [Thread-126488] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T11:02:53.673 [DEBUG] [Thread-126488] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:02:53.673 [DEBUG] [Thread-126488] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:02:53.678 [DEBUG] [Thread-126488] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:02:53.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:02:53.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T11:02:53.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T11:02:53.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T11:02:53.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:02:53.706 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T11:02:53.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:02:53.706 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:02:53.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T11:02:53.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.376532 -999.00  +24.60  19.17     14   -4.50 1 1 1 1 1   888    0 30.20 82.97 ----- 22.0 19.2 286.8 26.2 30.1 -24.7 29.5 -24.8 28.5 -23.0 29.0 -23.4
2025-12-31T11:02:53.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T11:02:53.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T11:02:53.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.376532
2025-12-31T11:02:53.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T11:02:53.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T11:02:53.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T11:02:53.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T11:02:53.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T11:02:53.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T11:02:29', tmtdew=35.17, humidity=8.8, cloud=0.0, wind=21.74, temperature=24.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T09:02:12.365', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T11:02:53.709 [DEBUG] [Thread-126488] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:02:53.790 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T11:02:53.803 [DEBUG] [Thread-126491] [transport.py] [_log()] starting thread (client mode): 0xb6b4a4d0
2025-12-31T11:02:53.803 [DEBUG] [Thread-126491] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:02:53.817 [DEBUG] [Thread-126491] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T11:02:53.818 [INFO] [Thread-126491] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T11:02:53.825 [DEBUG] [Thread-126491] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:02:53.825 [DEBUG] [Thread-126491] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T11:02:53.825 [DEBUG] [Thread-126491] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:02:53.825 [DEBUG] [Thread-126491] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:02:53.825 [DEBUG] [Thread-126491] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:02:53.826 [DEBUG] [Thread-126491] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:02:53.826 [DEBUG] [Thread-126491] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:02:53.826 [DEBUG] [Thread-126491] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:02:53.826 [DEBUG] [Thread-126491] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:02:53.826 [DEBUG] [Thread-126491] [transport.py] [_log()] client lang: <none>
2025-12-31T11:02:53.826 [DEBUG] [Thread-126491] [transport.py] [_log()] server lang: <none>
2025-12-31T11:02:53.826 [DEBUG] [Thread-126491] [transport.py] [_log()] kex follows: False
2025-12-31T11:02:53.826 [DEBUG] [Thread-126491] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:02:53.826 [DEBUG] [Thread-126491] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:02:53.826 [DEBUG] [Thread-126491] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:02:53.826 [DEBUG] [Thread-126491] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:02:53.826 [DEBUG] [Thread-126491] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:02:53.826 [DEBUG] [Thread-126491] [transport.py] [_log()] Compression: none
2025-12-31T11:02:53.826 [DEBUG] [Thread-126491] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:02:53.886 [DEBUG] [Thread-126491] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:02:53.887 [DEBUG] [Thread-126491] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:02:53.888 [DEBUG] [Thread-126491] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T11:02:53.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T11:02:53.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:02:53.942 [DEBUG] [Thread-126491] [transport.py] [_log()] userauth is OK
2025-12-31T11:02:53.943 [DEBUG] [Thread-126491] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:02:53.943 [DEBUG] [Thread-126491] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:02:53.943 [DEBUG] [Thread-126491] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T11:02:53.943 [DEBUG] [Thread-126491] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:02:53.961 [INFO] [Thread-126491] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:02:53.962 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T11:02:53.962 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:02:54.773 [DEBUG] [Thread-126491] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:02:54.774 [DEBUG] [Thread-126491] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:02:54.821 [DEBUG] [Thread-126491] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:02:54.821 [DEBUG] [Thread-126491] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:02:54.830 [DEBUG] [Thread-126491] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:02:54.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:02:54.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-12-31T11:02:54.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T11:02:54.858 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:02:54.858 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:02:54.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:02:54.867 [DEBUG] [Thread-126491] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:02:57.570 [DEBUG] [Thread-126493 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:03:08.308 [DEBUG] [Thread-126494 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:03:12.620 [DEBUG] [Thread-126495 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:03:24.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T11:03:24.888 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T11:03:24.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T11:03:25.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 11, 3, 1), 35.07, 8.89, 0.0, 22.13, 24.97, 0, 0, 0, 2, 0, 0),)
2025-12-31T11:03:25.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 11:03:01
2025-12-31T11:03:25.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T11:03:25.885 [DEBUG] [Thread-126496] [transport.py] [_log()] starting thread (client mode): 0xb6b202b0
2025-12-31T11:03:25.885 [DEBUG] [Thread-126496] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:03:25.905 [DEBUG] [Thread-126496] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T11:03:25.905 [INFO] [Thread-126496] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T11:03:25.908 [DEBUG] [Thread-126496] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:03:25.908 [DEBUG] [Thread-126496] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T11:03:25.908 [DEBUG] [Thread-126496] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:03:25.909 [DEBUG] [Thread-126496] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:03:25.909 [DEBUG] [Thread-126496] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:03:25.909 [DEBUG] [Thread-126496] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:03:25.909 [DEBUG] [Thread-126496] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:03:25.909 [DEBUG] [Thread-126496] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:03:25.909 [DEBUG] [Thread-126496] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:03:25.909 [DEBUG] [Thread-126496] [transport.py] [_log()] client lang: <none>
2025-12-31T11:03:25.909 [DEBUG] [Thread-126496] [transport.py] [_log()] server lang: <none>
2025-12-31T11:03:25.909 [DEBUG] [Thread-126496] [transport.py] [_log()] kex follows: False
2025-12-31T11:03:25.909 [DEBUG] [Thread-126496] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:03:25.909 [DEBUG] [Thread-126496] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:03:25.909 [DEBUG] [Thread-126496] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:03:25.909 [DEBUG] [Thread-126496] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:03:25.909 [DEBUG] [Thread-126496] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:03:25.910 [DEBUG] [Thread-126496] [transport.py] [_log()] Compression: none
2025-12-31T11:03:25.910 [DEBUG] [Thread-126496] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:03:25.929 [DEBUG] [Thread-126496] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:03:25.930 [DEBUG] [Thread-126496] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:03:25.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T11:03:25.931 [DEBUG] [Thread-126496] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T11:03:25.932 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:03:25.934 [DEBUG] [Thread-126496] [transport.py] [_log()] userauth is OK
2025-12-31T11:03:25.934 [DEBUG] [Thread-126496] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:03:25.934 [DEBUG] [Thread-126496] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:03:25.934 [DEBUG] [Thread-126496] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T11:03:25.934 [DEBUG] [Thread-126496] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:03:25.959 [INFO] [Thread-126496] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:03:25.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:03:26.604 [DEBUG] [Thread-126496] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:03:26.605 [DEBUG] [Thread-126496] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:03:26.606 [DEBUG] [Thread-126496] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T11:03:26.647 [DEBUG] [Thread-126496] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:03:26.647 [DEBUG] [Thread-126496] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:03:26.652 [DEBUG] [Thread-126496] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:03:26.664 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:03:26.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T11:03:26.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T11:03:26.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T11:03:26.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:03:26.679 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T11:03:26.679 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:03:26.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:03:26.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T11:03:26.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.376880 -999.00  +24.20  20.76     14   -4.50 1 1 1 1 1   888    0 30.68 79.34 ----- 23.2 20.8 284.4 27.4 30.0 -26.1 29.6 -24.8 28.2 -28.0 28.9 -24.1
2025-12-31T11:03:26.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T11:03:26.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T11:03:26.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.376880
2025-12-31T11:03:26.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T11:03:26.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T11:03:26.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T11:03:26.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T11:03:26.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T11:03:26.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T11:03:01', tmtdew=35.07, humidity=8.89, cloud=0.0, wind=22.13, temperature=24.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T09:02:42.432', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T11:03:26.683 [DEBUG] [Thread-126496] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:03:26.765 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T11:03:26.779 [DEBUG] [Thread-126499] [transport.py] [_log()] starting thread (client mode): 0xb6b4b4f0
2025-12-31T11:03:26.779 [DEBUG] [Thread-126499] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:03:26.793 [DEBUG] [Thread-126499] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T11:03:26.794 [INFO] [Thread-126499] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T11:03:26.801 [DEBUG] [Thread-126499] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:03:26.802 [DEBUG] [Thread-126499] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T11:03:26.802 [DEBUG] [Thread-126499] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:03:26.802 [DEBUG] [Thread-126499] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:03:26.802 [DEBUG] [Thread-126499] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:03:26.802 [DEBUG] [Thread-126499] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:03:26.802 [DEBUG] [Thread-126499] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:03:26.802 [DEBUG] [Thread-126499] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:03:26.802 [DEBUG] [Thread-126499] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:03:26.802 [DEBUG] [Thread-126499] [transport.py] [_log()] client lang: <none>
2025-12-31T11:03:26.802 [DEBUG] [Thread-126499] [transport.py] [_log()] server lang: <none>
2025-12-31T11:03:26.802 [DEBUG] [Thread-126499] [transport.py] [_log()] kex follows: False
2025-12-31T11:03:26.802 [DEBUG] [Thread-126499] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:03:26.802 [DEBUG] [Thread-126499] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:03:26.802 [DEBUG] [Thread-126499] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:03:26.802 [DEBUG] [Thread-126499] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:03:26.802 [DEBUG] [Thread-126499] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:03:26.802 [DEBUG] [Thread-126499] [transport.py] [_log()] Compression: none
2025-12-31T11:03:26.802 [DEBUG] [Thread-126499] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:03:26.865 [DEBUG] [Thread-126499] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:03:26.874 [DEBUG] [Thread-126499] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:03:26.875 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T11:03:26.875 [DEBUG] [Thread-126499] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T11:03:26.876 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:03:26.927 [DEBUG] [Thread-126499] [transport.py] [_log()] userauth is OK
2025-12-31T11:03:26.928 [DEBUG] [Thread-126499] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:03:26.928 [DEBUG] [Thread-126499] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:03:26.928 [DEBUG] [Thread-126499] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T11:03:26.928 [DEBUG] [Thread-126499] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:03:26.947 [INFO] [Thread-126499] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:03:26.947 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T11:03:26.947 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:03:27.650 [DEBUG] [Thread-126501 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:03:27.784 [DEBUG] [Thread-126499] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:03:27.784 [DEBUG] [Thread-126499] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:03:27.833 [DEBUG] [Thread-126499] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:03:27.833 [DEBUG] [Thread-126499] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:03:27.842 [DEBUG] [Thread-126499] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:03:27.851 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:03:27.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T11:03:27.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T11:03:27.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:03:27.869 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:03:27.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:03:27.877 [DEBUG] [Thread-126499] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:03:30.167 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:03:30.168 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:03:42.702 [DEBUG] [Thread-126502 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:03:57.735 [DEBUG] [Thread-126503 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:03:57.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T11:03:57.899 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T11:03:57.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T11:03:58.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 11, 3, 33), 35.74, 8.74, 0.0, 27.84, 26.24, 0, 0, 0, 2, 0, 0),)
2025-12-31T11:03:58.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 11:03:33
2025-12-31T11:03:58.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T11:03:58.949 [DEBUG] [Thread-126504] [transport.py] [_log()] starting thread (client mode): 0xb6bb3580
2025-12-31T11:03:58.949 [DEBUG] [Thread-126504] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:03:58.969 [DEBUG] [Thread-126504] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T11:03:58.969 [INFO] [Thread-126504] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T11:03:58.972 [DEBUG] [Thread-126504] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:03:58.972 [DEBUG] [Thread-126504] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T11:03:58.972 [DEBUG] [Thread-126504] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:03:58.972 [DEBUG] [Thread-126504] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:03:58.972 [DEBUG] [Thread-126504] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:03:58.972 [DEBUG] [Thread-126504] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:03:58.972 [DEBUG] [Thread-126504] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:03:58.972 [DEBUG] [Thread-126504] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:03:58.972 [DEBUG] [Thread-126504] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:03:58.972 [DEBUG] [Thread-126504] [transport.py] [_log()] client lang: <none>
2025-12-31T11:03:58.972 [DEBUG] [Thread-126504] [transport.py] [_log()] server lang: <none>
2025-12-31T11:03:58.972 [DEBUG] [Thread-126504] [transport.py] [_log()] kex follows: False
2025-12-31T11:03:58.973 [DEBUG] [Thread-126504] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:03:58.973 [DEBUG] [Thread-126504] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:03:58.973 [DEBUG] [Thread-126504] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:03:58.973 [DEBUG] [Thread-126504] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:03:58.973 [DEBUG] [Thread-126504] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:03:58.973 [DEBUG] [Thread-126504] [transport.py] [_log()] Compression: none
2025-12-31T11:03:58.973 [DEBUG] [Thread-126504] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:03:58.990 [DEBUG] [Thread-126504] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:03:58.990 [DEBUG] [Thread-126504] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:03:58.990 [DEBUG] [Thread-126504] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T11:03:58.990 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T11:03:58.990 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:03:58.991 [DEBUG] [Thread-126504] [transport.py] [_log()] userauth is OK
2025-12-31T11:03:58.991 [DEBUG] [Thread-126504] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:03:58.991 [DEBUG] [Thread-126504] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:03:58.991 [DEBUG] [Thread-126504] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T11:03:58.991 [DEBUG] [Thread-126504] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:03:59.000 [INFO] [Thread-126504] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:03:59.000 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:03:59.672 [DEBUG] [Thread-126504] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:03:59.672 [DEBUG] [Thread-126504] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:03:59.673 [DEBUG] [Thread-126504] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T11:03:59.713 [DEBUG] [Thread-126504] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:03:59.713 [DEBUG] [Thread-126504] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:03:59.716 [DEBUG] [Thread-126504] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:03:59.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:03:59.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T11:03:59.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T11:03:59.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T11:03:59.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:03:59.734 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T11:03:59.734 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:03:59.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:03:59.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T11:03:59.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.377227 -999.00  +24.10  24.12     14   -4.60 1 1 1 1 1   888    0 30.28 80.24 ----- 24.2 24.1 279.6 27.8 29.9 -25.9 29.6 -23.9 28.2 -24.4 28.9 -23.3
2025-12-31T11:03:59.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T11:03:59.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T11:03:59.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.377227
2025-12-31T11:03:59.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T11:03:59.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T11:03:59.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T11:03:59.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T11:03:59.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T11:03:59.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T11:03:33', tmtdew=35.74, humidity=8.74, cloud=0.0, wind=27.84, temperature=26.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T09:03:12.413', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T11:03:59.735 [DEBUG] [Thread-126504] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:03:59.809 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T11:03:59.822 [DEBUG] [Thread-126507] [transport.py] [_log()] starting thread (client mode): 0xb6bb0d60
2025-12-31T11:03:59.822 [DEBUG] [Thread-126507] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:03:59.837 [DEBUG] [Thread-126507] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T11:03:59.837 [INFO] [Thread-126507] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T11:03:59.845 [DEBUG] [Thread-126507] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:03:59.845 [DEBUG] [Thread-126507] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T11:03:59.845 [DEBUG] [Thread-126507] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:03:59.845 [DEBUG] [Thread-126507] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:03:59.845 [DEBUG] [Thread-126507] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:03:59.845 [DEBUG] [Thread-126507] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:03:59.845 [DEBUG] [Thread-126507] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:03:59.845 [DEBUG] [Thread-126507] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:03:59.845 [DEBUG] [Thread-126507] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:03:59.845 [DEBUG] [Thread-126507] [transport.py] [_log()] client lang: <none>
2025-12-31T11:03:59.845 [DEBUG] [Thread-126507] [transport.py] [_log()] server lang: <none>
2025-12-31T11:03:59.845 [DEBUG] [Thread-126507] [transport.py] [_log()] kex follows: False
2025-12-31T11:03:59.845 [DEBUG] [Thread-126507] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:03:59.845 [DEBUG] [Thread-126507] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:03:59.845 [DEBUG] [Thread-126507] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:03:59.845 [DEBUG] [Thread-126507] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:03:59.845 [DEBUG] [Thread-126507] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:03:59.845 [DEBUG] [Thread-126507] [transport.py] [_log()] Compression: none
2025-12-31T11:03:59.845 [DEBUG] [Thread-126507] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:03:59.904 [DEBUG] [Thread-126507] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:03:59.904 [DEBUG] [Thread-126507] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:03:59.904 [DEBUG] [Thread-126507] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T11:03:59.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T11:03:59.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:03:59.961 [DEBUG] [Thread-126507] [transport.py] [_log()] userauth is OK
2025-12-31T11:03:59.962 [DEBUG] [Thread-126507] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:03:59.962 [DEBUG] [Thread-126507] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:03:59.962 [DEBUG] [Thread-126507] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T11:03:59.962 [DEBUG] [Thread-126507] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:03:59.976 [INFO] [Thread-126507] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:03: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-12-31T11:03:59.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:04:00.794 [DEBUG] [Thread-126507] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:04:00.794 [DEBUG] [Thread-126507] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:04:00.842 [DEBUG] [Thread-126507] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:04:00.842 [DEBUG] [Thread-126507] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:04:00.851 [DEBUG] [Thread-126507] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:04:00.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:04:00.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T11:04:00.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T11:04:00.874 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:04:00.874 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:04:00.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:04:00.882 [DEBUG] [Thread-126507] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:04:08.361 [DEBUG] [Thread-126509 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:04:12.767 [DEBUG] [Thread-126510 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:04:27.829 [DEBUG] [Thread-126511 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:04:30.306 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:04:30.307 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:04:30.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T11:04:30.882 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T11:04:30.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T11:04:31.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 11, 4, 5), 35.15, 8.75, 0.0, 22.8, 24.9, 0, 0, 0, 2, 0, 0),)
2025-12-31T11:04:31.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 11:04:05
2025-12-31T11:04:31.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T11:04:31.893 [DEBUG] [Thread-126512] [transport.py] [_log()] starting thread (client mode): 0xb6b204c0
2025-12-31T11:04:31.893 [DEBUG] [Thread-126512] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:04:31.914 [DEBUG] [Thread-126512] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T11:04:31.914 [INFO] [Thread-126512] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T11:04:31.917 [DEBUG] [Thread-126512] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:04:31.917 [DEBUG] [Thread-126512] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T11:04:31.917 [DEBUG] [Thread-126512] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:04:31.917 [DEBUG] [Thread-126512] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:04:31.917 [DEBUG] [Thread-126512] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:04:31.917 [DEBUG] [Thread-126512] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:04:31.917 [DEBUG] [Thread-126512] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:04:31.917 [DEBUG] [Thread-126512] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:04:31.917 [DEBUG] [Thread-126512] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:04:31.917 [DEBUG] [Thread-126512] [transport.py] [_log()] client lang: <none>
2025-12-31T11:04:31.917 [DEBUG] [Thread-126512] [transport.py] [_log()] server lang: <none>
2025-12-31T11:04:31.917 [DEBUG] [Thread-126512] [transport.py] [_log()] kex follows: False
2025-12-31T11:04:31.917 [DEBUG] [Thread-126512] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:04:31.917 [DEBUG] [Thread-126512] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:04:31.917 [DEBUG] [Thread-126512] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:04:31.917 [DEBUG] [Thread-126512] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:04:31.917 [DEBUG] [Thread-126512] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:04:31.917 [DEBUG] [Thread-126512] [transport.py] [_log()] Compression: none
2025-12-31T11:04:31.917 [DEBUG] [Thread-126512] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:04:31.934 [DEBUG] [Thread-126512] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:04:31.935 [DEBUG] [Thread-126512] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:04:31.935 [DEBUG] [Thread-126512] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T11:04:31.935 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T11:04:31.936 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:04:31.937 [DEBUG] [Thread-126512] [transport.py] [_log()] userauth is OK
2025-12-31T11:04:31.937 [DEBUG] [Thread-126512] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:04:31.937 [DEBUG] [Thread-126512] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:04:31.937 [DEBUG] [Thread-126512] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T11:04:31.938 [DEBUG] [Thread-126512] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:04:31.962 [INFO] [Thread-126512] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:04:31.963 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:04:32.606 [DEBUG] [Thread-126512] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:04:32.606 [DEBUG] [Thread-126512] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:04:32.606 [DEBUG] [Thread-126512] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T11:04:32.647 [DEBUG] [Thread-126512] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:04:32.647 [DEBUG] [Thread-126512] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:04:32.650 [DEBUG] [Thread-126512] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:04:32.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:04:32.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T11:04:32.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T11:04:32.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T11:04:32.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:04:32.673 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T11:04:32.673 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:04:32.673 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:04:32.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T11:04:32.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.377921 -999.00  +24.60  15.69     14   -4.30 1 1 1 1 1   888    0 29.95 66.35 ----- 18.0 15.7 283.4 24.7 30.4 -24.6 29.8 -23.9 28.5 -24.6 29.2 -23.0
2025-12-31T11:04:32.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T11:04:32.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T11:04:32.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.377921
2025-12-31T11:04:32.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T11:04:32.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T11:04:32.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T11:04:32.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T11:04:32.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T11:04:32.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T11:04:05', tmtdew=35.15, humidity=8.75, cloud=0.0, wind=22.8, temperature=24.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T09:04:12.374', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T11:04:32.676 [DEBUG] [Thread-126512] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:04:32.759 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T11:04:32.776 [DEBUG] [Thread-126515] [transport.py] [_log()] starting thread (client mode): 0xb6b484f0
2025-12-31T11:04:32.777 [DEBUG] [Thread-126515] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:04:32.794 [DEBUG] [Thread-126515] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T11:04:32.794 [INFO] [Thread-126515] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T11:04:32.804 [DEBUG] [Thread-126515] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:04:32.804 [DEBUG] [Thread-126515] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T11:04:32.804 [DEBUG] [Thread-126515] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:04:32.804 [DEBUG] [Thread-126515] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:04:32.804 [DEBUG] [Thread-126515] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:04:32.804 [DEBUG] [Thread-126515] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:04:32.804 [DEBUG] [Thread-126515] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:04:32.804 [DEBUG] [Thread-126515] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:04:32.804 [DEBUG] [Thread-126515] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:04:32.804 [DEBUG] [Thread-126515] [transport.py] [_log()] client lang: <none>
2025-12-31T11:04:32.804 [DEBUG] [Thread-126515] [transport.py] [_log()] server lang: <none>
2025-12-31T11:04:32.804 [DEBUG] [Thread-126515] [transport.py] [_log()] kex follows: False
2025-12-31T11:04:32.805 [DEBUG] [Thread-126515] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:04:32.805 [DEBUG] [Thread-126515] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:04:32.805 [DEBUG] [Thread-126515] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:04:32.805 [DEBUG] [Thread-126515] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:04:32.805 [DEBUG] [Thread-126515] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:04:32.805 [DEBUG] [Thread-126515] [transport.py] [_log()] Compression: none
2025-12-31T11:04:32.805 [DEBUG] [Thread-126515] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:04:32.867 [DEBUG] [Thread-126515] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:04:32.867 [DEBUG] [Thread-126515] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:04:32.868 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T11:04:32.869 [DEBUG] [Thread-126515] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T11:04:32.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:04:32.931 [DEBUG] [Thread-126515] [transport.py] [_log()] userauth is OK
2025-12-31T11:04:32.932 [DEBUG] [Thread-126515] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:04:32.932 [DEBUG] [Thread-126515] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:04:32.932 [DEBUG] [Thread-126515] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T11:04:32.932 [DEBUG] [Thread-126515] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:04:32.949 [INFO] [Thread-126515] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:04:32.949 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T11:04:32.949 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:04:33.752 [DEBUG] [Thread-126515] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:04:33.753 [DEBUG] [Thread-126515] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:04:33.804 [DEBUG] [Thread-126515] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:04:33.805 [DEBUG] [Thread-126515] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:04:33.814 [DEBUG] [Thread-126515] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:04:33.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:04:33.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T11:04:33.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T11:04:33.850 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:04:33.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:04:33.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:04:33.865 [DEBUG] [Thread-126515] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:04:42.861 [DEBUG] [Thread-126517 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:04:57.915 [DEBUG] [Thread-126518 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:05:03.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T11:05:03.881 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T11:05:03.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T11:05:04.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 11, 4, 37), 35.53, 8.89, 0.0, 21.08, 25.05, 0, 0, 0, 2, 0, 0),)
2025-12-31T11:05:04.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 11:04:37
2025-12-31T11:05:04.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T11:05:04.890 [DEBUG] [Thread-126519] [transport.py] [_log()] starting thread (client mode): 0xb6b20940
2025-12-31T11:05:04.890 [DEBUG] [Thread-126519] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:05:04.910 [DEBUG] [Thread-126519] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T11:05:04.910 [INFO] [Thread-126519] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T11:05:04.913 [DEBUG] [Thread-126519] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:05:04.913 [DEBUG] [Thread-126519] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T11:05:04.913 [DEBUG] [Thread-126519] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:05:04.913 [DEBUG] [Thread-126519] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:05:04.913 [DEBUG] [Thread-126519] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:05:04.913 [DEBUG] [Thread-126519] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:05:04.913 [DEBUG] [Thread-126519] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:05:04.913 [DEBUG] [Thread-126519] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:05:04.913 [DEBUG] [Thread-126519] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:05:04.914 [DEBUG] [Thread-126519] [transport.py] [_log()] client lang: <none>
2025-12-31T11:05:04.914 [DEBUG] [Thread-126519] [transport.py] [_log()] server lang: <none>
2025-12-31T11:05:04.914 [DEBUG] [Thread-126519] [transport.py] [_log()] kex follows: False
2025-12-31T11:05:04.914 [DEBUG] [Thread-126519] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:05:04.914 [DEBUG] [Thread-126519] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:05:04.914 [DEBUG] [Thread-126519] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:05:04.914 [DEBUG] [Thread-126519] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:05:04.914 [DEBUG] [Thread-126519] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:05:04.914 [DEBUG] [Thread-126519] [transport.py] [_log()] Compression: none
2025-12-31T11:05:04.914 [DEBUG] [Thread-126519] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:05:04.931 [DEBUG] [Thread-126519] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:05:04.932 [DEBUG] [Thread-126519] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:05:04.932 [DEBUG] [Thread-126519] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T11:05:04.933 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T11:05:04.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:05:04.935 [DEBUG] [Thread-126519] [transport.py] [_log()] userauth is OK
2025-12-31T11:05:04.935 [DEBUG] [Thread-126519] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:05:04.935 [DEBUG] [Thread-126519] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:05:04.935 [DEBUG] [Thread-126519] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T11:05:04.935 [DEBUG] [Thread-126519] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:05:04.959 [INFO] [Thread-126519] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:05:04.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:05:08.396 [DEBUG] [Thread-126521 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:05:12.949 [DEBUG] [Thread-126522 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:05:13.771 [DEBUG] [Thread-126519] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:05:13.771 [DEBUG] [Thread-126519] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:05:13.771 [DEBUG] [Thread-126519] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T11:05:13.813 [DEBUG] [Thread-126519] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:05:13.813 [DEBUG] [Thread-126519] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:05:13.815 [DEBUG] [Thread-126519] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:05:13.827 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:05:13.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T11:05:13.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T11:05:13.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T11:05:13.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:05:13.846 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T11:05:13.846 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:05:13.846 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:05:13.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T11:05:13.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.378268 -999.00  +24.40  22.21     14   -4.60 1 1 1 1 1   888    0 30.46 65.10 ----- 18.9 22.2 293.2 30.1 30.5 -24.7 29.9 -24.5 28.8 -23.4 29.3 -23.6
2025-12-31T11:05:13.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T11:05:13.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T11:05:13.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.378268
2025-12-31T11:05:13.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T11:05:13.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T11:05:13.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T11:05:13.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T11:05:13.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T11:05:13.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T11:04:37', tmtdew=35.53, humidity=8.89, cloud=0.0, wind=21.08, temperature=25.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T09:04:42.355', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T11:05:13.847 [DEBUG] [Thread-126519] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:05:13.919 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T11:05:13.932 [DEBUG] [Thread-126524] [transport.py] [_log()] starting thread (client mode): 0xb6b22d40
2025-12-31T11:05:13.932 [DEBUG] [Thread-126524] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:05:13.946 [DEBUG] [Thread-126524] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T11:05:13.946 [INFO] [Thread-126524] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T11:05:13.954 [DEBUG] [Thread-126524] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:05:13.954 [DEBUG] [Thread-126524] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T11:05:13.954 [DEBUG] [Thread-126524] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:05:13.954 [DEBUG] [Thread-126524] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:05:13.954 [DEBUG] [Thread-126524] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:05:13.954 [DEBUG] [Thread-126524] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:05:13.954 [DEBUG] [Thread-126524] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:05:13.954 [DEBUG] [Thread-126524] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:05:13.954 [DEBUG] [Thread-126524] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:05:13.954 [DEBUG] [Thread-126524] [transport.py] [_log()] client lang: <none>
2025-12-31T11:05:13.954 [DEBUG] [Thread-126524] [transport.py] [_log()] server lang: <none>
2025-12-31T11:05:13.954 [DEBUG] [Thread-126524] [transport.py] [_log()] kex follows: False
2025-12-31T11:05:13.954 [DEBUG] [Thread-126524] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:05:13.954 [DEBUG] [Thread-126524] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:05:13.954 [DEBUG] [Thread-126524] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:05:13.954 [DEBUG] [Thread-126524] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:05:13.954 [DEBUG] [Thread-126524] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:05:13.954 [DEBUG] [Thread-126524] [transport.py] [_log()] Compression: none
2025-12-31T11:05:13.954 [DEBUG] [Thread-126524] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:05:14.011 [DEBUG] [Thread-126524] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:05:14.012 [DEBUG] [Thread-126524] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:05:14.012 [DEBUG] [Thread-126524] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T11:05:14.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T11:05:14.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:05:14.069 [DEBUG] [Thread-126524] [transport.py] [_log()] userauth is OK
2025-12-31T11:05:14.069 [DEBUG] [Thread-126524] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:05:14.069 [DEBUG] [Thread-126524] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:05:14.069 [DEBUG] [Thread-126524] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T11:05:14.069 [DEBUG] [Thread-126524] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:05:14.083 [INFO] [Thread-126524] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:05:14.083 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T11:05:14.083 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:05:14.869 [DEBUG] [Thread-126524] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:05:14.869 [DEBUG] [Thread-126524] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:05:14.916 [DEBUG] [Thread-126524] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:05:14.917 [DEBUG] [Thread-126524] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:05:14.925 [DEBUG] [Thread-126524] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:05:14.932 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:05:14.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-12-31T11:05:14.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-12-31T11:05:14.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:05:14.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:05:14.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:05:14.956 [DEBUG] [Thread-126524] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:05:27.981 [DEBUG] [Thread-126526 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:05:30.447 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:05:30.448 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:05:43.031 [DEBUG] [Thread-126527 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:05:44.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T11:05:44.979 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T11:05:44.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T11:05:45.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 11, 5, 42), 35.96, 8.59, 0.0, 23.61, 25.37, 0, 0, 0, 2, 0, 0),)
2025-12-31T11:05:45.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 11:05:42
2025-12-31T11:05:45.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T11:05:45.969 [DEBUG] [Thread-126528] [transport.py] [_log()] starting thread (client mode): 0xb6b20a60
2025-12-31T11:05:45.969 [DEBUG] [Thread-126528] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:05:45.988 [DEBUG] [Thread-126528] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T11:05:45.988 [INFO] [Thread-126528] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T11:05:45.991 [DEBUG] [Thread-126528] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:05:45.991 [DEBUG] [Thread-126528] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T11:05:45.991 [DEBUG] [Thread-126528] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:05:45.991 [DEBUG] [Thread-126528] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:05:45.992 [DEBUG] [Thread-126528] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:05:45.992 [DEBUG] [Thread-126528] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:05:45.992 [DEBUG] [Thread-126528] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:05:45.992 [DEBUG] [Thread-126528] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:05:45.992 [DEBUG] [Thread-126528] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:05:45.992 [DEBUG] [Thread-126528] [transport.py] [_log()] client lang: <none>
2025-12-31T11:05:45.992 [DEBUG] [Thread-126528] [transport.py] [_log()] server lang: <none>
2025-12-31T11:05:45.992 [DEBUG] [Thread-126528] [transport.py] [_log()] kex follows: False
2025-12-31T11:05:45.992 [DEBUG] [Thread-126528] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:05:45.992 [DEBUG] [Thread-126528] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:05:45.992 [DEBUG] [Thread-126528] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:05:45.992 [DEBUG] [Thread-126528] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:05:45.992 [DEBUG] [Thread-126528] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:05:45.992 [DEBUG] [Thread-126528] [transport.py] [_log()] Compression: none
2025-12-31T11:05:45.992 [DEBUG] [Thread-126528] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:05:46.009 [DEBUG] [Thread-126528] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:05:46.009 [DEBUG] [Thread-126528] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:05:46.010 [DEBUG] [Thread-126528] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T11:05:46.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T11:05:46.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:05:46.011 [DEBUG] [Thread-126528] [transport.py] [_log()] userauth is OK
2025-12-31T11:05:46.012 [DEBUG] [Thread-126528] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:05:46.012 [DEBUG] [Thread-126528] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:05:46.012 [DEBUG] [Thread-126528] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T11:05:46.012 [DEBUG] [Thread-126528] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:05:46.035 [INFO] [Thread-126528] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:05:46.036 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:05:46.683 [DEBUG] [Thread-126528] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:05:46.683 [DEBUG] [Thread-126528] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:05:46.683 [DEBUG] [Thread-126528] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T11:05:46.724 [DEBUG] [Thread-126528] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:05:46.724 [DEBUG] [Thread-126528] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:05:46.728 [DEBUG] [Thread-126528] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:05:46.740 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:05:46.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T11:05:46.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T11:05:46.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T11:05:46.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:05:46.754 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T11:05:46.754 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:05:46.754 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:05:46.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T11:05:46.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.378616 -999.00  +24.40  24.40     13   -5.30 1 1 1 1 1   888    0 29.95 71.83 ----- 20.4 24.4 295.0 31.4 30.6 -25.5 29.9 -24.0 28.8 -24.2 29.4 -24.3
2025-12-31T11:05:46.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T11:05:46.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T11:05:46.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.378616
2025-12-31T11:05:46.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T11:05:46.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T11:05:46.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T11:05:46.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T11:05:46.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T11:05:46.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T11:05:42', tmtdew=35.96, humidity=8.59, cloud=0.0, wind=23.61, temperature=25.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T09:05:12.422', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T11:05:46.756 [DEBUG] [Thread-126528] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:05:46.840 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T11:05:46.851 [DEBUG] [Thread-126531] [transport.py] [_log()] starting thread (client mode): 0xb6b23e20
2025-12-31T11:05:46.851 [DEBUG] [Thread-126531] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:05:46.866 [DEBUG] [Thread-126531] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T11:05:46.867 [INFO] [Thread-126531] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T11:05:46.874 [DEBUG] [Thread-126531] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:05:46.875 [DEBUG] [Thread-126531] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T11:05:46.875 [DEBUG] [Thread-126531] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:05:46.875 [DEBUG] [Thread-126531] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:05:46.875 [DEBUG] [Thread-126531] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:05:46.875 [DEBUG] [Thread-126531] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:05:46.875 [DEBUG] [Thread-126531] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:05:46.875 [DEBUG] [Thread-126531] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:05:46.875 [DEBUG] [Thread-126531] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:05:46.875 [DEBUG] [Thread-126531] [transport.py] [_log()] client lang: <none>
2025-12-31T11:05:46.875 [DEBUG] [Thread-126531] [transport.py] [_log()] server lang: <none>
2025-12-31T11:05:46.876 [DEBUG] [Thread-126531] [transport.py] [_log()] kex follows: False
2025-12-31T11:05:46.876 [DEBUG] [Thread-126531] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:05:46.876 [DEBUG] [Thread-126531] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:05:46.876 [DEBUG] [Thread-126531] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:05:46.876 [DEBUG] [Thread-126531] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:05:46.876 [DEBUG] [Thread-126531] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:05:46.876 [DEBUG] [Thread-126531] [transport.py] [_log()] Compression: none
2025-12-31T11:05:46.876 [DEBUG] [Thread-126531] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:05:46.934 [DEBUG] [Thread-126531] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:05:46.935 [DEBUG] [Thread-126531] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:05:46.935 [DEBUG] [Thread-126531] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T11:05:46.935 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T11:05:46.936 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:05:46.990 [DEBUG] [Thread-126531] [transport.py] [_log()] userauth is OK
2025-12-31T11:05:46.990 [DEBUG] [Thread-126531] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:05:46.990 [DEBUG] [Thread-126531] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:05:46.991 [DEBUG] [Thread-126531] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T11:05:46.991 [DEBUG] [Thread-126531] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:05:47.009 [INFO] [Thread-126531] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:05:47.010 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T11:05:47.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:05:47.835 [DEBUG] [Thread-126531] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:05:47.835 [DEBUG] [Thread-126531] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:05:47.883 [DEBUG] [Thread-126531] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:05:47.883 [DEBUG] [Thread-126531] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:05:47.893 [DEBUG] [Thread-126531] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:05:47.902 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:05:47.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')
2025-12-31T11:05:47.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T11:05:47.921 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:05:47.921 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:05:47.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:05:47.930 [DEBUG] [Thread-126531] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:05:58.058 [DEBUG] [Thread-126533 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:06:08.448 [DEBUG] [Thread-126534 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:06:13.100 [DEBUG] [Thread-126535 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:06:17.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T11:06:17.948 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T11:06:17.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T11:06:18.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 11, 6, 14), 36.3, 8.36, 0.0, 19.96, 25.29, 0, 0, 0, 2, 0, 0),)
2025-12-31T11:06:18.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 11:06:14
2025-12-31T11:06:18.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T11:06:18.933 [DEBUG] [Thread-126536] [transport.py] [_log()] starting thread (client mode): 0xb6b21120
2025-12-31T11:06:18.933 [DEBUG] [Thread-126536] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:06:18.957 [DEBUG] [Thread-126536] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T11:06:18.957 [INFO] [Thread-126536] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T11:06:18.959 [DEBUG] [Thread-126536] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:06:18.960 [DEBUG] [Thread-126536] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T11:06:18.960 [DEBUG] [Thread-126536] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:06:18.960 [DEBUG] [Thread-126536] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:06:18.960 [DEBUG] [Thread-126536] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:06:18.960 [DEBUG] [Thread-126536] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:06:18.960 [DEBUG] [Thread-126536] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:06:18.960 [DEBUG] [Thread-126536] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:06:18.960 [DEBUG] [Thread-126536] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:06:18.960 [DEBUG] [Thread-126536] [transport.py] [_log()] client lang: <none>
2025-12-31T11:06:18.960 [DEBUG] [Thread-126536] [transport.py] [_log()] server lang: <none>
2025-12-31T11:06:18.960 [DEBUG] [Thread-126536] [transport.py] [_log()] kex follows: False
2025-12-31T11:06:18.960 [DEBUG] [Thread-126536] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:06:18.960 [DEBUG] [Thread-126536] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:06:18.960 [DEBUG] [Thread-126536] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:06:18.960 [DEBUG] [Thread-126536] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:06:18.960 [DEBUG] [Thread-126536] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:06:18.960 [DEBUG] [Thread-126536] [transport.py] [_log()] Compression: none
2025-12-31T11:06:18.960 [DEBUG] [Thread-126536] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:06:18.978 [DEBUG] [Thread-126536] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:06:18.979 [DEBUG] [Thread-126536] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:06:18.979 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T11:06:18.980 [DEBUG] [Thread-126536] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T11:06:18.981 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:06:18.983 [DEBUG] [Thread-126536] [transport.py] [_log()] userauth is OK
2025-12-31T11:06:18.983 [DEBUG] [Thread-126536] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:06:18.983 [DEBUG] [Thread-126536] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:06:18.983 [DEBUG] [Thread-126536] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T11:06:18.983 [DEBUG] [Thread-126536] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:06:19.009 [INFO] [Thread-126536] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:06:19.009 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:06:19.808 [DEBUG] [Thread-126536] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:06:19.809 [DEBUG] [Thread-126536] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:06:19.809 [DEBUG] [Thread-126536] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T11:06:19.850 [DEBUG] [Thread-126536] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:06:19.850 [DEBUG] [Thread-126536] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:06:19.853 [DEBUG] [Thread-126536] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:06:19.864 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:06:19.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T11:06:19.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T11:06:19.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T11:06:19.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:06:19.875 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T11:06:19.875 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:06:19.875 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:06:19.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T11:06:19.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.378963 -999.00  +24.30  19.14     14   -4.70 1 1 1 1 1   888    0 30.73 76.73 ----- 17.5 19.1 298.2 22.1 30.7 -25.0 30.0 -25.1 28.9 -22.8 29.5 -23.6
2025-12-31T11:06:19.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T11:06:19.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T11:06:19.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.378963
2025-12-31T11:06:19.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T11:06:19.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T11:06:19.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T11:06:19.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T11:06:19.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T11:06:19.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T11:06:14', tmtdew=36.3, humidity=8.36, cloud=0.0, wind=19.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-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T09:05:42.403', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T11:06:19.878 [DEBUG] [Thread-126536] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:06:19.961 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T11:06:19.973 [DEBUG] [Thread-126539] [transport.py] [_log()] starting thread (client mode): 0xb6b22650
2025-12-31T11:06:19.973 [DEBUG] [Thread-126539] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:06:19.987 [DEBUG] [Thread-126539] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T11:06:19.987 [INFO] [Thread-126539] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T11:06:19.995 [DEBUG] [Thread-126539] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:06:19.995 [DEBUG] [Thread-126539] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T11:06:19.995 [DEBUG] [Thread-126539] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:06:19.995 [DEBUG] [Thread-126539] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:06:19.995 [DEBUG] [Thread-126539] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:06:19.995 [DEBUG] [Thread-126539] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:06:19.995 [DEBUG] [Thread-126539] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:06:19.995 [DEBUG] [Thread-126539] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:06:19.995 [DEBUG] [Thread-126539] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:06:19.995 [DEBUG] [Thread-126539] [transport.py] [_log()] client lang: <none>
2025-12-31T11:06:19.995 [DEBUG] [Thread-126539] [transport.py] [_log()] server lang: <none>
2025-12-31T11:06:19.995 [DEBUG] [Thread-126539] [transport.py] [_log()] kex follows: False
2025-12-31T11:06:19.995 [DEBUG] [Thread-126539] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:06:19.996 [DEBUG] [Thread-126539] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:06:19.996 [DEBUG] [Thread-126539] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:06:19.996 [DEBUG] [Thread-126539] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:06:19.996 [DEBUG] [Thread-126539] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:06:19.996 [DEBUG] [Thread-126539] [transport.py] [_log()] Compression: none
2025-12-31T11:06:19.996 [DEBUG] [Thread-126539] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:06:20.053 [DEBUG] [Thread-126539] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:06:20.054 [DEBUG] [Thread-126539] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:06:20.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T11:06:20.055 [DEBUG] [Thread-126539] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T11:06:20.055 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:06:20.110 [DEBUG] [Thread-126539] [transport.py] [_log()] userauth is OK
2025-12-31T11:06:20.110 [DEBUG] [Thread-126539] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:06:20.110 [DEBUG] [Thread-126539] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:06:20.111 [DEBUG] [Thread-126539] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T11:06:20.111 [DEBUG] [Thread-126539] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:06:20.129 [INFO] [Thread-126539] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:06:20.129 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T11:06:20.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:06:20.948 [DEBUG] [Thread-126539] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:06:20.948 [DEBUG] [Thread-126539] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:06:20.996 [DEBUG] [Thread-126539] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:06:20.996 [DEBUG] [Thread-126539] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:06:21.005 [DEBUG] [Thread-126539] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:06:21.015 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:06:21.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T11:06:21.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T11:06:21.034 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:06:21.034 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:06:21.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:06:21.046 [DEBUG] [Thread-126539] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:06:28.141 [DEBUG] [Thread-126541 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:06:30.591 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:06:30.592 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:06:43.187 [DEBUG] [Thread-126542 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:06:51.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T11:06:51.051 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T11:06:51.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T11:06:51.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 11, 6, 46), 36.1, 8.47, 0.0, 15.85, 25.04, 0, 0, 0, 2, 0, 0),)
2025-12-31T11:06:51.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 11:06:46
2025-12-31T11:06:51.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T11:06:52.027 [DEBUG] [Thread-126543] [transport.py] [_log()] starting thread (client mode): 0xb6b227a0
2025-12-31T11:06:52.027 [DEBUG] [Thread-126543] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:06:52.048 [DEBUG] [Thread-126543] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T11:06:52.048 [INFO] [Thread-126543] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T11:06:52.051 [DEBUG] [Thread-126543] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:06:52.051 [DEBUG] [Thread-126543] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T11:06:52.051 [DEBUG] [Thread-126543] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:06:52.051 [DEBUG] [Thread-126543] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:06:52.052 [DEBUG] [Thread-126543] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:06:52.052 [DEBUG] [Thread-126543] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:06:52.052 [DEBUG] [Thread-126543] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:06:52.052 [DEBUG] [Thread-126543] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:06:52.052 [DEBUG] [Thread-126543] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:06:52.052 [DEBUG] [Thread-126543] [transport.py] [_log()] client lang: <none>
2025-12-31T11:06:52.052 [DEBUG] [Thread-126543] [transport.py] [_log()] server lang: <none>
2025-12-31T11:06:52.052 [DEBUG] [Thread-126543] [transport.py] [_log()] kex follows: False
2025-12-31T11:06:52.052 [DEBUG] [Thread-126543] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:06:52.052 [DEBUG] [Thread-126543] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:06:52.052 [DEBUG] [Thread-126543] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:06:52.052 [DEBUG] [Thread-126543] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:06:52.052 [DEBUG] [Thread-126543] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:06:52.052 [DEBUG] [Thread-126543] [transport.py] [_log()] Compression: none
2025-12-31T11:06:52.052 [DEBUG] [Thread-126543] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:06:52.071 [DEBUG] [Thread-126543] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:06:52.071 [DEBUG] [Thread-126543] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:06:52.072 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T11:06:52.072 [DEBUG] [Thread-126543] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T11:06:52.073 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:06:52.075 [DEBUG] [Thread-126543] [transport.py] [_log()] userauth is OK
2025-12-31T11:06:52.075 [DEBUG] [Thread-126543] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:06:52.076 [DEBUG] [Thread-126543] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:06:52.076 [DEBUG] [Thread-126543] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T11:06:52.076 [DEBUG] [Thread-126543] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:06:52.099 [INFO] [Thread-126543] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:06:52.100 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:06:52.757 [DEBUG] [Thread-126543] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:06:52.757 [DEBUG] [Thread-126543] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:06:52.758 [DEBUG] [Thread-126543] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T11:06:52.798 [DEBUG] [Thread-126543] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:06:52.798 [DEBUG] [Thread-126543] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:06:52.802 [DEBUG] [Thread-126543] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:06:52.814 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:06:52.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T11:06:52.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T11:06:52.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T11:06:52.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:06:52.826 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T11:06:52.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:06:52.827 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:06:52.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T11:06:52.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.379310 -999.00  +24.60  15.68     13   -4.60 1 1 1 1 1   888    0 30.43 79.88 ----- 17.5 15.7 295.4 25.5 30.8 -24.5 30.2 -24.9 -999.0 -999.0 29.5 -23.4
2025-12-31T11:06:52.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T11:06:52.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T11:06:52.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.379310
2025-12-31T11:06:52.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T11:06:52.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T11:06:52.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T11:06:52.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T11:06:52.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T11:06:52.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T11:06:46', tmtdew=36.1, humidity=8.47, cloud=0.0, wind=15.85, temperature=25.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T09:06:12.384', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T11:06:52.829 [DEBUG] [Thread-126543] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:06:52.913 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T11:06:52.925 [DEBUG] [Thread-126546] [transport.py] [_log()] starting thread (client mode): 0xb6b20df0
2025-12-31T11:06:52.925 [DEBUG] [Thread-126546] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:06:52.940 [DEBUG] [Thread-126546] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T11:06:52.940 [INFO] [Thread-126546] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T11:06:52.947 [DEBUG] [Thread-126546] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:06:52.948 [DEBUG] [Thread-126546] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T11:06:52.948 [DEBUG] [Thread-126546] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:06:52.948 [DEBUG] [Thread-126546] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:06:52.948 [DEBUG] [Thread-126546] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:06:52.948 [DEBUG] [Thread-126546] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:06:52.948 [DEBUG] [Thread-126546] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:06:52.948 [DEBUG] [Thread-126546] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:06:52.948 [DEBUG] [Thread-126546] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:06:52.948 [DEBUG] [Thread-126546] [transport.py] [_log()] client lang: <none>
2025-12-31T11:06:52.948 [DEBUG] [Thread-126546] [transport.py] [_log()] server lang: <none>
2025-12-31T11:06:52.948 [DEBUG] [Thread-126546] [transport.py] [_log()] kex follows: False
2025-12-31T11:06:52.948 [DEBUG] [Thread-126546] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:06:52.948 [DEBUG] [Thread-126546] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:06:52.948 [DEBUG] [Thread-126546] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:06:52.948 [DEBUG] [Thread-126546] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:06:52.948 [DEBUG] [Thread-126546] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:06:52.948 [DEBUG] [Thread-126546] [transport.py] [_log()] Compression: none
2025-12-31T11:06:52.948 [DEBUG] [Thread-126546] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:06:53.006 [DEBUG] [Thread-126546] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:06:53.006 [DEBUG] [Thread-126546] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:06:53.007 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T11:06:53.007 [DEBUG] [Thread-126546] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T11:06:53.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:06:53.062 [DEBUG] [Thread-126546] [transport.py] [_log()] userauth is OK
2025-12-31T11:06:53.062 [DEBUG] [Thread-126546] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:06:53.063 [DEBUG] [Thread-126546] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:06:53.063 [DEBUG] [Thread-126546] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T11:06:53.063 [DEBUG] [Thread-126546] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:06:53.081 [INFO] [Thread-126546] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:06:53.081 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T11:06:53.082 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:06:53.888 [DEBUG] [Thread-126546] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:06:53.888 [DEBUG] [Thread-126546] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:06:53.936 [DEBUG] [Thread-126546] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:06:53.936 [DEBUG] [Thread-126546] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:06:53.945 [DEBUG] [Thread-126546] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:06:53.955 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:06:53.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T11:06:53.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T11:06:53.973 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:06:53.973 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:06:53.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:06:53.982 [DEBUG] [Thread-126546] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:06:58.222 [DEBUG] [Thread-126548 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:07:08.502 [DEBUG] [Thread-126549 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:07:13.267 [DEBUG] [Thread-126550 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:07:24.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T11:07:24.005 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T11:07:24.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-12-31T11:07:24.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 11, 7, 19), 36.03, 8.54, 0.0, 16.25, 25.17, 0, 0, 0, 2, 0, 0),)
2025-12-31T11:07:24.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 11:07:19
2025-12-31T11:07:24.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T11:07:24.968 [DEBUG] [Thread-126551] [transport.py] [_log()] starting thread (client mode): 0xb6b23d30
2025-12-31T11:07:24.968 [DEBUG] [Thread-126551] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:07:24.988 [DEBUG] [Thread-126551] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T11:07:24.988 [INFO] [Thread-126551] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T11:07:24.991 [DEBUG] [Thread-126551] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:07:24.991 [DEBUG] [Thread-126551] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T11:07:24.991 [DEBUG] [Thread-126551] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:07:24.991 [DEBUG] [Thread-126551] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:07:24.992 [DEBUG] [Thread-126551] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:07:24.992 [DEBUG] [Thread-126551] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:07:24.992 [DEBUG] [Thread-126551] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:07:24.992 [DEBUG] [Thread-126551] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:07:24.992 [DEBUG] [Thread-126551] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:07:24.992 [DEBUG] [Thread-126551] [transport.py] [_log()] client lang: <none>
2025-12-31T11:07:24.992 [DEBUG] [Thread-126551] [transport.py] [_log()] server lang: <none>
2025-12-31T11:07:24.992 [DEBUG] [Thread-126551] [transport.py] [_log()] kex follows: False
2025-12-31T11:07:24.992 [DEBUG] [Thread-126551] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:07:24.992 [DEBUG] [Thread-126551] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:07:24.992 [DEBUG] [Thread-126551] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:07:24.992 [DEBUG] [Thread-126551] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:07:24.992 [DEBUG] [Thread-126551] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:07:24.992 [DEBUG] [Thread-126551] [transport.py] [_log()] Compression: none
2025-12-31T11:07:24.992 [DEBUG] [Thread-126551] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:07:25.008 [DEBUG] [Thread-126551] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:07:25.008 [DEBUG] [Thread-126551] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:07:25.009 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T11:07:25.009 [DEBUG] [Thread-126551] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T11:07:25.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:07:25.011 [DEBUG] [Thread-126551] [transport.py] [_log()] userauth is OK
2025-12-31T11:07:25.011 [DEBUG] [Thread-126551] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:07:25.011 [DEBUG] [Thread-126551] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:07:25.011 [DEBUG] [Thread-126551] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T11:07:25.011 [DEBUG] [Thread-126551] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:07:25.036 [INFO] [Thread-126551] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:07:25.036 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:07:25.751 [DEBUG] [Thread-126551] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:07:25.751 [DEBUG] [Thread-126551] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:07:25.752 [DEBUG] [Thread-126551] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T11:07:25.793 [DEBUG] [Thread-126551] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:07:25.793 [DEBUG] [Thread-126551] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:07:25.795 [DEBUG] [Thread-126551] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:07:25.807 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:07:25.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T11:07:25.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T11:07:25.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T11:07:25.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:07:25.814 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T11:07:25.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:07:25.815 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:07:25.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T11:07:25.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.379657 -999.00  +24.50  16.60     13   -4.80 1 1 1 1 1   888    0 30.97 84.94 ----- 15.6 16.6 303.8 22.4 31.1 -25.2 30.3 -24.6 29.1 -22.6 29.7 -23.5
2025-12-31T11:07:25.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T11:07:25.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T11:07:25.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.379657
2025-12-31T11:07:25.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T11:07:25.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T11:07:25.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T11:07:25.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T11:07:25.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T11:07:25.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T11:07:19', tmtdew=36.03, humidity=8.54, cloud=0.0, wind=16.25, temperature=25.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T09:06:42.365', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T11:07:25.816 [DEBUG] [Thread-126551] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:07:25.903 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T11:07:25.916 [DEBUG] [Thread-126554] [transport.py] [_log()] starting thread (client mode): 0xb6bb10c0
2025-12-31T11:07:25.916 [DEBUG] [Thread-126554] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:07:25.931 [DEBUG] [Thread-126554] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T11:07:25.931 [INFO] [Thread-126554] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T11:07:25.941 [DEBUG] [Thread-126554] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:07:25.941 [DEBUG] [Thread-126554] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T11:07:25.941 [DEBUG] [Thread-126554] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:07:25.941 [DEBUG] [Thread-126554] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:07:25.941 [DEBUG] [Thread-126554] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:07:25.941 [DEBUG] [Thread-126554] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:07:25.941 [DEBUG] [Thread-126554] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:07:25.941 [DEBUG] [Thread-126554] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:07:25.941 [DEBUG] [Thread-126554] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:07:25.941 [DEBUG] [Thread-126554] [transport.py] [_log()] client lang: <none>
2025-12-31T11:07:25.941 [DEBUG] [Thread-126554] [transport.py] [_log()] server lang: <none>
2025-12-31T11:07:25.941 [DEBUG] [Thread-126554] [transport.py] [_log()] kex follows: False
2025-12-31T11:07:25.942 [DEBUG] [Thread-126554] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:07:25.942 [DEBUG] [Thread-126554] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:07:25.942 [DEBUG] [Thread-126554] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:07:25.942 [DEBUG] [Thread-126554] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:07:25.942 [DEBUG] [Thread-126554] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:07:25.942 [DEBUG] [Thread-126554] [transport.py] [_log()] Compression: none
2025-12-31T11:07:25.942 [DEBUG] [Thread-126554] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:07:25.999 [DEBUG] [Thread-126554] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:07:26.000 [DEBUG] [Thread-126554] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:07:26.000 [DEBUG] [Thread-126554] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T11:07:26.000 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T11:07:26.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:07:26.060 [DEBUG] [Thread-126554] [transport.py] [_log()] userauth is OK
2025-12-31T11:07:26.060 [DEBUG] [Thread-126554] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:07:26.060 [DEBUG] [Thread-126554] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:07:26.060 [DEBUG] [Thread-126554] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T11:07:26.060 [DEBUG] [Thread-126554] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:07:26.082 [INFO] [Thread-126554] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:07:26.083 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T11:07:26.083 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:07:26.907 [DEBUG] [Thread-126554] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:07:26.907 [DEBUG] [Thread-126554] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:07:26.957 [DEBUG] [Thread-126554] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:07:26.957 [DEBUG] [Thread-126554] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:07:26.968 [DEBUG] [Thread-126554] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:07:26.979 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:07:26.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T11:07:26.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-12-31T11:07:27.002 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:07:27.002 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:07:27.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:07:27.011 [DEBUG] [Thread-126554] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:07:28.298 [DEBUG] [Thread-126556 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:07:30.734 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:07:30.736 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:07:43.353 [DEBUG] [Thread-126557 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:07:57.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T11:07:57.013 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T11:07:57.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T11:07:57.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 11, 7, 51), 36.22, 8.39, 0.0, 17.47, 25.87, 0, 0, 0, 2, 0, 0),)
2025-12-31T11:07:57.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 11:07:51
2025-12-31T11:07:57.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T11:07:57.981 [DEBUG] [Thread-126558] [transport.py] [_log()] starting thread (client mode): 0xb6bb13c0
2025-12-31T11:07:57.981 [DEBUG] [Thread-126558] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:07:58.000 [DEBUG] [Thread-126558] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T11:07:58.000 [INFO] [Thread-126558] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T11:07:58.003 [DEBUG] [Thread-126558] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:07:58.003 [DEBUG] [Thread-126558] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T11:07:58.003 [DEBUG] [Thread-126558] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:07:58.003 [DEBUG] [Thread-126558] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:07:58.003 [DEBUG] [Thread-126558] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:07:58.004 [DEBUG] [Thread-126558] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:07:58.004 [DEBUG] [Thread-126558] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:07:58.004 [DEBUG] [Thread-126558] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:07:58.004 [DEBUG] [Thread-126558] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:07:58.004 [DEBUG] [Thread-126558] [transport.py] [_log()] client lang: <none>
2025-12-31T11:07:58.004 [DEBUG] [Thread-126558] [transport.py] [_log()] server lang: <none>
2025-12-31T11:07:58.004 [DEBUG] [Thread-126558] [transport.py] [_log()] kex follows: False
2025-12-31T11:07:58.004 [DEBUG] [Thread-126558] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:07:58.004 [DEBUG] [Thread-126558] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:07:58.004 [DEBUG] [Thread-126558] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:07:58.004 [DEBUG] [Thread-126558] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:07:58.004 [DEBUG] [Thread-126558] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:07:58.004 [DEBUG] [Thread-126558] [transport.py] [_log()] Compression: none
2025-12-31T11:07:58.004 [DEBUG] [Thread-126558] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:07:58.020 [DEBUG] [Thread-126558] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:07:58.021 [DEBUG] [Thread-126558] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:07:58.021 [DEBUG] [Thread-126558] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T11:07:58.021 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T11:07:58.022 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:07:58.023 [DEBUG] [Thread-126558] [transport.py] [_log()] userauth is OK
2025-12-31T11:07:58.023 [DEBUG] [Thread-126558] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:07:58.023 [DEBUG] [Thread-126558] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:07:58.023 [DEBUG] [Thread-126558] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T11:07:58.023 [DEBUG] [Thread-126558] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:07:58.059 [INFO] [Thread-126558] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:07:58.060 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:07:58.385 [DEBUG] [Thread-126560 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:07:58.717 [DEBUG] [Thread-126558] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:07:58.717 [DEBUG] [Thread-126558] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:07:58.717 [DEBUG] [Thread-126558] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T11:07:58.758 [DEBUG] [Thread-126558] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:07:58.758 [DEBUG] [Thread-126558] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:07:58.762 [DEBUG] [Thread-126558] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:07:58.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:07:58.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T11:07:58.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T11:07:58.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T11:07:58.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:07:58.789 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T11:07:58.789 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:07:58.789 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:07:58.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T11:07:58.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.380005 -999.00  +24.50  16.13     14   -4.40 1 1 1 1 1   888    0 31.10 94.36 ----- 23.2 16.1 296.9 17.9 31.2 -25.0 30.4 -25.1 29.3 -22.6 29.9 -23.3
2025-12-31T11:07:58.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T11:07:58.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T11:07:58.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.380005
2025-12-31T11:07:58.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T11:07:58.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T11:07:58.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T11:07:58.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T11:07:58.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T11:07:58.791 [DEBUG] [Thread-126558] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:07:58.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T11:07:51', tmtdew=36.22, humidity=8.39, cloud=0.0, wind=17.47, temperature=25.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T09:07:12.432', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T11:07:58.875 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T11:07:58.887 [DEBUG] [Thread-126562] [transport.py] [_log()] starting thread (client mode): 0xb6b22b30
2025-12-31T11:07:58.888 [DEBUG] [Thread-126562] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:07:58.902 [DEBUG] [Thread-126562] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T11:07:58.902 [INFO] [Thread-126562] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T11:07:58.910 [DEBUG] [Thread-126562] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:07:58.910 [DEBUG] [Thread-126562] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T11:07:58.910 [DEBUG] [Thread-126562] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:07:58.911 [DEBUG] [Thread-126562] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:07:58.911 [DEBUG] [Thread-126562] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:07:58.911 [DEBUG] [Thread-126562] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:07:58.911 [DEBUG] [Thread-126562] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:07:58.911 [DEBUG] [Thread-126562] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:07:58.911 [DEBUG] [Thread-126562] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:07:58.911 [DEBUG] [Thread-126562] [transport.py] [_log()] client lang: <none>
2025-12-31T11:07:58.911 [DEBUG] [Thread-126562] [transport.py] [_log()] server lang: <none>
2025-12-31T11:07:58.912 [DEBUG] [Thread-126562] [transport.py] [_log()] kex follows: False
2025-12-31T11:07:58.912 [DEBUG] [Thread-126562] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:07:58.912 [DEBUG] [Thread-126562] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:07:58.912 [DEBUG] [Thread-126562] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:07:58.912 [DEBUG] [Thread-126562] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:07:58.913 [DEBUG] [Thread-126562] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:07:58.913 [DEBUG] [Thread-126562] [transport.py] [_log()] Compression: none
2025-12-31T11:07:58.913 [DEBUG] [Thread-126562] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:07:58.969 [DEBUG] [Thread-126562] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:07:58.970 [DEBUG] [Thread-126562] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:07:58.970 [DEBUG] [Thread-126562] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T11:07:58.971 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T11:07:58.971 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:07:59.030 [DEBUG] [Thread-126562] [transport.py] [_log()] userauth is OK
2025-12-31T11:07:59.030 [DEBUG] [Thread-126562] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:07:59.030 [DEBUG] [Thread-126562] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:07:59.030 [DEBUG] [Thread-126562] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T11:07:59.031 [DEBUG] [Thread-126562] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:07:59.049 [INFO] [Thread-126562] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:07:59.050 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T11:07:59.050 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:07:59.920 [DEBUG] [Thread-126562] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:07:59.921 [DEBUG] [Thread-126562] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:07:59.972 [DEBUG] [Thread-126562] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:07:59.973 [DEBUG] [Thread-126562] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:07:59.982 [DEBUG] [Thread-126562] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:07:59.991 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:07: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-12-31T11:08: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-12-31T11:08:00.010 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:08:00.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:08:00.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:08:00.019 [DEBUG] [Thread-126562] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:08:08.535 [DEBUG] [Thread-126564 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:08:13.424 [DEBUG] [Thread-126565 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:08:28.477 [DEBUG] [Thread-126566 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:08:30.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T11:08:30.041 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T11:08:30.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-12-31T11:08:30.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 11, 8, 23), 36.19, 8.41, 0.0, 20.75, 25.85, 0, 0, 0, 2, 0, 0),)
2025-12-31T11:08:30.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 11:08:23
2025-12-31T11:08:30.877 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:08:30.878 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:08:30.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T11:08:31.056 [DEBUG] [Thread-126567] [transport.py] [_log()] starting thread (client mode): 0xb6b22b30
2025-12-31T11:08:31.056 [DEBUG] [Thread-126567] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:08:31.076 [DEBUG] [Thread-126567] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T11:08:31.076 [INFO] [Thread-126567] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T11:08:31.080 [DEBUG] [Thread-126567] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:08:31.080 [DEBUG] [Thread-126567] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T11:08:31.080 [DEBUG] [Thread-126567] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:08:31.080 [DEBUG] [Thread-126567] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:08:31.080 [DEBUG] [Thread-126567] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:08:31.080 [DEBUG] [Thread-126567] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:08:31.080 [DEBUG] [Thread-126567] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:08:31.080 [DEBUG] [Thread-126567] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:08:31.080 [DEBUG] [Thread-126567] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:08:31.080 [DEBUG] [Thread-126567] [transport.py] [_log()] client lang: <none>
2025-12-31T11:08:31.080 [DEBUG] [Thread-126567] [transport.py] [_log()] server lang: <none>
2025-12-31T11:08:31.080 [DEBUG] [Thread-126567] [transport.py] [_log()] kex follows: False
2025-12-31T11:08:31.080 [DEBUG] [Thread-126567] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:08:31.080 [DEBUG] [Thread-126567] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:08:31.080 [DEBUG] [Thread-126567] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:08:31.080 [DEBUG] [Thread-126567] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:08:31.080 [DEBUG] [Thread-126567] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:08:31.080 [DEBUG] [Thread-126567] [transport.py] [_log()] Compression: none
2025-12-31T11:08:31.080 [DEBUG] [Thread-126567] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:08:31.096 [DEBUG] [Thread-126567] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:08:31.096 [DEBUG] [Thread-126567] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:08:31.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T11:08:31.097 [DEBUG] [Thread-126567] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T11:08:31.097 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:08:31.097 [DEBUG] [Thread-126567] [transport.py] [_log()] userauth is OK
2025-12-31T11:08:31.097 [DEBUG] [Thread-126567] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:08:31.097 [DEBUG] [Thread-126567] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:08:31.097 [DEBUG] [Thread-126567] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T11:08:31.097 [DEBUG] [Thread-126567] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:08:31.110 [INFO] [Thread-126567] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:08:31.110 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:08:31.852 [DEBUG] [Thread-126567] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:08:31.853 [DEBUG] [Thread-126567] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:08:31.853 [DEBUG] [Thread-126567] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T11:08:31.894 [DEBUG] [Thread-126567] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:08:31.894 [DEBUG] [Thread-126567] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:08:31.897 [DEBUG] [Thread-126567] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:08:31.910 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:08:31.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T11:08:31.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T11:08:31.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T11:08:31.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:08:31.919 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T11:08:31.919 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:08:31.919 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:08:31.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T11:08:31.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.380352 -999.00  +24.80  22.65     13   -4.70 1 1 1 1 1   888    0 31.74 93.48 ----- 23.7 22.6 295.6 26.8 31.4 -26.4 30.6 -24.9 29.4 -25.4 30.0 -24.5
2025-12-31T11:08:31.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T11:08:31.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T11:08:31.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.380352
2025-12-31T11:08:31.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T11:08:31.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T11:08:31.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T11:08:31.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T11:08:31.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T11:08:31.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T11:08:23', tmtdew=36.19, humidity=8.41, cloud=0.0, wind=20.75, temperature=25.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T09:07:42.413', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T11:08:31.921 [DEBUG] [Thread-126567] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:08: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-12-31T11:08:32.006 [DEBUG] [Thread-126570] [transport.py] [_log()] starting thread (client mode): 0xb6b21120
2025-12-31T11:08:32.006 [DEBUG] [Thread-126570] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:08:32.021 [DEBUG] [Thread-126570] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T11:08:32.021 [INFO] [Thread-126570] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T11:08:32.028 [DEBUG] [Thread-126570] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:08:32.028 [DEBUG] [Thread-126570] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T11:08:32.028 [DEBUG] [Thread-126570] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:08:32.028 [DEBUG] [Thread-126570] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:08:32.028 [DEBUG] [Thread-126570] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:08:32.028 [DEBUG] [Thread-126570] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:08:32.028 [DEBUG] [Thread-126570] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:08:32.029 [DEBUG] [Thread-126570] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:08:32.029 [DEBUG] [Thread-126570] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:08:32.029 [DEBUG] [Thread-126570] [transport.py] [_log()] client lang: <none>
2025-12-31T11:08:32.029 [DEBUG] [Thread-126570] [transport.py] [_log()] server lang: <none>
2025-12-31T11:08:32.029 [DEBUG] [Thread-126570] [transport.py] [_log()] kex follows: False
2025-12-31T11:08:32.029 [DEBUG] [Thread-126570] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:08:32.029 [DEBUG] [Thread-126570] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:08:32.029 [DEBUG] [Thread-126570] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:08:32.029 [DEBUG] [Thread-126570] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:08:32.029 [DEBUG] [Thread-126570] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:08:32.029 [DEBUG] [Thread-126570] [transport.py] [_log()] Compression: none
2025-12-31T11:08:32.029 [DEBUG] [Thread-126570] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:08:32.088 [DEBUG] [Thread-126570] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:08:32.089 [DEBUG] [Thread-126570] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:08:32.089 [DEBUG] [Thread-126570] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T11:08:32.089 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T11:08:32.089 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:08:32.145 [DEBUG] [Thread-126570] [transport.py] [_log()] userauth is OK
2025-12-31T11:08:32.145 [DEBUG] [Thread-126570] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:08:32.145 [DEBUG] [Thread-126570] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:08:32.145 [DEBUG] [Thread-126570] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T11:08:32.145 [DEBUG] [Thread-126570] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:08:32.159 [INFO] [Thread-126570] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:08: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-12-31T11:08:32.159 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:08:32.966 [DEBUG] [Thread-126570] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:08:32.966 [DEBUG] [Thread-126570] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:08:33.013 [DEBUG] [Thread-126570] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:08:33.013 [DEBUG] [Thread-126570] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:08:33.022 [DEBUG] [Thread-126570] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:08:33.030 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:08:33.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T11:08:33.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T11:08:33.046 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:08:33.046 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:08:33.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:08:33.054 [DEBUG] [Thread-126570] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:08:43.507 [DEBUG] [Thread-126572 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:08:58.562 [DEBUG] [Thread-126573 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:09:03.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T11:09:03.076 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T11:09:03.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T11:09:03.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 11, 8, 56), 37.14, 7.72, 0.0, 21.03, 25.87, 0, 0, 0, 2, 0, 0),)
2025-12-31T11:09:03.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 11:08:56
2025-12-31T11:09:03.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T11:09:04.064 [DEBUG] [Thread-126574] [transport.py] [_log()] starting thread (client mode): 0xb6bb1270
2025-12-31T11:09:04.064 [DEBUG] [Thread-126574] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:09:04.084 [DEBUG] [Thread-126574] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T11:09:04.084 [INFO] [Thread-126574] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T11:09:04.087 [DEBUG] [Thread-126574] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:09:04.087 [DEBUG] [Thread-126574] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T11:09:04.087 [DEBUG] [Thread-126574] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:09:04.087 [DEBUG] [Thread-126574] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:09:04.087 [DEBUG] [Thread-126574] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:09:04.087 [DEBUG] [Thread-126574] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:09:04.087 [DEBUG] [Thread-126574] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:09:04.087 [DEBUG] [Thread-126574] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:09:04.087 [DEBUG] [Thread-126574] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:09:04.087 [DEBUG] [Thread-126574] [transport.py] [_log()] client lang: <none>
2025-12-31T11:09:04.087 [DEBUG] [Thread-126574] [transport.py] [_log()] server lang: <none>
2025-12-31T11:09:04.087 [DEBUG] [Thread-126574] [transport.py] [_log()] kex follows: False
2025-12-31T11:09:04.087 [DEBUG] [Thread-126574] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:09:04.087 [DEBUG] [Thread-126574] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:09:04.087 [DEBUG] [Thread-126574] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:09:04.087 [DEBUG] [Thread-126574] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:09:04.087 [DEBUG] [Thread-126574] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:09:04.087 [DEBUG] [Thread-126574] [transport.py] [_log()] Compression: none
2025-12-31T11:09:04.087 [DEBUG] [Thread-126574] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:09:04.104 [DEBUG] [Thread-126574] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:09:04.105 [DEBUG] [Thread-126574] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:09:04.105 [DEBUG] [Thread-126574] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T11:09:04.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T11:09:04.106 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:09:04.107 [DEBUG] [Thread-126574] [transport.py] [_log()] userauth is OK
2025-12-31T11:09:04.107 [DEBUG] [Thread-126574] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:09:04.107 [DEBUG] [Thread-126574] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:09:04.107 [DEBUG] [Thread-126574] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T11:09:04.107 [DEBUG] [Thread-126574] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:09:04.124 [INFO] [Thread-126574] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:09:04.125 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:09:04.781 [DEBUG] [Thread-126574] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:09:04.781 [DEBUG] [Thread-126574] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:09:04.782 [DEBUG] [Thread-126574] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T11:09:04.822 [DEBUG] [Thread-126574] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:09:04.822 [DEBUG] [Thread-126574] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:09:04.826 [DEBUG] [Thread-126574] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:09:04.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:09:04.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T11:09:04.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T11:09:04.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T11:09:04.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:09:04.849 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T11:09:04.849 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:09:04.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:09:04.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T11:09:04.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.381046 -999.00  +24.50  17.73     13   -5.00 1 1 1 1 1   888    0 31.00 96.17 ----- 18.8 17.7 277.4 23.1 31.4 -26.8 30.7 -25.5 29.5 -23.2 30.1 -24.0
2025-12-31T11:09:04.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T11:09:04.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T11:09:04.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.381046
2025-12-31T11:09:04.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T11:09:04.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T11:09:04.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T11:09:04.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T11:09:04.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T11:09:04.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T11:08:56', tmtdew=37.14, humidity=7.72, cloud=0.0, wind=21.03, temperature=25.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T09:08:42.374', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T11:09:04.852 [DEBUG] [Thread-126574] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:09:04.936 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T11:09:04.949 [DEBUG] [Thread-126577] [transport.py] [_log()] starting thread (client mode): 0xb6bb1240
2025-12-31T11:09:04.949 [DEBUG] [Thread-126577] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:09:04.964 [DEBUG] [Thread-126577] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T11:09:04.964 [INFO] [Thread-126577] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T11:09:04.972 [DEBUG] [Thread-126577] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:09:04.972 [DEBUG] [Thread-126577] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T11:09:04.972 [DEBUG] [Thread-126577] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:09:04.972 [DEBUG] [Thread-126577] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:09:04.972 [DEBUG] [Thread-126577] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:09:04.972 [DEBUG] [Thread-126577] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:09:04.972 [DEBUG] [Thread-126577] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:09:04.972 [DEBUG] [Thread-126577] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:09:04.972 [DEBUG] [Thread-126577] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:09:04.972 [DEBUG] [Thread-126577] [transport.py] [_log()] client lang: <none>
2025-12-31T11:09:04.972 [DEBUG] [Thread-126577] [transport.py] [_log()] server lang: <none>
2025-12-31T11:09:04.972 [DEBUG] [Thread-126577] [transport.py] [_log()] kex follows: False
2025-12-31T11:09:04.972 [DEBUG] [Thread-126577] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:09:04.973 [DEBUG] [Thread-126577] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:09:04.973 [DEBUG] [Thread-126577] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:09:04.973 [DEBUG] [Thread-126577] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:09:04.973 [DEBUG] [Thread-126577] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:09:04.973 [DEBUG] [Thread-126577] [transport.py] [_log()] Compression: none
2025-12-31T11:09:04.973 [DEBUG] [Thread-126577] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:09:05.027 [DEBUG] [Thread-126577] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:09:05.028 [DEBUG] [Thread-126577] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:09:05.028 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T11:09:05.028 [DEBUG] [Thread-126577] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T11:09:05.028 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:09:05.089 [DEBUG] [Thread-126577] [transport.py] [_log()] userauth is OK
2025-12-31T11:09:05.090 [DEBUG] [Thread-126577] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:09:05.090 [DEBUG] [Thread-126577] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:09:05.090 [DEBUG] [Thread-126577] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T11:09:05.090 [DEBUG] [Thread-126577] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:09:05.113 [INFO] [Thread-126577] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:09:05.113 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T11:09:05.113 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:09:06.010 [DEBUG] [Thread-126577] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:09:06.010 [DEBUG] [Thread-126577] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:09:06.061 [DEBUG] [Thread-126577] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:09:06.061 [DEBUG] [Thread-126577] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:09:06.074 [DEBUG] [Thread-126577] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:09:06.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:09:06.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T11:09:06.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T11:09:06.101 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:09:06.101 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:09:06.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:09:06.113 [DEBUG] [Thread-126577] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:09:08.563 [DEBUG] [Thread-126579 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:09:13.594 [DEBUG] [Thread-126580 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:09:28.632 [DEBUG] [Thread-126581 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:09:31.016 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:09:31.018 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:09:36.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T11:09:36.132 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T11:09:36.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T11:09:36.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 11, 9, 28), 36.64, 7.96, 0.0, 20.57, 25.4, 0, 0, 0, 2, 0, 0),)
2025-12-31T11:09:36.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 11:09:28
2025-12-31T11:09:36.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T11:09:37.104 [DEBUG] [Thread-126582] [transport.py] [_log()] starting thread (client mode): 0xb6b236a0
2025-12-31T11:09:37.104 [DEBUG] [Thread-126582] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:09:37.124 [DEBUG] [Thread-126582] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T11:09:37.124 [INFO] [Thread-126582] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T11:09:37.126 [DEBUG] [Thread-126582] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:09:37.126 [DEBUG] [Thread-126582] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T11:09:37.126 [DEBUG] [Thread-126582] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:09:37.126 [DEBUG] [Thread-126582] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:09:37.126 [DEBUG] [Thread-126582] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:09:37.126 [DEBUG] [Thread-126582] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:09:37.126 [DEBUG] [Thread-126582] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:09:37.126 [DEBUG] [Thread-126582] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:09:37.126 [DEBUG] [Thread-126582] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:09:37.126 [DEBUG] [Thread-126582] [transport.py] [_log()] client lang: <none>
2025-12-31T11:09:37.126 [DEBUG] [Thread-126582] [transport.py] [_log()] server lang: <none>
2025-12-31T11:09:37.127 [DEBUG] [Thread-126582] [transport.py] [_log()] kex follows: False
2025-12-31T11:09:37.127 [DEBUG] [Thread-126582] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:09:37.127 [DEBUG] [Thread-126582] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:09:37.127 [DEBUG] [Thread-126582] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:09:37.127 [DEBUG] [Thread-126582] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:09:37.127 [DEBUG] [Thread-126582] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:09:37.127 [DEBUG] [Thread-126582] [transport.py] [_log()] Compression: none
2025-12-31T11:09:37.127 [DEBUG] [Thread-126582] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:09:37.140 [DEBUG] [Thread-126582] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:09:37.141 [DEBUG] [Thread-126582] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:09:37.141 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T11:09:37.142 [DEBUG] [Thread-126582] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T11:09:37.143 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:09:37.144 [DEBUG] [Thread-126582] [transport.py] [_log()] userauth is OK
2025-12-31T11:09:37.144 [DEBUG] [Thread-126582] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:09:37.145 [DEBUG] [Thread-126582] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:09:37.145 [DEBUG] [Thread-126582] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T11:09:37.145 [DEBUG] [Thread-126582] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:09:37.165 [INFO] [Thread-126582] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:09:37.165 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:09:37.897 [DEBUG] [Thread-126582] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:09:37.897 [DEBUG] [Thread-126582] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:09:37.897 [DEBUG] [Thread-126582] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T11:09:37.938 [DEBUG] [Thread-126582] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:09:37.938 [DEBUG] [Thread-126582] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:09:37.941 [DEBUG] [Thread-126582] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:09:37.955 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:09:37.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T11:09:37.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T11:09:37.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T11:09:37.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:09:37.967 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T11:09:37.967 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:09:37.967 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:09:37.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T11:09:37.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.381393 -999.00  +24.90  22.23     13   -4.90 1 1 1 1 1   888    0 31.16 94.20 ----- 22.6 22.2 296.8 27.0 31.6 -27.1 30.8 -25.2 29.5 -24.1 30.1 -25.0
2025-12-31T11:09:37.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T11:09:37.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T11:09:37.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.381393
2025-12-31T11:09:37.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T11:09:37.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T11:09:37.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T11:09:37.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T11:09:37.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T11:09:37.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T11:09:28', tmtdew=36.64, humidity=7.96, cloud=0.0, wind=20.57, temperature=25.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T09:09:12.355', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T11:09:37.970 [DEBUG] [Thread-126582] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:09:38.066 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T11:09:38.077 [DEBUG] [Thread-126585] [transport.py] [_log()] starting thread (client mode): 0xb6b22380
2025-12-31T11:09:38.077 [DEBUG] [Thread-126585] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:09:38.092 [DEBUG] [Thread-126585] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T11:09:38.092 [INFO] [Thread-126585] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T11:09:38.099 [DEBUG] [Thread-126585] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:09:38.099 [DEBUG] [Thread-126585] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T11:09:38.099 [DEBUG] [Thread-126585] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:09:38.099 [DEBUG] [Thread-126585] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:09:38.099 [DEBUG] [Thread-126585] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:09:38.099 [DEBUG] [Thread-126585] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:09:38.099 [DEBUG] [Thread-126585] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:09:38.099 [DEBUG] [Thread-126585] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:09:38.100 [DEBUG] [Thread-126585] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:09:38.100 [DEBUG] [Thread-126585] [transport.py] [_log()] client lang: <none>
2025-12-31T11:09:38.100 [DEBUG] [Thread-126585] [transport.py] [_log()] server lang: <none>
2025-12-31T11:09:38.100 [DEBUG] [Thread-126585] [transport.py] [_log()] kex follows: False
2025-12-31T11:09:38.100 [DEBUG] [Thread-126585] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:09:38.100 [DEBUG] [Thread-126585] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:09:38.100 [DEBUG] [Thread-126585] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:09:38.100 [DEBUG] [Thread-126585] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:09:38.100 [DEBUG] [Thread-126585] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:09:38.100 [DEBUG] [Thread-126585] [transport.py] [_log()] Compression: none
2025-12-31T11:09:38.100 [DEBUG] [Thread-126585] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:09:38.157 [DEBUG] [Thread-126585] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:09:38.158 [DEBUG] [Thread-126585] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:09:38.158 [DEBUG] [Thread-126585] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T11:09:38.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T11:09:38.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:09:38.214 [DEBUG] [Thread-126585] [transport.py] [_log()] userauth is OK
2025-12-31T11:09:38.214 [DEBUG] [Thread-126585] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:09:38.214 [DEBUG] [Thread-126585] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:09:38.214 [DEBUG] [Thread-126585] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T11:09:38.214 [DEBUG] [Thread-126585] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:09:38.234 [INFO] [Thread-126585] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:09:38.234 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T11:09:38.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:09:39.072 [DEBUG] [Thread-126585] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:09:39.073 [DEBUG] [Thread-126585] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:09:39.121 [DEBUG] [Thread-126585] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:09:39.121 [DEBUG] [Thread-126585] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:09:39.131 [DEBUG] [Thread-126585] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:09:39.140 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:09:39.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T11:09:39.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T11:09:39.160 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:09:39.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:09:39.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:09:39.169 [DEBUG] [Thread-126585] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:09:43.666 [DEBUG] [Thread-126587 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:09:58.715 [DEBUG] [Thread-126588 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:10:08.608 [DEBUG] [Thread-126589 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:10:09.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T11:10:09.191 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T11:10:09.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T11:10:09.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 11, 9, 28), 36.64, 7.96, 0.0, 20.57, 25.4, 0, 0, 0, 2, 0, 0),)
2025-12-31T11:10:09.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 11:09:28
2025-12-31T11:10:10.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T11:10:10.170 [DEBUG] [Thread-126590] [transport.py] [_log()] starting thread (client mode): 0xb6b225c0
2025-12-31T11:10:10.170 [DEBUG] [Thread-126590] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:10:10.186 [DEBUG] [Thread-126590] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T11:10:10.186 [INFO] [Thread-126590] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T11:10:10.190 [DEBUG] [Thread-126590] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:10:10.190 [DEBUG] [Thread-126590] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T11:10:10.190 [DEBUG] [Thread-126590] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:10:10.190 [DEBUG] [Thread-126590] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:10:10.190 [DEBUG] [Thread-126590] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:10:10.190 [DEBUG] [Thread-126590] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:10:10.190 [DEBUG] [Thread-126590] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:10:10.190 [DEBUG] [Thread-126590] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:10:10.190 [DEBUG] [Thread-126590] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:10:10.190 [DEBUG] [Thread-126590] [transport.py] [_log()] client lang: <none>
2025-12-31T11:10:10.190 [DEBUG] [Thread-126590] [transport.py] [_log()] server lang: <none>
2025-12-31T11:10:10.190 [DEBUG] [Thread-126590] [transport.py] [_log()] kex follows: False
2025-12-31T11:10:10.190 [DEBUG] [Thread-126590] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:10:10.190 [DEBUG] [Thread-126590] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:10:10.190 [DEBUG] [Thread-126590] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:10:10.190 [DEBUG] [Thread-126590] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:10:10.190 [DEBUG] [Thread-126590] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:10:10.190 [DEBUG] [Thread-126590] [transport.py] [_log()] Compression: none
2025-12-31T11:10:10.190 [DEBUG] [Thread-126590] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:10:10.207 [DEBUG] [Thread-126590] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:10:10.208 [DEBUG] [Thread-126590] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:10:10.208 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T11:10:10.209 [DEBUG] [Thread-126590] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T11:10:10.209 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:10:10.210 [DEBUG] [Thread-126590] [transport.py] [_log()] userauth is OK
2025-12-31T11:10:10.211 [DEBUG] [Thread-126590] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:10:10.211 [DEBUG] [Thread-126590] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:10:10.211 [DEBUG] [Thread-126590] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T11:10:10.211 [DEBUG] [Thread-126590] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:10:10.235 [INFO] [Thread-126590] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:10:10.236 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:10:12.802 [DEBUG] [Thread-126590] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:10:12.802 [DEBUG] [Thread-126590] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:10:12.803 [DEBUG] [Thread-126590] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T11:10:12.843 [DEBUG] [Thread-126590] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:10:12.843 [DEBUG] [Thread-126590] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:10:12.846 [DEBUG] [Thread-126590] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:10:12.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:10:12.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T11:10:12.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T11:10:12.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T11:10:12.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:10:12.870 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T11:10:12.870 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:10:12.871 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:10:12.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T11:10:12.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.381741 -999.00  +24.70  16.86     13   -4.70 1 1 1 1 1   888    0 31.81 100.08 ----- 15.7 16.9 304.8 25.5 31.6 -25.8 30.8 -26.3 29.6 -24.6 30.3 -23.9
2025-12-31T11:10:12.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T11:10:12.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T11:10:12.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.381741
2025-12-31T11:10:12.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T11:10:12.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T11:10:12.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T11:10:12.873 [DEBUG] [Thread-126590] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:10:12.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T11:10:12.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T11:10:12.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T11:09:28', tmtdew=36.64, humidity=7.96, cloud=0.0, wind=20.57, temperature=25.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T09:09:42.422', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T11:10:12.957 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T11:10:12.969 [DEBUG] [Thread-126593] [transport.py] [_log()] starting thread (client mode): 0xb6b20400
2025-12-31T11:10:12.970 [DEBUG] [Thread-126593] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:10:12.984 [DEBUG] [Thread-126593] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T11:10:12.985 [INFO] [Thread-126593] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T11:10:12.992 [DEBUG] [Thread-126593] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:10:12.992 [DEBUG] [Thread-126593] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T11:10:12.992 [DEBUG] [Thread-126593] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:10:12.993 [DEBUG] [Thread-126593] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:10:12.993 [DEBUG] [Thread-126593] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:10:12.993 [DEBUG] [Thread-126593] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:10:12.993 [DEBUG] [Thread-126593] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:10:12.993 [DEBUG] [Thread-126593] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:10:12.993 [DEBUG] [Thread-126593] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:10:12.993 [DEBUG] [Thread-126593] [transport.py] [_log()] client lang: <none>
2025-12-31T11:10:12.993 [DEBUG] [Thread-126593] [transport.py] [_log()] server lang: <none>
2025-12-31T11:10:12.993 [DEBUG] [Thread-126593] [transport.py] [_log()] kex follows: False
2025-12-31T11:10:12.994 [DEBUG] [Thread-126593] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:10:12.994 [DEBUG] [Thread-126593] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:10:12.994 [DEBUG] [Thread-126593] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:10:12.994 [DEBUG] [Thread-126593] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:10:12.994 [DEBUG] [Thread-126593] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:10:12.994 [DEBUG] [Thread-126593] [transport.py] [_log()] Compression: none
2025-12-31T11:10:12.994 [DEBUG] [Thread-126593] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:10:13.050 [DEBUG] [Thread-126593] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:10:13.051 [DEBUG] [Thread-126593] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:10:13.051 [DEBUG] [Thread-126593] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T11:10:13.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T11:10:13.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:10:13.105 [DEBUG] [Thread-126593] [transport.py] [_log()] userauth is OK
2025-12-31T11:10:13.106 [DEBUG] [Thread-126593] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:10:13.106 [DEBUG] [Thread-126593] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:10:13.106 [DEBUG] [Thread-126593] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T11:10:13.106 [DEBUG] [Thread-126593] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:10:13.124 [INFO] [Thread-126593] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:10:13.124 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T11:10:13.125 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:10:13.755 [DEBUG] [Thread-126595 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:10:13.965 [DEBUG] [Thread-126593] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:10:13.965 [DEBUG] [Thread-126593] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:10:14.012 [DEBUG] [Thread-126593] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:10:14.013 [DEBUG] [Thread-126593] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:10:14.021 [DEBUG] [Thread-126593] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:10:14.030 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:10:14.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T11:10:14.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-12-31T11:10:14.048 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:10:14.048 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:10:14.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:10:14.056 [DEBUG] [Thread-126593] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:10:28.805 [DEBUG] [Thread-126596 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:10:31.160 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:10:31.161 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:10:43.838 [DEBUG] [Thread-126597 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:10:44.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T11:10:44.079 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T11:10:44.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T11:10:44.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 11, 10, 32), 36.77, 7.91, 0.0, 19.52, 25.82, 0, 0, 0, 2, 0, 0),)
2025-12-31T11:10:44.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 11:10:32
2025-12-31T11:10:44.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T11:10:45.050 [DEBUG] [Thread-126598] [transport.py] [_log()] starting thread (client mode): 0xb6b21b70
2025-12-31T11:10:45.050 [DEBUG] [Thread-126598] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:10:45.070 [DEBUG] [Thread-126598] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T11:10:45.071 [INFO] [Thread-126598] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T11:10:45.074 [DEBUG] [Thread-126598] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:10:45.074 [DEBUG] [Thread-126598] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T11:10:45.074 [DEBUG] [Thread-126598] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:10:45.074 [DEBUG] [Thread-126598] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:10:45.074 [DEBUG] [Thread-126598] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:10:45.074 [DEBUG] [Thread-126598] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:10:45.074 [DEBUG] [Thread-126598] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:10:45.075 [DEBUG] [Thread-126598] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:10:45.075 [DEBUG] [Thread-126598] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:10:45.075 [DEBUG] [Thread-126598] [transport.py] [_log()] client lang: <none>
2025-12-31T11:10:45.075 [DEBUG] [Thread-126598] [transport.py] [_log()] server lang: <none>
2025-12-31T11:10:45.075 [DEBUG] [Thread-126598] [transport.py] [_log()] kex follows: False
2025-12-31T11:10:45.075 [DEBUG] [Thread-126598] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:10:45.075 [DEBUG] [Thread-126598] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:10:45.075 [DEBUG] [Thread-126598] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:10:45.075 [DEBUG] [Thread-126598] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:10:45.075 [DEBUG] [Thread-126598] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:10:45.075 [DEBUG] [Thread-126598] [transport.py] [_log()] Compression: none
2025-12-31T11:10:45.075 [DEBUG] [Thread-126598] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:10:45.095 [DEBUG] [Thread-126598] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:10:45.095 [DEBUG] [Thread-126598] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:10:45.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T11:10:45.096 [DEBUG] [Thread-126598] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T11:10:45.097 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:10:45.099 [DEBUG] [Thread-126598] [transport.py] [_log()] userauth is OK
2025-12-31T11:10:45.099 [DEBUG] [Thread-126598] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:10:45.099 [DEBUG] [Thread-126598] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:10:45.099 [DEBUG] [Thread-126598] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T11:10:45.099 [DEBUG] [Thread-126598] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:10:45.119 [INFO] [Thread-126598] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:10:45.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:10:45.706 [DEBUG] [Thread-126598] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:10:45.707 [DEBUG] [Thread-126598] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:10:45.707 [DEBUG] [Thread-126598] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T11:10:45.748 [DEBUG] [Thread-126598] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:10:45.748 [DEBUG] [Thread-126598] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:10:45.751 [DEBUG] [Thread-126598] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:10:45.763 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:10:45.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T11:10:45.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T11:10:45.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T11:10:45.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:10:45.771 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T11:10:45.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:10:45.771 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:10:45.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T11:10:45.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.382088 -999.00  +25.30  16.68     13   -4.60 1 1 1 1 1   888    0 31.86 110.85 ----- 17.0 16.7 296.4 25.2 31.8 -25.9 30.9 -24.5 29.9 -22.7 30.4 -23.6
2025-12-31T11:10:45.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T11:10:45.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T11:10:45.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.382088
2025-12-31T11:10:45.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T11:10:45.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T11:10:45.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T11:10:45.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T11:10:45.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T11:10:45.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T11:10:32', tmtdew=36.77, humidity=7.91, cloud=0.0, wind=19.52, temperature=25.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T09:10:12.403', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T11:10:45.773 [DEBUG] [Thread-126598] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:10:45.859 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T11:10:45.870 [DEBUG] [Thread-126601] [transport.py] [_log()] starting thread (client mode): 0xb6b22500
2025-12-31T11:10:45.870 [DEBUG] [Thread-126601] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:10:45.885 [DEBUG] [Thread-126601] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T11:10:45.885 [INFO] [Thread-126601] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T11:10:45.892 [DEBUG] [Thread-126601] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:10:45.893 [DEBUG] [Thread-126601] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T11:10:45.893 [DEBUG] [Thread-126601] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:10:45.893 [DEBUG] [Thread-126601] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:10:45.893 [DEBUG] [Thread-126601] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:10:45.893 [DEBUG] [Thread-126601] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:10:45.893 [DEBUG] [Thread-126601] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:10:45.893 [DEBUG] [Thread-126601] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:10:45.893 [DEBUG] [Thread-126601] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:10:45.893 [DEBUG] [Thread-126601] [transport.py] [_log()] client lang: <none>
2025-12-31T11:10:45.893 [DEBUG] [Thread-126601] [transport.py] [_log()] server lang: <none>
2025-12-31T11:10:45.893 [DEBUG] [Thread-126601] [transport.py] [_log()] kex follows: False
2025-12-31T11:10:45.893 [DEBUG] [Thread-126601] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:10:45.893 [DEBUG] [Thread-126601] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:10:45.893 [DEBUG] [Thread-126601] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:10:45.893 [DEBUG] [Thread-126601] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:10:45.893 [DEBUG] [Thread-126601] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:10:45.893 [DEBUG] [Thread-126601] [transport.py] [_log()] Compression: none
2025-12-31T11:10:45.893 [DEBUG] [Thread-126601] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:10:45.955 [DEBUG] [Thread-126601] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:10:45.955 [DEBUG] [Thread-126601] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:10:45.956 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T11:10:45.957 [DEBUG] [Thread-126601] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T11:10:45.958 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:10:46.019 [DEBUG] [Thread-126601] [transport.py] [_log()] userauth is OK
2025-12-31T11:10:46.019 [DEBUG] [Thread-126601] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:10:46.019 [DEBUG] [Thread-126601] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:10:46.019 [DEBUG] [Thread-126601] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T11:10:46.019 [DEBUG] [Thread-126601] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:10:46.040 [INFO] [Thread-126601] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:10:46.040 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T11:10:46.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:10:46.861 [DEBUG] [Thread-126601] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:10:46.861 [DEBUG] [Thread-126601] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:10:46.909 [DEBUG] [Thread-126601] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:10:46.909 [DEBUG] [Thread-126601] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:10:46.922 [DEBUG] [Thread-126601] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:10:46.933 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:10:46.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T11:10:46.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T11:10:46.955 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:10:46.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:10:46.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:10:46.968 [DEBUG] [Thread-126601] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:10:58.877 [DEBUG] [Thread-126603 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:11:08.636 [DEBUG] [Thread-126604 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:11:13.925 [DEBUG] [Thread-126605 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:11:16.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T11:11:16.959 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T11:11:16.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T11:11:17.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 11, 11, 4), 36.61, 8.01, 0.0, 19.39, 25.84, 0, 0, 0, 2, 0, 0),)
2025-12-31T11:11:17.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 11:11:04
2025-12-31T11:11:17.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T11:11:17.937 [DEBUG] [Thread-126606] [transport.py] [_log()] starting thread (client mode): 0xb6b49150
2025-12-31T11:11:17.937 [DEBUG] [Thread-126606] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:11:17.953 [DEBUG] [Thread-126606] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T11:11:17.953 [INFO] [Thread-126606] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T11:11:17.956 [DEBUG] [Thread-126606] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:11:17.956 [DEBUG] [Thread-126606] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T11:11:17.956 [DEBUG] [Thread-126606] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:11:17.956 [DEBUG] [Thread-126606] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:11:17.956 [DEBUG] [Thread-126606] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:11:17.956 [DEBUG] [Thread-126606] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:11:17.956 [DEBUG] [Thread-126606] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:11:17.956 [DEBUG] [Thread-126606] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:11:17.956 [DEBUG] [Thread-126606] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:11:17.956 [DEBUG] [Thread-126606] [transport.py] [_log()] client lang: <none>
2025-12-31T11:11:17.956 [DEBUG] [Thread-126606] [transport.py] [_log()] server lang: <none>
2025-12-31T11:11:17.956 [DEBUG] [Thread-126606] [transport.py] [_log()] kex follows: False
2025-12-31T11:11:17.956 [DEBUG] [Thread-126606] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:11:17.956 [DEBUG] [Thread-126606] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:11:17.956 [DEBUG] [Thread-126606] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:11:17.956 [DEBUG] [Thread-126606] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:11:17.957 [DEBUG] [Thread-126606] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:11:17.957 [DEBUG] [Thread-126606] [transport.py] [_log()] Compression: none
2025-12-31T11:11:17.957 [DEBUG] [Thread-126606] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:11:17.977 [DEBUG] [Thread-126606] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:11:17.977 [DEBUG] [Thread-126606] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:11:17.978 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T11:11:17.978 [DEBUG] [Thread-126606] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T11:11:17.979 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:11:17.981 [DEBUG] [Thread-126606] [transport.py] [_log()] userauth is OK
2025-12-31T11:11:17.981 [DEBUG] [Thread-126606] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:11:17.981 [DEBUG] [Thread-126606] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:11:17.981 [DEBUG] [Thread-126606] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T11:11:17.981 [DEBUG] [Thread-126606] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:11:17.999 [INFO] [Thread-126606] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:11:18.000 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:11:18.810 [DEBUG] [Thread-126606] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:11:18.810 [DEBUG] [Thread-126606] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:11:18.810 [DEBUG] [Thread-126606] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T11:11:18.850 [DEBUG] [Thread-126606] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:11:18.851 [DEBUG] [Thread-126606] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:11:18.853 [DEBUG] [Thread-126606] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:11:18.867 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:11:18.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T11:11:18.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T11:11:18.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T11:11:18.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:11:18.876 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T11:11:18.876 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:11:18.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:11:18.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T11:11:18.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.382435 -999.00  +25.80  21.61     13   -4.10 1 1 1 1 1   888    0 31.34 102.52 ----- 21.8 21.6 285.4 25.2 31.9 -26.7 31.1 -24.8 29.9 -23.9 30.6 -23.9
2025-12-31T11:11:18.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T11:11:18.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T11:11:18.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.382435
2025-12-31T11:11:18.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T11:11:18.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T11:11:18.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T11:11:18.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T11:11:18.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T11:11:18.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T11:11:04', tmtdew=36.61, humidity=8.01, cloud=0.0, wind=19.39, temperature=25.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T09:10:42.384', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T11:11:18.878 [DEBUG] [Thread-126606] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:11:18.961 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T11:11:18.973 [DEBUG] [Thread-126609] [transport.py] [_log()] starting thread (client mode): 0xb6b4aa40
2025-12-31T11:11:18.974 [DEBUG] [Thread-126609] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:11:18.988 [DEBUG] [Thread-126609] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T11:11:18.988 [INFO] [Thread-126609] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T11:11:18.996 [DEBUG] [Thread-126609] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:11:18.996 [DEBUG] [Thread-126609] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T11:11:18.996 [DEBUG] [Thread-126609] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:11:18.996 [DEBUG] [Thread-126609] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:11:18.996 [DEBUG] [Thread-126609] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:11:18.996 [DEBUG] [Thread-126609] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:11:18.996 [DEBUG] [Thread-126609] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:11:18.996 [DEBUG] [Thread-126609] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:11:18.996 [DEBUG] [Thread-126609] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:11:18.996 [DEBUG] [Thread-126609] [transport.py] [_log()] client lang: <none>
2025-12-31T11:11:18.996 [DEBUG] [Thread-126609] [transport.py] [_log()] server lang: <none>
2025-12-31T11:11:18.996 [DEBUG] [Thread-126609] [transport.py] [_log()] kex follows: False
2025-12-31T11:11:18.996 [DEBUG] [Thread-126609] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:11:18.996 [DEBUG] [Thread-126609] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:11:18.996 [DEBUG] [Thread-126609] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:11:18.996 [DEBUG] [Thread-126609] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:11:18.997 [DEBUG] [Thread-126609] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:11:18.997 [DEBUG] [Thread-126609] [transport.py] [_log()] Compression: none
2025-12-31T11:11:18.997 [DEBUG] [Thread-126609] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:11:19.054 [DEBUG] [Thread-126609] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:11:19.054 [DEBUG] [Thread-126609] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:11:19.055 [DEBUG] [Thread-126609] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T11:11:19.055 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T11:11:19.056 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:11:19.110 [DEBUG] [Thread-126609] [transport.py] [_log()] userauth is OK
2025-12-31T11:11:19.110 [DEBUG] [Thread-126609] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:11:19.110 [DEBUG] [Thread-126609] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:11:19.111 [DEBUG] [Thread-126609] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T11:11:19.111 [DEBUG] [Thread-126609] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:11:19.135 [INFO] [Thread-126609] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:11:19.135 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T11:11:19.136 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:11:19.974 [DEBUG] [Thread-126609] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:11:19.974 [DEBUG] [Thread-126609] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:11:20.022 [DEBUG] [Thread-126609] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:11:20.022 [DEBUG] [Thread-126609] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:11:20.031 [DEBUG] [Thread-126609] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:11:20.040 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:11:20.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T11:11:20.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T11:11:20.059 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:11:20.059 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:11:20.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:11:20.068 [DEBUG] [Thread-126609] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:11:28.958 [DEBUG] [Thread-126611 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:11:31.298 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:11:31.300 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:11:44.012 [DEBUG] [Thread-126612 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:11:50.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T11:11:50.079 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T11:11:50.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T11:11:50.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 11, 11, 36), 36.05, 8.51, 0.0, 19.96, 25.09, 0, 0, 0, 2, 0, 0),)
2025-12-31T11:11:50.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 11:11:36
2025-12-31T11:11:50.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T11:11:51.048 [DEBUG] [Thread-126613] [transport.py] [_log()] starting thread (client mode): 0xb6b4a830
2025-12-31T11:11:51.048 [DEBUG] [Thread-126613] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:11:51.070 [DEBUG] [Thread-126613] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T11:11:51.070 [INFO] [Thread-126613] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T11:11:51.073 [DEBUG] [Thread-126613] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:11:51.073 [DEBUG] [Thread-126613] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T11:11:51.073 [DEBUG] [Thread-126613] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:11:51.073 [DEBUG] [Thread-126613] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:11:51.073 [DEBUG] [Thread-126613] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:11:51.073 [DEBUG] [Thread-126613] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:11:51.074 [DEBUG] [Thread-126613] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:11:51.074 [DEBUG] [Thread-126613] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:11:51.074 [DEBUG] [Thread-126613] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:11:51.074 [DEBUG] [Thread-126613] [transport.py] [_log()] client lang: <none>
2025-12-31T11:11:51.074 [DEBUG] [Thread-126613] [transport.py] [_log()] server lang: <none>
2025-12-31T11:11:51.074 [DEBUG] [Thread-126613] [transport.py] [_log()] kex follows: False
2025-12-31T11:11:51.074 [DEBUG] [Thread-126613] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:11:51.074 [DEBUG] [Thread-126613] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:11:51.074 [DEBUG] [Thread-126613] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:11:51.074 [DEBUG] [Thread-126613] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:11:51.075 [DEBUG] [Thread-126613] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:11:51.075 [DEBUG] [Thread-126613] [transport.py] [_log()] Compression: none
2025-12-31T11:11:51.075 [DEBUG] [Thread-126613] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:11:51.095 [DEBUG] [Thread-126613] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:11:51.095 [DEBUG] [Thread-126613] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:11:51.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T11:11:51.096 [DEBUG] [Thread-126613] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T11:11:51.097 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:11:51.099 [DEBUG] [Thread-126613] [transport.py] [_log()] userauth is OK
2025-12-31T11:11:51.099 [DEBUG] [Thread-126613] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:11:51.099 [DEBUG] [Thread-126613] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:11:51.099 [DEBUG] [Thread-126613] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T11:11:51.099 [DEBUG] [Thread-126613] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:11:51.136 [INFO] [Thread-126613] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:11:51.137 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:11:51.807 [DEBUG] [Thread-126613] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:11:51.808 [DEBUG] [Thread-126613] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:11:51.808 [DEBUG] [Thread-126613] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T11:11:51.849 [DEBUG] [Thread-126613] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:11:51.849 [DEBUG] [Thread-126613] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:11:51.853 [DEBUG] [Thread-126613] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:11:51.866 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:11:51.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T11:11:51.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T11:11:51.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T11:11:51.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:11:51.879 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T11:11:51.880 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:11:51.880 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:11:51.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T11:11:51.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.382782 -999.00  +25.40  11.38     13   -4.10 1 1 1 1 1   888    0 31.68 102.16 ----- 11.0 11.4 272.6 26.5 32.0 -26.7 31.2 -25.5 29.9 -23.3 30.6 -24.5
2025-12-31T11:11:51.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T11:11:51.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T11:11:51.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.382782
2025-12-31T11:11:51.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T11:11:51.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T11:11:51.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T11:11:51.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T11:11:51.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T11:11:51.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T11:11:36', tmtdew=36.05, humidity=8.51, cloud=0.0, wind=19.96, temperature=25.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T09:11:12.365', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T11:11:51.883 [DEBUG] [Thread-126613] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:11:51.972 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T11:11:51.985 [DEBUG] [Thread-126616] [transport.py] [_log()] starting thread (client mode): 0xb6b21000
2025-12-31T11:11:51.986 [DEBUG] [Thread-126616] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:11:52.000 [DEBUG] [Thread-126616] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T11:11:52.001 [INFO] [Thread-126616] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T11:11:52.008 [DEBUG] [Thread-126616] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:11:52.009 [DEBUG] [Thread-126616] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T11:11:52.009 [DEBUG] [Thread-126616] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:11:52.009 [DEBUG] [Thread-126616] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:11:52.009 [DEBUG] [Thread-126616] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:11:52.009 [DEBUG] [Thread-126616] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:11:52.009 [DEBUG] [Thread-126616] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:11:52.009 [DEBUG] [Thread-126616] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:11:52.009 [DEBUG] [Thread-126616] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:11:52.009 [DEBUG] [Thread-126616] [transport.py] [_log()] client lang: <none>
2025-12-31T11:11:52.009 [DEBUG] [Thread-126616] [transport.py] [_log()] server lang: <none>
2025-12-31T11:11:52.009 [DEBUG] [Thread-126616] [transport.py] [_log()] kex follows: False
2025-12-31T11:11:52.009 [DEBUG] [Thread-126616] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:11:52.009 [DEBUG] [Thread-126616] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:11:52.009 [DEBUG] [Thread-126616] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:11:52.009 [DEBUG] [Thread-126616] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:11:52.009 [DEBUG] [Thread-126616] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:11:52.010 [DEBUG] [Thread-126616] [transport.py] [_log()] Compression: none
2025-12-31T11:11:52.010 [DEBUG] [Thread-126616] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:11:52.066 [DEBUG] [Thread-126616] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:11:52.066 [DEBUG] [Thread-126616] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:11:52.067 [DEBUG] [Thread-126616] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T11:11:52.067 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T11:11:52.068 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:11:52.122 [DEBUG] [Thread-126616] [transport.py] [_log()] userauth is OK
2025-12-31T11:11:52.123 [DEBUG] [Thread-126616] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:11:52.123 [DEBUG] [Thread-126616] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:11:52.123 [DEBUG] [Thread-126616] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T11:11:52.123 [DEBUG] [Thread-126616] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:11:52.142 [INFO] [Thread-126616] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:11:52.143 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T11:11:52.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:11:52.963 [DEBUG] [Thread-126616] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:11:52.963 [DEBUG] [Thread-126616] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:11:53.011 [DEBUG] [Thread-126616] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:11:53.011 [DEBUG] [Thread-126616] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:11:53.021 [DEBUG] [Thread-126616] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:11:53.030 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:11:53.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T11:11:53.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-12-31T11:11:53.048 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:11:53.048 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:11:53.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:11:53.057 [DEBUG] [Thread-126616] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:11:59.042 [DEBUG] [Thread-126618 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:12:08.669 [DEBUG] [Thread-126619 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:12:14.105 [DEBUG] [Thread-126620 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:12:23.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T11:12:23.068 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T11:12:23.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-12-31T11:12:23.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 11, 12, 8), 35.9, 8.6, 0.0, 19.34, 25.1, 0, 0, 0, 2, 0, 0),)
2025-12-31T11:12:23.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 11:12:08
2025-12-31T11:12:23.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T11:12:24.099 [DEBUG] [Thread-126621] [transport.py] [_log()] starting thread (client mode): 0xb6b49150
2025-12-31T11:12:24.099 [DEBUG] [Thread-126621] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:12:24.119 [DEBUG] [Thread-126621] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T11:12:24.119 [INFO] [Thread-126621] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T11:12:24.122 [DEBUG] [Thread-126621] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:12:24.122 [DEBUG] [Thread-126621] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T11:12:24.122 [DEBUG] [Thread-126621] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:12:24.122 [DEBUG] [Thread-126621] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:12:24.122 [DEBUG] [Thread-126621] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:12:24.122 [DEBUG] [Thread-126621] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:12:24.122 [DEBUG] [Thread-126621] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:12:24.122 [DEBUG] [Thread-126621] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:12:24.122 [DEBUG] [Thread-126621] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:12:24.122 [DEBUG] [Thread-126621] [transport.py] [_log()] client lang: <none>
2025-12-31T11:12:24.122 [DEBUG] [Thread-126621] [transport.py] [_log()] server lang: <none>
2025-12-31T11:12:24.122 [DEBUG] [Thread-126621] [transport.py] [_log()] kex follows: False
2025-12-31T11:12:24.122 [DEBUG] [Thread-126621] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:12:24.122 [DEBUG] [Thread-126621] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:12:24.122 [DEBUG] [Thread-126621] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:12:24.122 [DEBUG] [Thread-126621] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:12:24.122 [DEBUG] [Thread-126621] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:12:24.122 [DEBUG] [Thread-126621] [transport.py] [_log()] Compression: none
2025-12-31T11:12:24.122 [DEBUG] [Thread-126621] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:12:24.129 [DEBUG] [Thread-126621] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:12:24.129 [DEBUG] [Thread-126621] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:12:24.130 [DEBUG] [Thread-126621] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T11:12:24.130 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T11:12:24.130 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:12:24.130 [DEBUG] [Thread-126621] [transport.py] [_log()] userauth is OK
2025-12-31T11:12:24.130 [DEBUG] [Thread-126621] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:12:24.130 [DEBUG] [Thread-126621] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:12:24.130 [DEBUG] [Thread-126621] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T11:12:24.130 [DEBUG] [Thread-126621] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:12:24.139 [INFO] [Thread-126621] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:12:24.140 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:12:24.931 [DEBUG] [Thread-126621] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:12:24.931 [DEBUG] [Thread-126621] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:12:24.931 [DEBUG] [Thread-126621] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T11:12:24.972 [DEBUG] [Thread-126621] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:12:24.973 [DEBUG] [Thread-126621] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:12:24.975 [DEBUG] [Thread-126621] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:12:24.986 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:12:24.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T11:12:24.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T11:12:24.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T11:12:24.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:12:24.990 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T11:12:24.990 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:12:24.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:12:24.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T11:12:24.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.383130 -999.00  +25.40  18.20     13   -4.30 1 1 1 1 1   888    0 31.06 98.15 ----- 16.9 18.2 292.2 20.1 32.0 -26.1 31.4 -25.0 30.0 -23.2 30.7 -23.5
2025-12-31T11:12:24.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T11:12:24.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T11:12:24.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.383130
2025-12-31T11:12:24.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T11:12:24.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T11:12:24.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T11:12:24.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T11:12:24.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T11:12:24.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T11:12:08', tmtdew=35.9, humidity=8.6, cloud=0.0, wind=19.34, temperature=25.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T09:11:42.432', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T11:12:24.991 [DEBUG] [Thread-126621] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:12:25.065 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T11:12:25.076 [DEBUG] [Thread-126624] [transport.py] [_log()] starting thread (client mode): 0xb6b48760
2025-12-31T11:12:25.076 [DEBUG] [Thread-126624] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:12:25.091 [DEBUG] [Thread-126624] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T11:12:25.091 [INFO] [Thread-126624] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T11:12:25.099 [DEBUG] [Thread-126624] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:12:25.099 [DEBUG] [Thread-126624] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T11:12:25.099 [DEBUG] [Thread-126624] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:12:25.099 [DEBUG] [Thread-126624] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:12:25.099 [DEBUG] [Thread-126624] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:12:25.099 [DEBUG] [Thread-126624] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:12:25.099 [DEBUG] [Thread-126624] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:12:25.099 [DEBUG] [Thread-126624] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:12:25.099 [DEBUG] [Thread-126624] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:12:25.099 [DEBUG] [Thread-126624] [transport.py] [_log()] client lang: <none>
2025-12-31T11:12:25.099 [DEBUG] [Thread-126624] [transport.py] [_log()] server lang: <none>
2025-12-31T11:12:25.099 [DEBUG] [Thread-126624] [transport.py] [_log()] kex follows: False
2025-12-31T11:12:25.099 [DEBUG] [Thread-126624] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:12:25.099 [DEBUG] [Thread-126624] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:12:25.099 [DEBUG] [Thread-126624] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:12:25.099 [DEBUG] [Thread-126624] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:12:25.099 [DEBUG] [Thread-126624] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:12:25.099 [DEBUG] [Thread-126624] [transport.py] [_log()] Compression: none
2025-12-31T11:12:25.099 [DEBUG] [Thread-126624] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:12:25.156 [DEBUG] [Thread-126624] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:12:25.156 [DEBUG] [Thread-126624] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:12:25.156 [DEBUG] [Thread-126624] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T11:12:25.157 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T11:12:25.157 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:12:25.214 [DEBUG] [Thread-126624] [transport.py] [_log()] userauth is OK
2025-12-31T11:12:25.214 [DEBUG] [Thread-126624] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:12:25.214 [DEBUG] [Thread-126624] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:12:25.214 [DEBUG] [Thread-126624] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T11:12:25.214 [DEBUG] [Thread-126624] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:12:25.228 [INFO] [Thread-126624] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:12:25.228 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T11:12:25.228 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:12:26.094 [DEBUG] [Thread-126624] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:12:26.094 [DEBUG] [Thread-126624] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:12:26.141 [DEBUG] [Thread-126624] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:12:26.141 [DEBUG] [Thread-126624] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:12:26.149 [DEBUG] [Thread-126624] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:12:26.157 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:12:26.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T11:12:26.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T11:12:26.173 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:12:26.173 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:12:26.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:12:26.181 [DEBUG] [Thread-126624] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:12:29.139 [DEBUG] [Thread-126626 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:12:31.441 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:12:31.442 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:12:44.196 [DEBUG] [Thread-126627 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:12:56.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T11:12:56.199 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T11:12:56.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T11:12:56.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 11, 12, 40), 36.08, 8.54, 0.0, 20.13, 25.25, 0, 0, 0, 2, 0, 0),)
2025-12-31T11:12:56.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 11:12:40
2025-12-31T11:12:57.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T11:12:57.173 [DEBUG] [Thread-126628] [transport.py] [_log()] starting thread (client mode): 0xb6b4a0e0
2025-12-31T11:12:57.173 [DEBUG] [Thread-126628] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:12:57.194 [DEBUG] [Thread-126628] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T11:12:57.194 [INFO] [Thread-126628] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T11:12:57.197 [DEBUG] [Thread-126628] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:12:57.197 [DEBUG] [Thread-126628] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T11:12:57.197 [DEBUG] [Thread-126628] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:12:57.197 [DEBUG] [Thread-126628] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:12:57.197 [DEBUG] [Thread-126628] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:12:57.197 [DEBUG] [Thread-126628] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:12:57.197 [DEBUG] [Thread-126628] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:12:57.198 [DEBUG] [Thread-126628] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:12:57.198 [DEBUG] [Thread-126628] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:12:57.198 [DEBUG] [Thread-126628] [transport.py] [_log()] client lang: <none>
2025-12-31T11:12:57.198 [DEBUG] [Thread-126628] [transport.py] [_log()] server lang: <none>
2025-12-31T11:12:57.198 [DEBUG] [Thread-126628] [transport.py] [_log()] kex follows: False
2025-12-31T11:12:57.198 [DEBUG] [Thread-126628] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:12:57.198 [DEBUG] [Thread-126628] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:12:57.198 [DEBUG] [Thread-126628] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:12:57.198 [DEBUG] [Thread-126628] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:12:57.198 [DEBUG] [Thread-126628] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:12:57.198 [DEBUG] [Thread-126628] [transport.py] [_log()] Compression: none
2025-12-31T11:12:57.198 [DEBUG] [Thread-126628] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:12:57.218 [DEBUG] [Thread-126628] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:12:57.219 [DEBUG] [Thread-126628] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:12:57.219 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T11:12:57.220 [DEBUG] [Thread-126628] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T11:12:57.221 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:12:57.222 [DEBUG] [Thread-126628] [transport.py] [_log()] userauth is OK
2025-12-31T11:12:57.222 [DEBUG] [Thread-126628] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:12:57.222 [DEBUG] [Thread-126628] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:12:57.223 [DEBUG] [Thread-126628] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T11:12:57.223 [DEBUG] [Thread-126628] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:12:57.249 [INFO] [Thread-126628] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:12:57.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:12:57.916 [DEBUG] [Thread-126628] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:12:57.917 [DEBUG] [Thread-126628] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:12:57.918 [DEBUG] [Thread-126628] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T11:12:57.958 [DEBUG] [Thread-126628] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:12:57.959 [DEBUG] [Thread-126628] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:12:57.962 [DEBUG] [Thread-126628] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:12:57.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:12:57.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T11:12:57.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T11:12:57.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T11:12:57.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:12:57.990 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T11:12:57.990 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:12:57.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:12:57.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T11:12:57.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.383824 -999.00  +24.80  21.19     13   -4.80 1 2 1 1 1   888    0 31.40 100.19 ----- 20.9 21.2 264.0 27.7 32.1 -26.4 31.4 -23.0 30.1 -21.2 30.6 -25.1
2025-12-31T11:12:57.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T11:12:57.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T11:12:57.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.383824
2025-12-31T11:12:57.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T11:12:57.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T11:12:57.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T11:12:57.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T11:12:57.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T11:12:57.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T11:12:40', tmtdew=36.08, humidity=8.54, cloud=0.0, wind=20.13, temperature=25.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T09:12:42.394', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T11:12:57.993 [DEBUG] [Thread-126628] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:12:58.088 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T11:12:58.100 [DEBUG] [Thread-126631] [transport.py] [_log()] starting thread (client mode): 0xb6b4a800
2025-12-31T11:12:58.100 [DEBUG] [Thread-126631] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:12:58.117 [DEBUG] [Thread-126631] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T11:12:58.118 [INFO] [Thread-126631] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T11:12:58.125 [DEBUG] [Thread-126631] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:12:58.125 [DEBUG] [Thread-126631] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T11:12:58.125 [DEBUG] [Thread-126631] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:12:58.125 [DEBUG] [Thread-126631] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:12:58.125 [DEBUG] [Thread-126631] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:12:58.126 [DEBUG] [Thread-126631] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:12:58.126 [DEBUG] [Thread-126631] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:12:58.126 [DEBUG] [Thread-126631] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:12:58.126 [DEBUG] [Thread-126631] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:12:58.126 [DEBUG] [Thread-126631] [transport.py] [_log()] client lang: <none>
2025-12-31T11:12:58.126 [DEBUG] [Thread-126631] [transport.py] [_log()] server lang: <none>
2025-12-31T11:12:58.126 [DEBUG] [Thread-126631] [transport.py] [_log()] kex follows: False
2025-12-31T11:12:58.126 [DEBUG] [Thread-126631] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:12:58.126 [DEBUG] [Thread-126631] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:12:58.127 [DEBUG] [Thread-126631] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:12:58.127 [DEBUG] [Thread-126631] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:12:58.127 [DEBUG] [Thread-126631] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:12:58.127 [DEBUG] [Thread-126631] [transport.py] [_log()] Compression: none
2025-12-31T11:12:58.127 [DEBUG] [Thread-126631] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:12:58.182 [DEBUG] [Thread-126631] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:12:58.183 [DEBUG] [Thread-126631] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:12:58.183 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T11:12:58.184 [DEBUG] [Thread-126631] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T11:12:58.184 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:12:58.238 [DEBUG] [Thread-126631] [transport.py] [_log()] userauth is OK
2025-12-31T11:12:58.239 [DEBUG] [Thread-126631] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:12:58.239 [DEBUG] [Thread-126631] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:12:58.239 [DEBUG] [Thread-126631] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T11:12:58.239 [DEBUG] [Thread-126631] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:12:58.257 [INFO] [Thread-126631] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:12:58.258 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T11:12:58.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:12:59.062 [DEBUG] [Thread-126631] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:12:59.062 [DEBUG] [Thread-126631] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:12:59.109 [DEBUG] [Thread-126631] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:12:59.109 [DEBUG] [Thread-126631] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:12:59.118 [DEBUG] [Thread-126631] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:12:59.126 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:12:59.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T11:12:59.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T11:12:59.142 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:12:59.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:12:59.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:12:59.151 [DEBUG] [Thread-126631] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:12:59.233 [DEBUG] [Thread-126633 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:13:08.704 [DEBUG] [Thread-126634 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:13:14.281 [DEBUG] [Thread-126635 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:13:29.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T11:13:29.154 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T11:13:29.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T11:13:29.314 [DEBUG] [Thread-126636 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:13:29.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 11, 13, 12), 36.22, 8.47, 0.0, 20.84, 25.42, 0, 0, 0, 2, 0, 0),)
2025-12-31T11:13:29.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 11:13:12
2025-12-31T11:13:29.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T11:13:30.141 [DEBUG] [Thread-126637] [transport.py] [_log()] starting thread (client mode): 0xb6b4bbe0
2025-12-31T11:13:30.141 [DEBUG] [Thread-126637] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:13:30.158 [DEBUG] [Thread-126637] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T11:13:30.158 [INFO] [Thread-126637] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T11:13:30.161 [DEBUG] [Thread-126637] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:13:30.161 [DEBUG] [Thread-126637] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T11:13:30.161 [DEBUG] [Thread-126637] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:13:30.162 [DEBUG] [Thread-126637] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:13:30.162 [DEBUG] [Thread-126637] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:13:30.162 [DEBUG] [Thread-126637] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:13:30.162 [DEBUG] [Thread-126637] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:13:30.162 [DEBUG] [Thread-126637] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:13:30.162 [DEBUG] [Thread-126637] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:13:30.162 [DEBUG] [Thread-126637] [transport.py] [_log()] client lang: <none>
2025-12-31T11:13:30.162 [DEBUG] [Thread-126637] [transport.py] [_log()] server lang: <none>
2025-12-31T11:13:30.162 [DEBUG] [Thread-126637] [transport.py] [_log()] kex follows: False
2025-12-31T11:13:30.162 [DEBUG] [Thread-126637] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:13:30.162 [DEBUG] [Thread-126637] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:13:30.162 [DEBUG] [Thread-126637] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:13:30.162 [DEBUG] [Thread-126637] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:13:30.162 [DEBUG] [Thread-126637] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:13:30.162 [DEBUG] [Thread-126637] [transport.py] [_log()] Compression: none
2025-12-31T11:13:30.162 [DEBUG] [Thread-126637] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:13:30.171 [DEBUG] [Thread-126637] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:13:30.171 [DEBUG] [Thread-126637] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:13:30.172 [DEBUG] [Thread-126637] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T11:13:30.172 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T11:13:30.172 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:13:30.174 [DEBUG] [Thread-126637] [transport.py] [_log()] userauth is OK
2025-12-31T11:13:30.174 [DEBUG] [Thread-126637] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:13:30.174 [DEBUG] [Thread-126637] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:13:30.174 [DEBUG] [Thread-126637] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T11:13:30.174 [DEBUG] [Thread-126637] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:13:30.198 [INFO] [Thread-126637] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:13:30.198 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:13:30.848 [DEBUG] [Thread-126637] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:13:30.848 [DEBUG] [Thread-126637] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:13:30.849 [DEBUG] [Thread-126637] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T11:13:30.889 [DEBUG] [Thread-126637] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:13:30.889 [DEBUG] [Thread-126637] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:13:30.893 [DEBUG] [Thread-126637] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:13:30.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:13:30.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T11:13:30.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T11:13:30.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T11:13:30.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:13:30.919 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T11:13:30.919 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:13:30.919 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:13:30.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T11:13:30.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.384171 -999.00  +24.90  22.56     13   -4.70 1 2 1 1 1   888    0 31.99 103.82 ----- 15.5 22.6 262.0 26.4 32.2 -25.2 31.4 -24.3 30.2 -20.6 30.6 -23.2
2025-12-31T11:13:30.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T11:13:30.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T11:13:30.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.384171
2025-12-31T11:13:30.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T11:13:30.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T11:13:30.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T11:13:30.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T11:13:30.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T11:13:30.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T11:13:12', tmtdew=36.22, humidity=8.47, cloud=0.0, wind=20.84, temperature=25.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T09:13:12.374', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T11:13:30.921 [DEBUG] [Thread-126637] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:13:31.005 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T11:13:31.016 [DEBUG] [Thread-126640] [transport.py] [_log()] starting thread (client mode): 0xb6b4ac20
2025-12-31T11:13:31.016 [DEBUG] [Thread-126640] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:13:31.031 [DEBUG] [Thread-126640] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T11:13:31.031 [INFO] [Thread-126640] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T11:13:31.038 [DEBUG] [Thread-126640] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:13:31.038 [DEBUG] [Thread-126640] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T11:13:31.038 [DEBUG] [Thread-126640] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:13:31.038 [DEBUG] [Thread-126640] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:13:31.038 [DEBUG] [Thread-126640] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:13:31.038 [DEBUG] [Thread-126640] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:13:31.038 [DEBUG] [Thread-126640] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:13:31.038 [DEBUG] [Thread-126640] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:13:31.039 [DEBUG] [Thread-126640] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:13:31.039 [DEBUG] [Thread-126640] [transport.py] [_log()] client lang: <none>
2025-12-31T11:13:31.039 [DEBUG] [Thread-126640] [transport.py] [_log()] server lang: <none>
2025-12-31T11:13:31.039 [DEBUG] [Thread-126640] [transport.py] [_log()] kex follows: False
2025-12-31T11:13:31.039 [DEBUG] [Thread-126640] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:13:31.039 [DEBUG] [Thread-126640] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:13:31.039 [DEBUG] [Thread-126640] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:13:31.039 [DEBUG] [Thread-126640] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:13:31.039 [DEBUG] [Thread-126640] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:13:31.039 [DEBUG] [Thread-126640] [transport.py] [_log()] Compression: none
2025-12-31T11:13:31.039 [DEBUG] [Thread-126640] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:13:31.099 [DEBUG] [Thread-126640] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:13:31.099 [DEBUG] [Thread-126640] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:13:31.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T11:13:31.100 [DEBUG] [Thread-126640] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T11:13:31.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:13:31.154 [DEBUG] [Thread-126640] [transport.py] [_log()] userauth is OK
2025-12-31T11:13:31.154 [DEBUG] [Thread-126640] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:13:31.155 [DEBUG] [Thread-126640] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:13:31.155 [DEBUG] [Thread-126640] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T11:13:31.155 [DEBUG] [Thread-126640] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:13:31.180 [INFO] [Thread-126640] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:13:31.180 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T11:13:31.180 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:13:31.581 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:13:31.582 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:13:32.031 [DEBUG] [Thread-126640] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:13:32.031 [DEBUG] [Thread-126640] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:13:32.078 [DEBUG] [Thread-126640] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:13:32.079 [DEBUG] [Thread-126640] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:13:32.087 [DEBUG] [Thread-126640] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:13:32.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:13:32.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T11:13:32.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T11:13:32.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:13:32.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:13:32.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:13:32.120 [DEBUG] [Thread-126640] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:13:44.341 [DEBUG] [Thread-126642 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:13:59.382 [DEBUG] [Thread-126643 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:14:02.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T11:14:02.143 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T11:14:02.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T11:14:02.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 11, 13, 44), 36.0, 8.46, 0.0, 16.3, 25.15, 0, 0, 0, 2, 0, 0),)
2025-12-31T11:14:02.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 11:13:44
2025-12-31T11:14:02.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T11:14:03.123 [DEBUG] [Thread-126644] [transport.py] [_log()] starting thread (client mode): 0xb6bb24a0
2025-12-31T11:14:03.123 [DEBUG] [Thread-126644] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:14:03.143 [DEBUG] [Thread-126644] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T11:14:03.143 [INFO] [Thread-126644] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T11:14:03.146 [DEBUG] [Thread-126644] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:14:03.146 [DEBUG] [Thread-126644] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T11:14:03.146 [DEBUG] [Thread-126644] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:14:03.146 [DEBUG] [Thread-126644] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:14:03.146 [DEBUG] [Thread-126644] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:14:03.146 [DEBUG] [Thread-126644] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:14:03.146 [DEBUG] [Thread-126644] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:14:03.146 [DEBUG] [Thread-126644] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:14:03.146 [DEBUG] [Thread-126644] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:14:03.146 [DEBUG] [Thread-126644] [transport.py] [_log()] client lang: <none>
2025-12-31T11:14:03.146 [DEBUG] [Thread-126644] [transport.py] [_log()] server lang: <none>
2025-12-31T11:14:03.146 [DEBUG] [Thread-126644] [transport.py] [_log()] kex follows: False
2025-12-31T11:14:03.146 [DEBUG] [Thread-126644] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:14:03.146 [DEBUG] [Thread-126644] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:14:03.146 [DEBUG] [Thread-126644] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:14:03.146 [DEBUG] [Thread-126644] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:14:03.146 [DEBUG] [Thread-126644] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:14:03.147 [DEBUG] [Thread-126644] [transport.py] [_log()] Compression: none
2025-12-31T11:14:03.147 [DEBUG] [Thread-126644] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:14:03.163 [DEBUG] [Thread-126644] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:14:03.163 [DEBUG] [Thread-126644] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:14:03.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T11:14:03.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:14:03.165 [DEBUG] [Thread-126644] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T11:14:03.165 [DEBUG] [Thread-126644] [transport.py] [_log()] userauth is OK
2025-12-31T11:14:03.165 [DEBUG] [Thread-126644] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:14:03.166 [DEBUG] [Thread-126644] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:14:03.166 [DEBUG] [Thread-126644] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T11:14:03.166 [DEBUG] [Thread-126644] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:14:03.190 [INFO] [Thread-126644] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:14:03.190 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:14:03.852 [DEBUG] [Thread-126644] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:14:03.852 [DEBUG] [Thread-126644] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:14:03.853 [DEBUG] [Thread-126644] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T11:14:03.893 [DEBUG] [Thread-126644] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:14:03.893 [DEBUG] [Thread-126644] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:14:03.896 [DEBUG] [Thread-126644] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:14:03.909 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:14:03.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T11:14:03.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T11:14:03.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T11:14:03.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:14:03.921 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T11:14:03.922 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:14:03.922 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:14:03.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T11:14:03.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.384518 -999.00  +25.00  12.28     13   -4.80 1 2 1 1 1   888    0 32.29 115.89 ----- 12.3 12.3 278.0 22.2 32.4 -24.7 31.6 -23.2 30.2 -21.7 30.8 -22.2
2025-12-31T11:14:03.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T11:14:03.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T11:14:03.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.384518
2025-12-31T11:14:03.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T11:14:03.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T11:14:03.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T11:14:03.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T11:14:03.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T11:14:03.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T11:13:44', tmtdew=36.0, humidity=8.46, cloud=0.0, wind=16.3, temperature=25.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T09:13:42.355', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T11:14:03.924 [DEBUG] [Thread-126644] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:14:04.011 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T11:14:04.023 [DEBUG] [Thread-126647] [transport.py] [_log()] starting thread (client mode): 0xb6b48910
2025-12-31T11:14:04.023 [DEBUG] [Thread-126647] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:14:04.038 [DEBUG] [Thread-126647] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T11:14:04.038 [INFO] [Thread-126647] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T11:14:04.045 [DEBUG] [Thread-126647] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:14:04.045 [DEBUG] [Thread-126647] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T11:14:04.045 [DEBUG] [Thread-126647] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:14:04.045 [DEBUG] [Thread-126647] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:14:04.045 [DEBUG] [Thread-126647] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:14:04.045 [DEBUG] [Thread-126647] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:14:04.045 [DEBUG] [Thread-126647] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:14:04.045 [DEBUG] [Thread-126647] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:14:04.046 [DEBUG] [Thread-126647] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:14:04.046 [DEBUG] [Thread-126647] [transport.py] [_log()] client lang: <none>
2025-12-31T11:14:04.046 [DEBUG] [Thread-126647] [transport.py] [_log()] server lang: <none>
2025-12-31T11:14:04.046 [DEBUG] [Thread-126647] [transport.py] [_log()] kex follows: False
2025-12-31T11:14:04.046 [DEBUG] [Thread-126647] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:14:04.046 [DEBUG] [Thread-126647] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:14:04.046 [DEBUG] [Thread-126647] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:14:04.046 [DEBUG] [Thread-126647] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:14:04.046 [DEBUG] [Thread-126647] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:14:04.046 [DEBUG] [Thread-126647] [transport.py] [_log()] Compression: none
2025-12-31T11:14:04.046 [DEBUG] [Thread-126647] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:14:04.107 [DEBUG] [Thread-126647] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:14:04.107 [DEBUG] [Thread-126647] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:14:04.108 [DEBUG] [Thread-126647] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T11:14:04.108 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T11:14:04.109 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:14:04.162 [DEBUG] [Thread-126647] [transport.py] [_log()] userauth is OK
2025-12-31T11:14:04.163 [DEBUG] [Thread-126647] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:14:04.163 [DEBUG] [Thread-126647] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:14:04.163 [DEBUG] [Thread-126647] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T11:14:04.163 [DEBUG] [Thread-126647] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:14:04.182 [INFO] [Thread-126647] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:14:04.182 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T11:14:04.183 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:14:05.029 [DEBUG] [Thread-126647] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:14:05.029 [DEBUG] [Thread-126647] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:14:05.077 [DEBUG] [Thread-126647] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:14:05.077 [DEBUG] [Thread-126647] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:14:05.086 [DEBUG] [Thread-126647] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:14:05.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:14:05.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T11:14:05.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T11:14:05.114 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:14:05.114 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:14:05.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:14:05.123 [DEBUG] [Thread-126647] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:14:08.759 [DEBUG] [Thread-126649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:14:14.421 [DEBUG] [Thread-126650 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:14:29.468 [DEBUG] [Thread-126651 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:14:31.723 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:14:31.724 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:14:35.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T11:14:35.139 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T11:14:35.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T11:14:35.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 11, 14, 16), 36.06, 8.41, 0.0, 15.3, 25.1, 0, 0, 0, 2, 0, 0),)
2025-12-31T11:14:35.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 11:14:16
2025-12-31T11:14:35.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T11:14:36.140 [DEBUG] [Thread-126652] [transport.py] [_log()] starting thread (client mode): 0xb6b4a6e0
2025-12-31T11:14:36.140 [DEBUG] [Thread-126652] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:14:36.161 [DEBUG] [Thread-126652] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T11:14:36.162 [INFO] [Thread-126652] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T11:14:36.165 [DEBUG] [Thread-126652] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:14:36.165 [DEBUG] [Thread-126652] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T11:14:36.165 [DEBUG] [Thread-126652] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:14:36.165 [DEBUG] [Thread-126652] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:14:36.165 [DEBUG] [Thread-126652] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:14:36.165 [DEBUG] [Thread-126652] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:14:36.165 [DEBUG] [Thread-126652] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:14:36.165 [DEBUG] [Thread-126652] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:14:36.165 [DEBUG] [Thread-126652] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:14:36.165 [DEBUG] [Thread-126652] [transport.py] [_log()] client lang: <none>
2025-12-31T11:14:36.165 [DEBUG] [Thread-126652] [transport.py] [_log()] server lang: <none>
2025-12-31T11:14:36.166 [DEBUG] [Thread-126652] [transport.py] [_log()] kex follows: False
2025-12-31T11:14:36.166 [DEBUG] [Thread-126652] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:14:36.166 [DEBUG] [Thread-126652] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:14:36.166 [DEBUG] [Thread-126652] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:14:36.166 [DEBUG] [Thread-126652] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:14:36.166 [DEBUG] [Thread-126652] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:14:36.166 [DEBUG] [Thread-126652] [transport.py] [_log()] Compression: none
2025-12-31T11:14:36.166 [DEBUG] [Thread-126652] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:14:36.184 [DEBUG] [Thread-126652] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:14:36.185 [DEBUG] [Thread-126652] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:14:36.185 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T11:14:36.186 [DEBUG] [Thread-126652] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T11:14:36.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:14:36.188 [DEBUG] [Thread-126652] [transport.py] [_log()] userauth is OK
2025-12-31T11:14:36.188 [DEBUG] [Thread-126652] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:14:36.188 [DEBUG] [Thread-126652] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:14:36.188 [DEBUG] [Thread-126652] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T11:14:36.188 [DEBUG] [Thread-126652] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:14:36.212 [INFO] [Thread-126652] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:14:36.213 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:14:36.849 [DEBUG] [Thread-126652] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:14:36.849 [DEBUG] [Thread-126652] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:14:36.850 [DEBUG] [Thread-126652] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T11:14:36.890 [DEBUG] [Thread-126652] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:14:36.890 [DEBUG] [Thread-126652] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:14:36.893 [DEBUG] [Thread-126652] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:14:36.904 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:14:36.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T11:14:36.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T11:14:36.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T11:14:36.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:14:36.917 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T11:14:36.917 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:14:36.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:14:36.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T11:14:36.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.384866 -999.00  +24.90   7.26     13   -4.80 1 2 1 1 1   888    0 32.58 105.36 ----- 5.5 7.3 290.8 13.6 32.4 -24.7 31.6 -23.0 30.3 -21.1 30.9 -21.9
2025-12-31T11:14:36.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T11:14:36.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T11:14:36.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.384866
2025-12-31T11:14:36.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T11:14:36.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T11:14:36.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T11:14:36.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T11:14:36.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T11:14:36.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T11:14:16', tmtdew=36.06, humidity=8.41, cloud=0.0, wind=15.3, temperature=25.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T09:14:12.422', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T11:14:36.920 [DEBUG] [Thread-126652] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:14:37.004 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T11:14:37.016 [DEBUG] [Thread-126655] [transport.py] [_log()] starting thread (client mode): 0xb95450f0
2025-12-31T11:14:37.016 [DEBUG] [Thread-126655] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:14:37.031 [DEBUG] [Thread-126655] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T11:14:37.032 [INFO] [Thread-126655] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T11:14:37.039 [DEBUG] [Thread-126655] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:14:37.039 [DEBUG] [Thread-126655] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T11:14:37.040 [DEBUG] [Thread-126655] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:14:37.040 [DEBUG] [Thread-126655] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:14:37.040 [DEBUG] [Thread-126655] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:14:37.040 [DEBUG] [Thread-126655] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:14:37.040 [DEBUG] [Thread-126655] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:14:37.040 [DEBUG] [Thread-126655] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:14:37.040 [DEBUG] [Thread-126655] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:14:37.040 [DEBUG] [Thread-126655] [transport.py] [_log()] client lang: <none>
2025-12-31T11:14:37.040 [DEBUG] [Thread-126655] [transport.py] [_log()] server lang: <none>
2025-12-31T11:14:37.040 [DEBUG] [Thread-126655] [transport.py] [_log()] kex follows: False
2025-12-31T11:14:37.040 [DEBUG] [Thread-126655] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:14:37.040 [DEBUG] [Thread-126655] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:14:37.040 [DEBUG] [Thread-126655] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:14:37.040 [DEBUG] [Thread-126655] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:14:37.040 [DEBUG] [Thread-126655] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:14:37.040 [DEBUG] [Thread-126655] [transport.py] [_log()] Compression: none
2025-12-31T11:14:37.040 [DEBUG] [Thread-126655] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:14:37.098 [DEBUG] [Thread-126655] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:14:37.098 [DEBUG] [Thread-126655] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:14:37.099 [DEBUG] [Thread-126655] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T11:14:37.099 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T11:14:37.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:14:37.158 [DEBUG] [Thread-126655] [transport.py] [_log()] userauth is OK
2025-12-31T11:14:37.159 [DEBUG] [Thread-126655] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:14:37.159 [DEBUG] [Thread-126655] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:14:37.159 [DEBUG] [Thread-126655] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T11:14:37.159 [DEBUG] [Thread-126655] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:14:37.184 [INFO] [Thread-126655] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:14:37.185 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T11:14:37.185 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:14:38.054 [DEBUG] [Thread-126655] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:14:38.054 [DEBUG] [Thread-126655] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:14:38.102 [DEBUG] [Thread-126655] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:14:38.102 [DEBUG] [Thread-126655] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:14:38.110 [DEBUG] [Thread-126655] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:14:38.119 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:14:38.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T11:14:38.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T11:14:38.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:14:38.136 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:14:38.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:14:38.144 [DEBUG] [Thread-126655] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:14:44.506 [DEBUG] [Thread-126657 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:14:59.555 [DEBUG] [Thread-126658 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:15:08.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T11:15:08.167 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T11:15:08.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T11:15:08.796 [DEBUG] [Thread-126659 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:15:08.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 11, 14, 48), 35.97, 8.49, 0.0, 11.61, 25.2, 0, 0, 0, 2, 0, 0),)
2025-12-31T11:15:08.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 11:14:48
2025-12-31T11:15:09.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T11:15:09.154 [DEBUG] [Thread-126660] [transport.py] [_log()] starting thread (client mode): 0xb6b20220
2025-12-31T11:15:09.155 [DEBUG] [Thread-126660] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:15:09.170 [DEBUG] [Thread-126660] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T11:15:09.170 [INFO] [Thread-126660] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T11:15:09.173 [DEBUG] [Thread-126660] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:15:09.173 [DEBUG] [Thread-126660] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T11:15:09.173 [DEBUG] [Thread-126660] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:15:09.173 [DEBUG] [Thread-126660] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:15:09.173 [DEBUG] [Thread-126660] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:15:09.173 [DEBUG] [Thread-126660] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:15:09.173 [DEBUG] [Thread-126660] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:15:09.173 [DEBUG] [Thread-126660] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:15:09.173 [DEBUG] [Thread-126660] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:15:09.173 [DEBUG] [Thread-126660] [transport.py] [_log()] client lang: <none>
2025-12-31T11:15:09.173 [DEBUG] [Thread-126660] [transport.py] [_log()] server lang: <none>
2025-12-31T11:15:09.173 [DEBUG] [Thread-126660] [transport.py] [_log()] kex follows: False
2025-12-31T11:15:09.173 [DEBUG] [Thread-126660] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:15:09.173 [DEBUG] [Thread-126660] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:15:09.173 [DEBUG] [Thread-126660] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:15:09.173 [DEBUG] [Thread-126660] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:15:09.173 [DEBUG] [Thread-126660] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:15:09.173 [DEBUG] [Thread-126660] [transport.py] [_log()] Compression: none
2025-12-31T11:15:09.173 [DEBUG] [Thread-126660] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:15:09.188 [DEBUG] [Thread-126660] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:15:09.188 [DEBUG] [Thread-126660] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:15:09.189 [DEBUG] [Thread-126660] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T11:15:09.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T11:15:09.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:15:09.190 [DEBUG] [Thread-126660] [transport.py] [_log()] userauth is OK
2025-12-31T11:15:09.190 [DEBUG] [Thread-126660] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:15:09.190 [DEBUG] [Thread-126660] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:15:09.190 [DEBUG] [Thread-126660] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T11:15:09.190 [DEBUG] [Thread-126660] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:15:09.212 [INFO] [Thread-126660] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:15:09.213 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:15:11.861 [DEBUG] [Thread-126660] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:15:11.861 [DEBUG] [Thread-126660] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:15:11.862 [DEBUG] [Thread-126660] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T11:15:11.902 [DEBUG] [Thread-126660] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:15:11.902 [DEBUG] [Thread-126660] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:15:11.904 [DEBUG] [Thread-126660] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:15:11.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:15:11.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T11:15:11.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T11:15:11.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T11:15:12.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:15:12.076 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T11:15:12.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:15:12.076 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:15:12.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T11:15:12.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.385213 -999.00  +24.90  11.66     13   -4.70 1 2 1 1 1   888    0 31.88 104.68 ----- 8.8 11.7 269.6 15.2 32.5 -25.9 31.8 -23.2 30.4 -21.1 30.9 -23.2
2025-12-31T11:15:12.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T11:15:12.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T11:15:12.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.385213
2025-12-31T11:15:12.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T11:15:12.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T11:15:12.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T11:15:12.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T11:15:12.079 [DEBUG] [Thread-126660] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:15:12.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T11:15:12.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T11:14:48', tmtdew=35.97, humidity=8.49, cloud=0.0, wind=11.61, temperature=25.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T09:14:42.403', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T11:15:12.163 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T11:15:12.175 [DEBUG] [Thread-126663] [transport.py] [_log()] starting thread (client mode): 0xb6b4b010
2025-12-31T11:15:12.175 [DEBUG] [Thread-126663] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:15:12.189 [DEBUG] [Thread-126663] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T11:15:12.190 [INFO] [Thread-126663] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T11:15:12.197 [DEBUG] [Thread-126663] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:15:12.197 [DEBUG] [Thread-126663] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T11:15:12.198 [DEBUG] [Thread-126663] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:15:12.198 [DEBUG] [Thread-126663] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:15:12.198 [DEBUG] [Thread-126663] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:15:12.198 [DEBUG] [Thread-126663] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:15:12.198 [DEBUG] [Thread-126663] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:15:12.198 [DEBUG] [Thread-126663] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:15:12.198 [DEBUG] [Thread-126663] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:15:12.198 [DEBUG] [Thread-126663] [transport.py] [_log()] client lang: <none>
2025-12-31T11:15:12.198 [DEBUG] [Thread-126663] [transport.py] [_log()] server lang: <none>
2025-12-31T11:15:12.198 [DEBUG] [Thread-126663] [transport.py] [_log()] kex follows: False
2025-12-31T11:15:12.198 [DEBUG] [Thread-126663] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:15:12.198 [DEBUG] [Thread-126663] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:15:12.198 [DEBUG] [Thread-126663] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:15:12.198 [DEBUG] [Thread-126663] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:15:12.198 [DEBUG] [Thread-126663] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:15:12.198 [DEBUG] [Thread-126663] [transport.py] [_log()] Compression: none
2025-12-31T11:15:12.198 [DEBUG] [Thread-126663] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:15:12.253 [DEBUG] [Thread-126663] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:15:12.254 [DEBUG] [Thread-126663] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:15:12.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T11:15:12.255 [DEBUG] [Thread-126663] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T11:15:12.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:15:12.311 [DEBUG] [Thread-126663] [transport.py] [_log()] userauth is OK
2025-12-31T11:15:12.311 [DEBUG] [Thread-126663] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:15:12.311 [DEBUG] [Thread-126663] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:15:12.311 [DEBUG] [Thread-126663] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T11:15:12.311 [DEBUG] [Thread-126663] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:15:12.330 [INFO] [Thread-126663] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:15:12.330 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T11:15:12.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:15:13.115 [DEBUG] [Thread-126663] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:15:13.116 [DEBUG] [Thread-126663] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:15:13.164 [DEBUG] [Thread-126663] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:15:13.164 [DEBUG] [Thread-126663] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:15:13.173 [DEBUG] [Thread-126663] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:15:13.182 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:15:13.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T11:15:13.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T11:15:13.201 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:15:13.201 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:15:13.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:15:13.210 [DEBUG] [Thread-126663] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:15:14.584 [DEBUG] [Thread-126665 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:15:29.634 [DEBUG] [Thread-126666 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:15:31.866 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:15:31.867 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:15:43.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T11:15:43.232 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T11:15:43.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T11:15:43.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 11, 15, 21), 35.99, 8.46, 0.0, 10.18, 25.09, 0, 0, 0, 2, 0, 0),)
2025-12-31T11:15:43.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 11:15:21
2025-12-31T11:15:44.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T11:15:44.266 [DEBUG] [Thread-126667] [transport.py] [_log()] starting thread (client mode): 0xb6b48910
2025-12-31T11:15:44.266 [DEBUG] [Thread-126667] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:15:44.287 [DEBUG] [Thread-126667] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T11:15:44.287 [INFO] [Thread-126667] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T11:15:44.290 [DEBUG] [Thread-126667] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:15:44.290 [DEBUG] [Thread-126667] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T11:15:44.290 [DEBUG] [Thread-126667] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:15:44.290 [DEBUG] [Thread-126667] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:15:44.290 [DEBUG] [Thread-126667] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:15:44.290 [DEBUG] [Thread-126667] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:15:44.290 [DEBUG] [Thread-126667] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:15:44.290 [DEBUG] [Thread-126667] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:15:44.290 [DEBUG] [Thread-126667] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:15:44.290 [DEBUG] [Thread-126667] [transport.py] [_log()] client lang: <none>
2025-12-31T11:15:44.290 [DEBUG] [Thread-126667] [transport.py] [_log()] server lang: <none>
2025-12-31T11:15:44.290 [DEBUG] [Thread-126667] [transport.py] [_log()] kex follows: False
2025-12-31T11:15:44.290 [DEBUG] [Thread-126667] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:15:44.290 [DEBUG] [Thread-126667] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:15:44.290 [DEBUG] [Thread-126667] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:15:44.290 [DEBUG] [Thread-126667] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:15:44.290 [DEBUG] [Thread-126667] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:15:44.291 [DEBUG] [Thread-126667] [transport.py] [_log()] Compression: none
2025-12-31T11:15:44.291 [DEBUG] [Thread-126667] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:15:44.306 [DEBUG] [Thread-126667] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:15:44.306 [DEBUG] [Thread-126667] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:15:44.306 [DEBUG] [Thread-126667] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T11:15:44.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T11:15:44.307 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:15:44.307 [DEBUG] [Thread-126667] [transport.py] [_log()] userauth is OK
2025-12-31T11:15:44.307 [DEBUG] [Thread-126667] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:15:44.307 [DEBUG] [Thread-126667] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:15:44.307 [DEBUG] [Thread-126667] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T11:15:44.307 [DEBUG] [Thread-126667] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:15:44.316 [INFO] [Thread-126667] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:15:44.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:15:44.668 [DEBUG] [Thread-126669 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:15:44.954 [DEBUG] [Thread-126667] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:15:44.955 [DEBUG] [Thread-126667] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:15:44.955 [DEBUG] [Thread-126667] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T11:15:44.996 [DEBUG] [Thread-126667] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:15:44.997 [DEBUG] [Thread-126667] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:15:45.000 [DEBUG] [Thread-126667] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:15:45.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:15:45.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T11:15:45.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T11:15:45.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T11:15:45.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:15:45.025 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T11:15:45.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:15:45.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:15:45.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T11:15:45.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.385560 -999.00  +25.00  10.53     13   -4.60 1 2 1 1 1   888    0 31.56 97.50 ----- 7.6 10.5 261.8 17.4 32.5 -26.3 31.8 -23.6 30.4 -21.9 30.9 -23.9
2025-12-31T11:15:45.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T11:15:45.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T11:15:45.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.385560
2025-12-31T11:15:45.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T11:15:45.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T11:15:45.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T11:15:45.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T11:15:45.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T11:15:45.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T11:15:21', tmtdew=35.99, humidity=8.46, cloud=0.0, wind=10.18, temperature=25.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T09:15:12.384', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T11:15:45.028 [DEBUG] [Thread-126667] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:15:45.110 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T11:15:45.121 [DEBUG] [Thread-126671] [transport.py] [_log()] starting thread (client mode): 0xb9546770
2025-12-31T11:15:45.121 [DEBUG] [Thread-126671] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:15:45.136 [DEBUG] [Thread-126671] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T11:15:45.136 [INFO] [Thread-126671] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T11:15:45.143 [DEBUG] [Thread-126671] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:15:45.143 [DEBUG] [Thread-126671] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T11:15:45.143 [DEBUG] [Thread-126671] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:15:45.143 [DEBUG] [Thread-126671] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:15:45.143 [DEBUG] [Thread-126671] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:15:45.143 [DEBUG] [Thread-126671] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:15:45.143 [DEBUG] [Thread-126671] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:15:45.143 [DEBUG] [Thread-126671] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:15:45.143 [DEBUG] [Thread-126671] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:15:45.143 [DEBUG] [Thread-126671] [transport.py] [_log()] client lang: <none>
2025-12-31T11:15:45.143 [DEBUG] [Thread-126671] [transport.py] [_log()] server lang: <none>
2025-12-31T11:15:45.143 [DEBUG] [Thread-126671] [transport.py] [_log()] kex follows: False
2025-12-31T11:15:45.144 [DEBUG] [Thread-126671] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:15:45.144 [DEBUG] [Thread-126671] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:15:45.144 [DEBUG] [Thread-126671] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:15:45.144 [DEBUG] [Thread-126671] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:15:45.144 [DEBUG] [Thread-126671] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:15:45.144 [DEBUG] [Thread-126671] [transport.py] [_log()] Compression: none
2025-12-31T11:15:45.144 [DEBUG] [Thread-126671] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:15:45.202 [DEBUG] [Thread-126671] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:15:45.202 [DEBUG] [Thread-126671] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:15:45.203 [DEBUG] [Thread-126671] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T11:15:45.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T11:15:45.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:15:45.259 [DEBUG] [Thread-126671] [transport.py] [_log()] userauth is OK
2025-12-31T11:15:45.259 [DEBUG] [Thread-126671] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:15:45.259 [DEBUG] [Thread-126671] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:15:45.259 [DEBUG] [Thread-126671] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T11:15:45.260 [DEBUG] [Thread-126671] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:15:45.283 [INFO] [Thread-126671] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:15:45.283 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T11:15:45.283 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:15:46.107 [DEBUG] [Thread-126671] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:15:46.107 [DEBUG] [Thread-126671] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:15:46.156 [DEBUG] [Thread-126671] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:15:46.156 [DEBUG] [Thread-126671] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:15:46.165 [DEBUG] [Thread-126671] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:15:46.173 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:15:46.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T11:15:46.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T11:15:46.189 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:15:46.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:15:46.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:15:46.197 [DEBUG] [Thread-126671] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:15:59.703 [DEBUG] [Thread-126673 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:16:08.830 [DEBUG] [Thread-126674 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:16:14.763 [DEBUG] [Thread-126675 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:16:16.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T11:16:16.220 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T11:16:16.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T11:16:16.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 11, 15, 53), 36.2, 8.09, 0.0, 17.33, 25.24, 0, 0, 0, 2, 0, 0),)
2025-12-31T11:16:16.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 11:15:53
2025-12-31T11:16:17.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T11:16:17.228 [DEBUG] [Thread-126676] [transport.py] [_log()] starting thread (client mode): 0xb9545930
2025-12-31T11:16:17.228 [DEBUG] [Thread-126676] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:16:17.243 [DEBUG] [Thread-126676] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T11:16:17.243 [INFO] [Thread-126676] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T11:16:17.246 [DEBUG] [Thread-126676] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:16:17.246 [DEBUG] [Thread-126676] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T11:16:17.246 [DEBUG] [Thread-126676] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:16:17.246 [DEBUG] [Thread-126676] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:16:17.247 [DEBUG] [Thread-126676] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:16:17.247 [DEBUG] [Thread-126676] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:16:17.247 [DEBUG] [Thread-126676] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:16:17.247 [DEBUG] [Thread-126676] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:16:17.247 [DEBUG] [Thread-126676] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:16:17.247 [DEBUG] [Thread-126676] [transport.py] [_log()] client lang: <none>
2025-12-31T11:16:17.247 [DEBUG] [Thread-126676] [transport.py] [_log()] server lang: <none>
2025-12-31T11:16:17.247 [DEBUG] [Thread-126676] [transport.py] [_log()] kex follows: False
2025-12-31T11:16:17.247 [DEBUG] [Thread-126676] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:16:17.247 [DEBUG] [Thread-126676] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:16:17.247 [DEBUG] [Thread-126676] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:16:17.247 [DEBUG] [Thread-126676] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:16:17.247 [DEBUG] [Thread-126676] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:16:17.247 [DEBUG] [Thread-126676] [transport.py] [_log()] Compression: none
2025-12-31T11:16:17.247 [DEBUG] [Thread-126676] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:16:17.264 [DEBUG] [Thread-126676] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:16:17.265 [DEBUG] [Thread-126676] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:16:17.266 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T11:16:17.266 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:16:17.267 [DEBUG] [Thread-126676] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T11:16:17.267 [DEBUG] [Thread-126676] [transport.py] [_log()] userauth is OK
2025-12-31T11:16:17.267 [DEBUG] [Thread-126676] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:16:17.267 [DEBUG] [Thread-126676] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:16:17.268 [DEBUG] [Thread-126676] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T11:16:17.268 [DEBUG] [Thread-126676] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:16:17.287 [INFO] [Thread-126676] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:16:17.288 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:16:17.936 [DEBUG] [Thread-126676] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:16:17.937 [DEBUG] [Thread-126676] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:16:17.937 [DEBUG] [Thread-126676] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T11:16:17.978 [DEBUG] [Thread-126676] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:16:17.978 [DEBUG] [Thread-126676] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:16:17.980 [DEBUG] [Thread-126676] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:16:17.992 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:16:17.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T11:16:17.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T11:16:17.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T11:16:17.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:16:17.998 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T11:16:17.998 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:16:17.998 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:16:17.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T11:16:17.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.385907 -999.00  +25.00  20.69     13   -4.80 1 2 1 1 1   888    0 32.18 98.65 ----- 17.9 20.7 259.0 25.5 32.4 -26.0 31.8 -24.2 30.4 -21.6 30.8 -23.9
2025-12-31T11:16:17.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T11:16:17.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T11:16:17.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.385907
2025-12-31T11:16:17.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T11:16:17.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T11:16:17.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T11:16:17.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T11:16:17.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T11:16:17.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T11:15:53', tmtdew=36.2, humidity=8.09, cloud=0.0, wind=17.33, temperature=25.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T09:15:42.365', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T11:16:17.999 [DEBUG] [Thread-126676] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:16:18.074 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T11:16:18.087 [DEBUG] [Thread-126679] [transport.py] [_log()] starting thread (client mode): 0xb9546f50
2025-12-31T11:16:18.087 [DEBUG] [Thread-126679] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:16:18.101 [DEBUG] [Thread-126679] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T11:16:18.101 [INFO] [Thread-126679] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T11:16:18.108 [DEBUG] [Thread-126679] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:16:18.108 [DEBUG] [Thread-126679] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T11:16:18.108 [DEBUG] [Thread-126679] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:16:18.108 [DEBUG] [Thread-126679] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:16:18.108 [DEBUG] [Thread-126679] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:16:18.108 [DEBUG] [Thread-126679] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:16:18.108 [DEBUG] [Thread-126679] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:16:18.109 [DEBUG] [Thread-126679] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:16:18.109 [DEBUG] [Thread-126679] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:16:18.109 [DEBUG] [Thread-126679] [transport.py] [_log()] client lang: <none>
2025-12-31T11:16:18.109 [DEBUG] [Thread-126679] [transport.py] [_log()] server lang: <none>
2025-12-31T11:16:18.109 [DEBUG] [Thread-126679] [transport.py] [_log()] kex follows: False
2025-12-31T11:16:18.109 [DEBUG] [Thread-126679] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:16:18.109 [DEBUG] [Thread-126679] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:16:18.109 [DEBUG] [Thread-126679] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:16:18.109 [DEBUG] [Thread-126679] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:16:18.109 [DEBUG] [Thread-126679] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:16:18.109 [DEBUG] [Thread-126679] [transport.py] [_log()] Compression: none
2025-12-31T11:16:18.109 [DEBUG] [Thread-126679] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:16:18.164 [DEBUG] [Thread-126679] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:16:18.164 [DEBUG] [Thread-126679] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:16:18.164 [DEBUG] [Thread-126679] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T11:16:18.165 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T11:16:18.165 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:16:18.222 [DEBUG] [Thread-126679] [transport.py] [_log()] userauth is OK
2025-12-31T11:16:18.222 [DEBUG] [Thread-126679] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:16:18.222 [DEBUG] [Thread-126679] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:16:18.222 [DEBUG] [Thread-126679] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T11:16:18.222 [DEBUG] [Thread-126679] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:16:18.236 [INFO] [Thread-126679] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:16:18.236 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T11:16:18.236 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:16:19.042 [DEBUG] [Thread-126679] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:16:19.042 [DEBUG] [Thread-126679] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:16:19.090 [DEBUG] [Thread-126679] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:16:19.090 [DEBUG] [Thread-126679] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:16:19.099 [DEBUG] [Thread-126679] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:16:19.107 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:16:19.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T11:16:19.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T11:16:19.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:16:19.123 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:16:19.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:16:19.131 [DEBUG] [Thread-126679] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:16:29.794 [DEBUG] [Thread-126681 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:16:32.008 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:16:32.009 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:16:44.848 [DEBUG] [Thread-126682 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:16:49.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T11:16:49.131 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T11:16:49.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T11:16:49.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 11, 16, 25), 36.18, 8.09, 0.0, 19.02, 25.19, 0, 0, 0, 2, 0, 0),)
2025-12-31T11:16:49.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 11:16:25
2025-12-31T11:16:49.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T11:16:50.129 [DEBUG] [Thread-126683] [transport.py] [_log()] starting thread (client mode): 0xb9544ac0
2025-12-31T11:16:50.129 [DEBUG] [Thread-126683] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:16:50.148 [DEBUG] [Thread-126683] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T11:16:50.149 [INFO] [Thread-126683] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T11:16:50.151 [DEBUG] [Thread-126683] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:16:50.152 [DEBUG] [Thread-126683] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T11:16:50.152 [DEBUG] [Thread-126683] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:16:50.152 [DEBUG] [Thread-126683] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:16:50.152 [DEBUG] [Thread-126683] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:16:50.152 [DEBUG] [Thread-126683] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:16:50.152 [DEBUG] [Thread-126683] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:16:50.152 [DEBUG] [Thread-126683] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:16:50.152 [DEBUG] [Thread-126683] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:16:50.152 [DEBUG] [Thread-126683] [transport.py] [_log()] client lang: <none>
2025-12-31T11:16:50.152 [DEBUG] [Thread-126683] [transport.py] [_log()] server lang: <none>
2025-12-31T11:16:50.152 [DEBUG] [Thread-126683] [transport.py] [_log()] kex follows: False
2025-12-31T11:16:50.152 [DEBUG] [Thread-126683] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:16:50.152 [DEBUG] [Thread-126683] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:16:50.152 [DEBUG] [Thread-126683] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:16:50.152 [DEBUG] [Thread-126683] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:16:50.152 [DEBUG] [Thread-126683] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:16:50.152 [DEBUG] [Thread-126683] [transport.py] [_log()] Compression: none
2025-12-31T11:16:50.152 [DEBUG] [Thread-126683] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:16:50.171 [DEBUG] [Thread-126683] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:16:50.171 [DEBUG] [Thread-126683] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:16:50.172 [DEBUG] [Thread-126683] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T11:16:50.172 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T11:16:50.173 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:16:50.174 [DEBUG] [Thread-126683] [transport.py] [_log()] userauth is OK
2025-12-31T11:16:50.175 [DEBUG] [Thread-126683] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:16:50.175 [DEBUG] [Thread-126683] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:16:50.175 [DEBUG] [Thread-126683] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T11:16:50.175 [DEBUG] [Thread-126683] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:16:50.212 [INFO] [Thread-126683] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:16:50.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:16:50.863 [DEBUG] [Thread-126683] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:16:50.863 [DEBUG] [Thread-126683] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:16:50.864 [DEBUG] [Thread-126683] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T11:16:50.904 [DEBUG] [Thread-126683] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:16:50.904 [DEBUG] [Thread-126683] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:16:50.908 [DEBUG] [Thread-126683] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:16:50.920 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:16:50.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T11:16:50.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T11:16:50.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T11:16:50.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:16:50.932 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T11:16:50.933 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:16:50.933 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:16:50.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T11:16:50.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.386254 -999.00  +25.30  17.90     13   -4.70 1 1 1 1 1   888    0 32.12 96.02 ----- 8.7 17.9 212.6 22.9 32.4 -26.0 31.8 -23.8 30.4 -23.1 30.9 -23.9
2025-12-31T11:16:50.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T11:16:50.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T11:16:50.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.386254
2025-12-31T11:16:50.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T11:16:50.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T11:16:50.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T11:16:50.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T11:16:50.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T11:16:50.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T11:16:25', tmtdew=36.18, humidity=8.09, cloud=0.0, wind=19.02, temperature=25.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T09:16:12.346', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T11:16:50.936 [DEBUG] [Thread-126683] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:16:51.019 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T11:16:51.031 [DEBUG] [Thread-126686] [transport.py] [_log()] starting thread (client mode): 0xb9546890
2025-12-31T11:16:51.031 [DEBUG] [Thread-126686] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:16:51.046 [DEBUG] [Thread-126686] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T11:16:51.046 [INFO] [Thread-126686] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T11:16:51.054 [DEBUG] [Thread-126686] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:16:51.054 [DEBUG] [Thread-126686] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T11:16:51.054 [DEBUG] [Thread-126686] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:16:51.055 [DEBUG] [Thread-126686] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:16:51.055 [DEBUG] [Thread-126686] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:16:51.055 [DEBUG] [Thread-126686] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:16:51.055 [DEBUG] [Thread-126686] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:16:51.055 [DEBUG] [Thread-126686] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:16:51.055 [DEBUG] [Thread-126686] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:16:51.055 [DEBUG] [Thread-126686] [transport.py] [_log()] client lang: <none>
2025-12-31T11:16:51.055 [DEBUG] [Thread-126686] [transport.py] [_log()] server lang: <none>
2025-12-31T11:16:51.056 [DEBUG] [Thread-126686] [transport.py] [_log()] kex follows: False
2025-12-31T11:16:51.056 [DEBUG] [Thread-126686] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:16:51.056 [DEBUG] [Thread-126686] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:16:51.056 [DEBUG] [Thread-126686] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:16:51.056 [DEBUG] [Thread-126686] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:16:51.056 [DEBUG] [Thread-126686] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:16:51.056 [DEBUG] [Thread-126686] [transport.py] [_log()] Compression: none
2025-12-31T11:16:51.056 [DEBUG] [Thread-126686] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:16:51.122 [DEBUG] [Thread-126686] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:16:51.123 [DEBUG] [Thread-126686] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:16:51.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T11:16:51.124 [DEBUG] [Thread-126686] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T11:16:51.126 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:16:51.179 [DEBUG] [Thread-126686] [transport.py] [_log()] userauth is OK
2025-12-31T11:16:51.179 [DEBUG] [Thread-126686] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:16:51.179 [DEBUG] [Thread-126686] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:16:51.179 [DEBUG] [Thread-126686] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T11:16:51.179 [DEBUG] [Thread-126686] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:16:51.203 [INFO] [Thread-126686] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:16:51.204 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T11:16:51.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:16:52.062 [DEBUG] [Thread-126686] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:16:52.063 [DEBUG] [Thread-126686] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:16:52.110 [DEBUG] [Thread-126686] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:16:52.111 [DEBUG] [Thread-126686] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:16:52.120 [DEBUG] [Thread-126686] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:16:52.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:16:52.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T11:16:52.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T11:16:52.147 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:16:52.147 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:16:52.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:16:52.156 [DEBUG] [Thread-126686] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:16:59.882 [DEBUG] [Thread-126688 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:17:08.862 [DEBUG] [Thread-126689 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:17:14.923 [DEBUG] [Thread-126690 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:17:22.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T11:17:22.169 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T11:17:22.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T11:17:22.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 11, 16, 57), 36.25, 8.06, 0.0, 15.53, 25.24, 0, 0, 0, 2, 0, 0),)
2025-12-31T11:17:22.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 11:16:57
2025-12-31T11:17:22.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T11:17:23.136 [DEBUG] [Thread-126691] [transport.py] [_log()] starting thread (client mode): 0xb9546c20
2025-12-31T11:17:23.136 [DEBUG] [Thread-126691] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:17:23.156 [DEBUG] [Thread-126691] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T11:17:23.157 [INFO] [Thread-126691] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T11:17:23.160 [DEBUG] [Thread-126691] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:17:23.160 [DEBUG] [Thread-126691] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T11:17:23.160 [DEBUG] [Thread-126691] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:17:23.160 [DEBUG] [Thread-126691] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:17:23.160 [DEBUG] [Thread-126691] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:17:23.160 [DEBUG] [Thread-126691] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:17:23.160 [DEBUG] [Thread-126691] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:17:23.160 [DEBUG] [Thread-126691] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:17:23.160 [DEBUG] [Thread-126691] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:17:23.160 [DEBUG] [Thread-126691] [transport.py] [_log()] client lang: <none>
2025-12-31T11:17:23.160 [DEBUG] [Thread-126691] [transport.py] [_log()] server lang: <none>
2025-12-31T11:17:23.160 [DEBUG] [Thread-126691] [transport.py] [_log()] kex follows: False
2025-12-31T11:17:23.160 [DEBUG] [Thread-126691] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:17:23.160 [DEBUG] [Thread-126691] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:17:23.160 [DEBUG] [Thread-126691] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:17:23.160 [DEBUG] [Thread-126691] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:17:23.160 [DEBUG] [Thread-126691] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:17:23.160 [DEBUG] [Thread-126691] [transport.py] [_log()] Compression: none
2025-12-31T11:17:23.161 [DEBUG] [Thread-126691] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:17:23.177 [DEBUG] [Thread-126691] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:17:23.178 [DEBUG] [Thread-126691] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:17:23.178 [DEBUG] [Thread-126691] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T11:17:23.178 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T11:17:23.179 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:17:23.180 [DEBUG] [Thread-126691] [transport.py] [_log()] userauth is OK
2025-12-31T11:17:23.180 [DEBUG] [Thread-126691] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:17:23.180 [DEBUG] [Thread-126691] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:17:23.180 [DEBUG] [Thread-126691] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T11:17:23.180 [DEBUG] [Thread-126691] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:17:23.205 [INFO] [Thread-126691] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:17:23.206 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:17:23.815 [DEBUG] [Thread-126691] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:17:23.816 [DEBUG] [Thread-126691] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:17:23.816 [DEBUG] [Thread-126691] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T11:17:23.857 [DEBUG] [Thread-126691] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:17:23.857 [DEBUG] [Thread-126691] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:17:23.861 [DEBUG] [Thread-126691] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:17:23.873 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:17:23.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T11:17:23.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T11:17:23.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T11:17:23.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:17:23.884 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T11:17:23.884 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:17:23.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:17:23.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T11:17:23.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.386949 -999.00  +25.70  11.40     12   -4.80 1 1 1 1 1   888    0 31.94 97.88 ----- 15.6 11.4 251.4 20.7 32.2 -26.6 31.6 -24.7 30.6 -21.7 31.0 -24.5
2025-12-31T11:17:23.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T11:17:23.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T11:17:23.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.386949
2025-12-31T11:17:23.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T11:17:23.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T11:17:23.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T11:17:23.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T11:17:23.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T11:17:23.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T11:16:57', tmtdew=36.25, humidity=8.06, cloud=0.0, wind=15.53, temperature=25.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T09:17:12.394', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T11:17:23.886 [DEBUG] [Thread-126691] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:17:23.972 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T11:17:23.984 [DEBUG] [Thread-126694] [transport.py] [_log()] starting thread (client mode): 0xb9546410
2025-12-31T11:17:23.984 [DEBUG] [Thread-126694] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:17:23.998 [DEBUG] [Thread-126694] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T11:17:23.999 [INFO] [Thread-126694] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T11:17:24.006 [DEBUG] [Thread-126694] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:17:24.006 [DEBUG] [Thread-126694] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T11:17:24.006 [DEBUG] [Thread-126694] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:17:24.006 [DEBUG] [Thread-126694] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:17:24.006 [DEBUG] [Thread-126694] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:17:24.006 [DEBUG] [Thread-126694] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:17:24.006 [DEBUG] [Thread-126694] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:17:24.006 [DEBUG] [Thread-126694] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:17:24.006 [DEBUG] [Thread-126694] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:17:24.006 [DEBUG] [Thread-126694] [transport.py] [_log()] client lang: <none>
2025-12-31T11:17:24.006 [DEBUG] [Thread-126694] [transport.py] [_log()] server lang: <none>
2025-12-31T11:17:24.006 [DEBUG] [Thread-126694] [transport.py] [_log()] kex follows: False
2025-12-31T11:17:24.006 [DEBUG] [Thread-126694] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:17:24.006 [DEBUG] [Thread-126694] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:17:24.007 [DEBUG] [Thread-126694] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:17:24.007 [DEBUG] [Thread-126694] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:17:24.007 [DEBUG] [Thread-126694] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:17:24.007 [DEBUG] [Thread-126694] [transport.py] [_log()] Compression: none
2025-12-31T11:17:24.007 [DEBUG] [Thread-126694] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:17:24.067 [DEBUG] [Thread-126694] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:17:24.067 [DEBUG] [Thread-126694] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:17:24.068 [DEBUG] [Thread-126694] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T11:17:24.068 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T11:17:24.069 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:17:24.122 [DEBUG] [Thread-126694] [transport.py] [_log()] userauth is OK
2025-12-31T11:17:24.123 [DEBUG] [Thread-126694] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:17:24.123 [DEBUG] [Thread-126694] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:17:24.123 [DEBUG] [Thread-126694] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T11:17:24.123 [DEBUG] [Thread-126694] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:17:24.141 [INFO] [Thread-126694] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:17:24.141 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T11:17:24.142 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:17:24.987 [DEBUG] [Thread-126694] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:17:24.988 [DEBUG] [Thread-126694] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:17:25.036 [DEBUG] [Thread-126694] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:17:25.036 [DEBUG] [Thread-126694] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:17:25.045 [DEBUG] [Thread-126694] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:17:25.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:17:25.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T11:17:25.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T11:17:25.073 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:17:25.074 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:17:25.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:17:25.082 [DEBUG] [Thread-126694] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:17:29.956 [DEBUG] [Thread-126696 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:17:32.149 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:17:32.150 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:17:45.003 [DEBUG] [Thread-126697 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:17:55.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T11:17:55.105 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T11:17:55.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T11:17:55.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 11, 17, 29), 36.77, 7.77, 0.0, 14.27, 25.52, 0, 0, 0, 2, 0, 0),)
2025-12-31T11:17:55.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 11:17:29
2025-12-31T11:17:55.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T11:17:56.114 [DEBUG] [Thread-126698] [transport.py] [_log()] starting thread (client mode): 0xb9544070
2025-12-31T11:17:56.114 [DEBUG] [Thread-126698] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:17:56.135 [DEBUG] [Thread-126698] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T11:17:56.135 [INFO] [Thread-126698] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T11:17:56.138 [DEBUG] [Thread-126698] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:17:56.138 [DEBUG] [Thread-126698] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T11:17:56.138 [DEBUG] [Thread-126698] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:17:56.138 [DEBUG] [Thread-126698] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:17:56.139 [DEBUG] [Thread-126698] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:17:56.139 [DEBUG] [Thread-126698] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:17:56.139 [DEBUG] [Thread-126698] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:17:56.139 [DEBUG] [Thread-126698] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:17:56.139 [DEBUG] [Thread-126698] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:17:56.139 [DEBUG] [Thread-126698] [transport.py] [_log()] client lang: <none>
2025-12-31T11:17:56.139 [DEBUG] [Thread-126698] [transport.py] [_log()] server lang: <none>
2025-12-31T11:17:56.139 [DEBUG] [Thread-126698] [transport.py] [_log()] kex follows: False
2025-12-31T11:17:56.139 [DEBUG] [Thread-126698] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:17:56.139 [DEBUG] [Thread-126698] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:17:56.139 [DEBUG] [Thread-126698] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:17:56.139 [DEBUG] [Thread-126698] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:17:56.139 [DEBUG] [Thread-126698] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:17:56.140 [DEBUG] [Thread-126698] [transport.py] [_log()] Compression: none
2025-12-31T11:17:56.140 [DEBUG] [Thread-126698] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:17:56.158 [DEBUG] [Thread-126698] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:17:56.159 [DEBUG] [Thread-126698] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:17:56.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T11:17:56.161 [DEBUG] [Thread-126698] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T11:17:56.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:17:56.163 [DEBUG] [Thread-126698] [transport.py] [_log()] userauth is OK
2025-12-31T11:17:56.163 [DEBUG] [Thread-126698] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:17:56.164 [DEBUG] [Thread-126698] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:17:56.164 [DEBUG] [Thread-126698] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T11:17:56.164 [DEBUG] [Thread-126698] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:17:56.185 [INFO] [Thread-126698] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:17:56.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:17:56.775 [DEBUG] [Thread-126698] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:17:56.775 [DEBUG] [Thread-126698] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:17:56.775 [DEBUG] [Thread-126698] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T11:17:56.816 [DEBUG] [Thread-126698] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:17:56.816 [DEBUG] [Thread-126698] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:17:56.819 [DEBUG] [Thread-126698] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:17:56.831 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:17:56.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T11:17:56.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T11:17:56.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T11:17:56.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:17:56.843 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T11:17:56.843 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:17:56.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:17:56.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T11:17:56.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.387296 -999.00  +25.30  24.83     12   -5.40 1 2 1 1 1   888    0 32.46 99.98 ----- 24.8 24.8 255.2 27.4 32.1 -25.9 31.6 -23.9 30.6 -22.0 30.8 -25.5
2025-12-31T11:17:56.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T11:17:56.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T11:17:56.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.387296
2025-12-31T11:17:56.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T11:17:56.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T11:17:56.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T11:17:56.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T11:17:56.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T11:17:56.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T11:17:29', tmtdew=36.77, humidity=7.77, cloud=0.0, wind=14.27, temperature=25.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T09:17:42.374', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T11:17:56.845 [DEBUG] [Thread-126698] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:17:56.929 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T11:17:56.942 [DEBUG] [Thread-126701] [transport.py] [_log()] starting thread (client mode): 0xb95470a0
2025-12-31T11:17:56.942 [DEBUG] [Thread-126701] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:17:56.957 [DEBUG] [Thread-126701] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T11:17:56.958 [INFO] [Thread-126701] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T11:17:56.965 [DEBUG] [Thread-126701] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:17:56.965 [DEBUG] [Thread-126701] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T11:17:56.965 [DEBUG] [Thread-126701] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:17:56.965 [DEBUG] [Thread-126701] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:17:56.965 [DEBUG] [Thread-126701] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:17:56.965 [DEBUG] [Thread-126701] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:17:56.965 [DEBUG] [Thread-126701] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:17:56.965 [DEBUG] [Thread-126701] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:17:56.965 [DEBUG] [Thread-126701] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:17:56.966 [DEBUG] [Thread-126701] [transport.py] [_log()] client lang: <none>
2025-12-31T11:17:56.966 [DEBUG] [Thread-126701] [transport.py] [_log()] server lang: <none>
2025-12-31T11:17:56.966 [DEBUG] [Thread-126701] [transport.py] [_log()] kex follows: False
2025-12-31T11:17:56.966 [DEBUG] [Thread-126701] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:17:56.966 [DEBUG] [Thread-126701] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:17:56.966 [DEBUG] [Thread-126701] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:17:56.966 [DEBUG] [Thread-126701] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:17:56.966 [DEBUG] [Thread-126701] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:17:56.966 [DEBUG] [Thread-126701] [transport.py] [_log()] Compression: none
2025-12-31T11:17:56.966 [DEBUG] [Thread-126701] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:17:57.022 [DEBUG] [Thread-126701] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:17:57.023 [DEBUG] [Thread-126701] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:17:57.024 [DEBUG] [Thread-126701] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T11:17:57.024 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T11:17:57.024 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:17:57.079 [DEBUG] [Thread-126701] [transport.py] [_log()] userauth is OK
2025-12-31T11:17:57.079 [DEBUG] [Thread-126701] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:17:57.079 [DEBUG] [Thread-126701] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:17:57.079 [DEBUG] [Thread-126701] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T11:17:57.080 [DEBUG] [Thread-126701] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:17:57.099 [INFO] [Thread-126701] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:17:57.099 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T11:17:57.100 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:17:57.925 [DEBUG] [Thread-126701] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:17:57.926 [DEBUG] [Thread-126701] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:17:57.974 [DEBUG] [Thread-126701] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:17:57.974 [DEBUG] [Thread-126701] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:17:57.984 [DEBUG] [Thread-126701] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:17:57.993 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:17:57.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T11:17:58.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T11:17:58.012 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:17:58.012 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:17:58.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:17:58.021 [DEBUG] [Thread-126701] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:18:00.036 [DEBUG] [Thread-126703 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:18:08.915 [DEBUG] [Thread-126704 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:18:15.092 [DEBUG] [Thread-126705 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:18:28.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T11:18:28.030 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T11:18: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-12-31T11:18:28.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 11, 18, 1), 37.04, 7.67, 0.0, 19.78, 25.55, 0, 0, 0, 2, 0, 0),)
2025-12-31T11:18:28.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 11:18:01
2025-12-31T11:18:28.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T11:18:29.028 [DEBUG] [Thread-126706] [transport.py] [_log()] starting thread (client mode): 0xb9547d90
2025-12-31T11:18:29.028 [DEBUG] [Thread-126706] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:18:29.048 [DEBUG] [Thread-126706] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T11:18:29.048 [INFO] [Thread-126706] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T11:18:29.052 [DEBUG] [Thread-126706] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:18:29.052 [DEBUG] [Thread-126706] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T11:18:29.052 [DEBUG] [Thread-126706] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:18:29.052 [DEBUG] [Thread-126706] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:18:29.052 [DEBUG] [Thread-126706] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:18:29.052 [DEBUG] [Thread-126706] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:18:29.052 [DEBUG] [Thread-126706] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:18:29.052 [DEBUG] [Thread-126706] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:18:29.052 [DEBUG] [Thread-126706] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:18:29.052 [DEBUG] [Thread-126706] [transport.py] [_log()] client lang: <none>
2025-12-31T11:18:29.052 [DEBUG] [Thread-126706] [transport.py] [_log()] server lang: <none>
2025-12-31T11:18:29.052 [DEBUG] [Thread-126706] [transport.py] [_log()] kex follows: False
2025-12-31T11:18:29.052 [DEBUG] [Thread-126706] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:18:29.052 [DEBUG] [Thread-126706] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:18:29.052 [DEBUG] [Thread-126706] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:18:29.052 [DEBUG] [Thread-126706] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:18:29.052 [DEBUG] [Thread-126706] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:18:29.052 [DEBUG] [Thread-126706] [transport.py] [_log()] Compression: none
2025-12-31T11:18:29.052 [DEBUG] [Thread-126706] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:18:29.069 [DEBUG] [Thread-126706] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:18:29.070 [DEBUG] [Thread-126706] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:18:29.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T11:18:29.070 [DEBUG] [Thread-126706] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T11:18:29.071 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:18:29.072 [DEBUG] [Thread-126706] [transport.py] [_log()] userauth is OK
2025-12-31T11:18:29.072 [DEBUG] [Thread-126706] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:18:29.072 [DEBUG] [Thread-126706] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:18:29.072 [DEBUG] [Thread-126706] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T11:18:29.073 [DEBUG] [Thread-126706] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:18:29.093 [INFO] [Thread-126706] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:18:29.094 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:18:29.720 [DEBUG] [Thread-126706] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:18:29.720 [DEBUG] [Thread-126706] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:18:29.721 [DEBUG] [Thread-126706] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T11:18:29.761 [DEBUG] [Thread-126706] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:18:29.761 [DEBUG] [Thread-126706] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:18:29.765 [DEBUG] [Thread-126706] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:18:29.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:18:29.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T11:18:29.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T11:18:29.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T11:18:29.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:18:29.788 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T11:18:29.788 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:18:29.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:18:29.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T11:18:29.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.387643 -999.00  +24.80  14.19     13   -5.20 1 2 1 1 1   888    0 32.14 101.89 ----- 14.1 14.2 244.4 20.9 32.1 -25.9 31.5 -24.4 30.6 -21.6 30.9 -23.8
2025-12-31T11:18:29.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T11:18:29.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T11:18:29.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.387643
2025-12-31T11:18:29.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T11:18:29.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T11:18:29.791 [DEBUG] [Thread-126706] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:18:29.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T11:18:29.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T11:18:29.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T11:18:29.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T11:18:01', tmtdew=37.04, humidity=7.67, cloud=0.0, wind=19.78, temperature=25.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T09:18:12.355', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T11:18:29.871 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T11:18:29.884 [DEBUG] [Thread-126709] [transport.py] [_log()] starting thread (client mode): 0xb9547fa0
2025-12-31T11:18:29.885 [DEBUG] [Thread-126709] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:18:29.899 [DEBUG] [Thread-126709] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T11:18:29.900 [INFO] [Thread-126709] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T11:18:29.907 [DEBUG] [Thread-126709] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:18:29.907 [DEBUG] [Thread-126709] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T11:18:29.907 [DEBUG] [Thread-126709] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:18:29.907 [DEBUG] [Thread-126709] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:18:29.907 [DEBUG] [Thread-126709] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:18:29.908 [DEBUG] [Thread-126709] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:18:29.908 [DEBUG] [Thread-126709] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:18:29.908 [DEBUG] [Thread-126709] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:18:29.908 [DEBUG] [Thread-126709] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:18:29.908 [DEBUG] [Thread-126709] [transport.py] [_log()] client lang: <none>
2025-12-31T11:18:29.908 [DEBUG] [Thread-126709] [transport.py] [_log()] server lang: <none>
2025-12-31T11:18:29.908 [DEBUG] [Thread-126709] [transport.py] [_log()] kex follows: False
2025-12-31T11:18:29.908 [DEBUG] [Thread-126709] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:18:29.908 [DEBUG] [Thread-126709] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:18:29.908 [DEBUG] [Thread-126709] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:18:29.908 [DEBUG] [Thread-126709] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:18:29.908 [DEBUG] [Thread-126709] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:18:29.908 [DEBUG] [Thread-126709] [transport.py] [_log()] Compression: none
2025-12-31T11:18:29.908 [DEBUG] [Thread-126709] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:18:29.967 [DEBUG] [Thread-126709] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:18:29.968 [DEBUG] [Thread-126709] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:18:29.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T11:18:29.969 [DEBUG] [Thread-126709] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T11:18:29.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:18:30.026 [DEBUG] [Thread-126709] [transport.py] [_log()] userauth is OK
2025-12-31T11:18:30.027 [DEBUG] [Thread-126709] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:18:30.027 [DEBUG] [Thread-126709] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:18:30.027 [DEBUG] [Thread-126709] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T11:18:30.027 [DEBUG] [Thread-126709] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:18:30.046 [INFO] [Thread-126709] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:18: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-12-31T11:18:30.047 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:18:30.124 [DEBUG] [Thread-126711 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:18:30.895 [DEBUG] [Thread-126709] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:18:30.896 [DEBUG] [Thread-126709] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:18:30.944 [DEBUG] [Thread-126709] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:18:30.944 [DEBUG] [Thread-126709] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:18:30.953 [DEBUG] [Thread-126709] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:18:30.962 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:18:30.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T11:18:30.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T11:18:30.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:18:30.980 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:18:30.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:18:30.988 [DEBUG] [Thread-126709] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:18:32.288 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:18:32.289 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:18:45.177 [DEBUG] [Thread-126712 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:19:00.211 [DEBUG] [Thread-126713 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:19:01.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T11:19:01.010 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T11:19:01.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T11:19:01.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 11, 18, 33), 36.96, 7.72, 0.0, 21.81, 25.6, 0, 0, 0, 2, 0, 0),)
2025-12-31T11:19:01.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 11:18:33
2025-12-31T11:19:01.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T11:19:02.019 [DEBUG] [Thread-126714] [transport.py] [_log()] starting thread (client mode): 0xb9545240
2025-12-31T11:19:02.019 [DEBUG] [Thread-126714] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:19:02.038 [DEBUG] [Thread-126714] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T11:19:02.038 [INFO] [Thread-126714] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T11:19:02.041 [DEBUG] [Thread-126714] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:19:02.041 [DEBUG] [Thread-126714] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T11:19:02.041 [DEBUG] [Thread-126714] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:19:02.041 [DEBUG] [Thread-126714] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:19:02.041 [DEBUG] [Thread-126714] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:19:02.041 [DEBUG] [Thread-126714] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:19:02.041 [DEBUG] [Thread-126714] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:19:02.041 [DEBUG] [Thread-126714] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:19:02.041 [DEBUG] [Thread-126714] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:19:02.041 [DEBUG] [Thread-126714] [transport.py] [_log()] client lang: <none>
2025-12-31T11:19:02.041 [DEBUG] [Thread-126714] [transport.py] [_log()] server lang: <none>
2025-12-31T11:19:02.041 [DEBUG] [Thread-126714] [transport.py] [_log()] kex follows: False
2025-12-31T11:19:02.041 [DEBUG] [Thread-126714] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:19:02.042 [DEBUG] [Thread-126714] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:19:02.042 [DEBUG] [Thread-126714] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:19:02.042 [DEBUG] [Thread-126714] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:19:02.042 [DEBUG] [Thread-126714] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:19:02.042 [DEBUG] [Thread-126714] [transport.py] [_log()] Compression: none
2025-12-31T11:19:02.042 [DEBUG] [Thread-126714] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:19:02.061 [DEBUG] [Thread-126714] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:19:02.061 [DEBUG] [Thread-126714] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:19:02.062 [DEBUG] [Thread-126714] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T11:19:02.062 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T11:19:02.063 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:19:02.064 [DEBUG] [Thread-126714] [transport.py] [_log()] userauth is OK
2025-12-31T11:19:02.064 [DEBUG] [Thread-126714] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:19:02.064 [DEBUG] [Thread-126714] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:19:02.065 [DEBUG] [Thread-126714] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T11:19:02.065 [DEBUG] [Thread-126714] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:19:02.100 [INFO] [Thread-126714] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:19:02.101 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:19:02.714 [DEBUG] [Thread-126714] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:19:02.714 [DEBUG] [Thread-126714] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:19:02.714 [DEBUG] [Thread-126714] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T11:19:02.755 [DEBUG] [Thread-126714] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:19:02.755 [DEBUG] [Thread-126714] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:19:02.759 [DEBUG] [Thread-126714] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:19:02.770 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:19:02.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T11:19:02.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T11:19:02.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T11:19:02.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:19:02.783 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T11:19:02.783 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:19:02.783 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:19:02.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T11:19:02.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.387991 -999.00  +24.90  17.32     13   -5.00 1 2 1 1 1   888    0 32.60 104.63 ----- 20.8 17.3 258.4 25.2 32.1 -26.7 31.6 -23.9 30.5 -21.6 30.9 -23.8
2025-12-31T11:19:02.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T11:19:02.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T11:19:02.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.387991
2025-12-31T11:19:02.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T11:19:02.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T11:19:02.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T11:19:02.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T11:19:02.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T11:19:02.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T11:18:33', tmtdew=36.96, humidity=7.72, cloud=0.0, wind=21.81, temperature=25.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T09:18:42.422', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T11:19:02.786 [DEBUG] [Thread-126714] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:19:02.867 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T11:19:02.880 [DEBUG] [Thread-126717] [transport.py] [_log()] starting thread (client mode): 0xb6b4b010
2025-12-31T11:19:02.880 [DEBUG] [Thread-126717] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:19:02.895 [DEBUG] [Thread-126717] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T11:19:02.895 [INFO] [Thread-126717] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T11:19:02.903 [DEBUG] [Thread-126717] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:19:02.903 [DEBUG] [Thread-126717] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T11:19:02.904 [DEBUG] [Thread-126717] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:19:02.904 [DEBUG] [Thread-126717] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:19:02.904 [DEBUG] [Thread-126717] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:19:02.904 [DEBUG] [Thread-126717] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:19:02.904 [DEBUG] [Thread-126717] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:19:02.904 [DEBUG] [Thread-126717] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:19:02.904 [DEBUG] [Thread-126717] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:19:02.904 [DEBUG] [Thread-126717] [transport.py] [_log()] client lang: <none>
2025-12-31T11:19:02.904 [DEBUG] [Thread-126717] [transport.py] [_log()] server lang: <none>
2025-12-31T11:19:02.904 [DEBUG] [Thread-126717] [transport.py] [_log()] kex follows: False
2025-12-31T11:19:02.904 [DEBUG] [Thread-126717] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:19:02.904 [DEBUG] [Thread-126717] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:19:02.904 [DEBUG] [Thread-126717] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:19:02.904 [DEBUG] [Thread-126717] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:19:02.904 [DEBUG] [Thread-126717] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:19:02.904 [DEBUG] [Thread-126717] [transport.py] [_log()] Compression: none
2025-12-31T11:19:02.904 [DEBUG] [Thread-126717] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:19:02.963 [DEBUG] [Thread-126717] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:19:02.964 [DEBUG] [Thread-126717] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:19:02.964 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T11:19:02.965 [DEBUG] [Thread-126717] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T11:19:02.965 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:19:03.023 [DEBUG] [Thread-126717] [transport.py] [_log()] userauth is OK
2025-12-31T11:19:03.023 [DEBUG] [Thread-126717] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:19:03.023 [DEBUG] [Thread-126717] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:19:03.023 [DEBUG] [Thread-126717] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T11:19:03.023 [DEBUG] [Thread-126717] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:19:03.042 [INFO] [Thread-126717] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:19:03.042 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T11:19:03.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:19:03.917 [DEBUG] [Thread-126717] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:19:03.917 [DEBUG] [Thread-126717] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:19:03.965 [DEBUG] [Thread-126717] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:19:03.965 [DEBUG] [Thread-126717] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:19:03.974 [DEBUG] [Thread-126717] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:19:03.983 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:19:03.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T11:19:03.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T11:19:04.001 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:19:04.001 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:19:04.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:19:04.009 [DEBUG] [Thread-126717] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:19:08.965 [DEBUG] [Thread-126719 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:19:15.248 [DEBUG] [Thread-126720 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:19:30.299 [DEBUG] [Thread-126721 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:19:32.429 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:19:32.430 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:19:34.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T11:19:34.031 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T11:19:34.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T11:19:34.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 11, 19, 5), 36.99, 7.69, 0.0, 21.07, 25.5, 0, 0, 0, 2, 0, 0),)
2025-12-31T11:19:34.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 11:19:05
2025-12-31T11:19:34.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T11:19:35.076 [DEBUG] [Thread-126722] [transport.py] [_log()] starting thread (client mode): 0xb6b49750
2025-12-31T11:19:35.076 [DEBUG] [Thread-126722] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:19:35.097 [DEBUG] [Thread-126722] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T11:19:35.097 [INFO] [Thread-126722] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T11:19:35.097 [DEBUG] [Thread-126722] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:19:35.097 [DEBUG] [Thread-126722] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T11:19:35.098 [DEBUG] [Thread-126722] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:19:35.098 [DEBUG] [Thread-126722] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:19:35.098 [DEBUG] [Thread-126722] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:19:35.098 [DEBUG] [Thread-126722] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:19:35.098 [DEBUG] [Thread-126722] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:19:35.098 [DEBUG] [Thread-126722] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:19:35.098 [DEBUG] [Thread-126722] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:19:35.098 [DEBUG] [Thread-126722] [transport.py] [_log()] client lang: <none>
2025-12-31T11:19:35.098 [DEBUG] [Thread-126722] [transport.py] [_log()] server lang: <none>
2025-12-31T11:19:35.098 [DEBUG] [Thread-126722] [transport.py] [_log()] kex follows: False
2025-12-31T11:19:35.098 [DEBUG] [Thread-126722] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:19:35.098 [DEBUG] [Thread-126722] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:19:35.098 [DEBUG] [Thread-126722] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:19:35.098 [DEBUG] [Thread-126722] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:19:35.098 [DEBUG] [Thread-126722] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:19:35.098 [DEBUG] [Thread-126722] [transport.py] [_log()] Compression: none
2025-12-31T11:19:35.098 [DEBUG] [Thread-126722] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:19:35.116 [DEBUG] [Thread-126722] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:19:35.116 [DEBUG] [Thread-126722] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:19:35.116 [DEBUG] [Thread-126722] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T11:19:35.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T11:19:35.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:19:35.118 [DEBUG] [Thread-126722] [transport.py] [_log()] userauth is OK
2025-12-31T11:19:35.118 [DEBUG] [Thread-126722] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:19:35.118 [DEBUG] [Thread-126722] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:19:35.118 [DEBUG] [Thread-126722] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T11:19:35.118 [DEBUG] [Thread-126722] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:19:35.127 [INFO] [Thread-126722] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:19:35.127 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:19:35.789 [DEBUG] [Thread-126722] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:19:35.789 [DEBUG] [Thread-126722] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:19:35.789 [DEBUG] [Thread-126722] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T11:19:35.830 [DEBUG] [Thread-126722] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:19:35.830 [DEBUG] [Thread-126722] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:19:35.834 [DEBUG] [Thread-126722] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:19:35.846 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:19:35.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T11:19:35.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T11:19:35.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T11:19:35.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:19:35.853 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T11:19:35.853 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:19:35.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:19:35.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T11:19:35.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.388338 -999.00  +24.90  16.27     13   -5.00 1 2 1 1 1   888    0 32.46 102.41 ----- 12.3 16.3 274.4 23.6 32.1 -24.5 31.5 -23.7 30.6 -21.0 31.0 -22.5
2025-12-31T11:19:35.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T11:19:35.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T11:19:35.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.388338
2025-12-31T11:19:35.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T11:19:35.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T11:19:35.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T11:19:35.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T11:19:35.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T11:19:35.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T11:19:05', tmtdew=36.99, humidity=7.69, cloud=0.0, wind=21.07, temperature=25.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T09:19:12.403', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T11:19:35.855 [DEBUG] [Thread-126722] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:19:35.929 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T11:19:45.333 [DEBUG] [Thread-126725 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:20:00.384 [DEBUG] [Thread-126726 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:20:09.022 [DEBUG] [Thread-126727 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:20:15.414 [DEBUG] [Thread-126728 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:20:30.447 [DEBUG] [Thread-126729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:20:32.570 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:20:32.572 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:20:45.484 [DEBUG] [Thread-126730 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:21:00.515 [DEBUG] [Thread-126731 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:21:09.054 [DEBUG] [Thread-126732 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:21:15.549 [DEBUG] [Thread-126733 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:21:30.581 [DEBUG] [Thread-126734 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:21:32.711 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:21:32.712 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:21:45.613 [DEBUG] [Thread-126735 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:21:49.013 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-12-31T11:22:00.649 [DEBUG] [Thread-126736 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:22:09.107 [DEBUG] [Thread-126737 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:22:15.680 [DEBUG] [Thread-126738 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:22:19.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T11:22:19.044 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T11:22:19.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T11:22:19.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 11, 21, 45), 36.49, 7.84, 0.0, 18.39, 25.13, 0, 0, 0, 2, 0, 0),)
2025-12-31T11:22:19.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 11:21:45
2025-12-31T11:22:19.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T11:22:20.081 [DEBUG] [Thread-126739] [transport.py] [_log()] starting thread (client mode): 0xb6b4aa70
2025-12-31T11:22:20.081 [DEBUG] [Thread-126739] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:22:20.100 [DEBUG] [Thread-126739] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T11:22:20.100 [INFO] [Thread-126739] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T11:22:20.103 [DEBUG] [Thread-126739] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:22:20.103 [DEBUG] [Thread-126739] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T11:22:20.103 [DEBUG] [Thread-126739] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:22:20.103 [DEBUG] [Thread-126739] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:22:20.103 [DEBUG] [Thread-126739] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:22:20.103 [DEBUG] [Thread-126739] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:22:20.103 [DEBUG] [Thread-126739] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:22:20.103 [DEBUG] [Thread-126739] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:22:20.103 [DEBUG] [Thread-126739] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:22:20.103 [DEBUG] [Thread-126739] [transport.py] [_log()] client lang: <none>
2025-12-31T11:22:20.103 [DEBUG] [Thread-126739] [transport.py] [_log()] server lang: <none>
2025-12-31T11:22:20.103 [DEBUG] [Thread-126739] [transport.py] [_log()] kex follows: False
2025-12-31T11:22:20.103 [DEBUG] [Thread-126739] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:22:20.103 [DEBUG] [Thread-126739] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:22:20.103 [DEBUG] [Thread-126739] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:22:20.103 [DEBUG] [Thread-126739] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:22:20.103 [DEBUG] [Thread-126739] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:22:20.103 [DEBUG] [Thread-126739] [transport.py] [_log()] Compression: none
2025-12-31T11:22:20.103 [DEBUG] [Thread-126739] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:22:20.119 [DEBUG] [Thread-126739] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:22:20.119 [DEBUG] [Thread-126739] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:22:20.119 [DEBUG] [Thread-126739] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T11:22:20.120 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T11:22:20.120 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:22:20.121 [DEBUG] [Thread-126739] [transport.py] [_log()] userauth is OK
2025-12-31T11:22:20.121 [DEBUG] [Thread-126739] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:22:20.121 [DEBUG] [Thread-126739] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:22:20.122 [DEBUG] [Thread-126739] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T11:22:20.122 [DEBUG] [Thread-126739] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:22:20.142 [INFO] [Thread-126739] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:22:20.142 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:22:20.815 [DEBUG] [Thread-126739] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:22:20.816 [DEBUG] [Thread-126739] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:22:20.816 [DEBUG] [Thread-126739] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T11:22:20.856 [DEBUG] [Thread-126739] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:22:20.856 [DEBUG] [Thread-126739] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:22:20.859 [DEBUG] [Thread-126739] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:22:20.871 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:22:20.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T11:22:20.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T11:22:20.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T11:22:20.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:22:20.885 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T11:22:20.885 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:22:20.885 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:22:20.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T11:22:20.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.390074 -999.00  +25.50  15.76     12   -5.00 1 2 1 1 1   888    0 32.23 87.77 ----- 20.9 15.8 253.6 20.4 32.4 -24.1 31.7 -21.9 30.8 -21.1 31.2 -23.0
2025-12-31T11:22:20.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T11:22:20.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T11:22:20.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.390074
2025-12-31T11:22:20.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T11:22:20.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T11:22:20.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T11:22:20.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T11:22:20.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T11:22:20.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T11:21:45', tmtdew=36.49, humidity=7.84, cloud=0.0, wind=18.39, temperature=25.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T09:21:42.394', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T11:22:20.888 [DEBUG] [Thread-126739] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:22:20.971 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T11:22:20.984 [DEBUG] [Thread-126742] [transport.py] [_log()] starting thread (client mode): 0xb9544b80
2025-12-31T11:22:20.984 [DEBUG] [Thread-126742] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:22:21.000 [DEBUG] [Thread-126742] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T11:22:21.001 [INFO] [Thread-126742] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T11:22:21.008 [DEBUG] [Thread-126742] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:22:21.009 [DEBUG] [Thread-126742] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T11:22:21.009 [DEBUG] [Thread-126742] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:22:21.009 [DEBUG] [Thread-126742] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:22:21.009 [DEBUG] [Thread-126742] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:22:21.009 [DEBUG] [Thread-126742] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:22:21.009 [DEBUG] [Thread-126742] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:22:21.010 [DEBUG] [Thread-126742] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:22:21.010 [DEBUG] [Thread-126742] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:22:21.010 [DEBUG] [Thread-126742] [transport.py] [_log()] client lang: <none>
2025-12-31T11:22:21.010 [DEBUG] [Thread-126742] [transport.py] [_log()] server lang: <none>
2025-12-31T11:22:21.010 [DEBUG] [Thread-126742] [transport.py] [_log()] kex follows: False
2025-12-31T11:22:21.010 [DEBUG] [Thread-126742] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:22:21.010 [DEBUG] [Thread-126742] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:22:21.010 [DEBUG] [Thread-126742] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:22:21.011 [DEBUG] [Thread-126742] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:22:21.011 [DEBUG] [Thread-126742] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:22:21.011 [DEBUG] [Thread-126742] [transport.py] [_log()] Compression: none
2025-12-31T11:22:21.011 [DEBUG] [Thread-126742] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:22:21.068 [DEBUG] [Thread-126742] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:22:21.068 [DEBUG] [Thread-126742] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:22:21.069 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T11:22:21.070 [DEBUG] [Thread-126742] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T11:22:21.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:22:21.123 [DEBUG] [Thread-126742] [transport.py] [_log()] userauth is OK
2025-12-31T11:22:21.124 [DEBUG] [Thread-126742] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:22:21.124 [DEBUG] [Thread-126742] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:22:21.124 [DEBUG] [Thread-126742] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T11:22:21.124 [DEBUG] [Thread-126742] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:22:21.144 [INFO] [Thread-126742] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:22:21.145 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T11:22:21.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:22:21.978 [DEBUG] [Thread-126742] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:22:21.978 [DEBUG] [Thread-126742] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:22:22.026 [DEBUG] [Thread-126742] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:22:22.026 [DEBUG] [Thread-126742] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:22:22.035 [DEBUG] [Thread-126742] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:22:22.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:22:22.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T11:22:22.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T11:22:22.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:22:22.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:22:22.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:22:22.074 [DEBUG] [Thread-126742] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:22:30.715 [DEBUG] [Thread-126744 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:22:32.853 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:22:32.854 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:22:45.777 [DEBUG] [Thread-126745 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:22:52.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T11:22:52.095 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T11:22:52.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T11:22:52.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 11, 22, 49), 36.7, 7.92, 0.0, 22.32, 25.37, 0, 0, 0, 2, 0, 0),)
2025-12-31T11:22:52.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 11:22:49
2025-12-31T11:22:52.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T11:22:53.125 [DEBUG] [Thread-126746] [transport.py] [_log()] starting thread (client mode): 0xb9546b90
2025-12-31T11:22:53.125 [DEBUG] [Thread-126746] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:22:53.145 [DEBUG] [Thread-126746] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T11:22:53.145 [INFO] [Thread-126746] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T11:22:53.148 [DEBUG] [Thread-126746] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:22:53.148 [DEBUG] [Thread-126746] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T11:22:53.148 [DEBUG] [Thread-126746] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:22:53.148 [DEBUG] [Thread-126746] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:22:53.148 [DEBUG] [Thread-126746] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:22:53.148 [DEBUG] [Thread-126746] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:22:53.148 [DEBUG] [Thread-126746] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:22:53.148 [DEBUG] [Thread-126746] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:22:53.148 [DEBUG] [Thread-126746] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:22:53.148 [DEBUG] [Thread-126746] [transport.py] [_log()] client lang: <none>
2025-12-31T11:22:53.148 [DEBUG] [Thread-126746] [transport.py] [_log()] server lang: <none>
2025-12-31T11:22:53.148 [DEBUG] [Thread-126746] [transport.py] [_log()] kex follows: False
2025-12-31T11:22:53.148 [DEBUG] [Thread-126746] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:22:53.148 [DEBUG] [Thread-126746] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:22:53.148 [DEBUG] [Thread-126746] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:22:53.148 [DEBUG] [Thread-126746] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:22:53.148 [DEBUG] [Thread-126746] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:22:53.148 [DEBUG] [Thread-126746] [transport.py] [_log()] Compression: none
2025-12-31T11:22:53.148 [DEBUG] [Thread-126746] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:22:53.161 [DEBUG] [Thread-126746] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:22:53.162 [DEBUG] [Thread-126746] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:22:53.162 [DEBUG] [Thread-126746] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T11:22:53.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T11:22:53.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:22:53.162 [DEBUG] [Thread-126746] [transport.py] [_log()] userauth is OK
2025-12-31T11:22:53.163 [DEBUG] [Thread-126746] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:22:53.163 [DEBUG] [Thread-126746] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:22:53.163 [DEBUG] [Thread-126746] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T11:22:53.163 [DEBUG] [Thread-126746] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:22:53.176 [INFO] [Thread-126746] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:22:53.176 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:22:53.818 [DEBUG] [Thread-126746] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:22:53.818 [DEBUG] [Thread-126746] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:22:53.818 [DEBUG] [Thread-126746] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T11:22:53.860 [DEBUG] [Thread-126746] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:22:53.860 [DEBUG] [Thread-126746] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:22:53.862 [DEBUG] [Thread-126746] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:22:53.873 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:22:53.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T11:22:53.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T11:22:53.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T11:22:53.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:22:53.879 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T11:22:53.879 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:22:53.879 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:22:53.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T11:22:53.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.390421 -999.00  +25.30  23.05     12   -5.30 1 2 1 1 1   888    0 31.87 88.47 ----- 19.6 23.1 263.0 27.5 32.3 -25.9 31.8 -23.2 30.6 -22.6 31.1 -23.5
2025-12-31T11:22:53.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T11:22:53.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T11:22:53.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.390421
2025-12-31T11:22:53.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T11:22:53.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T11:22:53.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T11:22:53.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T11:22:53.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T11:22:53.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T11:22:49', tmtdew=36.7, humidity=7.92, cloud=0.0, wind=22.32, temperature=25.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T09:22:12.374', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T11:22:53.880 [DEBUG] [Thread-126746] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:22:53.954 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T11:22:53.966 [DEBUG] [Thread-126749] [transport.py] [_log()] starting thread (client mode): 0xb6b21420
2025-12-31T11:22:53.966 [DEBUG] [Thread-126749] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:22:53.981 [DEBUG] [Thread-126749] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T11:22:53.981 [INFO] [Thread-126749] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T11:22:53.988 [DEBUG] [Thread-126749] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:22:53.988 [DEBUG] [Thread-126749] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T11:22:53.988 [DEBUG] [Thread-126749] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:22:53.988 [DEBUG] [Thread-126749] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:22:53.988 [DEBUG] [Thread-126749] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:22:53.988 [DEBUG] [Thread-126749] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:22:53.988 [DEBUG] [Thread-126749] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:22:53.988 [DEBUG] [Thread-126749] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:22:53.988 [DEBUG] [Thread-126749] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:22:53.988 [DEBUG] [Thread-126749] [transport.py] [_log()] client lang: <none>
2025-12-31T11:22:53.988 [DEBUG] [Thread-126749] [transport.py] [_log()] server lang: <none>
2025-12-31T11:22:53.988 [DEBUG] [Thread-126749] [transport.py] [_log()] kex follows: False
2025-12-31T11:22:53.988 [DEBUG] [Thread-126749] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:22:53.988 [DEBUG] [Thread-126749] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:22:53.988 [DEBUG] [Thread-126749] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:22:53.988 [DEBUG] [Thread-126749] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:22:53.989 [DEBUG] [Thread-126749] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:22:53.989 [DEBUG] [Thread-126749] [transport.py] [_log()] Compression: none
2025-12-31T11:22:53.989 [DEBUG] [Thread-126749] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:22:54.045 [DEBUG] [Thread-126749] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:22:54.045 [DEBUG] [Thread-126749] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:22:54.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T11:22:54.046 [DEBUG] [Thread-126749] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T11:22:54.046 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:22:54.102 [DEBUG] [Thread-126749] [transport.py] [_log()] userauth is OK
2025-12-31T11:22:54.103 [DEBUG] [Thread-126749] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:22:54.103 [DEBUG] [Thread-126749] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:22:54.103 [DEBUG] [Thread-126749] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T11:22:54.103 [DEBUG] [Thread-126749] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:22:54.117 [INFO] [Thread-126749] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:22:54.117 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T11:22:54.117 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:22:54.943 [DEBUG] [Thread-126749] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:22:54.943 [DEBUG] [Thread-126749] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:22:54.990 [DEBUG] [Thread-126749] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:22:54.990 [DEBUG] [Thread-126749] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:22:54.999 [DEBUG] [Thread-126749] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:22:55.007 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:22:55.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T11:22:55.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T11:22:55.023 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:22:55.023 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:22:55.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:22:55.031 [DEBUG] [Thread-126749] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:23:00.808 [DEBUG] [Thread-126751 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:23:09.158 [DEBUG] [Thread-126752 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:23:15.861 [DEBUG] [Thread-126753 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:23:25.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T11:23:25.054 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T11:23:25.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T11:23:25.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 11, 23, 22), 36.84, 7.86, 0.0, 24.21, 25.47, 0, 0, 0, 2, 0, 0),)
2025-12-31T11:23:25.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 11:23:22
2025-12-31T11:23:25.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T11:23:26.038 [DEBUG] [Thread-126754] [transport.py] [_log()] starting thread (client mode): 0xb9544940
2025-12-31T11:23:26.038 [DEBUG] [Thread-126754] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:23:26.058 [DEBUG] [Thread-126754] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T11:23:26.058 [INFO] [Thread-126754] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T11:23:26.061 [DEBUG] [Thread-126754] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:23:26.062 [DEBUG] [Thread-126754] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T11:23:26.062 [DEBUG] [Thread-126754] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:23:26.062 [DEBUG] [Thread-126754] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:23:26.062 [DEBUG] [Thread-126754] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:23:26.062 [DEBUG] [Thread-126754] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:23:26.062 [DEBUG] [Thread-126754] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:23:26.062 [DEBUG] [Thread-126754] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:23:26.062 [DEBUG] [Thread-126754] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:23:26.062 [DEBUG] [Thread-126754] [transport.py] [_log()] client lang: <none>
2025-12-31T11:23:26.062 [DEBUG] [Thread-126754] [transport.py] [_log()] server lang: <none>
2025-12-31T11:23:26.062 [DEBUG] [Thread-126754] [transport.py] [_log()] kex follows: False
2025-12-31T11:23:26.062 [DEBUG] [Thread-126754] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:23:26.062 [DEBUG] [Thread-126754] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:23:26.062 [DEBUG] [Thread-126754] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:23:26.062 [DEBUG] [Thread-126754] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:23:26.062 [DEBUG] [Thread-126754] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:23:26.062 [DEBUG] [Thread-126754] [transport.py] [_log()] Compression: none
2025-12-31T11:23:26.062 [DEBUG] [Thread-126754] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:23:26.081 [DEBUG] [Thread-126754] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:23:26.082 [DEBUG] [Thread-126754] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:23:26.082 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T11:23:26.083 [DEBUG] [Thread-126754] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T11:23:26.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:23:26.085 [DEBUG] [Thread-126754] [transport.py] [_log()] userauth is OK
2025-12-31T11:23:26.085 [DEBUG] [Thread-126754] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:23:26.085 [DEBUG] [Thread-126754] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:23:26.085 [DEBUG] [Thread-126754] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T11:23:26.086 [DEBUG] [Thread-126754] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:23:26.120 [INFO] [Thread-126754] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:23:26.121 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:23:26.773 [DEBUG] [Thread-126754] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:23:26.773 [DEBUG] [Thread-126754] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:23:26.774 [DEBUG] [Thread-126754] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T11:23:26.814 [DEBUG] [Thread-126754] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:23:26.815 [DEBUG] [Thread-126754] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:23:26.818 [DEBUG] [Thread-126754] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:23:26.831 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:23:26.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T11:23:26.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T11:23:26.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T11:23:26.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:23:26.844 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T11:23:26.844 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:23:26.844 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:23:26.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T11:23:26.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.390768 -999.00  +25.20  19.04     12   -5.40 1 2 1 1 1   888    0 31.87 96.49 ----- 15.8 19.0 279.6 27.5 32.3 -25.8 31.8 -23.4 30.3 -22.4 31.1 -24.1
2025-12-31T11:23:26.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T11:23:26.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T11:23:26.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.390768
2025-12-31T11:23:26.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T11:23:26.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T11:23:26.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T11:23:26.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T11:23:26.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T11:23:26.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T11:23:22', tmtdew=36.84, humidity=7.86, cloud=0.0, wind=24.21, temperature=25.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T09:22:42.355', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T11:23:26.847 [DEBUG] [Thread-126754] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:23:26.937 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T11:23:26.948 [DEBUG] [Thread-126757] [transport.py] [_log()] starting thread (client mode): 0xb9545210
2025-12-31T11:23:26.949 [DEBUG] [Thread-126757] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:23:26.963 [DEBUG] [Thread-126757] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T11:23:26.963 [INFO] [Thread-126757] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T11:23:26.971 [DEBUG] [Thread-126757] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:23:26.971 [DEBUG] [Thread-126757] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T11:23:26.971 [DEBUG] [Thread-126757] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:23:26.971 [DEBUG] [Thread-126757] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:23:26.971 [DEBUG] [Thread-126757] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:23:26.971 [DEBUG] [Thread-126757] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:23:26.971 [DEBUG] [Thread-126757] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:23:26.971 [DEBUG] [Thread-126757] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:23:26.971 [DEBUG] [Thread-126757] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:23:26.971 [DEBUG] [Thread-126757] [transport.py] [_log()] client lang: <none>
2025-12-31T11:23:26.971 [DEBUG] [Thread-126757] [transport.py] [_log()] server lang: <none>
2025-12-31T11:23:26.971 [DEBUG] [Thread-126757] [transport.py] [_log()] kex follows: False
2025-12-31T11:23:26.971 [DEBUG] [Thread-126757] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:23:26.971 [DEBUG] [Thread-126757] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:23:26.972 [DEBUG] [Thread-126757] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:23:26.972 [DEBUG] [Thread-126757] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:23:26.972 [DEBUG] [Thread-126757] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:23:26.972 [DEBUG] [Thread-126757] [transport.py] [_log()] Compression: none
2025-12-31T11:23:26.972 [DEBUG] [Thread-126757] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:23:27.032 [DEBUG] [Thread-126757] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:23:27.032 [DEBUG] [Thread-126757] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:23:27.033 [DEBUG] [Thread-126757] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T11:23:27.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T11:23:27.034 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:23:27.093 [DEBUG] [Thread-126757] [transport.py] [_log()] userauth is OK
2025-12-31T11:23:27.093 [DEBUG] [Thread-126757] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:23:27.093 [DEBUG] [Thread-126757] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:23:27.093 [DEBUG] [Thread-126757] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T11:23:27.093 [DEBUG] [Thread-126757] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:23:27.118 [INFO] [Thread-126757] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:23:27.118 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T11:23:27.118 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:23:27.987 [DEBUG] [Thread-126757] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:23:27.987 [DEBUG] [Thread-126757] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:23:28.035 [DEBUG] [Thread-126757] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:23:28.035 [DEBUG] [Thread-126757] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:23:28.049 [DEBUG] [Thread-126757] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:23:28.065 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:23:28.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T11:23:28.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T11:23:28.082 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:23:28.082 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:23:28.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:23:28.090 [DEBUG] [Thread-126757] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:23:30.891 [DEBUG] [Thread-126759 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:23:32.995 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:23:32.995 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:23:45.930 [DEBUG] [Thread-126760 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:23:58.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T11:23:58.101 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T11:23:58.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T11:23:58.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 11, 23, 54), 36.72, 8.06, 0.0, 18.21, 25.8, 0, 0, 0, 2, 0, 0),)
2025-12-31T11:23:58.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 11:23:54
2025-12-31T11:23:58.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T11:23:59.089 [DEBUG] [Thread-126761] [transport.py] [_log()] starting thread (client mode): 0xb6b48c10
2025-12-31T11:23:59.089 [DEBUG] [Thread-126761] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:23:59.108 [DEBUG] [Thread-126761] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T11:23:59.109 [INFO] [Thread-126761] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T11:23:59.110 [DEBUG] [Thread-126761] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:23:59.111 [DEBUG] [Thread-126761] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T11:23:59.111 [DEBUG] [Thread-126761] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:23:59.111 [DEBUG] [Thread-126761] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:23:59.111 [DEBUG] [Thread-126761] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:23:59.111 [DEBUG] [Thread-126761] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:23:59.111 [DEBUG] [Thread-126761] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:23:59.111 [DEBUG] [Thread-126761] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:23:59.111 [DEBUG] [Thread-126761] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:23:59.111 [DEBUG] [Thread-126761] [transport.py] [_log()] client lang: <none>
2025-12-31T11:23:59.111 [DEBUG] [Thread-126761] [transport.py] [_log()] server lang: <none>
2025-12-31T11:23:59.111 [DEBUG] [Thread-126761] [transport.py] [_log()] kex follows: False
2025-12-31T11:23:59.111 [DEBUG] [Thread-126761] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:23:59.111 [DEBUG] [Thread-126761] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:23:59.111 [DEBUG] [Thread-126761] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:23:59.111 [DEBUG] [Thread-126761] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:23:59.111 [DEBUG] [Thread-126761] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:23:59.111 [DEBUG] [Thread-126761] [transport.py] [_log()] Compression: none
2025-12-31T11:23:59.111 [DEBUG] [Thread-126761] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:23:59.124 [DEBUG] [Thread-126761] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:23:59.124 [DEBUG] [Thread-126761] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:23:59.125 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T11:23:59.125 [DEBUG] [Thread-126761] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T11:23:59.126 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:23:59.127 [DEBUG] [Thread-126761] [transport.py] [_log()] userauth is OK
2025-12-31T11:23:59.127 [DEBUG] [Thread-126761] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:23:59.127 [DEBUG] [Thread-126761] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:23:59.127 [DEBUG] [Thread-126761] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T11:23:59.127 [DEBUG] [Thread-126761] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:23:59.145 [INFO] [Thread-126761] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:23:59.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:23:59.762 [DEBUG] [Thread-126761] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:23:59.762 [DEBUG] [Thread-126761] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:23:59.763 [DEBUG] [Thread-126761] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T11:23:59.803 [DEBUG] [Thread-126761] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:23:59.803 [DEBUG] [Thread-126761] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:23:59.806 [DEBUG] [Thread-126761] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:23:59.819 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:23:59.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T11:23:59.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T11:23:59.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T11:23:59.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:23:59.831 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T11:23:59.831 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:23:59.831 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:23:59.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T11:23:59.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.391115 -999.00  +25.00  23.20     13   -5.10 1 1 1 1 1   888    0 31.95 102.75 ----- 24.4 23.2 276.0 28.0 32.1 -26.4 31.8 -24.9 30.1 -24.3 30.9 -23.5
2025-12-31T11:23:59.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T11:23:59.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T11:23:59.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.391115
2025-12-31T11:23:59.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T11:23:59.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T11:23:59.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T11:23:59.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T11:23:59.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T11:23:59.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T11:23:54', tmtdew=36.72, humidity=8.06, cloud=0.0, wind=18.21, temperature=25.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T09:23:12.336', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T11:23:59.834 [DEBUG] [Thread-126761] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:23:59.913 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T11:23:59.924 [DEBUG] [Thread-126764] [transport.py] [_log()] starting thread (client mode): 0xb6b490c0
2025-12-31T11:23:59.924 [DEBUG] [Thread-126764] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:23:59.939 [DEBUG] [Thread-126764] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T11:23:59.939 [INFO] [Thread-126764] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T11:23:59.949 [DEBUG] [Thread-126764] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:23:59.950 [DEBUG] [Thread-126764] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T11:23:59.950 [DEBUG] [Thread-126764] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:23:59.950 [DEBUG] [Thread-126764] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:23:59.950 [DEBUG] [Thread-126764] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:23:59.950 [DEBUG] [Thread-126764] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:23:59.950 [DEBUG] [Thread-126764] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:23:59.951 [DEBUG] [Thread-126764] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:23:59.951 [DEBUG] [Thread-126764] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:23:59.951 [DEBUG] [Thread-126764] [transport.py] [_log()] client lang: <none>
2025-12-31T11:23:59.951 [DEBUG] [Thread-126764] [transport.py] [_log()] server lang: <none>
2025-12-31T11:23:59.951 [DEBUG] [Thread-126764] [transport.py] [_log()] kex follows: False
2025-12-31T11:23:59.951 [DEBUG] [Thread-126764] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:23:59.951 [DEBUG] [Thread-126764] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:23:59.951 [DEBUG] [Thread-126764] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:23:59.951 [DEBUG] [Thread-126764] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:23:59.951 [DEBUG] [Thread-126764] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:23:59.951 [DEBUG] [Thread-126764] [transport.py] [_log()] Compression: none
2025-12-31T11:23:59.951 [DEBUG] [Thread-126764] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:24:00.007 [DEBUG] [Thread-126764] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:24:00.008 [DEBUG] [Thread-126764] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:24:00.009 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T11:24:00.009 [DEBUG] [Thread-126764] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T11:24:00.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:24:00.063 [DEBUG] [Thread-126764] [transport.py] [_log()] userauth is OK
2025-12-31T11:24:00.063 [DEBUG] [Thread-126764] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:24:00.063 [DEBUG] [Thread-126764] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:24:00.063 [DEBUG] [Thread-126764] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T11:24:00.063 [DEBUG] [Thread-126764] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:24:00.082 [INFO] [Thread-126764] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:24:00.082 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T11:24:00.083 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:24:00.912 [DEBUG] [Thread-126764] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:24:00.913 [DEBUG] [Thread-126764] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:24:00.961 [DEBUG] [Thread-126764] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:24:00.961 [DEBUG] [Thread-126764] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:24:00.965 [DEBUG] [Thread-126766 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:24:00.970 [DEBUG] [Thread-126764] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:24:00.979 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:24: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-12-31T11:24:00.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T11:24:00.996 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:24:00.997 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:24:00.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:24:01.005 [DEBUG] [Thread-126764] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:24:09.209 [DEBUG] [Thread-126767 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:24:16.011 [DEBUG] [Thread-126768 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:24:31.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T11:24:31.028 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T11:24:31.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T11:24:31.045 [DEBUG] [Thread-126769 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:24:31.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 11, 24, 26), 36.87, 8.01, 0.0, 19.37, 26.08, 0, 0, 0, 2, 0, 0),)
2025-12-31T11:24:31.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 11:24:26
2025-12-31T11:24:31.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T11:24:31.999 [DEBUG] [Thread-126770] [transport.py] [_log()] starting thread (client mode): 0xb6b480d0
2025-12-31T11:24:31.999 [DEBUG] [Thread-126770] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:24:32.020 [DEBUG] [Thread-126770] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T11:24:32.020 [INFO] [Thread-126770] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T11:24:32.023 [DEBUG] [Thread-126770] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:24:32.023 [DEBUG] [Thread-126770] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T11:24:32.023 [DEBUG] [Thread-126770] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:24:32.023 [DEBUG] [Thread-126770] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:24:32.023 [DEBUG] [Thread-126770] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:24:32.023 [DEBUG] [Thread-126770] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:24:32.023 [DEBUG] [Thread-126770] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:24:32.023 [DEBUG] [Thread-126770] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:24:32.023 [DEBUG] [Thread-126770] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:24:32.023 [DEBUG] [Thread-126770] [transport.py] [_log()] client lang: <none>
2025-12-31T11:24:32.023 [DEBUG] [Thread-126770] [transport.py] [_log()] server lang: <none>
2025-12-31T11:24:32.023 [DEBUG] [Thread-126770] [transport.py] [_log()] kex follows: False
2025-12-31T11:24:32.023 [DEBUG] [Thread-126770] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:24:32.023 [DEBUG] [Thread-126770] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:24:32.023 [DEBUG] [Thread-126770] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:24:32.023 [DEBUG] [Thread-126770] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:24:32.023 [DEBUG] [Thread-126770] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:24:32.023 [DEBUG] [Thread-126770] [transport.py] [_log()] Compression: none
2025-12-31T11:24:32.023 [DEBUG] [Thread-126770] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:24:32.042 [DEBUG] [Thread-126770] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:24:32.043 [DEBUG] [Thread-126770] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:24:32.043 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T11:24:32.043 [DEBUG] [Thread-126770] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T11:24:32.044 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:24:32.046 [DEBUG] [Thread-126770] [transport.py] [_log()] userauth is OK
2025-12-31T11:24:32.046 [DEBUG] [Thread-126770] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:24:32.046 [DEBUG] [Thread-126770] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:24:32.046 [DEBUG] [Thread-126770] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T11:24:32.046 [DEBUG] [Thread-126770] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:24:32.072 [INFO] [Thread-126770] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:24:32.073 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:24:32.637 [DEBUG] [Thread-126770] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:24:32.638 [DEBUG] [Thread-126770] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:24:32.638 [DEBUG] [Thread-126770] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T11:24:32.679 [DEBUG] [Thread-126770] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:24:32.679 [DEBUG] [Thread-126770] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:24:32.683 [DEBUG] [Thread-126770] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:24:32.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:24:32.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T11:24:32.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T11:24:32.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T11:24:32.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:24:32.706 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T11:24:32.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:24:32.706 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:24:32.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T11:24:32.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.391463 -999.00  +24.80  13.85     13   -4.60 1 1 1 1 1   888    0 32.78 95.51 ----- 17.9 13.8 289.9 22.8 32.2 -24.9 31.6 -24.9 30.2 -23.5 31.0 -23.4
2025-12-31T11:24:32.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T11:24:32.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T11:24:32.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.391463
2025-12-31T11:24:32.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T11:24:32.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T11:24:32.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T11:24:32.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T11:24:32.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T11:24:32.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T11:24:26', tmtdew=36.87, humidity=8.01, cloud=0.0, wind=19.37, temperature=26.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T09:23:42.403', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T11:24:32.709 [DEBUG] [Thread-126770] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:24:32.794 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T11:24:32.806 [DEBUG] [Thread-126773] [transport.py] [_log()] starting thread (client mode): 0xb6b49990
2025-12-31T11:24:32.806 [DEBUG] [Thread-126773] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:24:32.821 [DEBUG] [Thread-126773] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T11:24:32.821 [INFO] [Thread-126773] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T11:24:32.832 [DEBUG] [Thread-126773] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:24:32.833 [DEBUG] [Thread-126773] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T11:24:32.833 [DEBUG] [Thread-126773] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:24:32.833 [DEBUG] [Thread-126773] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:24:32.833 [DEBUG] [Thread-126773] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:24:32.833 [DEBUG] [Thread-126773] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:24:32.833 [DEBUG] [Thread-126773] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:24:32.833 [DEBUG] [Thread-126773] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:24:32.833 [DEBUG] [Thread-126773] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:24:32.833 [DEBUG] [Thread-126773] [transport.py] [_log()] client lang: <none>
2025-12-31T11:24:32.833 [DEBUG] [Thread-126773] [transport.py] [_log()] server lang: <none>
2025-12-31T11:24:32.833 [DEBUG] [Thread-126773] [transport.py] [_log()] kex follows: False
2025-12-31T11:24:32.833 [DEBUG] [Thread-126773] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:24:32.833 [DEBUG] [Thread-126773] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:24:32.833 [DEBUG] [Thread-126773] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:24:32.833 [DEBUG] [Thread-126773] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:24:32.833 [DEBUG] [Thread-126773] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:24:32.833 [DEBUG] [Thread-126773] [transport.py] [_log()] Compression: none
2025-12-31T11:24:32.833 [DEBUG] [Thread-126773] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:24:32.886 [DEBUG] [Thread-126773] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:24:32.887 [DEBUG] [Thread-126773] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:24:32.888 [DEBUG] [Thread-126773] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T11:24:32.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T11:24:32.889 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:24:32.943 [DEBUG] [Thread-126773] [transport.py] [_log()] userauth is OK
2025-12-31T11:24:32.943 [DEBUG] [Thread-126773] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:24:32.944 [DEBUG] [Thread-126773] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:24:32.944 [DEBUG] [Thread-126773] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T11:24:32.944 [DEBUG] [Thread-126773] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:24:32.962 [INFO] [Thread-126773] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:24:32.962 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T11:24:32.963 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:24:33.136 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:24:33.137 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:24:33.785 [DEBUG] [Thread-126773] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:24:33.785 [DEBUG] [Thread-126773] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:24:33.833 [DEBUG] [Thread-126773] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:24:33.833 [DEBUG] [Thread-126773] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:24:33.843 [DEBUG] [Thread-126773] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:24:33.855 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:24: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-12-31T11:24: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-12-31T11:24:33.873 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:24:33.874 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:24:33.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:24:33.882 [DEBUG] [Thread-126773] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:24:46.079 [DEBUG] [Thread-126775 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:25:01.137 [DEBUG] [Thread-126776 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:25:03.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T11:25:03.888 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T11:25:03.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T11:25:04.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 11, 24, 58), 36.51, 7.99, 0.0, 23.31, 25.7, 0, 0, 0, 2, 0, 0),)
2025-12-31T11:25:04.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 11:24:58
2025-12-31T11:25:04.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T11:25:04.863 [DEBUG] [Thread-126777] [transport.py] [_log()] starting thread (client mode): 0xb6b4bd00
2025-12-31T11:25:04.864 [DEBUG] [Thread-126777] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:25:04.884 [DEBUG] [Thread-126777] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T11:25:04.884 [INFO] [Thread-126777] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T11:25:04.887 [DEBUG] [Thread-126777] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:25:04.888 [DEBUG] [Thread-126777] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T11:25:04.888 [DEBUG] [Thread-126777] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:25:04.888 [DEBUG] [Thread-126777] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:25:04.888 [DEBUG] [Thread-126777] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:25:04.888 [DEBUG] [Thread-126777] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:25:04.888 [DEBUG] [Thread-126777] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:25:04.888 [DEBUG] [Thread-126777] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:25:04.888 [DEBUG] [Thread-126777] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:25:04.888 [DEBUG] [Thread-126777] [transport.py] [_log()] client lang: <none>
2025-12-31T11:25:04.888 [DEBUG] [Thread-126777] [transport.py] [_log()] server lang: <none>
2025-12-31T11:25:04.888 [DEBUG] [Thread-126777] [transport.py] [_log()] kex follows: False
2025-12-31T11:25:04.888 [DEBUG] [Thread-126777] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:25:04.888 [DEBUG] [Thread-126777] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:25:04.889 [DEBUG] [Thread-126777] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:25:04.889 [DEBUG] [Thread-126777] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:25:04.889 [DEBUG] [Thread-126777] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:25:04.889 [DEBUG] [Thread-126777] [transport.py] [_log()] Compression: none
2025-12-31T11:25:04.889 [DEBUG] [Thread-126777] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:25:04.908 [DEBUG] [Thread-126777] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:25:04.908 [DEBUG] [Thread-126777] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:25:04.909 [DEBUG] [Thread-126777] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T11:25:04.909 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T11:25:04.910 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:25:04.913 [DEBUG] [Thread-126777] [transport.py] [_log()] userauth is OK
2025-12-31T11:25:04.913 [DEBUG] [Thread-126777] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:25:04.913 [DEBUG] [Thread-126777] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:25:04.913 [DEBUG] [Thread-126777] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T11:25:04.913 [DEBUG] [Thread-126777] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:25:04.939 [INFO] [Thread-126777] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:25:04.940 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:25:09.261 [DEBUG] [Thread-126779 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:25:16.164 [DEBUG] [Thread-126777] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:25:16.164 [DEBUG] [Thread-126777] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:25:16.165 [DEBUG] [Thread-126777] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T11:25:16.178 [DEBUG] [Thread-126780 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:25:16.205 [DEBUG] [Thread-126777] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:25:16.205 [DEBUG] [Thread-126777] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:25:16.208 [DEBUG] [Thread-126777] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:25:16.277 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:25:16.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T11:25:16.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T11:25:16.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T11:25:16.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:25:16.306 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T11:25:16.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:25:16.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:25:16.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T11:25:16.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.392157 -999.00  +24.70  19.16     13   -5.30 1 1 1 1 1   888    0 31.80 91.10 ----- 17.1 19.2 304.6 23.4 32.1 -25.6 31.5 -25.3 30.2 -23.8 30.9 -23.9
2025-12-31T11:25:16.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T11:25:16.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T11:25:16.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.392157
2025-12-31T11:25:16.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T11:25:16.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T11:25:16.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T11:25:16.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T11:25:16.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T11:25:16.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T11:24:58', tmtdew=36.51, humidity=7.99, cloud=0.0, wind=23.31, temperature=25.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T09:24:42.365', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T11:25:16.309 [DEBUG] [Thread-126777] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:25:16.394 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T11:25:16.406 [DEBUG] [Thread-126782] [transport.py] [_log()] starting thread (client mode): 0xb9547eb0
2025-12-31T11:25:16.406 [DEBUG] [Thread-126782] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:25:16.421 [DEBUG] [Thread-126782] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T11:25:16.421 [INFO] [Thread-126782] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T11:25:16.428 [DEBUG] [Thread-126782] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:25:16.429 [DEBUG] [Thread-126782] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T11:25:16.429 [DEBUG] [Thread-126782] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:25:16.429 [DEBUG] [Thread-126782] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:25:16.429 [DEBUG] [Thread-126782] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:25:16.429 [DEBUG] [Thread-126782] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:25:16.429 [DEBUG] [Thread-126782] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:25:16.429 [DEBUG] [Thread-126782] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:25:16.429 [DEBUG] [Thread-126782] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:25:16.429 [DEBUG] [Thread-126782] [transport.py] [_log()] client lang: <none>
2025-12-31T11:25:16.429 [DEBUG] [Thread-126782] [transport.py] [_log()] server lang: <none>
2025-12-31T11:25:16.430 [DEBUG] [Thread-126782] [transport.py] [_log()] kex follows: False
2025-12-31T11:25:16.430 [DEBUG] [Thread-126782] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:25:16.430 [DEBUG] [Thread-126782] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:25:16.430 [DEBUG] [Thread-126782] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:25:16.430 [DEBUG] [Thread-126782] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:25:16.430 [DEBUG] [Thread-126782] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:25:16.430 [DEBUG] [Thread-126782] [transport.py] [_log()] Compression: none
2025-12-31T11:25:16.430 [DEBUG] [Thread-126782] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:25:16.487 [DEBUG] [Thread-126782] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:25:16.488 [DEBUG] [Thread-126782] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:25:16.488 [DEBUG] [Thread-126782] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T11:25:16.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T11:25:16.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:25:16.543 [DEBUG] [Thread-126782] [transport.py] [_log()] userauth is OK
2025-12-31T11:25:16.543 [DEBUG] [Thread-126782] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:25:16.544 [DEBUG] [Thread-126782] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:25:16.544 [DEBUG] [Thread-126782] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T11:25:16.544 [DEBUG] [Thread-126782] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:25:16.562 [INFO] [Thread-126782] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:25:16.563 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T11:25:16.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:25:17.409 [DEBUG] [Thread-126782] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:25:17.410 [DEBUG] [Thread-126782] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:25:17.457 [DEBUG] [Thread-126782] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:25:17.457 [DEBUG] [Thread-126782] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:25:17.466 [DEBUG] [Thread-126782] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:25:17.475 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:25:17.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T11:25:17.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T11:25:17.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:25:17.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:25:17.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:25:17.503 [DEBUG] [Thread-126782] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:25:31.214 [DEBUG] [Thread-126784 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:25:33.277 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:25:33.278 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:25:46.255 [DEBUG] [Thread-126785 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:25:47.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T11:25:47.526 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T11:25: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-12-31T11:25:48.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 11, 25, 30), 36.66, 7.87, 0.0, 21.3, 25.55, 0, 0, 0, 2, 0, 0),)
2025-12-31T11:25:48.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 11:25:30
2025-12-31T11:25:48.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T11:25:48.499 [DEBUG] [Thread-126786] [transport.py] [_log()] starting thread (client mode): 0xb9545ae0
2025-12-31T11:25:48.500 [DEBUG] [Thread-126786] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:25:48.521 [DEBUG] [Thread-126786] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T11:25:48.521 [INFO] [Thread-126786] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T11:25:48.524 [DEBUG] [Thread-126786] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:25:48.524 [DEBUG] [Thread-126786] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T11:25:48.524 [DEBUG] [Thread-126786] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:25:48.524 [DEBUG] [Thread-126786] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:25:48.524 [DEBUG] [Thread-126786] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:25:48.524 [DEBUG] [Thread-126786] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:25:48.524 [DEBUG] [Thread-126786] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:25:48.524 [DEBUG] [Thread-126786] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:25:48.524 [DEBUG] [Thread-126786] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:25:48.524 [DEBUG] [Thread-126786] [transport.py] [_log()] client lang: <none>
2025-12-31T11:25:48.524 [DEBUG] [Thread-126786] [transport.py] [_log()] server lang: <none>
2025-12-31T11:25:48.524 [DEBUG] [Thread-126786] [transport.py] [_log()] kex follows: False
2025-12-31T11:25:48.524 [DEBUG] [Thread-126786] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:25:48.524 [DEBUG] [Thread-126786] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:25:48.524 [DEBUG] [Thread-126786] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:25:48.524 [DEBUG] [Thread-126786] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:25:48.524 [DEBUG] [Thread-126786] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:25:48.524 [DEBUG] [Thread-126786] [transport.py] [_log()] Compression: none
2025-12-31T11:25:48.524 [DEBUG] [Thread-126786] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:25:48.540 [DEBUG] [Thread-126786] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:25:48.541 [DEBUG] [Thread-126786] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:25:48.541 [DEBUG] [Thread-126786] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T11:25:48.542 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T11:25:48.542 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:25:48.544 [DEBUG] [Thread-126786] [transport.py] [_log()] userauth is OK
2025-12-31T11:25:48.544 [DEBUG] [Thread-126786] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:25:48.544 [DEBUG] [Thread-126786] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:25:48.544 [DEBUG] [Thread-126786] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T11:25:48.544 [DEBUG] [Thread-126786] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:25:48.569 [INFO] [Thread-126786] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:25:48.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:25:49.181 [DEBUG] [Thread-126786] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:25:49.182 [DEBUG] [Thread-126786] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:25:49.182 [DEBUG] [Thread-126786] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T11:25:49.223 [DEBUG] [Thread-126786] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:25:49.223 [DEBUG] [Thread-126786] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:25:49.227 [DEBUG] [Thread-126786] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:25:49.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:25:49.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T11:25:49.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T11:25:49.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T11:25:49.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:25:49.253 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T11:25:49.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:25:49.253 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:25:49.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T11:25:49.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.392504 -999.00  +24.60  14.15     13   -5.00 1 1 1 1 1   888    0 31.76 91.75 ----- 16.1 14.2 283.5 21.3 32.1 -24.7 31.4 -24.5 30.2 -23.0 31.0 -23.0
2025-12-31T11:25:49.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T11:25:49.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T11:25:49.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.392504
2025-12-31T11:25:49.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T11:25:49.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T11:25:49.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T11:25:49.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T11:25:49.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T11:25:49.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T11:25:30', tmtdew=36.66, humidity=7.87, cloud=0.0, wind=21.3, temperature=25.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T09:25:12.346', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T11:25:49.256 [DEBUG] [Thread-126786] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:25:49.340 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T11:25:49.352 [DEBUG] [Thread-126789] [transport.py] [_log()] starting thread (client mode): 0xb9544070
2025-12-31T11:25:49.353 [DEBUG] [Thread-126789] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:25:49.368 [DEBUG] [Thread-126789] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T11:25:49.368 [INFO] [Thread-126789] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T11:25:49.376 [DEBUG] [Thread-126789] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:25:49.376 [DEBUG] [Thread-126789] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T11:25:49.376 [DEBUG] [Thread-126789] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:25:49.376 [DEBUG] [Thread-126789] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:25:49.376 [DEBUG] [Thread-126789] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:25:49.376 [DEBUG] [Thread-126789] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:25:49.376 [DEBUG] [Thread-126789] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:25:49.376 [DEBUG] [Thread-126789] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:25:49.376 [DEBUG] [Thread-126789] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:25:49.376 [DEBUG] [Thread-126789] [transport.py] [_log()] client lang: <none>
2025-12-31T11:25:49.376 [DEBUG] [Thread-126789] [transport.py] [_log()] server lang: <none>
2025-12-31T11:25:49.376 [DEBUG] [Thread-126789] [transport.py] [_log()] kex follows: False
2025-12-31T11:25:49.376 [DEBUG] [Thread-126789] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:25:49.376 [DEBUG] [Thread-126789] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:25:49.376 [DEBUG] [Thread-126789] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:25:49.376 [DEBUG] [Thread-126789] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:25:49.376 [DEBUG] [Thread-126789] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:25:49.376 [DEBUG] [Thread-126789] [transport.py] [_log()] Compression: none
2025-12-31T11:25:49.376 [DEBUG] [Thread-126789] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:25:49.435 [DEBUG] [Thread-126789] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:25:49.436 [DEBUG] [Thread-126789] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:25:49.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T11:25:49.437 [DEBUG] [Thread-126789] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T11:25:49.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:25:49.493 [DEBUG] [Thread-126789] [transport.py] [_log()] userauth is OK
2025-12-31T11:25:49.494 [DEBUG] [Thread-126789] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:25:49.503 [DEBUG] [Thread-126789] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:25:49.503 [DEBUG] [Thread-126789] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T11:25:49.503 [DEBUG] [Thread-126789] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:25:49.526 [INFO] [Thread-126789] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:25:49.526 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T11:25:49.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:25:50.360 [DEBUG] [Thread-126789] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:25:50.361 [DEBUG] [Thread-126789] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:25:50.409 [DEBUG] [Thread-126789] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:25:50.409 [DEBUG] [Thread-126789] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:25:50.421 [DEBUG] [Thread-126789] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:25:50.430 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:25:50.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T11:25:50.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T11:25:50.449 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:25:50.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:25:50.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:25:50.458 [DEBUG] [Thread-126789] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:26:01.291 [DEBUG] [Thread-126791 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:26:09.305 [DEBUG] [Thread-126792 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:26:16.327 [DEBUG] [Thread-126793 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:26:20.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T11:26:20.480 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T11:26:20.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T11:26:21.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 11, 26, 2), 36.75, 7.79, 0.0, 21.16, 25.4, 0, 0, 0, 2, 0, 0),)
2025-12-31T11:26:21.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 11:26:02
2025-12-31T11:26:21.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T11:26:21.479 [DEBUG] [Thread-126794] [transport.py] [_log()] starting thread (client mode): 0xb6b201c0
2025-12-31T11:26:21.479 [DEBUG] [Thread-126794] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:26:21.501 [DEBUG] [Thread-126794] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T11:26:21.501 [INFO] [Thread-126794] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T11:26:21.504 [DEBUG] [Thread-126794] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:26:21.504 [DEBUG] [Thread-126794] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T11:26:21.504 [DEBUG] [Thread-126794] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:26:21.504 [DEBUG] [Thread-126794] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:26:21.504 [DEBUG] [Thread-126794] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:26:21.504 [DEBUG] [Thread-126794] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:26:21.504 [DEBUG] [Thread-126794] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:26:21.504 [DEBUG] [Thread-126794] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:26:21.504 [DEBUG] [Thread-126794] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:26:21.504 [DEBUG] [Thread-126794] [transport.py] [_log()] client lang: <none>
2025-12-31T11:26:21.504 [DEBUG] [Thread-126794] [transport.py] [_log()] server lang: <none>
2025-12-31T11:26:21.504 [DEBUG] [Thread-126794] [transport.py] [_log()] kex follows: False
2025-12-31T11:26:21.504 [DEBUG] [Thread-126794] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:26:21.504 [DEBUG] [Thread-126794] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:26:21.504 [DEBUG] [Thread-126794] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:26:21.504 [DEBUG] [Thread-126794] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:26:21.504 [DEBUG] [Thread-126794] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:26:21.504 [DEBUG] [Thread-126794] [transport.py] [_log()] Compression: none
2025-12-31T11:26:21.504 [DEBUG] [Thread-126794] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:26:21.521 [DEBUG] [Thread-126794] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:26:21.522 [DEBUG] [Thread-126794] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:26:21.522 [DEBUG] [Thread-126794] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T11:26:21.522 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T11:26:21.522 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:26:21.524 [DEBUG] [Thread-126794] [transport.py] [_log()] userauth is OK
2025-12-31T11:26:21.524 [DEBUG] [Thread-126794] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:26:21.524 [DEBUG] [Thread-126794] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:26:21.524 [DEBUG] [Thread-126794] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T11:26:21.524 [DEBUG] [Thread-126794] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:26:21.539 [INFO] [Thread-126794] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:26:21.539 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:26:22.301 [DEBUG] [Thread-126794] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:26:22.301 [DEBUG] [Thread-126794] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:26:22.301 [DEBUG] [Thread-126794] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T11:26:22.342 [DEBUG] [Thread-126794] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:26:22.342 [DEBUG] [Thread-126794] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:26:22.345 [DEBUG] [Thread-126794] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:26:22.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:26:22.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T11:26:22.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T11:26:22.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T11:26:22.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:26:22.360 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T11:26:22.360 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:26:22.360 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:26:22.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T11:26:22.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.392852 -999.00  +24.80  15.47     13   -4.80 1 1 1 1 1   888    0 32.43 87.68 ----- 13.9 15.5 286.6 22.3 32.2 -24.5 31.5 -24.2 30.3 -22.6 30.9 -23.3
2025-12-31T11:26:22.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T11:26:22.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T11:26:22.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.392852
2025-12-31T11:26:22.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T11:26:22.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T11:26:22.362 [DEBUG] [Thread-126794] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:26:22.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T11:26:22.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T11:26:22.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T11:26:22.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T11:26:02', tmtdew=36.75, humidity=7.79, cloud=0.0, wind=21.16, temperature=25.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T09:25:42.413', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T11:26:22.449 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T11:26:22.460 [DEBUG] [Thread-126797] [transport.py] [_log()] starting thread (client mode): 0xb6b49c60
2025-12-31T11:26:22.460 [DEBUG] [Thread-126797] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:26:22.478 [DEBUG] [Thread-126797] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T11:26:22.479 [INFO] [Thread-126797] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T11:26:22.486 [DEBUG] [Thread-126797] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:26:22.486 [DEBUG] [Thread-126797] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T11:26:22.486 [DEBUG] [Thread-126797] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:26:22.486 [DEBUG] [Thread-126797] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:26:22.486 [DEBUG] [Thread-126797] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:26:22.487 [DEBUG] [Thread-126797] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:26:22.487 [DEBUG] [Thread-126797] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:26:22.487 [DEBUG] [Thread-126797] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:26:22.487 [DEBUG] [Thread-126797] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:26:22.487 [DEBUG] [Thread-126797] [transport.py] [_log()] client lang: <none>
2025-12-31T11:26:22.487 [DEBUG] [Thread-126797] [transport.py] [_log()] server lang: <none>
2025-12-31T11:26:22.487 [DEBUG] [Thread-126797] [transport.py] [_log()] kex follows: False
2025-12-31T11:26:22.487 [DEBUG] [Thread-126797] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:26:22.487 [DEBUG] [Thread-126797] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:26:22.487 [DEBUG] [Thread-126797] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:26:22.487 [DEBUG] [Thread-126797] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:26:22.487 [DEBUG] [Thread-126797] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:26:22.487 [DEBUG] [Thread-126797] [transport.py] [_log()] Compression: none
2025-12-31T11:26:22.488 [DEBUG] [Thread-126797] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:26:22.547 [DEBUG] [Thread-126797] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:26:22.548 [DEBUG] [Thread-126797] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:26:22.549 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T11:26:22.549 [DEBUG] [Thread-126797] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T11:26:22.550 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:26:22.603 [DEBUG] [Thread-126797] [transport.py] [_log()] userauth is OK
2025-12-31T11:26:22.603 [DEBUG] [Thread-126797] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:26:22.604 [DEBUG] [Thread-126797] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:26:22.604 [DEBUG] [Thread-126797] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T11:26:22.604 [DEBUG] [Thread-126797] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:26:22.627 [INFO] [Thread-126797] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:26:22.627 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T11:26:22.628 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:26:23.463 [DEBUG] [Thread-126797] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:26:23.463 [DEBUG] [Thread-126797] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:26:23.510 [DEBUG] [Thread-126797] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:26:23.511 [DEBUG] [Thread-126797] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:26:23.519 [DEBUG] [Thread-126797] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:26:23.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:26:23.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T11:26:23.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T11:26:23.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:26:23.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:26:23.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:26:23.553 [DEBUG] [Thread-126797] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:26:31.365 [DEBUG] [Thread-126799 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:26:33.416 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:26:33.417 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:26:46.414 [DEBUG] [Thread-126800 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:26:53.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T11:26:53.576 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T11:26:53.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-12-31T11:26:54.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 11, 26, 34), 37.0, 7.74, 0.0, 12.74, 25.6, 0, 0, 0, 2, 0, 0),)
2025-12-31T11:26:54.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 11:26:34
2025-12-31T11:26:54.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T11:26:54.548 [DEBUG] [Thread-126801] [transport.py] [_log()] starting thread (client mode): 0xb6bb32b0
2025-12-31T11:26:54.548 [DEBUG] [Thread-126801] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:26:54.569 [DEBUG] [Thread-126801] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T11:26:54.569 [INFO] [Thread-126801] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T11:26:54.571 [DEBUG] [Thread-126801] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:26:54.571 [DEBUG] [Thread-126801] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T11:26:54.571 [DEBUG] [Thread-126801] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:26:54.571 [DEBUG] [Thread-126801] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:26:54.571 [DEBUG] [Thread-126801] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:26:54.571 [DEBUG] [Thread-126801] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:26:54.571 [DEBUG] [Thread-126801] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:26:54.571 [DEBUG] [Thread-126801] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:26:54.572 [DEBUG] [Thread-126801] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:26:54.572 [DEBUG] [Thread-126801] [transport.py] [_log()] client lang: <none>
2025-12-31T11:26:54.572 [DEBUG] [Thread-126801] [transport.py] [_log()] server lang: <none>
2025-12-31T11:26:54.572 [DEBUG] [Thread-126801] [transport.py] [_log()] kex follows: False
2025-12-31T11:26:54.572 [DEBUG] [Thread-126801] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:26:54.572 [DEBUG] [Thread-126801] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:26:54.572 [DEBUG] [Thread-126801] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:26:54.572 [DEBUG] [Thread-126801] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:26:54.572 [DEBUG] [Thread-126801] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:26:54.572 [DEBUG] [Thread-126801] [transport.py] [_log()] Compression: none
2025-12-31T11:26:54.572 [DEBUG] [Thread-126801] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:26:54.590 [DEBUG] [Thread-126801] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:26:54.591 [DEBUG] [Thread-126801] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:26:54.592 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T11:26:54.593 [DEBUG] [Thread-126801] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T11:26:54.594 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:26:54.595 [DEBUG] [Thread-126801] [transport.py] [_log()] userauth is OK
2025-12-31T11:26:54.595 [DEBUG] [Thread-126801] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:26:54.596 [DEBUG] [Thread-126801] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:26:54.596 [DEBUG] [Thread-126801] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T11:26:54.596 [DEBUG] [Thread-126801] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:26:54.617 [INFO] [Thread-126801] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:26:54.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:26:55.245 [DEBUG] [Thread-126801] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:26:55.245 [DEBUG] [Thread-126801] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:26:55.245 [DEBUG] [Thread-126801] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T11:26:55.286 [DEBUG] [Thread-126801] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:26:55.286 [DEBUG] [Thread-126801] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:26:55.289 [DEBUG] [Thread-126801] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:26:55.300 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:26:55.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T11:26:55.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T11:26:55.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T11:26:55.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:26:55.311 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T11:26:55.311 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:26:55.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:26:55.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T11:26:55.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.393199 -999.00  +25.50  12.49     13   -4.60 1 2 1 1 1   888    0 31.53 80.39 ----- 10.4 12.5 278.6 15.3 32.6 -23.1 31.6 -23.6 30.7 -22.0 31.2 -22.5
2025-12-31T11:26:55.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T11:26:55.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T11:26:55.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.393199
2025-12-31T11:26:55.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T11:26:55.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T11:26:55.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T11:26:55.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T11:26:55.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T11:26:55.313 [DEBUG] [Thread-126801] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:26:55.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T11:26:34', tmtdew=37.0, humidity=7.74, cloud=0.0, wind=12.74, temperature=25.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T09:26:12.394', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T11:26:55.397 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T11:26:55.409 [DEBUG] [Thread-126804] [transport.py] [_log()] starting thread (client mode): 0xb9547eb0
2025-12-31T11:26:55.409 [DEBUG] [Thread-126804] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:26:55.423 [DEBUG] [Thread-126804] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T11:26:55.423 [INFO] [Thread-126804] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T11:26:55.431 [DEBUG] [Thread-126804] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:26:55.431 [DEBUG] [Thread-126804] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T11:26:55.431 [DEBUG] [Thread-126804] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:26:55.431 [DEBUG] [Thread-126804] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:26:55.431 [DEBUG] [Thread-126804] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:26:55.431 [DEBUG] [Thread-126804] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:26:55.431 [DEBUG] [Thread-126804] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:26:55.431 [DEBUG] [Thread-126804] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:26:55.431 [DEBUG] [Thread-126804] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:26:55.431 [DEBUG] [Thread-126804] [transport.py] [_log()] client lang: <none>
2025-12-31T11:26:55.431 [DEBUG] [Thread-126804] [transport.py] [_log()] server lang: <none>
2025-12-31T11:26:55.431 [DEBUG] [Thread-126804] [transport.py] [_log()] kex follows: False
2025-12-31T11:26:55.431 [DEBUG] [Thread-126804] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:26:55.431 [DEBUG] [Thread-126804] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:26:55.431 [DEBUG] [Thread-126804] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:26:55.431 [DEBUG] [Thread-126804] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:26:55.431 [DEBUG] [Thread-126804] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:26:55.431 [DEBUG] [Thread-126804] [transport.py] [_log()] Compression: none
2025-12-31T11:26:55.431 [DEBUG] [Thread-126804] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:26:55.491 [DEBUG] [Thread-126804] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:26:55.491 [DEBUG] [Thread-126804] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:26:55.492 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T11:26:55.492 [DEBUG] [Thread-126804] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T11:26:55.493 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:26:55.547 [DEBUG] [Thread-126804] [transport.py] [_log()] userauth is OK
2025-12-31T11:26:55.547 [DEBUG] [Thread-126804] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:26:55.547 [DEBUG] [Thread-126804] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:26:55.547 [DEBUG] [Thread-126804] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T11:26:55.547 [DEBUG] [Thread-126804] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:26:55.567 [INFO] [Thread-126804] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:26:55.567 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T11:26:55.568 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:26:56.401 [DEBUG] [Thread-126804] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:26:56.402 [DEBUG] [Thread-126804] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:26:56.449 [DEBUG] [Thread-126804] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:26:56.449 [DEBUG] [Thread-126804] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:26:56.458 [DEBUG] [Thread-126804] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:26:56.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:26: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-12-31T11:26:56.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T11:26:56.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:26:56.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:26:56.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:26:56.495 [DEBUG] [Thread-126804] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:27:01.445 [DEBUG] [Thread-126806 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:27:09.345 [DEBUG] [Thread-126807 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:27:16.498 [DEBUG] [Thread-126808 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:27:26.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T11:27:26.517 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T11:27:26.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T11:27:27.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 11, 27, 6), 36.83, 7.84, 0.0, 11.82, 25.58, 0, 0, 0, 2, 0, 0),)
2025-12-31T11:27:27.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 11:27:06
2025-12-31T11:27:27.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T11:27:27.558 [DEBUG] [Thread-126809] [transport.py] [_log()] starting thread (client mode): 0xb95457b0
2025-12-31T11:27:27.558 [DEBUG] [Thread-126809] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:27:27.574 [DEBUG] [Thread-126809] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T11:27:27.575 [INFO] [Thread-126809] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T11:27:27.578 [DEBUG] [Thread-126809] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:27:27.578 [DEBUG] [Thread-126809] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T11:27:27.578 [DEBUG] [Thread-126809] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:27:27.578 [DEBUG] [Thread-126809] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:27:27.578 [DEBUG] [Thread-126809] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:27:27.578 [DEBUG] [Thread-126809] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:27:27.578 [DEBUG] [Thread-126809] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:27:27.578 [DEBUG] [Thread-126809] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:27:27.578 [DEBUG] [Thread-126809] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:27:27.578 [DEBUG] [Thread-126809] [transport.py] [_log()] client lang: <none>
2025-12-31T11:27:27.578 [DEBUG] [Thread-126809] [transport.py] [_log()] server lang: <none>
2025-12-31T11:27:27.578 [DEBUG] [Thread-126809] [transport.py] [_log()] kex follows: False
2025-12-31T11:27:27.578 [DEBUG] [Thread-126809] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:27:27.578 [DEBUG] [Thread-126809] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:27:27.578 [DEBUG] [Thread-126809] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:27:27.578 [DEBUG] [Thread-126809] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:27:27.578 [DEBUG] [Thread-126809] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:27:27.578 [DEBUG] [Thread-126809] [transport.py] [_log()] Compression: none
2025-12-31T11:27:27.578 [DEBUG] [Thread-126809] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:27:27.595 [DEBUG] [Thread-126809] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:27:27.596 [DEBUG] [Thread-126809] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:27:27.596 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T11:27:27.596 [DEBUG] [Thread-126809] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T11:27:27.596 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:27:27.597 [DEBUG] [Thread-126809] [transport.py] [_log()] userauth is OK
2025-12-31T11:27:27.597 [DEBUG] [Thread-126809] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:27:27.597 [DEBUG] [Thread-126809] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:27:27.597 [DEBUG] [Thread-126809] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T11:27:27.597 [DEBUG] [Thread-126809] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:27:27.606 [INFO] [Thread-126809] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:27:27.606 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:27:28.371 [DEBUG] [Thread-126809] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:27:28.371 [DEBUG] [Thread-126809] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:27:28.372 [DEBUG] [Thread-126809] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T11:27:28.412 [DEBUG] [Thread-126809] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:27:28.412 [DEBUG] [Thread-126809] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:27:28.416 [DEBUG] [Thread-126809] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:27:28.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:27:28.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T11:27:28.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T11:27:28.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T11:27:28.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:27:28.445 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T11:27:28.445 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:27:28.445 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:27:28.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T11:27:28.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.393546 -999.00  +25.70   8.19     12   -5.00 1 1 1 1 1   888    0 31.94 78.08 ----- 7.1 8.2 280.2 18.8 32.6 -25.5 31.9 -23.2 30.6 -23.8 31.3 -24.1
2025-12-31T11:27:28.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T11:27:28.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T11:27:28.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.393546
2025-12-31T11:27:28.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T11:27:28.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T11:27:28.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T11:27:28.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T11:27:28.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T11:27:28.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T11:27:06', tmtdew=36.83, humidity=7.84, cloud=0.0, wind=11.82, temperature=25.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T09:26:42.374', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T11:27:28.448 [DEBUG] [Thread-126809] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:27:28.535 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T11:27:28.548 [DEBUG] [Thread-126812] [transport.py] [_log()] starting thread (client mode): 0xb6bb2050
2025-12-31T11:27:28.548 [DEBUG] [Thread-126812] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:27:28.562 [DEBUG] [Thread-126812] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T11:27:28.562 [INFO] [Thread-126812] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T11:27:28.570 [DEBUG] [Thread-126812] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:27:28.570 [DEBUG] [Thread-126812] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T11:27:28.570 [DEBUG] [Thread-126812] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:27:28.571 [DEBUG] [Thread-126812] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:27:28.571 [DEBUG] [Thread-126812] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:27:28.571 [DEBUG] [Thread-126812] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:27:28.571 [DEBUG] [Thread-126812] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:27:28.571 [DEBUG] [Thread-126812] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:27:28.571 [DEBUG] [Thread-126812] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:27:28.571 [DEBUG] [Thread-126812] [transport.py] [_log()] client lang: <none>
2025-12-31T11:27:28.571 [DEBUG] [Thread-126812] [transport.py] [_log()] server lang: <none>
2025-12-31T11:27:28.572 [DEBUG] [Thread-126812] [transport.py] [_log()] kex follows: False
2025-12-31T11:27:28.572 [DEBUG] [Thread-126812] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:27:28.572 [DEBUG] [Thread-126812] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:27:28.572 [DEBUG] [Thread-126812] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:27:28.572 [DEBUG] [Thread-126812] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:27:28.572 [DEBUG] [Thread-126812] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:27:28.572 [DEBUG] [Thread-126812] [transport.py] [_log()] Compression: none
2025-12-31T11:27:28.572 [DEBUG] [Thread-126812] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:27:28.626 [DEBUG] [Thread-126812] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:27:28.627 [DEBUG] [Thread-126812] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:27:28.627 [DEBUG] [Thread-126812] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T11:27:28.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T11:27:28.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:27:28.683 [DEBUG] [Thread-126812] [transport.py] [_log()] userauth is OK
2025-12-31T11:27:28.683 [DEBUG] [Thread-126812] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:27:28.683 [DEBUG] [Thread-126812] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:27:28.683 [DEBUG] [Thread-126812] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T11:27:28.683 [DEBUG] [Thread-126812] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:27:28.696 [INFO] [Thread-126812] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:27:28.696 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T11:27:28.697 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:27:29.529 [DEBUG] [Thread-126812] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:27:29.529 [DEBUG] [Thread-126812] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:27:29.577 [DEBUG] [Thread-126812] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:27:29.577 [DEBUG] [Thread-126812] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:27:29.586 [DEBUG] [Thread-126812] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:27:29.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:27:29.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T11:27:29.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T11:27:29.614 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:27:29.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:27:29.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:27:29.623 [DEBUG] [Thread-126812] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:27:31.528 [DEBUG] [Thread-126814 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:27:33.556 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:27:33.557 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:27:46.576 [DEBUG] [Thread-126815 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:27:59.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T11:27:59.621 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T11:27:59.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T11:28:00.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 11, 27, 38), 37.27, 7.37, 0.0, 15.0, 25.18, 0, 0, 0, 2, 0, 0),)
2025-12-31T11:28:00.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 11:27:38
2025-12-31T11:28:00.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T11:28:00.618 [DEBUG] [Thread-126816] [transport.py] [_log()] starting thread (client mode): 0xb6b4b880
2025-12-31T11:28:00.618 [DEBUG] [Thread-126816] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:28:00.638 [DEBUG] [Thread-126816] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T11:28:00.639 [INFO] [Thread-126816] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T11:28:00.641 [DEBUG] [Thread-126816] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:28:00.642 [DEBUG] [Thread-126816] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T11:28:00.642 [DEBUG] [Thread-126816] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:28:00.642 [DEBUG] [Thread-126816] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:28:00.642 [DEBUG] [Thread-126816] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:28:00.642 [DEBUG] [Thread-126816] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:28:00.642 [DEBUG] [Thread-126816] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:28:00.642 [DEBUG] [Thread-126816] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:28:00.642 [DEBUG] [Thread-126816] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:28:00.642 [DEBUG] [Thread-126816] [transport.py] [_log()] client lang: <none>
2025-12-31T11:28:00.642 [DEBUG] [Thread-126816] [transport.py] [_log()] server lang: <none>
2025-12-31T11:28:00.642 [DEBUG] [Thread-126816] [transport.py] [_log()] kex follows: False
2025-12-31T11:28:00.642 [DEBUG] [Thread-126816] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:28:00.642 [DEBUG] [Thread-126816] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:28:00.642 [DEBUG] [Thread-126816] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:28:00.643 [DEBUG] [Thread-126816] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:28:00.643 [DEBUG] [Thread-126816] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:28:00.643 [DEBUG] [Thread-126816] [transport.py] [_log()] Compression: none
2025-12-31T11:28:00.643 [DEBUG] [Thread-126816] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:28:00.662 [DEBUG] [Thread-126816] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:28:00.662 [DEBUG] [Thread-126816] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:28:00.663 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T11:28:00.663 [DEBUG] [Thread-126816] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T11:28:00.664 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:28:00.665 [DEBUG] [Thread-126816] [transport.py] [_log()] userauth is OK
2025-12-31T11:28:00.665 [DEBUG] [Thread-126816] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:28:00.666 [DEBUG] [Thread-126816] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:28:00.666 [DEBUG] [Thread-126816] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T11:28:00.666 [DEBUG] [Thread-126816] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:28:00.691 [INFO] [Thread-126816] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:28:00.692 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:28:01.327 [DEBUG] [Thread-126816] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:28:01.327 [DEBUG] [Thread-126816] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:28:01.327 [DEBUG] [Thread-126816] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T11:28:01.368 [DEBUG] [Thread-126816] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:28:01.368 [DEBUG] [Thread-126816] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:28:01.371 [DEBUG] [Thread-126816] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:28:01.382 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:28:01.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T11:28:01.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T11:28:01.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T11:28:01.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:28:01.387 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T11:28:01.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:28:01.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:28:01.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T11:28:01.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.393893 -999.00  +25.70  18.44     12   -5.60 1 1 1 1 1   888    0 31.82 78.41 ----- 17.8 18.4 246.0 20.8 32.3 -28.5 31.9 -24.9 30.6 -24.9 31.0 -27.4
2025-12-31T11:28:01.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T11:28:01.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T11:28:01.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.393893
2025-12-31T11:28:01.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T11:28:01.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T11:28:01.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T11:28:01.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T11:28:01.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T11:28:01.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T11:27:38', tmtdew=37.27, humidity=7.37, cloud=0.0, wind=15.0, temperature=25.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T09:27:12.355', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T11:28:01.389 [DEBUG] [Thread-126816] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:28:01.470 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T11:28:01.482 [DEBUG] [Thread-126819] [transport.py] [_log()] starting thread (client mode): 0xb6b239d0
2025-12-31T11:28:01.482 [DEBUG] [Thread-126819] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:28:01.496 [DEBUG] [Thread-126819] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T11:28:01.496 [INFO] [Thread-126819] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T11:28:01.504 [DEBUG] [Thread-126819] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:28:01.504 [DEBUG] [Thread-126819] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T11:28:01.504 [DEBUG] [Thread-126819] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:28:01.504 [DEBUG] [Thread-126819] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:28:01.504 [DEBUG] [Thread-126819] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:28:01.504 [DEBUG] [Thread-126819] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:28:01.504 [DEBUG] [Thread-126819] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:28:01.504 [DEBUG] [Thread-126819] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:28:01.504 [DEBUG] [Thread-126819] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:28:01.504 [DEBUG] [Thread-126819] [transport.py] [_log()] client lang: <none>
2025-12-31T11:28:01.504 [DEBUG] [Thread-126819] [transport.py] [_log()] server lang: <none>
2025-12-31T11:28:01.504 [DEBUG] [Thread-126819] [transport.py] [_log()] kex follows: False
2025-12-31T11:28:01.504 [DEBUG] [Thread-126819] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:28:01.504 [DEBUG] [Thread-126819] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:28:01.504 [DEBUG] [Thread-126819] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:28:01.504 [DEBUG] [Thread-126819] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:28:01.504 [DEBUG] [Thread-126819] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:28:01.504 [DEBUG] [Thread-126819] [transport.py] [_log()] Compression: none
2025-12-31T11:28:01.504 [DEBUG] [Thread-126819] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:28:01.561 [DEBUG] [Thread-126819] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:28:01.561 [DEBUG] [Thread-126819] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:28:01.561 [DEBUG] [Thread-126819] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T11:28:01.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T11:28:01.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:28:01.612 [DEBUG] [Thread-126821 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:28:01.618 [DEBUG] [Thread-126819] [transport.py] [_log()] userauth is OK
2025-12-31T11:28:01.618 [DEBUG] [Thread-126819] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:28:01.618 [DEBUG] [Thread-126819] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:28:01.619 [DEBUG] [Thread-126819] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T11:28:01.619 [DEBUG] [Thread-126819] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:28:01.632 [INFO] [Thread-126819] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:28:01.632 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T11:28:01.632 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:28:02.478 [DEBUG] [Thread-126819] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:28:02.479 [DEBUG] [Thread-126819] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:28:02.527 [DEBUG] [Thread-126819] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:28:02.527 [DEBUG] [Thread-126819] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:28:02.535 [DEBUG] [Thread-126819] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:28:02.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:28:02.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T11:28:02.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T11:28:02.558 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:28:02.558 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:28:02.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:28:02.566 [DEBUG] [Thread-126819] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:28:09.396 [DEBUG] [Thread-126822 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:28:16.650 [DEBUG] [Thread-126823 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:28:31.686 [DEBUG] [Thread-126824 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:28:32.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T11:28:32.589 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T11:28:32.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T11:28:33.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 11, 28, 10), 37.29, 7.37, 0.0, 14.88, 25.23, 0, 0, 0, 2, 0, 0),)
2025-12-31T11:28:33.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 11:28:10
2025-12-31T11:28:33.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T11:28:33.576 [DEBUG] [Thread-126825] [transport.py] [_log()] starting thread (client mode): 0xb6b49c30
2025-12-31T11:28:33.576 [DEBUG] [Thread-126825] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:28:33.596 [DEBUG] [Thread-126825] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T11:28:33.596 [INFO] [Thread-126825] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T11:28:33.599 [DEBUG] [Thread-126825] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:28:33.599 [DEBUG] [Thread-126825] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T11:28:33.599 [DEBUG] [Thread-126825] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:28:33.599 [DEBUG] [Thread-126825] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:28:33.599 [DEBUG] [Thread-126825] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:28:33.599 [DEBUG] [Thread-126825] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:28:33.599 [DEBUG] [Thread-126825] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:28:33.599 [DEBUG] [Thread-126825] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:28:33.599 [DEBUG] [Thread-126825] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:28:33.600 [DEBUG] [Thread-126825] [transport.py] [_log()] client lang: <none>
2025-12-31T11:28:33.600 [DEBUG] [Thread-126825] [transport.py] [_log()] server lang: <none>
2025-12-31T11:28:33.600 [DEBUG] [Thread-126825] [transport.py] [_log()] kex follows: False
2025-12-31T11:28:33.600 [DEBUG] [Thread-126825] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:28:33.600 [DEBUG] [Thread-126825] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:28:33.600 [DEBUG] [Thread-126825] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:28:33.600 [DEBUG] [Thread-126825] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:28:33.600 [DEBUG] [Thread-126825] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:28:33.600 [DEBUG] [Thread-126825] [transport.py] [_log()] Compression: none
2025-12-31T11:28:33.600 [DEBUG] [Thread-126825] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:28:33.615 [DEBUG] [Thread-126825] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:28:33.616 [DEBUG] [Thread-126825] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:28:33.616 [DEBUG] [Thread-126825] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T11:28:33.616 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T11:28:33.617 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:28:33.618 [DEBUG] [Thread-126825] [transport.py] [_log()] userauth is OK
2025-12-31T11:28:33.618 [DEBUG] [Thread-126825] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:28:33.618 [DEBUG] [Thread-126825] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:28:33.618 [DEBUG] [Thread-126825] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T11:28:33.618 [DEBUG] [Thread-126825] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:28:33.651 [INFO] [Thread-126825] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:28:33.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:28:33.695 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:28:33.697 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:28:34.396 [DEBUG] [Thread-126825] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:28:34.396 [DEBUG] [Thread-126825] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:28:34.397 [DEBUG] [Thread-126825] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T11:28:34.437 [DEBUG] [Thread-126825] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:28:34.437 [DEBUG] [Thread-126825] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:28:34.440 [DEBUG] [Thread-126825] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:28:34.450 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:28:34.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T11:28:34.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T11:28:34.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T11:28:34.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:28:34.461 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T11:28:34.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:28:34.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:28:34.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T11:28:34.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.394241 -999.00  +25.50   6.18     12   -5.40 1 1 1 1 1   888    0 32.43 75.42 ----- 6.1 6.2 243.2 18.0 32.5 -26.4 31.8 -24.8 30.8 -23.5 31.3 -25.2
2025-12-31T11:28:34.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T11:28:34.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T11:28:34.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.394241
2025-12-31T11:28:34.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T11:28:34.463 [DEBUG] [Thread-126825] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:28:34.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T11:28:34.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T11:28:34.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T11:28:34.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T11:28:34.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T11:28:10', tmtdew=37.29, humidity=7.37, cloud=0.0, wind=14.88, temperature=25.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T09:27:42.422', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T11:28:34.555 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T11:28:34.567 [DEBUG] [Thread-126828] [transport.py] [_log()] starting thread (client mode): 0xb6b4be80
2025-12-31T11:28:34.568 [DEBUG] [Thread-126828] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:28:34.582 [DEBUG] [Thread-126828] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T11:28:34.582 [INFO] [Thread-126828] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T11:28:34.590 [DEBUG] [Thread-126828] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:28:34.590 [DEBUG] [Thread-126828] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T11:28:34.590 [DEBUG] [Thread-126828] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:28:34.590 [DEBUG] [Thread-126828] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:28:34.591 [DEBUG] [Thread-126828] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:28:34.591 [DEBUG] [Thread-126828] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:28:34.591 [DEBUG] [Thread-126828] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:28:34.591 [DEBUG] [Thread-126828] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:28:34.591 [DEBUG] [Thread-126828] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:28:34.591 [DEBUG] [Thread-126828] [transport.py] [_log()] client lang: <none>
2025-12-31T11:28:34.591 [DEBUG] [Thread-126828] [transport.py] [_log()] server lang: <none>
2025-12-31T11:28:34.591 [DEBUG] [Thread-126828] [transport.py] [_log()] kex follows: False
2025-12-31T11:28:34.591 [DEBUG] [Thread-126828] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:28:34.592 [DEBUG] [Thread-126828] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:28:34.592 [DEBUG] [Thread-126828] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:28:34.592 [DEBUG] [Thread-126828] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:28:34.592 [DEBUG] [Thread-126828] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:28:34.592 [DEBUG] [Thread-126828] [transport.py] [_log()] Compression: none
2025-12-31T11:28:34.592 [DEBUG] [Thread-126828] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:28:34.648 [DEBUG] [Thread-126828] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:28:34.648 [DEBUG] [Thread-126828] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:28:34.649 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T11:28:34.649 [DEBUG] [Thread-126828] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T11:28:34.650 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:28:34.703 [DEBUG] [Thread-126828] [transport.py] [_log()] userauth is OK
2025-12-31T11:28:34.704 [DEBUG] [Thread-126828] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:28:34.704 [DEBUG] [Thread-126828] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:28:34.704 [DEBUG] [Thread-126828] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T11:28:34.704 [DEBUG] [Thread-126828] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:28:34.724 [INFO] [Thread-126828] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:28:34.724 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T11:28:34.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:28:35.514 [DEBUG] [Thread-126828] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:28:35.515 [DEBUG] [Thread-126828] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:28:35.563 [DEBUG] [Thread-126828] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:28:35.564 [DEBUG] [Thread-126828] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:28:35.572 [DEBUG] [Thread-126828] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:28:35.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:28: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')
2025-12-31T11:28:35.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T11:28:35.597 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:28:35.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:28:35.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:28:35.605 [DEBUG] [Thread-126828] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:28:46.718 [DEBUG] [Thread-126830 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:29:01.769 [DEBUG] [Thread-126831 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:29:05.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T11:29:05.628 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T11:29:05.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T11:29:06.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 11, 28, 42), 36.95, 7.79, 0.0, 15.16, 25.35, 0, 0, 0, 2, 0, 0),)
2025-12-31T11:29:06.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 11:28:42
2025-12-31T11:29:06.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T11:29:06.617 [DEBUG] [Thread-126832] [transport.py] [_log()] starting thread (client mode): 0xb6b20490
2025-12-31T11:29:06.617 [DEBUG] [Thread-126832] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:29:06.637 [DEBUG] [Thread-126832] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T11:29:06.637 [INFO] [Thread-126832] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T11:29:06.640 [DEBUG] [Thread-126832] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:29:06.641 [DEBUG] [Thread-126832] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T11:29:06.641 [DEBUG] [Thread-126832] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:29:06.641 [DEBUG] [Thread-126832] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:29:06.641 [DEBUG] [Thread-126832] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:29:06.641 [DEBUG] [Thread-126832] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:29:06.641 [DEBUG] [Thread-126832] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:29:06.641 [DEBUG] [Thread-126832] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:29:06.641 [DEBUG] [Thread-126832] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:29:06.641 [DEBUG] [Thread-126832] [transport.py] [_log()] client lang: <none>
2025-12-31T11:29:06.641 [DEBUG] [Thread-126832] [transport.py] [_log()] server lang: <none>
2025-12-31T11:29:06.641 [DEBUG] [Thread-126832] [transport.py] [_log()] kex follows: False
2025-12-31T11:29:06.641 [DEBUG] [Thread-126832] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:29:06.641 [DEBUG] [Thread-126832] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:29:06.641 [DEBUG] [Thread-126832] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:29:06.641 [DEBUG] [Thread-126832] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:29:06.641 [DEBUG] [Thread-126832] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:29:06.641 [DEBUG] [Thread-126832] [transport.py] [_log()] Compression: none
2025-12-31T11:29:06.641 [DEBUG] [Thread-126832] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:29:06.664 [DEBUG] [Thread-126832] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:29:06.664 [DEBUG] [Thread-126832] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:29:06.665 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T11:29:06.665 [DEBUG] [Thread-126832] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T11:29:06.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:29:06.667 [DEBUG] [Thread-126832] [transport.py] [_log()] userauth is OK
2025-12-31T11:29:06.668 [DEBUG] [Thread-126832] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:29:06.668 [DEBUG] [Thread-126832] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:29:06.668 [DEBUG] [Thread-126832] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T11:29:06.668 [DEBUG] [Thread-126832] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:29:06.699 [INFO] [Thread-126832] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:29:06.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:29:07.340 [DEBUG] [Thread-126832] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:29:07.341 [DEBUG] [Thread-126832] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:29:07.341 [DEBUG] [Thread-126832] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T11:29:07.382 [DEBUG] [Thread-126832] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:29:07.382 [DEBUG] [Thread-126832] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:29:07.385 [DEBUG] [Thread-126832] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:29:07.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:29:07.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T11:29:07.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T11:29:07.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T11:29:07.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:29:07.410 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T11:29:07.411 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:29:07.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:29:07.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T11:29:07.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.394935 -999.00  +25.60   5.94     13   -4.50 1 1 1 1 1   888    0 32.42 74.30 ----- 8.9 5.9 234.3 14.2 32.8 -25.5 31.9 -25.1 30.8 -22.7 31.4 -23.8
2025-12-31T11:29:07.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T11:29:07.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T11:29:07.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.394935
2025-12-31T11:29:07.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T11:29:07.412 [DEBUG] [Thread-126832] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:29:07.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T11:29:07.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T11:29:07.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T11:29:07.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T11:29:07.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T11:28:42', tmtdew=36.95, humidity=7.79, cloud=0.0, wind=15.16, temperature=25.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T09:28:42.384', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T11:29:07.496 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T11:29:07.508 [DEBUG] [Thread-126835] [transport.py] [_log()] starting thread (client mode): 0xbbfce950
2025-12-31T11:29:07.509 [DEBUG] [Thread-126835] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:29:07.523 [DEBUG] [Thread-126835] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T11:29:07.523 [INFO] [Thread-126835] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T11:29:07.531 [DEBUG] [Thread-126835] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:29:07.531 [DEBUG] [Thread-126835] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T11:29:07.531 [DEBUG] [Thread-126835] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:29:07.531 [DEBUG] [Thread-126835] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:29:07.531 [DEBUG] [Thread-126835] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:29:07.531 [DEBUG] [Thread-126835] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:29:07.531 [DEBUG] [Thread-126835] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:29:07.531 [DEBUG] [Thread-126835] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:29:07.531 [DEBUG] [Thread-126835] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:29:07.531 [DEBUG] [Thread-126835] [transport.py] [_log()] client lang: <none>
2025-12-31T11:29:07.532 [DEBUG] [Thread-126835] [transport.py] [_log()] server lang: <none>
2025-12-31T11:29:07.532 [DEBUG] [Thread-126835] [transport.py] [_log()] kex follows: False
2025-12-31T11:29:07.532 [DEBUG] [Thread-126835] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:29:07.532 [DEBUG] [Thread-126835] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:29:07.532 [DEBUG] [Thread-126835] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:29:07.532 [DEBUG] [Thread-126835] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:29:07.532 [DEBUG] [Thread-126835] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:29:07.532 [DEBUG] [Thread-126835] [transport.py] [_log()] Compression: none
2025-12-31T11:29:07.532 [DEBUG] [Thread-126835] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:29:07.597 [DEBUG] [Thread-126835] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:29:07.597 [DEBUG] [Thread-126835] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:29:07.598 [DEBUG] [Thread-126835] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T11:29:07.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T11:29:07.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:29:07.655 [DEBUG] [Thread-126835] [transport.py] [_log()] userauth is OK
2025-12-31T11:29:07.655 [DEBUG] [Thread-126835] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:29:07.655 [DEBUG] [Thread-126835] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:29:07.655 [DEBUG] [Thread-126835] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T11:29:07.655 [DEBUG] [Thread-126835] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:29:07.674 [INFO] [Thread-126835] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:29:07.675 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T11:29:07.675 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:29:08.505 [DEBUG] [Thread-126835] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:29:08.505 [DEBUG] [Thread-126835] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:29:08.553 [DEBUG] [Thread-126835] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:29:08.553 [DEBUG] [Thread-126835] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:29:08.562 [DEBUG] [Thread-126835] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:29:08.571 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:29:08.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-12-31T11:29:08.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T11:29:08.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:29:08.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:29:08.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:29:08.599 [DEBUG] [Thread-126835] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:29:09.457 [DEBUG] [Thread-126837 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:29:16.804 [DEBUG] [Thread-126838 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:29:31.852 [DEBUG] [Thread-126839 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:29:33.837 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:29:33.838 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:29:38.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T11:29:38.620 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T11:29:38.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T11:29:39.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 11, 29, 14), 37.19, 7.66, 0.0, 11.4, 25.4, 0, 0, 0, 2, 0, 0),)
2025-12-31T11:29:39.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 11:29:14
2025-12-31T11:29:39.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T11:29:39.600 [DEBUG] [Thread-126840] [transport.py] [_log()] starting thread (client mode): 0xbbfcf070
2025-12-31T11:29:39.601 [DEBUG] [Thread-126840] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:29:39.622 [DEBUG] [Thread-126840] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T11:29:39.622 [INFO] [Thread-126840] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T11:29:39.625 [DEBUG] [Thread-126840] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:29:39.626 [DEBUG] [Thread-126840] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T11:29:39.626 [DEBUG] [Thread-126840] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:29:39.626 [DEBUG] [Thread-126840] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:29:39.626 [DEBUG] [Thread-126840] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:29:39.626 [DEBUG] [Thread-126840] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:29:39.626 [DEBUG] [Thread-126840] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:29:39.626 [DEBUG] [Thread-126840] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:29:39.626 [DEBUG] [Thread-126840] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:29:39.626 [DEBUG] [Thread-126840] [transport.py] [_log()] client lang: <none>
2025-12-31T11:29:39.626 [DEBUG] [Thread-126840] [transport.py] [_log()] server lang: <none>
2025-12-31T11:29:39.626 [DEBUG] [Thread-126840] [transport.py] [_log()] kex follows: False
2025-12-31T11:29:39.626 [DEBUG] [Thread-126840] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:29:39.626 [DEBUG] [Thread-126840] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:29:39.626 [DEBUG] [Thread-126840] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:29:39.626 [DEBUG] [Thread-126840] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:29:39.626 [DEBUG] [Thread-126840] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:29:39.626 [DEBUG] [Thread-126840] [transport.py] [_log()] Compression: none
2025-12-31T11:29:39.626 [DEBUG] [Thread-126840] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:29:39.644 [DEBUG] [Thread-126840] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:29:39.645 [DEBUG] [Thread-126840] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:29:39.645 [DEBUG] [Thread-126840] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T11:29:39.646 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T11:29:39.646 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:29:39.647 [DEBUG] [Thread-126840] [transport.py] [_log()] userauth is OK
2025-12-31T11:29:39.647 [DEBUG] [Thread-126840] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:29:39.648 [DEBUG] [Thread-126840] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:29:39.648 [DEBUG] [Thread-126840] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T11:29:39.648 [DEBUG] [Thread-126840] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:29:39.671 [INFO] [Thread-126840] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:29:39.672 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:29:40.427 [DEBUG] [Thread-126840] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:29:40.427 [DEBUG] [Thread-126840] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:29:40.428 [DEBUG] [Thread-126840] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T11:29:40.468 [DEBUG] [Thread-126840] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:29:40.468 [DEBUG] [Thread-126840] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:29:40.471 [DEBUG] [Thread-126840] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:29:40.477 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:29:40.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T11:29:40.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T11:29:40.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T11:29:40.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:29:40.487 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T11:29:40.488 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:29:40.488 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:29:40.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T11:29:40.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.395282 -999.00  +25.80  25.92     13   -4.00 1 1 1 1 1   888    0 31.88 70.72 ----- 22.1 25.9 273.3 32.5 32.7 -28.6 32.1 -23.7 30.6 -29.6 31.4 -26.7
2025-12-31T11:29:40.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T11:29:40.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T11:29:40.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.395282
2025-12-31T11:29:40.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T11:29:40.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T11:29:40.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T11:29:40.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T11:29:40.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T11:29:40.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T11:29:14', tmtdew=37.19, humidity=7.66, cloud=0.0, wind=11.4, temperature=25.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T09:29:12.365', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T11:29:40.490 [DEBUG] [Thread-126840] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:29:40.573 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T11:29:40.585 [DEBUG] [Thread-126843] [transport.py] [_log()] starting thread (client mode): 0xbbfcdd50
2025-12-31T11:29:40.585 [DEBUG] [Thread-126843] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:29:40.600 [DEBUG] [Thread-126843] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T11:29:40.600 [INFO] [Thread-126843] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T11:29:40.608 [DEBUG] [Thread-126843] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:29:40.608 [DEBUG] [Thread-126843] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T11:29:40.608 [DEBUG] [Thread-126843] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:29:40.609 [DEBUG] [Thread-126843] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:29:40.609 [DEBUG] [Thread-126843] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:29:40.609 [DEBUG] [Thread-126843] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:29:40.609 [DEBUG] [Thread-126843] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:29:40.609 [DEBUG] [Thread-126843] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:29:40.609 [DEBUG] [Thread-126843] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:29:40.609 [DEBUG] [Thread-126843] [transport.py] [_log()] client lang: <none>
2025-12-31T11:29:40.609 [DEBUG] [Thread-126843] [transport.py] [_log()] server lang: <none>
2025-12-31T11:29:40.610 [DEBUG] [Thread-126843] [transport.py] [_log()] kex follows: False
2025-12-31T11:29:40.610 [DEBUG] [Thread-126843] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:29:40.610 [DEBUG] [Thread-126843] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:29:40.610 [DEBUG] [Thread-126843] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:29:40.610 [DEBUG] [Thread-126843] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:29:40.610 [DEBUG] [Thread-126843] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:29:40.610 [DEBUG] [Thread-126843] [transport.py] [_log()] Compression: none
2025-12-31T11:29:40.610 [DEBUG] [Thread-126843] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:29:40.668 [DEBUG] [Thread-126843] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:29:40.668 [DEBUG] [Thread-126843] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:29:40.669 [DEBUG] [Thread-126843] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T11:29:40.669 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T11:29:40.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:29:40.728 [DEBUG] [Thread-126843] [transport.py] [_log()] userauth is OK
2025-12-31T11:29:40.728 [DEBUG] [Thread-126843] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:29:40.728 [DEBUG] [Thread-126843] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:29:40.728 [DEBUG] [Thread-126843] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T11:29:40.729 [DEBUG] [Thread-126843] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:29:40.747 [INFO] [Thread-126843] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:29:40.747 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T11:29:40.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:29:41.567 [DEBUG] [Thread-126843] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:29:41.567 [DEBUG] [Thread-126843] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:29:41.615 [DEBUG] [Thread-126843] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:29:41.615 [DEBUG] [Thread-126843] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:29:41.625 [DEBUG] [Thread-126843] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:29:41.633 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:29:41.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T11:29:41.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T11:29:41.652 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:29:41.653 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:29:41.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:29:41.661 [DEBUG] [Thread-126843] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:29:46.893 [DEBUG] [Thread-126845 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:30:01.946 [DEBUG] [Thread-126846 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:30:09.508 [DEBUG] [Thread-126847 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:30:11.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T11:30:11.684 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T11:30:11.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-12-31T11:30:12.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 11, 29, 46), 36.26, 8.52, 0.0, 29.59, 25.72, 0, 0, 0, 2, 0, 0),)
2025-12-31T11:30:12.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 11:29:46
2025-12-31T11:30:12.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T11:30:12.688 [DEBUG] [Thread-126848] [transport.py] [_log()] starting thread (client mode): 0xbbfcd7b0
2025-12-31T11:30:12.688 [DEBUG] [Thread-126848] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:30:12.707 [DEBUG] [Thread-126848] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T11:30:12.707 [INFO] [Thread-126848] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T11:30:12.710 [DEBUG] [Thread-126848] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:30:12.711 [DEBUG] [Thread-126848] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T11:30:12.711 [DEBUG] [Thread-126848] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:30:12.711 [DEBUG] [Thread-126848] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:30:12.711 [DEBUG] [Thread-126848] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:30:12.711 [DEBUG] [Thread-126848] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:30:12.711 [DEBUG] [Thread-126848] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:30:12.711 [DEBUG] [Thread-126848] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:30:12.711 [DEBUG] [Thread-126848] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:30:12.711 [DEBUG] [Thread-126848] [transport.py] [_log()] client lang: <none>
2025-12-31T11:30:12.711 [DEBUG] [Thread-126848] [transport.py] [_log()] server lang: <none>
2025-12-31T11:30:12.711 [DEBUG] [Thread-126848] [transport.py] [_log()] kex follows: False
2025-12-31T11:30:12.711 [DEBUG] [Thread-126848] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:30:12.711 [DEBUG] [Thread-126848] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:30:12.711 [DEBUG] [Thread-126848] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:30:12.712 [DEBUG] [Thread-126848] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:30:12.712 [DEBUG] [Thread-126848] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:30:12.712 [DEBUG] [Thread-126848] [transport.py] [_log()] Compression: none
2025-12-31T11:30:12.712 [DEBUG] [Thread-126848] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:30:12.731 [DEBUG] [Thread-126848] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:30:12.732 [DEBUG] [Thread-126848] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:30:12.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T11:30:12.733 [DEBUG] [Thread-126848] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T11:30:12.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:30:12.735 [DEBUG] [Thread-126848] [transport.py] [_log()] userauth is OK
2025-12-31T11:30:12.735 [DEBUG] [Thread-126848] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:30:12.735 [DEBUG] [Thread-126848] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:30:12.735 [DEBUG] [Thread-126848] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T11:30:12.735 [DEBUG] [Thread-126848] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:30:12.758 [INFO] [Thread-126848] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:30:12.759 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:30:14.911 [DEBUG] [Thread-126848] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:30:14.911 [DEBUG] [Thread-126848] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:30:14.912 [DEBUG] [Thread-126848] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T11:30:14.952 [DEBUG] [Thread-126848] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:30:14.952 [DEBUG] [Thread-126848] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:30:14.956 [DEBUG] [Thread-126848] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:30:14.967 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:30:14.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T11:30:14.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T11:30:14.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T11:30:14.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:30:14.990 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T11:30:14.991 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:30:14.991 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:30:14.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T11:30:14.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.395629 -999.00  +25.70  20.29     14   -3.80 1 1 1 1 1   888    0 31.29 62.07 ----- 30.6 20.3 301.7 29.7 32.6 -29.1 32.0 -25.4 30.5 -29.8 31.5 -25.2
2025-12-31T11:30:14.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T11:30:14.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T11:30:14.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.395629
2025-12-31T11:30:14.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T11:30:14.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T11:30:14.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T11:30:14.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T11:30:14.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T11:30:14.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T11:29:46', tmtdew=36.26, humidity=8.52, cloud=0.0, wind=29.59, temperature=25.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T09:29:42.346', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T11:30:14.994 [DEBUG] [Thread-126848] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:30:15.078 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T11:30:15.090 [DEBUG] [Thread-126851] [transport.py] [_log()] starting thread (client mode): 0xbbfcde10
2025-12-31T11:30:15.090 [DEBUG] [Thread-126851] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:30:15.105 [DEBUG] [Thread-126851] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T11:30:15.105 [INFO] [Thread-126851] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T11:30:15.113 [DEBUG] [Thread-126851] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:30:15.113 [DEBUG] [Thread-126851] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T11:30:15.113 [DEBUG] [Thread-126851] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:30:15.113 [DEBUG] [Thread-126851] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:30:15.114 [DEBUG] [Thread-126851] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:30:15.114 [DEBUG] [Thread-126851] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:30:15.114 [DEBUG] [Thread-126851] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:30:15.114 [DEBUG] [Thread-126851] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:30:15.114 [DEBUG] [Thread-126851] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:30:15.114 [DEBUG] [Thread-126851] [transport.py] [_log()] client lang: <none>
2025-12-31T11:30:15.114 [DEBUG] [Thread-126851] [transport.py] [_log()] server lang: <none>
2025-12-31T11:30:15.114 [DEBUG] [Thread-126851] [transport.py] [_log()] kex follows: False
2025-12-31T11:30:15.114 [DEBUG] [Thread-126851] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:30:15.115 [DEBUG] [Thread-126851] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:30:15.115 [DEBUG] [Thread-126851] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:30:15.115 [DEBUG] [Thread-126851] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:30:15.115 [DEBUG] [Thread-126851] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:30:15.115 [DEBUG] [Thread-126851] [transport.py] [_log()] Compression: none
2025-12-31T11:30:15.115 [DEBUG] [Thread-126851] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:30:15.171 [DEBUG] [Thread-126851] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:30:15.172 [DEBUG] [Thread-126851] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:30:15.173 [DEBUG] [Thread-126851] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T11:30:15.173 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T11:30:15.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:30:15.230 [DEBUG] [Thread-126851] [transport.py] [_log()] userauth is OK
2025-12-31T11:30:15.230 [DEBUG] [Thread-126851] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:30:15.230 [DEBUG] [Thread-126851] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:30:15.230 [DEBUG] [Thread-126851] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T11:30:15.230 [DEBUG] [Thread-126851] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:30:15.254 [INFO] [Thread-126851] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:30:15.255 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T11:30:15.255 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:30:16.085 [DEBUG] [Thread-126851] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:30:16.085 [DEBUG] [Thread-126851] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:30:16.133 [DEBUG] [Thread-126851] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:30:16.134 [DEBUG] [Thread-126851] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:30:16.142 [DEBUG] [Thread-126851] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:30:16.152 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:30:16.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T11:30:16.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T11:30:16.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:30:16.171 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:30:16.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:30:16.179 [DEBUG] [Thread-126851] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:30:16.977 [DEBUG] [Thread-126853 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:30:32.029 [DEBUG] [Thread-126854 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:30:33.982 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:30:33.983 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:30:46.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T11:30:46.202 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T11:30:46.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T11:30:46.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 11, 30, 18), 36.18, 8.59, 0.0, 33.74, 25.83, 0, 0, 0, 2, 0, 0),)
2025-12-31T11:30:46.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 11:30:18
2025-12-31T11:30:47.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T11:30:47.057 [DEBUG] [Thread-126855 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:30:47.200 [DEBUG] [Thread-126856] [transport.py] [_log()] starting thread (client mode): 0xbbfce680
2025-12-31T11:30:47.200 [DEBUG] [Thread-126856] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:30:47.222 [DEBUG] [Thread-126856] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T11:30:47.222 [INFO] [Thread-126856] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T11:30:47.223 [DEBUG] [Thread-126856] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:30:47.223 [DEBUG] [Thread-126856] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T11:30:47.223 [DEBUG] [Thread-126856] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:30:47.223 [DEBUG] [Thread-126856] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:30:47.223 [DEBUG] [Thread-126856] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:30:47.223 [DEBUG] [Thread-126856] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:30:47.223 [DEBUG] [Thread-126856] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:30:47.223 [DEBUG] [Thread-126856] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:30:47.223 [DEBUG] [Thread-126856] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:30:47.223 [DEBUG] [Thread-126856] [transport.py] [_log()] client lang: <none>
2025-12-31T11:30:47.223 [DEBUG] [Thread-126856] [transport.py] [_log()] server lang: <none>
2025-12-31T11:30:47.223 [DEBUG] [Thread-126856] [transport.py] [_log()] kex follows: False
2025-12-31T11:30:47.223 [DEBUG] [Thread-126856] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:30:47.223 [DEBUG] [Thread-126856] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:30:47.223 [DEBUG] [Thread-126856] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:30:47.223 [DEBUG] [Thread-126856] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:30:47.223 [DEBUG] [Thread-126856] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:30:47.223 [DEBUG] [Thread-126856] [transport.py] [_log()] Compression: none
2025-12-31T11:30:47.223 [DEBUG] [Thread-126856] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:30:47.242 [DEBUG] [Thread-126856] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:30:47.242 [DEBUG] [Thread-126856] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:30:47.243 [DEBUG] [Thread-126856] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T11:30:47.243 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T11:30:47.244 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:30:47.245 [DEBUG] [Thread-126856] [transport.py] [_log()] userauth is OK
2025-12-31T11:30:47.245 [DEBUG] [Thread-126856] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:30:47.245 [DEBUG] [Thread-126856] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:30:47.245 [DEBUG] [Thread-126856] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T11:30:47.245 [DEBUG] [Thread-126856] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:30:47.270 [INFO] [Thread-126856] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:30:47.270 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:30:47.896 [DEBUG] [Thread-126856] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:30:47.896 [DEBUG] [Thread-126856] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:30:47.897 [DEBUG] [Thread-126856] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T11:30:47.937 [DEBUG] [Thread-126856] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:30:47.937 [DEBUG] [Thread-126856] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:30:47.941 [DEBUG] [Thread-126856] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:30:47.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:30:47.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T11:30:47.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T11:30:47.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T11:30:47.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:30:47.965 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T11:30:47.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:30:47.965 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:30:47.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T11:30:47.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.395977 -999.00  +25.80  26.32     13   -3.70 1 1 1 1 1   888    0 31.10 57.28 ----- 26.4 26.3 275.4 30.1 32.4 -28.4 31.9 -25.8 30.3 -26.3 31.3 -24.8
2025-12-31T11:30:47.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T11:30:47.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T11:30:47.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.395977
2025-12-31T11:30:47.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T11:30:47.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T11:30:47.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T11:30:47.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T11:30:47.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T11:30:47.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T11:30:18', tmtdew=36.18, humidity=8.59, cloud=0.0, wind=33.74, temperature=25.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T09:30:12.413', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T11:30:47.968 [DEBUG] [Thread-126856] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:30:48.051 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T11:30:48.063 [DEBUG] [Thread-126859] [transport.py] [_log()] starting thread (client mode): 0xbbfcfe20
2025-12-31T11:30:48.063 [DEBUG] [Thread-126859] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:30:48.079 [DEBUG] [Thread-126859] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T11:30:48.079 [INFO] [Thread-126859] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T11:30:48.087 [DEBUG] [Thread-126859] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:30:48.087 [DEBUG] [Thread-126859] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T11:30:48.087 [DEBUG] [Thread-126859] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:30:48.087 [DEBUG] [Thread-126859] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:30:48.087 [DEBUG] [Thread-126859] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:30:48.087 [DEBUG] [Thread-126859] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:30:48.088 [DEBUG] [Thread-126859] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:30:48.088 [DEBUG] [Thread-126859] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:30:48.088 [DEBUG] [Thread-126859] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:30:48.088 [DEBUG] [Thread-126859] [transport.py] [_log()] client lang: <none>
2025-12-31T11:30:48.088 [DEBUG] [Thread-126859] [transport.py] [_log()] server lang: <none>
2025-12-31T11:30:48.088 [DEBUG] [Thread-126859] [transport.py] [_log()] kex follows: False
2025-12-31T11:30:48.088 [DEBUG] [Thread-126859] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:30:48.088 [DEBUG] [Thread-126859] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:30:48.088 [DEBUG] [Thread-126859] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:30:48.089 [DEBUG] [Thread-126859] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:30:48.089 [DEBUG] [Thread-126859] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:30:48.089 [DEBUG] [Thread-126859] [transport.py] [_log()] Compression: none
2025-12-31T11:30:48.089 [DEBUG] [Thread-126859] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:30:48.147 [DEBUG] [Thread-126859] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:30:48.148 [DEBUG] [Thread-126859] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:30:48.148 [DEBUG] [Thread-126859] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T11:30:48.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T11:30:48.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:30:48.203 [DEBUG] [Thread-126859] [transport.py] [_log()] userauth is OK
2025-12-31T11:30:48.204 [DEBUG] [Thread-126859] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:30:48.204 [DEBUG] [Thread-126859] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:30:48.204 [DEBUG] [Thread-126859] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T11:30:48.204 [DEBUG] [Thread-126859] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:30:48.222 [INFO] [Thread-126859] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:30:48.223 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T11:30:48.223 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:30:49.053 [DEBUG] [Thread-126859] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:30:49.053 [DEBUG] [Thread-126859] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:30:49.101 [DEBUG] [Thread-126859] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:30:49.101 [DEBUG] [Thread-126859] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:30:49.110 [DEBUG] [Thread-126859] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:30:49.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:30:49.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T11:30:49.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T11:30:49.138 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:30:49.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:30:49.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:30:49.147 [DEBUG] [Thread-126859] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:31:02.088 [DEBUG] [Thread-126861 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:31:09.560 [DEBUG] [Thread-126862 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:31:17.138 [DEBUG] [Thread-126863 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:31:19.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T11:31:19.149 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T11:31:19.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T11:31:19.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 11, 30, 51), 36.01, 8.44, 0.0, 22.13, 26.23, 0, 0, 0, 2, 0, 0),)
2025-12-31T11:31:19.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 11:30:51
2025-12-31T11:31:20.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T11:31:20.166 [DEBUG] [Thread-126864] [transport.py] [_log()] starting thread (client mode): 0xbbfceb30
2025-12-31T11:31:20.166 [DEBUG] [Thread-126864] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:31:20.186 [DEBUG] [Thread-126864] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T11:31:20.186 [INFO] [Thread-126864] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T11:31:20.190 [DEBUG] [Thread-126864] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:31:20.190 [DEBUG] [Thread-126864] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T11:31:20.190 [DEBUG] [Thread-126864] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:31:20.190 [DEBUG] [Thread-126864] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:31:20.190 [DEBUG] [Thread-126864] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:31:20.190 [DEBUG] [Thread-126864] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:31:20.190 [DEBUG] [Thread-126864] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:31:20.190 [DEBUG] [Thread-126864] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:31:20.190 [DEBUG] [Thread-126864] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:31:20.191 [DEBUG] [Thread-126864] [transport.py] [_log()] client lang: <none>
2025-12-31T11:31:20.191 [DEBUG] [Thread-126864] [transport.py] [_log()] server lang: <none>
2025-12-31T11:31:20.191 [DEBUG] [Thread-126864] [transport.py] [_log()] kex follows: False
2025-12-31T11:31:20.191 [DEBUG] [Thread-126864] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:31:20.191 [DEBUG] [Thread-126864] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:31:20.191 [DEBUG] [Thread-126864] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:31:20.191 [DEBUG] [Thread-126864] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:31:20.191 [DEBUG] [Thread-126864] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:31:20.191 [DEBUG] [Thread-126864] [transport.py] [_log()] Compression: none
2025-12-31T11:31:20.191 [DEBUG] [Thread-126864] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:31:20.207 [DEBUG] [Thread-126864] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:31:20.207 [DEBUG] [Thread-126864] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:31:20.207 [DEBUG] [Thread-126864] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T11:31:20.207 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T11:31:20.207 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:31:20.209 [DEBUG] [Thread-126864] [transport.py] [_log()] userauth is OK
2025-12-31T11:31:20.209 [DEBUG] [Thread-126864] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:31:20.209 [DEBUG] [Thread-126864] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:31:20.209 [DEBUG] [Thread-126864] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T11:31:20.209 [DEBUG] [Thread-126864] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:31:20.219 [INFO] [Thread-126864] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:31:20.219 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:31:20.968 [DEBUG] [Thread-126864] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:31:20.968 [DEBUG] [Thread-126864] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:31:20.968 [DEBUG] [Thread-126864] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T11:31:21.009 [DEBUG] [Thread-126864] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:31:21.009 [DEBUG] [Thread-126864] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:31:21.011 [DEBUG] [Thread-126864] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:31:21.024 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:31:21.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T11:31:21.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T11:31:21.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T11:31:21.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:31:21.028 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T11:31:21.028 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:31:21.028 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:31:21.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T11:31:21.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.396324 -999.00  +25.40  38.32     13   -4.00 1 1 2 1 1   888    0 31.38 51.20 ----- 36.5 38.3 280.2 44.9 32.1 -29.6 31.9 -26.8 29.9 -29.0 31.0 -25.1
2025-12-31T11:31:21.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T11:31:21.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T11:31:21.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.396324
2025-12-31T11:31:21.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T11:31:21.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T11:31:21.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T11:31:21.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T11:31:21.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T11:31:21.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T11:30:51', tmtdew=36.01, humidity=8.44, cloud=0.0, wind=22.13, temperature=26.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T09:30:42.394', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T11:31:21.029 [DEBUG] [Thread-126864] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:31:21.103 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T11:31:21.116 [DEBUG] [Thread-126867] [transport.py] [_log()] starting thread (client mode): 0xbbfcd930
2025-12-31T11:31:21.116 [DEBUG] [Thread-126867] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:31:21.131 [DEBUG] [Thread-126867] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T11:31:21.131 [INFO] [Thread-126867] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T11:31:21.138 [DEBUG] [Thread-126867] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:31:21.138 [DEBUG] [Thread-126867] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T11:31:21.138 [DEBUG] [Thread-126867] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:31:21.138 [DEBUG] [Thread-126867] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:31:21.138 [DEBUG] [Thread-126867] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:31:21.138 [DEBUG] [Thread-126867] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:31:21.138 [DEBUG] [Thread-126867] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:31:21.138 [DEBUG] [Thread-126867] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:31:21.138 [DEBUG] [Thread-126867] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:31:21.138 [DEBUG] [Thread-126867] [transport.py] [_log()] client lang: <none>
2025-12-31T11:31:21.138 [DEBUG] [Thread-126867] [transport.py] [_log()] server lang: <none>
2025-12-31T11:31:21.138 [DEBUG] [Thread-126867] [transport.py] [_log()] kex follows: False
2025-12-31T11:31:21.138 [DEBUG] [Thread-126867] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:31:21.138 [DEBUG] [Thread-126867] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:31:21.138 [DEBUG] [Thread-126867] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:31:21.138 [DEBUG] [Thread-126867] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:31:21.138 [DEBUG] [Thread-126867] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:31:21.139 [DEBUG] [Thread-126867] [transport.py] [_log()] Compression: none
2025-12-31T11:31:21.139 [DEBUG] [Thread-126867] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:31:21.193 [DEBUG] [Thread-126867] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:31:21.194 [DEBUG] [Thread-126867] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:31:21.194 [DEBUG] [Thread-126867] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T11:31:21.194 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T11:31:21.194 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:31:21.251 [DEBUG] [Thread-126867] [transport.py] [_log()] userauth is OK
2025-12-31T11:31:21.251 [DEBUG] [Thread-126867] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:31:21.251 [DEBUG] [Thread-126867] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:31:21.251 [DEBUG] [Thread-126867] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T11:31:21.251 [DEBUG] [Thread-126867] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:31:21.265 [INFO] [Thread-126867] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:31:21.265 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T11:31:21.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:31:22.091 [DEBUG] [Thread-126867] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:31:22.092 [DEBUG] [Thread-126867] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:31:22.139 [DEBUG] [Thread-126867] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:31:22.139 [DEBUG] [Thread-126867] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:31:22.147 [DEBUG] [Thread-126867] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:31:22.155 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:31:22.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T11:31:22.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T11:31:22.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:31:22.171 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:31:22.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:31:22.179 [DEBUG] [Thread-126867] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:31:32.171 [DEBUG] [Thread-126869 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:31:34.122 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:31:34.123 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:31:47.232 [DEBUG] [Thread-126870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:31:52.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T11:31:52.202 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T11:31: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-12-31T11:31:52.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 11, 31, 23), 36.11, 8.42, 0.0, 23.7, 26.51, 0, 0, 0, 2, 0, 0),)
2025-12-31T11:31:52.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 11:31:23
2025-12-31T11:31:53.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T11:31:53.192 [DEBUG] [Thread-126871] [transport.py] [_log()] starting thread (client mode): 0xbbfcf0d0
2025-12-31T11:31:53.192 [DEBUG] [Thread-126871] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:31:53.212 [DEBUG] [Thread-126871] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T11:31:53.212 [INFO] [Thread-126871] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T11:31:53.215 [DEBUG] [Thread-126871] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:31:53.216 [DEBUG] [Thread-126871] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T11:31:53.216 [DEBUG] [Thread-126871] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:31:53.216 [DEBUG] [Thread-126871] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:31:53.216 [DEBUG] [Thread-126871] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:31:53.216 [DEBUG] [Thread-126871] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:31:53.216 [DEBUG] [Thread-126871] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:31:53.216 [DEBUG] [Thread-126871] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:31:53.216 [DEBUG] [Thread-126871] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:31:53.216 [DEBUG] [Thread-126871] [transport.py] [_log()] client lang: <none>
2025-12-31T11:31:53.216 [DEBUG] [Thread-126871] [transport.py] [_log()] server lang: <none>
2025-12-31T11:31:53.216 [DEBUG] [Thread-126871] [transport.py] [_log()] kex follows: False
2025-12-31T11:31:53.216 [DEBUG] [Thread-126871] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:31:53.217 [DEBUG] [Thread-126871] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:31:53.217 [DEBUG] [Thread-126871] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:31:53.217 [DEBUG] [Thread-126871] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:31:53.217 [DEBUG] [Thread-126871] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:31:53.217 [DEBUG] [Thread-126871] [transport.py] [_log()] Compression: none
2025-12-31T11:31:53.217 [DEBUG] [Thread-126871] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:31:53.237 [DEBUG] [Thread-126871] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:31:53.238 [DEBUG] [Thread-126871] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:31:53.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T11:31:53.239 [DEBUG] [Thread-126871] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T11:31:53.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:31:53.240 [DEBUG] [Thread-126871] [transport.py] [_log()] userauth is OK
2025-12-31T11:31:53.241 [DEBUG] [Thread-126871] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:31:53.241 [DEBUG] [Thread-126871] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:31:53.241 [DEBUG] [Thread-126871] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T11:31:53.241 [DEBUG] [Thread-126871] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:31:53.264 [INFO] [Thread-126871] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:31:53.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:31:53.921 [DEBUG] [Thread-126871] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:31:53.921 [DEBUG] [Thread-126871] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:31:53.922 [DEBUG] [Thread-126871] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T11:31:53.962 [DEBUG] [Thread-126871] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:31:53.962 [DEBUG] [Thread-126871] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:31:53.966 [DEBUG] [Thread-126871] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:31:53.979 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:31:53.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T11:31:53.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T11:31:53.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T11:31:53.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:31:53.989 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T11:31:53.990 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:31:53.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:31:53.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T11:31:53.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.396671 -999.00  +25.50  30.36     13   -4.00 1 1 2 1 1   888    0 31.46 48.38 ----- 28.1 30.4 273.0 38.4 32.1 -27.5 31.6 -25.7 30.0 -24.8 31.0 -25.2
2025-12-31T11:31:53.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T11:31:53.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T11:31:53.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.396671
2025-12-31T11:31:53.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T11:31:53.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T11:31:53.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T11:31:53.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T11:31:53.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T11:31:53.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T11:31:23', tmtdew=36.11, humidity=8.42, cloud=0.0, wind=23.7, temperature=26.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T09:31:12.374', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T11:31:53.992 [DEBUG] [Thread-126871] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:31:54.074 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T11:31:54.085 [DEBUG] [Thread-126874] [transport.py] [_log()] starting thread (client mode): 0xb6bb1570
2025-12-31T11:31:54.086 [DEBUG] [Thread-126874] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:31:54.102 [DEBUG] [Thread-126874] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T11:31:54.102 [INFO] [Thread-126874] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T11:31:54.109 [DEBUG] [Thread-126874] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:31:54.109 [DEBUG] [Thread-126874] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T11:31:54.110 [DEBUG] [Thread-126874] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:31:54.110 [DEBUG] [Thread-126874] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:31:54.110 [DEBUG] [Thread-126874] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:31:54.110 [DEBUG] [Thread-126874] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:31:54.110 [DEBUG] [Thread-126874] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:31:54.110 [DEBUG] [Thread-126874] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:31:54.110 [DEBUG] [Thread-126874] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:31:54.110 [DEBUG] [Thread-126874] [transport.py] [_log()] client lang: <none>
2025-12-31T11:31:54.110 [DEBUG] [Thread-126874] [transport.py] [_log()] server lang: <none>
2025-12-31T11:31:54.110 [DEBUG] [Thread-126874] [transport.py] [_log()] kex follows: False
2025-12-31T11:31:54.110 [DEBUG] [Thread-126874] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:31:54.110 [DEBUG] [Thread-126874] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:31:54.110 [DEBUG] [Thread-126874] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:31:54.110 [DEBUG] [Thread-126874] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:31:54.110 [DEBUG] [Thread-126874] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:31:54.110 [DEBUG] [Thread-126874] [transport.py] [_log()] Compression: none
2025-12-31T11:31:54.110 [DEBUG] [Thread-126874] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:31:54.167 [DEBUG] [Thread-126874] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:31:54.168 [DEBUG] [Thread-126874] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:31:54.168 [DEBUG] [Thread-126874] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T11:31:54.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T11:31:54.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:31:54.224 [DEBUG] [Thread-126874] [transport.py] [_log()] userauth is OK
2025-12-31T11:31:54.224 [DEBUG] [Thread-126874] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:31:54.224 [DEBUG] [Thread-126874] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:31:54.225 [DEBUG] [Thread-126874] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T11:31:54.225 [DEBUG] [Thread-126874] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:31:54.243 [INFO] [Thread-126874] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:31:54.244 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T11:31:54.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:31:55.083 [DEBUG] [Thread-126874] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:31:55.083 [DEBUG] [Thread-126874] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:31:55.130 [DEBUG] [Thread-126874] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:31:55.130 [DEBUG] [Thread-126874] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:31:55.139 [DEBUG] [Thread-126874] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:31:55.148 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:31:55.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T11:31:55.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T11:31:55.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:31:55.166 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:31:55.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:31:55.174 [DEBUG] [Thread-126874] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:32:02.263 [DEBUG] [Thread-126876 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:32:09.610 [DEBUG] [Thread-126877 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:32:17.305 [DEBUG] [Thread-126878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:32:25.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T11:32:25.187 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T11:32:25.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T11:32:25.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 11, 31, 55), 36.49, 8.21, 0.0, 30.22, 26.31, 0, 0, 0, 2, 0, 0),)
2025-12-31T11:32:25.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 11:31:55
2025-12-31T11:32:26.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T11:32:26.178 [DEBUG] [Thread-126879] [transport.py] [_log()] starting thread (client mode): 0xbbfce470
2025-12-31T11:32:26.178 [DEBUG] [Thread-126879] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:32:26.202 [DEBUG] [Thread-126879] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T11:32:26.202 [INFO] [Thread-126879] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T11:32:26.205 [DEBUG] [Thread-126879] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:32:26.206 [DEBUG] [Thread-126879] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T11:32:26.206 [DEBUG] [Thread-126879] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:32:26.206 [DEBUG] [Thread-126879] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:32:26.206 [DEBUG] [Thread-126879] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:32:26.206 [DEBUG] [Thread-126879] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:32:26.206 [DEBUG] [Thread-126879] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:32:26.206 [DEBUG] [Thread-126879] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:32:26.206 [DEBUG] [Thread-126879] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:32:26.206 [DEBUG] [Thread-126879] [transport.py] [_log()] client lang: <none>
2025-12-31T11:32:26.206 [DEBUG] [Thread-126879] [transport.py] [_log()] server lang: <none>
2025-12-31T11:32:26.206 [DEBUG] [Thread-126879] [transport.py] [_log()] kex follows: False
2025-12-31T11:32:26.206 [DEBUG] [Thread-126879] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:32:26.206 [DEBUG] [Thread-126879] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:32:26.206 [DEBUG] [Thread-126879] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:32:26.206 [DEBUG] [Thread-126879] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:32:26.206 [DEBUG] [Thread-126879] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:32:26.206 [DEBUG] [Thread-126879] [transport.py] [_log()] Compression: none
2025-12-31T11:32:26.206 [DEBUG] [Thread-126879] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:32:26.223 [DEBUG] [Thread-126879] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:32:26.224 [DEBUG] [Thread-126879] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:32:26.224 [DEBUG] [Thread-126879] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T11:32:26.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T11:32:26.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:32:26.226 [DEBUG] [Thread-126879] [transport.py] [_log()] userauth is OK
2025-12-31T11:32:26.226 [DEBUG] [Thread-126879] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:32:26.227 [DEBUG] [Thread-126879] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:32:26.227 [DEBUG] [Thread-126879] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T11:32:26.227 [DEBUG] [Thread-126879] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:32:26.245 [INFO] [Thread-126879] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:32:26.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:32:26.983 [DEBUG] [Thread-126879] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:32:26.984 [DEBUG] [Thread-126879] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:32:26.984 [DEBUG] [Thread-126879] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T11:32:27.025 [DEBUG] [Thread-126879] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:32:27.025 [DEBUG] [Thread-126879] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:32:27.028 [DEBUG] [Thread-126879] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:32:27.042 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:32:27.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T11:32:27.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T11:32:27.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T11:32:27.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:32:27.055 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T11:32:27.055 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:32:27.055 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:32:27.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T11:32:27.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.397018 -999.00  +25.70  26.33     14   -3.70 1 1 1 1 1   888    0 30.81 43.98 ----- 26.9 26.3 294.2 33.1 32.4 -25.6 31.6 -25.5 30.4 -23.4 31.2 -23.5
2025-12-31T11:32:27.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T11:32:27.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T11:32:27.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.397018
2025-12-31T11:32:27.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T11:32:27.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T11:32:27.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T11:32:27.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T11:32:27.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T11:32:27.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T11:31:55', tmtdew=36.49, humidity=8.21, cloud=0.0, wind=30.22, temperature=26.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T09:31:42.355', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T11:32:27.058 [DEBUG] [Thread-126879] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:32:27.141 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T11:32:27.152 [DEBUG] [Thread-126882] [transport.py] [_log()] starting thread (client mode): 0xbbfcfd60
2025-12-31T11:32:27.152 [DEBUG] [Thread-126882] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:32:27.166 [DEBUG] [Thread-126882] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T11:32:27.167 [INFO] [Thread-126882] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T11:32:27.174 [DEBUG] [Thread-126882] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:32:27.174 [DEBUG] [Thread-126882] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T11:32:27.174 [DEBUG] [Thread-126882] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:32:27.174 [DEBUG] [Thread-126882] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:32:27.174 [DEBUG] [Thread-126882] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:32:27.174 [DEBUG] [Thread-126882] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:32:27.174 [DEBUG] [Thread-126882] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:32:27.174 [DEBUG] [Thread-126882] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:32:27.174 [DEBUG] [Thread-126882] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:32:27.174 [DEBUG] [Thread-126882] [transport.py] [_log()] client lang: <none>
2025-12-31T11:32:27.174 [DEBUG] [Thread-126882] [transport.py] [_log()] server lang: <none>
2025-12-31T11:32:27.174 [DEBUG] [Thread-126882] [transport.py] [_log()] kex follows: False
2025-12-31T11:32:27.174 [DEBUG] [Thread-126882] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:32:27.174 [DEBUG] [Thread-126882] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:32:27.175 [DEBUG] [Thread-126882] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:32:27.175 [DEBUG] [Thread-126882] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:32:27.175 [DEBUG] [Thread-126882] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:32:27.175 [DEBUG] [Thread-126882] [transport.py] [_log()] Compression: none
2025-12-31T11:32:27.175 [DEBUG] [Thread-126882] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:32:27.231 [DEBUG] [Thread-126882] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:32:27.232 [DEBUG] [Thread-126882] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:32:27.233 [DEBUG] [Thread-126882] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T11:32:27.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T11:32:27.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:32:27.288 [DEBUG] [Thread-126882] [transport.py] [_log()] userauth is OK
2025-12-31T11:32:27.288 [DEBUG] [Thread-126882] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:32:27.288 [DEBUG] [Thread-126882] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:32:27.288 [DEBUG] [Thread-126882] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T11:32:27.289 [DEBUG] [Thread-126882] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:32:27.308 [INFO] [Thread-126882] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:32: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-12-31T11:32:27.308 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:32:28.187 [DEBUG] [Thread-126882] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:32:28.187 [DEBUG] [Thread-126882] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:32:28.236 [DEBUG] [Thread-126882] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:32:28.236 [DEBUG] [Thread-126882] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:32:28.244 [DEBUG] [Thread-126882] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:32:28.252 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:32:28.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T11:32:28.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-12-31T11:32:28.267 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:32:28.268 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:32:28.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:32:28.275 [DEBUG] [Thread-126882] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:32:32.342 [DEBUG] [Thread-126884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:32:34.265 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:32:34.266 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:32:47.389 [DEBUG] [Thread-126885 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:32:58.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T11:32:58.268 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T11:32:58.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T11:32:58.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 11, 32, 28), 36.18, 8.37, 0.0, 26.41, 26.16, 0, 0, 0, 2, 0, 0),)
2025-12-31T11:32:58.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 11:32:28
2025-12-31T11:32:59.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T11:32:59.271 [DEBUG] [Thread-126886] [transport.py] [_log()] starting thread (client mode): 0xb6b22e90
2025-12-31T11:32:59.272 [DEBUG] [Thread-126886] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:32:59.293 [DEBUG] [Thread-126886] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T11:32:59.294 [INFO] [Thread-126886] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T11:32:59.295 [DEBUG] [Thread-126886] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:32:59.295 [DEBUG] [Thread-126886] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T11:32:59.295 [DEBUG] [Thread-126886] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:32:59.295 [DEBUG] [Thread-126886] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:32:59.295 [DEBUG] [Thread-126886] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:32:59.295 [DEBUG] [Thread-126886] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:32:59.295 [DEBUG] [Thread-126886] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:32:59.295 [DEBUG] [Thread-126886] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:32:59.295 [DEBUG] [Thread-126886] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:32:59.295 [DEBUG] [Thread-126886] [transport.py] [_log()] client lang: <none>
2025-12-31T11:32:59.295 [DEBUG] [Thread-126886] [transport.py] [_log()] server lang: <none>
2025-12-31T11:32:59.295 [DEBUG] [Thread-126886] [transport.py] [_log()] kex follows: False
2025-12-31T11:32:59.295 [DEBUG] [Thread-126886] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:32:59.295 [DEBUG] [Thread-126886] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:32:59.295 [DEBUG] [Thread-126886] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:32:59.295 [DEBUG] [Thread-126886] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:32:59.295 [DEBUG] [Thread-126886] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:32:59.295 [DEBUG] [Thread-126886] [transport.py] [_log()] Compression: none
2025-12-31T11:32:59.295 [DEBUG] [Thread-126886] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:32:59.314 [DEBUG] [Thread-126886] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:32:59.314 [DEBUG] [Thread-126886] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:32:59.315 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T11:32:59.315 [DEBUG] [Thread-126886] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T11:32:59.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:32:59.317 [DEBUG] [Thread-126886] [transport.py] [_log()] userauth is OK
2025-12-31T11:32:59.318 [DEBUG] [Thread-126886] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:32:59.318 [DEBUG] [Thread-126886] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:32:59.318 [DEBUG] [Thread-126886] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T11:32:59.318 [DEBUG] [Thread-126886] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:32:59.341 [INFO] [Thread-126886] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:32:59.342 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:32:59.977 [DEBUG] [Thread-126886] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:32:59.977 [DEBUG] [Thread-126886] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:32:59.978 [DEBUG] [Thread-126886] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T11:33:00.018 [DEBUG] [Thread-126886] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:33:00.018 [DEBUG] [Thread-126886] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:33:00.022 [DEBUG] [Thread-126886] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:33:00.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:33:00.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T11:33:00.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T11:33:00.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T11:33:00.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:33:00.049 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T11:33:00.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:33:00.050 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:33:00.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T11:33:00.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.397365 -999.00  +25.40  24.31     14   -3.70 1 1 1 1 1   888    0 30.89 39.18 ----- 25.1 24.3 288.1 31.5 32.3 -26.8 31.6 -25.8 30.3 -25.0 31.1 -24.7
2025-12-31T11:33:00.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T11:33:00.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T11:33:00.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.397365
2025-12-31T11:33:00.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T11:33:00.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T11:33:00.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T11:33:00.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T11:33:00.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T11:33:00.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T11:32:28', tmtdew=36.18, humidity=8.37, cloud=0.0, wind=26.41, temperature=26.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T09:32:12.336', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T11:33:00.053 [DEBUG] [Thread-126886] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:33:00.135 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T11:33:00.148 [DEBUG] [Thread-126889] [transport.py] [_log()] starting thread (client mode): 0xb6b221a0
2025-12-31T11:33:00.149 [DEBUG] [Thread-126889] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:33:00.164 [DEBUG] [Thread-126889] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T11:33:00.164 [INFO] [Thread-126889] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T11:33:00.172 [DEBUG] [Thread-126889] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:33:00.172 [DEBUG] [Thread-126889] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T11:33:00.172 [DEBUG] [Thread-126889] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:33:00.173 [DEBUG] [Thread-126889] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:33:00.173 [DEBUG] [Thread-126889] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:33:00.173 [DEBUG] [Thread-126889] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:33:00.173 [DEBUG] [Thread-126889] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:33:00.173 [DEBUG] [Thread-126889] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:33:00.173 [DEBUG] [Thread-126889] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:33:00.173 [DEBUG] [Thread-126889] [transport.py] [_log()] client lang: <none>
2025-12-31T11:33:00.173 [DEBUG] [Thread-126889] [transport.py] [_log()] server lang: <none>
2025-12-31T11:33:00.173 [DEBUG] [Thread-126889] [transport.py] [_log()] kex follows: False
2025-12-31T11:33:00.173 [DEBUG] [Thread-126889] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:33:00.174 [DEBUG] [Thread-126889] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:33:00.174 [DEBUG] [Thread-126889] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:33:00.174 [DEBUG] [Thread-126889] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:33:00.174 [DEBUG] [Thread-126889] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:33:00.174 [DEBUG] [Thread-126889] [transport.py] [_log()] Compression: none
2025-12-31T11:33:00.174 [DEBUG] [Thread-126889] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:33:00.232 [DEBUG] [Thread-126889] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:33:00.232 [DEBUG] [Thread-126889] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:33:00.232 [DEBUG] [Thread-126889] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T11:33:00.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T11:33:00.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:33:00.287 [DEBUG] [Thread-126889] [transport.py] [_log()] userauth is OK
2025-12-31T11:33:00.287 [DEBUG] [Thread-126889] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:33:00.287 [DEBUG] [Thread-126889] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:33:00.287 [DEBUG] [Thread-126889] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T11:33:00.287 [DEBUG] [Thread-126889] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:33:00.301 [INFO] [Thread-126889] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:33:00.301 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T11:33:00.301 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:33:01.133 [DEBUG] [Thread-126889] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:33:01.133 [DEBUG] [Thread-126889] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:33:01.181 [DEBUG] [Thread-126889] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:33:01.181 [DEBUG] [Thread-126889] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:33:01.189 [DEBUG] [Thread-126889] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:33:01.197 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:33:01.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T11:33:01.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T11:33:01.212 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:33:01.213 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:33:01.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:33:01.220 [DEBUG] [Thread-126889] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:33:02.427 [DEBUG] [Thread-126891 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:33:09.666 [DEBUG] [Thread-126892 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:33:17.474 [DEBUG] [Thread-126893 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:33:31.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T11:33:31.218 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T11:33:31.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T11:33:31.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 11, 32, 28), 36.18, 8.37, 0.0, 26.41, 26.16, 0, 0, 0, 2, 0, 0),)
2025-12-31T11:33:31.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 11:32:28
2025-12-31T11:33:32.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T11:33:32.203 [DEBUG] [Thread-126894] [transport.py] [_log()] starting thread (client mode): 0xb6bb1bd0
2025-12-31T11:33:32.203 [DEBUG] [Thread-126894] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:33:32.224 [DEBUG] [Thread-126894] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T11:33:32.224 [INFO] [Thread-126894] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T11:33:32.227 [DEBUG] [Thread-126894] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:33:32.227 [DEBUG] [Thread-126894] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T11:33:32.227 [DEBUG] [Thread-126894] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:33:32.227 [DEBUG] [Thread-126894] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:33:32.227 [DEBUG] [Thread-126894] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:33:32.227 [DEBUG] [Thread-126894] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:33:32.227 [DEBUG] [Thread-126894] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:33:32.227 [DEBUG] [Thread-126894] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:33:32.227 [DEBUG] [Thread-126894] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:33:32.227 [DEBUG] [Thread-126894] [transport.py] [_log()] client lang: <none>
2025-12-31T11:33:32.227 [DEBUG] [Thread-126894] [transport.py] [_log()] server lang: <none>
2025-12-31T11:33:32.227 [DEBUG] [Thread-126894] [transport.py] [_log()] kex follows: False
2025-12-31T11:33:32.227 [DEBUG] [Thread-126894] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:33:32.227 [DEBUG] [Thread-126894] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:33:32.227 [DEBUG] [Thread-126894] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:33:32.227 [DEBUG] [Thread-126894] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:33:32.227 [DEBUG] [Thread-126894] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:33:32.227 [DEBUG] [Thread-126894] [transport.py] [_log()] Compression: none
2025-12-31T11:33:32.227 [DEBUG] [Thread-126894] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:33:32.248 [DEBUG] [Thread-126894] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:33:32.248 [DEBUG] [Thread-126894] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:33:32.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T11:33:32.249 [DEBUG] [Thread-126894] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T11:33:32.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:33:32.293 [DEBUG] [Thread-126894] [transport.py] [_log()] userauth is OK
2025-12-31T11:33:32.293 [DEBUG] [Thread-126894] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:33:32.293 [DEBUG] [Thread-126894] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:33:32.293 [DEBUG] [Thread-126894] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T11:33:32.293 [DEBUG] [Thread-126894] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:33:32.324 [INFO] [Thread-126894] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:33:32.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:33:32.505 [DEBUG] [Thread-126896 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:33:33.082 [DEBUG] [Thread-126894] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:33:33.082 [DEBUG] [Thread-126894] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:33:33.082 [DEBUG] [Thread-126894] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T11:33:33.122 [DEBUG] [Thread-126894] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:33:33.122 [DEBUG] [Thread-126894] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:33:33.124 [DEBUG] [Thread-126894] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:33:33.140 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:33:33.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T11:33:33.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T11:33:33.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T11:33:33.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:33:33.145 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T11:33:33.145 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:33:33.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:33:33.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T11:33:33.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.398060 -999.00  +25.30  11.87     14   -3.70 1 1 1 1 1   888    0 30.57 26.36 ----- 16.4 11.9 274.8 15.2 32.5 -25.9 31.8 -24.8 30.5 -23.0 31.2 -23.4
2025-12-31T11:33:33.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T11:33:33.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T11:33:33.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.398060
2025-12-31T11:33:33.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T11:33:33.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T11:33:33.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T11:33:33.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T11:33:33.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T11:33:33.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T11:32:28', tmtdew=36.18, humidity=8.37, cloud=0.0, wind=26.41, temperature=26.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T09:33:12.384', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T11:33:33.147 [DEBUG] [Thread-126894] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:33:33.221 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T11:33:33.232 [DEBUG] [Thread-126898] [transport.py] [_log()] starting thread (client mode): 0xb6bb0820
2025-12-31T11:33:33.232 [DEBUG] [Thread-126898] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:33:33.247 [DEBUG] [Thread-126898] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T11:33:33.247 [INFO] [Thread-126898] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T11:33:33.254 [DEBUG] [Thread-126898] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:33:33.254 [DEBUG] [Thread-126898] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T11:33:33.254 [DEBUG] [Thread-126898] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:33:33.254 [DEBUG] [Thread-126898] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:33:33.254 [DEBUG] [Thread-126898] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:33:33.254 [DEBUG] [Thread-126898] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:33:33.254 [DEBUG] [Thread-126898] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:33:33.254 [DEBUG] [Thread-126898] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:33:33.254 [DEBUG] [Thread-126898] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:33:33.254 [DEBUG] [Thread-126898] [transport.py] [_log()] client lang: <none>
2025-12-31T11:33:33.254 [DEBUG] [Thread-126898] [transport.py] [_log()] server lang: <none>
2025-12-31T11:33:33.254 [DEBUG] [Thread-126898] [transport.py] [_log()] kex follows: False
2025-12-31T11:33:33.254 [DEBUG] [Thread-126898] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:33:33.254 [DEBUG] [Thread-126898] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:33:33.254 [DEBUG] [Thread-126898] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:33:33.254 [DEBUG] [Thread-126898] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:33:33.255 [DEBUG] [Thread-126898] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:33:33.255 [DEBUG] [Thread-126898] [transport.py] [_log()] Compression: none
2025-12-31T11:33:33.255 [DEBUG] [Thread-126898] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:33:33.310 [DEBUG] [Thread-126898] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:33:33.310 [DEBUG] [Thread-126898] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:33:33.310 [DEBUG] [Thread-126898] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T11:33:33.310 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T11:33:33.310 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:33:33.367 [DEBUG] [Thread-126898] [transport.py] [_log()] userauth is OK
2025-12-31T11:33:33.367 [DEBUG] [Thread-126898] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:33:33.367 [DEBUG] [Thread-126898] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:33:33.367 [DEBUG] [Thread-126898] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T11:33:33.367 [DEBUG] [Thread-126898] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:33:33.381 [INFO] [Thread-126898] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:33:33.381 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T11:33:33.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:33:34.219 [DEBUG] [Thread-126898] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:33:34.219 [DEBUG] [Thread-126898] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:33:34.267 [DEBUG] [Thread-126898] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:33:34.267 [DEBUG] [Thread-126898] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:33:34.275 [DEBUG] [Thread-126898] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:33:34.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:33:34.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T11:33:34.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T11:33:34.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:33:34.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:33:34.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:33:34.307 [DEBUG] [Thread-126898] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:33:34.408 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:33:34.409 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:33:47.538 [DEBUG] [Thread-126900 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:34:02.596 [DEBUG] [Thread-126901 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:34:04.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T11:34:04.330 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T11:34:04.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T11:34:05.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 11, 33, 32), 35.87, 8.41, 0.0, 12.3, 25.73, 0, 0, 0, 2, 0, 0),)
2025-12-31T11:34:05.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 11:33:32
2025-12-31T11:34:05.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T11:34:05.399 [DEBUG] [Thread-126902] [transport.py] [_log()] starting thread (client mode): 0xbbfcd7b0
2025-12-31T11:34:05.399 [DEBUG] [Thread-126902] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:34:05.419 [DEBUG] [Thread-126902] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T11:34:05.419 [INFO] [Thread-126902] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T11:34:05.422 [DEBUG] [Thread-126902] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:34:05.423 [DEBUG] [Thread-126902] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T11:34:05.423 [DEBUG] [Thread-126902] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:34:05.423 [DEBUG] [Thread-126902] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:34:05.423 [DEBUG] [Thread-126902] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:34:05.423 [DEBUG] [Thread-126902] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:34:05.423 [DEBUG] [Thread-126902] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:34:05.423 [DEBUG] [Thread-126902] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:34:05.423 [DEBUG] [Thread-126902] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:34:05.423 [DEBUG] [Thread-126902] [transport.py] [_log()] client lang: <none>
2025-12-31T11:34:05.423 [DEBUG] [Thread-126902] [transport.py] [_log()] server lang: <none>
2025-12-31T11:34:05.423 [DEBUG] [Thread-126902] [transport.py] [_log()] kex follows: False
2025-12-31T11:34:05.423 [DEBUG] [Thread-126902] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:34:05.423 [DEBUG] [Thread-126902] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:34:05.423 [DEBUG] [Thread-126902] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:34:05.423 [DEBUG] [Thread-126902] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:34:05.423 [DEBUG] [Thread-126902] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:34:05.423 [DEBUG] [Thread-126902] [transport.py] [_log()] Compression: none
2025-12-31T11:34:05.423 [DEBUG] [Thread-126902] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:34:05.440 [DEBUG] [Thread-126902] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:34:05.440 [DEBUG] [Thread-126902] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:34:05.440 [DEBUG] [Thread-126902] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T11:34:05.440 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T11:34:05.441 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:34:05.484 [DEBUG] [Thread-126902] [transport.py] [_log()] userauth is OK
2025-12-31T11:34:05.484 [DEBUG] [Thread-126902] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:34:05.484 [DEBUG] [Thread-126902] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:34:05.484 [DEBUG] [Thread-126902] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T11:34:05.484 [DEBUG] [Thread-126902] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:34:05.511 [INFO] [Thread-126902] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:34:05.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:34:06.135 [DEBUG] [Thread-126902] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:34:06.135 [DEBUG] [Thread-126902] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:34:06.136 [DEBUG] [Thread-126902] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T11:34:06.177 [DEBUG] [Thread-126902] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:34:06.177 [DEBUG] [Thread-126902] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:34:06.178 [DEBUG] [Thread-126902] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:34:06.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:34:06.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T11:34:06.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T11:34:06.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T11:34:06.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:34:06.195 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T11:34:06.195 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:34:06.195 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:34:06.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T11:34:06.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.398407 -999.00  +25.50  18.56     14   -3.90 1 1 1 1 1   888    0 30.21 19.79 ----- 17.6 18.6 283.2 22.9 32.2 -29.0 31.9 -25.3 30.2 -25.1 31.1 -25.3
2025-12-31T11:34:06.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T11:34:06.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T11:34:06.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.398407
2025-12-31T11:34:06.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T11:34:06.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T11:34:06.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T11:34:06.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T11:34:06.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T11:34:06.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T11:33:32', tmtdew=35.87, humidity=8.41, cloud=0.0, wind=12.3, temperature=25.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T09:33:42.365', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T11:34:06.195 [DEBUG] [Thread-126902] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:34:06.268 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T11:34:06.280 [DEBUG] [Thread-126905] [transport.py] [_log()] starting thread (client mode): 0xb6bb1bd0
2025-12-31T11:34:06.280 [DEBUG] [Thread-126905] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:34:06.295 [DEBUG] [Thread-126905] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T11:34:06.295 [INFO] [Thread-126905] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T11:34:06.302 [DEBUG] [Thread-126905] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:34:06.302 [DEBUG] [Thread-126905] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T11:34:06.302 [DEBUG] [Thread-126905] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:34:06.302 [DEBUG] [Thread-126905] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:34:06.302 [DEBUG] [Thread-126905] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:34:06.302 [DEBUG] [Thread-126905] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:34:06.302 [DEBUG] [Thread-126905] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:34:06.302 [DEBUG] [Thread-126905] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:34:06.302 [DEBUG] [Thread-126905] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:34:06.302 [DEBUG] [Thread-126905] [transport.py] [_log()] client lang: <none>
2025-12-31T11:34:06.302 [DEBUG] [Thread-126905] [transport.py] [_log()] server lang: <none>
2025-12-31T11:34:06.302 [DEBUG] [Thread-126905] [transport.py] [_log()] kex follows: False
2025-12-31T11:34:06.302 [DEBUG] [Thread-126905] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:34:06.302 [DEBUG] [Thread-126905] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:34:06.302 [DEBUG] [Thread-126905] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:34:06.302 [DEBUG] [Thread-126905] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:34:06.302 [DEBUG] [Thread-126905] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:34:06.302 [DEBUG] [Thread-126905] [transport.py] [_log()] Compression: none
2025-12-31T11:34:06.302 [DEBUG] [Thread-126905] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:34:06.362 [DEBUG] [Thread-126905] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:34:06.363 [DEBUG] [Thread-126905] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:34:06.363 [DEBUG] [Thread-126905] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T11:34:06.363 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T11:34:06.363 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:34:06.423 [DEBUG] [Thread-126905] [transport.py] [_log()] userauth is OK
2025-12-31T11:34:06.423 [DEBUG] [Thread-126905] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:34:06.423 [DEBUG] [Thread-126905] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:34:06.423 [DEBUG] [Thread-126905] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T11:34:06.423 [DEBUG] [Thread-126905] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:34:06.442 [INFO] [Thread-126905] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:34:06.443 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T11:34:06.443 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:34:07.310 [DEBUG] [Thread-126905] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:34:07.310 [DEBUG] [Thread-126905] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:34:07.358 [DEBUG] [Thread-126905] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:34:07.358 [DEBUG] [Thread-126905] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:34:07.367 [DEBUG] [Thread-126905] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:34:07.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:34:07.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T11:34:07.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T11:34:07.395 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:34:07.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:34:07.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:34:07.404 [DEBUG] [Thread-126905] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:34:09.718 [DEBUG] [Thread-126907 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:34:17.634 [DEBUG] [Thread-126908 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:34:32.688 [DEBUG] [Thread-126909 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:34:34.567 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:34:34.568 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:34:37.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T11:34:37.426 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T11:34:37.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T11:34:38.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 11, 34, 4), 35.77, 8.47, 0.0, 12.92, 25.73, 0, 0, 0, 2, 0, 0),)
2025-12-31T11:34:38.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 11:34:04
2025-12-31T11:34:38.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T11:34:38.504 [DEBUG] [Thread-126910] [transport.py] [_log()] starting thread (client mode): 0xbbfce110
2025-12-31T11:34:38.504 [DEBUG] [Thread-126910] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:34:38.516 [DEBUG] [Thread-126910] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T11:34:38.516 [INFO] [Thread-126910] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T11:34:38.517 [DEBUG] [Thread-126910] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:34:38.517 [DEBUG] [Thread-126910] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T11:34:38.517 [DEBUG] [Thread-126910] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:34:38.517 [DEBUG] [Thread-126910] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:34:38.517 [DEBUG] [Thread-126910] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:34:38.517 [DEBUG] [Thread-126910] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:34:38.517 [DEBUG] [Thread-126910] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:34:38.517 [DEBUG] [Thread-126910] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:34:38.517 [DEBUG] [Thread-126910] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:34:38.517 [DEBUG] [Thread-126910] [transport.py] [_log()] client lang: <none>
2025-12-31T11:34:38.517 [DEBUG] [Thread-126910] [transport.py] [_log()] server lang: <none>
2025-12-31T11:34:38.518 [DEBUG] [Thread-126910] [transport.py] [_log()] kex follows: False
2025-12-31T11:34:38.518 [DEBUG] [Thread-126910] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:34:38.518 [DEBUG] [Thread-126910] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:34:38.518 [DEBUG] [Thread-126910] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:34:38.518 [DEBUG] [Thread-126910] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:34:38.518 [DEBUG] [Thread-126910] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:34:38.518 [DEBUG] [Thread-126910] [transport.py] [_log()] Compression: none
2025-12-31T11:34:38.518 [DEBUG] [Thread-126910] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:34:38.526 [DEBUG] [Thread-126910] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:34:38.526 [DEBUG] [Thread-126910] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:34:38.526 [DEBUG] [Thread-126910] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T11:34:38.526 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T11:34:38.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:34:38.527 [DEBUG] [Thread-126910] [transport.py] [_log()] userauth is OK
2025-12-31T11:34:38.527 [DEBUG] [Thread-126910] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:34:38.527 [DEBUG] [Thread-126910] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:34:38.528 [DEBUG] [Thread-126910] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T11:34:38.528 [DEBUG] [Thread-126910] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:34:38.537 [INFO] [Thread-126910] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:34:38.537 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:34:39.185 [DEBUG] [Thread-126910] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:34:39.185 [DEBUG] [Thread-126910] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:34:39.185 [DEBUG] [Thread-126910] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T11:34:39.226 [DEBUG] [Thread-126910] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:34:39.226 [DEBUG] [Thread-126910] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:34:39.229 [DEBUG] [Thread-126910] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:34:39.241 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:34:39.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T11:34:39.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T11:34:39.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T11:34:39.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:34:39.251 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T11:34:39.252 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:34:39.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:34:39.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T11:34:39.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.398754 -999.00  +25.10  17.24     14   -4.10 1 1 1 1 1   888    0 30.50 13.81 ----- 15.7 17.2 270.6 24.8 32.3 -26.3 31.7 -26.8 30.2 -25.1 31.1 -23.3
2025-12-31T11:34:39.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T11:34:39.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T11:34:39.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.398754
2025-12-31T11:34:39.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T11:34:39.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T11:34:39.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T11:34:39.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T11:34:39.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T11:34:39.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T11:34:04', tmtdew=35.77, humidity=8.47, cloud=0.0, wind=12.92, temperature=25.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T09:34:12.346', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T11:34:39.254 [DEBUG] [Thread-126910] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:34: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-12-31T11:34:39.349 [DEBUG] [Thread-126913] [transport.py] [_log()] starting thread (client mode): 0xbbfcdb10
2025-12-31T11:34:39.349 [DEBUG] [Thread-126913] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:34:39.364 [DEBUG] [Thread-126913] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T11:34:39.364 [INFO] [Thread-126913] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T11:34:39.372 [DEBUG] [Thread-126913] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:34:39.372 [DEBUG] [Thread-126913] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T11:34:39.372 [DEBUG] [Thread-126913] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:34:39.372 [DEBUG] [Thread-126913] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:34:39.372 [DEBUG] [Thread-126913] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:34:39.373 [DEBUG] [Thread-126913] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:34:39.373 [DEBUG] [Thread-126913] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:34:39.373 [DEBUG] [Thread-126913] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:34:39.373 [DEBUG] [Thread-126913] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:34:39.373 [DEBUG] [Thread-126913] [transport.py] [_log()] client lang: <none>
2025-12-31T11:34:39.373 [DEBUG] [Thread-126913] [transport.py] [_log()] server lang: <none>
2025-12-31T11:34:39.373 [DEBUG] [Thread-126913] [transport.py] [_log()] kex follows: False
2025-12-31T11:34:39.373 [DEBUG] [Thread-126913] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:34:39.373 [DEBUG] [Thread-126913] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:34:39.374 [DEBUG] [Thread-126913] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:34:39.374 [DEBUG] [Thread-126913] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:34:39.374 [DEBUG] [Thread-126913] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:34:39.374 [DEBUG] [Thread-126913] [transport.py] [_log()] Compression: none
2025-12-31T11:34:39.374 [DEBUG] [Thread-126913] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:34:39.432 [DEBUG] [Thread-126913] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:34:39.432 [DEBUG] [Thread-126913] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:34:39.433 [DEBUG] [Thread-126913] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T11:34:39.434 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T11:34:39.435 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:34:39.488 [DEBUG] [Thread-126913] [transport.py] [_log()] userauth is OK
2025-12-31T11:34:39.488 [DEBUG] [Thread-126913] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:34:39.488 [DEBUG] [Thread-126913] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:34:39.488 [DEBUG] [Thread-126913] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T11:34:39.488 [DEBUG] [Thread-126913] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:34:39.506 [INFO] [Thread-126913] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:34:39.506 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T11:34:39.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:34:40.325 [DEBUG] [Thread-126913] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:34:40.326 [DEBUG] [Thread-126913] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:34:40.374 [DEBUG] [Thread-126913] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:34:40.374 [DEBUG] [Thread-126913] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:34:40.383 [DEBUG] [Thread-126913] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:34:40.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:34:40.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T11:34:40.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T11:34:40.410 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:34:40.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:34:40.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:34:40.419 [DEBUG] [Thread-126913] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:34:47.720 [DEBUG] [Thread-126915 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:35:02.769 [DEBUG] [Thread-126916 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:35:09.773 [DEBUG] [Thread-126917 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:35:10.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T11:35:10.435 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T11:35:10.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T11:35:11.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 11, 34, 36), 35.78, 8.6, 0.0, 20.45, 25.8, 0, 0, 0, 2, 0, 0),)
2025-12-31T11:35:11.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 11:34:36
2025-12-31T11:35:11.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T11:35:11.425 [DEBUG] [Thread-126918] [transport.py] [_log()] starting thread (client mode): 0xb6bb3eb0
2025-12-31T11:35:11.425 [DEBUG] [Thread-126918] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:35:11.447 [DEBUG] [Thread-126918] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T11:35:11.447 [INFO] [Thread-126918] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T11:35:11.451 [DEBUG] [Thread-126918] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:35:11.451 [DEBUG] [Thread-126918] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T11:35:11.451 [DEBUG] [Thread-126918] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:35:11.451 [DEBUG] [Thread-126918] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:35:11.451 [DEBUG] [Thread-126918] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:35:11.451 [DEBUG] [Thread-126918] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:35:11.451 [DEBUG] [Thread-126918] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:35:11.451 [DEBUG] [Thread-126918] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:35:11.451 [DEBUG] [Thread-126918] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:35:11.451 [DEBUG] [Thread-126918] [transport.py] [_log()] client lang: <none>
2025-12-31T11:35:11.451 [DEBUG] [Thread-126918] [transport.py] [_log()] server lang: <none>
2025-12-31T11:35:11.451 [DEBUG] [Thread-126918] [transport.py] [_log()] kex follows: False
2025-12-31T11:35:11.451 [DEBUG] [Thread-126918] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:35:11.451 [DEBUG] [Thread-126918] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:35:11.451 [DEBUG] [Thread-126918] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:35:11.452 [DEBUG] [Thread-126918] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:35:11.452 [DEBUG] [Thread-126918] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:35:11.452 [DEBUG] [Thread-126918] [transport.py] [_log()] Compression: none
2025-12-31T11:35:11.452 [DEBUG] [Thread-126918] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:35:11.471 [DEBUG] [Thread-126918] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:35:11.472 [DEBUG] [Thread-126918] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:35:11.472 [DEBUG] [Thread-126918] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T11:35:11.473 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T11:35:11.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:35:11.475 [DEBUG] [Thread-126918] [transport.py] [_log()] userauth is OK
2025-12-31T11:35:11.475 [DEBUG] [Thread-126918] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:35:11.475 [DEBUG] [Thread-126918] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:35:11.475 [DEBUG] [Thread-126918] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T11:35:11.475 [DEBUG] [Thread-126918] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:35:11.498 [INFO] [Thread-126918] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:35:11.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:35:14.913 [DEBUG] [Thread-126918] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:35:14.914 [DEBUG] [Thread-126918] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:35:14.914 [DEBUG] [Thread-126918] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T11:35:14.954 [DEBUG] [Thread-126918] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:35:14.954 [DEBUG] [Thread-126918] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:35:14.957 [DEBUG] [Thread-126918] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:35:15.012 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:35:15.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T11:35:15.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T11:35:15.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T11:35:15.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:35:15.018 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T11:35:15.018 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:35:15.018 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:35:15.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T11:35:15.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.399102 -999.00  +25.30  16.78     14   -3.70 1 1 1 1 1   888    0 30.03 8.24 ----- 19.4 16.8 284.0 22.3 32.3 -26.0 31.6 -25.3 30.1 -25.5 31.1 -23.3
2025-12-31T11:35:15.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T11:35:15.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T11:35:15.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.399102
2025-12-31T11:35:15.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T11:35:15.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T11:35:15.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T11:35:15.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T11:35:15.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T11:35:15.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T11:34:36', tmtdew=35.78, humidity=8.6, cloud=0.0, wind=20.45, temperature=25.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T09:34:42.413', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T11:35:15.019 [DEBUG] [Thread-126918] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:35:15.094 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T11:35:15.105 [DEBUG] [Thread-126921] [transport.py] [_log()] starting thread (client mode): 0xb6b23070
2025-12-31T11:35:15.106 [DEBUG] [Thread-126921] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:35:15.121 [DEBUG] [Thread-126921] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T11:35:15.121 [INFO] [Thread-126921] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T11:35:15.128 [DEBUG] [Thread-126921] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:35:15.128 [DEBUG] [Thread-126921] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T11:35:15.128 [DEBUG] [Thread-126921] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:35:15.128 [DEBUG] [Thread-126921] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:35:15.128 [DEBUG] [Thread-126921] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:35:15.128 [DEBUG] [Thread-126921] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:35:15.128 [DEBUG] [Thread-126921] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:35:15.128 [DEBUG] [Thread-126921] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:35:15.128 [DEBUG] [Thread-126921] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:35:15.128 [DEBUG] [Thread-126921] [transport.py] [_log()] client lang: <none>
2025-12-31T11:35:15.128 [DEBUG] [Thread-126921] [transport.py] [_log()] server lang: <none>
2025-12-31T11:35:15.128 [DEBUG] [Thread-126921] [transport.py] [_log()] kex follows: False
2025-12-31T11:35:15.128 [DEBUG] [Thread-126921] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:35:15.129 [DEBUG] [Thread-126921] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:35:15.129 [DEBUG] [Thread-126921] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:35:15.129 [DEBUG] [Thread-126921] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:35:15.129 [DEBUG] [Thread-126921] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:35:15.129 [DEBUG] [Thread-126921] [transport.py] [_log()] Compression: none
2025-12-31T11:35:15.129 [DEBUG] [Thread-126921] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:35:15.185 [DEBUG] [Thread-126921] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:35:15.186 [DEBUG] [Thread-126921] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:35:15.186 [DEBUG] [Thread-126921] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T11:35:15.186 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T11:35:15.186 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:35:15.243 [DEBUG] [Thread-126921] [transport.py] [_log()] userauth is OK
2025-12-31T11:35:15.243 [DEBUG] [Thread-126921] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:35:15.243 [DEBUG] [Thread-126921] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:35:15.243 [DEBUG] [Thread-126921] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T11:35:15.243 [DEBUG] [Thread-126921] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:35:15.259 [INFO] [Thread-126921] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:35:15.259 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T11:35:15.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:35:16.125 [DEBUG] [Thread-126921] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:35:16.125 [DEBUG] [Thread-126921] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:35:16.173 [DEBUG] [Thread-126921] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:35:16.173 [DEBUG] [Thread-126921] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:35:16.182 [DEBUG] [Thread-126921] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:35:16.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:35:16.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T11:35:16.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-12-31T11:35:16.206 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:35:16.206 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:35:16.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:35:16.214 [DEBUG] [Thread-126921] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:35:17.799 [DEBUG] [Thread-126923 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:35:32.848 [DEBUG] [Thread-126924 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:35:34.710 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:35:34.711 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:35:46.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T11:35:46.210 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T11:35:46.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-12-31T11:35:46.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 11, 35, 40), 35.38, 8.87, 0.0, 16.94, 25.66, 0, 0, 0, 2, 0, 0),)
2025-12-31T11:35:46.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 11:35:40
2025-12-31T11:35:47.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T11:35:47.224 [DEBUG] [Thread-126925] [transport.py] [_log()] starting thread (client mode): 0xb6b48fa0
2025-12-31T11:35:47.224 [DEBUG] [Thread-126925] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:35:47.243 [DEBUG] [Thread-126925] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T11:35:47.243 [INFO] [Thread-126925] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T11:35:47.247 [DEBUG] [Thread-126925] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:35:47.247 [DEBUG] [Thread-126925] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T11:35:47.247 [DEBUG] [Thread-126925] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:35:47.247 [DEBUG] [Thread-126925] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:35:47.247 [DEBUG] [Thread-126925] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:35:47.247 [DEBUG] [Thread-126925] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:35:47.247 [DEBUG] [Thread-126925] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:35:47.247 [DEBUG] [Thread-126925] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:35:47.247 [DEBUG] [Thread-126925] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:35:47.247 [DEBUG] [Thread-126925] [transport.py] [_log()] client lang: <none>
2025-12-31T11:35:47.247 [DEBUG] [Thread-126925] [transport.py] [_log()] server lang: <none>
2025-12-31T11:35:47.248 [DEBUG] [Thread-126925] [transport.py] [_log()] kex follows: False
2025-12-31T11:35:47.248 [DEBUG] [Thread-126925] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:35:47.248 [DEBUG] [Thread-126925] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:35:47.248 [DEBUG] [Thread-126925] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:35:47.248 [DEBUG] [Thread-126925] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:35:47.248 [DEBUG] [Thread-126925] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:35:47.248 [DEBUG] [Thread-126925] [transport.py] [_log()] Compression: none
2025-12-31T11:35:47.248 [DEBUG] [Thread-126925] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:35:47.266 [DEBUG] [Thread-126925] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:35:47.267 [DEBUG] [Thread-126925] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:35:47.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T11:35:47.268 [DEBUG] [Thread-126925] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T11:35:47.269 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:35:47.271 [DEBUG] [Thread-126925] [transport.py] [_log()] userauth is OK
2025-12-31T11:35:47.271 [DEBUG] [Thread-126925] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:35:47.271 [DEBUG] [Thread-126925] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:35:47.271 [DEBUG] [Thread-126925] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T11:35:47.272 [DEBUG] [Thread-126925] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:35:47.293 [INFO] [Thread-126925] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:35:47.294 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:35:47.884 [DEBUG] [Thread-126927 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:35:47.933 [DEBUG] [Thread-126925] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:35:47.933 [DEBUG] [Thread-126925] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:35:47.934 [DEBUG] [Thread-126925] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T11:35:47.974 [DEBUG] [Thread-126925] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:35:47.975 [DEBUG] [Thread-126925] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:35:47.979 [DEBUG] [Thread-126925] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:35:47.991 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:35:47.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T11:35:47.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T11:35:47.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T11:35:48.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:35:48.007 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T11:35:48.007 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:35:48.007 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:35:48.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T11:35:48.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.399449 -999.00  +25.00  22.92     14   -4.10 1 1 1 1 1   888    0 30.06 2.38 ----- 22.3 22.9 294.6 27.4 32.3 -28.1 31.7 -25.4 30.2 -23.5 31.1 -24.8
2025-12-31T11:35:48.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T11:35:48.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T11:35:48.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.399449
2025-12-31T11:35:48.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T11:35:48.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T11:35:48.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T11:35:48.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T11:35:48.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T11:35:48.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T11:35:40', tmtdew=35.38, humidity=8.87, cloud=0.0, wind=16.94, temperature=25.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T09:35:12.394', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T11:35:48.009 [DEBUG] [Thread-126925] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:35:48.096 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T11:35:48.106 [DEBUG] [Thread-126929] [transport.py] [_log()] starting thread (client mode): 0xb6b4a110
2025-12-31T11:35:48.106 [DEBUG] [Thread-126929] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:35:48.120 [DEBUG] [Thread-126929] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T11:35:48.120 [INFO] [Thread-126929] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T11:35:48.127 [DEBUG] [Thread-126929] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:35:48.128 [DEBUG] [Thread-126929] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T11:35:48.128 [DEBUG] [Thread-126929] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:35:48.128 [DEBUG] [Thread-126929] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:35:48.128 [DEBUG] [Thread-126929] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:35:48.128 [DEBUG] [Thread-126929] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:35:48.128 [DEBUG] [Thread-126929] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:35:48.128 [DEBUG] [Thread-126929] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:35:48.128 [DEBUG] [Thread-126929] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:35:48.128 [DEBUG] [Thread-126929] [transport.py] [_log()] client lang: <none>
2025-12-31T11:35:48.128 [DEBUG] [Thread-126929] [transport.py] [_log()] server lang: <none>
2025-12-31T11:35:48.129 [DEBUG] [Thread-126929] [transport.py] [_log()] kex follows: False
2025-12-31T11:35:48.129 [DEBUG] [Thread-126929] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:35:48.129 [DEBUG] [Thread-126929] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:35:48.129 [DEBUG] [Thread-126929] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:35:48.129 [DEBUG] [Thread-126929] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:35:48.129 [DEBUG] [Thread-126929] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:35:48.129 [DEBUG] [Thread-126929] [transport.py] [_log()] Compression: none
2025-12-31T11:35:48.129 [DEBUG] [Thread-126929] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:35:48.187 [DEBUG] [Thread-126929] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:35:48.187 [DEBUG] [Thread-126929] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:35:48.188 [DEBUG] [Thread-126929] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T11:35:48.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T11:35:48.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:35:48.247 [DEBUG] [Thread-126929] [transport.py] [_log()] userauth is OK
2025-12-31T11:35:48.248 [DEBUG] [Thread-126929] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:35:48.248 [DEBUG] [Thread-126929] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:35:48.248 [DEBUG] [Thread-126929] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T11:35:48.248 [DEBUG] [Thread-126929] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:35:48.267 [INFO] [Thread-126929] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:35: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-12-31T11:35:48.268 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:35:49.148 [DEBUG] [Thread-126929] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:35:49.148 [DEBUG] [Thread-126929] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:35:49.196 [DEBUG] [Thread-126929] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:35:49.196 [DEBUG] [Thread-126929] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:35:49.205 [DEBUG] [Thread-126929] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:35:49.214 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:35:49.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-12-31T11:35:49.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T11:35:49.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:35:49.234 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:35:49.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:35:49.242 [DEBUG] [Thread-126929] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:36:02.919 [DEBUG] [Thread-126931 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:36:09.830 [DEBUG] [Thread-126932 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:36:17.972 [DEBUG] [Thread-126933 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:36:19.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T11:36:19.258 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T11:36:19.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T11:36:19.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 11, 36, 12), 35.55, 8.75, 0.0, 14.35, 25.63, 0, 0, 0, 2, 0, 0),)
2025-12-31T11:36:19.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 11:36:12
2025-12-31T11:36:20.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T11:36:20.239 [DEBUG] [Thread-126934] [transport.py] [_log()] starting thread (client mode): 0xb6b20df0
2025-12-31T11:36:20.239 [DEBUG] [Thread-126934] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:36:20.257 [DEBUG] [Thread-126934] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T11:36:20.257 [INFO] [Thread-126934] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T11:36:20.260 [DEBUG] [Thread-126934] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:36:20.260 [DEBUG] [Thread-126934] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T11:36:20.260 [DEBUG] [Thread-126934] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:36:20.260 [DEBUG] [Thread-126934] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:36:20.260 [DEBUG] [Thread-126934] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:36:20.260 [DEBUG] [Thread-126934] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:36:20.260 [DEBUG] [Thread-126934] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:36:20.260 [DEBUG] [Thread-126934] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:36:20.260 [DEBUG] [Thread-126934] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:36:20.260 [DEBUG] [Thread-126934] [transport.py] [_log()] client lang: <none>
2025-12-31T11:36:20.260 [DEBUG] [Thread-126934] [transport.py] [_log()] server lang: <none>
2025-12-31T11:36:20.260 [DEBUG] [Thread-126934] [transport.py] [_log()] kex follows: False
2025-12-31T11:36:20.261 [DEBUG] [Thread-126934] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:36:20.261 [DEBUG] [Thread-126934] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:36:20.261 [DEBUG] [Thread-126934] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:36:20.261 [DEBUG] [Thread-126934] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:36:20.261 [DEBUG] [Thread-126934] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:36:20.261 [DEBUG] [Thread-126934] [transport.py] [_log()] Compression: none
2025-12-31T11:36:20.261 [DEBUG] [Thread-126934] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:36:20.280 [DEBUG] [Thread-126934] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:36:20.280 [DEBUG] [Thread-126934] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:36:20.281 [DEBUG] [Thread-126934] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T11:36:20.281 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T11:36:20.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:36:20.283 [DEBUG] [Thread-126934] [transport.py] [_log()] userauth is OK
2025-12-31T11:36:20.283 [DEBUG] [Thread-126934] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:36:20.283 [DEBUG] [Thread-126934] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:36:20.283 [DEBUG] [Thread-126934] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T11:36:20.283 [DEBUG] [Thread-126934] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:36:20.300 [INFO] [Thread-126934] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:36:20.301 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:36:21.131 [DEBUG] [Thread-126934] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:36:21.132 [DEBUG] [Thread-126934] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:36:21.132 [DEBUG] [Thread-126934] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T11:36:21.173 [DEBUG] [Thread-126934] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:36:21.173 [DEBUG] [Thread-126934] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:36:21.177 [DEBUG] [Thread-126934] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:36:21.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:36:21.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T11:36:21.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T11:36:21.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T11:36:21.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:36:21.199 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T11:36:21.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:36:21.199 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:36:21.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T11:36:21.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.399796 -999.00  +24.70  20.07     14   -4.20 1 1 1 1 1   888    0 29.94 -2.79 ----- 20.6 20.1 278.8 24.2 32.3 -28.1 31.6 -26.4 30.4 -24.6 31.1 -24.8
2025-12-31T11:36:21.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T11:36:21.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T11:36:21.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.399796
2025-12-31T11:36:21.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T11:36:21.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T11:36:21.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T11:36:21.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T11:36:21.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T11:36:21.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T11:36:12', tmtdew=35.55, humidity=8.75, cloud=0.0, wind=14.35, temperature=25.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T09:35:42.374', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T11:36:21.202 [DEBUG] [Thread-126934] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:36:21.285 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T11:36:21.297 [DEBUG] [Thread-126937] [transport.py] [_log()] starting thread (client mode): 0xb6bb3e80
2025-12-31T11:36:21.298 [DEBUG] [Thread-126937] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:36:21.315 [DEBUG] [Thread-126937] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T11:36:21.315 [INFO] [Thread-126937] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T11:36:21.322 [DEBUG] [Thread-126937] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:36:21.322 [DEBUG] [Thread-126937] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T11:36:21.322 [DEBUG] [Thread-126937] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:36:21.322 [DEBUG] [Thread-126937] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:36:21.322 [DEBUG] [Thread-126937] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:36:21.322 [DEBUG] [Thread-126937] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:36:21.323 [DEBUG] [Thread-126937] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:36:21.323 [DEBUG] [Thread-126937] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:36:21.323 [DEBUG] [Thread-126937] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:36:21.323 [DEBUG] [Thread-126937] [transport.py] [_log()] client lang: <none>
2025-12-31T11:36:21.323 [DEBUG] [Thread-126937] [transport.py] [_log()] server lang: <none>
2025-12-31T11:36:21.323 [DEBUG] [Thread-126937] [transport.py] [_log()] kex follows: False
2025-12-31T11:36:21.323 [DEBUG] [Thread-126937] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:36:21.323 [DEBUG] [Thread-126937] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:36:21.323 [DEBUG] [Thread-126937] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:36:21.323 [DEBUG] [Thread-126937] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:36:21.323 [DEBUG] [Thread-126937] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:36:21.323 [DEBUG] [Thread-126937] [transport.py] [_log()] Compression: none
2025-12-31T11:36:21.323 [DEBUG] [Thread-126937] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:36:21.384 [DEBUG] [Thread-126937] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:36:21.384 [DEBUG] [Thread-126937] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:36:21.385 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T11:36:21.386 [DEBUG] [Thread-126937] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T11:36:21.386 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:36:21.440 [DEBUG] [Thread-126937] [transport.py] [_log()] userauth is OK
2025-12-31T11:36:21.440 [DEBUG] [Thread-126937] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:36:21.440 [DEBUG] [Thread-126937] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:36:21.441 [DEBUG] [Thread-126937] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T11:36:21.441 [DEBUG] [Thread-126937] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:36:21.460 [INFO] [Thread-126937] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:36:21.460 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T11:36:21.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:36:22.320 [DEBUG] [Thread-126937] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:36:22.320 [DEBUG] [Thread-126937] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:36:22.368 [DEBUG] [Thread-126937] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:36:22.368 [DEBUG] [Thread-126937] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:36:22.377 [DEBUG] [Thread-126937] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:36:22.386 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:36: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-12-31T11:36:22.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-12-31T11:36:22.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:36:22.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:36:22.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:36:22.414 [DEBUG] [Thread-126937] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:36:33.005 [DEBUG] [Thread-126939 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:36:34.850 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:36:34.851 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:36:48.045 [DEBUG] [Thread-126940 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:36:52.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T11:36:52.425 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T11:36:52.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T11:36:53.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 11, 36, 44), 35.35, 8.75, 0.0, 19.34, 25.53, 0, 0, 0, 2, 0, 0),)
2025-12-31T11:36:53.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 11:36:44
2025-12-31T11:36:53.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T11:36:53.411 [DEBUG] [Thread-126941] [transport.py] [_log()] starting thread (client mode): 0xb6b4b1c0
2025-12-31T11:36:53.411 [DEBUG] [Thread-126941] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:36:53.433 [DEBUG] [Thread-126941] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T11:36:53.433 [INFO] [Thread-126941] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T11:36:53.436 [DEBUG] [Thread-126941] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:36:53.437 [DEBUG] [Thread-126941] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T11:36:53.437 [DEBUG] [Thread-126941] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:36:53.437 [DEBUG] [Thread-126941] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:36:53.437 [DEBUG] [Thread-126941] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:36:53.437 [DEBUG] [Thread-126941] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:36:53.437 [DEBUG] [Thread-126941] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:36:53.437 [DEBUG] [Thread-126941] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:36:53.437 [DEBUG] [Thread-126941] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:36:53.437 [DEBUG] [Thread-126941] [transport.py] [_log()] client lang: <none>
2025-12-31T11:36:53.437 [DEBUG] [Thread-126941] [transport.py] [_log()] server lang: <none>
2025-12-31T11:36:53.437 [DEBUG] [Thread-126941] [transport.py] [_log()] kex follows: False
2025-12-31T11:36:53.437 [DEBUG] [Thread-126941] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:36:53.437 [DEBUG] [Thread-126941] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:36:53.437 [DEBUG] [Thread-126941] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:36:53.437 [DEBUG] [Thread-126941] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:36:53.437 [DEBUG] [Thread-126941] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:36:53.437 [DEBUG] [Thread-126941] [transport.py] [_log()] Compression: none
2025-12-31T11:36:53.437 [DEBUG] [Thread-126941] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:36:53.455 [DEBUG] [Thread-126941] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:36:53.455 [DEBUG] [Thread-126941] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:36:53.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T11:36:53.456 [DEBUG] [Thread-126941] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T11:36:53.457 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:36:53.458 [DEBUG] [Thread-126941] [transport.py] [_log()] userauth is OK
2025-12-31T11:36:53.458 [DEBUG] [Thread-126941] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:36:53.459 [DEBUG] [Thread-126941] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:36:53.459 [DEBUG] [Thread-126941] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T11:36:53.459 [DEBUG] [Thread-126941] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:36:53.483 [INFO] [Thread-126941] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:36:53.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:36:54.123 [DEBUG] [Thread-126941] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:36:54.124 [DEBUG] [Thread-126941] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:36:54.124 [DEBUG] [Thread-126941] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T11:36:54.165 [DEBUG] [Thread-126941] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:36:54.165 [DEBUG] [Thread-126941] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:36:54.168 [DEBUG] [Thread-126941] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:36:54.180 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:36:54.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T11:36:54.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T11:36:54.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T11:36:54.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:36:54.190 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T11:36:54.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:36:54.190 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:36:54.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T11:36:54.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.400143 -999.00  +24.40   9.58     14   -4.40 1 1 1 1 1   888    0 29.73 -9.11 ----- 10.9 9.6 319.2 19.9 32.1 -27.6 31.5 -26.2 30.1 -25.8 30.9 -24.7
2025-12-31T11:36:54.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T11:36:54.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T11:36:54.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.400143
2025-12-31T11:36:54.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T11:36:54.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T11:36:54.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T11:36:54.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T11:36:54.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T11:36:54.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T11:36:44', tmtdew=35.35, humidity=8.75, cloud=0.0, wind=19.34, temperature=25.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T09:36:12.355', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T11:36:54.192 [DEBUG] [Thread-126941] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:36:54.284 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T11:36:54.296 [DEBUG] [Thread-126944] [transport.py] [_log()] starting thread (client mode): 0xb6b49fc0
2025-12-31T11:36:54.296 [DEBUG] [Thread-126944] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:36:54.310 [DEBUG] [Thread-126944] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T11:36:54.310 [INFO] [Thread-126944] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T11:36:54.317 [DEBUG] [Thread-126944] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:36:54.318 [DEBUG] [Thread-126944] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T11:36:54.318 [DEBUG] [Thread-126944] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:36:54.318 [DEBUG] [Thread-126944] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:36:54.318 [DEBUG] [Thread-126944] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:36:54.318 [DEBUG] [Thread-126944] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:36:54.318 [DEBUG] [Thread-126944] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:36:54.318 [DEBUG] [Thread-126944] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:36:54.318 [DEBUG] [Thread-126944] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:36:54.318 [DEBUG] [Thread-126944] [transport.py] [_log()] client lang: <none>
2025-12-31T11:36:54.318 [DEBUG] [Thread-126944] [transport.py] [_log()] server lang: <none>
2025-12-31T11:36:54.318 [DEBUG] [Thread-126944] [transport.py] [_log()] kex follows: False
2025-12-31T11:36:54.318 [DEBUG] [Thread-126944] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:36:54.318 [DEBUG] [Thread-126944] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:36:54.318 [DEBUG] [Thread-126944] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:36:54.318 [DEBUG] [Thread-126944] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:36:54.318 [DEBUG] [Thread-126944] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:36:54.318 [DEBUG] [Thread-126944] [transport.py] [_log()] Compression: none
2025-12-31T11:36:54.318 [DEBUG] [Thread-126944] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:36:54.375 [DEBUG] [Thread-126944] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:36:54.375 [DEBUG] [Thread-126944] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:36:54.376 [DEBUG] [Thread-126944] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T11:36:54.376 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T11:36:54.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:36:54.431 [DEBUG] [Thread-126944] [transport.py] [_log()] userauth is OK
2025-12-31T11:36:54.431 [DEBUG] [Thread-126944] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:36:54.431 [DEBUG] [Thread-126944] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:36:54.431 [DEBUG] [Thread-126944] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T11:36:54.431 [DEBUG] [Thread-126944] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:36:54.450 [INFO] [Thread-126944] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:36:54.450 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T11:36:54.451 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:36:55.288 [DEBUG] [Thread-126944] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:36:55.289 [DEBUG] [Thread-126944] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:36:55.337 [DEBUG] [Thread-126944] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:36:55.337 [DEBUG] [Thread-126944] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:36:55.345 [DEBUG] [Thread-126944] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:36:55.354 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:36: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')
2025-12-31T11:36:55.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T11:36:55.371 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:36:55.371 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:36:55.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:36:55.379 [DEBUG] [Thread-126944] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:37:03.078 [DEBUG] [Thread-126946 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:37:09.875 [DEBUG] [Thread-126947 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:37:18.123 [DEBUG] [Thread-126948 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:37:25.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T11:37:25.402 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T11:37:25.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T11:37:26.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 11, 37, 16), 35.28, 8.79, 0.0, 18.79, 25.45, 0, 0, 0, 2, 0, 0),)
2025-12-31T11:37:26.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 11:37:16
2025-12-31T11:37:26.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T11:37:26.391 [DEBUG] [Thread-126949] [transport.py] [_log()] starting thread (client mode): 0xb6b4af50
2025-12-31T11:37:26.391 [DEBUG] [Thread-126949] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:37:26.410 [DEBUG] [Thread-126949] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T11:37:26.410 [INFO] [Thread-126949] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T11:37:26.411 [DEBUG] [Thread-126949] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:37:26.412 [DEBUG] [Thread-126949] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T11:37:26.412 [DEBUG] [Thread-126949] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:37:26.412 [DEBUG] [Thread-126949] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:37:26.412 [DEBUG] [Thread-126949] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:37:26.412 [DEBUG] [Thread-126949] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:37:26.412 [DEBUG] [Thread-126949] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:37:26.412 [DEBUG] [Thread-126949] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:37:26.412 [DEBUG] [Thread-126949] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:37:26.412 [DEBUG] [Thread-126949] [transport.py] [_log()] client lang: <none>
2025-12-31T11:37:26.412 [DEBUG] [Thread-126949] [transport.py] [_log()] server lang: <none>
2025-12-31T11:37:26.412 [DEBUG] [Thread-126949] [transport.py] [_log()] kex follows: False
2025-12-31T11:37:26.412 [DEBUG] [Thread-126949] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:37:26.412 [DEBUG] [Thread-126949] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:37:26.412 [DEBUG] [Thread-126949] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:37:26.412 [DEBUG] [Thread-126949] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:37:26.412 [DEBUG] [Thread-126949] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:37:26.412 [DEBUG] [Thread-126949] [transport.py] [_log()] Compression: none
2025-12-31T11:37:26.412 [DEBUG] [Thread-126949] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:37:26.429 [DEBUG] [Thread-126949] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:37:26.430 [DEBUG] [Thread-126949] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:37:26.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T11:37:26.431 [DEBUG] [Thread-126949] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T11:37:26.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:37:26.433 [DEBUG] [Thread-126949] [transport.py] [_log()] userauth is OK
2025-12-31T11:37:26.433 [DEBUG] [Thread-126949] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:37:26.433 [DEBUG] [Thread-126949] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:37:26.433 [DEBUG] [Thread-126949] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T11:37:26.433 [DEBUG] [Thread-126949] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:37:26.458 [INFO] [Thread-126949] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:37:26.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:37:27.106 [DEBUG] [Thread-126949] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:37:27.106 [DEBUG] [Thread-126949] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:37:27.107 [DEBUG] [Thread-126949] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T11:37:27.147 [DEBUG] [Thread-126949] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:37:27.147 [DEBUG] [Thread-126949] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:37:27.150 [DEBUG] [Thread-126949] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:37:27.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:37:27.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T11:37:27.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T11:37:27.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T11:37:27.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:37:27.173 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T11:37:27.174 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:37:27.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:37:27.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T11:37:27.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.400838 -999.00  +24.60  12.92     14   -4.50 1 1 1 1 1   888    0 28.81 -22.71 ----- 12.2 12.9 301.3 24.4 32.3 -27.2 31.7 -25.6 30.2 -25.2 31.1 -23.7
2025-12-31T11:37:27.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T11:37:27.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T11:37:27.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.400838
2025-12-31T11:37:27.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T11:37:27.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T11:37:27.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T11:37:27.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T11:37:27.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T11:37:27.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T11:37:16', tmtdew=35.28, humidity=8.79, cloud=0.0, wind=18.79, temperature=25.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T09:37:12.403', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T11:37:27.176 [DEBUG] [Thread-126949] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:37:27.259 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T11:37:27.274 [DEBUG] [Thread-126952] [transport.py] [_log()] starting thread (client mode): 0xb6b48610
2025-12-31T11:37:27.274 [DEBUG] [Thread-126952] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:37:27.292 [DEBUG] [Thread-126952] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T11:37:27.293 [INFO] [Thread-126952] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T11:37:27.302 [DEBUG] [Thread-126952] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:37:27.303 [DEBUG] [Thread-126952] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T11:37:27.303 [DEBUG] [Thread-126952] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:37:27.303 [DEBUG] [Thread-126952] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:37:27.303 [DEBUG] [Thread-126952] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:37:27.303 [DEBUG] [Thread-126952] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:37:27.303 [DEBUG] [Thread-126952] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:37:27.303 [DEBUG] [Thread-126952] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:37:27.303 [DEBUG] [Thread-126952] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:37:27.303 [DEBUG] [Thread-126952] [transport.py] [_log()] client lang: <none>
2025-12-31T11:37:27.303 [DEBUG] [Thread-126952] [transport.py] [_log()] server lang: <none>
2025-12-31T11:37:27.303 [DEBUG] [Thread-126952] [transport.py] [_log()] kex follows: False
2025-12-31T11:37:27.303 [DEBUG] [Thread-126952] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:37:27.304 [DEBUG] [Thread-126952] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:37:27.304 [DEBUG] [Thread-126952] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:37:27.304 [DEBUG] [Thread-126952] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:37:27.304 [DEBUG] [Thread-126952] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:37:27.304 [DEBUG] [Thread-126952] [transport.py] [_log()] Compression: none
2025-12-31T11:37:27.304 [DEBUG] [Thread-126952] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:37:27.368 [DEBUG] [Thread-126952] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:37:27.368 [DEBUG] [Thread-126952] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:37:27.369 [DEBUG] [Thread-126952] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T11:37:27.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T11:37:27.370 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:37:27.430 [DEBUG] [Thread-126952] [transport.py] [_log()] userauth is OK
2025-12-31T11:37:27.430 [DEBUG] [Thread-126952] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:37:27.430 [DEBUG] [Thread-126952] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:37:27.430 [DEBUG] [Thread-126952] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T11:37:27.430 [DEBUG] [Thread-126952] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:37:27.449 [INFO] [Thread-126952] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:37:27.450 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T11:37:27.450 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:37:28.426 [DEBUG] [Thread-126952] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:37:28.427 [DEBUG] [Thread-126952] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:37:28.474 [DEBUG] [Thread-126952] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:37:28.475 [DEBUG] [Thread-126952] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:37:28.484 [DEBUG] [Thread-126952] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:37:28.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:37:28.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T11:37:28.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T11:37:28.512 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:37:28.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:37:28.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:37:28.521 [DEBUG] [Thread-126952] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:37:33.157 [DEBUG] [Thread-126954 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:37:34.991 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:37:34.993 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:37:48.214 [DEBUG] [Thread-126955 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:37:58.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T11:37:58.529 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T11:37:58.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T11:37:59.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 11, 37, 48), 35.65, 8.54, 0.0, 16.97, 25.45, 0, 0, 0, 2, 0, 0),)
2025-12-31T11:37:59.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 11:37:48
2025-12-31T11:37:59.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T11:37:59.503 [DEBUG] [Thread-126956] [transport.py] [_log()] starting thread (client mode): 0xb6b499c0
2025-12-31T11:37:59.503 [DEBUG] [Thread-126956] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:37:59.523 [DEBUG] [Thread-126956] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T11:37:59.523 [INFO] [Thread-126956] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T11:37:59.526 [DEBUG] [Thread-126956] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:37:59.526 [DEBUG] [Thread-126956] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T11:37:59.527 [DEBUG] [Thread-126956] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:37:59.527 [DEBUG] [Thread-126956] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:37:59.527 [DEBUG] [Thread-126956] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:37:59.527 [DEBUG] [Thread-126956] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:37:59.527 [DEBUG] [Thread-126956] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:37:59.527 [DEBUG] [Thread-126956] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:37:59.527 [DEBUG] [Thread-126956] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:37:59.527 [DEBUG] [Thread-126956] [transport.py] [_log()] client lang: <none>
2025-12-31T11:37:59.527 [DEBUG] [Thread-126956] [transport.py] [_log()] server lang: <none>
2025-12-31T11:37:59.527 [DEBUG] [Thread-126956] [transport.py] [_log()] kex follows: False
2025-12-31T11:37:59.527 [DEBUG] [Thread-126956] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:37:59.527 [DEBUG] [Thread-126956] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:37:59.527 [DEBUG] [Thread-126956] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:37:59.527 [DEBUG] [Thread-126956] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:37:59.527 [DEBUG] [Thread-126956] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:37:59.527 [DEBUG] [Thread-126956] [transport.py] [_log()] Compression: none
2025-12-31T11:37:59.527 [DEBUG] [Thread-126956] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:37:59.546 [DEBUG] [Thread-126956] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:37:59.547 [DEBUG] [Thread-126956] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:37:59.547 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T11:37:59.548 [DEBUG] [Thread-126956] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T11:37:59.549 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:37:59.550 [DEBUG] [Thread-126956] [transport.py] [_log()] userauth is OK
2025-12-31T11:37:59.550 [DEBUG] [Thread-126956] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:37:59.550 [DEBUG] [Thread-126956] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:37:59.550 [DEBUG] [Thread-126956] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T11:37:59.550 [DEBUG] [Thread-126956] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:37:59.573 [INFO] [Thread-126956] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:37:59.574 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:38:00.203 [DEBUG] [Thread-126956] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:38:00.203 [DEBUG] [Thread-126956] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:38:00.203 [DEBUG] [Thread-126956] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T11:38:00.244 [DEBUG] [Thread-126956] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:38:00.244 [DEBUG] [Thread-126956] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:38:00.248 [DEBUG] [Thread-126956] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:38:00.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:38:00.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T11:38:00.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T11:38:00.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T11:38:00.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:38:00.273 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T11:38:00.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:38:00.273 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:38:00.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T11:38:00.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.401185 -999.00  +24.80  13.11     14   -4.30 1 1 1 1 1   888    0 29.10 -27.63 ----- 13.2 13.1 308.7 15.9 32.5 -25.4 31.8 -25.3 30.4 -23.3 31.2 -22.5
2025-12-31T11:38:00.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T11:38:00.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T11:38:00.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.401185
2025-12-31T11:38:00.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T11:38:00.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T11:38:00.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T11:38:00.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T11:38:00.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T11:38:00.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T11:37:48', tmtdew=35.65, humidity=8.54, cloud=0.0, wind=16.97, temperature=25.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T09:37:42.384', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T11:38:00.275 [DEBUG] [Thread-126956] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:38:00.359 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T11:38:00.371 [DEBUG] [Thread-126959] [transport.py] [_log()] starting thread (client mode): 0xb6b4baf0
2025-12-31T11:38:00.371 [DEBUG] [Thread-126959] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:38:00.387 [DEBUG] [Thread-126959] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T11:38:00.387 [INFO] [Thread-126959] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T11:38:00.394 [DEBUG] [Thread-126959] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:38:00.395 [DEBUG] [Thread-126959] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T11:38:00.395 [DEBUG] [Thread-126959] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:38:00.395 [DEBUG] [Thread-126959] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:38:00.395 [DEBUG] [Thread-126959] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:38:00.395 [DEBUG] [Thread-126959] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:38:00.395 [DEBUG] [Thread-126959] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:38:00.395 [DEBUG] [Thread-126959] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:38:00.395 [DEBUG] [Thread-126959] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:38:00.395 [DEBUG] [Thread-126959] [transport.py] [_log()] client lang: <none>
2025-12-31T11:38:00.395 [DEBUG] [Thread-126959] [transport.py] [_log()] server lang: <none>
2025-12-31T11:38:00.395 [DEBUG] [Thread-126959] [transport.py] [_log()] kex follows: False
2025-12-31T11:38:00.396 [DEBUG] [Thread-126959] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:38:00.396 [DEBUG] [Thread-126959] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:38:00.396 [DEBUG] [Thread-126959] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:38:00.396 [DEBUG] [Thread-126959] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:38:00.396 [DEBUG] [Thread-126959] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:38:00.396 [DEBUG] [Thread-126959] [transport.py] [_log()] Compression: none
2025-12-31T11:38:00.396 [DEBUG] [Thread-126959] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:38:00.451 [DEBUG] [Thread-126959] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:38:00.452 [DEBUG] [Thread-126959] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:38:00.453 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T11:38:00.453 [DEBUG] [Thread-126959] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T11:38:00.454 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:38:00.508 [DEBUG] [Thread-126959] [transport.py] [_log()] userauth is OK
2025-12-31T11:38:00.508 [DEBUG] [Thread-126959] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:38:00.509 [DEBUG] [Thread-126959] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:38:00.509 [DEBUG] [Thread-126959] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T11:38:00.509 [DEBUG] [Thread-126959] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:38:00.534 [INFO] [Thread-126959] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:38:00.535 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T11:38:00.535 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:38:01.388 [DEBUG] [Thread-126959] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:38:01.388 [DEBUG] [Thread-126959] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:38:01.436 [DEBUG] [Thread-126959] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:38:01.436 [DEBUG] [Thread-126959] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:38:01.445 [DEBUG] [Thread-126959] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:38:01.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:38:01.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T11:38:01.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T11:38:01.469 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:38:01.469 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:38:01.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:38:01.477 [DEBUG] [Thread-126959] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:38:03.244 [DEBUG] [Thread-126961 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:38:09.937 [DEBUG] [Thread-126962 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:38:18.305 [DEBUG] [Thread-126963 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:38:31.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T11:38:31.499 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T11:38:31.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T11:38:32.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 11, 38, 20), 35.63, 8.54, 0.0, 15.9, 25.36, 0, 0, 0, 2, 0, 0),)
2025-12-31T11:38:32.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 11:38:20
2025-12-31T11:38:32.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T11:38:32.518 [DEBUG] [Thread-126964] [transport.py] [_log()] starting thread (client mode): 0xb9545a20
2025-12-31T11:38:32.518 [DEBUG] [Thread-126964] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:38:32.537 [DEBUG] [Thread-126964] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T11:38:32.537 [INFO] [Thread-126964] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T11:38:32.539 [DEBUG] [Thread-126964] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:38:32.539 [DEBUG] [Thread-126964] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T11:38:32.539 [DEBUG] [Thread-126964] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:38:32.539 [DEBUG] [Thread-126964] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:38:32.539 [DEBUG] [Thread-126964] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:38:32.539 [DEBUG] [Thread-126964] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:38:32.539 [DEBUG] [Thread-126964] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:38:32.539 [DEBUG] [Thread-126964] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:38:32.540 [DEBUG] [Thread-126964] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:38:32.540 [DEBUG] [Thread-126964] [transport.py] [_log()] client lang: <none>
2025-12-31T11:38:32.540 [DEBUG] [Thread-126964] [transport.py] [_log()] server lang: <none>
2025-12-31T11:38:32.540 [DEBUG] [Thread-126964] [transport.py] [_log()] kex follows: False
2025-12-31T11:38:32.540 [DEBUG] [Thread-126964] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:38:32.540 [DEBUG] [Thread-126964] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:38:32.540 [DEBUG] [Thread-126964] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:38:32.540 [DEBUG] [Thread-126964] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:38:32.540 [DEBUG] [Thread-126964] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:38:32.540 [DEBUG] [Thread-126964] [transport.py] [_log()] Compression: none
2025-12-31T11:38:32.540 [DEBUG] [Thread-126964] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:38:32.556 [DEBUG] [Thread-126964] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:38:32.556 [DEBUG] [Thread-126964] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:38:32.556 [DEBUG] [Thread-126964] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T11:38:32.556 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T11:38:32.556 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:38:32.559 [DEBUG] [Thread-126964] [transport.py] [_log()] userauth is OK
2025-12-31T11:38:32.559 [DEBUG] [Thread-126964] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:38:32.559 [DEBUG] [Thread-126964] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:38:32.559 [DEBUG] [Thread-126964] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T11:38:32.559 [DEBUG] [Thread-126964] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:38:32.568 [INFO] [Thread-126964] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:38:32.568 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:38:33.196 [DEBUG] [Thread-126964] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:38:33.196 [DEBUG] [Thread-126964] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:38:33.196 [DEBUG] [Thread-126964] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T11:38:33.238 [DEBUG] [Thread-126964] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:38:33.238 [DEBUG] [Thread-126964] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:38:33.241 [DEBUG] [Thread-126964] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:38:33.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:38:33.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T11:38:33.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T11:38:33.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T11:38:33.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:38:33.257 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T11:38:33.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:38:33.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:38:33.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T11:38:33.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.401532 -999.00  +25.20  12.00     14   -3.80 1 1 1 1 1   888    0 28.82 -30.66 ----- 24.8 12.0 273.5 18.5 32.8 -25.0 31.9 -24.8 30.9 -22.3 31.4 -22.7
2025-12-31T11:38:33.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T11:38:33.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T11:38:33.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.401532
2025-12-31T11:38:33.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T11:38:33.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T11:38:33.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T11:38:33.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T11:38:33.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T11:38:33.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T11:38:20', tmtdew=35.63, humidity=8.54, cloud=0.0, wind=15.9, temperature=25.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T09:38:12.365', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T11:38:33.258 [DEBUG] [Thread-126964] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:38:33.330 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T11:38:33.333 [DEBUG] [Thread-126967 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:38:33.342 [DEBUG] [Thread-126968] [transport.py] [_log()] starting thread (client mode): 0xb95465f0
2025-12-31T11:38:33.343 [DEBUG] [Thread-126968] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:38:33.358 [DEBUG] [Thread-126968] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T11:38:33.358 [INFO] [Thread-126968] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T11:38:33.369 [DEBUG] [Thread-126968] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:38:33.369 [DEBUG] [Thread-126968] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T11:38:33.369 [DEBUG] [Thread-126968] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:38:33.369 [DEBUG] [Thread-126968] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:38:33.369 [DEBUG] [Thread-126968] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:38:33.369 [DEBUG] [Thread-126968] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:38:33.369 [DEBUG] [Thread-126968] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:38:33.369 [DEBUG] [Thread-126968] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:38:33.369 [DEBUG] [Thread-126968] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:38:33.369 [DEBUG] [Thread-126968] [transport.py] [_log()] client lang: <none>
2025-12-31T11:38:33.369 [DEBUG] [Thread-126968] [transport.py] [_log()] server lang: <none>
2025-12-31T11:38:33.369 [DEBUG] [Thread-126968] [transport.py] [_log()] kex follows: False
2025-12-31T11:38:33.369 [DEBUG] [Thread-126968] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:38:33.369 [DEBUG] [Thread-126968] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:38:33.369 [DEBUG] [Thread-126968] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:38:33.369 [DEBUG] [Thread-126968] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:38:33.369 [DEBUG] [Thread-126968] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:38:33.369 [DEBUG] [Thread-126968] [transport.py] [_log()] Compression: none
2025-12-31T11:38:33.369 [DEBUG] [Thread-126968] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:38:33.422 [DEBUG] [Thread-126968] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:38:33.422 [DEBUG] [Thread-126968] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:38:33.422 [DEBUG] [Thread-126968] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T11:38:33.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T11:38:33.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:38:33.480 [DEBUG] [Thread-126968] [transport.py] [_log()] userauth is OK
2025-12-31T11:38:33.480 [DEBUG] [Thread-126968] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:38:33.480 [DEBUG] [Thread-126968] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:38:33.480 [DEBUG] [Thread-126968] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T11:38:33.480 [DEBUG] [Thread-126968] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:38:33.494 [INFO] [Thread-126968] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:38:33.494 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T11:38:33.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:38:34.299 [DEBUG] [Thread-126968] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:38:34.299 [DEBUG] [Thread-126968] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:38:34.347 [DEBUG] [Thread-126968] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:38:34.347 [DEBUG] [Thread-126968] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:38:34.356 [DEBUG] [Thread-126968] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:38:34.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:38:34.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T11:38:34.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T11:38:34.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:38:34.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:38:34.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:38:34.391 [DEBUG] [Thread-126968] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:38:35.134 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:38:35.135 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:38:48.375 [DEBUG] [Thread-126970 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:39:03.413 [DEBUG] [Thread-126971 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:39:04.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T11:39:04.414 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T11:39:04.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T11:39:05.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 11, 38, 53), 35.85, 8.64, 0.0, 20.58, 25.68, 0, 0, 0, 2, 0, 0),)
2025-12-31T11:39:05.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 11:38:53
2025-12-31T11:39:05.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T11:39:05.406 [DEBUG] [Thread-126972] [transport.py] [_log()] starting thread (client mode): 0xb6b4b220
2025-12-31T11:39:05.406 [DEBUG] [Thread-126972] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:39:05.426 [DEBUG] [Thread-126972] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T11:39:05.426 [INFO] [Thread-126972] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T11:39:05.429 [DEBUG] [Thread-126972] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:39:05.429 [DEBUG] [Thread-126972] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T11:39:05.429 [DEBUG] [Thread-126972] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:39:05.429 [DEBUG] [Thread-126972] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:39:05.429 [DEBUG] [Thread-126972] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:39:05.429 [DEBUG] [Thread-126972] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:39:05.429 [DEBUG] [Thread-126972] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:39:05.429 [DEBUG] [Thread-126972] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:39:05.429 [DEBUG] [Thread-126972] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:39:05.429 [DEBUG] [Thread-126972] [transport.py] [_log()] client lang: <none>
2025-12-31T11:39:05.429 [DEBUG] [Thread-126972] [transport.py] [_log()] server lang: <none>
2025-12-31T11:39:05.429 [DEBUG] [Thread-126972] [transport.py] [_log()] kex follows: False
2025-12-31T11:39:05.429 [DEBUG] [Thread-126972] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:39:05.429 [DEBUG] [Thread-126972] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:39:05.430 [DEBUG] [Thread-126972] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:39:05.430 [DEBUG] [Thread-126972] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:39:05.430 [DEBUG] [Thread-126972] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:39:05.430 [DEBUG] [Thread-126972] [transport.py] [_log()] Compression: none
2025-12-31T11:39:05.430 [DEBUG] [Thread-126972] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:39:05.447 [DEBUG] [Thread-126972] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:39:05.448 [DEBUG] [Thread-126972] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:39:05.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T11:39:05.450 [DEBUG] [Thread-126972] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T11:39:05.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:39:05.451 [DEBUG] [Thread-126972] [transport.py] [_log()] userauth is OK
2025-12-31T11:39:05.452 [DEBUG] [Thread-126972] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:39:05.452 [DEBUG] [Thread-126972] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:39:05.452 [DEBUG] [Thread-126972] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T11:39:05.452 [DEBUG] [Thread-126972] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:39:05.484 [INFO] [Thread-126972] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:39:05.485 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:39:06.104 [DEBUG] [Thread-126972] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:39:06.104 [DEBUG] [Thread-126972] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:39:06.104 [DEBUG] [Thread-126972] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T11:39:06.146 [DEBUG] [Thread-126972] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:39:06.146 [DEBUG] [Thread-126972] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:39:06.149 [DEBUG] [Thread-126972] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:39:06.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:39:06.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T11:39:06.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T11:39:06.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T11:39:06.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:39:06.173 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T11:39:06.173 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:39:06.173 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:39:06.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T11:39:06.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.401879 -999.00  +26.00  21.30     13   -3.80 1 1 1 1 1   888    0 29.13 -29.63 ----- 20.5 21.3 270.0 30.6 32.7 -27.7 32.0 -25.8 30.7 -27.7 31.5 -24.6
2025-12-31T11:39:06.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T11:39:06.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T11:39:06.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.401879
2025-12-31T11:39:06.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T11:39:06.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T11:39:06.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T11:39:06.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T11:39:06.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T11:39:06.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T11:38:53', tmtdew=35.85, humidity=8.64, cloud=0.0, wind=20.58, temperature=25.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T09:38:42.346', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T11:39:06.175 [DEBUG] [Thread-126972] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:39:06.261 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T11:39:06.273 [DEBUG] [Thread-126975] [transport.py] [_log()] starting thread (client mode): 0xb6bb1540
2025-12-31T11:39:06.273 [DEBUG] [Thread-126975] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:39:06.288 [DEBUG] [Thread-126975] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T11:39:06.288 [INFO] [Thread-126975] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T11:39:06.296 [DEBUG] [Thread-126975] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:39:06.296 [DEBUG] [Thread-126975] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T11:39:06.296 [DEBUG] [Thread-126975] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:39:06.296 [DEBUG] [Thread-126975] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:39:06.296 [DEBUG] [Thread-126975] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:39:06.296 [DEBUG] [Thread-126975] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:39:06.296 [DEBUG] [Thread-126975] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:39:06.296 [DEBUG] [Thread-126975] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:39:06.296 [DEBUG] [Thread-126975] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:39:06.296 [DEBUG] [Thread-126975] [transport.py] [_log()] client lang: <none>
2025-12-31T11:39:06.296 [DEBUG] [Thread-126975] [transport.py] [_log()] server lang: <none>
2025-12-31T11:39:06.296 [DEBUG] [Thread-126975] [transport.py] [_log()] kex follows: False
2025-12-31T11:39:06.296 [DEBUG] [Thread-126975] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:39:06.296 [DEBUG] [Thread-126975] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:39:06.296 [DEBUG] [Thread-126975] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:39:06.296 [DEBUG] [Thread-126975] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:39:06.297 [DEBUG] [Thread-126975] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:39:06.297 [DEBUG] [Thread-126975] [transport.py] [_log()] Compression: none
2025-12-31T11:39:06.297 [DEBUG] [Thread-126975] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:39:06.355 [DEBUG] [Thread-126975] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:39:06.355 [DEBUG] [Thread-126975] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:39:06.356 [DEBUG] [Thread-126975] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T11:39:06.356 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T11:39:06.357 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:39:06.411 [DEBUG] [Thread-126975] [transport.py] [_log()] userauth is OK
2025-12-31T11:39:06.412 [DEBUG] [Thread-126975] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:39:06.412 [DEBUG] [Thread-126975] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:39:06.412 [DEBUG] [Thread-126975] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T11:39:06.412 [DEBUG] [Thread-126975] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:39:06.430 [INFO] [Thread-126975] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:39:06.430 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T11:39:06.431 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:39:07.336 [DEBUG] [Thread-126975] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:39:07.336 [DEBUG] [Thread-126975] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:39:07.384 [DEBUG] [Thread-126975] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:39:07.384 [DEBUG] [Thread-126975] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:39:07.393 [DEBUG] [Thread-126975] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:39:07.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:39:07.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T11:39:07.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T11:39:07.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:39:07.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:39:07.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:39:07.424 [DEBUG] [Thread-126975] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:39:09.987 [DEBUG] [Thread-126977 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:39:18.443 [DEBUG] [Thread-126978 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:39:33.496 [DEBUG] [Thread-126979 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:39:35.278 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:39:35.279 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:39:37.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T11:39:37.447 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T11:39:37.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T11:39:38.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 11, 39, 25), 35.82, 8.64, 0.0, 19.64, 25.58, 0, 0, 0, 2, 0, 0),)
2025-12-31T11:39:38.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 11:39:25
2025-12-31T11:39:38.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T11:39:38.435 [DEBUG] [Thread-126980] [transport.py] [_log()] starting thread (client mode): 0xb9545ab0
2025-12-31T11:39:38.435 [DEBUG] [Thread-126980] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:39:38.455 [DEBUG] [Thread-126980] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T11:39:38.455 [INFO] [Thread-126980] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T11:39:38.456 [DEBUG] [Thread-126980] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:39:38.456 [DEBUG] [Thread-126980] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T11:39:38.456 [DEBUG] [Thread-126980] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:39:38.456 [DEBUG] [Thread-126980] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:39:38.457 [DEBUG] [Thread-126980] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:39:38.457 [DEBUG] [Thread-126980] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:39:38.457 [DEBUG] [Thread-126980] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:39:38.457 [DEBUG] [Thread-126980] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:39:38.457 [DEBUG] [Thread-126980] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:39:38.457 [DEBUG] [Thread-126980] [transport.py] [_log()] client lang: <none>
2025-12-31T11:39:38.457 [DEBUG] [Thread-126980] [transport.py] [_log()] server lang: <none>
2025-12-31T11:39:38.457 [DEBUG] [Thread-126980] [transport.py] [_log()] kex follows: False
2025-12-31T11:39:38.457 [DEBUG] [Thread-126980] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:39:38.457 [DEBUG] [Thread-126980] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:39:38.457 [DEBUG] [Thread-126980] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:39:38.457 [DEBUG] [Thread-126980] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:39:38.457 [DEBUG] [Thread-126980] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:39:38.457 [DEBUG] [Thread-126980] [transport.py] [_log()] Compression: none
2025-12-31T11:39:38.457 [DEBUG] [Thread-126980] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:39:38.473 [DEBUG] [Thread-126980] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:39:38.473 [DEBUG] [Thread-126980] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:39:38.473 [DEBUG] [Thread-126980] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T11:39:38.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T11:39:38.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:39:38.476 [DEBUG] [Thread-126980] [transport.py] [_log()] userauth is OK
2025-12-31T11:39:38.477 [DEBUG] [Thread-126980] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:39:38.477 [DEBUG] [Thread-126980] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:39:38.477 [DEBUG] [Thread-126980] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T11:39:38.477 [DEBUG] [Thread-126980] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:39:38.492 [INFO] [Thread-126980] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:39:38.493 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:39:39.131 [DEBUG] [Thread-126980] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:39:39.132 [DEBUG] [Thread-126980] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:39:39.132 [DEBUG] [Thread-126980] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T11:39:39.174 [DEBUG] [Thread-126980] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:39:39.174 [DEBUG] [Thread-126980] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:39:39.178 [DEBUG] [Thread-126980] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:39:39.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:39:39.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T11:39:39.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T11:39:39.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T11:39:39.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:39:39.207 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T11:39:39.207 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:39:39.207 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:39:39.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T11:39:39.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.402226 -999.00  +25.60  16.34     13   -4.30 1 1 1 1 1   888    0 28.57 -28.58 ----- 11.0 16.3 267.0 26.6 32.8 -26.7 32.1 -26.4 30.9 -23.5 31.5 -24.4
2025-12-31T11:39:39.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T11:39:39.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T11:39:39.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.402226
2025-12-31T11:39:39.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T11:39:39.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T11:39:39.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T11:39:39.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T11:39:39.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T11:39:39.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T11:39:25', tmtdew=35.82, humidity=8.64, cloud=0.0, wind=19.64, temperature=25.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T09:39:12.326', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T11:39:39.210 [DEBUG] [Thread-126980] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:39:39.295 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T11:39:39.306 [DEBUG] [Thread-126983] [transport.py] [_log()] starting thread (client mode): 0xb95472e0
2025-12-31T11:39:39.306 [DEBUG] [Thread-126983] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:39:39.321 [DEBUG] [Thread-126983] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T11:39:39.322 [INFO] [Thread-126983] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T11:39:39.329 [DEBUG] [Thread-126983] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:39:39.329 [DEBUG] [Thread-126983] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T11:39:39.329 [DEBUG] [Thread-126983] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:39:39.330 [DEBUG] [Thread-126983] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:39:39.330 [DEBUG] [Thread-126983] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:39:39.330 [DEBUG] [Thread-126983] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:39:39.330 [DEBUG] [Thread-126983] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:39:39.330 [DEBUG] [Thread-126983] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:39:39.330 [DEBUG] [Thread-126983] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:39:39.330 [DEBUG] [Thread-126983] [transport.py] [_log()] client lang: <none>
2025-12-31T11:39:39.330 [DEBUG] [Thread-126983] [transport.py] [_log()] server lang: <none>
2025-12-31T11:39:39.330 [DEBUG] [Thread-126983] [transport.py] [_log()] kex follows: False
2025-12-31T11:39:39.330 [DEBUG] [Thread-126983] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:39:39.330 [DEBUG] [Thread-126983] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:39:39.330 [DEBUG] [Thread-126983] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:39:39.330 [DEBUG] [Thread-126983] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:39:39.330 [DEBUG] [Thread-126983] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:39:39.330 [DEBUG] [Thread-126983] [transport.py] [_log()] Compression: none
2025-12-31T11:39:39.330 [DEBUG] [Thread-126983] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:39:39.388 [DEBUG] [Thread-126983] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:39:39.388 [DEBUG] [Thread-126983] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:39:39.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T11:39:39.389 [DEBUG] [Thread-126983] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T11:39:39.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:39:39.444 [DEBUG] [Thread-126983] [transport.py] [_log()] userauth is OK
2025-12-31T11:39:39.444 [DEBUG] [Thread-126983] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:39:39.444 [DEBUG] [Thread-126983] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:39:39.444 [DEBUG] [Thread-126983] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T11:39:39.445 [DEBUG] [Thread-126983] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:39:39.464 [INFO] [Thread-126983] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:39:39.464 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T11:39:39.464 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:39:40.281 [DEBUG] [Thread-126983] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:39:40.281 [DEBUG] [Thread-126983] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:39:40.329 [DEBUG] [Thread-126983] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:39:40.329 [DEBUG] [Thread-126983] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:39:40.339 [DEBUG] [Thread-126983] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:39:40.351 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:39:40.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-12-31T11:39:40.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T11:39:40.375 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:39:40.375 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:39:40.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:39:40.387 [DEBUG] [Thread-126983] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:39:48.533 [DEBUG] [Thread-126985 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:40:03.573 [DEBUG] [Thread-126986 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:40:10.043 [DEBUG] [Thread-126987 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:40:10.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T11:40:10.406 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T11:40:10.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T11:40:11.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 11, 39, 57), 35.74, 8.75, 0.0, 18.35, 25.45, 0, 0, 0, 2, 0, 0),)
2025-12-31T11:40:11.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 11:39:57
2025-12-31T11:40:11.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T11:40:11.377 [DEBUG] [Thread-126988] [transport.py] [_log()] starting thread (client mode): 0xb9547c10
2025-12-31T11:40:11.377 [DEBUG] [Thread-126988] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:40:11.393 [DEBUG] [Thread-126988] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T11:40:11.393 [INFO] [Thread-126988] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T11:40:11.397 [DEBUG] [Thread-126988] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:40:11.397 [DEBUG] [Thread-126988] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T11:40:11.397 [DEBUG] [Thread-126988] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:40:11.397 [DEBUG] [Thread-126988] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:40:11.397 [DEBUG] [Thread-126988] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:40:11.397 [DEBUG] [Thread-126988] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:40:11.397 [DEBUG] [Thread-126988] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:40:11.397 [DEBUG] [Thread-126988] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:40:11.397 [DEBUG] [Thread-126988] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:40:11.397 [DEBUG] [Thread-126988] [transport.py] [_log()] client lang: <none>
2025-12-31T11:40:11.397 [DEBUG] [Thread-126988] [transport.py] [_log()] server lang: <none>
2025-12-31T11:40:11.397 [DEBUG] [Thread-126988] [transport.py] [_log()] kex follows: False
2025-12-31T11:40:11.397 [DEBUG] [Thread-126988] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:40:11.397 [DEBUG] [Thread-126988] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:40:11.398 [DEBUG] [Thread-126988] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:40:11.398 [DEBUG] [Thread-126988] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:40:11.398 [DEBUG] [Thread-126988] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:40:11.398 [DEBUG] [Thread-126988] [transport.py] [_log()] Compression: none
2025-12-31T11:40:11.398 [DEBUG] [Thread-126988] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:40:11.417 [DEBUG] [Thread-126988] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:40:11.418 [DEBUG] [Thread-126988] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:40:11.427 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T11:40:11.427 [DEBUG] [Thread-126988] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T11:40:11.428 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:40:11.430 [DEBUG] [Thread-126988] [transport.py] [_log()] userauth is OK
2025-12-31T11:40:11.430 [DEBUG] [Thread-126988] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:40:11.430 [DEBUG] [Thread-126988] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:40:11.430 [DEBUG] [Thread-126988] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T11:40:11.431 [DEBUG] [Thread-126988] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:40:11.450 [INFO] [Thread-126988] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:40:11.451 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:40:12.065 [DEBUG] [Thread-126988] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:40:12.065 [DEBUG] [Thread-126988] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:40:12.066 [DEBUG] [Thread-126988] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T11:40:12.106 [DEBUG] [Thread-126988] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:40:12.106 [DEBUG] [Thread-126988] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:40:12.109 [DEBUG] [Thread-126988] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:40:12.118 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:40:12.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T11:40:12.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T11:40:12.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T11:40:12.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:40:12.141 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T11:40:12.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:40:12.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:40:12.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T11:40:12.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.402574 -999.00  +25.50  20.30     13   -4.30 1 1 1 1 1   888    0 28.90 -28.95 ----- 17.3 20.3 289.8 24.4 32.8 -25.5 32.1 -25.1 30.8 -22.3 31.4 -23.7
2025-12-31T11:40:12.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T11:40:12.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T11:40:12.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.402574
2025-12-31T11:40:12.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T11:40:12.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T11:40:12.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T11:40:12.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T11:40:12.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T11:40:12.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T11:39:57', tmtdew=35.74, humidity=8.75, cloud=0.0, wind=18.35, temperature=25.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T09:39:42.394', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T11:40:12.144 [DEBUG] [Thread-126988] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:40:12.228 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T11:40:12.240 [DEBUG] [Thread-126991] [transport.py] [_log()] starting thread (client mode): 0xb95465f0
2025-12-31T11:40:12.241 [DEBUG] [Thread-126991] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:40:12.259 [DEBUG] [Thread-126991] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T11:40:12.260 [INFO] [Thread-126991] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T11:40:12.267 [DEBUG] [Thread-126991] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:40:12.267 [DEBUG] [Thread-126991] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T11:40:12.267 [DEBUG] [Thread-126991] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:40:12.268 [DEBUG] [Thread-126991] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:40:12.268 [DEBUG] [Thread-126991] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:40:12.268 [DEBUG] [Thread-126991] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:40:12.268 [DEBUG] [Thread-126991] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:40:12.268 [DEBUG] [Thread-126991] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:40:12.268 [DEBUG] [Thread-126991] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:40:12.268 [DEBUG] [Thread-126991] [transport.py] [_log()] client lang: <none>
2025-12-31T11:40:12.268 [DEBUG] [Thread-126991] [transport.py] [_log()] server lang: <none>
2025-12-31T11:40:12.268 [DEBUG] [Thread-126991] [transport.py] [_log()] kex follows: False
2025-12-31T11:40:12.268 [DEBUG] [Thread-126991] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:40:12.268 [DEBUG] [Thread-126991] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:40:12.268 [DEBUG] [Thread-126991] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:40:12.268 [DEBUG] [Thread-126991] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:40:12.268 [DEBUG] [Thread-126991] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:40:12.268 [DEBUG] [Thread-126991] [transport.py] [_log()] Compression: none
2025-12-31T11:40:12.268 [DEBUG] [Thread-126991] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:40:12.328 [DEBUG] [Thread-126991] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:40:12.328 [DEBUG] [Thread-126991] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:40:12.329 [DEBUG] [Thread-126991] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T11:40:12.329 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T11:40:12.330 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:40:12.384 [DEBUG] [Thread-126991] [transport.py] [_log()] userauth is OK
2025-12-31T11:40:12.384 [DEBUG] [Thread-126991] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:40:12.384 [DEBUG] [Thread-126991] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:40:12.384 [DEBUG] [Thread-126991] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T11:40:12.384 [DEBUG] [Thread-126991] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:40:12.403 [INFO] [Thread-126991] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:40:12.404 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T11:40:12.404 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:40:13.272 [DEBUG] [Thread-126991] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:40:13.272 [DEBUG] [Thread-126991] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:40:13.320 [DEBUG] [Thread-126991] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:40:13.320 [DEBUG] [Thread-126991] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:40:13.329 [DEBUG] [Thread-126991] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:40:13.338 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:40:13.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T11:40:13.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T11:40:13.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:40:13.357 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:40:13.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:40:13.366 [DEBUG] [Thread-126991] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:40:18.611 [DEBUG] [Thread-126993 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:40:33.672 [DEBUG] [Thread-126994 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:40:35.422 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:40:35.423 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:40:43.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T11:40:43.382 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T11:40:43.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T11:40:44.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 11, 40, 29), 36.25, 8.47, 0.0, 20.49, 25.76, 0, 0, 0, 2, 0, 0),)
2025-12-31T11:40:44.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 11:40:29
2025-12-31T11:40:44.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T11:40:44.377 [DEBUG] [Thread-126995] [transport.py] [_log()] starting thread (client mode): 0xb95453f0
2025-12-31T11:40:44.377 [DEBUG] [Thread-126995] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:40:44.398 [DEBUG] [Thread-126995] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T11:40:44.398 [INFO] [Thread-126995] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T11:40:44.400 [DEBUG] [Thread-126995] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:40:44.400 [DEBUG] [Thread-126995] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T11:40:44.400 [DEBUG] [Thread-126995] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:40:44.401 [DEBUG] [Thread-126995] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:40:44.401 [DEBUG] [Thread-126995] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:40:44.401 [DEBUG] [Thread-126995] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:40:44.401 [DEBUG] [Thread-126995] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:40:44.401 [DEBUG] [Thread-126995] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:40:44.401 [DEBUG] [Thread-126995] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:40:44.401 [DEBUG] [Thread-126995] [transport.py] [_log()] client lang: <none>
2025-12-31T11:40:44.401 [DEBUG] [Thread-126995] [transport.py] [_log()] server lang: <none>
2025-12-31T11:40:44.401 [DEBUG] [Thread-126995] [transport.py] [_log()] kex follows: False
2025-12-31T11:40:44.401 [DEBUG] [Thread-126995] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:40:44.401 [DEBUG] [Thread-126995] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:40:44.401 [DEBUG] [Thread-126995] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:40:44.401 [DEBUG] [Thread-126995] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:40:44.401 [DEBUG] [Thread-126995] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:40:44.401 [DEBUG] [Thread-126995] [transport.py] [_log()] Compression: none
2025-12-31T11:40:44.401 [DEBUG] [Thread-126995] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:40:44.412 [DEBUG] [Thread-126995] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:40:44.412 [DEBUG] [Thread-126995] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:40:44.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T11:40:44.413 [DEBUG] [Thread-126995] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T11:40:44.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:40:44.416 [DEBUG] [Thread-126995] [transport.py] [_log()] userauth is OK
2025-12-31T11:40:44.417 [DEBUG] [Thread-126995] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:40:44.417 [DEBUG] [Thread-126995] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:40:44.417 [DEBUG] [Thread-126995] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T11:40:44.417 [DEBUG] [Thread-126995] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:40:44.442 [INFO] [Thread-126995] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:40:44.443 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:40:45.027 [DEBUG] [Thread-126995] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:40:45.028 [DEBUG] [Thread-126995] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:40:45.028 [DEBUG] [Thread-126995] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T11:40:45.070 [DEBUG] [Thread-126995] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:40:45.070 [DEBUG] [Thread-126995] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:40:45.073 [DEBUG] [Thread-126995] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:40:45.088 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:40:45.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T11:40:45.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T11:40:45.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T11:40:45.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:40:45.101 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T11:40:45.101 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:40:45.102 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:40:45.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T11:40:45.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.402921 -999.00  +25.30  15.42     13   -4.20 1 1 1 1 1   888    0 29.33 -29.23 ----- 13.9 15.4 281.1 19.7 32.7 -25.9 32.0 -25.6 30.7 -24.5 31.5 -23.4
2025-12-31T11:40:45.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T11:40:45.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T11:40:45.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.402921
2025-12-31T11:40:45.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T11:40:45.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T11:40:45.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T11:40:45.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T11:40:45.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T11:40:45.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T11:40:29', tmtdew=36.25, humidity=8.47, cloud=0.0, wind=20.49, temperature=25.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T09:40:12.374', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T11:40:45.104 [DEBUG] [Thread-126995] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:40:45.189 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T11:40:45.199 [DEBUG] [Thread-126998] [transport.py] [_log()] starting thread (client mode): 0xb9547af0
2025-12-31T11:40:45.200 [DEBUG] [Thread-126998] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:40:45.214 [DEBUG] [Thread-126998] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T11:40:45.214 [INFO] [Thread-126998] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T11:40:45.221 [DEBUG] [Thread-126998] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:40:45.221 [DEBUG] [Thread-126998] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T11:40:45.221 [DEBUG] [Thread-126998] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:40:45.221 [DEBUG] [Thread-126998] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:40:45.221 [DEBUG] [Thread-126998] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:40:45.221 [DEBUG] [Thread-126998] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:40:45.221 [DEBUG] [Thread-126998] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:40:45.221 [DEBUG] [Thread-126998] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:40:45.221 [DEBUG] [Thread-126998] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:40:45.221 [DEBUG] [Thread-126998] [transport.py] [_log()] client lang: <none>
2025-12-31T11:40:45.221 [DEBUG] [Thread-126998] [transport.py] [_log()] server lang: <none>
2025-12-31T11:40:45.221 [DEBUG] [Thread-126998] [transport.py] [_log()] kex follows: False
2025-12-31T11:40:45.221 [DEBUG] [Thread-126998] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:40:45.221 [DEBUG] [Thread-126998] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:40:45.221 [DEBUG] [Thread-126998] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:40:45.221 [DEBUG] [Thread-126998] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:40:45.221 [DEBUG] [Thread-126998] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:40:45.221 [DEBUG] [Thread-126998] [transport.py] [_log()] Compression: none
2025-12-31T11:40:45.221 [DEBUG] [Thread-126998] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:40:45.279 [DEBUG] [Thread-126998] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:40:45.280 [DEBUG] [Thread-126998] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:40:45.280 [DEBUG] [Thread-126998] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T11:40:45.281 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T11:40:45.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:40:45.336 [DEBUG] [Thread-126998] [transport.py] [_log()] userauth is OK
2025-12-31T11:40:45.336 [DEBUG] [Thread-126998] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:40:45.337 [DEBUG] [Thread-126998] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:40:45.337 [DEBUG] [Thread-126998] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T11:40:45.337 [DEBUG] [Thread-126998] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:40:45.354 [INFO] [Thread-126998] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:40:45.355 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T11:40:45.355 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:40:46.191 [DEBUG] [Thread-126998] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:40:46.191 [DEBUG] [Thread-126998] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:40:46.242 [DEBUG] [Thread-126998] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:40:46.243 [DEBUG] [Thread-126998] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:40:46.252 [DEBUG] [Thread-126998] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:40:46.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:40:46.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T11:40:46.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T11:40:46.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:40:46.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:40:46.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:40:46.288 [DEBUG] [Thread-126998] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:40:48.711 [DEBUG] [Thread-127000 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:41:03.761 [DEBUG] [Thread-127001 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:41:10.075 [DEBUG] [Thread-127002 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:41:16.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T11:41:16.310 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T11:41:16.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T11:41:16.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 11, 41, 1), 36.29, 8.39, 0.0, 13.9, 26.03, 0, 0, 0, 2, 0, 0),)
2025-12-31T11:41:16.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 11:41:01
2025-12-31T11:41:17.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T11:41:17.275 [DEBUG] [Thread-127003] [transport.py] [_log()] starting thread (client mode): 0xb6b4b400
2025-12-31T11:41:17.275 [DEBUG] [Thread-127003] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:41:17.290 [DEBUG] [Thread-127003] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T11:41:17.290 [INFO] [Thread-127003] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T11:41:17.292 [DEBUG] [Thread-127003] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:41:17.292 [DEBUG] [Thread-127003] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T11:41:17.292 [DEBUG] [Thread-127003] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:41:17.292 [DEBUG] [Thread-127003] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:41:17.292 [DEBUG] [Thread-127003] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:41:17.292 [DEBUG] [Thread-127003] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:41:17.292 [DEBUG] [Thread-127003] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:41:17.292 [DEBUG] [Thread-127003] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:41:17.292 [DEBUG] [Thread-127003] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:41:17.292 [DEBUG] [Thread-127003] [transport.py] [_log()] client lang: <none>
2025-12-31T11:41:17.292 [DEBUG] [Thread-127003] [transport.py] [_log()] server lang: <none>
2025-12-31T11:41:17.292 [DEBUG] [Thread-127003] [transport.py] [_log()] kex follows: False
2025-12-31T11:41:17.292 [DEBUG] [Thread-127003] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:41:17.292 [DEBUG] [Thread-127003] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:41:17.292 [DEBUG] [Thread-127003] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:41:17.292 [DEBUG] [Thread-127003] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:41:17.292 [DEBUG] [Thread-127003] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:41:17.292 [DEBUG] [Thread-127003] [transport.py] [_log()] Compression: none
2025-12-31T11:41:17.292 [DEBUG] [Thread-127003] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:41:17.304 [DEBUG] [Thread-127003] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:41:17.304 [DEBUG] [Thread-127003] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:41:17.305 [DEBUG] [Thread-127003] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T11:41:17.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T11:41:17.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:41:17.306 [DEBUG] [Thread-127003] [transport.py] [_log()] userauth is OK
2025-12-31T11:41:17.306 [DEBUG] [Thread-127003] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:41:17.306 [DEBUG] [Thread-127003] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:41:17.306 [DEBUG] [Thread-127003] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T11:41:17.306 [DEBUG] [Thread-127003] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:41:17.329 [INFO] [Thread-127003] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:41:17.329 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:41:17.969 [DEBUG] [Thread-127003] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:41:17.969 [DEBUG] [Thread-127003] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:41:17.970 [DEBUG] [Thread-127003] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T11:41:18.010 [DEBUG] [Thread-127003] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:41:18.010 [DEBUG] [Thread-127003] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:41:18.013 [DEBUG] [Thread-127003] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:41:18.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:41:18.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T11:41:18.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T11:41:18.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T11:41:18.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:41:18.053 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T11:41:18.053 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:41:18.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:41:18.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T11:41:18.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.403615 -999.00  +25.60  13.42     13   -4.40 1 1 1 1 1   888    0 28.65 -31.76 ----- 24.5 13.4 282.0 35.6 32.9 -27.8 32.1 -26.3 30.9 -30.6 31.7 -24.8
2025-12-31T11:41:18.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T11:41:18.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T11:41:18.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.403615
2025-12-31T11:41:18.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T11:41:18.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T11:41:18.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T11:41:18.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T11:41:18.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T11:41:18.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T11:41:01', tmtdew=36.29, humidity=8.39, cloud=0.0, wind=13.9, temperature=26.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T09:41:12.336', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T11:41:18.057 [DEBUG] [Thread-127003] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:41:18.134 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T11:41:18.145 [DEBUG] [Thread-127006] [transport.py] [_log()] starting thread (client mode): 0xb6b48640
2025-12-31T11:41:18.145 [DEBUG] [Thread-127006] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:41:18.161 [DEBUG] [Thread-127006] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T11:41:18.161 [INFO] [Thread-127006] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T11:41:18.169 [DEBUG] [Thread-127006] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:41:18.169 [DEBUG] [Thread-127006] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T11:41:18.169 [DEBUG] [Thread-127006] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:41:18.169 [DEBUG] [Thread-127006] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:41:18.169 [DEBUG] [Thread-127006] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:41:18.169 [DEBUG] [Thread-127006] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:41:18.170 [DEBUG] [Thread-127006] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:41:18.170 [DEBUG] [Thread-127006] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:41:18.170 [DEBUG] [Thread-127006] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:41:18.170 [DEBUG] [Thread-127006] [transport.py] [_log()] client lang: <none>
2025-12-31T11:41:18.170 [DEBUG] [Thread-127006] [transport.py] [_log()] server lang: <none>
2025-12-31T11:41:18.170 [DEBUG] [Thread-127006] [transport.py] [_log()] kex follows: False
2025-12-31T11:41:18.170 [DEBUG] [Thread-127006] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:41:18.170 [DEBUG] [Thread-127006] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:41:18.170 [DEBUG] [Thread-127006] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:41:18.170 [DEBUG] [Thread-127006] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:41:18.170 [DEBUG] [Thread-127006] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:41:18.170 [DEBUG] [Thread-127006] [transport.py] [_log()] Compression: none
2025-12-31T11:41:18.170 [DEBUG] [Thread-127006] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:41:18.228 [DEBUG] [Thread-127006] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:41:18.228 [DEBUG] [Thread-127006] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:41:18.229 [DEBUG] [Thread-127006] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T11:41:18.229 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T11:41:18.230 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:41:18.284 [DEBUG] [Thread-127006] [transport.py] [_log()] userauth is OK
2025-12-31T11:41:18.284 [DEBUG] [Thread-127006] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:41:18.285 [DEBUG] [Thread-127006] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:41:18.285 [DEBUG] [Thread-127006] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T11:41:18.285 [DEBUG] [Thread-127006] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:41:18.304 [INFO] [Thread-127006] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:41:18.304 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T11:41:18.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:41:18.790 [DEBUG] [Thread-127008 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:41:19.124 [DEBUG] [Thread-127006] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:41:19.125 [DEBUG] [Thread-127006] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:41:19.172 [DEBUG] [Thread-127006] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:41:19.172 [DEBUG] [Thread-127006] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:41:19.182 [DEBUG] [Thread-127006] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:41:19.192 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:41: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-12-31T11:41:19.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T11:41:19.214 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:41:19.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:41:19.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:41:19.223 [DEBUG] [Thread-127006] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:41:33.844 [DEBUG] [Thread-127009 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:41:35.562 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:41:35.564 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:41:48.875 [DEBUG] [Thread-127010 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:41:49.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T11:41:49.239 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T11:41:49.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T11:41:49.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 11, 41, 33), 36.27, 8.39, 0.0, 15.7, 25.95, 0, 0, 0, 2, 0, 0),)
2025-12-31T11:41:49.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 11:41:33
2025-12-31T11:41:50.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T11:41:50.207 [DEBUG] [Thread-127011] [transport.py] [_log()] starting thread (client mode): 0xb9545210
2025-12-31T11:41:50.207 [DEBUG] [Thread-127011] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:41:50.228 [DEBUG] [Thread-127011] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T11:41:50.228 [INFO] [Thread-127011] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T11:41:50.231 [DEBUG] [Thread-127011] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:41:50.231 [DEBUG] [Thread-127011] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T11:41:50.231 [DEBUG] [Thread-127011] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:41:50.231 [DEBUG] [Thread-127011] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:41:50.231 [DEBUG] [Thread-127011] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:41:50.231 [DEBUG] [Thread-127011] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:41:50.231 [DEBUG] [Thread-127011] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:41:50.231 [DEBUG] [Thread-127011] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:41:50.231 [DEBUG] [Thread-127011] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:41:50.231 [DEBUG] [Thread-127011] [transport.py] [_log()] client lang: <none>
2025-12-31T11:41:50.231 [DEBUG] [Thread-127011] [transport.py] [_log()] server lang: <none>
2025-12-31T11:41:50.231 [DEBUG] [Thread-127011] [transport.py] [_log()] kex follows: False
2025-12-31T11:41:50.231 [DEBUG] [Thread-127011] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:41:50.232 [DEBUG] [Thread-127011] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:41:50.232 [DEBUG] [Thread-127011] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:41:50.232 [DEBUG] [Thread-127011] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:41:50.232 [DEBUG] [Thread-127011] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:41:50.232 [DEBUG] [Thread-127011] [transport.py] [_log()] Compression: none
2025-12-31T11:41:50.232 [DEBUG] [Thread-127011] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:41:50.250 [DEBUG] [Thread-127011] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:41:50.251 [DEBUG] [Thread-127011] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:41:50.252 [DEBUG] [Thread-127011] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T11:41:50.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T11:41:50.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:41:50.254 [DEBUG] [Thread-127011] [transport.py] [_log()] userauth is OK
2025-12-31T11:41:50.255 [DEBUG] [Thread-127011] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:41:50.255 [DEBUG] [Thread-127011] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:41:50.255 [DEBUG] [Thread-127011] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T11:41:50.255 [DEBUG] [Thread-127011] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:41:50.280 [INFO] [Thread-127011] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:41:50.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:41:50.889 [DEBUG] [Thread-127011] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:41:50.890 [DEBUG] [Thread-127011] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:41:50.890 [DEBUG] [Thread-127011] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T11:41:50.931 [DEBUG] [Thread-127011] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:41:50.931 [DEBUG] [Thread-127011] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:41:50.935 [DEBUG] [Thread-127011] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:41:50.946 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:41:50.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T11:41:50.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T11:41:50.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T11:41:50.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:41:50.957 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T11:41:50.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:41:50.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:41:50.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T11:41:50.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.403615 -999.00  +25.60  13.42     13   -4.40 1 1 1 1 1   888    0 28.65 -31.76 ----- 24.5 13.4 282.0 35.6 32.9 -27.8 32.1 -26.3 30.9 -30.6 31.7 -24.8
2025-12-31T11:41:50.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T11:41:50.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T11:41:50.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.403615
2025-12-31T11:41:50.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T11:41:50.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T11:41:50.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T11:41:50.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T11:41:50.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T11:41:50.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T11:41:33', tmtdew=36.27, humidity=8.39, cloud=0.0, wind=15.7, temperature=25.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T09:41:12.336', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T11:41:50.959 [DEBUG] [Thread-127011] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:41:51.042 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T11:41:51.054 [DEBUG] [Thread-127014] [transport.py] [_log()] starting thread (client mode): 0xb95466b0
2025-12-31T11:41:51.055 [DEBUG] [Thread-127014] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:41:51.069 [DEBUG] [Thread-127014] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T11:41:51.069 [INFO] [Thread-127014] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T11:41:51.077 [DEBUG] [Thread-127014] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:41:51.077 [DEBUG] [Thread-127014] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T11:41:51.077 [DEBUG] [Thread-127014] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:41:51.077 [DEBUG] [Thread-127014] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:41:51.077 [DEBUG] [Thread-127014] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:41:51.077 [DEBUG] [Thread-127014] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:41:51.077 [DEBUG] [Thread-127014] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:41:51.077 [DEBUG] [Thread-127014] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:41:51.077 [DEBUG] [Thread-127014] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:41:51.078 [DEBUG] [Thread-127014] [transport.py] [_log()] client lang: <none>
2025-12-31T11:41:51.078 [DEBUG] [Thread-127014] [transport.py] [_log()] server lang: <none>
2025-12-31T11:41:51.078 [DEBUG] [Thread-127014] [transport.py] [_log()] kex follows: False
2025-12-31T11:41:51.078 [DEBUG] [Thread-127014] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:41:51.078 [DEBUG] [Thread-127014] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:41:51.078 [DEBUG] [Thread-127014] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:41:51.078 [DEBUG] [Thread-127014] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:41:51.078 [DEBUG] [Thread-127014] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:41:51.078 [DEBUG] [Thread-127014] [transport.py] [_log()] Compression: none
2025-12-31T11:41:51.078 [DEBUG] [Thread-127014] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:41:51.136 [DEBUG] [Thread-127014] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:41:51.137 [DEBUG] [Thread-127014] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:41:51.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T11:41:51.138 [DEBUG] [Thread-127014] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T11:41:51.139 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:41:51.192 [DEBUG] [Thread-127014] [transport.py] [_log()] userauth is OK
2025-12-31T11:41:51.192 [DEBUG] [Thread-127014] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:41:51.192 [DEBUG] [Thread-127014] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:41:51.192 [DEBUG] [Thread-127014] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T11:41:51.192 [DEBUG] [Thread-127014] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:41:51.210 [INFO] [Thread-127014] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:41:51.211 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T11:41:51.211 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:41:52.044 [DEBUG] [Thread-127014] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:41:52.045 [DEBUG] [Thread-127014] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:41:52.092 [DEBUG] [Thread-127014] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:41:52.092 [DEBUG] [Thread-127014] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:41:52.103 [DEBUG] [Thread-127014] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:41:52.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:41:52.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-12-31T11:41:52.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-12-31T11:41:52.131 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:41:52.131 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:41:52.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:41:52.140 [DEBUG] [Thread-127014] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:42:03.915 [DEBUG] [Thread-127016 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:42:10.125 [DEBUG] [Thread-127017 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:42:18.967 [DEBUG] [Thread-127018 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:42:22.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T11:42:22.162 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T11:42:22.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T11:42:22.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 11, 42, 5), 36.34, 8.34, 0.0, 16.97, 25.93, 0, 0, 0, 2, 0, 0),)
2025-12-31T11:42:22.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 11:42:05
2025-12-31T11:42:23.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T11:42:23.188 [DEBUG] [Thread-127019] [transport.py] [_log()] starting thread (client mode): 0xb9547d90
2025-12-31T11:42:23.188 [DEBUG] [Thread-127019] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:42:23.202 [DEBUG] [Thread-127019] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T11:42:23.202 [INFO] [Thread-127019] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T11:42:23.205 [DEBUG] [Thread-127019] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:42:23.205 [DEBUG] [Thread-127019] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T11:42:23.205 [DEBUG] [Thread-127019] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:42:23.205 [DEBUG] [Thread-127019] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:42:23.205 [DEBUG] [Thread-127019] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:42:23.205 [DEBUG] [Thread-127019] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:42:23.205 [DEBUG] [Thread-127019] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:42:23.205 [DEBUG] [Thread-127019] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:42:23.205 [DEBUG] [Thread-127019] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:42:23.205 [DEBUG] [Thread-127019] [transport.py] [_log()] client lang: <none>
2025-12-31T11:42:23.205 [DEBUG] [Thread-127019] [transport.py] [_log()] server lang: <none>
2025-12-31T11:42:23.205 [DEBUG] [Thread-127019] [transport.py] [_log()] kex follows: False
2025-12-31T11:42:23.205 [DEBUG] [Thread-127019] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:42:23.205 [DEBUG] [Thread-127019] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:42:23.205 [DEBUG] [Thread-127019] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:42:23.205 [DEBUG] [Thread-127019] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:42:23.205 [DEBUG] [Thread-127019] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:42:23.205 [DEBUG] [Thread-127019] [transport.py] [_log()] Compression: none
2025-12-31T11:42:23.205 [DEBUG] [Thread-127019] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:42:23.213 [DEBUG] [Thread-127019] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:42:23.213 [DEBUG] [Thread-127019] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:42:23.213 [DEBUG] [Thread-127019] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T11:42:23.213 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T11:42:23.214 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:42:23.215 [DEBUG] [Thread-127019] [transport.py] [_log()] userauth is OK
2025-12-31T11:42:23.215 [DEBUG] [Thread-127019] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:42:23.215 [DEBUG] [Thread-127019] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:42:23.215 [DEBUG] [Thread-127019] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T11:42:23.215 [DEBUG] [Thread-127019] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:42:23.244 [INFO] [Thread-127019] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:42:23.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:42:23.899 [DEBUG] [Thread-127019] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:42:23.899 [DEBUG] [Thread-127019] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:42:23.899 [DEBUG] [Thread-127019] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T11:42:23.941 [DEBUG] [Thread-127019] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:42:23.942 [DEBUG] [Thread-127019] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:42:23.944 [DEBUG] [Thread-127019] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:42:23.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:42:23.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T11:42:23.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T11:42:23.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T11:42:23.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:42:23.964 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T11:42:23.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:42:23.965 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:42:23.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T11:42:23.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.403963 -999.00  +25.50  17.04     13   -4.60 1 1 1 1 1   888    0 28.57 -29.44 ----- 16.4 17.0 268.2 24.4 32.7 -27.6 32.1 -26.1 30.7 -24.0 31.5 -25.4
2025-12-31T11:42:23.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T11:42:23.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T11:42:23.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.403963
2025-12-31T11:42:23.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T11:42:23.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T11:42:23.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T11:42:23.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T11:42:23.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T11:42:23.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T11:42:05', tmtdew=36.34, humidity=8.34, cloud=0.0, wind=16.97, temperature=25.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T09:41:42.403', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T11:42:23.966 [DEBUG] [Thread-127019] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:42:24.040 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T11:42:24.051 [DEBUG] [Thread-127022] [transport.py] [_log()] starting thread (client mode): 0xb9546fb0
2025-12-31T11:42:24.051 [DEBUG] [Thread-127022] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:42:24.065 [DEBUG] [Thread-127022] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T11:42:24.065 [INFO] [Thread-127022] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T11:42:24.073 [DEBUG] [Thread-127022] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:42:24.073 [DEBUG] [Thread-127022] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T11:42:24.073 [DEBUG] [Thread-127022] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:42:24.073 [DEBUG] [Thread-127022] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:42:24.073 [DEBUG] [Thread-127022] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:42:24.073 [DEBUG] [Thread-127022] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:42:24.073 [DEBUG] [Thread-127022] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:42:24.073 [DEBUG] [Thread-127022] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:42:24.073 [DEBUG] [Thread-127022] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:42:24.073 [DEBUG] [Thread-127022] [transport.py] [_log()] client lang: <none>
2025-12-31T11:42:24.073 [DEBUG] [Thread-127022] [transport.py] [_log()] server lang: <none>
2025-12-31T11:42:24.073 [DEBUG] [Thread-127022] [transport.py] [_log()] kex follows: False
2025-12-31T11:42:24.073 [DEBUG] [Thread-127022] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:42:24.073 [DEBUG] [Thread-127022] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:42:24.073 [DEBUG] [Thread-127022] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:42:24.073 [DEBUG] [Thread-127022] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:42:24.073 [DEBUG] [Thread-127022] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:42:24.073 [DEBUG] [Thread-127022] [transport.py] [_log()] Compression: none
2025-12-31T11:42:24.073 [DEBUG] [Thread-127022] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:42:24.130 [DEBUG] [Thread-127022] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:42:24.130 [DEBUG] [Thread-127022] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:42:24.130 [DEBUG] [Thread-127022] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T11:42:24.131 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T11:42:24.131 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:42:24.191 [DEBUG] [Thread-127022] [transport.py] [_log()] userauth is OK
2025-12-31T11:42:24.191 [DEBUG] [Thread-127022] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:42:24.191 [DEBUG] [Thread-127022] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:42:24.191 [DEBUG] [Thread-127022] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T11:42:24.191 [DEBUG] [Thread-127022] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:42:24.209 [INFO] [Thread-127022] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:42:24.209 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T11:42:24.209 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:42:25.094 [DEBUG] [Thread-127022] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:42:25.094 [DEBUG] [Thread-127022] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:42:25.141 [DEBUG] [Thread-127022] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:42:25.142 [DEBUG] [Thread-127022] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:42:25.150 [DEBUG] [Thread-127022] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:42:25.158 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:42:25.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-12-31T11:42:25.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T11:42:25.174 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:42:25.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:42:25.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:42:25.182 [DEBUG] [Thread-127022] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:42:34.001 [DEBUG] [Thread-127024 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:42:35.704 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:42:35.705 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:42:49.057 [DEBUG] [Thread-127025 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:42:55.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T11:42:55.175 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T11:42:55.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T11:42:55.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 11, 42, 37), 36.67, 7.89, 0.0, 21.32, 25.78, 0, 0, 0, 2, 0, 0),)
2025-12-31T11:42:55.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 11:42:37
2025-12-31T11:42:56.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T11:42:56.166 [DEBUG] [Thread-127026] [transport.py] [_log()] starting thread (client mode): 0xb6b495a0
2025-12-31T11:42:56.166 [DEBUG] [Thread-127026] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:42:56.186 [DEBUG] [Thread-127026] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T11:42:56.187 [INFO] [Thread-127026] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T11:42:56.190 [DEBUG] [Thread-127026] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:42:56.190 [DEBUG] [Thread-127026] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T11:42:56.190 [DEBUG] [Thread-127026] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:42:56.190 [DEBUG] [Thread-127026] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:42:56.190 [DEBUG] [Thread-127026] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:42:56.190 [DEBUG] [Thread-127026] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:42:56.190 [DEBUG] [Thread-127026] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:42:56.190 [DEBUG] [Thread-127026] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:42:56.190 [DEBUG] [Thread-127026] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:42:56.190 [DEBUG] [Thread-127026] [transport.py] [_log()] client lang: <none>
2025-12-31T11:42:56.190 [DEBUG] [Thread-127026] [transport.py] [_log()] server lang: <none>
2025-12-31T11:42:56.190 [DEBUG] [Thread-127026] [transport.py] [_log()] kex follows: False
2025-12-31T11:42:56.190 [DEBUG] [Thread-127026] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:42:56.190 [DEBUG] [Thread-127026] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:42:56.190 [DEBUG] [Thread-127026] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:42:56.190 [DEBUG] [Thread-127026] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:42:56.190 [DEBUG] [Thread-127026] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:42:56.190 [DEBUG] [Thread-127026] [transport.py] [_log()] Compression: none
2025-12-31T11:42:56.190 [DEBUG] [Thread-127026] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:42:56.209 [DEBUG] [Thread-127026] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:42:56.209 [DEBUG] [Thread-127026] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:42:56.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T11:42:56.211 [DEBUG] [Thread-127026] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T11:42:56.211 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:42:56.213 [DEBUG] [Thread-127026] [transport.py] [_log()] userauth is OK
2025-12-31T11:42:56.213 [DEBUG] [Thread-127026] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:42:56.213 [DEBUG] [Thread-127026] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:42:56.213 [DEBUG] [Thread-127026] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T11:42:56.213 [DEBUG] [Thread-127026] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:42:56.250 [INFO] [Thread-127026] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:42:56.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:42:56.894 [DEBUG] [Thread-127026] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:42:56.895 [DEBUG] [Thread-127026] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:42:56.895 [DEBUG] [Thread-127026] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T11:42:56.936 [DEBUG] [Thread-127026] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:42:56.936 [DEBUG] [Thread-127026] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:42:56.940 [DEBUG] [Thread-127026] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:42:56.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:42:56.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T11:42:56.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T11:42:56.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T11:42:56.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:42:56.964 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T11:42:56.964 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:42:56.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:42:56.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T11:42:56.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.404310 -999.00  +25.40  13.46     13   -4.60 1 1 1 1 1   888    0 29.17 -29.99 ----- 15.7 13.5 257.8 16.7 32.8 -26.9 32.2 -25.6 30.9 -22.9 31.5 -24.5
2025-12-31T11:42:56.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T11:42:56.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T11:42:56.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.404310
2025-12-31T11:42:56.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T11:42:56.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T11:42:56.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T11:42:56.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T11:42:56.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T11:42:56.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T11:42:37', tmtdew=36.67, humidity=7.89, cloud=0.0, wind=21.32, temperature=25.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T09:42:12.384', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T11:42:56.967 [DEBUG] [Thread-127026] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:42:57.047 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T11:42:57.062 [DEBUG] [Thread-127029] [transport.py] [_log()] starting thread (client mode): 0xb6b22470
2025-12-31T11:42:57.062 [DEBUG] [Thread-127029] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:42:57.079 [DEBUG] [Thread-127029] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T11:42:57.080 [INFO] [Thread-127029] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T11:42:57.088 [DEBUG] [Thread-127029] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:42:57.088 [DEBUG] [Thread-127029] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T11:42:57.088 [DEBUG] [Thread-127029] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:42:57.088 [DEBUG] [Thread-127029] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:42:57.089 [DEBUG] [Thread-127029] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:42:57.089 [DEBUG] [Thread-127029] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:42:57.089 [DEBUG] [Thread-127029] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:42:57.089 [DEBUG] [Thread-127029] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:42:57.089 [DEBUG] [Thread-127029] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:42:57.089 [DEBUG] [Thread-127029] [transport.py] [_log()] client lang: <none>
2025-12-31T11:42:57.089 [DEBUG] [Thread-127029] [transport.py] [_log()] server lang: <none>
2025-12-31T11:42:57.089 [DEBUG] [Thread-127029] [transport.py] [_log()] kex follows: False
2025-12-31T11:42:57.089 [DEBUG] [Thread-127029] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:42:57.089 [DEBUG] [Thread-127029] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:42:57.089 [DEBUG] [Thread-127029] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:42:57.089 [DEBUG] [Thread-127029] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:42:57.089 [DEBUG] [Thread-127029] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:42:57.089 [DEBUG] [Thread-127029] [transport.py] [_log()] Compression: none
2025-12-31T11:42:57.089 [DEBUG] [Thread-127029] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:42:57.148 [DEBUG] [Thread-127029] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:42:57.149 [DEBUG] [Thread-127029] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:42:57.150 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T11:42:57.150 [DEBUG] [Thread-127029] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T11:42:57.151 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:42:57.208 [DEBUG] [Thread-127029] [transport.py] [_log()] userauth is OK
2025-12-31T11:42:57.208 [DEBUG] [Thread-127029] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:42:57.209 [DEBUG] [Thread-127029] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:42:57.209 [DEBUG] [Thread-127029] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T11:42:57.209 [DEBUG] [Thread-127029] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:42:57.228 [INFO] [Thread-127029] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:42:57.228 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T11:42:57.228 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:42:58.054 [DEBUG] [Thread-127029] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:42:58.054 [DEBUG] [Thread-127029] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:42:58.101 [DEBUG] [Thread-127029] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:42:58.102 [DEBUG] [Thread-127029] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:42:58.110 [DEBUG] [Thread-127029] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:42:58.119 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:42:58.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T11:42:58.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T11:42:58.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:42:58.136 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:42:58.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:42:58.144 [DEBUG] [Thread-127029] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:43:04.092 [DEBUG] [Thread-127031 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:43:10.153 [DEBUG] [Thread-127032 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:43:19.131 [DEBUG] [Thread-127033 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:43:28.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T11:43:28.167 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T11:43:28.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T11:43:28.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 11, 43, 9), 36.71, 7.91, 0.0, 21.99, 26.03, 0, 0, 0, 2, 0, 0),)
2025-12-31T11:43:28.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 11:43:09
2025-12-31T11:43:28.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T11:43:29.140 [DEBUG] [Thread-127034] [transport.py] [_log()] starting thread (client mode): 0xb9545f30
2025-12-31T11:43:29.140 [DEBUG] [Thread-127034] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:43:29.160 [DEBUG] [Thread-127034] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T11:43:29.160 [INFO] [Thread-127034] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T11:43:29.161 [DEBUG] [Thread-127034] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:43:29.161 [DEBUG] [Thread-127034] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T11:43:29.161 [DEBUG] [Thread-127034] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:43:29.161 [DEBUG] [Thread-127034] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:43:29.161 [DEBUG] [Thread-127034] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:43:29.161 [DEBUG] [Thread-127034] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:43:29.161 [DEBUG] [Thread-127034] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:43:29.161 [DEBUG] [Thread-127034] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:43:29.161 [DEBUG] [Thread-127034] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:43:29.161 [DEBUG] [Thread-127034] [transport.py] [_log()] client lang: <none>
2025-12-31T11:43:29.161 [DEBUG] [Thread-127034] [transport.py] [_log()] server lang: <none>
2025-12-31T11:43:29.161 [DEBUG] [Thread-127034] [transport.py] [_log()] kex follows: False
2025-12-31T11:43:29.161 [DEBUG] [Thread-127034] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:43:29.161 [DEBUG] [Thread-127034] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:43:29.161 [DEBUG] [Thread-127034] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:43:29.161 [DEBUG] [Thread-127034] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:43:29.161 [DEBUG] [Thread-127034] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:43:29.161 [DEBUG] [Thread-127034] [transport.py] [_log()] Compression: none
2025-12-31T11:43:29.161 [DEBUG] [Thread-127034] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:43:29.172 [DEBUG] [Thread-127034] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:43:29.172 [DEBUG] [Thread-127034] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:43:29.172 [DEBUG] [Thread-127034] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T11:43:29.173 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T11:43:29.173 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:43:29.174 [DEBUG] [Thread-127034] [transport.py] [_log()] userauth is OK
2025-12-31T11:43:29.174 [DEBUG] [Thread-127034] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:43:29.174 [DEBUG] [Thread-127034] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:43:29.174 [DEBUG] [Thread-127034] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T11:43:29.174 [DEBUG] [Thread-127034] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:43:29.201 [INFO] [Thread-127034] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:43:29.202 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:43:29.874 [DEBUG] [Thread-127034] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:43:29.875 [DEBUG] [Thread-127034] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:43:29.875 [DEBUG] [Thread-127034] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T11:43:29.916 [DEBUG] [Thread-127034] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:43:29.916 [DEBUG] [Thread-127034] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:43:29.919 [DEBUG] [Thread-127034] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:43:29.930 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:43:29.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T11:43:29.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T11:43:29.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T11:43:29.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:43:29.937 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T11:43:29.937 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:43:29.937 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:43:29.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T11:43:29.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.404657 -999.00  +25.20  20.33     12   -5.20 1 1 1 1 1   888    0 28.72 -29.40 ----- 17.8 20.3 276.2 28.1 33.0 -24.4 32.3 -24.5 31.0 -21.7 31.7 -22.0
2025-12-31T11:43:29.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T11:43:29.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T11:43:29.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.404657
2025-12-31T11:43:29.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T11:43:29.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T11:43:29.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T11:43:29.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T11:43:29.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T11:43:29.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T11:43:09', tmtdew=36.71, humidity=7.91, cloud=0.0, wind=21.99, temperature=26.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T09:42:42.365', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T11:43:29.939 [DEBUG] [Thread-127034] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:43:30.030 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T11:43:30.041 [DEBUG] [Thread-127037] [transport.py] [_log()] starting thread (client mode): 0xb6b4b4c0
2025-12-31T11:43:30.041 [DEBUG] [Thread-127037] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:43:30.055 [DEBUG] [Thread-127037] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T11:43:30.055 [INFO] [Thread-127037] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T11:43:30.062 [DEBUG] [Thread-127037] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:43:30.063 [DEBUG] [Thread-127037] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T11:43:30.063 [DEBUG] [Thread-127037] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:43:30.063 [DEBUG] [Thread-127037] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:43:30.063 [DEBUG] [Thread-127037] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:43:30.063 [DEBUG] [Thread-127037] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:43:30.063 [DEBUG] [Thread-127037] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:43:30.063 [DEBUG] [Thread-127037] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:43:30.063 [DEBUG] [Thread-127037] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:43:30.063 [DEBUG] [Thread-127037] [transport.py] [_log()] client lang: <none>
2025-12-31T11:43:30.064 [DEBUG] [Thread-127037] [transport.py] [_log()] server lang: <none>
2025-12-31T11:43:30.064 [DEBUG] [Thread-127037] [transport.py] [_log()] kex follows: False
2025-12-31T11:43:30.064 [DEBUG] [Thread-127037] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:43:30.064 [DEBUG] [Thread-127037] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:43:30.064 [DEBUG] [Thread-127037] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:43:30.064 [DEBUG] [Thread-127037] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:43:30.064 [DEBUG] [Thread-127037] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:43:30.064 [DEBUG] [Thread-127037] [transport.py] [_log()] Compression: none
2025-12-31T11:43:30.064 [DEBUG] [Thread-127037] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:43:30.121 [DEBUG] [Thread-127037] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:43:30.121 [DEBUG] [Thread-127037] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:43:30.122 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T11:43:30.122 [DEBUG] [Thread-127037] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T11:43:30.123 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:43:30.180 [DEBUG] [Thread-127037] [transport.py] [_log()] userauth is OK
2025-12-31T11:43:30.180 [DEBUG] [Thread-127037] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:43:30.180 [DEBUG] [Thread-127037] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:43:30.180 [DEBUG] [Thread-127037] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T11:43:30.180 [DEBUG] [Thread-127037] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:43:30.199 [INFO] [Thread-127037] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:43:30.199 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T11:43:30.199 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:43:31.013 [DEBUG] [Thread-127037] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:43:31.013 [DEBUG] [Thread-127037] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:43:31.061 [DEBUG] [Thread-127037] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:43:31.061 [DEBUG] [Thread-127037] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:43:31.070 [DEBUG] [Thread-127037] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:43:31.078 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:43:31.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T11:43:31.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T11:43:31.097 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:43:31.097 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:43:31.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:43:31.105 [DEBUG] [Thread-127037] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:43:34.164 [DEBUG] [Thread-127039 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:43:35.871 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:43:35.872 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:43:49.214 [DEBUG] [Thread-127040 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:44:01.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T11:44:01.128 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T11:44:01.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T11:44:01.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 11, 43, 41), 36.88, 7.81, 0.0, 23.79, 26.39, 0, 0, 0, 2, 0, 0),)
2025-12-31T11:44:01.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 11:43:41
2025-12-31T11:44:01.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T11:44:02.116 [DEBUG] [Thread-127041] [transport.py] [_log()] starting thread (client mode): 0xb9545ab0
2025-12-31T11:44:02.116 [DEBUG] [Thread-127041] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:44:02.136 [DEBUG] [Thread-127041] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T11:44:02.137 [INFO] [Thread-127041] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T11:44:02.139 [DEBUG] [Thread-127041] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:44:02.140 [DEBUG] [Thread-127041] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T11:44:02.140 [DEBUG] [Thread-127041] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:44:02.140 [DEBUG] [Thread-127041] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:44:02.140 [DEBUG] [Thread-127041] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:44:02.140 [DEBUG] [Thread-127041] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:44:02.140 [DEBUG] [Thread-127041] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:44:02.140 [DEBUG] [Thread-127041] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:44:02.140 [DEBUG] [Thread-127041] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:44:02.140 [DEBUG] [Thread-127041] [transport.py] [_log()] client lang: <none>
2025-12-31T11:44:02.140 [DEBUG] [Thread-127041] [transport.py] [_log()] server lang: <none>
2025-12-31T11:44:02.140 [DEBUG] [Thread-127041] [transport.py] [_log()] kex follows: False
2025-12-31T11:44:02.140 [DEBUG] [Thread-127041] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:44:02.140 [DEBUG] [Thread-127041] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:44:02.140 [DEBUG] [Thread-127041] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:44:02.141 [DEBUG] [Thread-127041] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:44:02.141 [DEBUG] [Thread-127041] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:44:02.141 [DEBUG] [Thread-127041] [transport.py] [_log()] Compression: none
2025-12-31T11:44:02.141 [DEBUG] [Thread-127041] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:44:02.159 [DEBUG] [Thread-127041] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:44:02.160 [DEBUG] [Thread-127041] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:44:02.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T11:44:02.161 [DEBUG] [Thread-127041] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T11:44:02.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:44:02.164 [DEBUG] [Thread-127041] [transport.py] [_log()] userauth is OK
2025-12-31T11:44:02.164 [DEBUG] [Thread-127041] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:44:02.164 [DEBUG] [Thread-127041] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:44:02.164 [DEBUG] [Thread-127041] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T11:44:02.164 [DEBUG] [Thread-127041] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:44:02.196 [INFO] [Thread-127041] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:44:02.197 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:44:02.836 [DEBUG] [Thread-127041] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:44:02.836 [DEBUG] [Thread-127041] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:44:02.837 [DEBUG] [Thread-127041] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T11:44:02.877 [DEBUG] [Thread-127041] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:44:02.877 [DEBUG] [Thread-127041] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:44:02.880 [DEBUG] [Thread-127041] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:44:02.892 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:44:02.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T11:44:02.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T11:44:02.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T11:44:02.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:44:02.904 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T11:44:02.904 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:44:02.904 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:44:02.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T11:44:02.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.405004 -999.00  +25.20  15.98     13   -4.80 1 1 1 1 1   888    0 28.72 -27.58 ----- 19.9 16.0 270.6 23.1 32.8 -24.6 32.2 -24.1 30.7 -22.0 31.6 -23.2
2025-12-31T11:44:02.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T11:44:02.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T11:44:02.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.405004
2025-12-31T11:44:02.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T11:44:02.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T11:44:02.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T11:44:02.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T11:44:02.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T11:44:02.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T11:43:41', tmtdew=36.88, humidity=7.81, cloud=0.0, wind=23.79, temperature=26.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T09:43:12.346', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T11:44:02.906 [DEBUG] [Thread-127041] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:44:02.990 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T11:44:03.002 [DEBUG] [Thread-127044] [transport.py] [_log()] starting thread (client mode): 0xb9547340
2025-12-31T11:44:03.002 [DEBUG] [Thread-127044] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:44:03.017 [DEBUG] [Thread-127044] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T11:44:03.018 [INFO] [Thread-127044] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T11:44:03.025 [DEBUG] [Thread-127044] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:44:03.025 [DEBUG] [Thread-127044] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T11:44:03.026 [DEBUG] [Thread-127044] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:44:03.026 [DEBUG] [Thread-127044] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:44:03.026 [DEBUG] [Thread-127044] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:44:03.026 [DEBUG] [Thread-127044] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:44:03.026 [DEBUG] [Thread-127044] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:44:03.026 [DEBUG] [Thread-127044] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:44:03.026 [DEBUG] [Thread-127044] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:44:03.027 [DEBUG] [Thread-127044] [transport.py] [_log()] client lang: <none>
2025-12-31T11:44:03.027 [DEBUG] [Thread-127044] [transport.py] [_log()] server lang: <none>
2025-12-31T11:44:03.027 [DEBUG] [Thread-127044] [transport.py] [_log()] kex follows: False
2025-12-31T11:44:03.027 [DEBUG] [Thread-127044] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:44:03.027 [DEBUG] [Thread-127044] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:44:03.027 [DEBUG] [Thread-127044] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:44:03.027 [DEBUG] [Thread-127044] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:44:03.027 [DEBUG] [Thread-127044] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:44:03.027 [DEBUG] [Thread-127044] [transport.py] [_log()] Compression: none
2025-12-31T11:44:03.027 [DEBUG] [Thread-127044] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:44:03.087 [DEBUG] [Thread-127044] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:44:03.087 [DEBUG] [Thread-127044] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:44:03.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T11:44:03.089 [DEBUG] [Thread-127044] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T11:44:03.090 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:44:03.146 [DEBUG] [Thread-127044] [transport.py] [_log()] userauth is OK
2025-12-31T11:44:03.146 [DEBUG] [Thread-127044] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:44:03.146 [DEBUG] [Thread-127044] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:44:03.147 [DEBUG] [Thread-127044] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T11:44:03.147 [DEBUG] [Thread-127044] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:44:03.173 [INFO] [Thread-127044] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:44:03.173 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T11:44:03.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:44:04.010 [DEBUG] [Thread-127044] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:44:04.010 [DEBUG] [Thread-127044] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:44:04.059 [DEBUG] [Thread-127044] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:44:04.059 [DEBUG] [Thread-127044] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:44:04.068 [DEBUG] [Thread-127044] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:44:04.077 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:44:04.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T11:44:04.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T11:44:04.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:44:04.096 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:44:04.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:44:04.104 [DEBUG] [Thread-127044] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:44:04.254 [DEBUG] [Thread-127046 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:44:10.213 [DEBUG] [Thread-127047 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:44:19.305 [DEBUG] [Thread-127048 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:44:34.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T11:44:34.127 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T11:44:34.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T11:44:34.338 [DEBUG] [Thread-127049 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:44:34.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 11, 44, 13), 37.18, 7.67, 0.0, 30.91, 26.67, 0, 0, 0, 2, 0, 0),)
2025-12-31T11:44:34.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 11:44:13
2025-12-31T11:44:34.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T11:44:35.114 [DEBUG] [Thread-127050] [transport.py] [_log()] starting thread (client mode): 0xb9546140
2025-12-31T11:44:35.115 [DEBUG] [Thread-127050] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:44:35.136 [DEBUG] [Thread-127050] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T11:44:35.136 [INFO] [Thread-127050] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T11:44:35.139 [DEBUG] [Thread-127050] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:44:35.139 [DEBUG] [Thread-127050] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T11:44:35.139 [DEBUG] [Thread-127050] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:44:35.139 [DEBUG] [Thread-127050] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:44:35.139 [DEBUG] [Thread-127050] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:44:35.139 [DEBUG] [Thread-127050] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:44:35.140 [DEBUG] [Thread-127050] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:44:35.140 [DEBUG] [Thread-127050] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:44:35.140 [DEBUG] [Thread-127050] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:44:35.140 [DEBUG] [Thread-127050] [transport.py] [_log()] client lang: <none>
2025-12-31T11:44:35.140 [DEBUG] [Thread-127050] [transport.py] [_log()] server lang: <none>
2025-12-31T11:44:35.140 [DEBUG] [Thread-127050] [transport.py] [_log()] kex follows: False
2025-12-31T11:44:35.140 [DEBUG] [Thread-127050] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:44:35.140 [DEBUG] [Thread-127050] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:44:35.140 [DEBUG] [Thread-127050] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:44:35.140 [DEBUG] [Thread-127050] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:44:35.140 [DEBUG] [Thread-127050] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:44:35.140 [DEBUG] [Thread-127050] [transport.py] [_log()] Compression: none
2025-12-31T11:44:35.140 [DEBUG] [Thread-127050] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:44:35.159 [DEBUG] [Thread-127050] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:44:35.159 [DEBUG] [Thread-127050] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:44:35.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T11:44:35.160 [DEBUG] [Thread-127050] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T11:44:35.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:44:35.162 [DEBUG] [Thread-127050] [transport.py] [_log()] userauth is OK
2025-12-31T11:44:35.163 [DEBUG] [Thread-127050] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:44:35.163 [DEBUG] [Thread-127050] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:44:35.163 [DEBUG] [Thread-127050] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T11:44:35.163 [DEBUG] [Thread-127050] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:44:35.177 [INFO] [Thread-127050] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:44:35.177 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:44:35.903 [DEBUG] [Thread-127050] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:44:35.903 [DEBUG] [Thread-127050] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:44:35.903 [DEBUG] [Thread-127050] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T11:44:35.944 [DEBUG] [Thread-127050] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:44:35.944 [DEBUG] [Thread-127050] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:44:35.947 [DEBUG] [Thread-127050] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:44:35.956 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:44:35.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T11:44:35.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T11:44:35.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T11:44:35.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:44:35.964 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T11:44:35.964 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:44:35.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:44:35.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T11:44:35.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.405352 -999.00  +25.60  16.55     13   -4.30 1 1 1 1 1   888    0 29.49 -29.98 ----- 19.1 16.6 280.7 24.2 32.9 -25.7 32.2 -24.7 30.8 -23.0 31.7 -22.3
2025-12-31T11:44:35.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T11:44:35.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T11:44:35.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.405352
2025-12-31T11:44:35.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T11:44:35.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T11:44:35.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T11:44:35.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T11:44:35.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T11:44:35.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T11:44:13', tmtdew=37.18, humidity=7.67, cloud=0.0, wind=30.91, temperature=26.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T09:43:42.413', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T11:44:35.967 [DEBUG] [Thread-127050] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:44:36.012 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:44:36.013 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:44:36.049 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T11:44:36.062 [DEBUG] [Thread-127053] [transport.py] [_log()] starting thread (client mode): 0xb6b21e40
2025-12-31T11:44:36.062 [DEBUG] [Thread-127053] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:44:36.081 [DEBUG] [Thread-127053] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T11:44:36.081 [INFO] [Thread-127053] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T11:44:36.090 [DEBUG] [Thread-127053] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:44:36.091 [DEBUG] [Thread-127053] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T11:44:36.091 [DEBUG] [Thread-127053] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:44:36.091 [DEBUG] [Thread-127053] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:44:36.091 [DEBUG] [Thread-127053] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:44:36.091 [DEBUG] [Thread-127053] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:44:36.091 [DEBUG] [Thread-127053] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:44:36.091 [DEBUG] [Thread-127053] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:44:36.091 [DEBUG] [Thread-127053] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:44:36.091 [DEBUG] [Thread-127053] [transport.py] [_log()] client lang: <none>
2025-12-31T11:44:36.091 [DEBUG] [Thread-127053] [transport.py] [_log()] server lang: <none>
2025-12-31T11:44:36.091 [DEBUG] [Thread-127053] [transport.py] [_log()] kex follows: False
2025-12-31T11:44:36.091 [DEBUG] [Thread-127053] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:44:36.092 [DEBUG] [Thread-127053] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:44:36.092 [DEBUG] [Thread-127053] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:44:36.092 [DEBUG] [Thread-127053] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:44:36.092 [DEBUG] [Thread-127053] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:44:36.092 [DEBUG] [Thread-127053] [transport.py] [_log()] Compression: none
2025-12-31T11:44:36.092 [DEBUG] [Thread-127053] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:44:36.149 [DEBUG] [Thread-127053] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:44:36.150 [DEBUG] [Thread-127053] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:44:36.150 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T11:44:36.151 [DEBUG] [Thread-127053] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T11:44:36.152 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:44:36.208 [DEBUG] [Thread-127053] [transport.py] [_log()] userauth is OK
2025-12-31T11:44:36.208 [DEBUG] [Thread-127053] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:44:36.209 [DEBUG] [Thread-127053] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:44:36.209 [DEBUG] [Thread-127053] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T11:44:36.209 [DEBUG] [Thread-127053] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:44:36.227 [INFO] [Thread-127053] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:44:36.227 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T11:44:36.228 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:44:37.078 [DEBUG] [Thread-127053] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:44:37.078 [DEBUG] [Thread-127053] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:44:37.126 [DEBUG] [Thread-127053] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:44:37.127 [DEBUG] [Thread-127053] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:44:37.136 [DEBUG] [Thread-127053] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:44:37.145 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:44:37.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-12-31T11:44:37.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T11:44:37.164 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:44:37.165 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:44:37.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:44:37.173 [DEBUG] [Thread-127053] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:44:49.372 [DEBUG] [Thread-127055 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:45:04.420 [DEBUG] [Thread-127056 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:45:07.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T11:45:07.181 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T11:45:07.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T11:45:07.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 11, 44, 45), 37.36, 7.59, 0.0, 25.28, 26.49, 0, 0, 0, 2, 0, 0),)
2025-12-31T11:45:07.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 11:44:45
2025-12-31T11:45:08.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T11:45:08.161 [DEBUG] [Thread-127057] [transport.py] [_log()] starting thread (client mode): 0xb6b23fd0
2025-12-31T11:45:08.161 [DEBUG] [Thread-127057] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:45:08.181 [DEBUG] [Thread-127057] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T11:45:08.181 [INFO] [Thread-127057] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T11:45:08.184 [DEBUG] [Thread-127057] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:45:08.184 [DEBUG] [Thread-127057] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T11:45:08.185 [DEBUG] [Thread-127057] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:45:08.185 [DEBUG] [Thread-127057] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:45:08.185 [DEBUG] [Thread-127057] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:45:08.185 [DEBUG] [Thread-127057] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:45:08.185 [DEBUG] [Thread-127057] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:45:08.185 [DEBUG] [Thread-127057] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:45:08.185 [DEBUG] [Thread-127057] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:45:08.185 [DEBUG] [Thread-127057] [transport.py] [_log()] client lang: <none>
2025-12-31T11:45:08.185 [DEBUG] [Thread-127057] [transport.py] [_log()] server lang: <none>
2025-12-31T11:45:08.185 [DEBUG] [Thread-127057] [transport.py] [_log()] kex follows: False
2025-12-31T11:45:08.185 [DEBUG] [Thread-127057] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:45:08.185 [DEBUG] [Thread-127057] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:45:08.185 [DEBUG] [Thread-127057] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:45:08.185 [DEBUG] [Thread-127057] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:45:08.185 [DEBUG] [Thread-127057] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:45:08.185 [DEBUG] [Thread-127057] [transport.py] [_log()] Compression: none
2025-12-31T11:45:08.185 [DEBUG] [Thread-127057] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:45:08.202 [DEBUG] [Thread-127057] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:45:08.202 [DEBUG] [Thread-127057] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:45:08.203 [DEBUG] [Thread-127057] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T11:45:08.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T11:45:08.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:45:08.204 [DEBUG] [Thread-127057] [transport.py] [_log()] userauth is OK
2025-12-31T11:45:08.205 [DEBUG] [Thread-127057] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:45:08.205 [DEBUG] [Thread-127057] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:45:08.205 [DEBUG] [Thread-127057] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T11:45:08.205 [DEBUG] [Thread-127057] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:45:08.224 [INFO] [Thread-127057] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:45:08.225 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:45:10.267 [DEBUG] [Thread-127059 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:45:17.855 [DEBUG] [Thread-127057] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:45:17.855 [DEBUG] [Thread-127057] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:45:17.856 [DEBUG] [Thread-127057] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T11:45:17.896 [DEBUG] [Thread-127057] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:45:17.896 [DEBUG] [Thread-127057] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:45:17.899 [DEBUG] [Thread-127057] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:45:17.910 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:45:17.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T11:45:17.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T11:45:17.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T11:45:17.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:45:17.922 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T11:45:17.922 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:45:17.922 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:45:17.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T11:45:17.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.405699 -999.00  +25.90  32.80     13   -4.30 1 1 2 1 1   888    0 29.03 -28.55 ----- 29.8 32.8 277.6 41.0 33.0 -25.8 32.3 -24.4 30.9 -24.3 31.8 -22.4
2025-12-31T11:45:17.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T11:45:17.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T11:45:17.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.405699
2025-12-31T11:45:17.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T11:45:17.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T11:45:17.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T11:45:17.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T11:45:17.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T11:45:17.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T11:44:45', tmtdew=37.36, humidity=7.59, cloud=0.0, wind=25.28, temperature=26.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T09:44:12.394', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T11:45:17.927 [DEBUG] [Thread-127057] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:45:18.012 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T11:45:18.023 [DEBUG] [Thread-127061] [transport.py] [_log()] starting thread (client mode): 0xb6bb34f0
2025-12-31T11:45:18.023 [DEBUG] [Thread-127061] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:45:18.038 [DEBUG] [Thread-127061] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T11:45:18.038 [INFO] [Thread-127061] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T11:45:18.045 [DEBUG] [Thread-127061] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:45:18.045 [DEBUG] [Thread-127061] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T11:45:18.045 [DEBUG] [Thread-127061] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:45:18.045 [DEBUG] [Thread-127061] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:45:18.045 [DEBUG] [Thread-127061] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:45:18.045 [DEBUG] [Thread-127061] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:45:18.045 [DEBUG] [Thread-127061] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:45:18.045 [DEBUG] [Thread-127061] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:45:18.045 [DEBUG] [Thread-127061] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:45:18.045 [DEBUG] [Thread-127061] [transport.py] [_log()] client lang: <none>
2025-12-31T11:45:18.045 [DEBUG] [Thread-127061] [transport.py] [_log()] server lang: <none>
2025-12-31T11:45:18.045 [DEBUG] [Thread-127061] [transport.py] [_log()] kex follows: False
2025-12-31T11:45:18.045 [DEBUG] [Thread-127061] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:45:18.045 [DEBUG] [Thread-127061] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:45:18.045 [DEBUG] [Thread-127061] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:45:18.045 [DEBUG] [Thread-127061] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:45:18.045 [DEBUG] [Thread-127061] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:45:18.045 [DEBUG] [Thread-127061] [transport.py] [_log()] Compression: none
2025-12-31T11:45:18.045 [DEBUG] [Thread-127061] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:45:18.100 [DEBUG] [Thread-127061] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:45:18.100 [DEBUG] [Thread-127061] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:45:18.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T11:45:18.101 [DEBUG] [Thread-127061] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T11:45:18.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:45:18.158 [DEBUG] [Thread-127061] [transport.py] [_log()] userauth is OK
2025-12-31T11:45:18.158 [DEBUG] [Thread-127061] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:45:18.158 [DEBUG] [Thread-127061] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:45:18.158 [DEBUG] [Thread-127061] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T11:45:18.158 [DEBUG] [Thread-127061] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:45:18.171 [INFO] [Thread-127061] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:45:18.172 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T11:45:18.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:45:18.995 [DEBUG] [Thread-127061] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:45:18.995 [DEBUG] [Thread-127061] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:45:19.043 [DEBUG] [Thread-127061] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:45:19.043 [DEBUG] [Thread-127061] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:45:19.053 [DEBUG] [Thread-127061] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:45:19.065 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:45:19.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T11:45:19.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T11:45:19.081 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:45:19.081 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:45:19.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:45:19.089 [DEBUG] [Thread-127061] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:45:19.454 [DEBUG] [Thread-127063 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:45:34.497 [DEBUG] [Thread-127064 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:45:36.156 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:45:36.157 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:45:49.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T11:45:49.111 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T11:45:49.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T11:45:49.535 [DEBUG] [Thread-127065 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:45:49.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 11, 45, 17), 37.57, 7.43, 0.0, 24.01, 26.18, 0, 0, 0, 2, 0, 0),)
2025-12-31T11:45:49.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 11:45:17
2025-12-31T11:45:49.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T11:45:50.126 [DEBUG] [Thread-127066] [transport.py] [_log()] starting thread (client mode): 0xb6b204f0
2025-12-31T11:45:50.126 [DEBUG] [Thread-127066] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:45:50.147 [DEBUG] [Thread-127066] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T11:45:50.147 [INFO] [Thread-127066] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T11:45:50.148 [DEBUG] [Thread-127066] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:45:50.148 [DEBUG] [Thread-127066] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T11:45:50.148 [DEBUG] [Thread-127066] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:45:50.148 [DEBUG] [Thread-127066] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:45:50.148 [DEBUG] [Thread-127066] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:45:50.148 [DEBUG] [Thread-127066] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:45:50.148 [DEBUG] [Thread-127066] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:45:50.148 [DEBUG] [Thread-127066] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:45:50.148 [DEBUG] [Thread-127066] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:45:50.148 [DEBUG] [Thread-127066] [transport.py] [_log()] client lang: <none>
2025-12-31T11:45:50.148 [DEBUG] [Thread-127066] [transport.py] [_log()] server lang: <none>
2025-12-31T11:45:50.148 [DEBUG] [Thread-127066] [transport.py] [_log()] kex follows: False
2025-12-31T11:45:50.148 [DEBUG] [Thread-127066] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:45:50.148 [DEBUG] [Thread-127066] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:45:50.148 [DEBUG] [Thread-127066] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:45:50.148 [DEBUG] [Thread-127066] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:45:50.149 [DEBUG] [Thread-127066] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:45:50.149 [DEBUG] [Thread-127066] [transport.py] [_log()] Compression: none
2025-12-31T11:45:50.149 [DEBUG] [Thread-127066] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:45:50.157 [DEBUG] [Thread-127066] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:45:50.157 [DEBUG] [Thread-127066] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:45:50.157 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T11:45:50.157 [DEBUG] [Thread-127066] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T11:45:50.157 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:45:50.159 [DEBUG] [Thread-127066] [transport.py] [_log()] userauth is OK
2025-12-31T11:45:50.159 [DEBUG] [Thread-127066] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:45:50.159 [DEBUG] [Thread-127066] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:45:50.159 [DEBUG] [Thread-127066] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T11:45:50.159 [DEBUG] [Thread-127066] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:45:50.169 [INFO] [Thread-127066] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:45:50.169 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:45:50.806 [DEBUG] [Thread-127066] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:45:50.806 [DEBUG] [Thread-127066] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:45:50.806 [DEBUG] [Thread-127066] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T11:45:50.847 [DEBUG] [Thread-127066] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:45:50.847 [DEBUG] [Thread-127066] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:45:50.850 [DEBUG] [Thread-127066] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:45:50.862 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:45:50.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T11:45:50.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T11:45:50.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T11:45:50.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:45:50.870 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T11:45:50.870 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:45:50.870 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:45:50.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T11:45:50.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.406393 -999.00  +25.50  24.04     12   -5.10 1 1 1 1 1   888    0 28.92 -23.63 ----- 21.6 24.0 307.0 37.2 32.6 -27.0 31.9 -26.9 30.7 -25.8 31.5 -24.2
2025-12-31T11:45:50.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T11:45:50.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T11:45:50.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.406393
2025-12-31T11:45:50.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T11:45:50.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T11:45:50.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T11:45:50.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T11:45:50.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T11:45:50.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T11:45:17', tmtdew=37.57, humidity=7.43, cloud=0.0, wind=24.01, temperature=26.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T09:45:12.355', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T11:45:50.872 [DEBUG] [Thread-127066] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:45:50.945 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T11:45:50.957 [DEBUG] [Thread-127069] [transport.py] [_log()] starting thread (client mode): 0xb9547730
2025-12-31T11:45:50.957 [DEBUG] [Thread-127069] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:45:50.972 [DEBUG] [Thread-127069] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T11:45:50.972 [INFO] [Thread-127069] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T11:45:50.979 [DEBUG] [Thread-127069] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:45:50.979 [DEBUG] [Thread-127069] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T11:45:50.979 [DEBUG] [Thread-127069] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:45:50.979 [DEBUG] [Thread-127069] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:45:50.979 [DEBUG] [Thread-127069] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:45:50.979 [DEBUG] [Thread-127069] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:45:50.979 [DEBUG] [Thread-127069] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:45:50.979 [DEBUG] [Thread-127069] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:45:50.979 [DEBUG] [Thread-127069] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:45:50.979 [DEBUG] [Thread-127069] [transport.py] [_log()] client lang: <none>
2025-12-31T11:45:50.979 [DEBUG] [Thread-127069] [transport.py] [_log()] server lang: <none>
2025-12-31T11:45:50.979 [DEBUG] [Thread-127069] [transport.py] [_log()] kex follows: False
2025-12-31T11:45:50.979 [DEBUG] [Thread-127069] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:45:50.979 [DEBUG] [Thread-127069] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:45:50.979 [DEBUG] [Thread-127069] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:45:50.980 [DEBUG] [Thread-127069] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:45:50.980 [DEBUG] [Thread-127069] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:45:50.980 [DEBUG] [Thread-127069] [transport.py] [_log()] Compression: none
2025-12-31T11:45:50.980 [DEBUG] [Thread-127069] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:45:51.035 [DEBUG] [Thread-127069] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:45:51.035 [DEBUG] [Thread-127069] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:45:51.035 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T11:45:51.035 [DEBUG] [Thread-127069] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T11:45:51.035 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:45:51.095 [DEBUG] [Thread-127069] [transport.py] [_log()] userauth is OK
2025-12-31T11:45:51.095 [DEBUG] [Thread-127069] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:45:51.095 [DEBUG] [Thread-127069] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:45:51.095 [DEBUG] [Thread-127069] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T11:45:51.095 [DEBUG] [Thread-127069] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:45:51.109 [INFO] [Thread-127069] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:45:51.109 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T11:45:51.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:45:51.997 [DEBUG] [Thread-127069] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:45:51.998 [DEBUG] [Thread-127069] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:45:52.046 [DEBUG] [Thread-127069] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:45:52.046 [DEBUG] [Thread-127069] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:45:52.055 [DEBUG] [Thread-127069] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:45:52.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:45:52.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T11:45:52.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T11:45:52.082 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:45:52.082 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:45:52.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:45:52.090 [DEBUG] [Thread-127069] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:46:04.568 [DEBUG] [Thread-127071 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:46:10.321 [DEBUG] [Thread-127072 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:46:19.611 [DEBUG] [Thread-127073 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:46:22.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T11:46:22.101 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T11:46:22.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T11:46:22.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 11, 45, 49), 37.74, 7.49, 0.0, 20.35, 26.15, 0, 0, 0, 2, 0, 0),)
2025-12-31T11:46:22.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 11:45:49
2025-12-31T11:46:23.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T11:46:23.161 [DEBUG] [Thread-127074] [transport.py] [_log()] starting thread (client mode): 0xb6bb34f0
2025-12-31T11:46:23.161 [DEBUG] [Thread-127074] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:46:23.182 [DEBUG] [Thread-127074] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T11:46:23.182 [INFO] [Thread-127074] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T11:46:23.185 [DEBUG] [Thread-127074] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:46:23.185 [DEBUG] [Thread-127074] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T11:46:23.185 [DEBUG] [Thread-127074] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:46:23.185 [DEBUG] [Thread-127074] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:46:23.185 [DEBUG] [Thread-127074] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:46:23.185 [DEBUG] [Thread-127074] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:46:23.185 [DEBUG] [Thread-127074] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:46:23.185 [DEBUG] [Thread-127074] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:46:23.185 [DEBUG] [Thread-127074] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:46:23.185 [DEBUG] [Thread-127074] [transport.py] [_log()] client lang: <none>
2025-12-31T11:46:23.185 [DEBUG] [Thread-127074] [transport.py] [_log()] server lang: <none>
2025-12-31T11:46:23.185 [DEBUG] [Thread-127074] [transport.py] [_log()] kex follows: False
2025-12-31T11:46:23.185 [DEBUG] [Thread-127074] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:46:23.185 [DEBUG] [Thread-127074] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:46:23.185 [DEBUG] [Thread-127074] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:46:23.185 [DEBUG] [Thread-127074] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:46:23.185 [DEBUG] [Thread-127074] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:46:23.185 [DEBUG] [Thread-127074] [transport.py] [_log()] Compression: none
2025-12-31T11:46:23.186 [DEBUG] [Thread-127074] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:46:23.203 [DEBUG] [Thread-127074] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:46:23.203 [DEBUG] [Thread-127074] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:46:23.203 [DEBUG] [Thread-127074] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T11:46:23.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T11:46:23.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:46:23.204 [DEBUG] [Thread-127074] [transport.py] [_log()] userauth is OK
2025-12-31T11:46:23.204 [DEBUG] [Thread-127074] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:46:23.204 [DEBUG] [Thread-127074] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:46:23.204 [DEBUG] [Thread-127074] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T11:46:23.204 [DEBUG] [Thread-127074] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:46:23.216 [INFO] [Thread-127074] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:46:23.216 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:46:24.041 [DEBUG] [Thread-127074] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:46:24.041 [DEBUG] [Thread-127074] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:46:24.041 [DEBUG] [Thread-127074] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T11:46:24.081 [DEBUG] [Thread-127074] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:46:24.082 [DEBUG] [Thread-127074] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:46:24.084 [DEBUG] [Thread-127074] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:46:24.096 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:46:24.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T11:46:24.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T11:46:24.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T11:46:24.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:46:24.101 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T11:46:24.101 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:46:24.101 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:46:24.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T11:46:24.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.406740 -999.00  +25.40  19.84     13   -4.90 1 1 1 1 1   888    0 29.89 -21.70 ----- 20.0 19.8 296.1 33.3 32.5 -27.2 31.8 -26.1 30.6 -26.2 31.5 -23.7
2025-12-31T11:46:24.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T11:46:24.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T11:46:24.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.406740
2025-12-31T11:46:24.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T11:46:24.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T11:46:24.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T11:46:24.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T11:46:24.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T11:46:24.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T11:45:49', tmtdew=37.74, humidity=7.49, cloud=0.0, wind=20.35, temperature=26.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T09:45:42.336', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T11:46:24.102 [DEBUG] [Thread-127074] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:46:24.179 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T11:46:24.190 [DEBUG] [Thread-127077] [transport.py] [_log()] starting thread (client mode): 0xb6bb1ba0
2025-12-31T11:46:24.191 [DEBUG] [Thread-127077] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:46:24.205 [DEBUG] [Thread-127077] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T11:46:24.205 [INFO] [Thread-127077] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T11:46:24.213 [DEBUG] [Thread-127077] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:46:24.213 [DEBUG] [Thread-127077] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T11:46:24.213 [DEBUG] [Thread-127077] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:46:24.213 [DEBUG] [Thread-127077] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:46:24.214 [DEBUG] [Thread-127077] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:46:24.214 [DEBUG] [Thread-127077] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:46:24.214 [DEBUG] [Thread-127077] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:46:24.214 [DEBUG] [Thread-127077] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:46:24.214 [DEBUG] [Thread-127077] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:46:24.214 [DEBUG] [Thread-127077] [transport.py] [_log()] client lang: <none>
2025-12-31T11:46:24.214 [DEBUG] [Thread-127077] [transport.py] [_log()] server lang: <none>
2025-12-31T11:46:24.214 [DEBUG] [Thread-127077] [transport.py] [_log()] kex follows: False
2025-12-31T11:46:24.214 [DEBUG] [Thread-127077] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:46:24.214 [DEBUG] [Thread-127077] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:46:24.215 [DEBUG] [Thread-127077] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:46:24.215 [DEBUG] [Thread-127077] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:46:24.215 [DEBUG] [Thread-127077] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:46:24.215 [DEBUG] [Thread-127077] [transport.py] [_log()] Compression: none
2025-12-31T11:46:24.215 [DEBUG] [Thread-127077] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:46:24.274 [DEBUG] [Thread-127077] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:46:24.274 [DEBUG] [Thread-127077] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:46:24.275 [DEBUG] [Thread-127077] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T11:46:24.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T11:46:24.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:46:24.334 [DEBUG] [Thread-127077] [transport.py] [_log()] userauth is OK
2025-12-31T11:46:24.334 [DEBUG] [Thread-127077] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:46:24.335 [DEBUG] [Thread-127077] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:46:24.335 [DEBUG] [Thread-127077] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T11:46:24.335 [DEBUG] [Thread-127077] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:46:24.357 [INFO] [Thread-127077] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:46:24.357 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T11:46:24.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:46:25.184 [DEBUG] [Thread-127077] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:46:25.184 [DEBUG] [Thread-127077] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:46:25.232 [DEBUG] [Thread-127077] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:46:25.232 [DEBUG] [Thread-127077] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:46:25.241 [DEBUG] [Thread-127077] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:46:25.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:46:25.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T11:46:25.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-12-31T11:46:25.269 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:46:25.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:46:25.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:46:25.278 [DEBUG] [Thread-127077] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:46:34.642 [DEBUG] [Thread-127079 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:46:36.296 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:46:36.297 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:46:49.703 [DEBUG] [Thread-127080 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:46:55.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T11:46:55.300 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T11:46:55.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T11:46:56.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 11, 46, 22), 37.3, 7.72, 0.0, 19.48, 26.0, 0, 0, 0, 2, 0, 0),)
2025-12-31T11:46:56.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 11:46:22
2025-12-31T11:46:56.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T11:46:56.398 [DEBUG] [Thread-127081] [transport.py] [_log()] starting thread (client mode): 0xbbfcdf00
2025-12-31T11:46:56.398 [DEBUG] [Thread-127081] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:46:56.418 [DEBUG] [Thread-127081] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T11:46:56.419 [INFO] [Thread-127081] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T11:46:56.422 [DEBUG] [Thread-127081] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:46:56.422 [DEBUG] [Thread-127081] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T11:46:56.422 [DEBUG] [Thread-127081] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:46:56.422 [DEBUG] [Thread-127081] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:46:56.422 [DEBUG] [Thread-127081] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:46:56.422 [DEBUG] [Thread-127081] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:46:56.422 [DEBUG] [Thread-127081] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:46:56.422 [DEBUG] [Thread-127081] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:46:56.422 [DEBUG] [Thread-127081] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:46:56.422 [DEBUG] [Thread-127081] [transport.py] [_log()] client lang: <none>
2025-12-31T11:46:56.422 [DEBUG] [Thread-127081] [transport.py] [_log()] server lang: <none>
2025-12-31T11:46:56.422 [DEBUG] [Thread-127081] [transport.py] [_log()] kex follows: False
2025-12-31T11:46:56.422 [DEBUG] [Thread-127081] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:46:56.422 [DEBUG] [Thread-127081] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:46:56.422 [DEBUG] [Thread-127081] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:46:56.422 [DEBUG] [Thread-127081] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:46:56.422 [DEBUG] [Thread-127081] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:46:56.422 [DEBUG] [Thread-127081] [transport.py] [_log()] Compression: none
2025-12-31T11:46:56.422 [DEBUG] [Thread-127081] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:46:56.441 [DEBUG] [Thread-127081] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:46:56.441 [DEBUG] [Thread-127081] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:46:56.441 [DEBUG] [Thread-127081] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T11:46:56.441 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T11:46:56.441 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:46:56.442 [DEBUG] [Thread-127081] [transport.py] [_log()] userauth is OK
2025-12-31T11:46:56.442 [DEBUG] [Thread-127081] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:46:56.442 [DEBUG] [Thread-127081] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:46:56.442 [DEBUG] [Thread-127081] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T11:46:56.442 [DEBUG] [Thread-127081] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:46:56.460 [INFO] [Thread-127081] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:46:56.460 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:46:57.088 [DEBUG] [Thread-127081] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:46:57.088 [DEBUG] [Thread-127081] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:46:57.088 [DEBUG] [Thread-127081] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T11:46:57.128 [DEBUG] [Thread-127081] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:46:57.128 [DEBUG] [Thread-127081] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:46:57.131 [DEBUG] [Thread-127081] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:46:57.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:46:57.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T11:46:57.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T11:46:57.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T11:46:57.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:46:57.150 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T11:46:57.150 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:46:57.150 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:46:57.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T11:46:57.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.407088 -999.00  +25.60  17.37     13   -4.70 1 1 1 1 1   888    0 29.03 -19.56 ----- 16.4 17.4 277.0 20.4 32.5 -24.9 31.9 -24.8 30.7 -22.8 31.5 -22.9
2025-12-31T11:46:57.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T11:46:57.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T11:46:57.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.407088
2025-12-31T11:46:57.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T11:46:57.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T11:46:57.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T11:46:57.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T11:46:57.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T11:46:57.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T11:46:22', tmtdew=37.3, humidity=7.72, cloud=0.0, wind=19.48, temperature=26.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T09:46:12.403', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T11:46:57.151 [DEBUG] [Thread-127081] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:46:57.226 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T11:46:57.240 [DEBUG] [Thread-127084] [transport.py] [_log()] starting thread (client mode): 0xbbfce950
2025-12-31T11:46:57.240 [DEBUG] [Thread-127084] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:46:57.259 [DEBUG] [Thread-127084] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T11:46:57.259 [INFO] [Thread-127084] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T11:46:57.266 [DEBUG] [Thread-127084] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:46:57.266 [DEBUG] [Thread-127084] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T11:46:57.266 [DEBUG] [Thread-127084] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:46:57.266 [DEBUG] [Thread-127084] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:46:57.267 [DEBUG] [Thread-127084] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:46:57.267 [DEBUG] [Thread-127084] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:46:57.267 [DEBUG] [Thread-127084] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:46:57.267 [DEBUG] [Thread-127084] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:46:57.267 [DEBUG] [Thread-127084] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:46:57.267 [DEBUG] [Thread-127084] [transport.py] [_log()] client lang: <none>
2025-12-31T11:46:57.267 [DEBUG] [Thread-127084] [transport.py] [_log()] server lang: <none>
2025-12-31T11:46:57.267 [DEBUG] [Thread-127084] [transport.py] [_log()] kex follows: False
2025-12-31T11:46:57.267 [DEBUG] [Thread-127084] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:46:57.267 [DEBUG] [Thread-127084] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:46:57.267 [DEBUG] [Thread-127084] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:46:57.267 [DEBUG] [Thread-127084] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:46:57.267 [DEBUG] [Thread-127084] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:46:57.267 [DEBUG] [Thread-127084] [transport.py] [_log()] Compression: none
2025-12-31T11:46:57.267 [DEBUG] [Thread-127084] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:46:57.321 [DEBUG] [Thread-127084] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:46:57.321 [DEBUG] [Thread-127084] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:46:57.321 [DEBUG] [Thread-127084] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T11:46:57.321 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T11:46:57.321 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:46:57.379 [DEBUG] [Thread-127084] [transport.py] [_log()] userauth is OK
2025-12-31T11:46:57.379 [DEBUG] [Thread-127084] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:46:57.379 [DEBUG] [Thread-127084] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:46:57.379 [DEBUG] [Thread-127084] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T11:46:57.379 [DEBUG] [Thread-127084] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:46:57.392 [INFO] [Thread-127084] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:46:57.392 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T11:46:57.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:46:58.195 [DEBUG] [Thread-127084] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:46:58.195 [DEBUG] [Thread-127084] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:46:58.242 [DEBUG] [Thread-127084] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:46:58.242 [DEBUG] [Thread-127084] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:46:58.250 [DEBUG] [Thread-127084] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:46:58.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:46:58.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T11:46:58.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T11:46:58.274 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:46:58.274 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:46:58.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:46:58.282 [DEBUG] [Thread-127084] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:47:04.734 [DEBUG] [Thread-127086 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:47:10.382 [DEBUG] [Thread-127087 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:47:19.790 [DEBUG] [Thread-127088 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:47:28.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T11:47:28.304 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T11:47:28.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T11:47:29.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 11, 46, 54), 36.85, 7.89, 0.0, 24.81, 25.58, 0, 0, 0, 2, 0, 0),)
2025-12-31T11:47:29.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 11:46:54
2025-12-31T11:47:29.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T11:47:29.302 [DEBUG] [Thread-127089] [transport.py] [_log()] starting thread (client mode): 0xb6b4ae60
2025-12-31T11:47:29.302 [DEBUG] [Thread-127089] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:47:29.322 [DEBUG] [Thread-127089] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T11:47:29.322 [INFO] [Thread-127089] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T11:47:29.325 [DEBUG] [Thread-127089] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:47:29.326 [DEBUG] [Thread-127089] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T11:47:29.326 [DEBUG] [Thread-127089] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:47:29.326 [DEBUG] [Thread-127089] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:47:29.326 [DEBUG] [Thread-127089] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:47:29.326 [DEBUG] [Thread-127089] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:47:29.326 [DEBUG] [Thread-127089] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:47:29.326 [DEBUG] [Thread-127089] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:47:29.326 [DEBUG] [Thread-127089] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:47:29.326 [DEBUG] [Thread-127089] [transport.py] [_log()] client lang: <none>
2025-12-31T11:47:29.326 [DEBUG] [Thread-127089] [transport.py] [_log()] server lang: <none>
2025-12-31T11:47:29.326 [DEBUG] [Thread-127089] [transport.py] [_log()] kex follows: False
2025-12-31T11:47:29.326 [DEBUG] [Thread-127089] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:47:29.326 [DEBUG] [Thread-127089] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:47:29.326 [DEBUG] [Thread-127089] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:47:29.326 [DEBUG] [Thread-127089] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:47:29.326 [DEBUG] [Thread-127089] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:47:29.326 [DEBUG] [Thread-127089] [transport.py] [_log()] Compression: none
2025-12-31T11:47:29.326 [DEBUG] [Thread-127089] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:47:29.340 [DEBUG] [Thread-127089] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:47:29.341 [DEBUG] [Thread-127089] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:47:29.341 [DEBUG] [Thread-127089] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T11:47:29.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T11:47:29.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:47:29.343 [DEBUG] [Thread-127089] [transport.py] [_log()] userauth is OK
2025-12-31T11:47:29.343 [DEBUG] [Thread-127089] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:47:29.343 [DEBUG] [Thread-127089] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:47:29.343 [DEBUG] [Thread-127089] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T11:47:29.343 [DEBUG] [Thread-127089] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:47:29.364 [INFO] [Thread-127089] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:47:29.365 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:47:30.190 [DEBUG] [Thread-127089] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:47:30.190 [DEBUG] [Thread-127089] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:47:30.190 [DEBUG] [Thread-127089] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T11:47:30.230 [DEBUG] [Thread-127089] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:47:30.231 [DEBUG] [Thread-127089] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:47:30.233 [DEBUG] [Thread-127089] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:47:30.246 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:47:30.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T11:47:30.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T11:47:30.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T11:47:30.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:47:30.256 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T11:47:30.256 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:47:30.256 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:47:30.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T11:47:30.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.407435 -999.00  +25.40  20.51     13   -4.80 1 1 1 1 1   888    0 29.55 -15.27 ----- 25.1 20.5 280.0 26.0 32.5 -27.7 31.9 -25.4 30.7 -25.4 31.5 -25.6
2025-12-31T11:47:30.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T11:47:30.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T11:47:30.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.407435
2025-12-31T11:47:30.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T11:47:30.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T11:47:30.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T11:47:30.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T11:47:30.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T11:47:30.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T11:46:54', tmtdew=36.85, humidity=7.89, cloud=0.0, wind=24.81, temperature=25.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T09:46:42.384', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T11:47:30.259 [DEBUG] [Thread-127089] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:47:30.342 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T11:47:30.354 [DEBUG] [Thread-127092] [transport.py] [_log()] starting thread (client mode): 0xb6bb26e0
2025-12-31T11:47:30.354 [DEBUG] [Thread-127092] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:47:30.368 [DEBUG] [Thread-127092] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T11:47:30.369 [INFO] [Thread-127092] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T11:47:30.376 [DEBUG] [Thread-127092] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:47:30.376 [DEBUG] [Thread-127092] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T11:47:30.376 [DEBUG] [Thread-127092] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:47:30.377 [DEBUG] [Thread-127092] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:47:30.377 [DEBUG] [Thread-127092] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:47:30.377 [DEBUG] [Thread-127092] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:47:30.377 [DEBUG] [Thread-127092] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:47:30.377 [DEBUG] [Thread-127092] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:47:30.377 [DEBUG] [Thread-127092] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:47:30.377 [DEBUG] [Thread-127092] [transport.py] [_log()] client lang: <none>
2025-12-31T11:47:30.377 [DEBUG] [Thread-127092] [transport.py] [_log()] server lang: <none>
2025-12-31T11:47:30.377 [DEBUG] [Thread-127092] [transport.py] [_log()] kex follows: False
2025-12-31T11:47:30.377 [DEBUG] [Thread-127092] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:47:30.377 [DEBUG] [Thread-127092] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:47:30.377 [DEBUG] [Thread-127092] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:47:30.377 [DEBUG] [Thread-127092] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:47:30.377 [DEBUG] [Thread-127092] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:47:30.377 [DEBUG] [Thread-127092] [transport.py] [_log()] Compression: none
2025-12-31T11:47:30.377 [DEBUG] [Thread-127092] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:47:30.436 [DEBUG] [Thread-127092] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:47:30.437 [DEBUG] [Thread-127092] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:47:30.438 [DEBUG] [Thread-127092] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T11:47:30.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T11:47:30.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:47:30.493 [DEBUG] [Thread-127092] [transport.py] [_log()] userauth is OK
2025-12-31T11:47:30.493 [DEBUG] [Thread-127092] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:47:30.493 [DEBUG] [Thread-127092] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:47:30.493 [DEBUG] [Thread-127092] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T11:47:30.493 [DEBUG] [Thread-127092] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:47:30.511 [INFO] [Thread-127092] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:47:30.512 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T11:47:30.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:47:31.321 [DEBUG] [Thread-127092] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:47:31.322 [DEBUG] [Thread-127092] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:47:31.370 [DEBUG] [Thread-127092] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:47:31.370 [DEBUG] [Thread-127092] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:47:31.380 [DEBUG] [Thread-127092] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:47:31.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:47:31.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T11:47:31.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T11:47:31.407 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:47:31.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:47:31.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:47:31.416 [DEBUG] [Thread-127092] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:47:34.824 [DEBUG] [Thread-127094 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:47:36.437 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:47:36.437 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:47:49.867 [DEBUG] [Thread-127095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:48:01.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T11:48:01.438 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T11:48:01.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T11:48:02.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 11, 47, 58), 37.07, 7.72, 0.0, 19.53, 25.88, 0, 0, 0, 2, 0, 0),)
2025-12-31T11:48:02.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 11:47:58
2025-12-31T11:48:02.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T11:48:02.435 [DEBUG] [Thread-127096] [transport.py] [_log()] starting thread (client mode): 0xb6bb24d0
2025-12-31T11:48:02.435 [DEBUG] [Thread-127096] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:48:02.455 [DEBUG] [Thread-127096] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T11:48:02.455 [INFO] [Thread-127096] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T11:48:02.458 [DEBUG] [Thread-127096] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:48:02.458 [DEBUG] [Thread-127096] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T11:48:02.458 [DEBUG] [Thread-127096] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:48:02.458 [DEBUG] [Thread-127096] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:48:02.458 [DEBUG] [Thread-127096] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:48:02.458 [DEBUG] [Thread-127096] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:48:02.458 [DEBUG] [Thread-127096] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:48:02.458 [DEBUG] [Thread-127096] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:48:02.458 [DEBUG] [Thread-127096] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:48:02.458 [DEBUG] [Thread-127096] [transport.py] [_log()] client lang: <none>
2025-12-31T11:48:02.458 [DEBUG] [Thread-127096] [transport.py] [_log()] server lang: <none>
2025-12-31T11:48:02.458 [DEBUG] [Thread-127096] [transport.py] [_log()] kex follows: False
2025-12-31T11:48:02.458 [DEBUG] [Thread-127096] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:48:02.458 [DEBUG] [Thread-127096] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:48:02.458 [DEBUG] [Thread-127096] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:48:02.458 [DEBUG] [Thread-127096] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:48:02.459 [DEBUG] [Thread-127096] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:48:02.459 [DEBUG] [Thread-127096] [transport.py] [_log()] Compression: none
2025-12-31T11:48:02.459 [DEBUG] [Thread-127096] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:48:02.467 [DEBUG] [Thread-127096] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:48:02.467 [DEBUG] [Thread-127096] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:48:02.467 [DEBUG] [Thread-127096] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T11:48:02.467 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T11:48:02.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:48:02.468 [DEBUG] [Thread-127096] [transport.py] [_log()] userauth is OK
2025-12-31T11:48:02.468 [DEBUG] [Thread-127096] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:48:02.468 [DEBUG] [Thread-127096] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:48:02.468 [DEBUG] [Thread-127096] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T11:48:02.468 [DEBUG] [Thread-127096] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:48:02.480 [INFO] [Thread-127096] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:48:02.480 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:48:03.124 [DEBUG] [Thread-127096] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:48:03.125 [DEBUG] [Thread-127096] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:48:03.125 [DEBUG] [Thread-127096] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T11:48:03.165 [DEBUG] [Thread-127096] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:48:03.165 [DEBUG] [Thread-127096] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:48:03.169 [DEBUG] [Thread-127096] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:48:03.189 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:48:03.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T11:48:03.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T11:48:03.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T11:48:03.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:48:03.200 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T11:48:03.200 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:48:03.200 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:48:03.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T11:48:03.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.407782 -999.00  +25.40  15.46     13   -4.80 1 1 1 1 1   888    0 29.89 -9.82 ----- 23.1 15.5 303.5 27.2 32.2 -29.0 31.8 -27.1 30.4 -29.5 31.4 -25.1
2025-12-31T11:48:03.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T11:48:03.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T11:48:03.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.407782
2025-12-31T11:48:03.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T11:48:03.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T11:48:03.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T11:48:03.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T11:48:03.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T11:48:03.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T11:47:58', tmtdew=37.07, humidity=7.72, cloud=0.0, wind=19.53, temperature=25.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T09:47:12.365', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T11:48:03.203 [DEBUG] [Thread-127096] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:48:03.285 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T11:48:03.298 [DEBUG] [Thread-127099] [transport.py] [_log()] starting thread (client mode): 0xbbfccbe0
2025-12-31T11:48:03.298 [DEBUG] [Thread-127099] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:48:03.312 [DEBUG] [Thread-127099] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T11:48:03.313 [INFO] [Thread-127099] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T11:48:03.320 [DEBUG] [Thread-127099] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:48:03.320 [DEBUG] [Thread-127099] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T11:48:03.320 [DEBUG] [Thread-127099] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:48:03.320 [DEBUG] [Thread-127099] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:48:03.321 [DEBUG] [Thread-127099] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:48:03.321 [DEBUG] [Thread-127099] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:48:03.321 [DEBUG] [Thread-127099] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:48:03.321 [DEBUG] [Thread-127099] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:48:03.321 [DEBUG] [Thread-127099] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:48:03.321 [DEBUG] [Thread-127099] [transport.py] [_log()] client lang: <none>
2025-12-31T11:48:03.321 [DEBUG] [Thread-127099] [transport.py] [_log()] server lang: <none>
2025-12-31T11:48:03.321 [DEBUG] [Thread-127099] [transport.py] [_log()] kex follows: False
2025-12-31T11:48:03.321 [DEBUG] [Thread-127099] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:48:03.321 [DEBUG] [Thread-127099] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:48:03.321 [DEBUG] [Thread-127099] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:48:03.321 [DEBUG] [Thread-127099] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:48:03.321 [DEBUG] [Thread-127099] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:48:03.321 [DEBUG] [Thread-127099] [transport.py] [_log()] Compression: none
2025-12-31T11:48:03.321 [DEBUG] [Thread-127099] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:48:03.378 [DEBUG] [Thread-127099] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:48:03.378 [DEBUG] [Thread-127099] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:48:03.379 [DEBUG] [Thread-127099] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T11:48:03.379 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T11:48:03.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:48:03.436 [DEBUG] [Thread-127099] [transport.py] [_log()] userauth is OK
2025-12-31T11:48:03.436 [DEBUG] [Thread-127099] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:48:03.436 [DEBUG] [Thread-127099] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:48:03.436 [DEBUG] [Thread-127099] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T11:48:03.436 [DEBUG] [Thread-127099] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:48:03.455 [INFO] [Thread-127099] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:48:03.455 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T11:48:03.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:48:04.269 [DEBUG] [Thread-127099] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:48:04.269 [DEBUG] [Thread-127099] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:48:04.319 [DEBUG] [Thread-127099] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:48:04.320 [DEBUG] [Thread-127099] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:48:04.329 [DEBUG] [Thread-127099] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:48:04.338 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:48:04.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T11:48:04.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T11:48:04.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:48:04.357 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:48:04.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:48:04.366 [DEBUG] [Thread-127099] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:48:04.902 [DEBUG] [Thread-127101 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:48:10.420 [DEBUG] [Thread-127102 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:48:19.961 [DEBUG] [Thread-127103 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:48:34.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T11:48:34.388 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T11:48:34.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T11:48:34.995 [DEBUG] [Thread-127104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:48:35.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 11, 48, 30), 37.21, 7.67, 0.0, 17.52, 26.08, 0, 0, 0, 2, 0, 0),)
2025-12-31T11:48:35.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 11:48:30
2025-12-31T11:48:35.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T11:48:35.385 [DEBUG] [Thread-127105] [transport.py] [_log()] starting thread (client mode): 0xbbfcf340
2025-12-31T11:48:35.385 [DEBUG] [Thread-127105] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:48:35.405 [DEBUG] [Thread-127105] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T11:48:35.405 [INFO] [Thread-127105] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T11:48:35.408 [DEBUG] [Thread-127105] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:48:35.408 [DEBUG] [Thread-127105] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T11:48:35.408 [DEBUG] [Thread-127105] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:48:35.408 [DEBUG] [Thread-127105] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:48:35.408 [DEBUG] [Thread-127105] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:48:35.408 [DEBUG] [Thread-127105] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:48:35.408 [DEBUG] [Thread-127105] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:48:35.408 [DEBUG] [Thread-127105] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:48:35.408 [DEBUG] [Thread-127105] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:48:35.408 [DEBUG] [Thread-127105] [transport.py] [_log()] client lang: <none>
2025-12-31T11:48:35.408 [DEBUG] [Thread-127105] [transport.py] [_log()] server lang: <none>
2025-12-31T11:48:35.408 [DEBUG] [Thread-127105] [transport.py] [_log()] kex follows: False
2025-12-31T11:48:35.408 [DEBUG] [Thread-127105] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:48:35.408 [DEBUG] [Thread-127105] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:48:35.408 [DEBUG] [Thread-127105] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:48:35.408 [DEBUG] [Thread-127105] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:48:35.408 [DEBUG] [Thread-127105] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:48:35.408 [DEBUG] [Thread-127105] [transport.py] [_log()] Compression: none
2025-12-31T11:48:35.408 [DEBUG] [Thread-127105] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:48:35.423 [DEBUG] [Thread-127105] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:48:35.423 [DEBUG] [Thread-127105] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:48:35.424 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T11:48:35.424 [DEBUG] [Thread-127105] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T11:48:35.424 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:48:35.425 [DEBUG] [Thread-127105] [transport.py] [_log()] userauth is OK
2025-12-31T11:48:35.425 [DEBUG] [Thread-127105] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:48:35.425 [DEBUG] [Thread-127105] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:48:35.425 [DEBUG] [Thread-127105] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T11:48:35.425 [DEBUG] [Thread-127105] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:48:35.441 [INFO] [Thread-127105] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:48:35.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:48:36.242 [DEBUG] [Thread-127105] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:48:36.242 [DEBUG] [Thread-127105] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:48:36.243 [DEBUG] [Thread-127105] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T11:48:36.283 [DEBUG] [Thread-127105] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:48:36.283 [DEBUG] [Thread-127105] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:48:36.286 [DEBUG] [Thread-127105] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:48:36.297 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:48:36.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T11:48:36.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T11:48:36.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T11:48:36.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:48:36.308 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T11:48:36.308 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:48:36.308 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:48:36.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T11:48:36.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.408129 -999.00  +25.20  14.13     13   -5.00 1 1 1 1 1   888    0 29.25 -3.69 ----- 13.3 14.1 314.2 25.7 32.5 -26.0 31.8 -25.9 30.7 -24.0 31.4 -23.4
2025-12-31T11:48:36.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T11:48:36.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T11:48:36.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.408129
2025-12-31T11:48:36.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T11:48:36.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T11:48:36.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T11:48:36.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T11:48:36.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T11:48:36.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T11:48:30', tmtdew=37.21, humidity=7.67, cloud=0.0, wind=17.52, temperature=26.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T09:47:42.346', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T11:48:36.311 [DEBUG] [Thread-127105] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:48:36.396 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T11:48:36.407 [DEBUG] [Thread-127108] [transport.py] [_log()] starting thread (client mode): 0xb6b48070
2025-12-31T11:48:36.407 [DEBUG] [Thread-127108] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:48:36.422 [DEBUG] [Thread-127108] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T11:48:36.423 [INFO] [Thread-127108] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T11:48:36.430 [DEBUG] [Thread-127108] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:48:36.431 [DEBUG] [Thread-127108] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T11:48:36.431 [DEBUG] [Thread-127108] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:48:36.431 [DEBUG] [Thread-127108] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:48:36.431 [DEBUG] [Thread-127108] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:48:36.431 [DEBUG] [Thread-127108] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:48:36.431 [DEBUG] [Thread-127108] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:48:36.431 [DEBUG] [Thread-127108] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:48:36.432 [DEBUG] [Thread-127108] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:48:36.432 [DEBUG] [Thread-127108] [transport.py] [_log()] client lang: <none>
2025-12-31T11:48:36.432 [DEBUG] [Thread-127108] [transport.py] [_log()] server lang: <none>
2025-12-31T11:48:36.432 [DEBUG] [Thread-127108] [transport.py] [_log()] kex follows: False
2025-12-31T11:48:36.432 [DEBUG] [Thread-127108] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:48:36.432 [DEBUG] [Thread-127108] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:48:36.432 [DEBUG] [Thread-127108] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:48:36.432 [DEBUG] [Thread-127108] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:48:36.433 [DEBUG] [Thread-127108] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:48:36.433 [DEBUG] [Thread-127108] [transport.py] [_log()] Compression: none
2025-12-31T11:48:36.433 [DEBUG] [Thread-127108] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:48:36.492 [DEBUG] [Thread-127108] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:48:36.492 [DEBUG] [Thread-127108] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:48:36.493 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T11:48:36.493 [DEBUG] [Thread-127108] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T11:48:36.494 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:48:36.547 [DEBUG] [Thread-127108] [transport.py] [_log()] userauth is OK
2025-12-31T11:48:36.547 [DEBUG] [Thread-127108] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:48:36.548 [DEBUG] [Thread-127108] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:48:36.548 [DEBUG] [Thread-127108] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T11:48:36.548 [DEBUG] [Thread-127108] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:48:36.567 [INFO] [Thread-127108] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:48:36.568 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T11:48:36.568 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:48:36.578 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:48:36.579 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:48:37.420 [DEBUG] [Thread-127108] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:48:37.420 [DEBUG] [Thread-127108] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:48:37.468 [DEBUG] [Thread-127108] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:48:37.468 [DEBUG] [Thread-127108] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:48:37.477 [DEBUG] [Thread-127108] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:48:37.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:48:37.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T11:48:37.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-12-31T11:48:37.506 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:48:37.506 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:48:37.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:48:37.515 [DEBUG] [Thread-127108] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:48:50.031 [DEBUG] [Thread-127110 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:49:05.078 [DEBUG] [Thread-127111 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:49:07.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T11:49:07.530 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T11:49:07.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T11:49:08.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 11, 49, 2), 37.3, 7.62, 0.0, 16.89, 26.09, 0, 0, 0, 2, 0, 0),)
2025-12-31T11:49:08.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 11:49:02
2025-12-31T11:49:08.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T11:49:08.504 [DEBUG] [Thread-127112] [transport.py] [_log()] starting thread (client mode): 0xb9546aa0
2025-12-31T11:49:08.504 [DEBUG] [Thread-127112] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:49:08.525 [DEBUG] [Thread-127112] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T11:49:08.526 [INFO] [Thread-127112] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T11:49:08.529 [DEBUG] [Thread-127112] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:49:08.529 [DEBUG] [Thread-127112] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T11:49:08.529 [DEBUG] [Thread-127112] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:49:08.529 [DEBUG] [Thread-127112] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:49:08.529 [DEBUG] [Thread-127112] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:49:08.529 [DEBUG] [Thread-127112] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:49:08.529 [DEBUG] [Thread-127112] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:49:08.529 [DEBUG] [Thread-127112] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:49:08.529 [DEBUG] [Thread-127112] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:49:08.529 [DEBUG] [Thread-127112] [transport.py] [_log()] client lang: <none>
2025-12-31T11:49:08.529 [DEBUG] [Thread-127112] [transport.py] [_log()] server lang: <none>
2025-12-31T11:49:08.529 [DEBUG] [Thread-127112] [transport.py] [_log()] kex follows: False
2025-12-31T11:49:08.529 [DEBUG] [Thread-127112] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:49:08.529 [DEBUG] [Thread-127112] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:49:08.529 [DEBUG] [Thread-127112] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:49:08.529 [DEBUG] [Thread-127112] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:49:08.529 [DEBUG] [Thread-127112] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:49:08.529 [DEBUG] [Thread-127112] [transport.py] [_log()] Compression: none
2025-12-31T11:49:08.529 [DEBUG] [Thread-127112] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:49:08.547 [DEBUG] [Thread-127112] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:49:08.547 [DEBUG] [Thread-127112] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:49:08.548 [DEBUG] [Thread-127112] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T11:49:08.548 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T11:49:08.549 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:49:08.550 [DEBUG] [Thread-127112] [transport.py] [_log()] userauth is OK
2025-12-31T11:49:08.550 [DEBUG] [Thread-127112] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:49:08.550 [DEBUG] [Thread-127112] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:49:08.550 [DEBUG] [Thread-127112] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T11:49:08.551 [DEBUG] [Thread-127112] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:49:08.576 [INFO] [Thread-127112] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:49:08.577 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:49:09.204 [DEBUG] [Thread-127112] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:49:09.205 [DEBUG] [Thread-127112] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:49:09.205 [DEBUG] [Thread-127112] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T11:49:09.247 [DEBUG] [Thread-127112] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:49:09.247 [DEBUG] [Thread-127112] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:49:09.250 [DEBUG] [Thread-127112] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:49:09.263 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:49:09.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T11:49:09.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T11:49:09.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T11:49:09.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:49:09.274 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T11:49:09.274 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:49:09.274 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:49:09.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T11:49:09.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.408476 -999.00  +25.70  23.16     12   -4.80 1 1 1 1 1   888    0 30.14 0.85 ----- 22.6 23.2 315.6 25.7 32.5 -25.5 31.8 -25.4 30.9 -23.4 31.4 -23.3
2025-12-31T11:49:09.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T11:49:09.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T11:49:09.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.408476
2025-12-31T11:49:09.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T11:49:09.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T11:49:09.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T11:49:09.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T11:49:09.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T11:49:09.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T11:49:02', tmtdew=37.3, humidity=7.62, cloud=0.0, wind=16.89, temperature=26.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T09:48:12.326', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T11:49:09.277 [DEBUG] [Thread-127112] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:49:09.361 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T11:49:09.373 [DEBUG] [Thread-127115] [transport.py] [_log()] starting thread (client mode): 0xb6b02680
2025-12-31T11:49:09.373 [DEBUG] [Thread-127115] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:49:09.388 [DEBUG] [Thread-127115] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T11:49:09.388 [INFO] [Thread-127115] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T11:49:09.397 [DEBUG] [Thread-127115] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:49:09.397 [DEBUG] [Thread-127115] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T11:49:09.397 [DEBUG] [Thread-127115] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:49:09.397 [DEBUG] [Thread-127115] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:49:09.397 [DEBUG] [Thread-127115] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:49:09.398 [DEBUG] [Thread-127115] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:49:09.398 [DEBUG] [Thread-127115] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:49:09.398 [DEBUG] [Thread-127115] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:49:09.398 [DEBUG] [Thread-127115] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:49:09.398 [DEBUG] [Thread-127115] [transport.py] [_log()] client lang: <none>
2025-12-31T11:49:09.398 [DEBUG] [Thread-127115] [transport.py] [_log()] server lang: <none>
2025-12-31T11:49:09.398 [DEBUG] [Thread-127115] [transport.py] [_log()] kex follows: False
2025-12-31T11:49:09.398 [DEBUG] [Thread-127115] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:49:09.399 [DEBUG] [Thread-127115] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:49:09.399 [DEBUG] [Thread-127115] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:49:09.399 [DEBUG] [Thread-127115] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:49:09.399 [DEBUG] [Thread-127115] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:49:09.399 [DEBUG] [Thread-127115] [transport.py] [_log()] Compression: none
2025-12-31T11:49:09.399 [DEBUG] [Thread-127115] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:49:09.457 [DEBUG] [Thread-127115] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:49:09.457 [DEBUG] [Thread-127115] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:49:09.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T11:49:09.458 [DEBUG] [Thread-127115] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T11:49:09.459 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:49:09.512 [DEBUG] [Thread-127115] [transport.py] [_log()] userauth is OK
2025-12-31T11:49:09.513 [DEBUG] [Thread-127115] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:49:09.513 [DEBUG] [Thread-127115] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:49:09.513 [DEBUG] [Thread-127115] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T11:49:09.513 [DEBUG] [Thread-127115] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:49:09.531 [INFO] [Thread-127115] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:49:09.531 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T11:49:09.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:49:10.351 [DEBUG] [Thread-127115] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:49:10.351 [DEBUG] [Thread-127115] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:49:10.402 [DEBUG] [Thread-127115] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:49:10.402 [DEBUG] [Thread-127115] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:49:10.414 [DEBUG] [Thread-127115] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:49:10.425 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:49:10.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T11:49:10.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T11:49:10.448 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:49:10.448 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:49:10.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:49:10.459 [DEBUG] [Thread-127115] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:49:10.463 [DEBUG] [Thread-127117 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:49:20.118 [DEBUG] [Thread-127118 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:49:35.166 [DEBUG] [Thread-127119 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:49:36.719 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:49:36.719 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:49:40.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T11:49:40.463 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T11:49:40.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T11:49:41.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 11, 49, 34), 37.3, 7.66, 0.0, 19.2, 25.98, 0, 0, 0, 2, 0, 0),)
2025-12-31T11:49:41.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 11:49:34
2025-12-31T11:49:41.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T11:49:41.463 [DEBUG] [Thread-127120] [transport.py] [_log()] starting thread (client mode): 0xb6b00a60
2025-12-31T11:49:41.463 [DEBUG] [Thread-127120] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:49:41.483 [DEBUG] [Thread-127120] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T11:49:41.483 [INFO] [Thread-127120] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T11:49:41.486 [DEBUG] [Thread-127120] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:49:41.486 [DEBUG] [Thread-127120] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T11:49:41.486 [DEBUG] [Thread-127120] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:49:41.486 [DEBUG] [Thread-127120] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:49:41.486 [DEBUG] [Thread-127120] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:49:41.486 [DEBUG] [Thread-127120] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:49:41.486 [DEBUG] [Thread-127120] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:49:41.486 [DEBUG] [Thread-127120] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:49:41.486 [DEBUG] [Thread-127120] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:49:41.486 [DEBUG] [Thread-127120] [transport.py] [_log()] client lang: <none>
2025-12-31T11:49:41.486 [DEBUG] [Thread-127120] [transport.py] [_log()] server lang: <none>
2025-12-31T11:49:41.486 [DEBUG] [Thread-127120] [transport.py] [_log()] kex follows: False
2025-12-31T11:49:41.486 [DEBUG] [Thread-127120] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:49:41.486 [DEBUG] [Thread-127120] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:49:41.487 [DEBUG] [Thread-127120] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:49:41.487 [DEBUG] [Thread-127120] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:49:41.487 [DEBUG] [Thread-127120] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:49:41.487 [DEBUG] [Thread-127120] [transport.py] [_log()] Compression: none
2025-12-31T11:49:41.487 [DEBUG] [Thread-127120] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:49:41.503 [DEBUG] [Thread-127120] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:49:41.504 [DEBUG] [Thread-127120] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:49:41.504 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T11:49:41.504 [DEBUG] [Thread-127120] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T11:49:41.505 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:49:41.506 [DEBUG] [Thread-127120] [transport.py] [_log()] userauth is OK
2025-12-31T11:49:41.506 [DEBUG] [Thread-127120] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:49:41.507 [DEBUG] [Thread-127120] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:49:41.507 [DEBUG] [Thread-127120] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T11:49:41.507 [DEBUG] [Thread-127120] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:49:41.527 [INFO] [Thread-127120] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:49:41.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:49:42.279 [DEBUG] [Thread-127120] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:49:42.279 [DEBUG] [Thread-127120] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:49:42.280 [DEBUG] [Thread-127120] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T11:49:42.320 [DEBUG] [Thread-127120] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:49:42.321 [DEBUG] [Thread-127120] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:49:42.323 [DEBUG] [Thread-127120] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:49:42.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:49:42.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T11:49:42.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T11:49:42.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T11:49:42.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:49:42.346 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T11:49:42.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:49:42.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:49:42.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T11:49:42.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.409171 -999.00  +25.70  15.47     13   -4.60 1 1 1 1 1   888    0 29.67 6.67 ----- 15.5 15.5 301.8 21.2 32.5 -27.5 31.8 -26.8 30.9 -26.8 31.4 -24.8
2025-12-31T11:49:42.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T11:49:42.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T11:49:42.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.409171
2025-12-31T11:49:42.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T11:49:42.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T11:49:42.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T11:49:42.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T11:49:42.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T11:49:42.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T11:49:34', tmtdew=37.3, humidity=7.66, cloud=0.0, wind=19.2, temperature=25.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T09:49:12.374', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T11:49:42.349 [DEBUG] [Thread-127120] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:49:42.431 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T11:49:42.442 [DEBUG] [Thread-127123] [transport.py] [_log()] starting thread (client mode): 0xb6b01870
2025-12-31T11:49:42.442 [DEBUG] [Thread-127123] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:49:42.457 [DEBUG] [Thread-127123] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T11:49:42.457 [INFO] [Thread-127123] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T11:49:42.465 [DEBUG] [Thread-127123] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:49:42.465 [DEBUG] [Thread-127123] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T11:49:42.465 [DEBUG] [Thread-127123] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:49:42.465 [DEBUG] [Thread-127123] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:49:42.465 [DEBUG] [Thread-127123] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:49:42.465 [DEBUG] [Thread-127123] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:49:42.465 [DEBUG] [Thread-127123] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:49:42.465 [DEBUG] [Thread-127123] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:49:42.465 [DEBUG] [Thread-127123] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:49:42.465 [DEBUG] [Thread-127123] [transport.py] [_log()] client lang: <none>
2025-12-31T11:49:42.465 [DEBUG] [Thread-127123] [transport.py] [_log()] server lang: <none>
2025-12-31T11:49:42.465 [DEBUG] [Thread-127123] [transport.py] [_log()] kex follows: False
2025-12-31T11:49:42.465 [DEBUG] [Thread-127123] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:49:42.465 [DEBUG] [Thread-127123] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:49:42.466 [DEBUG] [Thread-127123] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:49:42.466 [DEBUG] [Thread-127123] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:49:42.466 [DEBUG] [Thread-127123] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:49:42.466 [DEBUG] [Thread-127123] [transport.py] [_log()] Compression: none
2025-12-31T11:49:42.466 [DEBUG] [Thread-127123] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:49:42.524 [DEBUG] [Thread-127123] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:49:42.525 [DEBUG] [Thread-127123] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:49:42.525 [DEBUG] [Thread-127123] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T11:49:42.526 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T11:49:42.526 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:49:42.581 [DEBUG] [Thread-127123] [transport.py] [_log()] userauth is OK
2025-12-31T11:49:42.581 [DEBUG] [Thread-127123] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:49:42.581 [DEBUG] [Thread-127123] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:49:42.582 [DEBUG] [Thread-127123] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T11:49:42.582 [DEBUG] [Thread-127123] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:49:42.603 [INFO] [Thread-127123] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:49:42.604 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T11:49:42.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:49:43.464 [DEBUG] [Thread-127123] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:49:43.465 [DEBUG] [Thread-127123] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:49:43.512 [DEBUG] [Thread-127123] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:49:43.513 [DEBUG] [Thread-127123] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:49:43.521 [DEBUG] [Thread-127123] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:49:43.530 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:49:43.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T11:49:43.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T11:49:43.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:49:43.547 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:49:43.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:49:43.555 [DEBUG] [Thread-127123] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:49:50.199 [DEBUG] [Thread-127125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:50:05.253 [DEBUG] [Thread-127126 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:50:10.496 [DEBUG] [Thread-127127 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:50:13.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T11:50:13.577 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T11:50:13.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T11:50:14.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 11, 50, 6), 36.85, 7.87, 0.0, 15.18, 25.61, 0, 0, 0, 2, 0, 0),)
2025-12-31T11:50:14.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 11:50:06
2025-12-31T11:50:14.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T11:50:14.596 [DEBUG] [Thread-127128] [transport.py] [_log()] starting thread (client mode): 0xb6bb1420
2025-12-31T11:50:14.596 [DEBUG] [Thread-127128] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:50:14.611 [DEBUG] [Thread-127128] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T11:50:14.611 [INFO] [Thread-127128] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T11:50:14.614 [DEBUG] [Thread-127128] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:50:14.614 [DEBUG] [Thread-127128] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T11:50:14.614 [DEBUG] [Thread-127128] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:50:14.614 [DEBUG] [Thread-127128] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:50:14.614 [DEBUG] [Thread-127128] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:50:14.614 [DEBUG] [Thread-127128] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:50:14.614 [DEBUG] [Thread-127128] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:50:14.614 [DEBUG] [Thread-127128] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:50:14.614 [DEBUG] [Thread-127128] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:50:14.614 [DEBUG] [Thread-127128] [transport.py] [_log()] client lang: <none>
2025-12-31T11:50:14.614 [DEBUG] [Thread-127128] [transport.py] [_log()] server lang: <none>
2025-12-31T11:50:14.614 [DEBUG] [Thread-127128] [transport.py] [_log()] kex follows: False
2025-12-31T11:50:14.614 [DEBUG] [Thread-127128] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:50:14.614 [DEBUG] [Thread-127128] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:50:14.615 [DEBUG] [Thread-127128] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:50:14.615 [DEBUG] [Thread-127128] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:50:14.615 [DEBUG] [Thread-127128] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:50:14.615 [DEBUG] [Thread-127128] [transport.py] [_log()] Compression: none
2025-12-31T11:50:14.615 [DEBUG] [Thread-127128] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:50:14.631 [DEBUG] [Thread-127128] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:50:14.631 [DEBUG] [Thread-127128] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:50:14.631 [DEBUG] [Thread-127128] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T11:50:14.631 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T11:50:14.631 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:50:14.632 [DEBUG] [Thread-127128] [transport.py] [_log()] userauth is OK
2025-12-31T11:50:14.632 [DEBUG] [Thread-127128] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:50:14.633 [DEBUG] [Thread-127128] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:50:14.633 [DEBUG] [Thread-127128] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T11:50:14.633 [DEBUG] [Thread-127128] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:50:14.648 [INFO] [Thread-127128] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:50:14.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:50:18.672 [DEBUG] [Thread-127128] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:50:18.672 [DEBUG] [Thread-127128] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:50:18.673 [DEBUG] [Thread-127128] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T11:50:18.714 [DEBUG] [Thread-127128] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:50:18.714 [DEBUG] [Thread-127128] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:50:18.717 [DEBUG] [Thread-127128] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:50:18.871 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:50:18.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T11:50:18.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T11:50:18.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T11:50:18.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:50:18.914 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T11:50:18.914 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:50:18.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:50:18.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T11:50:18.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.409518 -999.00  +26.20  18.80     13   -4.30 1 1 1 1 1   888    0 29.95 10.16 ----- 18.7 18.8 321.0 24.9 32.6 -24.0 32.0 -23.9 31.1 -22.2 31.6 -22.1
2025-12-31T11:50:18.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T11:50:18.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T11:50:18.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.409518
2025-12-31T11:50:18.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T11:50:18.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T11:50:18.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T11:50:18.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T11:50:18.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T11:50:18.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T11:50:06', tmtdew=36.85, humidity=7.87, cloud=0.0, wind=15.18, temperature=25.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T09:49:42.355', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T11:50:18.918 [DEBUG] [Thread-127128] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:50:19.002 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T11:50:19.014 [DEBUG] [Thread-127131] [transport.py] [_log()] starting thread (client mode): 0xbbfcdae0
2025-12-31T11:50:19.015 [DEBUG] [Thread-127131] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:50:19.030 [DEBUG] [Thread-127131] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T11:50:19.030 [INFO] [Thread-127131] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T11:50:19.037 [DEBUG] [Thread-127131] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:50:19.038 [DEBUG] [Thread-127131] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T11:50:19.038 [DEBUG] [Thread-127131] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:50:19.038 [DEBUG] [Thread-127131] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:50:19.038 [DEBUG] [Thread-127131] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:50:19.038 [DEBUG] [Thread-127131] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:50:19.038 [DEBUG] [Thread-127131] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:50:19.038 [DEBUG] [Thread-127131] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:50:19.038 [DEBUG] [Thread-127131] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:50:19.038 [DEBUG] [Thread-127131] [transport.py] [_log()] client lang: <none>
2025-12-31T11:50:19.038 [DEBUG] [Thread-127131] [transport.py] [_log()] server lang: <none>
2025-12-31T11:50:19.038 [DEBUG] [Thread-127131] [transport.py] [_log()] kex follows: False
2025-12-31T11:50:19.038 [DEBUG] [Thread-127131] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:50:19.038 [DEBUG] [Thread-127131] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:50:19.038 [DEBUG] [Thread-127131] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:50:19.038 [DEBUG] [Thread-127131] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:50:19.038 [DEBUG] [Thread-127131] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:50:19.039 [DEBUG] [Thread-127131] [transport.py] [_log()] Compression: none
2025-12-31T11:50:19.039 [DEBUG] [Thread-127131] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:50:19.095 [DEBUG] [Thread-127131] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:50:19.095 [DEBUG] [Thread-127131] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:50:19.096 [DEBUG] [Thread-127131] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T11:50:19.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T11:50:19.097 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:50:19.153 [DEBUG] [Thread-127131] [transport.py] [_log()] userauth is OK
2025-12-31T11:50:19.154 [DEBUG] [Thread-127131] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:50:19.154 [DEBUG] [Thread-127131] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:50:19.154 [DEBUG] [Thread-127131] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T11:50:19.154 [DEBUG] [Thread-127131] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:50:19.174 [INFO] [Thread-127131] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:50:19.174 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T11:50:19.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:50:20.028 [DEBUG] [Thread-127131] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:50:20.028 [DEBUG] [Thread-127131] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:50:20.076 [DEBUG] [Thread-127131] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:50:20.076 [DEBUG] [Thread-127131] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:50:20.086 [DEBUG] [Thread-127131] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:50:20.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:50:20.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T11:50:20.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T11:50:20.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:50:20.114 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:50:20.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:50:20.122 [DEBUG] [Thread-127131] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:50:20.286 [DEBUG] [Thread-127133 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:50:35.339 [DEBUG] [Thread-127134 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:50:36.857 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:50:36.858 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:50:50.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T11:50:50.144 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T11:50:50.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T11:50:50.375 [DEBUG] [Thread-127135 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:50:50.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 11, 50, 38), 36.81, 7.89, 0.0, 17.43, 25.93, 0, 0, 0, 2, 0, 0),)
2025-12-31T11:50:50.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 11:50:38
2025-12-31T11:50:51.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T11:50:51.188 [DEBUG] [Thread-127136] [transport.py] [_log()] starting thread (client mode): 0xd88c71f0
2025-12-31T11:50:51.188 [DEBUG] [Thread-127136] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:50:51.208 [DEBUG] [Thread-127136] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T11:50:51.208 [INFO] [Thread-127136] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T11:50:51.210 [DEBUG] [Thread-127136] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:50:51.210 [DEBUG] [Thread-127136] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T11:50:51.210 [DEBUG] [Thread-127136] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:50:51.210 [DEBUG] [Thread-127136] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:50:51.210 [DEBUG] [Thread-127136] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:50:51.210 [DEBUG] [Thread-127136] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:50:51.210 [DEBUG] [Thread-127136] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:50:51.210 [DEBUG] [Thread-127136] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:50:51.210 [DEBUG] [Thread-127136] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:50:51.210 [DEBUG] [Thread-127136] [transport.py] [_log()] client lang: <none>
2025-12-31T11:50:51.210 [DEBUG] [Thread-127136] [transport.py] [_log()] server lang: <none>
2025-12-31T11:50:51.210 [DEBUG] [Thread-127136] [transport.py] [_log()] kex follows: False
2025-12-31T11:50:51.210 [DEBUG] [Thread-127136] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:50:51.210 [DEBUG] [Thread-127136] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:50:51.210 [DEBUG] [Thread-127136] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:50:51.210 [DEBUG] [Thread-127136] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:50:51.210 [DEBUG] [Thread-127136] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:50:51.210 [DEBUG] [Thread-127136] [transport.py] [_log()] Compression: none
2025-12-31T11:50:51.210 [DEBUG] [Thread-127136] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:50:51.226 [DEBUG] [Thread-127136] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:50:51.226 [DEBUG] [Thread-127136] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:50:51.226 [DEBUG] [Thread-127136] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T11:50:51.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T11:50:51.227 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:50:51.227 [DEBUG] [Thread-127136] [transport.py] [_log()] userauth is OK
2025-12-31T11:50:51.227 [DEBUG] [Thread-127136] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:50:51.227 [DEBUG] [Thread-127136] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:50:51.227 [DEBUG] [Thread-127136] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T11:50:51.227 [DEBUG] [Thread-127136] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:50:51.236 [INFO] [Thread-127136] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:50:51.236 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:50:51.816 [DEBUG] [Thread-127136] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:50:51.816 [DEBUG] [Thread-127136] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:50:51.816 [DEBUG] [Thread-127136] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T11:50:51.857 [DEBUG] [Thread-127136] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:50:51.857 [DEBUG] [Thread-127136] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:50:51.860 [DEBUG] [Thread-127136] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:50:51.873 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:50:51.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T11:50:51.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T11:50:51.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T11:50:51.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:50:51.879 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T11:50:51.879 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:50:51.879 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:50:51.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T11:50:51.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.409865 -999.00  +26.70  16.58     12   -4.00 1 1 1 1 1   888    0 30.60 14.96 ----- 16.8 16.6 297.4 21.9 32.9 -24.7 32.1 -24.6 31.2 -23.1 31.9 -22.1
2025-12-31T11:50:51.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T11:50:51.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T11:50:51.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.409865
2025-12-31T11:50:51.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T11:50:51.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T11:50:51.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T11:50:51.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T11:50:51.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T11:50:51.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T11:50:38', tmtdew=36.81, humidity=7.89, cloud=0.0, wind=17.43, temperature=25.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T09:50:12.336', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T11:50:51.881 [DEBUG] [Thread-127136] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:50:51.959 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T11:50:51.973 [DEBUG] [Thread-127139] [transport.py] [_log()] starting thread (client mode): 0xbbfce470
2025-12-31T11:50:51.973 [DEBUG] [Thread-127139] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:50:51.991 [DEBUG] [Thread-127139] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T11:50:51.991 [INFO] [Thread-127139] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T11:50:51.998 [DEBUG] [Thread-127139] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:50:51.998 [DEBUG] [Thread-127139] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T11:50:51.998 [DEBUG] [Thread-127139] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:50:51.998 [DEBUG] [Thread-127139] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:50:51.998 [DEBUG] [Thread-127139] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:50:51.998 [DEBUG] [Thread-127139] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:50:51.998 [DEBUG] [Thread-127139] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:50:51.998 [DEBUG] [Thread-127139] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:50:51.998 [DEBUG] [Thread-127139] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:50:51.998 [DEBUG] [Thread-127139] [transport.py] [_log()] client lang: <none>
2025-12-31T11:50:51.998 [DEBUG] [Thread-127139] [transport.py] [_log()] server lang: <none>
2025-12-31T11:50:51.998 [DEBUG] [Thread-127139] [transport.py] [_log()] kex follows: False
2025-12-31T11:50:51.998 [DEBUG] [Thread-127139] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:50:51.998 [DEBUG] [Thread-127139] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:50:51.998 [DEBUG] [Thread-127139] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:50:51.998 [DEBUG] [Thread-127139] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:50:51.998 [DEBUG] [Thread-127139] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:50:51.998 [DEBUG] [Thread-127139] [transport.py] [_log()] Compression: none
2025-12-31T11:50:51.998 [DEBUG] [Thread-127139] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:50:52.053 [DEBUG] [Thread-127139] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:50:52.054 [DEBUG] [Thread-127139] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:50:52.054 [DEBUG] [Thread-127139] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T11:50:52.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T11:50:52.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:50:52.112 [DEBUG] [Thread-127139] [transport.py] [_log()] userauth is OK
2025-12-31T11:50:52.112 [DEBUG] [Thread-127139] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:50:52.113 [DEBUG] [Thread-127139] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:50:52.113 [DEBUG] [Thread-127139] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T11:50:52.113 [DEBUG] [Thread-127139] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:50:52.128 [INFO] [Thread-127139] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:50:52.128 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T11:50:52.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:50:52.921 [DEBUG] [Thread-127139] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:50:52.921 [DEBUG] [Thread-127139] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:50:52.968 [DEBUG] [Thread-127139] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:50:52.968 [DEBUG] [Thread-127139] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:50:52.976 [DEBUG] [Thread-127139] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:50:52.984 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:50:52.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T11:50:52.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T11:50:53.000 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:50:53.000 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:50:53.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:50:53.008 [DEBUG] [Thread-127139] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:51:05.410 [DEBUG] [Thread-127141 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:51:10.542 [DEBUG] [Thread-127142 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:51:20.459 [DEBUG] [Thread-127143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:51:23.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T11:51:23.031 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T11:51:23.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T11:51:23.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 11, 51, 10), 36.86, 7.86, 0.0, 16.76, 25.93, 0, 0, 0, 2, 0, 0),)
2025-12-31T11:51:23.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 11:51:10
2025-12-31T11:51:23.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T11:51:24.024 [DEBUG] [Thread-127144] [transport.py] [_log()] starting thread (client mode): 0xbbfcd0f0
2025-12-31T11:51:24.024 [DEBUG] [Thread-127144] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:51:24.046 [DEBUG] [Thread-127144] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T11:51:24.046 [INFO] [Thread-127144] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T11:51:24.050 [DEBUG] [Thread-127144] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:51:24.050 [DEBUG] [Thread-127144] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T11:51:24.050 [DEBUG] [Thread-127144] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:51:24.050 [DEBUG] [Thread-127144] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:51:24.050 [DEBUG] [Thread-127144] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:51:24.050 [DEBUG] [Thread-127144] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:51:24.050 [DEBUG] [Thread-127144] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:51:24.050 [DEBUG] [Thread-127144] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:51:24.050 [DEBUG] [Thread-127144] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:51:24.050 [DEBUG] [Thread-127144] [transport.py] [_log()] client lang: <none>
2025-12-31T11:51:24.050 [DEBUG] [Thread-127144] [transport.py] [_log()] server lang: <none>
2025-12-31T11:51:24.050 [DEBUG] [Thread-127144] [transport.py] [_log()] kex follows: False
2025-12-31T11:51:24.050 [DEBUG] [Thread-127144] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:51:24.050 [DEBUG] [Thread-127144] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:51:24.050 [DEBUG] [Thread-127144] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:51:24.050 [DEBUG] [Thread-127144] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:51:24.051 [DEBUG] [Thread-127144] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:51:24.051 [DEBUG] [Thread-127144] [transport.py] [_log()] Compression: none
2025-12-31T11:51:24.051 [DEBUG] [Thread-127144] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:51:24.060 [DEBUG] [Thread-127144] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:51:24.060 [DEBUG] [Thread-127144] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:51:24.061 [DEBUG] [Thread-127144] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T11:51:24.061 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T11:51:24.062 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:51:24.062 [DEBUG] [Thread-127144] [transport.py] [_log()] userauth is OK
2025-12-31T11:51:24.063 [DEBUG] [Thread-127144] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:51:24.063 [DEBUG] [Thread-127144] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:51:24.063 [DEBUG] [Thread-127144] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T11:51:24.063 [DEBUG] [Thread-127144] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:51:24.086 [INFO] [Thread-127144] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:51:24.087 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:51:24.808 [DEBUG] [Thread-127144] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:51:24.808 [DEBUG] [Thread-127144] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:51:24.808 [DEBUG] [Thread-127144] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T11:51:24.849 [DEBUG] [Thread-127144] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:51:24.849 [DEBUG] [Thread-127144] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:51:24.852 [DEBUG] [Thread-127144] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:51:24.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:51:24.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T11:51:24.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T11:51:24.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T11:51:24.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:51:24.877 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T11:51:24.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:51:24.877 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:51:24.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T11:51:24.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.410213 -999.00  +26.70  21.16     12   -4.40 1 1 1 1 1   888    0 30.90 20.65 ----- 19.0 21.2 296.0 24.2 33.0 -24.4 32.3 -24.1 31.4 -22.5 32.0 -21.6
2025-12-31T11:51:24.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T11:51:24.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T11:51:24.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.410213
2025-12-31T11:51:24.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T11:51:24.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T11:51:24.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T11:51:24.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T11:51:24.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T11:51:24.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T11:51:10', tmtdew=36.86, humidity=7.86, cloud=0.0, wind=16.76, temperature=25.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T09:50:42.403', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T11:51:24.880 [DEBUG] [Thread-127144] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:51:24.963 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T11:51:24.974 [DEBUG] [Thread-127147] [transport.py] [_log()] starting thread (client mode): 0xb6b03a90
2025-12-31T11:51:24.974 [DEBUG] [Thread-127147] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:51:24.989 [DEBUG] [Thread-127147] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T11:51:24.989 [INFO] [Thread-127147] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T11:51:24.997 [DEBUG] [Thread-127147] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:51:24.998 [DEBUG] [Thread-127147] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T11:51:24.998 [DEBUG] [Thread-127147] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:51:24.998 [DEBUG] [Thread-127147] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:51:24.998 [DEBUG] [Thread-127147] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:51:24.998 [DEBUG] [Thread-127147] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:51:24.998 [DEBUG] [Thread-127147] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:51:24.998 [DEBUG] [Thread-127147] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:51:24.998 [DEBUG] [Thread-127147] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:51:24.999 [DEBUG] [Thread-127147] [transport.py] [_log()] client lang: <none>
2025-12-31T11:51:24.999 [DEBUG] [Thread-127147] [transport.py] [_log()] server lang: <none>
2025-12-31T11:51:24.999 [DEBUG] [Thread-127147] [transport.py] [_log()] kex follows: False
2025-12-31T11:51:24.999 [DEBUG] [Thread-127147] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:51:24.999 [DEBUG] [Thread-127147] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:51:24.999 [DEBUG] [Thread-127147] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:51:24.999 [DEBUG] [Thread-127147] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:51:24.999 [DEBUG] [Thread-127147] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:51:25.000 [DEBUG] [Thread-127147] [transport.py] [_log()] Compression: none
2025-12-31T11:51:25.000 [DEBUG] [Thread-127147] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:51:25.057 [DEBUG] [Thread-127147] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:51:25.057 [DEBUG] [Thread-127147] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:51:25.058 [DEBUG] [Thread-127147] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T11:51:25.058 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T11:51:25.059 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:51:25.113 [DEBUG] [Thread-127147] [transport.py] [_log()] userauth is OK
2025-12-31T11:51:25.113 [DEBUG] [Thread-127147] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:51:25.113 [DEBUG] [Thread-127147] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:51:25.114 [DEBUG] [Thread-127147] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T11:51:25.114 [DEBUG] [Thread-127147] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:51:25.136 [INFO] [Thread-127147] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:51:25.136 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T11:51:25.137 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:51:25.997 [DEBUG] [Thread-127147] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:51:25.997 [DEBUG] [Thread-127147] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:51:26.046 [DEBUG] [Thread-127147] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:51:26.046 [DEBUG] [Thread-127147] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:51:26.055 [DEBUG] [Thread-127147] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:51:26.067 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:51:26.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T11:51:26.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T11:51:26.085 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:51:26.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:51:26.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:51:26.094 [DEBUG] [Thread-127147] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:51:35.489 [DEBUG] [Thread-127149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:51:36.997 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:51:36.998 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:51:50.531 [DEBUG] [Thread-127150 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:51:56.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T11:51:56.106 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T11:51:56.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-12-31T11:51:56.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 11, 51, 42), 37.39, 7.86, 0.0, 19.25, 26.23, 0, 0, 0, 2, 0, 0),)
2025-12-31T11:51:56.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 11:51:42
2025-12-31T11:51:56.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T11:51:57.099 [DEBUG] [Thread-127151] [transport.py] [_log()] starting thread (client mode): 0xb6b009a0
2025-12-31T11:51:57.099 [DEBUG] [Thread-127151] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:51:57.119 [DEBUG] [Thread-127151] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T11:51:57.119 [INFO] [Thread-127151] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T11:51:57.123 [DEBUG] [Thread-127151] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:51:57.123 [DEBUG] [Thread-127151] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T11:51:57.123 [DEBUG] [Thread-127151] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:51:57.123 [DEBUG] [Thread-127151] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:51:57.123 [DEBUG] [Thread-127151] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:51:57.123 [DEBUG] [Thread-127151] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:51:57.123 [DEBUG] [Thread-127151] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:51:57.123 [DEBUG] [Thread-127151] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:51:57.123 [DEBUG] [Thread-127151] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:51:57.124 [DEBUG] [Thread-127151] [transport.py] [_log()] client lang: <none>
2025-12-31T11:51:57.124 [DEBUG] [Thread-127151] [transport.py] [_log()] server lang: <none>
2025-12-31T11:51:57.124 [DEBUG] [Thread-127151] [transport.py] [_log()] kex follows: False
2025-12-31T11:51:57.124 [DEBUG] [Thread-127151] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:51:57.124 [DEBUG] [Thread-127151] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:51:57.124 [DEBUG] [Thread-127151] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:51:57.124 [DEBUG] [Thread-127151] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:51:57.124 [DEBUG] [Thread-127151] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:51:57.124 [DEBUG] [Thread-127151] [transport.py] [_log()] Compression: none
2025-12-31T11:51:57.124 [DEBUG] [Thread-127151] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:51:57.143 [DEBUG] [Thread-127151] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:51:57.144 [DEBUG] [Thread-127151] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:51:57.145 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T11:51:57.145 [DEBUG] [Thread-127151] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T11:51:57.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:51:57.189 [DEBUG] [Thread-127151] [transport.py] [_log()] userauth is OK
2025-12-31T11:51:57.189 [DEBUG] [Thread-127151] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:51:57.190 [DEBUG] [Thread-127151] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:51:57.190 [DEBUG] [Thread-127151] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T11:51:57.190 [DEBUG] [Thread-127151] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:51:57.210 [INFO] [Thread-127151] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:51:57.211 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:51:57.873 [DEBUG] [Thread-127151] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:51:57.873 [DEBUG] [Thread-127151] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:51:57.874 [DEBUG] [Thread-127151] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T11:51:57.914 [DEBUG] [Thread-127151] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:51:57.914 [DEBUG] [Thread-127151] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:51:57.918 [DEBUG] [Thread-127151] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:51:57.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:51:57.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T11:51:57.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T11:51:57.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T11:51:57.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:51:57.943 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T11:51:57.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:51:57.943 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:51:57.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T11:51:57.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.410560 -999.00  +26.20  16.52     13   -4.30 1 1 1 1 1   888    0 31.16 23.87 ----- 20.2 16.5 301.0 23.2 33.1 -25.0 32.3 -24.9 31.4 -22.8 32.2 -22.2
2025-12-31T11:51:57.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T11:51:57.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T11:51:57.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.410560
2025-12-31T11:51:57.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T11:51:57.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T11:51:57.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T11:51:57.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T11:51:57.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T11:51:57.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T11:51:42', tmtdew=37.39, humidity=7.86, cloud=0.0, wind=19.25, temperature=26.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T09:51:12.384', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T11:51:57.946 [DEBUG] [Thread-127151] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:51:58.029 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T11:51:58.042 [DEBUG] [Thread-127154] [transport.py] [_log()] starting thread (client mode): 0xb6b01060
2025-12-31T11:51:58.042 [DEBUG] [Thread-127154] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:51:58.056 [DEBUG] [Thread-127154] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T11:51:58.057 [INFO] [Thread-127154] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T11:51:58.064 [DEBUG] [Thread-127154] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:51:58.064 [DEBUG] [Thread-127154] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T11:51:58.064 [DEBUG] [Thread-127154] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:51:58.064 [DEBUG] [Thread-127154] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:51:58.064 [DEBUG] [Thread-127154] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:51:58.064 [DEBUG] [Thread-127154] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:51:58.064 [DEBUG] [Thread-127154] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:51:58.064 [DEBUG] [Thread-127154] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:51:58.064 [DEBUG] [Thread-127154] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:51:58.064 [DEBUG] [Thread-127154] [transport.py] [_log()] client lang: <none>
2025-12-31T11:51:58.064 [DEBUG] [Thread-127154] [transport.py] [_log()] server lang: <none>
2025-12-31T11:51:58.064 [DEBUG] [Thread-127154] [transport.py] [_log()] kex follows: False
2025-12-31T11:51:58.064 [DEBUG] [Thread-127154] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:51:58.064 [DEBUG] [Thread-127154] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:51:58.064 [DEBUG] [Thread-127154] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:51:58.064 [DEBUG] [Thread-127154] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:51:58.064 [DEBUG] [Thread-127154] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:51:58.065 [DEBUG] [Thread-127154] [transport.py] [_log()] Compression: none
2025-12-31T11:51:58.065 [DEBUG] [Thread-127154] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:51:58.121 [DEBUG] [Thread-127154] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:51:58.122 [DEBUG] [Thread-127154] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:51:58.122 [DEBUG] [Thread-127154] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T11:51:58.122 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T11:51:58.123 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:51:58.182 [DEBUG] [Thread-127154] [transport.py] [_log()] userauth is OK
2025-12-31T11:51:58.182 [DEBUG] [Thread-127154] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:51:58.183 [DEBUG] [Thread-127154] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:51:58.183 [DEBUG] [Thread-127154] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T11:51:58.183 [DEBUG] [Thread-127154] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:51:58.203 [INFO] [Thread-127154] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:51:58.203 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T11:51:58.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:51:59.013 [DEBUG] [Thread-127154] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:51:59.013 [DEBUG] [Thread-127154] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:51:59.060 [DEBUG] [Thread-127154] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:51:59.061 [DEBUG] [Thread-127154] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:51:59.069 [DEBUG] [Thread-127154] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:51:59.078 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:51:59.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T11:51:59.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T11:51:59.098 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:51:59.098 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:51:59.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:51:59.106 [DEBUG] [Thread-127154] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:52:05.562 [DEBUG] [Thread-127156 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:52:10.570 [DEBUG] [Thread-127157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:52:20.598 [DEBUG] [Thread-127158 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:52:29.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T11:52:29.103 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T11:52:29.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T11:52:29.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 11, 52, 14), 37.76, 7.67, 0.0, 21.37, 26.48, 0, 0, 0, 2, 0, 0),)
2025-12-31T11:52:29.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 11:52:14
2025-12-31T11:52:29.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T11:52:30.088 [DEBUG] [Thread-127159] [transport.py] [_log()] starting thread (client mode): 0xbbfcefe0
2025-12-31T11:52:30.088 [DEBUG] [Thread-127159] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:52:30.108 [DEBUG] [Thread-127159] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T11:52:30.108 [INFO] [Thread-127159] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T11:52:30.110 [DEBUG] [Thread-127159] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:52:30.110 [DEBUG] [Thread-127159] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T11:52:30.110 [DEBUG] [Thread-127159] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:52:30.110 [DEBUG] [Thread-127159] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:52:30.110 [DEBUG] [Thread-127159] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:52:30.110 [DEBUG] [Thread-127159] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:52:30.110 [DEBUG] [Thread-127159] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:52:30.110 [DEBUG] [Thread-127159] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:52:30.110 [DEBUG] [Thread-127159] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:52:30.110 [DEBUG] [Thread-127159] [transport.py] [_log()] client lang: <none>
2025-12-31T11:52:30.110 [DEBUG] [Thread-127159] [transport.py] [_log()] server lang: <none>
2025-12-31T11:52:30.110 [DEBUG] [Thread-127159] [transport.py] [_log()] kex follows: False
2025-12-31T11:52:30.110 [DEBUG] [Thread-127159] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:52:30.110 [DEBUG] [Thread-127159] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:52:30.110 [DEBUG] [Thread-127159] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:52:30.110 [DEBUG] [Thread-127159] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:52:30.110 [DEBUG] [Thread-127159] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:52:30.110 [DEBUG] [Thread-127159] [transport.py] [_log()] Compression: none
2025-12-31T11:52:30.110 [DEBUG] [Thread-127159] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:52:30.122 [DEBUG] [Thread-127159] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:52:30.122 [DEBUG] [Thread-127159] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:52:30.123 [DEBUG] [Thread-127159] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T11:52:30.123 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T11:52:30.123 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:52:30.125 [DEBUG] [Thread-127159] [transport.py] [_log()] userauth is OK
2025-12-31T11:52:30.125 [DEBUG] [Thread-127159] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:52:30.125 [DEBUG] [Thread-127159] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:52:30.125 [DEBUG] [Thread-127159] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T11:52:30.125 [DEBUG] [Thread-127159] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:52:30.143 [INFO] [Thread-127159] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:52:30.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:52:30.831 [DEBUG] [Thread-127159] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:52:30.832 [DEBUG] [Thread-127159] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:52:30.832 [DEBUG] [Thread-127159] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T11:52:30.876 [DEBUG] [Thread-127159] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:52:30.876 [DEBUG] [Thread-127159] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:52:30.880 [DEBUG] [Thread-127159] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:52:30.885 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:52:30.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T11:52:30.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T11:52:30.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T11:52:30.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:52:30.903 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T11:52:30.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:52:30.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:52:30.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T11:52:30.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.410907 -999.00  +26.20  22.14     13   -4.30 1 1 1 1 1   888    0 30.63 29.89 ----- 23.8 22.1 292.0 25.7 33.0 -29.1 32.3 -28.5 31.4 -27.0 32.1 -26.3
2025-12-31T11:52:30.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T11:52:30.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T11:52:30.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.410907
2025-12-31T11:52:30.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T11:52:30.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T11:52:30.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T11:52:30.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T11:52:30.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T11:52:30.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T11:52:14', tmtdew=37.76, humidity=7.67, cloud=0.0, wind=21.37, temperature=26.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T09:51:42.365', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T11:52:30.906 [DEBUG] [Thread-127159] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:52:30.993 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T11:52:31.005 [DEBUG] [Thread-127162] [transport.py] [_log()] starting thread (client mode): 0xbbfcf7c0
2025-12-31T11:52:31.005 [DEBUG] [Thread-127162] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:52:31.020 [DEBUG] [Thread-127162] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T11:52:31.021 [INFO] [Thread-127162] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T11:52:31.029 [DEBUG] [Thread-127162] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:52:31.029 [DEBUG] [Thread-127162] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T11:52:31.029 [DEBUG] [Thread-127162] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:52:31.029 [DEBUG] [Thread-127162] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:52:31.029 [DEBUG] [Thread-127162] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:52:31.029 [DEBUG] [Thread-127162] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:52:31.029 [DEBUG] [Thread-127162] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:52:31.029 [DEBUG] [Thread-127162] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:52:31.029 [DEBUG] [Thread-127162] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:52:31.029 [DEBUG] [Thread-127162] [transport.py] [_log()] client lang: <none>
2025-12-31T11:52:31.029 [DEBUG] [Thread-127162] [transport.py] [_log()] server lang: <none>
2025-12-31T11:52:31.029 [DEBUG] [Thread-127162] [transport.py] [_log()] kex follows: False
2025-12-31T11:52:31.029 [DEBUG] [Thread-127162] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:52:31.029 [DEBUG] [Thread-127162] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:52:31.029 [DEBUG] [Thread-127162] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:52:31.029 [DEBUG] [Thread-127162] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:52:31.030 [DEBUG] [Thread-127162] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:52:31.030 [DEBUG] [Thread-127162] [transport.py] [_log()] Compression: none
2025-12-31T11:52:31.030 [DEBUG] [Thread-127162] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:52:31.086 [DEBUG] [Thread-127162] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:52:31.087 [DEBUG] [Thread-127162] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:52:31.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T11:52:31.088 [DEBUG] [Thread-127162] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T11:52:31.089 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:52:31.143 [DEBUG] [Thread-127162] [transport.py] [_log()] userauth is OK
2025-12-31T11:52:31.143 [DEBUG] [Thread-127162] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:52:31.143 [DEBUG] [Thread-127162] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:52:31.143 [DEBUG] [Thread-127162] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T11:52:31.143 [DEBUG] [Thread-127162] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:52:31.163 [INFO] [Thread-127162] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:52:31.164 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T11:52:31.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:52:32.021 [DEBUG] [Thread-127162] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:52:32.021 [DEBUG] [Thread-127162] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:52:32.068 [DEBUG] [Thread-127162] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:52:32.068 [DEBUG] [Thread-127162] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:52:32.077 [DEBUG] [Thread-127162] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:52:32.086 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:52:32.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T11:52:32.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T11:52:32.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:52:32.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:52:32.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:52:32.111 [DEBUG] [Thread-127162] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:52:35.635 [DEBUG] [Thread-127164 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:52:37.136 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:52:37.137 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:52:50.688 [DEBUG] [Thread-127165 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:53:02.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T11:53:02.109 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T11:53:02.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-12-31T11:53:02.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 11, 52, 46), 37.77, 7.43, 0.0, 25.43, 26.53, 0, 0, 0, 2, 0, 0),)
2025-12-31T11:53:02.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 11:52:46
2025-12-31T11:53:02.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T11:53:03.084 [DEBUG] [Thread-127166] [transport.py] [_log()] starting thread (client mode): 0xb6b03bb0
2025-12-31T11:53:03.084 [DEBUG] [Thread-127166] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:53:03.104 [DEBUG] [Thread-127166] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T11:53:03.104 [INFO] [Thread-127166] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T11:53:03.105 [DEBUG] [Thread-127166] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:53:03.105 [DEBUG] [Thread-127166] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T11:53:03.105 [DEBUG] [Thread-127166] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:53:03.105 [DEBUG] [Thread-127166] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:53:03.105 [DEBUG] [Thread-127166] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:53:03.105 [DEBUG] [Thread-127166] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:53:03.105 [DEBUG] [Thread-127166] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:53:03.105 [DEBUG] [Thread-127166] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:53:03.105 [DEBUG] [Thread-127166] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:53:03.105 [DEBUG] [Thread-127166] [transport.py] [_log()] client lang: <none>
2025-12-31T11:53:03.105 [DEBUG] [Thread-127166] [transport.py] [_log()] server lang: <none>
2025-12-31T11:53:03.105 [DEBUG] [Thread-127166] [transport.py] [_log()] kex follows: False
2025-12-31T11:53:03.106 [DEBUG] [Thread-127166] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:53:03.106 [DEBUG] [Thread-127166] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:53:03.106 [DEBUG] [Thread-127166] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:53:03.106 [DEBUG] [Thread-127166] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:53:03.106 [DEBUG] [Thread-127166] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:53:03.106 [DEBUG] [Thread-127166] [transport.py] [_log()] Compression: none
2025-12-31T11:53:03.106 [DEBUG] [Thread-127166] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:53:03.116 [DEBUG] [Thread-127166] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:53:03.116 [DEBUG] [Thread-127166] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:53:03.117 [DEBUG] [Thread-127166] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T11:53:03.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T11:53:03.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:53:03.118 [DEBUG] [Thread-127166] [transport.py] [_log()] userauth is OK
2025-12-31T11:53:03.119 [DEBUG] [Thread-127166] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:53:03.119 [DEBUG] [Thread-127166] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:53:03.119 [DEBUG] [Thread-127166] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T11:53:03.119 [DEBUG] [Thread-127166] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:53:03.143 [INFO] [Thread-127166] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:53:03.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:53:03.797 [DEBUG] [Thread-127166] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:53:03.797 [DEBUG] [Thread-127166] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:53:03.798 [DEBUG] [Thread-127166] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T11:53:03.838 [DEBUG] [Thread-127166] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:53:03.838 [DEBUG] [Thread-127166] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:53:03.841 [DEBUG] [Thread-127166] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:53:03.853 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:53:03.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T11:53:03.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T11:53:03.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T11:53:03.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:53:03.865 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T11:53:03.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:53:03.866 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:53:03.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T11:53:03.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.411254 -999.00  +25.90  19.20     13   -3.90 1 1 1 1 1   888    0 31.50 33.89 ----- 21.3 19.2 292.3 28.3 32.9 -26.4 32.2 -25.6 31.4 -22.9 32.0 -23.6
2025-12-31T11:53:03.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T11:53:03.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T11:53:03.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.411254
2025-12-31T11:53:03.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T11:53:03.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T11:53:03.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T11:53:03.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T11:53:03.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T11:53:03.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T11:52:46', tmtdew=37.77, humidity=7.43, cloud=0.0, wind=25.43, temperature=26.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T09:52:12.346', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T11:53:03.868 [DEBUG] [Thread-127166] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:53:03.951 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T11:53:03.963 [DEBUG] [Thread-127169] [transport.py] [_log()] starting thread (client mode): 0xb6b49720
2025-12-31T11:53:03.963 [DEBUG] [Thread-127169] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:53:03.978 [DEBUG] [Thread-127169] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T11:53:03.978 [INFO] [Thread-127169] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T11:53:03.985 [DEBUG] [Thread-127169] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:53:03.985 [DEBUG] [Thread-127169] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T11:53:03.985 [DEBUG] [Thread-127169] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:53:03.985 [DEBUG] [Thread-127169] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:53:03.985 [DEBUG] [Thread-127169] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:53:03.986 [DEBUG] [Thread-127169] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:53:03.986 [DEBUG] [Thread-127169] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:53:03.986 [DEBUG] [Thread-127169] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:53:03.986 [DEBUG] [Thread-127169] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:53:03.986 [DEBUG] [Thread-127169] [transport.py] [_log()] client lang: <none>
2025-12-31T11:53:03.986 [DEBUG] [Thread-127169] [transport.py] [_log()] server lang: <none>
2025-12-31T11:53:03.986 [DEBUG] [Thread-127169] [transport.py] [_log()] kex follows: False
2025-12-31T11:53:03.986 [DEBUG] [Thread-127169] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:53:03.986 [DEBUG] [Thread-127169] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:53:03.986 [DEBUG] [Thread-127169] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:53:03.986 [DEBUG] [Thread-127169] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:53:03.986 [DEBUG] [Thread-127169] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:53:03.986 [DEBUG] [Thread-127169] [transport.py] [_log()] Compression: none
2025-12-31T11:53:03.986 [DEBUG] [Thread-127169] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:53:04.043 [DEBUG] [Thread-127169] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:53:04.044 [DEBUG] [Thread-127169] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:53:04.044 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T11:53:04.044 [DEBUG] [Thread-127169] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T11:53:04.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:53:04.099 [DEBUG] [Thread-127169] [transport.py] [_log()] userauth is OK
2025-12-31T11:53:04.100 [DEBUG] [Thread-127169] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:53:04.100 [DEBUG] [Thread-127169] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:53:04.100 [DEBUG] [Thread-127169] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T11:53:04.100 [DEBUG] [Thread-127169] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:53:04.119 [INFO] [Thread-127169] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:53:04.120 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T11:53:04.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:53:04.952 [DEBUG] [Thread-127169] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:53:04.952 [DEBUG] [Thread-127169] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:53:05.000 [DEBUG] [Thread-127169] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:53:05.000 [DEBUG] [Thread-127169] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:53:05.009 [DEBUG] [Thread-127169] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:53:05.019 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:53:05.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T11:53:05.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T11:53:05.036 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:53:05.037 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:53:05.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:53:05.045 [DEBUG] [Thread-127169] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:53:05.722 [DEBUG] [Thread-127171 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:53:10.604 [DEBUG] [Thread-127172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:53:20.771 [DEBUG] [Thread-127173 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:53:35.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T11:53:35.058 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T11:53:35.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T11:53:35.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 11, 53, 19), 37.65, 7.49, 0.0, 23.79, 26.53, 0, 0, 0, 2, 0, 0),)
2025-12-31T11:53:35.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 11:53:19
2025-12-31T11:53:35.800 [DEBUG] [Thread-127174 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:53:35.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T11:53:36.029 [DEBUG] [Thread-127175] [transport.py] [_log()] starting thread (client mode): 0xb6b48220
2025-12-31T11:53:36.029 [DEBUG] [Thread-127175] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:53:36.050 [DEBUG] [Thread-127175] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T11:53:36.050 [INFO] [Thread-127175] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T11:53:36.054 [DEBUG] [Thread-127175] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:53:36.054 [DEBUG] [Thread-127175] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T11:53:36.054 [DEBUG] [Thread-127175] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:53:36.054 [DEBUG] [Thread-127175] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:53:36.054 [DEBUG] [Thread-127175] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:53:36.054 [DEBUG] [Thread-127175] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:53:36.054 [DEBUG] [Thread-127175] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:53:36.054 [DEBUG] [Thread-127175] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:53:36.054 [DEBUG] [Thread-127175] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:53:36.054 [DEBUG] [Thread-127175] [transport.py] [_log()] client lang: <none>
2025-12-31T11:53:36.054 [DEBUG] [Thread-127175] [transport.py] [_log()] server lang: <none>
2025-12-31T11:53:36.054 [DEBUG] [Thread-127175] [transport.py] [_log()] kex follows: False
2025-12-31T11:53:36.054 [DEBUG] [Thread-127175] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:53:36.054 [DEBUG] [Thread-127175] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:53:36.054 [DEBUG] [Thread-127175] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:53:36.054 [DEBUG] [Thread-127175] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:53:36.054 [DEBUG] [Thread-127175] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:53:36.054 [DEBUG] [Thread-127175] [transport.py] [_log()] Compression: none
2025-12-31T11:53:36.054 [DEBUG] [Thread-127175] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:53:36.072 [DEBUG] [Thread-127175] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:53:36.072 [DEBUG] [Thread-127175] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:53:36.073 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T11:53:36.073 [DEBUG] [Thread-127175] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T11:53:36.074 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:53:36.075 [DEBUG] [Thread-127175] [transport.py] [_log()] userauth is OK
2025-12-31T11:53:36.075 [DEBUG] [Thread-127175] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:53:36.075 [DEBUG] [Thread-127175] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:53:36.076 [DEBUG] [Thread-127175] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T11:53:36.076 [DEBUG] [Thread-127175] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:53:36.100 [INFO] [Thread-127175] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:53:36.101 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:53:36.865 [DEBUG] [Thread-127175] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:53:36.866 [DEBUG] [Thread-127175] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:53:36.866 [DEBUG] [Thread-127175] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T11:53:36.906 [DEBUG] [Thread-127175] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:53:36.906 [DEBUG] [Thread-127175] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:53:36.910 [DEBUG] [Thread-127175] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:53:36.919 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:53:36.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T11:53:36.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T11:53:36.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T11:53:36.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:53:36.935 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T11:53:36.935 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:53:36.935 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:53:36.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T11:53:36.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.411949 -999.00  +26.20  29.87     13   -4.30 1 1 1 1 1   888    0 31.67 43.73 ----- 23.4 29.9 281.0 33.3 32.9 -25.5 32.3 -24.6 31.2 -23.2 32.2 -22.6
2025-12-31T11:53:36.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T11:53:36.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T11:53:36.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.411949
2025-12-31T11:53:36.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T11:53:36.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T11:53:36.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T11:53:36.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T11:53:36.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T11:53:36.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T11:53:19', tmtdew=37.65, humidity=7.49, cloud=0.0, wind=23.79, temperature=26.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T09:53:12.394', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T11:53:36.938 [DEBUG] [Thread-127175] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:53:37.021 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T11:53:37.032 [DEBUG] [Thread-127178] [transport.py] [_log()] starting thread (client mode): 0xb6b00dc0
2025-12-31T11:53:37.033 [DEBUG] [Thread-127178] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:53:37.048 [DEBUG] [Thread-127178] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T11:53:37.048 [INFO] [Thread-127178] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T11:53:37.056 [DEBUG] [Thread-127178] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:53:37.056 [DEBUG] [Thread-127178] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T11:53:37.056 [DEBUG] [Thread-127178] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:53:37.056 [DEBUG] [Thread-127178] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:53:37.057 [DEBUG] [Thread-127178] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:53:37.057 [DEBUG] [Thread-127178] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:53:37.057 [DEBUG] [Thread-127178] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:53:37.057 [DEBUG] [Thread-127178] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:53:37.057 [DEBUG] [Thread-127178] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:53:37.057 [DEBUG] [Thread-127178] [transport.py] [_log()] client lang: <none>
2025-12-31T11:53:37.057 [DEBUG] [Thread-127178] [transport.py] [_log()] server lang: <none>
2025-12-31T11:53:37.057 [DEBUG] [Thread-127178] [transport.py] [_log()] kex follows: False
2025-12-31T11:53:37.057 [DEBUG] [Thread-127178] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:53:37.058 [DEBUG] [Thread-127178] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:53:37.058 [DEBUG] [Thread-127178] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:53:37.058 [DEBUG] [Thread-127178] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:53:37.058 [DEBUG] [Thread-127178] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:53:37.058 [DEBUG] [Thread-127178] [transport.py] [_log()] Compression: none
2025-12-31T11:53:37.058 [DEBUG] [Thread-127178] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:53:37.116 [DEBUG] [Thread-127178] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:53:37.117 [DEBUG] [Thread-127178] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:53:37.118 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T11:53:37.118 [DEBUG] [Thread-127178] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T11:53:37.119 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:53:37.172 [DEBUG] [Thread-127178] [transport.py] [_log()] userauth is OK
2025-12-31T11:53:37.173 [DEBUG] [Thread-127178] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:53:37.173 [DEBUG] [Thread-127178] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:53:37.173 [DEBUG] [Thread-127178] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T11:53:37.173 [DEBUG] [Thread-127178] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:53:37.194 [INFO] [Thread-127178] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:53:37.194 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T11:53:37.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:53:37.277 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:53:37.278 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:53:38.022 [DEBUG] [Thread-127178] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:53:38.022 [DEBUG] [Thread-127178] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:53:38.070 [DEBUG] [Thread-127178] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:53:38.070 [DEBUG] [Thread-127178] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:53:38.079 [DEBUG] [Thread-127178] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:53:38.088 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:53:38.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T11:53:38.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T11:53:38.106 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:53:38.106 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:53:38.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:53:38.115 [DEBUG] [Thread-127178] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:53:50.834 [DEBUG] [Thread-127180 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:54:05.890 [DEBUG] [Thread-127181 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:54:08.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T11:54:08.137 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T11:54:08.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T11:54:08.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 11, 53, 51), 36.88, 7.77, 0.0, 22.27, 25.48, 0, 0, 0, 2, 0, 0),)
2025-12-31T11:54:08.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 11:53:51
2025-12-31T11:54:09.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T11:54:09.169 [DEBUG] [Thread-127182] [transport.py] [_log()] starting thread (client mode): 0xb6b23dc0
2025-12-31T11:54:09.169 [DEBUG] [Thread-127182] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:54:09.189 [DEBUG] [Thread-127182] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T11:54:09.189 [INFO] [Thread-127182] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T11:54:09.191 [DEBUG] [Thread-127182] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:54:09.191 [DEBUG] [Thread-127182] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T11:54:09.191 [DEBUG] [Thread-127182] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:54:09.191 [DEBUG] [Thread-127182] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:54:09.191 [DEBUG] [Thread-127182] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:54:09.191 [DEBUG] [Thread-127182] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:54:09.191 [DEBUG] [Thread-127182] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:54:09.191 [DEBUG] [Thread-127182] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:54:09.191 [DEBUG] [Thread-127182] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:54:09.191 [DEBUG] [Thread-127182] [transport.py] [_log()] client lang: <none>
2025-12-31T11:54:09.191 [DEBUG] [Thread-127182] [transport.py] [_log()] server lang: <none>
2025-12-31T11:54:09.191 [DEBUG] [Thread-127182] [transport.py] [_log()] kex follows: False
2025-12-31T11:54:09.191 [DEBUG] [Thread-127182] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:54:09.191 [DEBUG] [Thread-127182] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:54:09.191 [DEBUG] [Thread-127182] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:54:09.191 [DEBUG] [Thread-127182] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:54:09.191 [DEBUG] [Thread-127182] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:54:09.191 [DEBUG] [Thread-127182] [transport.py] [_log()] Compression: none
2025-12-31T11:54:09.191 [DEBUG] [Thread-127182] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:54:09.210 [DEBUG] [Thread-127182] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:54:09.210 [DEBUG] [Thread-127182] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:54:09.210 [DEBUG] [Thread-127182] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T11:54:09.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T11:54:09.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:54:09.215 [DEBUG] [Thread-127182] [transport.py] [_log()] userauth is OK
2025-12-31T11:54:09.215 [DEBUG] [Thread-127182] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:54:09.215 [DEBUG] [Thread-127182] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:54:09.215 [DEBUG] [Thread-127182] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T11:54:09.215 [DEBUG] [Thread-127182] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:54:09.225 [INFO] [Thread-127182] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:54:09.225 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:54:09.872 [DEBUG] [Thread-127182] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:54:09.872 [DEBUG] [Thread-127182] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:54:09.873 [DEBUG] [Thread-127182] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T11:54:09.913 [DEBUG] [Thread-127182] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:54:09.913 [DEBUG] [Thread-127182] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:54:09.915 [DEBUG] [Thread-127182] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:54:09.926 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:54:09.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T11:54:09.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T11:54:09.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T11:54:09.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:54:09.933 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T11:54:09.933 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:54:09.933 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:54:09.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T11:54:09.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.412296 -999.00  +26.20  20.32     13   -3.90 1 1 1 1 1   888    0 31.46 44.86 ----- 14.2 20.3 298.3 30.6 32.8 -28.0 32.2 -25.2 31.0 -28.9 32.0 -25.1
2025-12-31T11:54:09.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T11:54:09.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T11:54:09.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.412296
2025-12-31T11:54:09.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T11:54:09.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T11:54:09.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T11:54:09.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T11:54:09.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T11:54:09.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T11:53:51', tmtdew=36.88, humidity=7.77, cloud=0.0, wind=22.27, temperature=25.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T09:53:42.374', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T11:54:09.935 [DEBUG] [Thread-127182] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:54: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-12-31T11:54:10.022 [DEBUG] [Thread-127185] [transport.py] [_log()] starting thread (client mode): 0xb6b23070
2025-12-31T11:54:10.022 [DEBUG] [Thread-127185] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:54:10.037 [DEBUG] [Thread-127185] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T11:54:10.037 [INFO] [Thread-127185] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T11:54:10.044 [DEBUG] [Thread-127185] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:54:10.044 [DEBUG] [Thread-127185] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T11:54:10.044 [DEBUG] [Thread-127185] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:54:10.044 [DEBUG] [Thread-127185] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:54:10.044 [DEBUG] [Thread-127185] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:54:10.044 [DEBUG] [Thread-127185] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:54:10.044 [DEBUG] [Thread-127185] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:54:10.044 [DEBUG] [Thread-127185] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:54:10.045 [DEBUG] [Thread-127185] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:54:10.045 [DEBUG] [Thread-127185] [transport.py] [_log()] client lang: <none>
2025-12-31T11:54:10.045 [DEBUG] [Thread-127185] [transport.py] [_log()] server lang: <none>
2025-12-31T11:54:10.045 [DEBUG] [Thread-127185] [transport.py] [_log()] kex follows: False
2025-12-31T11:54:10.045 [DEBUG] [Thread-127185] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:54:10.045 [DEBUG] [Thread-127185] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:54:10.045 [DEBUG] [Thread-127185] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:54:10.045 [DEBUG] [Thread-127185] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:54:10.045 [DEBUG] [Thread-127185] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:54:10.045 [DEBUG] [Thread-127185] [transport.py] [_log()] Compression: none
2025-12-31T11:54:10.045 [DEBUG] [Thread-127185] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:54:10.099 [DEBUG] [Thread-127185] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:54:10.099 [DEBUG] [Thread-127185] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:54:10.099 [DEBUG] [Thread-127185] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T11:54:10.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T11:54:10.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:54:10.156 [DEBUG] [Thread-127185] [transport.py] [_log()] userauth is OK
2025-12-31T11:54:10.156 [DEBUG] [Thread-127185] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:54:10.156 [DEBUG] [Thread-127185] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:54:10.156 [DEBUG] [Thread-127185] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T11:54:10.156 [DEBUG] [Thread-127185] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:54:10.170 [INFO] [Thread-127185] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:54:10.170 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T11:54:10.170 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:54:10.632 [DEBUG] [Thread-127187 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:54:10.993 [DEBUG] [Thread-127185] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:54:10.993 [DEBUG] [Thread-127185] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:54:11.040 [DEBUG] [Thread-127185] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:54:11.040 [DEBUG] [Thread-127185] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:54:11.048 [DEBUG] [Thread-127185] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:54:11.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:54: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-12-31T11:54:11.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T11:54:11.072 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:54:11.072 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:54:11.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:54:11.080 [DEBUG] [Thread-127185] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:54:20.932 [DEBUG] [Thread-127188 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:54:35.983 [DEBUG] [Thread-127189 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:54:37.417 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:54:37.418 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:54:41.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T11:54:41.103 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T11:54:41.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T11:54:41.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 11, 54, 23), 36.61, 7.96, 0.0, 24.99, 25.61, 0, 0, 0, 2, 0, 0),)
2025-12-31T11:54:41.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 11:54:23
2025-12-31T11:54:41.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T11:54:42.089 [DEBUG] [Thread-127190] [transport.py] [_log()] starting thread (client mode): 0xb6b031f0
2025-12-31T11:54:42.089 [DEBUG] [Thread-127190] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:54:42.110 [DEBUG] [Thread-127190] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T11:54:42.110 [INFO] [Thread-127190] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T11:54:42.113 [DEBUG] [Thread-127190] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:54:42.113 [DEBUG] [Thread-127190] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T11:54:42.113 [DEBUG] [Thread-127190] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:54:42.113 [DEBUG] [Thread-127190] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:54:42.113 [DEBUG] [Thread-127190] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:54:42.113 [DEBUG] [Thread-127190] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:54:42.113 [DEBUG] [Thread-127190] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:54:42.113 [DEBUG] [Thread-127190] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:54:42.113 [DEBUG] [Thread-127190] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:54:42.113 [DEBUG] [Thread-127190] [transport.py] [_log()] client lang: <none>
2025-12-31T11:54:42.113 [DEBUG] [Thread-127190] [transport.py] [_log()] server lang: <none>
2025-12-31T11:54:42.113 [DEBUG] [Thread-127190] [transport.py] [_log()] kex follows: False
2025-12-31T11:54:42.113 [DEBUG] [Thread-127190] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:54:42.113 [DEBUG] [Thread-127190] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:54:42.113 [DEBUG] [Thread-127190] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:54:42.113 [DEBUG] [Thread-127190] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:54:42.113 [DEBUG] [Thread-127190] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:54:42.113 [DEBUG] [Thread-127190] [transport.py] [_log()] Compression: none
2025-12-31T11:54:42.113 [DEBUG] [Thread-127190] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:54:42.123 [DEBUG] [Thread-127190] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:54:42.123 [DEBUG] [Thread-127190] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:54:42.123 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T11:54:42.123 [DEBUG] [Thread-127190] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T11:54:42.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:54:42.124 [DEBUG] [Thread-127190] [transport.py] [_log()] userauth is OK
2025-12-31T11:54:42.124 [DEBUG] [Thread-127190] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:54:42.124 [DEBUG] [Thread-127190] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:54:42.124 [DEBUG] [Thread-127190] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T11:54:42.124 [DEBUG] [Thread-127190] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:54:42.154 [INFO] [Thread-127190] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:54:42.155 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:54:42.861 [DEBUG] [Thread-127190] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:54:42.861 [DEBUG] [Thread-127190] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:54:42.861 [DEBUG] [Thread-127190] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T11:54:42.902 [DEBUG] [Thread-127190] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:54:42.902 [DEBUG] [Thread-127190] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:54:42.905 [DEBUG] [Thread-127190] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:54:42.919 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:54:42.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T11:54:42.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T11:54:42.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T11:54:42.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:54:42.929 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T11:54:42.930 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:54:42.930 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:54:42.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T11:54:42.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.412643 -999.00  +26.60  28.22     13   -4.00 1 1 1 1 1   888    0 31.36 44.59 ----- 25.7 28.2 291.4 32.4 33.0 -26.6 32.3 -25.2 31.2 -25.8 32.1 -23.0
2025-12-31T11:54:42.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T11:54:42.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T11:54:42.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.412643
2025-12-31T11:54:42.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T11:54:42.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T11:54:42.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T11:54:42.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T11:54:42.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T11:54:42.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T11:54:23', tmtdew=36.61, humidity=7.96, cloud=0.0, wind=24.99, temperature=25.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T09:54:12.355', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T11:54:42.933 [DEBUG] [Thread-127190] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:54:43.017 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T11:54:43.027 [DEBUG] [Thread-127193] [transport.py] [_log()] starting thread (client mode): 0xb6b4a170
2025-12-31T11:54:43.027 [DEBUG] [Thread-127193] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:54:43.041 [DEBUG] [Thread-127193] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T11:54:43.041 [INFO] [Thread-127193] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T11:54:43.049 [DEBUG] [Thread-127193] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:54:43.049 [DEBUG] [Thread-127193] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T11:54:43.049 [DEBUG] [Thread-127193] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:54:43.049 [DEBUG] [Thread-127193] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:54:43.049 [DEBUG] [Thread-127193] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:54:43.049 [DEBUG] [Thread-127193] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:54:43.049 [DEBUG] [Thread-127193] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:54:43.049 [DEBUG] [Thread-127193] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:54:43.049 [DEBUG] [Thread-127193] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:54:43.049 [DEBUG] [Thread-127193] [transport.py] [_log()] client lang: <none>
2025-12-31T11:54:43.049 [DEBUG] [Thread-127193] [transport.py] [_log()] server lang: <none>
2025-12-31T11:54:43.049 [DEBUG] [Thread-127193] [transport.py] [_log()] kex follows: False
2025-12-31T11:54:43.049 [DEBUG] [Thread-127193] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:54:43.050 [DEBUG] [Thread-127193] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:54:43.050 [DEBUG] [Thread-127193] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:54:43.050 [DEBUG] [Thread-127193] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:54:43.050 [DEBUG] [Thread-127193] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:54:43.050 [DEBUG] [Thread-127193] [transport.py] [_log()] Compression: none
2025-12-31T11:54:43.050 [DEBUG] [Thread-127193] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:54:43.105 [DEBUG] [Thread-127193] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:54:43.106 [DEBUG] [Thread-127193] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:54:43.107 [DEBUG] [Thread-127193] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T11:54:43.107 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T11:54:43.107 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:54:43.162 [DEBUG] [Thread-127193] [transport.py] [_log()] userauth is OK
2025-12-31T11:54:43.162 [DEBUG] [Thread-127193] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:54:43.162 [DEBUG] [Thread-127193] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:54:43.162 [DEBUG] [Thread-127193] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T11:54:43.162 [DEBUG] [Thread-127193] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:54:43.180 [INFO] [Thread-127193] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:54:43.181 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T11:54:43.181 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:54:44.016 [DEBUG] [Thread-127193] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:54:44.017 [DEBUG] [Thread-127193] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:54:44.065 [DEBUG] [Thread-127193] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:54:44.065 [DEBUG] [Thread-127193] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:54:44.074 [DEBUG] [Thread-127193] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:54:44.083 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:54:44.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T11:54:44.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T11:54:44.101 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:54:44.102 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:54:44.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:54:44.110 [DEBUG] [Thread-127193] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:54:51.019 [DEBUG] [Thread-127195 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:55:06.073 [DEBUG] [Thread-127196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:55:10.666 [DEBUG] [Thread-127197 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:55:14.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T11:55:14.133 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T11:55:14.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T11:55:14.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 11, 54, 55), 36.24, 8.41, 0.0, 20.78, 26.08, 0, 0, 0, 2, 0, 0),)
2025-12-31T11:55:14.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 11:54:55
2025-12-31T11:55:14.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T11:55:15.126 [DEBUG] [Thread-127198] [transport.py] [_log()] starting thread (client mode): 0xbbfcfc40
2025-12-31T11:55:15.126 [DEBUG] [Thread-127198] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:55:15.146 [DEBUG] [Thread-127198] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T11:55:15.146 [INFO] [Thread-127198] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T11:55:15.149 [DEBUG] [Thread-127198] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:55:15.149 [DEBUG] [Thread-127198] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T11:55:15.149 [DEBUG] [Thread-127198] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:55:15.149 [DEBUG] [Thread-127198] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:55:15.149 [DEBUG] [Thread-127198] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:55:15.149 [DEBUG] [Thread-127198] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:55:15.149 [DEBUG] [Thread-127198] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:55:15.149 [DEBUG] [Thread-127198] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:55:15.149 [DEBUG] [Thread-127198] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:55:15.149 [DEBUG] [Thread-127198] [transport.py] [_log()] client lang: <none>
2025-12-31T11:55:15.149 [DEBUG] [Thread-127198] [transport.py] [_log()] server lang: <none>
2025-12-31T11:55:15.149 [DEBUG] [Thread-127198] [transport.py] [_log()] kex follows: False
2025-12-31T11:55:15.149 [DEBUG] [Thread-127198] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:55:15.149 [DEBUG] [Thread-127198] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:55:15.149 [DEBUG] [Thread-127198] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:55:15.149 [DEBUG] [Thread-127198] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:55:15.149 [DEBUG] [Thread-127198] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:55:15.149 [DEBUG] [Thread-127198] [transport.py] [_log()] Compression: none
2025-12-31T11:55:15.149 [DEBUG] [Thread-127198] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:55:15.168 [DEBUG] [Thread-127198] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:55:15.168 [DEBUG] [Thread-127198] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:55:15.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T11:55:15.169 [DEBUG] [Thread-127198] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T11:55:15.170 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:55:15.171 [DEBUG] [Thread-127198] [transport.py] [_log()] userauth is OK
2025-12-31T11:55:15.172 [DEBUG] [Thread-127198] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:55:15.172 [DEBUG] [Thread-127198] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:55:15.172 [DEBUG] [Thread-127198] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T11:55:15.172 [DEBUG] [Thread-127198] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:55:15.196 [INFO] [Thread-127198] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:55:15.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:55:16.988 [DEBUG] [Thread-127198] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:55:16.988 [DEBUG] [Thread-127198] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:55:16.988 [DEBUG] [Thread-127198] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T11:55:17.029 [DEBUG] [Thread-127198] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:55:17.029 [DEBUG] [Thread-127198] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:55:17.032 [DEBUG] [Thread-127198] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:55:17.044 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:55:17.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T11:55:17.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T11:55:17.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T11:55:17.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:55:17.077 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T11:55:17.077 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:55:17.077 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:55:17.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T11:55:17.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.412990 -999.00  +26.20  25.06     13   -4.10 1 1 1 1 1   888    0 31.80 45.41 ----- 27.5 25.1 314.6 29.1 32.9 -27.5 32.2 -28.3 31.2 -25.2 32.0 -24.6
2025-12-31T11:55:17.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T11:55:17.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T11:55:17.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.412990
2025-12-31T11:55:17.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T11:55:17.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T11:55:17.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T11:55:17.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T11:55:17.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T11:55:17.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T11:54:55', tmtdew=36.24, humidity=8.41, cloud=0.0, wind=20.78, temperature=26.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T09:54:42.336', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T11:55:17.080 [DEBUG] [Thread-127198] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:55:17.164 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T11:55:17.176 [DEBUG] [Thread-127201] [transport.py] [_log()] starting thread (client mode): 0xb6b21330
2025-12-31T11:55:17.177 [DEBUG] [Thread-127201] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:55:17.192 [DEBUG] [Thread-127201] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T11:55:17.192 [INFO] [Thread-127201] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T11:55:17.199 [DEBUG] [Thread-127201] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:55:17.200 [DEBUG] [Thread-127201] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T11:55:17.200 [DEBUG] [Thread-127201] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:55:17.200 [DEBUG] [Thread-127201] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:55:17.200 [DEBUG] [Thread-127201] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:55:17.200 [DEBUG] [Thread-127201] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:55:17.200 [DEBUG] [Thread-127201] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:55:17.200 [DEBUG] [Thread-127201] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:55:17.200 [DEBUG] [Thread-127201] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:55:17.200 [DEBUG] [Thread-127201] [transport.py] [_log()] client lang: <none>
2025-12-31T11:55:17.200 [DEBUG] [Thread-127201] [transport.py] [_log()] server lang: <none>
2025-12-31T11:55:17.200 [DEBUG] [Thread-127201] [transport.py] [_log()] kex follows: False
2025-12-31T11:55:17.200 [DEBUG] [Thread-127201] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:55:17.200 [DEBUG] [Thread-127201] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:55:17.200 [DEBUG] [Thread-127201] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:55:17.200 [DEBUG] [Thread-127201] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:55:17.200 [DEBUG] [Thread-127201] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:55:17.200 [DEBUG] [Thread-127201] [transport.py] [_log()] Compression: none
2025-12-31T11:55:17.200 [DEBUG] [Thread-127201] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:55:17.258 [DEBUG] [Thread-127201] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:55:17.259 [DEBUG] [Thread-127201] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:55:17.260 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T11:55:17.260 [DEBUG] [Thread-127201] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T11:55:17.261 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:55:17.314 [DEBUG] [Thread-127201] [transport.py] [_log()] userauth is OK
2025-12-31T11:55:17.315 [DEBUG] [Thread-127201] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:55:17.315 [DEBUG] [Thread-127201] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:55:17.315 [DEBUG] [Thread-127201] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T11:55:17.315 [DEBUG] [Thread-127201] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:55:17.333 [INFO] [Thread-127201] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:55:17.334 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T11:55:17.334 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:55:18.175 [DEBUG] [Thread-127201] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:55:18.175 [DEBUG] [Thread-127201] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:55:18.222 [DEBUG] [Thread-127201] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:55:18.223 [DEBUG] [Thread-127201] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:55:18.232 [DEBUG] [Thread-127201] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:55:18.241 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:55:18.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T11:55:18.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T11:55:18.259 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:55:18.260 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:55:18.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:55:18.268 [DEBUG] [Thread-127201] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:55:21.114 [DEBUG] [Thread-127203 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:55:36.173 [DEBUG] [Thread-127204 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:55:37.557 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:55:37.558 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:55:48.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T11:55:48.285 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T11:55:48.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T11:55:48.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 11, 55, 27), 36.28, 8.39, 0.0, 21.19, 26.14, 0, 0, 0, 2, 0, 0),)
2025-12-31T11:55:48.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 11:55:27
2025-12-31T11:55:49.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T11:55:49.260 [DEBUG] [Thread-127205] [transport.py] [_log()] starting thread (client mode): 0xb6b21060
2025-12-31T11:55:49.260 [DEBUG] [Thread-127205] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:55:49.280 [DEBUG] [Thread-127205] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T11:55:49.280 [INFO] [Thread-127205] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T11:55:49.284 [DEBUG] [Thread-127205] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:55:49.284 [DEBUG] [Thread-127205] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T11:55:49.284 [DEBUG] [Thread-127205] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:55:49.284 [DEBUG] [Thread-127205] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:55:49.284 [DEBUG] [Thread-127205] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:55:49.284 [DEBUG] [Thread-127205] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:55:49.284 [DEBUG] [Thread-127205] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:55:49.284 [DEBUG] [Thread-127205] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:55:49.284 [DEBUG] [Thread-127205] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:55:49.284 [DEBUG] [Thread-127205] [transport.py] [_log()] client lang: <none>
2025-12-31T11:55:49.284 [DEBUG] [Thread-127205] [transport.py] [_log()] server lang: <none>
2025-12-31T11:55:49.284 [DEBUG] [Thread-127205] [transport.py] [_log()] kex follows: False
2025-12-31T11:55:49.284 [DEBUG] [Thread-127205] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:55:49.284 [DEBUG] [Thread-127205] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:55:49.284 [DEBUG] [Thread-127205] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:55:49.284 [DEBUG] [Thread-127205] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:55:49.285 [DEBUG] [Thread-127205] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:55:49.285 [DEBUG] [Thread-127205] [transport.py] [_log()] Compression: none
2025-12-31T11:55:49.285 [DEBUG] [Thread-127205] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:55:49.296 [DEBUG] [Thread-127205] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:55:49.297 [DEBUG] [Thread-127205] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:55:49.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T11:55:49.298 [DEBUG] [Thread-127205] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T11:55:49.298 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:55:49.300 [DEBUG] [Thread-127205] [transport.py] [_log()] userauth is OK
2025-12-31T11:55:49.300 [DEBUG] [Thread-127205] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:55:49.300 [DEBUG] [Thread-127205] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:55:49.300 [DEBUG] [Thread-127205] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T11:55:49.300 [DEBUG] [Thread-127205] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:55:49.325 [INFO] [Thread-127205] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:55:49.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:55:49.953 [DEBUG] [Thread-127205] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:55:49.954 [DEBUG] [Thread-127205] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:55:49.954 [DEBUG] [Thread-127205] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T11:55:49.995 [DEBUG] [Thread-127205] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:55:49.995 [DEBUG] [Thread-127205] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:55:49.998 [DEBUG] [Thread-127205] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:55:50.010 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:55:50.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T11:55:50.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T11:55:50.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T11:55:50.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:55:50.021 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T11:55:50.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:55:50.022 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:55:50.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T11:55:50.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.413338 -999.00  +26.20  18.37     13   -4.30 1 1 1 1 1   888    0 31.13 48.64 ----- 22.9 18.4 312.6 26.5 33.2 -24.1 32.5 -23.4 31.6 -23.6 32.4 -21.0
2025-12-31T11:55:50.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T11:55:50.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T11:55:50.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.413338
2025-12-31T11:55:50.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T11:55:50.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T11:55:50.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T11:55:50.024 [DEBUG] [Thread-127205] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:55:50.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T11:55:50.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T11:55:50.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T11:55:27', tmtdew=36.28, humidity=8.39, cloud=0.0, wind=21.19, temperature=26.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T09:55:12.403', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T11:55:50.107 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T11:55:50.120 [DEBUG] [Thread-127208] [transport.py] [_log()] starting thread (client mode): 0xbbfcde10
2025-12-31T11:55:50.120 [DEBUG] [Thread-127208] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:55:50.135 [DEBUG] [Thread-127208] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T11:55:50.135 [INFO] [Thread-127208] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T11:55:50.142 [DEBUG] [Thread-127208] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:55:50.142 [DEBUG] [Thread-127208] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T11:55:50.143 [DEBUG] [Thread-127208] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:55:50.143 [DEBUG] [Thread-127208] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:55:50.143 [DEBUG] [Thread-127208] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:55:50.143 [DEBUG] [Thread-127208] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:55:50.143 [DEBUG] [Thread-127208] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:55:50.143 [DEBUG] [Thread-127208] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:55:50.143 [DEBUG] [Thread-127208] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:55:50.143 [DEBUG] [Thread-127208] [transport.py] [_log()] client lang: <none>
2025-12-31T11:55:50.143 [DEBUG] [Thread-127208] [transport.py] [_log()] server lang: <none>
2025-12-31T11:55:50.143 [DEBUG] [Thread-127208] [transport.py] [_log()] kex follows: False
2025-12-31T11:55:50.143 [DEBUG] [Thread-127208] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:55:50.143 [DEBUG] [Thread-127208] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:55:50.143 [DEBUG] [Thread-127208] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:55:50.143 [DEBUG] [Thread-127208] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:55:50.143 [DEBUG] [Thread-127208] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:55:50.143 [DEBUG] [Thread-127208] [transport.py] [_log()] Compression: none
2025-12-31T11:55:50.143 [DEBUG] [Thread-127208] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:55:50.205 [DEBUG] [Thread-127208] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:55:50.206 [DEBUG] [Thread-127208] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:55:50.206 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T11:55:50.207 [DEBUG] [Thread-127208] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T11:55:50.208 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:55:50.263 [DEBUG] [Thread-127208] [transport.py] [_log()] userauth is OK
2025-12-31T11:55:50.264 [DEBUG] [Thread-127208] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:55:50.264 [DEBUG] [Thread-127208] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:55:50.264 [DEBUG] [Thread-127208] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T11:55:50.264 [DEBUG] [Thread-127208] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:55:50.283 [INFO] [Thread-127208] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:55:50.283 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T11:55:50.284 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:55:51.119 [DEBUG] [Thread-127208] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:55:51.119 [DEBUG] [Thread-127208] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:55:51.167 [DEBUG] [Thread-127208] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:55:51.167 [DEBUG] [Thread-127208] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:55:51.176 [DEBUG] [Thread-127208] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:55:51.185 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:55:51.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T11:55:51.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T11:55:51.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:55:51.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:55:51.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:55:51.212 [DEBUG] [Thread-127208] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:55:51.214 [DEBUG] [Thread-127210 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:56:06.260 [DEBUG] [Thread-127211 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:56:10.712 [DEBUG] [Thread-127212 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:56:21.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T11:56:21.236 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T11:56:21.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T11:56:21.289 [DEBUG] [Thread-127213 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:56:21.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 11, 55, 59), 36.93, 7.89, 0.0, 17.24, 26.39, 0, 0, 0, 2, 0, 0),)
2025-12-31T11:56:21.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 11:55:59
2025-12-31T11:56:22.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T11:56:22.211 [DEBUG] [Thread-127214] [transport.py] [_log()] starting thread (client mode): 0xbbfcef80
2025-12-31T11:56:22.211 [DEBUG] [Thread-127214] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:56:22.232 [DEBUG] [Thread-127214] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T11:56:22.232 [INFO] [Thread-127214] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T11:56:22.235 [DEBUG] [Thread-127214] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:56:22.235 [DEBUG] [Thread-127214] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T11:56:22.235 [DEBUG] [Thread-127214] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:56:22.235 [DEBUG] [Thread-127214] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:56:22.235 [DEBUG] [Thread-127214] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:56:22.235 [DEBUG] [Thread-127214] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:56:22.235 [DEBUG] [Thread-127214] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:56:22.236 [DEBUG] [Thread-127214] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:56:22.236 [DEBUG] [Thread-127214] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:56:22.236 [DEBUG] [Thread-127214] [transport.py] [_log()] client lang: <none>
2025-12-31T11:56:22.236 [DEBUG] [Thread-127214] [transport.py] [_log()] server lang: <none>
2025-12-31T11:56:22.236 [DEBUG] [Thread-127214] [transport.py] [_log()] kex follows: False
2025-12-31T11:56:22.236 [DEBUG] [Thread-127214] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:56:22.236 [DEBUG] [Thread-127214] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:56:22.236 [DEBUG] [Thread-127214] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:56:22.236 [DEBUG] [Thread-127214] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:56:22.236 [DEBUG] [Thread-127214] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:56:22.236 [DEBUG] [Thread-127214] [transport.py] [_log()] Compression: none
2025-12-31T11:56:22.236 [DEBUG] [Thread-127214] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:56:22.255 [DEBUG] [Thread-127214] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:56:22.256 [DEBUG] [Thread-127214] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:56:22.256 [DEBUG] [Thread-127214] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T11:56:22.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T11:56:22.257 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:56:22.297 [DEBUG] [Thread-127214] [transport.py] [_log()] userauth is OK
2025-12-31T11:56:22.297 [DEBUG] [Thread-127214] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:56:22.297 [DEBUG] [Thread-127214] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:56:22.297 [DEBUG] [Thread-127214] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T11:56:22.298 [DEBUG] [Thread-127214] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:56:22.323 [INFO] [Thread-127214] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:56:22.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:56:23.051 [DEBUG] [Thread-127214] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:56:23.051 [DEBUG] [Thread-127214] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:56:23.051 [DEBUG] [Thread-127214] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T11:56:23.093 [DEBUG] [Thread-127214] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:56:23.093 [DEBUG] [Thread-127214] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:56:23.096 [DEBUG] [Thread-127214] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:56:23.107 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:56:23.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T11:56:23.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T11:56:23.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T11:56:23.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:56:23.121 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T11:56:23.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:56:23.121 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:56:23.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T11:56:23.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.413685 -999.00  +25.50  24.49     13   -4.30 1 1 1 1 1   888    0 31.39 48.29 ----- 19.7 24.5 312.8 26.9 33.1 -29.8 32.4 -27.8 31.5 -26.6 32.2 -26.5
2025-12-31T11:56:23.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T11:56:23.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T11:56:23.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.413685
2025-12-31T11:56:23.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T11:56:23.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T11:56:23.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T11:56:23.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T11:56:23.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T11:56:23.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T11:55:59', tmtdew=36.93, humidity=7.89, cloud=0.0, wind=17.24, temperature=26.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T09:55:42.384', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T11:56:23.122 [DEBUG] [Thread-127214] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:56:23.199 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T11:56:23.210 [DEBUG] [Thread-127217] [transport.py] [_log()] starting thread (client mode): 0xb6b21360
2025-12-31T11:56:23.210 [DEBUG] [Thread-127217] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:56:23.224 [DEBUG] [Thread-127217] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T11:56:23.225 [INFO] [Thread-127217] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T11:56:23.232 [DEBUG] [Thread-127217] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:56:23.232 [DEBUG] [Thread-127217] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T11:56:23.232 [DEBUG] [Thread-127217] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:56:23.232 [DEBUG] [Thread-127217] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:56:23.233 [DEBUG] [Thread-127217] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:56:23.233 [DEBUG] [Thread-127217] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:56:23.233 [DEBUG] [Thread-127217] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:56:23.233 [DEBUG] [Thread-127217] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:56:23.233 [DEBUG] [Thread-127217] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:56:23.233 [DEBUG] [Thread-127217] [transport.py] [_log()] client lang: <none>
2025-12-31T11:56:23.233 [DEBUG] [Thread-127217] [transport.py] [_log()] server lang: <none>
2025-12-31T11:56:23.233 [DEBUG] [Thread-127217] [transport.py] [_log()] kex follows: False
2025-12-31T11:56:23.233 [DEBUG] [Thread-127217] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:56:23.233 [DEBUG] [Thread-127217] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:56:23.233 [DEBUG] [Thread-127217] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:56:23.233 [DEBUG] [Thread-127217] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:56:23.233 [DEBUG] [Thread-127217] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:56:23.233 [DEBUG] [Thread-127217] [transport.py] [_log()] Compression: none
2025-12-31T11:56:23.233 [DEBUG] [Thread-127217] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:56:23.292 [DEBUG] [Thread-127217] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:56:23.293 [DEBUG] [Thread-127217] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:56:23.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T11:56:23.294 [DEBUG] [Thread-127217] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T11:56:23.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:56:23.348 [DEBUG] [Thread-127217] [transport.py] [_log()] userauth is OK
2025-12-31T11:56:23.348 [DEBUG] [Thread-127217] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:56:23.348 [DEBUG] [Thread-127217] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:56:23.348 [DEBUG] [Thread-127217] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T11:56:23.349 [DEBUG] [Thread-127217] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:56:23.367 [INFO] [Thread-127217] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:56:23.368 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T11:56:23.368 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:56:24.190 [DEBUG] [Thread-127217] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:56:24.190 [DEBUG] [Thread-127217] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:56:24.238 [DEBUG] [Thread-127217] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:56:24.238 [DEBUG] [Thread-127217] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:56:24.247 [DEBUG] [Thread-127217] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:56:24.256 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:56:24.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T11:56:24.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T11:56:24.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:56:24.274 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:56:24.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:56:24.282 [DEBUG] [Thread-127217] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:56:36.321 [DEBUG] [Thread-127219 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:56:37.698 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:56:37.699 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:56:51.379 [DEBUG] [Thread-127220 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:56:54.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T11:56:54.280 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T11:56:54.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T11:56:54.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 11, 56, 31), 36.83, 7.92, 0.0, 16.44, 26.23, 0, 0, 0, 2, 0, 0),)
2025-12-31T11:56:54.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 11:56:31
2025-12-31T11:56:55.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T11:56:55.255 [DEBUG] [Thread-127221] [transport.py] [_log()] starting thread (client mode): 0xb6b20940
2025-12-31T11:56:55.255 [DEBUG] [Thread-127221] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:56:55.275 [DEBUG] [Thread-127221] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T11:56:55.275 [INFO] [Thread-127221] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T11:56:55.278 [DEBUG] [Thread-127221] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:56:55.278 [DEBUG] [Thread-127221] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T11:56:55.278 [DEBUG] [Thread-127221] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:56:55.278 [DEBUG] [Thread-127221] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:56:55.278 [DEBUG] [Thread-127221] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:56:55.278 [DEBUG] [Thread-127221] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:56:55.278 [DEBUG] [Thread-127221] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:56:55.278 [DEBUG] [Thread-127221] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:56:55.278 [DEBUG] [Thread-127221] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:56:55.278 [DEBUG] [Thread-127221] [transport.py] [_log()] client lang: <none>
2025-12-31T11:56:55.278 [DEBUG] [Thread-127221] [transport.py] [_log()] server lang: <none>
2025-12-31T11:56:55.278 [DEBUG] [Thread-127221] [transport.py] [_log()] kex follows: False
2025-12-31T11:56:55.278 [DEBUG] [Thread-127221] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:56:55.278 [DEBUG] [Thread-127221] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:56:55.278 [DEBUG] [Thread-127221] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:56:55.278 [DEBUG] [Thread-127221] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:56:55.278 [DEBUG] [Thread-127221] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:56:55.278 [DEBUG] [Thread-127221] [transport.py] [_log()] Compression: none
2025-12-31T11:56:55.278 [DEBUG] [Thread-127221] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:56:55.295 [DEBUG] [Thread-127221] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:56:55.296 [DEBUG] [Thread-127221] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:56:55.296 [DEBUG] [Thread-127221] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T11:56:55.296 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T11:56:55.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:56:55.298 [DEBUG] [Thread-127221] [transport.py] [_log()] userauth is OK
2025-12-31T11:56:55.298 [DEBUG] [Thread-127221] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:56:55.299 [DEBUG] [Thread-127221] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:56:55.299 [DEBUG] [Thread-127221] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T11:56:55.299 [DEBUG] [Thread-127221] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:56:55.334 [INFO] [Thread-127221] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:56:55.335 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:56:55.986 [DEBUG] [Thread-127221] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:56:55.986 [DEBUG] [Thread-127221] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:56:55.987 [DEBUG] [Thread-127221] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T11:56:56.026 [DEBUG] [Thread-127221] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:56:56.027 [DEBUG] [Thread-127221] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:56:56.030 [DEBUG] [Thread-127221] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:56:56.041 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:56:56.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T11:56:56.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T11:56:56.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T11:56:56.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:56:56.050 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T11:56:56.050 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:56:56.050 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:56:56.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T11:56:56.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.414032 -999.00  +25.40  18.17     13   -4.40 1 1 1 1 1   888    0 31.01 50.64 ----- 18.6 18.2 314.8 27.2 32.9 -25.7 32.1 -25.5 31.4 -25.6 32.0 -22.6
2025-12-31T11:56:56.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T11:56:56.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T11:56:56.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.414032
2025-12-31T11:56:56.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T11:56:56.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T11:56:56.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T11:56:56.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T11:56:56.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T11:56:56.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T11:56:31', tmtdew=36.83, humidity=7.92, cloud=0.0, wind=16.44, temperature=26.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T09:56:12.365', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T11:56:56.053 [DEBUG] [Thread-127221] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:56:56.136 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T11:56:56.148 [DEBUG] [Thread-127224] [transport.py] [_log()] starting thread (client mode): 0xb6b21360
2025-12-31T11:56:56.149 [DEBUG] [Thread-127224] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:56:56.164 [DEBUG] [Thread-127224] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T11:56:56.164 [INFO] [Thread-127224] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T11:56:56.171 [DEBUG] [Thread-127224] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:56:56.172 [DEBUG] [Thread-127224] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T11:56:56.172 [DEBUG] [Thread-127224] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:56:56.172 [DEBUG] [Thread-127224] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:56:56.172 [DEBUG] [Thread-127224] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:56:56.172 [DEBUG] [Thread-127224] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:56:56.172 [DEBUG] [Thread-127224] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:56:56.172 [DEBUG] [Thread-127224] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:56:56.172 [DEBUG] [Thread-127224] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:56:56.172 [DEBUG] [Thread-127224] [transport.py] [_log()] client lang: <none>
2025-12-31T11:56:56.172 [DEBUG] [Thread-127224] [transport.py] [_log()] server lang: <none>
2025-12-31T11:56:56.173 [DEBUG] [Thread-127224] [transport.py] [_log()] kex follows: False
2025-12-31T11:56:56.173 [DEBUG] [Thread-127224] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:56:56.173 [DEBUG] [Thread-127224] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:56:56.173 [DEBUG] [Thread-127224] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:56:56.173 [DEBUG] [Thread-127224] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:56:56.173 [DEBUG] [Thread-127224] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:56:56.173 [DEBUG] [Thread-127224] [transport.py] [_log()] Compression: none
2025-12-31T11:56:56.173 [DEBUG] [Thread-127224] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:56:56.229 [DEBUG] [Thread-127224] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:56:56.230 [DEBUG] [Thread-127224] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:56:56.230 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T11:56:56.231 [DEBUG] [Thread-127224] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T11:56:56.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:56:56.285 [DEBUG] [Thread-127224] [transport.py] [_log()] userauth is OK
2025-12-31T11:56:56.285 [DEBUG] [Thread-127224] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:56:56.285 [DEBUG] [Thread-127224] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:56:56.286 [DEBUG] [Thread-127224] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T11:56:56.286 [DEBUG] [Thread-127224] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:56:56.304 [INFO] [Thread-127224] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:56:56.304 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T11:56:56.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:56:57.125 [DEBUG] [Thread-127224] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:56:57.125 [DEBUG] [Thread-127224] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:56:57.173 [DEBUG] [Thread-127224] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:56:57.173 [DEBUG] [Thread-127224] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:56:57.182 [DEBUG] [Thread-127224] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:56:57.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:56:57.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T11:56:57.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T11:56:57.207 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:56:57.207 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:56:57.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:56:57.216 [DEBUG] [Thread-127224] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:57:06.417 [DEBUG] [Thread-127226 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:57:10.757 [DEBUG] [Thread-127227 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:57:21.466 [DEBUG] [Thread-127228 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:57:27.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T11:57:27.216 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T11: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-12-31T11:57:27.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 11, 57, 3), 36.71, 7.99, 0.0, 14.17, 26.14, 0, 0, 0, 2, 0, 0),)
2025-12-31T11:57:27.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 11:57:03
2025-12-31T11:57:28.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T11:57:28.197 [DEBUG] [Thread-127229] [transport.py] [_log()] starting thread (client mode): 0xb6bb1300
2025-12-31T11:57:28.197 [DEBUG] [Thread-127229] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:57:28.219 [DEBUG] [Thread-127229] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T11:57:28.219 [INFO] [Thread-127229] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T11:57:28.222 [DEBUG] [Thread-127229] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:57:28.222 [DEBUG] [Thread-127229] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T11:57:28.222 [DEBUG] [Thread-127229] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:57:28.222 [DEBUG] [Thread-127229] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:57:28.223 [DEBUG] [Thread-127229] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:57:28.223 [DEBUG] [Thread-127229] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:57:28.223 [DEBUG] [Thread-127229] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:57:28.223 [DEBUG] [Thread-127229] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:57:28.223 [DEBUG] [Thread-127229] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:57:28.223 [DEBUG] [Thread-127229] [transport.py] [_log()] client lang: <none>
2025-12-31T11:57:28.223 [DEBUG] [Thread-127229] [transport.py] [_log()] server lang: <none>
2025-12-31T11:57:28.223 [DEBUG] [Thread-127229] [transport.py] [_log()] kex follows: False
2025-12-31T11:57:28.223 [DEBUG] [Thread-127229] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:57:28.223 [DEBUG] [Thread-127229] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:57:28.223 [DEBUG] [Thread-127229] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:57:28.223 [DEBUG] [Thread-127229] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:57:28.223 [DEBUG] [Thread-127229] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:57:28.223 [DEBUG] [Thread-127229] [transport.py] [_log()] Compression: none
2025-12-31T11:57:28.223 [DEBUG] [Thread-127229] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:57:28.240 [DEBUG] [Thread-127229] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:57:28.240 [DEBUG] [Thread-127229] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:57:28.241 [DEBUG] [Thread-127229] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T11:57:28.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T11:57:28.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:57:28.243 [DEBUG] [Thread-127229] [transport.py] [_log()] userauth is OK
2025-12-31T11:57:28.243 [DEBUG] [Thread-127229] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:57:28.243 [DEBUG] [Thread-127229] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:57:28.243 [DEBUG] [Thread-127229] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T11:57:28.243 [DEBUG] [Thread-127229] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:57:28.266 [INFO] [Thread-127229] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:57:28.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:57:29.029 [DEBUG] [Thread-127229] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:57:29.030 [DEBUG] [Thread-127229] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:57:29.030 [DEBUG] [Thread-127229] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T11:57:29.071 [DEBUG] [Thread-127229] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:57:29.071 [DEBUG] [Thread-127229] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:57:29.075 [DEBUG] [Thread-127229] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:57:29.087 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:57:29.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T11:57:29.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T11:57:29.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T11:57:29.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:57:29.099 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T11:57:29.099 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:57:29.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:57:29.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T11:57:29.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.414379 -999.00  +25.10  19.55     13   -4.70 1 2 1 1 1   888    0 31.18 52.53 ----- 21.7 19.6 308.8 25.9 33.1 -23.7 32.3 -23.4 31.6 -20.7 32.2 -20.8
2025-12-31T11:57:29.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T11:57:29.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T11:57:29.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.414379
2025-12-31T11:57:29.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T11:57:29.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T11:57:29.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T11:57:29.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T11:57:29.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T11:57:29.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T11:57:03', tmtdew=36.71, humidity=7.99, cloud=0.0, wind=14.17, temperature=26.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T09:56:42.346', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T11:57:29.102 [DEBUG] [Thread-127229] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:57:29.186 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T11:57:29.197 [DEBUG] [Thread-127232] [transport.py] [_log()] starting thread (client mode): 0xb6bb0310
2025-12-31T11:57:29.197 [DEBUG] [Thread-127232] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:57:29.212 [DEBUG] [Thread-127232] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T11:57:29.212 [INFO] [Thread-127232] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T11:57:29.220 [DEBUG] [Thread-127232] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:57:29.220 [DEBUG] [Thread-127232] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T11:57:29.220 [DEBUG] [Thread-127232] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:57:29.220 [DEBUG] [Thread-127232] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:57:29.220 [DEBUG] [Thread-127232] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:57:29.220 [DEBUG] [Thread-127232] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:57:29.220 [DEBUG] [Thread-127232] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:57:29.220 [DEBUG] [Thread-127232] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:57:29.220 [DEBUG] [Thread-127232] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:57:29.220 [DEBUG] [Thread-127232] [transport.py] [_log()] client lang: <none>
2025-12-31T11:57:29.220 [DEBUG] [Thread-127232] [transport.py] [_log()] server lang: <none>
2025-12-31T11:57:29.220 [DEBUG] [Thread-127232] [transport.py] [_log()] kex follows: False
2025-12-31T11:57:29.220 [DEBUG] [Thread-127232] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:57:29.220 [DEBUG] [Thread-127232] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:57:29.221 [DEBUG] [Thread-127232] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:57:29.221 [DEBUG] [Thread-127232] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:57:29.221 [DEBUG] [Thread-127232] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:57:29.221 [DEBUG] [Thread-127232] [transport.py] [_log()] Compression: none
2025-12-31T11:57:29.221 [DEBUG] [Thread-127232] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:57:29.282 [DEBUG] [Thread-127232] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:57:29.282 [DEBUG] [Thread-127232] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:57:29.283 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T11:57:29.283 [DEBUG] [Thread-127232] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T11:57:29.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:57:29.337 [DEBUG] [Thread-127232] [transport.py] [_log()] userauth is OK
2025-12-31T11:57:29.337 [DEBUG] [Thread-127232] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:57:29.338 [DEBUG] [Thread-127232] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:57:29.338 [DEBUG] [Thread-127232] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T11:57:29.338 [DEBUG] [Thread-127232] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:57:29.356 [INFO] [Thread-127232] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:57:29.356 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T11:57:29.357 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:57:30.202 [DEBUG] [Thread-127232] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:57:30.203 [DEBUG] [Thread-127232] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:57:30.254 [DEBUG] [Thread-127232] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:57:30.254 [DEBUG] [Thread-127232] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:57:30.266 [DEBUG] [Thread-127232] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:57:30.274 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:57:30.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T11:57:30.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T11:57:30.292 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:57:30.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:57:30.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:57:30.300 [DEBUG] [Thread-127232] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:57:36.497 [DEBUG] [Thread-127234 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:57:37.839 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:57:37.841 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:57:51.544 [DEBUG] [Thread-127235 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:58:00.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T11:58:00.322 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T11:58:00.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T11:58:01.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 11, 57, 35), 36.56, 8.09, 0.0, 14.03, 26.15, 0, 0, 0, 2, 0, 0),)
2025-12-31T11:58:01.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 11:57:35
2025-12-31T11:58:01.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T11:58:01.356 [DEBUG] [Thread-127236] [transport.py] [_log()] starting thread (client mode): 0xb6bb1450
2025-12-31T11:58:01.356 [DEBUG] [Thread-127236] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:58:01.375 [DEBUG] [Thread-127236] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T11:58:01.376 [INFO] [Thread-127236] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T11:58:01.379 [DEBUG] [Thread-127236] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:58:01.379 [DEBUG] [Thread-127236] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T11:58:01.379 [DEBUG] [Thread-127236] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:58:01.379 [DEBUG] [Thread-127236] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:58:01.379 [DEBUG] [Thread-127236] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:58:01.379 [DEBUG] [Thread-127236] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:58:01.379 [DEBUG] [Thread-127236] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:58:01.379 [DEBUG] [Thread-127236] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:58:01.379 [DEBUG] [Thread-127236] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:58:01.379 [DEBUG] [Thread-127236] [transport.py] [_log()] client lang: <none>
2025-12-31T11:58:01.379 [DEBUG] [Thread-127236] [transport.py] [_log()] server lang: <none>
2025-12-31T11:58:01.379 [DEBUG] [Thread-127236] [transport.py] [_log()] kex follows: False
2025-12-31T11:58:01.379 [DEBUG] [Thread-127236] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:58:01.379 [DEBUG] [Thread-127236] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:58:01.379 [DEBUG] [Thread-127236] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:58:01.379 [DEBUG] [Thread-127236] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:58:01.379 [DEBUG] [Thread-127236] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:58:01.379 [DEBUG] [Thread-127236] [transport.py] [_log()] Compression: none
2025-12-31T11:58:01.379 [DEBUG] [Thread-127236] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:58:01.395 [DEBUG] [Thread-127236] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:58:01.395 [DEBUG] [Thread-127236] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:58:01.395 [DEBUG] [Thread-127236] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T11:58:01.395 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T11:58:01.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:58:01.397 [DEBUG] [Thread-127236] [transport.py] [_log()] userauth is OK
2025-12-31T11:58:01.397 [DEBUG] [Thread-127236] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:58:01.397 [DEBUG] [Thread-127236] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:58:01.397 [DEBUG] [Thread-127236] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T11:58:01.397 [DEBUG] [Thread-127236] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:58:01.415 [INFO] [Thread-127236] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:58:01.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:58:02.027 [DEBUG] [Thread-127236] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:58:02.027 [DEBUG] [Thread-127236] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:58:02.027 [DEBUG] [Thread-127236] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T11:58:02.070 [DEBUG] [Thread-127236] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:58:02.070 [DEBUG] [Thread-127236] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:58:02.073 [DEBUG] [Thread-127236] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:58:02.083 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:58:02.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T11:58:02.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T11:58:02.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T11:58:02.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:58:02.093 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T11:58:02.093 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:58:02.093 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:58:02.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T11:58:02.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.415074 -999.00  +24.90  14.78     13   -4.70 1 2 1 1 1   888    0 31.32 52.44 ----- 15.4 14.8 301.0 20.8 33.2 -24.9 32.4 -23.3 31.8 -21.7 32.4 -22.2
2025-12-31T11:58:02.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T11:58:02.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T11:58:02.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.415074
2025-12-31T11:58:02.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T11:58:02.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T11:58:02.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T11:58:02.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T11:58:02.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T11:58:02.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T11:57:35', tmtdew=36.56, humidity=8.09, cloud=0.0, wind=14.03, temperature=26.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T09:57:42.394', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T11:58:02.095 [DEBUG] [Thread-127236] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:58:02.169 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T11:58:02.181 [DEBUG] [Thread-127239] [transport.py] [_log()] starting thread (client mode): 0xb9547af0
2025-12-31T11:58:02.181 [DEBUG] [Thread-127239] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:58:02.196 [DEBUG] [Thread-127239] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T11:58:02.196 [INFO] [Thread-127239] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T11:58:02.203 [DEBUG] [Thread-127239] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:58:02.203 [DEBUG] [Thread-127239] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T11:58:02.203 [DEBUG] [Thread-127239] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:58:02.203 [DEBUG] [Thread-127239] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:58:02.203 [DEBUG] [Thread-127239] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:58:02.203 [DEBUG] [Thread-127239] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:58:02.203 [DEBUG] [Thread-127239] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:58:02.203 [DEBUG] [Thread-127239] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:58:02.203 [DEBUG] [Thread-127239] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:58:02.203 [DEBUG] [Thread-127239] [transport.py] [_log()] client lang: <none>
2025-12-31T11:58:02.203 [DEBUG] [Thread-127239] [transport.py] [_log()] server lang: <none>
2025-12-31T11:58:02.204 [DEBUG] [Thread-127239] [transport.py] [_log()] kex follows: False
2025-12-31T11:58:02.204 [DEBUG] [Thread-127239] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:58:02.204 [DEBUG] [Thread-127239] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:58:02.204 [DEBUG] [Thread-127239] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:58:02.204 [DEBUG] [Thread-127239] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:58:02.204 [DEBUG] [Thread-127239] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:58:02.204 [DEBUG] [Thread-127239] [transport.py] [_log()] Compression: none
2025-12-31T11:58:02.204 [DEBUG] [Thread-127239] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:58:02.264 [DEBUG] [Thread-127239] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:58:02.264 [DEBUG] [Thread-127239] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:58:02.264 [DEBUG] [Thread-127239] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T11:58:02.264 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T11:58:02.264 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:58:02.321 [DEBUG] [Thread-127239] [transport.py] [_log()] userauth is OK
2025-12-31T11:58:02.321 [DEBUG] [Thread-127239] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:58:02.321 [DEBUG] [Thread-127239] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:58:02.321 [DEBUG] [Thread-127239] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T11:58:02.321 [DEBUG] [Thread-127239] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:58:02.335 [INFO] [Thread-127239] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:58:02.335 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T11:58:02.335 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:58:03.176 [DEBUG] [Thread-127239] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:58:03.176 [DEBUG] [Thread-127239] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:58:03.224 [DEBUG] [Thread-127239] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:58:03.224 [DEBUG] [Thread-127239] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:58:03.233 [DEBUG] [Thread-127239] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:58:03.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:58:03.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T11:58:03.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T11:58:03.256 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:58:03.256 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:58:03.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:58:03.264 [DEBUG] [Thread-127239] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:58:06.577 [DEBUG] [Thread-127241 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:58:10.793 [DEBUG] [Thread-127242 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:58:21.637 [DEBUG] [Thread-127243 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:58:33.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T11:58:33.287 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T11:58:33.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T11:58:33.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 11, 58, 7), 36.59, 8.07, 0.0, 15.21, 26.16, 0, 0, 0, 2, 0, 0),)
2025-12-31T11:58:33.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 11:58:07
2025-12-31T11:58:34.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T11:58:34.274 [DEBUG] [Thread-127244] [transport.py] [_log()] starting thread (client mode): 0xb6b207f0
2025-12-31T11:58:34.274 [DEBUG] [Thread-127244] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:58:34.290 [DEBUG] [Thread-127244] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T11:58:34.290 [INFO] [Thread-127244] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T11:58:34.291 [DEBUG] [Thread-127244] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:58:34.291 [DEBUG] [Thread-127244] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T11:58:34.291 [DEBUG] [Thread-127244] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:58:34.291 [DEBUG] [Thread-127244] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:58:34.291 [DEBUG] [Thread-127244] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:58:34.291 [DEBUG] [Thread-127244] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:58:34.291 [DEBUG] [Thread-127244] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:58:34.291 [DEBUG] [Thread-127244] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:58:34.291 [DEBUG] [Thread-127244] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:58:34.291 [DEBUG] [Thread-127244] [transport.py] [_log()] client lang: <none>
2025-12-31T11:58:34.291 [DEBUG] [Thread-127244] [transport.py] [_log()] server lang: <none>
2025-12-31T11:58:34.291 [DEBUG] [Thread-127244] [transport.py] [_log()] kex follows: False
2025-12-31T11:58:34.291 [DEBUG] [Thread-127244] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:58:34.291 [DEBUG] [Thread-127244] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:58:34.291 [DEBUG] [Thread-127244] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:58:34.291 [DEBUG] [Thread-127244] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:58:34.291 [DEBUG] [Thread-127244] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:58:34.291 [DEBUG] [Thread-127244] [transport.py] [_log()] Compression: none
2025-12-31T11:58:34.291 [DEBUG] [Thread-127244] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:58:34.307 [DEBUG] [Thread-127244] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:58:34.308 [DEBUG] [Thread-127244] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:58:34.308 [DEBUG] [Thread-127244] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T11:58:34.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T11:58:34.309 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:58:34.313 [DEBUG] [Thread-127244] [transport.py] [_log()] userauth is OK
2025-12-31T11:58:34.313 [DEBUG] [Thread-127244] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:58:34.313 [DEBUG] [Thread-127244] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:58:34.313 [DEBUG] [Thread-127244] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T11:58:34.313 [DEBUG] [Thread-127244] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:58:34.331 [INFO] [Thread-127244] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:58:34.332 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:58:35.055 [DEBUG] [Thread-127244] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:58:35.055 [DEBUG] [Thread-127244] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:58:35.056 [DEBUG] [Thread-127244] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T11:58:35.097 [DEBUG] [Thread-127244] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:58:35.097 [DEBUG] [Thread-127244] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:58:35.100 [DEBUG] [Thread-127244] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:58:35.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:58:35.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T11:58:35.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T11:58:35.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T11:58:35.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:58:35.124 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T11:58:35.124 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:58:35.124 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:58:35.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T11:58:35.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.415421 -999.00  +25.30  16.64     13   -4.50 1 2 1 1 1   888    0 31.53 57.65 ----- 15.7 16.6 305.6 22.9 33.3 -22.6 32.5 -22.2 31.7 -20.6 32.4 -19.8
2025-12-31T11:58:35.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T11:58:35.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T11:58:35.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.415421
2025-12-31T11:58:35.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T11:58:35.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T11:58:35.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T11:58:35.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T11:58:35.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T11:58:35.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T11:58:07', tmtdew=36.59, humidity=8.07, cloud=0.0, wind=15.21, temperature=26.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T09:58:12.374', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T11:58:35.127 [DEBUG] [Thread-127244] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:58:35.211 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T11:58:35.222 [DEBUG] [Thread-127247] [transport.py] [_log()] starting thread (client mode): 0xbbfcf880
2025-12-31T11:58:35.222 [DEBUG] [Thread-127247] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:58:35.236 [DEBUG] [Thread-127247] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T11:58:35.237 [INFO] [Thread-127247] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T11:58:35.244 [DEBUG] [Thread-127247] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:58:35.244 [DEBUG] [Thread-127247] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T11:58:35.245 [DEBUG] [Thread-127247] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:58:35.245 [DEBUG] [Thread-127247] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:58:35.245 [DEBUG] [Thread-127247] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:58:35.245 [DEBUG] [Thread-127247] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:58:35.245 [DEBUG] [Thread-127247] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:58:35.246 [DEBUG] [Thread-127247] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:58:35.246 [DEBUG] [Thread-127247] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:58:35.246 [DEBUG] [Thread-127247] [transport.py] [_log()] client lang: <none>
2025-12-31T11:58:35.246 [DEBUG] [Thread-127247] [transport.py] [_log()] server lang: <none>
2025-12-31T11:58:35.246 [DEBUG] [Thread-127247] [transport.py] [_log()] kex follows: False
2025-12-31T11:58:35.246 [DEBUG] [Thread-127247] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:58:35.246 [DEBUG] [Thread-127247] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:58:35.246 [DEBUG] [Thread-127247] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:58:35.246 [DEBUG] [Thread-127247] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:58:35.246 [DEBUG] [Thread-127247] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:58:35.246 [DEBUG] [Thread-127247] [transport.py] [_log()] Compression: none
2025-12-31T11:58:35.246 [DEBUG] [Thread-127247] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:58:35.302 [DEBUG] [Thread-127247] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:58:35.302 [DEBUG] [Thread-127247] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:58:35.303 [DEBUG] [Thread-127247] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T11:58:35.303 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T11:58:35.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:58:35.359 [DEBUG] [Thread-127247] [transport.py] [_log()] userauth is OK
2025-12-31T11:58:35.359 [DEBUG] [Thread-127247] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:58:35.359 [DEBUG] [Thread-127247] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:58:35.359 [DEBUG] [Thread-127247] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T11:58:35.359 [DEBUG] [Thread-127247] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:58:35.377 [INFO] [Thread-127247] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:58:35.378 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T11:58:35.378 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:58:36.224 [DEBUG] [Thread-127247] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:58:36.224 [DEBUG] [Thread-127247] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:58:36.271 [DEBUG] [Thread-127247] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:58:36.272 [DEBUG] [Thread-127247] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:58:36.280 [DEBUG] [Thread-127247] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:58:36.289 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:58:36.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T11:58:36.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T11:58:36.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:58:36.306 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:58:36.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:58:36.314 [DEBUG] [Thread-127247] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:58:36.674 [DEBUG] [Thread-127249 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:58:37.994 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:58:37.995 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:58:51.718 [DEBUG] [Thread-127250 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:59:06.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T11:59:06.337 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T11:59:06.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T11:59:06.752 [DEBUG] [Thread-127251 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:59:07.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 11, 58, 39), 36.95, 7.94, 0.0, 14.8, 26.26, 0, 0, 0, 2, 0, 0),)
2025-12-31T11:59:07.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 11:58:39
2025-12-31T11:59:07.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T11:59:07.320 [DEBUG] [Thread-127252] [transport.py] [_log()] starting thread (client mode): 0xb6b01ea0
2025-12-31T11:59:07.320 [DEBUG] [Thread-127252] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:59:07.341 [DEBUG] [Thread-127252] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T11:59:07.341 [INFO] [Thread-127252] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T11:59:07.344 [DEBUG] [Thread-127252] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:59:07.345 [DEBUG] [Thread-127252] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T11:59:07.345 [DEBUG] [Thread-127252] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:59:07.345 [DEBUG] [Thread-127252] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:59:07.345 [DEBUG] [Thread-127252] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:59:07.345 [DEBUG] [Thread-127252] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:59:07.345 [DEBUG] [Thread-127252] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:59:07.345 [DEBUG] [Thread-127252] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:59:07.345 [DEBUG] [Thread-127252] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:59:07.345 [DEBUG] [Thread-127252] [transport.py] [_log()] client lang: <none>
2025-12-31T11:59:07.345 [DEBUG] [Thread-127252] [transport.py] [_log()] server lang: <none>
2025-12-31T11:59:07.345 [DEBUG] [Thread-127252] [transport.py] [_log()] kex follows: False
2025-12-31T11:59:07.345 [DEBUG] [Thread-127252] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:59:07.345 [DEBUG] [Thread-127252] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:59:07.346 [DEBUG] [Thread-127252] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:59:07.346 [DEBUG] [Thread-127252] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:59:07.346 [DEBUG] [Thread-127252] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:59:07.346 [DEBUG] [Thread-127252] [transport.py] [_log()] Compression: none
2025-12-31T11:59:07.346 [DEBUG] [Thread-127252] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:59:07.363 [DEBUG] [Thread-127252] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:59:07.363 [DEBUG] [Thread-127252] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:59:07.364 [DEBUG] [Thread-127252] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T11:59:07.364 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T11:59:07.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:59:07.366 [DEBUG] [Thread-127252] [transport.py] [_log()] userauth is OK
2025-12-31T11:59:07.366 [DEBUG] [Thread-127252] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:59:07.366 [DEBUG] [Thread-127252] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:59:07.366 [DEBUG] [Thread-127252] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T11:59:07.366 [DEBUG] [Thread-127252] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:59:07.381 [INFO] [Thread-127252] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:59:07.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:59:08.001 [DEBUG] [Thread-127252] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:59:08.001 [DEBUG] [Thread-127252] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:59:08.001 [DEBUG] [Thread-127252] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T11:59:08.042 [DEBUG] [Thread-127252] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:59:08.042 [DEBUG] [Thread-127252] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:59:08.045 [DEBUG] [Thread-127252] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:59:08.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:59:08.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T11:59:08.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T11:59:08.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T11:59:08.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:59:08.068 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T11:59:08.068 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:59:08.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:59:08.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T11:59:08.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.415768 -999.00  +25.10  13.95     13   -4.70 1 2 1 1 1   888    0 31.97 68.54 ----- 10.3 13.9 306.8 16.8 33.5 -23.0 32.7 -22.7 32.0 -20.5 32.7 -20.3
2025-12-31T11:59:08.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T11:59:08.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T11:59:08.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.415768
2025-12-31T11:59:08.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T11:59:08.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T11:59:08.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T11:59:08.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T11:59:08.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T11:59:08.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T11:58:39', tmtdew=36.95, humidity=7.94, cloud=0.0, wind=14.8, temperature=26.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T09:58:42.355', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T11:59:08.071 [DEBUG] [Thread-127252] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:59:08.164 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T11:59:08.176 [DEBUG] [Thread-127255] [transport.py] [_log()] starting thread (client mode): 0xb9544940
2025-12-31T11:59:08.176 [DEBUG] [Thread-127255] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:59:08.190 [DEBUG] [Thread-127255] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T11:59:08.190 [INFO] [Thread-127255] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T11:59:08.198 [DEBUG] [Thread-127255] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:59:08.198 [DEBUG] [Thread-127255] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T11:59:08.199 [DEBUG] [Thread-127255] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:59:08.199 [DEBUG] [Thread-127255] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:59:08.199 [DEBUG] [Thread-127255] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:59:08.199 [DEBUG] [Thread-127255] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:59:08.199 [DEBUG] [Thread-127255] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:59:08.199 [DEBUG] [Thread-127255] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:59:08.199 [DEBUG] [Thread-127255] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:59:08.200 [DEBUG] [Thread-127255] [transport.py] [_log()] client lang: <none>
2025-12-31T11:59:08.200 [DEBUG] [Thread-127255] [transport.py] [_log()] server lang: <none>
2025-12-31T11:59:08.200 [DEBUG] [Thread-127255] [transport.py] [_log()] kex follows: False
2025-12-31T11:59:08.200 [DEBUG] [Thread-127255] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:59:08.200 [DEBUG] [Thread-127255] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:59:08.200 [DEBUG] [Thread-127255] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:59:08.200 [DEBUG] [Thread-127255] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:59:08.200 [DEBUG] [Thread-127255] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:59:08.200 [DEBUG] [Thread-127255] [transport.py] [_log()] Compression: none
2025-12-31T11:59:08.200 [DEBUG] [Thread-127255] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:59:08.260 [DEBUG] [Thread-127255] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:59:08.260 [DEBUG] [Thread-127255] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:59:08.261 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T11:59:08.261 [DEBUG] [Thread-127255] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T11:59:08.262 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:59:08.322 [DEBUG] [Thread-127255] [transport.py] [_log()] userauth is OK
2025-12-31T11:59:08.323 [DEBUG] [Thread-127255] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:59:08.323 [DEBUG] [Thread-127255] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:59:08.323 [DEBUG] [Thread-127255] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T11:59:08.323 [DEBUG] [Thread-127255] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:59:08.342 [INFO] [Thread-127255] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:59:08.342 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T11:59:08.343 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:59:09.156 [DEBUG] [Thread-127255] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:59:09.156 [DEBUG] [Thread-127255] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:59:09.204 [DEBUG] [Thread-127255] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:59:09.204 [DEBUG] [Thread-127255] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:59:09.213 [DEBUG] [Thread-127255] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:59:09.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:59:09.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T11:59:09.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T11:59:09.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:59:09.241 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:59:09.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:59:09.249 [DEBUG] [Thread-127255] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:59:10.827 [DEBUG] [Thread-127257 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:59:21.781 [DEBUG] [Thread-127258 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:59:36.823 [DEBUG] [Thread-127259 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:59:38.134 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:59:38.135 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T11:59:39.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T11:59:39.268 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T11:59:39.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T11:59:39.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 11, 59, 12), 36.85, 7.99, 0.0, 13.45, 26.16, 0, 0, 0, 2, 0, 0),)
2025-12-31T11:59:39.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 11:59:12
2025-12-31T11:59:40.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T11:59:40.260 [DEBUG] [Thread-127260] [transport.py] [_log()] starting thread (client mode): 0xb6bb1f00
2025-12-31T11:59:40.260 [DEBUG] [Thread-127260] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:59:40.280 [DEBUG] [Thread-127260] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T11:59:40.280 [INFO] [Thread-127260] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T11:59:40.283 [DEBUG] [Thread-127260] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:59:40.283 [DEBUG] [Thread-127260] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T11:59:40.284 [DEBUG] [Thread-127260] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:59:40.284 [DEBUG] [Thread-127260] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:59:40.284 [DEBUG] [Thread-127260] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:59:40.284 [DEBUG] [Thread-127260] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:59:40.284 [DEBUG] [Thread-127260] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:59:40.284 [DEBUG] [Thread-127260] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:59:40.284 [DEBUG] [Thread-127260] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:59:40.284 [DEBUG] [Thread-127260] [transport.py] [_log()] client lang: <none>
2025-12-31T11:59:40.284 [DEBUG] [Thread-127260] [transport.py] [_log()] server lang: <none>
2025-12-31T11:59:40.284 [DEBUG] [Thread-127260] [transport.py] [_log()] kex follows: False
2025-12-31T11:59:40.284 [DEBUG] [Thread-127260] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:59:40.284 [DEBUG] [Thread-127260] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:59:40.284 [DEBUG] [Thread-127260] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:59:40.284 [DEBUG] [Thread-127260] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:59:40.284 [DEBUG] [Thread-127260] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:59:40.284 [DEBUG] [Thread-127260] [transport.py] [_log()] Compression: none
2025-12-31T11:59:40.285 [DEBUG] [Thread-127260] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:59:40.298 [DEBUG] [Thread-127260] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:59:40.299 [DEBUG] [Thread-127260] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:59:40.299 [DEBUG] [Thread-127260] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T11:59:40.299 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T11:59:40.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:59:40.301 [DEBUG] [Thread-127260] [transport.py] [_log()] userauth is OK
2025-12-31T11:59:40.301 [DEBUG] [Thread-127260] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:59:40.301 [DEBUG] [Thread-127260] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:59:40.301 [DEBUG] [Thread-127260] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T11:59:40.301 [DEBUG] [Thread-127260] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:59:40.319 [INFO] [Thread-127260] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:59:40.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:59:40.872 [DEBUG] [Thread-127260] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:59:40.872 [DEBUG] [Thread-127260] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:59:40.873 [DEBUG] [Thread-127260] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T11:59:40.913 [DEBUG] [Thread-127260] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:59:40.913 [DEBUG] [Thread-127260] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:59:40.916 [DEBUG] [Thread-127260] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:59:40.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:59:40.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T11:59:40.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T11:59:40.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T11:59:40.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:59:40.935 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T11:59:40.935 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:59:40.936 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:59:40.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T11:59:40.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.416115 -999.00  +25.20  11.32     13   -4.60 1 2 1 1 1   888    0 31.86 62.77 ----- 8.3 11.3 309.6 13.1 33.6 -23.3 32.8 -22.4 32.0 -20.5 32.7 -20.8
2025-12-31T11:59:40.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T11:59:40.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T11:59:40.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.416115
2025-12-31T11:59:40.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T11:59:40.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T11:59:40.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T11:59:40.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T11:59:40.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T11:59:40.938 [DEBUG] [Thread-127260] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:59:40.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T11:59:12', tmtdew=36.85, humidity=7.99, cloud=0.0, wind=13.45, temperature=26.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T09:59:12.336', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T11:59:41.027 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T11:59:41.040 [DEBUG] [Thread-127263] [transport.py] [_log()] starting thread (client mode): 0xb95443d0
2025-12-31T11:59:41.040 [DEBUG] [Thread-127263] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T11:59:41.054 [DEBUG] [Thread-127263] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T11:59:41.054 [INFO] [Thread-127263] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T11:59:41.062 [DEBUG] [Thread-127263] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T11:59:41.062 [DEBUG] [Thread-127263] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T11:59:41.063 [DEBUG] [Thread-127263] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T11:59:41.063 [DEBUG] [Thread-127263] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:59:41.063 [DEBUG] [Thread-127263] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T11:59:41.063 [DEBUG] [Thread-127263] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:59:41.063 [DEBUG] [Thread-127263] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T11:59:41.063 [DEBUG] [Thread-127263] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T11:59:41.063 [DEBUG] [Thread-127263] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T11:59:41.063 [DEBUG] [Thread-127263] [transport.py] [_log()] client lang: <none>
2025-12-31T11:59:41.064 [DEBUG] [Thread-127263] [transport.py] [_log()] server lang: <none>
2025-12-31T11:59:41.064 [DEBUG] [Thread-127263] [transport.py] [_log()] kex follows: False
2025-12-31T11:59:41.064 [DEBUG] [Thread-127263] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T11:59:41.064 [DEBUG] [Thread-127263] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T11:59:41.064 [DEBUG] [Thread-127263] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T11:59:41.064 [DEBUG] [Thread-127263] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T11:59:41.064 [DEBUG] [Thread-127263] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T11:59:41.065 [DEBUG] [Thread-127263] [transport.py] [_log()] Compression: none
2025-12-31T11:59:41.065 [DEBUG] [Thread-127263] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T11:59:41.119 [DEBUG] [Thread-127263] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T11:59:41.119 [DEBUG] [Thread-127263] [transport.py] [_log()] Switch to new keys ...
2025-12-31T11:59:41.119 [DEBUG] [Thread-127263] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T11:59:41.119 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T11:59:41.119 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T11:59:41.175 [DEBUG] [Thread-127263] [transport.py] [_log()] userauth is OK
2025-12-31T11:59:41.176 [DEBUG] [Thread-127263] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T11:59:41.176 [DEBUG] [Thread-127263] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T11:59:41.176 [DEBUG] [Thread-127263] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T11:59:41.176 [DEBUG] [Thread-127263] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T11:59:41.194 [INFO] [Thread-127263] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T11:59:41.195 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T11:59:41.195 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T11:59:42.006 [DEBUG] [Thread-127263] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T11:59:42.006 [DEBUG] [Thread-127263] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T11:59:42.054 [DEBUG] [Thread-127263] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T11:59:42.054 [DEBUG] [Thread-127263] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T11:59:42.063 [DEBUG] [Thread-127263] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T11:59:42.072 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T11:59:42.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T11:59:42.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T11:59:42.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T11:59:42.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T11:59:42.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T11:59:42.099 [DEBUG] [Thread-127263] [transport.py] [_log()] EOF in transport thread
2025-12-31T11:59:51.861 [DEBUG] [Thread-127265 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:00:06.910 [DEBUG] [Thread-127266 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:00:10.872 [DEBUG] [Thread-127267 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:00:12.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T12:00:12.122 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T12:00:12.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T12:00:12.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 11, 59, 44), 36.47, 7.99, 0.0, 12.48, 26.06, 0, 0, 0, 2, 0, 0),)
2025-12-31T12:00:12.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 11:59:44
2025-12-31T12:00:12.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T12:00:13.113 [DEBUG] [Thread-127268] [transport.py] [_log()] starting thread (client mode): 0xb6b03400
2025-12-31T12:00:13.113 [DEBUG] [Thread-127268] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:00:13.135 [DEBUG] [Thread-127268] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T12:00:13.135 [INFO] [Thread-127268] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T12:00:13.138 [DEBUG] [Thread-127268] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:00:13.138 [DEBUG] [Thread-127268] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T12:00:13.138 [DEBUG] [Thread-127268] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:00:13.138 [DEBUG] [Thread-127268] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:00:13.138 [DEBUG] [Thread-127268] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:00:13.138 [DEBUG] [Thread-127268] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:00:13.138 [DEBUG] [Thread-127268] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:00:13.138 [DEBUG] [Thread-127268] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:00:13.138 [DEBUG] [Thread-127268] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:00:13.138 [DEBUG] [Thread-127268] [transport.py] [_log()] client lang: <none>
2025-12-31T12:00:13.138 [DEBUG] [Thread-127268] [transport.py] [_log()] server lang: <none>
2025-12-31T12:00:13.138 [DEBUG] [Thread-127268] [transport.py] [_log()] kex follows: False
2025-12-31T12:00:13.138 [DEBUG] [Thread-127268] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:00:13.138 [DEBUG] [Thread-127268] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:00:13.138 [DEBUG] [Thread-127268] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:00:13.138 [DEBUG] [Thread-127268] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:00:13.138 [DEBUG] [Thread-127268] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:00:13.138 [DEBUG] [Thread-127268] [transport.py] [_log()] Compression: none
2025-12-31T12:00:13.139 [DEBUG] [Thread-127268] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:00:13.155 [DEBUG] [Thread-127268] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:00:13.156 [DEBUG] [Thread-127268] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:00:13.156 [DEBUG] [Thread-127268] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T12:00:13.157 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T12:00:13.157 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:00:13.158 [DEBUG] [Thread-127268] [transport.py] [_log()] userauth is OK
2025-12-31T12:00:13.158 [DEBUG] [Thread-127268] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:00:13.159 [DEBUG] [Thread-127268] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:00:13.159 [DEBUG] [Thread-127268] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T12:00:13.159 [DEBUG] [Thread-127268] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:00:13.176 [INFO] [Thread-127268] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:00:13.176 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:00:15.553 [DEBUG] [Thread-127268] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:00:15.553 [DEBUG] [Thread-127268] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:00:15.554 [DEBUG] [Thread-127268] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T12:00:15.595 [DEBUG] [Thread-127268] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:00:15.596 [DEBUG] [Thread-127268] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:00:15.598 [DEBUG] [Thread-127268] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:00:15.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:00:15.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T12:00:15.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T12:00:15.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T12:00:15.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:00:15.921 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T12:00:15.921 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:00:15.921 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:00:15.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T12:00:15.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.416462 -999.00  +25.70  29.62     13   -4.10 1 1 1 1 1   888    0 32.27 70.53 ----- 26.6 29.6 301.6 34.1 33.6 -24.4 32.9 -23.5 32.0 -24.7 32.8 -21.6
2025-12-31T12:00:15.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T12:00:15.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T12:00:15.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.416462
2025-12-31T12:00:15.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T12:00:15.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T12:00:15.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T12:00:15.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T12:00:15.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T12:00:15.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T11:59:44', tmtdew=36.47, humidity=7.99, cloud=0.0, wind=12.48, temperature=26.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T09:59:42.317', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T12:00:15.923 [DEBUG] [Thread-127268] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:00:16.019 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T12:00:16.031 [DEBUG] [Thread-127271] [transport.py] [_log()] starting thread (client mode): 0xb6bb1780
2025-12-31T12:00:16.031 [DEBUG] [Thread-127271] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:00:16.046 [DEBUG] [Thread-127271] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T12:00:16.046 [INFO] [Thread-127271] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T12:00:16.053 [DEBUG] [Thread-127271] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:00:16.054 [DEBUG] [Thread-127271] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T12:00:16.054 [DEBUG] [Thread-127271] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:00:16.054 [DEBUG] [Thread-127271] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:00:16.054 [DEBUG] [Thread-127271] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:00:16.054 [DEBUG] [Thread-127271] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:00:16.054 [DEBUG] [Thread-127271] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:00:16.054 [DEBUG] [Thread-127271] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:00:16.054 [DEBUG] [Thread-127271] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:00:16.054 [DEBUG] [Thread-127271] [transport.py] [_log()] client lang: <none>
2025-12-31T12:00:16.054 [DEBUG] [Thread-127271] [transport.py] [_log()] server lang: <none>
2025-12-31T12:00:16.054 [DEBUG] [Thread-127271] [transport.py] [_log()] kex follows: False
2025-12-31T12:00:16.055 [DEBUG] [Thread-127271] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:00:16.055 [DEBUG] [Thread-127271] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:00:16.055 [DEBUG] [Thread-127271] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:00:16.055 [DEBUG] [Thread-127271] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:00:16.055 [DEBUG] [Thread-127271] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:00:16.055 [DEBUG] [Thread-127271] [transport.py] [_log()] Compression: none
2025-12-31T12:00:16.055 [DEBUG] [Thread-127271] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:00:16.111 [DEBUG] [Thread-127271] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:00:16.112 [DEBUG] [Thread-127271] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:00:16.112 [DEBUG] [Thread-127271] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T12:00:16.112 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T12:00:16.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:00:16.167 [DEBUG] [Thread-127271] [transport.py] [_log()] userauth is OK
2025-12-31T12:00:16.168 [DEBUG] [Thread-127271] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:00:16.168 [DEBUG] [Thread-127271] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:00:16.168 [DEBUG] [Thread-127271] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T12:00:16.168 [DEBUG] [Thread-127271] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:00:16.186 [INFO] [Thread-127271] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:00:16.186 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T12:00:16.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:00:17.006 [DEBUG] [Thread-127271] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:00:17.006 [DEBUG] [Thread-127271] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:00:17.054 [DEBUG] [Thread-127271] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:00:17.054 [DEBUG] [Thread-127271] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:00:17.062 [DEBUG] [Thread-127271] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:00:17.070 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:00: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')
2025-12-31T12:00:17.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T12:00:17.086 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:00:17.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:00:17.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:00:17.094 [DEBUG] [Thread-127271] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:00:21.942 [DEBUG] [Thread-127273 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:00:36.992 [DEBUG] [Thread-127274 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:00:38.275 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:00:38.276 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:00:47.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T12:00:47.102 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T12:00:47.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T12:00:47.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 12, 0, 16), 36.43, 8.0, 0.0, 13.62, 26.01, 0, 0, 0, 2, 0, 0),)
2025-12-31T12:00:47.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 12:00:16
2025-12-31T12:00:47.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T12:00:48.079 [DEBUG] [Thread-127275] [transport.py] [_log()] starting thread (client mode): 0xb6b03a60
2025-12-31T12:00:48.079 [DEBUG] [Thread-127275] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:00:48.100 [DEBUG] [Thread-127275] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T12:00:48.100 [INFO] [Thread-127275] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T12:00:48.103 [DEBUG] [Thread-127275] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:00:48.103 [DEBUG] [Thread-127275] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T12:00:48.103 [DEBUG] [Thread-127275] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:00:48.104 [DEBUG] [Thread-127275] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:00:48.104 [DEBUG] [Thread-127275] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:00:48.104 [DEBUG] [Thread-127275] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:00:48.104 [DEBUG] [Thread-127275] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:00:48.104 [DEBUG] [Thread-127275] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:00:48.104 [DEBUG] [Thread-127275] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:00:48.104 [DEBUG] [Thread-127275] [transport.py] [_log()] client lang: <none>
2025-12-31T12:00:48.104 [DEBUG] [Thread-127275] [transport.py] [_log()] server lang: <none>
2025-12-31T12:00:48.104 [DEBUG] [Thread-127275] [transport.py] [_log()] kex follows: False
2025-12-31T12:00:48.104 [DEBUG] [Thread-127275] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:00:48.104 [DEBUG] [Thread-127275] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:00:48.104 [DEBUG] [Thread-127275] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:00:48.104 [DEBUG] [Thread-127275] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:00:48.104 [DEBUG] [Thread-127275] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:00:48.104 [DEBUG] [Thread-127275] [transport.py] [_log()] Compression: none
2025-12-31T12:00:48.104 [DEBUG] [Thread-127275] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:00:48.116 [DEBUG] [Thread-127275] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:00:48.116 [DEBUG] [Thread-127275] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:00:48.117 [DEBUG] [Thread-127275] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T12:00:48.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T12:00:48.118 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:00:48.120 [DEBUG] [Thread-127275] [transport.py] [_log()] userauth is OK
2025-12-31T12:00:48.120 [DEBUG] [Thread-127275] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:00:48.120 [DEBUG] [Thread-127275] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:00:48.120 [DEBUG] [Thread-127275] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T12:00:48.120 [DEBUG] [Thread-127275] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:00:48.145 [INFO] [Thread-127275] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:00:48.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:00:48.787 [DEBUG] [Thread-127275] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:00:48.787 [DEBUG] [Thread-127275] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:00:48.787 [DEBUG] [Thread-127275] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T12:00:48.829 [DEBUG] [Thread-127275] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:00:48.829 [DEBUG] [Thread-127275] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:00:48.831 [DEBUG] [Thread-127275] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:00:48.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:00:48.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T12:00:48.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T12:00:48.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T12:00:48.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:00:48.849 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T12:00:48.849 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:00:48.849 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:00:48.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T12:00:48.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.417157 -999.00  +25.20  30.77     13   -4.50 1 1 2 1 1   888    0 31.87 59.06 ----- 31.1 30.8 294.2 33.0 33.1 -26.2 32.4 -25.8 31.6 -23.1 32.3 -23.6
2025-12-31T12:00:48.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T12:00:48.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T12:00:48.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.417157
2025-12-31T12:00:48.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T12:00:48.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T12:00:48.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T12:00:48.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T12:00:48.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T12:00:48.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T12:00:16', tmtdew=36.43, humidity=8.0, cloud=0.0, wind=13.62, temperature=26.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T10:00:42.365', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T12:00:48.850 [DEBUG] [Thread-127275] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:00:48.924 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T12:00:48.935 [DEBUG] [Thread-127278] [transport.py] [_log()] starting thread (client mode): 0xb9544670
2025-12-31T12:00:48.935 [DEBUG] [Thread-127278] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:00:48.949 [DEBUG] [Thread-127278] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T12:00:48.949 [INFO] [Thread-127278] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T12:00:48.957 [DEBUG] [Thread-127278] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:00:48.957 [DEBUG] [Thread-127278] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T12:00:48.957 [DEBUG] [Thread-127278] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:00:48.957 [DEBUG] [Thread-127278] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:00:48.958 [DEBUG] [Thread-127278] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:00:48.958 [DEBUG] [Thread-127278] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:00:48.958 [DEBUG] [Thread-127278] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:00:48.958 [DEBUG] [Thread-127278] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:00:48.958 [DEBUG] [Thread-127278] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:00:48.958 [DEBUG] [Thread-127278] [transport.py] [_log()] client lang: <none>
2025-12-31T12:00:48.958 [DEBUG] [Thread-127278] [transport.py] [_log()] server lang: <none>
2025-12-31T12:00:48.958 [DEBUG] [Thread-127278] [transport.py] [_log()] kex follows: False
2025-12-31T12:00:48.958 [DEBUG] [Thread-127278] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:00:48.958 [DEBUG] [Thread-127278] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:00:48.958 [DEBUG] [Thread-127278] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:00:48.958 [DEBUG] [Thread-127278] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:00:48.958 [DEBUG] [Thread-127278] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:00:48.958 [DEBUG] [Thread-127278] [transport.py] [_log()] Compression: none
2025-12-31T12:00:48.958 [DEBUG] [Thread-127278] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:00:49.015 [DEBUG] [Thread-127278] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:00:49.015 [DEBUG] [Thread-127278] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:00:49.015 [DEBUG] [Thread-127278] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T12:00:49.015 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T12:00:49.015 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:00:49.072 [DEBUG] [Thread-127278] [transport.py] [_log()] userauth is OK
2025-12-31T12:00:49.072 [DEBUG] [Thread-127278] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:00:49.072 [DEBUG] [Thread-127278] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:00:49.072 [DEBUG] [Thread-127278] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T12:00:49.072 [DEBUG] [Thread-127278] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:00:49.085 [INFO] [Thread-127278] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:00:49.086 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T12:00:49.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:00:49.945 [DEBUG] [Thread-127278] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:00:49.946 [DEBUG] [Thread-127278] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:00:49.993 [DEBUG] [Thread-127278] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:00:49.993 [DEBUG] [Thread-127278] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:00:50.001 [DEBUG] [Thread-127278] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:00:50.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:00:50.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T12:00:50.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T12:00:50.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:00:50.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:00:50.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:00:50.033 [DEBUG] [Thread-127278] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:00:52.020 [DEBUG] [Thread-127280 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:01:07.074 [DEBUG] [Thread-127281 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:01:10.911 [DEBUG] [Thread-127282 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:01:20.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T12:01:20.055 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T12:01: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-12-31T12:01:20.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 12, 0, 48), 36.35, 8.19, 0.0, 24.24, 26.0, 0, 0, 0, 2, 0, 0),)
2025-12-31T12:01:20.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 12:00:48
2025-12-31T12:01:20.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T12:01:21.122 [DEBUG] [Thread-127283] [transport.py] [_log()] starting thread (client mode): 0xb6b234c0
2025-12-31T12:01:21.123 [DEBUG] [Thread-127283] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:01:21.144 [DEBUG] [Thread-127283] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T12:01:21.144 [INFO] [Thread-127283] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T12:01:21.146 [DEBUG] [Thread-127283] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:01:21.146 [DEBUG] [Thread-127283] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T12:01:21.146 [DEBUG] [Thread-127283] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:01:21.147 [DEBUG] [Thread-127283] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:01:21.147 [DEBUG] [Thread-127283] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:01:21.147 [DEBUG] [Thread-127283] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:01:21.147 [DEBUG] [Thread-127283] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:01:21.147 [DEBUG] [Thread-127283] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:01:21.147 [DEBUG] [Thread-127283] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:01:21.147 [DEBUG] [Thread-127283] [transport.py] [_log()] client lang: <none>
2025-12-31T12:01:21.147 [DEBUG] [Thread-127283] [transport.py] [_log()] server lang: <none>
2025-12-31T12:01:21.147 [DEBUG] [Thread-127283] [transport.py] [_log()] kex follows: False
2025-12-31T12:01:21.147 [DEBUG] [Thread-127283] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:01:21.147 [DEBUG] [Thread-127283] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:01:21.147 [DEBUG] [Thread-127283] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:01:21.147 [DEBUG] [Thread-127283] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:01:21.147 [DEBUG] [Thread-127283] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:01:21.147 [DEBUG] [Thread-127283] [transport.py] [_log()] Compression: none
2025-12-31T12:01:21.147 [DEBUG] [Thread-127283] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:01:21.163 [DEBUG] [Thread-127283] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:01:21.163 [DEBUG] [Thread-127283] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:01:21.164 [DEBUG] [Thread-127283] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T12:01:21.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T12:01:21.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:01:21.165 [DEBUG] [Thread-127283] [transport.py] [_log()] userauth is OK
2025-12-31T12:01:21.165 [DEBUG] [Thread-127283] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:01:21.165 [DEBUG] [Thread-127283] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:01:21.165 [DEBUG] [Thread-127283] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T12:01:21.165 [DEBUG] [Thread-127283] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:01:21.184 [INFO] [Thread-127283] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:01:21.184 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:01:21.878 [DEBUG] [Thread-127283] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:01:21.878 [DEBUG] [Thread-127283] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:01:21.878 [DEBUG] [Thread-127283] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T12:01:21.918 [DEBUG] [Thread-127283] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:01:21.919 [DEBUG] [Thread-127283] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:01:21.921 [DEBUG] [Thread-127283] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:01:21.932 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:01:21.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T12:01:21.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T12:01:21.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T12:01:21.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:01:21.938 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T12:01:21.938 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:01:21.938 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:01:21.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T12:01:21.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.417157 -999.00  +25.20  30.77     13   -4.50 1 1 2 1 1   888    0 31.87 59.06 ----- 31.1 30.8 294.2 33.0 33.1 -26.2 32.4 -25.8 31.6 -23.1 32.3 -23.6
2025-12-31T12:01:21.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T12:01:21.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T12:01:21.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.417157
2025-12-31T12:01:21.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T12:01:21.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T12:01:21.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T12:01:21.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T12:01:21.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T12:01:21.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T12:00:48', tmtdew=36.35, humidity=8.19, cloud=0.0, wind=24.24, temperature=26.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T10:00:42.365', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T12:01:21.939 [DEBUG] [Thread-127283] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:01:22.014 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T12:01:22.025 [DEBUG] [Thread-127286] [transport.py] [_log()] starting thread (client mode): 0xb6b22140
2025-12-31T12:01:22.025 [DEBUG] [Thread-127286] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:01:22.045 [DEBUG] [Thread-127286] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T12:01:22.045 [INFO] [Thread-127286] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T12:01:22.053 [DEBUG] [Thread-127286] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:01:22.053 [DEBUG] [Thread-127286] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T12:01:22.053 [DEBUG] [Thread-127286] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:01:22.053 [DEBUG] [Thread-127286] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:01:22.053 [DEBUG] [Thread-127286] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:01:22.053 [DEBUG] [Thread-127286] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:01:22.053 [DEBUG] [Thread-127286] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:01:22.053 [DEBUG] [Thread-127286] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:01:22.053 [DEBUG] [Thread-127286] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:01:22.053 [DEBUG] [Thread-127286] [transport.py] [_log()] client lang: <none>
2025-12-31T12:01:22.053 [DEBUG] [Thread-127286] [transport.py] [_log()] server lang: <none>
2025-12-31T12:01:22.053 [DEBUG] [Thread-127286] [transport.py] [_log()] kex follows: False
2025-12-31T12:01:22.053 [DEBUG] [Thread-127286] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:01:22.053 [DEBUG] [Thread-127286] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:01:22.053 [DEBUG] [Thread-127286] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:01:22.053 [DEBUG] [Thread-127286] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:01:22.053 [DEBUG] [Thread-127286] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:01:22.053 [DEBUG] [Thread-127286] [transport.py] [_log()] Compression: none
2025-12-31T12:01:22.053 [DEBUG] [Thread-127286] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:01:22.106 [DEBUG] [Thread-127288 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:01:22.111 [DEBUG] [Thread-127286] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:01:22.111 [DEBUG] [Thread-127286] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:01:22.111 [DEBUG] [Thread-127286] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T12:01:22.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T12:01:22.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:01:22.168 [DEBUG] [Thread-127286] [transport.py] [_log()] userauth is OK
2025-12-31T12:01:22.168 [DEBUG] [Thread-127286] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:01:22.168 [DEBUG] [Thread-127286] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:01:22.168 [DEBUG] [Thread-127286] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T12:01:22.168 [DEBUG] [Thread-127286] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:01:22.182 [INFO] [Thread-127286] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:01:22.183 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T12:01:22.183 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:01:23.027 [DEBUG] [Thread-127286] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:01:23.027 [DEBUG] [Thread-127286] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:01:23.075 [DEBUG] [Thread-127286] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:01:23.075 [DEBUG] [Thread-127286] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:01:23.084 [DEBUG] [Thread-127286] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:01:23.093 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:01:23.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T12:01:23.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T12:01:23.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:01:23.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:01:23.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:01:23.121 [DEBUG] [Thread-127286] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:01:37.149 [DEBUG] [Thread-127289 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:01:38.427 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:01:38.428 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:01:52.186 [DEBUG] [Thread-127290 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:01:53.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T12:01:53.143 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T12:01:53.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-12-31T12:01:53.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 12, 1, 20), 36.5, 8.12, 0.0, 25.05, 26.21, 0, 0, 0, 2, 0, 0),)
2025-12-31T12:01:53.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 12:01:20
2025-12-31T12:01:54.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T12:01:54.196 [DEBUG] [Thread-127291] [transport.py] [_log()] starting thread (client mode): 0xb95b2cb0
2025-12-31T12:01:54.196 [DEBUG] [Thread-127291] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:01:54.216 [DEBUG] [Thread-127291] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T12:01:54.216 [INFO] [Thread-127291] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T12:01:54.217 [DEBUG] [Thread-127291] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:01:54.217 [DEBUG] [Thread-127291] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T12:01:54.217 [DEBUG] [Thread-127291] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:01:54.217 [DEBUG] [Thread-127291] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:01:54.217 [DEBUG] [Thread-127291] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:01:54.217 [DEBUG] [Thread-127291] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:01:54.217 [DEBUG] [Thread-127291] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:01:54.217 [DEBUG] [Thread-127291] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:01:54.217 [DEBUG] [Thread-127291] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:01:54.217 [DEBUG] [Thread-127291] [transport.py] [_log()] client lang: <none>
2025-12-31T12:01:54.218 [DEBUG] [Thread-127291] [transport.py] [_log()] server lang: <none>
2025-12-31T12:01:54.218 [DEBUG] [Thread-127291] [transport.py] [_log()] kex follows: False
2025-12-31T12:01:54.218 [DEBUG] [Thread-127291] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:01:54.218 [DEBUG] [Thread-127291] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:01:54.218 [DEBUG] [Thread-127291] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:01:54.218 [DEBUG] [Thread-127291] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:01:54.218 [DEBUG] [Thread-127291] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:01:54.218 [DEBUG] [Thread-127291] [transport.py] [_log()] Compression: none
2025-12-31T12:01:54.218 [DEBUG] [Thread-127291] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:01:54.226 [DEBUG] [Thread-127291] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:01:54.226 [DEBUG] [Thread-127291] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:01:54.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T12:01:54.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:01:54.226 [DEBUG] [Thread-127291] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T12:01:54.227 [DEBUG] [Thread-127291] [transport.py] [_log()] userauth is OK
2025-12-31T12:01:54.227 [DEBUG] [Thread-127291] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:01:54.227 [DEBUG] [Thread-127291] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:01:54.227 [DEBUG] [Thread-127291] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T12:01:54.227 [DEBUG] [Thread-127291] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:01:54.244 [INFO] [Thread-127291] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:01:54.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:01:54.892 [DEBUG] [Thread-127291] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:01:54.892 [DEBUG] [Thread-127291] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:01:54.892 [DEBUG] [Thread-127291] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T12:01:54.932 [DEBUG] [Thread-127291] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:01:54.932 [DEBUG] [Thread-127291] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:01:54.934 [DEBUG] [Thread-127291] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:01:54.947 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:01:54.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T12:01:54.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T12:01:54.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T12:01:54.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:01:54.952 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T12:01:54.952 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:01:54.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:01:54.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T12:01:54.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.417504 -999.00  +24.90  23.79     14   -4.30 1 1 1 1 1   888    0 31.20 49.51 ----- 20.8 23.8 306.0 36.7 32.5 -27.3 32.0 -26.4 31.2 -24.1 31.8 -24.7
2025-12-31T12:01:54.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T12:01:54.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T12:01:54.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.417504
2025-12-31T12:01:54.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T12:01:54.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T12:01:54.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T12:01:54.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T12:01:54.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T12:01:54.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T12:01:20', tmtdew=36.5, humidity=8.12, cloud=0.0, wind=25.05, temperature=26.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T10:01:12.346', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T12:01:54.953 [DEBUG] [Thread-127291] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:01:55.028 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T12:01:55.039 [DEBUG] [Thread-127294] [transport.py] [_log()] starting thread (client mode): 0xb9547250
2025-12-31T12:01:55.039 [DEBUG] [Thread-127294] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:01:55.053 [DEBUG] [Thread-127294] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T12:01:55.053 [INFO] [Thread-127294] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T12:01:55.060 [DEBUG] [Thread-127294] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:01:55.060 [DEBUG] [Thread-127294] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T12:01:55.061 [DEBUG] [Thread-127294] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:01:55.061 [DEBUG] [Thread-127294] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:01:55.061 [DEBUG] [Thread-127294] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:01:55.061 [DEBUG] [Thread-127294] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:01:55.061 [DEBUG] [Thread-127294] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:01:55.061 [DEBUG] [Thread-127294] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:01:55.061 [DEBUG] [Thread-127294] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:01:55.061 [DEBUG] [Thread-127294] [transport.py] [_log()] client lang: <none>
2025-12-31T12:01:55.061 [DEBUG] [Thread-127294] [transport.py] [_log()] server lang: <none>
2025-12-31T12:01:55.061 [DEBUG] [Thread-127294] [transport.py] [_log()] kex follows: False
2025-12-31T12:01:55.061 [DEBUG] [Thread-127294] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:01:55.061 [DEBUG] [Thread-127294] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:01:55.061 [DEBUG] [Thread-127294] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:01:55.061 [DEBUG] [Thread-127294] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:01:55.061 [DEBUG] [Thread-127294] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:01:55.061 [DEBUG] [Thread-127294] [transport.py] [_log()] Compression: none
2025-12-31T12:01:55.061 [DEBUG] [Thread-127294] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:01:55.115 [DEBUG] [Thread-127294] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:01:55.115 [DEBUG] [Thread-127294] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:01:55.116 [DEBUG] [Thread-127294] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T12:01:55.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T12:01:55.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:01:55.173 [DEBUG] [Thread-127294] [transport.py] [_log()] userauth is OK
2025-12-31T12:01:55.173 [DEBUG] [Thread-127294] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:01:55.173 [DEBUG] [Thread-127294] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:01:55.173 [DEBUG] [Thread-127294] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T12:01:55.173 [DEBUG] [Thread-127294] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:01:55.186 [INFO] [Thread-127294] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:01:55.186 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T12:01:55.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:01:56.061 [DEBUG] [Thread-127294] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:01:56.061 [DEBUG] [Thread-127294] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:01:56.108 [DEBUG] [Thread-127294] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:01:56.108 [DEBUG] [Thread-127294] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:01:56.117 [DEBUG] [Thread-127294] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:01:56.124 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:01:56.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T12:01:56.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T12:01:56.140 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:01:56.140 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:01:56.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:01:56.148 [DEBUG] [Thread-127294] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:02:07.217 [DEBUG] [Thread-127296 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:02:10.944 [DEBUG] [Thread-127297 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:02:22.271 [DEBUG] [Thread-127298 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:02:26.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T12:02:26.170 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T12:02:26.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T12:02:26.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 12, 1, 52), 36.39, 8.17, 0.0, 23.98, 26.03, 0, 0, 0, 2, 0, 0),)
2025-12-31T12:02:26.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 12:01:52
2025-12-31T12:02:27.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T12:02:27.181 [DEBUG] [Thread-127299] [transport.py] [_log()] starting thread (client mode): 0xb95443d0
2025-12-31T12:02:27.181 [DEBUG] [Thread-127299] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:02:27.202 [DEBUG] [Thread-127299] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T12:02:27.202 [INFO] [Thread-127299] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T12:02:27.205 [DEBUG] [Thread-127299] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:02:27.205 [DEBUG] [Thread-127299] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T12:02:27.205 [DEBUG] [Thread-127299] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:02:27.205 [DEBUG] [Thread-127299] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:02:27.205 [DEBUG] [Thread-127299] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:02:27.205 [DEBUG] [Thread-127299] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:02:27.205 [DEBUG] [Thread-127299] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:02:27.206 [DEBUG] [Thread-127299] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:02:27.206 [DEBUG] [Thread-127299] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:02:27.206 [DEBUG] [Thread-127299] [transport.py] [_log()] client lang: <none>
2025-12-31T12:02:27.206 [DEBUG] [Thread-127299] [transport.py] [_log()] server lang: <none>
2025-12-31T12:02:27.206 [DEBUG] [Thread-127299] [transport.py] [_log()] kex follows: False
2025-12-31T12:02:27.206 [DEBUG] [Thread-127299] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:02:27.206 [DEBUG] [Thread-127299] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:02:27.206 [DEBUG] [Thread-127299] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:02:27.206 [DEBUG] [Thread-127299] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:02:27.206 [DEBUG] [Thread-127299] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:02:27.206 [DEBUG] [Thread-127299] [transport.py] [_log()] Compression: none
2025-12-31T12:02:27.206 [DEBUG] [Thread-127299] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:02:27.224 [DEBUG] [Thread-127299] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:02:27.224 [DEBUG] [Thread-127299] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:02:27.225 [DEBUG] [Thread-127299] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T12:02:27.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T12:02:27.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:02:27.226 [DEBUG] [Thread-127299] [transport.py] [_log()] userauth is OK
2025-12-31T12:02:27.227 [DEBUG] [Thread-127299] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:02:27.227 [DEBUG] [Thread-127299] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:02:27.227 [DEBUG] [Thread-127299] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T12:02:27.227 [DEBUG] [Thread-127299] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:02:27.244 [INFO] [Thread-127299] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:02:27.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:02:27.871 [DEBUG] [Thread-127299] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:02:27.871 [DEBUG] [Thread-127299] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:02:27.872 [DEBUG] [Thread-127299] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T12:02:27.911 [DEBUG] [Thread-127299] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:02:27.912 [DEBUG] [Thread-127299] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:02:27.914 [DEBUG] [Thread-127299] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:02:27.926 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:02:27.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T12:02:27.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T12:02:27.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T12:02:27.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:02:27.936 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T12:02:27.936 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:02:27.936 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:02:27.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T12:02:27.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.417851 -999.00  +24.90  22.62     14   -4.40 1 1 1 1 1   888    0 31.03 45.35 ----- 21.4 22.6 303.4 28.6 32.5 -25.1 32.0 -24.3 31.2 -22.4 31.8 -23.0
2025-12-31T12:02:27.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T12:02:27.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T12:02:27.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.417851
2025-12-31T12:02:27.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T12:02:27.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T12:02:27.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T12:02:27.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T12:02:27.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T12:02:27.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T12:01:52', tmtdew=36.39, humidity=8.17, cloud=0.0, wind=23.98, temperature=26.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T10:01:42.326', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T12:02:27.938 [DEBUG] [Thread-127299] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:02:28.025 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T12:02:28.036 [DEBUG] [Thread-127302] [transport.py] [_log()] starting thread (client mode): 0xb9546890
2025-12-31T12:02:28.036 [DEBUG] [Thread-127302] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:02:28.051 [DEBUG] [Thread-127302] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T12:02:28.051 [INFO] [Thread-127302] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T12:02:28.059 [DEBUG] [Thread-127302] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:02:28.059 [DEBUG] [Thread-127302] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T12:02:28.059 [DEBUG] [Thread-127302] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:02:28.059 [DEBUG] [Thread-127302] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:02:28.059 [DEBUG] [Thread-127302] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:02:28.059 [DEBUG] [Thread-127302] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:02:28.059 [DEBUG] [Thread-127302] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:02:28.059 [DEBUG] [Thread-127302] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:02:28.059 [DEBUG] [Thread-127302] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:02:28.060 [DEBUG] [Thread-127302] [transport.py] [_log()] client lang: <none>
2025-12-31T12:02:28.060 [DEBUG] [Thread-127302] [transport.py] [_log()] server lang: <none>
2025-12-31T12:02:28.060 [DEBUG] [Thread-127302] [transport.py] [_log()] kex follows: False
2025-12-31T12:02:28.060 [DEBUG] [Thread-127302] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:02:28.060 [DEBUG] [Thread-127302] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:02:28.060 [DEBUG] [Thread-127302] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:02:28.060 [DEBUG] [Thread-127302] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:02:28.060 [DEBUG] [Thread-127302] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:02:28.060 [DEBUG] [Thread-127302] [transport.py] [_log()] Compression: none
2025-12-31T12:02:28.060 [DEBUG] [Thread-127302] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:02:28.117 [DEBUG] [Thread-127302] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:02:28.117 [DEBUG] [Thread-127302] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:02:28.118 [DEBUG] [Thread-127302] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T12:02:28.118 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T12:02:28.119 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:02:28.178 [DEBUG] [Thread-127302] [transport.py] [_log()] userauth is OK
2025-12-31T12:02:28.178 [DEBUG] [Thread-127302] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:02:28.178 [DEBUG] [Thread-127302] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:02:28.178 [DEBUG] [Thread-127302] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T12:02:28.178 [DEBUG] [Thread-127302] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:02:28.197 [INFO] [Thread-127302] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:02:28.198 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T12:02:28.198 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:02:29.055 [DEBUG] [Thread-127302] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:02:29.055 [DEBUG] [Thread-127302] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:02:29.103 [DEBUG] [Thread-127302] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:02:29.103 [DEBUG] [Thread-127302] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:02:29.112 [DEBUG] [Thread-127302] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:02:29.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:02:29.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T12:02:29.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T12:02:29.138 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:02:29.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:02:29.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:02:29.146 [DEBUG] [Thread-127302] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:02:37.299 [DEBUG] [Thread-127304 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:02:38.569 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:02:38.570 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:02:52.352 [DEBUG] [Thread-127305 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:02:59.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T12:02:59.169 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T12: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-12-31T12:02:59.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 12, 2, 56), 35.62, 8.75, 0.0, 19.25, 25.51, 0, 0, 0, 2, 0, 0),)
2025-12-31T12:02:59.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 12:02:56
2025-12-31T12:03:00.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T12:03:00.173 [DEBUG] [Thread-127306] [transport.py] [_log()] starting thread (client mode): 0xb6b01ff0
2025-12-31T12:03:00.173 [DEBUG] [Thread-127306] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:03:00.194 [DEBUG] [Thread-127306] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T12:03:00.194 [INFO] [Thread-127306] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T12:03:00.197 [DEBUG] [Thread-127306] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:03:00.197 [DEBUG] [Thread-127306] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T12:03:00.197 [DEBUG] [Thread-127306] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:03:00.197 [DEBUG] [Thread-127306] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:03:00.197 [DEBUG] [Thread-127306] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:03:00.197 [DEBUG] [Thread-127306] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:03:00.197 [DEBUG] [Thread-127306] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:03:00.197 [DEBUG] [Thread-127306] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:03:00.197 [DEBUG] [Thread-127306] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:03:00.197 [DEBUG] [Thread-127306] [transport.py] [_log()] client lang: <none>
2025-12-31T12:03:00.197 [DEBUG] [Thread-127306] [transport.py] [_log()] server lang: <none>
2025-12-31T12:03:00.197 [DEBUG] [Thread-127306] [transport.py] [_log()] kex follows: False
2025-12-31T12:03:00.197 [DEBUG] [Thread-127306] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:03:00.197 [DEBUG] [Thread-127306] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:03:00.197 [DEBUG] [Thread-127306] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:03:00.198 [DEBUG] [Thread-127306] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:03:00.198 [DEBUG] [Thread-127306] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:03:00.198 [DEBUG] [Thread-127306] [transport.py] [_log()] Compression: none
2025-12-31T12:03:00.198 [DEBUG] [Thread-127306] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:03:00.216 [DEBUG] [Thread-127306] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:03:00.217 [DEBUG] [Thread-127306] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:03:00.217 [DEBUG] [Thread-127306] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T12:03:00.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T12:03:00.218 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:03:00.220 [DEBUG] [Thread-127306] [transport.py] [_log()] userauth is OK
2025-12-31T12:03:00.221 [DEBUG] [Thread-127306] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:03:00.221 [DEBUG] [Thread-127306] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:03:00.221 [DEBUG] [Thread-127306] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T12:03:00.221 [DEBUG] [Thread-127306] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:03:00.245 [INFO] [Thread-127306] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:03:00.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:03:00.902 [DEBUG] [Thread-127306] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:03:00.902 [DEBUG] [Thread-127306] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:03:00.903 [DEBUG] [Thread-127306] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T12:03:00.943 [DEBUG] [Thread-127306] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:03:00.943 [DEBUG] [Thread-127306] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:03:00.946 [DEBUG] [Thread-127306] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:03:00.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:03:00.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T12:03:00.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T12:03:00.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T12:03:00.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:03:00.971 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T12:03:00.971 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:03:00.971 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:03:00.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T12:03:00.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.418199 -999.00  +25.40  22.46     14   -3.70 1 1 1 1 1   888    0 30.71 34.02 ----- 24.1 22.5 314.0 26.6 32.4 -25.5 31.9 -24.7 31.1 -25.4 31.7 -22.6
2025-12-31T12:03:00.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T12:03:00.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T12:03:00.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.418199
2025-12-31T12:03:00.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T12:03:00.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T12:03:00.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T12:03:00.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T12:03:00.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T12:03:00.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T12:02:56', tmtdew=35.62, humidity=8.75, cloud=0.0, wind=19.25, temperature=25.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T10:02:12.394', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T12:03:00.974 [DEBUG] [Thread-127306] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:03:01.062 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T12:03:01.074 [DEBUG] [Thread-127309] [transport.py] [_log()] starting thread (client mode): 0xb95b0730
2025-12-31T12:03:01.074 [DEBUG] [Thread-127309] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:03:01.090 [DEBUG] [Thread-127309] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T12:03:01.090 [INFO] [Thread-127309] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T12:03:01.097 [DEBUG] [Thread-127309] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:03:01.098 [DEBUG] [Thread-127309] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T12:03:01.098 [DEBUG] [Thread-127309] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:03:01.098 [DEBUG] [Thread-127309] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:03:01.098 [DEBUG] [Thread-127309] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:03:01.098 [DEBUG] [Thread-127309] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:03:01.098 [DEBUG] [Thread-127309] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:03:01.098 [DEBUG] [Thread-127309] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:03:01.098 [DEBUG] [Thread-127309] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:03:01.098 [DEBUG] [Thread-127309] [transport.py] [_log()] client lang: <none>
2025-12-31T12:03:01.098 [DEBUG] [Thread-127309] [transport.py] [_log()] server lang: <none>
2025-12-31T12:03:01.098 [DEBUG] [Thread-127309] [transport.py] [_log()] kex follows: False
2025-12-31T12:03:01.098 [DEBUG] [Thread-127309] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:03:01.098 [DEBUG] [Thread-127309] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:03:01.098 [DEBUG] [Thread-127309] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:03:01.098 [DEBUG] [Thread-127309] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:03:01.098 [DEBUG] [Thread-127309] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:03:01.098 [DEBUG] [Thread-127309] [transport.py] [_log()] Compression: none
2025-12-31T12:03:01.099 [DEBUG] [Thread-127309] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:03:01.158 [DEBUG] [Thread-127309] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:03:01.159 [DEBUG] [Thread-127309] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:03:01.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T12:03:01.160 [DEBUG] [Thread-127309] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T12:03:01.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:03:01.214 [DEBUG] [Thread-127309] [transport.py] [_log()] userauth is OK
2025-12-31T12:03:01.215 [DEBUG] [Thread-127309] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:03:01.215 [DEBUG] [Thread-127309] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:03:01.215 [DEBUG] [Thread-127309] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T12:03:01.215 [DEBUG] [Thread-127309] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:03:01.235 [INFO] [Thread-127309] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:03:01.235 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T12:03:01.236 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:03:02.071 [DEBUG] [Thread-127309] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:03:02.071 [DEBUG] [Thread-127309] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:03:02.121 [DEBUG] [Thread-127309] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:03:02.121 [DEBUG] [Thread-127309] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:03:02.130 [DEBUG] [Thread-127309] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:03:02.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:03:02.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T12:03:02.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T12:03:02.159 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:03:02.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:03:02.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:03:02.168 [DEBUG] [Thread-127309] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:03:07.389 [DEBUG] [Thread-127311 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:03:10.978 [DEBUG] [Thread-127312 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:03:22.439 [DEBUG] [Thread-127313 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:03:32.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T12:03:32.187 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T12:03:32.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T12:03:32.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 12, 3, 28), 35.58, 8.8, 0.0, 16.25, 25.64, 0, 0, 0, 2, 0, 0),)
2025-12-31T12:03:32.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 12:03:28
2025-12-31T12:03:33.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T12:03:33.161 [DEBUG] [Thread-127314] [transport.py] [_log()] starting thread (client mode): 0xb6b02bc0
2025-12-31T12:03:33.161 [DEBUG] [Thread-127314] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:03:33.182 [DEBUG] [Thread-127314] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T12:03:33.182 [INFO] [Thread-127314] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T12:03:33.185 [DEBUG] [Thread-127314] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:03:33.185 [DEBUG] [Thread-127314] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T12:03:33.185 [DEBUG] [Thread-127314] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:03:33.185 [DEBUG] [Thread-127314] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:03:33.185 [DEBUG] [Thread-127314] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:03:33.185 [DEBUG] [Thread-127314] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:03:33.185 [DEBUG] [Thread-127314] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:03:33.185 [DEBUG] [Thread-127314] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:03:33.185 [DEBUG] [Thread-127314] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:03:33.185 [DEBUG] [Thread-127314] [transport.py] [_log()] client lang: <none>
2025-12-31T12:03:33.186 [DEBUG] [Thread-127314] [transport.py] [_log()] server lang: <none>
2025-12-31T12:03:33.186 [DEBUG] [Thread-127314] [transport.py] [_log()] kex follows: False
2025-12-31T12:03:33.186 [DEBUG] [Thread-127314] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:03:33.186 [DEBUG] [Thread-127314] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:03:33.186 [DEBUG] [Thread-127314] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:03:33.186 [DEBUG] [Thread-127314] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:03:33.186 [DEBUG] [Thread-127314] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:03:33.186 [DEBUG] [Thread-127314] [transport.py] [_log()] Compression: none
2025-12-31T12:03:33.186 [DEBUG] [Thread-127314] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:03:33.204 [DEBUG] [Thread-127314] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:03:33.204 [DEBUG] [Thread-127314] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:03:33.205 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T12:03:33.205 [DEBUG] [Thread-127314] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T12:03:33.206 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:03:33.207 [DEBUG] [Thread-127314] [transport.py] [_log()] userauth is OK
2025-12-31T12:03:33.208 [DEBUG] [Thread-127314] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:03:33.208 [DEBUG] [Thread-127314] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:03:33.208 [DEBUG] [Thread-127314] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T12:03:33.208 [DEBUG] [Thread-127314] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:03:33.232 [INFO] [Thread-127314] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:03:33.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:03:33.849 [DEBUG] [Thread-127314] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:03:33.849 [DEBUG] [Thread-127314] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:03:33.849 [DEBUG] [Thread-127314] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T12:03:33.890 [DEBUG] [Thread-127314] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:03:33.890 [DEBUG] [Thread-127314] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:03:33.893 [DEBUG] [Thread-127314] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:03:33.905 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:03:33.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T12:03:33.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T12:03:33.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T12:03:33.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:03:33.918 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T12:03:33.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:03:33.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:03:33.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T12:03:33.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.418546 -999.00  +25.00  17.86     14   -4.20 1 2 1 1 1   888    0 30.96 29.17 ----- 16.3 17.9 314.4 28.4 32.4 -24.1 31.9 -23.3 31.2 -21.4 31.8 -21.6
2025-12-31T12:03:33.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T12:03:33.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T12:03:33.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.418546
2025-12-31T12:03:33.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T12:03:33.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T12:03:33.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T12:03:33.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T12:03:33.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T12:03:33.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T12:03:28', tmtdew=35.58, humidity=8.8, cloud=0.0, wind=16.25, temperature=25.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T10:02:42.374', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T12:03:33.921 [DEBUG] [Thread-127314] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:03:34.006 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T12:03:34.017 [DEBUG] [Thread-127317] [transport.py] [_log()] starting thread (client mode): 0xb9547010
2025-12-31T12:03:34.017 [DEBUG] [Thread-127317] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:03:34.037 [DEBUG] [Thread-127317] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T12:03:34.037 [INFO] [Thread-127317] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T12:03:34.045 [DEBUG] [Thread-127317] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:03:34.045 [DEBUG] [Thread-127317] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T12:03:34.046 [DEBUG] [Thread-127317] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:03:34.046 [DEBUG] [Thread-127317] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:03:34.046 [DEBUG] [Thread-127317] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:03:34.046 [DEBUG] [Thread-127317] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:03:34.046 [DEBUG] [Thread-127317] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:03:34.046 [DEBUG] [Thread-127317] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:03:34.046 [DEBUG] [Thread-127317] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:03:34.046 [DEBUG] [Thread-127317] [transport.py] [_log()] client lang: <none>
2025-12-31T12:03:34.046 [DEBUG] [Thread-127317] [transport.py] [_log()] server lang: <none>
2025-12-31T12:03:34.046 [DEBUG] [Thread-127317] [transport.py] [_log()] kex follows: False
2025-12-31T12:03:34.046 [DEBUG] [Thread-127317] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:03:34.046 [DEBUG] [Thread-127317] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:03:34.046 [DEBUG] [Thread-127317] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:03:34.046 [DEBUG] [Thread-127317] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:03:34.046 [DEBUG] [Thread-127317] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:03:34.046 [DEBUG] [Thread-127317] [transport.py] [_log()] Compression: none
2025-12-31T12:03:34.047 [DEBUG] [Thread-127317] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:03:34.103 [DEBUG] [Thread-127317] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:03:34.103 [DEBUG] [Thread-127317] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:03:34.104 [DEBUG] [Thread-127317] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T12:03:34.104 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T12:03:34.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:03:34.159 [DEBUG] [Thread-127317] [transport.py] [_log()] userauth is OK
2025-12-31T12:03:34.159 [DEBUG] [Thread-127317] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:03:34.159 [DEBUG] [Thread-127317] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:03:34.159 [DEBUG] [Thread-127317] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T12:03:34.159 [DEBUG] [Thread-127317] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:03:34.179 [INFO] [Thread-127317] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:03:34.179 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T12:03:34.180 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:03:35.029 [DEBUG] [Thread-127317] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:03:35.029 [DEBUG] [Thread-127317] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:03:35.077 [DEBUG] [Thread-127317] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:03:35.077 [DEBUG] [Thread-127317] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:03:35.087 [DEBUG] [Thread-127317] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:03:35.096 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:03:35.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T12:03:35.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T12:03:35.114 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:03:35.115 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:03:35.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:03:35.123 [DEBUG] [Thread-127317] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:03:37.473 [DEBUG] [Thread-127319 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:03:38.710 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:03:38.711 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:03:52.531 [DEBUG] [Thread-127320 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:04:05.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T12:04:05.145 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T12:04:05.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T12:04:05.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 12, 4), 35.75, 8.64, 0.0, 17.68, 25.86, 0, 0, 0, 2, 0, 0),)
2025-12-31T12:04:05.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 12:04:00
2025-12-31T12:04:05.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T12:04:06.140 [DEBUG] [Thread-127321] [transport.py] [_log()] starting thread (client mode): 0xb9545e70
2025-12-31T12:04:06.140 [DEBUG] [Thread-127321] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:04:06.161 [DEBUG] [Thread-127321] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T12:04:06.161 [INFO] [Thread-127321] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T12:04:06.164 [DEBUG] [Thread-127321] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:04:06.164 [DEBUG] [Thread-127321] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T12:04:06.164 [DEBUG] [Thread-127321] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:04:06.164 [DEBUG] [Thread-127321] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:04:06.164 [DEBUG] [Thread-127321] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:04:06.164 [DEBUG] [Thread-127321] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:04:06.164 [DEBUG] [Thread-127321] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:04:06.164 [DEBUG] [Thread-127321] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:04:06.164 [DEBUG] [Thread-127321] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:04:06.164 [DEBUG] [Thread-127321] [transport.py] [_log()] client lang: <none>
2025-12-31T12:04:06.164 [DEBUG] [Thread-127321] [transport.py] [_log()] server lang: <none>
2025-12-31T12:04:06.164 [DEBUG] [Thread-127321] [transport.py] [_log()] kex follows: False
2025-12-31T12:04:06.164 [DEBUG] [Thread-127321] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:04:06.164 [DEBUG] [Thread-127321] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:04:06.165 [DEBUG] [Thread-127321] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:04:06.165 [DEBUG] [Thread-127321] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:04:06.165 [DEBUG] [Thread-127321] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:04:06.165 [DEBUG] [Thread-127321] [transport.py] [_log()] Compression: none
2025-12-31T12:04:06.165 [DEBUG] [Thread-127321] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:04:06.185 [DEBUG] [Thread-127321] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:04:06.186 [DEBUG] [Thread-127321] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:04:06.186 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T12:04:06.187 [DEBUG] [Thread-127321] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T12:04:06.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:04:06.189 [DEBUG] [Thread-127321] [transport.py] [_log()] userauth is OK
2025-12-31T12:04:06.189 [DEBUG] [Thread-127321] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:04:06.189 [DEBUG] [Thread-127321] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:04:06.189 [DEBUG] [Thread-127321] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T12:04:06.189 [DEBUG] [Thread-127321] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:04:06.212 [INFO] [Thread-127321] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:04:06.213 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:04:06.838 [DEBUG] [Thread-127321] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:04:06.839 [DEBUG] [Thread-127321] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:04:06.839 [DEBUG] [Thread-127321] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T12:04:06.880 [DEBUG] [Thread-127321] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:04:06.880 [DEBUG] [Thread-127321] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:04:06.884 [DEBUG] [Thread-127321] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:04:06.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:04:06.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T12:04:06.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T12:04:06.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T12:04:06.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:04:06.909 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T12:04:06.910 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:04:06.910 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:04:06.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T12:04:06.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.418893 -999.00  +24.90  14.23     14   -3.90 1 1 1 1 1   888    0 30.96 21.94 ----- 19.5 14.2 335.2 24.8 32.4 -25.0 31.8 -24.6 31.2 -23.3 31.7 -22.5
2025-12-31T12:04:06.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T12:04:06.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T12:04:06.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.418893
2025-12-31T12:04:06.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T12:04:06.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T12:04:06.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T12:04:06.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T12:04:06.912 [DEBUG] [Thread-127321] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:04:06.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T12:04:06.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T12:04:00', tmtdew=35.75, humidity=8.64, cloud=0.0, wind=17.68, temperature=25.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T10:03:12.355', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T12:04:06.995 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T12:04:07.007 [DEBUG] [Thread-127324] [transport.py] [_log()] starting thread (client mode): 0xb9547670
2025-12-31T12:04:07.007 [DEBUG] [Thread-127324] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:04:07.022 [DEBUG] [Thread-127324] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T12:04:07.022 [INFO] [Thread-127324] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T12:04:07.030 [DEBUG] [Thread-127324] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:04:07.030 [DEBUG] [Thread-127324] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T12:04:07.030 [DEBUG] [Thread-127324] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:04:07.030 [DEBUG] [Thread-127324] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:04:07.030 [DEBUG] [Thread-127324] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:04:07.030 [DEBUG] [Thread-127324] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:04:07.030 [DEBUG] [Thread-127324] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:04:07.030 [DEBUG] [Thread-127324] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:04:07.030 [DEBUG] [Thread-127324] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:04:07.030 [DEBUG] [Thread-127324] [transport.py] [_log()] client lang: <none>
2025-12-31T12:04:07.030 [DEBUG] [Thread-127324] [transport.py] [_log()] server lang: <none>
2025-12-31T12:04:07.030 [DEBUG] [Thread-127324] [transport.py] [_log()] kex follows: False
2025-12-31T12:04:07.030 [DEBUG] [Thread-127324] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:04:07.030 [DEBUG] [Thread-127324] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:04:07.030 [DEBUG] [Thread-127324] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:04:07.031 [DEBUG] [Thread-127324] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:04:07.031 [DEBUG] [Thread-127324] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:04:07.031 [DEBUG] [Thread-127324] [transport.py] [_log()] Compression: none
2025-12-31T12:04:07.031 [DEBUG] [Thread-127324] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:04:07.086 [DEBUG] [Thread-127324] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:04:07.087 [DEBUG] [Thread-127324] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:04:07.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T12:04:07.087 [DEBUG] [Thread-127324] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T12:04:07.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:04:07.143 [DEBUG] [Thread-127324] [transport.py] [_log()] userauth is OK
2025-12-31T12:04:07.143 [DEBUG] [Thread-127324] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:04:07.143 [DEBUG] [Thread-127324] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:04:07.143 [DEBUG] [Thread-127324] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T12:04:07.143 [DEBUG] [Thread-127324] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:04:07.158 [INFO] [Thread-127324] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:04:07.158 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T12:04:07.158 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:04:07.560 [DEBUG] [Thread-127326 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:04:07.968 [DEBUG] [Thread-127324] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:04:07.969 [DEBUG] [Thread-127324] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:04:08.017 [DEBUG] [Thread-127324] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:04:08.017 [DEBUG] [Thread-127324] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:04:08.026 [DEBUG] [Thread-127324] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:04:08.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:04:08.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T12:04:08.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T12:04:08.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:04:08.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:04:08.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:04:08.063 [DEBUG] [Thread-127324] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:04:11.011 [DEBUG] [Thread-127327 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:04:22.614 [DEBUG] [Thread-127328 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:04:37.646 [DEBUG] [Thread-127329 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:04:38.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T12:04:38.086 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T12:04:38.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T12:04:38.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 12, 4, 32), 35.74, 8.62, 0.0, 16.69, 25.69, 0, 0, 0, 2, 0, 0),)
2025-12-31T12:04:38.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 12:04:32
2025-12-31T12:04:38.851 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:04:38.852 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:04:38.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T12:04:39.057 [DEBUG] [Thread-127330] [transport.py] [_log()] starting thread (client mode): 0xb95b14b0
2025-12-31T12:04:39.057 [DEBUG] [Thread-127330] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:04:39.079 [DEBUG] [Thread-127330] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T12:04:39.079 [INFO] [Thread-127330] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T12:04:39.080 [DEBUG] [Thread-127330] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:04:39.080 [DEBUG] [Thread-127330] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T12:04:39.080 [DEBUG] [Thread-127330] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:04:39.080 [DEBUG] [Thread-127330] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:04:39.080 [DEBUG] [Thread-127330] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:04:39.080 [DEBUG] [Thread-127330] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:04:39.080 [DEBUG] [Thread-127330] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:04:39.080 [DEBUG] [Thread-127330] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:04:39.080 [DEBUG] [Thread-127330] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:04:39.080 [DEBUG] [Thread-127330] [transport.py] [_log()] client lang: <none>
2025-12-31T12:04:39.080 [DEBUG] [Thread-127330] [transport.py] [_log()] server lang: <none>
2025-12-31T12:04:39.080 [DEBUG] [Thread-127330] [transport.py] [_log()] kex follows: False
2025-12-31T12:04:39.080 [DEBUG] [Thread-127330] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:04:39.080 [DEBUG] [Thread-127330] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:04:39.080 [DEBUG] [Thread-127330] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:04:39.080 [DEBUG] [Thread-127330] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:04:39.080 [DEBUG] [Thread-127330] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:04:39.080 [DEBUG] [Thread-127330] [transport.py] [_log()] Compression: none
2025-12-31T12:04:39.080 [DEBUG] [Thread-127330] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:04:39.092 [DEBUG] [Thread-127330] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:04:39.092 [DEBUG] [Thread-127330] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:04:39.093 [DEBUG] [Thread-127330] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T12:04:39.093 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T12:04:39.094 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:04:39.095 [DEBUG] [Thread-127330] [transport.py] [_log()] userauth is OK
2025-12-31T12:04:39.095 [DEBUG] [Thread-127330] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:04:39.095 [DEBUG] [Thread-127330] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:04:39.095 [DEBUG] [Thread-127330] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T12:04:39.096 [DEBUG] [Thread-127330] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:04:39.116 [INFO] [Thread-127330] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:04:39.117 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:04:39.735 [DEBUG] [Thread-127330] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:04:39.735 [DEBUG] [Thread-127330] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:04:39.735 [DEBUG] [Thread-127330] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T12:04:39.777 [DEBUG] [Thread-127330] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:04:39.777 [DEBUG] [Thread-127330] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:04:39.780 [DEBUG] [Thread-127330] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:04:39.791 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:04:39.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T12:04:39.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T12:04:39.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T12:04:39.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:04:39.801 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T12:04:39.801 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:04:39.801 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:04:39.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T12:04:39.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.419240 -999.00  +25.40  20.91     14   -4.00 1 2 1 1 1   888    0 30.29 16.00 ----- 17.6 20.9 320.0 26.9 32.5 -24.2 31.9 -23.2 31.2 -21.6 31.7 -21.9
2025-12-31T12:04:39.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T12:04:39.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T12:04:39.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.419240
2025-12-31T12:04:39.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T12:04:39.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T12:04:39.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T12:04:39.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T12:04:39.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T12:04:39.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T12:04:32', tmtdew=35.74, humidity=8.62, cloud=0.0, wind=16.69, temperature=25.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T10:03:42.336', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T12:04:39.804 [DEBUG] [Thread-127330] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:04:39.884 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T12:04:39.895 [DEBUG] [Thread-127333] [transport.py] [_log()] starting thread (client mode): 0xb95b3e80
2025-12-31T12:04:39.895 [DEBUG] [Thread-127333] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:04:39.909 [DEBUG] [Thread-127333] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T12:04:39.909 [INFO] [Thread-127333] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T12:04:39.917 [DEBUG] [Thread-127333] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:04:39.917 [DEBUG] [Thread-127333] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T12:04:39.917 [DEBUG] [Thread-127333] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:04:39.917 [DEBUG] [Thread-127333] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:04:39.917 [DEBUG] [Thread-127333] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:04:39.917 [DEBUG] [Thread-127333] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:04:39.917 [DEBUG] [Thread-127333] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:04:39.917 [DEBUG] [Thread-127333] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:04:39.917 [DEBUG] [Thread-127333] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:04:39.917 [DEBUG] [Thread-127333] [transport.py] [_log()] client lang: <none>
2025-12-31T12:04:39.917 [DEBUG] [Thread-127333] [transport.py] [_log()] server lang: <none>
2025-12-31T12:04:39.917 [DEBUG] [Thread-127333] [transport.py] [_log()] kex follows: False
2025-12-31T12:04:39.917 [DEBUG] [Thread-127333] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:04:39.918 [DEBUG] [Thread-127333] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:04:39.918 [DEBUG] [Thread-127333] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:04:39.918 [DEBUG] [Thread-127333] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:04:39.918 [DEBUG] [Thread-127333] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:04:39.918 [DEBUG] [Thread-127333] [transport.py] [_log()] Compression: none
2025-12-31T12:04:39.918 [DEBUG] [Thread-127333] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:04:39.975 [DEBUG] [Thread-127333] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:04:39.976 [DEBUG] [Thread-127333] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:04:39.976 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T12:04:39.977 [DEBUG] [Thread-127333] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T12:04:39.977 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:04:40.032 [DEBUG] [Thread-127333] [transport.py] [_log()] userauth is OK
2025-12-31T12:04:40.032 [DEBUG] [Thread-127333] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:04:40.032 [DEBUG] [Thread-127333] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:04:40.032 [DEBUG] [Thread-127333] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T12:04:40.033 [DEBUG] [Thread-127333] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:04:40.052 [INFO] [Thread-127333] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:04:40.052 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T12:04:40.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:04:40.867 [DEBUG] [Thread-127333] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:04:40.867 [DEBUG] [Thread-127333] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:04:40.915 [DEBUG] [Thread-127333] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:04:40.915 [DEBUG] [Thread-127333] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:04:40.924 [DEBUG] [Thread-127333] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:04:40.933 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:04:40.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T12:04:40.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T12:04:40.952 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:04:40.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:04:40.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:04:40.961 [DEBUG] [Thread-127333] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:04:52.686 [DEBUG] [Thread-127335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:05:07.736 [DEBUG] [Thread-127336 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:05:10.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T12:05:10.965 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T12:05:10.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T12:05:11.060 [DEBUG] [Thread-127337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:05:11.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 12, 5, 4), 35.72, 8.64, 0.0, 21.26, 25.74, 0, 0, 0, 2, 0, 0),)
2025-12-31T12:05:11.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 12:05:04
2025-12-31T12:05:11.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T12:05:11.987 [DEBUG] [Thread-127338] [transport.py] [_log()] starting thread (client mode): 0xb6b01c30
2025-12-31T12:05:11.987 [DEBUG] [Thread-127338] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:05:12.007 [DEBUG] [Thread-127338] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T12:05:12.007 [INFO] [Thread-127338] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T12:05:12.010 [DEBUG] [Thread-127338] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:05:12.010 [DEBUG] [Thread-127338] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T12:05:12.010 [DEBUG] [Thread-127338] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:05:12.010 [DEBUG] [Thread-127338] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:05:12.010 [DEBUG] [Thread-127338] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:05:12.010 [DEBUG] [Thread-127338] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:05:12.010 [DEBUG] [Thread-127338] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:05:12.010 [DEBUG] [Thread-127338] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:05:12.010 [DEBUG] [Thread-127338] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:05:12.010 [DEBUG] [Thread-127338] [transport.py] [_log()] client lang: <none>
2025-12-31T12:05:12.010 [DEBUG] [Thread-127338] [transport.py] [_log()] server lang: <none>
2025-12-31T12:05:12.010 [DEBUG] [Thread-127338] [transport.py] [_log()] kex follows: False
2025-12-31T12:05:12.011 [DEBUG] [Thread-127338] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:05:12.011 [DEBUG] [Thread-127338] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:05:12.011 [DEBUG] [Thread-127338] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:05:12.011 [DEBUG] [Thread-127338] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:05:12.011 [DEBUG] [Thread-127338] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:05:12.011 [DEBUG] [Thread-127338] [transport.py] [_log()] Compression: none
2025-12-31T12:05:12.011 [DEBUG] [Thread-127338] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:05:12.024 [DEBUG] [Thread-127338] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:05:12.024 [DEBUG] [Thread-127338] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:05:12.025 [DEBUG] [Thread-127338] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T12:05:12.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T12:05:12.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:05:12.025 [DEBUG] [Thread-127338] [transport.py] [_log()] userauth is OK
2025-12-31T12:05:12.025 [DEBUG] [Thread-127338] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:05:12.026 [DEBUG] [Thread-127338] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:05:12.026 [DEBUG] [Thread-127338] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T12:05:12.026 [DEBUG] [Thread-127338] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:05:12.042 [INFO] [Thread-127338] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:05:12.042 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:05:22.765 [DEBUG] [Thread-127340 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:05:24.238 [DEBUG] [Thread-127338] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:05:24.238 [DEBUG] [Thread-127338] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:05:24.239 [DEBUG] [Thread-127338] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T12:05:24.279 [DEBUG] [Thread-127338] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:05:24.279 [DEBUG] [Thread-127338] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:05:24.283 [DEBUG] [Thread-127338] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:05:24.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:05:24.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T12:05:24.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T12:05:24.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T12:05:24.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:05:24.773 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T12:05:24.773 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:05:24.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:05:24.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T12:05:24.774 [WARNING] [poll_weather_worker] [driver.py] [poll_weather_state()] Unable to get atlas cloud data: list index out of range
2025-12-31T12:05:24.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T12:05:04', tmtdew=35.72, humidity=8.64, cloud=0.0, wind=21.26, temperature=25.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp=None, atlas_cloud=None, atlas_rain=None, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T12:05:24.777 [DEBUG] [Thread-127338] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:05:24.849 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T12:05:24.862 [DEBUG] [Thread-127342] [transport.py] [_log()] starting thread (client mode): 0xb95b06a0
2025-12-31T12:05:24.862 [DEBUG] [Thread-127342] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:05:24.877 [DEBUG] [Thread-127342] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T12:05:24.877 [INFO] [Thread-127342] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T12:05:24.885 [DEBUG] [Thread-127342] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:05:24.885 [DEBUG] [Thread-127342] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T12:05:24.886 [DEBUG] [Thread-127342] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:05:24.886 [DEBUG] [Thread-127342] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:05:24.886 [DEBUG] [Thread-127342] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:05:24.886 [DEBUG] [Thread-127342] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:05:24.886 [DEBUG] [Thread-127342] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:05:24.887 [DEBUG] [Thread-127342] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:05:24.887 [DEBUG] [Thread-127342] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:05:24.887 [DEBUG] [Thread-127342] [transport.py] [_log()] client lang: <none>
2025-12-31T12:05:24.887 [DEBUG] [Thread-127342] [transport.py] [_log()] server lang: <none>
2025-12-31T12:05:24.887 [DEBUG] [Thread-127342] [transport.py] [_log()] kex follows: False
2025-12-31T12:05:24.887 [DEBUG] [Thread-127342] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:05:24.887 [DEBUG] [Thread-127342] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:05:24.887 [DEBUG] [Thread-127342] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:05:24.887 [DEBUG] [Thread-127342] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:05:24.887 [DEBUG] [Thread-127342] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:05:24.887 [DEBUG] [Thread-127342] [transport.py] [_log()] Compression: none
2025-12-31T12:05:24.887 [DEBUG] [Thread-127342] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:05:24.944 [DEBUG] [Thread-127342] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:05:24.945 [DEBUG] [Thread-127342] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:05:24.945 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T12:05:24.946 [DEBUG] [Thread-127342] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T12:05:24.946 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:05:25.000 [DEBUG] [Thread-127342] [transport.py] [_log()] userauth is OK
2025-12-31T12:05:25.001 [DEBUG] [Thread-127342] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:05:25.001 [DEBUG] [Thread-127342] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:05:25.001 [DEBUG] [Thread-127342] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T12:05:25.001 [DEBUG] [Thread-127342] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:05:25.020 [INFO] [Thread-127342] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:05:25.021 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T12:05:25.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:05:25.877 [DEBUG] [Thread-127342] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:05:25.878 [DEBUG] [Thread-127342] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:05:25.926 [DEBUG] [Thread-127342] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:05:25.926 [DEBUG] [Thread-127342] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:05:25.935 [DEBUG] [Thread-127342] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:05:25.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:05:25.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T12:05:25.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T12:05:25.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:05:25.962 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:05:25.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:05:25.970 [DEBUG] [Thread-127342] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:05:37.800 [DEBUG] [Thread-127344 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:05:38.990 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:05:38.991 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:05:52.839 [DEBUG] [Thread-127345 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:05:55.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T12:05:55.993 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T12:05:56.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T12:05:56.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 12, 5, 36), 36.02, 8.72, 0.0, 23.84, 26.04, 0, 0, 0, 2, 0, 0),)
2025-12-31T12:05:56.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 12:05:36
2025-12-31T12:05:56.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T12:05:56.992 [DEBUG] [Thread-127346] [transport.py] [_log()] starting thread (client mode): 0xb95b05b0
2025-12-31T12:05:56.992 [DEBUG] [Thread-127346] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:05:57.014 [DEBUG] [Thread-127346] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T12:05:57.014 [INFO] [Thread-127346] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T12:05:57.018 [DEBUG] [Thread-127346] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:05:57.018 [DEBUG] [Thread-127346] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T12:05:57.018 [DEBUG] [Thread-127346] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:05:57.018 [DEBUG] [Thread-127346] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:05:57.018 [DEBUG] [Thread-127346] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:05:57.018 [DEBUG] [Thread-127346] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:05:57.018 [DEBUG] [Thread-127346] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:05:57.018 [DEBUG] [Thread-127346] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:05:57.018 [DEBUG] [Thread-127346] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:05:57.018 [DEBUG] [Thread-127346] [transport.py] [_log()] client lang: <none>
2025-12-31T12:05:57.018 [DEBUG] [Thread-127346] [transport.py] [_log()] server lang: <none>
2025-12-31T12:05:57.018 [DEBUG] [Thread-127346] [transport.py] [_log()] kex follows: False
2025-12-31T12:05:57.018 [DEBUG] [Thread-127346] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:05:57.018 [DEBUG] [Thread-127346] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:05:57.019 [DEBUG] [Thread-127346] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:05:57.019 [DEBUG] [Thread-127346] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:05:57.019 [DEBUG] [Thread-127346] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:05:57.019 [DEBUG] [Thread-127346] [transport.py] [_log()] Compression: none
2025-12-31T12:05:57.019 [DEBUG] [Thread-127346] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:05:57.037 [DEBUG] [Thread-127346] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:05:57.038 [DEBUG] [Thread-127346] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:05:57.038 [DEBUG] [Thread-127346] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T12:05:57.039 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T12:05:57.039 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:05:57.040 [DEBUG] [Thread-127346] [transport.py] [_log()] userauth is OK
2025-12-31T12:05:57.041 [DEBUG] [Thread-127346] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:05:57.041 [DEBUG] [Thread-127346] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:05:57.041 [DEBUG] [Thread-127346] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T12:05:57.041 [DEBUG] [Thread-127346] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:05:57.073 [INFO] [Thread-127346] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:05:57.073 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:05:57.708 [DEBUG] [Thread-127346] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:05:57.709 [DEBUG] [Thread-127346] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:05:57.709 [DEBUG] [Thread-127346] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T12:05:57.749 [DEBUG] [Thread-127346] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:05:57.749 [DEBUG] [Thread-127346] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:05:57.752 [DEBUG] [Thread-127346] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:05:57.763 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:05:57.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T12:05:57.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T12:05:57.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T12:05:57.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:05:57.773 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T12:05:57.773 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:05:57.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:05:57.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T12:05:57.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.420282 -999.00  +25.50  16.80     13   -3.90 1 2 1 1 1   888    0 30.40 -0.29 ----- 18.6 16.8 300.0 22.8 32.3 -23.8 31.9 -22.5 31.1 -21.8 31.7 -21.7
2025-12-31T12:05:57.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T12:05:57.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T12:05:57.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.420282
2025-12-31T12:05:57.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T12:05:57.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T12:05:57.775 [DEBUG] [Thread-127346] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:05:57.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T12:05:57.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T12:05:57.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T12:05:57.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T12:05:36', tmtdew=36.02, humidity=8.72, cloud=0.0, wind=23.84, temperature=26.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T10:05:12.365', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T12:05:57.870 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T12:05:57.882 [DEBUG] [Thread-127349] [transport.py] [_log()] starting thread (client mode): 0xb9546140
2025-12-31T12:05:57.882 [DEBUG] [Thread-127349] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:05:57.897 [DEBUG] [Thread-127349] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T12:05:57.897 [INFO] [Thread-127349] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T12:05:57.905 [DEBUG] [Thread-127349] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:05:57.905 [DEBUG] [Thread-127349] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T12:05:57.905 [DEBUG] [Thread-127349] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:05:57.905 [DEBUG] [Thread-127349] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:05:57.906 [DEBUG] [Thread-127349] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:05:57.906 [DEBUG] [Thread-127349] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:05:57.906 [DEBUG] [Thread-127349] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:05:57.906 [DEBUG] [Thread-127349] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:05:57.906 [DEBUG] [Thread-127349] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:05:57.906 [DEBUG] [Thread-127349] [transport.py] [_log()] client lang: <none>
2025-12-31T12:05:57.906 [DEBUG] [Thread-127349] [transport.py] [_log()] server lang: <none>
2025-12-31T12:05:57.906 [DEBUG] [Thread-127349] [transport.py] [_log()] kex follows: False
2025-12-31T12:05:57.906 [DEBUG] [Thread-127349] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:05:57.906 [DEBUG] [Thread-127349] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:05:57.906 [DEBUG] [Thread-127349] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:05:57.906 [DEBUG] [Thread-127349] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:05:57.906 [DEBUG] [Thread-127349] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:05:57.906 [DEBUG] [Thread-127349] [transport.py] [_log()] Compression: none
2025-12-31T12:05:57.906 [DEBUG] [Thread-127349] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:05:57.965 [DEBUG] [Thread-127349] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:05:57.966 [DEBUG] [Thread-127349] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:05:57.967 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T12:05:57.967 [DEBUG] [Thread-127349] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T12:05:57.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:05:58.025 [DEBUG] [Thread-127349] [transport.py] [_log()] userauth is OK
2025-12-31T12:05:58.025 [DEBUG] [Thread-127349] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:05:58.025 [DEBUG] [Thread-127349] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:05:58.025 [DEBUG] [Thread-127349] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T12:05:58.025 [DEBUG] [Thread-127349] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:05:58.050 [INFO] [Thread-127349] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:05:58.051 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T12:05:58.051 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:05:58.890 [DEBUG] [Thread-127349] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:05:58.890 [DEBUG] [Thread-127349] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:05:58.938 [DEBUG] [Thread-127349] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:05:58.938 [DEBUG] [Thread-127349] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:05:58.948 [DEBUG] [Thread-127349] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:05:58.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:05:58.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T12:05:58.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T12:05:58.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:05:58.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:05:58.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:05:58.985 [DEBUG] [Thread-127349] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:06:07.872 [DEBUG] [Thread-127351 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:06:11.094 [DEBUG] [Thread-127352 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:06:22.928 [DEBUG] [Thread-127353 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:06:28.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T12:06:28.989 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T12:06:28.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T12:06:29.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 12, 6, 8), 35.95, 8.77, 0.0, 24.56, 26.04, 0, 0, 0, 2, 0, 0),)
2025-12-31T12:06:29.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 12:06:08
2025-12-31T12:06:29.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T12:06:30.040 [DEBUG] [Thread-127354] [transport.py] [_log()] starting thread (client mode): 0xb6bb26e0
2025-12-31T12:06:30.041 [DEBUG] [Thread-127354] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:06:30.059 [DEBUG] [Thread-127354] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T12:06:30.059 [INFO] [Thread-127354] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T12:06:30.063 [DEBUG] [Thread-127354] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:06:30.063 [DEBUG] [Thread-127354] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T12:06:30.063 [DEBUG] [Thread-127354] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:06:30.063 [DEBUG] [Thread-127354] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:06:30.063 [DEBUG] [Thread-127354] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:06:30.063 [DEBUG] [Thread-127354] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:06:30.063 [DEBUG] [Thread-127354] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:06:30.063 [DEBUG] [Thread-127354] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:06:30.063 [DEBUG] [Thread-127354] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:06:30.063 [DEBUG] [Thread-127354] [transport.py] [_log()] client lang: <none>
2025-12-31T12:06:30.063 [DEBUG] [Thread-127354] [transport.py] [_log()] server lang: <none>
2025-12-31T12:06:30.063 [DEBUG] [Thread-127354] [transport.py] [_log()] kex follows: False
2025-12-31T12:06:30.063 [DEBUG] [Thread-127354] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:06:30.063 [DEBUG] [Thread-127354] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:06:30.063 [DEBUG] [Thread-127354] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:06:30.063 [DEBUG] [Thread-127354] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:06:30.063 [DEBUG] [Thread-127354] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:06:30.063 [DEBUG] [Thread-127354] [transport.py] [_log()] Compression: none
2025-12-31T12:06:30.063 [DEBUG] [Thread-127354] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:06:30.079 [DEBUG] [Thread-127354] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:06:30.079 [DEBUG] [Thread-127354] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:06:30.079 [DEBUG] [Thread-127354] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T12:06:30.079 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T12:06:30.079 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:06:30.080 [DEBUG] [Thread-127354] [transport.py] [_log()] userauth is OK
2025-12-31T12:06:30.080 [DEBUG] [Thread-127354] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:06:30.080 [DEBUG] [Thread-127354] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:06:30.080 [DEBUG] [Thread-127354] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T12:06:30.080 [DEBUG] [Thread-127354] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:06:30.095 [INFO] [Thread-127354] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:06:30.095 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:06:30.811 [DEBUG] [Thread-127354] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:06:30.811 [DEBUG] [Thread-127354] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:06:30.811 [DEBUG] [Thread-127354] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T12:06:30.852 [DEBUG] [Thread-127354] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:06:30.852 [DEBUG] [Thread-127354] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:06:30.855 [DEBUG] [Thread-127354] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:06:30.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:06:30.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T12:06:30.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T12:06:30.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T12:06:30.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:06:30.875 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T12:06:30.876 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:06:30.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:06:30.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T12:06:30.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.420629 -999.00  +25.70  38.55     13   -4.20 1 2 2 1 1   888    0 29.56 -6.09 ----- 31.5 38.5 269.8 44.1 32.5 -23.3 31.9 -23.0 31.1 -22.1 31.8 -21.6
2025-12-31T12:06:30.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T12:06:30.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T12:06:30.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.420629
2025-12-31T12:06:30.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T12:06:30.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T12:06:30.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T12:06:30.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T12:06:30.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T12:06:30.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T12:06:08', tmtdew=35.95, humidity=8.77, cloud=0.0, wind=24.56, temperature=26.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T10:05:42.346', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T12:06:30.877 [DEBUG] [Thread-127354] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:06:30.951 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T12:06:30.962 [DEBUG] [Thread-127357] [transport.py] [_log()] starting thread (client mode): 0xb6bb1600
2025-12-31T12:06:30.962 [DEBUG] [Thread-127357] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:06:30.976 [DEBUG] [Thread-127357] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T12:06:30.976 [INFO] [Thread-127357] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T12:06:30.984 [DEBUG] [Thread-127357] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:06:30.984 [DEBUG] [Thread-127357] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T12:06:30.984 [DEBUG] [Thread-127357] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:06:30.984 [DEBUG] [Thread-127357] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:06:30.984 [DEBUG] [Thread-127357] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:06:30.984 [DEBUG] [Thread-127357] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:06:30.984 [DEBUG] [Thread-127357] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:06:30.984 [DEBUG] [Thread-127357] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:06:30.984 [DEBUG] [Thread-127357] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:06:30.984 [DEBUG] [Thread-127357] [transport.py] [_log()] client lang: <none>
2025-12-31T12:06:30.984 [DEBUG] [Thread-127357] [transport.py] [_log()] server lang: <none>
2025-12-31T12:06:30.984 [DEBUG] [Thread-127357] [transport.py] [_log()] kex follows: False
2025-12-31T12:06:30.984 [DEBUG] [Thread-127357] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:06:30.984 [DEBUG] [Thread-127357] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:06:30.984 [DEBUG] [Thread-127357] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:06:30.985 [DEBUG] [Thread-127357] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:06:30.985 [DEBUG] [Thread-127357] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:06:30.985 [DEBUG] [Thread-127357] [transport.py] [_log()] Compression: none
2025-12-31T12:06:30.985 [DEBUG] [Thread-127357] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:06:31.039 [DEBUG] [Thread-127357] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:06:31.039 [DEBUG] [Thread-127357] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:06:31.040 [DEBUG] [Thread-127357] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T12:06:31.040 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T12:06:31.040 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:06:31.097 [DEBUG] [Thread-127357] [transport.py] [_log()] userauth is OK
2025-12-31T12:06:31.097 [DEBUG] [Thread-127357] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:06:31.097 [DEBUG] [Thread-127357] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:06:31.097 [DEBUG] [Thread-127357] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T12:06:31.097 [DEBUG] [Thread-127357] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:06:31.115 [INFO] [Thread-127357] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:06:31.115 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T12:06:31.115 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:06:31.956 [DEBUG] [Thread-127357] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:06:31.956 [DEBUG] [Thread-127357] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:06:32.004 [DEBUG] [Thread-127357] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:06:32.004 [DEBUG] [Thread-127357] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:06:32.013 [DEBUG] [Thread-127357] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:06:32.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:06:32.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T12:06:32.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-12-31T12:06:32.039 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:06:32.039 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:06:32.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:06:32.047 [DEBUG] [Thread-127357] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:06:37.960 [DEBUG] [Thread-127359 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:06:39.129 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:06:39.130 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:06:53.008 [DEBUG] [Thread-127360 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:07:02.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T12:07:02.063 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T12:07:02.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T12:07:02.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 12, 6, 40), 35.67, 8.79, 0.0, 27.07, 25.54, 0, 0, 0, 2, 0, 0),)
2025-12-31T12:07:02.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 12:06:40
2025-12-31T12:07:02.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T12:07:03.059 [DEBUG] [Thread-127361] [transport.py] [_log()] starting thread (client mode): 0xbbfcea70
2025-12-31T12:07:03.059 [DEBUG] [Thread-127361] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:07:03.079 [DEBUG] [Thread-127361] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T12:07:03.080 [INFO] [Thread-127361] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T12:07:03.083 [DEBUG] [Thread-127361] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:07:03.083 [DEBUG] [Thread-127361] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T12:07:03.083 [DEBUG] [Thread-127361] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:07:03.083 [DEBUG] [Thread-127361] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:07:03.083 [DEBUG] [Thread-127361] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:07:03.083 [DEBUG] [Thread-127361] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:07:03.083 [DEBUG] [Thread-127361] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:07:03.083 [DEBUG] [Thread-127361] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:07:03.083 [DEBUG] [Thread-127361] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:07:03.083 [DEBUG] [Thread-127361] [transport.py] [_log()] client lang: <none>
2025-12-31T12:07:03.083 [DEBUG] [Thread-127361] [transport.py] [_log()] server lang: <none>
2025-12-31T12:07:03.083 [DEBUG] [Thread-127361] [transport.py] [_log()] kex follows: False
2025-12-31T12:07:03.083 [DEBUG] [Thread-127361] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:07:03.083 [DEBUG] [Thread-127361] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:07:03.083 [DEBUG] [Thread-127361] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:07:03.083 [DEBUG] [Thread-127361] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:07:03.083 [DEBUG] [Thread-127361] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:07:03.083 [DEBUG] [Thread-127361] [transport.py] [_log()] Compression: none
2025-12-31T12:07:03.083 [DEBUG] [Thread-127361] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:07:03.100 [DEBUG] [Thread-127361] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:07:03.101 [DEBUG] [Thread-127361] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:07:03.101 [DEBUG] [Thread-127361] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T12:07:03.102 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T12:07:03.102 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:07:03.103 [DEBUG] [Thread-127361] [transport.py] [_log()] userauth is OK
2025-12-31T12:07:03.104 [DEBUG] [Thread-127361] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:07:03.104 [DEBUG] [Thread-127361] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:07:03.104 [DEBUG] [Thread-127361] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T12:07:03.104 [DEBUG] [Thread-127361] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:07:03.117 [INFO] [Thread-127361] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:07:03.118 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:07:03.764 [DEBUG] [Thread-127361] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:07:03.764 [DEBUG] [Thread-127361] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:07:03.765 [DEBUG] [Thread-127361] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T12:07:03.808 [DEBUG] [Thread-127361] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:07:03.808 [DEBUG] [Thread-127361] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:07:03.811 [DEBUG] [Thread-127361] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:07:03.823 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:07:03.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T12:07:03.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T12:07:03.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T12:07:03.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:07:03.837 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T12:07:03.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:07:03.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:07:03.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T12:07:03.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.420976 -999.00  +25.40  18.53     13   -4.30 1 2 1 1 1   888    0 28.94 -13.14 ----- 17.8 18.5 284.2 26.8 32.1 -24.1 31.8 -22.8 30.8 -20.8 31.4 -22.6
2025-12-31T12:07:03.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T12:07:03.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T12:07:03.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.420976
2025-12-31T12:07:03.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T12:07:03.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T12:07:03.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T12:07:03.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T12:07:03.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T12:07:03.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T12:06:40', tmtdew=35.67, humidity=8.79, cloud=0.0, wind=27.07, temperature=25.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T10:06:12.326', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T12:07:03.840 [DEBUG] [Thread-127361] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:07:03.930 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T12:07:03.943 [DEBUG] [Thread-127364] [transport.py] [_log()] starting thread (client mode): 0xbbfcc670
2025-12-31T12:07:03.943 [DEBUG] [Thread-127364] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:07:03.958 [DEBUG] [Thread-127364] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T12:07:03.958 [INFO] [Thread-127364] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T12:07:03.967 [DEBUG] [Thread-127364] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:07:03.967 [DEBUG] [Thread-127364] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T12:07:03.967 [DEBUG] [Thread-127364] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:07:03.968 [DEBUG] [Thread-127364] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:07:03.968 [DEBUG] [Thread-127364] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:07:03.968 [DEBUG] [Thread-127364] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:07:03.968 [DEBUG] [Thread-127364] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:07:03.968 [DEBUG] [Thread-127364] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:07:03.968 [DEBUG] [Thread-127364] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:07:03.968 [DEBUG] [Thread-127364] [transport.py] [_log()] client lang: <none>
2025-12-31T12:07:03.969 [DEBUG] [Thread-127364] [transport.py] [_log()] server lang: <none>
2025-12-31T12:07:03.969 [DEBUG] [Thread-127364] [transport.py] [_log()] kex follows: False
2025-12-31T12:07:03.969 [DEBUG] [Thread-127364] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:07:03.969 [DEBUG] [Thread-127364] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:07:03.969 [DEBUG] [Thread-127364] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:07:03.969 [DEBUG] [Thread-127364] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:07:03.969 [DEBUG] [Thread-127364] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:07:03.970 [DEBUG] [Thread-127364] [transport.py] [_log()] Compression: none
2025-12-31T12:07:03.970 [DEBUG] [Thread-127364] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:07:04.031 [DEBUG] [Thread-127364] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:07:04.032 [DEBUG] [Thread-127364] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:07:04.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T12:07:04.034 [DEBUG] [Thread-127364] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T12:07:04.034 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:07:04.093 [DEBUG] [Thread-127364] [transport.py] [_log()] userauth is OK
2025-12-31T12:07:04.094 [DEBUG] [Thread-127364] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:07:04.094 [DEBUG] [Thread-127364] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:07:04.094 [DEBUG] [Thread-127364] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T12:07:04.094 [DEBUG] [Thread-127364] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:07:04.116 [INFO] [Thread-127364] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:07:04.116 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T12:07:04.117 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:07:05.024 [DEBUG] [Thread-127364] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:07:05.025 [DEBUG] [Thread-127364] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:07:05.075 [DEBUG] [Thread-127364] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:07:05.076 [DEBUG] [Thread-127364] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:07:05.089 [DEBUG] [Thread-127364] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:07:05.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:07:05.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T12:07:05.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-12-31T12:07:05.128 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:07:05.129 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:07:05.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:07:05.141 [DEBUG] [Thread-127364] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:07:08.043 [DEBUG] [Thread-127366 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:07:11.128 [DEBUG] [Thread-127367 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:07:23.081 [DEBUG] [Thread-127368 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:07:35.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T12:07:35.159 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T12:07:35.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T12:07:35.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 12, 7, 13), 36.5, 8.36, 0.0, 28.2, 26.12, 0, 0, 0, 2, 0, 0),)
2025-12-31T12:07:35.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 12:07:13
2025-12-31T12:07:35.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T12:07:36.142 [DEBUG] [Thread-127369] [transport.py] [_log()] starting thread (client mode): 0xb6bb1ea0
2025-12-31T12:07:36.142 [DEBUG] [Thread-127369] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:07:36.164 [DEBUG] [Thread-127369] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T12:07:36.164 [INFO] [Thread-127369] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T12:07:36.167 [DEBUG] [Thread-127369] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:07:36.167 [DEBUG] [Thread-127369] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T12:07:36.167 [DEBUG] [Thread-127369] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:07:36.167 [DEBUG] [Thread-127369] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:07:36.167 [DEBUG] [Thread-127369] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:07:36.167 [DEBUG] [Thread-127369] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:07:36.167 [DEBUG] [Thread-127369] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:07:36.167 [DEBUG] [Thread-127369] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:07:36.167 [DEBUG] [Thread-127369] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:07:36.167 [DEBUG] [Thread-127369] [transport.py] [_log()] client lang: <none>
2025-12-31T12:07:36.167 [DEBUG] [Thread-127369] [transport.py] [_log()] server lang: <none>
2025-12-31T12:07:36.167 [DEBUG] [Thread-127369] [transport.py] [_log()] kex follows: False
2025-12-31T12:07:36.167 [DEBUG] [Thread-127369] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:07:36.168 [DEBUG] [Thread-127369] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:07:36.168 [DEBUG] [Thread-127369] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:07:36.168 [DEBUG] [Thread-127369] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:07:36.168 [DEBUG] [Thread-127369] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:07:36.168 [DEBUG] [Thread-127369] [transport.py] [_log()] Compression: none
2025-12-31T12:07:36.168 [DEBUG] [Thread-127369] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:07:36.176 [DEBUG] [Thread-127369] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:07:36.177 [DEBUG] [Thread-127369] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:07:36.177 [DEBUG] [Thread-127369] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T12:07:36.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T12:07:36.178 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:07:36.179 [DEBUG] [Thread-127369] [transport.py] [_log()] userauth is OK
2025-12-31T12:07:36.179 [DEBUG] [Thread-127369] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:07:36.179 [DEBUG] [Thread-127369] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:07:36.179 [DEBUG] [Thread-127369] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T12:07:36.179 [DEBUG] [Thread-127369] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:07:36.197 [INFO] [Thread-127369] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:07:36.198 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:07:36.951 [DEBUG] [Thread-127369] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:07:36.951 [DEBUG] [Thread-127369] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:07:36.952 [DEBUG] [Thread-127369] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T12:07:36.992 [DEBUG] [Thread-127369] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:07:36.992 [DEBUG] [Thread-127369] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:07:36.996 [DEBUG] [Thread-127369] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:07:37.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:07:37.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T12:07:37.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T12:07:37.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T12:07:37.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:07:37.020 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T12:07:37.020 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:07:37.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:07:37.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T12:07:37.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.421324 -999.00  +25.20  21.80     13   -4.40 1 1 1 1 1   888    0 29.33 -21.65 ----- 23.6 21.8 273.2 29.6 32.0 -25.4 31.7 -22.8 30.5 -23.8 31.3 -22.7
2025-12-31T12:07:37.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T12:07:37.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T12:07:37.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.421324
2025-12-31T12:07:37.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T12:07:37.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T12:07:37.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T12:07:37.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T12:07:37.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T12:07:37.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T12:07:13', tmtdew=36.5, humidity=8.36, cloud=0.0, wind=28.2, temperature=26.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T10:06:42.394', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T12:07:37.023 [DEBUG] [Thread-127369] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:07:37.107 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T12:07:37.118 [DEBUG] [Thread-127372] [transport.py] [_log()] starting thread (client mode): 0xbbfcd7b0
2025-12-31T12:07:37.118 [DEBUG] [Thread-127372] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:07:37.132 [DEBUG] [Thread-127372] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T12:07:37.133 [INFO] [Thread-127372] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T12:07:37.140 [DEBUG] [Thread-127372] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:07:37.140 [DEBUG] [Thread-127372] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T12:07:37.140 [DEBUG] [Thread-127372] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:07:37.141 [DEBUG] [Thread-127372] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:07:37.141 [DEBUG] [Thread-127372] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:07:37.141 [DEBUG] [Thread-127372] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:07:37.141 [DEBUG] [Thread-127372] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:07:37.141 [DEBUG] [Thread-127372] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:07:37.141 [DEBUG] [Thread-127372] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:07:37.141 [DEBUG] [Thread-127372] [transport.py] [_log()] client lang: <none>
2025-12-31T12:07:37.141 [DEBUG] [Thread-127372] [transport.py] [_log()] server lang: <none>
2025-12-31T12:07:37.141 [DEBUG] [Thread-127372] [transport.py] [_log()] kex follows: False
2025-12-31T12:07:37.141 [DEBUG] [Thread-127372] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:07:37.141 [DEBUG] [Thread-127372] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:07:37.141 [DEBUG] [Thread-127372] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:07:37.141 [DEBUG] [Thread-127372] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:07:37.141 [DEBUG] [Thread-127372] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:07:37.142 [DEBUG] [Thread-127372] [transport.py] [_log()] Compression: none
2025-12-31T12:07:37.142 [DEBUG] [Thread-127372] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:07:37.201 [DEBUG] [Thread-127372] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:07:37.202 [DEBUG] [Thread-127372] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:07:37.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T12:07:37.203 [DEBUG] [Thread-127372] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T12:07:37.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:07:37.257 [DEBUG] [Thread-127372] [transport.py] [_log()] userauth is OK
2025-12-31T12:07:37.258 [DEBUG] [Thread-127372] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:07:37.258 [DEBUG] [Thread-127372] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:07:37.258 [DEBUG] [Thread-127372] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T12:07:37.258 [DEBUG] [Thread-127372] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:07:37.280 [INFO] [Thread-127372] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:07:37.280 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T12:07:37.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:07:38.080 [DEBUG] [Thread-127372] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:07:38.080 [DEBUG] [Thread-127372] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:07:38.118 [DEBUG] [Thread-127374 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:07:38.128 [DEBUG] [Thread-127372] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:07:38.129 [DEBUG] [Thread-127372] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:07:38.137 [DEBUG] [Thread-127372] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:07:38.146 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:07:38.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T12:07:38.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T12:07:38.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:07:38.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:07:38.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:07:38.172 [DEBUG] [Thread-127372] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:07:39.270 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:07:39.271 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:07:53.167 [DEBUG] [Thread-127375 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:08:08.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T12:08:08.182 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T12:08:08.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T12:08:08.204 [DEBUG] [Thread-127376 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:08:08.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 12, 7, 45), 36.23, 8.29, 0.0, 22.85, 25.77, 0, 0, 0, 2, 0, 0),)
2025-12-31T12:08:08.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 12:07:45
2025-12-31T12:08:09.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T12:08:09.160 [DEBUG] [Thread-127377] [transport.py] [_log()] starting thread (client mode): 0xbbfce170
2025-12-31T12:08:09.161 [DEBUG] [Thread-127377] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:08:09.180 [DEBUG] [Thread-127377] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T12:08:09.180 [INFO] [Thread-127377] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T12:08:09.183 [DEBUG] [Thread-127377] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:08:09.184 [DEBUG] [Thread-127377] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T12:08:09.184 [DEBUG] [Thread-127377] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:08:09.184 [DEBUG] [Thread-127377] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:08:09.184 [DEBUG] [Thread-127377] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:08:09.184 [DEBUG] [Thread-127377] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:08:09.184 [DEBUG] [Thread-127377] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:08:09.184 [DEBUG] [Thread-127377] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:08:09.184 [DEBUG] [Thread-127377] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:08:09.184 [DEBUG] [Thread-127377] [transport.py] [_log()] client lang: <none>
2025-12-31T12:08:09.184 [DEBUG] [Thread-127377] [transport.py] [_log()] server lang: <none>
2025-12-31T12:08:09.184 [DEBUG] [Thread-127377] [transport.py] [_log()] kex follows: False
2025-12-31T12:08:09.184 [DEBUG] [Thread-127377] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:08:09.184 [DEBUG] [Thread-127377] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:08:09.184 [DEBUG] [Thread-127377] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:08:09.185 [DEBUG] [Thread-127377] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:08:09.185 [DEBUG] [Thread-127377] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:08:09.185 [DEBUG] [Thread-127377] [transport.py] [_log()] Compression: none
2025-12-31T12:08:09.185 [DEBUG] [Thread-127377] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:08:09.205 [DEBUG] [Thread-127377] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:08:09.206 [DEBUG] [Thread-127377] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:08:09.206 [DEBUG] [Thread-127377] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T12:08:09.207 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T12:08:09.207 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:08:09.208 [DEBUG] [Thread-127377] [transport.py] [_log()] userauth is OK
2025-12-31T12:08:09.208 [DEBUG] [Thread-127377] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:08:09.209 [DEBUG] [Thread-127377] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:08:09.209 [DEBUG] [Thread-127377] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T12:08:09.209 [DEBUG] [Thread-127377] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:08:09.243 [INFO] [Thread-127377] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:08:09.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:08:09.875 [DEBUG] [Thread-127377] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:08:09.875 [DEBUG] [Thread-127377] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:08:09.875 [DEBUG] [Thread-127377] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T12:08:09.916 [DEBUG] [Thread-127377] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:08:09.916 [DEBUG] [Thread-127377] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:08:09.920 [DEBUG] [Thread-127377] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:08:09.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:08:09.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T12:08:09.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T12:08:09.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T12:08:09.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:08:09.943 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T12:08:09.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:08:09.943 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:08:09.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T12:08:09.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.421671 -999.00  +25.40  20.69     13   -4.10 1 1 1 1 1   888    0 28.88 -28.08 ----- 18.4 20.7 270.6 24.4 32.0 -23.4 31.6 -22.8 30.4 -24.9 31.3 -21.9
2025-12-31T12:08:09.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T12:08:09.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T12:08:09.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.421671
2025-12-31T12:08:09.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T12:08:09.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T12:08:09.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T12:08:09.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T12:08:09.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T12:08:09.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T12:07:45', tmtdew=36.23, humidity=8.29, cloud=0.0, wind=22.85, temperature=25.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T10:07:12.374', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T12:08:09.945 [DEBUG] [Thread-127377] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:08:10.019 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T12:08:10.031 [DEBUG] [Thread-127380] [transport.py] [_log()] starting thread (client mode): 0xb95466e0
2025-12-31T12:08:10.031 [DEBUG] [Thread-127380] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:08:10.046 [DEBUG] [Thread-127380] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T12:08:10.046 [INFO] [Thread-127380] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T12:08:10.054 [DEBUG] [Thread-127380] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:08:10.054 [DEBUG] [Thread-127380] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T12:08:10.054 [DEBUG] [Thread-127380] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:08:10.054 [DEBUG] [Thread-127380] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:08:10.054 [DEBUG] [Thread-127380] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:08:10.054 [DEBUG] [Thread-127380] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:08:10.054 [DEBUG] [Thread-127380] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:08:10.054 [DEBUG] [Thread-127380] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:08:10.054 [DEBUG] [Thread-127380] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:08:10.054 [DEBUG] [Thread-127380] [transport.py] [_log()] client lang: <none>
2025-12-31T12:08:10.054 [DEBUG] [Thread-127380] [transport.py] [_log()] server lang: <none>
2025-12-31T12:08:10.054 [DEBUG] [Thread-127380] [transport.py] [_log()] kex follows: False
2025-12-31T12:08:10.054 [DEBUG] [Thread-127380] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:08:10.054 [DEBUG] [Thread-127380] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:08:10.055 [DEBUG] [Thread-127380] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:08:10.055 [DEBUG] [Thread-127380] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:08:10.055 [DEBUG] [Thread-127380] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:08:10.055 [DEBUG] [Thread-127380] [transport.py] [_log()] Compression: none
2025-12-31T12:08:10.055 [DEBUG] [Thread-127380] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:08:10.113 [DEBUG] [Thread-127380] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:08:10.114 [DEBUG] [Thread-127380] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:08:10.114 [DEBUG] [Thread-127380] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T12:08:10.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T12:08:10.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:08:10.170 [DEBUG] [Thread-127380] [transport.py] [_log()] userauth is OK
2025-12-31T12:08:10.171 [DEBUG] [Thread-127380] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:08:10.171 [DEBUG] [Thread-127380] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:08:10.171 [DEBUG] [Thread-127380] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T12:08:10.171 [DEBUG] [Thread-127380] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:08:10.189 [INFO] [Thread-127380] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:08:10.189 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T12:08:10.190 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:08:11.011 [DEBUG] [Thread-127380] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:08:11.011 [DEBUG] [Thread-127380] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:08:11.059 [DEBUG] [Thread-127380] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:08:11.059 [DEBUG] [Thread-127380] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:08:11.069 [DEBUG] [Thread-127380] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:08:11.078 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:08:11.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T12:08:11.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T12:08:11.097 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:08:11.097 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:08:11.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:08:11.106 [DEBUG] [Thread-127380] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:08:11.162 [DEBUG] [Thread-127382 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:08:23.236 [DEBUG] [Thread-127383 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:08:38.293 [DEBUG] [Thread-127384 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:08:39.411 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:08:39.412 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:08:41.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T12:08:41.109 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T12:08:41.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T12:08:41.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 12, 8, 17), 35.89, 8.46, 0.0, 18.3, 25.52, 0, 0, 0, 2, 0, 0),)
2025-12-31T12:08:41.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 12:08:17
2025-12-31T12:08:41.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T12:08:42.086 [DEBUG] [Thread-127385] [transport.py] [_log()] starting thread (client mode): 0xb6bb1540
2025-12-31T12:08:42.086 [DEBUG] [Thread-127385] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:08:42.106 [DEBUG] [Thread-127385] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T12:08:42.106 [INFO] [Thread-127385] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T12:08:42.109 [DEBUG] [Thread-127385] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:08:42.110 [DEBUG] [Thread-127385] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T12:08:42.110 [DEBUG] [Thread-127385] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:08:42.110 [DEBUG] [Thread-127385] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:08:42.110 [DEBUG] [Thread-127385] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:08:42.110 [DEBUG] [Thread-127385] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:08:42.110 [DEBUG] [Thread-127385] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:08:42.110 [DEBUG] [Thread-127385] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:08:42.110 [DEBUG] [Thread-127385] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:08:42.110 [DEBUG] [Thread-127385] [transport.py] [_log()] client lang: <none>
2025-12-31T12:08:42.110 [DEBUG] [Thread-127385] [transport.py] [_log()] server lang: <none>
2025-12-31T12:08:42.110 [DEBUG] [Thread-127385] [transport.py] [_log()] kex follows: False
2025-12-31T12:08:42.110 [DEBUG] [Thread-127385] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:08:42.110 [DEBUG] [Thread-127385] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:08:42.110 [DEBUG] [Thread-127385] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:08:42.110 [DEBUG] [Thread-127385] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:08:42.110 [DEBUG] [Thread-127385] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:08:42.110 [DEBUG] [Thread-127385] [transport.py] [_log()] Compression: none
2025-12-31T12:08:42.110 [DEBUG] [Thread-127385] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:08:42.129 [DEBUG] [Thread-127385] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:08:42.130 [DEBUG] [Thread-127385] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:08:42.130 [DEBUG] [Thread-127385] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T12:08:42.130 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T12:08:42.131 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:08:42.132 [DEBUG] [Thread-127385] [transport.py] [_log()] userauth is OK
2025-12-31T12:08:42.132 [DEBUG] [Thread-127385] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:08:42.133 [DEBUG] [Thread-127385] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:08:42.133 [DEBUG] [Thread-127385] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T12:08:42.133 [DEBUG] [Thread-127385] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:08:42.157 [INFO] [Thread-127385] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:08:42.158 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:08:42.919 [DEBUG] [Thread-127385] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:08:42.919 [DEBUG] [Thread-127385] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:08:42.920 [DEBUG] [Thread-127385] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T12:08:42.960 [DEBUG] [Thread-127385] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:08:42.961 [DEBUG] [Thread-127385] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:08:42.965 [DEBUG] [Thread-127385] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:08:42.973 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:08:42.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T12:08:42.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T12:08:42.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T12:08:42.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:08:42.984 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T12:08:42.984 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:08:42.984 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:08:42.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T12:08:42.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.422365 -999.00  +24.80  25.11     14   -4.00 1 1 1 1 1   888    0 28.52 -45.03 ----- 25.1 25.1 300.6 28.6 32.0 -23.3 31.5 -22.8 30.3 -24.1 31.2 -21.4
2025-12-31T12:08:42.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T12:08:42.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T12:08:42.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.422365
2025-12-31T12:08:42.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T12:08:42.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T12:08:42.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T12:08:42.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T12:08:42.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T12:08:42.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T12:08:17', tmtdew=35.89, humidity=8.46, cloud=0.0, wind=18.3, temperature=25.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T10:08:12.336', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T12:08:42.987 [DEBUG] [Thread-127385] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:08:43.069 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T12:08:43.081 [DEBUG] [Thread-127388] [transport.py] [_log()] starting thread (client mode): 0xb6b20af0
2025-12-31T12:08:43.081 [DEBUG] [Thread-127388] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:08:43.096 [DEBUG] [Thread-127388] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T12:08:43.096 [INFO] [Thread-127388] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T12:08:43.104 [DEBUG] [Thread-127388] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:08:43.105 [DEBUG] [Thread-127388] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T12:08:43.105 [DEBUG] [Thread-127388] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:08:43.105 [DEBUG] [Thread-127388] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:08:43.105 [DEBUG] [Thread-127388] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:08:43.105 [DEBUG] [Thread-127388] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:08:43.105 [DEBUG] [Thread-127388] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:08:43.106 [DEBUG] [Thread-127388] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:08:43.106 [DEBUG] [Thread-127388] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:08:43.106 [DEBUG] [Thread-127388] [transport.py] [_log()] client lang: <none>
2025-12-31T12:08:43.106 [DEBUG] [Thread-127388] [transport.py] [_log()] server lang: <none>
2025-12-31T12:08:43.106 [DEBUG] [Thread-127388] [transport.py] [_log()] kex follows: False
2025-12-31T12:08:43.106 [DEBUG] [Thread-127388] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:08:43.106 [DEBUG] [Thread-127388] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:08:43.106 [DEBUG] [Thread-127388] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:08:43.106 [DEBUG] [Thread-127388] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:08:43.106 [DEBUG] [Thread-127388] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:08:43.106 [DEBUG] [Thread-127388] [transport.py] [_log()] Compression: none
2025-12-31T12:08:43.106 [DEBUG] [Thread-127388] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:08:43.161 [DEBUG] [Thread-127388] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:08:43.161 [DEBUG] [Thread-127388] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:08:43.162 [DEBUG] [Thread-127388] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T12:08:43.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T12:08:43.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:08:43.218 [DEBUG] [Thread-127388] [transport.py] [_log()] userauth is OK
2025-12-31T12:08:43.219 [DEBUG] [Thread-127388] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:08:43.219 [DEBUG] [Thread-127388] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:08:43.219 [DEBUG] [Thread-127388] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T12:08:43.219 [DEBUG] [Thread-127388] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:08:43.238 [INFO] [Thread-127388] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:08:43.239 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T12:08:43.239 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:08:44.038 [DEBUG] [Thread-127388] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:08:44.038 [DEBUG] [Thread-127388] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:08:44.086 [DEBUG] [Thread-127388] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:08:44.086 [DEBUG] [Thread-127388] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:08:44.096 [DEBUG] [Thread-127388] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:08:44.106 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:08:44.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T12:08:44.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T12:08:44.124 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:08:44.124 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:08:44.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:08:44.133 [DEBUG] [Thread-127388] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:08:53.327 [DEBUG] [Thread-127390 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:09:08.377 [DEBUG] [Thread-127391 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:09:11.214 [DEBUG] [Thread-127392 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:09:14.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T12:09:14.156 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T12:09:14.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T12:09:14.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 12, 8, 49), 35.64, 8.65, 0.0, 25.18, 25.79, 0, 0, 0, 2, 0, 0),)
2025-12-31T12:09:14.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 12:08:49
2025-12-31T12:09:15.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T12:09:15.155 [DEBUG] [Thread-127393] [transport.py] [_log()] starting thread (client mode): 0xb9546d70
2025-12-31T12:09:15.155 [DEBUG] [Thread-127393] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:09:15.183 [DEBUG] [Thread-127393] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T12:09:15.183 [INFO] [Thread-127393] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T12:09:15.185 [DEBUG] [Thread-127393] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:09:15.185 [DEBUG] [Thread-127393] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T12:09:15.185 [DEBUG] [Thread-127393] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:09:15.185 [DEBUG] [Thread-127393] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:09:15.185 [DEBUG] [Thread-127393] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:09:15.185 [DEBUG] [Thread-127393] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:09:15.185 [DEBUG] [Thread-127393] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:09:15.185 [DEBUG] [Thread-127393] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:09:15.185 [DEBUG] [Thread-127393] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:09:15.185 [DEBUG] [Thread-127393] [transport.py] [_log()] client lang: <none>
2025-12-31T12:09:15.185 [DEBUG] [Thread-127393] [transport.py] [_log()] server lang: <none>
2025-12-31T12:09:15.185 [DEBUG] [Thread-127393] [transport.py] [_log()] kex follows: False
2025-12-31T12:09:15.185 [DEBUG] [Thread-127393] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:09:15.185 [DEBUG] [Thread-127393] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:09:15.186 [DEBUG] [Thread-127393] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:09:15.186 [DEBUG] [Thread-127393] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:09:15.186 [DEBUG] [Thread-127393] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:09:15.186 [DEBUG] [Thread-127393] [transport.py] [_log()] Compression: none
2025-12-31T12:09:15.186 [DEBUG] [Thread-127393] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:09:15.204 [DEBUG] [Thread-127393] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:09:15.205 [DEBUG] [Thread-127393] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:09:15.205 [DEBUG] [Thread-127393] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T12:09:15.206 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T12:09:15.206 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:09:15.207 [DEBUG] [Thread-127393] [transport.py] [_log()] userauth is OK
2025-12-31T12:09:15.208 [DEBUG] [Thread-127393] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:09:15.208 [DEBUG] [Thread-127393] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:09:15.208 [DEBUG] [Thread-127393] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T12:09:15.208 [DEBUG] [Thread-127393] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:09:15.231 [INFO] [Thread-127393] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:09:15.231 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:09:15.870 [DEBUG] [Thread-127393] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:09:15.871 [DEBUG] [Thread-127393] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:09:15.871 [DEBUG] [Thread-127393] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T12:09:15.911 [DEBUG] [Thread-127393] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:09:15.912 [DEBUG] [Thread-127393] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:09:15.914 [DEBUG] [Thread-127393] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:09:15.926 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:09:15.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T12:09:15.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T12:09:15.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T12:09:15.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:09:15.933 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T12:09:15.933 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:09:15.933 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:09:15.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T12:09:15.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.422712 -999.00  +25.20  18.55     13   -4.40 1 2 1 1 1   888    0 28.68 -51.63 ----- 18.8 18.6 290.6 29.3 32.0 -24.6 31.6 -21.9 30.4 -22.9 31.2 -22.1
2025-12-31T12:09:15.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T12:09:15.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T12:09:15.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.422712
2025-12-31T12:09:15.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T12:09:15.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T12:09:15.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T12:09:15.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T12:09:15.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T12:09:15.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T12:08:49', tmtdew=35.64, humidity=8.65, cloud=0.0, wind=25.18, temperature=25.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T10:08:42.317', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T12:09:15.935 [DEBUG] [Thread-127393] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:09:16.019 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T12:09:16.033 [DEBUG] [Thread-127396] [transport.py] [_log()] starting thread (client mode): 0xb95b0280
2025-12-31T12:09:16.033 [DEBUG] [Thread-127396] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:09:16.048 [DEBUG] [Thread-127396] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T12:09:16.048 [INFO] [Thread-127396] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T12:09:16.056 [DEBUG] [Thread-127396] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:09:16.057 [DEBUG] [Thread-127396] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T12:09:16.057 [DEBUG] [Thread-127396] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:09:16.057 [DEBUG] [Thread-127396] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:09:16.057 [DEBUG] [Thread-127396] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:09:16.058 [DEBUG] [Thread-127396] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:09:16.058 [DEBUG] [Thread-127396] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:09:16.058 [DEBUG] [Thread-127396] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:09:16.058 [DEBUG] [Thread-127396] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:09:16.058 [DEBUG] [Thread-127396] [transport.py] [_log()] client lang: <none>
2025-12-31T12:09:16.058 [DEBUG] [Thread-127396] [transport.py] [_log()] server lang: <none>
2025-12-31T12:09:16.058 [DEBUG] [Thread-127396] [transport.py] [_log()] kex follows: False
2025-12-31T12:09:16.058 [DEBUG] [Thread-127396] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:09:16.058 [DEBUG] [Thread-127396] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:09:16.058 [DEBUG] [Thread-127396] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:09:16.058 [DEBUG] [Thread-127396] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:09:16.058 [DEBUG] [Thread-127396] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:09:16.058 [DEBUG] [Thread-127396] [transport.py] [_log()] Compression: none
2025-12-31T12:09:16.058 [DEBUG] [Thread-127396] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:09:16.116 [DEBUG] [Thread-127396] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:09:16.116 [DEBUG] [Thread-127396] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:09:16.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T12:09:16.118 [DEBUG] [Thread-127396] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T12:09:16.118 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:09:16.181 [DEBUG] [Thread-127396] [transport.py] [_log()] userauth is OK
2025-12-31T12:09:16.182 [DEBUG] [Thread-127396] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:09:16.182 [DEBUG] [Thread-127396] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:09:16.182 [DEBUG] [Thread-127396] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T12:09:16.182 [DEBUG] [Thread-127396] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:09:16.204 [INFO] [Thread-127396] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:09:16.205 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T12:09:16.205 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:09:17.007 [DEBUG] [Thread-127396] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:09:17.007 [DEBUG] [Thread-127396] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:09:17.055 [DEBUG] [Thread-127396] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:09:17.055 [DEBUG] [Thread-127396] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:09:17.065 [DEBUG] [Thread-127396] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:09:17.074 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:09:17.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T12:09:17.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-12-31T12:09:17.093 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:09:17.093 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:09:17.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:09:17.102 [DEBUG] [Thread-127396] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:09:23.409 [DEBUG] [Thread-127398 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:09:38.461 [DEBUG] [Thread-127399 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:09:39.554 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:09:39.554 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:09:47.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T12:09:47.124 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T12:09:47.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T12:09:47.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 12, 9, 21), 35.71, 8.6, 0.0, 25.2, 25.78, 0, 0, 0, 2, 0, 0),)
2025-12-31T12:09:47.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 12:09:21
2025-12-31T12:09:48.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T12:09:48.171 [DEBUG] [Thread-127400] [transport.py] [_log()] starting thread (client mode): 0xb9547b50
2025-12-31T12:09:48.172 [DEBUG] [Thread-127400] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:09:48.191 [DEBUG] [Thread-127400] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T12:09:48.191 [INFO] [Thread-127400] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T12:09:48.194 [DEBUG] [Thread-127400] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:09:48.194 [DEBUG] [Thread-127400] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T12:09:48.194 [DEBUG] [Thread-127400] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:09:48.194 [DEBUG] [Thread-127400] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:09:48.194 [DEBUG] [Thread-127400] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:09:48.194 [DEBUG] [Thread-127400] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:09:48.195 [DEBUG] [Thread-127400] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:09:48.195 [DEBUG] [Thread-127400] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:09:48.195 [DEBUG] [Thread-127400] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:09:48.195 [DEBUG] [Thread-127400] [transport.py] [_log()] client lang: <none>
2025-12-31T12:09:48.195 [DEBUG] [Thread-127400] [transport.py] [_log()] server lang: <none>
2025-12-31T12:09:48.195 [DEBUG] [Thread-127400] [transport.py] [_log()] kex follows: False
2025-12-31T12:09:48.195 [DEBUG] [Thread-127400] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:09:48.195 [DEBUG] [Thread-127400] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:09:48.195 [DEBUG] [Thread-127400] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:09:48.195 [DEBUG] [Thread-127400] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:09:48.195 [DEBUG] [Thread-127400] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:09:48.195 [DEBUG] [Thread-127400] [transport.py] [_log()] Compression: none
2025-12-31T12:09:48.195 [DEBUG] [Thread-127400] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:09:48.209 [DEBUG] [Thread-127400] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:09:48.209 [DEBUG] [Thread-127400] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:09:48.210 [DEBUG] [Thread-127400] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T12:09:48.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T12:09:48.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:09:48.252 [DEBUG] [Thread-127400] [transport.py] [_log()] userauth is OK
2025-12-31T12:09:48.252 [DEBUG] [Thread-127400] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:09:48.252 [DEBUG] [Thread-127400] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:09:48.252 [DEBUG] [Thread-127400] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T12:09:48.252 [DEBUG] [Thread-127400] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:09:48.280 [INFO] [Thread-127400] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:09:48.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:09:49.003 [DEBUG] [Thread-127400] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:09:49.003 [DEBUG] [Thread-127400] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:09:49.003 [DEBUG] [Thread-127400] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T12:09:49.043 [DEBUG] [Thread-127400] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:09:49.044 [DEBUG] [Thread-127400] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:09:49.046 [DEBUG] [Thread-127400] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:09:49.058 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:09:49.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T12:09:49.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T12:09:49.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T12:09:49.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:09:49.063 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T12:09:49.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:09:49.063 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:09:49.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T12:09:49.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.423060 -999.00  +25.70  17.23     13   -4.10 1 2 1 1 1   888    0 28.07 -60.60 ----- 18.1 17.2 277.8 29.5 31.9 -22.7 31.5 -22.3 30.3 -22.4 31.2 -21.2
2025-12-31T12:09:49.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T12:09:49.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T12:09:49.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.423060
2025-12-31T12:09:49.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T12:09:49.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T12:09:49.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T12:09:49.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T12:09:49.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T12:09:49.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T12:09:21', tmtdew=35.71, humidity=8.6, cloud=0.0, wind=25.2, temperature=25.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T10:09:12.384', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T12:09:49.064 [DEBUG] [Thread-127400] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:09:49.144 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T12:09:49.157 [DEBUG] [Thread-127403] [transport.py] [_log()] starting thread (client mode): 0xb95b3460
2025-12-31T12:09:49.157 [DEBUG] [Thread-127403] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:09:49.172 [DEBUG] [Thread-127403] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T12:09:49.172 [INFO] [Thread-127403] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T12:09:49.179 [DEBUG] [Thread-127403] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:09:49.180 [DEBUG] [Thread-127403] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T12:09:49.180 [DEBUG] [Thread-127403] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:09:49.180 [DEBUG] [Thread-127403] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:09:49.180 [DEBUG] [Thread-127403] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:09:49.180 [DEBUG] [Thread-127403] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:09:49.180 [DEBUG] [Thread-127403] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:09:49.180 [DEBUG] [Thread-127403] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:09:49.180 [DEBUG] [Thread-127403] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:09:49.180 [DEBUG] [Thread-127403] [transport.py] [_log()] client lang: <none>
2025-12-31T12:09:49.180 [DEBUG] [Thread-127403] [transport.py] [_log()] server lang: <none>
2025-12-31T12:09:49.180 [DEBUG] [Thread-127403] [transport.py] [_log()] kex follows: False
2025-12-31T12:09:49.180 [DEBUG] [Thread-127403] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:09:49.180 [DEBUG] [Thread-127403] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:09:49.180 [DEBUG] [Thread-127403] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:09:49.180 [DEBUG] [Thread-127403] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:09:49.180 [DEBUG] [Thread-127403] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:09:49.180 [DEBUG] [Thread-127403] [transport.py] [_log()] Compression: none
2025-12-31T12:09:49.180 [DEBUG] [Thread-127403] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:09:49.242 [DEBUG] [Thread-127403] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:09:49.242 [DEBUG] [Thread-127403] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:09:49.242 [DEBUG] [Thread-127403] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T12:09:49.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T12:09:49.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:09:49.298 [DEBUG] [Thread-127403] [transport.py] [_log()] userauth is OK
2025-12-31T12:09:49.298 [DEBUG] [Thread-127403] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:09:49.298 [DEBUG] [Thread-127403] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:09:49.298 [DEBUG] [Thread-127403] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T12:09:49.298 [DEBUG] [Thread-127403] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:09:49.313 [INFO] [Thread-127403] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:09:49.313 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T12:09:49.313 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:09:50.160 [DEBUG] [Thread-127403] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:09:50.160 [DEBUG] [Thread-127403] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:09:50.208 [DEBUG] [Thread-127403] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:09:50.208 [DEBUG] [Thread-127403] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:09:50.217 [DEBUG] [Thread-127403] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:09:50.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:09:50.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T12:09:50.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T12:09:50.246 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:09:50.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:09:50.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:09:50.255 [DEBUG] [Thread-127403] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:09:53.498 [DEBUG] [Thread-127405 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:10:08.542 [DEBUG] [Thread-127406 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:10:11.273 [DEBUG] [Thread-127407 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:10:20.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T12:10:20.277 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T12:10:20.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T12:10:20.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 12, 9, 53), 35.75, 8.6, 0.0, 22.67, 25.48, 0, 0, 0, 2, 0, 0),)
2025-12-31T12:10:20.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 12:09:53
2025-12-31T12:10:21.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T12:10:21.266 [DEBUG] [Thread-127408] [transport.py] [_log()] starting thread (client mode): 0xbbfcf880
2025-12-31T12:10:21.266 [DEBUG] [Thread-127408] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:10:21.287 [DEBUG] [Thread-127408] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T12:10:21.288 [INFO] [Thread-127408] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T12:10:21.291 [DEBUG] [Thread-127408] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:10:21.291 [DEBUG] [Thread-127408] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T12:10:21.291 [DEBUG] [Thread-127408] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:10:21.291 [DEBUG] [Thread-127408] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:10:21.291 [DEBUG] [Thread-127408] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:10:21.291 [DEBUG] [Thread-127408] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:10:21.291 [DEBUG] [Thread-127408] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:10:21.291 [DEBUG] [Thread-127408] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:10:21.291 [DEBUG] [Thread-127408] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:10:21.291 [DEBUG] [Thread-127408] [transport.py] [_log()] client lang: <none>
2025-12-31T12:10:21.291 [DEBUG] [Thread-127408] [transport.py] [_log()] server lang: <none>
2025-12-31T12:10:21.291 [DEBUG] [Thread-127408] [transport.py] [_log()] kex follows: False
2025-12-31T12:10:21.291 [DEBUG] [Thread-127408] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:10:21.291 [DEBUG] [Thread-127408] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:10:21.291 [DEBUG] [Thread-127408] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:10:21.291 [DEBUG] [Thread-127408] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:10:21.291 [DEBUG] [Thread-127408] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:10:21.291 [DEBUG] [Thread-127408] [transport.py] [_log()] Compression: none
2025-12-31T12:10:21.291 [DEBUG] [Thread-127408] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:10:21.308 [DEBUG] [Thread-127408] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:10:21.309 [DEBUG] [Thread-127408] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:10:21.309 [DEBUG] [Thread-127408] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T12:10:21.310 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T12:10:21.310 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:10:21.311 [DEBUG] [Thread-127408] [transport.py] [_log()] userauth is OK
2025-12-31T12:10:21.311 [DEBUG] [Thread-127408] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:10:21.312 [DEBUG] [Thread-127408] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:10:21.312 [DEBUG] [Thread-127408] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T12:10:21.312 [DEBUG] [Thread-127408] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:10:21.336 [INFO] [Thread-127408] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:10:21.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:10:23.578 [DEBUG] [Thread-127410 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:10:31.628 [DEBUG] [Thread-127408] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:10:31.628 [DEBUG] [Thread-127408] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:10:31.629 [DEBUG] [Thread-127408] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T12:10:31.669 [DEBUG] [Thread-127408] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:10:31.669 [DEBUG] [Thread-127408] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:10:31.673 [DEBUG] [Thread-127408] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:10:31.684 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:10:31.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T12:10:31.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T12:10:31.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T12:10:31.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:10:31.696 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T12:10:31.697 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:10:31.697 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:10:31.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T12:10:31.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.423407 -999.00  +25.70  17.58     13   -4.00 1 2 1 1 1   888    0 28.13 -63.22 ----- 18.9 17.6 300.9 23.0 32.4 -22.0 31.8 -20.5 30.9 -19.6 31.5 -21.1
2025-12-31T12:10:31.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T12:10:31.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T12:10:31.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.423407
2025-12-31T12:10:31.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T12:10:31.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T12:10:31.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T12:10:31.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T12:10:31.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T12:10:31.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T12:09:53', tmtdew=35.75, humidity=8.6, cloud=0.0, wind=22.67, temperature=25.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T10:09:42.365', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T12:10:31.699 [DEBUG] [Thread-127408] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:10:31.793 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T12:10:31.805 [DEBUG] [Thread-127412] [transport.py] [_log()] starting thread (client mode): 0xb6bb3100
2025-12-31T12:10:31.805 [DEBUG] [Thread-127412] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:10:31.821 [DEBUG] [Thread-127412] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T12:10:31.822 [INFO] [Thread-127412] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T12:10:31.830 [DEBUG] [Thread-127412] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:10:31.830 [DEBUG] [Thread-127412] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T12:10:31.831 [DEBUG] [Thread-127412] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:10:31.831 [DEBUG] [Thread-127412] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:10:31.831 [DEBUG] [Thread-127412] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:10:31.831 [DEBUG] [Thread-127412] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:10:31.831 [DEBUG] [Thread-127412] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:10:31.831 [DEBUG] [Thread-127412] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:10:31.831 [DEBUG] [Thread-127412] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:10:31.831 [DEBUG] [Thread-127412] [transport.py] [_log()] client lang: <none>
2025-12-31T12:10:31.831 [DEBUG] [Thread-127412] [transport.py] [_log()] server lang: <none>
2025-12-31T12:10:31.831 [DEBUG] [Thread-127412] [transport.py] [_log()] kex follows: False
2025-12-31T12:10:31.831 [DEBUG] [Thread-127412] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:10:31.831 [DEBUG] [Thread-127412] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:10:31.831 [DEBUG] [Thread-127412] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:10:31.831 [DEBUG] [Thread-127412] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:10:31.831 [DEBUG] [Thread-127412] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:10:31.832 [DEBUG] [Thread-127412] [transport.py] [_log()] Compression: none
2025-12-31T12:10:31.832 [DEBUG] [Thread-127412] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:10:31.888 [DEBUG] [Thread-127412] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:10:31.889 [DEBUG] [Thread-127412] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:10:31.890 [DEBUG] [Thread-127412] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T12:10:31.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T12:10:31.891 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:10:31.948 [DEBUG] [Thread-127412] [transport.py] [_log()] userauth is OK
2025-12-31T12:10:31.948 [DEBUG] [Thread-127412] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:10:31.948 [DEBUG] [Thread-127412] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:10:31.948 [DEBUG] [Thread-127412] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T12:10:31.949 [DEBUG] [Thread-127412] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:10:31.967 [INFO] [Thread-127412] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:10:31.968 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T12:10:31.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:10:32.810 [DEBUG] [Thread-127412] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:10:32.810 [DEBUG] [Thread-127412] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:10:32.858 [DEBUG] [Thread-127412] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:10:32.858 [DEBUG] [Thread-127412] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:10:32.868 [DEBUG] [Thread-127412] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:10:32.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:10: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')
2025-12-31T12:10:32.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T12:10:32.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:10:32.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:10:32.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:10:32.905 [DEBUG] [Thread-127412] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:10:38.611 [DEBUG] [Thread-127414 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:10:39.693 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:10:39.694 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:10:53.661 [DEBUG] [Thread-127415 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:11:02.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T12:11:02.927 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T12:11:02.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T12:11:03.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 12, 10, 57), 35.82, 8.72, 0.0, 10.04, 25.84, 0, 0, 0, 2, 0, 0),)
2025-12-31T12:11:03.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 12:10:57
2025-12-31T12:11:03.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T12:11:03.981 [DEBUG] [Thread-127416] [transport.py] [_log()] starting thread (client mode): 0xb6b4b5e0
2025-12-31T12:11:03.981 [DEBUG] [Thread-127416] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:11:04.002 [DEBUG] [Thread-127416] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T12:11:04.002 [INFO] [Thread-127416] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T12:11:04.005 [DEBUG] [Thread-127416] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:11:04.005 [DEBUG] [Thread-127416] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T12:11:04.005 [DEBUG] [Thread-127416] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:11:04.005 [DEBUG] [Thread-127416] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:11:04.005 [DEBUG] [Thread-127416] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:11:04.005 [DEBUG] [Thread-127416] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:11:04.005 [DEBUG] [Thread-127416] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:11:04.005 [DEBUG] [Thread-127416] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:11:04.005 [DEBUG] [Thread-127416] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:11:04.005 [DEBUG] [Thread-127416] [transport.py] [_log()] client lang: <none>
2025-12-31T12:11:04.005 [DEBUG] [Thread-127416] [transport.py] [_log()] server lang: <none>
2025-12-31T12:11:04.005 [DEBUG] [Thread-127416] [transport.py] [_log()] kex follows: False
2025-12-31T12:11:04.005 [DEBUG] [Thread-127416] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:11:04.005 [DEBUG] [Thread-127416] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:11:04.005 [DEBUG] [Thread-127416] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:11:04.005 [DEBUG] [Thread-127416] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:11:04.005 [DEBUG] [Thread-127416] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:11:04.005 [DEBUG] [Thread-127416] [transport.py] [_log()] Compression: none
2025-12-31T12:11:04.005 [DEBUG] [Thread-127416] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:11:04.026 [DEBUG] [Thread-127416] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:11:04.027 [DEBUG] [Thread-127416] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:11:04.027 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T12:11:04.027 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:11:04.027 [DEBUG] [Thread-127416] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T12:11:04.028 [DEBUG] [Thread-127416] [transport.py] [_log()] userauth is OK
2025-12-31T12:11:04.028 [DEBUG] [Thread-127416] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:11:04.028 [DEBUG] [Thread-127416] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:11:04.028 [DEBUG] [Thread-127416] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T12:11:04.028 [DEBUG] [Thread-127416] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:11:04.048 [INFO] [Thread-127416] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:11:04.048 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:11:04.686 [DEBUG] [Thread-127416] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:11:04.686 [DEBUG] [Thread-127416] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:11:04.686 [DEBUG] [Thread-127416] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T12:11:04.726 [DEBUG] [Thread-127416] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:11:04.727 [DEBUG] [Thread-127416] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:11:04.729 [DEBUG] [Thread-127416] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:11:04.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:11:04.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T12:11:04.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T12:11:04.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T12:11:04.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:11:04.748 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T12:11:04.748 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:11:04.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:11:04.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T12:11:04.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.423754 -999.00  +25.90  17.40     13   -3.70 1 2 1 1 1   888    0 28.18 -62.22 ----- 19.1 17.4 296.4 19.4 32.5 -21.9 31.9 -20.6 31.1 -19.5 31.7 -21.2
2025-12-31T12:11:04.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T12:11:04.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T12:11:04.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.423754
2025-12-31T12:11:04.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T12:11:04.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T12:11:04.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T12:11:04.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T12:11:04.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T12:11:04.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T12:10:57', tmtdew=35.82, humidity=8.72, cloud=0.0, wind=10.04, temperature=25.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T10:10:12.346', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T12:11:04.750 [DEBUG] [Thread-127416] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:11:04.834 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T12:11:04.846 [DEBUG] [Thread-127419] [transport.py] [_log()] starting thread (client mode): 0xb6b4abf0
2025-12-31T12:11:04.846 [DEBUG] [Thread-127419] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:11:04.862 [DEBUG] [Thread-127419] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T12:11:04.862 [INFO] [Thread-127419] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T12:11:04.869 [DEBUG] [Thread-127419] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:11:04.869 [DEBUG] [Thread-127419] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T12:11:04.869 [DEBUG] [Thread-127419] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:11:04.869 [DEBUG] [Thread-127419] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:11:04.869 [DEBUG] [Thread-127419] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:11:04.869 [DEBUG] [Thread-127419] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:11:04.869 [DEBUG] [Thread-127419] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:11:04.869 [DEBUG] [Thread-127419] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:11:04.869 [DEBUG] [Thread-127419] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:11:04.869 [DEBUG] [Thread-127419] [transport.py] [_log()] client lang: <none>
2025-12-31T12:11:04.869 [DEBUG] [Thread-127419] [transport.py] [_log()] server lang: <none>
2025-12-31T12:11:04.869 [DEBUG] [Thread-127419] [transport.py] [_log()] kex follows: False
2025-12-31T12:11:04.869 [DEBUG] [Thread-127419] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:11:04.869 [DEBUG] [Thread-127419] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:11:04.869 [DEBUG] [Thread-127419] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:11:04.869 [DEBUG] [Thread-127419] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:11:04.869 [DEBUG] [Thread-127419] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:11:04.869 [DEBUG] [Thread-127419] [transport.py] [_log()] Compression: none
2025-12-31T12:11:04.870 [DEBUG] [Thread-127419] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:11:04.931 [DEBUG] [Thread-127419] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:11:04.931 [DEBUG] [Thread-127419] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:11:04.931 [DEBUG] [Thread-127419] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T12:11:04.932 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T12:11:04.932 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:11:04.988 [DEBUG] [Thread-127419] [transport.py] [_log()] userauth is OK
2025-12-31T12:11:04.988 [DEBUG] [Thread-127419] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:11:04.988 [DEBUG] [Thread-127419] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:11:04.988 [DEBUG] [Thread-127419] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T12:11:04.988 [DEBUG] [Thread-127419] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:11:05.002 [INFO] [Thread-127419] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:11:05.002 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T12:11:05.002 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:11:05.839 [DEBUG] [Thread-127419] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:11:05.839 [DEBUG] [Thread-127419] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:11:05.888 [DEBUG] [Thread-127419] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:11:05.888 [DEBUG] [Thread-127419] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:11:05.897 [DEBUG] [Thread-127419] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:11:05.905 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:11:05.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T12:11: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') -> 00000000
2025-12-31T12:11:05.921 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:11:05.921 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:11:05.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:11:05.931 [DEBUG] [Thread-127419] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:11:08.692 [DEBUG] [Thread-127421 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:11:11.322 [DEBUG] [Thread-127422 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:11:23.745 [DEBUG] [Thread-127423 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:11:35.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T12:11:35.941 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T12:11:35.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T12:11:36.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 12, 11, 29), 36.02, 8.6, 0.0, 16.16, 25.91, 0, 0, 0, 2, 0, 0),)
2025-12-31T12:11:36.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 12:11:29
2025-12-31T12:11:36.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T12:11:36.950 [DEBUG] [Thread-127424] [transport.py] [_log()] starting thread (client mode): 0xb95b0ee0
2025-12-31T12:11:36.950 [DEBUG] [Thread-127424] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:11:36.970 [DEBUG] [Thread-127424] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T12:11:36.970 [INFO] [Thread-127424] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T12:11:36.973 [DEBUG] [Thread-127424] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:11:36.973 [DEBUG] [Thread-127424] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T12:11:36.973 [DEBUG] [Thread-127424] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:11:36.973 [DEBUG] [Thread-127424] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:11:36.973 [DEBUG] [Thread-127424] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:11:36.973 [DEBUG] [Thread-127424] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:11:36.973 [DEBUG] [Thread-127424] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:11:36.973 [DEBUG] [Thread-127424] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:11:36.973 [DEBUG] [Thread-127424] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:11:36.973 [DEBUG] [Thread-127424] [transport.py] [_log()] client lang: <none>
2025-12-31T12:11:36.973 [DEBUG] [Thread-127424] [transport.py] [_log()] server lang: <none>
2025-12-31T12:11:36.973 [DEBUG] [Thread-127424] [transport.py] [_log()] kex follows: False
2025-12-31T12:11:36.973 [DEBUG] [Thread-127424] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:11:36.973 [DEBUG] [Thread-127424] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:11:36.973 [DEBUG] [Thread-127424] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:11:36.974 [DEBUG] [Thread-127424] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:11:36.974 [DEBUG] [Thread-127424] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:11:36.974 [DEBUG] [Thread-127424] [transport.py] [_log()] Compression: none
2025-12-31T12:11:36.974 [DEBUG] [Thread-127424] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:11:36.989 [DEBUG] [Thread-127424] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:11:36.990 [DEBUG] [Thread-127424] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:11:36.990 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T12:11:36.990 [DEBUG] [Thread-127424] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T12:11:36.991 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:11:36.992 [DEBUG] [Thread-127424] [transport.py] [_log()] userauth is OK
2025-12-31T12:11:36.992 [DEBUG] [Thread-127424] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:11:36.992 [DEBUG] [Thread-127424] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:11:36.992 [DEBUG] [Thread-127424] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T12:11:36.992 [DEBUG] [Thread-127424] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:11:37.012 [INFO] [Thread-127424] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:11:37.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:11:37.752 [DEBUG] [Thread-127424] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:11:37.752 [DEBUG] [Thread-127424] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:11:37.753 [DEBUG] [Thread-127424] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T12:11:37.793 [DEBUG] [Thread-127424] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:11:37.793 [DEBUG] [Thread-127424] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:11:37.796 [DEBUG] [Thread-127424] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:11:37.805 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:11:37.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T12:11:37.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T12:11:37.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T12:11:37.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:11:37.817 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T12:11:37.818 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:11:37.818 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:11:37.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T12:11:37.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.424101 -999.00  +25.70  14.31     13   -4.00 1 2 1 1 1   888    0 27.99 -60.00 ----- 19.1 14.3 286.5 21.9 32.6 -23.2 32.0 -21.8 31.1 -20.6 31.8 -22.0
2025-12-31T12:11:37.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T12:11:37.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T12:11:37.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.424101
2025-12-31T12:11:37.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T12:11:37.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T12:11:37.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T12:11:37.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T12:11:37.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T12:11:37.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T12:11:29', tmtdew=36.02, humidity=8.6, cloud=0.0, wind=16.16, temperature=25.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T10:10:42.326', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T12:11:37.821 [DEBUG] [Thread-127424] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:11:37.901 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T12:11:37.913 [DEBUG] [Thread-127427] [transport.py] [_log()] starting thread (client mode): 0xb6b49930
2025-12-31T12:11:37.913 [DEBUG] [Thread-127427] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:11:37.928 [DEBUG] [Thread-127427] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T12:11:37.928 [INFO] [Thread-127427] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T12:11:37.936 [DEBUG] [Thread-127427] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:11:37.936 [DEBUG] [Thread-127427] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T12:11:37.936 [DEBUG] [Thread-127427] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:11:37.936 [DEBUG] [Thread-127427] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:11:37.936 [DEBUG] [Thread-127427] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:11:37.936 [DEBUG] [Thread-127427] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:11:37.936 [DEBUG] [Thread-127427] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:11:37.936 [DEBUG] [Thread-127427] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:11:37.936 [DEBUG] [Thread-127427] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:11:37.936 [DEBUG] [Thread-127427] [transport.py] [_log()] client lang: <none>
2025-12-31T12:11:37.936 [DEBUG] [Thread-127427] [transport.py] [_log()] server lang: <none>
2025-12-31T12:11:37.936 [DEBUG] [Thread-127427] [transport.py] [_log()] kex follows: False
2025-12-31T12:11:37.936 [DEBUG] [Thread-127427] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:11:37.936 [DEBUG] [Thread-127427] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:11:37.936 [DEBUG] [Thread-127427] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:11:37.936 [DEBUG] [Thread-127427] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:11:37.936 [DEBUG] [Thread-127427] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:11:37.937 [DEBUG] [Thread-127427] [transport.py] [_log()] Compression: none
2025-12-31T12:11:37.937 [DEBUG] [Thread-127427] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:11:37.999 [DEBUG] [Thread-127427] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:11:38.000 [DEBUG] [Thread-127427] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:11:38.000 [DEBUG] [Thread-127427] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T12:11:38.000 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T12:11:38.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:11:38.056 [DEBUG] [Thread-127427] [transport.py] [_log()] userauth is OK
2025-12-31T12:11:38.056 [DEBUG] [Thread-127427] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:11:38.056 [DEBUG] [Thread-127427] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:11:38.056 [DEBUG] [Thread-127427] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T12:11:38.056 [DEBUG] [Thread-127427] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:11:38.073 [INFO] [Thread-127427] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:11:38.074 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T12:11:38.074 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:11:38.779 [DEBUG] [Thread-127429 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:11:38.923 [DEBUG] [Thread-127427] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:11:38.923 [DEBUG] [Thread-127427] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:11:38.971 [DEBUG] [Thread-127427] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:11:38.971 [DEBUG] [Thread-127427] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:11:38.981 [DEBUG] [Thread-127427] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:11:38.990 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:11:38.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T12:11:38.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T12:11:39.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:11:39.009 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:11:39.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:11:39.017 [DEBUG] [Thread-127427] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:11:39.834 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:11:39.836 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:11:53.842 [DEBUG] [Thread-127430 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:12:08.879 [DEBUG] [Thread-127431 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:12:09.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T12:12:09.017 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T12:12:09.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T12:12:09.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 12, 12, 1), 36.11, 8.55, 0.0, 16.78, 25.96, 0, 0, 0, 2, 0, 0),)
2025-12-31T12:12:09.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 12:12:01
2025-12-31T12:12:09.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T12:12:10.018 [DEBUG] [Thread-127432] [transport.py] [_log()] starting thread (client mode): 0xb95b1690
2025-12-31T12:12:10.019 [DEBUG] [Thread-127432] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:12:10.038 [DEBUG] [Thread-127432] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T12:12:10.038 [INFO] [Thread-127432] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T12:12:10.041 [DEBUG] [Thread-127432] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:12:10.041 [DEBUG] [Thread-127432] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T12:12:10.041 [DEBUG] [Thread-127432] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:12:10.041 [DEBUG] [Thread-127432] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:12:10.041 [DEBUG] [Thread-127432] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:12:10.041 [DEBUG] [Thread-127432] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:12:10.041 [DEBUG] [Thread-127432] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:12:10.041 [DEBUG] [Thread-127432] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:12:10.041 [DEBUG] [Thread-127432] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:12:10.041 [DEBUG] [Thread-127432] [transport.py] [_log()] client lang: <none>
2025-12-31T12:12:10.041 [DEBUG] [Thread-127432] [transport.py] [_log()] server lang: <none>
2025-12-31T12:12:10.041 [DEBUG] [Thread-127432] [transport.py] [_log()] kex follows: False
2025-12-31T12:12:10.041 [DEBUG] [Thread-127432] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:12:10.041 [DEBUG] [Thread-127432] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:12:10.041 [DEBUG] [Thread-127432] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:12:10.041 [DEBUG] [Thread-127432] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:12:10.041 [DEBUG] [Thread-127432] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:12:10.041 [DEBUG] [Thread-127432] [transport.py] [_log()] Compression: none
2025-12-31T12:12:10.041 [DEBUG] [Thread-127432] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:12:10.057 [DEBUG] [Thread-127432] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:12:10.058 [DEBUG] [Thread-127432] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:12:10.058 [DEBUG] [Thread-127432] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T12:12:10.058 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T12:12:10.059 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:12:10.060 [DEBUG] [Thread-127432] [transport.py] [_log()] userauth is OK
2025-12-31T12:12:10.060 [DEBUG] [Thread-127432] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:12:10.060 [DEBUG] [Thread-127432] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:12:10.060 [DEBUG] [Thread-127432] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T12:12:10.061 [DEBUG] [Thread-127432] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:12:10.079 [INFO] [Thread-127432] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:12:10.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:12:10.759 [DEBUG] [Thread-127432] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:12:10.759 [DEBUG] [Thread-127432] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:12:10.759 [DEBUG] [Thread-127432] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T12:12:10.800 [DEBUG] [Thread-127432] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:12:10.800 [DEBUG] [Thread-127432] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:12:10.803 [DEBUG] [Thread-127432] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:12:10.814 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:12:10.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T12:12:10.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T12:12:10.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T12:12:10.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:12:10.826 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T12:12:10.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:12:10.827 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:12:10.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T12:12:10.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.424448 -999.00  +25.80  25.33     13   -4.00 1 2 1 1 1   888    0 28.05 -61.21 ----- 20.2 25.3 307.0 27.5 32.8 -22.0 32.1 -21.1 31.3 -19.8 31.9 -20.9
2025-12-31T12:12:10.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T12:12:10.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T12:12:10.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.424448
2025-12-31T12:12:10.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T12:12:10.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T12:12:10.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T12:12:10.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T12:12:10.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T12:12:10.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T12:12:01', tmtdew=36.11, humidity=8.55, cloud=0.0, wind=16.78, temperature=25.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T10:11:12.307', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T12:12:10.829 [DEBUG] [Thread-127432] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:12:10.910 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T12:12:10.922 [DEBUG] [Thread-127435] [transport.py] [_log()] starting thread (client mode): 0xb95b0310
2025-12-31T12:12:10.922 [DEBUG] [Thread-127435] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:12:10.937 [DEBUG] [Thread-127435] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T12:12:10.938 [INFO] [Thread-127435] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T12:12:10.945 [DEBUG] [Thread-127435] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:12:10.946 [DEBUG] [Thread-127435] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T12:12:10.946 [DEBUG] [Thread-127435] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:12:10.946 [DEBUG] [Thread-127435] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:12:10.946 [DEBUG] [Thread-127435] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:12:10.946 [DEBUG] [Thread-127435] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:12:10.946 [DEBUG] [Thread-127435] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:12:10.947 [DEBUG] [Thread-127435] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:12:10.947 [DEBUG] [Thread-127435] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:12:10.947 [DEBUG] [Thread-127435] [transport.py] [_log()] client lang: <none>
2025-12-31T12:12:10.947 [DEBUG] [Thread-127435] [transport.py] [_log()] server lang: <none>
2025-12-31T12:12:10.947 [DEBUG] [Thread-127435] [transport.py] [_log()] kex follows: False
2025-12-31T12:12:10.947 [DEBUG] [Thread-127435] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:12:10.947 [DEBUG] [Thread-127435] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:12:10.947 [DEBUG] [Thread-127435] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:12:10.947 [DEBUG] [Thread-127435] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:12:10.947 [DEBUG] [Thread-127435] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:12:10.947 [DEBUG] [Thread-127435] [transport.py] [_log()] Compression: none
2025-12-31T12:12:10.947 [DEBUG] [Thread-127435] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:12:11.004 [DEBUG] [Thread-127435] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:12:11.005 [DEBUG] [Thread-127435] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:12:11.005 [DEBUG] [Thread-127435] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T12:12:11.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T12:12:11.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:12:11.061 [DEBUG] [Thread-127435] [transport.py] [_log()] userauth is OK
2025-12-31T12:12:11.061 [DEBUG] [Thread-127435] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:12:11.061 [DEBUG] [Thread-127435] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:12:11.061 [DEBUG] [Thread-127435] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T12:12:11.061 [DEBUG] [Thread-127435] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:12:11.081 [INFO] [Thread-127435] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:12:11.081 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T12:12:11.081 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:12:11.376 [DEBUG] [Thread-127437 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:12:11.932 [DEBUG] [Thread-127435] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:12:11.932 [DEBUG] [Thread-127435] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:12:11.980 [DEBUG] [Thread-127435] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:12:11.981 [DEBUG] [Thread-127435] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:12:11.990 [DEBUG] [Thread-127435] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:12:11.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:12:11.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T12:12:12.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T12:12:12.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:12:12.022 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:12:12.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:12:12.031 [DEBUG] [Thread-127435] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:12:23.912 [DEBUG] [Thread-127438 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:12:38.966 [DEBUG] [Thread-127439 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:12:39.977 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:12:39.978 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:12:42.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T12:12:42.053 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T12:12:42.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T12:12:42.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 12, 12, 33), 37.42, 7.81, 0.0, 18.14, 27.25, 0, 0, 0, 2, 0, 0),)
2025-12-31T12:12:42.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 12:12:33
2025-12-31T12:12:42.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T12:12:43.040 [DEBUG] [Thread-127440] [transport.py] [_log()] starting thread (client mode): 0xb95b3760
2025-12-31T12:12:43.040 [DEBUG] [Thread-127440] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:12:43.060 [DEBUG] [Thread-127440] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T12:12:43.060 [INFO] [Thread-127440] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T12:12:43.064 [DEBUG] [Thread-127440] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:12:43.069 [DEBUG] [Thread-127440] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T12:12:43.070 [DEBUG] [Thread-127440] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:12:43.070 [DEBUG] [Thread-127440] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:12:43.070 [DEBUG] [Thread-127440] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:12:43.070 [DEBUG] [Thread-127440] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:12:43.070 [DEBUG] [Thread-127440] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:12:43.070 [DEBUG] [Thread-127440] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:12:43.070 [DEBUG] [Thread-127440] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:12:43.070 [DEBUG] [Thread-127440] [transport.py] [_log()] client lang: <none>
2025-12-31T12:12:43.070 [DEBUG] [Thread-127440] [transport.py] [_log()] server lang: <none>
2025-12-31T12:12:43.070 [DEBUG] [Thread-127440] [transport.py] [_log()] kex follows: False
2025-12-31T12:12:43.070 [DEBUG] [Thread-127440] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:12:43.070 [DEBUG] [Thread-127440] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:12:43.070 [DEBUG] [Thread-127440] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:12:43.070 [DEBUG] [Thread-127440] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:12:43.070 [DEBUG] [Thread-127440] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:12:43.070 [DEBUG] [Thread-127440] [transport.py] [_log()] Compression: none
2025-12-31T12:12:43.070 [DEBUG] [Thread-127440] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:12:43.088 [DEBUG] [Thread-127440] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:12:43.089 [DEBUG] [Thread-127440] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:12:43.089 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T12:12:43.090 [DEBUG] [Thread-127440] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T12:12:43.091 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:12:43.092 [DEBUG] [Thread-127440] [transport.py] [_log()] userauth is OK
2025-12-31T12:12:43.092 [DEBUG] [Thread-127440] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:12:43.092 [DEBUG] [Thread-127440] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:12:43.092 [DEBUG] [Thread-127440] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T12:12:43.093 [DEBUG] [Thread-127440] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:12:43.110 [INFO] [Thread-127440] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:12:43.111 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:12:43.883 [DEBUG] [Thread-127440] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:12:43.883 [DEBUG] [Thread-127440] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:12:43.884 [DEBUG] [Thread-127440] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T12:12:43.924 [DEBUG] [Thread-127440] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:12:43.924 [DEBUG] [Thread-127440] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:12:43.928 [DEBUG] [Thread-127440] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:12:43.938 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:12:43.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T12:12:43.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T12:12:43.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T12:12:43.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:12:43.950 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T12:12:43.951 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:12:43.951 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:12:43.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T12:12:43.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.425143 -999.00  +25.70   9.23     13   -3.90 1 2 1 1 1   888    0 28.06 -51.90 ----- 12.7 9.2 285.5 15.6 33.2 -21.6 32.4 -20.6 31.8 -19.4 32.3 -20.8
2025-12-31T12:12:43.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T12:12:43.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T12:12:43.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.425143
2025-12-31T12:12:43.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T12:12:43.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T12:12:43.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T12:12:43.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T12:12:43.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T12:12:43.953 [DEBUG] [Thread-127440] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:12:43.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T12:12:33', tmtdew=37.42, humidity=7.81, cloud=0.0, wind=18.14, temperature=27.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T10:12:12.355', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T12:12:44.036 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T12:12:44.048 [DEBUG] [Thread-127443] [transport.py] [_log()] starting thread (client mode): 0xb95b1300
2025-12-31T12:12:44.049 [DEBUG] [Thread-127443] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:12:44.063 [DEBUG] [Thread-127443] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T12:12:44.063 [INFO] [Thread-127443] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T12:12:44.071 [DEBUG] [Thread-127443] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:12:44.072 [DEBUG] [Thread-127443] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T12:12:44.072 [DEBUG] [Thread-127443] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:12:44.072 [DEBUG] [Thread-127443] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:12:44.072 [DEBUG] [Thread-127443] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:12:44.072 [DEBUG] [Thread-127443] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:12:44.072 [DEBUG] [Thread-127443] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:12:44.072 [DEBUG] [Thread-127443] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:12:44.072 [DEBUG] [Thread-127443] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:12:44.072 [DEBUG] [Thread-127443] [transport.py] [_log()] client lang: <none>
2025-12-31T12:12:44.072 [DEBUG] [Thread-127443] [transport.py] [_log()] server lang: <none>
2025-12-31T12:12:44.072 [DEBUG] [Thread-127443] [transport.py] [_log()] kex follows: False
2025-12-31T12:12:44.072 [DEBUG] [Thread-127443] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:12:44.072 [DEBUG] [Thread-127443] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:12:44.072 [DEBUG] [Thread-127443] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:12:44.072 [DEBUG] [Thread-127443] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:12:44.072 [DEBUG] [Thread-127443] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:12:44.073 [DEBUG] [Thread-127443] [transport.py] [_log()] Compression: none
2025-12-31T12:12:44.073 [DEBUG] [Thread-127443] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:12:44.130 [DEBUG] [Thread-127443] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:12:44.130 [DEBUG] [Thread-127443] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:12:44.131 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T12:12:44.132 [DEBUG] [Thread-127443] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T12:12:44.132 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:12:44.189 [DEBUG] [Thread-127443] [transport.py] [_log()] userauth is OK
2025-12-31T12:12:44.189 [DEBUG] [Thread-127443] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:12:44.189 [DEBUG] [Thread-127443] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:12:44.189 [DEBUG] [Thread-127443] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T12:12:44.189 [DEBUG] [Thread-127443] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:12:44.208 [INFO] [Thread-127443] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:12:44.208 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T12:12:44.209 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:12:45.017 [DEBUG] [Thread-127443] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:12:45.018 [DEBUG] [Thread-127443] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:12:45.067 [DEBUG] [Thread-127443] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:12:45.067 [DEBUG] [Thread-127443] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:12:45.077 [DEBUG] [Thread-127443] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:12:45.087 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:12:45.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T12:12:45.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T12:12:45.105 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:12:45.106 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:12:45.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:12:45.114 [DEBUG] [Thread-127443] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:12:54.005 [DEBUG] [Thread-127445 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:13:09.050 [DEBUG] [Thread-127446 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:13:11.427 [DEBUG] [Thread-127447 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:13:15.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T12:13:15.137 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T12:13:15.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T12:13:15.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 12, 13, 5), 36.34, 8.36, 0.0, 11.26, 25.91, 0, 0, 0, 2, 0, 0),)
2025-12-31T12:13:15.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 12:13:05
2025-12-31T12:13:15.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T12:13:16.138 [DEBUG] [Thread-127448] [transport.py] [_log()] starting thread (client mode): 0xb6b2b910
2025-12-31T12:13:16.138 [DEBUG] [Thread-127448] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:13:16.159 [DEBUG] [Thread-127448] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T12:13:16.159 [INFO] [Thread-127448] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T12:13:16.160 [DEBUG] [Thread-127448] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:13:16.160 [DEBUG] [Thread-127448] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T12:13:16.160 [DEBUG] [Thread-127448] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:13:16.160 [DEBUG] [Thread-127448] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:13:16.160 [DEBUG] [Thread-127448] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:13:16.160 [DEBUG] [Thread-127448] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:13:16.160 [DEBUG] [Thread-127448] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:13:16.160 [DEBUG] [Thread-127448] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:13:16.160 [DEBUG] [Thread-127448] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:13:16.160 [DEBUG] [Thread-127448] [transport.py] [_log()] client lang: <none>
2025-12-31T12:13:16.160 [DEBUG] [Thread-127448] [transport.py] [_log()] server lang: <none>
2025-12-31T12:13:16.160 [DEBUG] [Thread-127448] [transport.py] [_log()] kex follows: False
2025-12-31T12:13:16.160 [DEBUG] [Thread-127448] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:13:16.160 [DEBUG] [Thread-127448] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:13:16.160 [DEBUG] [Thread-127448] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:13:16.161 [DEBUG] [Thread-127448] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:13:16.161 [DEBUG] [Thread-127448] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:13:16.161 [DEBUG] [Thread-127448] [transport.py] [_log()] Compression: none
2025-12-31T12:13:16.161 [DEBUG] [Thread-127448] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:13:16.180 [DEBUG] [Thread-127448] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:13:16.181 [DEBUG] [Thread-127448] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:13:16.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T12:13:16.182 [DEBUG] [Thread-127448] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T12:13:16.182 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:13:16.184 [DEBUG] [Thread-127448] [transport.py] [_log()] userauth is OK
2025-12-31T12:13:16.184 [DEBUG] [Thread-127448] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:13:16.184 [DEBUG] [Thread-127448] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:13:16.184 [DEBUG] [Thread-127448] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T12:13:16.184 [DEBUG] [Thread-127448] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:13:16.209 [INFO] [Thread-127448] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:13:16.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:13:16.794 [DEBUG] [Thread-127448] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:13:16.794 [DEBUG] [Thread-127448] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:13:16.795 [DEBUG] [Thread-127448] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T12:13:16.835 [DEBUG] [Thread-127448] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:13:16.835 [DEBUG] [Thread-127448] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:13:16.838 [DEBUG] [Thread-127448] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:13:16.852 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:13:16.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T12:13:16.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T12:13:16.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T12:13:16.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:13:16.864 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T12:13:16.864 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:13:16.864 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:13:16.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T12:13:16.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.425490 -999.00  +26.20  20.27     13   -4.00 1 2 1 1 1   888    0 28.45 -51.25 ----- 25.6 20.3 318.6 25.5 33.1 -23.1 32.6 -21.5 31.6 -20.7 32.3 -21.8
2025-12-31T12:13:16.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T12:13:16.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T12:13:16.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.425490
2025-12-31T12:13:16.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T12:13:16.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T12:13:16.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T12:13:16.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T12:13:16.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T12:13:16.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T12:13:05', tmtdew=36.34, humidity=8.36, cloud=0.0, wind=11.26, temperature=25.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T10:12:42.336', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T12:13:16.867 [DEBUG] [Thread-127448] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:13:16.954 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T12:13:16.966 [DEBUG] [Thread-127451] [transport.py] [_log()] starting thread (client mode): 0xb6b297b0
2025-12-31T12:13:16.967 [DEBUG] [Thread-127451] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:13:16.981 [DEBUG] [Thread-127451] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T12:13:16.981 [INFO] [Thread-127451] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T12:13:16.988 [DEBUG] [Thread-127451] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:13:16.989 [DEBUG] [Thread-127451] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T12:13:16.989 [DEBUG] [Thread-127451] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:13:16.989 [DEBUG] [Thread-127451] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:13:16.989 [DEBUG] [Thread-127451] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:13:16.989 [DEBUG] [Thread-127451] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:13:16.989 [DEBUG] [Thread-127451] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:13:16.989 [DEBUG] [Thread-127451] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:13:16.989 [DEBUG] [Thread-127451] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:13:16.989 [DEBUG] [Thread-127451] [transport.py] [_log()] client lang: <none>
2025-12-31T12:13:16.989 [DEBUG] [Thread-127451] [transport.py] [_log()] server lang: <none>
2025-12-31T12:13:16.989 [DEBUG] [Thread-127451] [transport.py] [_log()] kex follows: False
2025-12-31T12:13:16.989 [DEBUG] [Thread-127451] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:13:16.989 [DEBUG] [Thread-127451] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:13:16.989 [DEBUG] [Thread-127451] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:13:16.989 [DEBUG] [Thread-127451] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:13:16.990 [DEBUG] [Thread-127451] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:13:16.991 [DEBUG] [Thread-127451] [transport.py] [_log()] Compression: none
2025-12-31T12:13:16.991 [DEBUG] [Thread-127451] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:13:17.054 [DEBUG] [Thread-127451] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:13:17.055 [DEBUG] [Thread-127451] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:13:17.055 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T12:13:17.056 [DEBUG] [Thread-127451] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T12:13:17.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:13:17.113 [DEBUG] [Thread-127451] [transport.py] [_log()] userauth is OK
2025-12-31T12:13:17.113 [DEBUG] [Thread-127451] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:13:17.113 [DEBUG] [Thread-127451] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:13:17.114 [DEBUG] [Thread-127451] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T12:13:17.114 [DEBUG] [Thread-127451] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:13:17.136 [INFO] [Thread-127451] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:13:17.137 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T12:13:17.137 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:13:17.934 [DEBUG] [Thread-127451] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:13:17.934 [DEBUG] [Thread-127451] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:13:17.982 [DEBUG] [Thread-127451] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:13:17.982 [DEBUG] [Thread-127451] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:13:17.991 [DEBUG] [Thread-127451] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:13:18.001 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:13:18.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T12:13: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') -> 00000000
2025-12-31T12:13:18.019 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:13:18.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:13:18.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:13:18.028 [DEBUG] [Thread-127451] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:13:24.087 [DEBUG] [Thread-127453 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:13:39.134 [DEBUG] [Thread-127454 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:13:40.120 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:13:40.121 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:13:48.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T12:13:48.025 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T12:13:48.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T12:13:48.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 12, 13, 37), 37.03, 7.81, 0.0, 20.1, 26.09, 0, 0, 0, 2, 0, 0),)
2025-12-31T12:13:48.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 12:13:37
2025-12-31T12:13:48.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T12:13:49.008 [DEBUG] [Thread-127455] [transport.py] [_log()] starting thread (client mode): 0xb6b4baf0
2025-12-31T12:13:49.008 [DEBUG] [Thread-127455] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:13:49.028 [DEBUG] [Thread-127455] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T12:13:49.028 [INFO] [Thread-127455] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T12:13:49.031 [DEBUG] [Thread-127455] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:13:49.031 [DEBUG] [Thread-127455] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T12:13:49.032 [DEBUG] [Thread-127455] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:13:49.032 [DEBUG] [Thread-127455] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:13:49.032 [DEBUG] [Thread-127455] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:13:49.032 [DEBUG] [Thread-127455] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:13:49.032 [DEBUG] [Thread-127455] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:13:49.032 [DEBUG] [Thread-127455] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:13:49.032 [DEBUG] [Thread-127455] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:13:49.032 [DEBUG] [Thread-127455] [transport.py] [_log()] client lang: <none>
2025-12-31T12:13:49.032 [DEBUG] [Thread-127455] [transport.py] [_log()] server lang: <none>
2025-12-31T12:13:49.032 [DEBUG] [Thread-127455] [transport.py] [_log()] kex follows: False
2025-12-31T12:13:49.032 [DEBUG] [Thread-127455] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:13:49.032 [DEBUG] [Thread-127455] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:13:49.032 [DEBUG] [Thread-127455] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:13:49.032 [DEBUG] [Thread-127455] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:13:49.033 [DEBUG] [Thread-127455] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:13:49.033 [DEBUG] [Thread-127455] [transport.py] [_log()] Compression: none
2025-12-31T12:13:49.033 [DEBUG] [Thread-127455] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:13:49.052 [DEBUG] [Thread-127455] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:13:49.052 [DEBUG] [Thread-127455] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:13:49.053 [DEBUG] [Thread-127455] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T12:13:49.053 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T12:13:49.053 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:13:49.055 [DEBUG] [Thread-127455] [transport.py] [_log()] userauth is OK
2025-12-31T12:13:49.055 [DEBUG] [Thread-127455] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:13:49.055 [DEBUG] [Thread-127455] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:13:49.055 [DEBUG] [Thread-127455] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T12:13:49.055 [DEBUG] [Thread-127455] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:13:49.091 [INFO] [Thread-127455] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:13:49.092 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:13:49.869 [DEBUG] [Thread-127455] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:13:49.869 [DEBUG] [Thread-127455] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:13:49.870 [DEBUG] [Thread-127455] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T12:13:49.910 [DEBUG] [Thread-127455] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:13:49.910 [DEBUG] [Thread-127455] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:13:49.913 [DEBUG] [Thread-127455] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:13:49.920 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:13:49.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T12:13:49.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T12:13:49.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T12:13:49.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:13:49.930 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T12:13:49.930 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:13:49.930 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:13:49.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T12:13:49.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.425837 -999.00  +25.80  22.17     13   -4.50 1 2 1 1 1   888    0 28.25 -52.35 ----- 19.4 22.2 319.8 29.1 33.4 -23.1 32.6 -21.0 31.9 -20.1 32.5 -21.3
2025-12-31T12:13:49.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T12:13:49.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T12:13:49.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.425837
2025-12-31T12:13:49.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T12:13:49.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T12:13:49.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T12:13:49.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T12:13:49.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T12:13:49.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T12:13:37', tmtdew=37.03, humidity=7.81, cloud=0.0, wind=20.1, temperature=26.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T10:13:12.317', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T12:13:49.932 [DEBUG] [Thread-127455] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:13:50.015 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T12:13:50.027 [DEBUG] [Thread-127458] [transport.py] [_log()] starting thread (client mode): 0xb6b22410
2025-12-31T12:13:50.028 [DEBUG] [Thread-127458] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:13:50.042 [DEBUG] [Thread-127458] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T12:13:50.042 [INFO] [Thread-127458] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T12:13:50.050 [DEBUG] [Thread-127458] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:13:50.050 [DEBUG] [Thread-127458] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T12:13:50.050 [DEBUG] [Thread-127458] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:13:50.051 [DEBUG] [Thread-127458] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:13:50.051 [DEBUG] [Thread-127458] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:13:50.051 [DEBUG] [Thread-127458] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:13:50.051 [DEBUG] [Thread-127458] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:13:50.051 [DEBUG] [Thread-127458] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:13:50.051 [DEBUG] [Thread-127458] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:13:50.051 [DEBUG] [Thread-127458] [transport.py] [_log()] client lang: <none>
2025-12-31T12:13:50.051 [DEBUG] [Thread-127458] [transport.py] [_log()] server lang: <none>
2025-12-31T12:13:50.051 [DEBUG] [Thread-127458] [transport.py] [_log()] kex follows: False
2025-12-31T12:13:50.052 [DEBUG] [Thread-127458] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:13:50.052 [DEBUG] [Thread-127458] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:13:50.052 [DEBUG] [Thread-127458] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:13:50.052 [DEBUG] [Thread-127458] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:13:50.052 [DEBUG] [Thread-127458] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:13:50.052 [DEBUG] [Thread-127458] [transport.py] [_log()] Compression: none
2025-12-31T12:13:50.052 [DEBUG] [Thread-127458] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:13:50.110 [DEBUG] [Thread-127458] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:13:50.110 [DEBUG] [Thread-127458] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:13:50.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T12:13:50.111 [DEBUG] [Thread-127458] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T12:13:50.112 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:13:50.165 [DEBUG] [Thread-127458] [transport.py] [_log()] userauth is OK
2025-12-31T12:13:50.166 [DEBUG] [Thread-127458] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:13:50.166 [DEBUG] [Thread-127458] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:13:50.166 [DEBUG] [Thread-127458] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T12:13:50.166 [DEBUG] [Thread-127458] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:13:50.185 [INFO] [Thread-127458] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:13:50.185 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T12:13:50.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:13:51.033 [DEBUG] [Thread-127458] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:13:51.033 [DEBUG] [Thread-127458] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:13:51.081 [DEBUG] [Thread-127458] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:13:51.081 [DEBUG] [Thread-127458] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:13:51.090 [DEBUG] [Thread-127458] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:13:51.099 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:13:51.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T12:13:51.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T12:13:51.118 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:13:51.118 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:13:51.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:13:51.126 [DEBUG] [Thread-127458] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:13:54.167 [DEBUG] [Thread-127460 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:14:09.223 [DEBUG] [Thread-127461 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:14:11.476 [DEBUG] [Thread-127462 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:14:21.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T12:14:21.149 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T12:14:21.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T12:14:21.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 12, 14, 9), 36.95, 7.81, 0.0, 15.0, 25.79, 0, 0, 0, 2, 0, 0),)
2025-12-31T12:14:21.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 12:14:09
2025-12-31T12:14:22.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T12:14:22.151 [DEBUG] [Thread-127463] [transport.py] [_log()] starting thread (client mode): 0xb6bb0970
2025-12-31T12:14:22.151 [DEBUG] [Thread-127463] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:14:22.172 [DEBUG] [Thread-127463] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T12:14:22.172 [INFO] [Thread-127463] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T12:14:22.176 [DEBUG] [Thread-127463] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:14:22.176 [DEBUG] [Thread-127463] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T12:14:22.176 [DEBUG] [Thread-127463] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:14:22.176 [DEBUG] [Thread-127463] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:14:22.176 [DEBUG] [Thread-127463] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:14:22.176 [DEBUG] [Thread-127463] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:14:22.176 [DEBUG] [Thread-127463] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:14:22.176 [DEBUG] [Thread-127463] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:14:22.176 [DEBUG] [Thread-127463] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:14:22.176 [DEBUG] [Thread-127463] [transport.py] [_log()] client lang: <none>
2025-12-31T12:14:22.176 [DEBUG] [Thread-127463] [transport.py] [_log()] server lang: <none>
2025-12-31T12:14:22.176 [DEBUG] [Thread-127463] [transport.py] [_log()] kex follows: False
2025-12-31T12:14:22.176 [DEBUG] [Thread-127463] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:14:22.176 [DEBUG] [Thread-127463] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:14:22.176 [DEBUG] [Thread-127463] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:14:22.176 [DEBUG] [Thread-127463] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:14:22.176 [DEBUG] [Thread-127463] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:14:22.176 [DEBUG] [Thread-127463] [transport.py] [_log()] Compression: none
2025-12-31T12:14:22.176 [DEBUG] [Thread-127463] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:14:22.192 [DEBUG] [Thread-127463] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:14:22.193 [DEBUG] [Thread-127463] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:14:22.193 [DEBUG] [Thread-127463] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T12:14:22.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T12:14:22.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:14:22.237 [DEBUG] [Thread-127463] [transport.py] [_log()] userauth is OK
2025-12-31T12:14:22.237 [DEBUG] [Thread-127463] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:14:22.237 [DEBUG] [Thread-127463] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:14:22.237 [DEBUG] [Thread-127463] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T12:14:22.237 [DEBUG] [Thread-127463] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:14:22.263 [INFO] [Thread-127463] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:14:22.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:14:22.891 [DEBUG] [Thread-127463] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:14:22.891 [DEBUG] [Thread-127463] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:14:22.891 [DEBUG] [Thread-127463] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T12:14:22.933 [DEBUG] [Thread-127463] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:14:22.933 [DEBUG] [Thread-127463] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:14:22.935 [DEBUG] [Thread-127463] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:14:22.947 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:14:22.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T12:14:22.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T12:14:22.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T12:14:22.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:14:22.954 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T12:14:22.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:14:22.954 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:14:22.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T12:14:22.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.426185 -999.00  +26.10  15.07     13   -4.40 1 2 1 1 1   888    0 28.06 -47.66 ----- 12.4 15.1 291.6 23.4 33.6 -22.3 32.9 -19.8 32.2 -18.9 32.7 -20.8
2025-12-31T12:14:22.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T12:14:22.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T12:14:22.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.426185
2025-12-31T12:14:22.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T12:14:22.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T12:14:22.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T12:14:22.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T12:14:22.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T12:14:22.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T12:14:09', tmtdew=36.95, humidity=7.81, cloud=0.0, wind=15.0, temperature=25.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T10:13:42.384', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T12:14:22.956 [DEBUG] [Thread-127463] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:14:23.029 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T12:14:23.041 [DEBUG] [Thread-127466] [transport.py] [_log()] starting thread (client mode): 0xbbfcea70
2025-12-31T12:14:23.041 [DEBUG] [Thread-127466] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:14:23.056 [DEBUG] [Thread-127466] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T12:14:23.056 [INFO] [Thread-127466] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T12:14:23.063 [DEBUG] [Thread-127466] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:14:23.063 [DEBUG] [Thread-127466] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T12:14:23.063 [DEBUG] [Thread-127466] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:14:23.063 [DEBUG] [Thread-127466] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:14:23.063 [DEBUG] [Thread-127466] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:14:23.063 [DEBUG] [Thread-127466] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:14:23.063 [DEBUG] [Thread-127466] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:14:23.063 [DEBUG] [Thread-127466] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:14:23.063 [DEBUG] [Thread-127466] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:14:23.063 [DEBUG] [Thread-127466] [transport.py] [_log()] client lang: <none>
2025-12-31T12:14:23.063 [DEBUG] [Thread-127466] [transport.py] [_log()] server lang: <none>
2025-12-31T12:14:23.063 [DEBUG] [Thread-127466] [transport.py] [_log()] kex follows: False
2025-12-31T12:14:23.064 [DEBUG] [Thread-127466] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:14:23.064 [DEBUG] [Thread-127466] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:14:23.064 [DEBUG] [Thread-127466] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:14:23.064 [DEBUG] [Thread-127466] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:14:23.064 [DEBUG] [Thread-127466] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:14:23.064 [DEBUG] [Thread-127466] [transport.py] [_log()] Compression: none
2025-12-31T12:14:23.064 [DEBUG] [Thread-127466] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:14:23.120 [DEBUG] [Thread-127466] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:14:23.120 [DEBUG] [Thread-127466] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:14:23.120 [DEBUG] [Thread-127466] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T12:14:23.120 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T12:14:23.120 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:14:23.177 [DEBUG] [Thread-127466] [transport.py] [_log()] userauth is OK
2025-12-31T12:14:23.177 [DEBUG] [Thread-127466] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:14:23.177 [DEBUG] [Thread-127466] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:14:23.177 [DEBUG] [Thread-127466] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T12:14:23.177 [DEBUG] [Thread-127466] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:14:23.195 [INFO] [Thread-127466] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:14:23.195 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T12:14:23.195 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:14:24.013 [DEBUG] [Thread-127466] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:14:24.013 [DEBUG] [Thread-127466] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:14:24.062 [DEBUG] [Thread-127466] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:14:24.062 [DEBUG] [Thread-127466] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:14:24.071 [DEBUG] [Thread-127466] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:14:24.080 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:14:24.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T12:14:24.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T12:14:24.099 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:14:24.100 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:14:24.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:14:24.108 [DEBUG] [Thread-127466] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:14:24.256 [DEBUG] [Thread-127468 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:14:39.309 [DEBUG] [Thread-127469 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:14:40.261 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:14:40.262 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:14:54.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T12:14:54.108 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T12:14:54.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-12-31T12:14:54.344 [DEBUG] [Thread-127470 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:14:54.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 12, 14, 42), 36.41, 8.37, 0.0, 11.95, 25.53, 0, 0, 0, 2, 0, 0),)
2025-12-31T12:14:54.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 12:14:42
2025-12-31T12:14:54.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T12:14:55.087 [DEBUG] [Thread-127471] [transport.py] [_log()] starting thread (client mode): 0xb6b48c10
2025-12-31T12:14:55.087 [DEBUG] [Thread-127471] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:14:55.107 [DEBUG] [Thread-127471] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T12:14:55.107 [INFO] [Thread-127471] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T12:14:55.111 [DEBUG] [Thread-127471] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:14:55.111 [DEBUG] [Thread-127471] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T12:14:55.111 [DEBUG] [Thread-127471] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:14:55.111 [DEBUG] [Thread-127471] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:14:55.111 [DEBUG] [Thread-127471] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:14:55.111 [DEBUG] [Thread-127471] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:14:55.111 [DEBUG] [Thread-127471] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:14:55.111 [DEBUG] [Thread-127471] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:14:55.111 [DEBUG] [Thread-127471] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:14:55.111 [DEBUG] [Thread-127471] [transport.py] [_log()] client lang: <none>
2025-12-31T12:14:55.111 [DEBUG] [Thread-127471] [transport.py] [_log()] server lang: <none>
2025-12-31T12:14:55.111 [DEBUG] [Thread-127471] [transport.py] [_log()] kex follows: False
2025-12-31T12:14:55.111 [DEBUG] [Thread-127471] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:14:55.111 [DEBUG] [Thread-127471] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:14:55.111 [DEBUG] [Thread-127471] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:14:55.111 [DEBUG] [Thread-127471] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:14:55.111 [DEBUG] [Thread-127471] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:14:55.111 [DEBUG] [Thread-127471] [transport.py] [_log()] Compression: none
2025-12-31T12:14:55.111 [DEBUG] [Thread-127471] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:14:55.128 [DEBUG] [Thread-127471] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:14:55.128 [DEBUG] [Thread-127471] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:14:55.128 [DEBUG] [Thread-127471] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T12:14:55.128 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T12:14:55.129 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:14:55.130 [DEBUG] [Thread-127471] [transport.py] [_log()] userauth is OK
2025-12-31T12:14:55.131 [DEBUG] [Thread-127471] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:14:55.131 [DEBUG] [Thread-127471] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:14:55.131 [DEBUG] [Thread-127471] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T12:14:55.131 [DEBUG] [Thread-127471] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:14:55.153 [INFO] [Thread-127471] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:14:55.154 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:14:55.929 [DEBUG] [Thread-127471] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:14:55.929 [DEBUG] [Thread-127471] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:14:55.930 [DEBUG] [Thread-127471] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T12:14:55.971 [DEBUG] [Thread-127471] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:14:55.971 [DEBUG] [Thread-127471] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:14:55.974 [DEBUG] [Thread-127471] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:14:55.986 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:14:55.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T12:14:55.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T12:14:55.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T12:14:55.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:14:55.998 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T12:14:55.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:14:55.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:14:55.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T12:14:56.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.426532 -999.00  +25.80   9.43     13   -4.30 1 2 1 1 1   888    0 29.05 -41.85 ----- 11.2 9.4 308.8 11.5 33.8 -21.5 33.0 -20.5 32.2 -21.0 32.9 -19.9
2025-12-31T12:14:56.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T12:14:56.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T12:14:56.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.426532
2025-12-31T12:14:56.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T12:14:56.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T12:14:56.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T12:14:56.002 [DEBUG] [Thread-127471] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:14:56.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T12:14:56.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T12:14:56.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T12:14:42', tmtdew=36.41, humidity=8.37, cloud=0.0, wind=11.95, temperature=25.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T10:14:12.365', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T12:14:56.102 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T12:14:56.114 [DEBUG] [Thread-127474] [transport.py] [_log()] starting thread (client mode): 0xb6bb3640
2025-12-31T12:14:56.114 [DEBUG] [Thread-127474] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:14:56.128 [DEBUG] [Thread-127474] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T12:14:56.128 [INFO] [Thread-127474] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T12:14:56.135 [DEBUG] [Thread-127474] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:14:56.136 [DEBUG] [Thread-127474] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T12:14:56.136 [DEBUG] [Thread-127474] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:14:56.136 [DEBUG] [Thread-127474] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:14:56.136 [DEBUG] [Thread-127474] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:14:56.136 [DEBUG] [Thread-127474] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:14:56.136 [DEBUG] [Thread-127474] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:14:56.136 [DEBUG] [Thread-127474] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:14:56.136 [DEBUG] [Thread-127474] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:14:56.136 [DEBUG] [Thread-127474] [transport.py] [_log()] client lang: <none>
2025-12-31T12:14:56.136 [DEBUG] [Thread-127474] [transport.py] [_log()] server lang: <none>
2025-12-31T12:14:56.136 [DEBUG] [Thread-127474] [transport.py] [_log()] kex follows: False
2025-12-31T12:14:56.136 [DEBUG] [Thread-127474] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:14:56.136 [DEBUG] [Thread-127474] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:14:56.136 [DEBUG] [Thread-127474] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:14:56.136 [DEBUG] [Thread-127474] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:14:56.136 [DEBUG] [Thread-127474] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:14:56.136 [DEBUG] [Thread-127474] [transport.py] [_log()] Compression: none
2025-12-31T12:14:56.136 [DEBUG] [Thread-127474] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:14:56.192 [DEBUG] [Thread-127474] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:14:56.192 [DEBUG] [Thread-127474] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:14:56.192 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T12:14:56.192 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:14:56.192 [DEBUG] [Thread-127474] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T12:14:56.249 [DEBUG] [Thread-127474] [transport.py] [_log()] userauth is OK
2025-12-31T12:14:56.249 [DEBUG] [Thread-127474] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:14:56.249 [DEBUG] [Thread-127474] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:14:56.249 [DEBUG] [Thread-127474] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T12:14:56.249 [DEBUG] [Thread-127474] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:14:56.263 [INFO] [Thread-127474] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:14:56.263 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T12:14:56.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:14:57.072 [DEBUG] [Thread-127474] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:14:57.072 [DEBUG] [Thread-127474] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:14:57.119 [DEBUG] [Thread-127474] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:14:57.119 [DEBUG] [Thread-127474] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:14:57.127 [DEBUG] [Thread-127474] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:14:57.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:14:57.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T12:14:57.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-12-31T12:14:57.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:14:57.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:14:57.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:14:57.159 [DEBUG] [Thread-127474] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:15:09.371 [DEBUG] [Thread-127476 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:15:11.536 [DEBUG] [Thread-127477 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:15:24.424 [DEBUG] [Thread-127478 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:15:27.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T12:15:27.182 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T12:15:27.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T12:15:27.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 12, 15, 14), 36.19, 8.5, 0.0, 10.73, 25.48, 0, 0, 0, 2, 0, 0),)
2025-12-31T12:15:27.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 12:15:14
2025-12-31T12:15:28.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T12:15:28.183 [DEBUG] [Thread-127479] [transport.py] [_log()] starting thread (client mode): 0xb6b01540
2025-12-31T12:15:28.184 [DEBUG] [Thread-127479] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:15:28.204 [DEBUG] [Thread-127479] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T12:15:28.204 [INFO] [Thread-127479] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T12:15:28.207 [DEBUG] [Thread-127479] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:15:28.208 [DEBUG] [Thread-127479] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T12:15:28.208 [DEBUG] [Thread-127479] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:15:28.208 [DEBUG] [Thread-127479] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:15:28.208 [DEBUG] [Thread-127479] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:15:28.208 [DEBUG] [Thread-127479] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:15:28.208 [DEBUG] [Thread-127479] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:15:28.208 [DEBUG] [Thread-127479] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:15:28.208 [DEBUG] [Thread-127479] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:15:28.208 [DEBUG] [Thread-127479] [transport.py] [_log()] client lang: <none>
2025-12-31T12:15:28.208 [DEBUG] [Thread-127479] [transport.py] [_log()] server lang: <none>
2025-12-31T12:15:28.208 [DEBUG] [Thread-127479] [transport.py] [_log()] kex follows: False
2025-12-31T12:15:28.208 [DEBUG] [Thread-127479] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:15:28.208 [DEBUG] [Thread-127479] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:15:28.208 [DEBUG] [Thread-127479] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:15:28.208 [DEBUG] [Thread-127479] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:15:28.208 [DEBUG] [Thread-127479] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:15:28.208 [DEBUG] [Thread-127479] [transport.py] [_log()] Compression: none
2025-12-31T12:15:28.208 [DEBUG] [Thread-127479] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:15:28.225 [DEBUG] [Thread-127479] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:15:28.226 [DEBUG] [Thread-127479] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:15:28.226 [DEBUG] [Thread-127479] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T12:15:28.227 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T12:15:28.227 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:15:28.228 [DEBUG] [Thread-127479] [transport.py] [_log()] userauth is OK
2025-12-31T12:15:28.228 [DEBUG] [Thread-127479] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:15:28.228 [DEBUG] [Thread-127479] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:15:28.228 [DEBUG] [Thread-127479] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T12:15:28.228 [DEBUG] [Thread-127479] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:15:28.244 [INFO] [Thread-127479] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:15:28.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:15:28.869 [DEBUG] [Thread-127479] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:15:28.870 [DEBUG] [Thread-127479] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:15:28.870 [DEBUG] [Thread-127479] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T12:15:28.911 [DEBUG] [Thread-127479] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:15:28.911 [DEBUG] [Thread-127479] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:15:28.914 [DEBUG] [Thread-127479] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:15:28.926 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:15:28.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T12:15:28.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T12:15:28.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T12:15:28.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:15:28.937 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T12:15:28.937 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:15:28.937 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:15:28.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T12:15:28.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.426879 -999.00  +25.90  13.58     13   -4.40 1 2 1 1 1   888    0 28.44 -39.15 ----- 12.6 13.6 308.2 15.7 34.0 -22.0 33.2 -20.3 32.5 -18.5 33.1 -20.0
2025-12-31T12:15:28.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T12:15:28.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T12:15:28.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.426879
2025-12-31T12:15:28.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T12:15:28.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T12:15:28.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T12:15:28.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T12:15:28.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T12:15:28.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T12:15:14', tmtdew=36.19, humidity=8.5, cloud=0.0, wind=10.73, temperature=25.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T10:14:42.346', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T12:15:28.939 [DEBUG] [Thread-127479] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:15:29.022 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T12:15:29.033 [DEBUG] [Thread-127482] [transport.py] [_log()] starting thread (client mode): 0xb6b02e00
2025-12-31T12:15:29.033 [DEBUG] [Thread-127482] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:15:29.048 [DEBUG] [Thread-127482] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T12:15:29.048 [INFO] [Thread-127482] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T12:15:29.056 [DEBUG] [Thread-127482] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:15:29.056 [DEBUG] [Thread-127482] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T12:15:29.056 [DEBUG] [Thread-127482] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:15:29.056 [DEBUG] [Thread-127482] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:15:29.056 [DEBUG] [Thread-127482] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:15:29.056 [DEBUG] [Thread-127482] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:15:29.056 [DEBUG] [Thread-127482] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:15:29.056 [DEBUG] [Thread-127482] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:15:29.056 [DEBUG] [Thread-127482] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:15:29.056 [DEBUG] [Thread-127482] [transport.py] [_log()] client lang: <none>
2025-12-31T12:15:29.056 [DEBUG] [Thread-127482] [transport.py] [_log()] server lang: <none>
2025-12-31T12:15:29.056 [DEBUG] [Thread-127482] [transport.py] [_log()] kex follows: False
2025-12-31T12:15:29.056 [DEBUG] [Thread-127482] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:15:29.056 [DEBUG] [Thread-127482] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:15:29.056 [DEBUG] [Thread-127482] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:15:29.056 [DEBUG] [Thread-127482] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:15:29.057 [DEBUG] [Thread-127482] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:15:29.057 [DEBUG] [Thread-127482] [transport.py] [_log()] Compression: none
2025-12-31T12:15:29.057 [DEBUG] [Thread-127482] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:15:29.113 [DEBUG] [Thread-127482] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:15:29.113 [DEBUG] [Thread-127482] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:15:29.114 [DEBUG] [Thread-127482] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T12:15:29.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T12:15:29.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:15:29.170 [DEBUG] [Thread-127482] [transport.py] [_log()] userauth is OK
2025-12-31T12:15:29.171 [DEBUG] [Thread-127482] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:15:29.171 [DEBUG] [Thread-127482] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:15:29.171 [DEBUG] [Thread-127482] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T12:15:29.171 [DEBUG] [Thread-127482] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:15:29.190 [INFO] [Thread-127482] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:15:29.190 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T12:15:29.190 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:15:30.023 [DEBUG] [Thread-127482] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:15:30.024 [DEBUG] [Thread-127482] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:15:30.072 [DEBUG] [Thread-127482] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:15:30.072 [DEBUG] [Thread-127482] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:15:30.082 [DEBUG] [Thread-127482] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:15:30.091 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:15:30.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T12:15:30.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-12-31T12:15:30.110 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:15:30.111 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:15:30.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:15:30.119 [DEBUG] [Thread-127482] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:15:39.456 [DEBUG] [Thread-127484 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:15:40.401 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:15:40.402 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:15:54.508 [DEBUG] [Thread-127485 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:16:00.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T12:16:00.142 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T12:16:00.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-12-31T12:16:00.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 12, 15, 46), 36.39, 8.02, 0.0, 7.71, 26.09, 0, 0, 0, 2, 0, 0),)
2025-12-31T12:16:00.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 12:15:46
2025-12-31T12:16:00.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T12:16:01.110 [DEBUG] [Thread-127486] [transport.py] [_log()] starting thread (client mode): 0xb6bb35b0
2025-12-31T12:16:01.110 [DEBUG] [Thread-127486] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:16:01.131 [DEBUG] [Thread-127486] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T12:16:01.132 [INFO] [Thread-127486] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T12:16:01.135 [DEBUG] [Thread-127486] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:16:01.135 [DEBUG] [Thread-127486] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T12:16:01.135 [DEBUG] [Thread-127486] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:16:01.135 [DEBUG] [Thread-127486] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:16:01.135 [DEBUG] [Thread-127486] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:16:01.135 [DEBUG] [Thread-127486] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:16:01.135 [DEBUG] [Thread-127486] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:16:01.135 [DEBUG] [Thread-127486] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:16:01.135 [DEBUG] [Thread-127486] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:16:01.135 [DEBUG] [Thread-127486] [transport.py] [_log()] client lang: <none>
2025-12-31T12:16:01.135 [DEBUG] [Thread-127486] [transport.py] [_log()] server lang: <none>
2025-12-31T12:16:01.135 [DEBUG] [Thread-127486] [transport.py] [_log()] kex follows: False
2025-12-31T12:16:01.135 [DEBUG] [Thread-127486] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:16:01.135 [DEBUG] [Thread-127486] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:16:01.135 [DEBUG] [Thread-127486] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:16:01.135 [DEBUG] [Thread-127486] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:16:01.135 [DEBUG] [Thread-127486] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:16:01.135 [DEBUG] [Thread-127486] [transport.py] [_log()] Compression: none
2025-12-31T12:16:01.135 [DEBUG] [Thread-127486] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:16:01.152 [DEBUG] [Thread-127486] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:16:01.153 [DEBUG] [Thread-127486] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:16:01.153 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T12:16:01.153 [DEBUG] [Thread-127486] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T12:16:01.153 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:16:01.154 [DEBUG] [Thread-127486] [transport.py] [_log()] userauth is OK
2025-12-31T12:16:01.154 [DEBUG] [Thread-127486] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:16:01.154 [DEBUG] [Thread-127486] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:16:01.154 [DEBUG] [Thread-127486] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T12:16:01.154 [DEBUG] [Thread-127486] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:16:01.173 [INFO] [Thread-127486] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:16:01.173 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:16:01.800 [DEBUG] [Thread-127486] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:16:01.800 [DEBUG] [Thread-127486] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:16:01.801 [DEBUG] [Thread-127486] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T12:16:01.841 [DEBUG] [Thread-127486] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:16:01.841 [DEBUG] [Thread-127486] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:16:01.845 [DEBUG] [Thread-127486] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:16:01.858 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:16:01.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T12:16:01.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T12:16:01.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T12:16:01.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:16:01.876 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T12:16:01.876 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:16:01.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:16:01.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T12:16:01.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.427574 -999.00  +26.10  16.06     13   -4.10 1 2 1 1 1   888    0 29.06 -32.86 ----- 28.0 16.1 321.8 26.1 34.1 -22.6 33.4 -21.4 32.7 -19.2 33.3 -20.8
2025-12-31T12:16:01.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T12:16:01.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T12:16:01.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.427574
2025-12-31T12:16:01.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T12:16:01.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T12:16:01.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T12:16:01.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T12:16:01.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T12:16:01.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T12:15:46', tmtdew=36.39, humidity=8.02, cloud=0.0, wind=7.71, temperature=26.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T10:15:42.394', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T12:16:01.879 [DEBUG] [Thread-127486] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:16:01.953 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T12:16:01.965 [DEBUG] [Thread-127489] [transport.py] [_log()] starting thread (client mode): 0xb6bb2350
2025-12-31T12:16:01.965 [DEBUG] [Thread-127489] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:16:01.979 [DEBUG] [Thread-127489] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T12:16:01.980 [INFO] [Thread-127489] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T12:16:01.987 [DEBUG] [Thread-127489] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:16:01.987 [DEBUG] [Thread-127489] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T12:16:01.987 [DEBUG] [Thread-127489] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:16:01.988 [DEBUG] [Thread-127489] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:16:01.988 [DEBUG] [Thread-127489] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:16:01.988 [DEBUG] [Thread-127489] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:16:01.988 [DEBUG] [Thread-127489] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:16:01.988 [DEBUG] [Thread-127489] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:16:01.988 [DEBUG] [Thread-127489] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:16:01.988 [DEBUG] [Thread-127489] [transport.py] [_log()] client lang: <none>
2025-12-31T12:16:01.988 [DEBUG] [Thread-127489] [transport.py] [_log()] server lang: <none>
2025-12-31T12:16:01.988 [DEBUG] [Thread-127489] [transport.py] [_log()] kex follows: False
2025-12-31T12:16:01.988 [DEBUG] [Thread-127489] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:16:01.988 [DEBUG] [Thread-127489] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:16:01.988 [DEBUG] [Thread-127489] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:16:01.988 [DEBUG] [Thread-127489] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:16:01.989 [DEBUG] [Thread-127489] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:16:01.989 [DEBUG] [Thread-127489] [transport.py] [_log()] Compression: none
2025-12-31T12:16:01.989 [DEBUG] [Thread-127489] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:16:02.054 [DEBUG] [Thread-127489] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:16:02.055 [DEBUG] [Thread-127489] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:16:02.055 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T12:16:02.056 [DEBUG] [Thread-127489] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T12:16:02.056 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:16:02.110 [DEBUG] [Thread-127489] [transport.py] [_log()] userauth is OK
2025-12-31T12:16:02.111 [DEBUG] [Thread-127489] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:16:02.111 [DEBUG] [Thread-127489] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:16:02.111 [DEBUG] [Thread-127489] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T12:16:02.111 [DEBUG] [Thread-127489] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:16:02.129 [INFO] [Thread-127489] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:16:02.130 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T12:16:02.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:16:02.979 [DEBUG] [Thread-127489] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:16:02.979 [DEBUG] [Thread-127489] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:16:03.027 [DEBUG] [Thread-127489] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:16:03.027 [DEBUG] [Thread-127489] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:16:03.036 [DEBUG] [Thread-127489] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:16:03.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:16:03.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T12:16:03.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T12:16:03.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:16:03.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:16:03.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:16:03.073 [DEBUG] [Thread-127489] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:16:09.546 [DEBUG] [Thread-127491 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:16:11.585 [DEBUG] [Thread-127492 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:16:24.592 [DEBUG] [Thread-127493 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:16:33.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T12:16:33.095 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T12:16:33.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T12:16:33.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 12, 16, 18), 36.46, 7.99, 0.0, 7.48, 26.14, 0, 0, 0, 2, 0, 0),)
2025-12-31T12:16:33.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 12:16:18
2025-12-31T12:16:33.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T12:16:34.069 [DEBUG] [Thread-127494] [transport.py] [_log()] starting thread (client mode): 0xb6b014e0
2025-12-31T12:16:34.069 [DEBUG] [Thread-127494] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:16:34.088 [DEBUG] [Thread-127494] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T12:16:34.088 [INFO] [Thread-127494] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T12:16:34.091 [DEBUG] [Thread-127494] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:16:34.091 [DEBUG] [Thread-127494] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T12:16:34.091 [DEBUG] [Thread-127494] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:16:34.091 [DEBUG] [Thread-127494] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:16:34.091 [DEBUG] [Thread-127494] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:16:34.091 [DEBUG] [Thread-127494] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:16:34.091 [DEBUG] [Thread-127494] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:16:34.091 [DEBUG] [Thread-127494] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:16:34.091 [DEBUG] [Thread-127494] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:16:34.091 [DEBUG] [Thread-127494] [transport.py] [_log()] client lang: <none>
2025-12-31T12:16:34.092 [DEBUG] [Thread-127494] [transport.py] [_log()] server lang: <none>
2025-12-31T12:16:34.092 [DEBUG] [Thread-127494] [transport.py] [_log()] kex follows: False
2025-12-31T12:16:34.092 [DEBUG] [Thread-127494] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:16:34.092 [DEBUG] [Thread-127494] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:16:34.092 [DEBUG] [Thread-127494] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:16:34.092 [DEBUG] [Thread-127494] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:16:34.092 [DEBUG] [Thread-127494] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:16:34.092 [DEBUG] [Thread-127494] [transport.py] [_log()] Compression: none
2025-12-31T12:16:34.092 [DEBUG] [Thread-127494] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:16:34.109 [DEBUG] [Thread-127494] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:16:34.110 [DEBUG] [Thread-127494] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:16:34.110 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T12:16:34.110 [DEBUG] [Thread-127494] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T12:16:34.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:16:34.112 [DEBUG] [Thread-127494] [transport.py] [_log()] userauth is OK
2025-12-31T12:16:34.112 [DEBUG] [Thread-127494] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:16:34.113 [DEBUG] [Thread-127494] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:16:34.113 [DEBUG] [Thread-127494] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T12:16:34.113 [DEBUG] [Thread-127494] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:16:34.136 [INFO] [Thread-127494] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:16:34.137 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:16:34.767 [DEBUG] [Thread-127494] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:16:34.767 [DEBUG] [Thread-127494] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:16:34.768 [DEBUG] [Thread-127494] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T12:16:34.808 [DEBUG] [Thread-127494] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:16:34.808 [DEBUG] [Thread-127494] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:16:34.812 [DEBUG] [Thread-127494] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:16:34.817 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:16:34.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T12:16:34.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T12:16:34.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T12:16:34.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:16:34.830 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T12:16:34.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:16:34.830 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:16:34.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T12:16:34.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.427921 -999.00  +26.60  24.44     12   -4.20 1 1 1 1 1   888    0 29.21 -27.30 ----- 28.1 24.4 289.2 34.0 33.8 -25.1 33.4 -22.7 32.3 -24.7 33.1 -22.1
2025-12-31T12:16:34.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T12:16:34.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T12:16:34.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.427921
2025-12-31T12:16:34.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T12:16:34.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T12:16:34.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T12:16:34.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T12:16:34.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T12:16:34.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T12:16:18', tmtdew=36.46, humidity=7.99, cloud=0.0, wind=7.48, temperature=26.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T10:16:12.374', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T12:16:34.832 [DEBUG] [Thread-127494] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:16:34.916 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T12:16:34.928 [DEBUG] [Thread-127497] [transport.py] [_log()] starting thread (client mode): 0xb6b208b0
2025-12-31T12:16:34.928 [DEBUG] [Thread-127497] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:16:34.948 [DEBUG] [Thread-127497] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T12:16:34.948 [INFO] [Thread-127497] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T12:16:34.956 [DEBUG] [Thread-127497] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:16:34.956 [DEBUG] [Thread-127497] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T12:16:34.956 [DEBUG] [Thread-127497] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:16:34.957 [DEBUG] [Thread-127497] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:16:34.957 [DEBUG] [Thread-127497] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:16:34.957 [DEBUG] [Thread-127497] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:16:34.957 [DEBUG] [Thread-127497] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:16:34.957 [DEBUG] [Thread-127497] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:16:34.957 [DEBUG] [Thread-127497] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:16:34.957 [DEBUG] [Thread-127497] [transport.py] [_log()] client lang: <none>
2025-12-31T12:16:34.957 [DEBUG] [Thread-127497] [transport.py] [_log()] server lang: <none>
2025-12-31T12:16:34.957 [DEBUG] [Thread-127497] [transport.py] [_log()] kex follows: False
2025-12-31T12:16:34.957 [DEBUG] [Thread-127497] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:16:34.957 [DEBUG] [Thread-127497] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:16:34.957 [DEBUG] [Thread-127497] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:16:34.957 [DEBUG] [Thread-127497] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:16:34.957 [DEBUG] [Thread-127497] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:16:34.957 [DEBUG] [Thread-127497] [transport.py] [_log()] Compression: none
2025-12-31T12:16:34.958 [DEBUG] [Thread-127497] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:16:35.015 [DEBUG] [Thread-127497] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:16:35.015 [DEBUG] [Thread-127497] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:16:35.016 [DEBUG] [Thread-127497] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T12:16:35.016 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T12:16:35.017 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:16:35.072 [DEBUG] [Thread-127497] [transport.py] [_log()] userauth is OK
2025-12-31T12:16:35.072 [DEBUG] [Thread-127497] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:16:35.072 [DEBUG] [Thread-127497] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:16:35.073 [DEBUG] [Thread-127497] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T12:16:35.073 [DEBUG] [Thread-127497] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:16:35.094 [INFO] [Thread-127497] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:16:35.094 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T12:16:35.095 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:16:35.922 [DEBUG] [Thread-127497] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:16:35.922 [DEBUG] [Thread-127497] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:16:35.971 [DEBUG] [Thread-127497] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:16:35.971 [DEBUG] [Thread-127497] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:16:35.980 [DEBUG] [Thread-127497] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:16:35.988 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:16:35.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T12:16:35.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T12:16:36.006 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:16:36.007 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:16:36.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:16:36.015 [DEBUG] [Thread-127497] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:16:39.629 [DEBUG] [Thread-127499 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:16:40.540 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:16:40.541 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:16:54.688 [DEBUG] [Thread-127500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:17:06.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T12:17:06.036 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T12:17:06.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-12-31T12:17:06.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 12, 16, 50), 37.18, 7.99, 0.0, 25.0, 26.69, 0, 0, 0, 2, 0, 0),)
2025-12-31T12:17:06.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 12:16:50
2025-12-31T12:17:06.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T12:17:07.033 [DEBUG] [Thread-127501] [transport.py] [_log()] starting thread (client mode): 0xb6b020e0
2025-12-31T12:17:07.033 [DEBUG] [Thread-127501] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:17:07.053 [DEBUG] [Thread-127501] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T12:17:07.053 [INFO] [Thread-127501] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T12:17:07.056 [DEBUG] [Thread-127501] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:17:07.057 [DEBUG] [Thread-127501] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T12:17:07.057 [DEBUG] [Thread-127501] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:17:07.057 [DEBUG] [Thread-127501] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:17:07.057 [DEBUG] [Thread-127501] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:17:07.057 [DEBUG] [Thread-127501] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:17:07.057 [DEBUG] [Thread-127501] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:17:07.057 [DEBUG] [Thread-127501] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:17:07.057 [DEBUG] [Thread-127501] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:17:07.057 [DEBUG] [Thread-127501] [transport.py] [_log()] client lang: <none>
2025-12-31T12:17:07.057 [DEBUG] [Thread-127501] [transport.py] [_log()] server lang: <none>
2025-12-31T12:17:07.057 [DEBUG] [Thread-127501] [transport.py] [_log()] kex follows: False
2025-12-31T12:17:07.057 [DEBUG] [Thread-127501] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:17:07.057 [DEBUG] [Thread-127501] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:17:07.057 [DEBUG] [Thread-127501] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:17:07.057 [DEBUG] [Thread-127501] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:17:07.057 [DEBUG] [Thread-127501] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:17:07.057 [DEBUG] [Thread-127501] [transport.py] [_log()] Compression: none
2025-12-31T12:17:07.057 [DEBUG] [Thread-127501] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:17:07.073 [DEBUG] [Thread-127501] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:17:07.074 [DEBUG] [Thread-127501] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:17:07.074 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T12:17:07.074 [DEBUG] [Thread-127501] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T12:17:07.075 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:17:07.076 [DEBUG] [Thread-127501] [transport.py] [_log()] userauth is OK
2025-12-31T12:17:07.076 [DEBUG] [Thread-127501] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:17:07.077 [DEBUG] [Thread-127501] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:17:07.077 [DEBUG] [Thread-127501] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T12:17:07.077 [DEBUG] [Thread-127501] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:17:07.099 [INFO] [Thread-127501] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:17:07.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:17:07.756 [DEBUG] [Thread-127501] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:17:07.756 [DEBUG] [Thread-127501] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:17:07.757 [DEBUG] [Thread-127501] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T12:17:07.797 [DEBUG] [Thread-127501] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:17:07.797 [DEBUG] [Thread-127501] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:17:07.801 [DEBUG] [Thread-127501] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:17:07.812 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:17:07.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T12:17:07.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T12:17:07.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T12:17:07.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:17:07.824 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T12:17:07.824 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:17:07.824 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:17:07.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T12:17:07.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.428268 -999.00  +26.60  24.23     12   -4.30 1 1 1 1 1   888    0 29.24 -19.30 ----- 29.3 24.2 294.6 37.9 33.6 -26.7 33.1 -22.4 32.2 -29.1 32.9 -22.7
2025-12-31T12:17:07.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T12:17:07.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T12:17:07.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.428268
2025-12-31T12:17:07.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T12:17:07.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T12:17:07.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T12:17:07.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T12:17:07.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T12:17:07.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T12:16:50', tmtdew=37.18, humidity=7.99, cloud=0.0, wind=25.0, temperature=26.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T10:16:42.355', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T12:17:07.827 [DEBUG] [Thread-127501] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:17:07.910 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T12:17:07.922 [DEBUG] [Thread-127504] [transport.py] [_log()] starting thread (client mode): 0xbbfcf1f0
2025-12-31T12:17:07.922 [DEBUG] [Thread-127504] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:17:07.937 [DEBUG] [Thread-127504] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T12:17:07.937 [INFO] [Thread-127504] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T12:17:07.945 [DEBUG] [Thread-127504] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:17:07.945 [DEBUG] [Thread-127504] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T12:17:07.945 [DEBUG] [Thread-127504] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:17:07.946 [DEBUG] [Thread-127504] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:17:07.946 [DEBUG] [Thread-127504] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:17:07.946 [DEBUG] [Thread-127504] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:17:07.946 [DEBUG] [Thread-127504] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:17:07.946 [DEBUG] [Thread-127504] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:17:07.946 [DEBUG] [Thread-127504] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:17:07.946 [DEBUG] [Thread-127504] [transport.py] [_log()] client lang: <none>
2025-12-31T12:17:07.946 [DEBUG] [Thread-127504] [transport.py] [_log()] server lang: <none>
2025-12-31T12:17:07.946 [DEBUG] [Thread-127504] [transport.py] [_log()] kex follows: False
2025-12-31T12:17:07.947 [DEBUG] [Thread-127504] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:17:07.947 [DEBUG] [Thread-127504] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:17:07.947 [DEBUG] [Thread-127504] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:17:07.947 [DEBUG] [Thread-127504] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:17:07.947 [DEBUG] [Thread-127504] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:17:07.947 [DEBUG] [Thread-127504] [transport.py] [_log()] Compression: none
2025-12-31T12:17:07.947 [DEBUG] [Thread-127504] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:17:08.004 [DEBUG] [Thread-127504] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:17:08.005 [DEBUG] [Thread-127504] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:17:08.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T12:17:08.007 [DEBUG] [Thread-127504] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T12:17:08.007 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:17:08.063 [DEBUG] [Thread-127504] [transport.py] [_log()] userauth is OK
2025-12-31T12:17:08.063 [DEBUG] [Thread-127504] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:17:08.064 [DEBUG] [Thread-127504] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:17:08.064 [DEBUG] [Thread-127504] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T12:17:08.064 [DEBUG] [Thread-127504] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:17:08.087 [INFO] [Thread-127504] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:17:08.088 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T12:17:08.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:17:08.915 [DEBUG] [Thread-127504] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:17:08.916 [DEBUG] [Thread-127504] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:17:08.964 [DEBUG] [Thread-127504] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:17:08.964 [DEBUG] [Thread-127504] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:17:08.973 [DEBUG] [Thread-127504] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:17:08.982 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:17:08.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T12:17:08.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T12:17:09.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:17:09.004 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:17:09.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:17:09.013 [DEBUG] [Thread-127504] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:17:09.718 [DEBUG] [Thread-127506 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:17:11.638 [DEBUG] [Thread-127507 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:17:24.770 [DEBUG] [Thread-127508 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:17:39.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T12:17:39.012 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T12:17:39.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T12:17:39.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 12, 17, 22), 37.46, 7.84, 0.0, 27.22, 26.82, 0, 0, 0, 2, 0, 0),)
2025-12-31T12:17:39.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 12:17:22
2025-12-31T12:17:39.801 [DEBUG] [Thread-127509 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:17:39.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T12:17:40.002 [DEBUG] [Thread-127510] [transport.py] [_log()] starting thread (client mode): 0xbbfcf0d0
2025-12-31T12:17:40.002 [DEBUG] [Thread-127510] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:17:40.023 [DEBUG] [Thread-127510] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T12:17:40.023 [INFO] [Thread-127510] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T12:17:40.026 [DEBUG] [Thread-127510] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:17:40.027 [DEBUG] [Thread-127510] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T12:17:40.027 [DEBUG] [Thread-127510] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:17:40.027 [DEBUG] [Thread-127510] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:17:40.027 [DEBUG] [Thread-127510] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:17:40.027 [DEBUG] [Thread-127510] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:17:40.027 [DEBUG] [Thread-127510] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:17:40.027 [DEBUG] [Thread-127510] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:17:40.027 [DEBUG] [Thread-127510] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:17:40.027 [DEBUG] [Thread-127510] [transport.py] [_log()] client lang: <none>
2025-12-31T12:17:40.027 [DEBUG] [Thread-127510] [transport.py] [_log()] server lang: <none>
2025-12-31T12:17:40.027 [DEBUG] [Thread-127510] [transport.py] [_log()] kex follows: False
2025-12-31T12:17:40.027 [DEBUG] [Thread-127510] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:17:40.027 [DEBUG] [Thread-127510] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:17:40.027 [DEBUG] [Thread-127510] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:17:40.027 [DEBUG] [Thread-127510] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:17:40.027 [DEBUG] [Thread-127510] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:17:40.027 [DEBUG] [Thread-127510] [transport.py] [_log()] Compression: none
2025-12-31T12:17:40.027 [DEBUG] [Thread-127510] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:17:40.044 [DEBUG] [Thread-127510] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:17:40.045 [DEBUG] [Thread-127510] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:17:40.046 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T12:17:40.046 [DEBUG] [Thread-127510] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T12:17:40.047 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:17:40.048 [DEBUG] [Thread-127510] [transport.py] [_log()] userauth is OK
2025-12-31T12:17:40.049 [DEBUG] [Thread-127510] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:17:40.049 [DEBUG] [Thread-127510] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:17:40.049 [DEBUG] [Thread-127510] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T12:17:40.049 [DEBUG] [Thread-127510] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:17:40.073 [INFO] [Thread-127510] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:17:40.074 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:17:40.690 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:17:40.691 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:17:40.708 [DEBUG] [Thread-127510] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:17:40.709 [DEBUG] [Thread-127510] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:17:40.709 [DEBUG] [Thread-127510] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T12:17:40.749 [DEBUG] [Thread-127510] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:17:40.750 [DEBUG] [Thread-127510] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:17:40.753 [DEBUG] [Thread-127510] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:17:40.765 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:17:40.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T12:17:40.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T12:17:40.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T12:17:40.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:17:40.776 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T12:17:40.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:17:40.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:17:40.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T12:17:40.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.428615 -999.00  +26.80  25.07     12   -4.60 1 2 1 1 1   888    0 29.76 -14.03 ----- 26.0 25.1 276.4 33.9 33.5 -24.3 33.0 -22.1 32.0 -20.3 32.7 -22.0
2025-12-31T12:17:40.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T12:17:40.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T12:17:40.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.428615
2025-12-31T12:17:40.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T12:17:40.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T12:17:40.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T12:17:40.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T12:17:40.779 [DEBUG] [Thread-127510] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:17:40.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T12:17:40.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T12:17:22', tmtdew=37.46, humidity=7.84, cloud=0.0, wind=27.22, temperature=26.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T10:17:12.336', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T12:17: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-12-31T12:17:40.883 [DEBUG] [Thread-127513] [transport.py] [_log()] starting thread (client mode): 0xb9547010
2025-12-31T12:17:40.883 [DEBUG] [Thread-127513] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:17:40.898 [DEBUG] [Thread-127513] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T12:17:40.898 [INFO] [Thread-127513] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T12:17:40.905 [DEBUG] [Thread-127513] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:17:40.906 [DEBUG] [Thread-127513] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T12:17:40.906 [DEBUG] [Thread-127513] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:17:40.906 [DEBUG] [Thread-127513] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:17:40.906 [DEBUG] [Thread-127513] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:17:40.906 [DEBUG] [Thread-127513] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:17:40.906 [DEBUG] [Thread-127513] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:17:40.906 [DEBUG] [Thread-127513] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:17:40.907 [DEBUG] [Thread-127513] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:17:40.907 [DEBUG] [Thread-127513] [transport.py] [_log()] client lang: <none>
2025-12-31T12:17:40.907 [DEBUG] [Thread-127513] [transport.py] [_log()] server lang: <none>
2025-12-31T12:17:40.907 [DEBUG] [Thread-127513] [transport.py] [_log()] kex follows: False
2025-12-31T12:17:40.907 [DEBUG] [Thread-127513] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:17:40.907 [DEBUG] [Thread-127513] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:17:40.907 [DEBUG] [Thread-127513] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:17:40.907 [DEBUG] [Thread-127513] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:17:40.907 [DEBUG] [Thread-127513] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:17:40.908 [DEBUG] [Thread-127513] [transport.py] [_log()] Compression: none
2025-12-31T12:17:40.908 [DEBUG] [Thread-127513] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:17:40.963 [DEBUG] [Thread-127513] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:17:40.963 [DEBUG] [Thread-127513] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:17:40.964 [DEBUG] [Thread-127513] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T12:17:40.964 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T12:17:40.965 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:17:41.019 [DEBUG] [Thread-127513] [transport.py] [_log()] userauth is OK
2025-12-31T12:17:41.019 [DEBUG] [Thread-127513] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:17:41.019 [DEBUG] [Thread-127513] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:17:41.019 [DEBUG] [Thread-127513] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T12:17:41.019 [DEBUG] [Thread-127513] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:17:41.040 [INFO] [Thread-127513] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:17:41.041 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T12:17:41.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:17:41.855 [DEBUG] [Thread-127513] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:17:41.855 [DEBUG] [Thread-127513] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:17:41.903 [DEBUG] [Thread-127513] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:17:41.903 [DEBUG] [Thread-127513] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:17:41.912 [DEBUG] [Thread-127513] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:17:41.921 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:17:41.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T12:17:41.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T12:17:41.940 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:17:41.941 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:17:41.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:17:41.949 [DEBUG] [Thread-127513] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:17:54.835 [DEBUG] [Thread-127515 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:18:09.879 [DEBUG] [Thread-127516 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:18:11.693 [DEBUG] [Thread-127517 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:18:11.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T12:18:11.971 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T12:18:11.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T12:18:12.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 12, 17, 54), 37.25, 7.69, 0.0, 29.11, 25.84, 0, 0, 0, 2, 0, 0),)
2025-12-31T12:18:12.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 12:17:54
2025-12-31T12:18:12.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T12:18:13.015 [DEBUG] [Thread-127518] [transport.py] [_log()] starting thread (client mode): 0xb6bb3c70
2025-12-31T12:18:13.016 [DEBUG] [Thread-127518] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:18:13.040 [DEBUG] [Thread-127518] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T12:18:13.041 [INFO] [Thread-127518] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T12:18:13.044 [DEBUG] [Thread-127518] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:18:13.045 [DEBUG] [Thread-127518] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T12:18:13.045 [DEBUG] [Thread-127518] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:18:13.045 [DEBUG] [Thread-127518] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:18:13.045 [DEBUG] [Thread-127518] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:18:13.045 [DEBUG] [Thread-127518] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:18:13.045 [DEBUG] [Thread-127518] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:18:13.045 [DEBUG] [Thread-127518] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:18:13.045 [DEBUG] [Thread-127518] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:18:13.045 [DEBUG] [Thread-127518] [transport.py] [_log()] client lang: <none>
2025-12-31T12:18:13.045 [DEBUG] [Thread-127518] [transport.py] [_log()] server lang: <none>
2025-12-31T12:18:13.045 [DEBUG] [Thread-127518] [transport.py] [_log()] kex follows: False
2025-12-31T12:18:13.045 [DEBUG] [Thread-127518] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:18:13.045 [DEBUG] [Thread-127518] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:18:13.045 [DEBUG] [Thread-127518] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:18:13.045 [DEBUG] [Thread-127518] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:18:13.045 [DEBUG] [Thread-127518] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:18:13.045 [DEBUG] [Thread-127518] [transport.py] [_log()] Compression: none
2025-12-31T12:18:13.045 [DEBUG] [Thread-127518] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:18:13.062 [DEBUG] [Thread-127518] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:18:13.062 [DEBUG] [Thread-127518] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:18:13.063 [DEBUG] [Thread-127518] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T12:18:13.063 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T12:18:13.063 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:18:13.063 [DEBUG] [Thread-127518] [transport.py] [_log()] userauth is OK
2025-12-31T12:18:13.064 [DEBUG] [Thread-127518] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:18:13.064 [DEBUG] [Thread-127518] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:18:13.064 [DEBUG] [Thread-127518] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T12:18:13.064 [DEBUG] [Thread-127518] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:18:13.076 [INFO] [Thread-127518] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:18:13.076 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:18:13.730 [DEBUG] [Thread-127518] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:18:13.730 [DEBUG] [Thread-127518] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:18:13.730 [DEBUG] [Thread-127518] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T12:18:13.770 [DEBUG] [Thread-127518] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:18:13.770 [DEBUG] [Thread-127518] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:18:13.773 [DEBUG] [Thread-127518] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:18:13.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:18:13.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T12:18:13.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T12:18:13.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T12:18:13.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:18:13.792 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T12:18:13.792 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:18:13.792 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:18:13.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T12:18:13.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.428962 -999.00  +25.80  25.86     12   -4.80 1 1 1 1 1   888    0 29.26 -6.64 ----- 26.3 25.9 288.4 31.8 32.9 -25.9 32.6 -23.2 31.4 -25.7 -999.0 -999.0
2025-12-31T12:18:13.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T12:18:13.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T12:18:13.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.428962
2025-12-31T12:18:13.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T12:18:13.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T12:18:13.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T12:18:13.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T12:18:13.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T12:18:13.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T12:17:54', tmtdew=37.25, humidity=7.69, cloud=0.0, wind=29.11, temperature=25.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T10:17:42.317', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T12:18:13.793 [DEBUG] [Thread-127518] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:18:13.869 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T12:18:13.881 [DEBUG] [Thread-127521] [transport.py] [_log()] starting thread (client mode): 0xb6b21ea0
2025-12-31T12:18:13.881 [DEBUG] [Thread-127521] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:18:13.896 [DEBUG] [Thread-127521] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T12:18:13.896 [INFO] [Thread-127521] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T12:18:13.903 [DEBUG] [Thread-127521] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:18:13.903 [DEBUG] [Thread-127521] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T12:18:13.903 [DEBUG] [Thread-127521] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:18:13.903 [DEBUG] [Thread-127521] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:18:13.903 [DEBUG] [Thread-127521] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:18:13.903 [DEBUG] [Thread-127521] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:18:13.903 [DEBUG] [Thread-127521] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:18:13.903 [DEBUG] [Thread-127521] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:18:13.903 [DEBUG] [Thread-127521] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:18:13.903 [DEBUG] [Thread-127521] [transport.py] [_log()] client lang: <none>
2025-12-31T12:18:13.903 [DEBUG] [Thread-127521] [transport.py] [_log()] server lang: <none>
2025-12-31T12:18:13.903 [DEBUG] [Thread-127521] [transport.py] [_log()] kex follows: False
2025-12-31T12:18:13.903 [DEBUG] [Thread-127521] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:18:13.903 [DEBUG] [Thread-127521] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:18:13.903 [DEBUG] [Thread-127521] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:18:13.903 [DEBUG] [Thread-127521] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:18:13.903 [DEBUG] [Thread-127521] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:18:13.903 [DEBUG] [Thread-127521] [transport.py] [_log()] Compression: none
2025-12-31T12:18:13.903 [DEBUG] [Thread-127521] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:18:13.958 [DEBUG] [Thread-127521] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:18:13.958 [DEBUG] [Thread-127521] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:18:13.958 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T12:18:13.958 [DEBUG] [Thread-127521] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T12:18:13.958 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:18:14.015 [DEBUG] [Thread-127521] [transport.py] [_log()] userauth is OK
2025-12-31T12:18:14.015 [DEBUG] [Thread-127521] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:18:14.015 [DEBUG] [Thread-127521] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:18:14.015 [DEBUG] [Thread-127521] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T12:18:14.015 [DEBUG] [Thread-127521] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:18:14.029 [INFO] [Thread-127521] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:18:14.029 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T12:18:14.029 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:18:14.897 [DEBUG] [Thread-127521] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:18:14.897 [DEBUG] [Thread-127521] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:18:14.946 [DEBUG] [Thread-127521] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:18:14.946 [DEBUG] [Thread-127521] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:18:14.958 [DEBUG] [Thread-127521] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:18:14.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:18:14.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T12:18:14.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T12:18:14.988 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:18:14.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:18:14.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:18:14.999 [DEBUG] [Thread-127521] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:18:24.909 [DEBUG] [Thread-127523 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:18:39.957 [DEBUG] [Thread-127524 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:18:40.833 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:18:40.834 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:18:45.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T12:18:45.019 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T12:18:45.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T12:18:45.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 12, 18, 26), 37.39, 7.61, 0.0, 28.11, 25.82, 0, 0, 0, 2, 0, 0),)
2025-12-31T12:18:45.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 12:18:26
2025-12-31T12:18:45.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T12:18:46.014 [DEBUG] [Thread-127525] [transport.py] [_log()] starting thread (client mode): 0xb95b1270
2025-12-31T12:18:46.014 [DEBUG] [Thread-127525] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:18:46.035 [DEBUG] [Thread-127525] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T12:18:46.035 [INFO] [Thread-127525] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T12:18:46.038 [DEBUG] [Thread-127525] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:18:46.038 [DEBUG] [Thread-127525] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T12:18:46.038 [DEBUG] [Thread-127525] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:18:46.038 [DEBUG] [Thread-127525] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:18:46.038 [DEBUG] [Thread-127525] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:18:46.038 [DEBUG] [Thread-127525] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:18:46.038 [DEBUG] [Thread-127525] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:18:46.038 [DEBUG] [Thread-127525] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:18:46.038 [DEBUG] [Thread-127525] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:18:46.038 [DEBUG] [Thread-127525] [transport.py] [_log()] client lang: <none>
2025-12-31T12:18:46.038 [DEBUG] [Thread-127525] [transport.py] [_log()] server lang: <none>
2025-12-31T12:18:46.038 [DEBUG] [Thread-127525] [transport.py] [_log()] kex follows: False
2025-12-31T12:18:46.039 [DEBUG] [Thread-127525] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:18:46.039 [DEBUG] [Thread-127525] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:18:46.039 [DEBUG] [Thread-127525] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:18:46.039 [DEBUG] [Thread-127525] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:18:46.039 [DEBUG] [Thread-127525] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:18:46.039 [DEBUG] [Thread-127525] [transport.py] [_log()] Compression: none
2025-12-31T12:18:46.039 [DEBUG] [Thread-127525] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:18:46.058 [DEBUG] [Thread-127525] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:18:46.058 [DEBUG] [Thread-127525] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:18:46.059 [DEBUG] [Thread-127525] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T12:18:46.059 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T12:18:46.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:18:46.061 [DEBUG] [Thread-127525] [transport.py] [_log()] userauth is OK
2025-12-31T12:18:46.061 [DEBUG] [Thread-127525] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:18:46.061 [DEBUG] [Thread-127525] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:18:46.061 [DEBUG] [Thread-127525] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T12:18:46.061 [DEBUG] [Thread-127525] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:18:46.086 [INFO] [Thread-127525] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:18:46.087 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:18:46.730 [DEBUG] [Thread-127525] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:18:46.731 [DEBUG] [Thread-127525] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:18:46.731 [DEBUG] [Thread-127525] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T12:18:46.772 [DEBUG] [Thread-127525] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:18:46.772 [DEBUG] [Thread-127525] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:18:46.775 [DEBUG] [Thread-127525] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:18:46.789 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:18:46.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T12:18:46.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T12:18:46.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T12:18:46.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:18:46.802 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T12:18:46.802 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:18:46.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:18:46.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T12:18:46.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.429310 -999.00  +25.80  24.20     12   -4.80 1 2 1 1 1   888    0 29.55 -3.27 ----- 24.3 24.2 275.4 27.4 32.8 -24.5 32.4 -22.0 31.5 -23.2 32.2 -21.0
2025-12-31T12:18:46.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T12:18:46.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T12:18:46.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.429310
2025-12-31T12:18:46.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T12:18:46.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T12:18:46.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T12:18:46.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T12:18:46.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T12:18:46.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T12:18:26', tmtdew=37.39, humidity=7.61, cloud=0.0, wind=28.11, temperature=25.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T10:18:12.384', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T12:18:46.805 [DEBUG] [Thread-127525] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:18:46.888 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T12:18:46.898 [DEBUG] [Thread-127528] [transport.py] [_log()] starting thread (client mode): 0xb6b02230
2025-12-31T12:18:46.898 [DEBUG] [Thread-127528] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:18:46.912 [DEBUG] [Thread-127528] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T12:18:46.913 [INFO] [Thread-127528] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T12:18:46.920 [DEBUG] [Thread-127528] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:18:46.921 [DEBUG] [Thread-127528] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T12:18:46.921 [DEBUG] [Thread-127528] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:18:46.921 [DEBUG] [Thread-127528] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:18:46.921 [DEBUG] [Thread-127528] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:18:46.921 [DEBUG] [Thread-127528] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:18:46.921 [DEBUG] [Thread-127528] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:18:46.921 [DEBUG] [Thread-127528] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:18:46.921 [DEBUG] [Thread-127528] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:18:46.921 [DEBUG] [Thread-127528] [transport.py] [_log()] client lang: <none>
2025-12-31T12:18:46.921 [DEBUG] [Thread-127528] [transport.py] [_log()] server lang: <none>
2025-12-31T12:18:46.922 [DEBUG] [Thread-127528] [transport.py] [_log()] kex follows: False
2025-12-31T12:18:46.922 [DEBUG] [Thread-127528] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:18:46.922 [DEBUG] [Thread-127528] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:18:46.922 [DEBUG] [Thread-127528] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:18:46.922 [DEBUG] [Thread-127528] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:18:46.922 [DEBUG] [Thread-127528] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:18:46.922 [DEBUG] [Thread-127528] [transport.py] [_log()] Compression: none
2025-12-31T12:18:46.922 [DEBUG] [Thread-127528] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:18:46.978 [DEBUG] [Thread-127528] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:18:46.979 [DEBUG] [Thread-127528] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:18:46.980 [DEBUG] [Thread-127528] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T12:18:46.980 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T12:18:46.981 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:18:47.037 [DEBUG] [Thread-127528] [transport.py] [_log()] userauth is OK
2025-12-31T12:18:47.038 [DEBUG] [Thread-127528] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:18:47.038 [DEBUG] [Thread-127528] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:18:47.039 [DEBUG] [Thread-127528] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T12:18:47.039 [DEBUG] [Thread-127528] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:18:47.057 [INFO] [Thread-127528] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:18:47.058 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T12:18:47.059 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:18:47.922 [DEBUG] [Thread-127528] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:18:47.922 [DEBUG] [Thread-127528] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:18:47.970 [DEBUG] [Thread-127528] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:18:47.970 [DEBUG] [Thread-127528] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:18:47.979 [DEBUG] [Thread-127528] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:18:47.988 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:18: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-12-31T12:18:47.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T12:18:48.007 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:18:48.007 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:18:48.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:18:48.016 [DEBUG] [Thread-127528] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:18:54.990 [DEBUG] [Thread-127530 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:19:10.030 [DEBUG] [Thread-127531 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:19:11.753 [DEBUG] [Thread-127532 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:19:18.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T12:19:18.026 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T12:19:18.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T12:19:18.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 12, 18, 58), 37.47, 7.59, 0.0, 25.67, 26.12, 0, 0, 0, 2, 0, 0),)
2025-12-31T12:19:18.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 12:18:58
2025-12-31T12:19:18.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T12:19:19.027 [DEBUG] [Thread-127533] [transport.py] [_log()] starting thread (client mode): 0xb6bb1330
2025-12-31T12:19:19.027 [DEBUG] [Thread-127533] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:19:19.049 [DEBUG] [Thread-127533] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T12:19:19.049 [INFO] [Thread-127533] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T12:19:19.052 [DEBUG] [Thread-127533] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:19:19.052 [DEBUG] [Thread-127533] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T12:19:19.052 [DEBUG] [Thread-127533] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:19:19.052 [DEBUG] [Thread-127533] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:19:19.053 [DEBUG] [Thread-127533] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:19:19.053 [DEBUG] [Thread-127533] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:19:19.053 [DEBUG] [Thread-127533] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:19:19.053 [DEBUG] [Thread-127533] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:19:19.053 [DEBUG] [Thread-127533] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:19:19.053 [DEBUG] [Thread-127533] [transport.py] [_log()] client lang: <none>
2025-12-31T12:19:19.053 [DEBUG] [Thread-127533] [transport.py] [_log()] server lang: <none>
2025-12-31T12:19:19.053 [DEBUG] [Thread-127533] [transport.py] [_log()] kex follows: False
2025-12-31T12:19:19.053 [DEBUG] [Thread-127533] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:19:19.053 [DEBUG] [Thread-127533] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:19:19.053 [DEBUG] [Thread-127533] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:19:19.054 [DEBUG] [Thread-127533] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:19:19.054 [DEBUG] [Thread-127533] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:19:19.054 [DEBUG] [Thread-127533] [transport.py] [_log()] Compression: none
2025-12-31T12:19:19.054 [DEBUG] [Thread-127533] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:19:19.073 [DEBUG] [Thread-127533] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:19:19.073 [DEBUG] [Thread-127533] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:19:19.074 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T12:19:19.074 [DEBUG] [Thread-127533] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T12:19:19.075 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:19:19.076 [DEBUG] [Thread-127533] [transport.py] [_log()] userauth is OK
2025-12-31T12:19:19.077 [DEBUG] [Thread-127533] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:19:19.077 [DEBUG] [Thread-127533] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:19:19.077 [DEBUG] [Thread-127533] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T12:19:19.077 [DEBUG] [Thread-127533] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:19:19.098 [INFO] [Thread-127533] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:19:19.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:19:19.741 [DEBUG] [Thread-127533] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:19:19.741 [DEBUG] [Thread-127533] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:19:19.742 [DEBUG] [Thread-127533] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T12:19:19.782 [DEBUG] [Thread-127533] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:19:19.782 [DEBUG] [Thread-127533] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:19:19.785 [DEBUG] [Thread-127533] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:19:19.798 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:19:19.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T12:19:19.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T12:19:19.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T12:19:19.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:19:19.810 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T12:19:19.810 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:19:19.810 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:19:19.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T12:19:19.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.429657 -999.00  +25.70  19.64     12   -4.90 1 2 1 1 1   888    0 30.25 2.06 ----- 19.4 19.6 281.8 25.8 32.4 -24.8 32.2 -22.0 30.9 -21.0 31.9 -21.7
2025-12-31T12:19:19.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T12:19:19.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T12:19:19.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.429657
2025-12-31T12:19:19.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T12:19:19.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T12:19:19.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T12:19:19.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T12:19:19.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T12:19:19.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T12:18:58', tmtdew=37.47, humidity=7.59, cloud=0.0, wind=25.67, temperature=26.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T10:18:42.365', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T12:19:19.813 [DEBUG] [Thread-127533] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:19:19.896 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T12:19:19.908 [DEBUG] [Thread-127536] [transport.py] [_log()] starting thread (client mode): 0xb6b03b80
2025-12-31T12:19:19.908 [DEBUG] [Thread-127536] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:19:19.922 [DEBUG] [Thread-127536] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T12:19:19.922 [INFO] [Thread-127536] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T12:19:19.930 [DEBUG] [Thread-127536] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:19:19.930 [DEBUG] [Thread-127536] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T12:19:19.930 [DEBUG] [Thread-127536] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:19:19.930 [DEBUG] [Thread-127536] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:19:19.931 [DEBUG] [Thread-127536] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:19:19.931 [DEBUG] [Thread-127536] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:19:19.931 [DEBUG] [Thread-127536] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:19:19.931 [DEBUG] [Thread-127536] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:19:19.931 [DEBUG] [Thread-127536] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:19:19.931 [DEBUG] [Thread-127536] [transport.py] [_log()] client lang: <none>
2025-12-31T12:19:19.931 [DEBUG] [Thread-127536] [transport.py] [_log()] server lang: <none>
2025-12-31T12:19:19.931 [DEBUG] [Thread-127536] [transport.py] [_log()] kex follows: False
2025-12-31T12:19:19.931 [DEBUG] [Thread-127536] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:19:19.931 [DEBUG] [Thread-127536] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:19:19.931 [DEBUG] [Thread-127536] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:19:19.931 [DEBUG] [Thread-127536] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:19:19.931 [DEBUG] [Thread-127536] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:19:19.931 [DEBUG] [Thread-127536] [transport.py] [_log()] Compression: none
2025-12-31T12:19:19.931 [DEBUG] [Thread-127536] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:19:19.989 [DEBUG] [Thread-127536] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:19:19.989 [DEBUG] [Thread-127536] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:19:19.989 [DEBUG] [Thread-127536] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T12:19:19.989 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T12:19:19.989 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:19:20.046 [DEBUG] [Thread-127536] [transport.py] [_log()] userauth is OK
2025-12-31T12:19:20.047 [DEBUG] [Thread-127536] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:19:20.047 [DEBUG] [Thread-127536] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:19:20.047 [DEBUG] [Thread-127536] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T12:19:20.047 [DEBUG] [Thread-127536] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:19:20.065 [INFO] [Thread-127536] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:19:20.066 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T12:19:20.066 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:19:20.887 [DEBUG] [Thread-127536] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:19:20.887 [DEBUG] [Thread-127536] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:19:20.935 [DEBUG] [Thread-127536] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:19:20.936 [DEBUG] [Thread-127536] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:19:20.945 [DEBUG] [Thread-127536] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:19:20.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:19:20.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T12:19:20.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T12:19:20.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:19:20.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:19:20.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:19:20.983 [DEBUG] [Thread-127536] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:19:25.066 [DEBUG] [Thread-127538 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:19:40.110 [DEBUG] [Thread-127539 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:19:40.972 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:19:40.974 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:19:50.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T12:19:50.993 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T12:19:50.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T12:19:51.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 12, 19, 30), 37.3, 7.64, 0.0, 22.06, 25.83, 0, 0, 0, 2, 0, 0),)
2025-12-31T12:19:51.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 12:19:30
2025-12-31T12:19:51.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T12:19:51.968 [DEBUG] [Thread-127540] [transport.py] [_log()] starting thread (client mode): 0xb95b3e20
2025-12-31T12:19:51.968 [DEBUG] [Thread-127540] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:19:51.989 [DEBUG] [Thread-127540] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T12:19:51.989 [INFO] [Thread-127540] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T12:19:51.992 [DEBUG] [Thread-127540] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:19:51.992 [DEBUG] [Thread-127540] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T12:19:51.992 [DEBUG] [Thread-127540] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:19:51.992 [DEBUG] [Thread-127540] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:19:51.992 [DEBUG] [Thread-127540] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:19:51.992 [DEBUG] [Thread-127540] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:19:51.993 [DEBUG] [Thread-127540] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:19:51.993 [DEBUG] [Thread-127540] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:19:51.993 [DEBUG] [Thread-127540] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:19:51.993 [DEBUG] [Thread-127540] [transport.py] [_log()] client lang: <none>
2025-12-31T12:19:51.993 [DEBUG] [Thread-127540] [transport.py] [_log()] server lang: <none>
2025-12-31T12:19:51.993 [DEBUG] [Thread-127540] [transport.py] [_log()] kex follows: False
2025-12-31T12:19:51.993 [DEBUG] [Thread-127540] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:19:51.993 [DEBUG] [Thread-127540] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:19:51.993 [DEBUG] [Thread-127540] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:19:51.993 [DEBUG] [Thread-127540] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:19:51.993 [DEBUG] [Thread-127540] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:19:51.993 [DEBUG] [Thread-127540] [transport.py] [_log()] Compression: none
2025-12-31T12:19:51.993 [DEBUG] [Thread-127540] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:19:52.010 [DEBUG] [Thread-127540] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:19:52.011 [DEBUG] [Thread-127540] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:19:52.011 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T12:19:52.011 [DEBUG] [Thread-127540] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T12:19:52.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:19:52.014 [DEBUG] [Thread-127540] [transport.py] [_log()] userauth is OK
2025-12-31T12:19:52.014 [DEBUG] [Thread-127540] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:19:52.014 [DEBUG] [Thread-127540] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:19:52.014 [DEBUG] [Thread-127540] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T12:19:52.014 [DEBUG] [Thread-127540] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:19:52.032 [INFO] [Thread-127540] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:19:52.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:19:52.599 [DEBUG] [Thread-127540] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:19:52.600 [DEBUG] [Thread-127540] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:19:52.600 [DEBUG] [Thread-127540] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T12:19:52.641 [DEBUG] [Thread-127540] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:19:52.641 [DEBUG] [Thread-127540] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:19:52.645 [DEBUG] [Thread-127540] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:19:52.658 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:19:52.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T12:19:52.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T12:19:52.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T12:19:52.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:19:52.670 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T12:19:52.670 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:19:52.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:19:52.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T12:19:52.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.430004 -999.00  +25.60  25.01     13   -4.80 1 2 1 1 1   888    0 29.93 5.25 ----- 20.5 25.0 287.6 30.9 32.5 -22.0 32.1 -20.9 31.1 -19.0 31.8 -19.8
2025-12-31T12:19:52.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T12:19:52.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T12:19:52.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.430004
2025-12-31T12:19:52.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T12:19:52.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T12:19:52.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T12:19:52.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T12:19:52.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T12:19:52.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T12:19:30', tmtdew=37.3, humidity=7.64, cloud=0.0, wind=22.06, temperature=25.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T10:19:12.346', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T12:19:52.673 [DEBUG] [Thread-127540] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:19:52.757 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T12:19:52.769 [DEBUG] [Thread-127543] [transport.py] [_log()] starting thread (client mode): 0xb6bb20e0
2025-12-31T12:19:52.769 [DEBUG] [Thread-127543] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:19:52.784 [DEBUG] [Thread-127543] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T12:19:52.784 [INFO] [Thread-127543] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T12:19:52.792 [DEBUG] [Thread-127543] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:19:52.792 [DEBUG] [Thread-127543] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T12:19:52.792 [DEBUG] [Thread-127543] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:19:52.792 [DEBUG] [Thread-127543] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:19:52.792 [DEBUG] [Thread-127543] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:19:52.792 [DEBUG] [Thread-127543] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:19:52.792 [DEBUG] [Thread-127543] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:19:52.792 [DEBUG] [Thread-127543] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:19:52.792 [DEBUG] [Thread-127543] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:19:52.792 [DEBUG] [Thread-127543] [transport.py] [_log()] client lang: <none>
2025-12-31T12:19:52.792 [DEBUG] [Thread-127543] [transport.py] [_log()] server lang: <none>
2025-12-31T12:19:52.792 [DEBUG] [Thread-127543] [transport.py] [_log()] kex follows: False
2025-12-31T12:19:52.792 [DEBUG] [Thread-127543] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:19:52.792 [DEBUG] [Thread-127543] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:19:52.792 [DEBUG] [Thread-127543] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:19:52.793 [DEBUG] [Thread-127543] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:19:52.793 [DEBUG] [Thread-127543] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:19:52.793 [DEBUG] [Thread-127543] [transport.py] [_log()] Compression: none
2025-12-31T12:19:52.793 [DEBUG] [Thread-127543] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:19:52.855 [DEBUG] [Thread-127543] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:19:52.856 [DEBUG] [Thread-127543] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:19:52.856 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T12:19:52.857 [DEBUG] [Thread-127543] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T12:19:52.858 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:19:52.912 [DEBUG] [Thread-127543] [transport.py] [_log()] userauth is OK
2025-12-31T12:19:52.913 [DEBUG] [Thread-127543] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:19:52.913 [DEBUG] [Thread-127543] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:19:52.913 [DEBUG] [Thread-127543] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T12:19:52.913 [DEBUG] [Thread-127543] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:19:52.932 [INFO] [Thread-127543] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:19:52.932 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T12:19:52.933 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:19:53.791 [DEBUG] [Thread-127543] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:19:53.791 [DEBUG] [Thread-127543] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:19:53.839 [DEBUG] [Thread-127543] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:19:53.839 [DEBUG] [Thread-127543] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:19:53.848 [DEBUG] [Thread-127543] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:19:53.857 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:19:53.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T12:19:53.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T12:19:53.876 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:19:53.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:19:53.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:19:53.885 [DEBUG] [Thread-127543] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:19:55.148 [DEBUG] [Thread-127545 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:20:10.203 [DEBUG] [Thread-127546 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:20:11.803 [DEBUG] [Thread-127547 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:20:23.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T12:20:23.908 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T12:20:23.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T12:20:24.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 12, 20, 2), 37.13, 7.72, 0.0, 23.63, 25.73, 0, 0, 0, 2, 0, 0),)
2025-12-31T12:20:24.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 12:20:02
2025-12-31T12:20:24.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T12:20:24.900 [DEBUG] [Thread-127548] [transport.py] [_log()] starting thread (client mode): 0xb95b3520
2025-12-31T12:20:24.900 [DEBUG] [Thread-127548] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:20:24.923 [DEBUG] [Thread-127548] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T12:20:24.923 [INFO] [Thread-127548] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T12:20:24.923 [DEBUG] [Thread-127548] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:20:24.923 [DEBUG] [Thread-127548] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T12:20:24.924 [DEBUG] [Thread-127548] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:20:24.924 [DEBUG] [Thread-127548] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:20:24.924 [DEBUG] [Thread-127548] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:20:24.924 [DEBUG] [Thread-127548] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:20:24.924 [DEBUG] [Thread-127548] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:20:24.924 [DEBUG] [Thread-127548] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:20:24.924 [DEBUG] [Thread-127548] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:20:24.924 [DEBUG] [Thread-127548] [transport.py] [_log()] client lang: <none>
2025-12-31T12:20:24.924 [DEBUG] [Thread-127548] [transport.py] [_log()] server lang: <none>
2025-12-31T12:20:24.924 [DEBUG] [Thread-127548] [transport.py] [_log()] kex follows: False
2025-12-31T12:20:24.924 [DEBUG] [Thread-127548] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:20:24.924 [DEBUG] [Thread-127548] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:20:24.924 [DEBUG] [Thread-127548] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:20:24.924 [DEBUG] [Thread-127548] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:20:24.924 [DEBUG] [Thread-127548] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:20:24.924 [DEBUG] [Thread-127548] [transport.py] [_log()] Compression: none
2025-12-31T12:20:24.924 [DEBUG] [Thread-127548] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:20:24.933 [DEBUG] [Thread-127548] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:20:24.933 [DEBUG] [Thread-127548] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:20:24.934 [DEBUG] [Thread-127548] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T12:20:24.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T12:20:24.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:20:24.936 [DEBUG] [Thread-127548] [transport.py] [_log()] userauth is OK
2025-12-31T12:20:24.936 [DEBUG] [Thread-127548] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:20:24.937 [DEBUG] [Thread-127548] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:20:24.937 [DEBUG] [Thread-127548] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T12:20:24.937 [DEBUG] [Thread-127548] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:20:24.962 [INFO] [Thread-127548] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:20:24.963 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:20:25.234 [DEBUG] [Thread-127550 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:20:25.620 [DEBUG] [Thread-127548] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:20:25.620 [DEBUG] [Thread-127548] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:20:25.620 [DEBUG] [Thread-127548] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T12:20:25.660 [DEBUG] [Thread-127548] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:20:25.661 [DEBUG] [Thread-127548] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:20:25.663 [DEBUG] [Thread-127548] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:20:25.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:20:25.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T12:20:25.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T12:20:25.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T12:20:25.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:20:25.684 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T12:20:25.684 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:20:25.684 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:20:25.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T12:20:25.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.430698 -999.00  +25.10  29.30     13   -4.80 1 2 1 1 1   888    0 29.71 10.55 ----- 23.0 29.3 319.8 37.3 32.1 -22.0 31.8 -21.3 31.2 -19.1 31.6 -19.7
2025-12-31T12:20:25.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T12:20:25.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T12:20:25.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.430698
2025-12-31T12:20:25.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T12:20:25.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T12:20:25.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T12:20:25.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T12:20:25.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T12:20:25.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T12:20:02', tmtdew=37.13, humidity=7.72, cloud=0.0, wind=23.63, temperature=25.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T10:20:12.307', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T12:20:25.687 [DEBUG] [Thread-127548] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:20:25.772 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T12:20:25.784 [DEBUG] [Thread-127552] [transport.py] [_log()] starting thread (client mode): 0xb6b2b880
2025-12-31T12:20:25.784 [DEBUG] [Thread-127552] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:20:25.798 [DEBUG] [Thread-127552] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T12:20:25.798 [INFO] [Thread-127552] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T12:20:25.806 [DEBUG] [Thread-127552] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:20:25.806 [DEBUG] [Thread-127552] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T12:20:25.806 [DEBUG] [Thread-127552] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:20:25.806 [DEBUG] [Thread-127552] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:20:25.806 [DEBUG] [Thread-127552] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:20:25.806 [DEBUG] [Thread-127552] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:20:25.806 [DEBUG] [Thread-127552] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:20:25.806 [DEBUG] [Thread-127552] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:20:25.807 [DEBUG] [Thread-127552] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:20:25.807 [DEBUG] [Thread-127552] [transport.py] [_log()] client lang: <none>
2025-12-31T12:20:25.807 [DEBUG] [Thread-127552] [transport.py] [_log()] server lang: <none>
2025-12-31T12:20:25.807 [DEBUG] [Thread-127552] [transport.py] [_log()] kex follows: False
2025-12-31T12:20:25.807 [DEBUG] [Thread-127552] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:20:25.807 [DEBUG] [Thread-127552] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:20:25.807 [DEBUG] [Thread-127552] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:20:25.807 [DEBUG] [Thread-127552] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:20:25.807 [DEBUG] [Thread-127552] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:20:25.807 [DEBUG] [Thread-127552] [transport.py] [_log()] Compression: none
2025-12-31T12:20:25.807 [DEBUG] [Thread-127552] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:20:25.867 [DEBUG] [Thread-127552] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:20:25.867 [DEBUG] [Thread-127552] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:20:25.868 [DEBUG] [Thread-127552] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T12:20:25.868 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T12:20:25.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:20:25.926 [DEBUG] [Thread-127552] [transport.py] [_log()] userauth is OK
2025-12-31T12:20:25.926 [DEBUG] [Thread-127552] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:20:25.926 [DEBUG] [Thread-127552] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:20:25.926 [DEBUG] [Thread-127552] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T12:20:25.926 [DEBUG] [Thread-127552] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:20:25.945 [INFO] [Thread-127552] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:20:25.946 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T12:20:25.946 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:20:26.812 [DEBUG] [Thread-127552] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:20:26.813 [DEBUG] [Thread-127552] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:20:26.861 [DEBUG] [Thread-127552] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:20:26.861 [DEBUG] [Thread-127552] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:20:26.870 [DEBUG] [Thread-127552] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:20:26.880 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:20:26.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-12-31T12:20:26.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T12:20:26.898 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:20:26.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:20:26.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:20:26.907 [DEBUG] [Thread-127552] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:20:40.278 [DEBUG] [Thread-127554 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:20:41.115 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:20:41.116 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:20:55.328 [DEBUG] [Thread-127555 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:20:56.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T12:20:56.930 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T12:20:56.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-12-31T12:20:57.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 12, 20, 34), 37.33, 7.84, 0.0, 21.05, 26.44, 0, 0, 0, 2, 0, 0),)
2025-12-31T12:20:57.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 12:20:34
2025-12-31T12:20:57.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T12:20:57.918 [DEBUG] [Thread-127556] [transport.py] [_log()] starting thread (client mode): 0xbbfcfa60
2025-12-31T12:20:57.918 [DEBUG] [Thread-127556] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:20:57.937 [DEBUG] [Thread-127556] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T12:20:57.937 [INFO] [Thread-127556] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T12:20:57.940 [DEBUG] [Thread-127556] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:20:57.941 [DEBUG] [Thread-127556] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T12:20:57.941 [DEBUG] [Thread-127556] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:20:57.941 [DEBUG] [Thread-127556] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:20:57.941 [DEBUG] [Thread-127556] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:20:57.941 [DEBUG] [Thread-127556] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:20:57.941 [DEBUG] [Thread-127556] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:20:57.941 [DEBUG] [Thread-127556] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:20:57.941 [DEBUG] [Thread-127556] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:20:57.941 [DEBUG] [Thread-127556] [transport.py] [_log()] client lang: <none>
2025-12-31T12:20:57.941 [DEBUG] [Thread-127556] [transport.py] [_log()] server lang: <none>
2025-12-31T12:20:57.941 [DEBUG] [Thread-127556] [transport.py] [_log()] kex follows: False
2025-12-31T12:20:57.941 [DEBUG] [Thread-127556] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:20:57.941 [DEBUG] [Thread-127556] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:20:57.941 [DEBUG] [Thread-127556] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:20:57.941 [DEBUG] [Thread-127556] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:20:57.942 [DEBUG] [Thread-127556] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:20:57.942 [DEBUG] [Thread-127556] [transport.py] [_log()] Compression: none
2025-12-31T12:20:57.942 [DEBUG] [Thread-127556] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:20:57.959 [DEBUG] [Thread-127556] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:20:57.959 [DEBUG] [Thread-127556] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:20:57.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T12:20:57.960 [DEBUG] [Thread-127556] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T12:20:57.961 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:20:57.962 [DEBUG] [Thread-127556] [transport.py] [_log()] userauth is OK
2025-12-31T12:20:57.962 [DEBUG] [Thread-127556] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:20:57.963 [DEBUG] [Thread-127556] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:20:57.963 [DEBUG] [Thread-127556] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T12:20:57.963 [DEBUG] [Thread-127556] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:20:57.981 [INFO] [Thread-127556] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:20:57.981 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:20:58.608 [DEBUG] [Thread-127556] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:20:58.608 [DEBUG] [Thread-127556] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:20:58.609 [DEBUG] [Thread-127556] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T12:20:58.650 [DEBUG] [Thread-127556] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:20:58.650 [DEBUG] [Thread-127556] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:20:58.655 [DEBUG] [Thread-127556] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:20:58.668 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:20:58.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T12:20:58.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T12:20:58.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T12:20:58.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:20:58.685 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T12:20:58.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:20:58.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:20:58.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T12:20:58.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.431046 -999.00  +25.30  19.22     13   -4.60 1 2 1 1 1   888    0 30.25 13.98 ----- 16.2 19.2 288.8 26.2 32.1 -20.8 31.8 -20.2 31.2 -18.9 31.5 -18.9
2025-12-31T12:20:58.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T12:20:58.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T12:20:58.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.431046
2025-12-31T12:20:58.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T12:20:58.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T12:20:58.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T12:20:58.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T12:20:58.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T12:20:58.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T12:20:34', tmtdew=37.33, humidity=7.84, cloud=0.0, wind=21.05, temperature=26.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T10:20:42.374', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T12:20:58.690 [DEBUG] [Thread-127556] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:20:58.765 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T12:20:58.777 [DEBUG] [Thread-127559] [transport.py] [_log()] starting thread (client mode): 0xb6b29810
2025-12-31T12:20:58.777 [DEBUG] [Thread-127559] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:20:58.792 [DEBUG] [Thread-127559] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T12:20:58.792 [INFO] [Thread-127559] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T12:20:58.799 [DEBUG] [Thread-127559] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:20:58.800 [DEBUG] [Thread-127559] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T12:20:58.800 [DEBUG] [Thread-127559] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:20:58.800 [DEBUG] [Thread-127559] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:20:58.800 [DEBUG] [Thread-127559] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:20:58.800 [DEBUG] [Thread-127559] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:20:58.800 [DEBUG] [Thread-127559] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:20:58.800 [DEBUG] [Thread-127559] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:20:58.800 [DEBUG] [Thread-127559] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:20:58.800 [DEBUG] [Thread-127559] [transport.py] [_log()] client lang: <none>
2025-12-31T12:20:58.800 [DEBUG] [Thread-127559] [transport.py] [_log()] server lang: <none>
2025-12-31T12:20:58.800 [DEBUG] [Thread-127559] [transport.py] [_log()] kex follows: False
2025-12-31T12:20:58.800 [DEBUG] [Thread-127559] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:20:58.800 [DEBUG] [Thread-127559] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:20:58.800 [DEBUG] [Thread-127559] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:20:58.800 [DEBUG] [Thread-127559] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:20:58.800 [DEBUG] [Thread-127559] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:20:58.800 [DEBUG] [Thread-127559] [transport.py] [_log()] Compression: none
2025-12-31T12:20:58.800 [DEBUG] [Thread-127559] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:20:58.860 [DEBUG] [Thread-127559] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:20:58.861 [DEBUG] [Thread-127559] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:20:58.862 [DEBUG] [Thread-127559] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T12:20:58.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T12:20:58.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:20:58.920 [DEBUG] [Thread-127559] [transport.py] [_log()] userauth is OK
2025-12-31T12:20:58.920 [DEBUG] [Thread-127559] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:20:58.920 [DEBUG] [Thread-127559] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:20:58.920 [DEBUG] [Thread-127559] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T12:20:58.920 [DEBUG] [Thread-127559] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:20:58.940 [INFO] [Thread-127559] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:20:58.940 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T12:20:58.941 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:20:59.768 [DEBUG] [Thread-127559] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:20:59.768 [DEBUG] [Thread-127559] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:20:59.816 [DEBUG] [Thread-127559] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:20:59.816 [DEBUG] [Thread-127559] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:20:59.825 [DEBUG] [Thread-127559] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:20:59.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:20:59.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T12:20:59.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T12:20:59.853 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:20:59.854 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:20:59.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:20:59.862 [DEBUG] [Thread-127559] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:21:10.362 [DEBUG] [Thread-127561 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:21:11.869 [DEBUG] [Thread-127562 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:21:25.417 [DEBUG] [Thread-127563 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:21:29.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T12:21:29.884 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T12:21:29.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T12:21:30.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 12, 21, 6), 37.19, 7.91, 0.0, 17.72, 26.31, 0, 0, 0, 2, 0, 0),)
2025-12-31T12:21:30.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 12:21:06
2025-12-31T12:21:30.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T12:21:30.916 [DEBUG] [Thread-127564] [transport.py] [_log()] starting thread (client mode): 0xb95b0310
2025-12-31T12:21:30.916 [DEBUG] [Thread-127564] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:21:30.932 [DEBUG] [Thread-127564] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T12:21:30.932 [INFO] [Thread-127564] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T12:21:30.935 [DEBUG] [Thread-127564] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:21:30.935 [DEBUG] [Thread-127564] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T12:21:30.935 [DEBUG] [Thread-127564] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:21:30.936 [DEBUG] [Thread-127564] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:21:30.936 [DEBUG] [Thread-127564] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:21:30.936 [DEBUG] [Thread-127564] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:21:30.936 [DEBUG] [Thread-127564] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:21:30.936 [DEBUG] [Thread-127564] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:21:30.936 [DEBUG] [Thread-127564] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:21:30.936 [DEBUG] [Thread-127564] [transport.py] [_log()] client lang: <none>
2025-12-31T12:21:30.936 [DEBUG] [Thread-127564] [transport.py] [_log()] server lang: <none>
2025-12-31T12:21:30.936 [DEBUG] [Thread-127564] [transport.py] [_log()] kex follows: False
2025-12-31T12:21:30.936 [DEBUG] [Thread-127564] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:21:30.936 [DEBUG] [Thread-127564] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:21:30.936 [DEBUG] [Thread-127564] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:21:30.936 [DEBUG] [Thread-127564] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:21:30.936 [DEBUG] [Thread-127564] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:21:30.936 [DEBUG] [Thread-127564] [transport.py] [_log()] Compression: none
2025-12-31T12:21:30.936 [DEBUG] [Thread-127564] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:21:30.953 [DEBUG] [Thread-127564] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:21:30.953 [DEBUG] [Thread-127564] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:21:30.953 [DEBUG] [Thread-127564] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T12:21:30.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T12:21:30.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:21:30.954 [DEBUG] [Thread-127564] [transport.py] [_log()] userauth is OK
2025-12-31T12:21:30.954 [DEBUG] [Thread-127564] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:21:30.954 [DEBUG] [Thread-127564] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:21:30.954 [DEBUG] [Thread-127564] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T12:21:30.954 [DEBUG] [Thread-127564] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:21:30.962 [INFO] [Thread-127564] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:21:30.963 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:21:31.531 [DEBUG] [Thread-127564] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:21:31.531 [DEBUG] [Thread-127564] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:21:31.531 [DEBUG] [Thread-127564] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T12:21:31.572 [DEBUG] [Thread-127564] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:21:31.572 [DEBUG] [Thread-127564] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:21:31.576 [DEBUG] [Thread-127564] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:21:31.588 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:21:31.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T12:21:31.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T12:21:31.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T12:21:31.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:21:31.595 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T12:21:31.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:21:31.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:21:31.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T12:21:31.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.431393 -999.00  +25.10  28.06     13   -4.70 1 2 1 1 1   888    0 30.41 17.16 ----- 24.0 28.1 316.0 34.0 32.0 -21.2 31.7 -20.4 31.1 -19.4 31.5 -19.2
2025-12-31T12:21:31.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T12:21:31.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T12:21:31.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.431393
2025-12-31T12:21:31.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T12:21:31.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T12:21:31.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T12:21:31.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T12:21:31.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T12:21:31.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T12:21:06', tmtdew=37.19, humidity=7.91, cloud=0.0, wind=17.72, temperature=26.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T10:21:12.355', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T12:21:31.596 [DEBUG] [Thread-127564] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:21:31.670 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T12:21:31.681 [DEBUG] [Thread-127567] [transport.py] [_log()] starting thread (client mode): 0xb6bb3c40
2025-12-31T12:21:31.681 [DEBUG] [Thread-127567] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:21:31.696 [DEBUG] [Thread-127567] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T12:21:31.696 [INFO] [Thread-127567] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T12:21:31.703 [DEBUG] [Thread-127567] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:21:31.703 [DEBUG] [Thread-127567] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T12:21:31.703 [DEBUG] [Thread-127567] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:21:31.703 [DEBUG] [Thread-127567] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:21:31.704 [DEBUG] [Thread-127567] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:21:31.704 [DEBUG] [Thread-127567] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:21:31.704 [DEBUG] [Thread-127567] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:21:31.704 [DEBUG] [Thread-127567] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:21:31.704 [DEBUG] [Thread-127567] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:21:31.704 [DEBUG] [Thread-127567] [transport.py] [_log()] client lang: <none>
2025-12-31T12:21:31.704 [DEBUG] [Thread-127567] [transport.py] [_log()] server lang: <none>
2025-12-31T12:21:31.704 [DEBUG] [Thread-127567] [transport.py] [_log()] kex follows: False
2025-12-31T12:21:31.704 [DEBUG] [Thread-127567] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:21:31.704 [DEBUG] [Thread-127567] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:21:31.704 [DEBUG] [Thread-127567] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:21:31.704 [DEBUG] [Thread-127567] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:21:31.704 [DEBUG] [Thread-127567] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:21:31.704 [DEBUG] [Thread-127567] [transport.py] [_log()] Compression: none
2025-12-31T12:21:31.704 [DEBUG] [Thread-127567] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:21:31.760 [DEBUG] [Thread-127567] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:21:31.760 [DEBUG] [Thread-127567] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:21:31.760 [DEBUG] [Thread-127567] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T12:21:31.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T12:21:31.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:21:31.817 [DEBUG] [Thread-127567] [transport.py] [_log()] userauth is OK
2025-12-31T12:21:31.817 [DEBUG] [Thread-127567] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:21:31.817 [DEBUG] [Thread-127567] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:21:31.817 [DEBUG] [Thread-127567] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T12:21:31.817 [DEBUG] [Thread-127567] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:21:31.834 [INFO] [Thread-127567] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:21: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-12-31T12:21:31.834 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:21:32.689 [DEBUG] [Thread-127567] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:21:32.689 [DEBUG] [Thread-127567] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:21:32.737 [DEBUG] [Thread-127567] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:21:32.737 [DEBUG] [Thread-127567] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:21:32.745 [DEBUG] [Thread-127567] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:21:32.753 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:21:32.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T12:21:32.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T12:21:32.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:21:32.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:21:32.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:21:32.777 [DEBUG] [Thread-127567] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:21:40.445 [DEBUG] [Thread-127569 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:21:41.256 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:21:41.257 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:21:55.494 [DEBUG] [Thread-127570 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:22:02.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T12:22:02.791 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T12:22:02.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T12:22:03.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 12, 21, 38), 36.56, 7.94, 0.0, 19.34, 25.66, 0, 0, 0, 2, 0, 0),)
2025-12-31T12:22:03.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 12:21:38
2025-12-31T12:22:03.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T12:22:03.790 [DEBUG] [Thread-127571] [transport.py] [_log()] starting thread (client mode): 0xb6b03820
2025-12-31T12:22:03.790 [DEBUG] [Thread-127571] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:22:03.810 [DEBUG] [Thread-127571] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T12:22:03.811 [INFO] [Thread-127571] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T12:22:03.813 [DEBUG] [Thread-127571] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:22:03.813 [DEBUG] [Thread-127571] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T12:22:03.814 [DEBUG] [Thread-127571] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:22:03.814 [DEBUG] [Thread-127571] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:22:03.814 [DEBUG] [Thread-127571] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:22:03.814 [DEBUG] [Thread-127571] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:22:03.814 [DEBUG] [Thread-127571] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:22:03.814 [DEBUG] [Thread-127571] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:22:03.814 [DEBUG] [Thread-127571] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:22:03.814 [DEBUG] [Thread-127571] [transport.py] [_log()] client lang: <none>
2025-12-31T12:22:03.814 [DEBUG] [Thread-127571] [transport.py] [_log()] server lang: <none>
2025-12-31T12:22:03.814 [DEBUG] [Thread-127571] [transport.py] [_log()] kex follows: False
2025-12-31T12:22:03.814 [DEBUG] [Thread-127571] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:22:03.814 [DEBUG] [Thread-127571] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:22:03.814 [DEBUG] [Thread-127571] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:22:03.814 [DEBUG] [Thread-127571] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:22:03.814 [DEBUG] [Thread-127571] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:22:03.814 [DEBUG] [Thread-127571] [transport.py] [_log()] Compression: none
2025-12-31T12:22:03.814 [DEBUG] [Thread-127571] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:22:03.822 [DEBUG] [Thread-127571] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:22:03.822 [DEBUG] [Thread-127571] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:22:03.822 [DEBUG] [Thread-127571] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T12:22:03.822 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T12:22:03.823 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:22:03.823 [DEBUG] [Thread-127571] [transport.py] [_log()] userauth is OK
2025-12-31T12:22:03.823 [DEBUG] [Thread-127571] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:22:03.823 [DEBUG] [Thread-127571] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:22:03.823 [DEBUG] [Thread-127571] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T12:22:03.823 [DEBUG] [Thread-127571] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:22:03.835 [INFO] [Thread-127571] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:22:03.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:22:04.470 [DEBUG] [Thread-127571] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:22:04.470 [DEBUG] [Thread-127571] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:22:04.471 [DEBUG] [Thread-127571] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T12:22:04.511 [DEBUG] [Thread-127571] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:22:04.511 [DEBUG] [Thread-127571] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:22:04.517 [DEBUG] [Thread-127571] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:22:04.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:22:04.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T12:22:04.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T12:22:04.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T12:22:04.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:22:04.544 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T12:22:04.544 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:22:04.544 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:22:04.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T12:22:04.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.431740 -999.00  +24.70  20.78     13   -4.90 1 2 1 1 1   888    0 30.33 19.45 ----- 15.2 20.8 344.4 29.2 31.9 -20.5 31.6 -19.5 31.1 -18.4 31.4 -18.6
2025-12-31T12:22:04.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T12:22:04.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T12:22:04.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.431740
2025-12-31T12:22:04.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T12:22:04.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T12:22:04.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T12:22:04.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T12:22:04.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T12:22:04.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T12:21:38', tmtdew=36.56, humidity=7.94, cloud=0.0, wind=19.34, temperature=25.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T10:21:42.336', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T12:22:04.547 [DEBUG] [Thread-127571] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:22:04.630 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T12:22:04.643 [DEBUG] [Thread-127574] [transport.py] [_log()] starting thread (client mode): 0xb6b2ab60
2025-12-31T12:22:04.643 [DEBUG] [Thread-127574] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:22:04.659 [DEBUG] [Thread-127574] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T12:22:04.659 [INFO] [Thread-127574] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T12:22:04.666 [DEBUG] [Thread-127574] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:22:04.666 [DEBUG] [Thread-127574] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T12:22:04.666 [DEBUG] [Thread-127574] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:22:04.666 [DEBUG] [Thread-127574] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:22:04.666 [DEBUG] [Thread-127574] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:22:04.667 [DEBUG] [Thread-127574] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:22:04.667 [DEBUG] [Thread-127574] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:22:04.667 [DEBUG] [Thread-127574] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:22:04.667 [DEBUG] [Thread-127574] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:22:04.667 [DEBUG] [Thread-127574] [transport.py] [_log()] client lang: <none>
2025-12-31T12:22:04.667 [DEBUG] [Thread-127574] [transport.py] [_log()] server lang: <none>
2025-12-31T12:22:04.667 [DEBUG] [Thread-127574] [transport.py] [_log()] kex follows: False
2025-12-31T12:22:04.667 [DEBUG] [Thread-127574] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:22:04.667 [DEBUG] [Thread-127574] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:22:04.667 [DEBUG] [Thread-127574] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:22:04.667 [DEBUG] [Thread-127574] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:22:04.667 [DEBUG] [Thread-127574] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:22:04.667 [DEBUG] [Thread-127574] [transport.py] [_log()] Compression: none
2025-12-31T12:22:04.667 [DEBUG] [Thread-127574] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:22:04.725 [DEBUG] [Thread-127574] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:22:04.726 [DEBUG] [Thread-127574] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:22:04.726 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T12:22:04.727 [DEBUG] [Thread-127574] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T12:22:04.728 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:22:04.784 [DEBUG] [Thread-127574] [transport.py] [_log()] userauth is OK
2025-12-31T12:22:04.784 [DEBUG] [Thread-127574] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:22:04.784 [DEBUG] [Thread-127574] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:22:04.784 [DEBUG] [Thread-127574] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T12:22:04.784 [DEBUG] [Thread-127574] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:22:04.803 [INFO] [Thread-127574] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:22:04.803 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T12:22:04.803 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:22:05.653 [DEBUG] [Thread-127574] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:22:05.653 [DEBUG] [Thread-127574] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:22:05.700 [DEBUG] [Thread-127574] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:22:05.700 [DEBUG] [Thread-127574] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:22:05.709 [DEBUG] [Thread-127574] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:22:05.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:22:05.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T12:22:05.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T12:22:05.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:22:05.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:22:05.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:22:05.743 [DEBUG] [Thread-127574] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:22:10.529 [DEBUG] [Thread-127576 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:22:11.915 [DEBUG] [Thread-127577 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:22:25.573 [DEBUG] [Thread-127578 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:22:35.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T12:22:35.766 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T12:22:35.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T12:22:36.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 12, 22, 10), 36.35, 8.05, 0.0, 17.49, 25.53, 0, 0, 0, 2, 0, 0),)
2025-12-31T12:22:36.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 12:22:10
2025-12-31T12:22:36.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T12:22:36.750 [DEBUG] [Thread-127579] [transport.py] [_log()] starting thread (client mode): 0xb6b2a950
2025-12-31T12:22:36.751 [DEBUG] [Thread-127579] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:22:36.772 [DEBUG] [Thread-127579] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T12:22:36.772 [INFO] [Thread-127579] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T12:22:36.775 [DEBUG] [Thread-127579] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:22:36.775 [DEBUG] [Thread-127579] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T12:22:36.775 [DEBUG] [Thread-127579] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:22:36.776 [DEBUG] [Thread-127579] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:22:36.776 [DEBUG] [Thread-127579] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:22:36.776 [DEBUG] [Thread-127579] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:22:36.776 [DEBUG] [Thread-127579] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:22:36.776 [DEBUG] [Thread-127579] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:22:36.776 [DEBUG] [Thread-127579] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:22:36.776 [DEBUG] [Thread-127579] [transport.py] [_log()] client lang: <none>
2025-12-31T12:22:36.776 [DEBUG] [Thread-127579] [transport.py] [_log()] server lang: <none>
2025-12-31T12:22:36.776 [DEBUG] [Thread-127579] [transport.py] [_log()] kex follows: False
2025-12-31T12:22:36.776 [DEBUG] [Thread-127579] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:22:36.776 [DEBUG] [Thread-127579] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:22:36.776 [DEBUG] [Thread-127579] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:22:36.776 [DEBUG] [Thread-127579] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:22:36.776 [DEBUG] [Thread-127579] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:22:36.777 [DEBUG] [Thread-127579] [transport.py] [_log()] Compression: none
2025-12-31T12:22:36.777 [DEBUG] [Thread-127579] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:22:36.789 [DEBUG] [Thread-127579] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:22:36.790 [DEBUG] [Thread-127579] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:22:36.791 [DEBUG] [Thread-127579] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T12:22:36.791 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T12:22:36.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:22:36.794 [DEBUG] [Thread-127579] [transport.py] [_log()] userauth is OK
2025-12-31T12:22:36.794 [DEBUG] [Thread-127579] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:22:36.794 [DEBUG] [Thread-127579] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:22:36.794 [DEBUG] [Thread-127579] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T12:22:36.794 [DEBUG] [Thread-127579] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:22:36.820 [INFO] [Thread-127579] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:22:36.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:22:37.423 [DEBUG] [Thread-127579] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:22:37.424 [DEBUG] [Thread-127579] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:22:37.424 [DEBUG] [Thread-127579] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T12:22:37.465 [DEBUG] [Thread-127579] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:22:37.465 [DEBUG] [Thread-127579] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:22:37.467 [DEBUG] [Thread-127579] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:22:37.474 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:22:37.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T12:22:37.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T12:22:37.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T12:22:37.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:22:37.485 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T12:22:37.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:22:37.485 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:22:37.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T12:22:37.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.432087 -999.00  +24.60  13.59     13   -4.90 1 2 1 1 1   888    0 30.20 19.63 ----- 11.3 13.6 294.0 19.9 31.7 -19.9 31.3 -20.4 31.0 -17.7 31.2 -18.0
2025-12-31T12:22:37.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T12:22:37.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T12:22:37.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.432087
2025-12-31T12:22:37.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T12:22:37.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T12:22:37.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T12:22:37.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T12:22:37.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T12:22:37.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T12:22:10', tmtdew=36.35, humidity=8.05, cloud=0.0, wind=17.49, temperature=25.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T10:22:12.317', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T12:22:37.488 [DEBUG] [Thread-127579] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:22:37.574 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T12:22:37.587 [DEBUG] [Thread-127582] [transport.py] [_log()] starting thread (client mode): 0xb95b3a60
2025-12-31T12:22:37.587 [DEBUG] [Thread-127582] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:22:37.602 [DEBUG] [Thread-127582] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T12:22:37.602 [INFO] [Thread-127582] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T12:22:37.610 [DEBUG] [Thread-127582] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:22:37.610 [DEBUG] [Thread-127582] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T12:22:37.611 [DEBUG] [Thread-127582] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:22:37.611 [DEBUG] [Thread-127582] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:22:37.611 [DEBUG] [Thread-127582] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:22:37.611 [DEBUG] [Thread-127582] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:22:37.611 [DEBUG] [Thread-127582] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:22:37.611 [DEBUG] [Thread-127582] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:22:37.612 [DEBUG] [Thread-127582] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:22:37.612 [DEBUG] [Thread-127582] [transport.py] [_log()] client lang: <none>
2025-12-31T12:22:37.612 [DEBUG] [Thread-127582] [transport.py] [_log()] server lang: <none>
2025-12-31T12:22:37.612 [DEBUG] [Thread-127582] [transport.py] [_log()] kex follows: False
2025-12-31T12:22:37.612 [DEBUG] [Thread-127582] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:22:37.612 [DEBUG] [Thread-127582] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:22:37.612 [DEBUG] [Thread-127582] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:22:37.612 [DEBUG] [Thread-127582] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:22:37.612 [DEBUG] [Thread-127582] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:22:37.612 [DEBUG] [Thread-127582] [transport.py] [_log()] Compression: none
2025-12-31T12:22:37.612 [DEBUG] [Thread-127582] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:22:37.673 [DEBUG] [Thread-127582] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:22:37.674 [DEBUG] [Thread-127582] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:22:37.675 [DEBUG] [Thread-127582] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T12:22:37.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T12:22:37.676 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:22:37.730 [DEBUG] [Thread-127582] [transport.py] [_log()] userauth is OK
2025-12-31T12:22:37.730 [DEBUG] [Thread-127582] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:22:37.731 [DEBUG] [Thread-127582] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:22:37.731 [DEBUG] [Thread-127582] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T12:22:37.731 [DEBUG] [Thread-127582] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:22:37.751 [INFO] [Thread-127582] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:22:37.751 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T12:22:37.752 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:22:38.592 [DEBUG] [Thread-127582] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:22:38.592 [DEBUG] [Thread-127582] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:22:38.640 [DEBUG] [Thread-127582] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:22:38.640 [DEBUG] [Thread-127582] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:22:38.649 [DEBUG] [Thread-127582] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:22:38.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:22:38.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T12:22:38.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T12:22:38.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:22:38.678 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:22:38.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:22:38.686 [DEBUG] [Thread-127582] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:22:40.608 [DEBUG] [Thread-127584 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:22:41.398 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:22:41.399 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:22:55.665 [DEBUG] [Thread-127585 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:23:08.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T12:23:08.698 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T12:23:08.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T12:23:09.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 12, 22, 43), 36.65, 8.0, 0.0, 12.85, 25.49, 0, 0, 0, 2, 0, 0),)
2025-12-31T12:23:09.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 12:22:43
2025-12-31T12:23:09.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T12:23:09.695 [DEBUG] [Thread-127586] [transport.py] [_log()] starting thread (client mode): 0xb6b2b160
2025-12-31T12:23:09.695 [DEBUG] [Thread-127586] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:23:09.710 [DEBUG] [Thread-127586] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T12:23:09.710 [INFO] [Thread-127586] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T12:23:09.711 [DEBUG] [Thread-127586] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:23:09.711 [DEBUG] [Thread-127586] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T12:23:09.711 [DEBUG] [Thread-127586] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:23:09.711 [DEBUG] [Thread-127586] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:23:09.711 [DEBUG] [Thread-127586] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:23:09.711 [DEBUG] [Thread-127586] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:23:09.712 [DEBUG] [Thread-127586] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:23:09.712 [DEBUG] [Thread-127586] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:23:09.712 [DEBUG] [Thread-127586] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:23:09.712 [DEBUG] [Thread-127586] [transport.py] [_log()] client lang: <none>
2025-12-31T12:23:09.712 [DEBUG] [Thread-127586] [transport.py] [_log()] server lang: <none>
2025-12-31T12:23:09.712 [DEBUG] [Thread-127586] [transport.py] [_log()] kex follows: False
2025-12-31T12:23:09.712 [DEBUG] [Thread-127586] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:23:09.712 [DEBUG] [Thread-127586] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:23:09.712 [DEBUG] [Thread-127586] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:23:09.712 [DEBUG] [Thread-127586] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:23:09.712 [DEBUG] [Thread-127586] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:23:09.712 [DEBUG] [Thread-127586] [transport.py] [_log()] Compression: none
2025-12-31T12:23:09.712 [DEBUG] [Thread-127586] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:23:09.721 [DEBUG] [Thread-127586] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:23:09.722 [DEBUG] [Thread-127586] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:23:09.723 [DEBUG] [Thread-127586] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T12:23:09.723 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T12:23:09.724 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:23:09.724 [DEBUG] [Thread-127586] [transport.py] [_log()] userauth is OK
2025-12-31T12:23:09.725 [DEBUG] [Thread-127586] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:23:09.725 [DEBUG] [Thread-127586] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:23:09.725 [DEBUG] [Thread-127586] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T12:23:09.725 [DEBUG] [Thread-127586] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:23:09.739 [INFO] [Thread-127586] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:23:09.740 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:23:10.328 [DEBUG] [Thread-127586] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:23:10.328 [DEBUG] [Thread-127586] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:23:10.329 [DEBUG] [Thread-127586] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T12:23:10.370 [DEBUG] [Thread-127586] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:23:10.370 [DEBUG] [Thread-127586] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:23:10.372 [DEBUG] [Thread-127586] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:23:10.381 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:23:10.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T12:23:10.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T12:23:10.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T12:23:10.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:23:10.389 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T12:23:10.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:23:10.389 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:23:10.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T12:23:10.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.432435 -999.00  +24.90  17.57     13   -5.10 1 2 1 1 1   888    0 30.32 20.82 ----- 15.6 17.6 290.4 18.8 31.7 -20.7 31.4 -19.4 30.9 -21.4 31.2 -18.1
2025-12-31T12:23:10.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T12:23:10.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T12:23:10.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.432435
2025-12-31T12:23:10.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T12:23:10.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T12:23:10.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T12:23:10.391 [DEBUG] [Thread-127586] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:23:10.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T12:23:10.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T12:23:10.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T12:22:43', tmtdew=36.65, humidity=8.0, cloud=0.0, wind=12.85, temperature=25.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T10:22:42.384', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T12:23:10.474 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T12:23:10.488 [DEBUG] [Thread-127589] [transport.py] [_log()] starting thread (client mode): 0xb6b2a260
2025-12-31T12:23:10.489 [DEBUG] [Thread-127589] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:23:10.503 [DEBUG] [Thread-127589] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T12:23:10.504 [INFO] [Thread-127589] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T12:23:10.511 [DEBUG] [Thread-127589] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:23:10.511 [DEBUG] [Thread-127589] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T12:23:10.511 [DEBUG] [Thread-127589] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:23:10.511 [DEBUG] [Thread-127589] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:23:10.511 [DEBUG] [Thread-127589] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:23:10.512 [DEBUG] [Thread-127589] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:23:10.512 [DEBUG] [Thread-127589] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:23:10.512 [DEBUG] [Thread-127589] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:23:10.512 [DEBUG] [Thread-127589] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:23:10.512 [DEBUG] [Thread-127589] [transport.py] [_log()] client lang: <none>
2025-12-31T12:23:10.512 [DEBUG] [Thread-127589] [transport.py] [_log()] server lang: <none>
2025-12-31T12:23:10.512 [DEBUG] [Thread-127589] [transport.py] [_log()] kex follows: False
2025-12-31T12:23:10.512 [DEBUG] [Thread-127589] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:23:10.512 [DEBUG] [Thread-127589] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:23:10.513 [DEBUG] [Thread-127589] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:23:10.513 [DEBUG] [Thread-127589] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:23:10.513 [DEBUG] [Thread-127589] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:23:10.513 [DEBUG] [Thread-127589] [transport.py] [_log()] Compression: none
2025-12-31T12:23:10.513 [DEBUG] [Thread-127589] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:23:10.567 [DEBUG] [Thread-127589] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:23:10.567 [DEBUG] [Thread-127589] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:23:10.568 [DEBUG] [Thread-127589] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T12:23:10.568 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T12:23:10.568 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:23:10.624 [DEBUG] [Thread-127589] [transport.py] [_log()] userauth is OK
2025-12-31T12:23:10.624 [DEBUG] [Thread-127589] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:23:10.624 [DEBUG] [Thread-127589] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:23:10.624 [DEBUG] [Thread-127589] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T12:23:10.624 [DEBUG] [Thread-127589] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:23:10.648 [INFO] [Thread-127589] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:23:10.649 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T12:23:10.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:23:10.704 [DEBUG] [Thread-127591 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:23:11.456 [DEBUG] [Thread-127589] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:23:11.456 [DEBUG] [Thread-127589] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:23:11.503 [DEBUG] [Thread-127589] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:23:11.504 [DEBUG] [Thread-127589] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:23:11.513 [DEBUG] [Thread-127589] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:23:11.522 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:23:11.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T12:23:11.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T12:23:11.539 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:23:11.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:23:11.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:23:11.548 [DEBUG] [Thread-127589] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:23:11.977 [DEBUG] [Thread-127592 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:23:25.764 [DEBUG] [Thread-127593 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:23:40.792 [DEBUG] [Thread-127594 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:23:41.540 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:23:41.542 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:23:41.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T12:23:41.551 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T12:23:41.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T12:23:42.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 12, 23, 15), 36.62, 8.0, 0.0, 10.57, 25.38, 0, 0, 0, 2, 0, 0),)
2025-12-31T12:23:42.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 12:23:15
2025-12-31T12:23:42.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T12:23:42.555 [DEBUG] [Thread-127595] [transport.py] [_log()] starting thread (client mode): 0xb95b2a70
2025-12-31T12:23:42.555 [DEBUG] [Thread-127595] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:23:42.575 [DEBUG] [Thread-127595] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T12:23:42.575 [INFO] [Thread-127595] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T12:23:42.578 [DEBUG] [Thread-127595] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:23:42.578 [DEBUG] [Thread-127595] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T12:23:42.579 [DEBUG] [Thread-127595] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:23:42.579 [DEBUG] [Thread-127595] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:23:42.579 [DEBUG] [Thread-127595] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:23:42.579 [DEBUG] [Thread-127595] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:23:42.579 [DEBUG] [Thread-127595] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:23:42.579 [DEBUG] [Thread-127595] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:23:42.579 [DEBUG] [Thread-127595] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:23:42.579 [DEBUG] [Thread-127595] [transport.py] [_log()] client lang: <none>
2025-12-31T12:23:42.579 [DEBUG] [Thread-127595] [transport.py] [_log()] server lang: <none>
2025-12-31T12:23:42.579 [DEBUG] [Thread-127595] [transport.py] [_log()] kex follows: False
2025-12-31T12:23:42.579 [DEBUG] [Thread-127595] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:23:42.579 [DEBUG] [Thread-127595] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:23:42.579 [DEBUG] [Thread-127595] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:23:42.579 [DEBUG] [Thread-127595] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:23:42.579 [DEBUG] [Thread-127595] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:23:42.579 [DEBUG] [Thread-127595] [transport.py] [_log()] Compression: none
2025-12-31T12:23:42.579 [DEBUG] [Thread-127595] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:23:42.597 [DEBUG] [Thread-127595] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:23:42.597 [DEBUG] [Thread-127595] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:23:42.597 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T12:23:42.598 [DEBUG] [Thread-127595] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T12:23:42.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:23:42.600 [DEBUG] [Thread-127595] [transport.py] [_log()] userauth is OK
2025-12-31T12:23:42.600 [DEBUG] [Thread-127595] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:23:42.600 [DEBUG] [Thread-127595] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:23:42.600 [DEBUG] [Thread-127595] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T12:23:42.600 [DEBUG] [Thread-127595] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:23:42.617 [INFO] [Thread-127595] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:23:42.617 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:23:43.248 [DEBUG] [Thread-127595] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:23:43.248 [DEBUG] [Thread-127595] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:23:43.249 [DEBUG] [Thread-127595] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T12:23:43.289 [DEBUG] [Thread-127595] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:23:43.289 [DEBUG] [Thread-127595] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:23:43.292 [DEBUG] [Thread-127595] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:23:43.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:23:43.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T12:23:43.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T12:23:43.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T12:23:43.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:23:43.314 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T12:23:43.315 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:23:43.315 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:23:43.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T12:23:43.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.432782 -999.00  +24.90  14.04     13   -4.80 1 2 1 1 1   888    0 30.79 23.27 ----- 17.4 14.0 290.8 16.4 31.7 -19.5 31.4 -19.0 30.9 -17.3 31.2 -17.7
2025-12-31T12:23:43.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T12:23:43.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T12:23:43.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.432782
2025-12-31T12:23:43.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T12:23:43.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T12:23:43.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T12:23:43.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T12:23:43.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T12:23:43.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T12:23:15', tmtdew=36.62, humidity=8.0, cloud=0.0, wind=10.57, temperature=25.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T10:23:12.365', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T12:23:43.317 [DEBUG] [Thread-127595] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:23:43.402 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T12:23:43.412 [DEBUG] [Thread-127598] [transport.py] [_log()] starting thread (client mode): 0xb6b28280
2025-12-31T12:23:43.412 [DEBUG] [Thread-127598] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:23:43.427 [DEBUG] [Thread-127598] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T12:23:43.427 [INFO] [Thread-127598] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T12:23:43.435 [DEBUG] [Thread-127598] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:23:43.435 [DEBUG] [Thread-127598] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T12:23:43.435 [DEBUG] [Thread-127598] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:23:43.435 [DEBUG] [Thread-127598] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:23:43.435 [DEBUG] [Thread-127598] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:23:43.435 [DEBUG] [Thread-127598] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:23:43.435 [DEBUG] [Thread-127598] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:23:43.435 [DEBUG] [Thread-127598] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:23:43.435 [DEBUG] [Thread-127598] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:23:43.435 [DEBUG] [Thread-127598] [transport.py] [_log()] client lang: <none>
2025-12-31T12:23:43.435 [DEBUG] [Thread-127598] [transport.py] [_log()] server lang: <none>
2025-12-31T12:23:43.435 [DEBUG] [Thread-127598] [transport.py] [_log()] kex follows: False
2025-12-31T12:23:43.435 [DEBUG] [Thread-127598] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:23:43.435 [DEBUG] [Thread-127598] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:23:43.436 [DEBUG] [Thread-127598] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:23:43.436 [DEBUG] [Thread-127598] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:23:43.436 [DEBUG] [Thread-127598] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:23:43.436 [DEBUG] [Thread-127598] [transport.py] [_log()] Compression: none
2025-12-31T12:23:43.436 [DEBUG] [Thread-127598] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:23:43.494 [DEBUG] [Thread-127598] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:23:43.495 [DEBUG] [Thread-127598] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:23:43.496 [DEBUG] [Thread-127598] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T12:23:43.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T12:23:43.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:23:43.551 [DEBUG] [Thread-127598] [transport.py] [_log()] userauth is OK
2025-12-31T12:23:43.551 [DEBUG] [Thread-127598] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:23:43.551 [DEBUG] [Thread-127598] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:23:43.551 [DEBUG] [Thread-127598] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T12:23:43.551 [DEBUG] [Thread-127598] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:23:43.570 [INFO] [Thread-127598] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:23:43.571 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T12:23:43.571 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:23:44.401 [DEBUG] [Thread-127598] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:23:44.401 [DEBUG] [Thread-127598] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:23:44.449 [DEBUG] [Thread-127598] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:23:44.449 [DEBUG] [Thread-127598] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:23:44.458 [DEBUG] [Thread-127598] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:23:44.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:23:44.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T12:23:44.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T12:23:44.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:23:44.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:23:44.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:23:44.495 [DEBUG] [Thread-127598] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:23:55.824 [DEBUG] [Thread-127600 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:24:10.869 [DEBUG] [Thread-127601 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:24:12.035 [DEBUG] [Thread-127602 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:24:14.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T12:24:14.517 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T12:24:14.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T12:24:15.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 12, 23, 47), 36.19, 8.09, 0.0, 7.92, 25.29, 0, 0, 0, 2, 0, 0),)
2025-12-31T12:24:15.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 12:23:47
2025-12-31T12:24:15.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T12:24:15.521 [DEBUG] [Thread-127603] [transport.py] [_log()] starting thread (client mode): 0xb6b016c0
2025-12-31T12:24:15.521 [DEBUG] [Thread-127603] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:24:15.542 [DEBUG] [Thread-127603] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T12:24:15.542 [INFO] [Thread-127603] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T12:24:15.545 [DEBUG] [Thread-127603] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:24:15.545 [DEBUG] [Thread-127603] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T12:24:15.546 [DEBUG] [Thread-127603] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:24:15.546 [DEBUG] [Thread-127603] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:24:15.546 [DEBUG] [Thread-127603] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:24:15.546 [DEBUG] [Thread-127603] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:24:15.546 [DEBUG] [Thread-127603] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:24:15.546 [DEBUG] [Thread-127603] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:24:15.546 [DEBUG] [Thread-127603] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:24:15.546 [DEBUG] [Thread-127603] [transport.py] [_log()] client lang: <none>
2025-12-31T12:24:15.546 [DEBUG] [Thread-127603] [transport.py] [_log()] server lang: <none>
2025-12-31T12:24:15.546 [DEBUG] [Thread-127603] [transport.py] [_log()] kex follows: False
2025-12-31T12:24:15.546 [DEBUG] [Thread-127603] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:24:15.546 [DEBUG] [Thread-127603] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:24:15.546 [DEBUG] [Thread-127603] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:24:15.547 [DEBUG] [Thread-127603] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:24:15.547 [DEBUG] [Thread-127603] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:24:15.547 [DEBUG] [Thread-127603] [transport.py] [_log()] Compression: none
2025-12-31T12:24:15.547 [DEBUG] [Thread-127603] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:24:15.564 [DEBUG] [Thread-127603] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:24:15.564 [DEBUG] [Thread-127603] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:24:15.565 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T12:24:15.566 [DEBUG] [Thread-127603] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T12:24:15.566 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:24:15.568 [DEBUG] [Thread-127603] [transport.py] [_log()] userauth is OK
2025-12-31T12:24:15.568 [DEBUG] [Thread-127603] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:24:15.568 [DEBUG] [Thread-127603] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:24:15.568 [DEBUG] [Thread-127603] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T12:24:15.568 [DEBUG] [Thread-127603] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:24:15.588 [INFO] [Thread-127603] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:24:15.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:24:16.169 [DEBUG] [Thread-127603] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:24:16.170 [DEBUG] [Thread-127603] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:24:16.170 [DEBUG] [Thread-127603] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T12:24:16.210 [DEBUG] [Thread-127603] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:24:16.211 [DEBUG] [Thread-127603] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:24:16.214 [DEBUG] [Thread-127603] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:24:16.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:24:16.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T12:24:16.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T12:24:16.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T12:24:16.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:24:16.232 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T12:24:16.232 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:24:16.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:24:16.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T12:24:16.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.432782 -999.00  +24.90  14.04     13   -4.80 1 2 1 1 1   888    0 30.79 23.27 ----- 17.4 14.0 290.8 16.4 31.7 -19.5 31.4 -19.0 30.9 -17.3 31.2 -17.7
2025-12-31T12:24:16.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T12:24:16.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T12:24:16.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.432782
2025-12-31T12:24:16.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T12:24:16.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T12:24:16.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T12:24:16.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T12:24:16.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T12:24:16.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T12:23:47', tmtdew=36.19, humidity=8.09, cloud=0.0, wind=7.92, temperature=25.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T10:23:12.365', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T12:24:16.235 [DEBUG] [Thread-127603] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:24:16.318 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T12:24:16.332 [DEBUG] [Thread-127606] [transport.py] [_log()] starting thread (client mode): 0xb6b14520
2025-12-31T12:24:16.332 [DEBUG] [Thread-127606] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:24:16.346 [DEBUG] [Thread-127606] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T12:24:16.346 [INFO] [Thread-127606] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T12:24:16.354 [DEBUG] [Thread-127606] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:24:16.354 [DEBUG] [Thread-127606] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T12:24:16.354 [DEBUG] [Thread-127606] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:24:16.355 [DEBUG] [Thread-127606] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:24:16.355 [DEBUG] [Thread-127606] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:24:16.355 [DEBUG] [Thread-127606] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:24:16.355 [DEBUG] [Thread-127606] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:24:16.355 [DEBUG] [Thread-127606] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:24:16.355 [DEBUG] [Thread-127606] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:24:16.355 [DEBUG] [Thread-127606] [transport.py] [_log()] client lang: <none>
2025-12-31T12:24:16.355 [DEBUG] [Thread-127606] [transport.py] [_log()] server lang: <none>
2025-12-31T12:24:16.355 [DEBUG] [Thread-127606] [transport.py] [_log()] kex follows: False
2025-12-31T12:24:16.356 [DEBUG] [Thread-127606] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:24:16.356 [DEBUG] [Thread-127606] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:24:16.356 [DEBUG] [Thread-127606] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:24:16.356 [DEBUG] [Thread-127606] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:24:16.356 [DEBUG] [Thread-127606] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:24:16.358 [DEBUG] [Thread-127606] [transport.py] [_log()] Compression: none
2025-12-31T12:24:16.358 [DEBUG] [Thread-127606] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:24:16.415 [DEBUG] [Thread-127606] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:24:16.416 [DEBUG] [Thread-127606] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:24:16.416 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T12:24:16.417 [DEBUG] [Thread-127606] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T12:24:16.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:24:16.473 [DEBUG] [Thread-127606] [transport.py] [_log()] userauth is OK
2025-12-31T12:24:16.474 [DEBUG] [Thread-127606] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:24:16.474 [DEBUG] [Thread-127606] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:24:16.474 [DEBUG] [Thread-127606] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T12:24:16.474 [DEBUG] [Thread-127606] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:24:16.493 [INFO] [Thread-127606] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:24:16.493 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T12:24:16.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:24:17.316 [DEBUG] [Thread-127606] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:24:17.317 [DEBUG] [Thread-127606] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:24:17.365 [DEBUG] [Thread-127606] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:24:17.365 [DEBUG] [Thread-127606] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:24:17.374 [DEBUG] [Thread-127606] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:24:17.382 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:24:17.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T12:24:17.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T12:24:17.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:24:17.400 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:24:17.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:24:17.408 [DEBUG] [Thread-127606] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:24:25.901 [DEBUG] [Thread-127608 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:24:40.954 [DEBUG] [Thread-127609 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:24:41.684 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:24:41.685 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:24:47.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T12:24:47.431 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T12:24:47.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T12:24:48.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 12, 24, 19), 36.09, 8.14, 0.0, 8.81, 25.23, 0, 0, 0, 2, 0, 0),)
2025-12-31T12:24:48.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 12:24:19
2025-12-31T12:24:48.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T12:24:48.470 [DEBUG] [Thread-127610] [transport.py] [_log()] starting thread (client mode): 0xb6b01db0
2025-12-31T12:24:48.470 [DEBUG] [Thread-127610] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:24:48.484 [DEBUG] [Thread-127610] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T12:24:48.484 [INFO] [Thread-127610] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T12:24:48.485 [DEBUG] [Thread-127610] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:24:48.486 [DEBUG] [Thread-127610] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T12:24:48.486 [DEBUG] [Thread-127610] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:24:48.486 [DEBUG] [Thread-127610] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:24:48.486 [DEBUG] [Thread-127610] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:24:48.486 [DEBUG] [Thread-127610] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:24:48.486 [DEBUG] [Thread-127610] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:24:48.486 [DEBUG] [Thread-127610] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:24:48.486 [DEBUG] [Thread-127610] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:24:48.486 [DEBUG] [Thread-127610] [transport.py] [_log()] client lang: <none>
2025-12-31T12:24:48.486 [DEBUG] [Thread-127610] [transport.py] [_log()] server lang: <none>
2025-12-31T12:24:48.486 [DEBUG] [Thread-127610] [transport.py] [_log()] kex follows: False
2025-12-31T12:24:48.486 [DEBUG] [Thread-127610] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:24:48.486 [DEBUG] [Thread-127610] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:24:48.486 [DEBUG] [Thread-127610] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:24:48.486 [DEBUG] [Thread-127610] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:24:48.486 [DEBUG] [Thread-127610] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:24:48.486 [DEBUG] [Thread-127610] [transport.py] [_log()] Compression: none
2025-12-31T12:24:48.486 [DEBUG] [Thread-127610] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:24:48.496 [DEBUG] [Thread-127610] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:24:48.497 [DEBUG] [Thread-127610] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:24:48.497 [DEBUG] [Thread-127610] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T12:24:48.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T12:24:48.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:24:48.498 [DEBUG] [Thread-127610] [transport.py] [_log()] userauth is OK
2025-12-31T12:24:48.498 [DEBUG] [Thread-127610] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:24:48.498 [DEBUG] [Thread-127610] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:24:48.498 [DEBUG] [Thread-127610] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T12:24:48.498 [DEBUG] [Thread-127610] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:24:48.510 [INFO] [Thread-127610] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:24:48.511 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:24:49.344 [DEBUG] [Thread-127610] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:24:49.344 [DEBUG] [Thread-127610] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:24:49.344 [DEBUG] [Thread-127610] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T12:24:49.384 [DEBUG] [Thread-127610] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:24:49.385 [DEBUG] [Thread-127610] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:24:49.387 [DEBUG] [Thread-127610] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:24:49.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:24:49.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T12:24:49.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T12:24:49.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T12:24:49.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:24:49.397 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T12:24:49.397 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:24:49.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:24:49.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T12:24:49.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.433476 -999.00  +25.20  13.65     13   -4.30 1 2 1 1 1   888    0 30.38 27.86 ----- 14.4 13.7 295.1 17.8 31.7 -18.6 31.4 -18.8 30.9 -16.7 31.2 -17.0
2025-12-31T12:24:49.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T12:24:49.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T12:24:49.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.433476
2025-12-31T12:24:49.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T12:24:49.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T12:24:49.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T12:24:49.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T12:24:49.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T12:24:49.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T12:24:19', tmtdew=36.09, humidity=8.14, cloud=0.0, wind=8.81, temperature=25.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T10:24:12.326', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T12:24:49.398 [DEBUG] [Thread-127610] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:24:49.473 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T12:24:49.485 [DEBUG] [Thread-127613] [transport.py] [_log()] starting thread (client mode): 0xb6b226e0
2025-12-31T12:24:49.485 [DEBUG] [Thread-127613] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:24:49.500 [DEBUG] [Thread-127613] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T12:24:49.500 [INFO] [Thread-127613] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T12:24:49.507 [DEBUG] [Thread-127613] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:24:49.507 [DEBUG] [Thread-127613] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T12:24:49.507 [DEBUG] [Thread-127613] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:24:49.507 [DEBUG] [Thread-127613] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:24:49.507 [DEBUG] [Thread-127613] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:24:49.507 [DEBUG] [Thread-127613] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:24:49.507 [DEBUG] [Thread-127613] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:24:49.507 [DEBUG] [Thread-127613] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:24:49.507 [DEBUG] [Thread-127613] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:24:49.507 [DEBUG] [Thread-127613] [transport.py] [_log()] client lang: <none>
2025-12-31T12:24:49.507 [DEBUG] [Thread-127613] [transport.py] [_log()] server lang: <none>
2025-12-31T12:24:49.508 [DEBUG] [Thread-127613] [transport.py] [_log()] kex follows: False
2025-12-31T12:24:49.508 [DEBUG] [Thread-127613] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:24:49.508 [DEBUG] [Thread-127613] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:24:49.508 [DEBUG] [Thread-127613] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:24:49.508 [DEBUG] [Thread-127613] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:24:49.508 [DEBUG] [Thread-127613] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:24:49.508 [DEBUG] [Thread-127613] [transport.py] [_log()] Compression: none
2025-12-31T12:24:49.508 [DEBUG] [Thread-127613] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:24:49.571 [DEBUG] [Thread-127613] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:24:49.571 [DEBUG] [Thread-127613] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:24:49.571 [DEBUG] [Thread-127613] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T12:24:49.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T12:24:49.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:24:49.627 [DEBUG] [Thread-127613] [transport.py] [_log()] userauth is OK
2025-12-31T12:24:49.627 [DEBUG] [Thread-127613] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:24:49.627 [DEBUG] [Thread-127613] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:24:49.627 [DEBUG] [Thread-127613] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T12:24:49.627 [DEBUG] [Thread-127613] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:24:49.644 [INFO] [Thread-127613] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:24:49.645 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T12:24:49.645 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:24:50.512 [DEBUG] [Thread-127613] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:24:50.513 [DEBUG] [Thread-127613] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:24:50.560 [DEBUG] [Thread-127613] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:24:50.560 [DEBUG] [Thread-127613] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:24:50.569 [DEBUG] [Thread-127613] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:24:50.577 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:24:50.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T12:24:50.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T12:24:50.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:24:50.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:24:50.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:24:50.603 [DEBUG] [Thread-127613] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:24:55.982 [DEBUG] [Thread-127615 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:25:11.035 [DEBUG] [Thread-127616 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:25:12.087 [DEBUG] [Thread-127617 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:25:20.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T12:25:20.624 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T12:25:20.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T12:25:21.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 12, 24, 51), 35.98, 8.72, 0.0, 23.41, 25.61, 0, 0, 0, 2, 0, 0),)
2025-12-31T12:25:21.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 12:24:51
2025-12-31T12:25:21.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T12:25:21.625 [DEBUG] [Thread-127618] [transport.py] [_log()] starting thread (client mode): 0xb6b03010
2025-12-31T12:25:21.625 [DEBUG] [Thread-127618] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:25:21.648 [DEBUG] [Thread-127618] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T12:25:21.648 [INFO] [Thread-127618] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T12:25:21.652 [DEBUG] [Thread-127618] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:25:21.652 [DEBUG] [Thread-127618] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T12:25:21.652 [DEBUG] [Thread-127618] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:25:21.652 [DEBUG] [Thread-127618] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:25:21.652 [DEBUG] [Thread-127618] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:25:21.652 [DEBUG] [Thread-127618] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:25:21.652 [DEBUG] [Thread-127618] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:25:21.652 [DEBUG] [Thread-127618] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:25:21.652 [DEBUG] [Thread-127618] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:25:21.653 [DEBUG] [Thread-127618] [transport.py] [_log()] client lang: <none>
2025-12-31T12:25:21.653 [DEBUG] [Thread-127618] [transport.py] [_log()] server lang: <none>
2025-12-31T12:25:21.653 [DEBUG] [Thread-127618] [transport.py] [_log()] kex follows: False
2025-12-31T12:25:21.653 [DEBUG] [Thread-127618] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:25:21.653 [DEBUG] [Thread-127618] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:25:21.653 [DEBUG] [Thread-127618] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:25:21.653 [DEBUG] [Thread-127618] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:25:21.653 [DEBUG] [Thread-127618] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:25:21.653 [DEBUG] [Thread-127618] [transport.py] [_log()] Compression: none
2025-12-31T12:25:21.654 [DEBUG] [Thread-127618] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:25:21.673 [DEBUG] [Thread-127618] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:25:21.674 [DEBUG] [Thread-127618] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:25:21.674 [DEBUG] [Thread-127618] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T12:25:21.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T12:25:21.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:25:21.676 [DEBUG] [Thread-127618] [transport.py] [_log()] userauth is OK
2025-12-31T12:25:21.676 [DEBUG] [Thread-127618] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:25:21.676 [DEBUG] [Thread-127618] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:25:21.677 [DEBUG] [Thread-127618] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T12:25:21.677 [DEBUG] [Thread-127618] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:25:21.697 [INFO] [Thread-127618] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:25:21.698 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:25:22.325 [DEBUG] [Thread-127618] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:25:22.325 [DEBUG] [Thread-127618] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:25:22.325 [DEBUG] [Thread-127618] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T12:25:22.366 [DEBUG] [Thread-127618] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:25:22.366 [DEBUG] [Thread-127618] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:25:22.369 [DEBUG] [Thread-127618] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:25:22.381 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:25:22.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T12:25:22.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T12:25:22.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T12:25:22.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:25:22.392 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T12:25:22.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:25:22.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:25:22.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T12:25:22.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.433823 -999.00  +25.90  13.71     13   -4.10 1 2 1 1 1   888    0 30.51 34.01 ----- 13.0 13.7 293.0 18.0 31.6 -19.2 31.5 -18.5 30.8 -20.0 31.2 -17.6
2025-12-31T12:25:22.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T12:25:22.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T12:25:22.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.433823
2025-12-31T12:25:22.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T12:25:22.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T12:25:22.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T12:25:22.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T12:25:22.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T12:25:22.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T12:24:51', tmtdew=35.98, humidity=8.72, cloud=0.0, wind=23.41, temperature=25.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T10:24:42.307', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T12:25:22.395 [DEBUG] [Thread-127618] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:25:22.476 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T12:25:22.489 [DEBUG] [Thread-127621] [transport.py] [_log()] starting thread (client mode): 0xb6b207f0
2025-12-31T12:25:22.489 [DEBUG] [Thread-127621] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:25:22.505 [DEBUG] [Thread-127621] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T12:25:22.505 [INFO] [Thread-127621] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T12:25:22.513 [DEBUG] [Thread-127621] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:25:22.513 [DEBUG] [Thread-127621] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T12:25:22.513 [DEBUG] [Thread-127621] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:25:22.513 [DEBUG] [Thread-127621] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:25:22.513 [DEBUG] [Thread-127621] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:25:22.513 [DEBUG] [Thread-127621] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:25:22.513 [DEBUG] [Thread-127621] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:25:22.513 [DEBUG] [Thread-127621] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:25:22.513 [DEBUG] [Thread-127621] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:25:22.513 [DEBUG] [Thread-127621] [transport.py] [_log()] client lang: <none>
2025-12-31T12:25:22.513 [DEBUG] [Thread-127621] [transport.py] [_log()] server lang: <none>
2025-12-31T12:25:22.513 [DEBUG] [Thread-127621] [transport.py] [_log()] kex follows: False
2025-12-31T12:25:22.513 [DEBUG] [Thread-127621] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:25:22.513 [DEBUG] [Thread-127621] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:25:22.514 [DEBUG] [Thread-127621] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:25:22.514 [DEBUG] [Thread-127621] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:25:22.514 [DEBUG] [Thread-127621] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:25:22.514 [DEBUG] [Thread-127621] [transport.py] [_log()] Compression: none
2025-12-31T12:25:22.514 [DEBUG] [Thread-127621] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:25:22.570 [DEBUG] [Thread-127621] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:25:22.571 [DEBUG] [Thread-127621] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:25:22.571 [DEBUG] [Thread-127621] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T12:25:22.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T12:25:22.572 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:25:22.626 [DEBUG] [Thread-127621] [transport.py] [_log()] userauth is OK
2025-12-31T12:25:22.627 [DEBUG] [Thread-127621] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:25:22.627 [DEBUG] [Thread-127621] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:25:22.627 [DEBUG] [Thread-127621] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T12:25:22.627 [DEBUG] [Thread-127621] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:25:22.645 [INFO] [Thread-127621] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:25:22.646 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T12:25:22.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:25:23.461 [DEBUG] [Thread-127621] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:25:23.461 [DEBUG] [Thread-127621] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:25:23.510 [DEBUG] [Thread-127621] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:25:23.510 [DEBUG] [Thread-127621] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:25:23.518 [DEBUG] [Thread-127621] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:25:23.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:25:23.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T12:25:23.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-12-31T12:25:23.542 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:25:23.542 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:25:23.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:25:23.550 [DEBUG] [Thread-127621] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:25:26.071 [DEBUG] [Thread-127623 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:25:41.114 [DEBUG] [Thread-127624 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:25:41.826 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:25:41.827 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:25:53.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T12:25:53.573 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T12:25:53.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T12:25:54.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 12, 25, 23), 36.22, 8.59, 0.0, 24.9, 25.76, 0, 0, 0, 2, 0, 0),)
2025-12-31T12:25:54.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 12:25:23
2025-12-31T12:25:54.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T12:25:54.547 [DEBUG] [Thread-127625] [transport.py] [_log()] starting thread (client mode): 0xb6b291e0
2025-12-31T12:25:54.547 [DEBUG] [Thread-127625] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:25:54.568 [DEBUG] [Thread-127625] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T12:25:54.568 [INFO] [Thread-127625] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T12:25:54.571 [DEBUG] [Thread-127625] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:25:54.572 [DEBUG] [Thread-127625] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T12:25:54.572 [DEBUG] [Thread-127625] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:25:54.572 [DEBUG] [Thread-127625] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:25:54.572 [DEBUG] [Thread-127625] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:25:54.572 [DEBUG] [Thread-127625] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:25:54.572 [DEBUG] [Thread-127625] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:25:54.572 [DEBUG] [Thread-127625] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:25:54.572 [DEBUG] [Thread-127625] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:25:54.572 [DEBUG] [Thread-127625] [transport.py] [_log()] client lang: <none>
2025-12-31T12:25:54.572 [DEBUG] [Thread-127625] [transport.py] [_log()] server lang: <none>
2025-12-31T12:25:54.572 [DEBUG] [Thread-127625] [transport.py] [_log()] kex follows: False
2025-12-31T12:25:54.572 [DEBUG] [Thread-127625] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:25:54.572 [DEBUG] [Thread-127625] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:25:54.573 [DEBUG] [Thread-127625] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:25:54.573 [DEBUG] [Thread-127625] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:25:54.573 [DEBUG] [Thread-127625] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:25:54.573 [DEBUG] [Thread-127625] [transport.py] [_log()] Compression: none
2025-12-31T12:25:54.573 [DEBUG] [Thread-127625] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:25:54.591 [DEBUG] [Thread-127625] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:25:54.591 [DEBUG] [Thread-127625] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:25:54.592 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T12:25:54.592 [DEBUG] [Thread-127625] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T12:25:54.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:25:54.594 [DEBUG] [Thread-127625] [transport.py] [_log()] userauth is OK
2025-12-31T12:25:54.595 [DEBUG] [Thread-127625] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:25:54.595 [DEBUG] [Thread-127625] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:25:54.595 [DEBUG] [Thread-127625] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T12:25:54.595 [DEBUG] [Thread-127625] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:25:54.620 [INFO] [Thread-127625] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:25:54.621 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:25:55.281 [DEBUG] [Thread-127625] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:25:55.281 [DEBUG] [Thread-127625] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:25:55.282 [DEBUG] [Thread-127625] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T12:25:55.322 [DEBUG] [Thread-127625] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:25:55.322 [DEBUG] [Thread-127625] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:25:55.324 [DEBUG] [Thread-127625] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:25:55.338 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:25:55.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T12:25:55.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T12:25:55.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T12:25:55.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:25:55.348 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T12:25:55.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:25:55.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:25:55.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T12:25:55.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.434171 -999.00  +26.10  23.12     13   -4.20 1 2 1 1 1   888    0 30.97 38.74 ----- 26.4 23.1 275.4 36.4 31.6 -20.9 31.6 -18.8 30.7 -20.7 31.2 -18.8
2025-12-31T12:25:55.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T12:25:55.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T12:25:55.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.434171
2025-12-31T12:25:55.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T12:25:55.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T12:25:55.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T12:25:55.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T12:25:55.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T12:25:55.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T12:25:23', tmtdew=36.22, humidity=8.59, cloud=0.0, wind=24.9, temperature=25.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T10:25:12.374', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T12:25:55.351 [DEBUG] [Thread-127625] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:25:55.436 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T12:25:55.448 [DEBUG] [Thread-127628] [transport.py] [_log()] starting thread (client mode): 0xb6b2b490
2025-12-31T12:25:55.448 [DEBUG] [Thread-127628] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:25:55.463 [DEBUG] [Thread-127628] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T12:25:55.463 [INFO] [Thread-127628] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T12:25:55.471 [DEBUG] [Thread-127628] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:25:55.471 [DEBUG] [Thread-127628] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T12:25:55.471 [DEBUG] [Thread-127628] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:25:55.471 [DEBUG] [Thread-127628] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:25:55.471 [DEBUG] [Thread-127628] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:25:55.471 [DEBUG] [Thread-127628] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:25:55.471 [DEBUG] [Thread-127628] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:25:55.471 [DEBUG] [Thread-127628] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:25:55.472 [DEBUG] [Thread-127628] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:25:55.472 [DEBUG] [Thread-127628] [transport.py] [_log()] client lang: <none>
2025-12-31T12:25:55.472 [DEBUG] [Thread-127628] [transport.py] [_log()] server lang: <none>
2025-12-31T12:25:55.472 [DEBUG] [Thread-127628] [transport.py] [_log()] kex follows: False
2025-12-31T12:25:55.472 [DEBUG] [Thread-127628] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:25:55.472 [DEBUG] [Thread-127628] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:25:55.472 [DEBUG] [Thread-127628] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:25:55.472 [DEBUG] [Thread-127628] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:25:55.472 [DEBUG] [Thread-127628] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:25:55.472 [DEBUG] [Thread-127628] [transport.py] [_log()] Compression: none
2025-12-31T12:25:55.473 [DEBUG] [Thread-127628] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:25:55.526 [DEBUG] [Thread-127628] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:25:55.526 [DEBUG] [Thread-127628] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:25:55.527 [DEBUG] [Thread-127628] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T12:25:55.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T12:25:55.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:25:55.584 [DEBUG] [Thread-127628] [transport.py] [_log()] userauth is OK
2025-12-31T12:25:55.584 [DEBUG] [Thread-127628] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:25:55.584 [DEBUG] [Thread-127628] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:25:55.584 [DEBUG] [Thread-127628] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T12:25:55.584 [DEBUG] [Thread-127628] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:25:55.599 [INFO] [Thread-127628] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:25:55.599 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T12:25:55.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:25:56.144 [DEBUG] [Thread-127630 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:25:56.428 [DEBUG] [Thread-127628] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:25:56.428 [DEBUG] [Thread-127628] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:25:56.476 [DEBUG] [Thread-127628] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:25:56.476 [DEBUG] [Thread-127628] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:25:56.484 [DEBUG] [Thread-127628] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:25:56.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:25:56.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T12:25: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') -> 00000000
2025-12-31T12:25:56.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:25:56.508 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:25:56.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:25:56.516 [DEBUG] [Thread-127628] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:26:11.192 [DEBUG] [Thread-127631 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:26:12.156 [DEBUG] [Thread-127632 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:26:26.229 [DEBUG] [Thread-127633 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:26:26.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T12:26:26.539 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T12:26:26.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T12:26:27.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 12, 25, 55), 36.86, 7.81, 0.0, 29.82, 26.05, 0, 0, 0, 2, 0, 0),)
2025-12-31T12:26:27.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 12:25:55
2025-12-31T12:26:27.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T12:26:27.510 [DEBUG] [Thread-127634] [transport.py] [_log()] starting thread (client mode): 0xb6b01540
2025-12-31T12:26:27.510 [DEBUG] [Thread-127634] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:26:27.530 [DEBUG] [Thread-127634] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T12:26:27.530 [INFO] [Thread-127634] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T12:26:27.534 [DEBUG] [Thread-127634] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:26:27.534 [DEBUG] [Thread-127634] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T12:26:27.534 [DEBUG] [Thread-127634] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:26:27.534 [DEBUG] [Thread-127634] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:26:27.534 [DEBUG] [Thread-127634] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:26:27.534 [DEBUG] [Thread-127634] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:26:27.534 [DEBUG] [Thread-127634] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:26:27.534 [DEBUG] [Thread-127634] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:26:27.534 [DEBUG] [Thread-127634] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:26:27.534 [DEBUG] [Thread-127634] [transport.py] [_log()] client lang: <none>
2025-12-31T12:26:27.534 [DEBUG] [Thread-127634] [transport.py] [_log()] server lang: <none>
2025-12-31T12:26:27.534 [DEBUG] [Thread-127634] [transport.py] [_log()] kex follows: False
2025-12-31T12:26:27.535 [DEBUG] [Thread-127634] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:26:27.535 [DEBUG] [Thread-127634] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:26:27.535 [DEBUG] [Thread-127634] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:26:27.535 [DEBUG] [Thread-127634] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:26:27.535 [DEBUG] [Thread-127634] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:26:27.535 [DEBUG] [Thread-127634] [transport.py] [_log()] Compression: none
2025-12-31T12:26:27.535 [DEBUG] [Thread-127634] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:26:27.552 [DEBUG] [Thread-127634] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:26:27.553 [DEBUG] [Thread-127634] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:26:27.554 [DEBUG] [Thread-127634] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T12:26:27.554 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T12:26:27.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:26:27.556 [DEBUG] [Thread-127634] [transport.py] [_log()] userauth is OK
2025-12-31T12:26:27.556 [DEBUG] [Thread-127634] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:26:27.556 [DEBUG] [Thread-127634] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:26:27.556 [DEBUG] [Thread-127634] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T12:26:27.556 [DEBUG] [Thread-127634] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:26:27.568 [INFO] [Thread-127634] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:26:27.568 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:26:28.229 [DEBUG] [Thread-127634] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:26:28.229 [DEBUG] [Thread-127634] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:26:28.229 [DEBUG] [Thread-127634] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T12:26:28.271 [DEBUG] [Thread-127634] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:26:28.271 [DEBUG] [Thread-127634] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:26:28.274 [DEBUG] [Thread-127634] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:26:28.284 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:26:28.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T12:26:28.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T12:26:28.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T12:26:28.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:26:28.290 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T12:26:28.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:26:28.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:26:28.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T12:26:28.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.434518 -999.00  +25.60  23.93     13   -4.40 1 2 1 1 1   888    0 30.98 40.31 ----- 21.2 23.9 277.2 29.9 31.3 -20.6 31.3 -19.5 30.3 -18.5 30.9 -18.6
2025-12-31T12:26:28.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T12:26:28.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T12:26:28.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.434518
2025-12-31T12:26:28.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T12:26:28.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T12:26:28.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T12:26:28.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T12:26:28.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T12:26:28.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T12:25:55', tmtdew=36.86, humidity=7.81, cloud=0.0, wind=29.82, temperature=26.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T10:25:42.355', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T12:26:28.292 [DEBUG] [Thread-127634] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:26:28.366 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T12:26:28.377 [DEBUG] [Thread-127637] [transport.py] [_log()] starting thread (client mode): 0xb95b11b0
2025-12-31T12:26:28.377 [DEBUG] [Thread-127637] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:26:28.391 [DEBUG] [Thread-127637] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T12:26:28.392 [INFO] [Thread-127637] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T12:26:28.399 [DEBUG] [Thread-127637] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:26:28.399 [DEBUG] [Thread-127637] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T12:26:28.399 [DEBUG] [Thread-127637] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:26:28.399 [DEBUG] [Thread-127637] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:26:28.399 [DEBUG] [Thread-127637] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:26:28.399 [DEBUG] [Thread-127637] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:26:28.399 [DEBUG] [Thread-127637] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:26:28.399 [DEBUG] [Thread-127637] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:26:28.399 [DEBUG] [Thread-127637] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:26:28.399 [DEBUG] [Thread-127637] [transport.py] [_log()] client lang: <none>
2025-12-31T12:26:28.399 [DEBUG] [Thread-127637] [transport.py] [_log()] server lang: <none>
2025-12-31T12:26:28.399 [DEBUG] [Thread-127637] [transport.py] [_log()] kex follows: False
2025-12-31T12:26:28.399 [DEBUG] [Thread-127637] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:26:28.399 [DEBUG] [Thread-127637] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:26:28.399 [DEBUG] [Thread-127637] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:26:28.399 [DEBUG] [Thread-127637] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:26:28.399 [DEBUG] [Thread-127637] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:26:28.399 [DEBUG] [Thread-127637] [transport.py] [_log()] Compression: none
2025-12-31T12:26:28.399 [DEBUG] [Thread-127637] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:26:28.454 [DEBUG] [Thread-127637] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:26:28.454 [DEBUG] [Thread-127637] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:26:28.454 [DEBUG] [Thread-127637] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T12:26:28.454 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T12:26:28.454 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:26:28.511 [DEBUG] [Thread-127637] [transport.py] [_log()] userauth is OK
2025-12-31T12:26:28.511 [DEBUG] [Thread-127637] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:26:28.511 [DEBUG] [Thread-127637] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:26:28.511 [DEBUG] [Thread-127637] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T12:26:28.511 [DEBUG] [Thread-127637] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:26:28.525 [INFO] [Thread-127637] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:26:28.525 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T12:26:28.525 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:26:29.350 [DEBUG] [Thread-127637] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:26:29.350 [DEBUG] [Thread-127637] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:26:29.397 [DEBUG] [Thread-127637] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:26:29.397 [DEBUG] [Thread-127637] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:26:29.406 [DEBUG] [Thread-127637] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:26:29.413 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:26:29.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T12:26:29.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T12:26:29.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:26:29.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:26:29.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:26:29.437 [DEBUG] [Thread-127637] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:26:41.266 [DEBUG] [Thread-127639 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:26:41.966 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:26:41.967 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:26:56.314 [DEBUG] [Thread-127640 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:26:59.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T12:26:59.448 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T12:26:59.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T12:27:00.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 12, 26, 27), 37.17, 7.61, 0.0, 32.29, 25.97, 0, 0, 0, 2, 0, 0),)
2025-12-31T12:27:00.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 12:26:27
2025-12-31T12:27:00.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T12:27:00.500 [DEBUG] [Thread-127641] [transport.py] [_log()] starting thread (client mode): 0xb95b0ee0
2025-12-31T12:27:00.500 [DEBUG] [Thread-127641] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:27:00.511 [DEBUG] [Thread-127641] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T12:27:00.511 [INFO] [Thread-127641] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T12:27:00.514 [DEBUG] [Thread-127641] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:27:00.514 [DEBUG] [Thread-127641] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T12:27:00.514 [DEBUG] [Thread-127641] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:27:00.514 [DEBUG] [Thread-127641] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:27:00.514 [DEBUG] [Thread-127641] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:27:00.514 [DEBUG] [Thread-127641] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:27:00.514 [DEBUG] [Thread-127641] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:27:00.514 [DEBUG] [Thread-127641] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:27:00.514 [DEBUG] [Thread-127641] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:27:00.514 [DEBUG] [Thread-127641] [transport.py] [_log()] client lang: <none>
2025-12-31T12:27:00.514 [DEBUG] [Thread-127641] [transport.py] [_log()] server lang: <none>
2025-12-31T12:27:00.514 [DEBUG] [Thread-127641] [transport.py] [_log()] kex follows: False
2025-12-31T12:27:00.514 [DEBUG] [Thread-127641] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:27:00.514 [DEBUG] [Thread-127641] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:27:00.514 [DEBUG] [Thread-127641] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:27:00.514 [DEBUG] [Thread-127641] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:27:00.514 [DEBUG] [Thread-127641] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:27:00.514 [DEBUG] [Thread-127641] [transport.py] [_log()] Compression: none
2025-12-31T12:27:00.514 [DEBUG] [Thread-127641] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:27:00.522 [DEBUG] [Thread-127641] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:27:00.522 [DEBUG] [Thread-127641] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:27:00.522 [DEBUG] [Thread-127641] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T12:27:00.522 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T12:27:00.522 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:27:00.523 [DEBUG] [Thread-127641] [transport.py] [_log()] userauth is OK
2025-12-31T12:27:00.523 [DEBUG] [Thread-127641] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:27:00.523 [DEBUG] [Thread-127641] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:27:00.523 [DEBUG] [Thread-127641] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T12:27:00.523 [DEBUG] [Thread-127641] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:27:00.535 [INFO] [Thread-127641] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:27:00.535 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:27:01.198 [DEBUG] [Thread-127641] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:27:01.198 [DEBUG] [Thread-127641] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:27:01.198 [DEBUG] [Thread-127641] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T12:27:01.239 [DEBUG] [Thread-127641] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:27:01.240 [DEBUG] [Thread-127641] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:27:01.243 [DEBUG] [Thread-127641] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:27:01.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:27:01.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T12:27:01.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T12:27:01.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T12:27:01.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:27:01.265 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T12:27:01.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:27:01.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:27:01.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T12:27:01.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.434865 -999.00  +25.80  30.86     13   -4.50 1 2 2 1 1   888    0 31.35 43.79 ----- 29.7 30.9 285.8 35.4 31.2 -20.1 31.1 -18.5 30.1 -21.3 30.9 -18.2
2025-12-31T12:27:01.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T12:27:01.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T12:27:01.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.434865
2025-12-31T12:27:01.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T12:27:01.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T12:27:01.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T12:27:01.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T12:27:01.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T12:27:01.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T12:26:27', tmtdew=37.17, humidity=7.61, cloud=0.0, wind=32.29, temperature=25.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T10:26:12.336', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T12:27:01.267 [DEBUG] [Thread-127641] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:27:01.340 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T12:27:01.352 [DEBUG] [Thread-127644] [transport.py] [_log()] starting thread (client mode): 0xb6b29ea0
2025-12-31T12:27:01.352 [DEBUG] [Thread-127644] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:27:01.366 [DEBUG] [Thread-127644] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T12:27:01.366 [INFO] [Thread-127644] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T12:27:01.374 [DEBUG] [Thread-127644] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:27:01.374 [DEBUG] [Thread-127644] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T12:27:01.374 [DEBUG] [Thread-127644] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:27:01.374 [DEBUG] [Thread-127644] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:27:01.374 [DEBUG] [Thread-127644] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:27:01.374 [DEBUG] [Thread-127644] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:27:01.374 [DEBUG] [Thread-127644] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:27:01.374 [DEBUG] [Thread-127644] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:27:01.374 [DEBUG] [Thread-127644] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:27:01.374 [DEBUG] [Thread-127644] [transport.py] [_log()] client lang: <none>
2025-12-31T12:27:01.374 [DEBUG] [Thread-127644] [transport.py] [_log()] server lang: <none>
2025-12-31T12:27:01.374 [DEBUG] [Thread-127644] [transport.py] [_log()] kex follows: False
2025-12-31T12:27:01.374 [DEBUG] [Thread-127644] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:27:01.374 [DEBUG] [Thread-127644] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:27:01.374 [DEBUG] [Thread-127644] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:27:01.374 [DEBUG] [Thread-127644] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:27:01.374 [DEBUG] [Thread-127644] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:27:01.374 [DEBUG] [Thread-127644] [transport.py] [_log()] Compression: none
2025-12-31T12:27:01.374 [DEBUG] [Thread-127644] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:27:01.431 [DEBUG] [Thread-127644] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:27:01.432 [DEBUG] [Thread-127644] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:27:01.432 [DEBUG] [Thread-127644] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T12:27:01.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T12:27:01.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:27:01.491 [DEBUG] [Thread-127644] [transport.py] [_log()] userauth is OK
2025-12-31T12:27:01.491 [DEBUG] [Thread-127644] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:27:01.491 [DEBUG] [Thread-127644] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:27:01.491 [DEBUG] [Thread-127644] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T12:27:01.491 [DEBUG] [Thread-127644] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:27:01.505 [INFO] [Thread-127644] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:27:01.505 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T12:27:01.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:27:02.386 [DEBUG] [Thread-127644] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:27:02.386 [DEBUG] [Thread-127644] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:27:02.434 [DEBUG] [Thread-127644] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:27:02.434 [DEBUG] [Thread-127644] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:27:02.443 [DEBUG] [Thread-127644] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:27:02.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:27:02.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T12:27:02.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T12:27:02.471 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:27:02.472 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:27:02.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:27:02.480 [DEBUG] [Thread-127644] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:27:11.355 [DEBUG] [Thread-127646 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:27:12.200 [DEBUG] [Thread-127647 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:27:26.413 [DEBUG] [Thread-127648 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:27:32.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T12:27:32.501 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T12:27:32.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T12:27:33.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 12, 26, 59), 37.44, 7.61, 0.0, 29.8, 26.34, 0, 0, 0, 2, 0, 0),)
2025-12-31T12:27:33.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 12:26:59
2025-12-31T12:27:33.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T12:27:33.543 [DEBUG] [Thread-127649] [transport.py] [_log()] starting thread (client mode): 0xb95b1510
2025-12-31T12:27:33.543 [DEBUG] [Thread-127649] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:27:33.564 [DEBUG] [Thread-127649] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T12:27:33.564 [INFO] [Thread-127649] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T12:27:33.567 [DEBUG] [Thread-127649] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:27:33.567 [DEBUG] [Thread-127649] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T12:27:33.567 [DEBUG] [Thread-127649] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:27:33.567 [DEBUG] [Thread-127649] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:27:33.567 [DEBUG] [Thread-127649] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:27:33.567 [DEBUG] [Thread-127649] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:27:33.567 [DEBUG] [Thread-127649] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:27:33.567 [DEBUG] [Thread-127649] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:27:33.567 [DEBUG] [Thread-127649] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:27:33.567 [DEBUG] [Thread-127649] [transport.py] [_log()] client lang: <none>
2025-12-31T12:27:33.567 [DEBUG] [Thread-127649] [transport.py] [_log()] server lang: <none>
2025-12-31T12:27:33.567 [DEBUG] [Thread-127649] [transport.py] [_log()] kex follows: False
2025-12-31T12:27:33.567 [DEBUG] [Thread-127649] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:27:33.567 [DEBUG] [Thread-127649] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:27:33.567 [DEBUG] [Thread-127649] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:27:33.567 [DEBUG] [Thread-127649] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:27:33.567 [DEBUG] [Thread-127649] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:27:33.567 [DEBUG] [Thread-127649] [transport.py] [_log()] Compression: none
2025-12-31T12:27:33.567 [DEBUG] [Thread-127649] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:27:33.582 [DEBUG] [Thread-127649] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:27:33.582 [DEBUG] [Thread-127649] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:27:33.582 [DEBUG] [Thread-127649] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T12:27:33.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T12:27:33.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:27:33.624 [DEBUG] [Thread-127649] [transport.py] [_log()] userauth is OK
2025-12-31T12:27:33.624 [DEBUG] [Thread-127649] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:27:33.624 [DEBUG] [Thread-127649] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:27:33.624 [DEBUG] [Thread-127649] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T12:27:33.624 [DEBUG] [Thread-127649] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:27:33.651 [INFO] [Thread-127649] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:27:33.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:27:34.281 [DEBUG] [Thread-127649] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:27:34.281 [DEBUG] [Thread-127649] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:27:34.282 [DEBUG] [Thread-127649] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T12:27:34.322 [DEBUG] [Thread-127649] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:27:34.322 [DEBUG] [Thread-127649] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:27:34.326 [DEBUG] [Thread-127649] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:27:34.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:27:34.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T12:27:34.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T12:27:34.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T12:27:34.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:27:34.349 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T12:27:34.350 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:27:34.350 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:27:34.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T12:27:34.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.435212 -999.00  +25.50  24.84     12   -5.00 1 2 1 1 1   888    0 31.14 52.69 ----- 18.0 24.8 294.4 33.9 31.1 -20.5 31.0 -18.3 30.2 -17.9 30.6 -18.1
2025-12-31T12:27:34.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T12:27:34.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T12:27:34.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.435212
2025-12-31T12:27:34.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T12:27:34.351 [DEBUG] [Thread-127649] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:27:34.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T12:27:34.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T12:27:34.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T12:27:34.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T12:27:34.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T12:26:59', tmtdew=37.44, humidity=7.61, cloud=0.0, wind=29.8, temperature=26.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T10:26:42.317', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T12:27:34.438 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T12:27:34.449 [DEBUG] [Thread-127652] [transport.py] [_log()] starting thread (client mode): 0xb95b22f0
2025-12-31T12:27:34.449 [DEBUG] [Thread-127652] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:27:34.465 [DEBUG] [Thread-127652] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T12:27:34.465 [INFO] [Thread-127652] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T12:27:34.472 [DEBUG] [Thread-127652] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:27:34.473 [DEBUG] [Thread-127652] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T12:27:34.473 [DEBUG] [Thread-127652] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:27:34.473 [DEBUG] [Thread-127652] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:27:34.473 [DEBUG] [Thread-127652] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:27:34.473 [DEBUG] [Thread-127652] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:27:34.473 [DEBUG] [Thread-127652] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:27:34.474 [DEBUG] [Thread-127652] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:27:34.474 [DEBUG] [Thread-127652] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:27:34.474 [DEBUG] [Thread-127652] [transport.py] [_log()] client lang: <none>
2025-12-31T12:27:34.474 [DEBUG] [Thread-127652] [transport.py] [_log()] server lang: <none>
2025-12-31T12:27:34.474 [DEBUG] [Thread-127652] [transport.py] [_log()] kex follows: False
2025-12-31T12:27:34.474 [DEBUG] [Thread-127652] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:27:34.474 [DEBUG] [Thread-127652] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:27:34.474 [DEBUG] [Thread-127652] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:27:34.474 [DEBUG] [Thread-127652] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:27:34.474 [DEBUG] [Thread-127652] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:27:34.474 [DEBUG] [Thread-127652] [transport.py] [_log()] Compression: none
2025-12-31T12:27:34.474 [DEBUG] [Thread-127652] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:27:34.531 [DEBUG] [Thread-127652] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:27:34.531 [DEBUG] [Thread-127652] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:27:34.531 [DEBUG] [Thread-127652] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T12:27:34.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T12:27:34.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:27:34.589 [DEBUG] [Thread-127652] [transport.py] [_log()] userauth is OK
2025-12-31T12:27:34.590 [DEBUG] [Thread-127652] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:27:34.590 [DEBUG] [Thread-127652] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:27:34.590 [DEBUG] [Thread-127652] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T12:27:34.590 [DEBUG] [Thread-127652] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:27:34.609 [INFO] [Thread-127652] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:27:34.610 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T12:27:34.610 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:27:35.430 [DEBUG] [Thread-127652] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:27:35.430 [DEBUG] [Thread-127652] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:27:35.480 [DEBUG] [Thread-127652] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:27:35.480 [DEBUG] [Thread-127652] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:27:35.488 [DEBUG] [Thread-127652] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:27:35.497 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:27: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-12-31T12:27: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-12-31T12:27:35.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:27:35.514 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:27:35.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:27:35.522 [DEBUG] [Thread-127652] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:27:41.449 [DEBUG] [Thread-127654 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:27:42.109 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:27:42.110 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:27:56.506 [DEBUG] [Thread-127655 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:28:05.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T12:28:05.544 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T12:28:05.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T12:28:06.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 12, 27, 31), 37.41, 7.62, 0.0, 25.46, 26.34, 0, 0, 0, 2, 0, 0),)
2025-12-31T12:28:06.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 12:27:31
2025-12-31T12:28:06.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T12:28:06.533 [DEBUG] [Thread-127656] [transport.py] [_log()] starting thread (client mode): 0xb6b2b0a0
2025-12-31T12:28:06.533 [DEBUG] [Thread-127656] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:28:06.548 [DEBUG] [Thread-127656] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T12:28:06.548 [INFO] [Thread-127656] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T12:28:06.550 [DEBUG] [Thread-127656] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:28:06.550 [DEBUG] [Thread-127656] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T12:28:06.550 [DEBUG] [Thread-127656] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:28:06.550 [DEBUG] [Thread-127656] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:28:06.550 [DEBUG] [Thread-127656] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:28:06.550 [DEBUG] [Thread-127656] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:28:06.550 [DEBUG] [Thread-127656] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:28:06.550 [DEBUG] [Thread-127656] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:28:06.550 [DEBUG] [Thread-127656] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:28:06.550 [DEBUG] [Thread-127656] [transport.py] [_log()] client lang: <none>
2025-12-31T12:28:06.550 [DEBUG] [Thread-127656] [transport.py] [_log()] server lang: <none>
2025-12-31T12:28:06.550 [DEBUG] [Thread-127656] [transport.py] [_log()] kex follows: False
2025-12-31T12:28:06.550 [DEBUG] [Thread-127656] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:28:06.550 [DEBUG] [Thread-127656] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:28:06.550 [DEBUG] [Thread-127656] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:28:06.550 [DEBUG] [Thread-127656] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:28:06.550 [DEBUG] [Thread-127656] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:28:06.550 [DEBUG] [Thread-127656] [transport.py] [_log()] Compression: none
2025-12-31T12:28:06.550 [DEBUG] [Thread-127656] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:28:06.558 [DEBUG] [Thread-127656] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:28:06.558 [DEBUG] [Thread-127656] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:28:06.559 [DEBUG] [Thread-127656] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T12:28:06.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T12:28:06.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:28:06.560 [DEBUG] [Thread-127656] [transport.py] [_log()] userauth is OK
2025-12-31T12:28:06.560 [DEBUG] [Thread-127656] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:28:06.560 [DEBUG] [Thread-127656] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:28:06.560 [DEBUG] [Thread-127656] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T12:28:06.560 [DEBUG] [Thread-127656] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:28:06.574 [INFO] [Thread-127656] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:28:06.574 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:28:07.236 [DEBUG] [Thread-127656] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:28:07.236 [DEBUG] [Thread-127656] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:28:07.237 [DEBUG] [Thread-127656] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T12:28:07.277 [DEBUG] [Thread-127656] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:28:07.277 [DEBUG] [Thread-127656] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:28:07.280 [DEBUG] [Thread-127656] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:28:07.293 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:28:07.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T12:28:07.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T12:28:07.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T12:28:07.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:28:07.304 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T12:28:07.305 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:28:07.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:28:07.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T12:28:07.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.435559 -999.00  +26.00  22.03     12   -4.70 1 2 1 1 1   888    0 31.79 48.90 ----- 24.9 22.0 291.4 23.9 31.2 -18.2 30.9 -18.0 30.4 -16.4 30.7 -16.7
2025-12-31T12:28:07.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T12:28:07.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T12:28:07.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.435559
2025-12-31T12:28:07.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T12:28:07.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T12:28:07.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T12:28:07.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T12:28:07.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T12:28:07.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T12:27:31', tmtdew=37.41, humidity=7.62, cloud=0.0, wind=25.46, temperature=26.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T10:27:12.298', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T12:28:07.307 [DEBUG] [Thread-127656] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:28:07.391 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T12:28:07.402 [DEBUG] [Thread-127659] [transport.py] [_log()] starting thread (client mode): 0xb6b21ea0
2025-12-31T12:28:07.402 [DEBUG] [Thread-127659] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:28:07.420 [DEBUG] [Thread-127659] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T12:28:07.420 [INFO] [Thread-127659] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T12:28:07.427 [DEBUG] [Thread-127659] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:28:07.427 [DEBUG] [Thread-127659] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T12:28:07.428 [DEBUG] [Thread-127659] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:28:07.428 [DEBUG] [Thread-127659] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:28:07.428 [DEBUG] [Thread-127659] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:28:07.428 [DEBUG] [Thread-127659] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:28:07.428 [DEBUG] [Thread-127659] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:28:07.428 [DEBUG] [Thread-127659] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:28:07.428 [DEBUG] [Thread-127659] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:28:07.428 [DEBUG] [Thread-127659] [transport.py] [_log()] client lang: <none>
2025-12-31T12:28:07.428 [DEBUG] [Thread-127659] [transport.py] [_log()] server lang: <none>
2025-12-31T12:28:07.428 [DEBUG] [Thread-127659] [transport.py] [_log()] kex follows: False
2025-12-31T12:28:07.428 [DEBUG] [Thread-127659] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:28:07.429 [DEBUG] [Thread-127659] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:28:07.429 [DEBUG] [Thread-127659] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:28:07.429 [DEBUG] [Thread-127659] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:28:07.429 [DEBUG] [Thread-127659] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:28:07.429 [DEBUG] [Thread-127659] [transport.py] [_log()] Compression: none
2025-12-31T12:28:07.429 [DEBUG] [Thread-127659] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:28:07.483 [DEBUG] [Thread-127659] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:28:07.484 [DEBUG] [Thread-127659] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:28:07.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T12:28:07.485 [DEBUG] [Thread-127659] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T12:28:07.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:28:07.540 [DEBUG] [Thread-127659] [transport.py] [_log()] userauth is OK
2025-12-31T12:28:07.541 [DEBUG] [Thread-127659] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:28:07.541 [DEBUG] [Thread-127659] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:28:07.541 [DEBUG] [Thread-127659] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T12:28:07.541 [DEBUG] [Thread-127659] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:28:07.560 [INFO] [Thread-127659] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:28:07.560 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T12:28:07.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:28:08.394 [DEBUG] [Thread-127659] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:28:08.395 [DEBUG] [Thread-127659] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:28:08.443 [DEBUG] [Thread-127659] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:28:08.443 [DEBUG] [Thread-127659] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:28:08.452 [DEBUG] [Thread-127659] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:28:08.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:28:08.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T12:28:08.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T12:28:08.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:28:08.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:28:08.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:28:08.495 [DEBUG] [Thread-127659] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:28:11.541 [DEBUG] [Thread-127661 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:28:12.250 [DEBUG] [Thread-127662 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:28:26.593 [DEBUG] [Thread-127663 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:28:38.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T12:28:38.489 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T12:28:38.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T12:28:39.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 12, 28, 35), 37.74, 7.59, 0.0, 28.44, 26.22, 0, 0, 0, 2, 0, 0),)
2025-12-31T12:28:39.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 12:28:35
2025-12-31T12:28:39.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T12:28:39.540 [DEBUG] [Thread-127664] [transport.py] [_log()] starting thread (client mode): 0xb6b01540
2025-12-31T12:28:39.540 [DEBUG] [Thread-127664] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:28:39.560 [DEBUG] [Thread-127664] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T12:28:39.560 [INFO] [Thread-127664] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T12:28:39.561 [DEBUG] [Thread-127664] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:28:39.562 [DEBUG] [Thread-127664] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T12:28:39.562 [DEBUG] [Thread-127664] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:28:39.562 [DEBUG] [Thread-127664] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:28:39.562 [DEBUG] [Thread-127664] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:28:39.562 [DEBUG] [Thread-127664] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:28:39.562 [DEBUG] [Thread-127664] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:28:39.562 [DEBUG] [Thread-127664] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:28:39.562 [DEBUG] [Thread-127664] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:28:39.562 [DEBUG] [Thread-127664] [transport.py] [_log()] client lang: <none>
2025-12-31T12:28:39.562 [DEBUG] [Thread-127664] [transport.py] [_log()] server lang: <none>
2025-12-31T12:28:39.562 [DEBUG] [Thread-127664] [transport.py] [_log()] kex follows: False
2025-12-31T12:28:39.562 [DEBUG] [Thread-127664] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:28:39.562 [DEBUG] [Thread-127664] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:28:39.562 [DEBUG] [Thread-127664] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:28:39.562 [DEBUG] [Thread-127664] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:28:39.562 [DEBUG] [Thread-127664] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:28:39.562 [DEBUG] [Thread-127664] [transport.py] [_log()] Compression: none
2025-12-31T12:28:39.562 [DEBUG] [Thread-127664] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:28:39.577 [DEBUG] [Thread-127664] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:28:39.577 [DEBUG] [Thread-127664] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:28:39.577 [DEBUG] [Thread-127664] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T12:28:39.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T12:28:39.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:28:39.579 [DEBUG] [Thread-127664] [transport.py] [_log()] userauth is OK
2025-12-31T12:28:39.579 [DEBUG] [Thread-127664] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:28:39.579 [DEBUG] [Thread-127664] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:28:39.579 [DEBUG] [Thread-127664] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T12:28:39.579 [DEBUG] [Thread-127664] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:28:39.589 [INFO] [Thread-127664] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:28:39.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:28:40.223 [DEBUG] [Thread-127664] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:28:40.223 [DEBUG] [Thread-127664] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:28:40.223 [DEBUG] [Thread-127664] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T12:28:40.264 [DEBUG] [Thread-127664] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:28:40.265 [DEBUG] [Thread-127664] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:28:40.267 [DEBUG] [Thread-127664] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:28:40.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:28:40.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T12:28:40.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T12:28:40.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T12:28:40.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:28:40.283 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T12:28:40.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:28:40.283 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:28:40.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T12:28:40.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.436254 -999.00  +25.80  27.93     12   -5.10 1 2 1 1 1   888    0 31.33 49.81 ----- 32.1 27.9 293.0 38.5 31.1 -18.8 30.9 -18.0 30.2 -18.1 30.6 -17.7
2025-12-31T12:28:40.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T12:28:40.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T12:28:40.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.436254
2025-12-31T12:28:40.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T12:28:40.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T12:28:40.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T12:28:40.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T12:28:40.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T12:28:40.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T12:28:35', tmtdew=37.74, humidity=7.59, cloud=0.0, wind=28.44, temperature=26.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T10:28:12.346', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T12:28:40.284 [DEBUG] [Thread-127664] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:28:40.359 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T12:28:40.371 [DEBUG] [Thread-127667] [transport.py] [_log()] starting thread (client mode): 0xb6bb34c0
2025-12-31T12:28:40.371 [DEBUG] [Thread-127667] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:28:40.386 [DEBUG] [Thread-127667] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T12:28:40.386 [INFO] [Thread-127667] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T12:28:40.394 [DEBUG] [Thread-127667] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:28:40.394 [DEBUG] [Thread-127667] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T12:28:40.394 [DEBUG] [Thread-127667] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:28:40.394 [DEBUG] [Thread-127667] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:28:40.394 [DEBUG] [Thread-127667] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:28:40.394 [DEBUG] [Thread-127667] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:28:40.394 [DEBUG] [Thread-127667] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:28:40.394 [DEBUG] [Thread-127667] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:28:40.394 [DEBUG] [Thread-127667] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:28:40.394 [DEBUG] [Thread-127667] [transport.py] [_log()] client lang: <none>
2025-12-31T12:28:40.394 [DEBUG] [Thread-127667] [transport.py] [_log()] server lang: <none>
2025-12-31T12:28:40.394 [DEBUG] [Thread-127667] [transport.py] [_log()] kex follows: False
2025-12-31T12:28:40.394 [DEBUG] [Thread-127667] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:28:40.394 [DEBUG] [Thread-127667] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:28:40.394 [DEBUG] [Thread-127667] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:28:40.394 [DEBUG] [Thread-127667] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:28:40.394 [DEBUG] [Thread-127667] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:28:40.394 [DEBUG] [Thread-127667] [transport.py] [_log()] Compression: none
2025-12-31T12:28:40.394 [DEBUG] [Thread-127667] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:28:40.450 [DEBUG] [Thread-127667] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:28:40.450 [DEBUG] [Thread-127667] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:28:40.450 [DEBUG] [Thread-127667] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T12:28:40.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T12:28:40.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:28:40.507 [DEBUG] [Thread-127667] [transport.py] [_log()] userauth is OK
2025-12-31T12:28:40.507 [DEBUG] [Thread-127667] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:28:40.507 [DEBUG] [Thread-127667] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:28:40.507 [DEBUG] [Thread-127667] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T12:28:40.507 [DEBUG] [Thread-127667] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:28:40.521 [INFO] [Thread-127667] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:28:40.521 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T12:28:40.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:28:41.345 [DEBUG] [Thread-127667] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:28:41.345 [DEBUG] [Thread-127667] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:28:41.393 [DEBUG] [Thread-127667] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:28:41.393 [DEBUG] [Thread-127667] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:28:41.401 [DEBUG] [Thread-127667] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:28:41.409 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:28:41.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T12:28:41.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T12:28:41.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:28:41.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:28:41.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:28:41.433 [DEBUG] [Thread-127667] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:28:41.626 [DEBUG] [Thread-127669 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:28:42.251 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:28:42.251 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:28:56.666 [DEBUG] [Thread-127670 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:29:11.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T12:29:11.456 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T12:29:11.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T12:29:11.701 [DEBUG] [Thread-127671 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:29:12.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 12, 29, 7), 37.55, 7.67, 0.0, 27.12, 26.06, 0, 0, 0, 2, 0, 0),)
2025-12-31T12:29:12.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 12:29:07
2025-12-31T12:29:12.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T12:29:12.298 [DEBUG] [Thread-127672 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:29:12.425 [DEBUG] [Thread-127673] [transport.py] [_log()] starting thread (client mode): 0xb95443d0
2025-12-31T12:29:12.425 [DEBUG] [Thread-127673] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:29:12.446 [DEBUG] [Thread-127673] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T12:29:12.446 [INFO] [Thread-127673] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T12:29:12.447 [DEBUG] [Thread-127673] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:29:12.447 [DEBUG] [Thread-127673] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T12:29:12.447 [DEBUG] [Thread-127673] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:29:12.447 [DEBUG] [Thread-127673] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:29:12.447 [DEBUG] [Thread-127673] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:29:12.447 [DEBUG] [Thread-127673] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:29:12.447 [DEBUG] [Thread-127673] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:29:12.447 [DEBUG] [Thread-127673] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:29:12.447 [DEBUG] [Thread-127673] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:29:12.448 [DEBUG] [Thread-127673] [transport.py] [_log()] client lang: <none>
2025-12-31T12:29:12.448 [DEBUG] [Thread-127673] [transport.py] [_log()] server lang: <none>
2025-12-31T12:29:12.448 [DEBUG] [Thread-127673] [transport.py] [_log()] kex follows: False
2025-12-31T12:29:12.448 [DEBUG] [Thread-127673] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:29:12.448 [DEBUG] [Thread-127673] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:29:12.448 [DEBUG] [Thread-127673] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:29:12.448 [DEBUG] [Thread-127673] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:29:12.448 [DEBUG] [Thread-127673] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:29:12.448 [DEBUG] [Thread-127673] [transport.py] [_log()] Compression: none
2025-12-31T12:29:12.448 [DEBUG] [Thread-127673] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:29:12.460 [DEBUG] [Thread-127673] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:29:12.460 [DEBUG] [Thread-127673] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:29:12.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T12:29:12.461 [DEBUG] [Thread-127673] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T12:29:12.462 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:29:12.463 [DEBUG] [Thread-127673] [transport.py] [_log()] userauth is OK
2025-12-31T12:29:12.463 [DEBUG] [Thread-127673] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:29:12.463 [DEBUG] [Thread-127673] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:29:12.464 [DEBUG] [Thread-127673] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T12:29:12.464 [DEBUG] [Thread-127673] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:29:12.488 [INFO] [Thread-127673] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:29:12.488 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:29:13.129 [DEBUG] [Thread-127673] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:29:13.130 [DEBUG] [Thread-127673] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:29:13.130 [DEBUG] [Thread-127673] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T12:29:13.171 [DEBUG] [Thread-127673] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:29:13.171 [DEBUG] [Thread-127673] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:29:13.175 [DEBUG] [Thread-127673] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:29:13.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:29:13.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T12:29:13.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T12:29:13.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T12:29:13.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:29:13.204 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T12:29:13.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:29:13.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:29:13.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T12:29:13.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.436601 -999.00  +25.80  22.98     12   -5.50 1 2 1 1 1   888    0 31.64 54.77 ----- 28.4 23.0 285.4 32.6 31.0 -18.4 30.8 -18.5 30.1 -17.1 30.6 -17.4
2025-12-31T12:29:13.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T12:29:13.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T12:29:13.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.436601
2025-12-31T12:29:13.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T12:29:13.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T12:29:13.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T12:29:13.206 [DEBUG] [Thread-127673] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:29:13.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T12:29:13.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T12:29:13.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T12:29:07', tmtdew=37.55, humidity=7.67, cloud=0.0, wind=27.12, temperature=26.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T10:28:42.326', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T12:29:13.291 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T12:29:13.303 [DEBUG] [Thread-127676] [transport.py] [_log()] starting thread (client mode): 0xb9544880
2025-12-31T12:29:13.303 [DEBUG] [Thread-127676] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:29:13.318 [DEBUG] [Thread-127676] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T12:29:13.318 [INFO] [Thread-127676] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T12:29:13.325 [DEBUG] [Thread-127676] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:29:13.325 [DEBUG] [Thread-127676] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T12:29:13.326 [DEBUG] [Thread-127676] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:29:13.326 [DEBUG] [Thread-127676] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:29:13.326 [DEBUG] [Thread-127676] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:29:13.326 [DEBUG] [Thread-127676] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:29:13.326 [DEBUG] [Thread-127676] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:29:13.326 [DEBUG] [Thread-127676] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:29:13.326 [DEBUG] [Thread-127676] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:29:13.326 [DEBUG] [Thread-127676] [transport.py] [_log()] client lang: <none>
2025-12-31T12:29:13.326 [DEBUG] [Thread-127676] [transport.py] [_log()] server lang: <none>
2025-12-31T12:29:13.326 [DEBUG] [Thread-127676] [transport.py] [_log()] kex follows: False
2025-12-31T12:29:13.326 [DEBUG] [Thread-127676] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:29:13.326 [DEBUG] [Thread-127676] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:29:13.326 [DEBUG] [Thread-127676] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:29:13.326 [DEBUG] [Thread-127676] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:29:13.326 [DEBUG] [Thread-127676] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:29:13.326 [DEBUG] [Thread-127676] [transport.py] [_log()] Compression: none
2025-12-31T12:29:13.326 [DEBUG] [Thread-127676] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:29:13.385 [DEBUG] [Thread-127676] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:29:13.386 [DEBUG] [Thread-127676] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:29:13.387 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T12:29:13.387 [DEBUG] [Thread-127676] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T12:29:13.388 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:29:13.442 [DEBUG] [Thread-127676] [transport.py] [_log()] userauth is OK
2025-12-31T12:29:13.443 [DEBUG] [Thread-127676] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:29:13.443 [DEBUG] [Thread-127676] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:29:13.443 [DEBUG] [Thread-127676] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T12:29:13.443 [DEBUG] [Thread-127676] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:29:13.463 [INFO] [Thread-127676] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:29:13.463 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T12:29:13.463 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:29:14.309 [DEBUG] [Thread-127676] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:29:14.310 [DEBUG] [Thread-127676] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:29:14.359 [DEBUG] [Thread-127676] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:29:14.359 [DEBUG] [Thread-127676] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:29:14.368 [DEBUG] [Thread-127676] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:29:14.377 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:29:14.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T12:29:14.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T12:29:14.394 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:29:14.394 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:29:14.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:29:14.403 [DEBUG] [Thread-127676] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:29:26.731 [DEBUG] [Thread-127678 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:29:41.781 [DEBUG] [Thread-127679 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:29:42.390 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:29:42.392 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:29:44.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T12:29:44.423 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T12:29:44.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-12-31T12:29:45.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 12, 29, 39), 37.85, 7.17, 0.0, 23.18, 25.81, 0, 0, 0, 2, 0, 0),)
2025-12-31T12:29:45.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 12:29:39
2025-12-31T12:29:45.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T12:29:45.399 [DEBUG] [Thread-127680] [transport.py] [_log()] starting thread (client mode): 0xb6b28670
2025-12-31T12:29:45.400 [DEBUG] [Thread-127680] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:29:45.422 [DEBUG] [Thread-127680] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T12:29:45.422 [INFO] [Thread-127680] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T12:29:45.425 [DEBUG] [Thread-127680] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:29:45.425 [DEBUG] [Thread-127680] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T12:29:45.425 [DEBUG] [Thread-127680] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:29:45.425 [DEBUG] [Thread-127680] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:29:45.425 [DEBUG] [Thread-127680] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:29:45.425 [DEBUG] [Thread-127680] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:29:45.426 [DEBUG] [Thread-127680] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:29:45.426 [DEBUG] [Thread-127680] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:29:45.426 [DEBUG] [Thread-127680] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:29:45.426 [DEBUG] [Thread-127680] [transport.py] [_log()] client lang: <none>
2025-12-31T12:29:45.426 [DEBUG] [Thread-127680] [transport.py] [_log()] server lang: <none>
2025-12-31T12:29:45.426 [DEBUG] [Thread-127680] [transport.py] [_log()] kex follows: False
2025-12-31T12:29:45.426 [DEBUG] [Thread-127680] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:29:45.426 [DEBUG] [Thread-127680] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:29:45.426 [DEBUG] [Thread-127680] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:29:45.426 [DEBUG] [Thread-127680] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:29:45.426 [DEBUG] [Thread-127680] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:29:45.426 [DEBUG] [Thread-127680] [transport.py] [_log()] Compression: none
2025-12-31T12:29:45.426 [DEBUG] [Thread-127680] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:29:45.444 [DEBUG] [Thread-127680] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:29:45.444 [DEBUG] [Thread-127680] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:29:45.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T12:29:45.445 [DEBUG] [Thread-127680] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T12:29:45.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:29:45.446 [DEBUG] [Thread-127680] [transport.py] [_log()] userauth is OK
2025-12-31T12:29:45.446 [DEBUG] [Thread-127680] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:29:45.446 [DEBUG] [Thread-127680] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:29:45.446 [DEBUG] [Thread-127680] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T12:29:45.446 [DEBUG] [Thread-127680] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:29:45.461 [INFO] [Thread-127680] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:29:45.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:29:46.080 [DEBUG] [Thread-127680] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:29:46.080 [DEBUG] [Thread-127680] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:29:46.080 [DEBUG] [Thread-127680] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T12:29:46.121 [DEBUG] [Thread-127680] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:29:46.122 [DEBUG] [Thread-127680] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:29:46.125 [DEBUG] [Thread-127680] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:29:46.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:29:46.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T12:29:46.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T12:29:46.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T12:29:46.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:29:46.148 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T12:29:46.148 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:29:46.148 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:29:46.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T12:29:46.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.436948 -999.00  +25.50  29.25     11   -6.00 1 2 1 1 1   888    0 31.92 61.36 ----- 32.6 29.2 299.6 41.7 30.9 -18.5 30.7 -19.2 30.0 -19.0 30.4 -17.7
2025-12-31T12:29:46.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T12:29:46.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T12:29:46.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.436948
2025-12-31T12:29:46.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T12:29:46.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T12:29:46.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T12:29:46.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T12:29:46.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T12:29:46.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T12:29:39', tmtdew=37.85, humidity=7.17, cloud=0.0, wind=23.18, temperature=25.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T10:29:12.307', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T12:29:46.151 [DEBUG] [Thread-127680] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:29:46.228 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T12:29:46.239 [DEBUG] [Thread-127683] [transport.py] [_log()] starting thread (client mode): 0xb95b1780
2025-12-31T12:29:46.239 [DEBUG] [Thread-127683] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:29:46.254 [DEBUG] [Thread-127683] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T12:29:46.254 [INFO] [Thread-127683] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T12:29:46.261 [DEBUG] [Thread-127683] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:29:46.261 [DEBUG] [Thread-127683] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T12:29:46.262 [DEBUG] [Thread-127683] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:29:46.262 [DEBUG] [Thread-127683] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:29:46.262 [DEBUG] [Thread-127683] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:29:46.262 [DEBUG] [Thread-127683] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:29:46.262 [DEBUG] [Thread-127683] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:29:46.262 [DEBUG] [Thread-127683] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:29:46.262 [DEBUG] [Thread-127683] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:29:46.262 [DEBUG] [Thread-127683] [transport.py] [_log()] client lang: <none>
2025-12-31T12:29:46.262 [DEBUG] [Thread-127683] [transport.py] [_log()] server lang: <none>
2025-12-31T12:29:46.262 [DEBUG] [Thread-127683] [transport.py] [_log()] kex follows: False
2025-12-31T12:29:46.262 [DEBUG] [Thread-127683] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:29:46.262 [DEBUG] [Thread-127683] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:29:46.263 [DEBUG] [Thread-127683] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:29:46.263 [DEBUG] [Thread-127683] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:29:46.263 [DEBUG] [Thread-127683] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:29:46.263 [DEBUG] [Thread-127683] [transport.py] [_log()] Compression: none
2025-12-31T12:29:46.263 [DEBUG] [Thread-127683] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:29:46.321 [DEBUG] [Thread-127683] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:29:46.322 [DEBUG] [Thread-127683] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:29:46.322 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T12:29:46.323 [DEBUG] [Thread-127683] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T12:29:46.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:29:46.381 [DEBUG] [Thread-127683] [transport.py] [_log()] userauth is OK
2025-12-31T12:29:46.381 [DEBUG] [Thread-127683] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:29:46.382 [DEBUG] [Thread-127683] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:29:46.382 [DEBUG] [Thread-127683] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T12:29:46.382 [DEBUG] [Thread-127683] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:29:46.401 [INFO] [Thread-127683] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:29:46.402 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T12:29:46.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:29:47.257 [DEBUG] [Thread-127683] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:29:47.257 [DEBUG] [Thread-127683] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:29:47.305 [DEBUG] [Thread-127683] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:29:47.305 [DEBUG] [Thread-127683] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:29:47.314 [DEBUG] [Thread-127683] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:29:47.323 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:29:47.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T12:29:47.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T12:29:47.342 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:29:47.342 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:29:47.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:29:47.351 [DEBUG] [Thread-127683] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:29:56.814 [DEBUG] [Thread-127685 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:30:11.863 [DEBUG] [Thread-127686 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:30:12.336 [DEBUG] [Thread-127687 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:30:17.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T12:30:17.365 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T12:30:17.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T12:30:18.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 12, 30, 12), 38.15, 7.02, 0.0, 24.6, 25.96, 0, 0, 0, 2, 0, 0),)
2025-12-31T12:30:18.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 12:30:12
2025-12-31T12:30:18.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T12:30:18.355 [DEBUG] [Thread-127688] [transport.py] [_log()] starting thread (client mode): 0xb6bb34c0
2025-12-31T12:30:18.355 [DEBUG] [Thread-127688] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:30:18.374 [DEBUG] [Thread-127688] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T12:30:18.374 [INFO] [Thread-127688] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T12:30:18.377 [DEBUG] [Thread-127688] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:30:18.377 [DEBUG] [Thread-127688] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T12:30:18.378 [DEBUG] [Thread-127688] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:30:18.378 [DEBUG] [Thread-127688] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:30:18.378 [DEBUG] [Thread-127688] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:30:18.378 [DEBUG] [Thread-127688] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:30:18.378 [DEBUG] [Thread-127688] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:30:18.378 [DEBUG] [Thread-127688] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:30:18.378 [DEBUG] [Thread-127688] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:30:18.378 [DEBUG] [Thread-127688] [transport.py] [_log()] client lang: <none>
2025-12-31T12:30:18.378 [DEBUG] [Thread-127688] [transport.py] [_log()] server lang: <none>
2025-12-31T12:30:18.378 [DEBUG] [Thread-127688] [transport.py] [_log()] kex follows: False
2025-12-31T12:30:18.378 [DEBUG] [Thread-127688] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:30:18.378 [DEBUG] [Thread-127688] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:30:18.378 [DEBUG] [Thread-127688] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:30:18.378 [DEBUG] [Thread-127688] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:30:18.378 [DEBUG] [Thread-127688] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:30:18.378 [DEBUG] [Thread-127688] [transport.py] [_log()] Compression: none
2025-12-31T12:30:18.378 [DEBUG] [Thread-127688] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:30:18.395 [DEBUG] [Thread-127688] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:30:18.396 [DEBUG] [Thread-127688] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:30:18.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T12:30:18.397 [DEBUG] [Thread-127688] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T12:30:18.397 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:30:18.398 [DEBUG] [Thread-127688] [transport.py] [_log()] userauth is OK
2025-12-31T12:30:18.399 [DEBUG] [Thread-127688] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:30:18.399 [DEBUG] [Thread-127688] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:30:18.399 [DEBUG] [Thread-127688] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T12:30:18.399 [DEBUG] [Thread-127688] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:30:18.423 [INFO] [Thread-127688] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:30:18.423 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:30:19.704 [DEBUG] [Thread-127688] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:30:19.704 [DEBUG] [Thread-127688] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:30:19.704 [DEBUG] [Thread-127688] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T12:30:19.745 [DEBUG] [Thread-127688] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:30:19.745 [DEBUG] [Thread-127688] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:30:19.748 [DEBUG] [Thread-127688] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:30:19.754 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:30:19.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T12:30:19.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T12:30:19.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T12:30:19.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:30:19.764 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T12:30:19.764 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:30:19.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:30:19.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T12:30:19.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.437296 -999.00  +25.20  32.23     12   -5.70 1 2 2 1 1   888    0 31.84 63.13 ----- 28.3 32.2 294.4 36.4 30.8 -19.0 30.6 -18.6 30.0 -18.0 30.4 -18.0
2025-12-31T12:30:19.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T12:30:19.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T12:30:19.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.437296
2025-12-31T12:30:19.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T12:30:19.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T12:30:19.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T12:30:19.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T12:30:19.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T12:30:19.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T12:30:12', tmtdew=38.15, humidity=7.02, cloud=0.0, wind=24.6, temperature=25.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T10:29:42.374', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T12:30:19.767 [DEBUG] [Thread-127688] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:30:19.851 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T12:30:19.863 [DEBUG] [Thread-127691] [transport.py] [_log()] starting thread (client mode): 0xb9547040
2025-12-31T12:30:19.863 [DEBUG] [Thread-127691] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:30:19.879 [DEBUG] [Thread-127691] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T12:30:19.879 [INFO] [Thread-127691] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T12:30:19.887 [DEBUG] [Thread-127691] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:30:19.887 [DEBUG] [Thread-127691] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T12:30:19.887 [DEBUG] [Thread-127691] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:30:19.888 [DEBUG] [Thread-127691] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:30:19.888 [DEBUG] [Thread-127691] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:30:19.888 [DEBUG] [Thread-127691] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:30:19.888 [DEBUG] [Thread-127691] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:30:19.888 [DEBUG] [Thread-127691] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:30:19.888 [DEBUG] [Thread-127691] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:30:19.888 [DEBUG] [Thread-127691] [transport.py] [_log()] client lang: <none>
2025-12-31T12:30:19.888 [DEBUG] [Thread-127691] [transport.py] [_log()] server lang: <none>
2025-12-31T12:30:19.888 [DEBUG] [Thread-127691] [transport.py] [_log()] kex follows: False
2025-12-31T12:30:19.888 [DEBUG] [Thread-127691] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:30:19.888 [DEBUG] [Thread-127691] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:30:19.888 [DEBUG] [Thread-127691] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:30:19.888 [DEBUG] [Thread-127691] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:30:19.888 [DEBUG] [Thread-127691] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:30:19.888 [DEBUG] [Thread-127691] [transport.py] [_log()] Compression: none
2025-12-31T12:30:19.888 [DEBUG] [Thread-127691] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:30:19.944 [DEBUG] [Thread-127691] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:30:19.945 [DEBUG] [Thread-127691] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:30:19.945 [DEBUG] [Thread-127691] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T12:30:19.945 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T12:30:19.946 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:30:20.000 [DEBUG] [Thread-127691] [transport.py] [_log()] userauth is OK
2025-12-31T12:30:20.001 [DEBUG] [Thread-127691] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:30:20.001 [DEBUG] [Thread-127691] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:30:20.001 [DEBUG] [Thread-127691] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T12:30:20.001 [DEBUG] [Thread-127691] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:30:20.019 [INFO] [Thread-127691] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:30:20.020 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T12:30:20.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:30:20.884 [DEBUG] [Thread-127691] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:30:20.884 [DEBUG] [Thread-127691] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:30:20.932 [DEBUG] [Thread-127691] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:30:20.932 [DEBUG] [Thread-127691] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:30:20.941 [DEBUG] [Thread-127691] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:30:20.951 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:30:20.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T12:30:20.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T12:30:20.970 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:30:20.970 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:30:20.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:30:20.978 [DEBUG] [Thread-127691] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:30:26.899 [DEBUG] [Thread-127693 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:30:41.944 [DEBUG] [Thread-127694 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:30:42.532 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:30:42.534 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:30:50.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T12:30:50.976 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T12:30:50.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T12:30:51.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 12, 30, 44), 37.93, 7.48, 0.0, 21.44, 25.82, 0, 0, 0, 2, 0, 0),)
2025-12-31T12:30:51.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 12:30:44
2025-12-31T12:30:51.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T12:30:51.953 [DEBUG] [Thread-127695] [transport.py] [_log()] starting thread (client mode): 0xb6b2bf40
2025-12-31T12:30:51.953 [DEBUG] [Thread-127695] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:30:51.969 [DEBUG] [Thread-127695] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T12:30:51.970 [INFO] [Thread-127695] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T12:30:51.972 [DEBUG] [Thread-127695] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:30:51.972 [DEBUG] [Thread-127695] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T12:30:51.972 [DEBUG] [Thread-127695] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:30:51.972 [DEBUG] [Thread-127695] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:30:51.972 [DEBUG] [Thread-127695] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:30:51.973 [DEBUG] [Thread-127695] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:30:51.973 [DEBUG] [Thread-127695] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:30:51.973 [DEBUG] [Thread-127695] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:30:51.973 [DEBUG] [Thread-127695] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:30:51.973 [DEBUG] [Thread-127695] [transport.py] [_log()] client lang: <none>
2025-12-31T12:30:51.973 [DEBUG] [Thread-127695] [transport.py] [_log()] server lang: <none>
2025-12-31T12:30:51.973 [DEBUG] [Thread-127695] [transport.py] [_log()] kex follows: False
2025-12-31T12:30:51.973 [DEBUG] [Thread-127695] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:30:51.973 [DEBUG] [Thread-127695] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:30:51.973 [DEBUG] [Thread-127695] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:30:51.973 [DEBUG] [Thread-127695] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:30:51.973 [DEBUG] [Thread-127695] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:30:51.973 [DEBUG] [Thread-127695] [transport.py] [_log()] Compression: none
2025-12-31T12:30:51.973 [DEBUG] [Thread-127695] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:30:51.992 [DEBUG] [Thread-127695] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:30:51.993 [DEBUG] [Thread-127695] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:30:51.993 [DEBUG] [Thread-127695] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T12:30:51.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T12:30:51.994 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:30:51.994 [DEBUG] [Thread-127695] [transport.py] [_log()] userauth is OK
2025-12-31T12:30:51.994 [DEBUG] [Thread-127695] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:30:51.994 [DEBUG] [Thread-127695] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:30:51.994 [DEBUG] [Thread-127695] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T12:30:51.994 [DEBUG] [Thread-127695] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:30:52.007 [INFO] [Thread-127695] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:30:52.008 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:30:52.666 [DEBUG] [Thread-127695] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:30:52.666 [DEBUG] [Thread-127695] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:30:52.667 [DEBUG] [Thread-127695] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T12:30:52.707 [DEBUG] [Thread-127695] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:30:52.707 [DEBUG] [Thread-127695] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:30:52.711 [DEBUG] [Thread-127695] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:30:52.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:30:52.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T12:30:52.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T12:30:52.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T12:30:52.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:30:52.736 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T12:30:52.736 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:30:52.736 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:30:52.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T12:30:52.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.437643 -999.00  +24.90  20.25     12   -5.70 1 2 1 1 1   888    0 32.49 66.39 ----- 18.5 20.2 290.8 30.6 30.8 -18.8 30.5 -18.7 29.8 -18.3 30.3 -18.0
2025-12-31T12:30:52.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T12:30:52.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T12:30:52.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.437643
2025-12-31T12:30:52.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T12:30:52.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T12:30:52.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T12:30:52.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T12:30:52.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T12:30:52.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T12:30:44', tmtdew=37.93, humidity=7.48, cloud=0.0, wind=21.44, temperature=25.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T10:30:12.355', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T12:30:52.739 [DEBUG] [Thread-127695] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:30:52.822 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T12:30:52.833 [DEBUG] [Thread-127698] [transport.py] [_log()] starting thread (client mode): 0xbbfcf0d0
2025-12-31T12:30:52.834 [DEBUG] [Thread-127698] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:30:52.849 [DEBUG] [Thread-127698] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T12:30:52.849 [INFO] [Thread-127698] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T12:30:52.856 [DEBUG] [Thread-127698] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:30:52.856 [DEBUG] [Thread-127698] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T12:30:52.856 [DEBUG] [Thread-127698] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:30:52.857 [DEBUG] [Thread-127698] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:30:52.857 [DEBUG] [Thread-127698] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:30:52.857 [DEBUG] [Thread-127698] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:30:52.857 [DEBUG] [Thread-127698] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:30:52.857 [DEBUG] [Thread-127698] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:30:52.857 [DEBUG] [Thread-127698] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:30:52.857 [DEBUG] [Thread-127698] [transport.py] [_log()] client lang: <none>
2025-12-31T12:30:52.857 [DEBUG] [Thread-127698] [transport.py] [_log()] server lang: <none>
2025-12-31T12:30:52.857 [DEBUG] [Thread-127698] [transport.py] [_log()] kex follows: False
2025-12-31T12:30:52.857 [DEBUG] [Thread-127698] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:30:52.857 [DEBUG] [Thread-127698] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:30:52.857 [DEBUG] [Thread-127698] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:30:52.857 [DEBUG] [Thread-127698] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:30:52.857 [DEBUG] [Thread-127698] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:30:52.857 [DEBUG] [Thread-127698] [transport.py] [_log()] Compression: none
2025-12-31T12:30:52.857 [DEBUG] [Thread-127698] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:30:52.916 [DEBUG] [Thread-127698] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:30:52.916 [DEBUG] [Thread-127698] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:30:52.917 [DEBUG] [Thread-127698] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T12:30:52.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T12:30:52.918 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:30:52.972 [DEBUG] [Thread-127698] [transport.py] [_log()] userauth is OK
2025-12-31T12:30:52.972 [DEBUG] [Thread-127698] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:30:52.972 [DEBUG] [Thread-127698] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:30:52.972 [DEBUG] [Thread-127698] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T12:30:52.972 [DEBUG] [Thread-127698] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:30:52.990 [INFO] [Thread-127698] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:30:52.991 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T12:30:52.991 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:30:53.806 [DEBUG] [Thread-127698] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:30:53.806 [DEBUG] [Thread-127698] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:30:53.854 [DEBUG] [Thread-127698] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:30:53.854 [DEBUG] [Thread-127698] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:30:53.864 [DEBUG] [Thread-127698] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:30:53.873 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:30:53.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T12:30:53.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T12:30:53.892 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:30:53.892 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:30:53.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:30:53.901 [DEBUG] [Thread-127698] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:30:56.976 [DEBUG] [Thread-127700 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:31:12.027 [DEBUG] [Thread-127701 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:31:12.393 [DEBUG] [Thread-127702 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:31:23.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T12:31:23.897 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T12:31:23.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T12:31:24.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 12, 31, 16), 37.98, 7.44, 0.0, 21.58, 25.79, 0, 0, 0, 2, 0, 0),)
2025-12-31T12:31:24.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 12:31:16
2025-12-31T12:31:24.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T12:31:24.873 [DEBUG] [Thread-127703] [transport.py] [_log()] starting thread (client mode): 0xbbfce200
2025-12-31T12:31:24.873 [DEBUG] [Thread-127703] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:31:24.894 [DEBUG] [Thread-127703] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T12:31:24.894 [INFO] [Thread-127703] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T12:31:24.897 [DEBUG] [Thread-127703] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:31:24.897 [DEBUG] [Thread-127703] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T12:31:24.897 [DEBUG] [Thread-127703] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:31:24.897 [DEBUG] [Thread-127703] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:31:24.897 [DEBUG] [Thread-127703] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:31:24.897 [DEBUG] [Thread-127703] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:31:24.898 [DEBUG] [Thread-127703] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:31:24.898 [DEBUG] [Thread-127703] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:31:24.898 [DEBUG] [Thread-127703] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:31:24.898 [DEBUG] [Thread-127703] [transport.py] [_log()] client lang: <none>
2025-12-31T12:31:24.898 [DEBUG] [Thread-127703] [transport.py] [_log()] server lang: <none>
2025-12-31T12:31:24.898 [DEBUG] [Thread-127703] [transport.py] [_log()] kex follows: False
2025-12-31T12:31:24.898 [DEBUG] [Thread-127703] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:31:24.898 [DEBUG] [Thread-127703] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:31:24.898 [DEBUG] [Thread-127703] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:31:24.898 [DEBUG] [Thread-127703] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:31:24.898 [DEBUG] [Thread-127703] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:31:24.898 [DEBUG] [Thread-127703] [transport.py] [_log()] Compression: none
2025-12-31T12:31:24.898 [DEBUG] [Thread-127703] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:31:24.915 [DEBUG] [Thread-127703] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:31:24.916 [DEBUG] [Thread-127703] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:31:24.916 [DEBUG] [Thread-127703] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T12:31:24.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T12:31:24.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:31:24.918 [DEBUG] [Thread-127703] [transport.py] [_log()] userauth is OK
2025-12-31T12:31:24.918 [DEBUG] [Thread-127703] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:31:24.918 [DEBUG] [Thread-127703] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:31:24.918 [DEBUG] [Thread-127703] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T12:31:24.918 [DEBUG] [Thread-127703] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:31:24.933 [INFO] [Thread-127703] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:31:24.934 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:31:25.562 [DEBUG] [Thread-127703] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:31:25.562 [DEBUG] [Thread-127703] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:31:25.562 [DEBUG] [Thread-127703] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T12:31:25.602 [DEBUG] [Thread-127703] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:31:25.603 [DEBUG] [Thread-127703] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:31:25.606 [DEBUG] [Thread-127703] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:31:25.617 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:31:25.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T12:31:25.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T12:31:25.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T12:31:25.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:31:25.626 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T12:31:25.627 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:31:25.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:31:25.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T12:31:25.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.437990 -999.00  +25.40  25.14     12   -5.20 1 2 1 1 1   888    0 31.95 61.25 ----- 25.6 25.1 307.2 27.8 30.9 -17.9 30.6 -17.8 30.0 -18.5 30.4 -17.5
2025-12-31T12:31:25.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T12:31:25.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T12:31:25.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.437990
2025-12-31T12:31:25.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T12:31:25.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T12:31:25.629 [DEBUG] [Thread-127703] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:31:25.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T12:31:25.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T12:31:25.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T12:31:25.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T12:31:16', tmtdew=37.98, humidity=7.44, cloud=0.0, wind=21.58, temperature=25.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T10:30:42.336', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T12:31:25.719 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T12:31:25.729 [DEBUG] [Thread-127706] [transport.py] [_log()] starting thread (client mode): 0xb6b2b8b0
2025-12-31T12:31:25.730 [DEBUG] [Thread-127706] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:31:25.745 [DEBUG] [Thread-127706] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T12:31:25.745 [INFO] [Thread-127706] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T12:31:25.752 [DEBUG] [Thread-127706] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:31:25.752 [DEBUG] [Thread-127706] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T12:31:25.752 [DEBUG] [Thread-127706] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:31:25.752 [DEBUG] [Thread-127706] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:31:25.752 [DEBUG] [Thread-127706] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:31:25.752 [DEBUG] [Thread-127706] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:31:25.752 [DEBUG] [Thread-127706] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:31:25.752 [DEBUG] [Thread-127706] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:31:25.752 [DEBUG] [Thread-127706] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:31:25.752 [DEBUG] [Thread-127706] [transport.py] [_log()] client lang: <none>
2025-12-31T12:31:25.752 [DEBUG] [Thread-127706] [transport.py] [_log()] server lang: <none>
2025-12-31T12:31:25.752 [DEBUG] [Thread-127706] [transport.py] [_log()] kex follows: False
2025-12-31T12:31:25.752 [DEBUG] [Thread-127706] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:31:25.752 [DEBUG] [Thread-127706] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:31:25.753 [DEBUG] [Thread-127706] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:31:25.753 [DEBUG] [Thread-127706] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:31:25.753 [DEBUG] [Thread-127706] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:31:25.753 [DEBUG] [Thread-127706] [transport.py] [_log()] Compression: none
2025-12-31T12:31:25.753 [DEBUG] [Thread-127706] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:31:25.810 [DEBUG] [Thread-127706] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:31:25.811 [DEBUG] [Thread-127706] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:31:25.811 [DEBUG] [Thread-127706] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T12:31:25.812 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T12:31:25.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:31:25.867 [DEBUG] [Thread-127706] [transport.py] [_log()] userauth is OK
2025-12-31T12:31:25.867 [DEBUG] [Thread-127706] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:31:25.867 [DEBUG] [Thread-127706] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:31:25.867 [DEBUG] [Thread-127706] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T12:31:25.867 [DEBUG] [Thread-127706] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:31:25.886 [INFO] [Thread-127706] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:31:25.886 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T12:31:25.887 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:31:26.713 [DEBUG] [Thread-127706] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:31:26.713 [DEBUG] [Thread-127706] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:31:26.761 [DEBUG] [Thread-127706] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:31:26.761 [DEBUG] [Thread-127706] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:31:26.770 [DEBUG] [Thread-127706] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:31:26.783 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:31:26.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T12:31:26.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T12:31:26.801 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:31:26.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:31:26.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:31:26.810 [DEBUG] [Thread-127706] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:31:27.059 [DEBUG] [Thread-127708 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:31:42.112 [DEBUG] [Thread-127709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:31:42.673 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:31:42.674 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:31:56.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T12:31:56.832 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T12:31:56.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T12:31:57.143 [DEBUG] [Thread-127710 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:31:57.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 12, 31, 48), 37.33, 7.76, 0.0, 23.02, 26.12, 0, 0, 0, 2, 0, 0),)
2025-12-31T12:31:57.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 12:31:48
2025-12-31T12:31:57.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T12:31:57.855 [DEBUG] [Thread-127711] [transport.py] [_log()] starting thread (client mode): 0xbbfcd1b0
2025-12-31T12:31:57.856 [DEBUG] [Thread-127711] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:31:57.876 [DEBUG] [Thread-127711] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T12:31:57.876 [INFO] [Thread-127711] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T12:31:57.879 [DEBUG] [Thread-127711] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:31:57.879 [DEBUG] [Thread-127711] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T12:31:57.879 [DEBUG] [Thread-127711] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:31:57.880 [DEBUG] [Thread-127711] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:31:57.880 [DEBUG] [Thread-127711] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:31:57.880 [DEBUG] [Thread-127711] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:31:57.880 [DEBUG] [Thread-127711] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:31:57.880 [DEBUG] [Thread-127711] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:31:57.880 [DEBUG] [Thread-127711] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:31:57.880 [DEBUG] [Thread-127711] [transport.py] [_log()] client lang: <none>
2025-12-31T12:31:57.880 [DEBUG] [Thread-127711] [transport.py] [_log()] server lang: <none>
2025-12-31T12:31:57.880 [DEBUG] [Thread-127711] [transport.py] [_log()] kex follows: False
2025-12-31T12:31:57.880 [DEBUG] [Thread-127711] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:31:57.880 [DEBUG] [Thread-127711] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:31:57.880 [DEBUG] [Thread-127711] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:31:57.880 [DEBUG] [Thread-127711] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:31:57.880 [DEBUG] [Thread-127711] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:31:57.880 [DEBUG] [Thread-127711] [transport.py] [_log()] Compression: none
2025-12-31T12:31:57.880 [DEBUG] [Thread-127711] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:31:57.895 [DEBUG] [Thread-127711] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:31:57.895 [DEBUG] [Thread-127711] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:31:57.895 [DEBUG] [Thread-127711] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T12:31:57.895 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T12:31:57.895 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:31:57.895 [DEBUG] [Thread-127711] [transport.py] [_log()] userauth is OK
2025-12-31T12:31:57.895 [DEBUG] [Thread-127711] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:31:57.896 [DEBUG] [Thread-127711] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:31:57.896 [DEBUG] [Thread-127711] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T12:31:57.896 [DEBUG] [Thread-127711] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:31:57.910 [INFO] [Thread-127711] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:31:57.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:31:58.545 [DEBUG] [Thread-127711] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:31:58.545 [DEBUG] [Thread-127711] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:31:58.545 [DEBUG] [Thread-127711] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T12:31:58.585 [DEBUG] [Thread-127711] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:31:58.585 [DEBUG] [Thread-127711] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:31:58.588 [DEBUG] [Thread-127711] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:31:58.599 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:31:58.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T12:31:58.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T12:31:58.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T12:31:58.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:31:58.605 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T12:31:58.605 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:31:58.605 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:31:58.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T12:31:58.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.438337 -999.00  +25.30  31.78     13   -4.70 1 2 2 1 1   888    0 31.96 64.36 ----- 30.7 31.8 316.0 41.1 30.9 -18.8 30.6 -18.9 30.1 -18.7 30.4 -18.2
2025-12-31T12:31:58.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T12:31:58.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T12:31:58.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.438337
2025-12-31T12:31:58.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T12:31:58.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T12:31:58.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T12:31:58.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T12:31:58.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T12:31:58.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T12:31:48', tmtdew=37.33, humidity=7.76, cloud=0.0, wind=23.02, temperature=26.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T10:31:12.317', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T12:31:58.606 [DEBUG] [Thread-127711] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:31:58.680 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T12:31:58.692 [DEBUG] [Thread-127714] [transport.py] [_log()] starting thread (client mode): 0xb6b29450
2025-12-31T12:31:58.692 [DEBUG] [Thread-127714] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:31:58.706 [DEBUG] [Thread-127714] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T12:31:58.706 [INFO] [Thread-127714] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T12:31:58.714 [DEBUG] [Thread-127714] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:31:58.714 [DEBUG] [Thread-127714] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T12:31:58.714 [DEBUG] [Thread-127714] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:31:58.714 [DEBUG] [Thread-127714] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:31:58.714 [DEBUG] [Thread-127714] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:31:58.714 [DEBUG] [Thread-127714] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:31:58.714 [DEBUG] [Thread-127714] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:31:58.714 [DEBUG] [Thread-127714] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:31:58.714 [DEBUG] [Thread-127714] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:31:58.714 [DEBUG] [Thread-127714] [transport.py] [_log()] client lang: <none>
2025-12-31T12:31:58.714 [DEBUG] [Thread-127714] [transport.py] [_log()] server lang: <none>
2025-12-31T12:31:58.714 [DEBUG] [Thread-127714] [transport.py] [_log()] kex follows: False
2025-12-31T12:31:58.714 [DEBUG] [Thread-127714] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:31:58.714 [DEBUG] [Thread-127714] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:31:58.714 [DEBUG] [Thread-127714] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:31:58.714 [DEBUG] [Thread-127714] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:31:58.714 [DEBUG] [Thread-127714] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:31:58.714 [DEBUG] [Thread-127714] [transport.py] [_log()] Compression: none
2025-12-31T12:31:58.714 [DEBUG] [Thread-127714] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:31:58.771 [DEBUG] [Thread-127714] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:31:58.771 [DEBUG] [Thread-127714] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:31:58.772 [DEBUG] [Thread-127714] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T12:31:58.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T12:31:58.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:31:58.829 [DEBUG] [Thread-127714] [transport.py] [_log()] userauth is OK
2025-12-31T12:31:58.829 [DEBUG] [Thread-127714] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:31:58.829 [DEBUG] [Thread-127714] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:31:58.829 [DEBUG] [Thread-127714] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T12:31:58.829 [DEBUG] [Thread-127714] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:31:58.842 [INFO] [Thread-127714] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:31:58.842 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T12:31:58.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:31:59.671 [DEBUG] [Thread-127714] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:31:59.671 [DEBUG] [Thread-127714] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:31:59.719 [DEBUG] [Thread-127714] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:31:59.719 [DEBUG] [Thread-127714] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:31:59.727 [DEBUG] [Thread-127714] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:31:59.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:31:59.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T12:31:59.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T12:31:59.751 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:31:59.751 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:31:59.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:31:59.759 [DEBUG] [Thread-127714] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:32:12.173 [DEBUG] [Thread-127716 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:32:12.457 [DEBUG] [Thread-127717 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:32:27.222 [DEBUG] [Thread-127718 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:32:29.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T12:32:29.782 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T12:32:29.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T12:32:30.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 12, 32, 20), 37.27, 7.79, 0.0, 19.27, 26.09, 0, 0, 0, 2, 0, 0),)
2025-12-31T12:32:30.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 12:32:20
2025-12-31T12:32:30.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T12:32:30.775 [DEBUG] [Thread-127719] [transport.py] [_log()] starting thread (client mode): 0xbbfcf7f0
2025-12-31T12:32:30.775 [DEBUG] [Thread-127719] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:32:30.795 [DEBUG] [Thread-127719] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T12:32:30.795 [INFO] [Thread-127719] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T12:32:30.799 [DEBUG] [Thread-127719] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:32:30.799 [DEBUG] [Thread-127719] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T12:32:30.799 [DEBUG] [Thread-127719] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:32:30.799 [DEBUG] [Thread-127719] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:32:30.800 [DEBUG] [Thread-127719] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:32:30.800 [DEBUG] [Thread-127719] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:32:30.800 [DEBUG] [Thread-127719] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:32:30.800 [DEBUG] [Thread-127719] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:32:30.800 [DEBUG] [Thread-127719] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:32:30.800 [DEBUG] [Thread-127719] [transport.py] [_log()] client lang: <none>
2025-12-31T12:32:30.800 [DEBUG] [Thread-127719] [transport.py] [_log()] server lang: <none>
2025-12-31T12:32:30.800 [DEBUG] [Thread-127719] [transport.py] [_log()] kex follows: False
2025-12-31T12:32:30.800 [DEBUG] [Thread-127719] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:32:30.800 [DEBUG] [Thread-127719] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:32:30.800 [DEBUG] [Thread-127719] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:32:30.800 [DEBUG] [Thread-127719] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:32:30.800 [DEBUG] [Thread-127719] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:32:30.800 [DEBUG] [Thread-127719] [transport.py] [_log()] Compression: none
2025-12-31T12:32:30.800 [DEBUG] [Thread-127719] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:32:30.817 [DEBUG] [Thread-127719] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:32:30.817 [DEBUG] [Thread-127719] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:32:30.818 [DEBUG] [Thread-127719] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T12:32:30.818 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T12:32:30.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:32:30.821 [DEBUG] [Thread-127719] [transport.py] [_log()] userauth is OK
2025-12-31T12:32:30.821 [DEBUG] [Thread-127719] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:32:30.821 [DEBUG] [Thread-127719] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:32:30.821 [DEBUG] [Thread-127719] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T12:32:30.821 [DEBUG] [Thread-127719] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:32:30.845 [INFO] [Thread-127719] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:32:30.846 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:32:31.482 [DEBUG] [Thread-127719] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:32:31.482 [DEBUG] [Thread-127719] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:32:31.483 [DEBUG] [Thread-127719] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T12:32:31.523 [DEBUG] [Thread-127719] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:32:31.523 [DEBUG] [Thread-127719] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:32:31.527 [DEBUG] [Thread-127719] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:32:31.538 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:32:31.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T12:32:31.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T12:32:31.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T12:32:31.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:32:31.552 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T12:32:31.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:32:31.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:32:31.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T12:32:31.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.438685 -999.00  +25.90  26.29     12   -4.80 1 2 1 1 1   888    0 32.19 57.64 ----- 23.5 26.3 311.6 32.5 31.1 -18.4 30.8 -17.3 30.2 -17.9 30.6 -17.8
2025-12-31T12:32:31.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T12:32:31.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T12:32:31.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.438685
2025-12-31T12:32:31.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T12:32:31.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T12:32:31.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T12:32:31.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T12:32:31.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T12:32:31.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T12:32:20', tmtdew=37.27, humidity=7.79, cloud=0.0, wind=19.27, temperature=26.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T10:31:42.384', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T12:32:31.555 [DEBUG] [Thread-127719] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:32:31.640 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T12:32:31.651 [DEBUG] [Thread-127722] [transport.py] [_log()] starting thread (client mode): 0xbbfceda0
2025-12-31T12:32:31.651 [DEBUG] [Thread-127722] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:32:31.666 [DEBUG] [Thread-127722] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T12:32:31.666 [INFO] [Thread-127722] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T12:32:31.674 [DEBUG] [Thread-127722] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:32:31.674 [DEBUG] [Thread-127722] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T12:32:31.674 [DEBUG] [Thread-127722] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:32:31.674 [DEBUG] [Thread-127722] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:32:31.674 [DEBUG] [Thread-127722] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:32:31.674 [DEBUG] [Thread-127722] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:32:31.674 [DEBUG] [Thread-127722] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:32:31.675 [DEBUG] [Thread-127722] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:32:31.675 [DEBUG] [Thread-127722] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:32:31.675 [DEBUG] [Thread-127722] [transport.py] [_log()] client lang: <none>
2025-12-31T12:32:31.675 [DEBUG] [Thread-127722] [transport.py] [_log()] server lang: <none>
2025-12-31T12:32:31.675 [DEBUG] [Thread-127722] [transport.py] [_log()] kex follows: False
2025-12-31T12:32:31.675 [DEBUG] [Thread-127722] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:32:31.675 [DEBUG] [Thread-127722] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:32:31.675 [DEBUG] [Thread-127722] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:32:31.675 [DEBUG] [Thread-127722] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:32:31.676 [DEBUG] [Thread-127722] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:32:31.676 [DEBUG] [Thread-127722] [transport.py] [_log()] Compression: none
2025-12-31T12:32:31.676 [DEBUG] [Thread-127722] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:32:31.733 [DEBUG] [Thread-127722] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:32:31.734 [DEBUG] [Thread-127722] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:32:31.735 [DEBUG] [Thread-127722] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T12:32:31.735 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T12:32:31.736 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:32:31.789 [DEBUG] [Thread-127722] [transport.py] [_log()] userauth is OK
2025-12-31T12:32:31.789 [DEBUG] [Thread-127722] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:32:31.789 [DEBUG] [Thread-127722] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:32:31.789 [DEBUG] [Thread-127722] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T12:32:31.789 [DEBUG] [Thread-127722] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:32:31.814 [INFO] [Thread-127722] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:32:31.814 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T12:32:31.815 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:32:32.699 [DEBUG] [Thread-127722] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:32:32.699 [DEBUG] [Thread-127722] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:32:32.747 [DEBUG] [Thread-127722] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:32:32.747 [DEBUG] [Thread-127722] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:32:32.756 [DEBUG] [Thread-127722] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:32:32.765 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:32:32.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T12:32:32.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T12:32:32.784 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:32:32.785 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:32:32.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:32:32.793 [DEBUG] [Thread-127722] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:32:42.254 [DEBUG] [Thread-127724 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:32:42.813 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:32:42.814 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:32:57.315 [DEBUG] [Thread-127725 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:33:02.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T12:33:02.797 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T12:33:02.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T12:33:03.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 12, 32, 52), 37.58, 7.52, 0.0, 22.65, 26.09, 0, 0, 0, 2, 0, 0),)
2025-12-31T12:33:03.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 12:32:52
2025-12-31T12:33:03.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T12:33:03.770 [DEBUG] [Thread-127726] [transport.py] [_log()] starting thread (client mode): 0xbbfcd960
2025-12-31T12:33:03.770 [DEBUG] [Thread-127726] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:33:03.794 [DEBUG] [Thread-127726] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T12:33:03.794 [INFO] [Thread-127726] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T12:33:03.803 [DEBUG] [Thread-127726] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:33:03.803 [DEBUG] [Thread-127726] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T12:33:03.803 [DEBUG] [Thread-127726] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:33:03.803 [DEBUG] [Thread-127726] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:33:03.803 [DEBUG] [Thread-127726] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:33:03.804 [DEBUG] [Thread-127726] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:33:03.804 [DEBUG] [Thread-127726] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:33:03.804 [DEBUG] [Thread-127726] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:33:03.804 [DEBUG] [Thread-127726] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:33:03.804 [DEBUG] [Thread-127726] [transport.py] [_log()] client lang: <none>
2025-12-31T12:33:03.804 [DEBUG] [Thread-127726] [transport.py] [_log()] server lang: <none>
2025-12-31T12:33:03.804 [DEBUG] [Thread-127726] [transport.py] [_log()] kex follows: False
2025-12-31T12:33:03.804 [DEBUG] [Thread-127726] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:33:03.805 [DEBUG] [Thread-127726] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:33:03.805 [DEBUG] [Thread-127726] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:33:03.805 [DEBUG] [Thread-127726] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:33:03.805 [DEBUG] [Thread-127726] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:33:03.805 [DEBUG] [Thread-127726] [transport.py] [_log()] Compression: none
2025-12-31T12:33:03.806 [DEBUG] [Thread-127726] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:33:03.816 [DEBUG] [Thread-127726] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:33:03.816 [DEBUG] [Thread-127726] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:33:03.817 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T12:33:03.817 [DEBUG] [Thread-127726] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T12:33:03.818 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:33:03.819 [DEBUG] [Thread-127726] [transport.py] [_log()] userauth is OK
2025-12-31T12:33:03.820 [DEBUG] [Thread-127726] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:33:03.820 [DEBUG] [Thread-127726] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:33:03.820 [DEBUG] [Thread-127726] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T12:33:03.820 [DEBUG] [Thread-127726] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:33:03.837 [INFO] [Thread-127726] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:33:03.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:33:04.391 [DEBUG] [Thread-127726] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:33:04.391 [DEBUG] [Thread-127726] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:33:04.392 [DEBUG] [Thread-127726] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T12:33:04.432 [DEBUG] [Thread-127726] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:33:04.432 [DEBUG] [Thread-127726] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:33:04.435 [DEBUG] [Thread-127726] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:33:04.444 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:33:04.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T12:33:04.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T12:33:04.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T12:33:04.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:33:04.456 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T12:33:04.456 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:33:04.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:33:04.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T12:33:04.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.439379 -999.00  +25.30  25.33     13   -4.80 1 2 1 1 1   888    0 32.29 55.89 ----- 25.6 25.3 296.2 37.0 31.0 -20.0 30.8 -19.3 30.2 -18.7 30.5 -19.8
2025-12-31T12:33:04.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T12:33:04.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T12:33:04.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.439379
2025-12-31T12:33:04.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T12:33:04.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T12:33:04.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T12:33:04.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T12:33:04.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T12:33:04.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T12:32:52', tmtdew=37.58, humidity=7.52, cloud=0.0, wind=22.65, temperature=26.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T10:32:42.346', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T12:33:04.459 [DEBUG] [Thread-127726] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:33:04.549 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T12:33:04.562 [DEBUG] [Thread-127729] [transport.py] [_log()] starting thread (client mode): 0xb9545ed0
2025-12-31T12:33:04.562 [DEBUG] [Thread-127729] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:33:04.577 [DEBUG] [Thread-127729] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T12:33:04.577 [INFO] [Thread-127729] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T12:33:04.585 [DEBUG] [Thread-127729] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:33:04.585 [DEBUG] [Thread-127729] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T12:33:04.585 [DEBUG] [Thread-127729] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:33:04.585 [DEBUG] [Thread-127729] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:33:04.585 [DEBUG] [Thread-127729] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:33:04.585 [DEBUG] [Thread-127729] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:33:04.585 [DEBUG] [Thread-127729] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:33:04.585 [DEBUG] [Thread-127729] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:33:04.585 [DEBUG] [Thread-127729] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:33:04.585 [DEBUG] [Thread-127729] [transport.py] [_log()] client lang: <none>
2025-12-31T12:33:04.585 [DEBUG] [Thread-127729] [transport.py] [_log()] server lang: <none>
2025-12-31T12:33:04.586 [DEBUG] [Thread-127729] [transport.py] [_log()] kex follows: False
2025-12-31T12:33:04.586 [DEBUG] [Thread-127729] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:33:04.586 [DEBUG] [Thread-127729] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:33:04.586 [DEBUG] [Thread-127729] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:33:04.586 [DEBUG] [Thread-127729] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:33:04.586 [DEBUG] [Thread-127729] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:33:04.586 [DEBUG] [Thread-127729] [transport.py] [_log()] Compression: none
2025-12-31T12:33:04.586 [DEBUG] [Thread-127729] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:33:04.644 [DEBUG] [Thread-127729] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:33:04.645 [DEBUG] [Thread-127729] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:33:04.646 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T12:33:04.646 [DEBUG] [Thread-127729] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T12:33:04.647 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:33:04.700 [DEBUG] [Thread-127729] [transport.py] [_log()] userauth is OK
2025-12-31T12:33:04.701 [DEBUG] [Thread-127729] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:33:04.701 [DEBUG] [Thread-127729] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:33:04.701 [DEBUG] [Thread-127729] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T12:33:04.701 [DEBUG] [Thread-127729] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:33:04.719 [INFO] [Thread-127729] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:33:04.720 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T12:33:04.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:33:05.596 [DEBUG] [Thread-127729] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:33:05.596 [DEBUG] [Thread-127729] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:33:05.643 [DEBUG] [Thread-127729] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:33:05.644 [DEBUG] [Thread-127729] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:33:05.653 [DEBUG] [Thread-127729] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:33:05.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:33:05.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T12:33:05.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T12:33:05.678 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:33:05.678 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:33:05.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:33:05.686 [DEBUG] [Thread-127729] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:33:12.352 [DEBUG] [Thread-127731 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:33:12.499 [DEBUG] [Thread-127732 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:33:27.389 [DEBUG] [Thread-127733 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:33:35.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T12:33:35.696 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T12:33:35.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-12-31T12:33:36.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 12, 33, 24), 37.35, 7.66, 0.0, 22.71, 26.07, 0, 0, 0, 2, 0, 0),)
2025-12-31T12:33:36.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 12:33:24
2025-12-31T12:33:36.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T12:33:36.673 [DEBUG] [Thread-127734] [transport.py] [_log()] starting thread (client mode): 0xb9547be0
2025-12-31T12:33:36.673 [DEBUG] [Thread-127734] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:33:36.693 [DEBUG] [Thread-127734] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T12:33:36.693 [INFO] [Thread-127734] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T12:33:36.696 [DEBUG] [Thread-127734] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:33:36.697 [DEBUG] [Thread-127734] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T12:33:36.697 [DEBUG] [Thread-127734] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:33:36.697 [DEBUG] [Thread-127734] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:33:36.697 [DEBUG] [Thread-127734] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:33:36.697 [DEBUG] [Thread-127734] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:33:36.697 [DEBUG] [Thread-127734] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:33:36.697 [DEBUG] [Thread-127734] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:33:36.697 [DEBUG] [Thread-127734] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:33:36.697 [DEBUG] [Thread-127734] [transport.py] [_log()] client lang: <none>
2025-12-31T12:33:36.697 [DEBUG] [Thread-127734] [transport.py] [_log()] server lang: <none>
2025-12-31T12:33:36.697 [DEBUG] [Thread-127734] [transport.py] [_log()] kex follows: False
2025-12-31T12:33:36.697 [DEBUG] [Thread-127734] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:33:36.697 [DEBUG] [Thread-127734] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:33:36.697 [DEBUG] [Thread-127734] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:33:36.697 [DEBUG] [Thread-127734] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:33:36.697 [DEBUG] [Thread-127734] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:33:36.697 [DEBUG] [Thread-127734] [transport.py] [_log()] Compression: none
2025-12-31T12:33:36.697 [DEBUG] [Thread-127734] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:33:36.716 [DEBUG] [Thread-127734] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:33:36.716 [DEBUG] [Thread-127734] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:33:36.717 [DEBUG] [Thread-127734] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T12:33:36.717 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T12:33:36.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:33:36.719 [DEBUG] [Thread-127734] [transport.py] [_log()] userauth is OK
2025-12-31T12:33:36.719 [DEBUG] [Thread-127734] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:33:36.719 [DEBUG] [Thread-127734] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:33:36.719 [DEBUG] [Thread-127734] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T12:33:36.720 [DEBUG] [Thread-127734] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:33:36.739 [INFO] [Thread-127734] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:33:36.740 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:33:37.399 [DEBUG] [Thread-127734] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:33:37.399 [DEBUG] [Thread-127734] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:33:37.400 [DEBUG] [Thread-127734] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T12:33:37.441 [DEBUG] [Thread-127734] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:33:37.441 [DEBUG] [Thread-127734] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:33:37.444 [DEBUG] [Thread-127734] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:33:37.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:33:37.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T12:33:37.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T12:33:37.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T12:33:37.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:33:37.466 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T12:33:37.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:33:37.467 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:33:37.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T12:33:37.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.439726 -999.00  +25.20  21.96     13   -4.70 1 2 1 1 1   888    0 32.11 51.26 ----- 21.7 22.0 300.0 33.7 30.9 -20.0 30.6 -20.8 30.0 -19.4 30.4 -19.8
2025-12-31T12:33:37.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T12:33:37.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T12:33:37.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.439726
2025-12-31T12:33:37.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T12:33:37.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T12:33:37.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T12:33:37.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T12:33:37.469 [DEBUG] [Thread-127734] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:33:37.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T12:33:37.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T12:33:24', tmtdew=37.35, humidity=7.66, cloud=0.0, wind=22.71, temperature=26.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T10:33:12.326', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T12:33:37.565 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T12:33:37.578 [DEBUG] [Thread-127737] [transport.py] [_log()] starting thread (client mode): 0xb6b2a7a0
2025-12-31T12:33:37.578 [DEBUG] [Thread-127737] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:33:37.593 [DEBUG] [Thread-127737] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T12:33:37.593 [INFO] [Thread-127737] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T12:33:37.600 [DEBUG] [Thread-127737] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:33:37.600 [DEBUG] [Thread-127737] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T12:33:37.601 [DEBUG] [Thread-127737] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:33:37.601 [DEBUG] [Thread-127737] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:33:37.601 [DEBUG] [Thread-127737] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:33:37.601 [DEBUG] [Thread-127737] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:33:37.601 [DEBUG] [Thread-127737] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:33:37.601 [DEBUG] [Thread-127737] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:33:37.601 [DEBUG] [Thread-127737] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:33:37.601 [DEBUG] [Thread-127737] [transport.py] [_log()] client lang: <none>
2025-12-31T12:33:37.601 [DEBUG] [Thread-127737] [transport.py] [_log()] server lang: <none>
2025-12-31T12:33:37.601 [DEBUG] [Thread-127737] [transport.py] [_log()] kex follows: False
2025-12-31T12:33:37.601 [DEBUG] [Thread-127737] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:33:37.601 [DEBUG] [Thread-127737] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:33:37.601 [DEBUG] [Thread-127737] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:33:37.601 [DEBUG] [Thread-127737] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:33:37.601 [DEBUG] [Thread-127737] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:33:37.601 [DEBUG] [Thread-127737] [transport.py] [_log()] Compression: none
2025-12-31T12:33:37.601 [DEBUG] [Thread-127737] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:33:37.660 [DEBUG] [Thread-127737] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:33:37.660 [DEBUG] [Thread-127737] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:33:37.661 [DEBUG] [Thread-127737] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T12:33:37.661 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T12:33:37.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:33:37.716 [DEBUG] [Thread-127737] [transport.py] [_log()] userauth is OK
2025-12-31T12:33:37.716 [DEBUG] [Thread-127737] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:33:37.716 [DEBUG] [Thread-127737] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:33:37.716 [DEBUG] [Thread-127737] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T12:33:37.717 [DEBUG] [Thread-127737] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:33:37.735 [INFO] [Thread-127737] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:33:37.735 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T12:33:37.736 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:33:38.601 [DEBUG] [Thread-127737] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:33:38.601 [DEBUG] [Thread-127737] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:33:38.649 [DEBUG] [Thread-127737] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:33:38.649 [DEBUG] [Thread-127737] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:33:38.658 [DEBUG] [Thread-127737] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:33:38.667 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:33:38.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T12:33:38.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T12:33:38.686 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:33:38.687 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:33:38.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:33:38.695 [DEBUG] [Thread-127737] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:33:42.425 [DEBUG] [Thread-127739 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:33:42.954 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:33:42.955 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:33:57.477 [DEBUG] [Thread-127740 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:34:08.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T12:34:08.717 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T12:34:08.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-12-31T12:34:09.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 12, 33, 56), 37.01, 7.82, 0.0, 24.58, 25.81, 0, 0, 0, 2, 0, 0),)
2025-12-31T12:34:09.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 12:33:56
2025-12-31T12:34:09.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T12:34:09.692 [DEBUG] [Thread-127741] [transport.py] [_log()] starting thread (client mode): 0xb9546a10
2025-12-31T12:34:09.692 [DEBUG] [Thread-127741] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:34:09.717 [DEBUG] [Thread-127741] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T12:34:09.717 [INFO] [Thread-127741] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T12:34:09.720 [DEBUG] [Thread-127741] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:34:09.720 [DEBUG] [Thread-127741] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T12:34:09.720 [DEBUG] [Thread-127741] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:34:09.720 [DEBUG] [Thread-127741] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:34:09.720 [DEBUG] [Thread-127741] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:34:09.721 [DEBUG] [Thread-127741] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:34:09.721 [DEBUG] [Thread-127741] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:34:09.721 [DEBUG] [Thread-127741] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:34:09.721 [DEBUG] [Thread-127741] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:34:09.721 [DEBUG] [Thread-127741] [transport.py] [_log()] client lang: <none>
2025-12-31T12:34:09.721 [DEBUG] [Thread-127741] [transport.py] [_log()] server lang: <none>
2025-12-31T12:34:09.721 [DEBUG] [Thread-127741] [transport.py] [_log()] kex follows: False
2025-12-31T12:34:09.721 [DEBUG] [Thread-127741] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:34:09.721 [DEBUG] [Thread-127741] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:34:09.721 [DEBUG] [Thread-127741] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:34:09.721 [DEBUG] [Thread-127741] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:34:09.721 [DEBUG] [Thread-127741] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:34:09.721 [DEBUG] [Thread-127741] [transport.py] [_log()] Compression: none
2025-12-31T12:34:09.721 [DEBUG] [Thread-127741] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:34:09.738 [DEBUG] [Thread-127741] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:34:09.739 [DEBUG] [Thread-127741] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:34:09.740 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T12:34:09.740 [DEBUG] [Thread-127741] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T12:34:09.741 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:34:09.742 [DEBUG] [Thread-127741] [transport.py] [_log()] userauth is OK
2025-12-31T12:34:09.743 [DEBUG] [Thread-127741] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:34:09.743 [DEBUG] [Thread-127741] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:34:09.743 [DEBUG] [Thread-127741] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T12:34:09.743 [DEBUG] [Thread-127741] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:34:09.766 [INFO] [Thread-127741] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:34:09.766 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:34:10.487 [DEBUG] [Thread-127741] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:34:10.488 [DEBUG] [Thread-127741] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:34:10.488 [DEBUG] [Thread-127741] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T12:34:10.529 [DEBUG] [Thread-127741] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:34:10.529 [DEBUG] [Thread-127741] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:34:10.532 [DEBUG] [Thread-127741] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:34:10.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:34:10.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T12:34:10.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T12:34:10.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T12:34:10.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:34:10.557 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T12:34:10.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:34:10.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:34:10.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T12:34:10.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.440073 -999.00  +25.20  17.28     13   -4.90 1 2 1 1 1   888    0 31.21 46.73 ----- 18.1 17.3 302.6 27.8 31.1 -20.3 30.7 -19.3 30.1 -18.4 30.6 -19.8
2025-12-31T12:34:10.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T12:34:10.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T12:34:10.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.440073
2025-12-31T12:34:10.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T12:34:10.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T12:34:10.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T12:34:10.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T12:34:10.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T12:34:10.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T12:33:56', tmtdew=37.01, humidity=7.82, cloud=0.0, wind=24.58, temperature=25.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T10:33:42.307', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T12:34:10.559 [DEBUG] [Thread-127741] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:34:10.644 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T12:34:10.656 [DEBUG] [Thread-127744] [transport.py] [_log()] starting thread (client mode): 0xb6b4a500
2025-12-31T12:34:10.656 [DEBUG] [Thread-127744] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:34:10.672 [DEBUG] [Thread-127744] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T12:34:10.672 [INFO] [Thread-127744] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T12:34:10.680 [DEBUG] [Thread-127744] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:34:10.680 [DEBUG] [Thread-127744] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T12:34:10.680 [DEBUG] [Thread-127744] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:34:10.680 [DEBUG] [Thread-127744] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:34:10.680 [DEBUG] [Thread-127744] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:34:10.680 [DEBUG] [Thread-127744] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:34:10.680 [DEBUG] [Thread-127744] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:34:10.680 [DEBUG] [Thread-127744] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:34:10.681 [DEBUG] [Thread-127744] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:34:10.681 [DEBUG] [Thread-127744] [transport.py] [_log()] client lang: <none>
2025-12-31T12:34:10.681 [DEBUG] [Thread-127744] [transport.py] [_log()] server lang: <none>
2025-12-31T12:34:10.681 [DEBUG] [Thread-127744] [transport.py] [_log()] kex follows: False
2025-12-31T12:34:10.681 [DEBUG] [Thread-127744] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:34:10.681 [DEBUG] [Thread-127744] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:34:10.681 [DEBUG] [Thread-127744] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:34:10.681 [DEBUG] [Thread-127744] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:34:10.681 [DEBUG] [Thread-127744] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:34:10.681 [DEBUG] [Thread-127744] [transport.py] [_log()] Compression: none
2025-12-31T12:34:10.681 [DEBUG] [Thread-127744] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:34:10.746 [DEBUG] [Thread-127744] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:34:10.747 [DEBUG] [Thread-127744] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:34:10.747 [DEBUG] [Thread-127744] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T12:34:10.747 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T12:34:10.748 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:34:10.806 [DEBUG] [Thread-127744] [transport.py] [_log()] userauth is OK
2025-12-31T12:34:10.806 [DEBUG] [Thread-127744] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:34:10.806 [DEBUG] [Thread-127744] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:34:10.807 [DEBUG] [Thread-127744] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T12:34:10.807 [DEBUG] [Thread-127744] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:34:10.828 [INFO] [Thread-127744] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:34:10.829 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T12:34:10.829 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:34:11.671 [DEBUG] [Thread-127744] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:34:11.671 [DEBUG] [Thread-127744] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:34:11.719 [DEBUG] [Thread-127744] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:34:11.719 [DEBUG] [Thread-127744] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:34:11.727 [DEBUG] [Thread-127744] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:34:11.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:34:11.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T12:34:11.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T12:34:11.752 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:34:11.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:34:11.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:34:11.763 [DEBUG] [Thread-127744] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:34:12.512 [DEBUG] [Thread-127746 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:34:12.571 [DEBUG] [Thread-127747 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:34:27.560 [DEBUG] [Thread-127748 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:34:41.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T12:34:41.773 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T12:34:41.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T12:34:42.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 12, 34, 28), 37.15, 7.72, 0.0, 25.05, 25.71, 0, 0, 0, 2, 0, 0),)
2025-12-31T12:34:42.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 12:34:28
2025-12-31T12:34:42.591 [DEBUG] [Thread-127749 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:34:42.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T12:34:42.762 [DEBUG] [Thread-127750] [transport.py] [_log()] starting thread (client mode): 0xbbfcea40
2025-12-31T12:34:42.762 [DEBUG] [Thread-127750] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:34:42.781 [DEBUG] [Thread-127750] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T12:34:42.782 [INFO] [Thread-127750] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T12:34:42.785 [DEBUG] [Thread-127750] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:34:42.785 [DEBUG] [Thread-127750] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T12:34:42.785 [DEBUG] [Thread-127750] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:34:42.785 [DEBUG] [Thread-127750] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:34:42.785 [DEBUG] [Thread-127750] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:34:42.785 [DEBUG] [Thread-127750] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:34:42.785 [DEBUG] [Thread-127750] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:34:42.786 [DEBUG] [Thread-127750] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:34:42.786 [DEBUG] [Thread-127750] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:34:42.786 [DEBUG] [Thread-127750] [transport.py] [_log()] client lang: <none>
2025-12-31T12:34:42.786 [DEBUG] [Thread-127750] [transport.py] [_log()] server lang: <none>
2025-12-31T12:34:42.786 [DEBUG] [Thread-127750] [transport.py] [_log()] kex follows: False
2025-12-31T12:34:42.786 [DEBUG] [Thread-127750] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:34:42.786 [DEBUG] [Thread-127750] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:34:42.786 [DEBUG] [Thread-127750] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:34:42.786 [DEBUG] [Thread-127750] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:34:42.786 [DEBUG] [Thread-127750] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:34:42.786 [DEBUG] [Thread-127750] [transport.py] [_log()] Compression: none
2025-12-31T12:34:42.786 [DEBUG] [Thread-127750] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:34:42.807 [DEBUG] [Thread-127750] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:34:42.807 [DEBUG] [Thread-127750] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:34:42.808 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T12:34:42.809 [DEBUG] [Thread-127750] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T12:34:42.810 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:34:42.811 [DEBUG] [Thread-127750] [transport.py] [_log()] userauth is OK
2025-12-31T12:34:42.812 [DEBUG] [Thread-127750] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:34:42.812 [DEBUG] [Thread-127750] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:34:42.812 [DEBUG] [Thread-127750] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T12:34:42.812 [DEBUG] [Thread-127750] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:34:42.836 [INFO] [Thread-127750] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:34:42.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:34:43.095 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:34:43.099 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:34:43.465 [DEBUG] [Thread-127750] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:34:43.465 [DEBUG] [Thread-127750] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:34:43.465 [DEBUG] [Thread-127750] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T12:34:43.506 [DEBUG] [Thread-127750] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:34:43.506 [DEBUG] [Thread-127750] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:34:43.510 [DEBUG] [Thread-127750] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:34:43.521 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:34:43.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T12:34:43.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T12:34:43.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T12:34:43.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:34:43.538 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T12:34:43.538 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:34:43.539 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:34:43.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T12:34:43.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.440421 -999.00  +25.10  26.62     13   -5.10 1 2 1 1 1   888    0 31.17 43.00 ----- 26.3 26.6 288.6 31.0 30.9 -20.6 30.6 -19.7 29.9 -19.0 30.4 -20.4
2025-12-31T12:34:43.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T12:34:43.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T12:34:43.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.440421
2025-12-31T12:34:43.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T12:34:43.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T12:34:43.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T12:34:43.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T12:34:43.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T12:34:43.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T12:34:28', tmtdew=37.15, humidity=7.72, cloud=0.0, wind=25.05, temperature=25.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T10:34:12.374', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T12:34:43.542 [DEBUG] [Thread-127750] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:34:43.625 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T12:34:43.635 [DEBUG] [Thread-127753] [transport.py] [_log()] starting thread (client mode): 0xb6b16c20
2025-12-31T12:34:43.635 [DEBUG] [Thread-127753] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:34:43.650 [DEBUG] [Thread-127753] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T12:34:43.650 [INFO] [Thread-127753] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T12:34:43.658 [DEBUG] [Thread-127753] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:34:43.658 [DEBUG] [Thread-127753] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T12:34:43.658 [DEBUG] [Thread-127753] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:34:43.658 [DEBUG] [Thread-127753] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:34:43.658 [DEBUG] [Thread-127753] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:34:43.658 [DEBUG] [Thread-127753] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:34:43.658 [DEBUG] [Thread-127753] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:34:43.658 [DEBUG] [Thread-127753] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:34:43.658 [DEBUG] [Thread-127753] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:34:43.658 [DEBUG] [Thread-127753] [transport.py] [_log()] client lang: <none>
2025-12-31T12:34:43.658 [DEBUG] [Thread-127753] [transport.py] [_log()] server lang: <none>
2025-12-31T12:34:43.658 [DEBUG] [Thread-127753] [transport.py] [_log()] kex follows: False
2025-12-31T12:34:43.658 [DEBUG] [Thread-127753] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:34:43.658 [DEBUG] [Thread-127753] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:34:43.658 [DEBUG] [Thread-127753] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:34:43.658 [DEBUG] [Thread-127753] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:34:43.658 [DEBUG] [Thread-127753] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:34:43.659 [DEBUG] [Thread-127753] [transport.py] [_log()] Compression: none
2025-12-31T12:34:43.659 [DEBUG] [Thread-127753] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:34:43.714 [DEBUG] [Thread-127753] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:34:43.715 [DEBUG] [Thread-127753] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:34:43.715 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T12:34:43.716 [DEBUG] [Thread-127753] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T12:34:43.717 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:34:43.770 [DEBUG] [Thread-127753] [transport.py] [_log()] userauth is OK
2025-12-31T12:34:43.770 [DEBUG] [Thread-127753] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:34:43.770 [DEBUG] [Thread-127753] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:34:43.771 [DEBUG] [Thread-127753] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T12:34:43.771 [DEBUG] [Thread-127753] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:34:43.790 [INFO] [Thread-127753] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:34:43.790 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T12:34:43.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:34:44.609 [DEBUG] [Thread-127753] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:34:44.609 [DEBUG] [Thread-127753] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:34:44.657 [DEBUG] [Thread-127753] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:34:44.657 [DEBUG] [Thread-127753] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:34:44.667 [DEBUG] [Thread-127753] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:34:44.676 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:34:44.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T12:34:44.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T12:34:44.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:34:44.695 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:34:44.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:34:44.704 [DEBUG] [Thread-127753] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:34:57.627 [DEBUG] [Thread-127755 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:35:12.615 [DEBUG] [Thread-127756 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:35:12.682 [DEBUG] [Thread-127757 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:35:14.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T12:35:14.725 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T12:35:14.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T12:35:15.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 12, 35), 36.95, 7.79, 0.0, 17.34, 25.59, 0, 0, 0, 2, 0, 0),)
2025-12-31T12:35:15.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 12:35:00
2025-12-31T12:35:15.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T12:35:15.741 [DEBUG] [Thread-127758] [transport.py] [_log()] starting thread (client mode): 0xb6b28d90
2025-12-31T12:35:15.741 [DEBUG] [Thread-127758] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:35:15.762 [DEBUG] [Thread-127758] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T12:35:15.762 [INFO] [Thread-127758] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T12:35:15.763 [DEBUG] [Thread-127758] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:35:15.763 [DEBUG] [Thread-127758] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T12:35:15.763 [DEBUG] [Thread-127758] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:35:15.763 [DEBUG] [Thread-127758] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:35:15.763 [DEBUG] [Thread-127758] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:35:15.763 [DEBUG] [Thread-127758] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:35:15.763 [DEBUG] [Thread-127758] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:35:15.763 [DEBUG] [Thread-127758] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:35:15.763 [DEBUG] [Thread-127758] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:35:15.763 [DEBUG] [Thread-127758] [transport.py] [_log()] client lang: <none>
2025-12-31T12:35:15.763 [DEBUG] [Thread-127758] [transport.py] [_log()] server lang: <none>
2025-12-31T12:35:15.763 [DEBUG] [Thread-127758] [transport.py] [_log()] kex follows: False
2025-12-31T12:35:15.763 [DEBUG] [Thread-127758] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:35:15.763 [DEBUG] [Thread-127758] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:35:15.763 [DEBUG] [Thread-127758] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:35:15.764 [DEBUG] [Thread-127758] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:35:15.764 [DEBUG] [Thread-127758] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:35:15.764 [DEBUG] [Thread-127758] [transport.py] [_log()] Compression: none
2025-12-31T12:35:15.764 [DEBUG] [Thread-127758] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:35:15.772 [DEBUG] [Thread-127758] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:35:15.772 [DEBUG] [Thread-127758] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:35:15.773 [DEBUG] [Thread-127758] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T12:35:15.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T12:35:15.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:35:15.774 [DEBUG] [Thread-127758] [transport.py] [_log()] userauth is OK
2025-12-31T12:35:15.774 [DEBUG] [Thread-127758] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:35:15.775 [DEBUG] [Thread-127758] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:35:15.775 [DEBUG] [Thread-127758] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T12:35:15.775 [DEBUG] [Thread-127758] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:35:15.792 [INFO] [Thread-127758] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:35:15.793 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:35:16.436 [DEBUG] [Thread-127758] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:35:16.436 [DEBUG] [Thread-127758] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:35:16.437 [DEBUG] [Thread-127758] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T12:35:16.477 [DEBUG] [Thread-127758] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:35:16.478 [DEBUG] [Thread-127758] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:35:16.481 [DEBUG] [Thread-127758] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:35:16.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:35:16.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T12:35:16.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T12:35:16.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T12:35:16.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:35:16.504 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T12:35:16.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:35:16.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:35:16.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T12:35:16.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.440768 -999.00  +25.30  23.40     12   -5.40 1 2 1 1 1   888    0 31.50 41.27 ----- 24.0 23.4 333.4 29.1 30.9 -20.6 30.6 -19.3 30.0 -19.3 30.4 -20.3
2025-12-31T12:35:16.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T12:35:16.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T12:35:16.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.440768
2025-12-31T12:35:16.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T12:35:16.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T12:35:16.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T12:35:16.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T12:35:16.507 [DEBUG] [Thread-127758] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:35:16.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T12:35:16.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T12:35:00', tmtdew=36.95, humidity=7.79, cloud=0.0, wind=17.34, temperature=25.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T10:34:42.355', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T12:35:16.591 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T12:35:16.604 [DEBUG] [Thread-127761] [transport.py] [_log()] starting thread (client mode): 0xb6b2a7a0
2025-12-31T12:35:16.604 [DEBUG] [Thread-127761] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:35:16.619 [DEBUG] [Thread-127761] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T12:35:16.619 [INFO] [Thread-127761] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T12:35:16.627 [DEBUG] [Thread-127761] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:35:16.627 [DEBUG] [Thread-127761] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T12:35:16.627 [DEBUG] [Thread-127761] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:35:16.628 [DEBUG] [Thread-127761] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:35:16.628 [DEBUG] [Thread-127761] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:35:16.628 [DEBUG] [Thread-127761] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:35:16.628 [DEBUG] [Thread-127761] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:35:16.628 [DEBUG] [Thread-127761] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:35:16.628 [DEBUG] [Thread-127761] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:35:16.628 [DEBUG] [Thread-127761] [transport.py] [_log()] client lang: <none>
2025-12-31T12:35:16.628 [DEBUG] [Thread-127761] [transport.py] [_log()] server lang: <none>
2025-12-31T12:35:16.628 [DEBUG] [Thread-127761] [transport.py] [_log()] kex follows: False
2025-12-31T12:35:16.628 [DEBUG] [Thread-127761] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:35:16.628 [DEBUG] [Thread-127761] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:35:16.628 [DEBUG] [Thread-127761] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:35:16.628 [DEBUG] [Thread-127761] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:35:16.630 [DEBUG] [Thread-127761] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:35:16.630 [DEBUG] [Thread-127761] [transport.py] [_log()] Compression: none
2025-12-31T12:35:16.630 [DEBUG] [Thread-127761] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:35:16.686 [DEBUG] [Thread-127761] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:35:16.687 [DEBUG] [Thread-127761] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:35:16.687 [DEBUG] [Thread-127761] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T12:35:16.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T12:35:16.689 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:35:16.741 [DEBUG] [Thread-127761] [transport.py] [_log()] userauth is OK
2025-12-31T12:35:16.742 [DEBUG] [Thread-127761] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:35:16.742 [DEBUG] [Thread-127761] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:35:16.742 [DEBUG] [Thread-127761] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T12:35:16.742 [DEBUG] [Thread-127761] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:35:16.762 [INFO] [Thread-127761] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:35:16.762 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T12:35:16.762 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:35:17.591 [DEBUG] [Thread-127761] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:35:17.591 [DEBUG] [Thread-127761] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:35:17.639 [DEBUG] [Thread-127761] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:35:17.639 [DEBUG] [Thread-127761] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:35:17.649 [DEBUG] [Thread-127761] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:35:17.658 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:35:17.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T12:35:17.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T12:35:17.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:35:17.678 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:35:17.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:35:17.686 [DEBUG] [Thread-127761] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:35:27.715 [DEBUG] [Thread-127763 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:35:42.766 [DEBUG] [Thread-127764 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:35:43.240 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:35:43.241 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:35:47.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T12:35:47.693 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T12:35:47.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T12:35:48.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 12, 35, 32), 36.99, 7.79, 0.0, 17.54, 25.74, 0, 0, 0, 2, 0, 0),)
2025-12-31T12:35:48.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 12:35:32
2025-12-31T12:35:48.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T12:35:48.704 [DEBUG] [Thread-127765] [transport.py] [_log()] starting thread (client mode): 0xb9545ed0
2025-12-31T12:35:48.704 [DEBUG] [Thread-127765] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:35:48.724 [DEBUG] [Thread-127765] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T12:35:48.724 [INFO] [Thread-127765] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T12:35:48.727 [DEBUG] [Thread-127765] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:35:48.727 [DEBUG] [Thread-127765] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T12:35:48.727 [DEBUG] [Thread-127765] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:35:48.727 [DEBUG] [Thread-127765] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:35:48.727 [DEBUG] [Thread-127765] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:35:48.728 [DEBUG] [Thread-127765] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:35:48.728 [DEBUG] [Thread-127765] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:35:48.728 [DEBUG] [Thread-127765] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:35:48.728 [DEBUG] [Thread-127765] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:35:48.728 [DEBUG] [Thread-127765] [transport.py] [_log()] client lang: <none>
2025-12-31T12:35:48.728 [DEBUG] [Thread-127765] [transport.py] [_log()] server lang: <none>
2025-12-31T12:35:48.728 [DEBUG] [Thread-127765] [transport.py] [_log()] kex follows: False
2025-12-31T12:35:48.728 [DEBUG] [Thread-127765] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:35:48.728 [DEBUG] [Thread-127765] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:35:48.728 [DEBUG] [Thread-127765] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:35:48.728 [DEBUG] [Thread-127765] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:35:48.728 [DEBUG] [Thread-127765] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:35:48.728 [DEBUG] [Thread-127765] [transport.py] [_log()] Compression: none
2025-12-31T12:35:48.728 [DEBUG] [Thread-127765] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:35:48.743 [DEBUG] [Thread-127765] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:35:48.744 [DEBUG] [Thread-127765] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:35:48.744 [DEBUG] [Thread-127765] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T12:35:48.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T12:35:48.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:35:48.745 [DEBUG] [Thread-127765] [transport.py] [_log()] userauth is OK
2025-12-31T12:35:48.745 [DEBUG] [Thread-127765] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:35:48.745 [DEBUG] [Thread-127765] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:35:48.745 [DEBUG] [Thread-127765] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T12:35:48.745 [DEBUG] [Thread-127765] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:35:48.756 [INFO] [Thread-127765] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:35:48.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:35:49.402 [DEBUG] [Thread-127765] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:35:49.402 [DEBUG] [Thread-127765] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:35:49.403 [DEBUG] [Thread-127765] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T12:35:49.444 [DEBUG] [Thread-127765] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:35:49.444 [DEBUG] [Thread-127765] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:35:49.446 [DEBUG] [Thread-127765] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:35:49.459 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:35:49.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T12:35:49.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T12:35:49.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T12:35:49.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:35:49.465 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T12:35:49.465 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:35:49.465 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:35:49.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T12:35:49.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.441462 -999.00  +25.20  20.33     13   -4.70 1 2 1 1 1   888    0 31.42 40.35 ----- 17.9 20.3 323.4 23.4 31.0 -20.6 30.6 -19.7 30.0 -19.1 30.4 -20.2
2025-12-31T12:35:49.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T12:35:49.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T12:35:49.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.441462
2025-12-31T12:35:49.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T12:35:49.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T12:35:49.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T12:35:49.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T12:35:49.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T12:35:49.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T12:35:32', tmtdew=36.99, humidity=7.79, cloud=0.0, wind=17.54, temperature=25.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T10:35:42.317', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T12:35:49.467 [DEBUG] [Thread-127765] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:35:49.541 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T12:35:49.551 [DEBUG] [Thread-127768] [transport.py] [_log()] starting thread (client mode): 0xbbfcd3c0
2025-12-31T12:35:49.552 [DEBUG] [Thread-127768] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:35:49.566 [DEBUG] [Thread-127768] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T12:35:49.567 [INFO] [Thread-127768] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T12:35:49.574 [DEBUG] [Thread-127768] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:35:49.574 [DEBUG] [Thread-127768] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T12:35:49.574 [DEBUG] [Thread-127768] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:35:49.574 [DEBUG] [Thread-127768] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:35:49.574 [DEBUG] [Thread-127768] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:35:49.574 [DEBUG] [Thread-127768] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:35:49.574 [DEBUG] [Thread-127768] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:35:49.574 [DEBUG] [Thread-127768] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:35:49.574 [DEBUG] [Thread-127768] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:35:49.574 [DEBUG] [Thread-127768] [transport.py] [_log()] client lang: <none>
2025-12-31T12:35:49.574 [DEBUG] [Thread-127768] [transport.py] [_log()] server lang: <none>
2025-12-31T12:35:49.574 [DEBUG] [Thread-127768] [transport.py] [_log()] kex follows: False
2025-12-31T12:35:49.574 [DEBUG] [Thread-127768] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:35:49.574 [DEBUG] [Thread-127768] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:35:49.574 [DEBUG] [Thread-127768] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:35:49.574 [DEBUG] [Thread-127768] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:35:49.574 [DEBUG] [Thread-127768] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:35:49.574 [DEBUG] [Thread-127768] [transport.py] [_log()] Compression: none
2025-12-31T12:35:49.574 [DEBUG] [Thread-127768] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:35:49.636 [DEBUG] [Thread-127768] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:35:49.636 [DEBUG] [Thread-127768] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:35:49.636 [DEBUG] [Thread-127768] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T12:35:49.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T12:35:49.637 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:35:49.692 [DEBUG] [Thread-127768] [transport.py] [_log()] userauth is OK
2025-12-31T12:35:49.693 [DEBUG] [Thread-127768] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:35:49.693 [DEBUG] [Thread-127768] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:35:49.693 [DEBUG] [Thread-127768] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T12:35:49.693 [DEBUG] [Thread-127768] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:35:49.707 [INFO] [Thread-127768] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:35:49.707 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T12:35:49.707 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:35:50.572 [DEBUG] [Thread-127768] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:35:50.572 [DEBUG] [Thread-127768] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:35:50.620 [DEBUG] [Thread-127768] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:35:50.620 [DEBUG] [Thread-127768] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:35:50.628 [DEBUG] [Thread-127768] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:35:50.636 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:35:50.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T12:35:50.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T12:35:50.652 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:35:50.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:35:50.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:35:50.660 [DEBUG] [Thread-127768] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:35:57.798 [DEBUG] [Thread-127770 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:36:12.673 [DEBUG] [Thread-127771 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:36:12.845 [DEBUG] [Thread-127772 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:36:20.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T12:36:20.679 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T12:36:20.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T12:36:21.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 12, 36, 4), 36.88, 7.87, 0.0, 18.63, 25.86, 0, 0, 0, 2, 0, 0),)
2025-12-31T12:36:21.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 12:36:04
2025-12-31T12:36:21.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T12:36:21.671 [DEBUG] [Thread-127773] [transport.py] [_log()] starting thread (client mode): 0xbbfccbe0
2025-12-31T12:36:21.671 [DEBUG] [Thread-127773] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:36:21.692 [DEBUG] [Thread-127773] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T12:36:21.692 [INFO] [Thread-127773] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T12:36:21.695 [DEBUG] [Thread-127773] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:36:21.695 [DEBUG] [Thread-127773] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T12:36:21.695 [DEBUG] [Thread-127773] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:36:21.696 [DEBUG] [Thread-127773] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:36:21.696 [DEBUG] [Thread-127773] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:36:21.696 [DEBUG] [Thread-127773] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:36:21.696 [DEBUG] [Thread-127773] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:36:21.696 [DEBUG] [Thread-127773] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:36:21.696 [DEBUG] [Thread-127773] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:36:21.696 [DEBUG] [Thread-127773] [transport.py] [_log()] client lang: <none>
2025-12-31T12:36:21.696 [DEBUG] [Thread-127773] [transport.py] [_log()] server lang: <none>
2025-12-31T12:36:21.696 [DEBUG] [Thread-127773] [transport.py] [_log()] kex follows: False
2025-12-31T12:36:21.696 [DEBUG] [Thread-127773] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:36:21.696 [DEBUG] [Thread-127773] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:36:21.696 [DEBUG] [Thread-127773] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:36:21.696 [DEBUG] [Thread-127773] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:36:21.696 [DEBUG] [Thread-127773] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:36:21.696 [DEBUG] [Thread-127773] [transport.py] [_log()] Compression: none
2025-12-31T12:36:21.696 [DEBUG] [Thread-127773] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:36:21.705 [DEBUG] [Thread-127773] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:36:21.706 [DEBUG] [Thread-127773] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:36:21.706 [DEBUG] [Thread-127773] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T12:36:21.706 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T12:36:21.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:36:21.708 [DEBUG] [Thread-127773] [transport.py] [_log()] userauth is OK
2025-12-31T12:36:21.708 [DEBUG] [Thread-127773] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:36:21.708 [DEBUG] [Thread-127773] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:36:21.708 [DEBUG] [Thread-127773] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T12:36:21.708 [DEBUG] [Thread-127773] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:36:21.731 [INFO] [Thread-127773] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:36:21.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:36:22.337 [DEBUG] [Thread-127773] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:36:22.338 [DEBUG] [Thread-127773] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:36:22.338 [DEBUG] [Thread-127773] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T12:36:22.379 [DEBUG] [Thread-127773] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:36:22.379 [DEBUG] [Thread-127773] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:36:22.381 [DEBUG] [Thread-127773] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:36:22.393 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:36:22.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T12:36:22.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T12:36:22.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T12:36:22.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:36:22.402 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T12:36:22.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:36:22.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:36:22.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T12:36:22.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.441809 -999.00  +25.30  24.26     13   -4.20 1 2 1 1 1   888    0 31.41 37.15 ----- 30.9 24.3 321.6 30.2 31.1 -20.0 30.7 -18.9 30.2 -18.1 30.6 -19.3
2025-12-31T12:36:22.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T12:36:22.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T12:36:22.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.441809
2025-12-31T12:36:22.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T12:36:22.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T12:36:22.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T12:36:22.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T12:36:22.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T12:36:22.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T12:36:04', tmtdew=36.88, humidity=7.87, cloud=0.0, wind=18.63, temperature=25.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T10:36:12.298', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T12:36:22.405 [DEBUG] [Thread-127773] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:36:22.489 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T12:36:22.500 [DEBUG] [Thread-127776] [transport.py] [_log()] starting thread (client mode): 0xbbfcea40
2025-12-31T12:36:22.500 [DEBUG] [Thread-127776] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:36:22.515 [DEBUG] [Thread-127776] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T12:36:22.515 [INFO] [Thread-127776] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T12:36:22.523 [DEBUG] [Thread-127776] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:36:22.523 [DEBUG] [Thread-127776] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T12:36:22.523 [DEBUG] [Thread-127776] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:36:22.523 [DEBUG] [Thread-127776] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:36:22.523 [DEBUG] [Thread-127776] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:36:22.524 [DEBUG] [Thread-127776] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:36:22.524 [DEBUG] [Thread-127776] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:36:22.524 [DEBUG] [Thread-127776] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:36:22.524 [DEBUG] [Thread-127776] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:36:22.524 [DEBUG] [Thread-127776] [transport.py] [_log()] client lang: <none>
2025-12-31T12:36:22.524 [DEBUG] [Thread-127776] [transport.py] [_log()] server lang: <none>
2025-12-31T12:36:22.524 [DEBUG] [Thread-127776] [transport.py] [_log()] kex follows: False
2025-12-31T12:36:22.524 [DEBUG] [Thread-127776] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:36:22.524 [DEBUG] [Thread-127776] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:36:22.524 [DEBUG] [Thread-127776] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:36:22.525 [DEBUG] [Thread-127776] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:36:22.525 [DEBUG] [Thread-127776] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:36:22.525 [DEBUG] [Thread-127776] [transport.py] [_log()] Compression: none
2025-12-31T12:36:22.525 [DEBUG] [Thread-127776] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:36:22.579 [DEBUG] [Thread-127776] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:36:22.580 [DEBUG] [Thread-127776] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:36:22.580 [DEBUG] [Thread-127776] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T12:36:22.581 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T12:36:22.581 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:36:22.636 [DEBUG] [Thread-127776] [transport.py] [_log()] userauth is OK
2025-12-31T12:36:22.636 [DEBUG] [Thread-127776] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:36:22.636 [DEBUG] [Thread-127776] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:36:22.636 [DEBUG] [Thread-127776] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T12:36:22.636 [DEBUG] [Thread-127776] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:36:22.655 [INFO] [Thread-127776] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:36:22.656 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T12:36:22.656 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:36:23.501 [DEBUG] [Thread-127776] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:36:23.501 [DEBUG] [Thread-127776] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:36:23.548 [DEBUG] [Thread-127776] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:36:23.549 [DEBUG] [Thread-127776] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:36:23.557 [DEBUG] [Thread-127776] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:36:23.566 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:36:23.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T12:36:23.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T12:36:23.583 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:36:23.583 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:36:23.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:36:23.591 [DEBUG] [Thread-127776] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:36:27.879 [DEBUG] [Thread-127778 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:36:42.924 [DEBUG] [Thread-127779 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:36:43.381 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:36:43.382 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:36:53.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T12:36:53.590 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T12:36:53.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T12:36:54.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 12, 36, 36), 36.16, 8.59, 0.0, 24.72, 25.89, 0, 0, 0, 2, 0, 0),)
2025-12-31T12:36:54.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 12:36:36
2025-12-31T12:36:54.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T12:36:54.579 [DEBUG] [Thread-127780] [transport.py] [_log()] starting thread (client mode): 0xb6b16aa0
2025-12-31T12:36:54.579 [DEBUG] [Thread-127780] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:36:54.606 [DEBUG] [Thread-127780] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T12:36:54.606 [INFO] [Thread-127780] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T12:36:54.608 [DEBUG] [Thread-127780] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:36:54.608 [DEBUG] [Thread-127780] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T12:36:54.608 [DEBUG] [Thread-127780] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:36:54.608 [DEBUG] [Thread-127780] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:36:54.608 [DEBUG] [Thread-127780] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:36:54.608 [DEBUG] [Thread-127780] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:36:54.608 [DEBUG] [Thread-127780] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:36:54.608 [DEBUG] [Thread-127780] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:36:54.608 [DEBUG] [Thread-127780] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:36:54.608 [DEBUG] [Thread-127780] [transport.py] [_log()] client lang: <none>
2025-12-31T12:36:54.608 [DEBUG] [Thread-127780] [transport.py] [_log()] server lang: <none>
2025-12-31T12:36:54.608 [DEBUG] [Thread-127780] [transport.py] [_log()] kex follows: False
2025-12-31T12:36:54.608 [DEBUG] [Thread-127780] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:36:54.608 [DEBUG] [Thread-127780] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:36:54.608 [DEBUG] [Thread-127780] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:36:54.608 [DEBUG] [Thread-127780] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:36:54.608 [DEBUG] [Thread-127780] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:36:54.608 [DEBUG] [Thread-127780] [transport.py] [_log()] Compression: none
2025-12-31T12:36:54.608 [DEBUG] [Thread-127780] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:36:54.621 [DEBUG] [Thread-127780] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:36:54.621 [DEBUG] [Thread-127780] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:36:54.622 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T12:36:54.622 [DEBUG] [Thread-127780] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T12:36:54.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:36:54.624 [DEBUG] [Thread-127780] [transport.py] [_log()] userauth is OK
2025-12-31T12:36:54.625 [DEBUG] [Thread-127780] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:36:54.625 [DEBUG] [Thread-127780] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:36:54.625 [DEBUG] [Thread-127780] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T12:36:54.625 [DEBUG] [Thread-127780] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:36:54.640 [INFO] [Thread-127780] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:36:54.640 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:36:55.265 [DEBUG] [Thread-127780] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:36:55.265 [DEBUG] [Thread-127780] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:36:55.265 [DEBUG] [Thread-127780] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T12:36:55.306 [DEBUG] [Thread-127780] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:36:55.306 [DEBUG] [Thread-127780] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:36:55.311 [DEBUG] [Thread-127780] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:36:55.321 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:36:55.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T12:36:55.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T12:36:55.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T12:36:55.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:36:55.331 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T12:36:55.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:36:55.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:36:55.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T12:36:55.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.442157 -999.00  +25.10  25.80     13   -4.30 1 2 1 1 1   888    0 30.97 31.22 ----- 25.7 25.8 308.2 33.0 31.1 -20.6 30.6 -19.8 30.2 -18.4 30.6 -19.7
2025-12-31T12:36:55.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T12:36:55.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T12:36:55.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.442157
2025-12-31T12:36:55.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T12:36:55.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T12:36:55.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T12:36:55.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T12:36:55.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T12:36:55.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T12:36:36', tmtdew=36.16, humidity=8.59, cloud=0.0, wind=24.72, temperature=25.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T10:36:42.365', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T12:36:55.333 [DEBUG] [Thread-127780] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:36:55.418 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T12:36:55.435 [DEBUG] [Thread-127783] [transport.py] [_log()] starting thread (client mode): 0xb6b14040
2025-12-31T12:36:55.435 [DEBUG] [Thread-127783] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:36:55.449 [DEBUG] [Thread-127783] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T12:36:55.449 [INFO] [Thread-127783] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T12:36:55.457 [DEBUG] [Thread-127783] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:36:55.457 [DEBUG] [Thread-127783] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T12:36:55.457 [DEBUG] [Thread-127783] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:36:55.457 [DEBUG] [Thread-127783] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:36:55.457 [DEBUG] [Thread-127783] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:36:55.457 [DEBUG] [Thread-127783] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:36:55.457 [DEBUG] [Thread-127783] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:36:55.457 [DEBUG] [Thread-127783] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:36:55.457 [DEBUG] [Thread-127783] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:36:55.457 [DEBUG] [Thread-127783] [transport.py] [_log()] client lang: <none>
2025-12-31T12:36:55.457 [DEBUG] [Thread-127783] [transport.py] [_log()] server lang: <none>
2025-12-31T12:36:55.457 [DEBUG] [Thread-127783] [transport.py] [_log()] kex follows: False
2025-12-31T12:36:55.457 [DEBUG] [Thread-127783] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:36:55.457 [DEBUG] [Thread-127783] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:36:55.457 [DEBUG] [Thread-127783] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:36:55.457 [DEBUG] [Thread-127783] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:36:55.457 [DEBUG] [Thread-127783] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:36:55.457 [DEBUG] [Thread-127783] [transport.py] [_log()] Compression: none
2025-12-31T12:36:55.457 [DEBUG] [Thread-127783] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:36:55.514 [DEBUG] [Thread-127783] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:36:55.515 [DEBUG] [Thread-127783] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:36:55.515 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T12:36:55.515 [DEBUG] [Thread-127783] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T12:36:55.516 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:36:55.571 [DEBUG] [Thread-127783] [transport.py] [_log()] userauth is OK
2025-12-31T12:36:55.572 [DEBUG] [Thread-127783] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:36:55.572 [DEBUG] [Thread-127783] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:36:55.572 [DEBUG] [Thread-127783] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T12:36:55.572 [DEBUG] [Thread-127783] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:36:55.593 [INFO] [Thread-127783] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:36:55.594 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T12:36:55.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:36:56.453 [DEBUG] [Thread-127783] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:36:56.453 [DEBUG] [Thread-127783] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:36:56.501 [DEBUG] [Thread-127783] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:36:56.501 [DEBUG] [Thread-127783] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:36:56.510 [DEBUG] [Thread-127783] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:36:56.519 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:36:56.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T12:36:56.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T12:36:56.538 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:36:56.538 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:36:56.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:36:56.547 [DEBUG] [Thread-127783] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:36:57.960 [DEBUG] [Thread-127785 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:37:12.722 [DEBUG] [Thread-127786 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:37:13.013 [DEBUG] [Thread-127787 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:37:26.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T12:37:26.570 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T12:37:26.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T12:37:27.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 12, 37, 8), 36.3, 8.5, 0.0, 24.79, 25.92, 0, 0, 0, 2, 0, 0),)
2025-12-31T12:37:27.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 12:37:08
2025-12-31T12:37:27.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T12:37:27.550 [DEBUG] [Thread-127788] [transport.py] [_log()] starting thread (client mode): 0xb6b4a320
2025-12-31T12:37:27.550 [DEBUG] [Thread-127788] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:37:27.570 [DEBUG] [Thread-127788] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T12:37:27.571 [INFO] [Thread-127788] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T12:37:27.573 [DEBUG] [Thread-127788] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:37:27.574 [DEBUG] [Thread-127788] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T12:37:27.574 [DEBUG] [Thread-127788] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:37:27.574 [DEBUG] [Thread-127788] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:37:27.574 [DEBUG] [Thread-127788] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:37:27.574 [DEBUG] [Thread-127788] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:37:27.574 [DEBUG] [Thread-127788] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:37:27.574 [DEBUG] [Thread-127788] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:37:27.574 [DEBUG] [Thread-127788] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:37:27.574 [DEBUG] [Thread-127788] [transport.py] [_log()] client lang: <none>
2025-12-31T12:37:27.574 [DEBUG] [Thread-127788] [transport.py] [_log()] server lang: <none>
2025-12-31T12:37:27.574 [DEBUG] [Thread-127788] [transport.py] [_log()] kex follows: False
2025-12-31T12:37:27.574 [DEBUG] [Thread-127788] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:37:27.574 [DEBUG] [Thread-127788] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:37:27.574 [DEBUG] [Thread-127788] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:37:27.574 [DEBUG] [Thread-127788] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:37:27.575 [DEBUG] [Thread-127788] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:37:27.575 [DEBUG] [Thread-127788] [transport.py] [_log()] Compression: none
2025-12-31T12:37:27.575 [DEBUG] [Thread-127788] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:37:27.592 [DEBUG] [Thread-127788] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:37:27.593 [DEBUG] [Thread-127788] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:37:27.594 [DEBUG] [Thread-127788] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T12:37:27.594 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T12:37:27.595 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:37:27.596 [DEBUG] [Thread-127788] [transport.py] [_log()] userauth is OK
2025-12-31T12:37:27.596 [DEBUG] [Thread-127788] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:37:27.596 [DEBUG] [Thread-127788] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:37:27.596 [DEBUG] [Thread-127788] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T12:37:27.596 [DEBUG] [Thread-127788] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:37:27.606 [INFO] [Thread-127788] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:37:27.606 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:37:28.046 [DEBUG] [Thread-127790 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:37:28.193 [DEBUG] [Thread-127788] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:37:28.193 [DEBUG] [Thread-127788] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:37:28.193 [DEBUG] [Thread-127788] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T12:37:28.233 [DEBUG] [Thread-127788] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:37:28.234 [DEBUG] [Thread-127788] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:37:28.236 [DEBUG] [Thread-127788] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:37:28.249 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:37:28.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T12:37:28.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T12:37:28.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T12:37:28.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:37:28.259 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T12:37:28.259 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:37:28.260 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:37:28.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T12:37:28.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.442504 -999.00  +25.50  23.63     13   -4.80 1 2 1 1 1   888    0 30.82 28.90 ----- 25.2 23.6 305.2 29.6 31.0 -22.0 30.6 -20.1 30.1 -19.7 30.6 -21.2
2025-12-31T12:37:28.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T12:37:28.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T12:37:28.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.442504
2025-12-31T12:37:28.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T12:37:28.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T12:37:28.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T12:37:28.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T12:37:28.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T12:37:28.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T12:37:08', tmtdew=36.3, humidity=8.5, cloud=0.0, wind=24.79, temperature=25.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T10:37:12.346', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T12:37:28.262 [DEBUG] [Thread-127788] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:37:28.345 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T12:37:28.357 [DEBUG] [Thread-127792] [transport.py] [_log()] starting thread (client mode): 0xb6bb2e30
2025-12-31T12:37:28.357 [DEBUG] [Thread-127792] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:37:28.371 [DEBUG] [Thread-127792] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T12:37:28.371 [INFO] [Thread-127792] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T12:37:28.379 [DEBUG] [Thread-127792] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:37:28.379 [DEBUG] [Thread-127792] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T12:37:28.379 [DEBUG] [Thread-127792] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:37:28.379 [DEBUG] [Thread-127792] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:37:28.379 [DEBUG] [Thread-127792] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:37:28.379 [DEBUG] [Thread-127792] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:37:28.379 [DEBUG] [Thread-127792] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:37:28.379 [DEBUG] [Thread-127792] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:37:28.379 [DEBUG] [Thread-127792] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:37:28.379 [DEBUG] [Thread-127792] [transport.py] [_log()] client lang: <none>
2025-12-31T12:37:28.379 [DEBUG] [Thread-127792] [transport.py] [_log()] server lang: <none>
2025-12-31T12:37:28.379 [DEBUG] [Thread-127792] [transport.py] [_log()] kex follows: False
2025-12-31T12:37:28.379 [DEBUG] [Thread-127792] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:37:28.379 [DEBUG] [Thread-127792] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:37:28.379 [DEBUG] [Thread-127792] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:37:28.379 [DEBUG] [Thread-127792] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:37:28.380 [DEBUG] [Thread-127792] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:37:28.380 [DEBUG] [Thread-127792] [transport.py] [_log()] Compression: none
2025-12-31T12:37:28.380 [DEBUG] [Thread-127792] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:37:28.441 [DEBUG] [Thread-127792] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:37:28.441 [DEBUG] [Thread-127792] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:37:28.442 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T12:37:28.442 [DEBUG] [Thread-127792] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T12:37:28.443 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:37:28.499 [DEBUG] [Thread-127792] [transport.py] [_log()] userauth is OK
2025-12-31T12:37:28.500 [DEBUG] [Thread-127792] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:37:28.500 [DEBUG] [Thread-127792] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:37:28.500 [DEBUG] [Thread-127792] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T12:37:28.500 [DEBUG] [Thread-127792] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:37:28.519 [INFO] [Thread-127792] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:37:28.520 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T12:37:28.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:37:29.380 [DEBUG] [Thread-127792] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:37:29.381 [DEBUG] [Thread-127792] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:37:29.429 [DEBUG] [Thread-127792] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:37:29.430 [DEBUG] [Thread-127792] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:37:29.439 [DEBUG] [Thread-127792] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:37:29.448 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:37:29.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T12:37:29.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T12:37:29.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:37:29.467 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:37:29.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:37:29.475 [DEBUG] [Thread-127792] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:37:43.085 [DEBUG] [Thread-127794 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:37:43.519 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:37:43.520 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:37:58.124 [DEBUG] [Thread-127795 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:37:59.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T12:37:59.496 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T12:37:59.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T12:38:00.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 12, 37, 41), 36.48, 7.92, 0.0, 19.94, 25.62, 0, 0, 0, 2, 0, 0),)
2025-12-31T12:38:00.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 12:37:41
2025-12-31T12:38:00.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T12:38:00.486 [DEBUG] [Thread-127796] [transport.py] [_log()] starting thread (client mode): 0xb6b14160
2025-12-31T12:38:00.486 [DEBUG] [Thread-127796] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:38:00.506 [DEBUG] [Thread-127796] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T12:38:00.507 [INFO] [Thread-127796] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T12:38:00.509 [DEBUG] [Thread-127796] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:38:00.509 [DEBUG] [Thread-127796] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T12:38:00.510 [DEBUG] [Thread-127796] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:38:00.510 [DEBUG] [Thread-127796] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:38:00.510 [DEBUG] [Thread-127796] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:38:00.510 [DEBUG] [Thread-127796] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:38:00.510 [DEBUG] [Thread-127796] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:38:00.510 [DEBUG] [Thread-127796] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:38:00.510 [DEBUG] [Thread-127796] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:38:00.510 [DEBUG] [Thread-127796] [transport.py] [_log()] client lang: <none>
2025-12-31T12:38:00.510 [DEBUG] [Thread-127796] [transport.py] [_log()] server lang: <none>
2025-12-31T12:38:00.510 [DEBUG] [Thread-127796] [transport.py] [_log()] kex follows: False
2025-12-31T12:38:00.510 [DEBUG] [Thread-127796] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:38:00.510 [DEBUG] [Thread-127796] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:38:00.510 [DEBUG] [Thread-127796] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:38:00.510 [DEBUG] [Thread-127796] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:38:00.510 [DEBUG] [Thread-127796] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:38:00.510 [DEBUG] [Thread-127796] [transport.py] [_log()] Compression: none
2025-12-31T12:38:00.510 [DEBUG] [Thread-127796] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:38:00.529 [DEBUG] [Thread-127796] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:38:00.530 [DEBUG] [Thread-127796] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:38:00.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T12:38:00.531 [DEBUG] [Thread-127796] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T12:38:00.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:38:00.533 [DEBUG] [Thread-127796] [transport.py] [_log()] userauth is OK
2025-12-31T12:38:00.533 [DEBUG] [Thread-127796] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:38:00.533 [DEBUG] [Thread-127796] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:38:00.534 [DEBUG] [Thread-127796] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T12:38:00.534 [DEBUG] [Thread-127796] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:38:00.558 [INFO] [Thread-127796] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:38:00.559 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:38:01.138 [DEBUG] [Thread-127796] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:38:01.139 [DEBUG] [Thread-127796] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:38:01.139 [DEBUG] [Thread-127796] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T12:38:01.180 [DEBUG] [Thread-127796] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:38:01.180 [DEBUG] [Thread-127796] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:38:01.185 [DEBUG] [Thread-127796] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:38:01.197 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:38:01.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T12:38:01.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T12:38:01.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T12:38:01.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:38:01.209 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T12:38:01.210 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:38:01.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:38:01.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T12:38:01.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.442851 -999.00  +25.10  24.11     13   -5.00 1 2 1 1 1   888    0 31.10 25.90 ----- 23.1 24.1 307.4 29.5 30.9 -22.3 30.5 -21.0 30.0 -21.2 30.3 -21.3
2025-12-31T12:38:01.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T12:38:01.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T12:38:01.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.442851
2025-12-31T12:38:01.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T12:38:01.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T12:38:01.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T12:38:01.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T12:38:01.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T12:38:01.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T12:37:41', tmtdew=36.48, humidity=7.92, cloud=0.0, wind=19.94, temperature=25.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T10:37:42.326', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T12:38:01.212 [DEBUG] [Thread-127796] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:38:01.295 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T12:38:01.306 [DEBUG] [Thread-127799] [transport.py] [_log()] starting thread (client mode): 0xb6b16b60
2025-12-31T12:38:01.307 [DEBUG] [Thread-127799] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:38:01.320 [DEBUG] [Thread-127799] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T12:38:01.320 [INFO] [Thread-127799] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T12:38:01.328 [DEBUG] [Thread-127799] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:38:01.328 [DEBUG] [Thread-127799] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T12:38:01.328 [DEBUG] [Thread-127799] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:38:01.328 [DEBUG] [Thread-127799] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:38:01.328 [DEBUG] [Thread-127799] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:38:01.328 [DEBUG] [Thread-127799] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:38:01.328 [DEBUG] [Thread-127799] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:38:01.328 [DEBUG] [Thread-127799] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:38:01.328 [DEBUG] [Thread-127799] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:38:01.328 [DEBUG] [Thread-127799] [transport.py] [_log()] client lang: <none>
2025-12-31T12:38:01.328 [DEBUG] [Thread-127799] [transport.py] [_log()] server lang: <none>
2025-12-31T12:38:01.328 [DEBUG] [Thread-127799] [transport.py] [_log()] kex follows: False
2025-12-31T12:38:01.328 [DEBUG] [Thread-127799] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:38:01.328 [DEBUG] [Thread-127799] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:38:01.329 [DEBUG] [Thread-127799] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:38:01.329 [DEBUG] [Thread-127799] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:38:01.329 [DEBUG] [Thread-127799] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:38:01.329 [DEBUG] [Thread-127799] [transport.py] [_log()] Compression: none
2025-12-31T12:38:01.329 [DEBUG] [Thread-127799] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:38:01.386 [DEBUG] [Thread-127799] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:38:01.386 [DEBUG] [Thread-127799] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:38:01.387 [DEBUG] [Thread-127799] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T12:38:01.387 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T12:38:01.388 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:38:01.443 [DEBUG] [Thread-127799] [transport.py] [_log()] userauth is OK
2025-12-31T12:38:01.443 [DEBUG] [Thread-127799] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:38:01.444 [DEBUG] [Thread-127799] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:38:01.444 [DEBUG] [Thread-127799] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T12:38:01.444 [DEBUG] [Thread-127799] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:38:01.463 [INFO] [Thread-127799] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:38:01.463 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T12:38:01.464 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:38:02.330 [DEBUG] [Thread-127799] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:38:02.331 [DEBUG] [Thread-127799] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:38:02.379 [DEBUG] [Thread-127799] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:38:02.379 [DEBUG] [Thread-127799] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:38:02.388 [DEBUG] [Thread-127799] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:38:02.397 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:38:02.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-12-31T12:38: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') -> 00000000
2025-12-31T12:38:02.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:38:02.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:38:02.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:38:02.425 [DEBUG] [Thread-127799] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:38:12.777 [DEBUG] [Thread-127801 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:38:13.160 [DEBUG] [Thread-127802 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:38:28.199 [DEBUG] [Thread-127803 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:38:32.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T12:38:32.448 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T12:38:32.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T12:38:33.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 12, 38, 13), 36.35, 7.95, 0.0, 18.51, 25.33, 0, 0, 0, 2, 0, 0),)
2025-12-31T12:38:33.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 12:38:13
2025-12-31T12:38:33.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T12:38:33.447 [DEBUG] [Thread-127804] [transport.py] [_log()] starting thread (client mode): 0xb6bb1db0
2025-12-31T12:38:33.447 [DEBUG] [Thread-127804] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:38:33.458 [DEBUG] [Thread-127804] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T12:38:33.458 [INFO] [Thread-127804] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T12:38:33.460 [DEBUG] [Thread-127804] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:38:33.460 [DEBUG] [Thread-127804] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T12:38:33.460 [DEBUG] [Thread-127804] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:38:33.460 [DEBUG] [Thread-127804] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:38:33.460 [DEBUG] [Thread-127804] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:38:33.460 [DEBUG] [Thread-127804] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:38:33.460 [DEBUG] [Thread-127804] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:38:33.460 [DEBUG] [Thread-127804] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:38:33.460 [DEBUG] [Thread-127804] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:38:33.460 [DEBUG] [Thread-127804] [transport.py] [_log()] client lang: <none>
2025-12-31T12:38:33.460 [DEBUG] [Thread-127804] [transport.py] [_log()] server lang: <none>
2025-12-31T12:38:33.460 [DEBUG] [Thread-127804] [transport.py] [_log()] kex follows: False
2025-12-31T12:38:33.460 [DEBUG] [Thread-127804] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:38:33.460 [DEBUG] [Thread-127804] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:38:33.460 [DEBUG] [Thread-127804] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:38:33.460 [DEBUG] [Thread-127804] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:38:33.460 [DEBUG] [Thread-127804] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:38:33.460 [DEBUG] [Thread-127804] [transport.py] [_log()] Compression: none
2025-12-31T12:38:33.461 [DEBUG] [Thread-127804] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:38:33.469 [DEBUG] [Thread-127804] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:38:33.469 [DEBUG] [Thread-127804] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:38:33.469 [DEBUG] [Thread-127804] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T12:38:33.469 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T12:38:33.469 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:38:33.470 [DEBUG] [Thread-127804] [transport.py] [_log()] userauth is OK
2025-12-31T12:38:33.470 [DEBUG] [Thread-127804] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:38:33.470 [DEBUG] [Thread-127804] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:38:33.470 [DEBUG] [Thread-127804] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T12:38:33.470 [DEBUG] [Thread-127804] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:38:33.480 [INFO] [Thread-127804] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:38:33.480 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:38:34.070 [DEBUG] [Thread-127804] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:38:34.070 [DEBUG] [Thread-127804] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:38:34.070 [DEBUG] [Thread-127804] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T12:38:34.111 [DEBUG] [Thread-127804] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:38:34.111 [DEBUG] [Thread-127804] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:38:34.114 [DEBUG] [Thread-127804] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:38:34.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:38:34.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T12:38:34.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T12:38:34.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T12:38:34.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:38:34.136 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T12:38:34.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:38:34.136 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:38:34.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T12:38:34.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.443198 -999.00  +25.20  20.53     13   -4.40 1 2 1 1 1   888    0 30.65 18.46 ----- 18.1 20.5 307.6 29.4 30.8 -22.5 30.4 -20.9 29.9 -20.4 30.2 -21.6
2025-12-31T12:38:34.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T12:38:34.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T12:38:34.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.443198
2025-12-31T12:38:34.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T12:38:34.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T12:38:34.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T12:38:34.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T12:38:34.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T12:38:34.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T12:38:13', tmtdew=36.35, humidity=7.95, cloud=0.0, wind=18.51, temperature=25.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T10:38:12.307', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T12:38:34.139 [DEBUG] [Thread-127804] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:38:34.224 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T12:38:34.236 [DEBUG] [Thread-127807] [transport.py] [_log()] starting thread (client mode): 0xb6bb39a0
2025-12-31T12:38:34.236 [DEBUG] [Thread-127807] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:38:34.251 [DEBUG] [Thread-127807] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T12:38:34.251 [INFO] [Thread-127807] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T12:38:34.259 [DEBUG] [Thread-127807] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:38:34.259 [DEBUG] [Thread-127807] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T12:38:34.259 [DEBUG] [Thread-127807] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:38:34.259 [DEBUG] [Thread-127807] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:38:34.259 [DEBUG] [Thread-127807] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:38:34.259 [DEBUG] [Thread-127807] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:38:34.259 [DEBUG] [Thread-127807] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:38:34.260 [DEBUG] [Thread-127807] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:38:34.260 [DEBUG] [Thread-127807] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:38:34.260 [DEBUG] [Thread-127807] [transport.py] [_log()] client lang: <none>
2025-12-31T12:38:34.260 [DEBUG] [Thread-127807] [transport.py] [_log()] server lang: <none>
2025-12-31T12:38:34.260 [DEBUG] [Thread-127807] [transport.py] [_log()] kex follows: False
2025-12-31T12:38:34.260 [DEBUG] [Thread-127807] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:38:34.260 [DEBUG] [Thread-127807] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:38:34.260 [DEBUG] [Thread-127807] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:38:34.260 [DEBUG] [Thread-127807] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:38:34.261 [DEBUG] [Thread-127807] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:38:34.261 [DEBUG] [Thread-127807] [transport.py] [_log()] Compression: none
2025-12-31T12:38:34.261 [DEBUG] [Thread-127807] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:38:34.323 [DEBUG] [Thread-127807] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:38:34.324 [DEBUG] [Thread-127807] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:38:34.324 [DEBUG] [Thread-127807] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T12:38:34.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T12:38:34.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:38:34.382 [DEBUG] [Thread-127807] [transport.py] [_log()] userauth is OK
2025-12-31T12:38:34.382 [DEBUG] [Thread-127807] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:38:34.382 [DEBUG] [Thread-127807] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:38:34.382 [DEBUG] [Thread-127807] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T12:38:34.383 [DEBUG] [Thread-127807] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:38:34.402 [INFO] [Thread-127807] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:38:34.402 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T12:38:34.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:38:35.207 [DEBUG] [Thread-127807] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:38:35.207 [DEBUG] [Thread-127807] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:38:35.255 [DEBUG] [Thread-127807] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:38:35.255 [DEBUG] [Thread-127807] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:38:35.264 [DEBUG] [Thread-127807] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:38:35.272 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:38:35.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T12:38:35.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T12:38:35.289 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:38:35.289 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:38:35.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:38:35.297 [DEBUG] [Thread-127807] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:38:43.231 [DEBUG] [Thread-127809 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:38:43.660 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:38:43.661 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:38:58.284 [DEBUG] [Thread-127810 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:39:05.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T12:39:05.320 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T12:39:05.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-12-31T12:39:06.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 12, 38, 45), 35.86, 8.59, 0.0, 23.11, 25.24, 0, 0, 0, 2, 0, 0),)
2025-12-31T12:39:06.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 12:38:45
2025-12-31T12:39:06.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T12:39:06.370 [DEBUG] [Thread-127811] [transport.py] [_log()] starting thread (client mode): 0xb6b16b00
2025-12-31T12:39:06.370 [DEBUG] [Thread-127811] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:39:06.391 [DEBUG] [Thread-127811] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T12:39:06.391 [INFO] [Thread-127811] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T12:39:06.393 [DEBUG] [Thread-127811] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:39:06.393 [DEBUG] [Thread-127811] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T12:39:06.393 [DEBUG] [Thread-127811] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:39:06.393 [DEBUG] [Thread-127811] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:39:06.393 [DEBUG] [Thread-127811] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:39:06.393 [DEBUG] [Thread-127811] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:39:06.393 [DEBUG] [Thread-127811] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:39:06.393 [DEBUG] [Thread-127811] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:39:06.393 [DEBUG] [Thread-127811] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:39:06.393 [DEBUG] [Thread-127811] [transport.py] [_log()] client lang: <none>
2025-12-31T12:39:06.393 [DEBUG] [Thread-127811] [transport.py] [_log()] server lang: <none>
2025-12-31T12:39:06.393 [DEBUG] [Thread-127811] [transport.py] [_log()] kex follows: False
2025-12-31T12:39:06.393 [DEBUG] [Thread-127811] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:39:06.393 [DEBUG] [Thread-127811] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:39:06.393 [DEBUG] [Thread-127811] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:39:06.393 [DEBUG] [Thread-127811] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:39:06.393 [DEBUG] [Thread-127811] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:39:06.393 [DEBUG] [Thread-127811] [transport.py] [_log()] Compression: none
2025-12-31T12:39:06.393 [DEBUG] [Thread-127811] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:39:06.405 [DEBUG] [Thread-127811] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:39:06.406 [DEBUG] [Thread-127811] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:39:06.406 [DEBUG] [Thread-127811] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T12:39:06.406 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T12:39:06.406 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:39:06.407 [DEBUG] [Thread-127811] [transport.py] [_log()] userauth is OK
2025-12-31T12:39:06.407 [DEBUG] [Thread-127811] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:39:06.407 [DEBUG] [Thread-127811] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:39:06.407 [DEBUG] [Thread-127811] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T12:39:06.407 [DEBUG] [Thread-127811] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:39:06.416 [INFO] [Thread-127811] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:39:06.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:39:07.028 [DEBUG] [Thread-127811] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:39:07.028 [DEBUG] [Thread-127811] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:39:07.029 [DEBUG] [Thread-127811] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T12:39:07.069 [DEBUG] [Thread-127811] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:39:07.069 [DEBUG] [Thread-127811] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:39:07.071 [DEBUG] [Thread-127811] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:39:07.085 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:39:07.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T12:39:07.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T12:39:07.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T12:39:07.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:39:07.092 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T12:39:07.092 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:39:07.092 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:39:07.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T12:39:07.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.443198 -999.00  +25.20  20.53     13   -4.40 1 2 1 1 1   888    0 30.65 18.46 ----- 18.1 20.5 307.6 29.4 30.8 -22.5 30.4 -20.9 29.9 -20.4 30.2 -21.6
2025-12-31T12:39:07.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T12:39:07.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T12:39:07.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.443198
2025-12-31T12:39:07.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T12:39:07.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T12:39:07.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T12:39:07.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T12:39:07.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T12:39:07.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T12:38:45', tmtdew=35.86, humidity=8.59, cloud=0.0, wind=23.11, temperature=25.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T10:38:12.307', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T12:39:07.093 [DEBUG] [Thread-127811] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:39:07.166 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T12:39:07.178 [DEBUG] [Thread-127814] [transport.py] [_log()] starting thread (client mode): 0xb6b28520
2025-12-31T12:39:07.178 [DEBUG] [Thread-127814] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:39:07.192 [DEBUG] [Thread-127814] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T12:39:07.192 [INFO] [Thread-127814] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T12:39:07.200 [DEBUG] [Thread-127814] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:39:07.200 [DEBUG] [Thread-127814] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T12:39:07.200 [DEBUG] [Thread-127814] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:39:07.200 [DEBUG] [Thread-127814] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:39:07.200 [DEBUG] [Thread-127814] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:39:07.200 [DEBUG] [Thread-127814] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:39:07.200 [DEBUG] [Thread-127814] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:39:07.200 [DEBUG] [Thread-127814] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:39:07.200 [DEBUG] [Thread-127814] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:39:07.200 [DEBUG] [Thread-127814] [transport.py] [_log()] client lang: <none>
2025-12-31T12:39:07.200 [DEBUG] [Thread-127814] [transport.py] [_log()] server lang: <none>
2025-12-31T12:39:07.200 [DEBUG] [Thread-127814] [transport.py] [_log()] kex follows: False
2025-12-31T12:39:07.200 [DEBUG] [Thread-127814] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:39:07.200 [DEBUG] [Thread-127814] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:39:07.200 [DEBUG] [Thread-127814] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:39:07.200 [DEBUG] [Thread-127814] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:39:07.200 [DEBUG] [Thread-127814] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:39:07.200 [DEBUG] [Thread-127814] [transport.py] [_log()] Compression: none
2025-12-31T12:39:07.200 [DEBUG] [Thread-127814] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:39:07.256 [DEBUG] [Thread-127814] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:39:07.256 [DEBUG] [Thread-127814] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:39:07.256 [DEBUG] [Thread-127814] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T12:39:07.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T12:39:07.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:39:07.315 [DEBUG] [Thread-127814] [transport.py] [_log()] userauth is OK
2025-12-31T12:39:07.315 [DEBUG] [Thread-127814] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:39:07.315 [DEBUG] [Thread-127814] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:39:07.315 [DEBUG] [Thread-127814] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T12:39:07.315 [DEBUG] [Thread-127814] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:39:07.329 [INFO] [Thread-127814] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:39:07.329 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T12:39:07.329 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:39:08.151 [DEBUG] [Thread-127814] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:39:08.151 [DEBUG] [Thread-127814] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:39:08.199 [DEBUG] [Thread-127814] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:39:08.199 [DEBUG] [Thread-127814] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:39:08.208 [DEBUG] [Thread-127814] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:39:08.216 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:39: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')
2025-12-31T12:39:08.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T12:39:08.232 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:39:08.232 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:39:08.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:39:08.240 [DEBUG] [Thread-127814] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:39:12.835 [DEBUG] [Thread-127816 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:39:13.317 [DEBUG] [Thread-127817 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:39:28.371 [DEBUG] [Thread-127818 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:39:38.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T12:39:38.262 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T12:39:38.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T12:39:38.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 12, 39, 17), 35.87, 8.59, 0.0, 19.02, 25.28, 0, 0, 0, 2, 0, 0),)
2025-12-31T12:39:38.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 12:39:17
2025-12-31T12:39:39.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T12:39:39.248 [DEBUG] [Thread-127819] [transport.py] [_log()] starting thread (client mode): 0xb9547af0
2025-12-31T12:39:39.248 [DEBUG] [Thread-127819] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:39:39.270 [DEBUG] [Thread-127819] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T12:39:39.270 [INFO] [Thread-127819] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T12:39:39.274 [DEBUG] [Thread-127819] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:39:39.274 [DEBUG] [Thread-127819] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T12:39:39.274 [DEBUG] [Thread-127819] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:39:39.274 [DEBUG] [Thread-127819] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:39:39.274 [DEBUG] [Thread-127819] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:39:39.274 [DEBUG] [Thread-127819] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:39:39.274 [DEBUG] [Thread-127819] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:39:39.274 [DEBUG] [Thread-127819] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:39:39.274 [DEBUG] [Thread-127819] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:39:39.274 [DEBUG] [Thread-127819] [transport.py] [_log()] client lang: <none>
2025-12-31T12:39:39.274 [DEBUG] [Thread-127819] [transport.py] [_log()] server lang: <none>
2025-12-31T12:39:39.274 [DEBUG] [Thread-127819] [transport.py] [_log()] kex follows: False
2025-12-31T12:39:39.274 [DEBUG] [Thread-127819] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:39:39.274 [DEBUG] [Thread-127819] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:39:39.274 [DEBUG] [Thread-127819] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:39:39.274 [DEBUG] [Thread-127819] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:39:39.274 [DEBUG] [Thread-127819] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:39:39.274 [DEBUG] [Thread-127819] [transport.py] [_log()] Compression: none
2025-12-31T12:39:39.275 [DEBUG] [Thread-127819] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:39:39.290 [DEBUG] [Thread-127819] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:39:39.290 [DEBUG] [Thread-127819] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:39:39.290 [DEBUG] [Thread-127819] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T12:39:39.290 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T12:39:39.290 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:39:39.291 [DEBUG] [Thread-127819] [transport.py] [_log()] userauth is OK
2025-12-31T12:39:39.291 [DEBUG] [Thread-127819] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:39:39.291 [DEBUG] [Thread-127819] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:39:39.291 [DEBUG] [Thread-127819] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T12:39:39.291 [DEBUG] [Thread-127819] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:39:39.307 [INFO] [Thread-127819] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:39:39.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:39:39.976 [DEBUG] [Thread-127819] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:39:39.976 [DEBUG] [Thread-127819] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:39:39.977 [DEBUG] [Thread-127819] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T12:39:40.017 [DEBUG] [Thread-127819] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:39:40.017 [DEBUG] [Thread-127819] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:39:40.019 [DEBUG] [Thread-127819] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:39:40.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:39:40.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T12:39:40.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T12:39:40.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T12:39:40.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:39:40.036 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T12:39:40.036 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:39:40.036 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:39:40.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T12:39:40.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.443546 -999.00  +25.30  14.64     13   -4.10 1 2 1 1 1   888    0 30.64 8.49 ----- 17.1 14.6 301.3 24.3 30.7 -23.0 30.4 -21.3 29.9 -21.1 30.2 -21.8
2025-12-31T12:39:40.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T12:39:40.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T12:39:40.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.443546
2025-12-31T12:39:40.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T12:39:40.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T12:39:40.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T12:39:40.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T12:39:40.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T12:39:40.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T12:39:17', tmtdew=35.87, humidity=8.59, cloud=0.0, wind=19.02, temperature=25.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T10:38:42.374', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T12:39:40.038 [DEBUG] [Thread-127819] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:39:40.118 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T12:39:40.130 [DEBUG] [Thread-127822] [transport.py] [_log()] starting thread (client mode): 0xb6b22f80
2025-12-31T12:39:40.130 [DEBUG] [Thread-127822] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:39:40.145 [DEBUG] [Thread-127822] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T12:39:40.145 [INFO] [Thread-127822] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T12:39:40.153 [DEBUG] [Thread-127822] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:39:40.153 [DEBUG] [Thread-127822] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T12:39:40.153 [DEBUG] [Thread-127822] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:39:40.153 [DEBUG] [Thread-127822] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:39:40.153 [DEBUG] [Thread-127822] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:39:40.153 [DEBUG] [Thread-127822] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:39:40.153 [DEBUG] [Thread-127822] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:39:40.153 [DEBUG] [Thread-127822] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:39:40.153 [DEBUG] [Thread-127822] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:39:40.153 [DEBUG] [Thread-127822] [transport.py] [_log()] client lang: <none>
2025-12-31T12:39:40.153 [DEBUG] [Thread-127822] [transport.py] [_log()] server lang: <none>
2025-12-31T12:39:40.153 [DEBUG] [Thread-127822] [transport.py] [_log()] kex follows: False
2025-12-31T12:39:40.153 [DEBUG] [Thread-127822] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:39:40.153 [DEBUG] [Thread-127822] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:39:40.153 [DEBUG] [Thread-127822] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:39:40.153 [DEBUG] [Thread-127822] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:39:40.154 [DEBUG] [Thread-127822] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:39:40.154 [DEBUG] [Thread-127822] [transport.py] [_log()] Compression: none
2025-12-31T12:39:40.154 [DEBUG] [Thread-127822] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:39:40.209 [DEBUG] [Thread-127822] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:39:40.210 [DEBUG] [Thread-127822] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:39:40.211 [DEBUG] [Thread-127822] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T12:39:40.211 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T12:39:40.212 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:39:40.270 [DEBUG] [Thread-127822] [transport.py] [_log()] userauth is OK
2025-12-31T12:39:40.270 [DEBUG] [Thread-127822] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:39:40.270 [DEBUG] [Thread-127822] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:39:40.270 [DEBUG] [Thread-127822] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T12:39:40.270 [DEBUG] [Thread-127822] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:39:40.295 [INFO] [Thread-127822] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:39:40.295 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T12:39:40.296 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:39:41.126 [DEBUG] [Thread-127822] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:39:41.126 [DEBUG] [Thread-127822] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:39:41.175 [DEBUG] [Thread-127822] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:39:41.175 [DEBUG] [Thread-127822] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:39:41.184 [DEBUG] [Thread-127822] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:39:41.193 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:39:41.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T12:39:41.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T12:39:41.212 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:39:41.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:39:41.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:39:41.221 [DEBUG] [Thread-127822] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:39:43.409 [DEBUG] [Thread-127824 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:39:43.807 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:39:43.808 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:39:58.456 [DEBUG] [Thread-127825 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:40:11.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T12:40:11.244 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T12:40:11.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T12:40:11.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 12, 39, 49), 35.45, 8.74, 0.0, 13.76, 25.19, 0, 0, 0, 2, 0, 0),)
2025-12-31T12:40:11.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 12:39:49
2025-12-31T12:40:12.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T12:40:12.231 [DEBUG] [Thread-127826] [transport.py] [_log()] starting thread (client mode): 0xb95447f0
2025-12-31T12:40:12.231 [DEBUG] [Thread-127826] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:40:12.252 [DEBUG] [Thread-127826] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T12:40:12.252 [INFO] [Thread-127826] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T12:40:12.255 [DEBUG] [Thread-127826] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:40:12.255 [DEBUG] [Thread-127826] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T12:40:12.255 [DEBUG] [Thread-127826] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:40:12.255 [DEBUG] [Thread-127826] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:40:12.255 [DEBUG] [Thread-127826] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:40:12.255 [DEBUG] [Thread-127826] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:40:12.255 [DEBUG] [Thread-127826] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:40:12.255 [DEBUG] [Thread-127826] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:40:12.255 [DEBUG] [Thread-127826] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:40:12.255 [DEBUG] [Thread-127826] [transport.py] [_log()] client lang: <none>
2025-12-31T12:40:12.255 [DEBUG] [Thread-127826] [transport.py] [_log()] server lang: <none>
2025-12-31T12:40:12.255 [DEBUG] [Thread-127826] [transport.py] [_log()] kex follows: False
2025-12-31T12:40:12.255 [DEBUG] [Thread-127826] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:40:12.255 [DEBUG] [Thread-127826] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:40:12.255 [DEBUG] [Thread-127826] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:40:12.255 [DEBUG] [Thread-127826] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:40:12.255 [DEBUG] [Thread-127826] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:40:12.255 [DEBUG] [Thread-127826] [transport.py] [_log()] Compression: none
2025-12-31T12:40:12.255 [DEBUG] [Thread-127826] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:40:12.272 [DEBUG] [Thread-127826] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:40:12.273 [DEBUG] [Thread-127826] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:40:12.273 [DEBUG] [Thread-127826] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T12:40:12.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T12:40:12.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:40:12.275 [DEBUG] [Thread-127826] [transport.py] [_log()] userauth is OK
2025-12-31T12:40:12.276 [DEBUG] [Thread-127826] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:40:12.276 [DEBUG] [Thread-127826] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:40:12.276 [DEBUG] [Thread-127826] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T12:40:12.276 [DEBUG] [Thread-127826] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:40:12.300 [INFO] [Thread-127826] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:40:12.301 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:40:12.908 [DEBUG] [Thread-127828 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:40:13.496 [DEBUG] [Thread-127829 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:40:20.343 [DEBUG] [Thread-127826] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:40:20.344 [DEBUG] [Thread-127826] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:40:20.344 [DEBUG] [Thread-127826] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T12:40:20.385 [DEBUG] [Thread-127826] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:40:20.385 [DEBUG] [Thread-127826] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:40:20.388 [DEBUG] [Thread-127826] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:40:20.474 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:40:20.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T12:40:20.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T12:40:20.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T12:40:20.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:40:20.537 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T12:40:20.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:40:20.537 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:40:20.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T12:40:20.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.443893 -999.00  +25.00  16.43     14   -4.20 1 2 1 1 1   888    0 29.61 0.02 ----- 14.7 16.4 308.8 21.4 30.7 -21.3 30.4 -20.9 29.8 -20.2 30.2 -20.5
2025-12-31T12:40:20.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T12:40:20.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T12:40:20.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.443893
2025-12-31T12:40:20.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T12:40:20.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T12:40:20.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T12:40:20.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T12:40:20.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T12:40:20.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T12:39:49', tmtdew=35.45, humidity=8.74, cloud=0.0, wind=13.76, temperature=25.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T10:39:12.355', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T12:40:20.540 [DEBUG] [Thread-127826] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:40:20.627 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T12:40:20.640 [DEBUG] [Thread-127831] [transport.py] [_log()] starting thread (client mode): 0xb9546680
2025-12-31T12:40:20.640 [DEBUG] [Thread-127831] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:40:20.654 [DEBUG] [Thread-127831] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T12:40:20.654 [INFO] [Thread-127831] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T12:40:20.662 [DEBUG] [Thread-127831] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:40:20.662 [DEBUG] [Thread-127831] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T12:40:20.662 [DEBUG] [Thread-127831] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:40:20.662 [DEBUG] [Thread-127831] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:40:20.662 [DEBUG] [Thread-127831] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:40:20.662 [DEBUG] [Thread-127831] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:40:20.662 [DEBUG] [Thread-127831] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:40:20.662 [DEBUG] [Thread-127831] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:40:20.662 [DEBUG] [Thread-127831] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:40:20.662 [DEBUG] [Thread-127831] [transport.py] [_log()] client lang: <none>
2025-12-31T12:40:20.662 [DEBUG] [Thread-127831] [transport.py] [_log()] server lang: <none>
2025-12-31T12:40:20.663 [DEBUG] [Thread-127831] [transport.py] [_log()] kex follows: False
2025-12-31T12:40:20.663 [DEBUG] [Thread-127831] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:40:20.663 [DEBUG] [Thread-127831] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:40:20.663 [DEBUG] [Thread-127831] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:40:20.663 [DEBUG] [Thread-127831] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:40:20.663 [DEBUG] [Thread-127831] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:40:20.663 [DEBUG] [Thread-127831] [transport.py] [_log()] Compression: none
2025-12-31T12:40:20.663 [DEBUG] [Thread-127831] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:40:20.720 [DEBUG] [Thread-127831] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:40:20.721 [DEBUG] [Thread-127831] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:40:20.722 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T12:40:20.722 [DEBUG] [Thread-127831] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T12:40:20.723 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:40:20.777 [DEBUG] [Thread-127831] [transport.py] [_log()] userauth is OK
2025-12-31T12:40:20.777 [DEBUG] [Thread-127831] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:40:20.777 [DEBUG] [Thread-127831] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:40:20.778 [DEBUG] [Thread-127831] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T12:40:20.778 [DEBUG] [Thread-127831] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:40:20.796 [INFO] [Thread-127831] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:40:20.797 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T12:40:20.797 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:40:21.628 [DEBUG] [Thread-127831] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:40:21.629 [DEBUG] [Thread-127831] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:40:21.676 [DEBUG] [Thread-127831] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:40:21.677 [DEBUG] [Thread-127831] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:40:21.685 [DEBUG] [Thread-127831] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:40:21.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:40:21.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T12:40:21.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T12:40:21.709 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:40:21.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:40:21.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:40:21.717 [DEBUG] [Thread-127831] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:40:28.527 [DEBUG] [Thread-127833 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:40:43.570 [DEBUG] [Thread-127834 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:40:43.949 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:40:43.950 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:40:51.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T12:40:51.740 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T12:40:51.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T12:40:52.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 12, 40, 21), 35.45, 8.74, 0.0, 13.76, 25.19, 0, 0, 0, 2, 0, 0),)
2025-12-31T12:40:52.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 12:40:21
2025-12-31T12:40:52.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T12:40:52.720 [DEBUG] [Thread-127835] [transport.py] [_log()] starting thread (client mode): 0xb6bb11b0
2025-12-31T12:40:52.720 [DEBUG] [Thread-127835] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:40:52.739 [DEBUG] [Thread-127835] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T12:40:52.739 [INFO] [Thread-127835] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T12:40:52.742 [DEBUG] [Thread-127835] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:40:52.742 [DEBUG] [Thread-127835] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T12:40:52.742 [DEBUG] [Thread-127835] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:40:52.742 [DEBUG] [Thread-127835] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:40:52.742 [DEBUG] [Thread-127835] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:40:52.742 [DEBUG] [Thread-127835] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:40:52.742 [DEBUG] [Thread-127835] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:40:52.742 [DEBUG] [Thread-127835] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:40:52.742 [DEBUG] [Thread-127835] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:40:52.742 [DEBUG] [Thread-127835] [transport.py] [_log()] client lang: <none>
2025-12-31T12:40:52.742 [DEBUG] [Thread-127835] [transport.py] [_log()] server lang: <none>
2025-12-31T12:40:52.742 [DEBUG] [Thread-127835] [transport.py] [_log()] kex follows: False
2025-12-31T12:40:52.742 [DEBUG] [Thread-127835] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:40:52.742 [DEBUG] [Thread-127835] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:40:52.742 [DEBUG] [Thread-127835] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:40:52.742 [DEBUG] [Thread-127835] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:40:52.742 [DEBUG] [Thread-127835] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:40:52.742 [DEBUG] [Thread-127835] [transport.py] [_log()] Compression: none
2025-12-31T12:40:52.743 [DEBUG] [Thread-127835] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:40:52.759 [DEBUG] [Thread-127835] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:40:52.759 [DEBUG] [Thread-127835] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:40:52.760 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T12:40:52.760 [DEBUG] [Thread-127835] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T12:40:52.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:40:52.762 [DEBUG] [Thread-127835] [transport.py] [_log()] userauth is OK
2025-12-31T12:40:52.762 [DEBUG] [Thread-127835] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:40:52.762 [DEBUG] [Thread-127835] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:40:52.762 [DEBUG] [Thread-127835] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T12:40:52.762 [DEBUG] [Thread-127835] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:40:52.780 [INFO] [Thread-127835] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:40:52.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:40:53.403 [DEBUG] [Thread-127835] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:40:53.403 [DEBUG] [Thread-127835] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:40:53.403 [DEBUG] [Thread-127835] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T12:40:53.445 [DEBUG] [Thread-127835] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:40:53.445 [DEBUG] [Thread-127835] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:40:53.447 [DEBUG] [Thread-127835] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:40:53.459 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:40:53.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T12:40:53.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T12:40:53.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T12:40:53.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:40:53.468 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T12:40:53.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:40:53.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:40:53.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T12:40:53.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.444587 -999.00  +24.90  11.49     14   -4.20 1 2 1 1 1   888    0 29.50 -17.56 ----- 11.5 11.5 281.8 13.5 31.1 -20.0 30.6 -19.6 30.1 -18.2 30.5 -18.9
2025-12-31T12:40:53.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T12:40:53.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T12:40:53.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.444587
2025-12-31T12:40:53.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T12:40:53.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T12:40:53.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T12:40:53.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T12:40:53.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T12:40:53.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T12:40:21', tmtdew=35.45, humidity=8.74, cloud=0.0, wind=13.76, temperature=25.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T10:40:12.317', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T12:40:53.469 [DEBUG] [Thread-127835] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:40:53.547 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T12:40:53.558 [DEBUG] [Thread-127838] [transport.py] [_log()] starting thread (client mode): 0xb6b17250
2025-12-31T12:40:53.558 [DEBUG] [Thread-127838] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:40:53.573 [DEBUG] [Thread-127838] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T12:40:53.573 [INFO] [Thread-127838] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T12:40:53.581 [DEBUG] [Thread-127838] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:40:53.581 [DEBUG] [Thread-127838] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T12:40:53.581 [DEBUG] [Thread-127838] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:40:53.581 [DEBUG] [Thread-127838] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:40:53.581 [DEBUG] [Thread-127838] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:40:53.581 [DEBUG] [Thread-127838] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:40:53.581 [DEBUG] [Thread-127838] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:40:53.581 [DEBUG] [Thread-127838] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:40:53.581 [DEBUG] [Thread-127838] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:40:53.581 [DEBUG] [Thread-127838] [transport.py] [_log()] client lang: <none>
2025-12-31T12:40:53.581 [DEBUG] [Thread-127838] [transport.py] [_log()] server lang: <none>
2025-12-31T12:40:53.581 [DEBUG] [Thread-127838] [transport.py] [_log()] kex follows: False
2025-12-31T12:40:53.581 [DEBUG] [Thread-127838] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:40:53.581 [DEBUG] [Thread-127838] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:40:53.581 [DEBUG] [Thread-127838] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:40:53.581 [DEBUG] [Thread-127838] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:40:53.581 [DEBUG] [Thread-127838] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:40:53.582 [DEBUG] [Thread-127838] [transport.py] [_log()] Compression: none
2025-12-31T12:40:53.582 [DEBUG] [Thread-127838] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:40:53.639 [DEBUG] [Thread-127838] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:40:53.639 [DEBUG] [Thread-127838] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:40:53.639 [DEBUG] [Thread-127838] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T12:40:53.639 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T12:40:53.639 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:40:53.696 [DEBUG] [Thread-127838] [transport.py] [_log()] userauth is OK
2025-12-31T12:40:53.696 [DEBUG] [Thread-127838] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:40:53.696 [DEBUG] [Thread-127838] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:40:53.696 [DEBUG] [Thread-127838] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T12:40:53.696 [DEBUG] [Thread-127838] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:40:53.710 [INFO] [Thread-127838] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:40:53.711 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T12:40:53.711 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:40:54.514 [DEBUG] [Thread-127838] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:40:54.514 [DEBUG] [Thread-127838] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:40:54.561 [DEBUG] [Thread-127838] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:40:54.562 [DEBUG] [Thread-127838] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:40:54.570 [DEBUG] [Thread-127838] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:40:54.578 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:40:54.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T12:40:54.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T12:40:54.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:40:54.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:40:54.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:40:54.602 [DEBUG] [Thread-127838] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:40:58.610 [DEBUG] [Thread-127840 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:41:12.964 [DEBUG] [Thread-127841 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:41:13.670 [DEBUG] [Thread-127842 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:41:24.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T12:41:24.613 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T12:41:24.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T12:41:25.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 12, 40, 53), 35.37, 8.7, 0.0, 16.16, 25.37, 0, 0, 0, 2, 0, 0),)
2025-12-31T12:41:25.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 12:40:53
2025-12-31T12:41:25.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T12:41:25.599 [DEBUG] [Thread-127843] [transport.py] [_log()] starting thread (client mode): 0xb6b16ce0
2025-12-31T12:41:25.599 [DEBUG] [Thread-127843] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:41:25.616 [DEBUG] [Thread-127843] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T12:41:25.616 [INFO] [Thread-127843] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T12:41:25.619 [DEBUG] [Thread-127843] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:41:25.620 [DEBUG] [Thread-127843] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T12:41:25.620 [DEBUG] [Thread-127843] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:41:25.620 [DEBUG] [Thread-127843] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:41:25.620 [DEBUG] [Thread-127843] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:41:25.620 [DEBUG] [Thread-127843] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:41:25.620 [DEBUG] [Thread-127843] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:41:25.620 [DEBUG] [Thread-127843] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:41:25.620 [DEBUG] [Thread-127843] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:41:25.620 [DEBUG] [Thread-127843] [transport.py] [_log()] client lang: <none>
2025-12-31T12:41:25.620 [DEBUG] [Thread-127843] [transport.py] [_log()] server lang: <none>
2025-12-31T12:41:25.620 [DEBUG] [Thread-127843] [transport.py] [_log()] kex follows: False
2025-12-31T12:41:25.620 [DEBUG] [Thread-127843] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:41:25.620 [DEBUG] [Thread-127843] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:41:25.620 [DEBUG] [Thread-127843] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:41:25.620 [DEBUG] [Thread-127843] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:41:25.620 [DEBUG] [Thread-127843] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:41:25.620 [DEBUG] [Thread-127843] [transport.py] [_log()] Compression: none
2025-12-31T12:41:25.620 [DEBUG] [Thread-127843] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:41:25.636 [DEBUG] [Thread-127843] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:41:25.636 [DEBUG] [Thread-127843] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:41:25.636 [DEBUG] [Thread-127843] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T12:41:25.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T12:41:25.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:41:25.637 [DEBUG] [Thread-127843] [transport.py] [_log()] userauth is OK
2025-12-31T12:41:25.637 [DEBUG] [Thread-127843] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:41:25.637 [DEBUG] [Thread-127843] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:41:25.637 [DEBUG] [Thread-127843] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T12:41:25.637 [DEBUG] [Thread-127843] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:41:25.653 [INFO] [Thread-127843] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:41:25.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:41:26.478 [DEBUG] [Thread-127843] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:41:26.478 [DEBUG] [Thread-127843] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:41:26.478 [DEBUG] [Thread-127843] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T12:41:26.518 [DEBUG] [Thread-127843] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:41:26.519 [DEBUG] [Thread-127843] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:41:26.521 [DEBUG] [Thread-127843] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:41:26.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:41:26.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T12:41:26.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T12:41:26.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T12:41:26.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:41:26.536 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T12:41:26.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:41:26.536 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:41:26.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T12:41:26.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.444935 -999.00  +24.90  19.59     14   -4.00 1 2 1 1 1   888    0 29.83 -27.52 ----- 22.8 19.6 314.9 25.7 31.0 -20.2 30.7 -19.4 30.0 -18.4 30.6 -18.8
2025-12-31T12:41:26.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T12:41:26.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T12:41:26.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.444935
2025-12-31T12:41:26.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T12:41:26.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T12:41:26.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T12:41:26.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T12:41:26.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T12:41:26.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T12:40:53', tmtdew=35.37, humidity=8.7, cloud=0.0, wind=16.16, temperature=25.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T10:40:42.384', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T12:41:26.538 [DEBUG] [Thread-127843] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:41:26.612 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T12:41:26.623 [DEBUG] [Thread-127846] [transport.py] [_log()] starting thread (client mode): 0xb6bb36a0
2025-12-31T12:41:26.623 [DEBUG] [Thread-127846] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:41:26.638 [DEBUG] [Thread-127846] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T12:41:26.638 [INFO] [Thread-127846] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T12:41:26.645 [DEBUG] [Thread-127846] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:41:26.646 [DEBUG] [Thread-127846] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T12:41:26.646 [DEBUG] [Thread-127846] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:41:26.646 [DEBUG] [Thread-127846] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:41:26.646 [DEBUG] [Thread-127846] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:41:26.646 [DEBUG] [Thread-127846] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:41:26.646 [DEBUG] [Thread-127846] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:41:26.646 [DEBUG] [Thread-127846] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:41:26.646 [DEBUG] [Thread-127846] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:41:26.646 [DEBUG] [Thread-127846] [transport.py] [_log()] client lang: <none>
2025-12-31T12:41:26.646 [DEBUG] [Thread-127846] [transport.py] [_log()] server lang: <none>
2025-12-31T12:41:26.646 [DEBUG] [Thread-127846] [transport.py] [_log()] kex follows: False
2025-12-31T12:41:26.646 [DEBUG] [Thread-127846] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:41:26.646 [DEBUG] [Thread-127846] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:41:26.646 [DEBUG] [Thread-127846] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:41:26.646 [DEBUG] [Thread-127846] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:41:26.646 [DEBUG] [Thread-127846] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:41:26.646 [DEBUG] [Thread-127846] [transport.py] [_log()] Compression: none
2025-12-31T12:41:26.646 [DEBUG] [Thread-127846] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:41:26.706 [DEBUG] [Thread-127846] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:41:26.707 [DEBUG] [Thread-127846] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:41:26.707 [DEBUG] [Thread-127846] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T12:41:26.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T12:41:26.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:41:26.763 [DEBUG] [Thread-127846] [transport.py] [_log()] userauth is OK
2025-12-31T12:41:26.763 [DEBUG] [Thread-127846] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:41:26.763 [DEBUG] [Thread-127846] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:41:26.763 [DEBUG] [Thread-127846] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T12:41:26.763 [DEBUG] [Thread-127846] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:41:26.780 [INFO] [Thread-127846] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:41:26.780 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T12:41:26.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:41:27.626 [DEBUG] [Thread-127846] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:41:27.626 [DEBUG] [Thread-127846] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:41:27.673 [DEBUG] [Thread-127846] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:41:27.674 [DEBUG] [Thread-127846] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:41:27.682 [DEBUG] [Thread-127846] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:41:27.691 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:41:27.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T12:41:27.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-12-31T12:41:27.708 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:41:27.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:41:27.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:41:27.719 [DEBUG] [Thread-127846] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:41:28.703 [DEBUG] [Thread-127848 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:41:43.746 [DEBUG] [Thread-127849 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:41:44.091 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:41:44.091 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:41:57.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T12:41:57.739 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T12:41:57.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T12:41:58.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 12, 41, 25), 35.31, 8.75, 0.0, 13.8, 25.42, 0, 0, 0, 2, 0, 0),)
2025-12-31T12:41:58.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 12:41:25
2025-12-31T12:41:58.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T12:41:58.778 [DEBUG] [Thread-127850 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:41:58.809 [DEBUG] [Thread-127851] [transport.py] [_log()] starting thread (client mode): 0xb6b178e0
2025-12-31T12:41:58.809 [DEBUG] [Thread-127851] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:41:58.830 [DEBUG] [Thread-127851] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T12:41:58.830 [INFO] [Thread-127851] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T12:41:58.833 [DEBUG] [Thread-127851] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:41:58.833 [DEBUG] [Thread-127851] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T12:41:58.833 [DEBUG] [Thread-127851] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:41:58.833 [DEBUG] [Thread-127851] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:41:58.833 [DEBUG] [Thread-127851] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:41:58.833 [DEBUG] [Thread-127851] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:41:58.833 [DEBUG] [Thread-127851] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:41:58.833 [DEBUG] [Thread-127851] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:41:58.833 [DEBUG] [Thread-127851] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:41:58.833 [DEBUG] [Thread-127851] [transport.py] [_log()] client lang: <none>
2025-12-31T12:41:58.833 [DEBUG] [Thread-127851] [transport.py] [_log()] server lang: <none>
2025-12-31T12:41:58.833 [DEBUG] [Thread-127851] [transport.py] [_log()] kex follows: False
2025-12-31T12:41:58.833 [DEBUG] [Thread-127851] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:41:58.833 [DEBUG] [Thread-127851] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:41:58.833 [DEBUG] [Thread-127851] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:41:58.833 [DEBUG] [Thread-127851] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:41:58.833 [DEBUG] [Thread-127851] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:41:58.833 [DEBUG] [Thread-127851] [transport.py] [_log()] Compression: none
2025-12-31T12:41:58.833 [DEBUG] [Thread-127851] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:41:58.841 [DEBUG] [Thread-127851] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:41:58.841 [DEBUG] [Thread-127851] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:41:58.841 [DEBUG] [Thread-127851] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T12:41:58.842 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T12:41:58.842 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:41:58.842 [DEBUG] [Thread-127851] [transport.py] [_log()] userauth is OK
2025-12-31T12:41:58.842 [DEBUG] [Thread-127851] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:41:58.842 [DEBUG] [Thread-127851] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:41:58.842 [DEBUG] [Thread-127851] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T12:41:58.842 [DEBUG] [Thread-127851] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:41:58.855 [INFO] [Thread-127851] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:41:58.855 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:41:59.481 [DEBUG] [Thread-127851] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:41:59.481 [DEBUG] [Thread-127851] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:41:59.481 [DEBUG] [Thread-127851] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T12:41:59.523 [DEBUG] [Thread-127851] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:41:59.523 [DEBUG] [Thread-127851] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:41:59.525 [DEBUG] [Thread-127851] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:41:59.539 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:41:59.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T12:41:59.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T12:41:59.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T12:41:59.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:41:59.544 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T12:41:59.544 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:41:59.544 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:41:59.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T12:41:59.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.445282 -999.00  +24.90  18.81     14   -3.80 1 2 1 1 1   888    0 28.87 -36.69 ----- 13.6 18.8 319.4 23.1 31.2 -19.2 30.7 -19.5 30.2 -17.5 30.7 -18.0
2025-12-31T12:41:59.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T12:41:59.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T12:41:59.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.445282
2025-12-31T12:41:59.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T12:41:59.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T12:41:59.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T12:41:59.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T12:41:59.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T12:41:59.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T12:41:25', tmtdew=35.31, humidity=8.75, cloud=0.0, wind=13.8, temperature=25.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T10:41:12.365', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T12:41:59.545 [DEBUG] [Thread-127851] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:41:59.620 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T12:41:59.631 [DEBUG] [Thread-127854] [transport.py] [_log()] starting thread (client mode): 0xb6bb2ef0
2025-12-31T12:41:59.631 [DEBUG] [Thread-127854] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:41:59.646 [DEBUG] [Thread-127854] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T12:41:59.646 [INFO] [Thread-127854] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T12:41:59.654 [DEBUG] [Thread-127854] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:41:59.654 [DEBUG] [Thread-127854] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T12:41:59.654 [DEBUG] [Thread-127854] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:41:59.654 [DEBUG] [Thread-127854] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:41:59.654 [DEBUG] [Thread-127854] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:41:59.654 [DEBUG] [Thread-127854] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:41:59.654 [DEBUG] [Thread-127854] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:41:59.654 [DEBUG] [Thread-127854] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:41:59.654 [DEBUG] [Thread-127854] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:41:59.654 [DEBUG] [Thread-127854] [transport.py] [_log()] client lang: <none>
2025-12-31T12:41:59.654 [DEBUG] [Thread-127854] [transport.py] [_log()] server lang: <none>
2025-12-31T12:41:59.654 [DEBUG] [Thread-127854] [transport.py] [_log()] kex follows: False
2025-12-31T12:41:59.655 [DEBUG] [Thread-127854] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:41:59.655 [DEBUG] [Thread-127854] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:41:59.655 [DEBUG] [Thread-127854] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:41:59.655 [DEBUG] [Thread-127854] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:41:59.655 [DEBUG] [Thread-127854] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:41:59.655 [DEBUG] [Thread-127854] [transport.py] [_log()] Compression: none
2025-12-31T12:41:59.655 [DEBUG] [Thread-127854] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:41:59.715 [DEBUG] [Thread-127854] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:41:59.715 [DEBUG] [Thread-127854] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:41:59.716 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T12:41:59.716 [DEBUG] [Thread-127854] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T12:41:59.717 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:41:59.775 [DEBUG] [Thread-127854] [transport.py] [_log()] userauth is OK
2025-12-31T12:41:59.775 [DEBUG] [Thread-127854] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:41:59.775 [DEBUG] [Thread-127854] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:41:59.775 [DEBUG] [Thread-127854] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T12:41:59.776 [DEBUG] [Thread-127854] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:41:59.793 [INFO] [Thread-127854] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:41:59.793 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T12:41:59.794 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:42:00.593 [DEBUG] [Thread-127854] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:42:00.593 [DEBUG] [Thread-127854] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:42:00.641 [DEBUG] [Thread-127854] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:42:00.642 [DEBUG] [Thread-127854] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:42:00.651 [DEBUG] [Thread-127854] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:42:00.660 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:42:00.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-12-31T12:42:00.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T12:42:00.678 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:42:00.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:42:00.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:42:00.687 [DEBUG] [Thread-127854] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:42:13.022 [DEBUG] [Thread-127856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:42:13.814 [DEBUG] [Thread-127857 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:42:28.865 [DEBUG] [Thread-127858 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:42:30.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T12:42:30.709 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T12:42:30.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T12:42:31.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 12, 41, 57), 35.2, 8.89, 0.0, 16.99, 26.07, 0, 0, 0, 2, 0, 0),)
2025-12-31T12:42:31.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 12:41:57
2025-12-31T12:42:31.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T12:42:31.752 [DEBUG] [Thread-127859] [transport.py] [_log()] starting thread (client mode): 0xb95b39d0
2025-12-31T12:42:31.752 [DEBUG] [Thread-127859] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:42:31.772 [DEBUG] [Thread-127859] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T12:42:31.772 [INFO] [Thread-127859] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T12:42:31.776 [DEBUG] [Thread-127859] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:42:31.776 [DEBUG] [Thread-127859] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T12:42:31.776 [DEBUG] [Thread-127859] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:42:31.776 [DEBUG] [Thread-127859] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:42:31.776 [DEBUG] [Thread-127859] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:42:31.776 [DEBUG] [Thread-127859] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:42:31.776 [DEBUG] [Thread-127859] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:42:31.776 [DEBUG] [Thread-127859] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:42:31.776 [DEBUG] [Thread-127859] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:42:31.776 [DEBUG] [Thread-127859] [transport.py] [_log()] client lang: <none>
2025-12-31T12:42:31.776 [DEBUG] [Thread-127859] [transport.py] [_log()] server lang: <none>
2025-12-31T12:42:31.776 [DEBUG] [Thread-127859] [transport.py] [_log()] kex follows: False
2025-12-31T12:42:31.776 [DEBUG] [Thread-127859] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:42:31.777 [DEBUG] [Thread-127859] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:42:31.777 [DEBUG] [Thread-127859] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:42:31.777 [DEBUG] [Thread-127859] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:42:31.777 [DEBUG] [Thread-127859] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:42:31.777 [DEBUG] [Thread-127859] [transport.py] [_log()] Compression: none
2025-12-31T12:42:31.777 [DEBUG] [Thread-127859] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:42:31.792 [DEBUG] [Thread-127859] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:42:31.792 [DEBUG] [Thread-127859] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:42:31.793 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T12:42:31.794 [DEBUG] [Thread-127859] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T12:42:31.795 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:42:31.796 [DEBUG] [Thread-127859] [transport.py] [_log()] userauth is OK
2025-12-31T12:42:31.796 [DEBUG] [Thread-127859] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:42:31.796 [DEBUG] [Thread-127859] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:42:31.796 [DEBUG] [Thread-127859] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T12:42:31.796 [DEBUG] [Thread-127859] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:42:31.820 [INFO] [Thread-127859] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:42:31.821 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:42:32.635 [DEBUG] [Thread-127859] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:42:32.635 [DEBUG] [Thread-127859] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:42:32.636 [DEBUG] [Thread-127859] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T12:42:32.676 [DEBUG] [Thread-127859] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:42:32.676 [DEBUG] [Thread-127859] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:42:32.680 [DEBUG] [Thread-127859] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:42:32.692 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:42:32.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T12:42:32.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T12:42:32.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T12:42:32.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:42:32.709 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T12:42:32.709 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:42:32.710 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:42:32.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T12:42:32.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.445629 -999.00  +25.00  16.55     14   -3.60 1 2 1 1 1   888    0 28.41 -47.15 ----- 15.7 16.6 300.4 30.5 31.3 -20.0 30.9 -18.7 30.3 -18.0 30.8 -18.8
2025-12-31T12:42:32.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T12:42:32.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T12:42:32.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.445629
2025-12-31T12:42:32.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T12:42:32.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T12:42:32.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T12:42:32.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T12:42:32.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T12:42:32.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T12:41:57', tmtdew=35.2, humidity=8.89, cloud=0.0, wind=16.99, temperature=26.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T10:41:42.346', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T12:42:32.713 [DEBUG] [Thread-127859] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:42:32.799 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T12:42:32.811 [DEBUG] [Thread-127862] [transport.py] [_log()] starting thread (client mode): 0xb6b17c70
2025-12-31T12:42:32.811 [DEBUG] [Thread-127862] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:42:32.825 [DEBUG] [Thread-127862] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T12:42:32.826 [INFO] [Thread-127862] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T12:42:32.833 [DEBUG] [Thread-127862] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:42:32.833 [DEBUG] [Thread-127862] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T12:42:32.834 [DEBUG] [Thread-127862] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:42:32.834 [DEBUG] [Thread-127862] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:42:32.834 [DEBUG] [Thread-127862] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:42:32.834 [DEBUG] [Thread-127862] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:42:32.834 [DEBUG] [Thread-127862] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:42:32.834 [DEBUG] [Thread-127862] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:42:32.834 [DEBUG] [Thread-127862] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:42:32.834 [DEBUG] [Thread-127862] [transport.py] [_log()] client lang: <none>
2025-12-31T12:42:32.834 [DEBUG] [Thread-127862] [transport.py] [_log()] server lang: <none>
2025-12-31T12:42:32.835 [DEBUG] [Thread-127862] [transport.py] [_log()] kex follows: False
2025-12-31T12:42:32.835 [DEBUG] [Thread-127862] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:42:32.835 [DEBUG] [Thread-127862] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:42:32.835 [DEBUG] [Thread-127862] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:42:32.835 [DEBUG] [Thread-127862] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:42:32.835 [DEBUG] [Thread-127862] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:42:32.835 [DEBUG] [Thread-127862] [transport.py] [_log()] Compression: none
2025-12-31T12:42:32.835 [DEBUG] [Thread-127862] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:42:32.891 [DEBUG] [Thread-127862] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:42:32.892 [DEBUG] [Thread-127862] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:42:32.893 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T12:42:32.893 [DEBUG] [Thread-127862] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T12:42:32.894 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:42:32.947 [DEBUG] [Thread-127862] [transport.py] [_log()] userauth is OK
2025-12-31T12:42:32.947 [DEBUG] [Thread-127862] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:42:32.947 [DEBUG] [Thread-127862] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:42:32.948 [DEBUG] [Thread-127862] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T12:42:32.948 [DEBUG] [Thread-127862] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:42:32.966 [INFO] [Thread-127862] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:42:32.967 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T12:42:32.967 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:42:33.772 [DEBUG] [Thread-127862] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:42:33.772 [DEBUG] [Thread-127862] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:42:33.820 [DEBUG] [Thread-127862] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:42:33.820 [DEBUG] [Thread-127862] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:42:33.829 [DEBUG] [Thread-127862] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:42:33.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:42:33.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-12-31T12:42:33.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-12-31T12:42:33.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:42:33.859 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:42:33.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:42:33.868 [DEBUG] [Thread-127862] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:42:43.902 [DEBUG] [Thread-127864 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:42:44.231 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:42:44.232 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:42:58.950 [DEBUG] [Thread-127865 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:43:03.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T12:43:03.890 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T12:43: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-12-31T12:43:04.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 12, 43, 1), 35.25, 8.85, 0.0, 17.7, 26.07, 0, 0, 0, 2, 0, 0),)
2025-12-31T12:43:04.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 12:43:01
2025-12-31T12:43:04.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T12:43:04.930 [DEBUG] [Thread-127866] [transport.py] [_log()] starting thread (client mode): 0xb6b2bf10
2025-12-31T12:43:04.930 [DEBUG] [Thread-127866] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:43:04.951 [DEBUG] [Thread-127866] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T12:43:04.951 [INFO] [Thread-127866] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T12:43:04.954 [DEBUG] [Thread-127866] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:43:04.954 [DEBUG] [Thread-127866] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T12:43:04.954 [DEBUG] [Thread-127866] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:43:04.954 [DEBUG] [Thread-127866] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:43:04.954 [DEBUG] [Thread-127866] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:43:04.954 [DEBUG] [Thread-127866] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:43:04.954 [DEBUG] [Thread-127866] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:43:04.954 [DEBUG] [Thread-127866] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:43:04.954 [DEBUG] [Thread-127866] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:43:04.954 [DEBUG] [Thread-127866] [transport.py] [_log()] client lang: <none>
2025-12-31T12:43:04.954 [DEBUG] [Thread-127866] [transport.py] [_log()] server lang: <none>
2025-12-31T12:43:04.954 [DEBUG] [Thread-127866] [transport.py] [_log()] kex follows: False
2025-12-31T12:43:04.955 [DEBUG] [Thread-127866] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:43:04.955 [DEBUG] [Thread-127866] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:43:04.955 [DEBUG] [Thread-127866] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:43:04.955 [DEBUG] [Thread-127866] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:43:04.955 [DEBUG] [Thread-127866] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:43:04.955 [DEBUG] [Thread-127866] [transport.py] [_log()] Compression: none
2025-12-31T12:43:04.955 [DEBUG] [Thread-127866] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:43:04.970 [DEBUG] [Thread-127866] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:43:04.970 [DEBUG] [Thread-127866] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:43:04.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T12:43:04.970 [DEBUG] [Thread-127866] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T12:43:04.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:43:04.971 [DEBUG] [Thread-127866] [transport.py] [_log()] userauth is OK
2025-12-31T12:43:04.971 [DEBUG] [Thread-127866] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:43:04.971 [DEBUG] [Thread-127866] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:43:04.971 [DEBUG] [Thread-127866] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T12:43:04.971 [DEBUG] [Thread-127866] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:43:04.981 [INFO] [Thread-127866] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:43:04.982 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:43:05.592 [DEBUG] [Thread-127866] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:43:05.592 [DEBUG] [Thread-127866] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:43:05.592 [DEBUG] [Thread-127866] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T12:43:05.633 [DEBUG] [Thread-127866] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:43:05.633 [DEBUG] [Thread-127866] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:43:05.636 [DEBUG] [Thread-127866] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:43:05.650 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:43:05.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T12:43:05.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T12:43:05.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T12:43:05.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:43:05.660 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T12:43:05.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:43:05.661 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:43:05.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T12:43:05.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.445976 -999.00  +24.90  14.21     14   -3.90 1 2 1 1 1   888    0 28.65 -58.44 ----- 14.9 14.2 262.2 23.4 31.5 -18.7 30.9 -18.2 30.4 -16.4 31.0 -18.0
2025-12-31T12:43:05.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T12:43:05.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T12:43:05.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.445976
2025-12-31T12:43:05.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T12:43:05.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T12:43:05.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T12:43:05.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T12:43:05.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T12:43:05.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T12:43:01', tmtdew=35.25, humidity=8.85, cloud=0.0, wind=17.7, temperature=26.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T10:42:12.326', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T12:43:05.663 [DEBUG] [Thread-127866] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:43:05.747 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T12:43:05.759 [DEBUG] [Thread-127869] [transport.py] [_log()] starting thread (client mode): 0xb6b16470
2025-12-31T12:43:05.759 [DEBUG] [Thread-127869] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:43:05.774 [DEBUG] [Thread-127869] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T12:43:05.775 [INFO] [Thread-127869] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T12:43:05.782 [DEBUG] [Thread-127869] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:43:05.782 [DEBUG] [Thread-127869] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T12:43:05.782 [DEBUG] [Thread-127869] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:43:05.782 [DEBUG] [Thread-127869] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:43:05.783 [DEBUG] [Thread-127869] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:43:05.783 [DEBUG] [Thread-127869] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:43:05.783 [DEBUG] [Thread-127869] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:43:05.783 [DEBUG] [Thread-127869] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:43:05.783 [DEBUG] [Thread-127869] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:43:05.783 [DEBUG] [Thread-127869] [transport.py] [_log()] client lang: <none>
2025-12-31T12:43:05.783 [DEBUG] [Thread-127869] [transport.py] [_log()] server lang: <none>
2025-12-31T12:43:05.783 [DEBUG] [Thread-127869] [transport.py] [_log()] kex follows: False
2025-12-31T12:43:05.783 [DEBUG] [Thread-127869] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:43:05.783 [DEBUG] [Thread-127869] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:43:05.783 [DEBUG] [Thread-127869] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:43:05.783 [DEBUG] [Thread-127869] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:43:05.783 [DEBUG] [Thread-127869] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:43:05.783 [DEBUG] [Thread-127869] [transport.py] [_log()] Compression: none
2025-12-31T12:43:05.783 [DEBUG] [Thread-127869] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:43:05.843 [DEBUG] [Thread-127869] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:43:05.843 [DEBUG] [Thread-127869] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:43:05.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T12:43:05.845 [DEBUG] [Thread-127869] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T12:43:05.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:43:05.903 [DEBUG] [Thread-127869] [transport.py] [_log()] userauth is OK
2025-12-31T12:43:05.903 [DEBUG] [Thread-127869] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:43:05.903 [DEBUG] [Thread-127869] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:43:05.903 [DEBUG] [Thread-127869] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T12:43:05.903 [DEBUG] [Thread-127869] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:43:05.922 [INFO] [Thread-127869] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:43: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-12-31T12:43:05.923 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:43:06.846 [DEBUG] [Thread-127869] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:43:06.847 [DEBUG] [Thread-127869] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:43:06.898 [DEBUG] [Thread-127869] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:43:06.899 [DEBUG] [Thread-127869] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:43:06.909 [DEBUG] [Thread-127869] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:43:06.920 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:43:06.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T12:43:06.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-12-31T12:43:06.938 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:43:06.939 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:43:06.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:43:06.947 [DEBUG] [Thread-127869] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:43:13.074 [DEBUG] [Thread-127871 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:43:13.984 [DEBUG] [Thread-127872 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:43:29.044 [DEBUG] [Thread-127873 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:43:36.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T12:43:36.970 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T12:43:36.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T12:43:37.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 12, 43, 33), 36.83, 8.24, 0.0, 22.34, 27.58, 0, 0, 0, 2, 0, 0),)
2025-12-31T12:43:37.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 12:43:33
2025-12-31T12:43:37.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T12:43:37.955 [DEBUG] [Thread-127874] [transport.py] [_log()] starting thread (client mode): 0xb6bb2ef0
2025-12-31T12:43:37.955 [DEBUG] [Thread-127874] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:43:37.976 [DEBUG] [Thread-127874] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T12:43:37.976 [INFO] [Thread-127874] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T12:43:37.979 [DEBUG] [Thread-127874] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:43:37.979 [DEBUG] [Thread-127874] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T12:43:37.979 [DEBUG] [Thread-127874] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:43:37.979 [DEBUG] [Thread-127874] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:43:37.979 [DEBUG] [Thread-127874] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:43:37.979 [DEBUG] [Thread-127874] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:43:37.980 [DEBUG] [Thread-127874] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:43:37.980 [DEBUG] [Thread-127874] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:43:37.980 [DEBUG] [Thread-127874] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:43:37.980 [DEBUG] [Thread-127874] [transport.py] [_log()] client lang: <none>
2025-12-31T12:43:37.980 [DEBUG] [Thread-127874] [transport.py] [_log()] server lang: <none>
2025-12-31T12:43:37.980 [DEBUG] [Thread-127874] [transport.py] [_log()] kex follows: False
2025-12-31T12:43:37.980 [DEBUG] [Thread-127874] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:43:37.980 [DEBUG] [Thread-127874] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:43:37.980 [DEBUG] [Thread-127874] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:43:37.980 [DEBUG] [Thread-127874] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:43:37.980 [DEBUG] [Thread-127874] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:43:37.980 [DEBUG] [Thread-127874] [transport.py] [_log()] Compression: none
2025-12-31T12:43:37.980 [DEBUG] [Thread-127874] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:43:37.998 [DEBUG] [Thread-127874] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:43:37.999 [DEBUG] [Thread-127874] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:43:38.000 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T12:43:38.000 [DEBUG] [Thread-127874] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T12:43:38.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:43:38.003 [DEBUG] [Thread-127874] [transport.py] [_log()] userauth is OK
2025-12-31T12:43:38.003 [DEBUG] [Thread-127874] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:43:38.003 [DEBUG] [Thread-127874] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:43:38.003 [DEBUG] [Thread-127874] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T12:43:38.003 [DEBUG] [Thread-127874] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:43:38.023 [INFO] [Thread-127874] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:43:38.024 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:43:38.826 [DEBUG] [Thread-127874] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:43:38.826 [DEBUG] [Thread-127874] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:43:38.826 [DEBUG] [Thread-127874] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T12:43:38.866 [DEBUG] [Thread-127874] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:43:38.866 [DEBUG] [Thread-127874] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:43:38.871 [DEBUG] [Thread-127874] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:43:38.879 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:43:38.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T12:43:38.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T12:43:38.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T12:43:38.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:43:38.883 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T12:43:38.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:43:38.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:43:38.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T12:43:38.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.446323 -999.00  +24.90  13.16     14   -4.10 1 2 1 1 1   888    0 28.04 -63.08 ----- 7.8 13.2 287.0 20.5 31.6 -18.5 31.1 -17.6 30.4 -16.5 31.1 -16.4
2025-12-31T12:43:38.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T12:43:38.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T12:43:38.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.446323
2025-12-31T12:43:38.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T12:43:38.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T12:43:38.884 [DEBUG] [Thread-127874] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:43:38.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T12:43:38.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T12:43:38.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T12:43:38.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T12:43:33', tmtdew=36.83, humidity=8.24, cloud=0.0, wind=22.34, temperature=27.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T10:42:42.307', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T12:43:38.967 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T12:43:38.978 [DEBUG] [Thread-127877] [transport.py] [_log()] starting thread (client mode): 0xb95b1fc0
2025-12-31T12:43:38.978 [DEBUG] [Thread-127877] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:43:38.993 [DEBUG] [Thread-127877] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T12:43:38.993 [INFO] [Thread-127877] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T12:43:39.001 [DEBUG] [Thread-127877] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:43:39.001 [DEBUG] [Thread-127877] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T12:43:39.001 [DEBUG] [Thread-127877] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:43:39.001 [DEBUG] [Thread-127877] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:43:39.001 [DEBUG] [Thread-127877] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:43:39.001 [DEBUG] [Thread-127877] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:43:39.001 [DEBUG] [Thread-127877] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:43:39.001 [DEBUG] [Thread-127877] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:43:39.001 [DEBUG] [Thread-127877] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:43:39.001 [DEBUG] [Thread-127877] [transport.py] [_log()] client lang: <none>
2025-12-31T12:43:39.001 [DEBUG] [Thread-127877] [transport.py] [_log()] server lang: <none>
2025-12-31T12:43:39.001 [DEBUG] [Thread-127877] [transport.py] [_log()] kex follows: False
2025-12-31T12:43:39.001 [DEBUG] [Thread-127877] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:43:39.001 [DEBUG] [Thread-127877] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:43:39.001 [DEBUG] [Thread-127877] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:43:39.001 [DEBUG] [Thread-127877] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:43:39.001 [DEBUG] [Thread-127877] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:43:39.001 [DEBUG] [Thread-127877] [transport.py] [_log()] Compression: none
2025-12-31T12:43:39.002 [DEBUG] [Thread-127877] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:43:39.056 [DEBUG] [Thread-127877] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:43:39.057 [DEBUG] [Thread-127877] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:43:39.057 [DEBUG] [Thread-127877] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T12:43:39.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T12:43:39.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:43:39.114 [DEBUG] [Thread-127877] [transport.py] [_log()] userauth is OK
2025-12-31T12:43:39.114 [DEBUG] [Thread-127877] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:43:39.114 [DEBUG] [Thread-127877] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:43:39.114 [DEBUG] [Thread-127877] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T12:43:39.114 [DEBUG] [Thread-127877] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:43:39.130 [INFO] [Thread-127877] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:43:39.130 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T12:43:39.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:43:39.972 [DEBUG] [Thread-127877] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:43:39.972 [DEBUG] [Thread-127877] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:43:40.019 [DEBUG] [Thread-127877] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:43:40.019 [DEBUG] [Thread-127877] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:43:40.028 [DEBUG] [Thread-127877] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:43:40.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:43:40.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T12:43:40.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T12:43:40.051 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:43:40.051 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:43:40.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:43:40.059 [DEBUG] [Thread-127877] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:43:44.074 [DEBUG] [Thread-127879 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:43:44.370 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:43:44.371 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:43:59.115 [DEBUG] [Thread-127880 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:44:10.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T12:44:10.082 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T12:44:10.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T12:44:10.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 12, 44, 5), 35.69, 8.59, 0.0, 15.03, 25.97, 0, 0, 0, 2, 0, 0),)
2025-12-31T12:44:10.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 12:44:05
2025-12-31T12:44:10.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T12:44:11.075 [DEBUG] [Thread-127881] [transport.py] [_log()] starting thread (client mode): 0xb95b05b0
2025-12-31T12:44:11.075 [DEBUG] [Thread-127881] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:44:11.098 [DEBUG] [Thread-127881] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T12:44:11.098 [INFO] [Thread-127881] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T12:44:11.102 [DEBUG] [Thread-127881] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:44:11.102 [DEBUG] [Thread-127881] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T12:44:11.102 [DEBUG] [Thread-127881] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:44:11.103 [DEBUG] [Thread-127881] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:44:11.103 [DEBUG] [Thread-127881] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:44:11.103 [DEBUG] [Thread-127881] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:44:11.103 [DEBUG] [Thread-127881] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:44:11.103 [DEBUG] [Thread-127881] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:44:11.103 [DEBUG] [Thread-127881] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:44:11.103 [DEBUG] [Thread-127881] [transport.py] [_log()] client lang: <none>
2025-12-31T12:44:11.103 [DEBUG] [Thread-127881] [transport.py] [_log()] server lang: <none>
2025-12-31T12:44:11.103 [DEBUG] [Thread-127881] [transport.py] [_log()] kex follows: False
2025-12-31T12:44:11.103 [DEBUG] [Thread-127881] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:44:11.103 [DEBUG] [Thread-127881] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:44:11.104 [DEBUG] [Thread-127881] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:44:11.104 [DEBUG] [Thread-127881] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:44:11.104 [DEBUG] [Thread-127881] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:44:11.104 [DEBUG] [Thread-127881] [transport.py] [_log()] Compression: none
2025-12-31T12:44:11.104 [DEBUG] [Thread-127881] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:44:11.124 [DEBUG] [Thread-127881] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:44:11.124 [DEBUG] [Thread-127881] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:44:11.125 [DEBUG] [Thread-127881] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T12:44:11.125 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T12:44:11.126 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:44:11.127 [DEBUG] [Thread-127881] [transport.py] [_log()] userauth is OK
2025-12-31T12:44:11.127 [DEBUG] [Thread-127881] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:44:11.127 [DEBUG] [Thread-127881] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:44:11.127 [DEBUG] [Thread-127881] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T12:44:11.127 [DEBUG] [Thread-127881] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:44:11.152 [INFO] [Thread-127881] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:44:11.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:44:11.793 [DEBUG] [Thread-127881] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:44:11.793 [DEBUG] [Thread-127881] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:44:11.794 [DEBUG] [Thread-127881] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T12:44:11.834 [DEBUG] [Thread-127881] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:44:11.835 [DEBUG] [Thread-127881] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:44:11.838 [DEBUG] [Thread-127881] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:44:11.852 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:44:11.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T12:44:11.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T12:44:11.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T12:44:11.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:44:11.863 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T12:44:11.864 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:44:11.864 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:44:11.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T12:44:11.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.447018 -999.00  +25.50  13.08     14   -3.40 1 2 1 1 1   888    0 28.47 -65.72 ----- 10.1 13.1 281.4 21.4 32.0 -18.6 31.4 -18.0 -999.0 -999.0 31.5 -17.1
2025-12-31T12:44:11.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T12:44:11.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T12:44:11.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.447018
2025-12-31T12:44:11.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T12:44:11.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T12:44:11.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T12:44:11.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T12:44:11.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T12:44:11.866 [DEBUG] [Thread-127881] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:44:11.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T12:44:05', tmtdew=35.69, humidity=8.59, cloud=0.0, wind=15.03, temperature=25.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T10:43:42.355', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T12:44:11.950 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T12:44:11.962 [DEBUG] [Thread-127884] [transport.py] [_log()] starting thread (client mode): 0xb95b0f70
2025-12-31T12:44:11.962 [DEBUG] [Thread-127884] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:44:11.976 [DEBUG] [Thread-127884] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T12:44:11.976 [INFO] [Thread-127884] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T12:44:11.984 [DEBUG] [Thread-127884] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:44:11.984 [DEBUG] [Thread-127884] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T12:44:11.984 [DEBUG] [Thread-127884] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:44:11.984 [DEBUG] [Thread-127884] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:44:11.984 [DEBUG] [Thread-127884] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:44:11.984 [DEBUG] [Thread-127884] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:44:11.984 [DEBUG] [Thread-127884] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:44:11.984 [DEBUG] [Thread-127884] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:44:11.985 [DEBUG] [Thread-127884] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:44:11.985 [DEBUG] [Thread-127884] [transport.py] [_log()] client lang: <none>
2025-12-31T12:44:11.985 [DEBUG] [Thread-127884] [transport.py] [_log()] server lang: <none>
2025-12-31T12:44:11.985 [DEBUG] [Thread-127884] [transport.py] [_log()] kex follows: False
2025-12-31T12:44:11.985 [DEBUG] [Thread-127884] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:44:11.985 [DEBUG] [Thread-127884] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:44:11.985 [DEBUG] [Thread-127884] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:44:11.985 [DEBUG] [Thread-127884] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:44:11.985 [DEBUG] [Thread-127884] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:44:11.985 [DEBUG] [Thread-127884] [transport.py] [_log()] Compression: none
2025-12-31T12:44:11.985 [DEBUG] [Thread-127884] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:44:12.042 [DEBUG] [Thread-127884] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:44:12.043 [DEBUG] [Thread-127884] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:44:12.044 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T12:44:12.044 [DEBUG] [Thread-127884] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T12:44:12.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:44:12.098 [DEBUG] [Thread-127884] [transport.py] [_log()] userauth is OK
2025-12-31T12:44:12.098 [DEBUG] [Thread-127884] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:44:12.098 [DEBUG] [Thread-127884] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:44:12.098 [DEBUG] [Thread-127884] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T12:44:12.098 [DEBUG] [Thread-127884] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:44:12.117 [INFO] [Thread-127884] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:44:12.118 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T12:44:12.118 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:44:12.993 [DEBUG] [Thread-127884] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:44:12.993 [DEBUG] [Thread-127884] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:44:13.041 [DEBUG] [Thread-127884] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:44:13.041 [DEBUG] [Thread-127884] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:44:13.050 [DEBUG] [Thread-127884] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:44:13.059 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:44:13.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T12:44:13.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T12:44:13.078 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:44:13.078 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:44:13.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:44:13.086 [DEBUG] [Thread-127884] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:44:13.116 [DEBUG] [Thread-127886 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:44:14.153 [DEBUG] [Thread-127887 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:44:29.199 [DEBUG] [Thread-127888 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:44:43.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T12:44:43.105 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T12:44:43.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T12:44:43.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 12, 44, 37), 35.47, 9.2, 0.0, 15.48, 26.11, 0, 0, 0, 2, 0, 0),)
2025-12-31T12:44:43.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 12:44:37
2025-12-31T12:44:43.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T12:44:44.096 [DEBUG] [Thread-127889] [transport.py] [_log()] starting thread (client mode): 0xb6b28c10
2025-12-31T12:44:44.097 [DEBUG] [Thread-127889] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:44:44.116 [DEBUG] [Thread-127889] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T12:44:44.116 [INFO] [Thread-127889] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T12:44:44.119 [DEBUG] [Thread-127889] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:44:44.119 [DEBUG] [Thread-127889] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T12:44:44.119 [DEBUG] [Thread-127889] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:44:44.119 [DEBUG] [Thread-127889] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:44:44.119 [DEBUG] [Thread-127889] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:44:44.119 [DEBUG] [Thread-127889] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:44:44.119 [DEBUG] [Thread-127889] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:44:44.119 [DEBUG] [Thread-127889] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:44:44.119 [DEBUG] [Thread-127889] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:44:44.119 [DEBUG] [Thread-127889] [transport.py] [_log()] client lang: <none>
2025-12-31T12:44:44.120 [DEBUG] [Thread-127889] [transport.py] [_log()] server lang: <none>
2025-12-31T12:44:44.120 [DEBUG] [Thread-127889] [transport.py] [_log()] kex follows: False
2025-12-31T12:44:44.120 [DEBUG] [Thread-127889] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:44:44.120 [DEBUG] [Thread-127889] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:44:44.120 [DEBUG] [Thread-127889] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:44:44.120 [DEBUG] [Thread-127889] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:44:44.120 [DEBUG] [Thread-127889] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:44:44.120 [DEBUG] [Thread-127889] [transport.py] [_log()] Compression: none
2025-12-31T12:44:44.120 [DEBUG] [Thread-127889] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:44:44.136 [DEBUG] [Thread-127889] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:44:44.137 [DEBUG] [Thread-127889] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:44:44.137 [DEBUG] [Thread-127889] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T12:44:44.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T12:44:44.138 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:44:44.139 [DEBUG] [Thread-127889] [transport.py] [_log()] userauth is OK
2025-12-31T12:44:44.139 [DEBUG] [Thread-127889] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:44:44.139 [DEBUG] [Thread-127889] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:44:44.139 [DEBUG] [Thread-127889] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T12:44:44.139 [DEBUG] [Thread-127889] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:44:44.152 [INFO] [Thread-127889] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:44:44.153 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:44:44.236 [DEBUG] [Thread-127891 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:44:44.525 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:44:44.527 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:44:44.876 [DEBUG] [Thread-127889] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:44:44.876 [DEBUG] [Thread-127889] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:44:44.876 [DEBUG] [Thread-127889] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T12:44:44.917 [DEBUG] [Thread-127889] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:44:44.917 [DEBUG] [Thread-127889] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:44:44.921 [DEBUG] [Thread-127889] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:44:44.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:44:44.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T12:44:44.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T12:44:44.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T12:44:44.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:44:44.945 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T12:44:44.946 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:44:44.946 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:44:44.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T12:44:44.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.447365 -999.00  +26.10  10.50     14   -2.90 1 2 1 1 1   888    0 27.96 -77.55 ----- 15.5 10.5 251.8 14.8 32.1 -20.6 31.6 -18.9 31.0 -17.5 31.6 -18.5
2025-12-31T12:44:44.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T12:44:44.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T12:44:44.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.447365
2025-12-31T12:44:44.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T12:44:44.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T12:44:44.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T12:44:44.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T12:44:44.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T12:44:44.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T12:44:37', tmtdew=35.47, humidity=9.2, cloud=0.0, wind=15.48, temperature=26.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T10:44:12.336', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T12:44:44.948 [DEBUG] [Thread-127889] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:44:45.032 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T12:44:45.043 [DEBUG] [Thread-127893] [transport.py] [_log()] starting thread (client mode): 0xb95b3f40
2025-12-31T12:44:45.044 [DEBUG] [Thread-127893] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:44:45.058 [DEBUG] [Thread-127893] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T12:44:45.058 [INFO] [Thread-127893] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T12:44:45.066 [DEBUG] [Thread-127893] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:44:45.066 [DEBUG] [Thread-127893] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T12:44:45.067 [DEBUG] [Thread-127893] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:44:45.067 [DEBUG] [Thread-127893] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:44:45.067 [DEBUG] [Thread-127893] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:44:45.067 [DEBUG] [Thread-127893] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:44:45.067 [DEBUG] [Thread-127893] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:44:45.067 [DEBUG] [Thread-127893] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:44:45.067 [DEBUG] [Thread-127893] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:44:45.067 [DEBUG] [Thread-127893] [transport.py] [_log()] client lang: <none>
2025-12-31T12:44:45.067 [DEBUG] [Thread-127893] [transport.py] [_log()] server lang: <none>
2025-12-31T12:44:45.068 [DEBUG] [Thread-127893] [transport.py] [_log()] kex follows: False
2025-12-31T12:44:45.068 [DEBUG] [Thread-127893] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:44:45.068 [DEBUG] [Thread-127893] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:44:45.068 [DEBUG] [Thread-127893] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:44:45.068 [DEBUG] [Thread-127893] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:44:45.068 [DEBUG] [Thread-127893] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:44:45.068 [DEBUG] [Thread-127893] [transport.py] [_log()] Compression: none
2025-12-31T12:44:45.069 [DEBUG] [Thread-127893] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:44:45.127 [DEBUG] [Thread-127893] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:44:45.127 [DEBUG] [Thread-127893] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:44:45.128 [DEBUG] [Thread-127893] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T12:44:45.128 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T12:44:45.129 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:44:45.185 [DEBUG] [Thread-127893] [transport.py] [_log()] userauth is OK
2025-12-31T12:44:45.186 [DEBUG] [Thread-127893] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:44:45.186 [DEBUG] [Thread-127893] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:44:45.186 [DEBUG] [Thread-127893] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T12:44:45.186 [DEBUG] [Thread-127893] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:44:45.211 [INFO] [Thread-127893] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:44:45.211 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T12:44:45.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:44:46.027 [DEBUG] [Thread-127893] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:44:46.028 [DEBUG] [Thread-127893] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:44:46.076 [DEBUG] [Thread-127893] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:44:46.076 [DEBUG] [Thread-127893] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:44:46.085 [DEBUG] [Thread-127893] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:44:46.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:44:46.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T12:44:46.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T12:44:46.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:44:46.113 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:44:46.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:44:46.122 [DEBUG] [Thread-127893] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:44:59.267 [DEBUG] [Thread-127895 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:45:13.168 [DEBUG] [Thread-127896 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:45:14.318 [DEBUG] [Thread-127897 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:45:16.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T12:45:16.117 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T12:45:16.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T12:45:16.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 12, 45, 10), 35.23, 9.35, 0.0, 16.73, 26.06, 0, 0, 0, 2, 0, 0),)
2025-12-31T12:45:16.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 12:45:10
2025-12-31T12:45:16.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T12:45:17.099 [DEBUG] [Thread-127898] [transport.py] [_log()] starting thread (client mode): 0xb6b16440
2025-12-31T12:45:17.099 [DEBUG] [Thread-127898] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:45:17.115 [DEBUG] [Thread-127898] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T12:45:17.115 [INFO] [Thread-127898] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T12:45:17.119 [DEBUG] [Thread-127898] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:45:17.119 [DEBUG] [Thread-127898] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T12:45:17.119 [DEBUG] [Thread-127898] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:45:17.119 [DEBUG] [Thread-127898] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:45:17.119 [DEBUG] [Thread-127898] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:45:17.119 [DEBUG] [Thread-127898] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:45:17.119 [DEBUG] [Thread-127898] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:45:17.119 [DEBUG] [Thread-127898] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:45:17.119 [DEBUG] [Thread-127898] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:45:17.119 [DEBUG] [Thread-127898] [transport.py] [_log()] client lang: <none>
2025-12-31T12:45:17.119 [DEBUG] [Thread-127898] [transport.py] [_log()] server lang: <none>
2025-12-31T12:45:17.119 [DEBUG] [Thread-127898] [transport.py] [_log()] kex follows: False
2025-12-31T12:45:17.119 [DEBUG] [Thread-127898] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:45:17.120 [DEBUG] [Thread-127898] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:45:17.120 [DEBUG] [Thread-127898] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:45:17.120 [DEBUG] [Thread-127898] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:45:17.120 [DEBUG] [Thread-127898] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:45:17.120 [DEBUG] [Thread-127898] [transport.py] [_log()] Compression: none
2025-12-31T12:45:17.120 [DEBUG] [Thread-127898] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:45:17.138 [DEBUG] [Thread-127898] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:45:17.139 [DEBUG] [Thread-127898] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:45:17.140 [DEBUG] [Thread-127898] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T12:45:17.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T12:45:17.141 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:45:17.181 [DEBUG] [Thread-127898] [transport.py] [_log()] userauth is OK
2025-12-31T12:45:17.181 [DEBUG] [Thread-127898] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:45:17.181 [DEBUG] [Thread-127898] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:45:17.181 [DEBUG] [Thread-127898] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T12:45:17.182 [DEBUG] [Thread-127898] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:45:17.214 [INFO] [Thread-127898] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:45:17.215 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:45:21.115 [DEBUG] [Thread-127898] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:45:21.116 [DEBUG] [Thread-127898] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:45:21.116 [DEBUG] [Thread-127898] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T12:45:21.157 [DEBUG] [Thread-127898] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:45:21.157 [DEBUG] [Thread-127898] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:45:21.160 [DEBUG] [Thread-127898] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:45:21.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:45:21.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T12:45:21.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T12:45:21.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T12:45:21.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:45:21.209 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T12:45:21.210 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:45:21.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:45:21.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T12:45:21.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.447712 -999.00  +26.00  13.41     14   -3.00 1 2 1 1 1   888    0 27.20 -79.33 ----- 15.6 13.4 224.0 23.0 32.0 -21.0 31.6 -19.9 31.0 -18.2 31.4 -19.6
2025-12-31T12:45:21.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T12:45:21.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T12:45:21.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.447712
2025-12-31T12:45:21.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T12:45:21.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T12:45:21.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T12:45:21.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T12:45:21.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T12:45:21.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T12:45:10', tmtdew=35.23, humidity=9.35, cloud=0.0, wind=16.73, temperature=26.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T10:44:42.317', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T12:45:21.213 [DEBUG] [Thread-127898] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:45:21.297 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T12:45:21.309 [DEBUG] [Thread-127901] [transport.py] [_log()] starting thread (client mode): 0xb6b14310
2025-12-31T12:45:21.310 [DEBUG] [Thread-127901] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:45:21.325 [DEBUG] [Thread-127901] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T12:45:21.325 [INFO] [Thread-127901] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T12:45:21.333 [DEBUG] [Thread-127901] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:45:21.333 [DEBUG] [Thread-127901] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T12:45:21.333 [DEBUG] [Thread-127901] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:45:21.333 [DEBUG] [Thread-127901] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:45:21.334 [DEBUG] [Thread-127901] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:45:21.334 [DEBUG] [Thread-127901] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:45:21.334 [DEBUG] [Thread-127901] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:45:21.334 [DEBUG] [Thread-127901] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:45:21.334 [DEBUG] [Thread-127901] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:45:21.334 [DEBUG] [Thread-127901] [transport.py] [_log()] client lang: <none>
2025-12-31T12:45:21.334 [DEBUG] [Thread-127901] [transport.py] [_log()] server lang: <none>
2025-12-31T12:45:21.334 [DEBUG] [Thread-127901] [transport.py] [_log()] kex follows: False
2025-12-31T12:45:21.334 [DEBUG] [Thread-127901] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:45:21.335 [DEBUG] [Thread-127901] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:45:21.335 [DEBUG] [Thread-127901] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:45:21.335 [DEBUG] [Thread-127901] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:45:21.335 [DEBUG] [Thread-127901] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:45:21.335 [DEBUG] [Thread-127901] [transport.py] [_log()] Compression: none
2025-12-31T12:45:21.335 [DEBUG] [Thread-127901] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:45:21.394 [DEBUG] [Thread-127901] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:45:21.395 [DEBUG] [Thread-127901] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:45:21.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T12:45:21.397 [DEBUG] [Thread-127901] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T12:45:21.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:45:21.454 [DEBUG] [Thread-127901] [transport.py] [_log()] userauth is OK
2025-12-31T12:45:21.454 [DEBUG] [Thread-127901] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:45:21.454 [DEBUG] [Thread-127901] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:45:21.454 [DEBUG] [Thread-127901] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T12:45:21.455 [DEBUG] [Thread-127901] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:45:21.480 [INFO] [Thread-127901] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:45:21.481 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T12:45:21.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:45:22.293 [DEBUG] [Thread-127901] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:45:22.293 [DEBUG] [Thread-127901] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:45:22.341 [DEBUG] [Thread-127901] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:45:22.341 [DEBUG] [Thread-127901] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:45:22.350 [DEBUG] [Thread-127901] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:45:22.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:45:22.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T12:45:22.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T12:45:22.377 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:45:22.378 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:45:22.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:45:22.386 [DEBUG] [Thread-127901] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:45:29.356 [DEBUG] [Thread-127903 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:45:44.410 [DEBUG] [Thread-127904 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:45:44.668 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:45:44.669 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:45:52.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T12:45:52.408 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T12:45:52.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T12:45:53.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 12, 45, 42), 34.9, 9.45, 0.0, 25.13, 26.07, 0, 0, 0, 2, 0, 0),)
2025-12-31T12:45:53.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 12:45:42
2025-12-31T12:45:53.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T12:45:53.400 [DEBUG] [Thread-127905] [transport.py] [_log()] starting thread (client mode): 0xb95b0490
2025-12-31T12:45:53.401 [DEBUG] [Thread-127905] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:45:53.420 [DEBUG] [Thread-127905] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T12:45:53.420 [INFO] [Thread-127905] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T12:45:53.423 [DEBUG] [Thread-127905] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:45:53.423 [DEBUG] [Thread-127905] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T12:45:53.424 [DEBUG] [Thread-127905] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:45:53.424 [DEBUG] [Thread-127905] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:45:53.424 [DEBUG] [Thread-127905] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:45:53.424 [DEBUG] [Thread-127905] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:45:53.424 [DEBUG] [Thread-127905] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:45:53.424 [DEBUG] [Thread-127905] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:45:53.424 [DEBUG] [Thread-127905] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:45:53.424 [DEBUG] [Thread-127905] [transport.py] [_log()] client lang: <none>
2025-12-31T12:45:53.424 [DEBUG] [Thread-127905] [transport.py] [_log()] server lang: <none>
2025-12-31T12:45:53.424 [DEBUG] [Thread-127905] [transport.py] [_log()] kex follows: False
2025-12-31T12:45:53.424 [DEBUG] [Thread-127905] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:45:53.424 [DEBUG] [Thread-127905] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:45:53.425 [DEBUG] [Thread-127905] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:45:53.425 [DEBUG] [Thread-127905] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:45:53.425 [DEBUG] [Thread-127905] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:45:53.425 [DEBUG] [Thread-127905] [transport.py] [_log()] Compression: none
2025-12-31T12:45:53.425 [DEBUG] [Thread-127905] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:45:53.442 [DEBUG] [Thread-127905] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:45:53.442 [DEBUG] [Thread-127905] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:45:53.443 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T12:45:53.444 [DEBUG] [Thread-127905] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T12:45:53.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:45:53.446 [DEBUG] [Thread-127905] [transport.py] [_log()] userauth is OK
2025-12-31T12:45:53.446 [DEBUG] [Thread-127905] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:45:53.446 [DEBUG] [Thread-127905] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:45:53.446 [DEBUG] [Thread-127905] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T12:45:53.446 [DEBUG] [Thread-127905] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:45:53.468 [INFO] [Thread-127905] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:45:53.469 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:45:54.114 [DEBUG] [Thread-127905] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:45:54.114 [DEBUG] [Thread-127905] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:45:54.114 [DEBUG] [Thread-127905] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T12:45:54.155 [DEBUG] [Thread-127905] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:45:54.155 [DEBUG] [Thread-127905] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:45:54.158 [DEBUG] [Thread-127905] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:45:54.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:45:54.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T12:45:54.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T12:45:54.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T12:45:54.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:45:54.182 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T12:45:54.183 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:45:54.183 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:45:54.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T12:45:54.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.448059 -999.00  +26.20  16.02     14   -2.80 1 2 1 1 1   888    0 27.54 -80.60 ----- 18.0 16.0 260.2 22.4 32.1 -20.7 31.6 -18.9 31.1 -18.7 31.6 -19.7
2025-12-31T12:45:54.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T12:45:54.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T12:45:54.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.448059
2025-12-31T12:45:54.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T12:45:54.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T12:45:54.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T12:45:54.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T12:45:54.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T12:45:54.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T12:45:42', tmtdew=34.9, humidity=9.45, cloud=0.0, wind=25.13, temperature=26.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T10:45:12.298', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T12:45:54.185 [DEBUG] [Thread-127905] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:45:54.269 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T12:45:54.282 [DEBUG] [Thread-127908] [transport.py] [_log()] starting thread (client mode): 0xb6b62410
2025-12-31T12:45:54.282 [DEBUG] [Thread-127908] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:45:54.297 [DEBUG] [Thread-127908] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T12:45:54.297 [INFO] [Thread-127908] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T12:45:54.305 [DEBUG] [Thread-127908] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:45:54.306 [DEBUG] [Thread-127908] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T12:45:54.306 [DEBUG] [Thread-127908] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:45:54.306 [DEBUG] [Thread-127908] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:45:54.306 [DEBUG] [Thread-127908] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:45:54.306 [DEBUG] [Thread-127908] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:45:54.306 [DEBUG] [Thread-127908] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:45:54.306 [DEBUG] [Thread-127908] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:45:54.306 [DEBUG] [Thread-127908] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:45:54.306 [DEBUG] [Thread-127908] [transport.py] [_log()] client lang: <none>
2025-12-31T12:45:54.306 [DEBUG] [Thread-127908] [transport.py] [_log()] server lang: <none>
2025-12-31T12:45:54.306 [DEBUG] [Thread-127908] [transport.py] [_log()] kex follows: False
2025-12-31T12:45:54.306 [DEBUG] [Thread-127908] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:45:54.306 [DEBUG] [Thread-127908] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:45:54.306 [DEBUG] [Thread-127908] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:45:54.306 [DEBUG] [Thread-127908] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:45:54.306 [DEBUG] [Thread-127908] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:45:54.307 [DEBUG] [Thread-127908] [transport.py] [_log()] Compression: none
2025-12-31T12:45:54.307 [DEBUG] [Thread-127908] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:45:54.365 [DEBUG] [Thread-127908] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:45:54.365 [DEBUG] [Thread-127908] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:45:54.366 [DEBUG] [Thread-127908] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T12:45:54.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T12:45:54.367 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:45:54.421 [DEBUG] [Thread-127908] [transport.py] [_log()] userauth is OK
2025-12-31T12:45:54.421 [DEBUG] [Thread-127908] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:45:54.421 [DEBUG] [Thread-127908] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:45:54.421 [DEBUG] [Thread-127908] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T12:45:54.421 [DEBUG] [Thread-127908] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:45:54.445 [INFO] [Thread-127908] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:45:54.445 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T12:45:54.446 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:45:55.277 [DEBUG] [Thread-127908] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:45:55.277 [DEBUG] [Thread-127908] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:45:55.325 [DEBUG] [Thread-127908] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:45:55.326 [DEBUG] [Thread-127908] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:45:55.334 [DEBUG] [Thread-127908] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:45:55.343 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:45:55.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T12:45:55.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T12:45:55.360 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:45:55.360 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:45:55.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:45:55.368 [DEBUG] [Thread-127908] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:45:59.450 [DEBUG] [Thread-127910 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:46:13.220 [DEBUG] [Thread-127911 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:46:14.502 [DEBUG] [Thread-127912 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:46:25.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T12:46:25.377 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T12:46:25.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-12-31T12:46:26.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 12, 46, 14), 34.92, 9.47, 0.0, 21.81, 26.26, 0, 0, 0, 2, 0, 0),)
2025-12-31T12:46:26.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 12:46:14
2025-12-31T12:46:26.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T12:46:26.354 [DEBUG] [Thread-127913] [transport.py] [_log()] starting thread (client mode): 0xb6b62bc0
2025-12-31T12:46:26.354 [DEBUG] [Thread-127913] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:46:26.374 [DEBUG] [Thread-127913] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T12:46:26.375 [INFO] [Thread-127913] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T12:46:26.377 [DEBUG] [Thread-127913] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:46:26.378 [DEBUG] [Thread-127913] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T12:46:26.378 [DEBUG] [Thread-127913] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:46:26.378 [DEBUG] [Thread-127913] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:46:26.378 [DEBUG] [Thread-127913] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:46:26.378 [DEBUG] [Thread-127913] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:46:26.378 [DEBUG] [Thread-127913] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:46:26.378 [DEBUG] [Thread-127913] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:46:26.378 [DEBUG] [Thread-127913] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:46:26.378 [DEBUG] [Thread-127913] [transport.py] [_log()] client lang: <none>
2025-12-31T12:46:26.378 [DEBUG] [Thread-127913] [transport.py] [_log()] server lang: <none>
2025-12-31T12:46:26.378 [DEBUG] [Thread-127913] [transport.py] [_log()] kex follows: False
2025-12-31T12:46:26.378 [DEBUG] [Thread-127913] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:46:26.378 [DEBUG] [Thread-127913] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:46:26.378 [DEBUG] [Thread-127913] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:46:26.378 [DEBUG] [Thread-127913] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:46:26.378 [DEBUG] [Thread-127913] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:46:26.378 [DEBUG] [Thread-127913] [transport.py] [_log()] Compression: none
2025-12-31T12:46:26.378 [DEBUG] [Thread-127913] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:46:26.396 [DEBUG] [Thread-127913] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:46:26.397 [DEBUG] [Thread-127913] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:46:26.397 [DEBUG] [Thread-127913] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T12:46:26.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T12:46:26.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:46:26.400 [DEBUG] [Thread-127913] [transport.py] [_log()] userauth is OK
2025-12-31T12:46:26.400 [DEBUG] [Thread-127913] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:46:26.400 [DEBUG] [Thread-127913] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:46:26.400 [DEBUG] [Thread-127913] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T12:46:26.400 [DEBUG] [Thread-127913] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:46:26.425 [INFO] [Thread-127913] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:46:26.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:46:27.162 [DEBUG] [Thread-127913] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:46:27.162 [DEBUG] [Thread-127913] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:46:27.163 [DEBUG] [Thread-127913] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T12:46:27.205 [DEBUG] [Thread-127913] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:46:27.205 [DEBUG] [Thread-127913] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:46:27.209 [DEBUG] [Thread-127913] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:46:27.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:46:27.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T12:46:27.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T12:46:27.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T12:46:27.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:46:27.234 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T12:46:27.235 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:46:27.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:46:27.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T12:46:27.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.448407 -999.00  +26.20  12.23     14   -2.90 1 2 1 1 1   888    0 27.76 -77.22 ----- 16.8 12.2 283.0 25.2 32.1 -20.7 31.6 -19.5 31.1 -19.7 31.6 -19.1
2025-12-31T12:46:27.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T12:46:27.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T12:46:27.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.448407
2025-12-31T12:46:27.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T12:46:27.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T12:46:27.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T12:46:27.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T12:46:27.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T12:46:27.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T12:46:14', tmtdew=34.92, humidity=9.47, cloud=0.0, wind=21.81, temperature=26.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T10:45:42.365', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T12:46:27.238 [DEBUG] [Thread-127913] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:46: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-12-31T12:46:27.331 [DEBUG] [Thread-127916] [transport.py] [_log()] starting thread (client mode): 0xb6b15270
2025-12-31T12:46:27.332 [DEBUG] [Thread-127916] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:46:27.347 [DEBUG] [Thread-127916] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T12:46:27.347 [INFO] [Thread-127916] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T12:46:27.354 [DEBUG] [Thread-127916] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:46:27.354 [DEBUG] [Thread-127916] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T12:46:27.354 [DEBUG] [Thread-127916] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:46:27.354 [DEBUG] [Thread-127916] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:46:27.355 [DEBUG] [Thread-127916] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:46:27.355 [DEBUG] [Thread-127916] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:46:27.355 [DEBUG] [Thread-127916] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:46:27.355 [DEBUG] [Thread-127916] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:46:27.355 [DEBUG] [Thread-127916] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:46:27.355 [DEBUG] [Thread-127916] [transport.py] [_log()] client lang: <none>
2025-12-31T12:46:27.355 [DEBUG] [Thread-127916] [transport.py] [_log()] server lang: <none>
2025-12-31T12:46:27.355 [DEBUG] [Thread-127916] [transport.py] [_log()] kex follows: False
2025-12-31T12:46:27.355 [DEBUG] [Thread-127916] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:46:27.355 [DEBUG] [Thread-127916] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:46:27.355 [DEBUG] [Thread-127916] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:46:27.355 [DEBUG] [Thread-127916] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:46:27.355 [DEBUG] [Thread-127916] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:46:27.356 [DEBUG] [Thread-127916] [transport.py] [_log()] Compression: none
2025-12-31T12:46:27.356 [DEBUG] [Thread-127916] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:46:27.412 [DEBUG] [Thread-127916] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:46:27.412 [DEBUG] [Thread-127916] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:46:27.413 [DEBUG] [Thread-127916] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T12:46:27.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T12:46:27.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:46:27.468 [DEBUG] [Thread-127916] [transport.py] [_log()] userauth is OK
2025-12-31T12:46:27.468 [DEBUG] [Thread-127916] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:46:27.469 [DEBUG] [Thread-127916] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:46:27.469 [DEBUG] [Thread-127916] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T12:46:27.469 [DEBUG] [Thread-127916] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:46:27.487 [INFO] [Thread-127916] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:46:27.488 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T12:46:27.488 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:46:28.342 [DEBUG] [Thread-127916] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:46:28.342 [DEBUG] [Thread-127916] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:46:28.390 [DEBUG] [Thread-127916] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:46:28.391 [DEBUG] [Thread-127916] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:46:28.400 [DEBUG] [Thread-127916] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:46:28.409 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:46:28.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T12:46:28.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T12:46:28.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:46:28.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:46:28.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:46:28.440 [DEBUG] [Thread-127916] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:46:29.535 [DEBUG] [Thread-127918 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:46:44.588 [DEBUG] [Thread-127919 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:46:44.809 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:46:44.810 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:46:58.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T12:46:58.441 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T12:46:58.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T12:46:59.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 12, 46, 46), 36.02, 8.57, 0.0, 22.9, 26.45, 0, 0, 0, 2, 0, 0),)
2025-12-31T12:46:59.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 12:46:46
2025-12-31T12:46:59.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T12:46:59.445 [DEBUG] [Thread-127920] [transport.py] [_log()] starting thread (client mode): 0xb6b01db0
2025-12-31T12:46:59.445 [DEBUG] [Thread-127920] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:46:59.465 [DEBUG] [Thread-127920] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T12:46:59.465 [INFO] [Thread-127920] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T12:46:59.468 [DEBUG] [Thread-127920] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:46:59.468 [DEBUG] [Thread-127920] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T12:46:59.468 [DEBUG] [Thread-127920] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:46:59.468 [DEBUG] [Thread-127920] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:46:59.468 [DEBUG] [Thread-127920] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:46:59.468 [DEBUG] [Thread-127920] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:46:59.468 [DEBUG] [Thread-127920] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:46:59.468 [DEBUG] [Thread-127920] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:46:59.468 [DEBUG] [Thread-127920] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:46:59.468 [DEBUG] [Thread-127920] [transport.py] [_log()] client lang: <none>
2025-12-31T12:46:59.468 [DEBUG] [Thread-127920] [transport.py] [_log()] server lang: <none>
2025-12-31T12:46:59.468 [DEBUG] [Thread-127920] [transport.py] [_log()] kex follows: False
2025-12-31T12:46:59.468 [DEBUG] [Thread-127920] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:46:59.468 [DEBUG] [Thread-127920] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:46:59.468 [DEBUG] [Thread-127920] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:46:59.468 [DEBUG] [Thread-127920] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:46:59.468 [DEBUG] [Thread-127920] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:46:59.468 [DEBUG] [Thread-127920] [transport.py] [_log()] Compression: none
2025-12-31T12:46:59.468 [DEBUG] [Thread-127920] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:46:59.482 [DEBUG] [Thread-127920] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:46:59.483 [DEBUG] [Thread-127920] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:46:59.483 [DEBUG] [Thread-127920] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T12:46:59.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T12:46:59.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:46:59.483 [DEBUG] [Thread-127920] [transport.py] [_log()] userauth is OK
2025-12-31T12:46:59.483 [DEBUG] [Thread-127920] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:46:59.483 [DEBUG] [Thread-127920] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:46:59.484 [DEBUG] [Thread-127920] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T12:46:59.484 [DEBUG] [Thread-127920] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:46:59.492 [INFO] [Thread-127920] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:46:59.493 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:46:59.620 [DEBUG] [Thread-127922 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:47:00.146 [DEBUG] [Thread-127920] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:47:00.147 [DEBUG] [Thread-127920] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:47:00.147 [DEBUG] [Thread-127920] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T12:47:00.187 [DEBUG] [Thread-127920] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:47:00.188 [DEBUG] [Thread-127920] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:47:00.190 [DEBUG] [Thread-127920] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:47:00.202 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:47:00.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T12:47:00.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T12:47:00.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T12:47:00.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:47:00.213 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T12:47:00.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:47:00.213 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:47:00.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T12:47:00.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.448754 -999.00  +25.90  27.35     13   -3.70 1 2 1 1 1   888    0 27.44 -72.35 ----- 25.5 27.4 276.8 34.7 31.9 -24.2 31.5 -21.2 30.6 -20.8 31.5 -21.0
2025-12-31T12:47:00.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T12:47:00.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T12:47:00.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.448754
2025-12-31T12:47:00.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T12:47:00.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T12:47:00.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T12:47:00.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T12:47:00.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T12:47:00.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T12:46:46', tmtdew=36.02, humidity=8.57, cloud=0.0, wind=22.9, temperature=26.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T10:46:12.346', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T12:47:00.215 [DEBUG] [Thread-127920] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:47:00.309 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T12:47:00.325 [DEBUG] [Thread-127924] [transport.py] [_log()] starting thread (client mode): 0xb6b22d70
2025-12-31T12:47:00.326 [DEBUG] [Thread-127924] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:47:00.340 [DEBUG] [Thread-127924] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T12:47:00.340 [INFO] [Thread-127924] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T12:47:00.347 [DEBUG] [Thread-127924] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:47:00.347 [DEBUG] [Thread-127924] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T12:47:00.347 [DEBUG] [Thread-127924] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:47:00.347 [DEBUG] [Thread-127924] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:47:00.347 [DEBUG] [Thread-127924] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:47:00.347 [DEBUG] [Thread-127924] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:47:00.347 [DEBUG] [Thread-127924] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:47:00.347 [DEBUG] [Thread-127924] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:47:00.347 [DEBUG] [Thread-127924] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:47:00.347 [DEBUG] [Thread-127924] [transport.py] [_log()] client lang: <none>
2025-12-31T12:47:00.348 [DEBUG] [Thread-127924] [transport.py] [_log()] server lang: <none>
2025-12-31T12:47:00.348 [DEBUG] [Thread-127924] [transport.py] [_log()] kex follows: False
2025-12-31T12:47:00.348 [DEBUG] [Thread-127924] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:47:00.348 [DEBUG] [Thread-127924] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:47:00.348 [DEBUG] [Thread-127924] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:47:00.348 [DEBUG] [Thread-127924] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:47:00.348 [DEBUG] [Thread-127924] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:47:00.348 [DEBUG] [Thread-127924] [transport.py] [_log()] Compression: none
2025-12-31T12:47:00.348 [DEBUG] [Thread-127924] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:47:00.407 [DEBUG] [Thread-127924] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:47:00.407 [DEBUG] [Thread-127924] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:47:00.408 [DEBUG] [Thread-127924] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T12:47:00.408 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T12:47:00.408 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:47:00.463 [DEBUG] [Thread-127924] [transport.py] [_log()] userauth is OK
2025-12-31T12:47:00.464 [DEBUG] [Thread-127924] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:47:00.464 [DEBUG] [Thread-127924] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:47:00.464 [DEBUG] [Thread-127924] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T12:47:00.464 [DEBUG] [Thread-127924] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:47:00.485 [INFO] [Thread-127924] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:47:00.486 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T12:47:00.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:47:01.330 [DEBUG] [Thread-127924] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:47:01.330 [DEBUG] [Thread-127924] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:47:01.379 [DEBUG] [Thread-127924] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:47:01.379 [DEBUG] [Thread-127924] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:47:01.388 [DEBUG] [Thread-127924] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:47:01.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:47:01.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T12:47:01.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T12:47:01.413 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:47:01.414 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:47:01.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:47:01.421 [DEBUG] [Thread-127924] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:47:13.269 [DEBUG] [Thread-127926 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:47:14.657 [DEBUG] [Thread-127927 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:47:29.710 [DEBUG] [Thread-127928 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:47:31.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T12:47:31.445 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T12:47:31.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-12-31T12:47:32.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 12, 47, 18), 36.11, 8.5, 0.0, 24.53, 26.4, 0, 0, 0, 2, 0, 0),)
2025-12-31T12:47:32.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 12:47:18
2025-12-31T12:47:32.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T12:47:32.435 [DEBUG] [Thread-127929] [transport.py] [_log()] starting thread (client mode): 0xb6bb2350
2025-12-31T12:47:32.435 [DEBUG] [Thread-127929] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:47:32.457 [DEBUG] [Thread-127929] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T12:47:32.458 [INFO] [Thread-127929] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T12:47:32.461 [DEBUG] [Thread-127929] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:47:32.461 [DEBUG] [Thread-127929] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T12:47:32.461 [DEBUG] [Thread-127929] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:47:32.462 [DEBUG] [Thread-127929] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:47:32.462 [DEBUG] [Thread-127929] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:47:32.462 [DEBUG] [Thread-127929] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:47:32.462 [DEBUG] [Thread-127929] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:47:32.462 [DEBUG] [Thread-127929] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:47:32.462 [DEBUG] [Thread-127929] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:47:32.462 [DEBUG] [Thread-127929] [transport.py] [_log()] client lang: <none>
2025-12-31T12:47:32.462 [DEBUG] [Thread-127929] [transport.py] [_log()] server lang: <none>
2025-12-31T12:47:32.462 [DEBUG] [Thread-127929] [transport.py] [_log()] kex follows: False
2025-12-31T12:47:32.462 [DEBUG] [Thread-127929] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:47:32.462 [DEBUG] [Thread-127929] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:47:32.462 [DEBUG] [Thread-127929] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:47:32.463 [DEBUG] [Thread-127929] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:47:32.463 [DEBUG] [Thread-127929] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:47:32.463 [DEBUG] [Thread-127929] [transport.py] [_log()] Compression: none
2025-12-31T12:47:32.463 [DEBUG] [Thread-127929] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:47:32.483 [DEBUG] [Thread-127929] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:47:32.484 [DEBUG] [Thread-127929] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:47:32.484 [DEBUG] [Thread-127929] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T12:47:32.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T12:47:32.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:47:32.485 [DEBUG] [Thread-127929] [transport.py] [_log()] userauth is OK
2025-12-31T12:47:32.485 [DEBUG] [Thread-127929] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:47:32.485 [DEBUG] [Thread-127929] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:47:32.485 [DEBUG] [Thread-127929] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T12:47:32.485 [DEBUG] [Thread-127929] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:47:32.495 [INFO] [Thread-127929] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:47:32.495 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:47:33.252 [DEBUG] [Thread-127929] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:47:33.252 [DEBUG] [Thread-127929] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:47:33.252 [DEBUG] [Thread-127929] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T12:47:33.292 [DEBUG] [Thread-127929] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:47:33.292 [DEBUG] [Thread-127929] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:47:33.295 [DEBUG] [Thread-127929] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:47:33.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:47:33.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T12:47:33.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T12:47:33.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T12:47:33.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:47:33.312 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T12:47:33.312 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:47:33.312 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:47:33.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T12:47:33.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.449101 -999.00  +25.40  16.69     14   -3.70 1 2 1 1 1   888    0 28.10 -70.12 ----- 25.1 16.7 292.6 27.6 32.0 -20.4 31.4 -20.9 30.4 -18.3 31.5 -18.1
2025-12-31T12:47:33.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T12:47:33.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T12:47:33.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.449101
2025-12-31T12:47:33.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T12:47:33.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T12:47:33.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T12:47:33.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T12:47:33.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T12:47:33.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T12:47:18', tmtdew=36.11, humidity=8.5, cloud=0.0, wind=24.53, temperature=26.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T10:46:42.326', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T12:47:33.314 [DEBUG] [Thread-127929] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:47:33.387 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T12:47:33.399 [DEBUG] [Thread-127932] [transport.py] [_log()] starting thread (client mode): 0xb6bb09d0
2025-12-31T12:47:33.399 [DEBUG] [Thread-127932] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:47:33.414 [DEBUG] [Thread-127932] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T12:47:33.414 [INFO] [Thread-127932] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T12:47:33.422 [DEBUG] [Thread-127932] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:47:33.422 [DEBUG] [Thread-127932] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T12:47:33.422 [DEBUG] [Thread-127932] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:47:33.422 [DEBUG] [Thread-127932] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:47:33.422 [DEBUG] [Thread-127932] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:47:33.422 [DEBUG] [Thread-127932] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:47:33.422 [DEBUG] [Thread-127932] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:47:33.422 [DEBUG] [Thread-127932] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:47:33.422 [DEBUG] [Thread-127932] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:47:33.422 [DEBUG] [Thread-127932] [transport.py] [_log()] client lang: <none>
2025-12-31T12:47:33.422 [DEBUG] [Thread-127932] [transport.py] [_log()] server lang: <none>
2025-12-31T12:47:33.422 [DEBUG] [Thread-127932] [transport.py] [_log()] kex follows: False
2025-12-31T12:47:33.422 [DEBUG] [Thread-127932] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:47:33.422 [DEBUG] [Thread-127932] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:47:33.422 [DEBUG] [Thread-127932] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:47:33.422 [DEBUG] [Thread-127932] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:47:33.422 [DEBUG] [Thread-127932] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:47:33.422 [DEBUG] [Thread-127932] [transport.py] [_log()] Compression: none
2025-12-31T12:47:33.422 [DEBUG] [Thread-127932] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:47:33.478 [DEBUG] [Thread-127932] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:47:33.478 [DEBUG] [Thread-127932] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:47:33.478 [DEBUG] [Thread-127932] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T12:47:33.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T12:47:33.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:47:33.535 [DEBUG] [Thread-127932] [transport.py] [_log()] userauth is OK
2025-12-31T12:47:33.535 [DEBUG] [Thread-127932] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:47:33.535 [DEBUG] [Thread-127932] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:47:33.535 [DEBUG] [Thread-127932] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T12:47:33.535 [DEBUG] [Thread-127932] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:47:33.549 [INFO] [Thread-127932] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:47:33.549 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T12:47:33.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:47:34.418 [DEBUG] [Thread-127932] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:47:34.419 [DEBUG] [Thread-127932] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:47:34.467 [DEBUG] [Thread-127932] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:47:34.467 [DEBUG] [Thread-127932] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:47:34.476 [DEBUG] [Thread-127932] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:47:34.484 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:47:34.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T12:47:34.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T12:47:34.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:47:34.500 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:47:34.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:47:34.508 [DEBUG] [Thread-127932] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:47:44.744 [DEBUG] [Thread-127934 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:47:44.950 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:47:44.951 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:47:59.795 [DEBUG] [Thread-127935 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:48:04.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T12:48:04.530 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T12:48:04.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T12:48:05.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 12, 47, 50), 35.37, 9.2, 0.0, 24.6, 26.02, 0, 0, 0, 2, 0, 0),)
2025-12-31T12:48:05.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 12:47:50
2025-12-31T12:48:05.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T12:48:05.526 [DEBUG] [Thread-127936] [transport.py] [_log()] starting thread (client mode): 0xb6bb0820
2025-12-31T12:48:05.526 [DEBUG] [Thread-127936] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:48:05.546 [DEBUG] [Thread-127936] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T12:48:05.546 [INFO] [Thread-127936] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T12:48:05.549 [DEBUG] [Thread-127936] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:48:05.549 [DEBUG] [Thread-127936] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T12:48:05.549 [DEBUG] [Thread-127936] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:48:05.549 [DEBUG] [Thread-127936] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:48:05.549 [DEBUG] [Thread-127936] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:48:05.549 [DEBUG] [Thread-127936] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:48:05.549 [DEBUG] [Thread-127936] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:48:05.549 [DEBUG] [Thread-127936] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:48:05.549 [DEBUG] [Thread-127936] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:48:05.549 [DEBUG] [Thread-127936] [transport.py] [_log()] client lang: <none>
2025-12-31T12:48:05.549 [DEBUG] [Thread-127936] [transport.py] [_log()] server lang: <none>
2025-12-31T12:48:05.549 [DEBUG] [Thread-127936] [transport.py] [_log()] kex follows: False
2025-12-31T12:48:05.549 [DEBUG] [Thread-127936] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:48:05.549 [DEBUG] [Thread-127936] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:48:05.549 [DEBUG] [Thread-127936] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:48:05.549 [DEBUG] [Thread-127936] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:48:05.549 [DEBUG] [Thread-127936] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:48:05.549 [DEBUG] [Thread-127936] [transport.py] [_log()] Compression: none
2025-12-31T12:48:05.549 [DEBUG] [Thread-127936] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:48:05.567 [DEBUG] [Thread-127936] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:48:05.568 [DEBUG] [Thread-127936] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:48:05.568 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T12:48:05.569 [DEBUG] [Thread-127936] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T12:48:05.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:48:05.571 [DEBUG] [Thread-127936] [transport.py] [_log()] userauth is OK
2025-12-31T12:48:05.571 [DEBUG] [Thread-127936] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:48:05.571 [DEBUG] [Thread-127936] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:48:05.571 [DEBUG] [Thread-127936] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T12:48:05.571 [DEBUG] [Thread-127936] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:48:05.584 [INFO] [Thread-127936] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:48:05.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:48:06.174 [DEBUG] [Thread-127936] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:48:06.175 [DEBUG] [Thread-127936] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:48:06.175 [DEBUG] [Thread-127936] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T12:48:06.215 [DEBUG] [Thread-127936] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:48:06.216 [DEBUG] [Thread-127936] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:48:06.219 [DEBUG] [Thread-127936] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:48:06.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:48:06.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T12:48:06.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T12:48:06.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T12:48:06.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:48:06.248 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T12:48:06.248 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:48:06.248 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:48:06.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T12:48:06.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.449448 -999.00  +25.20  20.53     14   -3.60 1 2 1 1 1   888    0 27.59 -67.51 ----- 19.7 20.5 273.6 35.5 31.8 -22.2 31.4 -19.7 30.3 -22.0 31.3 -19.8
2025-12-31T12:48:06.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T12:48:06.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T12:48:06.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.449448
2025-12-31T12:48:06.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T12:48:06.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T12:48:06.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T12:48:06.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T12:48:06.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T12:48:06.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T12:47:50', tmtdew=35.37, humidity=9.2, cloud=0.0, wind=24.6, temperature=26.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T10:47:12.307', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T12:48:06.251 [DEBUG] [Thread-127936] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:48:06.332 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T12:48:06.344 [DEBUG] [Thread-127939] [transport.py] [_log()] starting thread (client mode): 0xb95b3b50
2025-12-31T12:48:06.345 [DEBUG] [Thread-127939] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:48:06.360 [DEBUG] [Thread-127939] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T12:48:06.360 [INFO] [Thread-127939] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T12:48:06.367 [DEBUG] [Thread-127939] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:48:06.368 [DEBUG] [Thread-127939] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T12:48:06.368 [DEBUG] [Thread-127939] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:48:06.368 [DEBUG] [Thread-127939] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:48:06.368 [DEBUG] [Thread-127939] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:48:06.368 [DEBUG] [Thread-127939] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:48:06.368 [DEBUG] [Thread-127939] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:48:06.368 [DEBUG] [Thread-127939] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:48:06.369 [DEBUG] [Thread-127939] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:48:06.369 [DEBUG] [Thread-127939] [transport.py] [_log()] client lang: <none>
2025-12-31T12:48:06.369 [DEBUG] [Thread-127939] [transport.py] [_log()] server lang: <none>
2025-12-31T12:48:06.369 [DEBUG] [Thread-127939] [transport.py] [_log()] kex follows: False
2025-12-31T12:48:06.369 [DEBUG] [Thread-127939] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:48:06.369 [DEBUG] [Thread-127939] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:48:06.369 [DEBUG] [Thread-127939] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:48:06.369 [DEBUG] [Thread-127939] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:48:06.370 [DEBUG] [Thread-127939] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:48:06.370 [DEBUG] [Thread-127939] [transport.py] [_log()] Compression: none
2025-12-31T12:48:06.370 [DEBUG] [Thread-127939] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:48:06.431 [DEBUG] [Thread-127939] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:48:06.431 [DEBUG] [Thread-127939] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:48:06.432 [DEBUG] [Thread-127939] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T12:48:06.433 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T12:48:06.433 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:48:06.487 [DEBUG] [Thread-127939] [transport.py] [_log()] userauth is OK
2025-12-31T12:48:06.487 [DEBUG] [Thread-127939] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:48:06.487 [DEBUG] [Thread-127939] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:48:06.487 [DEBUG] [Thread-127939] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T12:48:06.487 [DEBUG] [Thread-127939] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:48:06.506 [INFO] [Thread-127939] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:48:06.506 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T12:48:06.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:48:07.366 [DEBUG] [Thread-127939] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:48:07.366 [DEBUG] [Thread-127939] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:48:07.414 [DEBUG] [Thread-127939] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:48:07.414 [DEBUG] [Thread-127939] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:48:07.424 [DEBUG] [Thread-127939] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:48:07.433 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:48:07.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-12-31T12:48:07.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T12:48:07.451 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:48:07.452 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:48:07.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:48:07.460 [DEBUG] [Thread-127939] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:48:13.326 [DEBUG] [Thread-127941 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:48:14.826 [DEBUG] [Thread-127942 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:48:29.864 [DEBUG] [Thread-127943 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:48:37.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T12:48:37.483 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T12:48:37.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T12:48:38.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 12, 48, 22), 35.24, 9.27, 0.0, 22.97, 25.92, 0, 0, 0, 2, 0, 0),)
2025-12-31T12:48:38.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 12:48:22
2025-12-31T12:48:38.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T12:48:38.472 [DEBUG] [Thread-127944] [transport.py] [_log()] starting thread (client mode): 0xbbfcdab0
2025-12-31T12:48:38.472 [DEBUG] [Thread-127944] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:48:38.492 [DEBUG] [Thread-127944] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T12:48:38.492 [INFO] [Thread-127944] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T12:48:38.493 [DEBUG] [Thread-127944] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:48:38.493 [DEBUG] [Thread-127944] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T12:48:38.493 [DEBUG] [Thread-127944] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:48:38.493 [DEBUG] [Thread-127944] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:48:38.493 [DEBUG] [Thread-127944] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:48:38.493 [DEBUG] [Thread-127944] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:48:38.493 [DEBUG] [Thread-127944] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:48:38.493 [DEBUG] [Thread-127944] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:48:38.493 [DEBUG] [Thread-127944] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:48:38.493 [DEBUG] [Thread-127944] [transport.py] [_log()] client lang: <none>
2025-12-31T12:48:38.493 [DEBUG] [Thread-127944] [transport.py] [_log()] server lang: <none>
2025-12-31T12:48:38.493 [DEBUG] [Thread-127944] [transport.py] [_log()] kex follows: False
2025-12-31T12:48:38.493 [DEBUG] [Thread-127944] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:48:38.493 [DEBUG] [Thread-127944] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:48:38.493 [DEBUG] [Thread-127944] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:48:38.493 [DEBUG] [Thread-127944] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:48:38.493 [DEBUG] [Thread-127944] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:48:38.493 [DEBUG] [Thread-127944] [transport.py] [_log()] Compression: none
2025-12-31T12:48:38.493 [DEBUG] [Thread-127944] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:48:38.510 [DEBUG] [Thread-127944] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:48:38.511 [DEBUG] [Thread-127944] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:48:38.511 [DEBUG] [Thread-127944] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T12:48:38.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T12:48:38.512 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:48:38.513 [DEBUG] [Thread-127944] [transport.py] [_log()] userauth is OK
2025-12-31T12:48:38.513 [DEBUG] [Thread-127944] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:48:38.513 [DEBUG] [Thread-127944] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:48:38.513 [DEBUG] [Thread-127944] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T12:48:38.513 [DEBUG] [Thread-127944] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:48:38.532 [INFO] [Thread-127944] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:48:38.533 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:48:39.282 [DEBUG] [Thread-127944] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:48:39.283 [DEBUG] [Thread-127944] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:48:39.283 [DEBUG] [Thread-127944] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T12:48:39.324 [DEBUG] [Thread-127944] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:48:39.324 [DEBUG] [Thread-127944] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:48:39.328 [DEBUG] [Thread-127944] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:48:39.348 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:48:39.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T12:48:39.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T12:48:39.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T12:48:39.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:48:39.361 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T12:48:39.361 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:48:39.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:48:39.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T12:48:39.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.450143 -999.00  +25.80  21.44     14   -3.00 1 2 1 1 1   888    0 27.19 -75.22 ----- 27.1 21.4 277.6 27.5 31.9 -22.8 31.3 -21.0 30.7 -19.3 31.4 -21.1
2025-12-31T12:48:39.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T12:48:39.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T12:48:39.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.450143
2025-12-31T12:48:39.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T12:48:39.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T12:48:39.363 [DEBUG] [Thread-127944] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:48:39.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T12:48:39.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T12:48:39.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T12:48:39.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T12:48:22', tmtdew=35.24, humidity=9.27, cloud=0.0, wind=22.97, temperature=25.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T10:48:12.355', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T12:48:39.447 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T12:48:39.459 [DEBUG] [Thread-127947] [transport.py] [_log()] starting thread (client mode): 0xbbfce9b0
2025-12-31T12:48:39.459 [DEBUG] [Thread-127947] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:48:39.475 [DEBUG] [Thread-127947] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T12:48:39.475 [INFO] [Thread-127947] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T12:48:39.482 [DEBUG] [Thread-127947] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:48:39.483 [DEBUG] [Thread-127947] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T12:48:39.483 [DEBUG] [Thread-127947] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:48:39.483 [DEBUG] [Thread-127947] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:48:39.483 [DEBUG] [Thread-127947] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:48:39.483 [DEBUG] [Thread-127947] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:48:39.483 [DEBUG] [Thread-127947] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:48:39.483 [DEBUG] [Thread-127947] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:48:39.483 [DEBUG] [Thread-127947] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:48:39.483 [DEBUG] [Thread-127947] [transport.py] [_log()] client lang: <none>
2025-12-31T12:48:39.483 [DEBUG] [Thread-127947] [transport.py] [_log()] server lang: <none>
2025-12-31T12:48:39.483 [DEBUG] [Thread-127947] [transport.py] [_log()] kex follows: False
2025-12-31T12:48:39.483 [DEBUG] [Thread-127947] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:48:39.483 [DEBUG] [Thread-127947] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:48:39.483 [DEBUG] [Thread-127947] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:48:39.484 [DEBUG] [Thread-127947] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:48:39.484 [DEBUG] [Thread-127947] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:48:39.484 [DEBUG] [Thread-127947] [transport.py] [_log()] Compression: none
2025-12-31T12:48:39.484 [DEBUG] [Thread-127947] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:48:39.548 [DEBUG] [Thread-127947] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:48:39.548 [DEBUG] [Thread-127947] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:48:39.549 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T12:48:39.549 [DEBUG] [Thread-127947] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T12:48:39.550 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:48:39.607 [DEBUG] [Thread-127947] [transport.py] [_log()] userauth is OK
2025-12-31T12:48:39.607 [DEBUG] [Thread-127947] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:48:39.607 [DEBUG] [Thread-127947] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:48:39.608 [DEBUG] [Thread-127947] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T12:48:39.608 [DEBUG] [Thread-127947] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:48:39.627 [INFO] [Thread-127947] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:48:39.627 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T12:48:39.628 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:48:40.492 [DEBUG] [Thread-127947] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:48:40.492 [DEBUG] [Thread-127947] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:48:40.540 [DEBUG] [Thread-127947] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:48:40.540 [DEBUG] [Thread-127947] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:48:40.549 [DEBUG] [Thread-127947] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:48:40.558 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:48:40.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T12:48:40.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T12:48:40.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:48:40.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:48:40.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:48:40.584 [DEBUG] [Thread-127947] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:48:44.906 [DEBUG] [Thread-127949 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:48:45.091 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:48:45.092 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:48:59.956 [DEBUG] [Thread-127950 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:49:10.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T12:49:10.606 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T12:49: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-12-31T12:49:11.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 12, 48, 54), 34.86, 9.35, 0.0, 27.86, 26.22, 0, 0, 0, 2, 0, 0),)
2025-12-31T12:49:11.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 12:48:54
2025-12-31T12:49:11.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T12:49:11.600 [DEBUG] [Thread-127951] [transport.py] [_log()] starting thread (client mode): 0xb95b1b10
2025-12-31T12:49:11.600 [DEBUG] [Thread-127951] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:49:11.620 [DEBUG] [Thread-127951] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T12:49:11.620 [INFO] [Thread-127951] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T12:49:11.623 [DEBUG] [Thread-127951] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:49:11.623 [DEBUG] [Thread-127951] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T12:49:11.623 [DEBUG] [Thread-127951] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:49:11.623 [DEBUG] [Thread-127951] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:49:11.624 [DEBUG] [Thread-127951] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:49:11.624 [DEBUG] [Thread-127951] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:49:11.624 [DEBUG] [Thread-127951] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:49:11.624 [DEBUG] [Thread-127951] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:49:11.624 [DEBUG] [Thread-127951] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:49:11.624 [DEBUG] [Thread-127951] [transport.py] [_log()] client lang: <none>
2025-12-31T12:49:11.624 [DEBUG] [Thread-127951] [transport.py] [_log()] server lang: <none>
2025-12-31T12:49:11.624 [DEBUG] [Thread-127951] [transport.py] [_log()] kex follows: False
2025-12-31T12:49:11.624 [DEBUG] [Thread-127951] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:49:11.624 [DEBUG] [Thread-127951] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:49:11.624 [DEBUG] [Thread-127951] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:49:11.624 [DEBUG] [Thread-127951] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:49:11.624 [DEBUG] [Thread-127951] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:49:11.624 [DEBUG] [Thread-127951] [transport.py] [_log()] Compression: none
2025-12-31T12:49:11.624 [DEBUG] [Thread-127951] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:49:11.642 [DEBUG] [Thread-127951] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:49:11.642 [DEBUG] [Thread-127951] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:49:11.643 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T12:49:11.643 [DEBUG] [Thread-127951] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T12:49:11.644 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:49:11.645 [DEBUG] [Thread-127951] [transport.py] [_log()] userauth is OK
2025-12-31T12:49:11.645 [DEBUG] [Thread-127951] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:49:11.645 [DEBUG] [Thread-127951] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:49:11.645 [DEBUG] [Thread-127951] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T12:49:11.645 [DEBUG] [Thread-127951] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:49:11.671 [INFO] [Thread-127951] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:49:11.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:49:12.317 [DEBUG] [Thread-127951] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:49:12.317 [DEBUG] [Thread-127951] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:49:12.317 [DEBUG] [Thread-127951] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T12:49:12.358 [DEBUG] [Thread-127951] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:49:12.358 [DEBUG] [Thread-127951] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:49:12.360 [DEBUG] [Thread-127951] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:49:12.374 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:49:12.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T12:49:12.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T12:49:12.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T12:49:12.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:49:12.383 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T12:49:12.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:49:12.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:49:12.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T12:49:12.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.450490 -999.00  +25.40  29.50     15   -3.00 1 2 1 1 1   888    0 27.17 -71.81 ----- 25.6 29.5 276.8 33.7 31.6 -23.7 31.2 -23.2 30.2 -22.1 31.1 -20.5
2025-12-31T12:49:12.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T12:49:12.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T12:49:12.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.450490
2025-12-31T12:49:12.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T12:49:12.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T12:49:12.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T12:49:12.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T12:49:12.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T12:49:12.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T12:48:54', tmtdew=34.86, humidity=9.35, cloud=0.0, wind=27.86, temperature=26.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T10:48:42.336', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T12:49:12.385 [DEBUG] [Thread-127951] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:49:12.470 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T12:49:12.482 [DEBUG] [Thread-127954] [transport.py] [_log()] starting thread (client mode): 0xb6bb1c00
2025-12-31T12:49:12.482 [DEBUG] [Thread-127954] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:49:12.496 [DEBUG] [Thread-127954] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T12:49:12.497 [INFO] [Thread-127954] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T12:49:12.504 [DEBUG] [Thread-127954] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:49:12.504 [DEBUG] [Thread-127954] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T12:49:12.504 [DEBUG] [Thread-127954] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:49:12.504 [DEBUG] [Thread-127954] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:49:12.504 [DEBUG] [Thread-127954] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:49:12.504 [DEBUG] [Thread-127954] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:49:12.504 [DEBUG] [Thread-127954] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:49:12.504 [DEBUG] [Thread-127954] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:49:12.505 [DEBUG] [Thread-127954] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:49:12.505 [DEBUG] [Thread-127954] [transport.py] [_log()] client lang: <none>
2025-12-31T12:49:12.505 [DEBUG] [Thread-127954] [transport.py] [_log()] server lang: <none>
2025-12-31T12:49:12.505 [DEBUG] [Thread-127954] [transport.py] [_log()] kex follows: False
2025-12-31T12:49:12.505 [DEBUG] [Thread-127954] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:49:12.505 [DEBUG] [Thread-127954] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:49:12.505 [DEBUG] [Thread-127954] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:49:12.505 [DEBUG] [Thread-127954] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:49:12.505 [DEBUG] [Thread-127954] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:49:12.505 [DEBUG] [Thread-127954] [transport.py] [_log()] Compression: none
2025-12-31T12:49:12.505 [DEBUG] [Thread-127954] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:49:12.561 [DEBUG] [Thread-127954] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:49:12.562 [DEBUG] [Thread-127954] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:49:12.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T12:49:12.563 [DEBUG] [Thread-127954] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T12:49:12.563 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:49:12.621 [DEBUG] [Thread-127954] [transport.py] [_log()] userauth is OK
2025-12-31T12:49:12.621 [DEBUG] [Thread-127954] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:49:12.621 [DEBUG] [Thread-127954] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:49:12.621 [DEBUG] [Thread-127954] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T12:49:12.621 [DEBUG] [Thread-127954] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:49:12.643 [INFO] [Thread-127954] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:49:12.643 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T12:49:12.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:49:13.371 [DEBUG] [Thread-127956 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:49:13.464 [DEBUG] [Thread-127954] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:49:13.464 [DEBUG] [Thread-127954] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:49:13.511 [DEBUG] [Thread-127954] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:49:13.511 [DEBUG] [Thread-127954] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:49:13.519 [DEBUG] [Thread-127954] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:49:13.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:49:13.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-12-31T12:49:13.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T12:49:13.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:49:13.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:49:13.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:49:13.556 [DEBUG] [Thread-127954] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:49:14.991 [DEBUG] [Thread-127957 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:49:30.052 [DEBUG] [Thread-127958 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:49:43.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T12:49:43.555 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T12:49:43.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T12:49:44.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 12, 49, 26), 34.62, 9.53, 0.0, 27.47, 26.32, 0, 0, 0, 2, 0, 0),)
2025-12-31T12:49:44.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 12:49:26
2025-12-31T12:49:44.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T12:49:44.534 [DEBUG] [Thread-127959] [transport.py] [_log()] starting thread (client mode): 0xbbfcdc30
2025-12-31T12:49:44.534 [DEBUG] [Thread-127959] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:49:44.555 [DEBUG] [Thread-127959] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T12:49:44.555 [INFO] [Thread-127959] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T12:49:44.557 [DEBUG] [Thread-127959] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:49:44.557 [DEBUG] [Thread-127959] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T12:49:44.557 [DEBUG] [Thread-127959] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:49:44.557 [DEBUG] [Thread-127959] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:49:44.557 [DEBUG] [Thread-127959] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:49:44.557 [DEBUG] [Thread-127959] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:49:44.557 [DEBUG] [Thread-127959] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:49:44.558 [DEBUG] [Thread-127959] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:49:44.558 [DEBUG] [Thread-127959] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:49:44.558 [DEBUG] [Thread-127959] [transport.py] [_log()] client lang: <none>
2025-12-31T12:49:44.558 [DEBUG] [Thread-127959] [transport.py] [_log()] server lang: <none>
2025-12-31T12:49:44.558 [DEBUG] [Thread-127959] [transport.py] [_log()] kex follows: False
2025-12-31T12:49:44.558 [DEBUG] [Thread-127959] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:49:44.558 [DEBUG] [Thread-127959] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:49:44.558 [DEBUG] [Thread-127959] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:49:44.558 [DEBUG] [Thread-127959] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:49:44.558 [DEBUG] [Thread-127959] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:49:44.558 [DEBUG] [Thread-127959] [transport.py] [_log()] Compression: none
2025-12-31T12:49:44.558 [DEBUG] [Thread-127959] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:49:44.570 [DEBUG] [Thread-127959] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:49:44.571 [DEBUG] [Thread-127959] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:49:44.571 [DEBUG] [Thread-127959] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T12:49:44.572 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T12:49:44.572 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:49:44.573 [DEBUG] [Thread-127959] [transport.py] [_log()] userauth is OK
2025-12-31T12:49:44.573 [DEBUG] [Thread-127959] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:49:44.574 [DEBUG] [Thread-127959] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:49:44.574 [DEBUG] [Thread-127959] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T12:49:44.574 [DEBUG] [Thread-127959] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:49:44.598 [INFO] [Thread-127959] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:49:44.598 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:49:45.085 [DEBUG] [Thread-127961 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:49:45.229 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:49:45.231 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:49:45.346 [DEBUG] [Thread-127959] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:49:45.347 [DEBUG] [Thread-127959] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:49:45.347 [DEBUG] [Thread-127959] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T12:49:45.387 [DEBUG] [Thread-127959] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:49:45.387 [DEBUG] [Thread-127959] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:49:45.390 [DEBUG] [Thread-127959] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:49:45.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:49:45.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T12:49:45.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T12:49:45.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T12:49:45.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:49:45.413 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T12:49:45.413 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:49:45.413 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:49:45.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T12:49:45.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.450837 -999.00  +25.00  27.51     15   -3.00 1 1 1 1 1   888    0 27.74 -74.36 ----- 24.2 27.5 272.4 30.9 31.4 -23.8 31.1 -22.7 30.0 -24.1 31.0 -21.5
2025-12-31T12:49:45.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T12:49:45.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T12:49:45.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.450837
2025-12-31T12:49:45.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T12:49:45.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T12:49:45.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T12:49:45.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T12:49:45.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T12:49:45.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T12:49:26', tmtdew=34.62, humidity=9.53, cloud=0.0, wind=27.47, temperature=26.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T10:49:12.317', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T12:49:45.416 [DEBUG] [Thread-127959] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:49:45.503 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T12:49:45.514 [DEBUG] [Thread-127963] [transport.py] [_log()] starting thread (client mode): 0xbbfcd330
2025-12-31T12:49:45.514 [DEBUG] [Thread-127963] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:49:45.528 [DEBUG] [Thread-127963] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T12:49:45.529 [INFO] [Thread-127963] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T12:49:45.536 [DEBUG] [Thread-127963] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:49:45.536 [DEBUG] [Thread-127963] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T12:49:45.536 [DEBUG] [Thread-127963] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:49:45.536 [DEBUG] [Thread-127963] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:49:45.537 [DEBUG] [Thread-127963] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:49:45.537 [DEBUG] [Thread-127963] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:49:45.537 [DEBUG] [Thread-127963] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:49:45.537 [DEBUG] [Thread-127963] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:49:45.537 [DEBUG] [Thread-127963] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:49:45.537 [DEBUG] [Thread-127963] [transport.py] [_log()] client lang: <none>
2025-12-31T12:49:45.537 [DEBUG] [Thread-127963] [transport.py] [_log()] server lang: <none>
2025-12-31T12:49:45.537 [DEBUG] [Thread-127963] [transport.py] [_log()] kex follows: False
2025-12-31T12:49:45.537 [DEBUG] [Thread-127963] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:49:45.537 [DEBUG] [Thread-127963] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:49:45.538 [DEBUG] [Thread-127963] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:49:45.538 [DEBUG] [Thread-127963] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:49:45.538 [DEBUG] [Thread-127963] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:49:45.538 [DEBUG] [Thread-127963] [transport.py] [_log()] Compression: none
2025-12-31T12:49:45.538 [DEBUG] [Thread-127963] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:49:45.593 [DEBUG] [Thread-127963] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:49:45.593 [DEBUG] [Thread-127963] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:49:45.594 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T12:49:45.594 [DEBUG] [Thread-127963] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T12:49:45.595 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:49:45.650 [DEBUG] [Thread-127963] [transport.py] [_log()] userauth is OK
2025-12-31T12:49:45.650 [DEBUG] [Thread-127963] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:49:45.650 [DEBUG] [Thread-127963] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:49:45.650 [DEBUG] [Thread-127963] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T12:49:45.650 [DEBUG] [Thread-127963] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:49:45.670 [INFO] [Thread-127963] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:49:45.670 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T12:49:45.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:49:46.528 [DEBUG] [Thread-127963] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:49:46.529 [DEBUG] [Thread-127963] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:49:46.576 [DEBUG] [Thread-127963] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:49:46.576 [DEBUG] [Thread-127963] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:49:46.585 [DEBUG] [Thread-127963] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:49:46.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:49:46.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T12:49:46.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T12:49:46.613 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:49:46.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:49:46.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:49:46.622 [DEBUG] [Thread-127963] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:50:00.120 [DEBUG] [Thread-127965 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:50:13.427 [DEBUG] [Thread-127966 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:50:15.155 [DEBUG] [Thread-127967 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:50:16.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T12:50:16.617 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T12:50:16.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-12-31T12:50:17.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 12, 49, 58), 34.58, 9.43, 0.0, 32.62, 26.04, 0, 0, 0, 2, 0, 0),)
2025-12-31T12:50:17.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 12:49:58
2025-12-31T12:50:17.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T12:50:17.600 [DEBUG] [Thread-127968] [transport.py] [_log()] starting thread (client mode): 0xb95b0490
2025-12-31T12:50:17.601 [DEBUG] [Thread-127968] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:50:17.622 [DEBUG] [Thread-127968] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T12:50:17.623 [INFO] [Thread-127968] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T12:50:17.626 [DEBUG] [Thread-127968] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:50:17.626 [DEBUG] [Thread-127968] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T12:50:17.626 [DEBUG] [Thread-127968] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:50:17.626 [DEBUG] [Thread-127968] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:50:17.626 [DEBUG] [Thread-127968] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:50:17.626 [DEBUG] [Thread-127968] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:50:17.626 [DEBUG] [Thread-127968] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:50:17.626 [DEBUG] [Thread-127968] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:50:17.627 [DEBUG] [Thread-127968] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:50:17.627 [DEBUG] [Thread-127968] [transport.py] [_log()] client lang: <none>
2025-12-31T12:50:17.627 [DEBUG] [Thread-127968] [transport.py] [_log()] server lang: <none>
2025-12-31T12:50:17.627 [DEBUG] [Thread-127968] [transport.py] [_log()] kex follows: False
2025-12-31T12:50:17.627 [DEBUG] [Thread-127968] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:50:17.627 [DEBUG] [Thread-127968] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:50:17.627 [DEBUG] [Thread-127968] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:50:17.627 [DEBUG] [Thread-127968] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:50:17.627 [DEBUG] [Thread-127968] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:50:17.627 [DEBUG] [Thread-127968] [transport.py] [_log()] Compression: none
2025-12-31T12:50:17.627 [DEBUG] [Thread-127968] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:50:17.645 [DEBUG] [Thread-127968] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:50:17.645 [DEBUG] [Thread-127968] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:50:17.646 [DEBUG] [Thread-127968] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T12:50:17.646 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T12:50:17.647 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:50:17.648 [DEBUG] [Thread-127968] [transport.py] [_log()] userauth is OK
2025-12-31T12:50:17.648 [DEBUG] [Thread-127968] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:50:17.648 [DEBUG] [Thread-127968] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:50:17.648 [DEBUG] [Thread-127968] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T12:50:17.648 [DEBUG] [Thread-127968] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:50:17.673 [INFO] [Thread-127968] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:50:17.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:50:21.613 [DEBUG] [Thread-127968] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:50:21.614 [DEBUG] [Thread-127968] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:50:21.614 [DEBUG] [Thread-127968] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T12:50:21.655 [DEBUG] [Thread-127968] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:50:21.655 [DEBUG] [Thread-127968] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:50:21.658 [DEBUG] [Thread-127968] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:50:21.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:50:21.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T12:50:21.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T12:50:21.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T12:50:21.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:50:21.769 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T12:50:21.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:50:21.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:50:21.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T12:50:21.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.451184 -999.00  +25.00  29.79     15   -3.00 1 2 1 1 1   888    0 27.20 -79.95 ----- 28.5 29.8 276.2 35.8 31.2 -22.6 31.0 -21.6 29.8 -20.8 30.9 -20.2
2025-12-31T12:50:21.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T12:50:21.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T12:50:21.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.451184
2025-12-31T12:50:21.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T12:50:21.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T12:50:21.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T12:50:21.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T12:50:21.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T12:50:21.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T12:49:58', tmtdew=34.58, humidity=9.43, cloud=0.0, wind=32.62, temperature=26.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T10:49:42.298', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T12:50:21.772 [DEBUG] [Thread-127968] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:50:21.865 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T12:50:21.877 [DEBUG] [Thread-127971] [transport.py] [_log()] starting thread (client mode): 0xb6b179a0
2025-12-31T12:50:21.877 [DEBUG] [Thread-127971] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:50:21.891 [DEBUG] [Thread-127971] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T12:50:21.892 [INFO] [Thread-127971] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T12:50:21.899 [DEBUG] [Thread-127971] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:50:21.899 [DEBUG] [Thread-127971] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T12:50:21.899 [DEBUG] [Thread-127971] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:50:21.899 [DEBUG] [Thread-127971] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:50:21.899 [DEBUG] [Thread-127971] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:50:21.899 [DEBUG] [Thread-127971] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:50:21.899 [DEBUG] [Thread-127971] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:50:21.899 [DEBUG] [Thread-127971] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:50:21.900 [DEBUG] [Thread-127971] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:50:21.900 [DEBUG] [Thread-127971] [transport.py] [_log()] client lang: <none>
2025-12-31T12:50:21.900 [DEBUG] [Thread-127971] [transport.py] [_log()] server lang: <none>
2025-12-31T12:50:21.900 [DEBUG] [Thread-127971] [transport.py] [_log()] kex follows: False
2025-12-31T12:50:21.900 [DEBUG] [Thread-127971] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:50:21.900 [DEBUG] [Thread-127971] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:50:21.900 [DEBUG] [Thread-127971] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:50:21.900 [DEBUG] [Thread-127971] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:50:21.900 [DEBUG] [Thread-127971] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:50:21.900 [DEBUG] [Thread-127971] [transport.py] [_log()] Compression: none
2025-12-31T12:50:21.900 [DEBUG] [Thread-127971] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:50:21.958 [DEBUG] [Thread-127971] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:50:21.958 [DEBUG] [Thread-127971] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:50:21.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T12:50:21.960 [DEBUG] [Thread-127971] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T12:50:21.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:50:22.015 [DEBUG] [Thread-127971] [transport.py] [_log()] userauth is OK
2025-12-31T12:50:22.015 [DEBUG] [Thread-127971] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:50:22.015 [DEBUG] [Thread-127971] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:50:22.015 [DEBUG] [Thread-127971] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T12:50:22.015 [DEBUG] [Thread-127971] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:50:22.033 [INFO] [Thread-127971] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:50:22.034 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T12:50:22.034 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:50:22.867 [DEBUG] [Thread-127971] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:50:22.867 [DEBUG] [Thread-127971] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:50:22.915 [DEBUG] [Thread-127971] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:50:22.915 [DEBUG] [Thread-127971] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:50:22.925 [DEBUG] [Thread-127971] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:50:22.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:50:22.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T12:50:22.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T12:50:22.952 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:50:22.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:50:22.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:50:22.962 [DEBUG] [Thread-127971] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:50:30.188 [DEBUG] [Thread-127973 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:50:45.240 [DEBUG] [Thread-127974 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:50:45.372 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:50:45.373 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:50:52.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T12:50:52.984 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T12:50:52.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T12:50:53.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 12, 50, 30), 34.57, 9.45, 0.0, 35.29, 26.11, 0, 0, 0, 2, 0, 0),)
2025-12-31T12:50:53.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 12:50:30
2025-12-31T12:50:53.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T12:50:54.012 [DEBUG] [Thread-127975] [transport.py] [_log()] starting thread (client mode): 0xbbfccd60
2025-12-31T12:50:54.012 [DEBUG] [Thread-127975] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:50:54.032 [DEBUG] [Thread-127975] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T12:50:54.032 [INFO] [Thread-127975] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T12:50:54.035 [DEBUG] [Thread-127975] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:50:54.035 [DEBUG] [Thread-127975] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T12:50:54.035 [DEBUG] [Thread-127975] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:50:54.035 [DEBUG] [Thread-127975] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:50:54.035 [DEBUG] [Thread-127975] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:50:54.035 [DEBUG] [Thread-127975] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:50:54.035 [DEBUG] [Thread-127975] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:50:54.035 [DEBUG] [Thread-127975] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:50:54.035 [DEBUG] [Thread-127975] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:50:54.035 [DEBUG] [Thread-127975] [transport.py] [_log()] client lang: <none>
2025-12-31T12:50:54.035 [DEBUG] [Thread-127975] [transport.py] [_log()] server lang: <none>
2025-12-31T12:50:54.035 [DEBUG] [Thread-127975] [transport.py] [_log()] kex follows: False
2025-12-31T12:50:54.035 [DEBUG] [Thread-127975] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:50:54.035 [DEBUG] [Thread-127975] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:50:54.035 [DEBUG] [Thread-127975] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:50:54.035 [DEBUG] [Thread-127975] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:50:54.035 [DEBUG] [Thread-127975] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:50:54.035 [DEBUG] [Thread-127975] [transport.py] [_log()] Compression: none
2025-12-31T12:50:54.035 [DEBUG] [Thread-127975] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:50:54.051 [DEBUG] [Thread-127975] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:50:54.051 [DEBUG] [Thread-127975] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:50:54.051 [DEBUG] [Thread-127975] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T12:50:54.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T12:50:54.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:50:54.052 [DEBUG] [Thread-127975] [transport.py] [_log()] userauth is OK
2025-12-31T12:50:54.052 [DEBUG] [Thread-127975] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:50:54.052 [DEBUG] [Thread-127975] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:50:54.052 [DEBUG] [Thread-127975] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T12:50:54.052 [DEBUG] [Thread-127975] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:50:54.062 [INFO] [Thread-127975] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:50:54.062 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:50:54.681 [DEBUG] [Thread-127975] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:50:54.681 [DEBUG] [Thread-127975] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:50:54.682 [DEBUG] [Thread-127975] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T12:50:54.722 [DEBUG] [Thread-127975] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:50:54.722 [DEBUG] [Thread-127975] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:50:54.726 [DEBUG] [Thread-127975] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:50:54.739 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:50:54.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T12:50:54.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T12:50:54.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T12:50:54.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:50:54.752 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T12:50:54.752 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:50:54.752 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:50:54.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T12:50:54.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.451532 -999.00  +25.30  30.57     15   -2.90 1 2 2 1 1   888    0 27.42 -84.78 ----- 28.7 30.6 296.8 36.6 31.4 -22.9 30.9 -22.0 30.1 -22.7 30.9 -20.3
2025-12-31T12:50:54.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T12:50:54.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T12:50:54.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.451532
2025-12-31T12:50:54.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T12:50:54.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T12:50:54.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T12:50:54.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T12:50:54.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T12:50:54.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T12:50:30', tmtdew=34.57, humidity=9.45, cloud=0.0, wind=35.29, temperature=26.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T10:50:12.365', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T12:50:54.755 [DEBUG] [Thread-127975] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:50:54.838 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T12:50:54.850 [DEBUG] [Thread-127978] [transport.py] [_log()] starting thread (client mode): 0xb95b3ca0
2025-12-31T12:50:54.851 [DEBUG] [Thread-127978] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:50:54.865 [DEBUG] [Thread-127978] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T12:50:54.865 [INFO] [Thread-127978] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T12:50:54.873 [DEBUG] [Thread-127978] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:50:54.873 [DEBUG] [Thread-127978] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T12:50:54.873 [DEBUG] [Thread-127978] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:50:54.873 [DEBUG] [Thread-127978] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:50:54.873 [DEBUG] [Thread-127978] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:50:54.873 [DEBUG] [Thread-127978] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:50:54.873 [DEBUG] [Thread-127978] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:50:54.873 [DEBUG] [Thread-127978] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:50:54.873 [DEBUG] [Thread-127978] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:50:54.873 [DEBUG] [Thread-127978] [transport.py] [_log()] client lang: <none>
2025-12-31T12:50:54.874 [DEBUG] [Thread-127978] [transport.py] [_log()] server lang: <none>
2025-12-31T12:50:54.874 [DEBUG] [Thread-127978] [transport.py] [_log()] kex follows: False
2025-12-31T12:50:54.874 [DEBUG] [Thread-127978] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:50:54.874 [DEBUG] [Thread-127978] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:50:54.874 [DEBUG] [Thread-127978] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:50:54.874 [DEBUG] [Thread-127978] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:50:54.874 [DEBUG] [Thread-127978] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:50:54.874 [DEBUG] [Thread-127978] [transport.py] [_log()] Compression: none
2025-12-31T12:50:54.874 [DEBUG] [Thread-127978] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:50:54.934 [DEBUG] [Thread-127978] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:50:54.934 [DEBUG] [Thread-127978] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:50:54.935 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T12:50:54.936 [DEBUG] [Thread-127978] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T12:50:54.936 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:50:54.990 [DEBUG] [Thread-127978] [transport.py] [_log()] userauth is OK
2025-12-31T12:50:54.990 [DEBUG] [Thread-127978] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:50:54.991 [DEBUG] [Thread-127978] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:50:54.991 [DEBUG] [Thread-127978] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T12:50:54.991 [DEBUG] [Thread-127978] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:50:55.010 [INFO] [Thread-127978] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:50:55.010 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T12:50:55.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:50:55.815 [DEBUG] [Thread-127978] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:50:55.815 [DEBUG] [Thread-127978] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:50:55.863 [DEBUG] [Thread-127978] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:50:55.863 [DEBUG] [Thread-127978] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:50:55.872 [DEBUG] [Thread-127978] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:50:55.880 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:50:55.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T12:50:55.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-12-31T12:50:55.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:50:55.897 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:50:55.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:50:55.905 [DEBUG] [Thread-127978] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:51:00.273 [DEBUG] [Thread-127980 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:51:13.481 [DEBUG] [Thread-127981 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:51:15.325 [DEBUG] [Thread-127982 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:51:25.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T12:51:25.928 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T12:51:25.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T12:51:26.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 12, 51, 2), 34.55, 9.47, 0.0, 34.21, 26.11, 0, 0, 0, 2, 0, 0),)
2025-12-31T12:51:26.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 12:51:02
2025-12-31T12:51:26.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T12:51:26.904 [DEBUG] [Thread-127983] [transport.py] [_log()] starting thread (client mode): 0xb6bb3b80
2025-12-31T12:51:26.904 [DEBUG] [Thread-127983] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:51:26.924 [DEBUG] [Thread-127983] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T12:51:26.924 [INFO] [Thread-127983] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T12:51:26.927 [DEBUG] [Thread-127983] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:51:26.927 [DEBUG] [Thread-127983] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T12:51:26.927 [DEBUG] [Thread-127983] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:51:26.927 [DEBUG] [Thread-127983] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:51:26.927 [DEBUG] [Thread-127983] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:51:26.927 [DEBUG] [Thread-127983] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:51:26.927 [DEBUG] [Thread-127983] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:51:26.928 [DEBUG] [Thread-127983] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:51:26.928 [DEBUG] [Thread-127983] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:51:26.928 [DEBUG] [Thread-127983] [transport.py] [_log()] client lang: <none>
2025-12-31T12:51:26.928 [DEBUG] [Thread-127983] [transport.py] [_log()] server lang: <none>
2025-12-31T12:51:26.928 [DEBUG] [Thread-127983] [transport.py] [_log()] kex follows: False
2025-12-31T12:51:26.928 [DEBUG] [Thread-127983] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:51:26.928 [DEBUG] [Thread-127983] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:51:26.928 [DEBUG] [Thread-127983] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:51:26.928 [DEBUG] [Thread-127983] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:51:26.928 [DEBUG] [Thread-127983] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:51:26.928 [DEBUG] [Thread-127983] [transport.py] [_log()] Compression: none
2025-12-31T12:51:26.928 [DEBUG] [Thread-127983] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:51:26.945 [DEBUG] [Thread-127983] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:51:26.945 [DEBUG] [Thread-127983] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:51:26.946 [DEBUG] [Thread-127983] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T12:51:26.946 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T12:51:26.947 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:51:26.948 [DEBUG] [Thread-127983] [transport.py] [_log()] userauth is OK
2025-12-31T12:51:26.948 [DEBUG] [Thread-127983] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:51:26.948 [DEBUG] [Thread-127983] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:51:26.948 [DEBUG] [Thread-127983] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T12:51:26.948 [DEBUG] [Thread-127983] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:51:26.967 [INFO] [Thread-127983] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:51:26.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:51:27.720 [DEBUG] [Thread-127983] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:51:27.720 [DEBUG] [Thread-127983] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:51:27.720 [DEBUG] [Thread-127983] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T12:51:27.761 [DEBUG] [Thread-127983] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:51:27.761 [DEBUG] [Thread-127983] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:51:27.763 [DEBUG] [Thread-127983] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:51:27.774 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:51:27.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T12:51:27.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T12:51:27.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T12:51:27.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:51:27.780 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T12:51:27.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:51:27.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:51:27.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T12:51:27.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.451879 -999.00  +25.20  23.88     15   -2.90 1 2 1 1 1   888    0 26.75 -96.56 ----- 25.5 23.9 296.6 32.5 31.3 -23.3 30.7 -23.4 30.0 -20.7 30.8 -20.4
2025-12-31T12:51:27.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T12:51:27.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T12:51:27.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.451879
2025-12-31T12:51:27.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T12:51:27.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T12:51:27.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T12:51:27.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T12:51:27.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T12:51:27.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T12:51:02', tmtdew=34.55, humidity=9.47, cloud=0.0, wind=34.21, temperature=26.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T10:50:42.346', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T12:51:27.781 [DEBUG] [Thread-127983] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:51:27.855 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T12:51:27.869 [DEBUG] [Thread-127986] [transport.py] [_log()] starting thread (client mode): 0xb6b29b40
2025-12-31T12:51:27.869 [DEBUG] [Thread-127986] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:51:27.886 [DEBUG] [Thread-127986] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T12:51:27.886 [INFO] [Thread-127986] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T12:51:27.894 [DEBUG] [Thread-127986] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:51:27.894 [DEBUG] [Thread-127986] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T12:51:27.894 [DEBUG] [Thread-127986] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:51:27.894 [DEBUG] [Thread-127986] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:51:27.894 [DEBUG] [Thread-127986] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:51:27.894 [DEBUG] [Thread-127986] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:51:27.894 [DEBUG] [Thread-127986] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:51:27.894 [DEBUG] [Thread-127986] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:51:27.894 [DEBUG] [Thread-127986] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:51:27.894 [DEBUG] [Thread-127986] [transport.py] [_log()] client lang: <none>
2025-12-31T12:51:27.894 [DEBUG] [Thread-127986] [transport.py] [_log()] server lang: <none>
2025-12-31T12:51:27.894 [DEBUG] [Thread-127986] [transport.py] [_log()] kex follows: False
2025-12-31T12:51:27.894 [DEBUG] [Thread-127986] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:51:27.894 [DEBUG] [Thread-127986] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:51:27.894 [DEBUG] [Thread-127986] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:51:27.894 [DEBUG] [Thread-127986] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:51:27.894 [DEBUG] [Thread-127986] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:51:27.894 [DEBUG] [Thread-127986] [transport.py] [_log()] Compression: none
2025-12-31T12:51:27.894 [DEBUG] [Thread-127986] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:51:27.951 [DEBUG] [Thread-127986] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:51:27.952 [DEBUG] [Thread-127986] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:51:27.952 [DEBUG] [Thread-127986] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T12:51:27.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T12:51:27.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:51:28.009 [DEBUG] [Thread-127986] [transport.py] [_log()] userauth is OK
2025-12-31T12:51:28.009 [DEBUG] [Thread-127986] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:51:28.009 [DEBUG] [Thread-127986] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:51:28.009 [DEBUG] [Thread-127986] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T12:51:28.009 [DEBUG] [Thread-127986] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:51:28.026 [INFO] [Thread-127986] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:51:28.026 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T12:51:28.026 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:51:28.889 [DEBUG] [Thread-127986] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:51:28.889 [DEBUG] [Thread-127986] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:51:28.937 [DEBUG] [Thread-127986] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:51:28.937 [DEBUG] [Thread-127986] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:51:28.945 [DEBUG] [Thread-127986] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:51:28.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:51:28.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T12:51:28.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T12:51:28.972 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:51:28.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:51:28.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:51:28.981 [DEBUG] [Thread-127986] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:51:30.354 [DEBUG] [Thread-127988 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:51:45.393 [DEBUG] [Thread-127989 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:51:45.513 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:51:45.514 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:51:58.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T12:51:58.983 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T12:51:58.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T12:51:59.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 12, 51, 34), 34.55, 9.43, 0.0, 25.41, 25.96, 0, 0, 0, 2, 0, 0),)
2025-12-31T12:51:59.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 12:51:34
2025-12-31T12:51:59.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T12:51:59.954 [DEBUG] [Thread-127990] [transport.py] [_log()] starting thread (client mode): 0xbbfcdae0
2025-12-31T12:51:59.954 [DEBUG] [Thread-127990] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:51:59.975 [DEBUG] [Thread-127990] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T12:51:59.975 [INFO] [Thread-127990] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T12:51:59.978 [DEBUG] [Thread-127990] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:51:59.978 [DEBUG] [Thread-127990] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T12:51:59.978 [DEBUG] [Thread-127990] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:51:59.978 [DEBUG] [Thread-127990] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:51:59.978 [DEBUG] [Thread-127990] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:51:59.978 [DEBUG] [Thread-127990] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:51:59.978 [DEBUG] [Thread-127990] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:51:59.978 [DEBUG] [Thread-127990] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:51:59.978 [DEBUG] [Thread-127990] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:51:59.978 [DEBUG] [Thread-127990] [transport.py] [_log()] client lang: <none>
2025-12-31T12:51:59.978 [DEBUG] [Thread-127990] [transport.py] [_log()] server lang: <none>
2025-12-31T12:51:59.978 [DEBUG] [Thread-127990] [transport.py] [_log()] kex follows: False
2025-12-31T12:51:59.978 [DEBUG] [Thread-127990] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:51:59.978 [DEBUG] [Thread-127990] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:51:59.978 [DEBUG] [Thread-127990] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:51:59.979 [DEBUG] [Thread-127990] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:51:59.979 [DEBUG] [Thread-127990] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:51:59.979 [DEBUG] [Thread-127990] [transport.py] [_log()] Compression: none
2025-12-31T12:51:59.979 [DEBUG] [Thread-127990] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:51:59.987 [DEBUG] [Thread-127990] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:51:59.988 [DEBUG] [Thread-127990] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:51:59.988 [DEBUG] [Thread-127990] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T12:51:59.988 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T12:51:59.989 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:51:59.990 [DEBUG] [Thread-127990] [transport.py] [_log()] userauth is OK
2025-12-31T12:51:59.990 [DEBUG] [Thread-127990] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:51:59.990 [DEBUG] [Thread-127990] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:51:59.990 [DEBUG] [Thread-127990] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T12:51:59.990 [DEBUG] [Thread-127990] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:52:00.014 [INFO] [Thread-127990] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:52:00.015 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:52:00.431 [DEBUG] [Thread-127992 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:52:00.645 [DEBUG] [Thread-127990] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:52:00.645 [DEBUG] [Thread-127990] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:52:00.645 [DEBUG] [Thread-127990] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T12:52:00.686 [DEBUG] [Thread-127990] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:52:00.686 [DEBUG] [Thread-127990] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:52:00.689 [DEBUG] [Thread-127990] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:52:00.701 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:52:00.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T12:52:00.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T12:52:00.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T12:52:00.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:52:00.711 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T12:52:00.711 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:52:00.711 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:52:00.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T12:52:00.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.452226 -999.00  +25.40  33.46     15   -2.90 1 1 2 1 1   888    0 26.90 -94.52 ----- 34.3 33.5 297.2 38.2 31.1 -23.2 30.7 -24.1 30.0 -22.1 30.7 -20.3
2025-12-31T12:52:00.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T12:52:00.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T12:52:00.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.452226
2025-12-31T12:52:00.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T12:52:00.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T12:52:00.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T12:52:00.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T12:52:00.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T12:52:00.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T12:51:34', tmtdew=34.55, humidity=9.43, cloud=0.0, wind=25.41, temperature=25.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T10:51:12.326', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T12:52:00.713 [DEBUG] [Thread-127990] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:52:00.797 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T12:52:00.809 [DEBUG] [Thread-127994] [transport.py] [_log()] starting thread (client mode): 0xb6b165f0
2025-12-31T12:52:00.809 [DEBUG] [Thread-127994] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:52:00.824 [DEBUG] [Thread-127994] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T12:52:00.824 [INFO] [Thread-127994] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T12:52:00.832 [DEBUG] [Thread-127994] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:52:00.832 [DEBUG] [Thread-127994] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T12:52:00.832 [DEBUG] [Thread-127994] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:52:00.832 [DEBUG] [Thread-127994] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:52:00.832 [DEBUG] [Thread-127994] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:52:00.832 [DEBUG] [Thread-127994] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:52:00.832 [DEBUG] [Thread-127994] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:52:00.832 [DEBUG] [Thread-127994] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:52:00.832 [DEBUG] [Thread-127994] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:52:00.833 [DEBUG] [Thread-127994] [transport.py] [_log()] client lang: <none>
2025-12-31T12:52:00.833 [DEBUG] [Thread-127994] [transport.py] [_log()] server lang: <none>
2025-12-31T12:52:00.833 [DEBUG] [Thread-127994] [transport.py] [_log()] kex follows: False
2025-12-31T12:52:00.833 [DEBUG] [Thread-127994] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:52:00.833 [DEBUG] [Thread-127994] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:52:00.833 [DEBUG] [Thread-127994] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:52:00.833 [DEBUG] [Thread-127994] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:52:00.833 [DEBUG] [Thread-127994] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:52:00.834 [DEBUG] [Thread-127994] [transport.py] [_log()] Compression: none
2025-12-31T12:52:00.834 [DEBUG] [Thread-127994] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:52:00.893 [DEBUG] [Thread-127994] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:52:00.894 [DEBUG] [Thread-127994] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:52:00.895 [DEBUG] [Thread-127994] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T12:52:00.895 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T12:52:00.896 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:52:00.950 [DEBUG] [Thread-127994] [transport.py] [_log()] userauth is OK
2025-12-31T12:52:00.950 [DEBUG] [Thread-127994] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:52:00.950 [DEBUG] [Thread-127994] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:52:00.950 [DEBUG] [Thread-127994] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T12:52:00.950 [DEBUG] [Thread-127994] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:52:00.969 [INFO] [Thread-127994] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:52:00.969 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T12:52:00.970 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:52:01.793 [DEBUG] [Thread-127994] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:52:01.794 [DEBUG] [Thread-127994] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:52:01.842 [DEBUG] [Thread-127994] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:52:01.842 [DEBUG] [Thread-127994] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:52:01.851 [DEBUG] [Thread-127994] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:52:01.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:52:01.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T12:52:01.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-12-31T12:52:01.879 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:52:01.879 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:52:01.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:52:01.888 [DEBUG] [Thread-127994] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:52:13.537 [DEBUG] [Thread-127996 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:52:15.466 [DEBUG] [Thread-127997 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:52:30.518 [DEBUG] [Thread-127998 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:52:31.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T12:52:31.910 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T12:52:31.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T12:52:32.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 12, 52, 6), 34.73, 9.32, 0.0, 23.75, 25.99, 0, 0, 0, 2, 0, 0),)
2025-12-31T12:52:32.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 12:52:06
2025-12-31T12:52:32.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T12:52:32.885 [DEBUG] [Thread-127999] [transport.py] [_log()] starting thread (client mode): 0xb6b14490
2025-12-31T12:52:32.885 [DEBUG] [Thread-127999] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:52:32.904 [DEBUG] [Thread-127999] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T12:52:32.904 [INFO] [Thread-127999] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T12:52:32.906 [DEBUG] [Thread-127999] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:52:32.906 [DEBUG] [Thread-127999] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T12:52:32.906 [DEBUG] [Thread-127999] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:52:32.906 [DEBUG] [Thread-127999] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:52:32.906 [DEBUG] [Thread-127999] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:52:32.906 [DEBUG] [Thread-127999] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:52:32.906 [DEBUG] [Thread-127999] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:52:32.906 [DEBUG] [Thread-127999] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:52:32.906 [DEBUG] [Thread-127999] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:52:32.906 [DEBUG] [Thread-127999] [transport.py] [_log()] client lang: <none>
2025-12-31T12:52:32.906 [DEBUG] [Thread-127999] [transport.py] [_log()] server lang: <none>
2025-12-31T12:52:32.906 [DEBUG] [Thread-127999] [transport.py] [_log()] kex follows: False
2025-12-31T12:52:32.906 [DEBUG] [Thread-127999] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:52:32.906 [DEBUG] [Thread-127999] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:52:32.906 [DEBUG] [Thread-127999] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:52:32.906 [DEBUG] [Thread-127999] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:52:32.906 [DEBUG] [Thread-127999] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:52:32.906 [DEBUG] [Thread-127999] [transport.py] [_log()] Compression: none
2025-12-31T12:52:32.906 [DEBUG] [Thread-127999] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:52:32.915 [DEBUG] [Thread-127999] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:52:32.916 [DEBUG] [Thread-127999] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:52:32.916 [DEBUG] [Thread-127999] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T12:52:32.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T12:52:32.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:52:32.918 [DEBUG] [Thread-127999] [transport.py] [_log()] userauth is OK
2025-12-31T12:52:32.919 [DEBUG] [Thread-127999] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:52:32.919 [DEBUG] [Thread-127999] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:52:32.919 [DEBUG] [Thread-127999] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T12:52:32.919 [DEBUG] [Thread-127999] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:52:32.936 [INFO] [Thread-127999] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:52:32.937 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:52:33.586 [DEBUG] [Thread-127999] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:52:33.586 [DEBUG] [Thread-127999] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:52:33.586 [DEBUG] [Thread-127999] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T12:52:33.627 [DEBUG] [Thread-127999] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:52:33.627 [DEBUG] [Thread-127999] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:52:33.631 [DEBUG] [Thread-127999] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:52:33.644 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:52:33.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T12:52:33.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T12:52:33.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T12:52:33.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:52:33.663 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T12:52:33.663 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:52:33.663 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:52:33.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T12:52:33.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.452920 -999.00  +25.00  26.04     15   -3.10 1 1 1 1 1   888    0 25.80 -104.87 ----- 21.9 26.0 293.6 32.7 30.9 -25.0 30.5 -24.7 29.8 -25.7 30.5 -22.3
2025-12-31T12:52:33.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T12:52:33.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T12:52:33.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.452920
2025-12-31T12:52:33.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T12:52:33.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T12:52:33.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T12:52:33.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T12:52:33.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T12:52:33.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T12:52:06', tmtdew=34.73, humidity=9.32, cloud=0.0, wind=23.75, temperature=25.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T10:52:12.288', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T12:52:33.666 [DEBUG] [Thread-127999] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:52: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-12-31T12:52:33.761 [DEBUG] [Thread-128002] [transport.py] [_log()] starting thread (client mode): 0xb95b3a90
2025-12-31T12:52:33.761 [DEBUG] [Thread-128002] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:52:33.776 [DEBUG] [Thread-128002] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T12:52:33.777 [INFO] [Thread-128002] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T12:52:33.784 [DEBUG] [Thread-128002] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:52:33.785 [DEBUG] [Thread-128002] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T12:52:33.785 [DEBUG] [Thread-128002] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:52:33.785 [DEBUG] [Thread-128002] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:52:33.785 [DEBUG] [Thread-128002] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:52:33.785 [DEBUG] [Thread-128002] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:52:33.785 [DEBUG] [Thread-128002] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:52:33.785 [DEBUG] [Thread-128002] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:52:33.785 [DEBUG] [Thread-128002] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:52:33.785 [DEBUG] [Thread-128002] [transport.py] [_log()] client lang: <none>
2025-12-31T12:52:33.785 [DEBUG] [Thread-128002] [transport.py] [_log()] server lang: <none>
2025-12-31T12:52:33.785 [DEBUG] [Thread-128002] [transport.py] [_log()] kex follows: False
2025-12-31T12:52:33.785 [DEBUG] [Thread-128002] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:52:33.785 [DEBUG] [Thread-128002] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:52:33.785 [DEBUG] [Thread-128002] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:52:33.785 [DEBUG] [Thread-128002] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:52:33.786 [DEBUG] [Thread-128002] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:52:33.786 [DEBUG] [Thread-128002] [transport.py] [_log()] Compression: none
2025-12-31T12:52:33.786 [DEBUG] [Thread-128002] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:52:33.842 [DEBUG] [Thread-128002] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:52:33.842 [DEBUG] [Thread-128002] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:52:33.843 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T12:52:33.844 [DEBUG] [Thread-128002] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T12:52:33.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:52:33.898 [DEBUG] [Thread-128002] [transport.py] [_log()] userauth is OK
2025-12-31T12:52:33.899 [DEBUG] [Thread-128002] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:52:33.899 [DEBUG] [Thread-128002] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:52:33.899 [DEBUG] [Thread-128002] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T12:52:33.899 [DEBUG] [Thread-128002] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:52:33.920 [INFO] [Thread-128002] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:52:33.920 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T12:52:33.921 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:52:34.741 [DEBUG] [Thread-128002] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:52:34.741 [DEBUG] [Thread-128002] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:52:34.789 [DEBUG] [Thread-128002] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:52:34.789 [DEBUG] [Thread-128002] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:52:34.798 [DEBUG] [Thread-128002] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:52:34.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:52:34.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-12-31T12:52:34.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-12-31T12:52:34.828 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:52:34.828 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:52:34.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:52:34.836 [DEBUG] [Thread-128002] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:52:45.551 [DEBUG] [Thread-128004 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:52:45.653 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:52:45.654 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:53:00.590 [DEBUG] [Thread-128005 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:53:04.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T12:53:04.853 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T12:53:04.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T12:53:05.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 12, 52, 39), 34.55, 9.39, 0.0, 21.24, 25.94, 0, 0, 0, 2, 0, 0),)
2025-12-31T12:53:05.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 12:52:39
2025-12-31T12:53:05.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T12:53:05.832 [DEBUG] [Thread-128006] [transport.py] [_log()] starting thread (client mode): 0xb6b15f60
2025-12-31T12:53:05.833 [DEBUG] [Thread-128006] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:53:05.854 [DEBUG] [Thread-128006] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T12:53:05.854 [INFO] [Thread-128006] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T12:53:05.857 [DEBUG] [Thread-128006] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:53:05.858 [DEBUG] [Thread-128006] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T12:53:05.858 [DEBUG] [Thread-128006] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:53:05.858 [DEBUG] [Thread-128006] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:53:05.858 [DEBUG] [Thread-128006] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:53:05.858 [DEBUG] [Thread-128006] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:53:05.858 [DEBUG] [Thread-128006] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:53:05.858 [DEBUG] [Thread-128006] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:53:05.858 [DEBUG] [Thread-128006] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:53:05.858 [DEBUG] [Thread-128006] [transport.py] [_log()] client lang: <none>
2025-12-31T12:53:05.858 [DEBUG] [Thread-128006] [transport.py] [_log()] server lang: <none>
2025-12-31T12:53:05.858 [DEBUG] [Thread-128006] [transport.py] [_log()] kex follows: False
2025-12-31T12:53:05.858 [DEBUG] [Thread-128006] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:53:05.859 [DEBUG] [Thread-128006] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:53:05.859 [DEBUG] [Thread-128006] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:53:05.859 [DEBUG] [Thread-128006] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:53:05.859 [DEBUG] [Thread-128006] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:53:05.859 [DEBUG] [Thread-128006] [transport.py] [_log()] Compression: none
2025-12-31T12:53:05.859 [DEBUG] [Thread-128006] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:53:05.879 [DEBUG] [Thread-128006] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:53:05.880 [DEBUG] [Thread-128006] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:53:05.881 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T12:53:05.881 [DEBUG] [Thread-128006] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T12:53:05.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:53:05.883 [DEBUG] [Thread-128006] [transport.py] [_log()] userauth is OK
2025-12-31T12:53:05.884 [DEBUG] [Thread-128006] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:53:05.884 [DEBUG] [Thread-128006] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:53:05.884 [DEBUG] [Thread-128006] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T12:53:05.884 [DEBUG] [Thread-128006] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:53:05.918 [INFO] [Thread-128006] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:53:05.919 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:53:06.579 [DEBUG] [Thread-128006] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:53:06.579 [DEBUG] [Thread-128006] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:53:06.580 [DEBUG] [Thread-128006] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T12:53:06.620 [DEBUG] [Thread-128006] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:53:06.620 [DEBUG] [Thread-128006] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:53:06.623 [DEBUG] [Thread-128006] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:53:06.636 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:53:06.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T12:53:06.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T12:53:06.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T12:53:06.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:53:06.648 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T12:53:06.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:53:06.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:53:06.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T12:53:06.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.453268 -999.00  +24.60  24.61     15   -2.90 1 1 1 1 1   888    0 26.35 -111.01 ----- 24.2 24.6 295.8 35.2 30.8 -24.1 30.4 -24.8 29.9 -23.8 30.5 -21.5
2025-12-31T12:53:06.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T12:53:06.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T12:53:06.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.453268
2025-12-31T12:53:06.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T12:53:06.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T12:53:06.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T12:53:06.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T12:53:06.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T12:53:06.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T12:52:39', tmtdew=34.55, humidity=9.39, cloud=0.0, wind=21.24, temperature=25.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T10:52:42.355', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T12:53:06.651 [DEBUG] [Thread-128006] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:53:06.735 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T12:53:06.747 [DEBUG] [Thread-128009] [transport.py] [_log()] starting thread (client mode): 0xb95b1420
2025-12-31T12:53:06.748 [DEBUG] [Thread-128009] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:53:06.762 [DEBUG] [Thread-128009] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T12:53:06.762 [INFO] [Thread-128009] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T12:53:06.770 [DEBUG] [Thread-128009] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:53:06.771 [DEBUG] [Thread-128009] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T12:53:06.771 [DEBUG] [Thread-128009] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:53:06.771 [DEBUG] [Thread-128009] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:53:06.771 [DEBUG] [Thread-128009] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:53:06.771 [DEBUG] [Thread-128009] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:53:06.771 [DEBUG] [Thread-128009] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:53:06.771 [DEBUG] [Thread-128009] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:53:06.771 [DEBUG] [Thread-128009] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:53:06.772 [DEBUG] [Thread-128009] [transport.py] [_log()] client lang: <none>
2025-12-31T12:53:06.772 [DEBUG] [Thread-128009] [transport.py] [_log()] server lang: <none>
2025-12-31T12:53:06.772 [DEBUG] [Thread-128009] [transport.py] [_log()] kex follows: False
2025-12-31T12:53:06.772 [DEBUG] [Thread-128009] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:53:06.772 [DEBUG] [Thread-128009] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:53:06.772 [DEBUG] [Thread-128009] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:53:06.772 [DEBUG] [Thread-128009] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:53:06.772 [DEBUG] [Thread-128009] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:53:06.773 [DEBUG] [Thread-128009] [transport.py] [_log()] Compression: none
2025-12-31T12:53:06.773 [DEBUG] [Thread-128009] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:53:06.828 [DEBUG] [Thread-128009] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:53:06.828 [DEBUG] [Thread-128009] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:53:06.829 [DEBUG] [Thread-128009] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T12:53:06.829 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T12:53:06.830 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:53:06.887 [DEBUG] [Thread-128009] [transport.py] [_log()] userauth is OK
2025-12-31T12:53:06.888 [DEBUG] [Thread-128009] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:53:06.888 [DEBUG] [Thread-128009] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:53:06.888 [DEBUG] [Thread-128009] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T12:53:06.888 [DEBUG] [Thread-128009] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:53:06.907 [INFO] [Thread-128009] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:53:06.908 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T12:53:06.908 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:53:07.795 [DEBUG] [Thread-128009] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:53:07.795 [DEBUG] [Thread-128009] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:53:07.843 [DEBUG] [Thread-128009] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:53:07.844 [DEBUG] [Thread-128009] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:53:07.853 [DEBUG] [Thread-128009] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:53:07.861 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:53:07.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T12:53:07.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T12:53:07.879 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:53:07.879 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:53:07.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:53:07.888 [DEBUG] [Thread-128009] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:53:13.601 [DEBUG] [Thread-128011 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:53:15.627 [DEBUG] [Thread-128012 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:53:30.671 [DEBUG] [Thread-128013 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:53:37.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T12:53:37.900 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T12:53:37.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T12:53:38.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 12, 53, 11), 34.11, 9.63, 0.0, 18.91, 25.58, 0, 0, 0, 2, 0, 0),)
2025-12-31T12:53:38.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 12:53:11
2025-12-31T12:53:38.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T12:53:38.894 [DEBUG] [Thread-128014] [transport.py] [_log()] starting thread (client mode): 0xb6b16ce0
2025-12-31T12:53:38.894 [DEBUG] [Thread-128014] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:53:38.914 [DEBUG] [Thread-128014] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T12:53:38.914 [INFO] [Thread-128014] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T12:53:38.917 [DEBUG] [Thread-128014] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:53:38.917 [DEBUG] [Thread-128014] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T12:53:38.917 [DEBUG] [Thread-128014] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:53:38.917 [DEBUG] [Thread-128014] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:53:38.917 [DEBUG] [Thread-128014] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:53:38.917 [DEBUG] [Thread-128014] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:53:38.917 [DEBUG] [Thread-128014] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:53:38.917 [DEBUG] [Thread-128014] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:53:38.918 [DEBUG] [Thread-128014] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:53:38.918 [DEBUG] [Thread-128014] [transport.py] [_log()] client lang: <none>
2025-12-31T12:53:38.918 [DEBUG] [Thread-128014] [transport.py] [_log()] server lang: <none>
2025-12-31T12:53:38.918 [DEBUG] [Thread-128014] [transport.py] [_log()] kex follows: False
2025-12-31T12:53:38.918 [DEBUG] [Thread-128014] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:53:38.918 [DEBUG] [Thread-128014] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:53:38.918 [DEBUG] [Thread-128014] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:53:38.918 [DEBUG] [Thread-128014] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:53:38.918 [DEBUG] [Thread-128014] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:53:38.918 [DEBUG] [Thread-128014] [transport.py] [_log()] Compression: none
2025-12-31T12:53:38.918 [DEBUG] [Thread-128014] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:53:38.937 [DEBUG] [Thread-128014] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:53:38.937 [DEBUG] [Thread-128014] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:53:38.938 [DEBUG] [Thread-128014] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T12:53:38.938 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T12:53:38.939 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:53:38.940 [DEBUG] [Thread-128014] [transport.py] [_log()] userauth is OK
2025-12-31T12:53:38.941 [DEBUG] [Thread-128014] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:53:38.941 [DEBUG] [Thread-128014] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:53:38.941 [DEBUG] [Thread-128014] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T12:53:38.941 [DEBUG] [Thread-128014] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:53:38.968 [INFO] [Thread-128014] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:53:38.969 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:53:39.690 [DEBUG] [Thread-128014] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:53:39.690 [DEBUG] [Thread-128014] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:53:39.691 [DEBUG] [Thread-128014] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T12:53:39.731 [DEBUG] [Thread-128014] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:53:39.731 [DEBUG] [Thread-128014] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:53:39.735 [DEBUG] [Thread-128014] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:53:39.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:53:39.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T12:53:39.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T12:53:39.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T12:53:39.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:53:39.757 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T12:53:39.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:53:39.757 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:53:39.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T12:53:39.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.453615 -999.00  +25.00  25.03     15   -2.50 1 1 1 1 1   888    0 25.70 -114.14 ----- 30.6 25.0 273.8 30.0 30.8 -24.7 30.4 -24.1 29.8 -24.8 30.5 -21.9
2025-12-31T12:53:39.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T12:53:39.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T12:53:39.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.453615
2025-12-31T12:53:39.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T12:53:39.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T12:53:39.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T12:53:39.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T12:53:39.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T12:53:39.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T12:53:11', tmtdew=34.11, humidity=9.63, cloud=0.0, wind=18.91, temperature=25.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T10:53:12.336', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T12:53:39.760 [DEBUG] [Thread-128014] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:53:39.843 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T12:53:39.856 [DEBUG] [Thread-128017] [transport.py] [_log()] starting thread (client mode): 0xb6b2b580
2025-12-31T12:53:39.856 [DEBUG] [Thread-128017] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:53:39.871 [DEBUG] [Thread-128017] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T12:53:39.871 [INFO] [Thread-128017] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T12:53:39.879 [DEBUG] [Thread-128017] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:53:39.879 [DEBUG] [Thread-128017] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T12:53:39.879 [DEBUG] [Thread-128017] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:53:39.879 [DEBUG] [Thread-128017] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:53:39.879 [DEBUG] [Thread-128017] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:53:39.879 [DEBUG] [Thread-128017] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:53:39.879 [DEBUG] [Thread-128017] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:53:39.879 [DEBUG] [Thread-128017] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:53:39.879 [DEBUG] [Thread-128017] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:53:39.879 [DEBUG] [Thread-128017] [transport.py] [_log()] client lang: <none>
2025-12-31T12:53:39.879 [DEBUG] [Thread-128017] [transport.py] [_log()] server lang: <none>
2025-12-31T12:53:39.879 [DEBUG] [Thread-128017] [transport.py] [_log()] kex follows: False
2025-12-31T12:53:39.879 [DEBUG] [Thread-128017] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:53:39.880 [DEBUG] [Thread-128017] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:53:39.880 [DEBUG] [Thread-128017] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:53:39.880 [DEBUG] [Thread-128017] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:53:39.880 [DEBUG] [Thread-128017] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:53:39.880 [DEBUG] [Thread-128017] [transport.py] [_log()] Compression: none
2025-12-31T12:53:39.880 [DEBUG] [Thread-128017] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:53:39.935 [DEBUG] [Thread-128017] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:53:39.936 [DEBUG] [Thread-128017] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:53:39.937 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T12:53:39.937 [DEBUG] [Thread-128017] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T12:53:39.938 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:53:39.991 [DEBUG] [Thread-128017] [transport.py] [_log()] userauth is OK
2025-12-31T12:53:39.992 [DEBUG] [Thread-128017] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:53:39.992 [DEBUG] [Thread-128017] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:53:39.992 [DEBUG] [Thread-128017] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T12:53:39.992 [DEBUG] [Thread-128017] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:53:40.011 [INFO] [Thread-128017] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:53:40.011 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T12:53:40.012 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:53:40.839 [DEBUG] [Thread-128017] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:53:40.840 [DEBUG] [Thread-128017] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:53:40.888 [DEBUG] [Thread-128017] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:53:40.889 [DEBUG] [Thread-128017] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:53:40.898 [DEBUG] [Thread-128017] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:53:40.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:53:40.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T12:53:40.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-12-31T12:53:40.925 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:53:40.925 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:53:40.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:53:40.933 [DEBUG] [Thread-128017] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:53:45.709 [DEBUG] [Thread-128019 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:53:45.792 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:53:45.793 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:54:00.761 [DEBUG] [Thread-128020 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:54:10.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T12:54:10.937 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T12:54:10.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T12:54:11.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 12, 53, 43), 34.24, 9.63, 0.0, 20.35, 25.81, 0, 0, 0, 2, 0, 0),)
2025-12-31T12:54:11.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 12:53:43
2025-12-31T12:54:11.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T12:54:11.924 [DEBUG] [Thread-128021] [transport.py] [_log()] starting thread (client mode): 0xb6b16ce0
2025-12-31T12:54:11.924 [DEBUG] [Thread-128021] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:54:11.945 [DEBUG] [Thread-128021] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T12:54:11.945 [INFO] [Thread-128021] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T12:54:11.948 [DEBUG] [Thread-128021] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:54:11.948 [DEBUG] [Thread-128021] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T12:54:11.948 [DEBUG] [Thread-128021] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:54:11.948 [DEBUG] [Thread-128021] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:54:11.948 [DEBUG] [Thread-128021] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:54:11.948 [DEBUG] [Thread-128021] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:54:11.948 [DEBUG] [Thread-128021] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:54:11.949 [DEBUG] [Thread-128021] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:54:11.949 [DEBUG] [Thread-128021] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:54:11.949 [DEBUG] [Thread-128021] [transport.py] [_log()] client lang: <none>
2025-12-31T12:54:11.949 [DEBUG] [Thread-128021] [transport.py] [_log()] server lang: <none>
2025-12-31T12:54:11.949 [DEBUG] [Thread-128021] [transport.py] [_log()] kex follows: False
2025-12-31T12:54:11.949 [DEBUG] [Thread-128021] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:54:11.949 [DEBUG] [Thread-128021] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:54:11.949 [DEBUG] [Thread-128021] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:54:11.949 [DEBUG] [Thread-128021] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:54:11.949 [DEBUG] [Thread-128021] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:54:11.949 [DEBUG] [Thread-128021] [transport.py] [_log()] Compression: none
2025-12-31T12:54:11.949 [DEBUG] [Thread-128021] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:54:11.966 [DEBUG] [Thread-128021] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:54:11.966 [DEBUG] [Thread-128021] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:54:11.967 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T12:54:11.967 [DEBUG] [Thread-128021] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T12:54:11.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:54:11.969 [DEBUG] [Thread-128021] [transport.py] [_log()] userauth is OK
2025-12-31T12:54:11.969 [DEBUG] [Thread-128021] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:54:11.969 [DEBUG] [Thread-128021] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:54:11.969 [DEBUG] [Thread-128021] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T12:54:11.969 [DEBUG] [Thread-128021] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:54:11.995 [INFO] [Thread-128021] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:54:11.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:54:12.634 [DEBUG] [Thread-128021] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:54:12.634 [DEBUG] [Thread-128021] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:54:12.635 [DEBUG] [Thread-128021] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T12:54:12.675 [DEBUG] [Thread-128021] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:54:12.675 [DEBUG] [Thread-128021] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:54:12.679 [DEBUG] [Thread-128021] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:54:12.691 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:54:12.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T12:54:12.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T12:54:12.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T12:54:12.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:54:12.702 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T12:54:12.702 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:54:12.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:54:12.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T12:54:12.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.453962 -999.00  +25.00  14.83     16   -2.50 1 1 1 1 1   888    0 25.80 -117.22 ----- 18.2 14.8 269.8 26.2 30.7 -24.7 30.3 -24.5 29.7 -22.3 30.3 -22.7
2025-12-31T12:54:12.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T12:54:12.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T12:54:12.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.453962
2025-12-31T12:54:12.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T12:54:12.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T12:54:12.704 [DEBUG] [Thread-128021] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:54:12.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T12:54:12.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T12:54:12.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T12:54:12.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T12:53:43', tmtdew=34.24, humidity=9.63, cloud=0.0, wind=20.35, temperature=25.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T10:53:42.317', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T12:54:12.793 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T12:54:12.807 [DEBUG] [Thread-128024] [transport.py] [_log()] starting thread (client mode): 0xb6b62aa0
2025-12-31T12:54:12.807 [DEBUG] [Thread-128024] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:54:12.821 [DEBUG] [Thread-128024] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T12:54:12.821 [INFO] [Thread-128024] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T12:54:12.828 [DEBUG] [Thread-128024] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:54:12.829 [DEBUG] [Thread-128024] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T12:54:12.829 [DEBUG] [Thread-128024] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:54:12.829 [DEBUG] [Thread-128024] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:54:12.829 [DEBUG] [Thread-128024] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:54:12.829 [DEBUG] [Thread-128024] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:54:12.829 [DEBUG] [Thread-128024] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:54:12.829 [DEBUG] [Thread-128024] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:54:12.830 [DEBUG] [Thread-128024] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:54:12.830 [DEBUG] [Thread-128024] [transport.py] [_log()] client lang: <none>
2025-12-31T12:54:12.830 [DEBUG] [Thread-128024] [transport.py] [_log()] server lang: <none>
2025-12-31T12:54:12.830 [DEBUG] [Thread-128024] [transport.py] [_log()] kex follows: False
2025-12-31T12:54:12.830 [DEBUG] [Thread-128024] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:54:12.830 [DEBUG] [Thread-128024] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:54:12.830 [DEBUG] [Thread-128024] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:54:12.830 [DEBUG] [Thread-128024] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:54:12.830 [DEBUG] [Thread-128024] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:54:12.831 [DEBUG] [Thread-128024] [transport.py] [_log()] Compression: none
2025-12-31T12:54:12.831 [DEBUG] [Thread-128024] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:54:12.893 [DEBUG] [Thread-128024] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:54:12.893 [DEBUG] [Thread-128024] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:54:12.893 [DEBUG] [Thread-128024] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T12:54:12.893 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T12:54:12.893 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:54:12.952 [DEBUG] [Thread-128024] [transport.py] [_log()] userauth is OK
2025-12-31T12:54:12.953 [DEBUG] [Thread-128024] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:54:12.953 [DEBUG] [Thread-128024] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:54:12.953 [DEBUG] [Thread-128024] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T12:54:12.953 [DEBUG] [Thread-128024] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:54:12.972 [INFO] [Thread-128024] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:54:12.973 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T12:54:12.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:54:13.652 [DEBUG] [Thread-128026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:54:13.783 [DEBUG] [Thread-128024] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:54:13.783 [DEBUG] [Thread-128024] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:54:13.831 [DEBUG] [Thread-128024] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:54:13.831 [DEBUG] [Thread-128024] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:54:13.840 [DEBUG] [Thread-128024] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:54:13.850 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:54:13.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T12:54:13.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T12:54:13.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:54:13.869 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:54:13.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:54:13.877 [DEBUG] [Thread-128024] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:54:15.795 [DEBUG] [Thread-128027 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:54:30.838 [DEBUG] [Thread-128028 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:54:43.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T12:54:43.900 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T12:54:43.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-12-31T12:54:44.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 12, 54, 15), 34.0, 9.78, 0.0, 27.75, 25.66, 0, 0, 0, 2, 0, 0),)
2025-12-31T12:54:44.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 12:54:15
2025-12-31T12:54:44.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T12:54:44.911 [DEBUG] [Thread-128029] [transport.py] [_log()] starting thread (client mode): 0xb6b2ae00
2025-12-31T12:54:44.911 [DEBUG] [Thread-128029] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:54:44.926 [DEBUG] [Thread-128029] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T12:54:44.926 [INFO] [Thread-128029] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T12:54:44.929 [DEBUG] [Thread-128029] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:54:44.929 [DEBUG] [Thread-128029] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T12:54:44.929 [DEBUG] [Thread-128029] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:54:44.930 [DEBUG] [Thread-128029] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:54:44.930 [DEBUG] [Thread-128029] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:54:44.930 [DEBUG] [Thread-128029] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:54:44.930 [DEBUG] [Thread-128029] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:54:44.930 [DEBUG] [Thread-128029] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:54:44.930 [DEBUG] [Thread-128029] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:54:44.930 [DEBUG] [Thread-128029] [transport.py] [_log()] client lang: <none>
2025-12-31T12:54:44.930 [DEBUG] [Thread-128029] [transport.py] [_log()] server lang: <none>
2025-12-31T12:54:44.930 [DEBUG] [Thread-128029] [transport.py] [_log()] kex follows: False
2025-12-31T12:54:44.930 [DEBUG] [Thread-128029] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:54:44.930 [DEBUG] [Thread-128029] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:54:44.930 [DEBUG] [Thread-128029] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:54:44.930 [DEBUG] [Thread-128029] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:54:44.930 [DEBUG] [Thread-128029] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:54:44.930 [DEBUG] [Thread-128029] [transport.py] [_log()] Compression: none
2025-12-31T12:54:44.930 [DEBUG] [Thread-128029] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:54:44.938 [DEBUG] [Thread-128029] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:54:44.938 [DEBUG] [Thread-128029] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:54:44.938 [DEBUG] [Thread-128029] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T12:54:44.938 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T12:54:44.939 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:54:44.939 [DEBUG] [Thread-128029] [transport.py] [_log()] userauth is OK
2025-12-31T12:54:44.940 [DEBUG] [Thread-128029] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:54:44.940 [DEBUG] [Thread-128029] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:54:44.940 [DEBUG] [Thread-128029] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T12:54:44.940 [DEBUG] [Thread-128029] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:54:44.950 [INFO] [Thread-128029] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:54:44.950 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:54:45.689 [DEBUG] [Thread-128029] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:54:45.689 [DEBUG] [Thread-128029] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:54:45.690 [DEBUG] [Thread-128029] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T12:54:45.730 [DEBUG] [Thread-128029] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:54:45.730 [DEBUG] [Thread-128029] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:54:45.733 [DEBUG] [Thread-128029] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:54:45.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:54:45.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T12:54:45.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T12:54:45.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T12:54:45.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:54:45.750 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T12:54:45.750 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:54:45.750 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:54:45.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T12:54:45.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.454309 -999.00  +24.60  25.55     16   -2.80 1 1 1 1 1   888    0 25.29 -136.08 ----- 26.7 25.6 276.0 31.9 30.4 -26.9 30.2 -25.3 29.2 -28.3 30.1 -23.6
2025-12-31T12:54:45.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T12:54:45.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T12:54:45.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.454309
2025-12-31T12:54:45.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T12:54:45.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T12:54:45.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T12:54:45.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T12:54:45.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T12:54:45.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T12:54:15', tmtdew=34.0, humidity=9.78, cloud=0.0, wind=27.75, temperature=25.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T10:54:12.298', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T12:54:45.752 [DEBUG] [Thread-128029] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:54:45.825 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T12:54:45.837 [DEBUG] [Thread-128032] [transport.py] [_log()] starting thread (client mode): 0xb6b2ae30
2025-12-31T12:54:45.837 [DEBUG] [Thread-128032] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:54:45.851 [DEBUG] [Thread-128032] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T12:54:45.851 [INFO] [Thread-128032] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T12:54:45.858 [DEBUG] [Thread-128032] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:54:45.858 [DEBUG] [Thread-128032] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T12:54:45.858 [DEBUG] [Thread-128032] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:54:45.858 [DEBUG] [Thread-128032] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:54:45.859 [DEBUG] [Thread-128032] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:54:45.859 [DEBUG] [Thread-128032] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:54:45.859 [DEBUG] [Thread-128032] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:54:45.859 [DEBUG] [Thread-128032] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:54:45.859 [DEBUG] [Thread-128032] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:54:45.859 [DEBUG] [Thread-128032] [transport.py] [_log()] client lang: <none>
2025-12-31T12:54:45.859 [DEBUG] [Thread-128032] [transport.py] [_log()] server lang: <none>
2025-12-31T12:54:45.859 [DEBUG] [Thread-128032] [transport.py] [_log()] kex follows: False
2025-12-31T12:54:45.859 [DEBUG] [Thread-128032] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:54:45.859 [DEBUG] [Thread-128032] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:54:45.859 [DEBUG] [Thread-128032] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:54:45.859 [DEBUG] [Thread-128032] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:54:45.859 [DEBUG] [Thread-128032] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:54:45.859 [DEBUG] [Thread-128032] [transport.py] [_log()] Compression: none
2025-12-31T12:54:45.859 [DEBUG] [Thread-128032] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:54:45.872 [DEBUG] [Thread-128034 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:54:45.915 [DEBUG] [Thread-128032] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:54:45.915 [DEBUG] [Thread-128032] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:54:45.915 [DEBUG] [Thread-128032] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T12:54:45.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T12:54:45.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:54:45.934 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:54:45.935 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:54:45.972 [DEBUG] [Thread-128032] [transport.py] [_log()] userauth is OK
2025-12-31T12:54:45.972 [DEBUG] [Thread-128032] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:54:45.972 [DEBUG] [Thread-128032] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:54:45.972 [DEBUG] [Thread-128032] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T12:54:45.972 [DEBUG] [Thread-128032] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:54:45.986 [INFO] [Thread-128032] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:54:45.986 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T12:54:45.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:54:46.845 [DEBUG] [Thread-128032] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:54:46.845 [DEBUG] [Thread-128032] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:54:46.892 [DEBUG] [Thread-128032] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:54:46.892 [DEBUG] [Thread-128032] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:54:46.900 [DEBUG] [Thread-128032] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:54:46.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:54:46.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T12:54:46.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-12-31T12:54:46.924 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:54:46.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:54:46.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:54:46.932 [DEBUG] [Thread-128032] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:55:00.911 [DEBUG] [Thread-128035 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:55:13.706 [DEBUG] [Thread-128036 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:55:15.947 [DEBUG] [Thread-128037 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:55:16.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T12:55:16.941 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T12:55:16.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T12:55:17.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 12, 54, 47), 33.75, 10.33, 0.0, 28.3, 25.68, 0, 0, 0, 2, 0, 0),)
2025-12-31T12:55:17.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 12:54:47
2025-12-31T12:55:17.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T12:55:17.932 [DEBUG] [Thread-128038] [transport.py] [_log()] starting thread (client mode): 0xb6b17a30
2025-12-31T12:55:17.932 [DEBUG] [Thread-128038] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:55:17.953 [DEBUG] [Thread-128038] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T12:55:17.953 [INFO] [Thread-128038] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T12:55:17.956 [DEBUG] [Thread-128038] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:55:17.956 [DEBUG] [Thread-128038] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T12:55:17.956 [DEBUG] [Thread-128038] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:55:17.956 [DEBUG] [Thread-128038] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:55:17.956 [DEBUG] [Thread-128038] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:55:17.956 [DEBUG] [Thread-128038] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:55:17.956 [DEBUG] [Thread-128038] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:55:17.956 [DEBUG] [Thread-128038] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:55:17.956 [DEBUG] [Thread-128038] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:55:17.956 [DEBUG] [Thread-128038] [transport.py] [_log()] client lang: <none>
2025-12-31T12:55:17.956 [DEBUG] [Thread-128038] [transport.py] [_log()] server lang: <none>
2025-12-31T12:55:17.956 [DEBUG] [Thread-128038] [transport.py] [_log()] kex follows: False
2025-12-31T12:55:17.956 [DEBUG] [Thread-128038] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:55:17.956 [DEBUG] [Thread-128038] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:55:17.956 [DEBUG] [Thread-128038] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:55:17.956 [DEBUG] [Thread-128038] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:55:17.956 [DEBUG] [Thread-128038] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:55:17.956 [DEBUG] [Thread-128038] [transport.py] [_log()] Compression: none
2025-12-31T12:55:17.956 [DEBUG] [Thread-128038] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:55:17.976 [DEBUG] [Thread-128038] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:55:17.976 [DEBUG] [Thread-128038] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:55:17.977 [DEBUG] [Thread-128038] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T12:55:17.977 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T12:55:17.978 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:55:17.979 [DEBUG] [Thread-128038] [transport.py] [_log()] userauth is OK
2025-12-31T12:55:17.979 [DEBUG] [Thread-128038] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:55:17.979 [DEBUG] [Thread-128038] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:55:17.979 [DEBUG] [Thread-128038] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T12:55:17.979 [DEBUG] [Thread-128038] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:55:17.999 [INFO] [Thread-128038] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:55:18.000 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:55:19.833 [DEBUG] [Thread-128038] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:55:19.834 [DEBUG] [Thread-128038] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:55:19.834 [DEBUG] [Thread-128038] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T12:55:19.875 [DEBUG] [Thread-128038] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:55:19.875 [DEBUG] [Thread-128038] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:55:19.877 [DEBUG] [Thread-128038] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:55:19.888 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:55:19.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T12:55:19.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T12:55:19.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T12:55:19.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:55:19.902 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T12:55:19.902 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:55:19.902 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:55:19.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T12:55:19.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.454309 -999.00  +24.60  25.55     16   -2.80 1 1 1 1 1   888    0 25.29 -136.08 ----- 26.7 25.6 276.0 31.9 30.4 -26.9 30.2 -25.3 29.2 -28.3 30.1 -23.6
2025-12-31T12:55:19.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T12:55:19.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T12:55:19.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.454309
2025-12-31T12:55:19.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T12:55:19.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T12:55:19.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T12:55:19.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T12:55:19.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T12:55:19.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T12:54:47', tmtdew=33.75, humidity=10.33, cloud=0.0, wind=28.3, temperature=25.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T10:54:12.298', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T12:55:19.903 [DEBUG] [Thread-128038] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:55:19.977 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T12:55:19.988 [DEBUG] [Thread-128041] [transport.py] [_log()] starting thread (client mode): 0xb6b63be0
2025-12-31T12:55:19.989 [DEBUG] [Thread-128041] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:55:20.003 [DEBUG] [Thread-128041] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T12:55:20.003 [INFO] [Thread-128041] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T12:55:20.010 [DEBUG] [Thread-128041] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:55:20.011 [DEBUG] [Thread-128041] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T12:55:20.011 [DEBUG] [Thread-128041] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:55:20.011 [DEBUG] [Thread-128041] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:55:20.011 [DEBUG] [Thread-128041] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:55:20.011 [DEBUG] [Thread-128041] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:55:20.011 [DEBUG] [Thread-128041] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:55:20.011 [DEBUG] [Thread-128041] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:55:20.011 [DEBUG] [Thread-128041] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:55:20.011 [DEBUG] [Thread-128041] [transport.py] [_log()] client lang: <none>
2025-12-31T12:55:20.011 [DEBUG] [Thread-128041] [transport.py] [_log()] server lang: <none>
2025-12-31T12:55:20.011 [DEBUG] [Thread-128041] [transport.py] [_log()] kex follows: False
2025-12-31T12:55:20.011 [DEBUG] [Thread-128041] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:55:20.011 [DEBUG] [Thread-128041] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:55:20.011 [DEBUG] [Thread-128041] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:55:20.011 [DEBUG] [Thread-128041] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:55:20.011 [DEBUG] [Thread-128041] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:55:20.011 [DEBUG] [Thread-128041] [transport.py] [_log()] Compression: none
2025-12-31T12:55:20.011 [DEBUG] [Thread-128041] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:55:20.067 [DEBUG] [Thread-128041] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:55:20.068 [DEBUG] [Thread-128041] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:55:20.068 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T12:55:20.068 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:55:20.068 [DEBUG] [Thread-128041] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T12:55:20.124 [DEBUG] [Thread-128041] [transport.py] [_log()] userauth is OK
2025-12-31T12:55:20.125 [DEBUG] [Thread-128041] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:55:20.125 [DEBUG] [Thread-128041] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:55:20.125 [DEBUG] [Thread-128041] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T12:55:20.125 [DEBUG] [Thread-128041] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:55:20.140 [INFO] [Thread-128041] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:55:20.140 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T12:55:20.140 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:55:20.968 [DEBUG] [Thread-128041] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:55:20.968 [DEBUG] [Thread-128041] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:55:21.016 [DEBUG] [Thread-128041] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:55:21.016 [DEBUG] [Thread-128041] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:55:21.024 [DEBUG] [Thread-128041] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:55:21.032 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:55:21.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T12:55:21.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T12:55:21.048 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:55:21.048 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:55:21.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:55:21.056 [DEBUG] [Thread-128041] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:55:30.978 [DEBUG] [Thread-128043 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:55:46.031 [DEBUG] [Thread-128044 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:55:46.086 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:55:46.088 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:55:51.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T12:55:51.079 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T12:55:51.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T12:55:51.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 12, 55, 19), 33.97, 10.2, 0.0, 29.8, 25.84, 0, 0, 0, 2, 0, 0),)
2025-12-31T12:55:51.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 12:55:19
2025-12-31T12:55:51.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T12:55:52.102 [DEBUG] [Thread-128045] [transport.py] [_log()] starting thread (client mode): 0xb6b602e0
2025-12-31T12:55:52.102 [DEBUG] [Thread-128045] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:55:52.122 [DEBUG] [Thread-128045] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T12:55:52.122 [INFO] [Thread-128045] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T12:55:52.126 [DEBUG] [Thread-128045] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:55:52.126 [DEBUG] [Thread-128045] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T12:55:52.126 [DEBUG] [Thread-128045] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:55:52.126 [DEBUG] [Thread-128045] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:55:52.126 [DEBUG] [Thread-128045] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:55:52.126 [DEBUG] [Thread-128045] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:55:52.126 [DEBUG] [Thread-128045] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:55:52.126 [DEBUG] [Thread-128045] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:55:52.126 [DEBUG] [Thread-128045] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:55:52.126 [DEBUG] [Thread-128045] [transport.py] [_log()] client lang: <none>
2025-12-31T12:55:52.126 [DEBUG] [Thread-128045] [transport.py] [_log()] server lang: <none>
2025-12-31T12:55:52.126 [DEBUG] [Thread-128045] [transport.py] [_log()] kex follows: False
2025-12-31T12:55:52.126 [DEBUG] [Thread-128045] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:55:52.126 [DEBUG] [Thread-128045] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:55:52.126 [DEBUG] [Thread-128045] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:55:52.126 [DEBUG] [Thread-128045] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:55:52.126 [DEBUG] [Thread-128045] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:55:52.126 [DEBUG] [Thread-128045] [transport.py] [_log()] Compression: none
2025-12-31T12:55:52.126 [DEBUG] [Thread-128045] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:55:52.143 [DEBUG] [Thread-128045] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:55:52.143 [DEBUG] [Thread-128045] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:55:52.144 [DEBUG] [Thread-128045] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T12:55:52.144 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T12:55:52.144 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:55:52.144 [DEBUG] [Thread-128045] [transport.py] [_log()] userauth is OK
2025-12-31T12:55:52.144 [DEBUG] [Thread-128045] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:55:52.144 [DEBUG] [Thread-128045] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:55:52.144 [DEBUG] [Thread-128045] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T12:55:52.144 [DEBUG] [Thread-128045] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:55:52.153 [INFO] [Thread-128045] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:55:52.154 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:55:52.803 [DEBUG] [Thread-128045] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:55:52.803 [DEBUG] [Thread-128045] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:55:52.803 [DEBUG] [Thread-128045] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T12:55:52.843 [DEBUG] [Thread-128045] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:55:52.843 [DEBUG] [Thread-128045] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:55:52.845 [DEBUG] [Thread-128045] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:55:52.857 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:55:52.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T12:55:52.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T12:55:52.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T12:55:52.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:55:52.865 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T12:55:52.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:55:52.865 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:55:52.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T12:55:52.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.454309 -999.00  +24.60  25.55     16   -2.80 1 1 1 1 1   888    0 25.29 -136.08 ----- 26.7 25.6 276.0 31.9 30.4 -26.9 30.2 -25.3 29.2 -28.3 30.1 -23.6
2025-12-31T12:55:52.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T12:55:52.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T12:55:52.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.454309
2025-12-31T12:55:52.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T12:55:52.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T12:55:52.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T12:55:52.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T12:55:52.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T12:55:52.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T12:55:19', tmtdew=33.97, humidity=10.2, cloud=0.0, wind=29.8, temperature=25.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T10:54:12.298', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T12:55:52.866 [DEBUG] [Thread-128045] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:55:52.940 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T12:55:52.952 [DEBUG] [Thread-128048] [transport.py] [_log()] starting thread (client mode): 0xb95b3d00
2025-12-31T12:55:52.952 [DEBUG] [Thread-128048] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:55:52.967 [DEBUG] [Thread-128048] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T12:55:52.967 [INFO] [Thread-128048] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T12:55:52.974 [DEBUG] [Thread-128048] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:55:52.974 [DEBUG] [Thread-128048] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T12:55:52.974 [DEBUG] [Thread-128048] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:55:52.974 [DEBUG] [Thread-128048] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:55:52.974 [DEBUG] [Thread-128048] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:55:52.974 [DEBUG] [Thread-128048] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:55:52.974 [DEBUG] [Thread-128048] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:55:52.974 [DEBUG] [Thread-128048] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:55:52.974 [DEBUG] [Thread-128048] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:55:52.974 [DEBUG] [Thread-128048] [transport.py] [_log()] client lang: <none>
2025-12-31T12:55:52.974 [DEBUG] [Thread-128048] [transport.py] [_log()] server lang: <none>
2025-12-31T12:55:52.974 [DEBUG] [Thread-128048] [transport.py] [_log()] kex follows: False
2025-12-31T12:55:52.974 [DEBUG] [Thread-128048] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:55:52.974 [DEBUG] [Thread-128048] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:55:52.974 [DEBUG] [Thread-128048] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:55:52.974 [DEBUG] [Thread-128048] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:55:52.974 [DEBUG] [Thread-128048] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:55:52.974 [DEBUG] [Thread-128048] [transport.py] [_log()] Compression: none
2025-12-31T12:55:52.975 [DEBUG] [Thread-128048] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:55:53.032 [DEBUG] [Thread-128048] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:55:53.032 [DEBUG] [Thread-128048] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:55:53.032 [DEBUG] [Thread-128048] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T12:55:53.032 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T12:55:53.032 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:55:53.089 [DEBUG] [Thread-128048] [transport.py] [_log()] userauth is OK
2025-12-31T12:55:53.089 [DEBUG] [Thread-128048] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:55:53.089 [DEBUG] [Thread-128048] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:55:53.089 [DEBUG] [Thread-128048] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T12:55:53.089 [DEBUG] [Thread-128048] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:55:53.105 [INFO] [Thread-128048] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:55:53.105 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T12:55:53.105 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:55:53.937 [DEBUG] [Thread-128048] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:55:53.937 [DEBUG] [Thread-128048] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:55:53.985 [DEBUG] [Thread-128048] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:55:53.985 [DEBUG] [Thread-128048] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:55:53.994 [DEBUG] [Thread-128048] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:55:54.002 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:55:54.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T12:55:54.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T12:55:54.020 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:55:54.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:55:54.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:55:54.028 [DEBUG] [Thread-128048] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:56:01.067 [DEBUG] [Thread-128050 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:56:13.756 [DEBUG] [Thread-128051 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:56:16.107 [DEBUG] [Thread-128052 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:56:24.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T12:56:24.051 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T12:56:24.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-12-31T12:56:24.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 12, 55, 51), 33.71, 9.85, 0.0, 25.09, 25.23, 0, 0, 0, 2, 0, 0),)
2025-12-31T12:56:24.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 12:55:51
2025-12-31T12:56:24.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T12:56:25.103 [DEBUG] [Thread-128053] [transport.py] [_log()] starting thread (client mode): 0xb6b63d60
2025-12-31T12:56:25.103 [DEBUG] [Thread-128053] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:56:25.123 [DEBUG] [Thread-128053] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T12:56:25.123 [INFO] [Thread-128053] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T12:56:25.124 [DEBUG] [Thread-128053] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:56:25.124 [DEBUG] [Thread-128053] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T12:56:25.124 [DEBUG] [Thread-128053] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:56:25.124 [DEBUG] [Thread-128053] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:56:25.124 [DEBUG] [Thread-128053] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:56:25.124 [DEBUG] [Thread-128053] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:56:25.124 [DEBUG] [Thread-128053] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:56:25.124 [DEBUG] [Thread-128053] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:56:25.124 [DEBUG] [Thread-128053] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:56:25.124 [DEBUG] [Thread-128053] [transport.py] [_log()] client lang: <none>
2025-12-31T12:56:25.124 [DEBUG] [Thread-128053] [transport.py] [_log()] server lang: <none>
2025-12-31T12:56:25.124 [DEBUG] [Thread-128053] [transport.py] [_log()] kex follows: False
2025-12-31T12:56:25.124 [DEBUG] [Thread-128053] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:56:25.124 [DEBUG] [Thread-128053] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:56:25.124 [DEBUG] [Thread-128053] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:56:25.124 [DEBUG] [Thread-128053] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:56:25.124 [DEBUG] [Thread-128053] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:56:25.124 [DEBUG] [Thread-128053] [transport.py] [_log()] Compression: none
2025-12-31T12:56:25.124 [DEBUG] [Thread-128053] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:56:25.137 [DEBUG] [Thread-128053] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:56:25.137 [DEBUG] [Thread-128053] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:56:25.137 [DEBUG] [Thread-128053] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T12:56:25.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T12:56:25.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:56:25.137 [DEBUG] [Thread-128053] [transport.py] [_log()] userauth is OK
2025-12-31T12:56:25.138 [DEBUG] [Thread-128053] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:56:25.138 [DEBUG] [Thread-128053] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:56:25.138 [DEBUG] [Thread-128053] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T12:56:25.138 [DEBUG] [Thread-128053] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:56:25.147 [INFO] [Thread-128053] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:56:25.147 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:56:25.925 [DEBUG] [Thread-128053] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:56:25.925 [DEBUG] [Thread-128053] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:56:25.926 [DEBUG] [Thread-128053] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T12:56:25.966 [DEBUG] [Thread-128053] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:56:25.966 [DEBUG] [Thread-128053] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:56:25.970 [DEBUG] [Thread-128053] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:56:25.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:56:25.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T12:56:25.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T12:56:25.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T12:56:25.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:56:25.987 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T12:56:25.987 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:56:25.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:56:25.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T12:56:25.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.454309 -999.00  +24.60  25.55     16   -2.80 1 1 1 1 1   888    0 25.29 -136.08 ----- 26.7 25.6 276.0 31.9 30.4 -26.9 30.2 -25.3 29.2 -28.3 30.1 -23.6
2025-12-31T12:56:25.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T12:56:25.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T12:56:25.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.454309
2025-12-31T12:56:25.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T12:56:25.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T12:56:25.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T12:56:25.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T12:56:25.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T12:56:25.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T12:55:51', tmtdew=33.71, humidity=9.85, cloud=0.0, wind=25.09, temperature=25.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T10:54:12.298', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T12:56:25.990 [DEBUG] [Thread-128053] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:56:26.073 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T12:56:26.084 [DEBUG] [Thread-128056] [transport.py] [_log()] starting thread (client mode): 0xb6b29840
2025-12-31T12:56:26.085 [DEBUG] [Thread-128056] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:56:26.099 [DEBUG] [Thread-128056] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T12:56:26.100 [INFO] [Thread-128056] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T12:56:26.107 [DEBUG] [Thread-128056] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:56:26.107 [DEBUG] [Thread-128056] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T12:56:26.108 [DEBUG] [Thread-128056] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:56:26.108 [DEBUG] [Thread-128056] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:56:26.108 [DEBUG] [Thread-128056] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:56:26.108 [DEBUG] [Thread-128056] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:56:26.108 [DEBUG] [Thread-128056] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:56:26.108 [DEBUG] [Thread-128056] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:56:26.108 [DEBUG] [Thread-128056] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:56:26.108 [DEBUG] [Thread-128056] [transport.py] [_log()] client lang: <none>
2025-12-31T12:56:26.109 [DEBUG] [Thread-128056] [transport.py] [_log()] server lang: <none>
2025-12-31T12:56:26.109 [DEBUG] [Thread-128056] [transport.py] [_log()] kex follows: False
2025-12-31T12:56:26.109 [DEBUG] [Thread-128056] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:56:26.109 [DEBUG] [Thread-128056] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:56:26.109 [DEBUG] [Thread-128056] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:56:26.109 [DEBUG] [Thread-128056] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:56:26.109 [DEBUG] [Thread-128056] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:56:26.110 [DEBUG] [Thread-128056] [transport.py] [_log()] Compression: none
2025-12-31T12:56:26.110 [DEBUG] [Thread-128056] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:56:26.170 [DEBUG] [Thread-128056] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:56:26.171 [DEBUG] [Thread-128056] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:56:26.171 [DEBUG] [Thread-128056] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T12:56:26.172 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T12:56:26.172 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:56:26.226 [DEBUG] [Thread-128056] [transport.py] [_log()] userauth is OK
2025-12-31T12:56:26.226 [DEBUG] [Thread-128056] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:56:26.227 [DEBUG] [Thread-128056] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:56:26.227 [DEBUG] [Thread-128056] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T12:56:26.227 [DEBUG] [Thread-128056] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:56:26.246 [INFO] [Thread-128056] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:56: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-12-31T12:56:26.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:56:27.095 [DEBUG] [Thread-128056] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:56:27.096 [DEBUG] [Thread-128056] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:56:27.143 [DEBUG] [Thread-128056] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:56:27.143 [DEBUG] [Thread-128056] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:56:27.154 [DEBUG] [Thread-128056] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:56:27.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:56:27.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T12:56:27.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T12:56:27.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:56:27.181 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:56:27.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:56:27.190 [DEBUG] [Thread-128056] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:56:31.148 [DEBUG] [Thread-128058 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:56:46.203 [DEBUG] [Thread-128059 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:56:46.225 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:56:46.227 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:56:57.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T12:56:57.212 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T12:56:57.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T12:56:57.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 12, 56, 23), 33.47, 10.0, 0.0, 21.63, 25.04, 0, 0, 0, 2, 0, 0),)
2025-12-31T12:56:57.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 12:56:23
2025-12-31T12:56:58.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T12:56:58.218 [DEBUG] [Thread-128060] [transport.py] [_log()] starting thread (client mode): 0xb6b2a800
2025-12-31T12:56:58.219 [DEBUG] [Thread-128060] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:56:58.240 [DEBUG] [Thread-128060] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T12:56:58.240 [INFO] [Thread-128060] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T12:56:58.243 [DEBUG] [Thread-128060] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:56:58.243 [DEBUG] [Thread-128060] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T12:56:58.243 [DEBUG] [Thread-128060] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:56:58.243 [DEBUG] [Thread-128060] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:56:58.243 [DEBUG] [Thread-128060] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:56:58.243 [DEBUG] [Thread-128060] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:56:58.243 [DEBUG] [Thread-128060] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:56:58.243 [DEBUG] [Thread-128060] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:56:58.243 [DEBUG] [Thread-128060] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:56:58.243 [DEBUG] [Thread-128060] [transport.py] [_log()] client lang: <none>
2025-12-31T12:56:58.243 [DEBUG] [Thread-128060] [transport.py] [_log()] server lang: <none>
2025-12-31T12:56:58.243 [DEBUG] [Thread-128060] [transport.py] [_log()] kex follows: False
2025-12-31T12:56:58.243 [DEBUG] [Thread-128060] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:56:58.243 [DEBUG] [Thread-128060] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:56:58.243 [DEBUG] [Thread-128060] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:56:58.244 [DEBUG] [Thread-128060] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:56:58.244 [DEBUG] [Thread-128060] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:56:58.244 [DEBUG] [Thread-128060] [transport.py] [_log()] Compression: none
2025-12-31T12:56:58.244 [DEBUG] [Thread-128060] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:56:58.261 [DEBUG] [Thread-128060] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:56:58.261 [DEBUG] [Thread-128060] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:56:58.262 [DEBUG] [Thread-128060] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T12:56:58.262 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T12:56:58.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:56:58.264 [DEBUG] [Thread-128060] [transport.py] [_log()] userauth is OK
2025-12-31T12:56:58.264 [DEBUG] [Thread-128060] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:56:58.264 [DEBUG] [Thread-128060] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:56:58.264 [DEBUG] [Thread-128060] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T12:56:58.264 [DEBUG] [Thread-128060] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:56:58.288 [INFO] [Thread-128060] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:56:58.289 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:56:58.939 [DEBUG] [Thread-128060] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:56:58.939 [DEBUG] [Thread-128060] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:56:58.940 [DEBUG] [Thread-128060] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T12:56:58.980 [DEBUG] [Thread-128060] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:56:58.980 [DEBUG] [Thread-128060] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:56:58.984 [DEBUG] [Thread-128060] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:56:58.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:56:58.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T12:56:58.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T12:56:59.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T12:56:59.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:56:59.008 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T12:56:59.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:56:59.008 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:56:59.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T12:56:59.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.454309 -999.00  +24.60  25.55     16   -2.80 1 1 1 1 1   888    0 25.29 -136.08 ----- 26.7 25.6 276.0 31.9 30.4 -26.9 30.2 -25.3 29.2 -28.3 30.1 -23.6
2025-12-31T12:56:59.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T12:56:59.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T12:56:59.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.454309
2025-12-31T12:56:59.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T12:56:59.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T12:56:59.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T12:56:59.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T12:56:59.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T12:56:59.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T12:56:23', tmtdew=33.47, humidity=10.0, cloud=0.0, wind=21.63, temperature=25.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T10:54:12.298', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T12:56:59.011 [DEBUG] [Thread-128060] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:56:59.094 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T12:56:59.106 [DEBUG] [Thread-128063] [transport.py] [_log()] starting thread (client mode): 0xb6b60fa0
2025-12-31T12:56:59.106 [DEBUG] [Thread-128063] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:56:59.121 [DEBUG] [Thread-128063] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T12:56:59.121 [INFO] [Thread-128063] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T12:56:59.128 [DEBUG] [Thread-128063] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:56:59.128 [DEBUG] [Thread-128063] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T12:56:59.128 [DEBUG] [Thread-128063] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:56:59.128 [DEBUG] [Thread-128063] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:56:59.129 [DEBUG] [Thread-128063] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:56:59.129 [DEBUG] [Thread-128063] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:56:59.129 [DEBUG] [Thread-128063] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:56:59.129 [DEBUG] [Thread-128063] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:56:59.129 [DEBUG] [Thread-128063] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:56:59.129 [DEBUG] [Thread-128063] [transport.py] [_log()] client lang: <none>
2025-12-31T12:56:59.129 [DEBUG] [Thread-128063] [transport.py] [_log()] server lang: <none>
2025-12-31T12:56:59.129 [DEBUG] [Thread-128063] [transport.py] [_log()] kex follows: False
2025-12-31T12:56:59.129 [DEBUG] [Thread-128063] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:56:59.129 [DEBUG] [Thread-128063] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:56:59.129 [DEBUG] [Thread-128063] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:56:59.129 [DEBUG] [Thread-128063] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:56:59.129 [DEBUG] [Thread-128063] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:56:59.129 [DEBUG] [Thread-128063] [transport.py] [_log()] Compression: none
2025-12-31T12:56:59.129 [DEBUG] [Thread-128063] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:56:59.186 [DEBUG] [Thread-128063] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:56:59.187 [DEBUG] [Thread-128063] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:56:59.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T12:56:59.188 [DEBUG] [Thread-128063] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T12:56:59.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:56:59.242 [DEBUG] [Thread-128063] [transport.py] [_log()] userauth is OK
2025-12-31T12:56:59.242 [DEBUG] [Thread-128063] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:56:59.242 [DEBUG] [Thread-128063] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:56:59.242 [DEBUG] [Thread-128063] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T12:56:59.242 [DEBUG] [Thread-128063] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:56:59.260 [INFO] [Thread-128063] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:56:59.260 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T12:56:59.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:57:00.075 [DEBUG] [Thread-128063] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:57:00.076 [DEBUG] [Thread-128063] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:57:00.128 [DEBUG] [Thread-128063] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:57:00.128 [DEBUG] [Thread-128063] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:57:00.137 [DEBUG] [Thread-128063] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:57:00.148 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:57:00.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T12:57:00.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T12:57:00.167 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:57:00.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:57:00.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:57:00.177 [DEBUG] [Thread-128063] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:57:01.238 [DEBUG] [Thread-128065 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:57:13.808 [DEBUG] [Thread-128066 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:57:16.288 [DEBUG] [Thread-128067 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:57:30.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T12:57:30.197 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T12:57:30.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T12:57:30.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 12, 57, 27), 33.33, 10.25, 0.0, 21.05, 25.16, 0, 0, 0, 2, 0, 0),)
2025-12-31T12:57:30.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 12:57:27
2025-12-31T12:57:31.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T12:57:31.190 [DEBUG] [Thread-128068] [transport.py] [_log()] starting thread (client mode): 0xb6b149d0
2025-12-31T12:57:31.190 [DEBUG] [Thread-128068] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:57:31.212 [DEBUG] [Thread-128068] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T12:57:31.212 [INFO] [Thread-128068] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T12:57:31.216 [DEBUG] [Thread-128068] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:57:31.216 [DEBUG] [Thread-128068] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T12:57:31.216 [DEBUG] [Thread-128068] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:57:31.216 [DEBUG] [Thread-128068] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:57:31.216 [DEBUG] [Thread-128068] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:57:31.216 [DEBUG] [Thread-128068] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:57:31.217 [DEBUG] [Thread-128068] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:57:31.217 [DEBUG] [Thread-128068] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:57:31.217 [DEBUG] [Thread-128068] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:57:31.217 [DEBUG] [Thread-128068] [transport.py] [_log()] client lang: <none>
2025-12-31T12:57:31.217 [DEBUG] [Thread-128068] [transport.py] [_log()] server lang: <none>
2025-12-31T12:57:31.217 [DEBUG] [Thread-128068] [transport.py] [_log()] kex follows: False
2025-12-31T12:57:31.217 [DEBUG] [Thread-128068] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:57:31.217 [DEBUG] [Thread-128068] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:57:31.217 [DEBUG] [Thread-128068] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:57:31.217 [DEBUG] [Thread-128068] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:57:31.217 [DEBUG] [Thread-128068] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:57:31.217 [DEBUG] [Thread-128068] [transport.py] [_log()] Compression: none
2025-12-31T12:57:31.217 [DEBUG] [Thread-128068] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:57:31.234 [DEBUG] [Thread-128068] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:57:31.235 [DEBUG] [Thread-128068] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:57:31.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T12:57:31.235 [DEBUG] [Thread-128068] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T12:57:31.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:57:31.237 [DEBUG] [Thread-128068] [transport.py] [_log()] userauth is OK
2025-12-31T12:57:31.238 [DEBUG] [Thread-128068] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:57:31.238 [DEBUG] [Thread-128068] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:57:31.238 [DEBUG] [Thread-128068] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T12:57:31.238 [DEBUG] [Thread-128068] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:57:31.261 [INFO] [Thread-128068] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:57:31.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:57:31.322 [DEBUG] [Thread-128070 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:57:31.975 [DEBUG] [Thread-128068] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:57:31.975 [DEBUG] [Thread-128068] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:57:31.975 [DEBUG] [Thread-128068] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T12:57:32.016 [DEBUG] [Thread-128068] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:57:32.016 [DEBUG] [Thread-128068] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:57:32.020 [DEBUG] [Thread-128068] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:57:32.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:57:32.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T12:57:32.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T12:57:32.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T12:57:32.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:57:32.044 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T12:57:32.044 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:57:32.044 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:57:32.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T12:57:32.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.454309 -999.00  +24.60  25.55     16   -2.80 1 1 1 1 1   888    0 25.29 -136.08 ----- 26.7 25.6 276.0 31.9 30.4 -26.9 30.2 -25.3 29.2 -28.3 30.1 -23.6
2025-12-31T12:57:32.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T12:57:32.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T12:57:32.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.454309
2025-12-31T12:57:32.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T12:57:32.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T12:57:32.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T12:57:32.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T12:57:32.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T12:57:32.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T12:57:27', tmtdew=33.33, humidity=10.25, cloud=0.0, wind=21.05, temperature=25.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T10:54:12.298', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T12:57:32.047 [DEBUG] [Thread-128068] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:57: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-12-31T12:57:32.144 [DEBUG] [Thread-128072] [transport.py] [_log()] starting thread (client mode): 0xb6b17940
2025-12-31T12:57:32.145 [DEBUG] [Thread-128072] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:57:32.160 [DEBUG] [Thread-128072] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T12:57:32.160 [INFO] [Thread-128072] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T12:57:32.167 [DEBUG] [Thread-128072] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:57:32.168 [DEBUG] [Thread-128072] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T12:57:32.168 [DEBUG] [Thread-128072] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:57:32.168 [DEBUG] [Thread-128072] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:57:32.168 [DEBUG] [Thread-128072] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:57:32.168 [DEBUG] [Thread-128072] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:57:32.168 [DEBUG] [Thread-128072] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:57:32.168 [DEBUG] [Thread-128072] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:57:32.168 [DEBUG] [Thread-128072] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:57:32.168 [DEBUG] [Thread-128072] [transport.py] [_log()] client lang: <none>
2025-12-31T12:57:32.168 [DEBUG] [Thread-128072] [transport.py] [_log()] server lang: <none>
2025-12-31T12:57:32.168 [DEBUG] [Thread-128072] [transport.py] [_log()] kex follows: False
2025-12-31T12:57:32.168 [DEBUG] [Thread-128072] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:57:32.168 [DEBUG] [Thread-128072] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:57:32.168 [DEBUG] [Thread-128072] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:57:32.170 [DEBUG] [Thread-128072] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:57:32.170 [DEBUG] [Thread-128072] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:57:32.170 [DEBUG] [Thread-128072] [transport.py] [_log()] Compression: none
2025-12-31T12:57:32.170 [DEBUG] [Thread-128072] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:57:32.226 [DEBUG] [Thread-128072] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:57:32.227 [DEBUG] [Thread-128072] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:57:32.228 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T12:57:32.228 [DEBUG] [Thread-128072] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T12:57:32.229 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:57:32.283 [DEBUG] [Thread-128072] [transport.py] [_log()] userauth is OK
2025-12-31T12:57:32.283 [DEBUG] [Thread-128072] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:57:32.284 [DEBUG] [Thread-128072] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:57:32.284 [DEBUG] [Thread-128072] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T12:57:32.284 [DEBUG] [Thread-128072] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:57:32.303 [INFO] [Thread-128072] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:57:32.303 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T12:57:32.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:57:33.140 [DEBUG] [Thread-128072] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:57:33.141 [DEBUG] [Thread-128072] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:57:33.188 [DEBUG] [Thread-128072] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:57:33.188 [DEBUG] [Thread-128072] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:57:33.198 [DEBUG] [Thread-128072] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:57:33.207 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:57:33.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-12-31T12:57:33.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T12:57:33.226 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:57:33.226 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:57:33.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:57:33.235 [DEBUG] [Thread-128072] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:57:46.359 [DEBUG] [Thread-128074 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:57:46.367 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:57:46.368 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:58:01.407 [DEBUG] [Thread-128075 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:58:03.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T12:58:03.244 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T12:58:03.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T12:58:03.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 12, 57, 59), 33.02, 10.43, 0.0, 20.52, 24.98, 0, 0, 0, 2, 0, 0),)
2025-12-31T12:58:03.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 12:57:59
2025-12-31T12:58:04.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T12:58:04.225 [DEBUG] [Thread-128076] [transport.py] [_log()] starting thread (client mode): 0xb6b62800
2025-12-31T12:58:04.226 [DEBUG] [Thread-128076] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:58:04.246 [DEBUG] [Thread-128076] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T12:58:04.246 [INFO] [Thread-128076] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T12:58:04.249 [DEBUG] [Thread-128076] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:58:04.249 [DEBUG] [Thread-128076] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T12:58:04.249 [DEBUG] [Thread-128076] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:58:04.249 [DEBUG] [Thread-128076] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:58:04.249 [DEBUG] [Thread-128076] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:58:04.249 [DEBUG] [Thread-128076] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:58:04.249 [DEBUG] [Thread-128076] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:58:04.249 [DEBUG] [Thread-128076] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:58:04.249 [DEBUG] [Thread-128076] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:58:04.249 [DEBUG] [Thread-128076] [transport.py] [_log()] client lang: <none>
2025-12-31T12:58:04.249 [DEBUG] [Thread-128076] [transport.py] [_log()] server lang: <none>
2025-12-31T12:58:04.250 [DEBUG] [Thread-128076] [transport.py] [_log()] kex follows: False
2025-12-31T12:58:04.250 [DEBUG] [Thread-128076] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:58:04.250 [DEBUG] [Thread-128076] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:58:04.250 [DEBUG] [Thread-128076] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:58:04.250 [DEBUG] [Thread-128076] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:58:04.250 [DEBUG] [Thread-128076] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:58:04.250 [DEBUG] [Thread-128076] [transport.py] [_log()] Compression: none
2025-12-31T12:58:04.250 [DEBUG] [Thread-128076] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:58:04.268 [DEBUG] [Thread-128076] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:58:04.269 [DEBUG] [Thread-128076] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:58:04.269 [DEBUG] [Thread-128076] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T12:58:04.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T12:58:04.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:58:04.271 [DEBUG] [Thread-128076] [transport.py] [_log()] userauth is OK
2025-12-31T12:58:04.272 [DEBUG] [Thread-128076] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:58:04.272 [DEBUG] [Thread-128076] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:58:04.272 [DEBUG] [Thread-128076] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T12:58:04.272 [DEBUG] [Thread-128076] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:58:04.296 [INFO] [Thread-128076] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:58:04.297 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:58:04.937 [DEBUG] [Thread-128076] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:58:04.937 [DEBUG] [Thread-128076] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:58:04.938 [DEBUG] [Thread-128076] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T12:58:04.978 [DEBUG] [Thread-128076] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:58:04.978 [DEBUG] [Thread-128076] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:58:04.982 [DEBUG] [Thread-128076] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:58:04.993 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:58:04.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T12:58:04.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T12:58:04.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T12:58:05.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:58:05.006 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T12:58:05.006 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:58:05.006 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:58:05.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T12:58:05.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.454309 -999.00  +24.60  25.55     16   -2.80 1 1 1 1 1   888    0 25.29 -136.08 ----- 26.7 25.6 276.0 31.9 30.4 -26.9 30.2 -25.3 29.2 -28.3 30.1 -23.6
2025-12-31T12:58:05.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T12:58:05.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T12:58:05.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.454309
2025-12-31T12:58:05.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T12:58:05.008 [DEBUG] [Thread-128076] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:58:05.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T12:58:05.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T12:58:05.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T12:58:05.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T12:58:05.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T12:57:59', tmtdew=33.02, humidity=10.43, cloud=0.0, wind=20.52, temperature=24.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T10:54:12.298', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T12:58:05.092 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T12:58:05.104 [DEBUG] [Thread-128079] [transport.py] [_log()] starting thread (client mode): 0xb6b63460
2025-12-31T12:58:05.104 [DEBUG] [Thread-128079] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:58:05.119 [DEBUG] [Thread-128079] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T12:58:05.119 [INFO] [Thread-128079] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T12:58:05.127 [DEBUG] [Thread-128079] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:58:05.127 [DEBUG] [Thread-128079] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T12:58:05.128 [DEBUG] [Thread-128079] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:58:05.128 [DEBUG] [Thread-128079] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:58:05.128 [DEBUG] [Thread-128079] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:58:05.128 [DEBUG] [Thread-128079] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:58:05.128 [DEBUG] [Thread-128079] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:58:05.128 [DEBUG] [Thread-128079] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:58:05.128 [DEBUG] [Thread-128079] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:58:05.128 [DEBUG] [Thread-128079] [transport.py] [_log()] client lang: <none>
2025-12-31T12:58:05.128 [DEBUG] [Thread-128079] [transport.py] [_log()] server lang: <none>
2025-12-31T12:58:05.129 [DEBUG] [Thread-128079] [transport.py] [_log()] kex follows: False
2025-12-31T12:58:05.129 [DEBUG] [Thread-128079] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:58:05.129 [DEBUG] [Thread-128079] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:58:05.129 [DEBUG] [Thread-128079] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:58:05.129 [DEBUG] [Thread-128079] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:58:05.129 [DEBUG] [Thread-128079] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:58:05.129 [DEBUG] [Thread-128079] [transport.py] [_log()] Compression: none
2025-12-31T12:58:05.130 [DEBUG] [Thread-128079] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:58:05.196 [DEBUG] [Thread-128079] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:58:05.197 [DEBUG] [Thread-128079] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:58:05.198 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T12:58:05.198 [DEBUG] [Thread-128079] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T12:58:05.200 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:58:05.255 [DEBUG] [Thread-128079] [transport.py] [_log()] userauth is OK
2025-12-31T12:58:05.255 [DEBUG] [Thread-128079] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:58:05.256 [DEBUG] [Thread-128079] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:58:05.256 [DEBUG] [Thread-128079] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T12:58:05.256 [DEBUG] [Thread-128079] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:58:05.275 [INFO] [Thread-128079] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:58:05.275 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T12:58:05.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:58:06.108 [DEBUG] [Thread-128079] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:58:06.108 [DEBUG] [Thread-128079] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:58:06.157 [DEBUG] [Thread-128079] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:58:06.158 [DEBUG] [Thread-128079] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:58:06.169 [DEBUG] [Thread-128079] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:58:06.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:58:06.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T12:58:06.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T12:58:06.203 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:58:06.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:58:06.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:58:06.212 [DEBUG] [Thread-128079] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:58:13.861 [DEBUG] [Thread-128081 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:58:16.439 [DEBUG] [Thread-128082 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:58:31.492 [DEBUG] [Thread-128083 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:58:36.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T12:58:36.224 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T12:58:36.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-12-31T12:58:36.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 12, 58, 31), 33.02, 10.45, 0.0, 18.17, 25.06, 0, 0, 0, 2, 0, 0),)
2025-12-31T12:58:36.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 12:58:31
2025-12-31T12:58:37.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T12:58:37.258 [DEBUG] [Thread-128084] [transport.py] [_log()] starting thread (client mode): 0xb6b63c40
2025-12-31T12:58:37.258 [DEBUG] [Thread-128084] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:58:37.274 [DEBUG] [Thread-128084] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T12:58:37.274 [INFO] [Thread-128084] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T12:58:37.278 [DEBUG] [Thread-128084] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:58:37.278 [DEBUG] [Thread-128084] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T12:58:37.278 [DEBUG] [Thread-128084] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:58:37.278 [DEBUG] [Thread-128084] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:58:37.278 [DEBUG] [Thread-128084] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:58:37.278 [DEBUG] [Thread-128084] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:58:37.278 [DEBUG] [Thread-128084] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:58:37.278 [DEBUG] [Thread-128084] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:58:37.278 [DEBUG] [Thread-128084] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:58:37.278 [DEBUG] [Thread-128084] [transport.py] [_log()] client lang: <none>
2025-12-31T12:58:37.278 [DEBUG] [Thread-128084] [transport.py] [_log()] server lang: <none>
2025-12-31T12:58:37.278 [DEBUG] [Thread-128084] [transport.py] [_log()] kex follows: False
2025-12-31T12:58:37.278 [DEBUG] [Thread-128084] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:58:37.278 [DEBUG] [Thread-128084] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:58:37.278 [DEBUG] [Thread-128084] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:58:37.278 [DEBUG] [Thread-128084] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:58:37.278 [DEBUG] [Thread-128084] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:58:37.278 [DEBUG] [Thread-128084] [transport.py] [_log()] Compression: none
2025-12-31T12:58:37.278 [DEBUG] [Thread-128084] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:58:37.294 [DEBUG] [Thread-128084] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:58:37.294 [DEBUG] [Thread-128084] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:58:37.295 [DEBUG] [Thread-128084] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T12:58:37.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T12:58:37.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:58:37.296 [DEBUG] [Thread-128084] [transport.py] [_log()] userauth is OK
2025-12-31T12:58:37.296 [DEBUG] [Thread-128084] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:58:37.296 [DEBUG] [Thread-128084] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:58:37.296 [DEBUG] [Thread-128084] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T12:58:37.296 [DEBUG] [Thread-128084] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:58:37.309 [INFO] [Thread-128084] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:58:37.310 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:58:38.123 [DEBUG] [Thread-128084] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:58:38.123 [DEBUG] [Thread-128084] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:58:38.123 [DEBUG] [Thread-128084] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T12:58:38.165 [DEBUG] [Thread-128084] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:58:38.165 [DEBUG] [Thread-128084] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:58:38.167 [DEBUG] [Thread-128084] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:58:38.175 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:58:38.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T12:58:38.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T12:58:38.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T12:58:38.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:58:38.180 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T12:58:38.180 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:58:38.180 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:58:38.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T12:58:38.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.454309 -999.00  +24.60  25.55     16   -2.80 1 1 1 1 1   888    0 25.29 -136.08 ----- 26.7 25.6 276.0 31.9 30.4 -26.9 30.2 -25.3 29.2 -28.3 30.1 -23.6
2025-12-31T12:58:38.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T12:58:38.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T12:58:38.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.454309
2025-12-31T12:58:38.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T12:58:38.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T12:58:38.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T12:58:38.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T12:58:38.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T12:58:38.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T12:58:31', tmtdew=33.02, humidity=10.45, cloud=0.0, wind=18.17, temperature=25.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T10:54:12.298', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T12:58:38.180 [DEBUG] [Thread-128084] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:58:38.256 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T12:58:38.267 [DEBUG] [Thread-128087] [transport.py] [_log()] starting thread (client mode): 0xbbfcc640
2025-12-31T12:58:38.267 [DEBUG] [Thread-128087] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:58:38.282 [DEBUG] [Thread-128087] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T12:58:38.282 [INFO] [Thread-128087] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T12:58:38.289 [DEBUG] [Thread-128087] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:58:38.289 [DEBUG] [Thread-128087] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T12:58:38.289 [DEBUG] [Thread-128087] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:58:38.289 [DEBUG] [Thread-128087] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:58:38.289 [DEBUG] [Thread-128087] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:58:38.289 [DEBUG] [Thread-128087] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:58:38.289 [DEBUG] [Thread-128087] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:58:38.289 [DEBUG] [Thread-128087] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:58:38.289 [DEBUG] [Thread-128087] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:58:38.289 [DEBUG] [Thread-128087] [transport.py] [_log()] client lang: <none>
2025-12-31T12:58:38.289 [DEBUG] [Thread-128087] [transport.py] [_log()] server lang: <none>
2025-12-31T12:58:38.289 [DEBUG] [Thread-128087] [transport.py] [_log()] kex follows: False
2025-12-31T12:58:38.289 [DEBUG] [Thread-128087] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:58:38.289 [DEBUG] [Thread-128087] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:58:38.289 [DEBUG] [Thread-128087] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:58:38.289 [DEBUG] [Thread-128087] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:58:38.289 [DEBUG] [Thread-128087] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:58:38.289 [DEBUG] [Thread-128087] [transport.py] [_log()] Compression: none
2025-12-31T12:58:38.289 [DEBUG] [Thread-128087] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:58:38.345 [DEBUG] [Thread-128087] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:58:38.345 [DEBUG] [Thread-128087] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:58:38.345 [DEBUG] [Thread-128087] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T12:58:38.345 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T12:58:38.345 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:58:38.402 [DEBUG] [Thread-128087] [transport.py] [_log()] userauth is OK
2025-12-31T12:58:38.402 [DEBUG] [Thread-128087] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:58:38.402 [DEBUG] [Thread-128087] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:58:38.402 [DEBUG] [Thread-128087] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T12:58:38.402 [DEBUG] [Thread-128087] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:58:38.416 [INFO] [Thread-128087] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:58:38.416 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T12:58:38.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:58:39.237 [DEBUG] [Thread-128087] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:58:39.237 [DEBUG] [Thread-128087] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:58:39.286 [DEBUG] [Thread-128087] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:58:39.286 [DEBUG] [Thread-128087] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:58:39.294 [DEBUG] [Thread-128087] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:58:39.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:58:39.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T12:58:39.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T12:58:39.318 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:58:39.318 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:58:39.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:58:39.326 [DEBUG] [Thread-128087] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:58:46.509 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:58:46.510 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:58:46.522 [DEBUG] [Thread-128089 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:59:01.583 [DEBUG] [Thread-128090 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:59:09.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T12:59:09.327 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T12:59:09.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T12:59:10.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 12, 59, 3), 33.09, 10.41, 0.0, 17.43, 25.17, 0, 0, 0, 2, 0, 0),)
2025-12-31T12:59:10.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 12:59:03
2025-12-31T12:59:10.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T12:59:10.318 [DEBUG] [Thread-128091] [transport.py] [_log()] starting thread (client mode): 0xb6b63c70
2025-12-31T12:59:10.318 [DEBUG] [Thread-128091] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:59:10.340 [DEBUG] [Thread-128091] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T12:59:10.341 [INFO] [Thread-128091] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T12:59:10.344 [DEBUG] [Thread-128091] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:59:10.344 [DEBUG] [Thread-128091] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T12:59:10.344 [DEBUG] [Thread-128091] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:59:10.344 [DEBUG] [Thread-128091] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:59:10.344 [DEBUG] [Thread-128091] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:59:10.345 [DEBUG] [Thread-128091] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:59:10.345 [DEBUG] [Thread-128091] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:59:10.345 [DEBUG] [Thread-128091] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:59:10.345 [DEBUG] [Thread-128091] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:59:10.345 [DEBUG] [Thread-128091] [transport.py] [_log()] client lang: <none>
2025-12-31T12:59:10.345 [DEBUG] [Thread-128091] [transport.py] [_log()] server lang: <none>
2025-12-31T12:59:10.345 [DEBUG] [Thread-128091] [transport.py] [_log()] kex follows: False
2025-12-31T12:59:10.345 [DEBUG] [Thread-128091] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:59:10.345 [DEBUG] [Thread-128091] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:59:10.345 [DEBUG] [Thread-128091] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:59:10.345 [DEBUG] [Thread-128091] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:59:10.345 [DEBUG] [Thread-128091] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:59:10.346 [DEBUG] [Thread-128091] [transport.py] [_log()] Compression: none
2025-12-31T12:59:10.346 [DEBUG] [Thread-128091] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:59:10.356 [DEBUG] [Thread-128091] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:59:10.357 [DEBUG] [Thread-128091] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:59:10.358 [DEBUG] [Thread-128091] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T12:59:10.358 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T12:59:10.359 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:59:10.360 [DEBUG] [Thread-128091] [transport.py] [_log()] userauth is OK
2025-12-31T12:59:10.360 [DEBUG] [Thread-128091] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:59:10.360 [DEBUG] [Thread-128091] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:59:10.360 [DEBUG] [Thread-128091] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T12:59:10.360 [DEBUG] [Thread-128091] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:59:10.375 [INFO] [Thread-128091] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:59:10.375 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:59:10.990 [DEBUG] [Thread-128091] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:59:10.990 [DEBUG] [Thread-128091] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:59:10.991 [DEBUG] [Thread-128091] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T12:59:11.031 [DEBUG] [Thread-128091] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:59:11.031 [DEBUG] [Thread-128091] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:59:11.034 [DEBUG] [Thread-128091] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:59:11.048 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:59:11.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T12:59:11.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T12:59:11.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T12:59:11.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:59:11.059 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T12:59:11.059 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:59:11.060 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:59:11.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T12:59:11.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.454309 -999.00  +24.60  25.55     16   -2.80 1 1 1 1 1   888    0 25.29 -136.08 ----- 26.7 25.6 276.0 31.9 30.4 -26.9 30.2 -25.3 29.2 -28.3 30.1 -23.6
2025-12-31T12:59:11.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T12:59:11.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T12:59:11.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.454309
2025-12-31T12:59:11.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T12:59:11.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T12:59:11.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T12:59:11.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T12:59:11.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T12:59:11.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T12:59:03', tmtdew=33.09, humidity=10.41, cloud=0.0, wind=17.43, temperature=25.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T10:54:12.298', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T12:59:11.062 [DEBUG] [Thread-128091] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:59:11.146 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T12:59:11.158 [DEBUG] [Thread-128094] [transport.py] [_log()] starting thread (client mode): 0xb6b62620
2025-12-31T12:59:11.158 [DEBUG] [Thread-128094] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:59:11.173 [DEBUG] [Thread-128094] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T12:59:11.173 [INFO] [Thread-128094] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T12:59:11.180 [DEBUG] [Thread-128094] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:59:11.181 [DEBUG] [Thread-128094] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T12:59:11.181 [DEBUG] [Thread-128094] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:59:11.181 [DEBUG] [Thread-128094] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:59:11.181 [DEBUG] [Thread-128094] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:59:11.181 [DEBUG] [Thread-128094] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:59:11.181 [DEBUG] [Thread-128094] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:59:11.181 [DEBUG] [Thread-128094] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:59:11.181 [DEBUG] [Thread-128094] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:59:11.181 [DEBUG] [Thread-128094] [transport.py] [_log()] client lang: <none>
2025-12-31T12:59:11.181 [DEBUG] [Thread-128094] [transport.py] [_log()] server lang: <none>
2025-12-31T12:59:11.181 [DEBUG] [Thread-128094] [transport.py] [_log()] kex follows: False
2025-12-31T12:59:11.181 [DEBUG] [Thread-128094] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:59:11.181 [DEBUG] [Thread-128094] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:59:11.181 [DEBUG] [Thread-128094] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:59:11.181 [DEBUG] [Thread-128094] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:59:11.181 [DEBUG] [Thread-128094] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:59:11.181 [DEBUG] [Thread-128094] [transport.py] [_log()] Compression: none
2025-12-31T12:59:11.181 [DEBUG] [Thread-128094] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:59:11.239 [DEBUG] [Thread-128094] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:59:11.239 [DEBUG] [Thread-128094] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:59:11.240 [DEBUG] [Thread-128094] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T12:59:11.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T12:59:11.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:59:11.295 [DEBUG] [Thread-128094] [transport.py] [_log()] userauth is OK
2025-12-31T12:59:11.295 [DEBUG] [Thread-128094] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:59:11.295 [DEBUG] [Thread-128094] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:59:11.296 [DEBUG] [Thread-128094] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T12:59:11.296 [DEBUG] [Thread-128094] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:59:11.314 [INFO] [Thread-128094] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:59:11.315 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T12:59:11.315 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:59:12.121 [DEBUG] [Thread-128094] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:59:12.122 [DEBUG] [Thread-128094] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:59:12.169 [DEBUG] [Thread-128094] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:59:12.169 [DEBUG] [Thread-128094] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:59:12.178 [DEBUG] [Thread-128094] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:59:12.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:59:12.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T12:59: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') -> 00000000
2025-12-31T12:59:12.206 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:59:12.206 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:59:12.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:59:12.215 [DEBUG] [Thread-128094] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:59:13.913 [DEBUG] [Thread-128096 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:59:16.616 [DEBUG] [Thread-128097 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:59:31.659 [DEBUG] [Thread-128098 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:59:42.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T12:59:42.210 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T12:59:42.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-12-31T12:59:42.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 12, 59, 35), 32.77, 10.95, 0.0, 23.87, 25.42, 0, 0, 0, 2, 0, 0),)
2025-12-31T12:59:42.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 12:59:35
2025-12-31T12:59:43.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T12:59:43.196 [DEBUG] [Thread-128099] [transport.py] [_log()] starting thread (client mode): 0xb95b2140
2025-12-31T12:59:43.196 [DEBUG] [Thread-128099] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:59:43.217 [DEBUG] [Thread-128099] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T12:59:43.217 [INFO] [Thread-128099] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T12:59:43.218 [DEBUG] [Thread-128099] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:59:43.218 [DEBUG] [Thread-128099] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T12:59:43.218 [DEBUG] [Thread-128099] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:59:43.218 [DEBUG] [Thread-128099] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:59:43.218 [DEBUG] [Thread-128099] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:59:43.218 [DEBUG] [Thread-128099] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:59:43.218 [DEBUG] [Thread-128099] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:59:43.218 [DEBUG] [Thread-128099] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:59:43.218 [DEBUG] [Thread-128099] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:59:43.218 [DEBUG] [Thread-128099] [transport.py] [_log()] client lang: <none>
2025-12-31T12:59:43.218 [DEBUG] [Thread-128099] [transport.py] [_log()] server lang: <none>
2025-12-31T12:59:43.218 [DEBUG] [Thread-128099] [transport.py] [_log()] kex follows: False
2025-12-31T12:59:43.218 [DEBUG] [Thread-128099] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:59:43.218 [DEBUG] [Thread-128099] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:59:43.218 [DEBUG] [Thread-128099] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:59:43.218 [DEBUG] [Thread-128099] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:59:43.218 [DEBUG] [Thread-128099] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:59:43.218 [DEBUG] [Thread-128099] [transport.py] [_log()] Compression: none
2025-12-31T12:59:43.218 [DEBUG] [Thread-128099] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:59:43.231 [DEBUG] [Thread-128099] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:59:43.232 [DEBUG] [Thread-128099] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:59:43.232 [DEBUG] [Thread-128099] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T12:59:43.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T12:59:43.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:59:43.234 [DEBUG] [Thread-128099] [transport.py] [_log()] userauth is OK
2025-12-31T12:59:43.234 [DEBUG] [Thread-128099] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:59:43.234 [DEBUG] [Thread-128099] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:59:43.234 [DEBUG] [Thread-128099] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T12:59:43.234 [DEBUG] [Thread-128099] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:59:43.259 [INFO] [Thread-128099] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:59:43.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:59:44.082 [DEBUG] [Thread-128099] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:59:44.082 [DEBUG] [Thread-128099] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:59:44.083 [DEBUG] [Thread-128099] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T12:59:44.123 [DEBUG] [Thread-128099] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:59:44.124 [DEBUG] [Thread-128099] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:59:44.126 [DEBUG] [Thread-128099] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:59:44.138 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:59:44.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T12:59:44.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T12:59:44.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T12:59:44.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:59:44.148 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T12:59:44.148 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:59:44.148 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:59:44.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T12:59:44.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.454309 -999.00  +24.60  25.55     16   -2.80 1 1 1 1 1   888    0 25.29 -136.08 ----- 26.7 25.6 276.0 31.9 30.4 -26.9 30.2 -25.3 29.2 -28.3 30.1 -23.6
2025-12-31T12:59:44.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T12:59:44.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T12:59:44.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.454309
2025-12-31T12:59:44.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T12:59:44.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T12:59:44.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T12:59:44.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T12:59:44.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T12:59:44.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T12:59:35', tmtdew=32.77, humidity=10.95, cloud=0.0, wind=23.87, temperature=25.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T10:54:12.298', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T12:59:44.150 [DEBUG] [Thread-128099] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:59:44.238 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T12:59:44.249 [DEBUG] [Thread-128102] [transport.py] [_log()] starting thread (client mode): 0xb95b08b0
2025-12-31T12:59:44.249 [DEBUG] [Thread-128102] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T12:59:44.263 [DEBUG] [Thread-128102] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T12:59:44.263 [INFO] [Thread-128102] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T12:59:44.272 [DEBUG] [Thread-128102] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T12:59:44.272 [DEBUG] [Thread-128102] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T12:59:44.273 [DEBUG] [Thread-128102] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T12:59:44.273 [DEBUG] [Thread-128102] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:59:44.273 [DEBUG] [Thread-128102] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T12:59:44.273 [DEBUG] [Thread-128102] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:59:44.273 [DEBUG] [Thread-128102] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T12:59:44.273 [DEBUG] [Thread-128102] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T12:59:44.273 [DEBUG] [Thread-128102] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T12:59:44.273 [DEBUG] [Thread-128102] [transport.py] [_log()] client lang: <none>
2025-12-31T12:59:44.273 [DEBUG] [Thread-128102] [transport.py] [_log()] server lang: <none>
2025-12-31T12:59:44.273 [DEBUG] [Thread-128102] [transport.py] [_log()] kex follows: False
2025-12-31T12:59:44.274 [DEBUG] [Thread-128102] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T12:59:44.274 [DEBUG] [Thread-128102] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T12:59:44.274 [DEBUG] [Thread-128102] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T12:59:44.274 [DEBUG] [Thread-128102] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T12:59:44.274 [DEBUG] [Thread-128102] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T12:59:44.274 [DEBUG] [Thread-128102] [transport.py] [_log()] Compression: none
2025-12-31T12:59:44.274 [DEBUG] [Thread-128102] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T12:59:44.333 [DEBUG] [Thread-128102] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T12:59:44.333 [DEBUG] [Thread-128102] [transport.py] [_log()] Switch to new keys ...
2025-12-31T12:59:44.334 [DEBUG] [Thread-128102] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T12:59:44.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T12:59:44.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T12:59:44.391 [DEBUG] [Thread-128102] [transport.py] [_log()] userauth is OK
2025-12-31T12:59:44.391 [DEBUG] [Thread-128102] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T12:59:44.391 [DEBUG] [Thread-128102] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T12:59:44.391 [DEBUG] [Thread-128102] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T12:59:44.391 [DEBUG] [Thread-128102] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T12:59:44.410 [INFO] [Thread-128102] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T12:59:44.410 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T12:59:44.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T12:59:45.255 [DEBUG] [Thread-128102] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T12:59:45.255 [DEBUG] [Thread-128102] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T12:59:45.302 [DEBUG] [Thread-128102] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T12:59:45.303 [DEBUG] [Thread-128102] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T12:59:45.311 [DEBUG] [Thread-128102] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T12:59:45.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T12:59:45.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T12:59:45.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T12:59:45.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T12:59:45.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T12:59:45.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T12:59:45.345 [DEBUG] [Thread-128102] [transport.py] [_log()] EOF in transport thread
2025-12-31T12:59:46.649 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:59:46.650 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T12:59:46.695 [DEBUG] [Thread-128104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:00:01.739 [DEBUG] [Thread-128105 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:00:13.976 [DEBUG] [Thread-128106 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:00:15.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T13:00:15.368 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T13:00:15.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T13:00:16.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 0, 8), 32.58, 11.08, 0.0, 24.47, 25.34, 0, 0, 0, 2, 0, 0),)
2025-12-31T13:00:16.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:00:08
2025-12-31T13:00:16.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T13:00:16.350 [DEBUG] [Thread-128107] [transport.py] [_log()] starting thread (client mode): 0xb6b61e40
2025-12-31T13:00:16.350 [DEBUG] [Thread-128107] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:00:16.371 [DEBUG] [Thread-128107] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T13:00:16.371 [INFO] [Thread-128107] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T13:00:16.374 [DEBUG] [Thread-128107] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:00:16.374 [DEBUG] [Thread-128107] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T13:00:16.374 [DEBUG] [Thread-128107] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:00:16.374 [DEBUG] [Thread-128107] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:00:16.374 [DEBUG] [Thread-128107] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:00:16.374 [DEBUG] [Thread-128107] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:00:16.374 [DEBUG] [Thread-128107] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:00:16.375 [DEBUG] [Thread-128107] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:00:16.375 [DEBUG] [Thread-128107] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:00:16.375 [DEBUG] [Thread-128107] [transport.py] [_log()] client lang: <none>
2025-12-31T13:00:16.375 [DEBUG] [Thread-128107] [transport.py] [_log()] server lang: <none>
2025-12-31T13:00:16.375 [DEBUG] [Thread-128107] [transport.py] [_log()] kex follows: False
2025-12-31T13:00:16.375 [DEBUG] [Thread-128107] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:00:16.375 [DEBUG] [Thread-128107] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:00:16.375 [DEBUG] [Thread-128107] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:00:16.375 [DEBUG] [Thread-128107] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:00:16.375 [DEBUG] [Thread-128107] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:00:16.375 [DEBUG] [Thread-128107] [transport.py] [_log()] Compression: none
2025-12-31T13:00:16.375 [DEBUG] [Thread-128107] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:00:16.392 [DEBUG] [Thread-128107] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:00:16.392 [DEBUG] [Thread-128107] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:00:16.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T13:00:16.393 [DEBUG] [Thread-128107] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T13:00:16.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:00:16.396 [DEBUG] [Thread-128107] [transport.py] [_log()] userauth is OK
2025-12-31T13:00:16.396 [DEBUG] [Thread-128107] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:00:16.396 [DEBUG] [Thread-128107] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:00:16.396 [DEBUG] [Thread-128107] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T13:00:16.396 [DEBUG] [Thread-128107] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:00:16.431 [INFO] [Thread-128107] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:00:16.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:00:16.772 [DEBUG] [Thread-128109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:00:21.045 [DEBUG] [Thread-128107] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:00:21.046 [DEBUG] [Thread-128107] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:00:21.046 [DEBUG] [Thread-128107] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T13:00:21.086 [DEBUG] [Thread-128107] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:00:21.086 [DEBUG] [Thread-128107] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:00:21.090 [DEBUG] [Thread-128107] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:00:21.243 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:00:21.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T13:00:21.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T13:00:21.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T13:00:21.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:00:21.254 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T13:00:21.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:00:21.254 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:00:21.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T13:00:21.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.454309 -999.00  +24.60  25.55     16   -2.80 1 1 1 1 1   888    0 25.29 -136.08 ----- 26.7 25.6 276.0 31.9 30.4 -26.9 30.2 -25.3 29.2 -28.3 30.1 -23.6
2025-12-31T13:00:21.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T13:00:21.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T13:00:21.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.454309
2025-12-31T13:00:21.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T13:00:21.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T13:00:21.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T13:00:21.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T13:00:21.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T13:00:21.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:00:08', tmtdew=32.58, humidity=11.08, cloud=0.0, wind=24.47, temperature=25.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T10:54:12.298', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T13:00:21.257 [DEBUG] [Thread-128107] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:00:21.352 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T13:00:21.364 [DEBUG] [Thread-128111] [transport.py] [_log()] starting thread (client mode): 0xb6b61e70
2025-12-31T13:00:21.365 [DEBUG] [Thread-128111] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:00:21.380 [DEBUG] [Thread-128111] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T13:00:21.380 [INFO] [Thread-128111] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T13:00:21.387 [DEBUG] [Thread-128111] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:00:21.388 [DEBUG] [Thread-128111] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T13:00:21.388 [DEBUG] [Thread-128111] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:00:21.388 [DEBUG] [Thread-128111] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:00:21.388 [DEBUG] [Thread-128111] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:00:21.388 [DEBUG] [Thread-128111] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:00:21.388 [DEBUG] [Thread-128111] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:00:21.388 [DEBUG] [Thread-128111] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:00:21.388 [DEBUG] [Thread-128111] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:00:21.388 [DEBUG] [Thread-128111] [transport.py] [_log()] client lang: <none>
2025-12-31T13:00:21.388 [DEBUG] [Thread-128111] [transport.py] [_log()] server lang: <none>
2025-12-31T13:00:21.388 [DEBUG] [Thread-128111] [transport.py] [_log()] kex follows: False
2025-12-31T13:00:21.388 [DEBUG] [Thread-128111] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:00:21.388 [DEBUG] [Thread-128111] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:00:21.388 [DEBUG] [Thread-128111] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:00:21.388 [DEBUG] [Thread-128111] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:00:21.388 [DEBUG] [Thread-128111] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:00:21.389 [DEBUG] [Thread-128111] [transport.py] [_log()] Compression: none
2025-12-31T13:00:21.389 [DEBUG] [Thread-128111] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:00:21.448 [DEBUG] [Thread-128111] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:00:21.449 [DEBUG] [Thread-128111] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:00:21.449 [DEBUG] [Thread-128111] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T13:00:21.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T13:00:21.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:00:21.504 [DEBUG] [Thread-128111] [transport.py] [_log()] userauth is OK
2025-12-31T13:00:21.504 [DEBUG] [Thread-128111] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:00:21.504 [DEBUG] [Thread-128111] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:00:21.505 [DEBUG] [Thread-128111] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T13:00:21.505 [DEBUG] [Thread-128111] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:00:21.527 [INFO] [Thread-128111] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:00:21.527 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T13:00:21.528 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:00:22.364 [DEBUG] [Thread-128111] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:00:22.365 [DEBUG] [Thread-128111] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:00:22.412 [DEBUG] [Thread-128111] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:00:22.413 [DEBUG] [Thread-128111] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:00:22.422 [DEBUG] [Thread-128111] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:00:22.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:00:22.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T13:00:22.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T13:00:22.451 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:00:22.451 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:00:22.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:00:22.460 [DEBUG] [Thread-128111] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:00:31.814 [DEBUG] [Thread-128113 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:00:46.791 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:00:46.792 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:00:46.860 [DEBUG] [Thread-128114 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:00:52.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T13:00:52.483 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T13:00:52.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T13:00:53.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 0, 40), 32.76, 11.16, 0.0, 17.33, 25.81, 0, 0, 0, 2, 0, 0),)
2025-12-31T13:00:53.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:00:40
2025-12-31T13:00:53.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T13:00:53.457 [DEBUG] [Thread-128115] [transport.py] [_log()] starting thread (client mode): 0xb6b166e0
2025-12-31T13:00:53.457 [DEBUG] [Thread-128115] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:00:53.478 [DEBUG] [Thread-128115] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T13:00:53.478 [INFO] [Thread-128115] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T13:00:53.481 [DEBUG] [Thread-128115] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:00:53.481 [DEBUG] [Thread-128115] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T13:00:53.481 [DEBUG] [Thread-128115] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:00:53.481 [DEBUG] [Thread-128115] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:00:53.481 [DEBUG] [Thread-128115] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:00:53.481 [DEBUG] [Thread-128115] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:00:53.481 [DEBUG] [Thread-128115] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:00:53.481 [DEBUG] [Thread-128115] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:00:53.481 [DEBUG] [Thread-128115] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:00:53.481 [DEBUG] [Thread-128115] [transport.py] [_log()] client lang: <none>
2025-12-31T13:00:53.481 [DEBUG] [Thread-128115] [transport.py] [_log()] server lang: <none>
2025-12-31T13:00:53.481 [DEBUG] [Thread-128115] [transport.py] [_log()] kex follows: False
2025-12-31T13:00:53.481 [DEBUG] [Thread-128115] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:00:53.481 [DEBUG] [Thread-128115] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:00:53.482 [DEBUG] [Thread-128115] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:00:53.482 [DEBUG] [Thread-128115] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:00:53.482 [DEBUG] [Thread-128115] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:00:53.482 [DEBUG] [Thread-128115] [transport.py] [_log()] Compression: none
2025-12-31T13:00:53.482 [DEBUG] [Thread-128115] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:00:53.498 [DEBUG] [Thread-128115] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:00:53.498 [DEBUG] [Thread-128115] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:00:53.498 [DEBUG] [Thread-128115] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T13:00:53.498 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T13:00:53.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:00:53.500 [DEBUG] [Thread-128115] [transport.py] [_log()] userauth is OK
2025-12-31T13:00:53.500 [DEBUG] [Thread-128115] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:00:53.500 [DEBUG] [Thread-128115] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:00:53.500 [DEBUG] [Thread-128115] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T13:00:53.500 [DEBUG] [Thread-128115] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:00:53.520 [INFO] [Thread-128115] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:00:53.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:00:54.169 [DEBUG] [Thread-128115] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:00:54.169 [DEBUG] [Thread-128115] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:00:54.170 [DEBUG] [Thread-128115] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T13:00:54.210 [DEBUG] [Thread-128115] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:00:54.211 [DEBUG] [Thread-128115] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:00:54.215 [DEBUG] [Thread-128115] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:00:54.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:00:54.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T13:00:54.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T13:00:54.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T13:00:54.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:00:54.241 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T13:00:54.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:00:54.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:00:54.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T13:00:54.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.458476 -999.00  +25.30  26.07     16   -1.60 1 2 1 1 1   888    0 23.82 -169.88 NA 19.7 26.1 269.8 29.9 30.8 -23.2 30.3 -21.8 29.7 -19.9 30.4 -20.1
2025-12-31T13:00:54.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T13:00:54.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T13:00:54.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.458476
2025-12-31T13:00:54.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T13:00:54.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T13:00:54.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T13:00:54.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T13:00:54.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T13:00:54.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:00:40', tmtdew=32.76, humidity=11.16, cloud=0.0, wind=17.33, temperature=25.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T11:00:12.326', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T13:00:54.245 [DEBUG] [Thread-128115] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:00:54.327 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T13:00:54.340 [DEBUG] [Thread-128118] [transport.py] [_log()] starting thread (client mode): 0xb6b15f60
2025-12-31T13:00:54.340 [DEBUG] [Thread-128118] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:00:54.354 [DEBUG] [Thread-128118] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T13:00:54.354 [INFO] [Thread-128118] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T13:00:54.362 [DEBUG] [Thread-128118] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:00:54.362 [DEBUG] [Thread-128118] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T13:00:54.362 [DEBUG] [Thread-128118] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:00:54.362 [DEBUG] [Thread-128118] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:00:54.362 [DEBUG] [Thread-128118] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:00:54.362 [DEBUG] [Thread-128118] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:00:54.363 [DEBUG] [Thread-128118] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:00:54.363 [DEBUG] [Thread-128118] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:00:54.363 [DEBUG] [Thread-128118] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:00:54.363 [DEBUG] [Thread-128118] [transport.py] [_log()] client lang: <none>
2025-12-31T13:00:54.363 [DEBUG] [Thread-128118] [transport.py] [_log()] server lang: <none>
2025-12-31T13:00:54.363 [DEBUG] [Thread-128118] [transport.py] [_log()] kex follows: False
2025-12-31T13:00:54.363 [DEBUG] [Thread-128118] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:00:54.363 [DEBUG] [Thread-128118] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:00:54.364 [DEBUG] [Thread-128118] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:00:54.364 [DEBUG] [Thread-128118] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:00:54.364 [DEBUG] [Thread-128118] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:00:54.364 [DEBUG] [Thread-128118] [transport.py] [_log()] Compression: none
2025-12-31T13:00:54.364 [DEBUG] [Thread-128118] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:00:54.419 [DEBUG] [Thread-128118] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:00:54.420 [DEBUG] [Thread-128118] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:00:54.420 [DEBUG] [Thread-128118] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T13:00:54.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T13:00:54.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:00:54.476 [DEBUG] [Thread-128118] [transport.py] [_log()] userauth is OK
2025-12-31T13:00:54.476 [DEBUG] [Thread-128118] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:00:54.477 [DEBUG] [Thread-128118] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:00:54.477 [DEBUG] [Thread-128118] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T13:00:54.477 [DEBUG] [Thread-128118] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:00:54.495 [INFO] [Thread-128118] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:00:54.496 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T13:00:54.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:00:55.332 [DEBUG] [Thread-128118] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:00:55.333 [DEBUG] [Thread-128118] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:00:55.381 [DEBUG] [Thread-128118] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:00:55.381 [DEBUG] [Thread-128118] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:00:55.390 [DEBUG] [Thread-128118] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:00:55.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:00:55.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-12-31T13:00:55.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-12-31T13:00:55.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:00:55.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:00:55.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:00:55.424 [DEBUG] [Thread-128118] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:01:01.899 [DEBUG] [Thread-128120 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:01:14.023 [DEBUG] [Thread-128121 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:01:16.955 [DEBUG] [Thread-128122 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:01:25.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T13:01:25.447 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T13:01:25.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T13:01:26.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 1, 12), 32.5, 11.36, 0.0, 18.01, 25.76, 0, 0, 0, 2, 0, 0),)
2025-12-31T13:01:26.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:01:12
2025-12-31T13:01:26.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T13:01:26.431 [DEBUG] [Thread-128123] [transport.py] [_log()] starting thread (client mode): 0xb6b61e40
2025-12-31T13:01:26.431 [DEBUG] [Thread-128123] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:01:26.451 [DEBUG] [Thread-128123] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T13:01:26.451 [INFO] [Thread-128123] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T13:01:26.454 [DEBUG] [Thread-128123] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:01:26.454 [DEBUG] [Thread-128123] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T13:01:26.454 [DEBUG] [Thread-128123] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:01:26.454 [DEBUG] [Thread-128123] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:01:26.454 [DEBUG] [Thread-128123] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:01:26.454 [DEBUG] [Thread-128123] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:01:26.454 [DEBUG] [Thread-128123] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:01:26.454 [DEBUG] [Thread-128123] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:01:26.454 [DEBUG] [Thread-128123] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:01:26.454 [DEBUG] [Thread-128123] [transport.py] [_log()] client lang: <none>
2025-12-31T13:01:26.454 [DEBUG] [Thread-128123] [transport.py] [_log()] server lang: <none>
2025-12-31T13:01:26.454 [DEBUG] [Thread-128123] [transport.py] [_log()] kex follows: False
2025-12-31T13:01:26.455 [DEBUG] [Thread-128123] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:01:26.455 [DEBUG] [Thread-128123] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:01:26.455 [DEBUG] [Thread-128123] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:01:26.455 [DEBUG] [Thread-128123] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:01:26.455 [DEBUG] [Thread-128123] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:01:26.455 [DEBUG] [Thread-128123] [transport.py] [_log()] Compression: none
2025-12-31T13:01:26.455 [DEBUG] [Thread-128123] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:01:26.473 [DEBUG] [Thread-128123] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:01:26.474 [DEBUG] [Thread-128123] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:01:26.474 [DEBUG] [Thread-128123] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T13:01:26.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T13:01:26.475 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:01:26.476 [DEBUG] [Thread-128123] [transport.py] [_log()] userauth is OK
2025-12-31T13:01:26.476 [DEBUG] [Thread-128123] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:01:26.476 [DEBUG] [Thread-128123] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:01:26.476 [DEBUG] [Thread-128123] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T13:01:26.477 [DEBUG] [Thread-128123] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:01:26.495 [INFO] [Thread-128123] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:01:26.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:01:27.253 [DEBUG] [Thread-128123] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:01:27.253 [DEBUG] [Thread-128123] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:01:27.254 [DEBUG] [Thread-128123] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T13:01:27.294 [DEBUG] [Thread-128123] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:01:27.294 [DEBUG] [Thread-128123] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:01:27.297 [DEBUG] [Thread-128123] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:01:27.310 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:01:27.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T13:01:27.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T13:01:27.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T13:01:27.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:01:27.321 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T13:01:27.321 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:01:27.321 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:01:27.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T13:01:27.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.458823 -999.00  +25.20  12.03     16   -1.60 1 2 1 1 1   888    0 22.35 -196.02 NA 13.6 12.0 272.8 21.5 30.9 -23.9 30.4 -22.6 29.9 -20.3 30.5 -20.8
2025-12-31T13:01:27.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T13:01:27.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T13:01:27.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.458823
2025-12-31T13:01:27.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T13:01:27.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T13:01:27.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T13:01:27.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T13:01:27.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T13:01:27.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:01:12', tmtdew=32.5, humidity=11.36, cloud=0.0, wind=18.01, temperature=25.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T11:00:42.307', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T13:01:27.324 [DEBUG] [Thread-128123] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:01:27.406 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T13:01:27.418 [DEBUG] [Thread-128126] [transport.py] [_log()] starting thread (client mode): 0xb6bb0520
2025-12-31T13:01:27.418 [DEBUG] [Thread-128126] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:01:27.433 [DEBUG] [Thread-128126] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T13:01:27.434 [INFO] [Thread-128126] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T13:01:27.441 [DEBUG] [Thread-128126] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:01:27.441 [DEBUG] [Thread-128126] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T13:01:27.442 [DEBUG] [Thread-128126] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:01:27.442 [DEBUG] [Thread-128126] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:01:27.442 [DEBUG] [Thread-128126] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:01:27.442 [DEBUG] [Thread-128126] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:01:27.442 [DEBUG] [Thread-128126] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:01:27.442 [DEBUG] [Thread-128126] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:01:27.442 [DEBUG] [Thread-128126] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:01:27.442 [DEBUG] [Thread-128126] [transport.py] [_log()] client lang: <none>
2025-12-31T13:01:27.443 [DEBUG] [Thread-128126] [transport.py] [_log()] server lang: <none>
2025-12-31T13:01:27.443 [DEBUG] [Thread-128126] [transport.py] [_log()] kex follows: False
2025-12-31T13:01:27.443 [DEBUG] [Thread-128126] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:01:27.443 [DEBUG] [Thread-128126] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:01:27.443 [DEBUG] [Thread-128126] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:01:27.443 [DEBUG] [Thread-128126] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:01:27.443 [DEBUG] [Thread-128126] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:01:27.443 [DEBUG] [Thread-128126] [transport.py] [_log()] Compression: none
2025-12-31T13:01:27.444 [DEBUG] [Thread-128126] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:01:27.501 [DEBUG] [Thread-128126] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:01:27.502 [DEBUG] [Thread-128126] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:01:27.503 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T13:01:27.504 [DEBUG] [Thread-128126] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T13:01:27.504 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:01:27.560 [DEBUG] [Thread-128126] [transport.py] [_log()] userauth is OK
2025-12-31T13:01:27.561 [DEBUG] [Thread-128126] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:01:27.561 [DEBUG] [Thread-128126] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:01:27.561 [DEBUG] [Thread-128126] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T13:01:27.561 [DEBUG] [Thread-128126] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:01:27.583 [INFO] [Thread-128126] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:01:27.583 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T13:01:27.584 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:01:28.422 [DEBUG] [Thread-128126] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:01:28.422 [DEBUG] [Thread-128126] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:01:28.470 [DEBUG] [Thread-128126] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:01:28.470 [DEBUG] [Thread-128126] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:01:28.479 [DEBUG] [Thread-128126] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:01:28.488 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:01:28.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T13:01:28.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T13:01:28.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:01:28.508 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:01:28.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:01:28.516 [DEBUG] [Thread-128126] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:01:31.991 [DEBUG] [Thread-128128 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:01:46.933 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:01:46.934 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:01:47.050 [DEBUG] [Thread-128129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:01:58.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T13:01:58.539 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T13:01:58.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T13:01:59.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 1, 44), 32.24, 11.44, 0.0, 24.98, 25.31, 0, 0, 0, 2, 0, 0),)
2025-12-31T13:01:59.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:01:44
2025-12-31T13:01:59.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T13:01:59.511 [DEBUG] [Thread-128130] [transport.py] [_log()] starting thread (client mode): 0xb95b06d0
2025-12-31T13:01:59.511 [DEBUG] [Thread-128130] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:01:59.534 [DEBUG] [Thread-128130] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T13:01:59.534 [INFO] [Thread-128130] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T13:01:59.537 [DEBUG] [Thread-128130] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:01:59.537 [DEBUG] [Thread-128130] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T13:01:59.537 [DEBUG] [Thread-128130] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:01:59.537 [DEBUG] [Thread-128130] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:01:59.537 [DEBUG] [Thread-128130] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:01:59.537 [DEBUG] [Thread-128130] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:01:59.537 [DEBUG] [Thread-128130] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:01:59.537 [DEBUG] [Thread-128130] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:01:59.537 [DEBUG] [Thread-128130] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:01:59.537 [DEBUG] [Thread-128130] [transport.py] [_log()] client lang: <none>
2025-12-31T13:01:59.537 [DEBUG] [Thread-128130] [transport.py] [_log()] server lang: <none>
2025-12-31T13:01:59.537 [DEBUG] [Thread-128130] [transport.py] [_log()] kex follows: False
2025-12-31T13:01:59.537 [DEBUG] [Thread-128130] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:01:59.537 [DEBUG] [Thread-128130] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:01:59.537 [DEBUG] [Thread-128130] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:01:59.537 [DEBUG] [Thread-128130] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:01:59.537 [DEBUG] [Thread-128130] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:01:59.537 [DEBUG] [Thread-128130] [transport.py] [_log()] Compression: none
2025-12-31T13:01:59.537 [DEBUG] [Thread-128130] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:01:59.552 [DEBUG] [Thread-128130] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:01:59.553 [DEBUG] [Thread-128130] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:01:59.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T13:01:59.554 [DEBUG] [Thread-128130] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T13:01:59.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:01:59.556 [DEBUG] [Thread-128130] [transport.py] [_log()] userauth is OK
2025-12-31T13:01:59.556 [DEBUG] [Thread-128130] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:01:59.556 [DEBUG] [Thread-128130] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:01:59.556 [DEBUG] [Thread-128130] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T13:01:59.556 [DEBUG] [Thread-128130] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:01:59.577 [INFO] [Thread-128130] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:01:59.578 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:02:00.210 [DEBUG] [Thread-128130] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:02:00.210 [DEBUG] [Thread-128130] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:02:00.211 [DEBUG] [Thread-128130] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T13:02:00.251 [DEBUG] [Thread-128130] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:02:00.251 [DEBUG] [Thread-128130] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:02:00.255 [DEBUG] [Thread-128130] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:02:00.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:02:00.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T13:02:00.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T13:02:00.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T13:02:00.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:02:00.279 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T13:02:00.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:02:00.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:02:00.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T13:02:00.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.459170 -999.00  +25.30   7.78     16   -1.70 1 2 1 1 1   888    0 22.73 -191.07 ----- 9.4 7.8 248.0 17.7 30.9 -24.3 30.4 -22.0 30.0 -20.4 30.5 -21.8
2025-12-31T13:02:00.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T13:02:00.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T13:02:00.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.459170
2025-12-31T13:02:00.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T13:02:00.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T13:02:00.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T13:02:00.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T13:02:00.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T13:02:00.281 [DEBUG] [Thread-128130] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:02:00.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:01:44', tmtdew=32.24, humidity=11.44, cloud=0.0, wind=24.98, temperature=25.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T11:01:12.288', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T13:02:00.379 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T13:02:00.391 [DEBUG] [Thread-128133] [transport.py] [_log()] starting thread (client mode): 0xb95b2980
2025-12-31T13:02:00.391 [DEBUG] [Thread-128133] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:02:00.406 [DEBUG] [Thread-128133] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T13:02:00.406 [INFO] [Thread-128133] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T13:02:00.413 [DEBUG] [Thread-128133] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:02:00.413 [DEBUG] [Thread-128133] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T13:02:00.413 [DEBUG] [Thread-128133] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:02:00.413 [DEBUG] [Thread-128133] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:02:00.413 [DEBUG] [Thread-128133] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:02:00.414 [DEBUG] [Thread-128133] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:02:00.414 [DEBUG] [Thread-128133] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:02:00.414 [DEBUG] [Thread-128133] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:02:00.414 [DEBUG] [Thread-128133] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:02:00.414 [DEBUG] [Thread-128133] [transport.py] [_log()] client lang: <none>
2025-12-31T13:02:00.414 [DEBUG] [Thread-128133] [transport.py] [_log()] server lang: <none>
2025-12-31T13:02:00.414 [DEBUG] [Thread-128133] [transport.py] [_log()] kex follows: False
2025-12-31T13:02:00.414 [DEBUG] [Thread-128133] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:02:00.414 [DEBUG] [Thread-128133] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:02:00.414 [DEBUG] [Thread-128133] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:02:00.414 [DEBUG] [Thread-128133] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:02:00.414 [DEBUG] [Thread-128133] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:02:00.414 [DEBUG] [Thread-128133] [transport.py] [_log()] Compression: none
2025-12-31T13:02:00.414 [DEBUG] [Thread-128133] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:02:00.476 [DEBUG] [Thread-128133] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:02:00.476 [DEBUG] [Thread-128133] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:02:00.477 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T13:02:00.478 [DEBUG] [Thread-128133] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T13:02:00.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:02:00.532 [DEBUG] [Thread-128133] [transport.py] [_log()] userauth is OK
2025-12-31T13:02:00.532 [DEBUG] [Thread-128133] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:02:00.533 [DEBUG] [Thread-128133] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:02:00.533 [DEBUG] [Thread-128133] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T13:02:00.533 [DEBUG] [Thread-128133] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:02:00.551 [INFO] [Thread-128133] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:02:00.552 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T13:02:00.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:02:01.405 [DEBUG] [Thread-128133] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:02:01.405 [DEBUG] [Thread-128133] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:02:01.453 [DEBUG] [Thread-128133] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:02:01.453 [DEBUG] [Thread-128133] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:02:01.462 [DEBUG] [Thread-128133] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:02:01.471 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:02:01.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-12-31T13:02:01.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T13:02:01.490 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:02:01.491 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:02:01.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:02:01.499 [DEBUG] [Thread-128133] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:02:02.083 [DEBUG] [Thread-128135 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:02:14.087 [DEBUG] [Thread-128136 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:02:17.133 [DEBUG] [Thread-128137 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:02:31.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T13:02:31.522 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T13:02:31.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T13:02:32.163 [DEBUG] [Thread-128138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:02:32.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 2, 16), 32.39, 11.35, 0.0, 21.03, 25.42, 0, 0, 0, 2, 0, 0),)
2025-12-31T13:02:32.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:02:16
2025-12-31T13:02:32.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T13:02:32.568 [DEBUG] [Thread-128139] [transport.py] [_log()] starting thread (client mode): 0xb6b15720
2025-12-31T13:02:32.569 [DEBUG] [Thread-128139] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:02:32.588 [DEBUG] [Thread-128139] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T13:02:32.588 [INFO] [Thread-128139] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T13:02:32.591 [DEBUG] [Thread-128139] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:02:32.591 [DEBUG] [Thread-128139] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T13:02:32.591 [DEBUG] [Thread-128139] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:02:32.591 [DEBUG] [Thread-128139] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:02:32.591 [DEBUG] [Thread-128139] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:02:32.592 [DEBUG] [Thread-128139] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:02:32.592 [DEBUG] [Thread-128139] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:02:32.592 [DEBUG] [Thread-128139] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:02:32.592 [DEBUG] [Thread-128139] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:02:32.592 [DEBUG] [Thread-128139] [transport.py] [_log()] client lang: <none>
2025-12-31T13:02:32.592 [DEBUG] [Thread-128139] [transport.py] [_log()] server lang: <none>
2025-12-31T13:02:32.592 [DEBUG] [Thread-128139] [transport.py] [_log()] kex follows: False
2025-12-31T13:02:32.592 [DEBUG] [Thread-128139] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:02:32.592 [DEBUG] [Thread-128139] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:02:32.592 [DEBUG] [Thread-128139] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:02:32.592 [DEBUG] [Thread-128139] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:02:32.592 [DEBUG] [Thread-128139] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:02:32.592 [DEBUG] [Thread-128139] [transport.py] [_log()] Compression: none
2025-12-31T13:02:32.592 [DEBUG] [Thread-128139] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:02:32.609 [DEBUG] [Thread-128139] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:02:32.609 [DEBUG] [Thread-128139] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:02:32.609 [DEBUG] [Thread-128139] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T13:02:32.609 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T13:02:32.609 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:02:32.610 [DEBUG] [Thread-128139] [transport.py] [_log()] userauth is OK
2025-12-31T13:02:32.610 [DEBUG] [Thread-128139] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:02:32.610 [DEBUG] [Thread-128139] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:02:32.610 [DEBUG] [Thread-128139] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T13:02:32.610 [DEBUG] [Thread-128139] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:02:32.623 [INFO] [Thread-128139] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:02:32.623 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:02:33.341 [DEBUG] [Thread-128139] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:02:33.341 [DEBUG] [Thread-128139] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:02:33.341 [DEBUG] [Thread-128139] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T13:02:33.382 [DEBUG] [Thread-128139] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:02:33.382 [DEBUG] [Thread-128139] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:02:33.385 [DEBUG] [Thread-128139] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:02:33.395 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:02:33.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T13:02:33.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T13:02:33.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T13:02:33.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:02:33.401 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T13:02:33.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:02:33.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:02:33.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T13:02:33.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.459518 -999.00  +25.40  20.98     16   -1.60 1 2 1 1 1   888    0 22.53 -188.80 ----- 16.9 21.0 265.2 26.2 30.8 -26.2 30.5 -22.5 30.0 -20.7 30.6 -23.8
2025-12-31T13:02:33.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T13:02:33.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T13:02:33.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.459518
2025-12-31T13:02:33.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T13:02:33.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T13:02:33.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T13:02:33.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T13:02:33.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T13:02:33.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:02:16', tmtdew=32.39, humidity=11.35, cloud=0.0, wind=21.03, temperature=25.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T11:01:42.355', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T13:02:33.402 [DEBUG] [Thread-128139] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:02:33.476 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T13:02:33.488 [DEBUG] [Thread-128142] [transport.py] [_log()] starting thread (client mode): 0xb6b286a0
2025-12-31T13:02:33.488 [DEBUG] [Thread-128142] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:02:33.503 [DEBUG] [Thread-128142] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T13:02:33.503 [INFO] [Thread-128142] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T13:02:33.510 [DEBUG] [Thread-128142] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:02:33.510 [DEBUG] [Thread-128142] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T13:02:33.511 [DEBUG] [Thread-128142] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:02:33.511 [DEBUG] [Thread-128142] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:02:33.511 [DEBUG] [Thread-128142] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:02:33.511 [DEBUG] [Thread-128142] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:02:33.511 [DEBUG] [Thread-128142] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:02:33.511 [DEBUG] [Thread-128142] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:02:33.511 [DEBUG] [Thread-128142] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:02:33.511 [DEBUG] [Thread-128142] [transport.py] [_log()] client lang: <none>
2025-12-31T13:02:33.511 [DEBUG] [Thread-128142] [transport.py] [_log()] server lang: <none>
2025-12-31T13:02:33.511 [DEBUG] [Thread-128142] [transport.py] [_log()] kex follows: False
2025-12-31T13:02:33.511 [DEBUG] [Thread-128142] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:02:33.511 [DEBUG] [Thread-128142] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:02:33.511 [DEBUG] [Thread-128142] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:02:33.511 [DEBUG] [Thread-128142] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:02:33.511 [DEBUG] [Thread-128142] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:02:33.511 [DEBUG] [Thread-128142] [transport.py] [_log()] Compression: none
2025-12-31T13:02:33.511 [DEBUG] [Thread-128142] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:02:33.567 [DEBUG] [Thread-128142] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:02:33.567 [DEBUG] [Thread-128142] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:02:33.567 [DEBUG] [Thread-128142] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T13:02:33.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T13:02:33.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:02:33.624 [DEBUG] [Thread-128142] [transport.py] [_log()] userauth is OK
2025-12-31T13:02:33.624 [DEBUG] [Thread-128142] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:02:33.624 [DEBUG] [Thread-128142] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:02:33.624 [DEBUG] [Thread-128142] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T13:02:33.624 [DEBUG] [Thread-128142] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:02:33.639 [INFO] [Thread-128142] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:02:33.640 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T13:02:33.640 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:02:34.482 [DEBUG] [Thread-128142] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:02:34.482 [DEBUG] [Thread-128142] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:02:34.530 [DEBUG] [Thread-128142] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:02:34.530 [DEBUG] [Thread-128142] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:02:34.538 [DEBUG] [Thread-128142] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:02:34.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:02:34.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T13:02:34.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T13:02:34.562 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:02:34.562 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:02:34.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:02:34.570 [DEBUG] [Thread-128142] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:02:47.072 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:02:47.073 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:02:47.194 [DEBUG] [Thread-128144 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:03:02.246 [DEBUG] [Thread-128145 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:03:04.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T13:03:04.577 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T13:03:04.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T13:03:05.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 2, 48), 32.35, 11.46, 0.0, 21.77, 25.59, 0, 0, 0, 2, 0, 0),)
2025-12-31T13:03:05.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:02:48
2025-12-31T13:03:05.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T13:03:05.582 [DEBUG] [Thread-128146] [transport.py] [_log()] starting thread (client mode): 0xb6b60d90
2025-12-31T13:03:05.582 [DEBUG] [Thread-128146] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:03:05.597 [DEBUG] [Thread-128146] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T13:03:05.598 [INFO] [Thread-128146] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T13:03:05.601 [DEBUG] [Thread-128146] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:03:05.601 [DEBUG] [Thread-128146] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T13:03:05.601 [DEBUG] [Thread-128146] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:03:05.601 [DEBUG] [Thread-128146] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:03:05.601 [DEBUG] [Thread-128146] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:03:05.601 [DEBUG] [Thread-128146] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:03:05.601 [DEBUG] [Thread-128146] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:03:05.601 [DEBUG] [Thread-128146] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:03:05.601 [DEBUG] [Thread-128146] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:03:05.601 [DEBUG] [Thread-128146] [transport.py] [_log()] client lang: <none>
2025-12-31T13:03:05.601 [DEBUG] [Thread-128146] [transport.py] [_log()] server lang: <none>
2025-12-31T13:03:05.601 [DEBUG] [Thread-128146] [transport.py] [_log()] kex follows: False
2025-12-31T13:03:05.601 [DEBUG] [Thread-128146] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:03:05.601 [DEBUG] [Thread-128146] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:03:05.601 [DEBUG] [Thread-128146] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:03:05.601 [DEBUG] [Thread-128146] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:03:05.601 [DEBUG] [Thread-128146] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:03:05.601 [DEBUG] [Thread-128146] [transport.py] [_log()] Compression: none
2025-12-31T13:03:05.601 [DEBUG] [Thread-128146] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:03:05.616 [DEBUG] [Thread-128146] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:03:05.617 [DEBUG] [Thread-128146] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:03:05.617 [DEBUG] [Thread-128146] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T13:03:05.618 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T13:03:05.618 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:03:05.619 [DEBUG] [Thread-128146] [transport.py] [_log()] userauth is OK
2025-12-31T13:03:05.619 [DEBUG] [Thread-128146] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:03:05.619 [DEBUG] [Thread-128146] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:03:05.619 [DEBUG] [Thread-128146] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T13:03:05.619 [DEBUG] [Thread-128146] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:03:05.633 [INFO] [Thread-128146] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:03:05.633 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:03:06.261 [DEBUG] [Thread-128146] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:03:06.261 [DEBUG] [Thread-128146] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:03:06.262 [DEBUG] [Thread-128146] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T13:03:06.302 [DEBUG] [Thread-128146] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:03:06.303 [DEBUG] [Thread-128146] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:03:06.305 [DEBUG] [Thread-128146] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:03:06.317 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:03:06.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T13:03:06.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T13:03:06.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T13:03:06.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:03:06.327 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T13:03:06.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:03:06.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:03:06.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T13:03:06.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.460212 -999.00  +25.30  15.84     16   -1.70 1 2 1 1 1   888    0 21.95 -219.93 ----- 13.2 15.8 266.2 24.5 30.7 -25.1 30.3 -23.1 29.8 -21.6 30.4 -22.3
2025-12-31T13:03:06.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T13:03:06.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T13:03:06.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.460212
2025-12-31T13:03:06.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T13:03:06.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T13:03:06.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T13:03:06.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T13:03:06.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T13:03:06.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:02:48', tmtdew=32.35, humidity=11.46, cloud=0.0, wind=21.77, temperature=25.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T11:02:42.317', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T13:03:06.331 [DEBUG] [Thread-128146] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:03:06.413 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T13:03:06.425 [DEBUG] [Thread-128149] [transport.py] [_log()] starting thread (client mode): 0xb95b3a60
2025-12-31T13:03:06.426 [DEBUG] [Thread-128149] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:03:06.440 [DEBUG] [Thread-128149] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T13:03:06.440 [INFO] [Thread-128149] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T13:03:06.448 [DEBUG] [Thread-128149] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:03:06.448 [DEBUG] [Thread-128149] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T13:03:06.449 [DEBUG] [Thread-128149] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:03:06.449 [DEBUG] [Thread-128149] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:03:06.449 [DEBUG] [Thread-128149] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:03:06.449 [DEBUG] [Thread-128149] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:03:06.449 [DEBUG] [Thread-128149] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:03:06.449 [DEBUG] [Thread-128149] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:03:06.449 [DEBUG] [Thread-128149] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:03:06.449 [DEBUG] [Thread-128149] [transport.py] [_log()] client lang: <none>
2025-12-31T13:03:06.449 [DEBUG] [Thread-128149] [transport.py] [_log()] server lang: <none>
2025-12-31T13:03:06.450 [DEBUG] [Thread-128149] [transport.py] [_log()] kex follows: False
2025-12-31T13:03:06.450 [DEBUG] [Thread-128149] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:03:06.450 [DEBUG] [Thread-128149] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:03:06.450 [DEBUG] [Thread-128149] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:03:06.450 [DEBUG] [Thread-128149] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:03:06.450 [DEBUG] [Thread-128149] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:03:06.450 [DEBUG] [Thread-128149] [transport.py] [_log()] Compression: none
2025-12-31T13:03:06.450 [DEBUG] [Thread-128149] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:03:06.508 [DEBUG] [Thread-128149] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:03:06.509 [DEBUG] [Thread-128149] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:03:06.510 [DEBUG] [Thread-128149] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T13:03:06.510 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T13:03:06.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:03:06.564 [DEBUG] [Thread-128149] [transport.py] [_log()] userauth is OK
2025-12-31T13:03:06.565 [DEBUG] [Thread-128149] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:03:06.565 [DEBUG] [Thread-128149] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:03:06.565 [DEBUG] [Thread-128149] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T13:03:06.565 [DEBUG] [Thread-128149] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:03:06.584 [INFO] [Thread-128149] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:03:06.584 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T13:03:06.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:03:07.432 [DEBUG] [Thread-128149] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:03:07.432 [DEBUG] [Thread-128149] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:03:07.480 [DEBUG] [Thread-128149] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:03:07.480 [DEBUG] [Thread-128149] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:03:07.489 [DEBUG] [Thread-128149] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:03:07.498 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:03:07.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-12-31T13:03:07.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T13:03:07.515 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:03:07.516 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:03:07.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:03:07.524 [DEBUG] [Thread-128149] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:03:14.131 [DEBUG] [Thread-128151 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:03:17.280 [DEBUG] [Thread-128152 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:03:32.332 [DEBUG] [Thread-128153 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:03:37.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T13:03:37.547 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T13:03:37.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T13:03:38.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 3, 20), 32.26, 11.51, 0.0, 19.64, 25.46, 0, 0, 0, 2, 0, 0),)
2025-12-31T13:03:38.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:03:20
2025-12-31T13:03:38.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T13:03:38.524 [DEBUG] [Thread-128154] [transport.py] [_log()] starting thread (client mode): 0xb6bb0820
2025-12-31T13:03:38.525 [DEBUG] [Thread-128154] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:03:38.547 [DEBUG] [Thread-128154] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T13:03:38.547 [INFO] [Thread-128154] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T13:03:38.550 [DEBUG] [Thread-128154] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:03:38.550 [DEBUG] [Thread-128154] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T13:03:38.551 [DEBUG] [Thread-128154] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:03:38.551 [DEBUG] [Thread-128154] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:03:38.551 [DEBUG] [Thread-128154] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:03:38.551 [DEBUG] [Thread-128154] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:03:38.551 [DEBUG] [Thread-128154] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:03:38.551 [DEBUG] [Thread-128154] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:03:38.551 [DEBUG] [Thread-128154] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:03:38.551 [DEBUG] [Thread-128154] [transport.py] [_log()] client lang: <none>
2025-12-31T13:03:38.551 [DEBUG] [Thread-128154] [transport.py] [_log()] server lang: <none>
2025-12-31T13:03:38.551 [DEBUG] [Thread-128154] [transport.py] [_log()] kex follows: False
2025-12-31T13:03:38.551 [DEBUG] [Thread-128154] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:03:38.551 [DEBUG] [Thread-128154] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:03:38.551 [DEBUG] [Thread-128154] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:03:38.551 [DEBUG] [Thread-128154] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:03:38.551 [DEBUG] [Thread-128154] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:03:38.551 [DEBUG] [Thread-128154] [transport.py] [_log()] Compression: none
2025-12-31T13:03:38.551 [DEBUG] [Thread-128154] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:03:38.568 [DEBUG] [Thread-128154] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:03:38.569 [DEBUG] [Thread-128154] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:03:38.569 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T13:03:38.570 [DEBUG] [Thread-128154] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T13:03:38.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:03:38.572 [DEBUG] [Thread-128154] [transport.py] [_log()] userauth is OK
2025-12-31T13:03:38.572 [DEBUG] [Thread-128154] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:03:38.572 [DEBUG] [Thread-128154] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:03:38.572 [DEBUG] [Thread-128154] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T13:03:38.572 [DEBUG] [Thread-128154] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:03:38.597 [INFO] [Thread-128154] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:03:38.598 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:03:39.365 [DEBUG] [Thread-128154] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:03:39.365 [DEBUG] [Thread-128154] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:03:39.366 [DEBUG] [Thread-128154] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T13:03:39.406 [DEBUG] [Thread-128154] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:03:39.406 [DEBUG] [Thread-128154] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:03:39.410 [DEBUG] [Thread-128154] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:03:39.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:03:39.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T13:03:39.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T13:03:39.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T13:03:39.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:03:39.439 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T13:03:39.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:03:39.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:03:39.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T13:03:39.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.460559 -999.00  +25.40  15.60     16   -1.70 1 2 1 1 1   888    0 22.37 -201.91 ----- 17.3 15.6 265.4 22.2 30.6 -24.6 30.3 -23.1 29.6 -20.9 30.4 -22.2
2025-12-31T13:03:39.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T13:03:39.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T13:03:39.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.460559
2025-12-31T13:03:39.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T13:03:39.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T13:03:39.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T13:03:39.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T13:03:39.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T13:03:39.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:03:20', tmtdew=32.26, humidity=11.51, cloud=0.0, wind=19.64, temperature=25.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T11:03:12.298', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T13:03:39.442 [DEBUG] [Thread-128154] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:03:39.526 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T13:03:39.538 [DEBUG] [Thread-128157] [transport.py] [_log()] starting thread (client mode): 0xb95b1ab0
2025-12-31T13:03:39.538 [DEBUG] [Thread-128157] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:03:39.553 [DEBUG] [Thread-128157] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T13:03:39.553 [INFO] [Thread-128157] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T13:03:39.561 [DEBUG] [Thread-128157] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:03:39.561 [DEBUG] [Thread-128157] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T13:03:39.561 [DEBUG] [Thread-128157] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:03:39.561 [DEBUG] [Thread-128157] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:03:39.561 [DEBUG] [Thread-128157] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:03:39.561 [DEBUG] [Thread-128157] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:03:39.561 [DEBUG] [Thread-128157] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:03:39.561 [DEBUG] [Thread-128157] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:03:39.561 [DEBUG] [Thread-128157] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:03:39.561 [DEBUG] [Thread-128157] [transport.py] [_log()] client lang: <none>
2025-12-31T13:03:39.561 [DEBUG] [Thread-128157] [transport.py] [_log()] server lang: <none>
2025-12-31T13:03:39.561 [DEBUG] [Thread-128157] [transport.py] [_log()] kex follows: False
2025-12-31T13:03:39.561 [DEBUG] [Thread-128157] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:03:39.561 [DEBUG] [Thread-128157] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:03:39.562 [DEBUG] [Thread-128157] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:03:39.562 [DEBUG] [Thread-128157] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:03:39.562 [DEBUG] [Thread-128157] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:03:39.562 [DEBUG] [Thread-128157] [transport.py] [_log()] Compression: none
2025-12-31T13:03:39.562 [DEBUG] [Thread-128157] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:03:39.623 [DEBUG] [Thread-128157] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:03:39.624 [DEBUG] [Thread-128157] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:03:39.625 [DEBUG] [Thread-128157] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T13:03:39.625 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T13:03:39.625 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:03:39.681 [DEBUG] [Thread-128157] [transport.py] [_log()] userauth is OK
2025-12-31T13:03:39.681 [DEBUG] [Thread-128157] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:03:39.681 [DEBUG] [Thread-128157] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:03:39.681 [DEBUG] [Thread-128157] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T13:03:39.681 [DEBUG] [Thread-128157] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:03:39.700 [INFO] [Thread-128157] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:03:39.700 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T13:03:39.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:03:40.565 [DEBUG] [Thread-128157] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:03:40.565 [DEBUG] [Thread-128157] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:03:40.613 [DEBUG] [Thread-128157] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:03:40.613 [DEBUG] [Thread-128157] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:03:40.623 [DEBUG] [Thread-128157] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:03:40.632 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:03:40.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T13:03:40.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T13:03:40.650 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:03:40.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:03:40.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:03:40.659 [DEBUG] [Thread-128157] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:03:47.215 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:03:47.216 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:03:47.368 [DEBUG] [Thread-128159 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:04:02.416 [DEBUG] [Thread-128160 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:04:10.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T13:04:10.678 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T13:04: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-12-31T13:04:11.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 3, 52), 32.16, 11.53, 0.0, 22.46, 25.44, 0, 0, 0, 2, 0, 0),)
2025-12-31T13:04:11.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:03:52
2025-12-31T13:04:11.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T13:04:11.669 [DEBUG] [Thread-128161] [transport.py] [_log()] starting thread (client mode): 0xb6b62ec0
2025-12-31T13:04:11.669 [DEBUG] [Thread-128161] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:04:11.691 [DEBUG] [Thread-128161] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T13:04:11.691 [INFO] [Thread-128161] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T13:04:11.694 [DEBUG] [Thread-128161] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:04:11.694 [DEBUG] [Thread-128161] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T13:04:11.694 [DEBUG] [Thread-128161] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:04:11.694 [DEBUG] [Thread-128161] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:04:11.694 [DEBUG] [Thread-128161] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:04:11.694 [DEBUG] [Thread-128161] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:04:11.695 [DEBUG] [Thread-128161] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:04:11.695 [DEBUG] [Thread-128161] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:04:11.695 [DEBUG] [Thread-128161] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:04:11.695 [DEBUG] [Thread-128161] [transport.py] [_log()] client lang: <none>
2025-12-31T13:04:11.695 [DEBUG] [Thread-128161] [transport.py] [_log()] server lang: <none>
2025-12-31T13:04:11.695 [DEBUG] [Thread-128161] [transport.py] [_log()] kex follows: False
2025-12-31T13:04:11.695 [DEBUG] [Thread-128161] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:04:11.695 [DEBUG] [Thread-128161] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:04:11.695 [DEBUG] [Thread-128161] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:04:11.695 [DEBUG] [Thread-128161] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:04:11.695 [DEBUG] [Thread-128161] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:04:11.695 [DEBUG] [Thread-128161] [transport.py] [_log()] Compression: none
2025-12-31T13:04:11.696 [DEBUG] [Thread-128161] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:04:11.714 [DEBUG] [Thread-128161] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:04:11.715 [DEBUG] [Thread-128161] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:04:11.716 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T13:04:11.717 [DEBUG] [Thread-128161] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T13:04:11.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:04:11.719 [DEBUG] [Thread-128161] [transport.py] [_log()] userauth is OK
2025-12-31T13:04:11.719 [DEBUG] [Thread-128161] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:04:11.719 [DEBUG] [Thread-128161] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:04:11.719 [DEBUG] [Thread-128161] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T13:04:11.719 [DEBUG] [Thread-128161] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:04:11.737 [INFO] [Thread-128161] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:04:11.738 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:04:12.405 [DEBUG] [Thread-128161] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:04:12.405 [DEBUG] [Thread-128161] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:04:12.405 [DEBUG] [Thread-128161] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T13:04:12.446 [DEBUG] [Thread-128161] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:04:12.446 [DEBUG] [Thread-128161] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:04:12.450 [DEBUG] [Thread-128161] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:04:12.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:04:12.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T13:04:12.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T13:04:12.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T13:04:12.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:04:12.473 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T13:04:12.473 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:04:12.473 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:04:12.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T13:04:12.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.460906 -999.00  +25.50  19.49     16   -1.60 1 2 1 1 1   888    0 21.86 -225.04 ----- 16.1 19.5 256.2 24.3 30.5 -25.2 30.2 -23.7 29.7 -20.8 30.2 -23.1
2025-12-31T13:04:12.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T13:04:12.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T13:04:12.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.460906
2025-12-31T13:04:12.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T13:04:12.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T13:04:12.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T13:04:12.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T13:04:12.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T13:04:12.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:03:52', tmtdew=32.16, humidity=11.53, cloud=0.0, wind=22.46, temperature=25.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T11:03:42.278', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T13:04:12.476 [DEBUG] [Thread-128161] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:04:12.559 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T13:04:12.572 [DEBUG] [Thread-128164] [transport.py] [_log()] starting thread (client mode): 0xb6b2b3d0
2025-12-31T13:04:12.572 [DEBUG] [Thread-128164] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:04:12.587 [DEBUG] [Thread-128164] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T13:04:12.587 [INFO] [Thread-128164] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T13:04:12.595 [DEBUG] [Thread-128164] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:04:12.595 [DEBUG] [Thread-128164] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T13:04:12.595 [DEBUG] [Thread-128164] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:04:12.595 [DEBUG] [Thread-128164] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:04:12.595 [DEBUG] [Thread-128164] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:04:12.595 [DEBUG] [Thread-128164] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:04:12.595 [DEBUG] [Thread-128164] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:04:12.595 [DEBUG] [Thread-128164] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:04:12.595 [DEBUG] [Thread-128164] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:04:12.595 [DEBUG] [Thread-128164] [transport.py] [_log()] client lang: <none>
2025-12-31T13:04:12.595 [DEBUG] [Thread-128164] [transport.py] [_log()] server lang: <none>
2025-12-31T13:04:12.596 [DEBUG] [Thread-128164] [transport.py] [_log()] kex follows: False
2025-12-31T13:04:12.596 [DEBUG] [Thread-128164] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:04:12.596 [DEBUG] [Thread-128164] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:04:12.596 [DEBUG] [Thread-128164] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:04:12.596 [DEBUG] [Thread-128164] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:04:12.596 [DEBUG] [Thread-128164] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:04:12.596 [DEBUG] [Thread-128164] [transport.py] [_log()] Compression: none
2025-12-31T13:04:12.596 [DEBUG] [Thread-128164] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:04:12.653 [DEBUG] [Thread-128164] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:04:12.653 [DEBUG] [Thread-128164] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:04:12.654 [DEBUG] [Thread-128164] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T13:04:12.654 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T13:04:12.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:04:12.709 [DEBUG] [Thread-128164] [transport.py] [_log()] userauth is OK
2025-12-31T13:04:12.709 [DEBUG] [Thread-128164] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:04:12.709 [DEBUG] [Thread-128164] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:04:12.709 [DEBUG] [Thread-128164] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T13:04:12.709 [DEBUG] [Thread-128164] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:04:12.730 [INFO] [Thread-128164] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:04:12.731 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T13:04:12.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:04:13.520 [DEBUG] [Thread-128164] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:04:13.520 [DEBUG] [Thread-128164] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:04:13.568 [DEBUG] [Thread-128164] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:04:13.568 [DEBUG] [Thread-128164] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:04:13.577 [DEBUG] [Thread-128164] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:04:13.587 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:04:13.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-12-31T13:04:13.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T13:04:13.606 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:04:13.606 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:04:13.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:04:13.615 [DEBUG] [Thread-128164] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:04:14.182 [DEBUG] [Thread-128166 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:04:17.453 [DEBUG] [Thread-128167 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:04:32.501 [DEBUG] [Thread-128168 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:04:43.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T13:04:43.637 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T13:04:43.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T13:04:44.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 4, 24), 32.25, 11.46, 0.0, 21.79, 25.46, 0, 0, 0, 2, 0, 0),)
2025-12-31T13:04:44.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:04:24
2025-12-31T13:04:44.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T13:04:44.619 [DEBUG] [Thread-128169] [transport.py] [_log()] starting thread (client mode): 0xb6b63d00
2025-12-31T13:04:44.619 [DEBUG] [Thread-128169] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:04:44.639 [DEBUG] [Thread-128169] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T13:04:44.640 [INFO] [Thread-128169] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T13:04:44.643 [DEBUG] [Thread-128169] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:04:44.643 [DEBUG] [Thread-128169] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T13:04:44.643 [DEBUG] [Thread-128169] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:04:44.643 [DEBUG] [Thread-128169] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:04:44.643 [DEBUG] [Thread-128169] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:04:44.643 [DEBUG] [Thread-128169] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:04:44.643 [DEBUG] [Thread-128169] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:04:44.643 [DEBUG] [Thread-128169] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:04:44.643 [DEBUG] [Thread-128169] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:04:44.643 [DEBUG] [Thread-128169] [transport.py] [_log()] client lang: <none>
2025-12-31T13:04:44.643 [DEBUG] [Thread-128169] [transport.py] [_log()] server lang: <none>
2025-12-31T13:04:44.643 [DEBUG] [Thread-128169] [transport.py] [_log()] kex follows: False
2025-12-31T13:04:44.644 [DEBUG] [Thread-128169] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:04:44.644 [DEBUG] [Thread-128169] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:04:44.644 [DEBUG] [Thread-128169] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:04:44.644 [DEBUG] [Thread-128169] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:04:44.644 [DEBUG] [Thread-128169] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:04:44.644 [DEBUG] [Thread-128169] [transport.py] [_log()] Compression: none
2025-12-31T13:04:44.644 [DEBUG] [Thread-128169] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:04:44.670 [DEBUG] [Thread-128169] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:04:44.670 [DEBUG] [Thread-128169] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:04:44.671 [DEBUG] [Thread-128169] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T13:04:44.671 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T13:04:44.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:04:44.713 [DEBUG] [Thread-128169] [transport.py] [_log()] userauth is OK
2025-12-31T13:04:44.713 [DEBUG] [Thread-128169] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:04:44.713 [DEBUG] [Thread-128169] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:04:44.713 [DEBUG] [Thread-128169] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T13:04:44.713 [DEBUG] [Thread-128169] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:04:44.737 [INFO] [Thread-128169] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:04:44.738 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:04:45.449 [DEBUG] [Thread-128169] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:04:45.449 [DEBUG] [Thread-128169] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:04:45.450 [DEBUG] [Thread-128169] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T13:04:45.492 [DEBUG] [Thread-128169] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:04:45.492 [DEBUG] [Thread-128169] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:04:45.494 [DEBUG] [Thread-128169] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:04:45.506 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:04:45.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T13:04:45.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T13:04:45.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T13:04:45.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:04:45.515 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T13:04:45.515 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:04:45.515 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:04:45.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T13:04:45.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.461254 -999.00  +25.40  11.06     16   -1.50 1 2 1 1 1   888    0 20.73 -218.81 ----- 10.3 11.1 244.6 20.0 30.5 -23.0 30.1 -23.1 29.8 -20.2 30.2 -20.6
2025-12-31T13:04:45.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T13:04:45.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T13:04:45.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.461254
2025-12-31T13:04:45.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T13:04:45.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T13:04:45.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T13:04:45.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T13:04:45.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T13:04:45.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:04:24', tmtdew=32.25, humidity=11.46, cloud=0.0, wind=21.79, temperature=25.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T11:04:12.346', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T13:04:45.517 [DEBUG] [Thread-128169] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:04:45.603 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T13:04:45.614 [DEBUG] [Thread-128172] [transport.py] [_log()] starting thread (client mode): 0xb6bb3640
2025-12-31T13:04:45.614 [DEBUG] [Thread-128172] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:04:45.629 [DEBUG] [Thread-128172] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T13:04:45.629 [INFO] [Thread-128172] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T13:04:45.636 [DEBUG] [Thread-128172] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:04:45.636 [DEBUG] [Thread-128172] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T13:04:45.636 [DEBUG] [Thread-128172] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:04:45.636 [DEBUG] [Thread-128172] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:04:45.637 [DEBUG] [Thread-128172] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:04:45.637 [DEBUG] [Thread-128172] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:04:45.637 [DEBUG] [Thread-128172] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:04:45.637 [DEBUG] [Thread-128172] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:04:45.637 [DEBUG] [Thread-128172] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:04:45.637 [DEBUG] [Thread-128172] [transport.py] [_log()] client lang: <none>
2025-12-31T13:04:45.637 [DEBUG] [Thread-128172] [transport.py] [_log()] server lang: <none>
2025-12-31T13:04:45.637 [DEBUG] [Thread-128172] [transport.py] [_log()] kex follows: False
2025-12-31T13:04:45.637 [DEBUG] [Thread-128172] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:04:45.637 [DEBUG] [Thread-128172] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:04:45.637 [DEBUG] [Thread-128172] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:04:45.637 [DEBUG] [Thread-128172] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:04:45.637 [DEBUG] [Thread-128172] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:04:45.637 [DEBUG] [Thread-128172] [transport.py] [_log()] Compression: none
2025-12-31T13:04:45.637 [DEBUG] [Thread-128172] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:04:45.696 [DEBUG] [Thread-128172] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:04:45.697 [DEBUG] [Thread-128172] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:04:45.697 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T13:04:45.698 [DEBUG] [Thread-128172] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T13:04:45.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:04:45.752 [DEBUG] [Thread-128172] [transport.py] [_log()] userauth is OK
2025-12-31T13:04:45.752 [DEBUG] [Thread-128172] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:04:45.753 [DEBUG] [Thread-128172] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:04:45.753 [DEBUG] [Thread-128172] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T13:04:45.753 [DEBUG] [Thread-128172] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:04:45.775 [INFO] [Thread-128172] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:04:45.775 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T13:04:45.775 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:04:46.670 [DEBUG] [Thread-128172] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:04:46.671 [DEBUG] [Thread-128172] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:04:46.719 [DEBUG] [Thread-128172] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:04:46.719 [DEBUG] [Thread-128172] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:04:46.728 [DEBUG] [Thread-128172] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:04:46.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:04:46.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T13:04:46.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T13:04:46.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:04:46.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:04:46.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:04:46.765 [DEBUG] [Thread-128172] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:04:47.361 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:04:47.362 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:04:47.536 [DEBUG] [Thread-128174 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:05:02.597 [DEBUG] [Thread-128175 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:05:14.233 [DEBUG] [Thread-128176 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:05:16.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T13:05:16.788 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T13:05:16.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T13:05:17.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 4, 56), 31.83, 11.63, 0.0, 25.32, 25.41, 0, 0, 0, 2, 0, 0),)
2025-12-31T13:05:17.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:04:56
2025-12-31T13:05:17.625 [DEBUG] [Thread-128177 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:05:17.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T13:05:17.775 [DEBUG] [Thread-128178] [transport.py] [_log()] starting thread (client mode): 0xb6b22740
2025-12-31T13:05:17.775 [DEBUG] [Thread-128178] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:05:17.798 [DEBUG] [Thread-128178] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T13:05:17.798 [INFO] [Thread-128178] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T13:05:17.802 [DEBUG] [Thread-128178] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:05:17.802 [DEBUG] [Thread-128178] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T13:05:17.802 [DEBUG] [Thread-128178] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:05:17.802 [DEBUG] [Thread-128178] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:05:17.802 [DEBUG] [Thread-128178] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:05:17.802 [DEBUG] [Thread-128178] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:05:17.802 [DEBUG] [Thread-128178] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:05:17.802 [DEBUG] [Thread-128178] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:05:17.802 [DEBUG] [Thread-128178] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:05:17.802 [DEBUG] [Thread-128178] [transport.py] [_log()] client lang: <none>
2025-12-31T13:05:17.802 [DEBUG] [Thread-128178] [transport.py] [_log()] server lang: <none>
2025-12-31T13:05:17.802 [DEBUG] [Thread-128178] [transport.py] [_log()] kex follows: False
2025-12-31T13:05:17.802 [DEBUG] [Thread-128178] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:05:17.803 [DEBUG] [Thread-128178] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:05:17.803 [DEBUG] [Thread-128178] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:05:17.803 [DEBUG] [Thread-128178] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:05:17.803 [DEBUG] [Thread-128178] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:05:17.803 [DEBUG] [Thread-128178] [transport.py] [_log()] Compression: none
2025-12-31T13:05:17.803 [DEBUG] [Thread-128178] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:05:17.820 [DEBUG] [Thread-128178] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:05:17.820 [DEBUG] [Thread-128178] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:05:17.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T13:05:17.821 [DEBUG] [Thread-128178] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T13:05:17.822 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:05:17.823 [DEBUG] [Thread-128178] [transport.py] [_log()] userauth is OK
2025-12-31T13:05:17.823 [DEBUG] [Thread-128178] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:05:17.823 [DEBUG] [Thread-128178] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:05:17.823 [DEBUG] [Thread-128178] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T13:05:17.823 [DEBUG] [Thread-128178] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:05:17.858 [INFO] [Thread-128178] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:05:17.859 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:05:20.621 [DEBUG] [Thread-128178] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:05:20.621 [DEBUG] [Thread-128178] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:05:20.621 [DEBUG] [Thread-128178] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T13:05:20.662 [DEBUG] [Thread-128178] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:05:20.662 [DEBUG] [Thread-128178] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:05:20.666 [DEBUG] [Thread-128178] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:05:20.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:05:20.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T13:05:20.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T13:05:20.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T13:05:20.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:05:20.693 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T13:05:20.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:05:20.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:05:20.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T13:05:20.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.461601 -999.00  +25.50  15.40     16   -1.30 1 2 1 1 1   888    0 20.72 -230.05 ----- 20.9 15.4 263.2 26.4 30.5 -23.3 30.2 -23.1 29.8 -21.4 30.2 -20.7
2025-12-31T13:05:20.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T13:05:20.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T13:05:20.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.461601
2025-12-31T13:05:20.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T13:05:20.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T13:05:20.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T13:05:20.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T13:05:20.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T13:05:20.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:04:56', tmtdew=31.83, humidity=11.63, cloud=0.0, wind=25.32, temperature=25.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T11:04:42.326', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T13:05:20.696 [DEBUG] [Thread-128178] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:05:20.779 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T13:05:20.792 [DEBUG] [Thread-128181] [transport.py] [_log()] starting thread (client mode): 0xb95b0610
2025-12-31T13:05:20.792 [DEBUG] [Thread-128181] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:05:20.807 [DEBUG] [Thread-128181] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T13:05:20.807 [INFO] [Thread-128181] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T13:05:20.815 [DEBUG] [Thread-128181] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:05:20.815 [DEBUG] [Thread-128181] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T13:05:20.815 [DEBUG] [Thread-128181] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:05:20.815 [DEBUG] [Thread-128181] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:05:20.815 [DEBUG] [Thread-128181] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:05:20.816 [DEBUG] [Thread-128181] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:05:20.816 [DEBUG] [Thread-128181] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:05:20.816 [DEBUG] [Thread-128181] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:05:20.816 [DEBUG] [Thread-128181] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:05:20.816 [DEBUG] [Thread-128181] [transport.py] [_log()] client lang: <none>
2025-12-31T13:05:20.816 [DEBUG] [Thread-128181] [transport.py] [_log()] server lang: <none>
2025-12-31T13:05:20.816 [DEBUG] [Thread-128181] [transport.py] [_log()] kex follows: False
2025-12-31T13:05:20.816 [DEBUG] [Thread-128181] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:05:20.816 [DEBUG] [Thread-128181] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:05:20.817 [DEBUG] [Thread-128181] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:05:20.817 [DEBUG] [Thread-128181] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:05:20.817 [DEBUG] [Thread-128181] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:05:20.817 [DEBUG] [Thread-128181] [transport.py] [_log()] Compression: none
2025-12-31T13:05:20.817 [DEBUG] [Thread-128181] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:05:20.875 [DEBUG] [Thread-128181] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:05:20.875 [DEBUG] [Thread-128181] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:05:20.876 [DEBUG] [Thread-128181] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T13:05:20.876 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T13:05:20.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:05:20.933 [DEBUG] [Thread-128181] [transport.py] [_log()] userauth is OK
2025-12-31T13:05:20.933 [DEBUG] [Thread-128181] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:05:20.933 [DEBUG] [Thread-128181] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:05:20.933 [DEBUG] [Thread-128181] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T13:05:20.933 [DEBUG] [Thread-128181] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:05:20.952 [INFO] [Thread-128181] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:05:20.952 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T13:05:20.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:05:21.760 [DEBUG] [Thread-128181] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:05:21.760 [DEBUG] [Thread-128181] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:05:21.808 [DEBUG] [Thread-128181] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:05:21.808 [DEBUG] [Thread-128181] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:05:21.818 [DEBUG] [Thread-128181] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:05:21.828 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:05:21.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T13:05:21.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T13:05:21.847 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:05:21.847 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:05:21.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:05:21.856 [DEBUG] [Thread-128181] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:05:32.657 [DEBUG] [Thread-128183 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:05:47.500 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:05:47.501 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:05:47.710 [DEBUG] [Thread-128184 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:05:51.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T13:05:51.878 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T13:05:51.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T13:05:52.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 5, 28), 31.78, 11.68, 0.0, 24.91, 25.44, 0, 0, 0, 2, 0, 0),)
2025-12-31T13:05:52.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:05:28
2025-12-31T13:05:52.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T13:05:52.868 [DEBUG] [Thread-128185] [transport.py] [_log()] starting thread (client mode): 0xb6b61480
2025-12-31T13:05:52.868 [DEBUG] [Thread-128185] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:05:52.889 [DEBUG] [Thread-128185] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T13:05:52.889 [INFO] [Thread-128185] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T13:05:52.892 [DEBUG] [Thread-128185] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:05:52.892 [DEBUG] [Thread-128185] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T13:05:52.892 [DEBUG] [Thread-128185] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:05:52.892 [DEBUG] [Thread-128185] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:05:52.892 [DEBUG] [Thread-128185] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:05:52.892 [DEBUG] [Thread-128185] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:05:52.892 [DEBUG] [Thread-128185] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:05:52.892 [DEBUG] [Thread-128185] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:05:52.892 [DEBUG] [Thread-128185] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:05:52.892 [DEBUG] [Thread-128185] [transport.py] [_log()] client lang: <none>
2025-12-31T13:05:52.892 [DEBUG] [Thread-128185] [transport.py] [_log()] server lang: <none>
2025-12-31T13:05:52.892 [DEBUG] [Thread-128185] [transport.py] [_log()] kex follows: False
2025-12-31T13:05:52.892 [DEBUG] [Thread-128185] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:05:52.892 [DEBUG] [Thread-128185] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:05:52.892 [DEBUG] [Thread-128185] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:05:52.892 [DEBUG] [Thread-128185] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:05:52.892 [DEBUG] [Thread-128185] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:05:52.892 [DEBUG] [Thread-128185] [transport.py] [_log()] Compression: none
2025-12-31T13:05:52.892 [DEBUG] [Thread-128185] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:05:52.910 [DEBUG] [Thread-128185] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:05:52.910 [DEBUG] [Thread-128185] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:05:52.911 [DEBUG] [Thread-128185] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T13:05:52.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T13:05:52.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:05:52.912 [DEBUG] [Thread-128185] [transport.py] [_log()] userauth is OK
2025-12-31T13:05:52.913 [DEBUG] [Thread-128185] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:05:52.913 [DEBUG] [Thread-128185] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:05:52.913 [DEBUG] [Thread-128185] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T13:05:52.913 [DEBUG] [Thread-128185] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:05:52.930 [INFO] [Thread-128185] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:05:52.930 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:05:53.517 [DEBUG] [Thread-128185] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:05:53.517 [DEBUG] [Thread-128185] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:05:53.518 [DEBUG] [Thread-128185] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T13:05:53.558 [DEBUG] [Thread-128185] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:05:53.558 [DEBUG] [Thread-128185] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:05:53.562 [DEBUG] [Thread-128185] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:05:53.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:05:53.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T13:05:53.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T13:05:53.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T13:05:53.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:05:53.586 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T13:05:53.587 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:05:53.587 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:05:53.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T13:05:53.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.461948 -999.00  +25.50  24.16     17   -1.20 1 2 1 1 1   888    0 21.62 -215.44 ----- 24.6 24.2 270.4 33.6 30.6 -21.5 30.1 -21.6 29.7 -19.4 30.3 -18.5
2025-12-31T13:05:53.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T13:05:53.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T13:05:53.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.461948
2025-12-31T13:05:53.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T13:05:53.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T13:05:53.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T13:05:53.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T13:05:53.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T13:05:53.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:05:28', tmtdew=31.78, humidity=11.68, cloud=0.0, wind=24.91, temperature=25.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T11:05:12.307', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T13:05:53.589 [DEBUG] [Thread-128185] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:05:53.672 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T13:05:53.684 [DEBUG] [Thread-128188] [transport.py] [_log()] starting thread (client mode): 0xb6b639a0
2025-12-31T13:05:53.684 [DEBUG] [Thread-128188] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:05:53.698 [DEBUG] [Thread-128188] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T13:05:53.698 [INFO] [Thread-128188] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T13:05:53.706 [DEBUG] [Thread-128188] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:05:53.706 [DEBUG] [Thread-128188] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T13:05:53.706 [DEBUG] [Thread-128188] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:05:53.706 [DEBUG] [Thread-128188] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:05:53.706 [DEBUG] [Thread-128188] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:05:53.706 [DEBUG] [Thread-128188] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:05:53.706 [DEBUG] [Thread-128188] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:05:53.706 [DEBUG] [Thread-128188] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:05:53.706 [DEBUG] [Thread-128188] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:05:53.706 [DEBUG] [Thread-128188] [transport.py] [_log()] client lang: <none>
2025-12-31T13:05:53.706 [DEBUG] [Thread-128188] [transport.py] [_log()] server lang: <none>
2025-12-31T13:05:53.706 [DEBUG] [Thread-128188] [transport.py] [_log()] kex follows: False
2025-12-31T13:05:53.706 [DEBUG] [Thread-128188] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:05:53.706 [DEBUG] [Thread-128188] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:05:53.706 [DEBUG] [Thread-128188] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:05:53.707 [DEBUG] [Thread-128188] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:05:53.707 [DEBUG] [Thread-128188] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:05:53.707 [DEBUG] [Thread-128188] [transport.py] [_log()] Compression: none
2025-12-31T13:05:53.707 [DEBUG] [Thread-128188] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:05:53.769 [DEBUG] [Thread-128188] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:05:53.770 [DEBUG] [Thread-128188] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:05:53.770 [DEBUG] [Thread-128188] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T13:05:53.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T13:05:53.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:05:53.825 [DEBUG] [Thread-128188] [transport.py] [_log()] userauth is OK
2025-12-31T13:05:53.825 [DEBUG] [Thread-128188] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:05:53.825 [DEBUG] [Thread-128188] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:05:53.825 [DEBUG] [Thread-128188] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T13:05:53.825 [DEBUG] [Thread-128188] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:05:53.844 [INFO] [Thread-128188] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:05:53.845 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T13:05:53.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:05:54.657 [DEBUG] [Thread-128188] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:05:54.657 [DEBUG] [Thread-128188] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:05:54.705 [DEBUG] [Thread-128188] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:05:54.705 [DEBUG] [Thread-128188] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:05:54.715 [DEBUG] [Thread-128188] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:05:54.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:05:54.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T13:05:54.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T13:05:54.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:05:54.744 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:05:54.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:05:54.752 [DEBUG] [Thread-128188] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:06:02.739 [DEBUG] [Thread-128190 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:06:14.284 [DEBUG] [Thread-128191 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:06:17.787 [DEBUG] [Thread-128192 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:06:24.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T13:06:24.775 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T13:06:24.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T13:06:25.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 6), 31.74, 11.59, 0.0, 25.62, 25.43, 0, 0, 0, 2, 0, 0),)
2025-12-31T13:06:25.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:06:00
2025-12-31T13:06:25.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T13:06:25.836 [DEBUG] [Thread-128193] [transport.py] [_log()] starting thread (client mode): 0xb6b627a0
2025-12-31T13:06:25.836 [DEBUG] [Thread-128193] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:06:25.850 [DEBUG] [Thread-128193] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T13:06:25.850 [INFO] [Thread-128193] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T13:06:25.852 [DEBUG] [Thread-128193] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:06:25.852 [DEBUG] [Thread-128193] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T13:06:25.852 [DEBUG] [Thread-128193] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:06:25.852 [DEBUG] [Thread-128193] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:06:25.852 [DEBUG] [Thread-128193] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:06:25.852 [DEBUG] [Thread-128193] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:06:25.852 [DEBUG] [Thread-128193] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:06:25.852 [DEBUG] [Thread-128193] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:06:25.852 [DEBUG] [Thread-128193] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:06:25.852 [DEBUG] [Thread-128193] [transport.py] [_log()] client lang: <none>
2025-12-31T13:06:25.852 [DEBUG] [Thread-128193] [transport.py] [_log()] server lang: <none>
2025-12-31T13:06:25.852 [DEBUG] [Thread-128193] [transport.py] [_log()] kex follows: False
2025-12-31T13:06:25.852 [DEBUG] [Thread-128193] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:06:25.852 [DEBUG] [Thread-128193] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:06:25.852 [DEBUG] [Thread-128193] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:06:25.852 [DEBUG] [Thread-128193] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:06:25.852 [DEBUG] [Thread-128193] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:06:25.852 [DEBUG] [Thread-128193] [transport.py] [_log()] Compression: none
2025-12-31T13:06:25.852 [DEBUG] [Thread-128193] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:06:25.864 [DEBUG] [Thread-128193] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:06:25.864 [DEBUG] [Thread-128193] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:06:25.865 [DEBUG] [Thread-128193] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T13:06:25.865 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T13:06:25.865 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:06:25.865 [DEBUG] [Thread-128193] [transport.py] [_log()] userauth is OK
2025-12-31T13:06:25.865 [DEBUG] [Thread-128193] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:06:25.865 [DEBUG] [Thread-128193] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:06:25.865 [DEBUG] [Thread-128193] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T13:06:25.865 [DEBUG] [Thread-128193] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:06:25.875 [INFO] [Thread-128193] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:06:25.875 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:06:26.647 [DEBUG] [Thread-128193] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:06:26.647 [DEBUG] [Thread-128193] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:06:26.647 [DEBUG] [Thread-128193] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T13:06:26.690 [DEBUG] [Thread-128193] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:06:26.690 [DEBUG] [Thread-128193] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:06:26.692 [DEBUG] [Thread-128193] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:06:26.703 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:06:26.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T13:06:26.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T13:06:26.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T13:06:26.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:06:26.708 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T13:06:26.708 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:06:26.708 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:06:26.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T13:06:26.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.462295 -999.00  +25.50  22.11     17   -1.00 1 2 1 1 1   888    0 22.16 -181.04 ----- 28.2 22.1 279.2 33.2 30.6 -22.1 30.2 -20.7 29.7 -18.3 30.4 -18.7
2025-12-31T13:06:26.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T13:06:26.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T13:06:26.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.462295
2025-12-31T13:06:26.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T13:06:26.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T13:06:26.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T13:06:26.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T13:06:26.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T13:06:26.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:06:00', tmtdew=31.74, humidity=11.59, cloud=0.0, wind=25.62, temperature=25.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T11:05:42.288', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T13:06:26.709 [DEBUG] [Thread-128193] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:06:26.783 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T13:06:26.794 [DEBUG] [Thread-128196] [transport.py] [_log()] starting thread (client mode): 0xb6b62350
2025-12-31T13:06:26.794 [DEBUG] [Thread-128196] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:06:26.809 [DEBUG] [Thread-128196] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T13:06:26.809 [INFO] [Thread-128196] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T13:06:26.817 [DEBUG] [Thread-128196] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:06:26.817 [DEBUG] [Thread-128196] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T13:06:26.817 [DEBUG] [Thread-128196] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:06:26.817 [DEBUG] [Thread-128196] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:06:26.817 [DEBUG] [Thread-128196] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:06:26.817 [DEBUG] [Thread-128196] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:06:26.817 [DEBUG] [Thread-128196] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:06:26.817 [DEBUG] [Thread-128196] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:06:26.817 [DEBUG] [Thread-128196] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:06:26.817 [DEBUG] [Thread-128196] [transport.py] [_log()] client lang: <none>
2025-12-31T13:06:26.817 [DEBUG] [Thread-128196] [transport.py] [_log()] server lang: <none>
2025-12-31T13:06:26.817 [DEBUG] [Thread-128196] [transport.py] [_log()] kex follows: False
2025-12-31T13:06:26.817 [DEBUG] [Thread-128196] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:06:26.817 [DEBUG] [Thread-128196] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:06:26.817 [DEBUG] [Thread-128196] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:06:26.817 [DEBUG] [Thread-128196] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:06:26.817 [DEBUG] [Thread-128196] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:06:26.817 [DEBUG] [Thread-128196] [transport.py] [_log()] Compression: none
2025-12-31T13:06:26.817 [DEBUG] [Thread-128196] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:06:26.875 [DEBUG] [Thread-128196] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:06:26.876 [DEBUG] [Thread-128196] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:06:26.876 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T13:06:26.876 [DEBUG] [Thread-128196] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T13:06:26.876 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:06:26.932 [DEBUG] [Thread-128196] [transport.py] [_log()] userauth is OK
2025-12-31T13:06:26.933 [DEBUG] [Thread-128196] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:06:26.933 [DEBUG] [Thread-128196] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:06:26.933 [DEBUG] [Thread-128196] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T13:06:26.933 [DEBUG] [Thread-128196] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:06:26.950 [INFO] [Thread-128196] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:06:26.950 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T13:06:26.950 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:06:27.830 [DEBUG] [Thread-128196] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:06:27.830 [DEBUG] [Thread-128196] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:06:27.878 [DEBUG] [Thread-128196] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:06:27.878 [DEBUG] [Thread-128196] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:06:27.887 [DEBUG] [Thread-128196] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:06:27.895 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:06:27.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T13:06:27.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T13:06:27.911 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:06:27.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:06:27.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:06:27.919 [DEBUG] [Thread-128196] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:06:32.824 [DEBUG] [Thread-128198 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:06:47.642 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:06:47.643 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:06:47.884 [DEBUG] [Thread-128199 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:06:57.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T13:06:57.916 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T13:06:57.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T13:06:58.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 6, 32), 32.29, 11.16, 0.0, 25.13, 25.54, 0, 0, 0, 2, 0, 0),)
2025-12-31T13:06:58.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:06:32
2025-12-31T13:06:58.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T13:06:58.914 [DEBUG] [Thread-128200] [transport.py] [_log()] starting thread (client mode): 0xb9559600
2025-12-31T13:06:58.914 [DEBUG] [Thread-128200] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:06:58.937 [DEBUG] [Thread-128200] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T13:06:58.937 [INFO] [Thread-128200] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T13:06:58.938 [DEBUG] [Thread-128200] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:06:58.938 [DEBUG] [Thread-128200] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T13:06:58.938 [DEBUG] [Thread-128200] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:06:58.938 [DEBUG] [Thread-128200] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:06:58.938 [DEBUG] [Thread-128200] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:06:58.938 [DEBUG] [Thread-128200] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:06:58.938 [DEBUG] [Thread-128200] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:06:58.939 [DEBUG] [Thread-128200] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:06:58.939 [DEBUG] [Thread-128200] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:06:58.939 [DEBUG] [Thread-128200] [transport.py] [_log()] client lang: <none>
2025-12-31T13:06:58.939 [DEBUG] [Thread-128200] [transport.py] [_log()] server lang: <none>
2025-12-31T13:06:58.939 [DEBUG] [Thread-128200] [transport.py] [_log()] kex follows: False
2025-12-31T13:06:58.939 [DEBUG] [Thread-128200] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:06:58.939 [DEBUG] [Thread-128200] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:06:58.939 [DEBUG] [Thread-128200] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:06:58.939 [DEBUG] [Thread-128200] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:06:58.939 [DEBUG] [Thread-128200] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:06:58.939 [DEBUG] [Thread-128200] [transport.py] [_log()] Compression: none
2025-12-31T13:06:58.939 [DEBUG] [Thread-128200] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:06:58.959 [DEBUG] [Thread-128200] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:06:58.960 [DEBUG] [Thread-128200] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:06:58.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T13:06:58.961 [DEBUG] [Thread-128200] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T13:06:58.962 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:06:58.963 [DEBUG] [Thread-128200] [transport.py] [_log()] userauth is OK
2025-12-31T13:06:58.963 [DEBUG] [Thread-128200] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:06:58.963 [DEBUG] [Thread-128200] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:06:58.963 [DEBUG] [Thread-128200] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T13:06:58.963 [DEBUG] [Thread-128200] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:06:58.987 [INFO] [Thread-128200] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:06:58.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:06:59.644 [DEBUG] [Thread-128200] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:06:59.644 [DEBUG] [Thread-128200] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:06:59.645 [DEBUG] [Thread-128200] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T13:06:59.685 [DEBUG] [Thread-128200] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:06:59.685 [DEBUG] [Thread-128200] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:06:59.689 [DEBUG] [Thread-128200] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:06:59.700 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:06:59.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T13:06:59.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T13:06:59.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T13:06:59.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:06:59.713 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T13:06:59.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:06:59.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:06:59.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T13:06:59.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.462643 -999.00  +25.40  31.03     17   -1.10 1 2 2 1 1   888    0 22.63 -168.69 ----- 26.8 31.0 272.4 37.1 30.2 -22.7 30.2 -21.2 29.4 -23.5 30.1 -20.2
2025-12-31T13:06:59.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T13:06:59.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T13:06:59.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.462643
2025-12-31T13:06:59.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T13:06:59.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T13:06:59.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T13:06:59.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T13:06:59.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T13:06:59.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:06:32', tmtdew=32.29, humidity=11.16, cloud=0.0, wind=25.13, temperature=25.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T11:06:12.355', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T13:06:59.716 [DEBUG] [Thread-128200] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:06:59.799 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T13:06:59.812 [DEBUG] [Thread-128203] [transport.py] [_log()] starting thread (client mode): 0xb6bb39a0
2025-12-31T13:06:59.812 [DEBUG] [Thread-128203] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:06:59.826 [DEBUG] [Thread-128203] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T13:06:59.826 [INFO] [Thread-128203] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T13:06:59.834 [DEBUG] [Thread-128203] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:06:59.834 [DEBUG] [Thread-128203] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T13:06:59.834 [DEBUG] [Thread-128203] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:06:59.834 [DEBUG] [Thread-128203] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:06:59.834 [DEBUG] [Thread-128203] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:06:59.834 [DEBUG] [Thread-128203] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:06:59.834 [DEBUG] [Thread-128203] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:06:59.834 [DEBUG] [Thread-128203] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:06:59.834 [DEBUG] [Thread-128203] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:06:59.834 [DEBUG] [Thread-128203] [transport.py] [_log()] client lang: <none>
2025-12-31T13:06:59.834 [DEBUG] [Thread-128203] [transport.py] [_log()] server lang: <none>
2025-12-31T13:06:59.834 [DEBUG] [Thread-128203] [transport.py] [_log()] kex follows: False
2025-12-31T13:06:59.834 [DEBUG] [Thread-128203] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:06:59.834 [DEBUG] [Thread-128203] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:06:59.834 [DEBUG] [Thread-128203] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:06:59.835 [DEBUG] [Thread-128203] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:06:59.835 [DEBUG] [Thread-128203] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:06:59.835 [DEBUG] [Thread-128203] [transport.py] [_log()] Compression: none
2025-12-31T13:06:59.835 [DEBUG] [Thread-128203] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:06:59.892 [DEBUG] [Thread-128203] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:06:59.893 [DEBUG] [Thread-128203] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:06:59.894 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T13:06:59.894 [DEBUG] [Thread-128203] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T13:06:59.895 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:06:59.949 [DEBUG] [Thread-128203] [transport.py] [_log()] userauth is OK
2025-12-31T13:06:59.949 [DEBUG] [Thread-128203] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:06:59.949 [DEBUG] [Thread-128203] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:06:59.950 [DEBUG] [Thread-128203] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T13:06:59.950 [DEBUG] [Thread-128203] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:06:59.970 [INFO] [Thread-128203] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:06:59.970 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T13:06:59.971 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:07:00.785 [DEBUG] [Thread-128203] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:07:00.786 [DEBUG] [Thread-128203] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:07:00.834 [DEBUG] [Thread-128203] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:07:00.834 [DEBUG] [Thread-128203] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:07:00.843 [DEBUG] [Thread-128203] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:07:00.852 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:07:00.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-12-31T13:07:00.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T13:07:00.872 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:07:00.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:07:00.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:07:00.881 [DEBUG] [Thread-128203] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:07:02.926 [DEBUG] [Thread-128205 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:07:14.339 [DEBUG] [Thread-128206 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:07:17.978 [DEBUG] [Thread-128207 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:07:30.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T13:07:30.904 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T13:07:30.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T13:07:31.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 7, 4), 32.34, 11.13, 0.0, 24.42, 25.59, 0, 0, 0, 2, 0, 0),)
2025-12-31T13:07:31.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:07:04
2025-12-31T13:07:31.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T13:07:31.875 [DEBUG] [Thread-128208] [transport.py] [_log()] starting thread (client mode): 0xb955b790
2025-12-31T13:07:31.875 [DEBUG] [Thread-128208] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:07:31.897 [DEBUG] [Thread-128208] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T13:07:31.897 [INFO] [Thread-128208] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T13:07:31.900 [DEBUG] [Thread-128208] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:07:31.900 [DEBUG] [Thread-128208] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T13:07:31.900 [DEBUG] [Thread-128208] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:07:31.900 [DEBUG] [Thread-128208] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:07:31.900 [DEBUG] [Thread-128208] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:07:31.900 [DEBUG] [Thread-128208] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:07:31.900 [DEBUG] [Thread-128208] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:07:31.900 [DEBUG] [Thread-128208] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:07:31.900 [DEBUG] [Thread-128208] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:07:31.900 [DEBUG] [Thread-128208] [transport.py] [_log()] client lang: <none>
2025-12-31T13:07:31.900 [DEBUG] [Thread-128208] [transport.py] [_log()] server lang: <none>
2025-12-31T13:07:31.900 [DEBUG] [Thread-128208] [transport.py] [_log()] kex follows: False
2025-12-31T13:07:31.900 [DEBUG] [Thread-128208] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:07:31.900 [DEBUG] [Thread-128208] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:07:31.900 [DEBUG] [Thread-128208] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:07:31.900 [DEBUG] [Thread-128208] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:07:31.900 [DEBUG] [Thread-128208] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:07:31.901 [DEBUG] [Thread-128208] [transport.py] [_log()] Compression: none
2025-12-31T13:07:31.901 [DEBUG] [Thread-128208] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:07:31.918 [DEBUG] [Thread-128208] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:07:31.919 [DEBUG] [Thread-128208] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:07:31.919 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T13:07:31.920 [DEBUG] [Thread-128208] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T13:07:31.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:07:31.922 [DEBUG] [Thread-128208] [transport.py] [_log()] userauth is OK
2025-12-31T13:07:31.922 [DEBUG] [Thread-128208] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:07:31.922 [DEBUG] [Thread-128208] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:07:31.922 [DEBUG] [Thread-128208] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T13:07:31.922 [DEBUG] [Thread-128208] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:07:31.944 [INFO] [Thread-128208] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:07:31.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:07:32.657 [DEBUG] [Thread-128208] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:07:32.657 [DEBUG] [Thread-128208] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:07:32.657 [DEBUG] [Thread-128208] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T13:07:32.698 [DEBUG] [Thread-128208] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:07:32.698 [DEBUG] [Thread-128208] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:07:32.700 [DEBUG] [Thread-128208] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:07:32.707 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:07:32.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T13:07:32.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T13:07:32.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T13:07:32.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:07:32.717 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T13:07:32.718 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:07:32.718 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:07:32.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T13:07:32.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.462990 -999.00  +24.90  31.01     17   -1.20 1 2 2 1 1   888    0 22.92 -170.44 ----- 26.7 31.0 275.8 37.3 30.0 -24.7 30.0 -22.4 29.0 -23.4 29.8 -20.9
2025-12-31T13:07:32.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T13:07:32.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T13:07:32.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.462990
2025-12-31T13:07:32.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T13:07:32.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T13:07:32.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T13:07:32.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T13:07:32.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T13:07:32.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:07:04', tmtdew=32.34, humidity=11.13, cloud=0.0, wind=24.42, temperature=25.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T11:06:42.336', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T13:07:32.720 [DEBUG] [Thread-128208] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:07:32.804 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T13:07:32.815 [DEBUG] [Thread-128211] [transport.py] [_log()] starting thread (client mode): 0xbbfcca30
2025-12-31T13:07:32.816 [DEBUG] [Thread-128211] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:07:32.831 [DEBUG] [Thread-128211] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T13:07:32.831 [INFO] [Thread-128211] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T13:07:32.839 [DEBUG] [Thread-128211] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:07:32.839 [DEBUG] [Thread-128211] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T13:07:32.839 [DEBUG] [Thread-128211] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:07:32.840 [DEBUG] [Thread-128211] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:07:32.840 [DEBUG] [Thread-128211] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:07:32.840 [DEBUG] [Thread-128211] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:07:32.840 [DEBUG] [Thread-128211] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:07:32.840 [DEBUG] [Thread-128211] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:07:32.840 [DEBUG] [Thread-128211] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:07:32.840 [DEBUG] [Thread-128211] [transport.py] [_log()] client lang: <none>
2025-12-31T13:07:32.840 [DEBUG] [Thread-128211] [transport.py] [_log()] server lang: <none>
2025-12-31T13:07:32.840 [DEBUG] [Thread-128211] [transport.py] [_log()] kex follows: False
2025-12-31T13:07:32.841 [DEBUG] [Thread-128211] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:07:32.841 [DEBUG] [Thread-128211] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:07:32.841 [DEBUG] [Thread-128211] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:07:32.841 [DEBUG] [Thread-128211] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:07:32.841 [DEBUG] [Thread-128211] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:07:32.841 [DEBUG] [Thread-128211] [transport.py] [_log()] Compression: none
2025-12-31T13:07:32.841 [DEBUG] [Thread-128211] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:07:32.902 [DEBUG] [Thread-128211] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:07:32.902 [DEBUG] [Thread-128211] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:07:32.903 [DEBUG] [Thread-128211] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T13:07:32.903 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T13:07:32.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:07:32.961 [DEBUG] [Thread-128211] [transport.py] [_log()] userauth is OK
2025-12-31T13:07:32.961 [DEBUG] [Thread-128211] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:07:32.961 [DEBUG] [Thread-128211] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:07:32.961 [DEBUG] [Thread-128211] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T13:07:32.962 [DEBUG] [Thread-128211] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:07:32.981 [INFO] [Thread-128211] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:07:32.981 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T13:07:32.982 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:07:33.019 [DEBUG] [Thread-128213 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:07:33.889 [DEBUG] [Thread-128211] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:07:33.890 [DEBUG] [Thread-128211] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:07:33.938 [DEBUG] [Thread-128211] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:07:33.939 [DEBUG] [Thread-128211] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:07:33.948 [DEBUG] [Thread-128211] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:07:33.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:07: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-12-31T13:07: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-12-31T13:07:33.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:07:33.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:07:33.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:07:33.985 [DEBUG] [Thread-128211] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:07:47.781 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:07:47.782 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:07:48.070 [DEBUG] [Thread-128214 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:08:03.106 [DEBUG] [Thread-128215 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:08:04.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T13:08:04.007 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T13:08:04.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T13:08:04.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 7, 37), 31.3, 12.08, 0.0, 27.49, 25.24, 0, 0, 0, 2, 0, 0),)
2025-12-31T13:08:04.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:07:37
2025-12-31T13:08:04.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T13:08:04.984 [DEBUG] [Thread-128216] [transport.py] [_log()] starting thread (client mode): 0xb6b61c60
2025-12-31T13:08:04.984 [DEBUG] [Thread-128216] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:08:05.005 [DEBUG] [Thread-128216] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T13:08:05.005 [INFO] [Thread-128216] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T13:08:05.008 [DEBUG] [Thread-128216] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:08:05.008 [DEBUG] [Thread-128216] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T13:08:05.008 [DEBUG] [Thread-128216] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:08:05.008 [DEBUG] [Thread-128216] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:08:05.008 [DEBUG] [Thread-128216] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:08:05.009 [DEBUG] [Thread-128216] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:08:05.009 [DEBUG] [Thread-128216] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:08:05.009 [DEBUG] [Thread-128216] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:08:05.009 [DEBUG] [Thread-128216] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:08:05.009 [DEBUG] [Thread-128216] [transport.py] [_log()] client lang: <none>
2025-12-31T13:08:05.009 [DEBUG] [Thread-128216] [transport.py] [_log()] server lang: <none>
2025-12-31T13:08:05.009 [DEBUG] [Thread-128216] [transport.py] [_log()] kex follows: False
2025-12-31T13:08:05.009 [DEBUG] [Thread-128216] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:08:05.009 [DEBUG] [Thread-128216] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:08:05.009 [DEBUG] [Thread-128216] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:08:05.009 [DEBUG] [Thread-128216] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:08:05.009 [DEBUG] [Thread-128216] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:08:05.009 [DEBUG] [Thread-128216] [transport.py] [_log()] Compression: none
2025-12-31T13:08:05.010 [DEBUG] [Thread-128216] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:08:05.029 [DEBUG] [Thread-128216] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:08:05.030 [DEBUG] [Thread-128216] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:08:05.031 [DEBUG] [Thread-128216] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T13:08:05.031 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T13:08:05.032 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:08:05.033 [DEBUG] [Thread-128216] [transport.py] [_log()] userauth is OK
2025-12-31T13:08:05.033 [DEBUG] [Thread-128216] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:08:05.033 [DEBUG] [Thread-128216] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:08:05.033 [DEBUG] [Thread-128216] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T13:08:05.033 [DEBUG] [Thread-128216] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:08:05.058 [INFO] [Thread-128216] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:08:05.059 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:08:05.675 [DEBUG] [Thread-128216] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:08:05.675 [DEBUG] [Thread-128216] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:08:05.675 [DEBUG] [Thread-128216] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T13:08:05.717 [DEBUG] [Thread-128216] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:08:05.717 [DEBUG] [Thread-128216] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:08:05.719 [DEBUG] [Thread-128216] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:08:05.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:08:05.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T13:08:05.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T13:08:05.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T13:08:05.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:08:05.739 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T13:08:05.740 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:08:05.740 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:08:05.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T13:08:05.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.463684 -999.00  +24.40  18.48     18   -1.30 1 2 1 1 1   888    0 22.86 -158.60 ----- 12.4 18.5 268.0 24.7 29.9 -21.4 29.6 -21.1 28.9 -18.9 29.6 -19.4
2025-12-31T13:08:05.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T13:08:05.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T13:08:05.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.463684
2025-12-31T13:08:05.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T13:08:05.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T13:08:05.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T13:08:05.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T13:08:05.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T13:08:05.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:07:37', tmtdew=31.3, humidity=12.08, cloud=0.0, wind=27.49, temperature=25.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T11:07:42.298', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T13:08:05.743 [DEBUG] [Thread-128216] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:08:05.828 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T13:08:05.840 [DEBUG] [Thread-128219] [transport.py] [_log()] starting thread (client mode): 0xb955b520
2025-12-31T13:08:05.840 [DEBUG] [Thread-128219] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:08:05.855 [DEBUG] [Thread-128219] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T13:08:05.855 [INFO] [Thread-128219] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T13:08:05.863 [DEBUG] [Thread-128219] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:08:05.863 [DEBUG] [Thread-128219] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T13:08:05.863 [DEBUG] [Thread-128219] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:08:05.863 [DEBUG] [Thread-128219] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:08:05.863 [DEBUG] [Thread-128219] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:08:05.863 [DEBUG] [Thread-128219] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:08:05.863 [DEBUG] [Thread-128219] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:08:05.863 [DEBUG] [Thread-128219] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:08:05.864 [DEBUG] [Thread-128219] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:08:05.864 [DEBUG] [Thread-128219] [transport.py] [_log()] client lang: <none>
2025-12-31T13:08:05.864 [DEBUG] [Thread-128219] [transport.py] [_log()] server lang: <none>
2025-12-31T13:08:05.864 [DEBUG] [Thread-128219] [transport.py] [_log()] kex follows: False
2025-12-31T13:08:05.864 [DEBUG] [Thread-128219] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:08:05.864 [DEBUG] [Thread-128219] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:08:05.864 [DEBUG] [Thread-128219] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:08:05.864 [DEBUG] [Thread-128219] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:08:05.865 [DEBUG] [Thread-128219] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:08:05.865 [DEBUG] [Thread-128219] [transport.py] [_log()] Compression: none
2025-12-31T13:08:05.865 [DEBUG] [Thread-128219] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:08:05.922 [DEBUG] [Thread-128219] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:08:05.923 [DEBUG] [Thread-128219] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:08:05.924 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T13:08:05.924 [DEBUG] [Thread-128219] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T13:08:05.925 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:08:05.985 [DEBUG] [Thread-128219] [transport.py] [_log()] userauth is OK
2025-12-31T13:08:05.985 [DEBUG] [Thread-128219] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:08:05.985 [DEBUG] [Thread-128219] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:08:05.985 [DEBUG] [Thread-128219] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T13:08:05.986 [DEBUG] [Thread-128219] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:08:06.004 [INFO] [Thread-128219] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:08:06.004 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T13:08:06.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:08:06.849 [DEBUG] [Thread-128219] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:08:06.849 [DEBUG] [Thread-128219] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:08:06.897 [DEBUG] [Thread-128219] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:08:06.897 [DEBUG] [Thread-128219] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:08:06.907 [DEBUG] [Thread-128219] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:08:06.916 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:08:06.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T13:08:06.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T13:08:06.936 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:08:06.936 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:08:06.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:08:06.945 [DEBUG] [Thread-128219] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:08:14.400 [DEBUG] [Thread-128221 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:08:18.139 [DEBUG] [Thread-128222 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:08:33.195 [DEBUG] [Thread-128223 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:08:36.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T13:08:36.967 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T13:08:36.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T13:08:37.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 8, 9), 31.0, 12.31, 0.0, 23.45, 25.09, 0, 0, 0, 2, 0, 0),)
2025-12-31T13:08:37.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:08:09
2025-12-31T13:08:37.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T13:08:37.954 [DEBUG] [Thread-128224] [transport.py] [_log()] starting thread (client mode): 0xb6ba2260
2025-12-31T13:08:37.954 [DEBUG] [Thread-128224] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:08:37.973 [DEBUG] [Thread-128224] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T13:08:37.974 [INFO] [Thread-128224] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T13:08:37.977 [DEBUG] [Thread-128224] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:08:37.977 [DEBUG] [Thread-128224] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T13:08:37.977 [DEBUG] [Thread-128224] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:08:37.977 [DEBUG] [Thread-128224] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:08:37.977 [DEBUG] [Thread-128224] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:08:37.977 [DEBUG] [Thread-128224] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:08:37.977 [DEBUG] [Thread-128224] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:08:37.977 [DEBUG] [Thread-128224] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:08:37.977 [DEBUG] [Thread-128224] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:08:37.977 [DEBUG] [Thread-128224] [transport.py] [_log()] client lang: <none>
2025-12-31T13:08:37.977 [DEBUG] [Thread-128224] [transport.py] [_log()] server lang: <none>
2025-12-31T13:08:37.977 [DEBUG] [Thread-128224] [transport.py] [_log()] kex follows: False
2025-12-31T13:08:37.977 [DEBUG] [Thread-128224] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:08:37.977 [DEBUG] [Thread-128224] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:08:37.977 [DEBUG] [Thread-128224] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:08:37.977 [DEBUG] [Thread-128224] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:08:37.977 [DEBUG] [Thread-128224] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:08:37.977 [DEBUG] [Thread-128224] [transport.py] [_log()] Compression: none
2025-12-31T13:08:37.977 [DEBUG] [Thread-128224] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:08:37.993 [DEBUG] [Thread-128224] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:08:37.994 [DEBUG] [Thread-128224] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:08:37.994 [DEBUG] [Thread-128224] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T13:08:37.994 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T13:08:37.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:08:37.996 [DEBUG] [Thread-128224] [transport.py] [_log()] userauth is OK
2025-12-31T13:08:37.996 [DEBUG] [Thread-128224] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:08:37.996 [DEBUG] [Thread-128224] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:08:37.996 [DEBUG] [Thread-128224] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T13:08:37.996 [DEBUG] [Thread-128224] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:08:38.017 [INFO] [Thread-128224] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:08:38.017 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:08:38.758 [DEBUG] [Thread-128224] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:08:38.759 [DEBUG] [Thread-128224] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:08:38.759 [DEBUG] [Thread-128224] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T13:08:38.800 [DEBUG] [Thread-128224] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:08:38.800 [DEBUG] [Thread-128224] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:08:38.803 [DEBUG] [Thread-128224] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:08:38.814 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:08:38.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T13:08:38.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T13:08:38.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T13:08:38.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:08:38.834 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T13:08:38.834 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:08:38.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:08:38.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T13:08:38.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.464031 -999.00  +24.70  19.56     18   -1.00 1 2 1 1 1   888    0 22.03 -178.90 ----- 24.9 19.6 276.8 23.4 29.9 -21.2 29.7 -20.3 29.0 -21.0 29.5 -19.4
2025-12-31T13:08:38.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T13:08:38.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T13:08:38.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.464031
2025-12-31T13:08:38.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T13:08:38.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T13:08:38.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T13:08:38.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T13:08:38.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T13:08:38.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:08:09', tmtdew=31.0, humidity=12.31, cloud=0.0, wind=23.45, temperature=25.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T11:08:12.278', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T13:08:38.837 [DEBUG] [Thread-128224] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:08:38.922 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T13:08:38.934 [DEBUG] [Thread-128227] [transport.py] [_log()] starting thread (client mode): 0xb6ba0d00
2025-12-31T13:08:38.934 [DEBUG] [Thread-128227] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:08:38.949 [DEBUG] [Thread-128227] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T13:08:38.949 [INFO] [Thread-128227] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T13:08:38.957 [DEBUG] [Thread-128227] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:08:38.957 [DEBUG] [Thread-128227] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T13:08:38.957 [DEBUG] [Thread-128227] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:08:38.957 [DEBUG] [Thread-128227] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:08:38.957 [DEBUG] [Thread-128227] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:08:38.957 [DEBUG] [Thread-128227] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:08:38.957 [DEBUG] [Thread-128227] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:08:38.957 [DEBUG] [Thread-128227] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:08:38.957 [DEBUG] [Thread-128227] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:08:38.957 [DEBUG] [Thread-128227] [transport.py] [_log()] client lang: <none>
2025-12-31T13:08:38.957 [DEBUG] [Thread-128227] [transport.py] [_log()] server lang: <none>
2025-12-31T13:08:38.957 [DEBUG] [Thread-128227] [transport.py] [_log()] kex follows: False
2025-12-31T13:08:38.957 [DEBUG] [Thread-128227] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:08:38.957 [DEBUG] [Thread-128227] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:08:38.957 [DEBUG] [Thread-128227] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:08:38.957 [DEBUG] [Thread-128227] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:08:38.958 [DEBUG] [Thread-128227] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:08:38.958 [DEBUG] [Thread-128227] [transport.py] [_log()] Compression: none
2025-12-31T13:08:38.958 [DEBUG] [Thread-128227] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:08:39.017 [DEBUG] [Thread-128227] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:08:39.018 [DEBUG] [Thread-128227] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:08:39.018 [DEBUG] [Thread-128227] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T13:08:39.019 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T13:08:39.019 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:08:39.078 [DEBUG] [Thread-128227] [transport.py] [_log()] userauth is OK
2025-12-31T13:08:39.079 [DEBUG] [Thread-128227] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:08:39.079 [DEBUG] [Thread-128227] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:08:39.079 [DEBUG] [Thread-128227] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T13:08:39.079 [DEBUG] [Thread-128227] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:08:39.098 [INFO] [Thread-128227] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:08:39.098 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T13:08:39.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:08:39.928 [DEBUG] [Thread-128227] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:08:39.929 [DEBUG] [Thread-128227] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:08:39.977 [DEBUG] [Thread-128227] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:08:39.977 [DEBUG] [Thread-128227] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:08:39.987 [DEBUG] [Thread-128227] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:08:39.996 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:08:39.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T13:08:40.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T13:08:40.014 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:08:40.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:08:40.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:08:40.023 [DEBUG] [Thread-128227] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:08:47.922 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:08:47.924 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:08:48.234 [DEBUG] [Thread-128229 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:09:03.294 [DEBUG] [Thread-128230 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:09:10.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T13:09:10.046 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T13:09:10.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T13:09:10.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 8, 41), 30.95, 12.34, 0.0, 21.32, 25.33, 0, 0, 0, 2, 0, 0),)
2025-12-31T13:09:10.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:08:41
2025-12-31T13:09:10.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T13:09:11.015 [DEBUG] [Thread-128231] [transport.py] [_log()] starting thread (client mode): 0xb95b0610
2025-12-31T13:09:11.015 [DEBUG] [Thread-128231] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:09:11.035 [DEBUG] [Thread-128231] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T13:09:11.035 [INFO] [Thread-128231] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T13:09:11.038 [DEBUG] [Thread-128231] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:09:11.038 [DEBUG] [Thread-128231] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T13:09:11.038 [DEBUG] [Thread-128231] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:09:11.038 [DEBUG] [Thread-128231] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:09:11.038 [DEBUG] [Thread-128231] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:09:11.038 [DEBUG] [Thread-128231] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:09:11.038 [DEBUG] [Thread-128231] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:09:11.038 [DEBUG] [Thread-128231] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:09:11.038 [DEBUG] [Thread-128231] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:09:11.038 [DEBUG] [Thread-128231] [transport.py] [_log()] client lang: <none>
2025-12-31T13:09:11.038 [DEBUG] [Thread-128231] [transport.py] [_log()] server lang: <none>
2025-12-31T13:09:11.038 [DEBUG] [Thread-128231] [transport.py] [_log()] kex follows: False
2025-12-31T13:09:11.038 [DEBUG] [Thread-128231] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:09:11.038 [DEBUG] [Thread-128231] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:09:11.038 [DEBUG] [Thread-128231] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:09:11.038 [DEBUG] [Thread-128231] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:09:11.038 [DEBUG] [Thread-128231] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:09:11.038 [DEBUG] [Thread-128231] [transport.py] [_log()] Compression: none
2025-12-31T13:09:11.038 [DEBUG] [Thread-128231] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:09:11.056 [DEBUG] [Thread-128231] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:09:11.057 [DEBUG] [Thread-128231] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:09:11.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T13:09:11.058 [DEBUG] [Thread-128231] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T13:09:11.058 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:09:11.059 [DEBUG] [Thread-128231] [transport.py] [_log()] userauth is OK
2025-12-31T13:09:11.059 [DEBUG] [Thread-128231] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:09:11.059 [DEBUG] [Thread-128231] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:09:11.059 [DEBUG] [Thread-128231] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T13:09:11.060 [DEBUG] [Thread-128231] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:09:11.083 [INFO] [Thread-128231] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:09:11.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:09:11.742 [DEBUG] [Thread-128231] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:09:11.743 [DEBUG] [Thread-128231] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:09:11.743 [DEBUG] [Thread-128231] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T13:09:11.784 [DEBUG] [Thread-128231] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:09:11.784 [DEBUG] [Thread-128231] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:09:11.788 [DEBUG] [Thread-128231] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:09:11.801 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:09:11.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T13:09:11.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T13:09:11.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T13:09:11.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:09:11.812 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T13:09:11.812 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:09:11.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:09:11.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T13:09:11.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.464379 -999.00  +24.80  14.72     18   -0.90 1 2 1 1 1   888    0 22.40 -168.69 ----- 16.5 14.7 279.8 27.5 30.0 -21.4 29.7 -20.7 29.1 -19.9 29.6 -19.3
2025-12-31T13:09:11.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T13:09:11.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T13:09:11.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.464379
2025-12-31T13:09:11.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T13:09:11.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T13:09:11.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T13:09:11.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T13:09:11.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T13:09:11.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:08:41', tmtdew=30.95, humidity=12.34, cloud=0.0, wind=21.32, temperature=25.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T11:08:42.346', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T13:09:11.815 [DEBUG] [Thread-128231] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:09:11.898 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T13:09:11.911 [DEBUG] [Thread-128234] [transport.py] [_log()] starting thread (client mode): 0xb6b2a200
2025-12-31T13:09:11.911 [DEBUG] [Thread-128234] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:09:11.925 [DEBUG] [Thread-128234] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T13:09:11.926 [INFO] [Thread-128234] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T13:09:11.933 [DEBUG] [Thread-128234] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:09:11.934 [DEBUG] [Thread-128234] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T13:09:11.934 [DEBUG] [Thread-128234] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:09:11.934 [DEBUG] [Thread-128234] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:09:11.934 [DEBUG] [Thread-128234] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:09:11.935 [DEBUG] [Thread-128234] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:09:11.935 [DEBUG] [Thread-128234] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:09:11.935 [DEBUG] [Thread-128234] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:09:11.935 [DEBUG] [Thread-128234] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:09:11.935 [DEBUG] [Thread-128234] [transport.py] [_log()] client lang: <none>
2025-12-31T13:09:11.935 [DEBUG] [Thread-128234] [transport.py] [_log()] server lang: <none>
2025-12-31T13:09:11.935 [DEBUG] [Thread-128234] [transport.py] [_log()] kex follows: False
2025-12-31T13:09:11.935 [DEBUG] [Thread-128234] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:09:11.935 [DEBUG] [Thread-128234] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:09:11.935 [DEBUG] [Thread-128234] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:09:11.935 [DEBUG] [Thread-128234] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:09:11.935 [DEBUG] [Thread-128234] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:09:11.935 [DEBUG] [Thread-128234] [transport.py] [_log()] Compression: none
2025-12-31T13:09:11.935 [DEBUG] [Thread-128234] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:09:11.993 [DEBUG] [Thread-128234] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:09:11.993 [DEBUG] [Thread-128234] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:09:11.994 [DEBUG] [Thread-128234] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T13:09:11.994 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T13:09:11.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:09:12.049 [DEBUG] [Thread-128234] [transport.py] [_log()] userauth is OK
2025-12-31T13:09:12.049 [DEBUG] [Thread-128234] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:09:12.049 [DEBUG] [Thread-128234] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:09:12.049 [DEBUG] [Thread-128234] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T13:09:12.050 [DEBUG] [Thread-128234] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:09:12.069 [INFO] [Thread-128234] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:09:12.069 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T13:09:12.070 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:09:12.935 [DEBUG] [Thread-128234] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:09:12.935 [DEBUG] [Thread-128234] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:09:12.983 [DEBUG] [Thread-128234] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:09:12.983 [DEBUG] [Thread-128234] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:09:12.992 [DEBUG] [Thread-128234] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:09:13.002 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:09:13.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T13:09:13.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T13:09:13.020 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:09:13.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:09:13.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:09:13.030 [DEBUG] [Thread-128234] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:09:14.445 [DEBUG] [Thread-128236 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:09:18.324 [DEBUG] [Thread-128237 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:09:33.379 [DEBUG] [Thread-128238 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:09:43.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T13:09:43.022 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T13:09:43.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T13:09:43.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 9, 13), 30.96, 12.34, 0.0, 24.0, 25.38, 0, 0, 0, 2, 0, 0),)
2025-12-31T13:09:43.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:09:13
2025-12-31T13:09:43.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T13:09:44.052 [DEBUG] [Thread-128239] [transport.py] [_log()] starting thread (client mode): 0xb6b2b400
2025-12-31T13:09:44.052 [DEBUG] [Thread-128239] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:09:44.073 [DEBUG] [Thread-128239] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T13:09:44.073 [INFO] [Thread-128239] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T13:09:44.076 [DEBUG] [Thread-128239] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:09:44.076 [DEBUG] [Thread-128239] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T13:09:44.076 [DEBUG] [Thread-128239] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:09:44.076 [DEBUG] [Thread-128239] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:09:44.076 [DEBUG] [Thread-128239] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:09:44.076 [DEBUG] [Thread-128239] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:09:44.076 [DEBUG] [Thread-128239] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:09:44.076 [DEBUG] [Thread-128239] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:09:44.076 [DEBUG] [Thread-128239] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:09:44.076 [DEBUG] [Thread-128239] [transport.py] [_log()] client lang: <none>
2025-12-31T13:09:44.076 [DEBUG] [Thread-128239] [transport.py] [_log()] server lang: <none>
2025-12-31T13:09:44.076 [DEBUG] [Thread-128239] [transport.py] [_log()] kex follows: False
2025-12-31T13:09:44.076 [DEBUG] [Thread-128239] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:09:44.076 [DEBUG] [Thread-128239] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:09:44.076 [DEBUG] [Thread-128239] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:09:44.076 [DEBUG] [Thread-128239] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:09:44.076 [DEBUG] [Thread-128239] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:09:44.076 [DEBUG] [Thread-128239] [transport.py] [_log()] Compression: none
2025-12-31T13:09:44.076 [DEBUG] [Thread-128239] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:09:44.090 [DEBUG] [Thread-128239] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:09:44.090 [DEBUG] [Thread-128239] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:09:44.090 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T13:09:44.090 [DEBUG] [Thread-128239] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T13:09:44.091 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:09:44.091 [DEBUG] [Thread-128239] [transport.py] [_log()] userauth is OK
2025-12-31T13:09:44.091 [DEBUG] [Thread-128239] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:09:44.091 [DEBUG] [Thread-128239] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:09:44.091 [DEBUG] [Thread-128239] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T13:09:44.091 [DEBUG] [Thread-128239] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:09:44.107 [INFO] [Thread-128239] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:09:44.107 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:09:44.930 [DEBUG] [Thread-128239] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:09:44.930 [DEBUG] [Thread-128239] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:09:44.930 [DEBUG] [Thread-128239] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T13:09:44.971 [DEBUG] [Thread-128239] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:09:44.971 [DEBUG] [Thread-128239] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:09:44.973 [DEBUG] [Thread-128239] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:09:44.987 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:09:44.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T13:09:44.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T13:09:44.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T13:09:44.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:09:44.992 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T13:09:44.992 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:09:44.992 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:09:44.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T13:09:44.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.464726 -999.00  +24.90  20.55     17   -1.30 1 2 1 1 1   888    0 22.37 -164.71 ----- 21.5 20.6 263.4 29.8 29.8 -23.1 29.6 -21.5 28.9 -19.4 29.4 -21.0
2025-12-31T13:09:44.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T13:09:44.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T13:09:44.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.464726
2025-12-31T13:09:44.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T13:09:44.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T13:09:44.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T13:09:44.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T13:09:44.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T13:09:44.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:09:13', tmtdew=30.96, humidity=12.34, cloud=0.0, wind=24.0, temperature=25.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T11:09:12.326', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T13:09:44.993 [DEBUG] [Thread-128239] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:09:45.067 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T13:09:45.082 [DEBUG] [Thread-128242] [transport.py] [_log()] starting thread (client mode): 0xb95b1a80
2025-12-31T13:09:45.082 [DEBUG] [Thread-128242] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:09:45.099 [DEBUG] [Thread-128242] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T13:09:45.099 [INFO] [Thread-128242] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T13:09:45.110 [DEBUG] [Thread-128242] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:09:45.110 [DEBUG] [Thread-128242] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T13:09:45.110 [DEBUG] [Thread-128242] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:09:45.110 [DEBUG] [Thread-128242] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:09:45.110 [DEBUG] [Thread-128242] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:09:45.110 [DEBUG] [Thread-128242] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:09:45.110 [DEBUG] [Thread-128242] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:09:45.110 [DEBUG] [Thread-128242] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:09:45.110 [DEBUG] [Thread-128242] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:09:45.110 [DEBUG] [Thread-128242] [transport.py] [_log()] client lang: <none>
2025-12-31T13:09:45.110 [DEBUG] [Thread-128242] [transport.py] [_log()] server lang: <none>
2025-12-31T13:09:45.110 [DEBUG] [Thread-128242] [transport.py] [_log()] kex follows: False
2025-12-31T13:09:45.110 [DEBUG] [Thread-128242] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:09:45.110 [DEBUG] [Thread-128242] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:09:45.110 [DEBUG] [Thread-128242] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:09:45.110 [DEBUG] [Thread-128242] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:09:45.110 [DEBUG] [Thread-128242] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:09:45.110 [DEBUG] [Thread-128242] [transport.py] [_log()] Compression: none
2025-12-31T13:09:45.110 [DEBUG] [Thread-128242] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:09:45.167 [DEBUG] [Thread-128242] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:09:45.167 [DEBUG] [Thread-128242] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:09:45.167 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T13:09:45.167 [DEBUG] [Thread-128242] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T13:09:45.167 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:09:45.224 [DEBUG] [Thread-128242] [transport.py] [_log()] userauth is OK
2025-12-31T13:09:45.224 [DEBUG] [Thread-128242] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:09:45.224 [DEBUG] [Thread-128242] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:09:45.224 [DEBUG] [Thread-128242] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T13:09:45.224 [DEBUG] [Thread-128242] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:09:45.238 [INFO] [Thread-128242] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:09:45.238 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T13:09:45.238 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:09:46.072 [DEBUG] [Thread-128242] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:09:46.072 [DEBUG] [Thread-128242] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:09:46.119 [DEBUG] [Thread-128242] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:09:46.119 [DEBUG] [Thread-128242] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:09:46.127 [DEBUG] [Thread-128242] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:09:46.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:09:46.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T13:09:46.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-12-31T13:09:46.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:09:46.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:09:46.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:09:46.159 [DEBUG] [Thread-128242] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:09:48.075 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:09:48.077 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:09:48.420 [DEBUG] [Thread-128244 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:10:03.476 [DEBUG] [Thread-128245 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:10:14.500 [DEBUG] [Thread-128246 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:10:16.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T13:10:16.182 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T13:10:16.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T13:10:16.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 9, 45), 31.48, 11.78, 0.0, 28.62, 25.36, 0, 0, 0, 2, 0, 0),)
2025-12-31T13:10:16.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:09:45
2025-12-31T13:10:17.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T13:10:17.156 [DEBUG] [Thread-128247] [transport.py] [_log()] starting thread (client mode): 0xb95b3ca0
2025-12-31T13:10:17.156 [DEBUG] [Thread-128247] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:10:17.176 [DEBUG] [Thread-128247] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T13:10:17.176 [INFO] [Thread-128247] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T13:10:17.179 [DEBUG] [Thread-128247] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:10:17.179 [DEBUG] [Thread-128247] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T13:10:17.179 [DEBUG] [Thread-128247] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:10:17.179 [DEBUG] [Thread-128247] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:10:17.179 [DEBUG] [Thread-128247] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:10:17.179 [DEBUG] [Thread-128247] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:10:17.179 [DEBUG] [Thread-128247] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:10:17.179 [DEBUG] [Thread-128247] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:10:17.179 [DEBUG] [Thread-128247] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:10:17.179 [DEBUG] [Thread-128247] [transport.py] [_log()] client lang: <none>
2025-12-31T13:10:17.179 [DEBUG] [Thread-128247] [transport.py] [_log()] server lang: <none>
2025-12-31T13:10:17.179 [DEBUG] [Thread-128247] [transport.py] [_log()] kex follows: False
2025-12-31T13:10:17.179 [DEBUG] [Thread-128247] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:10:17.180 [DEBUG] [Thread-128247] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:10:17.180 [DEBUG] [Thread-128247] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:10:17.180 [DEBUG] [Thread-128247] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:10:17.180 [DEBUG] [Thread-128247] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:10:17.180 [DEBUG] [Thread-128247] [transport.py] [_log()] Compression: none
2025-12-31T13:10:17.180 [DEBUG] [Thread-128247] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:10:17.199 [DEBUG] [Thread-128247] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:10:17.199 [DEBUG] [Thread-128247] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:10:17.200 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T13:10:17.200 [DEBUG] [Thread-128247] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T13:10:17.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:10:17.202 [DEBUG] [Thread-128247] [transport.py] [_log()] userauth is OK
2025-12-31T13:10:17.202 [DEBUG] [Thread-128247] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:10:17.203 [DEBUG] [Thread-128247] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:10:17.203 [DEBUG] [Thread-128247] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T13:10:17.203 [DEBUG] [Thread-128247] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:10:17.227 [INFO] [Thread-128247] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:10:17.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:10:18.510 [DEBUG] [Thread-128249 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:10:19.384 [DEBUG] [Thread-128247] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:10:19.385 [DEBUG] [Thread-128247] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:10:19.385 [DEBUG] [Thread-128247] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T13:10:19.426 [DEBUG] [Thread-128247] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:10:19.426 [DEBUG] [Thread-128247] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:10:19.428 [DEBUG] [Thread-128247] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:10:19.611 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:10:19.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T13:10:19.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T13:10:19.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T13:10:19.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:10:19.620 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T13:10:19.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:10:19.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:10:19.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T13:10:19.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.465073 -999.00  +24.70  21.22     17   -1.40 1 2 1 1 1   888    0 22.05 -167.55 ----- 19.1 21.2 279.6 38.2 29.8 -21.7 29.5 -22.1 28.8 -21.6 29.4 -20.4
2025-12-31T13:10:19.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T13:10:19.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T13:10:19.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.465073
2025-12-31T13:10:19.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T13:10:19.622 [DEBUG] [Thread-128247] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:10:19.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T13:10:19.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T13:10:19.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T13:10:19.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T13:10:19.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:09:45', tmtdew=31.48, humidity=11.78, cloud=0.0, wind=28.62, temperature=25.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T11:09:42.307', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T13:10:19.702 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T13:10:19.716 [DEBUG] [Thread-128251] [transport.py] [_log()] starting thread (client mode): 0xb95b0490
2025-12-31T13:10:19.716 [DEBUG] [Thread-128251] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:10:19.731 [DEBUG] [Thread-128251] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T13:10:19.732 [INFO] [Thread-128251] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T13:10:19.739 [DEBUG] [Thread-128251] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:10:19.739 [DEBUG] [Thread-128251] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T13:10:19.739 [DEBUG] [Thread-128251] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:10:19.739 [DEBUG] [Thread-128251] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:10:19.740 [DEBUG] [Thread-128251] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:10:19.740 [DEBUG] [Thread-128251] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:10:19.740 [DEBUG] [Thread-128251] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:10:19.740 [DEBUG] [Thread-128251] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:10:19.740 [DEBUG] [Thread-128251] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:10:19.740 [DEBUG] [Thread-128251] [transport.py] [_log()] client lang: <none>
2025-12-31T13:10:19.740 [DEBUG] [Thread-128251] [transport.py] [_log()] server lang: <none>
2025-12-31T13:10:19.740 [DEBUG] [Thread-128251] [transport.py] [_log()] kex follows: False
2025-12-31T13:10:19.740 [DEBUG] [Thread-128251] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:10:19.740 [DEBUG] [Thread-128251] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:10:19.740 [DEBUG] [Thread-128251] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:10:19.740 [DEBUG] [Thread-128251] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:10:19.740 [DEBUG] [Thread-128251] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:10:19.740 [DEBUG] [Thread-128251] [transport.py] [_log()] Compression: none
2025-12-31T13:10:19.740 [DEBUG] [Thread-128251] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:10:19.801 [DEBUG] [Thread-128251] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:10:19.802 [DEBUG] [Thread-128251] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:10:19.802 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T13:10:19.803 [DEBUG] [Thread-128251] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T13:10:19.804 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:10:19.861 [DEBUG] [Thread-128251] [transport.py] [_log()] userauth is OK
2025-12-31T13:10:19.861 [DEBUG] [Thread-128251] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:10:19.861 [DEBUG] [Thread-128251] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:10:19.861 [DEBUG] [Thread-128251] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T13:10:19.861 [DEBUG] [Thread-128251] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:10:19.880 [INFO] [Thread-128251] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:10:19.881 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T13:10:19.881 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:10:20.781 [DEBUG] [Thread-128251] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:10:20.781 [DEBUG] [Thread-128251] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:10:20.829 [DEBUG] [Thread-128251] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:10:20.829 [DEBUG] [Thread-128251] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:10:20.837 [DEBUG] [Thread-128251] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:10:20.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:10:20.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T13:10:20.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T13:10:20.861 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:10:20.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:10:20.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:10:20.868 [DEBUG] [Thread-128251] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:10:33.544 [DEBUG] [Thread-128253 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:10:48.217 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:10:48.218 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:10:48.608 [DEBUG] [Thread-128254 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:10:50.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T13:10:50.891 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T13:10:50.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T13:10:51.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 10, 17), 31.54, 11.73, 0.0, 28.25, 25.39, 0, 0, 0, 2, 0, 0),)
2025-12-31T13:10:51.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:10:17
2025-12-31T13:10:51.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T13:10:51.901 [DEBUG] [Thread-128255] [transport.py] [_log()] starting thread (client mode): 0xb6bb3490
2025-12-31T13:10:51.901 [DEBUG] [Thread-128255] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:10:51.923 [DEBUG] [Thread-128255] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T13:10:51.923 [INFO] [Thread-128255] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T13:10:51.926 [DEBUG] [Thread-128255] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:10:51.926 [DEBUG] [Thread-128255] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T13:10:51.926 [DEBUG] [Thread-128255] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:10:51.926 [DEBUG] [Thread-128255] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:10:51.926 [DEBUG] [Thread-128255] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:10:51.926 [DEBUG] [Thread-128255] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:10:51.926 [DEBUG] [Thread-128255] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:10:51.926 [DEBUG] [Thread-128255] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:10:51.926 [DEBUG] [Thread-128255] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:10:51.926 [DEBUG] [Thread-128255] [transport.py] [_log()] client lang: <none>
2025-12-31T13:10:51.926 [DEBUG] [Thread-128255] [transport.py] [_log()] server lang: <none>
2025-12-31T13:10:51.926 [DEBUG] [Thread-128255] [transport.py] [_log()] kex follows: False
2025-12-31T13:10:51.926 [DEBUG] [Thread-128255] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:10:51.926 [DEBUG] [Thread-128255] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:10:51.926 [DEBUG] [Thread-128255] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:10:51.926 [DEBUG] [Thread-128255] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:10:51.927 [DEBUG] [Thread-128255] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:10:51.927 [DEBUG] [Thread-128255] [transport.py] [_log()] Compression: none
2025-12-31T13:10:51.927 [DEBUG] [Thread-128255] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:10:51.944 [DEBUG] [Thread-128255] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:10:51.945 [DEBUG] [Thread-128255] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:10:51.945 [DEBUG] [Thread-128255] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T13:10:51.946 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T13:10:51.946 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:10:51.947 [DEBUG] [Thread-128255] [transport.py] [_log()] userauth is OK
2025-12-31T13:10:51.948 [DEBUG] [Thread-128255] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:10:51.948 [DEBUG] [Thread-128255] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:10:51.948 [DEBUG] [Thread-128255] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T13:10:51.948 [DEBUG] [Thread-128255] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:10:51.972 [INFO] [Thread-128255] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:10:51.973 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:10:52.638 [DEBUG] [Thread-128255] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:10:52.638 [DEBUG] [Thread-128255] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:10:52.639 [DEBUG] [Thread-128255] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T13:10:52.679 [DEBUG] [Thread-128255] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:10:52.679 [DEBUG] [Thread-128255] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:10:52.683 [DEBUG] [Thread-128255] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:10:52.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:10:52.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T13:10:52.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T13:10:52.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T13:10:52.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:10:52.709 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T13:10:52.709 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:10:52.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:10:52.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T13:10:52.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.465420 -999.00  +24.40  12.46     17   -1.60 1 2 1 1 1   888    0 22.63 -154.10 ----- 12.4 12.5 252.1 19.7 29.8 -21.4 29.6 -20.4 29.1 -18.8 29.3 -19.6
2025-12-31T13:10:52.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T13:10:52.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T13:10:52.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.465420
2025-12-31T13:10:52.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T13:10:52.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T13:10:52.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T13:10:52.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T13:10:52.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T13:10:52.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:10:17', tmtdew=31.54, humidity=11.73, cloud=0.0, wind=28.25, temperature=25.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T11:10:12.288', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T13:10:52.712 [DEBUG] [Thread-128255] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:10:52.795 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T13:10:52.807 [DEBUG] [Thread-128258] [transport.py] [_log()] starting thread (client mode): 0xbbfcd3c0
2025-12-31T13:10:52.808 [DEBUG] [Thread-128258] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:10:52.822 [DEBUG] [Thread-128258] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T13:10:52.822 [INFO] [Thread-128258] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T13:10:52.830 [DEBUG] [Thread-128258] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:10:52.830 [DEBUG] [Thread-128258] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T13:10:52.830 [DEBUG] [Thread-128258] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:10:52.830 [DEBUG] [Thread-128258] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:10:52.830 [DEBUG] [Thread-128258] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:10:52.830 [DEBUG] [Thread-128258] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:10:52.830 [DEBUG] [Thread-128258] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:10:52.830 [DEBUG] [Thread-128258] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:10:52.830 [DEBUG] [Thread-128258] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:10:52.830 [DEBUG] [Thread-128258] [transport.py] [_log()] client lang: <none>
2025-12-31T13:10:52.830 [DEBUG] [Thread-128258] [transport.py] [_log()] server lang: <none>
2025-12-31T13:10:52.830 [DEBUG] [Thread-128258] [transport.py] [_log()] kex follows: False
2025-12-31T13:10:52.830 [DEBUG] [Thread-128258] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:10:52.830 [DEBUG] [Thread-128258] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:10:52.830 [DEBUG] [Thread-128258] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:10:52.830 [DEBUG] [Thread-128258] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:10:52.831 [DEBUG] [Thread-128258] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:10:52.831 [DEBUG] [Thread-128258] [transport.py] [_log()] Compression: none
2025-12-31T13:10:52.831 [DEBUG] [Thread-128258] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:10:52.888 [DEBUG] [Thread-128258] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:10:52.889 [DEBUG] [Thread-128258] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:10:52.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T13:10:52.890 [DEBUG] [Thread-128258] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T13:10:52.891 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:10:52.944 [DEBUG] [Thread-128258] [transport.py] [_log()] userauth is OK
2025-12-31T13:10:52.945 [DEBUG] [Thread-128258] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:10:52.945 [DEBUG] [Thread-128258] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:10:52.945 [DEBUG] [Thread-128258] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T13:10:52.945 [DEBUG] [Thread-128258] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:10:52.964 [INFO] [Thread-128258] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:10:52.965 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T13:10:52.965 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:10:53.810 [DEBUG] [Thread-128258] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:10:53.810 [DEBUG] [Thread-128258] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:10:53.858 [DEBUG] [Thread-128258] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:10:53.858 [DEBUG] [Thread-128258] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:10:53.866 [DEBUG] [Thread-128258] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:10:53.875 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:10:53.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-12-31T13:10:53.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T13:10:53.893 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:10:53.894 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:10:53.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:10:53.902 [DEBUG] [Thread-128258] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:11:03.641 [DEBUG] [Thread-128260 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:11:14.544 [DEBUG] [Thread-128261 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:11:18.685 [DEBUG] [Thread-128262 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:11:23.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T13:11:23.925 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T13:11:23.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T13:11:24.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 11, 21), 31.15, 12.28, 0.0, 17.84, 25.09, 0, 0, 0, 2, 0, 0),)
2025-12-31T13:11:24.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:11:21
2025-12-31T13:11:24.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T13:11:24.896 [DEBUG] [Thread-128263] [transport.py] [_log()] starting thread (client mode): 0xb9558ac0
2025-12-31T13:11:24.896 [DEBUG] [Thread-128263] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:11:24.917 [DEBUG] [Thread-128263] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T13:11:24.917 [INFO] [Thread-128263] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T13:11:24.919 [DEBUG] [Thread-128263] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:11:24.920 [DEBUG] [Thread-128263] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T13:11:24.920 [DEBUG] [Thread-128263] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:11:24.920 [DEBUG] [Thread-128263] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:11:24.920 [DEBUG] [Thread-128263] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:11:24.920 [DEBUG] [Thread-128263] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:11:24.920 [DEBUG] [Thread-128263] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:11:24.920 [DEBUG] [Thread-128263] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:11:24.920 [DEBUG] [Thread-128263] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:11:24.920 [DEBUG] [Thread-128263] [transport.py] [_log()] client lang: <none>
2025-12-31T13:11:24.920 [DEBUG] [Thread-128263] [transport.py] [_log()] server lang: <none>
2025-12-31T13:11:24.920 [DEBUG] [Thread-128263] [transport.py] [_log()] kex follows: False
2025-12-31T13:11:24.920 [DEBUG] [Thread-128263] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:11:24.920 [DEBUG] [Thread-128263] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:11:24.920 [DEBUG] [Thread-128263] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:11:24.920 [DEBUG] [Thread-128263] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:11:24.920 [DEBUG] [Thread-128263] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:11:24.920 [DEBUG] [Thread-128263] [transport.py] [_log()] Compression: none
2025-12-31T13:11:24.920 [DEBUG] [Thread-128263] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:11:24.937 [DEBUG] [Thread-128263] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:11:24.937 [DEBUG] [Thread-128263] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:11:24.938 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T13:11:24.938 [DEBUG] [Thread-128263] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T13:11:24.939 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:11:24.941 [DEBUG] [Thread-128263] [transport.py] [_log()] userauth is OK
2025-12-31T13:11:24.942 [DEBUG] [Thread-128263] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:11:24.942 [DEBUG] [Thread-128263] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:11:24.942 [DEBUG] [Thread-128263] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T13:11:24.942 [DEBUG] [Thread-128263] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:11:24.960 [INFO] [Thread-128263] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:11:24.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:11:25.686 [DEBUG] [Thread-128263] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:11:25.686 [DEBUG] [Thread-128263] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:11:25.687 [DEBUG] [Thread-128263] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T13:11:25.728 [DEBUG] [Thread-128263] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:11:25.728 [DEBUG] [Thread-128263] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:11:25.731 [DEBUG] [Thread-128263] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:11:25.744 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:11:25.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T13:11:25.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T13:11:25.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T13:11:25.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:11:25.755 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T13:11:25.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:11:25.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:11:25.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T13:11:25.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.465768 -999.00  +24.70   9.63     17   -1.40 1 2 1 1 1   888    0 23.07 -149.71 ----- 8.3 9.6 260.6 16.9 30.1 -19.9 29.6 -19.7 29.2 -17.8 29.6 -18.1
2025-12-31T13:11:25.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T13:11:25.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T13:11:25.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.465768
2025-12-31T13:11:25.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T13:11:25.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T13:11:25.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T13:11:25.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T13:11:25.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T13:11:25.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:11:21', tmtdew=31.15, humidity=12.28, cloud=0.0, wind=17.84, temperature=25.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T11:10:42.355', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T13:11:25.758 [DEBUG] [Thread-128263] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:11:25.838 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T13:11:25.849 [DEBUG] [Thread-128266] [transport.py] [_log()] starting thread (client mode): 0xb9558cd0
2025-12-31T13:11:25.849 [DEBUG] [Thread-128266] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:11:25.864 [DEBUG] [Thread-128266] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T13:11:25.864 [INFO] [Thread-128266] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T13:11:25.871 [DEBUG] [Thread-128266] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:11:25.871 [DEBUG] [Thread-128266] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T13:11:25.871 [DEBUG] [Thread-128266] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:11:25.872 [DEBUG] [Thread-128266] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:11:25.872 [DEBUG] [Thread-128266] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:11:25.872 [DEBUG] [Thread-128266] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:11:25.872 [DEBUG] [Thread-128266] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:11:25.872 [DEBUG] [Thread-128266] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:11:25.872 [DEBUG] [Thread-128266] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:11:25.872 [DEBUG] [Thread-128266] [transport.py] [_log()] client lang: <none>
2025-12-31T13:11:25.872 [DEBUG] [Thread-128266] [transport.py] [_log()] server lang: <none>
2025-12-31T13:11:25.872 [DEBUG] [Thread-128266] [transport.py] [_log()] kex follows: False
2025-12-31T13:11:25.872 [DEBUG] [Thread-128266] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:11:25.872 [DEBUG] [Thread-128266] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:11:25.872 [DEBUG] [Thread-128266] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:11:25.872 [DEBUG] [Thread-128266] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:11:25.872 [DEBUG] [Thread-128266] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:11:25.873 [DEBUG] [Thread-128266] [transport.py] [_log()] Compression: none
2025-12-31T13:11:25.873 [DEBUG] [Thread-128266] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:11:25.928 [DEBUG] [Thread-128266] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:11:25.929 [DEBUG] [Thread-128266] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:11:25.929 [DEBUG] [Thread-128266] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T13:11:25.929 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T13:11:25.930 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:11:25.984 [DEBUG] [Thread-128266] [transport.py] [_log()] userauth is OK
2025-12-31T13:11:25.985 [DEBUG] [Thread-128266] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:11:25.985 [DEBUG] [Thread-128266] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:11:25.985 [DEBUG] [Thread-128266] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T13:11:25.985 [DEBUG] [Thread-128266] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:11:26.004 [INFO] [Thread-128266] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:11:26.004 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T13:11:26.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:11:26.833 [DEBUG] [Thread-128266] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:11:26.834 [DEBUG] [Thread-128266] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:11:26.882 [DEBUG] [Thread-128266] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:11:26.882 [DEBUG] [Thread-128266] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:11:26.891 [DEBUG] [Thread-128266] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:11:26.900 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:11:26.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T13:11:26.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T13:11:26.919 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:11:26.920 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:11:26.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:11:26.928 [DEBUG] [Thread-128266] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:11:33.722 [DEBUG] [Thread-128268 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:11:48.358 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:11:48.359 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:11:48.771 [DEBUG] [Thread-128269 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:11:56.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T13:11:56.949 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T13:11:56.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T13:11:57.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 11, 53), 31.31, 12.31, 0.0, 15.39, 25.21, 0, 0, 0, 2, 0, 0),)
2025-12-31T13:11:57.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:11:53
2025-12-31T13:11:57.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T13:11:57.918 [DEBUG] [Thread-128270] [transport.py] [_log()] starting thread (client mode): 0xb95b3ca0
2025-12-31T13:11:57.918 [DEBUG] [Thread-128270] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:11:57.933 [DEBUG] [Thread-128270] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T13:11:57.933 [INFO] [Thread-128270] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T13:11:57.936 [DEBUG] [Thread-128270] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:11:57.936 [DEBUG] [Thread-128270] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T13:11:57.936 [DEBUG] [Thread-128270] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:11:57.936 [DEBUG] [Thread-128270] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:11:57.936 [DEBUG] [Thread-128270] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:11:57.936 [DEBUG] [Thread-128270] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:11:57.936 [DEBUG] [Thread-128270] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:11:57.936 [DEBUG] [Thread-128270] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:11:57.937 [DEBUG] [Thread-128270] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:11:57.937 [DEBUG] [Thread-128270] [transport.py] [_log()] client lang: <none>
2025-12-31T13:11:57.937 [DEBUG] [Thread-128270] [transport.py] [_log()] server lang: <none>
2025-12-31T13:11:57.937 [DEBUG] [Thread-128270] [transport.py] [_log()] kex follows: False
2025-12-31T13:11:57.937 [DEBUG] [Thread-128270] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:11:57.937 [DEBUG] [Thread-128270] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:11:57.937 [DEBUG] [Thread-128270] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:11:57.937 [DEBUG] [Thread-128270] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:11:57.937 [DEBUG] [Thread-128270] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:11:57.937 [DEBUG] [Thread-128270] [transport.py] [_log()] Compression: none
2025-12-31T13:11:57.937 [DEBUG] [Thread-128270] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:11:57.956 [DEBUG] [Thread-128270] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:11:57.956 [DEBUG] [Thread-128270] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:11:57.956 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T13:11:57.957 [DEBUG] [Thread-128270] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T13:11:57.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:11:57.958 [DEBUG] [Thread-128270] [transport.py] [_log()] userauth is OK
2025-12-31T13:11:57.959 [DEBUG] [Thread-128270] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:11:57.959 [DEBUG] [Thread-128270] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:11:57.959 [DEBUG] [Thread-128270] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T13:11:57.959 [DEBUG] [Thread-128270] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:11:57.974 [INFO] [Thread-128270] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:11:57.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:11:58.578 [DEBUG] [Thread-128270] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:11:58.578 [DEBUG] [Thread-128270] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:11:58.579 [DEBUG] [Thread-128270] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T13:11:58.619 [DEBUG] [Thread-128270] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:11:58.619 [DEBUG] [Thread-128270] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:11:58.622 [DEBUG] [Thread-128270] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:11:58.636 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:11:58.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T13:11:58.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T13:11:58.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T13:11:58.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:11:58.649 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T13:11:58.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:11:58.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:11:58.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T13:11:58.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.466115 -999.00  +25.20  13.51     17   -1.30 1 2 1 1 1   888    0 22.51 -151.60 ----- 7.9 13.5 269.6 15.8 30.2 -21.0 29.8 -19.8 29.3 -19.0 29.7 -19.6
2025-12-31T13:11:58.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T13:11:58.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T13:11:58.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.466115
2025-12-31T13:11:58.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T13:11:58.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T13:11:58.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T13:11:58.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T13:11:58.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T13:11:58.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:11:53', tmtdew=31.31, humidity=12.31, cloud=0.0, wind=15.39, temperature=25.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T11:11:12.336', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T13:11:58.652 [DEBUG] [Thread-128270] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:11:58.735 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T13:11:58.748 [DEBUG] [Thread-128273] [transport.py] [_log()] starting thread (client mode): 0xbbfcd720
2025-12-31T13:11:58.748 [DEBUG] [Thread-128273] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:11:58.762 [DEBUG] [Thread-128273] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T13:11:58.762 [INFO] [Thread-128273] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T13:11:58.770 [DEBUG] [Thread-128273] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:11:58.771 [DEBUG] [Thread-128273] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T13:11:58.771 [DEBUG] [Thread-128273] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:11:58.771 [DEBUG] [Thread-128273] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:11:58.771 [DEBUG] [Thread-128273] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:11:58.771 [DEBUG] [Thread-128273] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:11:58.771 [DEBUG] [Thread-128273] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:11:58.771 [DEBUG] [Thread-128273] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:11:58.771 [DEBUG] [Thread-128273] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:11:58.772 [DEBUG] [Thread-128273] [transport.py] [_log()] client lang: <none>
2025-12-31T13:11:58.772 [DEBUG] [Thread-128273] [transport.py] [_log()] server lang: <none>
2025-12-31T13:11:58.772 [DEBUG] [Thread-128273] [transport.py] [_log()] kex follows: False
2025-12-31T13:11:58.772 [DEBUG] [Thread-128273] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:11:58.772 [DEBUG] [Thread-128273] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:11:58.772 [DEBUG] [Thread-128273] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:11:58.772 [DEBUG] [Thread-128273] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:11:58.772 [DEBUG] [Thread-128273] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:11:58.773 [DEBUG] [Thread-128273] [transport.py] [_log()] Compression: none
2025-12-31T13:11:58.773 [DEBUG] [Thread-128273] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:11:58.829 [DEBUG] [Thread-128273] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:11:58.830 [DEBUG] [Thread-128273] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:11:58.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T13:11:58.832 [DEBUG] [Thread-128273] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T13:11:58.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:11:58.888 [DEBUG] [Thread-128273] [transport.py] [_log()] userauth is OK
2025-12-31T13:11:58.889 [DEBUG] [Thread-128273] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:11:58.889 [DEBUG] [Thread-128273] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:11:58.890 [DEBUG] [Thread-128273] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T13:11:58.890 [DEBUG] [Thread-128273] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:11:58.909 [INFO] [Thread-128273] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:11:58.909 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T13:11:58.910 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:11:59.741 [DEBUG] [Thread-128273] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:11:59.741 [DEBUG] [Thread-128273] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:11:59.789 [DEBUG] [Thread-128273] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:11:59.789 [DEBUG] [Thread-128273] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:11:59.798 [DEBUG] [Thread-128273] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:11:59.807 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:11:59.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T13:11:59.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T13:11:59.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:11:59.826 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:11:59.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:11:59.835 [DEBUG] [Thread-128273] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:12:03.811 [DEBUG] [Thread-128275 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:12:14.595 [DEBUG] [Thread-128276 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:12:18.872 [DEBUG] [Thread-128277 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:12:29.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T13:12:29.857 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T13:12:29.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T13:12:30.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 12, 25), 31.29, 12.32, 0.0, 19.64, 25.21, 0, 0, 0, 2, 0, 0),)
2025-12-31T13:12:30.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:12:25
2025-12-31T13:12:30.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T13:12:30.845 [DEBUG] [Thread-128278] [transport.py] [_log()] starting thread (client mode): 0xbbfcc970
2025-12-31T13:12:30.845 [DEBUG] [Thread-128278] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:12:30.865 [DEBUG] [Thread-128278] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T13:12:30.865 [INFO] [Thread-128278] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T13:12:30.868 [DEBUG] [Thread-128278] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:12:30.868 [DEBUG] [Thread-128278] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T13:12:30.868 [DEBUG] [Thread-128278] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:12:30.868 [DEBUG] [Thread-128278] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:12:30.868 [DEBUG] [Thread-128278] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:12:30.868 [DEBUG] [Thread-128278] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:12:30.868 [DEBUG] [Thread-128278] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:12:30.869 [DEBUG] [Thread-128278] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:12:30.869 [DEBUG] [Thread-128278] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:12:30.869 [DEBUG] [Thread-128278] [transport.py] [_log()] client lang: <none>
2025-12-31T13:12:30.869 [DEBUG] [Thread-128278] [transport.py] [_log()] server lang: <none>
2025-12-31T13:12:30.869 [DEBUG] [Thread-128278] [transport.py] [_log()] kex follows: False
2025-12-31T13:12:30.869 [DEBUG] [Thread-128278] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:12:30.869 [DEBUG] [Thread-128278] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:12:30.869 [DEBUG] [Thread-128278] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:12:30.869 [DEBUG] [Thread-128278] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:12:30.869 [DEBUG] [Thread-128278] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:12:30.869 [DEBUG] [Thread-128278] [transport.py] [_log()] Compression: none
2025-12-31T13:12:30.869 [DEBUG] [Thread-128278] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:12:30.888 [DEBUG] [Thread-128278] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:12:30.888 [DEBUG] [Thread-128278] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:12:30.889 [DEBUG] [Thread-128278] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T13:12:30.889 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T13:12:30.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:12:30.890 [DEBUG] [Thread-128278] [transport.py] [_log()] userauth is OK
2025-12-31T13:12:30.890 [DEBUG] [Thread-128278] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:12:30.891 [DEBUG] [Thread-128278] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:12:30.891 [DEBUG] [Thread-128278] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T13:12:30.891 [DEBUG] [Thread-128278] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:12:30.904 [INFO] [Thread-128278] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:12:30.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:12:31.669 [DEBUG] [Thread-128278] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:12:31.670 [DEBUG] [Thread-128278] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:12:31.670 [DEBUG] [Thread-128278] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T13:12:31.712 [DEBUG] [Thread-128278] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:12:31.712 [DEBUG] [Thread-128278] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:12:31.715 [DEBUG] [Thread-128278] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:12:31.729 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:12:31.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T13:12:31.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T13:12:31.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T13:12:31.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:12:31.739 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T13:12:31.739 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:12:31.739 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:12:31.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T13:12:31.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.466462 -999.00  +25.20  13.80     17   -1.20 1 2 1 1 1   888    0 23.18 -144.33 ----- 14.2 13.8 269.0 17.3 30.1 -21.9 29.8 -20.4 29.2 -21.6 29.7 -20.6
2025-12-31T13:12:31.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T13:12:31.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T13:12:31.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.466462
2025-12-31T13:12:31.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T13:12:31.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T13:12:31.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T13:12:31.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T13:12:31.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T13:12:31.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:12:25', tmtdew=31.29, humidity=12.32, cloud=0.0, wind=19.64, temperature=25.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T11:11:42.317', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T13:12:31.742 [DEBUG] [Thread-128278] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:12:31.828 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T13:12:31.839 [DEBUG] [Thread-128281] [transport.py] [_log()] starting thread (client mode): 0xb95b3f70
2025-12-31T13:12:31.839 [DEBUG] [Thread-128281] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:12:31.853 [DEBUG] [Thread-128281] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T13:12:31.854 [INFO] [Thread-128281] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T13:12:31.861 [DEBUG] [Thread-128281] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:12:31.861 [DEBUG] [Thread-128281] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T13:12:31.861 [DEBUG] [Thread-128281] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:12:31.861 [DEBUG] [Thread-128281] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:12:31.861 [DEBUG] [Thread-128281] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:12:31.861 [DEBUG] [Thread-128281] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:12:31.861 [DEBUG] [Thread-128281] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:12:31.861 [DEBUG] [Thread-128281] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:12:31.861 [DEBUG] [Thread-128281] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:12:31.862 [DEBUG] [Thread-128281] [transport.py] [_log()] client lang: <none>
2025-12-31T13:12:31.862 [DEBUG] [Thread-128281] [transport.py] [_log()] server lang: <none>
2025-12-31T13:12:31.862 [DEBUG] [Thread-128281] [transport.py] [_log()] kex follows: False
2025-12-31T13:12:31.862 [DEBUG] [Thread-128281] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:12:31.862 [DEBUG] [Thread-128281] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:12:31.862 [DEBUG] [Thread-128281] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:12:31.862 [DEBUG] [Thread-128281] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:12:31.862 [DEBUG] [Thread-128281] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:12:31.862 [DEBUG] [Thread-128281] [transport.py] [_log()] Compression: none
2025-12-31T13:12:31.862 [DEBUG] [Thread-128281] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:12:31.919 [DEBUG] [Thread-128281] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:12:31.920 [DEBUG] [Thread-128281] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:12:31.920 [DEBUG] [Thread-128281] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T13:12:31.920 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T13:12:31.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:12:31.980 [DEBUG] [Thread-128281] [transport.py] [_log()] userauth is OK
2025-12-31T13:12:31.980 [DEBUG] [Thread-128281] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:12:31.980 [DEBUG] [Thread-128281] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:12:31.980 [DEBUG] [Thread-128281] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T13:12:31.980 [DEBUG] [Thread-128281] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:12:32.002 [INFO] [Thread-128281] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:12:32.002 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T13:12:32.003 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:12:32.875 [DEBUG] [Thread-128281] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:12:32.875 [DEBUG] [Thread-128281] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:12:32.922 [DEBUG] [Thread-128281] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:12:32.923 [DEBUG] [Thread-128281] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:12:32.931 [DEBUG] [Thread-128281] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:12:32.940 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:12:32.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T13:12:32.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T13:12:32.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:12:32.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:12:32.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:12:32.965 [DEBUG] [Thread-128281] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:12:33.901 [DEBUG] [Thread-128283 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:12:48.500 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:12:48.501 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:12:48.952 [DEBUG] [Thread-128284 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:13:02.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T13:13:02.984 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T13:13:02.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T13:13:03.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 12, 57), 31.48, 11.87, 0.0, 14.24, 25.28, 0, 0, 0, 2, 0, 0),)
2025-12-31T13:13:03.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:12:57
2025-12-31T13:13:03.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T13:13:03.934 [DEBUG] [Thread-128285] [transport.py] [_log()] starting thread (client mode): 0xb6bb24d0
2025-12-31T13:13:03.935 [DEBUG] [Thread-128285] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:13:03.954 [DEBUG] [Thread-128285] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T13:13:03.954 [INFO] [Thread-128285] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T13:13:03.957 [DEBUG] [Thread-128285] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:13:03.957 [DEBUG] [Thread-128285] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T13:13:03.957 [DEBUG] [Thread-128285] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:13:03.958 [DEBUG] [Thread-128285] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:13:03.958 [DEBUG] [Thread-128285] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:13:03.958 [DEBUG] [Thread-128285] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:13:03.958 [DEBUG] [Thread-128285] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:13:03.958 [DEBUG] [Thread-128285] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:13:03.958 [DEBUG] [Thread-128285] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:13:03.958 [DEBUG] [Thread-128285] [transport.py] [_log()] client lang: <none>
2025-12-31T13:13:03.958 [DEBUG] [Thread-128285] [transport.py] [_log()] server lang: <none>
2025-12-31T13:13:03.958 [DEBUG] [Thread-128285] [transport.py] [_log()] kex follows: False
2025-12-31T13:13:03.958 [DEBUG] [Thread-128285] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:13:03.958 [DEBUG] [Thread-128285] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:13:03.958 [DEBUG] [Thread-128285] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:13:03.958 [DEBUG] [Thread-128285] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:13:03.958 [DEBUG] [Thread-128285] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:13:03.958 [DEBUG] [Thread-128285] [transport.py] [_log()] Compression: none
2025-12-31T13:13:03.959 [DEBUG] [Thread-128285] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:13:03.977 [DEBUG] [Thread-128285] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:13:03.977 [DEBUG] [Thread-128285] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:13:03.978 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T13:13:03.979 [DEBUG] [Thread-128285] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T13:13:03.979 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:13:03.980 [DEBUG] [Thread-128285] [transport.py] [_log()] userauth is OK
2025-12-31T13:13:03.981 [DEBUG] [Thread-128285] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:13:03.981 [DEBUG] [Thread-128285] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:13:03.981 [DEBUG] [Thread-128285] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T13:13:03.981 [DEBUG] [Thread-128285] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:13:03.983 [DEBUG] [Thread-128287 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:13:04.017 [INFO] [Thread-128285] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:13:04.018 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:13:04.645 [DEBUG] [Thread-128285] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:13:04.645 [DEBUG] [Thread-128285] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:13:04.645 [DEBUG] [Thread-128285] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T13:13:04.686 [DEBUG] [Thread-128285] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:13:04.686 [DEBUG] [Thread-128285] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:13:04.689 [DEBUG] [Thread-128285] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:13:04.703 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:13:04.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T13:13:04.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T13:13:04.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T13:13:04.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:13:04.715 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T13:13:04.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:13:04.716 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:13:04.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T13:13:04.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.466809 -999.00  +25.20  11.20     17   -1.30 1 2 1 1 1   888    0 22.41 -154.97 ----- 15.0 11.2 260.8 17.8 30.1 -22.8 29.8 -20.7 29.3 -19.8 29.7 -22.1
2025-12-31T13:13:04.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T13:13:04.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T13:13:04.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.466809
2025-12-31T13:13:04.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T13:13:04.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T13:13:04.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T13:13:04.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T13:13:04.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T13:13:04.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:12:57', tmtdew=31.48, humidity=11.87, cloud=0.0, wind=14.24, temperature=25.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T11:12:12.298', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T13:13:04.718 [DEBUG] [Thread-128285] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:13:04.802 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T13:13:04.814 [DEBUG] [Thread-128289] [transport.py] [_log()] starting thread (client mode): 0xb6bb1510
2025-12-31T13:13:04.814 [DEBUG] [Thread-128289] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:13:04.828 [DEBUG] [Thread-128289] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T13:13:04.828 [INFO] [Thread-128289] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T13:13:04.836 [DEBUG] [Thread-128289] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:13:04.836 [DEBUG] [Thread-128289] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T13:13:04.836 [DEBUG] [Thread-128289] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:13:04.836 [DEBUG] [Thread-128289] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:13:04.836 [DEBUG] [Thread-128289] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:13:04.836 [DEBUG] [Thread-128289] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:13:04.836 [DEBUG] [Thread-128289] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:13:04.837 [DEBUG] [Thread-128289] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:13:04.837 [DEBUG] [Thread-128289] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:13:04.837 [DEBUG] [Thread-128289] [transport.py] [_log()] client lang: <none>
2025-12-31T13:13:04.837 [DEBUG] [Thread-128289] [transport.py] [_log()] server lang: <none>
2025-12-31T13:13:04.837 [DEBUG] [Thread-128289] [transport.py] [_log()] kex follows: False
2025-12-31T13:13:04.837 [DEBUG] [Thread-128289] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:13:04.837 [DEBUG] [Thread-128289] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:13:04.837 [DEBUG] [Thread-128289] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:13:04.838 [DEBUG] [Thread-128289] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:13:04.838 [DEBUG] [Thread-128289] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:13:04.838 [DEBUG] [Thread-128289] [transport.py] [_log()] Compression: none
2025-12-31T13:13:04.838 [DEBUG] [Thread-128289] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:13:04.900 [DEBUG] [Thread-128289] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:13:04.901 [DEBUG] [Thread-128289] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:13:04.901 [DEBUG] [Thread-128289] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T13:13:04.902 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T13:13:04.902 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:13:04.956 [DEBUG] [Thread-128289] [transport.py] [_log()] userauth is OK
2025-12-31T13:13:04.956 [DEBUG] [Thread-128289] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:13:04.956 [DEBUG] [Thread-128289] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:13:04.957 [DEBUG] [Thread-128289] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T13:13:04.957 [DEBUG] [Thread-128289] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:13:04.978 [INFO] [Thread-128289] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:13:04.979 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T13:13:04.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:13:05.827 [DEBUG] [Thread-128289] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:13:05.827 [DEBUG] [Thread-128289] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:13:05.875 [DEBUG] [Thread-128289] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:13:05.875 [DEBUG] [Thread-128289] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:13:05.884 [DEBUG] [Thread-128289] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:13:05.892 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:13:05.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T13:13:05.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T13:13:05.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:13:05.908 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:13:05.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:13:05.915 [DEBUG] [Thread-128289] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:13:14.658 [DEBUG] [Thread-128291 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:13:19.020 [DEBUG] [Thread-128292 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:13:34.072 [DEBUG] [Thread-128293 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:13:35.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T13:13:35.938 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T13:13:35.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T13:13:36.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 13, 29), 31.67, 11.71, 0.0, 16.15, 25.29, 0, 0, 0, 2, 0, 0),)
2025-12-31T13:13:36.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:13:29
2025-12-31T13:13:36.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T13:13:36.954 [DEBUG] [Thread-128294] [transport.py] [_log()] starting thread (client mode): 0xb6bb09d0
2025-12-31T13:13:36.954 [DEBUG] [Thread-128294] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:13:36.975 [DEBUG] [Thread-128294] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T13:13:36.975 [INFO] [Thread-128294] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T13:13:36.978 [DEBUG] [Thread-128294] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:13:36.978 [DEBUG] [Thread-128294] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T13:13:36.978 [DEBUG] [Thread-128294] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:13:36.978 [DEBUG] [Thread-128294] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:13:36.978 [DEBUG] [Thread-128294] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:13:36.978 [DEBUG] [Thread-128294] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:13:36.978 [DEBUG] [Thread-128294] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:13:36.978 [DEBUG] [Thread-128294] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:13:36.978 [DEBUG] [Thread-128294] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:13:36.978 [DEBUG] [Thread-128294] [transport.py] [_log()] client lang: <none>
2025-12-31T13:13:36.978 [DEBUG] [Thread-128294] [transport.py] [_log()] server lang: <none>
2025-12-31T13:13:36.978 [DEBUG] [Thread-128294] [transport.py] [_log()] kex follows: False
2025-12-31T13:13:36.978 [DEBUG] [Thread-128294] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:13:36.978 [DEBUG] [Thread-128294] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:13:36.978 [DEBUG] [Thread-128294] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:13:36.978 [DEBUG] [Thread-128294] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:13:36.978 [DEBUG] [Thread-128294] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:13:36.978 [DEBUG] [Thread-128294] [transport.py] [_log()] Compression: none
2025-12-31T13:13:36.978 [DEBUG] [Thread-128294] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:13:36.993 [DEBUG] [Thread-128294] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:13:36.993 [DEBUG] [Thread-128294] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:13:36.993 [DEBUG] [Thread-128294] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T13:13:36.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T13:13:36.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:13:36.994 [DEBUG] [Thread-128294] [transport.py] [_log()] userauth is OK
2025-12-31T13:13:36.994 [DEBUG] [Thread-128294] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:13:36.994 [DEBUG] [Thread-128294] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:13:36.994 [DEBUG] [Thread-128294] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T13:13:36.994 [DEBUG] [Thread-128294] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:13:37.014 [INFO] [Thread-128294] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:13:37.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:13:37.747 [DEBUG] [Thread-128294] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:13:37.747 [DEBUG] [Thread-128294] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:13:37.747 [DEBUG] [Thread-128294] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T13:13:37.789 [DEBUG] [Thread-128294] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:13:37.789 [DEBUG] [Thread-128294] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:13:37.791 [DEBUG] [Thread-128294] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:13:37.804 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:13:37.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T13:13:37.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T13:13:37.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T13:13:37.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:13:37.809 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T13:13:37.809 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:13:37.809 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:13:37.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T13:13:37.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.467504 -999.00  +25.10  10.08     17   -1.30 1 2 1 1 1   888    0 22.20 -158.06 ----- 9.7 10.1 221.9 15.4 30.0 -23.3 29.7 -21.7 29.2 -20.5 29.7 -21.6
2025-12-31T13:13:37.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T13:13:37.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T13:13:37.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.467504
2025-12-31T13:13:37.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T13:13:37.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T13:13:37.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T13:13:37.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T13:13:37.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T13:13:37.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:13:29', tmtdew=31.67, humidity=11.71, cloud=0.0, wind=16.15, temperature=25.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T11:13:12.346', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T13:13:37.810 [DEBUG] [Thread-128294] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:13:37.881 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T13:13:37.892 [DEBUG] [Thread-128297] [transport.py] [_log()] starting thread (client mode): 0xb6b637c0
2025-12-31T13:13:37.892 [DEBUG] [Thread-128297] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:13:37.907 [DEBUG] [Thread-128297] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T13:13:37.907 [INFO] [Thread-128297] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T13:13:37.915 [DEBUG] [Thread-128297] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:13:37.915 [DEBUG] [Thread-128297] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T13:13:37.915 [DEBUG] [Thread-128297] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:13:37.915 [DEBUG] [Thread-128297] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:13:37.915 [DEBUG] [Thread-128297] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:13:37.915 [DEBUG] [Thread-128297] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:13:37.915 [DEBUG] [Thread-128297] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:13:37.915 [DEBUG] [Thread-128297] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:13:37.915 [DEBUG] [Thread-128297] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:13:37.915 [DEBUG] [Thread-128297] [transport.py] [_log()] client lang: <none>
2025-12-31T13:13:37.915 [DEBUG] [Thread-128297] [transport.py] [_log()] server lang: <none>
2025-12-31T13:13:37.915 [DEBUG] [Thread-128297] [transport.py] [_log()] kex follows: False
2025-12-31T13:13:37.915 [DEBUG] [Thread-128297] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:13:37.915 [DEBUG] [Thread-128297] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:13:37.915 [DEBUG] [Thread-128297] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:13:37.915 [DEBUG] [Thread-128297] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:13:37.915 [DEBUG] [Thread-128297] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:13:37.915 [DEBUG] [Thread-128297] [transport.py] [_log()] Compression: none
2025-12-31T13:13:37.915 [DEBUG] [Thread-128297] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:13:37.970 [DEBUG] [Thread-128297] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:13:37.970 [DEBUG] [Thread-128297] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:13:37.970 [DEBUG] [Thread-128297] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T13:13:37.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T13:13:37.971 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:13:38.031 [DEBUG] [Thread-128297] [transport.py] [_log()] userauth is OK
2025-12-31T13:13:38.031 [DEBUG] [Thread-128297] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:13:38.031 [DEBUG] [Thread-128297] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:13:38.031 [DEBUG] [Thread-128297] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T13:13:38.031 [DEBUG] [Thread-128297] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:13:38.045 [INFO] [Thread-128297] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:13: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-12-31T13:13:38.045 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:13:38.874 [DEBUG] [Thread-128297] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:13:38.874 [DEBUG] [Thread-128297] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:13:38.922 [DEBUG] [Thread-128297] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:13:38.922 [DEBUG] [Thread-128297] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:13:38.930 [DEBUG] [Thread-128297] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:13:38.938 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:13:38.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T13:13:38.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T13:13:38.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:13:38.954 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:13:38.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:13:38.961 [DEBUG] [Thread-128297] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:13:48.641 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:13:48.642 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:13:49.109 [DEBUG] [Thread-128299 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:14:04.161 [DEBUG] [Thread-128300 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:14:08.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T13:14:08.967 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T13:14:08.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T13:14:09.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 14, 1), 31.58, 11.79, 0.0, 13.89, 25.33, 0, 0, 0, 2, 0, 0),)
2025-12-31T13:14:09.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:14:01
2025-12-31T13:14:09.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T13:14:09.927 [DEBUG] [Thread-128301] [transport.py] [_log()] starting thread (client mode): 0xb9558370
2025-12-31T13:14:09.928 [DEBUG] [Thread-128301] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:14:09.948 [DEBUG] [Thread-128301] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T13:14:09.948 [INFO] [Thread-128301] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T13:14:09.951 [DEBUG] [Thread-128301] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:14:09.951 [DEBUG] [Thread-128301] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T13:14:09.951 [DEBUG] [Thread-128301] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:14:09.952 [DEBUG] [Thread-128301] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:14:09.952 [DEBUG] [Thread-128301] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:14:09.952 [DEBUG] [Thread-128301] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:14:09.952 [DEBUG] [Thread-128301] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:14:09.952 [DEBUG] [Thread-128301] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:14:09.952 [DEBUG] [Thread-128301] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:14:09.952 [DEBUG] [Thread-128301] [transport.py] [_log()] client lang: <none>
2025-12-31T13:14:09.952 [DEBUG] [Thread-128301] [transport.py] [_log()] server lang: <none>
2025-12-31T13:14:09.952 [DEBUG] [Thread-128301] [transport.py] [_log()] kex follows: False
2025-12-31T13:14:09.952 [DEBUG] [Thread-128301] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:14:09.952 [DEBUG] [Thread-128301] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:14:09.952 [DEBUG] [Thread-128301] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:14:09.952 [DEBUG] [Thread-128301] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:14:09.952 [DEBUG] [Thread-128301] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:14:09.952 [DEBUG] [Thread-128301] [transport.py] [_log()] Compression: none
2025-12-31T13:14:09.952 [DEBUG] [Thread-128301] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:14:09.969 [DEBUG] [Thread-128301] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:14:09.970 [DEBUG] [Thread-128301] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:14:09.971 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T13:14:09.971 [DEBUG] [Thread-128301] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T13:14:09.972 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:14:09.973 [DEBUG] [Thread-128301] [transport.py] [_log()] userauth is OK
2025-12-31T13:14:09.973 [DEBUG] [Thread-128301] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:14:09.974 [DEBUG] [Thread-128301] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:14:09.974 [DEBUG] [Thread-128301] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T13:14:09.974 [DEBUG] [Thread-128301] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:14:09.991 [INFO] [Thread-128301] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:14:09.992 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:14:10.617 [DEBUG] [Thread-128301] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:14:10.618 [DEBUG] [Thread-128301] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:14:10.618 [DEBUG] [Thread-128301] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T13:14:10.658 [DEBUG] [Thread-128301] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:14:10.658 [DEBUG] [Thread-128301] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:14:10.662 [DEBUG] [Thread-128301] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:14:10.673 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:14:10.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T13:14:10.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T13:14:10.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T13:14:10.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:14:10.685 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T13:14:10.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:14:10.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:14:10.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T13:14:10.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.467851 -999.00  +25.00  15.29     17   -1.40 1 2 1 1 1   888    0 23.10 -145.16 ----- 13.2 15.3 249.9 18.6 29.9 -21.8 29.6 -21.6 29.2 -20.2 29.6 -20.7
2025-12-31T13:14:10.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T13:14:10.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T13:14:10.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.467851
2025-12-31T13:14:10.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T13:14:10.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T13:14:10.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T13:14:10.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T13:14:10.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T13:14:10.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:14:01', tmtdew=31.58, humidity=11.79, cloud=0.0, wind=13.89, temperature=25.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T11:13:42.326', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T13:14:10.688 [DEBUG] [Thread-128301] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:14:10.772 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T13:14:10.784 [DEBUG] [Thread-128304] [transport.py] [_log()] starting thread (client mode): 0xb9559d80
2025-12-31T13:14:10.784 [DEBUG] [Thread-128304] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:14:10.798 [DEBUG] [Thread-128304] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T13:14:10.798 [INFO] [Thread-128304] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T13:14:10.806 [DEBUG] [Thread-128304] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:14:10.807 [DEBUG] [Thread-128304] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T13:14:10.807 [DEBUG] [Thread-128304] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:14:10.807 [DEBUG] [Thread-128304] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:14:10.807 [DEBUG] [Thread-128304] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:14:10.807 [DEBUG] [Thread-128304] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:14:10.807 [DEBUG] [Thread-128304] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:14:10.807 [DEBUG] [Thread-128304] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:14:10.807 [DEBUG] [Thread-128304] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:14:10.807 [DEBUG] [Thread-128304] [transport.py] [_log()] client lang: <none>
2025-12-31T13:14:10.808 [DEBUG] [Thread-128304] [transport.py] [_log()] server lang: <none>
2025-12-31T13:14:10.808 [DEBUG] [Thread-128304] [transport.py] [_log()] kex follows: False
2025-12-31T13:14:10.808 [DEBUG] [Thread-128304] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:14:10.808 [DEBUG] [Thread-128304] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:14:10.808 [DEBUG] [Thread-128304] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:14:10.808 [DEBUG] [Thread-128304] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:14:10.808 [DEBUG] [Thread-128304] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:14:10.809 [DEBUG] [Thread-128304] [transport.py] [_log()] Compression: none
2025-12-31T13:14:10.809 [DEBUG] [Thread-128304] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:14:10.865 [DEBUG] [Thread-128304] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:14:10.866 [DEBUG] [Thread-128304] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:14:10.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T13:14:10.868 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:14:10.868 [DEBUG] [Thread-128304] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T13:14:10.924 [DEBUG] [Thread-128304] [transport.py] [_log()] userauth is OK
2025-12-31T13:14:10.924 [DEBUG] [Thread-128304] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:14:10.925 [DEBUG] [Thread-128304] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:14:10.925 [DEBUG] [Thread-128304] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T13:14:10.925 [DEBUG] [Thread-128304] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:14:10.948 [INFO] [Thread-128304] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:14:10.948 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T13:14:10.949 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:14:11.792 [DEBUG] [Thread-128304] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:14:11.792 [DEBUG] [Thread-128304] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:14:11.840 [DEBUG] [Thread-128304] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:14:11.840 [DEBUG] [Thread-128304] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:14:11.849 [DEBUG] [Thread-128304] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:14:11.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:14:11.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T13:14:11.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T13:14:11.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:14:11.878 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:14:11.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:14:11.886 [DEBUG] [Thread-128304] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:14:14.712 [DEBUG] [Thread-128306 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:14:19.194 [DEBUG] [Thread-128307 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:14:34.235 [DEBUG] [Thread-128308 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:14:41.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T13:14:41.908 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T13:14:41.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T13:14:42.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 14, 34), 32.41, 11.29, 0.0, 23.75, 26.09, 0, 0, 0, 2, 0, 0),)
2025-12-31T13:14:42.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:14:34
2025-12-31T13:14:42.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T13:14:42.887 [DEBUG] [Thread-128309] [transport.py] [_log()] starting thread (client mode): 0xb6b2bdc0
2025-12-31T13:14:42.887 [DEBUG] [Thread-128309] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:14:42.907 [DEBUG] [Thread-128309] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T13:14:42.907 [INFO] [Thread-128309] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T13:14:42.910 [DEBUG] [Thread-128309] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:14:42.910 [DEBUG] [Thread-128309] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T13:14:42.910 [DEBUG] [Thread-128309] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:14:42.910 [DEBUG] [Thread-128309] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:14:42.910 [DEBUG] [Thread-128309] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:14:42.910 [DEBUG] [Thread-128309] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:14:42.910 [DEBUG] [Thread-128309] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:14:42.910 [DEBUG] [Thread-128309] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:14:42.910 [DEBUG] [Thread-128309] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:14:42.910 [DEBUG] [Thread-128309] [transport.py] [_log()] client lang: <none>
2025-12-31T13:14:42.910 [DEBUG] [Thread-128309] [transport.py] [_log()] server lang: <none>
2025-12-31T13:14:42.910 [DEBUG] [Thread-128309] [transport.py] [_log()] kex follows: False
2025-12-31T13:14:42.910 [DEBUG] [Thread-128309] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:14:42.910 [DEBUG] [Thread-128309] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:14:42.910 [DEBUG] [Thread-128309] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:14:42.910 [DEBUG] [Thread-128309] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:14:42.910 [DEBUG] [Thread-128309] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:14:42.910 [DEBUG] [Thread-128309] [transport.py] [_log()] Compression: none
2025-12-31T13:14:42.910 [DEBUG] [Thread-128309] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:14:42.926 [DEBUG] [Thread-128309] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:14:42.926 [DEBUG] [Thread-128309] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:14:42.926 [DEBUG] [Thread-128309] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T13:14:42.927 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T13:14:42.927 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:14:42.928 [DEBUG] [Thread-128309] [transport.py] [_log()] userauth is OK
2025-12-31T13:14:42.929 [DEBUG] [Thread-128309] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:14:42.929 [DEBUG] [Thread-128309] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:14:42.929 [DEBUG] [Thread-128309] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T13:14:42.929 [DEBUG] [Thread-128309] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:14:42.953 [INFO] [Thread-128309] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:14:42.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:14:43.728 [DEBUG] [Thread-128309] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:14:43.728 [DEBUG] [Thread-128309] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:14:43.728 [DEBUG] [Thread-128309] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T13:14:43.769 [DEBUG] [Thread-128309] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:14:43.769 [DEBUG] [Thread-128309] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:14:43.773 [DEBUG] [Thread-128309] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:14:43.784 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:14:43.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T13:14:43.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T13:14:43.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T13:14:43.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:14:43.797 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T13:14:43.797 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:14:43.797 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:14:43.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T13:14:43.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.468198 -999.00  +25.40  22.32     16   -1.70 1 2 1 1 1   888    0 22.93 -144.25 ----- 31.7 22.3 272.6 24.8 29.7 -24.4 29.5 -21.0 29.1 -23.4 29.6 -22.3
2025-12-31T13:14:43.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T13:14:43.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T13:14:43.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.468198
2025-12-31T13:14:43.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T13:14:43.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T13:14:43.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T13:14:43.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T13:14:43.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T13:14:43.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:14:34', tmtdew=32.41, humidity=11.29, cloud=0.0, wind=23.75, temperature=26.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T11:14:12.307', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T13:14:43.800 [DEBUG] [Thread-128309] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:14:43.884 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T13:14:43.894 [DEBUG] [Thread-128312] [transport.py] [_log()] starting thread (client mode): 0xb9559ea0
2025-12-31T13:14:43.894 [DEBUG] [Thread-128312] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:14:43.909 [DEBUG] [Thread-128312] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T13:14:43.909 [INFO] [Thread-128312] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T13:14:43.917 [DEBUG] [Thread-128312] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:14:43.917 [DEBUG] [Thread-128312] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T13:14:43.917 [DEBUG] [Thread-128312] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:14:43.917 [DEBUG] [Thread-128312] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:14:43.917 [DEBUG] [Thread-128312] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:14:43.917 [DEBUG] [Thread-128312] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:14:43.917 [DEBUG] [Thread-128312] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:14:43.917 [DEBUG] [Thread-128312] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:14:43.917 [DEBUG] [Thread-128312] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:14:43.917 [DEBUG] [Thread-128312] [transport.py] [_log()] client lang: <none>
2025-12-31T13:14:43.917 [DEBUG] [Thread-128312] [transport.py] [_log()] server lang: <none>
2025-12-31T13:14:43.917 [DEBUG] [Thread-128312] [transport.py] [_log()] kex follows: False
2025-12-31T13:14:43.917 [DEBUG] [Thread-128312] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:14:43.917 [DEBUG] [Thread-128312] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:14:43.917 [DEBUG] [Thread-128312] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:14:43.917 [DEBUG] [Thread-128312] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:14:43.917 [DEBUG] [Thread-128312] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:14:43.917 [DEBUG] [Thread-128312] [transport.py] [_log()] Compression: none
2025-12-31T13:14:43.917 [DEBUG] [Thread-128312] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:14:43.976 [DEBUG] [Thread-128312] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:14:43.977 [DEBUG] [Thread-128312] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:14:43.977 [DEBUG] [Thread-128312] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T13:14:43.977 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T13:14:43.978 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:14:44.031 [DEBUG] [Thread-128312] [transport.py] [_log()] userauth is OK
2025-12-31T13:14:44.032 [DEBUG] [Thread-128312] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:14:44.032 [DEBUG] [Thread-128312] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:14:44.032 [DEBUG] [Thread-128312] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T13:14:44.032 [DEBUG] [Thread-128312] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:14:44.051 [INFO] [Thread-128312] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:14:44.051 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T13:14:44.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:14:44.870 [DEBUG] [Thread-128312] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:14:44.870 [DEBUG] [Thread-128312] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:14:44.918 [DEBUG] [Thread-128312] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:14:44.918 [DEBUG] [Thread-128312] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:14:44.927 [DEBUG] [Thread-128312] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:14:44.936 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:14:44.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T13:14:44.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T13:14:44.955 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:14:44.955 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:14:44.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:14:44.964 [DEBUG] [Thread-128312] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:14:48.779 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:14:48.780 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:14:49.268 [DEBUG] [Thread-128314 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:15:04.317 [DEBUG] [Thread-128315 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:15:14.761 [DEBUG] [Thread-128316 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:15:14.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T13:15:14.972 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T13:15:14.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-12-31T13:15:15.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 15, 6), 32.32, 11.36, 0.0, 30.93, 25.19, 0, 0, 0, 2, 0, 0),)
2025-12-31T13:15:15.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:15:06
2025-12-31T13:15:15.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T13:15:15.959 [DEBUG] [Thread-128317] [transport.py] [_log()] starting thread (client mode): 0xb6bb0970
2025-12-31T13:15:15.959 [DEBUG] [Thread-128317] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:15:15.980 [DEBUG] [Thread-128317] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T13:15:15.980 [INFO] [Thread-128317] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T13:15:15.983 [DEBUG] [Thread-128317] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:15:15.983 [DEBUG] [Thread-128317] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T13:15:15.983 [DEBUG] [Thread-128317] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:15:15.983 [DEBUG] [Thread-128317] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:15:15.983 [DEBUG] [Thread-128317] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:15:15.983 [DEBUG] [Thread-128317] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:15:15.983 [DEBUG] [Thread-128317] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:15:15.983 [DEBUG] [Thread-128317] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:15:15.983 [DEBUG] [Thread-128317] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:15:15.983 [DEBUG] [Thread-128317] [transport.py] [_log()] client lang: <none>
2025-12-31T13:15:15.983 [DEBUG] [Thread-128317] [transport.py] [_log()] server lang: <none>
2025-12-31T13:15:15.983 [DEBUG] [Thread-128317] [transport.py] [_log()] kex follows: False
2025-12-31T13:15:15.983 [DEBUG] [Thread-128317] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:15:15.983 [DEBUG] [Thread-128317] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:15:15.983 [DEBUG] [Thread-128317] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:15:15.983 [DEBUG] [Thread-128317] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:15:15.983 [DEBUG] [Thread-128317] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:15:15.983 [DEBUG] [Thread-128317] [transport.py] [_log()] Compression: none
2025-12-31T13:15:15.983 [DEBUG] [Thread-128317] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:15:16.001 [DEBUG] [Thread-128317] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:15:16.002 [DEBUG] [Thread-128317] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:15:16.003 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T13:15:16.003 [DEBUG] [Thread-128317] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T13:15:16.004 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:15:16.046 [DEBUG] [Thread-128317] [transport.py] [_log()] userauth is OK
2025-12-31T13:15:16.046 [DEBUG] [Thread-128317] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:15:16.046 [DEBUG] [Thread-128317] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:15:16.046 [DEBUG] [Thread-128317] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T13:15:16.047 [DEBUG] [Thread-128317] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:15:16.078 [INFO] [Thread-128317] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:15:16.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:15:16.701 [DEBUG] [Thread-128317] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:15:16.701 [DEBUG] [Thread-128317] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:15:16.702 [DEBUG] [Thread-128317] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T13:15:16.742 [DEBUG] [Thread-128317] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:15:16.742 [DEBUG] [Thread-128317] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:15:16.746 [DEBUG] [Thread-128317] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:15:16.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:15:16.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T13:15:16.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T13:15:16.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T13:15:16.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:15:16.774 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T13:15:16.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:15:16.775 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:15:16.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T13:15:16.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.468545 -999.00  +24.80  26.06     16   -2.10 1 1 1 1 1   888    0 22.95 -134.67 ----- 26.0 26.1 272.0 34.3 29.4 -24.2 29.3 -22.8 28.5 -26.4 29.2 -22.8
2025-12-31T13:15:16.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T13:15:16.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T13:15:16.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.468545
2025-12-31T13:15:16.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T13:15:16.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T13:15:16.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T13:15:16.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T13:15:16.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T13:15:16.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:15:06', tmtdew=32.32, humidity=11.36, cloud=0.0, wind=30.93, temperature=25.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T11:14:42.288', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T13:15:16.778 [DEBUG] [Thread-128317] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:15:16.861 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T13:15:16.873 [DEBUG] [Thread-128320] [transport.py] [_log()] starting thread (client mode): 0xb6b14490
2025-12-31T13:15:16.873 [DEBUG] [Thread-128320] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:15:16.887 [DEBUG] [Thread-128320] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T13:15:16.887 [INFO] [Thread-128320] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T13:15:16.895 [DEBUG] [Thread-128320] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:15:16.895 [DEBUG] [Thread-128320] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T13:15:16.895 [DEBUG] [Thread-128320] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:15:16.895 [DEBUG] [Thread-128320] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:15:16.895 [DEBUG] [Thread-128320] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:15:16.895 [DEBUG] [Thread-128320] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:15:16.895 [DEBUG] [Thread-128320] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:15:16.896 [DEBUG] [Thread-128320] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:15:16.896 [DEBUG] [Thread-128320] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:15:16.896 [DEBUG] [Thread-128320] [transport.py] [_log()] client lang: <none>
2025-12-31T13:15:16.896 [DEBUG] [Thread-128320] [transport.py] [_log()] server lang: <none>
2025-12-31T13:15:16.896 [DEBUG] [Thread-128320] [transport.py] [_log()] kex follows: False
2025-12-31T13:15:16.896 [DEBUG] [Thread-128320] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:15:16.896 [DEBUG] [Thread-128320] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:15:16.896 [DEBUG] [Thread-128320] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:15:16.896 [DEBUG] [Thread-128320] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:15:16.896 [DEBUG] [Thread-128320] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:15:16.896 [DEBUG] [Thread-128320] [transport.py] [_log()] Compression: none
2025-12-31T13:15:16.896 [DEBUG] [Thread-128320] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:15:16.951 [DEBUG] [Thread-128320] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:15:16.952 [DEBUG] [Thread-128320] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:15:16.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T13:15:16.953 [DEBUG] [Thread-128320] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T13:15:16.954 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:15:17.012 [DEBUG] [Thread-128320] [transport.py] [_log()] userauth is OK
2025-12-31T13:15:17.012 [DEBUG] [Thread-128320] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:15:17.013 [DEBUG] [Thread-128320] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:15:17.013 [DEBUG] [Thread-128320] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T13:15:17.013 [DEBUG] [Thread-128320] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:15:17.031 [INFO] [Thread-128320] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:15:17.032 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T13:15:17.032 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:15:17.835 [DEBUG] [Thread-128320] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:15:17.836 [DEBUG] [Thread-128320] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:15:17.884 [DEBUG] [Thread-128320] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:15:17.884 [DEBUG] [Thread-128320] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:15:17.894 [DEBUG] [Thread-128320] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:15:17.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:15:17.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T13:15:17.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-12-31T13:15:17.922 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:15:17.923 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:15:17.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:15:17.931 [DEBUG] [Thread-128320] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:15:19.355 [DEBUG] [Thread-128322 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:15:34.413 [DEBUG] [Thread-128323 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:15:47.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T13:15:47.930 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T13:15:47.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T13:15:48.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 15, 38), 32.2, 11.31, 0.0, 22.37, 25.33, 0, 0, 0, 2, 0, 0),)
2025-12-31T13:15:48.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:15:38
2025-12-31T13:15:48.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T13:15:48.908 [DEBUG] [Thread-128324] [transport.py] [_log()] starting thread (client mode): 0xb6b16b00
2025-12-31T13:15:48.908 [DEBUG] [Thread-128324] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:15:48.921 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:15:48.922 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:15:48.928 [DEBUG] [Thread-128324] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T13:15:48.928 [INFO] [Thread-128324] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T13:15:48.929 [DEBUG] [Thread-128324] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:15:48.929 [DEBUG] [Thread-128324] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T13:15:48.929 [DEBUG] [Thread-128324] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:15:48.929 [DEBUG] [Thread-128324] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:15:48.929 [DEBUG] [Thread-128324] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:15:48.929 [DEBUG] [Thread-128324] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:15:48.929 [DEBUG] [Thread-128324] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:15:48.930 [DEBUG] [Thread-128324] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:15:48.930 [DEBUG] [Thread-128324] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:15:48.930 [DEBUG] [Thread-128324] [transport.py] [_log()] client lang: <none>
2025-12-31T13:15:48.930 [DEBUG] [Thread-128324] [transport.py] [_log()] server lang: <none>
2025-12-31T13:15:48.930 [DEBUG] [Thread-128324] [transport.py] [_log()] kex follows: False
2025-12-31T13:15:48.930 [DEBUG] [Thread-128324] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:15:48.930 [DEBUG] [Thread-128324] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:15:48.930 [DEBUG] [Thread-128324] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:15:48.930 [DEBUG] [Thread-128324] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:15:48.930 [DEBUG] [Thread-128324] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:15:48.930 [DEBUG] [Thread-128324] [transport.py] [_log()] Compression: none
2025-12-31T13:15:48.930 [DEBUG] [Thread-128324] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:15:48.946 [DEBUG] [Thread-128324] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:15:48.946 [DEBUG] [Thread-128324] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:15:48.947 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T13:15:48.947 [DEBUG] [Thread-128324] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T13:15:48.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:15:48.949 [DEBUG] [Thread-128324] [transport.py] [_log()] userauth is OK
2025-12-31T13:15:48.949 [DEBUG] [Thread-128324] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:15:48.949 [DEBUG] [Thread-128324] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:15:48.950 [DEBUG] [Thread-128324] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T13:15:48.950 [DEBUG] [Thread-128324] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:15:48.964 [INFO] [Thread-128324] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:15:48.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:15:49.447 [DEBUG] [Thread-128326 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:15:49.606 [DEBUG] [Thread-128324] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:15:49.606 [DEBUG] [Thread-128324] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:15:49.606 [DEBUG] [Thread-128324] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T13:15:49.647 [DEBUG] [Thread-128324] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:15:49.648 [DEBUG] [Thread-128324] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:15:49.651 [DEBUG] [Thread-128324] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:15:49.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:15:49.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T13:15:49.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T13:15:49.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T13:15:49.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:15:49.671 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T13:15:49.672 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:15:49.672 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:15:49.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T13:15:49.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.468892 -999.00  +24.70  21.48     17   -1.90 1 1 1 1 1   888    0 23.11 -138.18 ----- 22.5 21.5 272.8 30.7 29.4 -22.9 29.2 -21.8 28.6 -25.0 29.2 -21.0
2025-12-31T13:15:49.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T13:15:49.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T13:15:49.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.468892
2025-12-31T13:15:49.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T13:15:49.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T13:15:49.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T13:15:49.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T13:15:49.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T13:15:49.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:15:38', tmtdew=32.2, humidity=11.31, cloud=0.0, wind=22.37, temperature=25.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T11:15:12.269', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T13:15:49.674 [DEBUG] [Thread-128324] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:15:49.762 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T13:15:49.774 [DEBUG] [Thread-128328] [transport.py] [_log()] starting thread (client mode): 0xb6b29fc0
2025-12-31T13:15:49.774 [DEBUG] [Thread-128328] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:15:49.789 [DEBUG] [Thread-128328] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T13:15:49.789 [INFO] [Thread-128328] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T13:15:49.797 [DEBUG] [Thread-128328] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:15:49.797 [DEBUG] [Thread-128328] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T13:15:49.797 [DEBUG] [Thread-128328] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:15:49.798 [DEBUG] [Thread-128328] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:15:49.798 [DEBUG] [Thread-128328] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:15:49.798 [DEBUG] [Thread-128328] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:15:49.798 [DEBUG] [Thread-128328] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:15:49.798 [DEBUG] [Thread-128328] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:15:49.798 [DEBUG] [Thread-128328] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:15:49.798 [DEBUG] [Thread-128328] [transport.py] [_log()] client lang: <none>
2025-12-31T13:15:49.798 [DEBUG] [Thread-128328] [transport.py] [_log()] server lang: <none>
2025-12-31T13:15:49.798 [DEBUG] [Thread-128328] [transport.py] [_log()] kex follows: False
2025-12-31T13:15:49.799 [DEBUG] [Thread-128328] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:15:49.799 [DEBUG] [Thread-128328] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:15:49.799 [DEBUG] [Thread-128328] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:15:49.799 [DEBUG] [Thread-128328] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:15:49.799 [DEBUG] [Thread-128328] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:15:49.799 [DEBUG] [Thread-128328] [transport.py] [_log()] Compression: none
2025-12-31T13:15:49.799 [DEBUG] [Thread-128328] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:15:49.856 [DEBUG] [Thread-128328] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:15:49.857 [DEBUG] [Thread-128328] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:15:49.857 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T13:15:49.858 [DEBUG] [Thread-128328] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T13:15:49.859 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:15:49.912 [DEBUG] [Thread-128328] [transport.py] [_log()] userauth is OK
2025-12-31T13:15:49.912 [DEBUG] [Thread-128328] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:15:49.913 [DEBUG] [Thread-128328] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:15:49.913 [DEBUG] [Thread-128328] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T13:15:49.913 [DEBUG] [Thread-128328] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:15:49.932 [INFO] [Thread-128328] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:15:49.932 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T13:15:49.933 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:15:50.770 [DEBUG] [Thread-128328] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:15:50.770 [DEBUG] [Thread-128328] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:15:50.818 [DEBUG] [Thread-128328] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:15:50.818 [DEBUG] [Thread-128328] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:15:50.828 [DEBUG] [Thread-128328] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:15:50.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:15:50.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T13:15:50.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T13:15:50.856 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:15:50.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:15:50.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:15:50.865 [DEBUG] [Thread-128328] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:16:04.486 [DEBUG] [Thread-128330 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:16:14.806 [DEBUG] [Thread-128331 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:16:19.543 [DEBUG] [Thread-128332 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:16:20.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T13:16:20.887 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T13:16:20.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T13:16:21.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 16, 10), 32.45, 11.11, 0.0, 22.28, 25.31, 0, 0, 0, 2, 0, 0),)
2025-12-31T13:16:21.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:16:10
2025-12-31T13:16:21.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T13:16:21.860 [DEBUG] [Thread-128333] [transport.py] [_log()] starting thread (client mode): 0xb6ba1660
2025-12-31T13:16:21.861 [DEBUG] [Thread-128333] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:16:21.879 [DEBUG] [Thread-128333] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T13:16:21.879 [INFO] [Thread-128333] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T13:16:21.884 [DEBUG] [Thread-128333] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:16:21.885 [DEBUG] [Thread-128333] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T13:16:21.885 [DEBUG] [Thread-128333] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:16:21.885 [DEBUG] [Thread-128333] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:16:21.885 [DEBUG] [Thread-128333] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:16:21.885 [DEBUG] [Thread-128333] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:16:21.885 [DEBUG] [Thread-128333] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:16:21.885 [DEBUG] [Thread-128333] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:16:21.885 [DEBUG] [Thread-128333] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:16:21.885 [DEBUG] [Thread-128333] [transport.py] [_log()] client lang: <none>
2025-12-31T13:16:21.885 [DEBUG] [Thread-128333] [transport.py] [_log()] server lang: <none>
2025-12-31T13:16:21.885 [DEBUG] [Thread-128333] [transport.py] [_log()] kex follows: False
2025-12-31T13:16:21.885 [DEBUG] [Thread-128333] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:16:21.885 [DEBUG] [Thread-128333] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:16:21.885 [DEBUG] [Thread-128333] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:16:21.885 [DEBUG] [Thread-128333] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:16:21.886 [DEBUG] [Thread-128333] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:16:21.886 [DEBUG] [Thread-128333] [transport.py] [_log()] Compression: none
2025-12-31T13:16:21.886 [DEBUG] [Thread-128333] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:16:21.901 [DEBUG] [Thread-128333] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:16:21.902 [DEBUG] [Thread-128333] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:16:21.902 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T13:16:21.903 [DEBUG] [Thread-128333] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T13:16:21.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:16:21.905 [DEBUG] [Thread-128333] [transport.py] [_log()] userauth is OK
2025-12-31T13:16:21.905 [DEBUG] [Thread-128333] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:16:21.905 [DEBUG] [Thread-128333] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:16:21.905 [DEBUG] [Thread-128333] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T13:16:21.905 [DEBUG] [Thread-128333] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:16:21.923 [INFO] [Thread-128333] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:16:21.923 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:16:22.636 [DEBUG] [Thread-128333] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:16:22.637 [DEBUG] [Thread-128333] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:16:22.637 [DEBUG] [Thread-128333] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T13:16:22.678 [DEBUG] [Thread-128333] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:16:22.678 [DEBUG] [Thread-128333] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:16:22.682 [DEBUG] [Thread-128333] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:16:22.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:16:22.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T13:16:22.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T13:16:22.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T13:16:22.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:16:22.708 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T13:16:22.708 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:16:22.708 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:16:22.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T13:16:22.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.469240 -999.00  +24.60  26.74     16   -2.30 1 2 1 1 1   888    0 23.08 -132.45 ----- 32.1 26.7 308.8 39.8 29.4 -23.3 29.2 -23.2 28.5 -21.1 29.1 -21.1
2025-12-31T13:16:22.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T13:16:22.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T13:16:22.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.469240
2025-12-31T13:16:22.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T13:16:22.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T13:16:22.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T13:16:22.710 [DEBUG] [Thread-128333] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:16:22.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T13:16:22.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T13:16:22.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:16:10', tmtdew=32.45, humidity=11.11, cloud=0.0, wind=22.28, temperature=25.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T11:15:42.336', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T13:16:22.795 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T13:16:22.807 [DEBUG] [Thread-128336] [transport.py] [_log()] starting thread (client mode): 0xb6b62770
2025-12-31T13:16:22.807 [DEBUG] [Thread-128336] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:16:22.821 [DEBUG] [Thread-128336] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T13:16:22.821 [INFO] [Thread-128336] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T13:16:22.829 [DEBUG] [Thread-128336] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:16:22.829 [DEBUG] [Thread-128336] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T13:16:22.830 [DEBUG] [Thread-128336] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:16:22.830 [DEBUG] [Thread-128336] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:16:22.830 [DEBUG] [Thread-128336] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:16:22.830 [DEBUG] [Thread-128336] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:16:22.830 [DEBUG] [Thread-128336] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:16:22.830 [DEBUG] [Thread-128336] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:16:22.830 [DEBUG] [Thread-128336] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:16:22.830 [DEBUG] [Thread-128336] [transport.py] [_log()] client lang: <none>
2025-12-31T13:16:22.830 [DEBUG] [Thread-128336] [transport.py] [_log()] server lang: <none>
2025-12-31T13:16:22.831 [DEBUG] [Thread-128336] [transport.py] [_log()] kex follows: False
2025-12-31T13:16:22.831 [DEBUG] [Thread-128336] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:16:22.831 [DEBUG] [Thread-128336] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:16:22.831 [DEBUG] [Thread-128336] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:16:22.831 [DEBUG] [Thread-128336] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:16:22.831 [DEBUG] [Thread-128336] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:16:22.831 [DEBUG] [Thread-128336] [transport.py] [_log()] Compression: none
2025-12-31T13:16:22.832 [DEBUG] [Thread-128336] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:16:22.886 [DEBUG] [Thread-128336] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:16:22.887 [DEBUG] [Thread-128336] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:16:22.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T13:16:22.888 [DEBUG] [Thread-128336] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T13:16:22.889 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:16:22.943 [DEBUG] [Thread-128336] [transport.py] [_log()] userauth is OK
2025-12-31T13:16:22.944 [DEBUG] [Thread-128336] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:16:22.944 [DEBUG] [Thread-128336] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:16:22.944 [DEBUG] [Thread-128336] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T13:16:22.944 [DEBUG] [Thread-128336] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:16:22.963 [INFO] [Thread-128336] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:16:22.964 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T13:16:22.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:16:23.796 [DEBUG] [Thread-128336] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:16:23.797 [DEBUG] [Thread-128336] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:16:23.846 [DEBUG] [Thread-128336] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:16:23.846 [DEBUG] [Thread-128336] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:16:23.855 [DEBUG] [Thread-128336] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:16:23.864 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:16:23.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-12-31T13:16:23.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-12-31T13:16:23.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:16:23.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:16:23.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:16:23.891 [DEBUG] [Thread-128336] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:16:34.584 [DEBUG] [Thread-128338 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:16:49.062 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:16:49.063 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:16:49.636 [DEBUG] [Thread-128339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:16:53.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T13:16:53.895 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T13:16:53.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T13:16:54.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 16, 42), 32.96, 10.61, 0.0, 28.62, 25.38, 0, 0, 0, 2, 0, 0),)
2025-12-31T13:16:54.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:16:42
2025-12-31T13:16:54.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T13:16:54.891 [DEBUG] [Thread-128340] [transport.py] [_log()] starting thread (client mode): 0xb6b15390
2025-12-31T13:16:54.892 [DEBUG] [Thread-128340] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:16:54.912 [DEBUG] [Thread-128340] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T13:16:54.912 [INFO] [Thread-128340] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T13:16:54.913 [DEBUG] [Thread-128340] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:16:54.913 [DEBUG] [Thread-128340] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T13:16:54.913 [DEBUG] [Thread-128340] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:16:54.913 [DEBUG] [Thread-128340] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:16:54.913 [DEBUG] [Thread-128340] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:16:54.913 [DEBUG] [Thread-128340] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:16:54.913 [DEBUG] [Thread-128340] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:16:54.913 [DEBUG] [Thread-128340] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:16:54.913 [DEBUG] [Thread-128340] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:16:54.913 [DEBUG] [Thread-128340] [transport.py] [_log()] client lang: <none>
2025-12-31T13:16:54.913 [DEBUG] [Thread-128340] [transport.py] [_log()] server lang: <none>
2025-12-31T13:16:54.913 [DEBUG] [Thread-128340] [transport.py] [_log()] kex follows: False
2025-12-31T13:16:54.913 [DEBUG] [Thread-128340] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:16:54.913 [DEBUG] [Thread-128340] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:16:54.913 [DEBUG] [Thread-128340] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:16:54.913 [DEBUG] [Thread-128340] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:16:54.914 [DEBUG] [Thread-128340] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:16:54.914 [DEBUG] [Thread-128340] [transport.py] [_log()] Compression: none
2025-12-31T13:16:54.914 [DEBUG] [Thread-128340] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:16:54.921 [DEBUG] [Thread-128340] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:16:54.921 [DEBUG] [Thread-128340] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:16:54.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T13:16:54.921 [DEBUG] [Thread-128340] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T13:16:54.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:16:54.922 [DEBUG] [Thread-128340] [transport.py] [_log()] userauth is OK
2025-12-31T13:16:54.922 [DEBUG] [Thread-128340] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:16:54.922 [DEBUG] [Thread-128340] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:16:54.922 [DEBUG] [Thread-128340] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T13:16:54.922 [DEBUG] [Thread-128340] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:16:54.934 [INFO] [Thread-128340] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:16:54.934 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:16:55.577 [DEBUG] [Thread-128340] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:16:55.577 [DEBUG] [Thread-128340] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:16:55.577 [DEBUG] [Thread-128340] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T13:16:55.618 [DEBUG] [Thread-128340] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:16:55.618 [DEBUG] [Thread-128340] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:16:55.620 [DEBUG] [Thread-128340] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:16:55.632 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:16:55.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T13:16:55.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T13:16:55.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T13:16:55.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:16:55.637 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T13:16:55.637 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:16:55.637 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:16:55.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T13:16:55.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.469587 -999.00  +24.40  28.58     16   -2.30 1 1 1 1 1   888    0 23.31 -119.63 ----- 31.8 28.6 298.4 41.3 29.2 -23.2 29.0 -22.8 28.4 -23.4 28.9 -21.1
2025-12-31T13:16:55.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T13:16:55.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T13:16:55.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.469587
2025-12-31T13:16:55.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T13:16:55.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T13:16:55.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T13:16:55.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T13:16:55.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T13:16:55.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:16:42', tmtdew=32.96, humidity=10.61, cloud=0.0, wind=28.62, temperature=25.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T11:16:12.317', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T13:16:55.638 [DEBUG] [Thread-128340] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:16:55.712 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T13:16:55.724 [DEBUG] [Thread-128343] [transport.py] [_log()] starting thread (client mode): 0xb6b14d00
2025-12-31T13:16:55.724 [DEBUG] [Thread-128343] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:16:55.739 [DEBUG] [Thread-128343] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T13:16:55.739 [INFO] [Thread-128343] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T13:16:55.746 [DEBUG] [Thread-128343] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:16:55.746 [DEBUG] [Thread-128343] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T13:16:55.746 [DEBUG] [Thread-128343] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:16:55.746 [DEBUG] [Thread-128343] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:16:55.746 [DEBUG] [Thread-128343] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:16:55.746 [DEBUG] [Thread-128343] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:16:55.746 [DEBUG] [Thread-128343] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:16:55.746 [DEBUG] [Thread-128343] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:16:55.746 [DEBUG] [Thread-128343] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:16:55.746 [DEBUG] [Thread-128343] [transport.py] [_log()] client lang: <none>
2025-12-31T13:16:55.746 [DEBUG] [Thread-128343] [transport.py] [_log()] server lang: <none>
2025-12-31T13:16:55.747 [DEBUG] [Thread-128343] [transport.py] [_log()] kex follows: False
2025-12-31T13:16:55.747 [DEBUG] [Thread-128343] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:16:55.747 [DEBUG] [Thread-128343] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:16:55.747 [DEBUG] [Thread-128343] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:16:55.747 [DEBUG] [Thread-128343] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:16:55.747 [DEBUG] [Thread-128343] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:16:55.747 [DEBUG] [Thread-128343] [transport.py] [_log()] Compression: none
2025-12-31T13:16:55.747 [DEBUG] [Thread-128343] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:16:55.801 [DEBUG] [Thread-128343] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:16:55.801 [DEBUG] [Thread-128343] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:16:55.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T13:16:55.802 [DEBUG] [Thread-128343] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T13:16:55.802 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:16:55.859 [DEBUG] [Thread-128343] [transport.py] [_log()] userauth is OK
2025-12-31T13:16:55.859 [DEBUG] [Thread-128343] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:16:55.859 [DEBUG] [Thread-128343] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:16:55.859 [DEBUG] [Thread-128343] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T13:16:55.859 [DEBUG] [Thread-128343] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:16:55.876 [INFO] [Thread-128343] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:16:55.876 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T13:16:55.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:16:56.709 [DEBUG] [Thread-128343] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:16:56.709 [DEBUG] [Thread-128343] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:16:56.760 [DEBUG] [Thread-128343] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:16:56.760 [DEBUG] [Thread-128343] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:16:56.771 [DEBUG] [Thread-128343] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:16:56.783 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:16:56.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T13:16:56.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T13:16:56.803 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:16:56.803 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:16:56.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:16:56.814 [DEBUG] [Thread-128343] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:17:04.668 [DEBUG] [Thread-128345 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:17:14.852 [DEBUG] [Thread-128346 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:17:19.722 [DEBUG] [Thread-128347 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:17:26.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T13:17:26.805 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T13:17:26.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T13:17:27.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 17, 14), 32.95, 10.6, 0.0, 32.45, 25.24, 0, 0, 0, 2, 0, 0),)
2025-12-31T13:17:27.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:17:14
2025-12-31T13:17:27.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T13:17:27.787 [DEBUG] [Thread-128348] [transport.py] [_log()] starting thread (client mode): 0xb6b2b0a0
2025-12-31T13:17:27.788 [DEBUG] [Thread-128348] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:17:27.807 [DEBUG] [Thread-128348] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T13:17:27.807 [INFO] [Thread-128348] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T13:17:27.810 [DEBUG] [Thread-128348] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:17:27.811 [DEBUG] [Thread-128348] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T13:17:27.811 [DEBUG] [Thread-128348] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:17:27.811 [DEBUG] [Thread-128348] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:17:27.811 [DEBUG] [Thread-128348] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:17:27.811 [DEBUG] [Thread-128348] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:17:27.811 [DEBUG] [Thread-128348] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:17:27.811 [DEBUG] [Thread-128348] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:17:27.811 [DEBUG] [Thread-128348] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:17:27.811 [DEBUG] [Thread-128348] [transport.py] [_log()] client lang: <none>
2025-12-31T13:17:27.811 [DEBUG] [Thread-128348] [transport.py] [_log()] server lang: <none>
2025-12-31T13:17:27.811 [DEBUG] [Thread-128348] [transport.py] [_log()] kex follows: False
2025-12-31T13:17:27.811 [DEBUG] [Thread-128348] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:17:27.811 [DEBUG] [Thread-128348] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:17:27.811 [DEBUG] [Thread-128348] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:17:27.811 [DEBUG] [Thread-128348] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:17:27.811 [DEBUG] [Thread-128348] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:17:27.811 [DEBUG] [Thread-128348] [transport.py] [_log()] Compression: none
2025-12-31T13:17:27.811 [DEBUG] [Thread-128348] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:17:27.829 [DEBUG] [Thread-128348] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:17:27.829 [DEBUG] [Thread-128348] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:17:27.829 [DEBUG] [Thread-128348] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T13:17:27.830 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T13:17:27.830 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:17:27.832 [DEBUG] [Thread-128348] [transport.py] [_log()] userauth is OK
2025-12-31T13:17:27.832 [DEBUG] [Thread-128348] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:17:27.832 [DEBUG] [Thread-128348] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:17:27.832 [DEBUG] [Thread-128348] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T13:17:27.832 [DEBUG] [Thread-128348] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:17:27.867 [INFO] [Thread-128348] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:17:27.867 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:17:28.627 [DEBUG] [Thread-128348] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:17:28.627 [DEBUG] [Thread-128348] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:17:28.627 [DEBUG] [Thread-128348] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T13:17:28.668 [DEBUG] [Thread-128348] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:17:28.668 [DEBUG] [Thread-128348] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:17:28.671 [DEBUG] [Thread-128348] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:17:28.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:17:28.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T13:17:28.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T13:17:28.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T13:17:28.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:17:28.689 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T13:17:28.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:17:28.690 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:17:28.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T13:17:28.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.469934 -999.00  +24.30  28.55     16   -2.40 1 2 1 1 1   888    0 23.82 -115.61 ----- 27.1 28.6 296.6 33.4 29.2 -23.3 28.9 -22.8 28.4 -20.8 28.9 -21.0
2025-12-31T13:17:28.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T13:17:28.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T13:17:28.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.469934
2025-12-31T13:17:28.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T13:17:28.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T13:17:28.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T13:17:28.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T13:17:28.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T13:17:28.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:17:14', tmtdew=32.95, humidity=10.6, cloud=0.0, wind=32.45, temperature=25.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T11:16:42.298', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T13:17:28.692 [DEBUG] [Thread-128348] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:17:28.776 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T13:17:28.788 [DEBUG] [Thread-128351] [transport.py] [_log()] starting thread (client mode): 0xb95587f0
2025-12-31T13:17:28.788 [DEBUG] [Thread-128351] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:17:28.802 [DEBUG] [Thread-128351] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T13:17:28.802 [INFO] [Thread-128351] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T13:17:28.810 [DEBUG] [Thread-128351] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:17:28.810 [DEBUG] [Thread-128351] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T13:17:28.810 [DEBUG] [Thread-128351] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:17:28.810 [DEBUG] [Thread-128351] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:17:28.810 [DEBUG] [Thread-128351] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:17:28.810 [DEBUG] [Thread-128351] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:17:28.810 [DEBUG] [Thread-128351] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:17:28.810 [DEBUG] [Thread-128351] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:17:28.810 [DEBUG] [Thread-128351] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:17:28.810 [DEBUG] [Thread-128351] [transport.py] [_log()] client lang: <none>
2025-12-31T13:17:28.810 [DEBUG] [Thread-128351] [transport.py] [_log()] server lang: <none>
2025-12-31T13:17:28.810 [DEBUG] [Thread-128351] [transport.py] [_log()] kex follows: False
2025-12-31T13:17:28.810 [DEBUG] [Thread-128351] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:17:28.810 [DEBUG] [Thread-128351] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:17:28.810 [DEBUG] [Thread-128351] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:17:28.810 [DEBUG] [Thread-128351] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:17:28.810 [DEBUG] [Thread-128351] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:17:28.810 [DEBUG] [Thread-128351] [transport.py] [_log()] Compression: none
2025-12-31T13:17:28.810 [DEBUG] [Thread-128351] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:17:28.870 [DEBUG] [Thread-128351] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:17:28.871 [DEBUG] [Thread-128351] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:17:28.871 [DEBUG] [Thread-128351] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T13:17:28.871 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T13:17:28.872 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:17:28.927 [DEBUG] [Thread-128351] [transport.py] [_log()] userauth is OK
2025-12-31T13:17:28.927 [DEBUG] [Thread-128351] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:17:28.927 [DEBUG] [Thread-128351] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:17:28.927 [DEBUG] [Thread-128351] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T13:17:28.927 [DEBUG] [Thread-128351] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:17:28.949 [INFO] [Thread-128351] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:17:28.950 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T13:17:28.950 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:17:29.781 [DEBUG] [Thread-128351] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:17:29.781 [DEBUG] [Thread-128351] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:17:29.829 [DEBUG] [Thread-128351] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:17:29.829 [DEBUG] [Thread-128351] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:17:29.838 [DEBUG] [Thread-128351] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:17:29.847 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:17: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')
2025-12-31T13:17:29.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T13:17:29.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:17:29.866 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:17:29.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:17:29.877 [DEBUG] [Thread-128351] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:17:34.754 [DEBUG] [Thread-128353 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:17:49.202 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:17:49.203 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:17:49.797 [DEBUG] [Thread-128354 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:17:59.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T13:17:59.876 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T13:17:59.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T13:18:00.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 17, 46), 33.43, 10.28, 0.0, 23.03, 25.01, 0, 0, 0, 2, 0, 0),)
2025-12-31T13:18:00.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:17:46
2025-12-31T13:18:00.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T13:18:00.850 [DEBUG] [Thread-128355] [transport.py] [_log()] starting thread (client mode): 0xb95b2920
2025-12-31T13:18:00.850 [DEBUG] [Thread-128355] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:18:00.871 [DEBUG] [Thread-128355] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T13:18:00.871 [INFO] [Thread-128355] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T13:18:00.872 [DEBUG] [Thread-128355] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:18:00.873 [DEBUG] [Thread-128355] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T13:18:00.873 [DEBUG] [Thread-128355] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:18:00.873 [DEBUG] [Thread-128355] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:18:00.873 [DEBUG] [Thread-128355] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:18:00.873 [DEBUG] [Thread-128355] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:18:00.873 [DEBUG] [Thread-128355] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:18:00.873 [DEBUG] [Thread-128355] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:18:00.873 [DEBUG] [Thread-128355] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:18:00.873 [DEBUG] [Thread-128355] [transport.py] [_log()] client lang: <none>
2025-12-31T13:18:00.873 [DEBUG] [Thread-128355] [transport.py] [_log()] server lang: <none>
2025-12-31T13:18:00.873 [DEBUG] [Thread-128355] [transport.py] [_log()] kex follows: False
2025-12-31T13:18:00.873 [DEBUG] [Thread-128355] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:18:00.873 [DEBUG] [Thread-128355] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:18:00.873 [DEBUG] [Thread-128355] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:18:00.874 [DEBUG] [Thread-128355] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:18:00.874 [DEBUG] [Thread-128355] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:18:00.874 [DEBUG] [Thread-128355] [transport.py] [_log()] Compression: none
2025-12-31T13:18:00.874 [DEBUG] [Thread-128355] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:18:00.884 [DEBUG] [Thread-128355] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:18:00.885 [DEBUG] [Thread-128355] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:18:00.885 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T13:18:00.886 [DEBUG] [Thread-128355] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T13:18:00.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:18:00.888 [DEBUG] [Thread-128355] [transport.py] [_log()] userauth is OK
2025-12-31T13:18:00.889 [DEBUG] [Thread-128355] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:18:00.889 [DEBUG] [Thread-128355] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:18:00.889 [DEBUG] [Thread-128355] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T13:18:00.889 [DEBUG] [Thread-128355] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:18:00.908 [INFO] [Thread-128355] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:18:00.909 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:18:01.584 [DEBUG] [Thread-128355] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:18:01.584 [DEBUG] [Thread-128355] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:18:01.585 [DEBUG] [Thread-128355] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T13:18:01.625 [DEBUG] [Thread-128355] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:18:01.625 [DEBUG] [Thread-128355] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:18:01.628 [DEBUG] [Thread-128355] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:18:01.633 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:18:01.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T13:18:01.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T13:18:01.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T13:18:01.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:18:01.643 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T13:18:01.643 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:18:01.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:18:01.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T13:18:01.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.470281 -999.00  +24.40  33.26     16   -2.90 1 1 2 1 1   888    0 24.00 -99.01 ----- 24.4 33.3 299.0 38.7 29.1 -22.9 28.9 -22.8 28.3 -24.1 28.8 -20.7
2025-12-31T13:18:01.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T13:18:01.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T13:18:01.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.470281
2025-12-31T13:18:01.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T13:18:01.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T13:18:01.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T13:18:01.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T13:18:01.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T13:18:01.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:17:46', tmtdew=33.43, humidity=10.28, cloud=0.0, wind=23.03, temperature=25.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T11:17:12.278', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T13:18:01.646 [DEBUG] [Thread-128355] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:18:01.727 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T13:18:01.739 [DEBUG] [Thread-128358] [transport.py] [_log()] starting thread (client mode): 0xb6b16d40
2025-12-31T13:18:01.739 [DEBUG] [Thread-128358] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:18:01.755 [DEBUG] [Thread-128358] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T13:18:01.755 [INFO] [Thread-128358] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T13:18:01.762 [DEBUG] [Thread-128358] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:18:01.762 [DEBUG] [Thread-128358] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T13:18:01.763 [DEBUG] [Thread-128358] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:18:01.763 [DEBUG] [Thread-128358] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:18:01.763 [DEBUG] [Thread-128358] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:18:01.763 [DEBUG] [Thread-128358] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:18:01.763 [DEBUG] [Thread-128358] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:18:01.763 [DEBUG] [Thread-128358] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:18:01.763 [DEBUG] [Thread-128358] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:18:01.763 [DEBUG] [Thread-128358] [transport.py] [_log()] client lang: <none>
2025-12-31T13:18:01.763 [DEBUG] [Thread-128358] [transport.py] [_log()] server lang: <none>
2025-12-31T13:18:01.763 [DEBUG] [Thread-128358] [transport.py] [_log()] kex follows: False
2025-12-31T13:18:01.763 [DEBUG] [Thread-128358] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:18:01.763 [DEBUG] [Thread-128358] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:18:01.763 [DEBUG] [Thread-128358] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:18:01.763 [DEBUG] [Thread-128358] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:18:01.763 [DEBUG] [Thread-128358] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:18:01.763 [DEBUG] [Thread-128358] [transport.py] [_log()] Compression: none
2025-12-31T13:18:01.763 [DEBUG] [Thread-128358] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:18:01.819 [DEBUG] [Thread-128358] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:18:01.820 [DEBUG] [Thread-128358] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:18:01.820 [DEBUG] [Thread-128358] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T13:18:01.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T13:18:01.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:18:01.875 [DEBUG] [Thread-128358] [transport.py] [_log()] userauth is OK
2025-12-31T13:18:01.876 [DEBUG] [Thread-128358] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:18:01.876 [DEBUG] [Thread-128358] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:18:01.876 [DEBUG] [Thread-128358] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T13:18:01.876 [DEBUG] [Thread-128358] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:18:01.895 [INFO] [Thread-128358] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:18:01.895 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T13:18:01.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:18:02.751 [DEBUG] [Thread-128358] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:18:02.751 [DEBUG] [Thread-128358] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:18:02.799 [DEBUG] [Thread-128358] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:18:02.800 [DEBUG] [Thread-128358] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:18:02.809 [DEBUG] [Thread-128358] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:18:02.818 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:18:02.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T13:18:02.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T13:18:02.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:18:02.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:18:02.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:18:02.846 [DEBUG] [Thread-128358] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:18:04.835 [DEBUG] [Thread-128360 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:18:14.899 [DEBUG] [Thread-128361 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:18:19.885 [DEBUG] [Thread-128362 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:18:32.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T13:18:32.853 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T13:18:32.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T13:18:33.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 18, 18), 32.98, 10.61, 0.0, 23.71, 24.91, 0, 0, 0, 2, 0, 0),)
2025-12-31T13:18:33.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:18:18
2025-12-31T13:18:33.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T13:18:33.808 [DEBUG] [Thread-128363] [transport.py] [_log()] starting thread (client mode): 0xb6b17700
2025-12-31T13:18:33.809 [DEBUG] [Thread-128363] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:18:33.830 [DEBUG] [Thread-128363] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T13:18:33.830 [INFO] [Thread-128363] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T13:18:33.833 [DEBUG] [Thread-128363] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:18:33.833 [DEBUG] [Thread-128363] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T13:18:33.833 [DEBUG] [Thread-128363] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:18:33.833 [DEBUG] [Thread-128363] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:18:33.833 [DEBUG] [Thread-128363] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:18:33.833 [DEBUG] [Thread-128363] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:18:33.833 [DEBUG] [Thread-128363] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:18:33.833 [DEBUG] [Thread-128363] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:18:33.833 [DEBUG] [Thread-128363] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:18:33.833 [DEBUG] [Thread-128363] [transport.py] [_log()] client lang: <none>
2025-12-31T13:18:33.833 [DEBUG] [Thread-128363] [transport.py] [_log()] server lang: <none>
2025-12-31T13:18:33.833 [DEBUG] [Thread-128363] [transport.py] [_log()] kex follows: False
2025-12-31T13:18:33.833 [DEBUG] [Thread-128363] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:18:33.833 [DEBUG] [Thread-128363] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:18:33.833 [DEBUG] [Thread-128363] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:18:33.833 [DEBUG] [Thread-128363] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:18:33.834 [DEBUG] [Thread-128363] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:18:33.834 [DEBUG] [Thread-128363] [transport.py] [_log()] Compression: none
2025-12-31T13:18:33.834 [DEBUG] [Thread-128363] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:18:33.849 [DEBUG] [Thread-128363] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:18:33.849 [DEBUG] [Thread-128363] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:18:33.850 [DEBUG] [Thread-128363] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T13:18:33.850 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T13:18:33.851 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:18:33.852 [DEBUG] [Thread-128363] [transport.py] [_log()] userauth is OK
2025-12-31T13:18:33.852 [DEBUG] [Thread-128363] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:18:33.852 [DEBUG] [Thread-128363] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:18:33.852 [DEBUG] [Thread-128363] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T13:18:33.852 [DEBUG] [Thread-128363] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:18:33.876 [INFO] [Thread-128363] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:18:33.877 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:18:34.608 [DEBUG] [Thread-128363] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:18:34.608 [DEBUG] [Thread-128363] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:18:34.609 [DEBUG] [Thread-128363] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T13:18:34.649 [DEBUG] [Thread-128363] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:18:34.649 [DEBUG] [Thread-128363] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:18:34.653 [DEBUG] [Thread-128363] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:18:34.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:18:34.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T13:18:34.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T13:18:34.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T13:18:34.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:18:34.682 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T13:18:34.682 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:18:34.683 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:18:34.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T13:18:34.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.470629 -999.00  +24.40  19.96     16   -2.50 1 2 1 1 1   888    0 23.85 -91.74 ----- 22.0 20.0 306.0 28.0 29.2 -21.8 28.9 -21.9 28.5 -19.5 28.9 -19.6
2025-12-31T13:18:34.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T13:18:34.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T13:18:34.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.470629
2025-12-31T13:18:34.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T13:18:34.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T13:18:34.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T13:18:34.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T13:18:34.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T13:18:34.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:18:18', tmtdew=32.98, humidity=10.61, cloud=0.0, wind=23.71, temperature=24.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T11:17:42.346', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T13:18:34.685 [DEBUG] [Thread-128363] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:18:34.770 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T13:18:34.781 [DEBUG] [Thread-128366] [transport.py] [_log()] starting thread (client mode): 0xb6ba2bc0
2025-12-31T13:18:34.781 [DEBUG] [Thread-128366] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:18:34.798 [DEBUG] [Thread-128366] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T13:18:34.798 [INFO] [Thread-128366] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T13:18:34.806 [DEBUG] [Thread-128366] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:18:34.806 [DEBUG] [Thread-128366] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T13:18:34.806 [DEBUG] [Thread-128366] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:18:34.806 [DEBUG] [Thread-128366] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:18:34.806 [DEBUG] [Thread-128366] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:18:34.806 [DEBUG] [Thread-128366] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:18:34.806 [DEBUG] [Thread-128366] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:18:34.806 [DEBUG] [Thread-128366] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:18:34.806 [DEBUG] [Thread-128366] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:18:34.806 [DEBUG] [Thread-128366] [transport.py] [_log()] client lang: <none>
2025-12-31T13:18:34.806 [DEBUG] [Thread-128366] [transport.py] [_log()] server lang: <none>
2025-12-31T13:18:34.806 [DEBUG] [Thread-128366] [transport.py] [_log()] kex follows: False
2025-12-31T13:18:34.806 [DEBUG] [Thread-128366] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:18:34.807 [DEBUG] [Thread-128366] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:18:34.807 [DEBUG] [Thread-128366] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:18:34.807 [DEBUG] [Thread-128366] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:18:34.807 [DEBUG] [Thread-128366] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:18:34.807 [DEBUG] [Thread-128366] [transport.py] [_log()] Compression: none
2025-12-31T13:18:34.807 [DEBUG] [Thread-128366] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:18:34.867 [DEBUG] [Thread-128366] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:18:34.868 [DEBUG] [Thread-128366] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:18:34.868 [DEBUG] [Thread-128366] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T13:18:34.868 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T13:18:34.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:18:34.918 [DEBUG] [Thread-128368 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:18:34.923 [DEBUG] [Thread-128366] [transport.py] [_log()] userauth is OK
2025-12-31T13:18:34.923 [DEBUG] [Thread-128366] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:18:34.923 [DEBUG] [Thread-128366] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:18:34.923 [DEBUG] [Thread-128366] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T13:18:34.923 [DEBUG] [Thread-128366] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:18:34.939 [INFO] [Thread-128366] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:18:34.940 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T13:18:34.940 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:18:35.780 [DEBUG] [Thread-128366] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:18:35.780 [DEBUG] [Thread-128366] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:18:35.828 [DEBUG] [Thread-128366] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:18:35.829 [DEBUG] [Thread-128366] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:18:35.837 [DEBUG] [Thread-128366] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:18:35.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:18:35.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T13:18:35.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T13:18:35.862 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:18:35.862 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:18:35.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:18:35.870 [DEBUG] [Thread-128366] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:18:49.342 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:18:49.343 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:18:49.971 [DEBUG] [Thread-128369 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:19:05.004 [DEBUG] [Thread-128370 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:19:05.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T13:19:05.892 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T13:19: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-12-31T13:19:06.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 18, 50), 32.92, 10.65, 0.0, 18.79, 24.96, 0, 0, 0, 2, 0, 0),)
2025-12-31T13:19:06.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:18:50
2025-12-31T13:19:06.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T13:19:06.849 [DEBUG] [Thread-128371] [transport.py] [_log()] starting thread (client mode): 0xb6b166e0
2025-12-31T13:19:06.849 [DEBUG] [Thread-128371] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:19:06.870 [DEBUG] [Thread-128371] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T13:19:06.870 [INFO] [Thread-128371] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T13:19:06.872 [DEBUG] [Thread-128371] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:19:06.872 [DEBUG] [Thread-128371] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T13:19:06.872 [DEBUG] [Thread-128371] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:19:06.872 [DEBUG] [Thread-128371] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:19:06.872 [DEBUG] [Thread-128371] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:19:06.872 [DEBUG] [Thread-128371] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:19:06.872 [DEBUG] [Thread-128371] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:19:06.872 [DEBUG] [Thread-128371] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:19:06.872 [DEBUG] [Thread-128371] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:19:06.872 [DEBUG] [Thread-128371] [transport.py] [_log()] client lang: <none>
2025-12-31T13:19:06.872 [DEBUG] [Thread-128371] [transport.py] [_log()] server lang: <none>
2025-12-31T13:19:06.872 [DEBUG] [Thread-128371] [transport.py] [_log()] kex follows: False
2025-12-31T13:19:06.873 [DEBUG] [Thread-128371] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:19:06.873 [DEBUG] [Thread-128371] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:19:06.873 [DEBUG] [Thread-128371] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:19:06.873 [DEBUG] [Thread-128371] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:19:06.873 [DEBUG] [Thread-128371] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:19:06.873 [DEBUG] [Thread-128371] [transport.py] [_log()] Compression: none
2025-12-31T13:19:06.873 [DEBUG] [Thread-128371] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:19:06.883 [DEBUG] [Thread-128371] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:19:06.884 [DEBUG] [Thread-128371] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:19:06.884 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T13:19:06.885 [DEBUG] [Thread-128371] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T13:19:06.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:19:06.887 [DEBUG] [Thread-128371] [transport.py] [_log()] userauth is OK
2025-12-31T13:19:06.887 [DEBUG] [Thread-128371] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:19:06.887 [DEBUG] [Thread-128371] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:19:06.887 [DEBUG] [Thread-128371] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T13:19:06.887 [DEBUG] [Thread-128371] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:19:06.913 [INFO] [Thread-128371] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:19:06.914 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:19:07.545 [DEBUG] [Thread-128371] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:19:07.545 [DEBUG] [Thread-128371] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:19:07.546 [DEBUG] [Thread-128371] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T13:19:07.586 [DEBUG] [Thread-128371] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:19:07.587 [DEBUG] [Thread-128371] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:19:07.590 [DEBUG] [Thread-128371] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:19:07.601 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:19:07.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T13:19:07.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T13:19:07.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T13:19:07.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:19:07.617 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T13:19:07.617 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:19:07.617 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:19:07.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T13:19:07.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.471323 -999.00  +24.40  11.67     16   -2.60 1 2 1 1 1   888    0 24.82 -74.29 ----- 11.9 11.7 287.4 21.2 29.1 -22.6 28.9 -21.7 28.4 -20.1 28.9 -20.0
2025-12-31T13:19:07.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T13:19:07.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T13:19:07.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.471323
2025-12-31T13:19:07.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T13:19:07.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T13:19:07.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T13:19:07.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T13:19:07.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T13:19:07.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:18:50', tmtdew=32.92, humidity=10.65, cloud=0.0, wind=18.79, temperature=24.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T11:18:42.307', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T13:19:07.621 [DEBUG] [Thread-128371] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:19:07.704 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T13:19:07.716 [DEBUG] [Thread-128374] [transport.py] [_log()] starting thread (client mode): 0xb6b61f30
2025-12-31T13:19:07.717 [DEBUG] [Thread-128374] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:19:07.731 [DEBUG] [Thread-128374] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T13:19:07.731 [INFO] [Thread-128374] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T13:19:07.739 [DEBUG] [Thread-128374] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:19:07.739 [DEBUG] [Thread-128374] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T13:19:07.739 [DEBUG] [Thread-128374] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:19:07.739 [DEBUG] [Thread-128374] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:19:07.739 [DEBUG] [Thread-128374] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:19:07.739 [DEBUG] [Thread-128374] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:19:07.739 [DEBUG] [Thread-128374] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:19:07.740 [DEBUG] [Thread-128374] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:19:07.740 [DEBUG] [Thread-128374] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:19:07.740 [DEBUG] [Thread-128374] [transport.py] [_log()] client lang: <none>
2025-12-31T13:19:07.740 [DEBUG] [Thread-128374] [transport.py] [_log()] server lang: <none>
2025-12-31T13:19:07.740 [DEBUG] [Thread-128374] [transport.py] [_log()] kex follows: False
2025-12-31T13:19:07.740 [DEBUG] [Thread-128374] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:19:07.740 [DEBUG] [Thread-128374] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:19:07.740 [DEBUG] [Thread-128374] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:19:07.741 [DEBUG] [Thread-128374] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:19:07.741 [DEBUG] [Thread-128374] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:19:07.741 [DEBUG] [Thread-128374] [transport.py] [_log()] Compression: none
2025-12-31T13:19:07.741 [DEBUG] [Thread-128374] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:19:07.800 [DEBUG] [Thread-128374] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:19:07.800 [DEBUG] [Thread-128374] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:19:07.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T13:19:07.802 [DEBUG] [Thread-128374] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T13:19:07.802 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:19:07.859 [DEBUG] [Thread-128374] [transport.py] [_log()] userauth is OK
2025-12-31T13:19:07.859 [DEBUG] [Thread-128374] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:19:07.860 [DEBUG] [Thread-128374] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:19:07.860 [DEBUG] [Thread-128374] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T13:19:07.860 [DEBUG] [Thread-128374] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:19:07.878 [INFO] [Thread-128374] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:19:07.879 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T13:19:07.879 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:19:08.783 [DEBUG] [Thread-128374] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:19:08.783 [DEBUG] [Thread-128374] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:19:08.831 [DEBUG] [Thread-128374] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:19:08.831 [DEBUG] [Thread-128374] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:19:08.840 [DEBUG] [Thread-128374] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:19:08.850 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:19:08.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T13:19:08.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T13:19:08.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:19:08.870 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:19:08.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:19:08.878 [DEBUG] [Thread-128374] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:19:14.952 [DEBUG] [Thread-128376 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:19:20.043 [DEBUG] [Thread-128377 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:19:35.092 [DEBUG] [Thread-128378 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:19:38.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T13:19:38.875 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T13:19:38.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T13:19:39.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 19, 22), 33.21, 10.41, 0.0, 17.91, 24.93, 0, 0, 0, 2, 0, 0),)
2025-12-31T13:19:39.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:19:22
2025-12-31T13:19:39.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T13:19:39.841 [DEBUG] [Thread-128379] [transport.py] [_log()] starting thread (client mode): 0xb6b28af0
2025-12-31T13:19:39.841 [DEBUG] [Thread-128379] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:19:39.862 [DEBUG] [Thread-128379] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T13:19:39.862 [INFO] [Thread-128379] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T13:19:39.865 [DEBUG] [Thread-128379] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:19:39.865 [DEBUG] [Thread-128379] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T13:19:39.865 [DEBUG] [Thread-128379] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:19:39.865 [DEBUG] [Thread-128379] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:19:39.865 [DEBUG] [Thread-128379] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:19:39.865 [DEBUG] [Thread-128379] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:19:39.865 [DEBUG] [Thread-128379] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:19:39.865 [DEBUG] [Thread-128379] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:19:39.865 [DEBUG] [Thread-128379] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:19:39.865 [DEBUG] [Thread-128379] [transport.py] [_log()] client lang: <none>
2025-12-31T13:19:39.865 [DEBUG] [Thread-128379] [transport.py] [_log()] server lang: <none>
2025-12-31T13:19:39.865 [DEBUG] [Thread-128379] [transport.py] [_log()] kex follows: False
2025-12-31T13:19:39.865 [DEBUG] [Thread-128379] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:19:39.865 [DEBUG] [Thread-128379] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:19:39.865 [DEBUG] [Thread-128379] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:19:39.865 [DEBUG] [Thread-128379] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:19:39.865 [DEBUG] [Thread-128379] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:19:39.865 [DEBUG] [Thread-128379] [transport.py] [_log()] Compression: none
2025-12-31T13:19:39.865 [DEBUG] [Thread-128379] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:19:39.882 [DEBUG] [Thread-128379] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:19:39.883 [DEBUG] [Thread-128379] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:19:39.884 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T13:19:39.884 [DEBUG] [Thread-128379] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T13:19:39.885 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:19:39.886 [DEBUG] [Thread-128379] [transport.py] [_log()] userauth is OK
2025-12-31T13:19:39.886 [DEBUG] [Thread-128379] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:19:39.886 [DEBUG] [Thread-128379] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:19:39.887 [DEBUG] [Thread-128379] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T13:19:39.887 [DEBUG] [Thread-128379] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:19:39.905 [INFO] [Thread-128379] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:19:39.906 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:19:40.650 [DEBUG] [Thread-128379] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:19:40.650 [DEBUG] [Thread-128379] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:19:40.651 [DEBUG] [Thread-128379] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T13:19:40.691 [DEBUG] [Thread-128379] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:19:40.691 [DEBUG] [Thread-128379] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:19:40.693 [DEBUG] [Thread-128379] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:19:40.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:19:40.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T13:19:40.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T13:19:40.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T13:19:40.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:19:40.715 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T13:19:40.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:19:40.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:19:40.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T13:19:40.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.471670 -999.00  +24.60  22.36     16   -2.60 1 2 1 1 1   888    0 25.00 -65.36 ----- 26.6 22.4 272.4 25.9 29.1 -22.6 28.9 -21.3 28.2 -21.5 28.8 -19.8
2025-12-31T13:19:40.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T13:19:40.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T13:19:40.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.471670
2025-12-31T13:19:40.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T13:19:40.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T13:19:40.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T13:19:40.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T13:19:40.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T13:19:40.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:19:22', tmtdew=33.21, humidity=10.41, cloud=0.0, wind=17.91, temperature=24.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T11:19:12.288', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T13:19:40.718 [DEBUG] [Thread-128379] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:19:40.803 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T13:19:40.816 [DEBUG] [Thread-128382] [transport.py] [_log()] starting thread (client mode): 0xb6b281f0
2025-12-31T13:19:40.816 [DEBUG] [Thread-128382] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:19:40.834 [DEBUG] [Thread-128382] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T13:19:40.835 [INFO] [Thread-128382] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T13:19:40.842 [DEBUG] [Thread-128382] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:19:40.842 [DEBUG] [Thread-128382] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T13:19:40.842 [DEBUG] [Thread-128382] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:19:40.843 [DEBUG] [Thread-128382] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:19:40.843 [DEBUG] [Thread-128382] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:19:40.843 [DEBUG] [Thread-128382] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:19:40.843 [DEBUG] [Thread-128382] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:19:40.843 [DEBUG] [Thread-128382] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:19:40.843 [DEBUG] [Thread-128382] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:19:40.843 [DEBUG] [Thread-128382] [transport.py] [_log()] client lang: <none>
2025-12-31T13:19:40.843 [DEBUG] [Thread-128382] [transport.py] [_log()] server lang: <none>
2025-12-31T13:19:40.843 [DEBUG] [Thread-128382] [transport.py] [_log()] kex follows: False
2025-12-31T13:19:40.843 [DEBUG] [Thread-128382] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:19:40.843 [DEBUG] [Thread-128382] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:19:40.843 [DEBUG] [Thread-128382] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:19:40.843 [DEBUG] [Thread-128382] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:19:40.843 [DEBUG] [Thread-128382] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:19:40.844 [DEBUG] [Thread-128382] [transport.py] [_log()] Compression: none
2025-12-31T13:19:40.844 [DEBUG] [Thread-128382] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:19:40.903 [DEBUG] [Thread-128382] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:19:40.904 [DEBUG] [Thread-128382] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:19:40.905 [DEBUG] [Thread-128382] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T13:19:40.905 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T13:19:40.906 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:19:40.959 [DEBUG] [Thread-128382] [transport.py] [_log()] userauth is OK
2025-12-31T13:19:40.959 [DEBUG] [Thread-128382] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:19:40.960 [DEBUG] [Thread-128382] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:19:40.960 [DEBUG] [Thread-128382] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T13:19:40.960 [DEBUG] [Thread-128382] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:19:40.977 [INFO] [Thread-128382] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:19:40.978 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T13:19:40.980 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:19:41.776 [DEBUG] [Thread-128382] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:19:41.777 [DEBUG] [Thread-128382] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:19:41.824 [DEBUG] [Thread-128382] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:19:41.824 [DEBUG] [Thread-128382] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:19:41.834 [DEBUG] [Thread-128382] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:19:41.843 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:19:41.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T13:19:41.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T13:19:41.862 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:19:41.862 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:19:41.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:19:41.871 [DEBUG] [Thread-128382] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:19:49.482 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:19:49.483 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:19:50.132 [DEBUG] [Thread-128384 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:20:05.182 [DEBUG] [Thread-128385 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:20:11.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T13:20:11.879 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T13:20:11.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T13:20:12.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 19, 54), 32.9, 10.78, 0.0, 26.06, 24.91, 0, 0, 0, 2, 0, 0),)
2025-12-31T13:20:12.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:19:54
2025-12-31T13:20:12.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T13:20:12.876 [DEBUG] [Thread-128386] [transport.py] [_log()] starting thread (client mode): 0xb6ba0e80
2025-12-31T13:20:12.876 [DEBUG] [Thread-128386] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:20:12.896 [DEBUG] [Thread-128386] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T13:20:12.897 [INFO] [Thread-128386] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T13:20:12.899 [DEBUG] [Thread-128386] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:20:12.899 [DEBUG] [Thread-128386] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T13:20:12.899 [DEBUG] [Thread-128386] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:20:12.899 [DEBUG] [Thread-128386] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:20:12.899 [DEBUG] [Thread-128386] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:20:12.899 [DEBUG] [Thread-128386] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:20:12.900 [DEBUG] [Thread-128386] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:20:12.900 [DEBUG] [Thread-128386] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:20:12.900 [DEBUG] [Thread-128386] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:20:12.900 [DEBUG] [Thread-128386] [transport.py] [_log()] client lang: <none>
2025-12-31T13:20:12.900 [DEBUG] [Thread-128386] [transport.py] [_log()] server lang: <none>
2025-12-31T13:20:12.900 [DEBUG] [Thread-128386] [transport.py] [_log()] kex follows: False
2025-12-31T13:20:12.900 [DEBUG] [Thread-128386] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:20:12.900 [DEBUG] [Thread-128386] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:20:12.900 [DEBUG] [Thread-128386] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:20:12.900 [DEBUG] [Thread-128386] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:20:12.900 [DEBUG] [Thread-128386] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:20:12.900 [DEBUG] [Thread-128386] [transport.py] [_log()] Compression: none
2025-12-31T13:20:12.900 [DEBUG] [Thread-128386] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:20:12.916 [DEBUG] [Thread-128386] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:20:12.917 [DEBUG] [Thread-128386] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:20:12.918 [DEBUG] [Thread-128386] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T13:20:12.918 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T13:20:12.918 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:20:12.920 [DEBUG] [Thread-128386] [transport.py] [_log()] userauth is OK
2025-12-31T13:20:12.920 [DEBUG] [Thread-128386] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:20:12.920 [DEBUG] [Thread-128386] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:20:12.921 [DEBUG] [Thread-128386] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T13:20:12.921 [DEBUG] [Thread-128386] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:20:12.940 [INFO] [Thread-128386] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:20:12.940 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:20:15.005 [DEBUG] [Thread-128388 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:20:15.600 [DEBUG] [Thread-128386] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:20:15.600 [DEBUG] [Thread-128386] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:20:15.600 [DEBUG] [Thread-128386] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T13:20:15.641 [DEBUG] [Thread-128386] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:20:15.642 [DEBUG] [Thread-128386] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:20:15.644 [DEBUG] [Thread-128386] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:20:15.657 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:20:15.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T13:20:15.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T13:20:15.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T13:20:15.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:20:15.734 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T13:20:15.734 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:20:15.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:20:15.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T13:20:15.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.472017 -999.00  +24.50  29.12     16   -2.90 1 2 1 1 1   888    0 25.44 -57.21 ----- 19.5 29.1 272.8 39.5 29.1 -21.9 28.8 -22.2 27.9 -19.4 28.6 -20.0
2025-12-31T13:20:15.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T13:20:15.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T13:20:15.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.472017
2025-12-31T13:20:15.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T13:20:15.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T13:20:15.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T13:20:15.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T13:20:15.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T13:20:15.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:19:54', tmtdew=32.9, humidity=10.78, cloud=0.0, wind=26.06, temperature=24.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T11:19:42.269', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T13:20:15.736 [DEBUG] [Thread-128386] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:20:15.825 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T13:20:15.839 [DEBUG] [Thread-128390] [transport.py] [_log()] starting thread (client mode): 0xb6ba35b0
2025-12-31T13:20:15.839 [DEBUG] [Thread-128390] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:20:15.853 [DEBUG] [Thread-128390] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T13:20:15.853 [INFO] [Thread-128390] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T13:20:15.861 [DEBUG] [Thread-128390] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:20:15.861 [DEBUG] [Thread-128390] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T13:20:15.861 [DEBUG] [Thread-128390] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:20:15.861 [DEBUG] [Thread-128390] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:20:15.861 [DEBUG] [Thread-128390] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:20:15.861 [DEBUG] [Thread-128390] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:20:15.861 [DEBUG] [Thread-128390] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:20:15.861 [DEBUG] [Thread-128390] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:20:15.861 [DEBUG] [Thread-128390] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:20:15.861 [DEBUG] [Thread-128390] [transport.py] [_log()] client lang: <none>
2025-12-31T13:20:15.862 [DEBUG] [Thread-128390] [transport.py] [_log()] server lang: <none>
2025-12-31T13:20:15.862 [DEBUG] [Thread-128390] [transport.py] [_log()] kex follows: False
2025-12-31T13:20:15.862 [DEBUG] [Thread-128390] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:20:15.862 [DEBUG] [Thread-128390] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:20:15.862 [DEBUG] [Thread-128390] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:20:15.862 [DEBUG] [Thread-128390] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:20:15.862 [DEBUG] [Thread-128390] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:20:15.862 [DEBUG] [Thread-128390] [transport.py] [_log()] Compression: none
2025-12-31T13:20:15.862 [DEBUG] [Thread-128390] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:20:15.923 [DEBUG] [Thread-128390] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:20:15.923 [DEBUG] [Thread-128390] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:20:15.924 [DEBUG] [Thread-128390] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T13:20:15.924 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T13:20:15.925 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:20:15.979 [DEBUG] [Thread-128390] [transport.py] [_log()] userauth is OK
2025-12-31T13:20:15.979 [DEBUG] [Thread-128390] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:20:15.979 [DEBUG] [Thread-128390] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:20:15.979 [DEBUG] [Thread-128390] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T13:20:15.979 [DEBUG] [Thread-128390] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:20:15.998 [INFO] [Thread-128390] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:20:15.998 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T13:20:15.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:20:16.865 [DEBUG] [Thread-128390] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:20:16.866 [DEBUG] [Thread-128390] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:20:16.914 [DEBUG] [Thread-128390] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:20:16.914 [DEBUG] [Thread-128390] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:20:16.924 [DEBUG] [Thread-128390] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:20:16.933 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:20:16.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-12-31T13:20:16.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T13:20:16.952 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:20:16.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:20:16.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:20:16.961 [DEBUG] [Thread-128390] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:20:20.216 [DEBUG] [Thread-128392 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:20:35.277 [DEBUG] [Thread-128393 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:20:46.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T13:20:46.983 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T13:20:46.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T13:20:47.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 20, 26), 33.11, 10.61, 0.0, 30.58, 24.96, 0, 0, 0, 2, 0, 0),)
2025-12-31T13:20:47.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:20:26
2025-12-31T13:20:47.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T13:20:48.029 [DEBUG] [Thread-128394] [transport.py] [_log()] starting thread (client mode): 0xb6ba1090
2025-12-31T13:20:48.029 [DEBUG] [Thread-128394] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:20:48.050 [DEBUG] [Thread-128394] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T13:20:48.050 [INFO] [Thread-128394] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T13:20:48.053 [DEBUG] [Thread-128394] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:20:48.053 [DEBUG] [Thread-128394] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T13:20:48.053 [DEBUG] [Thread-128394] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:20:48.053 [DEBUG] [Thread-128394] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:20:48.053 [DEBUG] [Thread-128394] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:20:48.053 [DEBUG] [Thread-128394] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:20:48.054 [DEBUG] [Thread-128394] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:20:48.054 [DEBUG] [Thread-128394] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:20:48.054 [DEBUG] [Thread-128394] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:20:48.054 [DEBUG] [Thread-128394] [transport.py] [_log()] client lang: <none>
2025-12-31T13:20:48.054 [DEBUG] [Thread-128394] [transport.py] [_log()] server lang: <none>
2025-12-31T13:20:48.054 [DEBUG] [Thread-128394] [transport.py] [_log()] kex follows: False
2025-12-31T13:20:48.054 [DEBUG] [Thread-128394] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:20:48.054 [DEBUG] [Thread-128394] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:20:48.054 [DEBUG] [Thread-128394] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:20:48.054 [DEBUG] [Thread-128394] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:20:48.054 [DEBUG] [Thread-128394] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:20:48.054 [DEBUG] [Thread-128394] [transport.py] [_log()] Compression: none
2025-12-31T13:20:48.054 [DEBUG] [Thread-128394] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:20:48.070 [DEBUG] [Thread-128394] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:20:48.070 [DEBUG] [Thread-128394] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:20:48.071 [DEBUG] [Thread-128394] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T13:20:48.071 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T13:20:48.071 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:20:48.072 [DEBUG] [Thread-128394] [transport.py] [_log()] userauth is OK
2025-12-31T13:20:48.072 [DEBUG] [Thread-128394] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:20:48.072 [DEBUG] [Thread-128394] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:20:48.072 [DEBUG] [Thread-128394] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T13:20:48.072 [DEBUG] [Thread-128394] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:20:48.087 [INFO] [Thread-128394] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:20:48.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:20:48.745 [DEBUG] [Thread-128394] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:20:48.745 [DEBUG] [Thread-128394] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:20:48.745 [DEBUG] [Thread-128394] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T13:20:48.785 [DEBUG] [Thread-128394] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:20:48.785 [DEBUG] [Thread-128394] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:20:48.788 [DEBUG] [Thread-128394] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:20:48.800 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:20:48.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T13:20:48.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T13:20:48.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T13:20:48.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:20:48.805 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T13:20:48.805 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:20:48.805 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:20:48.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T13:20:48.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.472365 -999.00  +24.80  31.12     15   -2.80 1 2 2 1 1   888    0 25.21 -53.06 ----- 27.1 31.1 269.8 41.6 28.9 -21.6 28.8 -21.2 28.0 -19.7 28.6 -20.2
2025-12-31T13:20:48.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T13:20:48.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T13:20:48.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.472365
2025-12-31T13:20:48.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T13:20:48.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T13:20:48.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T13:20:48.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T13:20:48.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T13:20:48.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:20:26', tmtdew=33.11, humidity=10.61, cloud=0.0, wind=30.58, temperature=24.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T11:20:12.336', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T13:20:48.806 [DEBUG] [Thread-128394] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:20:48.880 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T13:20:48.892 [DEBUG] [Thread-128397] [transport.py] [_log()] starting thread (client mode): 0xb6b14be0
2025-12-31T13:20:48.892 [DEBUG] [Thread-128397] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:20:48.907 [DEBUG] [Thread-128397] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T13:20:48.907 [INFO] [Thread-128397] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T13:20:48.915 [DEBUG] [Thread-128397] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:20:48.915 [DEBUG] [Thread-128397] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T13:20:48.915 [DEBUG] [Thread-128397] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:20:48.915 [DEBUG] [Thread-128397] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:20:48.915 [DEBUG] [Thread-128397] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:20:48.915 [DEBUG] [Thread-128397] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:20:48.915 [DEBUG] [Thread-128397] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:20:48.915 [DEBUG] [Thread-128397] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:20:48.915 [DEBUG] [Thread-128397] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:20:48.915 [DEBUG] [Thread-128397] [transport.py] [_log()] client lang: <none>
2025-12-31T13:20:48.915 [DEBUG] [Thread-128397] [transport.py] [_log()] server lang: <none>
2025-12-31T13:20:48.915 [DEBUG] [Thread-128397] [transport.py] [_log()] kex follows: False
2025-12-31T13:20:48.915 [DEBUG] [Thread-128397] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:20:48.915 [DEBUG] [Thread-128397] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:20:48.915 [DEBUG] [Thread-128397] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:20:48.915 [DEBUG] [Thread-128397] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:20:48.915 [DEBUG] [Thread-128397] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:20:48.915 [DEBUG] [Thread-128397] [transport.py] [_log()] Compression: none
2025-12-31T13:20:48.915 [DEBUG] [Thread-128397] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:20:48.973 [DEBUG] [Thread-128397] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:20:48.973 [DEBUG] [Thread-128397] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:20:48.973 [DEBUG] [Thread-128397] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T13:20:48.973 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T13:20:48.974 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:20:49.030 [DEBUG] [Thread-128397] [transport.py] [_log()] userauth is OK
2025-12-31T13:20:49.030 [DEBUG] [Thread-128397] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:20:49.030 [DEBUG] [Thread-128397] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:20:49.030 [DEBUG] [Thread-128397] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T13:20:49.030 [DEBUG] [Thread-128397] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:20:49.048 [INFO] [Thread-128397] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:20:49.048 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T13:20:49.048 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:20:49.623 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:20:49.624 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:20:49.897 [DEBUG] [Thread-128397] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:20:49.897 [DEBUG] [Thread-128397] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:20:49.944 [DEBUG] [Thread-128397] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:20:49.944 [DEBUG] [Thread-128397] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:20:49.953 [DEBUG] [Thread-128397] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:20:49.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:20:49.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T13:20:49.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T13:20:49.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:20:49.977 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:20:49.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:20:49.985 [DEBUG] [Thread-128397] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:20:50.311 [DEBUG] [Thread-128399 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:21:05.360 [DEBUG] [Thread-128400 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:21:15.052 [DEBUG] [Thread-128401 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:21:20.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T13:21:20.007 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T13:21:20.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T13:21:20.395 [DEBUG] [Thread-128402 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:21:20.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 20, 58), 33.18, 10.56, 0.0, 30.06, 24.93, 0, 0, 0, 2, 0, 0),)
2025-12-31T13:21:20.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:20:58
2025-12-31T13:21:20.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T13:21:21.009 [DEBUG] [Thread-128403] [transport.py] [_log()] starting thread (client mode): 0xb6b17820
2025-12-31T13:21:21.009 [DEBUG] [Thread-128403] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:21:21.028 [DEBUG] [Thread-128403] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T13:21:21.028 [INFO] [Thread-128403] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T13:21:21.029 [DEBUG] [Thread-128403] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:21:21.029 [DEBUG] [Thread-128403] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T13:21:21.029 [DEBUG] [Thread-128403] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:21:21.029 [DEBUG] [Thread-128403] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:21:21.029 [DEBUG] [Thread-128403] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:21:21.029 [DEBUG] [Thread-128403] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:21:21.029 [DEBUG] [Thread-128403] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:21:21.029 [DEBUG] [Thread-128403] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:21:21.029 [DEBUG] [Thread-128403] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:21:21.029 [DEBUG] [Thread-128403] [transport.py] [_log()] client lang: <none>
2025-12-31T13:21:21.029 [DEBUG] [Thread-128403] [transport.py] [_log()] server lang: <none>
2025-12-31T13:21:21.029 [DEBUG] [Thread-128403] [transport.py] [_log()] kex follows: False
2025-12-31T13:21:21.029 [DEBUG] [Thread-128403] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:21:21.030 [DEBUG] [Thread-128403] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:21:21.030 [DEBUG] [Thread-128403] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:21:21.030 [DEBUG] [Thread-128403] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:21:21.030 [DEBUG] [Thread-128403] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:21:21.030 [DEBUG] [Thread-128403] [transport.py] [_log()] Compression: none
2025-12-31T13:21:21.030 [DEBUG] [Thread-128403] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:21:21.037 [DEBUG] [Thread-128403] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:21:21.038 [DEBUG] [Thread-128403] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:21:21.038 [DEBUG] [Thread-128403] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T13:21:21.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T13:21:21.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:21:21.039 [DEBUG] [Thread-128403] [transport.py] [_log()] userauth is OK
2025-12-31T13:21:21.039 [DEBUG] [Thread-128403] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:21:21.039 [DEBUG] [Thread-128403] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:21:21.039 [DEBUG] [Thread-128403] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T13:21:21.039 [DEBUG] [Thread-128403] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:21:21.052 [INFO] [Thread-128403] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:21:21.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:21:21.812 [DEBUG] [Thread-128403] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:21:21.812 [DEBUG] [Thread-128403] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:21:21.813 [DEBUG] [Thread-128403] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T13:21:21.853 [DEBUG] [Thread-128403] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:21:21.853 [DEBUG] [Thread-128403] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:21:21.856 [DEBUG] [Thread-128403] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:21:21.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:21:21.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T13:21:21.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T13:21:21.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T13:21:21.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:21:21.882 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T13:21:21.882 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:21:21.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:21:21.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T13:21:21.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.472712 -999.00  +24.50  13.36     15   -3.10 1 2 1 1 1   888    0 25.86 -46.89 ----- 17.3 13.4 256.1 31.0 28.9 -22.7 28.6 -21.4 27.9 -19.4 28.4 -20.6
2025-12-31T13:21:21.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T13:21:21.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T13:21:21.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.472712
2025-12-31T13:21:21.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T13:21:21.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T13:21:21.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T13:21:21.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T13:21:21.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T13:21:21.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:20:58', tmtdew=33.18, humidity=10.56, cloud=0.0, wind=30.06, temperature=24.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T11:20:42.317', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T13:21:21.885 [DEBUG] [Thread-128403] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:21:21.970 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T13:21:21.982 [DEBUG] [Thread-128406] [transport.py] [_log()] starting thread (client mode): 0xbbfcf670
2025-12-31T13:21:21.982 [DEBUG] [Thread-128406] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:21:21.997 [DEBUG] [Thread-128406] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T13:21:21.997 [INFO] [Thread-128406] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T13:21:22.004 [DEBUG] [Thread-128406] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:21:22.005 [DEBUG] [Thread-128406] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T13:21:22.005 [DEBUG] [Thread-128406] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:21:22.005 [DEBUG] [Thread-128406] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:21:22.005 [DEBUG] [Thread-128406] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:21:22.005 [DEBUG] [Thread-128406] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:21:22.005 [DEBUG] [Thread-128406] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:21:22.005 [DEBUG] [Thread-128406] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:21:22.005 [DEBUG] [Thread-128406] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:21:22.005 [DEBUG] [Thread-128406] [transport.py] [_log()] client lang: <none>
2025-12-31T13:21:22.005 [DEBUG] [Thread-128406] [transport.py] [_log()] server lang: <none>
2025-12-31T13:21:22.005 [DEBUG] [Thread-128406] [transport.py] [_log()] kex follows: False
2025-12-31T13:21:22.005 [DEBUG] [Thread-128406] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:21:22.005 [DEBUG] [Thread-128406] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:21:22.005 [DEBUG] [Thread-128406] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:21:22.005 [DEBUG] [Thread-128406] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:21:22.005 [DEBUG] [Thread-128406] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:21:22.005 [DEBUG] [Thread-128406] [transport.py] [_log()] Compression: none
2025-12-31T13:21:22.005 [DEBUG] [Thread-128406] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:21:22.061 [DEBUG] [Thread-128406] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:21:22.061 [DEBUG] [Thread-128406] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:21:22.061 [DEBUG] [Thread-128406] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T13:21:22.061 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T13:21:22.061 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:21:22.119 [DEBUG] [Thread-128406] [transport.py] [_log()] userauth is OK
2025-12-31T13:21:22.119 [DEBUG] [Thread-128406] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:21:22.119 [DEBUG] [Thread-128406] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:21:22.119 [DEBUG] [Thread-128406] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T13:21:22.120 [DEBUG] [Thread-128406] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:21:22.138 [INFO] [Thread-128406] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:21:22.138 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T13:21:22.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:21:22.955 [DEBUG] [Thread-128406] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:21:22.955 [DEBUG] [Thread-128406] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:21:23.003 [DEBUG] [Thread-128406] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:21:23.003 [DEBUG] [Thread-128406] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:21:23.012 [DEBUG] [Thread-128406] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:21:23.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:21:23.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T13:21:23.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T13:21:23.041 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:21:23.042 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:21:23.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:21:23.050 [DEBUG] [Thread-128406] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:21:35.430 [DEBUG] [Thread-128408 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:21:49.764 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:21:49.765 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:21:50.482 [DEBUG] [Thread-128409 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:21:53.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T13:21:53.055 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T13:21:53.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T13:21:53.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 21, 30), 33.23, 10.51, 0.0, 20.13, 24.88, 0, 0, 0, 2, 0, 0),)
2025-12-31T13:21:53.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:21:30
2025-12-31T13:21:53.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T13:21:54.042 [DEBUG] [Thread-128410] [transport.py] [_log()] starting thread (client mode): 0xb6ba0d60
2025-12-31T13:21:54.042 [DEBUG] [Thread-128410] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:21:54.057 [DEBUG] [Thread-128410] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T13:21:54.057 [INFO] [Thread-128410] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T13:21:54.060 [DEBUG] [Thread-128410] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:21:54.060 [DEBUG] [Thread-128410] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T13:21:54.060 [DEBUG] [Thread-128410] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:21:54.060 [DEBUG] [Thread-128410] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:21:54.060 [DEBUG] [Thread-128410] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:21:54.060 [DEBUG] [Thread-128410] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:21:54.060 [DEBUG] [Thread-128410] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:21:54.060 [DEBUG] [Thread-128410] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:21:54.060 [DEBUG] [Thread-128410] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:21:54.060 [DEBUG] [Thread-128410] [transport.py] [_log()] client lang: <none>
2025-12-31T13:21:54.060 [DEBUG] [Thread-128410] [transport.py] [_log()] server lang: <none>
2025-12-31T13:21:54.060 [DEBUG] [Thread-128410] [transport.py] [_log()] kex follows: False
2025-12-31T13:21:54.060 [DEBUG] [Thread-128410] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:21:54.060 [DEBUG] [Thread-128410] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:21:54.060 [DEBUG] [Thread-128410] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:21:54.060 [DEBUG] [Thread-128410] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:21:54.060 [DEBUG] [Thread-128410] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:21:54.060 [DEBUG] [Thread-128410] [transport.py] [_log()] Compression: none
2025-12-31T13:21:54.060 [DEBUG] [Thread-128410] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:21:54.076 [DEBUG] [Thread-128410] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:21:54.077 [DEBUG] [Thread-128410] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:21:54.077 [DEBUG] [Thread-128410] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T13:21:54.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T13:21:54.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:21:54.079 [DEBUG] [Thread-128410] [transport.py] [_log()] userauth is OK
2025-12-31T13:21:54.080 [DEBUG] [Thread-128410] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:21:54.080 [DEBUG] [Thread-128410] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:21:54.080 [DEBUG] [Thread-128410] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T13:21:54.080 [DEBUG] [Thread-128410] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:21:54.116 [INFO] [Thread-128410] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:21:54.117 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:21:54.764 [DEBUG] [Thread-128410] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:21:54.764 [DEBUG] [Thread-128410] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:21:54.764 [DEBUG] [Thread-128410] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T13:21:54.805 [DEBUG] [Thread-128410] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:21:54.805 [DEBUG] [Thread-128410] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:21:54.808 [DEBUG] [Thread-128410] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:21:54.821 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:21:54.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T13:21:54.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T13:21:54.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T13:21:54.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:21:54.833 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T13:21:54.833 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:21:54.834 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:21:54.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T13:21:54.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.473060 -999.00  +24.60  14.49     15   -3.30 1 2 1 1 1   888    0 25.98 -36.11 ----- 14.9 14.5 250.2 18.8 28.8 -21.4 28.6 -21.0 28.1 -19.7 28.4 -20.2
2025-12-31T13:21:54.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T13:21:54.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T13:21:54.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.473060
2025-12-31T13:21:54.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T13:21:54.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T13:21:54.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T13:21:54.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T13:21:54.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T13:21:54.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:21:30', tmtdew=33.23, humidity=10.51, cloud=0.0, wind=20.13, temperature=24.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T11:21:12.384', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T13:21:54.836 [DEBUG] [Thread-128410] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:21:54.921 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T13:21:54.934 [DEBUG] [Thread-128413] [transport.py] [_log()] starting thread (client mode): 0xb6ba0940
2025-12-31T13:21:54.934 [DEBUG] [Thread-128413] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:21:54.949 [DEBUG] [Thread-128413] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T13:21:54.949 [INFO] [Thread-128413] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T13:21:54.956 [DEBUG] [Thread-128413] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:21:54.956 [DEBUG] [Thread-128413] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T13:21:54.957 [DEBUG] [Thread-128413] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:21:54.957 [DEBUG] [Thread-128413] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:21:54.957 [DEBUG] [Thread-128413] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:21:54.957 [DEBUG] [Thread-128413] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:21:54.957 [DEBUG] [Thread-128413] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:21:54.957 [DEBUG] [Thread-128413] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:21:54.957 [DEBUG] [Thread-128413] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:21:54.957 [DEBUG] [Thread-128413] [transport.py] [_log()] client lang: <none>
2025-12-31T13:21:54.957 [DEBUG] [Thread-128413] [transport.py] [_log()] server lang: <none>
2025-12-31T13:21:54.957 [DEBUG] [Thread-128413] [transport.py] [_log()] kex follows: False
2025-12-31T13:21:54.957 [DEBUG] [Thread-128413] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:21:54.957 [DEBUG] [Thread-128413] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:21:54.957 [DEBUG] [Thread-128413] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:21:54.957 [DEBUG] [Thread-128413] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:21:54.957 [DEBUG] [Thread-128413] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:21:54.957 [DEBUG] [Thread-128413] [transport.py] [_log()] Compression: none
2025-12-31T13:21:54.957 [DEBUG] [Thread-128413] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:21:55.014 [DEBUG] [Thread-128413] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:21:55.015 [DEBUG] [Thread-128413] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:21:55.016 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T13:21:55.016 [DEBUG] [Thread-128413] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T13:21:55.017 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:21:55.070 [DEBUG] [Thread-128413] [transport.py] [_log()] userauth is OK
2025-12-31T13:21:55.070 [DEBUG] [Thread-128413] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:21:55.070 [DEBUG] [Thread-128413] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:21:55.070 [DEBUG] [Thread-128413] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T13:21:55.070 [DEBUG] [Thread-128413] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:21:55.084 [INFO] [Thread-128413] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:21:55.084 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T13:21:55.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:21:55.936 [DEBUG] [Thread-128413] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:21:55.936 [DEBUG] [Thread-128413] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:21:55.985 [DEBUG] [Thread-128413] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:21:55.985 [DEBUG] [Thread-128413] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:21:55.994 [DEBUG] [Thread-128413] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:21:56.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:21: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')
2025-12-31T13:21: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-12-31T13:21:56.019 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:21:56.019 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:21:56.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:21:56.027 [DEBUG] [Thread-128413] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:22:05.515 [DEBUG] [Thread-128415 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:22:15.103 [DEBUG] [Thread-128416 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:22:20.554 [DEBUG] [Thread-128417 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:22:26.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T13:22:26.032 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T13:22:26.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T13:22:26.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 22, 2), 33.18, 10.53, 0.0, 20.7, 24.76, 0, 0, 0, 2, 0, 0),)
2025-12-31T13:22:26.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:22:02
2025-12-31T13:22:26.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T13:22:27.024 [DEBUG] [Thread-128418] [transport.py] [_log()] starting thread (client mode): 0xb6ba0970
2025-12-31T13:22:27.024 [DEBUG] [Thread-128418] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:22:27.044 [DEBUG] [Thread-128418] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T13:22:27.044 [INFO] [Thread-128418] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T13:22:27.045 [DEBUG] [Thread-128418] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:22:27.045 [DEBUG] [Thread-128418] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T13:22:27.046 [DEBUG] [Thread-128418] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:22:27.046 [DEBUG] [Thread-128418] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:22:27.046 [DEBUG] [Thread-128418] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:22:27.046 [DEBUG] [Thread-128418] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:22:27.046 [DEBUG] [Thread-128418] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:22:27.046 [DEBUG] [Thread-128418] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:22:27.046 [DEBUG] [Thread-128418] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:22:27.046 [DEBUG] [Thread-128418] [transport.py] [_log()] client lang: <none>
2025-12-31T13:22:27.046 [DEBUG] [Thread-128418] [transport.py] [_log()] server lang: <none>
2025-12-31T13:22:27.046 [DEBUG] [Thread-128418] [transport.py] [_log()] kex follows: False
2025-12-31T13:22:27.046 [DEBUG] [Thread-128418] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:22:27.046 [DEBUG] [Thread-128418] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:22:27.046 [DEBUG] [Thread-128418] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:22:27.046 [DEBUG] [Thread-128418] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:22:27.046 [DEBUG] [Thread-128418] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:22:27.046 [DEBUG] [Thread-128418] [transport.py] [_log()] Compression: none
2025-12-31T13:22:27.046 [DEBUG] [Thread-128418] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:22:27.058 [DEBUG] [Thread-128418] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:22:27.059 [DEBUG] [Thread-128418] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:22:27.059 [DEBUG] [Thread-128418] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T13:22:27.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T13:22:27.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:22:27.061 [DEBUG] [Thread-128418] [transport.py] [_log()] userauth is OK
2025-12-31T13:22:27.061 [DEBUG] [Thread-128418] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:22:27.062 [DEBUG] [Thread-128418] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:22:27.062 [DEBUG] [Thread-128418] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T13:22:27.062 [DEBUG] [Thread-128418] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:22:27.080 [INFO] [Thread-128418] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:22:27.081 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:22:27.808 [DEBUG] [Thread-128418] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:22:27.808 [DEBUG] [Thread-128418] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:22:27.808 [DEBUG] [Thread-128418] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T13:22:27.848 [DEBUG] [Thread-128418] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:22:27.849 [DEBUG] [Thread-128418] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:22:27.851 [DEBUG] [Thread-128418] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:22:27.864 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:22:27.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T13:22:27.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T13:22:27.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T13:22:27.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:22:27.873 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T13:22:27.873 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:22:27.874 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:22:27.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T13:22:27.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.473406 -999.00  +24.30  20.50     15   -3.20 1 2 1 1 1   888    0 25.72 -27.95 ----- 15.3 20.5 263.4 27.5 28.8 -22.1 28.6 -21.0 28.0 -19.9 28.4 -20.2
2025-12-31T13:22:27.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T13:22:27.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T13:22:27.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.473406
2025-12-31T13:22:27.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T13:22:27.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T13:22:27.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T13:22:27.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T13:22:27.875 [DEBUG] [Thread-128418] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:22:27.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T13:22:27.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:22:02', tmtdew=33.18, humidity=10.53, cloud=0.0, wind=20.7, temperature=24.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T11:21:42.278', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T13:22:27.959 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T13:22:27.970 [DEBUG] [Thread-128421] [transport.py] [_log()] starting thread (client mode): 0xb6b15720
2025-12-31T13:22:27.971 [DEBUG] [Thread-128421] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:22:27.985 [DEBUG] [Thread-128421] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T13:22:27.985 [INFO] [Thread-128421] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T13:22:27.992 [DEBUG] [Thread-128421] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:22:27.993 [DEBUG] [Thread-128421] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T13:22:27.993 [DEBUG] [Thread-128421] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:22:27.993 [DEBUG] [Thread-128421] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:22:27.993 [DEBUG] [Thread-128421] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:22:27.993 [DEBUG] [Thread-128421] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:22:27.993 [DEBUG] [Thread-128421] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:22:27.993 [DEBUG] [Thread-128421] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:22:27.993 [DEBUG] [Thread-128421] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:22:27.993 [DEBUG] [Thread-128421] [transport.py] [_log()] client lang: <none>
2025-12-31T13:22:27.993 [DEBUG] [Thread-128421] [transport.py] [_log()] server lang: <none>
2025-12-31T13:22:27.993 [DEBUG] [Thread-128421] [transport.py] [_log()] kex follows: False
2025-12-31T13:22:27.993 [DEBUG] [Thread-128421] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:22:27.993 [DEBUG] [Thread-128421] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:22:27.994 [DEBUG] [Thread-128421] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:22:27.994 [DEBUG] [Thread-128421] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:22:27.994 [DEBUG] [Thread-128421] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:22:27.994 [DEBUG] [Thread-128421] [transport.py] [_log()] Compression: none
2025-12-31T13:22:27.994 [DEBUG] [Thread-128421] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:22:28.049 [DEBUG] [Thread-128421] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:22:28.050 [DEBUG] [Thread-128421] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:22:28.050 [DEBUG] [Thread-128421] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T13:22:28.050 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T13:22:28.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:22:28.106 [DEBUG] [Thread-128421] [transport.py] [_log()] userauth is OK
2025-12-31T13:22:28.106 [DEBUG] [Thread-128421] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:22:28.106 [DEBUG] [Thread-128421] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:22:28.106 [DEBUG] [Thread-128421] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T13:22:28.106 [DEBUG] [Thread-128421] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:22:28.125 [INFO] [Thread-128421] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:22:28.125 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T13:22:28.126 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:22:29.033 [DEBUG] [Thread-128421] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:22:29.034 [DEBUG] [Thread-128421] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:22:29.081 [DEBUG] [Thread-128421] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:22:29.082 [DEBUG] [Thread-128421] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:22:29.091 [DEBUG] [Thread-128421] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:22:29.099 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:22:29.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T13:22:29.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T13:22:29.116 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:22:29.116 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:22:29.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:22:29.124 [DEBUG] [Thread-128421] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:22:35.588 [DEBUG] [Thread-128423 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:22:49.905 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:22:49.906 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:22:50.630 [DEBUG] [Thread-128424 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:22:59.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T13:22:59.139 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T13:22:59.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T13:22:59.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 22, 34), 32.79, 10.63, 0.0, 19.74, 24.55, 0, 0, 0, 2, 0, 0),)
2025-12-31T13:22:59.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:22:34
2025-12-31T13:22:59.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T13:23:00.134 [DEBUG] [Thread-128425] [transport.py] [_log()] starting thread (client mode): 0xb6b60b50
2025-12-31T13:23:00.135 [DEBUG] [Thread-128425] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:23:00.158 [DEBUG] [Thread-128425] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T13:23:00.158 [INFO] [Thread-128425] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T13:23:00.161 [DEBUG] [Thread-128425] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:23:00.162 [DEBUG] [Thread-128425] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T13:23:00.162 [DEBUG] [Thread-128425] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:23:00.162 [DEBUG] [Thread-128425] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:23:00.162 [DEBUG] [Thread-128425] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:23:00.162 [DEBUG] [Thread-128425] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:23:00.162 [DEBUG] [Thread-128425] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:23:00.162 [DEBUG] [Thread-128425] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:23:00.162 [DEBUG] [Thread-128425] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:23:00.162 [DEBUG] [Thread-128425] [transport.py] [_log()] client lang: <none>
2025-12-31T13:23:00.162 [DEBUG] [Thread-128425] [transport.py] [_log()] server lang: <none>
2025-12-31T13:23:00.163 [DEBUG] [Thread-128425] [transport.py] [_log()] kex follows: False
2025-12-31T13:23:00.163 [DEBUG] [Thread-128425] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:23:00.163 [DEBUG] [Thread-128425] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:23:00.163 [DEBUG] [Thread-128425] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:23:00.163 [DEBUG] [Thread-128425] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:23:00.163 [DEBUG] [Thread-128425] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:23:00.163 [DEBUG] [Thread-128425] [transport.py] [_log()] Compression: none
2025-12-31T13:23:00.163 [DEBUG] [Thread-128425] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:23:00.183 [DEBUG] [Thread-128425] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:23:00.184 [DEBUG] [Thread-128425] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:23:00.184 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T13:23:00.185 [DEBUG] [Thread-128425] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T13:23:00.186 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:23:00.187 [DEBUG] [Thread-128425] [transport.py] [_log()] userauth is OK
2025-12-31T13:23:00.187 [DEBUG] [Thread-128425] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:23:00.187 [DEBUG] [Thread-128425] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:23:00.187 [DEBUG] [Thread-128425] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T13:23:00.187 [DEBUG] [Thread-128425] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:23:00.211 [INFO] [Thread-128425] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:23:00.211 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:23:00.880 [DEBUG] [Thread-128425] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:23:00.880 [DEBUG] [Thread-128425] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:23:00.880 [DEBUG] [Thread-128425] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T13:23:00.921 [DEBUG] [Thread-128425] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:23:00.921 [DEBUG] [Thread-128425] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:23:00.925 [DEBUG] [Thread-128425] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:23:00.937 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:23:00.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T13:23:00.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T13:23:00.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T13:23:00.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:23:00.949 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T13:23:00.949 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:23:00.949 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:23:00.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T13:23:00.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.473754 -999.00  +24.50  13.16     16   -2.90 1 2 1 1 1   888    0 25.87 -21.91 ----- 11.0 13.2 269.0 21.6 28.8 -21.3 28.5 -20.2 28.1 -19.4 28.3 -20.0
2025-12-31T13:23:00.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T13:23:00.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T13:23:00.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.473754
2025-12-31T13:23:00.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T13:23:00.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T13:23:00.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T13:23:00.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T13:23:00.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T13:23:00.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:22:34', tmtdew=32.79, humidity=10.63, cloud=0.0, wind=19.74, temperature=24.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T11:22:12.346', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T13:23:00.952 [DEBUG] [Thread-128425] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:23:01.035 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T13:23:01.048 [DEBUG] [Thread-128428] [transport.py] [_log()] starting thread (client mode): 0xb6b16b00
2025-12-31T13:23:01.048 [DEBUG] [Thread-128428] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:23:01.064 [DEBUG] [Thread-128428] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T13:23:01.064 [INFO] [Thread-128428] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T13:23:01.072 [DEBUG] [Thread-128428] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:23:01.073 [DEBUG] [Thread-128428] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T13:23:01.073 [DEBUG] [Thread-128428] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:23:01.073 [DEBUG] [Thread-128428] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:23:01.073 [DEBUG] [Thread-128428] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:23:01.073 [DEBUG] [Thread-128428] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:23:01.073 [DEBUG] [Thread-128428] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:23:01.073 [DEBUG] [Thread-128428] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:23:01.073 [DEBUG] [Thread-128428] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:23:01.073 [DEBUG] [Thread-128428] [transport.py] [_log()] client lang: <none>
2025-12-31T13:23:01.073 [DEBUG] [Thread-128428] [transport.py] [_log()] server lang: <none>
2025-12-31T13:23:01.073 [DEBUG] [Thread-128428] [transport.py] [_log()] kex follows: False
2025-12-31T13:23:01.073 [DEBUG] [Thread-128428] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:23:01.073 [DEBUG] [Thread-128428] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:23:01.073 [DEBUG] [Thread-128428] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:23:01.073 [DEBUG] [Thread-128428] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:23:01.073 [DEBUG] [Thread-128428] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:23:01.074 [DEBUG] [Thread-128428] [transport.py] [_log()] Compression: none
2025-12-31T13:23:01.074 [DEBUG] [Thread-128428] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:23:01.130 [DEBUG] [Thread-128428] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:23:01.131 [DEBUG] [Thread-128428] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:23:01.131 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T13:23:01.132 [DEBUG] [Thread-128428] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T13:23:01.133 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:23:01.186 [DEBUG] [Thread-128428] [transport.py] [_log()] userauth is OK
2025-12-31T13:23:01.186 [DEBUG] [Thread-128428] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:23:01.187 [DEBUG] [Thread-128428] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:23:01.187 [DEBUG] [Thread-128428] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T13:23:01.187 [DEBUG] [Thread-128428] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:23:01.206 [INFO] [Thread-128428] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:23:01.207 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T13:23:01.207 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:23:02.049 [DEBUG] [Thread-128428] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:23:02.049 [DEBUG] [Thread-128428] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:23:02.097 [DEBUG] [Thread-128428] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:23:02.097 [DEBUG] [Thread-128428] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:23:02.106 [DEBUG] [Thread-128428] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:23:02.115 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:23:02.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T13:23: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') -> 00000000
2025-12-31T13:23:02.134 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:23:02.134 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:23:02.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:23:02.143 [DEBUG] [Thread-128428] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:23:05.666 [DEBUG] [Thread-128430 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:23:15.153 [DEBUG] [Thread-128431 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:23:20.711 [DEBUG] [Thread-128432 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:23:32.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T13:23:32.165 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T13:23:32.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T13:23:32.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 23, 6), 33.34, 10.23, 0.0, 24.93, 24.7, 0, 0, 0, 2, 0, 0),)
2025-12-31T13:23:32.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:23:06
2025-12-31T13:23:33.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T13:23:33.158 [DEBUG] [Thread-128433] [transport.py] [_log()] starting thread (client mode): 0xb6ba3280
2025-12-31T13:23:33.158 [DEBUG] [Thread-128433] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:23:33.175 [DEBUG] [Thread-128433] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T13:23:33.175 [INFO] [Thread-128433] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T13:23:33.176 [DEBUG] [Thread-128433] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:23:33.176 [DEBUG] [Thread-128433] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T13:23:33.176 [DEBUG] [Thread-128433] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:23:33.176 [DEBUG] [Thread-128433] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:23:33.176 [DEBUG] [Thread-128433] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:23:33.176 [DEBUG] [Thread-128433] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:23:33.177 [DEBUG] [Thread-128433] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:23:33.177 [DEBUG] [Thread-128433] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:23:33.177 [DEBUG] [Thread-128433] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:23:33.177 [DEBUG] [Thread-128433] [transport.py] [_log()] client lang: <none>
2025-12-31T13:23:33.177 [DEBUG] [Thread-128433] [transport.py] [_log()] server lang: <none>
2025-12-31T13:23:33.177 [DEBUG] [Thread-128433] [transport.py] [_log()] kex follows: False
2025-12-31T13:23:33.177 [DEBUG] [Thread-128433] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:23:33.177 [DEBUG] [Thread-128433] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:23:33.177 [DEBUG] [Thread-128433] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:23:33.177 [DEBUG] [Thread-128433] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:23:33.177 [DEBUG] [Thread-128433] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:23:33.177 [DEBUG] [Thread-128433] [transport.py] [_log()] Compression: none
2025-12-31T13:23:33.177 [DEBUG] [Thread-128433] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:23:33.188 [DEBUG] [Thread-128433] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:23:33.188 [DEBUG] [Thread-128433] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:23:33.189 [DEBUG] [Thread-128433] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T13:23:33.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T13:23:33.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:23:33.190 [DEBUG] [Thread-128433] [transport.py] [_log()] userauth is OK
2025-12-31T13:23:33.190 [DEBUG] [Thread-128433] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:23:33.190 [DEBUG] [Thread-128433] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:23:33.190 [DEBUG] [Thread-128433] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T13:23:33.190 [DEBUG] [Thread-128433] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:23:33.207 [INFO] [Thread-128433] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:23:33.208 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:23:33.870 [DEBUG] [Thread-128433] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:23:33.871 [DEBUG] [Thread-128433] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:23:33.871 [DEBUG] [Thread-128433] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T13:23:33.912 [DEBUG] [Thread-128433] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:23:33.912 [DEBUG] [Thread-128433] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:23:33.916 [DEBUG] [Thread-128433] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:23:33.929 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:23:33.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T13:23:33.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T13:23:33.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T13:23:33.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:23:33.941 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T13:23:33.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:23:33.941 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:23:33.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T13:23:33.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.474101 -999.00  +24.70  21.41     15   -3.00 1 2 1 1 1   888    0 26.51 -14.70 ----- 25.8 21.4 283.2 27.0 28.7 -21.1 28.6 -20.8 27.9 -22.2 28.3 -20.0
2025-12-31T13:23:33.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T13:23:33.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T13:23:33.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.474101
2025-12-31T13:23:33.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T13:23:33.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T13:23:33.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T13:23:33.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T13:23:33.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T13:23:33.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:23:06', tmtdew=33.34, humidity=10.23, cloud=0.0, wind=24.93, temperature=24.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T11:22:42.326', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T13:23:33.943 [DEBUG] [Thread-128433] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:23:34.027 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T13:23:34.038 [DEBUG] [Thread-128436] [transport.py] [_log()] starting thread (client mode): 0xb6bb29b0
2025-12-31T13:23:34.039 [DEBUG] [Thread-128436] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:23:34.053 [DEBUG] [Thread-128436] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T13:23:34.053 [INFO] [Thread-128436] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T13:23:34.061 [DEBUG] [Thread-128436] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:23:34.061 [DEBUG] [Thread-128436] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T13:23:34.061 [DEBUG] [Thread-128436] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:23:34.061 [DEBUG] [Thread-128436] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:23:34.061 [DEBUG] [Thread-128436] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:23:34.061 [DEBUG] [Thread-128436] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:23:34.061 [DEBUG] [Thread-128436] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:23:34.061 [DEBUG] [Thread-128436] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:23:34.061 [DEBUG] [Thread-128436] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:23:34.061 [DEBUG] [Thread-128436] [transport.py] [_log()] client lang: <none>
2025-12-31T13:23:34.061 [DEBUG] [Thread-128436] [transport.py] [_log()] server lang: <none>
2025-12-31T13:23:34.061 [DEBUG] [Thread-128436] [transport.py] [_log()] kex follows: False
2025-12-31T13:23:34.061 [DEBUG] [Thread-128436] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:23:34.061 [DEBUG] [Thread-128436] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:23:34.061 [DEBUG] [Thread-128436] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:23:34.062 [DEBUG] [Thread-128436] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:23:34.062 [DEBUG] [Thread-128436] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:23:34.062 [DEBUG] [Thread-128436] [transport.py] [_log()] Compression: none
2025-12-31T13:23:34.062 [DEBUG] [Thread-128436] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:23:34.119 [DEBUG] [Thread-128436] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:23:34.119 [DEBUG] [Thread-128436] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:23:34.120 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T13:23:34.120 [DEBUG] [Thread-128436] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T13:23:34.121 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:23:34.182 [DEBUG] [Thread-128436] [transport.py] [_log()] userauth is OK
2025-12-31T13:23:34.182 [DEBUG] [Thread-128436] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:23:34.183 [DEBUG] [Thread-128436] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:23:34.183 [DEBUG] [Thread-128436] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T13:23:34.183 [DEBUG] [Thread-128436] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:23:34.203 [INFO] [Thread-128436] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:23:34.203 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T13:23:34.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:23:35.024 [DEBUG] [Thread-128436] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:23:35.024 [DEBUG] [Thread-128436] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:23:35.072 [DEBUG] [Thread-128436] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:23:35.072 [DEBUG] [Thread-128436] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:23:35.081 [DEBUG] [Thread-128436] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:23:35.091 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:23:35.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T13:23:35.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T13:23:35.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:23:35.110 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:23:35.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:23:35.118 [DEBUG] [Thread-128436] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:23:35.742 [DEBUG] [Thread-128438 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:23:50.058 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:23:50.059 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:23:50.793 [DEBUG] [Thread-128439 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:24:05.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T13:24:05.140 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T13:24:05.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T13:24:05.825 [DEBUG] [Thread-128440 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:24:05.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 23, 38), 32.88, 10.46, 0.0, 29.04, 24.85, 0, 0, 0, 2, 0, 0),)
2025-12-31T13:24:05.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:23:38
2025-12-31T13:24:06.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T13:24:06.182 [DEBUG] [Thread-128441] [transport.py] [_log()] starting thread (client mode): 0xb6b60f70
2025-12-31T13:24:06.182 [DEBUG] [Thread-128441] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:24:06.205 [DEBUG] [Thread-128441] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T13:24:06.205 [INFO] [Thread-128441] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T13:24:06.208 [DEBUG] [Thread-128441] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:24:06.208 [DEBUG] [Thread-128441] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T13:24:06.208 [DEBUG] [Thread-128441] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:24:06.208 [DEBUG] [Thread-128441] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:24:06.208 [DEBUG] [Thread-128441] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:24:06.208 [DEBUG] [Thread-128441] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:24:06.208 [DEBUG] [Thread-128441] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:24:06.208 [DEBUG] [Thread-128441] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:24:06.208 [DEBUG] [Thread-128441] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:24:06.208 [DEBUG] [Thread-128441] [transport.py] [_log()] client lang: <none>
2025-12-31T13:24:06.208 [DEBUG] [Thread-128441] [transport.py] [_log()] server lang: <none>
2025-12-31T13:24:06.208 [DEBUG] [Thread-128441] [transport.py] [_log()] kex follows: False
2025-12-31T13:24:06.209 [DEBUG] [Thread-128441] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:24:06.209 [DEBUG] [Thread-128441] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:24:06.209 [DEBUG] [Thread-128441] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:24:06.209 [DEBUG] [Thread-128441] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:24:06.209 [DEBUG] [Thread-128441] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:24:06.209 [DEBUG] [Thread-128441] [transport.py] [_log()] Compression: none
2025-12-31T13:24:06.209 [DEBUG] [Thread-128441] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:24:06.224 [DEBUG] [Thread-128441] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:24:06.225 [DEBUG] [Thread-128441] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:24:06.225 [DEBUG] [Thread-128441] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T13:24:06.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T13:24:06.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:24:06.226 [DEBUG] [Thread-128441] [transport.py] [_log()] userauth is OK
2025-12-31T13:24:06.226 [DEBUG] [Thread-128441] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:24:06.226 [DEBUG] [Thread-128441] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:24:06.226 [DEBUG] [Thread-128441] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T13:24:06.226 [DEBUG] [Thread-128441] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:24:06.235 [INFO] [Thread-128441] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:24:06.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:24:06.875 [DEBUG] [Thread-128441] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:24:06.875 [DEBUG] [Thread-128441] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:24:06.876 [DEBUG] [Thread-128441] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T13:24:06.917 [DEBUG] [Thread-128441] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:24:06.917 [DEBUG] [Thread-128441] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:24:06.919 [DEBUG] [Thread-128441] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:24:06.933 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:24:06.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T13:24:06.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T13:24:06.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T13:24:06.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:24:06.939 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T13:24:06.939 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:24:06.939 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:24:06.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T13:24:06.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.474795 -999.00  +25.20  20.66     16   -2.10 1 2 1 1 1   888    0 26.56 -3.40 ----- 24.5 20.7 293.0 25.7 28.8 -20.4 28.6 -20.0 28.1 -19.6 28.4 -19.2
2025-12-31T13:24:06.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T13:24:06.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T13:24:06.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.474795
2025-12-31T13:24:06.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T13:24:06.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T13:24:06.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T13:24:06.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T13:24:06.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T13:24:06.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:23:38', tmtdew=32.88, humidity=10.46, cloud=0.0, wind=29.04, temperature=24.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T11:23:42.288', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T13:24:06.940 [DEBUG] [Thread-128441] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:24:07.013 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T13:24:07.025 [DEBUG] [Thread-128444] [transport.py] [_log()] starting thread (client mode): 0xb6b605b0
2025-12-31T13:24:07.026 [DEBUG] [Thread-128444] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:24:07.039 [DEBUG] [Thread-128444] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T13:24:07.039 [INFO] [Thread-128444] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T13:24:07.047 [DEBUG] [Thread-128444] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:24:07.047 [DEBUG] [Thread-128444] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T13:24:07.047 [DEBUG] [Thread-128444] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:24:07.047 [DEBUG] [Thread-128444] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:24:07.047 [DEBUG] [Thread-128444] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:24:07.047 [DEBUG] [Thread-128444] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:24:07.047 [DEBUG] [Thread-128444] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:24:07.047 [DEBUG] [Thread-128444] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:24:07.047 [DEBUG] [Thread-128444] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:24:07.047 [DEBUG] [Thread-128444] [transport.py] [_log()] client lang: <none>
2025-12-31T13:24:07.047 [DEBUG] [Thread-128444] [transport.py] [_log()] server lang: <none>
2025-12-31T13:24:07.047 [DEBUG] [Thread-128444] [transport.py] [_log()] kex follows: False
2025-12-31T13:24:07.047 [DEBUG] [Thread-128444] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:24:07.047 [DEBUG] [Thread-128444] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:24:07.047 [DEBUG] [Thread-128444] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:24:07.047 [DEBUG] [Thread-128444] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:24:07.047 [DEBUG] [Thread-128444] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:24:07.047 [DEBUG] [Thread-128444] [transport.py] [_log()] Compression: none
2025-12-31T13:24:07.047 [DEBUG] [Thread-128444] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:24:07.105 [DEBUG] [Thread-128444] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:24:07.106 [DEBUG] [Thread-128444] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:24:07.106 [DEBUG] [Thread-128444] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T13:24:07.106 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T13:24:07.107 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:24:07.164 [DEBUG] [Thread-128444] [transport.py] [_log()] userauth is OK
2025-12-31T13:24:07.164 [DEBUG] [Thread-128444] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:24:07.164 [DEBUG] [Thread-128444] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:24:07.164 [DEBUG] [Thread-128444] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T13:24:07.164 [DEBUG] [Thread-128444] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:24:07.183 [INFO] [Thread-128444] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:24:07.184 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T13:24:07.184 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:24:08.010 [DEBUG] [Thread-128444] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:24:08.010 [DEBUG] [Thread-128444] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:24:08.057 [DEBUG] [Thread-128444] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:24:08.058 [DEBUG] [Thread-128444] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:24:08.066 [DEBUG] [Thread-128444] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:24:08.074 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:24:08.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T13:24:08.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-12-31T13:24:08.091 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:24:08.092 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:24:08.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:24:08.100 [DEBUG] [Thread-128444] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:24:15.210 [DEBUG] [Thread-128446 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:24:20.861 [DEBUG] [Thread-128447 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:24:35.915 [DEBUG] [Thread-128448 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:24:38.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T13:24:38.123 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T13:24:38.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T13:24:38.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 24, 10), 33.02, 10.37, 0.0, 28.6, 24.9, 0, 0, 0, 2, 0, 0),)
2025-12-31T13:24:38.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:24:10
2025-12-31T13:24:38.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T13:24:39.113 [DEBUG] [Thread-128449] [transport.py] [_log()] starting thread (client mode): 0xb6ba07c0
2025-12-31T13:24:39.113 [DEBUG] [Thread-128449] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:24:39.132 [DEBUG] [Thread-128449] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T13:24:39.133 [INFO] [Thread-128449] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T13:24:39.135 [DEBUG] [Thread-128449] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:24:39.136 [DEBUG] [Thread-128449] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T13:24:39.136 [DEBUG] [Thread-128449] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:24:39.136 [DEBUG] [Thread-128449] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:24:39.136 [DEBUG] [Thread-128449] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:24:39.136 [DEBUG] [Thread-128449] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:24:39.136 [DEBUG] [Thread-128449] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:24:39.136 [DEBUG] [Thread-128449] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:24:39.136 [DEBUG] [Thread-128449] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:24:39.136 [DEBUG] [Thread-128449] [transport.py] [_log()] client lang: <none>
2025-12-31T13:24:39.136 [DEBUG] [Thread-128449] [transport.py] [_log()] server lang: <none>
2025-12-31T13:24:39.136 [DEBUG] [Thread-128449] [transport.py] [_log()] kex follows: False
2025-12-31T13:24:39.136 [DEBUG] [Thread-128449] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:24:39.136 [DEBUG] [Thread-128449] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:24:39.136 [DEBUG] [Thread-128449] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:24:39.136 [DEBUG] [Thread-128449] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:24:39.136 [DEBUG] [Thread-128449] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:24:39.137 [DEBUG] [Thread-128449] [transport.py] [_log()] Compression: none
2025-12-31T13:24:39.137 [DEBUG] [Thread-128449] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:24:39.154 [DEBUG] [Thread-128449] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:24:39.155 [DEBUG] [Thread-128449] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:24:39.156 [DEBUG] [Thread-128449] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T13:24:39.156 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T13:24:39.157 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:24:39.158 [DEBUG] [Thread-128449] [transport.py] [_log()] userauth is OK
2025-12-31T13:24:39.158 [DEBUG] [Thread-128449] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:24:39.158 [DEBUG] [Thread-128449] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:24:39.158 [DEBUG] [Thread-128449] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T13:24:39.158 [DEBUG] [Thread-128449] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:24:39.176 [INFO] [Thread-128449] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:24:39.177 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:24:39.931 [DEBUG] [Thread-128449] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:24:39.931 [DEBUG] [Thread-128449] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:24:39.931 [DEBUG] [Thread-128449] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T13:24:39.972 [DEBUG] [Thread-128449] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:24:39.972 [DEBUG] [Thread-128449] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:24:39.974 [DEBUG] [Thread-128449] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:24:39.985 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:24:39.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T13:24:39.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T13:24:39.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T13:24:39.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:24:39.991 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T13:24:39.991 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:24:39.991 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:24:39.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T13:24:39.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.475142 -999.00  +25.30  18.83     16   -1.60 1 2 1 1 1   888    0 26.86 -0.45 ----- 25.2 18.8 293.6 26.6 28.9 -19.8 28.6 -19.9 28.1 -19.8 28.5 -19.1
2025-12-31T13:24:39.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T13:24:39.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T13:24:39.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.475142
2025-12-31T13:24:39.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T13:24:39.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T13:24:39.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T13:24:39.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T13:24:39.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T13:24:39.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:24:10', tmtdew=33.02, humidity=10.37, cloud=0.0, wind=28.6, temperature=24.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T11:24:12.269', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T13:24:39.992 [DEBUG] [Thread-128449] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:24:40.070 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T13:24:40.081 [DEBUG] [Thread-128452] [transport.py] [_log()] starting thread (client mode): 0xb6ba1b40
2025-12-31T13:24:40.081 [DEBUG] [Thread-128452] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:24:40.096 [DEBUG] [Thread-128452] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T13:24:40.096 [INFO] [Thread-128452] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T13:24:40.104 [DEBUG] [Thread-128452] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:24:40.104 [DEBUG] [Thread-128452] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T13:24:40.104 [DEBUG] [Thread-128452] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:24:40.104 [DEBUG] [Thread-128452] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:24:40.104 [DEBUG] [Thread-128452] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:24:40.104 [DEBUG] [Thread-128452] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:24:40.104 [DEBUG] [Thread-128452] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:24:40.104 [DEBUG] [Thread-128452] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:24:40.104 [DEBUG] [Thread-128452] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:24:40.104 [DEBUG] [Thread-128452] [transport.py] [_log()] client lang: <none>
2025-12-31T13:24:40.104 [DEBUG] [Thread-128452] [transport.py] [_log()] server lang: <none>
2025-12-31T13:24:40.104 [DEBUG] [Thread-128452] [transport.py] [_log()] kex follows: False
2025-12-31T13:24:40.104 [DEBUG] [Thread-128452] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:24:40.104 [DEBUG] [Thread-128452] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:24:40.104 [DEBUG] [Thread-128452] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:24:40.104 [DEBUG] [Thread-128452] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:24:40.104 [DEBUG] [Thread-128452] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:24:40.104 [DEBUG] [Thread-128452] [transport.py] [_log()] Compression: none
2025-12-31T13:24:40.104 [DEBUG] [Thread-128452] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:24:40.160 [DEBUG] [Thread-128452] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:24:40.160 [DEBUG] [Thread-128452] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:24:40.160 [DEBUG] [Thread-128452] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T13:24:40.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T13:24:40.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:24:40.217 [DEBUG] [Thread-128452] [transport.py] [_log()] userauth is OK
2025-12-31T13:24:40.217 [DEBUG] [Thread-128452] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:24:40.217 [DEBUG] [Thread-128452] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:24:40.217 [DEBUG] [Thread-128452] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T13:24:40.217 [DEBUG] [Thread-128452] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:24:40.234 [INFO] [Thread-128452] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:24:40.235 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T13:24:40.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:24:41.068 [DEBUG] [Thread-128452] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:24:41.068 [DEBUG] [Thread-128452] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:24:41.116 [DEBUG] [Thread-128452] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:24:41.116 [DEBUG] [Thread-128452] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:24:41.125 [DEBUG] [Thread-128452] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:24:41.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:24:41.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T13:24:41.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T13:24:41.149 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:24:41.149 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:24:41.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:24:41.157 [DEBUG] [Thread-128452] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:24:50.197 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:24:50.199 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:24:50.953 [DEBUG] [Thread-128454 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:25:06.006 [DEBUG] [Thread-128455 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:25:11.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T13:25:11.153 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T13:25:11.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T13:25:11.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 24, 42), 33.25, 10.63, 0.0, 28.9, 25.19, 0, 0, 0, 2, 0, 0),)
2025-12-31T13:25:11.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:24:42
2025-12-31T13:25:11.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T13:25:12.142 [DEBUG] [Thread-128456] [transport.py] [_log()] starting thread (client mode): 0xb6b62e30
2025-12-31T13:25:12.142 [DEBUG] [Thread-128456] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:25:12.159 [DEBUG] [Thread-128456] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T13:25:12.159 [INFO] [Thread-128456] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T13:25:12.162 [DEBUG] [Thread-128456] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:25:12.162 [DEBUG] [Thread-128456] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T13:25:12.162 [DEBUG] [Thread-128456] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:25:12.162 [DEBUG] [Thread-128456] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:25:12.162 [DEBUG] [Thread-128456] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:25:12.162 [DEBUG] [Thread-128456] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:25:12.162 [DEBUG] [Thread-128456] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:25:12.162 [DEBUG] [Thread-128456] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:25:12.162 [DEBUG] [Thread-128456] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:25:12.162 [DEBUG] [Thread-128456] [transport.py] [_log()] client lang: <none>
2025-12-31T13:25:12.162 [DEBUG] [Thread-128456] [transport.py] [_log()] server lang: <none>
2025-12-31T13:25:12.162 [DEBUG] [Thread-128456] [transport.py] [_log()] kex follows: False
2025-12-31T13:25:12.162 [DEBUG] [Thread-128456] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:25:12.163 [DEBUG] [Thread-128456] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:25:12.163 [DEBUG] [Thread-128456] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:25:12.163 [DEBUG] [Thread-128456] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:25:12.163 [DEBUG] [Thread-128456] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:25:12.163 [DEBUG] [Thread-128456] [transport.py] [_log()] Compression: none
2025-12-31T13:25:12.163 [DEBUG] [Thread-128456] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:25:12.180 [DEBUG] [Thread-128456] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:25:12.181 [DEBUG] [Thread-128456] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:25:12.181 [DEBUG] [Thread-128456] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T13:25:12.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T13:25:12.182 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:25:12.184 [DEBUG] [Thread-128456] [transport.py] [_log()] userauth is OK
2025-12-31T13:25:12.184 [DEBUG] [Thread-128456] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:25:12.184 [DEBUG] [Thread-128456] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:25:12.184 [DEBUG] [Thread-128456] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T13:25:12.184 [DEBUG] [Thread-128456] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:25:12.205 [INFO] [Thread-128456] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:25:12.205 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:25:13.548 [DEBUG] [Thread-128456] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:25:13.548 [DEBUG] [Thread-128456] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:25:13.549 [DEBUG] [Thread-128456] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T13:25:13.590 [DEBUG] [Thread-128456] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:25:13.590 [DEBUG] [Thread-128456] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:25:13.593 [DEBUG] [Thread-128456] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:25:13.684 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:25:13.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T13:25:13.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T13:25:13.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T13:25:13.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:25:13.710 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T13:25:13.710 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:25:13.711 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:25:13.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T13:25:13.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.475490 -999.00  +25.10  31.61     16   -1.70 1 2 2 1 1   888    0 27.24 1.66 ----- 27.6 31.6 274.4 37.3 28.9 -19.8 28.6 -20.0 27.7 -23.6 28.6 -18.6
2025-12-31T13:25:13.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T13:25:13.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T13:25:13.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.475490
2025-12-31T13:25:13.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T13:25:13.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T13:25:13.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T13:25:13.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T13:25:13.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T13:25:13.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:24:42', tmtdew=33.25, humidity=10.63, cloud=0.0, wind=28.9, temperature=25.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T11:24:42.336', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T13:25:13.713 [DEBUG] [Thread-128456] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:25:13.801 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T13:25:13.815 [DEBUG] [Thread-128459] [transport.py] [_log()] starting thread (client mode): 0xb6b60970
2025-12-31T13:25:13.815 [DEBUG] [Thread-128459] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:25:13.829 [DEBUG] [Thread-128459] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T13:25:13.829 [INFO] [Thread-128459] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T13:25:13.837 [DEBUG] [Thread-128459] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:25:13.837 [DEBUG] [Thread-128459] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T13:25:13.837 [DEBUG] [Thread-128459] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:25:13.837 [DEBUG] [Thread-128459] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:25:13.837 [DEBUG] [Thread-128459] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:25:13.838 [DEBUG] [Thread-128459] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:25:13.838 [DEBUG] [Thread-128459] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:25:13.838 [DEBUG] [Thread-128459] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:25:13.838 [DEBUG] [Thread-128459] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:25:13.838 [DEBUG] [Thread-128459] [transport.py] [_log()] client lang: <none>
2025-12-31T13:25:13.838 [DEBUG] [Thread-128459] [transport.py] [_log()] server lang: <none>
2025-12-31T13:25:13.838 [DEBUG] [Thread-128459] [transport.py] [_log()] kex follows: False
2025-12-31T13:25:13.838 [DEBUG] [Thread-128459] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:25:13.838 [DEBUG] [Thread-128459] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:25:13.838 [DEBUG] [Thread-128459] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:25:13.839 [DEBUG] [Thread-128459] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:25:13.839 [DEBUG] [Thread-128459] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:25:13.839 [DEBUG] [Thread-128459] [transport.py] [_log()] Compression: none
2025-12-31T13:25:13.839 [DEBUG] [Thread-128459] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:25:13.897 [DEBUG] [Thread-128459] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:25:13.897 [DEBUG] [Thread-128459] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:25:13.898 [DEBUG] [Thread-128459] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T13:25:13.898 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T13:25:13.899 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:25:13.953 [DEBUG] [Thread-128459] [transport.py] [_log()] userauth is OK
2025-12-31T13:25:13.953 [DEBUG] [Thread-128459] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:25:13.953 [DEBUG] [Thread-128459] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:25:13.953 [DEBUG] [Thread-128459] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T13:25:13.953 [DEBUG] [Thread-128459] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:25:13.976 [INFO] [Thread-128459] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:25:13.976 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T13:25:13.977 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:25:14.845 [DEBUG] [Thread-128459] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:25:14.845 [DEBUG] [Thread-128459] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:25:14.892 [DEBUG] [Thread-128459] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:25:14.892 [DEBUG] [Thread-128459] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:25:14.901 [DEBUG] [Thread-128459] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:25:14.910 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:25:14.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-12-31T13:25:14.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T13:25:14.927 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:25:14.927 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:25:14.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:25:14.936 [DEBUG] [Thread-128459] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:25:15.276 [DEBUG] [Thread-128461 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:25:21.041 [DEBUG] [Thread-128462 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:25:36.079 [DEBUG] [Thread-128463 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:25:44.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T13:25:44.945 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T13:25:44.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T13:25:45.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 25, 15), 33.04, 10.82, 0.0, 27.67, 25.34, 0, 0, 0, 2, 0, 0),)
2025-12-31T13:25:45.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:25:15
2025-12-31T13:25:45.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T13:25:45.942 [DEBUG] [Thread-128464] [transport.py] [_log()] starting thread (client mode): 0xb6bb36a0
2025-12-31T13:25:45.942 [DEBUG] [Thread-128464] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:25:45.963 [DEBUG] [Thread-128464] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T13:25:45.963 [INFO] [Thread-128464] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T13:25:45.966 [DEBUG] [Thread-128464] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:25:45.966 [DEBUG] [Thread-128464] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T13:25:45.966 [DEBUG] [Thread-128464] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:25:45.966 [DEBUG] [Thread-128464] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:25:45.966 [DEBUG] [Thread-128464] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:25:45.966 [DEBUG] [Thread-128464] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:25:45.967 [DEBUG] [Thread-128464] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:25:45.967 [DEBUG] [Thread-128464] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:25:45.967 [DEBUG] [Thread-128464] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:25:45.967 [DEBUG] [Thread-128464] [transport.py] [_log()] client lang: <none>
2025-12-31T13:25:45.967 [DEBUG] [Thread-128464] [transport.py] [_log()] server lang: <none>
2025-12-31T13:25:45.967 [DEBUG] [Thread-128464] [transport.py] [_log()] kex follows: False
2025-12-31T13:25:45.967 [DEBUG] [Thread-128464] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:25:45.967 [DEBUG] [Thread-128464] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:25:45.967 [DEBUG] [Thread-128464] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:25:45.967 [DEBUG] [Thread-128464] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:25:45.967 [DEBUG] [Thread-128464] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:25:45.967 [DEBUG] [Thread-128464] [transport.py] [_log()] Compression: none
2025-12-31T13:25:45.967 [DEBUG] [Thread-128464] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:25:45.986 [DEBUG] [Thread-128464] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:25:45.986 [DEBUG] [Thread-128464] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:25:45.987 [DEBUG] [Thread-128464] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T13:25:45.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T13:25:45.988 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:25:45.989 [DEBUG] [Thread-128464] [transport.py] [_log()] userauth is OK
2025-12-31T13:25:45.989 [DEBUG] [Thread-128464] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:25:45.989 [DEBUG] [Thread-128464] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:25:45.989 [DEBUG] [Thread-128464] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T13:25:45.989 [DEBUG] [Thread-128464] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:25:46.011 [INFO] [Thread-128464] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:25:46.011 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:25:46.665 [DEBUG] [Thread-128464] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:25:46.665 [DEBUG] [Thread-128464] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:25:46.666 [DEBUG] [Thread-128464] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T13:25:46.706 [DEBUG] [Thread-128464] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:25:46.706 [DEBUG] [Thread-128464] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:25:46.710 [DEBUG] [Thread-128464] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:25:46.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:25:46.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T13:25:46.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T13:25:46.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T13:25:46.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:25:46.734 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T13:25:46.734 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:25:46.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:25:46.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T13:25:46.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.475837 -999.00  +24.50  33.02     16   -2.20 1 2 2 1 1   888    0 27.18 4.54 ----- 25.8 33.0 272.0 38.8 28.6 -21.6 28.4 -20.3 27.5 -22.2 28.4 -21.3
2025-12-31T13:25:46.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T13:25:46.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T13:25:46.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.475837
2025-12-31T13:25:46.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T13:25:46.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T13:25:46.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T13:25:46.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T13:25:46.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T13:25:46.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:25:15', tmtdew=33.04, humidity=10.82, cloud=0.0, wind=27.67, temperature=25.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T11:25:12.317', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T13:25:46.737 [DEBUG] [Thread-128464] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:25:46.820 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T13:25:46.832 [DEBUG] [Thread-128467] [transport.py] [_log()] starting thread (client mode): 0xb6b615d0
2025-12-31T13:25:46.832 [DEBUG] [Thread-128467] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:25:46.847 [DEBUG] [Thread-128467] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T13:25:46.847 [INFO] [Thread-128467] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T13:25:46.854 [DEBUG] [Thread-128467] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:25:46.854 [DEBUG] [Thread-128467] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T13:25:46.854 [DEBUG] [Thread-128467] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:25:46.854 [DEBUG] [Thread-128467] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:25:46.854 [DEBUG] [Thread-128467] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:25:46.854 [DEBUG] [Thread-128467] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:25:46.854 [DEBUG] [Thread-128467] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:25:46.854 [DEBUG] [Thread-128467] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:25:46.854 [DEBUG] [Thread-128467] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:25:46.854 [DEBUG] [Thread-128467] [transport.py] [_log()] client lang: <none>
2025-12-31T13:25:46.855 [DEBUG] [Thread-128467] [transport.py] [_log()] server lang: <none>
2025-12-31T13:25:46.855 [DEBUG] [Thread-128467] [transport.py] [_log()] kex follows: False
2025-12-31T13:25:46.855 [DEBUG] [Thread-128467] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:25:46.855 [DEBUG] [Thread-128467] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:25:46.855 [DEBUG] [Thread-128467] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:25:46.855 [DEBUG] [Thread-128467] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:25:46.855 [DEBUG] [Thread-128467] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:25:46.855 [DEBUG] [Thread-128467] [transport.py] [_log()] Compression: none
2025-12-31T13:25:46.855 [DEBUG] [Thread-128467] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:25:46.913 [DEBUG] [Thread-128467] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:25:46.914 [DEBUG] [Thread-128467] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:25:46.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T13:25:46.915 [DEBUG] [Thread-128467] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T13:25:46.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:25:46.970 [DEBUG] [Thread-128467] [transport.py] [_log()] userauth is OK
2025-12-31T13:25:46.970 [DEBUG] [Thread-128467] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:25:46.970 [DEBUG] [Thread-128467] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:25:46.970 [DEBUG] [Thread-128467] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T13:25:46.970 [DEBUG] [Thread-128467] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:25:46.993 [INFO] [Thread-128467] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:25:46.993 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T13:25:46.994 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:25:47.843 [DEBUG] [Thread-128467] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:25:47.843 [DEBUG] [Thread-128467] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:25:47.890 [DEBUG] [Thread-128467] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:25:47.890 [DEBUG] [Thread-128467] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:25:47.898 [DEBUG] [Thread-128467] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:25:47.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:25:47.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T13:25:47.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T13:25:47.922 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:25:47.922 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:25:47.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:25:47.930 [DEBUG] [Thread-128467] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:25:50.339 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:25:50.340 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:25:51.118 [DEBUG] [Thread-128469 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:26:06.168 [DEBUG] [Thread-128470 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:26:15.327 [DEBUG] [Thread-128471 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:26:17.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T13:26:17.932 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T13:26:17.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T13:26:18.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 25, 47), 32.06, 11.33, 0.0, 27.08, 24.96, 0, 0, 0, 2, 0, 0),)
2025-12-31T13:26:18.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:25:47
2025-12-31T13:26:18.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T13:26:18.926 [DEBUG] [Thread-128472] [transport.py] [_log()] starting thread (client mode): 0xb6bb3b80
2025-12-31T13:26:18.926 [DEBUG] [Thread-128472] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:26:18.949 [DEBUG] [Thread-128472] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T13:26:18.949 [INFO] [Thread-128472] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T13:26:18.950 [DEBUG] [Thread-128472] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:26:18.950 [DEBUG] [Thread-128472] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T13:26:18.950 [DEBUG] [Thread-128472] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:26:18.950 [DEBUG] [Thread-128472] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:26:18.950 [DEBUG] [Thread-128472] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:26:18.950 [DEBUG] [Thread-128472] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:26:18.950 [DEBUG] [Thread-128472] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:26:18.951 [DEBUG] [Thread-128472] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:26:18.951 [DEBUG] [Thread-128472] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:26:18.951 [DEBUG] [Thread-128472] [transport.py] [_log()] client lang: <none>
2025-12-31T13:26:18.951 [DEBUG] [Thread-128472] [transport.py] [_log()] server lang: <none>
2025-12-31T13:26:18.951 [DEBUG] [Thread-128472] [transport.py] [_log()] kex follows: False
2025-12-31T13:26:18.951 [DEBUG] [Thread-128472] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:26:18.951 [DEBUG] [Thread-128472] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:26:18.951 [DEBUG] [Thread-128472] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:26:18.951 [DEBUG] [Thread-128472] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:26:18.951 [DEBUG] [Thread-128472] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:26:18.951 [DEBUG] [Thread-128472] [transport.py] [_log()] Compression: none
2025-12-31T13:26:18.951 [DEBUG] [Thread-128472] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:26:18.962 [DEBUG] [Thread-128472] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:26:18.963 [DEBUG] [Thread-128472] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:26:18.963 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T13:26:18.964 [DEBUG] [Thread-128472] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T13:26:18.964 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:26:18.968 [DEBUG] [Thread-128472] [transport.py] [_log()] userauth is OK
2025-12-31T13:26:18.968 [DEBUG] [Thread-128472] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:26:18.968 [DEBUG] [Thread-128472] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:26:18.968 [DEBUG] [Thread-128472] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T13:26:18.968 [DEBUG] [Thread-128472] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:26:18.986 [INFO] [Thread-128472] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:26:18.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:26:19.702 [DEBUG] [Thread-128472] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:26:19.703 [DEBUG] [Thread-128472] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:26:19.703 [DEBUG] [Thread-128472] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T13:26:19.744 [DEBUG] [Thread-128472] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:26:19.744 [DEBUG] [Thread-128472] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:26:19.747 [DEBUG] [Thread-128472] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:26:19.759 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:26:19.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T13:26:19.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T13:26:19.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T13:26:19.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:26:19.773 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T13:26:19.773 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:26:19.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:26:19.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T13:26:19.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.476184 -999.00  +24.40  16.65     17   -2.00 1 2 1 1 1   888    0 27.17 7.29 ----- 19.4 16.6 284.8 28.1 28.5 -20.0 28.4 -20.6 27.7 -19.1 28.2 -20.1
2025-12-31T13:26:19.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T13:26:19.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T13:26:19.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.476184
2025-12-31T13:26:19.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T13:26:19.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T13:26:19.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T13:26:19.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T13:26:19.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T13:26:19.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:25:47', tmtdew=32.06, humidity=11.33, cloud=0.0, wind=27.08, temperature=24.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T11:25:42.298', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T13:26:19.777 [DEBUG] [Thread-128472] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:26:19.863 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T13:26:19.874 [DEBUG] [Thread-128475] [transport.py] [_log()] starting thread (client mode): 0xb6b16b60
2025-12-31T13:26:19.874 [DEBUG] [Thread-128475] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:26:19.889 [DEBUG] [Thread-128475] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T13:26:19.889 [INFO] [Thread-128475] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T13:26:19.896 [DEBUG] [Thread-128475] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:26:19.896 [DEBUG] [Thread-128475] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T13:26:19.896 [DEBUG] [Thread-128475] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:26:19.896 [DEBUG] [Thread-128475] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:26:19.896 [DEBUG] [Thread-128475] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:26:19.896 [DEBUG] [Thread-128475] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:26:19.896 [DEBUG] [Thread-128475] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:26:19.896 [DEBUG] [Thread-128475] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:26:19.896 [DEBUG] [Thread-128475] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:26:19.896 [DEBUG] [Thread-128475] [transport.py] [_log()] client lang: <none>
2025-12-31T13:26:19.896 [DEBUG] [Thread-128475] [transport.py] [_log()] server lang: <none>
2025-12-31T13:26:19.896 [DEBUG] [Thread-128475] [transport.py] [_log()] kex follows: False
2025-12-31T13:26:19.896 [DEBUG] [Thread-128475] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:26:19.896 [DEBUG] [Thread-128475] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:26:19.896 [DEBUG] [Thread-128475] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:26:19.896 [DEBUG] [Thread-128475] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:26:19.896 [DEBUG] [Thread-128475] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:26:19.897 [DEBUG] [Thread-128475] [transport.py] [_log()] Compression: none
2025-12-31T13:26:19.897 [DEBUG] [Thread-128475] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:26:19.952 [DEBUG] [Thread-128475] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:26:19.952 [DEBUG] [Thread-128475] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:26:19.953 [DEBUG] [Thread-128475] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T13:26:19.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T13:26:19.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:26:20.009 [DEBUG] [Thread-128475] [transport.py] [_log()] userauth is OK
2025-12-31T13:26:20.009 [DEBUG] [Thread-128475] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:26:20.009 [DEBUG] [Thread-128475] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:26:20.009 [DEBUG] [Thread-128475] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T13:26:20.010 [DEBUG] [Thread-128475] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:26:20.025 [INFO] [Thread-128475] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:26:20.025 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T13:26:20.026 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:26:20.855 [DEBUG] [Thread-128475] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:26:20.855 [DEBUG] [Thread-128475] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:26:20.903 [DEBUG] [Thread-128475] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:26:20.903 [DEBUG] [Thread-128475] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:26:20.912 [DEBUG] [Thread-128475] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:26:20.919 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:26:20.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T13:26:20.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T13:26:20.935 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:26:20.935 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:26:20.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:26:20.943 [DEBUG] [Thread-128475] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:26:21.205 [DEBUG] [Thread-128477 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:26:36.248 [DEBUG] [Thread-128478 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:26:50.479 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:26:50.481 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:26:50.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T13:26:50.966 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T13:26:50.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T13:26:51.281 [DEBUG] [Thread-128479 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:26:51.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 26, 19), 32.04, 11.33, 0.0, 27.61, 24.88, 0, 0, 0, 2, 0, 0),)
2025-12-31T13:26:51.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:26:19
2025-12-31T13:26:51.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T13:26:51.978 [DEBUG] [Thread-128480] [transport.py] [_log()] starting thread (client mode): 0xb6b15b40
2025-12-31T13:26:51.978 [DEBUG] [Thread-128480] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:26:51.997 [DEBUG] [Thread-128480] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T13:26:51.997 [INFO] [Thread-128480] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T13:26:52.001 [DEBUG] [Thread-128480] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:26:52.001 [DEBUG] [Thread-128480] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T13:26:52.001 [DEBUG] [Thread-128480] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:26:52.001 [DEBUG] [Thread-128480] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:26:52.001 [DEBUG] [Thread-128480] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:26:52.001 [DEBUG] [Thread-128480] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:26:52.001 [DEBUG] [Thread-128480] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:26:52.001 [DEBUG] [Thread-128480] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:26:52.001 [DEBUG] [Thread-128480] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:26:52.001 [DEBUG] [Thread-128480] [transport.py] [_log()] client lang: <none>
2025-12-31T13:26:52.001 [DEBUG] [Thread-128480] [transport.py] [_log()] server lang: <none>
2025-12-31T13:26:52.001 [DEBUG] [Thread-128480] [transport.py] [_log()] kex follows: False
2025-12-31T13:26:52.001 [DEBUG] [Thread-128480] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:26:52.001 [DEBUG] [Thread-128480] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:26:52.001 [DEBUG] [Thread-128480] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:26:52.001 [DEBUG] [Thread-128480] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:26:52.001 [DEBUG] [Thread-128480] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:26:52.001 [DEBUG] [Thread-128480] [transport.py] [_log()] Compression: none
2025-12-31T13:26:52.001 [DEBUG] [Thread-128480] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:26:52.017 [DEBUG] [Thread-128480] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:26:52.018 [DEBUG] [Thread-128480] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:26:52.018 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T13:26:52.018 [DEBUG] [Thread-128480] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T13:26:52.018 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:26:52.019 [DEBUG] [Thread-128480] [transport.py] [_log()] userauth is OK
2025-12-31T13:26:52.019 [DEBUG] [Thread-128480] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:26:52.019 [DEBUG] [Thread-128480] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:26:52.019 [DEBUG] [Thread-128480] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T13:26:52.019 [DEBUG] [Thread-128480] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:26:52.033 [INFO] [Thread-128480] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:26:52.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:26:52.644 [DEBUG] [Thread-128480] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:26:52.644 [DEBUG] [Thread-128480] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:26:52.644 [DEBUG] [Thread-128480] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T13:26:52.686 [DEBUG] [Thread-128480] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:26:52.686 [DEBUG] [Thread-128480] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:26:52.688 [DEBUG] [Thread-128480] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:26:52.700 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:26:52.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T13:26:52.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T13:26:52.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T13:26:52.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:26:52.705 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T13:26:52.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:26:52.705 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:26:52.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T13:26:52.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.476531 -999.00  +24.70  15.51     17   -1.80 1 2 1 1 1   888    0 27.63 9.13 ----- 17.4 15.5 270.8 34.2 28.7 -20.5 28.4 -20.6 27.8 -19.5 28.3 -19.8
2025-12-31T13:26:52.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T13:26:52.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T13:26:52.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.476531
2025-12-31T13:26:52.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T13:26:52.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T13:26:52.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T13:26:52.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T13:26:52.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T13:26:52.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:26:19', tmtdew=32.04, humidity=11.33, cloud=0.0, wind=27.61, temperature=24.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T11:26:12.278', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T13:26:52.707 [DEBUG] [Thread-128480] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:26:52.781 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T13:26:52.793 [DEBUG] [Thread-128483] [transport.py] [_log()] starting thread (client mode): 0xb6b16aa0
2025-12-31T13:26:52.793 [DEBUG] [Thread-128483] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:26:52.807 [DEBUG] [Thread-128483] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T13:26:52.808 [INFO] [Thread-128483] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T13:26:52.815 [DEBUG] [Thread-128483] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:26:52.815 [DEBUG] [Thread-128483] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T13:26:52.815 [DEBUG] [Thread-128483] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:26:52.815 [DEBUG] [Thread-128483] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:26:52.815 [DEBUG] [Thread-128483] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:26:52.815 [DEBUG] [Thread-128483] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:26:52.815 [DEBUG] [Thread-128483] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:26:52.815 [DEBUG] [Thread-128483] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:26:52.815 [DEBUG] [Thread-128483] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:26:52.815 [DEBUG] [Thread-128483] [transport.py] [_log()] client lang: <none>
2025-12-31T13:26:52.815 [DEBUG] [Thread-128483] [transport.py] [_log()] server lang: <none>
2025-12-31T13:26:52.815 [DEBUG] [Thread-128483] [transport.py] [_log()] kex follows: False
2025-12-31T13:26:52.815 [DEBUG] [Thread-128483] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:26:52.815 [DEBUG] [Thread-128483] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:26:52.815 [DEBUG] [Thread-128483] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:26:52.815 [DEBUG] [Thread-128483] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:26:52.815 [DEBUG] [Thread-128483] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:26:52.815 [DEBUG] [Thread-128483] [transport.py] [_log()] Compression: none
2025-12-31T13:26:52.815 [DEBUG] [Thread-128483] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:26:52.873 [DEBUG] [Thread-128483] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:26:52.873 [DEBUG] [Thread-128483] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:26:52.873 [DEBUG] [Thread-128483] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T13:26:52.873 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T13:26:52.873 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:26:52.930 [DEBUG] [Thread-128483] [transport.py] [_log()] userauth is OK
2025-12-31T13:26:52.930 [DEBUG] [Thread-128483] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:26:52.930 [DEBUG] [Thread-128483] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:26:52.930 [DEBUG] [Thread-128483] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T13:26:52.930 [DEBUG] [Thread-128483] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:26:52.943 [INFO] [Thread-128483] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:26:52.943 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T13:26:52.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:26:53.772 [DEBUG] [Thread-128483] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:26:53.772 [DEBUG] [Thread-128483] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:26:53.821 [DEBUG] [Thread-128483] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:26:53.821 [DEBUG] [Thread-128483] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:26:53.830 [DEBUG] [Thread-128483] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:26:53.838 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:26:53.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T13:26:53.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T13:26:53.855 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:26:53.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:26:53.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:26:53.864 [DEBUG] [Thread-128483] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:27:06.316 [DEBUG] [Thread-128485 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:27:15.379 [DEBUG] [Thread-128486 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:27:21.363 [DEBUG] [Thread-128487 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:27:23.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T13:27:23.886 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T13:27:23.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T13:27:24.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 26, 51), 32.0, 11.35, 0.0, 27.7, 24.91, 0, 0, 0, 2, 0, 0),)
2025-12-31T13:27:24.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:26:51
2025-12-31T13:27:24.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T13:27:24.948 [DEBUG] [Thread-128488] [transport.py] [_log()] starting thread (client mode): 0xb955afb0
2025-12-31T13:27:24.948 [DEBUG] [Thread-128488] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:27:24.970 [DEBUG] [Thread-128488] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T13:27:24.970 [INFO] [Thread-128488] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T13:27:24.973 [DEBUG] [Thread-128488] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:27:24.973 [DEBUG] [Thread-128488] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T13:27:24.973 [DEBUG] [Thread-128488] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:27:24.974 [DEBUG] [Thread-128488] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:27:24.974 [DEBUG] [Thread-128488] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:27:24.974 [DEBUG] [Thread-128488] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:27:24.974 [DEBUG] [Thread-128488] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:27:24.974 [DEBUG] [Thread-128488] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:27:24.974 [DEBUG] [Thread-128488] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:27:24.974 [DEBUG] [Thread-128488] [transport.py] [_log()] client lang: <none>
2025-12-31T13:27:24.974 [DEBUG] [Thread-128488] [transport.py] [_log()] server lang: <none>
2025-12-31T13:27:24.974 [DEBUG] [Thread-128488] [transport.py] [_log()] kex follows: False
2025-12-31T13:27:24.974 [DEBUG] [Thread-128488] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:27:24.974 [DEBUG] [Thread-128488] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:27:24.974 [DEBUG] [Thread-128488] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:27:24.974 [DEBUG] [Thread-128488] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:27:24.974 [DEBUG] [Thread-128488] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:27:24.974 [DEBUG] [Thread-128488] [transport.py] [_log()] Compression: none
2025-12-31T13:27:24.974 [DEBUG] [Thread-128488] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:27:24.991 [DEBUG] [Thread-128488] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:27:24.991 [DEBUG] [Thread-128488] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:27:24.991 [DEBUG] [Thread-128488] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T13:27:24.991 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T13:27:24.992 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:27:24.993 [DEBUG] [Thread-128488] [transport.py] [_log()] userauth is OK
2025-12-31T13:27:24.993 [DEBUG] [Thread-128488] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:27:24.993 [DEBUG] [Thread-128488] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:27:24.993 [DEBUG] [Thread-128488] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T13:27:24.993 [DEBUG] [Thread-128488] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:27:25.006 [INFO] [Thread-128488] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:27:25.006 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:27:25.739 [DEBUG] [Thread-128488] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:27:25.740 [DEBUG] [Thread-128488] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:27:25.740 [DEBUG] [Thread-128488] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T13:27:25.781 [DEBUG] [Thread-128488] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:27:25.781 [DEBUG] [Thread-128488] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:27:25.785 [DEBUG] [Thread-128488] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:27:25.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:27:25.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T13:27:25.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T13:27:25.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T13:27:25.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:27:25.803 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T13:27:25.803 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:27:25.803 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:27:25.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T13:27:25.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.476879 -999.00  +24.50  26.47     17   -2.00 1 2 1 1 1   888    0 27.32 11.96 ----- 22.0 26.5 276.0 34.0 28.6 -21.2 28.3 -22.0 27.4 -22.8 28.2 -19.9
2025-12-31T13:27:25.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T13:27:25.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T13:27:25.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.476879
2025-12-31T13:27:25.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T13:27:25.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T13:27:25.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T13:27:25.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T13:27:25.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T13:27:25.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:26:51', tmtdew=32.0, humidity=11.35, cloud=0.0, wind=27.7, temperature=24.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T11:26:42.346', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T13:27:25.805 [DEBUG] [Thread-128488] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:27: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-12-31T13:27:25.889 [DEBUG] [Thread-128491] [transport.py] [_log()] starting thread (client mode): 0xb6b612a0
2025-12-31T13:27:25.889 [DEBUG] [Thread-128491] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:27:25.906 [DEBUG] [Thread-128491] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T13:27:25.906 [INFO] [Thread-128491] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T13:27:25.913 [DEBUG] [Thread-128491] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:27:25.914 [DEBUG] [Thread-128491] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T13:27:25.914 [DEBUG] [Thread-128491] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:27:25.914 [DEBUG] [Thread-128491] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:27:25.914 [DEBUG] [Thread-128491] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:27:25.914 [DEBUG] [Thread-128491] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:27:25.914 [DEBUG] [Thread-128491] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:27:25.914 [DEBUG] [Thread-128491] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:27:25.914 [DEBUG] [Thread-128491] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:27:25.914 [DEBUG] [Thread-128491] [transport.py] [_log()] client lang: <none>
2025-12-31T13:27:25.914 [DEBUG] [Thread-128491] [transport.py] [_log()] server lang: <none>
2025-12-31T13:27:25.914 [DEBUG] [Thread-128491] [transport.py] [_log()] kex follows: False
2025-12-31T13:27:25.914 [DEBUG] [Thread-128491] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:27:25.914 [DEBUG] [Thread-128491] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:27:25.914 [DEBUG] [Thread-128491] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:27:25.914 [DEBUG] [Thread-128491] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:27:25.914 [DEBUG] [Thread-128491] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:27:25.914 [DEBUG] [Thread-128491] [transport.py] [_log()] Compression: none
2025-12-31T13:27:25.914 [DEBUG] [Thread-128491] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:27:25.970 [DEBUG] [Thread-128491] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:27:25.971 [DEBUG] [Thread-128491] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:27:25.971 [DEBUG] [Thread-128491] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T13:27:25.972 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T13:27:25.972 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:27:26.027 [DEBUG] [Thread-128491] [transport.py] [_log()] userauth is OK
2025-12-31T13:27:26.027 [DEBUG] [Thread-128491] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:27:26.027 [DEBUG] [Thread-128491] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:27:26.027 [DEBUG] [Thread-128491] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T13:27:26.027 [DEBUG] [Thread-128491] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:27:26.046 [INFO] [Thread-128491] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:27:26.046 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T13:27:26.046 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:27:26.928 [DEBUG] [Thread-128491] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:27:26.928 [DEBUG] [Thread-128491] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:27:26.976 [DEBUG] [Thread-128491] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:27:26.976 [DEBUG] [Thread-128491] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:27:26.985 [DEBUG] [Thread-128491] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:27:26.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:27:26.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T13:27:27.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T13:27:27.014 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:27:27.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:27:27.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:27:27.026 [DEBUG] [Thread-128491] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:27:36.395 [DEBUG] [Thread-128493 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:27:50.619 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:27:50.620 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:27:51.449 [DEBUG] [Thread-128494 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:27:57.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T13:27:57.045 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T13:27:57.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T13:27:57.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 27, 23), 31.8, 11.49, 0.0, 25.67, 24.83, 0, 0, 0, 2, 0, 0),)
2025-12-31T13:27:57.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:27:23
2025-12-31T13:27:57.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T13:27:58.141 [DEBUG] [Thread-128495] [transport.py] [_log()] starting thread (client mode): 0xb955b010
2025-12-31T13:27:58.141 [DEBUG] [Thread-128495] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:27:58.156 [DEBUG] [Thread-128495] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T13:27:58.156 [INFO] [Thread-128495] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T13:27:58.159 [DEBUG] [Thread-128495] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:27:58.159 [DEBUG] [Thread-128495] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T13:27:58.159 [DEBUG] [Thread-128495] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:27:58.159 [DEBUG] [Thread-128495] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:27:58.159 [DEBUG] [Thread-128495] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:27:58.159 [DEBUG] [Thread-128495] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:27:58.159 [DEBUG] [Thread-128495] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:27:58.159 [DEBUG] [Thread-128495] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:27:58.159 [DEBUG] [Thread-128495] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:27:58.159 [DEBUG] [Thread-128495] [transport.py] [_log()] client lang: <none>
2025-12-31T13:27:58.159 [DEBUG] [Thread-128495] [transport.py] [_log()] server lang: <none>
2025-12-31T13:27:58.159 [DEBUG] [Thread-128495] [transport.py] [_log()] kex follows: False
2025-12-31T13:27:58.160 [DEBUG] [Thread-128495] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:27:58.160 [DEBUG] [Thread-128495] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:27:58.160 [DEBUG] [Thread-128495] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:27:58.160 [DEBUG] [Thread-128495] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:27:58.160 [DEBUG] [Thread-128495] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:27:58.160 [DEBUG] [Thread-128495] [transport.py] [_log()] Compression: none
2025-12-31T13:27:58.160 [DEBUG] [Thread-128495] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:27:58.171 [DEBUG] [Thread-128495] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:27:58.171 [DEBUG] [Thread-128495] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:27:58.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T13:27:58.171 [DEBUG] [Thread-128495] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T13:27:58.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:27:58.173 [DEBUG] [Thread-128495] [transport.py] [_log()] userauth is OK
2025-12-31T13:27:58.173 [DEBUG] [Thread-128495] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:27:58.173 [DEBUG] [Thread-128495] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:27:58.173 [DEBUG] [Thread-128495] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T13:27:58.173 [DEBUG] [Thread-128495] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:27:58.182 [INFO] [Thread-128495] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:27:58.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:27:58.835 [DEBUG] [Thread-128495] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:27:58.835 [DEBUG] [Thread-128495] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:27:58.835 [DEBUG] [Thread-128495] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T13:27:58.875 [DEBUG] [Thread-128495] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:27:58.875 [DEBUG] [Thread-128495] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:27:58.878 [DEBUG] [Thread-128495] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:27:58.891 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:27:58.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T13:27:58.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T13:27:58.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T13:27:58.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:27:58.897 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T13:27:58.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:27:58.897 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:27:58.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T13:27:58.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.477226 -999.00  +24.30  14.14     17   -2.00 1 2 1 1 1   888    0 27.38 12.97 ----- 15.6 14.1 274.0 27.2 28.4 -21.5 28.2 -21.9 27.5 -20.6 28.1 -19.9
2025-12-31T13:27:58.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T13:27:58.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T13:27:58.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.477226
2025-12-31T13:27:58.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T13:27:58.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T13:27:58.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T13:27:58.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T13:27:58.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T13:27:58.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:27:23', tmtdew=31.8, humidity=11.49, cloud=0.0, wind=25.67, temperature=24.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T11:27:12.326', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T13:27:58.898 [DEBUG] [Thread-128495] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:27:58.983 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T13:27:58.994 [DEBUG] [Thread-128498] [transport.py] [_log()] starting thread (client mode): 0xb6bb04f0
2025-12-31T13:27:58.995 [DEBUG] [Thread-128498] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:27:59.009 [DEBUG] [Thread-128498] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T13:27:59.009 [INFO] [Thread-128498] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T13:27:59.017 [DEBUG] [Thread-128498] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:27:59.017 [DEBUG] [Thread-128498] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T13:27:59.017 [DEBUG] [Thread-128498] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:27:59.017 [DEBUG] [Thread-128498] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:27:59.017 [DEBUG] [Thread-128498] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:27:59.017 [DEBUG] [Thread-128498] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:27:59.017 [DEBUG] [Thread-128498] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:27:59.017 [DEBUG] [Thread-128498] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:27:59.017 [DEBUG] [Thread-128498] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:27:59.017 [DEBUG] [Thread-128498] [transport.py] [_log()] client lang: <none>
2025-12-31T13:27:59.017 [DEBUG] [Thread-128498] [transport.py] [_log()] server lang: <none>
2025-12-31T13:27:59.017 [DEBUG] [Thread-128498] [transport.py] [_log()] kex follows: False
2025-12-31T13:27:59.017 [DEBUG] [Thread-128498] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:27:59.017 [DEBUG] [Thread-128498] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:27:59.017 [DEBUG] [Thread-128498] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:27:59.017 [DEBUG] [Thread-128498] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:27:59.017 [DEBUG] [Thread-128498] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:27:59.017 [DEBUG] [Thread-128498] [transport.py] [_log()] Compression: none
2025-12-31T13:27:59.017 [DEBUG] [Thread-128498] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:27:59.073 [DEBUG] [Thread-128498] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:27:59.074 [DEBUG] [Thread-128498] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:27:59.074 [DEBUG] [Thread-128498] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T13:27:59.074 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T13:27:59.074 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:27:59.131 [DEBUG] [Thread-128498] [transport.py] [_log()] userauth is OK
2025-12-31T13:27:59.131 [DEBUG] [Thread-128498] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:27:59.131 [DEBUG] [Thread-128498] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:27:59.131 [DEBUG] [Thread-128498] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T13:27:59.131 [DEBUG] [Thread-128498] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:27:59.149 [INFO] [Thread-128498] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:27:59.149 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T13:27:59.149 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:27:59.973 [DEBUG] [Thread-128498] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:27:59.974 [DEBUG] [Thread-128498] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:28:00.021 [DEBUG] [Thread-128498] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:28:00.022 [DEBUG] [Thread-128498] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:28:00.030 [DEBUG] [Thread-128498] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:28:00.038 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:28:00.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T13:28: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') -> 00000000
2025-12-31T13:28:00.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:28:00.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:28:00.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:28:00.062 [DEBUG] [Thread-128498] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:28:06.484 [DEBUG] [Thread-128500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:28:15.431 [DEBUG] [Thread-128501 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:28:21.547 [DEBUG] [Thread-128502 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:28:30.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T13:28:30.067 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T13:28: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-12-31T13:28:30.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 27, 55), 31.69, 11.59, 0.0, 23.91, 24.85, 0, 0, 0, 2, 0, 0),)
2025-12-31T13:28:30.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:27:55
2025-12-31T13:28:30.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T13:28:31.067 [DEBUG] [Thread-128503] [transport.py] [_log()] starting thread (client mode): 0xb6b16aa0
2025-12-31T13:28:31.067 [DEBUG] [Thread-128503] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:28:31.084 [DEBUG] [Thread-128503] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T13:28:31.084 [INFO] [Thread-128503] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T13:28:31.087 [DEBUG] [Thread-128503] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:28:31.087 [DEBUG] [Thread-128503] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T13:28:31.087 [DEBUG] [Thread-128503] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:28:31.087 [DEBUG] [Thread-128503] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:28:31.087 [DEBUG] [Thread-128503] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:28:31.087 [DEBUG] [Thread-128503] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:28:31.087 [DEBUG] [Thread-128503] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:28:31.088 [DEBUG] [Thread-128503] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:28:31.088 [DEBUG] [Thread-128503] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:28:31.088 [DEBUG] [Thread-128503] [transport.py] [_log()] client lang: <none>
2025-12-31T13:28:31.088 [DEBUG] [Thread-128503] [transport.py] [_log()] server lang: <none>
2025-12-31T13:28:31.088 [DEBUG] [Thread-128503] [transport.py] [_log()] kex follows: False
2025-12-31T13:28:31.088 [DEBUG] [Thread-128503] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:28:31.088 [DEBUG] [Thread-128503] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:28:31.088 [DEBUG] [Thread-128503] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:28:31.088 [DEBUG] [Thread-128503] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:28:31.088 [DEBUG] [Thread-128503] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:28:31.088 [DEBUG] [Thread-128503] [transport.py] [_log()] Compression: none
2025-12-31T13:28:31.088 [DEBUG] [Thread-128503] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:28:31.096 [DEBUG] [Thread-128503] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:28:31.097 [DEBUG] [Thread-128503] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:28:31.097 [DEBUG] [Thread-128503] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T13:28:31.097 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T13:28:31.098 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:28:31.098 [DEBUG] [Thread-128503] [transport.py] [_log()] userauth is OK
2025-12-31T13:28:31.099 [DEBUG] [Thread-128503] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:28:31.099 [DEBUG] [Thread-128503] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:28:31.099 [DEBUG] [Thread-128503] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T13:28:31.099 [DEBUG] [Thread-128503] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:28:31.115 [INFO] [Thread-128503] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:28:31.116 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:28:31.855 [DEBUG] [Thread-128503] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:28:31.856 [DEBUG] [Thread-128503] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:28:31.856 [DEBUG] [Thread-128503] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T13:28:31.897 [DEBUG] [Thread-128503] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:28:31.897 [DEBUG] [Thread-128503] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:28:31.901 [DEBUG] [Thread-128503] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:28:31.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:28:31.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T13:28:31.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T13:28:31.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T13:28:31.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:28:31.926 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T13:28:31.926 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:28:31.926 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:28:31.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T13:28:31.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.477574 -999.00  +24.60  21.18     17   -2.00 1 2 1 1 1   888    0 26.86 14.66 ----- 24.4 21.2 263.8 24.3 28.5 -20.2 28.3 -20.9 27.7 -19.3 28.1 -19.4
2025-12-31T13:28:31.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T13:28:31.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T13:28:31.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.477574
2025-12-31T13:28:31.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T13:28:31.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T13:28:31.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T13:28:31.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T13:28:31.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T13:28:31.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:27:55', tmtdew=31.69, humidity=11.59, cloud=0.0, wind=23.91, temperature=24.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T11:27:42.394', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T13:28:31.928 [DEBUG] [Thread-128503] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:28:32.011 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T13:28:32.022 [DEBUG] [Thread-128506] [transport.py] [_log()] starting thread (client mode): 0xb6ba1d80
2025-12-31T13:28:32.022 [DEBUG] [Thread-128506] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:28:32.037 [DEBUG] [Thread-128506] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T13:28:32.037 [INFO] [Thread-128506] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T13:28:32.045 [DEBUG] [Thread-128506] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:28:32.045 [DEBUG] [Thread-128506] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T13:28:32.045 [DEBUG] [Thread-128506] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:28:32.045 [DEBUG] [Thread-128506] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:28:32.045 [DEBUG] [Thread-128506] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:28:32.045 [DEBUG] [Thread-128506] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:28:32.045 [DEBUG] [Thread-128506] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:28:32.045 [DEBUG] [Thread-128506] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:28:32.045 [DEBUG] [Thread-128506] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:28:32.045 [DEBUG] [Thread-128506] [transport.py] [_log()] client lang: <none>
2025-12-31T13:28:32.045 [DEBUG] [Thread-128506] [transport.py] [_log()] server lang: <none>
2025-12-31T13:28:32.045 [DEBUG] [Thread-128506] [transport.py] [_log()] kex follows: False
2025-12-31T13:28:32.045 [DEBUG] [Thread-128506] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:28:32.046 [DEBUG] [Thread-128506] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:28:32.046 [DEBUG] [Thread-128506] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:28:32.046 [DEBUG] [Thread-128506] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:28:32.046 [DEBUG] [Thread-128506] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:28:32.046 [DEBUG] [Thread-128506] [transport.py] [_log()] Compression: none
2025-12-31T13:28:32.046 [DEBUG] [Thread-128506] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:28:32.103 [DEBUG] [Thread-128506] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:28:32.104 [DEBUG] [Thread-128506] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:28:32.105 [DEBUG] [Thread-128506] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T13:28:32.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T13:28:32.106 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:28:32.160 [DEBUG] [Thread-128506] [transport.py] [_log()] userauth is OK
2025-12-31T13:28:32.160 [DEBUG] [Thread-128506] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:28:32.160 [DEBUG] [Thread-128506] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:28:32.161 [DEBUG] [Thread-128506] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T13:28:32.161 [DEBUG] [Thread-128506] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:28:32.179 [INFO] [Thread-128506] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:28:32.179 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T13:28:32.180 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:28:32.992 [DEBUG] [Thread-128506] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:28:32.993 [DEBUG] [Thread-128506] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:28:33.041 [DEBUG] [Thread-128506] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:28:33.041 [DEBUG] [Thread-128506] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:28:33.050 [DEBUG] [Thread-128506] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:28:33.060 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:28:33.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T13:28:33.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T13:28:33.079 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:28:33.079 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:28:33.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:28:33.087 [DEBUG] [Thread-128506] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:28:36.580 [DEBUG] [Thread-128508 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:28:50.773 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:28:50.774 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:28:51.632 [DEBUG] [Thread-128509 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:29:03.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T13:29:03.110 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T13:29: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-12-31T13:29:03.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 28, 28), 31.9, 11.43, 0.0, 23.19, 24.9, 0, 0, 0, 2, 0, 0),)
2025-12-31T13:29:03.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:28:28
2025-12-31T13:29:03.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T13:29:04.091 [DEBUG] [Thread-128510] [transport.py] [_log()] starting thread (client mode): 0xb6bb0970
2025-12-31T13:29:04.091 [DEBUG] [Thread-128510] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:29:04.111 [DEBUG] [Thread-128510] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T13:29:04.111 [INFO] [Thread-128510] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T13:29:04.115 [DEBUG] [Thread-128510] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:29:04.115 [DEBUG] [Thread-128510] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T13:29:04.115 [DEBUG] [Thread-128510] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:29:04.115 [DEBUG] [Thread-128510] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:29:04.115 [DEBUG] [Thread-128510] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:29:04.115 [DEBUG] [Thread-128510] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:29:04.115 [DEBUG] [Thread-128510] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:29:04.115 [DEBUG] [Thread-128510] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:29:04.115 [DEBUG] [Thread-128510] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:29:04.115 [DEBUG] [Thread-128510] [transport.py] [_log()] client lang: <none>
2025-12-31T13:29:04.115 [DEBUG] [Thread-128510] [transport.py] [_log()] server lang: <none>
2025-12-31T13:29:04.115 [DEBUG] [Thread-128510] [transport.py] [_log()] kex follows: False
2025-12-31T13:29:04.115 [DEBUG] [Thread-128510] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:29:04.116 [DEBUG] [Thread-128510] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:29:04.116 [DEBUG] [Thread-128510] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:29:04.116 [DEBUG] [Thread-128510] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:29:04.116 [DEBUG] [Thread-128510] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:29:04.116 [DEBUG] [Thread-128510] [transport.py] [_log()] Compression: none
2025-12-31T13:29:04.116 [DEBUG] [Thread-128510] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:29:04.134 [DEBUG] [Thread-128510] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:29:04.134 [DEBUG] [Thread-128510] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:29:04.135 [DEBUG] [Thread-128510] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T13:29:04.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T13:29:04.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:29:04.179 [DEBUG] [Thread-128510] [transport.py] [_log()] userauth is OK
2025-12-31T13:29:04.179 [DEBUG] [Thread-128510] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:29:04.179 [DEBUG] [Thread-128510] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:29:04.179 [DEBUG] [Thread-128510] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T13:29:04.179 [DEBUG] [Thread-128510] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:29:04.217 [INFO] [Thread-128510] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:29:04.219 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:29:04.814 [DEBUG] [Thread-128510] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:29:04.814 [DEBUG] [Thread-128510] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:29:04.814 [DEBUG] [Thread-128510] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T13:29:04.856 [DEBUG] [Thread-128510] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:29:04.856 [DEBUG] [Thread-128510] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:29:04.859 [DEBUG] [Thread-128510] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:29:04.873 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:29:04.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T13:29:04.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T13:29:04.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T13:29:04.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:29:04.888 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T13:29:04.888 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:29:04.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:29:04.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T13:29:04.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.478267 -999.00  +24.50  15.41     16   -2.50 1 2 1 1 1   888    0 27.53 22.98 ----- 12.4 15.4 270.6 27.7 28.6 -21.2 28.4 -21.6 27.8 -19.9 28.2 -20.5
2025-12-31T13:29:04.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T13:29:04.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T13:29:04.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.478267
2025-12-31T13:29:04.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T13:29:04.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T13:29:04.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T13:29:04.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T13:29:04.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T13:29:04.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:28:28', tmtdew=31.9, humidity=11.43, cloud=0.0, wind=23.19, temperature=24.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T11:28:42.269', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T13:29:04.891 [DEBUG] [Thread-128510] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:29:04.972 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T13:29:04.984 [DEBUG] [Thread-128513] [transport.py] [_log()] starting thread (client mode): 0xb6b63ee0
2025-12-31T13:29:04.984 [DEBUG] [Thread-128513] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:29:04.999 [DEBUG] [Thread-128513] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T13:29:04.999 [INFO] [Thread-128513] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T13:29:05.006 [DEBUG] [Thread-128513] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:29:05.007 [DEBUG] [Thread-128513] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T13:29:05.007 [DEBUG] [Thread-128513] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:29:05.007 [DEBUG] [Thread-128513] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:29:05.007 [DEBUG] [Thread-128513] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:29:05.007 [DEBUG] [Thread-128513] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:29:05.007 [DEBUG] [Thread-128513] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:29:05.008 [DEBUG] [Thread-128513] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:29:05.008 [DEBUG] [Thread-128513] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:29:05.008 [DEBUG] [Thread-128513] [transport.py] [_log()] client lang: <none>
2025-12-31T13:29:05.008 [DEBUG] [Thread-128513] [transport.py] [_log()] server lang: <none>
2025-12-31T13:29:05.008 [DEBUG] [Thread-128513] [transport.py] [_log()] kex follows: False
2025-12-31T13:29:05.008 [DEBUG] [Thread-128513] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:29:05.008 [DEBUG] [Thread-128513] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:29:05.008 [DEBUG] [Thread-128513] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:29:05.009 [DEBUG] [Thread-128513] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:29:05.009 [DEBUG] [Thread-128513] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:29:05.009 [DEBUG] [Thread-128513] [transport.py] [_log()] Compression: none
2025-12-31T13:29:05.009 [DEBUG] [Thread-128513] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:29:05.065 [DEBUG] [Thread-128513] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:29:05.065 [DEBUG] [Thread-128513] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:29:05.066 [DEBUG] [Thread-128513] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T13:29:05.066 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T13:29:05.067 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:29:05.125 [DEBUG] [Thread-128513] [transport.py] [_log()] userauth is OK
2025-12-31T13:29:05.125 [DEBUG] [Thread-128513] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:29:05.125 [DEBUG] [Thread-128513] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:29:05.125 [DEBUG] [Thread-128513] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T13:29:05.126 [DEBUG] [Thread-128513] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:29:05.144 [INFO] [Thread-128513] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:29:05.144 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T13:29:05.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:29:06.020 [DEBUG] [Thread-128513] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:29:06.021 [DEBUG] [Thread-128513] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:29:06.068 [DEBUG] [Thread-128513] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:29:06.069 [DEBUG] [Thread-128513] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:29:06.078 [DEBUG] [Thread-128513] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:29:06.087 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:29:06.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T13:29:06.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T13:29:06.105 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:29:06.105 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:29:06.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:29:06.114 [DEBUG] [Thread-128513] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:29:06.668 [DEBUG] [Thread-128515 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:29:15.477 [DEBUG] [Thread-128516 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:29:21.718 [DEBUG] [Thread-128517 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:29:36.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T13:29:36.137 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T13:29:36.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-12-31T13:29:36.751 [DEBUG] [Thread-128518 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:29:36.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 29, 32), 32.53, 10.81, 0.0, 15.86, 25.08, 0, 0, 0, 2, 0, 0),)
2025-12-31T13:29:36.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:29:32
2025-12-31T13:29:36.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T13:29:37.115 [DEBUG] [Thread-128519] [transport.py] [_log()] starting thread (client mode): 0xb6ba2770
2025-12-31T13:29:37.115 [DEBUG] [Thread-128519] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:29:37.136 [DEBUG] [Thread-128519] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T13:29:37.136 [INFO] [Thread-128519] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T13:29:37.139 [DEBUG] [Thread-128519] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:29:37.139 [DEBUG] [Thread-128519] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T13:29:37.139 [DEBUG] [Thread-128519] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:29:37.139 [DEBUG] [Thread-128519] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:29:37.139 [DEBUG] [Thread-128519] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:29:37.139 [DEBUG] [Thread-128519] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:29:37.139 [DEBUG] [Thread-128519] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:29:37.139 [DEBUG] [Thread-128519] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:29:37.139 [DEBUG] [Thread-128519] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:29:37.139 [DEBUG] [Thread-128519] [transport.py] [_log()] client lang: <none>
2025-12-31T13:29:37.139 [DEBUG] [Thread-128519] [transport.py] [_log()] server lang: <none>
2025-12-31T13:29:37.139 [DEBUG] [Thread-128519] [transport.py] [_log()] kex follows: False
2025-12-31T13:29:37.139 [DEBUG] [Thread-128519] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:29:37.139 [DEBUG] [Thread-128519] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:29:37.139 [DEBUG] [Thread-128519] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:29:37.139 [DEBUG] [Thread-128519] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:29:37.140 [DEBUG] [Thread-128519] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:29:37.140 [DEBUG] [Thread-128519] [transport.py] [_log()] Compression: none
2025-12-31T13:29:37.140 [DEBUG] [Thread-128519] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:29:37.165 [DEBUG] [Thread-128519] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:29:37.165 [DEBUG] [Thread-128519] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:29:37.166 [DEBUG] [Thread-128519] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T13:29:37.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T13:29:37.167 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:29:37.168 [DEBUG] [Thread-128519] [transport.py] [_log()] userauth is OK
2025-12-31T13:29:37.168 [DEBUG] [Thread-128519] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:29:37.168 [DEBUG] [Thread-128519] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:29:37.169 [DEBUG] [Thread-128519] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T13:29:37.169 [DEBUG] [Thread-128519] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:29:37.202 [INFO] [Thread-128519] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:29:37.203 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:29:37.934 [DEBUG] [Thread-128519] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:29:37.934 [DEBUG] [Thread-128519] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:29:37.935 [DEBUG] [Thread-128519] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T13:29:37.976 [DEBUG] [Thread-128519] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:29:37.976 [DEBUG] [Thread-128519] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:29:37.980 [DEBUG] [Thread-128519] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:29:37.991 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:29:37.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T13:29:37.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T13:29:37.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T13:29:38.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:29:38.007 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T13:29:38.007 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:29:38.007 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:29:38.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T13:29:38.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.478615 -999.00  +24.50  15.52     16   -2.40 1 2 1 1 1   888    0 27.47 25.35 ----- 16.0 15.5 271.4 17.1 28.6 -20.8 28.4 -21.3 27.6 -22.2 28.1 -20.0
2025-12-31T13:29:38.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T13:29:38.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T13:29:38.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.478615
2025-12-31T13:29:38.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T13:29:38.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T13:29:38.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T13:29:38.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T13:29:38.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T13:29:38.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:29:32', tmtdew=32.53, humidity=10.81, cloud=0.0, wind=15.86, temperature=25.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T11:29:12.336', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T13:29:38.010 [DEBUG] [Thread-128519] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:29:38.091 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T13:29:38.102 [DEBUG] [Thread-128522] [transport.py] [_log()] starting thread (client mode): 0xb6bb24d0
2025-12-31T13:29:38.102 [DEBUG] [Thread-128522] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:29:38.118 [DEBUG] [Thread-128522] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T13:29:38.118 [INFO] [Thread-128522] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T13:29:38.125 [DEBUG] [Thread-128522] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:29:38.126 [DEBUG] [Thread-128522] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T13:29:38.126 [DEBUG] [Thread-128522] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:29:38.126 [DEBUG] [Thread-128522] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:29:38.126 [DEBUG] [Thread-128522] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:29:38.126 [DEBUG] [Thread-128522] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:29:38.126 [DEBUG] [Thread-128522] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:29:38.126 [DEBUG] [Thread-128522] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:29:38.126 [DEBUG] [Thread-128522] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:29:38.126 [DEBUG] [Thread-128522] [transport.py] [_log()] client lang: <none>
2025-12-31T13:29:38.126 [DEBUG] [Thread-128522] [transport.py] [_log()] server lang: <none>
2025-12-31T13:29:38.126 [DEBUG] [Thread-128522] [transport.py] [_log()] kex follows: False
2025-12-31T13:29:38.126 [DEBUG] [Thread-128522] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:29:38.126 [DEBUG] [Thread-128522] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:29:38.126 [DEBUG] [Thread-128522] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:29:38.126 [DEBUG] [Thread-128522] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:29:38.126 [DEBUG] [Thread-128522] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:29:38.126 [DEBUG] [Thread-128522] [transport.py] [_log()] Compression: none
2025-12-31T13:29:38.126 [DEBUG] [Thread-128522] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:29:38.184 [DEBUG] [Thread-128522] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:29:38.185 [DEBUG] [Thread-128522] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:29:38.185 [DEBUG] [Thread-128522] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T13:29:38.186 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T13:29:38.186 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:29:38.241 [DEBUG] [Thread-128522] [transport.py] [_log()] userauth is OK
2025-12-31T13:29:38.241 [DEBUG] [Thread-128522] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:29:38.241 [DEBUG] [Thread-128522] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:29:38.241 [DEBUG] [Thread-128522] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T13:29:38.241 [DEBUG] [Thread-128522] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:29:38.261 [INFO] [Thread-128522] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:29:38.261 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T13:29:38.262 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:29:39.093 [DEBUG] [Thread-128522] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:29:39.093 [DEBUG] [Thread-128522] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:29:39.141 [DEBUG] [Thread-128522] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:29:39.141 [DEBUG] [Thread-128522] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:29:39.150 [DEBUG] [Thread-128522] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:29:39.159 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:29: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')
2025-12-31T13:29:39.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T13:29:39.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:29:39.178 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:29:39.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:29:39.186 [DEBUG] [Thread-128522] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:29:50.914 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:29:50.915 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:29:51.789 [DEBUG] [Thread-128524 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:30:06.833 [DEBUG] [Thread-128525 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:30:09.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T13:30:09.191 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T13:30:09.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T13:30:09.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 30, 4), 32.43, 10.89, 0.0, 21.39, 25.06, 0, 0, 0, 2, 0, 0),)
2025-12-31T13:30:09.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:30:04
2025-12-31T13:30:10.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T13:30:10.182 [DEBUG] [Thread-128526] [transport.py] [_log()] starting thread (client mode): 0xb6bbe440
2025-12-31T13:30:10.182 [DEBUG] [Thread-128526] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:30:10.203 [DEBUG] [Thread-128526] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T13:30:10.203 [INFO] [Thread-128526] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T13:30:10.206 [DEBUG] [Thread-128526] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:30:10.207 [DEBUG] [Thread-128526] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T13:30:10.207 [DEBUG] [Thread-128526] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:30:10.207 [DEBUG] [Thread-128526] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:30:10.207 [DEBUG] [Thread-128526] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:30:10.207 [DEBUG] [Thread-128526] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:30:10.207 [DEBUG] [Thread-128526] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:30:10.207 [DEBUG] [Thread-128526] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:30:10.207 [DEBUG] [Thread-128526] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:30:10.207 [DEBUG] [Thread-128526] [transport.py] [_log()] client lang: <none>
2025-12-31T13:30:10.207 [DEBUG] [Thread-128526] [transport.py] [_log()] server lang: <none>
2025-12-31T13:30:10.207 [DEBUG] [Thread-128526] [transport.py] [_log()] kex follows: False
2025-12-31T13:30:10.207 [DEBUG] [Thread-128526] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:30:10.207 [DEBUG] [Thread-128526] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:30:10.207 [DEBUG] [Thread-128526] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:30:10.207 [DEBUG] [Thread-128526] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:30:10.207 [DEBUG] [Thread-128526] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:30:10.207 [DEBUG] [Thread-128526] [transport.py] [_log()] Compression: none
2025-12-31T13:30:10.207 [DEBUG] [Thread-128526] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:30:10.222 [DEBUG] [Thread-128526] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:30:10.223 [DEBUG] [Thread-128526] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:30:10.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T13:30:10.224 [DEBUG] [Thread-128526] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T13:30:10.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:30:10.226 [DEBUG] [Thread-128526] [transport.py] [_log()] userauth is OK
2025-12-31T13:30:10.226 [DEBUG] [Thread-128526] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:30:10.226 [DEBUG] [Thread-128526] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:30:10.226 [DEBUG] [Thread-128526] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T13:30:10.226 [DEBUG] [Thread-128526] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:30:10.252 [INFO] [Thread-128526] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:30:10.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:30:13.340 [DEBUG] [Thread-128526] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:30:13.340 [DEBUG] [Thread-128526] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:30:13.340 [DEBUG] [Thread-128526] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T13:30:13.381 [DEBUG] [Thread-128526] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:30:13.381 [DEBUG] [Thread-128526] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:30:13.385 [DEBUG] [Thread-128526] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:30:13.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:30:13.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T13:30:13.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T13:30:13.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T13:30:13.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:30:13.419 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T13:30:13.419 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:30:13.419 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:30:13.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T13:30:13.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.478962 -999.00  +24.70  26.92     16   -2.50 1 2 1 1 1   888    0 27.61 26.79 ----- 34.6 26.9 279.0 31.5 28.6 -21.0 28.4 -21.5 27.6 -21.3 28.2 -19.7
2025-12-31T13:30:13.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T13:30:13.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T13:30:13.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.478962
2025-12-31T13:30:13.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T13:30:13.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T13:30:13.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T13:30:13.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T13:30:13.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T13:30:13.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:30:04', tmtdew=32.43, humidity=10.89, cloud=0.0, wind=21.39, temperature=25.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T11:29:42.317', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T13:30:13.423 [DEBUG] [Thread-128526] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:30:13.505 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T13:30:13.518 [DEBUG] [Thread-128529] [transport.py] [_log()] starting thread (client mode): 0xb9559c30
2025-12-31T13:30:13.519 [DEBUG] [Thread-128529] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:30:13.533 [DEBUG] [Thread-128529] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T13:30:13.533 [INFO] [Thread-128529] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T13:30:13.541 [DEBUG] [Thread-128529] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:30:13.541 [DEBUG] [Thread-128529] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T13:30:13.542 [DEBUG] [Thread-128529] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:30:13.542 [DEBUG] [Thread-128529] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:30:13.542 [DEBUG] [Thread-128529] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:30:13.542 [DEBUG] [Thread-128529] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:30:13.542 [DEBUG] [Thread-128529] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:30:13.542 [DEBUG] [Thread-128529] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:30:13.542 [DEBUG] [Thread-128529] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:30:13.542 [DEBUG] [Thread-128529] [transport.py] [_log()] client lang: <none>
2025-12-31T13:30:13.542 [DEBUG] [Thread-128529] [transport.py] [_log()] server lang: <none>
2025-12-31T13:30:13.543 [DEBUG] [Thread-128529] [transport.py] [_log()] kex follows: False
2025-12-31T13:30:13.543 [DEBUG] [Thread-128529] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:30:13.543 [DEBUG] [Thread-128529] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:30:13.543 [DEBUG] [Thread-128529] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:30:13.543 [DEBUG] [Thread-128529] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:30:13.543 [DEBUG] [Thread-128529] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:30:13.543 [DEBUG] [Thread-128529] [transport.py] [_log()] Compression: none
2025-12-31T13:30:13.544 [DEBUG] [Thread-128529] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:30:13.601 [DEBUG] [Thread-128529] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:30:13.602 [DEBUG] [Thread-128529] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:30:13.602 [DEBUG] [Thread-128529] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T13:30:13.603 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T13:30:13.603 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:30:13.657 [DEBUG] [Thread-128529] [transport.py] [_log()] userauth is OK
2025-12-31T13:30:13.657 [DEBUG] [Thread-128529] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:30:13.657 [DEBUG] [Thread-128529] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:30:13.657 [DEBUG] [Thread-128529] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T13:30:13.658 [DEBUG] [Thread-128529] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:30:13.677 [INFO] [Thread-128529] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:30:13.678 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T13:30:13.678 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:30:14.577 [DEBUG] [Thread-128529] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:30:14.577 [DEBUG] [Thread-128529] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:30:14.625 [DEBUG] [Thread-128529] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:30:14.625 [DEBUG] [Thread-128529] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:30:14.634 [DEBUG] [Thread-128529] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:30:14.644 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:30:14.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T13:30:14.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T13:30:14.662 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:30:14.662 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:30:14.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:30:14.671 [DEBUG] [Thread-128529] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:30:15.519 [DEBUG] [Thread-128531 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:30:21.873 [DEBUG] [Thread-128532 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:30:36.923 [DEBUG] [Thread-128533 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:30:44.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T13:30:44.694 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T13:30:44.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-12-31T13:30:45.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 30, 36), 32.91, 10.58, 0.0, 36.58, 25.16, 0, 0, 0, 2, 0, 0),)
2025-12-31T13:30:45.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:30:36
2025-12-31T13:30:45.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T13:30:45.674 [DEBUG] [Thread-128534] [transport.py] [_log()] starting thread (client mode): 0xb6bbd090
2025-12-31T13:30:45.675 [DEBUG] [Thread-128534] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:30:45.696 [DEBUG] [Thread-128534] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T13:30:45.696 [INFO] [Thread-128534] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T13:30:45.700 [DEBUG] [Thread-128534] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:30:45.700 [DEBUG] [Thread-128534] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T13:30:45.700 [DEBUG] [Thread-128534] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:30:45.700 [DEBUG] [Thread-128534] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:30:45.700 [DEBUG] [Thread-128534] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:30:45.700 [DEBUG] [Thread-128534] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:30:45.701 [DEBUG] [Thread-128534] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:30:45.701 [DEBUG] [Thread-128534] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:30:45.701 [DEBUG] [Thread-128534] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:30:45.701 [DEBUG] [Thread-128534] [transport.py] [_log()] client lang: <none>
2025-12-31T13:30:45.701 [DEBUG] [Thread-128534] [transport.py] [_log()] server lang: <none>
2025-12-31T13:30:45.701 [DEBUG] [Thread-128534] [transport.py] [_log()] kex follows: False
2025-12-31T13:30:45.701 [DEBUG] [Thread-128534] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:30:45.701 [DEBUG] [Thread-128534] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:30:45.701 [DEBUG] [Thread-128534] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:30:45.701 [DEBUG] [Thread-128534] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:30:45.701 [DEBUG] [Thread-128534] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:30:45.701 [DEBUG] [Thread-128534] [transport.py] [_log()] Compression: none
2025-12-31T13:30:45.701 [DEBUG] [Thread-128534] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:30:45.720 [DEBUG] [Thread-128534] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:30:45.720 [DEBUG] [Thread-128534] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:30:45.721 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T13:30:45.721 [DEBUG] [Thread-128534] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T13:30:45.722 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:30:45.724 [DEBUG] [Thread-128534] [transport.py] [_log()] userauth is OK
2025-12-31T13:30:45.724 [DEBUG] [Thread-128534] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:30:45.724 [DEBUG] [Thread-128534] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:30:45.724 [DEBUG] [Thread-128534] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T13:30:45.724 [DEBUG] [Thread-128534] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:30:45.735 [INFO] [Thread-128534] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:30:45.736 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:30:46.380 [DEBUG] [Thread-128534] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:30:46.380 [DEBUG] [Thread-128534] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:30:46.381 [DEBUG] [Thread-128534] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T13:30:46.421 [DEBUG] [Thread-128534] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:30:46.421 [DEBUG] [Thread-128534] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:30:46.425 [DEBUG] [Thread-128534] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:30:46.437 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:30:46.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T13:30:46.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T13:30:46.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T13:30:46.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:30:46.455 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T13:30:46.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:30:46.455 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:30:46.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T13:30:46.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.479309 -999.00  +24.60  34.88     16   -2.50 1 2 2 1 1   888    0 27.85 29.11 ----- 28.9 34.9 269.2 43.7 28.5 -23.8 28.3 -23.5 27.4 -22.1 28.1 -22.5
2025-12-31T13:30:46.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T13:30:46.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T13:30:46.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.479309
2025-12-31T13:30:46.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T13:30:46.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T13:30:46.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T13:30:46.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T13:30:46.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T13:30:46.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:30:36', tmtdew=32.91, humidity=10.58, cloud=0.0, wind=36.58, temperature=25.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T11:30:12.298', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T13:30:46.459 [DEBUG] [Thread-128534] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:30:46.543 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T13:30:46.555 [DEBUG] [Thread-128537] [transport.py] [_log()] starting thread (client mode): 0xb6bbf9d0
2025-12-31T13:30:46.555 [DEBUG] [Thread-128537] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:30:46.569 [DEBUG] [Thread-128537] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T13:30:46.569 [INFO] [Thread-128537] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T13:30:46.577 [DEBUG] [Thread-128537] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:30:46.577 [DEBUG] [Thread-128537] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T13:30:46.577 [DEBUG] [Thread-128537] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:30:46.577 [DEBUG] [Thread-128537] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:30:46.577 [DEBUG] [Thread-128537] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:30:46.577 [DEBUG] [Thread-128537] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:30:46.578 [DEBUG] [Thread-128537] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:30:46.578 [DEBUG] [Thread-128537] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:30:46.578 [DEBUG] [Thread-128537] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:30:46.578 [DEBUG] [Thread-128537] [transport.py] [_log()] client lang: <none>
2025-12-31T13:30:46.578 [DEBUG] [Thread-128537] [transport.py] [_log()] server lang: <none>
2025-12-31T13:30:46.578 [DEBUG] [Thread-128537] [transport.py] [_log()] kex follows: False
2025-12-31T13:30:46.578 [DEBUG] [Thread-128537] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:30:46.578 [DEBUG] [Thread-128537] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:30:46.578 [DEBUG] [Thread-128537] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:30:46.578 [DEBUG] [Thread-128537] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:30:46.578 [DEBUG] [Thread-128537] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:30:46.579 [DEBUG] [Thread-128537] [transport.py] [_log()] Compression: none
2025-12-31T13:30:46.579 [DEBUG] [Thread-128537] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:30:46.642 [DEBUG] [Thread-128537] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:30:46.642 [DEBUG] [Thread-128537] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:30:46.643 [DEBUG] [Thread-128537] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T13:30:46.643 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T13:30:46.644 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:30:46.701 [DEBUG] [Thread-128537] [transport.py] [_log()] userauth is OK
2025-12-31T13:30:46.701 [DEBUG] [Thread-128537] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:30:46.702 [DEBUG] [Thread-128537] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:30:46.702 [DEBUG] [Thread-128537] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T13:30:46.702 [DEBUG] [Thread-128537] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:30:46.720 [INFO] [Thread-128537] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:30:46.721 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T13:30:46.723 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:30:47.584 [DEBUG] [Thread-128537] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:30:47.584 [DEBUG] [Thread-128537] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:30:47.632 [DEBUG] [Thread-128537] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:30:47.632 [DEBUG] [Thread-128537] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:30:47.641 [DEBUG] [Thread-128537] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:30:47.651 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:30:47.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T13:30:47.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T13:30:47.670 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:30:47.670 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:30:47.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:30:47.679 [DEBUG] [Thread-128537] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:30:51.055 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:30:51.057 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:30:51.955 [DEBUG] [Thread-128539 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:31:07.013 [DEBUG] [Thread-128540 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:31:15.565 [DEBUG] [Thread-128541 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:31:17.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T13:31:17.687 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T13:31:17.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T13:31:18.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 31, 8), 32.82, 10.65, 0.0, 34.49, 25.13, 0, 0, 0, 2, 0, 0),)
2025-12-31T13:31:18.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:31:08
2025-12-31T13:31:18.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T13:31:18.680 [DEBUG] [Thread-128542] [transport.py] [_log()] starting thread (client mode): 0xb6bbeaa0
2025-12-31T13:31:18.680 [DEBUG] [Thread-128542] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:31:18.691 [DEBUG] [Thread-128542] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T13:31:18.691 [INFO] [Thread-128542] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T13:31:18.696 [DEBUG] [Thread-128542] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:31:18.696 [DEBUG] [Thread-128542] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T13:31:18.696 [DEBUG] [Thread-128542] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:31:18.696 [DEBUG] [Thread-128542] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:31:18.696 [DEBUG] [Thread-128542] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:31:18.696 [DEBUG] [Thread-128542] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:31:18.696 [DEBUG] [Thread-128542] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:31:18.696 [DEBUG] [Thread-128542] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:31:18.696 [DEBUG] [Thread-128542] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:31:18.696 [DEBUG] [Thread-128542] [transport.py] [_log()] client lang: <none>
2025-12-31T13:31:18.696 [DEBUG] [Thread-128542] [transport.py] [_log()] server lang: <none>
2025-12-31T13:31:18.697 [DEBUG] [Thread-128542] [transport.py] [_log()] kex follows: False
2025-12-31T13:31:18.697 [DEBUG] [Thread-128542] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:31:18.697 [DEBUG] [Thread-128542] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:31:18.697 [DEBUG] [Thread-128542] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:31:18.697 [DEBUG] [Thread-128542] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:31:18.697 [DEBUG] [Thread-128542] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:31:18.697 [DEBUG] [Thread-128542] [transport.py] [_log()] Compression: none
2025-12-31T13:31:18.697 [DEBUG] [Thread-128542] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:31:18.707 [DEBUG] [Thread-128542] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:31:18.707 [DEBUG] [Thread-128542] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:31:18.707 [DEBUG] [Thread-128542] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T13:31:18.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T13:31:18.708 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:31:18.713 [DEBUG] [Thread-128542] [transport.py] [_log()] userauth is OK
2025-12-31T13:31:18.713 [DEBUG] [Thread-128542] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:31:18.713 [DEBUG] [Thread-128542] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:31:18.713 [DEBUG] [Thread-128542] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T13:31:18.713 [DEBUG] [Thread-128542] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:31:18.732 [INFO] [Thread-128542] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:31:18.732 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:31:19.429 [DEBUG] [Thread-128542] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:31:19.429 [DEBUG] [Thread-128542] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:31:19.429 [DEBUG] [Thread-128542] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T13:31:19.470 [DEBUG] [Thread-128542] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:31:19.470 [DEBUG] [Thread-128542] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:31:19.473 [DEBUG] [Thread-128542] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:31:19.484 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:31:19.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T13:31:19.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T13:31:19.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T13:31:19.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:31:19.495 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T13:31:19.495 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:31:19.495 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:31:19.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T13:31:19.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.479656 -999.00  +24.60  26.15     16   -2.60 1 2 1 1 1   888    0 27.81 33.19 ----- 26.3 26.1 274.8 35.6 28.5 -21.0 28.3 -23.1 27.6 -19.3 28.2 -19.6
2025-12-31T13:31:19.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T13:31:19.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T13:31:19.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.479656
2025-12-31T13:31:19.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T13:31:19.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T13:31:19.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T13:31:19.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T13:31:19.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T13:31:19.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:31:08', tmtdew=32.82, humidity=10.65, cloud=0.0, wind=34.49, temperature=25.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T11:30:42.278', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T13:31:19.499 [DEBUG] [Thread-128542] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:31:19.582 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T13:31:19.594 [DEBUG] [Thread-128545] [transport.py] [_log()] starting thread (client mode): 0xb6bbd060
2025-12-31T13:31:19.594 [DEBUG] [Thread-128545] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:31:19.609 [DEBUG] [Thread-128545] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T13:31:19.609 [INFO] [Thread-128545] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T13:31:19.616 [DEBUG] [Thread-128545] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:31:19.617 [DEBUG] [Thread-128545] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T13:31:19.617 [DEBUG] [Thread-128545] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:31:19.617 [DEBUG] [Thread-128545] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:31:19.617 [DEBUG] [Thread-128545] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:31:19.617 [DEBUG] [Thread-128545] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:31:19.617 [DEBUG] [Thread-128545] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:31:19.617 [DEBUG] [Thread-128545] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:31:19.617 [DEBUG] [Thread-128545] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:31:19.617 [DEBUG] [Thread-128545] [transport.py] [_log()] client lang: <none>
2025-12-31T13:31:19.617 [DEBUG] [Thread-128545] [transport.py] [_log()] server lang: <none>
2025-12-31T13:31:19.617 [DEBUG] [Thread-128545] [transport.py] [_log()] kex follows: False
2025-12-31T13:31:19.617 [DEBUG] [Thread-128545] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:31:19.617 [DEBUG] [Thread-128545] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:31:19.617 [DEBUG] [Thread-128545] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:31:19.617 [DEBUG] [Thread-128545] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:31:19.617 [DEBUG] [Thread-128545] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:31:19.617 [DEBUG] [Thread-128545] [transport.py] [_log()] Compression: none
2025-12-31T13:31:19.618 [DEBUG] [Thread-128545] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:31:19.673 [DEBUG] [Thread-128545] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:31:19.674 [DEBUG] [Thread-128545] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:31:19.674 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T13:31:19.675 [DEBUG] [Thread-128545] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T13:31:19.676 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:31:19.730 [DEBUG] [Thread-128545] [transport.py] [_log()] userauth is OK
2025-12-31T13:31:19.730 [DEBUG] [Thread-128545] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:31:19.730 [DEBUG] [Thread-128545] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:31:19.730 [DEBUG] [Thread-128545] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T13:31:19.731 [DEBUG] [Thread-128545] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:31:19.754 [INFO] [Thread-128545] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:31:19.755 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T13:31:19.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:31:20.595 [DEBUG] [Thread-128545] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:31:20.596 [DEBUG] [Thread-128545] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:31:20.644 [DEBUG] [Thread-128545] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:31:20.644 [DEBUG] [Thread-128545] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:31:20.653 [DEBUG] [Thread-128545] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:31:20.662 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:31:20.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T13:31:20.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T13:31:20.681 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:31:20.681 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:31:20.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:31:20.690 [DEBUG] [Thread-128545] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:31:22.045 [DEBUG] [Thread-128547 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:31:37.107 [DEBUG] [Thread-128548 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:31:50.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T13:31:50.712 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T13:31:50.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T13:31:51.195 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:31:51.195 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:31:51.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 31, 40), 33.16, 10.55, 0.0, 32.25, 25.59, 0, 0, 0, 2, 0, 0),)
2025-12-31T13:31:51.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:31:40
2025-12-31T13:31:51.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T13:31:51.758 [DEBUG] [Thread-128549] [transport.py] [_log()] starting thread (client mode): 0xb6bbe800
2025-12-31T13:31:51.758 [DEBUG] [Thread-128549] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:31:51.778 [DEBUG] [Thread-128549] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T13:31:51.778 [INFO] [Thread-128549] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T13:31:51.781 [DEBUG] [Thread-128549] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:31:51.781 [DEBUG] [Thread-128549] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T13:31:51.781 [DEBUG] [Thread-128549] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:31:51.781 [DEBUG] [Thread-128549] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:31:51.781 [DEBUG] [Thread-128549] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:31:51.781 [DEBUG] [Thread-128549] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:31:51.781 [DEBUG] [Thread-128549] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:31:51.781 [DEBUG] [Thread-128549] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:31:51.781 [DEBUG] [Thread-128549] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:31:51.781 [DEBUG] [Thread-128549] [transport.py] [_log()] client lang: <none>
2025-12-31T13:31:51.781 [DEBUG] [Thread-128549] [transport.py] [_log()] server lang: <none>
2025-12-31T13:31:51.781 [DEBUG] [Thread-128549] [transport.py] [_log()] kex follows: False
2025-12-31T13:31:51.781 [DEBUG] [Thread-128549] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:31:51.781 [DEBUG] [Thread-128549] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:31:51.781 [DEBUG] [Thread-128549] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:31:51.781 [DEBUG] [Thread-128549] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:31:51.781 [DEBUG] [Thread-128549] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:31:51.781 [DEBUG] [Thread-128549] [transport.py] [_log()] Compression: none
2025-12-31T13:31:51.781 [DEBUG] [Thread-128549] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:31:51.797 [DEBUG] [Thread-128549] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:31:51.797 [DEBUG] [Thread-128549] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:31:51.797 [DEBUG] [Thread-128549] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T13:31:51.797 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T13:31:51.797 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:31:51.798 [DEBUG] [Thread-128549] [transport.py] [_log()] userauth is OK
2025-12-31T13:31:51.798 [DEBUG] [Thread-128549] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:31:51.798 [DEBUG] [Thread-128549] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:31:51.798 [DEBUG] [Thread-128549] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T13:31:51.798 [DEBUG] [Thread-128549] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:31:51.813 [INFO] [Thread-128549] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:31:51.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:31:52.141 [DEBUG] [Thread-128551 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:31:52.464 [DEBUG] [Thread-128549] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:31:52.464 [DEBUG] [Thread-128549] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:31:52.464 [DEBUG] [Thread-128549] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T13:31:52.505 [DEBUG] [Thread-128549] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:31:52.505 [DEBUG] [Thread-128549] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:31:52.507 [DEBUG] [Thread-128549] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:31:52.519 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:31:52.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T13:31:52.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T13:31:52.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T13:31:52.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:31:52.525 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T13:31:52.525 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:31:52.525 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:31:52.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T13:31:52.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.480003 -999.00  +24.80  27.79     16   -2.40 1 2 1 1 1   888    0 27.91 33.52 ----- 28.2 27.8 289.8 34.9 28.8 -19.6 28.6 -20.2 28.1 -18.9 28.4 -18.3
2025-12-31T13:31:52.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T13:31:52.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T13:31:52.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.480003
2025-12-31T13:31:52.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T13:31:52.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T13:31:52.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T13:31:52.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T13:31:52.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T13:31:52.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:31:40', tmtdew=33.16, humidity=10.55, cloud=0.0, wind=32.25, temperature=25.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T11:31:12.259', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T13:31:52.526 [DEBUG] [Thread-128549] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:31:52.600 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T13:31:52.612 [DEBUG] [Thread-128553] [transport.py] [_log()] starting thread (client mode): 0xb6bb04f0
2025-12-31T13:31:52.612 [DEBUG] [Thread-128553] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:31:52.630 [DEBUG] [Thread-128553] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T13:31:52.630 [INFO] [Thread-128553] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T13:31:52.637 [DEBUG] [Thread-128553] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:31:52.637 [DEBUG] [Thread-128553] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T13:31:52.637 [DEBUG] [Thread-128553] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:31:52.637 [DEBUG] [Thread-128553] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:31:52.637 [DEBUG] [Thread-128553] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:31:52.637 [DEBUG] [Thread-128553] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:31:52.637 [DEBUG] [Thread-128553] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:31:52.637 [DEBUG] [Thread-128553] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:31:52.637 [DEBUG] [Thread-128553] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:31:52.637 [DEBUG] [Thread-128553] [transport.py] [_log()] client lang: <none>
2025-12-31T13:31:52.637 [DEBUG] [Thread-128553] [transport.py] [_log()] server lang: <none>
2025-12-31T13:31:52.637 [DEBUG] [Thread-128553] [transport.py] [_log()] kex follows: False
2025-12-31T13:31:52.637 [DEBUG] [Thread-128553] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:31:52.637 [DEBUG] [Thread-128553] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:31:52.637 [DEBUG] [Thread-128553] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:31:52.637 [DEBUG] [Thread-128553] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:31:52.638 [DEBUG] [Thread-128553] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:31:52.638 [DEBUG] [Thread-128553] [transport.py] [_log()] Compression: none
2025-12-31T13:31:52.638 [DEBUG] [Thread-128553] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:31:52.691 [DEBUG] [Thread-128553] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:31:52.692 [DEBUG] [Thread-128553] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:31:52.692 [DEBUG] [Thread-128553] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T13:31:52.692 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T13:31:52.692 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:31:52.749 [DEBUG] [Thread-128553] [transport.py] [_log()] userauth is OK
2025-12-31T13:31:52.749 [DEBUG] [Thread-128553] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:31:52.749 [DEBUG] [Thread-128553] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:31:52.749 [DEBUG] [Thread-128553] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T13:31:52.749 [DEBUG] [Thread-128553] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:31:52.763 [INFO] [Thread-128553] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:31:52.763 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T13:31:52.763 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:31:53.646 [DEBUG] [Thread-128553] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:31:53.646 [DEBUG] [Thread-128553] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:31:53.695 [DEBUG] [Thread-128553] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:31:53.695 [DEBUG] [Thread-128553] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:31:53.703 [DEBUG] [Thread-128553] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:31:53.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:31:53.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T13:31:53.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T13:31:53.732 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:31:53.732 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:31:53.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:31:53.741 [DEBUG] [Thread-128553] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:32:07.172 [DEBUG] [Thread-128555 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:32:15.623 [DEBUG] [Thread-128556 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:32:22.224 [DEBUG] [Thread-128557 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:32:23.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T13:32:23.761 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T13:32:23.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T13:32:24.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 32, 12), 33.38, 10.4, 0.0, 30.9, 25.69, 0, 0, 0, 2, 0, 0),)
2025-12-31T13:32:24.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:32:12
2025-12-31T13:32:24.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T13:32:24.758 [DEBUG] [Thread-128558] [transport.py] [_log()] starting thread (client mode): 0xb6bbce80
2025-12-31T13:32:24.758 [DEBUG] [Thread-128558] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:32:24.778 [DEBUG] [Thread-128558] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T13:32:24.779 [INFO] [Thread-128558] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T13:32:24.779 [DEBUG] [Thread-128558] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:32:24.780 [DEBUG] [Thread-128558] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T13:32:24.780 [DEBUG] [Thread-128558] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:32:24.780 [DEBUG] [Thread-128558] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:32:24.780 [DEBUG] [Thread-128558] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:32:24.780 [DEBUG] [Thread-128558] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:32:24.780 [DEBUG] [Thread-128558] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:32:24.780 [DEBUG] [Thread-128558] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:32:24.780 [DEBUG] [Thread-128558] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:32:24.780 [DEBUG] [Thread-128558] [transport.py] [_log()] client lang: <none>
2025-12-31T13:32:24.780 [DEBUG] [Thread-128558] [transport.py] [_log()] server lang: <none>
2025-12-31T13:32:24.780 [DEBUG] [Thread-128558] [transport.py] [_log()] kex follows: False
2025-12-31T13:32:24.780 [DEBUG] [Thread-128558] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:32:24.780 [DEBUG] [Thread-128558] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:32:24.780 [DEBUG] [Thread-128558] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:32:24.780 [DEBUG] [Thread-128558] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:32:24.780 [DEBUG] [Thread-128558] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:32:24.781 [DEBUG] [Thread-128558] [transport.py] [_log()] Compression: none
2025-12-31T13:32:24.781 [DEBUG] [Thread-128558] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:32:24.790 [DEBUG] [Thread-128558] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:32:24.791 [DEBUG] [Thread-128558] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:32:24.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T13:32:24.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:32:24.793 [DEBUG] [Thread-128558] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T13:32:24.794 [DEBUG] [Thread-128558] [transport.py] [_log()] userauth is OK
2025-12-31T13:32:24.794 [DEBUG] [Thread-128558] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:32:24.794 [DEBUG] [Thread-128558] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:32:24.794 [DEBUG] [Thread-128558] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T13:32:24.794 [DEBUG] [Thread-128558] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:32:24.828 [INFO] [Thread-128558] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:32:24.829 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:32:25.515 [DEBUG] [Thread-128558] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:32:25.515 [DEBUG] [Thread-128558] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:32:25.516 [DEBUG] [Thread-128558] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T13:32:25.556 [DEBUG] [Thread-128558] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:32:25.556 [DEBUG] [Thread-128558] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:32:25.559 [DEBUG] [Thread-128558] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:32:25.571 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:32:25.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T13:32:25.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T13:32:25.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T13:32:25.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:32:25.580 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T13:32:25.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:32:25.581 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:32:25.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T13:32:25.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.480351 -999.00  +24.80  24.04     15   -2.70 1 2 1 1 1   888    0 28.39 39.20 ----- 22.4 24.0 282.4 33.5 29.1 -20.4 28.8 -20.4 28.3 -20.4 28.8 -17.7
2025-12-31T13:32:25.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T13:32:25.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T13:32:25.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.480351
2025-12-31T13:32:25.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T13:32:25.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T13:32:25.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T13:32:25.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T13:32:25.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T13:32:25.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:32:12', tmtdew=33.38, humidity=10.4, cloud=0.0, wind=30.9, temperature=25.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T11:31:42.326', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T13:32:25.583 [DEBUG] [Thread-128558] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:32:25.672 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T13:32:25.683 [DEBUG] [Thread-128561] [transport.py] [_log()] starting thread (client mode): 0xb6bbeec0
2025-12-31T13:32:25.683 [DEBUG] [Thread-128561] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:32:25.697 [DEBUG] [Thread-128561] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T13:32:25.697 [INFO] [Thread-128561] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T13:32:25.704 [DEBUG] [Thread-128561] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:32:25.704 [DEBUG] [Thread-128561] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T13:32:25.704 [DEBUG] [Thread-128561] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:32:25.704 [DEBUG] [Thread-128561] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:32:25.704 [DEBUG] [Thread-128561] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:32:25.704 [DEBUG] [Thread-128561] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:32:25.704 [DEBUG] [Thread-128561] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:32:25.704 [DEBUG] [Thread-128561] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:32:25.705 [DEBUG] [Thread-128561] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:32:25.705 [DEBUG] [Thread-128561] [transport.py] [_log()] client lang: <none>
2025-12-31T13:32:25.705 [DEBUG] [Thread-128561] [transport.py] [_log()] server lang: <none>
2025-12-31T13:32:25.705 [DEBUG] [Thread-128561] [transport.py] [_log()] kex follows: False
2025-12-31T13:32:25.705 [DEBUG] [Thread-128561] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:32:25.705 [DEBUG] [Thread-128561] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:32:25.705 [DEBUG] [Thread-128561] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:32:25.705 [DEBUG] [Thread-128561] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:32:25.705 [DEBUG] [Thread-128561] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:32:25.705 [DEBUG] [Thread-128561] [transport.py] [_log()] Compression: none
2025-12-31T13:32:25.705 [DEBUG] [Thread-128561] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:32:25.765 [DEBUG] [Thread-128561] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:32:25.766 [DEBUG] [Thread-128561] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:32:25.766 [DEBUG] [Thread-128561] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T13:32:25.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T13:32:25.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:32:25.821 [DEBUG] [Thread-128561] [transport.py] [_log()] userauth is OK
2025-12-31T13:32:25.822 [DEBUG] [Thread-128561] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:32:25.822 [DEBUG] [Thread-128561] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:32:25.822 [DEBUG] [Thread-128561] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T13:32:25.822 [DEBUG] [Thread-128561] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:32:25.835 [INFO] [Thread-128561] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:32:25.836 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T13:32:25.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:32:26.703 [DEBUG] [Thread-128561] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:32:26.703 [DEBUG] [Thread-128561] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:32:26.751 [DEBUG] [Thread-128561] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:32:26.751 [DEBUG] [Thread-128561] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:32:26.760 [DEBUG] [Thread-128561] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:32:26.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:32:26.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T13:32:26.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T13:32:26.788 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:32:26.789 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:32:26.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:32:26.797 [DEBUG] [Thread-128561] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:32:37.256 [DEBUG] [Thread-128563 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:32:51.335 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:32:51.336 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:32:52.313 [DEBUG] [Thread-128564 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:32:56.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T13:32:56.820 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T13:32:56.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T13:32:57.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 32, 44), 33.47, 10.3, 0.0, 21.4, 25.53, 0, 0, 0, 2, 0, 0),)
2025-12-31T13:32:57.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:32:44
2025-12-31T13:32:57.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T13:32:57.805 [DEBUG] [Thread-128565] [transport.py] [_log()] starting thread (client mode): 0xb6bbee90
2025-12-31T13:32:57.805 [DEBUG] [Thread-128565] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:32:57.826 [DEBUG] [Thread-128565] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T13:32:57.826 [INFO] [Thread-128565] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T13:32:57.829 [DEBUG] [Thread-128565] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:32:57.829 [DEBUG] [Thread-128565] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T13:32:57.829 [DEBUG] [Thread-128565] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:32:57.830 [DEBUG] [Thread-128565] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:32:57.830 [DEBUG] [Thread-128565] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:32:57.830 [DEBUG] [Thread-128565] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:32:57.830 [DEBUG] [Thread-128565] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:32:57.830 [DEBUG] [Thread-128565] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:32:57.830 [DEBUG] [Thread-128565] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:32:57.830 [DEBUG] [Thread-128565] [transport.py] [_log()] client lang: <none>
2025-12-31T13:32:57.830 [DEBUG] [Thread-128565] [transport.py] [_log()] server lang: <none>
2025-12-31T13:32:57.830 [DEBUG] [Thread-128565] [transport.py] [_log()] kex follows: False
2025-12-31T13:32:57.830 [DEBUG] [Thread-128565] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:32:57.830 [DEBUG] [Thread-128565] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:32:57.830 [DEBUG] [Thread-128565] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:32:57.830 [DEBUG] [Thread-128565] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:32:57.830 [DEBUG] [Thread-128565] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:32:57.830 [DEBUG] [Thread-128565] [transport.py] [_log()] Compression: none
2025-12-31T13:32:57.830 [DEBUG] [Thread-128565] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:32:57.848 [DEBUG] [Thread-128565] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:32:57.849 [DEBUG] [Thread-128565] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:32:57.849 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T13:32:57.849 [DEBUG] [Thread-128565] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T13:32:57.850 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:32:57.851 [DEBUG] [Thread-128565] [transport.py] [_log()] userauth is OK
2025-12-31T13:32:57.851 [DEBUG] [Thread-128565] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:32:57.851 [DEBUG] [Thread-128565] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:32:57.851 [DEBUG] [Thread-128565] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T13:32:57.851 [DEBUG] [Thread-128565] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:32:57.884 [INFO] [Thread-128565] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:32:57.885 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:32:58.486 [DEBUG] [Thread-128565] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:32:58.487 [DEBUG] [Thread-128565] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:32:58.487 [DEBUG] [Thread-128565] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T13:32:58.528 [DEBUG] [Thread-128565] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:32:58.528 [DEBUG] [Thread-128565] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:32:58.531 [DEBUG] [Thread-128565] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:32:58.544 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:32:58.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T13:32:58.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T13:32:58.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T13:32:58.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:32:58.555 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T13:32:58.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:32:58.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:32:58.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T13:32:58.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.480698 -999.00  +24.90  24.52     16   -2.60 1 2 1 1 1   888    0 28.14 44.46 ----- 21.3 24.5 281.4 25.3 29.2 -22.5 28.8 -22.9 28.4 -21.3 29.0 -20.1
2025-12-31T13:32:58.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T13:32:58.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T13:32:58.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.480698
2025-12-31T13:32:58.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T13:32:58.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T13:32:58.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T13:32:58.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T13:32:58.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T13:32:58.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:32:44', tmtdew=33.47, humidity=10.3, cloud=0.0, wind=21.4, temperature=25.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T11:32:12.307', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T13:32:58.558 [DEBUG] [Thread-128565] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:32:58.642 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T13:32:58.654 [DEBUG] [Thread-128568] [transport.py] [_log()] starting thread (client mode): 0xb6bbec20
2025-12-31T13:32:58.654 [DEBUG] [Thread-128568] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:32:58.669 [DEBUG] [Thread-128568] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T13:32:58.670 [INFO] [Thread-128568] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T13:32:58.677 [DEBUG] [Thread-128568] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:32:58.677 [DEBUG] [Thread-128568] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T13:32:58.677 [DEBUG] [Thread-128568] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:32:58.677 [DEBUG] [Thread-128568] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:32:58.677 [DEBUG] [Thread-128568] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:32:58.677 [DEBUG] [Thread-128568] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:32:58.677 [DEBUG] [Thread-128568] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:32:58.677 [DEBUG] [Thread-128568] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:32:58.678 [DEBUG] [Thread-128568] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:32:58.678 [DEBUG] [Thread-128568] [transport.py] [_log()] client lang: <none>
2025-12-31T13:32:58.678 [DEBUG] [Thread-128568] [transport.py] [_log()] server lang: <none>
2025-12-31T13:32:58.678 [DEBUG] [Thread-128568] [transport.py] [_log()] kex follows: False
2025-12-31T13:32:58.678 [DEBUG] [Thread-128568] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:32:58.678 [DEBUG] [Thread-128568] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:32:58.678 [DEBUG] [Thread-128568] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:32:58.678 [DEBUG] [Thread-128568] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:32:58.678 [DEBUG] [Thread-128568] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:32:58.678 [DEBUG] [Thread-128568] [transport.py] [_log()] Compression: none
2025-12-31T13:32:58.678 [DEBUG] [Thread-128568] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:32:58.734 [DEBUG] [Thread-128568] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:32:58.735 [DEBUG] [Thread-128568] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:32:58.735 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T13:32:58.736 [DEBUG] [Thread-128568] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T13:32:58.737 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:32:58.791 [DEBUG] [Thread-128568] [transport.py] [_log()] userauth is OK
2025-12-31T13:32:58.791 [DEBUG] [Thread-128568] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:32:58.791 [DEBUG] [Thread-128568] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:32:58.791 [DEBUG] [Thread-128568] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T13:32:58.791 [DEBUG] [Thread-128568] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:32:58.811 [INFO] [Thread-128568] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:32:58.812 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T13:32:58.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:32:59.645 [DEBUG] [Thread-128568] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:32:59.646 [DEBUG] [Thread-128568] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:32:59.693 [DEBUG] [Thread-128568] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:32:59.693 [DEBUG] [Thread-128568] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:32:59.703 [DEBUG] [Thread-128568] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:32:59.712 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:32:59.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T13:32:59.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T13:32:59.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:32:59.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:32:59.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:32:59.740 [DEBUG] [Thread-128568] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:33:07.348 [DEBUG] [Thread-128570 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:33:15.663 [DEBUG] [Thread-128571 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:33:22.402 [DEBUG] [Thread-128572 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:33:29.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T13:33:29.741 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T13:33:29.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T13:33:30.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 33, 16), 33.16, 10.5, 0.0, 21.83, 25.33, 0, 0, 0, 2, 0, 0),)
2025-12-31T13:33:30.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:33:16
2025-12-31T13:33:30.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T13:33:30.720 [DEBUG] [Thread-128573] [transport.py] [_log()] starting thread (client mode): 0xb6bbf130
2025-12-31T13:33:30.720 [DEBUG] [Thread-128573] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:33:30.741 [DEBUG] [Thread-128573] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T13:33:30.741 [INFO] [Thread-128573] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T13:33:30.743 [DEBUG] [Thread-128573] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:33:30.743 [DEBUG] [Thread-128573] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T13:33:30.743 [DEBUG] [Thread-128573] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:33:30.743 [DEBUG] [Thread-128573] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:33:30.743 [DEBUG] [Thread-128573] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:33:30.743 [DEBUG] [Thread-128573] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:33:30.743 [DEBUG] [Thread-128573] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:33:30.743 [DEBUG] [Thread-128573] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:33:30.743 [DEBUG] [Thread-128573] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:33:30.743 [DEBUG] [Thread-128573] [transport.py] [_log()] client lang: <none>
2025-12-31T13:33:30.743 [DEBUG] [Thread-128573] [transport.py] [_log()] server lang: <none>
2025-12-31T13:33:30.743 [DEBUG] [Thread-128573] [transport.py] [_log()] kex follows: False
2025-12-31T13:33:30.743 [DEBUG] [Thread-128573] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:33:30.743 [DEBUG] [Thread-128573] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:33:30.743 [DEBUG] [Thread-128573] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:33:30.743 [DEBUG] [Thread-128573] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:33:30.743 [DEBUG] [Thread-128573] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:33:30.743 [DEBUG] [Thread-128573] [transport.py] [_log()] Compression: none
2025-12-31T13:33:30.744 [DEBUG] [Thread-128573] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:33:30.761 [DEBUG] [Thread-128573] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:33:30.762 [DEBUG] [Thread-128573] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:33:30.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T13:33:30.763 [DEBUG] [Thread-128573] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T13:33:30.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:33:30.765 [DEBUG] [Thread-128573] [transport.py] [_log()] userauth is OK
2025-12-31T13:33:30.765 [DEBUG] [Thread-128573] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:33:30.765 [DEBUG] [Thread-128573] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:33:30.765 [DEBUG] [Thread-128573] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T13:33:30.765 [DEBUG] [Thread-128573] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:33:30.789 [INFO] [Thread-128573] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:33:30.790 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:33:31.534 [DEBUG] [Thread-128573] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:33:31.534 [DEBUG] [Thread-128573] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:33:31.535 [DEBUG] [Thread-128573] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T13:33:31.575 [DEBUG] [Thread-128573] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:33:31.575 [DEBUG] [Thread-128573] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:33:31.577 [DEBUG] [Thread-128573] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:33:31.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:33:31.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T13:33:31.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T13:33:31.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T13:33:31.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:33:31.602 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T13:33:31.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:33:31.603 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:33:31.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T13:33:31.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.481045 -999.00  +25.20  15.13     16   -2.30 1 2 1 1 1   888    0 28.02 44.68 ----- 18.9 15.1 306.8 23.7 29.4 -21.3 29.1 -22.7 28.7 -22.4 29.2 -19.2
2025-12-31T13:33:31.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T13:33:31.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T13:33:31.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.481045
2025-12-31T13:33:31.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T13:33:31.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T13:33:31.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T13:33:31.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T13:33:31.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T13:33:31.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:33:16', tmtdew=33.16, humidity=10.5, cloud=0.0, wind=21.83, temperature=25.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T11:32:42.288', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T13:33:31.605 [DEBUG] [Thread-128573] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:33:31.688 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T13:33:31.700 [DEBUG] [Thread-128576] [transport.py] [_log()] starting thread (client mode): 0xb6bb16c0
2025-12-31T13:33:31.700 [DEBUG] [Thread-128576] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:33:31.715 [DEBUG] [Thread-128576] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T13:33:31.715 [INFO] [Thread-128576] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T13:33:31.723 [DEBUG] [Thread-128576] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:33:31.723 [DEBUG] [Thread-128576] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T13:33:31.723 [DEBUG] [Thread-128576] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:33:31.723 [DEBUG] [Thread-128576] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:33:31.723 [DEBUG] [Thread-128576] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:33:31.723 [DEBUG] [Thread-128576] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:33:31.723 [DEBUG] [Thread-128576] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:33:31.724 [DEBUG] [Thread-128576] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:33:31.724 [DEBUG] [Thread-128576] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:33:31.724 [DEBUG] [Thread-128576] [transport.py] [_log()] client lang: <none>
2025-12-31T13:33:31.724 [DEBUG] [Thread-128576] [transport.py] [_log()] server lang: <none>
2025-12-31T13:33:31.724 [DEBUG] [Thread-128576] [transport.py] [_log()] kex follows: False
2025-12-31T13:33:31.724 [DEBUG] [Thread-128576] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:33:31.724 [DEBUG] [Thread-128576] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:33:31.724 [DEBUG] [Thread-128576] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:33:31.724 [DEBUG] [Thread-128576] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:33:31.724 [DEBUG] [Thread-128576] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:33:31.724 [DEBUG] [Thread-128576] [transport.py] [_log()] Compression: none
2025-12-31T13:33:31.724 [DEBUG] [Thread-128576] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:33:31.782 [DEBUG] [Thread-128576] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:33:31.783 [DEBUG] [Thread-128576] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:33:31.784 [DEBUG] [Thread-128576] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T13:33:31.784 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T13:33:31.785 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:33:31.840 [DEBUG] [Thread-128576] [transport.py] [_log()] userauth is OK
2025-12-31T13:33:31.840 [DEBUG] [Thread-128576] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:33:31.841 [DEBUG] [Thread-128576] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:33:31.841 [DEBUG] [Thread-128576] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T13:33:31.841 [DEBUG] [Thread-128576] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:33:31.860 [INFO] [Thread-128576] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:33:31.860 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T13:33:31.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:33:32.692 [DEBUG] [Thread-128576] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:33:32.692 [DEBUG] [Thread-128576] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:33:32.740 [DEBUG] [Thread-128576] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:33:32.740 [DEBUG] [Thread-128576] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:33:32.750 [DEBUG] [Thread-128576] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:33:32.759 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:33:32.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-12-31T13:33:32.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-12-31T13:33:32.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:33:32.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:33:32.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:33:32.786 [DEBUG] [Thread-128576] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:33:37.436 [DEBUG] [Thread-128578 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:33:51.476 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:33:51.477 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:33:52.483 [DEBUG] [Thread-128579 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:34:02.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T13:34:02.800 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T13:34:02.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T13:34:03.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 33, 48), 34.09, 9.83, 0.0, 29.92, 26.18, 0, 0, 0, 2, 0, 0),)
2025-12-31T13:34:03.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:33:48
2025-12-31T13:34:03.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T13:34:03.778 [DEBUG] [Thread-128580] [transport.py] [_log()] starting thread (client mode): 0xb9558d90
2025-12-31T13:34:03.778 [DEBUG] [Thread-128580] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:34:03.800 [DEBUG] [Thread-128580] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T13:34:03.800 [INFO] [Thread-128580] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T13:34:03.803 [DEBUG] [Thread-128580] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:34:03.803 [DEBUG] [Thread-128580] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T13:34:03.803 [DEBUG] [Thread-128580] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:34:03.803 [DEBUG] [Thread-128580] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:34:03.803 [DEBUG] [Thread-128580] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:34:03.804 [DEBUG] [Thread-128580] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:34:03.804 [DEBUG] [Thread-128580] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:34:03.804 [DEBUG] [Thread-128580] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:34:03.804 [DEBUG] [Thread-128580] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:34:03.804 [DEBUG] [Thread-128580] [transport.py] [_log()] client lang: <none>
2025-12-31T13:34:03.804 [DEBUG] [Thread-128580] [transport.py] [_log()] server lang: <none>
2025-12-31T13:34:03.804 [DEBUG] [Thread-128580] [transport.py] [_log()] kex follows: False
2025-12-31T13:34:03.804 [DEBUG] [Thread-128580] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:34:03.804 [DEBUG] [Thread-128580] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:34:03.804 [DEBUG] [Thread-128580] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:34:03.804 [DEBUG] [Thread-128580] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:34:03.804 [DEBUG] [Thread-128580] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:34:03.804 [DEBUG] [Thread-128580] [transport.py] [_log()] Compression: none
2025-12-31T13:34:03.805 [DEBUG] [Thread-128580] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:34:03.823 [DEBUG] [Thread-128580] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:34:03.824 [DEBUG] [Thread-128580] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:34:03.825 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T13:34:03.826 [DEBUG] [Thread-128580] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T13:34:03.826 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:34:03.828 [DEBUG] [Thread-128580] [transport.py] [_log()] userauth is OK
2025-12-31T13:34:03.828 [DEBUG] [Thread-128580] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:34:03.828 [DEBUG] [Thread-128580] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:34:03.828 [DEBUG] [Thread-128580] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T13:34:03.828 [DEBUG] [Thread-128580] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:34:03.842 [INFO] [Thread-128580] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:34:03.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:34:04.492 [DEBUG] [Thread-128580] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:34:04.492 [DEBUG] [Thread-128580] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:34:04.493 [DEBUG] [Thread-128580] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T13:34:04.533 [DEBUG] [Thread-128580] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:34:04.533 [DEBUG] [Thread-128580] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:34:04.537 [DEBUG] [Thread-128580] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:34:04.550 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:34:04.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T13:34:04.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T13:34:04.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T13:34:04.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:34:04.563 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T13:34:04.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:34:04.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:34:04.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T13:34:04.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.481392 -999.00  +25.30  22.78     15   -2.30 1 2 1 1 1   888    0 28.28 56.83 ----- 17.1 22.8 285.4 32.0 29.7 -22.1 29.2 -23.6 28.8 -21.0 29.4 -19.8
2025-12-31T13:34:04.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T13:34:04.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T13:34:04.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.481392
2025-12-31T13:34:04.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T13:34:04.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T13:34:04.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T13:34:04.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T13:34:04.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T13:34:04.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:33:48', tmtdew=34.09, humidity=9.83, cloud=0.0, wind=29.92, temperature=26.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T11:33:12.269', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T13:34:04.566 [DEBUG] [Thread-128580] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:34:04.649 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T13:34:04.661 [DEBUG] [Thread-128583] [transport.py] [_log()] starting thread (client mode): 0xb6bb0520
2025-12-31T13:34:04.661 [DEBUG] [Thread-128583] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:34:04.676 [DEBUG] [Thread-128583] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T13:34:04.677 [INFO] [Thread-128583] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T13:34:04.684 [DEBUG] [Thread-128583] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:34:04.685 [DEBUG] [Thread-128583] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T13:34:04.685 [DEBUG] [Thread-128583] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:34:04.685 [DEBUG] [Thread-128583] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:34:04.685 [DEBUG] [Thread-128583] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:34:04.685 [DEBUG] [Thread-128583] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:34:04.685 [DEBUG] [Thread-128583] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:34:04.685 [DEBUG] [Thread-128583] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:34:04.685 [DEBUG] [Thread-128583] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:34:04.685 [DEBUG] [Thread-128583] [transport.py] [_log()] client lang: <none>
2025-12-31T13:34:04.685 [DEBUG] [Thread-128583] [transport.py] [_log()] server lang: <none>
2025-12-31T13:34:04.685 [DEBUG] [Thread-128583] [transport.py] [_log()] kex follows: False
2025-12-31T13:34:04.685 [DEBUG] [Thread-128583] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:34:04.685 [DEBUG] [Thread-128583] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:34:04.685 [DEBUG] [Thread-128583] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:34:04.685 [DEBUG] [Thread-128583] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:34:04.685 [DEBUG] [Thread-128583] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:34:04.685 [DEBUG] [Thread-128583] [transport.py] [_log()] Compression: none
2025-12-31T13:34:04.685 [DEBUG] [Thread-128583] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:34:04.742 [DEBUG] [Thread-128583] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:34:04.743 [DEBUG] [Thread-128583] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:34:04.743 [DEBUG] [Thread-128583] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T13:34:04.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T13:34:04.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:34:04.799 [DEBUG] [Thread-128583] [transport.py] [_log()] userauth is OK
2025-12-31T13:34:04.799 [DEBUG] [Thread-128583] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:34:04.799 [DEBUG] [Thread-128583] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:34:04.799 [DEBUG] [Thread-128583] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T13:34:04.799 [DEBUG] [Thread-128583] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:34:04.818 [INFO] [Thread-128583] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:34:04.819 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T13:34:04.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:34:05.649 [DEBUG] [Thread-128583] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:34:05.649 [DEBUG] [Thread-128583] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:34:05.698 [DEBUG] [Thread-128583] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:34:05.698 [DEBUG] [Thread-128583] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:34:05.708 [DEBUG] [Thread-128583] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:34:05.719 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:34:05.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T13:34:05.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T13:34:05.736 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:34:05.736 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:34:05.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:34:05.744 [DEBUG] [Thread-128583] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:34:07.515 [DEBUG] [Thread-128585 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:34:15.729 [DEBUG] [Thread-128586 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:34:22.568 [DEBUG] [Thread-128587 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:34:35.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T13:34:35.766 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T13:34:35.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T13:34:36.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 34, 20), 34.19, 9.78, 0.0, 28.83, 26.31, 0, 0, 0, 2, 0, 0),)
2025-12-31T13:34:36.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:34:20
2025-12-31T13:34:36.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T13:34:36.739 [DEBUG] [Thread-128588] [transport.py] [_log()] starting thread (client mode): 0xb6bbd150
2025-12-31T13:34:36.739 [DEBUG] [Thread-128588] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:34:36.759 [DEBUG] [Thread-128588] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T13:34:36.760 [INFO] [Thread-128588] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T13:34:36.763 [DEBUG] [Thread-128588] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:34:36.763 [DEBUG] [Thread-128588] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T13:34:36.763 [DEBUG] [Thread-128588] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:34:36.763 [DEBUG] [Thread-128588] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:34:36.763 [DEBUG] [Thread-128588] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:34:36.763 [DEBUG] [Thread-128588] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:34:36.763 [DEBUG] [Thread-128588] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:34:36.763 [DEBUG] [Thread-128588] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:34:36.763 [DEBUG] [Thread-128588] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:34:36.763 [DEBUG] [Thread-128588] [transport.py] [_log()] client lang: <none>
2025-12-31T13:34:36.763 [DEBUG] [Thread-128588] [transport.py] [_log()] server lang: <none>
2025-12-31T13:34:36.763 [DEBUG] [Thread-128588] [transport.py] [_log()] kex follows: False
2025-12-31T13:34:36.764 [DEBUG] [Thread-128588] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:34:36.764 [DEBUG] [Thread-128588] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:34:36.764 [DEBUG] [Thread-128588] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:34:36.764 [DEBUG] [Thread-128588] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:34:36.764 [DEBUG] [Thread-128588] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:34:36.764 [DEBUG] [Thread-128588] [transport.py] [_log()] Compression: none
2025-12-31T13:34:36.764 [DEBUG] [Thread-128588] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:34:36.782 [DEBUG] [Thread-128588] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:34:36.783 [DEBUG] [Thread-128588] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:34:36.783 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T13:34:36.784 [DEBUG] [Thread-128588] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T13:34:36.785 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:34:36.825 [DEBUG] [Thread-128588] [transport.py] [_log()] userauth is OK
2025-12-31T13:34:36.825 [DEBUG] [Thread-128588] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:34:36.826 [DEBUG] [Thread-128588] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:34:36.826 [DEBUG] [Thread-128588] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T13:34:36.826 [DEBUG] [Thread-128588] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:34:36.845 [INFO] [Thread-128588] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:34:36.847 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:34:37.570 [DEBUG] [Thread-128588] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:34:37.570 [DEBUG] [Thread-128588] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:34:37.571 [DEBUG] [Thread-128588] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T13:34:37.598 [DEBUG] [Thread-128590 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:34:37.612 [DEBUG] [Thread-128588] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:34:37.612 [DEBUG] [Thread-128588] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:34:37.615 [DEBUG] [Thread-128588] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:34:37.626 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:34:37.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T13:34:37.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T13:34:37.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T13:34:37.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:34:37.637 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T13:34:37.637 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:34:37.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:34:37.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T13:34:37.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.482087 -999.00  +25.60  20.37     15   -2.20 1 2 1 1 1   888    0 29.61 81.46 ----- 24.0 20.4 292.5 29.9 29.8 -24.2 29.4 -23.8 29.0 -21.2 29.5 -21.8
2025-12-31T13:34:37.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T13:34:37.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T13:34:37.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.482087
2025-12-31T13:34:37.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T13:34:37.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T13:34:37.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T13:34:37.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T13:34:37.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T13:34:37.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:34:20', tmtdew=34.19, humidity=9.78, cloud=0.0, wind=28.83, temperature=26.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T11:34:12.317', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T13:34:37.640 [DEBUG] [Thread-128588] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:34:37.723 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T13:34:37.734 [DEBUG] [Thread-128592] [transport.py] [_log()] starting thread (client mode): 0xb6b2b9d0
2025-12-31T13:34:37.734 [DEBUG] [Thread-128592] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:34:37.749 [DEBUG] [Thread-128592] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T13:34:37.749 [INFO] [Thread-128592] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T13:34:37.757 [DEBUG] [Thread-128592] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:34:37.758 [DEBUG] [Thread-128592] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T13:34:37.758 [DEBUG] [Thread-128592] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:34:37.758 [DEBUG] [Thread-128592] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:34:37.758 [DEBUG] [Thread-128592] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:34:37.758 [DEBUG] [Thread-128592] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:34:37.758 [DEBUG] [Thread-128592] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:34:37.758 [DEBUG] [Thread-128592] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:34:37.759 [DEBUG] [Thread-128592] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:34:37.759 [DEBUG] [Thread-128592] [transport.py] [_log()] client lang: <none>
2025-12-31T13:34:37.759 [DEBUG] [Thread-128592] [transport.py] [_log()] server lang: <none>
2025-12-31T13:34:37.759 [DEBUG] [Thread-128592] [transport.py] [_log()] kex follows: False
2025-12-31T13:34:37.759 [DEBUG] [Thread-128592] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:34:37.759 [DEBUG] [Thread-128592] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:34:37.759 [DEBUG] [Thread-128592] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:34:37.760 [DEBUG] [Thread-128592] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:34:37.760 [DEBUG] [Thread-128592] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:34:37.760 [DEBUG] [Thread-128592] [transport.py] [_log()] Compression: none
2025-12-31T13:34:37.760 [DEBUG] [Thread-128592] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:34:37.815 [DEBUG] [Thread-128592] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:34:37.815 [DEBUG] [Thread-128592] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:34:37.816 [DEBUG] [Thread-128592] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T13:34:37.816 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T13:34:37.817 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:34:37.871 [DEBUG] [Thread-128592] [transport.py] [_log()] userauth is OK
2025-12-31T13:34:37.871 [DEBUG] [Thread-128592] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:34:37.871 [DEBUG] [Thread-128592] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:34:37.872 [DEBUG] [Thread-128592] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T13:34:37.872 [DEBUG] [Thread-128592] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:34:37.890 [INFO] [Thread-128592] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:34:37.891 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T13:34:37.891 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:34:38.750 [DEBUG] [Thread-128592] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:34:38.750 [DEBUG] [Thread-128592] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:34:38.798 [DEBUG] [Thread-128592] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:34:38.798 [DEBUG] [Thread-128592] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:34:38.807 [DEBUG] [Thread-128592] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:34:38.816 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:34:38.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-12-31T13:34:38.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T13:34:38.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:34:38.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:34:38.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:34:38.844 [DEBUG] [Thread-128592] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:34:51.618 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:34:51.619 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:34:52.640 [DEBUG] [Thread-128594 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:35:07.687 [DEBUG] [Thread-128595 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:35:08.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T13:35:08.863 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T13:35:08.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T13:35:09.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 34, 52), 34.71, 9.77, 0.0, 38.82, 26.54, 0, 0, 0, 2, 0, 0),)
2025-12-31T13:35:09.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:34:52
2025-12-31T13:35:09.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T13:35:09.898 [DEBUG] [Thread-128596] [transport.py] [_log()] starting thread (client mode): 0xb9558370
2025-12-31T13:35:09.898 [DEBUG] [Thread-128596] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:35:09.918 [DEBUG] [Thread-128596] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T13:35:09.918 [INFO] [Thread-128596] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T13:35:09.921 [DEBUG] [Thread-128596] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:35:09.922 [DEBUG] [Thread-128596] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T13:35:09.922 [DEBUG] [Thread-128596] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:35:09.922 [DEBUG] [Thread-128596] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:35:09.922 [DEBUG] [Thread-128596] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:35:09.922 [DEBUG] [Thread-128596] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:35:09.922 [DEBUG] [Thread-128596] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:35:09.922 [DEBUG] [Thread-128596] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:35:09.922 [DEBUG] [Thread-128596] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:35:09.922 [DEBUG] [Thread-128596] [transport.py] [_log()] client lang: <none>
2025-12-31T13:35:09.922 [DEBUG] [Thread-128596] [transport.py] [_log()] server lang: <none>
2025-12-31T13:35:09.922 [DEBUG] [Thread-128596] [transport.py] [_log()] kex follows: False
2025-12-31T13:35:09.922 [DEBUG] [Thread-128596] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:35:09.922 [DEBUG] [Thread-128596] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:35:09.922 [DEBUG] [Thread-128596] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:35:09.922 [DEBUG] [Thread-128596] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:35:09.922 [DEBUG] [Thread-128596] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:35:09.922 [DEBUG] [Thread-128596] [transport.py] [_log()] Compression: none
2025-12-31T13:35:09.922 [DEBUG] [Thread-128596] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:35:09.937 [DEBUG] [Thread-128596] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:35:09.937 [DEBUG] [Thread-128596] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:35:09.937 [DEBUG] [Thread-128596] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T13:35:09.938 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T13:35:09.938 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:35:09.938 [DEBUG] [Thread-128596] [transport.py] [_log()] userauth is OK
2025-12-31T13:35:09.938 [DEBUG] [Thread-128596] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:35:09.938 [DEBUG] [Thread-128596] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:35:09.938 [DEBUG] [Thread-128596] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T13:35:09.938 [DEBUG] [Thread-128596] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:35:09.950 [INFO] [Thread-128596] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:35:09.950 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:35:12.896 [DEBUG] [Thread-128596] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:35:12.896 [DEBUG] [Thread-128596] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:35:12.896 [DEBUG] [Thread-128596] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T13:35:12.937 [DEBUG] [Thread-128596] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:35:12.937 [DEBUG] [Thread-128596] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:35:12.941 [DEBUG] [Thread-128596] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:35:13.011 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:35:13.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T13:35:13.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T13:35:13.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T13:35:13.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:35:13.040 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T13:35:13.040 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:35:13.040 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:35:13.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T13:35:13.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.482434 -999.00  +25.50  30.29     14   -3.00 1 1 2 1 1   888    0 29.44 91.97 ----- 26.3 30.3 267.8 48.2 30.0 -24.0 29.4 -26.4 28.8 -22.9 29.8 -21.8
2025-12-31T13:35:13.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T13:35:13.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T13:35:13.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.482434
2025-12-31T13:35:13.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T13:35:13.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T13:35:13.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T13:35:13.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T13:35:13.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T13:35:13.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:34:52', tmtdew=34.71, humidity=9.77, cloud=0.0, wind=38.82, temperature=26.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T11:34:42.298', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T13:35:13.043 [DEBUG] [Thread-128596] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:35:13.127 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T13:35:13.140 [DEBUG] [Thread-128599] [transport.py] [_log()] starting thread (client mode): 0xb6bb1db0
2025-12-31T13:35:13.140 [DEBUG] [Thread-128599] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:35:13.155 [DEBUG] [Thread-128599] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T13:35:13.155 [INFO] [Thread-128599] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T13:35:13.163 [DEBUG] [Thread-128599] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:35:13.163 [DEBUG] [Thread-128599] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T13:35:13.163 [DEBUG] [Thread-128599] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:35:13.163 [DEBUG] [Thread-128599] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:35:13.164 [DEBUG] [Thread-128599] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:35:13.164 [DEBUG] [Thread-128599] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:35:13.164 [DEBUG] [Thread-128599] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:35:13.164 [DEBUG] [Thread-128599] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:35:13.164 [DEBUG] [Thread-128599] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:35:13.164 [DEBUG] [Thread-128599] [transport.py] [_log()] client lang: <none>
2025-12-31T13:35:13.164 [DEBUG] [Thread-128599] [transport.py] [_log()] server lang: <none>
2025-12-31T13:35:13.164 [DEBUG] [Thread-128599] [transport.py] [_log()] kex follows: False
2025-12-31T13:35:13.165 [DEBUG] [Thread-128599] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:35:13.165 [DEBUG] [Thread-128599] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:35:13.165 [DEBUG] [Thread-128599] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:35:13.165 [DEBUG] [Thread-128599] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:35:13.165 [DEBUG] [Thread-128599] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:35:13.165 [DEBUG] [Thread-128599] [transport.py] [_log()] Compression: none
2025-12-31T13:35:13.165 [DEBUG] [Thread-128599] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:35:13.224 [DEBUG] [Thread-128599] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:35:13.224 [DEBUG] [Thread-128599] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:35:13.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T13:35:13.225 [DEBUG] [Thread-128599] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T13:35:13.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:35:13.283 [DEBUG] [Thread-128599] [transport.py] [_log()] userauth is OK
2025-12-31T13:35:13.284 [DEBUG] [Thread-128599] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:35:13.284 [DEBUG] [Thread-128599] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:35:13.284 [DEBUG] [Thread-128599] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T13:35:13.284 [DEBUG] [Thread-128599] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:35:13.302 [INFO] [Thread-128599] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:35:13.303 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T13:35:13.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:35:14.145 [DEBUG] [Thread-128599] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:35:14.145 [DEBUG] [Thread-128599] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:35:14.193 [DEBUG] [Thread-128599] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:35:14.193 [DEBUG] [Thread-128599] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:35:14.202 [DEBUG] [Thread-128599] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:35:14.212 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:35:14.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-12-31T13:35:14.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T13:35:14.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:35:14.231 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:35:14.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:35:14.240 [DEBUG] [Thread-128599] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:35:15.796 [DEBUG] [Thread-128601 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:35:22.721 [DEBUG] [Thread-128602 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:35:37.774 [DEBUG] [Thread-128603 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:35:44.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T13:35:44.254 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T13:35:44.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T13:35:44.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 35, 24), 34.69, 9.77, 0.0, 37.6, 26.48, 0, 0, 0, 2, 0, 0),)
2025-12-31T13:35:44.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:35:24
2025-12-31T13:35:45.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T13:35:45.242 [DEBUG] [Thread-128604] [transport.py] [_log()] starting thread (client mode): 0xb6bbcdc0
2025-12-31T13:35:45.242 [DEBUG] [Thread-128604] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:35:45.263 [DEBUG] [Thread-128604] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T13:35:45.263 [INFO] [Thread-128604] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T13:35:45.266 [DEBUG] [Thread-128604] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:35:45.266 [DEBUG] [Thread-128604] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T13:35:45.266 [DEBUG] [Thread-128604] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:35:45.266 [DEBUG] [Thread-128604] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:35:45.267 [DEBUG] [Thread-128604] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:35:45.267 [DEBUG] [Thread-128604] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:35:45.267 [DEBUG] [Thread-128604] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:35:45.267 [DEBUG] [Thread-128604] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:35:45.267 [DEBUG] [Thread-128604] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:35:45.267 [DEBUG] [Thread-128604] [transport.py] [_log()] client lang: <none>
2025-12-31T13:35:45.267 [DEBUG] [Thread-128604] [transport.py] [_log()] server lang: <none>
2025-12-31T13:35:45.267 [DEBUG] [Thread-128604] [transport.py] [_log()] kex follows: False
2025-12-31T13:35:45.267 [DEBUG] [Thread-128604] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:35:45.267 [DEBUG] [Thread-128604] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:35:45.267 [DEBUG] [Thread-128604] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:35:45.267 [DEBUG] [Thread-128604] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:35:45.267 [DEBUG] [Thread-128604] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:35:45.267 [DEBUG] [Thread-128604] [transport.py] [_log()] Compression: none
2025-12-31T13:35:45.267 [DEBUG] [Thread-128604] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:35:45.282 [DEBUG] [Thread-128604] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:35:45.282 [DEBUG] [Thread-128604] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:35:45.282 [DEBUG] [Thread-128604] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T13:35:45.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T13:35:45.283 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:35:45.283 [DEBUG] [Thread-128604] [transport.py] [_log()] userauth is OK
2025-12-31T13:35:45.283 [DEBUG] [Thread-128604] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:35:45.283 [DEBUG] [Thread-128604] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:35:45.283 [DEBUG] [Thread-128604] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T13:35:45.283 [DEBUG] [Thread-128604] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:35:45.297 [INFO] [Thread-128604] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:35:45.297 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:35:45.917 [DEBUG] [Thread-128604] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:35:45.917 [DEBUG] [Thread-128604] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:35:45.917 [DEBUG] [Thread-128604] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T13:35:45.958 [DEBUG] [Thread-128604] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:35:45.958 [DEBUG] [Thread-128604] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:35:45.960 [DEBUG] [Thread-128604] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:35:45.973 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:35:45.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T13:35:45.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T13:35:45.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T13:35:45.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:35:45.980 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T13:35:45.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:35:45.980 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:35:45.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T13:35:45.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.482781 -999.00  +25.30  30.75     14   -3.30 1 1 2 1 1   888    0 29.76 94.14 ----- 28.7 30.8 271.4 41.8 29.8 -24.7 29.3 -26.3 28.4 -26.0 29.5 -22.9
2025-12-31T13:35:45.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T13:35:45.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T13:35:45.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.482781
2025-12-31T13:35:45.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T13:35:45.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T13:35:45.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T13:35:45.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T13:35:45.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T13:35:45.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:35:24', tmtdew=34.69, humidity=9.77, cloud=0.0, wind=37.6, temperature=26.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T11:35:12.278', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T13:35:45.981 [DEBUG] [Thread-128604] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:35:46.055 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T13:35:46.067 [DEBUG] [Thread-128607] [transport.py] [_log()] starting thread (client mode): 0xb6bbecb0
2025-12-31T13:35:46.067 [DEBUG] [Thread-128607] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:35:46.082 [DEBUG] [Thread-128607] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T13:35:46.082 [INFO] [Thread-128607] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T13:35:46.089 [DEBUG] [Thread-128607] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:35:46.089 [DEBUG] [Thread-128607] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T13:35:46.089 [DEBUG] [Thread-128607] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:35:46.089 [DEBUG] [Thread-128607] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:35:46.089 [DEBUG] [Thread-128607] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:35:46.089 [DEBUG] [Thread-128607] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:35:46.089 [DEBUG] [Thread-128607] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:35:46.089 [DEBUG] [Thread-128607] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:35:46.089 [DEBUG] [Thread-128607] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:35:46.089 [DEBUG] [Thread-128607] [transport.py] [_log()] client lang: <none>
2025-12-31T13:35:46.089 [DEBUG] [Thread-128607] [transport.py] [_log()] server lang: <none>
2025-12-31T13:35:46.089 [DEBUG] [Thread-128607] [transport.py] [_log()] kex follows: False
2025-12-31T13:35:46.089 [DEBUG] [Thread-128607] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:35:46.089 [DEBUG] [Thread-128607] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:35:46.089 [DEBUG] [Thread-128607] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:35:46.089 [DEBUG] [Thread-128607] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:35:46.089 [DEBUG] [Thread-128607] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:35:46.089 [DEBUG] [Thread-128607] [transport.py] [_log()] Compression: none
2025-12-31T13:35:46.089 [DEBUG] [Thread-128607] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:35:46.145 [DEBUG] [Thread-128607] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:35:46.145 [DEBUG] [Thread-128607] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:35:46.145 [DEBUG] [Thread-128607] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T13:35:46.145 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T13:35:46.145 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:35:46.203 [DEBUG] [Thread-128607] [transport.py] [_log()] userauth is OK
2025-12-31T13:35:46.203 [DEBUG] [Thread-128607] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:35:46.203 [DEBUG] [Thread-128607] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:35:46.203 [DEBUG] [Thread-128607] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T13:35:46.203 [DEBUG] [Thread-128607] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:35:46.217 [INFO] [Thread-128607] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:35:46.217 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T13:35:46.217 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:35:47.090 [DEBUG] [Thread-128607] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:35:47.091 [DEBUG] [Thread-128607] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:35:47.138 [DEBUG] [Thread-128607] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:35:47.138 [DEBUG] [Thread-128607] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:35:47.146 [DEBUG] [Thread-128607] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:35:47.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:35:47.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T13:35:47.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T13:35:47.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:35:47.170 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:35:47.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:35:47.178 [DEBUG] [Thread-128607] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:35:51.760 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:35:51.761 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:35:52.806 [DEBUG] [Thread-128609 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:36:07.854 [DEBUG] [Thread-128610 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:36:15.870 [DEBUG] [Thread-128611 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:36:17.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T13:36:17.201 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T13:36:17.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-12-31T13:36:17.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 35, 56), 34.61, 9.65, 0.0, 35.99, 26.02, 0, 0, 0, 2, 0, 0),)
2025-12-31T13:36:17.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:35:56
2025-12-31T13:36:18.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T13:36:18.199 [DEBUG] [Thread-128612] [transport.py] [_log()] starting thread (client mode): 0xb6bb1510
2025-12-31T13:36:18.199 [DEBUG] [Thread-128612] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:36:18.220 [DEBUG] [Thread-128612] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T13:36:18.220 [INFO] [Thread-128612] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T13:36:18.223 [DEBUG] [Thread-128612] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:36:18.223 [DEBUG] [Thread-128612] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T13:36:18.223 [DEBUG] [Thread-128612] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:36:18.223 [DEBUG] [Thread-128612] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:36:18.223 [DEBUG] [Thread-128612] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:36:18.223 [DEBUG] [Thread-128612] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:36:18.223 [DEBUG] [Thread-128612] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:36:18.223 [DEBUG] [Thread-128612] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:36:18.223 [DEBUG] [Thread-128612] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:36:18.223 [DEBUG] [Thread-128612] [transport.py] [_log()] client lang: <none>
2025-12-31T13:36:18.223 [DEBUG] [Thread-128612] [transport.py] [_log()] server lang: <none>
2025-12-31T13:36:18.223 [DEBUG] [Thread-128612] [transport.py] [_log()] kex follows: False
2025-12-31T13:36:18.223 [DEBUG] [Thread-128612] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:36:18.223 [DEBUG] [Thread-128612] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:36:18.223 [DEBUG] [Thread-128612] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:36:18.223 [DEBUG] [Thread-128612] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:36:18.224 [DEBUG] [Thread-128612] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:36:18.224 [DEBUG] [Thread-128612] [transport.py] [_log()] Compression: none
2025-12-31T13:36:18.224 [DEBUG] [Thread-128612] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:36:18.240 [DEBUG] [Thread-128612] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:36:18.240 [DEBUG] [Thread-128612] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:36:18.241 [DEBUG] [Thread-128612] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T13:36:18.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T13:36:18.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:36:18.243 [DEBUG] [Thread-128612] [transport.py] [_log()] userauth is OK
2025-12-31T13:36:18.243 [DEBUG] [Thread-128612] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:36:18.243 [DEBUG] [Thread-128612] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:36:18.243 [DEBUG] [Thread-128612] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T13:36:18.243 [DEBUG] [Thread-128612] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:36:18.280 [INFO] [Thread-128612] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:36:18.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:36:18.985 [DEBUG] [Thread-128612] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:36:18.986 [DEBUG] [Thread-128612] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:36:18.986 [DEBUG] [Thread-128612] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T13:36:19.027 [DEBUG] [Thread-128612] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:36:19.027 [DEBUG] [Thread-128612] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:36:19.030 [DEBUG] [Thread-128612] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:36:19.042 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:36:19.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T13:36:19.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T13:36:19.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T13:36:19.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:36:19.056 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T13:36:19.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:36:19.056 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:36:19.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T13:36:19.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.483128 -999.00  +25.30  27.37     14   -3.20 1 1 1 1 1   888    0 29.31 88.62 ----- 32.1 27.4 284.0 36.0 29.4 -26.5 29.1 -26.6 28.4 -27.0 29.2 -24.5
2025-12-31T13:36:19.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T13:36:19.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T13:36:19.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.483128
2025-12-31T13:36:19.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T13:36:19.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T13:36:19.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T13:36:19.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T13:36:19.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T13:36:19.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:35:56', tmtdew=34.61, humidity=9.65, cloud=0.0, wind=35.99, temperature=26.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T11:35:42.259', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T13:36:19.059 [DEBUG] [Thread-128612] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:36:19.142 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T13:36:19.154 [DEBUG] [Thread-128615] [transport.py] [_log()] starting thread (client mode): 0xb6b2bf70
2025-12-31T13:36:19.155 [DEBUG] [Thread-128615] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:36:19.169 [DEBUG] [Thread-128615] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T13:36:19.170 [INFO] [Thread-128615] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T13:36:19.177 [DEBUG] [Thread-128615] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:36:19.177 [DEBUG] [Thread-128615] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T13:36:19.177 [DEBUG] [Thread-128615] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:36:19.177 [DEBUG] [Thread-128615] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:36:19.178 [DEBUG] [Thread-128615] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:36:19.178 [DEBUG] [Thread-128615] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:36:19.178 [DEBUG] [Thread-128615] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:36:19.178 [DEBUG] [Thread-128615] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:36:19.178 [DEBUG] [Thread-128615] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:36:19.178 [DEBUG] [Thread-128615] [transport.py] [_log()] client lang: <none>
2025-12-31T13:36:19.178 [DEBUG] [Thread-128615] [transport.py] [_log()] server lang: <none>
2025-12-31T13:36:19.178 [DEBUG] [Thread-128615] [transport.py] [_log()] kex follows: False
2025-12-31T13:36:19.178 [DEBUG] [Thread-128615] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:36:19.178 [DEBUG] [Thread-128615] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:36:19.178 [DEBUG] [Thread-128615] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:36:19.178 [DEBUG] [Thread-128615] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:36:19.178 [DEBUG] [Thread-128615] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:36:19.178 [DEBUG] [Thread-128615] [transport.py] [_log()] Compression: none
2025-12-31T13:36:19.178 [DEBUG] [Thread-128615] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:36:19.238 [DEBUG] [Thread-128615] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:36:19.239 [DEBUG] [Thread-128615] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:36:19.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T13:36:19.240 [DEBUG] [Thread-128615] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T13:36:19.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:36:19.295 [DEBUG] [Thread-128615] [transport.py] [_log()] userauth is OK
2025-12-31T13:36:19.296 [DEBUG] [Thread-128615] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:36:19.296 [DEBUG] [Thread-128615] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:36:19.296 [DEBUG] [Thread-128615] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T13:36:19.296 [DEBUG] [Thread-128615] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:36:19.315 [INFO] [Thread-128615] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:36:19.315 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T13:36:19.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:36:20.150 [DEBUG] [Thread-128615] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:36:20.151 [DEBUG] [Thread-128615] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:36:20.197 [DEBUG] [Thread-128615] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:36:20.198 [DEBUG] [Thread-128615] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:36:20.206 [DEBUG] [Thread-128615] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:36:20.215 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:36:20.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T13:36:20.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T13:36:20.232 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:36:20.232 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:36:20.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:36:20.240 [DEBUG] [Thread-128615] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:36:22.890 [DEBUG] [Thread-128617 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:36:37.947 [DEBUG] [Thread-128618 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:36:50.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T13:36:50.264 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T13:36:50.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T13:36:50.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 36, 29), 34.93, 9.44, 0.0, 34.34, 26.09, 0, 0, 0, 2, 0, 0),)
2025-12-31T13:36:50.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:36:29
2025-12-31T13:36:51.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T13:36:51.258 [DEBUG] [Thread-128619] [transport.py] [_log()] starting thread (client mode): 0xb6b28220
2025-12-31T13:36:51.259 [DEBUG] [Thread-128619] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:36:51.279 [DEBUG] [Thread-128619] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T13:36:51.279 [INFO] [Thread-128619] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T13:36:51.283 [DEBUG] [Thread-128619] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:36:51.283 [DEBUG] [Thread-128619] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T13:36:51.283 [DEBUG] [Thread-128619] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:36:51.283 [DEBUG] [Thread-128619] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:36:51.283 [DEBUG] [Thread-128619] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:36:51.283 [DEBUG] [Thread-128619] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:36:51.283 [DEBUG] [Thread-128619] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:36:51.283 [DEBUG] [Thread-128619] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:36:51.284 [DEBUG] [Thread-128619] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:36:51.284 [DEBUG] [Thread-128619] [transport.py] [_log()] client lang: <none>
2025-12-31T13:36:51.284 [DEBUG] [Thread-128619] [transport.py] [_log()] server lang: <none>
2025-12-31T13:36:51.284 [DEBUG] [Thread-128619] [transport.py] [_log()] kex follows: False
2025-12-31T13:36:51.284 [DEBUG] [Thread-128619] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:36:51.284 [DEBUG] [Thread-128619] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:36:51.284 [DEBUG] [Thread-128619] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:36:51.284 [DEBUG] [Thread-128619] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:36:51.284 [DEBUG] [Thread-128619] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:36:51.284 [DEBUG] [Thread-128619] [transport.py] [_log()] Compression: none
2025-12-31T13:36:51.284 [DEBUG] [Thread-128619] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:36:51.303 [DEBUG] [Thread-128619] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:36:51.304 [DEBUG] [Thread-128619] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:36:51.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T13:36:51.305 [DEBUG] [Thread-128619] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T13:36:51.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:36:51.308 [DEBUG] [Thread-128619] [transport.py] [_log()] userauth is OK
2025-12-31T13:36:51.308 [DEBUG] [Thread-128619] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:36:51.308 [DEBUG] [Thread-128619] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:36:51.308 [DEBUG] [Thread-128619] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T13:36:51.308 [DEBUG] [Thread-128619] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:36:51.336 [INFO] [Thread-128619] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:36:51.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:36:51.900 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:36:51.901 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:36:51.937 [DEBUG] [Thread-128619] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:36:51.938 [DEBUG] [Thread-128619] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:36:51.938 [DEBUG] [Thread-128619] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T13:36:51.979 [DEBUG] [Thread-128619] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:36:51.980 [DEBUG] [Thread-128619] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:36:51.983 [DEBUG] [Thread-128619] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:36:51.997 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:36:51.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T13:36:51.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T13:36:52.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T13:36:52.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:36:52.009 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T13:36:52.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:36:52.009 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:36:52.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T13:36:52.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.483476 -999.00  +25.30  27.54     14   -3.20 1 1 1 1 1   888    0 29.65 91.56 ----- 27.2 27.5 292.4 36.1 29.3 -26.0 29.0 -25.1 28.6 -25.0 29.1 -23.9
2025-12-31T13:36:52.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T13:36:52.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T13:36:52.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.483476
2025-12-31T13:36:52.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T13:36:52.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T13:36:52.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T13:36:52.011 [DEBUG] [Thread-128619] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:36:52.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T13:36:52.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T13:36:52.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:36:29', tmtdew=34.93, humidity=9.44, cloud=0.0, wind=34.34, temperature=26.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T11:36:12.326', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T13:36:52.093 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T13:36:52.105 [DEBUG] [Thread-128622] [transport.py] [_log()] starting thread (client mode): 0xb955ba00
2025-12-31T13:36:52.105 [DEBUG] [Thread-128622] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:36:52.119 [DEBUG] [Thread-128622] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T13:36:52.119 [INFO] [Thread-128622] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T13:36:52.126 [DEBUG] [Thread-128622] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:36:52.126 [DEBUG] [Thread-128622] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T13:36:52.126 [DEBUG] [Thread-128622] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:36:52.126 [DEBUG] [Thread-128622] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:36:52.127 [DEBUG] [Thread-128622] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:36:52.127 [DEBUG] [Thread-128622] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:36:52.127 [DEBUG] [Thread-128622] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:36:52.127 [DEBUG] [Thread-128622] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:36:52.127 [DEBUG] [Thread-128622] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:36:52.127 [DEBUG] [Thread-128622] [transport.py] [_log()] client lang: <none>
2025-12-31T13:36:52.127 [DEBUG] [Thread-128622] [transport.py] [_log()] server lang: <none>
2025-12-31T13:36:52.127 [DEBUG] [Thread-128622] [transport.py] [_log()] kex follows: False
2025-12-31T13:36:52.127 [DEBUG] [Thread-128622] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:36:52.127 [DEBUG] [Thread-128622] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:36:52.127 [DEBUG] [Thread-128622] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:36:52.127 [DEBUG] [Thread-128622] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:36:52.127 [DEBUG] [Thread-128622] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:36:52.127 [DEBUG] [Thread-128622] [transport.py] [_log()] Compression: none
2025-12-31T13:36:52.127 [DEBUG] [Thread-128622] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:36:52.183 [DEBUG] [Thread-128622] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:36:52.184 [DEBUG] [Thread-128622] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:36:52.184 [DEBUG] [Thread-128622] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T13:36:52.185 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T13:36:52.185 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:36:52.239 [DEBUG] [Thread-128622] [transport.py] [_log()] userauth is OK
2025-12-31T13:36:52.240 [DEBUG] [Thread-128622] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:36:52.240 [DEBUG] [Thread-128622] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:36:52.240 [DEBUG] [Thread-128622] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T13:36:52.240 [DEBUG] [Thread-128622] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:36:52.258 [INFO] [Thread-128622] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:36:52.258 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T13:36:52.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:36:52.984 [DEBUG] [Thread-128624 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:36:53.058 [DEBUG] [Thread-128622] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:36:53.058 [DEBUG] [Thread-128622] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:36:53.106 [DEBUG] [Thread-128622] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:36:53.106 [DEBUG] [Thread-128622] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:36:53.115 [DEBUG] [Thread-128622] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:36:53.124 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:36:53.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T13:36:53.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T13:36:53.142 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:36:53.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:36:53.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:36:53.151 [DEBUG] [Thread-128622] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:37:08.028 [DEBUG] [Thread-128625 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:37:15.922 [DEBUG] [Thread-128626 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:37:23.060 [DEBUG] [Thread-128627 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:37:23.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T13:37:23.174 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T13:37:23.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T13:37:23.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 37, 1), 35.39, 9.02, 0.0, 33.88, 26.04, 0, 0, 0, 2, 0, 0),)
2025-12-31T13:37:23.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:37:01
2025-12-31T13:37:24.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T13:37:24.160 [DEBUG] [Thread-128628] [transport.py] [_log()] starting thread (client mode): 0xb6b29420
2025-12-31T13:37:24.160 [DEBUG] [Thread-128628] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:37:24.180 [DEBUG] [Thread-128628] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T13:37:24.180 [INFO] [Thread-128628] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T13:37:24.183 [DEBUG] [Thread-128628] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:37:24.183 [DEBUG] [Thread-128628] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T13:37:24.183 [DEBUG] [Thread-128628] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:37:24.184 [DEBUG] [Thread-128628] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:37:24.184 [DEBUG] [Thread-128628] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:37:24.184 [DEBUG] [Thread-128628] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:37:24.184 [DEBUG] [Thread-128628] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:37:24.184 [DEBUG] [Thread-128628] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:37:24.184 [DEBUG] [Thread-128628] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:37:24.184 [DEBUG] [Thread-128628] [transport.py] [_log()] client lang: <none>
2025-12-31T13:37:24.184 [DEBUG] [Thread-128628] [transport.py] [_log()] server lang: <none>
2025-12-31T13:37:24.184 [DEBUG] [Thread-128628] [transport.py] [_log()] kex follows: False
2025-12-31T13:37:24.184 [DEBUG] [Thread-128628] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:37:24.184 [DEBUG] [Thread-128628] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:37:24.184 [DEBUG] [Thread-128628] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:37:24.184 [DEBUG] [Thread-128628] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:37:24.184 [DEBUG] [Thread-128628] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:37:24.185 [DEBUG] [Thread-128628] [transport.py] [_log()] Compression: none
2025-12-31T13:37:24.185 [DEBUG] [Thread-128628] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:37:24.201 [DEBUG] [Thread-128628] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:37:24.201 [DEBUG] [Thread-128628] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:37:24.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T13:37:24.202 [DEBUG] [Thread-128628] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T13:37:24.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:37:24.204 [DEBUG] [Thread-128628] [transport.py] [_log()] userauth is OK
2025-12-31T13:37:24.204 [DEBUG] [Thread-128628] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:37:24.204 [DEBUG] [Thread-128628] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:37:24.205 [DEBUG] [Thread-128628] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T13:37:24.205 [DEBUG] [Thread-128628] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:37:24.229 [INFO] [Thread-128628] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:37:24.230 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:37:24.983 [DEBUG] [Thread-128628] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:37:24.983 [DEBUG] [Thread-128628] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:37:24.983 [DEBUG] [Thread-128628] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T13:37:25.024 [DEBUG] [Thread-128628] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:37:25.024 [DEBUG] [Thread-128628] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:37:25.028 [DEBUG] [Thread-128628] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:37:25.039 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:37:25.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T13:37:25.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T13:37:25.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T13:37:25.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:37:25.050 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T13:37:25.050 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:37:25.051 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:37:25.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T13:37:25.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.483823 -999.00  +25.40  30.34     15   -3.00 1 1 2 1 1   888    0 29.86 102.39 ----- 23.6 30.3 301.0 36.1 29.4 -25.2 29.0 -24.8 28.7 -22.0 29.2 -22.9
2025-12-31T13:37:25.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T13:37:25.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T13:37:25.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.483823
2025-12-31T13:37:25.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T13:37:25.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T13:37:25.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T13:37:25.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T13:37:25.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T13:37:25.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:37:01', tmtdew=35.39, humidity=9.02, cloud=0.0, wind=33.88, temperature=26.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T11:36:42.307', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T13:37:25.054 [DEBUG] [Thread-128628] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:37:25.136 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T13:37:25.148 [DEBUG] [Thread-128631] [transport.py] [_log()] starting thread (client mode): 0xb6b293f0
2025-12-31T13:37:25.148 [DEBUG] [Thread-128631] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:37:25.162 [DEBUG] [Thread-128631] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T13:37:25.162 [INFO] [Thread-128631] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T13:37:25.170 [DEBUG] [Thread-128631] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:37:25.170 [DEBUG] [Thread-128631] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T13:37:25.171 [DEBUG] [Thread-128631] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:37:25.171 [DEBUG] [Thread-128631] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:37:25.171 [DEBUG] [Thread-128631] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:37:25.171 [DEBUG] [Thread-128631] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:37:25.171 [DEBUG] [Thread-128631] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:37:25.171 [DEBUG] [Thread-128631] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:37:25.171 [DEBUG] [Thread-128631] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:37:25.171 [DEBUG] [Thread-128631] [transport.py] [_log()] client lang: <none>
2025-12-31T13:37:25.171 [DEBUG] [Thread-128631] [transport.py] [_log()] server lang: <none>
2025-12-31T13:37:25.172 [DEBUG] [Thread-128631] [transport.py] [_log()] kex follows: False
2025-12-31T13:37:25.172 [DEBUG] [Thread-128631] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:37:25.172 [DEBUG] [Thread-128631] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:37:25.172 [DEBUG] [Thread-128631] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:37:25.172 [DEBUG] [Thread-128631] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:37:25.172 [DEBUG] [Thread-128631] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:37:25.172 [DEBUG] [Thread-128631] [transport.py] [_log()] Compression: none
2025-12-31T13:37:25.173 [DEBUG] [Thread-128631] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:37:25.227 [DEBUG] [Thread-128631] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:37:25.228 [DEBUG] [Thread-128631] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:37:25.228 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T13:37:25.229 [DEBUG] [Thread-128631] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T13:37:25.230 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:37:25.284 [DEBUG] [Thread-128631] [transport.py] [_log()] userauth is OK
2025-12-31T13:37:25.284 [DEBUG] [Thread-128631] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:37:25.284 [DEBUG] [Thread-128631] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:37:25.284 [DEBUG] [Thread-128631] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T13:37:25.284 [DEBUG] [Thread-128631] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:37:25.304 [INFO] [Thread-128631] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:37:25.305 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T13:37:25.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:37:26.207 [DEBUG] [Thread-128631] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:37:26.208 [DEBUG] [Thread-128631] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:37:26.256 [DEBUG] [Thread-128631] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:37:26.257 [DEBUG] [Thread-128631] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:37:26.266 [DEBUG] [Thread-128631] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:37:26.274 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:37:26.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T13:37:26.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T13:37:26.293 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:37:26.293 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:37:26.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:37:26.301 [DEBUG] [Thread-128631] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:37:38.093 [DEBUG] [Thread-128633 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:37:52.044 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:37:52.045 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:37:53.145 [DEBUG] [Thread-128634 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:37:56.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T13:37:56.324 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T13:37:56.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T13:37:57.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 37, 33), 34.88, 9.32, 0.0, 36.61, 25.83, 0, 0, 0, 2, 0, 0),)
2025-12-31T13:37:57.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:37:33
2025-12-31T13:37:57.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T13:37:57.334 [DEBUG] [Thread-128635] [transport.py] [_log()] starting thread (client mode): 0xb6bb1510
2025-12-31T13:37:57.334 [DEBUG] [Thread-128635] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:37:57.354 [DEBUG] [Thread-128635] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T13:37:57.354 [INFO] [Thread-128635] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T13:37:57.357 [DEBUG] [Thread-128635] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:37:57.358 [DEBUG] [Thread-128635] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T13:37:57.358 [DEBUG] [Thread-128635] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:37:57.358 [DEBUG] [Thread-128635] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:37:57.358 [DEBUG] [Thread-128635] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:37:57.358 [DEBUG] [Thread-128635] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:37:57.358 [DEBUG] [Thread-128635] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:37:57.358 [DEBUG] [Thread-128635] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:37:57.358 [DEBUG] [Thread-128635] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:37:57.358 [DEBUG] [Thread-128635] [transport.py] [_log()] client lang: <none>
2025-12-31T13:37:57.358 [DEBUG] [Thread-128635] [transport.py] [_log()] server lang: <none>
2025-12-31T13:37:57.358 [DEBUG] [Thread-128635] [transport.py] [_log()] kex follows: False
2025-12-31T13:37:57.358 [DEBUG] [Thread-128635] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:37:57.358 [DEBUG] [Thread-128635] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:37:57.358 [DEBUG] [Thread-128635] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:37:57.358 [DEBUG] [Thread-128635] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:37:57.359 [DEBUG] [Thread-128635] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:37:57.359 [DEBUG] [Thread-128635] [transport.py] [_log()] Compression: none
2025-12-31T13:37:57.359 [DEBUG] [Thread-128635] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:37:57.369 [DEBUG] [Thread-128635] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:37:57.369 [DEBUG] [Thread-128635] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:37:57.370 [DEBUG] [Thread-128635] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T13:37:57.370 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T13:37:57.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:37:57.372 [DEBUG] [Thread-128635] [transport.py] [_log()] userauth is OK
2025-12-31T13:37:57.372 [DEBUG] [Thread-128635] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:37:57.372 [DEBUG] [Thread-128635] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:37:57.372 [DEBUG] [Thread-128635] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T13:37:57.372 [DEBUG] [Thread-128635] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:37:57.385 [INFO] [Thread-128635] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:37:57.386 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:37:58.023 [DEBUG] [Thread-128635] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:37:58.023 [DEBUG] [Thread-128635] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:37:58.023 [DEBUG] [Thread-128635] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T13:37:58.064 [DEBUG] [Thread-128635] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:37:58.064 [DEBUG] [Thread-128635] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:37:58.067 [DEBUG] [Thread-128635] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:37:58.080 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:37:58.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T13:37:58.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T13:37:58.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T13:37:58.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:37:58.090 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T13:37:58.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:37:58.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:37:58.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T13:37:58.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.484170 -999.00  +25.70  28.22     14   -3.40 1 2 1 1 1   888    0 29.88 97.22 ----- 24.6 28.2 307.7 33.6 29.5 -23.2 29.1 -22.9 29.0 -20.6 29.3 -21.0
2025-12-31T13:37:58.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T13:37:58.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T13:37:58.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.484170
2025-12-31T13:37:58.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T13:37:58.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T13:37:58.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T13:37:58.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T13:37:58.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T13:37:58.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:37:33', tmtdew=34.88, humidity=9.32, cloud=0.0, wind=36.61, temperature=25.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T11:37:12.288', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T13:37:58.092 [DEBUG] [Thread-128635] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:37:58.186 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T13:37:58.197 [DEBUG] [Thread-128638] [transport.py] [_log()] starting thread (client mode): 0xb6ba3c10
2025-12-31T13:37:58.197 [DEBUG] [Thread-128638] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:37:58.212 [DEBUG] [Thread-128638] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T13:37:58.212 [INFO] [Thread-128638] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T13:37:58.219 [DEBUG] [Thread-128638] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:37:58.220 [DEBUG] [Thread-128638] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T13:37:58.220 [DEBUG] [Thread-128638] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:37:58.220 [DEBUG] [Thread-128638] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:37:58.220 [DEBUG] [Thread-128638] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:37:58.220 [DEBUG] [Thread-128638] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:37:58.220 [DEBUG] [Thread-128638] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:37:58.220 [DEBUG] [Thread-128638] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:37:58.220 [DEBUG] [Thread-128638] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:37:58.220 [DEBUG] [Thread-128638] [transport.py] [_log()] client lang: <none>
2025-12-31T13:37:58.220 [DEBUG] [Thread-128638] [transport.py] [_log()] server lang: <none>
2025-12-31T13:37:58.221 [DEBUG] [Thread-128638] [transport.py] [_log()] kex follows: False
2025-12-31T13:37:58.221 [DEBUG] [Thread-128638] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:37:58.221 [DEBUG] [Thread-128638] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:37:58.221 [DEBUG] [Thread-128638] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:37:58.221 [DEBUG] [Thread-128638] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:37:58.221 [DEBUG] [Thread-128638] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:37:58.221 [DEBUG] [Thread-128638] [transport.py] [_log()] Compression: none
2025-12-31T13:37:58.221 [DEBUG] [Thread-128638] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:37:58.279 [DEBUG] [Thread-128638] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:37:58.279 [DEBUG] [Thread-128638] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:37:58.280 [DEBUG] [Thread-128638] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T13:37:58.280 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T13:37:58.281 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:37:58.335 [DEBUG] [Thread-128638] [transport.py] [_log()] userauth is OK
2025-12-31T13:37:58.335 [DEBUG] [Thread-128638] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:37:58.335 [DEBUG] [Thread-128638] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:37:58.336 [DEBUG] [Thread-128638] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T13:37:58.336 [DEBUG] [Thread-128638] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:37:58.357 [INFO] [Thread-128638] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:37:58.357 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T13:37:58.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:37:59.216 [DEBUG] [Thread-128638] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:37:59.216 [DEBUG] [Thread-128638] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:37:59.264 [DEBUG] [Thread-128638] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:37:59.265 [DEBUG] [Thread-128638] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:37:59.273 [DEBUG] [Thread-128638] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:37:59.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:37: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')
2025-12-31T13:37:59.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T13:37:59.298 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:37:59.298 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:37:59.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:37:59.306 [DEBUG] [Thread-128638] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:38:08.178 [DEBUG] [Thread-128640 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:38:15.969 [DEBUG] [Thread-128641 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:38:23.228 [DEBUG] [Thread-128642 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:38:29.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T13:38:29.329 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T13:38:29.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T13:38:30.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 38, 5), 34.91, 9.29, 0.0, 34.25, 25.74, 0, 0, 0, 2, 0, 0),)
2025-12-31T13:38:30.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:38:05
2025-12-31T13:38:30.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T13:38:30.314 [DEBUG] [Thread-128643] [transport.py] [_log()] starting thread (client mode): 0xb6b619c0
2025-12-31T13:38:30.314 [DEBUG] [Thread-128643] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:38:30.335 [DEBUG] [Thread-128643] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T13:38:30.335 [INFO] [Thread-128643] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T13:38:30.338 [DEBUG] [Thread-128643] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:38:30.338 [DEBUG] [Thread-128643] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T13:38:30.338 [DEBUG] [Thread-128643] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:38:30.338 [DEBUG] [Thread-128643] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:38:30.338 [DEBUG] [Thread-128643] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:38:30.338 [DEBUG] [Thread-128643] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:38:30.338 [DEBUG] [Thread-128643] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:38:30.338 [DEBUG] [Thread-128643] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:38:30.338 [DEBUG] [Thread-128643] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:38:30.338 [DEBUG] [Thread-128643] [transport.py] [_log()] client lang: <none>
2025-12-31T13:38:30.338 [DEBUG] [Thread-128643] [transport.py] [_log()] server lang: <none>
2025-12-31T13:38:30.338 [DEBUG] [Thread-128643] [transport.py] [_log()] kex follows: False
2025-12-31T13:38:30.338 [DEBUG] [Thread-128643] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:38:30.338 [DEBUG] [Thread-128643] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:38:30.338 [DEBUG] [Thread-128643] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:38:30.338 [DEBUG] [Thread-128643] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:38:30.339 [DEBUG] [Thread-128643] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:38:30.339 [DEBUG] [Thread-128643] [transport.py] [_log()] Compression: none
2025-12-31T13:38:30.339 [DEBUG] [Thread-128643] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:38:30.355 [DEBUG] [Thread-128643] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:38:30.355 [DEBUG] [Thread-128643] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:38:30.356 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T13:38:30.357 [DEBUG] [Thread-128643] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T13:38:30.357 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:38:30.358 [DEBUG] [Thread-128643] [transport.py] [_log()] userauth is OK
2025-12-31T13:38:30.359 [DEBUG] [Thread-128643] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:38:30.359 [DEBUG] [Thread-128643] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:38:30.359 [DEBUG] [Thread-128643] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T13:38:30.359 [DEBUG] [Thread-128643] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:38:30.396 [INFO] [Thread-128643] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:38:30.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:38:31.126 [DEBUG] [Thread-128643] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:38:31.126 [DEBUG] [Thread-128643] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:38:31.127 [DEBUG] [Thread-128643] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T13:38:31.167 [DEBUG] [Thread-128643] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:38:31.167 [DEBUG] [Thread-128643] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:38:31.171 [DEBUG] [Thread-128643] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:38:31.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:38:31.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T13:38:31.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T13:38:31.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T13:38:31.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:38:31.190 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T13:38:31.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:38:31.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:38:31.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T13:38:31.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.484517 -999.00  +25.90  30.92     14   -3.40 1 2 2 1 1   888    0 30.26 109.66 ----- 27.0 30.9 304.6 36.2 29.7 -23.4 29.4 -22.5 29.1 -18.7 29.6 -21.3
2025-12-31T13:38:31.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T13:38:31.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T13:38:31.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.484517
2025-12-31T13:38:31.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T13:38:31.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T13:38:31.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T13:38:31.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T13:38:31.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T13:38:31.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:38:05', tmtdew=34.91, humidity=9.29, cloud=0.0, wind=34.25, temperature=25.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T11:37:42.269', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T13:38:31.193 [DEBUG] [Thread-128643] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:38:31.277 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T13:38:31.288 [DEBUG] [Thread-128646] [transport.py] [_log()] starting thread (client mode): 0xbbfcf670
2025-12-31T13:38:31.289 [DEBUG] [Thread-128646] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:38:31.307 [DEBUG] [Thread-128646] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T13:38:31.307 [INFO] [Thread-128646] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T13:38:31.314 [DEBUG] [Thread-128646] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:38:31.315 [DEBUG] [Thread-128646] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T13:38:31.315 [DEBUG] [Thread-128646] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:38:31.315 [DEBUG] [Thread-128646] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:38:31.315 [DEBUG] [Thread-128646] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:38:31.316 [DEBUG] [Thread-128646] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:38:31.316 [DEBUG] [Thread-128646] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:38:31.316 [DEBUG] [Thread-128646] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:38:31.316 [DEBUG] [Thread-128646] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:38:31.316 [DEBUG] [Thread-128646] [transport.py] [_log()] client lang: <none>
2025-12-31T13:38:31.316 [DEBUG] [Thread-128646] [transport.py] [_log()] server lang: <none>
2025-12-31T13:38:31.316 [DEBUG] [Thread-128646] [transport.py] [_log()] kex follows: False
2025-12-31T13:38:31.316 [DEBUG] [Thread-128646] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:38:31.316 [DEBUG] [Thread-128646] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:38:31.316 [DEBUG] [Thread-128646] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:38:31.316 [DEBUG] [Thread-128646] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:38:31.316 [DEBUG] [Thread-128646] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:38:31.316 [DEBUG] [Thread-128646] [transport.py] [_log()] Compression: none
2025-12-31T13:38:31.316 [DEBUG] [Thread-128646] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:38:31.372 [DEBUG] [Thread-128646] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:38:31.372 [DEBUG] [Thread-128646] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:38:31.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T13:38:31.374 [DEBUG] [Thread-128646] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T13:38:31.375 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:38:31.431 [DEBUG] [Thread-128646] [transport.py] [_log()] userauth is OK
2025-12-31T13:38:31.432 [DEBUG] [Thread-128646] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:38:31.432 [DEBUG] [Thread-128646] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:38:31.432 [DEBUG] [Thread-128646] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T13:38:31.432 [DEBUG] [Thread-128646] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:38:31.451 [INFO] [Thread-128646] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:38:31.451 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T13:38:31.452 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:38:32.295 [DEBUG] [Thread-128646] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:38:32.296 [DEBUG] [Thread-128646] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:38:32.344 [DEBUG] [Thread-128646] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:38:32.344 [DEBUG] [Thread-128646] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:38:32.353 [DEBUG] [Thread-128646] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:38:32.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:38:32.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T13:38:32.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T13:38:32.381 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:38:32.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:38:32.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:38:32.390 [DEBUG] [Thread-128646] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:38:38.255 [DEBUG] [Thread-128648 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:38:52.186 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:38:52.188 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:38:53.299 [DEBUG] [Thread-128649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:39:02.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T13:39:02.412 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T13:39:02.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-12-31T13:39:03.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 38, 37), 35.09, 8.95, 0.0, 26.61, 25.58, 0, 0, 0, 2, 0, 0),)
2025-12-31T13:39:03.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:38:37
2025-12-31T13:39:03.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T13:39:03.410 [DEBUG] [Thread-128650] [transport.py] [_log()] starting thread (client mode): 0xbbfcd150
2025-12-31T13:39:03.410 [DEBUG] [Thread-128650] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:39:03.432 [DEBUG] [Thread-128650] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T13:39:03.432 [INFO] [Thread-128650] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T13:39:03.436 [DEBUG] [Thread-128650] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:39:03.436 [DEBUG] [Thread-128650] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T13:39:03.436 [DEBUG] [Thread-128650] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:39:03.436 [DEBUG] [Thread-128650] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:39:03.436 [DEBUG] [Thread-128650] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:39:03.436 [DEBUG] [Thread-128650] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:39:03.436 [DEBUG] [Thread-128650] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:39:03.436 [DEBUG] [Thread-128650] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:39:03.436 [DEBUG] [Thread-128650] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:39:03.436 [DEBUG] [Thread-128650] [transport.py] [_log()] client lang: <none>
2025-12-31T13:39:03.436 [DEBUG] [Thread-128650] [transport.py] [_log()] server lang: <none>
2025-12-31T13:39:03.436 [DEBUG] [Thread-128650] [transport.py] [_log()] kex follows: False
2025-12-31T13:39:03.436 [DEBUG] [Thread-128650] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:39:03.436 [DEBUG] [Thread-128650] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:39:03.436 [DEBUG] [Thread-128650] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:39:03.436 [DEBUG] [Thread-128650] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:39:03.436 [DEBUG] [Thread-128650] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:39:03.436 [DEBUG] [Thread-128650] [transport.py] [_log()] Compression: none
2025-12-31T13:39:03.436 [DEBUG] [Thread-128650] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:39:03.451 [DEBUG] [Thread-128650] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:39:03.452 [DEBUG] [Thread-128650] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:39:03.452 [DEBUG] [Thread-128650] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T13:39:03.452 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T13:39:03.452 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:39:03.452 [DEBUG] [Thread-128650] [transport.py] [_log()] userauth is OK
2025-12-31T13:39:03.453 [DEBUG] [Thread-128650] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:39:03.453 [DEBUG] [Thread-128650] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:39:03.453 [DEBUG] [Thread-128650] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T13:39:03.453 [DEBUG] [Thread-128650] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:39:03.468 [INFO] [Thread-128650] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:39:03.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:39:04.140 [DEBUG] [Thread-128650] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:39:04.141 [DEBUG] [Thread-128650] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:39:04.141 [DEBUG] [Thread-128650] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T13:39:04.182 [DEBUG] [Thread-128650] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:39:04.182 [DEBUG] [Thread-128650] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:39:04.184 [DEBUG] [Thread-128650] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:39:04.197 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:39:04.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T13:39:04.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T13:39:04.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T13:39:04.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:39:04.203 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T13:39:04.203 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:39:04.203 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:39:04.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T13:39:04.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.484865 -999.00  +26.20  23.54     14   -2.80 1 2 1 1 1   888    0 31.32 115.41 ----- 17.3 23.5 315.0 39.7 29.9 -21.5 29.4 -23.6 29.3 -21.4 29.8 -19.2
2025-12-31T13:39:04.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T13:39:04.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T13:39:04.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.484865
2025-12-31T13:39:04.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T13:39:04.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T13:39:04.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T13:39:04.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T13:39:04.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T13:39:04.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:38:37', tmtdew=35.09, humidity=8.95, cloud=0.0, wind=26.61, temperature=25.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T11:38:12.336', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T13:39:04.204 [DEBUG] [Thread-128650] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:39:04.279 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T13:39:04.291 [DEBUG] [Thread-128653] [transport.py] [_log()] starting thread (client mode): 0xb6ba3340
2025-12-31T13:39:04.291 [DEBUG] [Thread-128653] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:39:04.306 [DEBUG] [Thread-128653] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T13:39:04.306 [INFO] [Thread-128653] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T13:39:04.313 [DEBUG] [Thread-128653] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:39:04.313 [DEBUG] [Thread-128653] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T13:39:04.313 [DEBUG] [Thread-128653] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:39:04.313 [DEBUG] [Thread-128653] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:39:04.314 [DEBUG] [Thread-128653] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:39:04.314 [DEBUG] [Thread-128653] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:39:04.314 [DEBUG] [Thread-128653] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:39:04.314 [DEBUG] [Thread-128653] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:39:04.314 [DEBUG] [Thread-128653] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:39:04.314 [DEBUG] [Thread-128653] [transport.py] [_log()] client lang: <none>
2025-12-31T13:39:04.314 [DEBUG] [Thread-128653] [transport.py] [_log()] server lang: <none>
2025-12-31T13:39:04.314 [DEBUG] [Thread-128653] [transport.py] [_log()] kex follows: False
2025-12-31T13:39:04.314 [DEBUG] [Thread-128653] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:39:04.314 [DEBUG] [Thread-128653] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:39:04.314 [DEBUG] [Thread-128653] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:39:04.314 [DEBUG] [Thread-128653] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:39:04.314 [DEBUG] [Thread-128653] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:39:04.314 [DEBUG] [Thread-128653] [transport.py] [_log()] Compression: none
2025-12-31T13:39:04.314 [DEBUG] [Thread-128653] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:39:04.370 [DEBUG] [Thread-128653] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:39:04.370 [DEBUG] [Thread-128653] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:39:04.370 [DEBUG] [Thread-128653] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T13:39:04.370 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T13:39:04.370 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:39:04.427 [DEBUG] [Thread-128653] [transport.py] [_log()] userauth is OK
2025-12-31T13:39:04.427 [DEBUG] [Thread-128653] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:39:04.427 [DEBUG] [Thread-128653] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:39:04.427 [DEBUG] [Thread-128653] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T13:39:04.427 [DEBUG] [Thread-128653] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:39:04.445 [INFO] [Thread-128653] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:39:04.445 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T13:39:04.445 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:39:05.278 [DEBUG] [Thread-128653] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:39:05.278 [DEBUG] [Thread-128653] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:39:05.326 [DEBUG] [Thread-128653] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:39:05.326 [DEBUG] [Thread-128653] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:39:05.334 [DEBUG] [Thread-128653] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:39:05.342 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:39:05.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T13:39:05.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T13:39:05.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:39:05.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:39:05.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:39:05.366 [DEBUG] [Thread-128653] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:39:08.335 [DEBUG] [Thread-128655 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:39:16.022 [DEBUG] [Thread-128656 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:39:23.386 [DEBUG] [Thread-128657 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:39:35.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T13:39:35.372 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T13:39: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-12-31T13:39:36.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 39, 9), 35.18, 8.9, 0.0, 23.33, 25.63, 0, 0, 0, 2, 0, 0),)
2025-12-31T13:39:36.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:39:09
2025-12-31T13:39:36.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T13:39:36.370 [DEBUG] [Thread-128658] [transport.py] [_log()] starting thread (client mode): 0xb9558640
2025-12-31T13:39:36.370 [DEBUG] [Thread-128658] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:39:36.388 [DEBUG] [Thread-128658] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T13:39:36.388 [INFO] [Thread-128658] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T13:39:36.391 [DEBUG] [Thread-128658] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:39:36.391 [DEBUG] [Thread-128658] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T13:39:36.391 [DEBUG] [Thread-128658] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:39:36.391 [DEBUG] [Thread-128658] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:39:36.391 [DEBUG] [Thread-128658] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:39:36.391 [DEBUG] [Thread-128658] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:39:36.391 [DEBUG] [Thread-128658] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:39:36.391 [DEBUG] [Thread-128658] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:39:36.391 [DEBUG] [Thread-128658] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:39:36.391 [DEBUG] [Thread-128658] [transport.py] [_log()] client lang: <none>
2025-12-31T13:39:36.391 [DEBUG] [Thread-128658] [transport.py] [_log()] server lang: <none>
2025-12-31T13:39:36.392 [DEBUG] [Thread-128658] [transport.py] [_log()] kex follows: False
2025-12-31T13:39:36.392 [DEBUG] [Thread-128658] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:39:36.392 [DEBUG] [Thread-128658] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:39:36.392 [DEBUG] [Thread-128658] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:39:36.392 [DEBUG] [Thread-128658] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:39:36.392 [DEBUG] [Thread-128658] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:39:36.392 [DEBUG] [Thread-128658] [transport.py] [_log()] Compression: none
2025-12-31T13:39:36.392 [DEBUG] [Thread-128658] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:39:36.411 [DEBUG] [Thread-128658] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:39:36.412 [DEBUG] [Thread-128658] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:39:36.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T13:39:36.412 [DEBUG] [Thread-128658] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T13:39:36.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:39:36.414 [DEBUG] [Thread-128658] [transport.py] [_log()] userauth is OK
2025-12-31T13:39:36.415 [DEBUG] [Thread-128658] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:39:36.415 [DEBUG] [Thread-128658] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:39:36.415 [DEBUG] [Thread-128658] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T13:39:36.415 [DEBUG] [Thread-128658] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:39:36.430 [INFO] [Thread-128658] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:39:36.430 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:39:37.170 [DEBUG] [Thread-128658] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:39:37.171 [DEBUG] [Thread-128658] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:39:37.171 [DEBUG] [Thread-128658] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T13:39:37.212 [DEBUG] [Thread-128658] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:39:37.212 [DEBUG] [Thread-128658] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:39:37.215 [DEBUG] [Thread-128658] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:39:37.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:39:37.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T13:39:37.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T13:39:37.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T13:39:37.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:39:37.237 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T13:39:37.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:39:37.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:39:37.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T13:39:37.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.485559 -999.00  +25.30  25.51     15   -2.80 1 1 1 1 1   888    0 30.97 109.71 ----- 29.6 25.5 291.6 36.4 29.4 -26.0 29.2 -23.9 28.7 -22.9 29.5 -23.9
2025-12-31T13:39:37.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T13:39:37.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T13:39:37.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.485559
2025-12-31T13:39:37.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T13:39:37.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T13:39:37.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T13:39:37.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T13:39:37.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T13:39:37.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:39:09', tmtdew=35.18, humidity=8.9, cloud=0.0, wind=23.33, temperature=25.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T11:39:12.298', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T13:39:37.240 [DEBUG] [Thread-128658] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:39:37.324 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T13:39:37.335 [DEBUG] [Thread-128661] [transport.py] [_log()] starting thread (client mode): 0xb955bca0
2025-12-31T13:39:37.335 [DEBUG] [Thread-128661] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:39:37.350 [DEBUG] [Thread-128661] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T13:39:37.350 [INFO] [Thread-128661] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T13:39:37.358 [DEBUG] [Thread-128661] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:39:37.358 [DEBUG] [Thread-128661] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T13:39:37.358 [DEBUG] [Thread-128661] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:39:37.358 [DEBUG] [Thread-128661] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:39:37.358 [DEBUG] [Thread-128661] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:39:37.358 [DEBUG] [Thread-128661] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:39:37.358 [DEBUG] [Thread-128661] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:39:37.358 [DEBUG] [Thread-128661] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:39:37.358 [DEBUG] [Thread-128661] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:39:37.358 [DEBUG] [Thread-128661] [transport.py] [_log()] client lang: <none>
2025-12-31T13:39:37.358 [DEBUG] [Thread-128661] [transport.py] [_log()] server lang: <none>
2025-12-31T13:39:37.358 [DEBUG] [Thread-128661] [transport.py] [_log()] kex follows: False
2025-12-31T13:39:37.358 [DEBUG] [Thread-128661] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:39:37.358 [DEBUG] [Thread-128661] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:39:37.358 [DEBUG] [Thread-128661] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:39:37.358 [DEBUG] [Thread-128661] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:39:37.358 [DEBUG] [Thread-128661] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:39:37.359 [DEBUG] [Thread-128661] [transport.py] [_log()] Compression: none
2025-12-31T13:39:37.359 [DEBUG] [Thread-128661] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:39:37.416 [DEBUG] [Thread-128661] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:39:37.416 [DEBUG] [Thread-128661] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:39:37.417 [DEBUG] [Thread-128661] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T13:39:37.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T13:39:37.418 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:39:37.472 [DEBUG] [Thread-128661] [transport.py] [_log()] userauth is OK
2025-12-31T13:39:37.472 [DEBUG] [Thread-128661] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:39:37.472 [DEBUG] [Thread-128661] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:39:37.472 [DEBUG] [Thread-128661] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T13:39:37.472 [DEBUG] [Thread-128661] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:39:37.491 [INFO] [Thread-128661] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:39:37.491 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T13:39:37.492 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:39:38.335 [DEBUG] [Thread-128661] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:39:38.335 [DEBUG] [Thread-128661] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:39:38.383 [DEBUG] [Thread-128661] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:39:38.383 [DEBUG] [Thread-128661] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:39:38.393 [DEBUG] [Thread-128661] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:39:38.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:39:38.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T13:39:38.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T13:39:38.419 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:39:38.419 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:39:38.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:39:38.424 [DEBUG] [Thread-128663 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:39:38.427 [DEBUG] [Thread-128661] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:39:52.336 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:39:52.337 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:39:53.466 [DEBUG] [Thread-128664 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:40:08.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T13:40:08.445 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T13:40:08.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T13:40:08.501 [DEBUG] [Thread-128665 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:40:09.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 39, 41), 34.61, 9.32, 0.0, 24.56, 25.55, 0, 0, 0, 2, 0, 0),)
2025-12-31T13:40:09.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:39:41
2025-12-31T13:40:09.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T13:40:09.434 [DEBUG] [Thread-128666] [transport.py] [_log()] starting thread (client mode): 0xb6b28970
2025-12-31T13:40:09.435 [DEBUG] [Thread-128666] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:40:09.455 [DEBUG] [Thread-128666] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T13:40:09.455 [INFO] [Thread-128666] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T13:40:09.456 [DEBUG] [Thread-128666] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:40:09.456 [DEBUG] [Thread-128666] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T13:40:09.456 [DEBUG] [Thread-128666] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:40:09.456 [DEBUG] [Thread-128666] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:40:09.456 [DEBUG] [Thread-128666] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:40:09.456 [DEBUG] [Thread-128666] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:40:09.456 [DEBUG] [Thread-128666] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:40:09.457 [DEBUG] [Thread-128666] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:40:09.457 [DEBUG] [Thread-128666] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:40:09.457 [DEBUG] [Thread-128666] [transport.py] [_log()] client lang: <none>
2025-12-31T13:40:09.457 [DEBUG] [Thread-128666] [transport.py] [_log()] server lang: <none>
2025-12-31T13:40:09.457 [DEBUG] [Thread-128666] [transport.py] [_log()] kex follows: False
2025-12-31T13:40:09.457 [DEBUG] [Thread-128666] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:40:09.457 [DEBUG] [Thread-128666] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:40:09.457 [DEBUG] [Thread-128666] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:40:09.457 [DEBUG] [Thread-128666] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:40:09.457 [DEBUG] [Thread-128666] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:40:09.457 [DEBUG] [Thread-128666] [transport.py] [_log()] Compression: none
2025-12-31T13:40:09.457 [DEBUG] [Thread-128666] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:40:09.466 [DEBUG] [Thread-128666] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:40:09.466 [DEBUG] [Thread-128666] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:40:09.467 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T13:40:09.467 [DEBUG] [Thread-128666] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T13:40:09.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:40:09.469 [DEBUG] [Thread-128666] [transport.py] [_log()] userauth is OK
2025-12-31T13:40:09.469 [DEBUG] [Thread-128666] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:40:09.469 [DEBUG] [Thread-128666] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:40:09.469 [DEBUG] [Thread-128666] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T13:40:09.469 [DEBUG] [Thread-128666] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:40:09.485 [INFO] [Thread-128666] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:40:09.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:40:16.072 [DEBUG] [Thread-128668 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:40:16.449 [DEBUG] [Thread-128666] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:40:16.450 [DEBUG] [Thread-128666] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:40:16.450 [DEBUG] [Thread-128666] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T13:40:16.491 [DEBUG] [Thread-128666] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:40:16.492 [DEBUG] [Thread-128666] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:40:16.495 [DEBUG] [Thread-128666] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:40:16.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:40:16.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T13:40:16.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T13:40:16.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T13:40:16.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:40:16.524 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T13:40:16.524 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:40:16.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:40:16.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T13:40:16.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.485906 -999.00  +25.50  22.99     15   -2.40 1 2 1 1 1   888    0 30.97 111.28 ----- 22.9 23.0 296.3 34.4 29.5 -24.1 29.1 -23.1 28.8 -22.4 29.3 -22.4
2025-12-31T13:40:16.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T13:40:16.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T13:40:16.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.485906
2025-12-31T13:40:16.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T13:40:16.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T13:40:16.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T13:40:16.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T13:40:16.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T13:40:16.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:39:41', tmtdew=34.61, humidity=9.32, cloud=0.0, wind=24.56, temperature=25.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T11:39:42.278', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T13:40:16.527 [DEBUG] [Thread-128666] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:40:16.611 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T13:40:16.622 [DEBUG] [Thread-128670] [transport.py] [_log()] starting thread (client mode): 0xb6b17250
2025-12-31T13:40:16.622 [DEBUG] [Thread-128670] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:40:16.637 [DEBUG] [Thread-128670] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T13:40:16.637 [INFO] [Thread-128670] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T13:40:16.645 [DEBUG] [Thread-128670] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:40:16.645 [DEBUG] [Thread-128670] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T13:40:16.646 [DEBUG] [Thread-128670] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:40:16.646 [DEBUG] [Thread-128670] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:40:16.646 [DEBUG] [Thread-128670] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:40:16.646 [DEBUG] [Thread-128670] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:40:16.646 [DEBUG] [Thread-128670] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:40:16.646 [DEBUG] [Thread-128670] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:40:16.646 [DEBUG] [Thread-128670] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:40:16.647 [DEBUG] [Thread-128670] [transport.py] [_log()] client lang: <none>
2025-12-31T13:40:16.647 [DEBUG] [Thread-128670] [transport.py] [_log()] server lang: <none>
2025-12-31T13:40:16.647 [DEBUG] [Thread-128670] [transport.py] [_log()] kex follows: False
2025-12-31T13:40:16.647 [DEBUG] [Thread-128670] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:40:16.647 [DEBUG] [Thread-128670] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:40:16.647 [DEBUG] [Thread-128670] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:40:16.647 [DEBUG] [Thread-128670] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:40:16.647 [DEBUG] [Thread-128670] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:40:16.647 [DEBUG] [Thread-128670] [transport.py] [_log()] Compression: none
2025-12-31T13:40:16.647 [DEBUG] [Thread-128670] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:40:16.704 [DEBUG] [Thread-128670] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:40:16.704 [DEBUG] [Thread-128670] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:40:16.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T13:40:16.706 [DEBUG] [Thread-128670] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T13:40:16.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:40:16.760 [DEBUG] [Thread-128670] [transport.py] [_log()] userauth is OK
2025-12-31T13:40:16.760 [DEBUG] [Thread-128670] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:40:16.760 [DEBUG] [Thread-128670] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:40:16.760 [DEBUG] [Thread-128670] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T13:40:16.761 [DEBUG] [Thread-128670] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:40:16.779 [INFO] [Thread-128670] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:40:16.779 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T13:40:16.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:40:17.632 [DEBUG] [Thread-128670] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:40:17.633 [DEBUG] [Thread-128670] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:40:17.681 [DEBUG] [Thread-128670] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:40:17.681 [DEBUG] [Thread-128670] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:40:17.690 [DEBUG] [Thread-128670] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:40:17.699 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:40:17.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T13:40:17.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T13:40:17.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:40:17.718 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:40:17.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:40:17.728 [DEBUG] [Thread-128670] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:40:23.526 [DEBUG] [Thread-128672 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:40:38.570 [DEBUG] [Thread-128673 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:40:47.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T13:40:47.742 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T13:40:47.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T13:40:48.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 40, 45), 33.6, 10.37, 0.0, 22.8, 25.61, 0, 0, 0, 2, 0, 0),)
2025-12-31T13:40:48.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:40:45
2025-12-31T13:40:48.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T13:40:48.722 [DEBUG] [Thread-128674] [transport.py] [_log()] starting thread (client mode): 0xb6b62bc0
2025-12-31T13:40:48.722 [DEBUG] [Thread-128674] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:40:48.737 [DEBUG] [Thread-128674] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T13:40:48.737 [INFO] [Thread-128674] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T13:40:48.740 [DEBUG] [Thread-128674] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:40:48.740 [DEBUG] [Thread-128674] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T13:40:48.740 [DEBUG] [Thread-128674] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:40:48.740 [DEBUG] [Thread-128674] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:40:48.740 [DEBUG] [Thread-128674] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:40:48.740 [DEBUG] [Thread-128674] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:40:48.740 [DEBUG] [Thread-128674] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:40:48.740 [DEBUG] [Thread-128674] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:40:48.740 [DEBUG] [Thread-128674] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:40:48.740 [DEBUG] [Thread-128674] [transport.py] [_log()] client lang: <none>
2025-12-31T13:40:48.740 [DEBUG] [Thread-128674] [transport.py] [_log()] server lang: <none>
2025-12-31T13:40:48.740 [DEBUG] [Thread-128674] [transport.py] [_log()] kex follows: False
2025-12-31T13:40:48.740 [DEBUG] [Thread-128674] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:40:48.740 [DEBUG] [Thread-128674] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:40:48.740 [DEBUG] [Thread-128674] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:40:48.740 [DEBUG] [Thread-128674] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:40:48.740 [DEBUG] [Thread-128674] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:40:48.740 [DEBUG] [Thread-128674] [transport.py] [_log()] Compression: none
2025-12-31T13:40:48.740 [DEBUG] [Thread-128674] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:40:48.757 [DEBUG] [Thread-128674] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:40:48.758 [DEBUG] [Thread-128674] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:40:48.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T13:40:48.759 [DEBUG] [Thread-128674] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T13:40:48.760 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:40:48.762 [DEBUG] [Thread-128674] [transport.py] [_log()] userauth is OK
2025-12-31T13:40:48.763 [DEBUG] [Thread-128674] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:40:48.763 [DEBUG] [Thread-128674] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:40:48.763 [DEBUG] [Thread-128674] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T13:40:48.763 [DEBUG] [Thread-128674] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:40:48.788 [INFO] [Thread-128674] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:40:48.789 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:40:49.389 [DEBUG] [Thread-128674] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:40:49.389 [DEBUG] [Thread-128674] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:40:49.389 [DEBUG] [Thread-128674] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T13:40:49.430 [DEBUG] [Thread-128674] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:40:49.430 [DEBUG] [Thread-128674] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:40:49.433 [DEBUG] [Thread-128674] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:40:49.444 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:40:49.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T13:40:49.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T13:40:49.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T13:40:49.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:40:49.455 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T13:40:49.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:40:49.455 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:40:49.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T13:40:49.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.486253 -999.00  +25.50  25.27     15   -2.30 1 2 1 1 1   888    0 30.40 106.10 ----- 31.5 25.3 295.8 34.4 29.5 -22.4 29.2 -22.3 28.9 -22.8 29.4 -21.1
2025-12-31T13:40:49.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T13:40:49.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T13:40:49.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.486253
2025-12-31T13:40:49.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T13:40:49.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T13:40:49.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T13:40:49.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T13:40:49.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T13:40:49.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:40:45', tmtdew=33.6, humidity=10.37, cloud=0.0, wind=22.8, temperature=25.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T11:40:12.259', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T13:40:49.457 [DEBUG] [Thread-128674] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:40:49.540 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T13:40:49.553 [DEBUG] [Thread-128677] [transport.py] [_log()] starting thread (client mode): 0xb6b28d60
2025-12-31T13:40:49.553 [DEBUG] [Thread-128677] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:40:49.568 [DEBUG] [Thread-128677] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T13:40:49.568 [INFO] [Thread-128677] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T13:40:49.575 [DEBUG] [Thread-128677] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:40:49.575 [DEBUG] [Thread-128677] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T13:40:49.576 [DEBUG] [Thread-128677] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:40:49.576 [DEBUG] [Thread-128677] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:40:49.576 [DEBUG] [Thread-128677] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:40:49.576 [DEBUG] [Thread-128677] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:40:49.576 [DEBUG] [Thread-128677] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:40:49.576 [DEBUG] [Thread-128677] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:40:49.576 [DEBUG] [Thread-128677] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:40:49.576 [DEBUG] [Thread-128677] [transport.py] [_log()] client lang: <none>
2025-12-31T13:40:49.576 [DEBUG] [Thread-128677] [transport.py] [_log()] server lang: <none>
2025-12-31T13:40:49.576 [DEBUG] [Thread-128677] [transport.py] [_log()] kex follows: False
2025-12-31T13:40:49.576 [DEBUG] [Thread-128677] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:40:49.576 [DEBUG] [Thread-128677] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:40:49.576 [DEBUG] [Thread-128677] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:40:49.576 [DEBUG] [Thread-128677] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:40:49.576 [DEBUG] [Thread-128677] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:40:49.576 [DEBUG] [Thread-128677] [transport.py] [_log()] Compression: none
2025-12-31T13:40:49.576 [DEBUG] [Thread-128677] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:40:49.636 [DEBUG] [Thread-128677] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:40:49.637 [DEBUG] [Thread-128677] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:40:49.637 [DEBUG] [Thread-128677] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T13:40:49.638 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T13:40:49.638 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:40:49.691 [DEBUG] [Thread-128677] [transport.py] [_log()] userauth is OK
2025-12-31T13:40:49.692 [DEBUG] [Thread-128677] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:40:49.692 [DEBUG] [Thread-128677] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:40:49.692 [DEBUG] [Thread-128677] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T13:40:49.692 [DEBUG] [Thread-128677] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:40:49.716 [INFO] [Thread-128677] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:40:49.716 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T13:40:49.717 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:40:50.586 [DEBUG] [Thread-128677] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:40:50.587 [DEBUG] [Thread-128677] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:40:50.635 [DEBUG] [Thread-128677] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:40:50.635 [DEBUG] [Thread-128677] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:40:50.644 [DEBUG] [Thread-128677] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:40:50.653 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:40:50.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T13:40:50.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T13:40:50.671 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:40:50.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:40:50.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:40:50.680 [DEBUG] [Thread-128677] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:40:52.479 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:40:52.480 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:40:53.609 [DEBUG] [Thread-128679 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:41:08.657 [DEBUG] [Thread-128680 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:41:16.124 [DEBUG] [Thread-128681 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:41:20.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T13:41:20.697 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T13:41:20.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T13:41:21.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 41, 17), 33.37, 10.58, 0.0, 27.1, 25.83, 0, 0, 0, 2, 0, 0),)
2025-12-31T13:41:21.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:41:17
2025-12-31T13:41:21.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T13:41:21.692 [DEBUG] [Thread-128682] [transport.py] [_log()] starting thread (client mode): 0xb95583a0
2025-12-31T13:41:21.692 [DEBUG] [Thread-128682] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:41:21.714 [DEBUG] [Thread-128682] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T13:41:21.714 [INFO] [Thread-128682] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T13:41:21.717 [DEBUG] [Thread-128682] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:41:21.717 [DEBUG] [Thread-128682] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T13:41:21.717 [DEBUG] [Thread-128682] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:41:21.717 [DEBUG] [Thread-128682] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:41:21.717 [DEBUG] [Thread-128682] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:41:21.717 [DEBUG] [Thread-128682] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:41:21.717 [DEBUG] [Thread-128682] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:41:21.717 [DEBUG] [Thread-128682] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:41:21.717 [DEBUG] [Thread-128682] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:41:21.717 [DEBUG] [Thread-128682] [transport.py] [_log()] client lang: <none>
2025-12-31T13:41:21.717 [DEBUG] [Thread-128682] [transport.py] [_log()] server lang: <none>
2025-12-31T13:41:21.717 [DEBUG] [Thread-128682] [transport.py] [_log()] kex follows: False
2025-12-31T13:41:21.717 [DEBUG] [Thread-128682] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:41:21.717 [DEBUG] [Thread-128682] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:41:21.717 [DEBUG] [Thread-128682] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:41:21.717 [DEBUG] [Thread-128682] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:41:21.717 [DEBUG] [Thread-128682] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:41:21.718 [DEBUG] [Thread-128682] [transport.py] [_log()] Compression: none
2025-12-31T13:41:21.718 [DEBUG] [Thread-128682] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:41:21.735 [DEBUG] [Thread-128682] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:41:21.735 [DEBUG] [Thread-128682] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:41:21.736 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T13:41:21.736 [DEBUG] [Thread-128682] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T13:41:21.737 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:41:21.739 [DEBUG] [Thread-128682] [transport.py] [_log()] userauth is OK
2025-12-31T13:41:21.739 [DEBUG] [Thread-128682] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:41:21.739 [DEBUG] [Thread-128682] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:41:21.739 [DEBUG] [Thread-128682] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T13:41:21.739 [DEBUG] [Thread-128682] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:41:21.763 [INFO] [Thread-128682] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:41:21.764 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:41:22.758 [DEBUG] [Thread-128682] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:41:22.759 [DEBUG] [Thread-128682] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:41:22.759 [DEBUG] [Thread-128682] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T13:41:22.800 [DEBUG] [Thread-128682] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:41:22.800 [DEBUG] [Thread-128682] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:41:22.804 [DEBUG] [Thread-128682] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:41:22.816 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:41:22.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T13:41:22.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T13:41:22.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T13:41:22.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:41:22.830 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T13:41:22.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:41:22.830 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:41:22.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T13:41:22.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.486601 -999.00  +25.50  29.22     15   -2.20 1 2 1 1 1   888    0 30.52 94.18 ----- 27.1 29.2 289.0 39.9 29.5 -22.4 29.2 -21.4 28.9 -22.8 29.4 -21.0
2025-12-31T13:41:22.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T13:41:22.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T13:41:22.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.486601
2025-12-31T13:41:22.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T13:41:22.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T13:41:22.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T13:41:22.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T13:41:22.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T13:41:22.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:41:17', tmtdew=33.37, humidity=10.58, cloud=0.0, wind=27.1, temperature=25.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T11:40:42.326', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T13:41:22.832 [DEBUG] [Thread-128682] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:41:22.917 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T13:41:22.929 [DEBUG] [Thread-128685] [transport.py] [_log()] starting thread (client mode): 0xb955bfd0
2025-12-31T13:41:22.929 [DEBUG] [Thread-128685] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:41:22.944 [DEBUG] [Thread-128685] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T13:41:22.944 [INFO] [Thread-128685] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T13:41:22.951 [DEBUG] [Thread-128685] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:41:22.952 [DEBUG] [Thread-128685] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T13:41:22.952 [DEBUG] [Thread-128685] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:41:22.952 [DEBUG] [Thread-128685] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:41:22.952 [DEBUG] [Thread-128685] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:41:22.952 [DEBUG] [Thread-128685] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:41:22.952 [DEBUG] [Thread-128685] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:41:22.952 [DEBUG] [Thread-128685] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:41:22.952 [DEBUG] [Thread-128685] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:41:22.952 [DEBUG] [Thread-128685] [transport.py] [_log()] client lang: <none>
2025-12-31T13:41:22.952 [DEBUG] [Thread-128685] [transport.py] [_log()] server lang: <none>
2025-12-31T13:41:22.952 [DEBUG] [Thread-128685] [transport.py] [_log()] kex follows: False
2025-12-31T13:41:22.952 [DEBUG] [Thread-128685] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:41:22.952 [DEBUG] [Thread-128685] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:41:22.952 [DEBUG] [Thread-128685] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:41:22.952 [DEBUG] [Thread-128685] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:41:22.952 [DEBUG] [Thread-128685] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:41:22.952 [DEBUG] [Thread-128685] [transport.py] [_log()] Compression: none
2025-12-31T13:41:22.952 [DEBUG] [Thread-128685] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:41:23.012 [DEBUG] [Thread-128685] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:41:23.012 [DEBUG] [Thread-128685] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:41:23.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T13:41:23.014 [DEBUG] [Thread-128685] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T13:41:23.015 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:41:23.068 [DEBUG] [Thread-128685] [transport.py] [_log()] userauth is OK
2025-12-31T13:41:23.068 [DEBUG] [Thread-128685] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:41:23.068 [DEBUG] [Thread-128685] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:41:23.068 [DEBUG] [Thread-128685] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T13:41:23.068 [DEBUG] [Thread-128685] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:41:23.088 [INFO] [Thread-128685] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:41:23.088 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T13:41:23.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:41:23.693 [DEBUG] [Thread-128687 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:41:23.928 [DEBUG] [Thread-128685] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:41:23.929 [DEBUG] [Thread-128685] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:41:23.977 [DEBUG] [Thread-128685] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:41:23.977 [DEBUG] [Thread-128685] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:41:23.986 [DEBUG] [Thread-128685] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:41:23.994 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:41:23.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T13:41:24.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T13:41:24.012 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:41:24.012 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:41:24.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:41:24.024 [DEBUG] [Thread-128685] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:41:38.751 [DEBUG] [Thread-128688 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:41:52.617 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:41:52.619 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:41:53.784 [DEBUG] [Thread-128689 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:41:54.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T13:41:54.026 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T13:41:54.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T13:41:54.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 41, 49), 33.27, 10.48, 0.0, 28.51, 25.18, 0, 0, 0, 2, 0, 0),)
2025-12-31T13:41:54.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:41:49
2025-12-31T13:41:54.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T13:41:55.002 [DEBUG] [Thread-128690] [transport.py] [_log()] starting thread (client mode): 0xbbfcc970
2025-12-31T13:41:55.002 [DEBUG] [Thread-128690] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:41:55.024 [DEBUG] [Thread-128690] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T13:41:55.025 [INFO] [Thread-128690] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T13:41:55.028 [DEBUG] [Thread-128690] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:41:55.029 [DEBUG] [Thread-128690] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T13:41:55.029 [DEBUG] [Thread-128690] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:41:55.029 [DEBUG] [Thread-128690] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:41:55.029 [DEBUG] [Thread-128690] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:41:55.029 [DEBUG] [Thread-128690] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:41:55.029 [DEBUG] [Thread-128690] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:41:55.029 [DEBUG] [Thread-128690] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:41:55.029 [DEBUG] [Thread-128690] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:41:55.029 [DEBUG] [Thread-128690] [transport.py] [_log()] client lang: <none>
2025-12-31T13:41:55.029 [DEBUG] [Thread-128690] [transport.py] [_log()] server lang: <none>
2025-12-31T13:41:55.029 [DEBUG] [Thread-128690] [transport.py] [_log()] kex follows: False
2025-12-31T13:41:55.029 [DEBUG] [Thread-128690] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:41:55.029 [DEBUG] [Thread-128690] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:41:55.029 [DEBUG] [Thread-128690] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:41:55.029 [DEBUG] [Thread-128690] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:41:55.029 [DEBUG] [Thread-128690] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:41:55.029 [DEBUG] [Thread-128690] [transport.py] [_log()] Compression: none
2025-12-31T13:41:55.029 [DEBUG] [Thread-128690] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:41:55.045 [DEBUG] [Thread-128690] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:41:55.045 [DEBUG] [Thread-128690] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:41:55.045 [DEBUG] [Thread-128690] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T13:41:55.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T13:41:55.046 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:41:55.046 [DEBUG] [Thread-128690] [transport.py] [_log()] userauth is OK
2025-12-31T13:41:55.046 [DEBUG] [Thread-128690] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:41:55.046 [DEBUG] [Thread-128690] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:41:55.046 [DEBUG] [Thread-128690] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T13:41:55.046 [DEBUG] [Thread-128690] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:41:55.061 [INFO] [Thread-128690] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:41:55.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:41:55.704 [DEBUG] [Thread-128690] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:41:55.704 [DEBUG] [Thread-128690] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:41:55.705 [DEBUG] [Thread-128690] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T13:41:55.746 [DEBUG] [Thread-128690] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:41:55.746 [DEBUG] [Thread-128690] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:41:55.748 [DEBUG] [Thread-128690] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:41:55.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:41:55.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T13:41:55.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T13:41:55.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T13:41:55.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:41:55.767 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T13:41:55.768 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:41:55.768 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:41:55.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T13:41:55.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.486948 -999.00  +25.40  23.52     15   -2.90 1 2 1 1 1   888    0 30.18 92.16 ----- 23.7 23.5 295.6 30.8 29.4 -22.3 29.2 -21.8 28.9 -23.8 29.4 -21.2
2025-12-31T13:41:55.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T13:41:55.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T13:41:55.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.486948
2025-12-31T13:41:55.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T13:41:55.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T13:41:55.769 [DEBUG] [Thread-128690] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:41:55.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T13:41:55.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T13:41:55.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T13:41:55.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:41:49', tmtdew=33.27, humidity=10.48, cloud=0.0, wind=28.51, temperature=25.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T11:41:12.307', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T13:41:55.857 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T13:41:55.868 [DEBUG] [Thread-128693] [transport.py] [_log()] starting thread (client mode): 0xb6b158d0
2025-12-31T13:41:55.868 [DEBUG] [Thread-128693] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:41:55.883 [DEBUG] [Thread-128693] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T13:41:55.883 [INFO] [Thread-128693] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T13:41:55.892 [DEBUG] [Thread-128693] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:41:55.892 [DEBUG] [Thread-128693] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T13:41:55.892 [DEBUG] [Thread-128693] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:41:55.892 [DEBUG] [Thread-128693] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:41:55.892 [DEBUG] [Thread-128693] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:41:55.892 [DEBUG] [Thread-128693] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:41:55.892 [DEBUG] [Thread-128693] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:41:55.892 [DEBUG] [Thread-128693] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:41:55.892 [DEBUG] [Thread-128693] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:41:55.892 [DEBUG] [Thread-128693] [transport.py] [_log()] client lang: <none>
2025-12-31T13:41:55.892 [DEBUG] [Thread-128693] [transport.py] [_log()] server lang: <none>
2025-12-31T13:41:55.892 [DEBUG] [Thread-128693] [transport.py] [_log()] kex follows: False
2025-12-31T13:41:55.892 [DEBUG] [Thread-128693] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:41:55.892 [DEBUG] [Thread-128693] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:41:55.892 [DEBUG] [Thread-128693] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:41:55.892 [DEBUG] [Thread-128693] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:41:55.892 [DEBUG] [Thread-128693] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:41:55.892 [DEBUG] [Thread-128693] [transport.py] [_log()] Compression: none
2025-12-31T13:41:55.892 [DEBUG] [Thread-128693] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:41:55.946 [DEBUG] [Thread-128693] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:41:55.946 [DEBUG] [Thread-128693] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:41:55.946 [DEBUG] [Thread-128693] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T13:41:55.946 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T13:41:55.946 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:41:56.004 [DEBUG] [Thread-128693] [transport.py] [_log()] userauth is OK
2025-12-31T13:41:56.004 [DEBUG] [Thread-128693] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:41:56.004 [DEBUG] [Thread-128693] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:41:56.004 [DEBUG] [Thread-128693] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T13:41:56.005 [DEBUG] [Thread-128693] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:41:56.026 [INFO] [Thread-128693] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:41:56.026 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T13:41:56.028 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:41:56.861 [DEBUG] [Thread-128693] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:41:56.862 [DEBUG] [Thread-128693] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:41:56.909 [DEBUG] [Thread-128693] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:41:56.909 [DEBUG] [Thread-128693] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:41:56.918 [DEBUG] [Thread-128693] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:41:56.928 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:41:56.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T13:41:56.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T13:41:56.946 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:41:56.946 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:41:56.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:41:56.957 [DEBUG] [Thread-128693] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:42:08.821 [DEBUG] [Thread-128695 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:42:16.174 [DEBUG] [Thread-128696 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:42:23.868 [DEBUG] [Thread-128697 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:42:26.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T13:42:26.978 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T13:42:26.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T13:42:27.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 42, 21), 33.14, 10.56, 0.0, 24.09, 25.08, 0, 0, 0, 2, 0, 0),)
2025-12-31T13:42:27.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:42:21
2025-12-31T13:42:27.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T13:42:27.956 [DEBUG] [Thread-128698] [transport.py] [_log()] starting thread (client mode): 0xbbfcebc0
2025-12-31T13:42:27.956 [DEBUG] [Thread-128698] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:42:27.976 [DEBUG] [Thread-128698] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T13:42:27.976 [INFO] [Thread-128698] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T13:42:27.979 [DEBUG] [Thread-128698] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:42:27.979 [DEBUG] [Thread-128698] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T13:42:27.979 [DEBUG] [Thread-128698] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:42:27.979 [DEBUG] [Thread-128698] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:42:27.979 [DEBUG] [Thread-128698] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:42:27.979 [DEBUG] [Thread-128698] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:42:27.979 [DEBUG] [Thread-128698] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:42:27.979 [DEBUG] [Thread-128698] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:42:27.979 [DEBUG] [Thread-128698] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:42:27.979 [DEBUG] [Thread-128698] [transport.py] [_log()] client lang: <none>
2025-12-31T13:42:27.979 [DEBUG] [Thread-128698] [transport.py] [_log()] server lang: <none>
2025-12-31T13:42:27.979 [DEBUG] [Thread-128698] [transport.py] [_log()] kex follows: False
2025-12-31T13:42:27.979 [DEBUG] [Thread-128698] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:42:27.980 [DEBUG] [Thread-128698] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:42:27.980 [DEBUG] [Thread-128698] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:42:27.980 [DEBUG] [Thread-128698] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:42:27.980 [DEBUG] [Thread-128698] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:42:27.980 [DEBUG] [Thread-128698] [transport.py] [_log()] Compression: none
2025-12-31T13:42:27.980 [DEBUG] [Thread-128698] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:42:27.998 [DEBUG] [Thread-128698] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:42:27.999 [DEBUG] [Thread-128698] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:42:27.999 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T13:42:28.000 [DEBUG] [Thread-128698] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T13:42:28.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:42:28.002 [DEBUG] [Thread-128698] [transport.py] [_log()] userauth is OK
2025-12-31T13:42:28.002 [DEBUG] [Thread-128698] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:42:28.002 [DEBUG] [Thread-128698] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:42:28.002 [DEBUG] [Thread-128698] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T13:42:28.003 [DEBUG] [Thread-128698] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:42:28.024 [INFO] [Thread-128698] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:42:28.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:42:28.671 [DEBUG] [Thread-128698] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:42:28.671 [DEBUG] [Thread-128698] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:42:28.671 [DEBUG] [Thread-128698] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T13:42:28.712 [DEBUG] [Thread-128698] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:42:28.712 [DEBUG] [Thread-128698] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:42:28.716 [DEBUG] [Thread-128698] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:42:28.729 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:42:28.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T13:42:28.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T13:42:28.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T13:42:28.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:42:28.740 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T13:42:28.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:42:28.741 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:42:28.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T13:42:28.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.487295 -999.00  +25.10  20.60     15   -2.70 1 2 1 1 1   888    0 30.89 96.70 ----- 20.7 20.6 299.6 27.0 29.5 -21.4 29.3 -21.5 28.9 -20.8 29.3 -20.9
2025-12-31T13:42:28.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T13:42:28.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T13:42:28.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.487295
2025-12-31T13:42:28.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T13:42:28.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T13:42:28.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T13:42:28.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T13:42:28.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T13:42:28.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:42:21', tmtdew=33.14, humidity=10.56, cloud=0.0, wind=24.09, temperature=25.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T11:41:42.288', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T13:42:28.742 [DEBUG] [Thread-128698] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:42:28.818 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T13:42:28.830 [DEBUG] [Thread-128701] [transport.py] [_log()] starting thread (client mode): 0xb6b17520
2025-12-31T13:42:28.830 [DEBUG] [Thread-128701] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:42:28.845 [DEBUG] [Thread-128701] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T13:42:28.845 [INFO] [Thread-128701] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T13:42:28.852 [DEBUG] [Thread-128701] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:42:28.852 [DEBUG] [Thread-128701] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T13:42:28.852 [DEBUG] [Thread-128701] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:42:28.852 [DEBUG] [Thread-128701] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:42:28.852 [DEBUG] [Thread-128701] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:42:28.852 [DEBUG] [Thread-128701] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:42:28.852 [DEBUG] [Thread-128701] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:42:28.852 [DEBUG] [Thread-128701] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:42:28.852 [DEBUG] [Thread-128701] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:42:28.852 [DEBUG] [Thread-128701] [transport.py] [_log()] client lang: <none>
2025-12-31T13:42:28.853 [DEBUG] [Thread-128701] [transport.py] [_log()] server lang: <none>
2025-12-31T13:42:28.853 [DEBUG] [Thread-128701] [transport.py] [_log()] kex follows: False
2025-12-31T13:42:28.853 [DEBUG] [Thread-128701] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:42:28.853 [DEBUG] [Thread-128701] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:42:28.853 [DEBUG] [Thread-128701] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:42:28.853 [DEBUG] [Thread-128701] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:42:28.853 [DEBUG] [Thread-128701] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:42:28.853 [DEBUG] [Thread-128701] [transport.py] [_log()] Compression: none
2025-12-31T13:42:28.853 [DEBUG] [Thread-128701] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:42:28.911 [DEBUG] [Thread-128701] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:42:28.911 [DEBUG] [Thread-128701] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:42:28.912 [DEBUG] [Thread-128701] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T13:42:28.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T13:42:28.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:42:28.967 [DEBUG] [Thread-128701] [transport.py] [_log()] userauth is OK
2025-12-31T13:42:28.967 [DEBUG] [Thread-128701] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:42:28.968 [DEBUG] [Thread-128701] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:42:28.968 [DEBUG] [Thread-128701] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T13:42:28.968 [DEBUG] [Thread-128701] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:42:28.987 [INFO] [Thread-128701] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:42:28.987 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T13:42:28.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:42:29.835 [DEBUG] [Thread-128701] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:42:29.835 [DEBUG] [Thread-128701] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:42:29.883 [DEBUG] [Thread-128701] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:42:29.883 [DEBUG] [Thread-128701] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:42:29.892 [DEBUG] [Thread-128701] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:42:29.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:42:29.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')
2025-12-31T13:42:29.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T13:42:29.920 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:42:29.920 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:42:29.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:42:29.929 [DEBUG] [Thread-128701] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:42:38.906 [DEBUG] [Thread-128703 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:42:52.759 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:42:52.760 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:42:53.961 [DEBUG] [Thread-128704 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:42:59.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T13:42:59.951 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T13:42:59.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-12-31T13:43:00.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 42, 53), 33.01, 10.68, 0.0, 26.17, 24.98, 0, 0, 0, 2, 0, 0),)
2025-12-31T13:43:00.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:42:53
2025-12-31T13:43:00.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T13:43:00.968 [DEBUG] [Thread-128705] [transport.py] [_log()] starting thread (client mode): 0xb6b625f0
2025-12-31T13:43:00.968 [DEBUG] [Thread-128705] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:43:00.988 [DEBUG] [Thread-128705] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T13:43:00.988 [INFO] [Thread-128705] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T13:43:00.992 [DEBUG] [Thread-128705] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:43:00.992 [DEBUG] [Thread-128705] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T13:43:00.992 [DEBUG] [Thread-128705] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:43:00.992 [DEBUG] [Thread-128705] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:43:00.992 [DEBUG] [Thread-128705] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:43:00.992 [DEBUG] [Thread-128705] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:43:00.992 [DEBUG] [Thread-128705] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:43:00.992 [DEBUG] [Thread-128705] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:43:00.992 [DEBUG] [Thread-128705] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:43:00.992 [DEBUG] [Thread-128705] [transport.py] [_log()] client lang: <none>
2025-12-31T13:43:00.992 [DEBUG] [Thread-128705] [transport.py] [_log()] server lang: <none>
2025-12-31T13:43:00.992 [DEBUG] [Thread-128705] [transport.py] [_log()] kex follows: False
2025-12-31T13:43:00.992 [DEBUG] [Thread-128705] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:43:00.992 [DEBUG] [Thread-128705] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:43:00.992 [DEBUG] [Thread-128705] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:43:00.992 [DEBUG] [Thread-128705] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:43:00.992 [DEBUG] [Thread-128705] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:43:00.992 [DEBUG] [Thread-128705] [transport.py] [_log()] Compression: none
2025-12-31T13:43:00.992 [DEBUG] [Thread-128705] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:43:01.000 [DEBUG] [Thread-128705] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:43:01.000 [DEBUG] [Thread-128705] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:43:01.000 [DEBUG] [Thread-128705] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T13:43:01.000 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T13:43:01.000 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:43:01.001 [DEBUG] [Thread-128705] [transport.py] [_log()] userauth is OK
2025-12-31T13:43:01.001 [DEBUG] [Thread-128705] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:43:01.002 [DEBUG] [Thread-128705] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:43:01.002 [DEBUG] [Thread-128705] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T13:43:01.002 [DEBUG] [Thread-128705] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:43:01.021 [INFO] [Thread-128705] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:43:01.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:43:01.655 [DEBUG] [Thread-128705] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:43:01.656 [DEBUG] [Thread-128705] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:43:01.656 [DEBUG] [Thread-128705] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T13:43:01.696 [DEBUG] [Thread-128705] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:43:01.696 [DEBUG] [Thread-128705] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:43:01.698 [DEBUG] [Thread-128705] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:43:01.711 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:43:01.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T13:43:01.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T13:43:01.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T13:43:01.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:43:01.717 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T13:43:01.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:43:01.717 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:43:01.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T13:43:01.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.487642 -999.00  +25.00  29.57     15   -2.50 1 2 1 1 1   888    0 30.70 96.67 ----- 30.1 29.6 286.4 40.6 29.4 -24.1 29.1 -21.7 28.9 -22.4 29.3 -22.1
2025-12-31T13:43:01.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T13:43:01.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T13:43:01.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.487642
2025-12-31T13:43:01.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T13:43:01.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T13:43:01.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T13:43:01.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T13:43:01.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T13:43:01.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:42:53', tmtdew=33.01, humidity=10.68, cloud=0.0, wind=26.17, temperature=24.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T11:42:12.269', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T13:43:01.718 [DEBUG] [Thread-128705] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:43:01.791 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T13:43:01.803 [DEBUG] [Thread-128708] [transport.py] [_log()] starting thread (client mode): 0xb6b28a90
2025-12-31T13:43:01.803 [DEBUG] [Thread-128708] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:43:01.817 [DEBUG] [Thread-128708] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T13:43:01.818 [INFO] [Thread-128708] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T13:43:01.825 [DEBUG] [Thread-128708] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:43:01.825 [DEBUG] [Thread-128708] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T13:43:01.826 [DEBUG] [Thread-128708] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:43:01.826 [DEBUG] [Thread-128708] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:43:01.826 [DEBUG] [Thread-128708] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:43:01.826 [DEBUG] [Thread-128708] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:43:01.826 [DEBUG] [Thread-128708] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:43:01.826 [DEBUG] [Thread-128708] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:43:01.826 [DEBUG] [Thread-128708] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:43:01.826 [DEBUG] [Thread-128708] [transport.py] [_log()] client lang: <none>
2025-12-31T13:43:01.826 [DEBUG] [Thread-128708] [transport.py] [_log()] server lang: <none>
2025-12-31T13:43:01.826 [DEBUG] [Thread-128708] [transport.py] [_log()] kex follows: False
2025-12-31T13:43:01.826 [DEBUG] [Thread-128708] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:43:01.826 [DEBUG] [Thread-128708] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:43:01.826 [DEBUG] [Thread-128708] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:43:01.826 [DEBUG] [Thread-128708] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:43:01.826 [DEBUG] [Thread-128708] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:43:01.826 [DEBUG] [Thread-128708] [transport.py] [_log()] Compression: none
2025-12-31T13:43:01.826 [DEBUG] [Thread-128708] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:43:01.889 [DEBUG] [Thread-128708] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:43:01.889 [DEBUG] [Thread-128708] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:43:01.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T13:43:01.890 [DEBUG] [Thread-128708] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T13:43:01.891 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:43:01.948 [DEBUG] [Thread-128708] [transport.py] [_log()] userauth is OK
2025-12-31T13:43:01.948 [DEBUG] [Thread-128708] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:43:01.949 [DEBUG] [Thread-128708] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:43:01.949 [DEBUG] [Thread-128708] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T13:43:01.949 [DEBUG] [Thread-128708] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:43:01.967 [INFO] [Thread-128708] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:43:01.968 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T13:43:01.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:43:02.843 [DEBUG] [Thread-128708] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:43:02.843 [DEBUG] [Thread-128708] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:43:02.891 [DEBUG] [Thread-128708] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:43:02.892 [DEBUG] [Thread-128708] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:43:02.900 [DEBUG] [Thread-128708] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:43:02.910 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:43:02.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T13:43:02.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T13:43:02.928 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:43:02.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:43:02.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:43:02.937 [DEBUG] [Thread-128708] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:43:08.993 [DEBUG] [Thread-128710 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:43:16.227 [DEBUG] [Thread-128711 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:43:24.046 [DEBUG] [Thread-128712 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:43:32.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T13:43:32.953 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T13:43:32.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T13:43:33.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 43, 25), 33.01, 10.71, 0.0, 26.5, 25.15, 0, 0, 0, 2, 0, 0),)
2025-12-31T13:43:33.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:43:25
2025-12-31T13:43:33.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T13:43:33.931 [DEBUG] [Thread-128713] [transport.py] [_log()] starting thread (client mode): 0xb6b16860
2025-12-31T13:43:33.931 [DEBUG] [Thread-128713] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:43:33.947 [DEBUG] [Thread-128713] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T13:43:33.947 [INFO] [Thread-128713] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T13:43:33.950 [DEBUG] [Thread-128713] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:43:33.950 [DEBUG] [Thread-128713] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T13:43:33.950 [DEBUG] [Thread-128713] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:43:33.950 [DEBUG] [Thread-128713] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:43:33.950 [DEBUG] [Thread-128713] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:43:33.950 [DEBUG] [Thread-128713] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:43:33.950 [DEBUG] [Thread-128713] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:43:33.950 [DEBUG] [Thread-128713] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:43:33.950 [DEBUG] [Thread-128713] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:43:33.950 [DEBUG] [Thread-128713] [transport.py] [_log()] client lang: <none>
2025-12-31T13:43:33.950 [DEBUG] [Thread-128713] [transport.py] [_log()] server lang: <none>
2025-12-31T13:43:33.950 [DEBUG] [Thread-128713] [transport.py] [_log()] kex follows: False
2025-12-31T13:43:33.950 [DEBUG] [Thread-128713] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:43:33.950 [DEBUG] [Thread-128713] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:43:33.950 [DEBUG] [Thread-128713] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:43:33.950 [DEBUG] [Thread-128713] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:43:33.950 [DEBUG] [Thread-128713] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:43:33.950 [DEBUG] [Thread-128713] [transport.py] [_log()] Compression: none
2025-12-31T13:43:33.950 [DEBUG] [Thread-128713] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:43:33.967 [DEBUG] [Thread-128713] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:43:33.967 [DEBUG] [Thread-128713] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:43:33.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T13:43:33.968 [DEBUG] [Thread-128713] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T13:43:33.969 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:43:33.970 [DEBUG] [Thread-128713] [transport.py] [_log()] userauth is OK
2025-12-31T13:43:33.970 [DEBUG] [Thread-128713] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:43:33.970 [DEBUG] [Thread-128713] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:43:33.970 [DEBUG] [Thread-128713] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T13:43:33.970 [DEBUG] [Thread-128713] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:43:33.995 [INFO] [Thread-128713] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:43:33.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:43:34.649 [DEBUG] [Thread-128713] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:43:34.649 [DEBUG] [Thread-128713] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:43:34.650 [DEBUG] [Thread-128713] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T13:43:34.690 [DEBUG] [Thread-128713] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:43:34.690 [DEBUG] [Thread-128713] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:43:34.694 [DEBUG] [Thread-128713] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:43:34.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:43:34.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T13:43:34.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T13:43:34.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T13:43:34.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:43:34.719 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T13:43:34.720 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:43:34.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:43:34.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T13:43:34.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.487990 -999.00  +25.10  22.95     15   -2.60 1 2 1 1 1   888    0 30.65 93.73 ----- 19.6 22.9 282.7 32.0 29.4 -21.2 29.2 -21.3 28.6 -20.1 29.3 -20.7
2025-12-31T13:43:34.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T13:43:34.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T13:43:34.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.487990
2025-12-31T13:43:34.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T13:43:34.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T13:43:34.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T13:43:34.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T13:43:34.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T13:43:34.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:43:25', tmtdew=33.01, humidity=10.71, cloud=0.0, wind=26.5, temperature=25.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T11:42:42.336', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T13:43:34.722 [DEBUG] [Thread-128713] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:43:34.806 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T13:43:34.817 [DEBUG] [Thread-128716] [transport.py] [_log()] starting thread (client mode): 0xbbfce800
2025-12-31T13:43:34.817 [DEBUG] [Thread-128716] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:43:34.837 [DEBUG] [Thread-128716] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T13:43:34.837 [INFO] [Thread-128716] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T13:43:34.844 [DEBUG] [Thread-128716] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:43:34.844 [DEBUG] [Thread-128716] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T13:43:34.844 [DEBUG] [Thread-128716] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:43:34.844 [DEBUG] [Thread-128716] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:43:34.844 [DEBUG] [Thread-128716] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:43:34.844 [DEBUG] [Thread-128716] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:43:34.845 [DEBUG] [Thread-128716] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:43:34.845 [DEBUG] [Thread-128716] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:43:34.845 [DEBUG] [Thread-128716] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:43:34.845 [DEBUG] [Thread-128716] [transport.py] [_log()] client lang: <none>
2025-12-31T13:43:34.845 [DEBUG] [Thread-128716] [transport.py] [_log()] server lang: <none>
2025-12-31T13:43:34.845 [DEBUG] [Thread-128716] [transport.py] [_log()] kex follows: False
2025-12-31T13:43:34.845 [DEBUG] [Thread-128716] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:43:34.845 [DEBUG] [Thread-128716] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:43:34.845 [DEBUG] [Thread-128716] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:43:34.845 [DEBUG] [Thread-128716] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:43:34.845 [DEBUG] [Thread-128716] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:43:34.845 [DEBUG] [Thread-128716] [transport.py] [_log()] Compression: none
2025-12-31T13:43:34.845 [DEBUG] [Thread-128716] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:43:34.902 [DEBUG] [Thread-128716] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:43:34.902 [DEBUG] [Thread-128716] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:43:34.902 [DEBUG] [Thread-128716] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T13:43:34.903 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T13:43:34.903 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:43:34.959 [DEBUG] [Thread-128716] [transport.py] [_log()] userauth is OK
2025-12-31T13:43:34.959 [DEBUG] [Thread-128716] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:43:34.959 [DEBUG] [Thread-128716] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:43:34.959 [DEBUG] [Thread-128716] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T13:43:34.959 [DEBUG] [Thread-128716] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:43:34.974 [INFO] [Thread-128716] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:43:34.974 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T13:43:34.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:43:35.809 [DEBUG] [Thread-128716] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:43:35.809 [DEBUG] [Thread-128716] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:43:35.857 [DEBUG] [Thread-128716] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:43:35.857 [DEBUG] [Thread-128716] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:43:35.865 [DEBUG] [Thread-128716] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:43:35.873 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:43:35.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T13:43:35.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T13:43:35.889 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:43:35.889 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:43:35.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:43:35.897 [DEBUG] [Thread-128716] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:43:39.075 [DEBUG] [Thread-128718 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:43:52.898 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:43:52.900 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:43:54.118 [DEBUG] [Thread-128719 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:44:05.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T13:44:05.919 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T13:44:05.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T13:44:06.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 43, 57), 33.1, 10.56, 0.0, 28.94, 25.28, 0, 0, 0, 2, 0, 0),)
2025-12-31T13:44:06.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:43:57
2025-12-31T13:44:06.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T13:44:06.898 [DEBUG] [Thread-128720] [transport.py] [_log()] starting thread (client mode): 0xb6b631c0
2025-12-31T13:44:06.898 [DEBUG] [Thread-128720] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:44:06.919 [DEBUG] [Thread-128720] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T13:44:06.919 [INFO] [Thread-128720] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T13:44:06.922 [DEBUG] [Thread-128720] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:44:06.922 [DEBUG] [Thread-128720] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T13:44:06.922 [DEBUG] [Thread-128720] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:44:06.922 [DEBUG] [Thread-128720] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:44:06.922 [DEBUG] [Thread-128720] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:44:06.922 [DEBUG] [Thread-128720] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:44:06.922 [DEBUG] [Thread-128720] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:44:06.923 [DEBUG] [Thread-128720] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:44:06.923 [DEBUG] [Thread-128720] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:44:06.923 [DEBUG] [Thread-128720] [transport.py] [_log()] client lang: <none>
2025-12-31T13:44:06.923 [DEBUG] [Thread-128720] [transport.py] [_log()] server lang: <none>
2025-12-31T13:44:06.923 [DEBUG] [Thread-128720] [transport.py] [_log()] kex follows: False
2025-12-31T13:44:06.923 [DEBUG] [Thread-128720] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:44:06.923 [DEBUG] [Thread-128720] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:44:06.923 [DEBUG] [Thread-128720] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:44:06.923 [DEBUG] [Thread-128720] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:44:06.923 [DEBUG] [Thread-128720] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:44:06.923 [DEBUG] [Thread-128720] [transport.py] [_log()] Compression: none
2025-12-31T13:44:06.923 [DEBUG] [Thread-128720] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:44:06.941 [DEBUG] [Thread-128720] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:44:06.941 [DEBUG] [Thread-128720] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:44:06.942 [DEBUG] [Thread-128720] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T13:44:06.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T13:44:06.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:44:06.944 [DEBUG] [Thread-128720] [transport.py] [_log()] userauth is OK
2025-12-31T13:44:06.944 [DEBUG] [Thread-128720] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:44:06.944 [DEBUG] [Thread-128720] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:44:06.944 [DEBUG] [Thread-128720] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T13:44:06.944 [DEBUG] [Thread-128720] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:44:06.962 [INFO] [Thread-128720] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:44:06.962 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:44:07.593 [DEBUG] [Thread-128720] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:44:07.593 [DEBUG] [Thread-128720] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:44:07.594 [DEBUG] [Thread-128720] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T13:44:07.634 [DEBUG] [Thread-128720] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:44:07.635 [DEBUG] [Thread-128720] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:44:07.638 [DEBUG] [Thread-128720] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:44:07.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:44:07.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T13:44:07.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T13:44:07.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T13:44:07.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:44:07.659 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T13:44:07.660 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:44:07.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:44:07.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T13:44:07.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.488337 -999.00  +25.00  19.89     15   -2.80 1 2 1 1 1   888    0 31.03 91.30 ----- 24.4 19.9 277.0 34.6 29.3 -21.4 29.2 -20.5 28.8 -24.9 29.2 -20.3
2025-12-31T13:44:07.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T13:44:07.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T13:44:07.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.488337
2025-12-31T13:44:07.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T13:44:07.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T13:44:07.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T13:44:07.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T13:44:07.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T13:44:07.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:43:57', tmtdew=33.1, humidity=10.56, cloud=0.0, wind=28.94, temperature=25.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T11:43:12.317', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T13:44:07.663 [DEBUG] [Thread-128720] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:44:07.746 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T13:44:07.760 [DEBUG] [Thread-128723] [transport.py] [_log()] starting thread (client mode): 0xb6b633d0
2025-12-31T13:44:07.761 [DEBUG] [Thread-128723] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:44:07.775 [DEBUG] [Thread-128723] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T13:44:07.775 [INFO] [Thread-128723] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T13:44:07.785 [DEBUG] [Thread-128723] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:44:07.786 [DEBUG] [Thread-128723] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T13:44:07.786 [DEBUG] [Thread-128723] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:44:07.786 [DEBUG] [Thread-128723] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:44:07.786 [DEBUG] [Thread-128723] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:44:07.786 [DEBUG] [Thread-128723] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:44:07.786 [DEBUG] [Thread-128723] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:44:07.786 [DEBUG] [Thread-128723] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:44:07.786 [DEBUG] [Thread-128723] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:44:07.786 [DEBUG] [Thread-128723] [transport.py] [_log()] client lang: <none>
2025-12-31T13:44:07.786 [DEBUG] [Thread-128723] [transport.py] [_log()] server lang: <none>
2025-12-31T13:44:07.786 [DEBUG] [Thread-128723] [transport.py] [_log()] kex follows: False
2025-12-31T13:44:07.786 [DEBUG] [Thread-128723] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:44:07.786 [DEBUG] [Thread-128723] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:44:07.786 [DEBUG] [Thread-128723] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:44:07.786 [DEBUG] [Thread-128723] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:44:07.787 [DEBUG] [Thread-128723] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:44:07.787 [DEBUG] [Thread-128723] [transport.py] [_log()] Compression: none
2025-12-31T13:44:07.787 [DEBUG] [Thread-128723] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:44:07.845 [DEBUG] [Thread-128723] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:44:07.845 [DEBUG] [Thread-128723] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:44:07.846 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T13:44:07.846 [DEBUG] [Thread-128723] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T13:44:07.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:44:07.905 [DEBUG] [Thread-128723] [transport.py] [_log()] userauth is OK
2025-12-31T13:44:07.905 [DEBUG] [Thread-128723] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:44:07.905 [DEBUG] [Thread-128723] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:44:07.905 [DEBUG] [Thread-128723] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T13:44:07.905 [DEBUG] [Thread-128723] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:44:07.924 [INFO] [Thread-128723] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:44:07.925 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T13:44:07.925 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:44:08.759 [DEBUG] [Thread-128723] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:44:08.759 [DEBUG] [Thread-128723] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:44:08.807 [DEBUG] [Thread-128723] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:44:08.807 [DEBUG] [Thread-128723] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:44:08.816 [DEBUG] [Thread-128723] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:44:08.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:44:08.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T13:44:08.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T13:44:08.844 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:44:08.844 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:44:08.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:44:08.853 [DEBUG] [Thread-128723] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:44:09.155 [DEBUG] [Thread-128725 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:44:16.270 [DEBUG] [Thread-128726 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:44:24.210 [DEBUG] [Thread-128727 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:44:38.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T13:44:38.873 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T13:44:38.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T13:44:39.247 [DEBUG] [Thread-128728 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:44:39.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 44, 29), 33.28, 10.45, 0.0, 28.39, 25.4, 0, 0, 0, 2, 0, 0),)
2025-12-31T13:44:39.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:44:29
2025-12-31T13:44:39.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T13:44:39.846 [DEBUG] [Thread-128729] [transport.py] [_log()] starting thread (client mode): 0xb6b17640
2025-12-31T13:44:39.846 [DEBUG] [Thread-128729] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:44:39.867 [DEBUG] [Thread-128729] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T13:44:39.867 [INFO] [Thread-128729] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T13:44:39.868 [DEBUG] [Thread-128729] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:44:39.868 [DEBUG] [Thread-128729] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T13:44:39.868 [DEBUG] [Thread-128729] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:44:39.868 [DEBUG] [Thread-128729] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:44:39.868 [DEBUG] [Thread-128729] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:44:39.868 [DEBUG] [Thread-128729] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:44:39.868 [DEBUG] [Thread-128729] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:44:39.868 [DEBUG] [Thread-128729] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:44:39.868 [DEBUG] [Thread-128729] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:44:39.868 [DEBUG] [Thread-128729] [transport.py] [_log()] client lang: <none>
2025-12-31T13:44:39.868 [DEBUG] [Thread-128729] [transport.py] [_log()] server lang: <none>
2025-12-31T13:44:39.868 [DEBUG] [Thread-128729] [transport.py] [_log()] kex follows: False
2025-12-31T13:44:39.868 [DEBUG] [Thread-128729] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:44:39.868 [DEBUG] [Thread-128729] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:44:39.868 [DEBUG] [Thread-128729] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:44:39.868 [DEBUG] [Thread-128729] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:44:39.868 [DEBUG] [Thread-128729] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:44:39.868 [DEBUG] [Thread-128729] [transport.py] [_log()] Compression: none
2025-12-31T13:44:39.868 [DEBUG] [Thread-128729] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:44:39.886 [DEBUG] [Thread-128729] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:44:39.887 [DEBUG] [Thread-128729] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:44:39.887 [DEBUG] [Thread-128729] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T13:44:39.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T13:44:39.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:44:39.888 [DEBUG] [Thread-128729] [transport.py] [_log()] userauth is OK
2025-12-31T13:44:39.888 [DEBUG] [Thread-128729] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:44:39.888 [DEBUG] [Thread-128729] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:44:39.888 [DEBUG] [Thread-128729] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T13:44:39.888 [DEBUG] [Thread-128729] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:44:39.905 [INFO] [Thread-128729] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:44:39.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:44:40.546 [DEBUG] [Thread-128729] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:44:40.547 [DEBUG] [Thread-128729] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:44:40.547 [DEBUG] [Thread-128729] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T13:44:40.588 [DEBUG] [Thread-128729] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:44:40.588 [DEBUG] [Thread-128729] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:44:40.592 [DEBUG] [Thread-128729] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:44:40.604 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:44:40.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T13:44:40.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T13:44:40.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T13:44:40.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:44:40.618 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T13:44:40.618 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:44:40.619 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:44:40.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T13:44:40.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.488684 -999.00  +25.20  22.95     15   -2.40 1 2 1 1 1   888    0 29.87 86.13 ----- 29.7 22.9 281.0 27.6 29.6 -19.8 29.4 -20.0 28.7 -20.0 29.4 -18.7
2025-12-31T13:44:40.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T13:44:40.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T13:44:40.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.488684
2025-12-31T13:44:40.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T13:44:40.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T13:44:40.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T13:44:40.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T13:44:40.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T13:44:40.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:44:29', tmtdew=33.28, humidity=10.45, cloud=0.0, wind=28.39, temperature=25.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T11:43:42.298', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T13:44:40.621 [DEBUG] [Thread-128729] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:44:40.704 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T13:44:40.716 [DEBUG] [Thread-128732] [transport.py] [_log()] starting thread (client mode): 0xb6b17a00
2025-12-31T13:44:40.716 [DEBUG] [Thread-128732] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:44:40.732 [DEBUG] [Thread-128732] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T13:44:40.732 [INFO] [Thread-128732] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T13:44:40.740 [DEBUG] [Thread-128732] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:44:40.740 [DEBUG] [Thread-128732] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T13:44:40.740 [DEBUG] [Thread-128732] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:44:40.741 [DEBUG] [Thread-128732] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:44:40.741 [DEBUG] [Thread-128732] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:44:40.741 [DEBUG] [Thread-128732] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:44:40.741 [DEBUG] [Thread-128732] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:44:40.741 [DEBUG] [Thread-128732] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:44:40.741 [DEBUG] [Thread-128732] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:44:40.741 [DEBUG] [Thread-128732] [transport.py] [_log()] client lang: <none>
2025-12-31T13:44:40.741 [DEBUG] [Thread-128732] [transport.py] [_log()] server lang: <none>
2025-12-31T13:44:40.742 [DEBUG] [Thread-128732] [transport.py] [_log()] kex follows: False
2025-12-31T13:44:40.742 [DEBUG] [Thread-128732] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:44:40.742 [DEBUG] [Thread-128732] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:44:40.742 [DEBUG] [Thread-128732] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:44:40.742 [DEBUG] [Thread-128732] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:44:40.742 [DEBUG] [Thread-128732] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:44:40.742 [DEBUG] [Thread-128732] [transport.py] [_log()] Compression: none
2025-12-31T13:44:40.742 [DEBUG] [Thread-128732] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:44:40.801 [DEBUG] [Thread-128732] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:44:40.801 [DEBUG] [Thread-128732] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:44:40.802 [DEBUG] [Thread-128732] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T13:44:40.802 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T13:44:40.803 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:44:40.860 [DEBUG] [Thread-128732] [transport.py] [_log()] userauth is OK
2025-12-31T13:44:40.860 [DEBUG] [Thread-128732] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:44:40.860 [DEBUG] [Thread-128732] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:44:40.861 [DEBUG] [Thread-128732] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T13:44:40.861 [DEBUG] [Thread-128732] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:44:40.880 [INFO] [Thread-128732] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:44:40.881 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T13:44:40.882 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:44:41.781 [DEBUG] [Thread-128732] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:44:41.781 [DEBUG] [Thread-128732] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:44:41.829 [DEBUG] [Thread-128732] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:44:41.829 [DEBUG] [Thread-128732] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:44:41.838 [DEBUG] [Thread-128732] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:44:41.847 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:44:41.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T13:44:41.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-12-31T13:44:41.866 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:44:41.866 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:44:41.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:44:41.875 [DEBUG] [Thread-128732] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:44:53.038 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:44:53.039 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:44:54.282 [DEBUG] [Thread-128734 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:45:09.323 [DEBUG] [Thread-128735 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:45:11.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T13:45:11.891 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T13:45:11.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T13:45:12.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 45, 2), 33.36, 10.42, 0.0, 29.04, 25.56, 0, 0, 0, 2, 0, 0),)
2025-12-31T13:45:12.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:45:02
2025-12-31T13:45:12.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T13:45:12.868 [DEBUG] [Thread-128736] [transport.py] [_log()] starting thread (client mode): 0xb6b16860
2025-12-31T13:45:12.868 [DEBUG] [Thread-128736] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:45:12.889 [DEBUG] [Thread-128736] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T13:45:12.889 [INFO] [Thread-128736] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T13:45:12.892 [DEBUG] [Thread-128736] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:45:12.892 [DEBUG] [Thread-128736] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T13:45:12.892 [DEBUG] [Thread-128736] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:45:12.892 [DEBUG] [Thread-128736] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:45:12.892 [DEBUG] [Thread-128736] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:45:12.892 [DEBUG] [Thread-128736] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:45:12.892 [DEBUG] [Thread-128736] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:45:12.892 [DEBUG] [Thread-128736] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:45:12.892 [DEBUG] [Thread-128736] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:45:12.892 [DEBUG] [Thread-128736] [transport.py] [_log()] client lang: <none>
2025-12-31T13:45:12.892 [DEBUG] [Thread-128736] [transport.py] [_log()] server lang: <none>
2025-12-31T13:45:12.892 [DEBUG] [Thread-128736] [transport.py] [_log()] kex follows: False
2025-12-31T13:45:12.893 [DEBUG] [Thread-128736] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:45:12.893 [DEBUG] [Thread-128736] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:45:12.893 [DEBUG] [Thread-128736] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:45:12.893 [DEBUG] [Thread-128736] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:45:12.893 [DEBUG] [Thread-128736] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:45:12.893 [DEBUG] [Thread-128736] [transport.py] [_log()] Compression: none
2025-12-31T13:45:12.893 [DEBUG] [Thread-128736] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:45:12.911 [DEBUG] [Thread-128736] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:45:12.911 [DEBUG] [Thread-128736] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:45:12.912 [DEBUG] [Thread-128736] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T13:45:12.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T13:45:12.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:45:12.914 [DEBUG] [Thread-128736] [transport.py] [_log()] userauth is OK
2025-12-31T13:45:12.914 [DEBUG] [Thread-128736] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:45:12.914 [DEBUG] [Thread-128736] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:45:12.914 [DEBUG] [Thread-128736] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T13:45:12.914 [DEBUG] [Thread-128736] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:45:12.939 [INFO] [Thread-128736] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:45:12.940 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:45:16.321 [DEBUG] [Thread-128738 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:45:18.448 [DEBUG] [Thread-128736] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:45:18.449 [DEBUG] [Thread-128736] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:45:18.449 [DEBUG] [Thread-128736] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T13:45:18.489 [DEBUG] [Thread-128736] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:45:18.489 [DEBUG] [Thread-128736] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:45:18.492 [DEBUG] [Thread-128736] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:45:18.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:45:18.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T13:45:18.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T13:45:18.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T13:45:18.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:45:18.575 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T13:45:18.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:45:18.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:45:18.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T13:45:18.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.489378 -999.00  +24.80  29.23     15   -2.90 1 2 1 1 1   888    0 29.84 80.50 ----- 19.9 29.2 276.0 39.6 29.4 -22.0 29.3 -22.7 28.4 -23.0 29.2 -20.9
2025-12-31T13:45:18.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T13:45:18.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T13:45:18.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.489378
2025-12-31T13:45:18.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T13:45:18.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T13:45:18.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T13:45:18.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T13:45:18.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T13:45:18.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:45:02', tmtdew=33.36, humidity=10.42, cloud=0.0, wind=29.04, temperature=25.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T11:44:42.259', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T13:45:18.578 [DEBUG] [Thread-128736] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:45:18.666 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T13:45:18.678 [DEBUG] [Thread-128740] [transport.py] [_log()] starting thread (client mode): 0xb6ba0a30
2025-12-31T13:45:18.678 [DEBUG] [Thread-128740] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:45:18.694 [DEBUG] [Thread-128740] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T13:45:18.694 [INFO] [Thread-128740] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T13:45:18.702 [DEBUG] [Thread-128740] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:45:18.702 [DEBUG] [Thread-128740] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T13:45:18.703 [DEBUG] [Thread-128740] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:45:18.703 [DEBUG] [Thread-128740] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:45:18.703 [DEBUG] [Thread-128740] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:45:18.703 [DEBUG] [Thread-128740] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:45:18.703 [DEBUG] [Thread-128740] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:45:18.703 [DEBUG] [Thread-128740] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:45:18.704 [DEBUG] [Thread-128740] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:45:18.704 [DEBUG] [Thread-128740] [transport.py] [_log()] client lang: <none>
2025-12-31T13:45:18.704 [DEBUG] [Thread-128740] [transport.py] [_log()] server lang: <none>
2025-12-31T13:45:18.704 [DEBUG] [Thread-128740] [transport.py] [_log()] kex follows: False
2025-12-31T13:45:18.704 [DEBUG] [Thread-128740] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:45:18.704 [DEBUG] [Thread-128740] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:45:18.704 [DEBUG] [Thread-128740] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:45:18.704 [DEBUG] [Thread-128740] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:45:18.704 [DEBUG] [Thread-128740] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:45:18.704 [DEBUG] [Thread-128740] [transport.py] [_log()] Compression: none
2025-12-31T13:45:18.704 [DEBUG] [Thread-128740] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:45:18.760 [DEBUG] [Thread-128740] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:45:18.761 [DEBUG] [Thread-128740] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:45:18.761 [DEBUG] [Thread-128740] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T13:45:18.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T13:45:18.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:45:18.816 [DEBUG] [Thread-128740] [transport.py] [_log()] userauth is OK
2025-12-31T13:45:18.816 [DEBUG] [Thread-128740] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:45:18.816 [DEBUG] [Thread-128740] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:45:18.817 [DEBUG] [Thread-128740] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T13:45:18.817 [DEBUG] [Thread-128740] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:45:18.836 [INFO] [Thread-128740] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:45:18.836 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T13:45:18.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:45:19.689 [DEBUG] [Thread-128740] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:45:19.689 [DEBUG] [Thread-128740] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:45:19.737 [DEBUG] [Thread-128740] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:45:19.737 [DEBUG] [Thread-128740] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:45:19.746 [DEBUG] [Thread-128740] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:45:19.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:45:19.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T13:45:19.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T13:45:19.774 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:45:19.774 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:45:19.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:45:19.783 [DEBUG] [Thread-128740] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:45:24.361 [DEBUG] [Thread-128742 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:45:39.411 [DEBUG] [Thread-128743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:45:49.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T13:45:49.793 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T13:45:49.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T13:45:50.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 45, 34), 34.46, 9.7, 0.0, 25.97, 26.46, 0, 0, 0, 2, 0, 0),)
2025-12-31T13:45:50.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:45:34
2025-12-31T13:45:50.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T13:45:50.770 [DEBUG] [Thread-128744] [transport.py] [_log()] starting thread (client mode): 0xb6b60850
2025-12-31T13:45:50.770 [DEBUG] [Thread-128744] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:45:50.791 [DEBUG] [Thread-128744] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T13:45:50.791 [INFO] [Thread-128744] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T13:45:50.794 [DEBUG] [Thread-128744] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:45:50.794 [DEBUG] [Thread-128744] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T13:45:50.794 [DEBUG] [Thread-128744] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:45:50.794 [DEBUG] [Thread-128744] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:45:50.794 [DEBUG] [Thread-128744] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:45:50.794 [DEBUG] [Thread-128744] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:45:50.794 [DEBUG] [Thread-128744] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:45:50.795 [DEBUG] [Thread-128744] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:45:50.795 [DEBUG] [Thread-128744] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:45:50.795 [DEBUG] [Thread-128744] [transport.py] [_log()] client lang: <none>
2025-12-31T13:45:50.795 [DEBUG] [Thread-128744] [transport.py] [_log()] server lang: <none>
2025-12-31T13:45:50.795 [DEBUG] [Thread-128744] [transport.py] [_log()] kex follows: False
2025-12-31T13:45:50.795 [DEBUG] [Thread-128744] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:45:50.795 [DEBUG] [Thread-128744] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:45:50.795 [DEBUG] [Thread-128744] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:45:50.795 [DEBUG] [Thread-128744] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:45:50.795 [DEBUG] [Thread-128744] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:45:50.795 [DEBUG] [Thread-128744] [transport.py] [_log()] Compression: none
2025-12-31T13:45:50.795 [DEBUG] [Thread-128744] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:45:50.816 [DEBUG] [Thread-128744] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:45:50.817 [DEBUG] [Thread-128744] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:45:50.818 [DEBUG] [Thread-128744] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T13:45:50.818 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T13:45:50.818 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:45:50.820 [DEBUG] [Thread-128744] [transport.py] [_log()] userauth is OK
2025-12-31T13:45:50.820 [DEBUG] [Thread-128744] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:45:50.820 [DEBUG] [Thread-128744] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:45:50.820 [DEBUG] [Thread-128744] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T13:45:50.820 [DEBUG] [Thread-128744] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:45:50.843 [INFO] [Thread-128744] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:45:50.844 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:45:51.456 [DEBUG] [Thread-128744] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:45:51.456 [DEBUG] [Thread-128744] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:45:51.456 [DEBUG] [Thread-128744] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T13:45:51.497 [DEBUG] [Thread-128744] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:45:51.497 [DEBUG] [Thread-128744] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:45:51.500 [DEBUG] [Thread-128744] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:45:51.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:45:51.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T13:45:51.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T13:45:51.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T13:45:51.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:45:51.525 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T13:45:51.525 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:45:51.526 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:45:51.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T13:45:51.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.489726 -999.00  +25.00  26.95     16   -2.50 1 2 1 1 1   888    0 29.73 77.27 ----- 22.4 26.9 272.4 31.0 29.6 -21.5 29.4 -21.2 28.7 -20.6 29.4 -20.5
2025-12-31T13:45:51.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T13:45:51.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T13:45:51.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.489726
2025-12-31T13:45:51.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T13:45:51.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T13:45:51.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T13:45:51.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T13:45:51.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T13:45:51.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:45:34', tmtdew=34.46, humidity=9.7, cloud=0.0, wind=25.97, temperature=26.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T11:45:12.326', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T13:45:51.528 [DEBUG] [Thread-128744] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:45:51.611 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T13:45:51.624 [DEBUG] [Thread-128747] [transport.py] [_log()] starting thread (client mode): 0xb95b23b0
2025-12-31T13:45:51.625 [DEBUG] [Thread-128747] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:45:51.642 [DEBUG] [Thread-128747] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T13:45:51.643 [INFO] [Thread-128747] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T13:45:51.650 [DEBUG] [Thread-128747] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:45:51.651 [DEBUG] [Thread-128747] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T13:45:51.651 [DEBUG] [Thread-128747] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:45:51.651 [DEBUG] [Thread-128747] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:45:51.651 [DEBUG] [Thread-128747] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:45:51.651 [DEBUG] [Thread-128747] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:45:51.651 [DEBUG] [Thread-128747] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:45:51.651 [DEBUG] [Thread-128747] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:45:51.652 [DEBUG] [Thread-128747] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:45:51.652 [DEBUG] [Thread-128747] [transport.py] [_log()] client lang: <none>
2025-12-31T13:45:51.652 [DEBUG] [Thread-128747] [transport.py] [_log()] server lang: <none>
2025-12-31T13:45:51.652 [DEBUG] [Thread-128747] [transport.py] [_log()] kex follows: False
2025-12-31T13:45:51.652 [DEBUG] [Thread-128747] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:45:51.653 [DEBUG] [Thread-128747] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:45:51.653 [DEBUG] [Thread-128747] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:45:51.653 [DEBUG] [Thread-128747] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:45:51.653 [DEBUG] [Thread-128747] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:45:51.653 [DEBUG] [Thread-128747] [transport.py] [_log()] Compression: none
2025-12-31T13:45:51.653 [DEBUG] [Thread-128747] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:45:51.708 [DEBUG] [Thread-128747] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:45:51.709 [DEBUG] [Thread-128747] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:45:51.709 [DEBUG] [Thread-128747] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T13:45:51.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T13:45:51.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:45:51.764 [DEBUG] [Thread-128747] [transport.py] [_log()] userauth is OK
2025-12-31T13:45:51.764 [DEBUG] [Thread-128747] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:45:51.764 [DEBUG] [Thread-128747] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:45:51.765 [DEBUG] [Thread-128747] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T13:45:51.765 [DEBUG] [Thread-128747] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:45:51.785 [INFO] [Thread-128747] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:45:51.785 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T13:45:51.785 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:45:52.684 [DEBUG] [Thread-128747] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:45:52.684 [DEBUG] [Thread-128747] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:45:52.733 [DEBUG] [Thread-128747] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:45:52.733 [DEBUG] [Thread-128747] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:45:52.742 [DEBUG] [Thread-128747] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:45:52.751 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:45:52.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T13:45:52.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T13:45:52.770 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:45:52.770 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:45:52.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:45:52.778 [DEBUG] [Thread-128747] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:45:53.178 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:45:53.179 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:45:54.450 [DEBUG] [Thread-128749 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:46:09.502 [DEBUG] [Thread-128750 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:46:16.367 [DEBUG] [Thread-128751 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:46:22.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T13:46:22.783 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T13:46:22.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T13:46:23.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 46, 6), 33.29, 10.42, 0.0, 23.77, 25.48, 0, 0, 0, 2, 0, 0),)
2025-12-31T13:46:23.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:46:06
2025-12-31T13:46:23.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T13:46:23.761 [DEBUG] [Thread-128752] [transport.py] [_log()] starting thread (client mode): 0xb6b638b0
2025-12-31T13:46:23.761 [DEBUG] [Thread-128752] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:46:23.782 [DEBUG] [Thread-128752] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T13:46:23.782 [INFO] [Thread-128752] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T13:46:23.785 [DEBUG] [Thread-128752] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:46:23.785 [DEBUG] [Thread-128752] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T13:46:23.785 [DEBUG] [Thread-128752] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:46:23.785 [DEBUG] [Thread-128752] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:46:23.785 [DEBUG] [Thread-128752] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:46:23.785 [DEBUG] [Thread-128752] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:46:23.785 [DEBUG] [Thread-128752] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:46:23.785 [DEBUG] [Thread-128752] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:46:23.785 [DEBUG] [Thread-128752] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:46:23.785 [DEBUG] [Thread-128752] [transport.py] [_log()] client lang: <none>
2025-12-31T13:46:23.785 [DEBUG] [Thread-128752] [transport.py] [_log()] server lang: <none>
2025-12-31T13:46:23.785 [DEBUG] [Thread-128752] [transport.py] [_log()] kex follows: False
2025-12-31T13:46:23.785 [DEBUG] [Thread-128752] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:46:23.785 [DEBUG] [Thread-128752] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:46:23.785 [DEBUG] [Thread-128752] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:46:23.785 [DEBUG] [Thread-128752] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:46:23.785 [DEBUG] [Thread-128752] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:46:23.785 [DEBUG] [Thread-128752] [transport.py] [_log()] Compression: none
2025-12-31T13:46:23.785 [DEBUG] [Thread-128752] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:46:23.802 [DEBUG] [Thread-128752] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:46:23.803 [DEBUG] [Thread-128752] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:46:23.803 [DEBUG] [Thread-128752] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T13:46:23.804 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T13:46:23.804 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:46:23.805 [DEBUG] [Thread-128752] [transport.py] [_log()] userauth is OK
2025-12-31T13:46:23.805 [DEBUG] [Thread-128752] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:46:23.806 [DEBUG] [Thread-128752] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:46:23.806 [DEBUG] [Thread-128752] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T13:46:23.806 [DEBUG] [Thread-128752] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:46:23.828 [INFO] [Thread-128752] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:46:23.828 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:46:24.534 [DEBUG] [Thread-128754 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:46:24.560 [DEBUG] [Thread-128752] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:46:24.560 [DEBUG] [Thread-128752] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:46:24.561 [DEBUG] [Thread-128752] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T13:46:24.601 [DEBUG] [Thread-128752] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:46:24.601 [DEBUG] [Thread-128752] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:46:24.604 [DEBUG] [Thread-128752] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:46:24.617 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:46:24.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T13:46:24.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T13:46:24.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T13:46:24.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:46:24.628 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T13:46:24.629 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:46:24.629 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:46:24.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T13:46:24.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.490073 -999.00  +25.20  17.68     16   -2.20 1 2 1 1 1   888    0 30.05 76.35 ----- 17.5 17.7 264.8 28.1 29.7 -21.1 29.4 -20.9 28.8 -20.2 29.4 -20.1
2025-12-31T13:46:24.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T13:46:24.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T13:46:24.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.490073
2025-12-31T13:46:24.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T13:46:24.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T13:46:24.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T13:46:24.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T13:46:24.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T13:46:24.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:46:06', tmtdew=33.29, humidity=10.42, cloud=0.0, wind=23.77, temperature=25.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T11:45:42.307', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T13:46:24.631 [DEBUG] [Thread-128752] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:46:24.714 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T13:46:24.726 [DEBUG] [Thread-128756] [transport.py] [_log()] starting thread (client mode): 0xb6b63d00
2025-12-31T13:46:24.726 [DEBUG] [Thread-128756] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:46:24.741 [DEBUG] [Thread-128756] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T13:46:24.741 [INFO] [Thread-128756] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T13:46:24.749 [DEBUG] [Thread-128756] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:46:24.749 [DEBUG] [Thread-128756] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T13:46:24.749 [DEBUG] [Thread-128756] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:46:24.749 [DEBUG] [Thread-128756] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:46:24.750 [DEBUG] [Thread-128756] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:46:24.750 [DEBUG] [Thread-128756] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:46:24.750 [DEBUG] [Thread-128756] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:46:24.750 [DEBUG] [Thread-128756] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:46:24.750 [DEBUG] [Thread-128756] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:46:24.750 [DEBUG] [Thread-128756] [transport.py] [_log()] client lang: <none>
2025-12-31T13:46:24.750 [DEBUG] [Thread-128756] [transport.py] [_log()] server lang: <none>
2025-12-31T13:46:24.750 [DEBUG] [Thread-128756] [transport.py] [_log()] kex follows: False
2025-12-31T13:46:24.750 [DEBUG] [Thread-128756] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:46:24.750 [DEBUG] [Thread-128756] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:46:24.750 [DEBUG] [Thread-128756] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:46:24.750 [DEBUG] [Thread-128756] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:46:24.750 [DEBUG] [Thread-128756] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:46:24.750 [DEBUG] [Thread-128756] [transport.py] [_log()] Compression: none
2025-12-31T13:46:24.750 [DEBUG] [Thread-128756] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:46:24.808 [DEBUG] [Thread-128756] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:46:24.809 [DEBUG] [Thread-128756] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:46:24.809 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T13:46:24.810 [DEBUG] [Thread-128756] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T13:46:24.811 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:46:24.868 [DEBUG] [Thread-128756] [transport.py] [_log()] userauth is OK
2025-12-31T13:46:24.869 [DEBUG] [Thread-128756] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:46:24.869 [DEBUG] [Thread-128756] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:46:24.869 [DEBUG] [Thread-128756] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T13:46:24.869 [DEBUG] [Thread-128756] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:46:24.888 [INFO] [Thread-128756] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:46:24.889 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T13:46:24.889 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:46:25.727 [DEBUG] [Thread-128756] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:46:25.727 [DEBUG] [Thread-128756] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:46:25.775 [DEBUG] [Thread-128756] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:46:25.775 [DEBUG] [Thread-128756] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:46:25.784 [DEBUG] [Thread-128756] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:46:25.791 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:46:25.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T13:46:25.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T13:46:25.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:46:25.808 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:46:25.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:46:25.816 [DEBUG] [Thread-128756] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:46:39.567 [DEBUG] [Thread-128758 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:46:53.318 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:46:53.319 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:46:54.605 [DEBUG] [Thread-128759 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:46:55.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T13:46:55.819 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T13:46:55.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T13:46:56.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 46, 38), 33.21, 10.56, 0.0, 24.84, 25.75, 0, 0, 0, 2, 0, 0),)
2025-12-31T13:46:56.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:46:38
2025-12-31T13:46:56.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T13:46:56.828 [DEBUG] [Thread-128760] [transport.py] [_log()] starting thread (client mode): 0xb6b61900
2025-12-31T13:46:56.829 [DEBUG] [Thread-128760] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:46:56.849 [DEBUG] [Thread-128760] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T13:46:56.849 [INFO] [Thread-128760] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T13:46:56.852 [DEBUG] [Thread-128760] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:46:56.852 [DEBUG] [Thread-128760] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T13:46:56.852 [DEBUG] [Thread-128760] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:46:56.852 [DEBUG] [Thread-128760] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:46:56.852 [DEBUG] [Thread-128760] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:46:56.852 [DEBUG] [Thread-128760] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:46:56.852 [DEBUG] [Thread-128760] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:46:56.852 [DEBUG] [Thread-128760] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:46:56.852 [DEBUG] [Thread-128760] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:46:56.852 [DEBUG] [Thread-128760] [transport.py] [_log()] client lang: <none>
2025-12-31T13:46:56.852 [DEBUG] [Thread-128760] [transport.py] [_log()] server lang: <none>
2025-12-31T13:46:56.852 [DEBUG] [Thread-128760] [transport.py] [_log()] kex follows: False
2025-12-31T13:46:56.853 [DEBUG] [Thread-128760] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:46:56.853 [DEBUG] [Thread-128760] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:46:56.853 [DEBUG] [Thread-128760] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:46:56.853 [DEBUG] [Thread-128760] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:46:56.853 [DEBUG] [Thread-128760] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:46:56.853 [DEBUG] [Thread-128760] [transport.py] [_log()] Compression: none
2025-12-31T13:46:56.853 [DEBUG] [Thread-128760] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:46:56.871 [DEBUG] [Thread-128760] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:46:56.872 [DEBUG] [Thread-128760] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:46:56.873 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T13:46:56.873 [DEBUG] [Thread-128760] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T13:46:56.874 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:46:56.876 [DEBUG] [Thread-128760] [transport.py] [_log()] userauth is OK
2025-12-31T13:46:56.877 [DEBUG] [Thread-128760] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:46:56.877 [DEBUG] [Thread-128760] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:46:56.877 [DEBUG] [Thread-128760] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T13:46:56.877 [DEBUG] [Thread-128760] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:46:56.912 [INFO] [Thread-128760] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:46:56.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:46:57.562 [DEBUG] [Thread-128760] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:46:57.562 [DEBUG] [Thread-128760] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:46:57.562 [DEBUG] [Thread-128760] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T13:46:57.603 [DEBUG] [Thread-128760] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:46:57.603 [DEBUG] [Thread-128760] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:46:57.606 [DEBUG] [Thread-128760] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:46:57.618 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:46:57.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T13:46:57.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T13:46:57.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T13:46:57.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:46:57.630 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T13:46:57.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:46:57.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:46:57.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T13:46:57.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.490420 -999.00  +25.30  32.04     16   -2.20 1 2 2 1 1   888    0 30.22 71.58 ----- 24.4 32.0 276.4 38.4 29.8 -21.4 29.6 -21.4 29.0 -19.8 29.5 -20.5
2025-12-31T13:46:57.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T13:46:57.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T13:46:57.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.490420
2025-12-31T13:46:57.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T13:46:57.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T13:46:57.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T13:46:57.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T13:46:57.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T13:46:57.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:46:38', tmtdew=33.21, humidity=10.56, cloud=0.0, wind=24.84, temperature=25.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T11:46:12.288', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T13:46:57.633 [DEBUG] [Thread-128760] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:46:57.718 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T13:46:57.730 [DEBUG] [Thread-128763] [transport.py] [_log()] starting thread (client mode): 0xb6ba35e0
2025-12-31T13:46:57.730 [DEBUG] [Thread-128763] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:46:57.745 [DEBUG] [Thread-128763] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T13:46:57.746 [INFO] [Thread-128763] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T13:46:57.753 [DEBUG] [Thread-128763] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:46:57.753 [DEBUG] [Thread-128763] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T13:46:57.753 [DEBUG] [Thread-128763] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:46:57.754 [DEBUG] [Thread-128763] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:46:57.754 [DEBUG] [Thread-128763] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:46:57.754 [DEBUG] [Thread-128763] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:46:57.754 [DEBUG] [Thread-128763] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:46:57.754 [DEBUG] [Thread-128763] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:46:57.754 [DEBUG] [Thread-128763] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:46:57.754 [DEBUG] [Thread-128763] [transport.py] [_log()] client lang: <none>
2025-12-31T13:46:57.754 [DEBUG] [Thread-128763] [transport.py] [_log()] server lang: <none>
2025-12-31T13:46:57.754 [DEBUG] [Thread-128763] [transport.py] [_log()] kex follows: False
2025-12-31T13:46:57.754 [DEBUG] [Thread-128763] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:46:57.754 [DEBUG] [Thread-128763] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:46:57.754 [DEBUG] [Thread-128763] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:46:57.754 [DEBUG] [Thread-128763] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:46:57.754 [DEBUG] [Thread-128763] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:46:57.754 [DEBUG] [Thread-128763] [transport.py] [_log()] Compression: none
2025-12-31T13:46:57.754 [DEBUG] [Thread-128763] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:46:57.817 [DEBUG] [Thread-128763] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:46:57.817 [DEBUG] [Thread-128763] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:46:57.818 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T13:46:57.818 [DEBUG] [Thread-128763] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T13:46:57.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:46:57.876 [DEBUG] [Thread-128763] [transport.py] [_log()] userauth is OK
2025-12-31T13:46:57.876 [DEBUG] [Thread-128763] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:46:57.877 [DEBUG] [Thread-128763] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:46:57.877 [DEBUG] [Thread-128763] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T13:46:57.877 [DEBUG] [Thread-128763] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:46:57.896 [INFO] [Thread-128763] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:46:57.896 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T13:46:57.897 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:46:58.722 [DEBUG] [Thread-128763] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:46:58.723 [DEBUG] [Thread-128763] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:46:58.771 [DEBUG] [Thread-128763] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:46:58.771 [DEBUG] [Thread-128763] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:46:58.780 [DEBUG] [Thread-128763] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:46:58.790 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:46:58.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T13:46:58.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T13:46:58.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:46:58.809 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:46:58.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:46:58.817 [DEBUG] [Thread-128763] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:47:09.643 [DEBUG] [Thread-128765 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:47:16.400 [DEBUG] [Thread-128766 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:47:24.703 [DEBUG] [Thread-128767 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:47:28.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T13:47:28.819 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T13:47:28.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T13:47:29.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 47, 10), 33.47, 10.38, 0.0, 26.29, 25.85, 0, 0, 0, 2, 0, 0),)
2025-12-31T13:47:29.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:47:10
2025-12-31T13:47:29.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T13:47:29.825 [DEBUG] [Thread-128768] [transport.py] [_log()] starting thread (client mode): 0xb6b615d0
2025-12-31T13:47:29.825 [DEBUG] [Thread-128768] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:47:29.845 [DEBUG] [Thread-128768] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T13:47:29.845 [INFO] [Thread-128768] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T13:47:29.848 [DEBUG] [Thread-128768] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:47:29.848 [DEBUG] [Thread-128768] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T13:47:29.848 [DEBUG] [Thread-128768] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:47:29.848 [DEBUG] [Thread-128768] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:47:29.848 [DEBUG] [Thread-128768] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:47:29.848 [DEBUG] [Thread-128768] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:47:29.848 [DEBUG] [Thread-128768] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:47:29.848 [DEBUG] [Thread-128768] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:47:29.848 [DEBUG] [Thread-128768] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:47:29.848 [DEBUG] [Thread-128768] [transport.py] [_log()] client lang: <none>
2025-12-31T13:47:29.848 [DEBUG] [Thread-128768] [transport.py] [_log()] server lang: <none>
2025-12-31T13:47:29.848 [DEBUG] [Thread-128768] [transport.py] [_log()] kex follows: False
2025-12-31T13:47:29.848 [DEBUG] [Thread-128768] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:47:29.848 [DEBUG] [Thread-128768] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:47:29.849 [DEBUG] [Thread-128768] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:47:29.849 [DEBUG] [Thread-128768] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:47:29.849 [DEBUG] [Thread-128768] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:47:29.849 [DEBUG] [Thread-128768] [transport.py] [_log()] Compression: none
2025-12-31T13:47:29.849 [DEBUG] [Thread-128768] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:47:29.866 [DEBUG] [Thread-128768] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:47:29.866 [DEBUG] [Thread-128768] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:47:29.866 [DEBUG] [Thread-128768] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T13:47:29.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T13:47:29.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:47:29.867 [DEBUG] [Thread-128768] [transport.py] [_log()] userauth is OK
2025-12-31T13:47:29.867 [DEBUG] [Thread-128768] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:47:29.867 [DEBUG] [Thread-128768] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:47:29.867 [DEBUG] [Thread-128768] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T13:47:29.867 [DEBUG] [Thread-128768] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:47:29.879 [INFO] [Thread-128768] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:47:29.879 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:47:30.592 [DEBUG] [Thread-128768] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:47:30.592 [DEBUG] [Thread-128768] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:47:30.593 [DEBUG] [Thread-128768] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T13:47:30.633 [DEBUG] [Thread-128768] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:47:30.633 [DEBUG] [Thread-128768] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:47:30.643 [DEBUG] [Thread-128768] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:47:30.655 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:47:30.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T13:47:30.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T13:47:30.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T13:47:30.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:47:30.666 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T13:47:30.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:47:30.666 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:47:30.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T13:47:30.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.490767 -999.00  +25.30  22.45     16   -2.10 1 2 1 1 1   888    0 29.44 61.98 ----- 27.9 22.4 284.9 34.3 29.8 -22.1 29.5 -21.2 28.9 -21.2 29.4 -21.4
2025-12-31T13:47:30.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T13:47:30.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T13:47:30.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.490767
2025-12-31T13:47:30.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T13:47:30.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T13:47:30.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T13:47:30.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T13:47:30.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T13:47:30.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:47:10', tmtdew=33.47, humidity=10.38, cloud=0.0, wind=26.29, temperature=25.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T11:46:42.269', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T13:47:30.667 [DEBUG] [Thread-128768] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:47:30.741 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T13:47:30.753 [DEBUG] [Thread-128771] [transport.py] [_log()] starting thread (client mode): 0xb95b35b0
2025-12-31T13:47:30.753 [DEBUG] [Thread-128771] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:47:30.768 [DEBUG] [Thread-128771] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T13:47:30.768 [INFO] [Thread-128771] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T13:47:30.776 [DEBUG] [Thread-128771] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:47:30.776 [DEBUG] [Thread-128771] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T13:47:30.776 [DEBUG] [Thread-128771] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:47:30.776 [DEBUG] [Thread-128771] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:47:30.776 [DEBUG] [Thread-128771] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:47:30.776 [DEBUG] [Thread-128771] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:47:30.776 [DEBUG] [Thread-128771] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:47:30.776 [DEBUG] [Thread-128771] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:47:30.776 [DEBUG] [Thread-128771] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:47:30.776 [DEBUG] [Thread-128771] [transport.py] [_log()] client lang: <none>
2025-12-31T13:47:30.776 [DEBUG] [Thread-128771] [transport.py] [_log()] server lang: <none>
2025-12-31T13:47:30.776 [DEBUG] [Thread-128771] [transport.py] [_log()] kex follows: False
2025-12-31T13:47:30.776 [DEBUG] [Thread-128771] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:47:30.776 [DEBUG] [Thread-128771] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:47:30.776 [DEBUG] [Thread-128771] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:47:30.776 [DEBUG] [Thread-128771] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:47:30.776 [DEBUG] [Thread-128771] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:47:30.776 [DEBUG] [Thread-128771] [transport.py] [_log()] Compression: none
2025-12-31T13:47:30.776 [DEBUG] [Thread-128771] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:47:30.834 [DEBUG] [Thread-128771] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:47:30.834 [DEBUG] [Thread-128771] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:47:30.835 [DEBUG] [Thread-128771] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T13:47:30.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T13:47:30.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:47:30.891 [DEBUG] [Thread-128771] [transport.py] [_log()] userauth is OK
2025-12-31T13:47:30.891 [DEBUG] [Thread-128771] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:47:30.891 [DEBUG] [Thread-128771] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:47:30.891 [DEBUG] [Thread-128771] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T13:47:30.892 [DEBUG] [Thread-128771] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:47:30.906 [INFO] [Thread-128771] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:47:30.906 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T13:47:30.906 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:47:31.816 [DEBUG] [Thread-128771] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:47:31.817 [DEBUG] [Thread-128771] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:47:31.864 [DEBUG] [Thread-128771] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:47:31.864 [DEBUG] [Thread-128771] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:47:31.873 [DEBUG] [Thread-128771] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:47:31.880 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:47:31.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T13:47:31.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T13:47:31.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:47:31.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:47:31.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:47:31.904 [DEBUG] [Thread-128771] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:47:39.742 [DEBUG] [Thread-128773 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:47:53.456 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:47:53.457 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:47:54.795 [DEBUG] [Thread-128774 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:48:01.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T13:48:01.927 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T13:48:01.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T13:48:02.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 47, 42), 33.28, 10.45, 0.0, 25.99, 25.61, 0, 0, 0, 2, 0, 0),)
2025-12-31T13:48:02.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:47:42
2025-12-31T13:48:02.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T13:48:02.895 [DEBUG] [Thread-128775] [transport.py] [_log()] starting thread (client mode): 0xb95b23b0
2025-12-31T13:48:02.895 [DEBUG] [Thread-128775] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:48:02.916 [DEBUG] [Thread-128775] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T13:48:02.916 [INFO] [Thread-128775] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T13:48:02.919 [DEBUG] [Thread-128775] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:48:02.919 [DEBUG] [Thread-128775] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T13:48:02.919 [DEBUG] [Thread-128775] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:48:02.919 [DEBUG] [Thread-128775] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:48:02.920 [DEBUG] [Thread-128775] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:48:02.920 [DEBUG] [Thread-128775] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:48:02.920 [DEBUG] [Thread-128775] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:48:02.920 [DEBUG] [Thread-128775] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:48:02.920 [DEBUG] [Thread-128775] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:48:02.920 [DEBUG] [Thread-128775] [transport.py] [_log()] client lang: <none>
2025-12-31T13:48:02.920 [DEBUG] [Thread-128775] [transport.py] [_log()] server lang: <none>
2025-12-31T13:48:02.920 [DEBUG] [Thread-128775] [transport.py] [_log()] kex follows: False
2025-12-31T13:48:02.920 [DEBUG] [Thread-128775] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:48:02.920 [DEBUG] [Thread-128775] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:48:02.920 [DEBUG] [Thread-128775] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:48:02.920 [DEBUG] [Thread-128775] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:48:02.920 [DEBUG] [Thread-128775] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:48:02.920 [DEBUG] [Thread-128775] [transport.py] [_log()] Compression: none
2025-12-31T13:48:02.920 [DEBUG] [Thread-128775] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:48:02.939 [DEBUG] [Thread-128775] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:48:02.940 [DEBUG] [Thread-128775] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:48:02.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T13:48:02.941 [DEBUG] [Thread-128775] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T13:48:02.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:48:02.985 [DEBUG] [Thread-128775] [transport.py] [_log()] userauth is OK
2025-12-31T13:48:02.985 [DEBUG] [Thread-128775] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:48:02.986 [DEBUG] [Thread-128775] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:48:02.986 [DEBUG] [Thread-128775] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T13:48:02.986 [DEBUG] [Thread-128775] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:48:03.022 [INFO] [Thread-128775] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:48:03.022 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:48:03.681 [DEBUG] [Thread-128775] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:48:03.682 [DEBUG] [Thread-128775] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:48:03.682 [DEBUG] [Thread-128775] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T13:48:03.733 [DEBUG] [Thread-128775] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:48:03.734 [DEBUG] [Thread-128775] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:48:03.736 [DEBUG] [Thread-128775] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:48:03.748 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:48:03.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T13:48:03.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T13:48:03.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T13:48:03.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:48:03.759 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T13:48:03.759 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:48:03.759 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:48:03.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T13:48:03.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.491115 -999.00  +25.00  13.02     16   -2.40 1 2 1 1 1   888    0 29.03 59.50 ----- 17.2 13.0 291.4 31.3 29.7 -22.0 29.4 -21.5 28.9 -20.6 29.3 -21.6
2025-12-31T13:48:03.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T13:48:03.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T13:48:03.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.491115
2025-12-31T13:48:03.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T13:48:03.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T13:48:03.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T13:48:03.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T13:48:03.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T13:48:03.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:47:42', tmtdew=33.28, humidity=10.45, cloud=0.0, wind=25.99, temperature=25.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T11:47:12.336', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T13:48:03.762 [DEBUG] [Thread-128775] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:48:03.846 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T13:48:03.858 [DEBUG] [Thread-128778] [transport.py] [_log()] starting thread (client mode): 0xb6bbf550
2025-12-31T13:48:03.858 [DEBUG] [Thread-128778] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:48:03.882 [DEBUG] [Thread-128778] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T13:48:03.882 [INFO] [Thread-128778] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T13:48:03.890 [DEBUG] [Thread-128778] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:48:03.890 [DEBUG] [Thread-128778] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T13:48:03.890 [DEBUG] [Thread-128778] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:48:03.891 [DEBUG] [Thread-128778] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:48:03.891 [DEBUG] [Thread-128778] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:48:03.891 [DEBUG] [Thread-128778] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:48:03.891 [DEBUG] [Thread-128778] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:48:03.891 [DEBUG] [Thread-128778] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:48:03.891 [DEBUG] [Thread-128778] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:48:03.891 [DEBUG] [Thread-128778] [transport.py] [_log()] client lang: <none>
2025-12-31T13:48:03.891 [DEBUG] [Thread-128778] [transport.py] [_log()] server lang: <none>
2025-12-31T13:48:03.891 [DEBUG] [Thread-128778] [transport.py] [_log()] kex follows: False
2025-12-31T13:48:03.892 [DEBUG] [Thread-128778] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:48:03.892 [DEBUG] [Thread-128778] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:48:03.892 [DEBUG] [Thread-128778] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:48:03.892 [DEBUG] [Thread-128778] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:48:03.892 [DEBUG] [Thread-128778] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:48:03.892 [DEBUG] [Thread-128778] [transport.py] [_log()] Compression: none
2025-12-31T13:48:03.892 [DEBUG] [Thread-128778] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:48:03.948 [DEBUG] [Thread-128778] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:48:03.949 [DEBUG] [Thread-128778] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:48:03.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T13:48:03.950 [DEBUG] [Thread-128778] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T13:48:03.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:48:04.003 [DEBUG] [Thread-128778] [transport.py] [_log()] userauth is OK
2025-12-31T13:48:04.004 [DEBUG] [Thread-128778] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:48:04.004 [DEBUG] [Thread-128778] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:48:04.004 [DEBUG] [Thread-128778] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T13:48:04.004 [DEBUG] [Thread-128778] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:48:04.023 [INFO] [Thread-128778] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:48:04.023 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T13:48:04.024 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:48:04.901 [DEBUG] [Thread-128778] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:48:04.901 [DEBUG] [Thread-128778] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:48:04.949 [DEBUG] [Thread-128778] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:48:04.949 [DEBUG] [Thread-128778] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:48:04.959 [DEBUG] [Thread-128778] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:48:04.967 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:48:04.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T13:48:04.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T13:48:04.986 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:48:04.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:48:04.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:48:04.995 [DEBUG] [Thread-128778] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:48:09.829 [DEBUG] [Thread-128780 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:48:16.448 [DEBUG] [Thread-128781 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:48:24.870 [DEBUG] [Thread-128782 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:48:35.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T13:48:35.017 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T13:48:35.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T13:48:35.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 48, 14), 33.16, 10.53, 0.0, 21.63, 25.55, 0, 0, 0, 2, 0, 0),)
2025-12-31T13:48:35.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:48:14
2025-12-31T13:48:35.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T13:48:36.013 [DEBUG] [Thread-128783] [transport.py] [_log()] starting thread (client mode): 0xb6ba01c0
2025-12-31T13:48:36.013 [DEBUG] [Thread-128783] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:48:36.033 [DEBUG] [Thread-128783] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T13:48:36.034 [INFO] [Thread-128783] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T13:48:36.037 [DEBUG] [Thread-128783] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:48:36.037 [DEBUG] [Thread-128783] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T13:48:36.037 [DEBUG] [Thread-128783] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:48:36.037 [DEBUG] [Thread-128783] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:48:36.037 [DEBUG] [Thread-128783] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:48:36.037 [DEBUG] [Thread-128783] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:48:36.037 [DEBUG] [Thread-128783] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:48:36.038 [DEBUG] [Thread-128783] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:48:36.038 [DEBUG] [Thread-128783] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:48:36.038 [DEBUG] [Thread-128783] [transport.py] [_log()] client lang: <none>
2025-12-31T13:48:36.038 [DEBUG] [Thread-128783] [transport.py] [_log()] server lang: <none>
2025-12-31T13:48:36.038 [DEBUG] [Thread-128783] [transport.py] [_log()] kex follows: False
2025-12-31T13:48:36.038 [DEBUG] [Thread-128783] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:48:36.038 [DEBUG] [Thread-128783] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:48:36.038 [DEBUG] [Thread-128783] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:48:36.038 [DEBUG] [Thread-128783] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:48:36.038 [DEBUG] [Thread-128783] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:48:36.038 [DEBUG] [Thread-128783] [transport.py] [_log()] Compression: none
2025-12-31T13:48:36.038 [DEBUG] [Thread-128783] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:48:36.053 [DEBUG] [Thread-128783] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:48:36.053 [DEBUG] [Thread-128783] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:48:36.053 [DEBUG] [Thread-128783] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T13:48:36.053 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T13:48:36.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:48:36.054 [DEBUG] [Thread-128783] [transport.py] [_log()] userauth is OK
2025-12-31T13:48:36.054 [DEBUG] [Thread-128783] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:48:36.055 [DEBUG] [Thread-128783] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:48:36.055 [DEBUG] [Thread-128783] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T13:48:36.055 [DEBUG] [Thread-128783] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:48:36.075 [INFO] [Thread-128783] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:48:36.076 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:48:36.833 [DEBUG] [Thread-128783] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:48:36.833 [DEBUG] [Thread-128783] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:48:36.833 [DEBUG] [Thread-128783] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T13:48:36.874 [DEBUG] [Thread-128783] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:48:36.874 [DEBUG] [Thread-128783] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:48:36.877 [DEBUG] [Thread-128783] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:48:36.890 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:48:36.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T13:48:36.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T13:48:36.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T13:48:36.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:48:36.899 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T13:48:36.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:48:36.900 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:48:36.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T13:48:36.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.491462 -999.00  +24.90  16.91     16   -2.30 1 2 1 1 1   888    0 29.55 53.59 ----- 16.8 16.9 268.2 27.7 29.7 -21.6 29.4 -21.6 28.9 -19.8 29.3 -20.7
2025-12-31T13:48:36.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T13:48:36.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T13:48:36.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.491462
2025-12-31T13:48:36.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T13:48:36.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T13:48:36.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T13:48:36.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T13:48:36.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T13:48:36.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:48:14', tmtdew=33.16, humidity=10.53, cloud=0.0, wind=21.63, temperature=25.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T11:47:42.317', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T13:48:36.903 [DEBUG] [Thread-128783] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:48:36.987 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T13:48:36.999 [DEBUG] [Thread-128786] [transport.py] [_log()] starting thread (client mode): 0xb95b10c0
2025-12-31T13:48:36.999 [DEBUG] [Thread-128786] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:48:37.021 [DEBUG] [Thread-128786] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T13:48:37.021 [INFO] [Thread-128786] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T13:48:37.028 [DEBUG] [Thread-128786] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:48:37.029 [DEBUG] [Thread-128786] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T13:48:37.029 [DEBUG] [Thread-128786] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:48:37.029 [DEBUG] [Thread-128786] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:48:37.029 [DEBUG] [Thread-128786] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:48:37.029 [DEBUG] [Thread-128786] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:48:37.029 [DEBUG] [Thread-128786] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:48:37.029 [DEBUG] [Thread-128786] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:48:37.030 [DEBUG] [Thread-128786] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:48:37.030 [DEBUG] [Thread-128786] [transport.py] [_log()] client lang: <none>
2025-12-31T13:48:37.030 [DEBUG] [Thread-128786] [transport.py] [_log()] server lang: <none>
2025-12-31T13:48:37.030 [DEBUG] [Thread-128786] [transport.py] [_log()] kex follows: False
2025-12-31T13:48:37.030 [DEBUG] [Thread-128786] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:48:37.030 [DEBUG] [Thread-128786] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:48:37.030 [DEBUG] [Thread-128786] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:48:37.030 [DEBUG] [Thread-128786] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:48:37.030 [DEBUG] [Thread-128786] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:48:37.031 [DEBUG] [Thread-128786] [transport.py] [_log()] Compression: none
2025-12-31T13:48:37.031 [DEBUG] [Thread-128786] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:48:37.087 [DEBUG] [Thread-128786] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:48:37.088 [DEBUG] [Thread-128786] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:48:37.088 [DEBUG] [Thread-128786] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T13:48:37.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T13:48:37.089 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:48:37.143 [DEBUG] [Thread-128786] [transport.py] [_log()] userauth is OK
2025-12-31T13:48:37.143 [DEBUG] [Thread-128786] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:48:37.144 [DEBUG] [Thread-128786] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:48:37.144 [DEBUG] [Thread-128786] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T13:48:37.144 [DEBUG] [Thread-128786] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:48:37.162 [INFO] [Thread-128786] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:48:37.163 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T13:48:37.163 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:48:38.050 [DEBUG] [Thread-128786] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:48:38.050 [DEBUG] [Thread-128786] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:48:38.097 [DEBUG] [Thread-128786] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:48:38.097 [DEBUG] [Thread-128786] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:48:38.106 [DEBUG] [Thread-128786] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:48:38.115 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:48:38.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T13:48:38.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T13:48:38.132 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:48:38.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:48:38.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:48:38.140 [DEBUG] [Thread-128786] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:48:39.905 [DEBUG] [Thread-128788 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:48:53.596 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:48:53.596 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:48:54.959 [DEBUG] [Thread-128789 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:49:08.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T13:49:08.163 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T13:49:08.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T13:49:08.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 48, 46), 32.92, 10.61, 0.0, 17.22, 25.63, 0, 0, 0, 2, 0, 0),)
2025-12-31T13:49:08.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:48:46
2025-12-31T13:49:08.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T13:49:09.123 [DEBUG] [Thread-128790] [transport.py] [_log()] starting thread (client mode): 0xb6b61390
2025-12-31T13:49:09.123 [DEBUG] [Thread-128790] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:49:09.144 [DEBUG] [Thread-128790] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T13:49:09.144 [INFO] [Thread-128790] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T13:49:09.147 [DEBUG] [Thread-128790] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:49:09.147 [DEBUG] [Thread-128790] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T13:49:09.147 [DEBUG] [Thread-128790] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:49:09.148 [DEBUG] [Thread-128790] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:49:09.148 [DEBUG] [Thread-128790] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:49:09.148 [DEBUG] [Thread-128790] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:49:09.148 [DEBUG] [Thread-128790] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:49:09.148 [DEBUG] [Thread-128790] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:49:09.148 [DEBUG] [Thread-128790] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:49:09.148 [DEBUG] [Thread-128790] [transport.py] [_log()] client lang: <none>
2025-12-31T13:49:09.148 [DEBUG] [Thread-128790] [transport.py] [_log()] server lang: <none>
2025-12-31T13:49:09.148 [DEBUG] [Thread-128790] [transport.py] [_log()] kex follows: False
2025-12-31T13:49:09.148 [DEBUG] [Thread-128790] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:49:09.148 [DEBUG] [Thread-128790] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:49:09.148 [DEBUG] [Thread-128790] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:49:09.148 [DEBUG] [Thread-128790] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:49:09.148 [DEBUG] [Thread-128790] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:49:09.148 [DEBUG] [Thread-128790] [transport.py] [_log()] Compression: none
2025-12-31T13:49:09.148 [DEBUG] [Thread-128790] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:49:09.165 [DEBUG] [Thread-128790] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:49:09.166 [DEBUG] [Thread-128790] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:49:09.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T13:49:09.167 [DEBUG] [Thread-128790] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T13:49:09.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:49:09.170 [DEBUG] [Thread-128790] [transport.py] [_log()] userauth is OK
2025-12-31T13:49:09.171 [DEBUG] [Thread-128790] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:49:09.171 [DEBUG] [Thread-128790] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:49:09.171 [DEBUG] [Thread-128790] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T13:49:09.171 [DEBUG] [Thread-128790] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:49:09.190 [INFO] [Thread-128790] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:49:09.190 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:49:09.837 [DEBUG] [Thread-128790] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:49:09.838 [DEBUG] [Thread-128790] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:49:09.838 [DEBUG] [Thread-128790] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T13:49:09.879 [DEBUG] [Thread-128790] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:49:09.879 [DEBUG] [Thread-128790] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:49:09.882 [DEBUG] [Thread-128790] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:49:09.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:49:09.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T13:49:09.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T13:49:09.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T13:49:09.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:49:09.901 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T13:49:09.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:49:09.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:49:09.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T13:49:09.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.491809 -999.00  +25.20  16.29     16   -2.10 1 2 1 1 1   888    0 29.03 45.70 ----- 19.0 16.3 273.2 20.6 29.8 -20.1 29.5 -20.5 28.6 -19.7 29.3 -19.3
2025-12-31T13:49:09.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T13:49:09.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T13:49:09.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.491809
2025-12-31T13:49:09.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T13:49:09.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T13:49:09.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T13:49:09.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T13:49:09.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T13:49:09.902 [DEBUG] [Thread-128790] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:49:09.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:48:46', tmtdew=32.92, humidity=10.61, cloud=0.0, wind=17.22, temperature=25.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T11:48:12.298', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T13:49:09.976 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T13:49:09.988 [DEBUG] [Thread-128793] [transport.py] [_log()] starting thread (client mode): 0xb95b12a0
2025-12-31T13:49:09.988 [DEBUG] [Thread-128793] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:49:09.992 [DEBUG] [Thread-128794 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:49:10.003 [DEBUG] [Thread-128793] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T13:49:10.003 [INFO] [Thread-128793] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T13:49:10.010 [DEBUG] [Thread-128793] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:49:10.011 [DEBUG] [Thread-128793] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T13:49:10.011 [DEBUG] [Thread-128793] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:49:10.011 [DEBUG] [Thread-128793] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:49:10.011 [DEBUG] [Thread-128793] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:49:10.011 [DEBUG] [Thread-128793] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:49:10.011 [DEBUG] [Thread-128793] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:49:10.011 [DEBUG] [Thread-128793] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:49:10.011 [DEBUG] [Thread-128793] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:49:10.011 [DEBUG] [Thread-128793] [transport.py] [_log()] client lang: <none>
2025-12-31T13:49:10.012 [DEBUG] [Thread-128793] [transport.py] [_log()] server lang: <none>
2025-12-31T13:49:10.012 [DEBUG] [Thread-128793] [transport.py] [_log()] kex follows: False
2025-12-31T13:49:10.012 [DEBUG] [Thread-128793] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:49:10.012 [DEBUG] [Thread-128793] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:49:10.012 [DEBUG] [Thread-128793] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:49:10.012 [DEBUG] [Thread-128793] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:49:10.012 [DEBUG] [Thread-128793] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:49:10.012 [DEBUG] [Thread-128793] [transport.py] [_log()] Compression: none
2025-12-31T13:49:10.013 [DEBUG] [Thread-128793] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:49:10.072 [DEBUG] [Thread-128793] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:49:10.072 [DEBUG] [Thread-128793] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:49:10.073 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T13:49:10.074 [DEBUG] [Thread-128793] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T13:49:10.075 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:49:10.128 [DEBUG] [Thread-128793] [transport.py] [_log()] userauth is OK
2025-12-31T13:49:10.128 [DEBUG] [Thread-128793] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:49:10.129 [DEBUG] [Thread-128793] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:49:10.129 [DEBUG] [Thread-128793] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T13:49:10.129 [DEBUG] [Thread-128793] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:49:10.152 [INFO] [Thread-128793] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:49:10.153 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T13:49:10.153 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:49:10.986 [DEBUG] [Thread-128793] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:49:10.986 [DEBUG] [Thread-128793] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:49:11.034 [DEBUG] [Thread-128793] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:49:11.034 [DEBUG] [Thread-128793] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:49:11.043 [DEBUG] [Thread-128793] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:49:11.053 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:49:11.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T13:49:11.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T13:49:11.071 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:49:11.071 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:49:11.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:49:11.080 [DEBUG] [Thread-128793] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:49:16.501 [DEBUG] [Thread-128796 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:49:25.035 [DEBUG] [Thread-128797 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:49:40.064 [DEBUG] [Thread-128798 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:49:41.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T13:49:41.087 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T13:49:41.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T13:49:41.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 49, 18), 32.98, 10.58, 0.0, 24.3, 25.7, 0, 0, 0, 2, 0, 0),)
2025-12-31T13:49:41.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:49:18
2025-12-31T13:49:41.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T13:49:42.050 [DEBUG] [Thread-128799] [transport.py] [_log()] starting thread (client mode): 0xb955ba30
2025-12-31T13:49:42.050 [DEBUG] [Thread-128799] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:49:42.066 [DEBUG] [Thread-128799] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T13:49:42.066 [INFO] [Thread-128799] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T13:49:42.068 [DEBUG] [Thread-128799] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:49:42.068 [DEBUG] [Thread-128799] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T13:49:42.069 [DEBUG] [Thread-128799] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:49:42.069 [DEBUG] [Thread-128799] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:49:42.069 [DEBUG] [Thread-128799] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:49:42.069 [DEBUG] [Thread-128799] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:49:42.069 [DEBUG] [Thread-128799] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:49:42.069 [DEBUG] [Thread-128799] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:49:42.069 [DEBUG] [Thread-128799] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:49:42.069 [DEBUG] [Thread-128799] [transport.py] [_log()] client lang: <none>
2025-12-31T13:49:42.069 [DEBUG] [Thread-128799] [transport.py] [_log()] server lang: <none>
2025-12-31T13:49:42.069 [DEBUG] [Thread-128799] [transport.py] [_log()] kex follows: False
2025-12-31T13:49:42.069 [DEBUG] [Thread-128799] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:49:42.069 [DEBUG] [Thread-128799] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:49:42.069 [DEBUG] [Thread-128799] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:49:42.069 [DEBUG] [Thread-128799] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:49:42.069 [DEBUG] [Thread-128799] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:49:42.069 [DEBUG] [Thread-128799] [transport.py] [_log()] Compression: none
2025-12-31T13:49:42.069 [DEBUG] [Thread-128799] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:49:42.084 [DEBUG] [Thread-128799] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:49:42.085 [DEBUG] [Thread-128799] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:49:42.085 [DEBUG] [Thread-128799] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T13:49:42.085 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T13:49:42.086 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:49:42.087 [DEBUG] [Thread-128799] [transport.py] [_log()] userauth is OK
2025-12-31T13:49:42.087 [DEBUG] [Thread-128799] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:49:42.087 [DEBUG] [Thread-128799] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:49:42.087 [DEBUG] [Thread-128799] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T13:49:42.087 [DEBUG] [Thread-128799] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:49:42.111 [INFO] [Thread-128799] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:49:42.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:49:42.857 [DEBUG] [Thread-128799] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:49:42.857 [DEBUG] [Thread-128799] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:49:42.857 [DEBUG] [Thread-128799] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T13:49:42.898 [DEBUG] [Thread-128799] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:49:42.898 [DEBUG] [Thread-128799] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:49:42.900 [DEBUG] [Thread-128799] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:49:42.911 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:49:42.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T13:49:42.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T13:49:42.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T13:49:42.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:49:42.923 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T13:49:42.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:49:42.923 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:49:42.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T13:49:42.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.492156 -999.00  +25.20  22.48     16   -2.20 1 2 1 1 1   888    0 28.45 42.50 ----- 19.1 22.5 274.6 28.2 29.7 -21.6 29.6 -20.7 28.9 -22.9 29.4 -20.3
2025-12-31T13:49:42.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T13:49:42.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T13:49:42.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.492156
2025-12-31T13:49:42.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T13:49:42.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T13:49:42.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T13:49:42.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T13:49:42.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T13:49:42.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:49:18', tmtdew=32.98, humidity=10.58, cloud=0.0, wind=24.3, temperature=25.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T11:48:42.278', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T13:49:42.926 [DEBUG] [Thread-128799] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:49:43.009 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T13:49:43.019 [DEBUG] [Thread-128802] [transport.py] [_log()] starting thread (client mode): 0xb6bb0a30
2025-12-31T13:49:43.019 [DEBUG] [Thread-128802] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:49:43.034 [DEBUG] [Thread-128802] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T13:49:43.034 [INFO] [Thread-128802] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T13:49:43.042 [DEBUG] [Thread-128802] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:49:43.042 [DEBUG] [Thread-128802] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T13:49:43.042 [DEBUG] [Thread-128802] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:49:43.042 [DEBUG] [Thread-128802] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:49:43.042 [DEBUG] [Thread-128802] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:49:43.042 [DEBUG] [Thread-128802] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:49:43.042 [DEBUG] [Thread-128802] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:49:43.042 [DEBUG] [Thread-128802] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:49:43.042 [DEBUG] [Thread-128802] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:49:43.042 [DEBUG] [Thread-128802] [transport.py] [_log()] client lang: <none>
2025-12-31T13:49:43.042 [DEBUG] [Thread-128802] [transport.py] [_log()] server lang: <none>
2025-12-31T13:49:43.042 [DEBUG] [Thread-128802] [transport.py] [_log()] kex follows: False
2025-12-31T13:49:43.042 [DEBUG] [Thread-128802] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:49:43.042 [DEBUG] [Thread-128802] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:49:43.042 [DEBUG] [Thread-128802] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:49:43.042 [DEBUG] [Thread-128802] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:49:43.042 [DEBUG] [Thread-128802] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:49:43.043 [DEBUG] [Thread-128802] [transport.py] [_log()] Compression: none
2025-12-31T13:49:43.043 [DEBUG] [Thread-128802] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:49:43.099 [DEBUG] [Thread-128802] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:49:43.100 [DEBUG] [Thread-128802] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:49:43.101 [DEBUG] [Thread-128802] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T13:49:43.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T13:49:43.109 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:49:43.156 [DEBUG] [Thread-128802] [transport.py] [_log()] userauth is OK
2025-12-31T13:49:43.156 [DEBUG] [Thread-128802] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:49:43.156 [DEBUG] [Thread-128802] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:49:43.156 [DEBUG] [Thread-128802] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T13:49:43.156 [DEBUG] [Thread-128802] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:49:43.174 [INFO] [Thread-128802] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:49:43.174 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T13:49:43.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:49:44.000 [DEBUG] [Thread-128802] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:49:44.000 [DEBUG] [Thread-128802] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:49:44.049 [DEBUG] [Thread-128802] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:49:44.050 [DEBUG] [Thread-128802] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:49:44.058 [DEBUG] [Thread-128802] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:49:44.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:49:44.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T13:49:44.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T13:49:44.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:49:44.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:49:44.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:49:44.092 [DEBUG] [Thread-128802] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:49:53.735 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:49:53.737 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:49:55.098 [DEBUG] [Thread-128804 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:50:10.136 [DEBUG] [Thread-128805 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:50:14.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T13:50:14.093 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T13:50:14.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T13:50:14.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 49, 50), 33.94, 9.8, 0.0, 28.85, 26.13, 0, 0, 0, 2, 0, 0),)
2025-12-31T13:50:14.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:49:50
2025-12-31T13:50:14.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T13:50:15.067 [DEBUG] [Thread-128806] [transport.py] [_log()] starting thread (client mode): 0xb6bbcf70
2025-12-31T13:50:15.067 [DEBUG] [Thread-128806] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:50:15.087 [DEBUG] [Thread-128806] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T13:50:15.087 [INFO] [Thread-128806] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T13:50:15.090 [DEBUG] [Thread-128806] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:50:15.090 [DEBUG] [Thread-128806] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T13:50:15.090 [DEBUG] [Thread-128806] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:50:15.090 [DEBUG] [Thread-128806] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:50:15.090 [DEBUG] [Thread-128806] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:50:15.090 [DEBUG] [Thread-128806] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:50:15.091 [DEBUG] [Thread-128806] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:50:15.091 [DEBUG] [Thread-128806] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:50:15.091 [DEBUG] [Thread-128806] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:50:15.091 [DEBUG] [Thread-128806] [transport.py] [_log()] client lang: <none>
2025-12-31T13:50:15.091 [DEBUG] [Thread-128806] [transport.py] [_log()] server lang: <none>
2025-12-31T13:50:15.091 [DEBUG] [Thread-128806] [transport.py] [_log()] kex follows: False
2025-12-31T13:50:15.091 [DEBUG] [Thread-128806] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:50:15.091 [DEBUG] [Thread-128806] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:50:15.091 [DEBUG] [Thread-128806] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:50:15.091 [DEBUG] [Thread-128806] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:50:15.091 [DEBUG] [Thread-128806] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:50:15.091 [DEBUG] [Thread-128806] [transport.py] [_log()] Compression: none
2025-12-31T13:50:15.091 [DEBUG] [Thread-128806] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:50:15.108 [DEBUG] [Thread-128806] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:50:15.108 [DEBUG] [Thread-128806] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:50:15.109 [DEBUG] [Thread-128806] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T13:50:15.109 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T13:50:15.110 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:50:15.153 [DEBUG] [Thread-128806] [transport.py] [_log()] userauth is OK
2025-12-31T13:50:15.153 [DEBUG] [Thread-128806] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:50:15.153 [DEBUG] [Thread-128806] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:50:15.154 [DEBUG] [Thread-128806] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T13:50:15.154 [DEBUG] [Thread-128806] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:50:15.185 [INFO] [Thread-128806] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:50:15.185 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:50:16.555 [DEBUG] [Thread-128808 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:50:17.002 [DEBUG] [Thread-128806] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:50:17.003 [DEBUG] [Thread-128806] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:50:17.003 [DEBUG] [Thread-128806] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T13:50:17.044 [DEBUG] [Thread-128806] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:50:17.044 [DEBUG] [Thread-128806] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:50:17.047 [DEBUG] [Thread-128806] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:50:17.132 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:50:17.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T13:50:17.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T13:50:17.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T13:50:17.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:50:17.231 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T13:50:17.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:50:17.231 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:50:17.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T13:50:17.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.492851 -999.00  +25.40  32.87     16   -2.10 1 2 2 1 1   888    0 28.81 35.47 ----- 29.8 32.9 272.0 38.7 30.0 -21.6 29.7 -20.5 29.2 -18.1 29.7 -19.2
2025-12-31T13:50:17.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T13:50:17.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T13:50:17.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.492851
2025-12-31T13:50:17.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T13:50:17.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T13:50:17.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T13:50:17.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T13:50:17.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T13:50:17.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:49:50', tmtdew=33.94, humidity=9.8, cloud=0.0, wind=28.85, temperature=26.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T11:49:42.326', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T13:50:17.234 [DEBUG] [Thread-128806] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:50:17.319 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T13:50:17.332 [DEBUG] [Thread-128810] [transport.py] [_log()] starting thread (client mode): 0xb9558fd0
2025-12-31T13:50:17.332 [DEBUG] [Thread-128810] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:50:17.347 [DEBUG] [Thread-128810] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T13:50:17.348 [INFO] [Thread-128810] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T13:50:17.355 [DEBUG] [Thread-128810] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:50:17.355 [DEBUG] [Thread-128810] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T13:50:17.355 [DEBUG] [Thread-128810] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:50:17.355 [DEBUG] [Thread-128810] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:50:17.355 [DEBUG] [Thread-128810] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:50:17.355 [DEBUG] [Thread-128810] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:50:17.356 [DEBUG] [Thread-128810] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:50:17.356 [DEBUG] [Thread-128810] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:50:17.356 [DEBUG] [Thread-128810] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:50:17.356 [DEBUG] [Thread-128810] [transport.py] [_log()] client lang: <none>
2025-12-31T13:50:17.356 [DEBUG] [Thread-128810] [transport.py] [_log()] server lang: <none>
2025-12-31T13:50:17.356 [DEBUG] [Thread-128810] [transport.py] [_log()] kex follows: False
2025-12-31T13:50:17.356 [DEBUG] [Thread-128810] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:50:17.356 [DEBUG] [Thread-128810] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:50:17.356 [DEBUG] [Thread-128810] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:50:17.356 [DEBUG] [Thread-128810] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:50:17.356 [DEBUG] [Thread-128810] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:50:17.356 [DEBUG] [Thread-128810] [transport.py] [_log()] Compression: none
2025-12-31T13:50:17.356 [DEBUG] [Thread-128810] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:50:17.418 [DEBUG] [Thread-128810] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:50:17.418 [DEBUG] [Thread-128810] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:50:17.419 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T13:50:17.419 [DEBUG] [Thread-128810] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T13:50:17.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:50:17.476 [DEBUG] [Thread-128810] [transport.py] [_log()] userauth is OK
2025-12-31T13:50:17.477 [DEBUG] [Thread-128810] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:50:17.477 [DEBUG] [Thread-128810] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:50:17.477 [DEBUG] [Thread-128810] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T13:50:17.477 [DEBUG] [Thread-128810] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:50:17.496 [INFO] [Thread-128810] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:50:17.496 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T13:50:17.497 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:50:18.344 [DEBUG] [Thread-128810] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:50:18.344 [DEBUG] [Thread-128810] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:50:18.392 [DEBUG] [Thread-128810] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:50:18.392 [DEBUG] [Thread-128810] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:50:18.402 [DEBUG] [Thread-128810] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:50:18.411 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:50:18.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T13:50:18.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T13:50:18.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:50:18.430 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:50:18.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:50:18.438 [DEBUG] [Thread-128810] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:50:25.168 [DEBUG] [Thread-128812 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:50:40.228 [DEBUG] [Thread-128813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:50:48.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T13:50:48.460 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T13:50:48.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T13:50:49.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 50, 22), 34.06, 9.72, 0.0, 28.51, 26.16, 0, 0, 0, 2, 0, 0),)
2025-12-31T13:50:49.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:50:22
2025-12-31T13:50:49.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T13:50:49.489 [DEBUG] [Thread-128814] [transport.py] [_log()] starting thread (client mode): 0xb6bbd7b0
2025-12-31T13:50:49.490 [DEBUG] [Thread-128814] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:50:49.510 [DEBUG] [Thread-128814] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T13:50:49.510 [INFO] [Thread-128814] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T13:50:49.514 [DEBUG] [Thread-128814] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:50:49.514 [DEBUG] [Thread-128814] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T13:50:49.514 [DEBUG] [Thread-128814] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:50:49.514 [DEBUG] [Thread-128814] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:50:49.514 [DEBUG] [Thread-128814] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:50:49.514 [DEBUG] [Thread-128814] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:50:49.514 [DEBUG] [Thread-128814] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:50:49.514 [DEBUG] [Thread-128814] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:50:49.514 [DEBUG] [Thread-128814] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:50:49.514 [DEBUG] [Thread-128814] [transport.py] [_log()] client lang: <none>
2025-12-31T13:50:49.514 [DEBUG] [Thread-128814] [transport.py] [_log()] server lang: <none>
2025-12-31T13:50:49.514 [DEBUG] [Thread-128814] [transport.py] [_log()] kex follows: False
2025-12-31T13:50:49.514 [DEBUG] [Thread-128814] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:50:49.514 [DEBUG] [Thread-128814] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:50:49.514 [DEBUG] [Thread-128814] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:50:49.514 [DEBUG] [Thread-128814] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:50:49.514 [DEBUG] [Thread-128814] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:50:49.514 [DEBUG] [Thread-128814] [transport.py] [_log()] Compression: none
2025-12-31T13:50:49.514 [DEBUG] [Thread-128814] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:50:49.530 [DEBUG] [Thread-128814] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:50:49.530 [DEBUG] [Thread-128814] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:50:49.530 [DEBUG] [Thread-128814] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T13:50:49.530 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T13:50:49.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:50:49.531 [DEBUG] [Thread-128814] [transport.py] [_log()] userauth is OK
2025-12-31T13:50:49.531 [DEBUG] [Thread-128814] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:50:49.531 [DEBUG] [Thread-128814] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:50:49.532 [DEBUG] [Thread-128814] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T13:50:49.532 [DEBUG] [Thread-128814] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:50:49.542 [INFO] [Thread-128814] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:50:49.542 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:50:50.181 [DEBUG] [Thread-128814] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:50:50.181 [DEBUG] [Thread-128814] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:50:50.181 [DEBUG] [Thread-128814] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T13:50:50.222 [DEBUG] [Thread-128814] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:50:50.222 [DEBUG] [Thread-128814] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:50:50.224 [DEBUG] [Thread-128814] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:50:50.235 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:50:50.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T13:50:50.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T13:50:50.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T13:50:50.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:50:50.240 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T13:50:50.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:50:50.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:50:50.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T13:50:50.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.493198 -999.00  +25.60  25.64     16   -2.00 1 2 1 1 1   888    0 28.48 35.66 ----- 31.2 25.6 273.8 38.3 29.9 -21.0 29.7 -20.9 29.1 -20.5 29.6 -20.6
2025-12-31T13:50:50.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T13:50:50.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T13:50:50.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.493198
2025-12-31T13:50:50.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T13:50:50.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T13:50:50.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T13:50:50.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T13:50:50.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T13:50:50.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:50:22', tmtdew=34.06, humidity=9.72, cloud=0.0, wind=28.51, temperature=26.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T11:50:12.307', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T13:50:50.242 [DEBUG] [Thread-128814] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:50:50.316 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T13:50:50.327 [DEBUG] [Thread-128817] [transport.py] [_log()] starting thread (client mode): 0xb6ba3d30
2025-12-31T13:50:50.327 [DEBUG] [Thread-128817] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:50:50.342 [DEBUG] [Thread-128817] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T13:50:50.342 [INFO] [Thread-128817] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T13:50:50.349 [DEBUG] [Thread-128817] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:50:50.349 [DEBUG] [Thread-128817] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T13:50:50.349 [DEBUG] [Thread-128817] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:50:50.349 [DEBUG] [Thread-128817] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:50:50.350 [DEBUG] [Thread-128817] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:50:50.350 [DEBUG] [Thread-128817] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:50:50.350 [DEBUG] [Thread-128817] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:50:50.350 [DEBUG] [Thread-128817] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:50:50.350 [DEBUG] [Thread-128817] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:50:50.350 [DEBUG] [Thread-128817] [transport.py] [_log()] client lang: <none>
2025-12-31T13:50:50.350 [DEBUG] [Thread-128817] [transport.py] [_log()] server lang: <none>
2025-12-31T13:50:50.350 [DEBUG] [Thread-128817] [transport.py] [_log()] kex follows: False
2025-12-31T13:50:50.350 [DEBUG] [Thread-128817] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:50:50.350 [DEBUG] [Thread-128817] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:50:50.350 [DEBUG] [Thread-128817] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:50:50.350 [DEBUG] [Thread-128817] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:50:50.350 [DEBUG] [Thread-128817] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:50:50.350 [DEBUG] [Thread-128817] [transport.py] [_log()] Compression: none
2025-12-31T13:50:50.350 [DEBUG] [Thread-128817] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:50:50.407 [DEBUG] [Thread-128817] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:50:50.408 [DEBUG] [Thread-128817] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:50:50.408 [DEBUG] [Thread-128817] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T13:50:50.408 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T13:50:50.408 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:50:50.464 [DEBUG] [Thread-128817] [transport.py] [_log()] userauth is OK
2025-12-31T13:50:50.464 [DEBUG] [Thread-128817] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:50:50.464 [DEBUG] [Thread-128817] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:50:50.464 [DEBUG] [Thread-128817] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T13:50:50.464 [DEBUG] [Thread-128817] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:50:50.478 [INFO] [Thread-128817] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:50:50.478 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T13:50:50.478 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:50:51.328 [DEBUG] [Thread-128817] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:50:51.329 [DEBUG] [Thread-128817] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:50:51.377 [DEBUG] [Thread-128817] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:50:51.378 [DEBUG] [Thread-128817] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:50:51.387 [DEBUG] [Thread-128817] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:50:51.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:50:51.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T13:50:51.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T13:50:51.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:50:51.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:50:51.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:50:51.424 [DEBUG] [Thread-128817] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:50:53.879 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:50:53.880 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:50:55.256 [DEBUG] [Thread-128819 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:51:10.298 [DEBUG] [Thread-128820 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:51:16.609 [DEBUG] [Thread-128821 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:51:21.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T13:51:21.433 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T13:51:21.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T13:51:22.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 50, 54), 33.65, 10.51, 0.0, 36.86, 26.33, 0, 0, 0, 2, 0, 0),)
2025-12-31T13:51:22.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:50:54
2025-12-31T13:51:22.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T13:51:22.417 [DEBUG] [Thread-128822] [transport.py] [_log()] starting thread (client mode): 0xb6bb33a0
2025-12-31T13:51:22.417 [DEBUG] [Thread-128822] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:51:22.437 [DEBUG] [Thread-128822] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T13:51:22.437 [INFO] [Thread-128822] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T13:51:22.440 [DEBUG] [Thread-128822] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:51:22.441 [DEBUG] [Thread-128822] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T13:51:22.441 [DEBUG] [Thread-128822] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:51:22.441 [DEBUG] [Thread-128822] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:51:22.441 [DEBUG] [Thread-128822] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:51:22.441 [DEBUG] [Thread-128822] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:51:22.441 [DEBUG] [Thread-128822] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:51:22.441 [DEBUG] [Thread-128822] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:51:22.441 [DEBUG] [Thread-128822] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:51:22.441 [DEBUG] [Thread-128822] [transport.py] [_log()] client lang: <none>
2025-12-31T13:51:22.441 [DEBUG] [Thread-128822] [transport.py] [_log()] server lang: <none>
2025-12-31T13:51:22.441 [DEBUG] [Thread-128822] [transport.py] [_log()] kex follows: False
2025-12-31T13:51:22.441 [DEBUG] [Thread-128822] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:51:22.441 [DEBUG] [Thread-128822] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:51:22.442 [DEBUG] [Thread-128822] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:51:22.442 [DEBUG] [Thread-128822] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:51:22.442 [DEBUG] [Thread-128822] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:51:22.442 [DEBUG] [Thread-128822] [transport.py] [_log()] Compression: none
2025-12-31T13:51:22.442 [DEBUG] [Thread-128822] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:51:22.461 [DEBUG] [Thread-128822] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:51:22.462 [DEBUG] [Thread-128822] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:51:22.462 [DEBUG] [Thread-128822] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T13:51:22.463 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T13:51:22.463 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:51:22.464 [DEBUG] [Thread-128822] [transport.py] [_log()] userauth is OK
2025-12-31T13:51:22.465 [DEBUG] [Thread-128822] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:51:22.465 [DEBUG] [Thread-128822] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:51:22.465 [DEBUG] [Thread-128822] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T13:51:22.465 [DEBUG] [Thread-128822] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:51:22.483 [INFO] [Thread-128822] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:51:22.484 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:51:23.209 [DEBUG] [Thread-128822] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:51:23.210 [DEBUG] [Thread-128822] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:51:23.210 [DEBUG] [Thread-128822] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T13:51:23.251 [DEBUG] [Thread-128822] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:51:23.251 [DEBUG] [Thread-128822] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:51:23.255 [DEBUG] [Thread-128822] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:51:23.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:51:23.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T13:51:23.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T13:51:23.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T13:51:23.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:51:23.273 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T13:51:23.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:51:23.273 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:51:23.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T13:51:23.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.493545 -999.00  +25.30  37.84     16   -2.10 1 2 2 1 1   888    0 28.89 35.01 ----- 38.9 37.8 274.6 47.6 29.9 -21.5 29.7 -20.9 28.9 -22.2 29.7 -19.9
2025-12-31T13:51:23.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T13:51:23.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T13:51:23.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.493545
2025-12-31T13:51:23.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T13:51:23.274 [DEBUG] [Thread-128822] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:51:23.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T13:51:23.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T13:51:23.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T13:51:23.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T13:51:23.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:50:54', tmtdew=33.65, humidity=10.51, cloud=0.0, wind=36.86, temperature=26.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T11:50:42.288', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T13:51:23.349 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T13:51:23.361 [DEBUG] [Thread-128825] [transport.py] [_log()] starting thread (client mode): 0xb6bbd840
2025-12-31T13:51:23.361 [DEBUG] [Thread-128825] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:51:23.376 [DEBUG] [Thread-128825] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T13:51:23.376 [INFO] [Thread-128825] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T13:51:23.383 [DEBUG] [Thread-128825] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:51:23.383 [DEBUG] [Thread-128825] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T13:51:23.383 [DEBUG] [Thread-128825] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:51:23.383 [DEBUG] [Thread-128825] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:51:23.384 [DEBUG] [Thread-128825] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:51:23.384 [DEBUG] [Thread-128825] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:51:23.384 [DEBUG] [Thread-128825] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:51:23.384 [DEBUG] [Thread-128825] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:51:23.384 [DEBUG] [Thread-128825] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:51:23.384 [DEBUG] [Thread-128825] [transport.py] [_log()] client lang: <none>
2025-12-31T13:51:23.384 [DEBUG] [Thread-128825] [transport.py] [_log()] server lang: <none>
2025-12-31T13:51:23.384 [DEBUG] [Thread-128825] [transport.py] [_log()] kex follows: False
2025-12-31T13:51:23.384 [DEBUG] [Thread-128825] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:51:23.384 [DEBUG] [Thread-128825] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:51:23.384 [DEBUG] [Thread-128825] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:51:23.384 [DEBUG] [Thread-128825] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:51:23.384 [DEBUG] [Thread-128825] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:51:23.384 [DEBUG] [Thread-128825] [transport.py] [_log()] Compression: none
2025-12-31T13:51:23.385 [DEBUG] [Thread-128825] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:51:23.444 [DEBUG] [Thread-128825] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:51:23.445 [DEBUG] [Thread-128825] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:51:23.446 [DEBUG] [Thread-128825] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T13:51:23.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T13:51:23.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:51:23.504 [DEBUG] [Thread-128825] [transport.py] [_log()] userauth is OK
2025-12-31T13:51:23.504 [DEBUG] [Thread-128825] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:51:23.504 [DEBUG] [Thread-128825] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:51:23.504 [DEBUG] [Thread-128825] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T13:51:23.504 [DEBUG] [Thread-128825] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:51:23.526 [INFO] [Thread-128825] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:51:23.527 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T13:51:23.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:51:24.418 [DEBUG] [Thread-128825] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:51:24.418 [DEBUG] [Thread-128825] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:51:24.466 [DEBUG] [Thread-128825] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:51:24.466 [DEBUG] [Thread-128825] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:51:24.474 [DEBUG] [Thread-128825] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:51:24.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:51:24.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T13:51:24.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-12-31T13:51:24.498 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:51:24.498 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:51:24.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:51:24.506 [DEBUG] [Thread-128825] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:51:25.332 [DEBUG] [Thread-128827 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:51:40.372 [DEBUG] [Thread-128828 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:51:54.018 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:51:54.020 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:51:54.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T13:51:54.517 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T13:51:54.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T13:51:55.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 51, 26), 33.42, 10.66, 0.0, 36.72, 26.18, 0, 0, 0, 2, 0, 0),)
2025-12-31T13:51:55.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:51:26
2025-12-31T13:51:55.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T13:51:55.411 [DEBUG] [Thread-128829 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:51:55.506 [DEBUG] [Thread-128830] [transport.py] [_log()] starting thread (client mode): 0xb6ba05e0
2025-12-31T13:51:55.506 [DEBUG] [Thread-128830] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:51:55.526 [DEBUG] [Thread-128830] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T13:51:55.526 [INFO] [Thread-128830] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T13:51:55.528 [DEBUG] [Thread-128830] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:51:55.528 [DEBUG] [Thread-128830] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T13:51:55.528 [DEBUG] [Thread-128830] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:51:55.528 [DEBUG] [Thread-128830] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:51:55.528 [DEBUG] [Thread-128830] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:51:55.528 [DEBUG] [Thread-128830] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:51:55.528 [DEBUG] [Thread-128830] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:51:55.528 [DEBUG] [Thread-128830] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:51:55.528 [DEBUG] [Thread-128830] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:51:55.528 [DEBUG] [Thread-128830] [transport.py] [_log()] client lang: <none>
2025-12-31T13:51:55.528 [DEBUG] [Thread-128830] [transport.py] [_log()] server lang: <none>
2025-12-31T13:51:55.529 [DEBUG] [Thread-128830] [transport.py] [_log()] kex follows: False
2025-12-31T13:51:55.529 [DEBUG] [Thread-128830] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:51:55.529 [DEBUG] [Thread-128830] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:51:55.529 [DEBUG] [Thread-128830] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:51:55.529 [DEBUG] [Thread-128830] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:51:55.529 [DEBUG] [Thread-128830] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:51:55.529 [DEBUG] [Thread-128830] [transport.py] [_log()] Compression: none
2025-12-31T13:51:55.529 [DEBUG] [Thread-128830] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:51:55.540 [DEBUG] [Thread-128830] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:51:55.540 [DEBUG] [Thread-128830] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:51:55.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T13:51:55.542 [DEBUG] [Thread-128830] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T13:51:55.542 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:51:55.543 [DEBUG] [Thread-128830] [transport.py] [_log()] userauth is OK
2025-12-31T13:51:55.543 [DEBUG] [Thread-128830] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:51:55.543 [DEBUG] [Thread-128830] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:51:55.543 [DEBUG] [Thread-128830] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T13:51:55.543 [DEBUG] [Thread-128830] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:51:55.571 [INFO] [Thread-128830] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:51:55.571 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:51:56.185 [DEBUG] [Thread-128830] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:51:56.185 [DEBUG] [Thread-128830] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:51:56.185 [DEBUG] [Thread-128830] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T13:51:56.226 [DEBUG] [Thread-128830] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:51:56.226 [DEBUG] [Thread-128830] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:51:56.228 [DEBUG] [Thread-128830] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:51:56.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:51:56.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T13:51:56.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T13:51:56.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T13:51:56.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:51:56.246 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T13:51:56.246 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:51:56.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:51:56.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T13:51:56.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.493892 -999.00  +25.00  21.84     16   -2.00 1 2 1 1 1   888    0 28.42 30.79 ----- 18.4 21.8 269.4 38.3 29.7 -20.8 29.6 -20.7 28.7 -20.9 29.4 -21.0
2025-12-31T13:51:56.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T13:51:56.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T13:51:56.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.493892
2025-12-31T13:51:56.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T13:51:56.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T13:51:56.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T13:51:56.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T13:51:56.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T13:51:56.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:51:26', tmtdew=33.42, humidity=10.66, cloud=0.0, wind=36.72, temperature=26.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T11:51:12.269', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T13:51:56.247 [DEBUG] [Thread-128830] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:51:56.323 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T13:51:56.335 [DEBUG] [Thread-128833] [transport.py] [_log()] starting thread (client mode): 0xb6bb2140
2025-12-31T13:51:56.335 [DEBUG] [Thread-128833] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:51:56.350 [DEBUG] [Thread-128833] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T13:51:56.350 [INFO] [Thread-128833] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T13:51:56.358 [DEBUG] [Thread-128833] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:51:56.358 [DEBUG] [Thread-128833] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T13:51:56.358 [DEBUG] [Thread-128833] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:51:56.358 [DEBUG] [Thread-128833] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:51:56.358 [DEBUG] [Thread-128833] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:51:56.358 [DEBUG] [Thread-128833] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:51:56.358 [DEBUG] [Thread-128833] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:51:56.358 [DEBUG] [Thread-128833] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:51:56.358 [DEBUG] [Thread-128833] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:51:56.358 [DEBUG] [Thread-128833] [transport.py] [_log()] client lang: <none>
2025-12-31T13:51:56.358 [DEBUG] [Thread-128833] [transport.py] [_log()] server lang: <none>
2025-12-31T13:51:56.358 [DEBUG] [Thread-128833] [transport.py] [_log()] kex follows: False
2025-12-31T13:51:56.358 [DEBUG] [Thread-128833] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:51:56.358 [DEBUG] [Thread-128833] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:51:56.359 [DEBUG] [Thread-128833] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:51:56.359 [DEBUG] [Thread-128833] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:51:56.359 [DEBUG] [Thread-128833] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:51:56.359 [DEBUG] [Thread-128833] [transport.py] [_log()] Compression: none
2025-12-31T13:51:56.359 [DEBUG] [Thread-128833] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:51:56.415 [DEBUG] [Thread-128833] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:51:56.416 [DEBUG] [Thread-128833] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:51:56.416 [DEBUG] [Thread-128833] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T13:51:56.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T13:51:56.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:51:56.473 [DEBUG] [Thread-128833] [transport.py] [_log()] userauth is OK
2025-12-31T13:51:56.473 [DEBUG] [Thread-128833] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:51:56.473 [DEBUG] [Thread-128833] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:51:56.474 [DEBUG] [Thread-128833] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T13:51:56.474 [DEBUG] [Thread-128833] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:51:56.502 [INFO] [Thread-128833] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:51:56.503 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T13:51:56.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:51:57.317 [DEBUG] [Thread-128833] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:51:57.318 [DEBUG] [Thread-128833] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:51:57.366 [DEBUG] [Thread-128833] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:51:57.366 [DEBUG] [Thread-128833] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:51:57.376 [DEBUG] [Thread-128833] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:51:57.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:51:57.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-12-31T13:51:57.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T13:51:57.404 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:51:57.405 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:51:57.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:51:57.414 [DEBUG] [Thread-128833] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:52:10.440 [DEBUG] [Thread-128835 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:52:16.645 [DEBUG] [Thread-128836 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:52:25.493 [DEBUG] [Thread-128837 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:52:27.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T13:52:27.427 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T13:52:27.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T13:52:28.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 51, 58), 32.81, 10.68, 0.0, 26.38, 25.61, 0, 0, 0, 2, 0, 0),)
2025-12-31T13:52:28.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:51:58
2025-12-31T13:52:28.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T13:52:28.425 [DEBUG] [Thread-128838] [transport.py] [_log()] starting thread (client mode): 0xb9559690
2025-12-31T13:52:28.425 [DEBUG] [Thread-128838] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:52:28.444 [DEBUG] [Thread-128838] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T13:52:28.444 [INFO] [Thread-128838] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T13:52:28.447 [DEBUG] [Thread-128838] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:52:28.447 [DEBUG] [Thread-128838] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T13:52:28.447 [DEBUG] [Thread-128838] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:52:28.447 [DEBUG] [Thread-128838] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:52:28.447 [DEBUG] [Thread-128838] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:52:28.448 [DEBUG] [Thread-128838] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:52:28.448 [DEBUG] [Thread-128838] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:52:28.448 [DEBUG] [Thread-128838] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:52:28.448 [DEBUG] [Thread-128838] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:52:28.448 [DEBUG] [Thread-128838] [transport.py] [_log()] client lang: <none>
2025-12-31T13:52:28.448 [DEBUG] [Thread-128838] [transport.py] [_log()] server lang: <none>
2025-12-31T13:52:28.448 [DEBUG] [Thread-128838] [transport.py] [_log()] kex follows: False
2025-12-31T13:52:28.448 [DEBUG] [Thread-128838] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:52:28.448 [DEBUG] [Thread-128838] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:52:28.448 [DEBUG] [Thread-128838] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:52:28.448 [DEBUG] [Thread-128838] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:52:28.448 [DEBUG] [Thread-128838] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:52:28.448 [DEBUG] [Thread-128838] [transport.py] [_log()] Compression: none
2025-12-31T13:52:28.448 [DEBUG] [Thread-128838] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:52:28.465 [DEBUG] [Thread-128838] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:52:28.466 [DEBUG] [Thread-128838] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:52:28.466 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T13:52:28.467 [DEBUG] [Thread-128838] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T13:52:28.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:52:28.469 [DEBUG] [Thread-128838] [transport.py] [_log()] userauth is OK
2025-12-31T13:52:28.469 [DEBUG] [Thread-128838] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:52:28.469 [DEBUG] [Thread-128838] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:52:28.469 [DEBUG] [Thread-128838] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T13:52:28.469 [DEBUG] [Thread-128838] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:52:28.484 [INFO] [Thread-128838] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:52:28.484 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:52:29.270 [DEBUG] [Thread-128838] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:52:29.271 [DEBUG] [Thread-128838] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:52:29.271 [DEBUG] [Thread-128838] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T13:52:29.312 [DEBUG] [Thread-128838] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:52:29.312 [DEBUG] [Thread-128838] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:52:29.316 [DEBUG] [Thread-128838] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:52:29.326 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:52:29.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T13:52:29.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T13:52:29.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T13:52:29.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:52:29.341 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T13:52:29.341 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:52:29.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:52:29.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T13:52:29.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.494239 -999.00  +25.20  18.96     16   -2.00 1 2 1 1 1   888    0 28.80 30.07 ----- 15.5 19.0 265.4 23.2 30.0 -20.9 29.7 -19.6 29.1 -19.0 29.5 -19.8
2025-12-31T13:52:29.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T13:52:29.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T13:52:29.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.494239
2025-12-31T13:52:29.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T13:52:29.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T13:52:29.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T13:52:29.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T13:52:29.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T13:52:29.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:51:58', tmtdew=32.81, humidity=10.68, cloud=0.0, wind=26.38, temperature=25.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T11:51:42.250', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T13:52:29.344 [DEBUG] [Thread-128838] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:52:29.428 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T13:52:29.440 [DEBUG] [Thread-128841] [transport.py] [_log()] starting thread (client mode): 0xb6bb2800
2025-12-31T13:52:29.441 [DEBUG] [Thread-128841] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:52:29.456 [DEBUG] [Thread-128841] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T13:52:29.456 [INFO] [Thread-128841] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T13:52:29.464 [DEBUG] [Thread-128841] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:52:29.464 [DEBUG] [Thread-128841] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T13:52:29.464 [DEBUG] [Thread-128841] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:52:29.465 [DEBUG] [Thread-128841] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:52:29.465 [DEBUG] [Thread-128841] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:52:29.465 [DEBUG] [Thread-128841] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:52:29.465 [DEBUG] [Thread-128841] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:52:29.465 [DEBUG] [Thread-128841] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:52:29.465 [DEBUG] [Thread-128841] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:52:29.465 [DEBUG] [Thread-128841] [transport.py] [_log()] client lang: <none>
2025-12-31T13:52:29.465 [DEBUG] [Thread-128841] [transport.py] [_log()] server lang: <none>
2025-12-31T13:52:29.466 [DEBUG] [Thread-128841] [transport.py] [_log()] kex follows: False
2025-12-31T13:52:29.466 [DEBUG] [Thread-128841] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:52:29.466 [DEBUG] [Thread-128841] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:52:29.466 [DEBUG] [Thread-128841] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:52:29.466 [DEBUG] [Thread-128841] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:52:29.466 [DEBUG] [Thread-128841] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:52:29.466 [DEBUG] [Thread-128841] [transport.py] [_log()] Compression: none
2025-12-31T13:52:29.466 [DEBUG] [Thread-128841] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:52:29.524 [DEBUG] [Thread-128841] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:52:29.525 [DEBUG] [Thread-128841] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:52:29.525 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T13:52:29.526 [DEBUG] [Thread-128841] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T13:52:29.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:52:29.580 [DEBUG] [Thread-128841] [transport.py] [_log()] userauth is OK
2025-12-31T13:52:29.580 [DEBUG] [Thread-128841] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:52:29.580 [DEBUG] [Thread-128841] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:52:29.580 [DEBUG] [Thread-128841] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T13:52:29.580 [DEBUG] [Thread-128841] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:52:29.599 [INFO] [Thread-128841] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:52:29.599 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T13:52:29.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:52:30.430 [DEBUG] [Thread-128841] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:52:30.430 [DEBUG] [Thread-128841] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:52:30.478 [DEBUG] [Thread-128841] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:52:30.478 [DEBUG] [Thread-128841] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:52:30.487 [DEBUG] [Thread-128841] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:52:30.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:52:30.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T13:52:30.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T13:52:30.515 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:52:30.516 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:52:30.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:52:30.524 [DEBUG] [Thread-128841] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:52:40.530 [DEBUG] [Thread-128843 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:52:54.158 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:52:54.159 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:52:55.581 [DEBUG] [Thread-128844 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:53:00.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T13:53:00.547 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T13:53:00.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T13:53:01.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 52, 31), 33.6, 10.1, 0.0, 33.31, 25.69, 0, 0, 0, 2, 0, 0),)
2025-12-31T13:53:01.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:52:31
2025-12-31T13:53:01.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T13:53:01.549 [DEBUG] [Thread-128845] [transport.py] [_log()] starting thread (client mode): 0xb6bb83d0
2025-12-31T13:53:01.549 [DEBUG] [Thread-128845] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:53:01.575 [DEBUG] [Thread-128845] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T13:53:01.575 [INFO] [Thread-128845] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T13:53:01.578 [DEBUG] [Thread-128845] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:53:01.578 [DEBUG] [Thread-128845] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T13:53:01.578 [DEBUG] [Thread-128845] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:53:01.578 [DEBUG] [Thread-128845] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:53:01.578 [DEBUG] [Thread-128845] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:53:01.578 [DEBUG] [Thread-128845] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:53:01.578 [DEBUG] [Thread-128845] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:53:01.578 [DEBUG] [Thread-128845] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:53:01.579 [DEBUG] [Thread-128845] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:53:01.579 [DEBUG] [Thread-128845] [transport.py] [_log()] client lang: <none>
2025-12-31T13:53:01.579 [DEBUG] [Thread-128845] [transport.py] [_log()] server lang: <none>
2025-12-31T13:53:01.579 [DEBUG] [Thread-128845] [transport.py] [_log()] kex follows: False
2025-12-31T13:53:01.579 [DEBUG] [Thread-128845] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:53:01.579 [DEBUG] [Thread-128845] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:53:01.579 [DEBUG] [Thread-128845] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:53:01.579 [DEBUG] [Thread-128845] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:53:01.579 [DEBUG] [Thread-128845] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:53:01.579 [DEBUG] [Thread-128845] [transport.py] [_log()] Compression: none
2025-12-31T13:53:01.579 [DEBUG] [Thread-128845] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:53:01.598 [DEBUG] [Thread-128845] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:53:01.599 [DEBUG] [Thread-128845] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:53:01.600 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T13:53:01.600 [DEBUG] [Thread-128845] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T13:53:01.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:53:01.602 [DEBUG] [Thread-128845] [transport.py] [_log()] userauth is OK
2025-12-31T13:53:01.602 [DEBUG] [Thread-128845] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:53:01.602 [DEBUG] [Thread-128845] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:53:01.602 [DEBUG] [Thread-128845] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T13:53:01.603 [DEBUG] [Thread-128845] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:53:01.625 [INFO] [Thread-128845] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:53:01.626 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:53:02.264 [DEBUG] [Thread-128845] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:53:02.264 [DEBUG] [Thread-128845] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:53:02.265 [DEBUG] [Thread-128845] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T13:53:02.306 [DEBUG] [Thread-128845] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:53:02.306 [DEBUG] [Thread-128845] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:53:02.308 [DEBUG] [Thread-128845] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:53:02.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:53:02.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T13:53:02.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T13:53:02.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T13:53:02.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:53:02.326 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T13:53:02.326 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:53:02.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:53:02.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T13:53:02.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.494587 -999.00  +25.50  16.50     16   -2.00 1 2 1 1 1   888    0 28.34 30.51 ----- 17.4 16.5 277.0 24.1 30.1 -20.3 29.8 -20.2 29.2 -18.9 29.7 -19.4
2025-12-31T13:53:02.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T13:53:02.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T13:53:02.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.494587
2025-12-31T13:53:02.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T13:53:02.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T13:53:02.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T13:53:02.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T13:53:02.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T13:53:02.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:52:31', tmtdew=33.6, humidity=10.1, cloud=0.0, wind=33.31, temperature=25.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T11:52:12.317', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T13:53:02.327 [DEBUG] [Thread-128845] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:53:02.402 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T13:53:02.415 [DEBUG] [Thread-128848] [transport.py] [_log()] starting thread (client mode): 0xb6ba0a30
2025-12-31T13:53:02.415 [DEBUG] [Thread-128848] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:53:02.430 [DEBUG] [Thread-128848] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T13:53:02.430 [INFO] [Thread-128848] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T13:53:02.438 [DEBUG] [Thread-128848] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:53:02.438 [DEBUG] [Thread-128848] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T13:53:02.438 [DEBUG] [Thread-128848] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:53:02.438 [DEBUG] [Thread-128848] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:53:02.438 [DEBUG] [Thread-128848] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:53:02.438 [DEBUG] [Thread-128848] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:53:02.438 [DEBUG] [Thread-128848] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:53:02.438 [DEBUG] [Thread-128848] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:53:02.438 [DEBUG] [Thread-128848] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:53:02.438 [DEBUG] [Thread-128848] [transport.py] [_log()] client lang: <none>
2025-12-31T13:53:02.438 [DEBUG] [Thread-128848] [transport.py] [_log()] server lang: <none>
2025-12-31T13:53:02.438 [DEBUG] [Thread-128848] [transport.py] [_log()] kex follows: False
2025-12-31T13:53:02.438 [DEBUG] [Thread-128848] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:53:02.438 [DEBUG] [Thread-128848] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:53:02.438 [DEBUG] [Thread-128848] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:53:02.438 [DEBUG] [Thread-128848] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:53:02.438 [DEBUG] [Thread-128848] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:53:02.438 [DEBUG] [Thread-128848] [transport.py] [_log()] Compression: none
2025-12-31T13:53:02.438 [DEBUG] [Thread-128848] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:53:02.496 [DEBUG] [Thread-128848] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:53:02.496 [DEBUG] [Thread-128848] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:53:02.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T13:53:02.497 [DEBUG] [Thread-128848] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T13:53:02.498 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:53:02.551 [DEBUG] [Thread-128848] [transport.py] [_log()] userauth is OK
2025-12-31T13:53:02.552 [DEBUG] [Thread-128848] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:53:02.552 [DEBUG] [Thread-128848] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:53:02.552 [DEBUG] [Thread-128848] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T13:53:02.552 [DEBUG] [Thread-128848] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:53:02.572 [INFO] [Thread-128848] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:53:02.572 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T13:53:02.574 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:53:03.385 [DEBUG] [Thread-128848] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:53:03.385 [DEBUG] [Thread-128848] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:53:03.432 [DEBUG] [Thread-128848] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:53:03.432 [DEBUG] [Thread-128848] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:53:03.441 [DEBUG] [Thread-128848] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:53:03.448 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:53:03.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T13:53:03.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T13:53:03.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:53:03.464 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:53:03.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:53:03.472 [DEBUG] [Thread-128848] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:53:10.614 [DEBUG] [Thread-128850 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:53:16.695 [DEBUG] [Thread-128851 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:53:25.663 [DEBUG] [Thread-128852 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:53:33.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T13:53:33.495 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T13:53:33.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T13:53:34.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 53, 3), 33.71, 10.02, 0.0, 29.82, 25.69, 0, 0, 0, 2, 0, 0),)
2025-12-31T13:53:34.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:53:03
2025-12-31T13:53:34.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T13:53:34.490 [DEBUG] [Thread-128853] [transport.py] [_log()] starting thread (client mode): 0xb6bbb430
2025-12-31T13:53:34.490 [DEBUG] [Thread-128853] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:53:34.509 [DEBUG] [Thread-128853] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T13:53:34.509 [INFO] [Thread-128853] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T13:53:34.512 [DEBUG] [Thread-128853] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:53:34.513 [DEBUG] [Thread-128853] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T13:53:34.513 [DEBUG] [Thread-128853] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:53:34.513 [DEBUG] [Thread-128853] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:53:34.513 [DEBUG] [Thread-128853] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:53:34.513 [DEBUG] [Thread-128853] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:53:34.513 [DEBUG] [Thread-128853] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:53:34.513 [DEBUG] [Thread-128853] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:53:34.513 [DEBUG] [Thread-128853] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:53:34.513 [DEBUG] [Thread-128853] [transport.py] [_log()] client lang: <none>
2025-12-31T13:53:34.513 [DEBUG] [Thread-128853] [transport.py] [_log()] server lang: <none>
2025-12-31T13:53:34.513 [DEBUG] [Thread-128853] [transport.py] [_log()] kex follows: False
2025-12-31T13:53:34.513 [DEBUG] [Thread-128853] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:53:34.513 [DEBUG] [Thread-128853] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:53:34.513 [DEBUG] [Thread-128853] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:53:34.513 [DEBUG] [Thread-128853] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:53:34.513 [DEBUG] [Thread-128853] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:53:34.513 [DEBUG] [Thread-128853] [transport.py] [_log()] Compression: none
2025-12-31T13:53:34.513 [DEBUG] [Thread-128853] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:53:34.530 [DEBUG] [Thread-128853] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:53:34.531 [DEBUG] [Thread-128853] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:53:34.540 [DEBUG] [Thread-128853] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T13:53:34.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T13:53:34.542 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:53:34.543 [DEBUG] [Thread-128853] [transport.py] [_log()] userauth is OK
2025-12-31T13:53:34.543 [DEBUG] [Thread-128853] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:53:34.543 [DEBUG] [Thread-128853] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:53:34.543 [DEBUG] [Thread-128853] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T13:53:34.543 [DEBUG] [Thread-128853] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:53:34.567 [INFO] [Thread-128853] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:53:34.568 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:53:35.369 [DEBUG] [Thread-128853] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:53:35.369 [DEBUG] [Thread-128853] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:53:35.370 [DEBUG] [Thread-128853] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T13:53:35.410 [DEBUG] [Thread-128853] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:53:35.410 [DEBUG] [Thread-128853] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:53:35.412 [DEBUG] [Thread-128853] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:53:35.425 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:53:35.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T13:53:35.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T13:53:35.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T13:53:35.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:53:35.430 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T13:53:35.430 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:53:35.430 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:53:35.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T13:53:35.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.494934 -999.00  +25.70  32.90     14   -3.00 1 2 2 1 1   888    0 28.39 31.98 ----- 31.1 32.9 293.4 43.3 30.0 -21.4 29.8 -20.9 29.2 -20.6 29.6 -20.8
2025-12-31T13:53:35.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T13:53:35.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T13:53:35.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.494934
2025-12-31T13:53:35.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T13:53:35.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T13:53:35.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T13:53:35.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T13:53:35.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T13:53:35.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:53:03', tmtdew=33.71, humidity=10.02, cloud=0.0, wind=29.82, temperature=25.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T11:52:42.298', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T13:53:35.431 [DEBUG] [Thread-128853] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:53:35.506 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T13:53:35.516 [DEBUG] [Thread-128856] [transport.py] [_log()] starting thread (client mode): 0xb6bbab00
2025-12-31T13:53:35.516 [DEBUG] [Thread-128856] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:53:35.531 [DEBUG] [Thread-128856] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T13:53:35.532 [INFO] [Thread-128856] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T13:53:35.539 [DEBUG] [Thread-128856] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:53:35.539 [DEBUG] [Thread-128856] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T13:53:35.539 [DEBUG] [Thread-128856] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:53:35.539 [DEBUG] [Thread-128856] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:53:35.539 [DEBUG] [Thread-128856] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:53:35.539 [DEBUG] [Thread-128856] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:53:35.539 [DEBUG] [Thread-128856] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:53:35.539 [DEBUG] [Thread-128856] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:53:35.539 [DEBUG] [Thread-128856] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:53:35.539 [DEBUG] [Thread-128856] [transport.py] [_log()] client lang: <none>
2025-12-31T13:53:35.539 [DEBUG] [Thread-128856] [transport.py] [_log()] server lang: <none>
2025-12-31T13:53:35.539 [DEBUG] [Thread-128856] [transport.py] [_log()] kex follows: False
2025-12-31T13:53:35.539 [DEBUG] [Thread-128856] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:53:35.539 [DEBUG] [Thread-128856] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:53:35.539 [DEBUG] [Thread-128856] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:53:35.539 [DEBUG] [Thread-128856] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:53:35.539 [DEBUG] [Thread-128856] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:53:35.539 [DEBUG] [Thread-128856] [transport.py] [_log()] Compression: none
2025-12-31T13:53:35.539 [DEBUG] [Thread-128856] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:53:35.593 [DEBUG] [Thread-128856] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:53:35.593 [DEBUG] [Thread-128856] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:53:35.593 [DEBUG] [Thread-128856] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T13:53:35.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T13:53:35.594 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:53:35.651 [DEBUG] [Thread-128856] [transport.py] [_log()] userauth is OK
2025-12-31T13:53:35.651 [DEBUG] [Thread-128856] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:53:35.651 [DEBUG] [Thread-128856] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:53:35.651 [DEBUG] [Thread-128856] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T13:53:35.651 [DEBUG] [Thread-128856] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:53:35.665 [INFO] [Thread-128856] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:53:35.665 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T13:53:35.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:53:36.509 [DEBUG] [Thread-128856] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:53:36.509 [DEBUG] [Thread-128856] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:53:36.557 [DEBUG] [Thread-128856] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:53:36.557 [DEBUG] [Thread-128856] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:53:36.566 [DEBUG] [Thread-128856] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:53:36.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:53:36.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T13:53:36.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T13:53:36.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:53:36.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:53:36.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:53:36.597 [DEBUG] [Thread-128856] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:53:40.695 [DEBUG] [Thread-128858 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:53:54.300 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:53:54.301 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:53:55.748 [DEBUG] [Thread-128859 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:54:06.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T13:54:06.620 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T13:54:06.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T13:54:07.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 53, 35), 36.04, 8.74, 0.0, 37.35, 26.19, 0, 0, 0, 2, 0, 0),)
2025-12-31T13:54:07.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:53:35
2025-12-31T13:54:07.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T13:54:07.647 [DEBUG] [Thread-128860] [transport.py] [_log()] starting thread (client mode): 0xb6bb87f0
2025-12-31T13:54:07.647 [DEBUG] [Thread-128860] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:54:07.666 [DEBUG] [Thread-128860] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T13:54:07.666 [INFO] [Thread-128860] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T13:54:07.670 [DEBUG] [Thread-128860] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:54:07.670 [DEBUG] [Thread-128860] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T13:54:07.670 [DEBUG] [Thread-128860] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:54:07.670 [DEBUG] [Thread-128860] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:54:07.670 [DEBUG] [Thread-128860] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:54:07.670 [DEBUG] [Thread-128860] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:54:07.670 [DEBUG] [Thread-128860] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:54:07.670 [DEBUG] [Thread-128860] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:54:07.670 [DEBUG] [Thread-128860] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:54:07.670 [DEBUG] [Thread-128860] [transport.py] [_log()] client lang: <none>
2025-12-31T13:54:07.670 [DEBUG] [Thread-128860] [transport.py] [_log()] server lang: <none>
2025-12-31T13:54:07.670 [DEBUG] [Thread-128860] [transport.py] [_log()] kex follows: False
2025-12-31T13:54:07.670 [DEBUG] [Thread-128860] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:54:07.670 [DEBUG] [Thread-128860] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:54:07.670 [DEBUG] [Thread-128860] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:54:07.670 [DEBUG] [Thread-128860] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:54:07.670 [DEBUG] [Thread-128860] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:54:07.670 [DEBUG] [Thread-128860] [transport.py] [_log()] Compression: none
2025-12-31T13:54:07.670 [DEBUG] [Thread-128860] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:54:07.682 [DEBUG] [Thread-128860] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:54:07.682 [DEBUG] [Thread-128860] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:54:07.682 [DEBUG] [Thread-128860] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T13:54:07.682 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T13:54:07.683 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:54:07.683 [DEBUG] [Thread-128860] [transport.py] [_log()] userauth is OK
2025-12-31T13:54:07.683 [DEBUG] [Thread-128860] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:54:07.683 [DEBUG] [Thread-128860] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:54:07.683 [DEBUG] [Thread-128860] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T13:54:07.683 [DEBUG] [Thread-128860] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:54:07.692 [INFO] [Thread-128860] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:54:07.692 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:54:08.365 [DEBUG] [Thread-128860] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:54:08.365 [DEBUG] [Thread-128860] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:54:08.365 [DEBUG] [Thread-128860] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T13:54:08.405 [DEBUG] [Thread-128860] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:54:08.405 [DEBUG] [Thread-128860] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:54:08.408 [DEBUG] [Thread-128860] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:54:08.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:54:08.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T13:54:08.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T13:54:08.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T13:54:08.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:54:08.426 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T13:54:08.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:54:08.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:54:08.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T13:54:08.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.495281 -999.00  +25.40  33.70     13   -4.10 1 2 2 1 1   888    0 28.52 39.18 ----- 36.4 33.7 301.2 48.2 29.8 -21.8 29.6 -21.8 29.1 -21.3 29.6 -21.5
2025-12-31T13:54:08.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T13:54:08.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T13:54:08.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.495281
2025-12-31T13:54:08.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T13:54:08.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T13:54:08.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T13:54:08.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T13:54:08.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T13:54:08.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:53:35', tmtdew=36.04, humidity=8.74, cloud=0.0, wind=37.35, temperature=26.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T11:53:12.278', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T13:54:08.428 [DEBUG] [Thread-128860] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:54:08.502 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T13:54:08.513 [DEBUG] [Thread-128863] [transport.py] [_log()] starting thread (client mode): 0xb6bb11b0
2025-12-31T13:54:08.514 [DEBUG] [Thread-128863] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:54:08.528 [DEBUG] [Thread-128863] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T13:54:08.528 [INFO] [Thread-128863] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T13:54:08.536 [DEBUG] [Thread-128863] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:54:08.536 [DEBUG] [Thread-128863] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T13:54:08.536 [DEBUG] [Thread-128863] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:54:08.536 [DEBUG] [Thread-128863] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:54:08.536 [DEBUG] [Thread-128863] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:54:08.536 [DEBUG] [Thread-128863] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:54:08.536 [DEBUG] [Thread-128863] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:54:08.536 [DEBUG] [Thread-128863] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:54:08.536 [DEBUG] [Thread-128863] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:54:08.536 [DEBUG] [Thread-128863] [transport.py] [_log()] client lang: <none>
2025-12-31T13:54:08.536 [DEBUG] [Thread-128863] [transport.py] [_log()] server lang: <none>
2025-12-31T13:54:08.536 [DEBUG] [Thread-128863] [transport.py] [_log()] kex follows: False
2025-12-31T13:54:08.536 [DEBUG] [Thread-128863] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:54:08.536 [DEBUG] [Thread-128863] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:54:08.536 [DEBUG] [Thread-128863] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:54:08.536 [DEBUG] [Thread-128863] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:54:08.536 [DEBUG] [Thread-128863] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:54:08.536 [DEBUG] [Thread-128863] [transport.py] [_log()] Compression: none
2025-12-31T13:54:08.536 [DEBUG] [Thread-128863] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:54:08.594 [DEBUG] [Thread-128863] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:54:08.594 [DEBUG] [Thread-128863] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:54:08.594 [DEBUG] [Thread-128863] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T13:54:08.594 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T13:54:08.594 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:54:08.651 [DEBUG] [Thread-128863] [transport.py] [_log()] userauth is OK
2025-12-31T13:54:08.651 [DEBUG] [Thread-128863] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:54:08.651 [DEBUG] [Thread-128863] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:54:08.651 [DEBUG] [Thread-128863] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T13:54:08.651 [DEBUG] [Thread-128863] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:54:08.664 [INFO] [Thread-128863] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:54:08.665 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T13:54:08.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:54:09.501 [DEBUG] [Thread-128863] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:54:09.501 [DEBUG] [Thread-128863] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:54:09.549 [DEBUG] [Thread-128863] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:54:09.549 [DEBUG] [Thread-128863] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:54:09.559 [DEBUG] [Thread-128863] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:54:09.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:54:09.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T13:54:09.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T13:54:09.586 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:54:09.587 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:54:09.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:54:09.595 [DEBUG] [Thread-128863] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:54:10.780 [DEBUG] [Thread-128865 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:54:16.746 [DEBUG] [Thread-128866 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:54:25.835 [DEBUG] [Thread-128867 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:54:39.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T13:54:39.597 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T13:54:39.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T13:54:40.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 54, 7), 36.49, 8.44, 0.0, 40.3, 26.15, 0, 0, 0, 2, 0, 0),)
2025-12-31T13:54:40.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:54:07
2025-12-31T13:54:40.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T13:54:40.680 [DEBUG] [Thread-128868] [transport.py] [_log()] starting thread (client mode): 0xb6bb8d30
2025-12-31T13:54:40.680 [DEBUG] [Thread-128868] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:54:40.691 [DEBUG] [Thread-128868] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T13:54:40.691 [INFO] [Thread-128868] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T13:54:40.694 [DEBUG] [Thread-128868] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:54:40.694 [DEBUG] [Thread-128868] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T13:54:40.694 [DEBUG] [Thread-128868] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:54:40.694 [DEBUG] [Thread-128868] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:54:40.694 [DEBUG] [Thread-128868] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:54:40.694 [DEBUG] [Thread-128868] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:54:40.694 [DEBUG] [Thread-128868] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:54:40.694 [DEBUG] [Thread-128868] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:54:40.694 [DEBUG] [Thread-128868] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:54:40.694 [DEBUG] [Thread-128868] [transport.py] [_log()] client lang: <none>
2025-12-31T13:54:40.694 [DEBUG] [Thread-128868] [transport.py] [_log()] server lang: <none>
2025-12-31T13:54:40.694 [DEBUG] [Thread-128868] [transport.py] [_log()] kex follows: False
2025-12-31T13:54:40.694 [DEBUG] [Thread-128868] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:54:40.694 [DEBUG] [Thread-128868] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:54:40.694 [DEBUG] [Thread-128868] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:54:40.694 [DEBUG] [Thread-128868] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:54:40.694 [DEBUG] [Thread-128868] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:54:40.694 [DEBUG] [Thread-128868] [transport.py] [_log()] Compression: none
2025-12-31T13:54:40.694 [DEBUG] [Thread-128868] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:54:40.710 [DEBUG] [Thread-128868] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:54:40.711 [DEBUG] [Thread-128868] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:54:40.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T13:54:40.711 [DEBUG] [Thread-128868] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T13:54:40.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:54:40.711 [DEBUG] [Thread-128868] [transport.py] [_log()] userauth is OK
2025-12-31T13:54:40.711 [DEBUG] [Thread-128868] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:54:40.711 [DEBUG] [Thread-128868] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:54:40.711 [DEBUG] [Thread-128868] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T13:54:40.711 [DEBUG] [Thread-128868] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:54:40.721 [INFO] [Thread-128868] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:54:40.721 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:54:40.868 [DEBUG] [Thread-128870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:54:41.481 [DEBUG] [Thread-128868] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:54:41.481 [DEBUG] [Thread-128868] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:54:41.481 [DEBUG] [Thread-128868] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T13:54:41.522 [DEBUG] [Thread-128868] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:54:41.523 [DEBUG] [Thread-128868] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:54:41.525 [DEBUG] [Thread-128868] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:54:41.538 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:54:41.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T13:54:41.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T13:54:41.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T13:54:41.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:54:41.543 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T13:54:41.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:54:41.543 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:54:41.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T13:54:41.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.495628 -999.00  +25.20  36.76     13   -4.30 1 2 2 1 1   888    0 29.71 50.13 ----- 32.2 36.8 297.2 46.2 29.6 -22.2 29.4 -21.8 28.8 -21.0 29.3 -21.7
2025-12-31T13:54:41.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T13:54:41.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T13:54:41.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.495628
2025-12-31T13:54:41.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T13:54:41.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T13:54:41.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T13:54:41.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T13:54:41.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T13:54:41.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:54:07', tmtdew=36.49, humidity=8.44, cloud=0.0, wind=40.3, temperature=26.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T11:53:42.259', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T13:54:41.544 [DEBUG] [Thread-128868] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:54:41.619 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T13:54:41.630 [DEBUG] [Thread-128872] [transport.py] [_log()] starting thread (client mode): 0xb6bb81c0
2025-12-31T13:54:41.630 [DEBUG] [Thread-128872] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:54:41.652 [DEBUG] [Thread-128872] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T13:54:41.652 [INFO] [Thread-128872] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T13:54:41.660 [DEBUG] [Thread-128872] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:54:41.660 [DEBUG] [Thread-128872] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T13:54:41.660 [DEBUG] [Thread-128872] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:54:41.660 [DEBUG] [Thread-128872] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:54:41.660 [DEBUG] [Thread-128872] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:54:41.660 [DEBUG] [Thread-128872] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:54:41.660 [DEBUG] [Thread-128872] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:54:41.660 [DEBUG] [Thread-128872] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:54:41.660 [DEBUG] [Thread-128872] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:54:41.660 [DEBUG] [Thread-128872] [transport.py] [_log()] client lang: <none>
2025-12-31T13:54:41.660 [DEBUG] [Thread-128872] [transport.py] [_log()] server lang: <none>
2025-12-31T13:54:41.660 [DEBUG] [Thread-128872] [transport.py] [_log()] kex follows: False
2025-12-31T13:54:41.660 [DEBUG] [Thread-128872] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:54:41.660 [DEBUG] [Thread-128872] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:54:41.660 [DEBUG] [Thread-128872] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:54:41.660 [DEBUG] [Thread-128872] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:54:41.660 [DEBUG] [Thread-128872] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:54:41.660 [DEBUG] [Thread-128872] [transport.py] [_log()] Compression: none
2025-12-31T13:54:41.660 [DEBUG] [Thread-128872] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:54:41.717 [DEBUG] [Thread-128872] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:54:41.718 [DEBUG] [Thread-128872] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:54:41.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T13:54:41.718 [DEBUG] [Thread-128872] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T13:54:41.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:54:41.775 [DEBUG] [Thread-128872] [transport.py] [_log()] userauth is OK
2025-12-31T13:54:41.775 [DEBUG] [Thread-128872] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:54:41.775 [DEBUG] [Thread-128872] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:54:41.775 [DEBUG] [Thread-128872] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T13:54:41.775 [DEBUG] [Thread-128872] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:54:41.789 [INFO] [Thread-128872] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:54:41.790 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T13:54:41.790 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:54:42.619 [DEBUG] [Thread-128872] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:54:42.619 [DEBUG] [Thread-128872] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:54:42.666 [DEBUG] [Thread-128872] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:54:42.666 [DEBUG] [Thread-128872] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:54:42.675 [DEBUG] [Thread-128872] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:54:42.683 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:54:42.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T13:54:42.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T13:54:42.699 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:54:42.699 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:54:42.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:54:42.707 [DEBUG] [Thread-128872] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:54:54.447 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:54:54.448 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:54:55.896 [DEBUG] [Thread-128874 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:55:10.944 [DEBUG] [Thread-128875 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:55:12.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T13:55:12.699 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T13:55:12.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T13:55:13.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 54, 39), 36.59, 7.97, 0.0, 39.1, 26.16, 0, 0, 0, 2, 0, 0),)
2025-12-31T13:55:13.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:54:39
2025-12-31T13:55:13.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T13:55:13.734 [DEBUG] [Thread-128876] [transport.py] [_log()] starting thread (client mode): 0xb955b640
2025-12-31T13:55:13.734 [DEBUG] [Thread-128876] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:55:13.754 [DEBUG] [Thread-128876] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T13:55:13.754 [INFO] [Thread-128876] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T13:55:13.757 [DEBUG] [Thread-128876] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:55:13.757 [DEBUG] [Thread-128876] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T13:55:13.757 [DEBUG] [Thread-128876] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:55:13.757 [DEBUG] [Thread-128876] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:55:13.758 [DEBUG] [Thread-128876] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:55:13.758 [DEBUG] [Thread-128876] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:55:13.758 [DEBUG] [Thread-128876] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:55:13.758 [DEBUG] [Thread-128876] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:55:13.758 [DEBUG] [Thread-128876] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:55:13.758 [DEBUG] [Thread-128876] [transport.py] [_log()] client lang: <none>
2025-12-31T13:55:13.758 [DEBUG] [Thread-128876] [transport.py] [_log()] server lang: <none>
2025-12-31T13:55:13.758 [DEBUG] [Thread-128876] [transport.py] [_log()] kex follows: False
2025-12-31T13:55:13.758 [DEBUG] [Thread-128876] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:55:13.758 [DEBUG] [Thread-128876] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:55:13.758 [DEBUG] [Thread-128876] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:55:13.758 [DEBUG] [Thread-128876] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:55:13.758 [DEBUG] [Thread-128876] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:55:13.758 [DEBUG] [Thread-128876] [transport.py] [_log()] Compression: none
2025-12-31T13:55:13.758 [DEBUG] [Thread-128876] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:55:13.774 [DEBUG] [Thread-128876] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:55:13.775 [DEBUG] [Thread-128876] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:55:13.775 [DEBUG] [Thread-128876] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T13:55:13.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T13:55:13.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:55:13.777 [DEBUG] [Thread-128876] [transport.py] [_log()] userauth is OK
2025-12-31T13:55:13.778 [DEBUG] [Thread-128876] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:55:13.778 [DEBUG] [Thread-128876] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:55:13.778 [DEBUG] [Thread-128876] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T13:55:13.778 [DEBUG] [Thread-128876] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:55:13.802 [INFO] [Thread-128876] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:55:13.803 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:55:15.910 [DEBUG] [Thread-128876] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:55:15.910 [DEBUG] [Thread-128876] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:55:15.911 [DEBUG] [Thread-128876] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T13:55:15.952 [DEBUG] [Thread-128876] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:55:15.952 [DEBUG] [Thread-128876] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:55:15.955 [DEBUG] [Thread-128876] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:55:16.012 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:55:16.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T13:55:16.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T13:55:16.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T13:55:16.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:55:16.022 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T13:55:16.023 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:55:16.023 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:55:16.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T13:55:16.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.496323 -999.00  +24.90  34.85     13   -4.50 1 2 2 1 1   888    0 30.14 64.46 ----- 31.1 34.9 300.6 42.7 29.2 -21.5 29.1 -21.0 28.6 -21.9 28.9 -21.7
2025-12-31T13:55:16.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T13:55:16.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T13:55:16.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.496323
2025-12-31T13:55:16.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T13:55:16.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T13:55:16.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T13:55:16.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T13:55:16.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T13:55:16.025 [DEBUG] [Thread-128876] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:55:16.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:54:39', tmtdew=36.59, humidity=7.97, cloud=0.0, wind=39.1, temperature=26.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T11:54:42.307', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T13:55:16.111 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T13:55:16.124 [DEBUG] [Thread-128879] [transport.py] [_log()] starting thread (client mode): 0xb955a710
2025-12-31T13:55:16.124 [DEBUG] [Thread-128879] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:55:16.138 [DEBUG] [Thread-128879] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T13:55:16.139 [INFO] [Thread-128879] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T13:55:16.146 [DEBUG] [Thread-128879] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:55:16.146 [DEBUG] [Thread-128879] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T13:55:16.146 [DEBUG] [Thread-128879] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:55:16.147 [DEBUG] [Thread-128879] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:55:16.147 [DEBUG] [Thread-128879] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:55:16.147 [DEBUG] [Thread-128879] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:55:16.147 [DEBUG] [Thread-128879] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:55:16.147 [DEBUG] [Thread-128879] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:55:16.147 [DEBUG] [Thread-128879] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:55:16.147 [DEBUG] [Thread-128879] [transport.py] [_log()] client lang: <none>
2025-12-31T13:55:16.147 [DEBUG] [Thread-128879] [transport.py] [_log()] server lang: <none>
2025-12-31T13:55:16.147 [DEBUG] [Thread-128879] [transport.py] [_log()] kex follows: False
2025-12-31T13:55:16.147 [DEBUG] [Thread-128879] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:55:16.147 [DEBUG] [Thread-128879] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:55:16.147 [DEBUG] [Thread-128879] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:55:16.147 [DEBUG] [Thread-128879] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:55:16.147 [DEBUG] [Thread-128879] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:55:16.147 [DEBUG] [Thread-128879] [transport.py] [_log()] Compression: none
2025-12-31T13:55:16.147 [DEBUG] [Thread-128879] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:55:16.203 [DEBUG] [Thread-128879] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:55:16.204 [DEBUG] [Thread-128879] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:55:16.205 [DEBUG] [Thread-128879] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T13:55:16.205 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T13:55:16.206 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:55:16.260 [DEBUG] [Thread-128879] [transport.py] [_log()] userauth is OK
2025-12-31T13:55:16.260 [DEBUG] [Thread-128879] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:55:16.260 [DEBUG] [Thread-128879] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:55:16.260 [DEBUG] [Thread-128879] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T13:55:16.260 [DEBUG] [Thread-128879] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:55:16.278 [INFO] [Thread-128879] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:55:16.279 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T13:55:16.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:55:16.800 [DEBUG] [Thread-128881 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:55:17.121 [DEBUG] [Thread-128879] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:55:17.122 [DEBUG] [Thread-128879] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:55:17.169 [DEBUG] [Thread-128879] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:55:17.169 [DEBUG] [Thread-128879] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:55:17.178 [DEBUG] [Thread-128879] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:55:17.186 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:55:17.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T13:55:17.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T13:55:17.203 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:55:17.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:55:17.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:55:17.212 [DEBUG] [Thread-128879] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:55:25.975 [DEBUG] [Thread-128882 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:55:41.035 [DEBUG] [Thread-128883 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:55:47.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T13:55:47.234 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T13:55:47.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T13:55:47.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 55, 43), 35.71, 8.67, 0.0, 37.67, 25.3, 0, 0, 0, 2, 0, 0),)
2025-12-31T13:55:47.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:55:43
2025-12-31T13:55:48.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T13:55:48.235 [DEBUG] [Thread-128884] [transport.py] [_log()] starting thread (client mode): 0xb955a920
2025-12-31T13:55:48.236 [DEBUG] [Thread-128884] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:55:48.255 [DEBUG] [Thread-128884] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T13:55:48.255 [INFO] [Thread-128884] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T13:55:48.259 [DEBUG] [Thread-128884] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:55:48.259 [DEBUG] [Thread-128884] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T13:55:48.259 [DEBUG] [Thread-128884] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:55:48.259 [DEBUG] [Thread-128884] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:55:48.259 [DEBUG] [Thread-128884] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:55:48.259 [DEBUG] [Thread-128884] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:55:48.259 [DEBUG] [Thread-128884] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:55:48.259 [DEBUG] [Thread-128884] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:55:48.259 [DEBUG] [Thread-128884] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:55:48.259 [DEBUG] [Thread-128884] [transport.py] [_log()] client lang: <none>
2025-12-31T13:55:48.259 [DEBUG] [Thread-128884] [transport.py] [_log()] server lang: <none>
2025-12-31T13:55:48.259 [DEBUG] [Thread-128884] [transport.py] [_log()] kex follows: False
2025-12-31T13:55:48.259 [DEBUG] [Thread-128884] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:55:48.259 [DEBUG] [Thread-128884] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:55:48.259 [DEBUG] [Thread-128884] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:55:48.259 [DEBUG] [Thread-128884] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:55:48.259 [DEBUG] [Thread-128884] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:55:48.259 [DEBUG] [Thread-128884] [transport.py] [_log()] Compression: none
2025-12-31T13:55:48.259 [DEBUG] [Thread-128884] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:55:48.276 [DEBUG] [Thread-128884] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:55:48.277 [DEBUG] [Thread-128884] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:55:48.277 [DEBUG] [Thread-128884] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T13:55:48.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T13:55:48.278 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:55:48.279 [DEBUG] [Thread-128884] [transport.py] [_log()] userauth is OK
2025-12-31T13:55:48.279 [DEBUG] [Thread-128884] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:55:48.279 [DEBUG] [Thread-128884] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:55:48.279 [DEBUG] [Thread-128884] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T13:55:48.279 [DEBUG] [Thread-128884] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:55:48.303 [INFO] [Thread-128884] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:55:48.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:55:48.923 [DEBUG] [Thread-128884] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:55:48.923 [DEBUG] [Thread-128884] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:55:48.924 [DEBUG] [Thread-128884] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T13:55:48.964 [DEBUG] [Thread-128884] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:55:48.964 [DEBUG] [Thread-128884] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:55:48.968 [DEBUG] [Thread-128884] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:55:48.979 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:55:48.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T13:55:48.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T13:55:48.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T13:55:48.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:55:48.993 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T13:55:48.993 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:55:48.993 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:55:48.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T13:55:48.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.496670 -999.00  +24.90  33.72     14   -4.20 1 2 2 1 1   888    0 29.54 66.24 ----- 35.7 33.7 290.0 40.1 29.1 -22.3 28.9 -21.2 28.4 -22.6 28.9 -21.6
2025-12-31T13:55:48.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T13:55:48.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T13:55:48.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.496670
2025-12-31T13:55:48.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T13:55:48.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T13:55:48.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T13:55:48.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T13:55:48.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T13:55:48.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:55:43', tmtdew=35.71, humidity=8.67, cloud=0.0, wind=37.67, temperature=25.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T11:55:12.288', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T13:55:48.997 [DEBUG] [Thread-128884] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:55:49.079 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T13:55:49.090 [DEBUG] [Thread-128887] [transport.py] [_log()] starting thread (client mode): 0xb6bb9510
2025-12-31T13:55:49.090 [DEBUG] [Thread-128887] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:55:49.105 [DEBUG] [Thread-128887] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T13:55:49.105 [INFO] [Thread-128887] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T13:55:49.113 [DEBUG] [Thread-128887] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:55:49.113 [DEBUG] [Thread-128887] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T13:55:49.113 [DEBUG] [Thread-128887] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:55:49.113 [DEBUG] [Thread-128887] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:55:49.113 [DEBUG] [Thread-128887] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:55:49.113 [DEBUG] [Thread-128887] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:55:49.113 [DEBUG] [Thread-128887] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:55:49.113 [DEBUG] [Thread-128887] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:55:49.113 [DEBUG] [Thread-128887] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:55:49.113 [DEBUG] [Thread-128887] [transport.py] [_log()] client lang: <none>
2025-12-31T13:55:49.113 [DEBUG] [Thread-128887] [transport.py] [_log()] server lang: <none>
2025-12-31T13:55:49.113 [DEBUG] [Thread-128887] [transport.py] [_log()] kex follows: False
2025-12-31T13:55:49.113 [DEBUG] [Thread-128887] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:55:49.113 [DEBUG] [Thread-128887] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:55:49.113 [DEBUG] [Thread-128887] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:55:49.113 [DEBUG] [Thread-128887] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:55:49.114 [DEBUG] [Thread-128887] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:55:49.114 [DEBUG] [Thread-128887] [transport.py] [_log()] Compression: none
2025-12-31T13:55:49.114 [DEBUG] [Thread-128887] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:55:49.172 [DEBUG] [Thread-128887] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:55:49.172 [DEBUG] [Thread-128887] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:55:49.173 [DEBUG] [Thread-128887] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T13:55:49.173 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T13:55:49.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:55:49.232 [DEBUG] [Thread-128887] [transport.py] [_log()] userauth is OK
2025-12-31T13:55:49.232 [DEBUG] [Thread-128887] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:55:49.232 [DEBUG] [Thread-128887] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:55:49.232 [DEBUG] [Thread-128887] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T13:55:49.232 [DEBUG] [Thread-128887] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:55:49.251 [INFO] [Thread-128887] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:55:49.251 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T13:55:49.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:55:50.129 [DEBUG] [Thread-128887] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:55:50.129 [DEBUG] [Thread-128887] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:55:50.177 [DEBUG] [Thread-128887] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:55:50.177 [DEBUG] [Thread-128887] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:55:50.186 [DEBUG] [Thread-128887] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:55:50.196 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:55:50.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T13:55:50.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T13:55:50.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:55:50.213 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:55:50.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:55:50.221 [DEBUG] [Thread-128887] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:55:54.602 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:55:54.603 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:55:56.068 [DEBUG] [Thread-128889 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:56:11.107 [DEBUG] [Thread-128890 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:56:16.847 [DEBUG] [Thread-128891 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:56:20.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T13:56:20.240 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T13:56:20.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T13:56:20.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 56, 15), 35.79, 8.67, 0.0, 37.9, 25.6, 0, 0, 0, 2, 0, 0),)
2025-12-31T13:56:20.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:56:15
2025-12-31T13:56:21.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T13:56:21.241 [DEBUG] [Thread-128892] [transport.py] [_log()] starting thread (client mode): 0xb6bb06a0
2025-12-31T13:56:21.241 [DEBUG] [Thread-128892] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:56:21.261 [DEBUG] [Thread-128892] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T13:56:21.261 [INFO] [Thread-128892] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T13:56:21.264 [DEBUG] [Thread-128892] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:56:21.264 [DEBUG] [Thread-128892] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T13:56:21.264 [DEBUG] [Thread-128892] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:56:21.264 [DEBUG] [Thread-128892] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:56:21.264 [DEBUG] [Thread-128892] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:56:21.264 [DEBUG] [Thread-128892] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:56:21.264 [DEBUG] [Thread-128892] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:56:21.264 [DEBUG] [Thread-128892] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:56:21.264 [DEBUG] [Thread-128892] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:56:21.264 [DEBUG] [Thread-128892] [transport.py] [_log()] client lang: <none>
2025-12-31T13:56:21.264 [DEBUG] [Thread-128892] [transport.py] [_log()] server lang: <none>
2025-12-31T13:56:21.264 [DEBUG] [Thread-128892] [transport.py] [_log()] kex follows: False
2025-12-31T13:56:21.264 [DEBUG] [Thread-128892] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:56:21.264 [DEBUG] [Thread-128892] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:56:21.264 [DEBUG] [Thread-128892] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:56:21.264 [DEBUG] [Thread-128892] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:56:21.264 [DEBUG] [Thread-128892] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:56:21.265 [DEBUG] [Thread-128892] [transport.py] [_log()] Compression: none
2025-12-31T13:56:21.265 [DEBUG] [Thread-128892] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:56:21.283 [DEBUG] [Thread-128892] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:56:21.283 [DEBUG] [Thread-128892] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:56:21.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T13:56:21.285 [DEBUG] [Thread-128892] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T13:56:21.286 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:56:21.287 [DEBUG] [Thread-128892] [transport.py] [_log()] userauth is OK
2025-12-31T13:56:21.287 [DEBUG] [Thread-128892] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:56:21.287 [DEBUG] [Thread-128892] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:56:21.287 [DEBUG] [Thread-128892] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T13:56:21.287 [DEBUG] [Thread-128892] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:56:21.302 [INFO] [Thread-128892] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:56:21.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:56:22.049 [DEBUG] [Thread-128892] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:56:22.049 [DEBUG] [Thread-128892] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:56:22.050 [DEBUG] [Thread-128892] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T13:56:22.090 [DEBUG] [Thread-128892] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:56:22.090 [DEBUG] [Thread-128892] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:56:22.092 [DEBUG] [Thread-128892] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:56:22.102 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:56:22.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T13:56:22.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T13:56:22.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T13:56:22.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:56:22.111 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T13:56:22.111 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:56:22.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:56:22.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T13:56:22.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.497017 -999.00  +25.10  35.30     13   -4.30 1 2 2 1 1   888    0 30.21 69.24 ----- 33.7 35.3 295.0 40.4 29.1 -20.8 28.9 -20.4 28.4 -22.1 28.8 -21.2
2025-12-31T13:56:22.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T13:56:22.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T13:56:22.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.497017
2025-12-31T13:56:22.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T13:56:22.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T13:56:22.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T13:56:22.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T13:56:22.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T13:56:22.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:56:15', tmtdew=35.79, humidity=8.67, cloud=0.0, wind=37.9, temperature=25.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T11:55:42.269', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T13:56:22.114 [DEBUG] [Thread-128892] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:56:22.197 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T13:56:22.208 [DEBUG] [Thread-128895] [transport.py] [_log()] starting thread (client mode): 0xb6bb99f0
2025-12-31T13:56:22.209 [DEBUG] [Thread-128895] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:56:22.224 [DEBUG] [Thread-128895] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T13:56:22.224 [INFO] [Thread-128895] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T13:56:22.231 [DEBUG] [Thread-128895] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:56:22.232 [DEBUG] [Thread-128895] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T13:56:22.232 [DEBUG] [Thread-128895] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:56:22.232 [DEBUG] [Thread-128895] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:56:22.232 [DEBUG] [Thread-128895] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:56:22.232 [DEBUG] [Thread-128895] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:56:22.232 [DEBUG] [Thread-128895] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:56:22.232 [DEBUG] [Thread-128895] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:56:22.232 [DEBUG] [Thread-128895] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:56:22.232 [DEBUG] [Thread-128895] [transport.py] [_log()] client lang: <none>
2025-12-31T13:56:22.232 [DEBUG] [Thread-128895] [transport.py] [_log()] server lang: <none>
2025-12-31T13:56:22.232 [DEBUG] [Thread-128895] [transport.py] [_log()] kex follows: False
2025-12-31T13:56:22.232 [DEBUG] [Thread-128895] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:56:22.232 [DEBUG] [Thread-128895] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:56:22.232 [DEBUG] [Thread-128895] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:56:22.232 [DEBUG] [Thread-128895] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:56:22.232 [DEBUG] [Thread-128895] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:56:22.232 [DEBUG] [Thread-128895] [transport.py] [_log()] Compression: none
2025-12-31T13:56:22.232 [DEBUG] [Thread-128895] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:56:22.291 [DEBUG] [Thread-128895] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:56:22.291 [DEBUG] [Thread-128895] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:56:22.292 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T13:56:22.293 [DEBUG] [Thread-128895] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T13:56:22.294 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:56:22.347 [DEBUG] [Thread-128895] [transport.py] [_log()] userauth is OK
2025-12-31T13:56:22.348 [DEBUG] [Thread-128895] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:56:22.348 [DEBUG] [Thread-128895] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:56:22.348 [DEBUG] [Thread-128895] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T13:56:22.349 [DEBUG] [Thread-128895] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:56:22.367 [INFO] [Thread-128895] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:56:22.367 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T13:56:22.368 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:56:23.202 [DEBUG] [Thread-128895] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:56:23.203 [DEBUG] [Thread-128895] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:56:23.250 [DEBUG] [Thread-128895] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:56:23.250 [DEBUG] [Thread-128895] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:56:23.259 [DEBUG] [Thread-128895] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:56:23.268 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:56:23.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-12-31T13:56:23.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T13:56:23.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:56:23.288 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:56:23.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:56:23.296 [DEBUG] [Thread-128895] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:56:26.142 [DEBUG] [Thread-128897 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:56:41.192 [DEBUG] [Thread-128898 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:56:53.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T13:56:53.319 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T13:56:53.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T13:56:54.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 56, 47), 35.97, 8.17, 0.0, 29.03, 25.4, 0, 0, 0, 2, 0, 0),)
2025-12-31T13:56:54.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:56:47
2025-12-31T13:56:54.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T13:56:54.320 [DEBUG] [Thread-128899] [transport.py] [_log()] starting thread (client mode): 0xb6bbb9a0
2025-12-31T13:56:54.320 [DEBUG] [Thread-128899] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:56:54.340 [DEBUG] [Thread-128899] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T13:56:54.340 [INFO] [Thread-128899] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T13:56:54.341 [DEBUG] [Thread-128899] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:56:54.341 [DEBUG] [Thread-128899] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T13:56:54.341 [DEBUG] [Thread-128899] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:56:54.342 [DEBUG] [Thread-128899] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:56:54.342 [DEBUG] [Thread-128899] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:56:54.342 [DEBUG] [Thread-128899] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:56:54.342 [DEBUG] [Thread-128899] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:56:54.342 [DEBUG] [Thread-128899] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:56:54.342 [DEBUG] [Thread-128899] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:56:54.342 [DEBUG] [Thread-128899] [transport.py] [_log()] client lang: <none>
2025-12-31T13:56:54.342 [DEBUG] [Thread-128899] [transport.py] [_log()] server lang: <none>
2025-12-31T13:56:54.342 [DEBUG] [Thread-128899] [transport.py] [_log()] kex follows: False
2025-12-31T13:56:54.342 [DEBUG] [Thread-128899] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:56:54.342 [DEBUG] [Thread-128899] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:56:54.342 [DEBUG] [Thread-128899] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:56:54.342 [DEBUG] [Thread-128899] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:56:54.342 [DEBUG] [Thread-128899] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:56:54.342 [DEBUG] [Thread-128899] [transport.py] [_log()] Compression: none
2025-12-31T13:56:54.342 [DEBUG] [Thread-128899] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:56:54.350 [DEBUG] [Thread-128899] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:56:54.350 [DEBUG] [Thread-128899] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:56:54.351 [DEBUG] [Thread-128899] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T13:56:54.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T13:56:54.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:56:54.352 [DEBUG] [Thread-128899] [transport.py] [_log()] userauth is OK
2025-12-31T13:56:54.352 [DEBUG] [Thread-128899] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:56:54.352 [DEBUG] [Thread-128899] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:56:54.352 [DEBUG] [Thread-128899] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T13:56:54.352 [DEBUG] [Thread-128899] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:56:54.365 [INFO] [Thread-128899] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:56:54.366 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:56:54.743 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:56:54.744 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:56:54.954 [DEBUG] [Thread-128899] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:56:54.955 [DEBUG] [Thread-128899] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:56:54.955 [DEBUG] [Thread-128899] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T13:56:54.995 [DEBUG] [Thread-128899] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:56:54.995 [DEBUG] [Thread-128899] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:56:54.999 [DEBUG] [Thread-128899] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:56:55.011 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:56:55.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T13:56:55.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T13:56:55.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T13:56:55.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:56:55.024 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T13:56:55.024 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:56:55.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:56:55.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T13:56:55.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.497364 -999.00  +24.80  35.37     13   -4.80 1 2 2 1 1   888    0 30.00 64.39 ----- 29.8 35.4 289.0 39.4 28.9 -21.8 28.8 -21.4 28.3 -23.7 28.6 -21.6
2025-12-31T13:56:55.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T13:56:55.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T13:56:55.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.497364
2025-12-31T13:56:55.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T13:56:55.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T13:56:55.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T13:56:55.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T13:56:55.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T13:56:55.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:56:47', tmtdew=35.97, humidity=8.17, cloud=0.0, wind=29.03, temperature=25.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T11:56:12.250', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T13:56:55.027 [DEBUG] [Thread-128899] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:56:55.113 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T13:56:55.125 [DEBUG] [Thread-128902] [transport.py] [_log()] starting thread (client mode): 0xb6bb0640
2025-12-31T13:56:55.125 [DEBUG] [Thread-128902] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:56:55.141 [DEBUG] [Thread-128902] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T13:56:55.141 [INFO] [Thread-128902] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T13:56:55.148 [DEBUG] [Thread-128902] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:56:55.148 [DEBUG] [Thread-128902] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T13:56:55.148 [DEBUG] [Thread-128902] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:56:55.148 [DEBUG] [Thread-128902] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:56:55.148 [DEBUG] [Thread-128902] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:56:55.148 [DEBUG] [Thread-128902] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:56:55.148 [DEBUG] [Thread-128902] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:56:55.148 [DEBUG] [Thread-128902] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:56:55.148 [DEBUG] [Thread-128902] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:56:55.148 [DEBUG] [Thread-128902] [transport.py] [_log()] client lang: <none>
2025-12-31T13:56:55.148 [DEBUG] [Thread-128902] [transport.py] [_log()] server lang: <none>
2025-12-31T13:56:55.148 [DEBUG] [Thread-128902] [transport.py] [_log()] kex follows: False
2025-12-31T13:56:55.148 [DEBUG] [Thread-128902] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:56:55.148 [DEBUG] [Thread-128902] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:56:55.149 [DEBUG] [Thread-128902] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:56:55.149 [DEBUG] [Thread-128902] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:56:55.149 [DEBUG] [Thread-128902] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:56:55.149 [DEBUG] [Thread-128902] [transport.py] [_log()] Compression: none
2025-12-31T13:56:55.149 [DEBUG] [Thread-128902] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:56:55.205 [DEBUG] [Thread-128902] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:56:55.206 [DEBUG] [Thread-128902] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:56:55.206 [DEBUG] [Thread-128902] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T13:56:55.206 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T13:56:55.206 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:56:55.263 [DEBUG] [Thread-128902] [transport.py] [_log()] userauth is OK
2025-12-31T13:56:55.263 [DEBUG] [Thread-128902] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:56:55.263 [DEBUG] [Thread-128902] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:56:55.263 [DEBUG] [Thread-128902] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T13:56:55.263 [DEBUG] [Thread-128902] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:56:55.284 [INFO] [Thread-128902] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:56:55.285 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T13:56:55.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:56:56.131 [DEBUG] [Thread-128902] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:56:56.132 [DEBUG] [Thread-128902] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:56:56.180 [DEBUG] [Thread-128902] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:56:56.180 [DEBUG] [Thread-128902] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:56:56.190 [DEBUG] [Thread-128902] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:56:56.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:56:56.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T13:56:56.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T13:56:56.217 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:56:56.218 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:56:56.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:56:56.223 [DEBUG] [Thread-128904 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:56:56.226 [DEBUG] [Thread-128902] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:57:11.285 [DEBUG] [Thread-128905 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:57:16.894 [DEBUG] [Thread-128906 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:57:26.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T13:57:26.249 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T13:57:26.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T13:57:26.317 [DEBUG] [Thread-128907 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:57:26.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 57, 19), 35.76, 8.32, 0.0, 26.8, 25.43, 0, 0, 0, 2, 0, 0),)
2025-12-31T13:57:26.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:57:19
2025-12-31T13:57:27.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T13:57:27.232 [DEBUG] [Thread-128908] [transport.py] [_log()] starting thread (client mode): 0xb955b1f0
2025-12-31T13:57:27.232 [DEBUG] [Thread-128908] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:57:27.253 [DEBUG] [Thread-128908] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T13:57:27.253 [INFO] [Thread-128908] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T13:57:27.256 [DEBUG] [Thread-128908] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:57:27.256 [DEBUG] [Thread-128908] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T13:57:27.256 [DEBUG] [Thread-128908] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:57:27.256 [DEBUG] [Thread-128908] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:57:27.256 [DEBUG] [Thread-128908] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:57:27.256 [DEBUG] [Thread-128908] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:57:27.256 [DEBUG] [Thread-128908] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:57:27.256 [DEBUG] [Thread-128908] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:57:27.256 [DEBUG] [Thread-128908] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:57:27.256 [DEBUG] [Thread-128908] [transport.py] [_log()] client lang: <none>
2025-12-31T13:57:27.256 [DEBUG] [Thread-128908] [transport.py] [_log()] server lang: <none>
2025-12-31T13:57:27.256 [DEBUG] [Thread-128908] [transport.py] [_log()] kex follows: False
2025-12-31T13:57:27.256 [DEBUG] [Thread-128908] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:57:27.256 [DEBUG] [Thread-128908] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:57:27.256 [DEBUG] [Thread-128908] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:57:27.256 [DEBUG] [Thread-128908] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:57:27.256 [DEBUG] [Thread-128908] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:57:27.257 [DEBUG] [Thread-128908] [transport.py] [_log()] Compression: none
2025-12-31T13:57:27.257 [DEBUG] [Thread-128908] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:57:27.264 [DEBUG] [Thread-128908] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:57:27.265 [DEBUG] [Thread-128908] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:57:27.265 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T13:57:27.265 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:57:27.265 [DEBUG] [Thread-128908] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T13:57:27.266 [DEBUG] [Thread-128908] [transport.py] [_log()] userauth is OK
2025-12-31T13:57:27.266 [DEBUG] [Thread-128908] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:57:27.266 [DEBUG] [Thread-128908] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:57:27.266 [DEBUG] [Thread-128908] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T13:57:27.266 [DEBUG] [Thread-128908] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:57:27.285 [INFO] [Thread-128908] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:57:27.286 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:57:28.014 [DEBUG] [Thread-128908] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:57:28.014 [DEBUG] [Thread-128908] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:57:28.014 [DEBUG] [Thread-128908] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T13:57:28.055 [DEBUG] [Thread-128908] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:57:28.055 [DEBUG] [Thread-128908] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:57:28.058 [DEBUG] [Thread-128908] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:57:28.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:57:28.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T13:57:28.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T13:57:28.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T13:57:28.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:57:28.073 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T13:57:28.073 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:57:28.073 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:57:28.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T13:57:28.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.497712 -999.00  +24.60  32.95     14   -4.20 1 2 2 1 1   888    0 29.82 68.80 ----- 30.8 33.0 292.2 38.5 28.9 -21.5 28.8 -21.0 28.1 -21.7 28.6 -21.4
2025-12-31T13:57:28.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T13:57:28.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T13:57:28.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.497712
2025-12-31T13:57:28.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T13:57:28.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T13:57:28.075 [DEBUG] [Thread-128908] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:57:28.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T13:57:28.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T13:57:28.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T13:57:28.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:57:19', tmtdew=35.76, humidity=8.32, cloud=0.0, wind=26.8, temperature=25.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T11:56:42.317', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T13:57:28.158 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T13:57:28.169 [DEBUG] [Thread-128911] [transport.py] [_log()] starting thread (client mode): 0xb6bbbe50
2025-12-31T13:57:28.169 [DEBUG] [Thread-128911] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:57:28.190 [DEBUG] [Thread-128911] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T13:57:28.190 [INFO] [Thread-128911] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T13:57:28.198 [DEBUG] [Thread-128911] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:57:28.199 [DEBUG] [Thread-128911] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T13:57:28.199 [DEBUG] [Thread-128911] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:57:28.199 [DEBUG] [Thread-128911] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:57:28.199 [DEBUG] [Thread-128911] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:57:28.199 [DEBUG] [Thread-128911] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:57:28.199 [DEBUG] [Thread-128911] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:57:28.199 [DEBUG] [Thread-128911] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:57:28.199 [DEBUG] [Thread-128911] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:57:28.199 [DEBUG] [Thread-128911] [transport.py] [_log()] client lang: <none>
2025-12-31T13:57:28.200 [DEBUG] [Thread-128911] [transport.py] [_log()] server lang: <none>
2025-12-31T13:57:28.200 [DEBUG] [Thread-128911] [transport.py] [_log()] kex follows: False
2025-12-31T13:57:28.200 [DEBUG] [Thread-128911] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:57:28.200 [DEBUG] [Thread-128911] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:57:28.200 [DEBUG] [Thread-128911] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:57:28.200 [DEBUG] [Thread-128911] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:57:28.200 [DEBUG] [Thread-128911] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:57:28.200 [DEBUG] [Thread-128911] [transport.py] [_log()] Compression: none
2025-12-31T13:57:28.200 [DEBUG] [Thread-128911] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:57:28.254 [DEBUG] [Thread-128911] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:57:28.255 [DEBUG] [Thread-128911] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:57:28.255 [DEBUG] [Thread-128911] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T13:57:28.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T13:57:28.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:57:28.311 [DEBUG] [Thread-128911] [transport.py] [_log()] userauth is OK
2025-12-31T13:57:28.311 [DEBUG] [Thread-128911] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:57:28.311 [DEBUG] [Thread-128911] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:57:28.311 [DEBUG] [Thread-128911] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T13:57:28.311 [DEBUG] [Thread-128911] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:57:28.333 [INFO] [Thread-128911] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:57:28.334 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T13:57:28.334 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:57:29.245 [DEBUG] [Thread-128911] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:57:29.246 [DEBUG] [Thread-128911] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:57:29.294 [DEBUG] [Thread-128911] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:57:29.294 [DEBUG] [Thread-128911] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:57:29.303 [DEBUG] [Thread-128911] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:57:29.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:57:29.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T13:57:29.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T13:57:29.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:57:29.332 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:57:29.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:57:29.340 [DEBUG] [Thread-128911] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:57:41.349 [DEBUG] [Thread-128913 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:57:54.883 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:57:54.884 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:57:56.399 [DEBUG] [Thread-128914 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:57:59.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T13:57:59.363 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T13:57:59.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T13:58:00.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 57, 51), 35.95, 8.62, 0.0, 28.41, 25.45, 0, 0, 0, 2, 0, 0),)
2025-12-31T13:58:00.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:57:51
2025-12-31T13:58:00.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T13:58:00.358 [DEBUG] [Thread-128915] [transport.py] [_log()] starting thread (client mode): 0xb6bbcdf0
2025-12-31T13:58:00.358 [DEBUG] [Thread-128915] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:58:00.378 [DEBUG] [Thread-128915] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T13:58:00.378 [INFO] [Thread-128915] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T13:58:00.381 [DEBUG] [Thread-128915] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:58:00.381 [DEBUG] [Thread-128915] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T13:58:00.382 [DEBUG] [Thread-128915] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:58:00.382 [DEBUG] [Thread-128915] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:58:00.382 [DEBUG] [Thread-128915] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:58:00.382 [DEBUG] [Thread-128915] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:58:00.382 [DEBUG] [Thread-128915] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:58:00.382 [DEBUG] [Thread-128915] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:58:00.382 [DEBUG] [Thread-128915] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:58:00.382 [DEBUG] [Thread-128915] [transport.py] [_log()] client lang: <none>
2025-12-31T13:58:00.382 [DEBUG] [Thread-128915] [transport.py] [_log()] server lang: <none>
2025-12-31T13:58:00.382 [DEBUG] [Thread-128915] [transport.py] [_log()] kex follows: False
2025-12-31T13:58:00.382 [DEBUG] [Thread-128915] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:58:00.382 [DEBUG] [Thread-128915] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:58:00.382 [DEBUG] [Thread-128915] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:58:00.382 [DEBUG] [Thread-128915] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:58:00.382 [DEBUG] [Thread-128915] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:58:00.382 [DEBUG] [Thread-128915] [transport.py] [_log()] Compression: none
2025-12-31T13:58:00.382 [DEBUG] [Thread-128915] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:58:00.398 [DEBUG] [Thread-128915] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:58:00.398 [DEBUG] [Thread-128915] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:58:00.398 [DEBUG] [Thread-128915] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T13:58:00.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T13:58:00.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:58:00.399 [DEBUG] [Thread-128915] [transport.py] [_log()] userauth is OK
2025-12-31T13:58:00.399 [DEBUG] [Thread-128915] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:58:00.399 [DEBUG] [Thread-128915] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:58:00.399 [DEBUG] [Thread-128915] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T13:58:00.399 [DEBUG] [Thread-128915] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:58:00.427 [INFO] [Thread-128915] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:58:00.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:58:01.100 [DEBUG] [Thread-128915] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:58:01.101 [DEBUG] [Thread-128915] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:58:01.101 [DEBUG] [Thread-128915] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T13:58:01.142 [DEBUG] [Thread-128915] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:58:01.142 [DEBUG] [Thread-128915] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:58:01.146 [DEBUG] [Thread-128915] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:58:01.158 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:58:01.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T13:58:01.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T13:58:01.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T13:58:01.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:58:01.168 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T13:58:01.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:58:01.169 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:58:01.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T13:58:01.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.498059 -999.00  +24.80  31.02     13   -4.70 1 2 2 1 1   888    0 30.18 65.87 ----- 28.7 31.0 296.2 41.8 28.9 -20.3 28.8 -20.3 28.2 -20.3 28.6 -20.5
2025-12-31T13:58:01.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T13:58:01.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T13:58:01.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.498059
2025-12-31T13:58:01.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T13:58:01.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T13:58:01.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T13:58:01.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T13:58:01.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T13:58:01.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:57:51', tmtdew=35.95, humidity=8.62, cloud=0.0, wind=28.41, temperature=25.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T11:57:12.298', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T13:58:01.171 [DEBUG] [Thread-128915] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:58:01.251 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T13:58:01.263 [DEBUG] [Thread-128918] [transport.py] [_log()] starting thread (client mode): 0xbbfcd870
2025-12-31T13:58:01.263 [DEBUG] [Thread-128918] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:58:01.278 [DEBUG] [Thread-128918] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T13:58:01.278 [INFO] [Thread-128918] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T13:58:01.286 [DEBUG] [Thread-128918] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:58:01.286 [DEBUG] [Thread-128918] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T13:58:01.286 [DEBUG] [Thread-128918] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:58:01.286 [DEBUG] [Thread-128918] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:58:01.286 [DEBUG] [Thread-128918] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:58:01.286 [DEBUG] [Thread-128918] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:58:01.286 [DEBUG] [Thread-128918] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:58:01.286 [DEBUG] [Thread-128918] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:58:01.286 [DEBUG] [Thread-128918] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:58:01.286 [DEBUG] [Thread-128918] [transport.py] [_log()] client lang: <none>
2025-12-31T13:58:01.286 [DEBUG] [Thread-128918] [transport.py] [_log()] server lang: <none>
2025-12-31T13:58:01.287 [DEBUG] [Thread-128918] [transport.py] [_log()] kex follows: False
2025-12-31T13:58:01.287 [DEBUG] [Thread-128918] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:58:01.287 [DEBUG] [Thread-128918] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:58:01.287 [DEBUG] [Thread-128918] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:58:01.287 [DEBUG] [Thread-128918] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:58:01.287 [DEBUG] [Thread-128918] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:58:01.287 [DEBUG] [Thread-128918] [transport.py] [_log()] Compression: none
2025-12-31T13:58:01.287 [DEBUG] [Thread-128918] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:58:01.342 [DEBUG] [Thread-128918] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:58:01.343 [DEBUG] [Thread-128918] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:58:01.343 [DEBUG] [Thread-128918] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T13:58:01.343 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T13:58:01.344 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:58:01.398 [DEBUG] [Thread-128918] [transport.py] [_log()] userauth is OK
2025-12-31T13:58:01.398 [DEBUG] [Thread-128918] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:58:01.399 [DEBUG] [Thread-128918] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:58:01.399 [DEBUG] [Thread-128918] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T13:58:01.399 [DEBUG] [Thread-128918] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:58:01.417 [INFO] [Thread-128918] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:58:01.417 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T13:58:01.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:58:02.331 [DEBUG] [Thread-128918] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:58:02.331 [DEBUG] [Thread-128918] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:58:02.379 [DEBUG] [Thread-128918] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:58:02.379 [DEBUG] [Thread-128918] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:58:02.388 [DEBUG] [Thread-128918] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:58:02.397 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:58:02.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-12-31T13:58:02.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T13:58:02.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:58:02.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:58:02.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:58:02.424 [DEBUG] [Thread-128918] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:58:11.432 [DEBUG] [Thread-128920 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:58:16.962 [DEBUG] [Thread-128921 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:58:26.487 [DEBUG] [Thread-128922 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:58:32.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T13:58:32.420 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T13:58:32.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T13:58:33.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 58, 23), 35.81, 8.72, 0.0, 28.3, 25.48, 0, 0, 0, 2, 0, 0),)
2025-12-31T13:58:33.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:58:23
2025-12-31T13:58:33.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T13:58:33.398 [DEBUG] [Thread-128923] [transport.py] [_log()] starting thread (client mode): 0xb6bbab60
2025-12-31T13:58:33.398 [DEBUG] [Thread-128923] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:58:33.418 [DEBUG] [Thread-128923] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T13:58:33.418 [INFO] [Thread-128923] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T13:58:33.421 [DEBUG] [Thread-128923] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:58:33.421 [DEBUG] [Thread-128923] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T13:58:33.421 [DEBUG] [Thread-128923] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:58:33.421 [DEBUG] [Thread-128923] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:58:33.421 [DEBUG] [Thread-128923] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:58:33.421 [DEBUG] [Thread-128923] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:58:33.421 [DEBUG] [Thread-128923] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:58:33.422 [DEBUG] [Thread-128923] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:58:33.422 [DEBUG] [Thread-128923] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:58:33.422 [DEBUG] [Thread-128923] [transport.py] [_log()] client lang: <none>
2025-12-31T13:58:33.422 [DEBUG] [Thread-128923] [transport.py] [_log()] server lang: <none>
2025-12-31T13:58:33.422 [DEBUG] [Thread-128923] [transport.py] [_log()] kex follows: False
2025-12-31T13:58:33.422 [DEBUG] [Thread-128923] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:58:33.422 [DEBUG] [Thread-128923] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:58:33.422 [DEBUG] [Thread-128923] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:58:33.422 [DEBUG] [Thread-128923] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:58:33.422 [DEBUG] [Thread-128923] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:58:33.422 [DEBUG] [Thread-128923] [transport.py] [_log()] Compression: none
2025-12-31T13:58:33.422 [DEBUG] [Thread-128923] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:58:33.438 [DEBUG] [Thread-128923] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:58:33.438 [DEBUG] [Thread-128923] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:58:33.438 [DEBUG] [Thread-128923] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T13:58:33.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T13:58:33.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:58:33.439 [DEBUG] [Thread-128923] [transport.py] [_log()] userauth is OK
2025-12-31T13:58:33.439 [DEBUG] [Thread-128923] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:58:33.439 [DEBUG] [Thread-128923] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:58:33.439 [DEBUG] [Thread-128923] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T13:58:33.439 [DEBUG] [Thread-128923] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:58:33.448 [INFO] [Thread-128923] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:58:33.448 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:58:34.234 [DEBUG] [Thread-128923] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:58:34.234 [DEBUG] [Thread-128923] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:58:34.234 [DEBUG] [Thread-128923] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T13:58:34.274 [DEBUG] [Thread-128923] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:58:34.274 [DEBUG] [Thread-128923] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:58:34.276 [DEBUG] [Thread-128923] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:58:34.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:58:34.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T13:58:34.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T13:58:34.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T13:58:34.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:58:34.286 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T13:58:34.286 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:58:34.286 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:58:34.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T13:58:34.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.498406 -999.00  +24.70  24.03     13   -4.60 1 2 1 1 1   888    0 30.47 68.05 ----- 21.4 24.0 305.6 32.6 28.9 -20.3 28.8 -20.3 28.2 -23.0 28.6 -20.4
2025-12-31T13:58:34.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T13:58:34.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T13:58:34.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.498406
2025-12-31T13:58:34.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T13:58:34.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T13:58:34.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T13:58:34.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T13:58:34.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T13:58:34.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:58:23', tmtdew=35.81, humidity=8.72, cloud=0.0, wind=28.3, temperature=25.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T11:57:42.278', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T13:58:34.287 [DEBUG] [Thread-128923] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:58:34.361 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T13:58:34.373 [DEBUG] [Thread-128926] [transport.py] [_log()] starting thread (client mode): 0xb9559b70
2025-12-31T13:58:34.373 [DEBUG] [Thread-128926] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:58:34.388 [DEBUG] [Thread-128926] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T13:58:34.388 [INFO] [Thread-128926] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T13:58:34.396 [DEBUG] [Thread-128926] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:58:34.396 [DEBUG] [Thread-128926] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T13:58:34.396 [DEBUG] [Thread-128926] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:58:34.396 [DEBUG] [Thread-128926] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:58:34.396 [DEBUG] [Thread-128926] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:58:34.396 [DEBUG] [Thread-128926] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:58:34.396 [DEBUG] [Thread-128926] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:58:34.396 [DEBUG] [Thread-128926] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:58:34.396 [DEBUG] [Thread-128926] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:58:34.396 [DEBUG] [Thread-128926] [transport.py] [_log()] client lang: <none>
2025-12-31T13:58:34.396 [DEBUG] [Thread-128926] [transport.py] [_log()] server lang: <none>
2025-12-31T13:58:34.396 [DEBUG] [Thread-128926] [transport.py] [_log()] kex follows: False
2025-12-31T13:58:34.396 [DEBUG] [Thread-128926] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:58:34.396 [DEBUG] [Thread-128926] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:58:34.396 [DEBUG] [Thread-128926] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:58:34.396 [DEBUG] [Thread-128926] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:58:34.396 [DEBUG] [Thread-128926] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:58:34.396 [DEBUG] [Thread-128926] [transport.py] [_log()] Compression: none
2025-12-31T13:58:34.396 [DEBUG] [Thread-128926] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:58:34.453 [DEBUG] [Thread-128926] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:58:34.453 [DEBUG] [Thread-128926] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:58:34.453 [DEBUG] [Thread-128926] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T13:58:34.453 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T13:58:34.453 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:58:34.511 [DEBUG] [Thread-128926] [transport.py] [_log()] userauth is OK
2025-12-31T13:58:34.511 [DEBUG] [Thread-128926] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:58:34.511 [DEBUG] [Thread-128926] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:58:34.511 [DEBUG] [Thread-128926] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T13:58:34.511 [DEBUG] [Thread-128926] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:58:34.524 [INFO] [Thread-128926] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:58: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-12-31T13:58:34.525 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:58:35.420 [DEBUG] [Thread-128926] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:58:35.420 [DEBUG] [Thread-128926] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:58:35.471 [DEBUG] [Thread-128926] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:58:35.471 [DEBUG] [Thread-128926] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:58:35.479 [DEBUG] [Thread-128926] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:58:35.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:58:35.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T13:58:35.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T13:58:35.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:58:35.502 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:58:35.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:58:35.510 [DEBUG] [Thread-128926] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:58:41.524 [DEBUG] [Thread-128928 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:58:55.026 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:58:55.027 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:58:56.587 [DEBUG] [Thread-128929 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:59:05.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T13:59:05.533 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T13:59:05.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T13:59:06.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 58, 55), 34.94, 9.45, 0.0, 17.68, 25.51, 0, 0, 0, 2, 0, 0),)
2025-12-31T13:59:06.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:58:55
2025-12-31T13:59:06.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T13:59:06.513 [DEBUG] [Thread-128930] [transport.py] [_log()] starting thread (client mode): 0xb6bbc070
2025-12-31T13:59:06.513 [DEBUG] [Thread-128930] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:59:06.534 [DEBUG] [Thread-128930] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T13:59:06.534 [INFO] [Thread-128930] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T13:59:06.537 [DEBUG] [Thread-128930] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:59:06.537 [DEBUG] [Thread-128930] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T13:59:06.537 [DEBUG] [Thread-128930] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:59:06.537 [DEBUG] [Thread-128930] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:59:06.537 [DEBUG] [Thread-128930] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:59:06.537 [DEBUG] [Thread-128930] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:59:06.537 [DEBUG] [Thread-128930] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:59:06.537 [DEBUG] [Thread-128930] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:59:06.537 [DEBUG] [Thread-128930] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:59:06.537 [DEBUG] [Thread-128930] [transport.py] [_log()] client lang: <none>
2025-12-31T13:59:06.537 [DEBUG] [Thread-128930] [transport.py] [_log()] server lang: <none>
2025-12-31T13:59:06.537 [DEBUG] [Thread-128930] [transport.py] [_log()] kex follows: False
2025-12-31T13:59:06.537 [DEBUG] [Thread-128930] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:59:06.537 [DEBUG] [Thread-128930] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:59:06.537 [DEBUG] [Thread-128930] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:59:06.537 [DEBUG] [Thread-128930] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:59:06.537 [DEBUG] [Thread-128930] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:59:06.537 [DEBUG] [Thread-128930] [transport.py] [_log()] Compression: none
2025-12-31T13:59:06.537 [DEBUG] [Thread-128930] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:59:06.553 [DEBUG] [Thread-128930] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:59:06.554 [DEBUG] [Thread-128930] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:59:06.554 [DEBUG] [Thread-128930] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T13:59:06.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T13:59:06.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:59:06.556 [DEBUG] [Thread-128930] [transport.py] [_log()] userauth is OK
2025-12-31T13:59:06.557 [DEBUG] [Thread-128930] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:59:06.557 [DEBUG] [Thread-128930] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:59:06.557 [DEBUG] [Thread-128930] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T13:59:06.557 [DEBUG] [Thread-128930] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:59:06.577 [INFO] [Thread-128930] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:59:06.578 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:59:07.219 [DEBUG] [Thread-128930] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:59:07.219 [DEBUG] [Thread-128930] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:59:07.219 [DEBUG] [Thread-128930] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T13:59:07.260 [DEBUG] [Thread-128930] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:59:07.260 [DEBUG] [Thread-128930] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:59:07.263 [DEBUG] [Thread-128930] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:59:07.277 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:59:07.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T13:59:07.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T13:59:07.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T13:59:07.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:59:07.291 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T13:59:07.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:59:07.291 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:59:07.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T13:59:07.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.498753 -999.00  +25.00  22.65     14   -4.10 1 2 1 1 1   888    0 30.63 74.59 ----- 26.1 22.6 319.6 26.2 29.1 -19.4 28.8 -19.6 28.3 -20.1 28.7 -19.5
2025-12-31T13:59:07.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T13:59:07.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T13:59:07.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.498753
2025-12-31T13:59:07.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T13:59:07.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T13:59:07.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T13:59:07.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T13:59:07.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T13:59:07.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:58:55', tmtdew=34.94, humidity=9.45, cloud=0.0, wind=17.68, temperature=25.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T11:58:12.259', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T13:59:07.293 [DEBUG] [Thread-128930] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:59:07.375 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T13:59:07.387 [DEBUG] [Thread-128933] [transport.py] [_log()] starting thread (client mode): 0xb6bb3070
2025-12-31T13:59:07.387 [DEBUG] [Thread-128933] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:59:07.402 [DEBUG] [Thread-128933] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T13:59:07.402 [INFO] [Thread-128933] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T13:59:07.410 [DEBUG] [Thread-128933] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:59:07.410 [DEBUG] [Thread-128933] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T13:59:07.410 [DEBUG] [Thread-128933] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:59:07.410 [DEBUG] [Thread-128933] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:59:07.410 [DEBUG] [Thread-128933] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:59:07.410 [DEBUG] [Thread-128933] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:59:07.410 [DEBUG] [Thread-128933] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:59:07.410 [DEBUG] [Thread-128933] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:59:07.410 [DEBUG] [Thread-128933] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:59:07.410 [DEBUG] [Thread-128933] [transport.py] [_log()] client lang: <none>
2025-12-31T13:59:07.410 [DEBUG] [Thread-128933] [transport.py] [_log()] server lang: <none>
2025-12-31T13:59:07.410 [DEBUG] [Thread-128933] [transport.py] [_log()] kex follows: False
2025-12-31T13:59:07.411 [DEBUG] [Thread-128933] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:59:07.411 [DEBUG] [Thread-128933] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:59:07.411 [DEBUG] [Thread-128933] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:59:07.411 [DEBUG] [Thread-128933] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:59:07.411 [DEBUG] [Thread-128933] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:59:07.411 [DEBUG] [Thread-128933] [transport.py] [_log()] Compression: none
2025-12-31T13:59:07.411 [DEBUG] [Thread-128933] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:59:07.471 [DEBUG] [Thread-128933] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:59:07.472 [DEBUG] [Thread-128933] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:59:07.473 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T13:59:07.473 [DEBUG] [Thread-128933] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T13:59:07.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:59:07.531 [DEBUG] [Thread-128933] [transport.py] [_log()] userauth is OK
2025-12-31T13:59:07.531 [DEBUG] [Thread-128933] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:59:07.532 [DEBUG] [Thread-128933] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:59:07.532 [DEBUG] [Thread-128933] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T13:59:07.532 [DEBUG] [Thread-128933] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:59:07.552 [INFO] [Thread-128933] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:59:07.553 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T13:59:07.553 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:59:08.414 [DEBUG] [Thread-128933] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:59:08.414 [DEBUG] [Thread-128933] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:59:08.463 [DEBUG] [Thread-128933] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:59:08.463 [DEBUG] [Thread-128933] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:59:08.471 [DEBUG] [Thread-128933] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:59:08.479 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:59:08.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T13:59:08.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T13:59:08.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:59:08.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:59:08.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:59:08.504 [DEBUG] [Thread-128933] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:59:11.620 [DEBUG] [Thread-128935 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:59:17.011 [DEBUG] [Thread-128936 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:59:26.666 [DEBUG] [Thread-128937 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:59:38.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T13:59:38.505 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T13:59:38.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T13:59:39.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 59, 27), 34.72, 9.57, 0.0, 17.06, 25.3, 0, 0, 0, 2, 0, 0),)
2025-12-31T13:59:39.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:59:27
2025-12-31T13:59:39.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T13:59:39.476 [DEBUG] [Thread-128938] [transport.py] [_log()] starting thread (client mode): 0xb6b2b580
2025-12-31T13:59:39.476 [DEBUG] [Thread-128938] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:59:39.496 [DEBUG] [Thread-128938] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T13:59:39.496 [INFO] [Thread-128938] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T13:59:39.499 [DEBUG] [Thread-128938] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:59:39.499 [DEBUG] [Thread-128938] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T13:59:39.500 [DEBUG] [Thread-128938] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:59:39.500 [DEBUG] [Thread-128938] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:59:39.500 [DEBUG] [Thread-128938] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:59:39.500 [DEBUG] [Thread-128938] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:59:39.500 [DEBUG] [Thread-128938] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:59:39.500 [DEBUG] [Thread-128938] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:59:39.500 [DEBUG] [Thread-128938] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:59:39.500 [DEBUG] [Thread-128938] [transport.py] [_log()] client lang: <none>
2025-12-31T13:59:39.500 [DEBUG] [Thread-128938] [transport.py] [_log()] server lang: <none>
2025-12-31T13:59:39.500 [DEBUG] [Thread-128938] [transport.py] [_log()] kex follows: False
2025-12-31T13:59:39.500 [DEBUG] [Thread-128938] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:59:39.500 [DEBUG] [Thread-128938] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:59:39.500 [DEBUG] [Thread-128938] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:59:39.500 [DEBUG] [Thread-128938] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:59:39.500 [DEBUG] [Thread-128938] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:59:39.501 [DEBUG] [Thread-128938] [transport.py] [_log()] Compression: none
2025-12-31T13:59:39.501 [DEBUG] [Thread-128938] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:59:39.519 [DEBUG] [Thread-128938] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:59:39.519 [DEBUG] [Thread-128938] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:59:39.520 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T13:59:39.520 [DEBUG] [Thread-128938] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T13:59:39.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:59:39.522 [DEBUG] [Thread-128938] [transport.py] [_log()] userauth is OK
2025-12-31T13:59:39.523 [DEBUG] [Thread-128938] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:59:39.523 [DEBUG] [Thread-128938] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:59:39.523 [DEBUG] [Thread-128938] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T13:59:39.523 [DEBUG] [Thread-128938] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:59:39.559 [INFO] [Thread-128938] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:59:39.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:59:40.306 [DEBUG] [Thread-128938] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:59:40.306 [DEBUG] [Thread-128938] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:59:40.307 [DEBUG] [Thread-128938] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T13:59:40.347 [DEBUG] [Thread-128938] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:59:40.347 [DEBUG] [Thread-128938] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:59:40.350 [DEBUG] [Thread-128938] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:59:40.360 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:59:40.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T13:59:40.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T13:59:40.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T13:59:40.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:59:40.370 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T13:59:40.371 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:59:40.371 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:59:40.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T13:59:40.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.499101 -999.00  +24.90  19.30     14   -3.70 1 2 1 1 1   888    0 30.58 69.44 ----- 17.6 19.3 314.8 24.9 29.1 -19.1 28.9 -19.7 28.4 -19.7 28.8 -19.1
2025-12-31T13:59:40.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T13:59:40.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T13:59:40.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.499101
2025-12-31T13:59:40.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T13:59:40.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T13:59:40.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T13:59:40.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T13:59:40.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T13:59:40.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:59:27', tmtdew=34.72, humidity=9.57, cloud=0.0, wind=17.06, temperature=25.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T11:58:42.326', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T13:59:40.373 [DEBUG] [Thread-128938] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:59:40.457 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T13:59:40.468 [DEBUG] [Thread-128941] [transport.py] [_log()] starting thread (client mode): 0xb6b15b40
2025-12-31T13:59:40.469 [DEBUG] [Thread-128941] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T13:59:40.483 [DEBUG] [Thread-128941] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T13:59:40.484 [INFO] [Thread-128941] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T13:59:40.491 [DEBUG] [Thread-128941] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T13:59:40.491 [DEBUG] [Thread-128941] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T13:59:40.492 [DEBUG] [Thread-128941] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T13:59:40.492 [DEBUG] [Thread-128941] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:59:40.492 [DEBUG] [Thread-128941] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T13:59:40.492 [DEBUG] [Thread-128941] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:59:40.492 [DEBUG] [Thread-128941] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T13:59:40.492 [DEBUG] [Thread-128941] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T13:59:40.492 [DEBUG] [Thread-128941] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T13:59:40.492 [DEBUG] [Thread-128941] [transport.py] [_log()] client lang: <none>
2025-12-31T13:59:40.492 [DEBUG] [Thread-128941] [transport.py] [_log()] server lang: <none>
2025-12-31T13:59:40.493 [DEBUG] [Thread-128941] [transport.py] [_log()] kex follows: False
2025-12-31T13:59:40.493 [DEBUG] [Thread-128941] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T13:59:40.493 [DEBUG] [Thread-128941] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T13:59:40.493 [DEBUG] [Thread-128941] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T13:59:40.493 [DEBUG] [Thread-128941] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T13:59:40.493 [DEBUG] [Thread-128941] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T13:59:40.493 [DEBUG] [Thread-128941] [transport.py] [_log()] Compression: none
2025-12-31T13:59:40.494 [DEBUG] [Thread-128941] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T13:59:40.551 [DEBUG] [Thread-128941] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T13:59:40.552 [DEBUG] [Thread-128941] [transport.py] [_log()] Switch to new keys ...
2025-12-31T13:59:40.553 [DEBUG] [Thread-128941] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T13:59:40.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T13:59:40.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T13:59:40.607 [DEBUG] [Thread-128941] [transport.py] [_log()] userauth is OK
2025-12-31T13:59:40.608 [DEBUG] [Thread-128941] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T13:59:40.608 [DEBUG] [Thread-128941] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T13:59:40.608 [DEBUG] [Thread-128941] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T13:59:40.608 [DEBUG] [Thread-128941] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T13:59:40.630 [INFO] [Thread-128941] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T13:59:40.630 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T13:59:40.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T13:59:41.475 [DEBUG] [Thread-128941] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T13:59:41.476 [DEBUG] [Thread-128941] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T13:59:41.523 [DEBUG] [Thread-128941] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T13:59:41.523 [DEBUG] [Thread-128941] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T13:59:41.532 [DEBUG] [Thread-128941] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T13:59:41.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T13:59:41.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T13:59:41.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T13:59:41.562 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T13:59:41.562 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T13:59:41.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T13:59:41.570 [DEBUG] [Thread-128941] [transport.py] [_log()] EOF in transport thread
2025-12-31T13:59:41.702 [DEBUG] [Thread-128943 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:59:55.167 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:59:55.168 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T13:59:56.757 [DEBUG] [Thread-128944 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:00:11.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T14:00:11.571 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T14:00:11.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T14:00:11.788 [DEBUG] [Thread-128945 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:00:12.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 13, 59, 59), 34.55, 9.72, 0.0, 18.97, 25.62, 0, 0, 0, 2, 0, 0),)
2025-12-31T14:00:12.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 13:59:59
2025-12-31T14:00:12.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T14:00:12.567 [DEBUG] [Thread-128946] [transport.py] [_log()] starting thread (client mode): 0xb6b17760
2025-12-31T14:00:12.567 [DEBUG] [Thread-128946] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:00:12.588 [DEBUG] [Thread-128946] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T14:00:12.588 [INFO] [Thread-128946] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T14:00:12.591 [DEBUG] [Thread-128946] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:00:12.591 [DEBUG] [Thread-128946] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T14:00:12.591 [DEBUG] [Thread-128946] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:00:12.591 [DEBUG] [Thread-128946] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:00:12.591 [DEBUG] [Thread-128946] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:00:12.591 [DEBUG] [Thread-128946] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:00:12.591 [DEBUG] [Thread-128946] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:00:12.591 [DEBUG] [Thread-128946] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:00:12.591 [DEBUG] [Thread-128946] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:00:12.591 [DEBUG] [Thread-128946] [transport.py] [_log()] client lang: <none>
2025-12-31T14:00:12.591 [DEBUG] [Thread-128946] [transport.py] [_log()] server lang: <none>
2025-12-31T14:00:12.591 [DEBUG] [Thread-128946] [transport.py] [_log()] kex follows: False
2025-12-31T14:00:12.591 [DEBUG] [Thread-128946] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:00:12.591 [DEBUG] [Thread-128946] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:00:12.591 [DEBUG] [Thread-128946] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:00:12.591 [DEBUG] [Thread-128946] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:00:12.592 [DEBUG] [Thread-128946] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:00:12.592 [DEBUG] [Thread-128946] [transport.py] [_log()] Compression: none
2025-12-31T14:00:12.592 [DEBUG] [Thread-128946] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:00:12.609 [DEBUG] [Thread-128946] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:00:12.610 [DEBUG] [Thread-128946] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:00:12.610 [DEBUG] [Thread-128946] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T14:00:12.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T14:00:12.611 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:00:12.653 [DEBUG] [Thread-128946] [transport.py] [_log()] userauth is OK
2025-12-31T14:00:12.653 [DEBUG] [Thread-128946] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:00:12.654 [DEBUG] [Thread-128946] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:00:12.654 [DEBUG] [Thread-128946] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T14:00:12.654 [DEBUG] [Thread-128946] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:00:12.685 [INFO] [Thread-128946] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:00:12.686 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:00:13.878 [DEBUG] [Thread-128946] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:00:13.879 [DEBUG] [Thread-128946] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:00:13.879 [DEBUG] [Thread-128946] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T14:00:13.920 [DEBUG] [Thread-128946] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:00:13.920 [DEBUG] [Thread-128946] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:00:13.924 [DEBUG] [Thread-128946] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:00:13.937 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:00:13.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T14:00:13.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T14:00:13.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T14:00:13.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:00:13.956 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T14:00:13.956 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:00:13.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:00:13.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T14:00:13.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.499448 -999.00  +25.10  23.70     15   -2.90 1 2 1 1 1   888    0 29.74 61.21 ----- 26.9 23.7 322.3 35.6 29.2 -19.2 29.0 -19.4 28.6 -19.9 28.8 -19.4
2025-12-31T14:00:13.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T14:00:13.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T14:00:13.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.499448
2025-12-31T14:00:13.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T14:00:13.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T14:00:13.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T14:00:13.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T14:00:13.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T14:00:13.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T13:59:59', tmtdew=34.55, humidity=9.72, cloud=0.0, wind=18.97, temperature=25.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T11:59:12.307', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T14:00:13.959 [DEBUG] [Thread-128946] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:00:14.043 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T14:00:14.055 [DEBUG] [Thread-128949] [transport.py] [_log()] starting thread (client mode): 0xb6bbc940
2025-12-31T14:00:14.055 [DEBUG] [Thread-128949] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:00:14.070 [DEBUG] [Thread-128949] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T14:00:14.070 [INFO] [Thread-128949] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T14:00:14.077 [DEBUG] [Thread-128949] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:00:14.077 [DEBUG] [Thread-128949] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T14:00:14.078 [DEBUG] [Thread-128949] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:00:14.078 [DEBUG] [Thread-128949] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:00:14.078 [DEBUG] [Thread-128949] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:00:14.078 [DEBUG] [Thread-128949] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:00:14.078 [DEBUG] [Thread-128949] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:00:14.078 [DEBUG] [Thread-128949] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:00:14.078 [DEBUG] [Thread-128949] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:00:14.078 [DEBUG] [Thread-128949] [transport.py] [_log()] client lang: <none>
2025-12-31T14:00:14.078 [DEBUG] [Thread-128949] [transport.py] [_log()] server lang: <none>
2025-12-31T14:00:14.078 [DEBUG] [Thread-128949] [transport.py] [_log()] kex follows: False
2025-12-31T14:00:14.078 [DEBUG] [Thread-128949] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:00:14.078 [DEBUG] [Thread-128949] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:00:14.078 [DEBUG] [Thread-128949] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:00:14.078 [DEBUG] [Thread-128949] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:00:14.078 [DEBUG] [Thread-128949] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:00:14.078 [DEBUG] [Thread-128949] [transport.py] [_log()] Compression: none
2025-12-31T14:00:14.078 [DEBUG] [Thread-128949] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:00:14.136 [DEBUG] [Thread-128949] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:00:14.137 [DEBUG] [Thread-128949] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:00:14.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T14:00:14.138 [DEBUG] [Thread-128949] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T14:00:14.138 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:00:14.192 [DEBUG] [Thread-128949] [transport.py] [_log()] userauth is OK
2025-12-31T14:00:14.192 [DEBUG] [Thread-128949] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:00:14.193 [DEBUG] [Thread-128949] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:00:14.193 [DEBUG] [Thread-128949] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T14:00:14.193 [DEBUG] [Thread-128949] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:00:14.215 [INFO] [Thread-128949] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:00:14.215 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T14:00:14.216 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:00:15.057 [DEBUG] [Thread-128949] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:00:15.057 [DEBUG] [Thread-128949] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:00:15.105 [DEBUG] [Thread-128949] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:00:15.105 [DEBUG] [Thread-128949] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:00:15.114 [DEBUG] [Thread-128949] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:00:15.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:00:15.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T14:00:15.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T14:00:15.142 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:00:15.142 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:00:15.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:00:15.150 [DEBUG] [Thread-128949] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:00:17.062 [DEBUG] [Thread-128951 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:00:26.822 [DEBUG] [Thread-128952 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:00:41.884 [DEBUG] [Thread-128953 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:00:45.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T14:00:45.173 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T14:00:45.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T14:00:45.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 14, 0, 31), 34.49, 9.8, 0.0, 27.45, 25.86, 0, 0, 0, 2, 0, 0),)
2025-12-31T14:00:45.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 14:00:31
2025-12-31T14:00:46.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T14:00:46.159 [DEBUG] [Thread-128954] [transport.py] [_log()] starting thread (client mode): 0xb6b60f70
2025-12-31T14:00:46.159 [DEBUG] [Thread-128954] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:00:46.180 [DEBUG] [Thread-128954] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T14:00:46.180 [INFO] [Thread-128954] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T14:00:46.183 [DEBUG] [Thread-128954] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:00:46.184 [DEBUG] [Thread-128954] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T14:00:46.184 [DEBUG] [Thread-128954] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:00:46.184 [DEBUG] [Thread-128954] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:00:46.184 [DEBUG] [Thread-128954] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:00:46.184 [DEBUG] [Thread-128954] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:00:46.184 [DEBUG] [Thread-128954] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:00:46.184 [DEBUG] [Thread-128954] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:00:46.184 [DEBUG] [Thread-128954] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:00:46.184 [DEBUG] [Thread-128954] [transport.py] [_log()] client lang: <none>
2025-12-31T14:00:46.184 [DEBUG] [Thread-128954] [transport.py] [_log()] server lang: <none>
2025-12-31T14:00:46.184 [DEBUG] [Thread-128954] [transport.py] [_log()] kex follows: False
2025-12-31T14:00:46.184 [DEBUG] [Thread-128954] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:00:46.184 [DEBUG] [Thread-128954] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:00:46.184 [DEBUG] [Thread-128954] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:00:46.184 [DEBUG] [Thread-128954] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:00:46.184 [DEBUG] [Thread-128954] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:00:46.184 [DEBUG] [Thread-128954] [transport.py] [_log()] Compression: none
2025-12-31T14:00:46.184 [DEBUG] [Thread-128954] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:00:46.202 [DEBUG] [Thread-128954] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:00:46.202 [DEBUG] [Thread-128954] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:00:46.203 [DEBUG] [Thread-128954] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T14:00:46.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T14:00:46.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:00:46.205 [DEBUG] [Thread-128954] [transport.py] [_log()] userauth is OK
2025-12-31T14:00:46.205 [DEBUG] [Thread-128954] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:00:46.205 [DEBUG] [Thread-128954] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:00:46.205 [DEBUG] [Thread-128954] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T14:00:46.205 [DEBUG] [Thread-128954] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:00:46.231 [INFO] [Thread-128954] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:00:46.231 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:00:46.859 [DEBUG] [Thread-128954] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:00:46.860 [DEBUG] [Thread-128954] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:00:46.860 [DEBUG] [Thread-128954] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T14:00:46.901 [DEBUG] [Thread-128954] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:00:46.901 [DEBUG] [Thread-128954] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:00:46.905 [DEBUG] [Thread-128954] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:00:46.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:00:46.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T14:00:46.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T14:00:46.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T14:00:46.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:00:46.932 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T14:00:46.932 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:00:46.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:00:46.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T14:00:46.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.500142 -999.00  +25.20  24.15     15   -2.70 1 2 1 1 1   888    0 29.08 49.13 ----- 28.8 24.1 295.3 38.2 28.9 -21.2 28.8 -20.9 28.1 -24.6 28.7 -20.6
2025-12-31T14:00:46.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T14:00:46.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T14:00:46.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.500142
2025-12-31T14:00:46.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T14:00:46.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T14:00:46.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T14:00:46.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T14:00:46.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T14:00:46.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T14:00:31', tmtdew=34.49, humidity=9.8, cloud=0.0, wind=27.45, temperature=25.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T12:00:12.269', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T14:00:46.935 [DEBUG] [Thread-128954] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:00:47.018 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T14:00:47.028 [DEBUG] [Thread-128957] [transport.py] [_log()] starting thread (client mode): 0xb6b62b30
2025-12-31T14:00:47.028 [DEBUG] [Thread-128957] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:00:47.042 [DEBUG] [Thread-128957] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T14:00:47.043 [INFO] [Thread-128957] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T14:00:47.050 [DEBUG] [Thread-128957] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:00:47.050 [DEBUG] [Thread-128957] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T14:00:47.050 [DEBUG] [Thread-128957] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:00:47.051 [DEBUG] [Thread-128957] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:00:47.051 [DEBUG] [Thread-128957] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:00:47.051 [DEBUG] [Thread-128957] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:00:47.051 [DEBUG] [Thread-128957] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:00:47.051 [DEBUG] [Thread-128957] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:00:47.051 [DEBUG] [Thread-128957] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:00:47.051 [DEBUG] [Thread-128957] [transport.py] [_log()] client lang: <none>
2025-12-31T14:00:47.051 [DEBUG] [Thread-128957] [transport.py] [_log()] server lang: <none>
2025-12-31T14:00:47.051 [DEBUG] [Thread-128957] [transport.py] [_log()] kex follows: False
2025-12-31T14:00:47.051 [DEBUG] [Thread-128957] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:00:47.051 [DEBUG] [Thread-128957] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:00:47.051 [DEBUG] [Thread-128957] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:00:47.051 [DEBUG] [Thread-128957] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:00:47.051 [DEBUG] [Thread-128957] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:00:47.051 [DEBUG] [Thread-128957] [transport.py] [_log()] Compression: none
2025-12-31T14:00:47.051 [DEBUG] [Thread-128957] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:00:47.110 [DEBUG] [Thread-128957] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:00:47.111 [DEBUG] [Thread-128957] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:00:47.111 [DEBUG] [Thread-128957] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T14:00:47.112 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T14:00:47.112 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:00:47.166 [DEBUG] [Thread-128957] [transport.py] [_log()] userauth is OK
2025-12-31T14:00:47.166 [DEBUG] [Thread-128957] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:00:47.167 [DEBUG] [Thread-128957] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:00:47.167 [DEBUG] [Thread-128957] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T14:00:47.167 [DEBUG] [Thread-128957] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:00:47.185 [INFO] [Thread-128957] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:00:47.185 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T14:00:47.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:00:48.052 [DEBUG] [Thread-128957] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:00:48.052 [DEBUG] [Thread-128957] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:00:48.100 [DEBUG] [Thread-128957] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:00:48.100 [DEBUG] [Thread-128957] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:00:48.109 [DEBUG] [Thread-128957] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:00:48.117 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:00:48.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T14:00:48.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T14:00:48.134 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:00:48.135 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:00:48.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:00:48.143 [DEBUG] [Thread-128957] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:00:55.306 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:00:55.308 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:00:56.920 [DEBUG] [Thread-128959 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:01:11.979 [DEBUG] [Thread-128960 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:01:17.119 [DEBUG] [Thread-128961 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:01:18.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T14:01:18.142 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T14:01:18.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-12-31T14:01:18.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 14, 1, 4), 34.65, 9.72, 0.0, 25.67, 26.05, 0, 0, 0, 2, 0, 0),)
2025-12-31T14:01:18.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 14:01:04
2025-12-31T14:01:18.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T14:01:19.129 [DEBUG] [Thread-128962] [transport.py] [_log()] starting thread (client mode): 0xb6bbf1c0
2025-12-31T14:01:19.129 [DEBUG] [Thread-128962] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:01:19.149 [DEBUG] [Thread-128962] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T14:01:19.149 [INFO] [Thread-128962] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T14:01:19.152 [DEBUG] [Thread-128962] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:01:19.152 [DEBUG] [Thread-128962] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T14:01:19.152 [DEBUG] [Thread-128962] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:01:19.152 [DEBUG] [Thread-128962] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:01:19.152 [DEBUG] [Thread-128962] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:01:19.152 [DEBUG] [Thread-128962] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:01:19.152 [DEBUG] [Thread-128962] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:01:19.152 [DEBUG] [Thread-128962] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:01:19.152 [DEBUG] [Thread-128962] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:01:19.152 [DEBUG] [Thread-128962] [transport.py] [_log()] client lang: <none>
2025-12-31T14:01:19.152 [DEBUG] [Thread-128962] [transport.py] [_log()] server lang: <none>
2025-12-31T14:01:19.152 [DEBUG] [Thread-128962] [transport.py] [_log()] kex follows: False
2025-12-31T14:01:19.152 [DEBUG] [Thread-128962] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:01:19.152 [DEBUG] [Thread-128962] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:01:19.152 [DEBUG] [Thread-128962] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:01:19.152 [DEBUG] [Thread-128962] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:01:19.152 [DEBUG] [Thread-128962] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:01:19.152 [DEBUG] [Thread-128962] [transport.py] [_log()] Compression: none
2025-12-31T14:01:19.152 [DEBUG] [Thread-128962] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:01:19.169 [DEBUG] [Thread-128962] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:01:19.170 [DEBUG] [Thread-128962] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:01:19.170 [DEBUG] [Thread-128962] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T14:01:19.170 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T14:01:19.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:01:19.172 [DEBUG] [Thread-128962] [transport.py] [_log()] userauth is OK
2025-12-31T14:01:19.172 [DEBUG] [Thread-128962] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:01:19.172 [DEBUG] [Thread-128962] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:01:19.172 [DEBUG] [Thread-128962] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T14:01:19.172 [DEBUG] [Thread-128962] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:01:19.189 [INFO] [Thread-128962] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:01:19.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:01:19.980 [DEBUG] [Thread-128962] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:01:19.980 [DEBUG] [Thread-128962] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:01:19.980 [DEBUG] [Thread-128962] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T14:01:20.020 [DEBUG] [Thread-128962] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:01:20.021 [DEBUG] [Thread-128962] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:01:20.023 [DEBUG] [Thread-128962] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:01:20.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:01:20.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T14:01:20.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T14:01:20.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T14:01:20.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:01:20.051 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T14:01:20.051 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:01:20.051 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:01:20.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T14:01:20.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.500489 -999.00  +25.30  30.58     14   -3.20 1 2 2 1 1   888    0 29.40 43.13 ----- 26.8 30.6 296.8 33.8 29.2 -19.7 29.0 -20.0 28.4 -19.9 28.9 -19.9
2025-12-31T14:01:20.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T14:01:20.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T14:01:20.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.500489
2025-12-31T14:01:20.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T14:01:20.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T14:01:20.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T14:01:20.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T14:01:20.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T14:01:20.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T14:01:04', tmtdew=34.65, humidity=9.72, cloud=0.0, wind=25.67, temperature=26.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T12:00:42.250', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T14:01:20.053 [DEBUG] [Thread-128962] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:01:20.142 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T14:01:20.154 [DEBUG] [Thread-128965] [transport.py] [_log()] starting thread (client mode): 0xb955b5e0
2025-12-31T14:01:20.154 [DEBUG] [Thread-128965] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:01:20.169 [DEBUG] [Thread-128965] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T14:01:20.169 [INFO] [Thread-128965] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T14:01:20.177 [DEBUG] [Thread-128965] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:01:20.177 [DEBUG] [Thread-128965] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T14:01:20.178 [DEBUG] [Thread-128965] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:01:20.178 [DEBUG] [Thread-128965] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:01:20.178 [DEBUG] [Thread-128965] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:01:20.178 [DEBUG] [Thread-128965] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:01:20.178 [DEBUG] [Thread-128965] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:01:20.178 [DEBUG] [Thread-128965] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:01:20.178 [DEBUG] [Thread-128965] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:01:20.178 [DEBUG] [Thread-128965] [transport.py] [_log()] client lang: <none>
2025-12-31T14:01:20.178 [DEBUG] [Thread-128965] [transport.py] [_log()] server lang: <none>
2025-12-31T14:01:20.178 [DEBUG] [Thread-128965] [transport.py] [_log()] kex follows: False
2025-12-31T14:01:20.179 [DEBUG] [Thread-128965] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:01:20.179 [DEBUG] [Thread-128965] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:01:20.179 [DEBUG] [Thread-128965] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:01:20.179 [DEBUG] [Thread-128965] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:01:20.179 [DEBUG] [Thread-128965] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:01:20.179 [DEBUG] [Thread-128965] [transport.py] [_log()] Compression: none
2025-12-31T14:01:20.179 [DEBUG] [Thread-128965] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:01:20.235 [DEBUG] [Thread-128965] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:01:20.236 [DEBUG] [Thread-128965] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:01:20.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T14:01:20.237 [DEBUG] [Thread-128965] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T14:01:20.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:01:20.291 [DEBUG] [Thread-128965] [transport.py] [_log()] userauth is OK
2025-12-31T14:01:20.292 [DEBUG] [Thread-128965] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:01:20.292 [DEBUG] [Thread-128965] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:01:20.292 [DEBUG] [Thread-128965] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T14:01:20.292 [DEBUG] [Thread-128965] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:01:20.314 [INFO] [Thread-128965] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:01:20.314 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T14:01:20.315 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:01:21.155 [DEBUG] [Thread-128965] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:01:21.155 [DEBUG] [Thread-128965] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:01:21.204 [DEBUG] [Thread-128965] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:01:21.204 [DEBUG] [Thread-128965] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:01:21.213 [DEBUG] [Thread-128965] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:01:21.221 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:01:21.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T14:01:21.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T14:01:21.239 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:01:21.239 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:01:21.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:01:21.247 [DEBUG] [Thread-128965] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:01:27.008 [DEBUG] [Thread-128967 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:01:42.060 [DEBUG] [Thread-128968 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:01:51.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T14:01:51.269 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T14:01:51.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T14:01:52.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 14, 1, 36), 34.33, 9.6, 0.0, 23.47, 25.83, 0, 0, 0, 2, 0, 0),)
2025-12-31T14:01:52.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 14:01:36
2025-12-31T14:01:52.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T14:01:52.298 [DEBUG] [Thread-128969] [transport.py] [_log()] starting thread (client mode): 0xb6bb22c0
2025-12-31T14:01:52.299 [DEBUG] [Thread-128969] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:01:52.317 [DEBUG] [Thread-128969] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T14:01:52.317 [INFO] [Thread-128969] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T14:01:52.320 [DEBUG] [Thread-128969] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:01:52.320 [DEBUG] [Thread-128969] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T14:01:52.320 [DEBUG] [Thread-128969] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:01:52.320 [DEBUG] [Thread-128969] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:01:52.320 [DEBUG] [Thread-128969] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:01:52.320 [DEBUG] [Thread-128969] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:01:52.320 [DEBUG] [Thread-128969] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:01:52.320 [DEBUG] [Thread-128969] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:01:52.320 [DEBUG] [Thread-128969] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:01:52.321 [DEBUG] [Thread-128969] [transport.py] [_log()] client lang: <none>
2025-12-31T14:01:52.321 [DEBUG] [Thread-128969] [transport.py] [_log()] server lang: <none>
2025-12-31T14:01:52.321 [DEBUG] [Thread-128969] [transport.py] [_log()] kex follows: False
2025-12-31T14:01:52.321 [DEBUG] [Thread-128969] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:01:52.321 [DEBUG] [Thread-128969] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:01:52.321 [DEBUG] [Thread-128969] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:01:52.321 [DEBUG] [Thread-128969] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:01:52.321 [DEBUG] [Thread-128969] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:01:52.321 [DEBUG] [Thread-128969] [transport.py] [_log()] Compression: none
2025-12-31T14:01:52.321 [DEBUG] [Thread-128969] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:01:52.337 [DEBUG] [Thread-128969] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:01:52.337 [DEBUG] [Thread-128969] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:01:52.337 [DEBUG] [Thread-128969] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T14:01:52.337 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T14:01:52.337 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:01:52.338 [DEBUG] [Thread-128969] [transport.py] [_log()] userauth is OK
2025-12-31T14:01:52.338 [DEBUG] [Thread-128969] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:01:52.338 [DEBUG] [Thread-128969] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:01:52.338 [DEBUG] [Thread-128969] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T14:01:52.338 [DEBUG] [Thread-128969] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:01:52.348 [INFO] [Thread-128969] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:01:52.348 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:01:52.953 [DEBUG] [Thread-128969] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:01:52.953 [DEBUG] [Thread-128969] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:01:52.953 [DEBUG] [Thread-128969] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T14:01:52.994 [DEBUG] [Thread-128969] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:01:52.994 [DEBUG] [Thread-128969] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:01:52.997 [DEBUG] [Thread-128969] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:01:53.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:01:53.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T14:01:53.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T14:01:53.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T14:01:53.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:01:53.014 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T14:01:53.014 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:01:53.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:01:53.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T14:01:53.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.500837 -999.00  +24.90  18.35     15   -2.90 1 2 1 1 1   888    0 29.39 39.27 ----- 21.0 18.4 301.0 32.2 29.3 -19.8 29.0 -20.3 28.4 -20.9 28.9 -19.3
2025-12-31T14:01:53.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T14:01:53.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T14:01:53.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.500837
2025-12-31T14:01:53.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T14:01:53.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T14:01:53.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T14:01:53.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T14:01:53.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T14:01:53.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T14:01:36', tmtdew=34.33, humidity=9.6, cloud=0.0, wind=23.47, temperature=25.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T12:01:12.317', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T14:01:53.015 [DEBUG] [Thread-128969] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:01:53.089 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T14:01:53.101 [DEBUG] [Thread-128972] [transport.py] [_log()] starting thread (client mode): 0xb9558460
2025-12-31T14:01:53.101 [DEBUG] [Thread-128972] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:01:53.116 [DEBUG] [Thread-128972] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T14:01:53.116 [INFO] [Thread-128972] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T14:01:53.124 [DEBUG] [Thread-128972] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:01:53.124 [DEBUG] [Thread-128972] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T14:01:53.124 [DEBUG] [Thread-128972] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:01:53.124 [DEBUG] [Thread-128972] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:01:53.124 [DEBUG] [Thread-128972] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:01:53.124 [DEBUG] [Thread-128972] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:01:53.124 [DEBUG] [Thread-128972] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:01:53.124 [DEBUG] [Thread-128972] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:01:53.124 [DEBUG] [Thread-128972] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:01:53.124 [DEBUG] [Thread-128972] [transport.py] [_log()] client lang: <none>
2025-12-31T14:01:53.124 [DEBUG] [Thread-128972] [transport.py] [_log()] server lang: <none>
2025-12-31T14:01:53.124 [DEBUG] [Thread-128972] [transport.py] [_log()] kex follows: False
2025-12-31T14:01:53.124 [DEBUG] [Thread-128972] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:01:53.124 [DEBUG] [Thread-128972] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:01:53.124 [DEBUG] [Thread-128972] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:01:53.124 [DEBUG] [Thread-128972] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:01:53.124 [DEBUG] [Thread-128972] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:01:53.124 [DEBUG] [Thread-128972] [transport.py] [_log()] Compression: none
2025-12-31T14:01:53.124 [DEBUG] [Thread-128972] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:01:53.180 [DEBUG] [Thread-128972] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:01:53.180 [DEBUG] [Thread-128972] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:01:53.180 [DEBUG] [Thread-128972] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T14:01:53.180 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T14:01:53.180 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:01:53.237 [DEBUG] [Thread-128972] [transport.py] [_log()] userauth is OK
2025-12-31T14:01:53.237 [DEBUG] [Thread-128972] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:01:53.237 [DEBUG] [Thread-128972] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:01:53.237 [DEBUG] [Thread-128972] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T14:01:53.237 [DEBUG] [Thread-128972] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:01:53.251 [INFO] [Thread-128972] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:01:53.251 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T14:01:53.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:01:54.119 [DEBUG] [Thread-128972] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:01:54.119 [DEBUG] [Thread-128972] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:01:54.167 [DEBUG] [Thread-128972] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:01:54.167 [DEBUG] [Thread-128972] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:01:54.175 [DEBUG] [Thread-128972] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:01:54.183 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:01:54.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T14:01:54.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T14:01:54.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:01:54.199 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:01:54.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:01:54.207 [DEBUG] [Thread-128972] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:01:55.446 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:01:55.447 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:01:57.092 [DEBUG] [Thread-128974 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:02:12.152 [DEBUG] [Thread-128975 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:02:17.175 [DEBUG] [Thread-128976 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:02:24.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T14:02:24.230 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T14:02:24.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T14:02:24.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 14, 2, 8), 34.19, 9.68, 0.0, 17.35, 25.71, 0, 0, 0, 2, 0, 0),)
2025-12-31T14:02:24.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 14:02:08
2025-12-31T14:02:25.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T14:02:25.230 [DEBUG] [Thread-128977] [transport.py] [_log()] starting thread (client mode): 0xb6b29ea0
2025-12-31T14:02:25.231 [DEBUG] [Thread-128977] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:02:25.251 [DEBUG] [Thread-128977] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T14:02:25.251 [INFO] [Thread-128977] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T14:02:25.254 [DEBUG] [Thread-128977] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:02:25.254 [DEBUG] [Thread-128977] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T14:02:25.254 [DEBUG] [Thread-128977] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:02:25.254 [DEBUG] [Thread-128977] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:02:25.254 [DEBUG] [Thread-128977] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:02:25.254 [DEBUG] [Thread-128977] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:02:25.254 [DEBUG] [Thread-128977] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:02:25.254 [DEBUG] [Thread-128977] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:02:25.254 [DEBUG] [Thread-128977] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:02:25.254 [DEBUG] [Thread-128977] [transport.py] [_log()] client lang: <none>
2025-12-31T14:02:25.254 [DEBUG] [Thread-128977] [transport.py] [_log()] server lang: <none>
2025-12-31T14:02:25.254 [DEBUG] [Thread-128977] [transport.py] [_log()] kex follows: False
2025-12-31T14:02:25.254 [DEBUG] [Thread-128977] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:02:25.255 [DEBUG] [Thread-128977] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:02:25.255 [DEBUG] [Thread-128977] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:02:25.255 [DEBUG] [Thread-128977] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:02:25.255 [DEBUG] [Thread-128977] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:02:25.255 [DEBUG] [Thread-128977] [transport.py] [_log()] Compression: none
2025-12-31T14:02:25.255 [DEBUG] [Thread-128977] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:02:25.266 [DEBUG] [Thread-128977] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:02:25.266 [DEBUG] [Thread-128977] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:02:25.267 [DEBUG] [Thread-128977] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T14:02:25.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T14:02:25.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:02:25.269 [DEBUG] [Thread-128977] [transport.py] [_log()] userauth is OK
2025-12-31T14:02:25.269 [DEBUG] [Thread-128977] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:02:25.269 [DEBUG] [Thread-128977] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:02:25.269 [DEBUG] [Thread-128977] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T14:02:25.269 [DEBUG] [Thread-128977] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:02:25.289 [INFO] [Thread-128977] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:02:25.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:02:26.052 [DEBUG] [Thread-128977] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:02:26.052 [DEBUG] [Thread-128977] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:02:26.052 [DEBUG] [Thread-128977] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T14:02:26.093 [DEBUG] [Thread-128977] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:02:26.093 [DEBUG] [Thread-128977] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:02:26.096 [DEBUG] [Thread-128977] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:02:26.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:02:26.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T14:02:26.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T14:02:26.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T14:02:26.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:02:26.128 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T14:02:26.128 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:02:26.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:02:26.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T14:02:26.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.501184 -999.00  +24.80  13.43     15   -2.90 1 2 1 1 1   888    0 29.04 34.13 ----- 13.5 13.4 302.0 25.2 29.4 -19.8 29.1 -19.5 28.7 -20.1 29.0 -19.1
2025-12-31T14:02:26.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T14:02:26.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T14:02:26.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.501184
2025-12-31T14:02:26.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T14:02:26.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T14:02:26.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T14:02:26.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T14:02:26.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T14:02:26.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T14:02:08', tmtdew=34.19, humidity=9.68, cloud=0.0, wind=17.35, temperature=25.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T12:01:42.298', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T14:02:26.131 [DEBUG] [Thread-128977] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:02:26.214 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T14:02:26.225 [DEBUG] [Thread-128980] [transport.py] [_log()] starting thread (client mode): 0xbbfcdab0
2025-12-31T14:02:26.226 [DEBUG] [Thread-128980] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:02:26.241 [DEBUG] [Thread-128980] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T14:02:26.241 [INFO] [Thread-128980] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T14:02:26.248 [DEBUG] [Thread-128980] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:02:26.249 [DEBUG] [Thread-128980] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T14:02:26.249 [DEBUG] [Thread-128980] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:02:26.249 [DEBUG] [Thread-128980] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:02:26.249 [DEBUG] [Thread-128980] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:02:26.250 [DEBUG] [Thread-128980] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:02:26.250 [DEBUG] [Thread-128980] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:02:26.250 [DEBUG] [Thread-128980] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:02:26.250 [DEBUG] [Thread-128980] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:02:26.250 [DEBUG] [Thread-128980] [transport.py] [_log()] client lang: <none>
2025-12-31T14:02:26.250 [DEBUG] [Thread-128980] [transport.py] [_log()] server lang: <none>
2025-12-31T14:02:26.250 [DEBUG] [Thread-128980] [transport.py] [_log()] kex follows: False
2025-12-31T14:02:26.250 [DEBUG] [Thread-128980] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:02:26.250 [DEBUG] [Thread-128980] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:02:26.250 [DEBUG] [Thread-128980] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:02:26.250 [DEBUG] [Thread-128980] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:02:26.250 [DEBUG] [Thread-128980] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:02:26.250 [DEBUG] [Thread-128980] [transport.py] [_log()] Compression: none
2025-12-31T14:02:26.250 [DEBUG] [Thread-128980] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:02:26.308 [DEBUG] [Thread-128980] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:02:26.308 [DEBUG] [Thread-128980] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:02:26.309 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T14:02:26.309 [DEBUG] [Thread-128980] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T14:02:26.310 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:02:26.366 [DEBUG] [Thread-128980] [transport.py] [_log()] userauth is OK
2025-12-31T14:02:26.367 [DEBUG] [Thread-128980] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:02:26.367 [DEBUG] [Thread-128980] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:02:26.367 [DEBUG] [Thread-128980] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T14:02:26.367 [DEBUG] [Thread-128980] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:02:26.386 [INFO] [Thread-128980] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:02:26.387 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T14:02:26.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:02:27.188 [DEBUG] [Thread-128982 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:02:27.251 [DEBUG] [Thread-128980] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:02:27.251 [DEBUG] [Thread-128980] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:02:27.299 [DEBUG] [Thread-128980] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:02:27.299 [DEBUG] [Thread-128980] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:02:27.308 [DEBUG] [Thread-128980] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:02:27.317 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:02:27.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T14:02:27.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T14:02:27.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:02:27.336 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:02:27.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:02:27.344 [DEBUG] [Thread-128980] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:02:42.236 [DEBUG] [Thread-128983 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:02:55.582 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:02:55.583 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:02:57.271 [DEBUG] [Thread-128984 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:02:57.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T14:02:57.367 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T14:02:57.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T14:02:58.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 14, 2, 40), 34.3, 9.63, 0.0, 29.13, 25.8, 0, 0, 0, 2, 0, 0),)
2025-12-31T14:02:58.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 14:02:40
2025-12-31T14:02:58.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T14:02:58.373 [DEBUG] [Thread-128985] [transport.py] [_log()] starting thread (client mode): 0xb6bbd000
2025-12-31T14:02:58.373 [DEBUG] [Thread-128985] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:02:58.393 [DEBUG] [Thread-128985] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T14:02:58.393 [INFO] [Thread-128985] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T14:02:58.396 [DEBUG] [Thread-128985] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:02:58.397 [DEBUG] [Thread-128985] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T14:02:58.397 [DEBUG] [Thread-128985] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:02:58.397 [DEBUG] [Thread-128985] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:02:58.397 [DEBUG] [Thread-128985] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:02:58.397 [DEBUG] [Thread-128985] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:02:58.397 [DEBUG] [Thread-128985] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:02:58.397 [DEBUG] [Thread-128985] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:02:58.397 [DEBUG] [Thread-128985] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:02:58.397 [DEBUG] [Thread-128985] [transport.py] [_log()] client lang: <none>
2025-12-31T14:02:58.397 [DEBUG] [Thread-128985] [transport.py] [_log()] server lang: <none>
2025-12-31T14:02:58.397 [DEBUG] [Thread-128985] [transport.py] [_log()] kex follows: False
2025-12-31T14:02:58.397 [DEBUG] [Thread-128985] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:02:58.397 [DEBUG] [Thread-128985] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:02:58.397 [DEBUG] [Thread-128985] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:02:58.397 [DEBUG] [Thread-128985] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:02:58.397 [DEBUG] [Thread-128985] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:02:58.397 [DEBUG] [Thread-128985] [transport.py] [_log()] Compression: none
2025-12-31T14:02:58.397 [DEBUG] [Thread-128985] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:02:58.415 [DEBUG] [Thread-128985] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:02:58.416 [DEBUG] [Thread-128985] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:02:58.416 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T14:02:58.417 [DEBUG] [Thread-128985] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T14:02:58.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:02:58.419 [DEBUG] [Thread-128985] [transport.py] [_log()] userauth is OK
2025-12-31T14:02:58.419 [DEBUG] [Thread-128985] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:02:58.420 [DEBUG] [Thread-128985] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:02:58.420 [DEBUG] [Thread-128985] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T14:02:58.420 [DEBUG] [Thread-128985] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:02:58.457 [INFO] [Thread-128985] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:02:58.458 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:02:59.053 [DEBUG] [Thread-128985] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:02:59.053 [DEBUG] [Thread-128985] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:02:59.054 [DEBUG] [Thread-128985] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T14:02:59.094 [DEBUG] [Thread-128985] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:02:59.094 [DEBUG] [Thread-128985] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:02:59.098 [DEBUG] [Thread-128985] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:02:59.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:02:59.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T14:02:59.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T14:02:59.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T14:02:59.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:02:59.123 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T14:02:59.124 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:02:59.124 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:02:59.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T14:02:59.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.501531 -999.00  +25.20  17.36     15   -2.80 1 2 1 1 1   888    0 29.21 30.71 ----- 20.8 17.4 297.5 23.5 29.6 -19.3 29.3 -19.9 28.8 -20.9 29.2 -19.2
2025-12-31T14:02:59.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T14:02:59.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T14:02:59.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.501531
2025-12-31T14:02:59.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T14:02:59.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T14:02:59.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T14:02:59.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T14:02:59.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T14:02:59.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T14:02:40', tmtdew=34.3, humidity=9.63, cloud=0.0, wind=29.13, temperature=25.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T12:02:12.278', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T14:02:59.126 [DEBUG] [Thread-128985] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:02:59.209 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T14:02:59.222 [DEBUG] [Thread-128988] [transport.py] [_log()] starting thread (client mode): 0xb6bbe0e0
2025-12-31T14:02:59.222 [DEBUG] [Thread-128988] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:02:59.237 [DEBUG] [Thread-128988] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T14:02:59.237 [INFO] [Thread-128988] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T14:02:59.245 [DEBUG] [Thread-128988] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:02:59.245 [DEBUG] [Thread-128988] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T14:02:59.245 [DEBUG] [Thread-128988] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:02:59.245 [DEBUG] [Thread-128988] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:02:59.245 [DEBUG] [Thread-128988] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:02:59.245 [DEBUG] [Thread-128988] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:02:59.245 [DEBUG] [Thread-128988] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:02:59.246 [DEBUG] [Thread-128988] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:02:59.246 [DEBUG] [Thread-128988] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:02:59.246 [DEBUG] [Thread-128988] [transport.py] [_log()] client lang: <none>
2025-12-31T14:02:59.246 [DEBUG] [Thread-128988] [transport.py] [_log()] server lang: <none>
2025-12-31T14:02:59.246 [DEBUG] [Thread-128988] [transport.py] [_log()] kex follows: False
2025-12-31T14:02:59.246 [DEBUG] [Thread-128988] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:02:59.246 [DEBUG] [Thread-128988] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:02:59.246 [DEBUG] [Thread-128988] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:02:59.246 [DEBUG] [Thread-128988] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:02:59.246 [DEBUG] [Thread-128988] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:02:59.246 [DEBUG] [Thread-128988] [transport.py] [_log()] Compression: none
2025-12-31T14:02:59.246 [DEBUG] [Thread-128988] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:02:59.306 [DEBUG] [Thread-128988] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:02:59.307 [DEBUG] [Thread-128988] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:02:59.307 [DEBUG] [Thread-128988] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T14:02:59.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T14:02:59.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:02:59.366 [DEBUG] [Thread-128988] [transport.py] [_log()] userauth is OK
2025-12-31T14:02:59.366 [DEBUG] [Thread-128988] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:02:59.366 [DEBUG] [Thread-128988] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:02:59.366 [DEBUG] [Thread-128988] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T14:02:59.366 [DEBUG] [Thread-128988] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:02:59.385 [INFO] [Thread-128988] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:02:59.385 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T14:02:59.386 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:03:00.209 [DEBUG] [Thread-128988] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:03:00.210 [DEBUG] [Thread-128988] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:03:00.258 [DEBUG] [Thread-128988] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:03:00.258 [DEBUG] [Thread-128988] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:03:00.268 [DEBUG] [Thread-128988] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:03:00.277 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:03:00.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T14:03:00.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T14:03:00.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:03:00.296 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:03:00.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:03:00.304 [DEBUG] [Thread-128988] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:03:12.305 [DEBUG] [Thread-128990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:03:17.233 [DEBUG] [Thread-128991 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:03:27.353 [DEBUG] [Thread-128992 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:03:30.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T14:03:30.327 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T14:03:30.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T14:03:31.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 14, 3, 12), 33.97, 9.85, 0.0, 36.82, 25.63, 0, 0, 0, 2, 0, 0),)
2025-12-31T14:03:31.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 14:03:12
2025-12-31T14:03:31.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T14:03:31.333 [DEBUG] [Thread-128993] [transport.py] [_log()] starting thread (client mode): 0xb6bb22c0
2025-12-31T14:03:31.333 [DEBUG] [Thread-128993] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:03:31.353 [DEBUG] [Thread-128993] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T14:03:31.353 [INFO] [Thread-128993] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T14:03:31.356 [DEBUG] [Thread-128993] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:03:31.356 [DEBUG] [Thread-128993] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T14:03:31.356 [DEBUG] [Thread-128993] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:03:31.356 [DEBUG] [Thread-128993] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:03:31.356 [DEBUG] [Thread-128993] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:03:31.356 [DEBUG] [Thread-128993] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:03:31.357 [DEBUG] [Thread-128993] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:03:31.357 [DEBUG] [Thread-128993] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:03:31.357 [DEBUG] [Thread-128993] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:03:31.357 [DEBUG] [Thread-128993] [transport.py] [_log()] client lang: <none>
2025-12-31T14:03:31.357 [DEBUG] [Thread-128993] [transport.py] [_log()] server lang: <none>
2025-12-31T14:03:31.357 [DEBUG] [Thread-128993] [transport.py] [_log()] kex follows: False
2025-12-31T14:03:31.357 [DEBUG] [Thread-128993] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:03:31.357 [DEBUG] [Thread-128993] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:03:31.357 [DEBUG] [Thread-128993] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:03:31.357 [DEBUG] [Thread-128993] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:03:31.357 [DEBUG] [Thread-128993] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:03:31.357 [DEBUG] [Thread-128993] [transport.py] [_log()] Compression: none
2025-12-31T14:03:31.357 [DEBUG] [Thread-128993] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:03:31.369 [DEBUG] [Thread-128993] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:03:31.370 [DEBUG] [Thread-128993] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:03:31.370 [DEBUG] [Thread-128993] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T14:03:31.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T14:03:31.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:03:31.372 [DEBUG] [Thread-128993] [transport.py] [_log()] userauth is OK
2025-12-31T14:03:31.373 [DEBUG] [Thread-128993] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:03:31.373 [DEBUG] [Thread-128993] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:03:31.373 [DEBUG] [Thread-128993] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T14:03:31.373 [DEBUG] [Thread-128993] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:03:31.390 [INFO] [Thread-128993] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:03:31.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:03:32.177 [DEBUG] [Thread-128993] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:03:32.177 [DEBUG] [Thread-128993] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:03:32.177 [DEBUG] [Thread-128993] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T14:03:32.218 [DEBUG] [Thread-128993] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:03:32.218 [DEBUG] [Thread-128993] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:03:32.220 [DEBUG] [Thread-128993] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:03:32.232 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:03:32.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T14:03:32.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T14:03:32.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T14:03:32.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:03:32.243 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T14:03:32.243 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:03:32.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:03:32.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T14:03:32.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.501878 -999.00  +25.50  32.10     15   -2.60 1 2 2 1 1   888    0 28.98 24.37 ----- 28.2 32.1 295.4 38.5 29.5 -20.8 29.3 -20.1 28.9 -22.8 29.3 -20.4
2025-12-31T14:03:32.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T14:03:32.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T14:03:32.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.501878
2025-12-31T14:03:32.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T14:03:32.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T14:03:32.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T14:03:32.245 [DEBUG] [Thread-128993] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:03:32.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T14:03:32.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T14:03:32.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T14:03:12', tmtdew=33.97, humidity=9.85, cloud=0.0, wind=36.82, temperature=25.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T12:02:42.259', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T14:03: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-12-31T14:03:32.340 [DEBUG] [Thread-128996] [transport.py] [_log()] starting thread (client mode): 0xb6b2a050
2025-12-31T14:03:32.340 [DEBUG] [Thread-128996] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:03:32.355 [DEBUG] [Thread-128996] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T14:03:32.355 [INFO] [Thread-128996] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T14:03:32.362 [DEBUG] [Thread-128996] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:03:32.362 [DEBUG] [Thread-128996] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T14:03:32.363 [DEBUG] [Thread-128996] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:03:32.363 [DEBUG] [Thread-128996] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:03:32.363 [DEBUG] [Thread-128996] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:03:32.363 [DEBUG] [Thread-128996] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:03:32.363 [DEBUG] [Thread-128996] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:03:32.363 [DEBUG] [Thread-128996] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:03:32.363 [DEBUG] [Thread-128996] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:03:32.363 [DEBUG] [Thread-128996] [transport.py] [_log()] client lang: <none>
2025-12-31T14:03:32.363 [DEBUG] [Thread-128996] [transport.py] [_log()] server lang: <none>
2025-12-31T14:03:32.363 [DEBUG] [Thread-128996] [transport.py] [_log()] kex follows: False
2025-12-31T14:03:32.363 [DEBUG] [Thread-128996] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:03:32.363 [DEBUG] [Thread-128996] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:03:32.363 [DEBUG] [Thread-128996] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:03:32.364 [DEBUG] [Thread-128996] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:03:32.364 [DEBUG] [Thread-128996] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:03:32.364 [DEBUG] [Thread-128996] [transport.py] [_log()] Compression: none
2025-12-31T14:03:32.364 [DEBUG] [Thread-128996] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:03:32.422 [DEBUG] [Thread-128996] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:03:32.422 [DEBUG] [Thread-128996] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:03:32.423 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T14:03:32.423 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:03:32.424 [DEBUG] [Thread-128996] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T14:03:32.478 [DEBUG] [Thread-128996] [transport.py] [_log()] userauth is OK
2025-12-31T14:03:32.479 [DEBUG] [Thread-128996] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:03:32.479 [DEBUG] [Thread-128996] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:03:32.479 [DEBUG] [Thread-128996] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T14:03:32.479 [DEBUG] [Thread-128996] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:03:32.498 [INFO] [Thread-128996] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:03:32.498 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T14:03:32.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:03:33.330 [DEBUG] [Thread-128996] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:03:33.330 [DEBUG] [Thread-128996] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:03:33.378 [DEBUG] [Thread-128996] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:03:33.378 [DEBUG] [Thread-128996] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:03:33.387 [DEBUG] [Thread-128996] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:03:33.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:03:33.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T14:03:33.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T14:03:33.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:03:33.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:03:33.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:03:33.424 [DEBUG] [Thread-128996] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:03:42.387 [DEBUG] [Thread-128998 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:03:55.722 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:03:55.723 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:03:57.440 [DEBUG] [Thread-128999 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:04:03.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T14:04:03.432 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T14:04:03.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T14:04:04.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 14, 3, 44), 33.8, 9.9, 0.0, 26.38, 25.75, 0, 0, 0, 2, 0, 0),)
2025-12-31T14:04:04.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 14:03:44
2025-12-31T14:04:04.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T14:04:04.413 [DEBUG] [Thread-129000] [transport.py] [_log()] starting thread (client mode): 0xb6bbbbe0
2025-12-31T14:04:04.414 [DEBUG] [Thread-129000] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:04:04.434 [DEBUG] [Thread-129000] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T14:04:04.434 [INFO] [Thread-129000] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T14:04:04.437 [DEBUG] [Thread-129000] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:04:04.437 [DEBUG] [Thread-129000] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T14:04:04.437 [DEBUG] [Thread-129000] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:04:04.437 [DEBUG] [Thread-129000] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:04:04.437 [DEBUG] [Thread-129000] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:04:04.437 [DEBUG] [Thread-129000] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:04:04.437 [DEBUG] [Thread-129000] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:04:04.437 [DEBUG] [Thread-129000] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:04:04.437 [DEBUG] [Thread-129000] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:04:04.437 [DEBUG] [Thread-129000] [transport.py] [_log()] client lang: <none>
2025-12-31T14:04:04.437 [DEBUG] [Thread-129000] [transport.py] [_log()] server lang: <none>
2025-12-31T14:04:04.437 [DEBUG] [Thread-129000] [transport.py] [_log()] kex follows: False
2025-12-31T14:04:04.437 [DEBUG] [Thread-129000] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:04:04.437 [DEBUG] [Thread-129000] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:04:04.437 [DEBUG] [Thread-129000] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:04:04.437 [DEBUG] [Thread-129000] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:04:04.437 [DEBUG] [Thread-129000] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:04:04.437 [DEBUG] [Thread-129000] [transport.py] [_log()] Compression: none
2025-12-31T14:04:04.437 [DEBUG] [Thread-129000] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:04:04.456 [DEBUG] [Thread-129000] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:04:04.456 [DEBUG] [Thread-129000] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:04:04.457 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T14:04:04.457 [DEBUG] [Thread-129000] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T14:04:04.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:04:04.459 [DEBUG] [Thread-129000] [transport.py] [_log()] userauth is OK
2025-12-31T14:04:04.460 [DEBUG] [Thread-129000] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:04:04.460 [DEBUG] [Thread-129000] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:04:04.460 [DEBUG] [Thread-129000] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T14:04:04.460 [DEBUG] [Thread-129000] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:04:04.495 [INFO] [Thread-129000] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:04:04.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:04:05.127 [DEBUG] [Thread-129000] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:04:05.127 [DEBUG] [Thread-129000] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:04:05.127 [DEBUG] [Thread-129000] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T14:04:05.168 [DEBUG] [Thread-129000] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:04:05.168 [DEBUG] [Thread-129000] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:04:05.172 [DEBUG] [Thread-129000] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:04:05.183 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:04:05.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T14:04:05.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T14:04:05.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T14:04:05.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:04:05.195 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T14:04:05.195 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:04:05.195 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:04:05.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T14:04:05.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.502225 -999.00  +25.10  18.89     15   -2.60 1 2 1 1 1   888    0 28.94 18.39 ----- 16.3 18.9 289.2 31.7 29.5 -21.1 29.3 -20.4 28.8 -21.3 29.2 -20.5
2025-12-31T14:04:05.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T14:04:05.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T14:04:05.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.502225
2025-12-31T14:04:05.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T14:04:05.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T14:04:05.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T14:04:05.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T14:04:05.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T14:04:05.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T14:03:44', tmtdew=33.8, humidity=9.9, cloud=0.0, wind=26.38, temperature=25.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T12:03:12.240', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T14:04:05.198 [DEBUG] [Thread-129000] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:04:05.281 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T14:04:05.293 [DEBUG] [Thread-129003] [transport.py] [_log()] starting thread (client mode): 0xb6ba1330
2025-12-31T14:04:05.293 [DEBUG] [Thread-129003] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:04:05.307 [DEBUG] [Thread-129003] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T14:04:05.308 [INFO] [Thread-129003] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T14:04:05.315 [DEBUG] [Thread-129003] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:04:05.315 [DEBUG] [Thread-129003] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T14:04:05.315 [DEBUG] [Thread-129003] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:04:05.315 [DEBUG] [Thread-129003] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:04:05.316 [DEBUG] [Thread-129003] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:04:05.316 [DEBUG] [Thread-129003] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:04:05.316 [DEBUG] [Thread-129003] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:04:05.316 [DEBUG] [Thread-129003] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:04:05.316 [DEBUG] [Thread-129003] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:04:05.316 [DEBUG] [Thread-129003] [transport.py] [_log()] client lang: <none>
2025-12-31T14:04:05.316 [DEBUG] [Thread-129003] [transport.py] [_log()] server lang: <none>
2025-12-31T14:04:05.316 [DEBUG] [Thread-129003] [transport.py] [_log()] kex follows: False
2025-12-31T14:04:05.316 [DEBUG] [Thread-129003] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:04:05.316 [DEBUG] [Thread-129003] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:04:05.316 [DEBUG] [Thread-129003] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:04:05.316 [DEBUG] [Thread-129003] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:04:05.316 [DEBUG] [Thread-129003] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:04:05.316 [DEBUG] [Thread-129003] [transport.py] [_log()] Compression: none
2025-12-31T14:04:05.316 [DEBUG] [Thread-129003] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:04:05.372 [DEBUG] [Thread-129003] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:04:05.373 [DEBUG] [Thread-129003] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:04:05.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T14:04:05.374 [DEBUG] [Thread-129003] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T14:04:05.375 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:04:05.429 [DEBUG] [Thread-129003] [transport.py] [_log()] userauth is OK
2025-12-31T14:04:05.429 [DEBUG] [Thread-129003] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:04:05.429 [DEBUG] [Thread-129003] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:04:05.430 [DEBUG] [Thread-129003] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T14:04:05.430 [DEBUG] [Thread-129003] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:04:05.449 [INFO] [Thread-129003] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:04:05.449 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T14:04:05.451 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:04:06.310 [DEBUG] [Thread-129003] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:04:06.310 [DEBUG] [Thread-129003] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:04:06.358 [DEBUG] [Thread-129003] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:04:06.358 [DEBUG] [Thread-129003] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:04:06.367 [DEBUG] [Thread-129003] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:04:06.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:04:06.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T14:04:06.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T14:04:06.393 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:04:06.393 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:04:06.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:04:06.401 [DEBUG] [Thread-129003] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:04:12.478 [DEBUG] [Thread-129005 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:04:17.283 [DEBUG] [Thread-129006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:04:27.523 [DEBUG] [Thread-129007 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:04:36.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T14:04:36.416 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T14:04:36.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T14:04:37.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 14, 4, 16), 33.8, 9.88, 0.0, 28.42, 25.67, 0, 0, 0, 2, 0, 0),)
2025-12-31T14:04:37.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 14:04:16
2025-12-31T14:04:37.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T14:04:37.389 [DEBUG] [Thread-129008] [transport.py] [_log()] starting thread (client mode): 0xb6b15ed0
2025-12-31T14:04:37.389 [DEBUG] [Thread-129008] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:04:37.409 [DEBUG] [Thread-129008] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T14:04:37.410 [INFO] [Thread-129008] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T14:04:37.411 [DEBUG] [Thread-129008] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:04:37.411 [DEBUG] [Thread-129008] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T14:04:37.411 [DEBUG] [Thread-129008] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:04:37.411 [DEBUG] [Thread-129008] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:04:37.411 [DEBUG] [Thread-129008] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:04:37.411 [DEBUG] [Thread-129008] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:04:37.411 [DEBUG] [Thread-129008] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:04:37.411 [DEBUG] [Thread-129008] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:04:37.411 [DEBUG] [Thread-129008] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:04:37.411 [DEBUG] [Thread-129008] [transport.py] [_log()] client lang: <none>
2025-12-31T14:04:37.411 [DEBUG] [Thread-129008] [transport.py] [_log()] server lang: <none>
2025-12-31T14:04:37.411 [DEBUG] [Thread-129008] [transport.py] [_log()] kex follows: False
2025-12-31T14:04:37.411 [DEBUG] [Thread-129008] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:04:37.411 [DEBUG] [Thread-129008] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:04:37.411 [DEBUG] [Thread-129008] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:04:37.411 [DEBUG] [Thread-129008] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:04:37.411 [DEBUG] [Thread-129008] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:04:37.411 [DEBUG] [Thread-129008] [transport.py] [_log()] Compression: none
2025-12-31T14:04:37.411 [DEBUG] [Thread-129008] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:04:37.424 [DEBUG] [Thread-129008] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:04:37.425 [DEBUG] [Thread-129008] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:04:37.425 [DEBUG] [Thread-129008] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T14:04:37.425 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T14:04:37.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:04:37.427 [DEBUG] [Thread-129008] [transport.py] [_log()] userauth is OK
2025-12-31T14:04:37.427 [DEBUG] [Thread-129008] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:04:37.427 [DEBUG] [Thread-129008] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:04:37.427 [DEBUG] [Thread-129008] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T14:04:37.427 [DEBUG] [Thread-129008] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:04:37.446 [INFO] [Thread-129008] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:04:37.447 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:04:38.221 [DEBUG] [Thread-129008] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:04:38.221 [DEBUG] [Thread-129008] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:04:38.222 [DEBUG] [Thread-129008] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T14:04:38.262 [DEBUG] [Thread-129008] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:04:38.262 [DEBUG] [Thread-129008] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:04:38.266 [DEBUG] [Thread-129008] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:04:38.272 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:04:38.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T14:04:38.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T14:04:38.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T14:04:38.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:04:38.283 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T14:04:38.284 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:04:38.284 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:04:38.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T14:04:38.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.502573 -999.00  +25.20  17.60     15   -2.90 1 2 1 1 1   888    0 28.38 12.87 ----- 17.0 17.6 276.4 29.2 29.4 -21.8 29.2 -21.0 28.8 -22.4 29.2 -20.8
2025-12-31T14:04:38.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T14:04:38.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T14:04:38.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.502573
2025-12-31T14:04:38.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T14:04:38.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T14:04:38.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T14:04:38.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T14:04:38.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T14:04:38.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T14:04:16', tmtdew=33.8, humidity=9.88, cloud=0.0, wind=28.42, temperature=25.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T12:03:42.307', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T14:04:38.286 [DEBUG] [Thread-129008] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:04:38.370 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T14:04:38.382 [DEBUG] [Thread-129011] [transport.py] [_log()] starting thread (client mode): 0xb95b0c40
2025-12-31T14:04:38.382 [DEBUG] [Thread-129011] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:04:38.399 [DEBUG] [Thread-129011] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T14:04:38.399 [INFO] [Thread-129011] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T14:04:38.406 [DEBUG] [Thread-129011] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:04:38.407 [DEBUG] [Thread-129011] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T14:04:38.407 [DEBUG] [Thread-129011] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:04:38.407 [DEBUG] [Thread-129011] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:04:38.407 [DEBUG] [Thread-129011] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:04:38.407 [DEBUG] [Thread-129011] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:04:38.407 [DEBUG] [Thread-129011] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:04:38.407 [DEBUG] [Thread-129011] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:04:38.407 [DEBUG] [Thread-129011] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:04:38.407 [DEBUG] [Thread-129011] [transport.py] [_log()] client lang: <none>
2025-12-31T14:04:38.407 [DEBUG] [Thread-129011] [transport.py] [_log()] server lang: <none>
2025-12-31T14:04:38.407 [DEBUG] [Thread-129011] [transport.py] [_log()] kex follows: False
2025-12-31T14:04:38.407 [DEBUG] [Thread-129011] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:04:38.407 [DEBUG] [Thread-129011] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:04:38.407 [DEBUG] [Thread-129011] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:04:38.407 [DEBUG] [Thread-129011] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:04:38.407 [DEBUG] [Thread-129011] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:04:38.407 [DEBUG] [Thread-129011] [transport.py] [_log()] Compression: none
2025-12-31T14:04:38.408 [DEBUG] [Thread-129011] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:04:38.466 [DEBUG] [Thread-129011] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:04:38.466 [DEBUG] [Thread-129011] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:04:38.467 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T14:04:38.467 [DEBUG] [Thread-129011] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T14:04:38.469 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:04:38.522 [DEBUG] [Thread-129011] [transport.py] [_log()] userauth is OK
2025-12-31T14:04:38.522 [DEBUG] [Thread-129011] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:04:38.522 [DEBUG] [Thread-129011] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:04:38.522 [DEBUG] [Thread-129011] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T14:04:38.522 [DEBUG] [Thread-129011] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:04:38.542 [INFO] [Thread-129011] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:04:38.543 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T14:04:38.543 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:04:39.419 [DEBUG] [Thread-129011] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:04:39.419 [DEBUG] [Thread-129011] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:04:39.467 [DEBUG] [Thread-129011] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:04:39.467 [DEBUG] [Thread-129011] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:04:39.476 [DEBUG] [Thread-129011] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:04:39.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:04:39.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-12-31T14:04:39.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T14:04:39.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:04:39.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:04:39.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:04:39.513 [DEBUG] [Thread-129011] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:04:42.557 [DEBUG] [Thread-129013 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:04:55.866 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:04:55.866 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:04:57.607 [DEBUG] [Thread-129014 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:05:09.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T14:05:09.535 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T14:05:09.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T14:05:10.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 14, 4, 48), 33.74, 9.87, 0.0, 27.19, 25.35, 0, 0, 0, 2, 0, 0),)
2025-12-31T14:05:10.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 14:04:48
2025-12-31T14:05:10.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T14:05:10.535 [DEBUG] [Thread-129015] [transport.py] [_log()] starting thread (client mode): 0xb6b155d0
2025-12-31T14:05:10.535 [DEBUG] [Thread-129015] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:05:10.550 [DEBUG] [Thread-129015] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T14:05:10.550 [INFO] [Thread-129015] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T14:05:10.555 [DEBUG] [Thread-129015] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:05:10.555 [DEBUG] [Thread-129015] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T14:05:10.555 [DEBUG] [Thread-129015] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:05:10.555 [DEBUG] [Thread-129015] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:05:10.556 [DEBUG] [Thread-129015] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:05:10.556 [DEBUG] [Thread-129015] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:05:10.556 [DEBUG] [Thread-129015] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:05:10.556 [DEBUG] [Thread-129015] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:05:10.556 [DEBUG] [Thread-129015] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:05:10.556 [DEBUG] [Thread-129015] [transport.py] [_log()] client lang: <none>
2025-12-31T14:05:10.556 [DEBUG] [Thread-129015] [transport.py] [_log()] server lang: <none>
2025-12-31T14:05:10.556 [DEBUG] [Thread-129015] [transport.py] [_log()] kex follows: False
2025-12-31T14:05:10.556 [DEBUG] [Thread-129015] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:05:10.556 [DEBUG] [Thread-129015] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:05:10.556 [DEBUG] [Thread-129015] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:05:10.556 [DEBUG] [Thread-129015] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:05:10.556 [DEBUG] [Thread-129015] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:05:10.556 [DEBUG] [Thread-129015] [transport.py] [_log()] Compression: none
2025-12-31T14:05:10.556 [DEBUG] [Thread-129015] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:05:10.567 [DEBUG] [Thread-129015] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:05:10.567 [DEBUG] [Thread-129015] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:05:10.568 [DEBUG] [Thread-129015] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T14:05:10.568 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T14:05:10.568 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:05:10.569 [DEBUG] [Thread-129015] [transport.py] [_log()] userauth is OK
2025-12-31T14:05:10.570 [DEBUG] [Thread-129015] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:05:10.570 [DEBUG] [Thread-129015] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:05:10.570 [DEBUG] [Thread-129015] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T14:05:10.570 [DEBUG] [Thread-129015] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:05:10.593 [INFO] [Thread-129015] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:05:10.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:05:12.639 [DEBUG] [Thread-129017 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:05:14.159 [DEBUG] [Thread-129015] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:05:14.159 [DEBUG] [Thread-129015] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:05:14.160 [DEBUG] [Thread-129015] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T14:05:14.200 [DEBUG] [Thread-129015] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:05:14.200 [DEBUG] [Thread-129015] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:05:14.204 [DEBUG] [Thread-129015] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:05:14.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:05:14.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T14:05:14.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T14:05:14.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T14:05:14.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:05:14.382 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T14:05:14.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:05:14.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:05:14.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T14:05:14.383 [WARNING] [poll_weather_worker] [driver.py] [poll_weather_state()] Unable to get atlas cloud data: list index out of range
2025-12-31T14:05:14.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T14:04:48', tmtdew=33.74, humidity=9.87, cloud=0.0, wind=27.19, temperature=25.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp=None, atlas_cloud=None, atlas_rain=None, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T14:05:14.385 [DEBUG] [Thread-129015] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:05:14.469 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T14:05:14.482 [DEBUG] [Thread-129019] [transport.py] [_log()] starting thread (client mode): 0xb6b145e0
2025-12-31T14:05:14.482 [DEBUG] [Thread-129019] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:05:14.498 [DEBUG] [Thread-129019] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T14:05:14.498 [INFO] [Thread-129019] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T14:05:14.505 [DEBUG] [Thread-129019] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:05:14.505 [DEBUG] [Thread-129019] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T14:05:14.505 [DEBUG] [Thread-129019] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:05:14.505 [DEBUG] [Thread-129019] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:05:14.506 [DEBUG] [Thread-129019] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:05:14.506 [DEBUG] [Thread-129019] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:05:14.506 [DEBUG] [Thread-129019] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:05:14.506 [DEBUG] [Thread-129019] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:05:14.506 [DEBUG] [Thread-129019] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:05:14.506 [DEBUG] [Thread-129019] [transport.py] [_log()] client lang: <none>
2025-12-31T14:05:14.506 [DEBUG] [Thread-129019] [transport.py] [_log()] server lang: <none>
2025-12-31T14:05:14.506 [DEBUG] [Thread-129019] [transport.py] [_log()] kex follows: False
2025-12-31T14:05:14.506 [DEBUG] [Thread-129019] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:05:14.506 [DEBUG] [Thread-129019] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:05:14.506 [DEBUG] [Thread-129019] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:05:14.506 [DEBUG] [Thread-129019] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:05:14.506 [DEBUG] [Thread-129019] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:05:14.506 [DEBUG] [Thread-129019] [transport.py] [_log()] Compression: none
2025-12-31T14:05:14.506 [DEBUG] [Thread-129019] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:05:14.563 [DEBUG] [Thread-129019] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:05:14.564 [DEBUG] [Thread-129019] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:05:14.564 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T14:05:14.565 [DEBUG] [Thread-129019] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T14:05:14.566 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:05:14.619 [DEBUG] [Thread-129019] [transport.py] [_log()] userauth is OK
2025-12-31T14:05:14.620 [DEBUG] [Thread-129019] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:05:14.620 [DEBUG] [Thread-129019] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:05:14.620 [DEBUG] [Thread-129019] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T14:05:14.620 [DEBUG] [Thread-129019] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:05:14.639 [INFO] [Thread-129019] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:05:14.639 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T14:05:14.639 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:05:15.453 [DEBUG] [Thread-129019] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:05:15.453 [DEBUG] [Thread-129019] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:05:15.501 [DEBUG] [Thread-129019] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:05:15.501 [DEBUG] [Thread-129019] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:05:15.510 [DEBUG] [Thread-129019] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:05:15.519 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:05: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')
2025-12-31T14:05:15.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T14:05:15.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:05:15.536 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:05:15.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:05:15.544 [DEBUG] [Thread-129019] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:05:17.341 [DEBUG] [Thread-129021 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:05:27.672 [DEBUG] [Thread-129022 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:05:42.710 [DEBUG] [Thread-129023 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:05:45.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T14:05:45.557 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T14:05:45.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-12-31T14:05:46.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 14, 5, 20), 33.83, 9.82, 0.0, 33.86, 25.46, 0, 0, 0, 2, 0, 0),)
2025-12-31T14:05:46.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 14:05:20
2025-12-31T14:05:46.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T14:05:46.600 [DEBUG] [Thread-129024] [transport.py] [_log()] starting thread (client mode): 0xb6ba0cd0
2025-12-31T14:05:46.600 [DEBUG] [Thread-129024] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:05:46.620 [DEBUG] [Thread-129024] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T14:05:46.620 [INFO] [Thread-129024] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T14:05:46.623 [DEBUG] [Thread-129024] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:05:46.623 [DEBUG] [Thread-129024] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T14:05:46.623 [DEBUG] [Thread-129024] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:05:46.623 [DEBUG] [Thread-129024] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:05:46.623 [DEBUG] [Thread-129024] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:05:46.623 [DEBUG] [Thread-129024] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:05:46.623 [DEBUG] [Thread-129024] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:05:46.623 [DEBUG] [Thread-129024] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:05:46.623 [DEBUG] [Thread-129024] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:05:46.623 [DEBUG] [Thread-129024] [transport.py] [_log()] client lang: <none>
2025-12-31T14:05:46.623 [DEBUG] [Thread-129024] [transport.py] [_log()] server lang: <none>
2025-12-31T14:05:46.623 [DEBUG] [Thread-129024] [transport.py] [_log()] kex follows: False
2025-12-31T14:05:46.623 [DEBUG] [Thread-129024] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:05:46.623 [DEBUG] [Thread-129024] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:05:46.623 [DEBUG] [Thread-129024] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:05:46.623 [DEBUG] [Thread-129024] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:05:46.623 [DEBUG] [Thread-129024] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:05:46.623 [DEBUG] [Thread-129024] [transport.py] [_log()] Compression: none
2025-12-31T14:05:46.623 [DEBUG] [Thread-129024] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:05:46.641 [DEBUG] [Thread-129024] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:05:46.641 [DEBUG] [Thread-129024] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:05:46.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T14:05:46.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:05:46.642 [DEBUG] [Thread-129024] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T14:05:46.643 [DEBUG] [Thread-129024] [transport.py] [_log()] userauth is OK
2025-12-31T14:05:46.643 [DEBUG] [Thread-129024] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:05:46.643 [DEBUG] [Thread-129024] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:05:46.643 [DEBUG] [Thread-129024] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T14:05:46.643 [DEBUG] [Thread-129024] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:05:46.662 [INFO] [Thread-129024] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:05:46.662 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:05:47.269 [DEBUG] [Thread-129024] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:05:47.269 [DEBUG] [Thread-129024] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:05:47.269 [DEBUG] [Thread-129024] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T14:05:47.309 [DEBUG] [Thread-129024] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:05:47.309 [DEBUG] [Thread-129024] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:05:47.312 [DEBUG] [Thread-129024] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:05:47.324 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:05:47.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T14:05:47.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T14:05:47.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T14:05:47.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:05:47.329 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T14:05:47.329 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:05:47.329 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:05:47.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T14:05:47.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.503614 -999.00  +25.60  24.62     14   -2.90 1 2 1 1 1   888    0 28.26 12.48 ----- 24.9 24.6 282.2 29.2 29.6 -21.5 29.4 -20.3 28.9 -21.0 29.4 -20.1
2025-12-31T14:05:47.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T14:05:47.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T14:05:47.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.503614
2025-12-31T14:05:47.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T14:05:47.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T14:05:47.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T14:05:47.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T14:05:47.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T14:05:47.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T14:05:20', tmtdew=33.83, humidity=9.82, cloud=0.0, wind=33.86, temperature=25.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T12:05:12.250', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T14:05:47.330 [DEBUG] [Thread-129024] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:05:47.404 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T14:05:47.503 [DEBUG] [Thread-129027] [transport.py] [_log()] starting thread (client mode): 0xb6bb2aa0
2025-12-31T14:05:47.503 [DEBUG] [Thread-129027] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:05:47.518 [DEBUG] [Thread-129027] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T14:05:47.518 [INFO] [Thread-129027] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T14:05:47.525 [DEBUG] [Thread-129027] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:05:47.525 [DEBUG] [Thread-129027] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T14:05:47.525 [DEBUG] [Thread-129027] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:05:47.525 [DEBUG] [Thread-129027] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:05:47.525 [DEBUG] [Thread-129027] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:05:47.525 [DEBUG] [Thread-129027] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:05:47.525 [DEBUG] [Thread-129027] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:05:47.525 [DEBUG] [Thread-129027] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:05:47.525 [DEBUG] [Thread-129027] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:05:47.525 [DEBUG] [Thread-129027] [transport.py] [_log()] client lang: <none>
2025-12-31T14:05:47.525 [DEBUG] [Thread-129027] [transport.py] [_log()] server lang: <none>
2025-12-31T14:05:47.525 [DEBUG] [Thread-129027] [transport.py] [_log()] kex follows: False
2025-12-31T14:05:47.525 [DEBUG] [Thread-129027] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:05:47.525 [DEBUG] [Thread-129027] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:05:47.525 [DEBUG] [Thread-129027] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:05:47.525 [DEBUG] [Thread-129027] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:05:47.525 [DEBUG] [Thread-129027] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:05:47.525 [DEBUG] [Thread-129027] [transport.py] [_log()] Compression: none
2025-12-31T14:05:47.525 [DEBUG] [Thread-129027] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:05:47.586 [DEBUG] [Thread-129027] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:05:47.586 [DEBUG] [Thread-129027] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:05:47.586 [DEBUG] [Thread-129027] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T14:05:47.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T14:05:47.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:05:47.644 [DEBUG] [Thread-129027] [transport.py] [_log()] userauth is OK
2025-12-31T14:05:47.644 [DEBUG] [Thread-129027] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:05:47.644 [DEBUG] [Thread-129027] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:05:47.644 [DEBUG] [Thread-129027] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T14:05:47.644 [DEBUG] [Thread-129027] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:05:47.657 [INFO] [Thread-129027] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:05: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-12-31T14:05:47.657 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:05:48.469 [DEBUG] [Thread-129027] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:05:48.469 [DEBUG] [Thread-129027] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:05:48.517 [DEBUG] [Thread-129027] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:05:48.517 [DEBUG] [Thread-129027] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:05:48.525 [DEBUG] [Thread-129027] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:05:48.533 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:05:48.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T14:05:48.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T14:05:48.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:05:48.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:05:48.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:05:48.556 [DEBUG] [Thread-129027] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:05:56.013 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:05:56.014 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:05:57.740 [DEBUG] [Thread-129029 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:06:12.794 [DEBUG] [Thread-129030 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:06:17.391 [DEBUG] [Thread-129031 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:06:18.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T14:06:18.579 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T14:06:18.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-12-31T14:06:19.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 14, 5, 52), 34.02, 9.68, 0.0, 23.22, 25.68, 0, 0, 0, 2, 0, 0),)
2025-12-31T14:06:19.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 14:05:52
2025-12-31T14:06:19.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T14:06:19.572 [DEBUG] [Thread-129032] [transport.py] [_log()] starting thread (client mode): 0xb95b35b0
2025-12-31T14:06:19.573 [DEBUG] [Thread-129032] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:06:19.588 [DEBUG] [Thread-129032] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T14:06:19.589 [INFO] [Thread-129032] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T14:06:19.590 [DEBUG] [Thread-129032] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:06:19.590 [DEBUG] [Thread-129032] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T14:06:19.590 [DEBUG] [Thread-129032] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:06:19.590 [DEBUG] [Thread-129032] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:06:19.590 [DEBUG] [Thread-129032] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:06:19.590 [DEBUG] [Thread-129032] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:06:19.590 [DEBUG] [Thread-129032] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:06:19.590 [DEBUG] [Thread-129032] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:06:19.590 [DEBUG] [Thread-129032] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:06:19.590 [DEBUG] [Thread-129032] [transport.py] [_log()] client lang: <none>
2025-12-31T14:06:19.590 [DEBUG] [Thread-129032] [transport.py] [_log()] server lang: <none>
2025-12-31T14:06:19.590 [DEBUG] [Thread-129032] [transport.py] [_log()] kex follows: False
2025-12-31T14:06:19.590 [DEBUG] [Thread-129032] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:06:19.590 [DEBUG] [Thread-129032] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:06:19.590 [DEBUG] [Thread-129032] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:06:19.590 [DEBUG] [Thread-129032] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:06:19.590 [DEBUG] [Thread-129032] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:06:19.590 [DEBUG] [Thread-129032] [transport.py] [_log()] Compression: none
2025-12-31T14:06:19.590 [DEBUG] [Thread-129032] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:06:19.608 [DEBUG] [Thread-129032] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:06:19.609 [DEBUG] [Thread-129032] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:06:19.609 [DEBUG] [Thread-129032] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T14:06:19.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T14:06:19.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:06:19.611 [DEBUG] [Thread-129032] [transport.py] [_log()] userauth is OK
2025-12-31T14:06:19.611 [DEBUG] [Thread-129032] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:06:19.611 [DEBUG] [Thread-129032] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:06:19.612 [DEBUG] [Thread-129032] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T14:06:19.612 [DEBUG] [Thread-129032] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:06:19.632 [INFO] [Thread-129032] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:06:19.632 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:06:20.370 [DEBUG] [Thread-129032] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:06:20.370 [DEBUG] [Thread-129032] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:06:20.371 [DEBUG] [Thread-129032] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T14:06:20.411 [DEBUG] [Thread-129032] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:06:20.411 [DEBUG] [Thread-129032] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:06:20.415 [DEBUG] [Thread-129032] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:06:20.437 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:06:20.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T14:06:20.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T14:06:20.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T14:06:20.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:06:20.448 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T14:06:20.449 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:06:20.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:06:20.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T14:06:20.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.503962 -999.00  +25.10  16.43     15   -2.90 1 2 1 1 1   888    0 28.56 16.43 ----- 13.8 16.4 288.6 29.9 29.3 -20.3 29.3 -19.6 28.4 -23.5 29.2 -19.9
2025-12-31T14:06:20.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T14:06:20.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T14:06:20.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.503962
2025-12-31T14:06:20.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T14:06:20.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T14:06:20.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T14:06:20.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T14:06:20.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T14:06:20.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T14:05:52', tmtdew=34.02, humidity=9.68, cloud=0.0, wind=23.22, temperature=25.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T12:05:42.317', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T14:06:20.451 [DEBUG] [Thread-129032] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:06: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-12-31T14:06:20.546 [DEBUG] [Thread-129035] [transport.py] [_log()] starting thread (client mode): 0xb95b3550
2025-12-31T14:06:20.546 [DEBUG] [Thread-129035] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:06:20.562 [DEBUG] [Thread-129035] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T14:06:20.562 [INFO] [Thread-129035] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T14:06:20.569 [DEBUG] [Thread-129035] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:06:20.570 [DEBUG] [Thread-129035] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T14:06:20.570 [DEBUG] [Thread-129035] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:06:20.570 [DEBUG] [Thread-129035] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:06:20.570 [DEBUG] [Thread-129035] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:06:20.570 [DEBUG] [Thread-129035] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:06:20.570 [DEBUG] [Thread-129035] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:06:20.570 [DEBUG] [Thread-129035] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:06:20.570 [DEBUG] [Thread-129035] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:06:20.570 [DEBUG] [Thread-129035] [transport.py] [_log()] client lang: <none>
2025-12-31T14:06:20.570 [DEBUG] [Thread-129035] [transport.py] [_log()] server lang: <none>
2025-12-31T14:06:20.570 [DEBUG] [Thread-129035] [transport.py] [_log()] kex follows: False
2025-12-31T14:06:20.570 [DEBUG] [Thread-129035] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:06:20.570 [DEBUG] [Thread-129035] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:06:20.570 [DEBUG] [Thread-129035] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:06:20.570 [DEBUG] [Thread-129035] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:06:20.570 [DEBUG] [Thread-129035] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:06:20.571 [DEBUG] [Thread-129035] [transport.py] [_log()] Compression: none
2025-12-31T14:06:20.571 [DEBUG] [Thread-129035] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:06:20.629 [DEBUG] [Thread-129035] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:06:20.630 [DEBUG] [Thread-129035] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:06:20.631 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T14:06:20.631 [DEBUG] [Thread-129035] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T14:06:20.632 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:06:20.685 [DEBUG] [Thread-129035] [transport.py] [_log()] userauth is OK
2025-12-31T14:06:20.685 [DEBUG] [Thread-129035] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:06:20.685 [DEBUG] [Thread-129035] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:06:20.686 [DEBUG] [Thread-129035] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T14:06:20.686 [DEBUG] [Thread-129035] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:06:20.699 [INFO] [Thread-129035] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:06:20.699 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T14:06:20.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:06:21.533 [DEBUG] [Thread-129035] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:06:21.533 [DEBUG] [Thread-129035] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:06:21.581 [DEBUG] [Thread-129035] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:06:21.581 [DEBUG] [Thread-129035] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:06:21.590 [DEBUG] [Thread-129035] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:06:21.599 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:06:21.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T14:06: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-12-31T14:06:21.618 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:06:21.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:06:21.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:06:21.627 [DEBUG] [Thread-129035] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:06:27.828 [DEBUG] [Thread-129037 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:06:42.872 [DEBUG] [Thread-129038 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:06:51.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T14:06:51.646 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T14:06:51.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T14:06:52.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 14, 6, 24), 33.81, 9.82, 0.0, 21.88, 25.56, 0, 0, 0, 2, 0, 0),)
2025-12-31T14:06:52.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 14:06:24
2025-12-31T14:06:52.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T14:06:52.630 [DEBUG] [Thread-129039] [transport.py] [_log()] starting thread (client mode): 0xb6b633a0
2025-12-31T14:06:52.630 [DEBUG] [Thread-129039] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:06:52.651 [DEBUG] [Thread-129039] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T14:06:52.651 [INFO] [Thread-129039] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T14:06:52.655 [DEBUG] [Thread-129039] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:06:52.655 [DEBUG] [Thread-129039] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T14:06:52.655 [DEBUG] [Thread-129039] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:06:52.655 [DEBUG] [Thread-129039] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:06:52.655 [DEBUG] [Thread-129039] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:06:52.655 [DEBUG] [Thread-129039] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:06:52.655 [DEBUG] [Thread-129039] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:06:52.655 [DEBUG] [Thread-129039] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:06:52.656 [DEBUG] [Thread-129039] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:06:52.656 [DEBUG] [Thread-129039] [transport.py] [_log()] client lang: <none>
2025-12-31T14:06:52.656 [DEBUG] [Thread-129039] [transport.py] [_log()] server lang: <none>
2025-12-31T14:06:52.656 [DEBUG] [Thread-129039] [transport.py] [_log()] kex follows: False
2025-12-31T14:06:52.656 [DEBUG] [Thread-129039] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:06:52.656 [DEBUG] [Thread-129039] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:06:52.656 [DEBUG] [Thread-129039] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:06:52.656 [DEBUG] [Thread-129039] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:06:52.656 [DEBUG] [Thread-129039] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:06:52.656 [DEBUG] [Thread-129039] [transport.py] [_log()] Compression: none
2025-12-31T14:06:52.657 [DEBUG] [Thread-129039] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:06:52.675 [DEBUG] [Thread-129039] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:06:52.676 [DEBUG] [Thread-129039] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:06:52.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T14:06:52.678 [DEBUG] [Thread-129039] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T14:06:52.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:06:52.679 [DEBUG] [Thread-129039] [transport.py] [_log()] userauth is OK
2025-12-31T14:06:52.680 [DEBUG] [Thread-129039] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:06:52.680 [DEBUG] [Thread-129039] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:06:52.680 [DEBUG] [Thread-129039] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T14:06:52.680 [DEBUG] [Thread-129039] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:06:52.698 [INFO] [Thread-129039] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:06:52.699 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:06:53.313 [DEBUG] [Thread-129039] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:06:53.314 [DEBUG] [Thread-129039] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:06:53.314 [DEBUG] [Thread-129039] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T14:06:53.355 [DEBUG] [Thread-129039] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:06:53.355 [DEBUG] [Thread-129039] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:06:53.359 [DEBUG] [Thread-129039] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:06:53.372 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:06:53.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T14:06:53.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T14:06:53.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T14:06:53.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:06:53.385 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T14:06:53.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:06:53.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:06:53.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T14:06:53.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.504309 -999.00  +25.30  23.21     15   -2.60 1 2 1 1 1   888    0 29.35 19.07 ----- 23.0 23.2 274.4 27.5 29.6 -20.3 29.4 -19.4 28.8 -19.5 29.4 -18.7
2025-12-31T14:06:53.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T14:06:53.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T14:06:53.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.504309
2025-12-31T14:06:53.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T14:06:53.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T14:06:53.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T14:06:53.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T14:06:53.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T14:06:53.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T14:06:24', tmtdew=33.81, humidity=9.82, cloud=0.0, wind=21.88, temperature=25.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T12:06:12.298', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T14:06:53.388 [DEBUG] [Thread-129039] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:06:53.470 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T14:06:53.483 [DEBUG] [Thread-129042] [transport.py] [_log()] starting thread (client mode): 0xb6ba0cd0
2025-12-31T14:06:53.483 [DEBUG] [Thread-129042] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:06:53.498 [DEBUG] [Thread-129042] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T14:06:53.499 [INFO] [Thread-129042] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T14:06:53.506 [DEBUG] [Thread-129042] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:06:53.506 [DEBUG] [Thread-129042] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T14:06:53.506 [DEBUG] [Thread-129042] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:06:53.507 [DEBUG] [Thread-129042] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:06:53.507 [DEBUG] [Thread-129042] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:06:53.507 [DEBUG] [Thread-129042] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:06:53.507 [DEBUG] [Thread-129042] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:06:53.507 [DEBUG] [Thread-129042] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:06:53.507 [DEBUG] [Thread-129042] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:06:53.507 [DEBUG] [Thread-129042] [transport.py] [_log()] client lang: <none>
2025-12-31T14:06:53.507 [DEBUG] [Thread-129042] [transport.py] [_log()] server lang: <none>
2025-12-31T14:06:53.507 [DEBUG] [Thread-129042] [transport.py] [_log()] kex follows: False
2025-12-31T14:06:53.507 [DEBUG] [Thread-129042] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:06:53.507 [DEBUG] [Thread-129042] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:06:53.507 [DEBUG] [Thread-129042] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:06:53.507 [DEBUG] [Thread-129042] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:06:53.507 [DEBUG] [Thread-129042] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:06:53.507 [DEBUG] [Thread-129042] [transport.py] [_log()] Compression: none
2025-12-31T14:06:53.507 [DEBUG] [Thread-129042] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:06:53.567 [DEBUG] [Thread-129042] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:06:53.567 [DEBUG] [Thread-129042] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:06:53.568 [DEBUG] [Thread-129042] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T14:06:53.568 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T14:06:53.569 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:06:53.623 [DEBUG] [Thread-129042] [transport.py] [_log()] userauth is OK
2025-12-31T14:06:53.623 [DEBUG] [Thread-129042] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:06:53.623 [DEBUG] [Thread-129042] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:06:53.624 [DEBUG] [Thread-129042] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T14:06:53.624 [DEBUG] [Thread-129042] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:06:53.643 [INFO] [Thread-129042] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:06:53.643 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T14:06:53.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:06:54.484 [DEBUG] [Thread-129042] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:06:54.485 [DEBUG] [Thread-129042] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:06:54.532 [DEBUG] [Thread-129042] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:06:54.533 [DEBUG] [Thread-129042] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:06:54.542 [DEBUG] [Thread-129042] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:06:54.551 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:06:54.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T14:06:54.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T14:06:54.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:06:54.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:06:54.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:06:54.577 [DEBUG] [Thread-129042] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:06:56.153 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:06:56.154 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:06:57.907 [DEBUG] [Thread-129044 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:07:12.945 [DEBUG] [Thread-129045 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:07:17.443 [DEBUG] [Thread-129046 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:07:24.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T14:07:24.600 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T14:07: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-12-31T14:07:25.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 14, 6, 56), 33.85, 9.88, 0.0, 29.15, 25.85, 0, 0, 0, 2, 0, 0),)
2025-12-31T14:07:25.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 14:06:56
2025-12-31T14:07:25.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T14:07:25.594 [DEBUG] [Thread-129047] [transport.py] [_log()] starting thread (client mode): 0xb6b61030
2025-12-31T14:07:25.594 [DEBUG] [Thread-129047] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:07:25.614 [DEBUG] [Thread-129047] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T14:07:25.614 [INFO] [Thread-129047] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T14:07:25.617 [DEBUG] [Thread-129047] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:07:25.617 [DEBUG] [Thread-129047] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T14:07:25.617 [DEBUG] [Thread-129047] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:07:25.617 [DEBUG] [Thread-129047] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:07:25.618 [DEBUG] [Thread-129047] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:07:25.618 [DEBUG] [Thread-129047] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:07:25.618 [DEBUG] [Thread-129047] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:07:25.618 [DEBUG] [Thread-129047] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:07:25.618 [DEBUG] [Thread-129047] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:07:25.618 [DEBUG] [Thread-129047] [transport.py] [_log()] client lang: <none>
2025-12-31T14:07:25.618 [DEBUG] [Thread-129047] [transport.py] [_log()] server lang: <none>
2025-12-31T14:07:25.618 [DEBUG] [Thread-129047] [transport.py] [_log()] kex follows: False
2025-12-31T14:07:25.618 [DEBUG] [Thread-129047] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:07:25.618 [DEBUG] [Thread-129047] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:07:25.618 [DEBUG] [Thread-129047] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:07:25.618 [DEBUG] [Thread-129047] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:07:25.618 [DEBUG] [Thread-129047] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:07:25.618 [DEBUG] [Thread-129047] [transport.py] [_log()] Compression: none
2025-12-31T14:07:25.618 [DEBUG] [Thread-129047] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:07:25.636 [DEBUG] [Thread-129047] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:07:25.636 [DEBUG] [Thread-129047] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:07:25.637 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T14:07:25.637 [DEBUG] [Thread-129047] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T14:07:25.638 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:07:25.639 [DEBUG] [Thread-129047] [transport.py] [_log()] userauth is OK
2025-12-31T14:07:25.639 [DEBUG] [Thread-129047] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:07:25.639 [DEBUG] [Thread-129047] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:07:25.639 [DEBUG] [Thread-129047] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T14:07:25.639 [DEBUG] [Thread-129047] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:07:25.672 [INFO] [Thread-129047] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:07:25.673 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:07:26.425 [DEBUG] [Thread-129047] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:07:26.426 [DEBUG] [Thread-129047] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:07:26.426 [DEBUG] [Thread-129047] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T14:07:26.467 [DEBUG] [Thread-129047] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:07:26.467 [DEBUG] [Thread-129047] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:07:26.471 [DEBUG] [Thread-129047] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:07:26.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:07:26.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T14:07:26.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T14:07:26.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T14:07:26.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:07:26.493 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T14:07:26.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:07:26.493 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:07:26.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T14:07:26.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.504656 -999.00  +24.90  35.06     15   -3.10 1 2 2 1 1   888    0 28.38 17.77 ----- 35.0 35.1 279.8 46.4 29.4 -20.6 29.3 -19.9 28.7 -22.4 29.2 -20.2
2025-12-31T14:07:26.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T14:07:26.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T14:07:26.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.504656
2025-12-31T14:07:26.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T14:07:26.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T14:07:26.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T14:07:26.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T14:07:26.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T14:07:26.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T14:06:56', tmtdew=33.85, humidity=9.88, cloud=0.0, wind=29.15, temperature=25.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T12:06:42.278', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T14:07:26.496 [DEBUG] [Thread-129047] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:07:26.578 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T14:07:26.590 [DEBUG] [Thread-129050] [transport.py] [_log()] starting thread (client mode): 0xb95b1840
2025-12-31T14:07:26.590 [DEBUG] [Thread-129050] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:07:26.605 [DEBUG] [Thread-129050] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T14:07:26.605 [INFO] [Thread-129050] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T14:07:26.613 [DEBUG] [Thread-129050] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:07:26.613 [DEBUG] [Thread-129050] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T14:07:26.613 [DEBUG] [Thread-129050] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:07:26.613 [DEBUG] [Thread-129050] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:07:26.613 [DEBUG] [Thread-129050] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:07:26.613 [DEBUG] [Thread-129050] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:07:26.613 [DEBUG] [Thread-129050] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:07:26.614 [DEBUG] [Thread-129050] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:07:26.614 [DEBUG] [Thread-129050] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:07:26.614 [DEBUG] [Thread-129050] [transport.py] [_log()] client lang: <none>
2025-12-31T14:07:26.614 [DEBUG] [Thread-129050] [transport.py] [_log()] server lang: <none>
2025-12-31T14:07:26.614 [DEBUG] [Thread-129050] [transport.py] [_log()] kex follows: False
2025-12-31T14:07:26.614 [DEBUG] [Thread-129050] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:07:26.614 [DEBUG] [Thread-129050] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:07:26.614 [DEBUG] [Thread-129050] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:07:26.614 [DEBUG] [Thread-129050] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:07:26.614 [DEBUG] [Thread-129050] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:07:26.614 [DEBUG] [Thread-129050] [transport.py] [_log()] Compression: none
2025-12-31T14:07:26.614 [DEBUG] [Thread-129050] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:07:26.672 [DEBUG] [Thread-129050] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:07:26.672 [DEBUG] [Thread-129050] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:07:26.673 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T14:07:26.674 [DEBUG] [Thread-129050] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T14:07:26.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:07:26.728 [DEBUG] [Thread-129050] [transport.py] [_log()] userauth is OK
2025-12-31T14:07:26.728 [DEBUG] [Thread-129050] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:07:26.729 [DEBUG] [Thread-129050] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:07:26.729 [DEBUG] [Thread-129050] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T14:07:26.729 [DEBUG] [Thread-129050] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:07:26.748 [INFO] [Thread-129050] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:07:26.748 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T14:07:26.749 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:07:27.597 [DEBUG] [Thread-129050] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:07:27.597 [DEBUG] [Thread-129050] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:07:27.645 [DEBUG] [Thread-129050] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:07:27.645 [DEBUG] [Thread-129050] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:07:27.655 [DEBUG] [Thread-129050] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:07:27.664 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:07:27.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T14:07:27.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T14:07:27.682 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:07:27.682 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:07:27.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:07:27.690 [DEBUG] [Thread-129050] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:07:27.983 [DEBUG] [Thread-129052 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:07:43.031 [DEBUG] [Thread-129053 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:07:56.295 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:07:56.296 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:07:57.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T14:07:57.713 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T14:07:57.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T14:07:58.057 [DEBUG] [Thread-129054 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:07:58.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 14, 7, 28), 34.23, 9.68, 0.0, 32.41, 26.31, 0, 0, 0, 2, 0, 0),)
2025-12-31T14:07:58.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 14:07:28
2025-12-31T14:07:58.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T14:07:58.721 [DEBUG] [Thread-129055] [transport.py] [_log()] starting thread (client mode): 0xb6ba0fa0
2025-12-31T14:07:58.721 [DEBUG] [Thread-129055] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:07:58.741 [DEBUG] [Thread-129055] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T14:07:58.741 [INFO] [Thread-129055] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T14:07:58.744 [DEBUG] [Thread-129055] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:07:58.745 [DEBUG] [Thread-129055] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T14:07:58.745 [DEBUG] [Thread-129055] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:07:58.745 [DEBUG] [Thread-129055] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:07:58.745 [DEBUG] [Thread-129055] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:07:58.745 [DEBUG] [Thread-129055] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:07:58.745 [DEBUG] [Thread-129055] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:07:58.745 [DEBUG] [Thread-129055] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:07:58.745 [DEBUG] [Thread-129055] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:07:58.745 [DEBUG] [Thread-129055] [transport.py] [_log()] client lang: <none>
2025-12-31T14:07:58.745 [DEBUG] [Thread-129055] [transport.py] [_log()] server lang: <none>
2025-12-31T14:07:58.745 [DEBUG] [Thread-129055] [transport.py] [_log()] kex follows: False
2025-12-31T14:07:58.745 [DEBUG] [Thread-129055] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:07:58.745 [DEBUG] [Thread-129055] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:07:58.745 [DEBUG] [Thread-129055] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:07:58.745 [DEBUG] [Thread-129055] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:07:58.745 [DEBUG] [Thread-129055] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:07:58.745 [DEBUG] [Thread-129055] [transport.py] [_log()] Compression: none
2025-12-31T14:07:58.745 [DEBUG] [Thread-129055] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:07:58.762 [DEBUG] [Thread-129055] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:07:58.762 [DEBUG] [Thread-129055] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:07:58.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T14:07:58.763 [DEBUG] [Thread-129055] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T14:07:58.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:07:58.765 [DEBUG] [Thread-129055] [transport.py] [_log()] userauth is OK
2025-12-31T14:07:58.766 [DEBUG] [Thread-129055] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:07:58.766 [DEBUG] [Thread-129055] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:07:58.766 [DEBUG] [Thread-129055] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T14:07:58.766 [DEBUG] [Thread-129055] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:07:58.803 [INFO] [Thread-129055] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:07:58.803 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:07:59.431 [DEBUG] [Thread-129055] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:07:59.431 [DEBUG] [Thread-129055] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:07:59.431 [DEBUG] [Thread-129055] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T14:07:59.473 [DEBUG] [Thread-129055] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:07:59.473 [DEBUG] [Thread-129055] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:07:59.476 [DEBUG] [Thread-129055] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:07:59.483 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:07:59.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T14:07:59.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T14:07:59.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T14:07:59.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:07:59.496 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T14:07:59.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:07:59.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:07:59.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T14:07:59.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.505003 -999.00  +24.80  37.09     15   -3.30 1 2 2 1 1   888    0 29.39 22.75 ----- 35.1 37.1 277.8 41.0 29.5 -20.3 29.3 -18.9 28.6 -18.5 29.3 -19.2
2025-12-31T14:07:59.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T14:07:59.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T14:07:59.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.505003
2025-12-31T14:07:59.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T14:07:59.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T14:07:59.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T14:07:59.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T14:07:59.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T14:07:59.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T14:07:28', tmtdew=34.23, humidity=9.68, cloud=0.0, wind=32.41, temperature=26.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T12:07:12.259', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T14:07:59.498 [DEBUG] [Thread-129055] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:07:59.582 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T14:07:59.595 [DEBUG] [Thread-129058] [transport.py] [_log()] starting thread (client mode): 0xb6b61e40
2025-12-31T14:07:59.595 [DEBUG] [Thread-129058] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:07:59.610 [DEBUG] [Thread-129058] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T14:07:59.610 [INFO] [Thread-129058] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T14:07:59.617 [DEBUG] [Thread-129058] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:07:59.617 [DEBUG] [Thread-129058] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T14:07:59.617 [DEBUG] [Thread-129058] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:07:59.618 [DEBUG] [Thread-129058] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:07:59.618 [DEBUG] [Thread-129058] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:07:59.618 [DEBUG] [Thread-129058] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:07:59.618 [DEBUG] [Thread-129058] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:07:59.618 [DEBUG] [Thread-129058] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:07:59.618 [DEBUG] [Thread-129058] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:07:59.618 [DEBUG] [Thread-129058] [transport.py] [_log()] client lang: <none>
2025-12-31T14:07:59.618 [DEBUG] [Thread-129058] [transport.py] [_log()] server lang: <none>
2025-12-31T14:07:59.618 [DEBUG] [Thread-129058] [transport.py] [_log()] kex follows: False
2025-12-31T14:07:59.618 [DEBUG] [Thread-129058] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:07:59.618 [DEBUG] [Thread-129058] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:07:59.618 [DEBUG] [Thread-129058] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:07:59.618 [DEBUG] [Thread-129058] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:07:59.618 [DEBUG] [Thread-129058] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:07:59.618 [DEBUG] [Thread-129058] [transport.py] [_log()] Compression: none
2025-12-31T14:07:59.618 [DEBUG] [Thread-129058] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:07:59.677 [DEBUG] [Thread-129058] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:07:59.678 [DEBUG] [Thread-129058] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:07:59.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T14:07:59.679 [DEBUG] [Thread-129058] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T14:07:59.679 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:07:59.733 [DEBUG] [Thread-129058] [transport.py] [_log()] userauth is OK
2025-12-31T14:07:59.733 [DEBUG] [Thread-129058] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:07:59.733 [DEBUG] [Thread-129058] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:07:59.734 [DEBUG] [Thread-129058] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T14:07:59.734 [DEBUG] [Thread-129058] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:07:59.752 [INFO] [Thread-129058] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:07:59.752 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T14:07:59.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:08:00.592 [DEBUG] [Thread-129058] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:08:00.592 [DEBUG] [Thread-129058] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:08:00.640 [DEBUG] [Thread-129058] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:08:00.640 [DEBUG] [Thread-129058] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:08:00.649 [DEBUG] [Thread-129058] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:08:00.658 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:08:00.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T14:08:00.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T14:08:00.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:08:00.677 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:08:00.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:08:00.686 [DEBUG] [Thread-129058] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:08:13.090 [DEBUG] [Thread-129060 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:08:17.500 [DEBUG] [Thread-129061 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:08:28.139 [DEBUG] [Thread-129062 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:08:30.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T14:08:30.708 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T14:08:30.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T14:08:31.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 14, 8), 34.52, 9.5, 0.0, 30.56, 26.07, 0, 0, 0, 2, 0, 0),)
2025-12-31T14:08:31.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 14:08:00
2025-12-31T14:08:31.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T14:08:31.721 [DEBUG] [Thread-129063] [transport.py] [_log()] starting thread (client mode): 0xb6b14550
2025-12-31T14:08:31.721 [DEBUG] [Thread-129063] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:08:31.742 [DEBUG] [Thread-129063] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T14:08:31.742 [INFO] [Thread-129063] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T14:08:31.745 [DEBUG] [Thread-129063] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:08:31.745 [DEBUG] [Thread-129063] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T14:08:31.745 [DEBUG] [Thread-129063] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:08:31.745 [DEBUG] [Thread-129063] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:08:31.745 [DEBUG] [Thread-129063] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:08:31.745 [DEBUG] [Thread-129063] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:08:31.746 [DEBUG] [Thread-129063] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:08:31.746 [DEBUG] [Thread-129063] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:08:31.746 [DEBUG] [Thread-129063] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:08:31.746 [DEBUG] [Thread-129063] [transport.py] [_log()] client lang: <none>
2025-12-31T14:08:31.746 [DEBUG] [Thread-129063] [transport.py] [_log()] server lang: <none>
2025-12-31T14:08:31.746 [DEBUG] [Thread-129063] [transport.py] [_log()] kex follows: False
2025-12-31T14:08:31.746 [DEBUG] [Thread-129063] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:08:31.746 [DEBUG] [Thread-129063] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:08:31.746 [DEBUG] [Thread-129063] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:08:31.746 [DEBUG] [Thread-129063] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:08:31.746 [DEBUG] [Thread-129063] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:08:31.746 [DEBUG] [Thread-129063] [transport.py] [_log()] Compression: none
2025-12-31T14:08:31.746 [DEBUG] [Thread-129063] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:08:31.763 [DEBUG] [Thread-129063] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:08:31.763 [DEBUG] [Thread-129063] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:08:31.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T14:08:31.765 [DEBUG] [Thread-129063] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T14:08:31.765 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:08:31.767 [DEBUG] [Thread-129063] [transport.py] [_log()] userauth is OK
2025-12-31T14:08:31.767 [DEBUG] [Thread-129063] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:08:31.767 [DEBUG] [Thread-129063] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:08:31.767 [DEBUG] [Thread-129063] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T14:08:31.767 [DEBUG] [Thread-129063] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:08:31.782 [INFO] [Thread-129063] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:08:31.783 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:08:32.534 [DEBUG] [Thread-129063] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:08:32.534 [DEBUG] [Thread-129063] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:08:32.534 [DEBUG] [Thread-129063] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T14:08:32.575 [DEBUG] [Thread-129063] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:08:32.575 [DEBUG] [Thread-129063] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:08:32.578 [DEBUG] [Thread-129063] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:08:32.586 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:08:32.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T14:08:32.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T14:08:32.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T14:08:32.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:08:32.599 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T14:08:32.599 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:08:32.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:08:32.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T14:08:32.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.505350 -999.00  +24.50  19.02     15   -3.30 1 2 1 1 1   888    0 29.33 25.85 ----- 14.7 19.0 277.6 35.9 29.6 -17.4 29.5 -16.4 28.5 -16.8 29.4 -17.0
2025-12-31T14:08:32.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T14:08:32.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T14:08:32.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.505350
2025-12-31T14:08:32.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T14:08:32.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T14:08:32.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T14:08:32.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T14:08:32.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T14:08:32.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T14:08:00', tmtdew=34.52, humidity=9.5, cloud=0.0, wind=30.56, temperature=26.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T12:07:42.240', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T14:08:32.602 [DEBUG] [Thread-129063] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:08:32.686 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T14:08:32.697 [DEBUG] [Thread-129066] [transport.py] [_log()] starting thread (client mode): 0xbbfcd330
2025-12-31T14:08:32.698 [DEBUG] [Thread-129066] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:08:32.712 [DEBUG] [Thread-129066] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T14:08:32.712 [INFO] [Thread-129066] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T14:08:32.720 [DEBUG] [Thread-129066] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:08:32.720 [DEBUG] [Thread-129066] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T14:08:32.721 [DEBUG] [Thread-129066] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:08:32.721 [DEBUG] [Thread-129066] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:08:32.721 [DEBUG] [Thread-129066] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:08:32.721 [DEBUG] [Thread-129066] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:08:32.721 [DEBUG] [Thread-129066] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:08:32.721 [DEBUG] [Thread-129066] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:08:32.721 [DEBUG] [Thread-129066] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:08:32.721 [DEBUG] [Thread-129066] [transport.py] [_log()] client lang: <none>
2025-12-31T14:08:32.721 [DEBUG] [Thread-129066] [transport.py] [_log()] server lang: <none>
2025-12-31T14:08:32.722 [DEBUG] [Thread-129066] [transport.py] [_log()] kex follows: False
2025-12-31T14:08:32.722 [DEBUG] [Thread-129066] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:08:32.722 [DEBUG] [Thread-129066] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:08:32.722 [DEBUG] [Thread-129066] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:08:32.722 [DEBUG] [Thread-129066] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:08:32.722 [DEBUG] [Thread-129066] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:08:32.722 [DEBUG] [Thread-129066] [transport.py] [_log()] Compression: none
2025-12-31T14:08:32.723 [DEBUG] [Thread-129066] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:08:32.778 [DEBUG] [Thread-129066] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:08:32.779 [DEBUG] [Thread-129066] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:08:32.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T14:08:32.781 [DEBUG] [Thread-129066] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T14:08:32.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:08:32.839 [DEBUG] [Thread-129066] [transport.py] [_log()] userauth is OK
2025-12-31T14:08:32.840 [DEBUG] [Thread-129066] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:08:32.840 [DEBUG] [Thread-129066] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:08:32.840 [DEBUG] [Thread-129066] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T14:08:32.840 [DEBUG] [Thread-129066] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:08:32.858 [INFO] [Thread-129066] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:08:32.858 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T14:08:32.859 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:08:33.699 [DEBUG] [Thread-129066] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:08:33.699 [DEBUG] [Thread-129066] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:08:33.747 [DEBUG] [Thread-129066] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:08:33.747 [DEBUG] [Thread-129066] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:08:33.756 [DEBUG] [Thread-129066] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:08:33.763 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:08:33.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T14:08:33.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T14:08:33.779 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:08:33.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:08:33.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:08:33.787 [DEBUG] [Thread-129066] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:08:43.173 [DEBUG] [Thread-129068 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:08:56.436 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:08:56.437 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:08:58.223 [DEBUG] [Thread-129069 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:09:03.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T14:09:03.809 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T14:09:03.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T14:09:04.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 14, 8, 32), 34.72, 9.35, 0.0, 25.57, 26.01, 0, 0, 0, 2, 0, 0),)
2025-12-31T14:09:04.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 14:08:32
2025-12-31T14:09:04.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T14:09:04.837 [DEBUG] [Thread-129070] [transport.py] [_log()] starting thread (client mode): 0xb6ba2410
2025-12-31T14:09:04.837 [DEBUG] [Thread-129070] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:09:04.857 [DEBUG] [Thread-129070] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T14:09:04.858 [INFO] [Thread-129070] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T14:09:04.861 [DEBUG] [Thread-129070] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:09:04.861 [DEBUG] [Thread-129070] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T14:09:04.861 [DEBUG] [Thread-129070] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:09:04.861 [DEBUG] [Thread-129070] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:09:04.861 [DEBUG] [Thread-129070] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:09:04.861 [DEBUG] [Thread-129070] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:09:04.861 [DEBUG] [Thread-129070] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:09:04.861 [DEBUG] [Thread-129070] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:09:04.861 [DEBUG] [Thread-129070] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:09:04.861 [DEBUG] [Thread-129070] [transport.py] [_log()] client lang: <none>
2025-12-31T14:09:04.861 [DEBUG] [Thread-129070] [transport.py] [_log()] server lang: <none>
2025-12-31T14:09:04.861 [DEBUG] [Thread-129070] [transport.py] [_log()] kex follows: False
2025-12-31T14:09:04.861 [DEBUG] [Thread-129070] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:09:04.861 [DEBUG] [Thread-129070] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:09:04.861 [DEBUG] [Thread-129070] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:09:04.861 [DEBUG] [Thread-129070] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:09:04.861 [DEBUG] [Thread-129070] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:09:04.861 [DEBUG] [Thread-129070] [transport.py] [_log()] Compression: none
2025-12-31T14:09:04.861 [DEBUG] [Thread-129070] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:09:04.879 [DEBUG] [Thread-129070] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:09:04.880 [DEBUG] [Thread-129070] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:09:04.881 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T14:09:04.881 [DEBUG] [Thread-129070] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T14:09:04.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:09:04.883 [DEBUG] [Thread-129070] [transport.py] [_log()] userauth is OK
2025-12-31T14:09:04.883 [DEBUG] [Thread-129070] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:09:04.884 [DEBUG] [Thread-129070] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:09:04.884 [DEBUG] [Thread-129070] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T14:09:04.884 [DEBUG] [Thread-129070] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:09:04.907 [INFO] [Thread-129070] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:09:04.908 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:09:05.522 [DEBUG] [Thread-129070] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:09:05.522 [DEBUG] [Thread-129070] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:09:05.522 [DEBUG] [Thread-129070] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T14:09:05.563 [DEBUG] [Thread-129070] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:09:05.563 [DEBUG] [Thread-129070] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:09:05.566 [DEBUG] [Thread-129070] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:09:05.577 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:09:05.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T14:09:05.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T14:09:05.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T14:09:05.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:09:05.582 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T14:09:05.582 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:09:05.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:09:05.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T14:09:05.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.505698 -999.00  +25.00  11.82     15   -2.90 1 2 1 1 1   888    0 29.01 29.83 ----- 13.0 11.8 252.8 21.0 30.2 -15.8 29.9 -15.4 29.2 -14.3 29.9 -15.3
2025-12-31T14:09:05.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T14:09:05.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T14:09:05.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.505698
2025-12-31T14:09:05.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T14:09:05.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T14:09:05.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T14:09:05.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T14:09:05.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T14:09:05.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T14:08:32', tmtdew=34.72, humidity=9.35, cloud=0.0, wind=25.57, temperature=26.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T12:08:12.307', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T14:09:05.583 [DEBUG] [Thread-129070] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:09:05.658 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T14:09:05.670 [DEBUG] [Thread-129073] [transport.py] [_log()] starting thread (client mode): 0xb6ba0040
2025-12-31T14:09:05.670 [DEBUG] [Thread-129073] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:09:05.684 [DEBUG] [Thread-129073] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T14:09:05.684 [INFO] [Thread-129073] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T14:09:05.692 [DEBUG] [Thread-129073] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:09:05.692 [DEBUG] [Thread-129073] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T14:09:05.692 [DEBUG] [Thread-129073] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:09:05.692 [DEBUG] [Thread-129073] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:09:05.692 [DEBUG] [Thread-129073] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:09:05.692 [DEBUG] [Thread-129073] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:09:05.692 [DEBUG] [Thread-129073] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:09:05.692 [DEBUG] [Thread-129073] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:09:05.692 [DEBUG] [Thread-129073] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:09:05.692 [DEBUG] [Thread-129073] [transport.py] [_log()] client lang: <none>
2025-12-31T14:09:05.692 [DEBUG] [Thread-129073] [transport.py] [_log()] server lang: <none>
2025-12-31T14:09:05.692 [DEBUG] [Thread-129073] [transport.py] [_log()] kex follows: False
2025-12-31T14:09:05.692 [DEBUG] [Thread-129073] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:09:05.692 [DEBUG] [Thread-129073] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:09:05.692 [DEBUG] [Thread-129073] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:09:05.692 [DEBUG] [Thread-129073] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:09:05.692 [DEBUG] [Thread-129073] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:09:05.692 [DEBUG] [Thread-129073] [transport.py] [_log()] Compression: none
2025-12-31T14:09:05.692 [DEBUG] [Thread-129073] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:09:05.748 [DEBUG] [Thread-129073] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:09:05.748 [DEBUG] [Thread-129073] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:09:05.749 [DEBUG] [Thread-129073] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T14:09:05.749 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T14:09:05.749 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:09:05.806 [DEBUG] [Thread-129073] [transport.py] [_log()] userauth is OK
2025-12-31T14:09:05.806 [DEBUG] [Thread-129073] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:09:05.806 [DEBUG] [Thread-129073] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:09:05.806 [DEBUG] [Thread-129073] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T14:09:05.806 [DEBUG] [Thread-129073] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:09:05.823 [INFO] [Thread-129073] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:09:05.823 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T14:09:05.823 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:09:06.676 [DEBUG] [Thread-129073] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:09:06.676 [DEBUG] [Thread-129073] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:09:06.724 [DEBUG] [Thread-129073] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:09:06.724 [DEBUG] [Thread-129073] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:09:06.732 [DEBUG] [Thread-129073] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:09:06.740 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:09:06.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-12-31T14:09:06.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T14:09:06.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:09:06.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:09:06.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:09:06.764 [DEBUG] [Thread-129073] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:09:13.261 [DEBUG] [Thread-129075 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:09:17.554 [DEBUG] [Thread-129076 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:09:28.324 [DEBUG] [Thread-129077 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:09:36.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T14:09:36.775 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T14:09:36.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T14:09:37.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 14, 9, 4), 34.45, 9.5, 0.0, 26.29, 25.79, 0, 0, 0, 2, 0, 0),)
2025-12-31T14:09:37.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 14:09:04
2025-12-31T14:09:37.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T14:09:37.829 [DEBUG] [Thread-129078] [transport.py] [_log()] starting thread (client mode): 0xb6b2bf70
2025-12-31T14:09:37.830 [DEBUG] [Thread-129078] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:09:37.845 [DEBUG] [Thread-129078] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T14:09:37.845 [INFO] [Thread-129078] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T14:09:37.848 [DEBUG] [Thread-129078] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:09:37.848 [DEBUG] [Thread-129078] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T14:09:37.848 [DEBUG] [Thread-129078] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:09:37.848 [DEBUG] [Thread-129078] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:09:37.848 [DEBUG] [Thread-129078] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:09:37.848 [DEBUG] [Thread-129078] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:09:37.848 [DEBUG] [Thread-129078] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:09:37.848 [DEBUG] [Thread-129078] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:09:37.848 [DEBUG] [Thread-129078] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:09:37.848 [DEBUG] [Thread-129078] [transport.py] [_log()] client lang: <none>
2025-12-31T14:09:37.848 [DEBUG] [Thread-129078] [transport.py] [_log()] server lang: <none>
2025-12-31T14:09:37.848 [DEBUG] [Thread-129078] [transport.py] [_log()] kex follows: False
2025-12-31T14:09:37.848 [DEBUG] [Thread-129078] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:09:37.848 [DEBUG] [Thread-129078] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:09:37.848 [DEBUG] [Thread-129078] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:09:37.849 [DEBUG] [Thread-129078] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:09:37.849 [DEBUG] [Thread-129078] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:09:37.849 [DEBUG] [Thread-129078] [transport.py] [_log()] Compression: none
2025-12-31T14:09:37.849 [DEBUG] [Thread-129078] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:09:37.866 [DEBUG] [Thread-129078] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:09:37.866 [DEBUG] [Thread-129078] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:09:37.867 [DEBUG] [Thread-129078] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T14:09:37.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T14:09:37.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:09:37.867 [DEBUG] [Thread-129078] [transport.py] [_log()] userauth is OK
2025-12-31T14:09:37.867 [DEBUG] [Thread-129078] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:09:37.867 [DEBUG] [Thread-129078] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:09:37.867 [DEBUG] [Thread-129078] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T14:09:37.867 [DEBUG] [Thread-129078] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:09:37.878 [INFO] [Thread-129078] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:09:37.878 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:09:38.665 [DEBUG] [Thread-129078] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:09:38.665 [DEBUG] [Thread-129078] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:09:38.665 [DEBUG] [Thread-129078] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T14:09:38.705 [DEBUG] [Thread-129078] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:09:38.705 [DEBUG] [Thread-129078] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:09:38.707 [DEBUG] [Thread-129078] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:09:38.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:09:38.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T14:09:38.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T14:09:38.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T14:09:38.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:09:38.717 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T14:09:38.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:09:38.717 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:09:38.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T14:09:38.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.506045 -999.00  +24.90   8.81     15   -2.90 1 2 1 1 1   888    0 29.14 34.85 ----- 5.9 8.8 274.4 15.4 30.5 -15.7 30.2 -14.6 29.8 -14.3 30.2 -15.5
2025-12-31T14:09:38.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T14:09:38.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T14:09:38.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.506045
2025-12-31T14:09:38.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T14:09:38.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T14:09:38.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T14:09:38.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T14:09:38.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T14:09:38.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T14:09:04', tmtdew=34.45, humidity=9.5, cloud=0.0, wind=26.29, temperature=25.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T12:08:42.288', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T14:09:38.718 [DEBUG] [Thread-129078] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:09:38.793 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T14:09:38.805 [DEBUG] [Thread-129081] [transport.py] [_log()] starting thread (client mode): 0xb6b62b30
2025-12-31T14:09:38.805 [DEBUG] [Thread-129081] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:09:38.820 [DEBUG] [Thread-129081] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T14:09:38.820 [INFO] [Thread-129081] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T14:09:38.827 [DEBUG] [Thread-129081] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:09:38.827 [DEBUG] [Thread-129081] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T14:09:38.827 [DEBUG] [Thread-129081] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:09:38.827 [DEBUG] [Thread-129081] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:09:38.827 [DEBUG] [Thread-129081] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:09:38.827 [DEBUG] [Thread-129081] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:09:38.827 [DEBUG] [Thread-129081] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:09:38.827 [DEBUG] [Thread-129081] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:09:38.827 [DEBUG] [Thread-129081] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:09:38.827 [DEBUG] [Thread-129081] [transport.py] [_log()] client lang: <none>
2025-12-31T14:09:38.827 [DEBUG] [Thread-129081] [transport.py] [_log()] server lang: <none>
2025-12-31T14:09:38.827 [DEBUG] [Thread-129081] [transport.py] [_log()] kex follows: False
2025-12-31T14:09:38.827 [DEBUG] [Thread-129081] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:09:38.828 [DEBUG] [Thread-129081] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:09:38.828 [DEBUG] [Thread-129081] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:09:38.828 [DEBUG] [Thread-129081] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:09:38.828 [DEBUG] [Thread-129081] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:09:38.828 [DEBUG] [Thread-129081] [transport.py] [_log()] Compression: none
2025-12-31T14:09:38.828 [DEBUG] [Thread-129081] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:09:38.886 [DEBUG] [Thread-129081] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:09:38.886 [DEBUG] [Thread-129081] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:09:38.886 [DEBUG] [Thread-129081] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T14:09:38.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T14:09:38.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:09:38.943 [DEBUG] [Thread-129081] [transport.py] [_log()] userauth is OK
2025-12-31T14:09:38.943 [DEBUG] [Thread-129081] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:09:38.943 [DEBUG] [Thread-129081] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:09:38.944 [DEBUG] [Thread-129081] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T14:09:38.944 [DEBUG] [Thread-129081] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:09:38.959 [INFO] [Thread-129081] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:09:38.959 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T14:09:38.959 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:09:39.783 [DEBUG] [Thread-129081] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:09:39.783 [DEBUG] [Thread-129081] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:09:39.831 [DEBUG] [Thread-129081] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:09:39.832 [DEBUG] [Thread-129081] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:09:39.840 [DEBUG] [Thread-129081] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:09:39.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:09:39.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T14:09:39.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-12-31T14:09:39.864 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:09:39.864 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:09:39.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:09:39.872 [DEBUG] [Thread-129081] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:09:43.353 [DEBUG] [Thread-129083 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:09:56.577 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:09:56.578 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:09:58.391 [DEBUG] [Thread-129084 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:10:09.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T14:10:09.895 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T14:10:09.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T14:10:10.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 14, 9, 36), 33.69, 10.15, 0.0, 19.06, 25.65, 0, 0, 0, 2, 0, 0),)
2025-12-31T14:10:10.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 14:09:36
2025-12-31T14:10:10.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T14:10:10.938 [DEBUG] [Thread-129085] [transport.py] [_log()] starting thread (client mode): 0xb6ba3520
2025-12-31T14:10:10.938 [DEBUG] [Thread-129085] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:10:10.960 [DEBUG] [Thread-129085] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T14:10:10.960 [INFO] [Thread-129085] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T14:10:10.964 [DEBUG] [Thread-129085] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:10:10.964 [DEBUG] [Thread-129085] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T14:10:10.964 [DEBUG] [Thread-129085] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:10:10.964 [DEBUG] [Thread-129085] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:10:10.964 [DEBUG] [Thread-129085] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:10:10.964 [DEBUG] [Thread-129085] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:10:10.964 [DEBUG] [Thread-129085] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:10:10.964 [DEBUG] [Thread-129085] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:10:10.964 [DEBUG] [Thread-129085] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:10:10.964 [DEBUG] [Thread-129085] [transport.py] [_log()] client lang: <none>
2025-12-31T14:10:10.964 [DEBUG] [Thread-129085] [transport.py] [_log()] server lang: <none>
2025-12-31T14:10:10.964 [DEBUG] [Thread-129085] [transport.py] [_log()] kex follows: False
2025-12-31T14:10:10.964 [DEBUG] [Thread-129085] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:10:10.964 [DEBUG] [Thread-129085] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:10:10.964 [DEBUG] [Thread-129085] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:10:10.964 [DEBUG] [Thread-129085] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:10:10.964 [DEBUG] [Thread-129085] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:10:10.964 [DEBUG] [Thread-129085] [transport.py] [_log()] Compression: none
2025-12-31T14:10:10.964 [DEBUG] [Thread-129085] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:10:10.978 [DEBUG] [Thread-129085] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:10:10.978 [DEBUG] [Thread-129085] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:10:10.978 [DEBUG] [Thread-129085] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T14:10:10.978 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T14:10:10.979 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:10:10.979 [DEBUG] [Thread-129085] [transport.py] [_log()] userauth is OK
2025-12-31T14:10:10.979 [DEBUG] [Thread-129085] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:10:10.979 [DEBUG] [Thread-129085] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:10:10.979 [DEBUG] [Thread-129085] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T14:10:10.979 [DEBUG] [Thread-129085] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:10:10.994 [INFO] [Thread-129085] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:10:10.994 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:10:13.432 [DEBUG] [Thread-129087 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:10:14.685 [DEBUG] [Thread-129085] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:10:14.686 [DEBUG] [Thread-129085] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:10:14.686 [DEBUG] [Thread-129085] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T14:10:14.727 [DEBUG] [Thread-129085] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:10:14.727 [DEBUG] [Thread-129085] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:10:14.730 [DEBUG] [Thread-129085] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:10:14.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:10:14.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T14:10:14.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T14:10:14.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T14:10:14.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:10:14.885 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T14:10:14.885 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:10:14.885 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:10:14.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T14:10:14.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 2
2025-12-31T14:10:14.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T14:10:14.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T14:10:14.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 2
2025-12-31T14:10:14.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T14:10:14.894 [DEBUG] [Thread-129085] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:10:14.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T14:10:14.901 [WARNING] [poll_weather_worker] [driver.py] [poll_weather_state()] Unable to get atlas cloud data: list index out of range
2025-12-31T14:10:14.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T14:09:36', tmtdew=33.69, humidity=10.15, cloud=0.0, wind=19.06, temperature=25.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='1858-11-19T00:00:00.000', atlas_cloud=None, atlas_rain=None, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T14:10:14.990 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T14:10:15.003 [DEBUG] [Thread-129089] [transport.py] [_log()] starting thread (client mode): 0xb6bbbdf0
2025-12-31T14:10:15.003 [DEBUG] [Thread-129089] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:10:15.018 [DEBUG] [Thread-129089] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T14:10:15.018 [INFO] [Thread-129089] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T14:10:15.025 [DEBUG] [Thread-129089] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:10:15.026 [DEBUG] [Thread-129089] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T14:10:15.026 [DEBUG] [Thread-129089] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:10:15.026 [DEBUG] [Thread-129089] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:10:15.026 [DEBUG] [Thread-129089] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:10:15.026 [DEBUG] [Thread-129089] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:10:15.026 [DEBUG] [Thread-129089] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:10:15.026 [DEBUG] [Thread-129089] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:10:15.026 [DEBUG] [Thread-129089] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:10:15.026 [DEBUG] [Thread-129089] [transport.py] [_log()] client lang: <none>
2025-12-31T14:10:15.026 [DEBUG] [Thread-129089] [transport.py] [_log()] server lang: <none>
2025-12-31T14:10:15.026 [DEBUG] [Thread-129089] [transport.py] [_log()] kex follows: False
2025-12-31T14:10:15.026 [DEBUG] [Thread-129089] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:10:15.026 [DEBUG] [Thread-129089] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:10:15.027 [DEBUG] [Thread-129089] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:10:15.027 [DEBUG] [Thread-129089] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:10:15.027 [DEBUG] [Thread-129089] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:10:15.027 [DEBUG] [Thread-129089] [transport.py] [_log()] Compression: none
2025-12-31T14:10:15.027 [DEBUG] [Thread-129089] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:10:15.084 [DEBUG] [Thread-129089] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:10:15.085 [DEBUG] [Thread-129089] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:10:15.086 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T14:10:15.086 [DEBUG] [Thread-129089] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T14:10:15.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:10:15.140 [DEBUG] [Thread-129089] [transport.py] [_log()] userauth is OK
2025-12-31T14:10:15.141 [DEBUG] [Thread-129089] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:10:15.141 [DEBUG] [Thread-129089] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:10:15.141 [DEBUG] [Thread-129089] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T14:10:15.141 [DEBUG] [Thread-129089] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:10:15.159 [INFO] [Thread-129089] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:10:15.160 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T14:10:15.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:10:16.004 [DEBUG] [Thread-129089] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:10:16.004 [DEBUG] [Thread-129089] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:10:16.052 [DEBUG] [Thread-129089] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:10:16.052 [DEBUG] [Thread-129089] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:10:16.062 [DEBUG] [Thread-129089] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:10:16.071 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:10:16.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T14:10:16.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T14:10:16.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:10:16.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:10:16.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:10:16.099 [DEBUG] [Thread-129089] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:10:17.601 [DEBUG] [Thread-129091 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:10:28.467 [DEBUG] [Thread-129092 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:10:43.545 [DEBUG] [Thread-129093 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:10:46.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T14:10:46.117 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T14:10:46.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-12-31T14:10:46.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 14, 10, 41), 34.29, 10.07, 0.0, 32.78, 26.98, 0, 0, 0, 2, 0, 0),)
2025-12-31T14:10:46.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 14:10:41
2025-12-31T14:10:46.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T14:10:47.110 [DEBUG] [Thread-129094] [transport.py] [_log()] starting thread (client mode): 0xb6bbdae0
2025-12-31T14:10:47.110 [DEBUG] [Thread-129094] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:10:47.129 [DEBUG] [Thread-129094] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T14:10:47.130 [INFO] [Thread-129094] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T14:10:47.133 [DEBUG] [Thread-129094] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:10:47.133 [DEBUG] [Thread-129094] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T14:10:47.133 [DEBUG] [Thread-129094] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:10:47.133 [DEBUG] [Thread-129094] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:10:47.133 [DEBUG] [Thread-129094] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:10:47.133 [DEBUG] [Thread-129094] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:10:47.133 [DEBUG] [Thread-129094] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:10:47.133 [DEBUG] [Thread-129094] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:10:47.133 [DEBUG] [Thread-129094] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:10:47.133 [DEBUG] [Thread-129094] [transport.py] [_log()] client lang: <none>
2025-12-31T14:10:47.133 [DEBUG] [Thread-129094] [transport.py] [_log()] server lang: <none>
2025-12-31T14:10:47.133 [DEBUG] [Thread-129094] [transport.py] [_log()] kex follows: False
2025-12-31T14:10:47.133 [DEBUG] [Thread-129094] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:10:47.133 [DEBUG] [Thread-129094] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:10:47.133 [DEBUG] [Thread-129094] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:10:47.133 [DEBUG] [Thread-129094] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:10:47.133 [DEBUG] [Thread-129094] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:10:47.133 [DEBUG] [Thread-129094] [transport.py] [_log()] Compression: none
2025-12-31T14:10:47.133 [DEBUG] [Thread-129094] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:10:47.152 [DEBUG] [Thread-129094] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:10:47.152 [DEBUG] [Thread-129094] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:10:47.153 [DEBUG] [Thread-129094] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T14:10:47.153 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T14:10:47.153 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:10:47.154 [DEBUG] [Thread-129094] [transport.py] [_log()] userauth is OK
2025-12-31T14:10:47.154 [DEBUG] [Thread-129094] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:10:47.154 [DEBUG] [Thread-129094] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:10:47.154 [DEBUG] [Thread-129094] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T14:10:47.154 [DEBUG] [Thread-129094] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:10:47.174 [INFO] [Thread-129094] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:10:47.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:10:47.779 [DEBUG] [Thread-129094] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:10:47.779 [DEBUG] [Thread-129094] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:10:47.779 [DEBUG] [Thread-129094] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T14:10:47.820 [DEBUG] [Thread-129094] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:10:47.820 [DEBUG] [Thread-129094] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:10:47.823 [DEBUG] [Thread-129094] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:10:47.836 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:10:47.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T14:10:47.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T14:10:47.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T14:10:47.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:10:47.849 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T14:10:47.849 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:10:47.849 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:10:47.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T14:10:47.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.506739 -999.00  +25.80  11.82     15   -1.90 1 2 1 1 1   888    0 29.51 36.64 ----- 12.4 11.8 259.4 19.6 31.3 -17.1 30.9 -15.7 30.7 -14.6 31.1 -17.2
2025-12-31T14:10:47.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T14:10:47.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T14:10:47.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.506739
2025-12-31T14:10:47.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T14:10:47.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T14:10:47.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T14:10:47.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T14:10:47.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T14:10:47.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T14:10:41', tmtdew=34.29, humidity=10.07, cloud=0.0, wind=32.78, temperature=26.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T12:09:42.250', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T14:10:47.852 [DEBUG] [Thread-129094] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:10:47.936 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T14:10:47.947 [DEBUG] [Thread-129097] [transport.py] [_log()] starting thread (client mode): 0xb6b29fc0
2025-12-31T14:10:47.947 [DEBUG] [Thread-129097] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:10:47.962 [DEBUG] [Thread-129097] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T14:10:47.962 [INFO] [Thread-129097] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T14:10:47.970 [DEBUG] [Thread-129097] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:10:47.970 [DEBUG] [Thread-129097] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T14:10:47.970 [DEBUG] [Thread-129097] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:10:47.970 [DEBUG] [Thread-129097] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:10:47.970 [DEBUG] [Thread-129097] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:10:47.970 [DEBUG] [Thread-129097] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:10:47.970 [DEBUG] [Thread-129097] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:10:47.970 [DEBUG] [Thread-129097] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:10:47.970 [DEBUG] [Thread-129097] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:10:47.970 [DEBUG] [Thread-129097] [transport.py] [_log()] client lang: <none>
2025-12-31T14:10:47.970 [DEBUG] [Thread-129097] [transport.py] [_log()] server lang: <none>
2025-12-31T14:10:47.970 [DEBUG] [Thread-129097] [transport.py] [_log()] kex follows: False
2025-12-31T14:10:47.970 [DEBUG] [Thread-129097] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:10:47.970 [DEBUG] [Thread-129097] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:10:47.970 [DEBUG] [Thread-129097] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:10:47.971 [DEBUG] [Thread-129097] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:10:47.971 [DEBUG] [Thread-129097] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:10:47.971 [DEBUG] [Thread-129097] [transport.py] [_log()] Compression: none
2025-12-31T14:10:47.971 [DEBUG] [Thread-129097] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:10:48.030 [DEBUG] [Thread-129097] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:10:48.031 [DEBUG] [Thread-129097] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:10:48.032 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T14:10:48.033 [DEBUG] [Thread-129097] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T14:10:48.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:10:48.093 [DEBUG] [Thread-129097] [transport.py] [_log()] userauth is OK
2025-12-31T14:10:48.093 [DEBUG] [Thread-129097] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:10:48.093 [DEBUG] [Thread-129097] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:10:48.093 [DEBUG] [Thread-129097] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T14:10:48.093 [DEBUG] [Thread-129097] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:10:48.116 [INFO] [Thread-129097] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:10:48.116 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T14:10:48.116 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:10:48.971 [DEBUG] [Thread-129097] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:10:48.971 [DEBUG] [Thread-129097] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:10:49.019 [DEBUG] [Thread-129097] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:10:49.020 [DEBUG] [Thread-129097] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:10:49.029 [DEBUG] [Thread-129097] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:10:49.038 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:10:49.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T14:10:49.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T14:10:49.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:10:49.058 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:10:49.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:10:49.066 [DEBUG] [Thread-129097] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:10:56.717 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:10:56.717 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:10:58.579 [DEBUG] [Thread-129099 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:11:13.620 [DEBUG] [Thread-129100 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:11:17.663 [DEBUG] [Thread-129101 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:11:19.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T14:11:19.089 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T14:11:19.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-12-31T14:11:19.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 14, 11, 13), 34.28, 10.08, 0.0, 27.88, 27.06, 0, 0, 0, 2, 0, 0),)
2025-12-31T14:11:19.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 14:11:13
2025-12-31T14:11:19.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T14:11:20.082 [DEBUG] [Thread-129102] [transport.py] [_log()] starting thread (client mode): 0xb6ba3100
2025-12-31T14:11:20.082 [DEBUG] [Thread-129102] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:11:20.102 [DEBUG] [Thread-129102] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T14:11:20.102 [INFO] [Thread-129102] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T14:11:20.105 [DEBUG] [Thread-129102] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:11:20.106 [DEBUG] [Thread-129102] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T14:11:20.106 [DEBUG] [Thread-129102] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:11:20.106 [DEBUG] [Thread-129102] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:11:20.106 [DEBUG] [Thread-129102] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:11:20.106 [DEBUG] [Thread-129102] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:11:20.106 [DEBUG] [Thread-129102] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:11:20.106 [DEBUG] [Thread-129102] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:11:20.106 [DEBUG] [Thread-129102] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:11:20.106 [DEBUG] [Thread-129102] [transport.py] [_log()] client lang: <none>
2025-12-31T14:11:20.106 [DEBUG] [Thread-129102] [transport.py] [_log()] server lang: <none>
2025-12-31T14:11:20.106 [DEBUG] [Thread-129102] [transport.py] [_log()] kex follows: False
2025-12-31T14:11:20.106 [DEBUG] [Thread-129102] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:11:20.106 [DEBUG] [Thread-129102] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:11:20.106 [DEBUG] [Thread-129102] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:11:20.106 [DEBUG] [Thread-129102] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:11:20.106 [DEBUG] [Thread-129102] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:11:20.106 [DEBUG] [Thread-129102] [transport.py] [_log()] Compression: none
2025-12-31T14:11:20.106 [DEBUG] [Thread-129102] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:11:20.125 [DEBUG] [Thread-129102] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:11:20.126 [DEBUG] [Thread-129102] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:11:20.126 [DEBUG] [Thread-129102] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T14:11:20.127 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T14:11:20.127 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:11:20.128 [DEBUG] [Thread-129102] [transport.py] [_log()] userauth is OK
2025-12-31T14:11:20.128 [DEBUG] [Thread-129102] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:11:20.128 [DEBUG] [Thread-129102] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:11:20.128 [DEBUG] [Thread-129102] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T14:11:20.129 [DEBUG] [Thread-129102] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:11:20.150 [INFO] [Thread-129102] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:11:20.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:11:20.928 [DEBUG] [Thread-129102] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:11:20.929 [DEBUG] [Thread-129102] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:11:20.929 [DEBUG] [Thread-129102] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T14:11:20.970 [DEBUG] [Thread-129102] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:11:20.970 [DEBUG] [Thread-129102] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:11:20.972 [DEBUG] [Thread-129102] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:11:20.978 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:11:20.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T14:11:20.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T14:11:20.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T14:11:20.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:11:20.987 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T14:11:20.988 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:11:20.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:11:20.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T14:11:20.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.507433 -999.00  +26.20  27.12     15   -1.70 1 2 1 1 1   888    0 29.01 32.21 ----- 32.2 27.1 291.4 34.0 31.5 -19.2 31.1 -18.2 30.8 -17.0 31.5 -19.3
2025-12-31T14:11:20.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T14:11:20.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T14:11:20.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.507433
2025-12-31T14:11:20.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T14:11:20.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T14:11:20.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T14:11:20.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T14:11:20.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T14:11:20.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T14:11:13', tmtdew=34.28, humidity=10.08, cloud=0.0, wind=27.88, temperature=27.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T12:10:42.211', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T14:11:20.990 [DEBUG] [Thread-129102] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:11:21.073 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T14:11:21.085 [DEBUG] [Thread-129105] [transport.py] [_log()] starting thread (client mode): 0xb6ba3340
2025-12-31T14:11:21.085 [DEBUG] [Thread-129105] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:11:21.100 [DEBUG] [Thread-129105] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T14:11:21.100 [INFO] [Thread-129105] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T14:11:21.108 [DEBUG] [Thread-129105] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:11:21.108 [DEBUG] [Thread-129105] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T14:11:21.108 [DEBUG] [Thread-129105] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:11:21.108 [DEBUG] [Thread-129105] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:11:21.108 [DEBUG] [Thread-129105] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:11:21.109 [DEBUG] [Thread-129105] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:11:21.109 [DEBUG] [Thread-129105] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:11:21.109 [DEBUG] [Thread-129105] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:11:21.109 [DEBUG] [Thread-129105] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:11:21.109 [DEBUG] [Thread-129105] [transport.py] [_log()] client lang: <none>
2025-12-31T14:11:21.109 [DEBUG] [Thread-129105] [transport.py] [_log()] server lang: <none>
2025-12-31T14:11:21.109 [DEBUG] [Thread-129105] [transport.py] [_log()] kex follows: False
2025-12-31T14:11:21.109 [DEBUG] [Thread-129105] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:11:21.109 [DEBUG] [Thread-129105] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:11:21.109 [DEBUG] [Thread-129105] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:11:21.109 [DEBUG] [Thread-129105] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:11:21.109 [DEBUG] [Thread-129105] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:11:21.109 [DEBUG] [Thread-129105] [transport.py] [_log()] Compression: none
2025-12-31T14:11:21.109 [DEBUG] [Thread-129105] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:11:21.166 [DEBUG] [Thread-129105] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:11:21.166 [DEBUG] [Thread-129105] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:11:21.167 [DEBUG] [Thread-129105] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T14:11:21.167 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T14:11:21.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:11:21.222 [DEBUG] [Thread-129105] [transport.py] [_log()] userauth is OK
2025-12-31T14:11:21.222 [DEBUG] [Thread-129105] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:11:21.223 [DEBUG] [Thread-129105] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:11:21.223 [DEBUG] [Thread-129105] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T14:11:21.223 [DEBUG] [Thread-129105] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:11:21.241 [INFO] [Thread-129105] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:11:21.242 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T14:11:21.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:11:22.080 [DEBUG] [Thread-129105] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:11:22.080 [DEBUG] [Thread-129105] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:11:22.128 [DEBUG] [Thread-129105] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:11:22.128 [DEBUG] [Thread-129105] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:11:22.137 [DEBUG] [Thread-129105] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:11:22.146 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:11:22.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T14:11:22.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T14:11:22.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:11:22.165 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:11:22.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:11:22.174 [DEBUG] [Thread-129105] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:11:28.653 [DEBUG] [Thread-129107 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:11:43.701 [DEBUG] [Thread-129108 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:11:52.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T14:11:52.197 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T14:11:52.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T14:11:52.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 14, 11, 45), 34.25, 9.9, 0.0, 27.63, 26.54, 0, 0, 0, 2, 0, 0),)
2025-12-31T14:11:52.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 14:11:45
2025-12-31T14:11:53.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T14:11:53.184 [DEBUG] [Thread-129109] [transport.py] [_log()] starting thread (client mode): 0xbbfcd720
2025-12-31T14:11:53.184 [DEBUG] [Thread-129109] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:11:53.204 [DEBUG] [Thread-129109] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T14:11:53.205 [INFO] [Thread-129109] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T14:11:53.208 [DEBUG] [Thread-129109] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:11:53.208 [DEBUG] [Thread-129109] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T14:11:53.208 [DEBUG] [Thread-129109] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:11:53.208 [DEBUG] [Thread-129109] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:11:53.208 [DEBUG] [Thread-129109] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:11:53.208 [DEBUG] [Thread-129109] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:11:53.208 [DEBUG] [Thread-129109] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:11:53.208 [DEBUG] [Thread-129109] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:11:53.208 [DEBUG] [Thread-129109] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:11:53.208 [DEBUG] [Thread-129109] [transport.py] [_log()] client lang: <none>
2025-12-31T14:11:53.208 [DEBUG] [Thread-129109] [transport.py] [_log()] server lang: <none>
2025-12-31T14:11:53.208 [DEBUG] [Thread-129109] [transport.py] [_log()] kex follows: False
2025-12-31T14:11:53.208 [DEBUG] [Thread-129109] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:11:53.208 [DEBUG] [Thread-129109] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:11:53.208 [DEBUG] [Thread-129109] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:11:53.208 [DEBUG] [Thread-129109] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:11:53.208 [DEBUG] [Thread-129109] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:11:53.208 [DEBUG] [Thread-129109] [transport.py] [_log()] Compression: none
2025-12-31T14:11:53.208 [DEBUG] [Thread-129109] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:11:53.228 [DEBUG] [Thread-129109] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:11:53.228 [DEBUG] [Thread-129109] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:11:53.229 [DEBUG] [Thread-129109] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T14:11:53.229 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T14:11:53.230 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:11:53.231 [DEBUG] [Thread-129109] [transport.py] [_log()] userauth is OK
2025-12-31T14:11:53.231 [DEBUG] [Thread-129109] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:11:53.231 [DEBUG] [Thread-129109] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:11:53.231 [DEBUG] [Thread-129109] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T14:11:53.231 [DEBUG] [Thread-129109] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:11:53.267 [INFO] [Thread-129109] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:11:53.268 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:11:53.880 [DEBUG] [Thread-129109] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:11:53.880 [DEBUG] [Thread-129109] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:11:53.881 [DEBUG] [Thread-129109] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T14:11:53.921 [DEBUG] [Thread-129109] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:11:53.921 [DEBUG] [Thread-129109] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:11:53.924 [DEBUG] [Thread-129109] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:11:53.939 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:11:53.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T14:11:53.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T14:11:53.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T14:11:53.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:11:53.951 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T14:11:53.951 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:11:53.951 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:11:53.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T14:11:53.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.507781 -999.00  +25.90  26.52     15   -2.00 1 2 1 1 1   888    0 28.40 27.55 ----- 33.2 26.5 284.2 36.1 31.4 -21.2 30.9 -20.2 30.7 -19.5 31.3 -21.2
2025-12-31T14:11:53.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T14:11:53.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T14:11:53.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.507781
2025-12-31T14:11:53.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T14:11:53.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T14:11:53.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T14:11:53.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T14:11:53.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T14:11:53.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T14:11:45', tmtdew=34.25, humidity=9.9, cloud=0.0, wind=27.63, temperature=26.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T12:11:12.278', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T14:11:53.954 [DEBUG] [Thread-129109] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:11:54.041 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T14:11:54.051 [DEBUG] [Thread-129112] [transport.py] [_log()] starting thread (client mode): 0xb6bb04f0
2025-12-31T14:11:54.051 [DEBUG] [Thread-129112] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:11:54.066 [DEBUG] [Thread-129112] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T14:11:54.066 [INFO] [Thread-129112] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T14:11:54.074 [DEBUG] [Thread-129112] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:11:54.074 [DEBUG] [Thread-129112] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T14:11:54.074 [DEBUG] [Thread-129112] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:11:54.074 [DEBUG] [Thread-129112] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:11:54.074 [DEBUG] [Thread-129112] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:11:54.074 [DEBUG] [Thread-129112] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:11:54.074 [DEBUG] [Thread-129112] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:11:54.074 [DEBUG] [Thread-129112] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:11:54.074 [DEBUG] [Thread-129112] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:11:54.074 [DEBUG] [Thread-129112] [transport.py] [_log()] client lang: <none>
2025-12-31T14:11:54.074 [DEBUG] [Thread-129112] [transport.py] [_log()] server lang: <none>
2025-12-31T14:11:54.074 [DEBUG] [Thread-129112] [transport.py] [_log()] kex follows: False
2025-12-31T14:11:54.074 [DEBUG] [Thread-129112] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:11:54.074 [DEBUG] [Thread-129112] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:11:54.075 [DEBUG] [Thread-129112] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:11:54.075 [DEBUG] [Thread-129112] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:11:54.075 [DEBUG] [Thread-129112] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:11:54.075 [DEBUG] [Thread-129112] [transport.py] [_log()] Compression: none
2025-12-31T14:11:54.075 [DEBUG] [Thread-129112] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:11:54.134 [DEBUG] [Thread-129112] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:11:54.135 [DEBUG] [Thread-129112] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:11:54.136 [DEBUG] [Thread-129112] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T14:11:54.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T14:11:54.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:11:54.191 [DEBUG] [Thread-129112] [transport.py] [_log()] userauth is OK
2025-12-31T14:11:54.191 [DEBUG] [Thread-129112] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:11:54.191 [DEBUG] [Thread-129112] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:11:54.191 [DEBUG] [Thread-129112] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T14:11:54.191 [DEBUG] [Thread-129112] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:11:54.210 [INFO] [Thread-129112] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:11:54.211 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T14:11:54.211 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:11:55.044 [DEBUG] [Thread-129112] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:11:55.044 [DEBUG] [Thread-129112] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:11:55.091 [DEBUG] [Thread-129112] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:11:55.091 [DEBUG] [Thread-129112] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:11:55.100 [DEBUG] [Thread-129112] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:11:55.107 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:11:55.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T14:11:55.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T14:11:55.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:11:55.123 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:11:55.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:11:55.130 [DEBUG] [Thread-129112] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:11:56.854 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:11:56.855 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:11:58.736 [DEBUG] [Thread-129114 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:12:13.801 [DEBUG] [Thread-129115 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:12:17.708 [DEBUG] [Thread-129116 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:12:25.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T14:12:25.146 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T14:12:25.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T14:12:25.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 14, 12, 17), 34.71, 9.57, 0.0, 33.08, 26.58, 0, 0, 0, 2, 0, 0),)
2025-12-31T14:12:25.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 14:12:17
2025-12-31T14:12:25.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T14:12:26.134 [DEBUG] [Thread-129117] [transport.py] [_log()] starting thread (client mode): 0xb95b1840
2025-12-31T14:12:26.134 [DEBUG] [Thread-129117] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:12:26.154 [DEBUG] [Thread-129117] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T14:12:26.154 [INFO] [Thread-129117] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T14:12:26.157 [DEBUG] [Thread-129117] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:12:26.158 [DEBUG] [Thread-129117] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T14:12:26.158 [DEBUG] [Thread-129117] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:12:26.158 [DEBUG] [Thread-129117] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:12:26.158 [DEBUG] [Thread-129117] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:12:26.158 [DEBUG] [Thread-129117] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:12:26.158 [DEBUG] [Thread-129117] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:12:26.158 [DEBUG] [Thread-129117] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:12:26.158 [DEBUG] [Thread-129117] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:12:26.158 [DEBUG] [Thread-129117] [transport.py] [_log()] client lang: <none>
2025-12-31T14:12:26.158 [DEBUG] [Thread-129117] [transport.py] [_log()] server lang: <none>
2025-12-31T14:12:26.158 [DEBUG] [Thread-129117] [transport.py] [_log()] kex follows: False
2025-12-31T14:12:26.158 [DEBUG] [Thread-129117] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:12:26.158 [DEBUG] [Thread-129117] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:12:26.158 [DEBUG] [Thread-129117] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:12:26.159 [DEBUG] [Thread-129117] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:12:26.159 [DEBUG] [Thread-129117] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:12:26.159 [DEBUG] [Thread-129117] [transport.py] [_log()] Compression: none
2025-12-31T14:12:26.159 [DEBUG] [Thread-129117] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:12:26.177 [DEBUG] [Thread-129117] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:12:26.178 [DEBUG] [Thread-129117] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:12:26.179 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T14:12:26.179 [DEBUG] [Thread-129117] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T14:12:26.180 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:12:26.181 [DEBUG] [Thread-129117] [transport.py] [_log()] userauth is OK
2025-12-31T14:12:26.181 [DEBUG] [Thread-129117] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:12:26.182 [DEBUG] [Thread-129117] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:12:26.182 [DEBUG] [Thread-129117] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T14:12:26.182 [DEBUG] [Thread-129117] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:12:26.201 [INFO] [Thread-129117] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:12:26.203 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:12:26.947 [DEBUG] [Thread-129117] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:12:26.948 [DEBUG] [Thread-129117] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:12:26.948 [DEBUG] [Thread-129117] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T14:12:26.989 [DEBUG] [Thread-129117] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:12:26.989 [DEBUG] [Thread-129117] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:12:26.993 [DEBUG] [Thread-129117] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:12:27.004 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:12:27.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T14:12:27.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T14:12:27.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T14:12:27.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:12:27.015 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T14:12:27.015 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:12:27.015 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:12:27.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T14:12:27.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.508128 -999.00  +26.30  28.38     14   -2.40 1 2 1 1 1   888    0 29.06 28.14 ----- 29.6 28.4 284.6 39.7 31.3 -20.6 -999.0 -999.0 30.6 -19.6 31.3 -21.1
2025-12-31T14:12:27.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T14:12:27.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T14:12:27.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.508128
2025-12-31T14:12:27.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T14:12:27.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T14:12:27.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T14:12:27.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T14:12:27.017 [DEBUG] [Thread-129117] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:12:27.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T14:12:27.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T14:12:17', tmtdew=34.71, humidity=9.57, cloud=0.0, wind=33.08, temperature=26.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T12:11:42.259', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T14:12:27.101 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T14:12:27.113 [DEBUG] [Thread-129120] [transport.py] [_log()] starting thread (client mode): 0xb6bb0af0
2025-12-31T14:12:27.113 [DEBUG] [Thread-129120] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:12:27.128 [DEBUG] [Thread-129120] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T14:12:27.128 [INFO] [Thread-129120] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T14:12:27.136 [DEBUG] [Thread-129120] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:12:27.136 [DEBUG] [Thread-129120] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T14:12:27.136 [DEBUG] [Thread-129120] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:12:27.136 [DEBUG] [Thread-129120] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:12:27.137 [DEBUG] [Thread-129120] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:12:27.137 [DEBUG] [Thread-129120] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:12:27.137 [DEBUG] [Thread-129120] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:12:27.137 [DEBUG] [Thread-129120] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:12:27.137 [DEBUG] [Thread-129120] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:12:27.137 [DEBUG] [Thread-129120] [transport.py] [_log()] client lang: <none>
2025-12-31T14:12:27.137 [DEBUG] [Thread-129120] [transport.py] [_log()] server lang: <none>
2025-12-31T14:12:27.137 [DEBUG] [Thread-129120] [transport.py] [_log()] kex follows: False
2025-12-31T14:12:27.138 [DEBUG] [Thread-129120] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:12:27.138 [DEBUG] [Thread-129120] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:12:27.138 [DEBUG] [Thread-129120] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:12:27.138 [DEBUG] [Thread-129120] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:12:27.138 [DEBUG] [Thread-129120] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:12:27.138 [DEBUG] [Thread-129120] [transport.py] [_log()] Compression: none
2025-12-31T14:12:27.138 [DEBUG] [Thread-129120] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:12:27.196 [DEBUG] [Thread-129120] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:12:27.197 [DEBUG] [Thread-129120] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:12:27.198 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T14:12:27.199 [DEBUG] [Thread-129120] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T14:12:27.200 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:12:27.256 [DEBUG] [Thread-129120] [transport.py] [_log()] userauth is OK
2025-12-31T14:12:27.256 [DEBUG] [Thread-129120] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:12:27.257 [DEBUG] [Thread-129120] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:12:27.257 [DEBUG] [Thread-129120] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T14:12:27.257 [DEBUG] [Thread-129120] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:12:27.276 [INFO] [Thread-129120] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:12:27.276 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T14:12:27.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:12:28.129 [DEBUG] [Thread-129120] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:12:28.130 [DEBUG] [Thread-129120] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:12:28.177 [DEBUG] [Thread-129120] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:12:28.178 [DEBUG] [Thread-129120] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:12:28.192 [DEBUG] [Thread-129120] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:12:28.208 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:12:28.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T14:12:28.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T14:12:28.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:12:28.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:12:28.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:12:28.239 [DEBUG] [Thread-129120] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:12:28.830 [DEBUG] [Thread-129122 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:12:43.874 [DEBUG] [Thread-129123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:12:56.994 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:12:56.995 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:12:58.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T14:12:58.258 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T14:12:58.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T14:12:58.905 [DEBUG] [Thread-129124 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:12:58.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 14, 12, 49), 35.18, 9.29, 0.0, 29.87, 26.63, 0, 0, 0, 2, 0, 0),)
2025-12-31T14:12:58.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 14:12:49
2025-12-31T14:12:59.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T14:12:59.291 [DEBUG] [Thread-129125] [transport.py] [_log()] starting thread (client mode): 0xb95b2920
2025-12-31T14:12:59.291 [DEBUG] [Thread-129125] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:12:59.311 [DEBUG] [Thread-129125] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T14:12:59.311 [INFO] [Thread-129125] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T14:12:59.314 [DEBUG] [Thread-129125] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:12:59.314 [DEBUG] [Thread-129125] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T14:12:59.314 [DEBUG] [Thread-129125] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:12:59.314 [DEBUG] [Thread-129125] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:12:59.314 [DEBUG] [Thread-129125] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:12:59.314 [DEBUG] [Thread-129125] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:12:59.314 [DEBUG] [Thread-129125] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:12:59.314 [DEBUG] [Thread-129125] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:12:59.314 [DEBUG] [Thread-129125] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:12:59.314 [DEBUG] [Thread-129125] [transport.py] [_log()] client lang: <none>
2025-12-31T14:12:59.314 [DEBUG] [Thread-129125] [transport.py] [_log()] server lang: <none>
2025-12-31T14:12:59.314 [DEBUG] [Thread-129125] [transport.py] [_log()] kex follows: False
2025-12-31T14:12:59.314 [DEBUG] [Thread-129125] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:12:59.314 [DEBUG] [Thread-129125] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:12:59.314 [DEBUG] [Thread-129125] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:12:59.314 [DEBUG] [Thread-129125] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:12:59.314 [DEBUG] [Thread-129125] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:12:59.314 [DEBUG] [Thread-129125] [transport.py] [_log()] Compression: none
2025-12-31T14:12:59.314 [DEBUG] [Thread-129125] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:12:59.330 [DEBUG] [Thread-129125] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:12:59.330 [DEBUG] [Thread-129125] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:12:59.330 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T14:12:59.330 [DEBUG] [Thread-129125] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T14:12:59.330 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:12:59.330 [DEBUG] [Thread-129125] [transport.py] [_log()] userauth is OK
2025-12-31T14:12:59.330 [DEBUG] [Thread-129125] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:12:59.331 [DEBUG] [Thread-129125] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:12:59.331 [DEBUG] [Thread-129125] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T14:12:59.331 [DEBUG] [Thread-129125] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:12:59.340 [INFO] [Thread-129125] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:12:59.340 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:12:59.978 [DEBUG] [Thread-129125] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:12:59.978 [DEBUG] [Thread-129125] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:12:59.978 [DEBUG] [Thread-129125] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T14:13:00.020 [DEBUG] [Thread-129125] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:13:00.020 [DEBUG] [Thread-129125] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:13:00.026 [DEBUG] [Thread-129125] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:13:00.039 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:13:00.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T14:13:00.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T14:13:00.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T14:13:00.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:13:00.064 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T14:13:00.065 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:13:00.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:13:00.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T14:13:00.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.508475 -999.00  +26.20  33.30     14   -2.90 1 2 2 1 1   888    0 29.08 29.92 ----- 33.7 33.3 299.6 40.6 31.3 -19.5 30.9 -18.3 30.5 -18.7 31.2 -19.8
2025-12-31T14:13:00.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T14:13:00.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T14:13:00.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.508475
2025-12-31T14:13:00.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T14:13:00.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T14:13:00.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T14:13:00.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T14:13:00.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T14:13:00.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T14:12:49', tmtdew=35.18, humidity=9.29, cloud=0.0, wind=29.87, temperature=26.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T12:12:12.240', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T14:13:00.067 [DEBUG] [Thread-129125] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:13:00.145 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T14:13:00.157 [DEBUG] [Thread-129128] [transport.py] [_log()] starting thread (client mode): 0xb6bbd7e0
2025-12-31T14:13:00.157 [DEBUG] [Thread-129128] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:13:00.172 [DEBUG] [Thread-129128] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T14:13:00.173 [INFO] [Thread-129128] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T14:13:00.180 [DEBUG] [Thread-129128] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:13:00.181 [DEBUG] [Thread-129128] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T14:13:00.181 [DEBUG] [Thread-129128] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:13:00.181 [DEBUG] [Thread-129128] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:13:00.181 [DEBUG] [Thread-129128] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:13:00.181 [DEBUG] [Thread-129128] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:13:00.181 [DEBUG] [Thread-129128] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:13:00.181 [DEBUG] [Thread-129128] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:13:00.181 [DEBUG] [Thread-129128] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:13:00.181 [DEBUG] [Thread-129128] [transport.py] [_log()] client lang: <none>
2025-12-31T14:13:00.181 [DEBUG] [Thread-129128] [transport.py] [_log()] server lang: <none>
2025-12-31T14:13:00.181 [DEBUG] [Thread-129128] [transport.py] [_log()] kex follows: False
2025-12-31T14:13:00.181 [DEBUG] [Thread-129128] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:13:00.181 [DEBUG] [Thread-129128] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:13:00.181 [DEBUG] [Thread-129128] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:13:00.181 [DEBUG] [Thread-129128] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:13:00.182 [DEBUG] [Thread-129128] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:13:00.182 [DEBUG] [Thread-129128] [transport.py] [_log()] Compression: none
2025-12-31T14:13:00.182 [DEBUG] [Thread-129128] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:13:00.239 [DEBUG] [Thread-129128] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:13:00.240 [DEBUG] [Thread-129128] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:13:00.240 [DEBUG] [Thread-129128] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T14:13:00.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T14:13:00.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:13:00.295 [DEBUG] [Thread-129128] [transport.py] [_log()] userauth is OK
2025-12-31T14:13:00.296 [DEBUG] [Thread-129128] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:13:00.296 [DEBUG] [Thread-129128] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:13:00.296 [DEBUG] [Thread-129128] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T14:13:00.296 [DEBUG] [Thread-129128] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:13:00.320 [INFO] [Thread-129128] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:13:00.321 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T14:13:00.321 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:13:01.162 [DEBUG] [Thread-129128] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:13:01.162 [DEBUG] [Thread-129128] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:13:01.210 [DEBUG] [Thread-129128] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:13:01.210 [DEBUG] [Thread-129128] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:13:01.219 [DEBUG] [Thread-129128] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:13:01.229 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:13:01.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T14:13:01.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T14:13:01.248 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:13:01.248 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:13:01.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:13:01.256 [DEBUG] [Thread-129128] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:13:13.941 [DEBUG] [Thread-129130 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:13:17.759 [DEBUG] [Thread-129131 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:13:28.998 [DEBUG] [Thread-129132 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:13:31.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T14:13:31.251 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T14:13:31.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T14:13:31.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 14, 13, 21), 35.43, 9.17, 0.0, 31.0, 26.89, 0, 0, 0, 2, 0, 0),)
2025-12-31T14:13:31.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 14:13:21
2025-12-31T14:13:32.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T14:13:32.239 [DEBUG] [Thread-129133] [transport.py] [_log()] starting thread (client mode): 0xb6bbf730
2025-12-31T14:13:32.239 [DEBUG] [Thread-129133] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:13:32.259 [DEBUG] [Thread-129133] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T14:13:32.260 [INFO] [Thread-129133] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T14:13:32.263 [DEBUG] [Thread-129133] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:13:32.263 [DEBUG] [Thread-129133] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T14:13:32.263 [DEBUG] [Thread-129133] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:13:32.263 [DEBUG] [Thread-129133] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:13:32.263 [DEBUG] [Thread-129133] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:13:32.263 [DEBUG] [Thread-129133] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:13:32.264 [DEBUG] [Thread-129133] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:13:32.264 [DEBUG] [Thread-129133] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:13:32.264 [DEBUG] [Thread-129133] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:13:32.264 [DEBUG] [Thread-129133] [transport.py] [_log()] client lang: <none>
2025-12-31T14:13:32.264 [DEBUG] [Thread-129133] [transport.py] [_log()] server lang: <none>
2025-12-31T14:13:32.264 [DEBUG] [Thread-129133] [transport.py] [_log()] kex follows: False
2025-12-31T14:13:32.264 [DEBUG] [Thread-129133] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:13:32.264 [DEBUG] [Thread-129133] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:13:32.264 [DEBUG] [Thread-129133] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:13:32.264 [DEBUG] [Thread-129133] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:13:32.264 [DEBUG] [Thread-129133] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:13:32.264 [DEBUG] [Thread-129133] [transport.py] [_log()] Compression: none
2025-12-31T14:13:32.264 [DEBUG] [Thread-129133] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:13:32.282 [DEBUG] [Thread-129133] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:13:32.283 [DEBUG] [Thread-129133] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:13:32.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T14:13:32.285 [DEBUG] [Thread-129133] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T14:13:32.285 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:13:32.325 [DEBUG] [Thread-129133] [transport.py] [_log()] userauth is OK
2025-12-31T14:13:32.326 [DEBUG] [Thread-129133] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:13:32.326 [DEBUG] [Thread-129133] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:13:32.326 [DEBUG] [Thread-129133] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T14:13:32.326 [DEBUG] [Thread-129133] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:13:32.358 [INFO] [Thread-129133] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:13:32.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:13:33.081 [DEBUG] [Thread-129133] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:13:33.081 [DEBUG] [Thread-129133] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:13:33.081 [DEBUG] [Thread-129133] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T14:13:33.122 [DEBUG] [Thread-129133] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:13:33.122 [DEBUG] [Thread-129133] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:13:33.124 [DEBUG] [Thread-129133] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:13:33.137 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:13:33.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T14:13:33.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T14:13:33.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T14:13:33.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:13:33.143 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T14:13:33.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:13:33.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:13:33.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T14:13:33.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.508823 -999.00  +26.30  24.85     14   -3.10 1 2 1 1 1   888    0 29.22 32.21 ----- 28.9 24.9 292.2 33.5 31.2 -20.9 30.9 -19.3 30.6 -23.3 31.2 -20.9
2025-12-31T14:13:33.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T14:13:33.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T14:13:33.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.508823
2025-12-31T14:13:33.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T14:13:33.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T14:13:33.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T14:13:33.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T14:13:33.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T14:13:33.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T14:13:21', tmtdew=35.43, humidity=9.17, cloud=0.0, wind=31.0, temperature=26.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T12:12:42.307', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T14:13:33.144 [DEBUG] [Thread-129133] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:13:33.219 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T14:13:33.231 [DEBUG] [Thread-129136] [transport.py] [_log()] starting thread (client mode): 0xb9558b20
2025-12-31T14:13:33.231 [DEBUG] [Thread-129136] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:13:33.246 [DEBUG] [Thread-129136] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T14:13:33.246 [INFO] [Thread-129136] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T14:13:33.253 [DEBUG] [Thread-129136] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:13:33.253 [DEBUG] [Thread-129136] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T14:13:33.253 [DEBUG] [Thread-129136] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:13:33.253 [DEBUG] [Thread-129136] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:13:33.253 [DEBUG] [Thread-129136] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:13:33.253 [DEBUG] [Thread-129136] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:13:33.253 [DEBUG] [Thread-129136] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:13:33.253 [DEBUG] [Thread-129136] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:13:33.253 [DEBUG] [Thread-129136] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:13:33.253 [DEBUG] [Thread-129136] [transport.py] [_log()] client lang: <none>
2025-12-31T14:13:33.253 [DEBUG] [Thread-129136] [transport.py] [_log()] server lang: <none>
2025-12-31T14:13:33.253 [DEBUG] [Thread-129136] [transport.py] [_log()] kex follows: False
2025-12-31T14:13:33.253 [DEBUG] [Thread-129136] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:13:33.253 [DEBUG] [Thread-129136] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:13:33.253 [DEBUG] [Thread-129136] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:13:33.253 [DEBUG] [Thread-129136] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:13:33.253 [DEBUG] [Thread-129136] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:13:33.253 [DEBUG] [Thread-129136] [transport.py] [_log()] Compression: none
2025-12-31T14:13:33.253 [DEBUG] [Thread-129136] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:13:33.310 [DEBUG] [Thread-129136] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:13:33.310 [DEBUG] [Thread-129136] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:13:33.311 [DEBUG] [Thread-129136] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T14:13:33.311 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T14:13:33.311 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:13:33.368 [DEBUG] [Thread-129136] [transport.py] [_log()] userauth is OK
2025-12-31T14:13:33.368 [DEBUG] [Thread-129136] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:13:33.368 [DEBUG] [Thread-129136] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:13:33.368 [DEBUG] [Thread-129136] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T14:13:33.368 [DEBUG] [Thread-129136] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:13:33.382 [INFO] [Thread-129136] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:13:33.382 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T14:13:33.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:13:34.277 [DEBUG] [Thread-129136] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:13:34.277 [DEBUG] [Thread-129136] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:13:34.324 [DEBUG] [Thread-129136] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:13:34.324 [DEBUG] [Thread-129136] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:13:34.333 [DEBUG] [Thread-129136] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:13:34.341 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:13:34.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T14:13:34.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T14:13:34.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:13:34.357 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:13:34.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:13:34.365 [DEBUG] [Thread-129136] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:13:44.029 [DEBUG] [Thread-129138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:13:57.133 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:13:57.135 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:13:59.078 [DEBUG] [Thread-129139 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:14:04.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T14:14:04.387 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T14:14:04.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T14:14:05.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 14, 13, 53), 37.16, 7.74, 0.0, 34.44, 27.21, 0, 0, 0, 2, 0, 0),)
2025-12-31T14:14:05.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 14:13:53
2025-12-31T14:14:05.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T14:14:05.379 [DEBUG] [Thread-129140] [transport.py] [_log()] starting thread (client mode): 0xb6bba6b0
2025-12-31T14:14:05.379 [DEBUG] [Thread-129140] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:14:05.399 [DEBUG] [Thread-129140] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T14:14:05.399 [INFO] [Thread-129140] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T14:14:05.402 [DEBUG] [Thread-129140] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:14:05.402 [DEBUG] [Thread-129140] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T14:14:05.402 [DEBUG] [Thread-129140] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:14:05.402 [DEBUG] [Thread-129140] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:14:05.402 [DEBUG] [Thread-129140] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:14:05.402 [DEBUG] [Thread-129140] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:14:05.402 [DEBUG] [Thread-129140] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:14:05.402 [DEBUG] [Thread-129140] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:14:05.402 [DEBUG] [Thread-129140] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:14:05.402 [DEBUG] [Thread-129140] [transport.py] [_log()] client lang: <none>
2025-12-31T14:14:05.403 [DEBUG] [Thread-129140] [transport.py] [_log()] server lang: <none>
2025-12-31T14:14:05.403 [DEBUG] [Thread-129140] [transport.py] [_log()] kex follows: False
2025-12-31T14:14:05.403 [DEBUG] [Thread-129140] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:14:05.403 [DEBUG] [Thread-129140] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:14:05.403 [DEBUG] [Thread-129140] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:14:05.403 [DEBUG] [Thread-129140] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:14:05.403 [DEBUG] [Thread-129140] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:14:05.403 [DEBUG] [Thread-129140] [transport.py] [_log()] Compression: none
2025-12-31T14:14:05.403 [DEBUG] [Thread-129140] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:14:05.420 [DEBUG] [Thread-129140] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:14:05.421 [DEBUG] [Thread-129140] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:14:05.421 [DEBUG] [Thread-129140] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T14:14:05.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T14:14:05.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:14:05.423 [DEBUG] [Thread-129140] [transport.py] [_log()] userauth is OK
2025-12-31T14:14:05.423 [DEBUG] [Thread-129140] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:14:05.423 [DEBUG] [Thread-129140] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:14:05.423 [DEBUG] [Thread-129140] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T14:14:05.423 [DEBUG] [Thread-129140] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:14:05.435 [INFO] [Thread-129140] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:14:05.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:14:06.063 [DEBUG] [Thread-129140] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:14:06.063 [DEBUG] [Thread-129140] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:14:06.064 [DEBUG] [Thread-129140] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T14:14:06.104 [DEBUG] [Thread-129140] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:14:06.104 [DEBUG] [Thread-129140] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:14:06.106 [DEBUG] [Thread-129140] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:14:06.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:14:06.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T14:14:06.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T14:14:06.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T14:14:06.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:14:06.119 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T14:14:06.119 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:14:06.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:14:06.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T14:14:06.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.509170 -999.00  +26.30  36.62     13   -3.90 1 2 2 1 1   888    0 28.60 37.23 ----- 38.8 36.6 290.6 43.7 31.2 -22.0 30.9 -20.7 30.7 -22.5 31.2 -21.4
2025-12-31T14:14:06.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T14:14:06.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T14:14:06.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.509170
2025-12-31T14:14:06.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T14:14:06.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T14:14:06.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T14:14:06.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T14:14:06.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T14:14:06.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T14:13:53', tmtdew=37.16, humidity=7.74, cloud=0.0, wind=34.44, temperature=27.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T12:13:12.288', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T14:14:06.121 [DEBUG] [Thread-129140] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:14:06.208 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T14:14:06.219 [DEBUG] [Thread-129143] [transport.py] [_log()] starting thread (client mode): 0xb6bbb700
2025-12-31T14:14:06.219 [DEBUG] [Thread-129143] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:14:06.235 [DEBUG] [Thread-129143] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T14:14:06.235 [INFO] [Thread-129143] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T14:14:06.242 [DEBUG] [Thread-129143] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:14:06.242 [DEBUG] [Thread-129143] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T14:14:06.242 [DEBUG] [Thread-129143] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:14:06.242 [DEBUG] [Thread-129143] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:14:06.242 [DEBUG] [Thread-129143] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:14:06.242 [DEBUG] [Thread-129143] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:14:06.242 [DEBUG] [Thread-129143] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:14:06.242 [DEBUG] [Thread-129143] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:14:06.242 [DEBUG] [Thread-129143] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:14:06.242 [DEBUG] [Thread-129143] [transport.py] [_log()] client lang: <none>
2025-12-31T14:14:06.242 [DEBUG] [Thread-129143] [transport.py] [_log()] server lang: <none>
2025-12-31T14:14:06.242 [DEBUG] [Thread-129143] [transport.py] [_log()] kex follows: False
2025-12-31T14:14:06.242 [DEBUG] [Thread-129143] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:14:06.243 [DEBUG] [Thread-129143] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:14:06.243 [DEBUG] [Thread-129143] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:14:06.243 [DEBUG] [Thread-129143] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:14:06.243 [DEBUG] [Thread-129143] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:14:06.243 [DEBUG] [Thread-129143] [transport.py] [_log()] Compression: none
2025-12-31T14:14:06.243 [DEBUG] [Thread-129143] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:14:06.300 [DEBUG] [Thread-129143] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:14:06.301 [DEBUG] [Thread-129143] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:14:06.301 [DEBUG] [Thread-129143] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T14:14:06.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T14:14:06.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:14:06.357 [DEBUG] [Thread-129143] [transport.py] [_log()] userauth is OK
2025-12-31T14:14:06.357 [DEBUG] [Thread-129143] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:14:06.357 [DEBUG] [Thread-129143] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:14:06.357 [DEBUG] [Thread-129143] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T14:14:06.357 [DEBUG] [Thread-129143] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:14:06.375 [INFO] [Thread-129143] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:14:06.376 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T14:14:06.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:14:07.261 [DEBUG] [Thread-129143] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:14:07.261 [DEBUG] [Thread-129143] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:14:07.309 [DEBUG] [Thread-129143] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:14:07.310 [DEBUG] [Thread-129143] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:14:07.318 [DEBUG] [Thread-129143] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:14:07.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:14:07.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T14:14:07.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T14:14:07.345 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:14:07.345 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:14:07.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:14:07.353 [DEBUG] [Thread-129143] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:14:14.111 [DEBUG] [Thread-129145 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:14:17.800 [DEBUG] [Thread-129146 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:14:29.150 [DEBUG] [Thread-129147 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:14:37.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T14:14:37.372 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T14:14:37.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T14:14:38.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 14, 14, 25), 37.16, 7.71, 0.0, 33.19, 27.01, 0, 0, 0, 2, 0, 0),)
2025-12-31T14:14:38.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 14:14:25
2025-12-31T14:14:38.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T14:14:38.358 [DEBUG] [Thread-129148] [transport.py] [_log()] starting thread (client mode): 0xb6b29420
2025-12-31T14:14:38.358 [DEBUG] [Thread-129148] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:14:38.386 [DEBUG] [Thread-129148] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T14:14:38.386 [INFO] [Thread-129148] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T14:14:38.389 [DEBUG] [Thread-129148] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:14:38.390 [DEBUG] [Thread-129148] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T14:14:38.390 [DEBUG] [Thread-129148] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:14:38.390 [DEBUG] [Thread-129148] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:14:38.390 [DEBUG] [Thread-129148] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:14:38.390 [DEBUG] [Thread-129148] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:14:38.390 [DEBUG] [Thread-129148] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:14:38.390 [DEBUG] [Thread-129148] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:14:38.390 [DEBUG] [Thread-129148] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:14:38.390 [DEBUG] [Thread-129148] [transport.py] [_log()] client lang: <none>
2025-12-31T14:14:38.390 [DEBUG] [Thread-129148] [transport.py] [_log()] server lang: <none>
2025-12-31T14:14:38.390 [DEBUG] [Thread-129148] [transport.py] [_log()] kex follows: False
2025-12-31T14:14:38.390 [DEBUG] [Thread-129148] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:14:38.390 [DEBUG] [Thread-129148] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:14:38.390 [DEBUG] [Thread-129148] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:14:38.390 [DEBUG] [Thread-129148] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:14:38.391 [DEBUG] [Thread-129148] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:14:38.391 [DEBUG] [Thread-129148] [transport.py] [_log()] Compression: none
2025-12-31T14:14:38.391 [DEBUG] [Thread-129148] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:14:38.408 [DEBUG] [Thread-129148] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:14:38.409 [DEBUG] [Thread-129148] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:14:38.409 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T14:14:38.410 [DEBUG] [Thread-129148] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T14:14:38.410 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:14:38.412 [DEBUG] [Thread-129148] [transport.py] [_log()] userauth is OK
2025-12-31T14:14:38.412 [DEBUG] [Thread-129148] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:14:38.412 [DEBUG] [Thread-129148] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:14:38.412 [DEBUG] [Thread-129148] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T14:14:38.412 [DEBUG] [Thread-129148] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:14:38.436 [INFO] [Thread-129148] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:14:38.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:14:39.211 [DEBUG] [Thread-129148] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:14:39.211 [DEBUG] [Thread-129148] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:14:39.212 [DEBUG] [Thread-129148] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T14:14:39.252 [DEBUG] [Thread-129148] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:14:39.252 [DEBUG] [Thread-129148] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:14:39.255 [DEBUG] [Thread-129148] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:14:39.270 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:14:39.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T14:14:39.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T14:14:39.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T14:14:39.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:14:39.280 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T14:14:39.280 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:14:39.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:14:39.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T14:14:39.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.509517 -999.00  +26.20  37.86     13   -4.10 1 2 2 1 1   888    0 30.06 44.34 ----- 38.2 37.9 295.0 42.8 31.2 -22.1 30.9 -20.2 30.5 -21.2 31.1 -20.6
2025-12-31T14:14:39.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T14:14:39.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T14:14:39.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.509517
2025-12-31T14:14:39.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T14:14:39.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T14:14:39.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T14:14:39.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T14:14:39.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T14:14:39.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T14:14:25', tmtdew=37.16, humidity=7.71, cloud=0.0, wind=33.19, temperature=27.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T12:13:42.269', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T14:14:39.283 [DEBUG] [Thread-129148] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:14:39.366 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T14:14:39.378 [DEBUG] [Thread-129151] [transport.py] [_log()] starting thread (client mode): 0xb6bbbbb0
2025-12-31T14:14:39.378 [DEBUG] [Thread-129151] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:14:39.393 [DEBUG] [Thread-129151] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T14:14:39.393 [INFO] [Thread-129151] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T14:14:39.401 [DEBUG] [Thread-129151] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:14:39.401 [DEBUG] [Thread-129151] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T14:14:39.401 [DEBUG] [Thread-129151] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:14:39.401 [DEBUG] [Thread-129151] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:14:39.402 [DEBUG] [Thread-129151] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:14:39.402 [DEBUG] [Thread-129151] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:14:39.402 [DEBUG] [Thread-129151] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:14:39.402 [DEBUG] [Thread-129151] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:14:39.402 [DEBUG] [Thread-129151] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:14:39.402 [DEBUG] [Thread-129151] [transport.py] [_log()] client lang: <none>
2025-12-31T14:14:39.402 [DEBUG] [Thread-129151] [transport.py] [_log()] server lang: <none>
2025-12-31T14:14:39.402 [DEBUG] [Thread-129151] [transport.py] [_log()] kex follows: False
2025-12-31T14:14:39.402 [DEBUG] [Thread-129151] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:14:39.403 [DEBUG] [Thread-129151] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:14:39.403 [DEBUG] [Thread-129151] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:14:39.403 [DEBUG] [Thread-129151] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:14:39.403 [DEBUG] [Thread-129151] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:14:39.403 [DEBUG] [Thread-129151] [transport.py] [_log()] Compression: none
2025-12-31T14:14:39.403 [DEBUG] [Thread-129151] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:14:39.462 [DEBUG] [Thread-129151] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:14:39.462 [DEBUG] [Thread-129151] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:14:39.463 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T14:14:39.463 [DEBUG] [Thread-129151] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T14:14:39.464 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:14:39.518 [DEBUG] [Thread-129151] [transport.py] [_log()] userauth is OK
2025-12-31T14:14:39.518 [DEBUG] [Thread-129151] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:14:39.518 [DEBUG] [Thread-129151] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:14:39.518 [DEBUG] [Thread-129151] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T14:14:39.518 [DEBUG] [Thread-129151] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:14:39.537 [INFO] [Thread-129151] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:14:39.538 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T14:14:39.538 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:14:40.376 [DEBUG] [Thread-129151] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:14:40.376 [DEBUG] [Thread-129151] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:14:40.424 [DEBUG] [Thread-129151] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:14:40.424 [DEBUG] [Thread-129151] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:14:40.433 [DEBUG] [Thread-129151] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:14:40.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:14:40.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T14:14:40.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T14:14:40.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:14:40.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:14:40.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:14:40.469 [DEBUG] [Thread-129151] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:14:44.186 [DEBUG] [Thread-129153 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:14:57.274 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:14:57.275 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:14:59.230 [DEBUG] [Thread-129154 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:15:10.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T14:15:10.485 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T14:15:10.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T14:15:11.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 14, 14, 57), 36.81, 7.91, 0.0, 28.85, 26.58, 0, 0, 0, 2, 0, 0),)
2025-12-31T14:15:11.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 14:14:57
2025-12-31T14:15:11.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T14:15:11.470 [DEBUG] [Thread-129155] [transport.py] [_log()] starting thread (client mode): 0xb6bb0520
2025-12-31T14:15:11.470 [DEBUG] [Thread-129155] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:15:11.491 [DEBUG] [Thread-129155] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T14:15:11.491 [INFO] [Thread-129155] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T14:15:11.495 [DEBUG] [Thread-129155] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:15:11.495 [DEBUG] [Thread-129155] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T14:15:11.495 [DEBUG] [Thread-129155] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:15:11.495 [DEBUG] [Thread-129155] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:15:11.495 [DEBUG] [Thread-129155] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:15:11.495 [DEBUG] [Thread-129155] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:15:11.495 [DEBUG] [Thread-129155] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:15:11.495 [DEBUG] [Thread-129155] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:15:11.495 [DEBUG] [Thread-129155] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:15:11.495 [DEBUG] [Thread-129155] [transport.py] [_log()] client lang: <none>
2025-12-31T14:15:11.495 [DEBUG] [Thread-129155] [transport.py] [_log()] server lang: <none>
2025-12-31T14:15:11.495 [DEBUG] [Thread-129155] [transport.py] [_log()] kex follows: False
2025-12-31T14:15:11.495 [DEBUG] [Thread-129155] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:15:11.496 [DEBUG] [Thread-129155] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:15:11.496 [DEBUG] [Thread-129155] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:15:11.496 [DEBUG] [Thread-129155] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:15:11.496 [DEBUG] [Thread-129155] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:15:11.496 [DEBUG] [Thread-129155] [transport.py] [_log()] Compression: none
2025-12-31T14:15:11.496 [DEBUG] [Thread-129155] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:15:11.513 [DEBUG] [Thread-129155] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:15:11.514 [DEBUG] [Thread-129155] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:15:11.514 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T14:15:11.514 [DEBUG] [Thread-129155] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T14:15:11.515 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:15:11.516 [DEBUG] [Thread-129155] [transport.py] [_log()] userauth is OK
2025-12-31T14:15:11.516 [DEBUG] [Thread-129155] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:15:11.516 [DEBUG] [Thread-129155] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:15:11.517 [DEBUG] [Thread-129155] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T14:15:11.517 [DEBUG] [Thread-129155] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:15:11.538 [INFO] [Thread-129155] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:15:11.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:15:14.264 [DEBUG] [Thread-129157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:15:15.074 [DEBUG] [Thread-129155] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:15:15.075 [DEBUG] [Thread-129155] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:15:15.075 [DEBUG] [Thread-129155] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T14:15:15.116 [DEBUG] [Thread-129155] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:15:15.116 [DEBUG] [Thread-129155] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:15:15.120 [DEBUG] [Thread-129155] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:15:15.131 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:15:15.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T14:15:15.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T14:15:15.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T14:15:15.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:15:15.193 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T14:15:15.193 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:15:15.193 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:15:15.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T14:15:15.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.509864 -999.00  +26.00  32.93     13   -4.20 1 2 2 1 1   888    0 29.77 47.17 ----- 33.7 32.9 298.2 45.8 31.0 -21.5 30.8 -20.4 30.4 -20.0 31.1 -20.9
2025-12-31T14:15:15.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T14:15:15.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T14:15:15.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.509864
2025-12-31T14:15:15.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T14:15:15.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T14:15:15.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T14:15:15.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T14:15:15.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T14:15:15.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T14:14:57', tmtdew=36.81, humidity=7.91, cloud=0.0, wind=28.85, temperature=26.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T12:14:12.250', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T14:15:15.196 [DEBUG] [Thread-129155] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:15:15.283 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T14:15:15.295 [DEBUG] [Thread-129159] [transport.py] [_log()] starting thread (client mode): 0xb9558880
2025-12-31T14:15:15.295 [DEBUG] [Thread-129159] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:15:15.310 [DEBUG] [Thread-129159] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T14:15:15.310 [INFO] [Thread-129159] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T14:15:15.317 [DEBUG] [Thread-129159] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:15:15.318 [DEBUG] [Thread-129159] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T14:15:15.318 [DEBUG] [Thread-129159] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:15:15.318 [DEBUG] [Thread-129159] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:15:15.318 [DEBUG] [Thread-129159] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:15:15.318 [DEBUG] [Thread-129159] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:15:15.318 [DEBUG] [Thread-129159] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:15:15.318 [DEBUG] [Thread-129159] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:15:15.318 [DEBUG] [Thread-129159] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:15:15.318 [DEBUG] [Thread-129159] [transport.py] [_log()] client lang: <none>
2025-12-31T14:15:15.318 [DEBUG] [Thread-129159] [transport.py] [_log()] server lang: <none>
2025-12-31T14:15:15.318 [DEBUG] [Thread-129159] [transport.py] [_log()] kex follows: False
2025-12-31T14:15:15.318 [DEBUG] [Thread-129159] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:15:15.318 [DEBUG] [Thread-129159] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:15:15.318 [DEBUG] [Thread-129159] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:15:15.318 [DEBUG] [Thread-129159] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:15:15.318 [DEBUG] [Thread-129159] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:15:15.319 [DEBUG] [Thread-129159] [transport.py] [_log()] Compression: none
2025-12-31T14:15:15.319 [DEBUG] [Thread-129159] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:15:15.378 [DEBUG] [Thread-129159] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:15:15.379 [DEBUG] [Thread-129159] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:15:15.379 [DEBUG] [Thread-129159] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T14:15:15.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T14:15:15.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:15:15.434 [DEBUG] [Thread-129159] [transport.py] [_log()] userauth is OK
2025-12-31T14:15:15.434 [DEBUG] [Thread-129159] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:15:15.434 [DEBUG] [Thread-129159] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:15:15.434 [DEBUG] [Thread-129159] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T14:15:15.434 [DEBUG] [Thread-129159] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:15:15.452 [INFO] [Thread-129159] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:15:15.452 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T14:15:15.453 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:15:16.279 [DEBUG] [Thread-129159] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:15:16.280 [DEBUG] [Thread-129159] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:15:16.327 [DEBUG] [Thread-129159] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:15:16.327 [DEBUG] [Thread-129159] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:15:16.337 [DEBUG] [Thread-129159] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:15:16.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:15:16.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T14:15:16.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T14:15:16.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:15:16.365 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:15:16.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:15:16.373 [DEBUG] [Thread-129159] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:15:17.848 [DEBUG] [Thread-129161 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:15:29.301 [DEBUG] [Thread-129162 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:15:44.352 [DEBUG] [Thread-129163 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:15:46.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T14:15:46.396 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T14:15:46.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T14:15:47.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 14, 15, 29), 36.88, 7.91, 0.0, 30.68, 26.84, 0, 0, 0, 2, 0, 0),)
2025-12-31T14:15:47.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 14:15:29
2025-12-31T14:15:47.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T14:15:47.357 [DEBUG] [Thread-129164] [transport.py] [_log()] starting thread (client mode): 0xb95587c0
2025-12-31T14:15:47.357 [DEBUG] [Thread-129164] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:15:47.378 [DEBUG] [Thread-129164] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T14:15:47.378 [INFO] [Thread-129164] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T14:15:47.380 [DEBUG] [Thread-129164] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:15:47.380 [DEBUG] [Thread-129164] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T14:15:47.380 [DEBUG] [Thread-129164] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:15:47.380 [DEBUG] [Thread-129164] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:15:47.380 [DEBUG] [Thread-129164] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:15:47.380 [DEBUG] [Thread-129164] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:15:47.380 [DEBUG] [Thread-129164] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:15:47.380 [DEBUG] [Thread-129164] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:15:47.380 [DEBUG] [Thread-129164] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:15:47.380 [DEBUG] [Thread-129164] [transport.py] [_log()] client lang: <none>
2025-12-31T14:15:47.380 [DEBUG] [Thread-129164] [transport.py] [_log()] server lang: <none>
2025-12-31T14:15:47.380 [DEBUG] [Thread-129164] [transport.py] [_log()] kex follows: False
2025-12-31T14:15:47.380 [DEBUG] [Thread-129164] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:15:47.380 [DEBUG] [Thread-129164] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:15:47.380 [DEBUG] [Thread-129164] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:15:47.380 [DEBUG] [Thread-129164] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:15:47.380 [DEBUG] [Thread-129164] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:15:47.380 [DEBUG] [Thread-129164] [transport.py] [_log()] Compression: none
2025-12-31T14:15:47.380 [DEBUG] [Thread-129164] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:15:47.396 [DEBUG] [Thread-129164] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:15:47.397 [DEBUG] [Thread-129164] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:15:47.397 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T14:15:47.397 [DEBUG] [Thread-129164] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T14:15:47.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:15:47.399 [DEBUG] [Thread-129164] [transport.py] [_log()] userauth is OK
2025-12-31T14:15:47.399 [DEBUG] [Thread-129164] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:15:47.400 [DEBUG] [Thread-129164] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:15:47.400 [DEBUG] [Thread-129164] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T14:15:47.400 [DEBUG] [Thread-129164] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:15:47.420 [INFO] [Thread-129164] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:15:47.420 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:15:48.051 [DEBUG] [Thread-129164] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:15:48.052 [DEBUG] [Thread-129164] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:15:48.052 [DEBUG] [Thread-129164] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T14:15:48.093 [DEBUG] [Thread-129164] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:15:48.093 [DEBUG] [Thread-129164] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:15:48.096 [DEBUG] [Thread-129164] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:15:48.108 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:15:48.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T14:15:48.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T14:15:48.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T14:15:48.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:15:48.114 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T14:15:48.114 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:15:48.114 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:15:48.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T14:15:48.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.510212 -999.00  +25.90  38.07     13   -4.00 1 2 2 1 1   888    0 29.68 51.15 ----- 35.0 38.1 314.0 40.4 31.2 -19.8 30.9 -18.4 30.4 -20.2 31.1 -19.1
2025-12-31T14:15:48.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T14:15:48.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T14:15:48.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.510212
2025-12-31T14:15:48.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T14:15:48.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T14:15:48.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T14:15:48.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T14:15:48.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T14:15:48.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T14:15:29', tmtdew=36.88, humidity=7.91, cloud=0.0, wind=30.68, temperature=26.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T12:14:42.317', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T14:15:48.115 [DEBUG] [Thread-129164] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:15:48.193 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T14:15:48.204 [DEBUG] [Thread-129167] [transport.py] [_log()] starting thread (client mode): 0xb6b2b790
2025-12-31T14:15:48.204 [DEBUG] [Thread-129167] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:15:48.219 [DEBUG] [Thread-129167] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T14:15:48.219 [INFO] [Thread-129167] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T14:15:48.227 [DEBUG] [Thread-129167] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:15:48.227 [DEBUG] [Thread-129167] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T14:15:48.227 [DEBUG] [Thread-129167] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:15:48.227 [DEBUG] [Thread-129167] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:15:48.227 [DEBUG] [Thread-129167] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:15:48.227 [DEBUG] [Thread-129167] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:15:48.227 [DEBUG] [Thread-129167] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:15:48.228 [DEBUG] [Thread-129167] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:15:48.228 [DEBUG] [Thread-129167] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:15:48.228 [DEBUG] [Thread-129167] [transport.py] [_log()] client lang: <none>
2025-12-31T14:15:48.228 [DEBUG] [Thread-129167] [transport.py] [_log()] server lang: <none>
2025-12-31T14:15:48.228 [DEBUG] [Thread-129167] [transport.py] [_log()] kex follows: False
2025-12-31T14:15:48.228 [DEBUG] [Thread-129167] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:15:48.228 [DEBUG] [Thread-129167] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:15:48.228 [DEBUG] [Thread-129167] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:15:48.228 [DEBUG] [Thread-129167] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:15:48.228 [DEBUG] [Thread-129167] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:15:48.228 [DEBUG] [Thread-129167] [transport.py] [_log()] Compression: none
2025-12-31T14:15:48.228 [DEBUG] [Thread-129167] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:15:48.287 [DEBUG] [Thread-129167] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:15:48.288 [DEBUG] [Thread-129167] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:15:48.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T14:15:48.289 [DEBUG] [Thread-129167] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T14:15:48.290 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:15:48.343 [DEBUG] [Thread-129167] [transport.py] [_log()] userauth is OK
2025-12-31T14:15:48.343 [DEBUG] [Thread-129167] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:15:48.343 [DEBUG] [Thread-129167] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:15:48.344 [DEBUG] [Thread-129167] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T14:15:48.344 [DEBUG] [Thread-129167] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:15:48.363 [INFO] [Thread-129167] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:15:48.363 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T14:15:48.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:15:49.204 [DEBUG] [Thread-129167] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:15:49.205 [DEBUG] [Thread-129167] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:15:49.252 [DEBUG] [Thread-129167] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:15:49.253 [DEBUG] [Thread-129167] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:15:49.261 [DEBUG] [Thread-129167] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:15:49.270 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:15:49.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T14:15:49.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T14:15:49.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:15:49.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:15:49.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:15:49.295 [DEBUG] [Thread-129167] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:15:57.415 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:15:57.417 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:15:59.391 [DEBUG] [Thread-129169 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:16:14.436 [DEBUG] [Thread-129170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:16:17.902 [DEBUG] [Thread-129171 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:16:19.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T14:16:19.315 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T14:16:19.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T14:16:20.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 14, 16, 2), 37.02, 7.81, 0.0, 31.56, 26.76, 0, 0, 0, 2, 0, 0),)
2025-12-31T14:16:20.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 14:16:02
2025-12-31T14:16:20.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T14:16:20.294 [DEBUG] [Thread-129172] [transport.py] [_log()] starting thread (client mode): 0xb6b2bfa0
2025-12-31T14:16:20.294 [DEBUG] [Thread-129172] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:16:20.314 [DEBUG] [Thread-129172] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T14:16:20.314 [INFO] [Thread-129172] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T14:16:20.317 [DEBUG] [Thread-129172] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:16:20.318 [DEBUG] [Thread-129172] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T14:16:20.327 [DEBUG] [Thread-129172] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:16:20.327 [DEBUG] [Thread-129172] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:16:20.327 [DEBUG] [Thread-129172] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:16:20.327 [DEBUG] [Thread-129172] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:16:20.327 [DEBUG] [Thread-129172] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:16:20.327 [DEBUG] [Thread-129172] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:16:20.327 [DEBUG] [Thread-129172] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:16:20.328 [DEBUG] [Thread-129172] [transport.py] [_log()] client lang: <none>
2025-12-31T14:16:20.328 [DEBUG] [Thread-129172] [transport.py] [_log()] server lang: <none>
2025-12-31T14:16:20.328 [DEBUG] [Thread-129172] [transport.py] [_log()] kex follows: False
2025-12-31T14:16:20.328 [DEBUG] [Thread-129172] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:16:20.328 [DEBUG] [Thread-129172] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:16:20.328 [DEBUG] [Thread-129172] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:16:20.328 [DEBUG] [Thread-129172] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:16:20.328 [DEBUG] [Thread-129172] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:16:20.328 [DEBUG] [Thread-129172] [transport.py] [_log()] Compression: none
2025-12-31T14:16:20.328 [DEBUG] [Thread-129172] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:16:20.348 [DEBUG] [Thread-129172] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:16:20.349 [DEBUG] [Thread-129172] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:16:20.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T14:16:20.350 [DEBUG] [Thread-129172] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T14:16:20.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:16:20.352 [DEBUG] [Thread-129172] [transport.py] [_log()] userauth is OK
2025-12-31T14:16:20.352 [DEBUG] [Thread-129172] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:16:20.353 [DEBUG] [Thread-129172] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:16:20.353 [DEBUG] [Thread-129172] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T14:16:20.353 [DEBUG] [Thread-129172] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:16:20.377 [INFO] [Thread-129172] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:16:20.378 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:16:21.135 [DEBUG] [Thread-129172] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:16:21.135 [DEBUG] [Thread-129172] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:16:21.136 [DEBUG] [Thread-129172] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T14:16:21.176 [DEBUG] [Thread-129172] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:16:21.176 [DEBUG] [Thread-129172] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:16:21.180 [DEBUG] [Thread-129172] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:16:21.186 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:16:21.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T14:16:21.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T14:16:21.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T14:16:21.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:16:21.199 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T14:16:21.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:16:21.199 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:16:21.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T14:16:21.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.510906 -999.00  +26.20  31.78     13   -3.80 1 2 2 1 1   888    0 30.10 54.99 ----- 30.1 31.8 312.2 38.2 31.5 -19.7 31.2 -18.4 30.9 -16.6 31.5 -18.6
2025-12-31T14:16:21.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T14:16:21.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T14:16:21.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.510906
2025-12-31T14:16:21.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T14:16:21.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T14:16:21.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T14:16:21.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T14:16:21.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T14:16:21.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T14:16:02', tmtdew=37.02, humidity=7.81, cloud=0.0, wind=31.56, temperature=26.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T12:15:42.278', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T14:16:21.202 [DEBUG] [Thread-129172] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:16:21.285 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T14:16:21.297 [DEBUG] [Thread-129175] [transport.py] [_log()] starting thread (client mode): 0xb955aa10
2025-12-31T14:16:21.297 [DEBUG] [Thread-129175] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:16:21.312 [DEBUG] [Thread-129175] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T14:16:21.312 [INFO] [Thread-129175] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T14:16:21.319 [DEBUG] [Thread-129175] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:16:21.319 [DEBUG] [Thread-129175] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T14:16:21.320 [DEBUG] [Thread-129175] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:16:21.320 [DEBUG] [Thread-129175] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:16:21.320 [DEBUG] [Thread-129175] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:16:21.320 [DEBUG] [Thread-129175] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:16:21.320 [DEBUG] [Thread-129175] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:16:21.320 [DEBUG] [Thread-129175] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:16:21.320 [DEBUG] [Thread-129175] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:16:21.320 [DEBUG] [Thread-129175] [transport.py] [_log()] client lang: <none>
2025-12-31T14:16:21.320 [DEBUG] [Thread-129175] [transport.py] [_log()] server lang: <none>
2025-12-31T14:16:21.320 [DEBUG] [Thread-129175] [transport.py] [_log()] kex follows: False
2025-12-31T14:16:21.320 [DEBUG] [Thread-129175] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:16:21.320 [DEBUG] [Thread-129175] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:16:21.320 [DEBUG] [Thread-129175] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:16:21.320 [DEBUG] [Thread-129175] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:16:21.320 [DEBUG] [Thread-129175] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:16:21.320 [DEBUG] [Thread-129175] [transport.py] [_log()] Compression: none
2025-12-31T14:16:21.320 [DEBUG] [Thread-129175] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:16:21.379 [DEBUG] [Thread-129175] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:16:21.380 [DEBUG] [Thread-129175] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:16:21.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T14:16:21.381 [DEBUG] [Thread-129175] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T14:16:21.382 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:16:21.436 [DEBUG] [Thread-129175] [transport.py] [_log()] userauth is OK
2025-12-31T14:16:21.436 [DEBUG] [Thread-129175] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:16:21.436 [DEBUG] [Thread-129175] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:16:21.436 [DEBUG] [Thread-129175] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T14:16:21.436 [DEBUG] [Thread-129175] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:16:21.455 [INFO] [Thread-129175] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:16:21.455 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T14:16:21.455 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:16:22.289 [DEBUG] [Thread-129175] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:16:22.289 [DEBUG] [Thread-129175] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:16:22.337 [DEBUG] [Thread-129175] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:16:22.337 [DEBUG] [Thread-129175] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:16:22.347 [DEBUG] [Thread-129175] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:16:22.356 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:16:22.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T14:16:22.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-12-31T14:16:22.375 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:16:22.375 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:16:22.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:16:22.384 [DEBUG] [Thread-129175] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:16:29.468 [DEBUG] [Thread-129177 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:16:44.519 [DEBUG] [Thread-129178 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:16:52.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T14:16:52.406 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T14:16:52.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T14:16:53.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 14, 16, 34), 37.64, 7.81, 0.0, 30.45, 28.08, 0, 0, 0, 2, 0, 0),)
2025-12-31T14:16:53.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 14:16:34
2025-12-31T14:16:53.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T14:16:53.429 [DEBUG] [Thread-129179] [transport.py] [_log()] starting thread (client mode): 0xb9559cf0
2025-12-31T14:16:53.429 [DEBUG] [Thread-129179] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:16:53.449 [DEBUG] [Thread-129179] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T14:16:53.449 [INFO] [Thread-129179] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T14:16:53.452 [DEBUG] [Thread-129179] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:16:53.452 [DEBUG] [Thread-129179] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T14:16:53.452 [DEBUG] [Thread-129179] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:16:53.452 [DEBUG] [Thread-129179] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:16:53.452 [DEBUG] [Thread-129179] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:16:53.452 [DEBUG] [Thread-129179] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:16:53.452 [DEBUG] [Thread-129179] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:16:53.452 [DEBUG] [Thread-129179] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:16:53.452 [DEBUG] [Thread-129179] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:16:53.452 [DEBUG] [Thread-129179] [transport.py] [_log()] client lang: <none>
2025-12-31T14:16:53.452 [DEBUG] [Thread-129179] [transport.py] [_log()] server lang: <none>
2025-12-31T14:16:53.452 [DEBUG] [Thread-129179] [transport.py] [_log()] kex follows: False
2025-12-31T14:16:53.452 [DEBUG] [Thread-129179] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:16:53.453 [DEBUG] [Thread-129179] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:16:53.453 [DEBUG] [Thread-129179] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:16:53.453 [DEBUG] [Thread-129179] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:16:53.453 [DEBUG] [Thread-129179] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:16:53.453 [DEBUG] [Thread-129179] [transport.py] [_log()] Compression: none
2025-12-31T14:16:53.453 [DEBUG] [Thread-129179] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:16:53.469 [DEBUG] [Thread-129179] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:16:53.469 [DEBUG] [Thread-129179] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:16:53.469 [DEBUG] [Thread-129179] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T14:16:53.469 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T14:16:53.469 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:16:53.469 [DEBUG] [Thread-129179] [transport.py] [_log()] userauth is OK
2025-12-31T14:16:53.469 [DEBUG] [Thread-129179] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:16:53.469 [DEBUG] [Thread-129179] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:16:53.469 [DEBUG] [Thread-129179] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T14:16:53.469 [DEBUG] [Thread-129179] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:16:53.478 [INFO] [Thread-129179] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:16:53.479 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:16:54.116 [DEBUG] [Thread-129179] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:16:54.116 [DEBUG] [Thread-129179] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:16:54.117 [DEBUG] [Thread-129179] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T14:16:54.157 [DEBUG] [Thread-129179] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:16:54.157 [DEBUG] [Thread-129179] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:16:54.160 [DEBUG] [Thread-129179] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:16:54.174 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:16:54.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T14:16:54.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T14:16:54.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T14:16:54.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:16:54.187 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T14:16:54.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:16:54.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:16:54.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T14:16:54.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.511253 -999.00  +26.20  27.06     13   -3.80 1 2 1 1 1   888    0 29.92 56.42 ----- 22.1 27.1 295.6 32.6 31.5 -20.3 31.2 -19.3 31.1 -18.0 31.6 -20.4
2025-12-31T14:16:54.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T14:16:54.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T14:16:54.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.511253
2025-12-31T14:16:54.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T14:16:54.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T14:16:54.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T14:16:54.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T14:16:54.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T14:16:54.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T14:16:34', tmtdew=37.64, humidity=7.81, cloud=0.0, wind=30.45, temperature=28.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T12:16:12.259', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T14:16:54.190 [DEBUG] [Thread-129179] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:16:54.274 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T14:16:54.285 [DEBUG] [Thread-129182] [transport.py] [_log()] starting thread (client mode): 0xb95596f0
2025-12-31T14:16:54.285 [DEBUG] [Thread-129182] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:16:54.299 [DEBUG] [Thread-129182] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T14:16:54.300 [INFO] [Thread-129182] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T14:16:54.307 [DEBUG] [Thread-129182] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:16:54.307 [DEBUG] [Thread-129182] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T14:16:54.307 [DEBUG] [Thread-129182] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:16:54.307 [DEBUG] [Thread-129182] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:16:54.307 [DEBUG] [Thread-129182] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:16:54.307 [DEBUG] [Thread-129182] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:16:54.307 [DEBUG] [Thread-129182] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:16:54.307 [DEBUG] [Thread-129182] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:16:54.307 [DEBUG] [Thread-129182] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:16:54.308 [DEBUG] [Thread-129182] [transport.py] [_log()] client lang: <none>
2025-12-31T14:16:54.308 [DEBUG] [Thread-129182] [transport.py] [_log()] server lang: <none>
2025-12-31T14:16:54.308 [DEBUG] [Thread-129182] [transport.py] [_log()] kex follows: False
2025-12-31T14:16:54.308 [DEBUG] [Thread-129182] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:16:54.308 [DEBUG] [Thread-129182] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:16:54.308 [DEBUG] [Thread-129182] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:16:54.308 [DEBUG] [Thread-129182] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:16:54.308 [DEBUG] [Thread-129182] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:16:54.308 [DEBUG] [Thread-129182] [transport.py] [_log()] Compression: none
2025-12-31T14:16:54.308 [DEBUG] [Thread-129182] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:16:54.368 [DEBUG] [Thread-129182] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:16:54.368 [DEBUG] [Thread-129182] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:16:54.369 [DEBUG] [Thread-129182] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T14:16:54.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T14:16:54.370 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:16:54.423 [DEBUG] [Thread-129182] [transport.py] [_log()] userauth is OK
2025-12-31T14:16:54.424 [DEBUG] [Thread-129182] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:16:54.424 [DEBUG] [Thread-129182] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:16:54.424 [DEBUG] [Thread-129182] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T14:16:54.424 [DEBUG] [Thread-129182] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:16:54.442 [INFO] [Thread-129182] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:16:54.443 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T14:16:54.444 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:16:55.277 [DEBUG] [Thread-129182] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:16:55.277 [DEBUG] [Thread-129182] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:16:55.325 [DEBUG] [Thread-129182] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:16:55.325 [DEBUG] [Thread-129182] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:16:55.336 [DEBUG] [Thread-129182] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:16:55.344 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:16: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-12-31T14:16:55.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T14:16:55.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:16:55.362 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:16:55.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:16:55.370 [DEBUG] [Thread-129182] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:16:57.556 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:16:57.557 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:16:59.553 [DEBUG] [Thread-129184 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:17:14.606 [DEBUG] [Thread-129185 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:17:17.954 [DEBUG] [Thread-129186 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:17:25.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T14:17:25.383 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T14:17:25.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T14:17:26.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 14, 17, 6), 37.1, 7.91, 0.0, 28.14, 27.27, 0, 0, 0, 2, 0, 0),)
2025-12-31T14:17:26.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 14:17:06
2025-12-31T14:17:26.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T14:17:26.376 [DEBUG] [Thread-129187] [transport.py] [_log()] starting thread (client mode): 0xb9558a60
2025-12-31T14:17:26.376 [DEBUG] [Thread-129187] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:17:26.396 [DEBUG] [Thread-129187] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T14:17:26.397 [INFO] [Thread-129187] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T14:17:26.399 [DEBUG] [Thread-129187] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:17:26.399 [DEBUG] [Thread-129187] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T14:17:26.400 [DEBUG] [Thread-129187] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:17:26.400 [DEBUG] [Thread-129187] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:17:26.400 [DEBUG] [Thread-129187] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:17:26.400 [DEBUG] [Thread-129187] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:17:26.400 [DEBUG] [Thread-129187] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:17:26.400 [DEBUG] [Thread-129187] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:17:26.400 [DEBUG] [Thread-129187] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:17:26.400 [DEBUG] [Thread-129187] [transport.py] [_log()] client lang: <none>
2025-12-31T14:17:26.400 [DEBUG] [Thread-129187] [transport.py] [_log()] server lang: <none>
2025-12-31T14:17:26.400 [DEBUG] [Thread-129187] [transport.py] [_log()] kex follows: False
2025-12-31T14:17:26.400 [DEBUG] [Thread-129187] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:17:26.400 [DEBUG] [Thread-129187] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:17:26.400 [DEBUG] [Thread-129187] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:17:26.400 [DEBUG] [Thread-129187] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:17:26.400 [DEBUG] [Thread-129187] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:17:26.400 [DEBUG] [Thread-129187] [transport.py] [_log()] Compression: none
2025-12-31T14:17:26.400 [DEBUG] [Thread-129187] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:17:26.415 [DEBUG] [Thread-129187] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:17:26.415 [DEBUG] [Thread-129187] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:17:26.416 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T14:17:26.416 [DEBUG] [Thread-129187] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T14:17:26.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:17:26.419 [DEBUG] [Thread-129187] [transport.py] [_log()] userauth is OK
2025-12-31T14:17:26.419 [DEBUG] [Thread-129187] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:17:26.419 [DEBUG] [Thread-129187] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:17:26.419 [DEBUG] [Thread-129187] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T14:17:26.419 [DEBUG] [Thread-129187] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:17:26.444 [INFO] [Thread-129187] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:17:26.444 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:17:27.165 [DEBUG] [Thread-129187] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:17:27.165 [DEBUG] [Thread-129187] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:17:27.165 [DEBUG] [Thread-129187] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T14:17:27.205 [DEBUG] [Thread-129187] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:17:27.205 [DEBUG] [Thread-129187] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:17:27.207 [DEBUG] [Thread-129187] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:17:27.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:17:27.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T14:17:27.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T14:17:27.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T14:17:27.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:17:27.226 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T14:17:27.226 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:17:27.226 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:17:27.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T14:17:27.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.511600 -999.00  +26.60  28.12     13   -3.60 1 2 1 1 1   888    0 30.25 59.65 ----- 31.5 28.1 310.6 33.8 31.9 -18.7 31.4 -17.2 31.3 -16.6 31.9 -18.2
2025-12-31T14:17:27.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T14:17:27.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T14:17:27.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.511600
2025-12-31T14:17:27.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T14:17:27.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T14:17:27.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T14:17:27.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T14:17:27.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T14:17:27.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T14:17:06', tmtdew=37.1, humidity=7.91, cloud=0.0, wind=28.14, temperature=27.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T12:16:42.240', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T14:17:27.227 [DEBUG] [Thread-129187] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:17:27.301 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T14:17:27.313 [DEBUG] [Thread-129190] [transport.py] [_log()] starting thread (client mode): 0xb955b4f0
2025-12-31T14:17:27.313 [DEBUG] [Thread-129190] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:17:27.328 [DEBUG] [Thread-129190] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T14:17:27.328 [INFO] [Thread-129190] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T14:17:27.335 [DEBUG] [Thread-129190] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:17:27.335 [DEBUG] [Thread-129190] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T14:17:27.335 [DEBUG] [Thread-129190] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:17:27.336 [DEBUG] [Thread-129190] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:17:27.336 [DEBUG] [Thread-129190] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:17:27.336 [DEBUG] [Thread-129190] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:17:27.336 [DEBUG] [Thread-129190] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:17:27.336 [DEBUG] [Thread-129190] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:17:27.336 [DEBUG] [Thread-129190] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:17:27.336 [DEBUG] [Thread-129190] [transport.py] [_log()] client lang: <none>
2025-12-31T14:17:27.336 [DEBUG] [Thread-129190] [transport.py] [_log()] server lang: <none>
2025-12-31T14:17:27.336 [DEBUG] [Thread-129190] [transport.py] [_log()] kex follows: False
2025-12-31T14:17:27.336 [DEBUG] [Thread-129190] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:17:27.336 [DEBUG] [Thread-129190] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:17:27.336 [DEBUG] [Thread-129190] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:17:27.336 [DEBUG] [Thread-129190] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:17:27.336 [DEBUG] [Thread-129190] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:17:27.336 [DEBUG] [Thread-129190] [transport.py] [_log()] Compression: none
2025-12-31T14:17:27.336 [DEBUG] [Thread-129190] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:17:27.391 [DEBUG] [Thread-129190] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:17:27.391 [DEBUG] [Thread-129190] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:17:27.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T14:17:27.391 [DEBUG] [Thread-129190] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T14:17:27.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:17:27.448 [DEBUG] [Thread-129190] [transport.py] [_log()] userauth is OK
2025-12-31T14:17:27.448 [DEBUG] [Thread-129190] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:17:27.448 [DEBUG] [Thread-129190] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:17:27.448 [DEBUG] [Thread-129190] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T14:17:27.448 [DEBUG] [Thread-129190] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:17:27.466 [INFO] [Thread-129190] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:17:27.466 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T14:17:27.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:17:28.326 [DEBUG] [Thread-129190] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:17:28.327 [DEBUG] [Thread-129190] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:17:28.374 [DEBUG] [Thread-129190] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:17:28.374 [DEBUG] [Thread-129190] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:17:28.383 [DEBUG] [Thread-129190] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:17:28.390 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:17:28.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T14:17:28.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T14:17:28.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:17:28.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:17:28.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:17:28.414 [DEBUG] [Thread-129190] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:17:29.640 [DEBUG] [Thread-129192 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:17:44.680 [DEBUG] [Thread-129193 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:17:57.695 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:17:57.696 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:17:58.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T14:17:58.437 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T14:17:58.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T14:17:59.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 14, 17, 38), 37.44, 7.72, 0.0, 27.82, 27.54, 0, 0, 0, 2, 0, 0),)
2025-12-31T14:17:59.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 14:17:38
2025-12-31T14:17:59.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T14:17:59.414 [DEBUG] [Thread-129194] [transport.py] [_log()] starting thread (client mode): 0xb6b296c0
2025-12-31T14:17:59.414 [DEBUG] [Thread-129194] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:17:59.435 [DEBUG] [Thread-129194] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T14:17:59.436 [INFO] [Thread-129194] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T14:17:59.438 [DEBUG] [Thread-129194] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:17:59.439 [DEBUG] [Thread-129194] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T14:17:59.439 [DEBUG] [Thread-129194] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:17:59.439 [DEBUG] [Thread-129194] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:17:59.439 [DEBUG] [Thread-129194] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:17:59.439 [DEBUG] [Thread-129194] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:17:59.439 [DEBUG] [Thread-129194] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:17:59.439 [DEBUG] [Thread-129194] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:17:59.439 [DEBUG] [Thread-129194] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:17:59.439 [DEBUG] [Thread-129194] [transport.py] [_log()] client lang: <none>
2025-12-31T14:17:59.439 [DEBUG] [Thread-129194] [transport.py] [_log()] server lang: <none>
2025-12-31T14:17:59.439 [DEBUG] [Thread-129194] [transport.py] [_log()] kex follows: False
2025-12-31T14:17:59.439 [DEBUG] [Thread-129194] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:17:59.440 [DEBUG] [Thread-129194] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:17:59.440 [DEBUG] [Thread-129194] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:17:59.440 [DEBUG] [Thread-129194] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:17:59.440 [DEBUG] [Thread-129194] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:17:59.440 [DEBUG] [Thread-129194] [transport.py] [_log()] Compression: none
2025-12-31T14:17:59.440 [DEBUG] [Thread-129194] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:17:59.458 [DEBUG] [Thread-129194] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:17:59.459 [DEBUG] [Thread-129194] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:17:59.460 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T14:17:59.460 [DEBUG] [Thread-129194] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T14:17:59.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:17:59.462 [DEBUG] [Thread-129194] [transport.py] [_log()] userauth is OK
2025-12-31T14:17:59.462 [DEBUG] [Thread-129194] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:17:59.462 [DEBUG] [Thread-129194] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:17:59.462 [DEBUG] [Thread-129194] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T14:17:59.462 [DEBUG] [Thread-129194] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:17:59.487 [INFO] [Thread-129194] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:17:59.488 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:17:59.718 [DEBUG] [Thread-129196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:18:00.147 [DEBUG] [Thread-129194] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:18:00.147 [DEBUG] [Thread-129194] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:18:00.147 [DEBUG] [Thread-129194] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T14:18:00.188 [DEBUG] [Thread-129194] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:18:00.188 [DEBUG] [Thread-129194] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:18:00.192 [DEBUG] [Thread-129194] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:18:00.206 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:18:00.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T14:18:00.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T14:18:00.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T14:18:00.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:18:00.218 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T14:18:00.218 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:18:00.218 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:18:00.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T14:18:00.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.511948 -999.00  +26.80  33.60     13   -3.70 1 2 2 1 1   888    0 30.27 63.63 ----- 33.8 33.6 294.2 38.3 32.0 -19.5 31.6 -17.6 31.5 -17.2 32.1 -18.8
2025-12-31T14:18:00.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T14:18:00.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T14:18:00.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.511948
2025-12-31T14:18:00.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T14:18:00.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T14:18:00.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T14:18:00.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T14:18:00.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T14:18:00.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T14:17:38', tmtdew=37.44, humidity=7.72, cloud=0.0, wind=27.82, temperature=27.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T12:17:12.307', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T14:18:00.222 [DEBUG] [Thread-129194] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:18:00.304 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T14:18:00.317 [DEBUG] [Thread-129198] [transport.py] [_log()] starting thread (client mode): 0xb6b28190
2025-12-31T14:18:00.317 [DEBUG] [Thread-129198] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:18:00.332 [DEBUG] [Thread-129198] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T14:18:00.332 [INFO] [Thread-129198] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T14:18:00.340 [DEBUG] [Thread-129198] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:18:00.340 [DEBUG] [Thread-129198] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T14:18:00.340 [DEBUG] [Thread-129198] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:18:00.340 [DEBUG] [Thread-129198] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:18:00.340 [DEBUG] [Thread-129198] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:18:00.340 [DEBUG] [Thread-129198] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:18:00.340 [DEBUG] [Thread-129198] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:18:00.340 [DEBUG] [Thread-129198] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:18:00.340 [DEBUG] [Thread-129198] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:18:00.340 [DEBUG] [Thread-129198] [transport.py] [_log()] client lang: <none>
2025-12-31T14:18:00.340 [DEBUG] [Thread-129198] [transport.py] [_log()] server lang: <none>
2025-12-31T14:18:00.340 [DEBUG] [Thread-129198] [transport.py] [_log()] kex follows: False
2025-12-31T14:18:00.341 [DEBUG] [Thread-129198] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:18:00.341 [DEBUG] [Thread-129198] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:18:00.341 [DEBUG] [Thread-129198] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:18:00.341 [DEBUG] [Thread-129198] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:18:00.341 [DEBUG] [Thread-129198] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:18:00.341 [DEBUG] [Thread-129198] [transport.py] [_log()] Compression: none
2025-12-31T14:18:00.341 [DEBUG] [Thread-129198] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:18:00.402 [DEBUG] [Thread-129198] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:18:00.403 [DEBUG] [Thread-129198] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:18:00.403 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T14:18:00.404 [DEBUG] [Thread-129198] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T14:18:00.405 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:18:00.461 [DEBUG] [Thread-129198] [transport.py] [_log()] userauth is OK
2025-12-31T14:18:00.461 [DEBUG] [Thread-129198] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:18:00.461 [DEBUG] [Thread-129198] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:18:00.462 [DEBUG] [Thread-129198] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T14:18:00.462 [DEBUG] [Thread-129198] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:18:00.481 [INFO] [Thread-129198] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:18:00.482 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T14:18:00.482 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:18:01.329 [DEBUG] [Thread-129198] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:18:01.329 [DEBUG] [Thread-129198] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:18:01.377 [DEBUG] [Thread-129198] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:18:01.377 [DEBUG] [Thread-129198] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:18:01.387 [DEBUG] [Thread-129198] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:18:01.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:18:01.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T14:18:01.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T14:18:01.413 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:18:01.414 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:18:01.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:18:01.423 [DEBUG] [Thread-129198] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:18:14.750 [DEBUG] [Thread-129200 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:18:18.001 [DEBUG] [Thread-129201 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:18:29.808 [DEBUG] [Thread-129202 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:18:31.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T14:18:31.435 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T14:18:31.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-12-31T14:18:32.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 14, 18, 10), 37.52, 7.66, 0.0, 25.9, 27.4, 0, 0, 0, 2, 0, 0),)
2025-12-31T14:18:32.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 14:18:10
2025-12-31T14:18:32.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T14:18:32.402 [DEBUG] [Thread-129203] [transport.py] [_log()] starting thread (client mode): 0xb6bbc1f0
2025-12-31T14:18:32.403 [DEBUG] [Thread-129203] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:18:32.422 [DEBUG] [Thread-129203] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T14:18:32.422 [INFO] [Thread-129203] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T14:18:32.426 [DEBUG] [Thread-129203] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:18:32.426 [DEBUG] [Thread-129203] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T14:18:32.426 [DEBUG] [Thread-129203] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:18:32.426 [DEBUG] [Thread-129203] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:18:32.426 [DEBUG] [Thread-129203] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:18:32.426 [DEBUG] [Thread-129203] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:18:32.426 [DEBUG] [Thread-129203] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:18:32.426 [DEBUG] [Thread-129203] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:18:32.426 [DEBUG] [Thread-129203] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:18:32.426 [DEBUG] [Thread-129203] [transport.py] [_log()] client lang: <none>
2025-12-31T14:18:32.426 [DEBUG] [Thread-129203] [transport.py] [_log()] server lang: <none>
2025-12-31T14:18:32.426 [DEBUG] [Thread-129203] [transport.py] [_log()] kex follows: False
2025-12-31T14:18:32.426 [DEBUG] [Thread-129203] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:18:32.426 [DEBUG] [Thread-129203] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:18:32.426 [DEBUG] [Thread-129203] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:18:32.426 [DEBUG] [Thread-129203] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:18:32.426 [DEBUG] [Thread-129203] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:18:32.426 [DEBUG] [Thread-129203] [transport.py] [_log()] Compression: none
2025-12-31T14:18:32.426 [DEBUG] [Thread-129203] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:18:32.445 [DEBUG] [Thread-129203] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:18:32.446 [DEBUG] [Thread-129203] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:18:32.446 [DEBUG] [Thread-129203] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T14:18:32.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T14:18:32.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:18:32.448 [DEBUG] [Thread-129203] [transport.py] [_log()] userauth is OK
2025-12-31T14:18:32.448 [DEBUG] [Thread-129203] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:18:32.449 [DEBUG] [Thread-129203] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:18:32.449 [DEBUG] [Thread-129203] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T14:18:32.449 [DEBUG] [Thread-129203] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:18:32.472 [INFO] [Thread-129203] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:18:32.473 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:18:33.196 [DEBUG] [Thread-129203] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:18:33.197 [DEBUG] [Thread-129203] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:18:33.197 [DEBUG] [Thread-129203] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T14:18:33.238 [DEBUG] [Thread-129203] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:18:33.238 [DEBUG] [Thread-129203] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:18:33.241 [DEBUG] [Thread-129203] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:18:33.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:18:33.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T14:18:33.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T14:18:33.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T14:18:33.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:18:33.263 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T14:18:33.264 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:18:33.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:18:33.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T14:18:33.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.512295 -999.00  +26.30  28.35     13   -4.10 1 2 1 1 1   888    0 30.24 63.38 ----- 30.2 28.4 304.4 37.7 31.9 -20.9 31.6 -19.5 31.5 -20.9 32.1 -20.4
2025-12-31T14:18:33.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T14:18:33.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T14:18:33.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.512295
2025-12-31T14:18:33.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T14:18:33.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T14:18:33.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T14:18:33.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T14:18:33.266 [DEBUG] [Thread-129203] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:18:33.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T14:18:33.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T14:18:10', tmtdew=37.52, humidity=7.66, cloud=0.0, wind=25.9, temperature=27.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T12:17:42.288', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T14:18:33.350 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T14:18:33.361 [DEBUG] [Thread-129206] [transport.py] [_log()] starting thread (client mode): 0xb6bbfd30
2025-12-31T14:18:33.362 [DEBUG] [Thread-129206] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:18:33.376 [DEBUG] [Thread-129206] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T14:18:33.376 [INFO] [Thread-129206] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T14:18:33.384 [DEBUG] [Thread-129206] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:18:33.384 [DEBUG] [Thread-129206] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T14:18:33.384 [DEBUG] [Thread-129206] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:18:33.384 [DEBUG] [Thread-129206] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:18:33.384 [DEBUG] [Thread-129206] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:18:33.384 [DEBUG] [Thread-129206] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:18:33.384 [DEBUG] [Thread-129206] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:18:33.384 [DEBUG] [Thread-129206] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:18:33.384 [DEBUG] [Thread-129206] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:18:33.384 [DEBUG] [Thread-129206] [transport.py] [_log()] client lang: <none>
2025-12-31T14:18:33.384 [DEBUG] [Thread-129206] [transport.py] [_log()] server lang: <none>
2025-12-31T14:18:33.384 [DEBUG] [Thread-129206] [transport.py] [_log()] kex follows: False
2025-12-31T14:18:33.385 [DEBUG] [Thread-129206] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:18:33.385 [DEBUG] [Thread-129206] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:18:33.385 [DEBUG] [Thread-129206] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:18:33.385 [DEBUG] [Thread-129206] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:18:33.385 [DEBUG] [Thread-129206] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:18:33.385 [DEBUG] [Thread-129206] [transport.py] [_log()] Compression: none
2025-12-31T14:18:33.385 [DEBUG] [Thread-129206] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:18:33.441 [DEBUG] [Thread-129206] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:18:33.441 [DEBUG] [Thread-129206] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:18:33.442 [DEBUG] [Thread-129206] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T14:18:33.442 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T14:18:33.443 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:18:33.497 [DEBUG] [Thread-129206] [transport.py] [_log()] userauth is OK
2025-12-31T14:18:33.498 [DEBUG] [Thread-129206] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:18:33.498 [DEBUG] [Thread-129206] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:18:33.498 [DEBUG] [Thread-129206] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T14:18:33.498 [DEBUG] [Thread-129206] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:18:33.517 [INFO] [Thread-129206] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:18:33.517 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T14:18:33.518 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:18:34.345 [DEBUG] [Thread-129206] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:18:34.346 [DEBUG] [Thread-129206] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:18:34.394 [DEBUG] [Thread-129206] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:18:34.394 [DEBUG] [Thread-129206] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:18:34.403 [DEBUG] [Thread-129206] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:18:34.412 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:18:34.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T14:18:34.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T14:18:34.430 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:18:34.430 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:18:34.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:18:34.438 [DEBUG] [Thread-129206] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:18:44.846 [DEBUG] [Thread-129208 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:18:57.836 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:18:57.838 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:18:59.894 [DEBUG] [Thread-129209 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:19:04.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T14:19:04.446 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T14:19:04.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-12-31T14:19:05.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 14, 18, 42), 37.25, 7.72, 0.0, 25.14, 27.39, 0, 0, 0, 2, 0, 0),)
2025-12-31T14:19:05.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 14:18:42
2025-12-31T14:19:05.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T14:19:05.413 [DEBUG] [Thread-129210] [transport.py] [_log()] starting thread (client mode): 0xb95b34f0
2025-12-31T14:19:05.413 [DEBUG] [Thread-129210] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:19:05.434 [DEBUG] [Thread-129210] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T14:19:05.435 [INFO] [Thread-129210] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T14:19:05.440 [DEBUG] [Thread-129210] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:19:05.440 [DEBUG] [Thread-129210] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T14:19:05.440 [DEBUG] [Thread-129210] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:19:05.440 [DEBUG] [Thread-129210] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:19:05.440 [DEBUG] [Thread-129210] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:19:05.440 [DEBUG] [Thread-129210] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:19:05.440 [DEBUG] [Thread-129210] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:19:05.440 [DEBUG] [Thread-129210] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:19:05.441 [DEBUG] [Thread-129210] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:19:05.441 [DEBUG] [Thread-129210] [transport.py] [_log()] client lang: <none>
2025-12-31T14:19:05.441 [DEBUG] [Thread-129210] [transport.py] [_log()] server lang: <none>
2025-12-31T14:19:05.441 [DEBUG] [Thread-129210] [transport.py] [_log()] kex follows: False
2025-12-31T14:19:05.441 [DEBUG] [Thread-129210] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:19:05.441 [DEBUG] [Thread-129210] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:19:05.441 [DEBUG] [Thread-129210] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:19:05.441 [DEBUG] [Thread-129210] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:19:05.441 [DEBUG] [Thread-129210] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:19:05.441 [DEBUG] [Thread-129210] [transport.py] [_log()] Compression: none
2025-12-31T14:19:05.441 [DEBUG] [Thread-129210] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:19:05.456 [DEBUG] [Thread-129210] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:19:05.456 [DEBUG] [Thread-129210] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:19:05.456 [DEBUG] [Thread-129210] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T14:19:05.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T14:19:05.457 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:19:05.457 [DEBUG] [Thread-129210] [transport.py] [_log()] userauth is OK
2025-12-31T14:19:05.457 [DEBUG] [Thread-129210] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:19:05.458 [DEBUG] [Thread-129210] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:19:05.458 [DEBUG] [Thread-129210] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T14:19:05.458 [DEBUG] [Thread-129210] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:19:05.487 [INFO] [Thread-129210] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:19:05.488 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:19:06.162 [DEBUG] [Thread-129210] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:19:06.162 [DEBUG] [Thread-129210] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:19:06.163 [DEBUG] [Thread-129210] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T14:19:06.203 [DEBUG] [Thread-129210] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:19:06.203 [DEBUG] [Thread-129210] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:19:06.206 [DEBUG] [Thread-129210] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:19:06.219 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:19:06.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T14:19:06.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T14:19:06.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T14:19:06.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:19:06.229 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T14:19:06.229 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:19:06.230 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:19:06.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T14:19:06.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.512642 -999.00  +26.00  27.47     13   -3.70 1 2 1 1 1   888    0 30.47 64.13 ----- 27.5 27.5 319.4 34.8 32.1 -21.3 31.6 -20.3 31.7 -19.1 32.3 -20.3
2025-12-31T14:19:06.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T14:19:06.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T14:19:06.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.512642
2025-12-31T14:19:06.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T14:19:06.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T14:19:06.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T14:19:06.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T14:19:06.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T14:19:06.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T14:18:42', tmtdew=37.25, humidity=7.72, cloud=0.0, wind=25.14, temperature=27.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T12:18:12.269', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T14:19:06.232 [DEBUG] [Thread-129210] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:19:06.315 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T14:19:06.328 [DEBUG] [Thread-129213] [transport.py] [_log()] starting thread (client mode): 0xb95b2470
2025-12-31T14:19:06.328 [DEBUG] [Thread-129213] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:19:06.345 [DEBUG] [Thread-129213] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T14:19:06.345 [INFO] [Thread-129213] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T14:19:06.352 [DEBUG] [Thread-129213] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:19:06.353 [DEBUG] [Thread-129213] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T14:19:06.353 [DEBUG] [Thread-129213] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:19:06.353 [DEBUG] [Thread-129213] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:19:06.353 [DEBUG] [Thread-129213] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:19:06.353 [DEBUG] [Thread-129213] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:19:06.353 [DEBUG] [Thread-129213] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:19:06.353 [DEBUG] [Thread-129213] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:19:06.353 [DEBUG] [Thread-129213] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:19:06.353 [DEBUG] [Thread-129213] [transport.py] [_log()] client lang: <none>
2025-12-31T14:19:06.353 [DEBUG] [Thread-129213] [transport.py] [_log()] server lang: <none>
2025-12-31T14:19:06.353 [DEBUG] [Thread-129213] [transport.py] [_log()] kex follows: False
2025-12-31T14:19:06.353 [DEBUG] [Thread-129213] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:19:06.353 [DEBUG] [Thread-129213] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:19:06.353 [DEBUG] [Thread-129213] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:19:06.353 [DEBUG] [Thread-129213] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:19:06.353 [DEBUG] [Thread-129213] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:19:06.354 [DEBUG] [Thread-129213] [transport.py] [_log()] Compression: none
2025-12-31T14:19:06.354 [DEBUG] [Thread-129213] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:19:06.410 [DEBUG] [Thread-129213] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:19:06.410 [DEBUG] [Thread-129213] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:19:06.411 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T14:19:06.412 [DEBUG] [Thread-129213] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T14:19:06.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:19:06.466 [DEBUG] [Thread-129213] [transport.py] [_log()] userauth is OK
2025-12-31T14:19:06.466 [DEBUG] [Thread-129213] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:19:06.466 [DEBUG] [Thread-129213] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:19:06.467 [DEBUG] [Thread-129213] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T14:19:06.467 [DEBUG] [Thread-129213] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:19:06.486 [INFO] [Thread-129213] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:19: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-12-31T14:19:06.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:19:07.376 [DEBUG] [Thread-129213] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:19:07.376 [DEBUG] [Thread-129213] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:19:07.424 [DEBUG] [Thread-129213] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:19:07.424 [DEBUG] [Thread-129213] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:19:07.433 [DEBUG] [Thread-129213] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:19:07.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:19:07.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T14:19:07.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T14:19:07.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:19:07.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:19:07.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:19:07.470 [DEBUG] [Thread-129213] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:19:14.929 [DEBUG] [Thread-129215 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:19:18.051 [DEBUG] [Thread-129216 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:19:29.965 [DEBUG] [Thread-129217 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:19:37.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T14:19:37.493 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T14:19:37.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T14:19:38.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 14, 19, 14), 36.38, 8.22, 0.0, 27.89, 27.12, 0, 0, 0, 2, 0, 0),)
2025-12-31T14:19:38.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 14:19:14
2025-12-31T14:19:38.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T14:19:38.453 [DEBUG] [Thread-129218] [transport.py] [_log()] starting thread (client mode): 0xb6bbc460
2025-12-31T14:19:38.453 [DEBUG] [Thread-129218] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:19:38.469 [DEBUG] [Thread-129218] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T14:19:38.469 [INFO] [Thread-129218] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T14:19:38.473 [DEBUG] [Thread-129218] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:19:38.473 [DEBUG] [Thread-129218] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T14:19:38.473 [DEBUG] [Thread-129218] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:19:38.473 [DEBUG] [Thread-129218] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:19:38.473 [DEBUG] [Thread-129218] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:19:38.473 [DEBUG] [Thread-129218] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:19:38.473 [DEBUG] [Thread-129218] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:19:38.473 [DEBUG] [Thread-129218] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:19:38.473 [DEBUG] [Thread-129218] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:19:38.473 [DEBUG] [Thread-129218] [transport.py] [_log()] client lang: <none>
2025-12-31T14:19:38.473 [DEBUG] [Thread-129218] [transport.py] [_log()] server lang: <none>
2025-12-31T14:19:38.473 [DEBUG] [Thread-129218] [transport.py] [_log()] kex follows: False
2025-12-31T14:19:38.473 [DEBUG] [Thread-129218] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:19:38.473 [DEBUG] [Thread-129218] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:19:38.473 [DEBUG] [Thread-129218] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:19:38.473 [DEBUG] [Thread-129218] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:19:38.473 [DEBUG] [Thread-129218] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:19:38.473 [DEBUG] [Thread-129218] [transport.py] [_log()] Compression: none
2025-12-31T14:19:38.473 [DEBUG] [Thread-129218] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:19:38.491 [DEBUG] [Thread-129218] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:19:38.492 [DEBUG] [Thread-129218] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:19:38.492 [DEBUG] [Thread-129218] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T14:19:38.492 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T14:19:38.493 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:19:38.494 [DEBUG] [Thread-129218] [transport.py] [_log()] userauth is OK
2025-12-31T14:19:38.495 [DEBUG] [Thread-129218] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:19:38.495 [DEBUG] [Thread-129218] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:19:38.495 [DEBUG] [Thread-129218] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T14:19:38.495 [DEBUG] [Thread-129218] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:19:38.521 [INFO] [Thread-129218] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:19:38.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:19:39.301 [DEBUG] [Thread-129218] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:19:39.301 [DEBUG] [Thread-129218] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:19:39.301 [DEBUG] [Thread-129218] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T14:19:39.342 [DEBUG] [Thread-129218] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:19:39.342 [DEBUG] [Thread-129218] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:19:39.345 [DEBUG] [Thread-129218] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:19:39.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:19:39.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T14:19:39.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T14:19:39.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T14:19:39.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:19:39.370 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T14:19:39.371 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:19:39.371 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:19:39.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T14:19:39.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.512989 -999.00  +25.90  28.92     14   -3.10 1 2 1 1 1   888    0 30.70 61.15 ----- 31.7 28.9 292.0 39.9 31.8 -23.5 31.4 -21.4 31.3 -21.1 31.9 -23.2
2025-12-31T14:19:39.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T14:19:39.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T14:19:39.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.512989
2025-12-31T14:19:39.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T14:19:39.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T14:19:39.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T14:19:39.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T14:19:39.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T14:19:39.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T14:19:14', tmtdew=36.38, humidity=8.22, cloud=0.0, wind=27.89, temperature=27.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T12:18:42.250', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T14:19:39.373 [DEBUG] [Thread-129218] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:19:39.457 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T14:19:39.471 [DEBUG] [Thread-129221] [transport.py] [_log()] starting thread (client mode): 0xb6bbd9c0
2025-12-31T14:19:39.472 [DEBUG] [Thread-129221] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:19:39.486 [DEBUG] [Thread-129221] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T14:19:39.486 [INFO] [Thread-129221] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T14:19:39.493 [DEBUG] [Thread-129221] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:19:39.494 [DEBUG] [Thread-129221] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T14:19:39.494 [DEBUG] [Thread-129221] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:19:39.494 [DEBUG] [Thread-129221] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:19:39.494 [DEBUG] [Thread-129221] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:19:39.494 [DEBUG] [Thread-129221] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:19:39.494 [DEBUG] [Thread-129221] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:19:39.494 [DEBUG] [Thread-129221] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:19:39.494 [DEBUG] [Thread-129221] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:19:39.494 [DEBUG] [Thread-129221] [transport.py] [_log()] client lang: <none>
2025-12-31T14:19:39.494 [DEBUG] [Thread-129221] [transport.py] [_log()] server lang: <none>
2025-12-31T14:19:39.494 [DEBUG] [Thread-129221] [transport.py] [_log()] kex follows: False
2025-12-31T14:19:39.494 [DEBUG] [Thread-129221] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:19:39.494 [DEBUG] [Thread-129221] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:19:39.494 [DEBUG] [Thread-129221] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:19:39.494 [DEBUG] [Thread-129221] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:19:39.494 [DEBUG] [Thread-129221] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:19:39.494 [DEBUG] [Thread-129221] [transport.py] [_log()] Compression: none
2025-12-31T14:19:39.495 [DEBUG] [Thread-129221] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:19:39.558 [DEBUG] [Thread-129221] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:19:39.558 [DEBUG] [Thread-129221] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:19:39.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T14:19:39.560 [DEBUG] [Thread-129221] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T14:19:39.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:19:39.614 [DEBUG] [Thread-129221] [transport.py] [_log()] userauth is OK
2025-12-31T14:19:39.615 [DEBUG] [Thread-129221] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:19:39.615 [DEBUG] [Thread-129221] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:19:39.615 [DEBUG] [Thread-129221] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T14:19:39.615 [DEBUG] [Thread-129221] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:19:39.633 [INFO] [Thread-129221] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:19:39.634 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T14:19:39.635 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:19:40.485 [DEBUG] [Thread-129221] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:19:40.485 [DEBUG] [Thread-129221] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:19:40.533 [DEBUG] [Thread-129221] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:19:40.533 [DEBUG] [Thread-129221] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:19:40.542 [DEBUG] [Thread-129221] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:19:40.551 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:19:40.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T14:19:40.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T14:19:40.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:19:40.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:19:40.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:19:40.578 [DEBUG] [Thread-129221] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:19:44.999 [DEBUG] [Thread-129223 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:19:57.988 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:19:57.990 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:20:00.047 [DEBUG] [Thread-129224 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:20:10.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T14:20:10.601 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T14:20:10.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-12-31T14:20:11.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 14, 19, 46), 35.73, 8.94, 0.0, 27.17, 26.51, 0, 0, 0, 2, 0, 0),)
2025-12-31T14:20:11.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 14:19:46
2025-12-31T14:20:11.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T14:20:11.576 [DEBUG] [Thread-129225] [transport.py] [_log()] starting thread (client mode): 0xb6bb1630
2025-12-31T14:20:11.576 [DEBUG] [Thread-129225] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:20:11.596 [DEBUG] [Thread-129225] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T14:20:11.596 [INFO] [Thread-129225] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T14:20:11.599 [DEBUG] [Thread-129225] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:20:11.600 [DEBUG] [Thread-129225] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T14:20:11.600 [DEBUG] [Thread-129225] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:20:11.600 [DEBUG] [Thread-129225] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:20:11.600 [DEBUG] [Thread-129225] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:20:11.600 [DEBUG] [Thread-129225] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:20:11.600 [DEBUG] [Thread-129225] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:20:11.600 [DEBUG] [Thread-129225] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:20:11.600 [DEBUG] [Thread-129225] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:20:11.600 [DEBUG] [Thread-129225] [transport.py] [_log()] client lang: <none>
2025-12-31T14:20:11.600 [DEBUG] [Thread-129225] [transport.py] [_log()] server lang: <none>
2025-12-31T14:20:11.600 [DEBUG] [Thread-129225] [transport.py] [_log()] kex follows: False
2025-12-31T14:20:11.600 [DEBUG] [Thread-129225] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:20:11.600 [DEBUG] [Thread-129225] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:20:11.601 [DEBUG] [Thread-129225] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:20:11.601 [DEBUG] [Thread-129225] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:20:11.601 [DEBUG] [Thread-129225] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:20:11.601 [DEBUG] [Thread-129225] [transport.py] [_log()] Compression: none
2025-12-31T14:20:11.601 [DEBUG] [Thread-129225] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:20:11.618 [DEBUG] [Thread-129225] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:20:11.618 [DEBUG] [Thread-129225] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:20:11.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T14:20:11.619 [DEBUG] [Thread-129225] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T14:20:11.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:20:11.621 [DEBUG] [Thread-129225] [transport.py] [_log()] userauth is OK
2025-12-31T14:20:11.621 [DEBUG] [Thread-129225] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:20:11.622 [DEBUG] [Thread-129225] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:20:11.622 [DEBUG] [Thread-129225] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T14:20:11.622 [DEBUG] [Thread-129225] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:20:11.639 [INFO] [Thread-129225] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:20:11.640 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:20:14.279 [DEBUG] [Thread-129225] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:20:14.279 [DEBUG] [Thread-129225] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:20:14.280 [DEBUG] [Thread-129225] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T14:20:14.320 [DEBUG] [Thread-129225] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:20:14.320 [DEBUG] [Thread-129225] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:20:14.323 [DEBUG] [Thread-129225] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:20:14.370 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:20:14.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T14:20:14.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T14:20:14.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T14:20:14.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:20:14.383 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T14:20:14.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:20:14.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:20:14.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T14:20:14.384 [WARNING] [poll_weather_worker] [driver.py] [poll_weather_state()] Unable to get atlas cloud data: list index out of range
2025-12-31T14:20:14.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T14:19:46', tmtdew=35.73, humidity=8.94, cloud=0.0, wind=27.17, temperature=26.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp=None, atlas_cloud=None, atlas_rain=None, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T14:20:14.386 [DEBUG] [Thread-129225] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:20:14.477 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T14:20:14.489 [DEBUG] [Thread-129228] [transport.py] [_log()] starting thread (client mode): 0xb6bb9f90
2025-12-31T14:20:14.489 [DEBUG] [Thread-129228] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:20:14.503 [DEBUG] [Thread-129228] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T14:20:14.504 [INFO] [Thread-129228] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T14:20:14.511 [DEBUG] [Thread-129228] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:20:14.512 [DEBUG] [Thread-129228] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T14:20:14.512 [DEBUG] [Thread-129228] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:20:14.512 [DEBUG] [Thread-129228] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:20:14.512 [DEBUG] [Thread-129228] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:20:14.512 [DEBUG] [Thread-129228] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:20:14.512 [DEBUG] [Thread-129228] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:20:14.513 [DEBUG] [Thread-129228] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:20:14.513 [DEBUG] [Thread-129228] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:20:14.513 [DEBUG] [Thread-129228] [transport.py] [_log()] client lang: <none>
2025-12-31T14:20:14.513 [DEBUG] [Thread-129228] [transport.py] [_log()] server lang: <none>
2025-12-31T14:20:14.513 [DEBUG] [Thread-129228] [transport.py] [_log()] kex follows: False
2025-12-31T14:20:14.513 [DEBUG] [Thread-129228] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:20:14.513 [DEBUG] [Thread-129228] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:20:14.513 [DEBUG] [Thread-129228] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:20:14.514 [DEBUG] [Thread-129228] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:20:14.514 [DEBUG] [Thread-129228] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:20:14.514 [DEBUG] [Thread-129228] [transport.py] [_log()] Compression: none
2025-12-31T14:20:14.514 [DEBUG] [Thread-129228] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:20:14.571 [DEBUG] [Thread-129228] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:20:14.571 [DEBUG] [Thread-129228] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:20:14.572 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T14:20:14.572 [DEBUG] [Thread-129228] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T14:20:14.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:20:14.626 [DEBUG] [Thread-129228] [transport.py] [_log()] userauth is OK
2025-12-31T14:20:14.627 [DEBUG] [Thread-129228] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:20:14.627 [DEBUG] [Thread-129228] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:20:14.627 [DEBUG] [Thread-129228] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T14:20:14.627 [DEBUG] [Thread-129228] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:20:14.649 [INFO] [Thread-129228] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:20:14.650 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T14:20:14.650 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:20:15.080 [DEBUG] [Thread-129230 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:20:15.455 [DEBUG] [Thread-129228] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:20:15.455 [DEBUG] [Thread-129228] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:20:15.503 [DEBUG] [Thread-129228] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:20:15.503 [DEBUG] [Thread-129228] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:20:15.512 [DEBUG] [Thread-129228] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:20:15.521 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:20:15.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T14:20:15.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T14:20:15.538 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:20:15.538 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:20:15.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:20:15.546 [DEBUG] [Thread-129228] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:20:18.105 [DEBUG] [Thread-129231 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:20:30.129 [DEBUG] [Thread-129232 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:20:45.161 [DEBUG] [Thread-129233 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:20:45.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T14:20:45.568 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T14:20:45.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T14:20:46.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 14, 20, 18), 35.51, 9.09, 0.0, 25.52, 26.56, 0, 0, 0, 2, 0, 0),)
2025-12-31T14:20:46.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 14:20:18
2025-12-31T14:20:46.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T14:20:46.590 [DEBUG] [Thread-129234] [transport.py] [_log()] starting thread (client mode): 0xb6bb8c10
2025-12-31T14:20:46.590 [DEBUG] [Thread-129234] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:20:46.609 [DEBUG] [Thread-129234] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T14:20:46.609 [INFO] [Thread-129234] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T14:20:46.612 [DEBUG] [Thread-129234] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:20:46.612 [DEBUG] [Thread-129234] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T14:20:46.612 [DEBUG] [Thread-129234] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:20:46.612 [DEBUG] [Thread-129234] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:20:46.612 [DEBUG] [Thread-129234] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:20:46.612 [DEBUG] [Thread-129234] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:20:46.612 [DEBUG] [Thread-129234] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:20:46.612 [DEBUG] [Thread-129234] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:20:46.612 [DEBUG] [Thread-129234] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:20:46.612 [DEBUG] [Thread-129234] [transport.py] [_log()] client lang: <none>
2025-12-31T14:20:46.612 [DEBUG] [Thread-129234] [transport.py] [_log()] server lang: <none>
2025-12-31T14:20:46.613 [DEBUG] [Thread-129234] [transport.py] [_log()] kex follows: False
2025-12-31T14:20:46.613 [DEBUG] [Thread-129234] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:20:46.613 [DEBUG] [Thread-129234] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:20:46.613 [DEBUG] [Thread-129234] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:20:46.613 [DEBUG] [Thread-129234] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:20:46.613 [DEBUG] [Thread-129234] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:20:46.613 [DEBUG] [Thread-129234] [transport.py] [_log()] Compression: none
2025-12-31T14:20:46.613 [DEBUG] [Thread-129234] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:20:46.628 [DEBUG] [Thread-129234] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:20:46.628 [DEBUG] [Thread-129234] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:20:46.628 [DEBUG] [Thread-129234] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T14:20:46.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T14:20:46.629 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:20:46.629 [DEBUG] [Thread-129234] [transport.py] [_log()] userauth is OK
2025-12-31T14:20:46.629 [DEBUG] [Thread-129234] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:20:46.629 [DEBUG] [Thread-129234] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:20:46.629 [DEBUG] [Thread-129234] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T14:20:46.629 [DEBUG] [Thread-129234] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:20:46.640 [INFO] [Thread-129234] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:20:46.640 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:20:47.226 [DEBUG] [Thread-129234] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:20:47.226 [DEBUG] [Thread-129234] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:20:47.226 [DEBUG] [Thread-129234] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T14:20:47.266 [DEBUG] [Thread-129234] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:20:47.266 [DEBUG] [Thread-129234] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:20:47.269 [DEBUG] [Thread-129234] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:20:47.280 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:20:47.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T14:20:47.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T14:20:47.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T14:20:47.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:20:47.285 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T14:20:47.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:20:47.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:20:47.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T14:20:47.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.514031 -999.00  +26.20  30.25     15   -1.90 1 2 2 1 1   888    0 30.01 49.65 ----- 31.4 30.2 324.4 34.0 32.0 -18.6 31.6 -17.0 31.3 -17.0 32.0 -17.7
2025-12-31T14:20:47.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T14:20:47.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T14:20:47.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.514031
2025-12-31T14:20:47.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T14:20:47.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T14:20:47.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T14:20:47.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T14:20:47.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T14:20:47.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T14:20:18', tmtdew=35.51, humidity=9.09, cloud=0.0, wind=25.52, temperature=26.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T12:20:12.278', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T14:20:47.286 [DEBUG] [Thread-129234] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:20:47.360 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T14:20:47.373 [DEBUG] [Thread-129237] [transport.py] [_log()] starting thread (client mode): 0xb6b15ed0
2025-12-31T14:20:47.373 [DEBUG] [Thread-129237] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:20:47.388 [DEBUG] [Thread-129237] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T14:20:47.388 [INFO] [Thread-129237] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T14:20:47.396 [DEBUG] [Thread-129237] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:20:47.396 [DEBUG] [Thread-129237] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T14:20:47.396 [DEBUG] [Thread-129237] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:20:47.396 [DEBUG] [Thread-129237] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:20:47.396 [DEBUG] [Thread-129237] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:20:47.396 [DEBUG] [Thread-129237] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:20:47.396 [DEBUG] [Thread-129237] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:20:47.396 [DEBUG] [Thread-129237] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:20:47.396 [DEBUG] [Thread-129237] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:20:47.396 [DEBUG] [Thread-129237] [transport.py] [_log()] client lang: <none>
2025-12-31T14:20:47.396 [DEBUG] [Thread-129237] [transport.py] [_log()] server lang: <none>
2025-12-31T14:20:47.396 [DEBUG] [Thread-129237] [transport.py] [_log()] kex follows: False
2025-12-31T14:20:47.396 [DEBUG] [Thread-129237] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:20:47.396 [DEBUG] [Thread-129237] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:20:47.396 [DEBUG] [Thread-129237] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:20:47.396 [DEBUG] [Thread-129237] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:20:47.396 [DEBUG] [Thread-129237] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:20:47.396 [DEBUG] [Thread-129237] [transport.py] [_log()] Compression: none
2025-12-31T14:20:47.396 [DEBUG] [Thread-129237] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:20:47.452 [DEBUG] [Thread-129237] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:20:47.452 [DEBUG] [Thread-129237] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:20:47.452 [DEBUG] [Thread-129237] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T14:20:47.453 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T14:20:47.453 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:20:47.510 [DEBUG] [Thread-129237] [transport.py] [_log()] userauth is OK
2025-12-31T14:20:47.510 [DEBUG] [Thread-129237] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:20:47.510 [DEBUG] [Thread-129237] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:20:47.510 [DEBUG] [Thread-129237] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T14:20:47.510 [DEBUG] [Thread-129237] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:20:47.524 [INFO] [Thread-129237] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:20:47.524 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T14:20:47.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:20:48.386 [DEBUG] [Thread-129237] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:20:48.387 [DEBUG] [Thread-129237] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:20:48.435 [DEBUG] [Thread-129237] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:20:48.435 [DEBUG] [Thread-129237] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:20:48.443 [DEBUG] [Thread-129237] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:20:48.451 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:20:48.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T14:20:48.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T14:20:48.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:20:48.467 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:20:48.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:20:48.475 [DEBUG] [Thread-129237] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:20:58.129 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:20:58.130 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:21:00.194 [DEBUG] [Thread-129239 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:21:15.247 [DEBUG] [Thread-129240 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:21:18.156 [DEBUG] [Thread-129241 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:21:18.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T14:21:18.498 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T14:21:18.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T14:21:19.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 14, 20, 50), 34.87, 9.72, 0.0, 22.39, 27.02, 0, 0, 0, 2, 0, 0),)
2025-12-31T14:21:19.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 14:20:50
2025-12-31T14:21:19.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T14:21:19.491 [DEBUG] [Thread-129242] [transport.py] [_log()] starting thread (client mode): 0xb6bbbbb0
2025-12-31T14:21:19.491 [DEBUG] [Thread-129242] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:21:19.505 [DEBUG] [Thread-129242] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T14:21:19.505 [INFO] [Thread-129242] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T14:21:19.507 [DEBUG] [Thread-129242] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:21:19.507 [DEBUG] [Thread-129242] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T14:21:19.507 [DEBUG] [Thread-129242] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:21:19.507 [DEBUG] [Thread-129242] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:21:19.507 [DEBUG] [Thread-129242] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:21:19.507 [DEBUG] [Thread-129242] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:21:19.507 [DEBUG] [Thread-129242] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:21:19.507 [DEBUG] [Thread-129242] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:21:19.507 [DEBUG] [Thread-129242] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:21:19.507 [DEBUG] [Thread-129242] [transport.py] [_log()] client lang: <none>
2025-12-31T14:21:19.507 [DEBUG] [Thread-129242] [transport.py] [_log()] server lang: <none>
2025-12-31T14:21:19.507 [DEBUG] [Thread-129242] [transport.py] [_log()] kex follows: False
2025-12-31T14:21:19.507 [DEBUG] [Thread-129242] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:21:19.507 [DEBUG] [Thread-129242] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:21:19.508 [DEBUG] [Thread-129242] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:21:19.508 [DEBUG] [Thread-129242] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:21:19.508 [DEBUG] [Thread-129242] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:21:19.508 [DEBUG] [Thread-129242] [transport.py] [_log()] Compression: none
2025-12-31T14:21:19.508 [DEBUG] [Thread-129242] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:21:19.522 [DEBUG] [Thread-129242] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:21:19.522 [DEBUG] [Thread-129242] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:21:19.523 [DEBUG] [Thread-129242] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T14:21:19.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T14:21:19.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:21:19.525 [DEBUG] [Thread-129242] [transport.py] [_log()] userauth is OK
2025-12-31T14:21:19.526 [DEBUG] [Thread-129242] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:21:19.526 [DEBUG] [Thread-129242] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:21:19.526 [DEBUG] [Thread-129242] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T14:21:19.526 [DEBUG] [Thread-129242] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:21:19.546 [INFO] [Thread-129242] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:21:19.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:21:20.368 [DEBUG] [Thread-129242] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:21:20.368 [DEBUG] [Thread-129242] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:21:20.377 [DEBUG] [Thread-129242] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T14:21:20.409 [DEBUG] [Thread-129242] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:21:20.409 [DEBUG] [Thread-129242] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:21:20.413 [DEBUG] [Thread-129242] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:21:20.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:21:20.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T14:21:20.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T14:21:20.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T14:21:20.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:21:20.437 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T14:21:20.437 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:21:20.437 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:21:20.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T14:21:20.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.514378 -999.00  +25.90  36.28     16   -1.50 1 2 2 1 1   888    0 30.41 42.56 ----- 32.9 36.3 309.2 42.0 32.0 -21.0 31.7 -18.0 31.8 -16.4 32.1 -19.2
2025-12-31T14:21:20.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T14:21:20.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T14:21:20.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.514378
2025-12-31T14:21:20.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T14:21:20.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T14:21:20.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T14:21:20.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T14:21:20.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T14:21:20.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T14:20:50', tmtdew=34.87, humidity=9.72, cloud=0.0, wind=22.39, temperature=27.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T12:20:42.259', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T14:21:20.441 [DEBUG] [Thread-129242] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:21:20.526 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T14:21:30.285 [DEBUG] [Thread-129245 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:21:45.348 [DEBUG] [Thread-129246 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:21:58.268 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:21:58.269 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:22:00.385 [DEBUG] [Thread-129247 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:22:15.419 [DEBUG] [Thread-129248 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:22:18.211 [DEBUG] [Thread-129249 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:22:30.455 [DEBUG] [Thread-129250 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:22:45.482 [DEBUG] [Thread-129251 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:22:58.409 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:22:58.410 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:23:00.514 [DEBUG] [Thread-129252 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:23:15.547 [DEBUG] [Thread-129253 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:23:18.259 [DEBUG] [Thread-129254 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:23:30.578 [DEBUG] [Thread-129255 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:23:32.565 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-12-31T14:23:45.614 [DEBUG] [Thread-129256 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:23:58.548 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:23:58.549 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:24:00.648 [DEBUG] [Thread-129257 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:24:02.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T14:24:02.595 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T14:24:02.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T14:24:03.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 14, 23, 31), 34.26, 10.1, 0.0, 27.46, 26.96, 0, 0, 0, 2, 0, 0),)
2025-12-31T14:24:03.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 14:23:31
2025-12-31T14:24:03.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T14:24:03.632 [DEBUG] [Thread-129258] [transport.py] [_log()] starting thread (client mode): 0xb9559a50
2025-12-31T14:24:03.632 [DEBUG] [Thread-129258] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:24:03.653 [DEBUG] [Thread-129258] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T14:24:03.653 [INFO] [Thread-129258] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T14:24:03.656 [DEBUG] [Thread-129258] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:24:03.656 [DEBUG] [Thread-129258] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T14:24:03.656 [DEBUG] [Thread-129258] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:24:03.656 [DEBUG] [Thread-129258] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:24:03.656 [DEBUG] [Thread-129258] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:24:03.656 [DEBUG] [Thread-129258] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:24:03.656 [DEBUG] [Thread-129258] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:24:03.656 [DEBUG] [Thread-129258] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:24:03.656 [DEBUG] [Thread-129258] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:24:03.656 [DEBUG] [Thread-129258] [transport.py] [_log()] client lang: <none>
2025-12-31T14:24:03.656 [DEBUG] [Thread-129258] [transport.py] [_log()] server lang: <none>
2025-12-31T14:24:03.656 [DEBUG] [Thread-129258] [transport.py] [_log()] kex follows: False
2025-12-31T14:24:03.656 [DEBUG] [Thread-129258] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:24:03.656 [DEBUG] [Thread-129258] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:24:03.656 [DEBUG] [Thread-129258] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:24:03.657 [DEBUG] [Thread-129258] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:24:03.657 [DEBUG] [Thread-129258] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:24:03.657 [DEBUG] [Thread-129258] [transport.py] [_log()] Compression: none
2025-12-31T14:24:03.657 [DEBUG] [Thread-129258] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:24:03.672 [DEBUG] [Thread-129258] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:24:03.672 [DEBUG] [Thread-129258] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:24:03.672 [DEBUG] [Thread-129258] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T14:24:03.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T14:24:03.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:24:03.673 [DEBUG] [Thread-129258] [transport.py] [_log()] userauth is OK
2025-12-31T14:24:03.673 [DEBUG] [Thread-129258] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:24:03.673 [DEBUG] [Thread-129258] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:24:03.673 [DEBUG] [Thread-129258] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T14:24:03.673 [DEBUG] [Thread-129258] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:24:03.688 [INFO] [Thread-129258] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:24:03.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:24:04.335 [DEBUG] [Thread-129258] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:24:04.335 [DEBUG] [Thread-129258] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:24:04.335 [DEBUG] [Thread-129258] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T14:24:04.376 [DEBUG] [Thread-129258] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:24:04.376 [DEBUG] [Thread-129258] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:24:04.379 [DEBUG] [Thread-129258] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:24:04.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:24:04.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T14:24:04.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T14:24:04.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T14:24:04.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:24:04.397 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T14:24:04.397 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:24:04.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:24:04.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T14:24:04.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.516114 -999.00  +27.10  42.38     14   -2.10 1 2 2 1 1   888    0 29.35 15.82 ----- 36.9 42.4 270.4 47.7 32.4 -22.6 32.1 -18.6 32.0 -24.2 32.6 -19.9
2025-12-31T14:24:04.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T14:24:04.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T14:24:04.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.516114
2025-12-31T14:24:04.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T14:24:04.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T14:24:04.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T14:24:04.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T14:24:04.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T14:24:04.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T14:23:31', tmtdew=34.26, humidity=10.1, cloud=0.0, wind=27.46, temperature=26.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T12:23:12.250', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T14:24:04.398 [DEBUG] [Thread-129258] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:24:04.473 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T14:24:04.485 [DEBUG] [Thread-129261] [transport.py] [_log()] starting thread (client mode): 0xb6bbf4f0
2025-12-31T14:24:04.485 [DEBUG] [Thread-129261] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:24:04.501 [DEBUG] [Thread-129261] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T14:24:04.501 [INFO] [Thread-129261] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T14:24:04.509 [DEBUG] [Thread-129261] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:24:04.509 [DEBUG] [Thread-129261] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T14:24:04.509 [DEBUG] [Thread-129261] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:24:04.509 [DEBUG] [Thread-129261] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:24:04.509 [DEBUG] [Thread-129261] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:24:04.509 [DEBUG] [Thread-129261] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:24:04.509 [DEBUG] [Thread-129261] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:24:04.509 [DEBUG] [Thread-129261] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:24:04.509 [DEBUG] [Thread-129261] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:24:04.509 [DEBUG] [Thread-129261] [transport.py] [_log()] client lang: <none>
2025-12-31T14:24:04.509 [DEBUG] [Thread-129261] [transport.py] [_log()] server lang: <none>
2025-12-31T14:24:04.509 [DEBUG] [Thread-129261] [transport.py] [_log()] kex follows: False
2025-12-31T14:24:04.509 [DEBUG] [Thread-129261] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:24:04.509 [DEBUG] [Thread-129261] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:24:04.509 [DEBUG] [Thread-129261] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:24:04.509 [DEBUG] [Thread-129261] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:24:04.509 [DEBUG] [Thread-129261] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:24:04.509 [DEBUG] [Thread-129261] [transport.py] [_log()] Compression: none
2025-12-31T14:24:04.509 [DEBUG] [Thread-129261] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:24:04.569 [DEBUG] [Thread-129261] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:24:04.569 [DEBUG] [Thread-129261] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:24:04.569 [DEBUG] [Thread-129261] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T14:24:04.569 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T14:24:04.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:24:04.624 [DEBUG] [Thread-129261] [transport.py] [_log()] userauth is OK
2025-12-31T14:24:04.624 [DEBUG] [Thread-129261] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:24:04.624 [DEBUG] [Thread-129261] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:24:04.624 [DEBUG] [Thread-129261] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T14:24:04.624 [DEBUG] [Thread-129261] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:24:04.642 [INFO] [Thread-129261] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:24:04.642 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T14:24:04.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:24:05.546 [DEBUG] [Thread-129261] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:24:05.547 [DEBUG] [Thread-129261] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:24:05.595 [DEBUG] [Thread-129261] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:24:05.595 [DEBUG] [Thread-129261] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:24:05.604 [DEBUG] [Thread-129261] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:24:05.612 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:24:05.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T14:24: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-12-31T14:24:05.629 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:24:05.630 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:24:05.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:24:05.638 [DEBUG] [Thread-129261] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:24:15.679 [DEBUG] [Thread-129263 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:24:18.310 [DEBUG] [Thread-129264 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:24:30.725 [DEBUG] [Thread-129265 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:24:35.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T14:24:35.660 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T14:24:35.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T14:24:36.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 14, 24, 3), 34.78, 9.75, 0.0, 34.55, 27.22, 0, 0, 0, 2, 0, 0),)
2025-12-31T14:24:36.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 14:24:03
2025-12-31T14:24:36.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T14:24:36.719 [DEBUG] [Thread-129266] [transport.py] [_log()] starting thread (client mode): 0xb9559cf0
2025-12-31T14:24:36.719 [DEBUG] [Thread-129266] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:24:36.738 [DEBUG] [Thread-129266] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T14:24:36.739 [INFO] [Thread-129266] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T14:24:36.742 [DEBUG] [Thread-129266] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:24:36.742 [DEBUG] [Thread-129266] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T14:24:36.742 [DEBUG] [Thread-129266] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:24:36.742 [DEBUG] [Thread-129266] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:24:36.742 [DEBUG] [Thread-129266] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:24:36.742 [DEBUG] [Thread-129266] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:24:36.742 [DEBUG] [Thread-129266] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:24:36.742 [DEBUG] [Thread-129266] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:24:36.742 [DEBUG] [Thread-129266] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:24:36.742 [DEBUG] [Thread-129266] [transport.py] [_log()] client lang: <none>
2025-12-31T14:24:36.742 [DEBUG] [Thread-129266] [transport.py] [_log()] server lang: <none>
2025-12-31T14:24:36.742 [DEBUG] [Thread-129266] [transport.py] [_log()] kex follows: False
2025-12-31T14:24:36.742 [DEBUG] [Thread-129266] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:24:36.742 [DEBUG] [Thread-129266] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:24:36.742 [DEBUG] [Thread-129266] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:24:36.742 [DEBUG] [Thread-129266] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:24:36.742 [DEBUG] [Thread-129266] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:24:36.742 [DEBUG] [Thread-129266] [transport.py] [_log()] Compression: none
2025-12-31T14:24:36.742 [DEBUG] [Thread-129266] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:24:36.751 [DEBUG] [Thread-129266] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:24:36.751 [DEBUG] [Thread-129266] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:24:36.751 [DEBUG] [Thread-129266] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T14:24:36.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T14:24:36.752 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:24:36.752 [DEBUG] [Thread-129266] [transport.py] [_log()] userauth is OK
2025-12-31T14:24:36.752 [DEBUG] [Thread-129266] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:24:36.752 [DEBUG] [Thread-129266] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:24:36.752 [DEBUG] [Thread-129266] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T14:24:36.752 [DEBUG] [Thread-129266] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:24:36.761 [INFO] [Thread-129266] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:24:36.761 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:24:37.585 [DEBUG] [Thread-129266] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:24:37.585 [DEBUG] [Thread-129266] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:24:37.585 [DEBUG] [Thread-129266] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T14:24:37.625 [DEBUG] [Thread-129266] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:24:37.625 [DEBUG] [Thread-129266] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:24:37.628 [DEBUG] [Thread-129266] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:24:37.640 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:24:37.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T14:24:37.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T14:24:37.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T14:24:37.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:24:37.645 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T14:24:37.645 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:24:37.645 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:24:37.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T14:24:37.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.516461 -999.00  +26.20  37.01     15   -2.20 1 2 2 1 1   888    0 29.54 19.08 ----- 35.2 37.0 300.2 45.6 32.4 -20.4 32.1 -18.8 31.7 -16.6 32.6 -18.9
2025-12-31T14:24:37.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T14:24:37.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T14:24:37.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.516461
2025-12-31T14:24:37.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T14:24:37.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T14:24:37.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T14:24:37.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T14:24:37.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T14:24:37.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T14:24:03', tmtdew=34.78, humidity=9.75, cloud=0.0, wind=34.55, temperature=27.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T12:23:42.230', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T14:24:37.646 [DEBUG] [Thread-129266] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:24:37.721 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T14:24:37.732 [DEBUG] [Thread-129269] [transport.py] [_log()] starting thread (client mode): 0xb9559ea0
2025-12-31T14:24:37.732 [DEBUG] [Thread-129269] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:24:37.746 [DEBUG] [Thread-129269] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T14:24:37.747 [INFO] [Thread-129269] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T14:24:37.754 [DEBUG] [Thread-129269] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:24:37.754 [DEBUG] [Thread-129269] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T14:24:37.754 [DEBUG] [Thread-129269] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:24:37.754 [DEBUG] [Thread-129269] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:24:37.754 [DEBUG] [Thread-129269] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:24:37.754 [DEBUG] [Thread-129269] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:24:37.754 [DEBUG] [Thread-129269] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:24:37.754 [DEBUG] [Thread-129269] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:24:37.754 [DEBUG] [Thread-129269] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:24:37.754 [DEBUG] [Thread-129269] [transport.py] [_log()] client lang: <none>
2025-12-31T14:24:37.754 [DEBUG] [Thread-129269] [transport.py] [_log()] server lang: <none>
2025-12-31T14:24:37.754 [DEBUG] [Thread-129269] [transport.py] [_log()] kex follows: False
2025-12-31T14:24:37.754 [DEBUG] [Thread-129269] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:24:37.754 [DEBUG] [Thread-129269] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:24:37.754 [DEBUG] [Thread-129269] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:24:37.754 [DEBUG] [Thread-129269] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:24:37.754 [DEBUG] [Thread-129269] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:24:37.755 [DEBUG] [Thread-129269] [transport.py] [_log()] Compression: none
2025-12-31T14:24:37.755 [DEBUG] [Thread-129269] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:24:37.811 [DEBUG] [Thread-129269] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:24:37.811 [DEBUG] [Thread-129269] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:24:37.811 [DEBUG] [Thread-129269] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T14:24:37.811 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T14:24:37.812 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:24:37.868 [DEBUG] [Thread-129269] [transport.py] [_log()] userauth is OK
2025-12-31T14:24:37.868 [DEBUG] [Thread-129269] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:24:37.868 [DEBUG] [Thread-129269] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:24:37.868 [DEBUG] [Thread-129269] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T14:24:37.868 [DEBUG] [Thread-129269] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:24:37.882 [INFO] [Thread-129269] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:24:37.882 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T14:24:37.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:24:38.692 [DEBUG] [Thread-129269] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:24:38.692 [DEBUG] [Thread-129269] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:24:38.740 [DEBUG] [Thread-129269] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:24:38.740 [DEBUG] [Thread-129269] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:24:38.748 [DEBUG] [Thread-129269] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:24:38.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:24:38.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T14:24:38.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T14:24:38.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:24:38.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:24:38.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:24:38.779 [DEBUG] [Thread-129269] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:24:45.757 [DEBUG] [Thread-129271 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:24:58.688 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:24:58.689 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:25:00.809 [DEBUG] [Thread-129272 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:25:08.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T14:25:08.802 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T14:25:08.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T14:25:09.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 14, 24, 35), 33.71, 10.65, 0.0, 31.41, 27.12, 0, 0, 0, 2, 0, 0),)
2025-12-31T14:25:09.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 14:24:35
2025-12-31T14:25:09.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T14:25:09.836 [DEBUG] [Thread-129273] [transport.py] [_log()] starting thread (client mode): 0xb6ba1c90
2025-12-31T14:25:09.836 [DEBUG] [Thread-129273] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:25:09.859 [DEBUG] [Thread-129273] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T14:25:09.859 [INFO] [Thread-129273] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T14:25:09.862 [DEBUG] [Thread-129273] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:25:09.862 [DEBUG] [Thread-129273] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T14:25:09.862 [DEBUG] [Thread-129273] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:25:09.862 [DEBUG] [Thread-129273] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:25:09.862 [DEBUG] [Thread-129273] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:25:09.862 [DEBUG] [Thread-129273] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:25:09.862 [DEBUG] [Thread-129273] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:25:09.862 [DEBUG] [Thread-129273] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:25:09.862 [DEBUG] [Thread-129273] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:25:09.862 [DEBUG] [Thread-129273] [transport.py] [_log()] client lang: <none>
2025-12-31T14:25:09.862 [DEBUG] [Thread-129273] [transport.py] [_log()] server lang: <none>
2025-12-31T14:25:09.862 [DEBUG] [Thread-129273] [transport.py] [_log()] kex follows: False
2025-12-31T14:25:09.862 [DEBUG] [Thread-129273] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:25:09.862 [DEBUG] [Thread-129273] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:25:09.862 [DEBUG] [Thread-129273] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:25:09.862 [DEBUG] [Thread-129273] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:25:09.863 [DEBUG] [Thread-129273] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:25:09.863 [DEBUG] [Thread-129273] [transport.py] [_log()] Compression: none
2025-12-31T14:25:09.863 [DEBUG] [Thread-129273] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:25:09.880 [DEBUG] [Thread-129273] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:25:09.880 [DEBUG] [Thread-129273] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:25:09.881 [DEBUG] [Thread-129273] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T14:25:09.881 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T14:25:09.881 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:25:09.882 [DEBUG] [Thread-129273] [transport.py] [_log()] userauth is OK
2025-12-31T14:25:09.882 [DEBUG] [Thread-129273] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:25:09.883 [DEBUG] [Thread-129273] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:25:09.883 [DEBUG] [Thread-129273] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T14:25:09.883 [DEBUG] [Thread-129273] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:25:09.899 [INFO] [Thread-129273] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:25:09.900 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:25:13.848 [DEBUG] [Thread-129273] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:25:13.849 [DEBUG] [Thread-129273] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:25:13.849 [DEBUG] [Thread-129273] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T14:25:13.890 [DEBUG] [Thread-129273] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:25:13.890 [DEBUG] [Thread-129273] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:25:13.894 [DEBUG] [Thread-129273] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:25:13.905 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:25:13.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T14:25:13.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T14:25:13.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T14:25:13.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:25:13.947 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T14:25:13.947 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:25:13.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:25:13.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T14:25:13.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.516809 -999.00  +26.60  29.64     16   -0.90 1 2 1 1 1   888    0 29.75 18.92 ----- 23.4 29.6 277.2 41.6 32.5 -20.8 32.1 -18.1 32.0 -16.9 32.7 -18.5
2025-12-31T14:25:13.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T14:25:13.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T14:25:13.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.516809
2025-12-31T14:25:13.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T14:25:13.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T14:25:13.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T14:25:13.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T14:25:13.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T14:25:13.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T14:24:35', tmtdew=33.71, humidity=10.65, cloud=0.0, wind=31.41, temperature=27.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T12:24:12.298', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T14:25:13.950 [DEBUG] [Thread-129273] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:25:14.040 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T14:25:14.051 [DEBUG] [Thread-129276] [transport.py] [_log()] starting thread (client mode): 0xb9558040
2025-12-31T14:25:14.052 [DEBUG] [Thread-129276] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:25:14.066 [DEBUG] [Thread-129276] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T14:25:14.066 [INFO] [Thread-129276] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T14:25:14.074 [DEBUG] [Thread-129276] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:25:14.074 [DEBUG] [Thread-129276] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T14:25:14.074 [DEBUG] [Thread-129276] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:25:14.074 [DEBUG] [Thread-129276] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:25:14.074 [DEBUG] [Thread-129276] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:25:14.074 [DEBUG] [Thread-129276] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:25:14.074 [DEBUG] [Thread-129276] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:25:14.074 [DEBUG] [Thread-129276] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:25:14.074 [DEBUG] [Thread-129276] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:25:14.074 [DEBUG] [Thread-129276] [transport.py] [_log()] client lang: <none>
2025-12-31T14:25:14.074 [DEBUG] [Thread-129276] [transport.py] [_log()] server lang: <none>
2025-12-31T14:25:14.074 [DEBUG] [Thread-129276] [transport.py] [_log()] kex follows: False
2025-12-31T14:25:14.074 [DEBUG] [Thread-129276] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:25:14.074 [DEBUG] [Thread-129276] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:25:14.074 [DEBUG] [Thread-129276] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:25:14.074 [DEBUG] [Thread-129276] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:25:14.074 [DEBUG] [Thread-129276] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:25:14.075 [DEBUG] [Thread-129276] [transport.py] [_log()] Compression: none
2025-12-31T14:25:14.075 [DEBUG] [Thread-129276] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:25:14.133 [DEBUG] [Thread-129276] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:25:14.134 [DEBUG] [Thread-129276] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:25:14.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T14:25:14.135 [DEBUG] [Thread-129276] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T14:25:14.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:25:14.189 [DEBUG] [Thread-129276] [transport.py] [_log()] userauth is OK
2025-12-31T14:25:14.190 [DEBUG] [Thread-129276] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:25:14.190 [DEBUG] [Thread-129276] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:25:14.190 [DEBUG] [Thread-129276] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T14:25:14.190 [DEBUG] [Thread-129276] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:25:14.209 [INFO] [Thread-129276] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:25:14.209 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T14:25:14.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:25:15.039 [DEBUG] [Thread-129276] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:25:15.040 [DEBUG] [Thread-129276] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:25:15.088 [DEBUG] [Thread-129276] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:25:15.088 [DEBUG] [Thread-129276] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:25:15.097 [DEBUG] [Thread-129276] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:25:15.107 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:25:15.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T14:25:15.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T14:25:15.126 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:25:15.126 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:25:15.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:25:15.135 [DEBUG] [Thread-129276] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:25:15.845 [DEBUG] [Thread-129278 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:25:18.359 [DEBUG] [Thread-129279 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:25:30.894 [DEBUG] [Thread-129280 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:25:45.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T14:25:45.157 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T14:25:45.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T14:25:45.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 14, 25, 39), 33.14, 11.01, 0.0, 27.61, 26.92, 0, 0, 0, 2, 0, 0),)
2025-12-31T14:25:45.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 14:25:39
2025-12-31T14:25:45.932 [DEBUG] [Thread-129281 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:25:46.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T14:25:46.166 [DEBUG] [Thread-129282] [transport.py] [_log()] starting thread (client mode): 0xb6b2b130
2025-12-31T14:25:46.166 [DEBUG] [Thread-129282] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:25:46.186 [DEBUG] [Thread-129282] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T14:25:46.186 [INFO] [Thread-129282] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T14:25:46.189 [DEBUG] [Thread-129282] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:25:46.189 [DEBUG] [Thread-129282] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T14:25:46.189 [DEBUG] [Thread-129282] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:25:46.189 [DEBUG] [Thread-129282] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:25:46.189 [DEBUG] [Thread-129282] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:25:46.189 [DEBUG] [Thread-129282] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:25:46.189 [DEBUG] [Thread-129282] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:25:46.189 [DEBUG] [Thread-129282] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:25:46.189 [DEBUG] [Thread-129282] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:25:46.189 [DEBUG] [Thread-129282] [transport.py] [_log()] client lang: <none>
2025-12-31T14:25:46.189 [DEBUG] [Thread-129282] [transport.py] [_log()] server lang: <none>
2025-12-31T14:25:46.189 [DEBUG] [Thread-129282] [transport.py] [_log()] kex follows: False
2025-12-31T14:25:46.189 [DEBUG] [Thread-129282] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:25:46.190 [DEBUG] [Thread-129282] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:25:46.190 [DEBUG] [Thread-129282] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:25:46.190 [DEBUG] [Thread-129282] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:25:46.190 [DEBUG] [Thread-129282] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:25:46.190 [DEBUG] [Thread-129282] [transport.py] [_log()] Compression: none
2025-12-31T14:25:46.190 [DEBUG] [Thread-129282] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:25:46.209 [DEBUG] [Thread-129282] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:25:46.211 [DEBUG] [Thread-129282] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:25:46.212 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T14:25:46.212 [DEBUG] [Thread-129282] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T14:25:46.213 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:25:46.214 [DEBUG] [Thread-129282] [transport.py] [_log()] userauth is OK
2025-12-31T14:25:46.214 [DEBUG] [Thread-129282] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:25:46.214 [DEBUG] [Thread-129282] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:25:46.214 [DEBUG] [Thread-129282] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T14:25:46.215 [DEBUG] [Thread-129282] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:25:46.251 [INFO] [Thread-129282] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:25:46.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:25:46.860 [DEBUG] [Thread-129282] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:25:46.860 [DEBUG] [Thread-129282] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:25:46.861 [DEBUG] [Thread-129282] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T14:25:46.902 [DEBUG] [Thread-129282] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:25:46.902 [DEBUG] [Thread-129282] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:25:46.906 [DEBUG] [Thread-129282] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:25:46.912 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:25:46.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T14:25:46.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T14:25:46.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T14:25:46.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:25:46.928 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T14:25:46.928 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:25:46.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:25:46.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T14:25:46.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.517156 -999.00  +26.20  23.57     16   -1.10 1 2 1 1 1   888    0 29.48 16.32 ----- 23.8 23.6 278.7 36.0 32.3 -21.1 32.1 -19.4 31.6 -23.0 32.6 -19.7
2025-12-31T14:25:46.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T14:25:46.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T14:25:46.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.517156
2025-12-31T14:25:46.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T14:25:46.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T14:25:46.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T14:25:46.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T14:25:46.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T14:25:46.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T14:25:39', tmtdew=33.14, humidity=11.01, cloud=0.0, wind=27.61, temperature=26.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T12:24:42.278', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T14:25:46.931 [DEBUG] [Thread-129282] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:25:47.015 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T14:25:47.024 [DEBUG] [Thread-129285] [transport.py] [_log()] starting thread (client mode): 0xb6bb2230
2025-12-31T14:25:47.025 [DEBUG] [Thread-129285] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:25:47.040 [DEBUG] [Thread-129285] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T14:25:47.040 [INFO] [Thread-129285] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T14:25:47.047 [DEBUG] [Thread-129285] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:25:47.048 [DEBUG] [Thread-129285] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T14:25:47.048 [DEBUG] [Thread-129285] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:25:47.048 [DEBUG] [Thread-129285] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:25:47.048 [DEBUG] [Thread-129285] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:25:47.048 [DEBUG] [Thread-129285] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:25:47.048 [DEBUG] [Thread-129285] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:25:47.048 [DEBUG] [Thread-129285] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:25:47.048 [DEBUG] [Thread-129285] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:25:47.048 [DEBUG] [Thread-129285] [transport.py] [_log()] client lang: <none>
2025-12-31T14:25:47.049 [DEBUG] [Thread-129285] [transport.py] [_log()] server lang: <none>
2025-12-31T14:25:47.049 [DEBUG] [Thread-129285] [transport.py] [_log()] kex follows: False
2025-12-31T14:25:47.049 [DEBUG] [Thread-129285] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:25:47.049 [DEBUG] [Thread-129285] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:25:47.049 [DEBUG] [Thread-129285] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:25:47.049 [DEBUG] [Thread-129285] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:25:47.049 [DEBUG] [Thread-129285] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:25:47.049 [DEBUG] [Thread-129285] [transport.py] [_log()] Compression: none
2025-12-31T14:25:47.050 [DEBUG] [Thread-129285] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:25:47.107 [DEBUG] [Thread-129285] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:25:47.107 [DEBUG] [Thread-129285] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:25:47.108 [DEBUG] [Thread-129285] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T14:25:47.108 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T14:25:47.109 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:25:47.165 [DEBUG] [Thread-129285] [transport.py] [_log()] userauth is OK
2025-12-31T14:25:47.166 [DEBUG] [Thread-129285] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:25:47.166 [DEBUG] [Thread-129285] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:25:47.166 [DEBUG] [Thread-129285] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T14:25:47.166 [DEBUG] [Thread-129285] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:25:47.184 [INFO] [Thread-129285] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:25:47.185 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T14:25:47.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:25:48.036 [DEBUG] [Thread-129285] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:25:48.036 [DEBUG] [Thread-129285] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:25:48.084 [DEBUG] [Thread-129285] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:25:48.084 [DEBUG] [Thread-129285] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:25:48.093 [DEBUG] [Thread-129285] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:25:48.102 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:25:48.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-12-31T14:25:48.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T14:25:48.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:25:48.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:25:48.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:25:48.128 [DEBUG] [Thread-129285] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:25:58.829 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:25:58.830 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:26:00.961 [DEBUG] [Thread-129287 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:26:16.002 [DEBUG] [Thread-129288 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:26:18.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T14:26:18.150 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T14:26:18.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T14:26:18.406 [DEBUG] [Thread-129289 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:26:18.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 14, 26, 11), 32.82, 11.21, 0.0, 27.68, 26.64, 0, 0, 0, 2, 0, 0),)
2025-12-31T14:26:18.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 14:26:11
2025-12-31T14:26:19.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T14:26:19.157 [DEBUG] [Thread-129290] [transport.py] [_log()] starting thread (client mode): 0xb6bbfd90
2025-12-31T14:26:19.157 [DEBUG] [Thread-129290] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:26:19.177 [DEBUG] [Thread-129290] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T14:26:19.177 [INFO] [Thread-129290] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T14:26:19.180 [DEBUG] [Thread-129290] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:26:19.181 [DEBUG] [Thread-129290] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T14:26:19.181 [DEBUG] [Thread-129290] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:26:19.181 [DEBUG] [Thread-129290] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:26:19.181 [DEBUG] [Thread-129290] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:26:19.181 [DEBUG] [Thread-129290] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:26:19.181 [DEBUG] [Thread-129290] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:26:19.181 [DEBUG] [Thread-129290] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:26:19.181 [DEBUG] [Thread-129290] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:26:19.181 [DEBUG] [Thread-129290] [transport.py] [_log()] client lang: <none>
2025-12-31T14:26:19.181 [DEBUG] [Thread-129290] [transport.py] [_log()] server lang: <none>
2025-12-31T14:26:19.181 [DEBUG] [Thread-129290] [transport.py] [_log()] kex follows: False
2025-12-31T14:26:19.181 [DEBUG] [Thread-129290] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:26:19.181 [DEBUG] [Thread-129290] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:26:19.181 [DEBUG] [Thread-129290] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:26:19.181 [DEBUG] [Thread-129290] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:26:19.181 [DEBUG] [Thread-129290] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:26:19.181 [DEBUG] [Thread-129290] [transport.py] [_log()] Compression: none
2025-12-31T14:26:19.181 [DEBUG] [Thread-129290] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:26:19.198 [DEBUG] [Thread-129290] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:26:19.199 [DEBUG] [Thread-129290] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:26:19.199 [DEBUG] [Thread-129290] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T14:26:19.200 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T14:26:19.200 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:26:19.201 [DEBUG] [Thread-129290] [transport.py] [_log()] userauth is OK
2025-12-31T14:26:19.202 [DEBUG] [Thread-129290] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:26:19.202 [DEBUG] [Thread-129290] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:26:19.202 [DEBUG] [Thread-129290] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T14:26:19.202 [DEBUG] [Thread-129290] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:26:19.226 [INFO] [Thread-129290] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:26:19.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:26:19.988 [DEBUG] [Thread-129290] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:26:19.988 [DEBUG] [Thread-129290] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:26:19.988 [DEBUG] [Thread-129290] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T14:26:20.029 [DEBUG] [Thread-129290] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:26:20.029 [DEBUG] [Thread-129290] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:26:20.032 [DEBUG] [Thread-129290] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:26:20.038 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:26:20.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T14:26:20.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T14:26:20.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T14:26:20.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:26:20.049 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T14:26:20.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:26:20.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:26:20.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T14:26:20.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.517850 -999.00  +26.20  35.35     16   -1.20 1 2 2 1 1   888    0 29.01 10.41 ----- 31.8 35.4 294.6 39.8 32.7 -20.3 32.2 -18.8 32.1 -19.6 32.8 -19.1
2025-12-31T14:26:20.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T14:26:20.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T14:26:20.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.517850
2025-12-31T14:26:20.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T14:26:20.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T14:26:20.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T14:26:20.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T14:26:20.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T14:26:20.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T14:26:11', tmtdew=32.82, humidity=11.21, cloud=0.0, wind=27.68, temperature=26.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T12:25:42.240', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T14:26:20.052 [DEBUG] [Thread-129290] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:26:20.132 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T14:26:20.144 [DEBUG] [Thread-129293] [transport.py] [_log()] starting thread (client mode): 0xb6bbdd50
2025-12-31T14:26:20.144 [DEBUG] [Thread-129293] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:26:20.159 [DEBUG] [Thread-129293] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T14:26:20.159 [INFO] [Thread-129293] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T14:26:20.167 [DEBUG] [Thread-129293] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:26:20.167 [DEBUG] [Thread-129293] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T14:26:20.167 [DEBUG] [Thread-129293] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:26:20.167 [DEBUG] [Thread-129293] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:26:20.167 [DEBUG] [Thread-129293] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:26:20.167 [DEBUG] [Thread-129293] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:26:20.167 [DEBUG] [Thread-129293] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:26:20.167 [DEBUG] [Thread-129293] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:26:20.167 [DEBUG] [Thread-129293] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:26:20.168 [DEBUG] [Thread-129293] [transport.py] [_log()] client lang: <none>
2025-12-31T14:26:20.168 [DEBUG] [Thread-129293] [transport.py] [_log()] server lang: <none>
2025-12-31T14:26:20.168 [DEBUG] [Thread-129293] [transport.py] [_log()] kex follows: False
2025-12-31T14:26:20.168 [DEBUG] [Thread-129293] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:26:20.168 [DEBUG] [Thread-129293] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:26:20.168 [DEBUG] [Thread-129293] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:26:20.168 [DEBUG] [Thread-129293] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:26:20.168 [DEBUG] [Thread-129293] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:26:20.168 [DEBUG] [Thread-129293] [transport.py] [_log()] Compression: none
2025-12-31T14:26:20.168 [DEBUG] [Thread-129293] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:26:20.225 [DEBUG] [Thread-129293] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:26:20.226 [DEBUG] [Thread-129293] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:26:20.226 [DEBUG] [Thread-129293] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T14:26:20.227 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T14:26:20.227 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:26:20.281 [DEBUG] [Thread-129293] [transport.py] [_log()] userauth is OK
2025-12-31T14:26:20.282 [DEBUG] [Thread-129293] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:26:20.282 [DEBUG] [Thread-129293] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:26:20.282 [DEBUG] [Thread-129293] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T14:26:20.282 [DEBUG] [Thread-129293] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:26:20.303 [INFO] [Thread-129293] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:26:20.303 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T14:26:20.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:26:21.134 [DEBUG] [Thread-129293] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:26:21.134 [DEBUG] [Thread-129293] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:26:21.182 [DEBUG] [Thread-129293] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:26:21.182 [DEBUG] [Thread-129293] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:26:21.191 [DEBUG] [Thread-129293] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:26:21.201 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:26:21.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T14:26:21.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T14:26:21.219 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:26:21.219 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:26:21.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:26:21.228 [DEBUG] [Thread-129293] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:26:31.038 [DEBUG] [Thread-129295 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:26:46.083 [DEBUG] [Thread-129296 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:26:51.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T14:26:51.251 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T14:26: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-12-31T14:26:51.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 14, 26, 43), 32.92, 11.15, 0.0, 26.94, 26.86, 0, 0, 0, 2, 0, 0),)
2025-12-31T14:26:51.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 14:26:43
2025-12-31T14:26:52.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T14:26:52.259 [DEBUG] [Thread-129297] [transport.py] [_log()] starting thread (client mode): 0xb6bbafb0
2025-12-31T14:26:52.259 [DEBUG] [Thread-129297] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:26:52.282 [DEBUG] [Thread-129297] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T14:26:52.282 [INFO] [Thread-129297] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T14:26:52.286 [DEBUG] [Thread-129297] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:26:52.286 [DEBUG] [Thread-129297] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T14:26:52.286 [DEBUG] [Thread-129297] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:26:52.286 [DEBUG] [Thread-129297] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:26:52.286 [DEBUG] [Thread-129297] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:26:52.286 [DEBUG] [Thread-129297] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:26:52.286 [DEBUG] [Thread-129297] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:26:52.286 [DEBUG] [Thread-129297] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:26:52.286 [DEBUG] [Thread-129297] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:26:52.286 [DEBUG] [Thread-129297] [transport.py] [_log()] client lang: <none>
2025-12-31T14:26:52.286 [DEBUG] [Thread-129297] [transport.py] [_log()] server lang: <none>
2025-12-31T14:26:52.286 [DEBUG] [Thread-129297] [transport.py] [_log()] kex follows: False
2025-12-31T14:26:52.286 [DEBUG] [Thread-129297] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:26:52.286 [DEBUG] [Thread-129297] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:26:52.286 [DEBUG] [Thread-129297] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:26:52.287 [DEBUG] [Thread-129297] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:26:52.287 [DEBUG] [Thread-129297] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:26:52.287 [DEBUG] [Thread-129297] [transport.py] [_log()] Compression: none
2025-12-31T14:26:52.287 [DEBUG] [Thread-129297] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:26:52.303 [DEBUG] [Thread-129297] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:26:52.303 [DEBUG] [Thread-129297] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:26:52.304 [DEBUG] [Thread-129297] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T14:26:52.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T14:26:52.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:26:52.306 [DEBUG] [Thread-129297] [transport.py] [_log()] userauth is OK
2025-12-31T14:26:52.306 [DEBUG] [Thread-129297] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:26:52.306 [DEBUG] [Thread-129297] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:26:52.306 [DEBUG] [Thread-129297] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T14:26:52.306 [DEBUG] [Thread-129297] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:26:52.329 [INFO] [Thread-129297] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:26:52.330 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:26:52.971 [DEBUG] [Thread-129297] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:26:52.971 [DEBUG] [Thread-129297] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:26:52.972 [DEBUG] [Thread-129297] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T14:26:53.013 [DEBUG] [Thread-129297] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:26:53.014 [DEBUG] [Thread-129297] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:26:53.017 [DEBUG] [Thread-129297] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:26:53.030 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:26:53.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T14:26:53.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T14:26:53.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T14:26:53.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:26:53.041 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T14:26:53.041 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:26:53.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:26:53.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T14:26:53.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.518198 -999.00  +26.20  34.86     16   -1.20 1 2 2 1 1   888    0 28.66 8.20 ----- 28.7 34.9 291.6 37.3 32.7 -20.4 32.3 -19.4 32.1 -19.3 32.9 -19.8
2025-12-31T14:26:53.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T14:26:53.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T14:26:53.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.518198
2025-12-31T14:26:53.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T14:26:53.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T14:26:53.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T14:26:53.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T14:26:53.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T14:26:53.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T14:26:43', tmtdew=32.92, humidity=11.15, cloud=0.0, wind=26.94, temperature=26.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T12:26:12.307', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T14:26:53.044 [DEBUG] [Thread-129297] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:26:53.131 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T14:26:53.142 [DEBUG] [Thread-129300] [transport.py] [_log()] starting thread (client mode): 0xb95b0310
2025-12-31T14:26:53.142 [DEBUG] [Thread-129300] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:26:53.157 [DEBUG] [Thread-129300] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T14:26:53.157 [INFO] [Thread-129300] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T14:26:53.165 [DEBUG] [Thread-129300] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:26:53.165 [DEBUG] [Thread-129300] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T14:26:53.165 [DEBUG] [Thread-129300] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:26:53.165 [DEBUG] [Thread-129300] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:26:53.165 [DEBUG] [Thread-129300] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:26:53.165 [DEBUG] [Thread-129300] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:26:53.165 [DEBUG] [Thread-129300] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:26:53.165 [DEBUG] [Thread-129300] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:26:53.165 [DEBUG] [Thread-129300] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:26:53.165 [DEBUG] [Thread-129300] [transport.py] [_log()] client lang: <none>
2025-12-31T14:26:53.165 [DEBUG] [Thread-129300] [transport.py] [_log()] server lang: <none>
2025-12-31T14:26:53.165 [DEBUG] [Thread-129300] [transport.py] [_log()] kex follows: False
2025-12-31T14:26:53.165 [DEBUG] [Thread-129300] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:26:53.165 [DEBUG] [Thread-129300] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:26:53.165 [DEBUG] [Thread-129300] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:26:53.165 [DEBUG] [Thread-129300] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:26:53.165 [DEBUG] [Thread-129300] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:26:53.166 [DEBUG] [Thread-129300] [transport.py] [_log()] Compression: none
2025-12-31T14:26:53.166 [DEBUG] [Thread-129300] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:26:53.221 [DEBUG] [Thread-129300] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:26:53.222 [DEBUG] [Thread-129300] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:26:53.223 [DEBUG] [Thread-129300] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T14:26:53.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T14:26:53.224 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:26:53.282 [DEBUG] [Thread-129300] [transport.py] [_log()] userauth is OK
2025-12-31T14:26:53.282 [DEBUG] [Thread-129300] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:26:53.282 [DEBUG] [Thread-129300] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:26:53.283 [DEBUG] [Thread-129300] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T14:26:53.283 [DEBUG] [Thread-129300] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:26:53.304 [INFO] [Thread-129300] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:26:53.304 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T14:26:53.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:26:54.119 [DEBUG] [Thread-129300] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:26:54.120 [DEBUG] [Thread-129300] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:26:54.167 [DEBUG] [Thread-129300] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:26:54.168 [DEBUG] [Thread-129300] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:26:54.180 [DEBUG] [Thread-129300] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:26:54.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:26:54.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T14:26:54.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T14:26:54.211 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:26:54.211 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:26:54.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:26:54.220 [DEBUG] [Thread-129300] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:26:58.972 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:26:58.973 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:27:01.116 [DEBUG] [Thread-129302 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:27:16.165 [DEBUG] [Thread-129303 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:27:18.453 [DEBUG] [Thread-129304 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:27:24.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T14:27:24.214 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T14:27:24.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T14:27:24.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 14, 27, 15), 32.98, 11.11, 0.0, 29.71, 26.96, 0, 0, 0, 2, 0, 0),)
2025-12-31T14:27:24.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 14:27:15
2025-12-31T14:27:25.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T14:27:25.217 [DEBUG] [Thread-129305] [transport.py] [_log()] starting thread (client mode): 0xb6bbd840
2025-12-31T14:27:25.218 [DEBUG] [Thread-129305] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:27:25.239 [DEBUG] [Thread-129305] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T14:27:25.239 [INFO] [Thread-129305] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T14:27:25.242 [DEBUG] [Thread-129305] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:27:25.242 [DEBUG] [Thread-129305] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T14:27:25.242 [DEBUG] [Thread-129305] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:27:25.243 [DEBUG] [Thread-129305] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:27:25.243 [DEBUG] [Thread-129305] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:27:25.243 [DEBUG] [Thread-129305] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:27:25.243 [DEBUG] [Thread-129305] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:27:25.243 [DEBUG] [Thread-129305] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:27:25.243 [DEBUG] [Thread-129305] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:27:25.243 [DEBUG] [Thread-129305] [transport.py] [_log()] client lang: <none>
2025-12-31T14:27:25.243 [DEBUG] [Thread-129305] [transport.py] [_log()] server lang: <none>
2025-12-31T14:27:25.243 [DEBUG] [Thread-129305] [transport.py] [_log()] kex follows: False
2025-12-31T14:27:25.243 [DEBUG] [Thread-129305] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:27:25.243 [DEBUG] [Thread-129305] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:27:25.243 [DEBUG] [Thread-129305] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:27:25.243 [DEBUG] [Thread-129305] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:27:25.244 [DEBUG] [Thread-129305] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:27:25.244 [DEBUG] [Thread-129305] [transport.py] [_log()] Compression: none
2025-12-31T14:27:25.244 [DEBUG] [Thread-129305] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:27:25.265 [DEBUG] [Thread-129305] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:27:25.266 [DEBUG] [Thread-129305] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:27:25.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T14:27:25.268 [DEBUG] [Thread-129305] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T14:27:25.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:27:25.269 [DEBUG] [Thread-129305] [transport.py] [_log()] userauth is OK
2025-12-31T14:27:25.270 [DEBUG] [Thread-129305] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:27:25.270 [DEBUG] [Thread-129305] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:27:25.270 [DEBUG] [Thread-129305] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T14:27:25.270 [DEBUG] [Thread-129305] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:27:25.293 [INFO] [Thread-129305] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:27:25.294 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:27:25.998 [DEBUG] [Thread-129305] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:27:25.999 [DEBUG] [Thread-129305] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:27:25.999 [DEBUG] [Thread-129305] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T14:27:26.040 [DEBUG] [Thread-129305] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:27:26.040 [DEBUG] [Thread-129305] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:27:26.043 [DEBUG] [Thread-129305] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:27:26.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:27:26.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T14:27:26.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T14:27:26.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T14:27:26.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:27:26.066 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T14:27:26.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:27:26.066 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:27:26.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T14:27:26.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.518545 -999.00  +26.20  35.19     16   -1.00 1 2 2 1 1   888    0 28.12 6.01 ----- 30.4 35.2 298.8 38.7 32.7 -21.3 32.3 -20.2 32.4 -20.1 32.9 -20.8
2025-12-31T14:27:26.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T14:27:26.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T14:27:26.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.518545
2025-12-31T14:27:26.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T14:27:26.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T14:27:26.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T14:27:26.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T14:27:26.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T14:27:26.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T14:27:15', tmtdew=32.98, humidity=11.11, cloud=0.0, wind=29.71, temperature=26.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T12:26:42.288', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T14:27:26.068 [DEBUG] [Thread-129305] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:27:26.151 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T14:27:26.162 [DEBUG] [Thread-129308] [transport.py] [_log()] starting thread (client mode): 0xb6b170a0
2025-12-31T14:27:26.163 [DEBUG] [Thread-129308] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:27:26.178 [DEBUG] [Thread-129308] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T14:27:26.178 [INFO] [Thread-129308] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T14:27:26.186 [DEBUG] [Thread-129308] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:27:26.186 [DEBUG] [Thread-129308] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T14:27:26.186 [DEBUG] [Thread-129308] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:27:26.186 [DEBUG] [Thread-129308] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:27:26.186 [DEBUG] [Thread-129308] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:27:26.186 [DEBUG] [Thread-129308] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:27:26.186 [DEBUG] [Thread-129308] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:27:26.186 [DEBUG] [Thread-129308] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:27:26.186 [DEBUG] [Thread-129308] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:27:26.186 [DEBUG] [Thread-129308] [transport.py] [_log()] client lang: <none>
2025-12-31T14:27:26.186 [DEBUG] [Thread-129308] [transport.py] [_log()] server lang: <none>
2025-12-31T14:27:26.186 [DEBUG] [Thread-129308] [transport.py] [_log()] kex follows: False
2025-12-31T14:27:26.186 [DEBUG] [Thread-129308] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:27:26.186 [DEBUG] [Thread-129308] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:27:26.186 [DEBUG] [Thread-129308] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:27:26.186 [DEBUG] [Thread-129308] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:27:26.187 [DEBUG] [Thread-129308] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:27:26.187 [DEBUG] [Thread-129308] [transport.py] [_log()] Compression: none
2025-12-31T14:27:26.187 [DEBUG] [Thread-129308] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:27:26.243 [DEBUG] [Thread-129308] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:27:26.243 [DEBUG] [Thread-129308] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:27:26.244 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T14:27:26.244 [DEBUG] [Thread-129308] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T14:27:26.245 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:27:26.304 [DEBUG] [Thread-129308] [transport.py] [_log()] userauth is OK
2025-12-31T14:27:26.304 [DEBUG] [Thread-129308] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:27:26.305 [DEBUG] [Thread-129308] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:27:26.305 [DEBUG] [Thread-129308] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T14:27:26.305 [DEBUG] [Thread-129308] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:27:26.327 [INFO] [Thread-129308] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:27:26.327 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T14:27:26.328 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:27:27.171 [DEBUG] [Thread-129308] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:27:27.171 [DEBUG] [Thread-129308] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:27:27.219 [DEBUG] [Thread-129308] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:27:27.219 [DEBUG] [Thread-129308] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:27:27.228 [DEBUG] [Thread-129308] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:27:27.238 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:27:27.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-12-31T14:27:27.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-12-31T14:27:27.256 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:27:27.256 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:27:27.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:27:27.265 [DEBUG] [Thread-129308] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:27:31.196 [DEBUG] [Thread-129310 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:27:46.252 [DEBUG] [Thread-129311 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:27:57.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T14:27:57.287 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T14:27:57.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T14:27:58.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 14, 27, 47), 32.61, 11.15, 0.0, 30.51, 26.62, 0, 0, 0, 2, 0, 0),)
2025-12-31T14:27:58.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 14:27:47
2025-12-31T14:27:58.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T14:27:58.314 [DEBUG] [Thread-129312] [transport.py] [_log()] starting thread (client mode): 0xb6bbf4f0
2025-12-31T14:27:58.314 [DEBUG] [Thread-129312] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:27:58.333 [DEBUG] [Thread-129312] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T14:27:58.333 [INFO] [Thread-129312] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T14:27:58.336 [DEBUG] [Thread-129312] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:27:58.337 [DEBUG] [Thread-129312] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T14:27:58.337 [DEBUG] [Thread-129312] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:27:58.337 [DEBUG] [Thread-129312] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:27:58.337 [DEBUG] [Thread-129312] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:27:58.337 [DEBUG] [Thread-129312] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:27:58.337 [DEBUG] [Thread-129312] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:27:58.337 [DEBUG] [Thread-129312] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:27:58.337 [DEBUG] [Thread-129312] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:27:58.337 [DEBUG] [Thread-129312] [transport.py] [_log()] client lang: <none>
2025-12-31T14:27:58.337 [DEBUG] [Thread-129312] [transport.py] [_log()] server lang: <none>
2025-12-31T14:27:58.337 [DEBUG] [Thread-129312] [transport.py] [_log()] kex follows: False
2025-12-31T14:27:58.337 [DEBUG] [Thread-129312] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:27:58.337 [DEBUG] [Thread-129312] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:27:58.337 [DEBUG] [Thread-129312] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:27:58.338 [DEBUG] [Thread-129312] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:27:58.338 [DEBUG] [Thread-129312] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:27:58.338 [DEBUG] [Thread-129312] [transport.py] [_log()] Compression: none
2025-12-31T14:27:58.338 [DEBUG] [Thread-129312] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:27:58.355 [DEBUG] [Thread-129312] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:27:58.355 [DEBUG] [Thread-129312] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:27:58.356 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T14:27:58.357 [DEBUG] [Thread-129312] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T14:27:58.358 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:27:58.359 [DEBUG] [Thread-129312] [transport.py] [_log()] userauth is OK
2025-12-31T14:27:58.359 [DEBUG] [Thread-129312] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:27:58.359 [DEBUG] [Thread-129312] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:27:58.360 [DEBUG] [Thread-129312] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T14:27:58.360 [DEBUG] [Thread-129312] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:27:58.385 [INFO] [Thread-129312] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:27:58.386 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:27:59.069 [DEBUG] [Thread-129312] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:27:59.069 [DEBUG] [Thread-129312] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:27:59.069 [DEBUG] [Thread-129312] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T14:27:59.110 [DEBUG] [Thread-129312] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:27:59.110 [DEBUG] [Thread-129312] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:27:59.111 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:27:59.112 [DEBUG] [Thread-129312] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:27:59.113 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:27:59.125 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:27:59.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T14:27:59.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T14:27:59.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T14:27:59.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:27:59.136 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T14:27:59.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:27:59.136 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:27:59.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T14:27:59.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.518892 -999.00  +26.40  26.56     16   -0.70 1 2 1 1 1   888    0 28.54 0.24 ----- 24.0 26.6 289.6 38.3 32.8 -20.5 32.4 -18.9 32.3 -19.7 33.0 -19.7
2025-12-31T14:27:59.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T14:27:59.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T14:27:59.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.518892
2025-12-31T14:27:59.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T14:27:59.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T14:27:59.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T14:27:59.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T14:27:59.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T14:27:59.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T14:27:47', tmtdew=32.61, humidity=11.15, cloud=0.0, wind=30.51, temperature=26.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T12:27:12.269', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T14:27:59.138 [DEBUG] [Thread-129312] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:27:59.221 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T14:27:59.234 [DEBUG] [Thread-129315] [transport.py] [_log()] starting thread (client mode): 0xb95f1a20
2025-12-31T14:27:59.234 [DEBUG] [Thread-129315] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:27:59.248 [DEBUG] [Thread-129315] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T14:27:59.249 [INFO] [Thread-129315] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T14:27:59.256 [DEBUG] [Thread-129315] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:27:59.257 [DEBUG] [Thread-129315] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T14:27:59.257 [DEBUG] [Thread-129315] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:27:59.257 [DEBUG] [Thread-129315] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:27:59.257 [DEBUG] [Thread-129315] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:27:59.257 [DEBUG] [Thread-129315] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:27:59.257 [DEBUG] [Thread-129315] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:27:59.257 [DEBUG] [Thread-129315] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:27:59.257 [DEBUG] [Thread-129315] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:27:59.257 [DEBUG] [Thread-129315] [transport.py] [_log()] client lang: <none>
2025-12-31T14:27:59.257 [DEBUG] [Thread-129315] [transport.py] [_log()] server lang: <none>
2025-12-31T14:27:59.257 [DEBUG] [Thread-129315] [transport.py] [_log()] kex follows: False
2025-12-31T14:27:59.257 [DEBUG] [Thread-129315] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:27:59.257 [DEBUG] [Thread-129315] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:27:59.257 [DEBUG] [Thread-129315] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:27:59.257 [DEBUG] [Thread-129315] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:27:59.257 [DEBUG] [Thread-129315] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:27:59.257 [DEBUG] [Thread-129315] [transport.py] [_log()] Compression: none
2025-12-31T14:27:59.258 [DEBUG] [Thread-129315] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:27:59.314 [DEBUG] [Thread-129315] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:27:59.315 [DEBUG] [Thread-129315] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:27:59.315 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T14:27:59.316 [DEBUG] [Thread-129315] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T14:27:59.317 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:27:59.370 [DEBUG] [Thread-129315] [transport.py] [_log()] userauth is OK
2025-12-31T14:27:59.371 [DEBUG] [Thread-129315] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:27:59.371 [DEBUG] [Thread-129315] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:27:59.371 [DEBUG] [Thread-129315] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T14:27:59.371 [DEBUG] [Thread-129315] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:27:59.389 [INFO] [Thread-129315] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:27:59.389 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T14:27:59.390 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:28:00.227 [DEBUG] [Thread-129315] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:28:00.228 [DEBUG] [Thread-129315] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:28:00.275 [DEBUG] [Thread-129315] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:28:00.276 [DEBUG] [Thread-129315] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:28:00.284 [DEBUG] [Thread-129315] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:28:00.293 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:28:00.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T14:28:00.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T14:28:00.311 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:28:00.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:28:00.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:28:00.320 [DEBUG] [Thread-129315] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:28:01.285 [DEBUG] [Thread-129317 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:28:16.340 [DEBUG] [Thread-129318 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:28:18.517 [DEBUG] [Thread-129319 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:28:30.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T14:28:30.341 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T14:28:30.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T14:28:31.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 14, 28, 19), 32.79, 11.03, 0.0, 29.73, 26.76, 0, 0, 0, 2, 0, 0),)
2025-12-31T14:28:31.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 14:28:19
2025-12-31T14:28:31.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T14:28:31.369 [DEBUG] [Thread-129320] [transport.py] [_log()] starting thread (client mode): 0xb95f2e00
2025-12-31T14:28:31.369 [DEBUG] [Thread-129320] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:28:31.372 [DEBUG] [Thread-129321 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:28:31.390 [DEBUG] [Thread-129320] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T14:28:31.390 [INFO] [Thread-129320] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T14:28:31.391 [DEBUG] [Thread-129320] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:28:31.391 [DEBUG] [Thread-129320] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T14:28:31.391 [DEBUG] [Thread-129320] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:28:31.391 [DEBUG] [Thread-129320] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:28:31.391 [DEBUG] [Thread-129320] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:28:31.391 [DEBUG] [Thread-129320] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:28:31.391 [DEBUG] [Thread-129320] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:28:31.391 [DEBUG] [Thread-129320] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:28:31.392 [DEBUG] [Thread-129320] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:28:31.392 [DEBUG] [Thread-129320] [transport.py] [_log()] client lang: <none>
2025-12-31T14:28:31.392 [DEBUG] [Thread-129320] [transport.py] [_log()] server lang: <none>
2025-12-31T14:28:31.392 [DEBUG] [Thread-129320] [transport.py] [_log()] kex follows: False
2025-12-31T14:28:31.392 [DEBUG] [Thread-129320] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:28:31.392 [DEBUG] [Thread-129320] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:28:31.392 [DEBUG] [Thread-129320] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:28:31.392 [DEBUG] [Thread-129320] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:28:31.392 [DEBUG] [Thread-129320] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:28:31.392 [DEBUG] [Thread-129320] [transport.py] [_log()] Compression: none
2025-12-31T14:28:31.392 [DEBUG] [Thread-129320] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:28:31.404 [DEBUG] [Thread-129320] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:28:31.404 [DEBUG] [Thread-129320] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:28:31.404 [DEBUG] [Thread-129320] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T14:28:31.404 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T14:28:31.404 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:28:31.405 [DEBUG] [Thread-129320] [transport.py] [_log()] userauth is OK
2025-12-31T14:28:31.405 [DEBUG] [Thread-129320] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:28:31.405 [DEBUG] [Thread-129320] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:28:31.405 [DEBUG] [Thread-129320] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T14:28:31.405 [DEBUG] [Thread-129320] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:28:31.414 [INFO] [Thread-129320] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:28:31.414 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:28:32.212 [DEBUG] [Thread-129320] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:28:32.212 [DEBUG] [Thread-129320] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:28:32.212 [DEBUG] [Thread-129320] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T14:28:32.253 [DEBUG] [Thread-129320] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:28:32.253 [DEBUG] [Thread-129320] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:28:32.254 [DEBUG] [Thread-129320] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:28:32.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:28:32.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T14:28:32.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T14:28:32.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T14:28:32.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:28:32.270 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T14:28:32.270 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:28:32.270 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:28:32.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T14:28:32.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.519239 -999.00  +26.30  23.45     17   -0.50 1 2 1 1 1   888    0 28.58 -1.74 ----- 26.4 23.4 284.0 32.1 32.5 -22.2 32.2 -20.5 32.1 -24.7 32.9 -20.8
2025-12-31T14:28:32.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T14:28:32.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T14:28:32.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.519239
2025-12-31T14:28:32.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T14:28:32.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T14:28:32.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T14:28:32.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T14:28:32.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T14:28:32.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T14:28:19', tmtdew=32.79, humidity=11.03, cloud=0.0, wind=29.73, temperature=26.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T12:27:42.250', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T14:28:32.272 [DEBUG] [Thread-129320] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:28:32.345 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T14:28:32.357 [DEBUG] [Thread-129324] [transport.py] [_log()] starting thread (client mode): 0xb6bb9990
2025-12-31T14:28:32.357 [DEBUG] [Thread-129324] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:28:32.373 [DEBUG] [Thread-129324] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T14:28:32.373 [INFO] [Thread-129324] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T14:28:32.380 [DEBUG] [Thread-129324] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:28:32.380 [DEBUG] [Thread-129324] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T14:28:32.381 [DEBUG] [Thread-129324] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:28:32.381 [DEBUG] [Thread-129324] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:28:32.381 [DEBUG] [Thread-129324] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:28:32.381 [DEBUG] [Thread-129324] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:28:32.381 [DEBUG] [Thread-129324] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:28:32.381 [DEBUG] [Thread-129324] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:28:32.381 [DEBUG] [Thread-129324] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:28:32.381 [DEBUG] [Thread-129324] [transport.py] [_log()] client lang: <none>
2025-12-31T14:28:32.381 [DEBUG] [Thread-129324] [transport.py] [_log()] server lang: <none>
2025-12-31T14:28:32.381 [DEBUG] [Thread-129324] [transport.py] [_log()] kex follows: False
2025-12-31T14:28:32.381 [DEBUG] [Thread-129324] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:28:32.381 [DEBUG] [Thread-129324] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:28:32.381 [DEBUG] [Thread-129324] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:28:32.381 [DEBUG] [Thread-129324] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:28:32.381 [DEBUG] [Thread-129324] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:28:32.381 [DEBUG] [Thread-129324] [transport.py] [_log()] Compression: none
2025-12-31T14:28:32.381 [DEBUG] [Thread-129324] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:28:32.441 [DEBUG] [Thread-129324] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:28:32.441 [DEBUG] [Thread-129324] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:28:32.442 [DEBUG] [Thread-129324] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T14:28:32.442 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T14:28:32.442 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:28:32.498 [DEBUG] [Thread-129324] [transport.py] [_log()] userauth is OK
2025-12-31T14:28:32.498 [DEBUG] [Thread-129324] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:28:32.498 [DEBUG] [Thread-129324] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:28:32.498 [DEBUG] [Thread-129324] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T14:28:32.498 [DEBUG] [Thread-129324] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:28:32.513 [INFO] [Thread-129324] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:28:32.513 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T14:28:32.514 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:28:33.356 [DEBUG] [Thread-129324] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:28:33.356 [DEBUG] [Thread-129324] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:28:33.404 [DEBUG] [Thread-129324] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:28:33.404 [DEBUG] [Thread-129324] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:28:33.412 [DEBUG] [Thread-129324] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:28:33.420 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:28:33.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T14:28:33.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T14:28:33.437 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:28:33.437 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:28:33.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:28:33.444 [DEBUG] [Thread-129324] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:28:46.404 [DEBUG] [Thread-129326 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:28:59.251 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:28:59.252 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:29:01.451 [DEBUG] [Thread-129327 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:29:03.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T14:29:03.468 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T14:29:03.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T14:29:04.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 14, 28, 52), 32.0, 11.83, 0.0, 23.86, 26.44, 0, 0, 0, 2, 0, 0),)
2025-12-31T14:29:04.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 14:28:52
2025-12-31T14:29:04.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T14:29:04.476 [DEBUG] [Thread-129328] [transport.py] [_log()] starting thread (client mode): 0xbbfce800
2025-12-31T14:29:04.476 [DEBUG] [Thread-129328] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:29:04.497 [DEBUG] [Thread-129328] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T14:29:04.498 [INFO] [Thread-129328] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T14:29:04.501 [DEBUG] [Thread-129328] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:29:04.501 [DEBUG] [Thread-129328] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T14:29:04.501 [DEBUG] [Thread-129328] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:29:04.501 [DEBUG] [Thread-129328] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:29:04.501 [DEBUG] [Thread-129328] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:29:04.501 [DEBUG] [Thread-129328] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:29:04.501 [DEBUG] [Thread-129328] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:29:04.501 [DEBUG] [Thread-129328] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:29:04.501 [DEBUG] [Thread-129328] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:29:04.502 [DEBUG] [Thread-129328] [transport.py] [_log()] client lang: <none>
2025-12-31T14:29:04.502 [DEBUG] [Thread-129328] [transport.py] [_log()] server lang: <none>
2025-12-31T14:29:04.502 [DEBUG] [Thread-129328] [transport.py] [_log()] kex follows: False
2025-12-31T14:29:04.502 [DEBUG] [Thread-129328] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:29:04.502 [DEBUG] [Thread-129328] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:29:04.502 [DEBUG] [Thread-129328] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:29:04.502 [DEBUG] [Thread-129328] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:29:04.502 [DEBUG] [Thread-129328] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:29:04.502 [DEBUG] [Thread-129328] [transport.py] [_log()] Compression: none
2025-12-31T14:29:04.502 [DEBUG] [Thread-129328] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:29:04.521 [DEBUG] [Thread-129328] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:29:04.522 [DEBUG] [Thread-129328] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:29:04.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T14:29:04.524 [DEBUG] [Thread-129328] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T14:29:04.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:29:04.526 [DEBUG] [Thread-129328] [transport.py] [_log()] userauth is OK
2025-12-31T14:29:04.526 [DEBUG] [Thread-129328] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:29:04.526 [DEBUG] [Thread-129328] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:29:04.526 [DEBUG] [Thread-129328] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T14:29:04.526 [DEBUG] [Thread-129328] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:29:04.551 [INFO] [Thread-129328] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:29:04.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:29:05.156 [DEBUG] [Thread-129328] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:29:05.157 [DEBUG] [Thread-129328] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:29:05.157 [DEBUG] [Thread-129328] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T14:29:05.198 [DEBUG] [Thread-129328] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:29:05.198 [DEBUG] [Thread-129328] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:29:05.202 [DEBUG] [Thread-129328] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:29:05.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:29:05.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T14:29:05.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T14:29:05.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T14:29:05.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:29:05.225 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T14:29:05.225 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:29:05.225 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:29:05.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T14:29:05.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.519586 -999.00  +26.00  24.57     17   -0.60 1 2 1 1 1   888    0 28.05 -6.16 ----- 23.0 24.6 269.2 28.0 32.6 -25.3 32.4 -20.5 32.2 -21.2 33.0 -24.5
2025-12-31T14:29:05.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T14:29:05.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T14:29:05.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.519586
2025-12-31T14:29:05.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T14:29:05.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T14:29:05.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T14:29:05.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T14:29:05.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T14:29:05.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T14:28:52', tmtdew=32.0, humidity=11.83, cloud=0.0, wind=23.86, temperature=26.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T12:28:12.230', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T14:29:05.228 [DEBUG] [Thread-129328] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:29:05.311 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T14:29:05.324 [DEBUG] [Thread-129331] [transport.py] [_log()] starting thread (client mode): 0xb95f18d0
2025-12-31T14:29:05.324 [DEBUG] [Thread-129331] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:29:05.339 [DEBUG] [Thread-129331] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T14:29:05.339 [INFO] [Thread-129331] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T14:29:05.347 [DEBUG] [Thread-129331] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:29:05.347 [DEBUG] [Thread-129331] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T14:29:05.347 [DEBUG] [Thread-129331] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:29:05.347 [DEBUG] [Thread-129331] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:29:05.347 [DEBUG] [Thread-129331] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:29:05.347 [DEBUG] [Thread-129331] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:29:05.347 [DEBUG] [Thread-129331] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:29:05.347 [DEBUG] [Thread-129331] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:29:05.347 [DEBUG] [Thread-129331] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:29:05.347 [DEBUG] [Thread-129331] [transport.py] [_log()] client lang: <none>
2025-12-31T14:29:05.347 [DEBUG] [Thread-129331] [transport.py] [_log()] server lang: <none>
2025-12-31T14:29:05.347 [DEBUG] [Thread-129331] [transport.py] [_log()] kex follows: False
2025-12-31T14:29:05.347 [DEBUG] [Thread-129331] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:29:05.347 [DEBUG] [Thread-129331] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:29:05.347 [DEBUG] [Thread-129331] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:29:05.347 [DEBUG] [Thread-129331] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:29:05.347 [DEBUG] [Thread-129331] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:29:05.347 [DEBUG] [Thread-129331] [transport.py] [_log()] Compression: none
2025-12-31T14:29:05.347 [DEBUG] [Thread-129331] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:29:05.411 [DEBUG] [Thread-129331] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:29:05.411 [DEBUG] [Thread-129331] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:29:05.412 [DEBUG] [Thread-129331] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T14:29:05.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T14:29:05.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:29:05.470 [DEBUG] [Thread-129331] [transport.py] [_log()] userauth is OK
2025-12-31T14:29:05.470 [DEBUG] [Thread-129331] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:29:05.470 [DEBUG] [Thread-129331] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:29:05.470 [DEBUG] [Thread-129331] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T14:29:05.470 [DEBUG] [Thread-129331] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:29:05.491 [INFO] [Thread-129331] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:29:05.491 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T14:29:05.491 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:29:06.326 [DEBUG] [Thread-129331] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:29:06.326 [DEBUG] [Thread-129331] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:29:06.374 [DEBUG] [Thread-129331] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:29:06.374 [DEBUG] [Thread-129331] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:29:06.383 [DEBUG] [Thread-129331] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:29:06.393 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:29:06.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-12-31T14:29:06.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-12-31T14:29:06.412 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:29:06.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:29:06.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:29:06.423 [DEBUG] [Thread-129331] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:29:16.482 [DEBUG] [Thread-129333 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:29:18.567 [DEBUG] [Thread-129334 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:29:31.537 [DEBUG] [Thread-129335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:29:36.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T14:29:36.443 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T14:29:36.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-12-31T14:29:37.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 14, 29, 24), 32.0, 11.83, 0.0, 26.52, 26.47, 0, 0, 0, 2, 0, 0),)
2025-12-31T14:29:37.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 14:29:24
2025-12-31T14:29:37.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T14:29:37.449 [DEBUG] [Thread-129336] [transport.py] [_log()] starting thread (client mode): 0xb95b3cd0
2025-12-31T14:29:37.449 [DEBUG] [Thread-129336] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:29:37.470 [DEBUG] [Thread-129336] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T14:29:37.471 [INFO] [Thread-129336] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T14:29:37.472 [DEBUG] [Thread-129336] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:29:37.472 [DEBUG] [Thread-129336] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T14:29:37.472 [DEBUG] [Thread-129336] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:29:37.472 [DEBUG] [Thread-129336] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:29:37.472 [DEBUG] [Thread-129336] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:29:37.472 [DEBUG] [Thread-129336] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:29:37.472 [DEBUG] [Thread-129336] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:29:37.472 [DEBUG] [Thread-129336] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:29:37.472 [DEBUG] [Thread-129336] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:29:37.472 [DEBUG] [Thread-129336] [transport.py] [_log()] client lang: <none>
2025-12-31T14:29:37.472 [DEBUG] [Thread-129336] [transport.py] [_log()] server lang: <none>
2025-12-31T14:29:37.473 [DEBUG] [Thread-129336] [transport.py] [_log()] kex follows: False
2025-12-31T14:29:37.473 [DEBUG] [Thread-129336] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:29:37.473 [DEBUG] [Thread-129336] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:29:37.473 [DEBUG] [Thread-129336] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:29:37.473 [DEBUG] [Thread-129336] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:29:37.473 [DEBUG] [Thread-129336] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:29:37.473 [DEBUG] [Thread-129336] [transport.py] [_log()] Compression: none
2025-12-31T14:29:37.473 [DEBUG] [Thread-129336] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:29:37.484 [DEBUG] [Thread-129336] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:29:37.484 [DEBUG] [Thread-129336] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:29:37.485 [DEBUG] [Thread-129336] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T14:29:37.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T14:29:37.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:29:37.488 [DEBUG] [Thread-129336] [transport.py] [_log()] userauth is OK
2025-12-31T14:29:37.488 [DEBUG] [Thread-129336] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:29:37.488 [DEBUG] [Thread-129336] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:29:37.488 [DEBUG] [Thread-129336] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T14:29:37.488 [DEBUG] [Thread-129336] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:29:37.506 [INFO] [Thread-129336] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:29:37.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:29:38.231 [DEBUG] [Thread-129336] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:29:38.232 [DEBUG] [Thread-129336] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:29:38.232 [DEBUG] [Thread-129336] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T14:29:38.273 [DEBUG] [Thread-129336] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:29:38.273 [DEBUG] [Thread-129336] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:29:38.278 [DEBUG] [Thread-129336] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:29:38.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:29:38.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T14:29:38.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T14:29:38.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T14:29:38.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:29:38.303 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T14:29:38.304 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:29:38.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:29:38.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T14:29:38.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.519934 -999.00  +25.80  24.21     17   -0.80 1 2 1 1 1   888    0 27.75 -10.99 ----- 21.4 24.2 279.2 31.1 32.4 -24.7 32.4 -21.4 32.0 -20.3 32.7 -23.9
2025-12-31T14:29:38.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T14:29:38.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T14:29:38.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.519934
2025-12-31T14:29:38.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T14:29:38.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T14:29:38.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T14:29:38.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T14:29:38.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T14:29:38.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T14:29:24', tmtdew=32.0, humidity=11.83, cloud=0.0, wind=26.52, temperature=26.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T12:28:42.298', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T14:29:38.306 [DEBUG] [Thread-129336] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:29:38.390 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T14:29:38.401 [DEBUG] [Thread-129339] [transport.py] [_log()] starting thread (client mode): 0xb95b1b10
2025-12-31T14:29:38.401 [DEBUG] [Thread-129339] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:29:38.417 [DEBUG] [Thread-129339] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T14:29:38.417 [INFO] [Thread-129339] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T14:29:38.425 [DEBUG] [Thread-129339] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:29:38.425 [DEBUG] [Thread-129339] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T14:29:38.425 [DEBUG] [Thread-129339] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:29:38.425 [DEBUG] [Thread-129339] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:29:38.425 [DEBUG] [Thread-129339] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:29:38.425 [DEBUG] [Thread-129339] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:29:38.425 [DEBUG] [Thread-129339] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:29:38.425 [DEBUG] [Thread-129339] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:29:38.425 [DEBUG] [Thread-129339] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:29:38.425 [DEBUG] [Thread-129339] [transport.py] [_log()] client lang: <none>
2025-12-31T14:29:38.425 [DEBUG] [Thread-129339] [transport.py] [_log()] server lang: <none>
2025-12-31T14:29:38.425 [DEBUG] [Thread-129339] [transport.py] [_log()] kex follows: False
2025-12-31T14:29:38.425 [DEBUG] [Thread-129339] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:29:38.425 [DEBUG] [Thread-129339] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:29:38.426 [DEBUG] [Thread-129339] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:29:38.426 [DEBUG] [Thread-129339] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:29:38.426 [DEBUG] [Thread-129339] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:29:38.426 [DEBUG] [Thread-129339] [transport.py] [_log()] Compression: none
2025-12-31T14:29:38.426 [DEBUG] [Thread-129339] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:29:38.483 [DEBUG] [Thread-129339] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:29:38.484 [DEBUG] [Thread-129339] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:29:38.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T14:29:38.485 [DEBUG] [Thread-129339] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T14:29:38.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:29:38.540 [DEBUG] [Thread-129339] [transport.py] [_log()] userauth is OK
2025-12-31T14:29:38.540 [DEBUG] [Thread-129339] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:29:38.540 [DEBUG] [Thread-129339] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:29:38.540 [DEBUG] [Thread-129339] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T14:29:38.540 [DEBUG] [Thread-129339] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:29:38.564 [INFO] [Thread-129339] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:29:38.565 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T14:29:38.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:29:39.403 [DEBUG] [Thread-129339] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:29:39.403 [DEBUG] [Thread-129339] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:29:39.451 [DEBUG] [Thread-129339] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:29:39.451 [DEBUG] [Thread-129339] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:29:39.461 [DEBUG] [Thread-129339] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:29:39.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:29:39.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T14:29:39.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T14:29:39.488 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:29:39.489 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:29:39.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:29:39.497 [DEBUG] [Thread-129339] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:29:46.573 [DEBUG] [Thread-129341 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:29:59.394 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:29:59.395 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:30:01.622 [DEBUG] [Thread-129342 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:30:09.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T14:30:09.494 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T14:30:09.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T14:30:10.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 14, 29, 56), 33.06, 11.16, 0.0, 20.96, 27.12, 0, 0, 0, 2, 0, 0),)
2025-12-31T14:30:10.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 14:29:56
2025-12-31T14:30:10.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T14:30:10.471 [DEBUG] [Thread-129343] [transport.py] [_log()] starting thread (client mode): 0xb95b12a0
2025-12-31T14:30:10.471 [DEBUG] [Thread-129343] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:30:10.491 [DEBUG] [Thread-129343] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T14:30:10.492 [INFO] [Thread-129343] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T14:30:10.495 [DEBUG] [Thread-129343] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:30:10.495 [DEBUG] [Thread-129343] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T14:30:10.495 [DEBUG] [Thread-129343] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:30:10.495 [DEBUG] [Thread-129343] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:30:10.495 [DEBUG] [Thread-129343] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:30:10.495 [DEBUG] [Thread-129343] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:30:10.495 [DEBUG] [Thread-129343] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:30:10.495 [DEBUG] [Thread-129343] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:30:10.495 [DEBUG] [Thread-129343] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:30:10.495 [DEBUG] [Thread-129343] [transport.py] [_log()] client lang: <none>
2025-12-31T14:30:10.495 [DEBUG] [Thread-129343] [transport.py] [_log()] server lang: <none>
2025-12-31T14:30:10.496 [DEBUG] [Thread-129343] [transport.py] [_log()] kex follows: False
2025-12-31T14:30:10.496 [DEBUG] [Thread-129343] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:30:10.496 [DEBUG] [Thread-129343] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:30:10.496 [DEBUG] [Thread-129343] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:30:10.496 [DEBUG] [Thread-129343] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:30:10.496 [DEBUG] [Thread-129343] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:30:10.496 [DEBUG] [Thread-129343] [transport.py] [_log()] Compression: none
2025-12-31T14:30:10.496 [DEBUG] [Thread-129343] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:30:10.514 [DEBUG] [Thread-129343] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:30:10.515 [DEBUG] [Thread-129343] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:30:10.516 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T14:30:10.517 [DEBUG] [Thread-129343] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T14:30:10.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:30:10.519 [DEBUG] [Thread-129343] [transport.py] [_log()] userauth is OK
2025-12-31T14:30:10.519 [DEBUG] [Thread-129343] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:30:10.519 [DEBUG] [Thread-129343] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:30:10.519 [DEBUG] [Thread-129343] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T14:30:10.519 [DEBUG] [Thread-129343] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:30:10.543 [INFO] [Thread-129343] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:30:10.543 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:30:13.814 [DEBUG] [Thread-129343] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:30:13.814 [DEBUG] [Thread-129343] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:30:13.815 [DEBUG] [Thread-129343] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T14:30:13.855 [DEBUG] [Thread-129343] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:30:13.856 [DEBUG] [Thread-129343] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:30:13.859 [DEBUG] [Thread-129343] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:30:13.921 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:30:13.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T14:30:13.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T14:30:13.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T14:30:13.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:30:13.941 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T14:30:13.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:30:13.941 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:30:13.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T14:30:13.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.520281 -999.00  +25.70  14.41     17   -1.00 1 2 1 1 1   888    0 27.72 -17.67 ----- 15.7 14.4 278.2 26.3 32.6 -22.8 32.3 -21.1 31.9 -19.9 32.9 -22.0
2025-12-31T14:30:13.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T14:30:13.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T14:30:13.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.520281
2025-12-31T14:30:13.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T14:30:13.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T14:30:13.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T14:30:13.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T14:30:13.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T14:30:13.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T14:29:56', tmtdew=33.06, humidity=11.16, cloud=0.0, wind=20.96, temperature=27.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T12:29:12.278', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T14:30:13.944 [DEBUG] [Thread-129343] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:30:14.024 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T14:30:14.036 [DEBUG] [Thread-129346] [transport.py] [_log()] starting thread (client mode): 0xb95f3130
2025-12-31T14:30:14.036 [DEBUG] [Thread-129346] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:30:14.051 [DEBUG] [Thread-129346] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T14:30:14.051 [INFO] [Thread-129346] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T14:30:14.058 [DEBUG] [Thread-129346] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:30:14.059 [DEBUG] [Thread-129346] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T14:30:14.059 [DEBUG] [Thread-129346] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:30:14.059 [DEBUG] [Thread-129346] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:30:14.059 [DEBUG] [Thread-129346] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:30:14.059 [DEBUG] [Thread-129346] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:30:14.059 [DEBUG] [Thread-129346] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:30:14.059 [DEBUG] [Thread-129346] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:30:14.059 [DEBUG] [Thread-129346] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:30:14.059 [DEBUG] [Thread-129346] [transport.py] [_log()] client lang: <none>
2025-12-31T14:30:14.059 [DEBUG] [Thread-129346] [transport.py] [_log()] server lang: <none>
2025-12-31T14:30:14.060 [DEBUG] [Thread-129346] [transport.py] [_log()] kex follows: False
2025-12-31T14:30:14.060 [DEBUG] [Thread-129346] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:30:14.060 [DEBUG] [Thread-129346] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:30:14.060 [DEBUG] [Thread-129346] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:30:14.060 [DEBUG] [Thread-129346] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:30:14.060 [DEBUG] [Thread-129346] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:30:14.060 [DEBUG] [Thread-129346] [transport.py] [_log()] Compression: none
2025-12-31T14:30:14.060 [DEBUG] [Thread-129346] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:30:14.119 [DEBUG] [Thread-129346] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:30:14.120 [DEBUG] [Thread-129346] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:30:14.120 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T14:30:14.121 [DEBUG] [Thread-129346] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T14:30:14.121 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:30:14.176 [DEBUG] [Thread-129346] [transport.py] [_log()] userauth is OK
2025-12-31T14:30:14.176 [DEBUG] [Thread-129346] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:30:14.176 [DEBUG] [Thread-129346] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:30:14.176 [DEBUG] [Thread-129346] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T14:30:14.176 [DEBUG] [Thread-129346] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:30:14.200 [INFO] [Thread-129346] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:30:14.201 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T14:30:14.201 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:30:15.026 [DEBUG] [Thread-129346] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:30:15.026 [DEBUG] [Thread-129346] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:30:15.074 [DEBUG] [Thread-129346] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:30:15.074 [DEBUG] [Thread-129346] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:30:15.083 [DEBUG] [Thread-129346] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:30:15.092 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:30:15.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T14:30:15.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T14:30:15.111 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:30:15.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:30:15.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:30:15.120 [DEBUG] [Thread-129346] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:30:16.659 [DEBUG] [Thread-129348 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:30:18.618 [DEBUG] [Thread-129349 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:30:31.719 [DEBUG] [Thread-129350 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:30:45.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T14:30:45.116 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T14:30:45.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T14:30:45.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 14, 30, 28), 32.63, 11.51, 0.0, 25.73, 27.12, 0, 0, 0, 2, 0, 0),)
2025-12-31T14:30:45.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 14:30:28
2025-12-31T14:30:45.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T14:30:46.112 [DEBUG] [Thread-129351] [transport.py] [_log()] starting thread (client mode): 0xb6b61480
2025-12-31T14:30:46.112 [DEBUG] [Thread-129351] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:30:46.134 [DEBUG] [Thread-129351] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T14:30:46.134 [INFO] [Thread-129351] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T14:30:46.137 [DEBUG] [Thread-129351] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:30:46.137 [DEBUG] [Thread-129351] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T14:30:46.137 [DEBUG] [Thread-129351] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:30:46.137 [DEBUG] [Thread-129351] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:30:46.137 [DEBUG] [Thread-129351] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:30:46.137 [DEBUG] [Thread-129351] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:30:46.137 [DEBUG] [Thread-129351] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:30:46.137 [DEBUG] [Thread-129351] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:30:46.137 [DEBUG] [Thread-129351] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:30:46.137 [DEBUG] [Thread-129351] [transport.py] [_log()] client lang: <none>
2025-12-31T14:30:46.137 [DEBUG] [Thread-129351] [transport.py] [_log()] server lang: <none>
2025-12-31T14:30:46.137 [DEBUG] [Thread-129351] [transport.py] [_log()] kex follows: False
2025-12-31T14:30:46.137 [DEBUG] [Thread-129351] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:30:46.137 [DEBUG] [Thread-129351] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:30:46.137 [DEBUG] [Thread-129351] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:30:46.137 [DEBUG] [Thread-129351] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:30:46.138 [DEBUG] [Thread-129351] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:30:46.138 [DEBUG] [Thread-129351] [transport.py] [_log()] Compression: none
2025-12-31T14:30:46.138 [DEBUG] [Thread-129351] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:30:46.155 [DEBUG] [Thread-129351] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:30:46.155 [DEBUG] [Thread-129351] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:30:46.156 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T14:30:46.156 [DEBUG] [Thread-129351] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T14:30:46.157 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:30:46.158 [DEBUG] [Thread-129351] [transport.py] [_log()] userauth is OK
2025-12-31T14:30:46.159 [DEBUG] [Thread-129351] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:30:46.159 [DEBUG] [Thread-129351] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:30:46.159 [DEBUG] [Thread-129351] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T14:30:46.159 [DEBUG] [Thread-129351] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:30:46.184 [INFO] [Thread-129351] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:30:46.185 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:30:46.751 [DEBUG] [Thread-129353 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:30:46.821 [DEBUG] [Thread-129351] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:30:46.821 [DEBUG] [Thread-129351] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:30:46.821 [DEBUG] [Thread-129351] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T14:30:46.862 [DEBUG] [Thread-129351] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:30:46.862 [DEBUG] [Thread-129351] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:30:46.866 [DEBUG] [Thread-129351] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:30:46.878 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:30:46.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T14:30:46.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T14:30:46.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T14:30:46.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:30:46.891 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T14:30:46.891 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:30:46.891 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:30:46.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T14:30:46.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.520628 -999.00  +25.60  25.93     17   -0.90 1 2 1 1 1   888    0 27.42 -27.31 ----- 26.7 25.9 295.2 28.8 32.7 -23.3 32.4 -21.0 32.2 -20.5 32.9 -22.3
2025-12-31T14:30:46.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T14:30:46.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T14:30:46.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.520628
2025-12-31T14:30:46.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T14:30:46.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T14:30:46.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T14:30:46.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T14:30:46.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T14:30:46.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T14:30:28', tmtdew=32.63, humidity=11.51, cloud=0.0, wind=25.73, temperature=27.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T12:29:42.259', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T14:30:46.894 [DEBUG] [Thread-129351] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:30:46.978 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T14:30:46.988 [DEBUG] [Thread-129355] [transport.py] [_log()] starting thread (client mode): 0xb6b62350
2025-12-31T14:30:46.988 [DEBUG] [Thread-129355] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:30:47.008 [DEBUG] [Thread-129355] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T14:30:47.008 [INFO] [Thread-129355] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T14:30:47.015 [DEBUG] [Thread-129355] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:30:47.016 [DEBUG] [Thread-129355] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T14:30:47.016 [DEBUG] [Thread-129355] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:30:47.016 [DEBUG] [Thread-129355] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:30:47.016 [DEBUG] [Thread-129355] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:30:47.016 [DEBUG] [Thread-129355] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:30:47.016 [DEBUG] [Thread-129355] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:30:47.017 [DEBUG] [Thread-129355] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:30:47.017 [DEBUG] [Thread-129355] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:30:47.017 [DEBUG] [Thread-129355] [transport.py] [_log()] client lang: <none>
2025-12-31T14:30:47.017 [DEBUG] [Thread-129355] [transport.py] [_log()] server lang: <none>
2025-12-31T14:30:47.017 [DEBUG] [Thread-129355] [transport.py] [_log()] kex follows: False
2025-12-31T14:30:47.017 [DEBUG] [Thread-129355] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:30:47.017 [DEBUG] [Thread-129355] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:30:47.017 [DEBUG] [Thread-129355] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:30:47.018 [DEBUG] [Thread-129355] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:30:47.018 [DEBUG] [Thread-129355] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:30:47.018 [DEBUG] [Thread-129355] [transport.py] [_log()] Compression: none
2025-12-31T14:30:47.018 [DEBUG] [Thread-129355] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:30:47.075 [DEBUG] [Thread-129355] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:30:47.076 [DEBUG] [Thread-129355] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:30:47.076 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T14:30:47.077 [DEBUG] [Thread-129355] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T14:30:47.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:30:47.136 [DEBUG] [Thread-129355] [transport.py] [_log()] userauth is OK
2025-12-31T14:30:47.136 [DEBUG] [Thread-129355] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:30:47.136 [DEBUG] [Thread-129355] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:30:47.136 [DEBUG] [Thread-129355] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T14:30:47.136 [DEBUG] [Thread-129355] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:30:47.155 [INFO] [Thread-129355] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:30:47.156 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T14:30:47.156 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:30:48.005 [DEBUG] [Thread-129355] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:30:48.005 [DEBUG] [Thread-129355] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:30:48.053 [DEBUG] [Thread-129355] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:30:48.053 [DEBUG] [Thread-129355] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:30:48.062 [DEBUG] [Thread-129355] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:30:48.071 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:30:48.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T14:30:48.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T14:30:48.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:30:48.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:30:48.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:30:48.097 [DEBUG] [Thread-129355] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:30:59.542 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:30:59.544 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:31:01.790 [DEBUG] [Thread-129357 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:31:16.840 [DEBUG] [Thread-129358 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:31:18.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T14:31:18.119 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T14:31:18.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T14:31:18.666 [DEBUG] [Thread-129359 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:31:18.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 14, 30, 28), 32.38, 11.51, 0.0, 22.13, 26.77, 0, 0, 0, 2, 0, 0),)
2025-12-31T14:31:18.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 14:30:28
2025-12-31T14:31:18.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T14:31:19.100 [DEBUG] [Thread-129360] [transport.py] [_log()] starting thread (client mode): 0xbbfcde40
2025-12-31T14:31:19.100 [DEBUG] [Thread-129360] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:31:19.120 [DEBUG] [Thread-129360] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T14:31:19.121 [INFO] [Thread-129360] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T14:31:19.124 [DEBUG] [Thread-129360] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:31:19.124 [DEBUG] [Thread-129360] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T14:31:19.124 [DEBUG] [Thread-129360] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:31:19.124 [DEBUG] [Thread-129360] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:31:19.124 [DEBUG] [Thread-129360] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:31:19.124 [DEBUG] [Thread-129360] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:31:19.124 [DEBUG] [Thread-129360] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:31:19.124 [DEBUG] [Thread-129360] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:31:19.124 [DEBUG] [Thread-129360] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:31:19.124 [DEBUG] [Thread-129360] [transport.py] [_log()] client lang: <none>
2025-12-31T14:31:19.124 [DEBUG] [Thread-129360] [transport.py] [_log()] server lang: <none>
2025-12-31T14:31:19.124 [DEBUG] [Thread-129360] [transport.py] [_log()] kex follows: False
2025-12-31T14:31:19.124 [DEBUG] [Thread-129360] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:31:19.124 [DEBUG] [Thread-129360] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:31:19.124 [DEBUG] [Thread-129360] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:31:19.125 [DEBUG] [Thread-129360] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:31:19.125 [DEBUG] [Thread-129360] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:31:19.125 [DEBUG] [Thread-129360] [transport.py] [_log()] Compression: none
2025-12-31T14:31:19.125 [DEBUG] [Thread-129360] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:31:19.143 [DEBUG] [Thread-129360] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:31:19.144 [DEBUG] [Thread-129360] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:31:19.144 [DEBUG] [Thread-129360] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T14:31:19.144 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T14:31:19.145 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:31:19.146 [DEBUG] [Thread-129360] [transport.py] [_log()] userauth is OK
2025-12-31T14:31:19.147 [DEBUG] [Thread-129360] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:31:19.147 [DEBUG] [Thread-129360] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:31:19.147 [DEBUG] [Thread-129360] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T14:31:19.147 [DEBUG] [Thread-129360] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:31:19.172 [INFO] [Thread-129360] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:31:19.173 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:31:19.925 [DEBUG] [Thread-129360] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:31:19.926 [DEBUG] [Thread-129360] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:31:19.926 [DEBUG] [Thread-129360] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T14:31:19.966 [DEBUG] [Thread-129360] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:31:19.966 [DEBUG] [Thread-129360] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:31:19.970 [DEBUG] [Thread-129360] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:31:19.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:31:19.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T14:31:19.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T14:31:19.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T14:31:19.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:31:19.987 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T14:31:19.988 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:31:19.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:31:19.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T14:31:19.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.521323 -999.00  +26.20  19.36     17   -0.30 1 2 1 1 1   888    0 26.87 -42.51 ----- 18.1 19.4 324.2 23.5 33.0 -22.0 32.6 -20.6 32.5 -19.8 33.1 -21.7
2025-12-31T14:31:19.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T14:31:19.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T14:31:19.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.521323
2025-12-31T14:31:19.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T14:31:19.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T14:31:19.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T14:31:19.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T14:31:19.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T14:31:19.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T14:30:28', tmtdew=32.38, humidity=11.51, cloud=0.0, wind=22.13, temperature=26.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T12:30:42.307', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T14:31:19.990 [DEBUG] [Thread-129360] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:31:20.073 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T14:31:20.085 [DEBUG] [Thread-129363] [transport.py] [_log()] starting thread (client mode): 0xb6b29420
2025-12-31T14:31:20.085 [DEBUG] [Thread-129363] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:31:20.099 [DEBUG] [Thread-129363] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T14:31:20.100 [INFO] [Thread-129363] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T14:31:20.111 [DEBUG] [Thread-129363] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:31:20.111 [DEBUG] [Thread-129363] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T14:31:20.111 [DEBUG] [Thread-129363] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:31:20.111 [DEBUG] [Thread-129363] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:31:20.112 [DEBUG] [Thread-129363] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:31:20.112 [DEBUG] [Thread-129363] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:31:20.112 [DEBUG] [Thread-129363] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:31:20.112 [DEBUG] [Thread-129363] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:31:20.112 [DEBUG] [Thread-129363] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:31:20.112 [DEBUG] [Thread-129363] [transport.py] [_log()] client lang: <none>
2025-12-31T14:31:20.112 [DEBUG] [Thread-129363] [transport.py] [_log()] server lang: <none>
2025-12-31T14:31:20.112 [DEBUG] [Thread-129363] [transport.py] [_log()] kex follows: False
2025-12-31T14:31:20.112 [DEBUG] [Thread-129363] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:31:20.113 [DEBUG] [Thread-129363] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:31:20.113 [DEBUG] [Thread-129363] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:31:20.113 [DEBUG] [Thread-129363] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:31:20.113 [DEBUG] [Thread-129363] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:31:20.113 [DEBUG] [Thread-129363] [transport.py] [_log()] Compression: none
2025-12-31T14:31:20.113 [DEBUG] [Thread-129363] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:31:20.165 [DEBUG] [Thread-129363] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:31:20.165 [DEBUG] [Thread-129363] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:31:20.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T14:31:20.167 [DEBUG] [Thread-129363] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T14:31:20.167 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:31:20.220 [DEBUG] [Thread-129363] [transport.py] [_log()] userauth is OK
2025-12-31T14:31:20.221 [DEBUG] [Thread-129363] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:31:20.221 [DEBUG] [Thread-129363] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:31:20.230 [DEBUG] [Thread-129363] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T14:31:20.230 [DEBUG] [Thread-129363] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:31:20.255 [INFO] [Thread-129363] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:31:20.256 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T14:31:20.256 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:31:21.105 [DEBUG] [Thread-129363] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:31:21.106 [DEBUG] [Thread-129363] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:31:21.154 [DEBUG] [Thread-129363] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:31:21.155 [DEBUG] [Thread-129363] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:31:21.164 [DEBUG] [Thread-129363] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:31:21.173 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:31: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-12-31T14:31: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-12-31T14:31:21.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:31:21.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:31:21.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:31:21.200 [DEBUG] [Thread-129363] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:31:31.879 [DEBUG] [Thread-129365 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:31:46.929 [DEBUG] [Thread-129366 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:31:51.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T14:31:51.223 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T14:31: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-12-31T14:31:51.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 14, 31, 32), 32.24, 11.63, 0.0, 18.1, 26.72, 0, 0, 0, 2, 0, 0),)
2025-12-31T14:31:51.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 14:31:32
2025-12-31T14:31:52.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T14:31:52.230 [DEBUG] [Thread-129367] [transport.py] [_log()] starting thread (client mode): 0xb95b19f0
2025-12-31T14:31:52.230 [DEBUG] [Thread-129367] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:31:52.251 [DEBUG] [Thread-129367] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T14:31:52.251 [INFO] [Thread-129367] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T14:31:52.254 [DEBUG] [Thread-129367] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:31:52.254 [DEBUG] [Thread-129367] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T14:31:52.255 [DEBUG] [Thread-129367] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:31:52.255 [DEBUG] [Thread-129367] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:31:52.255 [DEBUG] [Thread-129367] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:31:52.255 [DEBUG] [Thread-129367] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:31:52.255 [DEBUG] [Thread-129367] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:31:52.255 [DEBUG] [Thread-129367] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:31:52.255 [DEBUG] [Thread-129367] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:31:52.255 [DEBUG] [Thread-129367] [transport.py] [_log()] client lang: <none>
2025-12-31T14:31:52.255 [DEBUG] [Thread-129367] [transport.py] [_log()] server lang: <none>
2025-12-31T14:31:52.255 [DEBUG] [Thread-129367] [transport.py] [_log()] kex follows: False
2025-12-31T14:31:52.255 [DEBUG] [Thread-129367] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:31:52.255 [DEBUG] [Thread-129367] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:31:52.255 [DEBUG] [Thread-129367] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:31:52.255 [DEBUG] [Thread-129367] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:31:52.255 [DEBUG] [Thread-129367] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:31:52.255 [DEBUG] [Thread-129367] [transport.py] [_log()] Compression: none
2025-12-31T14:31:52.255 [DEBUG] [Thread-129367] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:31:52.271 [DEBUG] [Thread-129367] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:31:52.271 [DEBUG] [Thread-129367] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:31:52.271 [DEBUG] [Thread-129367] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T14:31:52.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T14:31:52.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:31:52.272 [DEBUG] [Thread-129367] [transport.py] [_log()] userauth is OK
2025-12-31T14:31:52.272 [DEBUG] [Thread-129367] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:31:52.272 [DEBUG] [Thread-129367] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:31:52.272 [DEBUG] [Thread-129367] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T14:31:52.272 [DEBUG] [Thread-129367] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:31:52.291 [INFO] [Thread-129367] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:31:52.291 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:31:52.925 [DEBUG] [Thread-129367] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:31:52.926 [DEBUG] [Thread-129367] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:31:52.926 [DEBUG] [Thread-129367] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T14:31:52.966 [DEBUG] [Thread-129367] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:31:52.966 [DEBUG] [Thread-129367] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:31:52.970 [DEBUG] [Thread-129367] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:31:52.982 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:31:52.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T14:31:52.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T14:31:52.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T14:31:52.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:31:52.993 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T14:31:52.994 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:31:52.994 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:31:52.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T14:31:52.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.521670 -999.00  +26.20  18.11     17   -0.40 1 2 1 1 1   888    0 26.36 -47.77 ----- 17.7 18.1 296.6 26.0 33.1 -23.7 32.7 -22.3 32.8 -20.9 -999.0 -999.0
2025-12-31T14:31:52.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T14:31:52.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T14:31:52.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.521670
2025-12-31T14:31:52.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T14:31:52.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T14:31:52.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T14:31:52.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T14:31:52.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T14:31:52.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T14:31:32', tmtdew=32.24, humidity=11.63, cloud=0.0, wind=18.1, temperature=26.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T12:31:12.288', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T14:31:52.996 [DEBUG] [Thread-129367] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:31:53.075 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T14:31:53.087 [DEBUG] [Thread-129370] [transport.py] [_log()] starting thread (client mode): 0xb6b2a200
2025-12-31T14:31:53.087 [DEBUG] [Thread-129370] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:31:53.103 [DEBUG] [Thread-129370] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T14:31:53.103 [INFO] [Thread-129370] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T14:31:53.111 [DEBUG] [Thread-129370] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:31:53.111 [DEBUG] [Thread-129370] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T14:31:53.112 [DEBUG] [Thread-129370] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:31:53.112 [DEBUG] [Thread-129370] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:31:53.112 [DEBUG] [Thread-129370] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:31:53.112 [DEBUG] [Thread-129370] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:31:53.112 [DEBUG] [Thread-129370] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:31:53.112 [DEBUG] [Thread-129370] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:31:53.112 [DEBUG] [Thread-129370] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:31:53.112 [DEBUG] [Thread-129370] [transport.py] [_log()] client lang: <none>
2025-12-31T14:31:53.112 [DEBUG] [Thread-129370] [transport.py] [_log()] server lang: <none>
2025-12-31T14:31:53.113 [DEBUG] [Thread-129370] [transport.py] [_log()] kex follows: False
2025-12-31T14:31:53.113 [DEBUG] [Thread-129370] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:31:53.113 [DEBUG] [Thread-129370] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:31:53.113 [DEBUG] [Thread-129370] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:31:53.113 [DEBUG] [Thread-129370] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:31:53.113 [DEBUG] [Thread-129370] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:31:53.113 [DEBUG] [Thread-129370] [transport.py] [_log()] Compression: none
2025-12-31T14:31:53.114 [DEBUG] [Thread-129370] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:31:53.168 [DEBUG] [Thread-129370] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:31:53.169 [DEBUG] [Thread-129370] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:31:53.170 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T14:31:53.170 [DEBUG] [Thread-129370] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T14:31:53.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:31:53.225 [DEBUG] [Thread-129370] [transport.py] [_log()] userauth is OK
2025-12-31T14:31:53.225 [DEBUG] [Thread-129370] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:31:53.225 [DEBUG] [Thread-129370] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:31:53.225 [DEBUG] [Thread-129370] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T14:31:53.225 [DEBUG] [Thread-129370] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:31:53.249 [INFO] [Thread-129370] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:31:53.249 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T14:31:53.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:31:54.115 [DEBUG] [Thread-129370] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:31:54.115 [DEBUG] [Thread-129370] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:31:54.163 [DEBUG] [Thread-129370] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:31:54.163 [DEBUG] [Thread-129370] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:31:54.172 [DEBUG] [Thread-129370] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:31:54.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:31:54.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-12-31T14:31:54.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T14:31:54.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:31:54.200 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:31:54.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:31:54.208 [DEBUG] [Thread-129370] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:31:59.684 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:31:59.685 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:32:01.963 [DEBUG] [Thread-129372 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:32:17.018 [DEBUG] [Thread-129373 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:32:18.720 [DEBUG] [Thread-129374 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:32:24.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T14:32:24.228 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T14:32:24.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T14:32:24.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 14, 32, 4), 32.26, 11.61, 0.0, 15.26, 26.74, 0, 0, 0, 2, 0, 0),)
2025-12-31T14:32:24.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 14:32:04
2025-12-31T14:32:25.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T14:32:25.220 [DEBUG] [Thread-129375] [transport.py] [_log()] starting thread (client mode): 0xb6ba3dc0
2025-12-31T14:32:25.220 [DEBUG] [Thread-129375] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:32:25.241 [DEBUG] [Thread-129375] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T14:32:25.241 [INFO] [Thread-129375] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T14:32:25.242 [DEBUG] [Thread-129375] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:32:25.242 [DEBUG] [Thread-129375] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T14:32:25.242 [DEBUG] [Thread-129375] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:32:25.242 [DEBUG] [Thread-129375] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:32:25.242 [DEBUG] [Thread-129375] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:32:25.242 [DEBUG] [Thread-129375] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:32:25.242 [DEBUG] [Thread-129375] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:32:25.243 [DEBUG] [Thread-129375] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:32:25.243 [DEBUG] [Thread-129375] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:32:25.243 [DEBUG] [Thread-129375] [transport.py] [_log()] client lang: <none>
2025-12-31T14:32:25.243 [DEBUG] [Thread-129375] [transport.py] [_log()] server lang: <none>
2025-12-31T14:32:25.243 [DEBUG] [Thread-129375] [transport.py] [_log()] kex follows: False
2025-12-31T14:32:25.243 [DEBUG] [Thread-129375] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:32:25.243 [DEBUG] [Thread-129375] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:32:25.243 [DEBUG] [Thread-129375] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:32:25.243 [DEBUG] [Thread-129375] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:32:25.243 [DEBUG] [Thread-129375] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:32:25.243 [DEBUG] [Thread-129375] [transport.py] [_log()] Compression: none
2025-12-31T14:32:25.243 [DEBUG] [Thread-129375] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:32:25.258 [DEBUG] [Thread-129375] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:32:25.258 [DEBUG] [Thread-129375] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:32:25.258 [DEBUG] [Thread-129375] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T14:32:25.258 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T14:32:25.258 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:32:25.259 [DEBUG] [Thread-129375] [transport.py] [_log()] userauth is OK
2025-12-31T14:32:25.259 [DEBUG] [Thread-129375] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:32:25.259 [DEBUG] [Thread-129375] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:32:25.259 [DEBUG] [Thread-129375] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T14:32:25.259 [DEBUG] [Thread-129375] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:32:25.268 [INFO] [Thread-129375] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:32:25.268 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:32:26.035 [DEBUG] [Thread-129375] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:32:26.035 [DEBUG] [Thread-129375] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:32:26.035 [DEBUG] [Thread-129375] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T14:32:26.075 [DEBUG] [Thread-129375] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:32:26.075 [DEBUG] [Thread-129375] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:32:26.078 [DEBUG] [Thread-129375] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:32:26.088 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:32:26.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T14:32:26.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T14:32:26.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T14:32:26.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:32:26.094 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T14:32:26.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:32:26.094 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:32:26.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T14:32:26.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.522017 -999.00  +26.50  24.13     17   -0.20 1 2 1 1 1   888    0 26.31 -60.07 ----- 32.6 24.1 307.0 34.0 33.1 -23.2 32.8 -22.1 32.8 -23.6 33.4 -23.5
2025-12-31T14:32:26.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T14:32:26.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T14:32:26.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.522017
2025-12-31T14:32:26.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T14:32:26.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T14:32:26.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T14:32:26.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T14:32:26.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T14:32:26.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T14:32:04', tmtdew=32.26, humidity=11.61, cloud=0.0, wind=15.26, temperature=26.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T12:31:42.269', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T14:32:26.095 [DEBUG] [Thread-129375] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:32: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-12-31T14:32:26.182 [DEBUG] [Thread-129378] [transport.py] [_log()] starting thread (client mode): 0xb6b16860
2025-12-31T14:32:26.182 [DEBUG] [Thread-129378] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:32:26.196 [DEBUG] [Thread-129378] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T14:32:26.196 [INFO] [Thread-129378] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T14:32:26.204 [DEBUG] [Thread-129378] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:32:26.204 [DEBUG] [Thread-129378] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T14:32:26.204 [DEBUG] [Thread-129378] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:32:26.204 [DEBUG] [Thread-129378] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:32:26.204 [DEBUG] [Thread-129378] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:32:26.204 [DEBUG] [Thread-129378] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:32:26.204 [DEBUG] [Thread-129378] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:32:26.204 [DEBUG] [Thread-129378] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:32:26.204 [DEBUG] [Thread-129378] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:32:26.204 [DEBUG] [Thread-129378] [transport.py] [_log()] client lang: <none>
2025-12-31T14:32:26.204 [DEBUG] [Thread-129378] [transport.py] [_log()] server lang: <none>
2025-12-31T14:32:26.204 [DEBUG] [Thread-129378] [transport.py] [_log()] kex follows: False
2025-12-31T14:32:26.204 [DEBUG] [Thread-129378] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:32:26.204 [DEBUG] [Thread-129378] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:32:26.204 [DEBUG] [Thread-129378] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:32:26.204 [DEBUG] [Thread-129378] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:32:26.204 [DEBUG] [Thread-129378] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:32:26.204 [DEBUG] [Thread-129378] [transport.py] [_log()] Compression: none
2025-12-31T14:32:26.204 [DEBUG] [Thread-129378] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:32:26.259 [DEBUG] [Thread-129378] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:32:26.259 [DEBUG] [Thread-129378] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:32:26.259 [DEBUG] [Thread-129378] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T14:32:26.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T14:32:26.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:32:26.316 [DEBUG] [Thread-129378] [transport.py] [_log()] userauth is OK
2025-12-31T14:32:26.316 [DEBUG] [Thread-129378] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:32:26.316 [DEBUG] [Thread-129378] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:32:26.316 [DEBUG] [Thread-129378] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T14:32:26.316 [DEBUG] [Thread-129378] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:32:26.330 [INFO] [Thread-129378] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:32:26.330 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T14:32:26.330 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:32:27.195 [DEBUG] [Thread-129378] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:32:27.195 [DEBUG] [Thread-129378] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:32:27.243 [DEBUG] [Thread-129378] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:32:27.243 [DEBUG] [Thread-129378] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:32:27.252 [DEBUG] [Thread-129378] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:32:27.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:32:27.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T14:32:27.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T14:32:27.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:32:27.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:32:27.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:32:27.283 [DEBUG] [Thread-129378] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:32:32.049 [DEBUG] [Thread-129380 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:32:47.096 [DEBUG] [Thread-129381 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:32:57.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T14:32:57.285 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T14:32:57.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T14:32:58.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 14, 32, 36), 32.61, 11.46, 0.0, 28.73, 27.37, 0, 0, 0, 2, 0, 0),)
2025-12-31T14:32:58.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 14:32:36
2025-12-31T14:32:58.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T14:32:58.282 [DEBUG] [Thread-129382] [transport.py] [_log()] starting thread (client mode): 0xb6ba0fa0
2025-12-31T14:32:58.282 [DEBUG] [Thread-129382] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:32:58.302 [DEBUG] [Thread-129382] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T14:32:58.302 [INFO] [Thread-129382] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T14:32:58.306 [DEBUG] [Thread-129382] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:32:58.306 [DEBUG] [Thread-129382] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T14:32:58.306 [DEBUG] [Thread-129382] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:32:58.306 [DEBUG] [Thread-129382] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:32:58.306 [DEBUG] [Thread-129382] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:32:58.306 [DEBUG] [Thread-129382] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:32:58.306 [DEBUG] [Thread-129382] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:32:58.306 [DEBUG] [Thread-129382] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:32:58.306 [DEBUG] [Thread-129382] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:32:58.306 [DEBUG] [Thread-129382] [transport.py] [_log()] client lang: <none>
2025-12-31T14:32:58.306 [DEBUG] [Thread-129382] [transport.py] [_log()] server lang: <none>
2025-12-31T14:32:58.306 [DEBUG] [Thread-129382] [transport.py] [_log()] kex follows: False
2025-12-31T14:32:58.306 [DEBUG] [Thread-129382] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:32:58.306 [DEBUG] [Thread-129382] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:32:58.306 [DEBUG] [Thread-129382] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:32:58.306 [DEBUG] [Thread-129382] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:32:58.306 [DEBUG] [Thread-129382] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:32:58.306 [DEBUG] [Thread-129382] [transport.py] [_log()] Compression: none
2025-12-31T14:32:58.306 [DEBUG] [Thread-129382] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:32:58.322 [DEBUG] [Thread-129382] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:32:58.322 [DEBUG] [Thread-129382] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:32:58.323 [DEBUG] [Thread-129382] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T14:32:58.323 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T14:32:58.323 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:32:58.325 [DEBUG] [Thread-129382] [transport.py] [_log()] userauth is OK
2025-12-31T14:32:58.325 [DEBUG] [Thread-129382] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:32:58.325 [DEBUG] [Thread-129382] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:32:58.325 [DEBUG] [Thread-129382] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T14:32:58.325 [DEBUG] [Thread-129382] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:32:58.361 [INFO] [Thread-129382] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:32:58.362 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:32:59.026 [DEBUG] [Thread-129382] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:32:59.027 [DEBUG] [Thread-129382] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:32:59.027 [DEBUG] [Thread-129382] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T14:32:59.068 [DEBUG] [Thread-129382] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:32:59.068 [DEBUG] [Thread-129382] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:32:59.072 [DEBUG] [Thread-129382] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:32:59.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:32:59.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T14:32:59.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T14:32:59.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T14:32:59.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:32:59.097 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T14:32:59.098 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:32:59.098 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:32:59.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T14:32:59.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.522364 -999.00  +26.20  21.78     17   -0.40 1 1 1 1 1   888    0 26.09 -68.03 ----- 24.6 21.8 283.4 38.5 32.9 -25.5 32.6 -23.6 32.6 -24.1 33.2 -24.1
2025-12-31T14:32:59.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T14:32:59.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T14:32:59.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.522364
2025-12-31T14:32:59.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T14:32:59.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T14:32:59.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T14:32:59.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T14:32:59.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T14:32:59.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T14:32:36', tmtdew=32.61, humidity=11.46, cloud=0.0, wind=28.73, temperature=27.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T12:32:12.250', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T14:32:59.100 [DEBUG] [Thread-129382] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:32:59.181 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T14:32:59.193 [DEBUG] [Thread-129385] [transport.py] [_log()] starting thread (client mode): 0xb6b28220
2025-12-31T14:32:59.193 [DEBUG] [Thread-129385] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:32:59.210 [DEBUG] [Thread-129385] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T14:32:59.210 [INFO] [Thread-129385] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T14:32:59.218 [DEBUG] [Thread-129385] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:32:59.218 [DEBUG] [Thread-129385] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T14:32:59.218 [DEBUG] [Thread-129385] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:32:59.218 [DEBUG] [Thread-129385] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:32:59.219 [DEBUG] [Thread-129385] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:32:59.219 [DEBUG] [Thread-129385] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:32:59.219 [DEBUG] [Thread-129385] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:32:59.219 [DEBUG] [Thread-129385] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:32:59.219 [DEBUG] [Thread-129385] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:32:59.219 [DEBUG] [Thread-129385] [transport.py] [_log()] client lang: <none>
2025-12-31T14:32:59.219 [DEBUG] [Thread-129385] [transport.py] [_log()] server lang: <none>
2025-12-31T14:32:59.219 [DEBUG] [Thread-129385] [transport.py] [_log()] kex follows: False
2025-12-31T14:32:59.219 [DEBUG] [Thread-129385] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:32:59.219 [DEBUG] [Thread-129385] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:32:59.219 [DEBUG] [Thread-129385] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:32:59.219 [DEBUG] [Thread-129385] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:32:59.219 [DEBUG] [Thread-129385] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:32:59.219 [DEBUG] [Thread-129385] [transport.py] [_log()] Compression: none
2025-12-31T14:32:59.219 [DEBUG] [Thread-129385] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:32:59.277 [DEBUG] [Thread-129385] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:32:59.278 [DEBUG] [Thread-129385] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:32:59.279 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T14:32:59.279 [DEBUG] [Thread-129385] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T14:32:59.280 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:32:59.337 [DEBUG] [Thread-129385] [transport.py] [_log()] userauth is OK
2025-12-31T14:32:59.337 [DEBUG] [Thread-129385] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:32:59.337 [DEBUG] [Thread-129385] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:32:59.337 [DEBUG] [Thread-129385] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T14:32:59.338 [DEBUG] [Thread-129385] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:32:59.357 [INFO] [Thread-129385] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:32:59.358 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T14:32:59.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:32:59.824 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:32:59.825 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:33:00.213 [DEBUG] [Thread-129385] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:33:00.213 [DEBUG] [Thread-129385] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:33:00.261 [DEBUG] [Thread-129385] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:33:00.261 [DEBUG] [Thread-129385] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:33:00.271 [DEBUG] [Thread-129385] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:33:00.280 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:33:00.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T14:33:00.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T14:33:00.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:33:00.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:33:00.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:33:00.311 [DEBUG] [Thread-129385] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:33:02.138 [DEBUG] [Thread-129387 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:33:17.192 [DEBUG] [Thread-129388 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:33:18.773 [DEBUG] [Thread-129389 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:33:30.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T14:33:30.333 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T14:33:30.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T14:33:31.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 14, 33, 8), 32.85, 11.3, 0.0, 31.97, 27.5, 0, 0, 0, 2, 0, 0),)
2025-12-31T14:33:31.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 14:33:08
2025-12-31T14:33:31.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T14:33:31.327 [DEBUG] [Thread-129390] [transport.py] [_log()] starting thread (client mode): 0xb6ba0f70
2025-12-31T14:33:31.327 [DEBUG] [Thread-129390] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:33:31.347 [DEBUG] [Thread-129390] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T14:33:31.347 [INFO] [Thread-129390] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T14:33:31.349 [DEBUG] [Thread-129390] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:33:31.349 [DEBUG] [Thread-129390] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T14:33:31.349 [DEBUG] [Thread-129390] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:33:31.349 [DEBUG] [Thread-129390] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:33:31.349 [DEBUG] [Thread-129390] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:33:31.349 [DEBUG] [Thread-129390] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:33:31.349 [DEBUG] [Thread-129390] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:33:31.349 [DEBUG] [Thread-129390] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:33:31.349 [DEBUG] [Thread-129390] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:33:31.349 [DEBUG] [Thread-129390] [transport.py] [_log()] client lang: <none>
2025-12-31T14:33:31.349 [DEBUG] [Thread-129390] [transport.py] [_log()] server lang: <none>
2025-12-31T14:33:31.349 [DEBUG] [Thread-129390] [transport.py] [_log()] kex follows: False
2025-12-31T14:33:31.349 [DEBUG] [Thread-129390] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:33:31.349 [DEBUG] [Thread-129390] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:33:31.349 [DEBUG] [Thread-129390] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:33:31.349 [DEBUG] [Thread-129390] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:33:31.349 [DEBUG] [Thread-129390] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:33:31.349 [DEBUG] [Thread-129390] [transport.py] [_log()] Compression: none
2025-12-31T14:33:31.349 [DEBUG] [Thread-129390] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:33:31.367 [DEBUG] [Thread-129390] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:33:31.368 [DEBUG] [Thread-129390] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:33:31.368 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T14:33:31.368 [DEBUG] [Thread-129390] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T14:33:31.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:33:31.370 [DEBUG] [Thread-129390] [transport.py] [_log()] userauth is OK
2025-12-31T14:33:31.370 [DEBUG] [Thread-129390] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:33:31.370 [DEBUG] [Thread-129390] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:33:31.370 [DEBUG] [Thread-129390] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T14:33:31.370 [DEBUG] [Thread-129390] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:33:31.384 [INFO] [Thread-129390] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:33:31.384 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:33:32.150 [DEBUG] [Thread-129390] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:33:32.151 [DEBUG] [Thread-129390] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:33:32.151 [DEBUG] [Thread-129390] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T14:33:32.191 [DEBUG] [Thread-129390] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:33:32.191 [DEBUG] [Thread-129390] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:33:32.194 [DEBUG] [Thread-129390] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:33:32.200 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:33:32.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T14:33:32.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T14:33:32.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T14:33:32.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:33:32.211 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T14:33:32.211 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:33:32.211 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:33:32.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T14:33:32.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.522711 -999.00  +26.90  30.01     17   -0.00 1 2 2 1 1   888    0 26.02 -76.19 ----- 33.7 30.0 287.2 45.8 33.0 -25.0 32.7 -21.8 32.5 -20.9 33.3 -24.4
2025-12-31T14:33:32.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T14:33:32.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T14:33:32.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.522711
2025-12-31T14:33:32.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T14:33:32.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T14:33:32.213 [DEBUG] [Thread-129390] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:33:32.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T14:33:32.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T14:33:32.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T14:33:32.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T14:33:08', tmtdew=32.85, humidity=11.3, cloud=0.0, wind=31.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-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T12:32:42.230', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T14:33:32.226 [DEBUG] [Thread-129393 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:33:32.295 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T14:33:32.306 [DEBUG] [Thread-129394] [transport.py] [_log()] starting thread (client mode): 0xb6bbb700
2025-12-31T14:33:32.306 [DEBUG] [Thread-129394] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:33:32.321 [DEBUG] [Thread-129394] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T14:33:32.322 [INFO] [Thread-129394] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T14:33:32.330 [DEBUG] [Thread-129394] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:33:32.330 [DEBUG] [Thread-129394] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T14:33:32.330 [DEBUG] [Thread-129394] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:33:32.330 [DEBUG] [Thread-129394] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:33:32.330 [DEBUG] [Thread-129394] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:33:32.330 [DEBUG] [Thread-129394] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:33:32.331 [DEBUG] [Thread-129394] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:33:32.331 [DEBUG] [Thread-129394] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:33:32.331 [DEBUG] [Thread-129394] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:33:32.331 [DEBUG] [Thread-129394] [transport.py] [_log()] client lang: <none>
2025-12-31T14:33:32.331 [DEBUG] [Thread-129394] [transport.py] [_log()] server lang: <none>
2025-12-31T14:33:32.331 [DEBUG] [Thread-129394] [transport.py] [_log()] kex follows: False
2025-12-31T14:33:32.331 [DEBUG] [Thread-129394] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:33:32.331 [DEBUG] [Thread-129394] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:33:32.332 [DEBUG] [Thread-129394] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:33:32.332 [DEBUG] [Thread-129394] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:33:32.332 [DEBUG] [Thread-129394] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:33:32.332 [DEBUG] [Thread-129394] [transport.py] [_log()] Compression: none
2025-12-31T14:33:32.332 [DEBUG] [Thread-129394] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:33:32.389 [DEBUG] [Thread-129394] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:33:32.390 [DEBUG] [Thread-129394] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:33:32.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T14:33:32.391 [DEBUG] [Thread-129394] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T14:33:32.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:33:32.445 [DEBUG] [Thread-129394] [transport.py] [_log()] userauth is OK
2025-12-31T14:33:32.445 [DEBUG] [Thread-129394] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:33:32.445 [DEBUG] [Thread-129394] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:33:32.445 [DEBUG] [Thread-129394] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T14:33:32.446 [DEBUG] [Thread-129394] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:33:32.464 [INFO] [Thread-129394] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:33:32.465 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T14:33:32.465 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:33:33.316 [DEBUG] [Thread-129394] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:33:33.317 [DEBUG] [Thread-129394] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:33:33.365 [DEBUG] [Thread-129394] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:33:33.365 [DEBUG] [Thread-129394] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:33:33.374 [DEBUG] [Thread-129394] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:33:33.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:33:33.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T14:33: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-12-31T14:33:33.403 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:33:33.404 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:33:33.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:33:33.412 [DEBUG] [Thread-129394] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:33:47.266 [DEBUG] [Thread-129396 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:33:59.965 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:33:59.967 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:34:02.299 [DEBUG] [Thread-129397 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:34:03.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T14:34:03.435 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T14:34:03.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-12-31T14:34:04.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 14, 33, 40), 32.29, 11.81, 0.0, 29.57, 27.27, 0, 0, 0, 2, 0, 0),)
2025-12-31T14:34:04.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 14:33:40
2025-12-31T14:34:04.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T14:34:04.407 [DEBUG] [Thread-129398] [transport.py] [_log()] starting thread (client mode): 0xb95f22f0
2025-12-31T14:34:04.407 [DEBUG] [Thread-129398] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:34:04.427 [DEBUG] [Thread-129398] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T14:34:04.427 [INFO] [Thread-129398] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T14:34:04.430 [DEBUG] [Thread-129398] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:34:04.431 [DEBUG] [Thread-129398] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T14:34:04.431 [DEBUG] [Thread-129398] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:34:04.431 [DEBUG] [Thread-129398] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:34:04.431 [DEBUG] [Thread-129398] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:34:04.431 [DEBUG] [Thread-129398] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:34:04.431 [DEBUG] [Thread-129398] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:34:04.431 [DEBUG] [Thread-129398] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:34:04.431 [DEBUG] [Thread-129398] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:34:04.431 [DEBUG] [Thread-129398] [transport.py] [_log()] client lang: <none>
2025-12-31T14:34:04.431 [DEBUG] [Thread-129398] [transport.py] [_log()] server lang: <none>
2025-12-31T14:34:04.431 [DEBUG] [Thread-129398] [transport.py] [_log()] kex follows: False
2025-12-31T14:34:04.431 [DEBUG] [Thread-129398] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:34:04.431 [DEBUG] [Thread-129398] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:34:04.431 [DEBUG] [Thread-129398] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:34:04.431 [DEBUG] [Thread-129398] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:34:04.431 [DEBUG] [Thread-129398] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:34:04.431 [DEBUG] [Thread-129398] [transport.py] [_log()] Compression: none
2025-12-31T14:34:04.431 [DEBUG] [Thread-129398] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:34:04.447 [DEBUG] [Thread-129398] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:34:04.447 [DEBUG] [Thread-129398] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:34:04.448 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T14:34:04.448 [DEBUG] [Thread-129398] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T14:34:04.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:34:04.450 [DEBUG] [Thread-129398] [transport.py] [_log()] userauth is OK
2025-12-31T14:34:04.450 [DEBUG] [Thread-129398] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:34:04.450 [DEBUG] [Thread-129398] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:34:04.450 [DEBUG] [Thread-129398] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T14:34:04.450 [DEBUG] [Thread-129398] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:34:04.465 [INFO] [Thread-129398] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:34:04.465 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:34:05.093 [DEBUG] [Thread-129398] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:34:05.094 [DEBUG] [Thread-129398] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:34:05.094 [DEBUG] [Thread-129398] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T14:34:05.135 [DEBUG] [Thread-129398] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:34:05.135 [DEBUG] [Thread-129398] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:34:05.139 [DEBUG] [Thread-129398] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:34:05.150 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:34:05.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T14:34:05.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T14:34:05.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T14:34:05.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:34:05.162 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T14:34:05.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:34:05.163 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:34:05.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T14:34:05.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.523059 -999.00  +26.90  24.98     16   -0.30 1 2 1 1 1   888    0 25.86 -81.23 ----- 26.3 25.0 306.6 40.6 33.0 -24.2 32.6 -22.0 32.6 -23.2 33.3 -23.4
2025-12-31T14:34:05.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T14:34:05.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T14:34:05.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.523059
2025-12-31T14:34:05.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T14:34:05.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T14:34:05.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T14:34:05.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T14:34:05.165 [DEBUG] [Thread-129398] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:34:05.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T14:34:05.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T14:33:40', tmtdew=32.29, humidity=11.81, cloud=0.0, wind=29.57, temperature=27.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T12:33:12.298', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T14:34:05.256 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T14:34:05.270 [DEBUG] [Thread-129401] [transport.py] [_log()] starting thread (client mode): 0xb6ba30d0
2025-12-31T14:34:05.270 [DEBUG] [Thread-129401] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:34:05.286 [DEBUG] [Thread-129401] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T14:34:05.286 [INFO] [Thread-129401] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T14:34:05.294 [DEBUG] [Thread-129401] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:34:05.294 [DEBUG] [Thread-129401] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T14:34:05.294 [DEBUG] [Thread-129401] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:34:05.294 [DEBUG] [Thread-129401] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:34:05.294 [DEBUG] [Thread-129401] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:34:05.295 [DEBUG] [Thread-129401] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:34:05.295 [DEBUG] [Thread-129401] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:34:05.295 [DEBUG] [Thread-129401] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:34:05.295 [DEBUG] [Thread-129401] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:34:05.295 [DEBUG] [Thread-129401] [transport.py] [_log()] client lang: <none>
2025-12-31T14:34:05.295 [DEBUG] [Thread-129401] [transport.py] [_log()] server lang: <none>
2025-12-31T14:34:05.295 [DEBUG] [Thread-129401] [transport.py] [_log()] kex follows: False
2025-12-31T14:34:05.295 [DEBUG] [Thread-129401] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:34:05.296 [DEBUG] [Thread-129401] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:34:05.296 [DEBUG] [Thread-129401] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:34:05.296 [DEBUG] [Thread-129401] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:34:05.296 [DEBUG] [Thread-129401] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:34:05.296 [DEBUG] [Thread-129401] [transport.py] [_log()] Compression: none
2025-12-31T14:34:05.296 [DEBUG] [Thread-129401] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:34:05.353 [DEBUG] [Thread-129401] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:34:05.354 [DEBUG] [Thread-129401] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:34:05.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T14:34:05.355 [DEBUG] [Thread-129401] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T14:34:05.356 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:34:05.410 [DEBUG] [Thread-129401] [transport.py] [_log()] userauth is OK
2025-12-31T14:34:05.411 [DEBUG] [Thread-129401] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:34:05.411 [DEBUG] [Thread-129401] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:34:05.411 [DEBUG] [Thread-129401] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T14:34:05.411 [DEBUG] [Thread-129401] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:34:05.429 [INFO] [Thread-129401] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:34:05.430 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T14:34:05.431 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:34:06.415 [DEBUG] [Thread-129401] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:34:06.416 [DEBUG] [Thread-129401] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:34:06.465 [DEBUG] [Thread-129401] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:34:06.465 [DEBUG] [Thread-129401] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:34:06.476 [DEBUG] [Thread-129401] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:34:06.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:34:06.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T14:34:06.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T14:34:06.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:34:06.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:34:06.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:34:06.519 [DEBUG] [Thread-129401] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:34:17.335 [DEBUG] [Thread-129403 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:34:18.820 [DEBUG] [Thread-129404 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:34:32.394 [DEBUG] [Thread-129405 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:34:36.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T14:34:36.541 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T14:34:36.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T14:34:37.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 14, 34, 12), 32.65, 11.53, 0.0, 29.64, 27.25, 0, 0, 0, 2, 0, 0),)
2025-12-31T14:34:37.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 14:34:12
2025-12-31T14:34:37.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T14:34:37.518 [DEBUG] [Thread-129406] [transport.py] [_log()] starting thread (client mode): 0xbbfcdab0
2025-12-31T14:34:37.519 [DEBUG] [Thread-129406] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:34:37.541 [DEBUG] [Thread-129406] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T14:34:37.542 [INFO] [Thread-129406] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T14:34:37.543 [DEBUG] [Thread-129406] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:34:37.543 [DEBUG] [Thread-129406] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T14:34:37.544 [DEBUG] [Thread-129406] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:34:37.544 [DEBUG] [Thread-129406] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:34:37.544 [DEBUG] [Thread-129406] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:34:37.544 [DEBUG] [Thread-129406] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:34:37.544 [DEBUG] [Thread-129406] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:34:37.544 [DEBUG] [Thread-129406] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:34:37.544 [DEBUG] [Thread-129406] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:34:37.544 [DEBUG] [Thread-129406] [transport.py] [_log()] client lang: <none>
2025-12-31T14:34:37.544 [DEBUG] [Thread-129406] [transport.py] [_log()] server lang: <none>
2025-12-31T14:34:37.544 [DEBUG] [Thread-129406] [transport.py] [_log()] kex follows: False
2025-12-31T14:34:37.544 [DEBUG] [Thread-129406] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:34:37.544 [DEBUG] [Thread-129406] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:34:37.544 [DEBUG] [Thread-129406] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:34:37.544 [DEBUG] [Thread-129406] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:34:37.544 [DEBUG] [Thread-129406] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:34:37.544 [DEBUG] [Thread-129406] [transport.py] [_log()] Compression: none
2025-12-31T14:34:37.544 [DEBUG] [Thread-129406] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:34:37.555 [DEBUG] [Thread-129406] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:34:37.556 [DEBUG] [Thread-129406] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:34:37.556 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T14:34:37.557 [DEBUG] [Thread-129406] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T14:34:37.558 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:34:37.559 [DEBUG] [Thread-129406] [transport.py] [_log()] userauth is OK
2025-12-31T14:34:37.559 [DEBUG] [Thread-129406] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:34:37.559 [DEBUG] [Thread-129406] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:34:37.559 [DEBUG] [Thread-129406] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T14:34:37.559 [DEBUG] [Thread-129406] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:34:37.595 [INFO] [Thread-129406] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:34:37.596 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:34:38.366 [DEBUG] [Thread-129406] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:34:38.366 [DEBUG] [Thread-129406] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:34:38.367 [DEBUG] [Thread-129406] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T14:34:38.407 [DEBUG] [Thread-129406] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:34:38.407 [DEBUG] [Thread-129406] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:34:38.411 [DEBUG] [Thread-129406] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:34:38.423 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:34:38.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T14:34:38.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T14:34:38.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T14:34:38.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:34:38.436 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T14:34:38.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:34:38.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:34:38.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T14:34:38.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.523406 -999.00  +26.30  29.53     16   -0.80 1 1 1 1 1   888    0 25.53 -87.41 ----- 29.1 29.5 306.5 39.2 32.9 -24.8 32.6 -23.6 32.7 -24.9 33.2 -24.8
2025-12-31T14:34:38.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T14:34:38.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T14:34:38.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.523406
2025-12-31T14:34:38.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T14:34:38.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T14:34:38.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T14:34:38.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T14:34:38.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T14:34:38.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T14:34:12', tmtdew=32.65, humidity=11.53, cloud=0.0, wind=29.64, temperature=27.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T12:33:42.278', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T14:34:38.439 [DEBUG] [Thread-129406] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:34:38.522 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T14:34:38.535 [DEBUG] [Thread-129409] [transport.py] [_log()] starting thread (client mode): 0xb6bb2aa0
2025-12-31T14:34:38.535 [DEBUG] [Thread-129409] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:34:38.549 [DEBUG] [Thread-129409] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T14:34:38.549 [INFO] [Thread-129409] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T14:34:38.557 [DEBUG] [Thread-129409] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:34:38.558 [DEBUG] [Thread-129409] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T14:34:38.558 [DEBUG] [Thread-129409] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:34:38.558 [DEBUG] [Thread-129409] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:34:38.558 [DEBUG] [Thread-129409] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:34:38.558 [DEBUG] [Thread-129409] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:34:38.558 [DEBUG] [Thread-129409] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:34:38.559 [DEBUG] [Thread-129409] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:34:38.559 [DEBUG] [Thread-129409] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:34:38.559 [DEBUG] [Thread-129409] [transport.py] [_log()] client lang: <none>
2025-12-31T14:34:38.559 [DEBUG] [Thread-129409] [transport.py] [_log()] server lang: <none>
2025-12-31T14:34:38.559 [DEBUG] [Thread-129409] [transport.py] [_log()] kex follows: False
2025-12-31T14:34:38.559 [DEBUG] [Thread-129409] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:34:38.559 [DEBUG] [Thread-129409] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:34:38.559 [DEBUG] [Thread-129409] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:34:38.559 [DEBUG] [Thread-129409] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:34:38.559 [DEBUG] [Thread-129409] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:34:38.559 [DEBUG] [Thread-129409] [transport.py] [_log()] Compression: none
2025-12-31T14:34:38.559 [DEBUG] [Thread-129409] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:34:38.621 [DEBUG] [Thread-129409] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:34:38.622 [DEBUG] [Thread-129409] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:34:38.622 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T14:34:38.623 [DEBUG] [Thread-129409] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T14:34:38.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:34:38.681 [DEBUG] [Thread-129409] [transport.py] [_log()] userauth is OK
2025-12-31T14:34:38.681 [DEBUG] [Thread-129409] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:34:38.681 [DEBUG] [Thread-129409] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:34:38.681 [DEBUG] [Thread-129409] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T14:34:38.681 [DEBUG] [Thread-129409] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:34:38.701 [INFO] [Thread-129409] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:34:38.701 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T14:34:38.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:34:39.540 [DEBUG] [Thread-129409] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:34:39.540 [DEBUG] [Thread-129409] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:34:39.589 [DEBUG] [Thread-129409] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:34:39.590 [DEBUG] [Thread-129409] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:34:39.599 [DEBUG] [Thread-129409] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:34:39.608 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:34:39.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T14:34:39.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T14:34:39.626 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:34:39.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:34:39.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:34:39.635 [DEBUG] [Thread-129409] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:34:47.430 [DEBUG] [Thread-129411 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:35:00.107 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:35:00.108 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:35:02.482 [DEBUG] [Thread-129412 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:35:09.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T14:35:09.637 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T14:35:09.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T14:35:10.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 14, 34, 44), 33.25, 10.96, 0.0, 24.9, 27.77, 0, 0, 0, 2, 0, 0),)
2025-12-31T14:35:10.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 14:34:44
2025-12-31T14:35:10.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T14:35:10.635 [DEBUG] [Thread-129413] [transport.py] [_log()] starting thread (client mode): 0xb6b166e0
2025-12-31T14:35:10.635 [DEBUG] [Thread-129413] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:35:10.655 [DEBUG] [Thread-129413] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T14:35:10.655 [INFO] [Thread-129413] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T14:35:10.658 [DEBUG] [Thread-129413] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:35:10.658 [DEBUG] [Thread-129413] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T14:35:10.658 [DEBUG] [Thread-129413] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:35:10.658 [DEBUG] [Thread-129413] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:35:10.658 [DEBUG] [Thread-129413] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:35:10.658 [DEBUG] [Thread-129413] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:35:10.658 [DEBUG] [Thread-129413] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:35:10.658 [DEBUG] [Thread-129413] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:35:10.658 [DEBUG] [Thread-129413] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:35:10.658 [DEBUG] [Thread-129413] [transport.py] [_log()] client lang: <none>
2025-12-31T14:35:10.658 [DEBUG] [Thread-129413] [transport.py] [_log()] server lang: <none>
2025-12-31T14:35:10.658 [DEBUG] [Thread-129413] [transport.py] [_log()] kex follows: False
2025-12-31T14:35:10.658 [DEBUG] [Thread-129413] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:35:10.658 [DEBUG] [Thread-129413] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:35:10.658 [DEBUG] [Thread-129413] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:35:10.658 [DEBUG] [Thread-129413] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:35:10.659 [DEBUG] [Thread-129413] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:35:10.659 [DEBUG] [Thread-129413] [transport.py] [_log()] Compression: none
2025-12-31T14:35:10.659 [DEBUG] [Thread-129413] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:35:10.677 [DEBUG] [Thread-129413] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:35:10.678 [DEBUG] [Thread-129413] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:35:10.679 [DEBUG] [Thread-129413] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T14:35:10.679 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T14:35:10.679 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:35:10.721 [DEBUG] [Thread-129413] [transport.py] [_log()] userauth is OK
2025-12-31T14:35:10.721 [DEBUG] [Thread-129413] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:35:10.721 [DEBUG] [Thread-129413] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:35:10.721 [DEBUG] [Thread-129413] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T14:35:10.721 [DEBUG] [Thread-129413] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:35:10.742 [INFO] [Thread-129413] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:35:10.743 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:35:16.735 [DEBUG] [Thread-129413] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:35:16.736 [DEBUG] [Thread-129413] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:35:16.736 [DEBUG] [Thread-129413] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T14:35:16.777 [DEBUG] [Thread-129413] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:35:16.778 [DEBUG] [Thread-129413] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:35:16.781 [DEBUG] [Thread-129413] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:35:16.900 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:35:16.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T14:35:16.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T14:35:16.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T14:35:16.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:35:16.919 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T14:35:16.919 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:35:16.919 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:35:16.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T14:35:16.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.523753 -999.00  +26.10  31.93     17   -0.70 1 2 2 1 1   888    0 25.04 -97.30 ----- 30.2 31.9 313.0 38.1 32.9 -25.8 32.6 -22.6 32.8 -22.8 33.2 -23.9
2025-12-31T14:35:16.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T14:35:16.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T14:35:16.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.523753
2025-12-31T14:35:16.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T14:35:16.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T14:35:16.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T14:35:16.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T14:35:16.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T14:35:16.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T14:34:44', tmtdew=33.25, humidity=10.96, cloud=0.0, wind=24.9, temperature=27.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T12:34:12.259', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T14:35:16.921 [DEBUG] [Thread-129413] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:35:17.000 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T14:35:17.011 [DEBUG] [Thread-129416] [transport.py] [_log()] starting thread (client mode): 0xb6b14b20
2025-12-31T14:35:17.011 [DEBUG] [Thread-129416] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:35:17.026 [DEBUG] [Thread-129416] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T14:35:17.026 [INFO] [Thread-129416] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T14:35:17.033 [DEBUG] [Thread-129416] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:35:17.033 [DEBUG] [Thread-129416] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T14:35:17.033 [DEBUG] [Thread-129416] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:35:17.033 [DEBUG] [Thread-129416] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:35:17.033 [DEBUG] [Thread-129416] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:35:17.033 [DEBUG] [Thread-129416] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:35:17.033 [DEBUG] [Thread-129416] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:35:17.033 [DEBUG] [Thread-129416] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:35:17.033 [DEBUG] [Thread-129416] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:35:17.033 [DEBUG] [Thread-129416] [transport.py] [_log()] client lang: <none>
2025-12-31T14:35:17.033 [DEBUG] [Thread-129416] [transport.py] [_log()] server lang: <none>
2025-12-31T14:35:17.033 [DEBUG] [Thread-129416] [transport.py] [_log()] kex follows: False
2025-12-31T14:35:17.033 [DEBUG] [Thread-129416] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:35:17.033 [DEBUG] [Thread-129416] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:35:17.033 [DEBUG] [Thread-129416] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:35:17.033 [DEBUG] [Thread-129416] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:35:17.033 [DEBUG] [Thread-129416] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:35:17.033 [DEBUG] [Thread-129416] [transport.py] [_log()] Compression: none
2025-12-31T14:35:17.033 [DEBUG] [Thread-129416] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:35:17.090 [DEBUG] [Thread-129416] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:35:17.090 [DEBUG] [Thread-129416] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:35:17.090 [DEBUG] [Thread-129416] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T14:35:17.090 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T14:35:17.090 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:35:17.147 [DEBUG] [Thread-129416] [transport.py] [_log()] userauth is OK
2025-12-31T14:35:17.147 [DEBUG] [Thread-129416] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:35:17.147 [DEBUG] [Thread-129416] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:35:17.147 [DEBUG] [Thread-129416] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T14:35:17.147 [DEBUG] [Thread-129416] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:35:17.161 [INFO] [Thread-129416] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:35:17.161 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T14:35:17.161 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:35:17.512 [DEBUG] [Thread-129418 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:35:17.982 [DEBUG] [Thread-129416] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:35:17.982 [DEBUG] [Thread-129416] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:35:18.032 [DEBUG] [Thread-129416] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:35:18.032 [DEBUG] [Thread-129416] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:35:18.045 [DEBUG] [Thread-129416] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:35:18.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:35:18.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T14:35:18.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T14:35:18.070 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:35:18.070 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:35:18.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:35:18.078 [DEBUG] [Thread-129416] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:35:18.867 [DEBUG] [Thread-129419 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:35:32.553 [DEBUG] [Thread-129420 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:35:47.586 [DEBUG] [Thread-129421 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:35:48.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T14:35:48.101 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T14:35:48.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T14:35:48.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 14, 35, 16), 33.28, 10.93, 0.0, 31.19, 27.7, 0, 0, 0, 2, 0, 0),)
2025-12-31T14:35:48.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 14:35:16
2025-12-31T14:35:48.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T14:35:49.111 [DEBUG] [Thread-129422] [transport.py] [_log()] starting thread (client mode): 0xb6b14850
2025-12-31T14:35:49.111 [DEBUG] [Thread-129422] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:35:49.130 [DEBUG] [Thread-129422] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T14:35:49.130 [INFO] [Thread-129422] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T14:35:49.133 [DEBUG] [Thread-129422] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:35:49.133 [DEBUG] [Thread-129422] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T14:35:49.133 [DEBUG] [Thread-129422] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:35:49.133 [DEBUG] [Thread-129422] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:35:49.133 [DEBUG] [Thread-129422] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:35:49.133 [DEBUG] [Thread-129422] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:35:49.133 [DEBUG] [Thread-129422] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:35:49.133 [DEBUG] [Thread-129422] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:35:49.133 [DEBUG] [Thread-129422] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:35:49.133 [DEBUG] [Thread-129422] [transport.py] [_log()] client lang: <none>
2025-12-31T14:35:49.133 [DEBUG] [Thread-129422] [transport.py] [_log()] server lang: <none>
2025-12-31T14:35:49.133 [DEBUG] [Thread-129422] [transport.py] [_log()] kex follows: False
2025-12-31T14:35:49.133 [DEBUG] [Thread-129422] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:35:49.133 [DEBUG] [Thread-129422] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:35:49.133 [DEBUG] [Thread-129422] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:35:49.133 [DEBUG] [Thread-129422] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:35:49.133 [DEBUG] [Thread-129422] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:35:49.134 [DEBUG] [Thread-129422] [transport.py] [_log()] Compression: none
2025-12-31T14:35:49.134 [DEBUG] [Thread-129422] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:35:49.148 [DEBUG] [Thread-129422] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:35:49.149 [DEBUG] [Thread-129422] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:35:49.149 [DEBUG] [Thread-129422] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T14:35:49.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T14:35:49.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:35:49.149 [DEBUG] [Thread-129422] [transport.py] [_log()] userauth is OK
2025-12-31T14:35:49.149 [DEBUG] [Thread-129422] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:35:49.149 [DEBUG] [Thread-129422] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:35:49.149 [DEBUG] [Thread-129422] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T14:35:49.149 [DEBUG] [Thread-129422] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:35:49.159 [INFO] [Thread-129422] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:35:49.159 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:35:49.742 [DEBUG] [Thread-129422] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:35:49.742 [DEBUG] [Thread-129422] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:35:49.742 [DEBUG] [Thread-129422] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T14:35:49.783 [DEBUG] [Thread-129422] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:35:49.783 [DEBUG] [Thread-129422] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:35:49.786 [DEBUG] [Thread-129422] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:35:49.798 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:35:49.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T14:35:49.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T14:35:49.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T14:35:49.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:35:49.802 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T14:35:49.802 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:35:49.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:35:49.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T14:35:49.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.524100 -999.00  +26.20  27.92     17   -0.40 1 2 1 1 1   888    0 25.18 -105.64 ----- 28.0 27.9 291.6 33.4 32.9 -24.0 32.5 -23.0 32.7 -22.8 33.2 -23.2
2025-12-31T14:35:49.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T14:35:49.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T14:35:49.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.524100
2025-12-31T14:35:49.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T14:35:49.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T14:35:49.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T14:35:49.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T14:35:49.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T14:35:49.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T14:35:16', tmtdew=33.28, humidity=10.93, cloud=0.0, wind=31.19, temperature=27.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T12:34:42.240', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T14:35:49.804 [DEBUG] [Thread-129422] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:35:49.878 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T14:35:49.889 [DEBUG] [Thread-129425] [transport.py] [_log()] starting thread (client mode): 0xb6b150f0
2025-12-31T14:35:49.889 [DEBUG] [Thread-129425] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:35:49.904 [DEBUG] [Thread-129425] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T14:35:49.904 [INFO] [Thread-129425] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T14:35:49.911 [DEBUG] [Thread-129425] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:35:49.912 [DEBUG] [Thread-129425] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T14:35:49.912 [DEBUG] [Thread-129425] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:35:49.912 [DEBUG] [Thread-129425] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:35:49.912 [DEBUG] [Thread-129425] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:35:49.912 [DEBUG] [Thread-129425] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:35:49.912 [DEBUG] [Thread-129425] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:35:49.912 [DEBUG] [Thread-129425] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:35:49.912 [DEBUG] [Thread-129425] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:35:49.912 [DEBUG] [Thread-129425] [transport.py] [_log()] client lang: <none>
2025-12-31T14:35:49.912 [DEBUG] [Thread-129425] [transport.py] [_log()] server lang: <none>
2025-12-31T14:35:49.912 [DEBUG] [Thread-129425] [transport.py] [_log()] kex follows: False
2025-12-31T14:35:49.912 [DEBUG] [Thread-129425] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:35:49.912 [DEBUG] [Thread-129425] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:35:49.912 [DEBUG] [Thread-129425] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:35:49.912 [DEBUG] [Thread-129425] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:35:49.912 [DEBUG] [Thread-129425] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:35:49.912 [DEBUG] [Thread-129425] [transport.py] [_log()] Compression: none
2025-12-31T14:35:49.912 [DEBUG] [Thread-129425] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:35:49.970 [DEBUG] [Thread-129425] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:35:49.970 [DEBUG] [Thread-129425] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:35:49.970 [DEBUG] [Thread-129425] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T14:35:49.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T14:35:49.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:35:50.027 [DEBUG] [Thread-129425] [transport.py] [_log()] userauth is OK
2025-12-31T14:35:50.027 [DEBUG] [Thread-129425] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:35:50.027 [DEBUG] [Thread-129425] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:35:50.027 [DEBUG] [Thread-129425] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T14:35:50.027 [DEBUG] [Thread-129425] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:35:50.041 [INFO] [Thread-129425] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:35:50.041 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T14:35:50.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:35:50.944 [DEBUG] [Thread-129425] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:35:50.944 [DEBUG] [Thread-129425] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:35:50.992 [DEBUG] [Thread-129425] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:35:50.992 [DEBUG] [Thread-129425] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:35:51.001 [DEBUG] [Thread-129425] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:35:51.010 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:35: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')
2025-12-31T14:35:51.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T14:35:51.028 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:35:51.029 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:35:51.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:35:51.037 [DEBUG] [Thread-129425] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:36:00.251 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:36:00.252 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:36:02.621 [DEBUG] [Thread-129427 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:36:17.676 [DEBUG] [Thread-129428 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:36:18.918 [DEBUG] [Thread-129429 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:36:21.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T14:36:21.059 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T14:36:21.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T14:36:21.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 14, 35, 48), 33.21, 11.06, 0.0, 33.01, 27.84, 0, 0, 0, 2, 0, 0),)
2025-12-31T14:36:21.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 14:35:48
2025-12-31T14:36:21.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T14:36:22.152 [DEBUG] [Thread-129430] [transport.py] [_log()] starting thread (client mode): 0xb955a8c0
2025-12-31T14:36:22.152 [DEBUG] [Thread-129430] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:36:22.173 [DEBUG] [Thread-129430] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T14:36:22.173 [INFO] [Thread-129430] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T14:36:22.176 [DEBUG] [Thread-129430] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:36:22.176 [DEBUG] [Thread-129430] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T14:36:22.176 [DEBUG] [Thread-129430] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:36:22.176 [DEBUG] [Thread-129430] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:36:22.176 [DEBUG] [Thread-129430] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:36:22.176 [DEBUG] [Thread-129430] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:36:22.176 [DEBUG] [Thread-129430] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:36:22.176 [DEBUG] [Thread-129430] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:36:22.176 [DEBUG] [Thread-129430] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:36:22.176 [DEBUG] [Thread-129430] [transport.py] [_log()] client lang: <none>
2025-12-31T14:36:22.177 [DEBUG] [Thread-129430] [transport.py] [_log()] server lang: <none>
2025-12-31T14:36:22.177 [DEBUG] [Thread-129430] [transport.py] [_log()] kex follows: False
2025-12-31T14:36:22.177 [DEBUG] [Thread-129430] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:36:22.177 [DEBUG] [Thread-129430] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:36:22.177 [DEBUG] [Thread-129430] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:36:22.177 [DEBUG] [Thread-129430] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:36:22.177 [DEBUG] [Thread-129430] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:36:22.177 [DEBUG] [Thread-129430] [transport.py] [_log()] Compression: none
2025-12-31T14:36:22.177 [DEBUG] [Thread-129430] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:36:22.194 [DEBUG] [Thread-129430] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:36:22.194 [DEBUG] [Thread-129430] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:36:22.194 [DEBUG] [Thread-129430] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T14:36:22.194 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T14:36:22.195 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:36:22.195 [DEBUG] [Thread-129430] [transport.py] [_log()] userauth is OK
2025-12-31T14:36:22.195 [DEBUG] [Thread-129430] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:36:22.195 [DEBUG] [Thread-129430] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:36:22.195 [DEBUG] [Thread-129430] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T14:36:22.195 [DEBUG] [Thread-129430] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:36:22.208 [INFO] [Thread-129430] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:36:22.208 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:36:22.943 [DEBUG] [Thread-129430] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:36:22.943 [DEBUG] [Thread-129430] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:36:22.943 [DEBUG] [Thread-129430] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T14:36:22.984 [DEBUG] [Thread-129430] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:36:22.984 [DEBUG] [Thread-129430] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:36:22.986 [DEBUG] [Thread-129430] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:36:22.998 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:36:22.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T14:36:23.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T14:36:23.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T14:36:23.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:36:23.005 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T14:36:23.005 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:36:23.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:36:23.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T14:36:23.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.524795 -999.00  +26.80  27.29     17   +0.00 1 1 1 1 1   888    0 25.14 -107.74 ----- 14.1 27.3 286.9 36.8 32.8 -23.4 32.6 -22.6 32.5 -25.9 33.2 -23.2
2025-12-31T14:36:23.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T14:36:23.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T14:36:23.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.524795
2025-12-31T14:36:23.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T14:36:23.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T14:36:23.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T14:36:23.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T14:36:23.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T14:36:23.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T14:35:48', tmtdew=33.21, humidity=11.06, cloud=0.0, wind=33.01, temperature=27.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T12:35:42.288', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T14:36:23.006 [DEBUG] [Thread-129430] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:36:23.080 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T14:36:23.091 [DEBUG] [Thread-129433] [transport.py] [_log()] starting thread (client mode): 0xb6bbb490
2025-12-31T14:36:23.091 [DEBUG] [Thread-129433] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:36:23.106 [DEBUG] [Thread-129433] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T14:36:23.106 [INFO] [Thread-129433] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T14:36:23.116 [DEBUG] [Thread-129433] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:36:23.117 [DEBUG] [Thread-129433] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T14:36:23.117 [DEBUG] [Thread-129433] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:36:23.117 [DEBUG] [Thread-129433] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:36:23.117 [DEBUG] [Thread-129433] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:36:23.117 [DEBUG] [Thread-129433] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:36:23.117 [DEBUG] [Thread-129433] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:36:23.117 [DEBUG] [Thread-129433] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:36:23.117 [DEBUG] [Thread-129433] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:36:23.117 [DEBUG] [Thread-129433] [transport.py] [_log()] client lang: <none>
2025-12-31T14:36:23.117 [DEBUG] [Thread-129433] [transport.py] [_log()] server lang: <none>
2025-12-31T14:36:23.117 [DEBUG] [Thread-129433] [transport.py] [_log()] kex follows: False
2025-12-31T14:36:23.117 [DEBUG] [Thread-129433] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:36:23.117 [DEBUG] [Thread-129433] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:36:23.117 [DEBUG] [Thread-129433] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:36:23.117 [DEBUG] [Thread-129433] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:36:23.117 [DEBUG] [Thread-129433] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:36:23.117 [DEBUG] [Thread-129433] [transport.py] [_log()] Compression: none
2025-12-31T14:36:23.117 [DEBUG] [Thread-129433] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:36:23.176 [DEBUG] [Thread-129433] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:36:23.176 [DEBUG] [Thread-129433] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:36:23.176 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T14:36:23.176 [DEBUG] [Thread-129433] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T14:36:23.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:36:23.235 [DEBUG] [Thread-129433] [transport.py] [_log()] userauth is OK
2025-12-31T14:36:23.235 [DEBUG] [Thread-129433] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:36:23.235 [DEBUG] [Thread-129433] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:36:23.235 [DEBUG] [Thread-129433] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T14:36:23.235 [DEBUG] [Thread-129433] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:36:23.249 [INFO] [Thread-129433] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:36:23.249 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T14:36:23.249 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:36:24.053 [DEBUG] [Thread-129433] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:36:24.053 [DEBUG] [Thread-129433] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:36:24.103 [DEBUG] [Thread-129433] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:36:24.103 [DEBUG] [Thread-129433] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:36:24.111 [DEBUG] [Thread-129433] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:36:24.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:36:24.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T14:36:24.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T14:36:24.137 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:36:24.137 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:36:24.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:36:24.144 [DEBUG] [Thread-129433] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:36:32.710 [DEBUG] [Thread-129435 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:36:47.763 [DEBUG] [Thread-129436 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:36:54.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T14:36:54.167 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T14:36:54.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T14:36:54.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 14, 36, 20), 33.28, 11.01, 0.0, 34.25, 27.85, 0, 0, 0, 2, 0, 0),)
2025-12-31T14:36:54.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 14:36:20
2025-12-31T14:36:55.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T14:36:55.217 [DEBUG] [Thread-129437] [transport.py] [_log()] starting thread (client mode): 0xb95f30d0
2025-12-31T14:36:55.217 [DEBUG] [Thread-129437] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:36:55.237 [DEBUG] [Thread-129437] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T14:36:55.237 [INFO] [Thread-129437] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T14:36:55.239 [DEBUG] [Thread-129437] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:36:55.239 [DEBUG] [Thread-129437] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T14:36:55.239 [DEBUG] [Thread-129437] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:36:55.239 [DEBUG] [Thread-129437] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:36:55.239 [DEBUG] [Thread-129437] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:36:55.239 [DEBUG] [Thread-129437] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:36:55.239 [DEBUG] [Thread-129437] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:36:55.239 [DEBUG] [Thread-129437] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:36:55.239 [DEBUG] [Thread-129437] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:36:55.239 [DEBUG] [Thread-129437] [transport.py] [_log()] client lang: <none>
2025-12-31T14:36:55.239 [DEBUG] [Thread-129437] [transport.py] [_log()] server lang: <none>
2025-12-31T14:36:55.239 [DEBUG] [Thread-129437] [transport.py] [_log()] kex follows: False
2025-12-31T14:36:55.239 [DEBUG] [Thread-129437] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:36:55.239 [DEBUG] [Thread-129437] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:36:55.239 [DEBUG] [Thread-129437] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:36:55.239 [DEBUG] [Thread-129437] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:36:55.239 [DEBUG] [Thread-129437] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:36:55.239 [DEBUG] [Thread-129437] [transport.py] [_log()] Compression: none
2025-12-31T14:36:55.239 [DEBUG] [Thread-129437] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:36:55.246 [DEBUG] [Thread-129437] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:36:55.246 [DEBUG] [Thread-129437] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:36:55.246 [DEBUG] [Thread-129437] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T14:36:55.246 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T14:36:55.246 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:36:55.247 [DEBUG] [Thread-129437] [transport.py] [_log()] userauth is OK
2025-12-31T14:36:55.247 [DEBUG] [Thread-129437] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:36:55.247 [DEBUG] [Thread-129437] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:36:55.247 [DEBUG] [Thread-129437] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T14:36:55.247 [DEBUG] [Thread-129437] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:36:55.265 [INFO] [Thread-129437] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:36:55.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:36:55.835 [DEBUG] [Thread-129437] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:36:55.835 [DEBUG] [Thread-129437] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:36:55.835 [DEBUG] [Thread-129437] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T14:36:55.876 [DEBUG] [Thread-129437] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:36:55.876 [DEBUG] [Thread-129437] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:36:55.879 [DEBUG] [Thread-129437] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:36:55.890 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:36:55.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T14:36:55.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T14:36:55.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T14:36:55.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:36:55.901 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T14:36:55.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:36:55.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:36:55.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T14:36:55.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.525142 -999.00  +26.90  27.92     17   -0.10 1 1 1 1 1   888    0 24.47 -116.64 ----- 29.7 27.9 275.6 34.1 32.7 -25.7 32.6 -23.4 32.8 -25.2 33.0 -23.9
2025-12-31T14:36:55.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T14:36:55.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T14:36:55.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.525142
2025-12-31T14:36:55.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T14:36:55.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T14:36:55.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T14:36:55.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T14:36:55.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T14:36:55.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T14:36:20', tmtdew=33.28, humidity=11.01, cloud=0.0, wind=34.25, temperature=27.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T12:36:12.269', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T14:36:55.903 [DEBUG] [Thread-129437] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:36:55.996 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T14:36:56.008 [DEBUG] [Thread-129440] [transport.py] [_log()] starting thread (client mode): 0xb95f2530
2025-12-31T14:36:56.008 [DEBUG] [Thread-129440] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:36:56.023 [DEBUG] [Thread-129440] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T14:36:56.023 [INFO] [Thread-129440] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T14:36:56.030 [DEBUG] [Thread-129440] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:36:56.030 [DEBUG] [Thread-129440] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T14:36:56.030 [DEBUG] [Thread-129440] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:36:56.030 [DEBUG] [Thread-129440] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:36:56.030 [DEBUG] [Thread-129440] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:36:56.030 [DEBUG] [Thread-129440] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:36:56.030 [DEBUG] [Thread-129440] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:36:56.030 [DEBUG] [Thread-129440] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:36:56.030 [DEBUG] [Thread-129440] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:36:56.030 [DEBUG] [Thread-129440] [transport.py] [_log()] client lang: <none>
2025-12-31T14:36:56.030 [DEBUG] [Thread-129440] [transport.py] [_log()] server lang: <none>
2025-12-31T14:36:56.030 [DEBUG] [Thread-129440] [transport.py] [_log()] kex follows: False
2025-12-31T14:36:56.030 [DEBUG] [Thread-129440] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:36:56.030 [DEBUG] [Thread-129440] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:36:56.030 [DEBUG] [Thread-129440] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:36:56.030 [DEBUG] [Thread-129440] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:36:56.030 [DEBUG] [Thread-129440] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:36:56.030 [DEBUG] [Thread-129440] [transport.py] [_log()] Compression: none
2025-12-31T14:36:56.031 [DEBUG] [Thread-129440] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:36:56.086 [DEBUG] [Thread-129440] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:36:56.087 [DEBUG] [Thread-129440] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:36:56.087 [DEBUG] [Thread-129440] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T14:36:56.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T14:36:56.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:36:56.142 [DEBUG] [Thread-129440] [transport.py] [_log()] userauth is OK
2025-12-31T14:36:56.142 [DEBUG] [Thread-129440] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:36:56.143 [DEBUG] [Thread-129440] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:36:56.143 [DEBUG] [Thread-129440] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T14:36:56.143 [DEBUG] [Thread-129440] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:36:56.162 [INFO] [Thread-129440] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:36:56.162 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T14:36:56.163 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:36:57.038 [DEBUG] [Thread-129440] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:36:57.038 [DEBUG] [Thread-129440] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:36:57.086 [DEBUG] [Thread-129440] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:36:57.086 [DEBUG] [Thread-129440] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:36:57.095 [DEBUG] [Thread-129440] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:36:57.105 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:36:57.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T14:36:57.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T14:36:57.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:36:57.123 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:36:57.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:36:57.132 [DEBUG] [Thread-129440] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:37:00.391 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:37:00.392 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:37:02.794 [DEBUG] [Thread-129442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:37:17.836 [DEBUG] [Thread-129443 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:37:18.981 [DEBUG] [Thread-129444 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:37:27.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T14:37:27.154 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T14:37:27.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T14:37:27.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 14, 36, 52), 33.11, 11.01, 0.0, 29.59, 27.72, 0, 0, 0, 2, 0, 0),)
2025-12-31T14:37:27.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 14:36:52
2025-12-31T14:37:28.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T14:37:28.159 [DEBUG] [Thread-129445] [transport.py] [_log()] starting thread (client mode): 0xb6bbb700
2025-12-31T14:37:28.159 [DEBUG] [Thread-129445] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:37:28.180 [DEBUG] [Thread-129445] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T14:37:28.180 [INFO] [Thread-129445] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T14:37:28.184 [DEBUG] [Thread-129445] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:37:28.184 [DEBUG] [Thread-129445] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T14:37:28.184 [DEBUG] [Thread-129445] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:37:28.184 [DEBUG] [Thread-129445] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:37:28.184 [DEBUG] [Thread-129445] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:37:28.184 [DEBUG] [Thread-129445] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:37:28.184 [DEBUG] [Thread-129445] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:37:28.184 [DEBUG] [Thread-129445] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:37:28.184 [DEBUG] [Thread-129445] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:37:28.184 [DEBUG] [Thread-129445] [transport.py] [_log()] client lang: <none>
2025-12-31T14:37:28.184 [DEBUG] [Thread-129445] [transport.py] [_log()] server lang: <none>
2025-12-31T14:37:28.184 [DEBUG] [Thread-129445] [transport.py] [_log()] kex follows: False
2025-12-31T14:37:28.185 [DEBUG] [Thread-129445] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:37:28.185 [DEBUG] [Thread-129445] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:37:28.185 [DEBUG] [Thread-129445] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:37:28.185 [DEBUG] [Thread-129445] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:37:28.185 [DEBUG] [Thread-129445] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:37:28.185 [DEBUG] [Thread-129445] [transport.py] [_log()] Compression: none
2025-12-31T14:37:28.185 [DEBUG] [Thread-129445] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:37:28.203 [DEBUG] [Thread-129445] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:37:28.204 [DEBUG] [Thread-129445] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:37:28.204 [DEBUG] [Thread-129445] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T14:37:28.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T14:37:28.205 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:37:28.249 [DEBUG] [Thread-129445] [transport.py] [_log()] userauth is OK
2025-12-31T14:37:28.249 [DEBUG] [Thread-129445] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:37:28.249 [DEBUG] [Thread-129445] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:37:28.249 [DEBUG] [Thread-129445] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T14:37:28.249 [DEBUG] [Thread-129445] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:37:28.282 [INFO] [Thread-129445] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:37:28.282 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:37:29.025 [DEBUG] [Thread-129445] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:37:29.026 [DEBUG] [Thread-129445] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:37:29.026 [DEBUG] [Thread-129445] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T14:37:29.067 [DEBUG] [Thread-129445] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:37:29.067 [DEBUG] [Thread-129445] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:37:29.069 [DEBUG] [Thread-129445] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:37:29.081 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:37:29.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T14:37:29.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T14:37:29.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T14:37:29.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:37:29.091 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T14:37:29.091 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:37:29.091 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:37:29.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T14:37:29.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.525489 -999.00  +27.10  37.16     16   -0.40 1 2 2 1 1   888    0 24.36 -118.91 ----- 30.5 37.2 265.0 46.1 32.8 -27.7 32.7 -21.4 32.5 -22.0 33.3 -24.5
2025-12-31T14:37:29.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T14:37:29.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T14:37:29.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.525489
2025-12-31T14:37:29.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T14:37:29.093 [DEBUG] [Thread-129445] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:37:29.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T14:37:29.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T14:37:29.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T14:37:29.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T14:37:29.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T14:36:52', tmtdew=33.11, humidity=11.01, cloud=0.0, wind=29.59, temperature=27.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T12:36:42.250', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T14:37:29.179 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T14:37:29.189 [DEBUG] [Thread-129448] [transport.py] [_log()] starting thread (client mode): 0xb6b17a30
2025-12-31T14:37:29.189 [DEBUG] [Thread-129448] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:37:29.204 [DEBUG] [Thread-129448] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T14:37:29.204 [INFO] [Thread-129448] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T14:37:29.212 [DEBUG] [Thread-129448] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:37:29.212 [DEBUG] [Thread-129448] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T14:37:29.212 [DEBUG] [Thread-129448] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:37:29.212 [DEBUG] [Thread-129448] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:37:29.212 [DEBUG] [Thread-129448] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:37:29.212 [DEBUG] [Thread-129448] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:37:29.212 [DEBUG] [Thread-129448] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:37:29.212 [DEBUG] [Thread-129448] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:37:29.212 [DEBUG] [Thread-129448] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:37:29.212 [DEBUG] [Thread-129448] [transport.py] [_log()] client lang: <none>
2025-12-31T14:37:29.212 [DEBUG] [Thread-129448] [transport.py] [_log()] server lang: <none>
2025-12-31T14:37:29.212 [DEBUG] [Thread-129448] [transport.py] [_log()] kex follows: False
2025-12-31T14:37:29.212 [DEBUG] [Thread-129448] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:37:29.213 [DEBUG] [Thread-129448] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:37:29.213 [DEBUG] [Thread-129448] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:37:29.213 [DEBUG] [Thread-129448] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:37:29.213 [DEBUG] [Thread-129448] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:37:29.213 [DEBUG] [Thread-129448] [transport.py] [_log()] Compression: none
2025-12-31T14:37:29.213 [DEBUG] [Thread-129448] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:37:29.269 [DEBUG] [Thread-129448] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:37:29.269 [DEBUG] [Thread-129448] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:37:29.270 [DEBUG] [Thread-129448] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T14:37:29.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T14:37:29.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:37:29.326 [DEBUG] [Thread-129448] [transport.py] [_log()] userauth is OK
2025-12-31T14:37:29.326 [DEBUG] [Thread-129448] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:37:29.326 [DEBUG] [Thread-129448] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:37:29.326 [DEBUG] [Thread-129448] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T14:37:29.326 [DEBUG] [Thread-129448] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:37:29.340 [INFO] [Thread-129448] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:37:29.341 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T14:37:29.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:37:30.196 [DEBUG] [Thread-129448] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:37:30.196 [DEBUG] [Thread-129448] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:37:30.243 [DEBUG] [Thread-129448] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:37:30.244 [DEBUG] [Thread-129448] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:37:30.252 [DEBUG] [Thread-129448] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:37:30.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:37: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')
2025-12-31T14:37:30.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T14:37:30.278 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:37:30.278 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:37:30.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:37:30.286 [DEBUG] [Thread-129448] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:37:32.875 [DEBUG] [Thread-129450 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:37:47.934 [DEBUG] [Thread-129451 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:38:00.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T14:38:00.303 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T14:38:00.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T14:38:00.531 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:38:00.532 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:38:01.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 14, 37, 56), 32.64, 11.08, 0.0, 32.22, 26.93, 0, 0, 0, 2, 0, 0),)
2025-12-31T14:38:01.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 14:37:56
2025-12-31T14:38:01.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T14:38:01.283 [DEBUG] [Thread-129452] [transport.py] [_log()] starting thread (client mode): 0xb95f1d50
2025-12-31T14:38:01.283 [DEBUG] [Thread-129452] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:38:01.303 [DEBUG] [Thread-129452] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T14:38:01.303 [INFO] [Thread-129452] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T14:38:01.306 [DEBUG] [Thread-129452] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:38:01.306 [DEBUG] [Thread-129452] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T14:38:01.306 [DEBUG] [Thread-129452] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:38:01.306 [DEBUG] [Thread-129452] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:38:01.307 [DEBUG] [Thread-129452] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:38:01.307 [DEBUG] [Thread-129452] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:38:01.307 [DEBUG] [Thread-129452] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:38:01.307 [DEBUG] [Thread-129452] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:38:01.307 [DEBUG] [Thread-129452] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:38:01.307 [DEBUG] [Thread-129452] [transport.py] [_log()] client lang: <none>
2025-12-31T14:38:01.307 [DEBUG] [Thread-129452] [transport.py] [_log()] server lang: <none>
2025-12-31T14:38:01.307 [DEBUG] [Thread-129452] [transport.py] [_log()] kex follows: False
2025-12-31T14:38:01.307 [DEBUG] [Thread-129452] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:38:01.307 [DEBUG] [Thread-129452] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:38:01.307 [DEBUG] [Thread-129452] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:38:01.307 [DEBUG] [Thread-129452] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:38:01.307 [DEBUG] [Thread-129452] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:38:01.307 [DEBUG] [Thread-129452] [transport.py] [_log()] Compression: none
2025-12-31T14:38:01.307 [DEBUG] [Thread-129452] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:38:01.325 [DEBUG] [Thread-129452] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:38:01.326 [DEBUG] [Thread-129452] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:38:01.327 [DEBUG] [Thread-129452] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T14:38:01.327 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T14:38:01.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:38:01.330 [DEBUG] [Thread-129452] [transport.py] [_log()] userauth is OK
2025-12-31T14:38:01.330 [DEBUG] [Thread-129452] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:38:01.330 [DEBUG] [Thread-129452] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:38:01.330 [DEBUG] [Thread-129452] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T14:38:01.330 [DEBUG] [Thread-129452] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:38:01.355 [INFO] [Thread-129452] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:38:01.356 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:38:02.008 [DEBUG] [Thread-129452] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:38:02.008 [DEBUG] [Thread-129452] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:38:02.008 [DEBUG] [Thread-129452] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T14:38:02.049 [DEBUG] [Thread-129452] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:38:02.050 [DEBUG] [Thread-129452] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:38:02.052 [DEBUG] [Thread-129452] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:38:02.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:38:02.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T14:38:02.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T14:38:02.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T14:38:02.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:38:02.070 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T14:38:02.070 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:38:02.070 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:38:02.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T14:38:02.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.525836 -999.00  +27.20  22.33     16   -0.30 1 1 1 1 1   888    0 23.42 -135.84 ----- 29.7 22.3 287.0 33.6 32.8 -25.2 32.6 -23.2 32.2 -24.0 33.1 -24.5
2025-12-31T14:38:02.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T14:38:02.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T14:38:02.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.525836
2025-12-31T14:38:02.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T14:38:02.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T14:38:02.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T14:38:02.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T14:38:02.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T14:38:02.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T14:37:56', tmtdew=32.64, humidity=11.08, cloud=0.0, wind=32.22, temperature=26.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T12:37:12.230', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T14:38:02.072 [DEBUG] [Thread-129452] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:38:02.153 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T14:38:02.165 [DEBUG] [Thread-129455] [transport.py] [_log()] starting thread (client mode): 0xb95f2050
2025-12-31T14:38:02.166 [DEBUG] [Thread-129455] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:38:02.180 [DEBUG] [Thread-129455] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T14:38:02.180 [INFO] [Thread-129455] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T14:38:02.187 [DEBUG] [Thread-129455] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:38:02.188 [DEBUG] [Thread-129455] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T14:38:02.188 [DEBUG] [Thread-129455] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:38:02.188 [DEBUG] [Thread-129455] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:38:02.188 [DEBUG] [Thread-129455] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:38:02.188 [DEBUG] [Thread-129455] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:38:02.188 [DEBUG] [Thread-129455] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:38:02.188 [DEBUG] [Thread-129455] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:38:02.188 [DEBUG] [Thread-129455] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:38:02.188 [DEBUG] [Thread-129455] [transport.py] [_log()] client lang: <none>
2025-12-31T14:38:02.188 [DEBUG] [Thread-129455] [transport.py] [_log()] server lang: <none>
2025-12-31T14:38:02.188 [DEBUG] [Thread-129455] [transport.py] [_log()] kex follows: False
2025-12-31T14:38:02.188 [DEBUG] [Thread-129455] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:38:02.188 [DEBUG] [Thread-129455] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:38:02.188 [DEBUG] [Thread-129455] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:38:02.188 [DEBUG] [Thread-129455] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:38:02.188 [DEBUG] [Thread-129455] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:38:02.189 [DEBUG] [Thread-129455] [transport.py] [_log()] Compression: none
2025-12-31T14:38:02.189 [DEBUG] [Thread-129455] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:38:02.247 [DEBUG] [Thread-129455] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:38:02.247 [DEBUG] [Thread-129455] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:38:02.248 [DEBUG] [Thread-129455] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T14:38:02.248 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T14:38:02.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:38:02.302 [DEBUG] [Thread-129455] [transport.py] [_log()] userauth is OK
2025-12-31T14:38:02.302 [DEBUG] [Thread-129455] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:38:02.302 [DEBUG] [Thread-129455] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:38:02.303 [DEBUG] [Thread-129455] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T14:38:02.303 [DEBUG] [Thread-129455] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:38:02.322 [INFO] [Thread-129455] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:38:02.322 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T14:38:02.323 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:38:02.970 [DEBUG] [Thread-129457 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:38:03.176 [DEBUG] [Thread-129455] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:38:03.176 [DEBUG] [Thread-129455] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:38:03.224 [DEBUG] [Thread-129455] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:38:03.224 [DEBUG] [Thread-129455] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:38:03.233 [DEBUG] [Thread-129455] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:38:03.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:38:03.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T14:38:03.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T14:38:03.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:38:03.262 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:38:03.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:38:03.270 [DEBUG] [Thread-129455] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:38:18.017 [DEBUG] [Thread-129458 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:38:19.027 [DEBUG] [Thread-129459 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:38:33.047 [DEBUG] [Thread-129460 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:38:33.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T14:38:33.293 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T14:38:33.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T14:38:34.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 14, 38, 28), 32.42, 11.2, 0.0, 31.92, 26.64, 0, 0, 0, 2, 0, 0),)
2025-12-31T14:38:34.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 14:38:28
2025-12-31T14:38:34.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T14:38:34.283 [DEBUG] [Thread-129461] [transport.py] [_log()] starting thread (client mode): 0xb6bbed10
2025-12-31T14:38:34.283 [DEBUG] [Thread-129461] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:38:34.303 [DEBUG] [Thread-129461] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T14:38:34.303 [INFO] [Thread-129461] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T14:38:34.306 [DEBUG] [Thread-129461] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:38:34.306 [DEBUG] [Thread-129461] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T14:38:34.306 [DEBUG] [Thread-129461] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:38:34.306 [DEBUG] [Thread-129461] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:38:34.306 [DEBUG] [Thread-129461] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:38:34.306 [DEBUG] [Thread-129461] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:38:34.306 [DEBUG] [Thread-129461] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:38:34.306 [DEBUG] [Thread-129461] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:38:34.306 [DEBUG] [Thread-129461] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:38:34.306 [DEBUG] [Thread-129461] [transport.py] [_log()] client lang: <none>
2025-12-31T14:38:34.306 [DEBUG] [Thread-129461] [transport.py] [_log()] server lang: <none>
2025-12-31T14:38:34.306 [DEBUG] [Thread-129461] [transport.py] [_log()] kex follows: False
2025-12-31T14:38:34.306 [DEBUG] [Thread-129461] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:38:34.306 [DEBUG] [Thread-129461] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:38:34.306 [DEBUG] [Thread-129461] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:38:34.306 [DEBUG] [Thread-129461] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:38:34.306 [DEBUG] [Thread-129461] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:38:34.306 [DEBUG] [Thread-129461] [transport.py] [_log()] Compression: none
2025-12-31T14:38:34.306 [DEBUG] [Thread-129461] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:38:34.325 [DEBUG] [Thread-129461] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:38:34.325 [DEBUG] [Thread-129461] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:38:34.326 [DEBUG] [Thread-129461] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T14:38:34.326 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T14:38:34.327 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:38:34.328 [DEBUG] [Thread-129461] [transport.py] [_log()] userauth is OK
2025-12-31T14:38:34.328 [DEBUG] [Thread-129461] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:38:34.328 [DEBUG] [Thread-129461] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:38:34.328 [DEBUG] [Thread-129461] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T14:38:34.329 [DEBUG] [Thread-129461] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:38:34.353 [INFO] [Thread-129461] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:38:34.354 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:38:35.106 [DEBUG] [Thread-129461] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:38:35.107 [DEBUG] [Thread-129461] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:38:35.107 [DEBUG] [Thread-129461] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T14:38:35.148 [DEBUG] [Thread-129461] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:38:35.148 [DEBUG] [Thread-129461] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:38:35.151 [DEBUG] [Thread-129461] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:38:35.158 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:38:35.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T14:38:35.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T14:38:35.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T14:38:35.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:38:35.168 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T14:38:35.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:38:35.169 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:38:35.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T14:38:35.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.526184 -999.00  +27.10  24.49     16   -0.40 1 1 1 1 1   888    0 23.42 -144.62 ----- 28.4 24.5 288.4 35.4 32.6 -25.1 32.4 -23.2 32.3 -26.4 33.0 -23.7
2025-12-31T14:38:35.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T14:38:35.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T14:38:35.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.526184
2025-12-31T14:38:35.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T14:38:35.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T14:38:35.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T14:38:35.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T14:38:35.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T14:38:35.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T14:38:28', tmtdew=32.42, humidity=11.2, cloud=0.0, wind=31.92, temperature=26.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T12:37:42.298', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T14:38:35.171 [DEBUG] [Thread-129461] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:38:35.254 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T14:38:35.265 [DEBUG] [Thread-129464] [transport.py] [_log()] starting thread (client mode): 0xb6bb2a70
2025-12-31T14:38:35.266 [DEBUG] [Thread-129464] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:38:35.281 [DEBUG] [Thread-129464] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T14:38:35.281 [INFO] [Thread-129464] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T14:38:35.288 [DEBUG] [Thread-129464] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:38:35.288 [DEBUG] [Thread-129464] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T14:38:35.288 [DEBUG] [Thread-129464] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:38:35.289 [DEBUG] [Thread-129464] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:38:35.289 [DEBUG] [Thread-129464] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:38:35.289 [DEBUG] [Thread-129464] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:38:35.289 [DEBUG] [Thread-129464] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:38:35.289 [DEBUG] [Thread-129464] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:38:35.289 [DEBUG] [Thread-129464] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:38:35.289 [DEBUG] [Thread-129464] [transport.py] [_log()] client lang: <none>
2025-12-31T14:38:35.289 [DEBUG] [Thread-129464] [transport.py] [_log()] server lang: <none>
2025-12-31T14:38:35.289 [DEBUG] [Thread-129464] [transport.py] [_log()] kex follows: False
2025-12-31T14:38:35.289 [DEBUG] [Thread-129464] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:38:35.289 [DEBUG] [Thread-129464] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:38:35.289 [DEBUG] [Thread-129464] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:38:35.289 [DEBUG] [Thread-129464] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:38:35.289 [DEBUG] [Thread-129464] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:38:35.289 [DEBUG] [Thread-129464] [transport.py] [_log()] Compression: none
2025-12-31T14:38:35.289 [DEBUG] [Thread-129464] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:38:35.346 [DEBUG] [Thread-129464] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:38:35.346 [DEBUG] [Thread-129464] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:38:35.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T14:38:35.348 [DEBUG] [Thread-129464] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T14:38:35.348 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:38:35.402 [DEBUG] [Thread-129464] [transport.py] [_log()] userauth is OK
2025-12-31T14:38:35.402 [DEBUG] [Thread-129464] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:38:35.403 [DEBUG] [Thread-129464] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:38:35.403 [DEBUG] [Thread-129464] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T14:38:35.403 [DEBUG] [Thread-129464] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:38:35.420 [INFO] [Thread-129464] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:38:35.420 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T14:38:35.420 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:38:36.229 [DEBUG] [Thread-129464] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:38:36.229 [DEBUG] [Thread-129464] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:38:36.277 [DEBUG] [Thread-129464] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:38:36.277 [DEBUG] [Thread-129464] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:38:36.286 [DEBUG] [Thread-129464] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:38:36.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:38:36.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T14:38:36.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T14:38:36.314 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:38:36.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:38:36.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:38:36.323 [DEBUG] [Thread-129464] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:38:48.084 [DEBUG] [Thread-129466 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:39:00.671 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:39:00.672 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:39:03.131 [DEBUG] [Thread-129467 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:39:06.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T14:39:06.338 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T14:39:06.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T14:39:07.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 14, 39), 32.35, 11.31, 0.0, 29.52, 26.87, 0, 0, 0, 2, 0, 0),)
2025-12-31T14:39:07.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 14:39:00
2025-12-31T14:39:07.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T14:39:07.307 [DEBUG] [Thread-129468] [transport.py] [_log()] starting thread (client mode): 0xb6bb1630
2025-12-31T14:39:07.307 [DEBUG] [Thread-129468] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:39:07.326 [DEBUG] [Thread-129468] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T14:39:07.326 [INFO] [Thread-129468] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T14:39:07.329 [DEBUG] [Thread-129468] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:39:07.329 [DEBUG] [Thread-129468] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T14:39:07.329 [DEBUG] [Thread-129468] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:39:07.329 [DEBUG] [Thread-129468] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:39:07.329 [DEBUG] [Thread-129468] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:39:07.329 [DEBUG] [Thread-129468] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:39:07.329 [DEBUG] [Thread-129468] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:39:07.329 [DEBUG] [Thread-129468] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:39:07.329 [DEBUG] [Thread-129468] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:39:07.329 [DEBUG] [Thread-129468] [transport.py] [_log()] client lang: <none>
2025-12-31T14:39:07.329 [DEBUG] [Thread-129468] [transport.py] [_log()] server lang: <none>
2025-12-31T14:39:07.329 [DEBUG] [Thread-129468] [transport.py] [_log()] kex follows: False
2025-12-31T14:39:07.329 [DEBUG] [Thread-129468] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:39:07.329 [DEBUG] [Thread-129468] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:39:07.329 [DEBUG] [Thread-129468] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:39:07.329 [DEBUG] [Thread-129468] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:39:07.329 [DEBUG] [Thread-129468] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:39:07.329 [DEBUG] [Thread-129468] [transport.py] [_log()] Compression: none
2025-12-31T14:39:07.329 [DEBUG] [Thread-129468] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:39:07.346 [DEBUG] [Thread-129468] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:39:07.346 [DEBUG] [Thread-129468] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:39:07.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T14:39:07.348 [DEBUG] [Thread-129468] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T14:39:07.348 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:39:07.350 [DEBUG] [Thread-129468] [transport.py] [_log()] userauth is OK
2025-12-31T14:39:07.350 [DEBUG] [Thread-129468] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:39:07.350 [DEBUG] [Thread-129468] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:39:07.350 [DEBUG] [Thread-129468] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T14:39:07.350 [DEBUG] [Thread-129468] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:39:07.369 [INFO] [Thread-129468] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:39:07.369 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:39:07.998 [DEBUG] [Thread-129468] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:39:07.998 [DEBUG] [Thread-129468] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:39:07.999 [DEBUG] [Thread-129468] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T14:39:08.039 [DEBUG] [Thread-129468] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:39:08.039 [DEBUG] [Thread-129468] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:39:08.042 [DEBUG] [Thread-129468] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:39:08.055 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:39:08.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T14:39:08.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T14:39:08.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T14:39:08.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:39:08.066 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T14:39:08.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:39:08.066 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:39:08.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T14:39:08.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.526531 -999.00  +26.20  30.15     17   -0.70 1 1 2 1 1   888    0 22.80 -170.51 ----- 21.5 30.1 284.7 34.0 32.3 -26.1 32.3 -24.3 32.0 -30.2 32.8 -24.1
2025-12-31T14:39:08.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T14:39:08.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T14:39:08.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.526531
2025-12-31T14:39:08.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T14:39:08.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T14:39:08.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T14:39:08.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T14:39:08.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T14:39:08.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T14:39:00', tmtdew=32.35, humidity=11.31, cloud=0.0, wind=29.52, temperature=26.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T12:38:12.278', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T14:39:08.069 [DEBUG] [Thread-129468] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:39:08.153 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T14:39:08.165 [DEBUG] [Thread-129471] [transport.py] [_log()] starting thread (client mode): 0xb6bb39a0
2025-12-31T14:39:08.165 [DEBUG] [Thread-129471] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:39:08.181 [DEBUG] [Thread-129471] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T14:39:08.181 [INFO] [Thread-129471] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T14:39:08.188 [DEBUG] [Thread-129471] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:39:08.189 [DEBUG] [Thread-129471] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T14:39:08.189 [DEBUG] [Thread-129471] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:39:08.189 [DEBUG] [Thread-129471] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:39:08.189 [DEBUG] [Thread-129471] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:39:08.189 [DEBUG] [Thread-129471] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:39:08.189 [DEBUG] [Thread-129471] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:39:08.189 [DEBUG] [Thread-129471] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:39:08.189 [DEBUG] [Thread-129471] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:39:08.189 [DEBUG] [Thread-129471] [transport.py] [_log()] client lang: <none>
2025-12-31T14:39:08.190 [DEBUG] [Thread-129471] [transport.py] [_log()] server lang: <none>
2025-12-31T14:39:08.190 [DEBUG] [Thread-129471] [transport.py] [_log()] kex follows: False
2025-12-31T14:39:08.190 [DEBUG] [Thread-129471] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:39:08.190 [DEBUG] [Thread-129471] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:39:08.190 [DEBUG] [Thread-129471] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:39:08.190 [DEBUG] [Thread-129471] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:39:08.190 [DEBUG] [Thread-129471] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:39:08.190 [DEBUG] [Thread-129471] [transport.py] [_log()] Compression: none
2025-12-31T14:39:08.190 [DEBUG] [Thread-129471] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:39:08.246 [DEBUG] [Thread-129471] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:39:08.246 [DEBUG] [Thread-129471] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:39:08.247 [DEBUG] [Thread-129471] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T14:39:08.247 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T14:39:08.248 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:39:08.302 [DEBUG] [Thread-129471] [transport.py] [_log()] userauth is OK
2025-12-31T14:39:08.302 [DEBUG] [Thread-129471] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:39:08.302 [DEBUG] [Thread-129471] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:39:08.302 [DEBUG] [Thread-129471] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T14:39:08.302 [DEBUG] [Thread-129471] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:39:08.321 [INFO] [Thread-129471] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:39:08.321 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T14:39:08.322 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:39:09.166 [DEBUG] [Thread-129471] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:39:09.166 [DEBUG] [Thread-129471] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:39:09.214 [DEBUG] [Thread-129471] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:39:09.214 [DEBUG] [Thread-129471] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:39:09.223 [DEBUG] [Thread-129471] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:39:09.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:39:09.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T14:39:09.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T14:39:09.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:39:09.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:39:09.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:39:09.260 [DEBUG] [Thread-129471] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:39:18.164 [DEBUG] [Thread-129473 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:39:19.081 [DEBUG] [Thread-129474 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:39:33.222 [DEBUG] [Thread-129475 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:39:39.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T14:39:39.255 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T14:39:39.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T14:39:39.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 14, 39, 32), 32.23, 11.36, 0.0, 27.54, 26.64, 0, 0, 0, 2, 0, 0),)
2025-12-31T14:39:39.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 14:39:32
2025-12-31T14:39:40.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T14:39:40.261 [DEBUG] [Thread-129476] [transport.py] [_log()] starting thread (client mode): 0xb6bbfdc0
2025-12-31T14:39:40.261 [DEBUG] [Thread-129476] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:39:40.276 [DEBUG] [Thread-129476] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T14:39:40.276 [INFO] [Thread-129476] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T14:39:40.278 [DEBUG] [Thread-129476] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:39:40.278 [DEBUG] [Thread-129476] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T14:39:40.278 [DEBUG] [Thread-129476] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:39:40.278 [DEBUG] [Thread-129476] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:39:40.278 [DEBUG] [Thread-129476] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:39:40.278 [DEBUG] [Thread-129476] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:39:40.278 [DEBUG] [Thread-129476] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:39:40.278 [DEBUG] [Thread-129476] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:39:40.278 [DEBUG] [Thread-129476] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:39:40.278 [DEBUG] [Thread-129476] [transport.py] [_log()] client lang: <none>
2025-12-31T14:39:40.278 [DEBUG] [Thread-129476] [transport.py] [_log()] server lang: <none>
2025-12-31T14:39:40.278 [DEBUG] [Thread-129476] [transport.py] [_log()] kex follows: False
2025-12-31T14:39:40.278 [DEBUG] [Thread-129476] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:39:40.278 [DEBUG] [Thread-129476] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:39:40.278 [DEBUG] [Thread-129476] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:39:40.278 [DEBUG] [Thread-129476] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:39:40.278 [DEBUG] [Thread-129476] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:39:40.278 [DEBUG] [Thread-129476] [transport.py] [_log()] Compression: none
2025-12-31T14:39:40.278 [DEBUG] [Thread-129476] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:39:40.287 [DEBUG] [Thread-129476] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:39:40.287 [DEBUG] [Thread-129476] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:39:40.287 [DEBUG] [Thread-129476] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T14:39:40.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T14:39:40.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:39:40.289 [DEBUG] [Thread-129476] [transport.py] [_log()] userauth is OK
2025-12-31T14:39:40.289 [DEBUG] [Thread-129476] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:39:40.289 [DEBUG] [Thread-129476] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:39:40.289 [DEBUG] [Thread-129476] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T14:39:40.289 [DEBUG] [Thread-129476] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:39:40.308 [INFO] [Thread-129476] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:39:40.308 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:39:41.101 [DEBUG] [Thread-129476] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:39:41.102 [DEBUG] [Thread-129476] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:39:41.102 [DEBUG] [Thread-129476] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T14:39:41.142 [DEBUG] [Thread-129476] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:39:41.143 [DEBUG] [Thread-129476] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:39:41.146 [DEBUG] [Thread-129476] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:39:41.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:39:41.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T14:39:41.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T14:39:41.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T14:39:41.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:39:41.169 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T14:39:41.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:39:41.169 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:39:41.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T14:39:41.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.526878 -999.00  +26.60  26.04     16   -0.60 1 1 1 1 1   888    0 22.52 -174.85 ----- 25.6 26.0 275.2 33.4 32.5 -25.8 32.4 -21.7 32.2 -26.4 32.9 -23.9
2025-12-31T14:39:41.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T14:39:41.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T14:39:41.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.526878
2025-12-31T14:39:41.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T14:39:41.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T14:39:41.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T14:39:41.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T14:39:41.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T14:39:41.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T14:39:32', tmtdew=32.23, humidity=11.36, cloud=0.0, wind=27.54, temperature=26.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T12:38:42.259', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T14:39:41.171 [DEBUG] [Thread-129476] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:39:41.253 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T14:39:41.265 [DEBUG] [Thread-129479] [transport.py] [_log()] starting thread (client mode): 0xb95f0b80
2025-12-31T14:39:41.265 [DEBUG] [Thread-129479] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:39:41.279 [DEBUG] [Thread-129479] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T14:39:41.279 [INFO] [Thread-129479] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T14:39:41.286 [DEBUG] [Thread-129479] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:39:41.286 [DEBUG] [Thread-129479] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T14:39:41.287 [DEBUG] [Thread-129479] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:39:41.287 [DEBUG] [Thread-129479] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:39:41.287 [DEBUG] [Thread-129479] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:39:41.287 [DEBUG] [Thread-129479] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:39:41.287 [DEBUG] [Thread-129479] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:39:41.287 [DEBUG] [Thread-129479] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:39:41.287 [DEBUG] [Thread-129479] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:39:41.287 [DEBUG] [Thread-129479] [transport.py] [_log()] client lang: <none>
2025-12-31T14:39:41.287 [DEBUG] [Thread-129479] [transport.py] [_log()] server lang: <none>
2025-12-31T14:39:41.287 [DEBUG] [Thread-129479] [transport.py] [_log()] kex follows: False
2025-12-31T14:39:41.287 [DEBUG] [Thread-129479] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:39:41.287 [DEBUG] [Thread-129479] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:39:41.287 [DEBUG] [Thread-129479] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:39:41.287 [DEBUG] [Thread-129479] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:39:41.287 [DEBUG] [Thread-129479] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:39:41.287 [DEBUG] [Thread-129479] [transport.py] [_log()] Compression: none
2025-12-31T14:39:41.287 [DEBUG] [Thread-129479] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:39:41.344 [DEBUG] [Thread-129479] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:39:41.345 [DEBUG] [Thread-129479] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:39:41.345 [DEBUG] [Thread-129479] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T14:39:41.346 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T14:39:41.346 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:39:41.402 [DEBUG] [Thread-129479] [transport.py] [_log()] userauth is OK
2025-12-31T14:39:41.402 [DEBUG] [Thread-129479] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:39:41.402 [DEBUG] [Thread-129479] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:39:41.402 [DEBUG] [Thread-129479] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T14:39:41.402 [DEBUG] [Thread-129479] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:39:41.421 [INFO] [Thread-129479] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:39:41.422 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T14:39:41.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:39:42.249 [DEBUG] [Thread-129479] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:39:42.249 [DEBUG] [Thread-129479] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:39:42.296 [DEBUG] [Thread-129479] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:39:42.297 [DEBUG] [Thread-129479] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:39:42.306 [DEBUG] [Thread-129479] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:39:42.315 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:39:42.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-12-31T14:39:42.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T14:39:42.333 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:39:42.334 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:39:42.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:39:42.342 [DEBUG] [Thread-129479] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:39:48.253 [DEBUG] [Thread-129481 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:40:00.812 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:40:00.813 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:40:03.307 [DEBUG] [Thread-129482 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:40:12.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T14:40:12.355 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T14:40:12.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-12-31T14:40:13.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 14, 40, 5), 32.15, 11.44, 0.0, 25.52, 26.7, 0, 0, 0, 2, 0, 0),)
2025-12-31T14:40:13.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 14:40:05
2025-12-31T14:40:13.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T14:40:13.352 [DEBUG] [Thread-129483] [transport.py] [_log()] starting thread (client mode): 0xb6b17550
2025-12-31T14:40:13.352 [DEBUG] [Thread-129483] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:40:13.370 [DEBUG] [Thread-129483] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T14:40:13.370 [INFO] [Thread-129483] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T14:40:13.374 [DEBUG] [Thread-129483] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:40:13.374 [DEBUG] [Thread-129483] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T14:40:13.374 [DEBUG] [Thread-129483] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:40:13.374 [DEBUG] [Thread-129483] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:40:13.374 [DEBUG] [Thread-129483] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:40:13.374 [DEBUG] [Thread-129483] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:40:13.374 [DEBUG] [Thread-129483] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:40:13.374 [DEBUG] [Thread-129483] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:40:13.374 [DEBUG] [Thread-129483] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:40:13.374 [DEBUG] [Thread-129483] [transport.py] [_log()] client lang: <none>
2025-12-31T14:40:13.374 [DEBUG] [Thread-129483] [transport.py] [_log()] server lang: <none>
2025-12-31T14:40:13.374 [DEBUG] [Thread-129483] [transport.py] [_log()] kex follows: False
2025-12-31T14:40:13.374 [DEBUG] [Thread-129483] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:40:13.374 [DEBUG] [Thread-129483] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:40:13.374 [DEBUG] [Thread-129483] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:40:13.374 [DEBUG] [Thread-129483] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:40:13.374 [DEBUG] [Thread-129483] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:40:13.374 [DEBUG] [Thread-129483] [transport.py] [_log()] Compression: none
2025-12-31T14:40:13.374 [DEBUG] [Thread-129483] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:40:13.381 [DEBUG] [Thread-129483] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:40:13.381 [DEBUG] [Thread-129483] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:40:13.381 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T14:40:13.382 [DEBUG] [Thread-129483] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T14:40:13.382 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:40:13.382 [DEBUG] [Thread-129483] [transport.py] [_log()] userauth is OK
2025-12-31T14:40:13.382 [DEBUG] [Thread-129483] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:40:13.382 [DEBUG] [Thread-129483] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:40:13.382 [DEBUG] [Thread-129483] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T14:40:13.382 [DEBUG] [Thread-129483] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:40:13.392 [INFO] [Thread-129483] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:40:13.393 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:40:17.320 [DEBUG] [Thread-129483] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:40:17.320 [DEBUG] [Thread-129483] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:40:17.320 [DEBUG] [Thread-129483] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T14:40:17.362 [DEBUG] [Thread-129483] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:40:17.362 [DEBUG] [Thread-129483] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:40:17.364 [DEBUG] [Thread-129483] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:40:17.488 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:40:17.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T14:40:17.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T14:40:17.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T14:40:17.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:40:17.552 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T14:40:17.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:40:17.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:40:17.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T14:40:17.552 [WARNING] [poll_weather_worker] [driver.py] [poll_weather_state()] Unable to get atlas cloud data: list index out of range
2025-12-31T14:40:17.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T14:40:05', tmtdew=32.15, humidity=11.44, cloud=0.0, wind=25.52, temperature=26.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp=None, atlas_cloud=None, atlas_rain=None, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T14:40:17.554 [DEBUG] [Thread-129483] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:40:17.625 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T14:40:17.637 [DEBUG] [Thread-129486] [transport.py] [_log()] starting thread (client mode): 0xb6bbfb50
2025-12-31T14:40:17.637 [DEBUG] [Thread-129486] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:40:17.652 [DEBUG] [Thread-129486] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T14:40:17.652 [INFO] [Thread-129486] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T14:40:17.660 [DEBUG] [Thread-129486] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:40:17.660 [DEBUG] [Thread-129486] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T14:40:17.660 [DEBUG] [Thread-129486] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:40:17.660 [DEBUG] [Thread-129486] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:40:17.660 [DEBUG] [Thread-129486] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:40:17.660 [DEBUG] [Thread-129486] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:40:17.660 [DEBUG] [Thread-129486] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:40:17.660 [DEBUG] [Thread-129486] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:40:17.660 [DEBUG] [Thread-129486] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:40:17.660 [DEBUG] [Thread-129486] [transport.py] [_log()] client lang: <none>
2025-12-31T14:40:17.660 [DEBUG] [Thread-129486] [transport.py] [_log()] server lang: <none>
2025-12-31T14:40:17.660 [DEBUG] [Thread-129486] [transport.py] [_log()] kex follows: False
2025-12-31T14:40:17.660 [DEBUG] [Thread-129486] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:40:17.660 [DEBUG] [Thread-129486] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:40:17.660 [DEBUG] [Thread-129486] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:40:17.660 [DEBUG] [Thread-129486] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:40:17.660 [DEBUG] [Thread-129486] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:40:17.660 [DEBUG] [Thread-129486] [transport.py] [_log()] Compression: none
2025-12-31T14:40:17.660 [DEBUG] [Thread-129486] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:40:17.715 [DEBUG] [Thread-129486] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:40:17.716 [DEBUG] [Thread-129486] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:40:17.716 [DEBUG] [Thread-129486] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T14:40:17.716 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T14:40:17.716 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:40:17.773 [DEBUG] [Thread-129486] [transport.py] [_log()] userauth is OK
2025-12-31T14:40:17.773 [DEBUG] [Thread-129486] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:40:17.773 [DEBUG] [Thread-129486] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:40:17.773 [DEBUG] [Thread-129486] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T14:40:17.773 [DEBUG] [Thread-129486] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:40:17.787 [INFO] [Thread-129486] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:40:17.787 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T14:40:17.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:40:18.338 [DEBUG] [Thread-129488 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:40:18.621 [DEBUG] [Thread-129486] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:40:18.621 [DEBUG] [Thread-129486] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:40:18.668 [DEBUG] [Thread-129486] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:40:18.668 [DEBUG] [Thread-129486] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:40:18.676 [DEBUG] [Thread-129486] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:40:18.684 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:40:18.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T14:40:18.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T14:40:18.700 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:40:18.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:40:18.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:40:18.709 [DEBUG] [Thread-129486] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:40:19.129 [DEBUG] [Thread-129489 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:40:33.389 [DEBUG] [Thread-129490 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:40:48.428 [DEBUG] [Thread-129491 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:40:48.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T14:40:48.731 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T14:40:48.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T14:40:49.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 14, 40, 37), 32.66, 11.08, 0.0, 24.9, 26.54, 0, 0, 0, 2, 0, 0),)
2025-12-31T14:40:49.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 14:40:37
2025-12-31T14:40:49.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T14:40:49.704 [DEBUG] [Thread-129492] [transport.py] [_log()] starting thread (client mode): 0xb955a9b0
2025-12-31T14:40:49.704 [DEBUG] [Thread-129492] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:40:49.723 [DEBUG] [Thread-129492] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T14:40:49.724 [INFO] [Thread-129492] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T14:40:49.727 [DEBUG] [Thread-129492] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:40:49.727 [DEBUG] [Thread-129492] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T14:40:49.727 [DEBUG] [Thread-129492] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:40:49.727 [DEBUG] [Thread-129492] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:40:49.727 [DEBUG] [Thread-129492] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:40:49.727 [DEBUG] [Thread-129492] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:40:49.727 [DEBUG] [Thread-129492] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:40:49.727 [DEBUG] [Thread-129492] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:40:49.727 [DEBUG] [Thread-129492] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:40:49.727 [DEBUG] [Thread-129492] [transport.py] [_log()] client lang: <none>
2025-12-31T14:40:49.727 [DEBUG] [Thread-129492] [transport.py] [_log()] server lang: <none>
2025-12-31T14:40:49.727 [DEBUG] [Thread-129492] [transport.py] [_log()] kex follows: False
2025-12-31T14:40:49.727 [DEBUG] [Thread-129492] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:40:49.727 [DEBUG] [Thread-129492] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:40:49.727 [DEBUG] [Thread-129492] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:40:49.727 [DEBUG] [Thread-129492] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:40:49.727 [DEBUG] [Thread-129492] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:40:49.727 [DEBUG] [Thread-129492] [transport.py] [_log()] Compression: none
2025-12-31T14:40:49.727 [DEBUG] [Thread-129492] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:40:49.743 [DEBUG] [Thread-129492] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:40:49.744 [DEBUG] [Thread-129492] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:40:49.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T14:40:49.745 [DEBUG] [Thread-129492] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T14:40:49.746 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:40:49.747 [DEBUG] [Thread-129492] [transport.py] [_log()] userauth is OK
2025-12-31T14:40:49.747 [DEBUG] [Thread-129492] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:40:49.747 [DEBUG] [Thread-129492] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:40:49.747 [DEBUG] [Thread-129492] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T14:40:49.747 [DEBUG] [Thread-129492] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:40:49.772 [INFO] [Thread-129492] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:40:49.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:40:50.365 [DEBUG] [Thread-129492] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:40:50.365 [DEBUG] [Thread-129492] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:40:50.366 [DEBUG] [Thread-129492] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T14:40:50.406 [DEBUG] [Thread-129492] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:40:50.406 [DEBUG] [Thread-129492] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:40:50.410 [DEBUG] [Thread-129492] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:40:50.422 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:40:50.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T14:40:50.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T14:40:50.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T14:40:50.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:40:50.433 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T14:40:50.433 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:40:50.434 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:40:50.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T14:40:50.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.527920 -999.00  +25.50  27.45     17   -1.20 1 1 1 1 1   888    0 22.54 -176.26 ----- 27.1 27.4 273.0 38.8 31.7 -29.1 31.9 -25.3 31.6 -30.1 32.0 -27.4
2025-12-31T14:40:50.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T14:40:50.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T14:40:50.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.527920
2025-12-31T14:40:50.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T14:40:50.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T14:40:50.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T14:40:50.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T14:40:50.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T14:40:50.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T14:40:37', tmtdew=32.66, humidity=11.08, cloud=0.0, wind=24.9, temperature=26.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T12:40:12.288', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T14:40:50.436 [DEBUG] [Thread-129492] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:40:50.520 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T14:40:50.532 [DEBUG] [Thread-129495] [transport.py] [_log()] starting thread (client mode): 0xb6b14d00
2025-12-31T14:40:50.532 [DEBUG] [Thread-129495] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:40:50.547 [DEBUG] [Thread-129495] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T14:40:50.547 [INFO] [Thread-129495] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T14:40:50.555 [DEBUG] [Thread-129495] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:40:50.555 [DEBUG] [Thread-129495] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T14:40:50.555 [DEBUG] [Thread-129495] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:40:50.555 [DEBUG] [Thread-129495] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:40:50.555 [DEBUG] [Thread-129495] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:40:50.555 [DEBUG] [Thread-129495] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:40:50.555 [DEBUG] [Thread-129495] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:40:50.556 [DEBUG] [Thread-129495] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:40:50.556 [DEBUG] [Thread-129495] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:40:50.556 [DEBUG] [Thread-129495] [transport.py] [_log()] client lang: <none>
2025-12-31T14:40:50.556 [DEBUG] [Thread-129495] [transport.py] [_log()] server lang: <none>
2025-12-31T14:40:50.556 [DEBUG] [Thread-129495] [transport.py] [_log()] kex follows: False
2025-12-31T14:40:50.556 [DEBUG] [Thread-129495] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:40:50.556 [DEBUG] [Thread-129495] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:40:50.556 [DEBUG] [Thread-129495] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:40:50.557 [DEBUG] [Thread-129495] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:40:50.557 [DEBUG] [Thread-129495] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:40:50.557 [DEBUG] [Thread-129495] [transport.py] [_log()] Compression: none
2025-12-31T14:40:50.557 [DEBUG] [Thread-129495] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:40:50.614 [DEBUG] [Thread-129495] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:40:50.614 [DEBUG] [Thread-129495] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:40:50.615 [DEBUG] [Thread-129495] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T14:40:50.615 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T14:40:50.616 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:40:50.673 [DEBUG] [Thread-129495] [transport.py] [_log()] userauth is OK
2025-12-31T14:40:50.673 [DEBUG] [Thread-129495] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:40:50.674 [DEBUG] [Thread-129495] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:40:50.674 [DEBUG] [Thread-129495] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T14:40:50.674 [DEBUG] [Thread-129495] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:40:50.692 [INFO] [Thread-129495] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:40:50.693 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T14:40:50.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:40:51.551 [DEBUG] [Thread-129495] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:40:51.552 [DEBUG] [Thread-129495] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:40:51.600 [DEBUG] [Thread-129495] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:40:51.600 [DEBUG] [Thread-129495] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:40:51.609 [DEBUG] [Thread-129495] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:40:51.618 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:40:51.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T14:40:51.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T14:40:51.636 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:40:51.636 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:40:51.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:40:51.643 [DEBUG] [Thread-129495] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:41:00.953 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:41:00.954 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:41:03.461 [DEBUG] [Thread-129497 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:41:18.516 [DEBUG] [Thread-129498 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:41:19.192 [DEBUG] [Thread-129499 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:41:21.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T14:41:21.647 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T14:41:21.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T14:41:22.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 14, 41, 9), 32.65, 11.08, 0.0, 27.65, 26.5, 0, 0, 0, 2, 0, 0),)
2025-12-31T14:41:22.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 14:41:09
2025-12-31T14:41:22.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T14:41:22.619 [DEBUG] [Thread-129500] [transport.py] [_log()] starting thread (client mode): 0xb6bbcc70
2025-12-31T14:41:22.619 [DEBUG] [Thread-129500] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:41:22.640 [DEBUG] [Thread-129500] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T14:41:22.640 [INFO] [Thread-129500] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T14:41:22.642 [DEBUG] [Thread-129500] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:41:22.642 [DEBUG] [Thread-129500] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T14:41:22.642 [DEBUG] [Thread-129500] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:41:22.642 [DEBUG] [Thread-129500] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:41:22.642 [DEBUG] [Thread-129500] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:41:22.642 [DEBUG] [Thread-129500] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:41:22.642 [DEBUG] [Thread-129500] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:41:22.642 [DEBUG] [Thread-129500] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:41:22.642 [DEBUG] [Thread-129500] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:41:22.642 [DEBUG] [Thread-129500] [transport.py] [_log()] client lang: <none>
2025-12-31T14:41:22.642 [DEBUG] [Thread-129500] [transport.py] [_log()] server lang: <none>
2025-12-31T14:41:22.642 [DEBUG] [Thread-129500] [transport.py] [_log()] kex follows: False
2025-12-31T14:41:22.643 [DEBUG] [Thread-129500] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:41:22.643 [DEBUG] [Thread-129500] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:41:22.643 [DEBUG] [Thread-129500] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:41:22.643 [DEBUG] [Thread-129500] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:41:22.643 [DEBUG] [Thread-129500] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:41:22.643 [DEBUG] [Thread-129500] [transport.py] [_log()] Compression: none
2025-12-31T14:41:22.643 [DEBUG] [Thread-129500] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:41:22.656 [DEBUG] [Thread-129500] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:41:22.657 [DEBUG] [Thread-129500] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:41:22.658 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T14:41:22.658 [DEBUG] [Thread-129500] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T14:41:22.659 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:41:22.660 [DEBUG] [Thread-129500] [transport.py] [_log()] userauth is OK
2025-12-31T14:41:22.660 [DEBUG] [Thread-129500] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:41:22.660 [DEBUG] [Thread-129500] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:41:22.660 [DEBUG] [Thread-129500] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T14:41:22.660 [DEBUG] [Thread-129500] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:41:22.685 [INFO] [Thread-129500] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:41:22.686 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:41:24.234 [DEBUG] [Thread-129500] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:41:24.234 [DEBUG] [Thread-129500] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:41:24.235 [DEBUG] [Thread-129500] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T14:41:24.275 [DEBUG] [Thread-129500] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:41:24.275 [DEBUG] [Thread-129500] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:41:24.279 [DEBUG] [Thread-129500] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:41:24.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:41:24.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T14:41:24.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T14:41:24.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T14:41:24.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:41:24.301 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T14:41:24.301 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:41:24.301 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:41:24.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T14:41:24.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.528267 -999.00  +25.40  22.10     17   -1.00 1 2 1 1 1   888    0 21.70 -197.68 ----- 23.8 22.1 279.4 34.4 31.6 -26.6 31.8 -22.9 31.1 -23.0 31.8 -25.7
2025-12-31T14:41:24.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T14:41:24.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T14:41:24.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.528267
2025-12-31T14:41:24.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T14:41:24.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T14:41:24.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T14:41:24.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T14:41:24.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T14:41:24.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T14:41:09', tmtdew=32.65, humidity=11.08, cloud=0.0, wind=27.65, temperature=26.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T12:40:42.269', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T14:41:24.304 [DEBUG] [Thread-129500] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:41:24.388 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T14:41:24.399 [DEBUG] [Thread-129503] [transport.py] [_log()] starting thread (client mode): 0xb6bbe710
2025-12-31T14:41:24.399 [DEBUG] [Thread-129503] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:41:24.414 [DEBUG] [Thread-129503] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T14:41:24.414 [INFO] [Thread-129503] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T14:41:24.422 [DEBUG] [Thread-129503] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:41:24.422 [DEBUG] [Thread-129503] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T14:41:24.422 [DEBUG] [Thread-129503] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:41:24.422 [DEBUG] [Thread-129503] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:41:24.422 [DEBUG] [Thread-129503] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:41:24.422 [DEBUG] [Thread-129503] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:41:24.422 [DEBUG] [Thread-129503] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:41:24.423 [DEBUG] [Thread-129503] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:41:24.423 [DEBUG] [Thread-129503] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:41:24.423 [DEBUG] [Thread-129503] [transport.py] [_log()] client lang: <none>
2025-12-31T14:41:24.423 [DEBUG] [Thread-129503] [transport.py] [_log()] server lang: <none>
2025-12-31T14:41:24.423 [DEBUG] [Thread-129503] [transport.py] [_log()] kex follows: False
2025-12-31T14:41:24.423 [DEBUG] [Thread-129503] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:41:24.423 [DEBUG] [Thread-129503] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:41:24.423 [DEBUG] [Thread-129503] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:41:24.423 [DEBUG] [Thread-129503] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:41:24.423 [DEBUG] [Thread-129503] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:41:24.423 [DEBUG] [Thread-129503] [transport.py] [_log()] Compression: none
2025-12-31T14:41:24.423 [DEBUG] [Thread-129503] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:41:24.481 [DEBUG] [Thread-129503] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:41:24.481 [DEBUG] [Thread-129503] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:41:24.482 [DEBUG] [Thread-129503] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T14:41:24.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T14:41:24.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:41:24.537 [DEBUG] [Thread-129503] [transport.py] [_log()] userauth is OK
2025-12-31T14:41:24.538 [DEBUG] [Thread-129503] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:41:24.538 [DEBUG] [Thread-129503] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:41:24.538 [DEBUG] [Thread-129503] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T14:41:24.538 [DEBUG] [Thread-129503] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:41:24.557 [INFO] [Thread-129503] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:41:24.557 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T14:41:24.558 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:41:25.402 [DEBUG] [Thread-129503] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:41:25.402 [DEBUG] [Thread-129503] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:41:25.449 [DEBUG] [Thread-129503] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:41:25.450 [DEBUG] [Thread-129503] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:41:25.458 [DEBUG] [Thread-129503] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:41:25.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:41: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')
2025-12-31T14:41:25.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T14:41:25.483 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:41:25.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:41:25.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:41:25.491 [DEBUG] [Thread-129503] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:41:33.553 [DEBUG] [Thread-129505 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:41:48.589 [DEBUG] [Thread-129506 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:41:55.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T14:41:55.511 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T14:41:55.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T14:41:56.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 14, 41, 41), 32.45, 11.13, 0.0, 22.11, 26.5, 0, 0, 0, 2, 0, 0),)
2025-12-31T14:41:56.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 14:41:41
2025-12-31T14:41:56.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T14:41:56.518 [DEBUG] [Thread-129507] [transport.py] [_log()] starting thread (client mode): 0xb95589d0
2025-12-31T14:41:56.518 [DEBUG] [Thread-129507] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:41:56.539 [DEBUG] [Thread-129507] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T14:41:56.539 [INFO] [Thread-129507] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T14:41:56.542 [DEBUG] [Thread-129507] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:41:56.542 [DEBUG] [Thread-129507] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T14:41:56.542 [DEBUG] [Thread-129507] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:41:56.542 [DEBUG] [Thread-129507] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:41:56.542 [DEBUG] [Thread-129507] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:41:56.543 [DEBUG] [Thread-129507] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:41:56.543 [DEBUG] [Thread-129507] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:41:56.543 [DEBUG] [Thread-129507] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:41:56.543 [DEBUG] [Thread-129507] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:41:56.543 [DEBUG] [Thread-129507] [transport.py] [_log()] client lang: <none>
2025-12-31T14:41:56.543 [DEBUG] [Thread-129507] [transport.py] [_log()] server lang: <none>
2025-12-31T14:41:56.543 [DEBUG] [Thread-129507] [transport.py] [_log()] kex follows: False
2025-12-31T14:41:56.543 [DEBUG] [Thread-129507] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:41:56.543 [DEBUG] [Thread-129507] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:41:56.543 [DEBUG] [Thread-129507] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:41:56.543 [DEBUG] [Thread-129507] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:41:56.543 [DEBUG] [Thread-129507] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:41:56.543 [DEBUG] [Thread-129507] [transport.py] [_log()] Compression: none
2025-12-31T14:41:56.543 [DEBUG] [Thread-129507] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:41:56.560 [DEBUG] [Thread-129507] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:41:56.561 [DEBUG] [Thread-129507] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:41:56.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T14:41:56.562 [DEBUG] [Thread-129507] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T14:41:56.563 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:41:56.564 [DEBUG] [Thread-129507] [transport.py] [_log()] userauth is OK
2025-12-31T14:41:56.565 [DEBUG] [Thread-129507] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:41:56.565 [DEBUG] [Thread-129507] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:41:56.565 [DEBUG] [Thread-129507] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T14:41:56.565 [DEBUG] [Thread-129507] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:41:56.597 [INFO] [Thread-129507] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:41:56.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:41:57.200 [DEBUG] [Thread-129507] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:41:57.200 [DEBUG] [Thread-129507] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:41:57.201 [DEBUG] [Thread-129507] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T14:41:57.241 [DEBUG] [Thread-129507] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:41:57.241 [DEBUG] [Thread-129507] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:41:57.246 [DEBUG] [Thread-129507] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:41:57.259 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:41:57.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T14:41:57.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T14:41:57.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T14:41:57.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:41:57.271 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T14:41:57.272 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:41:57.272 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:41:57.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T14:41:57.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.528614 -999.00  +25.10  18.35     17   -1.10 1 2 1 1 1   888    0 20.86 -220.96 ----- 18.4 18.4 269.6 28.3 31.5 -25.2 31.5 -22.3 30.7 -23.5 31.6 -24.4
2025-12-31T14:41:57.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T14:41:57.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T14:41:57.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.528614
2025-12-31T14:41:57.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T14:41:57.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T14:41:57.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T14:41:57.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T14:41:57.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T14:41:57.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T14:41:41', tmtdew=32.45, humidity=11.13, cloud=0.0, wind=22.11, temperature=26.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T12:41:12.250', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T14:41:57.274 [DEBUG] [Thread-129507] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:41:57.358 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T14:41:57.371 [DEBUG] [Thread-129510] [transport.py] [_log()] starting thread (client mode): 0xb95b2470
2025-12-31T14:41:57.371 [DEBUG] [Thread-129510] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:41:57.386 [DEBUG] [Thread-129510] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T14:41:57.386 [INFO] [Thread-129510] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T14:41:57.394 [DEBUG] [Thread-129510] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:41:57.394 [DEBUG] [Thread-129510] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T14:41:57.394 [DEBUG] [Thread-129510] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:41:57.394 [DEBUG] [Thread-129510] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:41:57.394 [DEBUG] [Thread-129510] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:41:57.394 [DEBUG] [Thread-129510] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:41:57.394 [DEBUG] [Thread-129510] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:41:57.394 [DEBUG] [Thread-129510] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:41:57.394 [DEBUG] [Thread-129510] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:41:57.394 [DEBUG] [Thread-129510] [transport.py] [_log()] client lang: <none>
2025-12-31T14:41:57.394 [DEBUG] [Thread-129510] [transport.py] [_log()] server lang: <none>
2025-12-31T14:41:57.395 [DEBUG] [Thread-129510] [transport.py] [_log()] kex follows: False
2025-12-31T14:41:57.395 [DEBUG] [Thread-129510] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:41:57.395 [DEBUG] [Thread-129510] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:41:57.395 [DEBUG] [Thread-129510] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:41:57.395 [DEBUG] [Thread-129510] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:41:57.395 [DEBUG] [Thread-129510] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:41:57.395 [DEBUG] [Thread-129510] [transport.py] [_log()] Compression: none
2025-12-31T14:41:57.395 [DEBUG] [Thread-129510] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:41:57.453 [DEBUG] [Thread-129510] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:41:57.453 [DEBUG] [Thread-129510] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:41:57.454 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T14:41:57.454 [DEBUG] [Thread-129510] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T14:41:57.455 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:41:57.509 [DEBUG] [Thread-129510] [transport.py] [_log()] userauth is OK
2025-12-31T14:41:57.509 [DEBUG] [Thread-129510] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:41:57.509 [DEBUG] [Thread-129510] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:41:57.509 [DEBUG] [Thread-129510] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T14:41:57.509 [DEBUG] [Thread-129510] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:41:57.528 [INFO] [Thread-129510] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:41:57.529 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T14:41:57.529 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:41:58.366 [DEBUG] [Thread-129510] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:41:58.366 [DEBUG] [Thread-129510] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:41:58.414 [DEBUG] [Thread-129510] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:41:58.414 [DEBUG] [Thread-129510] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:41:58.423 [DEBUG] [Thread-129510] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:41:58.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:41:58.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T14:41:58.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T14:41:58.451 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:41:58.451 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:41:58.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:41:58.460 [DEBUG] [Thread-129510] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:42:01.092 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:42:01.093 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:42:03.627 [DEBUG] [Thread-129512 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:42:18.684 [DEBUG] [Thread-129513 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:42:19.246 [DEBUG] [Thread-129514 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:42:28.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T14:42:28.482 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T14:42:28.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T14:42:29.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 14, 42, 13), 32.01, 11.44, 0.0, 21.42, 26.29, 0, 0, 0, 2, 0, 0),)
2025-12-31T14:42:29.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 14:42:13
2025-12-31T14:42:29.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T14:42:29.453 [DEBUG] [Thread-129515] [transport.py] [_log()] starting thread (client mode): 0xb9558880
2025-12-31T14:42:29.454 [DEBUG] [Thread-129515] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:42:29.468 [DEBUG] [Thread-129515] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T14:42:29.468 [INFO] [Thread-129515] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T14:42:29.470 [DEBUG] [Thread-129515] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:42:29.470 [DEBUG] [Thread-129515] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T14:42:29.470 [DEBUG] [Thread-129515] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:42:29.470 [DEBUG] [Thread-129515] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:42:29.470 [DEBUG] [Thread-129515] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:42:29.470 [DEBUG] [Thread-129515] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:42:29.470 [DEBUG] [Thread-129515] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:42:29.470 [DEBUG] [Thread-129515] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:42:29.470 [DEBUG] [Thread-129515] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:42:29.470 [DEBUG] [Thread-129515] [transport.py] [_log()] client lang: <none>
2025-12-31T14:42:29.470 [DEBUG] [Thread-129515] [transport.py] [_log()] server lang: <none>
2025-12-31T14:42:29.470 [DEBUG] [Thread-129515] [transport.py] [_log()] kex follows: False
2025-12-31T14:42:29.470 [DEBUG] [Thread-129515] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:42:29.470 [DEBUG] [Thread-129515] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:42:29.470 [DEBUG] [Thread-129515] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:42:29.470 [DEBUG] [Thread-129515] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:42:29.470 [DEBUG] [Thread-129515] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:42:29.470 [DEBUG] [Thread-129515] [transport.py] [_log()] Compression: none
2025-12-31T14:42:29.470 [DEBUG] [Thread-129515] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:42:29.478 [DEBUG] [Thread-129515] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:42:29.479 [DEBUG] [Thread-129515] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:42:29.479 [DEBUG] [Thread-129515] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T14:42:29.479 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T14:42:29.479 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:42:29.480 [DEBUG] [Thread-129515] [transport.py] [_log()] userauth is OK
2025-12-31T14:42:29.480 [DEBUG] [Thread-129515] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:42:29.480 [DEBUG] [Thread-129515] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:42:29.480 [DEBUG] [Thread-129515] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T14:42:29.480 [DEBUG] [Thread-129515] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:42:29.493 [INFO] [Thread-129515] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:42:29.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:42:30.144 [DEBUG] [Thread-129515] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:42:30.145 [DEBUG] [Thread-129515] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:42:30.145 [DEBUG] [Thread-129515] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T14:42:30.185 [DEBUG] [Thread-129515] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:42:30.185 [DEBUG] [Thread-129515] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:42:30.188 [DEBUG] [Thread-129515] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:42:30.201 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:42:30.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T14:42:30.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T14:42:30.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T14:42:30.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:42:30.212 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T14:42:30.212 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:42:30.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:42:30.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T14:42:30.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.528961 -999.00  +25.20  18.08     17   -1.10 1 2 1 1 1   888    0 20.93 -224.71 ----- 17.9 18.1 271.9 23.5 31.6 -23.7 31.7 -21.3 31.3 -21.4 31.7 -23.2
2025-12-31T14:42:30.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T14:42:30.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T14:42:30.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.528961
2025-12-31T14:42:30.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T14:42:30.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T14:42:30.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T14:42:30.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T14:42:30.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T14:42:30.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T14:42:13', tmtdew=32.01, humidity=11.44, cloud=0.0, wind=21.42, temperature=26.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T12:41:42.230', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T14:42:30.215 [DEBUG] [Thread-129515] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:42:30.310 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T14:42:30.321 [DEBUG] [Thread-129518] [transport.py] [_log()] starting thread (client mode): 0xb955a7a0
2025-12-31T14:42:30.322 [DEBUG] [Thread-129518] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:42:30.337 [DEBUG] [Thread-129518] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T14:42:30.337 [INFO] [Thread-129518] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T14:42:30.345 [DEBUG] [Thread-129518] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:42:30.345 [DEBUG] [Thread-129518] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T14:42:30.345 [DEBUG] [Thread-129518] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:42:30.345 [DEBUG] [Thread-129518] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:42:30.345 [DEBUG] [Thread-129518] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:42:30.345 [DEBUG] [Thread-129518] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:42:30.345 [DEBUG] [Thread-129518] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:42:30.345 [DEBUG] [Thread-129518] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:42:30.345 [DEBUG] [Thread-129518] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:42:30.345 [DEBUG] [Thread-129518] [transport.py] [_log()] client lang: <none>
2025-12-31T14:42:30.345 [DEBUG] [Thread-129518] [transport.py] [_log()] server lang: <none>
2025-12-31T14:42:30.345 [DEBUG] [Thread-129518] [transport.py] [_log()] kex follows: False
2025-12-31T14:42:30.345 [DEBUG] [Thread-129518] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:42:30.345 [DEBUG] [Thread-129518] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:42:30.345 [DEBUG] [Thread-129518] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:42:30.346 [DEBUG] [Thread-129518] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:42:30.346 [DEBUG] [Thread-129518] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:42:30.346 [DEBUG] [Thread-129518] [transport.py] [_log()] Compression: none
2025-12-31T14:42:30.346 [DEBUG] [Thread-129518] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:42:30.404 [DEBUG] [Thread-129518] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:42:30.405 [DEBUG] [Thread-129518] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:42:30.406 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T14:42:30.406 [DEBUG] [Thread-129518] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T14:42:30.407 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:42:30.460 [DEBUG] [Thread-129518] [transport.py] [_log()] userauth is OK
2025-12-31T14:42:30.461 [DEBUG] [Thread-129518] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:42:30.461 [DEBUG] [Thread-129518] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:42:30.461 [DEBUG] [Thread-129518] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T14:42:30.461 [DEBUG] [Thread-129518] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:42:30.479 [INFO] [Thread-129518] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:42:30.479 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T14:42:30.480 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:42:31.314 [DEBUG] [Thread-129518] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:42:31.314 [DEBUG] [Thread-129518] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:42:31.362 [DEBUG] [Thread-129518] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:42:31.362 [DEBUG] [Thread-129518] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:42:31.371 [DEBUG] [Thread-129518] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:42:31.381 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:42:31.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T14:42:31.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T14:42:31.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:42:31.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:42:31.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:42:31.409 [DEBUG] [Thread-129518] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:42:33.725 [DEBUG] [Thread-129520 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:42:48.785 [DEBUG] [Thread-129521 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:43:01.233 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:43:01.235 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:43:01.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T14:43:01.432 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T14:43:01.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T14:43:02.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 14, 42, 46), 31.6, 11.78, 0.0, 21.49, 26.21, 0, 0, 0, 2, 0, 0),)
2025-12-31T14:43:02.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 14:42:46
2025-12-31T14:43:02.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T14:43:02.424 [DEBUG] [Thread-129522] [transport.py] [_log()] starting thread (client mode): 0xb6bbf5b0
2025-12-31T14:43:02.424 [DEBUG] [Thread-129522] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:43:02.444 [DEBUG] [Thread-129522] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T14:43:02.444 [INFO] [Thread-129522] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T14:43:02.445 [DEBUG] [Thread-129522] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:43:02.445 [DEBUG] [Thread-129522] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T14:43:02.445 [DEBUG] [Thread-129522] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:43:02.445 [DEBUG] [Thread-129522] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:43:02.445 [DEBUG] [Thread-129522] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:43:02.446 [DEBUG] [Thread-129522] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:43:02.446 [DEBUG] [Thread-129522] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:43:02.446 [DEBUG] [Thread-129522] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:43:02.446 [DEBUG] [Thread-129522] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:43:02.446 [DEBUG] [Thread-129522] [transport.py] [_log()] client lang: <none>
2025-12-31T14:43:02.446 [DEBUG] [Thread-129522] [transport.py] [_log()] server lang: <none>
2025-12-31T14:43:02.446 [DEBUG] [Thread-129522] [transport.py] [_log()] kex follows: False
2025-12-31T14:43:02.446 [DEBUG] [Thread-129522] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:43:02.446 [DEBUG] [Thread-129522] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:43:02.446 [DEBUG] [Thread-129522] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:43:02.446 [DEBUG] [Thread-129522] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:43:02.446 [DEBUG] [Thread-129522] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:43:02.446 [DEBUG] [Thread-129522] [transport.py] [_log()] Compression: none
2025-12-31T14:43:02.446 [DEBUG] [Thread-129522] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:43:02.461 [DEBUG] [Thread-129522] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:43:02.462 [DEBUG] [Thread-129522] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:43:02.462 [DEBUG] [Thread-129522] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T14:43:02.462 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T14:43:02.463 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:43:02.464 [DEBUG] [Thread-129522] [transport.py] [_log()] userauth is OK
2025-12-31T14:43:02.464 [DEBUG] [Thread-129522] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:43:02.464 [DEBUG] [Thread-129522] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:43:02.465 [DEBUG] [Thread-129522] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T14:43:02.465 [DEBUG] [Thread-129522] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:43:02.480 [INFO] [Thread-129522] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:43:02.480 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:43:03.124 [DEBUG] [Thread-129522] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:43:03.124 [DEBUG] [Thread-129522] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:43:03.125 [DEBUG] [Thread-129522] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T14:43:03.165 [DEBUG] [Thread-129522] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:43:03.165 [DEBUG] [Thread-129522] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:43:03.168 [DEBUG] [Thread-129522] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:43:03.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:43:03.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T14:43:03.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T14:43:03.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T14:43:03.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:43:03.191 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T14:43:03.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:43:03.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:43:03.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T14:43:03.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.529309 -999.00  +25.40  17.50     17   -1.00 1 2 1 1 1   888    0 20.75 -223.23 ----- 19.2 17.5 276.6 18.9 31.9 -22.5 31.9 -19.6 31.6 -18.6 32.0 -20.6
2025-12-31T14:43:03.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T14:43:03.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T14:43:03.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.529309
2025-12-31T14:43:03.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T14:43:03.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T14:43:03.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T14:43:03.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T14:43:03.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T14:43:03.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T14:42:46', tmtdew=31.6, humidity=11.78, cloud=0.0, wind=21.49, temperature=26.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T12:42:12.298', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T14:43:03.194 [DEBUG] [Thread-129522] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:43:03.288 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T14:43:03.303 [DEBUG] [Thread-129525] [transport.py] [_log()] starting thread (client mode): 0xb6bbd720
2025-12-31T14:43:03.304 [DEBUG] [Thread-129525] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:43:03.319 [DEBUG] [Thread-129525] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T14:43:03.319 [INFO] [Thread-129525] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T14:43:03.327 [DEBUG] [Thread-129525] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:43:03.327 [DEBUG] [Thread-129525] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T14:43:03.327 [DEBUG] [Thread-129525] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:43:03.327 [DEBUG] [Thread-129525] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:43:03.327 [DEBUG] [Thread-129525] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:43:03.327 [DEBUG] [Thread-129525] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:43:03.327 [DEBUG] [Thread-129525] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:43:03.327 [DEBUG] [Thread-129525] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:43:03.327 [DEBUG] [Thread-129525] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:43:03.327 [DEBUG] [Thread-129525] [transport.py] [_log()] client lang: <none>
2025-12-31T14:43:03.327 [DEBUG] [Thread-129525] [transport.py] [_log()] server lang: <none>
2025-12-31T14:43:03.327 [DEBUG] [Thread-129525] [transport.py] [_log()] kex follows: False
2025-12-31T14:43:03.328 [DEBUG] [Thread-129525] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:43:03.328 [DEBUG] [Thread-129525] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:43:03.328 [DEBUG] [Thread-129525] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:43:03.328 [DEBUG] [Thread-129525] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:43:03.328 [DEBUG] [Thread-129525] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:43:03.328 [DEBUG] [Thread-129525] [transport.py] [_log()] Compression: none
2025-12-31T14:43:03.328 [DEBUG] [Thread-129525] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:43:03.385 [DEBUG] [Thread-129525] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:43:03.385 [DEBUG] [Thread-129525] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:43:03.386 [DEBUG] [Thread-129525] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T14:43:03.386 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T14:43:03.387 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:43:03.441 [DEBUG] [Thread-129525] [transport.py] [_log()] userauth is OK
2025-12-31T14:43:03.441 [DEBUG] [Thread-129525] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:43:03.441 [DEBUG] [Thread-129525] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:43:03.441 [DEBUG] [Thread-129525] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T14:43:03.441 [DEBUG] [Thread-129525] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:43:03.460 [INFO] [Thread-129525] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:43:03.460 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T14:43:03.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:43:03.817 [DEBUG] [Thread-129527 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:43:04.348 [DEBUG] [Thread-129525] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:43:04.349 [DEBUG] [Thread-129525] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:43:04.397 [DEBUG] [Thread-129525] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:43:04.397 [DEBUG] [Thread-129525] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:43:04.406 [DEBUG] [Thread-129525] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:43:04.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:43:04.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-12-31T14:43:04.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-12-31T14:43:04.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:43:04.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:43:04.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:43:04.440 [DEBUG] [Thread-129525] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:43:18.868 [DEBUG] [Thread-129528 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:43:19.297 [DEBUG] [Thread-129529 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:43:33.897 [DEBUG] [Thread-129530 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:43:34.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T14:43:34.462 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T14:43:34.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T14:43:35.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 14, 43, 18), 31.47, 11.89, 0.0, 20.13, 26.19, 0, 0, 0, 2, 0, 0),)
2025-12-31T14:43:35.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 14:43:18
2025-12-31T14:43:35.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T14:43:35.462 [DEBUG] [Thread-129531] [transport.py] [_log()] starting thread (client mode): 0xb6bbfbe0
2025-12-31T14:43:35.462 [DEBUG] [Thread-129531] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:43:35.477 [DEBUG] [Thread-129531] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T14:43:35.477 [INFO] [Thread-129531] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T14:43:35.480 [DEBUG] [Thread-129531] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:43:35.480 [DEBUG] [Thread-129531] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T14:43:35.480 [DEBUG] [Thread-129531] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:43:35.480 [DEBUG] [Thread-129531] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:43:35.480 [DEBUG] [Thread-129531] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:43:35.480 [DEBUG] [Thread-129531] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:43:35.481 [DEBUG] [Thread-129531] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:43:35.481 [DEBUG] [Thread-129531] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:43:35.481 [DEBUG] [Thread-129531] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:43:35.481 [DEBUG] [Thread-129531] [transport.py] [_log()] client lang: <none>
2025-12-31T14:43:35.481 [DEBUG] [Thread-129531] [transport.py] [_log()] server lang: <none>
2025-12-31T14:43:35.481 [DEBUG] [Thread-129531] [transport.py] [_log()] kex follows: False
2025-12-31T14:43:35.481 [DEBUG] [Thread-129531] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:43:35.481 [DEBUG] [Thread-129531] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:43:35.481 [DEBUG] [Thread-129531] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:43:35.481 [DEBUG] [Thread-129531] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:43:35.481 [DEBUG] [Thread-129531] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:43:35.481 [DEBUG] [Thread-129531] [transport.py] [_log()] Compression: none
2025-12-31T14:43:35.481 [DEBUG] [Thread-129531] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:43:35.496 [DEBUG] [Thread-129531] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:43:35.496 [DEBUG] [Thread-129531] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:43:35.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T14:43:35.496 [DEBUG] [Thread-129531] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T14:43:35.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:43:35.497 [DEBUG] [Thread-129531] [transport.py] [_log()] userauth is OK
2025-12-31T14:43:35.497 [DEBUG] [Thread-129531] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:43:35.497 [DEBUG] [Thread-129531] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:43:35.497 [DEBUG] [Thread-129531] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T14:43:35.497 [DEBUG] [Thread-129531] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:43:35.510 [INFO] [Thread-129531] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:43:35.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:43:36.176 [DEBUG] [Thread-129531] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:43:36.176 [DEBUG] [Thread-129531] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:43:36.177 [DEBUG] [Thread-129531] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T14:43:36.216 [DEBUG] [Thread-129531] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:43:36.216 [DEBUG] [Thread-129531] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:43:36.218 [DEBUG] [Thread-129531] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:43:36.230 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:43:36.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T14:43:36.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T14:43:36.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T14:43:36.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:43:36.235 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T14:43:36.235 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:43:36.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:43:36.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T14:43:36.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.529656 -999.00  +25.50  18.76     18   -0.40 1 2 1 1 1   888    0 21.00 -211.98 ----- 19.1 18.8 288.8 26.2 31.9 -22.5 31.8 -20.1 31.5 -19.6 32.0 -21.3
2025-12-31T14:43:36.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T14:43:36.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T14:43:36.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.529656
2025-12-31T14:43:36.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T14:43:36.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T14:43:36.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T14:43:36.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T14:43:36.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T14:43:36.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T14:43:18', tmtdew=31.47, humidity=11.89, cloud=0.0, wind=20.13, temperature=26.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T12:42:42.278', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T14:43:36.236 [DEBUG] [Thread-129531] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:43:36.315 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T14:43:36.327 [DEBUG] [Thread-129534] [transport.py] [_log()] starting thread (client mode): 0xb6bb2a70
2025-12-31T14:43:36.327 [DEBUG] [Thread-129534] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:43:36.342 [DEBUG] [Thread-129534] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T14:43:36.342 [INFO] [Thread-129534] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T14:43:36.350 [DEBUG] [Thread-129534] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:43:36.350 [DEBUG] [Thread-129534] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T14:43:36.350 [DEBUG] [Thread-129534] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:43:36.350 [DEBUG] [Thread-129534] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:43:36.350 [DEBUG] [Thread-129534] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:43:36.350 [DEBUG] [Thread-129534] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:43:36.350 [DEBUG] [Thread-129534] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:43:36.350 [DEBUG] [Thread-129534] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:43:36.350 [DEBUG] [Thread-129534] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:43:36.350 [DEBUG] [Thread-129534] [transport.py] [_log()] client lang: <none>
2025-12-31T14:43:36.350 [DEBUG] [Thread-129534] [transport.py] [_log()] server lang: <none>
2025-12-31T14:43:36.350 [DEBUG] [Thread-129534] [transport.py] [_log()] kex follows: False
2025-12-31T14:43:36.350 [DEBUG] [Thread-129534] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:43:36.350 [DEBUG] [Thread-129534] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:43:36.350 [DEBUG] [Thread-129534] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:43:36.350 [DEBUG] [Thread-129534] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:43:36.351 [DEBUG] [Thread-129534] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:43:36.351 [DEBUG] [Thread-129534] [transport.py] [_log()] Compression: none
2025-12-31T14:43:36.351 [DEBUG] [Thread-129534] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:43:36.407 [DEBUG] [Thread-129534] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:43:36.408 [DEBUG] [Thread-129534] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:43:36.408 [DEBUG] [Thread-129534] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T14:43:36.409 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T14:43:36.409 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:43:36.464 [DEBUG] [Thread-129534] [transport.py] [_log()] userauth is OK
2025-12-31T14:43:36.464 [DEBUG] [Thread-129534] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:43:36.465 [DEBUG] [Thread-129534] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:43:36.465 [DEBUG] [Thread-129534] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T14:43:36.465 [DEBUG] [Thread-129534] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:43:36.485 [INFO] [Thread-129534] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:43:36.485 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T14:43:36.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:43:37.328 [DEBUG] [Thread-129534] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:43:37.328 [DEBUG] [Thread-129534] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:43:37.376 [DEBUG] [Thread-129534] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:43:37.376 [DEBUG] [Thread-129534] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:43:37.385 [DEBUG] [Thread-129534] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:43:37.393 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:43:37.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T14:43:37.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-12-31T14:43:37.411 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:43:37.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:43:37.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:43:37.420 [DEBUG] [Thread-129534] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:43:48.928 [DEBUG] [Thread-129536 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:44:01.376 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:44:01.376 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:44:03.985 [DEBUG] [Thread-129537 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:44:07.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T14:44:07.439 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T14:44:07.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T14:44:08.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 14, 43, 50), 31.4, 12.39, 0.0, 20.17, 26.21, 0, 0, 0, 2, 0, 0),)
2025-12-31T14:44:08.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 14:43:50
2025-12-31T14:44:08.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T14:44:08.442 [DEBUG] [Thread-129538] [transport.py] [_log()] starting thread (client mode): 0xb95b3cd0
2025-12-31T14:44:08.442 [DEBUG] [Thread-129538] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:44:08.463 [DEBUG] [Thread-129538] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T14:44:08.463 [INFO] [Thread-129538] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T14:44:08.466 [DEBUG] [Thread-129538] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:44:08.466 [DEBUG] [Thread-129538] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T14:44:08.466 [DEBUG] [Thread-129538] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:44:08.466 [DEBUG] [Thread-129538] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:44:08.466 [DEBUG] [Thread-129538] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:44:08.466 [DEBUG] [Thread-129538] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:44:08.466 [DEBUG] [Thread-129538] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:44:08.466 [DEBUG] [Thread-129538] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:44:08.466 [DEBUG] [Thread-129538] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:44:08.466 [DEBUG] [Thread-129538] [transport.py] [_log()] client lang: <none>
2025-12-31T14:44:08.466 [DEBUG] [Thread-129538] [transport.py] [_log()] server lang: <none>
2025-12-31T14:44:08.466 [DEBUG] [Thread-129538] [transport.py] [_log()] kex follows: False
2025-12-31T14:44:08.466 [DEBUG] [Thread-129538] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:44:08.466 [DEBUG] [Thread-129538] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:44:08.467 [DEBUG] [Thread-129538] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:44:08.467 [DEBUG] [Thread-129538] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:44:08.467 [DEBUG] [Thread-129538] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:44:08.467 [DEBUG] [Thread-129538] [transport.py] [_log()] Compression: none
2025-12-31T14:44:08.467 [DEBUG] [Thread-129538] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:44:08.474 [DEBUG] [Thread-129538] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:44:08.474 [DEBUG] [Thread-129538] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:44:08.474 [DEBUG] [Thread-129538] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T14:44:08.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T14:44:08.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:44:08.475 [DEBUG] [Thread-129538] [transport.py] [_log()] userauth is OK
2025-12-31T14:44:08.475 [DEBUG] [Thread-129538] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:44:08.475 [DEBUG] [Thread-129538] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:44:08.475 [DEBUG] [Thread-129538] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T14:44:08.475 [DEBUG] [Thread-129538] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:44:08.484 [INFO] [Thread-129538] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:44:08.484 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:44:09.147 [DEBUG] [Thread-129538] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:44:09.147 [DEBUG] [Thread-129538] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:44:09.147 [DEBUG] [Thread-129538] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T14:44:09.187 [DEBUG] [Thread-129538] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:44:09.187 [DEBUG] [Thread-129538] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:44:09.190 [DEBUG] [Thread-129538] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:44:09.198 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:44:09.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T14:44:09.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T14:44:09.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T14:44:09.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:44:09.202 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T14:44:09.202 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:44:09.202 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:44:09.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T14:44:09.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.530003 -999.00  +25.90  19.69     18   -0.10 1 2 1 1 1   888    0 19.81 -251.98 ----- 22.1 19.7 268.9 27.9 32.0 -23.3 31.9 -19.4 31.8 -18.3 32.2 -21.4
2025-12-31T14:44:09.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T14:44:09.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T14:44:09.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.530003
2025-12-31T14:44:09.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T14:44:09.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T14:44:09.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T14:44:09.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T14:44:09.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T14:44:09.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T14:43:50', tmtdew=31.4, humidity=12.39, cloud=0.0, wind=20.17, temperature=26.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T12:43:12.259', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T14:44:09.203 [DEBUG] [Thread-129538] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:44: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-12-31T14:44:09.292 [DEBUG] [Thread-129541] [transport.py] [_log()] starting thread (client mode): 0xb6bbe530
2025-12-31T14:44:09.292 [DEBUG] [Thread-129541] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:44:09.307 [DEBUG] [Thread-129541] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T14:44:09.307 [INFO] [Thread-129541] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T14:44:09.315 [DEBUG] [Thread-129541] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:44:09.315 [DEBUG] [Thread-129541] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T14:44:09.315 [DEBUG] [Thread-129541] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:44:09.315 [DEBUG] [Thread-129541] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:44:09.315 [DEBUG] [Thread-129541] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:44:09.315 [DEBUG] [Thread-129541] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:44:09.315 [DEBUG] [Thread-129541] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:44:09.315 [DEBUG] [Thread-129541] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:44:09.315 [DEBUG] [Thread-129541] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:44:09.315 [DEBUG] [Thread-129541] [transport.py] [_log()] client lang: <none>
2025-12-31T14:44:09.315 [DEBUG] [Thread-129541] [transport.py] [_log()] server lang: <none>
2025-12-31T14:44:09.315 [DEBUG] [Thread-129541] [transport.py] [_log()] kex follows: False
2025-12-31T14:44:09.315 [DEBUG] [Thread-129541] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:44:09.315 [DEBUG] [Thread-129541] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:44:09.315 [DEBUG] [Thread-129541] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:44:09.315 [DEBUG] [Thread-129541] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:44:09.315 [DEBUG] [Thread-129541] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:44:09.315 [DEBUG] [Thread-129541] [transport.py] [_log()] Compression: none
2025-12-31T14:44:09.315 [DEBUG] [Thread-129541] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:44:09.370 [DEBUG] [Thread-129541] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:44:09.370 [DEBUG] [Thread-129541] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:44:09.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T14:44:09.371 [DEBUG] [Thread-129541] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T14:44:09.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:44:09.427 [DEBUG] [Thread-129541] [transport.py] [_log()] userauth is OK
2025-12-31T14:44:09.428 [DEBUG] [Thread-129541] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:44:09.428 [DEBUG] [Thread-129541] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:44:09.428 [DEBUG] [Thread-129541] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T14:44:09.428 [DEBUG] [Thread-129541] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:44:09.442 [INFO] [Thread-129541] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:44:09.442 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T14:44:09.442 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:44:10.345 [DEBUG] [Thread-129541] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:44:10.345 [DEBUG] [Thread-129541] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:44:10.393 [DEBUG] [Thread-129541] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:44:10.393 [DEBUG] [Thread-129541] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:44:10.401 [DEBUG] [Thread-129541] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:44:10.410 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:44:10.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T14:44:10.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T14:44:10.425 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:44:10.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:44:10.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:44:10.433 [DEBUG] [Thread-129541] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:44:19.018 [DEBUG] [Thread-129543 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:44:19.347 [DEBUG] [Thread-129544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:44:34.072 [DEBUG] [Thread-129545 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:44:40.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T14:44:40.432 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T14:44:40.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T14:44:41.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 14, 44, 22), 31.36, 12.42, 0.0, 18.76, 26.19, 0, 0, 0, 2, 0, 0),)
2025-12-31T14:44:41.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 14:44:22
2025-12-31T14:44:41.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T14:44:41.419 [DEBUG] [Thread-129546] [transport.py] [_log()] starting thread (client mode): 0xb6bba170
2025-12-31T14:44:41.419 [DEBUG] [Thread-129546] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:44:41.439 [DEBUG] [Thread-129546] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T14:44:41.439 [INFO] [Thread-129546] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T14:44:41.442 [DEBUG] [Thread-129546] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:44:41.442 [DEBUG] [Thread-129546] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T14:44:41.442 [DEBUG] [Thread-129546] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:44:41.442 [DEBUG] [Thread-129546] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:44:41.442 [DEBUG] [Thread-129546] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:44:41.442 [DEBUG] [Thread-129546] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:44:41.442 [DEBUG] [Thread-129546] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:44:41.442 [DEBUG] [Thread-129546] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:44:41.442 [DEBUG] [Thread-129546] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:44:41.442 [DEBUG] [Thread-129546] [transport.py] [_log()] client lang: <none>
2025-12-31T14:44:41.442 [DEBUG] [Thread-129546] [transport.py] [_log()] server lang: <none>
2025-12-31T14:44:41.442 [DEBUG] [Thread-129546] [transport.py] [_log()] kex follows: False
2025-12-31T14:44:41.442 [DEBUG] [Thread-129546] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:44:41.443 [DEBUG] [Thread-129546] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:44:41.443 [DEBUG] [Thread-129546] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:44:41.443 [DEBUG] [Thread-129546] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:44:41.443 [DEBUG] [Thread-129546] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:44:41.443 [DEBUG] [Thread-129546] [transport.py] [_log()] Compression: none
2025-12-31T14:44:41.443 [DEBUG] [Thread-129546] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:44:41.462 [DEBUG] [Thread-129546] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:44:41.462 [DEBUG] [Thread-129546] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:44:41.463 [DEBUG] [Thread-129546] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T14:44:41.463 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T14:44:41.464 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:44:41.465 [DEBUG] [Thread-129546] [transport.py] [_log()] userauth is OK
2025-12-31T14:44:41.465 [DEBUG] [Thread-129546] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:44:41.465 [DEBUG] [Thread-129546] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:44:41.465 [DEBUG] [Thread-129546] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T14:44:41.465 [DEBUG] [Thread-129546] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:44:41.490 [INFO] [Thread-129546] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:44:41.491 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:44:42.220 [DEBUG] [Thread-129546] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:44:42.220 [DEBUG] [Thread-129546] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:44:42.221 [DEBUG] [Thread-129546] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T14:44:42.261 [DEBUG] [Thread-129546] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:44:42.261 [DEBUG] [Thread-129546] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:44:42.264 [DEBUG] [Thread-129546] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:44:42.270 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:44:42.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T14:44:42.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T14:44:42.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T14:44:42.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:44:42.280 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T14:44:42.280 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:44:42.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:44:42.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T14:44:42.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.530350 -999.00  +25.80  22.37     18   -0.10 1 2 1 1 1   888    0 19.99 -228.39 ----- 27.2 22.4 304.2 27.4 31.9 -22.3 31.9 -20.2 31.5 -19.8 32.2 -21.5
2025-12-31T14:44:42.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T14:44:42.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T14:44:42.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.530350
2025-12-31T14:44:42.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T14:44:42.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T14:44:42.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T14:44:42.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T14:44:42.282 [DEBUG] [Thread-129546] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:44:42.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T14:44:42.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T14:44:22', tmtdew=31.36, humidity=12.42, cloud=0.0, wind=18.76, temperature=26.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T12:43:42.240', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T14:44:42.371 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T14:44:42.383 [DEBUG] [Thread-129549] [transport.py] [_log()] starting thread (client mode): 0xb6b2a440
2025-12-31T14:44:42.383 [DEBUG] [Thread-129549] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:44:42.399 [DEBUG] [Thread-129549] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T14:44:42.399 [INFO] [Thread-129549] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T14:44:42.407 [DEBUG] [Thread-129549] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:44:42.407 [DEBUG] [Thread-129549] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T14:44:42.407 [DEBUG] [Thread-129549] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:44:42.407 [DEBUG] [Thread-129549] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:44:42.407 [DEBUG] [Thread-129549] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:44:42.407 [DEBUG] [Thread-129549] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:44:42.407 [DEBUG] [Thread-129549] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:44:42.407 [DEBUG] [Thread-129549] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:44:42.407 [DEBUG] [Thread-129549] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:44:42.407 [DEBUG] [Thread-129549] [transport.py] [_log()] client lang: <none>
2025-12-31T14:44:42.407 [DEBUG] [Thread-129549] [transport.py] [_log()] server lang: <none>
2025-12-31T14:44:42.407 [DEBUG] [Thread-129549] [transport.py] [_log()] kex follows: False
2025-12-31T14:44:42.407 [DEBUG] [Thread-129549] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:44:42.407 [DEBUG] [Thread-129549] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:44:42.408 [DEBUG] [Thread-129549] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:44:42.408 [DEBUG] [Thread-129549] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:44:42.408 [DEBUG] [Thread-129549] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:44:42.408 [DEBUG] [Thread-129549] [transport.py] [_log()] Compression: none
2025-12-31T14:44:42.408 [DEBUG] [Thread-129549] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:44:42.464 [DEBUG] [Thread-129549] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:44:42.464 [DEBUG] [Thread-129549] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:44:42.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T14:44:42.466 [DEBUG] [Thread-129549] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T14:44:42.466 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:44:42.520 [DEBUG] [Thread-129549] [transport.py] [_log()] userauth is OK
2025-12-31T14:44:42.520 [DEBUG] [Thread-129549] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:44:42.521 [DEBUG] [Thread-129549] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:44:42.521 [DEBUG] [Thread-129549] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T14:44:42.521 [DEBUG] [Thread-129549] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:44:42.539 [INFO] [Thread-129549] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:44:42.540 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T14:44:42.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:44:43.468 [DEBUG] [Thread-129549] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:44:43.469 [DEBUG] [Thread-129549] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:44:43.516 [DEBUG] [Thread-129549] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:44:43.516 [DEBUG] [Thread-129549] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:44:43.525 [DEBUG] [Thread-129549] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:44:43.534 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:44:43.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T14:44:43.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T14:44:43.551 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:44:43.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:44:43.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:44:43.560 [DEBUG] [Thread-129549] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:44:49.107 [DEBUG] [Thread-129551 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:45:01.515 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:45:01.516 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:45:04.145 [DEBUG] [Thread-129552 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:45:13.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T14:45:13.557 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T14:45:13.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T14:45:14.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 14, 44, 54), 30.68, 13.24, 0.0, 26.27, 26.61, 0, 0, 0, 2, 0, 0),)
2025-12-31T14:45:14.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 14:44:54
2025-12-31T14:45:14.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T14:45:14.532 [DEBUG] [Thread-129553] [transport.py] [_log()] starting thread (client mode): 0xb6bbd330
2025-12-31T14:45:14.533 [DEBUG] [Thread-129553] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:45:14.554 [DEBUG] [Thread-129553] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T14:45:14.555 [INFO] [Thread-129553] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T14:45:14.556 [DEBUG] [Thread-129553] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:45:14.556 [DEBUG] [Thread-129553] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T14:45:14.556 [DEBUG] [Thread-129553] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:45:14.556 [DEBUG] [Thread-129553] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:45:14.556 [DEBUG] [Thread-129553] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:45:14.556 [DEBUG] [Thread-129553] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:45:14.557 [DEBUG] [Thread-129553] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:45:14.557 [DEBUG] [Thread-129553] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:45:14.557 [DEBUG] [Thread-129553] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:45:14.557 [DEBUG] [Thread-129553] [transport.py] [_log()] client lang: <none>
2025-12-31T14:45:14.557 [DEBUG] [Thread-129553] [transport.py] [_log()] server lang: <none>
2025-12-31T14:45:14.557 [DEBUG] [Thread-129553] [transport.py] [_log()] kex follows: False
2025-12-31T14:45:14.557 [DEBUG] [Thread-129553] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:45:14.557 [DEBUG] [Thread-129553] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:45:14.557 [DEBUG] [Thread-129553] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:45:14.557 [DEBUG] [Thread-129553] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:45:14.557 [DEBUG] [Thread-129553] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:45:14.557 [DEBUG] [Thread-129553] [transport.py] [_log()] Compression: none
2025-12-31T14:45:14.558 [DEBUG] [Thread-129553] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:45:14.568 [DEBUG] [Thread-129553] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:45:14.569 [DEBUG] [Thread-129553] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:45:14.569 [DEBUG] [Thread-129553] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T14:45:14.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T14:45:14.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:45:14.571 [DEBUG] [Thread-129553] [transport.py] [_log()] userauth is OK
2025-12-31T14:45:14.572 [DEBUG] [Thread-129553] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:45:14.572 [DEBUG] [Thread-129553] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:45:14.572 [DEBUG] [Thread-129553] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T14:45:14.572 [DEBUG] [Thread-129553] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:45:14.591 [INFO] [Thread-129553] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:45:14.592 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:45:17.700 [DEBUG] [Thread-129553] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:45:17.700 [DEBUG] [Thread-129553] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:45:17.701 [DEBUG] [Thread-129553] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T14:45:17.741 [DEBUG] [Thread-129553] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:45:17.741 [DEBUG] [Thread-129553] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:45:17.745 [DEBUG] [Thread-129553] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:45:17.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:45:17.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T14:45:17.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T14:45:17.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T14:45:17.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:45:17.793 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T14:45:17.793 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:45:17.793 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:45:17.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T14:45:17.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.530697 -999.00  +25.70  26.29     18   +0.30 1 2 1 1 1   888    0 20.79 -217.97 ----- 24.4 26.3 294.0 30.7 32.0 -22.6 32.0 -20.3 31.9 -19.2 32.4 -22.0
2025-12-31T14:45:17.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T14:45:17.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T14:45:17.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.530697
2025-12-31T14:45:17.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T14:45:17.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T14:45:17.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T14:45:17.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T14:45:17.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T14:45:17.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T14:44:54', tmtdew=30.68, humidity=13.24, cloud=0.0, wind=26.27, temperature=26.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T12:44:12.221', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T14:45:17.796 [DEBUG] [Thread-129553] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:45:17.871 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T14:45:17.886 [DEBUG] [Thread-129556] [transport.py] [_log()] starting thread (client mode): 0xb6bbf880
2025-12-31T14:45:17.886 [DEBUG] [Thread-129556] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:45:17.902 [DEBUG] [Thread-129556] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T14:45:17.902 [INFO] [Thread-129556] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T14:45:17.910 [DEBUG] [Thread-129556] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:45:17.910 [DEBUG] [Thread-129556] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T14:45:17.910 [DEBUG] [Thread-129556] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:45:17.911 [DEBUG] [Thread-129556] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:45:17.911 [DEBUG] [Thread-129556] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:45:17.911 [DEBUG] [Thread-129556] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:45:17.911 [DEBUG] [Thread-129556] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:45:17.911 [DEBUG] [Thread-129556] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:45:17.911 [DEBUG] [Thread-129556] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:45:17.911 [DEBUG] [Thread-129556] [transport.py] [_log()] client lang: <none>
2025-12-31T14:45:17.911 [DEBUG] [Thread-129556] [transport.py] [_log()] server lang: <none>
2025-12-31T14:45:17.911 [DEBUG] [Thread-129556] [transport.py] [_log()] kex follows: False
2025-12-31T14:45:17.911 [DEBUG] [Thread-129556] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:45:17.911 [DEBUG] [Thread-129556] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:45:17.911 [DEBUG] [Thread-129556] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:45:17.911 [DEBUG] [Thread-129556] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:45:17.911 [DEBUG] [Thread-129556] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:45:17.911 [DEBUG] [Thread-129556] [transport.py] [_log()] Compression: none
2025-12-31T14:45:17.912 [DEBUG] [Thread-129556] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:45:17.968 [DEBUG] [Thread-129556] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:45:17.969 [DEBUG] [Thread-129556] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:45:17.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T14:45:17.970 [DEBUG] [Thread-129556] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T14:45:17.971 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:45:18.024 [DEBUG] [Thread-129556] [transport.py] [_log()] userauth is OK
2025-12-31T14:45:18.024 [DEBUG] [Thread-129556] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:45:18.024 [DEBUG] [Thread-129556] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:45:18.024 [DEBUG] [Thread-129556] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T14:45:18.024 [DEBUG] [Thread-129556] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:45:18.043 [INFO] [Thread-129556] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:45:18.043 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T14:45:18.044 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:45:18.890 [DEBUG] [Thread-129556] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:45:18.890 [DEBUG] [Thread-129556] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:45:18.938 [DEBUG] [Thread-129556] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:45:18.938 [DEBUG] [Thread-129556] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:45:18.948 [DEBUG] [Thread-129556] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:45:18.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:45:18.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T14:45:18.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T14:45:18.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:45:18.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:45:18.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:45:18.985 [DEBUG] [Thread-129556] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:45:19.181 [DEBUG] [Thread-129558 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:45:19.413 [DEBUG] [Thread-129559 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:45:34.245 [DEBUG] [Thread-129560 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:45:49.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T14:45:49.007 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T14:45:49.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T14:45:49.284 [DEBUG] [Thread-129561 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:45:49.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 14, 45, 26), 30.99, 13.02, 0.0, 25.53, 26.94, 0, 0, 0, 2, 0, 0),)
2025-12-31T14:45:49.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 14:45:26
2025-12-31T14:45:49.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T14:45:49.979 [DEBUG] [Thread-129562] [transport.py] [_log()] starting thread (client mode): 0xb6bbe890
2025-12-31T14:45:49.979 [DEBUG] [Thread-129562] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:45:49.999 [DEBUG] [Thread-129562] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T14:45:49.999 [INFO] [Thread-129562] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T14:45:50.003 [DEBUG] [Thread-129562] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:45:50.003 [DEBUG] [Thread-129562] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T14:45:50.003 [DEBUG] [Thread-129562] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:45:50.003 [DEBUG] [Thread-129562] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:45:50.003 [DEBUG] [Thread-129562] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:45:50.003 [DEBUG] [Thread-129562] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:45:50.003 [DEBUG] [Thread-129562] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:45:50.003 [DEBUG] [Thread-129562] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:45:50.003 [DEBUG] [Thread-129562] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:45:50.003 [DEBUG] [Thread-129562] [transport.py] [_log()] client lang: <none>
2025-12-31T14:45:50.003 [DEBUG] [Thread-129562] [transport.py] [_log()] server lang: <none>
2025-12-31T14:45:50.003 [DEBUG] [Thread-129562] [transport.py] [_log()] kex follows: False
2025-12-31T14:45:50.003 [DEBUG] [Thread-129562] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:45:50.004 [DEBUG] [Thread-129562] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:45:50.004 [DEBUG] [Thread-129562] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:45:50.004 [DEBUG] [Thread-129562] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:45:50.004 [DEBUG] [Thread-129562] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:45:50.004 [DEBUG] [Thread-129562] [transport.py] [_log()] Compression: none
2025-12-31T14:45:50.004 [DEBUG] [Thread-129562] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:45:50.021 [DEBUG] [Thread-129562] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:45:50.022 [DEBUG] [Thread-129562] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:45:50.022 [DEBUG] [Thread-129562] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T14:45:50.022 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T14:45:50.023 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:45:50.064 [DEBUG] [Thread-129562] [transport.py] [_log()] userauth is OK
2025-12-31T14:45:50.065 [DEBUG] [Thread-129562] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:45:50.065 [DEBUG] [Thread-129562] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:45:50.065 [DEBUG] [Thread-129562] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T14:45:50.065 [DEBUG] [Thread-129562] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:45:50.098 [INFO] [Thread-129562] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:45:50.098 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:45:50.775 [DEBUG] [Thread-129562] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:45:50.776 [DEBUG] [Thread-129562] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:45:50.776 [DEBUG] [Thread-129562] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T14:45:50.817 [DEBUG] [Thread-129562] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:45:50.817 [DEBUG] [Thread-129562] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:45:50.820 [DEBUG] [Thread-129562] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:45:50.832 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:45:50.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T14:45:50.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T14:45:50.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T14:45:50.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:45:50.843 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T14:45:50.844 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:45:50.844 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:45:50.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T14:45:50.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.531392 -999.00  +25.80  24.35     18   +0.30 1 2 1 1 1   888    0 21.02 -196.95 ----- 23.0 24.4 290.2 30.4 32.1 -21.4 32.1 -19.6 32.0 -20.1 32.5 -20.7
2025-12-31T14:45:50.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T14:45:50.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T14:45:50.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.531392
2025-12-31T14:45:50.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T14:45:50.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T14:45:50.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T14:45:50.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T14:45:50.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T14:45:50.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T14:45:26', tmtdew=30.99, humidity=13.02, cloud=0.0, wind=25.53, temperature=26.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T12:45:12.269', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T14:45:50.846 [DEBUG] [Thread-129562] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:45:50.928 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T14:45:50.940 [DEBUG] [Thread-129565] [transport.py] [_log()] starting thread (client mode): 0xb95b19f0
2025-12-31T14:45:50.940 [DEBUG] [Thread-129565] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:45:50.954 [DEBUG] [Thread-129565] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T14:45:50.955 [INFO] [Thread-129565] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T14:45:50.962 [DEBUG] [Thread-129565] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:45:50.963 [DEBUG] [Thread-129565] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T14:45:50.963 [DEBUG] [Thread-129565] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:45:50.963 [DEBUG] [Thread-129565] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:45:50.963 [DEBUG] [Thread-129565] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:45:50.963 [DEBUG] [Thread-129565] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:45:50.963 [DEBUG] [Thread-129565] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:45:50.963 [DEBUG] [Thread-129565] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:45:50.964 [DEBUG] [Thread-129565] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:45:50.964 [DEBUG] [Thread-129565] [transport.py] [_log()] client lang: <none>
2025-12-31T14:45:50.964 [DEBUG] [Thread-129565] [transport.py] [_log()] server lang: <none>
2025-12-31T14:45:50.964 [DEBUG] [Thread-129565] [transport.py] [_log()] kex follows: False
2025-12-31T14:45:50.964 [DEBUG] [Thread-129565] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:45:50.964 [DEBUG] [Thread-129565] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:45:50.964 [DEBUG] [Thread-129565] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:45:50.965 [DEBUG] [Thread-129565] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:45:50.965 [DEBUG] [Thread-129565] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:45:50.965 [DEBUG] [Thread-129565] [transport.py] [_log()] Compression: none
2025-12-31T14:45:50.965 [DEBUG] [Thread-129565] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:45:51.020 [DEBUG] [Thread-129565] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:45:51.020 [DEBUG] [Thread-129565] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:45:51.021 [DEBUG] [Thread-129565] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T14:45:51.021 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T14:45:51.022 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:45:51.076 [DEBUG] [Thread-129565] [transport.py] [_log()] userauth is OK
2025-12-31T14:45:51.077 [DEBUG] [Thread-129565] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:45:51.077 [DEBUG] [Thread-129565] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:45:51.077 [DEBUG] [Thread-129565] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T14:45:51.077 [DEBUG] [Thread-129565] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:45:51.095 [INFO] [Thread-129565] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:45:51.095 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T14:45:51.096 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:45:51.940 [DEBUG] [Thread-129565] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:45:51.940 [DEBUG] [Thread-129565] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:45:51.988 [DEBUG] [Thread-129565] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:45:51.988 [DEBUG] [Thread-129565] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:45:51.997 [DEBUG] [Thread-129565] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:45:52.007 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:45:52.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T14:45:52.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T14:45:52.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:45:52.026 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:45:52.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:45:52.034 [DEBUG] [Thread-129565] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:46:01.655 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:46:01.656 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:46:04.316 [DEBUG] [Thread-129567 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:46:19.375 [DEBUG] [Thread-129568 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:46:19.463 [DEBUG] [Thread-129569 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:46:22.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T14:46:22.057 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T14:46:22.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T14:46:22.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 14, 45, 58), 30.69, 13.11, 0.0, 23.98, 26.45, 0, 0, 0, 2, 0, 0),)
2025-12-31T14:46:22.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 14:45:58
2025-12-31T14:46:22.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T14:46:23.033 [DEBUG] [Thread-129570] [transport.py] [_log()] starting thread (client mode): 0xb6b15fc0
2025-12-31T14:46:23.033 [DEBUG] [Thread-129570] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:46:23.054 [DEBUG] [Thread-129570] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T14:46:23.054 [INFO] [Thread-129570] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T14:46:23.057 [DEBUG] [Thread-129570] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:46:23.057 [DEBUG] [Thread-129570] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T14:46:23.057 [DEBUG] [Thread-129570] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:46:23.057 [DEBUG] [Thread-129570] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:46:23.057 [DEBUG] [Thread-129570] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:46:23.057 [DEBUG] [Thread-129570] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:46:23.057 [DEBUG] [Thread-129570] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:46:23.057 [DEBUG] [Thread-129570] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:46:23.057 [DEBUG] [Thread-129570] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:46:23.057 [DEBUG] [Thread-129570] [transport.py] [_log()] client lang: <none>
2025-12-31T14:46:23.057 [DEBUG] [Thread-129570] [transport.py] [_log()] server lang: <none>
2025-12-31T14:46:23.057 [DEBUG] [Thread-129570] [transport.py] [_log()] kex follows: False
2025-12-31T14:46:23.057 [DEBUG] [Thread-129570] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:46:23.057 [DEBUG] [Thread-129570] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:46:23.057 [DEBUG] [Thread-129570] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:46:23.057 [DEBUG] [Thread-129570] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:46:23.057 [DEBUG] [Thread-129570] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:46:23.057 [DEBUG] [Thread-129570] [transport.py] [_log()] Compression: none
2025-12-31T14:46:23.057 [DEBUG] [Thread-129570] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:46:23.076 [DEBUG] [Thread-129570] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:46:23.076 [DEBUG] [Thread-129570] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:46:23.077 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T14:46:23.077 [DEBUG] [Thread-129570] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T14:46:23.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:46:23.079 [DEBUG] [Thread-129570] [transport.py] [_log()] userauth is OK
2025-12-31T14:46:23.079 [DEBUG] [Thread-129570] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:46:23.079 [DEBUG] [Thread-129570] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:46:23.079 [DEBUG] [Thread-129570] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T14:46:23.079 [DEBUG] [Thread-129570] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:46:23.101 [INFO] [Thread-129570] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:46:23.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:46:23.823 [DEBUG] [Thread-129570] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:46:23.823 [DEBUG] [Thread-129570] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:46:23.824 [DEBUG] [Thread-129570] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T14:46:23.864 [DEBUG] [Thread-129570] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:46:23.864 [DEBUG] [Thread-129570] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:46:23.867 [DEBUG] [Thread-129570] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:46:23.874 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:46:23.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T14:46:23.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T14:46:23.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T14:46:23.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:46:23.887 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T14:46:23.887 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:46:23.887 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:46:23.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T14:46:23.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.531739 -999.00  +26.00  17.02     18   +0.50 1 2 1 1 1   888    0 20.07 -230.98 ----- 15.3 17.0 279.4 26.4 32.0 -23.9 32.1 -19.7 32.0 -18.5 32.5 -23.5
2025-12-31T14:46:23.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T14:46:23.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T14:46:23.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.531739
2025-12-31T14:46:23.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T14:46:23.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T14:46:23.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T14:46:23.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T14:46:23.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T14:46:23.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T14:45:58', tmtdew=30.69, humidity=13.11, cloud=0.0, wind=23.98, temperature=26.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T12:45:42.250', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T14:46:23.889 [DEBUG] [Thread-129570] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:46:23.973 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T14:46:23.984 [DEBUG] [Thread-129573] [transport.py] [_log()] starting thread (client mode): 0xb95f10f0
2025-12-31T14:46:23.984 [DEBUG] [Thread-129573] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:46:23.998 [DEBUG] [Thread-129573] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T14:46:23.998 [INFO] [Thread-129573] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T14:46:24.005 [DEBUG] [Thread-129573] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:46:24.006 [DEBUG] [Thread-129573] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T14:46:24.006 [DEBUG] [Thread-129573] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:46:24.006 [DEBUG] [Thread-129573] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:46:24.006 [DEBUG] [Thread-129573] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:46:24.006 [DEBUG] [Thread-129573] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:46:24.006 [DEBUG] [Thread-129573] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:46:24.006 [DEBUG] [Thread-129573] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:46:24.006 [DEBUG] [Thread-129573] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:46:24.006 [DEBUG] [Thread-129573] [transport.py] [_log()] client lang: <none>
2025-12-31T14:46:24.006 [DEBUG] [Thread-129573] [transport.py] [_log()] server lang: <none>
2025-12-31T14:46:24.006 [DEBUG] [Thread-129573] [transport.py] [_log()] kex follows: False
2025-12-31T14:46:24.007 [DEBUG] [Thread-129573] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:46:24.007 [DEBUG] [Thread-129573] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:46:24.007 [DEBUG] [Thread-129573] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:46:24.007 [DEBUG] [Thread-129573] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:46:24.007 [DEBUG] [Thread-129573] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:46:24.007 [DEBUG] [Thread-129573] [transport.py] [_log()] Compression: none
2025-12-31T14:46:24.007 [DEBUG] [Thread-129573] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:46:24.064 [DEBUG] [Thread-129573] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:46:24.065 [DEBUG] [Thread-129573] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:46:24.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T14:46:24.066 [DEBUG] [Thread-129573] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T14:46:24.066 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:46:24.120 [DEBUG] [Thread-129573] [transport.py] [_log()] userauth is OK
2025-12-31T14:46:24.120 [DEBUG] [Thread-129573] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:46:24.120 [DEBUG] [Thread-129573] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:46:24.120 [DEBUG] [Thread-129573] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T14:46:24.120 [DEBUG] [Thread-129573] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:46:24.139 [INFO] [Thread-129573] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:46:24.139 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T14:46:24.140 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:46:24.984 [DEBUG] [Thread-129573] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:46:24.984 [DEBUG] [Thread-129573] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:46:25.032 [DEBUG] [Thread-129573] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:46:25.032 [DEBUG] [Thread-129573] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:46:25.041 [DEBUG] [Thread-129573] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:46:25.051 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:46:25.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T14:46:25.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T14:46:25.069 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:46:25.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:46:25.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:46:25.078 [DEBUG] [Thread-129573] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:46:34.412 [DEBUG] [Thread-129575 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:46:49.461 [DEBUG] [Thread-129576 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:46:55.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T14:46:55.100 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T14:46:55.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T14:46:55.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 14, 46, 30), 31.43, 12.46, 0.0, 21.53, 26.44, 0, 0, 0, 2, 0, 0),)
2025-12-31T14:46:55.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 14:46:30
2025-12-31T14:46:55.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T14:46:56.102 [DEBUG] [Thread-129577] [transport.py] [_log()] starting thread (client mode): 0xb6bbe470
2025-12-31T14:46:56.103 [DEBUG] [Thread-129577] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:46:56.123 [DEBUG] [Thread-129577] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T14:46:56.123 [INFO] [Thread-129577] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T14:46:56.126 [DEBUG] [Thread-129577] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:46:56.126 [DEBUG] [Thread-129577] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T14:46:56.127 [DEBUG] [Thread-129577] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:46:56.127 [DEBUG] [Thread-129577] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:46:56.127 [DEBUG] [Thread-129577] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:46:56.127 [DEBUG] [Thread-129577] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:46:56.127 [DEBUG] [Thread-129577] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:46:56.127 [DEBUG] [Thread-129577] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:46:56.127 [DEBUG] [Thread-129577] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:46:56.127 [DEBUG] [Thread-129577] [transport.py] [_log()] client lang: <none>
2025-12-31T14:46:56.127 [DEBUG] [Thread-129577] [transport.py] [_log()] server lang: <none>
2025-12-31T14:46:56.127 [DEBUG] [Thread-129577] [transport.py] [_log()] kex follows: False
2025-12-31T14:46:56.127 [DEBUG] [Thread-129577] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:46:56.127 [DEBUG] [Thread-129577] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:46:56.128 [DEBUG] [Thread-129577] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:46:56.128 [DEBUG] [Thread-129577] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:46:56.128 [DEBUG] [Thread-129577] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:46:56.128 [DEBUG] [Thread-129577] [transport.py] [_log()] Compression: none
2025-12-31T14:46:56.128 [DEBUG] [Thread-129577] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:46:56.149 [DEBUG] [Thread-129577] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:46:56.149 [DEBUG] [Thread-129577] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:46:56.150 [DEBUG] [Thread-129577] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T14:46:56.150 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T14:46:56.151 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:46:56.152 [DEBUG] [Thread-129577] [transport.py] [_log()] userauth is OK
2025-12-31T14:46:56.152 [DEBUG] [Thread-129577] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:46:56.152 [DEBUG] [Thread-129577] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:46:56.153 [DEBUG] [Thread-129577] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T14:46:56.153 [DEBUG] [Thread-129577] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:46:56.177 [INFO] [Thread-129577] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:46:56.178 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:46:56.810 [DEBUG] [Thread-129577] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:46:56.810 [DEBUG] [Thread-129577] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:46:56.810 [DEBUG] [Thread-129577] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T14:46:56.851 [DEBUG] [Thread-129577] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:46:56.851 [DEBUG] [Thread-129577] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:46:56.855 [DEBUG] [Thread-129577] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:46:56.866 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:46:56.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T14:46:56.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T14:46:56.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T14:46:56.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:46:56.878 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T14:46:56.879 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:46:56.879 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:46:56.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T14:46:56.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.532086 -999.00  +26.00  20.13     19   +0.50 1 2 1 1 1   888    0 22.12 -174.36 ----- 21.1 20.1 276.2 32.4 31.9 -23.4 31.9 -21.3 31.7 -21.4 32.2 -22.7
2025-12-31T14:46:56.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T14:46:56.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T14:46:56.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.532086
2025-12-31T14:46:56.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T14:46:56.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T14:46:56.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T14:46:56.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T14:46:56.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T14:46:56.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T14:46:30', tmtdew=31.43, humidity=12.46, cloud=0.0, wind=21.53, temperature=26.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T12:46:12.230', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T14:46:56.882 [DEBUG] [Thread-129577] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:46:56.965 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T14:46:56.977 [DEBUG] [Thread-129580] [transport.py] [_log()] starting thread (client mode): 0xb6bb1ba0
2025-12-31T14:46:56.977 [DEBUG] [Thread-129580] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:46:56.991 [DEBUG] [Thread-129580] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T14:46:56.991 [INFO] [Thread-129580] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T14:46:56.998 [DEBUG] [Thread-129580] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:46:56.999 [DEBUG] [Thread-129580] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T14:46:56.999 [DEBUG] [Thread-129580] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:46:56.999 [DEBUG] [Thread-129580] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:46:56.999 [DEBUG] [Thread-129580] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:46:56.999 [DEBUG] [Thread-129580] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:46:56.999 [DEBUG] [Thread-129580] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:46:56.999 [DEBUG] [Thread-129580] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:46:56.999 [DEBUG] [Thread-129580] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:46:56.999 [DEBUG] [Thread-129580] [transport.py] [_log()] client lang: <none>
2025-12-31T14:46:57.000 [DEBUG] [Thread-129580] [transport.py] [_log()] server lang: <none>
2025-12-31T14:46:57.000 [DEBUG] [Thread-129580] [transport.py] [_log()] kex follows: False
2025-12-31T14:46:57.000 [DEBUG] [Thread-129580] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:46:57.000 [DEBUG] [Thread-129580] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:46:57.000 [DEBUG] [Thread-129580] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:46:57.000 [DEBUG] [Thread-129580] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:46:57.000 [DEBUG] [Thread-129580] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:46:57.000 [DEBUG] [Thread-129580] [transport.py] [_log()] Compression: none
2025-12-31T14:46:57.000 [DEBUG] [Thread-129580] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:46:57.063 [DEBUG] [Thread-129580] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:46:57.063 [DEBUG] [Thread-129580] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:46:57.064 [DEBUG] [Thread-129580] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T14:46:57.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T14:46:57.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:46:57.120 [DEBUG] [Thread-129580] [transport.py] [_log()] userauth is OK
2025-12-31T14:46:57.120 [DEBUG] [Thread-129580] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:46:57.120 [DEBUG] [Thread-129580] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:46:57.120 [DEBUG] [Thread-129580] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T14:46:57.120 [DEBUG] [Thread-129580] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:46:57.144 [INFO] [Thread-129580] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:46:57.145 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T14:46:57.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:46:57.973 [DEBUG] [Thread-129580] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:46:57.973 [DEBUG] [Thread-129580] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:46:58.021 [DEBUG] [Thread-129580] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:46:58.021 [DEBUG] [Thread-129580] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:46:58.030 [DEBUG] [Thread-129580] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:46:58.040 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:46:58.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T14:46:58.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T14:46:58.058 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:46:58.058 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:46:58.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:46:58.067 [DEBUG] [Thread-129580] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:47:01.796 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:47:01.796 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:47:04.494 [DEBUG] [Thread-129582 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:47:19.519 [DEBUG] [Thread-129583 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:47:19.536 [DEBUG] [Thread-129584 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:47:28.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T14:47:28.088 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T14:47:28.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T14:47:28.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 14, 47, 2), 31.77, 12.21, 0.0, 24.7, 26.59, 0, 0, 0, 2, 0, 0),)
2025-12-31T14:47:28.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 14:47:02
2025-12-31T14:47:28.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T14:47:29.117 [DEBUG] [Thread-129585] [transport.py] [_log()] starting thread (client mode): 0xb95b10c0
2025-12-31T14:47:29.117 [DEBUG] [Thread-129585] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:47:29.137 [DEBUG] [Thread-129585] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T14:47:29.137 [INFO] [Thread-129585] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T14:47:29.139 [DEBUG] [Thread-129585] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:47:29.139 [DEBUG] [Thread-129585] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T14:47:29.139 [DEBUG] [Thread-129585] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:47:29.139 [DEBUG] [Thread-129585] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:47:29.139 [DEBUG] [Thread-129585] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:47:29.139 [DEBUG] [Thread-129585] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:47:29.139 [DEBUG] [Thread-129585] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:47:29.139 [DEBUG] [Thread-129585] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:47:29.139 [DEBUG] [Thread-129585] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:47:29.139 [DEBUG] [Thread-129585] [transport.py] [_log()] client lang: <none>
2025-12-31T14:47:29.139 [DEBUG] [Thread-129585] [transport.py] [_log()] server lang: <none>
2025-12-31T14:47:29.139 [DEBUG] [Thread-129585] [transport.py] [_log()] kex follows: False
2025-12-31T14:47:29.139 [DEBUG] [Thread-129585] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:47:29.139 [DEBUG] [Thread-129585] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:47:29.139 [DEBUG] [Thread-129585] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:47:29.139 [DEBUG] [Thread-129585] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:47:29.139 [DEBUG] [Thread-129585] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:47:29.139 [DEBUG] [Thread-129585] [transport.py] [_log()] Compression: none
2025-12-31T14:47:29.139 [DEBUG] [Thread-129585] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:47:29.149 [DEBUG] [Thread-129585] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:47:29.150 [DEBUG] [Thread-129585] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:47:29.150 [DEBUG] [Thread-129585] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T14:47:29.150 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T14:47:29.150 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:47:29.151 [DEBUG] [Thread-129585] [transport.py] [_log()] userauth is OK
2025-12-31T14:47:29.151 [DEBUG] [Thread-129585] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:47:29.151 [DEBUG] [Thread-129585] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:47:29.151 [DEBUG] [Thread-129585] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T14:47:29.151 [DEBUG] [Thread-129585] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:47:29.164 [INFO] [Thread-129585] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:47:29.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:47:29.898 [DEBUG] [Thread-129585] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:47:29.898 [DEBUG] [Thread-129585] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:47:29.899 [DEBUG] [Thread-129585] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T14:47:29.939 [DEBUG] [Thread-129585] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:47:29.940 [DEBUG] [Thread-129585] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:47:29.942 [DEBUG] [Thread-129585] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:47:29.947 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:47:29.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T14:47:29.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T14:47:29.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T14:47:29.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:47:29.958 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T14:47:29.959 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:47:29.959 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:47:29.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T14:47:29.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.532433 -999.00  +25.80  30.32     19   +0.70 1 2 2 1 1   888    0 22.47 -156.05 ----- 30.5 30.3 292.4 35.1 31.8 -22.7 31.8 -21.1 31.6 -21.8 32.1 -22.5
2025-12-31T14:47:29.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T14:47:29.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T14:47:29.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.532433
2025-12-31T14:47:29.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T14:47:29.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T14:47:29.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T14:47:29.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T14:47:29.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T14:47:29.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T14:47:02', tmtdew=31.77, humidity=12.21, cloud=0.0, wind=24.7, temperature=26.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T12:46:42.211', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T14:47:29.962 [DEBUG] [Thread-129585] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:47:30.042 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T14:47:30.054 [DEBUG] [Thread-129588] [transport.py] [_log()] starting thread (client mode): 0xb6ba1240
2025-12-31T14:47:30.054 [DEBUG] [Thread-129588] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:47:30.068 [DEBUG] [Thread-129588] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T14:47:30.068 [INFO] [Thread-129588] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T14:47:30.076 [DEBUG] [Thread-129588] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:47:30.076 [DEBUG] [Thread-129588] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T14:47:30.077 [DEBUG] [Thread-129588] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:47:30.077 [DEBUG] [Thread-129588] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:47:30.077 [DEBUG] [Thread-129588] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:47:30.077 [DEBUG] [Thread-129588] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:47:30.077 [DEBUG] [Thread-129588] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:47:30.077 [DEBUG] [Thread-129588] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:47:30.077 [DEBUG] [Thread-129588] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:47:30.077 [DEBUG] [Thread-129588] [transport.py] [_log()] client lang: <none>
2025-12-31T14:47:30.077 [DEBUG] [Thread-129588] [transport.py] [_log()] server lang: <none>
2025-12-31T14:47:30.077 [DEBUG] [Thread-129588] [transport.py] [_log()] kex follows: False
2025-12-31T14:47:30.078 [DEBUG] [Thread-129588] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:47:30.078 [DEBUG] [Thread-129588] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:47:30.078 [DEBUG] [Thread-129588] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:47:30.078 [DEBUG] [Thread-129588] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:47:30.078 [DEBUG] [Thread-129588] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:47:30.078 [DEBUG] [Thread-129588] [transport.py] [_log()] Compression: none
2025-12-31T14:47:30.078 [DEBUG] [Thread-129588] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:47:30.135 [DEBUG] [Thread-129588] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:47:30.136 [DEBUG] [Thread-129588] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:47:30.136 [DEBUG] [Thread-129588] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T14:47:30.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T14:47:30.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:47:30.191 [DEBUG] [Thread-129588] [transport.py] [_log()] userauth is OK
2025-12-31T14:47:30.192 [DEBUG] [Thread-129588] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:47:30.192 [DEBUG] [Thread-129588] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:47:30.192 [DEBUG] [Thread-129588] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T14:47:30.192 [DEBUG] [Thread-129588] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:47:30.211 [INFO] [Thread-129588] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:47:30.212 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T14:47:30.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:47:31.031 [DEBUG] [Thread-129588] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:47:31.032 [DEBUG] [Thread-129588] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:47:31.080 [DEBUG] [Thread-129588] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:47:31.081 [DEBUG] [Thread-129588] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:47:31.090 [DEBUG] [Thread-129588] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:47:31.099 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:47:31.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T14:47:31.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T14:47:31.118 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:47:31.118 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:47:31.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:47:31.126 [DEBUG] [Thread-129588] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:47:34.568 [DEBUG] [Thread-129590 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:47:49.624 [DEBUG] [Thread-129591 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:48:01.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T14:48:01.148 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T14:48:01.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T14:48:01.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 14, 47, 34), 31.44, 12.61, 0.0, 27.21, 26.62, 0, 0, 0, 2, 0, 0),)
2025-12-31T14:48:01.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 14:47:34
2025-12-31T14:48:01.934 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:48:01.935 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:48:02.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T14:48:02.163 [DEBUG] [Thread-129592] [transport.py] [_log()] starting thread (client mode): 0xb6bbb880
2025-12-31T14:48:02.163 [DEBUG] [Thread-129592] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:48:02.183 [DEBUG] [Thread-129592] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T14:48:02.183 [INFO] [Thread-129592] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T14:48:02.187 [DEBUG] [Thread-129592] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:48:02.187 [DEBUG] [Thread-129592] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T14:48:02.187 [DEBUG] [Thread-129592] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:48:02.187 [DEBUG] [Thread-129592] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:48:02.187 [DEBUG] [Thread-129592] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:48:02.187 [DEBUG] [Thread-129592] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:48:02.187 [DEBUG] [Thread-129592] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:48:02.187 [DEBUG] [Thread-129592] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:48:02.187 [DEBUG] [Thread-129592] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:48:02.187 [DEBUG] [Thread-129592] [transport.py] [_log()] client lang: <none>
2025-12-31T14:48:02.187 [DEBUG] [Thread-129592] [transport.py] [_log()] server lang: <none>
2025-12-31T14:48:02.187 [DEBUG] [Thread-129592] [transport.py] [_log()] kex follows: False
2025-12-31T14:48:02.187 [DEBUG] [Thread-129592] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:48:02.187 [DEBUG] [Thread-129592] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:48:02.187 [DEBUG] [Thread-129592] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:48:02.187 [DEBUG] [Thread-129592] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:48:02.187 [DEBUG] [Thread-129592] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:48:02.187 [DEBUG] [Thread-129592] [transport.py] [_log()] Compression: none
2025-12-31T14:48:02.187 [DEBUG] [Thread-129592] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:48:02.203 [DEBUG] [Thread-129592] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:48:02.203 [DEBUG] [Thread-129592] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:48:02.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T14:48:02.204 [DEBUG] [Thread-129592] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T14:48:02.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:48:02.205 [DEBUG] [Thread-129592] [transport.py] [_log()] userauth is OK
2025-12-31T14:48:02.206 [DEBUG] [Thread-129592] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:48:02.206 [DEBUG] [Thread-129592] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:48:02.206 [DEBUG] [Thread-129592] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T14:48:02.206 [DEBUG] [Thread-129592] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:48:02.219 [INFO] [Thread-129592] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:48:02.219 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:48:02.842 [DEBUG] [Thread-129592] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:48:02.842 [DEBUG] [Thread-129592] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:48:02.842 [DEBUG] [Thread-129592] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T14:48:02.883 [DEBUG] [Thread-129592] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:48:02.883 [DEBUG] [Thread-129592] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:48:02.885 [DEBUG] [Thread-129592] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:48:02.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:48:02.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T14:48:02.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T14:48:02.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T14:48:02.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:48:02.903 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T14:48:02.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:48:02.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:48:02.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T14:48:02.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.532781 -999.00  +25.50  26.26     19   +0.90 1 2 1 1 1   888    0 22.84 -149.98 ----- 22.0 26.3 288.6 33.8 31.8 -20.9 31.7 -20.0 31.6 -20.1 32.0 -20.4
2025-12-31T14:48:02.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T14:48:02.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T14:48:02.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.532781
2025-12-31T14:48:02.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T14:48:02.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T14:48:02.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T14:48:02.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T14:48:02.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T14:48:02.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T14:47:34', tmtdew=31.44, humidity=12.61, cloud=0.0, wind=27.21, temperature=26.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T12:47:12.278', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T14:48:02.904 [DEBUG] [Thread-129592] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:48:02.978 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T14:48:02.990 [DEBUG] [Thread-129595] [transport.py] [_log()] starting thread (client mode): 0xb6b29870
2025-12-31T14:48:02.990 [DEBUG] [Thread-129595] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:48:03.004 [DEBUG] [Thread-129595] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T14:48:03.004 [INFO] [Thread-129595] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T14:48:03.011 [DEBUG] [Thread-129595] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:48:03.012 [DEBUG] [Thread-129595] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T14:48:03.012 [DEBUG] [Thread-129595] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:48:03.012 [DEBUG] [Thread-129595] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:48:03.012 [DEBUG] [Thread-129595] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:48:03.012 [DEBUG] [Thread-129595] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:48:03.012 [DEBUG] [Thread-129595] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:48:03.012 [DEBUG] [Thread-129595] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:48:03.012 [DEBUG] [Thread-129595] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:48:03.012 [DEBUG] [Thread-129595] [transport.py] [_log()] client lang: <none>
2025-12-31T14:48:03.012 [DEBUG] [Thread-129595] [transport.py] [_log()] server lang: <none>
2025-12-31T14:48:03.012 [DEBUG] [Thread-129595] [transport.py] [_log()] kex follows: False
2025-12-31T14:48:03.012 [DEBUG] [Thread-129595] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:48:03.012 [DEBUG] [Thread-129595] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:48:03.012 [DEBUG] [Thread-129595] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:48:03.012 [DEBUG] [Thread-129595] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:48:03.012 [DEBUG] [Thread-129595] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:48:03.012 [DEBUG] [Thread-129595] [transport.py] [_log()] Compression: none
2025-12-31T14:48:03.012 [DEBUG] [Thread-129595] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:48:03.069 [DEBUG] [Thread-129595] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:48:03.069 [DEBUG] [Thread-129595] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:48:03.069 [DEBUG] [Thread-129595] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T14:48:03.069 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T14:48:03.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:48:03.130 [DEBUG] [Thread-129595] [transport.py] [_log()] userauth is OK
2025-12-31T14:48:03.130 [DEBUG] [Thread-129595] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:48:03.130 [DEBUG] [Thread-129595] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:48:03.130 [DEBUG] [Thread-129595] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T14:48:03.131 [DEBUG] [Thread-129595] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:48:03.147 [INFO] [Thread-129595] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:48:03.148 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T14:48:03.148 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:48:04.055 [DEBUG] [Thread-129595] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:48:04.055 [DEBUG] [Thread-129595] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:48:04.103 [DEBUG] [Thread-129595] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:48:04.103 [DEBUG] [Thread-129595] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:48:04.111 [DEBUG] [Thread-129595] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:48:04.119 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:48:04.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T14:48:04.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T14:48:04.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:48:04.135 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:48:04.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:48:04.143 [DEBUG] [Thread-129595] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:48:04.656 [DEBUG] [Thread-129597 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:48:19.569 [DEBUG] [Thread-129598 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:48:19.694 [DEBUG] [Thread-129599 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:48:34.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T14:48:34.166 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T14:48:34.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-12-31T14:48:34.731 [DEBUG] [Thread-129600 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:48:34.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 14, 48, 6), 31.32, 12.75, 0.0, 25.85, 26.85, 0, 0, 0, 2, 0, 0),)
2025-12-31T14:48:34.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 14:48:06
2025-12-31T14:48:35.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T14:48:35.154 [DEBUG] [Thread-129601] [transport.py] [_log()] starting thread (client mode): 0xb6bbfc40
2025-12-31T14:48:35.155 [DEBUG] [Thread-129601] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:48:35.175 [DEBUG] [Thread-129601] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T14:48:35.175 [INFO] [Thread-129601] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T14:48:35.176 [DEBUG] [Thread-129601] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:48:35.177 [DEBUG] [Thread-129601] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T14:48:35.177 [DEBUG] [Thread-129601] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:48:35.177 [DEBUG] [Thread-129601] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:48:35.177 [DEBUG] [Thread-129601] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:48:35.177 [DEBUG] [Thread-129601] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:48:35.177 [DEBUG] [Thread-129601] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:48:35.177 [DEBUG] [Thread-129601] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:48:35.177 [DEBUG] [Thread-129601] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:48:35.177 [DEBUG] [Thread-129601] [transport.py] [_log()] client lang: <none>
2025-12-31T14:48:35.177 [DEBUG] [Thread-129601] [transport.py] [_log()] server lang: <none>
2025-12-31T14:48:35.177 [DEBUG] [Thread-129601] [transport.py] [_log()] kex follows: False
2025-12-31T14:48:35.177 [DEBUG] [Thread-129601] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:48:35.177 [DEBUG] [Thread-129601] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:48:35.177 [DEBUG] [Thread-129601] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:48:35.177 [DEBUG] [Thread-129601] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:48:35.177 [DEBUG] [Thread-129601] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:48:35.177 [DEBUG] [Thread-129601] [transport.py] [_log()] Compression: none
2025-12-31T14:48:35.177 [DEBUG] [Thread-129601] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:48:35.195 [DEBUG] [Thread-129601] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:48:35.195 [DEBUG] [Thread-129601] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:48:35.196 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T14:48:35.196 [DEBUG] [Thread-129601] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T14:48:35.197 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:48:35.198 [DEBUG] [Thread-129601] [transport.py] [_log()] userauth is OK
2025-12-31T14:48:35.198 [DEBUG] [Thread-129601] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:48:35.198 [DEBUG] [Thread-129601] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:48:35.199 [DEBUG] [Thread-129601] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T14:48:35.199 [DEBUG] [Thread-129601] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:48:35.223 [INFO] [Thread-129601] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:48:35.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:48:35.967 [DEBUG] [Thread-129601] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:48:35.967 [DEBUG] [Thread-129601] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:48:35.968 [DEBUG] [Thread-129601] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T14:48:36.008 [DEBUG] [Thread-129601] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:48:36.008 [DEBUG] [Thread-129601] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:48:36.011 [DEBUG] [Thread-129601] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:48:36.023 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:48:36.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T14:48:36.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T14:48:36.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T14:48:36.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:48:36.036 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T14:48:36.037 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:48:36.037 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:48:36.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T14:48:36.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.533128 -999.00  +25.40  23.11     20   +0.80 1 2 1 1 1   888    0 22.73 -145.70 ----- 20.4 23.1 293.2 28.3 31.7 -21.6 31.7 -20.1 31.6 -20.6 31.9 -20.4
2025-12-31T14:48:36.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T14:48:36.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T14:48:36.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.533128
2025-12-31T14:48:36.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T14:48:36.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T14:48:36.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T14:48:36.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T14:48:36.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T14:48:36.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T14:48:06', tmtdew=31.32, humidity=12.75, cloud=0.0, wind=25.85, temperature=26.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T12:47:42.259', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T14:48:36.039 [DEBUG] [Thread-129601] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:48:36.122 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T14:48:36.135 [DEBUG] [Thread-129604] [transport.py] [_log()] starting thread (client mode): 0xb6b2b580
2025-12-31T14:48:36.136 [DEBUG] [Thread-129604] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:48:36.150 [DEBUG] [Thread-129604] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T14:48:36.150 [INFO] [Thread-129604] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T14:48:36.158 [DEBUG] [Thread-129604] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:48:36.158 [DEBUG] [Thread-129604] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T14:48:36.158 [DEBUG] [Thread-129604] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:48:36.158 [DEBUG] [Thread-129604] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:48:36.158 [DEBUG] [Thread-129604] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:48:36.158 [DEBUG] [Thread-129604] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:48:36.158 [DEBUG] [Thread-129604] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:48:36.158 [DEBUG] [Thread-129604] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:48:36.158 [DEBUG] [Thread-129604] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:48:36.158 [DEBUG] [Thread-129604] [transport.py] [_log()] client lang: <none>
2025-12-31T14:48:36.158 [DEBUG] [Thread-129604] [transport.py] [_log()] server lang: <none>
2025-12-31T14:48:36.159 [DEBUG] [Thread-129604] [transport.py] [_log()] kex follows: False
2025-12-31T14:48:36.159 [DEBUG] [Thread-129604] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:48:36.159 [DEBUG] [Thread-129604] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:48:36.159 [DEBUG] [Thread-129604] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:48:36.159 [DEBUG] [Thread-129604] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:48:36.159 [DEBUG] [Thread-129604] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:48:36.159 [DEBUG] [Thread-129604] [transport.py] [_log()] Compression: none
2025-12-31T14:48:36.159 [DEBUG] [Thread-129604] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:48:36.215 [DEBUG] [Thread-129604] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:48:36.216 [DEBUG] [Thread-129604] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:48:36.216 [DEBUG] [Thread-129604] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T14:48:36.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T14:48:36.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:48:36.271 [DEBUG] [Thread-129604] [transport.py] [_log()] userauth is OK
2025-12-31T14:48:36.272 [DEBUG] [Thread-129604] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:48:36.272 [DEBUG] [Thread-129604] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:48:36.272 [DEBUG] [Thread-129604] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T14:48:36.272 [DEBUG] [Thread-129604] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:48:36.291 [INFO] [Thread-129604] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:48:36.291 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T14:48:36.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:48:37.168 [DEBUG] [Thread-129604] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:48:37.168 [DEBUG] [Thread-129604] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:48:37.217 [DEBUG] [Thread-129604] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:48:37.218 [DEBUG] [Thread-129604] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:48:37.227 [DEBUG] [Thread-129604] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:48:37.236 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:48:37.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T14:48:37.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T14:48:37.255 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:48:37.255 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:48:37.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:48:37.265 [DEBUG] [Thread-129604] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:48:49.760 [DEBUG] [Thread-129606 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:49:02.075 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:49:02.076 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:49:04.813 [DEBUG] [Thread-129607 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:49:07.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T14:49:07.281 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T14:49:07.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T14:49:07.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 14, 48, 39), 30.87, 12.84, 0.0, 19.59, 26.77, 0, 0, 0, 2, 0, 0),)
2025-12-31T14:49:07.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 14:48:39
2025-12-31T14:49:08.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T14:49:08.259 [DEBUG] [Thread-129608] [transport.py] [_log()] starting thread (client mode): 0xb6ba0ca0
2025-12-31T14:49:08.259 [DEBUG] [Thread-129608] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:49:08.280 [DEBUG] [Thread-129608] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T14:49:08.280 [INFO] [Thread-129608] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T14:49:08.283 [DEBUG] [Thread-129608] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:49:08.283 [DEBUG] [Thread-129608] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T14:49:08.284 [DEBUG] [Thread-129608] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:49:08.284 [DEBUG] [Thread-129608] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:49:08.284 [DEBUG] [Thread-129608] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:49:08.284 [DEBUG] [Thread-129608] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:49:08.284 [DEBUG] [Thread-129608] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:49:08.284 [DEBUG] [Thread-129608] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:49:08.284 [DEBUG] [Thread-129608] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:49:08.284 [DEBUG] [Thread-129608] [transport.py] [_log()] client lang: <none>
2025-12-31T14:49:08.284 [DEBUG] [Thread-129608] [transport.py] [_log()] server lang: <none>
2025-12-31T14:49:08.284 [DEBUG] [Thread-129608] [transport.py] [_log()] kex follows: False
2025-12-31T14:49:08.284 [DEBUG] [Thread-129608] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:49:08.284 [DEBUG] [Thread-129608] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:49:08.284 [DEBUG] [Thread-129608] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:49:08.284 [DEBUG] [Thread-129608] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:49:08.284 [DEBUG] [Thread-129608] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:49:08.285 [DEBUG] [Thread-129608] [transport.py] [_log()] Compression: none
2025-12-31T14:49:08.285 [DEBUG] [Thread-129608] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:49:08.302 [DEBUG] [Thread-129608] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:49:08.302 [DEBUG] [Thread-129608] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:49:08.303 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T14:49:08.303 [DEBUG] [Thread-129608] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T14:49:08.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:49:08.345 [DEBUG] [Thread-129608] [transport.py] [_log()] userauth is OK
2025-12-31T14:49:08.345 [DEBUG] [Thread-129608] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:49:08.345 [DEBUG] [Thread-129608] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:49:08.345 [DEBUG] [Thread-129608] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T14:49:08.346 [DEBUG] [Thread-129608] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:49:08.382 [INFO] [Thread-129608] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:49:08.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:49:09.042 [DEBUG] [Thread-129608] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:49:09.042 [DEBUG] [Thread-129608] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:49:09.043 [DEBUG] [Thread-129608] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T14:49:09.083 [DEBUG] [Thread-129608] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:49:09.083 [DEBUG] [Thread-129608] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:49:09.087 [DEBUG] [Thread-129608] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:49:09.100 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:49:09.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T14:49:09.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T14:49:09.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T14:49:09.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:49:09.113 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T14:49:09.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:49:09.113 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:49:09.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T14:49:09.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.533475 -999.00  +25.40  17.28     20   +0.90 1 2 1 1 1   888    0 22.86 -132.12 ----- 18.7 17.3 292.2 24.7 31.7 -21.6 31.6 -19.6 31.5 -18.1 31.9 -20.6
2025-12-31T14:49:09.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T14:49:09.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T14:49:09.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.533475
2025-12-31T14:49:09.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T14:49:09.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T14:49:09.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T14:49:09.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T14:49:09.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T14:49:09.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T14:48:39', tmtdew=30.87, humidity=12.84, cloud=0.0, wind=19.59, temperature=26.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T12:48:12.240', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T14:49:09.116 [DEBUG] [Thread-129608] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:49:09.199 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T14:49:09.211 [DEBUG] [Thread-129611] [transport.py] [_log()] starting thread (client mode): 0xb6b2bf40
2025-12-31T14:49:09.212 [DEBUG] [Thread-129611] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:49:09.226 [DEBUG] [Thread-129611] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T14:49:09.226 [INFO] [Thread-129611] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T14:49:09.234 [DEBUG] [Thread-129611] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:49:09.234 [DEBUG] [Thread-129611] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T14:49:09.234 [DEBUG] [Thread-129611] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:49:09.234 [DEBUG] [Thread-129611] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:49:09.234 [DEBUG] [Thread-129611] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:49:09.234 [DEBUG] [Thread-129611] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:49:09.234 [DEBUG] [Thread-129611] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:49:09.235 [DEBUG] [Thread-129611] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:49:09.235 [DEBUG] [Thread-129611] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:49:09.235 [DEBUG] [Thread-129611] [transport.py] [_log()] client lang: <none>
2025-12-31T14:49:09.235 [DEBUG] [Thread-129611] [transport.py] [_log()] server lang: <none>
2025-12-31T14:49:09.235 [DEBUG] [Thread-129611] [transport.py] [_log()] kex follows: False
2025-12-31T14:49:09.235 [DEBUG] [Thread-129611] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:49:09.235 [DEBUG] [Thread-129611] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:49:09.235 [DEBUG] [Thread-129611] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:49:09.235 [DEBUG] [Thread-129611] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:49:09.235 [DEBUG] [Thread-129611] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:49:09.235 [DEBUG] [Thread-129611] [transport.py] [_log()] Compression: none
2025-12-31T14:49:09.235 [DEBUG] [Thread-129611] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:49:09.291 [DEBUG] [Thread-129611] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:49:09.292 [DEBUG] [Thread-129611] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:49:09.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T14:49:09.293 [DEBUG] [Thread-129611] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T14:49:09.294 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:49:09.347 [DEBUG] [Thread-129611] [transport.py] [_log()] userauth is OK
2025-12-31T14:49:09.348 [DEBUG] [Thread-129611] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:49:09.348 [DEBUG] [Thread-129611] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:49:09.348 [DEBUG] [Thread-129611] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T14:49:09.348 [DEBUG] [Thread-129611] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:49:09.368 [INFO] [Thread-129611] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:49:09.368 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T14:49:09.369 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:49:10.211 [DEBUG] [Thread-129611] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:49:10.212 [DEBUG] [Thread-129611] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:49:10.260 [DEBUG] [Thread-129611] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:49:10.261 [DEBUG] [Thread-129611] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:49:10.269 [DEBUG] [Thread-129611] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:49:10.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:49:10.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T14:49:10.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T14:49:10.298 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:49:10.298 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:49:10.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:49:10.306 [DEBUG] [Thread-129611] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:49:19.602 [DEBUG] [Thread-129613 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:49:19.850 [DEBUG] [Thread-129614 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:49:34.900 [DEBUG] [Thread-129615 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:49:40.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T14:49:40.329 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T14:49:40.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T14:49:41.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 14, 49, 11), 30.53, 13.06, 29.3, 17.4, 26.44, 0, 0, 0, 0, 0, 0),)
2025-12-31T14:49:41.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 14:49:11
2025-12-31T14:49:41.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T14:49:41.303 [DEBUG] [Thread-129616] [transport.py] [_log()] starting thread (client mode): 0xb6bb2ce0
2025-12-31T14:49:41.303 [DEBUG] [Thread-129616] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:49:41.324 [DEBUG] [Thread-129616] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T14:49:41.325 [INFO] [Thread-129616] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T14:49:41.327 [DEBUG] [Thread-129616] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:49:41.327 [DEBUG] [Thread-129616] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T14:49:41.328 [DEBUG] [Thread-129616] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:49:41.328 [DEBUG] [Thread-129616] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:49:41.328 [DEBUG] [Thread-129616] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:49:41.328 [DEBUG] [Thread-129616] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:49:41.328 [DEBUG] [Thread-129616] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:49:41.328 [DEBUG] [Thread-129616] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:49:41.328 [DEBUG] [Thread-129616] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:49:41.328 [DEBUG] [Thread-129616] [transport.py] [_log()] client lang: <none>
2025-12-31T14:49:41.328 [DEBUG] [Thread-129616] [transport.py] [_log()] server lang: <none>
2025-12-31T14:49:41.328 [DEBUG] [Thread-129616] [transport.py] [_log()] kex follows: False
2025-12-31T14:49:41.328 [DEBUG] [Thread-129616] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:49:41.328 [DEBUG] [Thread-129616] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:49:41.328 [DEBUG] [Thread-129616] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:49:41.328 [DEBUG] [Thread-129616] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:49:41.328 [DEBUG] [Thread-129616] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:49:41.328 [DEBUG] [Thread-129616] [transport.py] [_log()] Compression: none
2025-12-31T14:49:41.328 [DEBUG] [Thread-129616] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:49:41.345 [DEBUG] [Thread-129616] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:49:41.346 [DEBUG] [Thread-129616] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:49:41.346 [DEBUG] [Thread-129616] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T14:49:41.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T14:49:41.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:49:41.348 [DEBUG] [Thread-129616] [transport.py] [_log()] userauth is OK
2025-12-31T14:49:41.349 [DEBUG] [Thread-129616] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:49:41.349 [DEBUG] [Thread-129616] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:49:41.349 [DEBUG] [Thread-129616] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T14:49:41.349 [DEBUG] [Thread-129616] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:49:41.367 [INFO] [Thread-129616] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:49:41.368 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:49:42.140 [DEBUG] [Thread-129616] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:49:42.140 [DEBUG] [Thread-129616] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:49:42.141 [DEBUG] [Thread-129616] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T14:49:42.181 [DEBUG] [Thread-129616] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:49:42.181 [DEBUG] [Thread-129616] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:49:42.185 [DEBUG] [Thread-129616] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:49:42.197 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:49:42.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T14:49:42.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T14:49:42.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T14:49:42.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:49:42.209 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T14:49:42.209 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:49:42.209 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:49:42.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T14:49:42.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.533822 -999.00  +25.40  15.98     20   +0.80 1 2 1 1 1   888    0 22.73 -128.53 ----- 18.7 16.0 292.0 22.1 31.7 -19.5 31.6 -18.9 31.4 -20.7 31.9 -18.8
2025-12-31T14:49:42.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T14:49:42.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T14:49:42.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.533822
2025-12-31T14:49:42.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T14:49:42.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T14:49:42.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T14:49:42.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T14:49:42.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T14:49:42.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T14:49:11', tmtdew=30.53, humidity=13.06, cloud=29.3, wind=17.4, temperature=26.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T12:48:42.221', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T14:49:42.212 [DEBUG] [Thread-129616] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:49:42.295 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T14:49:42.308 [DEBUG] [Thread-129619] [transport.py] [_log()] starting thread (client mode): 0xb6bbb1c0
2025-12-31T14:49:42.309 [DEBUG] [Thread-129619] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:49:42.323 [DEBUG] [Thread-129619] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T14:49:42.323 [INFO] [Thread-129619] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T14:49:42.331 [DEBUG] [Thread-129619] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:49:42.331 [DEBUG] [Thread-129619] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T14:49:42.331 [DEBUG] [Thread-129619] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:49:42.331 [DEBUG] [Thread-129619] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:49:42.332 [DEBUG] [Thread-129619] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:49:42.332 [DEBUG] [Thread-129619] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:49:42.332 [DEBUG] [Thread-129619] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:49:42.332 [DEBUG] [Thread-129619] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:49:42.332 [DEBUG] [Thread-129619] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:49:42.332 [DEBUG] [Thread-129619] [transport.py] [_log()] client lang: <none>
2025-12-31T14:49:42.332 [DEBUG] [Thread-129619] [transport.py] [_log()] server lang: <none>
2025-12-31T14:49:42.332 [DEBUG] [Thread-129619] [transport.py] [_log()] kex follows: False
2025-12-31T14:49:42.332 [DEBUG] [Thread-129619] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:49:42.333 [DEBUG] [Thread-129619] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:49:42.333 [DEBUG] [Thread-129619] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:49:42.333 [DEBUG] [Thread-129619] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:49:42.333 [DEBUG] [Thread-129619] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:49:42.333 [DEBUG] [Thread-129619] [transport.py] [_log()] Compression: none
2025-12-31T14:49:42.333 [DEBUG] [Thread-129619] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:49:42.396 [DEBUG] [Thread-129619] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:49:42.396 [DEBUG] [Thread-129619] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:49:42.397 [DEBUG] [Thread-129619] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T14:49:42.397 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T14:49:42.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:49:42.451 [DEBUG] [Thread-129619] [transport.py] [_log()] userauth is OK
2025-12-31T14:49:42.452 [DEBUG] [Thread-129619] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:49:42.452 [DEBUG] [Thread-129619] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:49:42.452 [DEBUG] [Thread-129619] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T14:49:42.452 [DEBUG] [Thread-129619] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:49:42.472 [INFO] [Thread-129619] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:49:42.472 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T14:49:42.473 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:49:43.270 [DEBUG] [Thread-129619] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:49:43.270 [DEBUG] [Thread-129619] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:49:43.320 [DEBUG] [Thread-129619] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:49:43.320 [DEBUG] [Thread-129619] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:49:43.328 [DEBUG] [Thread-129619] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:49:43.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:49:43.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T14:49:43.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T14:49:43.352 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:49:43.352 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:49:43.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:49:43.360 [DEBUG] [Thread-129619] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:49:49.938 [DEBUG] [Thread-129621 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:50:02.215 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:50:02.216 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:50:04.990 [DEBUG] [Thread-129622 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:50:13.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T14:50:13.375 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T14:50:13.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-12-31T14:50:14.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 14, 49, 43), 30.84, 13.16, 29.3, 19.18, 26.62, 0, 0, 0, 0, 0, 0),)
2025-12-31T14:50:14.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 14:49:43
2025-12-31T14:50:14.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T14:50:14.367 [DEBUG] [Thread-129623] [transport.py] [_log()] starting thread (client mode): 0xb6ba02e0
2025-12-31T14:50:14.367 [DEBUG] [Thread-129623] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:50:14.388 [DEBUG] [Thread-129623] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T14:50:14.388 [INFO] [Thread-129623] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T14:50:14.391 [DEBUG] [Thread-129623] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:50:14.391 [DEBUG] [Thread-129623] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T14:50:14.391 [DEBUG] [Thread-129623] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:50:14.391 [DEBUG] [Thread-129623] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:50:14.391 [DEBUG] [Thread-129623] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:50:14.391 [DEBUG] [Thread-129623] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:50:14.391 [DEBUG] [Thread-129623] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:50:14.391 [DEBUG] [Thread-129623] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:50:14.391 [DEBUG] [Thread-129623] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:50:14.391 [DEBUG] [Thread-129623] [transport.py] [_log()] client lang: <none>
2025-12-31T14:50:14.391 [DEBUG] [Thread-129623] [transport.py] [_log()] server lang: <none>
2025-12-31T14:50:14.391 [DEBUG] [Thread-129623] [transport.py] [_log()] kex follows: False
2025-12-31T14:50:14.391 [DEBUG] [Thread-129623] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:50:14.391 [DEBUG] [Thread-129623] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:50:14.391 [DEBUG] [Thread-129623] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:50:14.391 [DEBUG] [Thread-129623] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:50:14.391 [DEBUG] [Thread-129623] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:50:14.391 [DEBUG] [Thread-129623] [transport.py] [_log()] Compression: none
2025-12-31T14:50:14.391 [DEBUG] [Thread-129623] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:50:14.407 [DEBUG] [Thread-129623] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:50:14.407 [DEBUG] [Thread-129623] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:50:14.407 [DEBUG] [Thread-129623] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T14:50:14.407 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T14:50:14.407 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:50:14.408 [DEBUG] [Thread-129623] [transport.py] [_log()] userauth is OK
2025-12-31T14:50:14.408 [DEBUG] [Thread-129623] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:50:14.408 [DEBUG] [Thread-129623] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:50:14.408 [DEBUG] [Thread-129623] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T14:50:14.408 [DEBUG] [Thread-129623] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:50:14.418 [INFO] [Thread-129623] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:50:14.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:50:17.327 [DEBUG] [Thread-129623] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:50:17.327 [DEBUG] [Thread-129623] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:50:17.327 [DEBUG] [Thread-129623] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T14:50:17.368 [DEBUG] [Thread-129623] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:50:17.368 [DEBUG] [Thread-129623] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:50:17.372 [DEBUG] [Thread-129623] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:50:17.448 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:50:17.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T14:50:17.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T14:50:17.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T14:50:17.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:50:17.463 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T14:50:17.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:50:17.463 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:50:17.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T14:50:17.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.534170 -999.00  +25.40  21.92     19   +0.70 1 2 1 1 1   888    0 23.21 -116.38 ----- 18.5 21.9 290.0 26.4 31.6 -20.5 31.7 -19.5 31.5 -24.2 31.9 -20.2
2025-12-31T14:50:17.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T14:50:17.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T14:50:17.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.534170
2025-12-31T14:50:17.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T14:50:17.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T14:50:17.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T14:50:17.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T14:50:17.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T14:50:17.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T14:49:43', tmtdew=30.84, humidity=13.16, cloud=29.3, wind=19.18, temperature=26.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T12:49:12.288', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T14:50:17.466 [DEBUG] [Thread-129623] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:50:17.549 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T14:50:17.561 [DEBUG] [Thread-129626] [transport.py] [_log()] starting thread (client mode): 0xb6b28190
2025-12-31T14:50:17.561 [DEBUG] [Thread-129626] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:50:17.576 [DEBUG] [Thread-129626] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T14:50:17.576 [INFO] [Thread-129626] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T14:50:17.584 [DEBUG] [Thread-129626] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:50:17.584 [DEBUG] [Thread-129626] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T14:50:17.585 [DEBUG] [Thread-129626] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:50:17.585 [DEBUG] [Thread-129626] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:50:17.585 [DEBUG] [Thread-129626] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:50:17.585 [DEBUG] [Thread-129626] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:50:17.585 [DEBUG] [Thread-129626] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:50:17.585 [DEBUG] [Thread-129626] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:50:17.585 [DEBUG] [Thread-129626] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:50:17.585 [DEBUG] [Thread-129626] [transport.py] [_log()] client lang: <none>
2025-12-31T14:50:17.585 [DEBUG] [Thread-129626] [transport.py] [_log()] server lang: <none>
2025-12-31T14:50:17.586 [DEBUG] [Thread-129626] [transport.py] [_log()] kex follows: False
2025-12-31T14:50:17.586 [DEBUG] [Thread-129626] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:50:17.586 [DEBUG] [Thread-129626] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:50:17.586 [DEBUG] [Thread-129626] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:50:17.586 [DEBUG] [Thread-129626] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:50:17.586 [DEBUG] [Thread-129626] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:50:17.586 [DEBUG] [Thread-129626] [transport.py] [_log()] Compression: none
2025-12-31T14:50:17.586 [DEBUG] [Thread-129626] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:50:17.644 [DEBUG] [Thread-129626] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:50:17.644 [DEBUG] [Thread-129626] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:50:17.645 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T14:50:17.646 [DEBUG] [Thread-129626] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T14:50:17.647 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:50:17.703 [DEBUG] [Thread-129626] [transport.py] [_log()] userauth is OK
2025-12-31T14:50:17.703 [DEBUG] [Thread-129626] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:50:17.703 [DEBUG] [Thread-129626] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:50:17.703 [DEBUG] [Thread-129626] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T14:50:17.703 [DEBUG] [Thread-129626] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:50:17.721 [INFO] [Thread-129626] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:50:17.721 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T14:50:17.721 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:50:18.552 [DEBUG] [Thread-129626] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:50:18.552 [DEBUG] [Thread-129626] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:50:18.600 [DEBUG] [Thread-129626] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:50:18.600 [DEBUG] [Thread-129626] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:50:18.609 [DEBUG] [Thread-129626] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:50:18.618 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:50:18.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T14:50:18.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T14:50:18.637 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:50:18.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:50:18.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:50:18.646 [DEBUG] [Thread-129626] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:50:19.664 [DEBUG] [Thread-129628 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:50:20.020 [DEBUG] [Thread-129629 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:50:35.074 [DEBUG] [Thread-129630 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:50:48.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T14:50:48.668 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T14:50:48.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T14:50:49.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 14, 50, 15), 31.2, 12.83, 29.3, 22.89, 26.49, 0, 0, 0, 0, 0, 0),)
2025-12-31T14:50:49.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 14:50:15
2025-12-31T14:50:49.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T14:50:49.687 [DEBUG] [Thread-129631] [transport.py] [_log()] starting thread (client mode): 0xb9559cc0
2025-12-31T14:50:49.687 [DEBUG] [Thread-129631] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:50:49.706 [DEBUG] [Thread-129631] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T14:50:49.707 [INFO] [Thread-129631] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T14:50:49.710 [DEBUG] [Thread-129631] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:50:49.710 [DEBUG] [Thread-129631] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T14:50:49.710 [DEBUG] [Thread-129631] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:50:49.710 [DEBUG] [Thread-129631] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:50:49.710 [DEBUG] [Thread-129631] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:50:49.710 [DEBUG] [Thread-129631] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:50:49.710 [DEBUG] [Thread-129631] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:50:49.710 [DEBUG] [Thread-129631] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:50:49.710 [DEBUG] [Thread-129631] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:50:49.710 [DEBUG] [Thread-129631] [transport.py] [_log()] client lang: <none>
2025-12-31T14:50:49.710 [DEBUG] [Thread-129631] [transport.py] [_log()] server lang: <none>
2025-12-31T14:50:49.710 [DEBUG] [Thread-129631] [transport.py] [_log()] kex follows: False
2025-12-31T14:50:49.710 [DEBUG] [Thread-129631] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:50:49.710 [DEBUG] [Thread-129631] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:50:49.710 [DEBUG] [Thread-129631] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:50:49.710 [DEBUG] [Thread-129631] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:50:49.710 [DEBUG] [Thread-129631] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:50:49.710 [DEBUG] [Thread-129631] [transport.py] [_log()] Compression: none
2025-12-31T14:50:49.710 [DEBUG] [Thread-129631] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:50:49.724 [DEBUG] [Thread-129631] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:50:49.724 [DEBUG] [Thread-129631] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:50:49.725 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T14:50:49.726 [DEBUG] [Thread-129631] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T14:50:49.726 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:50:49.728 [DEBUG] [Thread-129631] [transport.py] [_log()] userauth is OK
2025-12-31T14:50:49.728 [DEBUG] [Thread-129631] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:50:49.728 [DEBUG] [Thread-129631] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:50:49.728 [DEBUG] [Thread-129631] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T14:50:49.728 [DEBUG] [Thread-129631] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:50:49.755 [INFO] [Thread-129631] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:50:49.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:50:50.110 [DEBUG] [Thread-129633 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:50:50.423 [DEBUG] [Thread-129631] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:50:50.423 [DEBUG] [Thread-129631] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:50:50.423 [DEBUG] [Thread-129631] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T14:50:50.464 [DEBUG] [Thread-129631] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:50:50.464 [DEBUG] [Thread-129631] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:50:50.469 [DEBUG] [Thread-129631] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:50:50.474 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:50:50.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T14:50:50.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T14:50:50.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T14:50:50.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:50:50.485 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T14:50:50.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:50:50.485 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:50:50.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T14:50:50.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.534864 -999.00  +26.20  23.08     18   +0.70 1 2 1 1 1   888    0 22.91 -118.63 ----- 19.6 23.1 292.4 31.1 31.6 -21.2 31.5 -19.9 31.4 -20.1 31.7 -20.7
2025-12-31T14:50:50.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T14:50:50.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T14:50:50.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.534864
2025-12-31T14:50:50.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T14:50:50.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T14:50:50.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T14:50:50.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T14:50:50.488 [DEBUG] [Thread-129631] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:50:50.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T14:50:50.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T14:50:15', tmtdew=31.2, humidity=12.83, cloud=29.3, wind=22.89, temperature=26.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T12:50:12.250', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T14:50:50.572 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T14:50:50.584 [DEBUG] [Thread-129635] [transport.py] [_log()] starting thread (client mode): 0xb6ba1ab0
2025-12-31T14:50:50.585 [DEBUG] [Thread-129635] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:50:50.604 [DEBUG] [Thread-129635] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T14:50:50.605 [INFO] [Thread-129635] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T14:50:50.612 [DEBUG] [Thread-129635] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:50:50.612 [DEBUG] [Thread-129635] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T14:50:50.613 [DEBUG] [Thread-129635] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:50:50.613 [DEBUG] [Thread-129635] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:50:50.613 [DEBUG] [Thread-129635] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:50:50.613 [DEBUG] [Thread-129635] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:50:50.613 [DEBUG] [Thread-129635] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:50:50.613 [DEBUG] [Thread-129635] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:50:50.613 [DEBUG] [Thread-129635] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:50:50.613 [DEBUG] [Thread-129635] [transport.py] [_log()] client lang: <none>
2025-12-31T14:50:50.613 [DEBUG] [Thread-129635] [transport.py] [_log()] server lang: <none>
2025-12-31T14:50:50.613 [DEBUG] [Thread-129635] [transport.py] [_log()] kex follows: False
2025-12-31T14:50:50.613 [DEBUG] [Thread-129635] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:50:50.613 [DEBUG] [Thread-129635] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:50:50.613 [DEBUG] [Thread-129635] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:50:50.613 [DEBUG] [Thread-129635] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:50:50.613 [DEBUG] [Thread-129635] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:50:50.614 [DEBUG] [Thread-129635] [transport.py] [_log()] Compression: none
2025-12-31T14:50:50.614 [DEBUG] [Thread-129635] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:50:50.671 [DEBUG] [Thread-129635] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:50:50.672 [DEBUG] [Thread-129635] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:50:50.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T14:50:50.673 [DEBUG] [Thread-129635] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T14:50:50.674 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:50:50.727 [DEBUG] [Thread-129635] [transport.py] [_log()] userauth is OK
2025-12-31T14:50:50.727 [DEBUG] [Thread-129635] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:50:50.728 [DEBUG] [Thread-129635] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:50:50.728 [DEBUG] [Thread-129635] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T14:50:50.728 [DEBUG] [Thread-129635] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:50:50.747 [INFO] [Thread-129635] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:50:50.747 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T14:50:50.749 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:50:51.590 [DEBUG] [Thread-129635] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:50:51.590 [DEBUG] [Thread-129635] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:50:51.637 [DEBUG] [Thread-129635] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:50:51.637 [DEBUG] [Thread-129635] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:50:51.646 [DEBUG] [Thread-129635] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:50:51.656 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:50:51.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T14:50:51.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T14:50:51.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:50:51.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:50:51.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:50:51.683 [DEBUG] [Thread-129635] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:51:02.361 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:51:02.362 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:51:05.147 [DEBUG] [Thread-129637 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:51:19.710 [DEBUG] [Thread-129638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:51:20.194 [DEBUG] [Thread-129639 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:51:21.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T14:51:21.705 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T14:51:21.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T14:51:22.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 14, 51, 19), 31.15, 12.84, 29.3, 24.82, 26.75, 0, 0, 0, 0, 0, 0),)
2025-12-31T14:51:22.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 14:51:19
2025-12-31T14:51:22.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T14:51:22.739 [DEBUG] [Thread-129640] [transport.py] [_log()] starting thread (client mode): 0xbbfcf0d0
2025-12-31T14:51:22.740 [DEBUG] [Thread-129640] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:51:22.760 [DEBUG] [Thread-129640] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T14:51:22.760 [INFO] [Thread-129640] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T14:51:22.763 [DEBUG] [Thread-129640] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:51:22.763 [DEBUG] [Thread-129640] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T14:51:22.763 [DEBUG] [Thread-129640] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:51:22.763 [DEBUG] [Thread-129640] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:51:22.763 [DEBUG] [Thread-129640] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:51:22.763 [DEBUG] [Thread-129640] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:51:22.763 [DEBUG] [Thread-129640] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:51:22.763 [DEBUG] [Thread-129640] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:51:22.763 [DEBUG] [Thread-129640] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:51:22.763 [DEBUG] [Thread-129640] [transport.py] [_log()] client lang: <none>
2025-12-31T14:51:22.763 [DEBUG] [Thread-129640] [transport.py] [_log()] server lang: <none>
2025-12-31T14:51:22.763 [DEBUG] [Thread-129640] [transport.py] [_log()] kex follows: False
2025-12-31T14:51:22.763 [DEBUG] [Thread-129640] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:51:22.763 [DEBUG] [Thread-129640] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:51:22.763 [DEBUG] [Thread-129640] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:51:22.763 [DEBUG] [Thread-129640] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:51:22.763 [DEBUG] [Thread-129640] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:51:22.763 [DEBUG] [Thread-129640] [transport.py] [_log()] Compression: none
2025-12-31T14:51:22.763 [DEBUG] [Thread-129640] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:51:22.779 [DEBUG] [Thread-129640] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:51:22.780 [DEBUG] [Thread-129640] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:51:22.780 [DEBUG] [Thread-129640] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T14:51:22.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T14:51:22.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:51:22.780 [DEBUG] [Thread-129640] [transport.py] [_log()] userauth is OK
2025-12-31T14:51:22.780 [DEBUG] [Thread-129640] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:51:22.780 [DEBUG] [Thread-129640] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:51:22.780 [DEBUG] [Thread-129640] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T14:51:22.780 [DEBUG] [Thread-129640] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:51:22.789 [INFO] [Thread-129640] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:51:22.790 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:51:23.510 [DEBUG] [Thread-129640] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:51:23.510 [DEBUG] [Thread-129640] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:51:23.510 [DEBUG] [Thread-129640] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T14:51:23.551 [DEBUG] [Thread-129640] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:51:23.551 [DEBUG] [Thread-129640] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:51:23.553 [DEBUG] [Thread-129640] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:51:23.566 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:51:23.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T14:51:23.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T14:51:23.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T14:51:23.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:51:23.573 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T14:51:23.573 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:51:23.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:51:23.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T14:51:23.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.535211 -999.00  +26.40  17.00     17   -0.40 1 2 1 1 1   888    0 23.21 -114.44 ----- 16.2 17.0 289.7 26.3 31.5 -21.9 31.6 -20.4 31.4 -18.9 31.7 -21.8
2025-12-31T14:51:23.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T14:51:23.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T14:51:23.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.535211
2025-12-31T14:51:23.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T14:51:23.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T14:51:23.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T14:51:23.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T14:51:23.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T14:51:23.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T14:51:19', tmtdew=31.15, humidity=12.84, cloud=29.3, wind=24.82, temperature=26.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T12:50:42.230', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T14:51:23.574 [DEBUG] [Thread-129640] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:51:23.648 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T14:51:23.659 [DEBUG] [Thread-129643] [transport.py] [_log()] starting thread (client mode): 0xb95b1cc0
2025-12-31T14:51:23.660 [DEBUG] [Thread-129643] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:51:23.675 [DEBUG] [Thread-129643] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T14:51:23.675 [INFO] [Thread-129643] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T14:51:23.682 [DEBUG] [Thread-129643] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:51:23.682 [DEBUG] [Thread-129643] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T14:51:23.682 [DEBUG] [Thread-129643] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:51:23.682 [DEBUG] [Thread-129643] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:51:23.682 [DEBUG] [Thread-129643] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:51:23.682 [DEBUG] [Thread-129643] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:51:23.682 [DEBUG] [Thread-129643] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:51:23.682 [DEBUG] [Thread-129643] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:51:23.682 [DEBUG] [Thread-129643] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:51:23.682 [DEBUG] [Thread-129643] [transport.py] [_log()] client lang: <none>
2025-12-31T14:51:23.682 [DEBUG] [Thread-129643] [transport.py] [_log()] server lang: <none>
2025-12-31T14:51:23.682 [DEBUG] [Thread-129643] [transport.py] [_log()] kex follows: False
2025-12-31T14:51:23.682 [DEBUG] [Thread-129643] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:51:23.682 [DEBUG] [Thread-129643] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:51:23.682 [DEBUG] [Thread-129643] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:51:23.682 [DEBUG] [Thread-129643] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:51:23.682 [DEBUG] [Thread-129643] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:51:23.682 [DEBUG] [Thread-129643] [transport.py] [_log()] Compression: none
2025-12-31T14:51:23.682 [DEBUG] [Thread-129643] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:51:23.737 [DEBUG] [Thread-129643] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:51:23.737 [DEBUG] [Thread-129643] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:51:23.737 [DEBUG] [Thread-129643] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T14:51:23.737 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T14:51:23.737 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:51:23.796 [DEBUG] [Thread-129643] [transport.py] [_log()] userauth is OK
2025-12-31T14:51:23.796 [DEBUG] [Thread-129643] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:51:23.796 [DEBUG] [Thread-129643] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:51:23.796 [DEBUG] [Thread-129643] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T14:51:23.796 [DEBUG] [Thread-129643] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:51:23.809 [INFO] [Thread-129643] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:51:23.809 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T14:51:23.810 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:51:24.694 [DEBUG] [Thread-129643] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:51:24.695 [DEBUG] [Thread-129643] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:51:24.743 [DEBUG] [Thread-129643] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:51:24.743 [DEBUG] [Thread-129643] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:51:24.752 [DEBUG] [Thread-129643] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:51:24.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:51:24.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T14:51:24.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T14:51:24.779 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:51:24.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:51:24.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:51:24.788 [DEBUG] [Thread-129643] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:51:35.225 [DEBUG] [Thread-129645 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:51:50.290 [DEBUG] [Thread-129646 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:51:54.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T14:51:54.811 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T14:51:54.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T14:51:55.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 14, 51, 51), 32.1, 11.8, 29.3, 27.93, 27.35, 0, 0, 0, 0, 0, 0),)
2025-12-31T14:51:55.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 14:51:51
2025-12-31T14:51:55.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T14:51:55.806 [DEBUG] [Thread-129647] [transport.py] [_log()] starting thread (client mode): 0xb95b1bd0
2025-12-31T14:51:55.806 [DEBUG] [Thread-129647] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:51:55.817 [DEBUG] [Thread-129647] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T14:51:55.817 [INFO] [Thread-129647] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T14:51:55.819 [DEBUG] [Thread-129647] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:51:55.819 [DEBUG] [Thread-129647] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T14:51:55.819 [DEBUG] [Thread-129647] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:51:55.819 [DEBUG] [Thread-129647] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:51:55.819 [DEBUG] [Thread-129647] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:51:55.819 [DEBUG] [Thread-129647] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:51:55.819 [DEBUG] [Thread-129647] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:51:55.819 [DEBUG] [Thread-129647] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:51:55.819 [DEBUG] [Thread-129647] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:51:55.819 [DEBUG] [Thread-129647] [transport.py] [_log()] client lang: <none>
2025-12-31T14:51:55.819 [DEBUG] [Thread-129647] [transport.py] [_log()] server lang: <none>
2025-12-31T14:51:55.819 [DEBUG] [Thread-129647] [transport.py] [_log()] kex follows: False
2025-12-31T14:51:55.819 [DEBUG] [Thread-129647] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:51:55.819 [DEBUG] [Thread-129647] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:51:55.819 [DEBUG] [Thread-129647] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:51:55.819 [DEBUG] [Thread-129647] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:51:55.819 [DEBUG] [Thread-129647] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:51:55.820 [DEBUG] [Thread-129647] [transport.py] [_log()] Compression: none
2025-12-31T14:51:55.820 [DEBUG] [Thread-129647] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:51:55.837 [DEBUG] [Thread-129647] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:51:55.837 [DEBUG] [Thread-129647] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:51:55.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T14:51:55.838 [DEBUG] [Thread-129647] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T14:51:55.839 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:51:55.841 [DEBUG] [Thread-129647] [transport.py] [_log()] userauth is OK
2025-12-31T14:51:55.841 [DEBUG] [Thread-129647] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:51:55.841 [DEBUG] [Thread-129647] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:51:55.841 [DEBUG] [Thread-129647] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T14:51:55.842 [DEBUG] [Thread-129647] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:51:55.867 [INFO] [Thread-129647] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:51:55.868 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:51:56.509 [DEBUG] [Thread-129647] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:51:56.510 [DEBUG] [Thread-129647] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:51:56.510 [DEBUG] [Thread-129647] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T14:51:56.551 [DEBUG] [Thread-129647] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:51:56.551 [DEBUG] [Thread-129647] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:51:56.555 [DEBUG] [Thread-129647] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:51:56.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:51:56.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T14:51:56.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T14:51:56.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T14:51:56.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:51:56.576 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T14:51:56.576 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:51:56.576 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:51:56.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T14:51:56.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.535558 -999.00  +26.60  21.16     17   +0.00 1 2 1 1 1   888    0 23.19 -104.85 ----- 21.8 21.2 305.6 27.2 31.9 -18.1 31.6 -18.3 31.5 -18.3 31.9 -17.7
2025-12-31T14:51:56.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T14:51:56.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T14:51:56.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.535558
2025-12-31T14:51:56.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T14:51:56.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T14:51:56.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T14:51:56.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T14:51:56.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T14:51:56.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T14:51:51', tmtdew=32.1, humidity=11.8, cloud=29.3, wind=27.93, temperature=27.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T12:51:12.211', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T14:51:56.578 [DEBUG] [Thread-129647] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:51:56.649 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T14:51:56.660 [DEBUG] [Thread-129650] [transport.py] [_log()] starting thread (client mode): 0xb6b29420
2025-12-31T14:51:56.661 [DEBUG] [Thread-129650] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:51:56.675 [DEBUG] [Thread-129650] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T14:51:56.675 [INFO] [Thread-129650] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T14:51:56.683 [DEBUG] [Thread-129650] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:51:56.683 [DEBUG] [Thread-129650] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T14:51:56.683 [DEBUG] [Thread-129650] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:51:56.684 [DEBUG] [Thread-129650] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:51:56.684 [DEBUG] [Thread-129650] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:51:56.684 [DEBUG] [Thread-129650] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:51:56.684 [DEBUG] [Thread-129650] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:51:56.684 [DEBUG] [Thread-129650] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:51:56.684 [DEBUG] [Thread-129650] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:51:56.684 [DEBUG] [Thread-129650] [transport.py] [_log()] client lang: <none>
2025-12-31T14:51:56.684 [DEBUG] [Thread-129650] [transport.py] [_log()] server lang: <none>
2025-12-31T14:51:56.684 [DEBUG] [Thread-129650] [transport.py] [_log()] kex follows: False
2025-12-31T14:51:56.684 [DEBUG] [Thread-129650] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:51:56.684 [DEBUG] [Thread-129650] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:51:56.684 [DEBUG] [Thread-129650] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:51:56.684 [DEBUG] [Thread-129650] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:51:56.684 [DEBUG] [Thread-129650] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:51:56.684 [DEBUG] [Thread-129650] [transport.py] [_log()] Compression: none
2025-12-31T14:51:56.684 [DEBUG] [Thread-129650] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:51:56.746 [DEBUG] [Thread-129650] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:51:56.747 [DEBUG] [Thread-129650] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:51:56.748 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T14:51:56.748 [DEBUG] [Thread-129650] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T14:51:56.749 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:51:56.803 [DEBUG] [Thread-129650] [transport.py] [_log()] userauth is OK
2025-12-31T14:51:56.804 [DEBUG] [Thread-129650] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:51:56.804 [DEBUG] [Thread-129650] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:51:56.804 [DEBUG] [Thread-129650] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T14:51:56.804 [DEBUG] [Thread-129650] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:51:56.823 [INFO] [Thread-129650] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:51:56.824 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T14:51:56.824 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:51:57.663 [DEBUG] [Thread-129650] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:51:57.663 [DEBUG] [Thread-129650] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:51:57.711 [DEBUG] [Thread-129650] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:51:57.711 [DEBUG] [Thread-129650] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:51:57.719 [DEBUG] [Thread-129650] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:51:57.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:51:57.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T14:51:57.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T14:51:57.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:51:57.743 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:51:57.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:51:57.751 [DEBUG] [Thread-129650] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:52:02.500 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:52:02.500 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:52:05.326 [DEBUG] [Thread-129652 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:52:19.781 [DEBUG] [Thread-129653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:52:20.381 [DEBUG] [Thread-129654 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:52:27.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T14:52:27.774 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T14:52:27.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T14:52:28.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 14, 52, 23), 32.06, 11.8, 29.3, 25.21, 27.2, 0, 0, 0, 0, 0, 0),)
2025-12-31T14:52:28.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 14:52:23
2025-12-31T14:52:28.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T14:52:28.754 [DEBUG] [Thread-129655] [transport.py] [_log()] starting thread (client mode): 0xb6b28f70
2025-12-31T14:52:28.754 [DEBUG] [Thread-129655] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:52:28.774 [DEBUG] [Thread-129655] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T14:52:28.775 [INFO] [Thread-129655] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T14:52:28.777 [DEBUG] [Thread-129655] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:52:28.777 [DEBUG] [Thread-129655] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T14:52:28.778 [DEBUG] [Thread-129655] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:52:28.778 [DEBUG] [Thread-129655] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:52:28.778 [DEBUG] [Thread-129655] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:52:28.778 [DEBUG] [Thread-129655] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:52:28.778 [DEBUG] [Thread-129655] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:52:28.778 [DEBUG] [Thread-129655] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:52:28.778 [DEBUG] [Thread-129655] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:52:28.778 [DEBUG] [Thread-129655] [transport.py] [_log()] client lang: <none>
2025-12-31T14:52:28.778 [DEBUG] [Thread-129655] [transport.py] [_log()] server lang: <none>
2025-12-31T14:52:28.778 [DEBUG] [Thread-129655] [transport.py] [_log()] kex follows: False
2025-12-31T14:52:28.778 [DEBUG] [Thread-129655] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:52:28.778 [DEBUG] [Thread-129655] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:52:28.778 [DEBUG] [Thread-129655] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:52:28.778 [DEBUG] [Thread-129655] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:52:28.778 [DEBUG] [Thread-129655] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:52:28.778 [DEBUG] [Thread-129655] [transport.py] [_log()] Compression: none
2025-12-31T14:52:28.778 [DEBUG] [Thread-129655] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:52:28.796 [DEBUG] [Thread-129655] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:52:28.796 [DEBUG] [Thread-129655] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:52:28.796 [DEBUG] [Thread-129655] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T14:52:28.796 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T14:52:28.796 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:52:28.797 [DEBUG] [Thread-129655] [transport.py] [_log()] userauth is OK
2025-12-31T14:52:28.797 [DEBUG] [Thread-129655] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:52:28.797 [DEBUG] [Thread-129655] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:52:28.797 [DEBUG] [Thread-129655] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T14:52:28.797 [DEBUG] [Thread-129655] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:52:28.807 [INFO] [Thread-129655] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:52:28.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:52:29.530 [DEBUG] [Thread-129655] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:52:29.530 [DEBUG] [Thread-129655] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:52:29.531 [DEBUG] [Thread-129655] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T14:52:29.571 [DEBUG] [Thread-129655] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:52:29.571 [DEBUG] [Thread-129655] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:52:29.575 [DEBUG] [Thread-129655] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:52:29.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:52:29.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T14:52:29.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T14:52:29.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T14:52:29.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:52:29.593 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T14:52:29.593 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:52:29.593 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:52:29.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T14:52:29.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.535906 -999.00  +27.00  19.82     18   +0.90 1 2 1 1 1   888    0 23.62 -107.40 ----- 13.4 19.8 302.0 25.2 32.1 -18.4 31.9 -16.8 31.9 -15.9 32.2 -17.9
2025-12-31T14:52:29.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T14:52:29.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T14:52:29.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.535906
2025-12-31T14:52:29.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T14:52:29.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T14:52:29.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T14:52:29.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T14:52:29.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T14:52:29.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T14:52:23', tmtdew=32.06, humidity=11.8, cloud=29.3, wind=25.21, temperature=27.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T12:51:42.278', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T14:52:29.596 [DEBUG] [Thread-129655] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:52:29.679 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T14:52:29.691 [DEBUG] [Thread-129658] [transport.py] [_log()] starting thread (client mode): 0xb6ba0940
2025-12-31T14:52:29.691 [DEBUG] [Thread-129658] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:52:29.705 [DEBUG] [Thread-129658] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T14:52:29.706 [INFO] [Thread-129658] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T14:52:29.713 [DEBUG] [Thread-129658] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:52:29.713 [DEBUG] [Thread-129658] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T14:52:29.713 [DEBUG] [Thread-129658] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:52:29.713 [DEBUG] [Thread-129658] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:52:29.713 [DEBUG] [Thread-129658] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:52:29.714 [DEBUG] [Thread-129658] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:52:29.714 [DEBUG] [Thread-129658] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:52:29.714 [DEBUG] [Thread-129658] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:52:29.714 [DEBUG] [Thread-129658] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:52:29.714 [DEBUG] [Thread-129658] [transport.py] [_log()] client lang: <none>
2025-12-31T14:52:29.714 [DEBUG] [Thread-129658] [transport.py] [_log()] server lang: <none>
2025-12-31T14:52:29.714 [DEBUG] [Thread-129658] [transport.py] [_log()] kex follows: False
2025-12-31T14:52:29.714 [DEBUG] [Thread-129658] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:52:29.714 [DEBUG] [Thread-129658] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:52:29.714 [DEBUG] [Thread-129658] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:52:29.714 [DEBUG] [Thread-129658] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:52:29.714 [DEBUG] [Thread-129658] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:52:29.714 [DEBUG] [Thread-129658] [transport.py] [_log()] Compression: none
2025-12-31T14:52:29.714 [DEBUG] [Thread-129658] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:52:29.772 [DEBUG] [Thread-129658] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:52:29.773 [DEBUG] [Thread-129658] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:52:29.774 [DEBUG] [Thread-129658] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T14:52:29.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T14:52:29.775 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:52:29.831 [DEBUG] [Thread-129658] [transport.py] [_log()] userauth is OK
2025-12-31T14:52:29.831 [DEBUG] [Thread-129658] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:52:29.832 [DEBUG] [Thread-129658] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:52:29.832 [DEBUG] [Thread-129658] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T14:52:29.832 [DEBUG] [Thread-129658] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:52:29.851 [INFO] [Thread-129658] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:52:29.851 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T14:52:29.851 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:52:30.669 [DEBUG] [Thread-129658] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:52:30.670 [DEBUG] [Thread-129658] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:52:30.717 [DEBUG] [Thread-129658] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:52:30.717 [DEBUG] [Thread-129658] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:52:30.727 [DEBUG] [Thread-129658] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:52:30.736 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:52:30.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T14:52:30.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T14:52:30.754 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:52:30.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:52:30.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:52:30.763 [DEBUG] [Thread-129658] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:52:35.414 [DEBUG] [Thread-129660 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:52:50.468 [DEBUG] [Thread-129661 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:53:00.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T14:53:00.786 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T14:53:00.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T14:53:01.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 14, 52, 55), 32.56, 11.31, 29.3, 25.16, 26.49, 0, 0, 0, 0, 0, 0),)
2025-12-31T14:53:01.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 14:52:55
2025-12-31T14:53:01.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T14:53:01.788 [DEBUG] [Thread-129662] [transport.py] [_log()] starting thread (client mode): 0xb6ba0130
2025-12-31T14:53:01.788 [DEBUG] [Thread-129662] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:53:01.808 [DEBUG] [Thread-129662] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T14:53:01.808 [INFO] [Thread-129662] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T14:53:01.811 [DEBUG] [Thread-129662] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:53:01.811 [DEBUG] [Thread-129662] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T14:53:01.811 [DEBUG] [Thread-129662] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:53:01.811 [DEBUG] [Thread-129662] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:53:01.811 [DEBUG] [Thread-129662] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:53:01.811 [DEBUG] [Thread-129662] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:53:01.811 [DEBUG] [Thread-129662] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:53:01.811 [DEBUG] [Thread-129662] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:53:01.811 [DEBUG] [Thread-129662] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:53:01.811 [DEBUG] [Thread-129662] [transport.py] [_log()] client lang: <none>
2025-12-31T14:53:01.811 [DEBUG] [Thread-129662] [transport.py] [_log()] server lang: <none>
2025-12-31T14:53:01.811 [DEBUG] [Thread-129662] [transport.py] [_log()] kex follows: False
2025-12-31T14:53:01.811 [DEBUG] [Thread-129662] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:53:01.811 [DEBUG] [Thread-129662] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:53:01.812 [DEBUG] [Thread-129662] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:53:01.812 [DEBUG] [Thread-129662] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:53:01.812 [DEBUG] [Thread-129662] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:53:01.812 [DEBUG] [Thread-129662] [transport.py] [_log()] Compression: none
2025-12-31T14:53:01.812 [DEBUG] [Thread-129662] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:53:01.829 [DEBUG] [Thread-129662] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:53:01.829 [DEBUG] [Thread-129662] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:53:01.830 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T14:53:01.830 [DEBUG] [Thread-129662] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T14:53:01.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:53:01.833 [DEBUG] [Thread-129662] [transport.py] [_log()] userauth is OK
2025-12-31T14:53:01.833 [DEBUG] [Thread-129662] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:53:01.833 [DEBUG] [Thread-129662] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:53:01.833 [DEBUG] [Thread-129662] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T14:53:01.833 [DEBUG] [Thread-129662] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:53:01.854 [INFO] [Thread-129662] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:53:01.855 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:53:02.485 [DEBUG] [Thread-129662] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:53:02.485 [DEBUG] [Thread-129662] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:53:02.485 [DEBUG] [Thread-129662] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T14:53:02.526 [DEBUG] [Thread-129662] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:53:02.526 [DEBUG] [Thread-129662] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:53:02.530 [DEBUG] [Thread-129662] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:53:02.542 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:53:02.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T14:53:02.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T14:53:02.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T14:53:02.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:53:02.554 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T14:53:02.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:53:02.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:53:02.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T14:53:02.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.536253 -999.00  +27.30  21.07     16   +0.10 1 2 1 1 1   888    0 22.80 -104.14 ----- 17.1 21.1 288.8 27.7 32.1 -20.1 32.0 -19.3 31.9 -20.6 32.4 -19.9
2025-12-31T14:53:02.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T14:53:02.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T14:53:02.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.536253
2025-12-31T14:53:02.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T14:53:02.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T14:53:02.557 [DEBUG] [Thread-129662] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:53:02.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T14:53:02.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T14:53:02.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T14:53:02.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T14:52:55', tmtdew=32.56, humidity=11.31, cloud=29.3, wind=25.16, temperature=26.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T12:52:12.259', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T14:53:02.640 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:53:02.641 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:53:02.654 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T14:53:02.666 [DEBUG] [Thread-129665] [transport.py] [_log()] starting thread (client mode): 0xb95f1b10
2025-12-31T14:53:02.667 [DEBUG] [Thread-129665] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:53:02.681 [DEBUG] [Thread-129665] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T14:53:02.681 [INFO] [Thread-129665] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T14:53:02.689 [DEBUG] [Thread-129665] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:53:02.689 [DEBUG] [Thread-129665] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T14:53:02.689 [DEBUG] [Thread-129665] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:53:02.689 [DEBUG] [Thread-129665] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:53:02.689 [DEBUG] [Thread-129665] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:53:02.689 [DEBUG] [Thread-129665] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:53:02.689 [DEBUG] [Thread-129665] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:53:02.689 [DEBUG] [Thread-129665] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:53:02.689 [DEBUG] [Thread-129665] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:53:02.689 [DEBUG] [Thread-129665] [transport.py] [_log()] client lang: <none>
2025-12-31T14:53:02.689 [DEBUG] [Thread-129665] [transport.py] [_log()] server lang: <none>
2025-12-31T14:53:02.689 [DEBUG] [Thread-129665] [transport.py] [_log()] kex follows: False
2025-12-31T14:53:02.689 [DEBUG] [Thread-129665] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:53:02.689 [DEBUG] [Thread-129665] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:53:02.690 [DEBUG] [Thread-129665] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:53:02.690 [DEBUG] [Thread-129665] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:53:02.690 [DEBUG] [Thread-129665] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:53:02.690 [DEBUG] [Thread-129665] [transport.py] [_log()] Compression: none
2025-12-31T14:53:02.690 [DEBUG] [Thread-129665] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:53:02.749 [DEBUG] [Thread-129665] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:53:02.749 [DEBUG] [Thread-129665] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:53:02.750 [DEBUG] [Thread-129665] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T14:53:02.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T14:53:02.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:53:02.807 [DEBUG] [Thread-129665] [transport.py] [_log()] userauth is OK
2025-12-31T14:53:02.807 [DEBUG] [Thread-129665] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:53:02.808 [DEBUG] [Thread-129665] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:53:02.808 [DEBUG] [Thread-129665] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T14:53:02.808 [DEBUG] [Thread-129665] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:53:02.825 [INFO] [Thread-129665] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:53:02.826 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T14:53:02.826 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:53:03.739 [DEBUG] [Thread-129665] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:53:03.740 [DEBUG] [Thread-129665] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:53:03.787 [DEBUG] [Thread-129665] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:53:03.787 [DEBUG] [Thread-129665] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:53:03.796 [DEBUG] [Thread-129665] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:53:03.805 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:53:03.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T14:53:03.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T14:53:03.824 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:53:03.825 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:53:03.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:53:03.833 [DEBUG] [Thread-129665] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:53:05.503 [DEBUG] [Thread-129667 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:53:19.832 [DEBUG] [Thread-129668 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:53:20.549 [DEBUG] [Thread-129669 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:53:33.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T14:53:33.839 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T14:53:33.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T14:53:34.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 14, 53, 27), 32.22, 11.54, 29.3, 24.84, 26.22, 0, 0, 0, 0, 0, 0),)
2025-12-31T14:53:34.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 14:53:27
2025-12-31T14:53:34.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T14:53:34.820 [DEBUG] [Thread-129670] [transport.py] [_log()] starting thread (client mode): 0xb6ba14b0
2025-12-31T14:53:34.820 [DEBUG] [Thread-129670] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:53:34.841 [DEBUG] [Thread-129670] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T14:53:34.841 [INFO] [Thread-129670] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T14:53:34.845 [DEBUG] [Thread-129670] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:53:34.845 [DEBUG] [Thread-129670] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T14:53:34.845 [DEBUG] [Thread-129670] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:53:34.845 [DEBUG] [Thread-129670] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:53:34.845 [DEBUG] [Thread-129670] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:53:34.845 [DEBUG] [Thread-129670] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:53:34.845 [DEBUG] [Thread-129670] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:53:34.845 [DEBUG] [Thread-129670] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:53:34.845 [DEBUG] [Thread-129670] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:53:34.845 [DEBUG] [Thread-129670] [transport.py] [_log()] client lang: <none>
2025-12-31T14:53:34.845 [DEBUG] [Thread-129670] [transport.py] [_log()] server lang: <none>
2025-12-31T14:53:34.845 [DEBUG] [Thread-129670] [transport.py] [_log()] kex follows: False
2025-12-31T14:53:34.845 [DEBUG] [Thread-129670] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:53:34.845 [DEBUG] [Thread-129670] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:53:34.845 [DEBUG] [Thread-129670] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:53:34.845 [DEBUG] [Thread-129670] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:53:34.845 [DEBUG] [Thread-129670] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:53:34.845 [DEBUG] [Thread-129670] [transport.py] [_log()] Compression: none
2025-12-31T14:53:34.845 [DEBUG] [Thread-129670] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:53:34.868 [DEBUG] [Thread-129670] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:53:34.868 [DEBUG] [Thread-129670] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:53:34.869 [DEBUG] [Thread-129670] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T14:53:34.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T14:53:34.870 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:53:34.871 [DEBUG] [Thread-129670] [transport.py] [_log()] userauth is OK
2025-12-31T14:53:34.871 [DEBUG] [Thread-129670] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:53:34.871 [DEBUG] [Thread-129670] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:53:34.871 [DEBUG] [Thread-129670] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T14:53:34.871 [DEBUG] [Thread-129670] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:53:34.899 [INFO] [Thread-129670] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:53:34.899 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:53:35.579 [DEBUG] [Thread-129672 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:53:35.647 [DEBUG] [Thread-129670] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:53:35.648 [DEBUG] [Thread-129670] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:53:35.648 [DEBUG] [Thread-129670] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T14:53:35.689 [DEBUG] [Thread-129670] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:53:35.689 [DEBUG] [Thread-129670] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:53:35.692 [DEBUG] [Thread-129670] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:53:35.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:53:35.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T14:53:35.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T14:53:35.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T14:53:35.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:53:35.714 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T14:53:35.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:53:35.714 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:53:35.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T14:53:35.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.536600 -999.00  +27.30  20.20     16   -0.50 1 2 1 1 1   888    0 23.48 -101.18 ----- 18.7 20.2 295.0 25.0 32.3 -19.5 32.1 -19.2 32.1 -19.4 32.5 -19.0
2025-12-31T14:53:35.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T14:53:35.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T14:53:35.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.536600
2025-12-31T14:53:35.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T14:53:35.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T14:53:35.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T14:53:35.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T14:53:35.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T14:53:35.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T14:53:27', tmtdew=32.22, humidity=11.54, cloud=29.3, wind=24.84, temperature=26.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T12:52:42.240', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T14:53:35.717 [DEBUG] [Thread-129670] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:53:35.802 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T14:53:35.813 [DEBUG] [Thread-129674] [transport.py] [_log()] starting thread (client mode): 0xb6ba1db0
2025-12-31T14:53:35.813 [DEBUG] [Thread-129674] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:53:35.828 [DEBUG] [Thread-129674] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T14:53:35.828 [INFO] [Thread-129674] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T14:53:35.835 [DEBUG] [Thread-129674] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:53:35.835 [DEBUG] [Thread-129674] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T14:53:35.836 [DEBUG] [Thread-129674] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:53:35.836 [DEBUG] [Thread-129674] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:53:35.836 [DEBUG] [Thread-129674] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:53:35.836 [DEBUG] [Thread-129674] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:53:35.836 [DEBUG] [Thread-129674] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:53:35.836 [DEBUG] [Thread-129674] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:53:35.836 [DEBUG] [Thread-129674] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:53:35.836 [DEBUG] [Thread-129674] [transport.py] [_log()] client lang: <none>
2025-12-31T14:53:35.837 [DEBUG] [Thread-129674] [transport.py] [_log()] server lang: <none>
2025-12-31T14:53:35.837 [DEBUG] [Thread-129674] [transport.py] [_log()] kex follows: False
2025-12-31T14:53:35.837 [DEBUG] [Thread-129674] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:53:35.837 [DEBUG] [Thread-129674] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:53:35.837 [DEBUG] [Thread-129674] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:53:35.837 [DEBUG] [Thread-129674] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:53:35.837 [DEBUG] [Thread-129674] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:53:35.837 [DEBUG] [Thread-129674] [transport.py] [_log()] Compression: none
2025-12-31T14:53:35.837 [DEBUG] [Thread-129674] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:53:35.896 [DEBUG] [Thread-129674] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:53:35.896 [DEBUG] [Thread-129674] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:53:35.897 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T14:53:35.898 [DEBUG] [Thread-129674] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T14:53:35.899 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:53:35.952 [DEBUG] [Thread-129674] [transport.py] [_log()] userauth is OK
2025-12-31T14:53:35.952 [DEBUG] [Thread-129674] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:53:35.952 [DEBUG] [Thread-129674] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:53:35.952 [DEBUG] [Thread-129674] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T14:53:35.953 [DEBUG] [Thread-129674] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:53:35.972 [INFO] [Thread-129674] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:53:35.972 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T14:53:35.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:53:36.855 [DEBUG] [Thread-129674] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:53:36.855 [DEBUG] [Thread-129674] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:53:36.903 [DEBUG] [Thread-129674] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:53:36.903 [DEBUG] [Thread-129674] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:53:36.913 [DEBUG] [Thread-129674] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:53:36.922 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:53:36.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T14:53:36.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T14:53:36.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:53:36.941 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:53:36.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:53:36.950 [DEBUG] [Thread-129674] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:53:50.622 [DEBUG] [Thread-129676 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:54:02.780 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:54:02.782 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:54:05.669 [DEBUG] [Thread-129677 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:54:06.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T14:54:06.972 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T14:54:06.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T14:54:07.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 14, 53, 59), 32.28, 11.59, 0.0, 20.84, 26.41, 0, 0, 0, 2, 0, 0),)
2025-12-31T14:54:07.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 14:53:59
2025-12-31T14:54:07.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T14:54:07.939 [DEBUG] [Thread-129678] [transport.py] [_log()] starting thread (client mode): 0xb95b3550
2025-12-31T14:54:07.939 [DEBUG] [Thread-129678] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:54:07.960 [DEBUG] [Thread-129678] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T14:54:07.960 [INFO] [Thread-129678] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T14:54:07.964 [DEBUG] [Thread-129678] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:54:07.964 [DEBUG] [Thread-129678] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T14:54:07.964 [DEBUG] [Thread-129678] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:54:07.964 [DEBUG] [Thread-129678] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:54:07.964 [DEBUG] [Thread-129678] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:54:07.964 [DEBUG] [Thread-129678] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:54:07.964 [DEBUG] [Thread-129678] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:54:07.964 [DEBUG] [Thread-129678] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:54:07.964 [DEBUG] [Thread-129678] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:54:07.964 [DEBUG] [Thread-129678] [transport.py] [_log()] client lang: <none>
2025-12-31T14:54:07.964 [DEBUG] [Thread-129678] [transport.py] [_log()] server lang: <none>
2025-12-31T14:54:07.964 [DEBUG] [Thread-129678] [transport.py] [_log()] kex follows: False
2025-12-31T14:54:07.964 [DEBUG] [Thread-129678] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:54:07.964 [DEBUG] [Thread-129678] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:54:07.964 [DEBUG] [Thread-129678] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:54:07.964 [DEBUG] [Thread-129678] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:54:07.965 [DEBUG] [Thread-129678] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:54:07.965 [DEBUG] [Thread-129678] [transport.py] [_log()] Compression: none
2025-12-31T14:54:07.965 [DEBUG] [Thread-129678] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:54:07.982 [DEBUG] [Thread-129678] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:54:07.983 [DEBUG] [Thread-129678] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:54:07.984 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T14:54:07.984 [DEBUG] [Thread-129678] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T14:54:07.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:54:07.987 [DEBUG] [Thread-129678] [transport.py] [_log()] userauth is OK
2025-12-31T14:54:07.988 [DEBUG] [Thread-129678] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:54:07.988 [DEBUG] [Thread-129678] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:54:07.988 [DEBUG] [Thread-129678] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T14:54:07.988 [DEBUG] [Thread-129678] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:54:08.008 [INFO] [Thread-129678] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:54:08.009 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:54:08.661 [DEBUG] [Thread-129678] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:54:08.661 [DEBUG] [Thread-129678] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:54:08.662 [DEBUG] [Thread-129678] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T14:54:08.703 [DEBUG] [Thread-129678] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:54:08.703 [DEBUG] [Thread-129678] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:54:08.707 [DEBUG] [Thread-129678] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:54:08.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:54:08.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T14:54:08.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T14:54:08.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T14:54:08.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:54:08.727 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T14:54:08.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:54:08.727 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:54:08.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T14:54:08.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.536947 -999.00  +26.90  25.86     16   -0.60 1 2 1 1 1   888    0 23.96 -83.61 ----- 27.1 25.9 294.6 29.2 32.1 -22.3 32.1 -19.9 32.1 -19.9 32.4 -21.4
2025-12-31T14:54:08.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T14:54:08.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T14:54:08.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.536947
2025-12-31T14:54:08.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T14:54:08.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T14:54:08.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T14:54:08.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T14:54:08.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T14:54:08.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T14:53:59', tmtdew=32.28, humidity=11.59, cloud=0.0, wind=20.84, temperature=26.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T12:53:12.221', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T14:54:08.730 [DEBUG] [Thread-129678] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:54:08.813 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T14:54:08.825 [DEBUG] [Thread-129681] [transport.py] [_log()] starting thread (client mode): 0xb6b28af0
2025-12-31T14:54:08.825 [DEBUG] [Thread-129681] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:54:08.840 [DEBUG] [Thread-129681] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T14:54:08.840 [INFO] [Thread-129681] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T14:54:08.847 [DEBUG] [Thread-129681] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:54:08.847 [DEBUG] [Thread-129681] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T14:54:08.847 [DEBUG] [Thread-129681] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:54:08.848 [DEBUG] [Thread-129681] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:54:08.848 [DEBUG] [Thread-129681] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:54:08.848 [DEBUG] [Thread-129681] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:54:08.848 [DEBUG] [Thread-129681] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:54:08.848 [DEBUG] [Thread-129681] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:54:08.848 [DEBUG] [Thread-129681] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:54:08.848 [DEBUG] [Thread-129681] [transport.py] [_log()] client lang: <none>
2025-12-31T14:54:08.848 [DEBUG] [Thread-129681] [transport.py] [_log()] server lang: <none>
2025-12-31T14:54:08.848 [DEBUG] [Thread-129681] [transport.py] [_log()] kex follows: False
2025-12-31T14:54:08.848 [DEBUG] [Thread-129681] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:54:08.848 [DEBUG] [Thread-129681] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:54:08.848 [DEBUG] [Thread-129681] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:54:08.848 [DEBUG] [Thread-129681] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:54:08.848 [DEBUG] [Thread-129681] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:54:08.848 [DEBUG] [Thread-129681] [transport.py] [_log()] Compression: none
2025-12-31T14:54:08.848 [DEBUG] [Thread-129681] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:54:08.908 [DEBUG] [Thread-129681] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:54:08.908 [DEBUG] [Thread-129681] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:54:08.909 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T14:54:08.909 [DEBUG] [Thread-129681] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T14:54:08.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:54:08.971 [DEBUG] [Thread-129681] [transport.py] [_log()] userauth is OK
2025-12-31T14:54:08.971 [DEBUG] [Thread-129681] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:54:08.972 [DEBUG] [Thread-129681] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:54:08.972 [DEBUG] [Thread-129681] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T14:54:08.972 [DEBUG] [Thread-129681] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:54:08.991 [INFO] [Thread-129681] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:54:08.991 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T14:54:08.992 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:54:09.852 [DEBUG] [Thread-129681] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:54:09.853 [DEBUG] [Thread-129681] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:54:09.901 [DEBUG] [Thread-129681] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:54:09.901 [DEBUG] [Thread-129681] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:54:09.911 [DEBUG] [Thread-129681] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:54:09.920 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:54:09.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T14:54:09.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-12-31T14:54:09.939 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:54:09.939 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:54:09.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:54:09.948 [DEBUG] [Thread-129681] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:54:19.884 [DEBUG] [Thread-129683 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:54:20.705 [DEBUG] [Thread-129684 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:54:35.759 [DEBUG] [Thread-129685 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:54:39.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T14:54:39.971 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T14:54:39.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T14:54:40.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 14, 54, 31), 33.02, 11.03, 0.0, 28.09, 26.59, 0, 0, 0, 2, 0, 0),)
2025-12-31T14:54:40.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 14:54:31
2025-12-31T14:54:40.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T14:54:40.937 [DEBUG] [Thread-129686] [transport.py] [_log()] starting thread (client mode): 0xb6ba38e0
2025-12-31T14:54:40.937 [DEBUG] [Thread-129686] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:54:40.956 [DEBUG] [Thread-129686] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T14:54:40.956 [INFO] [Thread-129686] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T14:54:40.959 [DEBUG] [Thread-129686] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:54:40.960 [DEBUG] [Thread-129686] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T14:54:40.960 [DEBUG] [Thread-129686] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:54:40.960 [DEBUG] [Thread-129686] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:54:40.960 [DEBUG] [Thread-129686] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:54:40.960 [DEBUG] [Thread-129686] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:54:40.960 [DEBUG] [Thread-129686] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:54:40.960 [DEBUG] [Thread-129686] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:54:40.960 [DEBUG] [Thread-129686] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:54:40.960 [DEBUG] [Thread-129686] [transport.py] [_log()] client lang: <none>
2025-12-31T14:54:40.960 [DEBUG] [Thread-129686] [transport.py] [_log()] server lang: <none>
2025-12-31T14:54:40.960 [DEBUG] [Thread-129686] [transport.py] [_log()] kex follows: False
2025-12-31T14:54:40.960 [DEBUG] [Thread-129686] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:54:40.960 [DEBUG] [Thread-129686] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:54:40.960 [DEBUG] [Thread-129686] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:54:40.960 [DEBUG] [Thread-129686] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:54:40.960 [DEBUG] [Thread-129686] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:54:40.960 [DEBUG] [Thread-129686] [transport.py] [_log()] Compression: none
2025-12-31T14:54:40.960 [DEBUG] [Thread-129686] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:54:40.978 [DEBUG] [Thread-129686] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:54:40.978 [DEBUG] [Thread-129686] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:54:40.978 [DEBUG] [Thread-129686] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T14:54:40.978 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T14:54:40.978 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:54:40.979 [DEBUG] [Thread-129686] [transport.py] [_log()] userauth is OK
2025-12-31T14:54:40.979 [DEBUG] [Thread-129686] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:54:40.979 [DEBUG] [Thread-129686] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:54:40.979 [DEBUG] [Thread-129686] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T14:54:40.979 [DEBUG] [Thread-129686] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:54:40.998 [INFO] [Thread-129686] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:54:40.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:54:41.726 [DEBUG] [Thread-129686] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:54:41.726 [DEBUG] [Thread-129686] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:54:41.727 [DEBUG] [Thread-129686] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T14:54:41.767 [DEBUG] [Thread-129686] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:54:41.767 [DEBUG] [Thread-129686] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:54:41.770 [DEBUG] [Thread-129686] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:54:41.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:54:41.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T14:54:41.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T14:54:41.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T14:54:41.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:54:41.786 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T14:54:41.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:54:41.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:54:41.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T14:54:41.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.537295 -999.00  +26.70  20.24     16   -0.60 1 2 1 1 1   888    0 24.12 -73.46 ----- 19.8 20.2 305.2 32.4 32.0 -21.7 32.0 -20.6 31.8 -21.5 32.2 -22.0
2025-12-31T14:54:41.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T14:54:41.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T14:54:41.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.537295
2025-12-31T14:54:41.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T14:54:41.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T14:54:41.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T14:54:41.788 [DEBUG] [Thread-129686] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:54:41.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T14:54:41.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T14:54:41.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T14:54:31', tmtdew=33.02, humidity=11.03, cloud=0.0, wind=28.09, temperature=26.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T12:53:42.288', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T14:54:41.872 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T14:54:41.884 [DEBUG] [Thread-129689] [transport.py] [_log()] starting thread (client mode): 0xb6bb81c0
2025-12-31T14:54:41.884 [DEBUG] [Thread-129689] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:54:41.905 [DEBUG] [Thread-129689] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T14:54:41.905 [INFO] [Thread-129689] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T14:54:41.912 [DEBUG] [Thread-129689] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:54:41.913 [DEBUG] [Thread-129689] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T14:54:41.913 [DEBUG] [Thread-129689] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:54:41.913 [DEBUG] [Thread-129689] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:54:41.913 [DEBUG] [Thread-129689] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:54:41.913 [DEBUG] [Thread-129689] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:54:41.913 [DEBUG] [Thread-129689] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:54:41.913 [DEBUG] [Thread-129689] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:54:41.913 [DEBUG] [Thread-129689] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:54:41.913 [DEBUG] [Thread-129689] [transport.py] [_log()] client lang: <none>
2025-12-31T14:54:41.913 [DEBUG] [Thread-129689] [transport.py] [_log()] server lang: <none>
2025-12-31T14:54:41.913 [DEBUG] [Thread-129689] [transport.py] [_log()] kex follows: False
2025-12-31T14:54:41.913 [DEBUG] [Thread-129689] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:54:41.913 [DEBUG] [Thread-129689] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:54:41.913 [DEBUG] [Thread-129689] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:54:41.914 [DEBUG] [Thread-129689] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:54:41.914 [DEBUG] [Thread-129689] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:54:41.914 [DEBUG] [Thread-129689] [transport.py] [_log()] Compression: none
2025-12-31T14:54:41.914 [DEBUG] [Thread-129689] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:54:41.972 [DEBUG] [Thread-129689] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:54:41.972 [DEBUG] [Thread-129689] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:54:41.973 [DEBUG] [Thread-129689] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T14:54:41.973 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T14:54:41.974 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:54:42.027 [DEBUG] [Thread-129689] [transport.py] [_log()] userauth is OK
2025-12-31T14:54:42.028 [DEBUG] [Thread-129689] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:54:42.028 [DEBUG] [Thread-129689] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:54:42.028 [DEBUG] [Thread-129689] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T14:54:42.028 [DEBUG] [Thread-129689] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:54:42.053 [INFO] [Thread-129689] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:54:42.054 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T14:54:42.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:54:42.902 [DEBUG] [Thread-129689] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:54:42.902 [DEBUG] [Thread-129689] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:54:42.950 [DEBUG] [Thread-129689] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:54:42.950 [DEBUG] [Thread-129689] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:54:42.959 [DEBUG] [Thread-129689] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:54:42.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:54:42.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T14:54:42.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T14:54:42.987 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:54:42.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:54:42.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:54:42.996 [DEBUG] [Thread-129689] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:54:50.794 [DEBUG] [Thread-129691 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:55:02.921 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:55:02.922 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:55:05.847 [DEBUG] [Thread-129692 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:55:13.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T14:55:13.003 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T14:55:13.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T14:55:13.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 14, 55, 3), 33.04, 11.05, 0.0, 24.6, 26.79, 0, 0, 0, 2, 0, 0),)
2025-12-31T14:55:13.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 14:55:03
2025-12-31T14:55:13.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T14:55:14.036 [DEBUG] [Thread-129693] [transport.py] [_log()] starting thread (client mode): 0xb95b3f70
2025-12-31T14:55:14.036 [DEBUG] [Thread-129693] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:55:14.057 [DEBUG] [Thread-129693] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T14:55:14.057 [INFO] [Thread-129693] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T14:55:14.060 [DEBUG] [Thread-129693] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:55:14.061 [DEBUG] [Thread-129693] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T14:55:14.061 [DEBUG] [Thread-129693] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:55:14.061 [DEBUG] [Thread-129693] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:55:14.061 [DEBUG] [Thread-129693] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:55:14.061 [DEBUG] [Thread-129693] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:55:14.061 [DEBUG] [Thread-129693] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:55:14.061 [DEBUG] [Thread-129693] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:55:14.061 [DEBUG] [Thread-129693] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:55:14.061 [DEBUG] [Thread-129693] [transport.py] [_log()] client lang: <none>
2025-12-31T14:55:14.061 [DEBUG] [Thread-129693] [transport.py] [_log()] server lang: <none>
2025-12-31T14:55:14.061 [DEBUG] [Thread-129693] [transport.py] [_log()] kex follows: False
2025-12-31T14:55:14.061 [DEBUG] [Thread-129693] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:55:14.061 [DEBUG] [Thread-129693] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:55:14.061 [DEBUG] [Thread-129693] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:55:14.061 [DEBUG] [Thread-129693] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:55:14.061 [DEBUG] [Thread-129693] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:55:14.061 [DEBUG] [Thread-129693] [transport.py] [_log()] Compression: none
2025-12-31T14:55:14.061 [DEBUG] [Thread-129693] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:55:14.077 [DEBUG] [Thread-129693] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:55:14.077 [DEBUG] [Thread-129693] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:55:14.077 [DEBUG] [Thread-129693] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T14:55:14.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T14:55:14.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:55:14.079 [DEBUG] [Thread-129693] [transport.py] [_log()] userauth is OK
2025-12-31T14:55:14.079 [DEBUG] [Thread-129693] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:55:14.079 [DEBUG] [Thread-129693] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:55:14.079 [DEBUG] [Thread-129693] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T14:55:14.079 [DEBUG] [Thread-129693] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:55:14.096 [INFO] [Thread-129693] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:55:14.096 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:55:15.138 [DEBUG] [Thread-129693] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:55:15.138 [DEBUG] [Thread-129693] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:55:15.138 [DEBUG] [Thread-129693] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T14:55:15.178 [DEBUG] [Thread-129693] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:55:15.178 [DEBUG] [Thread-129693] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:55:15.181 [DEBUG] [Thread-129693] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:55:15.193 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:55:15.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T14:55:15.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T14:55:15.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T14:55:15.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:55:15.214 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T14:55:15.214 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:55:15.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:55:15.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T14:55:15.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.537642 -999.00  +27.60  16.59     15   -0.50 1 2 1 1 1   888    0 24.60 -65.55 ----- 24.3 16.6 310.4 24.3 32.3 -20.6 32.1 -19.0 32.0 -18.9 32.5 -20.1
2025-12-31T14:55:15.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T14:55:15.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T14:55:15.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.537642
2025-12-31T14:55:15.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T14:55:15.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T14:55:15.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T14:55:15.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T14:55:15.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T14:55:15.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T14:55:03', tmtdew=33.04, humidity=11.05, cloud=0.0, wind=24.6, temperature=26.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T12:54:12.269', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T14:55:15.215 [DEBUG] [Thread-129693] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:55:15.295 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T14:55:15.307 [DEBUG] [Thread-129696] [transport.py] [_log()] starting thread (client mode): 0xb6b2bdf0
2025-12-31T14:55:15.307 [DEBUG] [Thread-129696] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:55:15.321 [DEBUG] [Thread-129696] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T14:55:15.322 [INFO] [Thread-129696] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T14:55:15.329 [DEBUG] [Thread-129696] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:55:15.329 [DEBUG] [Thread-129696] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T14:55:15.329 [DEBUG] [Thread-129696] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:55:15.329 [DEBUG] [Thread-129696] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:55:15.329 [DEBUG] [Thread-129696] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:55:15.329 [DEBUG] [Thread-129696] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:55:15.329 [DEBUG] [Thread-129696] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:55:15.329 [DEBUG] [Thread-129696] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:55:15.329 [DEBUG] [Thread-129696] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:55:15.329 [DEBUG] [Thread-129696] [transport.py] [_log()] client lang: <none>
2025-12-31T14:55:15.329 [DEBUG] [Thread-129696] [transport.py] [_log()] server lang: <none>
2025-12-31T14:55:15.329 [DEBUG] [Thread-129696] [transport.py] [_log()] kex follows: False
2025-12-31T14:55:15.329 [DEBUG] [Thread-129696] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:55:15.329 [DEBUG] [Thread-129696] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:55:15.329 [DEBUG] [Thread-129696] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:55:15.329 [DEBUG] [Thread-129696] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:55:15.329 [DEBUG] [Thread-129696] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:55:15.330 [DEBUG] [Thread-129696] [transport.py] [_log()] Compression: none
2025-12-31T14:55:15.330 [DEBUG] [Thread-129696] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:55:15.386 [DEBUG] [Thread-129696] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:55:15.386 [DEBUG] [Thread-129696] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:55:15.386 [DEBUG] [Thread-129696] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T14:55:15.386 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T14:55:15.386 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:55:15.442 [DEBUG] [Thread-129696] [transport.py] [_log()] userauth is OK
2025-12-31T14:55:15.442 [DEBUG] [Thread-129696] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:55:15.443 [DEBUG] [Thread-129696] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:55:15.443 [DEBUG] [Thread-129696] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T14:55:15.443 [DEBUG] [Thread-129696] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:55:15.457 [INFO] [Thread-129696] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:55:15.457 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T14:55:15.457 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:55:16.299 [DEBUG] [Thread-129696] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:55:16.299 [DEBUG] [Thread-129696] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:55:16.347 [DEBUG] [Thread-129696] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:55:16.347 [DEBUG] [Thread-129696] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:55:16.356 [DEBUG] [Thread-129696] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:55:16.364 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:55: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-12-31T14:55:16.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T14:55:16.379 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:55:16.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:55:16.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:55:16.387 [DEBUG] [Thread-129696] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:55:19.918 [DEBUG] [Thread-129698 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:55:20.885 [DEBUG] [Thread-129699 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:55:35.938 [DEBUG] [Thread-129700 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:55:46.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T14:55:46.395 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T14:55:46.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T14:55:47.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 14, 55, 35), 33.5, 10.55, 0.0, 21.56, 27.0, 0, 0, 0, 2, 0, 0),)
2025-12-31T14:55:47.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 14:55:35
2025-12-31T14:55:47.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T14:55:47.408 [DEBUG] [Thread-129701] [transport.py] [_log()] starting thread (client mode): 0xb95b1840
2025-12-31T14:55:47.408 [DEBUG] [Thread-129701] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:55:47.428 [DEBUG] [Thread-129701] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T14:55:47.428 [INFO] [Thread-129701] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T14:55:47.429 [DEBUG] [Thread-129701] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:55:47.430 [DEBUG] [Thread-129701] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T14:55:47.430 [DEBUG] [Thread-129701] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:55:47.430 [DEBUG] [Thread-129701] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:55:47.430 [DEBUG] [Thread-129701] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:55:47.430 [DEBUG] [Thread-129701] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:55:47.430 [DEBUG] [Thread-129701] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:55:47.430 [DEBUG] [Thread-129701] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:55:47.430 [DEBUG] [Thread-129701] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:55:47.430 [DEBUG] [Thread-129701] [transport.py] [_log()] client lang: <none>
2025-12-31T14:55:47.430 [DEBUG] [Thread-129701] [transport.py] [_log()] server lang: <none>
2025-12-31T14:55:47.430 [DEBUG] [Thread-129701] [transport.py] [_log()] kex follows: False
2025-12-31T14:55:47.430 [DEBUG] [Thread-129701] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:55:47.430 [DEBUG] [Thread-129701] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:55:47.430 [DEBUG] [Thread-129701] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:55:47.430 [DEBUG] [Thread-129701] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:55:47.430 [DEBUG] [Thread-129701] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:55:47.430 [DEBUG] [Thread-129701] [transport.py] [_log()] Compression: none
2025-12-31T14:55:47.430 [DEBUG] [Thread-129701] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:55:47.442 [DEBUG] [Thread-129701] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:55:47.442 [DEBUG] [Thread-129701] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:55:47.443 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T14:55:47.443 [DEBUG] [Thread-129701] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T14:55:47.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:55:47.445 [DEBUG] [Thread-129701] [transport.py] [_log()] userauth is OK
2025-12-31T14:55:47.446 [DEBUG] [Thread-129701] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:55:47.446 [DEBUG] [Thread-129701] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:55:47.446 [DEBUG] [Thread-129701] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T14:55:47.446 [DEBUG] [Thread-129701] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:55:47.482 [INFO] [Thread-129701] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:55:47.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:55:48.096 [DEBUG] [Thread-129701] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:55:48.096 [DEBUG] [Thread-129701] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:55:48.097 [DEBUG] [Thread-129701] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T14:55:48.137 [DEBUG] [Thread-129701] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:55:48.137 [DEBUG] [Thread-129701] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:55:48.139 [DEBUG] [Thread-129701] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:55:48.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:55:48.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T14:55:48.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T14:55:48.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T14:55:48.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:55:48.159 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T14:55:48.159 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:55:48.159 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:55:48.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T14:55:48.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.538336 -999.00  +26.20  28.53     16   -1.50 1 2 1 1 1   888    0 24.79 -39.83 ----- 23.2 28.5 302.2 36.1 32.0 -22.7 31.8 -22.2 31.7 -23.6 32.1 -23.0
2025-12-31T14:55:48.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T14:55:48.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T14:55:48.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.538336
2025-12-31T14:55:48.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T14:55:48.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T14:55:48.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T14:55:48.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T14:55:48.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T14:55:48.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T14:55:35', tmtdew=33.5, humidity=10.55, cloud=0.0, wind=21.56, temperature=27.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T12:55:12.230', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T14:55:48.160 [DEBUG] [Thread-129701] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:55:48.231 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T14:55:48.305 [DEBUG] [Thread-129704] [transport.py] [_log()] starting thread (client mode): 0xb95b2650
2025-12-31T14:55:48.306 [DEBUG] [Thread-129704] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:55:48.320 [DEBUG] [Thread-129704] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T14:55:48.320 [INFO] [Thread-129704] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T14:55:48.327 [DEBUG] [Thread-129704] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:55:48.328 [DEBUG] [Thread-129704] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T14:55:48.328 [DEBUG] [Thread-129704] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:55:48.328 [DEBUG] [Thread-129704] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:55:48.328 [DEBUG] [Thread-129704] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:55:48.328 [DEBUG] [Thread-129704] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:55:48.328 [DEBUG] [Thread-129704] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:55:48.328 [DEBUG] [Thread-129704] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:55:48.329 [DEBUG] [Thread-129704] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:55:48.329 [DEBUG] [Thread-129704] [transport.py] [_log()] client lang: <none>
2025-12-31T14:55:48.329 [DEBUG] [Thread-129704] [transport.py] [_log()] server lang: <none>
2025-12-31T14:55:48.329 [DEBUG] [Thread-129704] [transport.py] [_log()] kex follows: False
2025-12-31T14:55:48.329 [DEBUG] [Thread-129704] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:55:48.329 [DEBUG] [Thread-129704] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:55:48.329 [DEBUG] [Thread-129704] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:55:48.329 [DEBUG] [Thread-129704] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:55:48.329 [DEBUG] [Thread-129704] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:55:48.329 [DEBUG] [Thread-129704] [transport.py] [_log()] Compression: none
2025-12-31T14:55:48.329 [DEBUG] [Thread-129704] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:55:48.387 [DEBUG] [Thread-129704] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:55:48.388 [DEBUG] [Thread-129704] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:55:48.388 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T14:55:48.389 [DEBUG] [Thread-129704] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T14:55:48.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:55:48.443 [DEBUG] [Thread-129704] [transport.py] [_log()] userauth is OK
2025-12-31T14:55:48.444 [DEBUG] [Thread-129704] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:55:48.444 [DEBUG] [Thread-129704] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:55:48.444 [DEBUG] [Thread-129704] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T14:55:48.444 [DEBUG] [Thread-129704] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:55:48.463 [INFO] [Thread-129704] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:55:48.463 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T14:55:48.464 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:55:49.321 [DEBUG] [Thread-129704] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:55:49.321 [DEBUG] [Thread-129704] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:55:49.369 [DEBUG] [Thread-129704] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:55:49.369 [DEBUG] [Thread-129704] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:55:49.378 [DEBUG] [Thread-129704] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:55:49.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:55:49.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-12-31T14:55: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-12-31T14:55:49.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:55:49.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:55:49.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:55:49.415 [DEBUG] [Thread-129704] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:55:50.972 [DEBUG] [Thread-129706 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:56:03.064 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:56:03.065 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:56:06.012 [DEBUG] [Thread-129707 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:56:19.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T14:56:19.425 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T14:56:19.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T14:56:19.963 [DEBUG] [Thread-129708 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:56:20.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 14, 56, 7), 33.76, 10.35, 0.0, 21.23, 27.0, 0, 0, 0, 2, 0, 0),)
2025-12-31T14:56:20.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 14:56:07
2025-12-31T14:56:20.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T14:56:20.413 [DEBUG] [Thread-129709] [transport.py] [_log()] starting thread (client mode): 0xb95b2920
2025-12-31T14:56:20.414 [DEBUG] [Thread-129709] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:56:20.434 [DEBUG] [Thread-129709] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T14:56:20.434 [INFO] [Thread-129709] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T14:56:20.437 [DEBUG] [Thread-129709] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:56:20.437 [DEBUG] [Thread-129709] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T14:56:20.437 [DEBUG] [Thread-129709] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:56:20.437 [DEBUG] [Thread-129709] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:56:20.437 [DEBUG] [Thread-129709] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:56:20.437 [DEBUG] [Thread-129709] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:56:20.437 [DEBUG] [Thread-129709] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:56:20.437 [DEBUG] [Thread-129709] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:56:20.437 [DEBUG] [Thread-129709] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:56:20.437 [DEBUG] [Thread-129709] [transport.py] [_log()] client lang: <none>
2025-12-31T14:56:20.437 [DEBUG] [Thread-129709] [transport.py] [_log()] server lang: <none>
2025-12-31T14:56:20.437 [DEBUG] [Thread-129709] [transport.py] [_log()] kex follows: False
2025-12-31T14:56:20.437 [DEBUG] [Thread-129709] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:56:20.437 [DEBUG] [Thread-129709] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:56:20.437 [DEBUG] [Thread-129709] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:56:20.437 [DEBUG] [Thread-129709] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:56:20.437 [DEBUG] [Thread-129709] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:56:20.437 [DEBUG] [Thread-129709] [transport.py] [_log()] Compression: none
2025-12-31T14:56:20.437 [DEBUG] [Thread-129709] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:56:20.456 [DEBUG] [Thread-129709] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:56:20.456 [DEBUG] [Thread-129709] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:56:20.457 [DEBUG] [Thread-129709] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T14:56:20.457 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T14:56:20.457 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:56:20.458 [DEBUG] [Thread-129709] [transport.py] [_log()] userauth is OK
2025-12-31T14:56:20.459 [DEBUG] [Thread-129709] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:56:20.459 [DEBUG] [Thread-129709] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:56:20.459 [DEBUG] [Thread-129709] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T14:56:20.459 [DEBUG] [Thread-129709] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:56:20.482 [INFO] [Thread-129709] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:56:20.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:56:21.048 [DEBUG] [Thread-129711 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:56:21.225 [DEBUG] [Thread-129709] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:56:21.226 [DEBUG] [Thread-129709] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:56:21.226 [DEBUG] [Thread-129709] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T14:56:21.267 [DEBUG] [Thread-129709] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:56:21.267 [DEBUG] [Thread-129709] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:56:21.270 [DEBUG] [Thread-129709] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:56:21.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:56:21.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T14:56:21.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T14:56:21.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T14:56:21.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:56:21.292 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T14:56:21.293 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:56:21.293 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:56:21.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T14:56:21.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.538683 -999.00  +26.00  20.88     16   -1.50 1 2 1 1 1   888    0 25.36 -29.91 ----- 18.2 20.9 303.6 27.1 31.9 -22.9 31.8 -21.2 31.7 -20.8 32.1 -22.4
2025-12-31T14:56:21.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T14:56:21.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T14:56:21.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.538683
2025-12-31T14:56:21.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T14:56:21.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T14:56:21.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T14:56:21.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T14:56:21.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T14:56:21.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T14:56:07', tmtdew=33.76, humidity=10.35, cloud=0.0, wind=21.23, temperature=27.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T12:55:42.211', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T14:56:21.295 [DEBUG] [Thread-129709] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:56:21.378 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T14:56:21.391 [DEBUG] [Thread-129713] [transport.py] [_log()] starting thread (client mode): 0xb95b0310
2025-12-31T14:56:21.391 [DEBUG] [Thread-129713] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:56:21.406 [DEBUG] [Thread-129713] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T14:56:21.406 [INFO] [Thread-129713] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T14:56:21.418 [DEBUG] [Thread-129713] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:56:21.418 [DEBUG] [Thread-129713] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T14:56:21.419 [DEBUG] [Thread-129713] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:56:21.419 [DEBUG] [Thread-129713] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:56:21.419 [DEBUG] [Thread-129713] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:56:21.419 [DEBUG] [Thread-129713] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:56:21.419 [DEBUG] [Thread-129713] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:56:21.419 [DEBUG] [Thread-129713] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:56:21.419 [DEBUG] [Thread-129713] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:56:21.419 [DEBUG] [Thread-129713] [transport.py] [_log()] client lang: <none>
2025-12-31T14:56:21.419 [DEBUG] [Thread-129713] [transport.py] [_log()] server lang: <none>
2025-12-31T14:56:21.419 [DEBUG] [Thread-129713] [transport.py] [_log()] kex follows: False
2025-12-31T14:56:21.419 [DEBUG] [Thread-129713] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:56:21.419 [DEBUG] [Thread-129713] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:56:21.419 [DEBUG] [Thread-129713] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:56:21.419 [DEBUG] [Thread-129713] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:56:21.419 [DEBUG] [Thread-129713] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:56:21.420 [DEBUG] [Thread-129713] [transport.py] [_log()] Compression: none
2025-12-31T14:56:21.420 [DEBUG] [Thread-129713] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:56:21.471 [DEBUG] [Thread-129713] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:56:21.472 [DEBUG] [Thread-129713] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:56:21.472 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T14:56:21.473 [DEBUG] [Thread-129713] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T14:56:21.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:56:21.527 [DEBUG] [Thread-129713] [transport.py] [_log()] userauth is OK
2025-12-31T14:56:21.528 [DEBUG] [Thread-129713] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:56:21.528 [DEBUG] [Thread-129713] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:56:21.528 [DEBUG] [Thread-129713] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T14:56:21.528 [DEBUG] [Thread-129713] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:56:21.547 [INFO] [Thread-129713] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:56:21.548 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T14:56:21.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:56:22.379 [DEBUG] [Thread-129713] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:56:22.379 [DEBUG] [Thread-129713] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:56:22.427 [DEBUG] [Thread-129713] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:56:22.427 [DEBUG] [Thread-129713] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:56:22.436 [DEBUG] [Thread-129713] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:56:22.445 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:56:22.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T14:56:22.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T14:56:22.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:56:22.464 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:56:22.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:56:22.473 [DEBUG] [Thread-129713] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:56:36.078 [DEBUG] [Thread-129715 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:56:51.130 [DEBUG] [Thread-129716 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:56:52.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T14:56:52.470 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T14:56:52.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T14:56:53.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 14, 56, 39), 33.65, 10.45, 0.0, 19.83, 26.99, 0, 0, 0, 2, 0, 0),)
2025-12-31T14:56:53.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 14:56:39
2025-12-31T14:56:53.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T14:56:53.466 [DEBUG] [Thread-129717] [transport.py] [_log()] starting thread (client mode): 0xb95b2980
2025-12-31T14:56:53.466 [DEBUG] [Thread-129717] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:56:53.486 [DEBUG] [Thread-129717] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T14:56:53.486 [INFO] [Thread-129717] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T14:56:53.489 [DEBUG] [Thread-129717] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:56:53.489 [DEBUG] [Thread-129717] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T14:56:53.489 [DEBUG] [Thread-129717] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:56:53.489 [DEBUG] [Thread-129717] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:56:53.489 [DEBUG] [Thread-129717] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:56:53.489 [DEBUG] [Thread-129717] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:56:53.489 [DEBUG] [Thread-129717] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:56:53.489 [DEBUG] [Thread-129717] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:56:53.489 [DEBUG] [Thread-129717] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:56:53.489 [DEBUG] [Thread-129717] [transport.py] [_log()] client lang: <none>
2025-12-31T14:56:53.489 [DEBUG] [Thread-129717] [transport.py] [_log()] server lang: <none>
2025-12-31T14:56:53.489 [DEBUG] [Thread-129717] [transport.py] [_log()] kex follows: False
2025-12-31T14:56:53.489 [DEBUG] [Thread-129717] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:56:53.489 [DEBUG] [Thread-129717] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:56:53.489 [DEBUG] [Thread-129717] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:56:53.489 [DEBUG] [Thread-129717] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:56:53.489 [DEBUG] [Thread-129717] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:56:53.489 [DEBUG] [Thread-129717] [transport.py] [_log()] Compression: none
2025-12-31T14:56:53.489 [DEBUG] [Thread-129717] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:56:53.505 [DEBUG] [Thread-129717] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:56:53.506 [DEBUG] [Thread-129717] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:56:53.506 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T14:56:53.506 [DEBUG] [Thread-129717] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T14:56:53.508 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:56:53.509 [DEBUG] [Thread-129717] [transport.py] [_log()] userauth is OK
2025-12-31T14:56:53.509 [DEBUG] [Thread-129717] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:56:53.509 [DEBUG] [Thread-129717] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:56:53.509 [DEBUG] [Thread-129717] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T14:56:53.510 [DEBUG] [Thread-129717] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:56:53.544 [INFO] [Thread-129717] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:56:53.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:56:54.199 [DEBUG] [Thread-129717] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:56:54.199 [DEBUG] [Thread-129717] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:56:54.200 [DEBUG] [Thread-129717] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T14:56:54.240 [DEBUG] [Thread-129717] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:56:54.240 [DEBUG] [Thread-129717] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:56:54.242 [DEBUG] [Thread-129717] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:56:54.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:56:54.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T14:56:54.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T14:56:54.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T14:56:54.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:56:54.263 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T14:56:54.263 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:56:54.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:56:54.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T14:56:54.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.539031 -999.00  +26.20  17.04     16   -1.40 1 2 1 1 1   888    0 25.83 -21.48 ----- 22.8 17.0 292.7 19.4 32.2 -21.4 31.9 -20.5 31.8 -21.0 32.4 -20.7
2025-12-31T14:56:54.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T14:56:54.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T14:56:54.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.539031
2025-12-31T14:56:54.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T14:56:54.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T14:56:54.265 [DEBUG] [Thread-129717] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:56:54.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T14:56:54.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T14:56:54.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T14:56:54.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T14:56:39', tmtdew=33.65, humidity=10.45, cloud=0.0, wind=19.83, temperature=26.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T12:56:12.278', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T14:56:54.362 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T14:56:54.375 [DEBUG] [Thread-129720] [transport.py] [_log()] starting thread (client mode): 0xb6bbba90
2025-12-31T14:56:54.375 [DEBUG] [Thread-129720] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:56:54.390 [DEBUG] [Thread-129720] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T14:56:54.391 [INFO] [Thread-129720] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T14:56:54.398 [DEBUG] [Thread-129720] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:56:54.398 [DEBUG] [Thread-129720] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T14:56:54.398 [DEBUG] [Thread-129720] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:56:54.398 [DEBUG] [Thread-129720] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:56:54.398 [DEBUG] [Thread-129720] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:56:54.398 [DEBUG] [Thread-129720] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:56:54.398 [DEBUG] [Thread-129720] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:56:54.398 [DEBUG] [Thread-129720] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:56:54.398 [DEBUG] [Thread-129720] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:56:54.398 [DEBUG] [Thread-129720] [transport.py] [_log()] client lang: <none>
2025-12-31T14:56:54.398 [DEBUG] [Thread-129720] [transport.py] [_log()] server lang: <none>
2025-12-31T14:56:54.398 [DEBUG] [Thread-129720] [transport.py] [_log()] kex follows: False
2025-12-31T14:56:54.398 [DEBUG] [Thread-129720] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:56:54.399 [DEBUG] [Thread-129720] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:56:54.399 [DEBUG] [Thread-129720] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:56:54.399 [DEBUG] [Thread-129720] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:56:54.399 [DEBUG] [Thread-129720] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:56:54.399 [DEBUG] [Thread-129720] [transport.py] [_log()] Compression: none
2025-12-31T14:56:54.399 [DEBUG] [Thread-129720] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:56:54.454 [DEBUG] [Thread-129720] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:56:54.455 [DEBUG] [Thread-129720] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:56:54.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T14:56:54.456 [DEBUG] [Thread-129720] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T14:56:54.457 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:56:54.511 [DEBUG] [Thread-129720] [transport.py] [_log()] userauth is OK
2025-12-31T14:56:54.511 [DEBUG] [Thread-129720] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:56:54.511 [DEBUG] [Thread-129720] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:56:54.511 [DEBUG] [Thread-129720] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T14:56:54.511 [DEBUG] [Thread-129720] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:56:54.535 [INFO] [Thread-129720] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:56:54.535 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T14:56:54.536 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:56:55.336 [DEBUG] [Thread-129720] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:56:55.337 [DEBUG] [Thread-129720] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:56:55.385 [DEBUG] [Thread-129720] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:56:55.385 [DEBUG] [Thread-129720] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:56:55.394 [DEBUG] [Thread-129720] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:56:55.403 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:56:55.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T14:56:55.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T14:56:55.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:56:55.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:56:55.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:56:55.430 [DEBUG] [Thread-129720] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:57:03.207 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:57:03.209 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:57:06.166 [DEBUG] [Thread-129722 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:57:20.020 [DEBUG] [Thread-129723 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:57:21.223 [DEBUG] [Thread-129724 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:57:25.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T14:57:25.425 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T14:57:25.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T14:57:26.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 14, 57, 11), 33.25, 10.76, 0.0, 29.71, 26.99, 0, 0, 0, 2, 0, 0),)
2025-12-31T14:57:26.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 14:57:11
2025-12-31T14:57:26.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T14:57:26.418 [DEBUG] [Thread-129725] [transport.py] [_log()] starting thread (client mode): 0xb6bbd2a0
2025-12-31T14:57:26.418 [DEBUG] [Thread-129725] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:57:26.434 [DEBUG] [Thread-129725] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T14:57:26.434 [INFO] [Thread-129725] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T14:57:26.437 [DEBUG] [Thread-129725] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:57:26.437 [DEBUG] [Thread-129725] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T14:57:26.437 [DEBUG] [Thread-129725] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:57:26.438 [DEBUG] [Thread-129725] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:57:26.438 [DEBUG] [Thread-129725] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:57:26.438 [DEBUG] [Thread-129725] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:57:26.438 [DEBUG] [Thread-129725] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:57:26.438 [DEBUG] [Thread-129725] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:57:26.438 [DEBUG] [Thread-129725] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:57:26.438 [DEBUG] [Thread-129725] [transport.py] [_log()] client lang: <none>
2025-12-31T14:57:26.438 [DEBUG] [Thread-129725] [transport.py] [_log()] server lang: <none>
2025-12-31T14:57:26.438 [DEBUG] [Thread-129725] [transport.py] [_log()] kex follows: False
2025-12-31T14:57:26.438 [DEBUG] [Thread-129725] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:57:26.438 [DEBUG] [Thread-129725] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:57:26.438 [DEBUG] [Thread-129725] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:57:26.438 [DEBUG] [Thread-129725] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:57:26.438 [DEBUG] [Thread-129725] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:57:26.438 [DEBUG] [Thread-129725] [transport.py] [_log()] Compression: none
2025-12-31T14:57:26.438 [DEBUG] [Thread-129725] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:57:26.456 [DEBUG] [Thread-129725] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:57:26.456 [DEBUG] [Thread-129725] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:57:26.457 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T14:57:26.458 [DEBUG] [Thread-129725] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T14:57:26.459 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:57:26.460 [DEBUG] [Thread-129725] [transport.py] [_log()] userauth is OK
2025-12-31T14:57:26.460 [DEBUG] [Thread-129725] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:57:26.461 [DEBUG] [Thread-129725] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:57:26.461 [DEBUG] [Thread-129725] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T14:57:26.461 [DEBUG] [Thread-129725] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:57:26.488 [INFO] [Thread-129725] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:57:26.489 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:57:27.282 [DEBUG] [Thread-129725] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:57:27.282 [DEBUG] [Thread-129725] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:57:27.282 [DEBUG] [Thread-129725] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T14:57:27.323 [DEBUG] [Thread-129725] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:57:27.323 [DEBUG] [Thread-129725] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:57:27.329 [DEBUG] [Thread-129725] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:57:27.343 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:57:27.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T14:57:27.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T14:57:27.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T14:57:27.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:57:27.353 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T14:57:27.354 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:57:27.354 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:57:27.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T14:57:27.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.539378 -999.00  +26.20  15.34     16   -1.20 1 2 1 1 1   888    0 26.62 -12.05 ----- 16.9 15.3 289.0 25.4 32.2 -20.3 32.0 -20.3 31.9 -20.8 32.4 -20.7
2025-12-31T14:57:27.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T14:57:27.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T14:57:27.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.539378
2025-12-31T14:57:27.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T14:57:27.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T14:57:27.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T14:57:27.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T14:57:27.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T14:57:27.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T14:57:11', tmtdew=33.25, humidity=10.76, cloud=0.0, wind=29.71, temperature=26.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T12:56:42.259', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T14:57:27.356 [DEBUG] [Thread-129725] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:57:27.449 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T14:57:27.461 [DEBUG] [Thread-129728] [transport.py] [_log()] starting thread (client mode): 0xb6bb2320
2025-12-31T14:57:27.461 [DEBUG] [Thread-129728] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:57:27.476 [DEBUG] [Thread-129728] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T14:57:27.476 [INFO] [Thread-129728] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T14:57:27.484 [DEBUG] [Thread-129728] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:57:27.485 [DEBUG] [Thread-129728] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T14:57:27.485 [DEBUG] [Thread-129728] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:57:27.485 [DEBUG] [Thread-129728] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:57:27.485 [DEBUG] [Thread-129728] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:57:27.485 [DEBUG] [Thread-129728] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:57:27.485 [DEBUG] [Thread-129728] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:57:27.485 [DEBUG] [Thread-129728] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:57:27.485 [DEBUG] [Thread-129728] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:57:27.485 [DEBUG] [Thread-129728] [transport.py] [_log()] client lang: <none>
2025-12-31T14:57:27.485 [DEBUG] [Thread-129728] [transport.py] [_log()] server lang: <none>
2025-12-31T14:57:27.485 [DEBUG] [Thread-129728] [transport.py] [_log()] kex follows: False
2025-12-31T14:57:27.485 [DEBUG] [Thread-129728] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:57:27.485 [DEBUG] [Thread-129728] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:57:27.485 [DEBUG] [Thread-129728] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:57:27.485 [DEBUG] [Thread-129728] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:57:27.486 [DEBUG] [Thread-129728] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:57:27.486 [DEBUG] [Thread-129728] [transport.py] [_log()] Compression: none
2025-12-31T14:57:27.486 [DEBUG] [Thread-129728] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:57:27.543 [DEBUG] [Thread-129728] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:57:27.544 [DEBUG] [Thread-129728] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:57:27.545 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T14:57:27.545 [DEBUG] [Thread-129728] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T14:57:27.546 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:57:27.603 [DEBUG] [Thread-129728] [transport.py] [_log()] userauth is OK
2025-12-31T14:57:27.603 [DEBUG] [Thread-129728] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:57:27.603 [DEBUG] [Thread-129728] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:57:27.603 [DEBUG] [Thread-129728] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T14:57:27.603 [DEBUG] [Thread-129728] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:57:27.628 [INFO] [Thread-129728] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:57:27.629 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T14:57:27.629 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:57:28.475 [DEBUG] [Thread-129728] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:57:28.476 [DEBUG] [Thread-129728] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:57:28.524 [DEBUG] [Thread-129728] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:57:28.524 [DEBUG] [Thread-129728] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:57:28.533 [DEBUG] [Thread-129728] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:57:28.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:57:28.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T14:57:28.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T14:57:28.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:57:28.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:57:28.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:57:28.570 [DEBUG] [Thread-129728] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:57:36.258 [DEBUG] [Thread-129730 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:57:51.313 [DEBUG] [Thread-129731 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:57:58.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T14:57:58.581 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T14:57:58.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T14:57:59.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 14, 57, 44), 33.46, 10.76, 0.0, 30.95, 26.84, 0, 0, 0, 2, 0, 0),)
2025-12-31T14:57:59.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 14:57:44
2025-12-31T14:57:59.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T14:57:59.569 [DEBUG] [Thread-129732] [transport.py] [_log()] starting thread (client mode): 0xb95b0e80
2025-12-31T14:57:59.570 [DEBUG] [Thread-129732] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:57:59.590 [DEBUG] [Thread-129732] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T14:57:59.590 [INFO] [Thread-129732] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T14:57:59.594 [DEBUG] [Thread-129732] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:57:59.594 [DEBUG] [Thread-129732] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T14:57:59.594 [DEBUG] [Thread-129732] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:57:59.594 [DEBUG] [Thread-129732] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:57:59.594 [DEBUG] [Thread-129732] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:57:59.594 [DEBUG] [Thread-129732] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:57:59.594 [DEBUG] [Thread-129732] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:57:59.594 [DEBUG] [Thread-129732] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:57:59.594 [DEBUG] [Thread-129732] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:57:59.594 [DEBUG] [Thread-129732] [transport.py] [_log()] client lang: <none>
2025-12-31T14:57:59.594 [DEBUG] [Thread-129732] [transport.py] [_log()] server lang: <none>
2025-12-31T14:57:59.594 [DEBUG] [Thread-129732] [transport.py] [_log()] kex follows: False
2025-12-31T14:57:59.594 [DEBUG] [Thread-129732] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:57:59.594 [DEBUG] [Thread-129732] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:57:59.594 [DEBUG] [Thread-129732] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:57:59.595 [DEBUG] [Thread-129732] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:57:59.595 [DEBUG] [Thread-129732] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:57:59.595 [DEBUG] [Thread-129732] [transport.py] [_log()] Compression: none
2025-12-31T14:57:59.595 [DEBUG] [Thread-129732] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:57:59.612 [DEBUG] [Thread-129732] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:57:59.613 [DEBUG] [Thread-129732] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:57:59.613 [DEBUG] [Thread-129732] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T14:57:59.614 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T14:57:59.614 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:57:59.616 [DEBUG] [Thread-129732] [transport.py] [_log()] userauth is OK
2025-12-31T14:57:59.617 [DEBUG] [Thread-129732] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:57:59.617 [DEBUG] [Thread-129732] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:57:59.617 [DEBUG] [Thread-129732] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T14:57:59.617 [DEBUG] [Thread-129732] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:57:59.653 [INFO] [Thread-129732] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:57:59.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:58:00.301 [DEBUG] [Thread-129732] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:58:00.301 [DEBUG] [Thread-129732] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:58:00.301 [DEBUG] [Thread-129732] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T14:58:00.342 [DEBUG] [Thread-129732] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:58:00.342 [DEBUG] [Thread-129732] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:58:00.346 [DEBUG] [Thread-129732] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:58:00.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:58:00.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T14:58:00.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T14:58:00.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T14:58:00.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:58:00.368 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T14:58:00.368 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:58:00.369 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:58:00.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T14:58:00.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.539726 -999.00  +27.10  30.01     15   -1.30 1 2 2 1 1   888    0 26.80 -2.69 ----- 27.6 30.0 285.6 33.2 32.4 -22.9 32.2 -20.7 32.2 -21.2 32.6 -22.2
2025-12-31T14:58:00.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T14:58:00.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T14:58:00.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.539726
2025-12-31T14:58:00.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T14:58:00.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T14:58:00.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T14:58:00.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T14:58:00.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T14:58:00.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T14:57:44', tmtdew=33.46, humidity=10.76, cloud=0.0, wind=30.95, temperature=26.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T12:57:12.326', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T14:58:00.371 [DEBUG] [Thread-129732] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:58:00.453 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T14:58:00.466 [DEBUG] [Thread-129735] [transport.py] [_log()] starting thread (client mode): 0xb95b3cd0
2025-12-31T14:58:00.466 [DEBUG] [Thread-129735] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:58:00.483 [DEBUG] [Thread-129735] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T14:58:00.483 [INFO] [Thread-129735] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T14:58:00.491 [DEBUG] [Thread-129735] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:58:00.491 [DEBUG] [Thread-129735] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T14:58:00.491 [DEBUG] [Thread-129735] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:58:00.491 [DEBUG] [Thread-129735] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:58:00.491 [DEBUG] [Thread-129735] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:58:00.491 [DEBUG] [Thread-129735] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:58:00.491 [DEBUG] [Thread-129735] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:58:00.492 [DEBUG] [Thread-129735] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:58:00.492 [DEBUG] [Thread-129735] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:58:00.492 [DEBUG] [Thread-129735] [transport.py] [_log()] client lang: <none>
2025-12-31T14:58:00.492 [DEBUG] [Thread-129735] [transport.py] [_log()] server lang: <none>
2025-12-31T14:58:00.492 [DEBUG] [Thread-129735] [transport.py] [_log()] kex follows: False
2025-12-31T14:58:00.492 [DEBUG] [Thread-129735] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:58:00.492 [DEBUG] [Thread-129735] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:58:00.492 [DEBUG] [Thread-129735] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:58:00.492 [DEBUG] [Thread-129735] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:58:00.492 [DEBUG] [Thread-129735] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:58:00.492 [DEBUG] [Thread-129735] [transport.py] [_log()] Compression: none
2025-12-31T14:58:00.492 [DEBUG] [Thread-129735] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:58:00.551 [DEBUG] [Thread-129735] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:58:00.552 [DEBUG] [Thread-129735] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:58:00.552 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T14:58:00.553 [DEBUG] [Thread-129735] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T14:58:00.554 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:58:00.607 [DEBUG] [Thread-129735] [transport.py] [_log()] userauth is OK
2025-12-31T14:58:00.608 [DEBUG] [Thread-129735] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:58:00.608 [DEBUG] [Thread-129735] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:58:00.608 [DEBUG] [Thread-129735] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T14:58:00.608 [DEBUG] [Thread-129735] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:58:00.627 [INFO] [Thread-129735] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:58:00.627 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T14:58:00.628 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:58:01.470 [DEBUG] [Thread-129735] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:58:01.470 [DEBUG] [Thread-129735] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:58:01.518 [DEBUG] [Thread-129735] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:58:01.518 [DEBUG] [Thread-129735] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:58:01.527 [DEBUG] [Thread-129735] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:58:01.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:58:01.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T14:58:01.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T14:58:01.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:58:01.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:58:01.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:58:01.565 [DEBUG] [Thread-129735] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:58:03.348 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:58:03.350 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:58:06.344 [DEBUG] [Thread-129737 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:58:20.071 [DEBUG] [Thread-129738 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:58:21.405 [DEBUG] [Thread-129739 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:58:31.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T14:58:31.587 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T14:58:31.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T14:58:32.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 14, 58, 16), 33.74, 10.6, 0.0, 31.57, 27.13, 0, 0, 0, 2, 0, 0),)
2025-12-31T14:58:32.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 14:58:16
2025-12-31T14:58:32.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T14:58:32.623 [DEBUG] [Thread-129740] [transport.py] [_log()] starting thread (client mode): 0xb6bbfbe0
2025-12-31T14:58:32.623 [DEBUG] [Thread-129740] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:58:32.643 [DEBUG] [Thread-129740] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T14:58:32.643 [INFO] [Thread-129740] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T14:58:32.646 [DEBUG] [Thread-129740] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:58:32.646 [DEBUG] [Thread-129740] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T14:58:32.647 [DEBUG] [Thread-129740] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:58:32.647 [DEBUG] [Thread-129740] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:58:32.647 [DEBUG] [Thread-129740] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:58:32.647 [DEBUG] [Thread-129740] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:58:32.647 [DEBUG] [Thread-129740] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:58:32.647 [DEBUG] [Thread-129740] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:58:32.647 [DEBUG] [Thread-129740] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:58:32.647 [DEBUG] [Thread-129740] [transport.py] [_log()] client lang: <none>
2025-12-31T14:58:32.647 [DEBUG] [Thread-129740] [transport.py] [_log()] server lang: <none>
2025-12-31T14:58:32.647 [DEBUG] [Thread-129740] [transport.py] [_log()] kex follows: False
2025-12-31T14:58:32.647 [DEBUG] [Thread-129740] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:58:32.647 [DEBUG] [Thread-129740] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:58:32.647 [DEBUG] [Thread-129740] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:58:32.647 [DEBUG] [Thread-129740] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:58:32.647 [DEBUG] [Thread-129740] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:58:32.647 [DEBUG] [Thread-129740] [transport.py] [_log()] Compression: none
2025-12-31T14:58:32.647 [DEBUG] [Thread-129740] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:58:32.664 [DEBUG] [Thread-129740] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:58:32.665 [DEBUG] [Thread-129740] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:58:32.665 [DEBUG] [Thread-129740] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T14:58:32.665 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T14:58:32.665 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:58:32.708 [DEBUG] [Thread-129740] [transport.py] [_log()] userauth is OK
2025-12-31T14:58:32.708 [DEBUG] [Thread-129740] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:58:32.708 [DEBUG] [Thread-129740] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:58:32.708 [DEBUG] [Thread-129740] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T14:58:32.708 [DEBUG] [Thread-129740] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:58:32.735 [INFO] [Thread-129740] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:58:32.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:58:33.490 [DEBUG] [Thread-129740] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:58:33.490 [DEBUG] [Thread-129740] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:58:33.490 [DEBUG] [Thread-129740] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T14:58:33.531 [DEBUG] [Thread-129740] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:58:33.531 [DEBUG] [Thread-129740] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:58:33.533 [DEBUG] [Thread-129740] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:58:33.540 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:58:33.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T14:58:33.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T14:58:33.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T14:58:33.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:58:33.553 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T14:58:33.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:58:33.554 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:58:33.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T14:58:33.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.540072 -999.00  +26.40  24.67     16   -1.20 1 1 1 1 1   888    0 26.66 6.33 ----- 25.3 24.7 295.4 35.8 32.1 -24.2 32.0 -23.1 31.9 -23.6 32.4 -24.5
2025-12-31T14:58:33.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T14:58:33.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T14:58:33.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.540072
2025-12-31T14:58:33.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T14:58:33.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T14:58:33.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T14:58:33.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T14:58:33.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T14:58:33.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T14:58:16', tmtdew=33.74, humidity=10.6, cloud=0.0, wind=31.57, temperature=27.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T12:57:42.221', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T14:58:33.556 [DEBUG] [Thread-129740] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:58:33.642 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T14:58:33.654 [DEBUG] [Thread-129743] [transport.py] [_log()] starting thread (client mode): 0xb95f29b0
2025-12-31T14:58:33.654 [DEBUG] [Thread-129743] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:58:33.669 [DEBUG] [Thread-129743] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T14:58:33.669 [INFO] [Thread-129743] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T14:58:33.677 [DEBUG] [Thread-129743] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:58:33.677 [DEBUG] [Thread-129743] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T14:58:33.677 [DEBUG] [Thread-129743] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:58:33.677 [DEBUG] [Thread-129743] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:58:33.677 [DEBUG] [Thread-129743] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:58:33.677 [DEBUG] [Thread-129743] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:58:33.677 [DEBUG] [Thread-129743] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:58:33.677 [DEBUG] [Thread-129743] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:58:33.677 [DEBUG] [Thread-129743] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:58:33.677 [DEBUG] [Thread-129743] [transport.py] [_log()] client lang: <none>
2025-12-31T14:58:33.677 [DEBUG] [Thread-129743] [transport.py] [_log()] server lang: <none>
2025-12-31T14:58:33.677 [DEBUG] [Thread-129743] [transport.py] [_log()] kex follows: False
2025-12-31T14:58:33.677 [DEBUG] [Thread-129743] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:58:33.677 [DEBUG] [Thread-129743] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:58:33.678 [DEBUG] [Thread-129743] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:58:33.678 [DEBUG] [Thread-129743] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:58:33.678 [DEBUG] [Thread-129743] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:58:33.678 [DEBUG] [Thread-129743] [transport.py] [_log()] Compression: none
2025-12-31T14:58:33.678 [DEBUG] [Thread-129743] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:58:33.735 [DEBUG] [Thread-129743] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:58:33.736 [DEBUG] [Thread-129743] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:58:33.736 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T14:58:33.737 [DEBUG] [Thread-129743] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T14:58:33.738 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:58:33.791 [DEBUG] [Thread-129743] [transport.py] [_log()] userauth is OK
2025-12-31T14:58:33.791 [DEBUG] [Thread-129743] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:58:33.791 [DEBUG] [Thread-129743] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:58:33.792 [DEBUG] [Thread-129743] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T14:58:33.792 [DEBUG] [Thread-129743] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:58:33.810 [INFO] [Thread-129743] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:58:33.811 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T14:58:33.811 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:58:34.627 [DEBUG] [Thread-129743] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:58:34.627 [DEBUG] [Thread-129743] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:58:34.675 [DEBUG] [Thread-129743] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:58:34.675 [DEBUG] [Thread-129743] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:58:34.685 [DEBUG] [Thread-129743] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:58:34.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:58:34.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T14:58:34.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T14:58:34.712 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:58:34.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:58:34.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:58:34.721 [DEBUG] [Thread-129743] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:58:36.437 [DEBUG] [Thread-129745 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:58:51.490 [DEBUG] [Thread-129746 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:59:03.489 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:59:03.491 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:59:04.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T14:59:04.737 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T14:59:04.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T14:59:05.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 14, 58, 48), 33.07, 11.01, 0.0, 34.92, 26.67, 0, 0, 0, 2, 0, 0),)
2025-12-31T14:59:05.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 14:58:48
2025-12-31T14:59:05.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T14:59:05.729 [DEBUG] [Thread-129747] [transport.py] [_log()] starting thread (client mode): 0xb6ba09a0
2025-12-31T14:59:05.729 [DEBUG] [Thread-129747] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:59:05.749 [DEBUG] [Thread-129747] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T14:59:05.749 [INFO] [Thread-129747] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T14:59:05.752 [DEBUG] [Thread-129747] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:59:05.752 [DEBUG] [Thread-129747] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T14:59:05.752 [DEBUG] [Thread-129747] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:59:05.752 [DEBUG] [Thread-129747] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:59:05.753 [DEBUG] [Thread-129747] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:59:05.753 [DEBUG] [Thread-129747] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:59:05.753 [DEBUG] [Thread-129747] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:59:05.753 [DEBUG] [Thread-129747] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:59:05.753 [DEBUG] [Thread-129747] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:59:05.753 [DEBUG] [Thread-129747] [transport.py] [_log()] client lang: <none>
2025-12-31T14:59:05.753 [DEBUG] [Thread-129747] [transport.py] [_log()] server lang: <none>
2025-12-31T14:59:05.753 [DEBUG] [Thread-129747] [transport.py] [_log()] kex follows: False
2025-12-31T14:59:05.753 [DEBUG] [Thread-129747] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:59:05.753 [DEBUG] [Thread-129747] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:59:05.753 [DEBUG] [Thread-129747] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:59:05.753 [DEBUG] [Thread-129747] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:59:05.753 [DEBUG] [Thread-129747] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:59:05.753 [DEBUG] [Thread-129747] [transport.py] [_log()] Compression: none
2025-12-31T14:59:05.753 [DEBUG] [Thread-129747] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:59:05.770 [DEBUG] [Thread-129747] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:59:05.771 [DEBUG] [Thread-129747] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:59:05.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T14:59:05.772 [DEBUG] [Thread-129747] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T14:59:05.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:59:05.775 [DEBUG] [Thread-129747] [transport.py] [_log()] userauth is OK
2025-12-31T14:59:05.775 [DEBUG] [Thread-129747] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:59:05.775 [DEBUG] [Thread-129747] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:59:05.775 [DEBUG] [Thread-129747] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T14:59:05.775 [DEBUG] [Thread-129747] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:59:05.814 [INFO] [Thread-129747] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:59:05.815 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:59:06.457 [DEBUG] [Thread-129747] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:59:06.457 [DEBUG] [Thread-129747] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:59:06.457 [DEBUG] [Thread-129747] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T14:59:06.498 [DEBUG] [Thread-129747] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:59:06.498 [DEBUG] [Thread-129747] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:59:06.500 [DEBUG] [Thread-129747] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:59:06.514 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:59:06.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T14:59:06.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T14:59:06.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T14:59:06.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:59:06.520 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T14:59:06.520 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:59:06.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:59:06.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T14:59:06.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.540420 -999.00  +26.50  27.45     16   -0.90 1 1 1 1 1   888    0 26.84 11.53 ----- 31.1 27.4 289.0 37.3 32.2 -22.5 32.0 -21.7 31.5 -24.4 32.4 -21.1
2025-12-31T14:59:06.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T14:59:06.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T14:59:06.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.540420
2025-12-31T14:59:06.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T14:59:06.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T14:59:06.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T14:59:06.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T14:59:06.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T14:59:06.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T14:58:48', tmtdew=33.07, humidity=11.01, cloud=0.0, wind=34.92, temperature=26.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T12:58:12.288', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T14:59:06.521 [DEBUG] [Thread-129747] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:59:06.525 [DEBUG] [Thread-129750 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:59:06.594 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T14:59:06.609 [DEBUG] [Thread-129751] [transport.py] [_log()] starting thread (client mode): 0xb95f2d10
2025-12-31T14:59:06.609 [DEBUG] [Thread-129751] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:59:06.625 [DEBUG] [Thread-129751] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T14:59:06.625 [INFO] [Thread-129751] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T14:59:06.632 [DEBUG] [Thread-129751] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:59:06.632 [DEBUG] [Thread-129751] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T14:59:06.632 [DEBUG] [Thread-129751] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:59:06.632 [DEBUG] [Thread-129751] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:59:06.632 [DEBUG] [Thread-129751] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:59:06.632 [DEBUG] [Thread-129751] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:59:06.632 [DEBUG] [Thread-129751] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:59:06.632 [DEBUG] [Thread-129751] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:59:06.632 [DEBUG] [Thread-129751] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:59:06.632 [DEBUG] [Thread-129751] [transport.py] [_log()] client lang: <none>
2025-12-31T14:59:06.632 [DEBUG] [Thread-129751] [transport.py] [_log()] server lang: <none>
2025-12-31T14:59:06.632 [DEBUG] [Thread-129751] [transport.py] [_log()] kex follows: False
2025-12-31T14:59:06.632 [DEBUG] [Thread-129751] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:59:06.633 [DEBUG] [Thread-129751] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:59:06.633 [DEBUG] [Thread-129751] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:59:06.633 [DEBUG] [Thread-129751] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:59:06.633 [DEBUG] [Thread-129751] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:59:06.633 [DEBUG] [Thread-129751] [transport.py] [_log()] Compression: none
2025-12-31T14:59:06.633 [DEBUG] [Thread-129751] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:59:06.689 [DEBUG] [Thread-129751] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:59:06.689 [DEBUG] [Thread-129751] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:59:06.690 [DEBUG] [Thread-129751] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T14:59:06.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T14:59:06.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:59:06.747 [DEBUG] [Thread-129751] [transport.py] [_log()] userauth is OK
2025-12-31T14:59:06.747 [DEBUG] [Thread-129751] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:59:06.747 [DEBUG] [Thread-129751] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:59:06.747 [DEBUG] [Thread-129751] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T14:59:06.747 [DEBUG] [Thread-129751] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:59:06.761 [INFO] [Thread-129751] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:59:06.761 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T14:59:06.761 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:59:07.619 [DEBUG] [Thread-129751] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:59:07.619 [DEBUG] [Thread-129751] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:59:07.667 [DEBUG] [Thread-129751] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:59:07.667 [DEBUG] [Thread-129751] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:59:07.677 [DEBUG] [Thread-129751] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:59:07.688 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:59:07.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T14:59:07.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T14:59:07.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:59:07.705 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:59:07.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:59:07.712 [DEBUG] [Thread-129751] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:59:20.125 [DEBUG] [Thread-129753 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:59:21.562 [DEBUG] [Thread-129754 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:59:36.595 [DEBUG] [Thread-129755 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T14:59:37.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T14:59:37.725 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T14:59:37.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T14:59:38.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 14, 59, 20), 32.98, 11.05, 0.0, 31.9, 26.5, 0, 0, 0, 2, 0, 0),)
2025-12-31T14:59:38.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 14:59:20
2025-12-31T14:59:38.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T14:59:38.708 [DEBUG] [Thread-129756] [transport.py] [_log()] starting thread (client mode): 0xb6bb3ca0
2025-12-31T14:59:38.708 [DEBUG] [Thread-129756] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:59:38.729 [DEBUG] [Thread-129756] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T14:59:38.729 [INFO] [Thread-129756] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T14:59:38.732 [DEBUG] [Thread-129756] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:59:38.732 [DEBUG] [Thread-129756] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T14:59:38.732 [DEBUG] [Thread-129756] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:59:38.732 [DEBUG] [Thread-129756] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:59:38.732 [DEBUG] [Thread-129756] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:59:38.732 [DEBUG] [Thread-129756] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:59:38.732 [DEBUG] [Thread-129756] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:59:38.733 [DEBUG] [Thread-129756] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:59:38.733 [DEBUG] [Thread-129756] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:59:38.733 [DEBUG] [Thread-129756] [transport.py] [_log()] client lang: <none>
2025-12-31T14:59:38.733 [DEBUG] [Thread-129756] [transport.py] [_log()] server lang: <none>
2025-12-31T14:59:38.733 [DEBUG] [Thread-129756] [transport.py] [_log()] kex follows: False
2025-12-31T14:59:38.733 [DEBUG] [Thread-129756] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:59:38.733 [DEBUG] [Thread-129756] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:59:38.733 [DEBUG] [Thread-129756] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:59:38.733 [DEBUG] [Thread-129756] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:59:38.733 [DEBUG] [Thread-129756] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:59:38.733 [DEBUG] [Thread-129756] [transport.py] [_log()] Compression: none
2025-12-31T14:59:38.733 [DEBUG] [Thread-129756] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:59:38.752 [DEBUG] [Thread-129756] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:59:38.753 [DEBUG] [Thread-129756] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:59:38.754 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T14:59:38.754 [DEBUG] [Thread-129756] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T14:59:38.755 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:59:38.757 [DEBUG] [Thread-129756] [transport.py] [_log()] userauth is OK
2025-12-31T14:59:38.757 [DEBUG] [Thread-129756] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:59:38.757 [DEBUG] [Thread-129756] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:59:38.757 [DEBUG] [Thread-129756] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T14:59:38.757 [DEBUG] [Thread-129756] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:59:38.785 [INFO] [Thread-129756] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:59:38.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:59:39.548 [DEBUG] [Thread-129756] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:59:39.548 [DEBUG] [Thread-129756] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:59:39.549 [DEBUG] [Thread-129756] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T14:59:39.589 [DEBUG] [Thread-129756] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:59:39.589 [DEBUG] [Thread-129756] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:59:39.592 [DEBUG] [Thread-129756] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:59:39.603 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:59:39.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T14:59:39.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T14:59:39.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T14:59:39.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:59:39.612 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T14:59:39.612 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:59:39.612 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:59:39.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T14:59:39.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.540767 -999.00  +26.20  33.13     16   -1.20 1 2 2 1 1   888    0 26.78 15.33 ----- 30.7 33.1 302.0 41.5 32.2 -22.7 32.0 -20.6 31.9 -20.6 32.5 -21.7
2025-12-31T14:59:39.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T14:59:39.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T14:59:39.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.540767
2025-12-31T14:59:39.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T14:59:39.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T14:59:39.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T14:59:39.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T14:59:39.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T14:59:39.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T14:59:20', tmtdew=32.98, humidity=11.05, cloud=0.0, wind=31.9, temperature=26.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T12:58:42.269', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T14:59:39.615 [DEBUG] [Thread-129756] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:59:39.698 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T14:59:39.710 [DEBUG] [Thread-129759] [transport.py] [_log()] starting thread (client mode): 0xb6ba1a50
2025-12-31T14:59:39.710 [DEBUG] [Thread-129759] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T14:59:39.725 [DEBUG] [Thread-129759] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T14:59:39.725 [INFO] [Thread-129759] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T14:59:39.732 [DEBUG] [Thread-129759] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T14:59:39.732 [DEBUG] [Thread-129759] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T14:59:39.732 [DEBUG] [Thread-129759] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T14:59:39.732 [DEBUG] [Thread-129759] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:59:39.732 [DEBUG] [Thread-129759] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T14:59:39.733 [DEBUG] [Thread-129759] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:59:39.733 [DEBUG] [Thread-129759] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T14:59:39.733 [DEBUG] [Thread-129759] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T14:59:39.733 [DEBUG] [Thread-129759] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T14:59:39.733 [DEBUG] [Thread-129759] [transport.py] [_log()] client lang: <none>
2025-12-31T14:59:39.733 [DEBUG] [Thread-129759] [transport.py] [_log()] server lang: <none>
2025-12-31T14:59:39.733 [DEBUG] [Thread-129759] [transport.py] [_log()] kex follows: False
2025-12-31T14:59:39.733 [DEBUG] [Thread-129759] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T14:59:39.733 [DEBUG] [Thread-129759] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T14:59:39.733 [DEBUG] [Thread-129759] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T14:59:39.733 [DEBUG] [Thread-129759] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T14:59:39.733 [DEBUG] [Thread-129759] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T14:59:39.733 [DEBUG] [Thread-129759] [transport.py] [_log()] Compression: none
2025-12-31T14:59:39.733 [DEBUG] [Thread-129759] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T14:59:39.792 [DEBUG] [Thread-129759] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T14:59:39.792 [DEBUG] [Thread-129759] [transport.py] [_log()] Switch to new keys ...
2025-12-31T14:59:39.793 [DEBUG] [Thread-129759] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T14:59:39.793 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T14:59:39.794 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T14:59:39.847 [DEBUG] [Thread-129759] [transport.py] [_log()] userauth is OK
2025-12-31T14:59:39.848 [DEBUG] [Thread-129759] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T14:59:39.848 [DEBUG] [Thread-129759] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T14:59:39.848 [DEBUG] [Thread-129759] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T14:59:39.848 [DEBUG] [Thread-129759] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T14:59:39.866 [INFO] [Thread-129759] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T14:59:39.867 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T14:59:39.867 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T14:59:40.694 [DEBUG] [Thread-129759] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T14:59:40.695 [DEBUG] [Thread-129759] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T14:59:40.742 [DEBUG] [Thread-129759] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T14:59:40.742 [DEBUG] [Thread-129759] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T14:59:40.752 [DEBUG] [Thread-129759] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T14:59:40.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T14:59:40.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T14:59:40.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T14:59:40.779 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T14:59:40.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T14:59:40.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T14:59:40.788 [DEBUG] [Thread-129759] [transport.py] [_log()] EOF in transport thread
2025-12-31T14:59:51.633 [DEBUG] [Thread-129761 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:00:03.628 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:00:03.629 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:00:06.684 [DEBUG] [Thread-129762 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:00:10.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T15:00:10.787 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T15:00:10.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T15:00:11.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 14, 59, 52), 33.3, 10.55, 0.0, 31.88, 26.83, 0, 0, 0, 2, 0, 0),)
2025-12-31T15:00:11.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 14:59:52
2025-12-31T15:00:11.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T15:00:11.783 [DEBUG] [Thread-129763] [transport.py] [_log()] starting thread (client mode): 0xb6b291e0
2025-12-31T15:00:11.783 [DEBUG] [Thread-129763] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:00:11.801 [DEBUG] [Thread-129763] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T15:00:11.801 [INFO] [Thread-129763] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T15:00:11.803 [DEBUG] [Thread-129763] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:00:11.803 [DEBUG] [Thread-129763] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T15:00:11.803 [DEBUG] [Thread-129763] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:00:11.803 [DEBUG] [Thread-129763] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:00:11.803 [DEBUG] [Thread-129763] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:00:11.803 [DEBUG] [Thread-129763] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:00:11.803 [DEBUG] [Thread-129763] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:00:11.803 [DEBUG] [Thread-129763] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:00:11.803 [DEBUG] [Thread-129763] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:00:11.804 [DEBUG] [Thread-129763] [transport.py] [_log()] client lang: <none>
2025-12-31T15:00:11.804 [DEBUG] [Thread-129763] [transport.py] [_log()] server lang: <none>
2025-12-31T15:00:11.804 [DEBUG] [Thread-129763] [transport.py] [_log()] kex follows: False
2025-12-31T15:00:11.804 [DEBUG] [Thread-129763] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:00:11.804 [DEBUG] [Thread-129763] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:00:11.804 [DEBUG] [Thread-129763] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:00:11.804 [DEBUG] [Thread-129763] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:00:11.804 [DEBUG] [Thread-129763] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:00:11.804 [DEBUG] [Thread-129763] [transport.py] [_log()] Compression: none
2025-12-31T15:00:11.804 [DEBUG] [Thread-129763] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:00:11.824 [DEBUG] [Thread-129763] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:00:11.825 [DEBUG] [Thread-129763] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:00:11.826 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T15:00:11.826 [DEBUG] [Thread-129763] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T15:00:11.827 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:00:11.828 [DEBUG] [Thread-129763] [transport.py] [_log()] userauth is OK
2025-12-31T15:00:11.829 [DEBUG] [Thread-129763] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:00:11.829 [DEBUG] [Thread-129763] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:00:11.829 [DEBUG] [Thread-129763] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T15:00:11.829 [DEBUG] [Thread-129763] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:00:11.864 [INFO] [Thread-129763] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:00:11.866 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:00:14.266 [DEBUG] [Thread-129763] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:00:14.266 [DEBUG] [Thread-129763] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:00:14.266 [DEBUG] [Thread-129763] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T15:00:14.308 [DEBUG] [Thread-129763] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:00:14.308 [DEBUG] [Thread-129763] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:00:14.311 [DEBUG] [Thread-129763] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:00:14.441 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:00:14.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T15:00:14.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T15:00:14.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T15:00:14.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:00:14.452 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T15:00:14.452 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:00:14.452 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:00:14.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T15:00:14.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.541114 -999.00  +26.20  40.10     16   -1.00 1 2 2 1 1   888    0 26.97 18.07 ----- 43.7 40.1 291.6 45.0 32.1 -23.3 32.0 -21.3 32.0 -20.6 32.4 -22.7
2025-12-31T15:00:14.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T15:00:14.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T15:00:14.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.541114
2025-12-31T15:00:14.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T15:00:14.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T15:00:14.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T15:00:14.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T15:00:14.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T15:00:14.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T14:59:52', tmtdew=33.3, humidity=10.55, cloud=0.0, wind=31.88, temperature=26.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T12:59:12.250', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T15:00:14.454 [DEBUG] [Thread-129763] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:00:14.536 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T15:00:14.549 [DEBUG] [Thread-129766] [transport.py] [_log()] starting thread (client mode): 0xb95f29b0
2025-12-31T15:00:14.549 [DEBUG] [Thread-129766] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:00:14.564 [DEBUG] [Thread-129766] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T15:00:14.564 [INFO] [Thread-129766] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T15:00:14.572 [DEBUG] [Thread-129766] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:00:14.572 [DEBUG] [Thread-129766] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T15:00:14.572 [DEBUG] [Thread-129766] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:00:14.572 [DEBUG] [Thread-129766] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:00:14.572 [DEBUG] [Thread-129766] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:00:14.572 [DEBUG] [Thread-129766] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:00:14.572 [DEBUG] [Thread-129766] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:00:14.572 [DEBUG] [Thread-129766] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:00:14.572 [DEBUG] [Thread-129766] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:00:14.572 [DEBUG] [Thread-129766] [transport.py] [_log()] client lang: <none>
2025-12-31T15:00:14.573 [DEBUG] [Thread-129766] [transport.py] [_log()] server lang: <none>
2025-12-31T15:00:14.573 [DEBUG] [Thread-129766] [transport.py] [_log()] kex follows: False
2025-12-31T15:00:14.573 [DEBUG] [Thread-129766] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:00:14.573 [DEBUG] [Thread-129766] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:00:14.573 [DEBUG] [Thread-129766] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:00:14.573 [DEBUG] [Thread-129766] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:00:14.573 [DEBUG] [Thread-129766] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:00:14.573 [DEBUG] [Thread-129766] [transport.py] [_log()] Compression: none
2025-12-31T15:00:14.573 [DEBUG] [Thread-129766] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:00:14.631 [DEBUG] [Thread-129766] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:00:14.632 [DEBUG] [Thread-129766] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:00:14.633 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T15:00:14.633 [DEBUG] [Thread-129766] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T15:00:14.634 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:00:14.688 [DEBUG] [Thread-129766] [transport.py] [_log()] userauth is OK
2025-12-31T15:00:14.688 [DEBUG] [Thread-129766] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:00:14.688 [DEBUG] [Thread-129766] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:00:14.688 [DEBUG] [Thread-129766] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T15:00:14.688 [DEBUG] [Thread-129766] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:00:14.706 [INFO] [Thread-129766] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:00:14.707 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T15:00:14.707 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:00:15.584 [DEBUG] [Thread-129766] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:00:15.584 [DEBUG] [Thread-129766] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:00:15.631 [DEBUG] [Thread-129766] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:00:15.632 [DEBUG] [Thread-129766] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:00:15.640 [DEBUG] [Thread-129766] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:00:15.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:00:15.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T15:00:15.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T15:00:15.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:00:15.666 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:00:15.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:00:15.674 [DEBUG] [Thread-129766] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:00:20.176 [DEBUG] [Thread-129768 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:00:21.725 [DEBUG] [Thread-129769 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:00:36.774 [DEBUG] [Thread-129770 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:00:45.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T15:00:45.697 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T15:00:45.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T15:00:46.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 15, 0, 24), 33.59, 10.36, 0.0, 30.72, 27.03, 0, 0, 0, 2, 0, 0),)
2025-12-31T15:00:46.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 15:00:24
2025-12-31T15:00:46.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T15:00:46.696 [DEBUG] [Thread-129771] [transport.py] [_log()] starting thread (client mode): 0xb9558550
2025-12-31T15:00:46.696 [DEBUG] [Thread-129771] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:00:46.718 [DEBUG] [Thread-129771] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T15:00:46.718 [INFO] [Thread-129771] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T15:00:46.722 [DEBUG] [Thread-129771] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:00:46.722 [DEBUG] [Thread-129771] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T15:00:46.722 [DEBUG] [Thread-129771] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:00:46.722 [DEBUG] [Thread-129771] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:00:46.722 [DEBUG] [Thread-129771] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:00:46.722 [DEBUG] [Thread-129771] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:00:46.722 [DEBUG] [Thread-129771] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:00:46.722 [DEBUG] [Thread-129771] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:00:46.722 [DEBUG] [Thread-129771] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:00:46.722 [DEBUG] [Thread-129771] [transport.py] [_log()] client lang: <none>
2025-12-31T15:00:46.722 [DEBUG] [Thread-129771] [transport.py] [_log()] server lang: <none>
2025-12-31T15:00:46.722 [DEBUG] [Thread-129771] [transport.py] [_log()] kex follows: False
2025-12-31T15:00:46.722 [DEBUG] [Thread-129771] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:00:46.722 [DEBUG] [Thread-129771] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:00:46.722 [DEBUG] [Thread-129771] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:00:46.722 [DEBUG] [Thread-129771] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:00:46.722 [DEBUG] [Thread-129771] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:00:46.723 [DEBUG] [Thread-129771] [transport.py] [_log()] Compression: none
2025-12-31T15:00:46.723 [DEBUG] [Thread-129771] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:00:46.739 [DEBUG] [Thread-129771] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:00:46.740 [DEBUG] [Thread-129771] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:00:46.740 [DEBUG] [Thread-129771] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T15:00:46.741 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T15:00:46.741 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:00:46.742 [DEBUG] [Thread-129771] [transport.py] [_log()] userauth is OK
2025-12-31T15:00:46.742 [DEBUG] [Thread-129771] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:00:46.742 [DEBUG] [Thread-129771] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:00:46.742 [DEBUG] [Thread-129771] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T15:00:46.743 [DEBUG] [Thread-129771] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:00:46.775 [INFO] [Thread-129771] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:00:46.775 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:00:47.391 [DEBUG] [Thread-129771] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:00:47.392 [DEBUG] [Thread-129771] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:00:47.392 [DEBUG] [Thread-129771] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T15:00:47.433 [DEBUG] [Thread-129771] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:00:47.434 [DEBUG] [Thread-129771] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:00:47.437 [DEBUG] [Thread-129771] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:00:47.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:00:47.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T15:00:47.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T15:00:47.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T15:00:47.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:00:47.455 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T15:00:47.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:00:47.455 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:00:47.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T15:00:47.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.541808 -999.00  +25.90  40.07     17   -1.00 1 2 2 1 1   888    0 27.34 17.72 ----- 38.3 40.1 297.2 46.7 32.1 -21.4 31.9 -22.1 31.9 -22.7 32.4 -21.8
2025-12-31T15:00:47.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T15:00:47.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T15:00:47.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.541808
2025-12-31T15:00:47.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T15:00:47.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T15:00:47.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T15:00:47.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T15:00:47.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T15:00:47.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T15:00:24', tmtdew=33.59, humidity=10.36, cloud=0.0, wind=30.72, temperature=27.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T13:00:12.211', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T15:00:47.458 [DEBUG] [Thread-129771] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:00:47.550 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T15:00:47.559 [DEBUG] [Thread-129774] [transport.py] [_log()] starting thread (client mode): 0xb9559cc0
2025-12-31T15:00:47.559 [DEBUG] [Thread-129774] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:00:47.574 [DEBUG] [Thread-129774] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T15:00:47.574 [INFO] [Thread-129774] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T15:00:47.581 [DEBUG] [Thread-129774] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:00:47.582 [DEBUG] [Thread-129774] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T15:00:47.582 [DEBUG] [Thread-129774] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:00:47.582 [DEBUG] [Thread-129774] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:00:47.582 [DEBUG] [Thread-129774] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:00:47.582 [DEBUG] [Thread-129774] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:00:47.582 [DEBUG] [Thread-129774] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:00:47.582 [DEBUG] [Thread-129774] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:00:47.582 [DEBUG] [Thread-129774] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:00:47.582 [DEBUG] [Thread-129774] [transport.py] [_log()] client lang: <none>
2025-12-31T15:00:47.582 [DEBUG] [Thread-129774] [transport.py] [_log()] server lang: <none>
2025-12-31T15:00:47.583 [DEBUG] [Thread-129774] [transport.py] [_log()] kex follows: False
2025-12-31T15:00:47.583 [DEBUG] [Thread-129774] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:00:47.583 [DEBUG] [Thread-129774] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:00:47.583 [DEBUG] [Thread-129774] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:00:47.583 [DEBUG] [Thread-129774] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:00:47.583 [DEBUG] [Thread-129774] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:00:47.583 [DEBUG] [Thread-129774] [transport.py] [_log()] Compression: none
2025-12-31T15:00:47.583 [DEBUG] [Thread-129774] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:00:47.643 [DEBUG] [Thread-129774] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:00:47.643 [DEBUG] [Thread-129774] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:00:47.643 [DEBUG] [Thread-129774] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T15:00:47.644 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T15:00:47.644 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:00:47.703 [DEBUG] [Thread-129774] [transport.py] [_log()] userauth is OK
2025-12-31T15:00:47.704 [DEBUG] [Thread-129774] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:00:47.704 [DEBUG] [Thread-129774] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:00:47.704 [DEBUG] [Thread-129774] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T15:00:47.704 [DEBUG] [Thread-129774] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:00:47.723 [INFO] [Thread-129774] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:00:47.724 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T15:00:47.724 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:00:48.553 [DEBUG] [Thread-129774] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:00:48.553 [DEBUG] [Thread-129774] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:00:48.604 [DEBUG] [Thread-129774] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:00:48.604 [DEBUG] [Thread-129774] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:00:48.616 [DEBUG] [Thread-129774] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:00:48.627 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:00:48.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-12-31T15:00:48.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T15:00:48.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:00:48.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:00:48.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:00:48.660 [DEBUG] [Thread-129774] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:00:51.813 [DEBUG] [Thread-129776 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:01:03.769 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:01:03.770 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:01:06.868 [DEBUG] [Thread-129777 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:01:18.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T15:01:18.654 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T15:01:18.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T15:01:19.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 15, 0, 56), 33.11, 10.82, 0.0, 30.31, 26.88, 0, 0, 0, 2, 0, 0),)
2025-12-31T15:01:19.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 15:00:56
2025-12-31T15:01:19.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T15:01:19.640 [DEBUG] [Thread-129778] [transport.py] [_log()] starting thread (client mode): 0xb95591b0
2025-12-31T15:01:19.640 [DEBUG] [Thread-129778] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:01:19.660 [DEBUG] [Thread-129778] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T15:01:19.660 [INFO] [Thread-129778] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T15:01:19.664 [DEBUG] [Thread-129778] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:01:19.664 [DEBUG] [Thread-129778] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T15:01:19.664 [DEBUG] [Thread-129778] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:01:19.664 [DEBUG] [Thread-129778] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:01:19.664 [DEBUG] [Thread-129778] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:01:19.664 [DEBUG] [Thread-129778] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:01:19.664 [DEBUG] [Thread-129778] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:01:19.665 [DEBUG] [Thread-129778] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:01:19.665 [DEBUG] [Thread-129778] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:01:19.665 [DEBUG] [Thread-129778] [transport.py] [_log()] client lang: <none>
2025-12-31T15:01:19.665 [DEBUG] [Thread-129778] [transport.py] [_log()] server lang: <none>
2025-12-31T15:01:19.665 [DEBUG] [Thread-129778] [transport.py] [_log()] kex follows: False
2025-12-31T15:01:19.665 [DEBUG] [Thread-129778] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:01:19.665 [DEBUG] [Thread-129778] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:01:19.665 [DEBUG] [Thread-129778] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:01:19.665 [DEBUG] [Thread-129778] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:01:19.665 [DEBUG] [Thread-129778] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:01:19.665 [DEBUG] [Thread-129778] [transport.py] [_log()] Compression: none
2025-12-31T15:01:19.665 [DEBUG] [Thread-129778] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:01:19.684 [DEBUG] [Thread-129778] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:01:19.685 [DEBUG] [Thread-129778] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:01:19.686 [DEBUG] [Thread-129778] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T15:01:19.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T15:01:19.687 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:01:19.688 [DEBUG] [Thread-129778] [transport.py] [_log()] userauth is OK
2025-12-31T15:01:19.688 [DEBUG] [Thread-129778] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:01:19.688 [DEBUG] [Thread-129778] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:01:19.688 [DEBUG] [Thread-129778] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T15:01:19.688 [DEBUG] [Thread-129778] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:01:19.712 [INFO] [Thread-129778] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:01:19.712 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:01:20.234 [DEBUG] [Thread-129780 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:01:20.473 [DEBUG] [Thread-129778] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:01:20.474 [DEBUG] [Thread-129778] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:01:20.474 [DEBUG] [Thread-129778] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T15:01:20.515 [DEBUG] [Thread-129778] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:01:20.515 [DEBUG] [Thread-129778] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:01:20.519 [DEBUG] [Thread-129778] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:01:20.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:01:20.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T15:01:20.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T15:01:20.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T15:01:20.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:01:20.540 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T15:01:20.540 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:01:20.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:01:20.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T15:01:20.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.542156 -999.00  +25.20  24.49     17   -0.80 1 2 1 1 1   888    0 27.20 16.36 ----- 19.9 24.5 306.0 41.4 32.1 -22.0 31.8 -21.3 31.7 -22.1 32.4 -21.9
2025-12-31T15:01:20.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T15:01:20.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T15:01:20.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.542156
2025-12-31T15:01:20.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T15:01:20.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T15:01:20.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T15:01:20.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T15:01:20.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T15:01:20.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T15:00:56', tmtdew=33.11, humidity=10.82, cloud=0.0, wind=30.31, temperature=26.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T13:00:42.278', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T15:01:20.542 [DEBUG] [Thread-129778] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:01:20.626 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T15:01:20.637 [DEBUG] [Thread-129782] [transport.py] [_log()] starting thread (client mode): 0xb6bbec20
2025-12-31T15:01:20.637 [DEBUG] [Thread-129782] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:01:20.652 [DEBUG] [Thread-129782] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T15:01:20.652 [INFO] [Thread-129782] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T15:01:20.659 [DEBUG] [Thread-129782] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:01:20.659 [DEBUG] [Thread-129782] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T15:01:20.660 [DEBUG] [Thread-129782] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:01:20.660 [DEBUG] [Thread-129782] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:01:20.660 [DEBUG] [Thread-129782] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:01:20.660 [DEBUG] [Thread-129782] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:01:20.660 [DEBUG] [Thread-129782] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:01:20.660 [DEBUG] [Thread-129782] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:01:20.660 [DEBUG] [Thread-129782] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:01:20.660 [DEBUG] [Thread-129782] [transport.py] [_log()] client lang: <none>
2025-12-31T15:01:20.660 [DEBUG] [Thread-129782] [transport.py] [_log()] server lang: <none>
2025-12-31T15:01:20.661 [DEBUG] [Thread-129782] [transport.py] [_log()] kex follows: False
2025-12-31T15:01:20.661 [DEBUG] [Thread-129782] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:01:20.661 [DEBUG] [Thread-129782] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:01:20.661 [DEBUG] [Thread-129782] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:01:20.661 [DEBUG] [Thread-129782] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:01:20.661 [DEBUG] [Thread-129782] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:01:20.661 [DEBUG] [Thread-129782] [transport.py] [_log()] Compression: none
2025-12-31T15:01:20.661 [DEBUG] [Thread-129782] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:01:20.723 [DEBUG] [Thread-129782] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:01:20.724 [DEBUG] [Thread-129782] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:01:20.725 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T15:01:20.725 [DEBUG] [Thread-129782] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T15:01:20.726 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:01:20.780 [DEBUG] [Thread-129782] [transport.py] [_log()] userauth is OK
2025-12-31T15:01:20.780 [DEBUG] [Thread-129782] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:01:20.781 [DEBUG] [Thread-129782] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:01:20.781 [DEBUG] [Thread-129782] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T15:01:20.781 [DEBUG] [Thread-129782] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:01:20.799 [INFO] [Thread-129782] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:01:20.800 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T15:01:20.800 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:01:21.636 [DEBUG] [Thread-129782] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:01:21.637 [DEBUG] [Thread-129782] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:01:21.685 [DEBUG] [Thread-129782] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:01:21.685 [DEBUG] [Thread-129782] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:01:21.695 [DEBUG] [Thread-129782] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:01:21.707 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:01:21.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T15:01:21.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T15:01:21.726 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:01:21.726 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:01:21.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:01:21.734 [DEBUG] [Thread-129782] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:01:21.901 [DEBUG] [Thread-129784 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:01:36.950 [DEBUG] [Thread-129785 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:01:51.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T15:01:51.732 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T15:01:51.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T15:01:51.983 [DEBUG] [Thread-129786 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:01:52.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 15, 1, 28), 33.77, 10.42, 0.0, 32.41, 27.3, 0, 0, 0, 2, 0, 0),)
2025-12-31T15:01:52.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 15:01:28
2025-12-31T15:01:52.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T15:01:52.718 [DEBUG] [Thread-129787] [transport.py] [_log()] starting thread (client mode): 0xb6b2a440
2025-12-31T15:01:52.718 [DEBUG] [Thread-129787] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:01:52.738 [DEBUG] [Thread-129787] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T15:01:52.739 [INFO] [Thread-129787] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T15:01:52.741 [DEBUG] [Thread-129787] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:01:52.741 [DEBUG] [Thread-129787] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T15:01:52.742 [DEBUG] [Thread-129787] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:01:52.742 [DEBUG] [Thread-129787] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:01:52.742 [DEBUG] [Thread-129787] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:01:52.742 [DEBUG] [Thread-129787] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:01:52.742 [DEBUG] [Thread-129787] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:01:52.742 [DEBUG] [Thread-129787] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:01:52.742 [DEBUG] [Thread-129787] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:01:52.742 [DEBUG] [Thread-129787] [transport.py] [_log()] client lang: <none>
2025-12-31T15:01:52.742 [DEBUG] [Thread-129787] [transport.py] [_log()] server lang: <none>
2025-12-31T15:01:52.742 [DEBUG] [Thread-129787] [transport.py] [_log()] kex follows: False
2025-12-31T15:01:52.742 [DEBUG] [Thread-129787] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:01:52.742 [DEBUG] [Thread-129787] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:01:52.742 [DEBUG] [Thread-129787] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:01:52.742 [DEBUG] [Thread-129787] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:01:52.743 [DEBUG] [Thread-129787] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:01:52.743 [DEBUG] [Thread-129787] [transport.py] [_log()] Compression: none
2025-12-31T15:01:52.743 [DEBUG] [Thread-129787] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:01:52.760 [DEBUG] [Thread-129787] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:01:52.761 [DEBUG] [Thread-129787] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:01:52.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T15:01:52.762 [DEBUG] [Thread-129787] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T15:01:52.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:01:52.764 [DEBUG] [Thread-129787] [transport.py] [_log()] userauth is OK
2025-12-31T15:01:52.764 [DEBUG] [Thread-129787] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:01:52.764 [DEBUG] [Thread-129787] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:01:52.764 [DEBUG] [Thread-129787] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T15:01:52.764 [DEBUG] [Thread-129787] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:01:52.789 [INFO] [Thread-129787] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:01:52.789 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:01:53.415 [DEBUG] [Thread-129787] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:01:53.415 [DEBUG] [Thread-129787] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:01:53.415 [DEBUG] [Thread-129787] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T15:01:53.456 [DEBUG] [Thread-129787] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:01:53.456 [DEBUG] [Thread-129787] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:01:53.460 [DEBUG] [Thread-129787] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:01:53.471 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:01:53.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T15:01:53.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T15:01:53.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T15:01:53.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:01:53.484 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T15:01:53.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:01:53.485 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:01:53.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T15:01:53.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.542502 -999.00  +25.30  24.24     17   -1.30 1 2 1 1 1   888    0 26.92 15.06 ----- 28.2 24.2 297.6 29.7 32.1 -21.7 31.8 -21.6 31.8 -21.9 32.5 -21.5
2025-12-31T15:01:53.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T15:01:53.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T15:01:53.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.542502
2025-12-31T15:01:53.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T15:01:53.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T15:01:53.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T15:01:53.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T15:01:53.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T15:01:53.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T15:01:28', tmtdew=33.77, humidity=10.42, cloud=0.0, wind=32.41, temperature=27.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T13:01:12.173', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T15:01:53.487 [DEBUG] [Thread-129787] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:01:53.570 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T15:01:53.582 [DEBUG] [Thread-129790] [transport.py] [_log()] starting thread (client mode): 0xb6bb2ce0
2025-12-31T15:01:53.582 [DEBUG] [Thread-129790] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:01:53.596 [DEBUG] [Thread-129790] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T15:01:53.597 [INFO] [Thread-129790] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T15:01:53.604 [DEBUG] [Thread-129790] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:01:53.604 [DEBUG] [Thread-129790] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T15:01:53.604 [DEBUG] [Thread-129790] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:01:53.604 [DEBUG] [Thread-129790] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:01:53.604 [DEBUG] [Thread-129790] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:01:53.604 [DEBUG] [Thread-129790] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:01:53.604 [DEBUG] [Thread-129790] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:01:53.605 [DEBUG] [Thread-129790] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:01:53.605 [DEBUG] [Thread-129790] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:01:53.605 [DEBUG] [Thread-129790] [transport.py] [_log()] client lang: <none>
2025-12-31T15:01:53.605 [DEBUG] [Thread-129790] [transport.py] [_log()] server lang: <none>
2025-12-31T15:01:53.605 [DEBUG] [Thread-129790] [transport.py] [_log()] kex follows: False
2025-12-31T15:01:53.605 [DEBUG] [Thread-129790] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:01:53.605 [DEBUG] [Thread-129790] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:01:53.605 [DEBUG] [Thread-129790] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:01:53.605 [DEBUG] [Thread-129790] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:01:53.605 [DEBUG] [Thread-129790] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:01:53.605 [DEBUG] [Thread-129790] [transport.py] [_log()] Compression: none
2025-12-31T15:01:53.605 [DEBUG] [Thread-129790] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:01:53.664 [DEBUG] [Thread-129790] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:01:53.664 [DEBUG] [Thread-129790] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:01:53.665 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T15:01:53.665 [DEBUG] [Thread-129790] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T15:01:53.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:01:53.720 [DEBUG] [Thread-129790] [transport.py] [_log()] userauth is OK
2025-12-31T15:01:53.720 [DEBUG] [Thread-129790] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:01:53.720 [DEBUG] [Thread-129790] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:01:53.720 [DEBUG] [Thread-129790] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T15:01:53.720 [DEBUG] [Thread-129790] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:01:53.744 [INFO] [Thread-129790] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:01:53.745 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T15:01:53.747 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:01:54.558 [DEBUG] [Thread-129790] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:01:54.558 [DEBUG] [Thread-129790] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:01:54.606 [DEBUG] [Thread-129790] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:01:54.606 [DEBUG] [Thread-129790] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:01:54.616 [DEBUG] [Thread-129790] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:01:54.625 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:01:54.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T15:01:54.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T15:01:54.643 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:01:54.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:01:54.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:01:54.652 [DEBUG] [Thread-129790] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:02:03.909 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:02:03.911 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:02:07.017 [DEBUG] [Thread-129792 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:02:20.284 [DEBUG] [Thread-129793 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:02:22.069 [DEBUG] [Thread-129794 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:02:24.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T15:02:24.672 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T15:02:24.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T15:02:25.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 15, 2), 34.83, 9.59, 0.0, 40.46, 27.63, 0, 0, 0, 2, 0, 0),)
2025-12-31T15:02:25.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 15:02:00
2025-12-31T15:02:25.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T15:02:25.668 [DEBUG] [Thread-129795] [transport.py] [_log()] starting thread (client mode): 0xbbfcebc0
2025-12-31T15:02:25.668 [DEBUG] [Thread-129795] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:02:25.691 [DEBUG] [Thread-129795] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T15:02:25.691 [INFO] [Thread-129795] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T15:02:25.694 [DEBUG] [Thread-129795] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:02:25.694 [DEBUG] [Thread-129795] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T15:02:25.694 [DEBUG] [Thread-129795] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:02:25.694 [DEBUG] [Thread-129795] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:02:25.694 [DEBUG] [Thread-129795] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:02:25.694 [DEBUG] [Thread-129795] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:02:25.695 [DEBUG] [Thread-129795] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:02:25.695 [DEBUG] [Thread-129795] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:02:25.695 [DEBUG] [Thread-129795] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:02:25.695 [DEBUG] [Thread-129795] [transport.py] [_log()] client lang: <none>
2025-12-31T15:02:25.695 [DEBUG] [Thread-129795] [transport.py] [_log()] server lang: <none>
2025-12-31T15:02:25.695 [DEBUG] [Thread-129795] [transport.py] [_log()] kex follows: False
2025-12-31T15:02:25.695 [DEBUG] [Thread-129795] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:02:25.695 [DEBUG] [Thread-129795] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:02:25.695 [DEBUG] [Thread-129795] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:02:25.695 [DEBUG] [Thread-129795] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:02:25.695 [DEBUG] [Thread-129795] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:02:25.695 [DEBUG] [Thread-129795] [transport.py] [_log()] Compression: none
2025-12-31T15:02:25.695 [DEBUG] [Thread-129795] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:02:25.709 [DEBUG] [Thread-129795] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:02:25.709 [DEBUG] [Thread-129795] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:02:25.709 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T15:02:25.709 [DEBUG] [Thread-129795] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T15:02:25.709 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:02:25.710 [DEBUG] [Thread-129795] [transport.py] [_log()] userauth is OK
2025-12-31T15:02:25.710 [DEBUG] [Thread-129795] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:02:25.710 [DEBUG] [Thread-129795] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:02:25.710 [DEBUG] [Thread-129795] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T15:02:25.710 [DEBUG] [Thread-129795] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:02:25.719 [INFO] [Thread-129795] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:02:25.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:02:26.511 [DEBUG] [Thread-129795] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:02:26.511 [DEBUG] [Thread-129795] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:02:26.511 [DEBUG] [Thread-129795] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T15:02:26.551 [DEBUG] [Thread-129795] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:02:26.552 [DEBUG] [Thread-129795] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:02:26.555 [DEBUG] [Thread-129795] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:02:26.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:02:26.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T15:02:26.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T15:02:26.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T15:02:26.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:02:26.573 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T15:02:26.573 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:02:26.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:02:26.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T15:02:26.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.542850 -999.00  +26.70  27.86     15   -1.40 1 2 1 1 1   888    0 27.62 18.16 ----- 33.6 27.9 305.6 39.9 32.1 -21.5 32.1 -21.1 32.2 -21.2 32.7 -21.2
2025-12-31T15:02:26.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T15:02:26.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T15:02:26.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.542850
2025-12-31T15:02:26.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T15:02:26.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T15:02:26.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T15:02:26.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T15:02:26.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T15:02:26.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T15:02:00', tmtdew=34.83, humidity=9.59, cloud=0.0, wind=40.46, temperature=27.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T13:01:42.240', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T15:02:26.574 [DEBUG] [Thread-129795] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:02:26.649 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T15:02:26.661 [DEBUG] [Thread-129798] [transport.py] [_log()] starting thread (client mode): 0xb6bb0a00
2025-12-31T15:02:26.661 [DEBUG] [Thread-129798] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:02:26.678 [DEBUG] [Thread-129798] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T15:02:26.679 [INFO] [Thread-129798] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T15:02:26.686 [DEBUG] [Thread-129798] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:02:26.686 [DEBUG] [Thread-129798] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T15:02:26.686 [DEBUG] [Thread-129798] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:02:26.686 [DEBUG] [Thread-129798] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:02:26.686 [DEBUG] [Thread-129798] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:02:26.686 [DEBUG] [Thread-129798] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:02:26.686 [DEBUG] [Thread-129798] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:02:26.686 [DEBUG] [Thread-129798] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:02:26.686 [DEBUG] [Thread-129798] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:02:26.686 [DEBUG] [Thread-129798] [transport.py] [_log()] client lang: <none>
2025-12-31T15:02:26.686 [DEBUG] [Thread-129798] [transport.py] [_log()] server lang: <none>
2025-12-31T15:02:26.686 [DEBUG] [Thread-129798] [transport.py] [_log()] kex follows: False
2025-12-31T15:02:26.686 [DEBUG] [Thread-129798] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:02:26.686 [DEBUG] [Thread-129798] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:02:26.686 [DEBUG] [Thread-129798] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:02:26.686 [DEBUG] [Thread-129798] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:02:26.686 [DEBUG] [Thread-129798] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:02:26.686 [DEBUG] [Thread-129798] [transport.py] [_log()] Compression: none
2025-12-31T15:02:26.686 [DEBUG] [Thread-129798] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:02:26.742 [DEBUG] [Thread-129798] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:02:26.742 [DEBUG] [Thread-129798] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:02:26.742 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T15:02:26.743 [DEBUG] [Thread-129798] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T15:02:26.743 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:02:26.799 [DEBUG] [Thread-129798] [transport.py] [_log()] userauth is OK
2025-12-31T15:02:26.799 [DEBUG] [Thread-129798] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:02:26.799 [DEBUG] [Thread-129798] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:02:26.799 [DEBUG] [Thread-129798] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T15:02:26.799 [DEBUG] [Thread-129798] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:02:26.814 [INFO] [Thread-129798] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:02:26.814 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T15:02:26.814 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:02:27.682 [DEBUG] [Thread-129798] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:02:27.682 [DEBUG] [Thread-129798] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:02:27.729 [DEBUG] [Thread-129798] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:02:27.730 [DEBUG] [Thread-129798] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:02:27.738 [DEBUG] [Thread-129798] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:02:27.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:02:27.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T15:02:27.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T15:02:27.764 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:02:27.764 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:02:27.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:02:27.772 [DEBUG] [Thread-129798] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:02:37.099 [DEBUG] [Thread-129800 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:02:52.165 [DEBUG] [Thread-129801 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:02:57.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T15:02:57.788 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T15:02:57.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T15:02:58.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 15, 2, 33), 34.7, 9.6, 0.0, 32.03, 27.2, 0, 0, 0, 2, 0, 0),)
2025-12-31T15:02:58.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 15:02:33
2025-12-31T15:02:58.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T15:02:58.793 [DEBUG] [Thread-129802] [transport.py] [_log()] starting thread (client mode): 0xb6bb0820
2025-12-31T15:02:58.793 [DEBUG] [Thread-129802] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:02:58.814 [DEBUG] [Thread-129802] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T15:02:58.814 [INFO] [Thread-129802] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T15:02:58.817 [DEBUG] [Thread-129802] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:02:58.818 [DEBUG] [Thread-129802] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T15:02:58.818 [DEBUG] [Thread-129802] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:02:58.818 [DEBUG] [Thread-129802] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:02:58.818 [DEBUG] [Thread-129802] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:02:58.818 [DEBUG] [Thread-129802] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:02:58.818 [DEBUG] [Thread-129802] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:02:58.818 [DEBUG] [Thread-129802] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:02:58.818 [DEBUG] [Thread-129802] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:02:58.818 [DEBUG] [Thread-129802] [transport.py] [_log()] client lang: <none>
2025-12-31T15:02:58.818 [DEBUG] [Thread-129802] [transport.py] [_log()] server lang: <none>
2025-12-31T15:02:58.818 [DEBUG] [Thread-129802] [transport.py] [_log()] kex follows: False
2025-12-31T15:02:58.818 [DEBUG] [Thread-129802] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:02:58.818 [DEBUG] [Thread-129802] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:02:58.818 [DEBUG] [Thread-129802] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:02:58.818 [DEBUG] [Thread-129802] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:02:58.818 [DEBUG] [Thread-129802] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:02:58.818 [DEBUG] [Thread-129802] [transport.py] [_log()] Compression: none
2025-12-31T15:02:58.818 [DEBUG] [Thread-129802] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:02:58.837 [DEBUG] [Thread-129802] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:02:58.837 [DEBUG] [Thread-129802] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:02:58.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T15:02:58.838 [DEBUG] [Thread-129802] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T15:02:58.839 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:02:58.840 [DEBUG] [Thread-129802] [transport.py] [_log()] userauth is OK
2025-12-31T15:02:58.840 [DEBUG] [Thread-129802] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:02:58.840 [DEBUG] [Thread-129802] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:02:58.840 [DEBUG] [Thread-129802] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T15:02:58.840 [DEBUG] [Thread-129802] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:02:58.863 [INFO] [Thread-129802] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:02:58.864 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:02:59.484 [DEBUG] [Thread-129802] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:02:59.484 [DEBUG] [Thread-129802] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:02:59.484 [DEBUG] [Thread-129802] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T15:02:59.525 [DEBUG] [Thread-129802] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:02:59.525 [DEBUG] [Thread-129802] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:02:59.527 [DEBUG] [Thread-129802] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:02:59.538 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:02:59.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T15:02:59.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T15:02:59.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T15:02:59.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:02:59.546 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T15:02:59.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:02:59.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:02:59.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T15:02:59.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.543197 -999.00  +27.10  29.43     15   -0.90 1 2 1 1 1   888    0 27.31 24.54 ----- 33.6 29.4 315.6 41.4 32.4 -21.8 32.1 -21.3 32.3 -22.7 32.8 -22.9
2025-12-31T15:02:59.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T15:02:59.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T15:02:59.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.543197
2025-12-31T15:02:59.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T15:02:59.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T15:02:59.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T15:02:59.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T15:02:59.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T15:02:59.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T15:02:33', tmtdew=34.7, humidity=9.6, cloud=0.0, wind=32.03, temperature=27.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T13:02:12.221', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T15:02:59.547 [DEBUG] [Thread-129802] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:02:59.625 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T15:02:59.638 [DEBUG] [Thread-129805] [transport.py] [_log()] starting thread (client mode): 0xb6b17a00
2025-12-31T15:02:59.638 [DEBUG] [Thread-129805] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:02:59.654 [DEBUG] [Thread-129805] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T15:02:59.654 [INFO] [Thread-129805] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T15:02:59.662 [DEBUG] [Thread-129805] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:02:59.662 [DEBUG] [Thread-129805] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T15:02:59.662 [DEBUG] [Thread-129805] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:02:59.662 [DEBUG] [Thread-129805] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:02:59.662 [DEBUG] [Thread-129805] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:02:59.663 [DEBUG] [Thread-129805] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:02:59.663 [DEBUG] [Thread-129805] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:02:59.663 [DEBUG] [Thread-129805] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:02:59.663 [DEBUG] [Thread-129805] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:02:59.663 [DEBUG] [Thread-129805] [transport.py] [_log()] client lang: <none>
2025-12-31T15:02:59.663 [DEBUG] [Thread-129805] [transport.py] [_log()] server lang: <none>
2025-12-31T15:02:59.663 [DEBUG] [Thread-129805] [transport.py] [_log()] kex follows: False
2025-12-31T15:02:59.663 [DEBUG] [Thread-129805] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:02:59.663 [DEBUG] [Thread-129805] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:02:59.663 [DEBUG] [Thread-129805] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:02:59.663 [DEBUG] [Thread-129805] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:02:59.663 [DEBUG] [Thread-129805] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:02:59.663 [DEBUG] [Thread-129805] [transport.py] [_log()] Compression: none
2025-12-31T15:02:59.663 [DEBUG] [Thread-129805] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:02:59.719 [DEBUG] [Thread-129805] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:02:59.720 [DEBUG] [Thread-129805] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:02:59.721 [DEBUG] [Thread-129805] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T15:02:59.721 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T15:02:59.722 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:02:59.776 [DEBUG] [Thread-129805] [transport.py] [_log()] userauth is OK
2025-12-31T15:02:59.776 [DEBUG] [Thread-129805] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:02:59.776 [DEBUG] [Thread-129805] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:02:59.777 [DEBUG] [Thread-129805] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T15:02:59.777 [DEBUG] [Thread-129805] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:02:59.796 [INFO] [Thread-129805] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:02:59.796 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T15:02:59.796 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:03:00.640 [DEBUG] [Thread-129805] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:03:00.640 [DEBUG] [Thread-129805] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:03:00.688 [DEBUG] [Thread-129805] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:03:00.688 [DEBUG] [Thread-129805] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:03:00.697 [DEBUG] [Thread-129805] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:03:00.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:03:00.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T15:03:00.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-12-31T15:03:00.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:03:00.721 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:03:00.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:03:00.728 [DEBUG] [Thread-129805] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:03:04.050 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:03:04.051 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:03:07.193 [DEBUG] [Thread-129807 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:03:20.322 [DEBUG] [Thread-129808 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:03:22.245 [DEBUG] [Thread-129809 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:03:30.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T15:03:30.734 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T15:03: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-12-31T15:03:31.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 15, 3, 5), 33.87, 10.1, 0.0, 31.37, 26.85, 0, 0, 0, 2, 0, 0),)
2025-12-31T15:03:31.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 15:03:05
2025-12-31T15:03:31.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T15:03:31.716 [DEBUG] [Thread-129810] [transport.py] [_log()] starting thread (client mode): 0xb6b151b0
2025-12-31T15:03:31.716 [DEBUG] [Thread-129810] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:03:31.736 [DEBUG] [Thread-129810] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T15:03:31.736 [INFO] [Thread-129810] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T15:03:31.739 [DEBUG] [Thread-129810] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:03:31.739 [DEBUG] [Thread-129810] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T15:03:31.739 [DEBUG] [Thread-129810] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:03:31.739 [DEBUG] [Thread-129810] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:03:31.739 [DEBUG] [Thread-129810] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:03:31.740 [DEBUG] [Thread-129810] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:03:31.740 [DEBUG] [Thread-129810] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:03:31.740 [DEBUG] [Thread-129810] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:03:31.740 [DEBUG] [Thread-129810] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:03:31.740 [DEBUG] [Thread-129810] [transport.py] [_log()] client lang: <none>
2025-12-31T15:03:31.740 [DEBUG] [Thread-129810] [transport.py] [_log()] server lang: <none>
2025-12-31T15:03:31.740 [DEBUG] [Thread-129810] [transport.py] [_log()] kex follows: False
2025-12-31T15:03:31.740 [DEBUG] [Thread-129810] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:03:31.740 [DEBUG] [Thread-129810] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:03:31.740 [DEBUG] [Thread-129810] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:03:31.740 [DEBUG] [Thread-129810] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:03:31.740 [DEBUG] [Thread-129810] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:03:31.740 [DEBUG] [Thread-129810] [transport.py] [_log()] Compression: none
2025-12-31T15:03:31.740 [DEBUG] [Thread-129810] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:03:31.758 [DEBUG] [Thread-129810] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:03:31.759 [DEBUG] [Thread-129810] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:03:31.759 [DEBUG] [Thread-129810] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T15:03:31.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T15:03:31.760 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:03:31.761 [DEBUG] [Thread-129810] [transport.py] [_log()] userauth is OK
2025-12-31T15:03:31.761 [DEBUG] [Thread-129810] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:03:31.761 [DEBUG] [Thread-129810] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:03:31.761 [DEBUG] [Thread-129810] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T15:03:31.761 [DEBUG] [Thread-129810] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:03:31.779 [INFO] [Thread-129810] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:03:31.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:03:32.554 [DEBUG] [Thread-129810] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:03:32.555 [DEBUG] [Thread-129810] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:03:32.555 [DEBUG] [Thread-129810] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T15:03:32.595 [DEBUG] [Thread-129810] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:03:32.595 [DEBUG] [Thread-129810] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:03:32.598 [DEBUG] [Thread-129810] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:03:32.610 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:03:32.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T15:03:32.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T15:03:32.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T15:03:32.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:03:32.623 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T15:03:32.623 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:03:32.623 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:03:32.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T15:03:32.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.543545 -999.00  +27.40  39.75     14   -1.50 1 2 2 1 1   888    0 27.54 31.57 ----- 31.4 39.8 301.6 45.5 32.5 -22.5 32.2 -22.5 32.3 -22.8 32.9 -22.7
2025-12-31T15:03:32.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T15:03:32.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T15:03:32.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.543545
2025-12-31T15:03:32.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T15:03:32.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T15:03:32.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T15:03:32.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T15:03:32.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T15:03:32.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T15:03:05', tmtdew=33.87, humidity=10.1, cloud=0.0, wind=31.37, temperature=26.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T13:02:42.288', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T15:03:32.626 [DEBUG] [Thread-129810] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:03:32.709 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T15:03:32.723 [DEBUG] [Thread-129813] [transport.py] [_log()] starting thread (client mode): 0xb95b2650
2025-12-31T15:03:32.723 [DEBUG] [Thread-129813] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:03:32.738 [DEBUG] [Thread-129813] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T15:03:32.738 [INFO] [Thread-129813] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T15:03:32.746 [DEBUG] [Thread-129813] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:03:32.746 [DEBUG] [Thread-129813] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T15:03:32.746 [DEBUG] [Thread-129813] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:03:32.746 [DEBUG] [Thread-129813] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:03:32.746 [DEBUG] [Thread-129813] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:03:32.746 [DEBUG] [Thread-129813] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:03:32.746 [DEBUG] [Thread-129813] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:03:32.746 [DEBUG] [Thread-129813] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:03:32.746 [DEBUG] [Thread-129813] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:03:32.746 [DEBUG] [Thread-129813] [transport.py] [_log()] client lang: <none>
2025-12-31T15:03:32.746 [DEBUG] [Thread-129813] [transport.py] [_log()] server lang: <none>
2025-12-31T15:03:32.746 [DEBUG] [Thread-129813] [transport.py] [_log()] kex follows: False
2025-12-31T15:03:32.746 [DEBUG] [Thread-129813] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:03:32.747 [DEBUG] [Thread-129813] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:03:32.747 [DEBUG] [Thread-129813] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:03:32.747 [DEBUG] [Thread-129813] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:03:32.747 [DEBUG] [Thread-129813] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:03:32.747 [DEBUG] [Thread-129813] [transport.py] [_log()] Compression: none
2025-12-31T15:03:32.747 [DEBUG] [Thread-129813] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:03:32.804 [DEBUG] [Thread-129813] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:03:32.805 [DEBUG] [Thread-129813] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:03:32.805 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T15:03:32.806 [DEBUG] [Thread-129813] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T15:03:32.807 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:03:32.860 [DEBUG] [Thread-129813] [transport.py] [_log()] userauth is OK
2025-12-31T15:03:32.860 [DEBUG] [Thread-129813] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:03:32.860 [DEBUG] [Thread-129813] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:03:32.861 [DEBUG] [Thread-129813] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T15:03:32.861 [DEBUG] [Thread-129813] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:03:32.879 [INFO] [Thread-129813] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:03:32.879 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T15:03:32.880 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:03:33.712 [DEBUG] [Thread-129813] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:03:33.713 [DEBUG] [Thread-129813] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:03:33.761 [DEBUG] [Thread-129813] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:03:33.761 [DEBUG] [Thread-129813] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:03:33.770 [DEBUG] [Thread-129813] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:03:33.779 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:03:33.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T15:03:33.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T15:03:33.798 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:03:33.798 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:03:33.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:03:33.807 [DEBUG] [Thread-129813] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:03:37.281 [DEBUG] [Thread-129815 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:03:52.324 [DEBUG] [Thread-129816 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:04:03.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T15:04:03.820 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T15:04:03.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T15:04:04.189 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:04:04.190 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:04:04.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 15, 3, 37), 35.22, 9.53, 0.0, 32.52, 27.58, 0, 0, 0, 2, 0, 0),)
2025-12-31T15:04:04.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 15:03:37
2025-12-31T15:04:04.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T15:04:04.804 [DEBUG] [Thread-129817] [transport.py] [_log()] starting thread (client mode): 0xb9559b70
2025-12-31T15:04:04.804 [DEBUG] [Thread-129817] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:04:04.824 [DEBUG] [Thread-129817] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T15:04:04.824 [INFO] [Thread-129817] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T15:04:04.826 [DEBUG] [Thread-129817] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:04:04.826 [DEBUG] [Thread-129817] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T15:04:04.826 [DEBUG] [Thread-129817] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:04:04.826 [DEBUG] [Thread-129817] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:04:04.826 [DEBUG] [Thread-129817] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:04:04.826 [DEBUG] [Thread-129817] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:04:04.826 [DEBUG] [Thread-129817] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:04:04.826 [DEBUG] [Thread-129817] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:04:04.826 [DEBUG] [Thread-129817] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:04:04.826 [DEBUG] [Thread-129817] [transport.py] [_log()] client lang: <none>
2025-12-31T15:04:04.826 [DEBUG] [Thread-129817] [transport.py] [_log()] server lang: <none>
2025-12-31T15:04:04.826 [DEBUG] [Thread-129817] [transport.py] [_log()] kex follows: False
2025-12-31T15:04:04.826 [DEBUG] [Thread-129817] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:04:04.826 [DEBUG] [Thread-129817] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:04:04.826 [DEBUG] [Thread-129817] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:04:04.826 [DEBUG] [Thread-129817] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:04:04.826 [DEBUG] [Thread-129817] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:04:04.826 [DEBUG] [Thread-129817] [transport.py] [_log()] Compression: none
2025-12-31T15:04:04.826 [DEBUG] [Thread-129817] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:04:04.838 [DEBUG] [Thread-129817] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:04:04.838 [DEBUG] [Thread-129817] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:04:04.838 [DEBUG] [Thread-129817] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T15:04:04.839 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T15:04:04.839 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:04:04.840 [DEBUG] [Thread-129817] [transport.py] [_log()] userauth is OK
2025-12-31T15:04:04.840 [DEBUG] [Thread-129817] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:04:04.840 [DEBUG] [Thread-129817] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:04:04.840 [DEBUG] [Thread-129817] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T15:04:04.840 [DEBUG] [Thread-129817] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:04:04.876 [INFO] [Thread-129817] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:04:04.877 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:04:05.526 [DEBUG] [Thread-129817] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:04:05.526 [DEBUG] [Thread-129817] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:04:05.526 [DEBUG] [Thread-129817] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T15:04:05.568 [DEBUG] [Thread-129817] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:04:05.568 [DEBUG] [Thread-129817] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:04:05.572 [DEBUG] [Thread-129817] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:04:05.582 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:04:05.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T15:04:05.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T15:04:05.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T15:04:05.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:04:05.594 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T15:04:05.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:04:05.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:04:05.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T15:04:05.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.543892 -999.00  +27.00  37.58     14   -1.80 1 1 2 1 1   888    0 27.90 40.53 ----- 28.3 37.6 301.2 44.7 32.5 -23.2 32.2 -23.0 32.3 -25.1 32.9 -23.7
2025-12-31T15:04:05.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T15:04:05.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T15:04:05.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.543892
2025-12-31T15:04:05.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T15:04:05.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T15:04:05.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T15:04:05.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T15:04:05.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T15:04:05.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T15:03:37', tmtdew=35.22, humidity=9.53, cloud=0.0, wind=32.52, temperature=27.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T13:03:12.269', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T15:04:05.597 [DEBUG] [Thread-129817] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:04:05.684 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T15:04:05.696 [DEBUG] [Thread-129820] [transport.py] [_log()] starting thread (client mode): 0xb6bbc460
2025-12-31T15:04:05.696 [DEBUG] [Thread-129820] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:04:05.710 [DEBUG] [Thread-129820] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T15:04:05.710 [INFO] [Thread-129820] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T15:04:05.718 [DEBUG] [Thread-129820] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:04:05.718 [DEBUG] [Thread-129820] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T15:04:05.718 [DEBUG] [Thread-129820] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:04:05.718 [DEBUG] [Thread-129820] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:04:05.718 [DEBUG] [Thread-129820] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:04:05.718 [DEBUG] [Thread-129820] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:04:05.718 [DEBUG] [Thread-129820] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:04:05.718 [DEBUG] [Thread-129820] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:04:05.718 [DEBUG] [Thread-129820] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:04:05.718 [DEBUG] [Thread-129820] [transport.py] [_log()] client lang: <none>
2025-12-31T15:04:05.718 [DEBUG] [Thread-129820] [transport.py] [_log()] server lang: <none>
2025-12-31T15:04:05.718 [DEBUG] [Thread-129820] [transport.py] [_log()] kex follows: False
2025-12-31T15:04:05.718 [DEBUG] [Thread-129820] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:04:05.718 [DEBUG] [Thread-129820] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:04:05.718 [DEBUG] [Thread-129820] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:04:05.718 [DEBUG] [Thread-129820] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:04:05.718 [DEBUG] [Thread-129820] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:04:05.718 [DEBUG] [Thread-129820] [transport.py] [_log()] Compression: none
2025-12-31T15:04:05.718 [DEBUG] [Thread-129820] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:04:05.780 [DEBUG] [Thread-129820] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:04:05.780 [DEBUG] [Thread-129820] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:04:05.781 [DEBUG] [Thread-129820] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T15:04:05.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T15:04:05.782 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:04:05.836 [DEBUG] [Thread-129820] [transport.py] [_log()] userauth is OK
2025-12-31T15:04:05.836 [DEBUG] [Thread-129820] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:04:05.836 [DEBUG] [Thread-129820] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:04:05.836 [DEBUG] [Thread-129820] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T15:04:05.836 [DEBUG] [Thread-129820] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:04:05.855 [INFO] [Thread-129820] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:04:05.855 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T15:04:05.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:04:06.674 [DEBUG] [Thread-129820] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:04:06.674 [DEBUG] [Thread-129820] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:04:06.721 [DEBUG] [Thread-129820] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:04:06.722 [DEBUG] [Thread-129820] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:04:06.731 [DEBUG] [Thread-129820] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:04:06.740 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:04:06.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-12-31T15:04:06.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T15:04:06.759 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:04:06.759 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:04:06.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:04:06.768 [DEBUG] [Thread-129820] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:04:07.361 [DEBUG] [Thread-129822 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:04:20.353 [DEBUG] [Thread-129823 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:04:22.407 [DEBUG] [Thread-129824 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:04:36.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T15:04:36.789 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T15:04:36.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T15:04:37.438 [DEBUG] [Thread-129825 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:04:37.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 15, 4, 9), 35.14, 9.62, 0.0, 32.57, 27.73, 0, 0, 0, 2, 0, 0),)
2025-12-31T15:04:37.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 15:04:09
2025-12-31T15:04:37.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T15:04:37.766 [DEBUG] [Thread-129826] [transport.py] [_log()] starting thread (client mode): 0xb95b04c0
2025-12-31T15:04:37.767 [DEBUG] [Thread-129826] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:04:37.785 [DEBUG] [Thread-129826] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T15:04:37.785 [INFO] [Thread-129826] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T15:04:37.788 [DEBUG] [Thread-129826] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:04:37.789 [DEBUG] [Thread-129826] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T15:04:37.789 [DEBUG] [Thread-129826] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:04:37.789 [DEBUG] [Thread-129826] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:04:37.789 [DEBUG] [Thread-129826] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:04:37.789 [DEBUG] [Thread-129826] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:04:37.789 [DEBUG] [Thread-129826] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:04:37.789 [DEBUG] [Thread-129826] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:04:37.789 [DEBUG] [Thread-129826] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:04:37.789 [DEBUG] [Thread-129826] [transport.py] [_log()] client lang: <none>
2025-12-31T15:04:37.789 [DEBUG] [Thread-129826] [transport.py] [_log()] server lang: <none>
2025-12-31T15:04:37.789 [DEBUG] [Thread-129826] [transport.py] [_log()] kex follows: False
2025-12-31T15:04:37.789 [DEBUG] [Thread-129826] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:04:37.789 [DEBUG] [Thread-129826] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:04:37.789 [DEBUG] [Thread-129826] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:04:37.789 [DEBUG] [Thread-129826] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:04:37.789 [DEBUG] [Thread-129826] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:04:37.789 [DEBUG] [Thread-129826] [transport.py] [_log()] Compression: none
2025-12-31T15:04:37.789 [DEBUG] [Thread-129826] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:04:37.804 [DEBUG] [Thread-129826] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:04:37.804 [DEBUG] [Thread-129826] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:04:37.805 [DEBUG] [Thread-129826] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T15:04:37.805 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T15:04:37.805 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:04:37.806 [DEBUG] [Thread-129826] [transport.py] [_log()] userauth is OK
2025-12-31T15:04:37.806 [DEBUG] [Thread-129826] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:04:37.806 [DEBUG] [Thread-129826] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:04:37.806 [DEBUG] [Thread-129826] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T15:04:37.806 [DEBUG] [Thread-129826] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:04:37.816 [INFO] [Thread-129826] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:04:37.816 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:04:38.525 [DEBUG] [Thread-129826] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:04:38.525 [DEBUG] [Thread-129826] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:04:38.525 [DEBUG] [Thread-129826] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T15:04:38.566 [DEBUG] [Thread-129826] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:04:38.567 [DEBUG] [Thread-129826] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:04:38.570 [DEBUG] [Thread-129826] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:04:38.583 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:04:38.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T15:04:38.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T15:04:38.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T15:04:38.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:04:38.595 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T15:04:38.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:04:38.596 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:04:38.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T15:04:38.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.544239 -999.00  +26.60  27.37     15   -1.30 1 2 1 1 1   888    0 28.40 47.79 ----- 32.6 27.4 308.8 42.0 32.4 -24.2 32.0 -22.0 32.2 -21.4 32.9 -22.8
2025-12-31T15:04:38.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T15:04:38.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T15:04:38.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.544239
2025-12-31T15:04:38.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T15:04:38.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T15:04:38.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T15:04:38.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T15:04:38.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T15:04:38.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T15:04:09', tmtdew=35.14, humidity=9.62, cloud=0.0, wind=32.57, temperature=27.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T13:03:42.250', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T15:04:38.598 [DEBUG] [Thread-129826] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:04:38.676 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T15:04:38.687 [DEBUG] [Thread-129829] [transport.py] [_log()] starting thread (client mode): 0xb955a4a0
2025-12-31T15:04:38.687 [DEBUG] [Thread-129829] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:04:38.702 [DEBUG] [Thread-129829] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T15:04:38.702 [INFO] [Thread-129829] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T15:04:38.710 [DEBUG] [Thread-129829] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:04:38.710 [DEBUG] [Thread-129829] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T15:04:38.711 [DEBUG] [Thread-129829] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:04:38.711 [DEBUG] [Thread-129829] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:04:38.711 [DEBUG] [Thread-129829] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:04:38.711 [DEBUG] [Thread-129829] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:04:38.711 [DEBUG] [Thread-129829] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:04:38.711 [DEBUG] [Thread-129829] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:04:38.711 [DEBUG] [Thread-129829] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:04:38.711 [DEBUG] [Thread-129829] [transport.py] [_log()] client lang: <none>
2025-12-31T15:04:38.711 [DEBUG] [Thread-129829] [transport.py] [_log()] server lang: <none>
2025-12-31T15:04:38.712 [DEBUG] [Thread-129829] [transport.py] [_log()] kex follows: False
2025-12-31T15:04:38.712 [DEBUG] [Thread-129829] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:04:38.712 [DEBUG] [Thread-129829] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:04:38.712 [DEBUG] [Thread-129829] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:04:38.712 [DEBUG] [Thread-129829] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:04:38.712 [DEBUG] [Thread-129829] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:04:38.712 [DEBUG] [Thread-129829] [transport.py] [_log()] Compression: none
2025-12-31T15:04:38.712 [DEBUG] [Thread-129829] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:04:38.769 [DEBUG] [Thread-129829] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:04:38.770 [DEBUG] [Thread-129829] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:04:38.771 [DEBUG] [Thread-129829] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T15:04:38.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T15:04:38.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:04:38.828 [DEBUG] [Thread-129829] [transport.py] [_log()] userauth is OK
2025-12-31T15:04:38.829 [DEBUG] [Thread-129829] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:04:38.829 [DEBUG] [Thread-129829] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:04:38.829 [DEBUG] [Thread-129829] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T15:04:38.829 [DEBUG] [Thread-129829] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:04:38.848 [INFO] [Thread-129829] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:04:38.849 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T15:04:38.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:04:39.672 [DEBUG] [Thread-129829] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:04:39.672 [DEBUG] [Thread-129829] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:04:39.722 [DEBUG] [Thread-129829] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:04:39.723 [DEBUG] [Thread-129829] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:04:39.732 [DEBUG] [Thread-129829] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:04:39.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:04:39.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T15:04:39.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T15:04:39.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:04:39.763 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:04:39.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:04:39.774 [DEBUG] [Thread-129829] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:04:52.470 [DEBUG] [Thread-129831 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:05:04.327 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:05:04.328 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:05:07.518 [DEBUG] [Thread-129832 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:05:09.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T15:05:09.794 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T15:05:09.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T15:05:10.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 15, 4, 41), 34.04, 10.2, 0.0, 32.59, 27.68, 0, 0, 0, 2, 0, 0),)
2025-12-31T15:05:10.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 15:04:41
2025-12-31T15:05:10.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T15:05:10.775 [DEBUG] [Thread-129833] [transport.py] [_log()] starting thread (client mode): 0xb6b17640
2025-12-31T15:05:10.775 [DEBUG] [Thread-129833] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:05:10.796 [DEBUG] [Thread-129833] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T15:05:10.796 [INFO] [Thread-129833] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T15:05:10.799 [DEBUG] [Thread-129833] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:05:10.799 [DEBUG] [Thread-129833] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T15:05:10.799 [DEBUG] [Thread-129833] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:05:10.799 [DEBUG] [Thread-129833] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:05:10.800 [DEBUG] [Thread-129833] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:05:10.800 [DEBUG] [Thread-129833] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:05:10.800 [DEBUG] [Thread-129833] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:05:10.800 [DEBUG] [Thread-129833] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:05:10.800 [DEBUG] [Thread-129833] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:05:10.800 [DEBUG] [Thread-129833] [transport.py] [_log()] client lang: <none>
2025-12-31T15:05:10.800 [DEBUG] [Thread-129833] [transport.py] [_log()] server lang: <none>
2025-12-31T15:05:10.800 [DEBUG] [Thread-129833] [transport.py] [_log()] kex follows: False
2025-12-31T15:05:10.800 [DEBUG] [Thread-129833] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:05:10.800 [DEBUG] [Thread-129833] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:05:10.800 [DEBUG] [Thread-129833] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:05:10.800 [DEBUG] [Thread-129833] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:05:10.800 [DEBUG] [Thread-129833] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:05:10.800 [DEBUG] [Thread-129833] [transport.py] [_log()] Compression: none
2025-12-31T15:05:10.800 [DEBUG] [Thread-129833] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:05:10.816 [DEBUG] [Thread-129833] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:05:10.817 [DEBUG] [Thread-129833] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:05:10.817 [DEBUG] [Thread-129833] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T15:05:10.818 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T15:05:10.818 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:05:10.820 [DEBUG] [Thread-129833] [transport.py] [_log()] userauth is OK
2025-12-31T15:05:10.820 [DEBUG] [Thread-129833] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:05:10.820 [DEBUG] [Thread-129833] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:05:10.820 [DEBUG] [Thread-129833] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T15:05:10.820 [DEBUG] [Thread-129833] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:05:10.845 [INFO] [Thread-129833] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:05:10.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:05:13.222 [DEBUG] [Thread-129833] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:05:13.223 [DEBUG] [Thread-129833] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:05:13.223 [DEBUG] [Thread-129833] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T15:05:13.264 [DEBUG] [Thread-129833] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:05:13.264 [DEBUG] [Thread-129833] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:05:13.267 [DEBUG] [Thread-129833] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:05:13.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:05:13.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T15:05:13.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T15:05:13.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T15:05:13.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:05:13.302 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T15:05:13.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:05:13.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:05:13.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T15:05:13.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.544586 -999.00  +26.80  32.35     16   -0.90 1 2 2 1 1   888    0 27.93 52.59 ----- 31.6 32.4 308.4 49.1 32.5 -23.8 32.2 -22.4 32.4 -22.9 33.0 -23.4
2025-12-31T15:05:13.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T15:05:13.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T15:05:13.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.544586
2025-12-31T15:05:13.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T15:05:13.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T15:05:13.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T15:05:13.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T15:05:13.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T15:05:13.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T15:04:41', tmtdew=34.04, humidity=10.2, cloud=0.0, wind=32.59, temperature=27.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T13:04:12.230', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T15:05:13.306 [DEBUG] [Thread-129833] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:05:13.396 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T15:05:13.408 [DEBUG] [Thread-129836] [transport.py] [_log()] starting thread (client mode): 0xb6b15570
2025-12-31T15:05:13.408 [DEBUG] [Thread-129836] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:05:13.422 [DEBUG] [Thread-129836] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T15:05:13.423 [INFO] [Thread-129836] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T15:05:13.430 [DEBUG] [Thread-129836] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:05:13.430 [DEBUG] [Thread-129836] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T15:05:13.430 [DEBUG] [Thread-129836] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:05:13.430 [DEBUG] [Thread-129836] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:05:13.430 [DEBUG] [Thread-129836] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:05:13.430 [DEBUG] [Thread-129836] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:05:13.430 [DEBUG] [Thread-129836] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:05:13.431 [DEBUG] [Thread-129836] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:05:13.431 [DEBUG] [Thread-129836] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:05:13.431 [DEBUG] [Thread-129836] [transport.py] [_log()] client lang: <none>
2025-12-31T15:05:13.431 [DEBUG] [Thread-129836] [transport.py] [_log()] server lang: <none>
2025-12-31T15:05:13.431 [DEBUG] [Thread-129836] [transport.py] [_log()] kex follows: False
2025-12-31T15:05:13.431 [DEBUG] [Thread-129836] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:05:13.431 [DEBUG] [Thread-129836] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:05:13.431 [DEBUG] [Thread-129836] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:05:13.431 [DEBUG] [Thread-129836] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:05:13.431 [DEBUG] [Thread-129836] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:05:13.431 [DEBUG] [Thread-129836] [transport.py] [_log()] Compression: none
2025-12-31T15:05:13.431 [DEBUG] [Thread-129836] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:05:13.486 [DEBUG] [Thread-129836] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:05:13.486 [DEBUG] [Thread-129836] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:05:13.487 [DEBUG] [Thread-129836] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T15:05:13.487 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T15:05:13.487 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:05:13.543 [DEBUG] [Thread-129836] [transport.py] [_log()] userauth is OK
2025-12-31T15:05:13.543 [DEBUG] [Thread-129836] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:05:13.544 [DEBUG] [Thread-129836] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:05:13.544 [DEBUG] [Thread-129836] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T15:05:13.544 [DEBUG] [Thread-129836] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:05:13.559 [INFO] [Thread-129836] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:05:13.559 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T15:05:13.559 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:05:14.388 [DEBUG] [Thread-129836] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:05:14.388 [DEBUG] [Thread-129836] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:05:14.440 [DEBUG] [Thread-129836] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:05:14.440 [DEBUG] [Thread-129836] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:05:14.449 [DEBUG] [Thread-129836] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:05:14.460 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:05:14.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T15:05:14.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T15:05:14.483 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:05:14.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:05:14.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:05:14.491 [DEBUG] [Thread-129836] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:05:20.398 [DEBUG] [Thread-129838 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:05:22.558 [DEBUG] [Thread-129839 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:05:37.610 [DEBUG] [Thread-129840 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:05:44.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T15:05:44.513 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T15:05:44.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T15:05:45.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 15, 5, 13), 33.83, 10.3, 0.0, 29.59, 27.37, 0, 0, 0, 2, 0, 0),)
2025-12-31T15:05:45.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 15:05:13
2025-12-31T15:05:45.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T15:05:45.503 [DEBUG] [Thread-129841] [transport.py] [_log()] starting thread (client mode): 0xb6bbf4f0
2025-12-31T15:05:45.503 [DEBUG] [Thread-129841] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:05:45.523 [DEBUG] [Thread-129841] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T15:05:45.523 [INFO] [Thread-129841] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T15:05:45.526 [DEBUG] [Thread-129841] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:05:45.526 [DEBUG] [Thread-129841] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T15:05:45.526 [DEBUG] [Thread-129841] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:05:45.527 [DEBUG] [Thread-129841] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:05:45.527 [DEBUG] [Thread-129841] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:05:45.527 [DEBUG] [Thread-129841] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:05:45.527 [DEBUG] [Thread-129841] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:05:45.527 [DEBUG] [Thread-129841] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:05:45.527 [DEBUG] [Thread-129841] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:05:45.527 [DEBUG] [Thread-129841] [transport.py] [_log()] client lang: <none>
2025-12-31T15:05:45.527 [DEBUG] [Thread-129841] [transport.py] [_log()] server lang: <none>
2025-12-31T15:05:45.527 [DEBUG] [Thread-129841] [transport.py] [_log()] kex follows: False
2025-12-31T15:05:45.527 [DEBUG] [Thread-129841] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:05:45.527 [DEBUG] [Thread-129841] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:05:45.527 [DEBUG] [Thread-129841] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:05:45.527 [DEBUG] [Thread-129841] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:05:45.527 [DEBUG] [Thread-129841] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:05:45.527 [DEBUG] [Thread-129841] [transport.py] [_log()] Compression: none
2025-12-31T15:05:45.527 [DEBUG] [Thread-129841] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:05:45.545 [DEBUG] [Thread-129841] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:05:45.545 [DEBUG] [Thread-129841] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:05:45.545 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T15:05:45.545 [DEBUG] [Thread-129841] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T15:05:45.546 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:05:45.546 [DEBUG] [Thread-129841] [transport.py] [_log()] userauth is OK
2025-12-31T15:05:45.546 [DEBUG] [Thread-129841] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:05:45.546 [DEBUG] [Thread-129841] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:05:45.546 [DEBUG] [Thread-129841] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T15:05:45.546 [DEBUG] [Thread-129841] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:05:45.556 [INFO] [Thread-129841] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:05:45.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:05:46.127 [DEBUG] [Thread-129841] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:05:46.127 [DEBUG] [Thread-129841] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:05:46.127 [DEBUG] [Thread-129841] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T15:05:46.168 [DEBUG] [Thread-129841] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:05:46.169 [DEBUG] [Thread-129841] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:05:46.171 [DEBUG] [Thread-129841] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:05:46.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:05:46.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T15:05:46.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T15:05:46.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T15:05:46.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:05:46.193 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T15:05:46.193 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:05:46.193 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:05:46.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T15:05:46.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.544933 -999.00  +26.90  31.02     16   -0.90 1 2 2 1 1   888    0 28.86 60.18 ----- 35.6 31.0 309.6 45.6 32.6 -24.2 32.1 -23.0 32.5 -22.3 33.0 -24.1
2025-12-31T15:05:46.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T15:05:46.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T15:05:46.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.544933
2025-12-31T15:05:46.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T15:05:46.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T15:05:46.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T15:05:46.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T15:05:46.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T15:05:46.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T15:05:13', tmtdew=33.83, humidity=10.3, cloud=0.0, wind=29.59, temperature=27.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T13:04:42.211', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T15:05:46.194 [DEBUG] [Thread-129841] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:05:46.268 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T15:05:46.279 [DEBUG] [Thread-129844] [transport.py] [_log()] starting thread (client mode): 0xb6b2a950
2025-12-31T15:05:46.279 [DEBUG] [Thread-129844] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:05:46.293 [DEBUG] [Thread-129844] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T15:05:46.294 [INFO] [Thread-129844] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T15:05:46.301 [DEBUG] [Thread-129844] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:05:46.301 [DEBUG] [Thread-129844] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T15:05:46.301 [DEBUG] [Thread-129844] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:05:46.301 [DEBUG] [Thread-129844] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:05:46.301 [DEBUG] [Thread-129844] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:05:46.301 [DEBUG] [Thread-129844] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:05:46.301 [DEBUG] [Thread-129844] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:05:46.301 [DEBUG] [Thread-129844] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:05:46.301 [DEBUG] [Thread-129844] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:05:46.301 [DEBUG] [Thread-129844] [transport.py] [_log()] client lang: <none>
2025-12-31T15:05:46.301 [DEBUG] [Thread-129844] [transport.py] [_log()] server lang: <none>
2025-12-31T15:05:46.301 [DEBUG] [Thread-129844] [transport.py] [_log()] kex follows: False
2025-12-31T15:05:46.301 [DEBUG] [Thread-129844] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:05:46.301 [DEBUG] [Thread-129844] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:05:46.301 [DEBUG] [Thread-129844] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:05:46.301 [DEBUG] [Thread-129844] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:05:46.301 [DEBUG] [Thread-129844] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:05:46.301 [DEBUG] [Thread-129844] [transport.py] [_log()] Compression: none
2025-12-31T15:05:46.301 [DEBUG] [Thread-129844] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:05:46.358 [DEBUG] [Thread-129844] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:05:46.358 [DEBUG] [Thread-129844] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:05:46.359 [DEBUG] [Thread-129844] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T15:05:46.359 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T15:05:46.359 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:05:46.419 [DEBUG] [Thread-129844] [transport.py] [_log()] userauth is OK
2025-12-31T15:05:46.419 [DEBUG] [Thread-129844] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:05:46.419 [DEBUG] [Thread-129844] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:05:46.419 [DEBUG] [Thread-129844] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T15:05:46.419 [DEBUG] [Thread-129844] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:05:46.433 [INFO] [Thread-129844] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:05:46.433 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T15:05:46.433 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:05:47.255 [DEBUG] [Thread-129844] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:05:47.255 [DEBUG] [Thread-129844] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:05:47.302 [DEBUG] [Thread-129844] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:05:47.302 [DEBUG] [Thread-129844] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:05:47.310 [DEBUG] [Thread-129844] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:05:47.318 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:05:47.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T15:05:47.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T15:05:47.334 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:05:47.334 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:05:47.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:05:47.342 [DEBUG] [Thread-129844] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:05:52.643 [DEBUG] [Thread-129846 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:06:04.479 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:06:04.480 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:06:07.695 [DEBUG] [Thread-129847 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:06:17.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T15:06:17.365 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T15:06:17.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T15:06:18.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 15, 5, 45), 33.2, 11.03, 0.0, 33.86, 26.97, 0, 0, 0, 2, 0, 0),)
2025-12-31T15:06:18.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 15:05:45
2025-12-31T15:06:18.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T15:06:18.436 [DEBUG] [Thread-129848] [transport.py] [_log()] starting thread (client mode): 0xb6bb0c70
2025-12-31T15:06:18.436 [DEBUG] [Thread-129848] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:06:18.457 [DEBUG] [Thread-129848] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T15:06:18.457 [INFO] [Thread-129848] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T15:06:18.460 [DEBUG] [Thread-129848] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:06:18.460 [DEBUG] [Thread-129848] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T15:06:18.460 [DEBUG] [Thread-129848] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:06:18.460 [DEBUG] [Thread-129848] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:06:18.460 [DEBUG] [Thread-129848] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:06:18.461 [DEBUG] [Thread-129848] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:06:18.461 [DEBUG] [Thread-129848] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:06:18.461 [DEBUG] [Thread-129848] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:06:18.461 [DEBUG] [Thread-129848] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:06:18.461 [DEBUG] [Thread-129848] [transport.py] [_log()] client lang: <none>
2025-12-31T15:06:18.461 [DEBUG] [Thread-129848] [transport.py] [_log()] server lang: <none>
2025-12-31T15:06:18.461 [DEBUG] [Thread-129848] [transport.py] [_log()] kex follows: False
2025-12-31T15:06:18.461 [DEBUG] [Thread-129848] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:06:18.461 [DEBUG] [Thread-129848] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:06:18.461 [DEBUG] [Thread-129848] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:06:18.461 [DEBUG] [Thread-129848] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:06:18.461 [DEBUG] [Thread-129848] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:06:18.461 [DEBUG] [Thread-129848] [transport.py] [_log()] Compression: none
2025-12-31T15:06:18.461 [DEBUG] [Thread-129848] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:06:18.478 [DEBUG] [Thread-129848] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:06:18.478 [DEBUG] [Thread-129848] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:06:18.478 [DEBUG] [Thread-129848] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T15:06:18.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T15:06:18.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:06:18.479 [DEBUG] [Thread-129848] [transport.py] [_log()] userauth is OK
2025-12-31T15:06:18.479 [DEBUG] [Thread-129848] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:06:18.479 [DEBUG] [Thread-129848] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:06:18.479 [DEBUG] [Thread-129848] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T15:06:18.479 [DEBUG] [Thread-129848] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:06:18.495 [INFO] [Thread-129848] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:06:18.495 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:06:19.250 [DEBUG] [Thread-129848] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:06:19.250 [DEBUG] [Thread-129848] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:06:19.250 [DEBUG] [Thread-129848] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T15:06:19.291 [DEBUG] [Thread-129848] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:06:19.291 [DEBUG] [Thread-129848] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:06:19.293 [DEBUG] [Thread-129848] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:06:19.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:06:19.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T15:06:19.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T15:06:19.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T15:06:19.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:06:19.307 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T15:06:19.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:06:19.308 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:06:19.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T15:06:19.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.545628 -999.00  +27.80  27.76     16   -0.10 1 1 1 1 1   888    0 29.02 70.25 ----- 31.8 27.8 266.2 36.5 32.5 -23.3 32.4 -23.5 32.6 -24.7 33.1 -24.7
2025-12-31T15:06:19.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T15:06:19.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T15:06:19.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.545628
2025-12-31T15:06:19.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T15:06:19.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T15:06:19.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T15:06:19.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T15:06:19.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T15:06:19.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T15:05:45', tmtdew=33.2, humidity=11.03, cloud=0.0, wind=33.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-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T13:05:42.259', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T15:06:19.309 [DEBUG] [Thread-129848] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:06:19.384 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T15:06:19.396 [DEBUG] [Thread-129851] [transport.py] [_log()] starting thread (client mode): 0xb6b15450
2025-12-31T15:06:19.396 [DEBUG] [Thread-129851] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:06:19.411 [DEBUG] [Thread-129851] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T15:06:19.411 [INFO] [Thread-129851] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T15:06:19.418 [DEBUG] [Thread-129851] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:06:19.418 [DEBUG] [Thread-129851] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T15:06:19.418 [DEBUG] [Thread-129851] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:06:19.418 [DEBUG] [Thread-129851] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:06:19.418 [DEBUG] [Thread-129851] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:06:19.418 [DEBUG] [Thread-129851] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:06:19.418 [DEBUG] [Thread-129851] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:06:19.418 [DEBUG] [Thread-129851] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:06:19.418 [DEBUG] [Thread-129851] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:06:19.418 [DEBUG] [Thread-129851] [transport.py] [_log()] client lang: <none>
2025-12-31T15:06:19.418 [DEBUG] [Thread-129851] [transport.py] [_log()] server lang: <none>
2025-12-31T15:06:19.418 [DEBUG] [Thread-129851] [transport.py] [_log()] kex follows: False
2025-12-31T15:06:19.418 [DEBUG] [Thread-129851] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:06:19.418 [DEBUG] [Thread-129851] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:06:19.418 [DEBUG] [Thread-129851] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:06:19.418 [DEBUG] [Thread-129851] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:06:19.419 [DEBUG] [Thread-129851] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:06:19.419 [DEBUG] [Thread-129851] [transport.py] [_log()] Compression: none
2025-12-31T15:06:19.419 [DEBUG] [Thread-129851] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:06:19.478 [DEBUG] [Thread-129851] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:06:19.478 [DEBUG] [Thread-129851] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:06:19.479 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T15:06:19.479 [DEBUG] [Thread-129851] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T15:06:19.479 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:06:19.535 [DEBUG] [Thread-129851] [transport.py] [_log()] userauth is OK
2025-12-31T15:06:19.536 [DEBUG] [Thread-129851] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:06:19.536 [DEBUG] [Thread-129851] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:06:19.536 [DEBUG] [Thread-129851] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T15:06:19.536 [DEBUG] [Thread-129851] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:06:19.553 [INFO] [Thread-129851] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:06:19.553 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T15:06:19.553 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:06:20.401 [DEBUG] [Thread-129851] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:06:20.401 [DEBUG] [Thread-129851] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:06:20.449 [DEBUG] [Thread-129851] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:06:20.449 [DEBUG] [Thread-129851] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:06:20.452 [DEBUG] [Thread-129853 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:06:20.457 [DEBUG] [Thread-129851] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:06:20.465 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:06:20.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T15:06:20.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T15:06:20.481 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:06:20.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:06:20.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:06:20.489 [DEBUG] [Thread-129851] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:06:22.730 [DEBUG] [Thread-129854 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:06:37.785 [DEBUG] [Thread-129855 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:06:50.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T15:06:50.511 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T15:06:50.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T15:06:51.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 15, 6, 17), 33.46, 10.88, 0.0, 31.72, 27.23, 0, 0, 0, 2, 0, 0),)
2025-12-31T15:06:51.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 15:06:17
2025-12-31T15:06:51.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T15:06:51.554 [DEBUG] [Thread-129856] [transport.py] [_log()] starting thread (client mode): 0xb6b16860
2025-12-31T15:06:51.554 [DEBUG] [Thread-129856] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:06:51.575 [DEBUG] [Thread-129856] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T15:06:51.575 [INFO] [Thread-129856] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T15:06:51.578 [DEBUG] [Thread-129856] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:06:51.578 [DEBUG] [Thread-129856] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T15:06:51.578 [DEBUG] [Thread-129856] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:06:51.578 [DEBUG] [Thread-129856] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:06:51.578 [DEBUG] [Thread-129856] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:06:51.578 [DEBUG] [Thread-129856] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:06:51.578 [DEBUG] [Thread-129856] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:06:51.578 [DEBUG] [Thread-129856] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:06:51.578 [DEBUG] [Thread-129856] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:06:51.578 [DEBUG] [Thread-129856] [transport.py] [_log()] client lang: <none>
2025-12-31T15:06:51.578 [DEBUG] [Thread-129856] [transport.py] [_log()] server lang: <none>
2025-12-31T15:06:51.578 [DEBUG] [Thread-129856] [transport.py] [_log()] kex follows: False
2025-12-31T15:06:51.578 [DEBUG] [Thread-129856] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:06:51.578 [DEBUG] [Thread-129856] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:06:51.578 [DEBUG] [Thread-129856] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:06:51.578 [DEBUG] [Thread-129856] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:06:51.578 [DEBUG] [Thread-129856] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:06:51.578 [DEBUG] [Thread-129856] [transport.py] [_log()] Compression: none
2025-12-31T15:06:51.578 [DEBUG] [Thread-129856] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:06:51.593 [DEBUG] [Thread-129856] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:06:51.593 [DEBUG] [Thread-129856] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:06:51.594 [DEBUG] [Thread-129856] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T15:06:51.594 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T15:06:51.594 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:06:51.594 [DEBUG] [Thread-129856] [transport.py] [_log()] userauth is OK
2025-12-31T15:06:51.595 [DEBUG] [Thread-129856] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:06:51.595 [DEBUG] [Thread-129856] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:06:51.595 [DEBUG] [Thread-129856] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T15:06:51.595 [DEBUG] [Thread-129856] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:06:51.605 [INFO] [Thread-129856] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:06:51.605 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:06:52.250 [DEBUG] [Thread-129856] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:06:52.250 [DEBUG] [Thread-129856] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:06:52.250 [DEBUG] [Thread-129856] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T15:06:52.292 [DEBUG] [Thread-129856] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:06:52.292 [DEBUG] [Thread-129856] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:06:52.295 [DEBUG] [Thread-129856] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:06:52.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:06:52.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T15:06:52.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T15:06:52.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T15:06:52.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:06:52.315 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T15:06:52.315 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:06:52.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:06:52.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T15:06:52.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.545975 -999.00  +27.50  24.76     16   -0.30 1 1 1 1 1   888    0 29.27 77.06 ----- 20.9 24.8 278.2 34.9 32.5 -25.9 32.3 -24.3 32.3 -26.3 33.1 -25.2
2025-12-31T15:06:52.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T15:06:52.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T15:06:52.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.545975
2025-12-31T15:06:52.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T15:06:52.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T15:06:52.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T15:06:52.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T15:06:52.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T15:06:52.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T15:06:17', tmtdew=33.46, humidity=10.88, cloud=0.0, wind=31.72, temperature=27.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T13:06:12.240', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T15:06:52.318 [DEBUG] [Thread-129856] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:06:52.396 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T15:06:52.407 [DEBUG] [Thread-129859] [transport.py] [_log()] starting thread (client mode): 0xb6b63be0
2025-12-31T15:06:52.407 [DEBUG] [Thread-129859] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:06:52.422 [DEBUG] [Thread-129859] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T15:06:52.422 [INFO] [Thread-129859] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T15:06:52.430 [DEBUG] [Thread-129859] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:06:52.431 [DEBUG] [Thread-129859] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T15:06:52.431 [DEBUG] [Thread-129859] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:06:52.431 [DEBUG] [Thread-129859] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:06:52.431 [DEBUG] [Thread-129859] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:06:52.431 [DEBUG] [Thread-129859] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:06:52.431 [DEBUG] [Thread-129859] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:06:52.431 [DEBUG] [Thread-129859] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:06:52.431 [DEBUG] [Thread-129859] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:06:52.431 [DEBUG] [Thread-129859] [transport.py] [_log()] client lang: <none>
2025-12-31T15:06:52.432 [DEBUG] [Thread-129859] [transport.py] [_log()] server lang: <none>
2025-12-31T15:06:52.432 [DEBUG] [Thread-129859] [transport.py] [_log()] kex follows: False
2025-12-31T15:06:52.432 [DEBUG] [Thread-129859] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:06:52.432 [DEBUG] [Thread-129859] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:06:52.432 [DEBUG] [Thread-129859] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:06:52.432 [DEBUG] [Thread-129859] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:06:52.432 [DEBUG] [Thread-129859] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:06:52.433 [DEBUG] [Thread-129859] [transport.py] [_log()] Compression: none
2025-12-31T15:06:52.433 [DEBUG] [Thread-129859] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:06:52.489 [DEBUG] [Thread-129859] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:06:52.490 [DEBUG] [Thread-129859] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:06:52.491 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T15:06:52.492 [DEBUG] [Thread-129859] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T15:06:52.493 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:06:52.548 [DEBUG] [Thread-129859] [transport.py] [_log()] userauth is OK
2025-12-31T15:06:52.549 [DEBUG] [Thread-129859] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:06:52.549 [DEBUG] [Thread-129859] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:06:52.549 [DEBUG] [Thread-129859] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T15:06:52.549 [DEBUG] [Thread-129859] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:06:52.567 [INFO] [Thread-129859] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:06:52.568 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T15:06:52.568 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:06:52.826 [DEBUG] [Thread-129861 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:06:53.411 [DEBUG] [Thread-129859] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:06:53.412 [DEBUG] [Thread-129859] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:06:53.460 [DEBUG] [Thread-129859] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:06:53.461 [DEBUG] [Thread-129859] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:06:53.470 [DEBUG] [Thread-129859] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:06:53.479 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:06:53.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T15:06:53.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T15:06:53.498 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:06:53.498 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:06:53.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:06:53.507 [DEBUG] [Thread-129859] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:07:04.624 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:07:04.626 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:07:07.883 [DEBUG] [Thread-129862 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:07:20.508 [DEBUG] [Thread-129863 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:07:22.915 [DEBUG] [Thread-129864 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:07:23.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T15:07:23.528 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T15:07:23.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T15:07:24.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 15, 6, 49), 32.85, 11.18, 0.0, 35.2, 26.85, 0, 0, 0, 2, 0, 0),)
2025-12-31T15:07:24.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 15:06:49
2025-12-31T15:07:24.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T15:07:24.514 [DEBUG] [Thread-129865] [transport.py] [_log()] starting thread (client mode): 0xb95582e0
2025-12-31T15:07:24.514 [DEBUG] [Thread-129865] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:07:24.535 [DEBUG] [Thread-129865] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T15:07:24.535 [INFO] [Thread-129865] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T15:07:24.539 [DEBUG] [Thread-129865] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:07:24.539 [DEBUG] [Thread-129865] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T15:07:24.539 [DEBUG] [Thread-129865] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:07:24.539 [DEBUG] [Thread-129865] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:07:24.539 [DEBUG] [Thread-129865] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:07:24.539 [DEBUG] [Thread-129865] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:07:24.539 [DEBUG] [Thread-129865] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:07:24.539 [DEBUG] [Thread-129865] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:07:24.539 [DEBUG] [Thread-129865] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:07:24.539 [DEBUG] [Thread-129865] [transport.py] [_log()] client lang: <none>
2025-12-31T15:07:24.539 [DEBUG] [Thread-129865] [transport.py] [_log()] server lang: <none>
2025-12-31T15:07:24.539 [DEBUG] [Thread-129865] [transport.py] [_log()] kex follows: False
2025-12-31T15:07:24.540 [DEBUG] [Thread-129865] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:07:24.540 [DEBUG] [Thread-129865] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:07:24.540 [DEBUG] [Thread-129865] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:07:24.540 [DEBUG] [Thread-129865] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:07:24.540 [DEBUG] [Thread-129865] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:07:24.540 [DEBUG] [Thread-129865] [transport.py] [_log()] Compression: none
2025-12-31T15:07:24.540 [DEBUG] [Thread-129865] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:07:24.556 [DEBUG] [Thread-129865] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:07:24.557 [DEBUG] [Thread-129865] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:07:24.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T15:07:24.558 [DEBUG] [Thread-129865] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T15:07:24.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:07:24.560 [DEBUG] [Thread-129865] [transport.py] [_log()] userauth is OK
2025-12-31T15:07:24.560 [DEBUG] [Thread-129865] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:07:24.560 [DEBUG] [Thread-129865] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:07:24.560 [DEBUG] [Thread-129865] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T15:07:24.561 [DEBUG] [Thread-129865] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:07:24.579 [INFO] [Thread-129865] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:07:24.579 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:07:25.331 [DEBUG] [Thread-129865] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:07:25.332 [DEBUG] [Thread-129865] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:07:25.332 [DEBUG] [Thread-129865] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T15:07:25.373 [DEBUG] [Thread-129865] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:07:25.373 [DEBUG] [Thread-129865] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:07:25.376 [DEBUG] [Thread-129865] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:07:25.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:07:25.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T15:07:25.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T15:07:25.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T15:07:25.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:07:25.393 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T15:07:25.393 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:07:25.394 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:07:25.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T15:07:25.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.546322 -999.00  +26.70  29.33     16   -1.00 1 1 1 1 1   888    0 29.04 82.17 ----- 18.8 29.3 294.8 37.1 32.4 -26.3 32.2 -24.9 32.3 -26.9 33.0 -23.8
2025-12-31T15:07:25.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T15:07:25.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T15:07:25.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.546322
2025-12-31T15:07:25.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T15:07:25.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T15:07:25.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T15:07:25.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T15:07:25.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T15:07:25.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T15:06:49', tmtdew=32.85, humidity=11.18, cloud=0.0, wind=35.2, temperature=26.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T13:06:42.221', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T15:07:25.396 [DEBUG] [Thread-129865] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:07:25.483 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T15:07:25.494 [DEBUG] [Thread-129868] [transport.py] [_log()] starting thread (client mode): 0xb955ad40
2025-12-31T15:07:25.494 [DEBUG] [Thread-129868] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:07:25.508 [DEBUG] [Thread-129868] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T15:07:25.508 [INFO] [Thread-129868] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T15:07:25.515 [DEBUG] [Thread-129868] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:07:25.516 [DEBUG] [Thread-129868] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T15:07:25.516 [DEBUG] [Thread-129868] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:07:25.516 [DEBUG] [Thread-129868] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:07:25.516 [DEBUG] [Thread-129868] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:07:25.516 [DEBUG] [Thread-129868] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:07:25.516 [DEBUG] [Thread-129868] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:07:25.516 [DEBUG] [Thread-129868] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:07:25.516 [DEBUG] [Thread-129868] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:07:25.516 [DEBUG] [Thread-129868] [transport.py] [_log()] client lang: <none>
2025-12-31T15:07:25.516 [DEBUG] [Thread-129868] [transport.py] [_log()] server lang: <none>
2025-12-31T15:07:25.516 [DEBUG] [Thread-129868] [transport.py] [_log()] kex follows: False
2025-12-31T15:07:25.516 [DEBUG] [Thread-129868] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:07:25.516 [DEBUG] [Thread-129868] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:07:25.516 [DEBUG] [Thread-129868] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:07:25.516 [DEBUG] [Thread-129868] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:07:25.516 [DEBUG] [Thread-129868] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:07:25.516 [DEBUG] [Thread-129868] [transport.py] [_log()] Compression: none
2025-12-31T15:07:25.516 [DEBUG] [Thread-129868] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:07:25.576 [DEBUG] [Thread-129868] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:07:25.577 [DEBUG] [Thread-129868] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:07:25.577 [DEBUG] [Thread-129868] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T15:07:25.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T15:07:25.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:07:25.636 [DEBUG] [Thread-129868] [transport.py] [_log()] userauth is OK
2025-12-31T15:07:25.636 [DEBUG] [Thread-129868] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:07:25.636 [DEBUG] [Thread-129868] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:07:25.636 [DEBUG] [Thread-129868] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T15:07:25.636 [DEBUG] [Thread-129868] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:07:25.653 [INFO] [Thread-129868] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:07:25.653 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T15:07:25.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:07:26.484 [DEBUG] [Thread-129868] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:07:26.485 [DEBUG] [Thread-129868] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:07:26.532 [DEBUG] [Thread-129868] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:07:26.532 [DEBUG] [Thread-129868] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:07:26.542 [DEBUG] [Thread-129868] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:07:26.551 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:07:26.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T15:07:26.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T15:07:26.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:07:26.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:07:26.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:07:26.580 [DEBUG] [Thread-129868] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:07:37.942 [DEBUG] [Thread-129871 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:07:50.776 [DEBUG] [Thread-129870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:07:52.984 [DEBUG] [Thread-129872 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:07:56.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T15:07:56.602 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T15:07:56.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T15:07:57.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 15, 7, 53), 33.15, 11.01, 0.0, 29.03, 26.9, 0, 0, 0, 2, 0, 0),)
2025-12-31T15:07:57.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 15:07:53
2025-12-31T15:07:57.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T15:07:57.595 [DEBUG] [Thread-129873] [transport.py] [_log()] starting thread (client mode): 0xb6bb0640
2025-12-31T15:07:57.595 [DEBUG] [Thread-129873] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:07:57.616 [DEBUG] [Thread-129873] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T15:07:57.616 [INFO] [Thread-129873] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T15:07:57.619 [DEBUG] [Thread-129873] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:07:57.620 [DEBUG] [Thread-129873] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T15:07:57.620 [DEBUG] [Thread-129873] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:07:57.620 [DEBUG] [Thread-129873] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:07:57.620 [DEBUG] [Thread-129873] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:07:57.620 [DEBUG] [Thread-129873] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:07:57.620 [DEBUG] [Thread-129873] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:07:57.620 [DEBUG] [Thread-129873] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:07:57.620 [DEBUG] [Thread-129873] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:07:57.620 [DEBUG] [Thread-129873] [transport.py] [_log()] client lang: <none>
2025-12-31T15:07:57.620 [DEBUG] [Thread-129873] [transport.py] [_log()] server lang: <none>
2025-12-31T15:07:57.621 [DEBUG] [Thread-129873] [transport.py] [_log()] kex follows: False
2025-12-31T15:07:57.621 [DEBUG] [Thread-129873] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:07:57.621 [DEBUG] [Thread-129873] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:07:57.621 [DEBUG] [Thread-129873] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:07:57.621 [DEBUG] [Thread-129873] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:07:57.621 [DEBUG] [Thread-129873] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:07:57.621 [DEBUG] [Thread-129873] [transport.py] [_log()] Compression: none
2025-12-31T15:07:57.621 [DEBUG] [Thread-129873] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:07:57.640 [DEBUG] [Thread-129873] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:07:57.640 [DEBUG] [Thread-129873] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:07:57.641 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T15:07:57.642 [DEBUG] [Thread-129873] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T15:07:57.643 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:07:57.686 [DEBUG] [Thread-129873] [transport.py] [_log()] userauth is OK
2025-12-31T15:07:57.687 [DEBUG] [Thread-129873] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:07:57.687 [DEBUG] [Thread-129873] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:07:57.687 [DEBUG] [Thread-129873] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T15:07:57.687 [DEBUG] [Thread-129873] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:07:57.728 [INFO] [Thread-129873] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:07:57.729 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:07:58.378 [DEBUG] [Thread-129873] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:07:58.378 [DEBUG] [Thread-129873] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:07:58.379 [DEBUG] [Thread-129873] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T15:07:58.419 [DEBUG] [Thread-129873] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:07:58.419 [DEBUG] [Thread-129873] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:07:58.422 [DEBUG] [Thread-129873] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:07:58.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:07:58.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T15:07:58.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T15:07:58.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T15:07:58.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:07:58.446 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T15:07:58.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:07:58.447 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:07:58.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T15:07:58.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.546669 -999.00  +26.90  28.92     16   -0.80 1 1 1 1 1   888    0 29.16 84.77 ----- 25.0 28.9 301.4 32.7 32.5 -24.4 32.2 -24.6 32.4 -24.5 33.1 -24.1
2025-12-31T15:07:58.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T15:07:58.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T15:07:58.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.546669
2025-12-31T15:07:58.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T15:07:58.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T15:07:58.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T15:07:58.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T15:07:58.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T15:07:58.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T15:07:53', tmtdew=33.15, humidity=11.01, cloud=0.0, wind=29.03, temperature=26.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T13:07:12.202', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T15:07:58.450 [DEBUG] [Thread-129873] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:07:58.532 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T15:07:58.544 [DEBUG] [Thread-129876] [transport.py] [_log()] starting thread (client mode): 0xb95589a0
2025-12-31T15:07:58.544 [DEBUG] [Thread-129876] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:07:58.559 [DEBUG] [Thread-129876] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T15:07:58.559 [INFO] [Thread-129876] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T15:07:58.566 [DEBUG] [Thread-129876] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:07:58.567 [DEBUG] [Thread-129876] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T15:07:58.567 [DEBUG] [Thread-129876] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:07:58.567 [DEBUG] [Thread-129876] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:07:58.567 [DEBUG] [Thread-129876] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:07:58.567 [DEBUG] [Thread-129876] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:07:58.567 [DEBUG] [Thread-129876] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:07:58.567 [DEBUG] [Thread-129876] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:07:58.567 [DEBUG] [Thread-129876] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:07:58.567 [DEBUG] [Thread-129876] [transport.py] [_log()] client lang: <none>
2025-12-31T15:07:58.568 [DEBUG] [Thread-129876] [transport.py] [_log()] server lang: <none>
2025-12-31T15:07:58.568 [DEBUG] [Thread-129876] [transport.py] [_log()] kex follows: False
2025-12-31T15:07:58.568 [DEBUG] [Thread-129876] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:07:58.568 [DEBUG] [Thread-129876] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:07:58.568 [DEBUG] [Thread-129876] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:07:58.568 [DEBUG] [Thread-129876] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:07:58.568 [DEBUG] [Thread-129876] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:07:58.568 [DEBUG] [Thread-129876] [transport.py] [_log()] Compression: none
2025-12-31T15:07:58.568 [DEBUG] [Thread-129876] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:07:58.625 [DEBUG] [Thread-129876] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:07:58.625 [DEBUG] [Thread-129876] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:07:58.626 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T15:07:58.627 [DEBUG] [Thread-129876] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T15:07:58.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:07:58.680 [DEBUG] [Thread-129876] [transport.py] [_log()] userauth is OK
2025-12-31T15:07:58.681 [DEBUG] [Thread-129876] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:07:58.681 [DEBUG] [Thread-129876] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:07:58.681 [DEBUG] [Thread-129876] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T15:07:58.681 [DEBUG] [Thread-129876] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:07:58.699 [INFO] [Thread-129876] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:07:58.708 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T15:07:58.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:07:59.524 [DEBUG] [Thread-129876] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:07:59.524 [DEBUG] [Thread-129876] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:07:59.572 [DEBUG] [Thread-129876] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:07:59.572 [DEBUG] [Thread-129876] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:07:59.581 [DEBUG] [Thread-129876] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:07:59.591 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:07:59.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-12-31T15:07:59.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T15:07:59.610 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:07:59.610 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:07:59.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:07:59.618 [DEBUG] [Thread-129876] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:08:04.766 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:08:04.767 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:08:08.019 [DEBUG] [Thread-129878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:08:20.563 [DEBUG] [Thread-129879 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:08:23.074 [DEBUG] [Thread-129880 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:08:29.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T15:08:29.641 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T15:08:29.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T15:08:30.267 [DEBUG] [Thread-129870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:08:30.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 15, 8, 25), 33.29, 10.9, 0.0, 27.54, 26.87, 0, 0, 0, 2, 0, 0),)
2025-12-31T15:08:30.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 15:08:25
2025-12-31T15:08:30.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T15:08:30.636 [DEBUG] [Thread-129881] [transport.py] [_log()] starting thread (client mode): 0xb6b28a90
2025-12-31T15:08:30.636 [DEBUG] [Thread-129881] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:08:30.650 [DEBUG] [Thread-129881] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T15:08:30.650 [INFO] [Thread-129881] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T15:08:30.653 [DEBUG] [Thread-129881] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:08:30.653 [DEBUG] [Thread-129881] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T15:08:30.653 [DEBUG] [Thread-129881] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:08:30.653 [DEBUG] [Thread-129881] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:08:30.653 [DEBUG] [Thread-129881] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:08:30.653 [DEBUG] [Thread-129881] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:08:30.653 [DEBUG] [Thread-129881] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:08:30.653 [DEBUG] [Thread-129881] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:08:30.653 [DEBUG] [Thread-129881] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:08:30.653 [DEBUG] [Thread-129881] [transport.py] [_log()] client lang: <none>
2025-12-31T15:08:30.653 [DEBUG] [Thread-129881] [transport.py] [_log()] server lang: <none>
2025-12-31T15:08:30.653 [DEBUG] [Thread-129881] [transport.py] [_log()] kex follows: False
2025-12-31T15:08:30.653 [DEBUG] [Thread-129881] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:08:30.654 [DEBUG] [Thread-129881] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:08:30.654 [DEBUG] [Thread-129881] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:08:30.654 [DEBUG] [Thread-129881] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:08:30.654 [DEBUG] [Thread-129881] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:08:30.654 [DEBUG] [Thread-129881] [transport.py] [_log()] Compression: none
2025-12-31T15:08:30.654 [DEBUG] [Thread-129881] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:08:30.671 [DEBUG] [Thread-129881] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:08:30.671 [DEBUG] [Thread-129881] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:08:30.672 [DEBUG] [Thread-129881] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T15:08:30.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T15:08:30.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:08:30.673 [DEBUG] [Thread-129881] [transport.py] [_log()] userauth is OK
2025-12-31T15:08:30.673 [DEBUG] [Thread-129881] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:08:30.674 [DEBUG] [Thread-129881] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:08:30.674 [DEBUG] [Thread-129881] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T15:08:30.674 [DEBUG] [Thread-129881] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:08:30.698 [INFO] [Thread-129881] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:08:30.699 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:08:31.460 [DEBUG] [Thread-129881] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:08:31.460 [DEBUG] [Thread-129881] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:08:31.461 [DEBUG] [Thread-129881] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T15:08:31.501 [DEBUG] [Thread-129881] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:08:31.501 [DEBUG] [Thread-129881] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:08:31.504 [DEBUG] [Thread-129881] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:08:31.514 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:08:31.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T15:08:31.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T15:08:31.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T15:08:31.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:08:31.527 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T15:08:31.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:08:31.528 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:08:31.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T15:08:31.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.547017 -999.00  +26.70  28.32     16   -0.80 1 1 1 1 1   888    0 30.43 97.37 ----- 31.8 28.3 297.4 35.0 32.5 -25.6 32.2 -24.1 32.4 -24.1 33.0 -25.1
2025-12-31T15:08:31.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T15:08:31.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T15:08:31.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.547017
2025-12-31T15:08:31.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T15:08:31.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T15:08:31.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T15:08:31.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T15:08:31.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T15:08:31.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T15:08:25', tmtdew=33.29, humidity=10.9, cloud=0.0, wind=27.54, temperature=26.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T13:07:42.269', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T15:08:31.535 [DEBUG] [Thread-129881] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:08:31.613 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T15:08:31.625 [DEBUG] [Thread-129884] [transport.py] [_log()] starting thread (client mode): 0xb6b2bdc0
2025-12-31T15:08:31.625 [DEBUG] [Thread-129884] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:08:31.640 [DEBUG] [Thread-129884] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T15:08:31.640 [INFO] [Thread-129884] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T15:08:31.648 [DEBUG] [Thread-129884] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:08:31.648 [DEBUG] [Thread-129884] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T15:08:31.648 [DEBUG] [Thread-129884] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:08:31.648 [DEBUG] [Thread-129884] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:08:31.648 [DEBUG] [Thread-129884] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:08:31.648 [DEBUG] [Thread-129884] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:08:31.648 [DEBUG] [Thread-129884] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:08:31.648 [DEBUG] [Thread-129884] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:08:31.648 [DEBUG] [Thread-129884] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:08:31.648 [DEBUG] [Thread-129884] [transport.py] [_log()] client lang: <none>
2025-12-31T15:08:31.648 [DEBUG] [Thread-129884] [transport.py] [_log()] server lang: <none>
2025-12-31T15:08:31.648 [DEBUG] [Thread-129884] [transport.py] [_log()] kex follows: False
2025-12-31T15:08:31.648 [DEBUG] [Thread-129884] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:08:31.649 [DEBUG] [Thread-129884] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:08:31.649 [DEBUG] [Thread-129884] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:08:31.649 [DEBUG] [Thread-129884] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:08:31.649 [DEBUG] [Thread-129884] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:08:31.649 [DEBUG] [Thread-129884] [transport.py] [_log()] Compression: none
2025-12-31T15:08:31.649 [DEBUG] [Thread-129884] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:08:31.708 [DEBUG] [Thread-129884] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:08:31.708 [DEBUG] [Thread-129884] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:08:31.709 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T15:08:31.709 [DEBUG] [Thread-129884] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T15:08:31.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:08:31.763 [DEBUG] [Thread-129884] [transport.py] [_log()] userauth is OK
2025-12-31T15:08:31.764 [DEBUG] [Thread-129884] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:08:31.764 [DEBUG] [Thread-129884] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:08:31.764 [DEBUG] [Thread-129884] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T15:08:31.764 [DEBUG] [Thread-129884] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:08:31.784 [INFO] [Thread-129884] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:08:31.784 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T15:08:31.785 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:08:32.625 [DEBUG] [Thread-129884] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:08:32.625 [DEBUG] [Thread-129884] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:08:32.673 [DEBUG] [Thread-129884] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:08:32.673 [DEBUG] [Thread-129884] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:08:32.683 [DEBUG] [Thread-129884] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:08:32.692 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:08:32.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T15:08:32.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T15:08:32.711 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:08:32.711 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:08:32.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:08:32.722 [DEBUG] [Thread-129884] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:08:38.112 [DEBUG] [Thread-129886 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:08:53.163 [DEBUG] [Thread-129887 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:09:02.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T15:09:02.739 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T15:09:02.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T15:09:03.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 15, 8, 57), 32.75, 11.26, 0.0, 33.38, 26.8, 0, 0, 0, 2, 0, 0),)
2025-12-31T15:09:03.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 15:08:57
2025-12-31T15:09:03.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T15:09:03.711 [DEBUG] [Thread-129888] [transport.py] [_log()] starting thread (client mode): 0xb6bbffd0
2025-12-31T15:09:03.711 [DEBUG] [Thread-129888] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:09:03.732 [DEBUG] [Thread-129888] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T15:09:03.732 [INFO] [Thread-129888] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T15:09:03.735 [DEBUG] [Thread-129888] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:09:03.735 [DEBUG] [Thread-129888] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T15:09:03.735 [DEBUG] [Thread-129888] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:09:03.735 [DEBUG] [Thread-129888] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:09:03.735 [DEBUG] [Thread-129888] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:09:03.735 [DEBUG] [Thread-129888] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:09:03.735 [DEBUG] [Thread-129888] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:09:03.735 [DEBUG] [Thread-129888] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:09:03.735 [DEBUG] [Thread-129888] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:09:03.735 [DEBUG] [Thread-129888] [transport.py] [_log()] client lang: <none>
2025-12-31T15:09:03.735 [DEBUG] [Thread-129888] [transport.py] [_log()] server lang: <none>
2025-12-31T15:09:03.735 [DEBUG] [Thread-129888] [transport.py] [_log()] kex follows: False
2025-12-31T15:09:03.735 [DEBUG] [Thread-129888] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:09:03.735 [DEBUG] [Thread-129888] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:09:03.735 [DEBUG] [Thread-129888] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:09:03.735 [DEBUG] [Thread-129888] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:09:03.736 [DEBUG] [Thread-129888] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:09:03.736 [DEBUG] [Thread-129888] [transport.py] [_log()] Compression: none
2025-12-31T15:09:03.736 [DEBUG] [Thread-129888] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:09:03.755 [DEBUG] [Thread-129888] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:09:03.755 [DEBUG] [Thread-129888] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:09:03.756 [DEBUG] [Thread-129888] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T15:09:03.756 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T15:09:03.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:09:03.759 [DEBUG] [Thread-129888] [transport.py] [_log()] userauth is OK
2025-12-31T15:09:03.759 [DEBUG] [Thread-129888] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:09:03.760 [DEBUG] [Thread-129888] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:09:03.760 [DEBUG] [Thread-129888] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T15:09:03.760 [DEBUG] [Thread-129888] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:09:03.807 [INFO] [Thread-129888] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:09:03.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:09:04.462 [DEBUG] [Thread-129888] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:09:04.471 [DEBUG] [Thread-129888] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:09:04.471 [DEBUG] [Thread-129888] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T15:09:04.504 [DEBUG] [Thread-129888] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:09:04.504 [DEBUG] [Thread-129888] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:09:04.507 [DEBUG] [Thread-129888] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:09:04.521 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:09:04.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T15:09:04.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T15:09:04.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T15:09:04.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:09:04.534 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T15:09:04.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:09:04.535 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:09:04.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T15:09:04.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.547364 -999.00  +26.30  33.10     16   -0.70 1 1 2 1 1   888    0 29.36 94.09 ----- 34.7 33.1 307.6 39.5 32.4 -25.5 32.1 -25.0 32.3 -24.9 32.9 -25.7
2025-12-31T15:09:04.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T15:09:04.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T15:09:04.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.547364
2025-12-31T15:09:04.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T15:09:04.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T15:09:04.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T15:09:04.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T15:09:04.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T15:09:04.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T15:08:57', tmtdew=32.75, humidity=11.26, cloud=0.0, wind=33.38, temperature=26.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T13:08:12.250', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T15:09:04.537 [DEBUG] [Thread-129888] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:09:04.623 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T15:09:04.636 [DEBUG] [Thread-129891] [transport.py] [_log()] starting thread (client mode): 0xb6bbdff0
2025-12-31T15:09:04.636 [DEBUG] [Thread-129891] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:09:04.651 [DEBUG] [Thread-129891] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T15:09:04.651 [INFO] [Thread-129891] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T15:09:04.658 [DEBUG] [Thread-129891] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:09:04.658 [DEBUG] [Thread-129891] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T15:09:04.658 [DEBUG] [Thread-129891] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:09:04.659 [DEBUG] [Thread-129891] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:09:04.659 [DEBUG] [Thread-129891] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:09:04.659 [DEBUG] [Thread-129891] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:09:04.659 [DEBUG] [Thread-129891] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:09:04.659 [DEBUG] [Thread-129891] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:09:04.659 [DEBUG] [Thread-129891] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:09:04.659 [DEBUG] [Thread-129891] [transport.py] [_log()] client lang: <none>
2025-12-31T15:09:04.659 [DEBUG] [Thread-129891] [transport.py] [_log()] server lang: <none>
2025-12-31T15:09:04.659 [DEBUG] [Thread-129891] [transport.py] [_log()] kex follows: False
2025-12-31T15:09:04.659 [DEBUG] [Thread-129891] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:09:04.659 [DEBUG] [Thread-129891] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:09:04.659 [DEBUG] [Thread-129891] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:09:04.659 [DEBUG] [Thread-129891] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:09:04.659 [DEBUG] [Thread-129891] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:09:04.659 [DEBUG] [Thread-129891] [transport.py] [_log()] Compression: none
2025-12-31T15:09:04.659 [DEBUG] [Thread-129891] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:09:04.723 [DEBUG] [Thread-129891] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:09:04.723 [DEBUG] [Thread-129891] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:09:04.723 [DEBUG] [Thread-129891] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T15:09:04.723 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T15:09:04.724 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:09:04.781 [DEBUG] [Thread-129891] [transport.py] [_log()] userauth is OK
2025-12-31T15:09:04.781 [DEBUG] [Thread-129891] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:09:04.782 [DEBUG] [Thread-129891] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:09:04.782 [DEBUG] [Thread-129891] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T15:09:04.782 [DEBUG] [Thread-129891] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:09:04.800 [INFO] [Thread-129891] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:09:04.801 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T15:09:04.801 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:09:04.905 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:09:04.906 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:09:05.652 [DEBUG] [Thread-129891] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:09:05.652 [DEBUG] [Thread-129891] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:09:05.702 [DEBUG] [Thread-129891] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:09:05.702 [DEBUG] [Thread-129891] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:09:05.711 [DEBUG] [Thread-129891] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:09:05.720 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:09:05.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-12-31T15:09:05.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T15:09:05.736 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:09:05.736 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:09:05.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:09:05.744 [DEBUG] [Thread-129891] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:09:08.194 [DEBUG] [Thread-129893 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:09:20.608 [DEBUG] [Thread-129894 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:09:23.250 [DEBUG] [Thread-129895 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:09:33.697 [DEBUG] [Thread-129870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:09:35.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T15:09:35.766 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T15:09:35.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T15:09:36.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 15, 9, 29), 33.22, 10.91, 0.0, 34.85, 26.92, 0, 0, 0, 2, 0, 0),)
2025-12-31T15:09:36.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 15:09:29
2025-12-31T15:09:36.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T15:09:36.788 [DEBUG] [Thread-129896] [transport.py] [_log()] starting thread (client mode): 0xb955ac80
2025-12-31T15:09:36.789 [DEBUG] [Thread-129896] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:09:36.808 [DEBUG] [Thread-129896] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T15:09:36.809 [INFO] [Thread-129896] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T15:09:36.812 [DEBUG] [Thread-129896] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:09:36.812 [DEBUG] [Thread-129896] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T15:09:36.812 [DEBUG] [Thread-129896] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:09:36.812 [DEBUG] [Thread-129896] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:09:36.812 [DEBUG] [Thread-129896] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:09:36.812 [DEBUG] [Thread-129896] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:09:36.812 [DEBUG] [Thread-129896] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:09:36.812 [DEBUG] [Thread-129896] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:09:36.812 [DEBUG] [Thread-129896] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:09:36.812 [DEBUG] [Thread-129896] [transport.py] [_log()] client lang: <none>
2025-12-31T15:09:36.812 [DEBUG] [Thread-129896] [transport.py] [_log()] server lang: <none>
2025-12-31T15:09:36.812 [DEBUG] [Thread-129896] [transport.py] [_log()] kex follows: False
2025-12-31T15:09:36.812 [DEBUG] [Thread-129896] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:09:36.812 [DEBUG] [Thread-129896] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:09:36.812 [DEBUG] [Thread-129896] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:09:36.812 [DEBUG] [Thread-129896] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:09:36.812 [DEBUG] [Thread-129896] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:09:36.812 [DEBUG] [Thread-129896] [transport.py] [_log()] Compression: none
2025-12-31T15:09:36.812 [DEBUG] [Thread-129896] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:09:36.827 [DEBUG] [Thread-129896] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:09:36.827 [DEBUG] [Thread-129896] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:09:36.827 [DEBUG] [Thread-129896] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T15:09:36.827 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T15:09:36.827 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:09:36.827 [DEBUG] [Thread-129896] [transport.py] [_log()] userauth is OK
2025-12-31T15:09:36.828 [DEBUG] [Thread-129896] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:09:36.828 [DEBUG] [Thread-129896] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:09:36.828 [DEBUG] [Thread-129896] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T15:09:36.828 [DEBUG] [Thread-129896] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:09:36.837 [INFO] [Thread-129896] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:09:36.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:09:37.558 [DEBUG] [Thread-129896] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:09:37.558 [DEBUG] [Thread-129896] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:09:37.558 [DEBUG] [Thread-129896] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T15:09:37.600 [DEBUG] [Thread-129896] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:09:37.600 [DEBUG] [Thread-129896] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:09:37.603 [DEBUG] [Thread-129896] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:09:37.615 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:09:37.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T15:09:37.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T15:09:37.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T15:09:37.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:09:37.624 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T15:09:37.624 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:09:37.625 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:09:37.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T15:09:37.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.547711 -999.00  +26.20  20.05     16   -0.80 1 1 1 1 1   888    0 29.73 95.33 ----- 19.0 20.1 291.7 34.1 32.3 -26.7 32.1 -25.4 32.2 -30.9 32.9 -25.7
2025-12-31T15:09:37.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T15:09:37.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T15:09:37.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.547711
2025-12-31T15:09:37.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T15:09:37.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T15:09:37.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T15:09:37.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T15:09:37.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T15:09:37.627 [DEBUG] [Thread-129896] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:09:37.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T15:09:29', tmtdew=33.22, humidity=10.91, cloud=0.0, wind=34.85, temperature=26.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T13:08:42.230', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T15:09:37.711 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T15:09:37.723 [DEBUG] [Thread-129899] [transport.py] [_log()] starting thread (client mode): 0xb9559a80
2025-12-31T15:09:37.723 [DEBUG] [Thread-129899] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:09:37.739 [DEBUG] [Thread-129899] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T15:09:37.739 [INFO] [Thread-129899] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T15:09:37.747 [DEBUG] [Thread-129899] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:09:37.747 [DEBUG] [Thread-129899] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T15:09:37.747 [DEBUG] [Thread-129899] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:09:37.747 [DEBUG] [Thread-129899] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:09:37.747 [DEBUG] [Thread-129899] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:09:37.748 [DEBUG] [Thread-129899] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:09:37.748 [DEBUG] [Thread-129899] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:09:37.748 [DEBUG] [Thread-129899] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:09:37.748 [DEBUG] [Thread-129899] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:09:37.748 [DEBUG] [Thread-129899] [transport.py] [_log()] client lang: <none>
2025-12-31T15:09:37.748 [DEBUG] [Thread-129899] [transport.py] [_log()] server lang: <none>
2025-12-31T15:09:37.748 [DEBUG] [Thread-129899] [transport.py] [_log()] kex follows: False
2025-12-31T15:09:37.748 [DEBUG] [Thread-129899] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:09:37.748 [DEBUG] [Thread-129899] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:09:37.748 [DEBUG] [Thread-129899] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:09:37.748 [DEBUG] [Thread-129899] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:09:37.748 [DEBUG] [Thread-129899] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:09:37.748 [DEBUG] [Thread-129899] [transport.py] [_log()] Compression: none
2025-12-31T15:09:37.748 [DEBUG] [Thread-129899] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:09:37.807 [DEBUG] [Thread-129899] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:09:37.807 [DEBUG] [Thread-129899] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:09:37.808 [DEBUG] [Thread-129899] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T15:09:37.808 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T15:09:37.809 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:09:37.863 [DEBUG] [Thread-129899] [transport.py] [_log()] userauth is OK
2025-12-31T15:09:37.863 [DEBUG] [Thread-129899] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:09:37.864 [DEBUG] [Thread-129899] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:09:37.864 [DEBUG] [Thread-129899] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T15:09:37.864 [DEBUG] [Thread-129899] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:09:37.882 [INFO] [Thread-129899] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:09: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-12-31T15:09:37.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:09:38.283 [DEBUG] [Thread-129901 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:09:38.730 [DEBUG] [Thread-129899] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:09:38.730 [DEBUG] [Thread-129899] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:09:38.778 [DEBUG] [Thread-129899] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:09:38.778 [DEBUG] [Thread-129899] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:09:38.787 [DEBUG] [Thread-129899] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:09:38.797 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:09:38.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T15:09:38.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T15:09:38.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:09:38.816 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:09:38.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:09:38.824 [DEBUG] [Thread-129899] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:09:53.339 [DEBUG] [Thread-129902 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:09:58.171 [DEBUG] [Thread-129870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:10:05.048 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:10:05.049 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:10:08.373 [DEBUG] [Thread-129903 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:10:08.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T15:10:08.847 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T15:10:08.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T15:10:09.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 15, 10, 1), 33.39, 10.78, 0.0, 31.44, 26.87, 0, 0, 0, 2, 0, 0),)
2025-12-31T15:10:09.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 15:10:01
2025-12-31T15:10:09.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T15:10:09.822 [DEBUG] [Thread-129904] [transport.py] [_log()] starting thread (client mode): 0xb95f19c0
2025-12-31T15:10:09.822 [DEBUG] [Thread-129904] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:10:09.843 [DEBUG] [Thread-129904] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T15:10:09.844 [INFO] [Thread-129904] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T15:10:09.846 [DEBUG] [Thread-129904] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:10:09.846 [DEBUG] [Thread-129904] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T15:10:09.846 [DEBUG] [Thread-129904] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:10:09.846 [DEBUG] [Thread-129904] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:10:09.846 [DEBUG] [Thread-129904] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:10:09.846 [DEBUG] [Thread-129904] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:10:09.846 [DEBUG] [Thread-129904] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:10:09.846 [DEBUG] [Thread-129904] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:10:09.846 [DEBUG] [Thread-129904] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:10:09.846 [DEBUG] [Thread-129904] [transport.py] [_log()] client lang: <none>
2025-12-31T15:10:09.846 [DEBUG] [Thread-129904] [transport.py] [_log()] server lang: <none>
2025-12-31T15:10:09.847 [DEBUG] [Thread-129904] [transport.py] [_log()] kex follows: False
2025-12-31T15:10:09.847 [DEBUG] [Thread-129904] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:10:09.847 [DEBUG] [Thread-129904] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:10:09.847 [DEBUG] [Thread-129904] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:10:09.847 [DEBUG] [Thread-129904] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:10:09.847 [DEBUG] [Thread-129904] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:10:09.847 [DEBUG] [Thread-129904] [transport.py] [_log()] Compression: none
2025-12-31T15:10:09.847 [DEBUG] [Thread-129904] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:10:09.860 [DEBUG] [Thread-129904] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:10:09.861 [DEBUG] [Thread-129904] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:10:09.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T15:10:09.862 [DEBUG] [Thread-129904] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T15:10:09.863 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:10:09.865 [DEBUG] [Thread-129904] [transport.py] [_log()] userauth is OK
2025-12-31T15:10:09.865 [DEBUG] [Thread-129904] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:10:09.865 [DEBUG] [Thread-129904] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:10:09.865 [DEBUG] [Thread-129904] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T15:10:09.866 [DEBUG] [Thread-129904] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:10:09.888 [INFO] [Thread-129904] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:10:09.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:10:13.999 [DEBUG] [Thread-129904] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:10:14.008 [DEBUG] [Thread-129904] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:10:14.008 [DEBUG] [Thread-129904] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T15:10:14.040 [DEBUG] [Thread-129904] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:10:14.041 [DEBUG] [Thread-129904] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:10:14.043 [DEBUG] [Thread-129904] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:10:14.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:10:14.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T15:10:14.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T15:10:14.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T15:10:14.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:10:14.110 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T15:10:14.110 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:10:14.110 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:10:14.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T15:10:14.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.548058 -999.00  +26.20  26.49     16   -1.10 1 1 1 1 1   888    0 30.01 102.13 ----- 25.6 26.5 307.0 29.3 32.3 -26.1 32.1 -24.6 32.2 -23.5 32.9 -24.4
2025-12-31T15:10:14.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T15:10:14.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T15:10:14.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.548058
2025-12-31T15:10:14.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T15:10:14.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T15:10:14.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T15:10:14.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T15:10:14.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T15:10:14.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T15:10:01', tmtdew=33.39, humidity=10.78, cloud=0.0, wind=31.44, temperature=26.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T13:09:12.211', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T15:10:14.111 [DEBUG] [Thread-129904] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:10: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-12-31T15:10:14.196 [DEBUG] [Thread-129907] [transport.py] [_log()] starting thread (client mode): 0xb6b62890
2025-12-31T15:10:14.197 [DEBUG] [Thread-129907] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:10:14.211 [DEBUG] [Thread-129907] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T15:10:14.211 [INFO] [Thread-129907] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T15:10:14.219 [DEBUG] [Thread-129907] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:10:14.219 [DEBUG] [Thread-129907] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T15:10:14.219 [DEBUG] [Thread-129907] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:10:14.219 [DEBUG] [Thread-129907] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:10:14.219 [DEBUG] [Thread-129907] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:10:14.219 [DEBUG] [Thread-129907] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:10:14.219 [DEBUG] [Thread-129907] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:10:14.219 [DEBUG] [Thread-129907] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:10:14.219 [DEBUG] [Thread-129907] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:10:14.219 [DEBUG] [Thread-129907] [transport.py] [_log()] client lang: <none>
2025-12-31T15:10:14.219 [DEBUG] [Thread-129907] [transport.py] [_log()] server lang: <none>
2025-12-31T15:10:14.219 [DEBUG] [Thread-129907] [transport.py] [_log()] kex follows: False
2025-12-31T15:10:14.219 [DEBUG] [Thread-129907] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:10:14.219 [DEBUG] [Thread-129907] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:10:14.219 [DEBUG] [Thread-129907] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:10:14.219 [DEBUG] [Thread-129907] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:10:14.219 [DEBUG] [Thread-129907] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:10:14.219 [DEBUG] [Thread-129907] [transport.py] [_log()] Compression: none
2025-12-31T15:10:14.219 [DEBUG] [Thread-129907] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:10:14.275 [DEBUG] [Thread-129907] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:10:14.275 [DEBUG] [Thread-129907] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:10:14.275 [DEBUG] [Thread-129907] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T15:10:14.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T15:10:14.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:10:14.332 [DEBUG] [Thread-129907] [transport.py] [_log()] userauth is OK
2025-12-31T15:10:14.332 [DEBUG] [Thread-129907] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:10:14.332 [DEBUG] [Thread-129907] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:10:14.332 [DEBUG] [Thread-129907] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T15:10:14.332 [DEBUG] [Thread-129907] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:10:14.350 [INFO] [Thread-129907] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:10:14.350 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T15:10:14.350 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:10:15.167 [DEBUG] [Thread-129907] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:10:15.167 [DEBUG] [Thread-129907] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:10:15.214 [DEBUG] [Thread-129907] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:10:15.215 [DEBUG] [Thread-129907] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:10:15.223 [DEBUG] [Thread-129907] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:10:15.230 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:10:15.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T15:10:15.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T15:10:15.246 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:10:15.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:10:15.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:10:15.254 [DEBUG] [Thread-129907] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:10:20.641 [DEBUG] [Thread-129909 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:10:20.682 [DEBUG] [Thread-129870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:10:23.406 [DEBUG] [Thread-129910 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:10:38.459 [DEBUG] [Thread-129911 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:10:43.195 [DEBUG] [Thread-129870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:10:45.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T15:10:45.277 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T15:10:45.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T15:10:45.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 15, 10, 33), 34.02, 10.26, 0.0, 28.05, 27.64, 0, 0, 0, 2, 0, 0),)
2025-12-31T15:10:45.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 15:10:33
2025-12-31T15:10:46.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T15:10:46.262 [DEBUG] [Thread-129912] [transport.py] [_log()] starting thread (client mode): 0xb6bba320
2025-12-31T15:10:46.262 [DEBUG] [Thread-129912] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:10:46.281 [DEBUG] [Thread-129912] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T15:10:46.281 [INFO] [Thread-129912] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T15:10:46.284 [DEBUG] [Thread-129912] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:10:46.284 [DEBUG] [Thread-129912] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T15:10:46.284 [DEBUG] [Thread-129912] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:10:46.284 [DEBUG] [Thread-129912] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:10:46.284 [DEBUG] [Thread-129912] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:10:46.284 [DEBUG] [Thread-129912] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:10:46.284 [DEBUG] [Thread-129912] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:10:46.284 [DEBUG] [Thread-129912] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:10:46.284 [DEBUG] [Thread-129912] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:10:46.284 [DEBUG] [Thread-129912] [transport.py] [_log()] client lang: <none>
2025-12-31T15:10:46.285 [DEBUG] [Thread-129912] [transport.py] [_log()] server lang: <none>
2025-12-31T15:10:46.285 [DEBUG] [Thread-129912] [transport.py] [_log()] kex follows: False
2025-12-31T15:10:46.285 [DEBUG] [Thread-129912] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:10:46.285 [DEBUG] [Thread-129912] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:10:46.285 [DEBUG] [Thread-129912] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:10:46.285 [DEBUG] [Thread-129912] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:10:46.285 [DEBUG] [Thread-129912] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:10:46.285 [DEBUG] [Thread-129912] [transport.py] [_log()] Compression: none
2025-12-31T15:10:46.285 [DEBUG] [Thread-129912] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:10:46.304 [DEBUG] [Thread-129912] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:10:46.304 [DEBUG] [Thread-129912] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:10:46.305 [DEBUG] [Thread-129912] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T15:10:46.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T15:10:46.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:10:46.307 [DEBUG] [Thread-129912] [transport.py] [_log()] userauth is OK
2025-12-31T15:10:46.307 [DEBUG] [Thread-129912] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:10:46.307 [DEBUG] [Thread-129912] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:10:46.307 [DEBUG] [Thread-129912] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T15:10:46.307 [DEBUG] [Thread-129912] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:10:46.343 [INFO] [Thread-129912] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:10:46.344 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:10:46.960 [DEBUG] [Thread-129912] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:10:46.960 [DEBUG] [Thread-129912] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:10:46.961 [DEBUG] [Thread-129912] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T15:10:47.001 [DEBUG] [Thread-129912] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:10:47.001 [DEBUG] [Thread-129912] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:10:47.003 [DEBUG] [Thread-129912] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:10:47.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:10:47.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T15:10:47.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T15:10:47.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T15:10:47.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:10:47.022 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T15:10:47.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:10:47.022 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:10:47.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T15:10:47.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.548406 -999.00  +26.90  24.97     16   -0.50 1 1 1 1 1   888    0 29.84 105.33 ----- 25.0 25.0 296.4 32.0 32.4 -24.2 32.2 -23.9 32.5 -23.4 32.9 -23.6
2025-12-31T15:10:47.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T15:10:47.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T15:10:47.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.548406
2025-12-31T15:10:47.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T15:10:47.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T15:10:47.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T15:10:47.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T15:10:47.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T15:10:47.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T15:10:33', tmtdew=34.02, humidity=10.26, cloud=0.0, wind=28.05, temperature=27.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T13:09:42.278', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T15:10:47.023 [DEBUG] [Thread-129912] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:10:47.094 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T15:10:47.104 [DEBUG] [Thread-129915] [transport.py] [_log()] starting thread (client mode): 0xb6b2af20
2025-12-31T15:10:47.105 [DEBUG] [Thread-129915] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:10:47.118 [DEBUG] [Thread-129915] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T15:10:47.118 [INFO] [Thread-129915] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T15:10:47.126 [DEBUG] [Thread-129915] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:10:47.126 [DEBUG] [Thread-129915] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T15:10:47.127 [DEBUG] [Thread-129915] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:10:47.127 [DEBUG] [Thread-129915] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:10:47.127 [DEBUG] [Thread-129915] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:10:47.127 [DEBUG] [Thread-129915] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:10:47.127 [DEBUG] [Thread-129915] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:10:47.127 [DEBUG] [Thread-129915] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:10:47.127 [DEBUG] [Thread-129915] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:10:47.127 [DEBUG] [Thread-129915] [transport.py] [_log()] client lang: <none>
2025-12-31T15:10:47.127 [DEBUG] [Thread-129915] [transport.py] [_log()] server lang: <none>
2025-12-31T15:10:47.127 [DEBUG] [Thread-129915] [transport.py] [_log()] kex follows: False
2025-12-31T15:10:47.127 [DEBUG] [Thread-129915] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:10:47.128 [DEBUG] [Thread-129915] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:10:47.128 [DEBUG] [Thread-129915] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:10:47.128 [DEBUG] [Thread-129915] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:10:47.128 [DEBUG] [Thread-129915] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:10:47.128 [DEBUG] [Thread-129915] [transport.py] [_log()] Compression: none
2025-12-31T15:10:47.128 [DEBUG] [Thread-129915] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:10:47.183 [DEBUG] [Thread-129915] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:10:47.184 [DEBUG] [Thread-129915] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:10:47.185 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T15:10:47.185 [DEBUG] [Thread-129915] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T15:10:47.186 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:10:47.239 [DEBUG] [Thread-129915] [transport.py] [_log()] userauth is OK
2025-12-31T15:10:47.239 [DEBUG] [Thread-129915] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:10:47.240 [DEBUG] [Thread-129915] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:10:47.240 [DEBUG] [Thread-129915] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T15:10:47.240 [DEBUG] [Thread-129915] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:10:47.258 [INFO] [Thread-129915] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:10:47.259 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T15:10:47.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:10:48.099 [DEBUG] [Thread-129915] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:10:48.100 [DEBUG] [Thread-129915] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:10:48.150 [DEBUG] [Thread-129915] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:10:48.151 [DEBUG] [Thread-129915] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:10:48.163 [DEBUG] [Thread-129915] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:10:48.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:10:48.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T15:10:48.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T15:10:48.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:10:48.190 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:10:48.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:10:48.199 [DEBUG] [Thread-129915] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:10:53.493 [DEBUG] [Thread-129917 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:11:05.187 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:11:05.189 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:11:05.670 [DEBUG] [Thread-129870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:11:08.533 [DEBUG] [Thread-129918 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:11:18.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T15:11:18.221 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T15:11:18.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T15:11:18.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 15, 11, 6), 32.59, 11.18, 0.0, 28.59, 27.22, 0, 0, 0, 2, 0, 0),)
2025-12-31T15:11:18.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 15:11:06
2025-12-31T15:11:19.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T15:11:19.199 [DEBUG] [Thread-129919] [transport.py] [_log()] starting thread (client mode): 0xb6bb81f0
2025-12-31T15:11:19.199 [DEBUG] [Thread-129919] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:11:19.219 [DEBUG] [Thread-129919] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T15:11:19.219 [INFO] [Thread-129919] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T15:11:19.222 [DEBUG] [Thread-129919] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:11:19.223 [DEBUG] [Thread-129919] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T15:11:19.223 [DEBUG] [Thread-129919] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:11:19.223 [DEBUG] [Thread-129919] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:11:19.223 [DEBUG] [Thread-129919] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:11:19.223 [DEBUG] [Thread-129919] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:11:19.223 [DEBUG] [Thread-129919] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:11:19.223 [DEBUG] [Thread-129919] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:11:19.223 [DEBUG] [Thread-129919] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:11:19.223 [DEBUG] [Thread-129919] [transport.py] [_log()] client lang: <none>
2025-12-31T15:11:19.223 [DEBUG] [Thread-129919] [transport.py] [_log()] server lang: <none>
2025-12-31T15:11:19.223 [DEBUG] [Thread-129919] [transport.py] [_log()] kex follows: False
2025-12-31T15:11:19.223 [DEBUG] [Thread-129919] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:11:19.223 [DEBUG] [Thread-129919] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:11:19.223 [DEBUG] [Thread-129919] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:11:19.223 [DEBUG] [Thread-129919] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:11:19.223 [DEBUG] [Thread-129919] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:11:19.223 [DEBUG] [Thread-129919] [transport.py] [_log()] Compression: none
2025-12-31T15:11:19.223 [DEBUG] [Thread-129919] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:11:19.241 [DEBUG] [Thread-129919] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:11:19.242 [DEBUG] [Thread-129919] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:11:19.242 [DEBUG] [Thread-129919] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T15:11:19.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T15:11:19.243 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:11:19.244 [DEBUG] [Thread-129919] [transport.py] [_log()] userauth is OK
2025-12-31T15:11:19.244 [DEBUG] [Thread-129919] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:11:19.244 [DEBUG] [Thread-129919] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:11:19.244 [DEBUG] [Thread-129919] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T15:11:19.244 [DEBUG] [Thread-129919] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:11:19.262 [INFO] [Thread-129919] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:11:19.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:11:19.999 [DEBUG] [Thread-129919] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:11:20.000 [DEBUG] [Thread-129919] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:11:20.000 [DEBUG] [Thread-129919] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T15:11:20.040 [DEBUG] [Thread-129919] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:11:20.040 [DEBUG] [Thread-129919] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:11:20.042 [DEBUG] [Thread-129919] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:11:20.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:11:20.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T15:11:20.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T15:11:20.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T15:11:20.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:11:20.058 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T15:11:20.058 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:11:20.059 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:11:20.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T15:11:20.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.549100 -999.00  +26.90  22.12     17   +0.10 1 1 1 1 1   888    0 30.08 112.18 ----- 27.4 22.1 302.8 29.9 32.4 -25.7 32.3 -24.2 32.7 -23.4 33.1 -24.7
2025-12-31T15:11:20.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T15:11:20.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T15:11:20.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.549100
2025-12-31T15:11:20.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T15:11:20.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T15:11:20.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T15:11:20.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T15:11:20.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T15:11:20.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T15:11:06', tmtdew=32.59, humidity=11.18, cloud=0.0, wind=28.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-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T13:10:42.240', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T15:11:20.061 [DEBUG] [Thread-129919] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:11:20.144 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T15:11:20.157 [DEBUG] [Thread-129922] [transport.py] [_log()] starting thread (client mode): 0xb6b14490
2025-12-31T15:11:20.157 [DEBUG] [Thread-129922] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:11:20.172 [DEBUG] [Thread-129922] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T15:11:20.172 [INFO] [Thread-129922] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T15:11:20.180 [DEBUG] [Thread-129922] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:11:20.180 [DEBUG] [Thread-129922] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T15:11:20.180 [DEBUG] [Thread-129922] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:11:20.180 [DEBUG] [Thread-129922] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:11:20.180 [DEBUG] [Thread-129922] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:11:20.180 [DEBUG] [Thread-129922] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:11:20.180 [DEBUG] [Thread-129922] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:11:20.180 [DEBUG] [Thread-129922] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:11:20.180 [DEBUG] [Thread-129922] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:11:20.181 [DEBUG] [Thread-129922] [transport.py] [_log()] client lang: <none>
2025-12-31T15:11:20.181 [DEBUG] [Thread-129922] [transport.py] [_log()] server lang: <none>
2025-12-31T15:11:20.181 [DEBUG] [Thread-129922] [transport.py] [_log()] kex follows: False
2025-12-31T15:11:20.181 [DEBUG] [Thread-129922] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:11:20.181 [DEBUG] [Thread-129922] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:11:20.181 [DEBUG] [Thread-129922] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:11:20.181 [DEBUG] [Thread-129922] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:11:20.181 [DEBUG] [Thread-129922] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:11:20.181 [DEBUG] [Thread-129922] [transport.py] [_log()] Compression: none
2025-12-31T15:11:20.181 [DEBUG] [Thread-129922] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:11:20.237 [DEBUG] [Thread-129922] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:11:20.238 [DEBUG] [Thread-129922] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:11:20.238 [DEBUG] [Thread-129922] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T15:11:20.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T15:11:20.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:11:20.293 [DEBUG] [Thread-129922] [transport.py] [_log()] userauth is OK
2025-12-31T15:11:20.294 [DEBUG] [Thread-129922] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:11:20.294 [DEBUG] [Thread-129922] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:11:20.294 [DEBUG] [Thread-129922] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T15:11:20.294 [DEBUG] [Thread-129922] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:11:20.319 [INFO] [Thread-129922] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:11:20.320 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T15:11:20.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:11:20.681 [DEBUG] [Thread-129924 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:11:21.161 [DEBUG] [Thread-129922] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:11:21.161 [DEBUG] [Thread-129922] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:11:21.208 [DEBUG] [Thread-129922] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:11:21.208 [DEBUG] [Thread-129922] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:11:21.217 [DEBUG] [Thread-129922] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:11:21.225 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:11:21.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T15:11:21.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T15:11:21.243 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:11:21.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:11:21.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:11:21.252 [DEBUG] [Thread-129922] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:11:23.571 [DEBUG] [Thread-129925 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:11:28.179 [DEBUG] [Thread-129870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:11:38.616 [DEBUG] [Thread-129926 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:11:50.643 [DEBUG] [Thread-129870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:11:51.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T15:11:51.258 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T15:11:51.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T15:11:51.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 15, 11, 38), 31.95, 11.91, 0.0, 29.45, 26.62, 0, 0, 0, 2, 0, 0),)
2025-12-31T15:11:51.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 15:11:38
2025-12-31T15:11:52.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T15:11:52.232 [DEBUG] [Thread-129927] [transport.py] [_log()] starting thread (client mode): 0xb6bbf0d0
2025-12-31T15:11:52.232 [DEBUG] [Thread-129927] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:11:52.253 [DEBUG] [Thread-129927] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T15:11:52.253 [INFO] [Thread-129927] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T15:11:52.256 [DEBUG] [Thread-129927] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:11:52.256 [DEBUG] [Thread-129927] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T15:11:52.256 [DEBUG] [Thread-129927] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:11:52.256 [DEBUG] [Thread-129927] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:11:52.256 [DEBUG] [Thread-129927] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:11:52.256 [DEBUG] [Thread-129927] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:11:52.256 [DEBUG] [Thread-129927] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:11:52.256 [DEBUG] [Thread-129927] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:11:52.256 [DEBUG] [Thread-129927] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:11:52.256 [DEBUG] [Thread-129927] [transport.py] [_log()] client lang: <none>
2025-12-31T15:11:52.256 [DEBUG] [Thread-129927] [transport.py] [_log()] server lang: <none>
2025-12-31T15:11:52.256 [DEBUG] [Thread-129927] [transport.py] [_log()] kex follows: False
2025-12-31T15:11:52.256 [DEBUG] [Thread-129927] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:11:52.256 [DEBUG] [Thread-129927] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:11:52.256 [DEBUG] [Thread-129927] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:11:52.256 [DEBUG] [Thread-129927] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:11:52.256 [DEBUG] [Thread-129927] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:11:52.256 [DEBUG] [Thread-129927] [transport.py] [_log()] Compression: none
2025-12-31T15:11:52.256 [DEBUG] [Thread-129927] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:11:52.276 [DEBUG] [Thread-129927] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:11:52.276 [DEBUG] [Thread-129927] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:11:52.277 [DEBUG] [Thread-129927] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T15:11:52.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T15:11:52.278 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:11:52.279 [DEBUG] [Thread-129927] [transport.py] [_log()] userauth is OK
2025-12-31T15:11:52.279 [DEBUG] [Thread-129927] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:11:52.279 [DEBUG] [Thread-129927] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:11:52.279 [DEBUG] [Thread-129927] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T15:11:52.279 [DEBUG] [Thread-129927] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:11:52.301 [INFO] [Thread-129927] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:11:52.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:11:52.960 [DEBUG] [Thread-129927] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:11:52.961 [DEBUG] [Thread-129927] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:11:52.961 [DEBUG] [Thread-129927] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T15:11:53.002 [DEBUG] [Thread-129927] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:11:53.002 [DEBUG] [Thread-129927] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:11:53.005 [DEBUG] [Thread-129927] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:11:53.017 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:11:53.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T15:11:53.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T15:11:53.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T15:11:53.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:11:53.028 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T15:11:53.028 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:11:53.028 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:11:53.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T15:11:53.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.549447 -999.00  +26.30  34.89     17   +0.00 1 1 2 1 1   888    0 30.08 109.25 ----- 35.5 34.9 268.6 42.2 32.5 -25.3 32.1 -25.7 32.1 -26.6 33.1 -24.9
2025-12-31T15:11:53.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T15:11:53.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T15:11:53.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.549447
2025-12-31T15:11:53.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T15:11:53.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T15:11:53.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T15:11:53.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T15:11:53.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T15:11:53.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T15:11:38', tmtdew=31.95, humidity=11.91, cloud=0.0, wind=29.45, temperature=26.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T13:11:12.221', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T15:11:53.030 [DEBUG] [Thread-129927] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:11:53.113 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T15:11:53.125 [DEBUG] [Thread-129930] [transport.py] [_log()] starting thread (client mode): 0xb6ba39d0
2025-12-31T15:11:53.125 [DEBUG] [Thread-129930] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:11:53.140 [DEBUG] [Thread-129930] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T15:11:53.141 [INFO] [Thread-129930] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T15:11:53.148 [DEBUG] [Thread-129930] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:11:53.148 [DEBUG] [Thread-129930] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T15:11:53.148 [DEBUG] [Thread-129930] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:11:53.148 [DEBUG] [Thread-129930] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:11:53.149 [DEBUG] [Thread-129930] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:11:53.149 [DEBUG] [Thread-129930] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:11:53.149 [DEBUG] [Thread-129930] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:11:53.149 [DEBUG] [Thread-129930] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:11:53.149 [DEBUG] [Thread-129930] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:11:53.149 [DEBUG] [Thread-129930] [transport.py] [_log()] client lang: <none>
2025-12-31T15:11:53.149 [DEBUG] [Thread-129930] [transport.py] [_log()] server lang: <none>
2025-12-31T15:11:53.149 [DEBUG] [Thread-129930] [transport.py] [_log()] kex follows: False
2025-12-31T15:11:53.149 [DEBUG] [Thread-129930] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:11:53.150 [DEBUG] [Thread-129930] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:11:53.150 [DEBUG] [Thread-129930] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:11:53.150 [DEBUG] [Thread-129930] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:11:53.150 [DEBUG] [Thread-129930] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:11:53.150 [DEBUG] [Thread-129930] [transport.py] [_log()] Compression: none
2025-12-31T15:11:53.150 [DEBUG] [Thread-129930] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:11:53.208 [DEBUG] [Thread-129930] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:11:53.208 [DEBUG] [Thread-129930] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:11:53.209 [DEBUG] [Thread-129930] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T15:11:53.209 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T15:11:53.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:11:53.264 [DEBUG] [Thread-129930] [transport.py] [_log()] userauth is OK
2025-12-31T15:11:53.264 [DEBUG] [Thread-129930] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:11:53.264 [DEBUG] [Thread-129930] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:11:53.265 [DEBUG] [Thread-129930] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T15:11:53.265 [DEBUG] [Thread-129930] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:11:53.283 [INFO] [Thread-129930] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:11:53.284 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T15:11:53.284 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:11:53.651 [DEBUG] [Thread-129932 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:11:54.138 [DEBUG] [Thread-129930] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:11:54.138 [DEBUG] [Thread-129930] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:11:54.186 [DEBUG] [Thread-129930] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:11:54.186 [DEBUG] [Thread-129930] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:11:54.196 [DEBUG] [Thread-129930] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:11:54.205 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:11:54.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T15:11:54.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T15:11:54.225 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:11:54.226 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:11:54.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:11:54.234 [DEBUG] [Thread-129930] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:12:05.329 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:12:05.330 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:12:08.704 [DEBUG] [Thread-129933 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:12:13.072 [DEBUG] [Thread-129870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:12:20.723 [DEBUG] [Thread-129934 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:12:23.739 [DEBUG] [Thread-129935 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:12:24.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T15:12:24.250 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T15:12: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-12-31T15:12:24.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 15, 12, 10), 31.68, 12.18, 0.0, 28.64, 26.8, 0, 0, 0, 2, 0, 0),)
2025-12-31T15:12:24.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 15:12:10
2025-12-31T15:12:25.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T15:12:25.230 [DEBUG] [Thread-129936] [transport.py] [_log()] starting thread (client mode): 0xb95d4550
2025-12-31T15:12:25.230 [DEBUG] [Thread-129936] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:12:25.252 [DEBUG] [Thread-129936] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T15:12:25.252 [INFO] [Thread-129936] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T15:12:25.255 [DEBUG] [Thread-129936] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:12:25.255 [DEBUG] [Thread-129936] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T15:12:25.255 [DEBUG] [Thread-129936] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:12:25.255 [DEBUG] [Thread-129936] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:12:25.255 [DEBUG] [Thread-129936] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:12:25.255 [DEBUG] [Thread-129936] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:12:25.255 [DEBUG] [Thread-129936] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:12:25.255 [DEBUG] [Thread-129936] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:12:25.255 [DEBUG] [Thread-129936] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:12:25.255 [DEBUG] [Thread-129936] [transport.py] [_log()] client lang: <none>
2025-12-31T15:12:25.255 [DEBUG] [Thread-129936] [transport.py] [_log()] server lang: <none>
2025-12-31T15:12:25.255 [DEBUG] [Thread-129936] [transport.py] [_log()] kex follows: False
2025-12-31T15:12:25.255 [DEBUG] [Thread-129936] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:12:25.255 [DEBUG] [Thread-129936] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:12:25.255 [DEBUG] [Thread-129936] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:12:25.255 [DEBUG] [Thread-129936] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:12:25.255 [DEBUG] [Thread-129936] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:12:25.255 [DEBUG] [Thread-129936] [transport.py] [_log()] Compression: none
2025-12-31T15:12:25.255 [DEBUG] [Thread-129936] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:12:25.272 [DEBUG] [Thread-129936] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:12:25.273 [DEBUG] [Thread-129936] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:12:25.273 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T15:12:25.274 [DEBUG] [Thread-129936] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T15:12:25.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:12:25.276 [DEBUG] [Thread-129936] [transport.py] [_log()] userauth is OK
2025-12-31T15:12:25.276 [DEBUG] [Thread-129936] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:12:25.276 [DEBUG] [Thread-129936] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:12:25.276 [DEBUG] [Thread-129936] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T15:12:25.276 [DEBUG] [Thread-129936] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:12:25.293 [INFO] [Thread-129936] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:12:25.294 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:12:26.045 [DEBUG] [Thread-129936] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:12:26.046 [DEBUG] [Thread-129936] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:12:26.046 [DEBUG] [Thread-129936] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T15:12:26.087 [DEBUG] [Thread-129936] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:12:26.087 [DEBUG] [Thread-129936] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:12:26.090 [DEBUG] [Thread-129936] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:12:26.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:12:26.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T15:12:26.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T15:12:26.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T15:12:26.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:12:26.103 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T15:12:26.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:12:26.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:12:26.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T15:12:26.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.549794 -999.00  +25.70  24.72     18   +0.00 1 1 1 1 1   888    0 30.18 106.96 ----- 28.5 24.7 267.8 36.4 31.9 -27.6 31.9 -25.5 31.6 -27.8 32.6 -27.3
2025-12-31T15:12:26.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T15:12:26.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T15:12:26.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.549794
2025-12-31T15:12:26.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T15:12:26.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T15:12:26.105 [DEBUG] [Thread-129936] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:12:26.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T15:12:26.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T15:12:26.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T15:12:26.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T15:12:10', tmtdew=31.68, humidity=12.18, cloud=0.0, wind=28.64, temperature=26.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T13:11:42.202', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T15:12:26.196 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T15:12:26.207 [DEBUG] [Thread-129939] [transport.py] [_log()] starting thread (client mode): 0xb6b2a440
2025-12-31T15:12:26.208 [DEBUG] [Thread-129939] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:12:26.222 [DEBUG] [Thread-129939] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T15:12:26.222 [INFO] [Thread-129939] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T15:12:26.230 [DEBUG] [Thread-129939] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:12:26.230 [DEBUG] [Thread-129939] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T15:12:26.230 [DEBUG] [Thread-129939] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:12:26.230 [DEBUG] [Thread-129939] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:12:26.230 [DEBUG] [Thread-129939] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:12:26.230 [DEBUG] [Thread-129939] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:12:26.230 [DEBUG] [Thread-129939] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:12:26.230 [DEBUG] [Thread-129939] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:12:26.230 [DEBUG] [Thread-129939] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:12:26.230 [DEBUG] [Thread-129939] [transport.py] [_log()] client lang: <none>
2025-12-31T15:12:26.230 [DEBUG] [Thread-129939] [transport.py] [_log()] server lang: <none>
2025-12-31T15:12:26.230 [DEBUG] [Thread-129939] [transport.py] [_log()] kex follows: False
2025-12-31T15:12:26.230 [DEBUG] [Thread-129939] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:12:26.231 [DEBUG] [Thread-129939] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:12:26.231 [DEBUG] [Thread-129939] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:12:26.231 [DEBUG] [Thread-129939] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:12:26.231 [DEBUG] [Thread-129939] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:12:26.231 [DEBUG] [Thread-129939] [transport.py] [_log()] Compression: none
2025-12-31T15:12:26.231 [DEBUG] [Thread-129939] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:12:26.290 [DEBUG] [Thread-129939] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:12:26.291 [DEBUG] [Thread-129939] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:12:26.291 [DEBUG] [Thread-129939] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T15:12:26.292 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T15:12:26.292 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:12:26.346 [DEBUG] [Thread-129939] [transport.py] [_log()] userauth is OK
2025-12-31T15:12:26.346 [DEBUG] [Thread-129939] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:12:26.346 [DEBUG] [Thread-129939] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:12:26.346 [DEBUG] [Thread-129939] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T15:12:26.346 [DEBUG] [Thread-129939] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:12:26.364 [INFO] [Thread-129939] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:12:26.364 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T15:12:26.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:12:27.211 [DEBUG] [Thread-129939] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:12:27.211 [DEBUG] [Thread-129939] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:12:27.260 [DEBUG] [Thread-129939] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:12:27.260 [DEBUG] [Thread-129939] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:12:27.269 [DEBUG] [Thread-129939] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:12:27.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:12:27.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T15:12: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-12-31T15:12:27.300 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:12:27.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:12:27.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:12:27.309 [DEBUG] [Thread-129939] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:12:35.544 [DEBUG] [Thread-129870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:12:38.779 [DEBUG] [Thread-129941 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:12:53.831 [DEBUG] [Thread-129942 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:12:57.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T15:12:57.324 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T15:12: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-12-31T15:12:57.967 [DEBUG] [Thread-129870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:12:58.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 15, 12, 42), 31.38, 12.23, 0.0, 29.15, 26.83, 0, 0, 0, 2, 0, 0),)
2025-12-31T15:12:58.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 15:12:42
2025-12-31T15:12:58.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T15:12:58.308 [DEBUG] [Thread-129943] [transport.py] [_log()] starting thread (client mode): 0xb95f14e0
2025-12-31T15:12:58.308 [DEBUG] [Thread-129943] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:12:58.329 [DEBUG] [Thread-129943] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T15:12:58.329 [INFO] [Thread-129943] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T15:12:58.332 [DEBUG] [Thread-129943] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:12:58.332 [DEBUG] [Thread-129943] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T15:12:58.332 [DEBUG] [Thread-129943] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:12:58.332 [DEBUG] [Thread-129943] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:12:58.332 [DEBUG] [Thread-129943] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:12:58.332 [DEBUG] [Thread-129943] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:12:58.332 [DEBUG] [Thread-129943] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:12:58.332 [DEBUG] [Thread-129943] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:12:58.332 [DEBUG] [Thread-129943] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:12:58.332 [DEBUG] [Thread-129943] [transport.py] [_log()] client lang: <none>
2025-12-31T15:12:58.332 [DEBUG] [Thread-129943] [transport.py] [_log()] server lang: <none>
2025-12-31T15:12:58.332 [DEBUG] [Thread-129943] [transport.py] [_log()] kex follows: False
2025-12-31T15:12:58.332 [DEBUG] [Thread-129943] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:12:58.332 [DEBUG] [Thread-129943] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:12:58.333 [DEBUG] [Thread-129943] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:12:58.333 [DEBUG] [Thread-129943] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:12:58.333 [DEBUG] [Thread-129943] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:12:58.333 [DEBUG] [Thread-129943] [transport.py] [_log()] Compression: none
2025-12-31T15:12:58.333 [DEBUG] [Thread-129943] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:12:58.351 [DEBUG] [Thread-129943] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:12:58.352 [DEBUG] [Thread-129943] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:12:58.352 [DEBUG] [Thread-129943] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T15:12:58.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T15:12:58.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:12:58.354 [DEBUG] [Thread-129943] [transport.py] [_log()] userauth is OK
2025-12-31T15:12:58.354 [DEBUG] [Thread-129943] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:12:58.355 [DEBUG] [Thread-129943] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:12:58.355 [DEBUG] [Thread-129943] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T15:12:58.355 [DEBUG] [Thread-129943] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:12:58.378 [INFO] [Thread-129943] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:12:58.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:12:59.016 [DEBUG] [Thread-129943] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:12:59.016 [DEBUG] [Thread-129943] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:12:59.016 [DEBUG] [Thread-129943] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T15:12:59.057 [DEBUG] [Thread-129943] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:12:59.057 [DEBUG] [Thread-129943] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:12:59.060 [DEBUG] [Thread-129943] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:12:59.074 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:12:59.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T15:12:59.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T15:12:59.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T15:12:59.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:12:59.086 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T15:12:59.087 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:12:59.087 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:12:59.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T15:12:59.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.550142 -999.00  +26.10  19.43     18   +0.30 1 1 1 1 1   888    0 29.56 98.50 ----- 20.8 19.4 296.8 28.8 31.8 -27.4 31.9 -24.5 31.9 -23.2 32.4 -27.9
2025-12-31T15:12:59.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T15:12:59.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T15:12:59.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.550142
2025-12-31T15:12:59.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T15:12:59.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T15:12:59.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T15:12:59.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T15:12:59.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T15:12:59.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T15:12:42', tmtdew=31.38, humidity=12.23, cloud=0.0, wind=29.15, temperature=26.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T13:12:12.269', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T15:12:59.089 [DEBUG] [Thread-129943] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:12:59.174 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T15:12:59.186 [DEBUG] [Thread-129946] [transport.py] [_log()] starting thread (client mode): 0xb95f3730
2025-12-31T15:12:59.186 [DEBUG] [Thread-129946] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:12:59.201 [DEBUG] [Thread-129946] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T15:12:59.201 [INFO] [Thread-129946] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T15:12:59.209 [DEBUG] [Thread-129946] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:12:59.209 [DEBUG] [Thread-129946] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T15:12:59.209 [DEBUG] [Thread-129946] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:12:59.209 [DEBUG] [Thread-129946] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:12:59.209 [DEBUG] [Thread-129946] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:12:59.209 [DEBUG] [Thread-129946] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:12:59.209 [DEBUG] [Thread-129946] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:12:59.210 [DEBUG] [Thread-129946] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:12:59.210 [DEBUG] [Thread-129946] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:12:59.210 [DEBUG] [Thread-129946] [transport.py] [_log()] client lang: <none>
2025-12-31T15:12:59.210 [DEBUG] [Thread-129946] [transport.py] [_log()] server lang: <none>
2025-12-31T15:12:59.210 [DEBUG] [Thread-129946] [transport.py] [_log()] kex follows: False
2025-12-31T15:12:59.210 [DEBUG] [Thread-129946] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:12:59.210 [DEBUG] [Thread-129946] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:12:59.210 [DEBUG] [Thread-129946] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:12:59.210 [DEBUG] [Thread-129946] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:12:59.210 [DEBUG] [Thread-129946] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:12:59.210 [DEBUG] [Thread-129946] [transport.py] [_log()] Compression: none
2025-12-31T15:12:59.210 [DEBUG] [Thread-129946] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:12:59.269 [DEBUG] [Thread-129946] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:12:59.269 [DEBUG] [Thread-129946] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:12:59.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T15:12:59.271 [DEBUG] [Thread-129946] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T15:12:59.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:12:59.325 [DEBUG] [Thread-129946] [transport.py] [_log()] userauth is OK
2025-12-31T15:12:59.325 [DEBUG] [Thread-129946] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:12:59.325 [DEBUG] [Thread-129946] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:12:59.325 [DEBUG] [Thread-129946] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T15:12:59.325 [DEBUG] [Thread-129946] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:12:59.344 [INFO] [Thread-129946] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:12:59.344 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T15:12:59.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:13:00.169 [DEBUG] [Thread-129946] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:13:00.170 [DEBUG] [Thread-129946] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:13:00.217 [DEBUG] [Thread-129946] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:13:00.217 [DEBUG] [Thread-129946] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:13:00.226 [DEBUG] [Thread-129946] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:13:00.235 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:13:00.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T15:13:00.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T15:13:00.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:13:00.254 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:13:00.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:13:00.263 [DEBUG] [Thread-129946] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:13:05.470 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:13:05.471 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:13:08.868 [DEBUG] [Thread-129948 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:13:20.431 [DEBUG] [Thread-129870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:13:20.756 [DEBUG] [Thread-129949 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:13:21.570 [DEBUG] [Thread-129870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:13:23.919 [DEBUG] [Thread-129950 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:13:23.969 [DEBUG] [Thread-129870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:13:24.332 [DEBUG] [Thread-129870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:13:24.708 [DEBUG] [Thread-129870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:13:26.087 [DEBUG] [Thread-129870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:13:26.470 [DEBUG] [Thread-129870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:13:27.849 [DEBUG] [Thread-129870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:13:28.244 [DEBUG] [Thread-129870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:13:28.613 [DEBUG] [Thread-129870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:13:29.991 [DEBUG] [Thread-129870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:13:30.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T15:13:30.285 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T15:13:30.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T15:13:30.342 [DEBUG] [Thread-129870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:13:31.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 15, 13, 14), 31.72, 11.98, 0.0, 32.85, 27.05, 0, 0, 0, 2, 0, 0),)
2025-12-31T15:13:31.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 15:13:14
2025-12-31T15:13:31.083 [DEBUG] [Thread-129870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:13:31.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T15:13:31.330 [DEBUG] [Thread-129951] [transport.py] [_log()] starting thread (client mode): 0xbbfcf0d0
2025-12-31T15:13:31.331 [DEBUG] [Thread-129951] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:13:31.350 [DEBUG] [Thread-129951] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T15:13:31.350 [INFO] [Thread-129951] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T15:13:31.353 [DEBUG] [Thread-129951] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:13:31.353 [DEBUG] [Thread-129951] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T15:13:31.353 [DEBUG] [Thread-129951] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:13:31.353 [DEBUG] [Thread-129951] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:13:31.353 [DEBUG] [Thread-129951] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:13:31.353 [DEBUG] [Thread-129951] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:13:31.353 [DEBUG] [Thread-129951] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:13:31.353 [DEBUG] [Thread-129951] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:13:31.353 [DEBUG] [Thread-129951] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:13:31.353 [DEBUG] [Thread-129951] [transport.py] [_log()] client lang: <none>
2025-12-31T15:13:31.353 [DEBUG] [Thread-129951] [transport.py] [_log()] server lang: <none>
2025-12-31T15:13:31.353 [DEBUG] [Thread-129951] [transport.py] [_log()] kex follows: False
2025-12-31T15:13:31.353 [DEBUG] [Thread-129951] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:13:31.353 [DEBUG] [Thread-129951] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:13:31.353 [DEBUG] [Thread-129951] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:13:31.353 [DEBUG] [Thread-129951] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:13:31.353 [DEBUG] [Thread-129951] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:13:31.353 [DEBUG] [Thread-129951] [transport.py] [_log()] Compression: none
2025-12-31T15:13:31.353 [DEBUG] [Thread-129951] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:13:31.369 [DEBUG] [Thread-129951] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:13:31.369 [DEBUG] [Thread-129951] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:13:31.369 [DEBUG] [Thread-129951] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T15:13:31.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T15:13:31.370 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:13:31.370 [DEBUG] [Thread-129951] [transport.py] [_log()] userauth is OK
2025-12-31T15:13:31.370 [DEBUG] [Thread-129951] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:13:31.370 [DEBUG] [Thread-129951] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:13:31.370 [DEBUG] [Thread-129951] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T15:13:31.370 [DEBUG] [Thread-129951] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:13:31.383 [INFO] [Thread-129951] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:13:31.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:13:32.125 [DEBUG] [Thread-129951] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:13:32.125 [DEBUG] [Thread-129951] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:13:32.126 [DEBUG] [Thread-129951] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T15:13:32.166 [DEBUG] [Thread-129951] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:13:32.166 [DEBUG] [Thread-129951] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:13:32.169 [DEBUG] [Thread-129951] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:13:32.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:13:32.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T15:13:32.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T15:13:32.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T15:13:32.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:13:32.191 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T15:13:32.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:13:32.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:13:32.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T15:13:32.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.550489 -999.00  +26.20  34.30     18   +0.10 1 1 2 1 1   888    0 29.90 95.15 ----- 36.2 34.3 297.8 39.4 32.2 -24.7 31.9 -25.9 32.0 -26.6 32.7 -24.1
2025-12-31T15:13:32.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T15:13:32.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T15:13:32.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.550489
2025-12-31T15:13:32.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T15:13:32.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T15:13:32.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T15:13:32.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T15:13:32.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T15:13:32.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T15:13:14', tmtdew=31.72, humidity=11.98, cloud=0.0, wind=32.85, temperature=27.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T13:12:42.250', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T15:13:32.193 [DEBUG] [Thread-129951] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:13: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-12-31T15:13:32.288 [DEBUG] [Thread-129954] [transport.py] [_log()] starting thread (client mode): 0xb95b3a90
2025-12-31T15:13:32.288 [DEBUG] [Thread-129954] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:13:32.303 [DEBUG] [Thread-129954] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T15:13:32.303 [INFO] [Thread-129954] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T15:13:32.311 [DEBUG] [Thread-129954] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:13:32.311 [DEBUG] [Thread-129954] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T15:13:32.311 [DEBUG] [Thread-129954] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:13:32.311 [DEBUG] [Thread-129954] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:13:32.311 [DEBUG] [Thread-129954] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:13:32.311 [DEBUG] [Thread-129954] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:13:32.311 [DEBUG] [Thread-129954] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:13:32.311 [DEBUG] [Thread-129954] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:13:32.312 [DEBUG] [Thread-129954] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:13:32.312 [DEBUG] [Thread-129954] [transport.py] [_log()] client lang: <none>
2025-12-31T15:13:32.312 [DEBUG] [Thread-129954] [transport.py] [_log()] server lang: <none>
2025-12-31T15:13:32.312 [DEBUG] [Thread-129954] [transport.py] [_log()] kex follows: False
2025-12-31T15:13:32.312 [DEBUG] [Thread-129954] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:13:32.312 [DEBUG] [Thread-129954] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:13:32.312 [DEBUG] [Thread-129954] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:13:32.312 [DEBUG] [Thread-129954] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:13:32.312 [DEBUG] [Thread-129954] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:13:32.313 [DEBUG] [Thread-129954] [transport.py] [_log()] Compression: none
2025-12-31T15:13:32.313 [DEBUG] [Thread-129954] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:13:32.367 [DEBUG] [Thread-129954] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:13:32.367 [DEBUG] [Thread-129954] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:13:32.367 [DEBUG] [Thread-129954] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T15:13:32.368 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T15:13:32.368 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:13:32.423 [DEBUG] [Thread-129954] [transport.py] [_log()] userauth is OK
2025-12-31T15:13:32.423 [DEBUG] [Thread-129954] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:13:32.423 [DEBUG] [Thread-129954] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:13:32.423 [DEBUG] [Thread-129954] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T15:13:32.423 [DEBUG] [Thread-129954] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:13:32.442 [INFO] [Thread-129954] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:13:32.443 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T15:13:32.443 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:13:33.269 [DEBUG] [Thread-129954] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:13:33.269 [DEBUG] [Thread-129954] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:13:33.316 [DEBUG] [Thread-129954] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:13:33.317 [DEBUG] [Thread-129954] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:13:33.325 [DEBUG] [Thread-129954] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:13:33.334 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:13:33.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T15:13:33.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T15:13:33.351 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:13:33.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:13:33.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:13:33.359 [DEBUG] [Thread-129954] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:13:38.951 [DEBUG] [Thread-129956 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:13:39.506 [DEBUG] [Thread-129870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:13:45.996 [DEBUG] [Thread-129870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:13:52.544 [DEBUG] [Thread-129870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:13:54.005 [DEBUG] [Thread-129957 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:13:58.978 [DEBUG] [Thread-129870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:14:03.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T15:14:03.382 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T15:14:03.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T15:14:04.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 15, 13, 46), 32.9, 11.13, 0.0, 36.68, 27.45, 0, 0, 0, 2, 0, 0),)
2025-12-31T15:14:04.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 15:13:46
2025-12-31T15:14:04.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T15:14:04.374 [DEBUG] [Thread-129958] [transport.py] [_log()] starting thread (client mode): 0xb95d7940
2025-12-31T15:14:04.374 [DEBUG] [Thread-129958] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:14:04.394 [DEBUG] [Thread-129958] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T15:14:04.394 [INFO] [Thread-129958] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T15:14:04.397 [DEBUG] [Thread-129958] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:14:04.397 [DEBUG] [Thread-129958] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T15:14:04.397 [DEBUG] [Thread-129958] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:14:04.397 [DEBUG] [Thread-129958] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:14:04.397 [DEBUG] [Thread-129958] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:14:04.397 [DEBUG] [Thread-129958] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:14:04.397 [DEBUG] [Thread-129958] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:14:04.397 [DEBUG] [Thread-129958] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:14:04.397 [DEBUG] [Thread-129958] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:14:04.397 [DEBUG] [Thread-129958] [transport.py] [_log()] client lang: <none>
2025-12-31T15:14:04.397 [DEBUG] [Thread-129958] [transport.py] [_log()] server lang: <none>
2025-12-31T15:14:04.397 [DEBUG] [Thread-129958] [transport.py] [_log()] kex follows: False
2025-12-31T15:14:04.397 [DEBUG] [Thread-129958] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:14:04.397 [DEBUG] [Thread-129958] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:14:04.397 [DEBUG] [Thread-129958] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:14:04.397 [DEBUG] [Thread-129958] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:14:04.397 [DEBUG] [Thread-129958] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:14:04.397 [DEBUG] [Thread-129958] [transport.py] [_log()] Compression: none
2025-12-31T15:14:04.397 [DEBUG] [Thread-129958] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:14:04.414 [DEBUG] [Thread-129958] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:14:04.414 [DEBUG] [Thread-129958] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:14:04.414 [DEBUG] [Thread-129958] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T15:14:04.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T15:14:04.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:14:04.416 [DEBUG] [Thread-129958] [transport.py] [_log()] userauth is OK
2025-12-31T15:14:04.416 [DEBUG] [Thread-129958] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:14:04.417 [DEBUG] [Thread-129958] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:14:04.417 [DEBUG] [Thread-129958] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T15:14:04.417 [DEBUG] [Thread-129958] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:14:04.437 [INFO] [Thread-129958] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:14:04.438 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:14:05.051 [DEBUG] [Thread-129958] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:14:05.051 [DEBUG] [Thread-129958] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:14:05.051 [DEBUG] [Thread-129958] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T15:14:05.091 [DEBUG] [Thread-129958] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:14:05.091 [DEBUG] [Thread-129958] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:14:05.094 [DEBUG] [Thread-129958] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:14:05.107 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:14:05.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T15:14:05.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T15:14:05.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T15:14:05.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:14:05.112 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T15:14:05.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:14:05.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:14:05.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T15:14:05.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.550836 -999.00  +26.70  38.20     17   -0.20 1 1 2 1 1   888    0 29.89 90.95 ----- 39.0 38.2 306.9 45.8 32.0 -25.6 31.8 -24.5 32.0 -22.4 32.6 -25.1
2025-12-31T15:14:05.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T15:14:05.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T15:14:05.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.550836
2025-12-31T15:14:05.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T15:14:05.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T15:14:05.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T15:14:05.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T15:14:05.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T15:14:05.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T15:13:46', tmtdew=32.9, humidity=11.13, cloud=0.0, wind=36.68, temperature=27.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T13:13:12.230', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T15:14:05.113 [DEBUG] [Thread-129958] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:14: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-12-31T15:14:05.199 [DEBUG] [Thread-129961] [transport.py] [_log()] starting thread (client mode): 0xb6b17550
2025-12-31T15:14:05.199 [DEBUG] [Thread-129961] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:14:05.213 [DEBUG] [Thread-129961] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T15:14:05.213 [INFO] [Thread-129961] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T15:14:05.220 [DEBUG] [Thread-129961] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:14:05.220 [DEBUG] [Thread-129961] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T15:14:05.221 [DEBUG] [Thread-129961] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:14:05.221 [DEBUG] [Thread-129961] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:14:05.221 [DEBUG] [Thread-129961] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:14:05.221 [DEBUG] [Thread-129961] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:14:05.221 [DEBUG] [Thread-129961] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:14:05.221 [DEBUG] [Thread-129961] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:14:05.221 [DEBUG] [Thread-129961] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:14:05.221 [DEBUG] [Thread-129961] [transport.py] [_log()] client lang: <none>
2025-12-31T15:14:05.221 [DEBUG] [Thread-129961] [transport.py] [_log()] server lang: <none>
2025-12-31T15:14:05.221 [DEBUG] [Thread-129961] [transport.py] [_log()] kex follows: False
2025-12-31T15:14:05.221 [DEBUG] [Thread-129961] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:14:05.221 [DEBUG] [Thread-129961] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:14:05.221 [DEBUG] [Thread-129961] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:14:05.221 [DEBUG] [Thread-129961] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:14:05.221 [DEBUG] [Thread-129961] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:14:05.221 [DEBUG] [Thread-129961] [transport.py] [_log()] Compression: none
2025-12-31T15:14:05.221 [DEBUG] [Thread-129961] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:14:05.276 [DEBUG] [Thread-129961] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:14:05.276 [DEBUG] [Thread-129961] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:14:05.276 [DEBUG] [Thread-129961] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T15:14:05.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T15:14:05.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:14:05.338 [DEBUG] [Thread-129961] [transport.py] [_log()] userauth is OK
2025-12-31T15:14:05.338 [DEBUG] [Thread-129961] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:14:05.338 [DEBUG] [Thread-129961] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:14:05.338 [DEBUG] [Thread-129961] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T15:14:05.338 [DEBUG] [Thread-129961] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:14:05.352 [INFO] [Thread-129961] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:14:05.352 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T15:14:05.352 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:14:05.440 [DEBUG] [Thread-129870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:14:05.611 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:14:05.612 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:14:06.171 [DEBUG] [Thread-129961] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:14:06.171 [DEBUG] [Thread-129961] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:14:06.219 [DEBUG] [Thread-129961] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:14:06.219 [DEBUG] [Thread-129961] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:14:06.228 [DEBUG] [Thread-129961] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:14:06.236 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:14:06.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T15:14:06.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T15:14:06.252 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:14:06.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:14:06.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:14:06.260 [DEBUG] [Thread-129961] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:14:09.036 [DEBUG] [Thread-129963 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:14:11.831 [DEBUG] [Thread-129870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:14:18.310 [DEBUG] [Thread-129870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:14:20.800 [DEBUG] [Thread-129964 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:14:24.075 [DEBUG] [Thread-129965 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:14:24.773 [DEBUG] [Thread-129870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:14:31.165 [DEBUG] [Thread-129870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:14:36.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T15:14:36.277 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T15:14:36.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-12-31T15:14:36.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 15, 14, 18), 33.07, 10.98, 0.0, 40.02, 27.36, 0, 0, 0, 2, 0, 0),)
2025-12-31T15:14:36.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 15:14:18
2025-12-31T15:14:37.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T15:14:37.266 [DEBUG] [Thread-129966] [transport.py] [_log()] starting thread (client mode): 0xb6b165f0
2025-12-31T15:14:37.266 [DEBUG] [Thread-129966] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:14:37.289 [DEBUG] [Thread-129966] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T15:14:37.289 [INFO] [Thread-129966] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T15:14:37.292 [DEBUG] [Thread-129966] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:14:37.292 [DEBUG] [Thread-129966] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T15:14:37.292 [DEBUG] [Thread-129966] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:14:37.292 [DEBUG] [Thread-129966] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:14:37.292 [DEBUG] [Thread-129966] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:14:37.292 [DEBUG] [Thread-129966] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:14:37.292 [DEBUG] [Thread-129966] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:14:37.292 [DEBUG] [Thread-129966] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:14:37.293 [DEBUG] [Thread-129966] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:14:37.293 [DEBUG] [Thread-129966] [transport.py] [_log()] client lang: <none>
2025-12-31T15:14:37.293 [DEBUG] [Thread-129966] [transport.py] [_log()] server lang: <none>
2025-12-31T15:14:37.293 [DEBUG] [Thread-129966] [transport.py] [_log()] kex follows: False
2025-12-31T15:14:37.293 [DEBUG] [Thread-129966] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:14:37.293 [DEBUG] [Thread-129966] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:14:37.293 [DEBUG] [Thread-129966] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:14:37.293 [DEBUG] [Thread-129966] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:14:37.293 [DEBUG] [Thread-129966] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:14:37.293 [DEBUG] [Thread-129966] [transport.py] [_log()] Compression: none
2025-12-31T15:14:37.293 [DEBUG] [Thread-129966] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:14:37.312 [DEBUG] [Thread-129966] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:14:37.313 [DEBUG] [Thread-129966] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:14:37.313 [DEBUG] [Thread-129966] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T15:14:37.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T15:14:37.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:14:37.317 [DEBUG] [Thread-129966] [transport.py] [_log()] userauth is OK
2025-12-31T15:14:37.317 [DEBUG] [Thread-129966] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:14:37.317 [DEBUG] [Thread-129966] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:14:37.317 [DEBUG] [Thread-129966] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T15:14:37.317 [DEBUG] [Thread-129966] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:14:37.338 [INFO] [Thread-129966] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:14:37.339 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:14:37.557 [DEBUG] [Thread-129870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:14:38.098 [DEBUG] [Thread-129966] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:14:38.099 [DEBUG] [Thread-129966] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:14:38.099 [DEBUG] [Thread-129966] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T15:14:38.140 [DEBUG] [Thread-129966] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:14:38.140 [DEBUG] [Thread-129966] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:14:38.144 [DEBUG] [Thread-129966] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:14:38.148 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:14:38.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T15:14:38.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T15:14:38.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T15:14:38.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:14:38.160 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T15:14:38.160 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:14:38.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:14:38.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T15:14:38.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.551183 -999.00  +26.90  32.18     16   -0.60 1 1 2 1 1   888    0 30.11 93.35 ----- 32.0 32.2 295.6 41.9 32.0 -25.8 31.8 -24.9 32.1 -22.6 32.6 -24.8
2025-12-31T15:14:38.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T15:14:38.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T15:14:38.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.551183
2025-12-31T15:14:38.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T15:14:38.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T15:14:38.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T15:14:38.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T15:14:38.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T15:14:38.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T15:14:18', tmtdew=33.07, humidity=10.98, cloud=0.0, wind=40.02, temperature=27.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T13:13:42.211', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T15:14:38.163 [DEBUG] [Thread-129966] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:14:38.253 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T15:14:38.266 [DEBUG] [Thread-129969] [transport.py] [_log()] starting thread (client mode): 0xb95d4670
2025-12-31T15:14:38.266 [DEBUG] [Thread-129969] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:14:38.281 [DEBUG] [Thread-129969] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T15:14:38.281 [INFO] [Thread-129969] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T15:14:38.289 [DEBUG] [Thread-129969] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:14:38.289 [DEBUG] [Thread-129969] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T15:14:38.289 [DEBUG] [Thread-129969] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:14:38.289 [DEBUG] [Thread-129969] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:14:38.290 [DEBUG] [Thread-129969] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:14:38.290 [DEBUG] [Thread-129969] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:14:38.290 [DEBUG] [Thread-129969] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:14:38.290 [DEBUG] [Thread-129969] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:14:38.290 [DEBUG] [Thread-129969] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:14:38.290 [DEBUG] [Thread-129969] [transport.py] [_log()] client lang: <none>
2025-12-31T15:14:38.290 [DEBUG] [Thread-129969] [transport.py] [_log()] server lang: <none>
2025-12-31T15:14:38.290 [DEBUG] [Thread-129969] [transport.py] [_log()] kex follows: False
2025-12-31T15:14:38.290 [DEBUG] [Thread-129969] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:14:38.291 [DEBUG] [Thread-129969] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:14:38.291 [DEBUG] [Thread-129969] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:14:38.291 [DEBUG] [Thread-129969] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:14:38.291 [DEBUG] [Thread-129969] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:14:38.291 [DEBUG] [Thread-129969] [transport.py] [_log()] Compression: none
2025-12-31T15:14:38.291 [DEBUG] [Thread-129969] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:14:38.349 [DEBUG] [Thread-129969] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:14:38.350 [DEBUG] [Thread-129969] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:14:38.350 [DEBUG] [Thread-129969] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T15:14:38.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T15:14:38.352 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:14:38.405 [DEBUG] [Thread-129969] [transport.py] [_log()] userauth is OK
2025-12-31T15:14:38.405 [DEBUG] [Thread-129969] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:14:38.406 [DEBUG] [Thread-129969] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:14:38.406 [DEBUG] [Thread-129969] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T15:14:38.406 [DEBUG] [Thread-129969] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:14:38.429 [INFO] [Thread-129969] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:14:38.430 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T15:14:38.430 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:14:38.689 [DEBUG] [Thread-129870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:14:39.114 [DEBUG] [Thread-129971 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:14:39.250 [DEBUG] [Thread-129969] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:14:39.250 [DEBUG] [Thread-129969] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:14:39.298 [DEBUG] [Thread-129969] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:14:39.298 [DEBUG] [Thread-129969] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:14:39.307 [DEBUG] [Thread-129969] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:14:39.317 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:14:39.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T15:14:39.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T15:14:39.335 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:14:39.336 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:14:39.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:14:39.344 [DEBUG] [Thread-129969] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:14:40.233 [DEBUG] [Thread-129870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:14:40.673 [DEBUG] [Thread-129870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:14:41.086 [DEBUG] [Thread-129870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:14:41.505 [DEBUG] [Thread-129870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:14:41.922 [DEBUG] [Thread-129870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:14:42.332 [DEBUG] [Thread-129870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:14:42.821 [DEBUG] [Thread-129870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:14:43.279 [DEBUG] [Thread-129870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:14:43.689 [DEBUG] [Thread-129870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:14:44.098 [DEBUG] [Thread-129870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:14:54.163 [DEBUG] [Thread-129972 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:15:05.752 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:15:05.753 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:15:09.198 [DEBUG] [Thread-129973 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:15:09.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T15:15:09.339 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T15:15:09.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T15:15:10.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 15, 14, 50), 34.44, 9.65, 0.0, 36.45, 26.73, 0, 0, 0, 2, 0, 0),)
2025-12-31T15:15:10.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 15:14:50
2025-12-31T15:15:10.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T15:15:10.323 [DEBUG] [Thread-129974] [transport.py] [_log()] starting thread (client mode): 0xbbfccf40
2025-12-31T15:15:10.323 [DEBUG] [Thread-129974] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:15:10.343 [DEBUG] [Thread-129974] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T15:15:10.344 [INFO] [Thread-129974] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T15:15:10.346 [DEBUG] [Thread-129974] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:15:10.347 [DEBUG] [Thread-129974] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T15:15:10.347 [DEBUG] [Thread-129974] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:15:10.347 [DEBUG] [Thread-129974] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:15:10.347 [DEBUG] [Thread-129974] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:15:10.347 [DEBUG] [Thread-129974] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:15:10.347 [DEBUG] [Thread-129974] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:15:10.347 [DEBUG] [Thread-129974] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:15:10.347 [DEBUG] [Thread-129974] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:15:10.347 [DEBUG] [Thread-129974] [transport.py] [_log()] client lang: <none>
2025-12-31T15:15:10.347 [DEBUG] [Thread-129974] [transport.py] [_log()] server lang: <none>
2025-12-31T15:15:10.347 [DEBUG] [Thread-129974] [transport.py] [_log()] kex follows: False
2025-12-31T15:15:10.347 [DEBUG] [Thread-129974] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:15:10.347 [DEBUG] [Thread-129974] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:15:10.347 [DEBUG] [Thread-129974] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:15:10.347 [DEBUG] [Thread-129974] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:15:10.348 [DEBUG] [Thread-129974] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:15:10.348 [DEBUG] [Thread-129974] [transport.py] [_log()] Compression: none
2025-12-31T15:15:10.348 [DEBUG] [Thread-129974] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:15:10.365 [DEBUG] [Thread-129974] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:15:10.366 [DEBUG] [Thread-129974] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:15:10.367 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T15:15:10.368 [DEBUG] [Thread-129974] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T15:15:10.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:15:10.410 [DEBUG] [Thread-129974] [transport.py] [_log()] userauth is OK
2025-12-31T15:15:10.411 [DEBUG] [Thread-129974] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:15:10.411 [DEBUG] [Thread-129974] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:15:10.411 [DEBUG] [Thread-129974] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T15:15:10.411 [DEBUG] [Thread-129974] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:15:10.443 [INFO] [Thread-129974] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:15:10.444 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:15:14.333 [DEBUG] [Thread-129974] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:15:14.333 [DEBUG] [Thread-129974] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:15:14.334 [DEBUG] [Thread-129974] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T15:15:14.375 [DEBUG] [Thread-129974] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:15:14.375 [DEBUG] [Thread-129974] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:15:14.378 [DEBUG] [Thread-129974] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:15:14.391 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:15:14.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T15:15:14.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T15:15:14.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T15:15:14.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:15:14.461 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T15:15:14.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:15:14.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:15:14.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T15:15:14.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.551530 -999.00  +26.50  36.29     15   -1.90 1 1 2 1 1   888    0 29.78 100.19 ----- 43.9 36.3 311.6 45.1 32.0 -27.4 31.7 -24.9 32.0 -23.4 32.6 -25.5
2025-12-31T15:15:14.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T15:15:14.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T15:15:14.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.551530
2025-12-31T15:15:14.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T15:15:14.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T15:15:14.464 [DEBUG] [Thread-129974] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:15:14.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T15:15:14.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T15:15:14.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T15:15:14.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T15:14:50', tmtdew=34.44, humidity=9.65, cloud=0.0, wind=36.45, temperature=26.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T13:14:12.192', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T15:15:14.551 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T15:15:14.563 [DEBUG] [Thread-129977] [transport.py] [_log()] starting thread (client mode): 0xb95f09d0
2025-12-31T15:15:14.563 [DEBUG] [Thread-129977] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:15:14.580 [DEBUG] [Thread-129977] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T15:15:14.581 [INFO] [Thread-129977] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T15:15:14.588 [DEBUG] [Thread-129977] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:15:14.588 [DEBUG] [Thread-129977] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T15:15:14.589 [DEBUG] [Thread-129977] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:15:14.589 [DEBUG] [Thread-129977] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:15:14.589 [DEBUG] [Thread-129977] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:15:14.589 [DEBUG] [Thread-129977] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:15:14.589 [DEBUG] [Thread-129977] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:15:14.589 [DEBUG] [Thread-129977] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:15:14.589 [DEBUG] [Thread-129977] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:15:14.589 [DEBUG] [Thread-129977] [transport.py] [_log()] client lang: <none>
2025-12-31T15:15:14.589 [DEBUG] [Thread-129977] [transport.py] [_log()] server lang: <none>
2025-12-31T15:15:14.589 [DEBUG] [Thread-129977] [transport.py] [_log()] kex follows: False
2025-12-31T15:15:14.589 [DEBUG] [Thread-129977] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:15:14.589 [DEBUG] [Thread-129977] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:15:14.589 [DEBUG] [Thread-129977] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:15:14.589 [DEBUG] [Thread-129977] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:15:14.589 [DEBUG] [Thread-129977] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:15:14.589 [DEBUG] [Thread-129977] [transport.py] [_log()] Compression: none
2025-12-31T15:15:14.589 [DEBUG] [Thread-129977] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:15:14.647 [DEBUG] [Thread-129977] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:15:14.648 [DEBUG] [Thread-129977] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:15:14.649 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T15:15:14.649 [DEBUG] [Thread-129977] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T15:15:14.650 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:15:14.703 [DEBUG] [Thread-129977] [transport.py] [_log()] userauth is OK
2025-12-31T15:15:14.703 [DEBUG] [Thread-129977] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:15:14.703 [DEBUG] [Thread-129977] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:15:14.703 [DEBUG] [Thread-129977] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T15:15:14.703 [DEBUG] [Thread-129977] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:15:14.716 [INFO] [Thread-129977] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:15:14.717 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T15:15:14.717 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:15:15.559 [DEBUG] [Thread-129977] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:15:15.559 [DEBUG] [Thread-129977] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:15:15.606 [DEBUG] [Thread-129977] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:15:15.607 [DEBUG] [Thread-129977] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:15:15.615 [DEBUG] [Thread-129977] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:15:15.624 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:15:15.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T15:15:15.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T15:15:15.641 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:15:15.641 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:15:15.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:15:15.649 [DEBUG] [Thread-129977] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:15:20.869 [DEBUG] [Thread-129979 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:15:24.233 [DEBUG] [Thread-129980 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:15:39.279 [DEBUG] [Thread-129981 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:15:45.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T15:15:45.672 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T15:15:45.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T15:15:46.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 15, 15, 22), 34.46, 9.63, 0.0, 32.2, 26.73, 0, 0, 0, 2, 0, 0),)
2025-12-31T15:15:46.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 15:15:22
2025-12-31T15:15:46.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T15:15:46.669 [DEBUG] [Thread-129982] [transport.py] [_log()] starting thread (client mode): 0xb95b3ee0
2025-12-31T15:15:46.669 [DEBUG] [Thread-129982] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:15:46.690 [DEBUG] [Thread-129982] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T15:15:46.690 [INFO] [Thread-129982] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T15:15:46.694 [DEBUG] [Thread-129982] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:15:46.694 [DEBUG] [Thread-129982] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T15:15:46.694 [DEBUG] [Thread-129982] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:15:46.694 [DEBUG] [Thread-129982] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:15:46.695 [DEBUG] [Thread-129982] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:15:46.695 [DEBUG] [Thread-129982] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:15:46.695 [DEBUG] [Thread-129982] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:15:46.695 [DEBUG] [Thread-129982] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:15:46.695 [DEBUG] [Thread-129982] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:15:46.695 [DEBUG] [Thread-129982] [transport.py] [_log()] client lang: <none>
2025-12-31T15:15:46.695 [DEBUG] [Thread-129982] [transport.py] [_log()] server lang: <none>
2025-12-31T15:15:46.695 [DEBUG] [Thread-129982] [transport.py] [_log()] kex follows: False
2025-12-31T15:15:46.695 [DEBUG] [Thread-129982] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:15:46.695 [DEBUG] [Thread-129982] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:15:46.695 [DEBUG] [Thread-129982] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:15:46.696 [DEBUG] [Thread-129982] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:15:46.696 [DEBUG] [Thread-129982] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:15:46.696 [DEBUG] [Thread-129982] [transport.py] [_log()] Compression: none
2025-12-31T15:15:46.696 [DEBUG] [Thread-129982] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:15:46.714 [DEBUG] [Thread-129982] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:15:46.715 [DEBUG] [Thread-129982] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:15:46.716 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T15:15:46.717 [DEBUG] [Thread-129982] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T15:15:46.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:15:46.719 [DEBUG] [Thread-129982] [transport.py] [_log()] userauth is OK
2025-12-31T15:15:46.719 [DEBUG] [Thread-129982] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:15:46.719 [DEBUG] [Thread-129982] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:15:46.720 [DEBUG] [Thread-129982] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T15:15:46.720 [DEBUG] [Thread-129982] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:15:46.740 [INFO] [Thread-129982] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:15:46.740 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:15:47.361 [DEBUG] [Thread-129982] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:15:47.361 [DEBUG] [Thread-129982] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:15:47.361 [DEBUG] [Thread-129982] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T15:15:47.402 [DEBUG] [Thread-129982] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:15:47.403 [DEBUG] [Thread-129982] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:15:47.405 [DEBUG] [Thread-129982] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:15:47.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:15:47.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T15:15:47.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T15:15:47.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T15:15:47.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:15:47.429 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T15:15:47.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:15:47.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:15:47.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T15:15:47.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.551878 -999.00  +26.30  29.45     14   -2.70 1 1 1 1 1   888    0 29.94 104.49 ----- 29.4 29.4 303.4 44.5 31.9 -28.6 31.5 -27.1 31.7 -27.5 32.5 -25.6
2025-12-31T15:15:47.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T15:15:47.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T15:15:47.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.551878
2025-12-31T15:15:47.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T15:15:47.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T15:15:47.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T15:15:47.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T15:15:47.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T15:15:47.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T15:15:22', tmtdew=34.46, humidity=9.63, cloud=0.0, wind=32.2, temperature=26.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T13:14:42.259', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T15:15:47.432 [DEBUG] [Thread-129982] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:15:47.515 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T15:15:47.527 [DEBUG] [Thread-129985] [transport.py] [_log()] starting thread (client mode): 0xb95d6f80
2025-12-31T15:15:47.527 [DEBUG] [Thread-129985] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:15:47.542 [DEBUG] [Thread-129985] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T15:15:47.542 [INFO] [Thread-129985] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T15:15:47.551 [DEBUG] [Thread-129985] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:15:47.551 [DEBUG] [Thread-129985] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T15:15:47.551 [DEBUG] [Thread-129985] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:15:47.551 [DEBUG] [Thread-129985] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:15:47.551 [DEBUG] [Thread-129985] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:15:47.551 [DEBUG] [Thread-129985] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:15:47.551 [DEBUG] [Thread-129985] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:15:47.551 [DEBUG] [Thread-129985] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:15:47.551 [DEBUG] [Thread-129985] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:15:47.551 [DEBUG] [Thread-129985] [transport.py] [_log()] client lang: <none>
2025-12-31T15:15:47.551 [DEBUG] [Thread-129985] [transport.py] [_log()] server lang: <none>
2025-12-31T15:15:47.551 [DEBUG] [Thread-129985] [transport.py] [_log()] kex follows: False
2025-12-31T15:15:47.552 [DEBUG] [Thread-129985] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:15:47.552 [DEBUG] [Thread-129985] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:15:47.552 [DEBUG] [Thread-129985] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:15:47.552 [DEBUG] [Thread-129985] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:15:47.552 [DEBUG] [Thread-129985] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:15:47.552 [DEBUG] [Thread-129985] [transport.py] [_log()] Compression: none
2025-12-31T15:15:47.552 [DEBUG] [Thread-129985] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:15:47.611 [DEBUG] [Thread-129985] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:15:47.611 [DEBUG] [Thread-129985] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:15:47.612 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T15:15:47.612 [DEBUG] [Thread-129985] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T15:15:47.613 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:15:47.668 [DEBUG] [Thread-129985] [transport.py] [_log()] userauth is OK
2025-12-31T15:15:47.668 [DEBUG] [Thread-129985] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:15:47.669 [DEBUG] [Thread-129985] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:15:47.669 [DEBUG] [Thread-129985] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T15:15:47.669 [DEBUG] [Thread-129985] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:15:47.687 [INFO] [Thread-129985] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:15: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-12-31T15:15:47.688 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:15:48.537 [DEBUG] [Thread-129985] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:15:48.537 [DEBUG] [Thread-129985] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:15:48.586 [DEBUG] [Thread-129985] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:15:48.586 [DEBUG] [Thread-129985] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:15:48.595 [DEBUG] [Thread-129985] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:15:48.604 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:15:48.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T15:15:48.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-12-31T15:15:48.623 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:15:48.624 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:15:48.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:15:48.633 [DEBUG] [Thread-129985] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:15:54.314 [DEBUG] [Thread-129987 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:16:05.892 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:16:05.893 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:16:09.369 [DEBUG] [Thread-129988 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:16:18.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T15:16:18.641 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T15:16:18.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T15:16:19.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 15, 15, 54), 34.26, 9.72, 0.0, 30.1, 26.82, 0, 0, 0, 2, 0, 0),)
2025-12-31T15:16:19.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 15:15:54
2025-12-31T15:16:19.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T15:16:19.623 [DEBUG] [Thread-129989] [transport.py] [_log()] starting thread (client mode): 0xb95b0e80
2025-12-31T15:16:19.623 [DEBUG] [Thread-129989] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:16:19.635 [DEBUG] [Thread-129989] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T15:16:19.635 [INFO] [Thread-129989] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T15:16:19.637 [DEBUG] [Thread-129989] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:16:19.638 [DEBUG] [Thread-129989] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T15:16:19.638 [DEBUG] [Thread-129989] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:16:19.638 [DEBUG] [Thread-129989] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:16:19.638 [DEBUG] [Thread-129989] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:16:19.638 [DEBUG] [Thread-129989] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:16:19.638 [DEBUG] [Thread-129989] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:16:19.638 [DEBUG] [Thread-129989] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:16:19.638 [DEBUG] [Thread-129989] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:16:19.638 [DEBUG] [Thread-129989] [transport.py] [_log()] client lang: <none>
2025-12-31T15:16:19.638 [DEBUG] [Thread-129989] [transport.py] [_log()] server lang: <none>
2025-12-31T15:16:19.638 [DEBUG] [Thread-129989] [transport.py] [_log()] kex follows: False
2025-12-31T15:16:19.638 [DEBUG] [Thread-129989] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:16:19.638 [DEBUG] [Thread-129989] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:16:19.638 [DEBUG] [Thread-129989] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:16:19.638 [DEBUG] [Thread-129989] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:16:19.638 [DEBUG] [Thread-129989] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:16:19.638 [DEBUG] [Thread-129989] [transport.py] [_log()] Compression: none
2025-12-31T15:16:19.638 [DEBUG] [Thread-129989] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:16:19.655 [DEBUG] [Thread-129989] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:16:19.656 [DEBUG] [Thread-129989] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:16:19.656 [DEBUG] [Thread-129989] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T15:16:19.657 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T15:16:19.657 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:16:19.701 [DEBUG] [Thread-129989] [transport.py] [_log()] userauth is OK
2025-12-31T15:16:19.701 [DEBUG] [Thread-129989] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:16:19.701 [DEBUG] [Thread-129989] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:16:19.701 [DEBUG] [Thread-129989] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T15:16:19.701 [DEBUG] [Thread-129989] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:16:19.736 [INFO] [Thread-129989] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:16:19.737 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:16:20.519 [DEBUG] [Thread-129989] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:16:20.520 [DEBUG] [Thread-129989] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:16:20.520 [DEBUG] [Thread-129989] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T15:16:20.560 [DEBUG] [Thread-129989] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:16:20.560 [DEBUG] [Thread-129989] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:16:20.563 [DEBUG] [Thread-129989] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:16:20.576 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:16:20.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T15:16:20.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T15:16:20.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T15:16:20.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:16:20.591 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T15:16:20.591 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:16:20.591 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:16:20.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T15:16:20.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.552572 -999.00  +26.80  21.30     14   -2.20 1 1 1 1 1   888    0 30.26 108.46 ----- 31.7 21.3 299.6 36.4 31.6 -24.9 31.5 -24.2 31.9 -22.6 32.1 -24.1
2025-12-31T15:16:20.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T15:16:20.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T15:16:20.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.552572
2025-12-31T15:16:20.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T15:16:20.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T15:16:20.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T15:16:20.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T15:16:20.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T15:16:20.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T15:15:54', tmtdew=34.26, humidity=9.72, cloud=0.0, wind=30.1, temperature=26.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T13:15:42.221', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T15:16:20.594 [DEBUG] [Thread-129989] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:16:20.677 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T15:16:20.691 [DEBUG] [Thread-129992] [transport.py] [_log()] starting thread (client mode): 0xb95b3f70
2025-12-31T15:16:20.691 [DEBUG] [Thread-129992] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:16:20.705 [DEBUG] [Thread-129992] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T15:16:20.706 [INFO] [Thread-129992] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T15:16:20.714 [DEBUG] [Thread-129992] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:16:20.714 [DEBUG] [Thread-129992] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T15:16:20.714 [DEBUG] [Thread-129992] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:16:20.714 [DEBUG] [Thread-129992] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:16:20.714 [DEBUG] [Thread-129992] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:16:20.714 [DEBUG] [Thread-129992] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:16:20.714 [DEBUG] [Thread-129992] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:16:20.714 [DEBUG] [Thread-129992] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:16:20.714 [DEBUG] [Thread-129992] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:16:20.714 [DEBUG] [Thread-129992] [transport.py] [_log()] client lang: <none>
2025-12-31T15:16:20.715 [DEBUG] [Thread-129992] [transport.py] [_log()] server lang: <none>
2025-12-31T15:16:20.715 [DEBUG] [Thread-129992] [transport.py] [_log()] kex follows: False
2025-12-31T15:16:20.715 [DEBUG] [Thread-129992] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:16:20.715 [DEBUG] [Thread-129992] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:16:20.715 [DEBUG] [Thread-129992] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:16:20.715 [DEBUG] [Thread-129992] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:16:20.715 [DEBUG] [Thread-129992] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:16:20.715 [DEBUG] [Thread-129992] [transport.py] [_log()] Compression: none
2025-12-31T15:16:20.715 [DEBUG] [Thread-129992] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:16:20.777 [DEBUG] [Thread-129992] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:16:20.778 [DEBUG] [Thread-129992] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:16:20.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T15:16:20.779 [DEBUG] [Thread-129992] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T15:16:20.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:16:20.833 [DEBUG] [Thread-129992] [transport.py] [_log()] userauth is OK
2025-12-31T15:16:20.834 [DEBUG] [Thread-129992] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:16:20.834 [DEBUG] [Thread-129992] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:16:20.834 [DEBUG] [Thread-129992] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T15:16:20.834 [DEBUG] [Thread-129992] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:16:20.853 [INFO] [Thread-129992] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:16:20.853 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T15:16:20.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:16:20.914 [DEBUG] [Thread-129994 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:16:21.701 [DEBUG] [Thread-129992] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:16:21.701 [DEBUG] [Thread-129992] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:16:21.749 [DEBUG] [Thread-129992] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:16:21.749 [DEBUG] [Thread-129992] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:16:21.758 [DEBUG] [Thread-129992] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:16:21.768 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:16:21.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T15:16:21.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T15:16:21.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:16:21.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:16:21.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:16:21.795 [DEBUG] [Thread-129992] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:16:24.404 [DEBUG] [Thread-129995 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:16:39.452 [DEBUG] [Thread-129996 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:16:51.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T15:16:51.817 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T15:16:51.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T15:16:52.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 15, 16, 26), 34.75, 9.38, 0.0, 30.84, 26.87, 0, 0, 0, 2, 0, 0),)
2025-12-31T15:16:52.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 15:16:26
2025-12-31T15:16:52.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T15:16:52.797 [DEBUG] [Thread-129997] [transport.py] [_log()] starting thread (client mode): 0xb6bbaa70
2025-12-31T15:16:52.797 [DEBUG] [Thread-129997] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:16:52.817 [DEBUG] [Thread-129997] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T15:16:52.817 [INFO] [Thread-129997] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T15:16:52.820 [DEBUG] [Thread-129997] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:16:52.821 [DEBUG] [Thread-129997] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T15:16:52.821 [DEBUG] [Thread-129997] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:16:52.821 [DEBUG] [Thread-129997] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:16:52.821 [DEBUG] [Thread-129997] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:16:52.821 [DEBUG] [Thread-129997] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:16:52.821 [DEBUG] [Thread-129997] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:16:52.821 [DEBUG] [Thread-129997] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:16:52.821 [DEBUG] [Thread-129997] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:16:52.821 [DEBUG] [Thread-129997] [transport.py] [_log()] client lang: <none>
2025-12-31T15:16:52.821 [DEBUG] [Thread-129997] [transport.py] [_log()] server lang: <none>
2025-12-31T15:16:52.822 [DEBUG] [Thread-129997] [transport.py] [_log()] kex follows: False
2025-12-31T15:16:52.822 [DEBUG] [Thread-129997] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:16:52.822 [DEBUG] [Thread-129997] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:16:52.822 [DEBUG] [Thread-129997] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:16:52.822 [DEBUG] [Thread-129997] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:16:52.822 [DEBUG] [Thread-129997] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:16:52.822 [DEBUG] [Thread-129997] [transport.py] [_log()] Compression: none
2025-12-31T15:16:52.822 [DEBUG] [Thread-129997] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:16:52.841 [DEBUG] [Thread-129997] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:16:52.842 [DEBUG] [Thread-129997] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:16:52.843 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T15:16:52.843 [DEBUG] [Thread-129997] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T15:16:52.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:16:52.846 [DEBUG] [Thread-129997] [transport.py] [_log()] userauth is OK
2025-12-31T15:16:52.846 [DEBUG] [Thread-129997] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:16:52.846 [DEBUG] [Thread-129997] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:16:52.846 [DEBUG] [Thread-129997] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T15:16:52.846 [DEBUG] [Thread-129997] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:16:52.863 [INFO] [Thread-129997] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:16:52.864 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:16:53.469 [DEBUG] [Thread-129997] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:16:53.470 [DEBUG] [Thread-129997] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:16:53.470 [DEBUG] [Thread-129997] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T15:16:53.510 [DEBUG] [Thread-129997] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:16:53.510 [DEBUG] [Thread-129997] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:16:53.514 [DEBUG] [Thread-129997] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:16:53.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:16:53.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T15:16:53.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T15:16:53.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T15:16:53.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:16:53.541 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T15:16:53.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:16:53.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:16:53.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T15:16:53.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.552919 -999.00  +26.50  27.37     15   -1.60 1 2 1 1 1   888    0 30.32 109.95 ----- 28.6 27.4 307.7 35.0 31.7 -25.9 31.6 -23.7 31.9 -21.9 32.3 -24.2
2025-12-31T15:16:53.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T15:16:53.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T15:16:53.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.552919
2025-12-31T15:16:53.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T15:16:53.543 [DEBUG] [Thread-129997] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:16:53.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T15:16:53.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T15:16:53.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T15:16:53.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T15:16:53.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T15:16:26', tmtdew=34.75, humidity=9.38, cloud=0.0, wind=30.84, temperature=26.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T13:16:12.202', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T15:16:53.635 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T15:16:53.649 [DEBUG] [Thread-130000] [transport.py] [_log()] starting thread (client mode): 0xb6bbb700
2025-12-31T15:16:53.649 [DEBUG] [Thread-130000] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:16:53.664 [DEBUG] [Thread-130000] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T15:16:53.664 [INFO] [Thread-130000] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T15:16:53.672 [DEBUG] [Thread-130000] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:16:53.672 [DEBUG] [Thread-130000] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T15:16:53.673 [DEBUG] [Thread-130000] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:16:53.673 [DEBUG] [Thread-130000] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:16:53.674 [DEBUG] [Thread-130000] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:16:53.674 [DEBUG] [Thread-130000] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:16:53.674 [DEBUG] [Thread-130000] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:16:53.674 [DEBUG] [Thread-130000] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:16:53.674 [DEBUG] [Thread-130000] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:16:53.674 [DEBUG] [Thread-130000] [transport.py] [_log()] client lang: <none>
2025-12-31T15:16:53.674 [DEBUG] [Thread-130000] [transport.py] [_log()] server lang: <none>
2025-12-31T15:16:53.674 [DEBUG] [Thread-130000] [transport.py] [_log()] kex follows: False
2025-12-31T15:16:53.674 [DEBUG] [Thread-130000] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:16:53.675 [DEBUG] [Thread-130000] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:16:53.675 [DEBUG] [Thread-130000] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:16:53.675 [DEBUG] [Thread-130000] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:16:53.675 [DEBUG] [Thread-130000] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:16:53.675 [DEBUG] [Thread-130000] [transport.py] [_log()] Compression: none
2025-12-31T15:16:53.675 [DEBUG] [Thread-130000] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:16:53.733 [DEBUG] [Thread-130000] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:16:53.734 [DEBUG] [Thread-130000] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:16:53.735 [DEBUG] [Thread-130000] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T15:16:53.735 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T15:16:53.736 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:16:53.792 [DEBUG] [Thread-130000] [transport.py] [_log()] userauth is OK
2025-12-31T15:16:53.793 [DEBUG] [Thread-130000] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:16:53.793 [DEBUG] [Thread-130000] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:16:53.793 [DEBUG] [Thread-130000] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T15:16:53.793 [DEBUG] [Thread-130000] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:16:53.812 [INFO] [Thread-130000] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:16:53.812 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T15:16:53.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:16:54.486 [DEBUG] [Thread-130002 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:16:54.640 [DEBUG] [Thread-130000] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:16:54.641 [DEBUG] [Thread-130000] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:16:54.689 [DEBUG] [Thread-130000] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:16:54.689 [DEBUG] [Thread-130000] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:16:54.699 [DEBUG] [Thread-130000] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:16:54.708 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:16:54.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T15:16:54.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T15:16:54.726 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:16:54.727 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:16:54.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:16:54.735 [DEBUG] [Thread-130000] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:17:06.032 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:17:06.033 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:17:09.542 [DEBUG] [Thread-130003 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:17:20.943 [DEBUG] [Thread-130004 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:17:24.576 [DEBUG] [Thread-130005 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:17:24.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T15:17:24.757 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T15:17:24.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T15:17:25.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 15, 16, 58), 33.87, 10.5, 0.0, 34.41, 26.87, 0, 0, 0, 2, 0, 0),)
2025-12-31T15:17:25.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 15:16:58
2025-12-31T15:17:25.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T15:17:25.751 [DEBUG] [Thread-130006] [transport.py] [_log()] starting thread (client mode): 0xb6bbaad0
2025-12-31T15:17:25.751 [DEBUG] [Thread-130006] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:17:25.772 [DEBUG] [Thread-130006] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T15:17:25.772 [INFO] [Thread-130006] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T15:17:25.775 [DEBUG] [Thread-130006] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:17:25.775 [DEBUG] [Thread-130006] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T15:17:25.775 [DEBUG] [Thread-130006] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:17:25.775 [DEBUG] [Thread-130006] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:17:25.775 [DEBUG] [Thread-130006] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:17:25.775 [DEBUG] [Thread-130006] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:17:25.775 [DEBUG] [Thread-130006] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:17:25.775 [DEBUG] [Thread-130006] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:17:25.775 [DEBUG] [Thread-130006] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:17:25.775 [DEBUG] [Thread-130006] [transport.py] [_log()] client lang: <none>
2025-12-31T15:17:25.775 [DEBUG] [Thread-130006] [transport.py] [_log()] server lang: <none>
2025-12-31T15:17:25.775 [DEBUG] [Thread-130006] [transport.py] [_log()] kex follows: False
2025-12-31T15:17:25.775 [DEBUG] [Thread-130006] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:17:25.775 [DEBUG] [Thread-130006] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:17:25.775 [DEBUG] [Thread-130006] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:17:25.775 [DEBUG] [Thread-130006] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:17:25.775 [DEBUG] [Thread-130006] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:17:25.775 [DEBUG] [Thread-130006] [transport.py] [_log()] Compression: none
2025-12-31T15:17:25.775 [DEBUG] [Thread-130006] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:17:25.791 [DEBUG] [Thread-130006] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:17:25.791 [DEBUG] [Thread-130006] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:17:25.792 [DEBUG] [Thread-130006] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T15:17:25.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T15:17:25.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:17:25.793 [DEBUG] [Thread-130006] [transport.py] [_log()] userauth is OK
2025-12-31T15:17:25.793 [DEBUG] [Thread-130006] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:17:25.793 [DEBUG] [Thread-130006] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:17:25.793 [DEBUG] [Thread-130006] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T15:17:25.793 [DEBUG] [Thread-130006] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:17:25.820 [INFO] [Thread-130006] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:17:25.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:17:26.543 [DEBUG] [Thread-130006] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:17:26.543 [DEBUG] [Thread-130006] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:17:26.543 [DEBUG] [Thread-130006] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T15:17:26.585 [DEBUG] [Thread-130006] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:17:26.585 [DEBUG] [Thread-130006] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:17:26.587 [DEBUG] [Thread-130006] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:17:26.598 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:17:26.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T15:17:26.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T15:17:26.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T15:17:26.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:17:26.605 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T15:17:26.605 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:17:26.605 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:17:26.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T15:17:26.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.553267 -999.00  +26.60  36.58     16   -1.20 1 1 2 1 1   888    0 30.82 105.83 ----- 34.0 36.6 305.4 39.1 31.8 -24.9 31.6 -25.7 31.9 -24.0 32.4 -23.6
2025-12-31T15:17:26.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T15:17:26.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T15:17:26.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.553267
2025-12-31T15:17:26.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T15:17:26.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T15:17:26.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T15:17:26.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T15:17:26.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T15:17:26.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T15:16:58', tmtdew=33.87, humidity=10.5, cloud=0.0, wind=34.41, temperature=26.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T13:16:42.269', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T15:17:26.607 [DEBUG] [Thread-130006] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:17:26.679 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T15:17:26.693 [DEBUG] [Thread-130009] [transport.py] [_log()] starting thread (client mode): 0xb95b3cd0
2025-12-31T15:17:26.693 [DEBUG] [Thread-130009] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:17:26.708 [DEBUG] [Thread-130009] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T15:17:26.709 [INFO] [Thread-130009] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T15:17:26.716 [DEBUG] [Thread-130009] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:17:26.716 [DEBUG] [Thread-130009] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T15:17:26.716 [DEBUG] [Thread-130009] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:17:26.716 [DEBUG] [Thread-130009] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:17:26.716 [DEBUG] [Thread-130009] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:17:26.717 [DEBUG] [Thread-130009] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:17:26.717 [DEBUG] [Thread-130009] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:17:26.717 [DEBUG] [Thread-130009] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:17:26.717 [DEBUG] [Thread-130009] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:17:26.717 [DEBUG] [Thread-130009] [transport.py] [_log()] client lang: <none>
2025-12-31T15:17:26.717 [DEBUG] [Thread-130009] [transport.py] [_log()] server lang: <none>
2025-12-31T15:17:26.717 [DEBUG] [Thread-130009] [transport.py] [_log()] kex follows: False
2025-12-31T15:17:26.717 [DEBUG] [Thread-130009] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:17:26.717 [DEBUG] [Thread-130009] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:17:26.717 [DEBUG] [Thread-130009] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:17:26.717 [DEBUG] [Thread-130009] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:17:26.717 [DEBUG] [Thread-130009] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:17:26.717 [DEBUG] [Thread-130009] [transport.py] [_log()] Compression: none
2025-12-31T15:17:26.717 [DEBUG] [Thread-130009] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:17:26.780 [DEBUG] [Thread-130009] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:17:26.780 [DEBUG] [Thread-130009] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:17:26.781 [DEBUG] [Thread-130009] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T15:17:26.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T15:17:26.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:17:26.835 [DEBUG] [Thread-130009] [transport.py] [_log()] userauth is OK
2025-12-31T15:17:26.835 [DEBUG] [Thread-130009] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:17:26.835 [DEBUG] [Thread-130009] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:17:26.836 [DEBUG] [Thread-130009] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T15:17:26.836 [DEBUG] [Thread-130009] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:17:26.855 [INFO] [Thread-130009] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:17:26.856 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T15:17:26.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:17:27.689 [DEBUG] [Thread-130009] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:17:27.689 [DEBUG] [Thread-130009] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:17:27.736 [DEBUG] [Thread-130009] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:17:27.736 [DEBUG] [Thread-130009] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:17:27.745 [DEBUG] [Thread-130009] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:17:27.753 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:17:27.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T15:17:27.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T15:17:27.770 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:17:27.770 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:17:27.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:17:27.778 [DEBUG] [Thread-130009] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:17:39.608 [DEBUG] [Thread-130011 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:17:54.662 [DEBUG] [Thread-130012 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:17:57.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T15:17:57.797 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T15:17:57.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T15:17:58.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 15, 17, 30), 34.32, 10.24, 0.0, 32.98, 27.13, 0, 0, 0, 2, 0, 0),)
2025-12-31T15:17:58.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 15:17:30
2025-12-31T15:17:58.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T15:17:58.775 [DEBUG] [Thread-130013] [transport.py] [_log()] starting thread (client mode): 0xb95b1c30
2025-12-31T15:17:58.775 [DEBUG] [Thread-130013] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:17:58.796 [DEBUG] [Thread-130013] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T15:17:58.796 [INFO] [Thread-130013] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T15:17:58.799 [DEBUG] [Thread-130013] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:17:58.799 [DEBUG] [Thread-130013] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T15:17:58.799 [DEBUG] [Thread-130013] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:17:58.799 [DEBUG] [Thread-130013] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:17:58.799 [DEBUG] [Thread-130013] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:17:58.799 [DEBUG] [Thread-130013] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:17:58.799 [DEBUG] [Thread-130013] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:17:58.799 [DEBUG] [Thread-130013] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:17:58.799 [DEBUG] [Thread-130013] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:17:58.799 [DEBUG] [Thread-130013] [transport.py] [_log()] client lang: <none>
2025-12-31T15:17:58.799 [DEBUG] [Thread-130013] [transport.py] [_log()] server lang: <none>
2025-12-31T15:17:58.799 [DEBUG] [Thread-130013] [transport.py] [_log()] kex follows: False
2025-12-31T15:17:58.800 [DEBUG] [Thread-130013] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:17:58.800 [DEBUG] [Thread-130013] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:17:58.800 [DEBUG] [Thread-130013] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:17:58.800 [DEBUG] [Thread-130013] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:17:58.800 [DEBUG] [Thread-130013] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:17:58.800 [DEBUG] [Thread-130013] [transport.py] [_log()] Compression: none
2025-12-31T15:17:58.800 [DEBUG] [Thread-130013] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:17:58.816 [DEBUG] [Thread-130013] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:17:58.817 [DEBUG] [Thread-130013] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:17:58.817 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T15:17:58.818 [DEBUG] [Thread-130013] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T15:17:58.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:17:58.820 [DEBUG] [Thread-130013] [transport.py] [_log()] userauth is OK
2025-12-31T15:17:58.820 [DEBUG] [Thread-130013] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:17:58.820 [DEBUG] [Thread-130013] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:17:58.820 [DEBUG] [Thread-130013] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T15:17:58.821 [DEBUG] [Thread-130013] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:17:58.844 [INFO] [Thread-130013] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:17:58.844 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:17:59.458 [DEBUG] [Thread-130013] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:17:59.458 [DEBUG] [Thread-130013] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:17:59.459 [DEBUG] [Thread-130013] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T15:17:59.499 [DEBUG] [Thread-130013] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:17:59.499 [DEBUG] [Thread-130013] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:17:59.502 [DEBUG] [Thread-130013] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:17:59.516 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:17:59.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T15:17:59.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T15:17:59.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T15:17:59.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:17:59.529 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T15:17:59.529 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:17:59.529 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:17:59.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T15:17:59.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.553614 -999.00  +26.20  32.72     16   -1.30 1 1 2 1 1   888    0 30.49 99.64 ----- 29.8 32.7 307.2 40.1 31.6 -26.5 31.4 -25.2 31.7 -27.4 32.3 -24.3
2025-12-31T15:17:59.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T15:17:59.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T15:17:59.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.553614
2025-12-31T15:17:59.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T15:17:59.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T15:17:59.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T15:17:59.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T15:17:59.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T15:17:59.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T15:17:30', tmtdew=34.32, humidity=10.24, cloud=0.0, wind=32.98, temperature=27.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T13:17:12.250', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T15:17:59.532 [DEBUG] [Thread-130013] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:17:59.617 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T15:17:59.629 [DEBUG] [Thread-130016] [transport.py] [_log()] starting thread (client mode): 0xb6bbab60
2025-12-31T15:17:59.629 [DEBUG] [Thread-130016] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:17:59.644 [DEBUG] [Thread-130016] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T15:17:59.644 [INFO] [Thread-130016] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T15:17:59.651 [DEBUG] [Thread-130016] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:17:59.651 [DEBUG] [Thread-130016] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T15:17:59.651 [DEBUG] [Thread-130016] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:17:59.652 [DEBUG] [Thread-130016] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:17:59.652 [DEBUG] [Thread-130016] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:17:59.652 [DEBUG] [Thread-130016] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:17:59.652 [DEBUG] [Thread-130016] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:17:59.652 [DEBUG] [Thread-130016] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:17:59.652 [DEBUG] [Thread-130016] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:17:59.652 [DEBUG] [Thread-130016] [transport.py] [_log()] client lang: <none>
2025-12-31T15:17:59.652 [DEBUG] [Thread-130016] [transport.py] [_log()] server lang: <none>
2025-12-31T15:17:59.652 [DEBUG] [Thread-130016] [transport.py] [_log()] kex follows: False
2025-12-31T15:17:59.652 [DEBUG] [Thread-130016] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:17:59.652 [DEBUG] [Thread-130016] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:17:59.652 [DEBUG] [Thread-130016] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:17:59.652 [DEBUG] [Thread-130016] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:17:59.652 [DEBUG] [Thread-130016] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:17:59.652 [DEBUG] [Thread-130016] [transport.py] [_log()] Compression: none
2025-12-31T15:17:59.652 [DEBUG] [Thread-130016] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:17:59.709 [DEBUG] [Thread-130016] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:17:59.709 [DEBUG] [Thread-130016] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:17:59.709 [DEBUG] [Thread-130016] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T15:17:59.709 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T15:17:59.709 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:17:59.766 [DEBUG] [Thread-130016] [transport.py] [_log()] userauth is OK
2025-12-31T15:17:59.766 [DEBUG] [Thread-130016] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:17:59.766 [DEBUG] [Thread-130016] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:17:59.766 [DEBUG] [Thread-130016] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T15:17:59.766 [DEBUG] [Thread-130016] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:17:59.780 [INFO] [Thread-130016] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:17:59.780 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T15:17:59.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:18:00.615 [DEBUG] [Thread-130016] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:18:00.615 [DEBUG] [Thread-130016] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:18:00.662 [DEBUG] [Thread-130016] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:18:00.662 [DEBUG] [Thread-130016] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:18:00.670 [DEBUG] [Thread-130016] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:18:00.678 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:18:00.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-12-31T15:18:00.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T15:18:00.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:18:00.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:18:00.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:18:00.701 [DEBUG] [Thread-130016] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:18:06.171 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:18:06.173 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:18:09.695 [DEBUG] [Thread-130018 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:18:20.977 [DEBUG] [Thread-130019 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:18:24.746 [DEBUG] [Thread-130020 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:18:30.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T15:18:30.702 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T15:18:30.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T15:18:31.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 15, 18, 2), 33.98, 10.42, 0.0, 28.2, 26.83, 0, 0, 0, 2, 0, 0),)
2025-12-31T15:18:31.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 15:18:02
2025-12-31T15:18:31.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T15:18:31.684 [DEBUG] [Thread-130021] [transport.py] [_log()] starting thread (client mode): 0xbbfcd720
2025-12-31T15:18:31.684 [DEBUG] [Thread-130021] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:18:31.705 [DEBUG] [Thread-130021] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T15:18:31.705 [INFO] [Thread-130021] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T15:18:31.708 [DEBUG] [Thread-130021] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:18:31.708 [DEBUG] [Thread-130021] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T15:18:31.708 [DEBUG] [Thread-130021] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:18:31.708 [DEBUG] [Thread-130021] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:18:31.708 [DEBUG] [Thread-130021] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:18:31.708 [DEBUG] [Thread-130021] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:18:31.708 [DEBUG] [Thread-130021] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:18:31.709 [DEBUG] [Thread-130021] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:18:31.709 [DEBUG] [Thread-130021] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:18:31.709 [DEBUG] [Thread-130021] [transport.py] [_log()] client lang: <none>
2025-12-31T15:18:31.709 [DEBUG] [Thread-130021] [transport.py] [_log()] server lang: <none>
2025-12-31T15:18:31.709 [DEBUG] [Thread-130021] [transport.py] [_log()] kex follows: False
2025-12-31T15:18:31.709 [DEBUG] [Thread-130021] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:18:31.709 [DEBUG] [Thread-130021] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:18:31.709 [DEBUG] [Thread-130021] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:18:31.709 [DEBUG] [Thread-130021] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:18:31.709 [DEBUG] [Thread-130021] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:18:31.709 [DEBUG] [Thread-130021] [transport.py] [_log()] Compression: none
2025-12-31T15:18:31.709 [DEBUG] [Thread-130021] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:18:31.729 [DEBUG] [Thread-130021] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:18:31.730 [DEBUG] [Thread-130021] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:18:31.731 [DEBUG] [Thread-130021] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T15:18:31.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T15:18:31.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:18:31.732 [DEBUG] [Thread-130021] [transport.py] [_log()] userauth is OK
2025-12-31T15:18:31.733 [DEBUG] [Thread-130021] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:18:31.733 [DEBUG] [Thread-130021] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:18:31.733 [DEBUG] [Thread-130021] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T15:18:31.733 [DEBUG] [Thread-130021] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:18:31.753 [INFO] [Thread-130021] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:18:31.754 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:18:32.541 [DEBUG] [Thread-130021] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:18:32.541 [DEBUG] [Thread-130021] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:18:32.541 [DEBUG] [Thread-130021] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T15:18:32.582 [DEBUG] [Thread-130021] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:18:32.582 [DEBUG] [Thread-130021] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:18:32.585 [DEBUG] [Thread-130021] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:18:32.599 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:18:32.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T15:18:32.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T15:18:32.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T15:18:32.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:18:32.610 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T15:18:32.610 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:18:32.610 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:18:32.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T15:18:32.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.553961 -999.00  +26.10  26.01     16   -1.30 1 1 1 1 1   888    0 29.73 85.61 ----- 25.0 26.0 311.8 34.1 31.6 -24.7 31.5 -24.7 31.9 -23.8 32.2 -24.0
2025-12-31T15:18:32.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T15:18:32.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T15:18:32.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.553961
2025-12-31T15:18:32.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T15:18:32.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T15:18:32.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T15:18:32.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T15:18:32.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T15:18:32.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T15:18:02', tmtdew=33.98, humidity=10.42, cloud=0.0, wind=28.2, temperature=26.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T13:17:42.230', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T15:18:32.612 [DEBUG] [Thread-130021] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:18:32.696 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T15:18:32.708 [DEBUG] [Thread-130024] [transport.py] [_log()] starting thread (client mode): 0xb95d7580
2025-12-31T15:18:32.708 [DEBUG] [Thread-130024] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:18:32.721 [DEBUG] [Thread-130024] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T15:18:32.722 [INFO] [Thread-130024] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T15:18:32.729 [DEBUG] [Thread-130024] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:18:32.729 [DEBUG] [Thread-130024] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T15:18:32.729 [DEBUG] [Thread-130024] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:18:32.729 [DEBUG] [Thread-130024] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:18:32.729 [DEBUG] [Thread-130024] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:18:32.730 [DEBUG] [Thread-130024] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:18:32.730 [DEBUG] [Thread-130024] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:18:32.730 [DEBUG] [Thread-130024] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:18:32.730 [DEBUG] [Thread-130024] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:18:32.730 [DEBUG] [Thread-130024] [transport.py] [_log()] client lang: <none>
2025-12-31T15:18:32.730 [DEBUG] [Thread-130024] [transport.py] [_log()] server lang: <none>
2025-12-31T15:18:32.730 [DEBUG] [Thread-130024] [transport.py] [_log()] kex follows: False
2025-12-31T15:18:32.730 [DEBUG] [Thread-130024] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:18:32.730 [DEBUG] [Thread-130024] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:18:32.730 [DEBUG] [Thread-130024] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:18:32.730 [DEBUG] [Thread-130024] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:18:32.730 [DEBUG] [Thread-130024] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:18:32.730 [DEBUG] [Thread-130024] [transport.py] [_log()] Compression: none
2025-12-31T15:18:32.730 [DEBUG] [Thread-130024] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:18:32.794 [DEBUG] [Thread-130024] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:18:32.795 [DEBUG] [Thread-130024] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:18:32.796 [DEBUG] [Thread-130024] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T15:18:32.796 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T15:18:32.797 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:18:32.854 [DEBUG] [Thread-130024] [transport.py] [_log()] userauth is OK
2025-12-31T15:18:32.854 [DEBUG] [Thread-130024] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:18:32.854 [DEBUG] [Thread-130024] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:18:32.854 [DEBUG] [Thread-130024] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T15:18:32.854 [DEBUG] [Thread-130024] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:18:32.872 [INFO] [Thread-130024] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:18:32.873 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T15:18:32.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:18:33.695 [DEBUG] [Thread-130024] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:18:33.695 [DEBUG] [Thread-130024] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:18:33.743 [DEBUG] [Thread-130024] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:18:33.743 [DEBUG] [Thread-130024] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:18:33.752 [DEBUG] [Thread-130024] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:18:33.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:18:33.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T15:18:33.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T15:18:33.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:18:33.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:18:33.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:18:33.788 [DEBUG] [Thread-130024] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:18:39.779 [DEBUG] [Thread-130026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:18:54.820 [DEBUG] [Thread-130027 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:19:03.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T15:19:03.811 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T15:19:03.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T15:19:04.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 15, 18, 35), 32.94, 11.23, 0.0, 23.63, 26.95, 0, 0, 0, 2, 0, 0),)
2025-12-31T15:19:04.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 15:18:35
2025-12-31T15:19:04.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T15:19:04.789 [DEBUG] [Thread-130028] [transport.py] [_log()] starting thread (client mode): 0xb95d6650
2025-12-31T15:19:04.789 [DEBUG] [Thread-130028] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:19:04.809 [DEBUG] [Thread-130028] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T15:19:04.809 [INFO] [Thread-130028] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T15:19:04.812 [DEBUG] [Thread-130028] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:19:04.812 [DEBUG] [Thread-130028] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T15:19:04.812 [DEBUG] [Thread-130028] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:19:04.812 [DEBUG] [Thread-130028] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:19:04.812 [DEBUG] [Thread-130028] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:19:04.812 [DEBUG] [Thread-130028] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:19:04.812 [DEBUG] [Thread-130028] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:19:04.812 [DEBUG] [Thread-130028] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:19:04.812 [DEBUG] [Thread-130028] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:19:04.812 [DEBUG] [Thread-130028] [transport.py] [_log()] client lang: <none>
2025-12-31T15:19:04.812 [DEBUG] [Thread-130028] [transport.py] [_log()] server lang: <none>
2025-12-31T15:19:04.812 [DEBUG] [Thread-130028] [transport.py] [_log()] kex follows: False
2025-12-31T15:19:04.812 [DEBUG] [Thread-130028] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:19:04.812 [DEBUG] [Thread-130028] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:19:04.812 [DEBUG] [Thread-130028] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:19:04.812 [DEBUG] [Thread-130028] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:19:04.813 [DEBUG] [Thread-130028] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:19:04.813 [DEBUG] [Thread-130028] [transport.py] [_log()] Compression: none
2025-12-31T15:19:04.813 [DEBUG] [Thread-130028] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:19:04.831 [DEBUG] [Thread-130028] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:19:04.831 [DEBUG] [Thread-130028] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:19:04.832 [DEBUG] [Thread-130028] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T15:19:04.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T15:19:04.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:19:04.834 [DEBUG] [Thread-130028] [transport.py] [_log()] userauth is OK
2025-12-31T15:19:04.834 [DEBUG] [Thread-130028] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:19:04.834 [DEBUG] [Thread-130028] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:19:04.834 [DEBUG] [Thread-130028] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T15:19:04.834 [DEBUG] [Thread-130028] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:19:04.859 [INFO] [Thread-130028] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:19:04.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:19:05.491 [DEBUG] [Thread-130028] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:19:05.491 [DEBUG] [Thread-130028] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:19:05.492 [DEBUG] [Thread-130028] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T15:19:05.533 [DEBUG] [Thread-130028] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:19:05.533 [DEBUG] [Thread-130028] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:19:05.536 [DEBUG] [Thread-130028] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:19:05.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:19:05.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T15:19:05.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T15:19:05.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T15:19:05.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:19:05.549 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T15:19:05.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:19:05.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:19:05.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T15:19:05.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.554308 -999.00  +26.20  26.59     16   -0.80 1 2 1 1 1   888    0 29.42 73.61 ----- 22.9 26.6 287.6 31.9 31.6 -23.5 31.6 -21.9 32.0 -22.7 32.2 -22.1
2025-12-31T15:19:05.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T15:19:05.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T15:19:05.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.554308
2025-12-31T15:19:05.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T15:19:05.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T15:19:05.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T15:19:05.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T15:19:05.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T15:19:05.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T15:18:35', tmtdew=32.94, humidity=11.23, cloud=0.0, wind=23.63, temperature=26.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T13:18:12.211', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T15:19:05.551 [DEBUG] [Thread-130028] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:19:05.638 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T15:19:05.649 [DEBUG] [Thread-130031] [transport.py] [_log()] starting thread (client mode): 0xb6ba1540
2025-12-31T15:19:05.649 [DEBUG] [Thread-130031] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:19:05.667 [DEBUG] [Thread-130031] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T15:19:05.667 [INFO] [Thread-130031] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T15:19:05.674 [DEBUG] [Thread-130031] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:19:05.674 [DEBUG] [Thread-130031] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T15:19:05.674 [DEBUG] [Thread-130031] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:19:05.674 [DEBUG] [Thread-130031] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:19:05.675 [DEBUG] [Thread-130031] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:19:05.675 [DEBUG] [Thread-130031] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:19:05.675 [DEBUG] [Thread-130031] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:19:05.675 [DEBUG] [Thread-130031] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:19:05.675 [DEBUG] [Thread-130031] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:19:05.675 [DEBUG] [Thread-130031] [transport.py] [_log()] client lang: <none>
2025-12-31T15:19:05.675 [DEBUG] [Thread-130031] [transport.py] [_log()] server lang: <none>
2025-12-31T15:19:05.675 [DEBUG] [Thread-130031] [transport.py] [_log()] kex follows: False
2025-12-31T15:19:05.675 [DEBUG] [Thread-130031] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:19:05.675 [DEBUG] [Thread-130031] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:19:05.675 [DEBUG] [Thread-130031] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:19:05.675 [DEBUG] [Thread-130031] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:19:05.675 [DEBUG] [Thread-130031] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:19:05.675 [DEBUG] [Thread-130031] [transport.py] [_log()] Compression: none
2025-12-31T15:19:05.675 [DEBUG] [Thread-130031] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:19:05.732 [DEBUG] [Thread-130031] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:19:05.732 [DEBUG] [Thread-130031] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:19:05.733 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T15:19:05.733 [DEBUG] [Thread-130031] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T15:19:05.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:19:05.789 [DEBUG] [Thread-130031] [transport.py] [_log()] userauth is OK
2025-12-31T15:19:05.790 [DEBUG] [Thread-130031] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:19:05.790 [DEBUG] [Thread-130031] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:19:05.790 [DEBUG] [Thread-130031] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T15:19:05.790 [DEBUG] [Thread-130031] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:19:05.808 [INFO] [Thread-130031] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:19:05.809 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T15:19:05.809 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:19:06.316 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:19:06.318 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:19:06.660 [DEBUG] [Thread-130031] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:19:06.661 [DEBUG] [Thread-130031] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:19:06.708 [DEBUG] [Thread-130031] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:19:06.708 [DEBUG] [Thread-130031] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:19:06.717 [DEBUG] [Thread-130031] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:19:06.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:19:06.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T15:19:06.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T15:19:06.742 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:19:06.743 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:19:06.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:19:06.751 [DEBUG] [Thread-130031] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:19:09.854 [DEBUG] [Thread-130033 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:19:21.004 [DEBUG] [Thread-130034 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:19:24.903 [DEBUG] [Thread-130035 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:19:36.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T15:19:36.774 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T15:19:36.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T15:19:37.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 15, 19, 7), 33.3, 11.0, 0.0, 27.88, 27.2, 0, 0, 0, 2, 0, 0),)
2025-12-31T15:19:37.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 15:19:07
2025-12-31T15:19:37.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T15:19:37.768 [DEBUG] [Thread-130036] [transport.py] [_log()] starting thread (client mode): 0xb95d6a40
2025-12-31T15:19:37.769 [DEBUG] [Thread-130036] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:19:37.784 [DEBUG] [Thread-130036] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T15:19:37.784 [INFO] [Thread-130036] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T15:19:37.785 [DEBUG] [Thread-130036] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:19:37.785 [DEBUG] [Thread-130036] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T15:19:37.785 [DEBUG] [Thread-130036] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:19:37.785 [DEBUG] [Thread-130036] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:19:37.785 [DEBUG] [Thread-130036] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:19:37.785 [DEBUG] [Thread-130036] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:19:37.786 [DEBUG] [Thread-130036] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:19:37.786 [DEBUG] [Thread-130036] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:19:37.786 [DEBUG] [Thread-130036] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:19:37.786 [DEBUG] [Thread-130036] [transport.py] [_log()] client lang: <none>
2025-12-31T15:19:37.786 [DEBUG] [Thread-130036] [transport.py] [_log()] server lang: <none>
2025-12-31T15:19:37.786 [DEBUG] [Thread-130036] [transport.py] [_log()] kex follows: False
2025-12-31T15:19:37.786 [DEBUG] [Thread-130036] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:19:37.786 [DEBUG] [Thread-130036] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:19:37.786 [DEBUG] [Thread-130036] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:19:37.786 [DEBUG] [Thread-130036] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:19:37.786 [DEBUG] [Thread-130036] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:19:37.786 [DEBUG] [Thread-130036] [transport.py] [_log()] Compression: none
2025-12-31T15:19:37.786 [DEBUG] [Thread-130036] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:19:37.797 [DEBUG] [Thread-130036] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:19:37.798 [DEBUG] [Thread-130036] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:19:37.798 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T15:19:37.799 [DEBUG] [Thread-130036] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T15:19:37.799 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:19:37.800 [DEBUG] [Thread-130036] [transport.py] [_log()] userauth is OK
2025-12-31T15:19:37.801 [DEBUG] [Thread-130036] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:19:37.801 [DEBUG] [Thread-130036] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:19:37.801 [DEBUG] [Thread-130036] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T15:19:37.801 [DEBUG] [Thread-130036] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:19:37.823 [INFO] [Thread-130036] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:19:37.823 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:19:38.584 [DEBUG] [Thread-130036] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:19:38.584 [DEBUG] [Thread-130036] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:19:38.584 [DEBUG] [Thread-130036] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T15:19:38.626 [DEBUG] [Thread-130036] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:19:38.626 [DEBUG] [Thread-130036] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:19:38.629 [DEBUG] [Thread-130036] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:19:38.640 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:19:38.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T15:19:38.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T15:19:38.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T15:19:38.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:19:38.652 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T15:19:38.652 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:19:38.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:19:38.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T15:19:38.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.554655 -999.00  +26.30  30.46     16   -0.70 1 1 2 1 1   888    0 28.42 53.67 ----- 33.6 30.5 300.2 40.8 31.8 -23.6 31.5 -23.7 31.8 -24.2 32.5 -20.7
2025-12-31T15:19:38.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T15:19:38.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T15:19:38.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.554655
2025-12-31T15:19:38.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T15:19:38.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T15:19:38.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T15:19:38.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T15:19:38.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T15:19:38.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T15:19:07', tmtdew=33.3, humidity=11.0, cloud=0.0, wind=27.88, temperature=27.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T13:18:42.192', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T15:19:38.654 [DEBUG] [Thread-130036] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:19:38.737 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T15:19:38.751 [DEBUG] [Thread-130039] [transport.py] [_log()] starting thread (client mode): 0xb95d75e0
2025-12-31T15:19:38.752 [DEBUG] [Thread-130039] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:19:38.766 [DEBUG] [Thread-130039] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T15:19:38.766 [INFO] [Thread-130039] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T15:19:38.774 [DEBUG] [Thread-130039] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:19:38.774 [DEBUG] [Thread-130039] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T15:19:38.774 [DEBUG] [Thread-130039] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:19:38.774 [DEBUG] [Thread-130039] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:19:38.775 [DEBUG] [Thread-130039] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:19:38.775 [DEBUG] [Thread-130039] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:19:38.775 [DEBUG] [Thread-130039] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:19:38.775 [DEBUG] [Thread-130039] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:19:38.775 [DEBUG] [Thread-130039] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:19:38.775 [DEBUG] [Thread-130039] [transport.py] [_log()] client lang: <none>
2025-12-31T15:19:38.775 [DEBUG] [Thread-130039] [transport.py] [_log()] server lang: <none>
2025-12-31T15:19:38.775 [DEBUG] [Thread-130039] [transport.py] [_log()] kex follows: False
2025-12-31T15:19:38.775 [DEBUG] [Thread-130039] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:19:38.776 [DEBUG] [Thread-130039] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:19:38.776 [DEBUG] [Thread-130039] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:19:38.776 [DEBUG] [Thread-130039] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:19:38.776 [DEBUG] [Thread-130039] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:19:38.776 [DEBUG] [Thread-130039] [transport.py] [_log()] Compression: none
2025-12-31T15:19:38.776 [DEBUG] [Thread-130039] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:19:38.832 [DEBUG] [Thread-130039] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:19:38.833 [DEBUG] [Thread-130039] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:19:38.834 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T15:19:38.834 [DEBUG] [Thread-130039] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T15:19:38.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:19:38.888 [DEBUG] [Thread-130039] [transport.py] [_log()] userauth is OK
2025-12-31T15:19:38.889 [DEBUG] [Thread-130039] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:19:38.889 [DEBUG] [Thread-130039] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:19:38.889 [DEBUG] [Thread-130039] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T15:19:38.889 [DEBUG] [Thread-130039] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:19:38.909 [INFO] [Thread-130039] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:19:38.909 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T15:19:38.910 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:19:39.752 [DEBUG] [Thread-130039] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:19:39.752 [DEBUG] [Thread-130039] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:19:39.801 [DEBUG] [Thread-130039] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:19:39.801 [DEBUG] [Thread-130039] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:19:39.810 [DEBUG] [Thread-130039] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:19:39.818 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:19:39.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T15:19:39.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T15:19:39.833 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:19:39.833 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:19:39.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:19:39.841 [DEBUG] [Thread-130039] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:19:39.936 [DEBUG] [Thread-130041 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:19:54.976 [DEBUG] [Thread-130042 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:20:06.460 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:20:06.461 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:20:09.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T15:20:09.836 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T15:20:09.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T15:20:10.006 [DEBUG] [Thread-130043 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:20:10.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 15, 19, 39), 33.48, 10.78, 0.0, 29.45, 27.0, 0, 0, 0, 2, 0, 0),)
2025-12-31T15:20:10.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 15:19:39
2025-12-31T15:20:10.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T15:20:10.820 [DEBUG] [Thread-130044] [transport.py] [_log()] starting thread (client mode): 0xb6bba7d0
2025-12-31T15:20:10.820 [DEBUG] [Thread-130044] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:20:10.841 [DEBUG] [Thread-130044] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T15:20:10.841 [INFO] [Thread-130044] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T15:20:10.844 [DEBUG] [Thread-130044] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:20:10.844 [DEBUG] [Thread-130044] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T15:20:10.844 [DEBUG] [Thread-130044] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:20:10.844 [DEBUG] [Thread-130044] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:20:10.844 [DEBUG] [Thread-130044] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:20:10.844 [DEBUG] [Thread-130044] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:20:10.844 [DEBUG] [Thread-130044] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:20:10.844 [DEBUG] [Thread-130044] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:20:10.844 [DEBUG] [Thread-130044] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:20:10.844 [DEBUG] [Thread-130044] [transport.py] [_log()] client lang: <none>
2025-12-31T15:20:10.844 [DEBUG] [Thread-130044] [transport.py] [_log()] server lang: <none>
2025-12-31T15:20:10.844 [DEBUG] [Thread-130044] [transport.py] [_log()] kex follows: False
2025-12-31T15:20:10.845 [DEBUG] [Thread-130044] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:20:10.845 [DEBUG] [Thread-130044] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:20:10.845 [DEBUG] [Thread-130044] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:20:10.845 [DEBUG] [Thread-130044] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:20:10.845 [DEBUG] [Thread-130044] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:20:10.845 [DEBUG] [Thread-130044] [transport.py] [_log()] Compression: none
2025-12-31T15:20:10.845 [DEBUG] [Thread-130044] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:20:10.865 [DEBUG] [Thread-130044] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:20:10.865 [DEBUG] [Thread-130044] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:20:10.866 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T15:20:10.866 [DEBUG] [Thread-130044] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T15:20:10.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:20:10.868 [DEBUG] [Thread-130044] [transport.py] [_log()] userauth is OK
2025-12-31T15:20:10.868 [DEBUG] [Thread-130044] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:20:10.868 [DEBUG] [Thread-130044] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:20:10.869 [DEBUG] [Thread-130044] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T15:20:10.869 [DEBUG] [Thread-130044] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:20:10.893 [INFO] [Thread-130044] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:20:10.893 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:20:15.327 [DEBUG] [Thread-130044] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:20:15.327 [DEBUG] [Thread-130044] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:20:15.328 [DEBUG] [Thread-130044] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T15:20:15.369 [DEBUG] [Thread-130044] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:20:15.369 [DEBUG] [Thread-130044] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:20:15.372 [DEBUG] [Thread-130044] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:20:15.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:20:15.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T15:20:15.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T15:20:15.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T15:20:15.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:20:15.527 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T15:20:15.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:20:15.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:20:15.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T15:20:15.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.555003 -999.00  +26.30  30.24     16   -0.80 1 1 2 1 1   888    0 28.30 40.36 ----- 29.0 30.2 301.4 43.2 31.6 -23.8 31.2 -24.5 31.4 -23.1 32.2 -22.4
2025-12-31T15:20:15.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T15:20:15.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T15:20:15.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.555003
2025-12-31T15:20:15.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T15:20:15.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T15:20:15.529 [DEBUG] [Thread-130044] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:20:15.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T15:20:15.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T15:20:15.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T15:20:15.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T15:19:39', tmtdew=33.48, humidity=10.78, cloud=0.0, wind=29.45, temperature=27.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T13:19:12.259', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T15:20:15.615 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T15:20:15.627 [DEBUG] [Thread-130047] [transport.py] [_log()] starting thread (client mode): 0xb6b17b80
2025-12-31T15:20:15.627 [DEBUG] [Thread-130047] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:20:15.643 [DEBUG] [Thread-130047] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T15:20:15.643 [INFO] [Thread-130047] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T15:20:15.651 [DEBUG] [Thread-130047] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:20:15.651 [DEBUG] [Thread-130047] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T15:20:15.651 [DEBUG] [Thread-130047] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:20:15.651 [DEBUG] [Thread-130047] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:20:15.651 [DEBUG] [Thread-130047] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:20:15.651 [DEBUG] [Thread-130047] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:20:15.651 [DEBUG] [Thread-130047] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:20:15.651 [DEBUG] [Thread-130047] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:20:15.651 [DEBUG] [Thread-130047] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:20:15.651 [DEBUG] [Thread-130047] [transport.py] [_log()] client lang: <none>
2025-12-31T15:20:15.651 [DEBUG] [Thread-130047] [transport.py] [_log()] server lang: <none>
2025-12-31T15:20:15.651 [DEBUG] [Thread-130047] [transport.py] [_log()] kex follows: False
2025-12-31T15:20:15.651 [DEBUG] [Thread-130047] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:20:15.651 [DEBUG] [Thread-130047] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:20:15.651 [DEBUG] [Thread-130047] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:20:15.651 [DEBUG] [Thread-130047] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:20:15.651 [DEBUG] [Thread-130047] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:20:15.651 [DEBUG] [Thread-130047] [transport.py] [_log()] Compression: none
2025-12-31T15:20:15.651 [DEBUG] [Thread-130047] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:20:15.706 [DEBUG] [Thread-130047] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:20:15.706 [DEBUG] [Thread-130047] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:20:15.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T15:20:15.707 [DEBUG] [Thread-130047] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T15:20:15.708 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:20:15.764 [DEBUG] [Thread-130047] [transport.py] [_log()] userauth is OK
2025-12-31T15:20:15.764 [DEBUG] [Thread-130047] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:20:15.764 [DEBUG] [Thread-130047] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:20:15.764 [DEBUG] [Thread-130047] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T15:20:15.764 [DEBUG] [Thread-130047] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:20:15.783 [INFO] [Thread-130047] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:20:15.783 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T15:20:15.783 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:20:16.623 [DEBUG] [Thread-130047] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:20:16.624 [DEBUG] [Thread-130047] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:20:16.672 [DEBUG] [Thread-130047] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:20:16.672 [DEBUG] [Thread-130047] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:20:16.681 [DEBUG] [Thread-130047] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:20:16.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:20:16.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T15:20:16.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T15:20:16.716 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:20:16.716 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:20:16.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:20:16.725 [DEBUG] [Thread-130047] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:20:21.036 [DEBUG] [Thread-130049 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:20:25.037 [DEBUG] [Thread-130050 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:20:40.088 [DEBUG] [Thread-130051 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:20:46.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T15:20:46.722 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T15:20:46.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T15:20:47.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 15, 20, 43), 33.02, 10.89, 0.0, 34.67, 26.68, 0, 0, 0, 2, 0, 0),)
2025-12-31T15:20:47.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 15:20:43
2025-12-31T15:20:47.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T15:20:47.731 [DEBUG] [Thread-130052] [transport.py] [_log()] starting thread (client mode): 0xb6bb0730
2025-12-31T15:20:47.731 [DEBUG] [Thread-130052] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:20:47.752 [DEBUG] [Thread-130052] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T15:20:47.752 [INFO] [Thread-130052] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T15:20:47.755 [DEBUG] [Thread-130052] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:20:47.755 [DEBUG] [Thread-130052] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T15:20:47.755 [DEBUG] [Thread-130052] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:20:47.755 [DEBUG] [Thread-130052] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:20:47.755 [DEBUG] [Thread-130052] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:20:47.755 [DEBUG] [Thread-130052] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:20:47.755 [DEBUG] [Thread-130052] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:20:47.755 [DEBUG] [Thread-130052] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:20:47.755 [DEBUG] [Thread-130052] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:20:47.755 [DEBUG] [Thread-130052] [transport.py] [_log()] client lang: <none>
2025-12-31T15:20:47.755 [DEBUG] [Thread-130052] [transport.py] [_log()] server lang: <none>
2025-12-31T15:20:47.755 [DEBUG] [Thread-130052] [transport.py] [_log()] kex follows: False
2025-12-31T15:20:47.755 [DEBUG] [Thread-130052] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:20:47.755 [DEBUG] [Thread-130052] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:20:47.755 [DEBUG] [Thread-130052] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:20:47.755 [DEBUG] [Thread-130052] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:20:47.755 [DEBUG] [Thread-130052] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:20:47.755 [DEBUG] [Thread-130052] [transport.py] [_log()] Compression: none
2025-12-31T15:20:47.755 [DEBUG] [Thread-130052] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:20:47.764 [DEBUG] [Thread-130052] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:20:47.764 [DEBUG] [Thread-130052] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:20:47.765 [DEBUG] [Thread-130052] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T15:20:47.765 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T15:20:47.766 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:20:47.767 [DEBUG] [Thread-130052] [transport.py] [_log()] userauth is OK
2025-12-31T15:20:47.767 [DEBUG] [Thread-130052] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:20:47.767 [DEBUG] [Thread-130052] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:20:47.767 [DEBUG] [Thread-130052] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T15:20:47.767 [DEBUG] [Thread-130052] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:20:47.792 [INFO] [Thread-130052] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:20:47.793 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:20:48.372 [DEBUG] [Thread-130052] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:20:48.373 [DEBUG] [Thread-130052] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:20:48.373 [DEBUG] [Thread-130052] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T15:20:48.414 [DEBUG] [Thread-130052] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:20:48.414 [DEBUG] [Thread-130052] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:20:48.418 [DEBUG] [Thread-130052] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:20:48.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:20:48.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T15:20:48.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T15:20:48.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T15:20:48.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:20:48.444 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T15:20:48.444 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:20:48.444 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:20:48.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T15:20:48.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.555350 -999.00  +26.00  31.64     17   -0.50 1 2 2 1 1   888    0 27.79 22.11 ----- 35.9 31.6 297.8 36.0 31.2 -25.9 31.1 -23.2 31.4 -21.2 31.9 -25.0
2025-12-31T15:20:48.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T15:20:48.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T15:20:48.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.555350
2025-12-31T15:20:48.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T15:20:48.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T15:20:48.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T15:20:48.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T15:20:48.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T15:20:48.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T15:20:43', tmtdew=33.02, humidity=10.89, cloud=0.0, wind=34.67, temperature=26.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T13:19:42.240', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T15:20:48.446 [DEBUG] [Thread-130052] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:20:48.529 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T15:20:48.542 [DEBUG] [Thread-130055] [transport.py] [_log()] starting thread (client mode): 0xb6bb0af0
2025-12-31T15:20:48.542 [DEBUG] [Thread-130055] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:20:48.558 [DEBUG] [Thread-130055] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T15:20:48.558 [INFO] [Thread-130055] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T15:20:48.565 [DEBUG] [Thread-130055] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:20:48.565 [DEBUG] [Thread-130055] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T15:20:48.566 [DEBUG] [Thread-130055] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:20:48.566 [DEBUG] [Thread-130055] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:20:48.566 [DEBUG] [Thread-130055] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:20:48.566 [DEBUG] [Thread-130055] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:20:48.566 [DEBUG] [Thread-130055] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:20:48.566 [DEBUG] [Thread-130055] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:20:48.566 [DEBUG] [Thread-130055] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:20:48.567 [DEBUG] [Thread-130055] [transport.py] [_log()] client lang: <none>
2025-12-31T15:20:48.567 [DEBUG] [Thread-130055] [transport.py] [_log()] server lang: <none>
2025-12-31T15:20:48.567 [DEBUG] [Thread-130055] [transport.py] [_log()] kex follows: False
2025-12-31T15:20:48.567 [DEBUG] [Thread-130055] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:20:48.567 [DEBUG] [Thread-130055] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:20:48.567 [DEBUG] [Thread-130055] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:20:48.567 [DEBUG] [Thread-130055] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:20:48.567 [DEBUG] [Thread-130055] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:20:48.567 [DEBUG] [Thread-130055] [transport.py] [_log()] Compression: none
2025-12-31T15:20:48.567 [DEBUG] [Thread-130055] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:20:48.622 [DEBUG] [Thread-130055] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:20:48.623 [DEBUG] [Thread-130055] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:20:48.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T15:20:48.624 [DEBUG] [Thread-130055] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T15:20:48.625 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:20:48.679 [DEBUG] [Thread-130055] [transport.py] [_log()] userauth is OK
2025-12-31T15:20:48.679 [DEBUG] [Thread-130055] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:20:48.679 [DEBUG] [Thread-130055] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:20:48.679 [DEBUG] [Thread-130055] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T15:20:48.679 [DEBUG] [Thread-130055] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:20:48.698 [INFO] [Thread-130055] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:20:48.699 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T15:20:48.699 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:20:49.541 [DEBUG] [Thread-130055] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:20:49.541 [DEBUG] [Thread-130055] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:20:49.589 [DEBUG] [Thread-130055] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:20:49.589 [DEBUG] [Thread-130055] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:20:49.598 [DEBUG] [Thread-130055] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:20:49.608 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:20:49.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T15:20:49.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T15:20:49.626 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:20:49.626 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:20:49.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:20:49.634 [DEBUG] [Thread-130055] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:20:55.119 [DEBUG] [Thread-130057 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:21:06.603 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:21:06.604 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:21:10.180 [DEBUG] [Thread-130058 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:21:19.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T15:21:19.657 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T15:21:19.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T15:21:20.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 15, 21, 15), 32.8, 11.04, 0.0, 37.74, 26.52, 0, 0, 0, 2, 0, 0),)
2025-12-31T15:21:20.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 15:21:15
2025-12-31T15:21:20.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T15:21:20.680 [DEBUG] [Thread-130059] [transport.py] [_log()] starting thread (client mode): 0xb6ba10f0
2025-12-31T15:21:20.680 [DEBUG] [Thread-130059] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:21:20.700 [DEBUG] [Thread-130059] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T15:21:20.700 [INFO] [Thread-130059] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T15:21:20.703 [DEBUG] [Thread-130059] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:21:20.703 [DEBUG] [Thread-130059] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T15:21:20.703 [DEBUG] [Thread-130059] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:21:20.703 [DEBUG] [Thread-130059] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:21:20.703 [DEBUG] [Thread-130059] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:21:20.703 [DEBUG] [Thread-130059] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:21:20.703 [DEBUG] [Thread-130059] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:21:20.703 [DEBUG] [Thread-130059] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:21:20.703 [DEBUG] [Thread-130059] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:21:20.703 [DEBUG] [Thread-130059] [transport.py] [_log()] client lang: <none>
2025-12-31T15:21:20.703 [DEBUG] [Thread-130059] [transport.py] [_log()] server lang: <none>
2025-12-31T15:21:20.703 [DEBUG] [Thread-130059] [transport.py] [_log()] kex follows: False
2025-12-31T15:21:20.703 [DEBUG] [Thread-130059] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:21:20.703 [DEBUG] [Thread-130059] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:21:20.703 [DEBUG] [Thread-130059] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:21:20.703 [DEBUG] [Thread-130059] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:21:20.703 [DEBUG] [Thread-130059] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:21:20.703 [DEBUG] [Thread-130059] [transport.py] [_log()] Compression: none
2025-12-31T15:21:20.703 [DEBUG] [Thread-130059] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:21:20.721 [DEBUG] [Thread-130059] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:21:20.721 [DEBUG] [Thread-130059] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:21:20.721 [DEBUG] [Thread-130059] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T15:21:20.721 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T15:21:20.721 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:21:20.721 [DEBUG] [Thread-130059] [transport.py] [_log()] userauth is OK
2025-12-31T15:21:20.721 [DEBUG] [Thread-130059] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:21:20.721 [DEBUG] [Thread-130059] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:21:20.721 [DEBUG] [Thread-130059] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T15:21:20.721 [DEBUG] [Thread-130059] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:21:20.730 [INFO] [Thread-130059] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:21:20.730 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:21:21.064 [DEBUG] [Thread-130061 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:21:21.490 [DEBUG] [Thread-130059] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:21:21.490 [DEBUG] [Thread-130059] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:21:21.490 [DEBUG] [Thread-130059] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T15:21:21.530 [DEBUG] [Thread-130059] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:21:21.531 [DEBUG] [Thread-130059] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:21:21.533 [DEBUG] [Thread-130059] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:21:21.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:21:21.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T15:21:21.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T15:21:21.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T15:21:21.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:21:21.559 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T15:21:21.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:21:21.559 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:21:21.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T15:21:21.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.556044 -999.00  +25.90  27.97     16   -1.30 1 1 1 1 1   888    0 26.88 -3.10 ----- 31.1 28.0 290.0 39.5 30.9 -24.7 30.8 -23.5 30.7 -23.5 31.5 -24.4
2025-12-31T15:21:21.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T15:21:21.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T15:21:21.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.556044
2025-12-31T15:21:21.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T15:21:21.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T15:21:21.561 [DEBUG] [Thread-130059] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:21:21.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T15:21:21.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T15:21:21.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T15:21:21.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T15:21:15', tmtdew=32.8, humidity=11.04, cloud=0.0, wind=37.74, temperature=26.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T13:20:42.202', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T15:21:21.646 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T15:21:21.657 [DEBUG] [Thread-130063] [transport.py] [_log()] starting thread (client mode): 0xb6ba3520
2025-12-31T15:21:21.657 [DEBUG] [Thread-130063] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:21:21.671 [DEBUG] [Thread-130063] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T15:21:21.671 [INFO] [Thread-130063] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T15:21:21.678 [DEBUG] [Thread-130063] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:21:21.678 [DEBUG] [Thread-130063] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T15:21:21.678 [DEBUG] [Thread-130063] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:21:21.678 [DEBUG] [Thread-130063] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:21:21.678 [DEBUG] [Thread-130063] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:21:21.678 [DEBUG] [Thread-130063] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:21:21.678 [DEBUG] [Thread-130063] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:21:21.678 [DEBUG] [Thread-130063] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:21:21.678 [DEBUG] [Thread-130063] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:21:21.678 [DEBUG] [Thread-130063] [transport.py] [_log()] client lang: <none>
2025-12-31T15:21:21.678 [DEBUG] [Thread-130063] [transport.py] [_log()] server lang: <none>
2025-12-31T15:21:21.679 [DEBUG] [Thread-130063] [transport.py] [_log()] kex follows: False
2025-12-31T15:21:21.679 [DEBUG] [Thread-130063] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:21:21.679 [DEBUG] [Thread-130063] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:21:21.679 [DEBUG] [Thread-130063] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:21:21.679 [DEBUG] [Thread-130063] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:21:21.679 [DEBUG] [Thread-130063] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:21:21.679 [DEBUG] [Thread-130063] [transport.py] [_log()] Compression: none
2025-12-31T15:21:21.679 [DEBUG] [Thread-130063] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:21:21.736 [DEBUG] [Thread-130063] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:21:21.736 [DEBUG] [Thread-130063] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:21:21.736 [DEBUG] [Thread-130063] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T15:21:21.736 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T15:21:21.736 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:21:21.794 [DEBUG] [Thread-130063] [transport.py] [_log()] userauth is OK
2025-12-31T15:21:21.794 [DEBUG] [Thread-130063] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:21:21.794 [DEBUG] [Thread-130063] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:21:21.795 [DEBUG] [Thread-130063] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T15:21:21.795 [DEBUG] [Thread-130063] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:21:21.818 [INFO] [Thread-130063] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:21:21.818 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T15:21:21.819 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:21:22.601 [DEBUG] [Thread-130063] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:21:22.601 [DEBUG] [Thread-130063] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:21:22.648 [DEBUG] [Thread-130063] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:21:22.649 [DEBUG] [Thread-130063] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:21:22.657 [DEBUG] [Thread-130063] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:21:22.667 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:21:22.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T15:21:22.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T15:21:22.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:21:22.686 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:21:22.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:21:22.694 [DEBUG] [Thread-130063] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:21:25.213 [DEBUG] [Thread-130065 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:21:40.265 [DEBUG] [Thread-130066 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:21:52.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T15:21:52.696 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T15:21:52.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T15:21:53.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 15, 21, 47), 31.82, 12.04, 0.0, 30.33, 26.18, 0, 0, 0, 2, 0, 0),)
2025-12-31T15:21:53.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 15:21:47
2025-12-31T15:21:53.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T15:21:53.690 [DEBUG] [Thread-130067] [transport.py] [_log()] starting thread (client mode): 0xb95d44f0
2025-12-31T15:21:53.690 [DEBUG] [Thread-130067] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:21:53.712 [DEBUG] [Thread-130067] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T15:21:53.712 [INFO] [Thread-130067] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T15:21:53.716 [DEBUG] [Thread-130067] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:21:53.716 [DEBUG] [Thread-130067] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T15:21:53.716 [DEBUG] [Thread-130067] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:21:53.716 [DEBUG] [Thread-130067] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:21:53.716 [DEBUG] [Thread-130067] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:21:53.716 [DEBUG] [Thread-130067] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:21:53.716 [DEBUG] [Thread-130067] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:21:53.716 [DEBUG] [Thread-130067] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:21:53.716 [DEBUG] [Thread-130067] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:21:53.716 [DEBUG] [Thread-130067] [transport.py] [_log()] client lang: <none>
2025-12-31T15:21:53.716 [DEBUG] [Thread-130067] [transport.py] [_log()] server lang: <none>
2025-12-31T15:21:53.716 [DEBUG] [Thread-130067] [transport.py] [_log()] kex follows: False
2025-12-31T15:21:53.716 [DEBUG] [Thread-130067] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:21:53.716 [DEBUG] [Thread-130067] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:21:53.716 [DEBUG] [Thread-130067] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:21:53.716 [DEBUG] [Thread-130067] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:21:53.716 [DEBUG] [Thread-130067] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:21:53.716 [DEBUG] [Thread-130067] [transport.py] [_log()] Compression: none
2025-12-31T15:21:53.716 [DEBUG] [Thread-130067] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:21:53.736 [DEBUG] [Thread-130067] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:21:53.736 [DEBUG] [Thread-130067] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:21:53.737 [DEBUG] [Thread-130067] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T15:21:53.737 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T15:21:53.738 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:21:53.739 [DEBUG] [Thread-130067] [transport.py] [_log()] userauth is OK
2025-12-31T15:21:53.739 [DEBUG] [Thread-130067] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:21:53.739 [DEBUG] [Thread-130067] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:21:53.740 [DEBUG] [Thread-130067] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T15:21:53.740 [DEBUG] [Thread-130067] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:21:53.762 [INFO] [Thread-130067] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:21:53.763 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:21:54.414 [DEBUG] [Thread-130067] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:21:54.415 [DEBUG] [Thread-130067] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:21:54.415 [DEBUG] [Thread-130067] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T15:21:54.455 [DEBUG] [Thread-130067] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:21:54.455 [DEBUG] [Thread-130067] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:21:54.457 [DEBUG] [Thread-130067] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:21:54.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:21:54.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T15:21:54.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T15:21:54.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T15:21:54.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:21:54.475 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T15:21:54.475 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:21:54.475 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:21:54.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T15:21:54.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.556391 -999.00  +26.20  36.50     16   -0.70 1 1 2 1 1   888    0 26.77 -9.34 ----- 35.7 36.5 290.2 39.6 30.7 -23.7 30.7 -23.2 30.6 -24.6 31.2 -23.2
2025-12-31T15:21:54.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T15:21:54.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T15:21:54.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.556391
2025-12-31T15:21:54.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T15:21:54.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T15:21:54.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T15:21:54.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T15:21:54.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T15:21:54.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T15:21:47', tmtdew=31.82, humidity=12.04, cloud=0.0, wind=30.33, temperature=26.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T13:21:12.182', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T15:21:54.476 [DEBUG] [Thread-130067] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:21:54.550 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T15:21:54.563 [DEBUG] [Thread-130070] [transport.py] [_log()] starting thread (client mode): 0xb6b2a8c0
2025-12-31T15:21:54.563 [DEBUG] [Thread-130070] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:21:54.579 [DEBUG] [Thread-130070] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T15:21:54.579 [INFO] [Thread-130070] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T15:21:54.586 [DEBUG] [Thread-130070] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:21:54.586 [DEBUG] [Thread-130070] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T15:21:54.586 [DEBUG] [Thread-130070] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:21:54.586 [DEBUG] [Thread-130070] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:21:54.586 [DEBUG] [Thread-130070] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:21:54.586 [DEBUG] [Thread-130070] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:21:54.586 [DEBUG] [Thread-130070] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:21:54.586 [DEBUG] [Thread-130070] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:21:54.586 [DEBUG] [Thread-130070] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:21:54.586 [DEBUG] [Thread-130070] [transport.py] [_log()] client lang: <none>
2025-12-31T15:21:54.586 [DEBUG] [Thread-130070] [transport.py] [_log()] server lang: <none>
2025-12-31T15:21:54.586 [DEBUG] [Thread-130070] [transport.py] [_log()] kex follows: False
2025-12-31T15:21:54.586 [DEBUG] [Thread-130070] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:21:54.586 [DEBUG] [Thread-130070] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:21:54.586 [DEBUG] [Thread-130070] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:21:54.586 [DEBUG] [Thread-130070] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:21:54.587 [DEBUG] [Thread-130070] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:21:54.587 [DEBUG] [Thread-130070] [transport.py] [_log()] Compression: none
2025-12-31T15:21:54.587 [DEBUG] [Thread-130070] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:21:54.643 [DEBUG] [Thread-130070] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:21:54.643 [DEBUG] [Thread-130070] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:21:54.644 [DEBUG] [Thread-130070] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T15:21:54.644 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T15:21:54.644 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:21:54.701 [DEBUG] [Thread-130070] [transport.py] [_log()] userauth is OK
2025-12-31T15:21:54.701 [DEBUG] [Thread-130070] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:21:54.701 [DEBUG] [Thread-130070] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:21:54.701 [DEBUG] [Thread-130070] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T15:21:54.701 [DEBUG] [Thread-130070] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:21:54.715 [INFO] [Thread-130070] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:21:54.715 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T15:21:54.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:21:55.299 [DEBUG] [Thread-130072 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:21:55.539 [DEBUG] [Thread-130070] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:21:55.539 [DEBUG] [Thread-130070] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:21:55.586 [DEBUG] [Thread-130070] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:21:55.587 [DEBUG] [Thread-130070] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:21:55.595 [DEBUG] [Thread-130070] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:21:55.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:21:55.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T15:21:55.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T15:21:55.618 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:21:55.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:21:55.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:21:55.626 [DEBUG] [Thread-130070] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:22:06.744 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:22:06.745 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:22:10.338 [DEBUG] [Thread-130073 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:22:21.098 [DEBUG] [Thread-130074 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:22:25.372 [DEBUG] [Thread-130075 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:22:25.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T15:22:25.629 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T15:22:25.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-12-31T15:22:26.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 15, 22, 19), 31.69, 12.19, 0.0, 34.02, 26.37, 0, 0, 0, 2, 0, 0),)
2025-12-31T15:22:26.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 15:22:19
2025-12-31T15:22:26.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T15:22:26.605 [DEBUG] [Thread-130076] [transport.py] [_log()] starting thread (client mode): 0xb9559240
2025-12-31T15:22:26.605 [DEBUG] [Thread-130076] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:22:26.625 [DEBUG] [Thread-130076] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T15:22:26.625 [INFO] [Thread-130076] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T15:22:26.628 [DEBUG] [Thread-130076] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:22:26.628 [DEBUG] [Thread-130076] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T15:22:26.629 [DEBUG] [Thread-130076] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:22:26.629 [DEBUG] [Thread-130076] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:22:26.629 [DEBUG] [Thread-130076] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:22:26.629 [DEBUG] [Thread-130076] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:22:26.629 [DEBUG] [Thread-130076] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:22:26.629 [DEBUG] [Thread-130076] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:22:26.629 [DEBUG] [Thread-130076] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:22:26.629 [DEBUG] [Thread-130076] [transport.py] [_log()] client lang: <none>
2025-12-31T15:22:26.629 [DEBUG] [Thread-130076] [transport.py] [_log()] server lang: <none>
2025-12-31T15:22:26.629 [DEBUG] [Thread-130076] [transport.py] [_log()] kex follows: False
2025-12-31T15:22:26.629 [DEBUG] [Thread-130076] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:22:26.629 [DEBUG] [Thread-130076] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:22:26.629 [DEBUG] [Thread-130076] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:22:26.629 [DEBUG] [Thread-130076] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:22:26.629 [DEBUG] [Thread-130076] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:22:26.629 [DEBUG] [Thread-130076] [transport.py] [_log()] Compression: none
2025-12-31T15:22:26.629 [DEBUG] [Thread-130076] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:22:26.646 [DEBUG] [Thread-130076] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:22:26.647 [DEBUG] [Thread-130076] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:22:26.647 [DEBUG] [Thread-130076] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T15:22:26.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T15:22:26.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:22:26.649 [DEBUG] [Thread-130076] [transport.py] [_log()] userauth is OK
2025-12-31T15:22:26.650 [DEBUG] [Thread-130076] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:22:26.650 [DEBUG] [Thread-130076] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:22:26.650 [DEBUG] [Thread-130076] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T15:22:26.650 [DEBUG] [Thread-130076] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:22:26.674 [INFO] [Thread-130076] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:22:26.675 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:22:27.444 [DEBUG] [Thread-130076] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:22:27.445 [DEBUG] [Thread-130076] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:22:27.445 [DEBUG] [Thread-130076] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T15:22:27.486 [DEBUG] [Thread-130076] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:22:27.487 [DEBUG] [Thread-130076] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:22:27.495 [DEBUG] [Thread-130076] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:22:27.507 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:22:27.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T15:22:27.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T15:22:27.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T15:22:27.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:22:27.523 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T15:22:27.523 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:22:27.523 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:22:27.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T15:22:27.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.556739 -999.00  +25.60  32.76     17   -0.70 1 2 2 1 1   888    0 26.58 -17.86 ----- 32.4 32.8 293.0 35.2 30.6 -24.9 30.5 -23.1 30.4 -21.8 31.0 -23.6
2025-12-31T15:22:27.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T15:22:27.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T15:22:27.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.556739
2025-12-31T15:22:27.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T15:22:27.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T15:22:27.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T15:22:27.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T15:22:27.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T15:22:27.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T15:22:19', tmtdew=31.69, humidity=12.19, cloud=0.0, wind=34.02, temperature=26.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T13:21:42.250', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T15:22:27.526 [DEBUG] [Thread-130076] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:22:27.614 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T15:22:27.626 [DEBUG] [Thread-130079] [transport.py] [_log()] starting thread (client mode): 0xb6bba890
2025-12-31T15:22:27.626 [DEBUG] [Thread-130079] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:22:27.641 [DEBUG] [Thread-130079] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T15:22:27.642 [INFO] [Thread-130079] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T15:22:27.649 [DEBUG] [Thread-130079] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:22:27.649 [DEBUG] [Thread-130079] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T15:22:27.650 [DEBUG] [Thread-130079] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:22:27.650 [DEBUG] [Thread-130079] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:22:27.650 [DEBUG] [Thread-130079] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:22:27.650 [DEBUG] [Thread-130079] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:22:27.650 [DEBUG] [Thread-130079] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:22:27.650 [DEBUG] [Thread-130079] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:22:27.650 [DEBUG] [Thread-130079] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:22:27.650 [DEBUG] [Thread-130079] [transport.py] [_log()] client lang: <none>
2025-12-31T15:22:27.651 [DEBUG] [Thread-130079] [transport.py] [_log()] server lang: <none>
2025-12-31T15:22:27.651 [DEBUG] [Thread-130079] [transport.py] [_log()] kex follows: False
2025-12-31T15:22:27.651 [DEBUG] [Thread-130079] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:22:27.651 [DEBUG] [Thread-130079] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:22:27.651 [DEBUG] [Thread-130079] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:22:27.651 [DEBUG] [Thread-130079] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:22:27.651 [DEBUG] [Thread-130079] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:22:27.652 [DEBUG] [Thread-130079] [transport.py] [_log()] Compression: none
2025-12-31T15:22:27.652 [DEBUG] [Thread-130079] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:22:27.714 [DEBUG] [Thread-130079] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:22:27.715 [DEBUG] [Thread-130079] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:22:27.715 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T15:22:27.716 [DEBUG] [Thread-130079] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T15:22:27.717 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:22:27.773 [DEBUG] [Thread-130079] [transport.py] [_log()] userauth is OK
2025-12-31T15:22:27.773 [DEBUG] [Thread-130079] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:22:27.773 [DEBUG] [Thread-130079] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:22:27.773 [DEBUG] [Thread-130079] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T15:22:27.773 [DEBUG] [Thread-130079] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:22:27.792 [INFO] [Thread-130079] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:22:27.792 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T15:22:27.793 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:22:28.650 [DEBUG] [Thread-130079] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:22:28.651 [DEBUG] [Thread-130079] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:22:28.698 [DEBUG] [Thread-130079] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:22:28.698 [DEBUG] [Thread-130079] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:22:28.707 [DEBUG] [Thread-130079] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:22:28.716 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:22:28.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T15:22:28.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T15:22:28.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:22:28.736 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:22:28.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:22:28.744 [DEBUG] [Thread-130079] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:22:40.409 [DEBUG] [Thread-130081 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:22:55.461 [DEBUG] [Thread-130082 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:22:58.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T15:22:58.767 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T15:22:58.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T15:22:59.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 15, 22, 51), 31.43, 12.44, 0.0, 28.25, 26.65, 0, 0, 0, 2, 0, 0),)
2025-12-31T15:22:59.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 15:22:51
2025-12-31T15:22:59.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T15:22:59.745 [DEBUG] [Thread-130083] [transport.py] [_log()] starting thread (client mode): 0xbbfcf610
2025-12-31T15:22:59.745 [DEBUG] [Thread-130083] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:22:59.766 [DEBUG] [Thread-130083] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T15:22:59.766 [INFO] [Thread-130083] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T15:22:59.770 [DEBUG] [Thread-130083] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:22:59.770 [DEBUG] [Thread-130083] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T15:22:59.770 [DEBUG] [Thread-130083] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:22:59.770 [DEBUG] [Thread-130083] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:22:59.770 [DEBUG] [Thread-130083] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:22:59.770 [DEBUG] [Thread-130083] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:22:59.770 [DEBUG] [Thread-130083] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:22:59.770 [DEBUG] [Thread-130083] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:22:59.770 [DEBUG] [Thread-130083] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:22:59.770 [DEBUG] [Thread-130083] [transport.py] [_log()] client lang: <none>
2025-12-31T15:22:59.770 [DEBUG] [Thread-130083] [transport.py] [_log()] server lang: <none>
2025-12-31T15:22:59.770 [DEBUG] [Thread-130083] [transport.py] [_log()] kex follows: False
2025-12-31T15:22:59.770 [DEBUG] [Thread-130083] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:22:59.770 [DEBUG] [Thread-130083] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:22:59.771 [DEBUG] [Thread-130083] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:22:59.771 [DEBUG] [Thread-130083] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:22:59.771 [DEBUG] [Thread-130083] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:22:59.771 [DEBUG] [Thread-130083] [transport.py] [_log()] Compression: none
2025-12-31T15:22:59.771 [DEBUG] [Thread-130083] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:22:59.788 [DEBUG] [Thread-130083] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:22:59.788 [DEBUG] [Thread-130083] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:22:59.789 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T15:22:59.789 [DEBUG] [Thread-130083] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T15:22:59.790 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:22:59.792 [DEBUG] [Thread-130083] [transport.py] [_log()] userauth is OK
2025-12-31T15:22:59.792 [DEBUG] [Thread-130083] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:22:59.792 [DEBUG] [Thread-130083] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:22:59.792 [DEBUG] [Thread-130083] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T15:22:59.793 [DEBUG] [Thread-130083] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:22:59.817 [INFO] [Thread-130083] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:22:59.818 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:23:00.497 [DEBUG] [Thread-130083] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:23:00.497 [DEBUG] [Thread-130083] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:23:00.498 [DEBUG] [Thread-130083] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T15:23:00.538 [DEBUG] [Thread-130083] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:23:00.539 [DEBUG] [Thread-130083] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:23:00.543 [DEBUG] [Thread-130083] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:23:00.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:23:00.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T15:23:00.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T15:23:00.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T15:23:00.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:23:00.573 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T15:23:00.573 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:23:00.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:23:00.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T15:23:00.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.557086 -999.00  +26.10  24.37     18   +0.00 1 2 1 1 1   888    0 26.88 -33.19 ----- 26.9 24.4 301.4 39.0 30.4 -23.6 30.4 -21.8 30.4 -20.3 30.8 -22.9
2025-12-31T15:23:00.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T15:23:00.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T15:23:00.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.557086
2025-12-31T15:23:00.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T15:23:00.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T15:23:00.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T15:23:00.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T15:23:00.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T15:23:00.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T15:22:51', tmtdew=31.43, humidity=12.44, cloud=0.0, wind=28.25, temperature=26.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T13:22:12.230', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T15:23:00.575 [DEBUG] [Thread-130083] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:23:00.658 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T15:23:00.671 [DEBUG] [Thread-130086] [transport.py] [_log()] starting thread (client mode): 0xb955a7a0
2025-12-31T15:23:00.671 [DEBUG] [Thread-130086] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:23:00.685 [DEBUG] [Thread-130086] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T15:23:00.686 [INFO] [Thread-130086] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T15:23:00.693 [DEBUG] [Thread-130086] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:23:00.693 [DEBUG] [Thread-130086] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T15:23:00.693 [DEBUG] [Thread-130086] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:23:00.694 [DEBUG] [Thread-130086] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:23:00.694 [DEBUG] [Thread-130086] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:23:00.694 [DEBUG] [Thread-130086] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:23:00.694 [DEBUG] [Thread-130086] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:23:00.694 [DEBUG] [Thread-130086] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:23:00.694 [DEBUG] [Thread-130086] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:23:00.694 [DEBUG] [Thread-130086] [transport.py] [_log()] client lang: <none>
2025-12-31T15:23:00.694 [DEBUG] [Thread-130086] [transport.py] [_log()] server lang: <none>
2025-12-31T15:23:00.694 [DEBUG] [Thread-130086] [transport.py] [_log()] kex follows: False
2025-12-31T15:23:00.694 [DEBUG] [Thread-130086] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:23:00.694 [DEBUG] [Thread-130086] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:23:00.694 [DEBUG] [Thread-130086] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:23:00.694 [DEBUG] [Thread-130086] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:23:00.694 [DEBUG] [Thread-130086] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:23:00.694 [DEBUG] [Thread-130086] [transport.py] [_log()] Compression: none
2025-12-31T15:23:00.694 [DEBUG] [Thread-130086] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:23:00.753 [DEBUG] [Thread-130086] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:23:00.754 [DEBUG] [Thread-130086] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:23:00.754 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T15:23:00.755 [DEBUG] [Thread-130086] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T15:23:00.756 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:23:00.812 [DEBUG] [Thread-130086] [transport.py] [_log()] userauth is OK
2025-12-31T15:23:00.813 [DEBUG] [Thread-130086] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:23:00.813 [DEBUG] [Thread-130086] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:23:00.813 [DEBUG] [Thread-130086] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T15:23:00.813 [DEBUG] [Thread-130086] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:23:00.832 [INFO] [Thread-130086] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:23:00.832 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T15:23:00.833 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:23:01.680 [DEBUG] [Thread-130086] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:23:01.680 [DEBUG] [Thread-130086] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:23:01.728 [DEBUG] [Thread-130086] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:23:01.728 [DEBUG] [Thread-130086] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:23:01.737 [DEBUG] [Thread-130086] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:23:01.744 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:23:01.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-12-31T15:23:01.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T15:23:01.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:23:01.760 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:23:01.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:23:01.768 [DEBUG] [Thread-130086] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:23:06.887 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:23:06.888 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:23:10.495 [DEBUG] [Thread-130088 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:23:21.128 [DEBUG] [Thread-130089 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:23:25.541 [DEBUG] [Thread-130090 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:23:31.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T15:23:31.778 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T15:23:31.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T15:23:32.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 15, 23, 23), 31.48, 12.36, 0.0, 24.42, 26.47, 0, 0, 0, 2, 0, 0),)
2025-12-31T15:23:32.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 15:23:23
2025-12-31T15:23:32.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T15:23:32.746 [DEBUG] [Thread-130091] [transport.py] [_log()] starting thread (client mode): 0xb6b2bf10
2025-12-31T15:23:32.746 [DEBUG] [Thread-130091] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:23:32.766 [DEBUG] [Thread-130091] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T15:23:32.767 [INFO] [Thread-130091] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T15:23:32.770 [DEBUG] [Thread-130091] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:23:32.770 [DEBUG] [Thread-130091] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T15:23:32.770 [DEBUG] [Thread-130091] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:23:32.770 [DEBUG] [Thread-130091] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:23:32.770 [DEBUG] [Thread-130091] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:23:32.770 [DEBUG] [Thread-130091] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:23:32.770 [DEBUG] [Thread-130091] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:23:32.770 [DEBUG] [Thread-130091] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:23:32.770 [DEBUG] [Thread-130091] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:23:32.770 [DEBUG] [Thread-130091] [transport.py] [_log()] client lang: <none>
2025-12-31T15:23:32.770 [DEBUG] [Thread-130091] [transport.py] [_log()] server lang: <none>
2025-12-31T15:23:32.771 [DEBUG] [Thread-130091] [transport.py] [_log()] kex follows: False
2025-12-31T15:23:32.771 [DEBUG] [Thread-130091] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:23:32.771 [DEBUG] [Thread-130091] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:23:32.771 [DEBUG] [Thread-130091] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:23:32.771 [DEBUG] [Thread-130091] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:23:32.771 [DEBUG] [Thread-130091] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:23:32.771 [DEBUG] [Thread-130091] [transport.py] [_log()] Compression: none
2025-12-31T15:23:32.771 [DEBUG] [Thread-130091] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:23:32.791 [DEBUG] [Thread-130091] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:23:32.791 [DEBUG] [Thread-130091] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:23:32.792 [DEBUG] [Thread-130091] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T15:23:32.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T15:23:32.793 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:23:32.794 [DEBUG] [Thread-130091] [transport.py] [_log()] userauth is OK
2025-12-31T15:23:32.794 [DEBUG] [Thread-130091] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:23:32.794 [DEBUG] [Thread-130091] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:23:32.794 [DEBUG] [Thread-130091] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T15:23:32.795 [DEBUG] [Thread-130091] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:23:32.818 [INFO] [Thread-130091] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:23:32.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:23:33.556 [DEBUG] [Thread-130091] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:23:33.556 [DEBUG] [Thread-130091] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:23:33.556 [DEBUG] [Thread-130091] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T15:23:33.597 [DEBUG] [Thread-130091] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:23:33.597 [DEBUG] [Thread-130091] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:23:33.603 [DEBUG] [Thread-130091] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:23:33.607 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:23:33.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T15:23:33.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T15:23:33.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T15:23:33.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:23:33.624 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T15:23:33.624 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:23:33.624 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:23:33.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T15:23:33.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.557433 -999.00  +25.40  27.48     18   -0.30 1 2 1 1 1   888    0 26.91 -39.32 ----- 23.9 27.5 308.4 37.4 30.4 -23.7 30.3 -22.5 30.3 -21.6 30.7 -22.8
2025-12-31T15:23:33.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T15:23:33.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T15:23:33.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.557433
2025-12-31T15:23:33.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T15:23:33.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T15:23:33.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T15:23:33.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T15:23:33.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T15:23:33.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T15:23:23', tmtdew=31.48, humidity=12.36, cloud=0.0, wind=24.42, temperature=26.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T13:22:42.211', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T15:23:33.627 [DEBUG] [Thread-130091] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:23:33.710 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T15:23:33.723 [DEBUG] [Thread-130094] [transport.py] [_log()] starting thread (client mode): 0xb6bbf340
2025-12-31T15:23:33.723 [DEBUG] [Thread-130094] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:23:33.738 [DEBUG] [Thread-130094] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T15:23:33.738 [INFO] [Thread-130094] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T15:23:33.746 [DEBUG] [Thread-130094] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:23:33.746 [DEBUG] [Thread-130094] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T15:23:33.746 [DEBUG] [Thread-130094] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:23:33.746 [DEBUG] [Thread-130094] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:23:33.746 [DEBUG] [Thread-130094] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:23:33.746 [DEBUG] [Thread-130094] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:23:33.746 [DEBUG] [Thread-130094] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:23:33.746 [DEBUG] [Thread-130094] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:23:33.746 [DEBUG] [Thread-130094] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:23:33.746 [DEBUG] [Thread-130094] [transport.py] [_log()] client lang: <none>
2025-12-31T15:23:33.747 [DEBUG] [Thread-130094] [transport.py] [_log()] server lang: <none>
2025-12-31T15:23:33.747 [DEBUG] [Thread-130094] [transport.py] [_log()] kex follows: False
2025-12-31T15:23:33.747 [DEBUG] [Thread-130094] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:23:33.747 [DEBUG] [Thread-130094] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:23:33.747 [DEBUG] [Thread-130094] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:23:33.747 [DEBUG] [Thread-130094] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:23:33.747 [DEBUG] [Thread-130094] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:23:33.747 [DEBUG] [Thread-130094] [transport.py] [_log()] Compression: none
2025-12-31T15:23:33.747 [DEBUG] [Thread-130094] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:23:33.804 [DEBUG] [Thread-130094] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:23:33.805 [DEBUG] [Thread-130094] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:23:33.805 [DEBUG] [Thread-130094] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T15:23:33.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T15:23:33.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:23:33.864 [DEBUG] [Thread-130094] [transport.py] [_log()] userauth is OK
2025-12-31T15:23:33.864 [DEBUG] [Thread-130094] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:23:33.864 [DEBUG] [Thread-130094] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:23:33.864 [DEBUG] [Thread-130094] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T15:23:33.864 [DEBUG] [Thread-130094] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:23:33.883 [INFO] [Thread-130094] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:23:33.883 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T15:23:33.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:23:34.722 [DEBUG] [Thread-130094] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:23:34.722 [DEBUG] [Thread-130094] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:23:34.770 [DEBUG] [Thread-130094] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:23:34.770 [DEBUG] [Thread-130094] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:23:34.779 [DEBUG] [Thread-130094] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:23:34.789 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:23: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-12-31T15:23:34.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T15:23:34.807 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:23:34.808 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:23:34.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:23:34.816 [DEBUG] [Thread-130094] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:23:40.574 [DEBUG] [Thread-130096 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:23:55.624 [DEBUG] [Thread-130097 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:24:04.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T15:24:04.839 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T15:24:04.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T15:24:05.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 15, 23, 55), 31.28, 12.39, 0.0, 22.9, 25.99, 0, 0, 0, 2, 0, 0),)
2025-12-31T15:24:05.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 15:23:55
2025-12-31T15:24:05.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T15:24:05.822 [DEBUG] [Thread-130098] [transport.py] [_log()] starting thread (client mode): 0xb95d62c0
2025-12-31T15:24:05.822 [DEBUG] [Thread-130098] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:24:05.848 [DEBUG] [Thread-130098] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T15:24:05.849 [INFO] [Thread-130098] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T15:24:05.851 [DEBUG] [Thread-130098] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:24:05.851 [DEBUG] [Thread-130098] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T15:24:05.851 [DEBUG] [Thread-130098] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:24:05.851 [DEBUG] [Thread-130098] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:24:05.851 [DEBUG] [Thread-130098] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:24:05.852 [DEBUG] [Thread-130098] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:24:05.852 [DEBUG] [Thread-130098] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:24:05.852 [DEBUG] [Thread-130098] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:24:05.852 [DEBUG] [Thread-130098] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:24:05.852 [DEBUG] [Thread-130098] [transport.py] [_log()] client lang: <none>
2025-12-31T15:24:05.852 [DEBUG] [Thread-130098] [transport.py] [_log()] server lang: <none>
2025-12-31T15:24:05.852 [DEBUG] [Thread-130098] [transport.py] [_log()] kex follows: False
2025-12-31T15:24:05.852 [DEBUG] [Thread-130098] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:24:05.852 [DEBUG] [Thread-130098] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:24:05.852 [DEBUG] [Thread-130098] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:24:05.853 [DEBUG] [Thread-130098] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:24:05.853 [DEBUG] [Thread-130098] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:24:05.853 [DEBUG] [Thread-130098] [transport.py] [_log()] Compression: none
2025-12-31T15:24:05.853 [DEBUG] [Thread-130098] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:24:05.877 [DEBUG] [Thread-130098] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:24:05.878 [DEBUG] [Thread-130098] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:24:05.879 [DEBUG] [Thread-130098] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T15:24:05.879 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T15:24:05.880 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:24:05.881 [DEBUG] [Thread-130098] [transport.py] [_log()] userauth is OK
2025-12-31T15:24:05.881 [DEBUG] [Thread-130098] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:24:05.881 [DEBUG] [Thread-130098] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:24:05.881 [DEBUG] [Thread-130098] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T15:24:05.881 [DEBUG] [Thread-130098] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:24:05.907 [INFO] [Thread-130098] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:24:05.907 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:24:06.571 [DEBUG] [Thread-130098] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:24:06.571 [DEBUG] [Thread-130098] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:24:06.571 [DEBUG] [Thread-130098] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T15:24:06.613 [DEBUG] [Thread-130098] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:24:06.613 [DEBUG] [Thread-130098] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:24:06.617 [DEBUG] [Thread-130098] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:24:06.628 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:24:06.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T15:24:06.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T15:24:06.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T15:24:06.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:24:06.645 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T15:24:06.645 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:24:06.645 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:24:06.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T15:24:06.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.557780 -999.00  +25.20  19.58     18   -0.10 1 2 1 1 1   888    0 25.68 -50.09 ----- 19.4 19.6 318.4 30.2 30.2 -23.4 30.1 -22.2 30.2 -20.6 30.4 -22.9
2025-12-31T15:24:06.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T15:24:06.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T15:24:06.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.557780
2025-12-31T15:24:06.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T15:24:06.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T15:24:06.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T15:24:06.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T15:24:06.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T15:24:06.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T15:23:55', tmtdew=31.28, humidity=12.39, cloud=0.0, wind=22.9, temperature=25.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T13:23:12.192', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T15:24:06.648 [DEBUG] [Thread-130098] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:24:06.731 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T15:24:06.743 [DEBUG] [Thread-130101] [transport.py] [_log()] starting thread (client mode): 0xb6bba560
2025-12-31T15:24:06.743 [DEBUG] [Thread-130101] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:24:06.758 [DEBUG] [Thread-130101] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T15:24:06.758 [INFO] [Thread-130101] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T15:24:06.766 [DEBUG] [Thread-130101] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:24:06.766 [DEBUG] [Thread-130101] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T15:24:06.766 [DEBUG] [Thread-130101] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:24:06.766 [DEBUG] [Thread-130101] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:24:06.767 [DEBUG] [Thread-130101] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:24:06.767 [DEBUG] [Thread-130101] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:24:06.767 [DEBUG] [Thread-130101] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:24:06.767 [DEBUG] [Thread-130101] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:24:06.767 [DEBUG] [Thread-130101] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:24:06.767 [DEBUG] [Thread-130101] [transport.py] [_log()] client lang: <none>
2025-12-31T15:24:06.767 [DEBUG] [Thread-130101] [transport.py] [_log()] server lang: <none>
2025-12-31T15:24:06.767 [DEBUG] [Thread-130101] [transport.py] [_log()] kex follows: False
2025-12-31T15:24:06.767 [DEBUG] [Thread-130101] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:24:06.767 [DEBUG] [Thread-130101] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:24:06.767 [DEBUG] [Thread-130101] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:24:06.767 [DEBUG] [Thread-130101] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:24:06.767 [DEBUG] [Thread-130101] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:24:06.767 [DEBUG] [Thread-130101] [transport.py] [_log()] Compression: none
2025-12-31T15:24:06.767 [DEBUG] [Thread-130101] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:24:06.822 [DEBUG] [Thread-130101] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:24:06.822 [DEBUG] [Thread-130101] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:24:06.822 [DEBUG] [Thread-130101] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T15:24:06.822 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T15:24:06.822 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:24:06.879 [DEBUG] [Thread-130101] [transport.py] [_log()] userauth is OK
2025-12-31T15:24:06.880 [DEBUG] [Thread-130101] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:24:06.880 [DEBUG] [Thread-130101] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:24:06.880 [DEBUG] [Thread-130101] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T15:24:06.880 [DEBUG] [Thread-130101] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:24:06.898 [INFO] [Thread-130101] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:24:06.898 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T15:24:06.899 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:24:07.027 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:24:07.028 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:24:07.753 [DEBUG] [Thread-130101] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:24:07.753 [DEBUG] [Thread-130101] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:24:07.800 [DEBUG] [Thread-130101] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:24:07.801 [DEBUG] [Thread-130101] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:24:07.809 [DEBUG] [Thread-130101] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:24:07.818 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:24: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-12-31T15:24:07.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T15:24:07.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:24:07.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:24:07.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:24:07.843 [DEBUG] [Thread-130101] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:24:10.654 [DEBUG] [Thread-130103 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:24:21.182 [DEBUG] [Thread-130104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:24:25.714 [DEBUG] [Thread-130105 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:24:37.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T15:24:37.866 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T15:24:37.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-12-31T15:24:38.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 15, 24, 27), 30.7, 12.89, 0.0, 29.91, 25.77, 0, 0, 0, 2, 0, 0),)
2025-12-31T15:24:38.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 15:24:27
2025-12-31T15:24:38.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T15:24:38.850 [DEBUG] [Thread-130106] [transport.py] [_log()] starting thread (client mode): 0xb95d6080
2025-12-31T15:24:38.850 [DEBUG] [Thread-130106] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:24:38.865 [DEBUG] [Thread-130106] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T15:24:38.865 [INFO] [Thread-130106] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T15:24:38.869 [DEBUG] [Thread-130106] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:24:38.869 [DEBUG] [Thread-130106] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T15:24:38.869 [DEBUG] [Thread-130106] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:24:38.869 [DEBUG] [Thread-130106] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:24:38.869 [DEBUG] [Thread-130106] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:24:38.869 [DEBUG] [Thread-130106] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:24:38.869 [DEBUG] [Thread-130106] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:24:38.869 [DEBUG] [Thread-130106] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:24:38.870 [DEBUG] [Thread-130106] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:24:38.870 [DEBUG] [Thread-130106] [transport.py] [_log()] client lang: <none>
2025-12-31T15:24:38.870 [DEBUG] [Thread-130106] [transport.py] [_log()] server lang: <none>
2025-12-31T15:24:38.870 [DEBUG] [Thread-130106] [transport.py] [_log()] kex follows: False
2025-12-31T15:24:38.870 [DEBUG] [Thread-130106] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:24:38.870 [DEBUG] [Thread-130106] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:24:38.870 [DEBUG] [Thread-130106] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:24:38.870 [DEBUG] [Thread-130106] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:24:38.870 [DEBUG] [Thread-130106] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:24:38.870 [DEBUG] [Thread-130106] [transport.py] [_log()] Compression: none
2025-12-31T15:24:38.870 [DEBUG] [Thread-130106] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:24:38.882 [DEBUG] [Thread-130106] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:24:38.882 [DEBUG] [Thread-130106] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:24:38.882 [DEBUG] [Thread-130106] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T15:24:38.883 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T15:24:38.883 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:24:38.883 [DEBUG] [Thread-130106] [transport.py] [_log()] userauth is OK
2025-12-31T15:24:38.883 [DEBUG] [Thread-130106] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:24:38.883 [DEBUG] [Thread-130106] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:24:38.883 [DEBUG] [Thread-130106] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T15:24:38.884 [DEBUG] [Thread-130106] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:24:38.903 [INFO] [Thread-130106] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:24:38.904 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:24:39.677 [DEBUG] [Thread-130106] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:24:39.677 [DEBUG] [Thread-130106] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:24:39.678 [DEBUG] [Thread-130106] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T15:24:39.718 [DEBUG] [Thread-130106] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:24:39.718 [DEBUG] [Thread-130106] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:24:39.721 [DEBUG] [Thread-130106] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:24:39.734 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:24:39.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T15:24:39.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T15:24:39.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T15:24:39.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:24:39.744 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T15:24:39.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:24:39.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:24:39.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T15:24:39.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.558128 -999.00  +25.40  22.12     18   -0.30 1 2 1 1 1   888    0 25.41 -62.18 ----- 25.6 22.1 300.8 28.7 30.1 -22.7 30.2 -21.8 30.0 -22.1 30.4 -22.4
2025-12-31T15:24:39.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T15:24:39.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T15:24:39.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.558128
2025-12-31T15:24:39.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T15:24:39.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T15:24:39.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T15:24:39.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T15:24:39.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T15:24:39.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T15:24:27', tmtdew=30.7, humidity=12.89, cloud=0.0, wind=29.91, temperature=25.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T13:23:42.259', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T15:24:39.747 [DEBUG] [Thread-130106] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:24:39.831 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T15:24:39.843 [DEBUG] [Thread-130109] [transport.py] [_log()] starting thread (client mode): 0xb6b170a0
2025-12-31T15:24:39.843 [DEBUG] [Thread-130109] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:24:39.858 [DEBUG] [Thread-130109] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T15:24:39.858 [INFO] [Thread-130109] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T15:24:39.866 [DEBUG] [Thread-130109] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:24:39.866 [DEBUG] [Thread-130109] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T15:24:39.866 [DEBUG] [Thread-130109] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:24:39.866 [DEBUG] [Thread-130109] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:24:39.866 [DEBUG] [Thread-130109] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:24:39.866 [DEBUG] [Thread-130109] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:24:39.866 [DEBUG] [Thread-130109] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:24:39.866 [DEBUG] [Thread-130109] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:24:39.866 [DEBUG] [Thread-130109] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:24:39.866 [DEBUG] [Thread-130109] [transport.py] [_log()] client lang: <none>
2025-12-31T15:24:39.866 [DEBUG] [Thread-130109] [transport.py] [_log()] server lang: <none>
2025-12-31T15:24:39.866 [DEBUG] [Thread-130109] [transport.py] [_log()] kex follows: False
2025-12-31T15:24:39.866 [DEBUG] [Thread-130109] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:24:39.866 [DEBUG] [Thread-130109] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:24:39.866 [DEBUG] [Thread-130109] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:24:39.867 [DEBUG] [Thread-130109] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:24:39.867 [DEBUG] [Thread-130109] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:24:39.867 [DEBUG] [Thread-130109] [transport.py] [_log()] Compression: none
2025-12-31T15:24:39.867 [DEBUG] [Thread-130109] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:24:39.922 [DEBUG] [Thread-130109] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:24:39.923 [DEBUG] [Thread-130109] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:24:39.924 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T15:24:39.924 [DEBUG] [Thread-130109] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T15:24:39.925 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:24:39.978 [DEBUG] [Thread-130109] [transport.py] [_log()] userauth is OK
2025-12-31T15:24:39.978 [DEBUG] [Thread-130109] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:24:39.978 [DEBUG] [Thread-130109] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:24:39.979 [DEBUG] [Thread-130109] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T15:24:39.979 [DEBUG] [Thread-130109] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:24:39.997 [INFO] [Thread-130109] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:24:39.997 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T15:24:39.998 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:24:40.746 [DEBUG] [Thread-130111 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:24:40.840 [DEBUG] [Thread-130109] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:24:40.840 [DEBUG] [Thread-130109] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:24:40.889 [DEBUG] [Thread-130109] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:24:40.889 [DEBUG] [Thread-130109] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:24:40.898 [DEBUG] [Thread-130109] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:24:40.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:24:40.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T15:24:40.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-12-31T15:24:40.926 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:24:40.926 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:24:40.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:24:40.935 [DEBUG] [Thread-130109] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:24:55.808 [DEBUG] [Thread-130112 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:25:07.171 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:25:07.172 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:25:10.843 [DEBUG] [Thread-130113 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:25:10.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T15:25:10.957 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T15:25:10.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T15:25:11.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 15, 24, 59), 31.12, 12.14, 0.0, 40.71, 25.42, 0, 0, 0, 2, 0, 0),)
2025-12-31T15:25:11.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 15:24:59
2025-12-31T15:25:11.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T15:25:11.980 [DEBUG] [Thread-130114] [transport.py] [_log()] starting thread (client mode): 0xb6b2af20
2025-12-31T15:25:11.980 [DEBUG] [Thread-130114] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:25:12.000 [DEBUG] [Thread-130114] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T15:25:12.000 [INFO] [Thread-130114] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T15:25:12.002 [DEBUG] [Thread-130114] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:25:12.002 [DEBUG] [Thread-130114] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T15:25:12.002 [DEBUG] [Thread-130114] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:25:12.002 [DEBUG] [Thread-130114] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:25:12.002 [DEBUG] [Thread-130114] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:25:12.002 [DEBUG] [Thread-130114] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:25:12.002 [DEBUG] [Thread-130114] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:25:12.002 [DEBUG] [Thread-130114] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:25:12.002 [DEBUG] [Thread-130114] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:25:12.002 [DEBUG] [Thread-130114] [transport.py] [_log()] client lang: <none>
2025-12-31T15:25:12.002 [DEBUG] [Thread-130114] [transport.py] [_log()] server lang: <none>
2025-12-31T15:25:12.002 [DEBUG] [Thread-130114] [transport.py] [_log()] kex follows: False
2025-12-31T15:25:12.002 [DEBUG] [Thread-130114] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:25:12.003 [DEBUG] [Thread-130114] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:25:12.003 [DEBUG] [Thread-130114] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:25:12.003 [DEBUG] [Thread-130114] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:25:12.003 [DEBUG] [Thread-130114] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:25:12.003 [DEBUG] [Thread-130114] [transport.py] [_log()] Compression: none
2025-12-31T15:25:12.003 [DEBUG] [Thread-130114] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:25:12.018 [DEBUG] [Thread-130114] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:25:12.018 [DEBUG] [Thread-130114] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:25:12.018 [DEBUG] [Thread-130114] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T15:25:12.018 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T15:25:12.019 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:25:12.019 [DEBUG] [Thread-130114] [transport.py] [_log()] userauth is OK
2025-12-31T15:25:12.020 [DEBUG] [Thread-130114] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:25:12.020 [DEBUG] [Thread-130114] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:25:12.020 [DEBUG] [Thread-130114] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T15:25:12.020 [DEBUG] [Thread-130114] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:25:12.037 [INFO] [Thread-130114] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:25:12.037 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:25:16.065 [DEBUG] [Thread-130114] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:25:16.065 [DEBUG] [Thread-130114] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:25:16.066 [DEBUG] [Thread-130114] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T15:25:16.106 [DEBUG] [Thread-130114] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:25:16.106 [DEBUG] [Thread-130114] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:25:16.111 [DEBUG] [Thread-130114] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:25:16.122 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:25:16.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T15:25:16.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T15:25:16.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T15:25:16.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:25:16.137 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T15:25:16.137 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:25:16.137 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:25:16.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T15:25:16.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.558475 -999.00  +25.50  31.90     17   -1.00 1 2 2 1 1   888    0 25.15 -64.52 ----- 37.6 31.9 288.0 36.7 30.1 -24.0 30.0 -22.1 29.8 -22.7 30.2 -22.7
2025-12-31T15:25:16.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T15:25:16.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T15:25:16.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.558475
2025-12-31T15:25:16.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T15:25:16.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T15:25:16.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T15:25:16.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T15:25:16.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T15:25:16.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T15:24:59', tmtdew=31.12, humidity=12.14, cloud=0.0, wind=40.71, temperature=25.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T13:24:12.240', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T15:25:16.140 [DEBUG] [Thread-130114] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:25:16.221 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T15:25:16.232 [DEBUG] [Thread-130117] [transport.py] [_log()] starting thread (client mode): 0xb6bbc550
2025-12-31T15:25:16.232 [DEBUG] [Thread-130117] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:25:16.247 [DEBUG] [Thread-130117] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T15:25:16.247 [INFO] [Thread-130117] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T15:25:16.255 [DEBUG] [Thread-130117] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:25:16.255 [DEBUG] [Thread-130117] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T15:25:16.255 [DEBUG] [Thread-130117] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:25:16.255 [DEBUG] [Thread-130117] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:25:16.255 [DEBUG] [Thread-130117] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:25:16.256 [DEBUG] [Thread-130117] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:25:16.256 [DEBUG] [Thread-130117] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:25:16.256 [DEBUG] [Thread-130117] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:25:16.256 [DEBUG] [Thread-130117] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:25:16.256 [DEBUG] [Thread-130117] [transport.py] [_log()] client lang: <none>
2025-12-31T15:25:16.256 [DEBUG] [Thread-130117] [transport.py] [_log()] server lang: <none>
2025-12-31T15:25:16.256 [DEBUG] [Thread-130117] [transport.py] [_log()] kex follows: False
2025-12-31T15:25:16.256 [DEBUG] [Thread-130117] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:25:16.256 [DEBUG] [Thread-130117] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:25:16.256 [DEBUG] [Thread-130117] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:25:16.256 [DEBUG] [Thread-130117] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:25:16.256 [DEBUG] [Thread-130117] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:25:16.256 [DEBUG] [Thread-130117] [transport.py] [_log()] Compression: none
2025-12-31T15:25:16.256 [DEBUG] [Thread-130117] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:25:16.314 [DEBUG] [Thread-130117] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:25:16.314 [DEBUG] [Thread-130117] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:25:16.315 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T15:25:16.315 [DEBUG] [Thread-130117] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T15:25:16.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:25:16.370 [DEBUG] [Thread-130117] [transport.py] [_log()] userauth is OK
2025-12-31T15:25:16.371 [DEBUG] [Thread-130117] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:25:16.371 [DEBUG] [Thread-130117] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:25:16.371 [DEBUG] [Thread-130117] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T15:25:16.371 [DEBUG] [Thread-130117] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:25:16.395 [INFO] [Thread-130117] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:25:16.395 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T15:25:16.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:25:17.220 [DEBUG] [Thread-130117] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:25:17.220 [DEBUG] [Thread-130117] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:25:17.268 [DEBUG] [Thread-130117] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:25:17.268 [DEBUG] [Thread-130117] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:25:17.278 [DEBUG] [Thread-130117] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:25:17.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:25:17.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T15:25:17.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T15:25:17.305 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:25:17.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:25:17.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:25:17.314 [DEBUG] [Thread-130117] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:25:21.212 [DEBUG] [Thread-130119 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:25:25.874 [DEBUG] [Thread-130120 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:25:40.923 [DEBUG] [Thread-130121 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:25:47.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T15:25:47.336 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T15:25:47.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T15:25:48.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 15, 25, 31), 32.04, 11.39, 0.0, 41.3, 25.72, 0, 0, 0, 2, 0, 0),)
2025-12-31T15:25:48.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 15:25:31
2025-12-31T15:25:48.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T15:25:48.374 [DEBUG] [Thread-130122] [transport.py] [_log()] starting thread (client mode): 0xb6bbeaa0
2025-12-31T15:25:48.375 [DEBUG] [Thread-130122] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:25:48.395 [DEBUG] [Thread-130122] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T15:25:48.395 [INFO] [Thread-130122] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T15:25:48.399 [DEBUG] [Thread-130122] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:25:48.399 [DEBUG] [Thread-130122] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T15:25:48.399 [DEBUG] [Thread-130122] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:25:48.399 [DEBUG] [Thread-130122] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:25:48.399 [DEBUG] [Thread-130122] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:25:48.399 [DEBUG] [Thread-130122] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:25:48.399 [DEBUG] [Thread-130122] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:25:48.399 [DEBUG] [Thread-130122] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:25:48.399 [DEBUG] [Thread-130122] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:25:48.399 [DEBUG] [Thread-130122] [transport.py] [_log()] client lang: <none>
2025-12-31T15:25:48.399 [DEBUG] [Thread-130122] [transport.py] [_log()] server lang: <none>
2025-12-31T15:25:48.399 [DEBUG] [Thread-130122] [transport.py] [_log()] kex follows: False
2025-12-31T15:25:48.399 [DEBUG] [Thread-130122] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:25:48.399 [DEBUG] [Thread-130122] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:25:48.399 [DEBUG] [Thread-130122] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:25:48.399 [DEBUG] [Thread-130122] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:25:48.399 [DEBUG] [Thread-130122] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:25:48.399 [DEBUG] [Thread-130122] [transport.py] [_log()] Compression: none
2025-12-31T15:25:48.399 [DEBUG] [Thread-130122] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:25:48.419 [DEBUG] [Thread-130122] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:25:48.420 [DEBUG] [Thread-130122] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:25:48.420 [DEBUG] [Thread-130122] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T15:25:48.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T15:25:48.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:25:48.421 [DEBUG] [Thread-130122] [transport.py] [_log()] userauth is OK
2025-12-31T15:25:48.421 [DEBUG] [Thread-130122] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:25:48.421 [DEBUG] [Thread-130122] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:25:48.421 [DEBUG] [Thread-130122] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T15:25:48.421 [DEBUG] [Thread-130122] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:25:48.430 [INFO] [Thread-130122] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:25:48.431 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:25:49.023 [DEBUG] [Thread-130122] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:25:49.023 [DEBUG] [Thread-130122] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:25:49.023 [DEBUG] [Thread-130122] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T15:25:49.064 [DEBUG] [Thread-130122] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:25:49.064 [DEBUG] [Thread-130122] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:25:49.066 [DEBUG] [Thread-130122] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:25:49.080 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:25:49.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T15:25:49.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T15:25:49.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T15:25:49.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:25:49.089 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T15:25:49.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:25:49.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:25:49.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T15:25:49.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.559169 -999.00  +26.20  38.22     16   -1.00 1 2 2 1 1   888    0 25.33 -58.74 ----- 35.6 38.2 298.4 43.0 30.0 -20.6 30.1 -20.2 30.1 -20.2 30.2 -20.1
2025-12-31T15:25:49.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T15:25:49.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T15:25:49.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.559169
2025-12-31T15:25:49.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T15:25:49.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T15:25:49.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T15:25:49.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T15:25:49.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T15:25:49.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T15:25:31', tmtdew=32.04, humidity=11.39, cloud=0.0, wind=41.3, temperature=25.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T13:25:12.202', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T15:25:49.090 [DEBUG] [Thread-130122] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:25:49.164 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T15:25:49.176 [DEBUG] [Thread-130125] [transport.py] [_log()] starting thread (client mode): 0xb6bbddb0
2025-12-31T15:25:49.176 [DEBUG] [Thread-130125] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:25:49.191 [DEBUG] [Thread-130125] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T15:25:49.191 [INFO] [Thread-130125] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T15:25:49.198 [DEBUG] [Thread-130125] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:25:49.198 [DEBUG] [Thread-130125] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T15:25:49.198 [DEBUG] [Thread-130125] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:25:49.198 [DEBUG] [Thread-130125] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:25:49.198 [DEBUG] [Thread-130125] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:25:49.198 [DEBUG] [Thread-130125] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:25:49.198 [DEBUG] [Thread-130125] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:25:49.198 [DEBUG] [Thread-130125] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:25:49.198 [DEBUG] [Thread-130125] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:25:49.198 [DEBUG] [Thread-130125] [transport.py] [_log()] client lang: <none>
2025-12-31T15:25:49.198 [DEBUG] [Thread-130125] [transport.py] [_log()] server lang: <none>
2025-12-31T15:25:49.198 [DEBUG] [Thread-130125] [transport.py] [_log()] kex follows: False
2025-12-31T15:25:49.198 [DEBUG] [Thread-130125] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:25:49.198 [DEBUG] [Thread-130125] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:25:49.198 [DEBUG] [Thread-130125] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:25:49.198 [DEBUG] [Thread-130125] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:25:49.199 [DEBUG] [Thread-130125] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:25:49.199 [DEBUG] [Thread-130125] [transport.py] [_log()] Compression: none
2025-12-31T15:25:49.199 [DEBUG] [Thread-130125] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:25:49.256 [DEBUG] [Thread-130125] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:25:49.256 [DEBUG] [Thread-130125] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:25:49.256 [DEBUG] [Thread-130125] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T15:25:49.257 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T15:25:49.257 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:25:49.313 [DEBUG] [Thread-130125] [transport.py] [_log()] userauth is OK
2025-12-31T15:25:49.313 [DEBUG] [Thread-130125] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:25:49.313 [DEBUG] [Thread-130125] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:25:49.313 [DEBUG] [Thread-130125] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T15:25:49.313 [DEBUG] [Thread-130125] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:25:49.327 [INFO] [Thread-130125] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:25:49.328 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T15:25:49.328 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:25:50.171 [DEBUG] [Thread-130125] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:25:50.171 [DEBUG] [Thread-130125] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:25:50.220 [DEBUG] [Thread-130125] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:25:50.220 [DEBUG] [Thread-130125] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:25:50.228 [DEBUG] [Thread-130125] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:25:50.236 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:25:50.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T15:25:50.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T15:25:50.252 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:25:50.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:25:50.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:25:50.259 [DEBUG] [Thread-130125] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:25:55.953 [DEBUG] [Thread-130127 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:26:07.311 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:26:07.313 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:26:11.001 [DEBUG] [Thread-130128 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:26:20.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T15:26:20.282 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T15:26:20.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T15:26:21.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 15, 26, 3), 32.07, 11.39, 0.0, 38.68, 25.88, 0, 0, 0, 2, 0, 0),)
2025-12-31T15:26:21.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 15:26:03
2025-12-31T15:26:21.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T15:26:21.245 [DEBUG] [Thread-130129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:26:21.282 [DEBUG] [Thread-130130] [transport.py] [_log()] starting thread (client mode): 0xb955b2e0
2025-12-31T15:26:21.282 [DEBUG] [Thread-130130] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:26:21.304 [DEBUG] [Thread-130130] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T15:26:21.304 [INFO] [Thread-130130] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T15:26:21.307 [DEBUG] [Thread-130130] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:26:21.307 [DEBUG] [Thread-130130] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T15:26:21.307 [DEBUG] [Thread-130130] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:26:21.307 [DEBUG] [Thread-130130] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:26:21.307 [DEBUG] [Thread-130130] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:26:21.307 [DEBUG] [Thread-130130] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:26:21.307 [DEBUG] [Thread-130130] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:26:21.307 [DEBUG] [Thread-130130] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:26:21.307 [DEBUG] [Thread-130130] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:26:21.307 [DEBUG] [Thread-130130] [transport.py] [_log()] client lang: <none>
2025-12-31T15:26:21.307 [DEBUG] [Thread-130130] [transport.py] [_log()] server lang: <none>
2025-12-31T15:26:21.307 [DEBUG] [Thread-130130] [transport.py] [_log()] kex follows: False
2025-12-31T15:26:21.307 [DEBUG] [Thread-130130] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:26:21.307 [DEBUG] [Thread-130130] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:26:21.307 [DEBUG] [Thread-130130] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:26:21.307 [DEBUG] [Thread-130130] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:26:21.307 [DEBUG] [Thread-130130] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:26:21.307 [DEBUG] [Thread-130130] [transport.py] [_log()] Compression: none
2025-12-31T15:26:21.307 [DEBUG] [Thread-130130] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:26:21.323 [DEBUG] [Thread-130130] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:26:21.324 [DEBUG] [Thread-130130] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:26:21.324 [DEBUG] [Thread-130130] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T15:26:21.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T15:26:21.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:26:21.326 [DEBUG] [Thread-130130] [transport.py] [_log()] userauth is OK
2025-12-31T15:26:21.326 [DEBUG] [Thread-130130] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:26:21.326 [DEBUG] [Thread-130130] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:26:21.326 [DEBUG] [Thread-130130] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T15:26:21.326 [DEBUG] [Thread-130130] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:26:21.349 [INFO] [Thread-130130] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:26:21.350 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:26:22.078 [DEBUG] [Thread-130130] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:26:22.079 [DEBUG] [Thread-130130] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:26:22.079 [DEBUG] [Thread-130130] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T15:26:22.120 [DEBUG] [Thread-130130] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:26:22.120 [DEBUG] [Thread-130130] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:26:22.123 [DEBUG] [Thread-130130] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:26:22.134 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:26:22.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T15:26:22.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T15:26:22.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T15:26:22.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:26:22.143 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T15:26:22.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:26:22.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:26:22.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T15:26:22.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.559516 -999.00  +26.20  38.77     16   -1.10 1 2 2 1 1   888    0 25.83 -50.79 ----- 38.4 38.8 293.6 41.4 30.3 -20.8 30.2 -20.5 30.2 -18.8 30.4 -20.0
2025-12-31T15:26:22.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T15:26:22.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T15:26:22.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.559516
2025-12-31T15:26:22.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T15:26:22.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T15:26:22.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T15:26:22.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T15:26:22.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T15:26:22.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T15:26:03', tmtdew=32.07, humidity=11.39, cloud=0.0, wind=38.68, temperature=25.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T13:25:42.182', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T15:26:22.145 [DEBUG] [Thread-130130] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:26:22.227 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T15:26:22.238 [DEBUG] [Thread-130133] [transport.py] [_log()] starting thread (client mode): 0xb6b2a440
2025-12-31T15:26:22.238 [DEBUG] [Thread-130133] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:26:22.252 [DEBUG] [Thread-130133] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T15:26:22.253 [INFO] [Thread-130133] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T15:26:22.260 [DEBUG] [Thread-130133] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:26:22.260 [DEBUG] [Thread-130133] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T15:26:22.260 [DEBUG] [Thread-130133] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:26:22.260 [DEBUG] [Thread-130133] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:26:22.261 [DEBUG] [Thread-130133] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:26:22.261 [DEBUG] [Thread-130133] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:26:22.261 [DEBUG] [Thread-130133] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:26:22.261 [DEBUG] [Thread-130133] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:26:22.261 [DEBUG] [Thread-130133] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:26:22.261 [DEBUG] [Thread-130133] [transport.py] [_log()] client lang: <none>
2025-12-31T15:26:22.261 [DEBUG] [Thread-130133] [transport.py] [_log()] server lang: <none>
2025-12-31T15:26:22.261 [DEBUG] [Thread-130133] [transport.py] [_log()] kex follows: False
2025-12-31T15:26:22.261 [DEBUG] [Thread-130133] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:26:22.261 [DEBUG] [Thread-130133] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:26:22.261 [DEBUG] [Thread-130133] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:26:22.262 [DEBUG] [Thread-130133] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:26:22.262 [DEBUG] [Thread-130133] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:26:22.262 [DEBUG] [Thread-130133] [transport.py] [_log()] Compression: none
2025-12-31T15:26:22.262 [DEBUG] [Thread-130133] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:26:22.316 [DEBUG] [Thread-130133] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:26:22.316 [DEBUG] [Thread-130133] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:26:22.317 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T15:26:22.317 [DEBUG] [Thread-130133] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T15:26:22.318 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:26:22.372 [DEBUG] [Thread-130133] [transport.py] [_log()] userauth is OK
2025-12-31T15:26:22.373 [DEBUG] [Thread-130133] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:26:22.373 [DEBUG] [Thread-130133] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:26:22.373 [DEBUG] [Thread-130133] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T15:26:22.373 [DEBUG] [Thread-130133] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:26:22.394 [INFO] [Thread-130133] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:26:22.394 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T15:26:22.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:26:23.237 [DEBUG] [Thread-130133] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:26:23.237 [DEBUG] [Thread-130133] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:26:23.285 [DEBUG] [Thread-130133] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:26:23.285 [DEBUG] [Thread-130133] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:26:23.295 [DEBUG] [Thread-130133] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:26:23.304 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:26:23.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T15:26:23.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T15:26:23.323 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:26:23.323 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:26:23.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:26:23.332 [DEBUG] [Thread-130133] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:26:26.034 [DEBUG] [Thread-130135 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:26:41.082 [DEBUG] [Thread-130136 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:26:53.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T15:26:53.341 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T15:26:53.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T15:26:54.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 15, 26, 35), 32.3, 11.29, 0.0, 29.13, 26.66, 0, 0, 0, 2, 0, 0),)
2025-12-31T15:26:54.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 15:26:35
2025-12-31T15:26:54.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T15:26:54.334 [DEBUG] [Thread-130137] [transport.py] [_log()] starting thread (client mode): 0xb955a9b0
2025-12-31T15:26:54.334 [DEBUG] [Thread-130137] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:26:54.354 [DEBUG] [Thread-130137] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T15:26:54.354 [INFO] [Thread-130137] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T15:26:54.357 [DEBUG] [Thread-130137] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:26:54.358 [DEBUG] [Thread-130137] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T15:26:54.358 [DEBUG] [Thread-130137] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:26:54.358 [DEBUG] [Thread-130137] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:26:54.358 [DEBUG] [Thread-130137] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:26:54.358 [DEBUG] [Thread-130137] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:26:54.358 [DEBUG] [Thread-130137] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:26:54.358 [DEBUG] [Thread-130137] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:26:54.358 [DEBUG] [Thread-130137] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:26:54.358 [DEBUG] [Thread-130137] [transport.py] [_log()] client lang: <none>
2025-12-31T15:26:54.358 [DEBUG] [Thread-130137] [transport.py] [_log()] server lang: <none>
2025-12-31T15:26:54.358 [DEBUG] [Thread-130137] [transport.py] [_log()] kex follows: False
2025-12-31T15:26:54.358 [DEBUG] [Thread-130137] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:26:54.358 [DEBUG] [Thread-130137] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:26:54.359 [DEBUG] [Thread-130137] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:26:54.359 [DEBUG] [Thread-130137] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:26:54.359 [DEBUG] [Thread-130137] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:26:54.359 [DEBUG] [Thread-130137] [transport.py] [_log()] Compression: none
2025-12-31T15:26:54.359 [DEBUG] [Thread-130137] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:26:54.376 [DEBUG] [Thread-130137] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:26:54.377 [DEBUG] [Thread-130137] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:26:54.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T15:26:54.379 [DEBUG] [Thread-130137] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T15:26:54.379 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:26:54.381 [DEBUG] [Thread-130137] [transport.py] [_log()] userauth is OK
2025-12-31T15:26:54.381 [DEBUG] [Thread-130137] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:26:54.381 [DEBUG] [Thread-130137] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:26:54.381 [DEBUG] [Thread-130137] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T15:26:54.381 [DEBUG] [Thread-130137] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:26:54.404 [INFO] [Thread-130137] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:26:54.405 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:26:55.032 [DEBUG] [Thread-130137] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:26:55.032 [DEBUG] [Thread-130137] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:26:55.032 [DEBUG] [Thread-130137] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T15:26:55.073 [DEBUG] [Thread-130137] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:26:55.073 [DEBUG] [Thread-130137] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:26:55.077 [DEBUG] [Thread-130137] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:26:55.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:26:55.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T15:26:55.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T15:26:55.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T15:26:55.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:26:55.099 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T15:26:55.099 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:26:55.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:26:55.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T15:26:55.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.559864 -999.00  +25.50  24.50     17   -1.00 1 2 1 1 1   888    0 24.95 -54.35 ----- 19.9 24.5 297.4 37.6 30.4 -19.9 30.4 -19.2 30.5 -17.3 30.6 -18.8
2025-12-31T15:26:55.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T15:26:55.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T15:26:55.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.559864
2025-12-31T15:26:55.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T15:26:55.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T15:26:55.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T15:26:55.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T15:26:55.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T15:26:55.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T15:26:35', tmtdew=32.3, humidity=11.29, cloud=0.0, wind=29.13, temperature=26.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T13:26:12.250', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T15:26:55.101 [DEBUG] [Thread-130137] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:26:55.190 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T15:26:55.201 [DEBUG] [Thread-130140] [transport.py] [_log()] starting thread (client mode): 0xb955bca0
2025-12-31T15:26:55.201 [DEBUG] [Thread-130140] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:26:55.217 [DEBUG] [Thread-130140] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T15:26:55.217 [INFO] [Thread-130140] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T15:26:55.224 [DEBUG] [Thread-130140] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:26:55.224 [DEBUG] [Thread-130140] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T15:26:55.224 [DEBUG] [Thread-130140] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:26:55.224 [DEBUG] [Thread-130140] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:26:55.224 [DEBUG] [Thread-130140] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:26:55.224 [DEBUG] [Thread-130140] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:26:55.224 [DEBUG] [Thread-130140] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:26:55.224 [DEBUG] [Thread-130140] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:26:55.224 [DEBUG] [Thread-130140] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:26:55.224 [DEBUG] [Thread-130140] [transport.py] [_log()] client lang: <none>
2025-12-31T15:26:55.224 [DEBUG] [Thread-130140] [transport.py] [_log()] server lang: <none>
2025-12-31T15:26:55.225 [DEBUG] [Thread-130140] [transport.py] [_log()] kex follows: False
2025-12-31T15:26:55.225 [DEBUG] [Thread-130140] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:26:55.225 [DEBUG] [Thread-130140] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:26:55.225 [DEBUG] [Thread-130140] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:26:55.225 [DEBUG] [Thread-130140] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:26:55.225 [DEBUG] [Thread-130140] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:26:55.225 [DEBUG] [Thread-130140] [transport.py] [_log()] Compression: none
2025-12-31T15:26:55.225 [DEBUG] [Thread-130140] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:26:55.280 [DEBUG] [Thread-130140] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:26:55.280 [DEBUG] [Thread-130140] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:26:55.280 [DEBUG] [Thread-130140] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T15:26:55.280 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T15:26:55.281 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:26:55.339 [DEBUG] [Thread-130140] [transport.py] [_log()] userauth is OK
2025-12-31T15:26:55.340 [DEBUG] [Thread-130140] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:26:55.340 [DEBUG] [Thread-130140] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:26:55.340 [DEBUG] [Thread-130140] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T15:26:55.340 [DEBUG] [Thread-130140] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:26:55.368 [INFO] [Thread-130140] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:26:55.369 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T15:26:55.369 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:26:56.117 [DEBUG] [Thread-130142 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:26:56.179 [DEBUG] [Thread-130140] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:26:56.180 [DEBUG] [Thread-130140] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:26:56.228 [DEBUG] [Thread-130140] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:26:56.228 [DEBUG] [Thread-130140] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:26:56.238 [DEBUG] [Thread-130140] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:26:56.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:26:56.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-12-31T15:26:56.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T15:26:56.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:26:56.266 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:26:56.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:26:56.275 [DEBUG] [Thread-130140] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:27:07.455 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:27:07.455 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:27:11.155 [DEBUG] [Thread-130143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:27:21.287 [DEBUG] [Thread-130144 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:27:26.192 [DEBUG] [Thread-130145 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:27:26.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T15:27:26.273 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T15:27:26.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T15:27:26.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 15, 27, 8), 31.88, 11.63, 0.0, 26.15, 26.58, 0, 0, 0, 2, 0, 0),)
2025-12-31T15:27:26.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 15:27:08
2025-12-31T15:27:27.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T15:27:27.262 [DEBUG] [Thread-130146] [transport.py] [_log()] starting thread (client mode): 0xb6bb2320
2025-12-31T15:27:27.262 [DEBUG] [Thread-130146] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:27:27.283 [DEBUG] [Thread-130146] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T15:27:27.283 [INFO] [Thread-130146] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T15:27:27.286 [DEBUG] [Thread-130146] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:27:27.286 [DEBUG] [Thread-130146] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T15:27:27.286 [DEBUG] [Thread-130146] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:27:27.286 [DEBUG] [Thread-130146] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:27:27.286 [DEBUG] [Thread-130146] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:27:27.286 [DEBUG] [Thread-130146] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:27:27.286 [DEBUG] [Thread-130146] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:27:27.287 [DEBUG] [Thread-130146] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:27:27.287 [DEBUG] [Thread-130146] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:27:27.287 [DEBUG] [Thread-130146] [transport.py] [_log()] client lang: <none>
2025-12-31T15:27:27.287 [DEBUG] [Thread-130146] [transport.py] [_log()] server lang: <none>
2025-12-31T15:27:27.287 [DEBUG] [Thread-130146] [transport.py] [_log()] kex follows: False
2025-12-31T15:27:27.287 [DEBUG] [Thread-130146] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:27:27.287 [DEBUG] [Thread-130146] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:27:27.287 [DEBUG] [Thread-130146] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:27:27.287 [DEBUG] [Thread-130146] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:27:27.287 [DEBUG] [Thread-130146] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:27:27.287 [DEBUG] [Thread-130146] [transport.py] [_log()] Compression: none
2025-12-31T15:27:27.287 [DEBUG] [Thread-130146] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:27:27.304 [DEBUG] [Thread-130146] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:27:27.305 [DEBUG] [Thread-130146] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:27:27.305 [DEBUG] [Thread-130146] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T15:27:27.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T15:27:27.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:27:27.307 [DEBUG] [Thread-130146] [transport.py] [_log()] userauth is OK
2025-12-31T15:27:27.307 [DEBUG] [Thread-130146] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:27:27.307 [DEBUG] [Thread-130146] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:27:27.307 [DEBUG] [Thread-130146] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T15:27:27.307 [DEBUG] [Thread-130146] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:27:27.324 [INFO] [Thread-130146] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:27:27.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:27:28.072 [DEBUG] [Thread-130146] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:27:28.072 [DEBUG] [Thread-130146] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:27:28.072 [DEBUG] [Thread-130146] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T15:27:28.113 [DEBUG] [Thread-130146] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:27:28.113 [DEBUG] [Thread-130146] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:27:28.115 [DEBUG] [Thread-130146] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:27:28.127 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:27:28.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T15:27:28.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T15:27:28.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T15:27:28.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:27:28.137 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T15:27:28.137 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:27:28.137 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:27:28.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T15:27:28.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.560211 -999.00  +25.80  29.77     17   -0.50 1 2 1 1 1   888    0 25.92 -53.84 ----- 26.8 29.8 301.2 33.4 30.6 -20.6 30.6 -20.3 30.7 -21.8 31.0 -18.8
2025-12-31T15:27:28.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T15:27:28.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T15:27:28.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.560211
2025-12-31T15:27:28.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T15:27:28.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T15:27:28.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T15:27:28.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T15:27:28.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T15:27:28.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T15:27:08', tmtdew=31.88, humidity=11.63, cloud=0.0, wind=26.15, temperature=26.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T13:26:42.230', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T15:27:28.140 [DEBUG] [Thread-130146] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:27:28.221 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T15:27:28.232 [DEBUG] [Thread-130149] [transport.py] [_log()] starting thread (client mode): 0xb6ba0a90
2025-12-31T15:27:28.232 [DEBUG] [Thread-130149] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:27:28.247 [DEBUG] [Thread-130149] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T15:27:28.248 [INFO] [Thread-130149] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T15:27:28.255 [DEBUG] [Thread-130149] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:27:28.255 [DEBUG] [Thread-130149] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T15:27:28.255 [DEBUG] [Thread-130149] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:27:28.255 [DEBUG] [Thread-130149] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:27:28.255 [DEBUG] [Thread-130149] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:27:28.255 [DEBUG] [Thread-130149] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:27:28.255 [DEBUG] [Thread-130149] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:27:28.255 [DEBUG] [Thread-130149] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:27:28.256 [DEBUG] [Thread-130149] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:27:28.256 [DEBUG] [Thread-130149] [transport.py] [_log()] client lang: <none>
2025-12-31T15:27:28.256 [DEBUG] [Thread-130149] [transport.py] [_log()] server lang: <none>
2025-12-31T15:27:28.256 [DEBUG] [Thread-130149] [transport.py] [_log()] kex follows: False
2025-12-31T15:27:28.256 [DEBUG] [Thread-130149] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:27:28.256 [DEBUG] [Thread-130149] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:27:28.256 [DEBUG] [Thread-130149] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:27:28.256 [DEBUG] [Thread-130149] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:27:28.256 [DEBUG] [Thread-130149] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:27:28.256 [DEBUG] [Thread-130149] [transport.py] [_log()] Compression: none
2025-12-31T15:27:28.256 [DEBUG] [Thread-130149] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:27:28.311 [DEBUG] [Thread-130149] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:27:28.311 [DEBUG] [Thread-130149] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:27:28.312 [DEBUG] [Thread-130149] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T15:27:28.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T15:27:28.313 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:27:28.368 [DEBUG] [Thread-130149] [transport.py] [_log()] userauth is OK
2025-12-31T15:27:28.369 [DEBUG] [Thread-130149] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:27:28.369 [DEBUG] [Thread-130149] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:27:28.369 [DEBUG] [Thread-130149] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T15:27:28.369 [DEBUG] [Thread-130149] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:27:28.392 [INFO] [Thread-130149] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:27:28.392 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T15:27:28.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:27:29.234 [DEBUG] [Thread-130149] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:27:29.234 [DEBUG] [Thread-130149] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:27:29.281 [DEBUG] [Thread-130149] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:27:29.282 [DEBUG] [Thread-130149] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:27:29.290 [DEBUG] [Thread-130149] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:27:29.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:27:29.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T15:27:29.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T15:27:29.316 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:27:29.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:27:29.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:27:29.324 [DEBUG] [Thread-130149] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:27:41.228 [DEBUG] [Thread-130151 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:27:56.267 [DEBUG] [Thread-130152 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:27:59.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T15:27:59.348 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T15:27:59.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T15:28:00.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 15, 27, 40), 31.74, 11.72, 0.0, 22.78, 26.48, 0, 0, 0, 2, 0, 0),)
2025-12-31T15:28:00.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 15:27:40
2025-12-31T15:28:00.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T15:28:00.343 [DEBUG] [Thread-130153] [transport.py] [_log()] starting thread (client mode): 0xb6ba1d20
2025-12-31T15:28:00.343 [DEBUG] [Thread-130153] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:28:00.363 [DEBUG] [Thread-130153] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T15:28:00.363 [INFO] [Thread-130153] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T15:28:00.367 [DEBUG] [Thread-130153] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:28:00.367 [DEBUG] [Thread-130153] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T15:28:00.367 [DEBUG] [Thread-130153] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:28:00.367 [DEBUG] [Thread-130153] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:28:00.367 [DEBUG] [Thread-130153] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:28:00.367 [DEBUG] [Thread-130153] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:28:00.367 [DEBUG] [Thread-130153] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:28:00.367 [DEBUG] [Thread-130153] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:28:00.367 [DEBUG] [Thread-130153] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:28:00.367 [DEBUG] [Thread-130153] [transport.py] [_log()] client lang: <none>
2025-12-31T15:28:00.367 [DEBUG] [Thread-130153] [transport.py] [_log()] server lang: <none>
2025-12-31T15:28:00.367 [DEBUG] [Thread-130153] [transport.py] [_log()] kex follows: False
2025-12-31T15:28:00.367 [DEBUG] [Thread-130153] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:28:00.367 [DEBUG] [Thread-130153] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:28:00.367 [DEBUG] [Thread-130153] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:28:00.367 [DEBUG] [Thread-130153] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:28:00.368 [DEBUG] [Thread-130153] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:28:00.368 [DEBUG] [Thread-130153] [transport.py] [_log()] Compression: none
2025-12-31T15:28:00.368 [DEBUG] [Thread-130153] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:28:00.385 [DEBUG] [Thread-130153] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:28:00.385 [DEBUG] [Thread-130153] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:28:00.386 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T15:28:00.386 [DEBUG] [Thread-130153] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T15:28:00.387 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:28:00.429 [DEBUG] [Thread-130153] [transport.py] [_log()] userauth is OK
2025-12-31T15:28:00.429 [DEBUG] [Thread-130153] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:28:00.429 [DEBUG] [Thread-130153] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:28:00.429 [DEBUG] [Thread-130153] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T15:28:00.430 [DEBUG] [Thread-130153] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:28:00.461 [INFO] [Thread-130153] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:28:00.462 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:28:01.088 [DEBUG] [Thread-130153] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:28:01.088 [DEBUG] [Thread-130153] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:28:01.089 [DEBUG] [Thread-130153] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T15:28:01.129 [DEBUG] [Thread-130153] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:28:01.129 [DEBUG] [Thread-130153] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:28:01.133 [DEBUG] [Thread-130153] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:28:01.145 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:28:01.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T15:28:01.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T15:28:01.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T15:28:01.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:28:01.158 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T15:28:01.158 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:28:01.158 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:28:01.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T15:28:01.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.560558 -999.00  +26.20  21.74     17   -0.30 1 2 1 1 1   888    0 25.89 -55.63 ----- 30.1 21.7 310.0 30.2 30.9 -19.4 30.8 -19.1 31.2 -19.7 31.3 -18.3
2025-12-31T15:28:01.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T15:28:01.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T15:28:01.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.560558
2025-12-31T15:28:01.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T15:28:01.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T15:28:01.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T15:28:01.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T15:28:01.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T15:28:01.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T15:27:40', tmtdew=31.74, humidity=11.72, cloud=0.0, wind=22.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-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T13:27:12.211', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T15:28:01.161 [DEBUG] [Thread-130153] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:28:01.244 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T15:28:01.256 [DEBUG] [Thread-130156] [transport.py] [_log()] starting thread (client mode): 0xb6ba02e0
2025-12-31T15:28:01.256 [DEBUG] [Thread-130156] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:28:01.271 [DEBUG] [Thread-130156] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T15:28:01.271 [INFO] [Thread-130156] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T15:28:01.278 [DEBUG] [Thread-130156] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:28:01.279 [DEBUG] [Thread-130156] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T15:28:01.279 [DEBUG] [Thread-130156] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:28:01.279 [DEBUG] [Thread-130156] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:28:01.279 [DEBUG] [Thread-130156] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:28:01.279 [DEBUG] [Thread-130156] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:28:01.279 [DEBUG] [Thread-130156] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:28:01.280 [DEBUG] [Thread-130156] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:28:01.280 [DEBUG] [Thread-130156] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:28:01.280 [DEBUG] [Thread-130156] [transport.py] [_log()] client lang: <none>
2025-12-31T15:28:01.280 [DEBUG] [Thread-130156] [transport.py] [_log()] server lang: <none>
2025-12-31T15:28:01.280 [DEBUG] [Thread-130156] [transport.py] [_log()] kex follows: False
2025-12-31T15:28:01.280 [DEBUG] [Thread-130156] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:28:01.280 [DEBUG] [Thread-130156] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:28:01.280 [DEBUG] [Thread-130156] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:28:01.280 [DEBUG] [Thread-130156] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:28:01.280 [DEBUG] [Thread-130156] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:28:01.280 [DEBUG] [Thread-130156] [transport.py] [_log()] Compression: none
2025-12-31T15:28:01.280 [DEBUG] [Thread-130156] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:28:01.337 [DEBUG] [Thread-130156] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:28:01.338 [DEBUG] [Thread-130156] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:28:01.338 [DEBUG] [Thread-130156] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T15:28:01.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T15:28:01.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:28:01.396 [DEBUG] [Thread-130156] [transport.py] [_log()] userauth is OK
2025-12-31T15:28:01.396 [DEBUG] [Thread-130156] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:28:01.396 [DEBUG] [Thread-130156] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:28:01.396 [DEBUG] [Thread-130156] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T15:28:01.396 [DEBUG] [Thread-130156] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:28:01.410 [INFO] [Thread-130156] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:28:01.410 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T15:28:01.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:28:02.284 [DEBUG] [Thread-130156] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:28:02.284 [DEBUG] [Thread-130156] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:28:02.332 [DEBUG] [Thread-130156] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:28:02.332 [DEBUG] [Thread-130156] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:28:02.341 [DEBUG] [Thread-130156] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:28:02.350 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:28:02.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-12-31T15:28:02.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T15:28:02.369 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:28:02.370 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:28:02.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:28:02.381 [DEBUG] [Thread-130156] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:28:07.594 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:28:07.596 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:28:11.302 [DEBUG] [Thread-130158 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:28:21.330 [DEBUG] [Thread-130159 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:28:26.349 [DEBUG] [Thread-130160 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:28:32.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T15:28:32.400 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T15:28:32.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-12-31T15:28:33.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 15, 28, 12), 31.82, 11.66, 0.0, 22.3, 26.48, 0, 0, 0, 2, 0, 0),)
2025-12-31T15:28:33.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 15:28:12
2025-12-31T15:28:33.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T15:28:33.384 [DEBUG] [Thread-130161] [transport.py] [_log()] starting thread (client mode): 0xb6bb1630
2025-12-31T15:28:33.384 [DEBUG] [Thread-130161] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:28:33.409 [DEBUG] [Thread-130161] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T15:28:33.409 [INFO] [Thread-130161] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T15:28:33.413 [DEBUG] [Thread-130161] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:28:33.413 [DEBUG] [Thread-130161] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T15:28:33.413 [DEBUG] [Thread-130161] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:28:33.413 [DEBUG] [Thread-130161] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:28:33.413 [DEBUG] [Thread-130161] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:28:33.413 [DEBUG] [Thread-130161] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:28:33.413 [DEBUG] [Thread-130161] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:28:33.413 [DEBUG] [Thread-130161] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:28:33.413 [DEBUG] [Thread-130161] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:28:33.413 [DEBUG] [Thread-130161] [transport.py] [_log()] client lang: <none>
2025-12-31T15:28:33.413 [DEBUG] [Thread-130161] [transport.py] [_log()] server lang: <none>
2025-12-31T15:28:33.413 [DEBUG] [Thread-130161] [transport.py] [_log()] kex follows: False
2025-12-31T15:28:33.413 [DEBUG] [Thread-130161] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:28:33.413 [DEBUG] [Thread-130161] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:28:33.414 [DEBUG] [Thread-130161] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:28:33.414 [DEBUG] [Thread-130161] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:28:33.414 [DEBUG] [Thread-130161] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:28:33.414 [DEBUG] [Thread-130161] [transport.py] [_log()] Compression: none
2025-12-31T15:28:33.414 [DEBUG] [Thread-130161] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:28:33.431 [DEBUG] [Thread-130161] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:28:33.431 [DEBUG] [Thread-130161] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:28:33.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T15:28:33.432 [DEBUG] [Thread-130161] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T15:28:33.433 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:28:33.434 [DEBUG] [Thread-130161] [transport.py] [_log()] userauth is OK
2025-12-31T15:28:33.435 [DEBUG] [Thread-130161] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:28:33.435 [DEBUG] [Thread-130161] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:28:33.435 [DEBUG] [Thread-130161] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T15:28:33.435 [DEBUG] [Thread-130161] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:28:33.458 [INFO] [Thread-130161] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:28:33.458 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:28:34.215 [DEBUG] [Thread-130161] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:28:34.215 [DEBUG] [Thread-130161] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:28:34.215 [DEBUG] [Thread-130161] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T15:28:34.256 [DEBUG] [Thread-130161] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:28:34.256 [DEBUG] [Thread-130161] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:28:34.259 [DEBUG] [Thread-130161] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:28:34.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:28:34.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T15:28:34.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T15:28:34.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T15:28:34.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:28:34.275 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T15:28:34.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:28:34.276 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:28:34.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T15:28:34.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.560905 -999.00  +25.90  25.74     17   -0.60 1 2 1 1 1   888    0 25.48 -53.40 ----- 25.7 25.7 317.6 31.8 30.9 -22.5 30.8 -21.0 31.1 -19.3 31.5 -21.1
2025-12-31T15:28:34.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T15:28:34.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T15:28:34.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.560905
2025-12-31T15:28:34.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T15:28:34.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T15:28:34.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T15:28:34.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T15:28:34.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T15:28:34.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T15:28:12', tmtdew=31.82, humidity=11.66, cloud=0.0, wind=22.3, temperature=26.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T13:27:42.192', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T15:28:34.278 [DEBUG] [Thread-130161] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:28:34.362 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T15:28:34.374 [DEBUG] [Thread-130164] [transport.py] [_log()] starting thread (client mode): 0xb6b2a950
2025-12-31T15:28:34.374 [DEBUG] [Thread-130164] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:28:34.389 [DEBUG] [Thread-130164] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T15:28:34.389 [INFO] [Thread-130164] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T15:28:34.399 [DEBUG] [Thread-130164] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:28:34.399 [DEBUG] [Thread-130164] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T15:28:34.399 [DEBUG] [Thread-130164] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:28:34.399 [DEBUG] [Thread-130164] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:28:34.400 [DEBUG] [Thread-130164] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:28:34.400 [DEBUG] [Thread-130164] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:28:34.400 [DEBUG] [Thread-130164] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:28:34.400 [DEBUG] [Thread-130164] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:28:34.400 [DEBUG] [Thread-130164] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:28:34.400 [DEBUG] [Thread-130164] [transport.py] [_log()] client lang: <none>
2025-12-31T15:28:34.400 [DEBUG] [Thread-130164] [transport.py] [_log()] server lang: <none>
2025-12-31T15:28:34.400 [DEBUG] [Thread-130164] [transport.py] [_log()] kex follows: False
2025-12-31T15:28:34.400 [DEBUG] [Thread-130164] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:28:34.401 [DEBUG] [Thread-130164] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:28:34.401 [DEBUG] [Thread-130164] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:28:34.401 [DEBUG] [Thread-130164] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:28:34.401 [DEBUG] [Thread-130164] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:28:34.401 [DEBUG] [Thread-130164] [transport.py] [_log()] Compression: none
2025-12-31T15:28:34.401 [DEBUG] [Thread-130164] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:28:34.460 [DEBUG] [Thread-130164] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:28:34.460 [DEBUG] [Thread-130164] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:28:34.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T15:28:34.461 [DEBUG] [Thread-130164] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T15:28:34.462 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:28:34.522 [DEBUG] [Thread-130164] [transport.py] [_log()] userauth is OK
2025-12-31T15:28:34.522 [DEBUG] [Thread-130164] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:28:34.522 [DEBUG] [Thread-130164] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:28:34.523 [DEBUG] [Thread-130164] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T15:28:34.523 [DEBUG] [Thread-130164] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:28:34.545 [INFO] [Thread-130164] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:28:34.545 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T15:28:34.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:28:35.359 [DEBUG] [Thread-130164] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:28:35.360 [DEBUG] [Thread-130164] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:28:35.408 [DEBUG] [Thread-130164] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:28:35.408 [DEBUG] [Thread-130164] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:28:35.417 [DEBUG] [Thread-130164] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:28:35.425 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:28:35.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T15:28:35.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-12-31T15:28:35.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:28:35.442 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:28:35.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:28:35.450 [DEBUG] [Thread-130164] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:28:41.381 [DEBUG] [Thread-130166 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:28:56.428 [DEBUG] [Thread-130167 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:29:05.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T15:29:05.472 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T15:29:05.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T15:29:06.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 15, 28, 44), 32.17, 11.69, 0.0, 26.03, 26.62, 0, 0, 0, 2, 0, 0),)
2025-12-31T15:29:06.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 15:28:44
2025-12-31T15:29:06.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T15:29:06.518 [DEBUG] [Thread-130168] [transport.py] [_log()] starting thread (client mode): 0xb95581f0
2025-12-31T15:29:06.518 [DEBUG] [Thread-130168] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:29:06.539 [DEBUG] [Thread-130168] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T15:29:06.539 [INFO] [Thread-130168] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T15:29:06.542 [DEBUG] [Thread-130168] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:29:06.542 [DEBUG] [Thread-130168] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T15:29:06.542 [DEBUG] [Thread-130168] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:29:06.542 [DEBUG] [Thread-130168] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:29:06.542 [DEBUG] [Thread-130168] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:29:06.542 [DEBUG] [Thread-130168] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:29:06.542 [DEBUG] [Thread-130168] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:29:06.542 [DEBUG] [Thread-130168] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:29:06.542 [DEBUG] [Thread-130168] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:29:06.542 [DEBUG] [Thread-130168] [transport.py] [_log()] client lang: <none>
2025-12-31T15:29:06.542 [DEBUG] [Thread-130168] [transport.py] [_log()] server lang: <none>
2025-12-31T15:29:06.542 [DEBUG] [Thread-130168] [transport.py] [_log()] kex follows: False
2025-12-31T15:29:06.542 [DEBUG] [Thread-130168] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:29:06.542 [DEBUG] [Thread-130168] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:29:06.542 [DEBUG] [Thread-130168] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:29:06.542 [DEBUG] [Thread-130168] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:29:06.542 [DEBUG] [Thread-130168] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:29:06.542 [DEBUG] [Thread-130168] [transport.py] [_log()] Compression: none
2025-12-31T15:29:06.542 [DEBUG] [Thread-130168] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:29:06.558 [DEBUG] [Thread-130168] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:29:06.558 [DEBUG] [Thread-130168] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:29:06.558 [DEBUG] [Thread-130168] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T15:29:06.558 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T15:29:06.558 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:29:06.559 [DEBUG] [Thread-130168] [transport.py] [_log()] userauth is OK
2025-12-31T15:29:06.559 [DEBUG] [Thread-130168] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:29:06.559 [DEBUG] [Thread-130168] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:29:06.559 [DEBUG] [Thread-130168] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T15:29:06.559 [DEBUG] [Thread-130168] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:29:06.569 [INFO] [Thread-130168] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:29:06.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:29:07.210 [DEBUG] [Thread-130168] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:29:07.210 [DEBUG] [Thread-130168] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:29:07.210 [DEBUG] [Thread-130168] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T15:29:07.252 [DEBUG] [Thread-130168] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:29:07.252 [DEBUG] [Thread-130168] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:29:07.254 [DEBUG] [Thread-130168] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:29:07.267 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:29:07.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T15:29:07.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T15:29:07.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T15:29:07.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:29:07.273 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T15:29:07.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:29:07.273 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:29:07.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T15:29:07.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.561253 -999.00  +25.50  21.59     17   -0.70 1 2 1 1 1   888    0 25.42 -53.87 ----- 22.2 21.6 310.6 34.1 31.0 -21.9 30.8 -21.2 31.1 -23.1 31.6 -20.9
2025-12-31T15:29:07.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T15:29:07.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T15:29:07.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.561253
2025-12-31T15:29:07.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T15:29:07.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T15:29:07.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T15:29:07.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T15:29:07.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T15:29:07.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T15:28:44', tmtdew=32.17, humidity=11.69, cloud=0.0, wind=26.03, temperature=26.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T13:28:12.259', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T15:29:07.274 [DEBUG] [Thread-130168] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:29:07.349 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T15:29:07.360 [DEBUG] [Thread-130171] [transport.py] [_log()] starting thread (client mode): 0xb6b63d60
2025-12-31T15:29:07.360 [DEBUG] [Thread-130171] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:29:07.375 [DEBUG] [Thread-130171] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T15:29:07.375 [INFO] [Thread-130171] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T15:29:07.382 [DEBUG] [Thread-130171] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:29:07.382 [DEBUG] [Thread-130171] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T15:29:07.382 [DEBUG] [Thread-130171] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:29:07.382 [DEBUG] [Thread-130171] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:29:07.382 [DEBUG] [Thread-130171] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:29:07.382 [DEBUG] [Thread-130171] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:29:07.382 [DEBUG] [Thread-130171] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:29:07.382 [DEBUG] [Thread-130171] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:29:07.382 [DEBUG] [Thread-130171] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:29:07.383 [DEBUG] [Thread-130171] [transport.py] [_log()] client lang: <none>
2025-12-31T15:29:07.383 [DEBUG] [Thread-130171] [transport.py] [_log()] server lang: <none>
2025-12-31T15:29:07.383 [DEBUG] [Thread-130171] [transport.py] [_log()] kex follows: False
2025-12-31T15:29:07.383 [DEBUG] [Thread-130171] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:29:07.383 [DEBUG] [Thread-130171] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:29:07.383 [DEBUG] [Thread-130171] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:29:07.383 [DEBUG] [Thread-130171] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:29:07.383 [DEBUG] [Thread-130171] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:29:07.383 [DEBUG] [Thread-130171] [transport.py] [_log()] Compression: none
2025-12-31T15:29:07.383 [DEBUG] [Thread-130171] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:29:07.438 [DEBUG] [Thread-130171] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:29:07.438 [DEBUG] [Thread-130171] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:29:07.438 [DEBUG] [Thread-130171] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T15:29:07.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T15:29:07.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:29:07.494 [DEBUG] [Thread-130171] [transport.py] [_log()] userauth is OK
2025-12-31T15:29:07.494 [DEBUG] [Thread-130171] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:29:07.494 [DEBUG] [Thread-130171] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:29:07.494 [DEBUG] [Thread-130171] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T15:29:07.494 [DEBUG] [Thread-130171] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:29:07.508 [INFO] [Thread-130171] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:29:07.508 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T15:29:07.508 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:29:07.735 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:29:07.736 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:29:08.363 [DEBUG] [Thread-130171] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:29:08.363 [DEBUG] [Thread-130171] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:29:08.411 [DEBUG] [Thread-130171] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:29:08.411 [DEBUG] [Thread-130171] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:29:08.420 [DEBUG] [Thread-130171] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:29:08.427 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:29:08.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T15:29:08.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T15:29:08.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:29:08.443 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:29:08.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:29:08.451 [DEBUG] [Thread-130171] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:29:11.461 [DEBUG] [Thread-130173 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:29:21.364 [DEBUG] [Thread-130174 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:29:26.516 [DEBUG] [Thread-130175 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:29:38.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T15:29:38.458 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T15:29:38.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T15:29:39.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 15, 29, 16), 32.59, 11.36, 0.0, 22.59, 26.72, 0, 0, 0, 2, 0, 0),)
2025-12-31T15:29:39.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 15:29:16
2025-12-31T15:29:39.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T15:29:39.474 [DEBUG] [Thread-130176] [transport.py] [_log()] starting thread (client mode): 0xb6ba29b0
2025-12-31T15:29:39.474 [DEBUG] [Thread-130176] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:29:39.494 [DEBUG] [Thread-130176] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T15:29:39.494 [INFO] [Thread-130176] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T15:29:39.498 [DEBUG] [Thread-130176] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:29:39.498 [DEBUG] [Thread-130176] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T15:29:39.498 [DEBUG] [Thread-130176] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:29:39.498 [DEBUG] [Thread-130176] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:29:39.498 [DEBUG] [Thread-130176] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:29:39.498 [DEBUG] [Thread-130176] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:29:39.498 [DEBUG] [Thread-130176] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:29:39.498 [DEBUG] [Thread-130176] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:29:39.498 [DEBUG] [Thread-130176] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:29:39.498 [DEBUG] [Thread-130176] [transport.py] [_log()] client lang: <none>
2025-12-31T15:29:39.498 [DEBUG] [Thread-130176] [transport.py] [_log()] server lang: <none>
2025-12-31T15:29:39.498 [DEBUG] [Thread-130176] [transport.py] [_log()] kex follows: False
2025-12-31T15:29:39.498 [DEBUG] [Thread-130176] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:29:39.498 [DEBUG] [Thread-130176] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:29:39.498 [DEBUG] [Thread-130176] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:29:39.498 [DEBUG] [Thread-130176] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:29:39.498 [DEBUG] [Thread-130176] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:29:39.498 [DEBUG] [Thread-130176] [transport.py] [_log()] Compression: none
2025-12-31T15:29:39.498 [DEBUG] [Thread-130176] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:29:39.511 [DEBUG] [Thread-130176] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:29:39.512 [DEBUG] [Thread-130176] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:29:39.512 [DEBUG] [Thread-130176] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T15:29:39.512 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T15:29:39.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:29:39.515 [DEBUG] [Thread-130176] [transport.py] [_log()] userauth is OK
2025-12-31T15:29:39.515 [DEBUG] [Thread-130176] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:29:39.515 [DEBUG] [Thread-130176] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:29:39.515 [DEBUG] [Thread-130176] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T15:29:39.515 [DEBUG] [Thread-130176] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:29:39.539 [INFO] [Thread-130176] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:29:39.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:29:40.312 [DEBUG] [Thread-130176] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:29:40.312 [DEBUG] [Thread-130176] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:29:40.313 [DEBUG] [Thread-130176] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T15:29:40.353 [DEBUG] [Thread-130176] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:29:40.353 [DEBUG] [Thread-130176] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:29:40.357 [DEBUG] [Thread-130176] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:29:40.368 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:29:40.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T15:29:40.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T15:29:40.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T15:29:40.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:29:40.380 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T15:29:40.380 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:29:40.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:29:40.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T15:29:40.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.561600 -999.00  +25.90  25.41     17   -0.70 1 2 1 1 1   888    0 25.71 -53.93 ----- 25.0 25.4 284.0 35.5 31.1 -21.2 31.0 -20.1 31.4 -19.3 31.6 -20.1
2025-12-31T15:29:40.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T15:29:40.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T15:29:40.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.561600
2025-12-31T15:29:40.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T15:29:40.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T15:29:40.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T15:29:40.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T15:29:40.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T15:29:40.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T15:29:16', tmtdew=32.59, humidity=11.36, cloud=0.0, wind=22.59, temperature=26.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T13:28:42.240', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T15:29:40.383 [DEBUG] [Thread-130176] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:29:40.469 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T15:29:40.481 [DEBUG] [Thread-130179] [transport.py] [_log()] starting thread (client mode): 0xb6b2af20
2025-12-31T15:29:40.481 [DEBUG] [Thread-130179] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:29:40.495 [DEBUG] [Thread-130179] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T15:29:40.496 [INFO] [Thread-130179] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T15:29:40.503 [DEBUG] [Thread-130179] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:29:40.503 [DEBUG] [Thread-130179] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T15:29:40.503 [DEBUG] [Thread-130179] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:29:40.503 [DEBUG] [Thread-130179] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:29:40.503 [DEBUG] [Thread-130179] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:29:40.503 [DEBUG] [Thread-130179] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:29:40.504 [DEBUG] [Thread-130179] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:29:40.504 [DEBUG] [Thread-130179] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:29:40.504 [DEBUG] [Thread-130179] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:29:40.504 [DEBUG] [Thread-130179] [transport.py] [_log()] client lang: <none>
2025-12-31T15:29:40.504 [DEBUG] [Thread-130179] [transport.py] [_log()] server lang: <none>
2025-12-31T15:29:40.504 [DEBUG] [Thread-130179] [transport.py] [_log()] kex follows: False
2025-12-31T15:29:40.504 [DEBUG] [Thread-130179] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:29:40.504 [DEBUG] [Thread-130179] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:29:40.504 [DEBUG] [Thread-130179] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:29:40.504 [DEBUG] [Thread-130179] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:29:40.504 [DEBUG] [Thread-130179] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:29:40.504 [DEBUG] [Thread-130179] [transport.py] [_log()] Compression: none
2025-12-31T15:29:40.504 [DEBUG] [Thread-130179] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:29:40.562 [DEBUG] [Thread-130179] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:29:40.563 [DEBUG] [Thread-130179] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:29:40.564 [DEBUG] [Thread-130179] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T15:29:40.564 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T15:29:40.564 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:29:40.618 [DEBUG] [Thread-130179] [transport.py] [_log()] userauth is OK
2025-12-31T15:29:40.619 [DEBUG] [Thread-130179] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:29:40.619 [DEBUG] [Thread-130179] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:29:40.619 [DEBUG] [Thread-130179] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T15:29:40.619 [DEBUG] [Thread-130179] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:29:40.643 [INFO] [Thread-130179] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:29:40.643 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T15:29:40.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:29:41.477 [DEBUG] [Thread-130179] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:29:41.478 [DEBUG] [Thread-130179] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:29:41.526 [DEBUG] [Thread-130179] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:29:41.526 [DEBUG] [Thread-130179] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:29:41.535 [DEBUG] [Thread-130179] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:29:41.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:29:41.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T15:29:41.552 [DEBUG] [Thread-130181 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:29:41.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T15:29:41.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:29:41.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:29:41.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:29:41.572 [DEBUG] [Thread-130179] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:29:56.604 [DEBUG] [Thread-130182 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:30:07.877 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:30:07.878 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:30:11.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T15:30:11.576 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T15:30: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-12-31T15:30:11.644 [DEBUG] [Thread-130183 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:30:12.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 15, 29, 48), 32.88, 11.36, 0.0, 32.73, 27.21, 0, 0, 0, 2, 0, 0),)
2025-12-31T15:30:12.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 15:29:48
2025-12-31T15:30:12.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T15:30:12.575 [DEBUG] [Thread-130184] [transport.py] [_log()] starting thread (client mode): 0xb6b63970
2025-12-31T15:30:12.575 [DEBUG] [Thread-130184] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:30:12.596 [DEBUG] [Thread-130184] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T15:30:12.596 [INFO] [Thread-130184] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T15:30:12.600 [DEBUG] [Thread-130184] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:30:12.600 [DEBUG] [Thread-130184] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T15:30:12.600 [DEBUG] [Thread-130184] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:30:12.600 [DEBUG] [Thread-130184] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:30:12.600 [DEBUG] [Thread-130184] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:30:12.600 [DEBUG] [Thread-130184] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:30:12.600 [DEBUG] [Thread-130184] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:30:12.600 [DEBUG] [Thread-130184] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:30:12.600 [DEBUG] [Thread-130184] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:30:12.600 [DEBUG] [Thread-130184] [transport.py] [_log()] client lang: <none>
2025-12-31T15:30:12.600 [DEBUG] [Thread-130184] [transport.py] [_log()] server lang: <none>
2025-12-31T15:30:12.600 [DEBUG] [Thread-130184] [transport.py] [_log()] kex follows: False
2025-12-31T15:30:12.600 [DEBUG] [Thread-130184] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:30:12.600 [DEBUG] [Thread-130184] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:30:12.600 [DEBUG] [Thread-130184] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:30:12.600 [DEBUG] [Thread-130184] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:30:12.600 [DEBUG] [Thread-130184] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:30:12.600 [DEBUG] [Thread-130184] [transport.py] [_log()] Compression: none
2025-12-31T15:30:12.600 [DEBUG] [Thread-130184] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:30:12.619 [DEBUG] [Thread-130184] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:30:12.620 [DEBUG] [Thread-130184] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:30:12.620 [DEBUG] [Thread-130184] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T15:30:12.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T15:30:12.621 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:30:12.622 [DEBUG] [Thread-130184] [transport.py] [_log()] userauth is OK
2025-12-31T15:30:12.622 [DEBUG] [Thread-130184] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:30:12.622 [DEBUG] [Thread-130184] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:30:12.622 [DEBUG] [Thread-130184] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T15:30:12.622 [DEBUG] [Thread-130184] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:30:12.646 [INFO] [Thread-130184] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:30:12.647 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:30:15.720 [DEBUG] [Thread-130184] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:30:15.720 [DEBUG] [Thread-130184] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:30:15.721 [DEBUG] [Thread-130184] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T15:30:15.761 [DEBUG] [Thread-130184] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:30:15.761 [DEBUG] [Thread-130184] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:30:15.763 [DEBUG] [Thread-130184] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:30:15.819 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:30:15.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T15:30:15.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T15:30:15.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T15:30:15.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:30:15.848 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T15:30:15.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:30:15.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:30:15.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T15:30:15.849 [WARNING] [poll_weather_worker] [driver.py] [poll_weather_state()] Unable to get atlas cloud data: list index out of range
2025-12-31T15:30:15.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T15:29:48', tmtdew=32.88, humidity=11.36, cloud=0.0, wind=32.73, temperature=27.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp=None, atlas_cloud=None, atlas_rain=None, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T15:30:15.853 [DEBUG] [Thread-130184] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:30:15.936 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T15:30:15.949 [DEBUG] [Thread-130187] [transport.py] [_log()] starting thread (client mode): 0xb95591e0
2025-12-31T15:30:15.949 [DEBUG] [Thread-130187] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:30:15.964 [DEBUG] [Thread-130187] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T15:30:15.964 [INFO] [Thread-130187] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T15:30:15.971 [DEBUG] [Thread-130187] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:30:15.972 [DEBUG] [Thread-130187] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T15:30:15.972 [DEBUG] [Thread-130187] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:30:15.972 [DEBUG] [Thread-130187] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:30:15.972 [DEBUG] [Thread-130187] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:30:15.972 [DEBUG] [Thread-130187] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:30:15.972 [DEBUG] [Thread-130187] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:30:15.972 [DEBUG] [Thread-130187] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:30:15.972 [DEBUG] [Thread-130187] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:30:15.972 [DEBUG] [Thread-130187] [transport.py] [_log()] client lang: <none>
2025-12-31T15:30:15.972 [DEBUG] [Thread-130187] [transport.py] [_log()] server lang: <none>
2025-12-31T15:30:15.972 [DEBUG] [Thread-130187] [transport.py] [_log()] kex follows: False
2025-12-31T15:30:15.972 [DEBUG] [Thread-130187] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:30:15.972 [DEBUG] [Thread-130187] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:30:15.972 [DEBUG] [Thread-130187] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:30:15.972 [DEBUG] [Thread-130187] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:30:15.972 [DEBUG] [Thread-130187] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:30:15.973 [DEBUG] [Thread-130187] [transport.py] [_log()] Compression: none
2025-12-31T15:30:15.973 [DEBUG] [Thread-130187] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:30:16.030 [DEBUG] [Thread-130187] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:30:16.031 [DEBUG] [Thread-130187] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:30:16.031 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T15:30:16.032 [DEBUG] [Thread-130187] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T15:30:16.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:30:16.086 [DEBUG] [Thread-130187] [transport.py] [_log()] userauth is OK
2025-12-31T15:30:16.087 [DEBUG] [Thread-130187] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:30:16.087 [DEBUG] [Thread-130187] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:30:16.087 [DEBUG] [Thread-130187] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T15:30:16.087 [DEBUG] [Thread-130187] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:30:16.107 [INFO] [Thread-130187] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:30:16.107 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T15:30:16.108 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:30:16.950 [DEBUG] [Thread-130187] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:30:16.951 [DEBUG] [Thread-130187] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:30:16.999 [DEBUG] [Thread-130187] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:30:16.999 [DEBUG] [Thread-130187] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:30:17.008 [DEBUG] [Thread-130187] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:30:17.017 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:30:17.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T15:30:17.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T15:30:17.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:30:17.036 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:30:17.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:30:17.044 [DEBUG] [Thread-130187] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:30:21.395 [DEBUG] [Thread-130189 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:30:26.671 [DEBUG] [Thread-130190 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:30:41.719 [DEBUG] [Thread-130191 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:30:47.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T15:30:47.067 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T15:30:47.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T15:30:47.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 15, 30, 20), 33.06, 11.24, 0.0, 30.56, 27.36, 0, 0, 0, 2, 0, 0),)
2025-12-31T15:30:47.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 15:30:20
2025-12-31T15:30:47.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T15:30:48.057 [DEBUG] [Thread-130192] [transport.py] [_log()] starting thread (client mode): 0xb6b60e80
2025-12-31T15:30:48.057 [DEBUG] [Thread-130192] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:30:48.078 [DEBUG] [Thread-130192] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T15:30:48.078 [INFO] [Thread-130192] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T15:30:48.081 [DEBUG] [Thread-130192] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:30:48.081 [DEBUG] [Thread-130192] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T15:30:48.081 [DEBUG] [Thread-130192] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:30:48.081 [DEBUG] [Thread-130192] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:30:48.081 [DEBUG] [Thread-130192] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:30:48.081 [DEBUG] [Thread-130192] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:30:48.081 [DEBUG] [Thread-130192] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:30:48.081 [DEBUG] [Thread-130192] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:30:48.081 [DEBUG] [Thread-130192] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:30:48.081 [DEBUG] [Thread-130192] [transport.py] [_log()] client lang: <none>
2025-12-31T15:30:48.081 [DEBUG] [Thread-130192] [transport.py] [_log()] server lang: <none>
2025-12-31T15:30:48.081 [DEBUG] [Thread-130192] [transport.py] [_log()] kex follows: False
2025-12-31T15:30:48.081 [DEBUG] [Thread-130192] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:30:48.081 [DEBUG] [Thread-130192] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:30:48.081 [DEBUG] [Thread-130192] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:30:48.081 [DEBUG] [Thread-130192] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:30:48.081 [DEBUG] [Thread-130192] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:30:48.081 [DEBUG] [Thread-130192] [transport.py] [_log()] Compression: none
2025-12-31T15:30:48.081 [DEBUG] [Thread-130192] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:30:48.098 [DEBUG] [Thread-130192] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:30:48.099 [DEBUG] [Thread-130192] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:30:48.099 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T15:30:48.099 [DEBUG] [Thread-130192] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T15:30:48.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:30:48.102 [DEBUG] [Thread-130192] [transport.py] [_log()] userauth is OK
2025-12-31T15:30:48.102 [DEBUG] [Thread-130192] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:30:48.102 [DEBUG] [Thread-130192] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:30:48.102 [DEBUG] [Thread-130192] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T15:30:48.102 [DEBUG] [Thread-130192] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:30:48.125 [INFO] [Thread-130192] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:30:48.126 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:30:48.708 [DEBUG] [Thread-130192] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:30:48.709 [DEBUG] [Thread-130192] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:30:48.710 [DEBUG] [Thread-130192] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T15:30:48.750 [DEBUG] [Thread-130192] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:30:48.750 [DEBUG] [Thread-130192] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:30:48.755 [DEBUG] [Thread-130192] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:30:48.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:30:48.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T15:30:48.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T15:30:48.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T15:30:48.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:30:48.776 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T15:30:48.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:30:48.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:30:48.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T15:30:48.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.562641 -999.00  +25.80  34.67     17   -0.70 1 1 2 1 1   888    0 25.80 -54.05 ----- 36.4 34.7 276.2 43.2 30.9 -25.7 30.8 -22.5 30.4 -25.3 31.7 -25.0
2025-12-31T15:30:48.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T15:30:48.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T15:30:48.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.562641
2025-12-31T15:30:48.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T15:30:48.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T15:30:48.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T15:30:48.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T15:30:48.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T15:30:48.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T15:30:20', tmtdew=33.06, humidity=11.24, cloud=0.0, wind=30.56, temperature=27.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T13:30:12.182', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T15:30:48.779 [DEBUG] [Thread-130192] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:30:48.866 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T15:30:48.878 [DEBUG] [Thread-130195] [transport.py] [_log()] starting thread (client mode): 0xb95d4730
2025-12-31T15:30:48.878 [DEBUG] [Thread-130195] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:30:48.892 [DEBUG] [Thread-130195] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T15:30:48.892 [INFO] [Thread-130195] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T15:30:48.900 [DEBUG] [Thread-130195] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:30:48.900 [DEBUG] [Thread-130195] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T15:30:48.900 [DEBUG] [Thread-130195] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:30:48.900 [DEBUG] [Thread-130195] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:30:48.900 [DEBUG] [Thread-130195] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:30:48.900 [DEBUG] [Thread-130195] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:30:48.900 [DEBUG] [Thread-130195] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:30:48.900 [DEBUG] [Thread-130195] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:30:48.900 [DEBUG] [Thread-130195] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:30:48.900 [DEBUG] [Thread-130195] [transport.py] [_log()] client lang: <none>
2025-12-31T15:30:48.900 [DEBUG] [Thread-130195] [transport.py] [_log()] server lang: <none>
2025-12-31T15:30:48.900 [DEBUG] [Thread-130195] [transport.py] [_log()] kex follows: False
2025-12-31T15:30:48.901 [DEBUG] [Thread-130195] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:30:48.901 [DEBUG] [Thread-130195] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:30:48.901 [DEBUG] [Thread-130195] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:30:48.901 [DEBUG] [Thread-130195] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:30:48.901 [DEBUG] [Thread-130195] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:30:48.901 [DEBUG] [Thread-130195] [transport.py] [_log()] Compression: none
2025-12-31T15:30:48.901 [DEBUG] [Thread-130195] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:30:48.962 [DEBUG] [Thread-130195] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:30:48.963 [DEBUG] [Thread-130195] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:30:48.963 [DEBUG] [Thread-130195] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T15:30:48.964 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T15:30:48.964 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:30:49.018 [DEBUG] [Thread-130195] [transport.py] [_log()] userauth is OK
2025-12-31T15:30:49.018 [DEBUG] [Thread-130195] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:30:49.018 [DEBUG] [Thread-130195] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:30:49.018 [DEBUG] [Thread-130195] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T15:30:49.018 [DEBUG] [Thread-130195] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:30:49.040 [INFO] [Thread-130195] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:30:49.040 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T15:30:49.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:30:49.906 [DEBUG] [Thread-130195] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:30:49.906 [DEBUG] [Thread-130195] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:30:49.957 [DEBUG] [Thread-130195] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:30:49.957 [DEBUG] [Thread-130195] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:30:49.968 [DEBUG] [Thread-130195] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:30:49.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:30:49.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T15:30:49.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T15:30:49.996 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:30:49.997 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:30:49.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:30:50.005 [DEBUG] [Thread-130195] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:30:56.753 [DEBUG] [Thread-130197 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:31:08.019 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:31:08.020 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:31:11.803 [DEBUG] [Thread-130198 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:31:20.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T15:31:20.020 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T15:31:20.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T15:31:20.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 15, 30, 52), 32.45, 11.36, 0.0, 41.59, 27.08, 0, 0, 0, 2, 0, 0),)
2025-12-31T15:31:20.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 15:30:52
2025-12-31T15:31:20.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T15:31:21.027 [DEBUG] [Thread-130199] [transport.py] [_log()] starting thread (client mode): 0xb6ba29b0
2025-12-31T15:31:21.027 [DEBUG] [Thread-130199] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:31:21.047 [DEBUG] [Thread-130199] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T15:31:21.048 [INFO] [Thread-130199] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T15:31:21.048 [DEBUG] [Thread-130199] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:31:21.049 [DEBUG] [Thread-130199] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T15:31:21.049 [DEBUG] [Thread-130199] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:31:21.049 [DEBUG] [Thread-130199] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:31:21.049 [DEBUG] [Thread-130199] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:31:21.049 [DEBUG] [Thread-130199] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:31:21.049 [DEBUG] [Thread-130199] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:31:21.049 [DEBUG] [Thread-130199] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:31:21.049 [DEBUG] [Thread-130199] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:31:21.049 [DEBUG] [Thread-130199] [transport.py] [_log()] client lang: <none>
2025-12-31T15:31:21.049 [DEBUG] [Thread-130199] [transport.py] [_log()] server lang: <none>
2025-12-31T15:31:21.049 [DEBUG] [Thread-130199] [transport.py] [_log()] kex follows: False
2025-12-31T15:31:21.049 [DEBUG] [Thread-130199] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:31:21.049 [DEBUG] [Thread-130199] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:31:21.049 [DEBUG] [Thread-130199] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:31:21.049 [DEBUG] [Thread-130199] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:31:21.049 [DEBUG] [Thread-130199] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:31:21.049 [DEBUG] [Thread-130199] [transport.py] [_log()] Compression: none
2025-12-31T15:31:21.049 [DEBUG] [Thread-130199] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:31:21.063 [DEBUG] [Thread-130199] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:31:21.063 [DEBUG] [Thread-130199] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:31:21.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T15:31:21.064 [DEBUG] [Thread-130199] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T15:31:21.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:31:21.066 [DEBUG] [Thread-130199] [transport.py] [_log()] userauth is OK
2025-12-31T15:31:21.066 [DEBUG] [Thread-130199] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:31:21.066 [DEBUG] [Thread-130199] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:31:21.066 [DEBUG] [Thread-130199] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T15:31:21.067 [DEBUG] [Thread-130199] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:31:21.085 [INFO] [Thread-130199] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:31:21.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:31:21.449 [DEBUG] [Thread-130201 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:31:21.879 [DEBUG] [Thread-130199] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:31:21.879 [DEBUG] [Thread-130199] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:31:21.879 [DEBUG] [Thread-130199] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T15:31:21.920 [DEBUG] [Thread-130199] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:31:21.920 [DEBUG] [Thread-130199] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:31:21.924 [DEBUG] [Thread-130199] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:31:21.936 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:31:21.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T15:31:21.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T15:31:21.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T15:31:21.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:31:21.948 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T15:31:21.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:31:21.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:31:21.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T15:31:21.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.562989 -999.00  +25.60  38.64     17   -0.50 1 1 2 1 1   888    0 25.69 -59.03 ----- 33.8 38.6 271.0 44.4 30.7 -24.8 30.7 -22.2 30.3 -28.0 31.4 -23.2
2025-12-31T15:31:21.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T15:31:21.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T15:31:21.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.562989
2025-12-31T15:31:21.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T15:31:21.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T15:31:21.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T15:31:21.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T15:31:21.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T15:31:21.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T15:30:52', tmtdew=32.45, humidity=11.36, cloud=0.0, wind=41.59, temperature=27.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T13:30:42.250', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T15:31:21.951 [DEBUG] [Thread-130199] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:31:22.036 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T15:31:22.050 [DEBUG] [Thread-130203] [transport.py] [_log()] starting thread (client mode): 0xb6bbd2a0
2025-12-31T15:31:22.050 [DEBUG] [Thread-130203] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:31:22.065 [DEBUG] [Thread-130203] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T15:31:22.066 [INFO] [Thread-130203] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T15:31:22.073 [DEBUG] [Thread-130203] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:31:22.073 [DEBUG] [Thread-130203] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T15:31:22.073 [DEBUG] [Thread-130203] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:31:22.073 [DEBUG] [Thread-130203] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:31:22.073 [DEBUG] [Thread-130203] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:31:22.073 [DEBUG] [Thread-130203] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:31:22.073 [DEBUG] [Thread-130203] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:31:22.073 [DEBUG] [Thread-130203] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:31:22.073 [DEBUG] [Thread-130203] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:31:22.073 [DEBUG] [Thread-130203] [transport.py] [_log()] client lang: <none>
2025-12-31T15:31:22.073 [DEBUG] [Thread-130203] [transport.py] [_log()] server lang: <none>
2025-12-31T15:31:22.073 [DEBUG] [Thread-130203] [transport.py] [_log()] kex follows: False
2025-12-31T15:31:22.073 [DEBUG] [Thread-130203] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:31:22.073 [DEBUG] [Thread-130203] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:31:22.073 [DEBUG] [Thread-130203] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:31:22.074 [DEBUG] [Thread-130203] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:31:22.074 [DEBUG] [Thread-130203] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:31:22.074 [DEBUG] [Thread-130203] [transport.py] [_log()] Compression: none
2025-12-31T15:31:22.074 [DEBUG] [Thread-130203] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:31:22.138 [DEBUG] [Thread-130203] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:31:22.138 [DEBUG] [Thread-130203] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:31:22.139 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T15:31:22.140 [DEBUG] [Thread-130203] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T15:31:22.141 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:31:22.194 [DEBUG] [Thread-130203] [transport.py] [_log()] userauth is OK
2025-12-31T15:31:22.194 [DEBUG] [Thread-130203] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:31:22.194 [DEBUG] [Thread-130203] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:31:22.194 [DEBUG] [Thread-130203] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T15:31:22.194 [DEBUG] [Thread-130203] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:31:22.213 [INFO] [Thread-130203] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:31:22.213 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T15:31:22.213 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:31:23.078 [DEBUG] [Thread-130203] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:31:23.078 [DEBUG] [Thread-130203] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:31:23.126 [DEBUG] [Thread-130203] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:31:23.126 [DEBUG] [Thread-130203] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:31:23.135 [DEBUG] [Thread-130203] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:31:23.145 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:31:23.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-12-31T15:31:23.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T15:31:23.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:31:23.163 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:31:23.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:31:23.172 [DEBUG] [Thread-130203] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:31:26.835 [DEBUG] [Thread-130205 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:31:41.887 [DEBUG] [Thread-130206 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:31:53.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T15:31:53.194 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T15:31:53.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T15:31:53.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 15, 31, 24), 32.28, 11.46, 0.0, 36.21, 26.88, 0, 0, 0, 2, 0, 0),)
2025-12-31T15:31:53.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 15:31:24
2025-12-31T15:31:54.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T15:31:54.182 [DEBUG] [Thread-130207] [transport.py] [_log()] starting thread (client mode): 0xb6bbafb0
2025-12-31T15:31:54.182 [DEBUG] [Thread-130207] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:31:54.204 [DEBUG] [Thread-130207] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T15:31:54.204 [INFO] [Thread-130207] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T15:31:54.208 [DEBUG] [Thread-130207] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:31:54.208 [DEBUG] [Thread-130207] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T15:31:54.208 [DEBUG] [Thread-130207] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:31:54.208 [DEBUG] [Thread-130207] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:31:54.208 [DEBUG] [Thread-130207] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:31:54.208 [DEBUG] [Thread-130207] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:31:54.208 [DEBUG] [Thread-130207] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:31:54.208 [DEBUG] [Thread-130207] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:31:54.208 [DEBUG] [Thread-130207] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:31:54.208 [DEBUG] [Thread-130207] [transport.py] [_log()] client lang: <none>
2025-12-31T15:31:54.208 [DEBUG] [Thread-130207] [transport.py] [_log()] server lang: <none>
2025-12-31T15:31:54.208 [DEBUG] [Thread-130207] [transport.py] [_log()] kex follows: False
2025-12-31T15:31:54.208 [DEBUG] [Thread-130207] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:31:54.208 [DEBUG] [Thread-130207] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:31:54.208 [DEBUG] [Thread-130207] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:31:54.208 [DEBUG] [Thread-130207] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:31:54.208 [DEBUG] [Thread-130207] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:31:54.208 [DEBUG] [Thread-130207] [transport.py] [_log()] Compression: none
2025-12-31T15:31:54.208 [DEBUG] [Thread-130207] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:31:54.224 [DEBUG] [Thread-130207] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:31:54.224 [DEBUG] [Thread-130207] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:31:54.225 [DEBUG] [Thread-130207] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T15:31:54.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T15:31:54.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:31:54.227 [DEBUG] [Thread-130207] [transport.py] [_log()] userauth is OK
2025-12-31T15:31:54.227 [DEBUG] [Thread-130207] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:31:54.227 [DEBUG] [Thread-130207] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:31:54.227 [DEBUG] [Thread-130207] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T15:31:54.227 [DEBUG] [Thread-130207] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:31:54.247 [INFO] [Thread-130207] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:31:54.248 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:31:54.918 [DEBUG] [Thread-130207] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:31:54.918 [DEBUG] [Thread-130207] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:31:54.919 [DEBUG] [Thread-130207] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T15:31:54.959 [DEBUG] [Thread-130207] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:31:54.959 [DEBUG] [Thread-130207] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:31:54.962 [DEBUG] [Thread-130207] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:31:54.973 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:31:54.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T15:31:54.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T15:31:54.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T15:31:54.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:31:54.985 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T15:31:54.985 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:31:54.985 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:31:54.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T15:31:54.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.563336 -999.00  +25.80  27.89     18   -0.20 1 2 1 1 1   888    0 24.62 -72.49 ----- 27.0 27.9 292.0 34.7 30.7 -22.8 30.9 -20.2 31.1 -17.8 31.3 -21.4
2025-12-31T15:31:54.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T15:31:54.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T15:31:54.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.563336
2025-12-31T15:31:54.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T15:31:54.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T15:31:54.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T15:31:54.987 [DEBUG] [Thread-130207] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:31:54.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T15:31:54.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T15:31:54.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T15:31:24', tmtdew=32.28, humidity=11.46, cloud=0.0, wind=36.21, temperature=26.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T13:31:12.230', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T15:31:55.071 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T15:31:55.084 [DEBUG] [Thread-130210] [transport.py] [_log()] starting thread (client mode): 0xb6bb8eb0
2025-12-31T15:31:55.084 [DEBUG] [Thread-130210] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:31:55.099 [DEBUG] [Thread-130210] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T15:31:55.099 [INFO] [Thread-130210] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T15:31:55.107 [DEBUG] [Thread-130210] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:31:55.107 [DEBUG] [Thread-130210] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T15:31:55.107 [DEBUG] [Thread-130210] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:31:55.107 [DEBUG] [Thread-130210] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:31:55.107 [DEBUG] [Thread-130210] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:31:55.107 [DEBUG] [Thread-130210] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:31:55.107 [DEBUG] [Thread-130210] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:31:55.107 [DEBUG] [Thread-130210] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:31:55.107 [DEBUG] [Thread-130210] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:31:55.107 [DEBUG] [Thread-130210] [transport.py] [_log()] client lang: <none>
2025-12-31T15:31:55.107 [DEBUG] [Thread-130210] [transport.py] [_log()] server lang: <none>
2025-12-31T15:31:55.108 [DEBUG] [Thread-130210] [transport.py] [_log()] kex follows: False
2025-12-31T15:31:55.108 [DEBUG] [Thread-130210] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:31:55.108 [DEBUG] [Thread-130210] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:31:55.108 [DEBUG] [Thread-130210] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:31:55.108 [DEBUG] [Thread-130210] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:31:55.108 [DEBUG] [Thread-130210] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:31:55.108 [DEBUG] [Thread-130210] [transport.py] [_log()] Compression: none
2025-12-31T15:31:55.108 [DEBUG] [Thread-130210] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:31:55.163 [DEBUG] [Thread-130210] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:31:55.163 [DEBUG] [Thread-130210] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:31:55.164 [DEBUG] [Thread-130210] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T15:31:55.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T15:31:55.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:31:55.221 [DEBUG] [Thread-130210] [transport.py] [_log()] userauth is OK
2025-12-31T15:31:55.221 [DEBUG] [Thread-130210] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:31:55.221 [DEBUG] [Thread-130210] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:31:55.221 [DEBUG] [Thread-130210] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T15:31:55.221 [DEBUG] [Thread-130210] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:31:55.234 [INFO] [Thread-130210] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:31:55.234 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T15:31:55.234 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:31:56.071 [DEBUG] [Thread-130210] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:31:56.072 [DEBUG] [Thread-130210] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:31:56.120 [DEBUG] [Thread-130210] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:31:56.120 [DEBUG] [Thread-130210] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:31:56.129 [DEBUG] [Thread-130210] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:31:56.137 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:31: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')
2025-12-31T15:31:56.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-12-31T15:31:56.153 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:31:56.153 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:31:56.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:31:56.162 [DEBUG] [Thread-130210] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:31:56.915 [DEBUG] [Thread-130212 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:32:08.160 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:32:08.161 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:32:11.955 [DEBUG] [Thread-130213 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:32:21.493 [DEBUG] [Thread-130214 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:32:26.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T15:32:26.184 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T15:32:26.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-12-31T15:32:26.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 15, 31, 56), 31.34, 12.31, 0.0, 27.49, 26.58, 0, 0, 0, 2, 0, 0),)
2025-12-31T15:32:26.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 15:31:56
2025-12-31T15:32:26.986 [DEBUG] [Thread-130215 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:32:27.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T15:32:27.183 [DEBUG] [Thread-130216] [transport.py] [_log()] starting thread (client mode): 0xb6bb9120
2025-12-31T15:32:27.183 [DEBUG] [Thread-130216] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:32:27.203 [DEBUG] [Thread-130216] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T15:32:27.203 [INFO] [Thread-130216] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T15:32:27.207 [DEBUG] [Thread-130216] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:32:27.207 [DEBUG] [Thread-130216] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T15:32:27.207 [DEBUG] [Thread-130216] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:32:27.207 [DEBUG] [Thread-130216] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:32:27.207 [DEBUG] [Thread-130216] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:32:27.207 [DEBUG] [Thread-130216] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:32:27.207 [DEBUG] [Thread-130216] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:32:27.207 [DEBUG] [Thread-130216] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:32:27.207 [DEBUG] [Thread-130216] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:32:27.207 [DEBUG] [Thread-130216] [transport.py] [_log()] client lang: <none>
2025-12-31T15:32:27.207 [DEBUG] [Thread-130216] [transport.py] [_log()] server lang: <none>
2025-12-31T15:32:27.207 [DEBUG] [Thread-130216] [transport.py] [_log()] kex follows: False
2025-12-31T15:32:27.207 [DEBUG] [Thread-130216] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:32:27.207 [DEBUG] [Thread-130216] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:32:27.207 [DEBUG] [Thread-130216] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:32:27.207 [DEBUG] [Thread-130216] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:32:27.207 [DEBUG] [Thread-130216] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:32:27.207 [DEBUG] [Thread-130216] [transport.py] [_log()] Compression: none
2025-12-31T15:32:27.207 [DEBUG] [Thread-130216] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:32:27.225 [DEBUG] [Thread-130216] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:32:27.226 [DEBUG] [Thread-130216] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:32:27.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T15:32:27.227 [DEBUG] [Thread-130216] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T15:32:27.228 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:32:27.229 [DEBUG] [Thread-130216] [transport.py] [_log()] userauth is OK
2025-12-31T15:32:27.229 [DEBUG] [Thread-130216] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:32:27.229 [DEBUG] [Thread-130216] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:32:27.229 [DEBUG] [Thread-130216] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T15:32:27.229 [DEBUG] [Thread-130216] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:32:27.248 [INFO] [Thread-130216] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:32:27.249 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:32:28.014 [DEBUG] [Thread-130216] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:32:28.014 [DEBUG] [Thread-130216] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:32:28.014 [DEBUG] [Thread-130216] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T15:32:28.055 [DEBUG] [Thread-130216] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:32:28.055 [DEBUG] [Thread-130216] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:32:28.058 [DEBUG] [Thread-130216] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:32:28.070 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:32:28.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T15:32:28.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T15:32:28.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T15:32:28.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:32:28.081 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T15:32:28.081 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:32:28.081 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:32:28.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T15:32:28.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.563683 -999.00  +26.20  21.06     17   +0.00 1 2 1 1 1   888    0 24.67 -78.74 ----- 21.7 21.1 306.4 30.6 31.1 -23.0 30.8 -22.9 31.1 -23.0 31.8 -20.3
2025-12-31T15:32:28.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T15:32:28.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T15:32:28.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.563683
2025-12-31T15:32:28.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T15:32:28.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T15:32:28.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T15:32:28.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T15:32:28.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T15:32:28.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T15:31:56', tmtdew=31.34, humidity=12.31, cloud=0.0, wind=27.49, temperature=26.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T13:31:42.211', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T15:32:28.083 [DEBUG] [Thread-130216] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:32:28.164 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T15:32:28.177 [DEBUG] [Thread-130219] [transport.py] [_log()] starting thread (client mode): 0xb6b2af20
2025-12-31T15:32:28.177 [DEBUG] [Thread-130219] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:32:28.192 [DEBUG] [Thread-130219] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T15:32:28.192 [INFO] [Thread-130219] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T15:32:28.200 [DEBUG] [Thread-130219] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:32:28.200 [DEBUG] [Thread-130219] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T15:32:28.200 [DEBUG] [Thread-130219] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:32:28.200 [DEBUG] [Thread-130219] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:32:28.200 [DEBUG] [Thread-130219] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:32:28.200 [DEBUG] [Thread-130219] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:32:28.200 [DEBUG] [Thread-130219] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:32:28.201 [DEBUG] [Thread-130219] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:32:28.201 [DEBUG] [Thread-130219] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:32:28.201 [DEBUG] [Thread-130219] [transport.py] [_log()] client lang: <none>
2025-12-31T15:32:28.201 [DEBUG] [Thread-130219] [transport.py] [_log()] server lang: <none>
2025-12-31T15:32:28.201 [DEBUG] [Thread-130219] [transport.py] [_log()] kex follows: False
2025-12-31T15:32:28.201 [DEBUG] [Thread-130219] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:32:28.201 [DEBUG] [Thread-130219] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:32:28.201 [DEBUG] [Thread-130219] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:32:28.201 [DEBUG] [Thread-130219] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:32:28.201 [DEBUG] [Thread-130219] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:32:28.201 [DEBUG] [Thread-130219] [transport.py] [_log()] Compression: none
2025-12-31T15:32:28.201 [DEBUG] [Thread-130219] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:32:28.257 [DEBUG] [Thread-130219] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:32:28.257 [DEBUG] [Thread-130219] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:32:28.258 [DEBUG] [Thread-130219] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T15:32:28.258 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T15:32:28.258 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:32:28.313 [DEBUG] [Thread-130219] [transport.py] [_log()] userauth is OK
2025-12-31T15:32:28.313 [DEBUG] [Thread-130219] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:32:28.313 [DEBUG] [Thread-130219] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:32:28.313 [DEBUG] [Thread-130219] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T15:32:28.313 [DEBUG] [Thread-130219] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:32:28.333 [INFO] [Thread-130219] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:32:28.333 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T15:32:28.334 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:32:29.197 [DEBUG] [Thread-130219] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:32:29.197 [DEBUG] [Thread-130219] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:32:29.245 [DEBUG] [Thread-130219] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:32:29.245 [DEBUG] [Thread-130219] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:32:29.253 [DEBUG] [Thread-130219] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:32:29.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:32:29.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T15:32:29.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T15:32:29.277 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:32:29.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:32:29.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:32:29.284 [DEBUG] [Thread-130219] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:32:42.016 [DEBUG] [Thread-130221 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:32:57.068 [DEBUG] [Thread-130222 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:32:59.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T15:32:59.307 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T15:32:59.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T15:33:00.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 15, 32, 28), 31.14, 12.42, 0.0, 23.1, 26.23, 0, 0, 0, 2, 0, 0),)
2025-12-31T15:33:00.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 15:32:28
2025-12-31T15:33:00.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T15:33:00.346 [DEBUG] [Thread-130223] [transport.py] [_log()] starting thread (client mode): 0xb6b2bdc0
2025-12-31T15:33:00.346 [DEBUG] [Thread-130223] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:33:00.367 [DEBUG] [Thread-130223] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T15:33:00.367 [INFO] [Thread-130223] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T15:33:00.370 [DEBUG] [Thread-130223] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:33:00.371 [DEBUG] [Thread-130223] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T15:33:00.371 [DEBUG] [Thread-130223] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:33:00.371 [DEBUG] [Thread-130223] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:33:00.371 [DEBUG] [Thread-130223] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:33:00.371 [DEBUG] [Thread-130223] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:33:00.371 [DEBUG] [Thread-130223] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:33:00.371 [DEBUG] [Thread-130223] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:33:00.371 [DEBUG] [Thread-130223] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:33:00.371 [DEBUG] [Thread-130223] [transport.py] [_log()] client lang: <none>
2025-12-31T15:33:00.371 [DEBUG] [Thread-130223] [transport.py] [_log()] server lang: <none>
2025-12-31T15:33:00.371 [DEBUG] [Thread-130223] [transport.py] [_log()] kex follows: False
2025-12-31T15:33:00.371 [DEBUG] [Thread-130223] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:33:00.371 [DEBUG] [Thread-130223] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:33:00.371 [DEBUG] [Thread-130223] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:33:00.371 [DEBUG] [Thread-130223] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:33:00.371 [DEBUG] [Thread-130223] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:33:00.371 [DEBUG] [Thread-130223] [transport.py] [_log()] Compression: none
2025-12-31T15:33:00.371 [DEBUG] [Thread-130223] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:33:00.386 [DEBUG] [Thread-130223] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:33:00.386 [DEBUG] [Thread-130223] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:33:00.386 [DEBUG] [Thread-130223] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T15:33:00.386 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T15:33:00.386 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:33:00.387 [DEBUG] [Thread-130223] [transport.py] [_log()] userauth is OK
2025-12-31T15:33:00.387 [DEBUG] [Thread-130223] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:33:00.387 [DEBUG] [Thread-130223] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:33:00.387 [DEBUG] [Thread-130223] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T15:33:00.387 [DEBUG] [Thread-130223] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:33:00.396 [INFO] [Thread-130223] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:33:00.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:33:01.045 [DEBUG] [Thread-130223] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:33:01.045 [DEBUG] [Thread-130223] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:33:01.045 [DEBUG] [Thread-130223] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T15:33:01.087 [DEBUG] [Thread-130223] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:33:01.087 [DEBUG] [Thread-130223] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:33:01.090 [DEBUG] [Thread-130223] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:33:01.102 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:33:01.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T15:33:01.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T15:33:01.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T15:33:01.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:33:01.111 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T15:33:01.111 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:33:01.111 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:33:01.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T15:33:01.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.564030 -999.00  +26.40  30.89     17   -0.40 1 2 2 1 1   888    0 24.81 -73.12 ----- 25.5 30.9 296.8 43.4 30.9 -24.4 30.7 -23.0 30.9 -21.2 31.4 -23.4
2025-12-31T15:33:01.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T15:33:01.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T15:33:01.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.564030
2025-12-31T15:33:01.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T15:33:01.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T15:33:01.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T15:33:01.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T15:33:01.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T15:33:01.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T15:32:28', tmtdew=31.14, humidity=12.42, cloud=0.0, wind=23.1, temperature=26.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T13:32:12.192', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T15:33:01.113 [DEBUG] [Thread-130223] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:33:01.186 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T15:33:01.198 [DEBUG] [Thread-130226] [transport.py] [_log()] starting thread (client mode): 0xb6b62890
2025-12-31T15:33:01.198 [DEBUG] [Thread-130226] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:33:01.212 [DEBUG] [Thread-130226] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T15:33:01.212 [INFO] [Thread-130226] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T15:33:01.220 [DEBUG] [Thread-130226] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:33:01.220 [DEBUG] [Thread-130226] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T15:33:01.220 [DEBUG] [Thread-130226] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:33:01.220 [DEBUG] [Thread-130226] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:33:01.220 [DEBUG] [Thread-130226] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:33:01.220 [DEBUG] [Thread-130226] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:33:01.220 [DEBUG] [Thread-130226] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:33:01.220 [DEBUG] [Thread-130226] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:33:01.220 [DEBUG] [Thread-130226] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:33:01.220 [DEBUG] [Thread-130226] [transport.py] [_log()] client lang: <none>
2025-12-31T15:33:01.220 [DEBUG] [Thread-130226] [transport.py] [_log()] server lang: <none>
2025-12-31T15:33:01.220 [DEBUG] [Thread-130226] [transport.py] [_log()] kex follows: False
2025-12-31T15:33:01.220 [DEBUG] [Thread-130226] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:33:01.220 [DEBUG] [Thread-130226] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:33:01.220 [DEBUG] [Thread-130226] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:33:01.220 [DEBUG] [Thread-130226] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:33:01.220 [DEBUG] [Thread-130226] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:33:01.220 [DEBUG] [Thread-130226] [transport.py] [_log()] Compression: none
2025-12-31T15:33:01.221 [DEBUG] [Thread-130226] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:33:01.279 [DEBUG] [Thread-130226] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:33:01.279 [DEBUG] [Thread-130226] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:33:01.279 [DEBUG] [Thread-130226] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T15:33:01.279 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T15:33:01.280 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:33:01.336 [DEBUG] [Thread-130226] [transport.py] [_log()] userauth is OK
2025-12-31T15:33:01.336 [DEBUG] [Thread-130226] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:33:01.336 [DEBUG] [Thread-130226] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:33:01.336 [DEBUG] [Thread-130226] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T15:33:01.336 [DEBUG] [Thread-130226] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:33:01.354 [INFO] [Thread-130226] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:33:01.354 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T15:33:01.354 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:33:02.213 [DEBUG] [Thread-130226] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:33:02.213 [DEBUG] [Thread-130226] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:33:02.261 [DEBUG] [Thread-130226] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:33:02.261 [DEBUG] [Thread-130226] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:33:02.270 [DEBUG] [Thread-130226] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:33:02.278 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:33:02.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T15:33: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-12-31T15:33:02.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:33:02.294 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:33:02.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:33:02.301 [DEBUG] [Thread-130226] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:33:08.300 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:33:08.302 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:33:12.104 [DEBUG] [Thread-130228 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:33:21.546 [DEBUG] [Thread-130229 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:33:27.156 [DEBUG] [Thread-130230 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:33:32.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T15:33:32.324 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T15:33:32.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T15:33:33.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 15, 33), 31.25, 12.19, 0.0, 29.24, 25.77, 0, 0, 0, 2, 0, 0),)
2025-12-31T15:33:33.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 15:33:00
2025-12-31T15:33:33.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T15:33:33.354 [DEBUG] [Thread-130231] [transport.py] [_log()] starting thread (client mode): 0xb9559120
2025-12-31T15:33:33.355 [DEBUG] [Thread-130231] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:33:33.375 [DEBUG] [Thread-130231] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T15:33:33.375 [INFO] [Thread-130231] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T15:33:33.378 [DEBUG] [Thread-130231] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:33:33.378 [DEBUG] [Thread-130231] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T15:33:33.378 [DEBUG] [Thread-130231] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:33:33.378 [DEBUG] [Thread-130231] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:33:33.378 [DEBUG] [Thread-130231] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:33:33.378 [DEBUG] [Thread-130231] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:33:33.378 [DEBUG] [Thread-130231] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:33:33.378 [DEBUG] [Thread-130231] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:33:33.378 [DEBUG] [Thread-130231] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:33:33.378 [DEBUG] [Thread-130231] [transport.py] [_log()] client lang: <none>
2025-12-31T15:33:33.378 [DEBUG] [Thread-130231] [transport.py] [_log()] server lang: <none>
2025-12-31T15:33:33.378 [DEBUG] [Thread-130231] [transport.py] [_log()] kex follows: False
2025-12-31T15:33:33.378 [DEBUG] [Thread-130231] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:33:33.378 [DEBUG] [Thread-130231] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:33:33.379 [DEBUG] [Thread-130231] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:33:33.379 [DEBUG] [Thread-130231] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:33:33.379 [DEBUG] [Thread-130231] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:33:33.379 [DEBUG] [Thread-130231] [transport.py] [_log()] Compression: none
2025-12-31T15:33:33.379 [DEBUG] [Thread-130231] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:33:33.396 [DEBUG] [Thread-130231] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:33:33.396 [DEBUG] [Thread-130231] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:33:33.396 [DEBUG] [Thread-130231] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T15:33:33.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T15:33:33.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:33:33.398 [DEBUG] [Thread-130231] [transport.py] [_log()] userauth is OK
2025-12-31T15:33:33.398 [DEBUG] [Thread-130231] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:33:33.398 [DEBUG] [Thread-130231] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:33:33.398 [DEBUG] [Thread-130231] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T15:33:33.398 [DEBUG] [Thread-130231] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:33:33.407 [INFO] [Thread-130231] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:33:33.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:33:34.159 [DEBUG] [Thread-130231] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:33:34.159 [DEBUG] [Thread-130231] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:33:34.159 [DEBUG] [Thread-130231] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T15:33:34.200 [DEBUG] [Thread-130231] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:33:34.200 [DEBUG] [Thread-130231] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:33:34.202 [DEBUG] [Thread-130231] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:33:34.214 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:33:34.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T15:33:34.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T15:33:34.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T15:33:34.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:33:34.220 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T15:33:34.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:33:34.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:33:34.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T15:33:34.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.564378 -999.00  +26.40  32.90     16   -0.80 1 2 2 1 1   888    0 24.90 -64.75 ----- 25.2 32.9 276.0 37.2 30.7 -25.6 30.7 -22.1 30.7 -22.0 31.3 -25.2
2025-12-31T15:33:34.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T15:33:34.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T15:33:34.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.564378
2025-12-31T15:33:34.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T15:33:34.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T15:33:34.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T15:33:34.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T15:33:34.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T15:33:34.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T15:33:00', tmtdew=31.25, humidity=12.19, cloud=0.0, wind=29.24, temperature=25.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T13:32:42.259', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T15:33:34.221 [DEBUG] [Thread-130231] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:33:34.294 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T15:33:34.305 [DEBUG] [Thread-130234] [transport.py] [_log()] starting thread (client mode): 0xb6b621d0
2025-12-31T15:33:34.305 [DEBUG] [Thread-130234] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:33:34.320 [DEBUG] [Thread-130234] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T15:33:34.320 [INFO] [Thread-130234] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T15:33:34.327 [DEBUG] [Thread-130234] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:33:34.327 [DEBUG] [Thread-130234] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T15:33:34.327 [DEBUG] [Thread-130234] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:33:34.327 [DEBUG] [Thread-130234] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:33:34.327 [DEBUG] [Thread-130234] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:33:34.327 [DEBUG] [Thread-130234] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:33:34.327 [DEBUG] [Thread-130234] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:33:34.327 [DEBUG] [Thread-130234] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:33:34.327 [DEBUG] [Thread-130234] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:33:34.327 [DEBUG] [Thread-130234] [transport.py] [_log()] client lang: <none>
2025-12-31T15:33:34.327 [DEBUG] [Thread-130234] [transport.py] [_log()] server lang: <none>
2025-12-31T15:33:34.327 [DEBUG] [Thread-130234] [transport.py] [_log()] kex follows: False
2025-12-31T15:33:34.328 [DEBUG] [Thread-130234] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:33:34.328 [DEBUG] [Thread-130234] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:33:34.328 [DEBUG] [Thread-130234] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:33:34.328 [DEBUG] [Thread-130234] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:33:34.328 [DEBUG] [Thread-130234] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:33:34.328 [DEBUG] [Thread-130234] [transport.py] [_log()] Compression: none
2025-12-31T15:33:34.328 [DEBUG] [Thread-130234] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:33:34.383 [DEBUG] [Thread-130234] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:33:34.383 [DEBUG] [Thread-130234] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:33:34.384 [DEBUG] [Thread-130234] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T15:33:34.384 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T15:33:34.384 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:33:34.440 [DEBUG] [Thread-130234] [transport.py] [_log()] userauth is OK
2025-12-31T15:33:34.440 [DEBUG] [Thread-130234] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:33:34.440 [DEBUG] [Thread-130234] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:33:34.440 [DEBUG] [Thread-130234] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T15:33:34.440 [DEBUG] [Thread-130234] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:33:34.454 [INFO] [Thread-130234] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:33:34.454 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T15:33:34.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:33:35.284 [DEBUG] [Thread-130234] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:33:35.285 [DEBUG] [Thread-130234] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:33:35.333 [DEBUG] [Thread-130234] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:33:35.333 [DEBUG] [Thread-130234] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:33:35.342 [DEBUG] [Thread-130234] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:33:35.351 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:33:35.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T15:33:35.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T15:33:35.370 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:33:35.370 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:33:35.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:33:35.379 [DEBUG] [Thread-130234] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:33:42.189 [DEBUG] [Thread-130236 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:33:57.241 [DEBUG] [Thread-130237 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:34:05.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T15:34:05.401 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T15:34:05.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-12-31T15:34:06.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 15, 33, 32), 31.56, 11.92, 0.0, 33.12, 25.87, 0, 0, 0, 2, 0, 0),)
2025-12-31T15:34:06.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 15:33:32
2025-12-31T15:34:06.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T15:34:06.462 [DEBUG] [Thread-130238] [transport.py] [_log()] starting thread (client mode): 0xb6b29c00
2025-12-31T15:34:06.462 [DEBUG] [Thread-130238] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:34:06.487 [DEBUG] [Thread-130238] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T15:34:06.487 [INFO] [Thread-130238] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T15:34:06.490 [DEBUG] [Thread-130238] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:34:06.491 [DEBUG] [Thread-130238] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T15:34:06.491 [DEBUG] [Thread-130238] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:34:06.491 [DEBUG] [Thread-130238] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:34:06.491 [DEBUG] [Thread-130238] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:34:06.491 [DEBUG] [Thread-130238] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:34:06.491 [DEBUG] [Thread-130238] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:34:06.491 [DEBUG] [Thread-130238] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:34:06.491 [DEBUG] [Thread-130238] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:34:06.491 [DEBUG] [Thread-130238] [transport.py] [_log()] client lang: <none>
2025-12-31T15:34:06.491 [DEBUG] [Thread-130238] [transport.py] [_log()] server lang: <none>
2025-12-31T15:34:06.491 [DEBUG] [Thread-130238] [transport.py] [_log()] kex follows: False
2025-12-31T15:34:06.491 [DEBUG] [Thread-130238] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:34:06.491 [DEBUG] [Thread-130238] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:34:06.491 [DEBUG] [Thread-130238] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:34:06.491 [DEBUG] [Thread-130238] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:34:06.491 [DEBUG] [Thread-130238] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:34:06.491 [DEBUG] [Thread-130238] [transport.py] [_log()] Compression: none
2025-12-31T15:34:06.491 [DEBUG] [Thread-130238] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:34:06.508 [DEBUG] [Thread-130238] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:34:06.508 [DEBUG] [Thread-130238] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:34:06.508 [DEBUG] [Thread-130238] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T15:34:06.508 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T15:34:06.509 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:34:06.509 [DEBUG] [Thread-130238] [transport.py] [_log()] userauth is OK
2025-12-31T15:34:06.509 [DEBUG] [Thread-130238] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:34:06.509 [DEBUG] [Thread-130238] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:34:06.509 [DEBUG] [Thread-130238] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T15:34:06.509 [DEBUG] [Thread-130238] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:34:06.518 [INFO] [Thread-130238] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:34:06.518 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:34:07.167 [DEBUG] [Thread-130238] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:34:07.168 [DEBUG] [Thread-130238] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:34:07.169 [DEBUG] [Thread-130238] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T15:34:07.209 [DEBUG] [Thread-130238] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:34:07.209 [DEBUG] [Thread-130238] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:34:07.213 [DEBUG] [Thread-130238] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:34:07.221 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:34:07.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T15:34:07.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T15:34:07.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T15:34:07.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:34:07.233 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T15:34:07.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:34:07.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:34:07.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T15:34:07.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.564725 -999.00  +25.90  33.08     17   -0.70 1 2 2 1 1   888    0 25.12 -56.49 ----- 29.4 33.1 285.6 36.8 30.8 -26.0 30.6 -21.8 30.5 -20.4 31.4 -21.7
2025-12-31T15:34:07.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T15:34:07.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T15:34:07.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.564725
2025-12-31T15:34:07.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T15:34:07.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T15:34:07.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T15:34:07.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T15:34:07.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T15:34:07.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T15:33:32', tmtdew=31.56, humidity=11.92, cloud=0.0, wind=33.12, temperature=25.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T13:33:12.240', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T15:34:07.236 [DEBUG] [Thread-130238] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:34:07.318 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T15:34:07.329 [DEBUG] [Thread-130241] [transport.py] [_log()] starting thread (client mode): 0xb95f14e0
2025-12-31T15:34:07.329 [DEBUG] [Thread-130241] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:34:07.344 [DEBUG] [Thread-130241] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T15:34:07.344 [INFO] [Thread-130241] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T15:34:07.351 [DEBUG] [Thread-130241] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:34:07.352 [DEBUG] [Thread-130241] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T15:34:07.352 [DEBUG] [Thread-130241] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:34:07.352 [DEBUG] [Thread-130241] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:34:07.352 [DEBUG] [Thread-130241] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:34:07.352 [DEBUG] [Thread-130241] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:34:07.352 [DEBUG] [Thread-130241] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:34:07.352 [DEBUG] [Thread-130241] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:34:07.352 [DEBUG] [Thread-130241] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:34:07.353 [DEBUG] [Thread-130241] [transport.py] [_log()] client lang: <none>
2025-12-31T15:34:07.353 [DEBUG] [Thread-130241] [transport.py] [_log()] server lang: <none>
2025-12-31T15:34:07.353 [DEBUG] [Thread-130241] [transport.py] [_log()] kex follows: False
2025-12-31T15:34:07.353 [DEBUG] [Thread-130241] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:34:07.353 [DEBUG] [Thread-130241] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:34:07.353 [DEBUG] [Thread-130241] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:34:07.353 [DEBUG] [Thread-130241] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:34:07.353 [DEBUG] [Thread-130241] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:34:07.354 [DEBUG] [Thread-130241] [transport.py] [_log()] Compression: none
2025-12-31T15:34:07.354 [DEBUG] [Thread-130241] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:34:07.412 [DEBUG] [Thread-130241] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:34:07.413 [DEBUG] [Thread-130241] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:34:07.413 [DEBUG] [Thread-130241] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T15:34:07.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T15:34:07.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:34:07.468 [DEBUG] [Thread-130241] [transport.py] [_log()] userauth is OK
2025-12-31T15:34:07.469 [DEBUG] [Thread-130241] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:34:07.469 [DEBUG] [Thread-130241] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:34:07.469 [DEBUG] [Thread-130241] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T15:34:07.469 [DEBUG] [Thread-130241] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:34:07.489 [INFO] [Thread-130241] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:34:07.490 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T15:34:07.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:34:08.376 [DEBUG] [Thread-130241] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:34:08.376 [DEBUG] [Thread-130241] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:34:08.424 [DEBUG] [Thread-130241] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:34:08.425 [DEBUG] [Thread-130241] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:34:08.434 [DEBUG] [Thread-130241] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:34:08.441 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:34:08.442 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:34:08.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:34:08.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T15:34:08.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T15:34:08.462 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:34:08.462 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:34:08.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:34:08.471 [DEBUG] [Thread-130241] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:34:12.279 [DEBUG] [Thread-130243 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:34:21.593 [DEBUG] [Thread-130244 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:34:27.327 [DEBUG] [Thread-130245 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:34:38.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T15:34:38.493 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T15:34:38.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T15:34:39.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 15, 34, 4), 31.63, 11.86, 0.0, 32.94, 25.87, 0, 0, 0, 2, 0, 0),)
2025-12-31T15:34:39.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 15:34:04
2025-12-31T15:34:39.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T15:34:39.508 [DEBUG] [Thread-130246] [transport.py] [_log()] starting thread (client mode): 0xb95f0ac0
2025-12-31T15:34:39.508 [DEBUG] [Thread-130246] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:34:39.528 [DEBUG] [Thread-130246] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T15:34:39.528 [INFO] [Thread-130246] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T15:34:39.531 [DEBUG] [Thread-130246] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:34:39.532 [DEBUG] [Thread-130246] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T15:34:39.532 [DEBUG] [Thread-130246] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:34:39.532 [DEBUG] [Thread-130246] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:34:39.532 [DEBUG] [Thread-130246] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:34:39.532 [DEBUG] [Thread-130246] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:34:39.532 [DEBUG] [Thread-130246] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:34:39.532 [DEBUG] [Thread-130246] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:34:39.532 [DEBUG] [Thread-130246] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:34:39.532 [DEBUG] [Thread-130246] [transport.py] [_log()] client lang: <none>
2025-12-31T15:34:39.532 [DEBUG] [Thread-130246] [transport.py] [_log()] server lang: <none>
2025-12-31T15:34:39.532 [DEBUG] [Thread-130246] [transport.py] [_log()] kex follows: False
2025-12-31T15:34:39.532 [DEBUG] [Thread-130246] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:34:39.533 [DEBUG] [Thread-130246] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:34:39.533 [DEBUG] [Thread-130246] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:34:39.533 [DEBUG] [Thread-130246] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:34:39.533 [DEBUG] [Thread-130246] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:34:39.533 [DEBUG] [Thread-130246] [transport.py] [_log()] Compression: none
2025-12-31T15:34:39.533 [DEBUG] [Thread-130246] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:34:39.552 [DEBUG] [Thread-130246] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:34:39.552 [DEBUG] [Thread-130246] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:34:39.553 [DEBUG] [Thread-130246] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T15:34:39.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T15:34:39.554 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:34:39.555 [DEBUG] [Thread-130246] [transport.py] [_log()] userauth is OK
2025-12-31T15:34:39.555 [DEBUG] [Thread-130246] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:34:39.555 [DEBUG] [Thread-130246] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:34:39.555 [DEBUG] [Thread-130246] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T15:34:39.555 [DEBUG] [Thread-130246] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:34:39.570 [INFO] [Thread-130246] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:34:39.571 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:34:40.303 [DEBUG] [Thread-130246] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:34:40.304 [DEBUG] [Thread-130246] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:34:40.304 [DEBUG] [Thread-130246] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T15:34:40.345 [DEBUG] [Thread-130246] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:34:40.345 [DEBUG] [Thread-130246] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:34:40.349 [DEBUG] [Thread-130246] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:34:40.360 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:34:40.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T15:34:40.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T15:34:40.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T15:34:40.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:34:40.372 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T15:34:40.372 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:34:40.372 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:34:40.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T15:34:40.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.565072 -999.00  +25.80  18.99     17   -0.80 1 2 1 1 1   888    0 25.14 -52.64 ----- 22.2 19.0 276.8 28.8 30.8 -23.6 30.7 -20.3 30.8 -18.8 31.4 -21.2
2025-12-31T15:34:40.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T15:34:40.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T15:34:40.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.565072
2025-12-31T15:34:40.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T15:34:40.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T15:34:40.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T15:34:40.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T15:34:40.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T15:34:40.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T15:34:04', tmtdew=31.63, humidity=11.86, cloud=0.0, wind=32.94, temperature=25.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T13:33:42.221', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T15:34:40.375 [DEBUG] [Thread-130246] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:34:40.458 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T15:34:40.469 [DEBUG] [Thread-130249] [transport.py] [_log()] starting thread (client mode): 0xb95d4370
2025-12-31T15:34:40.470 [DEBUG] [Thread-130249] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:34:40.484 [DEBUG] [Thread-130249] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T15:34:40.485 [INFO] [Thread-130249] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T15:34:40.492 [DEBUG] [Thread-130249] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:34:40.493 [DEBUG] [Thread-130249] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T15:34:40.493 [DEBUG] [Thread-130249] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:34:40.493 [DEBUG] [Thread-130249] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:34:40.493 [DEBUG] [Thread-130249] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:34:40.493 [DEBUG] [Thread-130249] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:34:40.493 [DEBUG] [Thread-130249] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:34:40.493 [DEBUG] [Thread-130249] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:34:40.493 [DEBUG] [Thread-130249] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:34:40.494 [DEBUG] [Thread-130249] [transport.py] [_log()] client lang: <none>
2025-12-31T15:34:40.494 [DEBUG] [Thread-130249] [transport.py] [_log()] server lang: <none>
2025-12-31T15:34:40.494 [DEBUG] [Thread-130249] [transport.py] [_log()] kex follows: False
2025-12-31T15:34:40.494 [DEBUG] [Thread-130249] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:34:40.494 [DEBUG] [Thread-130249] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:34:40.494 [DEBUG] [Thread-130249] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:34:40.494 [DEBUG] [Thread-130249] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:34:40.494 [DEBUG] [Thread-130249] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:34:40.495 [DEBUG] [Thread-130249] [transport.py] [_log()] Compression: none
2025-12-31T15:34:40.495 [DEBUG] [Thread-130249] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:34:40.552 [DEBUG] [Thread-130249] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:34:40.553 [DEBUG] [Thread-130249] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:34:40.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T15:34:40.554 [DEBUG] [Thread-130249] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T15:34:40.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:34:40.607 [DEBUG] [Thread-130249] [transport.py] [_log()] userauth is OK
2025-12-31T15:34:40.608 [DEBUG] [Thread-130249] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:34:40.608 [DEBUG] [Thread-130249] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:34:40.608 [DEBUG] [Thread-130249] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T15:34:40.608 [DEBUG] [Thread-130249] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:34:40.634 [INFO] [Thread-130249] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:34:40.635 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T15:34:40.635 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:34:41.471 [DEBUG] [Thread-130249] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:34:41.471 [DEBUG] [Thread-130249] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:34:41.519 [DEBUG] [Thread-130249] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:34:41.519 [DEBUG] [Thread-130249] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:34:41.528 [DEBUG] [Thread-130249] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:34:41.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:34:41.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T15:34:41.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T15:34:41.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:34:41.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:34:41.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:34:41.565 [DEBUG] [Thread-130249] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:34:42.363 [DEBUG] [Thread-130251 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:34:57.409 [DEBUG] [Thread-130252 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:35:08.582 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:35:08.583 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:35:11.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T15:35:11.588 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T15:35:11.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T15:35:12.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 15, 35, 9), 31.77, 12.09, 0.0, 27.93, 26.4, 0, 0, 0, 2, 0, 0),)
2025-12-31T15:35:12.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 15:35:09
2025-12-31T15:35:12.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T15:35:12.437 [DEBUG] [Thread-130253 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:35:12.581 [DEBUG] [Thread-130254] [transport.py] [_log()] starting thread (client mode): 0xb6b623b0
2025-12-31T15:35:12.581 [DEBUG] [Thread-130254] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:35:12.602 [DEBUG] [Thread-130254] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T15:35:12.602 [INFO] [Thread-130254] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T15:35:12.605 [DEBUG] [Thread-130254] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:35:12.605 [DEBUG] [Thread-130254] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T15:35:12.605 [DEBUG] [Thread-130254] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:35:12.605 [DEBUG] [Thread-130254] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:35:12.605 [DEBUG] [Thread-130254] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:35:12.605 [DEBUG] [Thread-130254] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:35:12.606 [DEBUG] [Thread-130254] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:35:12.606 [DEBUG] [Thread-130254] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:35:12.606 [DEBUG] [Thread-130254] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:35:12.606 [DEBUG] [Thread-130254] [transport.py] [_log()] client lang: <none>
2025-12-31T15:35:12.606 [DEBUG] [Thread-130254] [transport.py] [_log()] server lang: <none>
2025-12-31T15:35:12.606 [DEBUG] [Thread-130254] [transport.py] [_log()] kex follows: False
2025-12-31T15:35:12.606 [DEBUG] [Thread-130254] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:35:12.606 [DEBUG] [Thread-130254] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:35:12.606 [DEBUG] [Thread-130254] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:35:12.606 [DEBUG] [Thread-130254] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:35:12.606 [DEBUG] [Thread-130254] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:35:12.606 [DEBUG] [Thread-130254] [transport.py] [_log()] Compression: none
2025-12-31T15:35:12.607 [DEBUG] [Thread-130254] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:35:12.626 [DEBUG] [Thread-130254] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:35:12.627 [DEBUG] [Thread-130254] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:35:12.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T15:35:12.628 [DEBUG] [Thread-130254] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T15:35:12.629 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:35:12.630 [DEBUG] [Thread-130254] [transport.py] [_log()] userauth is OK
2025-12-31T15:35:12.630 [DEBUG] [Thread-130254] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:35:12.630 [DEBUG] [Thread-130254] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:35:12.630 [DEBUG] [Thread-130254] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T15:35:12.630 [DEBUG] [Thread-130254] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:35:12.655 [INFO] [Thread-130254] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:35:12.656 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:35:15.040 [DEBUG] [Thread-130254] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:35:15.040 [DEBUG] [Thread-130254] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:35:15.040 [DEBUG] [Thread-130254] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T15:35:15.081 [DEBUG] [Thread-130254] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:35:15.081 [DEBUG] [Thread-130254] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:35:15.084 [DEBUG] [Thread-130254] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:35:15.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:35:15.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T15:35:15.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T15:35:15.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T15:35:15.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:35:15.118 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T15:35:15.118 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:35:15.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:35:15.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T15:35:15.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.565419 -999.00  +25.70  23.03     17   -0.50 1 2 1 1 1   888    0 25.62 -58.59 ----- 22.5 23.0 276.2 31.1 30.9 -22.7 30.9 -20.3 30.9 -22.3 31.5 -21.0
2025-12-31T15:35:15.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T15:35:15.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T15:35:15.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.565419
2025-12-31T15:35:15.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T15:35:15.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T15:35:15.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T15:35:15.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T15:35:15.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T15:35:15.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T15:35:09', tmtdew=31.77, humidity=12.09, cloud=0.0, wind=27.93, temperature=26.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T13:34:12.202', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T15:35:15.121 [DEBUG] [Thread-130254] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:35:15.205 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T15:35:15.218 [DEBUG] [Thread-130257] [transport.py] [_log()] starting thread (client mode): 0xb95f1810
2025-12-31T15:35:15.218 [DEBUG] [Thread-130257] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:35:15.233 [DEBUG] [Thread-130257] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T15:35:15.233 [INFO] [Thread-130257] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T15:35:15.240 [DEBUG] [Thread-130257] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:35:15.240 [DEBUG] [Thread-130257] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T15:35:15.241 [DEBUG] [Thread-130257] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:35:15.241 [DEBUG] [Thread-130257] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:35:15.241 [DEBUG] [Thread-130257] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:35:15.241 [DEBUG] [Thread-130257] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:35:15.241 [DEBUG] [Thread-130257] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:35:15.241 [DEBUG] [Thread-130257] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:35:15.241 [DEBUG] [Thread-130257] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:35:15.241 [DEBUG] [Thread-130257] [transport.py] [_log()] client lang: <none>
2025-12-31T15:35:15.241 [DEBUG] [Thread-130257] [transport.py] [_log()] server lang: <none>
2025-12-31T15:35:15.241 [DEBUG] [Thread-130257] [transport.py] [_log()] kex follows: False
2025-12-31T15:35:15.241 [DEBUG] [Thread-130257] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:35:15.241 [DEBUG] [Thread-130257] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:35:15.241 [DEBUG] [Thread-130257] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:35:15.241 [DEBUG] [Thread-130257] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:35:15.241 [DEBUG] [Thread-130257] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:35:15.241 [DEBUG] [Thread-130257] [transport.py] [_log()] Compression: none
2025-12-31T15:35:15.241 [DEBUG] [Thread-130257] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:35:15.299 [DEBUG] [Thread-130257] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:35:15.300 [DEBUG] [Thread-130257] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:35:15.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T15:35:15.301 [DEBUG] [Thread-130257] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T15:35:15.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:35:15.356 [DEBUG] [Thread-130257] [transport.py] [_log()] userauth is OK
2025-12-31T15:35:15.356 [DEBUG] [Thread-130257] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:35:15.356 [DEBUG] [Thread-130257] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:35:15.356 [DEBUG] [Thread-130257] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T15:35:15.356 [DEBUG] [Thread-130257] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:35:15.375 [INFO] [Thread-130257] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:35:15.375 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T15:35:15.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:35:16.201 [DEBUG] [Thread-130257] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:35:16.201 [DEBUG] [Thread-130257] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:35:16.249 [DEBUG] [Thread-130257] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:35:16.249 [DEBUG] [Thread-130257] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:35:16.259 [DEBUG] [Thread-130257] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:35:16.271 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:35:16.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T15:35:16.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T15:35:16.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:35:16.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:35:16.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:35:16.299 [DEBUG] [Thread-130257] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:35:21.648 [DEBUG] [Thread-130259 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:35:27.474 [DEBUG] [Thread-130260 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:35:42.527 [DEBUG] [Thread-130261 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:35:46.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T15:35:46.302 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T15:35:46.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T15:35:47.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 15, 35, 40), 31.32, 12.59, 0.0, 29.31, 26.26, 0, 0, 0, 2, 0, 0),)
2025-12-31T15:35:47.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 15:35:40
2025-12-31T15:35:47.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T15:35:47.296 [DEBUG] [Thread-130262] [transport.py] [_log()] starting thread (client mode): 0xb6b29c00
2025-12-31T15:35:47.296 [DEBUG] [Thread-130262] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:35:47.317 [DEBUG] [Thread-130262] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T15:35:47.317 [INFO] [Thread-130262] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T15:35:47.320 [DEBUG] [Thread-130262] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:35:47.320 [DEBUG] [Thread-130262] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T15:35:47.320 [DEBUG] [Thread-130262] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:35:47.320 [DEBUG] [Thread-130262] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:35:47.320 [DEBUG] [Thread-130262] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:35:47.320 [DEBUG] [Thread-130262] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:35:47.320 [DEBUG] [Thread-130262] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:35:47.320 [DEBUG] [Thread-130262] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:35:47.320 [DEBUG] [Thread-130262] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:35:47.320 [DEBUG] [Thread-130262] [transport.py] [_log()] client lang: <none>
2025-12-31T15:35:47.321 [DEBUG] [Thread-130262] [transport.py] [_log()] server lang: <none>
2025-12-31T15:35:47.321 [DEBUG] [Thread-130262] [transport.py] [_log()] kex follows: False
2025-12-31T15:35:47.321 [DEBUG] [Thread-130262] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:35:47.321 [DEBUG] [Thread-130262] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:35:47.321 [DEBUG] [Thread-130262] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:35:47.321 [DEBUG] [Thread-130262] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:35:47.321 [DEBUG] [Thread-130262] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:35:47.321 [DEBUG] [Thread-130262] [transport.py] [_log()] Compression: none
2025-12-31T15:35:47.321 [DEBUG] [Thread-130262] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:35:47.337 [DEBUG] [Thread-130262] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:35:47.338 [DEBUG] [Thread-130262] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:35:47.338 [DEBUG] [Thread-130262] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T15:35:47.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T15:35:47.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:35:47.340 [DEBUG] [Thread-130262] [transport.py] [_log()] userauth is OK
2025-12-31T15:35:47.340 [DEBUG] [Thread-130262] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:35:47.340 [DEBUG] [Thread-130262] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:35:47.340 [DEBUG] [Thread-130262] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T15:35:47.340 [DEBUG] [Thread-130262] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:35:47.355 [INFO] [Thread-130262] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:35:47.355 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:35:47.933 [DEBUG] [Thread-130262] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:35:47.933 [DEBUG] [Thread-130262] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:35:47.933 [DEBUG] [Thread-130262] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T15:35:47.974 [DEBUG] [Thread-130262] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:35:47.974 [DEBUG] [Thread-130262] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:35:47.977 [DEBUG] [Thread-130262] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:35:47.989 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:35:47.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T15:35:47.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T15:35:47.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T15:35:47.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:35:48.000 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T15:35:48.000 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:35:48.000 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:35:48.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T15:35:48.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.566114 -999.00  +25.80  31.61     17   -0.30 1 1 2 1 1   888    0 25.40 -54.46 ----- 26.6 31.6 269.8 39.9 30.9 -24.2 30.8 -24.6 30.6 -30.9 31.5 -23.4
2025-12-31T15:35:48.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T15:35:48.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T15:35:48.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.566114
2025-12-31T15:35:48.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T15:35:48.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T15:35:48.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T15:35:48.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T15:35:48.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T15:35:48.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T15:35:40', tmtdew=31.32, humidity=12.59, cloud=0.0, wind=29.31, temperature=26.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T13:35:12.250', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T15:35:48.002 [DEBUG] [Thread-130262] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:35:48.086 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T15:35:48.097 [DEBUG] [Thread-130265] [transport.py] [_log()] starting thread (client mode): 0xb95f18d0
2025-12-31T15:35:48.097 [DEBUG] [Thread-130265] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:35:48.113 [DEBUG] [Thread-130265] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T15:35:48.113 [INFO] [Thread-130265] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T15:35:48.120 [DEBUG] [Thread-130265] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:35:48.120 [DEBUG] [Thread-130265] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T15:35:48.120 [DEBUG] [Thread-130265] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:35:48.120 [DEBUG] [Thread-130265] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:35:48.120 [DEBUG] [Thread-130265] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:35:48.120 [DEBUG] [Thread-130265] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:35:48.121 [DEBUG] [Thread-130265] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:35:48.121 [DEBUG] [Thread-130265] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:35:48.121 [DEBUG] [Thread-130265] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:35:48.121 [DEBUG] [Thread-130265] [transport.py] [_log()] client lang: <none>
2025-12-31T15:35:48.121 [DEBUG] [Thread-130265] [transport.py] [_log()] server lang: <none>
2025-12-31T15:35:48.121 [DEBUG] [Thread-130265] [transport.py] [_log()] kex follows: False
2025-12-31T15:35:48.121 [DEBUG] [Thread-130265] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:35:48.121 [DEBUG] [Thread-130265] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:35:48.121 [DEBUG] [Thread-130265] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:35:48.121 [DEBUG] [Thread-130265] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:35:48.121 [DEBUG] [Thread-130265] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:35:48.121 [DEBUG] [Thread-130265] [transport.py] [_log()] Compression: none
2025-12-31T15:35:48.121 [DEBUG] [Thread-130265] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:35:48.183 [DEBUG] [Thread-130265] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:35:48.184 [DEBUG] [Thread-130265] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:35:48.184 [DEBUG] [Thread-130265] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T15:35:48.185 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T15:35:48.185 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:35:48.239 [DEBUG] [Thread-130265] [transport.py] [_log()] userauth is OK
2025-12-31T15:35:48.239 [DEBUG] [Thread-130265] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:35:48.240 [DEBUG] [Thread-130265] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:35:48.240 [DEBUG] [Thread-130265] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T15:35:48.240 [DEBUG] [Thread-130265] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:35:48.264 [INFO] [Thread-130265] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:35:48.264 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T15:35:48.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:35:49.104 [DEBUG] [Thread-130265] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:35:49.105 [DEBUG] [Thread-130265] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:35:49.153 [DEBUG] [Thread-130265] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:35:49.153 [DEBUG] [Thread-130265] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:35:49.161 [DEBUG] [Thread-130265] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:35:49.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:35:49.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T15:35:49.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T15:35:49.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:35:49.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:35:49.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:35:49.197 [DEBUG] [Thread-130265] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:35:57.559 [DEBUG] [Thread-130267 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:36:08.722 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:36:08.723 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:36:12.616 [DEBUG] [Thread-130268 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:36:19.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T15:36:19.219 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T15:36:19.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T15:36:19.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 15, 36, 12), 31.15, 12.71, 0.0, 28.99, 26.1, 0, 0, 0, 2, 0, 0),)
2025-12-31T15:36:19.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 15:36:12
2025-12-31T15:36:20.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T15:36:20.191 [DEBUG] [Thread-130269] [transport.py] [_log()] starting thread (client mode): 0xb6bba3b0
2025-12-31T15:36:20.191 [DEBUG] [Thread-130269] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:36:20.211 [DEBUG] [Thread-130269] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T15:36:20.211 [INFO] [Thread-130269] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T15:36:20.215 [DEBUG] [Thread-130269] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:36:20.215 [DEBUG] [Thread-130269] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T15:36:20.215 [DEBUG] [Thread-130269] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:36:20.215 [DEBUG] [Thread-130269] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:36:20.216 [DEBUG] [Thread-130269] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:36:20.216 [DEBUG] [Thread-130269] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:36:20.216 [DEBUG] [Thread-130269] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:36:20.216 [DEBUG] [Thread-130269] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:36:20.216 [DEBUG] [Thread-130269] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:36:20.216 [DEBUG] [Thread-130269] [transport.py] [_log()] client lang: <none>
2025-12-31T15:36:20.216 [DEBUG] [Thread-130269] [transport.py] [_log()] server lang: <none>
2025-12-31T15:36:20.216 [DEBUG] [Thread-130269] [transport.py] [_log()] kex follows: False
2025-12-31T15:36:20.216 [DEBUG] [Thread-130269] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:36:20.216 [DEBUG] [Thread-130269] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:36:20.217 [DEBUG] [Thread-130269] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:36:20.217 [DEBUG] [Thread-130269] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:36:20.217 [DEBUG] [Thread-130269] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:36:20.217 [DEBUG] [Thread-130269] [transport.py] [_log()] Compression: none
2025-12-31T15:36:20.217 [DEBUG] [Thread-130269] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:36:20.237 [DEBUG] [Thread-130269] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:36:20.237 [DEBUG] [Thread-130269] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:36:20.238 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T15:36:20.238 [DEBUG] [Thread-130269] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T15:36:20.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:36:20.240 [DEBUG] [Thread-130269] [transport.py] [_log()] userauth is OK
2025-12-31T15:36:20.240 [DEBUG] [Thread-130269] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:36:20.241 [DEBUG] [Thread-130269] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:36:20.241 [DEBUG] [Thread-130269] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T15:36:20.241 [DEBUG] [Thread-130269] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:36:20.266 [INFO] [Thread-130269] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:36:20.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:36:20.999 [DEBUG] [Thread-130269] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:36:21.000 [DEBUG] [Thread-130269] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:36:21.000 [DEBUG] [Thread-130269] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T15:36:21.042 [DEBUG] [Thread-130269] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:36:21.042 [DEBUG] [Thread-130269] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:36:21.046 [DEBUG] [Thread-130269] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:36:21.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:36:21.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T15:36:21.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T15:36:21.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T15:36:21.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:36:21.074 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T15:36:21.074 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:36:21.074 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:36:21.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T15:36:21.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.566461 -999.00  +25.10  27.50     18   -0.20 1 1 1 1 1   888    0 24.94 -50.88 ----- 26.1 27.5 269.8 32.7 30.6 -25.4 30.6 -24.0 30.2 -23.9 31.3 -25.1
2025-12-31T15:36:21.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T15:36:21.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T15:36:21.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.566461
2025-12-31T15:36:21.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T15:36:21.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T15:36:21.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T15:36:21.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T15:36:21.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T15:36:21.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T15:36:12', tmtdew=31.15, humidity=12.71, cloud=0.0, wind=28.99, temperature=26.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T13:35:42.230', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T15:36:21.077 [DEBUG] [Thread-130269] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:36:21.161 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T15:36:21.173 [DEBUG] [Thread-130272] [transport.py] [_log()] starting thread (client mode): 0xb6b2bdc0
2025-12-31T15:36:21.173 [DEBUG] [Thread-130272] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:36:21.187 [DEBUG] [Thread-130272] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T15:36:21.188 [INFO] [Thread-130272] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T15:36:21.195 [DEBUG] [Thread-130272] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:36:21.196 [DEBUG] [Thread-130272] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T15:36:21.196 [DEBUG] [Thread-130272] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:36:21.196 [DEBUG] [Thread-130272] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:36:21.196 [DEBUG] [Thread-130272] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:36:21.196 [DEBUG] [Thread-130272] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:36:21.196 [DEBUG] [Thread-130272] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:36:21.196 [DEBUG] [Thread-130272] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:36:21.196 [DEBUG] [Thread-130272] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:36:21.196 [DEBUG] [Thread-130272] [transport.py] [_log()] client lang: <none>
2025-12-31T15:36:21.196 [DEBUG] [Thread-130272] [transport.py] [_log()] server lang: <none>
2025-12-31T15:36:21.196 [DEBUG] [Thread-130272] [transport.py] [_log()] kex follows: False
2025-12-31T15:36:21.196 [DEBUG] [Thread-130272] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:36:21.196 [DEBUG] [Thread-130272] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:36:21.196 [DEBUG] [Thread-130272] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:36:21.196 [DEBUG] [Thread-130272] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:36:21.196 [DEBUG] [Thread-130272] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:36:21.196 [DEBUG] [Thread-130272] [transport.py] [_log()] Compression: none
2025-12-31T15:36:21.196 [DEBUG] [Thread-130272] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:36:21.255 [DEBUG] [Thread-130272] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:36:21.256 [DEBUG] [Thread-130272] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:36:21.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T15:36:21.257 [DEBUG] [Thread-130272] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T15:36:21.258 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:36:21.315 [DEBUG] [Thread-130272] [transport.py] [_log()] userauth is OK
2025-12-31T15:36:21.315 [DEBUG] [Thread-130272] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:36:21.315 [DEBUG] [Thread-130272] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:36:21.315 [DEBUG] [Thread-130272] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T15:36:21.315 [DEBUG] [Thread-130272] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:36:21.334 [INFO] [Thread-130272] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:36:21.334 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T15:36:21.335 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:36:21.708 [DEBUG] [Thread-130274 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:36:22.169 [DEBUG] [Thread-130272] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:36:22.169 [DEBUG] [Thread-130272] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:36:22.217 [DEBUG] [Thread-130272] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:36:22.217 [DEBUG] [Thread-130272] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:36:22.226 [DEBUG] [Thread-130272] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:36:22.235 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:36:22.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T15:36:22.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T15:36:22.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:36:22.255 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:36:22.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:36:22.263 [DEBUG] [Thread-130272] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:36:27.652 [DEBUG] [Thread-130275 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:36:42.704 [DEBUG] [Thread-130276 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:36:52.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T15:36:52.286 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T15:36:52.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T15:36:53.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 15, 36, 44), 31.68, 11.79, 0.0, 27.01, 26.55, 0, 0, 0, 2, 0, 0),)
2025-12-31T15:36:53.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 15:36:44
2025-12-31T15:36:53.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T15:36:53.327 [DEBUG] [Thread-130277] [transport.py] [_log()] starting thread (client mode): 0xb6bb9f90
2025-12-31T15:36:53.327 [DEBUG] [Thread-130277] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:36:53.347 [DEBUG] [Thread-130277] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T15:36:53.347 [INFO] [Thread-130277] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T15:36:53.350 [DEBUG] [Thread-130277] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:36:53.350 [DEBUG] [Thread-130277] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T15:36:53.350 [DEBUG] [Thread-130277] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:36:53.350 [DEBUG] [Thread-130277] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:36:53.350 [DEBUG] [Thread-130277] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:36:53.350 [DEBUG] [Thread-130277] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:36:53.350 [DEBUG] [Thread-130277] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:36:53.350 [DEBUG] [Thread-130277] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:36:53.350 [DEBUG] [Thread-130277] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:36:53.350 [DEBUG] [Thread-130277] [transport.py] [_log()] client lang: <none>
2025-12-31T15:36:53.350 [DEBUG] [Thread-130277] [transport.py] [_log()] server lang: <none>
2025-12-31T15:36:53.350 [DEBUG] [Thread-130277] [transport.py] [_log()] kex follows: False
2025-12-31T15:36:53.351 [DEBUG] [Thread-130277] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:36:53.351 [DEBUG] [Thread-130277] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:36:53.351 [DEBUG] [Thread-130277] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:36:53.351 [DEBUG] [Thread-130277] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:36:53.351 [DEBUG] [Thread-130277] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:36:53.351 [DEBUG] [Thread-130277] [transport.py] [_log()] Compression: none
2025-12-31T15:36:53.351 [DEBUG] [Thread-130277] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:36:53.368 [DEBUG] [Thread-130277] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:36:53.368 [DEBUG] [Thread-130277] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:36:53.368 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T15:36:53.368 [DEBUG] [Thread-130277] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T15:36:53.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:36:53.369 [DEBUG] [Thread-130277] [transport.py] [_log()] userauth is OK
2025-12-31T15:36:53.370 [DEBUG] [Thread-130277] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:36:53.370 [DEBUG] [Thread-130277] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:36:53.370 [DEBUG] [Thread-130277] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T15:36:53.370 [DEBUG] [Thread-130277] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:36:53.380 [INFO] [Thread-130277] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:36:53.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:36:54.001 [DEBUG] [Thread-130277] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:36:54.001 [DEBUG] [Thread-130277] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:36:54.001 [DEBUG] [Thread-130277] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T15:36:54.041 [DEBUG] [Thread-130277] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:36:54.041 [DEBUG] [Thread-130277] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:36:54.043 [DEBUG] [Thread-130277] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:36:54.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:36:54.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T15:36:54.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T15:36:54.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T15:36:54.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:36:54.062 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T15:36:54.062 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:36:54.062 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:36:54.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T15:36:54.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.566808 -999.00  +25.30  22.73     18   -0.60 1 1 1 1 1   888    0 25.00 -55.96 ----- 19.2 22.7 291.0 35.5 30.7 -24.1 30.5 -24.9 30.5 -25.0 31.2 -24.2
2025-12-31T15:36:54.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T15:36:54.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T15:36:54.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.566808
2025-12-31T15:36:54.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T15:36:54.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T15:36:54.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T15:36:54.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T15:36:54.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T15:36:54.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T15:36:44', tmtdew=31.68, humidity=11.79, cloud=0.0, wind=27.01, temperature=26.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T13:36:12.211', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T15:36:54.063 [DEBUG] [Thread-130277] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:36:54.138 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T15:36:54.148 [DEBUG] [Thread-130280] [transport.py] [_log()] starting thread (client mode): 0xb6bb8af0
2025-12-31T15:36:54.148 [DEBUG] [Thread-130280] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:36:54.162 [DEBUG] [Thread-130280] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T15:36:54.163 [INFO] [Thread-130280] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T15:36:54.170 [DEBUG] [Thread-130280] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:36:54.170 [DEBUG] [Thread-130280] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T15:36:54.170 [DEBUG] [Thread-130280] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:36:54.170 [DEBUG] [Thread-130280] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:36:54.170 [DEBUG] [Thread-130280] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:36:54.170 [DEBUG] [Thread-130280] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:36:54.170 [DEBUG] [Thread-130280] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:36:54.170 [DEBUG] [Thread-130280] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:36:54.170 [DEBUG] [Thread-130280] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:36:54.170 [DEBUG] [Thread-130280] [transport.py] [_log()] client lang: <none>
2025-12-31T15:36:54.170 [DEBUG] [Thread-130280] [transport.py] [_log()] server lang: <none>
2025-12-31T15:36:54.170 [DEBUG] [Thread-130280] [transport.py] [_log()] kex follows: False
2025-12-31T15:36:54.170 [DEBUG] [Thread-130280] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:36:54.170 [DEBUG] [Thread-130280] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:36:54.170 [DEBUG] [Thread-130280] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:36:54.170 [DEBUG] [Thread-130280] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:36:54.171 [DEBUG] [Thread-130280] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:36:54.171 [DEBUG] [Thread-130280] [transport.py] [_log()] Compression: none
2025-12-31T15:36:54.171 [DEBUG] [Thread-130280] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:36:54.225 [DEBUG] [Thread-130280] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:36:54.225 [DEBUG] [Thread-130280] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:36:54.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T15:36:54.225 [DEBUG] [Thread-130280] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T15:36:54.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:36:54.282 [DEBUG] [Thread-130280] [transport.py] [_log()] userauth is OK
2025-12-31T15:36:54.282 [DEBUG] [Thread-130280] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:36:54.282 [DEBUG] [Thread-130280] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:36:54.282 [DEBUG] [Thread-130280] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T15:36:54.282 [DEBUG] [Thread-130280] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:36:54.296 [INFO] [Thread-130280] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:36:54.296 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T15:36:54.296 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:36:55.135 [DEBUG] [Thread-130280] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:36:55.135 [DEBUG] [Thread-130280] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:36:55.182 [DEBUG] [Thread-130280] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:36:55.182 [DEBUG] [Thread-130280] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:36:55.190 [DEBUG] [Thread-130280] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:36:55.198 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:36:55.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T15:36:55.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T15:36:55.214 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:36:55.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:36:55.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:36:55.221 [DEBUG] [Thread-130280] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:36:57.735 [DEBUG] [Thread-130282 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:37:08.864 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:37:08.865 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:37:12.790 [DEBUG] [Thread-130283 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:37:21.765 [DEBUG] [Thread-130284 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:37:25.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T15:37:25.234 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T15:37:25.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T15:37:25.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 15, 37, 16), 31.59, 11.84, 0.0, 22.29, 26.37, 0, 0, 0, 2, 0, 0),)
2025-12-31T15:37:25.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 15:37:16
2025-12-31T15:37:26.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T15:37:26.212 [DEBUG] [Thread-130285] [transport.py] [_log()] starting thread (client mode): 0xb6bbb1c0
2025-12-31T15:37:26.212 [DEBUG] [Thread-130285] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:37:26.231 [DEBUG] [Thread-130285] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T15:37:26.231 [INFO] [Thread-130285] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T15:37:26.235 [DEBUG] [Thread-130285] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:37:26.235 [DEBUG] [Thread-130285] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T15:37:26.235 [DEBUG] [Thread-130285] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:37:26.235 [DEBUG] [Thread-130285] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:37:26.235 [DEBUG] [Thread-130285] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:37:26.235 [DEBUG] [Thread-130285] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:37:26.235 [DEBUG] [Thread-130285] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:37:26.235 [DEBUG] [Thread-130285] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:37:26.235 [DEBUG] [Thread-130285] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:37:26.235 [DEBUG] [Thread-130285] [transport.py] [_log()] client lang: <none>
2025-12-31T15:37:26.235 [DEBUG] [Thread-130285] [transport.py] [_log()] server lang: <none>
2025-12-31T15:37:26.235 [DEBUG] [Thread-130285] [transport.py] [_log()] kex follows: False
2025-12-31T15:37:26.235 [DEBUG] [Thread-130285] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:37:26.235 [DEBUG] [Thread-130285] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:37:26.235 [DEBUG] [Thread-130285] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:37:26.235 [DEBUG] [Thread-130285] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:37:26.235 [DEBUG] [Thread-130285] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:37:26.235 [DEBUG] [Thread-130285] [transport.py] [_log()] Compression: none
2025-12-31T15:37:26.235 [DEBUG] [Thread-130285] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:37:26.253 [DEBUG] [Thread-130285] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:37:26.254 [DEBUG] [Thread-130285] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:37:26.254 [DEBUG] [Thread-130285] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T15:37:26.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T15:37:26.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:37:26.296 [DEBUG] [Thread-130285] [transport.py] [_log()] userauth is OK
2025-12-31T15:37:26.297 [DEBUG] [Thread-130285] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:37:26.297 [DEBUG] [Thread-130285] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:37:26.297 [DEBUG] [Thread-130285] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T15:37:26.297 [DEBUG] [Thread-130285] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:37:26.330 [INFO] [Thread-130285] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:37:26.330 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:37:27.084 [DEBUG] [Thread-130285] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:37:27.085 [DEBUG] [Thread-130285] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:37:27.085 [DEBUG] [Thread-130285] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T15:37:27.126 [DEBUG] [Thread-130285] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:37:27.126 [DEBUG] [Thread-130285] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:37:27.130 [DEBUG] [Thread-130285] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:37:27.140 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:37:27.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T15:37:27.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T15:37:27.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T15:37:27.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:37:27.152 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T15:37:27.152 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:37:27.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:37:27.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T15:37:27.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.567155 -999.00  +25.20  19.94     18   -0.50 1 1 1 1 1   888    0 24.50 -57.50 ----- 20.9 19.9 293.0 27.6 30.5 -25.0 30.4 -23.4 30.5 -23.9 31.1 -24.0
2025-12-31T15:37:27.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T15:37:27.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T15:37:27.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.567155
2025-12-31T15:37:27.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T15:37:27.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T15:37:27.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T15:37:27.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T15:37:27.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T15:37:27.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T15:37:16', tmtdew=31.59, humidity=11.84, cloud=0.0, wind=22.29, temperature=26.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T13:36:42.192', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T15:37:27.155 [DEBUG] [Thread-130285] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:37:27.238 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T15:37:27.250 [DEBUG] [Thread-130288] [transport.py] [_log()] starting thread (client mode): 0xb95d6b30
2025-12-31T15:37:27.250 [DEBUG] [Thread-130288] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:37:27.266 [DEBUG] [Thread-130288] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T15:37:27.266 [INFO] [Thread-130288] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T15:37:27.274 [DEBUG] [Thread-130288] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:37:27.274 [DEBUG] [Thread-130288] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T15:37:27.274 [DEBUG] [Thread-130288] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:37:27.274 [DEBUG] [Thread-130288] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:37:27.274 [DEBUG] [Thread-130288] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:37:27.274 [DEBUG] [Thread-130288] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:37:27.274 [DEBUG] [Thread-130288] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:37:27.274 [DEBUG] [Thread-130288] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:37:27.274 [DEBUG] [Thread-130288] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:37:27.274 [DEBUG] [Thread-130288] [transport.py] [_log()] client lang: <none>
2025-12-31T15:37:27.274 [DEBUG] [Thread-130288] [transport.py] [_log()] server lang: <none>
2025-12-31T15:37:27.274 [DEBUG] [Thread-130288] [transport.py] [_log()] kex follows: False
2025-12-31T15:37:27.274 [DEBUG] [Thread-130288] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:37:27.274 [DEBUG] [Thread-130288] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:37:27.274 [DEBUG] [Thread-130288] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:37:27.275 [DEBUG] [Thread-130288] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:37:27.275 [DEBUG] [Thread-130288] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:37:27.275 [DEBUG] [Thread-130288] [transport.py] [_log()] Compression: none
2025-12-31T15:37:27.275 [DEBUG] [Thread-130288] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:37:27.334 [DEBUG] [Thread-130288] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:37:27.335 [DEBUG] [Thread-130288] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:37:27.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T15:37:27.336 [DEBUG] [Thread-130288] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T15:37:27.337 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:37:27.390 [DEBUG] [Thread-130288] [transport.py] [_log()] userauth is OK
2025-12-31T15:37:27.391 [DEBUG] [Thread-130288] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:37:27.391 [DEBUG] [Thread-130288] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:37:27.391 [DEBUG] [Thread-130288] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T15:37:27.391 [DEBUG] [Thread-130288] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:37:27.411 [INFO] [Thread-130288] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:37:27.412 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T15:37:27.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:37:27.829 [DEBUG] [Thread-130290 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:37:28.262 [DEBUG] [Thread-130288] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:37:28.262 [DEBUG] [Thread-130288] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:37:28.310 [DEBUG] [Thread-130288] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:37:28.310 [DEBUG] [Thread-130288] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:37:28.319 [DEBUG] [Thread-130288] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:37:28.328 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:37:28.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T15:37:28.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T15:37:28.345 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:37:28.345 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:37:28.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:37:28.354 [DEBUG] [Thread-130288] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:37:42.882 [DEBUG] [Thread-130291 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:37:57.917 [DEBUG] [Thread-130292 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:37:58.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T15:37:58.377 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T15:37:58.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T15:37:59.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 15, 37, 48), 31.87, 11.82, 0.0, 24.07, 25.62, 0, 0, 0, 2, 0, 0),)
2025-12-31T15:37:59.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 15:37:48
2025-12-31T15:37:59.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T15:37:59.353 [DEBUG] [Thread-130293] [transport.py] [_log()] starting thread (client mode): 0xb95f0d00
2025-12-31T15:37:59.353 [DEBUG] [Thread-130293] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:37:59.372 [DEBUG] [Thread-130293] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T15:37:59.372 [INFO] [Thread-130293] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T15:37:59.376 [DEBUG] [Thread-130293] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:37:59.377 [DEBUG] [Thread-130293] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T15:37:59.377 [DEBUG] [Thread-130293] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:37:59.377 [DEBUG] [Thread-130293] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:37:59.377 [DEBUG] [Thread-130293] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:37:59.377 [DEBUG] [Thread-130293] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:37:59.377 [DEBUG] [Thread-130293] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:37:59.377 [DEBUG] [Thread-130293] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:37:59.377 [DEBUG] [Thread-130293] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:37:59.377 [DEBUG] [Thread-130293] [transport.py] [_log()] client lang: <none>
2025-12-31T15:37:59.377 [DEBUG] [Thread-130293] [transport.py] [_log()] server lang: <none>
2025-12-31T15:37:59.377 [DEBUG] [Thread-130293] [transport.py] [_log()] kex follows: False
2025-12-31T15:37:59.377 [DEBUG] [Thread-130293] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:37:59.377 [DEBUG] [Thread-130293] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:37:59.377 [DEBUG] [Thread-130293] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:37:59.377 [DEBUG] [Thread-130293] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:37:59.377 [DEBUG] [Thread-130293] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:37:59.377 [DEBUG] [Thread-130293] [transport.py] [_log()] Compression: none
2025-12-31T15:37:59.377 [DEBUG] [Thread-130293] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:37:59.385 [DEBUG] [Thread-130293] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:37:59.386 [DEBUG] [Thread-130293] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:37:59.386 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T15:37:59.386 [DEBUG] [Thread-130293] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T15:37:59.386 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:37:59.387 [DEBUG] [Thread-130293] [transport.py] [_log()] userauth is OK
2025-12-31T15:37:59.387 [DEBUG] [Thread-130293] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:37:59.388 [DEBUG] [Thread-130293] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:37:59.388 [DEBUG] [Thread-130293] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T15:37:59.388 [DEBUG] [Thread-130293] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:37:59.403 [INFO] [Thread-130293] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:37:59.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:38:00.020 [DEBUG] [Thread-130293] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:38:00.020 [DEBUG] [Thread-130293] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:38:00.021 [DEBUG] [Thread-130293] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T15:38:00.061 [DEBUG] [Thread-130293] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:38:00.062 [DEBUG] [Thread-130293] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:38:00.065 [DEBUG] [Thread-130293] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:38:00.077 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:38:00.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T15:38:00.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T15:38:00.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T15:38:00.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:38:00.090 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T15:38:00.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:38:00.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:38:00.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T15:38:00.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.567503 -999.00  +26.00  26.68     17   -0.70 1 1 1 1 1   888    0 25.08 -60.90 ----- 22.1 26.7 296.0 30.2 30.6 -24.4 30.5 -24.0 30.6 -23.5 31.0 -23.7
2025-12-31T15:38:00.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T15:38:00.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T15:38:00.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.567503
2025-12-31T15:38:00.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T15:38:00.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T15:38:00.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T15:38:00.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T15:38:00.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T15:38:00.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T15:37:48', tmtdew=31.87, humidity=11.82, cloud=0.0, wind=24.07, temperature=25.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T13:37:12.259', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T15:38:00.093 [DEBUG] [Thread-130293] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:38:00.175 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T15:38:00.188 [DEBUG] [Thread-130296] [transport.py] [_log()] starting thread (client mode): 0xb95f2830
2025-12-31T15:38:00.188 [DEBUG] [Thread-130296] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:38:00.203 [DEBUG] [Thread-130296] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T15:38:00.203 [INFO] [Thread-130296] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T15:38:00.211 [DEBUG] [Thread-130296] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:38:00.211 [DEBUG] [Thread-130296] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T15:38:00.211 [DEBUG] [Thread-130296] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:38:00.211 [DEBUG] [Thread-130296] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:38:00.211 [DEBUG] [Thread-130296] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:38:00.211 [DEBUG] [Thread-130296] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:38:00.211 [DEBUG] [Thread-130296] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:38:00.211 [DEBUG] [Thread-130296] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:38:00.211 [DEBUG] [Thread-130296] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:38:00.211 [DEBUG] [Thread-130296] [transport.py] [_log()] client lang: <none>
2025-12-31T15:38:00.211 [DEBUG] [Thread-130296] [transport.py] [_log()] server lang: <none>
2025-12-31T15:38:00.211 [DEBUG] [Thread-130296] [transport.py] [_log()] kex follows: False
2025-12-31T15:38:00.211 [DEBUG] [Thread-130296] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:38:00.212 [DEBUG] [Thread-130296] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:38:00.212 [DEBUG] [Thread-130296] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:38:00.212 [DEBUG] [Thread-130296] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:38:00.212 [DEBUG] [Thread-130296] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:38:00.212 [DEBUG] [Thread-130296] [transport.py] [_log()] Compression: none
2025-12-31T15:38:00.212 [DEBUG] [Thread-130296] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:38:00.270 [DEBUG] [Thread-130296] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:38:00.271 [DEBUG] [Thread-130296] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:38:00.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T15:38:00.272 [DEBUG] [Thread-130296] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T15:38:00.273 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:38:00.326 [DEBUG] [Thread-130296] [transport.py] [_log()] userauth is OK
2025-12-31T15:38:00.326 [DEBUG] [Thread-130296] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:38:00.326 [DEBUG] [Thread-130296] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:38:00.326 [DEBUG] [Thread-130296] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T15:38:00.326 [DEBUG] [Thread-130296] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:38:00.344 [INFO] [Thread-130296] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:38:00.345 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T15:38:00.346 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:38:01.214 [DEBUG] [Thread-130296] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:38:01.214 [DEBUG] [Thread-130296] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:38:01.262 [DEBUG] [Thread-130296] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:38:01.262 [DEBUG] [Thread-130296] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:38:01.271 [DEBUG] [Thread-130296] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:38:01.280 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:38:01.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T15:38:01.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T15:38:01.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:38:01.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:38:01.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:38:01.307 [DEBUG] [Thread-130296] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:38:09.005 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:38:09.007 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:38:12.951 [DEBUG] [Thread-130298 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:38:21.807 [DEBUG] [Thread-130299 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:38:27.988 [DEBUG] [Thread-130300 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:38:31.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T15:38:31.331 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T15:38:31.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T15:38:32.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 15, 38, 21), 31.92, 11.77, 0.0, 25.85, 25.59, 0, 0, 0, 2, 0, 0),)
2025-12-31T15:38:32.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 15:38:21
2025-12-31T15:38:32.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T15:38:32.315 [DEBUG] [Thread-130301] [transport.py] [_log()] starting thread (client mode): 0xb6b2b730
2025-12-31T15:38:32.315 [DEBUG] [Thread-130301] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:38:32.335 [DEBUG] [Thread-130301] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T15:38:32.335 [INFO] [Thread-130301] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T15:38:32.338 [DEBUG] [Thread-130301] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:38:32.338 [DEBUG] [Thread-130301] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T15:38:32.338 [DEBUG] [Thread-130301] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:38:32.338 [DEBUG] [Thread-130301] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:38:32.338 [DEBUG] [Thread-130301] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:38:32.338 [DEBUG] [Thread-130301] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:38:32.338 [DEBUG] [Thread-130301] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:38:32.338 [DEBUG] [Thread-130301] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:38:32.338 [DEBUG] [Thread-130301] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:38:32.338 [DEBUG] [Thread-130301] [transport.py] [_log()] client lang: <none>
2025-12-31T15:38:32.338 [DEBUG] [Thread-130301] [transport.py] [_log()] server lang: <none>
2025-12-31T15:38:32.338 [DEBUG] [Thread-130301] [transport.py] [_log()] kex follows: False
2025-12-31T15:38:32.338 [DEBUG] [Thread-130301] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:38:32.338 [DEBUG] [Thread-130301] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:38:32.338 [DEBUG] [Thread-130301] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:38:32.338 [DEBUG] [Thread-130301] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:38:32.338 [DEBUG] [Thread-130301] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:38:32.338 [DEBUG] [Thread-130301] [transport.py] [_log()] Compression: none
2025-12-31T15:38:32.338 [DEBUG] [Thread-130301] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:38:32.354 [DEBUG] [Thread-130301] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:38:32.354 [DEBUG] [Thread-130301] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:38:32.355 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T15:38:32.355 [DEBUG] [Thread-130301] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T15:38:32.356 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:38:32.357 [DEBUG] [Thread-130301] [transport.py] [_log()] userauth is OK
2025-12-31T15:38:32.357 [DEBUG] [Thread-130301] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:38:32.358 [DEBUG] [Thread-130301] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:38:32.358 [DEBUG] [Thread-130301] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T15:38:32.358 [DEBUG] [Thread-130301] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:38:32.375 [INFO] [Thread-130301] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:38:32.375 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:38:33.106 [DEBUG] [Thread-130301] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:38:33.107 [DEBUG] [Thread-130301] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:38:33.108 [DEBUG] [Thread-130301] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T15:38:33.148 [DEBUG] [Thread-130301] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:38:33.148 [DEBUG] [Thread-130301] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:38:33.151 [DEBUG] [Thread-130301] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:38:33.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:38:33.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T15:38:33.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T15:38:33.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T15:38:33.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:38:33.172 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T15:38:33.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:38:33.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:38:33.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T15:38:33.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.567850 -999.00  +25.70  23.04     16   -1.60 1 1 1 1 1   888    0 24.59 -56.97 ----- 22.7 23.0 276.0 32.5 30.6 -25.1 30.4 -25.5 30.1 -29.7 31.0 -21.8
2025-12-31T15:38:33.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T15:38:33.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T15:38:33.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.567850
2025-12-31T15:38:33.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T15:38:33.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T15:38:33.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T15:38:33.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T15:38:33.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T15:38:33.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T15:38:21', tmtdew=31.92, humidity=11.77, cloud=0.0, wind=25.85, temperature=25.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T13:37:42.240', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T15:38:33.175 [DEBUG] [Thread-130301] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:38: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-12-31T15:38:33.267 [DEBUG] [Thread-130304] [transport.py] [_log()] starting thread (client mode): 0xb6bbbe20
2025-12-31T15:38:33.268 [DEBUG] [Thread-130304] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:38:33.285 [DEBUG] [Thread-130304] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T15:38:33.285 [INFO] [Thread-130304] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T15:38:33.292 [DEBUG] [Thread-130304] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:38:33.293 [DEBUG] [Thread-130304] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T15:38:33.293 [DEBUG] [Thread-130304] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:38:33.293 [DEBUG] [Thread-130304] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:38:33.293 [DEBUG] [Thread-130304] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:38:33.293 [DEBUG] [Thread-130304] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:38:33.293 [DEBUG] [Thread-130304] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:38:33.293 [DEBUG] [Thread-130304] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:38:33.293 [DEBUG] [Thread-130304] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:38:33.293 [DEBUG] [Thread-130304] [transport.py] [_log()] client lang: <none>
2025-12-31T15:38:33.293 [DEBUG] [Thread-130304] [transport.py] [_log()] server lang: <none>
2025-12-31T15:38:33.293 [DEBUG] [Thread-130304] [transport.py] [_log()] kex follows: False
2025-12-31T15:38:33.293 [DEBUG] [Thread-130304] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:38:33.293 [DEBUG] [Thread-130304] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:38:33.293 [DEBUG] [Thread-130304] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:38:33.293 [DEBUG] [Thread-130304] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:38:33.294 [DEBUG] [Thread-130304] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:38:33.294 [DEBUG] [Thread-130304] [transport.py] [_log()] Compression: none
2025-12-31T15:38:33.294 [DEBUG] [Thread-130304] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:38:33.350 [DEBUG] [Thread-130304] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:38:33.350 [DEBUG] [Thread-130304] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:38:33.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T15:38:33.351 [DEBUG] [Thread-130304] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T15:38:33.352 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:38:33.406 [DEBUG] [Thread-130304] [transport.py] [_log()] userauth is OK
2025-12-31T15:38:33.406 [DEBUG] [Thread-130304] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:38:33.407 [DEBUG] [Thread-130304] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:38:33.407 [DEBUG] [Thread-130304] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T15:38:33.407 [DEBUG] [Thread-130304] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:38:33.429 [INFO] [Thread-130304] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:38:33.430 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T15:38:33.430 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:38:34.290 [DEBUG] [Thread-130304] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:38:34.290 [DEBUG] [Thread-130304] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:38:34.346 [DEBUG] [Thread-130304] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:38:34.346 [DEBUG] [Thread-130304] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:38:34.354 [DEBUG] [Thread-130304] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:38:34.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:38:34.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T15:38:34.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-12-31T15:38:34.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:38:34.378 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:38:34.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:38:34.386 [DEBUG] [Thread-130304] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:38:43.023 [DEBUG] [Thread-130306 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:38:58.075 [DEBUG] [Thread-130307 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:39:04.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T15:39:04.408 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T15:39:04.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T15:39:05.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 15, 38, 53), 32.7, 11.01, 0.0, 29.29, 26.33, 0, 0, 0, 2, 0, 0),)
2025-12-31T15:39:05.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 15:38:53
2025-12-31T15:39:05.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T15:39:05.404 [DEBUG] [Thread-130308] [transport.py] [_log()] starting thread (client mode): 0xb6bb8b20
2025-12-31T15:39:05.404 [DEBUG] [Thread-130308] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:39:05.425 [DEBUG] [Thread-130308] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T15:39:05.425 [INFO] [Thread-130308] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T15:39:05.427 [DEBUG] [Thread-130308] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:39:05.427 [DEBUG] [Thread-130308] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T15:39:05.427 [DEBUG] [Thread-130308] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:39:05.427 [DEBUG] [Thread-130308] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:39:05.427 [DEBUG] [Thread-130308] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:39:05.427 [DEBUG] [Thread-130308] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:39:05.427 [DEBUG] [Thread-130308] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:39:05.427 [DEBUG] [Thread-130308] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:39:05.427 [DEBUG] [Thread-130308] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:39:05.427 [DEBUG] [Thread-130308] [transport.py] [_log()] client lang: <none>
2025-12-31T15:39:05.427 [DEBUG] [Thread-130308] [transport.py] [_log()] server lang: <none>
2025-12-31T15:39:05.427 [DEBUG] [Thread-130308] [transport.py] [_log()] kex follows: False
2025-12-31T15:39:05.427 [DEBUG] [Thread-130308] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:39:05.428 [DEBUG] [Thread-130308] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:39:05.428 [DEBUG] [Thread-130308] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:39:05.428 [DEBUG] [Thread-130308] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:39:05.428 [DEBUG] [Thread-130308] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:39:05.428 [DEBUG] [Thread-130308] [transport.py] [_log()] Compression: none
2025-12-31T15:39:05.428 [DEBUG] [Thread-130308] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:39:05.446 [DEBUG] [Thread-130308] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:39:05.447 [DEBUG] [Thread-130308] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:39:05.448 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T15:39:05.448 [DEBUG] [Thread-130308] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T15:39:05.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:39:05.450 [DEBUG] [Thread-130308] [transport.py] [_log()] userauth is OK
2025-12-31T15:39:05.451 [DEBUG] [Thread-130308] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:39:05.451 [DEBUG] [Thread-130308] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:39:05.451 [DEBUG] [Thread-130308] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T15:39:05.451 [DEBUG] [Thread-130308] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:39:05.467 [INFO] [Thread-130308] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:39:05.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:39:06.115 [DEBUG] [Thread-130308] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:39:06.115 [DEBUG] [Thread-130308] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:39:06.116 [DEBUG] [Thread-130308] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T15:39:06.157 [DEBUG] [Thread-130308] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:39:06.157 [DEBUG] [Thread-130308] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:39:06.161 [DEBUG] [Thread-130308] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:39:06.173 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:39:06.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T15:39:06.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T15:39:06.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T15:39:06.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:39:06.185 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T15:39:06.185 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:39:06.185 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:39:06.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T15:39:06.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.568197 -999.00  +25.80  13.98     16   -1.40 1 1 1 1 1   888    0 25.12 -57.99 ----- 15.5 14.0 299.4 26.0 30.3 -25.5 30.3 -24.6 30.2 -23.6 30.8 -24.7
2025-12-31T15:39:06.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T15:39:06.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T15:39:06.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.568197
2025-12-31T15:39:06.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T15:39:06.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T15:39:06.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T15:39:06.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T15:39:06.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T15:39:06.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T15:38:53', tmtdew=32.7, humidity=11.01, cloud=0.0, wind=29.29, temperature=26.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T13:38:12.221', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T15:39:06.187 [DEBUG] [Thread-130308] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:39:06.277 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T15:39:06.288 [DEBUG] [Thread-130311] [transport.py] [_log()] starting thread (client mode): 0xb6b60250
2025-12-31T15:39:06.288 [DEBUG] [Thread-130311] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:39:06.303 [DEBUG] [Thread-130311] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T15:39:06.303 [INFO] [Thread-130311] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T15:39:06.310 [DEBUG] [Thread-130311] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:39:06.311 [DEBUG] [Thread-130311] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T15:39:06.311 [DEBUG] [Thread-130311] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:39:06.311 [DEBUG] [Thread-130311] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:39:06.311 [DEBUG] [Thread-130311] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:39:06.311 [DEBUG] [Thread-130311] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:39:06.311 [DEBUG] [Thread-130311] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:39:06.311 [DEBUG] [Thread-130311] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:39:06.311 [DEBUG] [Thread-130311] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:39:06.311 [DEBUG] [Thread-130311] [transport.py] [_log()] client lang: <none>
2025-12-31T15:39:06.311 [DEBUG] [Thread-130311] [transport.py] [_log()] server lang: <none>
2025-12-31T15:39:06.311 [DEBUG] [Thread-130311] [transport.py] [_log()] kex follows: False
2025-12-31T15:39:06.311 [DEBUG] [Thread-130311] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:39:06.311 [DEBUG] [Thread-130311] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:39:06.312 [DEBUG] [Thread-130311] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:39:06.312 [DEBUG] [Thread-130311] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:39:06.312 [DEBUG] [Thread-130311] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:39:06.312 [DEBUG] [Thread-130311] [transport.py] [_log()] Compression: none
2025-12-31T15:39:06.312 [DEBUG] [Thread-130311] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:39:06.369 [DEBUG] [Thread-130311] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:39:06.369 [DEBUG] [Thread-130311] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:39:06.370 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T15:39:06.370 [DEBUG] [Thread-130311] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T15:39:06.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:39:06.425 [DEBUG] [Thread-130311] [transport.py] [_log()] userauth is OK
2025-12-31T15:39:06.425 [DEBUG] [Thread-130311] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:39:06.425 [DEBUG] [Thread-130311] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:39:06.425 [DEBUG] [Thread-130311] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T15:39:06.425 [DEBUG] [Thread-130311] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:39:06.440 [INFO] [Thread-130311] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:39:06.441 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T15:39:06.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:39:07.277 [DEBUG] [Thread-130311] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:39:07.277 [DEBUG] [Thread-130311] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:39:07.325 [DEBUG] [Thread-130311] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:39:07.325 [DEBUG] [Thread-130311] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:39:07.335 [DEBUG] [Thread-130311] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:39:07.344 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:39:07.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T15:39:07.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T15:39:07.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:39:07.363 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:39:07.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:39:07.371 [DEBUG] [Thread-130311] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:39:09.148 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:39:09.149 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:39:13.110 [DEBUG] [Thread-130313 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:39:21.860 [DEBUG] [Thread-130314 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:39:28.164 [DEBUG] [Thread-130315 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:39:37.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T15:39:37.372 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T15:39:37.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T15:39:38.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 15, 39, 25), 32.84, 10.88, 0.0, 30.63, 26.25, 0, 0, 0, 2, 0, 0),)
2025-12-31T15:39:38.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 15:39:25
2025-12-31T15:39:38.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T15:39:38.350 [DEBUG] [Thread-130316] [transport.py] [_log()] starting thread (client mode): 0xb6b2abf0
2025-12-31T15:39:38.350 [DEBUG] [Thread-130316] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:39:38.371 [DEBUG] [Thread-130316] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T15:39:38.371 [INFO] [Thread-130316] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T15:39:38.374 [DEBUG] [Thread-130316] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:39:38.375 [DEBUG] [Thread-130316] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T15:39:38.375 [DEBUG] [Thread-130316] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:39:38.375 [DEBUG] [Thread-130316] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:39:38.375 [DEBUG] [Thread-130316] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:39:38.375 [DEBUG] [Thread-130316] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:39:38.375 [DEBUG] [Thread-130316] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:39:38.375 [DEBUG] [Thread-130316] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:39:38.375 [DEBUG] [Thread-130316] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:39:38.375 [DEBUG] [Thread-130316] [transport.py] [_log()] client lang: <none>
2025-12-31T15:39:38.375 [DEBUG] [Thread-130316] [transport.py] [_log()] server lang: <none>
2025-12-31T15:39:38.375 [DEBUG] [Thread-130316] [transport.py] [_log()] kex follows: False
2025-12-31T15:39:38.375 [DEBUG] [Thread-130316] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:39:38.375 [DEBUG] [Thread-130316] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:39:38.375 [DEBUG] [Thread-130316] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:39:38.376 [DEBUG] [Thread-130316] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:39:38.376 [DEBUG] [Thread-130316] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:39:38.376 [DEBUG] [Thread-130316] [transport.py] [_log()] Compression: none
2025-12-31T15:39:38.376 [DEBUG] [Thread-130316] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:39:38.394 [DEBUG] [Thread-130316] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:39:38.395 [DEBUG] [Thread-130316] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:39:38.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T15:39:38.396 [DEBUG] [Thread-130316] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T15:39:38.397 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:39:38.398 [DEBUG] [Thread-130316] [transport.py] [_log()] userauth is OK
2025-12-31T15:39:38.398 [DEBUG] [Thread-130316] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:39:38.398 [DEBUG] [Thread-130316] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:39:38.399 [DEBUG] [Thread-130316] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T15:39:38.399 [DEBUG] [Thread-130316] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:39:38.421 [INFO] [Thread-130316] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:39:38.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:39:39.202 [DEBUG] [Thread-130316] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:39:39.202 [DEBUG] [Thread-130316] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:39:39.203 [DEBUG] [Thread-130316] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T15:39:39.243 [DEBUG] [Thread-130316] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:39:39.243 [DEBUG] [Thread-130316] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:39:39.246 [DEBUG] [Thread-130316] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:39:39.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:39:39.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T15:39:39.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T15:39:39.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T15:39:39.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:39:39.266 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T15:39:39.267 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:39:39.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:39:39.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T15:39:39.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.568544 -999.00  +26.30  20.04     16   -1.30 1 1 1 1 1   888    0 24.92 -52.34 ----- 24.5 20.0 281.6 23.9 30.4 -25.1 30.3 -24.9 30.1 -25.9 30.8 -23.7
2025-12-31T15:39:39.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T15:39:39.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T15:39:39.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.568544
2025-12-31T15:39:39.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T15:39:39.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T15:39:39.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T15:39:39.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T15:39:39.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T15:39:39.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T15:39:25', tmtdew=32.84, humidity=10.88, cloud=0.0, wind=30.63, temperature=26.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T13:38:42.202', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T15:39:39.269 [DEBUG] [Thread-130316] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:39:39.353 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T15:39:39.364 [DEBUG] [Thread-130319] [transport.py] [_log()] starting thread (client mode): 0xb6bb8820
2025-12-31T15:39:39.365 [DEBUG] [Thread-130319] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:39:39.379 [DEBUG] [Thread-130319] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T15:39:39.380 [INFO] [Thread-130319] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T15:39:39.387 [DEBUG] [Thread-130319] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:39:39.387 [DEBUG] [Thread-130319] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T15:39:39.387 [DEBUG] [Thread-130319] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:39:39.388 [DEBUG] [Thread-130319] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:39:39.388 [DEBUG] [Thread-130319] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:39:39.388 [DEBUG] [Thread-130319] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:39:39.388 [DEBUG] [Thread-130319] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:39:39.388 [DEBUG] [Thread-130319] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:39:39.388 [DEBUG] [Thread-130319] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:39:39.388 [DEBUG] [Thread-130319] [transport.py] [_log()] client lang: <none>
2025-12-31T15:39:39.388 [DEBUG] [Thread-130319] [transport.py] [_log()] server lang: <none>
2025-12-31T15:39:39.388 [DEBUG] [Thread-130319] [transport.py] [_log()] kex follows: False
2025-12-31T15:39:39.388 [DEBUG] [Thread-130319] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:39:39.388 [DEBUG] [Thread-130319] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:39:39.388 [DEBUG] [Thread-130319] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:39:39.388 [DEBUG] [Thread-130319] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:39:39.388 [DEBUG] [Thread-130319] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:39:39.388 [DEBUG] [Thread-130319] [transport.py] [_log()] Compression: none
2025-12-31T15:39:39.388 [DEBUG] [Thread-130319] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:39:39.445 [DEBUG] [Thread-130319] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:39:39.446 [DEBUG] [Thread-130319] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:39:39.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T15:39:39.447 [DEBUG] [Thread-130319] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T15:39:39.448 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:39:39.501 [DEBUG] [Thread-130319] [transport.py] [_log()] userauth is OK
2025-12-31T15:39:39.501 [DEBUG] [Thread-130319] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:39:39.501 [DEBUG] [Thread-130319] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:39:39.502 [DEBUG] [Thread-130319] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T15:39:39.502 [DEBUG] [Thread-130319] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:39:39.526 [INFO] [Thread-130319] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:39:39.526 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T15:39:39.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:39:40.357 [DEBUG] [Thread-130319] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:39:40.358 [DEBUG] [Thread-130319] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:39:40.406 [DEBUG] [Thread-130319] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:39:40.406 [DEBUG] [Thread-130319] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:39:40.415 [DEBUG] [Thread-130319] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:39:40.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:39:40.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T15:39:40.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T15:39:40.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:39:40.443 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:39:40.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:39:40.451 [DEBUG] [Thread-130319] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:39:43.200 [DEBUG] [Thread-130321 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:39:58.252 [DEBUG] [Thread-130322 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:40:09.285 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:40:09.286 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:40:10.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T15:40:10.473 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T15:40:10.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T15:40:11.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 15, 39, 57), 32.7, 10.96, 0.0, 30.15, 26.24, 0, 0, 0, 2, 0, 0),)
2025-12-31T15:40:11.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 15:39:57
2025-12-31T15:40:11.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T15:40:11.497 [DEBUG] [Thread-130323] [transport.py] [_log()] starting thread (client mode): 0xb6bb1bd0
2025-12-31T15:40:11.497 [DEBUG] [Thread-130323] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:40:11.517 [DEBUG] [Thread-130323] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T15:40:11.517 [INFO] [Thread-130323] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T15:40:11.521 [DEBUG] [Thread-130323] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:40:11.521 [DEBUG] [Thread-130323] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T15:40:11.521 [DEBUG] [Thread-130323] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:40:11.521 [DEBUG] [Thread-130323] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:40:11.521 [DEBUG] [Thread-130323] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:40:11.521 [DEBUG] [Thread-130323] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:40:11.521 [DEBUG] [Thread-130323] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:40:11.521 [DEBUG] [Thread-130323] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:40:11.521 [DEBUG] [Thread-130323] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:40:11.521 [DEBUG] [Thread-130323] [transport.py] [_log()] client lang: <none>
2025-12-31T15:40:11.521 [DEBUG] [Thread-130323] [transport.py] [_log()] server lang: <none>
2025-12-31T15:40:11.521 [DEBUG] [Thread-130323] [transport.py] [_log()] kex follows: False
2025-12-31T15:40:11.521 [DEBUG] [Thread-130323] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:40:11.521 [DEBUG] [Thread-130323] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:40:11.521 [DEBUG] [Thread-130323] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:40:11.521 [DEBUG] [Thread-130323] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:40:11.521 [DEBUG] [Thread-130323] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:40:11.521 [DEBUG] [Thread-130323] [transport.py] [_log()] Compression: none
2025-12-31T15:40:11.521 [DEBUG] [Thread-130323] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:40:11.536 [DEBUG] [Thread-130323] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:40:11.537 [DEBUG] [Thread-130323] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:40:11.537 [DEBUG] [Thread-130323] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T15:40:11.537 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T15:40:11.537 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:40:11.538 [DEBUG] [Thread-130323] [transport.py] [_log()] userauth is OK
2025-12-31T15:40:11.538 [DEBUG] [Thread-130323] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:40:11.538 [DEBUG] [Thread-130323] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:40:11.538 [DEBUG] [Thread-130323] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T15:40:11.538 [DEBUG] [Thread-130323] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:40:11.559 [INFO] [Thread-130323] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:40:11.559 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:40:13.282 [DEBUG] [Thread-130325 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:40:14.962 [DEBUG] [Thread-130323] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:40:14.962 [DEBUG] [Thread-130323] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:40:14.962 [DEBUG] [Thread-130323] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T15:40:15.003 [DEBUG] [Thread-130323] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:40:15.003 [DEBUG] [Thread-130323] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:40:15.006 [DEBUG] [Thread-130323] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:40:15.087 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:40:15.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T15:40:15.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T15:40:15.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T15:40:15.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:40:15.120 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T15:40:15.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:40:15.121 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:40:15.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T15:40:15.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.568891 -999.00  +26.40  26.32     16   -1.20 1 1 1 1 1   888    0 25.83 -45.44 ----- 26.5 26.3 295.0 36.9 30.4 -24.9 30.2 -25.9 30.1 -23.8 30.6 -23.6
2025-12-31T15:40:15.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T15:40:15.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T15:40:15.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.568891
2025-12-31T15:40:15.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T15:40:15.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T15:40:15.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T15:40:15.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T15:40:15.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T15:40:15.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T15:39:57', tmtdew=32.7, humidity=10.96, cloud=0.0, wind=30.15, temperature=26.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T13:39:12.182', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T15:40:15.124 [DEBUG] [Thread-130323] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:40:15.208 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T15:40:15.221 [DEBUG] [Thread-130327] [transport.py] [_log()] starting thread (client mode): 0xb6ba1ed0
2025-12-31T15:40:15.221 [DEBUG] [Thread-130327] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:40:15.236 [DEBUG] [Thread-130327] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T15:40:15.236 [INFO] [Thread-130327] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T15:40:15.243 [DEBUG] [Thread-130327] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:40:15.244 [DEBUG] [Thread-130327] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T15:40:15.244 [DEBUG] [Thread-130327] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:40:15.244 [DEBUG] [Thread-130327] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:40:15.244 [DEBUG] [Thread-130327] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:40:15.244 [DEBUG] [Thread-130327] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:40:15.244 [DEBUG] [Thread-130327] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:40:15.244 [DEBUG] [Thread-130327] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:40:15.244 [DEBUG] [Thread-130327] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:40:15.244 [DEBUG] [Thread-130327] [transport.py] [_log()] client lang: <none>
2025-12-31T15:40:15.244 [DEBUG] [Thread-130327] [transport.py] [_log()] server lang: <none>
2025-12-31T15:40:15.244 [DEBUG] [Thread-130327] [transport.py] [_log()] kex follows: False
2025-12-31T15:40:15.244 [DEBUG] [Thread-130327] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:40:15.244 [DEBUG] [Thread-130327] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:40:15.244 [DEBUG] [Thread-130327] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:40:15.244 [DEBUG] [Thread-130327] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:40:15.244 [DEBUG] [Thread-130327] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:40:15.245 [DEBUG] [Thread-130327] [transport.py] [_log()] Compression: none
2025-12-31T15:40:15.245 [DEBUG] [Thread-130327] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:40:15.301 [DEBUG] [Thread-130327] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:40:15.302 [DEBUG] [Thread-130327] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:40:15.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T15:40:15.303 [DEBUG] [Thread-130327] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T15:40:15.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:40:15.358 [DEBUG] [Thread-130327] [transport.py] [_log()] userauth is OK
2025-12-31T15:40:15.358 [DEBUG] [Thread-130327] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:40:15.358 [DEBUG] [Thread-130327] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:40:15.358 [DEBUG] [Thread-130327] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T15:40:15.358 [DEBUG] [Thread-130327] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:40:15.378 [INFO] [Thread-130327] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:40:15.378 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T15:40:15.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:40:16.251 [DEBUG] [Thread-130327] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:40:16.251 [DEBUG] [Thread-130327] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:40:16.299 [DEBUG] [Thread-130327] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:40:16.299 [DEBUG] [Thread-130327] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:40:16.308 [DEBUG] [Thread-130327] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:40:16.317 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:40:16.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-12-31T15:40:16.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T15:40:16.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:40:16.336 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:40:16.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:40:16.345 [DEBUG] [Thread-130327] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:40:21.924 [DEBUG] [Thread-130329 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:40:28.314 [DEBUG] [Thread-130330 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:40:43.372 [DEBUG] [Thread-130331 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:40:46.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T15:40:46.367 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T15:40:46.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T15:40:47.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 15, 40, 29), 32.73, 10.93, 0.0, 29.41, 26.2, 0, 0, 0, 2, 0, 0),)
2025-12-31T15:40:47.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 15:40:29
2025-12-31T15:40:47.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T15:40:47.390 [DEBUG] [Thread-130332] [transport.py] [_log()] starting thread (client mode): 0xb6bb3430
2025-12-31T15:40:47.391 [DEBUG] [Thread-130332] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:40:47.411 [DEBUG] [Thread-130332] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T15:40:47.411 [INFO] [Thread-130332] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T15:40:47.414 [DEBUG] [Thread-130332] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:40:47.414 [DEBUG] [Thread-130332] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T15:40:47.414 [DEBUG] [Thread-130332] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:40:47.414 [DEBUG] [Thread-130332] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:40:47.414 [DEBUG] [Thread-130332] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:40:47.414 [DEBUG] [Thread-130332] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:40:47.414 [DEBUG] [Thread-130332] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:40:47.414 [DEBUG] [Thread-130332] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:40:47.414 [DEBUG] [Thread-130332] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:40:47.414 [DEBUG] [Thread-130332] [transport.py] [_log()] client lang: <none>
2025-12-31T15:40:47.414 [DEBUG] [Thread-130332] [transport.py] [_log()] server lang: <none>
2025-12-31T15:40:47.414 [DEBUG] [Thread-130332] [transport.py] [_log()] kex follows: False
2025-12-31T15:40:47.414 [DEBUG] [Thread-130332] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:40:47.414 [DEBUG] [Thread-130332] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:40:47.414 [DEBUG] [Thread-130332] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:40:47.414 [DEBUG] [Thread-130332] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:40:47.414 [DEBUG] [Thread-130332] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:40:47.414 [DEBUG] [Thread-130332] [transport.py] [_log()] Compression: none
2025-12-31T15:40:47.414 [DEBUG] [Thread-130332] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:40:47.428 [DEBUG] [Thread-130332] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:40:47.428 [DEBUG] [Thread-130332] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:40:47.429 [DEBUG] [Thread-130332] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T15:40:47.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T15:40:47.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:40:47.430 [DEBUG] [Thread-130332] [transport.py] [_log()] userauth is OK
2025-12-31T15:40:47.430 [DEBUG] [Thread-130332] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:40:47.430 [DEBUG] [Thread-130332] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:40:47.430 [DEBUG] [Thread-130332] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T15:40:47.430 [DEBUG] [Thread-130332] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:40:47.449 [INFO] [Thread-130332] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:40:47.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:40:48.100 [DEBUG] [Thread-130332] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:40:48.100 [DEBUG] [Thread-130332] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:40:48.100 [DEBUG] [Thread-130332] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T15:40:48.141 [DEBUG] [Thread-130332] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:40:48.141 [DEBUG] [Thread-130332] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:40:48.143 [DEBUG] [Thread-130332] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:40:48.157 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:40:48.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T15:40:48.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T15:40:48.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T15:40:48.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:40:48.162 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T15:40:48.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:40:48.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:40:48.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T15:40:48.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.569586 -999.00  +25.80  25.17     16   -1.50 1 1 1 1 1   888    0 26.01 -35.97 ----- 21.4 25.2 293.8 30.7 30.1 -24.6 30.0 -25.1 29.8 -23.4 30.3 -23.4
2025-12-31T15:40:48.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T15:40:48.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T15:40:48.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.569586
2025-12-31T15:40:48.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T15:40:48.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T15:40:48.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T15:40:48.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T15:40:48.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T15:40:48.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T15:40:29', tmtdew=32.73, humidity=10.93, cloud=0.0, wind=29.41, temperature=26.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T13:40:12.230', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T15:40:48.163 [DEBUG] [Thread-130332] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:40:48.237 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T15:40:48.246 [DEBUG] [Thread-130335] [transport.py] [_log()] starting thread (client mode): 0xb95d75e0
2025-12-31T15:40:48.246 [DEBUG] [Thread-130335] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:40:48.262 [DEBUG] [Thread-130335] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T15:40:48.262 [INFO] [Thread-130335] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T15:40:48.269 [DEBUG] [Thread-130335] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:40:48.269 [DEBUG] [Thread-130335] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T15:40:48.269 [DEBUG] [Thread-130335] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:40:48.269 [DEBUG] [Thread-130335] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:40:48.269 [DEBUG] [Thread-130335] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:40:48.269 [DEBUG] [Thread-130335] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:40:48.269 [DEBUG] [Thread-130335] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:40:48.269 [DEBUG] [Thread-130335] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:40:48.269 [DEBUG] [Thread-130335] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:40:48.269 [DEBUG] [Thread-130335] [transport.py] [_log()] client lang: <none>
2025-12-31T15:40:48.269 [DEBUG] [Thread-130335] [transport.py] [_log()] server lang: <none>
2025-12-31T15:40:48.269 [DEBUG] [Thread-130335] [transport.py] [_log()] kex follows: False
2025-12-31T15:40:48.269 [DEBUG] [Thread-130335] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:40:48.269 [DEBUG] [Thread-130335] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:40:48.269 [DEBUG] [Thread-130335] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:40:48.270 [DEBUG] [Thread-130335] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:40:48.270 [DEBUG] [Thread-130335] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:40:48.270 [DEBUG] [Thread-130335] [transport.py] [_log()] Compression: none
2025-12-31T15:40:48.270 [DEBUG] [Thread-130335] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:40:48.327 [DEBUG] [Thread-130335] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:40:48.327 [DEBUG] [Thread-130335] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:40:48.327 [DEBUG] [Thread-130335] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T15:40:48.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T15:40:48.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:40:48.388 [DEBUG] [Thread-130335] [transport.py] [_log()] userauth is OK
2025-12-31T15:40:48.388 [DEBUG] [Thread-130335] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:40:48.388 [DEBUG] [Thread-130335] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:40:48.388 [DEBUG] [Thread-130335] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T15:40:48.388 [DEBUG] [Thread-130335] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:40:48.402 [INFO] [Thread-130335] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:40:48.402 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T15:40:48.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:40:49.270 [DEBUG] [Thread-130335] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:40:49.270 [DEBUG] [Thread-130335] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:40:49.319 [DEBUG] [Thread-130335] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:40:49.319 [DEBUG] [Thread-130335] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:40:49.327 [DEBUG] [Thread-130335] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:40:49.335 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:40:49.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T15:40:49.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T15:40:49.351 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:40:49.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:40:49.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:40:49.359 [DEBUG] [Thread-130335] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:40:58.406 [DEBUG] [Thread-130337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:41:09.425 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:41:09.426 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:41:13.463 [DEBUG] [Thread-130338 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:41:19.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T15:41:19.382 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T15:41:19.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T15:41:20.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 15, 41, 1), 32.78, 10.89, 0.0, 27.0, 26.24, 0, 0, 0, 2, 0, 0),)
2025-12-31T15:41:20.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 15:41:01
2025-12-31T15:41:20.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T15:41:20.367 [DEBUG] [Thread-130339] [transport.py] [_log()] starting thread (client mode): 0xb6b62020
2025-12-31T15:41:20.368 [DEBUG] [Thread-130339] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:41:20.389 [DEBUG] [Thread-130339] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T15:41:20.389 [INFO] [Thread-130339] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T15:41:20.391 [DEBUG] [Thread-130339] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:41:20.391 [DEBUG] [Thread-130339] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T15:41:20.392 [DEBUG] [Thread-130339] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:41:20.392 [DEBUG] [Thread-130339] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:41:20.392 [DEBUG] [Thread-130339] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:41:20.392 [DEBUG] [Thread-130339] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:41:20.392 [DEBUG] [Thread-130339] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:41:20.392 [DEBUG] [Thread-130339] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:41:20.392 [DEBUG] [Thread-130339] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:41:20.392 [DEBUG] [Thread-130339] [transport.py] [_log()] client lang: <none>
2025-12-31T15:41:20.392 [DEBUG] [Thread-130339] [transport.py] [_log()] server lang: <none>
2025-12-31T15:41:20.392 [DEBUG] [Thread-130339] [transport.py] [_log()] kex follows: False
2025-12-31T15:41:20.392 [DEBUG] [Thread-130339] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:41:20.392 [DEBUG] [Thread-130339] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:41:20.392 [DEBUG] [Thread-130339] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:41:20.392 [DEBUG] [Thread-130339] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:41:20.392 [DEBUG] [Thread-130339] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:41:20.392 [DEBUG] [Thread-130339] [transport.py] [_log()] Compression: none
2025-12-31T15:41:20.392 [DEBUG] [Thread-130339] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:41:20.411 [DEBUG] [Thread-130339] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:41:20.411 [DEBUG] [Thread-130339] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:41:20.412 [DEBUG] [Thread-130339] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T15:41:20.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T15:41:20.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:41:20.415 [DEBUG] [Thread-130339] [transport.py] [_log()] userauth is OK
2025-12-31T15:41:20.415 [DEBUG] [Thread-130339] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:41:20.415 [DEBUG] [Thread-130339] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:41:20.415 [DEBUG] [Thread-130339] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T15:41:20.415 [DEBUG] [Thread-130339] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:41:20.440 [INFO] [Thread-130339] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:41:20.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:41:21.218 [DEBUG] [Thread-130339] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:41:21.219 [DEBUG] [Thread-130339] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:41:21.219 [DEBUG] [Thread-130339] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T15:41:21.260 [DEBUG] [Thread-130339] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:41:21.260 [DEBUG] [Thread-130339] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:41:21.264 [DEBUG] [Thread-130339] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:41:21.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:41:21.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T15:41:21.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T15:41:21.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T15:41:21.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:41:21.293 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T15:41:21.293 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:41:21.293 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:41:21.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T15:41:21.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.569933 -999.00  +25.70  20.34     16   -1.40 1 1 1 1 1   888    0 25.34 -35.66 ----- 22.6 20.3 305.0 25.3 30.0 -24.7 29.9 -24.0 29.8 -22.8 30.1 -23.3
2025-12-31T15:41:21.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T15:41:21.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T15:41:21.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.569933
2025-12-31T15:41:21.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T15:41:21.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T15:41:21.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T15:41:21.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T15:41:21.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T15:41:21.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T15:41:01', tmtdew=32.78, humidity=10.89, cloud=0.0, wind=27.0, temperature=26.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T13:40:42.211', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T15:41:21.296 [DEBUG] [Thread-130339] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:41:21.379 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T15:41:21.391 [DEBUG] [Thread-130342] [transport.py] [_log()] starting thread (client mode): 0xb6b606a0
2025-12-31T15:41:21.392 [DEBUG] [Thread-130342] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:41:21.406 [DEBUG] [Thread-130342] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T15:41:21.406 [INFO] [Thread-130342] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T15:41:21.414 [DEBUG] [Thread-130342] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:41:21.414 [DEBUG] [Thread-130342] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T15:41:21.415 [DEBUG] [Thread-130342] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:41:21.415 [DEBUG] [Thread-130342] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:41:21.415 [DEBUG] [Thread-130342] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:41:21.415 [DEBUG] [Thread-130342] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:41:21.415 [DEBUG] [Thread-130342] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:41:21.415 [DEBUG] [Thread-130342] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:41:21.415 [DEBUG] [Thread-130342] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:41:21.416 [DEBUG] [Thread-130342] [transport.py] [_log()] client lang: <none>
2025-12-31T15:41:21.416 [DEBUG] [Thread-130342] [transport.py] [_log()] server lang: <none>
2025-12-31T15:41:21.416 [DEBUG] [Thread-130342] [transport.py] [_log()] kex follows: False
2025-12-31T15:41:21.416 [DEBUG] [Thread-130342] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:41:21.416 [DEBUG] [Thread-130342] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:41:21.416 [DEBUG] [Thread-130342] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:41:21.416 [DEBUG] [Thread-130342] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:41:21.416 [DEBUG] [Thread-130342] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:41:21.416 [DEBUG] [Thread-130342] [transport.py] [_log()] Compression: none
2025-12-31T15:41:21.416 [DEBUG] [Thread-130342] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:41:21.473 [DEBUG] [Thread-130342] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:41:21.474 [DEBUG] [Thread-130342] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:41:21.474 [DEBUG] [Thread-130342] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T15:41:21.475 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T15:41:21.475 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:41:21.529 [DEBUG] [Thread-130342] [transport.py] [_log()] userauth is OK
2025-12-31T15:41:21.529 [DEBUG] [Thread-130342] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:41:21.529 [DEBUG] [Thread-130342] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:41:21.529 [DEBUG] [Thread-130342] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T15:41:21.529 [DEBUG] [Thread-130342] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:41:21.554 [INFO] [Thread-130342] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:41:21.554 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T15:41:21.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:41:21.961 [DEBUG] [Thread-130344 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:41:22.462 [DEBUG] [Thread-130342] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:41:22.463 [DEBUG] [Thread-130342] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:41:22.511 [DEBUG] [Thread-130342] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:41:22.511 [DEBUG] [Thread-130342] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:41:22.520 [DEBUG] [Thread-130342] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:41:22.530 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:41:22.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T15:41:22.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T15:41:22.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:41:22.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:41:22.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:41:22.557 [DEBUG] [Thread-130342] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:41:28.494 [DEBUG] [Thread-130345 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:41:43.537 [DEBUG] [Thread-130346 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:41:52.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T15:41:52.580 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T15:41:52.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T15:41:53.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 15, 41, 33), 32.92, 10.92, 0.0, 25.51, 26.44, 0, 0, 0, 2, 0, 0),)
2025-12-31T15:41:53.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 15:41:33
2025-12-31T15:41:53.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T15:41:53.571 [DEBUG] [Thread-130347] [transport.py] [_log()] starting thread (client mode): 0xb6b60dc0
2025-12-31T15:41:53.571 [DEBUG] [Thread-130347] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:41:53.593 [DEBUG] [Thread-130347] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T15:41:53.593 [INFO] [Thread-130347] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T15:41:53.595 [DEBUG] [Thread-130347] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:41:53.595 [DEBUG] [Thread-130347] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T15:41:53.595 [DEBUG] [Thread-130347] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:41:53.595 [DEBUG] [Thread-130347] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:41:53.595 [DEBUG] [Thread-130347] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:41:53.595 [DEBUG] [Thread-130347] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:41:53.595 [DEBUG] [Thread-130347] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:41:53.595 [DEBUG] [Thread-130347] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:41:53.595 [DEBUG] [Thread-130347] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:41:53.595 [DEBUG] [Thread-130347] [transport.py] [_log()] client lang: <none>
2025-12-31T15:41:53.595 [DEBUG] [Thread-130347] [transport.py] [_log()] server lang: <none>
2025-12-31T15:41:53.596 [DEBUG] [Thread-130347] [transport.py] [_log()] kex follows: False
2025-12-31T15:41:53.596 [DEBUG] [Thread-130347] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:41:53.596 [DEBUG] [Thread-130347] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:41:53.596 [DEBUG] [Thread-130347] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:41:53.596 [DEBUG] [Thread-130347] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:41:53.596 [DEBUG] [Thread-130347] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:41:53.596 [DEBUG] [Thread-130347] [transport.py] [_log()] Compression: none
2025-12-31T15:41:53.596 [DEBUG] [Thread-130347] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:41:53.617 [DEBUG] [Thread-130347] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:41:53.618 [DEBUG] [Thread-130347] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:41:53.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T15:41:53.619 [DEBUG] [Thread-130347] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T15:41:53.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:41:53.622 [DEBUG] [Thread-130347] [transport.py] [_log()] userauth is OK
2025-12-31T15:41:53.623 [DEBUG] [Thread-130347] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:41:53.623 [DEBUG] [Thread-130347] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:41:53.623 [DEBUG] [Thread-130347] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T15:41:53.623 [DEBUG] [Thread-130347] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:41:53.648 [INFO] [Thread-130347] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:41:53.650 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:41:54.297 [DEBUG] [Thread-130347] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:41:54.297 [DEBUG] [Thread-130347] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:41:54.298 [DEBUG] [Thread-130347] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T15:41:54.339 [DEBUG] [Thread-130347] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:41:54.339 [DEBUG] [Thread-130347] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:41:54.344 [DEBUG] [Thread-130347] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:41:54.355 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:41:54.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T15:41:54.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T15:41:54.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T15:41:54.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:41:54.371 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T15:41:54.371 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:41:54.371 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:41:54.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T15:41:54.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.570280 -999.00  +25.50  22.82     16   -1.40 1 1 1 1 1   888    0 25.56 -34.73 ----- 25.4 22.8 315.4 28.3 30.0 -24.2 29.8 -24.3 29.7 -25.0 30.2 -22.6
2025-12-31T15:41:54.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T15:41:54.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T15:41:54.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.570280
2025-12-31T15:41:54.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T15:41:54.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T15:41:54.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T15:41:54.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T15:41:54.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T15:41:54.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T15:41:33', tmtdew=32.92, humidity=10.92, cloud=0.0, wind=25.51, temperature=26.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T13:41:12.192', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T15:41:54.374 [DEBUG] [Thread-130347] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:41:54.459 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T15:41:54.472 [DEBUG] [Thread-130350] [transport.py] [_log()] starting thread (client mode): 0xb6b28ac0
2025-12-31T15:41:54.472 [DEBUG] [Thread-130350] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:41:54.487 [DEBUG] [Thread-130350] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T15:41:54.488 [INFO] [Thread-130350] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T15:41:54.495 [DEBUG] [Thread-130350] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:41:54.495 [DEBUG] [Thread-130350] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T15:41:54.495 [DEBUG] [Thread-130350] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:41:54.495 [DEBUG] [Thread-130350] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:41:54.495 [DEBUG] [Thread-130350] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:41:54.495 [DEBUG] [Thread-130350] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:41:54.495 [DEBUG] [Thread-130350] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:41:54.495 [DEBUG] [Thread-130350] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:41:54.495 [DEBUG] [Thread-130350] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:41:54.495 [DEBUG] [Thread-130350] [transport.py] [_log()] client lang: <none>
2025-12-31T15:41:54.496 [DEBUG] [Thread-130350] [transport.py] [_log()] server lang: <none>
2025-12-31T15:41:54.496 [DEBUG] [Thread-130350] [transport.py] [_log()] kex follows: False
2025-12-31T15:41:54.496 [DEBUG] [Thread-130350] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:41:54.496 [DEBUG] [Thread-130350] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:41:54.496 [DEBUG] [Thread-130350] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:41:54.496 [DEBUG] [Thread-130350] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:41:54.496 [DEBUG] [Thread-130350] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:41:54.496 [DEBUG] [Thread-130350] [transport.py] [_log()] Compression: none
2025-12-31T15:41:54.496 [DEBUG] [Thread-130350] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:41:54.552 [DEBUG] [Thread-130350] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:41:54.552 [DEBUG] [Thread-130350] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:41:54.553 [DEBUG] [Thread-130350] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T15:41:54.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T15:41:54.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:41:54.609 [DEBUG] [Thread-130350] [transport.py] [_log()] userauth is OK
2025-12-31T15:41:54.609 [DEBUG] [Thread-130350] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:41:54.609 [DEBUG] [Thread-130350] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:41:54.609 [DEBUG] [Thread-130350] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T15:41:54.609 [DEBUG] [Thread-130350] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:41:54.628 [INFO] [Thread-130350] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:41:54.629 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T15:41:54.629 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:41:55.464 [DEBUG] [Thread-130350] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:41:55.464 [DEBUG] [Thread-130350] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:41:55.512 [DEBUG] [Thread-130350] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:41:55.513 [DEBUG] [Thread-130350] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:41:55.521 [DEBUG] [Thread-130350] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:41:55.529 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:41:55.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T15:41:55.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T15:41:55.547 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:41:55.547 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:41:55.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:41:55.555 [DEBUG] [Thread-130350] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:41:58.575 [DEBUG] [Thread-130352 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:42:09.567 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:42:09.567 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:42:13.626 [DEBUG] [Thread-130353 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:42:22.025 [DEBUG] [Thread-130354 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:42:25.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T15:42:25.576 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T15:42:25.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T15:42:26.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 15, 42, 5), 32.02, 11.53, 0.0, 21.63, 25.67, 0, 0, 0, 2, 0, 0),)
2025-12-31T15:42:26.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 15:42:05
2025-12-31T15:42:26.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T15:42:26.557 [DEBUG] [Thread-130355] [transport.py] [_log()] starting thread (client mode): 0xb6bba890
2025-12-31T15:42:26.558 [DEBUG] [Thread-130355] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:42:26.577 [DEBUG] [Thread-130355] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T15:42:26.577 [INFO] [Thread-130355] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T15:42:26.581 [DEBUG] [Thread-130355] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:42:26.581 [DEBUG] [Thread-130355] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T15:42:26.581 [DEBUG] [Thread-130355] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:42:26.581 [DEBUG] [Thread-130355] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:42:26.581 [DEBUG] [Thread-130355] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:42:26.581 [DEBUG] [Thread-130355] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:42:26.581 [DEBUG] [Thread-130355] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:42:26.581 [DEBUG] [Thread-130355] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:42:26.581 [DEBUG] [Thread-130355] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:42:26.582 [DEBUG] [Thread-130355] [transport.py] [_log()] client lang: <none>
2025-12-31T15:42:26.582 [DEBUG] [Thread-130355] [transport.py] [_log()] server lang: <none>
2025-12-31T15:42:26.582 [DEBUG] [Thread-130355] [transport.py] [_log()] kex follows: False
2025-12-31T15:42:26.582 [DEBUG] [Thread-130355] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:42:26.582 [DEBUG] [Thread-130355] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:42:26.582 [DEBUG] [Thread-130355] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:42:26.582 [DEBUG] [Thread-130355] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:42:26.582 [DEBUG] [Thread-130355] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:42:26.582 [DEBUG] [Thread-130355] [transport.py] [_log()] Compression: none
2025-12-31T15:42:26.582 [DEBUG] [Thread-130355] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:42:26.600 [DEBUG] [Thread-130355] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:42:26.601 [DEBUG] [Thread-130355] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:42:26.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T15:42:26.602 [DEBUG] [Thread-130355] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T15:42:26.603 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:42:26.604 [DEBUG] [Thread-130355] [transport.py] [_log()] userauth is OK
2025-12-31T15:42:26.604 [DEBUG] [Thread-130355] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:42:26.605 [DEBUG] [Thread-130355] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:42:26.605 [DEBUG] [Thread-130355] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T15:42:26.605 [DEBUG] [Thread-130355] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:42:26.629 [INFO] [Thread-130355] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:42:26.630 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:42:27.384 [DEBUG] [Thread-130355] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:42:27.385 [DEBUG] [Thread-130355] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:42:27.385 [DEBUG] [Thread-130355] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T15:42:27.427 [DEBUG] [Thread-130355] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:42:27.427 [DEBUG] [Thread-130355] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:42:27.431 [DEBUG] [Thread-130355] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:42:27.445 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:42:27.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T15:42:27.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T15:42:27.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T15:42:27.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:42:27.465 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T15:42:27.466 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:42:27.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:42:27.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T15:42:27.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.570627 -999.00  +25.20  24.26     17   -1.30 1 2 1 1 1   888    0 25.47 -39.96 ----- 20.4 24.3 311.0 32.1 29.9 -22.9 29.7 -23.6 29.6 -22.4 30.0 -21.3
2025-12-31T15:42:27.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T15:42:27.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T15:42:27.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.570627
2025-12-31T15:42:27.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T15:42:27.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T15:42:27.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T15:42:27.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T15:42:27.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T15:42:27.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T15:42:05', tmtdew=32.02, humidity=11.53, cloud=0.0, wind=21.63, temperature=25.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T13:41:42.173', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T15:42:27.469 [DEBUG] [Thread-130355] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:42:27.553 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T15:42:27.565 [DEBUG] [Thread-130358] [transport.py] [_log()] starting thread (client mode): 0xb6b60e80
2025-12-31T15:42:27.565 [DEBUG] [Thread-130358] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:42:27.580 [DEBUG] [Thread-130358] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T15:42:27.580 [INFO] [Thread-130358] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T15:42:27.588 [DEBUG] [Thread-130358] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:42:27.588 [DEBUG] [Thread-130358] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T15:42:27.588 [DEBUG] [Thread-130358] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:42:27.588 [DEBUG] [Thread-130358] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:42:27.589 [DEBUG] [Thread-130358] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:42:27.589 [DEBUG] [Thread-130358] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:42:27.589 [DEBUG] [Thread-130358] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:42:27.589 [DEBUG] [Thread-130358] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:42:27.589 [DEBUG] [Thread-130358] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:42:27.589 [DEBUG] [Thread-130358] [transport.py] [_log()] client lang: <none>
2025-12-31T15:42:27.590 [DEBUG] [Thread-130358] [transport.py] [_log()] server lang: <none>
2025-12-31T15:42:27.590 [DEBUG] [Thread-130358] [transport.py] [_log()] kex follows: False
2025-12-31T15:42:27.590 [DEBUG] [Thread-130358] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:42:27.590 [DEBUG] [Thread-130358] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:42:27.590 [DEBUG] [Thread-130358] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:42:27.590 [DEBUG] [Thread-130358] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:42:27.590 [DEBUG] [Thread-130358] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:42:27.590 [DEBUG] [Thread-130358] [transport.py] [_log()] Compression: none
2025-12-31T15:42:27.590 [DEBUG] [Thread-130358] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:42:27.649 [DEBUG] [Thread-130358] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:42:27.650 [DEBUG] [Thread-130358] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:42:27.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T15:42:27.651 [DEBUG] [Thread-130358] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T15:42:27.652 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:42:27.709 [DEBUG] [Thread-130358] [transport.py] [_log()] userauth is OK
2025-12-31T15:42:27.709 [DEBUG] [Thread-130358] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:42:27.709 [DEBUG] [Thread-130358] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:42:27.709 [DEBUG] [Thread-130358] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T15:42:27.709 [DEBUG] [Thread-130358] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:42:27.727 [INFO] [Thread-130358] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:42:27.728 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T15:42:27.728 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:42:28.582 [DEBUG] [Thread-130358] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:42:28.582 [DEBUG] [Thread-130358] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:42:28.630 [DEBUG] [Thread-130358] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:42:28.630 [DEBUG] [Thread-130358] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:42:28.639 [DEBUG] [Thread-130358] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:42:28.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:42:28.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T15:42:28.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T15:42:28.664 [DEBUG] [Thread-130360 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:42:28.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:42:28.666 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:42:28.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:42:28.674 [DEBUG] [Thread-130358] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:42:43.714 [DEBUG] [Thread-130361 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:42:58.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T15:42:58.691 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T15:42:58.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T15:42:58.745 [DEBUG] [Thread-130362 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:42:59.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 15, 42, 38), 32.2, 11.56, 0.0, 31.72, 25.74, 0, 0, 0, 2, 0, 0),)
2025-12-31T15:42:59.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 15:42:38
2025-12-31T15:42:59.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T15:42:59.657 [DEBUG] [Thread-130363] [transport.py] [_log()] starting thread (client mode): 0xb6ba2c20
2025-12-31T15:42:59.658 [DEBUG] [Thread-130363] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:42:59.678 [DEBUG] [Thread-130363] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T15:42:59.678 [INFO] [Thread-130363] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T15:42:59.680 [DEBUG] [Thread-130363] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:42:59.680 [DEBUG] [Thread-130363] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T15:42:59.680 [DEBUG] [Thread-130363] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:42:59.680 [DEBUG] [Thread-130363] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:42:59.680 [DEBUG] [Thread-130363] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:42:59.680 [DEBUG] [Thread-130363] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:42:59.680 [DEBUG] [Thread-130363] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:42:59.680 [DEBUG] [Thread-130363] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:42:59.680 [DEBUG] [Thread-130363] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:42:59.680 [DEBUG] [Thread-130363] [transport.py] [_log()] client lang: <none>
2025-12-31T15:42:59.680 [DEBUG] [Thread-130363] [transport.py] [_log()] server lang: <none>
2025-12-31T15:42:59.680 [DEBUG] [Thread-130363] [transport.py] [_log()] kex follows: False
2025-12-31T15:42:59.680 [DEBUG] [Thread-130363] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:42:59.680 [DEBUG] [Thread-130363] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:42:59.680 [DEBUG] [Thread-130363] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:42:59.680 [DEBUG] [Thread-130363] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:42:59.680 [DEBUG] [Thread-130363] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:42:59.680 [DEBUG] [Thread-130363] [transport.py] [_log()] Compression: none
2025-12-31T15:42:59.680 [DEBUG] [Thread-130363] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:42:59.693 [DEBUG] [Thread-130363] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:42:59.694 [DEBUG] [Thread-130363] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:42:59.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T15:42:59.695 [DEBUG] [Thread-130363] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T15:42:59.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:42:59.697 [DEBUG] [Thread-130363] [transport.py] [_log()] userauth is OK
2025-12-31T15:42:59.697 [DEBUG] [Thread-130363] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:42:59.698 [DEBUG] [Thread-130363] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:42:59.698 [DEBUG] [Thread-130363] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T15:42:59.698 [DEBUG] [Thread-130363] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:42:59.723 [INFO] [Thread-130363] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:42:59.723 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:43:00.391 [DEBUG] [Thread-130363] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:43:00.391 [DEBUG] [Thread-130363] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:43:00.392 [DEBUG] [Thread-130363] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T15:43:00.432 [DEBUG] [Thread-130363] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:43:00.432 [DEBUG] [Thread-130363] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:43:00.435 [DEBUG] [Thread-130363] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:43:00.448 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:43:00.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T15:43:00.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T15:43:00.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T15:43:00.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:43:00.458 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T15:43:00.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:43:00.458 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:43:00.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T15:43:00.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.570975 -999.00  +25.80  28.26     16   -1.40 1 2 1 1 1   888    0 24.94 -50.45 ----- 36.3 28.3 309.6 34.8 29.8 -22.9 29.6 -23.5 29.6 -22.4 30.0 -21.4
2025-12-31T15:43:00.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T15:43:00.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T15:43:00.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.570975
2025-12-31T15:43:00.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T15:43:00.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T15:43:00.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T15:43:00.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T15:43:00.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T15:43:00.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T15:42:38', tmtdew=32.2, humidity=11.56, cloud=0.0, wind=31.72, temperature=25.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T13:42:12.240', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T15:43:00.461 [DEBUG] [Thread-130363] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:43:00.544 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T15:43:00.556 [DEBUG] [Thread-130366] [transport.py] [_log()] starting thread (client mode): 0xb6b637c0
2025-12-31T15:43:00.556 [DEBUG] [Thread-130366] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:43:00.571 [DEBUG] [Thread-130366] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T15:43:00.572 [INFO] [Thread-130366] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T15:43:00.579 [DEBUG] [Thread-130366] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:43:00.579 [DEBUG] [Thread-130366] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T15:43:00.580 [DEBUG] [Thread-130366] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:43:00.580 [DEBUG] [Thread-130366] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:43:00.580 [DEBUG] [Thread-130366] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:43:00.580 [DEBUG] [Thread-130366] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:43:00.580 [DEBUG] [Thread-130366] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:43:00.580 [DEBUG] [Thread-130366] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:43:00.580 [DEBUG] [Thread-130366] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:43:00.580 [DEBUG] [Thread-130366] [transport.py] [_log()] client lang: <none>
2025-12-31T15:43:00.580 [DEBUG] [Thread-130366] [transport.py] [_log()] server lang: <none>
2025-12-31T15:43:00.580 [DEBUG] [Thread-130366] [transport.py] [_log()] kex follows: False
2025-12-31T15:43:00.580 [DEBUG] [Thread-130366] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:43:00.580 [DEBUG] [Thread-130366] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:43:00.580 [DEBUG] [Thread-130366] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:43:00.580 [DEBUG] [Thread-130366] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:43:00.580 [DEBUG] [Thread-130366] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:43:00.580 [DEBUG] [Thread-130366] [transport.py] [_log()] Compression: none
2025-12-31T15:43:00.580 [DEBUG] [Thread-130366] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:43:00.639 [DEBUG] [Thread-130366] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:43:00.640 [DEBUG] [Thread-130366] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:43:00.640 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T15:43:00.641 [DEBUG] [Thread-130366] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T15:43:00.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:43:00.695 [DEBUG] [Thread-130366] [transport.py] [_log()] userauth is OK
2025-12-31T15:43:00.695 [DEBUG] [Thread-130366] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:43:00.696 [DEBUG] [Thread-130366] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:43:00.696 [DEBUG] [Thread-130366] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T15:43:00.696 [DEBUG] [Thread-130366] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:43:00.714 [INFO] [Thread-130366] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:43:00.715 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T15:43:00.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:43:01.535 [DEBUG] [Thread-130366] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:43:01.535 [DEBUG] [Thread-130366] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:43:01.584 [DEBUG] [Thread-130366] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:43:01.584 [DEBUG] [Thread-130366] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:43:01.593 [DEBUG] [Thread-130366] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:43:01.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:43:01.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T15:43:01.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T15:43:01.621 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:43:01.621 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:43:01.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:43:01.630 [DEBUG] [Thread-130366] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:43:09.708 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:43:09.709 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:43:13.782 [DEBUG] [Thread-130368 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:43:22.077 [DEBUG] [Thread-130369 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:43:28.833 [DEBUG] [Thread-130370 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:43:31.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T15:43:31.631 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T15:43:31.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T15:43:32.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 15, 43, 10), 32.51, 11.31, 0.0, 33.81, 25.82, 0, 0, 0, 2, 0, 0),)
2025-12-31T15:43:32.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 15:43:10
2025-12-31T15:43:32.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T15:43:32.620 [DEBUG] [Thread-130371] [transport.py] [_log()] starting thread (client mode): 0xb95f3610
2025-12-31T15:43:32.620 [DEBUG] [Thread-130371] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:43:32.641 [DEBUG] [Thread-130371] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T15:43:32.641 [INFO] [Thread-130371] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T15:43:32.644 [DEBUG] [Thread-130371] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:43:32.644 [DEBUG] [Thread-130371] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T15:43:32.644 [DEBUG] [Thread-130371] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:43:32.644 [DEBUG] [Thread-130371] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:43:32.644 [DEBUG] [Thread-130371] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:43:32.645 [DEBUG] [Thread-130371] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:43:32.645 [DEBUG] [Thread-130371] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:43:32.645 [DEBUG] [Thread-130371] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:43:32.645 [DEBUG] [Thread-130371] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:43:32.645 [DEBUG] [Thread-130371] [transport.py] [_log()] client lang: <none>
2025-12-31T15:43:32.645 [DEBUG] [Thread-130371] [transport.py] [_log()] server lang: <none>
2025-12-31T15:43:32.645 [DEBUG] [Thread-130371] [transport.py] [_log()] kex follows: False
2025-12-31T15:43:32.645 [DEBUG] [Thread-130371] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:43:32.645 [DEBUG] [Thread-130371] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:43:32.645 [DEBUG] [Thread-130371] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:43:32.645 [DEBUG] [Thread-130371] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:43:32.645 [DEBUG] [Thread-130371] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:43:32.645 [DEBUG] [Thread-130371] [transport.py] [_log()] Compression: none
2025-12-31T15:43:32.645 [DEBUG] [Thread-130371] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:43:32.662 [DEBUG] [Thread-130371] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:43:32.663 [DEBUG] [Thread-130371] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:43:32.664 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T15:43:32.665 [DEBUG] [Thread-130371] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T15:43:32.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:43:32.667 [DEBUG] [Thread-130371] [transport.py] [_log()] userauth is OK
2025-12-31T15:43:32.667 [DEBUG] [Thread-130371] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:43:32.667 [DEBUG] [Thread-130371] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:43:32.667 [DEBUG] [Thread-130371] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T15:43:32.668 [DEBUG] [Thread-130371] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:43:32.684 [INFO] [Thread-130371] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:43:32.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:43:33.435 [DEBUG] [Thread-130371] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:43:33.435 [DEBUG] [Thread-130371] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:43:33.435 [DEBUG] [Thread-130371] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T15:43:33.476 [DEBUG] [Thread-130371] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:43:33.476 [DEBUG] [Thread-130371] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:43:33.479 [DEBUG] [Thread-130371] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:43:33.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:43:33.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T15:43:33.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T15:43:33.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T15:43:33.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:43:33.497 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T15:43:33.498 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:43:33.498 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:43:33.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T15:43:33.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.571322 -999.00  +25.90  28.29     16   -1.70 1 2 1 1 1   888    0 25.52 -52.50 ----- 30.5 28.3 310.7 41.5 29.7 -22.9 29.6 -22.4 29.4 -20.9 29.9 -22.0
2025-12-31T15:43:33.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T15:43:33.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T15:43:33.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.571322
2025-12-31T15:43:33.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T15:43:33.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T15:43:33.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T15:43:33.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T15:43:33.500 [DEBUG] [Thread-130371] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:43:33.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T15:43:33.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T15:43:10', tmtdew=32.51, humidity=11.31, cloud=0.0, wind=33.81, temperature=25.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T13:42:42.221', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T15:43:33.587 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T15:43:33.602 [DEBUG] [Thread-130374] [transport.py] [_log()] starting thread (client mode): 0xb95d7460
2025-12-31T15:43:33.602 [DEBUG] [Thread-130374] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:43:33.617 [DEBUG] [Thread-130374] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T15:43:33.618 [INFO] [Thread-130374] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T15:43:33.625 [DEBUG] [Thread-130374] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:43:33.625 [DEBUG] [Thread-130374] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T15:43:33.626 [DEBUG] [Thread-130374] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:43:33.626 [DEBUG] [Thread-130374] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:43:33.626 [DEBUG] [Thread-130374] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:43:33.626 [DEBUG] [Thread-130374] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:43:33.626 [DEBUG] [Thread-130374] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:43:33.626 [DEBUG] [Thread-130374] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:43:33.626 [DEBUG] [Thread-130374] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:43:33.626 [DEBUG] [Thread-130374] [transport.py] [_log()] client lang: <none>
2025-12-31T15:43:33.626 [DEBUG] [Thread-130374] [transport.py] [_log()] server lang: <none>
2025-12-31T15:43:33.627 [DEBUG] [Thread-130374] [transport.py] [_log()] kex follows: False
2025-12-31T15:43:33.627 [DEBUG] [Thread-130374] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:43:33.627 [DEBUG] [Thread-130374] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:43:33.627 [DEBUG] [Thread-130374] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:43:33.627 [DEBUG] [Thread-130374] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:43:33.627 [DEBUG] [Thread-130374] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:43:33.627 [DEBUG] [Thread-130374] [transport.py] [_log()] Compression: none
2025-12-31T15:43:33.628 [DEBUG] [Thread-130374] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:43:33.686 [DEBUG] [Thread-130374] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:43:33.686 [DEBUG] [Thread-130374] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:43:33.687 [DEBUG] [Thread-130374] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T15:43:33.687 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T15:43:33.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:43:33.742 [DEBUG] [Thread-130374] [transport.py] [_log()] userauth is OK
2025-12-31T15:43:33.742 [DEBUG] [Thread-130374] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:43:33.742 [DEBUG] [Thread-130374] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:43:33.742 [DEBUG] [Thread-130374] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T15:43:33.742 [DEBUG] [Thread-130374] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:43:33.760 [INFO] [Thread-130374] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:43:33.761 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T15:43:33.761 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:43:34.603 [DEBUG] [Thread-130374] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:43:34.605 [DEBUG] [Thread-130374] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:43:34.652 [DEBUG] [Thread-130374] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:43:34.652 [DEBUG] [Thread-130374] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:43:34.661 [DEBUG] [Thread-130374] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:43:34.671 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:43:34.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T15:43:34.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T15:43:34.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:43:34.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:43:34.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:43:34.698 [DEBUG] [Thread-130374] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:43:43.865 [DEBUG] [Thread-130376 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:43:58.907 [DEBUG] [Thread-130377 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:44:04.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T15:44:04.720 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T15:44:04.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T15:44:05.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 15, 43, 42), 32.83, 10.73, 0.0, 28.99, 25.72, 0, 0, 0, 2, 0, 0),)
2025-12-31T15:44:05.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 15:43:42
2025-12-31T15:44:05.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T15:44:05.741 [DEBUG] [Thread-130378] [transport.py] [_log()] starting thread (client mode): 0xb95f0ac0
2025-12-31T15:44:05.741 [DEBUG] [Thread-130378] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:44:05.762 [DEBUG] [Thread-130378] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T15:44:05.762 [INFO] [Thread-130378] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T15:44:05.765 [DEBUG] [Thread-130378] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:44:05.765 [DEBUG] [Thread-130378] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T15:44:05.765 [DEBUG] [Thread-130378] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:44:05.765 [DEBUG] [Thread-130378] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:44:05.765 [DEBUG] [Thread-130378] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:44:05.765 [DEBUG] [Thread-130378] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:44:05.765 [DEBUG] [Thread-130378] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:44:05.765 [DEBUG] [Thread-130378] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:44:05.765 [DEBUG] [Thread-130378] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:44:05.766 [DEBUG] [Thread-130378] [transport.py] [_log()] client lang: <none>
2025-12-31T15:44:05.766 [DEBUG] [Thread-130378] [transport.py] [_log()] server lang: <none>
2025-12-31T15:44:05.766 [DEBUG] [Thread-130378] [transport.py] [_log()] kex follows: False
2025-12-31T15:44:05.766 [DEBUG] [Thread-130378] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:44:05.766 [DEBUG] [Thread-130378] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:44:05.766 [DEBUG] [Thread-130378] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:44:05.766 [DEBUG] [Thread-130378] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:44:05.766 [DEBUG] [Thread-130378] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:44:05.766 [DEBUG] [Thread-130378] [transport.py] [_log()] Compression: none
2025-12-31T15:44:05.766 [DEBUG] [Thread-130378] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:44:05.781 [DEBUG] [Thread-130378] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:44:05.781 [DEBUG] [Thread-130378] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:44:05.781 [DEBUG] [Thread-130378] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T15:44:05.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T15:44:05.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:44:05.783 [DEBUG] [Thread-130378] [transport.py] [_log()] userauth is OK
2025-12-31T15:44:05.783 [DEBUG] [Thread-130378] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:44:05.783 [DEBUG] [Thread-130378] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:44:05.784 [DEBUG] [Thread-130378] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T15:44:05.784 [DEBUG] [Thread-130378] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:44:05.793 [INFO] [Thread-130378] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:44:05.794 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:44:06.438 [DEBUG] [Thread-130378] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:44:06.438 [DEBUG] [Thread-130378] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:44:06.438 [DEBUG] [Thread-130378] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T15:44:06.479 [DEBUG] [Thread-130378] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:44:06.479 [DEBUG] [Thread-130378] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:44:06.482 [DEBUG] [Thread-130378] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:44:06.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:44:06.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T15:44:06.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T15:44:06.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T15:44:06.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:44:06.500 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T15:44:06.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:44:06.500 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:44:06.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T15:44:06.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.571669 -999.00  +25.40  25.49     16   -2.00 1 1 1 1 1   888    0 25.49 -48.93 ----- 26.7 25.5 313.6 37.2 29.6 -23.2 29.5 -22.1 29.3 -25.3 29.7 -21.6
2025-12-31T15:44:06.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T15:44:06.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T15:44:06.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.571669
2025-12-31T15:44:06.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T15:44:06.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T15:44:06.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T15:44:06.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T15:44:06.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T15:44:06.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T15:43:42', tmtdew=32.83, humidity=10.73, cloud=0.0, wind=28.99, temperature=25.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T13:43:12.202', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T15:44:06.501 [DEBUG] [Thread-130378] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:44:06.576 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T15:44:06.588 [DEBUG] [Thread-130381] [transport.py] [_log()] starting thread (client mode): 0xb95f0d00
2025-12-31T15:44:06.588 [DEBUG] [Thread-130381] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:44:06.603 [DEBUG] [Thread-130381] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T15:44:06.603 [INFO] [Thread-130381] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T15:44:06.610 [DEBUG] [Thread-130381] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:44:06.610 [DEBUG] [Thread-130381] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T15:44:06.610 [DEBUG] [Thread-130381] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:44:06.610 [DEBUG] [Thread-130381] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:44:06.610 [DEBUG] [Thread-130381] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:44:06.610 [DEBUG] [Thread-130381] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:44:06.610 [DEBUG] [Thread-130381] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:44:06.610 [DEBUG] [Thread-130381] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:44:06.610 [DEBUG] [Thread-130381] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:44:06.610 [DEBUG] [Thread-130381] [transport.py] [_log()] client lang: <none>
2025-12-31T15:44:06.610 [DEBUG] [Thread-130381] [transport.py] [_log()] server lang: <none>
2025-12-31T15:44:06.610 [DEBUG] [Thread-130381] [transport.py] [_log()] kex follows: False
2025-12-31T15:44:06.610 [DEBUG] [Thread-130381] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:44:06.610 [DEBUG] [Thread-130381] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:44:06.610 [DEBUG] [Thread-130381] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:44:06.610 [DEBUG] [Thread-130381] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:44:06.610 [DEBUG] [Thread-130381] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:44:06.610 [DEBUG] [Thread-130381] [transport.py] [_log()] Compression: none
2025-12-31T15:44:06.610 [DEBUG] [Thread-130381] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:44:06.667 [DEBUG] [Thread-130381] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:44:06.667 [DEBUG] [Thread-130381] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:44:06.667 [DEBUG] [Thread-130381] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T15:44:06.667 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T15:44:06.667 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:44:06.731 [DEBUG] [Thread-130381] [transport.py] [_log()] userauth is OK
2025-12-31T15:44:06.731 [DEBUG] [Thread-130381] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:44:06.731 [DEBUG] [Thread-130381] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:44:06.731 [DEBUG] [Thread-130381] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T15:44:06.731 [DEBUG] [Thread-130381] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:44:06.745 [INFO] [Thread-130381] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:44:06.745 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T15:44:06.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:44:07.602 [DEBUG] [Thread-130381] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:44:07.603 [DEBUG] [Thread-130381] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:44:07.650 [DEBUG] [Thread-130381] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:44:07.650 [DEBUG] [Thread-130381] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:44:07.659 [DEBUG] [Thread-130381] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:44:07.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:44:07.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T15:44:07.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T15:44:07.682 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:44:07.682 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:44:07.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:44:07.690 [DEBUG] [Thread-130381] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:44:09.849 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:44:09.851 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:44:13.942 [DEBUG] [Thread-130383 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:44:22.120 [DEBUG] [Thread-130384 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:44:28.993 [DEBUG] [Thread-130385 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:44:37.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T15:44:37.693 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T15:44:37.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T15:44:38.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 15, 44, 14), 32.73, 10.81, 0.0, 32.22, 25.72, 0, 0, 0, 2, 0, 0),)
2025-12-31T15:44:38.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 15:44:14
2025-12-31T15:44:38.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T15:44:38.687 [DEBUG] [Thread-130386] [transport.py] [_log()] starting thread (client mode): 0xb6b61de0
2025-12-31T15:44:38.687 [DEBUG] [Thread-130386] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:44:38.707 [DEBUG] [Thread-130386] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T15:44:38.708 [INFO] [Thread-130386] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T15:44:38.708 [DEBUG] [Thread-130386] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:44:38.709 [DEBUG] [Thread-130386] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T15:44:38.709 [DEBUG] [Thread-130386] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:44:38.709 [DEBUG] [Thread-130386] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:44:38.709 [DEBUG] [Thread-130386] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:44:38.709 [DEBUG] [Thread-130386] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:44:38.709 [DEBUG] [Thread-130386] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:44:38.709 [DEBUG] [Thread-130386] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:44:38.709 [DEBUG] [Thread-130386] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:44:38.709 [DEBUG] [Thread-130386] [transport.py] [_log()] client lang: <none>
2025-12-31T15:44:38.709 [DEBUG] [Thread-130386] [transport.py] [_log()] server lang: <none>
2025-12-31T15:44:38.709 [DEBUG] [Thread-130386] [transport.py] [_log()] kex follows: False
2025-12-31T15:44:38.709 [DEBUG] [Thread-130386] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:44:38.709 [DEBUG] [Thread-130386] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:44:38.709 [DEBUG] [Thread-130386] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:44:38.709 [DEBUG] [Thread-130386] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:44:38.710 [DEBUG] [Thread-130386] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:44:38.710 [DEBUG] [Thread-130386] [transport.py] [_log()] Compression: none
2025-12-31T15:44:38.710 [DEBUG] [Thread-130386] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:44:38.719 [DEBUG] [Thread-130386] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:44:38.720 [DEBUG] [Thread-130386] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:44:38.721 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T15:44:38.721 [DEBUG] [Thread-130386] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T15:44:38.722 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:44:38.724 [DEBUG] [Thread-130386] [transport.py] [_log()] userauth is OK
2025-12-31T15:44:38.724 [DEBUG] [Thread-130386] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:44:38.724 [DEBUG] [Thread-130386] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:44:38.724 [DEBUG] [Thread-130386] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T15:44:38.724 [DEBUG] [Thread-130386] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:44:38.749 [INFO] [Thread-130386] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:44:38.751 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:44:39.514 [DEBUG] [Thread-130386] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:44:39.514 [DEBUG] [Thread-130386] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:44:39.514 [DEBUG] [Thread-130386] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T15:44:39.555 [DEBUG] [Thread-130386] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:44:39.555 [DEBUG] [Thread-130386] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:44:39.557 [DEBUG] [Thread-130386] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:44:39.573 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:44:39.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T15:44:39.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T15:44:39.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T15:44:39.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:44:39.584 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T15:44:39.585 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:44:39.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:44:39.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T15:44:39.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.572016 -999.00  +25.40  35.73     16   -1.60 1 1 2 1 1   888    0 25.05 -46.21 ----- 35.6 35.7 294.2 40.0 29.5 -22.6 29.4 -22.5 29.1 -23.9 29.6 -21.2
2025-12-31T15:44:39.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T15:44:39.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T15:44:39.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.572016
2025-12-31T15:44:39.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T15:44:39.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T15:44:39.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T15:44:39.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T15:44:39.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T15:44:39.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T15:44:14', tmtdew=32.73, humidity=10.81, cloud=0.0, wind=32.22, temperature=25.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T13:43:42.182', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T15:44:39.587 [DEBUG] [Thread-130386] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:44:39.671 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T15:44:39.684 [DEBUG] [Thread-130389] [transport.py] [_log()] starting thread (client mode): 0xb6bba350
2025-12-31T15:44:39.684 [DEBUG] [Thread-130389] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:44:39.698 [DEBUG] [Thread-130389] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T15:44:39.699 [INFO] [Thread-130389] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T15:44:39.706 [DEBUG] [Thread-130389] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:44:39.706 [DEBUG] [Thread-130389] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T15:44:39.706 [DEBUG] [Thread-130389] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:44:39.707 [DEBUG] [Thread-130389] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:44:39.707 [DEBUG] [Thread-130389] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:44:39.707 [DEBUG] [Thread-130389] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:44:39.707 [DEBUG] [Thread-130389] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:44:39.707 [DEBUG] [Thread-130389] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:44:39.707 [DEBUG] [Thread-130389] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:44:39.707 [DEBUG] [Thread-130389] [transport.py] [_log()] client lang: <none>
2025-12-31T15:44:39.707 [DEBUG] [Thread-130389] [transport.py] [_log()] server lang: <none>
2025-12-31T15:44:39.707 [DEBUG] [Thread-130389] [transport.py] [_log()] kex follows: False
2025-12-31T15:44:39.707 [DEBUG] [Thread-130389] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:44:39.707 [DEBUG] [Thread-130389] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:44:39.707 [DEBUG] [Thread-130389] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:44:39.707 [DEBUG] [Thread-130389] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:44:39.707 [DEBUG] [Thread-130389] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:44:39.707 [DEBUG] [Thread-130389] [transport.py] [_log()] Compression: none
2025-12-31T15:44:39.707 [DEBUG] [Thread-130389] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:44:39.766 [DEBUG] [Thread-130389] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:44:39.766 [DEBUG] [Thread-130389] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:44:39.767 [DEBUG] [Thread-130389] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T15:44:39.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T15:44:39.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:44:39.822 [DEBUG] [Thread-130389] [transport.py] [_log()] userauth is OK
2025-12-31T15:44:39.823 [DEBUG] [Thread-130389] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:44:39.823 [DEBUG] [Thread-130389] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:44:39.823 [DEBUG] [Thread-130389] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T15:44:39.823 [DEBUG] [Thread-130389] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:44:39.847 [INFO] [Thread-130389] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:44:39.847 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T15:44:39.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:44:40.684 [DEBUG] [Thread-130389] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:44:40.684 [DEBUG] [Thread-130389] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:44:40.731 [DEBUG] [Thread-130389] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:44:40.731 [DEBUG] [Thread-130389] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:44:40.739 [DEBUG] [Thread-130389] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:44:40.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:44:40.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T15:44:40.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T15:44:40.763 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:44:40.763 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:44:40.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:44:40.771 [DEBUG] [Thread-130389] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:44:44.027 [DEBUG] [Thread-130391 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:44:59.076 [DEBUG] [Thread-130392 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:45:09.991 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:45:09.993 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:45:10.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T15:45:10.789 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T15:45:10.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T15:45:11.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 15, 44, 46), 32.62, 11.23, 0.0, 36.72, 26.0, 0, 0, 0, 2, 0, 0),)
2025-12-31T15:45:11.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 15:44:46
2025-12-31T15:45:11.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T15:45:11.784 [DEBUG] [Thread-130393] [transport.py] [_log()] starting thread (client mode): 0xb6bbfa90
2025-12-31T15:45:11.784 [DEBUG] [Thread-130393] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:45:11.805 [DEBUG] [Thread-130393] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T15:45:11.805 [INFO] [Thread-130393] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T15:45:11.808 [DEBUG] [Thread-130393] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:45:11.808 [DEBUG] [Thread-130393] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T15:45:11.808 [DEBUG] [Thread-130393] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:45:11.808 [DEBUG] [Thread-130393] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:45:11.808 [DEBUG] [Thread-130393] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:45:11.808 [DEBUG] [Thread-130393] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:45:11.809 [DEBUG] [Thread-130393] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:45:11.809 [DEBUG] [Thread-130393] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:45:11.809 [DEBUG] [Thread-130393] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:45:11.809 [DEBUG] [Thread-130393] [transport.py] [_log()] client lang: <none>
2025-12-31T15:45:11.809 [DEBUG] [Thread-130393] [transport.py] [_log()] server lang: <none>
2025-12-31T15:45:11.809 [DEBUG] [Thread-130393] [transport.py] [_log()] kex follows: False
2025-12-31T15:45:11.809 [DEBUG] [Thread-130393] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:45:11.809 [DEBUG] [Thread-130393] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:45:11.809 [DEBUG] [Thread-130393] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:45:11.809 [DEBUG] [Thread-130393] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:45:11.809 [DEBUG] [Thread-130393] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:45:11.810 [DEBUG] [Thread-130393] [transport.py] [_log()] Compression: none
2025-12-31T15:45:11.810 [DEBUG] [Thread-130393] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:45:11.829 [DEBUG] [Thread-130393] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:45:11.830 [DEBUG] [Thread-130393] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:45:11.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T15:45:11.831 [DEBUG] [Thread-130393] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T15:45:11.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:45:11.833 [DEBUG] [Thread-130393] [transport.py] [_log()] userauth is OK
2025-12-31T15:45:11.833 [DEBUG] [Thread-130393] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:45:11.833 [DEBUG] [Thread-130393] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:45:11.833 [DEBUG] [Thread-130393] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T15:45:11.834 [DEBUG] [Thread-130393] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:45:11.858 [INFO] [Thread-130393] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:45:11.859 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:45:14.113 [DEBUG] [Thread-130395 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:45:15.473 [DEBUG] [Thread-130393] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:45:15.473 [DEBUG] [Thread-130393] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:45:15.473 [DEBUG] [Thread-130393] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T15:45:15.513 [DEBUG] [Thread-130393] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:45:15.514 [DEBUG] [Thread-130393] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:45:15.517 [DEBUG] [Thread-130393] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:45:15.678 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:45:15.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T15:45:15.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T15:45:15.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T15:45:15.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:45:15.698 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T15:45:15.698 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:45:15.698 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:45:15.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T15:45:15.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.572364 -999.00  +25.70  26.01     16   -1.30 1 2 1 1 1   888    0 25.10 -38.12 ----- 25.4 26.0 284.8 33.3 29.4 -21.0 29.4 -20.6 29.3 -20.2 29.5 -20.3
2025-12-31T15:45:15.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T15:45:15.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T15:45:15.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.572364
2025-12-31T15:45:15.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T15:45:15.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T15:45:15.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T15:45:15.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T15:45:15.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T15:45:15.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T15:44:46', tmtdew=32.62, humidity=11.23, cloud=0.0, wind=36.72, temperature=26.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T13:44:12.250', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T15:45:15.700 [DEBUG] [Thread-130393] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:45:15.784 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T15:45:15.800 [DEBUG] [Thread-130397] [transport.py] [_log()] starting thread (client mode): 0xb9558880
2025-12-31T15:45:15.800 [DEBUG] [Thread-130397] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:45:15.815 [DEBUG] [Thread-130397] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T15:45:15.815 [INFO] [Thread-130397] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T15:45:15.824 [DEBUG] [Thread-130397] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:45:15.824 [DEBUG] [Thread-130397] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T15:45:15.824 [DEBUG] [Thread-130397] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:45:15.824 [DEBUG] [Thread-130397] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:45:15.824 [DEBUG] [Thread-130397] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:45:15.825 [DEBUG] [Thread-130397] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:45:15.825 [DEBUG] [Thread-130397] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:45:15.825 [DEBUG] [Thread-130397] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:45:15.825 [DEBUG] [Thread-130397] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:45:15.825 [DEBUG] [Thread-130397] [transport.py] [_log()] client lang: <none>
2025-12-31T15:45:15.825 [DEBUG] [Thread-130397] [transport.py] [_log()] server lang: <none>
2025-12-31T15:45:15.825 [DEBUG] [Thread-130397] [transport.py] [_log()] kex follows: False
2025-12-31T15:45:15.825 [DEBUG] [Thread-130397] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:45:15.825 [DEBUG] [Thread-130397] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:45:15.825 [DEBUG] [Thread-130397] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:45:15.825 [DEBUG] [Thread-130397] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:45:15.825 [DEBUG] [Thread-130397] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:45:15.825 [DEBUG] [Thread-130397] [transport.py] [_log()] Compression: none
2025-12-31T15:45:15.825 [DEBUG] [Thread-130397] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:45:15.880 [DEBUG] [Thread-130397] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:45:15.881 [DEBUG] [Thread-130397] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:45:15.881 [DEBUG] [Thread-130397] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T15:45:15.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T15:45:15.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:45:15.936 [DEBUG] [Thread-130397] [transport.py] [_log()] userauth is OK
2025-12-31T15:45:15.937 [DEBUG] [Thread-130397] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:45:15.937 [DEBUG] [Thread-130397] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:45:15.937 [DEBUG] [Thread-130397] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T15:45:15.937 [DEBUG] [Thread-130397] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:45:15.960 [INFO] [Thread-130397] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:45:15.961 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T15:45:15.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:45:16.764 [DEBUG] [Thread-130397] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:45:16.764 [DEBUG] [Thread-130397] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:45:16.812 [DEBUG] [Thread-130397] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:45:16.813 [DEBUG] [Thread-130397] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:45:16.822 [DEBUG] [Thread-130397] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:45:16.831 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:45:16.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T15:45:16.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T15:45:16.849 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:45:16.849 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:45:16.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:45:16.858 [DEBUG] [Thread-130397] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:45:22.164 [DEBUG] [Thread-130399 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:45:29.145 [DEBUG] [Thread-130400 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:45:44.189 [DEBUG] [Thread-130401 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:45:46.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T15:45:46.881 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T15:45:46.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T15:45:47.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 15, 45, 18), 32.43, 11.38, 0.0, 35.18, 25.94, 0, 0, 0, 2, 0, 0),)
2025-12-31T15:45:47.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 15:45:18
2025-12-31T15:45:47.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T15:45:47.868 [DEBUG] [Thread-130402] [transport.py] [_log()] starting thread (client mode): 0xb957a740
2025-12-31T15:45:47.868 [DEBUG] [Thread-130402] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:45:47.889 [DEBUG] [Thread-130402] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T15:45:47.889 [INFO] [Thread-130402] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T15:45:47.893 [DEBUG] [Thread-130402] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:45:47.893 [DEBUG] [Thread-130402] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T15:45:47.893 [DEBUG] [Thread-130402] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:45:47.893 [DEBUG] [Thread-130402] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:45:47.893 [DEBUG] [Thread-130402] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:45:47.893 [DEBUG] [Thread-130402] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:45:47.893 [DEBUG] [Thread-130402] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:45:47.893 [DEBUG] [Thread-130402] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:45:47.893 [DEBUG] [Thread-130402] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:45:47.893 [DEBUG] [Thread-130402] [transport.py] [_log()] client lang: <none>
2025-12-31T15:45:47.893 [DEBUG] [Thread-130402] [transport.py] [_log()] server lang: <none>
2025-12-31T15:45:47.893 [DEBUG] [Thread-130402] [transport.py] [_log()] kex follows: False
2025-12-31T15:45:47.893 [DEBUG] [Thread-130402] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:45:47.893 [DEBUG] [Thread-130402] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:45:47.894 [DEBUG] [Thread-130402] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:45:47.894 [DEBUG] [Thread-130402] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:45:47.894 [DEBUG] [Thread-130402] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:45:47.894 [DEBUG] [Thread-130402] [transport.py] [_log()] Compression: none
2025-12-31T15:45:47.894 [DEBUG] [Thread-130402] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:45:47.911 [DEBUG] [Thread-130402] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:45:47.912 [DEBUG] [Thread-130402] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:45:47.912 [DEBUG] [Thread-130402] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T15:45:47.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T15:45:47.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:45:47.916 [DEBUG] [Thread-130402] [transport.py] [_log()] userauth is OK
2025-12-31T15:45:47.916 [DEBUG] [Thread-130402] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:45:47.916 [DEBUG] [Thread-130402] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:45:47.916 [DEBUG] [Thread-130402] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T15:45:47.917 [DEBUG] [Thread-130402] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:45:47.935 [INFO] [Thread-130402] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:45:47.936 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:45:48.503 [DEBUG] [Thread-130402] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:45:48.503 [DEBUG] [Thread-130402] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:45:48.504 [DEBUG] [Thread-130402] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T15:45:48.544 [DEBUG] [Thread-130402] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:45:48.544 [DEBUG] [Thread-130402] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:45:48.548 [DEBUG] [Thread-130402] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:45:48.560 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:45:48.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T15:45:48.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T15:45:48.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T15:45:48.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:45:48.574 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T15:45:48.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:45:48.574 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:45:48.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T15:45:48.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.573058 -999.00  +26.20  30.92     16   -1.20 1 2 2 1 1   888    0 26.39 -10.30 ----- 36.5 30.9 295.6 36.5 29.9 -17.9 30.0 -18.8 29.9 -17.2 29.9 -16.9
2025-12-31T15:45:48.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T15:45:48.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T15:45:48.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.573058
2025-12-31T15:45:48.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T15:45:48.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T15:45:48.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T15:45:48.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T15:45:48.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T15:45:48.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T15:45:18', tmtdew=32.43, humidity=11.38, cloud=0.0, wind=35.18, temperature=25.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T13:45:12.211', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T15:45:48.577 [DEBUG] [Thread-130402] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:45:48.660 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T15:45:48.673 [DEBUG] [Thread-130405] [transport.py] [_log()] starting thread (client mode): 0xb9558820
2025-12-31T15:45:48.673 [DEBUG] [Thread-130405] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:45:48.687 [DEBUG] [Thread-130405] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T15:45:48.687 [INFO] [Thread-130405] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T15:45:48.695 [DEBUG] [Thread-130405] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:45:48.695 [DEBUG] [Thread-130405] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T15:45:48.696 [DEBUG] [Thread-130405] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:45:48.696 [DEBUG] [Thread-130405] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:45:48.696 [DEBUG] [Thread-130405] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:45:48.696 [DEBUG] [Thread-130405] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:45:48.696 [DEBUG] [Thread-130405] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:45:48.696 [DEBUG] [Thread-130405] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:45:48.696 [DEBUG] [Thread-130405] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:45:48.696 [DEBUG] [Thread-130405] [transport.py] [_log()] client lang: <none>
2025-12-31T15:45:48.696 [DEBUG] [Thread-130405] [transport.py] [_log()] server lang: <none>
2025-12-31T15:45:48.696 [DEBUG] [Thread-130405] [transport.py] [_log()] kex follows: False
2025-12-31T15:45:48.696 [DEBUG] [Thread-130405] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:45:48.696 [DEBUG] [Thread-130405] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:45:48.696 [DEBUG] [Thread-130405] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:45:48.697 [DEBUG] [Thread-130405] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:45:48.697 [DEBUG] [Thread-130405] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:45:48.697 [DEBUG] [Thread-130405] [transport.py] [_log()] Compression: none
2025-12-31T15:45:48.697 [DEBUG] [Thread-130405] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:45:48.755 [DEBUG] [Thread-130405] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:45:48.756 [DEBUG] [Thread-130405] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:45:48.756 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T15:45:48.757 [DEBUG] [Thread-130405] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T15:45:48.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:45:48.814 [DEBUG] [Thread-130405] [transport.py] [_log()] userauth is OK
2025-12-31T15:45:48.815 [DEBUG] [Thread-130405] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:45:48.815 [DEBUG] [Thread-130405] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:45:48.815 [DEBUG] [Thread-130405] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T15:45:48.815 [DEBUG] [Thread-130405] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:45:48.834 [INFO] [Thread-130405] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:45:48.834 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T15:45:48.834 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:45:49.685 [DEBUG] [Thread-130405] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:45:49.686 [DEBUG] [Thread-130405] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:45:49.738 [DEBUG] [Thread-130405] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:45:49.738 [DEBUG] [Thread-130405] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:45:49.748 [DEBUG] [Thread-130405] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:45:49.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:45:49.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T15:45:49.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T15:45:49.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:45:49.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:45:49.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:45:49.784 [DEBUG] [Thread-130405] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:45:59.222 [DEBUG] [Thread-130407 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:46:10.132 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:46:10.133 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:46:14.271 [DEBUG] [Thread-130408 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:46:19.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T15:46:19.797 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T15:46:19.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T15:46:20.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 15, 45, 50), 32.15, 11.41, 0.0, 32.41, 25.75, 0, 0, 0, 2, 0, 0),)
2025-12-31T15:46:20.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 15:45:50
2025-12-31T15:46:20.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T15:46:20.782 [DEBUG] [Thread-130409] [transport.py] [_log()] starting thread (client mode): 0xb95d7220
2025-12-31T15:46:20.783 [DEBUG] [Thread-130409] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:46:20.803 [DEBUG] [Thread-130409] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T15:46:20.803 [INFO] [Thread-130409] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T15:46:20.806 [DEBUG] [Thread-130409] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:46:20.806 [DEBUG] [Thread-130409] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T15:46:20.806 [DEBUG] [Thread-130409] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:46:20.806 [DEBUG] [Thread-130409] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:46:20.806 [DEBUG] [Thread-130409] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:46:20.806 [DEBUG] [Thread-130409] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:46:20.806 [DEBUG] [Thread-130409] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:46:20.806 [DEBUG] [Thread-130409] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:46:20.806 [DEBUG] [Thread-130409] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:46:20.806 [DEBUG] [Thread-130409] [transport.py] [_log()] client lang: <none>
2025-12-31T15:46:20.806 [DEBUG] [Thread-130409] [transport.py] [_log()] server lang: <none>
2025-12-31T15:46:20.806 [DEBUG] [Thread-130409] [transport.py] [_log()] kex follows: False
2025-12-31T15:46:20.806 [DEBUG] [Thread-130409] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:46:20.806 [DEBUG] [Thread-130409] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:46:20.807 [DEBUG] [Thread-130409] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:46:20.807 [DEBUG] [Thread-130409] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:46:20.807 [DEBUG] [Thread-130409] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:46:20.807 [DEBUG] [Thread-130409] [transport.py] [_log()] Compression: none
2025-12-31T15:46:20.807 [DEBUG] [Thread-130409] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:46:20.823 [DEBUG] [Thread-130409] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:46:20.823 [DEBUG] [Thread-130409] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:46:20.824 [DEBUG] [Thread-130409] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T15:46:20.824 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T15:46:20.825 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:46:20.826 [DEBUG] [Thread-130409] [transport.py] [_log()] userauth is OK
2025-12-31T15:46:20.826 [DEBUG] [Thread-130409] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:46:20.826 [DEBUG] [Thread-130409] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:46:20.826 [DEBUG] [Thread-130409] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T15:46:20.827 [DEBUG] [Thread-130409] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:46:20.850 [INFO] [Thread-130409] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:46:20.851 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:46:21.633 [DEBUG] [Thread-130409] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:46:21.633 [DEBUG] [Thread-130409] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:46:21.634 [DEBUG] [Thread-130409] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T15:46:21.674 [DEBUG] [Thread-130409] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:46:21.674 [DEBUG] [Thread-130409] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:46:21.678 [DEBUG] [Thread-130409] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:46:21.690 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:46:21.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T15:46:21.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T15:46:21.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T15:46:21.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:46:21.700 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T15:46:21.700 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:46:21.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:46:21.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T15:46:21.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.573405 -999.00  +25.60  32.05     17   -0.90 1 2 2 1 1   888    0 27.06 -0.33 ----- 27.4 32.0 304.0 47.0 30.1 -18.4 30.1 -18.5 30.2 -16.3 30.4 -16.1
2025-12-31T15:46:21.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T15:46:21.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T15:46:21.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.573405
2025-12-31T15:46:21.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T15:46:21.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T15:46:21.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T15:46:21.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T15:46:21.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T15:46:21.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T15:45:50', tmtdew=32.15, humidity=11.41, cloud=0.0, wind=32.41, temperature=25.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T13:45:42.192', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T15:46:21.703 [DEBUG] [Thread-130409] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:46:21.786 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T15:46:21.800 [DEBUG] [Thread-130412] [transport.py] [_log()] starting thread (client mode): 0xb6bbf070
2025-12-31T15:46:21.800 [DEBUG] [Thread-130412] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:46:21.815 [DEBUG] [Thread-130412] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T15:46:21.815 [INFO] [Thread-130412] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T15:46:21.823 [DEBUG] [Thread-130412] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:46:21.823 [DEBUG] [Thread-130412] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T15:46:21.823 [DEBUG] [Thread-130412] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:46:21.823 [DEBUG] [Thread-130412] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:46:21.823 [DEBUG] [Thread-130412] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:46:21.823 [DEBUG] [Thread-130412] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:46:21.823 [DEBUG] [Thread-130412] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:46:21.823 [DEBUG] [Thread-130412] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:46:21.823 [DEBUG] [Thread-130412] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:46:21.824 [DEBUG] [Thread-130412] [transport.py] [_log()] client lang: <none>
2025-12-31T15:46:21.824 [DEBUG] [Thread-130412] [transport.py] [_log()] server lang: <none>
2025-12-31T15:46:21.824 [DEBUG] [Thread-130412] [transport.py] [_log()] kex follows: False
2025-12-31T15:46:21.824 [DEBUG] [Thread-130412] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:46:21.824 [DEBUG] [Thread-130412] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:46:21.824 [DEBUG] [Thread-130412] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:46:21.824 [DEBUG] [Thread-130412] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:46:21.824 [DEBUG] [Thread-130412] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:46:21.824 [DEBUG] [Thread-130412] [transport.py] [_log()] Compression: none
2025-12-31T15:46:21.824 [DEBUG] [Thread-130412] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:46:21.886 [DEBUG] [Thread-130412] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:46:21.886 [DEBUG] [Thread-130412] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:46:21.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T15:46:21.887 [DEBUG] [Thread-130412] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T15:46:21.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:46:21.950 [DEBUG] [Thread-130412] [transport.py] [_log()] userauth is OK
2025-12-31T15:46:21.951 [DEBUG] [Thread-130412] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:46:21.951 [DEBUG] [Thread-130412] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:46:21.951 [DEBUG] [Thread-130412] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T15:46:21.951 [DEBUG] [Thread-130412] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:46:21.969 [INFO] [Thread-130412] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:46:21.969 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T15:46:21.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:46:22.214 [DEBUG] [Thread-130414 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:46:22.798 [DEBUG] [Thread-130412] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:46:22.798 [DEBUG] [Thread-130412] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:46:22.846 [DEBUG] [Thread-130412] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:46:22.846 [DEBUG] [Thread-130412] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:46:22.854 [DEBUG] [Thread-130412] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:46:22.862 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:46:22.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T15:46:22.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T15:46:22.882 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:46:22.882 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:46:22.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:46:22.890 [DEBUG] [Thread-130412] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:46:29.309 [DEBUG] [Thread-130415 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:46:44.357 [DEBUG] [Thread-130416 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:46:52.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T15:46:52.913 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T15:46:52.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T15:46:53.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 15, 46, 22), 32.08, 11.49, 0.0, 32.2, 25.87, 0, 0, 0, 2, 0, 0),)
2025-12-31T15:46:53.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 15:46:22
2025-12-31T15:46:53.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T15:46:53.892 [DEBUG] [Thread-130417] [transport.py] [_log()] starting thread (client mode): 0xb6bb0a00
2025-12-31T15:46:53.892 [DEBUG] [Thread-130417] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:46:53.913 [DEBUG] [Thread-130417] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T15:46:53.913 [INFO] [Thread-130417] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T15:46:53.916 [DEBUG] [Thread-130417] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:46:53.916 [DEBUG] [Thread-130417] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T15:46:53.916 [DEBUG] [Thread-130417] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:46:53.916 [DEBUG] [Thread-130417] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:46:53.916 [DEBUG] [Thread-130417] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:46:53.916 [DEBUG] [Thread-130417] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:46:53.916 [DEBUG] [Thread-130417] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:46:53.916 [DEBUG] [Thread-130417] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:46:53.917 [DEBUG] [Thread-130417] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:46:53.917 [DEBUG] [Thread-130417] [transport.py] [_log()] client lang: <none>
2025-12-31T15:46:53.917 [DEBUG] [Thread-130417] [transport.py] [_log()] server lang: <none>
2025-12-31T15:46:53.917 [DEBUG] [Thread-130417] [transport.py] [_log()] kex follows: False
2025-12-31T15:46:53.917 [DEBUG] [Thread-130417] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:46:53.917 [DEBUG] [Thread-130417] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:46:53.917 [DEBUG] [Thread-130417] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:46:53.917 [DEBUG] [Thread-130417] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:46:53.917 [DEBUG] [Thread-130417] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:46:53.917 [DEBUG] [Thread-130417] [transport.py] [_log()] Compression: none
2025-12-31T15:46:53.917 [DEBUG] [Thread-130417] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:46:53.936 [DEBUG] [Thread-130417] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:46:53.937 [DEBUG] [Thread-130417] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:46:53.938 [DEBUG] [Thread-130417] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T15:46:53.938 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T15:46:53.939 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:46:53.940 [DEBUG] [Thread-130417] [transport.py] [_log()] userauth is OK
2025-12-31T15:46:53.941 [DEBUG] [Thread-130417] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:46:53.941 [DEBUG] [Thread-130417] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:46:53.941 [DEBUG] [Thread-130417] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T15:46:53.941 [DEBUG] [Thread-130417] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:46:53.963 [INFO] [Thread-130417] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:46:53.963 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:46:54.617 [DEBUG] [Thread-130417] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:46:54.618 [DEBUG] [Thread-130417] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:46:54.618 [DEBUG] [Thread-130417] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T15:46:54.660 [DEBUG] [Thread-130417] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:46:54.660 [DEBUG] [Thread-130417] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:46:54.663 [DEBUG] [Thread-130417] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:46:54.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:46:54.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T15:46:54.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T15:46:54.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T15:46:54.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:46:54.684 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T15:46:54.684 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:46:54.684 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:46:54.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T15:46:54.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.573752 -999.00  +25.60  40.26     17   -0.80 1 2 2 1 1   888    0 26.79 9.17 ----- 40.9 40.3 291.4 46.2 30.4 -18.4 30.2 -18.8 30.4 -19.2 30.7 -16.2
2025-12-31T15:46:54.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T15:46:54.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T15:46:54.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.573752
2025-12-31T15:46:54.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T15:46:54.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T15:46:54.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T15:46:54.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T15:46:54.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T15:46:54.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T15:46:22', tmtdew=32.08, humidity=11.49, cloud=0.0, wind=32.2, temperature=25.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T13:46:12.173', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T15:46:54.686 [DEBUG] [Thread-130417] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:46:54.773 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T15:46:54.785 [DEBUG] [Thread-130420] [transport.py] [_log()] starting thread (client mode): 0xb6bb1ba0
2025-12-31T15:46:54.785 [DEBUG] [Thread-130420] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:46:54.800 [DEBUG] [Thread-130420] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T15:46:54.800 [INFO] [Thread-130420] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T15:46:54.807 [DEBUG] [Thread-130420] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:46:54.807 [DEBUG] [Thread-130420] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T15:46:54.807 [DEBUG] [Thread-130420] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:46:54.807 [DEBUG] [Thread-130420] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:46:54.807 [DEBUG] [Thread-130420] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:46:54.807 [DEBUG] [Thread-130420] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:46:54.807 [DEBUG] [Thread-130420] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:46:54.807 [DEBUG] [Thread-130420] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:46:54.807 [DEBUG] [Thread-130420] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:46:54.807 [DEBUG] [Thread-130420] [transport.py] [_log()] client lang: <none>
2025-12-31T15:46:54.807 [DEBUG] [Thread-130420] [transport.py] [_log()] server lang: <none>
2025-12-31T15:46:54.807 [DEBUG] [Thread-130420] [transport.py] [_log()] kex follows: False
2025-12-31T15:46:54.807 [DEBUG] [Thread-130420] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:46:54.807 [DEBUG] [Thread-130420] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:46:54.807 [DEBUG] [Thread-130420] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:46:54.807 [DEBUG] [Thread-130420] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:46:54.807 [DEBUG] [Thread-130420] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:46:54.808 [DEBUG] [Thread-130420] [transport.py] [_log()] Compression: none
2025-12-31T15:46:54.808 [DEBUG] [Thread-130420] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:46:54.863 [DEBUG] [Thread-130420] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:46:54.864 [DEBUG] [Thread-130420] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:46:54.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T15:46:54.864 [DEBUG] [Thread-130420] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T15:46:54.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:46:54.921 [DEBUG] [Thread-130420] [transport.py] [_log()] userauth is OK
2025-12-31T15:46:54.921 [DEBUG] [Thread-130420] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:46:54.921 [DEBUG] [Thread-130420] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:46:54.921 [DEBUG] [Thread-130420] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T15:46:54.921 [DEBUG] [Thread-130420] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:46:54.934 [INFO] [Thread-130420] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:46:54.934 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T15:46:54.934 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:46:55.748 [DEBUG] [Thread-130420] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:46:55.748 [DEBUG] [Thread-130420] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:46:55.796 [DEBUG] [Thread-130420] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:46:55.796 [DEBUG] [Thread-130420] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:46:55.805 [DEBUG] [Thread-130420] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:46:55.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:46:55.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T15:46:55.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T15:46:55.828 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:46:55.828 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:46:55.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:46:55.836 [DEBUG] [Thread-130420] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:46:59.391 [DEBUG] [Thread-130422 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:47:10.282 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:47:10.283 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:47:14.433 [DEBUG] [Thread-130423 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:47:22.259 [DEBUG] [Thread-130424 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:47:25.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T15:47:25.857 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T15:47:25.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T15:47:26.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 15, 46, 54), 32.78, 10.91, 0.0, 37.58, 26.66, 0, 0, 0, 2, 0, 0),)
2025-12-31T15:47:26.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 15:46:54
2025-12-31T15:47:26.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T15:47:26.841 [DEBUG] [Thread-130425] [transport.py] [_log()] starting thread (client mode): 0xb6bbf190
2025-12-31T15:47:26.841 [DEBUG] [Thread-130425] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:47:26.861 [DEBUG] [Thread-130425] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T15:47:26.861 [INFO] [Thread-130425] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T15:47:26.864 [DEBUG] [Thread-130425] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:47:26.864 [DEBUG] [Thread-130425] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T15:47:26.864 [DEBUG] [Thread-130425] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:47:26.864 [DEBUG] [Thread-130425] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:47:26.864 [DEBUG] [Thread-130425] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:47:26.864 [DEBUG] [Thread-130425] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:47:26.864 [DEBUG] [Thread-130425] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:47:26.864 [DEBUG] [Thread-130425] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:47:26.864 [DEBUG] [Thread-130425] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:47:26.865 [DEBUG] [Thread-130425] [transport.py] [_log()] client lang: <none>
2025-12-31T15:47:26.865 [DEBUG] [Thread-130425] [transport.py] [_log()] server lang: <none>
2025-12-31T15:47:26.865 [DEBUG] [Thread-130425] [transport.py] [_log()] kex follows: False
2025-12-31T15:47:26.865 [DEBUG] [Thread-130425] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:47:26.865 [DEBUG] [Thread-130425] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:47:26.865 [DEBUG] [Thread-130425] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:47:26.865 [DEBUG] [Thread-130425] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:47:26.865 [DEBUG] [Thread-130425] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:47:26.865 [DEBUG] [Thread-130425] [transport.py] [_log()] Compression: none
2025-12-31T15:47:26.865 [DEBUG] [Thread-130425] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:47:26.882 [DEBUG] [Thread-130425] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:47:26.882 [DEBUG] [Thread-130425] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:47:26.882 [DEBUG] [Thread-130425] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T15:47:26.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T15:47:26.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:47:26.883 [DEBUG] [Thread-130425] [transport.py] [_log()] userauth is OK
2025-12-31T15:47:26.883 [DEBUG] [Thread-130425] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:47:26.883 [DEBUG] [Thread-130425] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:47:26.883 [DEBUG] [Thread-130425] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T15:47:26.883 [DEBUG] [Thread-130425] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:47:26.892 [INFO] [Thread-130425] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:47:26.892 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:47:27.625 [DEBUG] [Thread-130425] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:47:27.625 [DEBUG] [Thread-130425] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:47:27.625 [DEBUG] [Thread-130425] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T15:47:27.667 [DEBUG] [Thread-130425] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:47:27.667 [DEBUG] [Thread-130425] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:47:27.669 [DEBUG] [Thread-130425] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:47:27.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:47:27.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T15:47:27.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T15:47:27.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T15:47:27.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:47:27.679 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T15:47:27.679 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:47:27.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:47:27.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T15:47:27.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.574100 -999.00  +26.20  28.66     16   -0.70 1 2 1 1 1   888    0 27.27 17.20 ----- 23.8 28.7 305.4 41.3 30.4 -18.2 30.4 -19.2 30.4 -19.2 30.9 -17.4
2025-12-31T15:47:27.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T15:47:27.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T15:47:27.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.574100
2025-12-31T15:47:27.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T15:47:27.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T15:47:27.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T15:47:27.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T15:47:27.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T15:47:27.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T15:46:54', tmtdew=32.78, humidity=10.91, cloud=0.0, wind=37.58, temperature=26.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T13:46:42.240', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T15:47:27.680 [DEBUG] [Thread-130425] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:47:27.755 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T15:47:27.766 [DEBUG] [Thread-130428] [transport.py] [_log()] starting thread (client mode): 0xb6b2b400
2025-12-31T15:47:27.767 [DEBUG] [Thread-130428] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:47:27.781 [DEBUG] [Thread-130428] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T15:47:27.781 [INFO] [Thread-130428] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T15:47:27.788 [DEBUG] [Thread-130428] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:47:27.788 [DEBUG] [Thread-130428] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T15:47:27.788 [DEBUG] [Thread-130428] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:47:27.788 [DEBUG] [Thread-130428] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:47:27.789 [DEBUG] [Thread-130428] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:47:27.789 [DEBUG] [Thread-130428] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:47:27.789 [DEBUG] [Thread-130428] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:47:27.789 [DEBUG] [Thread-130428] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:47:27.789 [DEBUG] [Thread-130428] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:47:27.789 [DEBUG] [Thread-130428] [transport.py] [_log()] client lang: <none>
2025-12-31T15:47:27.789 [DEBUG] [Thread-130428] [transport.py] [_log()] server lang: <none>
2025-12-31T15:47:27.789 [DEBUG] [Thread-130428] [transport.py] [_log()] kex follows: False
2025-12-31T15:47:27.789 [DEBUG] [Thread-130428] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:47:27.789 [DEBUG] [Thread-130428] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:47:27.789 [DEBUG] [Thread-130428] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:47:27.789 [DEBUG] [Thread-130428] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:47:27.789 [DEBUG] [Thread-130428] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:47:27.789 [DEBUG] [Thread-130428] [transport.py] [_log()] Compression: none
2025-12-31T15:47:27.789 [DEBUG] [Thread-130428] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:47:27.851 [DEBUG] [Thread-130428] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:47:27.851 [DEBUG] [Thread-130428] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:47:27.851 [DEBUG] [Thread-130428] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T15:47:27.851 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T15:47:27.851 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:47:27.907 [DEBUG] [Thread-130428] [transport.py] [_log()] userauth is OK
2025-12-31T15:47:27.907 [DEBUG] [Thread-130428] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:47:27.907 [DEBUG] [Thread-130428] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:47:27.907 [DEBUG] [Thread-130428] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T15:47:27.907 [DEBUG] [Thread-130428] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:47:27.921 [INFO] [Thread-130428] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:47:27.921 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T15:47:27.921 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:47:28.764 [DEBUG] [Thread-130428] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:47:28.764 [DEBUG] [Thread-130428] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:47:28.812 [DEBUG] [Thread-130428] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:47:28.812 [DEBUG] [Thread-130428] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:47:28.821 [DEBUG] [Thread-130428] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:47:28.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:47:28.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T15:47:28.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T15:47:28.847 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:47:28.847 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:47:28.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:47:28.856 [DEBUG] [Thread-130428] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:47:29.468 [DEBUG] [Thread-130430 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:47:44.522 [DEBUG] [Thread-130431 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:47:58.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T15:47:58.877 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T15:47:58.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T15:47:59.558 [DEBUG] [Thread-130432 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:47:59.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 15, 47, 26), 32.89, 10.83, 0.0, 33.33, 26.68, 0, 0, 0, 2, 0, 0),)
2025-12-31T15:47:59.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 15:47:26
2025-12-31T15:47:59.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T15:47:59.960 [DEBUG] [Thread-130433] [transport.py] [_log()] starting thread (client mode): 0xb6b16b00
2025-12-31T15:47:59.960 [DEBUG] [Thread-130433] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:47:59.980 [DEBUG] [Thread-130433] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T15:47:59.980 [INFO] [Thread-130433] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T15:47:59.983 [DEBUG] [Thread-130433] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:47:59.983 [DEBUG] [Thread-130433] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T15:47:59.983 [DEBUG] [Thread-130433] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:47:59.983 [DEBUG] [Thread-130433] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:47:59.983 [DEBUG] [Thread-130433] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:47:59.983 [DEBUG] [Thread-130433] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:47:59.983 [DEBUG] [Thread-130433] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:47:59.983 [DEBUG] [Thread-130433] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:47:59.983 [DEBUG] [Thread-130433] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:47:59.984 [DEBUG] [Thread-130433] [transport.py] [_log()] client lang: <none>
2025-12-31T15:47:59.984 [DEBUG] [Thread-130433] [transport.py] [_log()] server lang: <none>
2025-12-31T15:47:59.984 [DEBUG] [Thread-130433] [transport.py] [_log()] kex follows: False
2025-12-31T15:47:59.984 [DEBUG] [Thread-130433] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:47:59.984 [DEBUG] [Thread-130433] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:47:59.984 [DEBUG] [Thread-130433] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:47:59.984 [DEBUG] [Thread-130433] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:47:59.984 [DEBUG] [Thread-130433] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:47:59.984 [DEBUG] [Thread-130433] [transport.py] [_log()] Compression: none
2025-12-31T15:47:59.984 [DEBUG] [Thread-130433] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:47:59.999 [DEBUG] [Thread-130433] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:47:59.999 [DEBUG] [Thread-130433] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:47:59.999 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T15:48:00.000 [DEBUG] [Thread-130433] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T15:48:00.000 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:48:00.000 [DEBUG] [Thread-130433] [transport.py] [_log()] userauth is OK
2025-12-31T15:48:00.000 [DEBUG] [Thread-130433] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:48:00.000 [DEBUG] [Thread-130433] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:48:00.001 [DEBUG] [Thread-130433] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T15:48:00.001 [DEBUG] [Thread-130433] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:48:00.010 [INFO] [Thread-130433] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:48:00.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:48:00.678 [DEBUG] [Thread-130433] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:48:00.678 [DEBUG] [Thread-130433] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:48:00.678 [DEBUG] [Thread-130433] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T15:48:00.719 [DEBUG] [Thread-130433] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:48:00.720 [DEBUG] [Thread-130433] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:48:00.722 [DEBUG] [Thread-130433] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:48:00.736 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:48:00.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T15:48:00.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T15:48:00.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T15:48:00.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:48:00.741 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T15:48:00.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:48:00.741 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:48:00.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T15:48:00.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.574447 -999.00  +26.20  25.84     16   -0.80 1 2 1 1 1   888    0 27.99 25.84 ----- 25.0 25.8 297.4 33.5 30.5 -20.3 30.4 -19.8 30.8 -18.0 31.1 -18.9
2025-12-31T15:48:00.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T15:48:00.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T15:48:00.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.574447
2025-12-31T15:48:00.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T15:48:00.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T15:48:00.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T15:48:00.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T15:48:00.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T15:48:00.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T15:47:26', tmtdew=32.89, humidity=10.83, cloud=0.0, wind=33.33, temperature=26.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T13:47:12.221', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T15:48:00.742 [DEBUG] [Thread-130433] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:48:00.817 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T15:48:00.829 [DEBUG] [Thread-130436] [transport.py] [_log()] starting thread (client mode): 0xb6bb3430
2025-12-31T15:48:00.829 [DEBUG] [Thread-130436] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:48:00.843 [DEBUG] [Thread-130436] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T15:48:00.843 [INFO] [Thread-130436] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T15:48:00.850 [DEBUG] [Thread-130436] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:48:00.851 [DEBUG] [Thread-130436] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T15:48:00.851 [DEBUG] [Thread-130436] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:48:00.851 [DEBUG] [Thread-130436] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:48:00.851 [DEBUG] [Thread-130436] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:48:00.851 [DEBUG] [Thread-130436] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:48:00.851 [DEBUG] [Thread-130436] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:48:00.851 [DEBUG] [Thread-130436] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:48:00.851 [DEBUG] [Thread-130436] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:48:00.851 [DEBUG] [Thread-130436] [transport.py] [_log()] client lang: <none>
2025-12-31T15:48:00.851 [DEBUG] [Thread-130436] [transport.py] [_log()] server lang: <none>
2025-12-31T15:48:00.851 [DEBUG] [Thread-130436] [transport.py] [_log()] kex follows: False
2025-12-31T15:48:00.851 [DEBUG] [Thread-130436] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:48:00.851 [DEBUG] [Thread-130436] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:48:00.851 [DEBUG] [Thread-130436] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:48:00.851 [DEBUG] [Thread-130436] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:48:00.851 [DEBUG] [Thread-130436] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:48:00.851 [DEBUG] [Thread-130436] [transport.py] [_log()] Compression: none
2025-12-31T15:48:00.851 [DEBUG] [Thread-130436] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:48:00.907 [DEBUG] [Thread-130436] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:48:00.907 [DEBUG] [Thread-130436] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:48:00.908 [DEBUG] [Thread-130436] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T15:48:00.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T15:48:00.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:48:00.964 [DEBUG] [Thread-130436] [transport.py] [_log()] userauth is OK
2025-12-31T15:48:00.964 [DEBUG] [Thread-130436] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:48:00.964 [DEBUG] [Thread-130436] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:48:00.964 [DEBUG] [Thread-130436] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T15:48:00.964 [DEBUG] [Thread-130436] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:48:00.978 [INFO] [Thread-130436] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:48:00.979 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T15:48:00.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:48:01.806 [DEBUG] [Thread-130436] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:48:01.807 [DEBUG] [Thread-130436] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:48:01.854 [DEBUG] [Thread-130436] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:48:01.854 [DEBUG] [Thread-130436] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:48:01.863 [DEBUG] [Thread-130436] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:48:01.871 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:48:01.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T15:48:01.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T15:48:01.887 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:48:01.887 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:48:01.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:48:01.895 [DEBUG] [Thread-130436] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:48:10.427 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:48:10.428 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:48:14.591 [DEBUG] [Thread-130438 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:48:22.310 [DEBUG] [Thread-130439 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:48:29.642 [DEBUG] [Thread-130440 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:48:31.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T15:48:31.918 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T15:48:31.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T15:48:32.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 15, 47, 58), 32.68, 11.26, 0.0, 28.3, 26.75, 0, 0, 0, 2, 0, 0),)
2025-12-31T15:48:32.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 15:47:58
2025-12-31T15:48:32.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T15:48:32.952 [DEBUG] [Thread-130441] [transport.py] [_log()] starting thread (client mode): 0xb6bbca00
2025-12-31T15:48:32.952 [DEBUG] [Thread-130441] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:48:32.972 [DEBUG] [Thread-130441] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T15:48:32.972 [INFO] [Thread-130441] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T15:48:32.976 [DEBUG] [Thread-130441] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:48:32.976 [DEBUG] [Thread-130441] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T15:48:32.976 [DEBUG] [Thread-130441] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:48:32.976 [DEBUG] [Thread-130441] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:48:32.976 [DEBUG] [Thread-130441] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:48:32.976 [DEBUG] [Thread-130441] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:48:32.976 [DEBUG] [Thread-130441] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:48:32.976 [DEBUG] [Thread-130441] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:48:32.976 [DEBUG] [Thread-130441] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:48:32.976 [DEBUG] [Thread-130441] [transport.py] [_log()] client lang: <none>
2025-12-31T15:48:32.976 [DEBUG] [Thread-130441] [transport.py] [_log()] server lang: <none>
2025-12-31T15:48:32.976 [DEBUG] [Thread-130441] [transport.py] [_log()] kex follows: False
2025-12-31T15:48:32.976 [DEBUG] [Thread-130441] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:48:32.976 [DEBUG] [Thread-130441] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:48:32.976 [DEBUG] [Thread-130441] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:48:32.976 [DEBUG] [Thread-130441] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:48:32.976 [DEBUG] [Thread-130441] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:48:32.976 [DEBUG] [Thread-130441] [transport.py] [_log()] Compression: none
2025-12-31T15:48:32.976 [DEBUG] [Thread-130441] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:48:32.991 [DEBUG] [Thread-130441] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:48:32.991 [DEBUG] [Thread-130441] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:48:32.991 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T15:48:32.991 [DEBUG] [Thread-130441] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T15:48:32.992 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:48:32.993 [DEBUG] [Thread-130441] [transport.py] [_log()] userauth is OK
2025-12-31T15:48:32.993 [DEBUG] [Thread-130441] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:48:32.993 [DEBUG] [Thread-130441] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:48:32.993 [DEBUG] [Thread-130441] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T15:48:32.993 [DEBUG] [Thread-130441] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:48:33.005 [INFO] [Thread-130441] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:48:33.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:48:33.798 [DEBUG] [Thread-130441] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:48:33.798 [DEBUG] [Thread-130441] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:48:33.799 [DEBUG] [Thread-130441] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T15:48:33.839 [DEBUG] [Thread-130441] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:48:33.840 [DEBUG] [Thread-130441] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:48:33.842 [DEBUG] [Thread-130441] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:48:33.856 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:48:33.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T15:48:33.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T15:48:33.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T15:48:33.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:48:33.871 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T15:48:33.871 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:48:33.871 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:48:33.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T15:48:33.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.574794 -999.00  +26.00  29.33     16   -1.20 1 2 1 1 1   888    0 27.89 35.79 ----- 27.2 29.3 292.9 36.3 30.6 -21.0 30.4 -20.4 30.7 -19.4 31.2 -19.9
2025-12-31T15:48:33.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T15:48:33.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T15:48:33.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.574794
2025-12-31T15:48:33.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T15:48:33.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T15:48:33.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T15:48:33.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T15:48:33.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T15:48:33.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T15:47:58', tmtdew=32.68, humidity=11.26, cloud=0.0, wind=28.3, temperature=26.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T13:47:42.202', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T15:48:33.874 [DEBUG] [Thread-130441] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:48:33.957 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T15:48:33.971 [DEBUG] [Thread-130444] [transport.py] [_log()] starting thread (client mode): 0xb955a470
2025-12-31T15:48:33.971 [DEBUG] [Thread-130444] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:48:33.986 [DEBUG] [Thread-130444] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T15:48:33.987 [INFO] [Thread-130444] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T15:48:33.994 [DEBUG] [Thread-130444] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:48:33.994 [DEBUG] [Thread-130444] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T15:48:33.994 [DEBUG] [Thread-130444] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:48:33.994 [DEBUG] [Thread-130444] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:48:33.994 [DEBUG] [Thread-130444] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:48:33.994 [DEBUG] [Thread-130444] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:48:33.994 [DEBUG] [Thread-130444] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:48:33.994 [DEBUG] [Thread-130444] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:48:33.994 [DEBUG] [Thread-130444] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:48:33.995 [DEBUG] [Thread-130444] [transport.py] [_log()] client lang: <none>
2025-12-31T15:48:33.995 [DEBUG] [Thread-130444] [transport.py] [_log()] server lang: <none>
2025-12-31T15:48:33.995 [DEBUG] [Thread-130444] [transport.py] [_log()] kex follows: False
2025-12-31T15:48:33.995 [DEBUG] [Thread-130444] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:48:33.995 [DEBUG] [Thread-130444] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:48:33.995 [DEBUG] [Thread-130444] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:48:33.995 [DEBUG] [Thread-130444] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:48:33.995 [DEBUG] [Thread-130444] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:48:33.995 [DEBUG] [Thread-130444] [transport.py] [_log()] Compression: none
2025-12-31T15:48:33.995 [DEBUG] [Thread-130444] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:48:34.055 [DEBUG] [Thread-130444] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:48:34.055 [DEBUG] [Thread-130444] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:48:34.056 [DEBUG] [Thread-130444] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T15:48:34.056 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T15:48:34.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:48:34.110 [DEBUG] [Thread-130444] [transport.py] [_log()] userauth is OK
2025-12-31T15:48:34.111 [DEBUG] [Thread-130444] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:48:34.111 [DEBUG] [Thread-130444] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:48:34.111 [DEBUG] [Thread-130444] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T15:48:34.111 [DEBUG] [Thread-130444] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:48:34.130 [INFO] [Thread-130444] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:48:34.130 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T15:48:34.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:48:34.941 [DEBUG] [Thread-130444] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:48:34.941 [DEBUG] [Thread-130444] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:48:34.988 [DEBUG] [Thread-130444] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:48:34.988 [DEBUG] [Thread-130444] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:48:34.997 [DEBUG] [Thread-130444] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:48:35.005 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:48:35.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T15:48:35.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T15:48:35.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:48:35.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:48:35.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:48:35.029 [DEBUG] [Thread-130444] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:48:44.674 [DEBUG] [Thread-130446 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:48:59.734 [DEBUG] [Thread-130447 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:49:05.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T15:49:05.051 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T15:49:05.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-12-31T15:49:05.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 15, 49, 2), 31.84, 11.91, 0.0, 27.84, 26.38, 0, 0, 0, 2, 0, 0),)
2025-12-31T15:49:05.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 15:49:02
2025-12-31T15:49:05.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T15:49:06.033 [DEBUG] [Thread-130448] [transport.py] [_log()] starting thread (client mode): 0xb6bbcf10
2025-12-31T15:49:06.033 [DEBUG] [Thread-130448] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:49:06.054 [DEBUG] [Thread-130448] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T15:49:06.054 [INFO] [Thread-130448] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T15:49:06.057 [DEBUG] [Thread-130448] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:49:06.057 [DEBUG] [Thread-130448] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T15:49:06.057 [DEBUG] [Thread-130448] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:49:06.057 [DEBUG] [Thread-130448] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:49:06.057 [DEBUG] [Thread-130448] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:49:06.057 [DEBUG] [Thread-130448] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:49:06.057 [DEBUG] [Thread-130448] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:49:06.057 [DEBUG] [Thread-130448] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:49:06.057 [DEBUG] [Thread-130448] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:49:06.057 [DEBUG] [Thread-130448] [transport.py] [_log()] client lang: <none>
2025-12-31T15:49:06.057 [DEBUG] [Thread-130448] [transport.py] [_log()] server lang: <none>
2025-12-31T15:49:06.057 [DEBUG] [Thread-130448] [transport.py] [_log()] kex follows: False
2025-12-31T15:49:06.057 [DEBUG] [Thread-130448] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:49:06.057 [DEBUG] [Thread-130448] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:49:06.058 [DEBUG] [Thread-130448] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:49:06.058 [DEBUG] [Thread-130448] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:49:06.058 [DEBUG] [Thread-130448] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:49:06.058 [DEBUG] [Thread-130448] [transport.py] [_log()] Compression: none
2025-12-31T15:49:06.058 [DEBUG] [Thread-130448] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:49:06.079 [DEBUG] [Thread-130448] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:49:06.079 [DEBUG] [Thread-130448] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:49:06.080 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T15:49:06.080 [DEBUG] [Thread-130448] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T15:49:06.081 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:49:06.082 [DEBUG] [Thread-130448] [transport.py] [_log()] userauth is OK
2025-12-31T15:49:06.083 [DEBUG] [Thread-130448] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:49:06.083 [DEBUG] [Thread-130448] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:49:06.083 [DEBUG] [Thread-130448] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T15:49:06.083 [DEBUG] [Thread-130448] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:49:06.100 [INFO] [Thread-130448] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:49:06.101 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:49:06.748 [DEBUG] [Thread-130448] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:49:06.748 [DEBUG] [Thread-130448] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:49:06.748 [DEBUG] [Thread-130448] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T15:49:06.790 [DEBUG] [Thread-130448] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:49:06.790 [DEBUG] [Thread-130448] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:49:06.793 [DEBUG] [Thread-130448] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:49:06.806 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:49:06.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T15:49:06.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T15:49:06.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T15:49:06.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:49:06.821 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T15:49:06.822 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:49:06.822 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:49:06.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T15:49:06.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.575141 -999.00  +25.70  27.11     17   -0.70 1 2 1 1 1   888    0 27.89 38.13 ----- 26.3 27.1 299.6 31.6 30.6 -20.5 30.5 -19.7 30.7 -21.8 31.1 -19.7
2025-12-31T15:49:06.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T15:49:06.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T15:49:06.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.575141
2025-12-31T15:49:06.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T15:49:06.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T15:49:06.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T15:49:06.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T15:49:06.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T15:49:06.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T15:49:02', tmtdew=31.84, humidity=11.91, cloud=0.0, wind=27.84, temperature=26.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T13:48:12.182', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T15:49:06.825 [DEBUG] [Thread-130448] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:49:06.907 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T15:49:06.919 [DEBUG] [Thread-130451] [transport.py] [_log()] starting thread (client mode): 0xb6bbf970
2025-12-31T15:49:06.919 [DEBUG] [Thread-130451] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:49:06.939 [DEBUG] [Thread-130451] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T15:49:06.939 [INFO] [Thread-130451] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T15:49:06.947 [DEBUG] [Thread-130451] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:49:06.947 [DEBUG] [Thread-130451] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T15:49:06.947 [DEBUG] [Thread-130451] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:49:06.948 [DEBUG] [Thread-130451] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:49:06.948 [DEBUG] [Thread-130451] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:49:06.948 [DEBUG] [Thread-130451] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:49:06.948 [DEBUG] [Thread-130451] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:49:06.948 [DEBUG] [Thread-130451] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:49:06.948 [DEBUG] [Thread-130451] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:49:06.948 [DEBUG] [Thread-130451] [transport.py] [_log()] client lang: <none>
2025-12-31T15:49:06.948 [DEBUG] [Thread-130451] [transport.py] [_log()] server lang: <none>
2025-12-31T15:49:06.948 [DEBUG] [Thread-130451] [transport.py] [_log()] kex follows: False
2025-12-31T15:49:06.949 [DEBUG] [Thread-130451] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:49:06.949 [DEBUG] [Thread-130451] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:49:06.949 [DEBUG] [Thread-130451] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:49:06.949 [DEBUG] [Thread-130451] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:49:06.949 [DEBUG] [Thread-130451] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:49:06.949 [DEBUG] [Thread-130451] [transport.py] [_log()] Compression: none
2025-12-31T15:49:06.949 [DEBUG] [Thread-130451] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:49:07.008 [DEBUG] [Thread-130451] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:49:07.009 [DEBUG] [Thread-130451] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:49:07.010 [DEBUG] [Thread-130451] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T15:49:07.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T15:49:07.011 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:49:07.064 [DEBUG] [Thread-130451] [transport.py] [_log()] userauth is OK
2025-12-31T15:49:07.064 [DEBUG] [Thread-130451] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:49:07.064 [DEBUG] [Thread-130451] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:49:07.065 [DEBUG] [Thread-130451] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T15:49:07.065 [DEBUG] [Thread-130451] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:49:07.083 [INFO] [Thread-130451] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:49:07.084 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T15:49:07.085 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:49:07.914 [DEBUG] [Thread-130451] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:49:07.914 [DEBUG] [Thread-130451] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:49:07.962 [DEBUG] [Thread-130451] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:49:07.962 [DEBUG] [Thread-130451] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:49:07.972 [DEBUG] [Thread-130451] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:49:07.981 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:49:07.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T15:49:07.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-12-31T15:49:07.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:49:08.000 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:49:08.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:49:08.008 [DEBUG] [Thread-130451] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:49:10.568 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:49:10.570 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:49:14.766 [DEBUG] [Thread-130453 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:49:22.363 [DEBUG] [Thread-130454 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:49:29.803 [DEBUG] [Thread-130455 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:49:38.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T15:49:38.014 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T15:49:38.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T15:49:38.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 15, 49, 35), 31.09, 12.54, 0.0, 30.31, 26.32, 0, 0, 0, 2, 0, 0),)
2025-12-31T15:49:38.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 15:49:35
2025-12-31T15:49:38.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T15:49:39.018 [DEBUG] [Thread-130456] [transport.py] [_log()] starting thread (client mode): 0xb6b2bf40
2025-12-31T15:49:39.018 [DEBUG] [Thread-130456] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:49:39.042 [DEBUG] [Thread-130456] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T15:49:39.042 [INFO] [Thread-130456] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T15:49:39.045 [DEBUG] [Thread-130456] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:49:39.046 [DEBUG] [Thread-130456] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T15:49:39.046 [DEBUG] [Thread-130456] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:49:39.046 [DEBUG] [Thread-130456] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:49:39.046 [DEBUG] [Thread-130456] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:49:39.046 [DEBUG] [Thread-130456] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:49:39.046 [DEBUG] [Thread-130456] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:49:39.046 [DEBUG] [Thread-130456] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:49:39.046 [DEBUG] [Thread-130456] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:49:39.046 [DEBUG] [Thread-130456] [transport.py] [_log()] client lang: <none>
2025-12-31T15:49:39.046 [DEBUG] [Thread-130456] [transport.py] [_log()] server lang: <none>
2025-12-31T15:49:39.046 [DEBUG] [Thread-130456] [transport.py] [_log()] kex follows: False
2025-12-31T15:49:39.046 [DEBUG] [Thread-130456] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:49:39.046 [DEBUG] [Thread-130456] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:49:39.046 [DEBUG] [Thread-130456] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:49:39.047 [DEBUG] [Thread-130456] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:49:39.047 [DEBUG] [Thread-130456] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:49:39.047 [DEBUG] [Thread-130456] [transport.py] [_log()] Compression: none
2025-12-31T15:49:39.047 [DEBUG] [Thread-130456] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:49:39.064 [DEBUG] [Thread-130456] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:49:39.064 [DEBUG] [Thread-130456] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:49:39.064 [DEBUG] [Thread-130456] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T15:49:39.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T15:49:39.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:49:39.066 [DEBUG] [Thread-130456] [transport.py] [_log()] userauth is OK
2025-12-31T15:49:39.067 [DEBUG] [Thread-130456] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:49:39.067 [DEBUG] [Thread-130456] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:49:39.067 [DEBUG] [Thread-130456] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T15:49:39.067 [DEBUG] [Thread-130456] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:49:39.089 [INFO] [Thread-130456] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:49:39.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:49:39.791 [DEBUG] [Thread-130456] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:49:39.792 [DEBUG] [Thread-130456] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:49:39.792 [DEBUG] [Thread-130456] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T15:49:39.833 [DEBUG] [Thread-130456] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:49:39.833 [DEBUG] [Thread-130456] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:49:39.835 [DEBUG] [Thread-130456] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:49:39.849 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:49:39.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T15:49:39.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T15:49:39.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T15:49:39.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:49:39.859 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T15:49:39.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:49:39.859 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:49:39.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T15:49:39.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.575489 -999.00  +25.60  23.97     18   +0.00 1 2 1 1 1   888    0 27.51 30.08 ----- 25.6 24.0 313.4 33.5 30.8 -19.6 30.7 -18.9 30.9 -19.0 31.4 -19.1
2025-12-31T15:49:39.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T15:49:39.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T15:49:39.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.575489
2025-12-31T15:49:39.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T15:49:39.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T15:49:39.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T15:49:39.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T15:49:39.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T15:49:39.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T15:49:35', tmtdew=31.09, humidity=12.54, cloud=0.0, wind=30.31, temperature=26.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T13:48:42.250', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T15:49:39.861 [DEBUG] [Thread-130456] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:49: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-12-31T15:49:39.958 [DEBUG] [Thread-130459] [transport.py] [_log()] starting thread (client mode): 0xb6b2ab90
2025-12-31T15:49:39.958 [DEBUG] [Thread-130459] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:49:39.973 [DEBUG] [Thread-130459] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T15:49:39.973 [INFO] [Thread-130459] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T15:49:39.980 [DEBUG] [Thread-130459] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:49:39.980 [DEBUG] [Thread-130459] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T15:49:39.981 [DEBUG] [Thread-130459] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:49:39.981 [DEBUG] [Thread-130459] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:49:39.981 [DEBUG] [Thread-130459] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:49:39.981 [DEBUG] [Thread-130459] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:49:39.981 [DEBUG] [Thread-130459] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:49:39.981 [DEBUG] [Thread-130459] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:49:39.981 [DEBUG] [Thread-130459] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:49:39.981 [DEBUG] [Thread-130459] [transport.py] [_log()] client lang: <none>
2025-12-31T15:49:39.981 [DEBUG] [Thread-130459] [transport.py] [_log()] server lang: <none>
2025-12-31T15:49:39.981 [DEBUG] [Thread-130459] [transport.py] [_log()] kex follows: False
2025-12-31T15:49:39.981 [DEBUG] [Thread-130459] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:49:39.982 [DEBUG] [Thread-130459] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:49:39.982 [DEBUG] [Thread-130459] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:49:39.982 [DEBUG] [Thread-130459] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:49:39.982 [DEBUG] [Thread-130459] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:49:39.982 [DEBUG] [Thread-130459] [transport.py] [_log()] Compression: none
2025-12-31T15:49:39.982 [DEBUG] [Thread-130459] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:49:40.040 [DEBUG] [Thread-130459] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:49:40.040 [DEBUG] [Thread-130459] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:49:40.041 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T15:49:40.041 [DEBUG] [Thread-130459] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T15:49:40.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:49:40.096 [DEBUG] [Thread-130459] [transport.py] [_log()] userauth is OK
2025-12-31T15:49:40.096 [DEBUG] [Thread-130459] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:49:40.096 [DEBUG] [Thread-130459] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:49:40.096 [DEBUG] [Thread-130459] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T15:49:40.096 [DEBUG] [Thread-130459] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:49:40.115 [INFO] [Thread-130459] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:49:40.116 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T15:49:40.116 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:49:40.940 [DEBUG] [Thread-130459] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:49:40.941 [DEBUG] [Thread-130459] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:49:40.989 [DEBUG] [Thread-130459] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:49:40.989 [DEBUG] [Thread-130459] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:49:40.998 [DEBUG] [Thread-130459] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:49:41.006 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:49:41.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-12-31T15:49:41.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-12-31T15:49:41.023 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:49:41.023 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:49:41.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:49:41.031 [DEBUG] [Thread-130459] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:49:44.841 [DEBUG] [Thread-130461 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:49:59.888 [DEBUG] [Thread-130462 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:50:10.708 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:50:10.710 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:50:11.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T15:50:11.039 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T15:50:11.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-12-31T15:50:11.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 15, 50, 7), 30.97, 12.64, 0.0, 35.02, 26.28, 0, 0, 0, 2, 0, 0),)
2025-12-31T15:50:11.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 15:50:07
2025-12-31T15:50:11.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T15:50:12.016 [DEBUG] [Thread-130463] [transport.py] [_log()] starting thread (client mode): 0xb6ba18a0
2025-12-31T15:50:12.016 [DEBUG] [Thread-130463] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:50:12.037 [DEBUG] [Thread-130463] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T15:50:12.037 [INFO] [Thread-130463] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T15:50:12.040 [DEBUG] [Thread-130463] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:50:12.040 [DEBUG] [Thread-130463] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T15:50:12.040 [DEBUG] [Thread-130463] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:50:12.040 [DEBUG] [Thread-130463] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:50:12.040 [DEBUG] [Thread-130463] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:50:12.040 [DEBUG] [Thread-130463] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:50:12.040 [DEBUG] [Thread-130463] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:50:12.040 [DEBUG] [Thread-130463] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:50:12.040 [DEBUG] [Thread-130463] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:50:12.040 [DEBUG] [Thread-130463] [transport.py] [_log()] client lang: <none>
2025-12-31T15:50:12.040 [DEBUG] [Thread-130463] [transport.py] [_log()] server lang: <none>
2025-12-31T15:50:12.040 [DEBUG] [Thread-130463] [transport.py] [_log()] kex follows: False
2025-12-31T15:50:12.040 [DEBUG] [Thread-130463] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:50:12.040 [DEBUG] [Thread-130463] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:50:12.040 [DEBUG] [Thread-130463] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:50:12.040 [DEBUG] [Thread-130463] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:50:12.040 [DEBUG] [Thread-130463] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:50:12.040 [DEBUG] [Thread-130463] [transport.py] [_log()] Compression: none
2025-12-31T15:50:12.040 [DEBUG] [Thread-130463] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:50:12.058 [DEBUG] [Thread-130463] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:50:12.059 [DEBUG] [Thread-130463] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:50:12.059 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T15:50:12.060 [DEBUG] [Thread-130463] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T15:50:12.061 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:50:12.062 [DEBUG] [Thread-130463] [transport.py] [_log()] userauth is OK
2025-12-31T15:50:12.062 [DEBUG] [Thread-130463] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:50:12.062 [DEBUG] [Thread-130463] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:50:12.062 [DEBUG] [Thread-130463] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T15:50:12.062 [DEBUG] [Thread-130463] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:50:12.098 [INFO] [Thread-130463] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:50:12.100 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:50:14.927 [DEBUG] [Thread-130465 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:50:15.291 [DEBUG] [Thread-130463] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:50:15.292 [DEBUG] [Thread-130463] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:50:15.293 [DEBUG] [Thread-130463] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T15:50:15.332 [DEBUG] [Thread-130463] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:50:15.333 [DEBUG] [Thread-130463] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:50:15.336 [DEBUG] [Thread-130463] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:50:15.348 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:50:15.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T15:50:15.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T15:50:15.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T15:50:15.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:50:15.367 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T15:50:15.367 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:50:15.367 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:50:15.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T15:50:15.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.575836 -999.00  +25.70  40.23     18   +0.00 1 2 2 1 1   888    0 27.62 21.62 ----- 35.2 40.2 297.8 45.2 30.9 -20.9 30.7 -20.7 31.1 -18.4 31.6 -19.3
2025-12-31T15:50:15.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T15:50:15.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T15:50:15.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.575836
2025-12-31T15:50:15.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T15:50:15.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T15:50:15.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T15:50:15.370 [DEBUG] [Thread-130463] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:50:15.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T15:50:15.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T15:50:15.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T15:50:07', tmtdew=30.97, humidity=12.64, cloud=0.0, wind=35.02, temperature=26.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T13:49:12.230', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T15:50:15.457 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T15:50:15.468 [DEBUG] [Thread-130467] [transport.py] [_log()] starting thread (client mode): 0xb6bb8eb0
2025-12-31T15:50:15.468 [DEBUG] [Thread-130467] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:50:15.483 [DEBUG] [Thread-130467] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T15:50:15.483 [INFO] [Thread-130467] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T15:50:15.491 [DEBUG] [Thread-130467] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:50:15.491 [DEBUG] [Thread-130467] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T15:50:15.491 [DEBUG] [Thread-130467] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:50:15.491 [DEBUG] [Thread-130467] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:50:15.491 [DEBUG] [Thread-130467] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:50:15.491 [DEBUG] [Thread-130467] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:50:15.491 [DEBUG] [Thread-130467] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:50:15.492 [DEBUG] [Thread-130467] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:50:15.492 [DEBUG] [Thread-130467] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:50:15.492 [DEBUG] [Thread-130467] [transport.py] [_log()] client lang: <none>
2025-12-31T15:50:15.492 [DEBUG] [Thread-130467] [transport.py] [_log()] server lang: <none>
2025-12-31T15:50:15.492 [DEBUG] [Thread-130467] [transport.py] [_log()] kex follows: False
2025-12-31T15:50:15.492 [DEBUG] [Thread-130467] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:50:15.492 [DEBUG] [Thread-130467] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:50:15.492 [DEBUG] [Thread-130467] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:50:15.493 [DEBUG] [Thread-130467] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:50:15.493 [DEBUG] [Thread-130467] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:50:15.493 [DEBUG] [Thread-130467] [transport.py] [_log()] Compression: none
2025-12-31T15:50:15.493 [DEBUG] [Thread-130467] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:50:15.551 [DEBUG] [Thread-130467] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:50:15.551 [DEBUG] [Thread-130467] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:50:15.552 [DEBUG] [Thread-130467] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T15:50:15.552 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T15:50:15.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:50:15.609 [DEBUG] [Thread-130467] [transport.py] [_log()] userauth is OK
2025-12-31T15:50:15.609 [DEBUG] [Thread-130467] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:50:15.609 [DEBUG] [Thread-130467] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:50:15.609 [DEBUG] [Thread-130467] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T15:50:15.609 [DEBUG] [Thread-130467] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:50:15.627 [INFO] [Thread-130467] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:50:15.627 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T15:50:15.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:50:16.459 [DEBUG] [Thread-130467] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:50:16.459 [DEBUG] [Thread-130467] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:50:16.507 [DEBUG] [Thread-130467] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:50:16.508 [DEBUG] [Thread-130467] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:50:16.517 [DEBUG] [Thread-130467] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:50:16.525 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:50:16.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T15:50:16.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T15:50:16.542 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:50:16.542 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:50:16.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:50:16.550 [DEBUG] [Thread-130467] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:50:22.418 [DEBUG] [Thread-130469 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:50:29.964 [DEBUG] [Thread-130470 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:50:45.022 [DEBUG] [Thread-130471 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:50:46.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T15:50:46.573 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T15:50:46.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T15:50:47.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 15, 50, 39), 30.79, 12.65, 0.0, 33.49, 26.13, 0, 0, 0, 2, 0, 0),)
2025-12-31T15:50:47.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 15:50:39
2025-12-31T15:50:47.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T15:50:47.562 [DEBUG] [Thread-130472] [transport.py] [_log()] starting thread (client mode): 0xb6bb33a0
2025-12-31T15:50:47.562 [DEBUG] [Thread-130472] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:50:47.582 [DEBUG] [Thread-130472] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T15:50:47.582 [INFO] [Thread-130472] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T15:50:47.585 [DEBUG] [Thread-130472] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:50:47.585 [DEBUG] [Thread-130472] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T15:50:47.585 [DEBUG] [Thread-130472] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:50:47.585 [DEBUG] [Thread-130472] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:50:47.585 [DEBUG] [Thread-130472] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:50:47.585 [DEBUG] [Thread-130472] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:50:47.585 [DEBUG] [Thread-130472] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:50:47.585 [DEBUG] [Thread-130472] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:50:47.585 [DEBUG] [Thread-130472] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:50:47.585 [DEBUG] [Thread-130472] [transport.py] [_log()] client lang: <none>
2025-12-31T15:50:47.585 [DEBUG] [Thread-130472] [transport.py] [_log()] server lang: <none>
2025-12-31T15:50:47.585 [DEBUG] [Thread-130472] [transport.py] [_log()] kex follows: False
2025-12-31T15:50:47.585 [DEBUG] [Thread-130472] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:50:47.585 [DEBUG] [Thread-130472] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:50:47.585 [DEBUG] [Thread-130472] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:50:47.585 [DEBUG] [Thread-130472] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:50:47.585 [DEBUG] [Thread-130472] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:50:47.585 [DEBUG] [Thread-130472] [transport.py] [_log()] Compression: none
2025-12-31T15:50:47.585 [DEBUG] [Thread-130472] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:50:47.604 [DEBUG] [Thread-130472] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:50:47.604 [DEBUG] [Thread-130472] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:50:47.605 [DEBUG] [Thread-130472] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T15:50:47.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T15:50:47.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:50:47.606 [DEBUG] [Thread-130472] [transport.py] [_log()] userauth is OK
2025-12-31T15:50:47.607 [DEBUG] [Thread-130472] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:50:47.607 [DEBUG] [Thread-130472] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:50:47.607 [DEBUG] [Thread-130472] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T15:50:47.607 [DEBUG] [Thread-130472] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:50:47.639 [INFO] [Thread-130472] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:50:47.640 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:50:48.247 [DEBUG] [Thread-130472] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:50:48.247 [DEBUG] [Thread-130472] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:50:48.247 [DEBUG] [Thread-130472] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T15:50:48.288 [DEBUG] [Thread-130472] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:50:48.288 [DEBUG] [Thread-130472] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:50:48.292 [DEBUG] [Thread-130472] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:50:48.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:50:48.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T15:50:48.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T15:50:48.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T15:50:48.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:50:48.313 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T15:50:48.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:50:48.313 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:50:48.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T15:50:48.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.576530 -999.00  +25.80  28.26     18   -0.20 1 1 1 1 1   888    0 27.53 18.23 ----- 28.7 28.3 296.5 35.5 30.5 -24.5 30.3 -23.2 30.6 -28.0 31.1 -24.3
2025-12-31T15:50:48.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T15:50:48.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T15:50:48.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.576530
2025-12-31T15:50:48.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T15:50:48.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T15:50:48.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T15:50:48.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T15:50:48.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T15:50:48.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T15:50:39', tmtdew=30.79, humidity=12.65, cloud=0.0, wind=33.49, temperature=26.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T13:50:12.192', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T15:50:48.316 [DEBUG] [Thread-130472] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:50: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-12-31T15:50:48.410 [DEBUG] [Thread-130475] [transport.py] [_log()] starting thread (client mode): 0xb6b291e0
2025-12-31T15:50:48.411 [DEBUG] [Thread-130475] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:50:48.425 [DEBUG] [Thread-130475] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T15:50:48.425 [INFO] [Thread-130475] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T15:50:48.433 [DEBUG] [Thread-130475] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:50:48.433 [DEBUG] [Thread-130475] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T15:50:48.433 [DEBUG] [Thread-130475] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:50:48.433 [DEBUG] [Thread-130475] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:50:48.433 [DEBUG] [Thread-130475] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:50:48.433 [DEBUG] [Thread-130475] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:50:48.433 [DEBUG] [Thread-130475] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:50:48.433 [DEBUG] [Thread-130475] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:50:48.433 [DEBUG] [Thread-130475] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:50:48.434 [DEBUG] [Thread-130475] [transport.py] [_log()] client lang: <none>
2025-12-31T15:50:48.434 [DEBUG] [Thread-130475] [transport.py] [_log()] server lang: <none>
2025-12-31T15:50:48.434 [DEBUG] [Thread-130475] [transport.py] [_log()] kex follows: False
2025-12-31T15:50:48.434 [DEBUG] [Thread-130475] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:50:48.434 [DEBUG] [Thread-130475] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:50:48.434 [DEBUG] [Thread-130475] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:50:48.434 [DEBUG] [Thread-130475] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:50:48.434 [DEBUG] [Thread-130475] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:50:48.434 [DEBUG] [Thread-130475] [transport.py] [_log()] Compression: none
2025-12-31T15:50:48.434 [DEBUG] [Thread-130475] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:50:48.491 [DEBUG] [Thread-130475] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:50:48.492 [DEBUG] [Thread-130475] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:50:48.493 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T15:50:48.493 [DEBUG] [Thread-130475] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T15:50:48.494 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:50:48.547 [DEBUG] [Thread-130475] [transport.py] [_log()] userauth is OK
2025-12-31T15:50:48.547 [DEBUG] [Thread-130475] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:50:48.548 [DEBUG] [Thread-130475] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:50:48.548 [DEBUG] [Thread-130475] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T15:50:48.548 [DEBUG] [Thread-130475] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:50:48.566 [INFO] [Thread-130475] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:50:48.566 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T15:50:48.567 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:50:49.410 [DEBUG] [Thread-130475] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:50:49.410 [DEBUG] [Thread-130475] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:50:49.458 [DEBUG] [Thread-130475] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:50:49.458 [DEBUG] [Thread-130475] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:50:49.467 [DEBUG] [Thread-130475] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:50:49.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:50:49.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T15:50:49.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T15:50:49.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:50:49.495 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:50:49.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:50:49.503 [DEBUG] [Thread-130475] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:51:00.060 [DEBUG] [Thread-130477 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:51:10.852 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:51:10.853 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:51:15.106 [DEBUG] [Thread-130478 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:51:19.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T15:51:19.526 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T15:51:19.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T15:51:20.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 15, 51, 11), 30.77, 12.66, 0.0, 31.43, 26.04, 0, 0, 0, 2, 0, 0),)
2025-12-31T15:51:20.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 15:51:11
2025-12-31T15:51:20.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T15:51:20.489 [DEBUG] [Thread-130479] [transport.py] [_log()] starting thread (client mode): 0xb95f1b10
2025-12-31T15:51:20.490 [DEBUG] [Thread-130479] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:51:20.504 [DEBUG] [Thread-130479] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T15:51:20.504 [INFO] [Thread-130479] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T15:51:20.506 [DEBUG] [Thread-130479] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:51:20.506 [DEBUG] [Thread-130479] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T15:51:20.506 [DEBUG] [Thread-130479] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:51:20.506 [DEBUG] [Thread-130479] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:51:20.506 [DEBUG] [Thread-130479] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:51:20.506 [DEBUG] [Thread-130479] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:51:20.506 [DEBUG] [Thread-130479] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:51:20.506 [DEBUG] [Thread-130479] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:51:20.506 [DEBUG] [Thread-130479] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:51:20.506 [DEBUG] [Thread-130479] [transport.py] [_log()] client lang: <none>
2025-12-31T15:51:20.506 [DEBUG] [Thread-130479] [transport.py] [_log()] server lang: <none>
2025-12-31T15:51:20.506 [DEBUG] [Thread-130479] [transport.py] [_log()] kex follows: False
2025-12-31T15:51:20.506 [DEBUG] [Thread-130479] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:51:20.506 [DEBUG] [Thread-130479] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:51:20.506 [DEBUG] [Thread-130479] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:51:20.506 [DEBUG] [Thread-130479] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:51:20.506 [DEBUG] [Thread-130479] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:51:20.507 [DEBUG] [Thread-130479] [transport.py] [_log()] Compression: none
2025-12-31T15:51:20.507 [DEBUG] [Thread-130479] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:51:20.524 [DEBUG] [Thread-130479] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:51:20.525 [DEBUG] [Thread-130479] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:51:20.526 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T15:51:20.527 [DEBUG] [Thread-130479] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T15:51:20.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:51:20.528 [DEBUG] [Thread-130479] [transport.py] [_log()] userauth is OK
2025-12-31T15:51:20.528 [DEBUG] [Thread-130479] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:51:20.528 [DEBUG] [Thread-130479] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:51:20.528 [DEBUG] [Thread-130479] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T15:51:20.528 [DEBUG] [Thread-130479] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:51:20.555 [INFO] [Thread-130479] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:51:20.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:51:21.309 [DEBUG] [Thread-130479] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:51:21.309 [DEBUG] [Thread-130479] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:51:21.310 [DEBUG] [Thread-130479] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T15:51:21.350 [DEBUG] [Thread-130479] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:51:21.350 [DEBUG] [Thread-130479] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:51:21.353 [DEBUG] [Thread-130479] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:51:21.361 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:51:21.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T15:51:21.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T15:51:21.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T15:51:21.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:51:21.371 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T15:51:21.372 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:51:21.372 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:51:21.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T15:51:21.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.576877 -999.00  +25.60  30.21     18   +0.00 1 1 2 1 1   888    0 26.93 18.28 ----- 27.4 30.2 279.2 36.6 30.2 -26.0 30.1 -23.3 30.4 -24.1 30.8 -24.7
2025-12-31T15:51:21.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T15:51:21.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T15:51:21.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.576877
2025-12-31T15:51:21.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T15:51:21.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T15:51:21.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T15:51:21.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T15:51:21.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T15:51:21.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T15:51:11', tmtdew=30.77, humidity=12.66, cloud=0.0, wind=31.43, temperature=26.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T13:50:42.173', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T15:51:21.375 [DEBUG] [Thread-130479] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:51:21.458 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T15:51:21.469 [DEBUG] [Thread-130482] [transport.py] [_log()] starting thread (client mode): 0xb95f3430
2025-12-31T15:51:21.470 [DEBUG] [Thread-130482] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:51:21.484 [DEBUG] [Thread-130482] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T15:51:21.484 [INFO] [Thread-130482] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T15:51:21.492 [DEBUG] [Thread-130482] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:51:21.493 [DEBUG] [Thread-130482] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T15:51:21.493 [DEBUG] [Thread-130482] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:51:21.493 [DEBUG] [Thread-130482] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:51:21.493 [DEBUG] [Thread-130482] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:51:21.493 [DEBUG] [Thread-130482] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:51:21.493 [DEBUG] [Thread-130482] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:51:21.493 [DEBUG] [Thread-130482] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:51:21.493 [DEBUG] [Thread-130482] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:51:21.493 [DEBUG] [Thread-130482] [transport.py] [_log()] client lang: <none>
2025-12-31T15:51:21.494 [DEBUG] [Thread-130482] [transport.py] [_log()] server lang: <none>
2025-12-31T15:51:21.494 [DEBUG] [Thread-130482] [transport.py] [_log()] kex follows: False
2025-12-31T15:51:21.494 [DEBUG] [Thread-130482] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:51:21.494 [DEBUG] [Thread-130482] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:51:21.494 [DEBUG] [Thread-130482] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:51:21.494 [DEBUG] [Thread-130482] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:51:21.494 [DEBUG] [Thread-130482] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:51:21.495 [DEBUG] [Thread-130482] [transport.py] [_log()] Compression: none
2025-12-31T15:51:21.495 [DEBUG] [Thread-130482] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:51:21.556 [DEBUG] [Thread-130482] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:51:21.556 [DEBUG] [Thread-130482] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:51:21.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T15:51:21.558 [DEBUG] [Thread-130482] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T15:51:21.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:51:21.612 [DEBUG] [Thread-130482] [transport.py] [_log()] userauth is OK
2025-12-31T15:51:21.613 [DEBUG] [Thread-130482] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:51:21.613 [DEBUG] [Thread-130482] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:51:21.613 [DEBUG] [Thread-130482] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T15:51:21.613 [DEBUG] [Thread-130482] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:51:21.631 [INFO] [Thread-130482] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:51:21.632 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T15:51:21.632 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:51:22.441 [DEBUG] [Thread-130482] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:51:22.441 [DEBUG] [Thread-130482] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:51:22.458 [DEBUG] [Thread-130484 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:51:22.490 [DEBUG] [Thread-130482] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:51:22.490 [DEBUG] [Thread-130482] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:51:22.499 [DEBUG] [Thread-130482] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:51:22.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:51:22.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T15:51:22.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T15:51:22.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:51:22.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:51:22.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:51:22.536 [DEBUG] [Thread-130482] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:51:30.139 [DEBUG] [Thread-130485 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:51:45.191 [DEBUG] [Thread-130486 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:51:52.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T15:51:52.558 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T15:51:52.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-12-31T15:51:53.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 15, 51, 43), 30.44, 13.22, 0.0, 23.04, 25.9, 0, 0, 0, 2, 0, 0),)
2025-12-31T15:51:53.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 15:51:43
2025-12-31T15:51:53.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T15:51:53.556 [DEBUG] [Thread-130487] [transport.py] [_log()] starting thread (client mode): 0xb6ba0cd0
2025-12-31T15:51:53.556 [DEBUG] [Thread-130487] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:51:53.576 [DEBUG] [Thread-130487] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T15:51:53.576 [INFO] [Thread-130487] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T15:51:53.580 [DEBUG] [Thread-130487] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:51:53.580 [DEBUG] [Thread-130487] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T15:51:53.580 [DEBUG] [Thread-130487] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:51:53.580 [DEBUG] [Thread-130487] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:51:53.580 [DEBUG] [Thread-130487] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:51:53.580 [DEBUG] [Thread-130487] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:51:53.580 [DEBUG] [Thread-130487] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:51:53.580 [DEBUG] [Thread-130487] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:51:53.580 [DEBUG] [Thread-130487] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:51:53.580 [DEBUG] [Thread-130487] [transport.py] [_log()] client lang: <none>
2025-12-31T15:51:53.580 [DEBUG] [Thread-130487] [transport.py] [_log()] server lang: <none>
2025-12-31T15:51:53.580 [DEBUG] [Thread-130487] [transport.py] [_log()] kex follows: False
2025-12-31T15:51:53.580 [DEBUG] [Thread-130487] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:51:53.580 [DEBUG] [Thread-130487] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:51:53.580 [DEBUG] [Thread-130487] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:51:53.580 [DEBUG] [Thread-130487] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:51:53.580 [DEBUG] [Thread-130487] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:51:53.580 [DEBUG] [Thread-130487] [transport.py] [_log()] Compression: none
2025-12-31T15:51:53.580 [DEBUG] [Thread-130487] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:51:53.597 [DEBUG] [Thread-130487] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:51:53.597 [DEBUG] [Thread-130487] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:51:53.597 [DEBUG] [Thread-130487] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T15:51:53.597 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T15:51:53.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:51:53.599 [DEBUG] [Thread-130487] [transport.py] [_log()] userauth is OK
2025-12-31T15:51:53.599 [DEBUG] [Thread-130487] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:51:53.599 [DEBUG] [Thread-130487] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:51:53.599 [DEBUG] [Thread-130487] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T15:51:53.599 [DEBUG] [Thread-130487] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:51:53.609 [INFO] [Thread-130487] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:51:53.609 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:51:54.215 [DEBUG] [Thread-130487] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:51:54.215 [DEBUG] [Thread-130487] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:51:54.215 [DEBUG] [Thread-130487] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T15:51:54.257 [DEBUG] [Thread-130487] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:51:54.257 [DEBUG] [Thread-130487] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:51:54.259 [DEBUG] [Thread-130487] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:51:54.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:51:54.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T15:51:54.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T15:51:54.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T15:51:54.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:51:54.280 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T15:51:54.280 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:51:54.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:51:54.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T15:51:54.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.577225 -999.00  +24.90  23.87     19   +0.00 1 1 1 1 1   888    0 26.89 12.51 ----- 24.5 23.9 282.4 29.6 29.9 -26.1 29.9 -23.2 30.0 -24.0 30.4 -24.3
2025-12-31T15:51:54.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T15:51:54.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T15:51:54.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.577225
2025-12-31T15:51:54.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T15:51:54.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T15:51:54.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T15:51:54.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T15:51:54.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T15:51:54.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T15:51:43', tmtdew=30.44, humidity=13.22, cloud=0.0, wind=23.04, temperature=25.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T13:51:12.240', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T15:51:54.281 [DEBUG] [Thread-130487] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:51:54.355 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T15:51:54.367 [DEBUG] [Thread-130490] [transport.py] [_log()] starting thread (client mode): 0xb6b29c00
2025-12-31T15:51:54.367 [DEBUG] [Thread-130490] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:51:54.382 [DEBUG] [Thread-130490] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T15:51:54.382 [INFO] [Thread-130490] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T15:51:54.394 [DEBUG] [Thread-130490] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:51:54.394 [DEBUG] [Thread-130490] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T15:51:54.394 [DEBUG] [Thread-130490] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:51:54.394 [DEBUG] [Thread-130490] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:51:54.394 [DEBUG] [Thread-130490] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:51:54.394 [DEBUG] [Thread-130490] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:51:54.394 [DEBUG] [Thread-130490] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:51:54.394 [DEBUG] [Thread-130490] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:51:54.394 [DEBUG] [Thread-130490] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:51:54.394 [DEBUG] [Thread-130490] [transport.py] [_log()] client lang: <none>
2025-12-31T15:51:54.394 [DEBUG] [Thread-130490] [transport.py] [_log()] server lang: <none>
2025-12-31T15:51:54.394 [DEBUG] [Thread-130490] [transport.py] [_log()] kex follows: False
2025-12-31T15:51:54.394 [DEBUG] [Thread-130490] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:51:54.394 [DEBUG] [Thread-130490] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:51:54.394 [DEBUG] [Thread-130490] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:51:54.394 [DEBUG] [Thread-130490] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:51:54.394 [DEBUG] [Thread-130490] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:51:54.394 [DEBUG] [Thread-130490] [transport.py] [_log()] Compression: none
2025-12-31T15:51:54.394 [DEBUG] [Thread-130490] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:51:54.448 [DEBUG] [Thread-130490] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:51:54.448 [DEBUG] [Thread-130490] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:51:54.448 [DEBUG] [Thread-130490] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T15:51:54.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T15:51:54.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:51:54.504 [DEBUG] [Thread-130490] [transport.py] [_log()] userauth is OK
2025-12-31T15:51:54.504 [DEBUG] [Thread-130490] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:51:54.505 [DEBUG] [Thread-130490] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:51:54.505 [DEBUG] [Thread-130490] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T15:51:54.505 [DEBUG] [Thread-130490] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:51:54.522 [INFO] [Thread-130490] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:51:54.522 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T15:51:54.523 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:51:55.363 [DEBUG] [Thread-130490] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:51:55.363 [DEBUG] [Thread-130490] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:51:55.410 [DEBUG] [Thread-130490] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:51:55.410 [DEBUG] [Thread-130490] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:51:55.418 [DEBUG] [Thread-130490] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:51:55.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:51:55.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T15:51:55.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T15:51:55.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:51:55.442 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:51:55.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:51:55.450 [DEBUG] [Thread-130490] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:52:00.218 [DEBUG] [Thread-130492 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:52:10.992 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:52:10.994 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:52:15.270 [DEBUG] [Thread-130493 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:52:22.491 [DEBUG] [Thread-130494 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:52:25.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T15:52:25.472 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T15:52:25.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T15:52:26.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 15, 52, 15), 30.44, 13.24, 0.0, 20.75, 25.97, 0, 0, 0, 2, 0, 0),)
2025-12-31T15:52:26.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 15:52:15
2025-12-31T15:52:26.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T15:52:26.460 [DEBUG] [Thread-130495] [transport.py] [_log()] starting thread (client mode): 0xb6b62440
2025-12-31T15:52:26.460 [DEBUG] [Thread-130495] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:52:26.479 [DEBUG] [Thread-130495] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T15:52:26.480 [INFO] [Thread-130495] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T15:52:26.484 [DEBUG] [Thread-130495] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:52:26.484 [DEBUG] [Thread-130495] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T15:52:26.484 [DEBUG] [Thread-130495] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:52:26.484 [DEBUG] [Thread-130495] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:52:26.484 [DEBUG] [Thread-130495] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:52:26.484 [DEBUG] [Thread-130495] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:52:26.484 [DEBUG] [Thread-130495] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:52:26.484 [DEBUG] [Thread-130495] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:52:26.484 [DEBUG] [Thread-130495] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:52:26.484 [DEBUG] [Thread-130495] [transport.py] [_log()] client lang: <none>
2025-12-31T15:52:26.484 [DEBUG] [Thread-130495] [transport.py] [_log()] server lang: <none>
2025-12-31T15:52:26.484 [DEBUG] [Thread-130495] [transport.py] [_log()] kex follows: False
2025-12-31T15:52:26.484 [DEBUG] [Thread-130495] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:52:26.484 [DEBUG] [Thread-130495] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:52:26.485 [DEBUG] [Thread-130495] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:52:26.485 [DEBUG] [Thread-130495] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:52:26.485 [DEBUG] [Thread-130495] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:52:26.485 [DEBUG] [Thread-130495] [transport.py] [_log()] Compression: none
2025-12-31T15:52:26.485 [DEBUG] [Thread-130495] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:52:26.502 [DEBUG] [Thread-130495] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:52:26.503 [DEBUG] [Thread-130495] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:52:26.503 [DEBUG] [Thread-130495] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T15:52:26.503 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T15:52:26.504 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:52:26.505 [DEBUG] [Thread-130495] [transport.py] [_log()] userauth is OK
2025-12-31T15:52:26.506 [DEBUG] [Thread-130495] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:52:26.506 [DEBUG] [Thread-130495] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:52:26.506 [DEBUG] [Thread-130495] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T15:52:26.506 [DEBUG] [Thread-130495] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:52:26.522 [INFO] [Thread-130495] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:52:26.523 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:52:27.297 [DEBUG] [Thread-130495] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:52:27.298 [DEBUG] [Thread-130495] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:52:27.298 [DEBUG] [Thread-130495] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T15:52:27.339 [DEBUG] [Thread-130495] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:52:27.339 [DEBUG] [Thread-130495] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:52:27.343 [DEBUG] [Thread-130495] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:52:27.356 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:52:27.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T15:52:27.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T15:52:27.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T15:52:27.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:52:27.368 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T15:52:27.368 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:52:27.369 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:52:27.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T15:52:27.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.577572 -999.00  +24.80  19.46     19   +0.00 1 1 1 1 1   888    0 26.65 3.45 ----- 16.2 19.5 278.8 29.9 29.8 -24.4 29.8 -23.2 29.4 -24.3 30.1 -22.7
2025-12-31T15:52:27.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T15:52:27.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T15:52:27.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.577572
2025-12-31T15:52:27.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T15:52:27.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T15:52:27.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T15:52:27.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T15:52:27.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T15:52:27.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T15:52:15', tmtdew=30.44, humidity=13.24, cloud=0.0, wind=20.75, temperature=25.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T13:51:42.221', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T15:52:27.371 [DEBUG] [Thread-130495] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:52:27.459 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T15:52:27.471 [DEBUG] [Thread-130498] [transport.py] [_log()] starting thread (client mode): 0xb6b63cd0
2025-12-31T15:52:27.471 [DEBUG] [Thread-130498] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:52:27.486 [DEBUG] [Thread-130498] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T15:52:27.487 [INFO] [Thread-130498] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T15:52:27.494 [DEBUG] [Thread-130498] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:52:27.494 [DEBUG] [Thread-130498] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T15:52:27.494 [DEBUG] [Thread-130498] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:52:27.495 [DEBUG] [Thread-130498] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:52:27.495 [DEBUG] [Thread-130498] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:52:27.495 [DEBUG] [Thread-130498] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:52:27.495 [DEBUG] [Thread-130498] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:52:27.495 [DEBUG] [Thread-130498] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:52:27.495 [DEBUG] [Thread-130498] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:52:27.495 [DEBUG] [Thread-130498] [transport.py] [_log()] client lang: <none>
2025-12-31T15:52:27.495 [DEBUG] [Thread-130498] [transport.py] [_log()] server lang: <none>
2025-12-31T15:52:27.495 [DEBUG] [Thread-130498] [transport.py] [_log()] kex follows: False
2025-12-31T15:52:27.495 [DEBUG] [Thread-130498] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:52:27.496 [DEBUG] [Thread-130498] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:52:27.496 [DEBUG] [Thread-130498] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:52:27.496 [DEBUG] [Thread-130498] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:52:27.496 [DEBUG] [Thread-130498] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:52:27.496 [DEBUG] [Thread-130498] [transport.py] [_log()] Compression: none
2025-12-31T15:52:27.496 [DEBUG] [Thread-130498] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:52:27.558 [DEBUG] [Thread-130498] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:52:27.559 [DEBUG] [Thread-130498] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:52:27.560 [DEBUG] [Thread-130498] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T15:52:27.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T15:52:27.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:52:27.614 [DEBUG] [Thread-130498] [transport.py] [_log()] userauth is OK
2025-12-31T15:52:27.614 [DEBUG] [Thread-130498] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:52:27.615 [DEBUG] [Thread-130498] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:52:27.615 [DEBUG] [Thread-130498] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T15:52:27.615 [DEBUG] [Thread-130498] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:52:27.633 [INFO] [Thread-130498] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:52:27.633 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T15:52:27.634 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:52:28.470 [DEBUG] [Thread-130498] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:52:28.470 [DEBUG] [Thread-130498] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:52:28.518 [DEBUG] [Thread-130498] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:52:28.518 [DEBUG] [Thread-130498] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:52:28.526 [DEBUG] [Thread-130498] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:52:28.533 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:52:28.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T15:52:28.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T15:52:28.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:52:28.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:52:28.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:52:28.557 [DEBUG] [Thread-130498] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:52:30.303 [DEBUG] [Thread-130500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:52:45.345 [DEBUG] [Thread-130501 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:52:58.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T15:52:58.580 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T15:52:58.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T15:52:59.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 15, 52, 47), 30.18, 13.35, 0.0, 24.28, 25.54, 0, 0, 0, 2, 0, 0),)
2025-12-31T15:52:59.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 15:52:47
2025-12-31T15:52:59.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T15:52:59.553 [DEBUG] [Thread-130502] [transport.py] [_log()] starting thread (client mode): 0xb95f2590
2025-12-31T15:52:59.553 [DEBUG] [Thread-130502] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:52:59.573 [DEBUG] [Thread-130502] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T15:52:59.573 [INFO] [Thread-130502] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T15:52:59.576 [DEBUG] [Thread-130502] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:52:59.577 [DEBUG] [Thread-130502] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T15:52:59.577 [DEBUG] [Thread-130502] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:52:59.577 [DEBUG] [Thread-130502] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:52:59.577 [DEBUG] [Thread-130502] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:52:59.577 [DEBUG] [Thread-130502] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:52:59.577 [DEBUG] [Thread-130502] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:52:59.577 [DEBUG] [Thread-130502] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:52:59.577 [DEBUG] [Thread-130502] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:52:59.577 [DEBUG] [Thread-130502] [transport.py] [_log()] client lang: <none>
2025-12-31T15:52:59.577 [DEBUG] [Thread-130502] [transport.py] [_log()] server lang: <none>
2025-12-31T15:52:59.577 [DEBUG] [Thread-130502] [transport.py] [_log()] kex follows: False
2025-12-31T15:52:59.577 [DEBUG] [Thread-130502] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:52:59.577 [DEBUG] [Thread-130502] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:52:59.577 [DEBUG] [Thread-130502] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:52:59.578 [DEBUG] [Thread-130502] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:52:59.578 [DEBUG] [Thread-130502] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:52:59.578 [DEBUG] [Thread-130502] [transport.py] [_log()] Compression: none
2025-12-31T15:52:59.578 [DEBUG] [Thread-130502] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:52:59.597 [DEBUG] [Thread-130502] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:52:59.598 [DEBUG] [Thread-130502] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:52:59.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T15:52:59.599 [DEBUG] [Thread-130502] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T15:52:59.600 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:52:59.601 [DEBUG] [Thread-130502] [transport.py] [_log()] userauth is OK
2025-12-31T15:52:59.602 [DEBUG] [Thread-130502] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:52:59.602 [DEBUG] [Thread-130502] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:52:59.602 [DEBUG] [Thread-130502] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T15:52:59.602 [DEBUG] [Thread-130502] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:52:59.626 [INFO] [Thread-130502] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:52:59.628 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:53:00.289 [DEBUG] [Thread-130502] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:53:00.289 [DEBUG] [Thread-130502] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:53:00.289 [DEBUG] [Thread-130502] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T15:53:00.330 [DEBUG] [Thread-130502] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:53:00.330 [DEBUG] [Thread-130502] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:53:00.333 [DEBUG] [Thread-130502] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:53:00.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:53:00.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T15:53:00.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T15:53:00.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T15:53:00.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:53:00.356 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T15:53:00.356 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:53:00.356 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:53:00.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T15:53:00.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.577919 -999.00  +25.10  26.69     19   +0.00 1 1 1 1 1   888    0 26.85 -8.63 ----- 24.0 26.7 272.6 30.6 29.8 -21.6 29.8 -21.8 29.4 -25.4 30.0 -21.8
2025-12-31T15:53:00.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T15:53:00.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T15:53:00.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.577919
2025-12-31T15:53:00.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T15:53:00.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T15:53:00.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T15:53:00.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T15:53:00.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T15:53:00.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T15:52:47', tmtdew=30.18, humidity=13.35, cloud=0.0, wind=24.28, temperature=25.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T13:52:12.202', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T15:53:00.359 [DEBUG] [Thread-130502] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:53:00.379 [DEBUG] [Thread-130505 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:53:00.448 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T15:53:00.460 [DEBUG] [Thread-130506] [transport.py] [_log()] starting thread (client mode): 0xb95f1120
2025-12-31T15:53:00.460 [DEBUG] [Thread-130506] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:53:00.475 [DEBUG] [Thread-130506] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T15:53:00.476 [INFO] [Thread-130506] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T15:53:00.483 [DEBUG] [Thread-130506] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:53:00.483 [DEBUG] [Thread-130506] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T15:53:00.483 [DEBUG] [Thread-130506] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:53:00.483 [DEBUG] [Thread-130506] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:53:00.484 [DEBUG] [Thread-130506] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:53:00.484 [DEBUG] [Thread-130506] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:53:00.484 [DEBUG] [Thread-130506] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:53:00.484 [DEBUG] [Thread-130506] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:53:00.484 [DEBUG] [Thread-130506] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:53:00.484 [DEBUG] [Thread-130506] [transport.py] [_log()] client lang: <none>
2025-12-31T15:53:00.484 [DEBUG] [Thread-130506] [transport.py] [_log()] server lang: <none>
2025-12-31T15:53:00.484 [DEBUG] [Thread-130506] [transport.py] [_log()] kex follows: False
2025-12-31T15:53:00.484 [DEBUG] [Thread-130506] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:53:00.484 [DEBUG] [Thread-130506] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:53:00.484 [DEBUG] [Thread-130506] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:53:00.484 [DEBUG] [Thread-130506] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:53:00.484 [DEBUG] [Thread-130506] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:53:00.484 [DEBUG] [Thread-130506] [transport.py] [_log()] Compression: none
2025-12-31T15:53:00.484 [DEBUG] [Thread-130506] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:53:00.543 [DEBUG] [Thread-130506] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:53:00.543 [DEBUG] [Thread-130506] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:53:00.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T15:53:00.545 [DEBUG] [Thread-130506] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T15:53:00.546 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:53:00.599 [DEBUG] [Thread-130506] [transport.py] [_log()] userauth is OK
2025-12-31T15:53:00.599 [DEBUG] [Thread-130506] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:53:00.599 [DEBUG] [Thread-130506] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:53:00.600 [DEBUG] [Thread-130506] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T15:53:00.600 [DEBUG] [Thread-130506] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:53:00.618 [INFO] [Thread-130506] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:53:00.618 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T15:53:00.619 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:53:01.447 [DEBUG] [Thread-130506] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:53:01.447 [DEBUG] [Thread-130506] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:53:01.495 [DEBUG] [Thread-130506] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:53:01.496 [DEBUG] [Thread-130506] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:53:01.508 [DEBUG] [Thread-130506] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:53:01.518 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:53:01.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T15:53:01.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T15:53:01.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:53:01.537 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:53:01.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:53:01.545 [DEBUG] [Thread-130506] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:53:11.132 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:53:11.133 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:53:15.421 [DEBUG] [Thread-130508 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:53:22.548 [DEBUG] [Thread-130509 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:53:30.454 [DEBUG] [Thread-130510 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:53:31.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T15:53:31.568 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T15:53:31.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T15:53:32.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 15, 53, 19), 29.99, 13.52, 0.0, 22.22, 25.44, 0, 0, 0, 2, 0, 0),)
2025-12-31T15:53:32.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 15:53:19
2025-12-31T15:53:32.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T15:53:32.558 [DEBUG] [Thread-130511] [transport.py] [_log()] starting thread (client mode): 0xb6bbf760
2025-12-31T15:53:32.558 [DEBUG] [Thread-130511] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:53:32.579 [DEBUG] [Thread-130511] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T15:53:32.579 [INFO] [Thread-130511] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T15:53:32.582 [DEBUG] [Thread-130511] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:53:32.582 [DEBUG] [Thread-130511] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T15:53:32.582 [DEBUG] [Thread-130511] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:53:32.582 [DEBUG] [Thread-130511] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:53:32.582 [DEBUG] [Thread-130511] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:53:32.582 [DEBUG] [Thread-130511] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:53:32.582 [DEBUG] [Thread-130511] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:53:32.582 [DEBUG] [Thread-130511] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:53:32.582 [DEBUG] [Thread-130511] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:53:32.583 [DEBUG] [Thread-130511] [transport.py] [_log()] client lang: <none>
2025-12-31T15:53:32.583 [DEBUG] [Thread-130511] [transport.py] [_log()] server lang: <none>
2025-12-31T15:53:32.583 [DEBUG] [Thread-130511] [transport.py] [_log()] kex follows: False
2025-12-31T15:53:32.583 [DEBUG] [Thread-130511] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:53:32.583 [DEBUG] [Thread-130511] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:53:32.583 [DEBUG] [Thread-130511] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:53:32.583 [DEBUG] [Thread-130511] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:53:32.583 [DEBUG] [Thread-130511] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:53:32.583 [DEBUG] [Thread-130511] [transport.py] [_log()] Compression: none
2025-12-31T15:53:32.583 [DEBUG] [Thread-130511] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:53:32.601 [DEBUG] [Thread-130511] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:53:32.601 [DEBUG] [Thread-130511] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:53:32.602 [DEBUG] [Thread-130511] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T15:53:32.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T15:53:32.603 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:53:32.604 [DEBUG] [Thread-130511] [transport.py] [_log()] userauth is OK
2025-12-31T15:53:32.604 [DEBUG] [Thread-130511] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:53:32.604 [DEBUG] [Thread-130511] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:53:32.604 [DEBUG] [Thread-130511] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T15:53:32.604 [DEBUG] [Thread-130511] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:53:32.623 [INFO] [Thread-130511] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:53:32.623 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:53:33.369 [DEBUG] [Thread-130511] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:53:33.370 [DEBUG] [Thread-130511] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:53:33.370 [DEBUG] [Thread-130511] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T15:53:33.411 [DEBUG] [Thread-130511] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:53:33.411 [DEBUG] [Thread-130511] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:53:33.414 [DEBUG] [Thread-130511] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:53:33.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:53:33.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T15:53:33.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T15:53:33.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T15:53:33.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:53:33.438 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T15:53:33.439 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:53:33.439 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:53:33.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T15:53:33.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.578266 -999.00  +25.10  21.19     19   +0.00 1 2 1 1 1   888    0 25.82 -17.04 ----- 19.9 21.2 272.6 27.8 29.9 -21.0 30.0 -20.2 29.6 -24.5 30.2 -19.1
2025-12-31T15:53:33.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T15:53:33.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T15:53:33.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.578266
2025-12-31T15:53:33.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T15:53:33.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T15:53:33.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T15:53:33.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T15:53:33.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T15:53:33.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T15:53:19', tmtdew=29.99, humidity=13.52, cloud=0.0, wind=22.22, temperature=25.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T13:52:42.182', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T15:53:33.441 [DEBUG] [Thread-130511] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:53:33.526 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T15:53:33.538 [DEBUG] [Thread-130514] [transport.py] [_log()] starting thread (client mode): 0xb6bbdab0
2025-12-31T15:53:33.538 [DEBUG] [Thread-130514] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:53:33.553 [DEBUG] [Thread-130514] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T15:53:33.553 [INFO] [Thread-130514] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T15:53:33.561 [DEBUG] [Thread-130514] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:53:33.561 [DEBUG] [Thread-130514] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T15:53:33.561 [DEBUG] [Thread-130514] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:53:33.561 [DEBUG] [Thread-130514] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:53:33.561 [DEBUG] [Thread-130514] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:53:33.561 [DEBUG] [Thread-130514] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:53:33.561 [DEBUG] [Thread-130514] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:53:33.561 [DEBUG] [Thread-130514] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:53:33.561 [DEBUG] [Thread-130514] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:53:33.561 [DEBUG] [Thread-130514] [transport.py] [_log()] client lang: <none>
2025-12-31T15:53:33.561 [DEBUG] [Thread-130514] [transport.py] [_log()] server lang: <none>
2025-12-31T15:53:33.561 [DEBUG] [Thread-130514] [transport.py] [_log()] kex follows: False
2025-12-31T15:53:33.561 [DEBUG] [Thread-130514] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:53:33.562 [DEBUG] [Thread-130514] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:53:33.562 [DEBUG] [Thread-130514] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:53:33.562 [DEBUG] [Thread-130514] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:53:33.562 [DEBUG] [Thread-130514] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:53:33.562 [DEBUG] [Thread-130514] [transport.py] [_log()] Compression: none
2025-12-31T15:53:33.562 [DEBUG] [Thread-130514] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:53:33.619 [DEBUG] [Thread-130514] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:53:33.620 [DEBUG] [Thread-130514] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:53:33.620 [DEBUG] [Thread-130514] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T15:53:33.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T15:53:33.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:53:33.680 [DEBUG] [Thread-130514] [transport.py] [_log()] userauth is OK
2025-12-31T15:53:33.680 [DEBUG] [Thread-130514] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:53:33.680 [DEBUG] [Thread-130514] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:53:33.680 [DEBUG] [Thread-130514] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T15:53:33.680 [DEBUG] [Thread-130514] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:53:33.699 [INFO] [Thread-130514] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:53:33.699 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T15:53:33.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:53:34.542 [DEBUG] [Thread-130514] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:53:34.542 [DEBUG] [Thread-130514] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:53:34.590 [DEBUG] [Thread-130514] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:53:34.590 [DEBUG] [Thread-130514] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:53:34.600 [DEBUG] [Thread-130514] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:53:34.608 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:53:34.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T15:53:34.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T15:53:34.627 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:53:34.628 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:53:34.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:53:34.636 [DEBUG] [Thread-130514] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:53:45.490 [DEBUG] [Thread-130516 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:54:00.546 [DEBUG] [Thread-130517 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:54:04.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T15:54:04.647 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T15:54:04.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T15:54:05.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 15, 53, 51), 29.86, 13.35, 0.0, 23.31, 25.3, 0, 0, 0, 2, 0, 0),)
2025-12-31T15:54:05.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 15:53:51
2025-12-31T15:54:05.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T15:54:05.630 [DEBUG] [Thread-130518] [transport.py] [_log()] starting thread (client mode): 0xb6bbf040
2025-12-31T15:54:05.630 [DEBUG] [Thread-130518] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:54:05.649 [DEBUG] [Thread-130518] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T15:54:05.649 [INFO] [Thread-130518] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T15:54:05.652 [DEBUG] [Thread-130518] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:54:05.652 [DEBUG] [Thread-130518] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T15:54:05.652 [DEBUG] [Thread-130518] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:54:05.652 [DEBUG] [Thread-130518] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:54:05.652 [DEBUG] [Thread-130518] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:54:05.652 [DEBUG] [Thread-130518] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:54:05.652 [DEBUG] [Thread-130518] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:54:05.652 [DEBUG] [Thread-130518] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:54:05.652 [DEBUG] [Thread-130518] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:54:05.652 [DEBUG] [Thread-130518] [transport.py] [_log()] client lang: <none>
2025-12-31T15:54:05.652 [DEBUG] [Thread-130518] [transport.py] [_log()] server lang: <none>
2025-12-31T15:54:05.652 [DEBUG] [Thread-130518] [transport.py] [_log()] kex follows: False
2025-12-31T15:54:05.652 [DEBUG] [Thread-130518] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:54:05.652 [DEBUG] [Thread-130518] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:54:05.652 [DEBUG] [Thread-130518] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:54:05.652 [DEBUG] [Thread-130518] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:54:05.652 [DEBUG] [Thread-130518] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:54:05.652 [DEBUG] [Thread-130518] [transport.py] [_log()] Compression: none
2025-12-31T15:54:05.653 [DEBUG] [Thread-130518] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:54:05.670 [DEBUG] [Thread-130518] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:54:05.670 [DEBUG] [Thread-130518] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:54:05.671 [DEBUG] [Thread-130518] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T15:54:05.671 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T15:54:05.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:54:05.672 [DEBUG] [Thread-130518] [transport.py] [_log()] userauth is OK
2025-12-31T15:54:05.673 [DEBUG] [Thread-130518] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:54:05.673 [DEBUG] [Thread-130518] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:54:05.673 [DEBUG] [Thread-130518] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T15:54:05.673 [DEBUG] [Thread-130518] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:54:05.708 [INFO] [Thread-130518] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:54:05.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:54:06.344 [DEBUG] [Thread-130518] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:54:06.345 [DEBUG] [Thread-130518] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:54:06.345 [DEBUG] [Thread-130518] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T15:54:06.387 [DEBUG] [Thread-130518] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:54:06.387 [DEBUG] [Thread-130518] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:54:06.390 [DEBUG] [Thread-130518] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:54:06.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:54:06.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T15:54:06.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T15:54:06.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T15:54:06.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:54:06.419 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T15:54:06.419 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:54:06.420 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:54:06.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T15:54:06.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.578613 -999.00  +25.10  24.26     19   +0.00 1 2 1 1 1   888    0 25.70 -28.94 ----- 21.0 24.3 260.8 29.9 29.9 -22.0 29.8 -22.1 29.8 -20.2 30.0 -22.5
2025-12-31T15:54:06.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T15:54:06.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T15:54:06.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.578613
2025-12-31T15:54:06.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T15:54:06.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T15:54:06.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T15:54:06.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T15:54:06.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T15:54:06.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T15:53:51', tmtdew=29.86, humidity=13.35, cloud=0.0, wind=23.31, temperature=25.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T13:53:12.163', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T15:54:06.422 [DEBUG] [Thread-130518] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:54:06.506 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T15:54:06.518 [DEBUG] [Thread-130521] [transport.py] [_log()] starting thread (client mode): 0xb6b62800
2025-12-31T15:54:06.518 [DEBUG] [Thread-130521] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:54:06.532 [DEBUG] [Thread-130521] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T15:54:06.532 [INFO] [Thread-130521] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T15:54:06.540 [DEBUG] [Thread-130521] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:54:06.540 [DEBUG] [Thread-130521] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T15:54:06.540 [DEBUG] [Thread-130521] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:54:06.540 [DEBUG] [Thread-130521] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:54:06.540 [DEBUG] [Thread-130521] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:54:06.541 [DEBUG] [Thread-130521] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:54:06.541 [DEBUG] [Thread-130521] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:54:06.541 [DEBUG] [Thread-130521] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:54:06.541 [DEBUG] [Thread-130521] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:54:06.541 [DEBUG] [Thread-130521] [transport.py] [_log()] client lang: <none>
2025-12-31T15:54:06.541 [DEBUG] [Thread-130521] [transport.py] [_log()] server lang: <none>
2025-12-31T15:54:06.541 [DEBUG] [Thread-130521] [transport.py] [_log()] kex follows: False
2025-12-31T15:54:06.541 [DEBUG] [Thread-130521] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:54:06.541 [DEBUG] [Thread-130521] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:54:06.541 [DEBUG] [Thread-130521] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:54:06.541 [DEBUG] [Thread-130521] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:54:06.541 [DEBUG] [Thread-130521] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:54:06.541 [DEBUG] [Thread-130521] [transport.py] [_log()] Compression: none
2025-12-31T15:54:06.541 [DEBUG] [Thread-130521] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:54:06.605 [DEBUG] [Thread-130521] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:54:06.606 [DEBUG] [Thread-130521] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:54:06.606 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T15:54:06.607 [DEBUG] [Thread-130521] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T15:54:06.608 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:54:06.661 [DEBUG] [Thread-130521] [transport.py] [_log()] userauth is OK
2025-12-31T15:54:06.661 [DEBUG] [Thread-130521] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:54:06.661 [DEBUG] [Thread-130521] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:54:06.661 [DEBUG] [Thread-130521] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T15:54:06.661 [DEBUG] [Thread-130521] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:54:06.681 [INFO] [Thread-130521] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:54:06.681 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T15:54:06.682 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:54:07.532 [DEBUG] [Thread-130521] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:54:07.532 [DEBUG] [Thread-130521] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:54:07.580 [DEBUG] [Thread-130521] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:54:07.580 [DEBUG] [Thread-130521] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:54:07.589 [DEBUG] [Thread-130521] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:54:07.598 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:54:07.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T15:54:07.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T15:54:07.616 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:54:07.617 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:54:07.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:54:07.625 [DEBUG] [Thread-130521] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:54:11.273 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:54:11.274 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:54:15.583 [DEBUG] [Thread-130523 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:54:22.593 [DEBUG] [Thread-130524 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:54:30.627 [DEBUG] [Thread-130525 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:54:37.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T15:54:37.627 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T15:54:37.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T15:54:38.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 15, 54, 23), 29.93, 13.3, 0.0, 24.26, 25.4, 0, 0, 0, 2, 0, 0),)
2025-12-31T15:54:38.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 15:54:23
2025-12-31T15:54:38.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T15:54:38.616 [DEBUG] [Thread-130526] [transport.py] [_log()] starting thread (client mode): 0xb95d4d60
2025-12-31T15:54:38.616 [DEBUG] [Thread-130526] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:54:38.632 [DEBUG] [Thread-130526] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T15:54:38.632 [INFO] [Thread-130526] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T15:54:38.635 [DEBUG] [Thread-130526] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:54:38.635 [DEBUG] [Thread-130526] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T15:54:38.635 [DEBUG] [Thread-130526] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:54:38.635 [DEBUG] [Thread-130526] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:54:38.635 [DEBUG] [Thread-130526] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:54:38.635 [DEBUG] [Thread-130526] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:54:38.635 [DEBUG] [Thread-130526] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:54:38.635 [DEBUG] [Thread-130526] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:54:38.635 [DEBUG] [Thread-130526] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:54:38.635 [DEBUG] [Thread-130526] [transport.py] [_log()] client lang: <none>
2025-12-31T15:54:38.635 [DEBUG] [Thread-130526] [transport.py] [_log()] server lang: <none>
2025-12-31T15:54:38.635 [DEBUG] [Thread-130526] [transport.py] [_log()] kex follows: False
2025-12-31T15:54:38.635 [DEBUG] [Thread-130526] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:54:38.635 [DEBUG] [Thread-130526] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:54:38.635 [DEBUG] [Thread-130526] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:54:38.635 [DEBUG] [Thread-130526] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:54:38.636 [DEBUG] [Thread-130526] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:54:38.636 [DEBUG] [Thread-130526] [transport.py] [_log()] Compression: none
2025-12-31T15:54:38.636 [DEBUG] [Thread-130526] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:54:38.653 [DEBUG] [Thread-130526] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:54:38.654 [DEBUG] [Thread-130526] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:54:38.654 [DEBUG] [Thread-130526] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T15:54:38.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T15:54:38.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:54:38.656 [DEBUG] [Thread-130526] [transport.py] [_log()] userauth is OK
2025-12-31T15:54:38.656 [DEBUG] [Thread-130526] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:54:38.657 [DEBUG] [Thread-130526] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:54:38.657 [DEBUG] [Thread-130526] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T15:54:38.657 [DEBUG] [Thread-130526] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:54:38.672 [INFO] [Thread-130526] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:54:38.672 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:54:39.403 [DEBUG] [Thread-130526] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:54:39.403 [DEBUG] [Thread-130526] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:54:39.403 [DEBUG] [Thread-130526] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T15:54:39.444 [DEBUG] [Thread-130526] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:54:39.444 [DEBUG] [Thread-130526] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:54:39.448 [DEBUG] [Thread-130526] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:54:39.459 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:54:39.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T15:54:39.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T15:54:39.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T15:54:39.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:54:39.472 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T15:54:39.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:54:39.472 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:54:39.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T15:54:39.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.578961 -999.00  +25.10  17.83     19   +0.00 1 2 1 1 1   888    0 24.70 -42.74 ----- 18.6 17.8 279.0 24.7 29.7 -23.0 29.8 -21.9 29.6 -21.1 29.9 -22.5
2025-12-31T15:54:39.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T15:54:39.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T15:54:39.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.578961
2025-12-31T15:54:39.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T15:54:39.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T15:54:39.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T15:54:39.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T15:54:39.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T15:54:39.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T15:54:23', tmtdew=29.93, humidity=13.3, cloud=0.0, wind=24.26, temperature=25.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T13:53:42.230', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T15:54:39.476 [DEBUG] [Thread-130526] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:54:39.557 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T15:54:39.568 [DEBUG] [Thread-130529] [transport.py] [_log()] starting thread (client mode): 0xb6bbb490
2025-12-31T15:54:39.568 [DEBUG] [Thread-130529] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:54:39.583 [DEBUG] [Thread-130529] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T15:54:39.583 [INFO] [Thread-130529] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T15:54:39.591 [DEBUG] [Thread-130529] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:54:39.591 [DEBUG] [Thread-130529] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T15:54:39.592 [DEBUG] [Thread-130529] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:54:39.592 [DEBUG] [Thread-130529] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:54:39.592 [DEBUG] [Thread-130529] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:54:39.592 [DEBUG] [Thread-130529] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:54:39.592 [DEBUG] [Thread-130529] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:54:39.592 [DEBUG] [Thread-130529] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:54:39.592 [DEBUG] [Thread-130529] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:54:39.593 [DEBUG] [Thread-130529] [transport.py] [_log()] client lang: <none>
2025-12-31T15:54:39.593 [DEBUG] [Thread-130529] [transport.py] [_log()] server lang: <none>
2025-12-31T15:54:39.593 [DEBUG] [Thread-130529] [transport.py] [_log()] kex follows: False
2025-12-31T15:54:39.593 [DEBUG] [Thread-130529] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:54:39.593 [DEBUG] [Thread-130529] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:54:39.593 [DEBUG] [Thread-130529] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:54:39.593 [DEBUG] [Thread-130529] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:54:39.593 [DEBUG] [Thread-130529] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:54:39.593 [DEBUG] [Thread-130529] [transport.py] [_log()] Compression: none
2025-12-31T15:54:39.593 [DEBUG] [Thread-130529] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:54:39.649 [DEBUG] [Thread-130529] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:54:39.650 [DEBUG] [Thread-130529] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:54:39.650 [DEBUG] [Thread-130529] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T15:54:39.650 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T15:54:39.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:54:39.706 [DEBUG] [Thread-130529] [transport.py] [_log()] userauth is OK
2025-12-31T15:54:39.706 [DEBUG] [Thread-130529] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:54:39.707 [DEBUG] [Thread-130529] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:54:39.707 [DEBUG] [Thread-130529] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T15:54:39.707 [DEBUG] [Thread-130529] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:54:39.729 [INFO] [Thread-130529] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:54:39.730 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T15:54:39.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:54:40.568 [DEBUG] [Thread-130529] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:54:40.568 [DEBUG] [Thread-130529] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:54:40.616 [DEBUG] [Thread-130529] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:54:40.616 [DEBUG] [Thread-130529] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:54:40.626 [DEBUG] [Thread-130529] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:54:40.635 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:54:40.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T15:54:40.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T15:54:40.653 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:54:40.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:54:40.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:54:40.662 [DEBUG] [Thread-130529] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:54:45.659 [DEBUG] [Thread-130531 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:55:00.708 [DEBUG] [Thread-130532 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:55:10.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T15:55:10.685 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T15:55:10.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T15:55:11.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 15, 54, 55), 30.52, 13.12, 0.0, 25.88, 25.99, 0, 0, 0, 2, 0, 0),)
2025-12-31T15:55:11.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 15:54:55
2025-12-31T15:55:11.413 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:55:11.414 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:55:11.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T15:55:11.658 [DEBUG] [Thread-130533] [transport.py] [_log()] starting thread (client mode): 0xb6b63970
2025-12-31T15:55:11.658 [DEBUG] [Thread-130533] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:55:11.675 [DEBUG] [Thread-130533] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T15:55:11.676 [INFO] [Thread-130533] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T15:55:11.679 [DEBUG] [Thread-130533] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:55:11.679 [DEBUG] [Thread-130533] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T15:55:11.679 [DEBUG] [Thread-130533] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:55:11.679 [DEBUG] [Thread-130533] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:55:11.679 [DEBUG] [Thread-130533] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:55:11.679 [DEBUG] [Thread-130533] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:55:11.679 [DEBUG] [Thread-130533] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:55:11.679 [DEBUG] [Thread-130533] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:55:11.679 [DEBUG] [Thread-130533] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:55:11.679 [DEBUG] [Thread-130533] [transport.py] [_log()] client lang: <none>
2025-12-31T15:55:11.679 [DEBUG] [Thread-130533] [transport.py] [_log()] server lang: <none>
2025-12-31T15:55:11.679 [DEBUG] [Thread-130533] [transport.py] [_log()] kex follows: False
2025-12-31T15:55:11.679 [DEBUG] [Thread-130533] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:55:11.679 [DEBUG] [Thread-130533] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:55:11.679 [DEBUG] [Thread-130533] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:55:11.679 [DEBUG] [Thread-130533] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:55:11.679 [DEBUG] [Thread-130533] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:55:11.679 [DEBUG] [Thread-130533] [transport.py] [_log()] Compression: none
2025-12-31T15:55:11.680 [DEBUG] [Thread-130533] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:55:11.697 [DEBUG] [Thread-130533] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:55:11.698 [DEBUG] [Thread-130533] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:55:11.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T15:55:11.698 [DEBUG] [Thread-130533] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T15:55:11.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:55:11.701 [DEBUG] [Thread-130533] [transport.py] [_log()] userauth is OK
2025-12-31T15:55:11.701 [DEBUG] [Thread-130533] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:55:11.701 [DEBUG] [Thread-130533] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:55:11.701 [DEBUG] [Thread-130533] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T15:55:11.701 [DEBUG] [Thread-130533] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:55:11.734 [INFO] [Thread-130533] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:55:11.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:55:14.930 [DEBUG] [Thread-130533] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:55:14.930 [DEBUG] [Thread-130533] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:55:14.931 [DEBUG] [Thread-130533] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T15:55:14.972 [DEBUG] [Thread-130533] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:55:14.972 [DEBUG] [Thread-130533] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:55:14.976 [DEBUG] [Thread-130533] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:55:15.070 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:55:15.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T15:55:15.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T15:55:15.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T15:55:15.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:55:15.142 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T15:55:15.142 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:55:15.142 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:55:15.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T15:55:15.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.579308 -999.00  +25.40  20.44     19   +0.10 1 2 1 1 1   888    0 25.16 -47.54 ----- 19.6 20.4 300.8 25.1 29.8 -21.7 29.7 -21.7 29.3 -21.2 29.9 -20.8
2025-12-31T15:55:15.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T15:55:15.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T15:55:15.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.579308
2025-12-31T15:55:15.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T15:55:15.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T15:55:15.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T15:55:15.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T15:55:15.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T15:55:15.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T15:54:55', tmtdew=30.52, humidity=13.12, cloud=0.0, wind=25.88, temperature=25.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T13:54:12.211', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T15:55:15.145 [DEBUG] [Thread-130533] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:55:15.230 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T15:55:15.242 [DEBUG] [Thread-130536] [transport.py] [_log()] starting thread (client mode): 0xb6bbea10
2025-12-31T15:55:15.243 [DEBUG] [Thread-130536] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:55:15.257 [DEBUG] [Thread-130536] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T15:55:15.258 [INFO] [Thread-130536] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T15:55:15.265 [DEBUG] [Thread-130536] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:55:15.266 [DEBUG] [Thread-130536] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T15:55:15.266 [DEBUG] [Thread-130536] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:55:15.266 [DEBUG] [Thread-130536] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:55:15.266 [DEBUG] [Thread-130536] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:55:15.266 [DEBUG] [Thread-130536] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:55:15.266 [DEBUG] [Thread-130536] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:55:15.266 [DEBUG] [Thread-130536] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:55:15.266 [DEBUG] [Thread-130536] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:55:15.267 [DEBUG] [Thread-130536] [transport.py] [_log()] client lang: <none>
2025-12-31T15:55:15.267 [DEBUG] [Thread-130536] [transport.py] [_log()] server lang: <none>
2025-12-31T15:55:15.267 [DEBUG] [Thread-130536] [transport.py] [_log()] kex follows: False
2025-12-31T15:55:15.267 [DEBUG] [Thread-130536] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:55:15.267 [DEBUG] [Thread-130536] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:55:15.267 [DEBUG] [Thread-130536] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:55:15.267 [DEBUG] [Thread-130536] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:55:15.268 [DEBUG] [Thread-130536] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:55:15.268 [DEBUG] [Thread-130536] [transport.py] [_log()] Compression: none
2025-12-31T15:55:15.268 [DEBUG] [Thread-130536] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:55:15.326 [DEBUG] [Thread-130536] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:55:15.326 [DEBUG] [Thread-130536] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:55:15.327 [DEBUG] [Thread-130536] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T15:55:15.327 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T15:55:15.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:55:15.382 [DEBUG] [Thread-130536] [transport.py] [_log()] userauth is OK
2025-12-31T15:55:15.382 [DEBUG] [Thread-130536] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:55:15.382 [DEBUG] [Thread-130536] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:55:15.382 [DEBUG] [Thread-130536] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T15:55:15.383 [DEBUG] [Thread-130536] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:55:15.401 [INFO] [Thread-130536] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:55:15.402 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T15:55:15.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:55:15.739 [DEBUG] [Thread-130538 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:55:16.282 [DEBUG] [Thread-130536] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:55:16.282 [DEBUG] [Thread-130536] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:55:16.330 [DEBUG] [Thread-130536] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:55:16.330 [DEBUG] [Thread-130536] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:55:16.340 [DEBUG] [Thread-130536] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:55:16.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:55:16.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T15:55:16.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T15:55:16.369 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:55:16.369 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:55:16.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:55:16.378 [DEBUG] [Thread-130536] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:55:22.647 [DEBUG] [Thread-130539 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:55:30.786 [DEBUG] [Thread-130540 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:55:45.819 [DEBUG] [Thread-130541 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:55:46.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T15:55:46.381 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T15:55:46.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T15:55:47.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 15, 55, 27), 30.72, 12.99, 0.0, 25.11, 26.22, 0, 0, 0, 2, 0, 0),)
2025-12-31T15:55:47.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 15:55:27
2025-12-31T15:55:47.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T15:55:47.364 [DEBUG] [Thread-130542] [transport.py] [_log()] starting thread (client mode): 0xb6bb0640
2025-12-31T15:55:47.364 [DEBUG] [Thread-130542] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:55:47.384 [DEBUG] [Thread-130542] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T15:55:47.384 [INFO] [Thread-130542] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T15:55:47.387 [DEBUG] [Thread-130542] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:55:47.387 [DEBUG] [Thread-130542] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T15:55:47.387 [DEBUG] [Thread-130542] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:55:47.387 [DEBUG] [Thread-130542] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:55:47.388 [DEBUG] [Thread-130542] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:55:47.388 [DEBUG] [Thread-130542] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:55:47.388 [DEBUG] [Thread-130542] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:55:47.388 [DEBUG] [Thread-130542] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:55:47.388 [DEBUG] [Thread-130542] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:55:47.388 [DEBUG] [Thread-130542] [transport.py] [_log()] client lang: <none>
2025-12-31T15:55:47.388 [DEBUG] [Thread-130542] [transport.py] [_log()] server lang: <none>
2025-12-31T15:55:47.388 [DEBUG] [Thread-130542] [transport.py] [_log()] kex follows: False
2025-12-31T15:55:47.388 [DEBUG] [Thread-130542] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:55:47.388 [DEBUG] [Thread-130542] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:55:47.388 [DEBUG] [Thread-130542] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:55:47.388 [DEBUG] [Thread-130542] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:55:47.388 [DEBUG] [Thread-130542] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:55:47.388 [DEBUG] [Thread-130542] [transport.py] [_log()] Compression: none
2025-12-31T15:55:47.388 [DEBUG] [Thread-130542] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:55:47.402 [DEBUG] [Thread-130542] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:55:47.402 [DEBUG] [Thread-130542] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:55:47.403 [DEBUG] [Thread-130542] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T15:55:47.403 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T15:55:47.403 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:55:47.403 [DEBUG] [Thread-130542] [transport.py] [_log()] userauth is OK
2025-12-31T15:55:47.403 [DEBUG] [Thread-130542] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:55:47.404 [DEBUG] [Thread-130542] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:55:47.404 [DEBUG] [Thread-130542] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T15:55:47.404 [DEBUG] [Thread-130542] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:55:47.413 [INFO] [Thread-130542] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:55:47.413 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:55:47.990 [DEBUG] [Thread-130542] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:55:47.991 [DEBUG] [Thread-130542] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:55:47.991 [DEBUG] [Thread-130542] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T15:55:48.032 [DEBUG] [Thread-130542] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:55:48.032 [DEBUG] [Thread-130542] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:55:48.033 [DEBUG] [Thread-130542] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:55:48.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:55:48.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T15:55:48.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T15:55:48.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T15:55:48.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:55:48.052 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T15:55:48.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:55:48.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:55:48.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T15:55:48.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.580002 -999.00  +25.60  27.63     17   -0.70 1 2 1 1 1   888    0 24.80 -51.88 ----- 26.3 27.6 296.2 30.6 29.7 -22.9 29.6 -22.7 29.3 -20.9 29.8 -21.2
2025-12-31T15:55:48.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T15:55:48.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T15:55:48.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.580002
2025-12-31T15:55:48.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T15:55:48.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T15:55:48.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T15:55:48.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T15:55:48.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T15:55:48.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T15:55:27', tmtdew=30.72, humidity=12.99, cloud=0.0, wind=25.11, temperature=26.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T13:55:12.173', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T15:55:48.053 [DEBUG] [Thread-130542] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:55:48.127 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T15:55:48.139 [DEBUG] [Thread-130545] [transport.py] [_log()] starting thread (client mode): 0xb95f1420
2025-12-31T15:55:48.139 [DEBUG] [Thread-130545] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:55:48.153 [DEBUG] [Thread-130545] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T15:55:48.153 [INFO] [Thread-130545] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T15:55:48.164 [DEBUG] [Thread-130545] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:55:48.164 [DEBUG] [Thread-130545] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T15:55:48.164 [DEBUG] [Thread-130545] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:55:48.164 [DEBUG] [Thread-130545] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:55:48.164 [DEBUG] [Thread-130545] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:55:48.164 [DEBUG] [Thread-130545] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:55:48.164 [DEBUG] [Thread-130545] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:55:48.164 [DEBUG] [Thread-130545] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:55:48.164 [DEBUG] [Thread-130545] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:55:48.164 [DEBUG] [Thread-130545] [transport.py] [_log()] client lang: <none>
2025-12-31T15:55:48.164 [DEBUG] [Thread-130545] [transport.py] [_log()] server lang: <none>
2025-12-31T15:55:48.164 [DEBUG] [Thread-130545] [transport.py] [_log()] kex follows: False
2025-12-31T15:55:48.164 [DEBUG] [Thread-130545] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:55:48.164 [DEBUG] [Thread-130545] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:55:48.164 [DEBUG] [Thread-130545] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:55:48.164 [DEBUG] [Thread-130545] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:55:48.164 [DEBUG] [Thread-130545] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:55:48.164 [DEBUG] [Thread-130545] [transport.py] [_log()] Compression: none
2025-12-31T15:55:48.164 [DEBUG] [Thread-130545] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:55:48.217 [DEBUG] [Thread-130545] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:55:48.217 [DEBUG] [Thread-130545] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:55:48.217 [DEBUG] [Thread-130545] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T15:55:48.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T15:55:48.218 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:55:48.274 [DEBUG] [Thread-130545] [transport.py] [_log()] userauth is OK
2025-12-31T15:55:48.274 [DEBUG] [Thread-130545] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:55:48.274 [DEBUG] [Thread-130545] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:55:48.274 [DEBUG] [Thread-130545] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T15:55:48.274 [DEBUG] [Thread-130545] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:55:48.288 [INFO] [Thread-130545] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:55:48.288 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T15:55:48.288 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:55:49.163 [DEBUG] [Thread-130545] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:55:49.163 [DEBUG] [Thread-130545] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:55:49.211 [DEBUG] [Thread-130545] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:55:49.211 [DEBUG] [Thread-130545] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:55:49.220 [DEBUG] [Thread-130545] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:55:49.228 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:55:49.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T15:55:49.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T15:55:49.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:55:49.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:55:49.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:55:49.252 [DEBUG] [Thread-130545] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:56:00.849 [DEBUG] [Thread-130547 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:56:11.553 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:56:11.554 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:56:15.898 [DEBUG] [Thread-130548 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:56:19.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T15:56:19.275 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T15:56:19.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T15:56:19.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 15, 55, 59), 31.52, 12.32, 0.0, 24.97, 26.35, 0, 0, 0, 2, 0, 0),)
2025-12-31T15:56:19.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 15:55:59
2025-12-31T15:56:20.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T15:56:20.275 [DEBUG] [Thread-130549] [transport.py] [_log()] starting thread (client mode): 0xb95d5120
2025-12-31T15:56:20.275 [DEBUG] [Thread-130549] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:56:20.296 [DEBUG] [Thread-130549] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T15:56:20.296 [INFO] [Thread-130549] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T15:56:20.299 [DEBUG] [Thread-130549] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:56:20.299 [DEBUG] [Thread-130549] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T15:56:20.299 [DEBUG] [Thread-130549] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:56:20.299 [DEBUG] [Thread-130549] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:56:20.300 [DEBUG] [Thread-130549] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:56:20.300 [DEBUG] [Thread-130549] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:56:20.300 [DEBUG] [Thread-130549] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:56:20.300 [DEBUG] [Thread-130549] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:56:20.300 [DEBUG] [Thread-130549] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:56:20.300 [DEBUG] [Thread-130549] [transport.py] [_log()] client lang: <none>
2025-12-31T15:56:20.300 [DEBUG] [Thread-130549] [transport.py] [_log()] server lang: <none>
2025-12-31T15:56:20.300 [DEBUG] [Thread-130549] [transport.py] [_log()] kex follows: False
2025-12-31T15:56:20.300 [DEBUG] [Thread-130549] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:56:20.300 [DEBUG] [Thread-130549] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:56:20.300 [DEBUG] [Thread-130549] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:56:20.300 [DEBUG] [Thread-130549] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:56:20.300 [DEBUG] [Thread-130549] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:56:20.300 [DEBUG] [Thread-130549] [transport.py] [_log()] Compression: none
2025-12-31T15:56:20.300 [DEBUG] [Thread-130549] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:56:20.320 [DEBUG] [Thread-130549] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:56:20.321 [DEBUG] [Thread-130549] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:56:20.321 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T15:56:20.322 [DEBUG] [Thread-130549] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T15:56:20.323 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:56:20.366 [DEBUG] [Thread-130549] [transport.py] [_log()] userauth is OK
2025-12-31T15:56:20.367 [DEBUG] [Thread-130549] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:56:20.367 [DEBUG] [Thread-130549] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:56:20.367 [DEBUG] [Thread-130549] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T15:56:20.367 [DEBUG] [Thread-130549] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:56:20.401 [INFO] [Thread-130549] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:56:20.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:56:21.197 [DEBUG] [Thread-130549] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:56:21.197 [DEBUG] [Thread-130549] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:56:21.198 [DEBUG] [Thread-130549] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T15:56:21.240 [DEBUG] [Thread-130549] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:56:21.240 [DEBUG] [Thread-130549] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:56:21.242 [DEBUG] [Thread-130549] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:56:21.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:56:21.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T15:56:21.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T15:56:21.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T15:56:21.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:56:21.270 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T15:56:21.270 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:56:21.270 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:56:21.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T15:56:21.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.580350 -999.00  +25.60  30.31     17   -0.90 1 2 2 1 1   888    0 25.32 -49.71 ----- 28.9 30.3 304.6 35.5 29.6 -23.2 29.5 -23.4 29.2 -21.6 29.7 -21.5
2025-12-31T15:56:21.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T15:56:21.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T15:56:21.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.580350
2025-12-31T15:56:21.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T15:56:21.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T15:56:21.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T15:56:21.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T15:56:21.273 [DEBUG] [Thread-130549] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:56:21.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T15:56:21.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T15:55:59', tmtdew=31.52, humidity=12.32, cloud=0.0, wind=24.97, temperature=26.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T13:55:42.240', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T15:56:21.356 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T15:56:21.369 [DEBUG] [Thread-130552] [transport.py] [_log()] starting thread (client mode): 0xb95d42e0
2025-12-31T15:56:21.370 [DEBUG] [Thread-130552] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:56:21.384 [DEBUG] [Thread-130552] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T15:56:21.385 [INFO] [Thread-130552] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T15:56:21.392 [DEBUG] [Thread-130552] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:56:21.392 [DEBUG] [Thread-130552] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T15:56:21.392 [DEBUG] [Thread-130552] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:56:21.392 [DEBUG] [Thread-130552] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:56:21.392 [DEBUG] [Thread-130552] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:56:21.393 [DEBUG] [Thread-130552] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:56:21.393 [DEBUG] [Thread-130552] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:56:21.393 [DEBUG] [Thread-130552] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:56:21.393 [DEBUG] [Thread-130552] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:56:21.393 [DEBUG] [Thread-130552] [transport.py] [_log()] client lang: <none>
2025-12-31T15:56:21.393 [DEBUG] [Thread-130552] [transport.py] [_log()] server lang: <none>
2025-12-31T15:56:21.393 [DEBUG] [Thread-130552] [transport.py] [_log()] kex follows: False
2025-12-31T15:56:21.393 [DEBUG] [Thread-130552] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:56:21.393 [DEBUG] [Thread-130552] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:56:21.393 [DEBUG] [Thread-130552] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:56:21.393 [DEBUG] [Thread-130552] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:56:21.393 [DEBUG] [Thread-130552] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:56:21.393 [DEBUG] [Thread-130552] [transport.py] [_log()] Compression: none
2025-12-31T15:56:21.393 [DEBUG] [Thread-130552] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:56:21.451 [DEBUG] [Thread-130552] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:56:21.451 [DEBUG] [Thread-130552] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:56:21.452 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T15:56:21.452 [DEBUG] [Thread-130552] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T15:56:21.453 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:56:21.507 [DEBUG] [Thread-130552] [transport.py] [_log()] userauth is OK
2025-12-31T15:56:21.508 [DEBUG] [Thread-130552] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:56:21.508 [DEBUG] [Thread-130552] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:56:21.508 [DEBUG] [Thread-130552] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T15:56:21.508 [DEBUG] [Thread-130552] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:56:21.533 [INFO] [Thread-130552] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:56:21.534 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T15:56:21.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:56:22.350 [DEBUG] [Thread-130552] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:56:22.350 [DEBUG] [Thread-130552] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:56:22.397 [DEBUG] [Thread-130552] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:56:22.397 [DEBUG] [Thread-130552] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:56:22.405 [DEBUG] [Thread-130552] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:56:22.413 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:56:22.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T15:56:22.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T15:56:22.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:56:22.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:56:22.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:56:22.437 [DEBUG] [Thread-130552] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:56:22.693 [DEBUG] [Thread-130554 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:56:30.930 [DEBUG] [Thread-130555 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:56:45.983 [DEBUG] [Thread-130556 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:56:52.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T15:56:52.452 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T15:56:52.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T15:56:53.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 15, 56, 32), 32.07, 11.84, 0.0, 22.76, 26.29, 0, 0, 0, 2, 0, 0),)
2025-12-31T15:56:53.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 15:56:32
2025-12-31T15:56:53.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T15:56:53.441 [DEBUG] [Thread-130557] [transport.py] [_log()] starting thread (client mode): 0xb957b250
2025-12-31T15:56:53.441 [DEBUG] [Thread-130557] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:56:53.462 [DEBUG] [Thread-130557] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T15:56:53.462 [INFO] [Thread-130557] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T15:56:53.465 [DEBUG] [Thread-130557] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:56:53.465 [DEBUG] [Thread-130557] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T15:56:53.465 [DEBUG] [Thread-130557] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:56:53.465 [DEBUG] [Thread-130557] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:56:53.465 [DEBUG] [Thread-130557] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:56:53.465 [DEBUG] [Thread-130557] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:56:53.465 [DEBUG] [Thread-130557] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:56:53.465 [DEBUG] [Thread-130557] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:56:53.465 [DEBUG] [Thread-130557] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:56:53.465 [DEBUG] [Thread-130557] [transport.py] [_log()] client lang: <none>
2025-12-31T15:56:53.465 [DEBUG] [Thread-130557] [transport.py] [_log()] server lang: <none>
2025-12-31T15:56:53.465 [DEBUG] [Thread-130557] [transport.py] [_log()] kex follows: False
2025-12-31T15:56:53.465 [DEBUG] [Thread-130557] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:56:53.465 [DEBUG] [Thread-130557] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:56:53.465 [DEBUG] [Thread-130557] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:56:53.465 [DEBUG] [Thread-130557] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:56:53.465 [DEBUG] [Thread-130557] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:56:53.466 [DEBUG] [Thread-130557] [transport.py] [_log()] Compression: none
2025-12-31T15:56:53.466 [DEBUG] [Thread-130557] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:56:53.479 [DEBUG] [Thread-130557] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:56:53.480 [DEBUG] [Thread-130557] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:56:53.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T15:56:53.480 [DEBUG] [Thread-130557] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T15:56:53.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:56:53.482 [DEBUG] [Thread-130557] [transport.py] [_log()] userauth is OK
2025-12-31T15:56:53.483 [DEBUG] [Thread-130557] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:56:53.483 [DEBUG] [Thread-130557] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:56:53.483 [DEBUG] [Thread-130557] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T15:56:53.483 [DEBUG] [Thread-130557] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:56:53.506 [INFO] [Thread-130557] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:56:53.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:56:54.141 [DEBUG] [Thread-130557] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:56:54.141 [DEBUG] [Thread-130557] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:56:54.142 [DEBUG] [Thread-130557] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T15:56:54.182 [DEBUG] [Thread-130557] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:56:54.182 [DEBUG] [Thread-130557] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:56:54.185 [DEBUG] [Thread-130557] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:56:54.197 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:56:54.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T15:56:54.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T15:56:54.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T15:56:54.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:56:54.209 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T15:56:54.209 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:56:54.209 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:56:54.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T15:56:54.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.580697 -999.00  +25.10  25.32     17   -1.40 1 1 1 1 1   888    0 24.67 -47.10 ----- 20.2 25.3 300.2 28.9 29.4 -23.1 29.3 -23.1 29.1 -25.1 29.5 -21.9
2025-12-31T15:56:54.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T15:56:54.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T15:56:54.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.580697
2025-12-31T15:56:54.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T15:56:54.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T15:56:54.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T15:56:54.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T15:56:54.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T15:56:54.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T15:56:32', tmtdew=32.07, humidity=11.84, cloud=0.0, wind=22.76, temperature=26.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T13:56:12.221', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T15:56:54.212 [DEBUG] [Thread-130557] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:56:54.296 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T15:56:54.308 [DEBUG] [Thread-130560] [transport.py] [_log()] starting thread (client mode): 0xb957bd00
2025-12-31T15:56:54.309 [DEBUG] [Thread-130560] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:56:54.324 [DEBUG] [Thread-130560] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T15:56:54.324 [INFO] [Thread-130560] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T15:56:54.331 [DEBUG] [Thread-130560] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:56:54.332 [DEBUG] [Thread-130560] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T15:56:54.332 [DEBUG] [Thread-130560] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:56:54.332 [DEBUG] [Thread-130560] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:56:54.332 [DEBUG] [Thread-130560] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:56:54.332 [DEBUG] [Thread-130560] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:56:54.332 [DEBUG] [Thread-130560] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:56:54.332 [DEBUG] [Thread-130560] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:56:54.332 [DEBUG] [Thread-130560] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:56:54.332 [DEBUG] [Thread-130560] [transport.py] [_log()] client lang: <none>
2025-12-31T15:56:54.333 [DEBUG] [Thread-130560] [transport.py] [_log()] server lang: <none>
2025-12-31T15:56:54.333 [DEBUG] [Thread-130560] [transport.py] [_log()] kex follows: False
2025-12-31T15:56:54.333 [DEBUG] [Thread-130560] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:56:54.333 [DEBUG] [Thread-130560] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:56:54.333 [DEBUG] [Thread-130560] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:56:54.333 [DEBUG] [Thread-130560] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:56:54.333 [DEBUG] [Thread-130560] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:56:54.333 [DEBUG] [Thread-130560] [transport.py] [_log()] Compression: none
2025-12-31T15:56:54.333 [DEBUG] [Thread-130560] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:56:54.391 [DEBUG] [Thread-130560] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:56:54.391 [DEBUG] [Thread-130560] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:56:54.392 [DEBUG] [Thread-130560] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T15:56:54.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T15:56:54.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:56:54.448 [DEBUG] [Thread-130560] [transport.py] [_log()] userauth is OK
2025-12-31T15:56:54.448 [DEBUG] [Thread-130560] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:56:54.449 [DEBUG] [Thread-130560] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:56:54.449 [DEBUG] [Thread-130560] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T15:56:54.449 [DEBUG] [Thread-130560] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:56:54.475 [INFO] [Thread-130560] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:56:54.475 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T15:56:54.476 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:56:55.312 [DEBUG] [Thread-130560] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:56:55.312 [DEBUG] [Thread-130560] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:56:55.359 [DEBUG] [Thread-130560] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:56:55.360 [DEBUG] [Thread-130560] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:56:55.369 [DEBUG] [Thread-130560] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:56:55.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:56:55.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T15:56:55.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-12-31T15:56:55.397 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:56:55.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:56:55.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:56:55.406 [DEBUG] [Thread-130560] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:57:01.018 [DEBUG] [Thread-130562 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:57:11.693 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:57:11.694 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:57:16.066 [DEBUG] [Thread-130563 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:57:22.745 [DEBUG] [Thread-130564 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:57:25.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T15:57:25.399 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T15:57:25.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-12-31T15:57:26.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 15, 57, 4), 31.9, 11.98, 0.0, 22.8, 26.22, 0, 0, 0, 2, 0, 0),)
2025-12-31T15:57:26.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 15:57:04
2025-12-31T15:57:26.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T15:57:26.377 [DEBUG] [Thread-130565] [transport.py] [_log()] starting thread (client mode): 0xb6bbcd60
2025-12-31T15:57:26.377 [DEBUG] [Thread-130565] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:57:26.397 [DEBUG] [Thread-130565] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T15:57:26.398 [INFO] [Thread-130565] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T15:57:26.402 [DEBUG] [Thread-130565] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:57:26.402 [DEBUG] [Thread-130565] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T15:57:26.402 [DEBUG] [Thread-130565] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:57:26.402 [DEBUG] [Thread-130565] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:57:26.402 [DEBUG] [Thread-130565] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:57:26.402 [DEBUG] [Thread-130565] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:57:26.402 [DEBUG] [Thread-130565] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:57:26.402 [DEBUG] [Thread-130565] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:57:26.402 [DEBUG] [Thread-130565] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:57:26.402 [DEBUG] [Thread-130565] [transport.py] [_log()] client lang: <none>
2025-12-31T15:57:26.402 [DEBUG] [Thread-130565] [transport.py] [_log()] server lang: <none>
2025-12-31T15:57:26.402 [DEBUG] [Thread-130565] [transport.py] [_log()] kex follows: False
2025-12-31T15:57:26.402 [DEBUG] [Thread-130565] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:57:26.402 [DEBUG] [Thread-130565] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:57:26.402 [DEBUG] [Thread-130565] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:57:26.402 [DEBUG] [Thread-130565] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:57:26.402 [DEBUG] [Thread-130565] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:57:26.402 [DEBUG] [Thread-130565] [transport.py] [_log()] Compression: none
2025-12-31T15:57:26.402 [DEBUG] [Thread-130565] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:57:26.419 [DEBUG] [Thread-130565] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:57:26.420 [DEBUG] [Thread-130565] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:57:26.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T15:57:26.421 [DEBUG] [Thread-130565] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T15:57:26.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:57:26.423 [DEBUG] [Thread-130565] [transport.py] [_log()] userauth is OK
2025-12-31T15:57:26.423 [DEBUG] [Thread-130565] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:57:26.423 [DEBUG] [Thread-130565] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:57:26.423 [DEBUG] [Thread-130565] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T15:57:26.423 [DEBUG] [Thread-130565] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:57:26.460 [INFO] [Thread-130565] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:57:26.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:57:27.202 [DEBUG] [Thread-130565] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:57:27.202 [DEBUG] [Thread-130565] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:57:27.203 [DEBUG] [Thread-130565] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T15:57:27.244 [DEBUG] [Thread-130565] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:57:27.244 [DEBUG] [Thread-130565] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:57:27.247 [DEBUG] [Thread-130565] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:57:27.259 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:57:27.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T15:57:27.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T15:57:27.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T15:57:27.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:57:27.275 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T15:57:27.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:57:27.276 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:57:27.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T15:57:27.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.581044 -999.00  +25.30  18.75     17   -1.00 1 2 1 1 1   888    0 24.95 -52.28 ----- 24.8 18.8 304.7 24.3 29.7 -20.4 29.6 -20.9 29.2 -20.5 29.8 -18.4
2025-12-31T15:57:27.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T15:57:27.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T15:57:27.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.581044
2025-12-31T15:57:27.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T15:57:27.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T15:57:27.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T15:57:27.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T15:57:27.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T15:57:27.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T15:57:04', tmtdew=31.9, humidity=11.98, cloud=0.0, wind=22.8, temperature=26.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T13:56:42.202', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T15:57:27.278 [DEBUG] [Thread-130565] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:57:27.356 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T15:57:27.368 [DEBUG] [Thread-130568] [transport.py] [_log()] starting thread (client mode): 0xb95d4df0
2025-12-31T15:57:27.368 [DEBUG] [Thread-130568] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:57:27.382 [DEBUG] [Thread-130568] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T15:57:27.382 [INFO] [Thread-130568] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T15:57:27.389 [DEBUG] [Thread-130568] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:57:27.390 [DEBUG] [Thread-130568] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T15:57:27.390 [DEBUG] [Thread-130568] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:57:27.390 [DEBUG] [Thread-130568] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:57:27.390 [DEBUG] [Thread-130568] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:57:27.390 [DEBUG] [Thread-130568] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:57:27.390 [DEBUG] [Thread-130568] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:57:27.390 [DEBUG] [Thread-130568] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:57:27.390 [DEBUG] [Thread-130568] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:57:27.390 [DEBUG] [Thread-130568] [transport.py] [_log()] client lang: <none>
2025-12-31T15:57:27.390 [DEBUG] [Thread-130568] [transport.py] [_log()] server lang: <none>
2025-12-31T15:57:27.390 [DEBUG] [Thread-130568] [transport.py] [_log()] kex follows: False
2025-12-31T15:57:27.390 [DEBUG] [Thread-130568] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:57:27.390 [DEBUG] [Thread-130568] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:57:27.390 [DEBUG] [Thread-130568] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:57:27.390 [DEBUG] [Thread-130568] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:57:27.390 [DEBUG] [Thread-130568] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:57:27.390 [DEBUG] [Thread-130568] [transport.py] [_log()] Compression: none
2025-12-31T15:57:27.390 [DEBUG] [Thread-130568] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:57:27.448 [DEBUG] [Thread-130568] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:57:27.449 [DEBUG] [Thread-130568] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:57:27.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T15:57:27.450 [DEBUG] [Thread-130568] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T15:57:27.451 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:57:27.505 [DEBUG] [Thread-130568] [transport.py] [_log()] userauth is OK
2025-12-31T15:57:27.505 [DEBUG] [Thread-130568] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:57:27.505 [DEBUG] [Thread-130568] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:57:27.506 [DEBUG] [Thread-130568] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T15:57:27.506 [DEBUG] [Thread-130568] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:57:27.530 [INFO] [Thread-130568] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:57:27.531 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T15:57:27.533 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:57:28.407 [DEBUG] [Thread-130568] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:57:28.407 [DEBUG] [Thread-130568] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:57:28.455 [DEBUG] [Thread-130568] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:57:28.455 [DEBUG] [Thread-130568] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:57:28.464 [DEBUG] [Thread-130568] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:57:28.473 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:57:28.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T15:57:28.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T15:57:28.490 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:57:28.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:57:28.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:57:28.499 [DEBUG] [Thread-130568] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:57:31.103 [DEBUG] [Thread-130570 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:57:46.148 [DEBUG] [Thread-130571 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:57:58.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T15:57:58.521 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T15:57:58.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-12-31T15:57:59.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 15, 57, 36), 30.98, 12.89, 0.0, 31.51, 26.2, 0, 0, 0, 2, 0, 0),)
2025-12-31T15:57:59.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 15:57:36
2025-12-31T15:57:59.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T15:57:59.501 [DEBUG] [Thread-130572] [transport.py] [_log()] starting thread (client mode): 0xb6bb03a0
2025-12-31T15:57:59.501 [DEBUG] [Thread-130572] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:57:59.517 [DEBUG] [Thread-130572] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T15:57:59.517 [INFO] [Thread-130572] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T15:57:59.521 [DEBUG] [Thread-130572] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:57:59.521 [DEBUG] [Thread-130572] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T15:57:59.521 [DEBUG] [Thread-130572] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:57:59.521 [DEBUG] [Thread-130572] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:57:59.521 [DEBUG] [Thread-130572] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:57:59.521 [DEBUG] [Thread-130572] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:57:59.521 [DEBUG] [Thread-130572] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:57:59.521 [DEBUG] [Thread-130572] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:57:59.521 [DEBUG] [Thread-130572] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:57:59.521 [DEBUG] [Thread-130572] [transport.py] [_log()] client lang: <none>
2025-12-31T15:57:59.521 [DEBUG] [Thread-130572] [transport.py] [_log()] server lang: <none>
2025-12-31T15:57:59.521 [DEBUG] [Thread-130572] [transport.py] [_log()] kex follows: False
2025-12-31T15:57:59.521 [DEBUG] [Thread-130572] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:57:59.521 [DEBUG] [Thread-130572] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:57:59.521 [DEBUG] [Thread-130572] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:57:59.521 [DEBUG] [Thread-130572] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:57:59.521 [DEBUG] [Thread-130572] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:57:59.521 [DEBUG] [Thread-130572] [transport.py] [_log()] Compression: none
2025-12-31T15:57:59.521 [DEBUG] [Thread-130572] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:57:59.539 [DEBUG] [Thread-130572] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:57:59.540 [DEBUG] [Thread-130572] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:57:59.540 [DEBUG] [Thread-130572] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T15:57:59.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T15:57:59.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:57:59.542 [DEBUG] [Thread-130572] [transport.py] [_log()] userauth is OK
2025-12-31T15:57:59.543 [DEBUG] [Thread-130572] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:57:59.543 [DEBUG] [Thread-130572] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:57:59.543 [DEBUG] [Thread-130572] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T15:57:59.543 [DEBUG] [Thread-130572] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:57:59.579 [INFO] [Thread-130572] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:57:59.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:58:00.241 [DEBUG] [Thread-130572] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:58:00.241 [DEBUG] [Thread-130572] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:58:00.242 [DEBUG] [Thread-130572] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T15:58:00.282 [DEBUG] [Thread-130572] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:58:00.282 [DEBUG] [Thread-130572] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:58:00.285 [DEBUG] [Thread-130572] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:58:00.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:58:00.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T15:58:00.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T15:58:00.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T15:58:00.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:58:00.311 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T15:58:00.311 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:58:00.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:58:00.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T15:58:00.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.581391 -999.00  +25.90  26.91     18   +0.20 1 2 1 1 1   888    0 24.91 -49.85 ----- 28.9 26.9 315.4 32.4 29.9 -21.2 29.8 -21.5 29.6 -19.5 30.2 -18.0
2025-12-31T15:58:00.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T15:58:00.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T15:58:00.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.581391
2025-12-31T15:58:00.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T15:58:00.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T15:58:00.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T15:58:00.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T15:58:00.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T15:58:00.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T15:57:36', tmtdew=30.98, humidity=12.89, cloud=0.0, wind=31.51, temperature=26.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T13:57:12.182', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T15:58:00.314 [DEBUG] [Thread-130572] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:58:00.397 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T15:58:00.411 [DEBUG] [Thread-130575] [transport.py] [_log()] starting thread (client mode): 0xb6bb2230
2025-12-31T15:58:00.411 [DEBUG] [Thread-130575] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:58:00.427 [DEBUG] [Thread-130575] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T15:58:00.427 [INFO] [Thread-130575] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T15:58:00.434 [DEBUG] [Thread-130575] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:58:00.435 [DEBUG] [Thread-130575] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T15:58:00.435 [DEBUG] [Thread-130575] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:58:00.435 [DEBUG] [Thread-130575] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:58:00.435 [DEBUG] [Thread-130575] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:58:00.435 [DEBUG] [Thread-130575] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:58:00.435 [DEBUG] [Thread-130575] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:58:00.435 [DEBUG] [Thread-130575] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:58:00.435 [DEBUG] [Thread-130575] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:58:00.435 [DEBUG] [Thread-130575] [transport.py] [_log()] client lang: <none>
2025-12-31T15:58:00.435 [DEBUG] [Thread-130575] [transport.py] [_log()] server lang: <none>
2025-12-31T15:58:00.435 [DEBUG] [Thread-130575] [transport.py] [_log()] kex follows: False
2025-12-31T15:58:00.435 [DEBUG] [Thread-130575] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:58:00.435 [DEBUG] [Thread-130575] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:58:00.435 [DEBUG] [Thread-130575] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:58:00.435 [DEBUG] [Thread-130575] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:58:00.435 [DEBUG] [Thread-130575] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:58:00.436 [DEBUG] [Thread-130575] [transport.py] [_log()] Compression: none
2025-12-31T15:58:00.436 [DEBUG] [Thread-130575] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:58:00.493 [DEBUG] [Thread-130575] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:58:00.493 [DEBUG] [Thread-130575] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:58:00.494 [DEBUG] [Thread-130575] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T15:58:00.495 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T15:58:00.495 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:58:00.550 [DEBUG] [Thread-130575] [transport.py] [_log()] userauth is OK
2025-12-31T15:58:00.550 [DEBUG] [Thread-130575] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:58:00.550 [DEBUG] [Thread-130575] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:58:00.550 [DEBUG] [Thread-130575] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T15:58:00.550 [DEBUG] [Thread-130575] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:58:00.569 [INFO] [Thread-130575] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:58:00.569 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T15:58:00.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:58:01.182 [DEBUG] [Thread-130577 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:58:01.428 [DEBUG] [Thread-130575] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:58:01.429 [DEBUG] [Thread-130575] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:58:01.477 [DEBUG] [Thread-130575] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:58:01.477 [DEBUG] [Thread-130575] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:58:01.486 [DEBUG] [Thread-130575] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:58:01.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:58:01.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T15:58:01.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T15:58:01.511 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:58:01.511 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:58:01.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:58:01.519 [DEBUG] [Thread-130575] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:58:11.834 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:58:11.835 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:58:16.232 [DEBUG] [Thread-130578 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:58:22.803 [DEBUG] [Thread-130579 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:58:31.269 [DEBUG] [Thread-130580 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:58:31.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T15:58:31.542 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T15:58:31.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T15:58:32.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 15, 58, 8), 31.38, 12.58, 0.0, 30.58, 26.4, 0, 0, 0, 2, 0, 0),)
2025-12-31T15:58:32.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 15:58:08
2025-12-31T15:58:32.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T15:58:32.509 [DEBUG] [Thread-130581] [transport.py] [_log()] starting thread (client mode): 0xb957a890
2025-12-31T15:58:32.509 [DEBUG] [Thread-130581] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:58:32.529 [DEBUG] [Thread-130581] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T15:58:32.529 [INFO] [Thread-130581] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T15:58:32.532 [DEBUG] [Thread-130581] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:58:32.532 [DEBUG] [Thread-130581] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T15:58:32.532 [DEBUG] [Thread-130581] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:58:32.532 [DEBUG] [Thread-130581] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:58:32.532 [DEBUG] [Thread-130581] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:58:32.532 [DEBUG] [Thread-130581] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:58:32.532 [DEBUG] [Thread-130581] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:58:32.532 [DEBUG] [Thread-130581] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:58:32.532 [DEBUG] [Thread-130581] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:58:32.532 [DEBUG] [Thread-130581] [transport.py] [_log()] client lang: <none>
2025-12-31T15:58:32.532 [DEBUG] [Thread-130581] [transport.py] [_log()] server lang: <none>
2025-12-31T15:58:32.532 [DEBUG] [Thread-130581] [transport.py] [_log()] kex follows: False
2025-12-31T15:58:32.533 [DEBUG] [Thread-130581] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:58:32.533 [DEBUG] [Thread-130581] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:58:32.533 [DEBUG] [Thread-130581] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:58:32.533 [DEBUG] [Thread-130581] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:58:32.533 [DEBUG] [Thread-130581] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:58:32.533 [DEBUG] [Thread-130581] [transport.py] [_log()] Compression: none
2025-12-31T15:58:32.533 [DEBUG] [Thread-130581] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:58:32.551 [DEBUG] [Thread-130581] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:58:32.552 [DEBUG] [Thread-130581] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:58:32.552 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T15:58:32.553 [DEBUG] [Thread-130581] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T15:58:32.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:58:32.555 [DEBUG] [Thread-130581] [transport.py] [_log()] userauth is OK
2025-12-31T15:58:32.555 [DEBUG] [Thread-130581] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:58:32.555 [DEBUG] [Thread-130581] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:58:32.555 [DEBUG] [Thread-130581] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T15:58:32.555 [DEBUG] [Thread-130581] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:58:32.588 [INFO] [Thread-130581] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:58:32.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:58:33.343 [DEBUG] [Thread-130581] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:58:33.344 [DEBUG] [Thread-130581] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:58:33.344 [DEBUG] [Thread-130581] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T15:58:33.384 [DEBUG] [Thread-130581] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:58:33.384 [DEBUG] [Thread-130581] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:58:33.387 [DEBUG] [Thread-130581] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:58:33.393 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:58:33.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T15:58:33.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T15:58:33.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T15:58:33.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:58:33.404 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T15:58:33.404 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:58:33.404 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:58:33.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T15:58:33.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.581739 -999.00  +25.60  37.50     18   +0.10 1 2 2 1 1   888    0 24.26 -51.80 ----- 30.5 37.5 291.4 44.0 30.0 -21.0 29.9 -20.2 30.0 -19.8 30.2 -18.2
2025-12-31T15:58:33.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T15:58:33.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T15:58:33.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.581739
2025-12-31T15:58:33.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T15:58:33.406 [DEBUG] [Thread-130581] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:58:33.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T15:58:33.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T15:58:33.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T15:58:33.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T15:58:33.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T15:58:08', tmtdew=31.38, humidity=12.58, cloud=0.0, wind=30.58, temperature=26.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T13:57:42.250', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T15:58:33.490 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T15:58:33.502 [DEBUG] [Thread-130584] [transport.py] [_log()] starting thread (client mode): 0xb6bb0c70
2025-12-31T15:58:33.502 [DEBUG] [Thread-130584] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:58:33.516 [DEBUG] [Thread-130584] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T15:58:33.516 [INFO] [Thread-130584] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T15:58:33.524 [DEBUG] [Thread-130584] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:58:33.524 [DEBUG] [Thread-130584] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T15:58:33.524 [DEBUG] [Thread-130584] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:58:33.524 [DEBUG] [Thread-130584] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:58:33.525 [DEBUG] [Thread-130584] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:58:33.525 [DEBUG] [Thread-130584] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:58:33.525 [DEBUG] [Thread-130584] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:58:33.525 [DEBUG] [Thread-130584] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:58:33.525 [DEBUG] [Thread-130584] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:58:33.525 [DEBUG] [Thread-130584] [transport.py] [_log()] client lang: <none>
2025-12-31T15:58:33.525 [DEBUG] [Thread-130584] [transport.py] [_log()] server lang: <none>
2025-12-31T15:58:33.525 [DEBUG] [Thread-130584] [transport.py] [_log()] kex follows: False
2025-12-31T15:58:33.525 [DEBUG] [Thread-130584] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:58:33.525 [DEBUG] [Thread-130584] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:58:33.525 [DEBUG] [Thread-130584] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:58:33.525 [DEBUG] [Thread-130584] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:58:33.525 [DEBUG] [Thread-130584] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:58:33.525 [DEBUG] [Thread-130584] [transport.py] [_log()] Compression: none
2025-12-31T15:58:33.525 [DEBUG] [Thread-130584] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:58:33.582 [DEBUG] [Thread-130584] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:58:33.582 [DEBUG] [Thread-130584] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:58:33.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T15:58:33.583 [DEBUG] [Thread-130584] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T15:58:33.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:58:33.638 [DEBUG] [Thread-130584] [transport.py] [_log()] userauth is OK
2025-12-31T15:58:33.638 [DEBUG] [Thread-130584] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:58:33.638 [DEBUG] [Thread-130584] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:58:33.638 [DEBUG] [Thread-130584] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T15:58:33.638 [DEBUG] [Thread-130584] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:58:33.657 [INFO] [Thread-130584] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:58:33.658 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T15:58:33.658 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:58:34.469 [DEBUG] [Thread-130584] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:58:34.469 [DEBUG] [Thread-130584] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:58:34.517 [DEBUG] [Thread-130584] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:58:34.518 [DEBUG] [Thread-130584] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:58:34.527 [DEBUG] [Thread-130584] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:58:34.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:58:34.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T15:58:34.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T15:58:34.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:58:34.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:58:34.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:58:34.564 [DEBUG] [Thread-130584] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:58:46.305 [DEBUG] [Thread-130586 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:59:01.355 [DEBUG] [Thread-130587 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:59:04.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T15:59:04.586 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T15:59:04.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T15:59:05.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 15, 58, 40), 31.25, 12.37, 0.0, 37.72, 26.75, 0, 0, 0, 2, 0, 0),)
2025-12-31T15:59:05.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 15:58:40
2025-12-31T15:59:05.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T15:59:05.583 [DEBUG] [Thread-130588] [transport.py] [_log()] starting thread (client mode): 0xb957bb50
2025-12-31T15:59:05.583 [DEBUG] [Thread-130588] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:59:05.603 [DEBUG] [Thread-130588] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T15:59:05.603 [INFO] [Thread-130588] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T15:59:05.606 [DEBUG] [Thread-130588] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:59:05.606 [DEBUG] [Thread-130588] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T15:59:05.607 [DEBUG] [Thread-130588] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:59:05.607 [DEBUG] [Thread-130588] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:59:05.607 [DEBUG] [Thread-130588] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:59:05.607 [DEBUG] [Thread-130588] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:59:05.607 [DEBUG] [Thread-130588] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:59:05.607 [DEBUG] [Thread-130588] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:59:05.607 [DEBUG] [Thread-130588] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:59:05.607 [DEBUG] [Thread-130588] [transport.py] [_log()] client lang: <none>
2025-12-31T15:59:05.607 [DEBUG] [Thread-130588] [transport.py] [_log()] server lang: <none>
2025-12-31T15:59:05.607 [DEBUG] [Thread-130588] [transport.py] [_log()] kex follows: False
2025-12-31T15:59:05.607 [DEBUG] [Thread-130588] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:59:05.607 [DEBUG] [Thread-130588] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:59:05.607 [DEBUG] [Thread-130588] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:59:05.607 [DEBUG] [Thread-130588] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:59:05.608 [DEBUG] [Thread-130588] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:59:05.608 [DEBUG] [Thread-130588] [transport.py] [_log()] Compression: none
2025-12-31T15:59:05.608 [DEBUG] [Thread-130588] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:59:05.625 [DEBUG] [Thread-130588] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:59:05.625 [DEBUG] [Thread-130588] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:59:05.626 [DEBUG] [Thread-130588] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T15:59:05.626 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T15:59:05.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:59:05.669 [DEBUG] [Thread-130588] [transport.py] [_log()] userauth is OK
2025-12-31T15:59:05.669 [DEBUG] [Thread-130588] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:59:05.669 [DEBUG] [Thread-130588] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:59:05.670 [DEBUG] [Thread-130588] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T15:59:05.670 [DEBUG] [Thread-130588] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:59:05.690 [INFO] [Thread-130588] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:59:05.690 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:59:06.345 [DEBUG] [Thread-130588] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:59:06.345 [DEBUG] [Thread-130588] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:59:06.346 [DEBUG] [Thread-130588] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T15:59:06.386 [DEBUG] [Thread-130588] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:59:06.386 [DEBUG] [Thread-130588] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:59:06.390 [DEBUG] [Thread-130588] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:59:06.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:59:06.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T15:59:06.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T15:59:06.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T15:59:06.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:59:06.415 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T15:59:06.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:59:06.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:59:06.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T15:59:06.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.582086 -999.00  +26.20  26.16     18   +0.60 1 2 1 1 1   888    0 25.00 -57.23 ----- 36.2 26.2 298.0 30.1 30.2 -22.4 30.0 -21.0 30.2 -17.0 30.6 -20.2
2025-12-31T15:59:06.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T15:59:06.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T15:59:06.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.582086
2025-12-31T15:59:06.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T15:59:06.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T15:59:06.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T15:59:06.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T15:59:06.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T15:59:06.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T15:58:40', tmtdew=31.25, humidity=12.37, cloud=0.0, wind=37.72, temperature=26.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T13:58:12.230', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T15:59:06.418 [DEBUG] [Thread-130588] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:59:06.502 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T15:59:06.515 [DEBUG] [Thread-130591] [transport.py] [_log()] starting thread (client mode): 0xb9578190
2025-12-31T15:59:06.515 [DEBUG] [Thread-130591] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:59:06.529 [DEBUG] [Thread-130591] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T15:59:06.530 [INFO] [Thread-130591] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T15:59:06.537 [DEBUG] [Thread-130591] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:59:06.537 [DEBUG] [Thread-130591] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T15:59:06.537 [DEBUG] [Thread-130591] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:59:06.537 [DEBUG] [Thread-130591] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:59:06.538 [DEBUG] [Thread-130591] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:59:06.538 [DEBUG] [Thread-130591] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:59:06.538 [DEBUG] [Thread-130591] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:59:06.538 [DEBUG] [Thread-130591] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:59:06.538 [DEBUG] [Thread-130591] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:59:06.538 [DEBUG] [Thread-130591] [transport.py] [_log()] client lang: <none>
2025-12-31T15:59:06.538 [DEBUG] [Thread-130591] [transport.py] [_log()] server lang: <none>
2025-12-31T15:59:06.538 [DEBUG] [Thread-130591] [transport.py] [_log()] kex follows: False
2025-12-31T15:59:06.538 [DEBUG] [Thread-130591] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:59:06.538 [DEBUG] [Thread-130591] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:59:06.538 [DEBUG] [Thread-130591] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:59:06.538 [DEBUG] [Thread-130591] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:59:06.538 [DEBUG] [Thread-130591] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:59:06.538 [DEBUG] [Thread-130591] [transport.py] [_log()] Compression: none
2025-12-31T15:59:06.538 [DEBUG] [Thread-130591] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:59:06.598 [DEBUG] [Thread-130591] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:59:06.599 [DEBUG] [Thread-130591] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:59:06.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T15:59:06.600 [DEBUG] [Thread-130591] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T15:59:06.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:59:06.654 [DEBUG] [Thread-130591] [transport.py] [_log()] userauth is OK
2025-12-31T15:59:06.655 [DEBUG] [Thread-130591] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:59:06.655 [DEBUG] [Thread-130591] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:59:06.655 [DEBUG] [Thread-130591] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T15:59:06.655 [DEBUG] [Thread-130591] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:59:06.674 [INFO] [Thread-130591] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:59:06.674 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T15:59:06.675 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:59:07.517 [DEBUG] [Thread-130591] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:59:07.517 [DEBUG] [Thread-130591] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:59:07.564 [DEBUG] [Thread-130591] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:59:07.565 [DEBUG] [Thread-130591] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:59:07.573 [DEBUG] [Thread-130591] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:59:07.582 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:59:07.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T15:59:07.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T15:59:07.600 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:59:07.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:59:07.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:59:07.608 [DEBUG] [Thread-130591] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:59:11.974 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:59:11.976 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:59:16.385 [DEBUG] [Thread-130593 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:59:22.854 [DEBUG] [Thread-130594 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:59:31.441 [DEBUG] [Thread-130595 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T15:59:37.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T15:59:37.621 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T15:59:37.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T15:59:38.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 15, 59, 12), 31.13, 12.49, 0.0, 39.1, 26.8, 0, 0, 0, 2, 0, 0),)
2025-12-31T15:59:38.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 15:59:12
2025-12-31T15:59:38.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T15:59:38.663 [DEBUG] [Thread-130596] [transport.py] [_log()] starting thread (client mode): 0xb95781c0
2025-12-31T15:59:38.663 [DEBUG] [Thread-130596] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:59:38.675 [DEBUG] [Thread-130596] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T15:59:38.675 [INFO] [Thread-130596] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T15:59:38.678 [DEBUG] [Thread-130596] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:59:38.678 [DEBUG] [Thread-130596] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T15:59:38.678 [DEBUG] [Thread-130596] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:59:38.678 [DEBUG] [Thread-130596] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:59:38.678 [DEBUG] [Thread-130596] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:59:38.679 [DEBUG] [Thread-130596] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:59:38.679 [DEBUG] [Thread-130596] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:59:38.679 [DEBUG] [Thread-130596] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:59:38.679 [DEBUG] [Thread-130596] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:59:38.679 [DEBUG] [Thread-130596] [transport.py] [_log()] client lang: <none>
2025-12-31T15:59:38.679 [DEBUG] [Thread-130596] [transport.py] [_log()] server lang: <none>
2025-12-31T15:59:38.679 [DEBUG] [Thread-130596] [transport.py] [_log()] kex follows: False
2025-12-31T15:59:38.679 [DEBUG] [Thread-130596] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:59:38.679 [DEBUG] [Thread-130596] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:59:38.679 [DEBUG] [Thread-130596] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:59:38.679 [DEBUG] [Thread-130596] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:59:38.679 [DEBUG] [Thread-130596] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:59:38.679 [DEBUG] [Thread-130596] [transport.py] [_log()] Compression: none
2025-12-31T15:59:38.679 [DEBUG] [Thread-130596] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:59:38.697 [DEBUG] [Thread-130596] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:59:38.697 [DEBUG] [Thread-130596] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:59:38.698 [DEBUG] [Thread-130596] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T15:59:38.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T15:59:38.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:59:38.740 [DEBUG] [Thread-130596] [transport.py] [_log()] userauth is OK
2025-12-31T15:59:38.740 [DEBUG] [Thread-130596] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:59:38.741 [DEBUG] [Thread-130596] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:59:38.741 [DEBUG] [Thread-130596] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T15:59:38.741 [DEBUG] [Thread-130596] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:59:38.758 [INFO] [Thread-130596] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:59:38.758 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:59:39.524 [DEBUG] [Thread-130596] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:59:39.524 [DEBUG] [Thread-130596] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:59:39.524 [DEBUG] [Thread-130596] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T15:59:39.565 [DEBUG] [Thread-130596] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:59:39.565 [DEBUG] [Thread-130596] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:59:39.567 [DEBUG] [Thread-130596] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:59:39.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:59:39.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T15:59:39.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T15:59:39.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T15:59:39.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:59:39.580 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T15:59:39.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:59:39.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:59:39.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T15:59:39.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.582433 -999.00  +26.00  33.26     18   +0.00 1 2 2 1 1   888    0 24.92 -59.39 ----- 29.9 33.3 289.8 45.1 30.0 -23.5 29.9 -23.2 30.4 -19.0 30.6 -22.5
2025-12-31T15:59:39.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T15:59:39.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T15:59:39.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.582433
2025-12-31T15:59:39.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T15:59:39.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T15:59:39.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T15:59:39.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T15:59:39.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T15:59:39.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T15:59:12', tmtdew=31.13, humidity=12.49, cloud=0.0, wind=39.1, temperature=26.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T13:58:42.211', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T15:59:39.582 [DEBUG] [Thread-130596] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:59:39.658 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T15:59:39.672 [DEBUG] [Thread-130599] [transport.py] [_log()] starting thread (client mode): 0xb6b15b40
2025-12-31T15:59:39.672 [DEBUG] [Thread-130599] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T15:59:39.687 [DEBUG] [Thread-130599] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T15:59:39.687 [INFO] [Thread-130599] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T15:59:39.695 [DEBUG] [Thread-130599] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T15:59:39.695 [DEBUG] [Thread-130599] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T15:59:39.695 [DEBUG] [Thread-130599] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T15:59:39.695 [DEBUG] [Thread-130599] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:59:39.695 [DEBUG] [Thread-130599] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T15:59:39.695 [DEBUG] [Thread-130599] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:59:39.695 [DEBUG] [Thread-130599] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T15:59:39.695 [DEBUG] [Thread-130599] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T15:59:39.695 [DEBUG] [Thread-130599] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T15:59:39.695 [DEBUG] [Thread-130599] [transport.py] [_log()] client lang: <none>
2025-12-31T15:59:39.695 [DEBUG] [Thread-130599] [transport.py] [_log()] server lang: <none>
2025-12-31T15:59:39.695 [DEBUG] [Thread-130599] [transport.py] [_log()] kex follows: False
2025-12-31T15:59:39.695 [DEBUG] [Thread-130599] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T15:59:39.696 [DEBUG] [Thread-130599] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T15:59:39.696 [DEBUG] [Thread-130599] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T15:59:39.696 [DEBUG] [Thread-130599] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T15:59:39.696 [DEBUG] [Thread-130599] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T15:59:39.696 [DEBUG] [Thread-130599] [transport.py] [_log()] Compression: none
2025-12-31T15:59:39.696 [DEBUG] [Thread-130599] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T15:59:39.754 [DEBUG] [Thread-130599] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T15:59:39.754 [DEBUG] [Thread-130599] [transport.py] [_log()] Switch to new keys ...
2025-12-31T15:59:39.754 [DEBUG] [Thread-130599] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T15:59:39.754 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T15:59:39.754 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T15:59:39.814 [DEBUG] [Thread-130599] [transport.py] [_log()] userauth is OK
2025-12-31T15:59:39.814 [DEBUG] [Thread-130599] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T15:59:39.814 [DEBUG] [Thread-130599] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T15:59:39.814 [DEBUG] [Thread-130599] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T15:59:39.814 [DEBUG] [Thread-130599] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T15:59:39.830 [INFO] [Thread-130599] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T15:59:39.830 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T15:59:39.830 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T15:59:40.660 [DEBUG] [Thread-130599] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T15:59:40.660 [DEBUG] [Thread-130599] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T15:59:40.708 [DEBUG] [Thread-130599] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T15:59:40.708 [DEBUG] [Thread-130599] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T15:59:40.716 [DEBUG] [Thread-130599] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T15:59:40.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T15:59:40.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T15:59:40.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T15:59:40.740 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T15:59:40.740 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T15:59:40.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T15:59:40.748 [DEBUG] [Thread-130599] [transport.py] [_log()] EOF in transport thread
2025-12-31T15:59:46.469 [DEBUG] [Thread-130601 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:00:01.513 [DEBUG] [Thread-130602 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:00:10.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T16:00:10.760 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T16:00:10.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T16:00:11.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 15, 59, 44), 30.59, 13.14, 0.0, 32.41, 26.13, 0, 0, 0, 2, 0, 0),)
2025-12-31T16:00:11.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 15:59:44
2025-12-31T16:00:11.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T16:00:11.741 [DEBUG] [Thread-130603] [transport.py] [_log()] starting thread (client mode): 0xb95d6530
2025-12-31T16:00:11.741 [DEBUG] [Thread-130603] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:00:11.762 [DEBUG] [Thread-130603] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T16:00:11.762 [INFO] [Thread-130603] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T16:00:11.765 [DEBUG] [Thread-130603] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:00:11.765 [DEBUG] [Thread-130603] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T16:00:11.765 [DEBUG] [Thread-130603] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:00:11.765 [DEBUG] [Thread-130603] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:00:11.765 [DEBUG] [Thread-130603] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:00:11.765 [DEBUG] [Thread-130603] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:00:11.765 [DEBUG] [Thread-130603] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:00:11.765 [DEBUG] [Thread-130603] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:00:11.765 [DEBUG] [Thread-130603] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:00:11.766 [DEBUG] [Thread-130603] [transport.py] [_log()] client lang: <none>
2025-12-31T16:00:11.766 [DEBUG] [Thread-130603] [transport.py] [_log()] server lang: <none>
2025-12-31T16:00:11.766 [DEBUG] [Thread-130603] [transport.py] [_log()] kex follows: False
2025-12-31T16:00:11.766 [DEBUG] [Thread-130603] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:00:11.766 [DEBUG] [Thread-130603] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:00:11.766 [DEBUG] [Thread-130603] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:00:11.766 [DEBUG] [Thread-130603] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:00:11.766 [DEBUG] [Thread-130603] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:00:11.766 [DEBUG] [Thread-130603] [transport.py] [_log()] Compression: none
2025-12-31T16:00:11.766 [DEBUG] [Thread-130603] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:00:11.776 [DEBUG] [Thread-130603] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:00:11.776 [DEBUG] [Thread-130603] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:00:11.777 [DEBUG] [Thread-130603] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T16:00:11.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T16:00:11.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:00:11.779 [DEBUG] [Thread-130603] [transport.py] [_log()] userauth is OK
2025-12-31T16:00:11.780 [DEBUG] [Thread-130603] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:00:11.780 [DEBUG] [Thread-130603] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:00:11.780 [DEBUG] [Thread-130603] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T16:00:11.780 [DEBUG] [Thread-130603] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:00:11.802 [INFO] [Thread-130603] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:00:11.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:00:12.117 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:00:12.118 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:00:16.548 [DEBUG] [Thread-130605 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:00:18.751 [DEBUG] [Thread-130603] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:00:18.752 [DEBUG] [Thread-130603] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:00:18.752 [DEBUG] [Thread-130603] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T16:00:18.792 [DEBUG] [Thread-130603] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:00:18.792 [DEBUG] [Thread-130603] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:00:18.794 [DEBUG] [Thread-130603] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:00:18.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:00:18.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T16:00:18.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T16:00:18.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T16:00:18.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:00:18.866 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T16:00:18.866 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:00:18.866 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:00:18.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T16:00:18.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.582780 -999.00  +26.10  19.82     18   +0.30 1 2 1 1 1   888    0 24.57 -58.40 ----- 24.5 19.8 286.2 29.8 30.4 -20.6 30.2 -23.5 30.3 -18.6 30.9 -17.9
2025-12-31T16:00:18.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T16:00:18.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T16:00:18.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.582780
2025-12-31T16:00:18.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T16:00:18.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T16:00:18.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T16:00:18.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T16:00:18.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T16:00:18.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T15:59:44', tmtdew=30.59, humidity=13.14, cloud=0.0, wind=32.41, temperature=26.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T13:59:12.192', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T16:00:18.868 [DEBUG] [Thread-130603] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:00:18.942 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T16:00:18.954 [DEBUG] [Thread-130607] [transport.py] [_log()] starting thread (client mode): 0xb6bb16c0
2025-12-31T16:00:18.955 [DEBUG] [Thread-130607] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:00:18.969 [DEBUG] [Thread-130607] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T16:00:18.969 [INFO] [Thread-130607] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T16:00:18.976 [DEBUG] [Thread-130607] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:00:18.976 [DEBUG] [Thread-130607] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T16:00:18.977 [DEBUG] [Thread-130607] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:00:18.977 [DEBUG] [Thread-130607] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:00:18.977 [DEBUG] [Thread-130607] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:00:18.977 [DEBUG] [Thread-130607] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:00:18.977 [DEBUG] [Thread-130607] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:00:18.977 [DEBUG] [Thread-130607] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:00:18.977 [DEBUG] [Thread-130607] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:00:18.977 [DEBUG] [Thread-130607] [transport.py] [_log()] client lang: <none>
2025-12-31T16:00:18.977 [DEBUG] [Thread-130607] [transport.py] [_log()] server lang: <none>
2025-12-31T16:00:18.977 [DEBUG] [Thread-130607] [transport.py] [_log()] kex follows: False
2025-12-31T16:00:18.977 [DEBUG] [Thread-130607] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:00:18.977 [DEBUG] [Thread-130607] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:00:18.977 [DEBUG] [Thread-130607] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:00:18.977 [DEBUG] [Thread-130607] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:00:18.977 [DEBUG] [Thread-130607] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:00:18.977 [DEBUG] [Thread-130607] [transport.py] [_log()] Compression: none
2025-12-31T16:00:18.977 [DEBUG] [Thread-130607] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:00:19.033 [DEBUG] [Thread-130607] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:00:19.033 [DEBUG] [Thread-130607] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:00:19.033 [DEBUG] [Thread-130607] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T16:00:19.034 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T16:00:19.034 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:00:19.090 [DEBUG] [Thread-130607] [transport.py] [_log()] userauth is OK
2025-12-31T16:00:19.090 [DEBUG] [Thread-130607] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:00:19.090 [DEBUG] [Thread-130607] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:00:19.090 [DEBUG] [Thread-130607] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T16:00:19.090 [DEBUG] [Thread-130607] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:00:19.105 [INFO] [Thread-130607] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:00:19.106 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T16:00:19.106 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:00:19.946 [DEBUG] [Thread-130607] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:00:19.946 [DEBUG] [Thread-130607] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:00:19.996 [DEBUG] [Thread-130607] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:00:19.996 [DEBUG] [Thread-130607] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:00:20.006 [DEBUG] [Thread-130607] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:00:20.014 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:00:20.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T16:00:20.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T16:00:20.034 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:00:20.034 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:00:20.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:00:20.045 [DEBUG] [Thread-130607] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:00:22.901 [DEBUG] [Thread-130609 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:00:31.579 [DEBUG] [Thread-130610 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:00:46.630 [DEBUG] [Thread-130611 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:00:50.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T16:00:50.056 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T16:00:50.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T16:00:50.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 16, 0, 16), 29.87, 13.78, 0.0, 30.05, 25.89, 0, 0, 0, 2, 0, 0),)
2025-12-31T16:00:50.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 16:00:16
2025-12-31T16:00:50.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T16:00:51.063 [DEBUG] [Thread-130612] [transport.py] [_log()] starting thread (client mode): 0xb6bb3910
2025-12-31T16:00:51.064 [DEBUG] [Thread-130612] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:00:51.078 [DEBUG] [Thread-130612] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T16:00:51.078 [INFO] [Thread-130612] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T16:00:51.081 [DEBUG] [Thread-130612] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:00:51.081 [DEBUG] [Thread-130612] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T16:00:51.082 [DEBUG] [Thread-130612] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:00:51.082 [DEBUG] [Thread-130612] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:00:51.082 [DEBUG] [Thread-130612] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:00:51.082 [DEBUG] [Thread-130612] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:00:51.082 [DEBUG] [Thread-130612] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:00:51.082 [DEBUG] [Thread-130612] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:00:51.082 [DEBUG] [Thread-130612] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:00:51.082 [DEBUG] [Thread-130612] [transport.py] [_log()] client lang: <none>
2025-12-31T16:00:51.082 [DEBUG] [Thread-130612] [transport.py] [_log()] server lang: <none>
2025-12-31T16:00:51.082 [DEBUG] [Thread-130612] [transport.py] [_log()] kex follows: False
2025-12-31T16:00:51.082 [DEBUG] [Thread-130612] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:00:51.082 [DEBUG] [Thread-130612] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:00:51.082 [DEBUG] [Thread-130612] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:00:51.082 [DEBUG] [Thread-130612] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:00:51.082 [DEBUG] [Thread-130612] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:00:51.082 [DEBUG] [Thread-130612] [transport.py] [_log()] Compression: none
2025-12-31T16:00:51.082 [DEBUG] [Thread-130612] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:00:51.099 [DEBUG] [Thread-130612] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:00:51.100 [DEBUG] [Thread-130612] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:00:51.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T16:00:51.101 [DEBUG] [Thread-130612] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T16:00:51.102 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:00:51.103 [DEBUG] [Thread-130612] [transport.py] [_log()] userauth is OK
2025-12-31T16:00:51.103 [DEBUG] [Thread-130612] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:00:51.103 [DEBUG] [Thread-130612] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:00:51.103 [DEBUG] [Thread-130612] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T16:00:51.103 [DEBUG] [Thread-130612] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:00:51.127 [INFO] [Thread-130612] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:00:51.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:00:51.735 [DEBUG] [Thread-130612] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:00:51.736 [DEBUG] [Thread-130612] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:00:51.736 [DEBUG] [Thread-130612] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T16:00:51.777 [DEBUG] [Thread-130612] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:00:51.777 [DEBUG] [Thread-130612] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:00:51.781 [DEBUG] [Thread-130612] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:00:51.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:00:51.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T16:00:51.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T16:00:51.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T16:00:51.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:00:51.807 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T16:00:51.807 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:00:51.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:00:51.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T16:00:51.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.583475 -999.00  +26.10  23.78     19   +0.90 1 1 1 1 1   888    0 24.40 -60.84 ----- 25.0 23.8 299.2 34.2 30.1 -22.3 30.0 -23.0 30.0 -24.9 30.5 -21.1
2025-12-31T16:00:51.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T16:00:51.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T16:00:51.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.583475
2025-12-31T16:00:51.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T16:00:51.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T16:00:51.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T16:00:51.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T16:00:51.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T16:00:51.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T16:00:16', tmtdew=29.87, humidity=13.78, cloud=0.0, wind=30.05, temperature=25.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T14:00:12.240', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T16:00:51.810 [DEBUG] [Thread-130612] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:00:51.902 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T16:00:51.914 [DEBUG] [Thread-130615] [transport.py] [_log()] starting thread (client mode): 0xb95d72e0
2025-12-31T16:00:51.915 [DEBUG] [Thread-130615] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:00:51.929 [DEBUG] [Thread-130615] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T16:00:51.929 [INFO] [Thread-130615] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T16:00:51.936 [DEBUG] [Thread-130615] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:00:51.937 [DEBUG] [Thread-130615] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T16:00:51.937 [DEBUG] [Thread-130615] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:00:51.937 [DEBUG] [Thread-130615] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:00:51.937 [DEBUG] [Thread-130615] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:00:51.937 [DEBUG] [Thread-130615] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:00:51.937 [DEBUG] [Thread-130615] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:00:51.937 [DEBUG] [Thread-130615] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:00:51.937 [DEBUG] [Thread-130615] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:00:51.937 [DEBUG] [Thread-130615] [transport.py] [_log()] client lang: <none>
2025-12-31T16:00:51.937 [DEBUG] [Thread-130615] [transport.py] [_log()] server lang: <none>
2025-12-31T16:00:51.937 [DEBUG] [Thread-130615] [transport.py] [_log()] kex follows: False
2025-12-31T16:00:51.937 [DEBUG] [Thread-130615] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:00:51.937 [DEBUG] [Thread-130615] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:00:51.937 [DEBUG] [Thread-130615] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:00:51.937 [DEBUG] [Thread-130615] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:00:51.937 [DEBUG] [Thread-130615] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:00:51.937 [DEBUG] [Thread-130615] [transport.py] [_log()] Compression: none
2025-12-31T16:00:51.937 [DEBUG] [Thread-130615] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:00:51.995 [DEBUG] [Thread-130615] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:00:51.996 [DEBUG] [Thread-130615] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:00:51.996 [DEBUG] [Thread-130615] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T16:00:51.997 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T16:00:51.997 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:00:52.052 [DEBUG] [Thread-130615] [transport.py] [_log()] userauth is OK
2025-12-31T16:00:52.052 [DEBUG] [Thread-130615] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:00:52.052 [DEBUG] [Thread-130615] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:00:52.053 [DEBUG] [Thread-130615] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T16:00:52.053 [DEBUG] [Thread-130615] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:00:52.071 [INFO] [Thread-130615] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:00:52.072 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T16:00:52.072 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:00:52.886 [DEBUG] [Thread-130615] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:00:52.886 [DEBUG] [Thread-130615] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:00:52.934 [DEBUG] [Thread-130615] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:00:52.934 [DEBUG] [Thread-130615] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:00:52.943 [DEBUG] [Thread-130615] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:00:52.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:00:52.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T16:00:52.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T16:00:52.972 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:00:52.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:00:52.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:00:52.980 [DEBUG] [Thread-130615] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:01:01.660 [DEBUG] [Thread-130617 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:01:12.258 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:01:12.260 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:01:16.703 [DEBUG] [Thread-130618 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:01:22.951 [DEBUG] [Thread-130619 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:01:22.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T16:01:22.996 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T16:01:22.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T16:01:23.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 16, 1, 20), 29.66, 14.12, 0.0, 38.36, 26.02, 0, 0, 0, 2, 0, 0),)
2025-12-31T16:01:23.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 16:01:20
2025-12-31T16:01:23.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T16:01:23.966 [DEBUG] [Thread-130620] [transport.py] [_log()] starting thread (client mode): 0xb6b61000
2025-12-31T16:01:23.966 [DEBUG] [Thread-130620] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:01:23.987 [DEBUG] [Thread-130620] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T16:01:23.988 [INFO] [Thread-130620] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T16:01:23.991 [DEBUG] [Thread-130620] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:01:23.991 [DEBUG] [Thread-130620] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T16:01:23.991 [DEBUG] [Thread-130620] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:01:23.991 [DEBUG] [Thread-130620] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:01:23.991 [DEBUG] [Thread-130620] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:01:23.991 [DEBUG] [Thread-130620] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:01:23.991 [DEBUG] [Thread-130620] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:01:23.991 [DEBUG] [Thread-130620] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:01:23.991 [DEBUG] [Thread-130620] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:01:23.991 [DEBUG] [Thread-130620] [transport.py] [_log()] client lang: <none>
2025-12-31T16:01:23.991 [DEBUG] [Thread-130620] [transport.py] [_log()] server lang: <none>
2025-12-31T16:01:23.992 [DEBUG] [Thread-130620] [transport.py] [_log()] kex follows: False
2025-12-31T16:01:23.992 [DEBUG] [Thread-130620] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:01:23.992 [DEBUG] [Thread-130620] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:01:23.992 [DEBUG] [Thread-130620] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:01:23.992 [DEBUG] [Thread-130620] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:01:23.992 [DEBUG] [Thread-130620] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:01:23.992 [DEBUG] [Thread-130620] [transport.py] [_log()] Compression: none
2025-12-31T16:01:23.992 [DEBUG] [Thread-130620] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:01:24.010 [DEBUG] [Thread-130620] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:01:24.010 [DEBUG] [Thread-130620] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:01:24.010 [DEBUG] [Thread-130620] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T16:01:24.011 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T16:01:24.011 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:01:24.011 [DEBUG] [Thread-130620] [transport.py] [_log()] userauth is OK
2025-12-31T16:01:24.011 [DEBUG] [Thread-130620] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:01:24.011 [DEBUG] [Thread-130620] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:01:24.011 [DEBUG] [Thread-130620] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T16:01:24.011 [DEBUG] [Thread-130620] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:01:24.032 [INFO] [Thread-130620] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:01:24.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:01:24.789 [DEBUG] [Thread-130620] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:01:24.789 [DEBUG] [Thread-130620] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:01:24.790 [DEBUG] [Thread-130620] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T16:01:24.830 [DEBUG] [Thread-130620] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:01:24.831 [DEBUG] [Thread-130620] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:01:24.834 [DEBUG] [Thread-130620] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:01:24.846 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:01:24.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T16:01:24.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T16:01:24.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T16:01:24.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:01:24.859 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T16:01:24.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:01:24.859 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:01:24.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T16:01:24.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.583822 -999.00  +26.00  22.76     18   +0.50 1 2 1 1 1   888    0 24.57 -71.47 ----- 27.7 22.8 297.0 38.7 30.4 -20.3 30.2 -20.7 30.1 -23.3 30.8 -17.7
2025-12-31T16:01:24.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T16:01:24.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T16:01:24.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.583822
2025-12-31T16:01:24.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T16:01:24.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T16:01:24.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T16:01:24.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T16:01:24.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T16:01:24.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T16:01:20', tmtdew=29.66, humidity=14.12, cloud=0.0, wind=38.36, temperature=26.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T14:00:42.221', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T16:01:24.862 [DEBUG] [Thread-130620] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:01:24.945 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T16:01:24.960 [DEBUG] [Thread-130623] [transport.py] [_log()] starting thread (client mode): 0xb6b637c0
2025-12-31T16:01:24.960 [DEBUG] [Thread-130623] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:01:24.974 [DEBUG] [Thread-130623] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T16:01:24.975 [INFO] [Thread-130623] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T16:01:24.982 [DEBUG] [Thread-130623] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:01:24.982 [DEBUG] [Thread-130623] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T16:01:24.983 [DEBUG] [Thread-130623] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:01:24.983 [DEBUG] [Thread-130623] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:01:24.983 [DEBUG] [Thread-130623] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:01:24.983 [DEBUG] [Thread-130623] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:01:24.983 [DEBUG] [Thread-130623] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:01:24.984 [DEBUG] [Thread-130623] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:01:24.984 [DEBUG] [Thread-130623] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:01:24.984 [DEBUG] [Thread-130623] [transport.py] [_log()] client lang: <none>
2025-12-31T16:01:24.984 [DEBUG] [Thread-130623] [transport.py] [_log()] server lang: <none>
2025-12-31T16:01:24.984 [DEBUG] [Thread-130623] [transport.py] [_log()] kex follows: False
2025-12-31T16:01:24.984 [DEBUG] [Thread-130623] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:01:24.984 [DEBUG] [Thread-130623] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:01:24.984 [DEBUG] [Thread-130623] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:01:24.984 [DEBUG] [Thread-130623] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:01:24.984 [DEBUG] [Thread-130623] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:01:24.984 [DEBUG] [Thread-130623] [transport.py] [_log()] Compression: none
2025-12-31T16:01:24.984 [DEBUG] [Thread-130623] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:01:25.044 [DEBUG] [Thread-130623] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:01:25.044 [DEBUG] [Thread-130623] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:01:25.045 [DEBUG] [Thread-130623] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T16:01:25.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T16:01:25.046 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:01:25.100 [DEBUG] [Thread-130623] [transport.py] [_log()] userauth is OK
2025-12-31T16:01:25.101 [DEBUG] [Thread-130623] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:01:25.101 [DEBUG] [Thread-130623] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:01:25.101 [DEBUG] [Thread-130623] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T16:01:25.101 [DEBUG] [Thread-130623] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:01:25.119 [INFO] [Thread-130623] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:01:25.120 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T16:01:25.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:01:25.942 [DEBUG] [Thread-130623] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:01:25.942 [DEBUG] [Thread-130623] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:01:25.990 [DEBUG] [Thread-130623] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:01:25.990 [DEBUG] [Thread-130623] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:01:25.999 [DEBUG] [Thread-130623] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:01:26.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:01:26.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T16:01:26.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T16:01:26.028 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:01:26.028 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:01:26.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:01:26.037 [DEBUG] [Thread-130623] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:01:31.739 [DEBUG] [Thread-130625 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:01:46.789 [DEBUG] [Thread-130626 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:01:56.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T16:01:56.059 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T16:01:56.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T16:01:56.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 16, 1, 52), 29.48, 14.22, 0.0, 35.27, 25.87, 0, 0, 0, 2, 0, 0),)
2025-12-31T16:01:56.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 16:01:52
2025-12-31T16:01:56.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T16:01:57.048 [DEBUG] [Thread-130627] [transport.py] [_log()] starting thread (client mode): 0xb6b63190
2025-12-31T16:01:57.048 [DEBUG] [Thread-130627] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:01:57.069 [DEBUG] [Thread-130627] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T16:01:57.069 [INFO] [Thread-130627] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T16:01:57.073 [DEBUG] [Thread-130627] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:01:57.073 [DEBUG] [Thread-130627] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T16:01:57.073 [DEBUG] [Thread-130627] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:01:57.073 [DEBUG] [Thread-130627] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:01:57.073 [DEBUG] [Thread-130627] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:01:57.073 [DEBUG] [Thread-130627] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:01:57.073 [DEBUG] [Thread-130627] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:01:57.073 [DEBUG] [Thread-130627] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:01:57.074 [DEBUG] [Thread-130627] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:01:57.074 [DEBUG] [Thread-130627] [transport.py] [_log()] client lang: <none>
2025-12-31T16:01:57.074 [DEBUG] [Thread-130627] [transport.py] [_log()] server lang: <none>
2025-12-31T16:01:57.074 [DEBUG] [Thread-130627] [transport.py] [_log()] kex follows: False
2025-12-31T16:01:57.074 [DEBUG] [Thread-130627] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:01:57.074 [DEBUG] [Thread-130627] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:01:57.074 [DEBUG] [Thread-130627] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:01:57.074 [DEBUG] [Thread-130627] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:01:57.074 [DEBUG] [Thread-130627] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:01:57.074 [DEBUG] [Thread-130627] [transport.py] [_log()] Compression: none
2025-12-31T16:01:57.074 [DEBUG] [Thread-130627] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:01:57.092 [DEBUG] [Thread-130627] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:01:57.093 [DEBUG] [Thread-130627] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:01:57.093 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T16:01:57.094 [DEBUG] [Thread-130627] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T16:01:57.095 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:01:57.096 [DEBUG] [Thread-130627] [transport.py] [_log()] userauth is OK
2025-12-31T16:01:57.097 [DEBUG] [Thread-130627] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:01:57.097 [DEBUG] [Thread-130627] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:01:57.097 [DEBUG] [Thread-130627] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T16:01:57.097 [DEBUG] [Thread-130627] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:01:57.132 [INFO] [Thread-130627] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:01:57.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:01:57.763 [DEBUG] [Thread-130627] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:01:57.764 [DEBUG] [Thread-130627] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:01:57.764 [DEBUG] [Thread-130627] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T16:01:57.805 [DEBUG] [Thread-130627] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:01:57.805 [DEBUG] [Thread-130627] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:01:57.808 [DEBUG] [Thread-130627] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:01:57.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:01:57.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T16:01:57.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T16:01:57.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T16:01:57.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:01:57.825 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T16:01:57.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:01:57.825 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:01:57.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T16:01:57.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.584169 -999.00  +26.20  22.41     19   +0.90 1 2 1 1 1   888    0 24.12 -73.75 ----- 25.1 22.4 286.8 33.3 30.6 -19.9 30.5 -20.9 30.6 -21.2 31.1 -17.3
2025-12-31T16:01:57.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T16:01:57.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T16:01:57.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.584169
2025-12-31T16:01:57.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T16:01:57.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T16:01:57.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T16:01:57.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T16:01:57.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T16:01:57.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T16:01:52', tmtdew=29.48, humidity=14.22, cloud=0.0, wind=35.27, temperature=25.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T14:01:12.202', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T16:01:57.828 [DEBUG] [Thread-130627] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:01:57.908 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T16:01:57.920 [DEBUG] [Thread-130630] [transport.py] [_log()] starting thread (client mode): 0xb95d7820
2025-12-31T16:01:57.920 [DEBUG] [Thread-130630] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:01:57.934 [DEBUG] [Thread-130630] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T16:01:57.935 [INFO] [Thread-130630] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T16:01:57.942 [DEBUG] [Thread-130630] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:01:57.942 [DEBUG] [Thread-130630] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T16:01:57.942 [DEBUG] [Thread-130630] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:01:57.942 [DEBUG] [Thread-130630] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:01:57.942 [DEBUG] [Thread-130630] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:01:57.942 [DEBUG] [Thread-130630] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:01:57.942 [DEBUG] [Thread-130630] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:01:57.942 [DEBUG] [Thread-130630] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:01:57.942 [DEBUG] [Thread-130630] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:01:57.943 [DEBUG] [Thread-130630] [transport.py] [_log()] client lang: <none>
2025-12-31T16:01:57.943 [DEBUG] [Thread-130630] [transport.py] [_log()] server lang: <none>
2025-12-31T16:01:57.943 [DEBUG] [Thread-130630] [transport.py] [_log()] kex follows: False
2025-12-31T16:01:57.943 [DEBUG] [Thread-130630] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:01:57.943 [DEBUG] [Thread-130630] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:01:57.943 [DEBUG] [Thread-130630] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:01:57.943 [DEBUG] [Thread-130630] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:01:57.943 [DEBUG] [Thread-130630] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:01:57.943 [DEBUG] [Thread-130630] [transport.py] [_log()] Compression: none
2025-12-31T16:01:57.943 [DEBUG] [Thread-130630] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:01:58.001 [DEBUG] [Thread-130630] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:01:58.001 [DEBUG] [Thread-130630] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:01:58.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T16:01:58.003 [DEBUG] [Thread-130630] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T16:01:58.003 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:01:58.058 [DEBUG] [Thread-130630] [transport.py] [_log()] userauth is OK
2025-12-31T16:01:58.058 [DEBUG] [Thread-130630] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:01:58.058 [DEBUG] [Thread-130630] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:01:58.058 [DEBUG] [Thread-130630] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T16:01:58.058 [DEBUG] [Thread-130630] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:01:58.076 [INFO] [Thread-130630] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:01:58.076 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T16:01:58.077 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:01:58.878 [DEBUG] [Thread-130630] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:01:58.878 [DEBUG] [Thread-130630] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:01:58.926 [DEBUG] [Thread-130630] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:01:58.926 [DEBUG] [Thread-130630] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:01:58.935 [DEBUG] [Thread-130630] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:01:58.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:01:58.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T16:01:58.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T16:01:58.967 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:01:58.967 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:01:58.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:01:58.976 [DEBUG] [Thread-130630] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:02:01.826 [DEBUG] [Thread-130632 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:02:12.402 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:02:12.403 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:02:16.867 [DEBUG] [Thread-130633 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:02:23.011 [DEBUG] [Thread-130634 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:02:28.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T16:02:28.998 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T16:02:29.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T16:02:29.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 16, 2, 24), 29.61, 14.09, 0.0, 32.34, 25.85, 0, 0, 0, 2, 0, 0),)
2025-12-31T16:02:29.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 16:02:24
2025-12-31T16:02:29.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T16:02:29.965 [DEBUG] [Thread-130635] [transport.py] [_log()] starting thread (client mode): 0xb95d6110
2025-12-31T16:02:29.965 [DEBUG] [Thread-130635] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:02:29.986 [DEBUG] [Thread-130635] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T16:02:29.987 [INFO] [Thread-130635] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T16:02:29.990 [DEBUG] [Thread-130635] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:02:29.990 [DEBUG] [Thread-130635] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T16:02:29.990 [DEBUG] [Thread-130635] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:02:29.990 [DEBUG] [Thread-130635] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:02:29.990 [DEBUG] [Thread-130635] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:02:29.990 [DEBUG] [Thread-130635] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:02:29.990 [DEBUG] [Thread-130635] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:02:29.990 [DEBUG] [Thread-130635] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:02:29.990 [DEBUG] [Thread-130635] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:02:29.990 [DEBUG] [Thread-130635] [transport.py] [_log()] client lang: <none>
2025-12-31T16:02:29.990 [DEBUG] [Thread-130635] [transport.py] [_log()] server lang: <none>
2025-12-31T16:02:29.990 [DEBUG] [Thread-130635] [transport.py] [_log()] kex follows: False
2025-12-31T16:02:29.990 [DEBUG] [Thread-130635] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:02:29.990 [DEBUG] [Thread-130635] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:02:29.990 [DEBUG] [Thread-130635] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:02:29.990 [DEBUG] [Thread-130635] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:02:29.990 [DEBUG] [Thread-130635] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:02:29.990 [DEBUG] [Thread-130635] [transport.py] [_log()] Compression: none
2025-12-31T16:02:29.991 [DEBUG] [Thread-130635] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:02:30.009 [DEBUG] [Thread-130635] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:02:30.009 [DEBUG] [Thread-130635] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:02:30.010 [DEBUG] [Thread-130635] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T16:02:30.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T16:02:30.011 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:02:30.012 [DEBUG] [Thread-130635] [transport.py] [_log()] userauth is OK
2025-12-31T16:02:30.012 [DEBUG] [Thread-130635] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:02:30.013 [DEBUG] [Thread-130635] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:02:30.013 [DEBUG] [Thread-130635] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T16:02:30.013 [DEBUG] [Thread-130635] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:02:30.037 [INFO] [Thread-130635] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:02:30.037 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:02:30.834 [DEBUG] [Thread-130635] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:02:30.835 [DEBUG] [Thread-130635] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:02:30.835 [DEBUG] [Thread-130635] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T16:02:30.876 [DEBUG] [Thread-130635] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:02:30.876 [DEBUG] [Thread-130635] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:02:30.879 [DEBUG] [Thread-130635] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:02:30.891 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:02:30.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T16:02:30.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T16:02:30.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T16:02:30.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:02:30.902 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T16:02:30.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:02:30.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:02:30.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T16:02:30.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.584516 -999.00  +26.10  32.62     19   +1.00 1 2 2 1 1   888    0 24.16 -78.51 ----- 27.0 32.6 289.4 38.8 30.7 -21.1 30.5 -20.9 30.8 -18.8 31.4 -19.1
2025-12-31T16:02:30.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T16:02:30.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T16:02:30.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.584516
2025-12-31T16:02:30.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T16:02:30.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T16:02:30.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T16:02:30.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T16:02:30.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T16:02:30.905 [DEBUG] [Thread-130635] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:02:30.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T16:02:24', tmtdew=29.61, humidity=14.09, cloud=0.0, wind=32.34, temperature=25.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T14:01:42.182', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T16:02:30.989 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T16:02:31.000 [DEBUG] [Thread-130638] [transport.py] [_log()] starting thread (client mode): 0xb6bb85b0
2025-12-31T16:02:31.000 [DEBUG] [Thread-130638] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:02:31.015 [DEBUG] [Thread-130638] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T16:02:31.015 [INFO] [Thread-130638] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T16:02:31.023 [DEBUG] [Thread-130638] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:02:31.023 [DEBUG] [Thread-130638] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T16:02:31.023 [DEBUG] [Thread-130638] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:02:31.023 [DEBUG] [Thread-130638] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:02:31.023 [DEBUG] [Thread-130638] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:02:31.024 [DEBUG] [Thread-130638] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:02:31.024 [DEBUG] [Thread-130638] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:02:31.024 [DEBUG] [Thread-130638] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:02:31.024 [DEBUG] [Thread-130638] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:02:31.024 [DEBUG] [Thread-130638] [transport.py] [_log()] client lang: <none>
2025-12-31T16:02:31.024 [DEBUG] [Thread-130638] [transport.py] [_log()] server lang: <none>
2025-12-31T16:02:31.024 [DEBUG] [Thread-130638] [transport.py] [_log()] kex follows: False
2025-12-31T16:02:31.024 [DEBUG] [Thread-130638] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:02:31.024 [DEBUG] [Thread-130638] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:02:31.024 [DEBUG] [Thread-130638] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:02:31.024 [DEBUG] [Thread-130638] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:02:31.024 [DEBUG] [Thread-130638] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:02:31.024 [DEBUG] [Thread-130638] [transport.py] [_log()] Compression: none
2025-12-31T16:02:31.024 [DEBUG] [Thread-130638] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:02:31.080 [DEBUG] [Thread-130638] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:02:31.081 [DEBUG] [Thread-130638] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:02:31.082 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T16:02:31.082 [DEBUG] [Thread-130638] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T16:02:31.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:02:31.136 [DEBUG] [Thread-130638] [transport.py] [_log()] userauth is OK
2025-12-31T16:02:31.137 [DEBUG] [Thread-130638] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:02:31.137 [DEBUG] [Thread-130638] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:02:31.137 [DEBUG] [Thread-130638] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T16:02:31.137 [DEBUG] [Thread-130638] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:02:31.156 [INFO] [Thread-130638] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:02:31.157 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T16:02:31.157 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:02:31.895 [DEBUG] [Thread-130640 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:02:31.991 [DEBUG] [Thread-130638] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:02:31.991 [DEBUG] [Thread-130638] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:02:32.039 [DEBUG] [Thread-130638] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:02:32.039 [DEBUG] [Thread-130638] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:02:32.049 [DEBUG] [Thread-130638] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:02:32.058 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:02: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')
2025-12-31T16:02:32.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T16:02:32.077 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:02:32.077 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:02:32.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:02:32.085 [DEBUG] [Thread-130638] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:02:46.953 [DEBUG] [Thread-130641 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:03:01.985 [DEBUG] [Thread-130642 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:03:02.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T16:03:02.079 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T16:03:02.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-12-31T16:03:02.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 16, 2, 56), 30.02, 13.52, 0.0, 32.36, 26.34, 0, 0, 0, 2, 0, 0),)
2025-12-31T16:03:02.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 16:02:56
2025-12-31T16:03:02.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T16:03:03.037 [DEBUG] [Thread-130643] [transport.py] [_log()] starting thread (client mode): 0xb95d6530
2025-12-31T16:03:03.038 [DEBUG] [Thread-130643] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:03:03.058 [DEBUG] [Thread-130643] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T16:03:03.058 [INFO] [Thread-130643] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T16:03:03.061 [DEBUG] [Thread-130643] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:03:03.061 [DEBUG] [Thread-130643] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T16:03:03.061 [DEBUG] [Thread-130643] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:03:03.061 [DEBUG] [Thread-130643] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:03:03.061 [DEBUG] [Thread-130643] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:03:03.061 [DEBUG] [Thread-130643] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:03:03.061 [DEBUG] [Thread-130643] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:03:03.061 [DEBUG] [Thread-130643] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:03:03.061 [DEBUG] [Thread-130643] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:03:03.061 [DEBUG] [Thread-130643] [transport.py] [_log()] client lang: <none>
2025-12-31T16:03:03.061 [DEBUG] [Thread-130643] [transport.py] [_log()] server lang: <none>
2025-12-31T16:03:03.061 [DEBUG] [Thread-130643] [transport.py] [_log()] kex follows: False
2025-12-31T16:03:03.061 [DEBUG] [Thread-130643] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:03:03.061 [DEBUG] [Thread-130643] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:03:03.061 [DEBUG] [Thread-130643] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:03:03.061 [DEBUG] [Thread-130643] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:03:03.061 [DEBUG] [Thread-130643] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:03:03.061 [DEBUG] [Thread-130643] [transport.py] [_log()] Compression: none
2025-12-31T16:03:03.061 [DEBUG] [Thread-130643] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:03:03.081 [DEBUG] [Thread-130643] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:03:03.081 [DEBUG] [Thread-130643] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:03:03.082 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T16:03:03.082 [DEBUG] [Thread-130643] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T16:03:03.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:03:03.085 [DEBUG] [Thread-130643] [transport.py] [_log()] userauth is OK
2025-12-31T16:03:03.085 [DEBUG] [Thread-130643] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:03:03.085 [DEBUG] [Thread-130643] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:03:03.085 [DEBUG] [Thread-130643] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T16:03:03.085 [DEBUG] [Thread-130643] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:03:03.109 [INFO] [Thread-130643] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:03:03.110 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:03:03.722 [DEBUG] [Thread-130643] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:03:03.722 [DEBUG] [Thread-130643] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:03:03.723 [DEBUG] [Thread-130643] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T16:03:03.764 [DEBUG] [Thread-130643] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:03:03.764 [DEBUG] [Thread-130643] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:03:03.768 [DEBUG] [Thread-130643] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:03:03.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:03:03.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T16:03:03.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T16:03:03.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T16:03:03.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:03:03.797 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T16:03:03.797 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:03:03.797 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:03:03.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T16:03:03.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.584863 -999.00  +26.40  30.21     18   +0.90 1 2 2 1 1   888    0 23.36 -86.33 ----- 31.2 30.2 311.0 35.6 30.9 -19.6 30.7 -21.8 30.9 -20.2 31.6 -17.8
2025-12-31T16:03:03.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T16:03:03.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T16:03:03.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.584863
2025-12-31T16:03:03.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T16:03:03.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T16:03:03.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T16:03:03.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T16:03:03.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T16:03:03.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T16:02:56', tmtdew=30.02, humidity=13.52, cloud=0.0, wind=32.36, temperature=26.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T14:02:12.163', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T16:03:03.800 [DEBUG] [Thread-130643] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:03:03.881 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T16:03:03.893 [DEBUG] [Thread-130646] [transport.py] [_log()] starting thread (client mode): 0xb95d7880
2025-12-31T16:03:03.893 [DEBUG] [Thread-130646] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:03:03.908 [DEBUG] [Thread-130646] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T16:03:03.908 [INFO] [Thread-130646] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T16:03:03.916 [DEBUG] [Thread-130646] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:03:03.916 [DEBUG] [Thread-130646] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T16:03:03.916 [DEBUG] [Thread-130646] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:03:03.916 [DEBUG] [Thread-130646] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:03:03.916 [DEBUG] [Thread-130646] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:03:03.916 [DEBUG] [Thread-130646] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:03:03.916 [DEBUG] [Thread-130646] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:03:03.916 [DEBUG] [Thread-130646] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:03:03.916 [DEBUG] [Thread-130646] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:03:03.916 [DEBUG] [Thread-130646] [transport.py] [_log()] client lang: <none>
2025-12-31T16:03:03.916 [DEBUG] [Thread-130646] [transport.py] [_log()] server lang: <none>
2025-12-31T16:03:03.916 [DEBUG] [Thread-130646] [transport.py] [_log()] kex follows: False
2025-12-31T16:03:03.916 [DEBUG] [Thread-130646] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:03:03.917 [DEBUG] [Thread-130646] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:03:03.917 [DEBUG] [Thread-130646] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:03:03.917 [DEBUG] [Thread-130646] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:03:03.917 [DEBUG] [Thread-130646] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:03:03.917 [DEBUG] [Thread-130646] [transport.py] [_log()] Compression: none
2025-12-31T16:03:03.917 [DEBUG] [Thread-130646] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:03:03.972 [DEBUG] [Thread-130646] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:03:03.973 [DEBUG] [Thread-130646] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:03:03.973 [DEBUG] [Thread-130646] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T16:03:03.974 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T16:03:03.974 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:03:04.028 [DEBUG] [Thread-130646] [transport.py] [_log()] userauth is OK
2025-12-31T16:03:04.029 [DEBUG] [Thread-130646] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:03:04.029 [DEBUG] [Thread-130646] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:03:04.029 [DEBUG] [Thread-130646] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T16:03:04.029 [DEBUG] [Thread-130646] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:03:04.047 [INFO] [Thread-130646] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:03:04.047 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T16:03:04.048 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:03:04.882 [DEBUG] [Thread-130646] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:03:04.882 [DEBUG] [Thread-130646] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:03:04.930 [DEBUG] [Thread-130646] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:03:04.931 [DEBUG] [Thread-130646] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:03:04.940 [DEBUG] [Thread-130646] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:03:04.949 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:03:04.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T16:03:04.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T16:03:04.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:03:04.969 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:03:04.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:03:04.978 [DEBUG] [Thread-130646] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:03:12.542 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:03:12.543 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:03:17.026 [DEBUG] [Thread-130648 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:03:23.065 [DEBUG] [Thread-130649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:03:32.075 [DEBUG] [Thread-130650 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:03:35.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T16:03:35.000 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T16:03:35.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T16:03:35.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 16, 3, 29), 29.59, 13.93, 0.0, 29.45, 26.24, 0, 0, 0, 2, 0, 0),)
2025-12-31T16:03:35.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 16:03:29
2025-12-31T16:03:35.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T16:03:36.020 [DEBUG] [Thread-130651] [transport.py] [_log()] starting thread (client mode): 0xb95d7430
2025-12-31T16:03:36.020 [DEBUG] [Thread-130651] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:03:36.042 [DEBUG] [Thread-130651] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T16:03:36.042 [INFO] [Thread-130651] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T16:03:36.045 [DEBUG] [Thread-130651] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:03:36.045 [DEBUG] [Thread-130651] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T16:03:36.045 [DEBUG] [Thread-130651] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:03:36.045 [DEBUG] [Thread-130651] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:03:36.045 [DEBUG] [Thread-130651] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:03:36.045 [DEBUG] [Thread-130651] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:03:36.045 [DEBUG] [Thread-130651] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:03:36.045 [DEBUG] [Thread-130651] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:03:36.045 [DEBUG] [Thread-130651] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:03:36.045 [DEBUG] [Thread-130651] [transport.py] [_log()] client lang: <none>
2025-12-31T16:03:36.045 [DEBUG] [Thread-130651] [transport.py] [_log()] server lang: <none>
2025-12-31T16:03:36.045 [DEBUG] [Thread-130651] [transport.py] [_log()] kex follows: False
2025-12-31T16:03:36.045 [DEBUG] [Thread-130651] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:03:36.045 [DEBUG] [Thread-130651] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:03:36.045 [DEBUG] [Thread-130651] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:03:36.045 [DEBUG] [Thread-130651] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:03:36.045 [DEBUG] [Thread-130651] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:03:36.045 [DEBUG] [Thread-130651] [transport.py] [_log()] Compression: none
2025-12-31T16:03:36.045 [DEBUG] [Thread-130651] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:03:36.067 [DEBUG] [Thread-130651] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:03:36.067 [DEBUG] [Thread-130651] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:03:36.067 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T16:03:36.067 [DEBUG] [Thread-130651] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T16:03:36.067 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:03:36.068 [DEBUG] [Thread-130651] [transport.py] [_log()] userauth is OK
2025-12-31T16:03:36.068 [DEBUG] [Thread-130651] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:03:36.068 [DEBUG] [Thread-130651] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:03:36.068 [DEBUG] [Thread-130651] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T16:03:36.068 [DEBUG] [Thread-130651] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:03:36.084 [INFO] [Thread-130651] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:03:36.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:03:36.815 [DEBUG] [Thread-130651] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:03:36.815 [DEBUG] [Thread-130651] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:03:36.815 [DEBUG] [Thread-130651] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T16:03:36.856 [DEBUG] [Thread-130651] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:03:36.856 [DEBUG] [Thread-130651] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:03:36.858 [DEBUG] [Thread-130651] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:03:36.863 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:03:36.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T16:03:36.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T16:03:36.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T16:03:36.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:03:36.869 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T16:03:36.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:03:36.869 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:03:36.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T16:03:36.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.585211 -999.00  +26.00  23.25     19   +1.00 1 2 1 1 1   888    0 23.60 -88.01 ----- 20.9 23.2 306.0 35.0 30.6 -23.5 30.5 -22.3 31.3 -20.3 31.4 -22.9
2025-12-31T16:03:36.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T16:03:36.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T16:03:36.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.585211
2025-12-31T16:03:36.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T16:03:36.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T16:03:36.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T16:03:36.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T16:03:36.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T16:03:36.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T16:03:29', tmtdew=29.59, humidity=13.93, cloud=0.0, wind=29.45, temperature=26.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T14:02:42.230', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T16:03:36.871 [DEBUG] [Thread-130651] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:03:36.943 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T16:03:36.954 [DEBUG] [Thread-130654] [transport.py] [_log()] starting thread (client mode): 0xb6b60160
2025-12-31T16:03:36.954 [DEBUG] [Thread-130654] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:03:36.968 [DEBUG] [Thread-130654] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T16:03:36.968 [INFO] [Thread-130654] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T16:03:36.976 [DEBUG] [Thread-130654] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:03:36.976 [DEBUG] [Thread-130654] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T16:03:36.976 [DEBUG] [Thread-130654] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:03:36.976 [DEBUG] [Thread-130654] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:03:36.976 [DEBUG] [Thread-130654] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:03:36.976 [DEBUG] [Thread-130654] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:03:36.976 [DEBUG] [Thread-130654] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:03:36.976 [DEBUG] [Thread-130654] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:03:36.976 [DEBUG] [Thread-130654] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:03:36.976 [DEBUG] [Thread-130654] [transport.py] [_log()] client lang: <none>
2025-12-31T16:03:36.976 [DEBUG] [Thread-130654] [transport.py] [_log()] server lang: <none>
2025-12-31T16:03:36.976 [DEBUG] [Thread-130654] [transport.py] [_log()] kex follows: False
2025-12-31T16:03:36.976 [DEBUG] [Thread-130654] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:03:36.976 [DEBUG] [Thread-130654] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:03:36.976 [DEBUG] [Thread-130654] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:03:36.976 [DEBUG] [Thread-130654] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:03:36.976 [DEBUG] [Thread-130654] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:03:36.976 [DEBUG] [Thread-130654] [transport.py] [_log()] Compression: none
2025-12-31T16:03:36.976 [DEBUG] [Thread-130654] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:03:37.031 [DEBUG] [Thread-130654] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:03:37.031 [DEBUG] [Thread-130654] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:03:37.031 [DEBUG] [Thread-130654] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T16:03:37.031 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T16:03:37.031 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:03:37.089 [DEBUG] [Thread-130654] [transport.py] [_log()] userauth is OK
2025-12-31T16:03:37.089 [DEBUG] [Thread-130654] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:03:37.089 [DEBUG] [Thread-130654] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:03:37.089 [DEBUG] [Thread-130654] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T16:03:37.089 [DEBUG] [Thread-130654] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:03:37.102 [INFO] [Thread-130654] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:03: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-12-31T16:03:37.102 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:03:37.938 [DEBUG] [Thread-130654] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:03:37.938 [DEBUG] [Thread-130654] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:03:37.986 [DEBUG] [Thread-130654] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:03:37.986 [DEBUG] [Thread-130654] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:03:37.997 [DEBUG] [Thread-130654] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:03:38.006 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:03:38.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-12-31T16:03:38.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T16:03:38.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:03:38.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:03:38.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:03:38.034 [DEBUG] [Thread-130654] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:03:47.106 [DEBUG] [Thread-130656 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:04:02.158 [DEBUG] [Thread-130657 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:04:08.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T16:04:08.057 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T16:04:08.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T16:04:08.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 16, 4, 1), 28.89, 14.6, 0.0, 29.59, 26.17, 0, 0, 0, 2, 0, 0),)
2025-12-31T16:04:08.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 16:04:01
2025-12-31T16:04:08.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T16:04:09.032 [DEBUG] [Thread-130658] [transport.py] [_log()] starting thread (client mode): 0xb6bbad70
2025-12-31T16:04:09.032 [DEBUG] [Thread-130658] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:04:09.048 [DEBUG] [Thread-130658] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T16:04:09.048 [INFO] [Thread-130658] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T16:04:09.051 [DEBUG] [Thread-130658] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:04:09.051 [DEBUG] [Thread-130658] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T16:04:09.052 [DEBUG] [Thread-130658] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:04:09.052 [DEBUG] [Thread-130658] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:04:09.052 [DEBUG] [Thread-130658] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:04:09.052 [DEBUG] [Thread-130658] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:04:09.052 [DEBUG] [Thread-130658] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:04:09.052 [DEBUG] [Thread-130658] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:04:09.052 [DEBUG] [Thread-130658] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:04:09.052 [DEBUG] [Thread-130658] [transport.py] [_log()] client lang: <none>
2025-12-31T16:04:09.052 [DEBUG] [Thread-130658] [transport.py] [_log()] server lang: <none>
2025-12-31T16:04:09.052 [DEBUG] [Thread-130658] [transport.py] [_log()] kex follows: False
2025-12-31T16:04:09.052 [DEBUG] [Thread-130658] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:04:09.052 [DEBUG] [Thread-130658] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:04:09.052 [DEBUG] [Thread-130658] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:04:09.052 [DEBUG] [Thread-130658] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:04:09.052 [DEBUG] [Thread-130658] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:04:09.052 [DEBUG] [Thread-130658] [transport.py] [_log()] Compression: none
2025-12-31T16:04:09.052 [DEBUG] [Thread-130658] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:04:09.070 [DEBUG] [Thread-130658] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:04:09.070 [DEBUG] [Thread-130658] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:04:09.071 [DEBUG] [Thread-130658] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T16:04:09.071 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T16:04:09.072 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:04:09.073 [DEBUG] [Thread-130658] [transport.py] [_log()] userauth is OK
2025-12-31T16:04:09.073 [DEBUG] [Thread-130658] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:04:09.073 [DEBUG] [Thread-130658] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:04:09.073 [DEBUG] [Thread-130658] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T16:04:09.073 [DEBUG] [Thread-130658] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:04:09.091 [INFO] [Thread-130658] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:04:09.092 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:04:09.770 [DEBUG] [Thread-130658] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:04:09.770 [DEBUG] [Thread-130658] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:04:09.770 [DEBUG] [Thread-130658] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T16:04:09.811 [DEBUG] [Thread-130658] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:04:09.811 [DEBUG] [Thread-130658] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:04:09.815 [DEBUG] [Thread-130658] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:04:09.828 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:04:09.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T16:04:09.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T16:04:09.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T16:04:09.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:04:09.840 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T16:04:09.840 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:04:09.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:04:09.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T16:04:09.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.585558 -999.00  +26.20  18.48     19   +1.30 1 1 1 1 1   888    0 23.14 -92.48 ----- 27.0 18.5 304.8 29.1 30.6 -22.1 30.4 -23.5 30.8 -23.7 31.3 -20.2
2025-12-31T16:04:09.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T16:04:09.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T16:04:09.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.585558
2025-12-31T16:04:09.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T16:04:09.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T16:04:09.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T16:04:09.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T16:04:09.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T16:04:09.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T16:04:01', tmtdew=28.89, humidity=14.6, cloud=0.0, wind=29.59, temperature=26.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T14:03:12.211', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T16:04:09.843 [DEBUG] [Thread-130658] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:04:09.926 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T16:04:09.939 [DEBUG] [Thread-130661] [transport.py] [_log()] starting thread (client mode): 0xb6b28ac0
2025-12-31T16:04:09.939 [DEBUG] [Thread-130661] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:04:09.954 [DEBUG] [Thread-130661] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T16:04:09.954 [INFO] [Thread-130661] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T16:04:09.961 [DEBUG] [Thread-130661] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:04:09.961 [DEBUG] [Thread-130661] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T16:04:09.961 [DEBUG] [Thread-130661] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:04:09.961 [DEBUG] [Thread-130661] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:04:09.961 [DEBUG] [Thread-130661] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:04:09.962 [DEBUG] [Thread-130661] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:04:09.962 [DEBUG] [Thread-130661] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:04:09.962 [DEBUG] [Thread-130661] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:04:09.962 [DEBUG] [Thread-130661] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:04:09.962 [DEBUG] [Thread-130661] [transport.py] [_log()] client lang: <none>
2025-12-31T16:04:09.962 [DEBUG] [Thread-130661] [transport.py] [_log()] server lang: <none>
2025-12-31T16:04:09.962 [DEBUG] [Thread-130661] [transport.py] [_log()] kex follows: False
2025-12-31T16:04:09.962 [DEBUG] [Thread-130661] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:04:09.962 [DEBUG] [Thread-130661] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:04:09.962 [DEBUG] [Thread-130661] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:04:09.962 [DEBUG] [Thread-130661] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:04:09.962 [DEBUG] [Thread-130661] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:04:09.962 [DEBUG] [Thread-130661] [transport.py] [_log()] Compression: none
2025-12-31T16:04:09.962 [DEBUG] [Thread-130661] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:04:10.022 [DEBUG] [Thread-130661] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:04:10.022 [DEBUG] [Thread-130661] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:04:10.023 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T16:04:10.023 [DEBUG] [Thread-130661] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T16:04:10.024 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:04:10.078 [DEBUG] [Thread-130661] [transport.py] [_log()] userauth is OK
2025-12-31T16:04:10.078 [DEBUG] [Thread-130661] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:04:10.078 [DEBUG] [Thread-130661] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:04:10.078 [DEBUG] [Thread-130661] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T16:04:10.078 [DEBUG] [Thread-130661] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:04:10.094 [INFO] [Thread-130661] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:04:10.095 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T16:04:10.095 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:04:10.902 [DEBUG] [Thread-130661] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:04:10.903 [DEBUG] [Thread-130661] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:04:10.950 [DEBUG] [Thread-130661] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:04:10.950 [DEBUG] [Thread-130661] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:04:10.958 [DEBUG] [Thread-130661] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:04:10.966 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:04:10.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T16:04:10.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T16:04:10.982 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:04:10.982 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:04:10.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:04:10.990 [DEBUG] [Thread-130661] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:04:12.692 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:04:12.692 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:04:17.188 [DEBUG] [Thread-130663 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:04:23.119 [DEBUG] [Thread-130664 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:04:32.249 [DEBUG] [Thread-130665 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:04:41.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T16:04:41.013 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T16:04:41.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T16:04:41.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 16, 4, 33), 28.8, 14.68, 0.0, 27.68, 26.14, 0, 0, 0, 2, 0, 0),)
2025-12-31T16:04:41.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 16:04:33
2025-12-31T16:04:41.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T16:04:41.976 [DEBUG] [Thread-130666] [transport.py] [_log()] starting thread (client mode): 0xb95d5330
2025-12-31T16:04:41.976 [DEBUG] [Thread-130666] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:04:41.997 [DEBUG] [Thread-130666] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T16:04:41.997 [INFO] [Thread-130666] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T16:04:42.000 [DEBUG] [Thread-130666] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:04:42.000 [DEBUG] [Thread-130666] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T16:04:42.000 [DEBUG] [Thread-130666] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:04:42.000 [DEBUG] [Thread-130666] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:04:42.000 [DEBUG] [Thread-130666] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:04:42.000 [DEBUG] [Thread-130666] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:04:42.000 [DEBUG] [Thread-130666] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:04:42.000 [DEBUG] [Thread-130666] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:04:42.000 [DEBUG] [Thread-130666] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:04:42.000 [DEBUG] [Thread-130666] [transport.py] [_log()] client lang: <none>
2025-12-31T16:04:42.000 [DEBUG] [Thread-130666] [transport.py] [_log()] server lang: <none>
2025-12-31T16:04:42.000 [DEBUG] [Thread-130666] [transport.py] [_log()] kex follows: False
2025-12-31T16:04:42.000 [DEBUG] [Thread-130666] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:04:42.000 [DEBUG] [Thread-130666] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:04:42.000 [DEBUG] [Thread-130666] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:04:42.000 [DEBUG] [Thread-130666] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:04:42.000 [DEBUG] [Thread-130666] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:04:42.000 [DEBUG] [Thread-130666] [transport.py] [_log()] Compression: none
2025-12-31T16:04:42.000 [DEBUG] [Thread-130666] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:04:42.017 [DEBUG] [Thread-130666] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:04:42.017 [DEBUG] [Thread-130666] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:04:42.018 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T16:04:42.018 [DEBUG] [Thread-130666] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T16:04:42.019 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:04:42.020 [DEBUG] [Thread-130666] [transport.py] [_log()] userauth is OK
2025-12-31T16:04:42.021 [DEBUG] [Thread-130666] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:04:42.021 [DEBUG] [Thread-130666] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:04:42.021 [DEBUG] [Thread-130666] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T16:04:42.021 [DEBUG] [Thread-130666] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:04:42.045 [INFO] [Thread-130666] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:04:42.046 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:04:42.880 [DEBUG] [Thread-130666] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:04:42.880 [DEBUG] [Thread-130666] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:04:42.880 [DEBUG] [Thread-130666] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T16:04:42.921 [DEBUG] [Thread-130666] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:04:42.921 [DEBUG] [Thread-130666] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:04:42.924 [DEBUG] [Thread-130666] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:04:42.935 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:04:42.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T16:04:42.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T16:04:42.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T16:04:42.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:04:42.945 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T16:04:42.945 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:04:42.946 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:04:42.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T16:04:42.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.585905 -999.00  +26.50  24.24     19   +1.50 1 2 1 1 1   888    0 22.64 -98.75 ----- 23.7 24.2 314.0 32.8 30.7 -22.4 30.5 -22.9 30.8 -23.0 31.3 -21.3
2025-12-31T16:04:42.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T16:04:42.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T16:04:42.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.585905
2025-12-31T16:04:42.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T16:04:42.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T16:04:42.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T16:04:42.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T16:04:42.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T16:04:42.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T16:04:33', tmtdew=28.8, humidity=14.68, cloud=0.0, wind=27.68, temperature=26.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T14:03:42.192', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T16:04:42.948 [DEBUG] [Thread-130666] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:04: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-12-31T16:04:47.283 [DEBUG] [Thread-130669 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:05:02.332 [DEBUG] [Thread-130670 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:05:12.833 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:05:12.834 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:05:17.371 [DEBUG] [Thread-130671 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:05:23.174 [DEBUG] [Thread-130672 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:05:32.402 [DEBUG] [Thread-130673 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:05:47.433 [DEBUG] [Thread-130674 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:06:02.471 [DEBUG] [Thread-130675 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:06:12.973 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:06:12.973 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:06:17.505 [DEBUG] [Thread-130676 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:06:23.223 [DEBUG] [Thread-130677 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:06:32.546 [DEBUG] [Thread-130678 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:06:47.576 [DEBUG] [Thread-130679 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:06:58.005 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-12-31T16:07:02.610 [DEBUG] [Thread-130680 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:07:13.113 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:07:13.114 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:07:17.649 [DEBUG] [Thread-130681 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:07:23.283 [DEBUG] [Thread-130682 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:07:28.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T16:07:28.006 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T16:07:28.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T16:07:28.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 16, 7, 13), 29.46, 14.12, 0.0, 33.28, 25.44, 0, 0, 0, 2, 0, 0),)
2025-12-31T16:07:28.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 16:07:13
2025-12-31T16:07:28.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T16:07:29.054 [DEBUG] [Thread-130683] [transport.py] [_log()] starting thread (client mode): 0xb6b62f20
2025-12-31T16:07:29.054 [DEBUG] [Thread-130683] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:07:29.073 [DEBUG] [Thread-130683] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T16:07:29.073 [INFO] [Thread-130683] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T16:07:29.075 [DEBUG] [Thread-130683] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:07:29.075 [DEBUG] [Thread-130683] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T16:07:29.075 [DEBUG] [Thread-130683] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:07:29.075 [DEBUG] [Thread-130683] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:07:29.075 [DEBUG] [Thread-130683] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:07:29.075 [DEBUG] [Thread-130683] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:07:29.075 [DEBUG] [Thread-130683] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:07:29.075 [DEBUG] [Thread-130683] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:07:29.075 [DEBUG] [Thread-130683] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:07:29.075 [DEBUG] [Thread-130683] [transport.py] [_log()] client lang: <none>
2025-12-31T16:07:29.075 [DEBUG] [Thread-130683] [transport.py] [_log()] server lang: <none>
2025-12-31T16:07:29.075 [DEBUG] [Thread-130683] [transport.py] [_log()] kex follows: False
2025-12-31T16:07:29.076 [DEBUG] [Thread-130683] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:07:29.076 [DEBUG] [Thread-130683] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:07:29.076 [DEBUG] [Thread-130683] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:07:29.076 [DEBUG] [Thread-130683] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:07:29.076 [DEBUG] [Thread-130683] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:07:29.076 [DEBUG] [Thread-130683] [transport.py] [_log()] Compression: none
2025-12-31T16:07:29.076 [DEBUG] [Thread-130683] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:07:29.083 [DEBUG] [Thread-130683] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:07:29.083 [DEBUG] [Thread-130683] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:07:29.083 [DEBUG] [Thread-130683] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T16:07:29.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T16:07:29.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:07:29.084 [DEBUG] [Thread-130683] [transport.py] [_log()] userauth is OK
2025-12-31T16:07:29.084 [DEBUG] [Thread-130683] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:07:29.084 [DEBUG] [Thread-130683] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:07:29.084 [DEBUG] [Thread-130683] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T16:07:29.085 [DEBUG] [Thread-130683] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:07:29.097 [INFO] [Thread-130683] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:07:29.097 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:07:29.704 [DEBUG] [Thread-130683] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:07:29.704 [DEBUG] [Thread-130683] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:07:29.704 [DEBUG] [Thread-130683] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T16:07:29.745 [DEBUG] [Thread-130683] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:07:29.745 [DEBUG] [Thread-130683] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:07:29.746 [DEBUG] [Thread-130683] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:07:29.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:07:29.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T16:07:29.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T16:07:29.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T16:07:29.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:07:29.764 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T16:07:29.764 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:07:29.764 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:07:29.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T16:07:29.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.587988 -999.00  +26.10  28.94     19   +0.70 1 1 1 1 1   888    0 22.19 -131.12 ----- 26.4 28.9 279.6 33.4 29.9 -25.0 29.8 -24.6 29.8 -22.6 30.2 -22.3
2025-12-31T16:07:29.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T16:07:29.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T16:07:29.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.587988
2025-12-31T16:07:29.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T16:07:29.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T16:07:29.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T16:07:29.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T16:07:29.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T16:07:29.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T16:07:13', tmtdew=29.46, humidity=14.12, cloud=0.0, wind=33.28, temperature=25.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T14:06:42.163', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T16:07:29.765 [DEBUG] [Thread-130683] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:07:29.839 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T16:07:29.851 [DEBUG] [Thread-130686] [transport.py] [_log()] starting thread (client mode): 0xb6b609a0
2025-12-31T16:07:29.851 [DEBUG] [Thread-130686] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:07:29.869 [DEBUG] [Thread-130686] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T16:07:29.869 [INFO] [Thread-130686] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T16:07:29.877 [DEBUG] [Thread-130686] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:07:29.877 [DEBUG] [Thread-130686] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T16:07:29.877 [DEBUG] [Thread-130686] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:07:29.877 [DEBUG] [Thread-130686] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:07:29.877 [DEBUG] [Thread-130686] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:07:29.877 [DEBUG] [Thread-130686] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:07:29.877 [DEBUG] [Thread-130686] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:07:29.877 [DEBUG] [Thread-130686] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:07:29.877 [DEBUG] [Thread-130686] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:07:29.877 [DEBUG] [Thread-130686] [transport.py] [_log()] client lang: <none>
2025-12-31T16:07:29.877 [DEBUG] [Thread-130686] [transport.py] [_log()] server lang: <none>
2025-12-31T16:07:29.877 [DEBUG] [Thread-130686] [transport.py] [_log()] kex follows: False
2025-12-31T16:07:29.877 [DEBUG] [Thread-130686] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:07:29.877 [DEBUG] [Thread-130686] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:07:29.877 [DEBUG] [Thread-130686] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:07:29.877 [DEBUG] [Thread-130686] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:07:29.877 [DEBUG] [Thread-130686] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:07:29.877 [DEBUG] [Thread-130686] [transport.py] [_log()] Compression: none
2025-12-31T16:07:29.877 [DEBUG] [Thread-130686] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:07:29.937 [DEBUG] [Thread-130686] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:07:29.937 [DEBUG] [Thread-130686] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:07:29.937 [DEBUG] [Thread-130686] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T16:07:29.937 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T16:07:29.937 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:07:29.995 [DEBUG] [Thread-130686] [transport.py] [_log()] userauth is OK
2025-12-31T16:07:29.995 [DEBUG] [Thread-130686] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:07:29.995 [DEBUG] [Thread-130686] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:07:29.995 [DEBUG] [Thread-130686] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T16:07:29.995 [DEBUG] [Thread-130686] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:07:30.011 [INFO] [Thread-130686] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:07:30.011 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T16:07:30.011 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:07:30.858 [DEBUG] [Thread-130686] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:07:30.858 [DEBUG] [Thread-130686] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:07:30.906 [DEBUG] [Thread-130686] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:07:30.906 [DEBUG] [Thread-130686] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:07:30.918 [DEBUG] [Thread-130686] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:07:30.928 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:07:30.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T16:07:30.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T16:07:30.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:07:30.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:07:30.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:07:30.952 [DEBUG] [Thread-130686] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:07:32.681 [DEBUG] [Thread-130688 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:07:47.732 [DEBUG] [Thread-130689 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:08:00.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T16:08:00.945 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T16:08:00.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T16:08:01.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 16, 7, 45), 30.38, 13.09, 0.0, 34.97, 25.71, 0, 0, 0, 2, 0, 0),)
2025-12-31T16:08:01.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 16:07:45
2025-12-31T16:08:01.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T16:08:01.944 [DEBUG] [Thread-130690] [transport.py] [_log()] starting thread (client mode): 0xb6bbab90
2025-12-31T16:08:01.944 [DEBUG] [Thread-130690] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:08:01.963 [DEBUG] [Thread-130690] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T16:08:01.963 [INFO] [Thread-130690] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T16:08:01.967 [DEBUG] [Thread-130690] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:08:01.967 [DEBUG] [Thread-130690] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T16:08:01.967 [DEBUG] [Thread-130690] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:08:01.967 [DEBUG] [Thread-130690] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:08:01.967 [DEBUG] [Thread-130690] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:08:01.967 [DEBUG] [Thread-130690] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:08:01.967 [DEBUG] [Thread-130690] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:08:01.967 [DEBUG] [Thread-130690] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:08:01.967 [DEBUG] [Thread-130690] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:08:01.967 [DEBUG] [Thread-130690] [transport.py] [_log()] client lang: <none>
2025-12-31T16:08:01.967 [DEBUG] [Thread-130690] [transport.py] [_log()] server lang: <none>
2025-12-31T16:08:01.967 [DEBUG] [Thread-130690] [transport.py] [_log()] kex follows: False
2025-12-31T16:08:01.967 [DEBUG] [Thread-130690] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:08:01.967 [DEBUG] [Thread-130690] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:08:01.967 [DEBUG] [Thread-130690] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:08:01.967 [DEBUG] [Thread-130690] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:08:01.967 [DEBUG] [Thread-130690] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:08:01.967 [DEBUG] [Thread-130690] [transport.py] [_log()] Compression: none
2025-12-31T16:08:01.967 [DEBUG] [Thread-130690] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:08:01.986 [DEBUG] [Thread-130690] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:08:01.986 [DEBUG] [Thread-130690] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:08:01.987 [DEBUG] [Thread-130690] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T16:08:01.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T16:08:01.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:08:01.988 [DEBUG] [Thread-130690] [transport.py] [_log()] userauth is OK
2025-12-31T16:08:01.989 [DEBUG] [Thread-130690] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:08:01.989 [DEBUG] [Thread-130690] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:08:01.989 [DEBUG] [Thread-130690] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T16:08:01.989 [DEBUG] [Thread-130690] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:08:02.001 [INFO] [Thread-130690] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:08:02.001 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:08:02.614 [DEBUG] [Thread-130690] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:08:02.614 [DEBUG] [Thread-130690] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:08:02.615 [DEBUG] [Thread-130690] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T16:08:02.655 [DEBUG] [Thread-130690] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:08:02.655 [DEBUG] [Thread-130690] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:08:02.659 [DEBUG] [Thread-130690] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:08:02.671 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:08:02.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T16:08:02.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T16:08:02.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T16:08:02.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:08:02.684 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T16:08:02.684 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:08:02.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:08:02.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T16:08:02.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.588336 -999.00  +26.20  23.13     18   +0.70 1 2 1 1 1   888    0 22.15 -125.48 ----- 28.1 23.1 291.6 29.8 30.0 -23.9 29.9 -23.8 29.8 -21.2 30.2 -20.7
2025-12-31T16:08:02.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T16:08:02.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T16:08:02.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.588336
2025-12-31T16:08:02.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T16:08:02.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T16:08:02.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T16:08:02.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T16:08:02.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T16:08:02.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T16:07:45', tmtdew=30.38, humidity=13.09, cloud=0.0, wind=34.97, temperature=25.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T14:07:12.230', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T16:08:02.687 [DEBUG] [Thread-130690] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:08:02.767 [DEBUG] [Thread-130693 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:08:02.771 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T16:08:02.782 [DEBUG] [Thread-130694] [transport.py] [_log()] starting thread (client mode): 0xb957b2b0
2025-12-31T16:08:02.782 [DEBUG] [Thread-130694] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:08:02.799 [DEBUG] [Thread-130694] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T16:08:02.800 [INFO] [Thread-130694] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T16:08:02.807 [DEBUG] [Thread-130694] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:08:02.807 [DEBUG] [Thread-130694] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T16:08:02.808 [DEBUG] [Thread-130694] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:08:02.808 [DEBUG] [Thread-130694] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:08:02.808 [DEBUG] [Thread-130694] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:08:02.808 [DEBUG] [Thread-130694] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:08:02.808 [DEBUG] [Thread-130694] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:08:02.808 [DEBUG] [Thread-130694] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:08:02.808 [DEBUG] [Thread-130694] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:08:02.808 [DEBUG] [Thread-130694] [transport.py] [_log()] client lang: <none>
2025-12-31T16:08:02.808 [DEBUG] [Thread-130694] [transport.py] [_log()] server lang: <none>
2025-12-31T16:08:02.808 [DEBUG] [Thread-130694] [transport.py] [_log()] kex follows: False
2025-12-31T16:08:02.808 [DEBUG] [Thread-130694] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:08:02.808 [DEBUG] [Thread-130694] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:08:02.808 [DEBUG] [Thread-130694] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:08:02.809 [DEBUG] [Thread-130694] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:08:02.809 [DEBUG] [Thread-130694] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:08:02.809 [DEBUG] [Thread-130694] [transport.py] [_log()] Compression: none
2025-12-31T16:08:02.809 [DEBUG] [Thread-130694] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:08:02.868 [DEBUG] [Thread-130694] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:08:02.868 [DEBUG] [Thread-130694] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:08:02.869 [DEBUG] [Thread-130694] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T16:08:02.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T16:08:02.870 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:08:02.923 [DEBUG] [Thread-130694] [transport.py] [_log()] userauth is OK
2025-12-31T16:08:02.924 [DEBUG] [Thread-130694] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:08:02.924 [DEBUG] [Thread-130694] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:08:02.924 [DEBUG] [Thread-130694] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T16:08:02.924 [DEBUG] [Thread-130694] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:08:02.945 [INFO] [Thread-130694] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:08:02.945 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T16:08:02.946 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:08:03.854 [DEBUG] [Thread-130694] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:08:03.854 [DEBUG] [Thread-130694] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:08:03.902 [DEBUG] [Thread-130694] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:08:03.902 [DEBUG] [Thread-130694] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:08:03.911 [DEBUG] [Thread-130694] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:08:03.921 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:08:03.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-12-31T16:08:03.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-12-31T16:08:03.938 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:08:03.938 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:08:03.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:08:03.947 [DEBUG] [Thread-130694] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:08:13.251 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:08:13.252 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:08:17.803 [DEBUG] [Thread-130696 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:08:23.334 [DEBUG] [Thread-130697 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:08:32.840 [DEBUG] [Thread-130698 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:08:33.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T16:08:33.956 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T16:08:33.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T16:08:34.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 16, 8, 17), 30.35, 13.15, 0.0, 30.26, 25.89, 0, 0, 0, 2, 0, 0),)
2025-12-31T16:08:34.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 16:08:17
2025-12-31T16:08:34.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T16:08:34.923 [DEBUG] [Thread-130699] [transport.py] [_log()] starting thread (client mode): 0xb6bb9c00
2025-12-31T16:08:34.923 [DEBUG] [Thread-130699] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:08:34.945 [DEBUG] [Thread-130699] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T16:08:34.946 [INFO] [Thread-130699] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T16:08:34.947 [DEBUG] [Thread-130699] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:08:34.947 [DEBUG] [Thread-130699] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T16:08:34.947 [DEBUG] [Thread-130699] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:08:34.947 [DEBUG] [Thread-130699] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:08:34.947 [DEBUG] [Thread-130699] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:08:34.947 [DEBUG] [Thread-130699] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:08:34.947 [DEBUG] [Thread-130699] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:08:34.947 [DEBUG] [Thread-130699] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:08:34.947 [DEBUG] [Thread-130699] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:08:34.947 [DEBUG] [Thread-130699] [transport.py] [_log()] client lang: <none>
2025-12-31T16:08:34.947 [DEBUG] [Thread-130699] [transport.py] [_log()] server lang: <none>
2025-12-31T16:08:34.947 [DEBUG] [Thread-130699] [transport.py] [_log()] kex follows: False
2025-12-31T16:08:34.948 [DEBUG] [Thread-130699] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:08:34.948 [DEBUG] [Thread-130699] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:08:34.948 [DEBUG] [Thread-130699] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:08:34.948 [DEBUG] [Thread-130699] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:08:34.948 [DEBUG] [Thread-130699] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:08:34.948 [DEBUG] [Thread-130699] [transport.py] [_log()] Compression: none
2025-12-31T16:08:34.948 [DEBUG] [Thread-130699] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:08:34.965 [DEBUG] [Thread-130699] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:08:34.966 [DEBUG] [Thread-130699] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:08:34.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T16:08:34.967 [DEBUG] [Thread-130699] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T16:08:34.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:08:34.969 [DEBUG] [Thread-130699] [transport.py] [_log()] userauth is OK
2025-12-31T16:08:34.969 [DEBUG] [Thread-130699] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:08:34.969 [DEBUG] [Thread-130699] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:08:34.969 [DEBUG] [Thread-130699] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T16:08:34.969 [DEBUG] [Thread-130699] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:08:35.002 [INFO] [Thread-130699] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:08:35.003 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:08:35.675 [DEBUG] [Thread-130699] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:08:35.676 [DEBUG] [Thread-130699] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:08:35.676 [DEBUG] [Thread-130699] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T16:08:35.718 [DEBUG] [Thread-130699] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:08:35.718 [DEBUG] [Thread-130699] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:08:35.721 [DEBUG] [Thread-130699] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:08:35.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:08:35.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T16:08:35.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T16:08:35.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T16:08:35.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:08:35.743 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T16:08:35.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:08:35.743 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:08:35.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T16:08:35.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.588683 -999.00  +26.20  26.26     16   -0.90 1 1 1 1 1   888    0 22.81 -115.77 ----- 30.4 26.3 286.8 33.4 29.9 -22.7 29.9 -25.3 29.8 -23.8 30.2 -20.2
2025-12-31T16:08:35.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T16:08:35.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T16:08:35.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.588683
2025-12-31T16:08:35.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T16:08:35.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T16:08:35.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T16:08:35.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T16:08:35.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T16:08:35.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T16:08:17', tmtdew=30.35, humidity=13.15, cloud=0.0, wind=30.26, temperature=25.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T14:07:42.211', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T16:08:35.744 [DEBUG] [Thread-130699] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:08:35.823 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T16:08:35.833 [DEBUG] [Thread-130702] [transport.py] [_log()] starting thread (client mode): 0xb6bbb6d0
2025-12-31T16:08:35.833 [DEBUG] [Thread-130702] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:08:35.847 [DEBUG] [Thread-130702] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T16:08:35.848 [INFO] [Thread-130702] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T16:08:35.855 [DEBUG] [Thread-130702] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:08:35.855 [DEBUG] [Thread-130702] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T16:08:35.855 [DEBUG] [Thread-130702] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:08:35.855 [DEBUG] [Thread-130702] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:08:35.855 [DEBUG] [Thread-130702] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:08:35.855 [DEBUG] [Thread-130702] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:08:35.855 [DEBUG] [Thread-130702] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:08:35.855 [DEBUG] [Thread-130702] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:08:35.855 [DEBUG] [Thread-130702] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:08:35.855 [DEBUG] [Thread-130702] [transport.py] [_log()] client lang: <none>
2025-12-31T16:08:35.855 [DEBUG] [Thread-130702] [transport.py] [_log()] server lang: <none>
2025-12-31T16:08:35.855 [DEBUG] [Thread-130702] [transport.py] [_log()] kex follows: False
2025-12-31T16:08:35.855 [DEBUG] [Thread-130702] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:08:35.856 [DEBUG] [Thread-130702] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:08:35.856 [DEBUG] [Thread-130702] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:08:35.856 [DEBUG] [Thread-130702] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:08:35.856 [DEBUG] [Thread-130702] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:08:35.856 [DEBUG] [Thread-130702] [transport.py] [_log()] Compression: none
2025-12-31T16:08:35.856 [DEBUG] [Thread-130702] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:08:35.912 [DEBUG] [Thread-130702] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:08:35.913 [DEBUG] [Thread-130702] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:08:35.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T16:08:35.914 [DEBUG] [Thread-130702] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T16:08:35.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:08:35.968 [DEBUG] [Thread-130702] [transport.py] [_log()] userauth is OK
2025-12-31T16:08:35.968 [DEBUG] [Thread-130702] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:08:35.969 [DEBUG] [Thread-130702] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:08:35.969 [DEBUG] [Thread-130702] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T16:08:35.969 [DEBUG] [Thread-130702] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:08:35.987 [INFO] [Thread-130702] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:08:35.987 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T16:08:35.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:08:36.797 [DEBUG] [Thread-130702] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:08:36.798 [DEBUG] [Thread-130702] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:08:36.846 [DEBUG] [Thread-130702] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:08:36.846 [DEBUG] [Thread-130702] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:08:36.855 [DEBUG] [Thread-130702] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:08:36.864 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:08:36.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T16:08:36.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T16:08:36.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:08:36.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:08:36.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:08:36.892 [DEBUG] [Thread-130702] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:08:47.871 [DEBUG] [Thread-130704 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:09:02.911 [DEBUG] [Thread-130705 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:09:06.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T16:09:06.915 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T16:09:06.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T16:09:07.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 16, 8, 49), 31.35, 12.14, 0.0, 28.07, 25.85, 0, 0, 0, 2, 0, 0),)
2025-12-31T16:09:07.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 16:08:49
2025-12-31T16:09:07.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T16:09:07.897 [DEBUG] [Thread-130706] [transport.py] [_log()] starting thread (client mode): 0xb6bb09d0
2025-12-31T16:09:07.897 [DEBUG] [Thread-130706] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:09:07.912 [DEBUG] [Thread-130706] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T16:09:07.913 [INFO] [Thread-130706] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T16:09:07.916 [DEBUG] [Thread-130706] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:09:07.916 [DEBUG] [Thread-130706] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T16:09:07.916 [DEBUG] [Thread-130706] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:09:07.916 [DEBUG] [Thread-130706] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:09:07.916 [DEBUG] [Thread-130706] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:09:07.916 [DEBUG] [Thread-130706] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:09:07.916 [DEBUG] [Thread-130706] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:09:07.916 [DEBUG] [Thread-130706] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:09:07.916 [DEBUG] [Thread-130706] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:09:07.916 [DEBUG] [Thread-130706] [transport.py] [_log()] client lang: <none>
2025-12-31T16:09:07.916 [DEBUG] [Thread-130706] [transport.py] [_log()] server lang: <none>
2025-12-31T16:09:07.916 [DEBUG] [Thread-130706] [transport.py] [_log()] kex follows: False
2025-12-31T16:09:07.916 [DEBUG] [Thread-130706] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:09:07.916 [DEBUG] [Thread-130706] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:09:07.916 [DEBUG] [Thread-130706] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:09:07.916 [DEBUG] [Thread-130706] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:09:07.916 [DEBUG] [Thread-130706] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:09:07.917 [DEBUG] [Thread-130706] [transport.py] [_log()] Compression: none
2025-12-31T16:09:07.917 [DEBUG] [Thread-130706] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:09:07.933 [DEBUG] [Thread-130706] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:09:07.933 [DEBUG] [Thread-130706] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:09:07.934 [DEBUG] [Thread-130706] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T16:09:07.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T16:09:07.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:09:07.935 [DEBUG] [Thread-130706] [transport.py] [_log()] userauth is OK
2025-12-31T16:09:07.936 [DEBUG] [Thread-130706] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:09:07.936 [DEBUG] [Thread-130706] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:09:07.936 [DEBUG] [Thread-130706] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T16:09:07.936 [DEBUG] [Thread-130706] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:09:07.953 [INFO] [Thread-130706] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:09:07.954 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:09:08.604 [DEBUG] [Thread-130706] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:09:08.605 [DEBUG] [Thread-130706] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:09:08.605 [DEBUG] [Thread-130706] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T16:09:08.646 [DEBUG] [Thread-130706] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:09:08.646 [DEBUG] [Thread-130706] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:09:08.649 [DEBUG] [Thread-130706] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:09:08.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:09:08.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T16:09:08.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T16:09:08.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T16:09:08.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:09:08.673 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T16:09:08.673 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:09:08.673 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:09:08.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T16:09:08.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.589030 -999.00  +26.00  21.80     17   -0.60 1 1 1 1 1   888    0 22.30 -110.51 ----- 29.7 21.8 297.4 36.2 29.8 -23.9 29.8 -23.8 29.4 -25.9 30.1 -20.3
2025-12-31T16:09:08.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T16:09:08.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T16:09:08.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.589030
2025-12-31T16:09:08.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T16:09:08.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T16:09:08.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T16:09:08.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T16:09:08.676 [DEBUG] [Thread-130706] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:09:08.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T16:09:08.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T16:08:49', tmtdew=31.35, humidity=12.14, cloud=0.0, wind=28.07, temperature=25.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T14:08:12.192', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T16:09:08.763 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T16:09:08.776 [DEBUG] [Thread-130709] [transport.py] [_log()] starting thread (client mode): 0xb9578ee0
2025-12-31T16:09:08.777 [DEBUG] [Thread-130709] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:09:08.792 [DEBUG] [Thread-130709] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T16:09:08.792 [INFO] [Thread-130709] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T16:09:08.799 [DEBUG] [Thread-130709] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:09:08.799 [DEBUG] [Thread-130709] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T16:09:08.800 [DEBUG] [Thread-130709] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:09:08.800 [DEBUG] [Thread-130709] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:09:08.800 [DEBUG] [Thread-130709] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:09:08.800 [DEBUG] [Thread-130709] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:09:08.800 [DEBUG] [Thread-130709] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:09:08.800 [DEBUG] [Thread-130709] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:09:08.800 [DEBUG] [Thread-130709] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:09:08.800 [DEBUG] [Thread-130709] [transport.py] [_log()] client lang: <none>
2025-12-31T16:09:08.800 [DEBUG] [Thread-130709] [transport.py] [_log()] server lang: <none>
2025-12-31T16:09:08.800 [DEBUG] [Thread-130709] [transport.py] [_log()] kex follows: False
2025-12-31T16:09:08.800 [DEBUG] [Thread-130709] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:09:08.800 [DEBUG] [Thread-130709] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:09:08.800 [DEBUG] [Thread-130709] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:09:08.800 [DEBUG] [Thread-130709] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:09:08.800 [DEBUG] [Thread-130709] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:09:08.800 [DEBUG] [Thread-130709] [transport.py] [_log()] Compression: none
2025-12-31T16:09:08.800 [DEBUG] [Thread-130709] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:09:08.860 [DEBUG] [Thread-130709] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:09:08.861 [DEBUG] [Thread-130709] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:09:08.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T16:09:08.862 [DEBUG] [Thread-130709] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T16:09:08.863 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:09:08.916 [DEBUG] [Thread-130709] [transport.py] [_log()] userauth is OK
2025-12-31T16:09:08.917 [DEBUG] [Thread-130709] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:09:08.917 [DEBUG] [Thread-130709] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:09:08.917 [DEBUG] [Thread-130709] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T16:09:08.917 [DEBUG] [Thread-130709] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:09:08.937 [INFO] [Thread-130709] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:09:08.938 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T16:09:08.939 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:09:09.774 [DEBUG] [Thread-130709] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:09:09.774 [DEBUG] [Thread-130709] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:09:09.822 [DEBUG] [Thread-130709] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:09:09.822 [DEBUG] [Thread-130709] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:09:09.831 [DEBUG] [Thread-130709] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:09:09.840 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:09:09.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T16:09:09.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T16:09:09.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:09:09.859 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:09:09.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:09:09.868 [DEBUG] [Thread-130709] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:09:13.394 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:09:13.396 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:09:17.947 [DEBUG] [Thread-130711 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:09:23.379 [DEBUG] [Thread-130712 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:09:32.994 [DEBUG] [Thread-130713 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:09:39.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T16:09:39.876 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T16:09:39.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T16:09:40.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 16, 9, 21), 31.56, 11.97, 0.0, 28.35, 25.95, 0, 0, 0, 2, 0, 0),)
2025-12-31T16:09:40.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 16:09:21
2025-12-31T16:09:40.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T16:09:40.840 [DEBUG] [Thread-130714] [transport.py] [_log()] starting thread (client mode): 0xb6bb1240
2025-12-31T16:09:40.840 [DEBUG] [Thread-130714] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:09:40.862 [DEBUG] [Thread-130714] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T16:09:40.862 [INFO] [Thread-130714] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T16:09:40.865 [DEBUG] [Thread-130714] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:09:40.866 [DEBUG] [Thread-130714] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T16:09:40.866 [DEBUG] [Thread-130714] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:09:40.866 [DEBUG] [Thread-130714] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:09:40.866 [DEBUG] [Thread-130714] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:09:40.866 [DEBUG] [Thread-130714] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:09:40.866 [DEBUG] [Thread-130714] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:09:40.866 [DEBUG] [Thread-130714] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:09:40.866 [DEBUG] [Thread-130714] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:09:40.866 [DEBUG] [Thread-130714] [transport.py] [_log()] client lang: <none>
2025-12-31T16:09:40.866 [DEBUG] [Thread-130714] [transport.py] [_log()] server lang: <none>
2025-12-31T16:09:40.866 [DEBUG] [Thread-130714] [transport.py] [_log()] kex follows: False
2025-12-31T16:09:40.866 [DEBUG] [Thread-130714] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:09:40.866 [DEBUG] [Thread-130714] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:09:40.866 [DEBUG] [Thread-130714] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:09:40.866 [DEBUG] [Thread-130714] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:09:40.866 [DEBUG] [Thread-130714] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:09:40.866 [DEBUG] [Thread-130714] [transport.py] [_log()] Compression: none
2025-12-31T16:09:40.866 [DEBUG] [Thread-130714] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:09:40.883 [DEBUG] [Thread-130714] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:09:40.884 [DEBUG] [Thread-130714] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:09:40.884 [DEBUG] [Thread-130714] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T16:09:40.885 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T16:09:40.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:09:40.887 [DEBUG] [Thread-130714] [transport.py] [_log()] userauth is OK
2025-12-31T16:09:40.887 [DEBUG] [Thread-130714] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:09:40.887 [DEBUG] [Thread-130714] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:09:40.888 [DEBUG] [Thread-130714] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T16:09:40.888 [DEBUG] [Thread-130714] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:09:40.911 [INFO] [Thread-130714] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:09:40.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:09:41.583 [DEBUG] [Thread-130714] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:09:41.583 [DEBUG] [Thread-130714] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:09:41.584 [DEBUG] [Thread-130714] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T16:09:41.624 [DEBUG] [Thread-130714] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:09:41.624 [DEBUG] [Thread-130714] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:09:41.628 [DEBUG] [Thread-130714] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:09:41.641 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:09:41.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T16:09:41.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T16:09:41.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T16:09:41.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:09:41.654 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T16:09:41.655 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:09:41.655 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:09:41.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T16:09:41.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.589377 -999.00  +25.50  24.64     17   -1.10 1 2 1 1 1   888    0 22.61 -105.87 ----- 36.1 24.6 323.2 35.6 29.8 -22.5 29.7 -23.3 29.6 -22.1 30.1 -19.9
2025-12-31T16:09:41.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T16:09:41.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T16:09:41.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.589377
2025-12-31T16:09:41.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T16:09:41.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T16:09:41.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T16:09:41.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T16:09:41.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T16:09:41.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T16:09:21', tmtdew=31.56, humidity=11.97, cloud=0.0, wind=28.35, temperature=25.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T14:08:42.173', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T16:09:41.658 [DEBUG] [Thread-130714] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:09:41.749 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T16:09:41.760 [DEBUG] [Thread-130717] [transport.py] [_log()] starting thread (client mode): 0xb6b60130
2025-12-31T16:09:41.761 [DEBUG] [Thread-130717] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:09:41.775 [DEBUG] [Thread-130717] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T16:09:41.775 [INFO] [Thread-130717] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T16:09:41.783 [DEBUG] [Thread-130717] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:09:41.783 [DEBUG] [Thread-130717] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T16:09:41.783 [DEBUG] [Thread-130717] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:09:41.783 [DEBUG] [Thread-130717] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:09:41.783 [DEBUG] [Thread-130717] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:09:41.783 [DEBUG] [Thread-130717] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:09:41.783 [DEBUG] [Thread-130717] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:09:41.783 [DEBUG] [Thread-130717] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:09:41.784 [DEBUG] [Thread-130717] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:09:41.784 [DEBUG] [Thread-130717] [transport.py] [_log()] client lang: <none>
2025-12-31T16:09:41.784 [DEBUG] [Thread-130717] [transport.py] [_log()] server lang: <none>
2025-12-31T16:09:41.784 [DEBUG] [Thread-130717] [transport.py] [_log()] kex follows: False
2025-12-31T16:09:41.784 [DEBUG] [Thread-130717] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:09:41.784 [DEBUG] [Thread-130717] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:09:41.784 [DEBUG] [Thread-130717] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:09:41.784 [DEBUG] [Thread-130717] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:09:41.784 [DEBUG] [Thread-130717] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:09:41.784 [DEBUG] [Thread-130717] [transport.py] [_log()] Compression: none
2025-12-31T16:09:41.784 [DEBUG] [Thread-130717] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:09:41.840 [DEBUG] [Thread-130717] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:09:41.841 [DEBUG] [Thread-130717] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:09:41.841 [DEBUG] [Thread-130717] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T16:09:41.842 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T16:09:41.842 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:09:41.901 [DEBUG] [Thread-130717] [transport.py] [_log()] userauth is OK
2025-12-31T16:09:41.901 [DEBUG] [Thread-130717] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:09:41.901 [DEBUG] [Thread-130717] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:09:41.901 [DEBUG] [Thread-130717] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T16:09:41.901 [DEBUG] [Thread-130717] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:09:41.920 [INFO] [Thread-130717] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:09:41.920 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T16:09:41.921 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:09:42.761 [DEBUG] [Thread-130717] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:09:42.761 [DEBUG] [Thread-130717] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:09:42.809 [DEBUG] [Thread-130717] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:09:42.809 [DEBUG] [Thread-130717] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:09:42.818 [DEBUG] [Thread-130717] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:09:42.827 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:09:42.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T16:09:42.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T16:09:42.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:09:42.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:09:42.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:09:42.859 [DEBUG] [Thread-130717] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:09:48.032 [DEBUG] [Thread-130719 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:10:03.080 [DEBUG] [Thread-130720 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:10:12.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T16:10:12.880 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T16:10:12.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T16:10:13.535 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:10:13.535 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:10:13.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 16, 9, 53), 31.06, 12.81, 0.0, 24.07, 26.0, 0, 0, 0, 2, 0, 0),)
2025-12-31T16:10:13.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 16:09:53
2025-12-31T16:10:13.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T16:10:13.851 [DEBUG] [Thread-130721] [transport.py] [_log()] starting thread (client mode): 0xb6bbc310
2025-12-31T16:10:13.851 [DEBUG] [Thread-130721] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:10:13.872 [DEBUG] [Thread-130721] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T16:10:13.872 [INFO] [Thread-130721] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T16:10:13.875 [DEBUG] [Thread-130721] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:10:13.876 [DEBUG] [Thread-130721] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T16:10:13.876 [DEBUG] [Thread-130721] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:10:13.876 [DEBUG] [Thread-130721] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:10:13.876 [DEBUG] [Thread-130721] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:10:13.876 [DEBUG] [Thread-130721] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:10:13.876 [DEBUG] [Thread-130721] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:10:13.876 [DEBUG] [Thread-130721] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:10:13.876 [DEBUG] [Thread-130721] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:10:13.876 [DEBUG] [Thread-130721] [transport.py] [_log()] client lang: <none>
2025-12-31T16:10:13.876 [DEBUG] [Thread-130721] [transport.py] [_log()] server lang: <none>
2025-12-31T16:10:13.876 [DEBUG] [Thread-130721] [transport.py] [_log()] kex follows: False
2025-12-31T16:10:13.876 [DEBUG] [Thread-130721] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:10:13.876 [DEBUG] [Thread-130721] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:10:13.876 [DEBUG] [Thread-130721] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:10:13.876 [DEBUG] [Thread-130721] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:10:13.876 [DEBUG] [Thread-130721] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:10:13.876 [DEBUG] [Thread-130721] [transport.py] [_log()] Compression: none
2025-12-31T16:10:13.876 [DEBUG] [Thread-130721] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:10:13.893 [DEBUG] [Thread-130721] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:10:13.893 [DEBUG] [Thread-130721] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:10:13.894 [DEBUG] [Thread-130721] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T16:10:13.894 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T16:10:13.894 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:10:13.896 [DEBUG] [Thread-130721] [transport.py] [_log()] userauth is OK
2025-12-31T16:10:13.896 [DEBUG] [Thread-130721] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:10:13.896 [DEBUG] [Thread-130721] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:10:13.896 [DEBUG] [Thread-130721] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T16:10:13.896 [DEBUG] [Thread-130721] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:10:13.931 [INFO] [Thread-130721] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:10:13.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:10:18.113 [DEBUG] [Thread-130723 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:10:19.229 [DEBUG] [Thread-130721] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:10:19.229 [DEBUG] [Thread-130721] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:10:19.230 [DEBUG] [Thread-130721] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T16:10:19.270 [DEBUG] [Thread-130721] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:10:19.270 [DEBUG] [Thread-130721] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:10:19.273 [DEBUG] [Thread-130721] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:10:19.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:10:19.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T16:10:19.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T16:10:19.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T16:10:19.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:10:19.362 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T16:10:19.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:10:19.362 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:10:19.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T16:10:19.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.590072 -999.00  +25.10  16.51     18   -0.40 1 2 1 1 1   888    0 23.09 -90.16 ----- 19.1 16.5 301.8 29.3 29.7 -21.6 29.6 -21.5 29.6 -21.9 29.9 -18.5
2025-12-31T16:10:19.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T16:10:19.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T16:10:19.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.590072
2025-12-31T16:10:19.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T16:10:19.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T16:10:19.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T16:10:19.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T16:10:19.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T16:10:19.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T16:09:53', tmtdew=31.06, humidity=12.81, cloud=0.0, wind=24.07, temperature=26.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T14:09:42.221', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T16:10:19.365 [DEBUG] [Thread-130721] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:10:19.438 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T16:10:19.449 [DEBUG] [Thread-130725] [transport.py] [_log()] starting thread (client mode): 0xb957ba60
2025-12-31T16:10:19.450 [DEBUG] [Thread-130725] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:10:19.465 [DEBUG] [Thread-130725] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T16:10:19.465 [INFO] [Thread-130725] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T16:10:19.472 [DEBUG] [Thread-130725] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:10:19.473 [DEBUG] [Thread-130725] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T16:10:19.473 [DEBUG] [Thread-130725] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:10:19.473 [DEBUG] [Thread-130725] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:10:19.473 [DEBUG] [Thread-130725] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:10:19.473 [DEBUG] [Thread-130725] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:10:19.473 [DEBUG] [Thread-130725] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:10:19.473 [DEBUG] [Thread-130725] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:10:19.473 [DEBUG] [Thread-130725] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:10:19.473 [DEBUG] [Thread-130725] [transport.py] [_log()] client lang: <none>
2025-12-31T16:10:19.473 [DEBUG] [Thread-130725] [transport.py] [_log()] server lang: <none>
2025-12-31T16:10:19.473 [DEBUG] [Thread-130725] [transport.py] [_log()] kex follows: False
2025-12-31T16:10:19.473 [DEBUG] [Thread-130725] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:10:19.473 [DEBUG] [Thread-130725] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:10:19.473 [DEBUG] [Thread-130725] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:10:19.473 [DEBUG] [Thread-130725] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:10:19.473 [DEBUG] [Thread-130725] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:10:19.473 [DEBUG] [Thread-130725] [transport.py] [_log()] Compression: none
2025-12-31T16:10:19.473 [DEBUG] [Thread-130725] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:10:19.533 [DEBUG] [Thread-130725] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:10:19.533 [DEBUG] [Thread-130725] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:10:19.534 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T16:10:19.534 [DEBUG] [Thread-130725] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T16:10:19.535 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:10:19.589 [DEBUG] [Thread-130725] [transport.py] [_log()] userauth is OK
2025-12-31T16:10:19.589 [DEBUG] [Thread-130725] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:10:19.589 [DEBUG] [Thread-130725] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:10:19.589 [DEBUG] [Thread-130725] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T16:10:19.589 [DEBUG] [Thread-130725] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:10:19.608 [INFO] [Thread-130725] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:10:19.608 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T16:10:19.609 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:10:20.450 [DEBUG] [Thread-130725] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:10:20.450 [DEBUG] [Thread-130725] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:10:20.498 [DEBUG] [Thread-130725] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:10:20.498 [DEBUG] [Thread-130725] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:10:20.507 [DEBUG] [Thread-130725] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:10:20.517 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:10:20.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T16:10:20.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T16:10:20.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:10:20.536 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:10:20.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:10:20.545 [DEBUG] [Thread-130725] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:10:23.434 [DEBUG] [Thread-130727 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:10:33.153 [DEBUG] [Thread-130728 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:10:48.202 [DEBUG] [Thread-130729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:10:50.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T16:10:50.545 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T16:10:50.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T16:10:51.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 16, 10, 26), 30.73, 13.09, 0.0, 24.05, 25.94, 0, 0, 0, 2, 0, 0),)
2025-12-31T16:10:51.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 16:10:26
2025-12-31T16:10:51.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T16:10:51.541 [DEBUG] [Thread-130730] [transport.py] [_log()] starting thread (client mode): 0xb6bb1f00
2025-12-31T16:10:51.541 [DEBUG] [Thread-130730] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:10:51.561 [DEBUG] [Thread-130730] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T16:10:51.561 [INFO] [Thread-130730] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T16:10:51.564 [DEBUG] [Thread-130730] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:10:51.564 [DEBUG] [Thread-130730] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T16:10:51.564 [DEBUG] [Thread-130730] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:10:51.564 [DEBUG] [Thread-130730] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:10:51.565 [DEBUG] [Thread-130730] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:10:51.565 [DEBUG] [Thread-130730] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:10:51.565 [DEBUG] [Thread-130730] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:10:51.565 [DEBUG] [Thread-130730] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:10:51.565 [DEBUG] [Thread-130730] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:10:51.565 [DEBUG] [Thread-130730] [transport.py] [_log()] client lang: <none>
2025-12-31T16:10:51.565 [DEBUG] [Thread-130730] [transport.py] [_log()] server lang: <none>
2025-12-31T16:10:51.565 [DEBUG] [Thread-130730] [transport.py] [_log()] kex follows: False
2025-12-31T16:10:51.565 [DEBUG] [Thread-130730] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:10:51.565 [DEBUG] [Thread-130730] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:10:51.565 [DEBUG] [Thread-130730] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:10:51.565 [DEBUG] [Thread-130730] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:10:51.565 [DEBUG] [Thread-130730] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:10:51.565 [DEBUG] [Thread-130730] [transport.py] [_log()] Compression: none
2025-12-31T16:10:51.565 [DEBUG] [Thread-130730] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:10:51.583 [DEBUG] [Thread-130730] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:10:51.583 [DEBUG] [Thread-130730] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:10:51.584 [DEBUG] [Thread-130730] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T16:10:51.585 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T16:10:51.585 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:10:51.586 [DEBUG] [Thread-130730] [transport.py] [_log()] userauth is OK
2025-12-31T16:10:51.587 [DEBUG] [Thread-130730] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:10:51.587 [DEBUG] [Thread-130730] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:10:51.587 [DEBUG] [Thread-130730] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T16:10:51.587 [DEBUG] [Thread-130730] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:10:51.607 [INFO] [Thread-130730] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:10:51.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:10:52.197 [DEBUG] [Thread-130730] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:10:52.197 [DEBUG] [Thread-130730] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:10:52.197 [DEBUG] [Thread-130730] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T16:10:52.238 [DEBUG] [Thread-130730] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:10:52.238 [DEBUG] [Thread-130730] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:10:52.241 [DEBUG] [Thread-130730] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:10:52.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:10:52.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T16:10:52.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T16:10:52.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T16:10:52.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:10:52.263 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T16:10:52.264 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:10:52.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:10:52.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T16:10:52.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.590419 -999.00  +25.40  20.94     18   +0.00 1 2 1 1 1   888    0 23.40 -85.11 ----- 21.3 20.9 295.0 26.4 29.7 -20.2 29.6 -20.6 29.7 -18.9 30.0 -18.3
2025-12-31T16:10:52.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T16:10:52.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T16:10:52.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.590419
2025-12-31T16:10:52.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T16:10:52.265 [DEBUG] [Thread-130730] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:10:52.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T16:10:52.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T16:10:52.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T16:10:52.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T16:10:52.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T16:10:26', tmtdew=30.73, humidity=13.09, cloud=0.0, wind=24.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-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T14:10:12.202', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T16:10:52.350 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T16:10:52.361 [DEBUG] [Thread-130733] [transport.py] [_log()] starting thread (client mode): 0xb9559c30
2025-12-31T16:10:52.361 [DEBUG] [Thread-130733] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:10:52.375 [DEBUG] [Thread-130733] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T16:10:52.375 [INFO] [Thread-130733] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T16:10:52.383 [DEBUG] [Thread-130733] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:10:52.383 [DEBUG] [Thread-130733] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T16:10:52.383 [DEBUG] [Thread-130733] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:10:52.383 [DEBUG] [Thread-130733] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:10:52.383 [DEBUG] [Thread-130733] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:10:52.383 [DEBUG] [Thread-130733] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:10:52.383 [DEBUG] [Thread-130733] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:10:52.383 [DEBUG] [Thread-130733] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:10:52.383 [DEBUG] [Thread-130733] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:10:52.383 [DEBUG] [Thread-130733] [transport.py] [_log()] client lang: <none>
2025-12-31T16:10:52.383 [DEBUG] [Thread-130733] [transport.py] [_log()] server lang: <none>
2025-12-31T16:10:52.383 [DEBUG] [Thread-130733] [transport.py] [_log()] kex follows: False
2025-12-31T16:10:52.384 [DEBUG] [Thread-130733] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:10:52.384 [DEBUG] [Thread-130733] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:10:52.384 [DEBUG] [Thread-130733] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:10:52.384 [DEBUG] [Thread-130733] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:10:52.384 [DEBUG] [Thread-130733] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:10:52.384 [DEBUG] [Thread-130733] [transport.py] [_log()] Compression: none
2025-12-31T16:10:52.384 [DEBUG] [Thread-130733] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:10:52.440 [DEBUG] [Thread-130733] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:10:52.440 [DEBUG] [Thread-130733] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:10:52.441 [DEBUG] [Thread-130733] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T16:10:52.441 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T16:10:52.442 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:10:52.502 [DEBUG] [Thread-130733] [transport.py] [_log()] userauth is OK
2025-12-31T16:10:52.502 [DEBUG] [Thread-130733] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:10:52.502 [DEBUG] [Thread-130733] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:10:52.503 [DEBUG] [Thread-130733] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T16:10:52.503 [DEBUG] [Thread-130733] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:10:52.524 [INFO] [Thread-130733] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:10:52.525 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T16:10:52.525 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:10:53.346 [DEBUG] [Thread-130733] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:10:53.346 [DEBUG] [Thread-130733] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:10:53.394 [DEBUG] [Thread-130733] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:10:53.394 [DEBUG] [Thread-130733] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:10:53.403 [DEBUG] [Thread-130733] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:10:53.411 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:10:53.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-12-31T16:10:53.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T16:10:53.428 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:10:53.428 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:10:53.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:10:53.436 [DEBUG] [Thread-130733] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:11:03.235 [DEBUG] [Thread-130735 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:11:13.675 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:11:13.676 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:11:18.287 [DEBUG] [Thread-130736 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:11:23.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T16:11:23.459 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T16:11:23.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T16:11:23.487 [DEBUG] [Thread-130737 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:11:24.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 16, 10, 58), 30.48, 13.01, 0.0, 24.76, 26.04, 0, 0, 0, 2, 0, 0),)
2025-12-31T16:11:24.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 16:10:58
2025-12-31T16:11:24.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T16:11:24.495 [DEBUG] [Thread-130738] [transport.py] [_log()] starting thread (client mode): 0xb9558a00
2025-12-31T16:11:24.496 [DEBUG] [Thread-130738] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:11:24.518 [DEBUG] [Thread-130738] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T16:11:24.518 [INFO] [Thread-130738] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T16:11:24.522 [DEBUG] [Thread-130738] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:11:24.522 [DEBUG] [Thread-130738] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T16:11:24.522 [DEBUG] [Thread-130738] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:11:24.522 [DEBUG] [Thread-130738] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:11:24.522 [DEBUG] [Thread-130738] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:11:24.522 [DEBUG] [Thread-130738] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:11:24.522 [DEBUG] [Thread-130738] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:11:24.522 [DEBUG] [Thread-130738] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:11:24.522 [DEBUG] [Thread-130738] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:11:24.522 [DEBUG] [Thread-130738] [transport.py] [_log()] client lang: <none>
2025-12-31T16:11:24.522 [DEBUG] [Thread-130738] [transport.py] [_log()] server lang: <none>
2025-12-31T16:11:24.522 [DEBUG] [Thread-130738] [transport.py] [_log()] kex follows: False
2025-12-31T16:11:24.522 [DEBUG] [Thread-130738] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:11:24.522 [DEBUG] [Thread-130738] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:11:24.522 [DEBUG] [Thread-130738] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:11:24.522 [DEBUG] [Thread-130738] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:11:24.522 [DEBUG] [Thread-130738] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:11:24.522 [DEBUG] [Thread-130738] [transport.py] [_log()] Compression: none
2025-12-31T16:11:24.522 [DEBUG] [Thread-130738] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:11:24.540 [DEBUG] [Thread-130738] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:11:24.541 [DEBUG] [Thread-130738] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:11:24.541 [DEBUG] [Thread-130738] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T16:11:24.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T16:11:24.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:11:24.541 [DEBUG] [Thread-130738] [transport.py] [_log()] userauth is OK
2025-12-31T16:11:24.541 [DEBUG] [Thread-130738] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:11:24.541 [DEBUG] [Thread-130738] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:11:24.541 [DEBUG] [Thread-130738] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T16:11:24.542 [DEBUG] [Thread-130738] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:11:24.556 [INFO] [Thread-130738] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:11:24.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:11:25.346 [DEBUG] [Thread-130738] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:11:25.346 [DEBUG] [Thread-130738] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:11:25.346 [DEBUG] [Thread-130738] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T16:11:25.388 [DEBUG] [Thread-130738] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:11:25.388 [DEBUG] [Thread-130738] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:11:25.390 [DEBUG] [Thread-130738] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:11:25.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:11:25.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T16:11:25.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T16:11:25.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T16:11:25.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:11:25.405 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T16:11:25.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:11:25.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:11:25.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T16:11:25.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.590766 -999.00  +25.90  23.16     18   +0.10 1 2 1 1 1   888    0 23.83 -78.85 ----- 24.1 23.2 297.2 26.9 29.7 -20.2 29.7 -20.1 29.8 -18.7 30.1 -18.2
2025-12-31T16:11:25.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T16:11:25.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T16:11:25.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.590766
2025-12-31T16:11:25.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T16:11:25.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T16:11:25.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T16:11:25.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T16:11:25.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T16:11:25.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T16:10:58', tmtdew=30.48, humidity=13.01, cloud=0.0, wind=24.76, temperature=26.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T14:10:42.182', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T16:11:25.406 [DEBUG] [Thread-130738] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:11:25.481 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T16:11:25.492 [DEBUG] [Thread-130741] [transport.py] [_log()] starting thread (client mode): 0xb9558760
2025-12-31T16:11:25.492 [DEBUG] [Thread-130741] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:11:25.506 [DEBUG] [Thread-130741] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T16:11:25.506 [INFO] [Thread-130741] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T16:11:25.513 [DEBUG] [Thread-130741] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:11:25.513 [DEBUG] [Thread-130741] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T16:11:25.513 [DEBUG] [Thread-130741] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:11:25.513 [DEBUG] [Thread-130741] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:11:25.513 [DEBUG] [Thread-130741] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:11:25.513 [DEBUG] [Thread-130741] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:11:25.513 [DEBUG] [Thread-130741] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:11:25.513 [DEBUG] [Thread-130741] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:11:25.513 [DEBUG] [Thread-130741] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:11:25.513 [DEBUG] [Thread-130741] [transport.py] [_log()] client lang: <none>
2025-12-31T16:11:25.513 [DEBUG] [Thread-130741] [transport.py] [_log()] server lang: <none>
2025-12-31T16:11:25.513 [DEBUG] [Thread-130741] [transport.py] [_log()] kex follows: False
2025-12-31T16:11:25.513 [DEBUG] [Thread-130741] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:11:25.513 [DEBUG] [Thread-130741] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:11:25.513 [DEBUG] [Thread-130741] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:11:25.513 [DEBUG] [Thread-130741] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:11:25.513 [DEBUG] [Thread-130741] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:11:25.513 [DEBUG] [Thread-130741] [transport.py] [_log()] Compression: none
2025-12-31T16:11:25.513 [DEBUG] [Thread-130741] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:11:25.571 [DEBUG] [Thread-130741] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:11:25.571 [DEBUG] [Thread-130741] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:11:25.571 [DEBUG] [Thread-130741] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T16:11:25.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T16:11:25.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:11:25.628 [DEBUG] [Thread-130741] [transport.py] [_log()] userauth is OK
2025-12-31T16:11:25.629 [DEBUG] [Thread-130741] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:11:25.629 [DEBUG] [Thread-130741] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:11:25.629 [DEBUG] [Thread-130741] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T16:11:25.629 [DEBUG] [Thread-130741] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:11:25.643 [INFO] [Thread-130741] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:11:25.643 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T16:11:25.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:11:26.540 [DEBUG] [Thread-130741] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:11:26.540 [DEBUG] [Thread-130741] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:11:26.588 [DEBUG] [Thread-130741] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:11:26.588 [DEBUG] [Thread-130741] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:11:26.597 [DEBUG] [Thread-130741] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:11:26.606 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:11:26.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T16:11:26.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T16:11:26.624 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:11:26.624 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:11:26.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:11:26.632 [DEBUG] [Thread-130741] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:11:33.321 [DEBUG] [Thread-130743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:11:48.366 [DEBUG] [Thread-130744 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:11:56.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T16:11:56.656 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T16:11:56.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T16:11:57.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 16, 11, 30), 30.56, 12.97, 0.0, 26.27, 26.22, 0, 0, 0, 2, 0, 0),)
2025-12-31T16:11:57.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 16:11:30
2025-12-31T16:11:57.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T16:11:57.646 [DEBUG] [Thread-130745] [transport.py] [_log()] starting thread (client mode): 0xb6ba2b60
2025-12-31T16:11:57.646 [DEBUG] [Thread-130745] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:11:57.666 [DEBUG] [Thread-130745] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T16:11:57.667 [INFO] [Thread-130745] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T16:11:57.670 [DEBUG] [Thread-130745] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:11:57.670 [DEBUG] [Thread-130745] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T16:11:57.670 [DEBUG] [Thread-130745] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:11:57.670 [DEBUG] [Thread-130745] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:11:57.670 [DEBUG] [Thread-130745] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:11:57.670 [DEBUG] [Thread-130745] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:11:57.670 [DEBUG] [Thread-130745] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:11:57.670 [DEBUG] [Thread-130745] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:11:57.670 [DEBUG] [Thread-130745] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:11:57.670 [DEBUG] [Thread-130745] [transport.py] [_log()] client lang: <none>
2025-12-31T16:11:57.670 [DEBUG] [Thread-130745] [transport.py] [_log()] server lang: <none>
2025-12-31T16:11:57.670 [DEBUG] [Thread-130745] [transport.py] [_log()] kex follows: False
2025-12-31T16:11:57.670 [DEBUG] [Thread-130745] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:11:57.670 [DEBUG] [Thread-130745] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:11:57.670 [DEBUG] [Thread-130745] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:11:57.670 [DEBUG] [Thread-130745] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:11:57.670 [DEBUG] [Thread-130745] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:11:57.670 [DEBUG] [Thread-130745] [transport.py] [_log()] Compression: none
2025-12-31T16:11:57.670 [DEBUG] [Thread-130745] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:11:57.686 [DEBUG] [Thread-130745] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:11:57.687 [DEBUG] [Thread-130745] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:11:57.687 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T16:11:57.688 [DEBUG] [Thread-130745] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T16:11:57.689 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:11:57.690 [DEBUG] [Thread-130745] [transport.py] [_log()] userauth is OK
2025-12-31T16:11:57.690 [DEBUG] [Thread-130745] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:11:57.690 [DEBUG] [Thread-130745] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:11:57.690 [DEBUG] [Thread-130745] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T16:11:57.690 [DEBUG] [Thread-130745] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:11:57.714 [INFO] [Thread-130745] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:11:57.714 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:11:58.373 [DEBUG] [Thread-130745] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:11:58.374 [DEBUG] [Thread-130745] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:11:58.374 [DEBUG] [Thread-130745] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T16:11:58.415 [DEBUG] [Thread-130745] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:11:58.415 [DEBUG] [Thread-130745] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:11:58.419 [DEBUG] [Thread-130745] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:11:58.430 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:11:58.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T16:11:58.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T16:11:58.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T16:11:58.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:11:58.444 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T16:11:58.444 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:11:58.444 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:11:58.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T16:11:58.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.591113 -999.00  +26.20  33.93     18   +0.30 1 2 2 1 1   888    0 23.55 -68.75 ----- 29.8 33.9 290.6 38.5 29.9 -20.3 29.8 -19.9 29.8 -18.3 30.2 -17.6
2025-12-31T16:11:58.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T16:11:58.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T16:11:58.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.591113
2025-12-31T16:11:58.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T16:11:58.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T16:11:58.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T16:11:58.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T16:11:58.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T16:11:58.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T16:11:30', tmtdew=30.56, humidity=12.97, cloud=0.0, wind=26.27, temperature=26.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T14:11:12.163', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T16:11:58.446 [DEBUG] [Thread-130745] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:11: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-12-31T16:11:58.542 [DEBUG] [Thread-130748] [transport.py] [_log()] starting thread (client mode): 0xb6ba03a0
2025-12-31T16:11:58.542 [DEBUG] [Thread-130748] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:11:58.556 [DEBUG] [Thread-130748] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T16:11:58.557 [INFO] [Thread-130748] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T16:11:58.564 [DEBUG] [Thread-130748] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:11:58.564 [DEBUG] [Thread-130748] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T16:11:58.564 [DEBUG] [Thread-130748] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:11:58.564 [DEBUG] [Thread-130748] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:11:58.565 [DEBUG] [Thread-130748] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:11:58.565 [DEBUG] [Thread-130748] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:11:58.565 [DEBUG] [Thread-130748] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:11:58.565 [DEBUG] [Thread-130748] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:11:58.565 [DEBUG] [Thread-130748] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:11:58.565 [DEBUG] [Thread-130748] [transport.py] [_log()] client lang: <none>
2025-12-31T16:11:58.565 [DEBUG] [Thread-130748] [transport.py] [_log()] server lang: <none>
2025-12-31T16:11:58.565 [DEBUG] [Thread-130748] [transport.py] [_log()] kex follows: False
2025-12-31T16:11:58.565 [DEBUG] [Thread-130748] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:11:58.565 [DEBUG] [Thread-130748] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:11:58.565 [DEBUG] [Thread-130748] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:11:58.565 [DEBUG] [Thread-130748] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:11:58.565 [DEBUG] [Thread-130748] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:11:58.566 [DEBUG] [Thread-130748] [transport.py] [_log()] Compression: none
2025-12-31T16:11:58.566 [DEBUG] [Thread-130748] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:11:58.625 [DEBUG] [Thread-130748] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:11:58.626 [DEBUG] [Thread-130748] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:11:58.626 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T16:11:58.627 [DEBUG] [Thread-130748] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T16:11:58.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:11:58.681 [DEBUG] [Thread-130748] [transport.py] [_log()] userauth is OK
2025-12-31T16:11:58.681 [DEBUG] [Thread-130748] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:11:58.682 [DEBUG] [Thread-130748] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:11:58.682 [DEBUG] [Thread-130748] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T16:11:58.682 [DEBUG] [Thread-130748] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:11:58.698 [INFO] [Thread-130748] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:11:58.698 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T16:11:58.698 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:11:59.524 [DEBUG] [Thread-130748] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:11:59.524 [DEBUG] [Thread-130748] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:11:59.573 [DEBUG] [Thread-130748] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:11:59.573 [DEBUG] [Thread-130748] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:11:59.585 [DEBUG] [Thread-130748] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:11:59.593 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:11:59.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T16:11:59.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T16:11:59.612 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:11:59.612 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:11:59.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:11:59.620 [DEBUG] [Thread-130748] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:12:03.397 [DEBUG] [Thread-130750 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:12:13.814 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:12:13.816 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:12:18.437 [DEBUG] [Thread-130751 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:12:23.545 [DEBUG] [Thread-130752 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:12:29.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T16:12:29.638 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T16:12:29.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T16:12:30.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 16, 12, 2), 30.58, 12.97, 0.0, 31.19, 26.29, 0, 0, 0, 2, 0, 0),)
2025-12-31T16:12:30.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 16:12:02
2025-12-31T16:12:30.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T16:12:30.622 [DEBUG] [Thread-130753] [transport.py] [_log()] starting thread (client mode): 0xb6bb2800
2025-12-31T16:12:30.622 [DEBUG] [Thread-130753] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:12:30.645 [DEBUG] [Thread-130753] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T16:12:30.645 [INFO] [Thread-130753] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T16:12:30.649 [DEBUG] [Thread-130753] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:12:30.649 [DEBUG] [Thread-130753] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T16:12:30.649 [DEBUG] [Thread-130753] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:12:30.649 [DEBUG] [Thread-130753] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:12:30.649 [DEBUG] [Thread-130753] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:12:30.649 [DEBUG] [Thread-130753] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:12:30.649 [DEBUG] [Thread-130753] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:12:30.649 [DEBUG] [Thread-130753] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:12:30.649 [DEBUG] [Thread-130753] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:12:30.649 [DEBUG] [Thread-130753] [transport.py] [_log()] client lang: <none>
2025-12-31T16:12:30.649 [DEBUG] [Thread-130753] [transport.py] [_log()] server lang: <none>
2025-12-31T16:12:30.650 [DEBUG] [Thread-130753] [transport.py] [_log()] kex follows: False
2025-12-31T16:12:30.650 [DEBUG] [Thread-130753] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:12:30.650 [DEBUG] [Thread-130753] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:12:30.650 [DEBUG] [Thread-130753] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:12:30.650 [DEBUG] [Thread-130753] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:12:30.650 [DEBUG] [Thread-130753] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:12:30.650 [DEBUG] [Thread-130753] [transport.py] [_log()] Compression: none
2025-12-31T16:12:30.650 [DEBUG] [Thread-130753] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:12:30.667 [DEBUG] [Thread-130753] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:12:30.667 [DEBUG] [Thread-130753] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:12:30.668 [DEBUG] [Thread-130753] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T16:12:30.668 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T16:12:30.669 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:12:30.670 [DEBUG] [Thread-130753] [transport.py] [_log()] userauth is OK
2025-12-31T16:12:30.670 [DEBUG] [Thread-130753] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:12:30.670 [DEBUG] [Thread-130753] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:12:30.670 [DEBUG] [Thread-130753] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T16:12:30.670 [DEBUG] [Thread-130753] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:12:30.693 [INFO] [Thread-130753] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:12:30.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:12:31.452 [DEBUG] [Thread-130753] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:12:31.452 [DEBUG] [Thread-130753] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:12:31.453 [DEBUG] [Thread-130753] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T16:12:31.493 [DEBUG] [Thread-130753] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:12:31.493 [DEBUG] [Thread-130753] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:12:31.496 [DEBUG] [Thread-130753] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:12:31.506 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:12:31.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T16:12:31.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T16:12:31.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T16:12:31.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:12:31.519 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T16:12:31.519 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:12:31.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:12:31.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T16:12:31.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.591461 -999.00  +26.40  23.39     18   +0.30 1 2 1 1 1   888    0 24.10 -68.32 ----- 32.2 23.4 305.2 34.0 29.9 -19.9 29.8 -20.5 29.9 -17.6 30.2 -17.3
2025-12-31T16:12:31.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T16:12:31.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T16:12:31.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.591461
2025-12-31T16:12:31.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T16:12:31.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T16:12:31.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T16:12:31.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T16:12:31.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T16:12:31.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T16:12:02', tmtdew=30.58, humidity=12.97, cloud=0.0, wind=31.19, temperature=26.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T14:11:42.230', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T16:12:31.522 [DEBUG] [Thread-130753] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:12:31.609 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T16:12:31.622 [DEBUG] [Thread-130756] [transport.py] [_log()] starting thread (client mode): 0xb6ba2f50
2025-12-31T16:12:31.622 [DEBUG] [Thread-130756] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:12:31.636 [DEBUG] [Thread-130756] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T16:12:31.636 [INFO] [Thread-130756] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T16:12:31.644 [DEBUG] [Thread-130756] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:12:31.644 [DEBUG] [Thread-130756] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T16:12:31.644 [DEBUG] [Thread-130756] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:12:31.644 [DEBUG] [Thread-130756] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:12:31.644 [DEBUG] [Thread-130756] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:12:31.644 [DEBUG] [Thread-130756] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:12:31.645 [DEBUG] [Thread-130756] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:12:31.645 [DEBUG] [Thread-130756] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:12:31.645 [DEBUG] [Thread-130756] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:12:31.645 [DEBUG] [Thread-130756] [transport.py] [_log()] client lang: <none>
2025-12-31T16:12:31.645 [DEBUG] [Thread-130756] [transport.py] [_log()] server lang: <none>
2025-12-31T16:12:31.645 [DEBUG] [Thread-130756] [transport.py] [_log()] kex follows: False
2025-12-31T16:12:31.645 [DEBUG] [Thread-130756] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:12:31.645 [DEBUG] [Thread-130756] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:12:31.645 [DEBUG] [Thread-130756] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:12:31.645 [DEBUG] [Thread-130756] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:12:31.645 [DEBUG] [Thread-130756] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:12:31.645 [DEBUG] [Thread-130756] [transport.py] [_log()] Compression: none
2025-12-31T16:12:31.645 [DEBUG] [Thread-130756] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:12:31.710 [DEBUG] [Thread-130756] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:12:31.711 [DEBUG] [Thread-130756] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:12:31.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T16:12:31.712 [DEBUG] [Thread-130756] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T16:12:31.713 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:12:31.774 [DEBUG] [Thread-130756] [transport.py] [_log()] userauth is OK
2025-12-31T16:12:31.774 [DEBUG] [Thread-130756] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:12:31.774 [DEBUG] [Thread-130756] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:12:31.775 [DEBUG] [Thread-130756] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T16:12:31.775 [DEBUG] [Thread-130756] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:12:31.794 [INFO] [Thread-130756] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:12:31.794 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T16:12:31.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:12:32.630 [DEBUG] [Thread-130756] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:12:32.630 [DEBUG] [Thread-130756] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:12:32.679 [DEBUG] [Thread-130756] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:12:32.679 [DEBUG] [Thread-130756] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:12:32.689 [DEBUG] [Thread-130756] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:12:32.698 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:12:32.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T16:12:32.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T16:12:32.718 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:12:32.718 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:12:32.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:12:32.726 [DEBUG] [Thread-130756] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:12:33.475 [DEBUG] [Thread-130758 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:12:48.524 [DEBUG] [Thread-130759 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:13:02.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T16:13:02.749 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T16:13:02.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T16:13:03.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 16, 12, 34), 30.98, 12.72, 0.0, 30.67, 26.39, 0, 0, 0, 2, 0, 0),)
2025-12-31T16:13:03.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 16:12:34
2025-12-31T16:13:03.554 [DEBUG] [Thread-130760 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:13:03.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T16:13:03.750 [DEBUG] [Thread-130761] [transport.py] [_log()] starting thread (client mode): 0xb6ba31f0
2025-12-31T16:13:03.750 [DEBUG] [Thread-130761] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:13:03.771 [DEBUG] [Thread-130761] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T16:13:03.771 [INFO] [Thread-130761] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T16:13:03.774 [DEBUG] [Thread-130761] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:13:03.774 [DEBUG] [Thread-130761] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T16:13:03.774 [DEBUG] [Thread-130761] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:13:03.774 [DEBUG] [Thread-130761] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:13:03.774 [DEBUG] [Thread-130761] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:13:03.774 [DEBUG] [Thread-130761] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:13:03.775 [DEBUG] [Thread-130761] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:13:03.775 [DEBUG] [Thread-130761] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:13:03.775 [DEBUG] [Thread-130761] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:13:03.775 [DEBUG] [Thread-130761] [transport.py] [_log()] client lang: <none>
2025-12-31T16:13:03.775 [DEBUG] [Thread-130761] [transport.py] [_log()] server lang: <none>
2025-12-31T16:13:03.775 [DEBUG] [Thread-130761] [transport.py] [_log()] kex follows: False
2025-12-31T16:13:03.775 [DEBUG] [Thread-130761] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:13:03.775 [DEBUG] [Thread-130761] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:13:03.775 [DEBUG] [Thread-130761] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:13:03.775 [DEBUG] [Thread-130761] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:13:03.775 [DEBUG] [Thread-130761] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:13:03.775 [DEBUG] [Thread-130761] [transport.py] [_log()] Compression: none
2025-12-31T16:13:03.775 [DEBUG] [Thread-130761] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:13:03.794 [DEBUG] [Thread-130761] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:13:03.794 [DEBUG] [Thread-130761] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:13:03.795 [DEBUG] [Thread-130761] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T16:13:03.795 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T16:13:03.795 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:13:03.796 [DEBUG] [Thread-130761] [transport.py] [_log()] userauth is OK
2025-12-31T16:13:03.796 [DEBUG] [Thread-130761] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:13:03.797 [DEBUG] [Thread-130761] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:13:03.797 [DEBUG] [Thread-130761] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T16:13:03.797 [DEBUG] [Thread-130761] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:13:03.832 [INFO] [Thread-130761] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:13:03.833 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:13:04.487 [DEBUG] [Thread-130761] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:13:04.488 [DEBUG] [Thread-130761] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:13:04.488 [DEBUG] [Thread-130761] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T16:13:04.528 [DEBUG] [Thread-130761] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:13:04.528 [DEBUG] [Thread-130761] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:13:04.531 [DEBUG] [Thread-130761] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:13:04.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:13:04.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T16:13:04.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T16:13:04.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T16:13:04.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:13:04.556 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T16:13:04.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:13:04.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:13:04.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T16:13:04.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.591808 -999.00  +25.90  31.20     18   +0.00 1 2 2 1 1   888    0 23.68 -67.05 ----- 30.2 31.2 298.2 38.7 29.7 -20.8 29.6 -21.4 29.7 -21.5 30.0 -18.2
2025-12-31T16:13:04.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T16:13:04.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T16:13:04.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.591808
2025-12-31T16:13:04.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T16:13:04.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T16:13:04.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T16:13:04.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T16:13:04.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T16:13:04.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T16:12:34', tmtdew=30.98, humidity=12.72, cloud=0.0, wind=30.67, temperature=26.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T14:12:12.211', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T16:13:04.559 [DEBUG] [Thread-130761] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:13:04.638 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T16:13:04.651 [DEBUG] [Thread-130764] [transport.py] [_log()] starting thread (client mode): 0xb6bb3430
2025-12-31T16:13:04.651 [DEBUG] [Thread-130764] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:13:04.665 [DEBUG] [Thread-130764] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T16:13:04.665 [INFO] [Thread-130764] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T16:13:04.673 [DEBUG] [Thread-130764] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:13:04.673 [DEBUG] [Thread-130764] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T16:13:04.673 [DEBUG] [Thread-130764] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:13:04.673 [DEBUG] [Thread-130764] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:13:04.673 [DEBUG] [Thread-130764] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:13:04.673 [DEBUG] [Thread-130764] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:13:04.673 [DEBUG] [Thread-130764] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:13:04.673 [DEBUG] [Thread-130764] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:13:04.673 [DEBUG] [Thread-130764] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:13:04.673 [DEBUG] [Thread-130764] [transport.py] [_log()] client lang: <none>
2025-12-31T16:13:04.674 [DEBUG] [Thread-130764] [transport.py] [_log()] server lang: <none>
2025-12-31T16:13:04.674 [DEBUG] [Thread-130764] [transport.py] [_log()] kex follows: False
2025-12-31T16:13:04.674 [DEBUG] [Thread-130764] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:13:04.674 [DEBUG] [Thread-130764] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:13:04.674 [DEBUG] [Thread-130764] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:13:04.674 [DEBUG] [Thread-130764] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:13:04.674 [DEBUG] [Thread-130764] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:13:04.674 [DEBUG] [Thread-130764] [transport.py] [_log()] Compression: none
2025-12-31T16:13:04.674 [DEBUG] [Thread-130764] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:13:04.733 [DEBUG] [Thread-130764] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:13:04.733 [DEBUG] [Thread-130764] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:13:04.734 [DEBUG] [Thread-130764] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T16:13:04.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T16:13:04.735 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:13:04.790 [DEBUG] [Thread-130764] [transport.py] [_log()] userauth is OK
2025-12-31T16:13:04.790 [DEBUG] [Thread-130764] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:13:04.790 [DEBUG] [Thread-130764] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:13:04.790 [DEBUG] [Thread-130764] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T16:13:04.790 [DEBUG] [Thread-130764] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:13:04.810 [INFO] [Thread-130764] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:13:04.810 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T16:13:04.811 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:13:05.681 [DEBUG] [Thread-130764] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:13:05.681 [DEBUG] [Thread-130764] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:13:05.729 [DEBUG] [Thread-130764] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:13:05.729 [DEBUG] [Thread-130764] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:13:05.738 [DEBUG] [Thread-130764] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:13:05.746 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:13:05.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T16:13:05.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T16:13:05.763 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:13:05.763 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:13:05.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:13:05.773 [DEBUG] [Thread-130764] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:13:13.956 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:13:13.957 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:13:18.584 [DEBUG] [Thread-130766 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:13:23.594 [DEBUG] [Thread-130767 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:13:33.624 [DEBUG] [Thread-130768 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:13:35.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T16:13:35.793 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T16:13:35.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T16:13:36.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 16, 13, 6), 31.02, 12.66, 0.0, 32.62, 26.22, 0, 0, 0, 2, 0, 0),)
2025-12-31T16:13:36.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 16:13:06
2025-12-31T16:13:36.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T16:13:36.776 [DEBUG] [Thread-130769] [transport.py] [_log()] starting thread (client mode): 0xb6bbf730
2025-12-31T16:13:36.776 [DEBUG] [Thread-130769] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:13:36.796 [DEBUG] [Thread-130769] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T16:13:36.796 [INFO] [Thread-130769] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T16:13:36.800 [DEBUG] [Thread-130769] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:13:36.800 [DEBUG] [Thread-130769] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T16:13:36.800 [DEBUG] [Thread-130769] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:13:36.800 [DEBUG] [Thread-130769] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:13:36.800 [DEBUG] [Thread-130769] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:13:36.800 [DEBUG] [Thread-130769] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:13:36.800 [DEBUG] [Thread-130769] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:13:36.800 [DEBUG] [Thread-130769] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:13:36.800 [DEBUG] [Thread-130769] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:13:36.800 [DEBUG] [Thread-130769] [transport.py] [_log()] client lang: <none>
2025-12-31T16:13:36.800 [DEBUG] [Thread-130769] [transport.py] [_log()] server lang: <none>
2025-12-31T16:13:36.800 [DEBUG] [Thread-130769] [transport.py] [_log()] kex follows: False
2025-12-31T16:13:36.800 [DEBUG] [Thread-130769] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:13:36.800 [DEBUG] [Thread-130769] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:13:36.801 [DEBUG] [Thread-130769] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:13:36.801 [DEBUG] [Thread-130769] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:13:36.801 [DEBUG] [Thread-130769] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:13:36.801 [DEBUG] [Thread-130769] [transport.py] [_log()] Compression: none
2025-12-31T16:13:36.801 [DEBUG] [Thread-130769] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:13:36.818 [DEBUG] [Thread-130769] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:13:36.819 [DEBUG] [Thread-130769] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:13:36.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T16:13:36.820 [DEBUG] [Thread-130769] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T16:13:36.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:13:36.822 [DEBUG] [Thread-130769] [transport.py] [_log()] userauth is OK
2025-12-31T16:13:36.822 [DEBUG] [Thread-130769] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:13:36.822 [DEBUG] [Thread-130769] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:13:36.823 [DEBUG] [Thread-130769] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T16:13:36.823 [DEBUG] [Thread-130769] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:13:36.837 [INFO] [Thread-130769] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:13:36.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:13:37.587 [DEBUG] [Thread-130769] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:13:37.587 [DEBUG] [Thread-130769] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:13:37.588 [DEBUG] [Thread-130769] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T16:13:37.628 [DEBUG] [Thread-130769] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:13:37.628 [DEBUG] [Thread-130769] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:13:37.632 [DEBUG] [Thread-130769] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:13:37.637 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:13:37.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T16:13:37.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T16:13:37.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T16:13:37.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:13:37.650 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T16:13:37.650 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:13:37.650 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:13:37.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T16:13:37.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.592155 -999.00  +25.60  28.20     18   -0.10 1 2 1 1 1   888    0 23.44 -61.09 ----- 23.0 28.2 288.8 35.0 29.6 -19.9 29.6 -19.9 29.5 -18.6 29.9 -17.9
2025-12-31T16:13:37.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T16:13:37.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T16:13:37.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.592155
2025-12-31T16:13:37.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T16:13:37.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T16:13:37.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T16:13:37.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T16:13:37.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T16:13:37.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T16:13:06', tmtdew=31.02, humidity=12.66, cloud=0.0, wind=32.62, temperature=26.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T14:12:42.192', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T16:13:37.653 [DEBUG] [Thread-130769] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:13:37.736 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T16:13:37.749 [DEBUG] [Thread-130772] [transport.py] [_log()] starting thread (client mode): 0xb6bbf4f0
2025-12-31T16:13:37.749 [DEBUG] [Thread-130772] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:13:37.763 [DEBUG] [Thread-130772] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T16:13:37.763 [INFO] [Thread-130772] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T16:13:37.771 [DEBUG] [Thread-130772] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:13:37.771 [DEBUG] [Thread-130772] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T16:13:37.771 [DEBUG] [Thread-130772] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:13:37.772 [DEBUG] [Thread-130772] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:13:37.772 [DEBUG] [Thread-130772] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:13:37.772 [DEBUG] [Thread-130772] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:13:37.772 [DEBUG] [Thread-130772] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:13:37.772 [DEBUG] [Thread-130772] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:13:37.772 [DEBUG] [Thread-130772] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:13:37.772 [DEBUG] [Thread-130772] [transport.py] [_log()] client lang: <none>
2025-12-31T16:13:37.772 [DEBUG] [Thread-130772] [transport.py] [_log()] server lang: <none>
2025-12-31T16:13:37.772 [DEBUG] [Thread-130772] [transport.py] [_log()] kex follows: False
2025-12-31T16:13:37.772 [DEBUG] [Thread-130772] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:13:37.773 [DEBUG] [Thread-130772] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:13:37.773 [DEBUG] [Thread-130772] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:13:37.773 [DEBUG] [Thread-130772] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:13:37.773 [DEBUG] [Thread-130772] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:13:37.773 [DEBUG] [Thread-130772] [transport.py] [_log()] Compression: none
2025-12-31T16:13:37.773 [DEBUG] [Thread-130772] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:13:37.836 [DEBUG] [Thread-130772] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:13:37.836 [DEBUG] [Thread-130772] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:13:37.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T16:13:37.837 [DEBUG] [Thread-130772] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T16:13:37.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:13:37.894 [DEBUG] [Thread-130772] [transport.py] [_log()] userauth is OK
2025-12-31T16:13:37.894 [DEBUG] [Thread-130772] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:13:37.894 [DEBUG] [Thread-130772] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:13:37.895 [DEBUG] [Thread-130772] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T16:13:37.895 [DEBUG] [Thread-130772] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:13:37.913 [INFO] [Thread-130772] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:13:37.913 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T16:13:37.914 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:13:38.739 [DEBUG] [Thread-130772] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:13:38.740 [DEBUG] [Thread-130772] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:13:38.788 [DEBUG] [Thread-130772] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:13:38.788 [DEBUG] [Thread-130772] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:13:38.797 [DEBUG] [Thread-130772] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:13:38.807 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:13:38.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T16:13:38.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-12-31T16:13:38.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:13:38.826 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:13:38.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:13:38.834 [DEBUG] [Thread-130772] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:13:48.664 [DEBUG] [Thread-130774 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:14:03.712 [DEBUG] [Thread-130775 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:14:08.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T16:14:08.850 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T16:14:08.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T16:14:09.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 16, 13, 38), 30.88, 12.44, 0.0, 34.27, 25.61, 0, 0, 0, 2, 0, 0),)
2025-12-31T16:14:09.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 16:13:38
2025-12-31T16:14:09.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T16:14:09.844 [DEBUG] [Thread-130776] [transport.py] [_log()] starting thread (client mode): 0xb6bbcd60
2025-12-31T16:14:09.844 [DEBUG] [Thread-130776] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:14:09.857 [DEBUG] [Thread-130776] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T16:14:09.857 [INFO] [Thread-130776] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T16:14:09.860 [DEBUG] [Thread-130776] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:14:09.860 [DEBUG] [Thread-130776] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T16:14:09.860 [DEBUG] [Thread-130776] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:14:09.860 [DEBUG] [Thread-130776] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:14:09.860 [DEBUG] [Thread-130776] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:14:09.860 [DEBUG] [Thread-130776] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:14:09.860 [DEBUG] [Thread-130776] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:14:09.861 [DEBUG] [Thread-130776] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:14:09.861 [DEBUG] [Thread-130776] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:14:09.861 [DEBUG] [Thread-130776] [transport.py] [_log()] client lang: <none>
2025-12-31T16:14:09.861 [DEBUG] [Thread-130776] [transport.py] [_log()] server lang: <none>
2025-12-31T16:14:09.861 [DEBUG] [Thread-130776] [transport.py] [_log()] kex follows: False
2025-12-31T16:14:09.861 [DEBUG] [Thread-130776] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:14:09.861 [DEBUG] [Thread-130776] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:14:09.861 [DEBUG] [Thread-130776] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:14:09.861 [DEBUG] [Thread-130776] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:14:09.861 [DEBUG] [Thread-130776] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:14:09.861 [DEBUG] [Thread-130776] [transport.py] [_log()] Compression: none
2025-12-31T16:14:09.861 [DEBUG] [Thread-130776] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:14:09.878 [DEBUG] [Thread-130776] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:14:09.878 [DEBUG] [Thread-130776] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:14:09.879 [DEBUG] [Thread-130776] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T16:14:09.879 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T16:14:09.880 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:14:09.881 [DEBUG] [Thread-130776] [transport.py] [_log()] userauth is OK
2025-12-31T16:14:09.881 [DEBUG] [Thread-130776] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:14:09.881 [DEBUG] [Thread-130776] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:14:09.881 [DEBUG] [Thread-130776] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T16:14:09.881 [DEBUG] [Thread-130776] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:14:09.897 [INFO] [Thread-130776] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:14:09.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:14:10.562 [DEBUG] [Thread-130776] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:14:10.562 [DEBUG] [Thread-130776] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:14:10.572 [DEBUG] [Thread-130776] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T16:14:10.603 [DEBUG] [Thread-130776] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:14:10.603 [DEBUG] [Thread-130776] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:14:10.606 [DEBUG] [Thread-130776] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:14:10.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:14:10.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T16:14:10.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T16:14:10.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T16:14:10.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:14:10.630 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T16:14:10.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:14:10.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:14:10.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T16:14:10.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.592502 -999.00  +25.60  27.25     18   -0.20 1 2 1 1 1   888    0 23.95 -61.05 ----- 24.8 27.2 303.0 37.7 29.5 -20.2 29.5 -20.6 29.5 -18.8 29.9 -18.4
2025-12-31T16:14:10.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T16:14:10.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T16:14:10.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.592502
2025-12-31T16:14:10.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T16:14:10.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T16:14:10.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T16:14:10.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T16:14:10.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T16:14:10.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T16:13:38', tmtdew=30.88, humidity=12.44, cloud=0.0, wind=34.27, temperature=25.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T14:13:12.173', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T16:14:10.633 [DEBUG] [Thread-130776] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:14:10.728 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T16:14:10.742 [DEBUG] [Thread-130779] [transport.py] [_log()] starting thread (client mode): 0xb95f3490
2025-12-31T16:14:10.742 [DEBUG] [Thread-130779] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:14:10.757 [DEBUG] [Thread-130779] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T16:14:10.758 [INFO] [Thread-130779] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T16:14:10.765 [DEBUG] [Thread-130779] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:14:10.765 [DEBUG] [Thread-130779] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T16:14:10.765 [DEBUG] [Thread-130779] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:14:10.765 [DEBUG] [Thread-130779] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:14:10.766 [DEBUG] [Thread-130779] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:14:10.766 [DEBUG] [Thread-130779] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:14:10.766 [DEBUG] [Thread-130779] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:14:10.766 [DEBUG] [Thread-130779] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:14:10.766 [DEBUG] [Thread-130779] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:14:10.766 [DEBUG] [Thread-130779] [transport.py] [_log()] client lang: <none>
2025-12-31T16:14:10.766 [DEBUG] [Thread-130779] [transport.py] [_log()] server lang: <none>
2025-12-31T16:14:10.766 [DEBUG] [Thread-130779] [transport.py] [_log()] kex follows: False
2025-12-31T16:14:10.767 [DEBUG] [Thread-130779] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:14:10.767 [DEBUG] [Thread-130779] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:14:10.767 [DEBUG] [Thread-130779] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:14:10.767 [DEBUG] [Thread-130779] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:14:10.767 [DEBUG] [Thread-130779] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:14:10.767 [DEBUG] [Thread-130779] [transport.py] [_log()] Compression: none
2025-12-31T16:14:10.767 [DEBUG] [Thread-130779] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:14:10.822 [DEBUG] [Thread-130779] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:14:10.823 [DEBUG] [Thread-130779] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:14:10.823 [DEBUG] [Thread-130779] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T16:14:10.824 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T16:14:10.824 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:14:10.878 [DEBUG] [Thread-130779] [transport.py] [_log()] userauth is OK
2025-12-31T16:14:10.879 [DEBUG] [Thread-130779] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:14:10.879 [DEBUG] [Thread-130779] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:14:10.879 [DEBUG] [Thread-130779] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T16:14:10.879 [DEBUG] [Thread-130779] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:14:10.898 [INFO] [Thread-130779] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:14:10.899 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T16:14:10.899 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:14:11.731 [DEBUG] [Thread-130779] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:14:11.731 [DEBUG] [Thread-130779] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:14:11.778 [DEBUG] [Thread-130779] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:14:11.778 [DEBUG] [Thread-130779] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:14:11.787 [DEBUG] [Thread-130779] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:14:11.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:14:11.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T16:14:11.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T16:14:11.810 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:14:11.810 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:14:11.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:14:11.818 [DEBUG] [Thread-130779] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:14:14.095 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:14:14.096 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:14:18.748 [DEBUG] [Thread-130781 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:14:23.651 [DEBUG] [Thread-130782 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:14:33.813 [DEBUG] [Thread-130783 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:14:41.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T16:14:41.841 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T16:14:41.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T16:14:42.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 16, 14, 10), 30.52, 12.7, 0.0, 32.04, 25.31, 0, 0, 0, 2, 0, 0),)
2025-12-31T16:14:42.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 16:14:10
2025-12-31T16:14:42.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T16:14:42.850 [DEBUG] [Thread-130784] [transport.py] [_log()] starting thread (client mode): 0xb955a680
2025-12-31T16:14:42.850 [DEBUG] [Thread-130784] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:14:42.871 [DEBUG] [Thread-130784] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T16:14:42.871 [INFO] [Thread-130784] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T16:14:42.874 [DEBUG] [Thread-130784] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:14:42.874 [DEBUG] [Thread-130784] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T16:14:42.874 [DEBUG] [Thread-130784] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:14:42.874 [DEBUG] [Thread-130784] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:14:42.874 [DEBUG] [Thread-130784] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:14:42.874 [DEBUG] [Thread-130784] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:14:42.874 [DEBUG] [Thread-130784] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:14:42.874 [DEBUG] [Thread-130784] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:14:42.874 [DEBUG] [Thread-130784] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:14:42.874 [DEBUG] [Thread-130784] [transport.py] [_log()] client lang: <none>
2025-12-31T16:14:42.874 [DEBUG] [Thread-130784] [transport.py] [_log()] server lang: <none>
2025-12-31T16:14:42.874 [DEBUG] [Thread-130784] [transport.py] [_log()] kex follows: False
2025-12-31T16:14:42.874 [DEBUG] [Thread-130784] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:14:42.874 [DEBUG] [Thread-130784] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:14:42.875 [DEBUG] [Thread-130784] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:14:42.875 [DEBUG] [Thread-130784] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:14:42.875 [DEBUG] [Thread-130784] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:14:42.875 [DEBUG] [Thread-130784] [transport.py] [_log()] Compression: none
2025-12-31T16:14:42.875 [DEBUG] [Thread-130784] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:14:42.893 [DEBUG] [Thread-130784] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:14:42.893 [DEBUG] [Thread-130784] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:14:42.894 [DEBUG] [Thread-130784] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T16:14:42.894 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T16:14:42.895 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:14:42.896 [DEBUG] [Thread-130784] [transport.py] [_log()] userauth is OK
2025-12-31T16:14:42.896 [DEBUG] [Thread-130784] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:14:42.896 [DEBUG] [Thread-130784] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:14:42.896 [DEBUG] [Thread-130784] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T16:14:42.896 [DEBUG] [Thread-130784] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:14:42.919 [INFO] [Thread-130784] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:14:42.919 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:14:43.723 [DEBUG] [Thread-130784] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:14:43.723 [DEBUG] [Thread-130784] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:14:43.723 [DEBUG] [Thread-130784] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T16:14:43.763 [DEBUG] [Thread-130784] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:14:43.763 [DEBUG] [Thread-130784] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:14:43.766 [DEBUG] [Thread-130784] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:14:43.773 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:14:43.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T16:14:43.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T16:14:43.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T16:14:43.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:14:43.778 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T16:14:43.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:14:43.778 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:14:43.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T16:14:43.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.592850 -999.00  +25.70  34.86     18   -0.10 1 2 2 1 1   888    0 24.30 -56.51 ----- 33.6 34.9 298.9 40.0 29.5 -20.2 29.4 -20.8 29.4 -20.0 29.7 -18.1
2025-12-31T16:14:43.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T16:14:43.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T16:14:43.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.592850
2025-12-31T16:14:43.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T16:14:43.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T16:14:43.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T16:14:43.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T16:14:43.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T16:14:43.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T16:14:10', tmtdew=30.52, humidity=12.7, cloud=0.0, wind=32.04, temperature=25.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T14:13:42.240', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T16:14:43.779 [DEBUG] [Thread-130784] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:14:43.853 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T16:14:43.864 [DEBUG] [Thread-130787] [transport.py] [_log()] starting thread (client mode): 0xb955bac0
2025-12-31T16:14:43.864 [DEBUG] [Thread-130787] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:14:43.878 [DEBUG] [Thread-130787] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T16:14:43.878 [INFO] [Thread-130787] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T16:14:43.886 [DEBUG] [Thread-130787] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:14:43.886 [DEBUG] [Thread-130787] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T16:14:43.886 [DEBUG] [Thread-130787] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:14:43.886 [DEBUG] [Thread-130787] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:14:43.886 [DEBUG] [Thread-130787] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:14:43.886 [DEBUG] [Thread-130787] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:14:43.886 [DEBUG] [Thread-130787] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:14:43.886 [DEBUG] [Thread-130787] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:14:43.886 [DEBUG] [Thread-130787] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:14:43.886 [DEBUG] [Thread-130787] [transport.py] [_log()] client lang: <none>
2025-12-31T16:14:43.886 [DEBUG] [Thread-130787] [transport.py] [_log()] server lang: <none>
2025-12-31T16:14:43.886 [DEBUG] [Thread-130787] [transport.py] [_log()] kex follows: False
2025-12-31T16:14:43.886 [DEBUG] [Thread-130787] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:14:43.886 [DEBUG] [Thread-130787] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:14:43.886 [DEBUG] [Thread-130787] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:14:43.886 [DEBUG] [Thread-130787] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:14:43.886 [DEBUG] [Thread-130787] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:14:43.886 [DEBUG] [Thread-130787] [transport.py] [_log()] Compression: none
2025-12-31T16:14:43.886 [DEBUG] [Thread-130787] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:14:43.940 [DEBUG] [Thread-130787] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:14:43.940 [DEBUG] [Thread-130787] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:14:43.941 [DEBUG] [Thread-130787] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T16:14:43.941 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T16:14:43.941 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:14:43.997 [DEBUG] [Thread-130787] [transport.py] [_log()] userauth is OK
2025-12-31T16:14:43.998 [DEBUG] [Thread-130787] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:14:43.998 [DEBUG] [Thread-130787] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:14:43.998 [DEBUG] [Thread-130787] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T16:14:43.998 [DEBUG] [Thread-130787] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:14:44.011 [INFO] [Thread-130787] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:14:44.011 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T16:14:44.012 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:14:44.867 [DEBUG] [Thread-130787] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:14:44.867 [DEBUG] [Thread-130787] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:14:44.914 [DEBUG] [Thread-130787] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:14:44.914 [DEBUG] [Thread-130787] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:14:44.923 [DEBUG] [Thread-130787] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:14:44.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:14:44.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-12-31T16:14:44.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T16:14:44.947 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:14:44.947 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:14:44.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:14:44.955 [DEBUG] [Thread-130787] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:14:48.846 [DEBUG] [Thread-130789 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:15:03.900 [DEBUG] [Thread-130790 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:15:14.237 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:15:14.238 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:15:14.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T16:15:14.948 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T16:15:14.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T16:15:15.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 16, 14, 42), 30.59, 12.89, 0.0, 34.71, 25.42, 0, 0, 0, 2, 0, 0),)
2025-12-31T16:15:15.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 16:14:42
2025-12-31T16:15:15.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T16:15:16.056 [DEBUG] [Thread-130791] [transport.py] [_log()] starting thread (client mode): 0xb6bb84f0
2025-12-31T16:15:16.056 [DEBUG] [Thread-130791] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:15:16.076 [DEBUG] [Thread-130791] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T16:15:16.076 [INFO] [Thread-130791] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T16:15:16.080 [DEBUG] [Thread-130791] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:15:16.080 [DEBUG] [Thread-130791] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T16:15:16.080 [DEBUG] [Thread-130791] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:15:16.080 [DEBUG] [Thread-130791] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:15:16.080 [DEBUG] [Thread-130791] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:15:16.080 [DEBUG] [Thread-130791] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:15:16.080 [DEBUG] [Thread-130791] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:15:16.080 [DEBUG] [Thread-130791] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:15:16.080 [DEBUG] [Thread-130791] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:15:16.080 [DEBUG] [Thread-130791] [transport.py] [_log()] client lang: <none>
2025-12-31T16:15:16.080 [DEBUG] [Thread-130791] [transport.py] [_log()] server lang: <none>
2025-12-31T16:15:16.080 [DEBUG] [Thread-130791] [transport.py] [_log()] kex follows: False
2025-12-31T16:15:16.080 [DEBUG] [Thread-130791] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:15:16.080 [DEBUG] [Thread-130791] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:15:16.080 [DEBUG] [Thread-130791] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:15:16.080 [DEBUG] [Thread-130791] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:15:16.080 [DEBUG] [Thread-130791] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:15:16.080 [DEBUG] [Thread-130791] [transport.py] [_log()] Compression: none
2025-12-31T16:15:16.080 [DEBUG] [Thread-130791] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:15:16.096 [DEBUG] [Thread-130791] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:15:16.096 [DEBUG] [Thread-130791] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:15:16.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T16:15:16.097 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:15:16.097 [DEBUG] [Thread-130791] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T16:15:16.097 [DEBUG] [Thread-130791] [transport.py] [_log()] userauth is OK
2025-12-31T16:15:16.097 [DEBUG] [Thread-130791] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:15:16.097 [DEBUG] [Thread-130791] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:15:16.097 [DEBUG] [Thread-130791] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T16:15:16.097 [DEBUG] [Thread-130791] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:15:16.109 [INFO] [Thread-130791] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:15:16.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:15:18.929 [DEBUG] [Thread-130793 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:15:19.649 [DEBUG] [Thread-130791] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:15:19.649 [DEBUG] [Thread-130791] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:15:19.649 [DEBUG] [Thread-130791] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T16:15:19.691 [DEBUG] [Thread-130791] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:15:19.691 [DEBUG] [Thread-130791] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:15:19.693 [DEBUG] [Thread-130791] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:15:19.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:15:19.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T16:15:19.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T16:15:19.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T16:15:19.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:15:19.736 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T16:15:19.736 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:15:19.736 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:15:19.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T16:15:19.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.593544 -999.00  +25.40  32.64     17   -0.80 1 2 2 1 1   888    0 24.69 -34.88 ----- 30.7 32.6 294.2 38.5 29.2 -20.7 29.1 -21.4 29.1 -21.1 29.3 -18.8
2025-12-31T16:15:19.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T16:15:19.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T16:15:19.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.593544
2025-12-31T16:15:19.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T16:15:19.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T16:15:19.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T16:15:19.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T16:15:19.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T16:15:19.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T16:14:42', tmtdew=30.59, humidity=12.89, cloud=0.0, wind=34.71, temperature=25.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T14:14:42.202', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T16:15:19.737 [DEBUG] [Thread-130791] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:15: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-12-31T16:15:19.822 [DEBUG] [Thread-130795] [transport.py] [_log()] starting thread (client mode): 0xb6ba0220
2025-12-31T16:15:19.822 [DEBUG] [Thread-130795] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:15:19.837 [DEBUG] [Thread-130795] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T16:15:19.837 [INFO] [Thread-130795] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T16:15:19.845 [DEBUG] [Thread-130795] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:15:19.845 [DEBUG] [Thread-130795] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T16:15:19.845 [DEBUG] [Thread-130795] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:15:19.845 [DEBUG] [Thread-130795] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:15:19.845 [DEBUG] [Thread-130795] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:15:19.845 [DEBUG] [Thread-130795] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:15:19.845 [DEBUG] [Thread-130795] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:15:19.845 [DEBUG] [Thread-130795] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:15:19.845 [DEBUG] [Thread-130795] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:15:19.845 [DEBUG] [Thread-130795] [transport.py] [_log()] client lang: <none>
2025-12-31T16:15:19.845 [DEBUG] [Thread-130795] [transport.py] [_log()] server lang: <none>
2025-12-31T16:15:19.845 [DEBUG] [Thread-130795] [transport.py] [_log()] kex follows: False
2025-12-31T16:15:19.845 [DEBUG] [Thread-130795] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:15:19.845 [DEBUG] [Thread-130795] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:15:19.845 [DEBUG] [Thread-130795] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:15:19.845 [DEBUG] [Thread-130795] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:15:19.845 [DEBUG] [Thread-130795] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:15:19.845 [DEBUG] [Thread-130795] [transport.py] [_log()] Compression: none
2025-12-31T16:15:19.845 [DEBUG] [Thread-130795] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:15:19.900 [DEBUG] [Thread-130795] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:15:19.900 [DEBUG] [Thread-130795] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:15:19.901 [DEBUG] [Thread-130795] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T16:15:19.901 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T16:15:19.901 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:15:19.958 [DEBUG] [Thread-130795] [transport.py] [_log()] userauth is OK
2025-12-31T16:15:19.958 [DEBUG] [Thread-130795] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:15:19.958 [DEBUG] [Thread-130795] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:15:19.958 [DEBUG] [Thread-130795] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T16:15:19.958 [DEBUG] [Thread-130795] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:15:19.972 [INFO] [Thread-130795] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:15:19.972 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T16:15:19.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:15:20.803 [DEBUG] [Thread-130795] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:15:20.804 [DEBUG] [Thread-130795] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:15:20.852 [DEBUG] [Thread-130795] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:15:20.853 [DEBUG] [Thread-130795] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:15:20.865 [DEBUG] [Thread-130795] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:15:20.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:15:20.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T16:15:20.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T16:15:20.895 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:15:20.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:15:20.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:15:20.904 [DEBUG] [Thread-130795] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:15:23.693 [DEBUG] [Thread-130797 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:15:33.965 [DEBUG] [Thread-130798 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:15:49.025 [DEBUG] [Thread-130799 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:15:50.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T16:15:50.926 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T16:15:50.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T16:15:51.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 16, 15, 47), 30.95, 12.37, 0.0, 32.39, 25.22, 0, 0, 0, 2, 0, 0),)
2025-12-31T16:15:51.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 16:15:47
2025-12-31T16:15:51.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T16:15:51.921 [DEBUG] [Thread-130800] [transport.py] [_log()] starting thread (client mode): 0xb95f2cb0
2025-12-31T16:15:51.921 [DEBUG] [Thread-130800] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:15:51.943 [DEBUG] [Thread-130800] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T16:15:51.943 [INFO] [Thread-130800] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T16:15:51.946 [DEBUG] [Thread-130800] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:15:51.946 [DEBUG] [Thread-130800] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T16:15:51.946 [DEBUG] [Thread-130800] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:15:51.946 [DEBUG] [Thread-130800] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:15:51.946 [DEBUG] [Thread-130800] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:15:51.946 [DEBUG] [Thread-130800] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:15:51.946 [DEBUG] [Thread-130800] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:15:51.946 [DEBUG] [Thread-130800] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:15:51.946 [DEBUG] [Thread-130800] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:15:51.946 [DEBUG] [Thread-130800] [transport.py] [_log()] client lang: <none>
2025-12-31T16:15:51.946 [DEBUG] [Thread-130800] [transport.py] [_log()] server lang: <none>
2025-12-31T16:15:51.946 [DEBUG] [Thread-130800] [transport.py] [_log()] kex follows: False
2025-12-31T16:15:51.946 [DEBUG] [Thread-130800] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:15:51.946 [DEBUG] [Thread-130800] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:15:51.946 [DEBUG] [Thread-130800] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:15:51.946 [DEBUG] [Thread-130800] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:15:51.946 [DEBUG] [Thread-130800] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:15:51.946 [DEBUG] [Thread-130800] [transport.py] [_log()] Compression: none
2025-12-31T16:15:51.946 [DEBUG] [Thread-130800] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:15:51.964 [DEBUG] [Thread-130800] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:15:51.965 [DEBUG] [Thread-130800] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:15:51.965 [DEBUG] [Thread-130800] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T16:15:51.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T16:15:51.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:15:51.967 [DEBUG] [Thread-130800] [transport.py] [_log()] userauth is OK
2025-12-31T16:15:51.967 [DEBUG] [Thread-130800] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:15:51.967 [DEBUG] [Thread-130800] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:15:51.968 [DEBUG] [Thread-130800] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T16:15:51.968 [DEBUG] [Thread-130800] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:15:51.989 [INFO] [Thread-130800] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:15:51.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:15:52.604 [DEBUG] [Thread-130800] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:15:52.605 [DEBUG] [Thread-130800] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:15:52.605 [DEBUG] [Thread-130800] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T16:15:52.646 [DEBUG] [Thread-130800] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:15:52.647 [DEBUG] [Thread-130800] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:15:52.650 [DEBUG] [Thread-130800] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:15:52.662 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:15:52.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T16:15:52.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T16:15:52.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T16:15:52.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:15:52.683 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T16:15:52.683 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:15:52.683 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:15:52.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T16:15:52.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.593891 -999.00  +25.00  28.63     18   -0.70 1 2 1 1 1   888    0 25.06 -23.29 ----- 30.0 28.6 288.6 41.8 29.0 -20.6 28.9 -21.2 28.8 -20.5 29.1 -18.8
2025-12-31T16:15:52.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T16:15:52.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T16:15:52.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.593891
2025-12-31T16:15:52.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T16:15:52.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T16:15:52.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T16:15:52.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T16:15:52.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T16:15:52.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T16:15:47', tmtdew=30.95, humidity=12.37, cloud=0.0, wind=32.39, temperature=25.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T14:15:12.182', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T16:15:52.686 [DEBUG] [Thread-130800] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:15:52.775 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T16:15:52.787 [DEBUG] [Thread-130803] [transport.py] [_log()] starting thread (client mode): 0xb955bf10
2025-12-31T16:15:52.787 [DEBUG] [Thread-130803] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:15:52.804 [DEBUG] [Thread-130803] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T16:15:52.804 [INFO] [Thread-130803] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T16:15:52.812 [DEBUG] [Thread-130803] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:15:52.812 [DEBUG] [Thread-130803] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T16:15:52.812 [DEBUG] [Thread-130803] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:15:52.812 [DEBUG] [Thread-130803] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:15:52.812 [DEBUG] [Thread-130803] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:15:52.812 [DEBUG] [Thread-130803] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:15:52.813 [DEBUG] [Thread-130803] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:15:52.813 [DEBUG] [Thread-130803] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:15:52.813 [DEBUG] [Thread-130803] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:15:52.813 [DEBUG] [Thread-130803] [transport.py] [_log()] client lang: <none>
2025-12-31T16:15:52.813 [DEBUG] [Thread-130803] [transport.py] [_log()] server lang: <none>
2025-12-31T16:15:52.813 [DEBUG] [Thread-130803] [transport.py] [_log()] kex follows: False
2025-12-31T16:15:52.813 [DEBUG] [Thread-130803] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:15:52.813 [DEBUG] [Thread-130803] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:15:52.813 [DEBUG] [Thread-130803] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:15:52.813 [DEBUG] [Thread-130803] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:15:52.813 [DEBUG] [Thread-130803] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:15:52.813 [DEBUG] [Thread-130803] [transport.py] [_log()] Compression: none
2025-12-31T16:15:52.813 [DEBUG] [Thread-130803] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:15:52.871 [DEBUG] [Thread-130803] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:15:52.871 [DEBUG] [Thread-130803] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:15:52.872 [DEBUG] [Thread-130803] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T16:15:52.872 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T16:15:52.873 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:15:52.927 [DEBUG] [Thread-130803] [transport.py] [_log()] userauth is OK
2025-12-31T16:15:52.927 [DEBUG] [Thread-130803] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:15:52.927 [DEBUG] [Thread-130803] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:15:52.927 [DEBUG] [Thread-130803] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T16:15:52.927 [DEBUG] [Thread-130803] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:15:52.946 [INFO] [Thread-130803] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:15:52.946 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T16:15:52.947 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:15:53.821 [DEBUG] [Thread-130803] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:15:53.821 [DEBUG] [Thread-130803] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:15:53.868 [DEBUG] [Thread-130803] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:15:53.868 [DEBUG] [Thread-130803] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:15:53.877 [DEBUG] [Thread-130803] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:15:53.884 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:15:53.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T16:15:53.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T16:15:53.900 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:15:53.900 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:15:53.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:15:53.908 [DEBUG] [Thread-130803] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:16:04.054 [DEBUG] [Thread-130805 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:16:14.377 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:16:14.378 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:16:19.105 [DEBUG] [Thread-130806 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:16:23.750 [DEBUG] [Thread-130807 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:16:23.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T16:16:23.901 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T16:16:23.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-12-31T16:16:24.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 16, 16, 19), 30.95, 12.37, 0.0, 29.63, 25.21, 0, 0, 0, 2, 0, 0),)
2025-12-31T16:16:24.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 16:16:19
2025-12-31T16:16:24.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T16:16:24.897 [DEBUG] [Thread-130808] [transport.py] [_log()] starting thread (client mode): 0xb95f3b20
2025-12-31T16:16:24.897 [DEBUG] [Thread-130808] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:16:24.917 [DEBUG] [Thread-130808] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T16:16:24.917 [INFO] [Thread-130808] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T16:16:24.920 [DEBUG] [Thread-130808] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:16:24.921 [DEBUG] [Thread-130808] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T16:16:24.921 [DEBUG] [Thread-130808] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:16:24.921 [DEBUG] [Thread-130808] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:16:24.921 [DEBUG] [Thread-130808] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:16:24.921 [DEBUG] [Thread-130808] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:16:24.921 [DEBUG] [Thread-130808] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:16:24.921 [DEBUG] [Thread-130808] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:16:24.921 [DEBUG] [Thread-130808] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:16:24.921 [DEBUG] [Thread-130808] [transport.py] [_log()] client lang: <none>
2025-12-31T16:16:24.921 [DEBUG] [Thread-130808] [transport.py] [_log()] server lang: <none>
2025-12-31T16:16:24.921 [DEBUG] [Thread-130808] [transport.py] [_log()] kex follows: False
2025-12-31T16:16:24.921 [DEBUG] [Thread-130808] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:16:24.921 [DEBUG] [Thread-130808] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:16:24.921 [DEBUG] [Thread-130808] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:16:24.921 [DEBUG] [Thread-130808] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:16:24.921 [DEBUG] [Thread-130808] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:16:24.921 [DEBUG] [Thread-130808] [transport.py] [_log()] Compression: none
2025-12-31T16:16:24.921 [DEBUG] [Thread-130808] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:16:24.929 [DEBUG] [Thread-130808] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:16:24.930 [DEBUG] [Thread-130808] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:16:24.930 [DEBUG] [Thread-130808] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T16:16:24.930 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T16:16:24.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:16:24.932 [DEBUG] [Thread-130808] [transport.py] [_log()] userauth is OK
2025-12-31T16:16:24.932 [DEBUG] [Thread-130808] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:16:24.932 [DEBUG] [Thread-130808] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:16:24.932 [DEBUG] [Thread-130808] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T16:16:24.932 [DEBUG] [Thread-130808] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:16:24.949 [INFO] [Thread-130808] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:16:24.950 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:16:25.680 [DEBUG] [Thread-130808] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:16:25.681 [DEBUG] [Thread-130808] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:16:25.681 [DEBUG] [Thread-130808] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T16:16:25.723 [DEBUG] [Thread-130808] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:16:25.723 [DEBUG] [Thread-130808] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:16:25.726 [DEBUG] [Thread-130808] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:16:25.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:16:25.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T16:16:25.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T16:16:25.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T16:16:25.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:16:25.745 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T16:16:25.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:16:25.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:16:25.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T16:16:25.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.594238 -999.00  +24.90  24.43     18   -0.90 1 2 1 1 1   888    0 25.27 -15.46 ----- 30.1 24.4 302.8 34.1 28.8 -19.9 28.8 -20.5 28.6 -20.9 28.9 -18.5
2025-12-31T16:16:25.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T16:16:25.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T16:16:25.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.594238
2025-12-31T16:16:25.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T16:16:25.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T16:16:25.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T16:16:25.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T16:16:25.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T16:16:25.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T16:16:19', tmtdew=30.95, humidity=12.37, cloud=0.0, wind=29.63, temperature=25.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T14:15:42.163', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T16:16:25.747 [DEBUG] [Thread-130808] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:16:25.823 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T16:16:25.834 [DEBUG] [Thread-130811] [transport.py] [_log()] starting thread (client mode): 0xb6bbc640
2025-12-31T16:16:25.834 [DEBUG] [Thread-130811] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:16:25.848 [DEBUG] [Thread-130811] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T16:16:25.848 [INFO] [Thread-130811] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T16:16:25.855 [DEBUG] [Thread-130811] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:16:25.856 [DEBUG] [Thread-130811] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T16:16:25.856 [DEBUG] [Thread-130811] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:16:25.856 [DEBUG] [Thread-130811] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:16:25.856 [DEBUG] [Thread-130811] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:16:25.856 [DEBUG] [Thread-130811] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:16:25.856 [DEBUG] [Thread-130811] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:16:25.856 [DEBUG] [Thread-130811] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:16:25.856 [DEBUG] [Thread-130811] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:16:25.856 [DEBUG] [Thread-130811] [transport.py] [_log()] client lang: <none>
2025-12-31T16:16:25.856 [DEBUG] [Thread-130811] [transport.py] [_log()] server lang: <none>
2025-12-31T16:16:25.856 [DEBUG] [Thread-130811] [transport.py] [_log()] kex follows: False
2025-12-31T16:16:25.856 [DEBUG] [Thread-130811] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:16:25.857 [DEBUG] [Thread-130811] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:16:25.857 [DEBUG] [Thread-130811] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:16:25.857 [DEBUG] [Thread-130811] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:16:25.857 [DEBUG] [Thread-130811] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:16:25.857 [DEBUG] [Thread-130811] [transport.py] [_log()] Compression: none
2025-12-31T16:16:25.857 [DEBUG] [Thread-130811] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:16:25.915 [DEBUG] [Thread-130811] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:16:25.916 [DEBUG] [Thread-130811] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:16:25.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T16:16:25.917 [DEBUG] [Thread-130811] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T16:16:25.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:16:25.971 [DEBUG] [Thread-130811] [transport.py] [_log()] userauth is OK
2025-12-31T16:16:25.971 [DEBUG] [Thread-130811] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:16:25.971 [DEBUG] [Thread-130811] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:16:25.971 [DEBUG] [Thread-130811] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T16:16:25.971 [DEBUG] [Thread-130811] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:16:25.996 [INFO] [Thread-130811] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:16:25.996 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T16:16:25.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:16:26.850 [DEBUG] [Thread-130811] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:16:26.851 [DEBUG] [Thread-130811] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:16:26.898 [DEBUG] [Thread-130811] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:16:26.898 [DEBUG] [Thread-130811] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:16:26.907 [DEBUG] [Thread-130811] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:16:26.917 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:16:26.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T16:16:26.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T16:16:26.935 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:16:26.935 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:16:26.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:16:26.944 [DEBUG] [Thread-130811] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:16:34.138 [DEBUG] [Thread-130813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:16:49.191 [DEBUG] [Thread-130814 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:16:56.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T16:16:56.967 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T16:16:56.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T16:16:57.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 16, 16, 51), 30.67, 12.97, 0.0, 34.28, 25.26, 0, 0, 0, 2, 0, 0),)
2025-12-31T16:16:57.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 16:16:51
2025-12-31T16:16:57.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T16:16:57.966 [DEBUG] [Thread-130815] [transport.py] [_log()] starting thread (client mode): 0xb6ba1db0
2025-12-31T16:16:57.966 [DEBUG] [Thread-130815] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:16:57.987 [DEBUG] [Thread-130815] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T16:16:57.987 [INFO] [Thread-130815] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T16:16:57.991 [DEBUG] [Thread-130815] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:16:57.991 [DEBUG] [Thread-130815] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T16:16:57.991 [DEBUG] [Thread-130815] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:16:57.991 [DEBUG] [Thread-130815] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:16:57.991 [DEBUG] [Thread-130815] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:16:57.991 [DEBUG] [Thread-130815] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:16:57.991 [DEBUG] [Thread-130815] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:16:57.991 [DEBUG] [Thread-130815] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:16:57.991 [DEBUG] [Thread-130815] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:16:57.991 [DEBUG] [Thread-130815] [transport.py] [_log()] client lang: <none>
2025-12-31T16:16:57.991 [DEBUG] [Thread-130815] [transport.py] [_log()] server lang: <none>
2025-12-31T16:16:57.991 [DEBUG] [Thread-130815] [transport.py] [_log()] kex follows: False
2025-12-31T16:16:57.991 [DEBUG] [Thread-130815] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:16:57.991 [DEBUG] [Thread-130815] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:16:57.991 [DEBUG] [Thread-130815] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:16:57.991 [DEBUG] [Thread-130815] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:16:57.991 [DEBUG] [Thread-130815] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:16:57.991 [DEBUG] [Thread-130815] [transport.py] [_log()] Compression: none
2025-12-31T16:16:57.991 [DEBUG] [Thread-130815] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:16:58.009 [DEBUG] [Thread-130815] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:16:58.010 [DEBUG] [Thread-130815] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:16:58.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T16:16:58.011 [DEBUG] [Thread-130815] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T16:16:58.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:16:58.013 [DEBUG] [Thread-130815] [transport.py] [_log()] userauth is OK
2025-12-31T16:16:58.014 [DEBUG] [Thread-130815] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:16:58.014 [DEBUG] [Thread-130815] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:16:58.014 [DEBUG] [Thread-130815] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T16:16:58.014 [DEBUG] [Thread-130815] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:16:58.033 [INFO] [Thread-130815] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:16:58.034 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:16:58.689 [DEBUG] [Thread-130815] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:16:58.689 [DEBUG] [Thread-130815] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:16:58.690 [DEBUG] [Thread-130815] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T16:16:58.730 [DEBUG] [Thread-130815] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:16:58.730 [DEBUG] [Thread-130815] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:16:58.734 [DEBUG] [Thread-130815] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:16:58.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:16:58.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T16:16:58.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T16:16:58.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T16:16:58.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:16:58.760 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T16:16:58.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:16:58.760 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:16:58.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T16:16:58.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.594586 -999.00  +25.00  37.52     18   -0.50 1 2 2 1 1   888    0 25.93 -11.43 ----- 31.1 37.5 290.8 41.8 28.8 -20.3 28.7 -20.8 28.5 -19.2 28.8 -18.1
2025-12-31T16:16:58.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T16:16:58.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T16:16:58.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.594586
2025-12-31T16:16:58.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T16:16:58.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T16:16:58.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T16:16:58.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T16:16:58.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T16:16:58.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T16:16:51', tmtdew=30.67, humidity=12.97, cloud=0.0, wind=34.28, temperature=25.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T14:16:12.230', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T16:16:58.763 [DEBUG] [Thread-130815] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:16:58.846 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T16:16:58.859 [DEBUG] [Thread-130818] [transport.py] [_log()] starting thread (client mode): 0xb957a830
2025-12-31T16:16:58.859 [DEBUG] [Thread-130818] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:16:58.874 [DEBUG] [Thread-130818] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T16:16:58.874 [INFO] [Thread-130818] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T16:16:58.882 [DEBUG] [Thread-130818] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:16:58.882 [DEBUG] [Thread-130818] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T16:16:58.882 [DEBUG] [Thread-130818] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:16:58.882 [DEBUG] [Thread-130818] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:16:58.882 [DEBUG] [Thread-130818] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:16:58.882 [DEBUG] [Thread-130818] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:16:58.882 [DEBUG] [Thread-130818] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:16:58.883 [DEBUG] [Thread-130818] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:16:58.883 [DEBUG] [Thread-130818] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:16:58.883 [DEBUG] [Thread-130818] [transport.py] [_log()] client lang: <none>
2025-12-31T16:16:58.883 [DEBUG] [Thread-130818] [transport.py] [_log()] server lang: <none>
2025-12-31T16:16:58.883 [DEBUG] [Thread-130818] [transport.py] [_log()] kex follows: False
2025-12-31T16:16:58.883 [DEBUG] [Thread-130818] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:16:58.883 [DEBUG] [Thread-130818] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:16:58.883 [DEBUG] [Thread-130818] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:16:58.883 [DEBUG] [Thread-130818] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:16:58.883 [DEBUG] [Thread-130818] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:16:58.884 [DEBUG] [Thread-130818] [transport.py] [_log()] Compression: none
2025-12-31T16:16:58.884 [DEBUG] [Thread-130818] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:16:58.942 [DEBUG] [Thread-130818] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:16:58.942 [DEBUG] [Thread-130818] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:16:58.943 [DEBUG] [Thread-130818] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T16:16:58.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T16:16:58.944 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:16:59.001 [DEBUG] [Thread-130818] [transport.py] [_log()] userauth is OK
2025-12-31T16:16:59.002 [DEBUG] [Thread-130818] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:16:59.002 [DEBUG] [Thread-130818] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:16:59.002 [DEBUG] [Thread-130818] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T16:16:59.002 [DEBUG] [Thread-130818] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:16:59.020 [INFO] [Thread-130818] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:16:59.020 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T16:16:59.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:16:59.909 [DEBUG] [Thread-130818] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:16:59.909 [DEBUG] [Thread-130818] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:16:59.957 [DEBUG] [Thread-130818] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:16:59.957 [DEBUG] [Thread-130818] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:16:59.966 [DEBUG] [Thread-130818] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:16:59.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:16:59.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T16:16:59.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T16:16:59.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:16:59.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:16:59.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:17:00.007 [DEBUG] [Thread-130818] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:17:04.233 [DEBUG] [Thread-130820 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:17:14.532 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:17:14.533 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:17:19.281 [DEBUG] [Thread-130821 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:17:23.797 [DEBUG] [Thread-130822 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:17:30.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T16:17:30.030 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T16:17:30.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T16:17:30.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 16, 17, 23), 30.73, 12.92, 0.0, 32.87, 25.26, 0, 0, 0, 2, 0, 0),)
2025-12-31T16:17:30.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 16:17:23
2025-12-31T16:17:30.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T16:17:31.009 [DEBUG] [Thread-130823] [transport.py] [_log()] starting thread (client mode): 0xb6bbfd60
2025-12-31T16:17:31.009 [DEBUG] [Thread-130823] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:17:31.030 [DEBUG] [Thread-130823] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T16:17:31.030 [INFO] [Thread-130823] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T16:17:31.031 [DEBUG] [Thread-130823] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:17:31.031 [DEBUG] [Thread-130823] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T16:17:31.031 [DEBUG] [Thread-130823] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:17:31.031 [DEBUG] [Thread-130823] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:17:31.031 [DEBUG] [Thread-130823] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:17:31.031 [DEBUG] [Thread-130823] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:17:31.031 [DEBUG] [Thread-130823] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:17:31.031 [DEBUG] [Thread-130823] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:17:31.031 [DEBUG] [Thread-130823] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:17:31.031 [DEBUG] [Thread-130823] [transport.py] [_log()] client lang: <none>
2025-12-31T16:17:31.031 [DEBUG] [Thread-130823] [transport.py] [_log()] server lang: <none>
2025-12-31T16:17:31.031 [DEBUG] [Thread-130823] [transport.py] [_log()] kex follows: False
2025-12-31T16:17:31.031 [DEBUG] [Thread-130823] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:17:31.031 [DEBUG] [Thread-130823] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:17:31.031 [DEBUG] [Thread-130823] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:17:31.031 [DEBUG] [Thread-130823] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:17:31.031 [DEBUG] [Thread-130823] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:17:31.031 [DEBUG] [Thread-130823] [transport.py] [_log()] Compression: none
2025-12-31T16:17:31.031 [DEBUG] [Thread-130823] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:17:31.045 [DEBUG] [Thread-130823] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:17:31.045 [DEBUG] [Thread-130823] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:17:31.046 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T16:17:31.046 [DEBUG] [Thread-130823] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T16:17:31.047 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:17:31.048 [DEBUG] [Thread-130823] [transport.py] [_log()] userauth is OK
2025-12-31T16:17:31.048 [DEBUG] [Thread-130823] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:17:31.048 [DEBUG] [Thread-130823] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:17:31.048 [DEBUG] [Thread-130823] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T16:17:31.048 [DEBUG] [Thread-130823] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:17:31.067 [INFO] [Thread-130823] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:17:31.067 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:17:31.835 [DEBUG] [Thread-130823] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:17:31.835 [DEBUG] [Thread-130823] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:17:31.835 [DEBUG] [Thread-130823] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T16:17:31.876 [DEBUG] [Thread-130823] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:17:31.876 [DEBUG] [Thread-130823] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:17:31.878 [DEBUG] [Thread-130823] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:17:31.889 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:17:31.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T16:17:31.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T16:17:31.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T16:17:31.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:17:31.899 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T16:17:31.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:17:31.900 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:17:31.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T16:17:31.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.594933 -999.00  +25.20  30.15     18   -0.10 1 2 2 1 1   888    0 25.95 -9.98 ----- 25.7 30.1 283.2 43.2 28.6 -20.3 28.6 -20.7 28.4 -18.3 28.6 -17.9
2025-12-31T16:17:31.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T16:17:31.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T16:17:31.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.594933
2025-12-31T16:17:31.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T16:17:31.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T16:17:31.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T16:17:31.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T16:17:31.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T16:17:31.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T16:17:23', tmtdew=30.73, humidity=12.92, cloud=0.0, wind=32.87, temperature=25.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T14:16:42.211', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T16:17:31.903 [DEBUG] [Thread-130823] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:17:31.984 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T16:17:31.994 [DEBUG] [Thread-130826] [transport.py] [_log()] starting thread (client mode): 0xb6bbf4c0
2025-12-31T16:17:31.994 [DEBUG] [Thread-130826] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:17:32.009 [DEBUG] [Thread-130826] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T16:17:32.009 [INFO] [Thread-130826] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T16:17:32.017 [DEBUG] [Thread-130826] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:17:32.018 [DEBUG] [Thread-130826] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T16:17:32.018 [DEBUG] [Thread-130826] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:17:32.018 [DEBUG] [Thread-130826] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:17:32.018 [DEBUG] [Thread-130826] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:17:32.018 [DEBUG] [Thread-130826] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:17:32.018 [DEBUG] [Thread-130826] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:17:32.018 [DEBUG] [Thread-130826] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:17:32.018 [DEBUG] [Thread-130826] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:17:32.019 [DEBUG] [Thread-130826] [transport.py] [_log()] client lang: <none>
2025-12-31T16:17:32.019 [DEBUG] [Thread-130826] [transport.py] [_log()] server lang: <none>
2025-12-31T16:17:32.019 [DEBUG] [Thread-130826] [transport.py] [_log()] kex follows: False
2025-12-31T16:17:32.019 [DEBUG] [Thread-130826] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:17:32.019 [DEBUG] [Thread-130826] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:17:32.019 [DEBUG] [Thread-130826] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:17:32.019 [DEBUG] [Thread-130826] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:17:32.019 [DEBUG] [Thread-130826] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:17:32.019 [DEBUG] [Thread-130826] [transport.py] [_log()] Compression: none
2025-12-31T16:17:32.019 [DEBUG] [Thread-130826] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:17:32.075 [DEBUG] [Thread-130826] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:17:32.076 [DEBUG] [Thread-130826] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:17:32.076 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T16:17:32.077 [DEBUG] [Thread-130826] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T16:17:32.077 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:17:32.131 [DEBUG] [Thread-130826] [transport.py] [_log()] userauth is OK
2025-12-31T16:17:32.131 [DEBUG] [Thread-130826] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:17:32.131 [DEBUG] [Thread-130826] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:17:32.131 [DEBUG] [Thread-130826] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T16:17:32.132 [DEBUG] [Thread-130826] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:17:32.150 [INFO] [Thread-130826] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:17:32.151 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T16:17:32.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:17:32.950 [DEBUG] [Thread-130826] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:17:32.950 [DEBUG] [Thread-130826] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:17:32.998 [DEBUG] [Thread-130826] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:17:32.998 [DEBUG] [Thread-130826] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:17:33.007 [DEBUG] [Thread-130826] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:17:33.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:17:33.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T16:17:33.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T16:17:33.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:17:33.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:17:33.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:17:33.044 [DEBUG] [Thread-130826] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:17:34.321 [DEBUG] [Thread-130828 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:17:49.384 [DEBUG] [Thread-130829 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:18:03.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T16:18:03.067 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T16:18:03.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T16:18:03.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 16, 17, 55), 30.17, 13.27, 0.0, 37.71, 25.27, 0, 0, 0, 2, 0, 0),)
2025-12-31T16:18:03.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 16:17:55
2025-12-31T16:18:03.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T16:18:04.041 [DEBUG] [Thread-130830] [transport.py] [_log()] starting thread (client mode): 0xb6bb1ba0
2025-12-31T16:18:04.041 [DEBUG] [Thread-130830] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:18:04.062 [DEBUG] [Thread-130830] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T16:18:04.062 [INFO] [Thread-130830] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T16:18:04.064 [DEBUG] [Thread-130830] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:18:04.064 [DEBUG] [Thread-130830] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T16:18:04.064 [DEBUG] [Thread-130830] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:18:04.064 [DEBUG] [Thread-130830] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:18:04.064 [DEBUG] [Thread-130830] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:18:04.064 [DEBUG] [Thread-130830] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:18:04.064 [DEBUG] [Thread-130830] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:18:04.064 [DEBUG] [Thread-130830] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:18:04.064 [DEBUG] [Thread-130830] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:18:04.065 [DEBUG] [Thread-130830] [transport.py] [_log()] client lang: <none>
2025-12-31T16:18:04.065 [DEBUG] [Thread-130830] [transport.py] [_log()] server lang: <none>
2025-12-31T16:18:04.065 [DEBUG] [Thread-130830] [transport.py] [_log()] kex follows: False
2025-12-31T16:18:04.065 [DEBUG] [Thread-130830] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:18:04.065 [DEBUG] [Thread-130830] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:18:04.065 [DEBUG] [Thread-130830] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:18:04.065 [DEBUG] [Thread-130830] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:18:04.065 [DEBUG] [Thread-130830] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:18:04.065 [DEBUG] [Thread-130830] [transport.py] [_log()] Compression: none
2025-12-31T16:18:04.065 [DEBUG] [Thread-130830] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:18:04.077 [DEBUG] [Thread-130830] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:18:04.078 [DEBUG] [Thread-130830] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:18:04.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T16:18:04.079 [DEBUG] [Thread-130830] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T16:18:04.080 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:18:04.081 [DEBUG] [Thread-130830] [transport.py] [_log()] userauth is OK
2025-12-31T16:18:04.081 [DEBUG] [Thread-130830] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:18:04.081 [DEBUG] [Thread-130830] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:18:04.081 [DEBUG] [Thread-130830] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T16:18:04.081 [DEBUG] [Thread-130830] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:18:04.105 [INFO] [Thread-130830] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:18:04.106 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:18:04.413 [DEBUG] [Thread-130832 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:18:04.786 [DEBUG] [Thread-130830] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:18:04.786 [DEBUG] [Thread-130830] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:18:04.787 [DEBUG] [Thread-130830] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T16:18:04.827 [DEBUG] [Thread-130830] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:18:04.827 [DEBUG] [Thread-130830] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:18:04.831 [DEBUG] [Thread-130830] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:18:04.844 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:18:04.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T16:18:04.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T16:18:04.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T16:18:04.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:18:04.859 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T16:18:04.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:18:04.859 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:18:04.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T16:18:04.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.595280 -999.00  +24.90  36.06     18   -0.30 1 2 2 1 1   888    0 25.87 -4.55 ----- 34.6 36.1 275.2 45.1 28.3 -21.7 28.4 -21.0 28.0 -20.1 28.4 -18.1
2025-12-31T16:18:04.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T16:18:04.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T16:18:04.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.595280
2025-12-31T16:18:04.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T16:18:04.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T16:18:04.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T16:18:04.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T16:18:04.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T16:18:04.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T16:17:55', tmtdew=30.17, humidity=13.27, cloud=0.0, wind=37.71, temperature=25.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T14:17:12.192', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T16:18:04.862 [DEBUG] [Thread-130830] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:18:04.946 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T16:18:04.958 [DEBUG] [Thread-130834] [transport.py] [_log()] starting thread (client mode): 0xb6b611b0
2025-12-31T16:18:04.958 [DEBUG] [Thread-130834] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:18:04.975 [DEBUG] [Thread-130834] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T16:18:04.975 [INFO] [Thread-130834] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T16:18:04.983 [DEBUG] [Thread-130834] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:18:04.983 [DEBUG] [Thread-130834] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T16:18:04.983 [DEBUG] [Thread-130834] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:18:04.983 [DEBUG] [Thread-130834] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:18:04.983 [DEBUG] [Thread-130834] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:18:04.983 [DEBUG] [Thread-130834] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:18:04.983 [DEBUG] [Thread-130834] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:18:04.983 [DEBUG] [Thread-130834] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:18:04.983 [DEBUG] [Thread-130834] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:18:04.983 [DEBUG] [Thread-130834] [transport.py] [_log()] client lang: <none>
2025-12-31T16:18:04.983 [DEBUG] [Thread-130834] [transport.py] [_log()] server lang: <none>
2025-12-31T16:18:04.983 [DEBUG] [Thread-130834] [transport.py] [_log()] kex follows: False
2025-12-31T16:18:04.984 [DEBUG] [Thread-130834] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:18:04.984 [DEBUG] [Thread-130834] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:18:04.984 [DEBUG] [Thread-130834] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:18:04.984 [DEBUG] [Thread-130834] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:18:04.984 [DEBUG] [Thread-130834] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:18:04.984 [DEBUG] [Thread-130834] [transport.py] [_log()] Compression: none
2025-12-31T16:18:04.984 [DEBUG] [Thread-130834] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:18:05.040 [DEBUG] [Thread-130834] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:18:05.041 [DEBUG] [Thread-130834] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:18:05.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T16:18:05.042 [DEBUG] [Thread-130834] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T16:18:05.043 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:18:05.097 [DEBUG] [Thread-130834] [transport.py] [_log()] userauth is OK
2025-12-31T16:18:05.098 [DEBUG] [Thread-130834] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:18:05.098 [DEBUG] [Thread-130834] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:18:05.098 [DEBUG] [Thread-130834] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T16:18:05.098 [DEBUG] [Thread-130834] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:18:05.117 [INFO] [Thread-130834] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:18: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-12-31T16:18:05.118 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:18:05.964 [DEBUG] [Thread-130834] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:18:05.965 [DEBUG] [Thread-130834] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:18:06.013 [DEBUG] [Thread-130834] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:18:06.013 [DEBUG] [Thread-130834] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:18:06.022 [DEBUG] [Thread-130834] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:18:06.031 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:18: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-12-31T16:18:06.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T16:18:06.050 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:18:06.051 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:18:06.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:18:06.059 [DEBUG] [Thread-130834] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:18:14.670 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:18:14.672 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:18:19.453 [DEBUG] [Thread-130836 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:18:23.831 [DEBUG] [Thread-130837 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:18:34.498 [DEBUG] [Thread-130838 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:18:36.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T16:18:36.053 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T16:18:36.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T16:18:36.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 16, 18, 27), 30.05, 13.39, 0.0, 36.08, 25.27, 0, 0, 0, 2, 0, 0),)
2025-12-31T16:18:36.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 16:18:27
2025-12-31T16:18:36.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T16:18:37.028 [DEBUG] [Thread-130839] [transport.py] [_log()] starting thread (client mode): 0xb9578970
2025-12-31T16:18:37.028 [DEBUG] [Thread-130839] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:18:37.050 [DEBUG] [Thread-130839] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T16:18:37.050 [INFO] [Thread-130839] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T16:18:37.053 [DEBUG] [Thread-130839] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:18:37.053 [DEBUG] [Thread-130839] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T16:18:37.053 [DEBUG] [Thread-130839] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:18:37.053 [DEBUG] [Thread-130839] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:18:37.053 [DEBUG] [Thread-130839] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:18:37.053 [DEBUG] [Thread-130839] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:18:37.053 [DEBUG] [Thread-130839] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:18:37.053 [DEBUG] [Thread-130839] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:18:37.053 [DEBUG] [Thread-130839] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:18:37.053 [DEBUG] [Thread-130839] [transport.py] [_log()] client lang: <none>
2025-12-31T16:18:37.053 [DEBUG] [Thread-130839] [transport.py] [_log()] server lang: <none>
2025-12-31T16:18:37.053 [DEBUG] [Thread-130839] [transport.py] [_log()] kex follows: False
2025-12-31T16:18:37.053 [DEBUG] [Thread-130839] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:18:37.053 [DEBUG] [Thread-130839] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:18:37.053 [DEBUG] [Thread-130839] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:18:37.053 [DEBUG] [Thread-130839] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:18:37.053 [DEBUG] [Thread-130839] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:18:37.054 [DEBUG] [Thread-130839] [transport.py] [_log()] Compression: none
2025-12-31T16:18:37.054 [DEBUG] [Thread-130839] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:18:37.072 [DEBUG] [Thread-130839] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:18:37.073 [DEBUG] [Thread-130839] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:18:37.073 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T16:18:37.074 [DEBUG] [Thread-130839] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T16:18:37.074 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:18:37.076 [DEBUG] [Thread-130839] [transport.py] [_log()] userauth is OK
2025-12-31T16:18:37.076 [DEBUG] [Thread-130839] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:18:37.076 [DEBUG] [Thread-130839] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:18:37.076 [DEBUG] [Thread-130839] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T16:18:37.076 [DEBUG] [Thread-130839] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:18:37.095 [INFO] [Thread-130839] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:18:37.097 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:18:37.851 [DEBUG] [Thread-130839] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:18:37.851 [DEBUG] [Thread-130839] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:18:37.852 [DEBUG] [Thread-130839] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T16:18:37.891 [DEBUG] [Thread-130839] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:18:37.892 [DEBUG] [Thread-130839] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:18:37.894 [DEBUG] [Thread-130839] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:18:37.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:18:37.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T16:18:37.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T16:18:37.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T16:18:37.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:18:37.912 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T16:18:37.912 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:18:37.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:18:37.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T16:18:37.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.595627 -999.00  +24.60  27.15     19   -0.40 1 2 1 1 1   888    0 25.68 0.14 ----- 31.9 27.1 288.0 45.1 28.1 -20.2 28.2 -19.9 27.6 -17.9 28.1 -17.1
2025-12-31T16:18:37.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T16:18:37.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T16:18:37.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.595627
2025-12-31T16:18:37.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T16:18:37.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T16:18:37.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T16:18:37.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T16:18:37.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T16:18:37.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T16:18:27', tmtdew=30.05, humidity=13.39, cloud=0.0, wind=36.08, temperature=25.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T14:17:42.173', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T16:18:37.913 [DEBUG] [Thread-130839] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:18:37.997 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T16:18:38.009 [DEBUG] [Thread-130842] [transport.py] [_log()] starting thread (client mode): 0xb6b28f70
2025-12-31T16:18:38.009 [DEBUG] [Thread-130842] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:18:38.029 [DEBUG] [Thread-130842] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T16:18:38.030 [INFO] [Thread-130842] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T16:18:38.037 [DEBUG] [Thread-130842] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:18:38.037 [DEBUG] [Thread-130842] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T16:18:38.037 [DEBUG] [Thread-130842] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:18:38.037 [DEBUG] [Thread-130842] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:18:38.038 [DEBUG] [Thread-130842] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:18:38.038 [DEBUG] [Thread-130842] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:18:38.038 [DEBUG] [Thread-130842] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:18:38.038 [DEBUG] [Thread-130842] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:18:38.038 [DEBUG] [Thread-130842] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:18:38.038 [DEBUG] [Thread-130842] [transport.py] [_log()] client lang: <none>
2025-12-31T16:18:38.038 [DEBUG] [Thread-130842] [transport.py] [_log()] server lang: <none>
2025-12-31T16:18:38.038 [DEBUG] [Thread-130842] [transport.py] [_log()] kex follows: False
2025-12-31T16:18:38.038 [DEBUG] [Thread-130842] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:18:38.038 [DEBUG] [Thread-130842] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:18:38.038 [DEBUG] [Thread-130842] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:18:38.038 [DEBUG] [Thread-130842] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:18:38.038 [DEBUG] [Thread-130842] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:18:38.038 [DEBUG] [Thread-130842] [transport.py] [_log()] Compression: none
2025-12-31T16:18:38.038 [DEBUG] [Thread-130842] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:18:38.094 [DEBUG] [Thread-130842] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:18:38.095 [DEBUG] [Thread-130842] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:18:38.095 [DEBUG] [Thread-130842] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T16:18:38.095 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T16:18:38.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:18:38.150 [DEBUG] [Thread-130842] [transport.py] [_log()] userauth is OK
2025-12-31T16:18:38.150 [DEBUG] [Thread-130842] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:18:38.150 [DEBUG] [Thread-130842] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:18:38.150 [DEBUG] [Thread-130842] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T16:18:38.150 [DEBUG] [Thread-130842] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:18:38.169 [INFO] [Thread-130842] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:18:38.169 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T16:18:38.170 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:18:39.045 [DEBUG] [Thread-130842] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:18:39.045 [DEBUG] [Thread-130842] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:18:39.093 [DEBUG] [Thread-130842] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:18:39.093 [DEBUG] [Thread-130842] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:18:39.102 [DEBUG] [Thread-130842] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:18:39.111 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:18:39.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T16:18:39.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T16:18:39.128 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:18:39.129 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:18:39.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:18:39.137 [DEBUG] [Thread-130842] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:18:49.536 [DEBUG] [Thread-130844 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:19:04.586 [DEBUG] [Thread-130845 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:19:09.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T16:19:09.141 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T16:19:09.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T16:19:09.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 16, 18, 59), 29.61, 13.9, 0.0, 31.76, 24.87, 0, 0, 0, 2, 0, 0),)
2025-12-31T16:19:09.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 16:18:59
2025-12-31T16:19:10.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T16:19:10.173 [DEBUG] [Thread-130846] [transport.py] [_log()] starting thread (client mode): 0xb9558490
2025-12-31T16:19:10.173 [DEBUG] [Thread-130846] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:19:10.193 [DEBUG] [Thread-130846] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T16:19:10.193 [INFO] [Thread-130846] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T16:19:10.195 [DEBUG] [Thread-130846] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:19:10.196 [DEBUG] [Thread-130846] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T16:19:10.196 [DEBUG] [Thread-130846] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:19:10.196 [DEBUG] [Thread-130846] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:19:10.196 [DEBUG] [Thread-130846] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:19:10.196 [DEBUG] [Thread-130846] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:19:10.196 [DEBUG] [Thread-130846] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:19:10.196 [DEBUG] [Thread-130846] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:19:10.196 [DEBUG] [Thread-130846] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:19:10.196 [DEBUG] [Thread-130846] [transport.py] [_log()] client lang: <none>
2025-12-31T16:19:10.196 [DEBUG] [Thread-130846] [transport.py] [_log()] server lang: <none>
2025-12-31T16:19:10.196 [DEBUG] [Thread-130846] [transport.py] [_log()] kex follows: False
2025-12-31T16:19:10.196 [DEBUG] [Thread-130846] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:19:10.196 [DEBUG] [Thread-130846] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:19:10.196 [DEBUG] [Thread-130846] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:19:10.196 [DEBUG] [Thread-130846] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:19:10.196 [DEBUG] [Thread-130846] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:19:10.196 [DEBUG] [Thread-130846] [transport.py] [_log()] Compression: none
2025-12-31T16:19:10.196 [DEBUG] [Thread-130846] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:19:10.213 [DEBUG] [Thread-130846] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:19:10.213 [DEBUG] [Thread-130846] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:19:10.213 [DEBUG] [Thread-130846] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T16:19:10.213 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T16:19:10.213 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:19:10.214 [DEBUG] [Thread-130846] [transport.py] [_log()] userauth is OK
2025-12-31T16:19:10.214 [DEBUG] [Thread-130846] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:19:10.214 [DEBUG] [Thread-130846] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:19:10.214 [DEBUG] [Thread-130846] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T16:19:10.214 [DEBUG] [Thread-130846] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:19:10.224 [INFO] [Thread-130846] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:19:10.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:19:10.841 [DEBUG] [Thread-130846] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:19:10.841 [DEBUG] [Thread-130846] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:19:10.841 [DEBUG] [Thread-130846] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T16:19:10.883 [DEBUG] [Thread-130846] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:19:10.883 [DEBUG] [Thread-130846] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:19:10.885 [DEBUG] [Thread-130846] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:19:10.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:19:10.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T16:19:10.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T16:19:10.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T16:19:10.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:19:10.902 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T16:19:10.902 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:19:10.902 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:19:10.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T16:19:10.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.595974 -999.00  +24.40  24.18     19   -0.40 1 2 1 1 1   888    0 25.62 3.77 ----- 25.7 24.2 278.0 33.0 28.0 -19.4 28.1 -19.5 27.5 -17.0 27.9 -16.7
2025-12-31T16:19:10.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T16:19:10.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T16:19:10.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.595974
2025-12-31T16:19:10.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T16:19:10.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T16:19:10.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T16:19:10.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T16:19:10.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T16:19:10.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T16:18:59', tmtdew=29.61, humidity=13.9, cloud=0.0, wind=31.76, temperature=24.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T14:18:12.154', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T16:19:10.903 [DEBUG] [Thread-130846] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:19:10.976 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T16:19:10.988 [DEBUG] [Thread-130849] [transport.py] [_log()] starting thread (client mode): 0xb9579c90
2025-12-31T16:19:10.988 [DEBUG] [Thread-130849] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:19:11.003 [DEBUG] [Thread-130849] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T16:19:11.003 [INFO] [Thread-130849] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T16:19:11.014 [DEBUG] [Thread-130849] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:19:11.014 [DEBUG] [Thread-130849] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T16:19:11.014 [DEBUG] [Thread-130849] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:19:11.014 [DEBUG] [Thread-130849] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:19:11.014 [DEBUG] [Thread-130849] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:19:11.014 [DEBUG] [Thread-130849] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:19:11.014 [DEBUG] [Thread-130849] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:19:11.014 [DEBUG] [Thread-130849] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:19:11.014 [DEBUG] [Thread-130849] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:19:11.014 [DEBUG] [Thread-130849] [transport.py] [_log()] client lang: <none>
2025-12-31T16:19:11.014 [DEBUG] [Thread-130849] [transport.py] [_log()] server lang: <none>
2025-12-31T16:19:11.014 [DEBUG] [Thread-130849] [transport.py] [_log()] kex follows: False
2025-12-31T16:19:11.014 [DEBUG] [Thread-130849] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:19:11.014 [DEBUG] [Thread-130849] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:19:11.014 [DEBUG] [Thread-130849] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:19:11.014 [DEBUG] [Thread-130849] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:19:11.014 [DEBUG] [Thread-130849] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:19:11.014 [DEBUG] [Thread-130849] [transport.py] [_log()] Compression: none
2025-12-31T16:19:11.014 [DEBUG] [Thread-130849] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:19:11.067 [DEBUG] [Thread-130849] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:19:11.067 [DEBUG] [Thread-130849] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:19:11.067 [DEBUG] [Thread-130849] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T16:19:11.067 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T16:19:11.067 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:19:11.124 [DEBUG] [Thread-130849] [transport.py] [_log()] userauth is OK
2025-12-31T16:19:11.124 [DEBUG] [Thread-130849] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:19:11.124 [DEBUG] [Thread-130849] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:19:11.124 [DEBUG] [Thread-130849] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T16:19:11.124 [DEBUG] [Thread-130849] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:19:11.138 [INFO] [Thread-130849] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:19:11.138 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T16:19:11.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:19:11.944 [DEBUG] [Thread-130849] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:19:11.944 [DEBUG] [Thread-130849] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:19:11.992 [DEBUG] [Thread-130849] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:19:11.992 [DEBUG] [Thread-130849] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:19:12.001 [DEBUG] [Thread-130849] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:19:12.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:19:12.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T16:19:12.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T16:19:12.024 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:19:12.024 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:19:12.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:19:12.032 [DEBUG] [Thread-130849] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:19:14.815 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:19:14.816 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:19:19.617 [DEBUG] [Thread-130851 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:19:23.878 [DEBUG] [Thread-130852 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:19:34.676 [DEBUG] [Thread-130853 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:19:42.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T16:19:42.050 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T16:19:42.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T16:19:42.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 16, 19, 31), 29.36, 14.15, 0.0, 30.63, 24.91, 0, 0, 0, 2, 0, 0),)
2025-12-31T16:19:42.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 16:19:31
2025-12-31T16:19:42.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T16:19:43.041 [DEBUG] [Thread-130854] [transport.py] [_log()] starting thread (client mode): 0xb6b29f30
2025-12-31T16:19:43.041 [DEBUG] [Thread-130854] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:19:43.061 [DEBUG] [Thread-130854] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T16:19:43.061 [INFO] [Thread-130854] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T16:19:43.064 [DEBUG] [Thread-130854] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:19:43.064 [DEBUG] [Thread-130854] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T16:19:43.064 [DEBUG] [Thread-130854] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:19:43.064 [DEBUG] [Thread-130854] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:19:43.064 [DEBUG] [Thread-130854] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:19:43.064 [DEBUG] [Thread-130854] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:19:43.064 [DEBUG] [Thread-130854] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:19:43.064 [DEBUG] [Thread-130854] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:19:43.064 [DEBUG] [Thread-130854] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:19:43.064 [DEBUG] [Thread-130854] [transport.py] [_log()] client lang: <none>
2025-12-31T16:19:43.064 [DEBUG] [Thread-130854] [transport.py] [_log()] server lang: <none>
2025-12-31T16:19:43.064 [DEBUG] [Thread-130854] [transport.py] [_log()] kex follows: False
2025-12-31T16:19:43.064 [DEBUG] [Thread-130854] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:19:43.064 [DEBUG] [Thread-130854] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:19:43.064 [DEBUG] [Thread-130854] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:19:43.064 [DEBUG] [Thread-130854] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:19:43.064 [DEBUG] [Thread-130854] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:19:43.064 [DEBUG] [Thread-130854] [transport.py] [_log()] Compression: none
2025-12-31T16:19:43.065 [DEBUG] [Thread-130854] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:19:43.082 [DEBUG] [Thread-130854] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:19:43.083 [DEBUG] [Thread-130854] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:19:43.083 [DEBUG] [Thread-130854] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T16:19:43.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T16:19:43.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:19:43.086 [DEBUG] [Thread-130854] [transport.py] [_log()] userauth is OK
2025-12-31T16:19:43.086 [DEBUG] [Thread-130854] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:19:43.086 [DEBUG] [Thread-130854] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:19:43.086 [DEBUG] [Thread-130854] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T16:19:43.086 [DEBUG] [Thread-130854] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:19:43.111 [INFO] [Thread-130854] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:19:43.111 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:19:43.831 [DEBUG] [Thread-130854] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:19:43.832 [DEBUG] [Thread-130854] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:19:43.832 [DEBUG] [Thread-130854] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T16:19:43.872 [DEBUG] [Thread-130854] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:19:43.872 [DEBUG] [Thread-130854] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:19:43.876 [DEBUG] [Thread-130854] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:19:43.886 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:19:43.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T16:19:43.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T16:19:43.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T16:19:43.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:19:43.898 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T16:19:43.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:19:43.899 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:19:43.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T16:19:43.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.596322 -999.00  +24.30  28.02     20   +0.00 1 2 1 1 1   888    0 25.22 -0.12 ----- 19.9 28.0 282.0 33.8 27.9 -18.2 27.9 -18.2 27.3 -19.0 27.8 -15.6
2025-12-31T16:19:43.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T16:19:43.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T16:19:43.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.596322
2025-12-31T16:19:43.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T16:19:43.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T16:19:43.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T16:19:43.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T16:19:43.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T16:19:43.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T16:19:31', tmtdew=29.36, humidity=14.15, cloud=0.0, wind=30.63, temperature=24.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T14:18:42.221', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T16:19:43.901 [DEBUG] [Thread-130854] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:19:43.984 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T16:19:43.995 [DEBUG] [Thread-130857] [transport.py] [_log()] starting thread (client mode): 0xb957abc0
2025-12-31T16:19:43.995 [DEBUG] [Thread-130857] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:19:44.009 [DEBUG] [Thread-130857] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T16:19:44.009 [INFO] [Thread-130857] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T16:19:44.016 [DEBUG] [Thread-130857] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:19:44.016 [DEBUG] [Thread-130857] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T16:19:44.017 [DEBUG] [Thread-130857] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:19:44.017 [DEBUG] [Thread-130857] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:19:44.017 [DEBUG] [Thread-130857] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:19:44.017 [DEBUG] [Thread-130857] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:19:44.017 [DEBUG] [Thread-130857] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:19:44.017 [DEBUG] [Thread-130857] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:19:44.017 [DEBUG] [Thread-130857] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:19:44.017 [DEBUG] [Thread-130857] [transport.py] [_log()] client lang: <none>
2025-12-31T16:19:44.017 [DEBUG] [Thread-130857] [transport.py] [_log()] server lang: <none>
2025-12-31T16:19:44.017 [DEBUG] [Thread-130857] [transport.py] [_log()] kex follows: False
2025-12-31T16:19:44.017 [DEBUG] [Thread-130857] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:19:44.017 [DEBUG] [Thread-130857] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:19:44.017 [DEBUG] [Thread-130857] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:19:44.017 [DEBUG] [Thread-130857] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:19:44.017 [DEBUG] [Thread-130857] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:19:44.017 [DEBUG] [Thread-130857] [transport.py] [_log()] Compression: none
2025-12-31T16:19:44.017 [DEBUG] [Thread-130857] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:19:44.078 [DEBUG] [Thread-130857] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:19:44.079 [DEBUG] [Thread-130857] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:19:44.079 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T16:19:44.080 [DEBUG] [Thread-130857] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T16:19:44.081 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:19:44.135 [DEBUG] [Thread-130857] [transport.py] [_log()] userauth is OK
2025-12-31T16:19:44.135 [DEBUG] [Thread-130857] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:19:44.136 [DEBUG] [Thread-130857] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:19:44.136 [DEBUG] [Thread-130857] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T16:19:44.136 [DEBUG] [Thread-130857] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:19:44.160 [INFO] [Thread-130857] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:19:44.160 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T16:19:44.161 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:19:45.031 [DEBUG] [Thread-130857] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:19:45.031 [DEBUG] [Thread-130857] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:19:45.080 [DEBUG] [Thread-130857] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:19:45.080 [DEBUG] [Thread-130857] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:19:45.089 [DEBUG] [Thread-130857] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:19:45.099 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:19: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')
2025-12-31T16:19:45.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T16:19:45.118 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:19:45.118 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:19:45.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:19:45.127 [DEBUG] [Thread-130857] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:19:49.715 [DEBUG] [Thread-130859 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:20:04.754 [DEBUG] [Thread-130860 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:20:14.955 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:20:14.956 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:20:15.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T16:20:15.125 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T16:20:15.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T16:20:15.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 16, 20, 3), 29.37, 14.15, 0.0, 30.74, 24.94, 0, 0, 0, 2, 0, 0),)
2025-12-31T16:20:15.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 16:20:03
2025-12-31T16:20:15.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T16:20:16.121 [DEBUG] [Thread-130861] [transport.py] [_log()] starting thread (client mode): 0xb6bb2ef0
2025-12-31T16:20:16.122 [DEBUG] [Thread-130861] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:20:16.141 [DEBUG] [Thread-130861] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T16:20:16.141 [INFO] [Thread-130861] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T16:20:16.144 [DEBUG] [Thread-130861] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:20:16.144 [DEBUG] [Thread-130861] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T16:20:16.145 [DEBUG] [Thread-130861] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:20:16.145 [DEBUG] [Thread-130861] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:20:16.145 [DEBUG] [Thread-130861] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:20:16.145 [DEBUG] [Thread-130861] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:20:16.145 [DEBUG] [Thread-130861] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:20:16.145 [DEBUG] [Thread-130861] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:20:16.145 [DEBUG] [Thread-130861] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:20:16.145 [DEBUG] [Thread-130861] [transport.py] [_log()] client lang: <none>
2025-12-31T16:20:16.145 [DEBUG] [Thread-130861] [transport.py] [_log()] server lang: <none>
2025-12-31T16:20:16.145 [DEBUG] [Thread-130861] [transport.py] [_log()] kex follows: False
2025-12-31T16:20:16.145 [DEBUG] [Thread-130861] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:20:16.145 [DEBUG] [Thread-130861] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:20:16.145 [DEBUG] [Thread-130861] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:20:16.145 [DEBUG] [Thread-130861] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:20:16.145 [DEBUG] [Thread-130861] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:20:16.145 [DEBUG] [Thread-130861] [transport.py] [_log()] Compression: none
2025-12-31T16:20:16.145 [DEBUG] [Thread-130861] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:20:16.164 [DEBUG] [Thread-130861] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:20:16.165 [DEBUG] [Thread-130861] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:20:16.165 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T16:20:16.166 [DEBUG] [Thread-130861] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T16:20:16.167 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:20:16.168 [DEBUG] [Thread-130861] [transport.py] [_log()] userauth is OK
2025-12-31T16:20:16.168 [DEBUG] [Thread-130861] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:20:16.168 [DEBUG] [Thread-130861] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:20:16.168 [DEBUG] [Thread-130861] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T16:20:16.168 [DEBUG] [Thread-130861] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:20:16.192 [INFO] [Thread-130861] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:20:16.193 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:20:19.789 [DEBUG] [Thread-130863 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:20:20.870 [DEBUG] [Thread-130861] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:20:20.870 [DEBUG] [Thread-130861] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:20:20.871 [DEBUG] [Thread-130861] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T16:20:20.911 [DEBUG] [Thread-130861] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:20:20.911 [DEBUG] [Thread-130861] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:20:20.915 [DEBUG] [Thread-130861] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:20:21.065 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:20:21.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T16:20:21.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T16:20:21.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T16:20:21.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:20:21.075 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T16:20:21.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:20:21.075 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:20:21.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T16:20:21.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.597016 -999.00  +24.40  34.35     19   -0.40 1 2 2 1 1   888    0 25.35 -5.84 ----- 33.6 34.4 289.2 38.0 27.8 -17.4 27.8 -17.9 27.4 -16.1 27.7 -14.9
2025-12-31T16:20:21.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T16:20:21.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T16:20:21.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.597016
2025-12-31T16:20:21.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T16:20:21.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T16:20:21.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T16:20:21.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T16:20:21.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T16:20:21.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T16:20:03', tmtdew=29.37, humidity=14.15, cloud=0.0, wind=30.74, temperature=24.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T14:19:42.182', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T16:20:21.077 [DEBUG] [Thread-130861] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:20:21.154 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T16:20:21.167 [DEBUG] [Thread-130865] [transport.py] [_log()] starting thread (client mode): 0xb6bbd840
2025-12-31T16:20:21.167 [DEBUG] [Thread-130865] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:20:21.182 [DEBUG] [Thread-130865] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T16:20:21.182 [INFO] [Thread-130865] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T16:20:21.190 [DEBUG] [Thread-130865] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:20:21.190 [DEBUG] [Thread-130865] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T16:20:21.190 [DEBUG] [Thread-130865] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:20:21.190 [DEBUG] [Thread-130865] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:20:21.190 [DEBUG] [Thread-130865] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:20:21.190 [DEBUG] [Thread-130865] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:20:21.190 [DEBUG] [Thread-130865] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:20:21.190 [DEBUG] [Thread-130865] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:20:21.190 [DEBUG] [Thread-130865] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:20:21.190 [DEBUG] [Thread-130865] [transport.py] [_log()] client lang: <none>
2025-12-31T16:20:21.190 [DEBUG] [Thread-130865] [transport.py] [_log()] server lang: <none>
2025-12-31T16:20:21.190 [DEBUG] [Thread-130865] [transport.py] [_log()] kex follows: False
2025-12-31T16:20:21.190 [DEBUG] [Thread-130865] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:20:21.190 [DEBUG] [Thread-130865] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:20:21.190 [DEBUG] [Thread-130865] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:20:21.191 [DEBUG] [Thread-130865] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:20:21.191 [DEBUG] [Thread-130865] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:20:21.191 [DEBUG] [Thread-130865] [transport.py] [_log()] Compression: none
2025-12-31T16:20:21.191 [DEBUG] [Thread-130865] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:20:21.252 [DEBUG] [Thread-130865] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:20:21.252 [DEBUG] [Thread-130865] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:20:21.253 [DEBUG] [Thread-130865] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T16:20:21.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T16:20:21.254 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:20:21.309 [DEBUG] [Thread-130865] [transport.py] [_log()] userauth is OK
2025-12-31T16:20:21.309 [DEBUG] [Thread-130865] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:20:21.310 [DEBUG] [Thread-130865] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:20:21.310 [DEBUG] [Thread-130865] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T16:20:21.310 [DEBUG] [Thread-130865] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:20:21.329 [INFO] [Thread-130865] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:20:21.329 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T16:20:21.330 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:20:22.142 [DEBUG] [Thread-130865] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:20:22.142 [DEBUG] [Thread-130865] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:20:22.194 [DEBUG] [Thread-130865] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:20:22.194 [DEBUG] [Thread-130865] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:20:22.203 [DEBUG] [Thread-130865] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:20:22.212 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:20: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-12-31T16:20: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-12-31T16:20:22.230 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:20:22.231 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:20:22.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:20:22.239 [DEBUG] [Thread-130865] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:20:23.944 [DEBUG] [Thread-130867 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:20:34.822 [DEBUG] [Thread-130868 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:20:49.877 [DEBUG] [Thread-130869 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:20:52.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T16:20:52.262 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T16:20:52.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T16:20:52.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 16, 20, 35), 29.76, 13.35, 0.0, 31.16, 24.83, 0, 0, 0, 2, 0, 0),)
2025-12-31T16:20:52.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 16:20:35
2025-12-31T16:20:53.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T16:20:53.240 [DEBUG] [Thread-130870] [transport.py] [_log()] starting thread (client mode): 0xb6b2ae90
2025-12-31T16:20:53.240 [DEBUG] [Thread-130870] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:20:53.261 [DEBUG] [Thread-130870] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T16:20:53.261 [INFO] [Thread-130870] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T16:20:53.264 [DEBUG] [Thread-130870] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:20:53.265 [DEBUG] [Thread-130870] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T16:20:53.265 [DEBUG] [Thread-130870] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:20:53.265 [DEBUG] [Thread-130870] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:20:53.265 [DEBUG] [Thread-130870] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:20:53.265 [DEBUG] [Thread-130870] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:20:53.265 [DEBUG] [Thread-130870] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:20:53.265 [DEBUG] [Thread-130870] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:20:53.265 [DEBUG] [Thread-130870] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:20:53.265 [DEBUG] [Thread-130870] [transport.py] [_log()] client lang: <none>
2025-12-31T16:20:53.265 [DEBUG] [Thread-130870] [transport.py] [_log()] server lang: <none>
2025-12-31T16:20:53.265 [DEBUG] [Thread-130870] [transport.py] [_log()] kex follows: False
2025-12-31T16:20:53.265 [DEBUG] [Thread-130870] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:20:53.266 [DEBUG] [Thread-130870] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:20:53.266 [DEBUG] [Thread-130870] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:20:53.266 [DEBUG] [Thread-130870] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:20:53.266 [DEBUG] [Thread-130870] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:20:53.266 [DEBUG] [Thread-130870] [transport.py] [_log()] Compression: none
2025-12-31T16:20:53.266 [DEBUG] [Thread-130870] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:20:53.284 [DEBUG] [Thread-130870] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:20:53.285 [DEBUG] [Thread-130870] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:20:53.285 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T16:20:53.286 [DEBUG] [Thread-130870] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T16:20:53.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:20:53.289 [DEBUG] [Thread-130870] [transport.py] [_log()] userauth is OK
2025-12-31T16:20:53.289 [DEBUG] [Thread-130870] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:20:53.289 [DEBUG] [Thread-130870] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:20:53.289 [DEBUG] [Thread-130870] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T16:20:53.290 [DEBUG] [Thread-130870] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:20:53.313 [INFO] [Thread-130870] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:20:53.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:20:53.953 [DEBUG] [Thread-130870] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:20:53.954 [DEBUG] [Thread-130870] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:20:53.954 [DEBUG] [Thread-130870] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T16:20:53.995 [DEBUG] [Thread-130870] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:20:53.995 [DEBUG] [Thread-130870] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:20:53.998 [DEBUG] [Thread-130870] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:20:54.005 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:20:54.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T16:20:54.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T16:20:54.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T16:20:54.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:20:54.016 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T16:20:54.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:20:54.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:20:54.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T16:20:54.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.597363 -999.00  +24.30  23.43     19   -0.50 1 2 1 1 1   888    0 25.03 -6.20 ----- 27.9 23.4 295.6 31.0 27.7 -16.2 27.7 -17.0 27.3 -14.7 27.6 -14.5
2025-12-31T16:20:54.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T16:20:54.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T16:20:54.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.597363
2025-12-31T16:20:54.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T16:20:54.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T16:20:54.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T16:20:54.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T16:20:54.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T16:20:54.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T16:20:35', tmtdew=29.76, humidity=13.35, cloud=0.0, wind=31.16, temperature=24.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T14:20:12.163', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T16:20:54.019 [DEBUG] [Thread-130870] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:20:54.102 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T16:21:04.914 [DEBUG] [Thread-130873 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:21:15.095 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:21:15.096 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:21:19.960 [DEBUG] [Thread-130874 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:21:23.998 [DEBUG] [Thread-130875 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:21:34.994 [DEBUG] [Thread-130876 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:21:50.025 [DEBUG] [Thread-130877 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:22:05.061 [DEBUG] [Thread-130878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:22:15.234 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:22:15.235 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:22:20.096 [DEBUG] [Thread-130879 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:22:24.043 [DEBUG] [Thread-130880 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:22:35.131 [DEBUG] [Thread-130881 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:22:50.170 [DEBUG] [Thread-130882 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:23:05.205 [DEBUG] [Thread-130883 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:23:08.757 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-12-31T16:23:15.375 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:23:15.376 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:23:20.238 [DEBUG] [Thread-130884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:23:24.095 [DEBUG] [Thread-130885 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:23:35.274 [DEBUG] [Thread-130886 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:23:38.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T16:23:38.787 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T16:23:38.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T16:23:39.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 16, 23, 15), 30.41, 13.07, 0.0, 20.13, 24.66, 0, 0, 0, 2, 0, 0),)
2025-12-31T16:23:39.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 16:23:15
2025-12-31T16:23:39.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T16:23:39.788 [DEBUG] [Thread-130887] [transport.py] [_log()] starting thread (client mode): 0xb6bb2ef0
2025-12-31T16:23:39.788 [DEBUG] [Thread-130887] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:23:39.807 [DEBUG] [Thread-130887] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T16:23:39.807 [INFO] [Thread-130887] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T16:23:39.810 [DEBUG] [Thread-130887] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:23:39.810 [DEBUG] [Thread-130887] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T16:23:39.811 [DEBUG] [Thread-130887] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:23:39.811 [DEBUG] [Thread-130887] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:23:39.811 [DEBUG] [Thread-130887] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:23:39.811 [DEBUG] [Thread-130887] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:23:39.811 [DEBUG] [Thread-130887] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:23:39.811 [DEBUG] [Thread-130887] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:23:39.811 [DEBUG] [Thread-130887] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:23:39.811 [DEBUG] [Thread-130887] [transport.py] [_log()] client lang: <none>
2025-12-31T16:23:39.811 [DEBUG] [Thread-130887] [transport.py] [_log()] server lang: <none>
2025-12-31T16:23:39.811 [DEBUG] [Thread-130887] [transport.py] [_log()] kex follows: False
2025-12-31T16:23:39.811 [DEBUG] [Thread-130887] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:23:39.811 [DEBUG] [Thread-130887] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:23:39.811 [DEBUG] [Thread-130887] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:23:39.811 [DEBUG] [Thread-130887] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:23:39.811 [DEBUG] [Thread-130887] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:23:39.811 [DEBUG] [Thread-130887] [transport.py] [_log()] Compression: none
2025-12-31T16:23:39.811 [DEBUG] [Thread-130887] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:23:39.827 [DEBUG] [Thread-130887] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:23:39.827 [DEBUG] [Thread-130887] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:23:39.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T16:23:39.828 [DEBUG] [Thread-130887] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T16:23:39.829 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:23:39.829 [DEBUG] [Thread-130887] [transport.py] [_log()] userauth is OK
2025-12-31T16:23:39.830 [DEBUG] [Thread-130887] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:23:39.830 [DEBUG] [Thread-130887] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:23:39.830 [DEBUG] [Thread-130887] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T16:23:39.830 [DEBUG] [Thread-130887] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:23:39.840 [INFO] [Thread-130887] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:23:39.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:23:40.481 [DEBUG] [Thread-130887] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:23:40.481 [DEBUG] [Thread-130887] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:23:40.481 [DEBUG] [Thread-130887] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T16:23:40.522 [DEBUG] [Thread-130887] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:23:40.522 [DEBUG] [Thread-130887] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:23:40.524 [DEBUG] [Thread-130887] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:23:40.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:23:40.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T16:23:40.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T16:23:40.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T16:23:40.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:23:40.545 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T16:23:40.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:23:40.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:23:40.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T16:23:40.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.599099 -999.00  +24.40  26.73     18   -1.00 1 2 1 1 1   888    0 24.95 -17.47 ----- 26.2 26.7 296.2 29.8 27.8 -15.1 27.7 -15.3 27.2 -13.6 27.6 -13.6
2025-12-31T16:23:40.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T16:23:40.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T16:23:40.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.599099
2025-12-31T16:23:40.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T16:23:40.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T16:23:40.548 [DEBUG] [Thread-130887] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:23:40.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T16:23:40.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T16:23:40.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T16:23:40.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T16:23:15', tmtdew=30.41, humidity=13.07, cloud=0.0, wind=20.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-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T14:22:42.154', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T16:23:40.631 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T16:23:40.643 [DEBUG] [Thread-130890] [transport.py] [_log()] starting thread (client mode): 0xb6bbc6a0
2025-12-31T16:23:40.643 [DEBUG] [Thread-130890] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:23:40.662 [DEBUG] [Thread-130890] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T16:23:40.662 [INFO] [Thread-130890] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T16:23:40.670 [DEBUG] [Thread-130890] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:23:40.670 [DEBUG] [Thread-130890] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T16:23:40.670 [DEBUG] [Thread-130890] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:23:40.670 [DEBUG] [Thread-130890] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:23:40.670 [DEBUG] [Thread-130890] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:23:40.670 [DEBUG] [Thread-130890] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:23:40.671 [DEBUG] [Thread-130890] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:23:40.671 [DEBUG] [Thread-130890] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:23:40.671 [DEBUG] [Thread-130890] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:23:40.671 [DEBUG] [Thread-130890] [transport.py] [_log()] client lang: <none>
2025-12-31T16:23:40.671 [DEBUG] [Thread-130890] [transport.py] [_log()] server lang: <none>
2025-12-31T16:23:40.671 [DEBUG] [Thread-130890] [transport.py] [_log()] kex follows: False
2025-12-31T16:23:40.671 [DEBUG] [Thread-130890] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:23:40.671 [DEBUG] [Thread-130890] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:23:40.671 [DEBUG] [Thread-130890] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:23:40.672 [DEBUG] [Thread-130890] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:23:40.672 [DEBUG] [Thread-130890] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:23:40.672 [DEBUG] [Thread-130890] [transport.py] [_log()] Compression: none
2025-12-31T16:23:40.672 [DEBUG] [Thread-130890] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:23:40.728 [DEBUG] [Thread-130890] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:23:40.728 [DEBUG] [Thread-130890] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:23:40.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T16:23:40.729 [DEBUG] [Thread-130890] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T16:23:40.730 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:23:40.784 [DEBUG] [Thread-130890] [transport.py] [_log()] userauth is OK
2025-12-31T16:23:40.784 [DEBUG] [Thread-130890] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:23:40.784 [DEBUG] [Thread-130890] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:23:40.784 [DEBUG] [Thread-130890] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T16:23:40.784 [DEBUG] [Thread-130890] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:23:40.803 [INFO] [Thread-130890] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:23:40.803 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T16:23:40.803 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:23:41.621 [DEBUG] [Thread-130890] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:23:41.621 [DEBUG] [Thread-130890] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:23:41.668 [DEBUG] [Thread-130890] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:23:41.668 [DEBUG] [Thread-130890] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:23:41.676 [DEBUG] [Thread-130890] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:23:41.684 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:23:41.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T16:23:41.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T16:23:41.699 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:23:41.699 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:23:41.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:23:41.708 [DEBUG] [Thread-130890] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:23:50.310 [DEBUG] [Thread-130892 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:24:05.362 [DEBUG] [Thread-130893 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:24:11.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T16:24:11.730 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T16:24:11.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T16:24:12.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 16, 23, 48), 30.2, 13.29, 0.0, 34.3, 24.93, 0, 0, 0, 2, 0, 0),)
2025-12-31T16:24:12.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 16:23:48
2025-12-31T16:24:12.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T16:24:12.727 [DEBUG] [Thread-130894] [transport.py] [_log()] starting thread (client mode): 0xb6b61870
2025-12-31T16:24:12.728 [DEBUG] [Thread-130894] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:24:12.749 [DEBUG] [Thread-130894] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T16:24:12.749 [INFO] [Thread-130894] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T16:24:12.751 [DEBUG] [Thread-130894] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:24:12.751 [DEBUG] [Thread-130894] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T16:24:12.751 [DEBUG] [Thread-130894] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:24:12.752 [DEBUG] [Thread-130894] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:24:12.752 [DEBUG] [Thread-130894] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:24:12.752 [DEBUG] [Thread-130894] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:24:12.752 [DEBUG] [Thread-130894] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:24:12.752 [DEBUG] [Thread-130894] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:24:12.752 [DEBUG] [Thread-130894] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:24:12.752 [DEBUG] [Thread-130894] [transport.py] [_log()] client lang: <none>
2025-12-31T16:24:12.752 [DEBUG] [Thread-130894] [transport.py] [_log()] server lang: <none>
2025-12-31T16:24:12.752 [DEBUG] [Thread-130894] [transport.py] [_log()] kex follows: False
2025-12-31T16:24:12.752 [DEBUG] [Thread-130894] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:24:12.752 [DEBUG] [Thread-130894] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:24:12.752 [DEBUG] [Thread-130894] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:24:12.753 [DEBUG] [Thread-130894] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:24:12.753 [DEBUG] [Thread-130894] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:24:12.753 [DEBUG] [Thread-130894] [transport.py] [_log()] Compression: none
2025-12-31T16:24:12.753 [DEBUG] [Thread-130894] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:24:12.770 [DEBUG] [Thread-130894] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:24:12.771 [DEBUG] [Thread-130894] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:24:12.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T16:24:12.772 [DEBUG] [Thread-130894] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T16:24:12.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:24:12.774 [DEBUG] [Thread-130894] [transport.py] [_log()] userauth is OK
2025-12-31T16:24:12.774 [DEBUG] [Thread-130894] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:24:12.774 [DEBUG] [Thread-130894] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:24:12.774 [DEBUG] [Thread-130894] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T16:24:12.774 [DEBUG] [Thread-130894] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:24:12.798 [INFO] [Thread-130894] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:24:12.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:24:13.392 [DEBUG] [Thread-130894] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:24:13.393 [DEBUG] [Thread-130894] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:24:13.394 [DEBUG] [Thread-130894] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T16:24:13.433 [DEBUG] [Thread-130894] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:24:13.433 [DEBUG] [Thread-130894] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:24:13.436 [DEBUG] [Thread-130894] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:24:13.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:24:13.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T16:24:13.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T16:24:13.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T16:24:13.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:24:13.454 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T16:24:13.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:24:13.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:24:13.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T16:24:13.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.599447 -999.00  +24.40  29.47     18   -0.80 1 2 1 1 1   888    0 24.87 -19.14 ----- 24.9 29.5 296.2 33.7 27.7 -14.9 27.7 -14.7 27.3 -13.4 27.5 -13.4
2025-12-31T16:24:13.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T16:24:13.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T16:24:13.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.599447
2025-12-31T16:24:13.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T16:24:13.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T16:24:13.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T16:24:13.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T16:24:13.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T16:24:13.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T16:23:48', tmtdew=30.2, humidity=13.29, cloud=0.0, wind=34.3, temperature=24.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T14:23:12.221', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T16:24:13.457 [DEBUG] [Thread-130894] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:24:13.540 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T16:24:13.555 [DEBUG] [Thread-130897] [transport.py] [_log()] starting thread (client mode): 0xb6bb2230
2025-12-31T16:24:13.556 [DEBUG] [Thread-130897] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:24:13.570 [DEBUG] [Thread-130897] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T16:24:13.571 [INFO] [Thread-130897] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T16:24:13.578 [DEBUG] [Thread-130897] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:24:13.578 [DEBUG] [Thread-130897] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T16:24:13.578 [DEBUG] [Thread-130897] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:24:13.578 [DEBUG] [Thread-130897] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:24:13.579 [DEBUG] [Thread-130897] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:24:13.579 [DEBUG] [Thread-130897] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:24:13.579 [DEBUG] [Thread-130897] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:24:13.579 [DEBUG] [Thread-130897] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:24:13.579 [DEBUG] [Thread-130897] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:24:13.579 [DEBUG] [Thread-130897] [transport.py] [_log()] client lang: <none>
2025-12-31T16:24:13.579 [DEBUG] [Thread-130897] [transport.py] [_log()] server lang: <none>
2025-12-31T16:24:13.579 [DEBUG] [Thread-130897] [transport.py] [_log()] kex follows: False
2025-12-31T16:24:13.579 [DEBUG] [Thread-130897] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:24:13.579 [DEBUG] [Thread-130897] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:24:13.579 [DEBUG] [Thread-130897] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:24:13.579 [DEBUG] [Thread-130897] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:24:13.579 [DEBUG] [Thread-130897] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:24:13.579 [DEBUG] [Thread-130897] [transport.py] [_log()] Compression: none
2025-12-31T16:24:13.579 [DEBUG] [Thread-130897] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:24:13.635 [DEBUG] [Thread-130897] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:24:13.636 [DEBUG] [Thread-130897] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:24:13.645 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T16:24:13.646 [DEBUG] [Thread-130897] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T16:24:13.647 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:24:13.692 [DEBUG] [Thread-130897] [transport.py] [_log()] userauth is OK
2025-12-31T16:24:13.692 [DEBUG] [Thread-130897] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:24:13.692 [DEBUG] [Thread-130897] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:24:13.692 [DEBUG] [Thread-130897] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T16:24:13.692 [DEBUG] [Thread-130897] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:24:13.712 [INFO] [Thread-130897] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:24:13.712 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T16:24:13.712 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:24:14.575 [DEBUG] [Thread-130897] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:24:14.576 [DEBUG] [Thread-130897] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:24:14.624 [DEBUG] [Thread-130897] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:24:14.624 [DEBUG] [Thread-130897] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:24:14.634 [DEBUG] [Thread-130897] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:24:14.643 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:24:14.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-12-31T16:24:14.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T16:24:14.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:24:14.661 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:24:14.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:24:14.669 [DEBUG] [Thread-130897] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:24:15.516 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:24:15.517 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:24:20.396 [DEBUG] [Thread-130899 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:24:24.143 [DEBUG] [Thread-130900 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:24:35.431 [DEBUG] [Thread-130901 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:24:44.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T16:24:44.691 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T16:24:44.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T16:24:45.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 16, 24, 20), 30.1, 13.37, 0.0, 30.28, 24.89, 0, 0, 0, 2, 0, 0),)
2025-12-31T16:24:45.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 16:24:20
2025-12-31T16:24:45.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T16:24:45.695 [DEBUG] [Thread-130902] [transport.py] [_log()] starting thread (client mode): 0xb95d51e0
2025-12-31T16:24:45.695 [DEBUG] [Thread-130902] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:24:45.715 [DEBUG] [Thread-130902] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T16:24:45.715 [INFO] [Thread-130902] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T16:24:45.718 [DEBUG] [Thread-130902] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:24:45.719 [DEBUG] [Thread-130902] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T16:24:45.719 [DEBUG] [Thread-130902] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:24:45.719 [DEBUG] [Thread-130902] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:24:45.719 [DEBUG] [Thread-130902] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:24:45.719 [DEBUG] [Thread-130902] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:24:45.719 [DEBUG] [Thread-130902] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:24:45.719 [DEBUG] [Thread-130902] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:24:45.719 [DEBUG] [Thread-130902] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:24:45.719 [DEBUG] [Thread-130902] [transport.py] [_log()] client lang: <none>
2025-12-31T16:24:45.719 [DEBUG] [Thread-130902] [transport.py] [_log()] server lang: <none>
2025-12-31T16:24:45.719 [DEBUG] [Thread-130902] [transport.py] [_log()] kex follows: False
2025-12-31T16:24:45.719 [DEBUG] [Thread-130902] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:24:45.720 [DEBUG] [Thread-130902] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:24:45.720 [DEBUG] [Thread-130902] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:24:45.720 [DEBUG] [Thread-130902] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:24:45.720 [DEBUG] [Thread-130902] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:24:45.720 [DEBUG] [Thread-130902] [transport.py] [_log()] Compression: none
2025-12-31T16:24:45.720 [DEBUG] [Thread-130902] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:24:45.742 [DEBUG] [Thread-130902] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:24:45.742 [DEBUG] [Thread-130902] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:24:45.743 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T16:24:45.743 [DEBUG] [Thread-130902] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T16:24:45.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:24:45.745 [DEBUG] [Thread-130902] [transport.py] [_log()] userauth is OK
2025-12-31T16:24:45.745 [DEBUG] [Thread-130902] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:24:45.746 [DEBUG] [Thread-130902] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:24:45.746 [DEBUG] [Thread-130902] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T16:24:45.746 [DEBUG] [Thread-130902] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:24:45.770 [INFO] [Thread-130902] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:24:45.770 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:24:46.361 [DEBUG] [Thread-130902] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:24:46.362 [DEBUG] [Thread-130902] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:24:46.362 [DEBUG] [Thread-130902] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T16:24:46.403 [DEBUG] [Thread-130902] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:24:46.403 [DEBUG] [Thread-130902] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:24:46.406 [DEBUG] [Thread-130902] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:24:46.412 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:24:46.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T16:24:46.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T16:24:46.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T16:24:46.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:24:46.422 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T16:24:46.422 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:24:46.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:24:46.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T16:24:46.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.600141 -999.00  +25.10  30.54     18   -0.40 1 2 2 1 1   888    0 24.47 -21.95 ----- 28.9 30.5 296.1 34.3 27.9 -14.6 27.7 -14.7 27.4 -12.7 27.6 -13.3
2025-12-31T16:24:46.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T16:24:46.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T16:24:46.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.600141
2025-12-31T16:24:46.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T16:24:46.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T16:24:46.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T16:24:46.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T16:24:46.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T16:24:46.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T16:24:20', tmtdew=30.1, humidity=13.37, cloud=0.0, wind=30.28, temperature=24.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T14:24:12.182', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T16:24:46.425 [DEBUG] [Thread-130902] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:24:46.514 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T16:24:46.525 [DEBUG] [Thread-130905] [transport.py] [_log()] starting thread (client mode): 0xb6b623b0
2025-12-31T16:24:46.526 [DEBUG] [Thread-130905] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:24:46.540 [DEBUG] [Thread-130905] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T16:24:46.541 [INFO] [Thread-130905] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T16:24:46.548 [DEBUG] [Thread-130905] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:24:46.548 [DEBUG] [Thread-130905] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T16:24:46.548 [DEBUG] [Thread-130905] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:24:46.549 [DEBUG] [Thread-130905] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:24:46.549 [DEBUG] [Thread-130905] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:24:46.549 [DEBUG] [Thread-130905] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:24:46.549 [DEBUG] [Thread-130905] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:24:46.549 [DEBUG] [Thread-130905] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:24:46.549 [DEBUG] [Thread-130905] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:24:46.549 [DEBUG] [Thread-130905] [transport.py] [_log()] client lang: <none>
2025-12-31T16:24:46.549 [DEBUG] [Thread-130905] [transport.py] [_log()] server lang: <none>
2025-12-31T16:24:46.549 [DEBUG] [Thread-130905] [transport.py] [_log()] kex follows: False
2025-12-31T16:24:46.549 [DEBUG] [Thread-130905] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:24:46.549 [DEBUG] [Thread-130905] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:24:46.550 [DEBUG] [Thread-130905] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:24:46.550 [DEBUG] [Thread-130905] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:24:46.550 [DEBUG] [Thread-130905] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:24:46.550 [DEBUG] [Thread-130905] [transport.py] [_log()] Compression: none
2025-12-31T16:24:46.550 [DEBUG] [Thread-130905] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:24:46.606 [DEBUG] [Thread-130905] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:24:46.607 [DEBUG] [Thread-130905] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:24:46.608 [DEBUG] [Thread-130905] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T16:24:46.609 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T16:24:46.609 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:24:46.662 [DEBUG] [Thread-130905] [transport.py] [_log()] userauth is OK
2025-12-31T16:24:46.663 [DEBUG] [Thread-130905] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:24:46.663 [DEBUG] [Thread-130905] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:24:46.663 [DEBUG] [Thread-130905] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T16:24:46.663 [DEBUG] [Thread-130905] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:24:46.682 [INFO] [Thread-130905] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:24:46.683 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T16:24:46.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:24:47.547 [DEBUG] [Thread-130905] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:24:47.548 [DEBUG] [Thread-130905] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:24:47.596 [DEBUG] [Thread-130905] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:24:47.596 [DEBUG] [Thread-130905] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:24:47.605 [DEBUG] [Thread-130905] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:24:47.615 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:24:47.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T16:24:47.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T16:24:47.633 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:24:47.634 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:24:47.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:24:47.642 [DEBUG] [Thread-130905] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:24:50.467 [DEBUG] [Thread-130907 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:25:05.512 [DEBUG] [Thread-130908 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:25:15.656 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:25:15.657 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:25:17.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T16:25:17.665 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T16:25:17.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-12-31T16:25:18.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 16, 24, 52), 30.0, 13.35, 0.0, 28.34, 24.96, 0, 0, 0, 2, 0, 0),)
2025-12-31T16:25:18.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 16:24:52
2025-12-31T16:25:18.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T16:25:18.664 [DEBUG] [Thread-130909] [transport.py] [_log()] starting thread (client mode): 0xb6b29ea0
2025-12-31T16:25:18.664 [DEBUG] [Thread-130909] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:25:18.684 [DEBUG] [Thread-130909] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T16:25:18.684 [INFO] [Thread-130909] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T16:25:18.687 [DEBUG] [Thread-130909] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:25:18.687 [DEBUG] [Thread-130909] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T16:25:18.687 [DEBUG] [Thread-130909] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:25:18.687 [DEBUG] [Thread-130909] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:25:18.687 [DEBUG] [Thread-130909] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:25:18.687 [DEBUG] [Thread-130909] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:25:18.687 [DEBUG] [Thread-130909] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:25:18.687 [DEBUG] [Thread-130909] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:25:18.687 [DEBUG] [Thread-130909] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:25:18.687 [DEBUG] [Thread-130909] [transport.py] [_log()] client lang: <none>
2025-12-31T16:25:18.687 [DEBUG] [Thread-130909] [transport.py] [_log()] server lang: <none>
2025-12-31T16:25:18.687 [DEBUG] [Thread-130909] [transport.py] [_log()] kex follows: False
2025-12-31T16:25:18.687 [DEBUG] [Thread-130909] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:25:18.687 [DEBUG] [Thread-130909] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:25:18.687 [DEBUG] [Thread-130909] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:25:18.688 [DEBUG] [Thread-130909] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:25:18.688 [DEBUG] [Thread-130909] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:25:18.688 [DEBUG] [Thread-130909] [transport.py] [_log()] Compression: none
2025-12-31T16:25:18.688 [DEBUG] [Thread-130909] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:25:18.706 [DEBUG] [Thread-130909] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:25:18.707 [DEBUG] [Thread-130909] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:25:18.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T16:25:18.708 [DEBUG] [Thread-130909] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T16:25:18.708 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:25:18.710 [DEBUG] [Thread-130909] [transport.py] [_log()] userauth is OK
2025-12-31T16:25:18.710 [DEBUG] [Thread-130909] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:25:18.710 [DEBUG] [Thread-130909] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:25:18.710 [DEBUG] [Thread-130909] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T16:25:18.710 [DEBUG] [Thread-130909] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:25:18.736 [INFO] [Thread-130909] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:25:18.736 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:25:20.545 [DEBUG] [Thread-130911 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:25:21.818 [DEBUG] [Thread-130909] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:25:21.818 [DEBUG] [Thread-130909] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:25:21.818 [DEBUG] [Thread-130909] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T16:25:21.859 [DEBUG] [Thread-130909] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:25:21.859 [DEBUG] [Thread-130909] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:25:21.862 [DEBUG] [Thread-130909] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:25:21.874 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:25:21.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T16:25:21.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T16:25:21.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T16:25:21.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:25:21.894 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T16:25:21.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:25:21.894 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:25:21.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T16:25:21.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.600488 -999.00  +24.80  30.12     18   -0.50 1 2 2 1 1   888    0 24.24 -22.02 ----- 29.2 30.1 301.0 37.1 27.8 -14.4 27.8 -14.5 27.3 -15.2 27.6 -13.6
2025-12-31T16:25:21.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T16:25:21.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T16:25:21.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.600488
2025-12-31T16:25:21.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T16:25:21.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T16:25:21.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T16:25:21.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T16:25:21.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T16:25:21.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T16:24:52', tmtdew=30.0, humidity=13.35, cloud=0.0, wind=28.34, temperature=24.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T14:24:42.163', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T16:25:21.897 [DEBUG] [Thread-130909] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:25:21.981 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T16:25:21.993 [DEBUG] [Thread-130913] [transport.py] [_log()] starting thread (client mode): 0xb6b2aa40
2025-12-31T16:25:21.994 [DEBUG] [Thread-130913] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:25:22.008 [DEBUG] [Thread-130913] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T16:25:22.008 [INFO] [Thread-130913] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T16:25:22.016 [DEBUG] [Thread-130913] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:25:22.016 [DEBUG] [Thread-130913] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T16:25:22.016 [DEBUG] [Thread-130913] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:25:22.016 [DEBUG] [Thread-130913] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:25:22.016 [DEBUG] [Thread-130913] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:25:22.016 [DEBUG] [Thread-130913] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:25:22.016 [DEBUG] [Thread-130913] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:25:22.016 [DEBUG] [Thread-130913] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:25:22.016 [DEBUG] [Thread-130913] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:25:22.016 [DEBUG] [Thread-130913] [transport.py] [_log()] client lang: <none>
2025-12-31T16:25:22.016 [DEBUG] [Thread-130913] [transport.py] [_log()] server lang: <none>
2025-12-31T16:25:22.016 [DEBUG] [Thread-130913] [transport.py] [_log()] kex follows: False
2025-12-31T16:25:22.016 [DEBUG] [Thread-130913] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:25:22.016 [DEBUG] [Thread-130913] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:25:22.016 [DEBUG] [Thread-130913] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:25:22.016 [DEBUG] [Thread-130913] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:25:22.016 [DEBUG] [Thread-130913] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:25:22.016 [DEBUG] [Thread-130913] [transport.py] [_log()] Compression: none
2025-12-31T16:25:22.017 [DEBUG] [Thread-130913] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:25:22.073 [DEBUG] [Thread-130913] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:25:22.074 [DEBUG] [Thread-130913] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:25:22.075 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T16:25:22.075 [DEBUG] [Thread-130913] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T16:25:22.076 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:25:22.134 [DEBUG] [Thread-130913] [transport.py] [_log()] userauth is OK
2025-12-31T16:25:22.134 [DEBUG] [Thread-130913] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:25:22.134 [DEBUG] [Thread-130913] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:25:22.134 [DEBUG] [Thread-130913] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T16:25:22.134 [DEBUG] [Thread-130913] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:25:22.153 [INFO] [Thread-130913] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:25:22.153 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T16:25:22.154 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:25:22.967 [DEBUG] [Thread-130913] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:25:22.967 [DEBUG] [Thread-130913] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:25:23.015 [DEBUG] [Thread-130913] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:25:23.015 [DEBUG] [Thread-130913] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:25:23.024 [DEBUG] [Thread-130913] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:25:23.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:25:23.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T16:25:23.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T16:25:23.051 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:25:23.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:25:23.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:25:23.060 [DEBUG] [Thread-130913] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:25:24.200 [DEBUG] [Thread-130915 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:25:35.581 [DEBUG] [Thread-130916 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:25:50.637 [DEBUG] [Thread-130917 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:25:53.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T16:25:53.083 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T16:25:53.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T16:25:53.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 16, 25, 24), 29.96, 13.39, 0.0, 31.14, 24.96, 0, 0, 0, 2, 0, 0),)
2025-12-31T16:25:53.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 16:25:24
2025-12-31T16:25:53.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T16:25:54.092 [DEBUG] [Thread-130918] [transport.py] [_log()] starting thread (client mode): 0xb95f0d00
2025-12-31T16:25:54.092 [DEBUG] [Thread-130918] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:25:54.112 [DEBUG] [Thread-130918] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T16:25:54.112 [INFO] [Thread-130918] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T16:25:54.114 [DEBUG] [Thread-130918] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:25:54.114 [DEBUG] [Thread-130918] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T16:25:54.114 [DEBUG] [Thread-130918] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:25:54.114 [DEBUG] [Thread-130918] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:25:54.114 [DEBUG] [Thread-130918] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:25:54.114 [DEBUG] [Thread-130918] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:25:54.114 [DEBUG] [Thread-130918] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:25:54.114 [DEBUG] [Thread-130918] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:25:54.114 [DEBUG] [Thread-130918] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:25:54.114 [DEBUG] [Thread-130918] [transport.py] [_log()] client lang: <none>
2025-12-31T16:25:54.114 [DEBUG] [Thread-130918] [transport.py] [_log()] server lang: <none>
2025-12-31T16:25:54.114 [DEBUG] [Thread-130918] [transport.py] [_log()] kex follows: False
2025-12-31T16:25:54.114 [DEBUG] [Thread-130918] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:25:54.115 [DEBUG] [Thread-130918] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:25:54.115 [DEBUG] [Thread-130918] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:25:54.115 [DEBUG] [Thread-130918] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:25:54.115 [DEBUG] [Thread-130918] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:25:54.115 [DEBUG] [Thread-130918] [transport.py] [_log()] Compression: none
2025-12-31T16:25:54.115 [DEBUG] [Thread-130918] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:25:54.124 [DEBUG] [Thread-130918] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:25:54.124 [DEBUG] [Thread-130918] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:25:54.125 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T16:25:54.125 [DEBUG] [Thread-130918] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T16:25:54.126 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:25:54.127 [DEBUG] [Thread-130918] [transport.py] [_log()] userauth is OK
2025-12-31T16:25:54.127 [DEBUG] [Thread-130918] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:25:54.127 [DEBUG] [Thread-130918] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:25:54.127 [DEBUG] [Thread-130918] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T16:25:54.127 [DEBUG] [Thread-130918] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:25:54.143 [INFO] [Thread-130918] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:25:54.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:25:54.704 [DEBUG] [Thread-130918] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:25:54.704 [DEBUG] [Thread-130918] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:25:54.704 [DEBUG] [Thread-130918] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T16:25:54.745 [DEBUG] [Thread-130918] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:25:54.745 [DEBUG] [Thread-130918] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:25:54.749 [DEBUG] [Thread-130918] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:25:54.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:25:54.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T16:25:54.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T16:25:54.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T16:25:54.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:25:54.762 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T16:25:54.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:25:54.762 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:25:54.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T16:25:54.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.600835 -999.00  +24.90  28.45     18   -0.60 1 2 1 1 1   888    0 24.94 -21.66 ----- 30.7 28.4 309.6 35.7 27.8 -14.4 27.7 -14.2 27.3 -14.1 27.6 -13.3
2025-12-31T16:25:54.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T16:25:54.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T16:25:54.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.600835
2025-12-31T16:25:54.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T16:25:54.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T16:25:54.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T16:25:54.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T16:25:54.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T16:25:54.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T16:25:24', tmtdew=29.96, humidity=13.39, cloud=0.0, wind=31.14, temperature=24.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T14:25:12.144', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T16:25:54.763 [DEBUG] [Thread-130918] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:25:54.835 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T16:25:55.869 [DEBUG] [Thread-130921] [transport.py] [_log()] starting thread (client mode): 0xb95f2590
2025-12-31T16:25:55.869 [DEBUG] [Thread-130921] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:25:55.883 [DEBUG] [Thread-130921] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T16:25:55.883 [INFO] [Thread-130921] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T16:25:55.890 [DEBUG] [Thread-130921] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:25:55.891 [DEBUG] [Thread-130921] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T16:25:55.891 [DEBUG] [Thread-130921] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:25:55.891 [DEBUG] [Thread-130921] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:25:55.891 [DEBUG] [Thread-130921] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:25:55.891 [DEBUG] [Thread-130921] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:25:55.891 [DEBUG] [Thread-130921] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:25:55.891 [DEBUG] [Thread-130921] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:25:55.891 [DEBUG] [Thread-130921] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:25:55.891 [DEBUG] [Thread-130921] [transport.py] [_log()] client lang: <none>
2025-12-31T16:25:55.892 [DEBUG] [Thread-130921] [transport.py] [_log()] server lang: <none>
2025-12-31T16:25:55.892 [DEBUG] [Thread-130921] [transport.py] [_log()] kex follows: False
2025-12-31T16:25:55.892 [DEBUG] [Thread-130921] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:25:55.892 [DEBUG] [Thread-130921] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:25:55.892 [DEBUG] [Thread-130921] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:25:55.892 [DEBUG] [Thread-130921] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:25:55.892 [DEBUG] [Thread-130921] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:25:55.892 [DEBUG] [Thread-130921] [transport.py] [_log()] Compression: none
2025-12-31T16:25:55.892 [DEBUG] [Thread-130921] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:25:55.948 [DEBUG] [Thread-130921] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:25:55.949 [DEBUG] [Thread-130921] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:25:55.949 [DEBUG] [Thread-130921] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T16:25:55.949 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T16:25:55.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:25:56.008 [DEBUG] [Thread-130921] [transport.py] [_log()] userauth is OK
2025-12-31T16:25:56.008 [DEBUG] [Thread-130921] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:25:56.008 [DEBUG] [Thread-130921] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:25:56.008 [DEBUG] [Thread-130921] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T16:25:56.008 [DEBUG] [Thread-130921] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:25:56.024 [INFO] [Thread-130921] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:25:56.024 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T16:25:56.024 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:25:56.859 [DEBUG] [Thread-130921] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:25:56.859 [DEBUG] [Thread-130921] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:25:56.907 [DEBUG] [Thread-130921] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:25:56.908 [DEBUG] [Thread-130921] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:25:56.916 [DEBUG] [Thread-130921] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:25:56.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:25:56.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T16:25:56.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T16:25:56.939 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:25:56.939 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:25:56.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:25:56.947 [DEBUG] [Thread-130921] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:26:05.674 [DEBUG] [Thread-130923 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:26:15.796 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:26:15.796 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:26:20.716 [DEBUG] [Thread-130924 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:26:24.250 [DEBUG] [Thread-130925 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:26:26.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T16:26:26.970 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T16:26:26.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T16:26:27.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 16, 25, 56), 30.54, 12.72, 0.0, 28.6, 25.33, 0, 0, 0, 2, 0, 0),)
2025-12-31T16:26:27.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 16:25:56
2025-12-31T16:26:27.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T16:26:27.970 [DEBUG] [Thread-130926] [transport.py] [_log()] starting thread (client mode): 0xb6b29d80
2025-12-31T16:26:27.970 [DEBUG] [Thread-130926] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:26:27.990 [DEBUG] [Thread-130926] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T16:26:27.990 [INFO] [Thread-130926] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T16:26:27.992 [DEBUG] [Thread-130926] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:26:27.992 [DEBUG] [Thread-130926] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T16:26:27.992 [DEBUG] [Thread-130926] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:26:27.992 [DEBUG] [Thread-130926] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:26:27.992 [DEBUG] [Thread-130926] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:26:27.992 [DEBUG] [Thread-130926] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:26:27.992 [DEBUG] [Thread-130926] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:26:27.992 [DEBUG] [Thread-130926] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:26:27.992 [DEBUG] [Thread-130926] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:26:27.992 [DEBUG] [Thread-130926] [transport.py] [_log()] client lang: <none>
2025-12-31T16:26:27.992 [DEBUG] [Thread-130926] [transport.py] [_log()] server lang: <none>
2025-12-31T16:26:27.992 [DEBUG] [Thread-130926] [transport.py] [_log()] kex follows: False
2025-12-31T16:26:27.992 [DEBUG] [Thread-130926] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:26:27.992 [DEBUG] [Thread-130926] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:26:27.992 [DEBUG] [Thread-130926] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:26:27.992 [DEBUG] [Thread-130926] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:26:27.992 [DEBUG] [Thread-130926] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:26:27.992 [DEBUG] [Thread-130926] [transport.py] [_log()] Compression: none
2025-12-31T16:26:27.992 [DEBUG] [Thread-130926] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:26:28.000 [DEBUG] [Thread-130926] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:26:28.001 [DEBUG] [Thread-130926] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:26:28.001 [DEBUG] [Thread-130926] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T16:26:28.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T16:26:28.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:26:28.002 [DEBUG] [Thread-130926] [transport.py] [_log()] userauth is OK
2025-12-31T16:26:28.002 [DEBUG] [Thread-130926] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:26:28.002 [DEBUG] [Thread-130926] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:26:28.002 [DEBUG] [Thread-130926] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T16:26:28.002 [DEBUG] [Thread-130926] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:26:28.023 [INFO] [Thread-130926] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:26:28.023 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:26:28.646 [DEBUG] [Thread-130926] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:26:28.647 [DEBUG] [Thread-130926] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:26:28.647 [DEBUG] [Thread-130926] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T16:26:28.687 [DEBUG] [Thread-130926] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:26:28.687 [DEBUG] [Thread-130926] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:26:28.690 [DEBUG] [Thread-130926] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:26:28.701 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:26:28.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T16:26:28.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T16:26:28.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T16:26:28.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:26:28.717 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T16:26:28.718 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:26:28.718 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:26:28.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T16:26:28.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.601183 -999.00  +24.70  34.51     18   -0.70 1 2 2 1 1   888    0 25.25 -17.83 ----- 34.5 34.5 309.8 38.2 27.7 -15.1 27.7 -15.1 27.4 -13.6 27.6 -14.0
2025-12-31T16:26:28.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T16:26:28.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T16:26:28.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.601183
2025-12-31T16:26:28.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T16:26:28.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T16:26:28.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T16:26:28.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T16:26:28.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T16:26:28.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T16:25:56', tmtdew=30.54, humidity=12.72, cloud=0.0, wind=28.6, temperature=25.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T14:25:42.211', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T16:26:28.719 [DEBUG] [Thread-130926] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:26:28.795 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T16:26:28.806 [DEBUG] [Thread-130929] [transport.py] [_log()] starting thread (client mode): 0xb6b2b790
2025-12-31T16:26:28.806 [DEBUG] [Thread-130929] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:26:28.820 [DEBUG] [Thread-130929] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T16:26:28.820 [INFO] [Thread-130929] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T16:26:28.827 [DEBUG] [Thread-130929] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:26:28.827 [DEBUG] [Thread-130929] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T16:26:28.827 [DEBUG] [Thread-130929] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:26:28.827 [DEBUG] [Thread-130929] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:26:28.827 [DEBUG] [Thread-130929] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:26:28.827 [DEBUG] [Thread-130929] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:26:28.827 [DEBUG] [Thread-130929] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:26:28.828 [DEBUG] [Thread-130929] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:26:28.828 [DEBUG] [Thread-130929] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:26:28.828 [DEBUG] [Thread-130929] [transport.py] [_log()] client lang: <none>
2025-12-31T16:26:28.828 [DEBUG] [Thread-130929] [transport.py] [_log()] server lang: <none>
2025-12-31T16:26:28.828 [DEBUG] [Thread-130929] [transport.py] [_log()] kex follows: False
2025-12-31T16:26:28.828 [DEBUG] [Thread-130929] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:26:28.828 [DEBUG] [Thread-130929] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:26:28.828 [DEBUG] [Thread-130929] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:26:28.828 [DEBUG] [Thread-130929] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:26:28.828 [DEBUG] [Thread-130929] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:26:28.828 [DEBUG] [Thread-130929] [transport.py] [_log()] Compression: none
2025-12-31T16:26:28.828 [DEBUG] [Thread-130929] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:26:28.886 [DEBUG] [Thread-130929] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:26:28.886 [DEBUG] [Thread-130929] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:26:28.886 [DEBUG] [Thread-130929] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T16:26:28.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T16:26:28.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:26:28.943 [DEBUG] [Thread-130929] [transport.py] [_log()] userauth is OK
2025-12-31T16:26:28.943 [DEBUG] [Thread-130929] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:26:28.943 [DEBUG] [Thread-130929] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:26:28.943 [DEBUG] [Thread-130929] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T16:26:28.943 [DEBUG] [Thread-130929] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:26:28.958 [INFO] [Thread-130929] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:26:28.958 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T16:26:28.958 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:26:29.836 [DEBUG] [Thread-130929] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:26:29.836 [DEBUG] [Thread-130929] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:26:29.885 [DEBUG] [Thread-130929] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:26:29.885 [DEBUG] [Thread-130929] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:26:29.893 [DEBUG] [Thread-130929] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:26:29.900 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:26:29.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T16:26:29.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T16:26:29.916 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:26:29.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:26:29.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:26:29.924 [DEBUG] [Thread-130929] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:26:35.747 [DEBUG] [Thread-130931 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:26:50.811 [DEBUG] [Thread-130932 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:26:59.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T16:26:59.946 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T16:26:59.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T16:27:00.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 16, 26, 28), 30.58, 12.67, 0.0, 31.04, 25.29, 0, 0, 0, 2, 0, 0),)
2025-12-31T16:27:00.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 16:26:28
2025-12-31T16:27:00.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T16:27:00.990 [DEBUG] [Thread-130933] [transport.py] [_log()] starting thread (client mode): 0xb95d5de0
2025-12-31T16:27:00.990 [DEBUG] [Thread-130933] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:27:01.010 [DEBUG] [Thread-130933] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T16:27:01.010 [INFO] [Thread-130933] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T16:27:01.013 [DEBUG] [Thread-130933] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:27:01.013 [DEBUG] [Thread-130933] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T16:27:01.013 [DEBUG] [Thread-130933] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:27:01.013 [DEBUG] [Thread-130933] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:27:01.013 [DEBUG] [Thread-130933] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:27:01.013 [DEBUG] [Thread-130933] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:27:01.013 [DEBUG] [Thread-130933] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:27:01.013 [DEBUG] [Thread-130933] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:27:01.013 [DEBUG] [Thread-130933] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:27:01.014 [DEBUG] [Thread-130933] [transport.py] [_log()] client lang: <none>
2025-12-31T16:27:01.014 [DEBUG] [Thread-130933] [transport.py] [_log()] server lang: <none>
2025-12-31T16:27:01.014 [DEBUG] [Thread-130933] [transport.py] [_log()] kex follows: False
2025-12-31T16:27:01.014 [DEBUG] [Thread-130933] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:27:01.014 [DEBUG] [Thread-130933] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:27:01.014 [DEBUG] [Thread-130933] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:27:01.014 [DEBUG] [Thread-130933] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:27:01.014 [DEBUG] [Thread-130933] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:27:01.014 [DEBUG] [Thread-130933] [transport.py] [_log()] Compression: none
2025-12-31T16:27:01.014 [DEBUG] [Thread-130933] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:27:01.021 [DEBUG] [Thread-130933] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:27:01.021 [DEBUG] [Thread-130933] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:27:01.021 [DEBUG] [Thread-130933] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T16:27:01.021 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T16:27:01.021 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:27:01.022 [DEBUG] [Thread-130933] [transport.py] [_log()] userauth is OK
2025-12-31T16:27:01.022 [DEBUG] [Thread-130933] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:27:01.022 [DEBUG] [Thread-130933] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:27:01.022 [DEBUG] [Thread-130933] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T16:27:01.022 [DEBUG] [Thread-130933] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:27:01.041 [INFO] [Thread-130933] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:27:01.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:27:01.647 [DEBUG] [Thread-130933] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:27:01.647 [DEBUG] [Thread-130933] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:27:01.648 [DEBUG] [Thread-130933] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T16:27:01.688 [DEBUG] [Thread-130933] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:27:01.688 [DEBUG] [Thread-130933] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:27:01.690 [DEBUG] [Thread-130933] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:27:01.703 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:27:01.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T16:27:01.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T16:27:01.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T16:27:01.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:27:01.709 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T16:27:01.709 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:27:01.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:27:01.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T16:27:01.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.601530 -999.00  +24.70  26.98     18   -0.80 1 2 1 1 1   888    0 24.86 -14.18 ----- 33.4 27.0 301.6 39.5 27.7 -14.4 27.6 -14.6 27.2 -14.3 27.5 -13.7
2025-12-31T16:27:01.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T16:27:01.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T16:27:01.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.601530
2025-12-31T16:27:01.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T16:27:01.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T16:27:01.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T16:27:01.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T16:27:01.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T16:27:01.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T16:26:28', tmtdew=30.58, humidity=12.67, cloud=0.0, wind=31.04, temperature=25.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T14:26:12.192', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T16:27:01.710 [DEBUG] [Thread-130933] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:27:01.787 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T16:27:01.798 [DEBUG] [Thread-130936] [transport.py] [_log()] starting thread (client mode): 0xb95d6cb0
2025-12-31T16:27:01.799 [DEBUG] [Thread-130936] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:27:01.813 [DEBUG] [Thread-130936] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T16:27:01.813 [INFO] [Thread-130936] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T16:27:01.820 [DEBUG] [Thread-130936] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:27:01.820 [DEBUG] [Thread-130936] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T16:27:01.820 [DEBUG] [Thread-130936] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:27:01.821 [DEBUG] [Thread-130936] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:27:01.821 [DEBUG] [Thread-130936] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:27:01.821 [DEBUG] [Thread-130936] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:27:01.821 [DEBUG] [Thread-130936] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:27:01.821 [DEBUG] [Thread-130936] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:27:01.821 [DEBUG] [Thread-130936] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:27:01.821 [DEBUG] [Thread-130936] [transport.py] [_log()] client lang: <none>
2025-12-31T16:27:01.821 [DEBUG] [Thread-130936] [transport.py] [_log()] server lang: <none>
2025-12-31T16:27:01.821 [DEBUG] [Thread-130936] [transport.py] [_log()] kex follows: False
2025-12-31T16:27:01.821 [DEBUG] [Thread-130936] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:27:01.821 [DEBUG] [Thread-130936] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:27:01.821 [DEBUG] [Thread-130936] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:27:01.821 [DEBUG] [Thread-130936] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:27:01.821 [DEBUG] [Thread-130936] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:27:01.821 [DEBUG] [Thread-130936] [transport.py] [_log()] Compression: none
2025-12-31T16:27:01.821 [DEBUG] [Thread-130936] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:27:01.877 [DEBUG] [Thread-130936] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:27:01.877 [DEBUG] [Thread-130936] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:27:01.877 [DEBUG] [Thread-130936] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T16:27:01.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T16:27:01.878 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:27:01.934 [DEBUG] [Thread-130936] [transport.py] [_log()] userauth is OK
2025-12-31T16:27:01.934 [DEBUG] [Thread-130936] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:27:01.934 [DEBUG] [Thread-130936] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:27:01.934 [DEBUG] [Thread-130936] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T16:27:01.934 [DEBUG] [Thread-130936] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:27:01.952 [INFO] [Thread-130936] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:27:01.952 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T16:27:01.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:27:02.784 [DEBUG] [Thread-130936] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:27:02.784 [DEBUG] [Thread-130936] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:27:02.834 [DEBUG] [Thread-130936] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:27:02.834 [DEBUG] [Thread-130936] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:27:02.844 [DEBUG] [Thread-130936] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:27:02.853 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:27:02.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T16:27: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-12-31T16:27:02.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:27:02.877 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:27:02.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:27:02.886 [DEBUG] [Thread-130936] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:27:05.842 [DEBUG] [Thread-130938 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:27:15.937 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:27:15.938 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:27:20.895 [DEBUG] [Thread-130939 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:27:24.307 [DEBUG] [Thread-130940 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:27:32.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T16:27:32.908 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T16:27: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-12-31T16:27:33.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 16, 27), 30.49, 12.67, 0.0, 35.52, 25.01, 0, 0, 0, 2, 0, 0),)
2025-12-31T16:27:33.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 16:27:00
2025-12-31T16:27:33.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T16:27:33.958 [DEBUG] [Thread-130941] [transport.py] [_log()] starting thread (client mode): 0xb6bb0820
2025-12-31T16:27:33.958 [DEBUG] [Thread-130941] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:27:33.977 [DEBUG] [Thread-130941] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T16:27:33.977 [INFO] [Thread-130941] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T16:27:33.980 [DEBUG] [Thread-130941] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:27:33.980 [DEBUG] [Thread-130941] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T16:27:33.980 [DEBUG] [Thread-130941] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:27:33.980 [DEBUG] [Thread-130941] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:27:33.980 [DEBUG] [Thread-130941] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:27:33.980 [DEBUG] [Thread-130941] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:27:33.980 [DEBUG] [Thread-130941] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:27:33.980 [DEBUG] [Thread-130941] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:27:33.980 [DEBUG] [Thread-130941] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:27:33.980 [DEBUG] [Thread-130941] [transport.py] [_log()] client lang: <none>
2025-12-31T16:27:33.980 [DEBUG] [Thread-130941] [transport.py] [_log()] server lang: <none>
2025-12-31T16:27:33.980 [DEBUG] [Thread-130941] [transport.py] [_log()] kex follows: False
2025-12-31T16:27:33.980 [DEBUG] [Thread-130941] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:27:33.980 [DEBUG] [Thread-130941] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:27:33.980 [DEBUG] [Thread-130941] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:27:33.980 [DEBUG] [Thread-130941] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:27:33.980 [DEBUG] [Thread-130941] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:27:33.980 [DEBUG] [Thread-130941] [transport.py] [_log()] Compression: none
2025-12-31T16:27:33.981 [DEBUG] [Thread-130941] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:27:33.996 [DEBUG] [Thread-130941] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:27:33.996 [DEBUG] [Thread-130941] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:27:33.996 [DEBUG] [Thread-130941] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T16:27:33.996 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T16:27:33.996 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:27:33.997 [DEBUG] [Thread-130941] [transport.py] [_log()] userauth is OK
2025-12-31T16:27:33.997 [DEBUG] [Thread-130941] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:27:33.997 [DEBUG] [Thread-130941] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:27:33.997 [DEBUG] [Thread-130941] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T16:27:33.997 [DEBUG] [Thread-130941] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:27:34.010 [INFO] [Thread-130941] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:27:34.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:27:34.593 [DEBUG] [Thread-130941] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:27:34.593 [DEBUG] [Thread-130941] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:27:34.593 [DEBUG] [Thread-130941] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T16:27:34.633 [DEBUG] [Thread-130941] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:27:34.634 [DEBUG] [Thread-130941] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:27:34.636 [DEBUG] [Thread-130941] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:27:34.647 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:27:34.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T16:27:34.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T16:27:34.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T16:27:34.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:27:34.653 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T16:27:34.653 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:27:34.653 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:27:34.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T16:27:34.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.601878 -999.00  +24.90  34.33     18   -0.50 1 2 2 1 1   888    0 25.29 -9.10 ----- 31.5 34.3 306.0 36.4 27.7 -14.8 27.6 -14.5 27.2 -13.7 27.5 -13.4
2025-12-31T16:27:34.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T16:27:34.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T16:27:34.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.601878
2025-12-31T16:27:34.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T16:27:34.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T16:27:34.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T16:27:34.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T16:27:34.654 [DEBUG] [Thread-130941] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:27:34.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T16:27:34.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T16:27:00', tmtdew=30.49, humidity=12.67, cloud=0.0, wind=35.52, temperature=25.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T14:26:42.259', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T16:27:34.731 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T16:27:34.741 [DEBUG] [Thread-130944] [transport.py] [_log()] starting thread (client mode): 0xb95d51b0
2025-12-31T16:27:34.741 [DEBUG] [Thread-130944] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:27:34.756 [DEBUG] [Thread-130944] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T16:27:34.756 [INFO] [Thread-130944] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T16:27:34.763 [DEBUG] [Thread-130944] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:27:34.763 [DEBUG] [Thread-130944] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T16:27:34.763 [DEBUG] [Thread-130944] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:27:34.763 [DEBUG] [Thread-130944] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:27:34.763 [DEBUG] [Thread-130944] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:27:34.763 [DEBUG] [Thread-130944] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:27:34.763 [DEBUG] [Thread-130944] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:27:34.763 [DEBUG] [Thread-130944] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:27:34.763 [DEBUG] [Thread-130944] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:27:34.764 [DEBUG] [Thread-130944] [transport.py] [_log()] client lang: <none>
2025-12-31T16:27:34.764 [DEBUG] [Thread-130944] [transport.py] [_log()] server lang: <none>
2025-12-31T16:27:34.764 [DEBUG] [Thread-130944] [transport.py] [_log()] kex follows: False
2025-12-31T16:27:34.764 [DEBUG] [Thread-130944] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:27:34.764 [DEBUG] [Thread-130944] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:27:34.764 [DEBUG] [Thread-130944] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:27:34.764 [DEBUG] [Thread-130944] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:27:34.764 [DEBUG] [Thread-130944] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:27:34.764 [DEBUG] [Thread-130944] [transport.py] [_log()] Compression: none
2025-12-31T16:27:34.764 [DEBUG] [Thread-130944] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:27:34.820 [DEBUG] [Thread-130944] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:27:34.820 [DEBUG] [Thread-130944] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:27:34.820 [DEBUG] [Thread-130944] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T16:27:34.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T16:27:34.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:27:34.877 [DEBUG] [Thread-130944] [transport.py] [_log()] userauth is OK
2025-12-31T16:27:34.878 [DEBUG] [Thread-130944] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:27:34.878 [DEBUG] [Thread-130944] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:27:34.878 [DEBUG] [Thread-130944] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T16:27:34.878 [DEBUG] [Thread-130944] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:27:34.891 [INFO] [Thread-130944] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:27:34.892 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T16:27:34.892 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:27:35.696 [DEBUG] [Thread-130944] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:27:35.696 [DEBUG] [Thread-130944] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:27:35.743 [DEBUG] [Thread-130944] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:27:35.743 [DEBUG] [Thread-130944] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:27:35.752 [DEBUG] [Thread-130944] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:27:35.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:27:35.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T16:27: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') -> 00000000
2025-12-31T16:27:35.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:27:35.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:27:35.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:27:35.785 [DEBUG] [Thread-130944] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:27:35.933 [DEBUG] [Thread-130946 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:27:50.973 [DEBUG] [Thread-130947 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:28:05.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T16:28:05.807 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T16:28:05.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T16:28:06.004 [DEBUG] [Thread-130948 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:28:06.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 16, 27, 32), 30.02, 13.12, 0.0, 36.88, 24.98, 0, 0, 0, 2, 0, 0),)
2025-12-31T16:28:06.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 16:27:32
2025-12-31T16:28:06.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T16:28:06.858 [DEBUG] [Thread-130949] [transport.py] [_log()] starting thread (client mode): 0xb6b2a440
2025-12-31T16:28:06.858 [DEBUG] [Thread-130949] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:28:06.878 [DEBUG] [Thread-130949] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T16:28:06.878 [INFO] [Thread-130949] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T16:28:06.881 [DEBUG] [Thread-130949] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:28:06.882 [DEBUG] [Thread-130949] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T16:28:06.882 [DEBUG] [Thread-130949] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:28:06.882 [DEBUG] [Thread-130949] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:28:06.882 [DEBUG] [Thread-130949] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:28:06.882 [DEBUG] [Thread-130949] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:28:06.882 [DEBUG] [Thread-130949] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:28:06.882 [DEBUG] [Thread-130949] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:28:06.882 [DEBUG] [Thread-130949] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:28:06.882 [DEBUG] [Thread-130949] [transport.py] [_log()] client lang: <none>
2025-12-31T16:28:06.882 [DEBUG] [Thread-130949] [transport.py] [_log()] server lang: <none>
2025-12-31T16:28:06.882 [DEBUG] [Thread-130949] [transport.py] [_log()] kex follows: False
2025-12-31T16:28:06.882 [DEBUG] [Thread-130949] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:28:06.882 [DEBUG] [Thread-130949] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:28:06.882 [DEBUG] [Thread-130949] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:28:06.882 [DEBUG] [Thread-130949] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:28:06.882 [DEBUG] [Thread-130949] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:28:06.882 [DEBUG] [Thread-130949] [transport.py] [_log()] Compression: none
2025-12-31T16:28:06.882 [DEBUG] [Thread-130949] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:28:06.898 [DEBUG] [Thread-130949] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:28:06.898 [DEBUG] [Thread-130949] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:28:06.898 [DEBUG] [Thread-130949] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T16:28:06.898 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T16:28:06.898 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:28:06.899 [DEBUG] [Thread-130949] [transport.py] [_log()] userauth is OK
2025-12-31T16:28:06.899 [DEBUG] [Thread-130949] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:28:06.899 [DEBUG] [Thread-130949] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:28:06.899 [DEBUG] [Thread-130949] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T16:28:06.899 [DEBUG] [Thread-130949] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:28:06.914 [INFO] [Thread-130949] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:28:06.914 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:28:07.570 [DEBUG] [Thread-130949] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:28:07.571 [DEBUG] [Thread-130949] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:28:07.571 [DEBUG] [Thread-130949] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T16:28:07.612 [DEBUG] [Thread-130949] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:28:07.612 [DEBUG] [Thread-130949] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:28:07.616 [DEBUG] [Thread-130949] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:28:07.627 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:28:07.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T16:28:07.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T16:28:07.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T16:28:07.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:28:07.638 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T16:28:07.638 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:28:07.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:28:07.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T16:28:07.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.602224 -999.00  +24.90  24.81     19   -0.10 1 2 1 1 1   888    0 24.89 -9.30 ----- 25.7 24.8 306.0 39.1 27.7 -14.3 27.6 -14.2 27.1 -14.1 27.4 -13.6
2025-12-31T16:28:07.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T16:28:07.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T16:28:07.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.602224
2025-12-31T16:28:07.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T16:28:07.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T16:28:07.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T16:28:07.640 [DEBUG] [Thread-130949] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:28:07.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T16:28:07.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T16:28:07.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T16:27:32', tmtdew=30.02, humidity=13.12, cloud=0.0, wind=36.88, temperature=24.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T14:27:12.154', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T16:28:07.724 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T16:28:07.736 [DEBUG] [Thread-130952] [transport.py] [_log()] starting thread (client mode): 0xb95f2830
2025-12-31T16:28:07.736 [DEBUG] [Thread-130952] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:28:07.750 [DEBUG] [Thread-130952] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T16:28:07.751 [INFO] [Thread-130952] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T16:28:07.758 [DEBUG] [Thread-130952] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:28:07.759 [DEBUG] [Thread-130952] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T16:28:07.759 [DEBUG] [Thread-130952] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:28:07.759 [DEBUG] [Thread-130952] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:28:07.759 [DEBUG] [Thread-130952] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:28:07.759 [DEBUG] [Thread-130952] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:28:07.759 [DEBUG] [Thread-130952] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:28:07.759 [DEBUG] [Thread-130952] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:28:07.760 [DEBUG] [Thread-130952] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:28:07.760 [DEBUG] [Thread-130952] [transport.py] [_log()] client lang: <none>
2025-12-31T16:28:07.760 [DEBUG] [Thread-130952] [transport.py] [_log()] server lang: <none>
2025-12-31T16:28:07.760 [DEBUG] [Thread-130952] [transport.py] [_log()] kex follows: False
2025-12-31T16:28:07.760 [DEBUG] [Thread-130952] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:28:07.760 [DEBUG] [Thread-130952] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:28:07.760 [DEBUG] [Thread-130952] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:28:07.760 [DEBUG] [Thread-130952] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:28:07.760 [DEBUG] [Thread-130952] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:28:07.760 [DEBUG] [Thread-130952] [transport.py] [_log()] Compression: none
2025-12-31T16:28:07.760 [DEBUG] [Thread-130952] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:28:07.815 [DEBUG] [Thread-130952] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:28:07.815 [DEBUG] [Thread-130952] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:28:07.815 [DEBUG] [Thread-130952] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T16:28:07.815 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T16:28:07.816 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:28:07.876 [DEBUG] [Thread-130952] [transport.py] [_log()] userauth is OK
2025-12-31T16:28:07.877 [DEBUG] [Thread-130952] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:28:07.877 [DEBUG] [Thread-130952] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:28:07.877 [DEBUG] [Thread-130952] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T16:28:07.877 [DEBUG] [Thread-130952] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:28:07.891 [INFO] [Thread-130952] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:28:07.891 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T16:28:07.891 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:28:08.727 [DEBUG] [Thread-130952] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:28:08.727 [DEBUG] [Thread-130952] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:28:08.775 [DEBUG] [Thread-130952] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:28:08.775 [DEBUG] [Thread-130952] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:28:08.784 [DEBUG] [Thread-130952] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:28:08.793 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:28:08.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T16:28:08.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T16:28:08.811 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:28:08.811 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:28:08.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:28:08.819 [DEBUG] [Thread-130952] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:28:16.075 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:28:16.076 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:28:21.034 [DEBUG] [Thread-130954 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:28:24.357 [DEBUG] [Thread-130955 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:28:36.095 [DEBUG] [Thread-130956 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:28:38.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T16:28:38.834 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T16:28:38.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T16:28:39.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 16, 28, 4), 29.9, 13.23, 0.0, 37.7, 24.94, 0, 0, 0, 2, 0, 0),)
2025-12-31T16:28:39.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 16:28:04
2025-12-31T16:28:39.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T16:28:39.832 [DEBUG] [Thread-130957] [transport.py] [_log()] starting thread (client mode): 0xb95d7b50
2025-12-31T16:28:39.832 [DEBUG] [Thread-130957] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:28:39.852 [DEBUG] [Thread-130957] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T16:28:39.852 [INFO] [Thread-130957] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T16:28:39.854 [DEBUG] [Thread-130957] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:28:39.854 [DEBUG] [Thread-130957] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T16:28:39.854 [DEBUG] [Thread-130957] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:28:39.854 [DEBUG] [Thread-130957] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:28:39.854 [DEBUG] [Thread-130957] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:28:39.854 [DEBUG] [Thread-130957] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:28:39.854 [DEBUG] [Thread-130957] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:28:39.854 [DEBUG] [Thread-130957] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:28:39.854 [DEBUG] [Thread-130957] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:28:39.854 [DEBUG] [Thread-130957] [transport.py] [_log()] client lang: <none>
2025-12-31T16:28:39.854 [DEBUG] [Thread-130957] [transport.py] [_log()] server lang: <none>
2025-12-31T16:28:39.854 [DEBUG] [Thread-130957] [transport.py] [_log()] kex follows: False
2025-12-31T16:28:39.854 [DEBUG] [Thread-130957] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:28:39.854 [DEBUG] [Thread-130957] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:28:39.854 [DEBUG] [Thread-130957] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:28:39.854 [DEBUG] [Thread-130957] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:28:39.854 [DEBUG] [Thread-130957] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:28:39.854 [DEBUG] [Thread-130957] [transport.py] [_log()] Compression: none
2025-12-31T16:28:39.854 [DEBUG] [Thread-130957] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:28:39.872 [DEBUG] [Thread-130957] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:28:39.873 [DEBUG] [Thread-130957] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:28:39.874 [DEBUG] [Thread-130957] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T16:28:39.874 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T16:28:39.874 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:28:39.875 [DEBUG] [Thread-130957] [transport.py] [_log()] userauth is OK
2025-12-31T16:28:39.876 [DEBUG] [Thread-130957] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:28:39.876 [DEBUG] [Thread-130957] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:28:39.876 [DEBUG] [Thread-130957] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T16:28:39.876 [DEBUG] [Thread-130957] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:28:39.901 [INFO] [Thread-130957] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:28:39.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:28:40.628 [DEBUG] [Thread-130957] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:28:40.628 [DEBUG] [Thread-130957] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:28:40.629 [DEBUG] [Thread-130957] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T16:28:40.669 [DEBUG] [Thread-130957] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:28:40.669 [DEBUG] [Thread-130957] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:28:40.674 [DEBUG] [Thread-130957] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:28:40.687 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:28:40.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T16:28:40.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T16:28:40.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T16:28:40.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:28:40.701 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T16:28:40.701 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:28:40.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:28:40.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T16:28:40.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.602572 -999.00  +24.90  23.59     19   +0.00 1 2 1 1 1   888    0 24.75 -10.24 ----- 29.8 23.6 301.2 39.5 27.8 -14.5 27.6 -14.2 27.3 -13.6 27.5 -13.6
2025-12-31T16:28:40.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T16:28:40.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T16:28:40.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.602572
2025-12-31T16:28:40.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T16:28:40.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T16:28:40.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T16:28:40.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T16:28:40.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T16:28:40.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T16:28:04', tmtdew=29.9, humidity=13.23, cloud=0.0, wind=37.7, temperature=24.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T14:27:42.221', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T16:28:40.704 [DEBUG] [Thread-130957] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:28:40.794 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T16:28:40.806 [DEBUG] [Thread-130960] [transport.py] [_log()] starting thread (client mode): 0xb6b29f90
2025-12-31T16:28:40.806 [DEBUG] [Thread-130960] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:28:40.821 [DEBUG] [Thread-130960] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T16:28:40.821 [INFO] [Thread-130960] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T16:28:40.829 [DEBUG] [Thread-130960] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:28:40.829 [DEBUG] [Thread-130960] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T16:28:40.829 [DEBUG] [Thread-130960] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:28:40.829 [DEBUG] [Thread-130960] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:28:40.829 [DEBUG] [Thread-130960] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:28:40.829 [DEBUG] [Thread-130960] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:28:40.829 [DEBUG] [Thread-130960] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:28:40.829 [DEBUG] [Thread-130960] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:28:40.829 [DEBUG] [Thread-130960] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:28:40.829 [DEBUG] [Thread-130960] [transport.py] [_log()] client lang: <none>
2025-12-31T16:28:40.829 [DEBUG] [Thread-130960] [transport.py] [_log()] server lang: <none>
2025-12-31T16:28:40.829 [DEBUG] [Thread-130960] [transport.py] [_log()] kex follows: False
2025-12-31T16:28:40.829 [DEBUG] [Thread-130960] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:28:40.829 [DEBUG] [Thread-130960] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:28:40.829 [DEBUG] [Thread-130960] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:28:40.829 [DEBUG] [Thread-130960] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:28:40.830 [DEBUG] [Thread-130960] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:28:40.830 [DEBUG] [Thread-130960] [transport.py] [_log()] Compression: none
2025-12-31T16:28:40.830 [DEBUG] [Thread-130960] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:28:40.888 [DEBUG] [Thread-130960] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:28:40.889 [DEBUG] [Thread-130960] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:28:40.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T16:28:40.890 [DEBUG] [Thread-130960] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T16:28:40.891 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:28:40.944 [DEBUG] [Thread-130960] [transport.py] [_log()] userauth is OK
2025-12-31T16:28:40.945 [DEBUG] [Thread-130960] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:28:40.945 [DEBUG] [Thread-130960] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:28:40.946 [DEBUG] [Thread-130960] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T16:28:40.946 [DEBUG] [Thread-130960] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:28:40.966 [INFO] [Thread-130960] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:28:40.966 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T16:28:40.966 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:28:41.795 [DEBUG] [Thread-130960] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:28:41.796 [DEBUG] [Thread-130960] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:28:41.843 [DEBUG] [Thread-130960] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:28:41.843 [DEBUG] [Thread-130960] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:28:41.852 [DEBUG] [Thread-130960] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:28:41.862 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:28:41.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T16:28:41.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T16:28:41.880 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:28:41.881 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:28:41.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:28:41.889 [DEBUG] [Thread-130960] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:28:51.136 [DEBUG] [Thread-130962 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:29:06.195 [DEBUG] [Thread-130963 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:29:11.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T16:29:11.912 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T16:29:11.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T16:29:12.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 16, 29, 9), 29.22, 13.87, 0.0, 31.25, 24.9, 0, 0, 0, 2, 0, 0),)
2025-12-31T16:29:12.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 16:29:09
2025-12-31T16:29:12.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T16:29:12.917 [DEBUG] [Thread-130964] [transport.py] [_log()] starting thread (client mode): 0xb95780d0
2025-12-31T16:29:12.917 [DEBUG] [Thread-130964] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:29:12.929 [DEBUG] [Thread-130964] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T16:29:12.929 [INFO] [Thread-130964] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T16:29:12.932 [DEBUG] [Thread-130964] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:29:12.932 [DEBUG] [Thread-130964] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T16:29:12.932 [DEBUG] [Thread-130964] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:29:12.932 [DEBUG] [Thread-130964] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:29:12.932 [DEBUG] [Thread-130964] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:29:12.932 [DEBUG] [Thread-130964] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:29:12.932 [DEBUG] [Thread-130964] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:29:12.932 [DEBUG] [Thread-130964] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:29:12.932 [DEBUG] [Thread-130964] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:29:12.932 [DEBUG] [Thread-130964] [transport.py] [_log()] client lang: <none>
2025-12-31T16:29:12.932 [DEBUG] [Thread-130964] [transport.py] [_log()] server lang: <none>
2025-12-31T16:29:12.932 [DEBUG] [Thread-130964] [transport.py] [_log()] kex follows: False
2025-12-31T16:29:12.932 [DEBUG] [Thread-130964] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:29:12.932 [DEBUG] [Thread-130964] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:29:12.932 [DEBUG] [Thread-130964] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:29:12.932 [DEBUG] [Thread-130964] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:29:12.932 [DEBUG] [Thread-130964] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:29:12.932 [DEBUG] [Thread-130964] [transport.py] [_log()] Compression: none
2025-12-31T16:29:12.932 [DEBUG] [Thread-130964] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:29:12.949 [DEBUG] [Thread-130964] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:29:12.949 [DEBUG] [Thread-130964] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:29:12.950 [DEBUG] [Thread-130964] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T16:29:12.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T16:29:12.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:29:12.951 [DEBUG] [Thread-130964] [transport.py] [_log()] userauth is OK
2025-12-31T16:29:12.951 [DEBUG] [Thread-130964] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:29:12.952 [DEBUG] [Thread-130964] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:29:12.952 [DEBUG] [Thread-130964] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T16:29:12.952 [DEBUG] [Thread-130964] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:29:12.987 [INFO] [Thread-130964] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:29:12.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:29:13.626 [DEBUG] [Thread-130964] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:29:13.626 [DEBUG] [Thread-130964] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:29:13.627 [DEBUG] [Thread-130964] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T16:29:13.667 [DEBUG] [Thread-130964] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:29:13.667 [DEBUG] [Thread-130964] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:29:13.670 [DEBUG] [Thread-130964] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:29:13.682 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:29:13.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T16:29:13.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T16:29:13.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T16:29:13.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:29:13.694 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T16:29:13.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:29:13.694 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:29:13.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T16:29:13.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.602919 -999.00  +25.00  28.78     19   -0.10 1 2 1 1 1   888    0 25.12 -11.38 ----- 34.4 28.8 301.0 36.8 27.7 -15.1 27.6 -14.9 27.2 -13.8 27.4 -13.9
2025-12-31T16:29:13.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T16:29:13.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T16:29:13.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.602919
2025-12-31T16:29:13.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T16:29:13.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T16:29:13.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T16:29:13.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T16:29:13.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T16:29:13.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T16:29:09', tmtdew=29.22, humidity=13.87, cloud=0.0, wind=31.25, temperature=24.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T14:28:12.202', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T16:29:13.697 [DEBUG] [Thread-130964] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:29:13.780 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T16:29:13.792 [DEBUG] [Thread-130967] [transport.py] [_log()] starting thread (client mode): 0xb9578700
2025-12-31T16:29:13.792 [DEBUG] [Thread-130967] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:29:13.807 [DEBUG] [Thread-130967] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T16:29:13.807 [INFO] [Thread-130967] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T16:29:13.815 [DEBUG] [Thread-130967] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:29:13.815 [DEBUG] [Thread-130967] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T16:29:13.815 [DEBUG] [Thread-130967] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:29:13.815 [DEBUG] [Thread-130967] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:29:13.815 [DEBUG] [Thread-130967] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:29:13.815 [DEBUG] [Thread-130967] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:29:13.815 [DEBUG] [Thread-130967] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:29:13.815 [DEBUG] [Thread-130967] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:29:13.815 [DEBUG] [Thread-130967] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:29:13.815 [DEBUG] [Thread-130967] [transport.py] [_log()] client lang: <none>
2025-12-31T16:29:13.815 [DEBUG] [Thread-130967] [transport.py] [_log()] server lang: <none>
2025-12-31T16:29:13.816 [DEBUG] [Thread-130967] [transport.py] [_log()] kex follows: False
2025-12-31T16:29:13.816 [DEBUG] [Thread-130967] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:29:13.816 [DEBUG] [Thread-130967] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:29:13.816 [DEBUG] [Thread-130967] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:29:13.816 [DEBUG] [Thread-130967] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:29:13.816 [DEBUG] [Thread-130967] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:29:13.816 [DEBUG] [Thread-130967] [transport.py] [_log()] Compression: none
2025-12-31T16:29:13.816 [DEBUG] [Thread-130967] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:29:13.876 [DEBUG] [Thread-130967] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:29:13.876 [DEBUG] [Thread-130967] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:29:13.877 [DEBUG] [Thread-130967] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T16:29:13.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T16:29:13.878 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:29:13.932 [DEBUG] [Thread-130967] [transport.py] [_log()] userauth is OK
2025-12-31T16:29:13.932 [DEBUG] [Thread-130967] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:29:13.932 [DEBUG] [Thread-130967] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:29:13.932 [DEBUG] [Thread-130967] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T16:29:13.932 [DEBUG] [Thread-130967] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:29:13.950 [INFO] [Thread-130967] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:29:13.951 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T16:29:13.951 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:29:14.794 [DEBUG] [Thread-130967] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:29:14.794 [DEBUG] [Thread-130967] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:29:14.842 [DEBUG] [Thread-130967] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:29:14.842 [DEBUG] [Thread-130967] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:29:14.851 [DEBUG] [Thread-130967] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:29:14.861 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:29:14.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T16:29:14.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-12-31T16:29:14.879 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:29:14.880 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:29:14.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:29:14.889 [DEBUG] [Thread-130967] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:29:16.215 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:29:16.216 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:29:21.233 [DEBUG] [Thread-130969 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:29:24.410 [DEBUG] [Thread-130970 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:29:36.289 [DEBUG] [Thread-130971 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:29:44.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T16:29:44.911 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T16:29:44.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T16:29:45.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 16, 29, 41), 29.18, 14.28, 0.0, 31.53, 24.84, 0, 0, 0, 2, 0, 0),)
2025-12-31T16:29:45.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 16:29:41
2025-12-31T16:29:45.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T16:29:45.917 [DEBUG] [Thread-130972] [transport.py] [_log()] starting thread (client mode): 0xb95f1a20
2025-12-31T16:29:45.917 [DEBUG] [Thread-130972] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:29:45.938 [DEBUG] [Thread-130972] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T16:29:45.938 [INFO] [Thread-130972] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T16:29:45.939 [DEBUG] [Thread-130972] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:29:45.939 [DEBUG] [Thread-130972] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T16:29:45.939 [DEBUG] [Thread-130972] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:29:45.939 [DEBUG] [Thread-130972] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:29:45.939 [DEBUG] [Thread-130972] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:29:45.939 [DEBUG] [Thread-130972] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:29:45.939 [DEBUG] [Thread-130972] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:29:45.939 [DEBUG] [Thread-130972] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:29:45.939 [DEBUG] [Thread-130972] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:29:45.939 [DEBUG] [Thread-130972] [transport.py] [_log()] client lang: <none>
2025-12-31T16:29:45.939 [DEBUG] [Thread-130972] [transport.py] [_log()] server lang: <none>
2025-12-31T16:29:45.939 [DEBUG] [Thread-130972] [transport.py] [_log()] kex follows: False
2025-12-31T16:29:45.939 [DEBUG] [Thread-130972] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:29:45.939 [DEBUG] [Thread-130972] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:29:45.939 [DEBUG] [Thread-130972] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:29:45.939 [DEBUG] [Thread-130972] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:29:45.940 [DEBUG] [Thread-130972] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:29:45.940 [DEBUG] [Thread-130972] [transport.py] [_log()] Compression: none
2025-12-31T16:29:45.940 [DEBUG] [Thread-130972] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:29:45.959 [DEBUG] [Thread-130972] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:29:45.959 [DEBUG] [Thread-130972] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:29:45.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T16:29:45.960 [DEBUG] [Thread-130972] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T16:29:45.961 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:29:45.962 [DEBUG] [Thread-130972] [transport.py] [_log()] userauth is OK
2025-12-31T16:29:45.963 [DEBUG] [Thread-130972] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:29:45.963 [DEBUG] [Thread-130972] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:29:45.963 [DEBUG] [Thread-130972] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T16:29:45.963 [DEBUG] [Thread-130972] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:29:45.986 [INFO] [Thread-130972] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:29:45.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:29:46.747 [DEBUG] [Thread-130972] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:29:46.747 [DEBUG] [Thread-130972] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:29:46.748 [DEBUG] [Thread-130972] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T16:29:46.788 [DEBUG] [Thread-130972] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:29:46.789 [DEBUG] [Thread-130972] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:29:46.792 [DEBUG] [Thread-130972] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:29:46.800 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:29:46.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T16:29:46.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T16:29:46.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T16:29:46.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:29:46.811 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T16:29:46.812 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:29:46.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:29:46.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T16:29:46.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.603613 -999.00  +24.90  20.90     19   +0.00 1 2 1 1 1   888    0 25.05 -10.43 ----- 26.4 20.9 294.7 35.7 27.7 -14.7 27.6 -14.7 27.2 -14.5 27.5 -13.6
2025-12-31T16:29:46.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T16:29:46.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T16:29:46.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.603613
2025-12-31T16:29:46.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T16:29:46.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T16:29:46.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T16:29:46.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T16:29:46.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T16:29:46.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T16:29:41', tmtdew=29.18, humidity=14.28, cloud=0.0, wind=31.53, temperature=24.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T14:29:12.163', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T16:29:46.814 [DEBUG] [Thread-130972] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:29:46.897 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T16:29:46.907 [DEBUG] [Thread-130975] [transport.py] [_log()] starting thread (client mode): 0xb6bb9750
2025-12-31T16:29:46.907 [DEBUG] [Thread-130975] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:29:46.922 [DEBUG] [Thread-130975] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T16:29:46.923 [INFO] [Thread-130975] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T16:29:46.930 [DEBUG] [Thread-130975] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:29:46.931 [DEBUG] [Thread-130975] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T16:29:46.931 [DEBUG] [Thread-130975] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:29:46.931 [DEBUG] [Thread-130975] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:29:46.931 [DEBUG] [Thread-130975] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:29:46.931 [DEBUG] [Thread-130975] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:29:46.931 [DEBUG] [Thread-130975] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:29:46.931 [DEBUG] [Thread-130975] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:29:46.931 [DEBUG] [Thread-130975] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:29:46.931 [DEBUG] [Thread-130975] [transport.py] [_log()] client lang: <none>
2025-12-31T16:29:46.932 [DEBUG] [Thread-130975] [transport.py] [_log()] server lang: <none>
2025-12-31T16:29:46.932 [DEBUG] [Thread-130975] [transport.py] [_log()] kex follows: False
2025-12-31T16:29:46.932 [DEBUG] [Thread-130975] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:29:46.932 [DEBUG] [Thread-130975] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:29:46.932 [DEBUG] [Thread-130975] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:29:46.932 [DEBUG] [Thread-130975] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:29:46.932 [DEBUG] [Thread-130975] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:29:46.932 [DEBUG] [Thread-130975] [transport.py] [_log()] Compression: none
2025-12-31T16:29:46.932 [DEBUG] [Thread-130975] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:29:46.987 [DEBUG] [Thread-130975] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:29:46.988 [DEBUG] [Thread-130975] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:29:46.988 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T16:29:46.989 [DEBUG] [Thread-130975] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T16:29:46.990 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:29:47.047 [DEBUG] [Thread-130975] [transport.py] [_log()] userauth is OK
2025-12-31T16:29:47.047 [DEBUG] [Thread-130975] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:29:47.047 [DEBUG] [Thread-130975] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:29:47.048 [DEBUG] [Thread-130975] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T16:29:47.048 [DEBUG] [Thread-130975] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:29:47.066 [INFO] [Thread-130975] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:29:47.066 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T16:29:47.067 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:29:47.927 [DEBUG] [Thread-130975] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:29:47.928 [DEBUG] [Thread-130975] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:29:47.976 [DEBUG] [Thread-130975] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:29:47.976 [DEBUG] [Thread-130975] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:29:47.985 [DEBUG] [Thread-130975] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:29:47.994 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:29:47.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T16:29:48.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T16:29:48.012 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:29:48.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:29:48.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:29:48.021 [DEBUG] [Thread-130975] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:29:51.322 [DEBUG] [Thread-130977 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:30:06.373 [DEBUG] [Thread-130978 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:30:16.355 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:30:16.356 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:30:18.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T16:30:18.044 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T16:30:18.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T16:30:18.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 16, 30, 13), 29.24, 14.22, 0.0, 31.57, 24.86, 0, 0, 0, 2, 0, 0),)
2025-12-31T16:30:18.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 16:30:13
2025-12-31T16:30:18.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T16:30:19.042 [DEBUG] [Thread-130979] [transport.py] [_log()] starting thread (client mode): 0xb95d64a0
2025-12-31T16:30:19.042 [DEBUG] [Thread-130979] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:30:19.062 [DEBUG] [Thread-130979] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T16:30:19.062 [INFO] [Thread-130979] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T16:30:19.065 [DEBUG] [Thread-130979] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:30:19.065 [DEBUG] [Thread-130979] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T16:30:19.065 [DEBUG] [Thread-130979] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:30:19.065 [DEBUG] [Thread-130979] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:30:19.066 [DEBUG] [Thread-130979] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:30:19.066 [DEBUG] [Thread-130979] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:30:19.066 [DEBUG] [Thread-130979] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:30:19.066 [DEBUG] [Thread-130979] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:30:19.066 [DEBUG] [Thread-130979] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:30:19.066 [DEBUG] [Thread-130979] [transport.py] [_log()] client lang: <none>
2025-12-31T16:30:19.066 [DEBUG] [Thread-130979] [transport.py] [_log()] server lang: <none>
2025-12-31T16:30:19.066 [DEBUG] [Thread-130979] [transport.py] [_log()] kex follows: False
2025-12-31T16:30:19.066 [DEBUG] [Thread-130979] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:30:19.066 [DEBUG] [Thread-130979] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:30:19.066 [DEBUG] [Thread-130979] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:30:19.066 [DEBUG] [Thread-130979] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:30:19.066 [DEBUG] [Thread-130979] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:30:19.066 [DEBUG] [Thread-130979] [transport.py] [_log()] Compression: none
2025-12-31T16:30:19.066 [DEBUG] [Thread-130979] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:30:19.085 [DEBUG] [Thread-130979] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:30:19.085 [DEBUG] [Thread-130979] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:30:19.086 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T16:30:19.086 [DEBUG] [Thread-130979] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T16:30:19.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:30:19.088 [DEBUG] [Thread-130979] [transport.py] [_log()] userauth is OK
2025-12-31T16:30:19.088 [DEBUG] [Thread-130979] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:30:19.088 [DEBUG] [Thread-130979] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:30:19.088 [DEBUG] [Thread-130979] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T16:30:19.088 [DEBUG] [Thread-130979] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:30:19.113 [INFO] [Thread-130979] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:30:19.114 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:30:21.405 [DEBUG] [Thread-130981 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:30:23.037 [DEBUG] [Thread-130979] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:30:23.037 [DEBUG] [Thread-130979] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:30:23.037 [DEBUG] [Thread-130979] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T16:30:23.078 [DEBUG] [Thread-130979] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:30:23.078 [DEBUG] [Thread-130979] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:30:23.082 [DEBUG] [Thread-130979] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:30:23.125 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:30:23.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T16:30:23.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T16:30:23.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T16:30:23.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:30:23.157 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T16:30:23.157 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:30:23.157 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:30:23.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T16:30:23.158 [WARNING] [poll_weather_worker] [driver.py] [poll_weather_state()] Unable to get atlas cloud data: list index out of range
2025-12-31T16:30:23.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T16:30:13', tmtdew=29.24, humidity=14.22, cloud=0.0, wind=31.57, temperature=24.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp=None, atlas_cloud=None, atlas_rain=None, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T16:30:23.159 [DEBUG] [Thread-130979] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:30:23.243 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T16:30:23.255 [DEBUG] [Thread-130983] [transport.py] [_log()] starting thread (client mode): 0xb955ba30
2025-12-31T16:30:23.255 [DEBUG] [Thread-130983] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:30:23.270 [DEBUG] [Thread-130983] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T16:30:23.270 [INFO] [Thread-130983] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T16:30:23.278 [DEBUG] [Thread-130983] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:30:23.278 [DEBUG] [Thread-130983] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T16:30:23.278 [DEBUG] [Thread-130983] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:30:23.278 [DEBUG] [Thread-130983] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:30:23.278 [DEBUG] [Thread-130983] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:30:23.278 [DEBUG] [Thread-130983] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:30:23.278 [DEBUG] [Thread-130983] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:30:23.278 [DEBUG] [Thread-130983] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:30:23.278 [DEBUG] [Thread-130983] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:30:23.278 [DEBUG] [Thread-130983] [transport.py] [_log()] client lang: <none>
2025-12-31T16:30:23.278 [DEBUG] [Thread-130983] [transport.py] [_log()] server lang: <none>
2025-12-31T16:30:23.278 [DEBUG] [Thread-130983] [transport.py] [_log()] kex follows: False
2025-12-31T16:30:23.279 [DEBUG] [Thread-130983] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:30:23.279 [DEBUG] [Thread-130983] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:30:23.279 [DEBUG] [Thread-130983] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:30:23.279 [DEBUG] [Thread-130983] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:30:23.279 [DEBUG] [Thread-130983] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:30:23.279 [DEBUG] [Thread-130983] [transport.py] [_log()] Compression: none
2025-12-31T16:30:23.279 [DEBUG] [Thread-130983] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:30:23.334 [DEBUG] [Thread-130983] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:30:23.335 [DEBUG] [Thread-130983] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:30:23.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T16:30:23.336 [DEBUG] [Thread-130983] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T16:30:23.337 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:30:23.391 [DEBUG] [Thread-130983] [transport.py] [_log()] userauth is OK
2025-12-31T16:30:23.391 [DEBUG] [Thread-130983] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:30:23.391 [DEBUG] [Thread-130983] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:30:23.391 [DEBUG] [Thread-130983] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T16:30:23.391 [DEBUG] [Thread-130983] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:30:23.410 [INFO] [Thread-130983] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:30:23.411 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T16:30:23.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:30:24.257 [DEBUG] [Thread-130983] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:30:24.257 [DEBUG] [Thread-130983] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:30:24.305 [DEBUG] [Thread-130983] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:30:24.305 [DEBUG] [Thread-130983] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:30:24.314 [DEBUG] [Thread-130983] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:30:24.323 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:30:24.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T16:30:24.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T16:30:24.342 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:30:24.342 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:30:24.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:30:24.351 [DEBUG] [Thread-130983] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:30:24.465 [DEBUG] [Thread-130985 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:30:36.440 [DEBUG] [Thread-130986 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:30:51.501 [DEBUG] [Thread-130987 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:30:54.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T16:30:54.373 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T16:30:54.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T16:30:55.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 16, 30, 45), 29.63, 13.69, 0.0, 28.65, 25.13, 0, 0, 0, 2, 0, 0),)
2025-12-31T16:30:55.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 16:30:45
2025-12-31T16:30:55.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T16:30:55.392 [DEBUG] [Thread-130988] [transport.py] [_log()] starting thread (client mode): 0xb95791e0
2025-12-31T16:30:55.392 [DEBUG] [Thread-130988] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:30:55.412 [DEBUG] [Thread-130988] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T16:30:55.412 [INFO] [Thread-130988] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T16:30:55.415 [DEBUG] [Thread-130988] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:30:55.415 [DEBUG] [Thread-130988] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T16:30:55.415 [DEBUG] [Thread-130988] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:30:55.415 [DEBUG] [Thread-130988] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:30:55.415 [DEBUG] [Thread-130988] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:30:55.415 [DEBUG] [Thread-130988] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:30:55.415 [DEBUG] [Thread-130988] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:30:55.415 [DEBUG] [Thread-130988] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:30:55.415 [DEBUG] [Thread-130988] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:30:55.415 [DEBUG] [Thread-130988] [transport.py] [_log()] client lang: <none>
2025-12-31T16:30:55.415 [DEBUG] [Thread-130988] [transport.py] [_log()] server lang: <none>
2025-12-31T16:30:55.416 [DEBUG] [Thread-130988] [transport.py] [_log()] kex follows: False
2025-12-31T16:30:55.416 [DEBUG] [Thread-130988] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:30:55.416 [DEBUG] [Thread-130988] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:30:55.416 [DEBUG] [Thread-130988] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:30:55.416 [DEBUG] [Thread-130988] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:30:55.416 [DEBUG] [Thread-130988] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:30:55.416 [DEBUG] [Thread-130988] [transport.py] [_log()] Compression: none
2025-12-31T16:30:55.416 [DEBUG] [Thread-130988] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:30:55.423 [DEBUG] [Thread-130988] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:30:55.423 [DEBUG] [Thread-130988] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:30:55.424 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T16:30:55.424 [DEBUG] [Thread-130988] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T16:30:55.424 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:30:55.424 [DEBUG] [Thread-130988] [transport.py] [_log()] userauth is OK
2025-12-31T16:30:55.424 [DEBUG] [Thread-130988] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:30:55.424 [DEBUG] [Thread-130988] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:30:55.424 [DEBUG] [Thread-130988] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T16:30:55.424 [DEBUG] [Thread-130988] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:30:55.434 [INFO] [Thread-130988] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:30:55.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:30:56.081 [DEBUG] [Thread-130988] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:30:56.081 [DEBUG] [Thread-130988] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:30:56.081 [DEBUG] [Thread-130988] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T16:30:56.122 [DEBUG] [Thread-130988] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:30:56.122 [DEBUG] [Thread-130988] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:30:56.125 [DEBUG] [Thread-130988] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:30:56.137 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:30:56.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T16:30:56.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T16:30:56.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T16:30:56.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:30:56.143 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T16:30:56.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:30:56.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:30:56.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T16:30:56.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.604308 -999.00  +24.90  31.46     19   -0.20 1 2 2 1 1   888    0 25.05 -14.57 ----- 29.5 31.5 306.8 44.0 27.6 -14.5 27.5 -14.8 27.2 -13.9 27.5 -13.9
2025-12-31T16:30:56.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T16:30:56.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T16:30:56.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.604308
2025-12-31T16:30:56.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T16:30:56.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T16:30:56.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T16:30:56.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T16:30:56.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T16:30:56.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T16:30:45', tmtdew=29.63, humidity=13.69, cloud=0.0, wind=28.65, temperature=25.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T14:30:12.211', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T16:30:56.144 [DEBUG] [Thread-130988] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:30:56.216 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T16:30:56.228 [DEBUG] [Thread-130991] [transport.py] [_log()] starting thread (client mode): 0xb9578af0
2025-12-31T16:30:56.228 [DEBUG] [Thread-130991] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:30:56.243 [DEBUG] [Thread-130991] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T16:30:56.243 [INFO] [Thread-130991] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T16:30:56.250 [DEBUG] [Thread-130991] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:30:56.250 [DEBUG] [Thread-130991] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T16:30:56.250 [DEBUG] [Thread-130991] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:30:56.251 [DEBUG] [Thread-130991] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:30:56.251 [DEBUG] [Thread-130991] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:30:56.251 [DEBUG] [Thread-130991] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:30:56.251 [DEBUG] [Thread-130991] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:30:56.251 [DEBUG] [Thread-130991] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:30:56.251 [DEBUG] [Thread-130991] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:30:56.251 [DEBUG] [Thread-130991] [transport.py] [_log()] client lang: <none>
2025-12-31T16:30:56.251 [DEBUG] [Thread-130991] [transport.py] [_log()] server lang: <none>
2025-12-31T16:30:56.251 [DEBUG] [Thread-130991] [transport.py] [_log()] kex follows: False
2025-12-31T16:30:56.251 [DEBUG] [Thread-130991] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:30:56.251 [DEBUG] [Thread-130991] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:30:56.251 [DEBUG] [Thread-130991] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:30:56.251 [DEBUG] [Thread-130991] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:30:56.251 [DEBUG] [Thread-130991] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:30:56.251 [DEBUG] [Thread-130991] [transport.py] [_log()] Compression: none
2025-12-31T16:30:56.251 [DEBUG] [Thread-130991] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:30:56.309 [DEBUG] [Thread-130991] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:30:56.309 [DEBUG] [Thread-130991] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:30:56.309 [DEBUG] [Thread-130991] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T16:30:56.309 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T16:30:56.309 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:30:56.365 [DEBUG] [Thread-130991] [transport.py] [_log()] userauth is OK
2025-12-31T16:30:56.365 [DEBUG] [Thread-130991] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:30:56.365 [DEBUG] [Thread-130991] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:30:56.365 [DEBUG] [Thread-130991] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T16:30:56.365 [DEBUG] [Thread-130991] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:30:56.380 [INFO] [Thread-130991] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:30:56.380 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T16:30:56.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:30:57.184 [DEBUG] [Thread-130991] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:30:57.184 [DEBUG] [Thread-130991] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:30:57.232 [DEBUG] [Thread-130991] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:30:57.233 [DEBUG] [Thread-130991] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:30:57.242 [DEBUG] [Thread-130991] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:30:57.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:30:57.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T16:30:57.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T16:30:57.270 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:30:57.270 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:30:57.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:30:57.278 [DEBUG] [Thread-130991] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:31:06.533 [DEBUG] [Thread-130993 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:31:16.501 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:31:16.503 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:31:21.587 [DEBUG] [Thread-130994 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:31:24.515 [DEBUG] [Thread-130995 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:31:27.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T16:31:27.301 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T16:31:27.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T16:31:28.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 16, 31, 17), 29.87, 13.47, 0.0, 33.38, 25.21, 0, 0, 0, 2, 0, 0),)
2025-12-31T16:31:28.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 16:31:17
2025-12-31T16:31:28.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T16:31:28.298 [DEBUG] [Thread-130996] [transport.py] [_log()] starting thread (client mode): 0xb6bb9510
2025-12-31T16:31:28.298 [DEBUG] [Thread-130996] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:31:28.318 [DEBUG] [Thread-130996] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T16:31:28.318 [INFO] [Thread-130996] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T16:31:28.320 [DEBUG] [Thread-130996] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:31:28.320 [DEBUG] [Thread-130996] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T16:31:28.320 [DEBUG] [Thread-130996] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:31:28.320 [DEBUG] [Thread-130996] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:31:28.320 [DEBUG] [Thread-130996] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:31:28.320 [DEBUG] [Thread-130996] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:31:28.320 [DEBUG] [Thread-130996] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:31:28.320 [DEBUG] [Thread-130996] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:31:28.320 [DEBUG] [Thread-130996] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:31:28.321 [DEBUG] [Thread-130996] [transport.py] [_log()] client lang: <none>
2025-12-31T16:31:28.321 [DEBUG] [Thread-130996] [transport.py] [_log()] server lang: <none>
2025-12-31T16:31:28.321 [DEBUG] [Thread-130996] [transport.py] [_log()] kex follows: False
2025-12-31T16:31:28.321 [DEBUG] [Thread-130996] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:31:28.321 [DEBUG] [Thread-130996] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:31:28.321 [DEBUG] [Thread-130996] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:31:28.321 [DEBUG] [Thread-130996] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:31:28.321 [DEBUG] [Thread-130996] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:31:28.321 [DEBUG] [Thread-130996] [transport.py] [_log()] Compression: none
2025-12-31T16:31:28.321 [DEBUG] [Thread-130996] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:31:28.329 [DEBUG] [Thread-130996] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:31:28.329 [DEBUG] [Thread-130996] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:31:28.330 [DEBUG] [Thread-130996] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T16:31:28.330 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T16:31:28.330 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:31:28.331 [DEBUG] [Thread-130996] [transport.py] [_log()] userauth is OK
2025-12-31T16:31:28.331 [DEBUG] [Thread-130996] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:31:28.331 [DEBUG] [Thread-130996] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:31:28.331 [DEBUG] [Thread-130996] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T16:31:28.331 [DEBUG] [Thread-130996] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:31:28.352 [INFO] [Thread-130996] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:31:28.352 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:31:29.096 [DEBUG] [Thread-130996] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:31:29.097 [DEBUG] [Thread-130996] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:31:29.097 [DEBUG] [Thread-130996] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T16:31:29.139 [DEBUG] [Thread-130996] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:31:29.139 [DEBUG] [Thread-130996] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:31:29.142 [DEBUG] [Thread-130996] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:31:29.155 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:31:29.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T16:31:29.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T16:31:29.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T16:31:29.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:31:29.164 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T16:31:29.164 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:31:29.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:31:29.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T16:31:29.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.604655 -999.00  +24.60  35.52     18   -0.50 1 2 2 1 1   888    0 24.39 -15.95 ----- 31.1 35.5 293.8 45.7 27.5 -15.1 27.5 -14.9 27.1 -13.9 27.3 -14.0
2025-12-31T16:31:29.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T16:31:29.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T16:31:29.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.604655
2025-12-31T16:31:29.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T16:31:29.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T16:31:29.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T16:31:29.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T16:31:29.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T16:31:29.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T16:31:17', tmtdew=29.87, humidity=13.47, cloud=0.0, wind=33.38, temperature=25.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T14:30:42.192', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T16:31:29.166 [DEBUG] [Thread-130996] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:31:29.244 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T16:31:29.255 [DEBUG] [Thread-130999] [transport.py] [_log()] starting thread (client mode): 0xb95581c0
2025-12-31T16:31:29.255 [DEBUG] [Thread-130999] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:31:29.272 [DEBUG] [Thread-130999] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T16:31:29.272 [INFO] [Thread-130999] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T16:31:29.279 [DEBUG] [Thread-130999] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:31:29.279 [DEBUG] [Thread-130999] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T16:31:29.279 [DEBUG] [Thread-130999] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:31:29.279 [DEBUG] [Thread-130999] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:31:29.279 [DEBUG] [Thread-130999] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:31:29.279 [DEBUG] [Thread-130999] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:31:29.279 [DEBUG] [Thread-130999] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:31:29.279 [DEBUG] [Thread-130999] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:31:29.279 [DEBUG] [Thread-130999] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:31:29.279 [DEBUG] [Thread-130999] [transport.py] [_log()] client lang: <none>
2025-12-31T16:31:29.279 [DEBUG] [Thread-130999] [transport.py] [_log()] server lang: <none>
2025-12-31T16:31:29.279 [DEBUG] [Thread-130999] [transport.py] [_log()] kex follows: False
2025-12-31T16:31:29.279 [DEBUG] [Thread-130999] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:31:29.279 [DEBUG] [Thread-130999] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:31:29.279 [DEBUG] [Thread-130999] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:31:29.279 [DEBUG] [Thread-130999] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:31:29.279 [DEBUG] [Thread-130999] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:31:29.279 [DEBUG] [Thread-130999] [transport.py] [_log()] Compression: none
2025-12-31T16:31:29.279 [DEBUG] [Thread-130999] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:31:29.335 [DEBUG] [Thread-130999] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:31:29.335 [DEBUG] [Thread-130999] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:31:29.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T16:31:29.336 [DEBUG] [Thread-130999] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T16:31:29.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:31:29.393 [DEBUG] [Thread-130999] [transport.py] [_log()] userauth is OK
2025-12-31T16:31:29.393 [DEBUG] [Thread-130999] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:31:29.393 [DEBUG] [Thread-130999] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:31:29.393 [DEBUG] [Thread-130999] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T16:31:29.393 [DEBUG] [Thread-130999] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:31:29.407 [INFO] [Thread-130999] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:31:29.407 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T16:31:29.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:31:30.258 [DEBUG] [Thread-130999] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:31:30.258 [DEBUG] [Thread-130999] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:31:30.305 [DEBUG] [Thread-130999] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:31:30.305 [DEBUG] [Thread-130999] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:31:30.313 [DEBUG] [Thread-130999] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:31:30.322 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:31:30.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-12-31T16:31:30.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T16:31:30.343 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:31:30.343 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:31:30.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:31:30.355 [DEBUG] [Thread-130999] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:31:36.619 [DEBUG] [Thread-131001 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:31:51.677 [DEBUG] [Thread-131002 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:32:00.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T16:32:00.374 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T16:32:00.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T16:32:01.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 16, 31, 49), 30.04, 13.52, 0.0, 33.58, 25.0, 0, 0, 0, 2, 0, 0),)
2025-12-31T16:32:01.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 16:31:49
2025-12-31T16:32:01.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T16:32:01.346 [DEBUG] [Thread-131003] [transport.py] [_log()] starting thread (client mode): 0xb95597b0
2025-12-31T16:32:01.346 [DEBUG] [Thread-131003] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:32:01.368 [DEBUG] [Thread-131003] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T16:32:01.368 [INFO] [Thread-131003] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T16:32:01.372 [DEBUG] [Thread-131003] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:32:01.372 [DEBUG] [Thread-131003] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T16:32:01.372 [DEBUG] [Thread-131003] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:32:01.372 [DEBUG] [Thread-131003] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:32:01.372 [DEBUG] [Thread-131003] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:32:01.372 [DEBUG] [Thread-131003] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:32:01.372 [DEBUG] [Thread-131003] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:32:01.372 [DEBUG] [Thread-131003] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:32:01.372 [DEBUG] [Thread-131003] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:32:01.372 [DEBUG] [Thread-131003] [transport.py] [_log()] client lang: <none>
2025-12-31T16:32:01.372 [DEBUG] [Thread-131003] [transport.py] [_log()] server lang: <none>
2025-12-31T16:32:01.372 [DEBUG] [Thread-131003] [transport.py] [_log()] kex follows: False
2025-12-31T16:32:01.372 [DEBUG] [Thread-131003] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:32:01.372 [DEBUG] [Thread-131003] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:32:01.372 [DEBUG] [Thread-131003] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:32:01.372 [DEBUG] [Thread-131003] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:32:01.372 [DEBUG] [Thread-131003] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:32:01.372 [DEBUG] [Thread-131003] [transport.py] [_log()] Compression: none
2025-12-31T16:32:01.372 [DEBUG] [Thread-131003] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:32:01.390 [DEBUG] [Thread-131003] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:32:01.390 [DEBUG] [Thread-131003] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:32:01.391 [DEBUG] [Thread-131003] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T16:32:01.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T16:32:01.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:32:01.393 [DEBUG] [Thread-131003] [transport.py] [_log()] userauth is OK
2025-12-31T16:32:01.393 [DEBUG] [Thread-131003] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:32:01.394 [DEBUG] [Thread-131003] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:32:01.394 [DEBUG] [Thread-131003] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T16:32:01.394 [DEBUG] [Thread-131003] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:32:01.416 [INFO] [Thread-131003] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:32:01.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:32:02.019 [DEBUG] [Thread-131003] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:32:02.019 [DEBUG] [Thread-131003] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:32:02.019 [DEBUG] [Thread-131003] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T16:32:02.060 [DEBUG] [Thread-131003] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:32:02.060 [DEBUG] [Thread-131003] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:32:02.064 [DEBUG] [Thread-131003] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:32:02.077 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:32:02.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T16:32:02.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T16:32:02.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T16:32:02.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:32:02.087 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T16:32:02.087 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:32:02.087 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:32:02.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T16:32:02.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.605002 -999.00  +24.40  30.20     19   -0.60 1 2 2 1 1   888    0 24.65 -20.08 ----- 28.0 30.2 294.8 39.2 27.5 -14.7 27.4 -14.2 27.0 -14.0 27.3 -13.4
2025-12-31T16:32:02.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T16:32:02.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T16:32:02.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.605002
2025-12-31T16:32:02.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T16:32:02.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T16:32:02.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T16:32:02.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T16:32:02.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T16:32:02.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T16:31:49', tmtdew=30.04, humidity=13.52, cloud=0.0, wind=33.58, temperature=25.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T14:31:12.173', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T16:32:02.090 [DEBUG] [Thread-131003] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:32:02.174 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T16:32:02.187 [DEBUG] [Thread-131006] [transport.py] [_log()] starting thread (client mode): 0xb957b7c0
2025-12-31T16:32:02.187 [DEBUG] [Thread-131006] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:32:02.201 [DEBUG] [Thread-131006] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T16:32:02.201 [INFO] [Thread-131006] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T16:32:02.209 [DEBUG] [Thread-131006] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:32:02.209 [DEBUG] [Thread-131006] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T16:32:02.209 [DEBUG] [Thread-131006] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:32:02.209 [DEBUG] [Thread-131006] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:32:02.209 [DEBUG] [Thread-131006] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:32:02.209 [DEBUG] [Thread-131006] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:32:02.209 [DEBUG] [Thread-131006] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:32:02.209 [DEBUG] [Thread-131006] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:32:02.209 [DEBUG] [Thread-131006] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:32:02.209 [DEBUG] [Thread-131006] [transport.py] [_log()] client lang: <none>
2025-12-31T16:32:02.209 [DEBUG] [Thread-131006] [transport.py] [_log()] server lang: <none>
2025-12-31T16:32:02.209 [DEBUG] [Thread-131006] [transport.py] [_log()] kex follows: False
2025-12-31T16:32:02.210 [DEBUG] [Thread-131006] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:32:02.210 [DEBUG] [Thread-131006] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:32:02.210 [DEBUG] [Thread-131006] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:32:02.210 [DEBUG] [Thread-131006] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:32:02.210 [DEBUG] [Thread-131006] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:32:02.210 [DEBUG] [Thread-131006] [transport.py] [_log()] Compression: none
2025-12-31T16:32:02.210 [DEBUG] [Thread-131006] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:32:02.269 [DEBUG] [Thread-131006] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:32:02.270 [DEBUG] [Thread-131006] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:32:02.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T16:32:02.271 [DEBUG] [Thread-131006] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T16:32:02.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:32:02.329 [DEBUG] [Thread-131006] [transport.py] [_log()] userauth is OK
2025-12-31T16:32:02.329 [DEBUG] [Thread-131006] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:32:02.330 [DEBUG] [Thread-131006] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:32:02.330 [DEBUG] [Thread-131006] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T16:32:02.330 [DEBUG] [Thread-131006] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:32:02.349 [INFO] [Thread-131006] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:32:02.349 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T16:32:02.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:32:03.147 [DEBUG] [Thread-131006] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:32:03.147 [DEBUG] [Thread-131006] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:32:03.195 [DEBUG] [Thread-131006] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:32:03.195 [DEBUG] [Thread-131006] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:32:03.204 [DEBUG] [Thread-131006] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:32:03.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:32:03.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T16:32:03.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T16:32:03.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:32:03.232 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:32:03.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:32:03.240 [DEBUG] [Thread-131006] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:32:06.711 [DEBUG] [Thread-131008 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:32:16.641 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:32:16.643 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:32:21.765 [DEBUG] [Thread-131009 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:32:24.572 [DEBUG] [Thread-131010 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:32:33.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T16:32:33.263 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T16:32:33.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T16:32:33.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 16, 32, 21), 30.02, 13.54, 0.0, 30.82, 24.96, 0, 0, 0, 2, 0, 0),)
2025-12-31T16:32:33.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 16:32:21
2025-12-31T16:32:34.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T16:32:34.242 [DEBUG] [Thread-131011] [transport.py] [_log()] starting thread (client mode): 0xb6bbf190
2025-12-31T16:32:34.242 [DEBUG] [Thread-131011] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:32:34.262 [DEBUG] [Thread-131011] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T16:32:34.263 [INFO] [Thread-131011] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T16:32:34.266 [DEBUG] [Thread-131011] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:32:34.266 [DEBUG] [Thread-131011] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T16:32:34.266 [DEBUG] [Thread-131011] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:32:34.266 [DEBUG] [Thread-131011] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:32:34.266 [DEBUG] [Thread-131011] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:32:34.266 [DEBUG] [Thread-131011] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:32:34.266 [DEBUG] [Thread-131011] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:32:34.266 [DEBUG] [Thread-131011] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:32:34.266 [DEBUG] [Thread-131011] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:32:34.266 [DEBUG] [Thread-131011] [transport.py] [_log()] client lang: <none>
2025-12-31T16:32:34.266 [DEBUG] [Thread-131011] [transport.py] [_log()] server lang: <none>
2025-12-31T16:32:34.266 [DEBUG] [Thread-131011] [transport.py] [_log()] kex follows: False
2025-12-31T16:32:34.266 [DEBUG] [Thread-131011] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:32:34.266 [DEBUG] [Thread-131011] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:32:34.266 [DEBUG] [Thread-131011] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:32:34.266 [DEBUG] [Thread-131011] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:32:34.266 [DEBUG] [Thread-131011] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:32:34.266 [DEBUG] [Thread-131011] [transport.py] [_log()] Compression: none
2025-12-31T16:32:34.266 [DEBUG] [Thread-131011] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:32:34.284 [DEBUG] [Thread-131011] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:32:34.284 [DEBUG] [Thread-131011] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:32:34.285 [DEBUG] [Thread-131011] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T16:32:34.285 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T16:32:34.286 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:32:34.287 [DEBUG] [Thread-131011] [transport.py] [_log()] userauth is OK
2025-12-31T16:32:34.287 [DEBUG] [Thread-131011] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:32:34.287 [DEBUG] [Thread-131011] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:32:34.287 [DEBUG] [Thread-131011] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T16:32:34.287 [DEBUG] [Thread-131011] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:32:34.312 [INFO] [Thread-131011] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:32:34.313 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:32:35.031 [DEBUG] [Thread-131011] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:32:35.031 [DEBUG] [Thread-131011] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:32:35.031 [DEBUG] [Thread-131011] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T16:32:35.073 [DEBUG] [Thread-131011] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:32:35.073 [DEBUG] [Thread-131011] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:32:35.075 [DEBUG] [Thread-131011] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:32:35.086 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:32:35.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T16:32:35.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T16:32:35.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T16:32:35.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:32:35.096 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T16:32:35.096 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:32:35.096 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:32:35.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T16:32:35.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.605349 -999.00  +24.50  28.22     19   -0.40 1 2 1 1 1   888    0 24.06 -23.67 ----- 25.6 28.2 290.9 37.8 27.5 -14.1 27.4 -14.0 27.0 -12.9 27.3 -13.3
2025-12-31T16:32:35.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T16:32:35.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T16:32:35.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.605349
2025-12-31T16:32:35.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T16:32:35.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T16:32:35.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T16:32:35.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T16:32:35.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T16:32:35.098 [DEBUG] [Thread-131011] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:32:35.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T16:32:21', tmtdew=30.02, humidity=13.54, cloud=0.0, wind=30.82, temperature=24.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T14:31:42.154', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T16:32:35.182 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T16:32:35.196 [DEBUG] [Thread-131014] [transport.py] [_log()] starting thread (client mode): 0xb6bbd870
2025-12-31T16:32:35.196 [DEBUG] [Thread-131014] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:32:35.210 [DEBUG] [Thread-131014] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T16:32:35.210 [INFO] [Thread-131014] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T16:32:35.218 [DEBUG] [Thread-131014] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:32:35.218 [DEBUG] [Thread-131014] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T16:32:35.218 [DEBUG] [Thread-131014] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:32:35.218 [DEBUG] [Thread-131014] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:32:35.218 [DEBUG] [Thread-131014] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:32:35.218 [DEBUG] [Thread-131014] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:32:35.219 [DEBUG] [Thread-131014] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:32:35.219 [DEBUG] [Thread-131014] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:32:35.219 [DEBUG] [Thread-131014] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:32:35.219 [DEBUG] [Thread-131014] [transport.py] [_log()] client lang: <none>
2025-12-31T16:32:35.219 [DEBUG] [Thread-131014] [transport.py] [_log()] server lang: <none>
2025-12-31T16:32:35.219 [DEBUG] [Thread-131014] [transport.py] [_log()] kex follows: False
2025-12-31T16:32:35.219 [DEBUG] [Thread-131014] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:32:35.219 [DEBUG] [Thread-131014] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:32:35.219 [DEBUG] [Thread-131014] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:32:35.219 [DEBUG] [Thread-131014] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:32:35.219 [DEBUG] [Thread-131014] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:32:35.220 [DEBUG] [Thread-131014] [transport.py] [_log()] Compression: none
2025-12-31T16:32:35.220 [DEBUG] [Thread-131014] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:32:35.276 [DEBUG] [Thread-131014] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:32:35.276 [DEBUG] [Thread-131014] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:32:35.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T16:32:35.277 [DEBUG] [Thread-131014] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T16:32:35.278 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:32:35.336 [DEBUG] [Thread-131014] [transport.py] [_log()] userauth is OK
2025-12-31T16:32:35.336 [DEBUG] [Thread-131014] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:32:35.336 [DEBUG] [Thread-131014] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:32:35.336 [DEBUG] [Thread-131014] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T16:32:35.336 [DEBUG] [Thread-131014] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:32:35.354 [INFO] [Thread-131014] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:32:35.354 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T16:32:35.355 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:32:36.146 [DEBUG] [Thread-131014] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:32:36.147 [DEBUG] [Thread-131014] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:32:36.194 [DEBUG] [Thread-131014] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:32:36.194 [DEBUG] [Thread-131014] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:32:36.203 [DEBUG] [Thread-131014] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:32:36.211 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:32:36.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-12-31T16:32:36.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T16:32:36.229 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:32:36.229 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:32:36.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:32:36.237 [DEBUG] [Thread-131014] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:32:36.799 [DEBUG] [Thread-131016 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:32:51.852 [DEBUG] [Thread-131017 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:33:06.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T16:33:06.238 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T16:33:06.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T16:33:06.882 [DEBUG] [Thread-131018 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:33:06.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 16, 32, 53), 29.03, 14.28, 0.0, 37.76, 24.78, 0, 0, 0, 2, 0, 0),)
2025-12-31T16:33:06.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 16:32:53
2025-12-31T16:33:07.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T16:33:07.208 [DEBUG] [Thread-131019] [transport.py] [_log()] starting thread (client mode): 0xb95f0f40
2025-12-31T16:33:07.208 [DEBUG] [Thread-131019] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:33:07.228 [DEBUG] [Thread-131019] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T16:33:07.228 [INFO] [Thread-131019] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T16:33:07.231 [DEBUG] [Thread-131019] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:33:07.232 [DEBUG] [Thread-131019] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T16:33:07.232 [DEBUG] [Thread-131019] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:33:07.232 [DEBUG] [Thread-131019] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:33:07.232 [DEBUG] [Thread-131019] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:33:07.232 [DEBUG] [Thread-131019] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:33:07.232 [DEBUG] [Thread-131019] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:33:07.232 [DEBUG] [Thread-131019] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:33:07.232 [DEBUG] [Thread-131019] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:33:07.232 [DEBUG] [Thread-131019] [transport.py] [_log()] client lang: <none>
2025-12-31T16:33:07.232 [DEBUG] [Thread-131019] [transport.py] [_log()] server lang: <none>
2025-12-31T16:33:07.232 [DEBUG] [Thread-131019] [transport.py] [_log()] kex follows: False
2025-12-31T16:33:07.232 [DEBUG] [Thread-131019] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:33:07.232 [DEBUG] [Thread-131019] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:33:07.232 [DEBUG] [Thread-131019] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:33:07.233 [DEBUG] [Thread-131019] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:33:07.233 [DEBUG] [Thread-131019] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:33:07.233 [DEBUG] [Thread-131019] [transport.py] [_log()] Compression: none
2025-12-31T16:33:07.233 [DEBUG] [Thread-131019] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:33:07.241 [DEBUG] [Thread-131019] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:33:07.242 [DEBUG] [Thread-131019] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:33:07.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T16:33:07.243 [DEBUG] [Thread-131019] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T16:33:07.243 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:33:07.244 [DEBUG] [Thread-131019] [transport.py] [_log()] userauth is OK
2025-12-31T16:33:07.244 [DEBUG] [Thread-131019] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:33:07.245 [DEBUG] [Thread-131019] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:33:07.245 [DEBUG] [Thread-131019] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T16:33:07.245 [DEBUG] [Thread-131019] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:33:07.281 [INFO] [Thread-131019] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:33:07.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:33:07.958 [DEBUG] [Thread-131019] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:33:07.959 [DEBUG] [Thread-131019] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:33:07.959 [DEBUG] [Thread-131019] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T16:33:08.000 [DEBUG] [Thread-131019] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:33:08.000 [DEBUG] [Thread-131019] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:33:08.004 [DEBUG] [Thread-131019] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:33:08.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:33:08.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T16:33:08.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T16:33:08.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T16:33:08.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:33:08.028 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T16:33:08.028 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:33:08.028 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:33:08.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T16:33:08.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.605697 -999.00  +24.60  37.11     19   +0.10 1 2 2 1 1   888    0 24.28 -23.68 ----- 30.8 37.1 298.2 41.7 27.5 -14.0 27.4 -14.2 27.1 -13.4 27.3 -13.6
2025-12-31T16:33:08.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T16:33:08.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T16:33:08.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.605697
2025-12-31T16:33:08.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T16:33:08.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T16:33:08.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T16:33:08.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T16:33:08.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T16:33:08.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T16:32:53', tmtdew=29.03, humidity=14.28, cloud=0.0, wind=37.76, temperature=24.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T14:32:12.221', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T16:33:08.031 [DEBUG] [Thread-131019] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:33:08.115 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T16:33:08.128 [DEBUG] [Thread-131022] [transport.py] [_log()] starting thread (client mode): 0xb6bbaec0
2025-12-31T16:33:08.128 [DEBUG] [Thread-131022] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:33:08.143 [DEBUG] [Thread-131022] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T16:33:08.143 [INFO] [Thread-131022] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T16:33:08.151 [DEBUG] [Thread-131022] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:33:08.151 [DEBUG] [Thread-131022] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T16:33:08.151 [DEBUG] [Thread-131022] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:33:08.151 [DEBUG] [Thread-131022] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:33:08.151 [DEBUG] [Thread-131022] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:33:08.151 [DEBUG] [Thread-131022] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:33:08.152 [DEBUG] [Thread-131022] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:33:08.152 [DEBUG] [Thread-131022] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:33:08.152 [DEBUG] [Thread-131022] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:33:08.152 [DEBUG] [Thread-131022] [transport.py] [_log()] client lang: <none>
2025-12-31T16:33:08.152 [DEBUG] [Thread-131022] [transport.py] [_log()] server lang: <none>
2025-12-31T16:33:08.152 [DEBUG] [Thread-131022] [transport.py] [_log()] kex follows: False
2025-12-31T16:33:08.152 [DEBUG] [Thread-131022] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:33:08.152 [DEBUG] [Thread-131022] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:33:08.152 [DEBUG] [Thread-131022] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:33:08.153 [DEBUG] [Thread-131022] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:33:08.153 [DEBUG] [Thread-131022] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:33:08.153 [DEBUG] [Thread-131022] [transport.py] [_log()] Compression: none
2025-12-31T16:33:08.153 [DEBUG] [Thread-131022] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:33:08.213 [DEBUG] [Thread-131022] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:33:08.213 [DEBUG] [Thread-131022] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:33:08.214 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T16:33:08.214 [DEBUG] [Thread-131022] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T16:33:08.215 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:33:08.271 [DEBUG] [Thread-131022] [transport.py] [_log()] userauth is OK
2025-12-31T16:33:08.272 [DEBUG] [Thread-131022] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:33:08.272 [DEBUG] [Thread-131022] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:33:08.272 [DEBUG] [Thread-131022] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T16:33:08.272 [DEBUG] [Thread-131022] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:33:08.291 [INFO] [Thread-131022] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:33:08.291 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T16:33:08.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:33:09.123 [DEBUG] [Thread-131022] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:33:09.124 [DEBUG] [Thread-131022] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:33:09.172 [DEBUG] [Thread-131022] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:33:09.172 [DEBUG] [Thread-131022] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:33:09.181 [DEBUG] [Thread-131022] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:33:09.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:33:09.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T16:33:09.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T16:33:09.209 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:33:09.209 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:33:09.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:33:09.217 [DEBUG] [Thread-131022] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:33:16.783 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:33:16.784 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:33:21.918 [DEBUG] [Thread-131024 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:33:24.638 [DEBUG] [Thread-131025 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:33:36.975 [DEBUG] [Thread-131026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:33:39.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T16:33:39.240 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T16:33:39.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T16:33:39.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 16, 33, 25), 29.0, 14.33, 0.0, 36.91, 24.84, 0, 0, 0, 2, 0, 0),)
2025-12-31T16:33:39.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 16:33:25
2025-12-31T16:33:40.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T16:33:40.196 [DEBUG] [Thread-131027] [transport.py] [_log()] starting thread (client mode): 0xb95d5840
2025-12-31T16:33:40.196 [DEBUG] [Thread-131027] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:33:40.218 [DEBUG] [Thread-131027] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T16:33:40.218 [INFO] [Thread-131027] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T16:33:40.221 [DEBUG] [Thread-131027] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:33:40.221 [DEBUG] [Thread-131027] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T16:33:40.221 [DEBUG] [Thread-131027] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:33:40.221 [DEBUG] [Thread-131027] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:33:40.221 [DEBUG] [Thread-131027] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:33:40.221 [DEBUG] [Thread-131027] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:33:40.221 [DEBUG] [Thread-131027] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:33:40.221 [DEBUG] [Thread-131027] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:33:40.221 [DEBUG] [Thread-131027] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:33:40.221 [DEBUG] [Thread-131027] [transport.py] [_log()] client lang: <none>
2025-12-31T16:33:40.221 [DEBUG] [Thread-131027] [transport.py] [_log()] server lang: <none>
2025-12-31T16:33:40.221 [DEBUG] [Thread-131027] [transport.py] [_log()] kex follows: False
2025-12-31T16:33:40.221 [DEBUG] [Thread-131027] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:33:40.221 [DEBUG] [Thread-131027] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:33:40.221 [DEBUG] [Thread-131027] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:33:40.221 [DEBUG] [Thread-131027] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:33:40.222 [DEBUG] [Thread-131027] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:33:40.222 [DEBUG] [Thread-131027] [transport.py] [_log()] Compression: none
2025-12-31T16:33:40.222 [DEBUG] [Thread-131027] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:33:40.231 [DEBUG] [Thread-131027] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:33:40.231 [DEBUG] [Thread-131027] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:33:40.231 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T16:33:40.232 [DEBUG] [Thread-131027] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T16:33:40.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:33:40.233 [DEBUG] [Thread-131027] [transport.py] [_log()] userauth is OK
2025-12-31T16:33:40.233 [DEBUG] [Thread-131027] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:33:40.233 [DEBUG] [Thread-131027] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:33:40.233 [DEBUG] [Thread-131027] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T16:33:40.233 [DEBUG] [Thread-131027] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:33:40.248 [INFO] [Thread-131027] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:33:40.248 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:33:40.980 [DEBUG] [Thread-131027] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:33:40.980 [DEBUG] [Thread-131027] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:33:40.980 [DEBUG] [Thread-131027] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T16:33:41.021 [DEBUG] [Thread-131027] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:33:41.021 [DEBUG] [Thread-131027] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:33:41.025 [DEBUG] [Thread-131027] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:33:41.038 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:33:41.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T16:33:41.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T16:33:41.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T16:33:41.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:33:41.049 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T16:33:41.050 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:33:41.050 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:33:41.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T16:33:41.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.606044 -999.00  +24.50  23.41     20   +0.20 1 2 1 1 1   888    0 24.75 -27.30 ----- 31.1 23.4 293.2 44.4 27.5 -14.5 27.4 -14.1 26.9 -14.0 27.3 -12.9
2025-12-31T16:33:41.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T16:33:41.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T16:33:41.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.606044
2025-12-31T16:33:41.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T16:33:41.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T16:33:41.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T16:33:41.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T16:33:41.052 [DEBUG] [Thread-131027] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:33:41.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T16:33:41.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T16:33:25', tmtdew=29.0, humidity=14.33, cloud=0.0, wind=36.91, temperature=24.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T14:32:42.202', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T16:33:41.133 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T16:33:41.145 [DEBUG] [Thread-131030] [transport.py] [_log()] starting thread (client mode): 0xb6bbb010
2025-12-31T16:33:41.145 [DEBUG] [Thread-131030] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:33:41.166 [DEBUG] [Thread-131030] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T16:33:41.166 [INFO] [Thread-131030] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T16:33:41.173 [DEBUG] [Thread-131030] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:33:41.174 [DEBUG] [Thread-131030] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T16:33:41.174 [DEBUG] [Thread-131030] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:33:41.174 [DEBUG] [Thread-131030] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:33:41.174 [DEBUG] [Thread-131030] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:33:41.174 [DEBUG] [Thread-131030] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:33:41.174 [DEBUG] [Thread-131030] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:33:41.174 [DEBUG] [Thread-131030] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:33:41.174 [DEBUG] [Thread-131030] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:33:41.174 [DEBUG] [Thread-131030] [transport.py] [_log()] client lang: <none>
2025-12-31T16:33:41.174 [DEBUG] [Thread-131030] [transport.py] [_log()] server lang: <none>
2025-12-31T16:33:41.174 [DEBUG] [Thread-131030] [transport.py] [_log()] kex follows: False
2025-12-31T16:33:41.174 [DEBUG] [Thread-131030] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:33:41.174 [DEBUG] [Thread-131030] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:33:41.174 [DEBUG] [Thread-131030] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:33:41.175 [DEBUG] [Thread-131030] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:33:41.175 [DEBUG] [Thread-131030] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:33:41.175 [DEBUG] [Thread-131030] [transport.py] [_log()] Compression: none
2025-12-31T16:33:41.175 [DEBUG] [Thread-131030] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:33:41.231 [DEBUG] [Thread-131030] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:33:41.232 [DEBUG] [Thread-131030] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:33:41.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T16:33:41.233 [DEBUG] [Thread-131030] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T16:33:41.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:33:41.287 [DEBUG] [Thread-131030] [transport.py] [_log()] userauth is OK
2025-12-31T16:33:41.288 [DEBUG] [Thread-131030] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:33:41.288 [DEBUG] [Thread-131030] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:33:41.288 [DEBUG] [Thread-131030] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T16:33:41.288 [DEBUG] [Thread-131030] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:33:41.307 [INFO] [Thread-131030] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:33:41.307 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T16:33:41.308 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:33:42.151 [DEBUG] [Thread-131030] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:33:42.151 [DEBUG] [Thread-131030] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:33:42.199 [DEBUG] [Thread-131030] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:33:42.199 [DEBUG] [Thread-131030] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:33:42.208 [DEBUG] [Thread-131030] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:33:42.217 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:33:42.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-12-31T16:33:42.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T16:33:42.236 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:33:42.236 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:33:42.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:33:42.245 [DEBUG] [Thread-131030] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:33:52.014 [DEBUG] [Thread-131032 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:34:07.063 [DEBUG] [Thread-131033 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:34:12.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T16:34:12.267 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T16:34:12.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T16:34:12.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 16, 33, 57), 28.42, 15.17, 0.0, 34.2, 24.68, 0, 0, 0, 2, 0, 0),)
2025-12-31T16:34:12.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 16:33:57
2025-12-31T16:34:13.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T16:34:13.257 [DEBUG] [Thread-131034] [transport.py] [_log()] starting thread (client mode): 0xb95780d0
2025-12-31T16:34:13.257 [DEBUG] [Thread-131034] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:34:13.277 [DEBUG] [Thread-131034] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T16:34:13.278 [INFO] [Thread-131034] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T16:34:13.281 [DEBUG] [Thread-131034] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:34:13.281 [DEBUG] [Thread-131034] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T16:34:13.281 [DEBUG] [Thread-131034] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:34:13.281 [DEBUG] [Thread-131034] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:34:13.281 [DEBUG] [Thread-131034] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:34:13.281 [DEBUG] [Thread-131034] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:34:13.281 [DEBUG] [Thread-131034] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:34:13.281 [DEBUG] [Thread-131034] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:34:13.281 [DEBUG] [Thread-131034] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:34:13.281 [DEBUG] [Thread-131034] [transport.py] [_log()] client lang: <none>
2025-12-31T16:34:13.281 [DEBUG] [Thread-131034] [transport.py] [_log()] server lang: <none>
2025-12-31T16:34:13.281 [DEBUG] [Thread-131034] [transport.py] [_log()] kex follows: False
2025-12-31T16:34:13.281 [DEBUG] [Thread-131034] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:34:13.281 [DEBUG] [Thread-131034] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:34:13.281 [DEBUG] [Thread-131034] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:34:13.281 [DEBUG] [Thread-131034] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:34:13.281 [DEBUG] [Thread-131034] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:34:13.281 [DEBUG] [Thread-131034] [transport.py] [_log()] Compression: none
2025-12-31T16:34:13.281 [DEBUG] [Thread-131034] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:34:13.300 [DEBUG] [Thread-131034] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:34:13.301 [DEBUG] [Thread-131034] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:34:13.301 [DEBUG] [Thread-131034] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T16:34:13.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T16:34:13.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:34:13.303 [DEBUG] [Thread-131034] [transport.py] [_log()] userauth is OK
2025-12-31T16:34:13.303 [DEBUG] [Thread-131034] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:34:13.303 [DEBUG] [Thread-131034] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:34:13.303 [DEBUG] [Thread-131034] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T16:34:13.303 [DEBUG] [Thread-131034] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:34:13.321 [INFO] [Thread-131034] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:34:13.322 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:34:13.995 [DEBUG] [Thread-131034] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:34:13.996 [DEBUG] [Thread-131034] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:34:13.996 [DEBUG] [Thread-131034] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T16:34:14.037 [DEBUG] [Thread-131034] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:34:14.037 [DEBUG] [Thread-131034] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:34:14.039 [DEBUG] [Thread-131034] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:34:14.053 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:34:14.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T16:34:14.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T16:34:14.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T16:34:14.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:34:14.060 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T16:34:14.060 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:34:14.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:34:14.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T16:34:14.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.606391 -999.00  +24.40  37.40     20   +0.40 1 2 2 1 1   888    0 24.34 -32.86 ----- 33.0 37.4 292.6 40.5 27.4 -14.6 27.4 -13.9 27.1 -12.6 27.3 -13.2
2025-12-31T16:34:14.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T16:34:14.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T16:34:14.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.606391
2025-12-31T16:34:14.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T16:34:14.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T16:34:14.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T16:34:14.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T16:34:14.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T16:34:14.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T16:33:57', tmtdew=28.42, humidity=15.17, cloud=0.0, wind=34.2, temperature=24.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T14:33:12.182', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T16:34:14.063 [DEBUG] [Thread-131034] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:34:14.146 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T16:34:14.158 [DEBUG] [Thread-131037] [transport.py] [_log()] starting thread (client mode): 0xb95591b0
2025-12-31T16:34:14.158 [DEBUG] [Thread-131037] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:34:14.172 [DEBUG] [Thread-131037] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T16:34:14.172 [INFO] [Thread-131037] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T16:34:14.180 [DEBUG] [Thread-131037] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:34:14.180 [DEBUG] [Thread-131037] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T16:34:14.180 [DEBUG] [Thread-131037] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:34:14.180 [DEBUG] [Thread-131037] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:34:14.180 [DEBUG] [Thread-131037] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:34:14.180 [DEBUG] [Thread-131037] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:34:14.180 [DEBUG] [Thread-131037] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:34:14.180 [DEBUG] [Thread-131037] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:34:14.180 [DEBUG] [Thread-131037] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:34:14.180 [DEBUG] [Thread-131037] [transport.py] [_log()] client lang: <none>
2025-12-31T16:34:14.180 [DEBUG] [Thread-131037] [transport.py] [_log()] server lang: <none>
2025-12-31T16:34:14.180 [DEBUG] [Thread-131037] [transport.py] [_log()] kex follows: False
2025-12-31T16:34:14.180 [DEBUG] [Thread-131037] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:34:14.181 [DEBUG] [Thread-131037] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:34:14.181 [DEBUG] [Thread-131037] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:34:14.181 [DEBUG] [Thread-131037] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:34:14.181 [DEBUG] [Thread-131037] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:34:14.181 [DEBUG] [Thread-131037] [transport.py] [_log()] Compression: none
2025-12-31T16:34:14.181 [DEBUG] [Thread-131037] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:34:14.238 [DEBUG] [Thread-131037] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:34:14.238 [DEBUG] [Thread-131037] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:34:14.238 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T16:34:14.239 [DEBUG] [Thread-131037] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T16:34:14.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:34:14.294 [DEBUG] [Thread-131037] [transport.py] [_log()] userauth is OK
2025-12-31T16:34:14.294 [DEBUG] [Thread-131037] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:34:14.294 [DEBUG] [Thread-131037] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:34:14.294 [DEBUG] [Thread-131037] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T16:34:14.295 [DEBUG] [Thread-131037] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:34:14.313 [INFO] [Thread-131037] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:34:14.314 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T16:34:14.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:34:15.138 [DEBUG] [Thread-131037] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:34:15.138 [DEBUG] [Thread-131037] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:34:15.185 [DEBUG] [Thread-131037] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:34:15.185 [DEBUG] [Thread-131037] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:34:15.194 [DEBUG] [Thread-131037] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:34:15.202 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:34:15.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T16:34:15.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T16:34:15.219 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:34:15.219 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:34:15.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:34:15.227 [DEBUG] [Thread-131037] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:34:16.924 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:34:16.926 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:34:22.094 [DEBUG] [Thread-131039 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:34:24.692 [DEBUG] [Thread-131040 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:34:37.145 [DEBUG] [Thread-131041 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:34:45.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T16:34:45.249 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T16:34:45.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T16:34:45.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 16, 34, 29), 28.31, 15.26, 0.0, 34.99, 24.58, 0, 0, 0, 2, 0, 0),)
2025-12-31T16:34:45.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 16:34:29
2025-12-31T16:34:46.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T16:34:46.286 [DEBUG] [Thread-131042] [transport.py] [_log()] starting thread (client mode): 0xb6bbba90
2025-12-31T16:34:46.287 [DEBUG] [Thread-131042] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:34:46.307 [DEBUG] [Thread-131042] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T16:34:46.307 [INFO] [Thread-131042] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T16:34:46.311 [DEBUG] [Thread-131042] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:34:46.311 [DEBUG] [Thread-131042] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T16:34:46.311 [DEBUG] [Thread-131042] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:34:46.311 [DEBUG] [Thread-131042] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:34:46.311 [DEBUG] [Thread-131042] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:34:46.311 [DEBUG] [Thread-131042] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:34:46.311 [DEBUG] [Thread-131042] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:34:46.311 [DEBUG] [Thread-131042] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:34:46.311 [DEBUG] [Thread-131042] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:34:46.311 [DEBUG] [Thread-131042] [transport.py] [_log()] client lang: <none>
2025-12-31T16:34:46.311 [DEBUG] [Thread-131042] [transport.py] [_log()] server lang: <none>
2025-12-31T16:34:46.311 [DEBUG] [Thread-131042] [transport.py] [_log()] kex follows: False
2025-12-31T16:34:46.311 [DEBUG] [Thread-131042] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:34:46.311 [DEBUG] [Thread-131042] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:34:46.311 [DEBUG] [Thread-131042] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:34:46.311 [DEBUG] [Thread-131042] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:34:46.311 [DEBUG] [Thread-131042] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:34:46.311 [DEBUG] [Thread-131042] [transport.py] [_log()] Compression: none
2025-12-31T16:34:46.311 [DEBUG] [Thread-131042] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:34:46.328 [DEBUG] [Thread-131042] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:34:46.328 [DEBUG] [Thread-131042] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:34:46.328 [DEBUG] [Thread-131042] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T16:34:46.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T16:34:46.329 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:34:46.329 [DEBUG] [Thread-131042] [transport.py] [_log()] userauth is OK
2025-12-31T16:34:46.329 [DEBUG] [Thread-131042] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:34:46.329 [DEBUG] [Thread-131042] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:34:46.329 [DEBUG] [Thread-131042] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T16:34:46.329 [DEBUG] [Thread-131042] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:34:46.338 [INFO] [Thread-131042] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:34:46.338 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:34:47.081 [DEBUG] [Thread-131042] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:34:47.081 [DEBUG] [Thread-131042] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:34:47.081 [DEBUG] [Thread-131042] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T16:34:47.122 [DEBUG] [Thread-131042] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:34:47.122 [DEBUG] [Thread-131042] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:34:47.125 [DEBUG] [Thread-131042] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:34:47.137 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:34:47.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T16:34:47.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T16:34:47.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T16:34:47.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:34:47.143 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T16:34:47.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:34:47.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:34:47.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T16:34:47.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.607085 -999.00  +24.60  26.81     20   +0.40 1 2 1 1 1   888    0 23.62 -49.48 ----- 27.6 26.8 289.8 31.9 27.5 -13.9 27.5 -13.8 26.9 -13.3 27.4 -12.8
2025-12-31T16:34:47.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T16:34:47.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T16:34:47.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.607085
2025-12-31T16:34:47.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T16:34:47.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T16:34:47.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T16:34:47.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T16:34:47.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T16:34:47.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T16:34:29', tmtdew=28.31, humidity=15.26, cloud=0.0, wind=34.99, temperature=24.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T14:34:12.144', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T16:34:47.144 [DEBUG] [Thread-131042] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:34:47.218 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T16:34:47.228 [DEBUG] [Thread-131045] [transport.py] [_log()] starting thread (client mode): 0xb6bbcf70
2025-12-31T16:34:47.228 [DEBUG] [Thread-131045] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:34:47.243 [DEBUG] [Thread-131045] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T16:34:47.243 [INFO] [Thread-131045] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T16:34:47.251 [DEBUG] [Thread-131045] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:34:47.251 [DEBUG] [Thread-131045] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T16:34:47.251 [DEBUG] [Thread-131045] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:34:47.251 [DEBUG] [Thread-131045] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:34:47.251 [DEBUG] [Thread-131045] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:34:47.251 [DEBUG] [Thread-131045] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:34:47.251 [DEBUG] [Thread-131045] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:34:47.251 [DEBUG] [Thread-131045] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:34:47.251 [DEBUG] [Thread-131045] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:34:47.251 [DEBUG] [Thread-131045] [transport.py] [_log()] client lang: <none>
2025-12-31T16:34:47.251 [DEBUG] [Thread-131045] [transport.py] [_log()] server lang: <none>
2025-12-31T16:34:47.251 [DEBUG] [Thread-131045] [transport.py] [_log()] kex follows: False
2025-12-31T16:34:47.251 [DEBUG] [Thread-131045] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:34:47.251 [DEBUG] [Thread-131045] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:34:47.251 [DEBUG] [Thread-131045] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:34:47.251 [DEBUG] [Thread-131045] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:34:47.251 [DEBUG] [Thread-131045] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:34:47.251 [DEBUG] [Thread-131045] [transport.py] [_log()] Compression: none
2025-12-31T16:34:47.251 [DEBUG] [Thread-131045] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:34:47.308 [DEBUG] [Thread-131045] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:34:47.308 [DEBUG] [Thread-131045] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:34:47.309 [DEBUG] [Thread-131045] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T16:34:47.309 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T16:34:47.309 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:34:47.367 [DEBUG] [Thread-131045] [transport.py] [_log()] userauth is OK
2025-12-31T16:34:47.367 [DEBUG] [Thread-131045] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:34:47.367 [DEBUG] [Thread-131045] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:34:47.367 [DEBUG] [Thread-131045] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T16:34:47.367 [DEBUG] [Thread-131045] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:34:47.381 [INFO] [Thread-131045] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:34:47.381 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T16:34:47.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:34:48.216 [DEBUG] [Thread-131045] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:34:48.216 [DEBUG] [Thread-131045] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:34:48.264 [DEBUG] [Thread-131045] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:34:48.264 [DEBUG] [Thread-131045] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:34:48.272 [DEBUG] [Thread-131045] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:34:48.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:34: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-12-31T16:34:48.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T16:34:48.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:34:48.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:34:48.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:34:48.303 [DEBUG] [Thread-131045] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:34:52.179 [DEBUG] [Thread-131047 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:35:07.230 [DEBUG] [Thread-131048 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:35:17.064 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:35:17.066 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:35:18.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T16:35:18.326 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T16:35:18.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T16:35:19.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 16, 35, 1), 28.33, 15.25, 0.0, 34.67, 24.61, 0, 0, 0, 2, 0, 0),)
2025-12-31T16:35:19.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 16:35:01
2025-12-31T16:35:19.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T16:35:19.316 [DEBUG] [Thread-131049] [transport.py] [_log()] starting thread (client mode): 0xb6bb8c10
2025-12-31T16:35:19.316 [DEBUG] [Thread-131049] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:35:19.335 [DEBUG] [Thread-131049] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T16:35:19.336 [INFO] [Thread-131049] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T16:35:19.339 [DEBUG] [Thread-131049] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:35:19.339 [DEBUG] [Thread-131049] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T16:35:19.339 [DEBUG] [Thread-131049] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:35:19.339 [DEBUG] [Thread-131049] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:35:19.339 [DEBUG] [Thread-131049] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:35:19.339 [DEBUG] [Thread-131049] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:35:19.339 [DEBUG] [Thread-131049] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:35:19.339 [DEBUG] [Thread-131049] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:35:19.339 [DEBUG] [Thread-131049] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:35:19.339 [DEBUG] [Thread-131049] [transport.py] [_log()] client lang: <none>
2025-12-31T16:35:19.340 [DEBUG] [Thread-131049] [transport.py] [_log()] server lang: <none>
2025-12-31T16:35:19.340 [DEBUG] [Thread-131049] [transport.py] [_log()] kex follows: False
2025-12-31T16:35:19.340 [DEBUG] [Thread-131049] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:35:19.340 [DEBUG] [Thread-131049] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:35:19.340 [DEBUG] [Thread-131049] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:35:19.340 [DEBUG] [Thread-131049] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:35:19.340 [DEBUG] [Thread-131049] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:35:19.340 [DEBUG] [Thread-131049] [transport.py] [_log()] Compression: none
2025-12-31T16:35:19.340 [DEBUG] [Thread-131049] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:35:19.359 [DEBUG] [Thread-131049] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:35:19.360 [DEBUG] [Thread-131049] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:35:19.361 [DEBUG] [Thread-131049] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T16:35:19.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T16:35:19.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:35:19.401 [DEBUG] [Thread-131049] [transport.py] [_log()] userauth is OK
2025-12-31T16:35:19.402 [DEBUG] [Thread-131049] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:35:19.402 [DEBUG] [Thread-131049] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:35:19.402 [DEBUG] [Thread-131049] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T16:35:19.402 [DEBUG] [Thread-131049] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:35:19.447 [INFO] [Thread-131049] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:35:19.448 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:35:22.228 [DEBUG] [Thread-131049] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:35:22.228 [DEBUG] [Thread-131049] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:35:22.229 [DEBUG] [Thread-131049] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T16:35:22.267 [DEBUG] [Thread-131051 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:35:22.269 [DEBUG] [Thread-131049] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:35:22.269 [DEBUG] [Thread-131049] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:35:22.272 [DEBUG] [Thread-131049] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:35:22.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:35:22.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T16:35:22.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T16:35:22.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T16:35:22.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:35:22.380 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T16:35:22.380 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:35:22.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:35:22.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T16:35:22.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.607433 -999.00  +24.40  37.77     21   +0.60 1 2 2 1 1   888    0 23.26 -57.74 ----- 34.6 37.8 299.4 46.3 27.5 -14.7 27.5 -14.4 27.2 -12.8 27.4 -13.3
2025-12-31T16:35:22.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T16:35:22.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T16:35:22.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.607433
2025-12-31T16:35:22.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T16:35:22.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T16:35:22.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T16:35:22.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T16:35:22.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T16:35:22.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T16:35:01', tmtdew=28.33, humidity=15.25, cloud=0.0, wind=34.67, temperature=24.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T14:34:42.211', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T16:35:22.383 [DEBUG] [Thread-131049] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:35:22.480 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T16:35:22.493 [DEBUG] [Thread-131053] [transport.py] [_log()] starting thread (client mode): 0xb6bbb6d0
2025-12-31T16:35:22.493 [DEBUG] [Thread-131053] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:35:22.506 [DEBUG] [Thread-131053] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T16:35:22.507 [INFO] [Thread-131053] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T16:35:22.514 [DEBUG] [Thread-131053] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:35:22.514 [DEBUG] [Thread-131053] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T16:35:22.515 [DEBUG] [Thread-131053] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:35:22.515 [DEBUG] [Thread-131053] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:35:22.515 [DEBUG] [Thread-131053] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:35:22.515 [DEBUG] [Thread-131053] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:35:22.515 [DEBUG] [Thread-131053] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:35:22.515 [DEBUG] [Thread-131053] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:35:22.515 [DEBUG] [Thread-131053] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:35:22.515 [DEBUG] [Thread-131053] [transport.py] [_log()] client lang: <none>
2025-12-31T16:35:22.516 [DEBUG] [Thread-131053] [transport.py] [_log()] server lang: <none>
2025-12-31T16:35:22.516 [DEBUG] [Thread-131053] [transport.py] [_log()] kex follows: False
2025-12-31T16:35:22.516 [DEBUG] [Thread-131053] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:35:22.516 [DEBUG] [Thread-131053] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:35:22.516 [DEBUG] [Thread-131053] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:35:22.516 [DEBUG] [Thread-131053] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:35:22.516 [DEBUG] [Thread-131053] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:35:22.516 [DEBUG] [Thread-131053] [transport.py] [_log()] Compression: none
2025-12-31T16:35:22.517 [DEBUG] [Thread-131053] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:35:22.580 [DEBUG] [Thread-131053] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:35:22.580 [DEBUG] [Thread-131053] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:35:22.581 [DEBUG] [Thread-131053] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T16:35:22.581 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T16:35:22.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:35:22.638 [DEBUG] [Thread-131053] [transport.py] [_log()] userauth is OK
2025-12-31T16:35:22.638 [DEBUG] [Thread-131053] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:35:22.638 [DEBUG] [Thread-131053] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:35:22.638 [DEBUG] [Thread-131053] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T16:35:22.638 [DEBUG] [Thread-131053] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:35:22.657 [INFO] [Thread-131053] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:35:22.658 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T16:35:22.658 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:35:23.506 [DEBUG] [Thread-131053] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:35:23.506 [DEBUG] [Thread-131053] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:35:23.555 [DEBUG] [Thread-131053] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:35:23.555 [DEBUG] [Thread-131053] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:35:23.563 [DEBUG] [Thread-131053] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:35:23.571 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:35:23.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-12-31T16:35:23.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T16:35:23.596 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:35:23.596 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:35:23.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:35:23.604 [DEBUG] [Thread-131053] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:35:24.749 [DEBUG] [Thread-131055 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:35:37.298 [DEBUG] [Thread-131056 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:35:52.359 [DEBUG] [Thread-131057 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:35:53.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T16:35:53.627 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T16:35:53.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T16:35:54.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 16, 35, 33), 29.0, 14.46, 0.0, 35.11, 25.49, 0, 0, 0, 2, 0, 0),)
2025-12-31T16:35:54.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 16:35:33
2025-12-31T16:35:54.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T16:35:54.618 [DEBUG] [Thread-131058] [transport.py] [_log()] starting thread (client mode): 0xb95917e0
2025-12-31T16:35:54.618 [DEBUG] [Thread-131058] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:35:54.640 [DEBUG] [Thread-131058] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T16:35:54.640 [INFO] [Thread-131058] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T16:35:54.644 [DEBUG] [Thread-131058] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:35:54.644 [DEBUG] [Thread-131058] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T16:35:54.644 [DEBUG] [Thread-131058] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:35:54.644 [DEBUG] [Thread-131058] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:35:54.644 [DEBUG] [Thread-131058] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:35:54.644 [DEBUG] [Thread-131058] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:35:54.644 [DEBUG] [Thread-131058] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:35:54.645 [DEBUG] [Thread-131058] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:35:54.645 [DEBUG] [Thread-131058] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:35:54.645 [DEBUG] [Thread-131058] [transport.py] [_log()] client lang: <none>
2025-12-31T16:35:54.645 [DEBUG] [Thread-131058] [transport.py] [_log()] server lang: <none>
2025-12-31T16:35:54.645 [DEBUG] [Thread-131058] [transport.py] [_log()] kex follows: False
2025-12-31T16:35:54.645 [DEBUG] [Thread-131058] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:35:54.645 [DEBUG] [Thread-131058] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:35:54.645 [DEBUG] [Thread-131058] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:35:54.645 [DEBUG] [Thread-131058] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:35:54.645 [DEBUG] [Thread-131058] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:35:54.646 [DEBUG] [Thread-131058] [transport.py] [_log()] Compression: none
2025-12-31T16:35:54.646 [DEBUG] [Thread-131058] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:35:54.664 [DEBUG] [Thread-131058] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:35:54.665 [DEBUG] [Thread-131058] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:35:54.666 [DEBUG] [Thread-131058] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T16:35:54.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T16:35:54.667 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:35:54.668 [DEBUG] [Thread-131058] [transport.py] [_log()] userauth is OK
2025-12-31T16:35:54.668 [DEBUG] [Thread-131058] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:35:54.669 [DEBUG] [Thread-131058] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:35:54.669 [DEBUG] [Thread-131058] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T16:35:54.669 [DEBUG] [Thread-131058] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:35:54.705 [INFO] [Thread-131058] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:35:54.706 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:35:55.282 [DEBUG] [Thread-131058] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:35:55.282 [DEBUG] [Thread-131058] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:35:55.282 [DEBUG] [Thread-131058] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T16:35:55.322 [DEBUG] [Thread-131058] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:35:55.323 [DEBUG] [Thread-131058] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:35:55.325 [DEBUG] [Thread-131058] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:35:55.338 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:35:55.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T16:35:55.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T16:35:55.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T16:35:55.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:35:55.344 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T16:35:55.344 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:35:55.344 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:35:55.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T16:35:55.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.607780 -999.00  +24.30  31.13     21   +0.70 1 2 2 1 1   888    0 22.88 -68.10 ----- 36.0 31.1 300.0 39.3 27.5 -14.5 27.4 -14.3 26.9 -13.5 27.3 -13.4
2025-12-31T16:35:55.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T16:35:55.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T16:35:55.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.607780
2025-12-31T16:35:55.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T16:35:55.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T16:35:55.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T16:35:55.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T16:35:55.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T16:35:55.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T16:35:33', tmtdew=29.0, humidity=14.46, cloud=0.0, wind=35.11, temperature=25.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T14:35:12.192', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T16:35:55.345 [DEBUG] [Thread-131058] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:35:55.419 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T16:35:55.430 [DEBUG] [Thread-131061] [transport.py] [_log()] starting thread (client mode): 0xb957a0b0
2025-12-31T16:35:55.430 [DEBUG] [Thread-131061] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:35:55.445 [DEBUG] [Thread-131061] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T16:35:55.445 [INFO] [Thread-131061] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T16:35:55.452 [DEBUG] [Thread-131061] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:35:55.452 [DEBUG] [Thread-131061] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T16:35:55.452 [DEBUG] [Thread-131061] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:35:55.452 [DEBUG] [Thread-131061] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:35:55.452 [DEBUG] [Thread-131061] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:35:55.452 [DEBUG] [Thread-131061] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:35:55.452 [DEBUG] [Thread-131061] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:35:55.453 [DEBUG] [Thread-131061] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:35:55.453 [DEBUG] [Thread-131061] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:35:55.453 [DEBUG] [Thread-131061] [transport.py] [_log()] client lang: <none>
2025-12-31T16:35:55.453 [DEBUG] [Thread-131061] [transport.py] [_log()] server lang: <none>
2025-12-31T16:35:55.453 [DEBUG] [Thread-131061] [transport.py] [_log()] kex follows: False
2025-12-31T16:35:55.453 [DEBUG] [Thread-131061] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:35:55.453 [DEBUG] [Thread-131061] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:35:55.453 [DEBUG] [Thread-131061] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:35:55.453 [DEBUG] [Thread-131061] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:35:55.453 [DEBUG] [Thread-131061] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:35:55.453 [DEBUG] [Thread-131061] [transport.py] [_log()] Compression: none
2025-12-31T16:35:55.453 [DEBUG] [Thread-131061] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:35:55.509 [DEBUG] [Thread-131061] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:35:55.510 [DEBUG] [Thread-131061] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:35:55.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T16:35:55.511 [DEBUG] [Thread-131061] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T16:35:55.512 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:35:55.565 [DEBUG] [Thread-131061] [transport.py] [_log()] userauth is OK
2025-12-31T16:35:55.565 [DEBUG] [Thread-131061] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:35:55.565 [DEBUG] [Thread-131061] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:35:55.566 [DEBUG] [Thread-131061] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T16:35:55.566 [DEBUG] [Thread-131061] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:35:55.583 [INFO] [Thread-131061] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:35:55.584 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T16:35:55.586 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:35:56.411 [DEBUG] [Thread-131061] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:35:56.411 [DEBUG] [Thread-131061] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:35:56.459 [DEBUG] [Thread-131061] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:35:56.459 [DEBUG] [Thread-131061] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:35:56.468 [DEBUG] [Thread-131061] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:35:56.478 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:35:56.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T16:35:56.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T16:35:56.497 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:35:56.498 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:35:56.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:35:56.506 [DEBUG] [Thread-131061] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:36:07.390 [DEBUG] [Thread-131063 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:36:17.207 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:36:17.208 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:36:22.431 [DEBUG] [Thread-131064 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:36:24.813 [DEBUG] [Thread-131065 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:36:26.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T16:36:26.524 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T16:36:26.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T16:36:27.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 16, 36, 5), 28.45, 14.9, 0.0, 30.49, 25.06, 0, 0, 0, 2, 0, 0),)
2025-12-31T16:36:27.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 16:36:05
2025-12-31T16:36:27.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T16:36:27.505 [DEBUG] [Thread-131066] [transport.py] [_log()] starting thread (client mode): 0xb6b2ad40
2025-12-31T16:36:27.505 [DEBUG] [Thread-131066] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:36:27.525 [DEBUG] [Thread-131066] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T16:36:27.525 [INFO] [Thread-131066] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T16:36:27.528 [DEBUG] [Thread-131066] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:36:27.529 [DEBUG] [Thread-131066] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T16:36:27.529 [DEBUG] [Thread-131066] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:36:27.529 [DEBUG] [Thread-131066] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:36:27.529 [DEBUG] [Thread-131066] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:36:27.529 [DEBUG] [Thread-131066] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:36:27.529 [DEBUG] [Thread-131066] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:36:27.529 [DEBUG] [Thread-131066] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:36:27.529 [DEBUG] [Thread-131066] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:36:27.529 [DEBUG] [Thread-131066] [transport.py] [_log()] client lang: <none>
2025-12-31T16:36:27.529 [DEBUG] [Thread-131066] [transport.py] [_log()] server lang: <none>
2025-12-31T16:36:27.529 [DEBUG] [Thread-131066] [transport.py] [_log()] kex follows: False
2025-12-31T16:36:27.530 [DEBUG] [Thread-131066] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:36:27.530 [DEBUG] [Thread-131066] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:36:27.530 [DEBUG] [Thread-131066] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:36:27.530 [DEBUG] [Thread-131066] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:36:27.530 [DEBUG] [Thread-131066] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:36:27.530 [DEBUG] [Thread-131066] [transport.py] [_log()] Compression: none
2025-12-31T16:36:27.530 [DEBUG] [Thread-131066] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:36:27.548 [DEBUG] [Thread-131066] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:36:27.549 [DEBUG] [Thread-131066] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:36:27.550 [DEBUG] [Thread-131066] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T16:36:27.550 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T16:36:27.551 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:36:27.552 [DEBUG] [Thread-131066] [transport.py] [_log()] userauth is OK
2025-12-31T16:36:27.552 [DEBUG] [Thread-131066] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:36:27.552 [DEBUG] [Thread-131066] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:36:27.553 [DEBUG] [Thread-131066] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T16:36:27.553 [DEBUG] [Thread-131066] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:36:27.585 [INFO] [Thread-131066] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:36:27.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:36:28.333 [DEBUG] [Thread-131066] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:36:28.333 [DEBUG] [Thread-131066] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:36:28.334 [DEBUG] [Thread-131066] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T16:36:28.374 [DEBUG] [Thread-131066] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:36:28.374 [DEBUG] [Thread-131066] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:36:28.376 [DEBUG] [Thread-131066] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:36:28.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:36:28.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T16:36:28.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T16:36:28.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T16:36:28.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:36:28.400 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T16:36:28.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:36:28.400 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:36:28.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T16:36:28.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.608127 -999.00  +24.30  23.22     21   +0.80 1 2 1 1 1   888    0 22.66 -80.35 ----- 25.5 23.2 291.0 35.9 27.4 -14.2 27.4 -14.1 27.1 -13.4 27.3 -13.5
2025-12-31T16:36:28.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T16:36:28.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T16:36:28.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.608127
2025-12-31T16:36:28.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T16:36:28.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T16:36:28.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T16:36:28.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T16:36:28.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T16:36:28.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T16:36:05', tmtdew=28.45, humidity=14.9, cloud=0.0, wind=30.49, temperature=25.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T14:35:42.173', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T16:36:28.402 [DEBUG] [Thread-131066] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:36:28.485 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T16:36:28.497 [DEBUG] [Thread-131069] [transport.py] [_log()] starting thread (client mode): 0xb6b2bf10
2025-12-31T16:36:28.497 [DEBUG] [Thread-131069] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:36:28.511 [DEBUG] [Thread-131069] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T16:36:28.512 [INFO] [Thread-131069] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T16:36:28.519 [DEBUG] [Thread-131069] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:36:28.519 [DEBUG] [Thread-131069] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T16:36:28.519 [DEBUG] [Thread-131069] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:36:28.519 [DEBUG] [Thread-131069] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:36:28.519 [DEBUG] [Thread-131069] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:36:28.519 [DEBUG] [Thread-131069] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:36:28.520 [DEBUG] [Thread-131069] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:36:28.520 [DEBUG] [Thread-131069] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:36:28.520 [DEBUG] [Thread-131069] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:36:28.520 [DEBUG] [Thread-131069] [transport.py] [_log()] client lang: <none>
2025-12-31T16:36:28.520 [DEBUG] [Thread-131069] [transport.py] [_log()] server lang: <none>
2025-12-31T16:36:28.520 [DEBUG] [Thread-131069] [transport.py] [_log()] kex follows: False
2025-12-31T16:36:28.520 [DEBUG] [Thread-131069] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:36:28.520 [DEBUG] [Thread-131069] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:36:28.520 [DEBUG] [Thread-131069] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:36:28.521 [DEBUG] [Thread-131069] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:36:28.521 [DEBUG] [Thread-131069] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:36:28.521 [DEBUG] [Thread-131069] [transport.py] [_log()] Compression: none
2025-12-31T16:36:28.521 [DEBUG] [Thread-131069] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:36:28.578 [DEBUG] [Thread-131069] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:36:28.578 [DEBUG] [Thread-131069] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:36:28.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T16:36:28.580 [DEBUG] [Thread-131069] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T16:36:28.581 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:36:28.641 [DEBUG] [Thread-131069] [transport.py] [_log()] userauth is OK
2025-12-31T16:36:28.642 [DEBUG] [Thread-131069] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:36:28.642 [DEBUG] [Thread-131069] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:36:28.643 [DEBUG] [Thread-131069] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T16:36:28.643 [DEBUG] [Thread-131069] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:36:28.661 [INFO] [Thread-131069] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:36:28.661 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T16:36:28.661 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:36:29.509 [DEBUG] [Thread-131069] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:36:29.509 [DEBUG] [Thread-131069] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:36:29.558 [DEBUG] [Thread-131069] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:36:29.558 [DEBUG] [Thread-131069] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:36:29.567 [DEBUG] [Thread-131069] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:36:29.576 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:36:29.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T16:36:29.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T16:36:29.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:36:29.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:36:29.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:36:29.604 [DEBUG] [Thread-131069] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:36:37.470 [DEBUG] [Thread-131071 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:36:52.520 [DEBUG] [Thread-131072 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:36:59.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T16:36:59.626 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T16:36:59.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T16:37:00.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 16, 36, 38), 27.78, 15.41, 0.0, 30.44, 24.51, 0, 0, 0, 2, 0, 0),)
2025-12-31T16:37:00.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 16:36:38
2025-12-31T16:37:00.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T16:37:00.609 [DEBUG] [Thread-131073] [transport.py] [_log()] starting thread (client mode): 0xb9593c10
2025-12-31T16:37:00.609 [DEBUG] [Thread-131073] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:37:00.630 [DEBUG] [Thread-131073] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T16:37:00.630 [INFO] [Thread-131073] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T16:37:00.633 [DEBUG] [Thread-131073] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:37:00.633 [DEBUG] [Thread-131073] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T16:37:00.633 [DEBUG] [Thread-131073] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:37:00.633 [DEBUG] [Thread-131073] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:37:00.634 [DEBUG] [Thread-131073] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:37:00.634 [DEBUG] [Thread-131073] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:37:00.634 [DEBUG] [Thread-131073] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:37:00.634 [DEBUG] [Thread-131073] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:37:00.634 [DEBUG] [Thread-131073] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:37:00.634 [DEBUG] [Thread-131073] [transport.py] [_log()] client lang: <none>
2025-12-31T16:37:00.634 [DEBUG] [Thread-131073] [transport.py] [_log()] server lang: <none>
2025-12-31T16:37:00.634 [DEBUG] [Thread-131073] [transport.py] [_log()] kex follows: False
2025-12-31T16:37:00.634 [DEBUG] [Thread-131073] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:37:00.634 [DEBUG] [Thread-131073] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:37:00.634 [DEBUG] [Thread-131073] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:37:00.635 [DEBUG] [Thread-131073] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:37:00.635 [DEBUG] [Thread-131073] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:37:00.635 [DEBUG] [Thread-131073] [transport.py] [_log()] Compression: none
2025-12-31T16:37:00.635 [DEBUG] [Thread-131073] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:37:00.654 [DEBUG] [Thread-131073] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:37:00.654 [DEBUG] [Thread-131073] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:37:00.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T16:37:00.655 [DEBUG] [Thread-131073] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T16:37:00.656 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:37:00.658 [DEBUG] [Thread-131073] [transport.py] [_log()] userauth is OK
2025-12-31T16:37:00.658 [DEBUG] [Thread-131073] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:37:00.658 [DEBUG] [Thread-131073] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:37:00.658 [DEBUG] [Thread-131073] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T16:37:00.658 [DEBUG] [Thread-131073] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:37:00.684 [INFO] [Thread-131073] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:37:00.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:37:01.327 [DEBUG] [Thread-131073] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:37:01.328 [DEBUG] [Thread-131073] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:37:01.328 [DEBUG] [Thread-131073] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T16:37:01.369 [DEBUG] [Thread-131073] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:37:01.370 [DEBUG] [Thread-131073] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:37:01.373 [DEBUG] [Thread-131073] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:37:01.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:37:01.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T16:37:01.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T16:37:01.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T16:37:01.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:37:01.397 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T16:37:01.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:37:01.398 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:37:01.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T16:37:01.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.608474 -999.00  +24.50  20.74     21   +0.70 1 2 1 1 1   888    0 21.82 -104.08 ----- 21.4 20.7 301.2 25.1 27.5 -14.3 27.5 -14.3 27.1 -13.7 27.3 -13.6
2025-12-31T16:37:01.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T16:37:01.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T16:37:01.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.608474
2025-12-31T16:37:01.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T16:37:01.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T16:37:01.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T16:37:01.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T16:37:01.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T16:37:01.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T16:36:38', tmtdew=27.78, humidity=15.41, cloud=0.0, wind=30.44, temperature=24.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T14:36:12.154', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T16:37:01.401 [DEBUG] [Thread-131073] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:37:01.483 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T16:37:01.496 [DEBUG] [Thread-131076] [transport.py] [_log()] starting thread (client mode): 0xb6ba0dc0
2025-12-31T16:37:01.496 [DEBUG] [Thread-131076] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:37:01.511 [DEBUG] [Thread-131076] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T16:37:01.511 [INFO] [Thread-131076] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T16:37:01.519 [DEBUG] [Thread-131076] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:37:01.519 [DEBUG] [Thread-131076] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T16:37:01.519 [DEBUG] [Thread-131076] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:37:01.519 [DEBUG] [Thread-131076] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:37:01.519 [DEBUG] [Thread-131076] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:37:01.519 [DEBUG] [Thread-131076] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:37:01.519 [DEBUG] [Thread-131076] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:37:01.519 [DEBUG] [Thread-131076] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:37:01.519 [DEBUG] [Thread-131076] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:37:01.519 [DEBUG] [Thread-131076] [transport.py] [_log()] client lang: <none>
2025-12-31T16:37:01.519 [DEBUG] [Thread-131076] [transport.py] [_log()] server lang: <none>
2025-12-31T16:37:01.519 [DEBUG] [Thread-131076] [transport.py] [_log()] kex follows: False
2025-12-31T16:37:01.519 [DEBUG] [Thread-131076] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:37:01.519 [DEBUG] [Thread-131076] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:37:01.519 [DEBUG] [Thread-131076] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:37:01.520 [DEBUG] [Thread-131076] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:37:01.520 [DEBUG] [Thread-131076] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:37:01.520 [DEBUG] [Thread-131076] [transport.py] [_log()] Compression: none
2025-12-31T16:37:01.520 [DEBUG] [Thread-131076] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:37:01.581 [DEBUG] [Thread-131076] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:37:01.582 [DEBUG] [Thread-131076] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:37:01.583 [DEBUG] [Thread-131076] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T16:37:01.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T16:37:01.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:37:01.641 [DEBUG] [Thread-131076] [transport.py] [_log()] userauth is OK
2025-12-31T16:37:01.641 [DEBUG] [Thread-131076] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:37:01.641 [DEBUG] [Thread-131076] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:37:01.641 [DEBUG] [Thread-131076] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T16:37:01.642 [DEBUG] [Thread-131076] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:37:01.661 [INFO] [Thread-131076] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:37:01.661 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T16:37:01.661 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:37:02.522 [DEBUG] [Thread-131076] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:37:02.523 [DEBUG] [Thread-131076] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:37:02.571 [DEBUG] [Thread-131076] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:37:02.571 [DEBUG] [Thread-131076] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:37:02.580 [DEBUG] [Thread-131076] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:37:02.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:37:02.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T16:37:02.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-12-31T16:37:02.608 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:37:02.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:37:02.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:37:02.617 [DEBUG] [Thread-131076] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:37:07.558 [DEBUG] [Thread-131078 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:37:17.347 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:37:17.348 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:37:22.605 [DEBUG] [Thread-131079 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:37:24.863 [DEBUG] [Thread-131080 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:37:32.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T16:37:32.622 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T16:37:32.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T16:37:33.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 16, 37, 10), 27.86, 15.36, 0.0, 33.44, 24.7, 0, 0, 0, 2, 0, 0),)
2025-12-31T16:37:33.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 16:37:10
2025-12-31T16:37:33.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T16:37:33.598 [DEBUG] [Thread-131081] [transport.py] [_log()] starting thread (client mode): 0xb6ba1240
2025-12-31T16:37:33.598 [DEBUG] [Thread-131081] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:37:33.617 [DEBUG] [Thread-131081] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T16:37:33.617 [INFO] [Thread-131081] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T16:37:33.620 [DEBUG] [Thread-131081] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:37:33.620 [DEBUG] [Thread-131081] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T16:37:33.620 [DEBUG] [Thread-131081] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:37:33.620 [DEBUG] [Thread-131081] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:37:33.620 [DEBUG] [Thread-131081] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:37:33.620 [DEBUG] [Thread-131081] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:37:33.620 [DEBUG] [Thread-131081] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:37:33.620 [DEBUG] [Thread-131081] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:37:33.620 [DEBUG] [Thread-131081] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:37:33.620 [DEBUG] [Thread-131081] [transport.py] [_log()] client lang: <none>
2025-12-31T16:37:33.620 [DEBUG] [Thread-131081] [transport.py] [_log()] server lang: <none>
2025-12-31T16:37:33.620 [DEBUG] [Thread-131081] [transport.py] [_log()] kex follows: False
2025-12-31T16:37:33.620 [DEBUG] [Thread-131081] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:37:33.620 [DEBUG] [Thread-131081] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:37:33.621 [DEBUG] [Thread-131081] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:37:33.621 [DEBUG] [Thread-131081] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:37:33.621 [DEBUG] [Thread-131081] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:37:33.621 [DEBUG] [Thread-131081] [transport.py] [_log()] Compression: none
2025-12-31T16:37:33.621 [DEBUG] [Thread-131081] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:37:33.636 [DEBUG] [Thread-131081] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:37:33.637 [DEBUG] [Thread-131081] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:37:33.638 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T16:37:33.638 [DEBUG] [Thread-131081] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T16:37:33.639 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:37:33.640 [DEBUG] [Thread-131081] [transport.py] [_log()] userauth is OK
2025-12-31T16:37:33.640 [DEBUG] [Thread-131081] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:37:33.641 [DEBUG] [Thread-131081] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:37:33.641 [DEBUG] [Thread-131081] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T16:37:33.641 [DEBUG] [Thread-131081] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:37:33.659 [INFO] [Thread-131081] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:37:33.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:37:34.419 [DEBUG] [Thread-131081] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:37:34.419 [DEBUG] [Thread-131081] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:37:34.419 [DEBUG] [Thread-131081] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T16:37:34.460 [DEBUG] [Thread-131081] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:37:34.460 [DEBUG] [Thread-131081] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:37:34.463 [DEBUG] [Thread-131081] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:37:34.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:37:34.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T16:37:34.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T16:37:34.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T16:37:34.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:37:34.485 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T16:37:34.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:37:34.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:37:34.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T16:37:34.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.608822 -999.00  +24.70  22.78     20   +0.80 1 2 1 1 1   888    0 21.11 -110.67 ----- 26.7 22.8 306.2 28.0 27.6 -15.0 27.5 -14.7 27.1 -15.8 27.4 -13.9
2025-12-31T16:37:34.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T16:37:34.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T16:37:34.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.608822
2025-12-31T16:37:34.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T16:37:34.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T16:37:34.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T16:37:34.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T16:37:34.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T16:37:34.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T16:37:10', tmtdew=27.86, humidity=15.36, cloud=0.0, wind=33.44, temperature=24.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T14:36:42.221', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T16:37:34.488 [DEBUG] [Thread-131081] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:37:34.570 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T16:37:34.583 [DEBUG] [Thread-131084] [transport.py] [_log()] starting thread (client mode): 0xb6b2b700
2025-12-31T16:37:34.583 [DEBUG] [Thread-131084] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:37:34.598 [DEBUG] [Thread-131084] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T16:37:34.598 [INFO] [Thread-131084] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T16:37:34.605 [DEBUG] [Thread-131084] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:37:34.606 [DEBUG] [Thread-131084] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T16:37:34.606 [DEBUG] [Thread-131084] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:37:34.606 [DEBUG] [Thread-131084] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:37:34.606 [DEBUG] [Thread-131084] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:37:34.606 [DEBUG] [Thread-131084] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:37:34.606 [DEBUG] [Thread-131084] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:37:34.606 [DEBUG] [Thread-131084] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:37:34.606 [DEBUG] [Thread-131084] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:37:34.606 [DEBUG] [Thread-131084] [transport.py] [_log()] client lang: <none>
2025-12-31T16:37:34.606 [DEBUG] [Thread-131084] [transport.py] [_log()] server lang: <none>
2025-12-31T16:37:34.606 [DEBUG] [Thread-131084] [transport.py] [_log()] kex follows: False
2025-12-31T16:37:34.606 [DEBUG] [Thread-131084] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:37:34.606 [DEBUG] [Thread-131084] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:37:34.606 [DEBUG] [Thread-131084] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:37:34.606 [DEBUG] [Thread-131084] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:37:34.606 [DEBUG] [Thread-131084] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:37:34.606 [DEBUG] [Thread-131084] [transport.py] [_log()] Compression: none
2025-12-31T16:37:34.606 [DEBUG] [Thread-131084] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:37:34.665 [DEBUG] [Thread-131084] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:37:34.666 [DEBUG] [Thread-131084] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:37:34.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T16:37:34.667 [DEBUG] [Thread-131084] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T16:37:34.668 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:37:34.724 [DEBUG] [Thread-131084] [transport.py] [_log()] userauth is OK
2025-12-31T16:37:34.725 [DEBUG] [Thread-131084] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:37:34.725 [DEBUG] [Thread-131084] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:37:34.725 [DEBUG] [Thread-131084] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T16:37:34.725 [DEBUG] [Thread-131084] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:37:34.744 [INFO] [Thread-131084] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:37:34.744 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T16:37:34.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:37:35.565 [DEBUG] [Thread-131084] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:37:35.565 [DEBUG] [Thread-131084] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:37:35.613 [DEBUG] [Thread-131084] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:37:35.613 [DEBUG] [Thread-131084] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:37:35.624 [DEBUG] [Thread-131084] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:37:35.632 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:37:35.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T16:37:35.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T16:37:35.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:37:35.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:37:35.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:37:35.657 [DEBUG] [Thread-131084] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:37:37.638 [DEBUG] [Thread-131086 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:37:52.696 [DEBUG] [Thread-131087 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:38:05.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T16:38:05.680 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T16:38:05.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T16:38:06.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 16, 37, 42), 28.09, 15.33, 0.0, 28.65, 24.95, 0, 0, 0, 2, 0, 0),)
2025-12-31T16:38:06.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 16:37:42
2025-12-31T16:38:06.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T16:38:06.678 [DEBUG] [Thread-131088] [transport.py] [_log()] starting thread (client mode): 0xb9591ba0
2025-12-31T16:38:06.678 [DEBUG] [Thread-131088] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:38:06.699 [DEBUG] [Thread-131088] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T16:38:06.699 [INFO] [Thread-131088] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T16:38:06.702 [DEBUG] [Thread-131088] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:38:06.702 [DEBUG] [Thread-131088] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T16:38:06.702 [DEBUG] [Thread-131088] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:38:06.702 [DEBUG] [Thread-131088] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:38:06.702 [DEBUG] [Thread-131088] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:38:06.702 [DEBUG] [Thread-131088] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:38:06.702 [DEBUG] [Thread-131088] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:38:06.702 [DEBUG] [Thread-131088] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:38:06.702 [DEBUG] [Thread-131088] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:38:06.702 [DEBUG] [Thread-131088] [transport.py] [_log()] client lang: <none>
2025-12-31T16:38:06.702 [DEBUG] [Thread-131088] [transport.py] [_log()] server lang: <none>
2025-12-31T16:38:06.702 [DEBUG] [Thread-131088] [transport.py] [_log()] kex follows: False
2025-12-31T16:38:06.702 [DEBUG] [Thread-131088] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:38:06.702 [DEBUG] [Thread-131088] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:38:06.703 [DEBUG] [Thread-131088] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:38:06.703 [DEBUG] [Thread-131088] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:38:06.703 [DEBUG] [Thread-131088] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:38:06.703 [DEBUG] [Thread-131088] [transport.py] [_log()] Compression: none
2025-12-31T16:38:06.703 [DEBUG] [Thread-131088] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:38:06.721 [DEBUG] [Thread-131088] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:38:06.721 [DEBUG] [Thread-131088] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:38:06.722 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T16:38:06.722 [DEBUG] [Thread-131088] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T16:38:06.723 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:38:06.725 [DEBUG] [Thread-131088] [transport.py] [_log()] userauth is OK
2025-12-31T16:38:06.725 [DEBUG] [Thread-131088] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:38:06.725 [DEBUG] [Thread-131088] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:38:06.725 [DEBUG] [Thread-131088] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T16:38:06.726 [DEBUG] [Thread-131088] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:38:06.750 [INFO] [Thread-131088] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:38:06.751 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:38:07.393 [DEBUG] [Thread-131088] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:38:07.393 [DEBUG] [Thread-131088] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:38:07.394 [DEBUG] [Thread-131088] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T16:38:07.435 [DEBUG] [Thread-131088] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:38:07.435 [DEBUG] [Thread-131088] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:38:07.439 [DEBUG] [Thread-131088] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:38:07.450 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:38:07.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T16:38:07.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T16:38:07.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T16:38:07.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:38:07.463 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T16:38:07.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:38:07.463 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:38:07.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T16:38:07.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.609169 -999.00  +24.80  28.12     20   +0.60 1 2 1 1 1   888    0 21.35 -106.63 ----- 27.9 28.1 294.6 37.2 27.6 -15.2 27.5 -14.9 27.1 -14.2 27.4 -14.2
2025-12-31T16:38:07.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T16:38:07.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T16:38:07.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.609169
2025-12-31T16:38:07.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T16:38:07.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T16:38:07.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T16:38:07.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T16:38:07.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T16:38:07.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T16:37:42', tmtdew=28.09, humidity=15.33, cloud=0.0, wind=28.65, temperature=24.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T14:37:12.202', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T16:38:07.466 [DEBUG] [Thread-131088] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:38:07.549 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T16:38:07.561 [DEBUG] [Thread-131091] [transport.py] [_log()] starting thread (client mode): 0xb6b2af20
2025-12-31T16:38:07.561 [DEBUG] [Thread-131091] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:38:07.576 [DEBUG] [Thread-131091] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T16:38:07.576 [INFO] [Thread-131091] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T16:38:07.584 [DEBUG] [Thread-131091] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:38:07.584 [DEBUG] [Thread-131091] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T16:38:07.584 [DEBUG] [Thread-131091] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:38:07.584 [DEBUG] [Thread-131091] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:38:07.584 [DEBUG] [Thread-131091] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:38:07.584 [DEBUG] [Thread-131091] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:38:07.584 [DEBUG] [Thread-131091] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:38:07.584 [DEBUG] [Thread-131091] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:38:07.584 [DEBUG] [Thread-131091] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:38:07.584 [DEBUG] [Thread-131091] [transport.py] [_log()] client lang: <none>
2025-12-31T16:38:07.584 [DEBUG] [Thread-131091] [transport.py] [_log()] server lang: <none>
2025-12-31T16:38:07.584 [DEBUG] [Thread-131091] [transport.py] [_log()] kex follows: False
2025-12-31T16:38:07.584 [DEBUG] [Thread-131091] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:38:07.584 [DEBUG] [Thread-131091] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:38:07.584 [DEBUG] [Thread-131091] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:38:07.584 [DEBUG] [Thread-131091] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:38:07.585 [DEBUG] [Thread-131091] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:38:07.585 [DEBUG] [Thread-131091] [transport.py] [_log()] Compression: none
2025-12-31T16:38:07.585 [DEBUG] [Thread-131091] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:38:07.644 [DEBUG] [Thread-131091] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:38:07.645 [DEBUG] [Thread-131091] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:38:07.645 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T16:38:07.646 [DEBUG] [Thread-131091] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T16:38:07.647 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:38:07.704 [DEBUG] [Thread-131091] [transport.py] [_log()] userauth is OK
2025-12-31T16:38:07.704 [DEBUG] [Thread-131091] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:38:07.704 [DEBUG] [Thread-131091] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:38:07.705 [DEBUG] [Thread-131091] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T16:38:07.705 [DEBUG] [Thread-131091] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:38:07.724 [INFO] [Thread-131091] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:38:07.724 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T16:38:07.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:38:07.729 [DEBUG] [Thread-131093 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:38:08.542 [DEBUG] [Thread-131091] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:38:08.542 [DEBUG] [Thread-131091] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:38:08.590 [DEBUG] [Thread-131091] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:38:08.590 [DEBUG] [Thread-131091] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:38:08.600 [DEBUG] [Thread-131091] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:38:08.609 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:38:08.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T16:38:08.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T16:38:08.629 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:38:08.629 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:38:08.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:38:08.641 [DEBUG] [Thread-131091] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:38:17.487 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:38:17.489 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:38:22.783 [DEBUG] [Thread-131094 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:38:24.917 [DEBUG] [Thread-131095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:38:37.814 [DEBUG] [Thread-131096 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:38:38.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T16:38:38.660 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T16:38:38.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T16:38:39.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 16, 38, 14), 28.17, 15.23, 0.0, 33.21, 24.91, 0, 0, 0, 2, 0, 0),)
2025-12-31T16:38:39.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 16:38:14
2025-12-31T16:38:39.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T16:38:39.707 [DEBUG] [Thread-131097] [transport.py] [_log()] starting thread (client mode): 0xb9593430
2025-12-31T16:38:39.708 [DEBUG] [Thread-131097] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:38:39.731 [DEBUG] [Thread-131097] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T16:38:39.731 [INFO] [Thread-131097] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T16:38:39.732 [DEBUG] [Thread-131097] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:38:39.732 [DEBUG] [Thread-131097] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T16:38:39.732 [DEBUG] [Thread-131097] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:38:39.732 [DEBUG] [Thread-131097] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:38:39.732 [DEBUG] [Thread-131097] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:38:39.732 [DEBUG] [Thread-131097] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:38:39.732 [DEBUG] [Thread-131097] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:38:39.732 [DEBUG] [Thread-131097] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:38:39.732 [DEBUG] [Thread-131097] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:38:39.732 [DEBUG] [Thread-131097] [transport.py] [_log()] client lang: <none>
2025-12-31T16:38:39.732 [DEBUG] [Thread-131097] [transport.py] [_log()] server lang: <none>
2025-12-31T16:38:39.732 [DEBUG] [Thread-131097] [transport.py] [_log()] kex follows: False
2025-12-31T16:38:39.732 [DEBUG] [Thread-131097] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:38:39.733 [DEBUG] [Thread-131097] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:38:39.733 [DEBUG] [Thread-131097] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:38:39.733 [DEBUG] [Thread-131097] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:38:39.733 [DEBUG] [Thread-131097] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:38:39.733 [DEBUG] [Thread-131097] [transport.py] [_log()] Compression: none
2025-12-31T16:38:39.733 [DEBUG] [Thread-131097] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:38:39.741 [DEBUG] [Thread-131097] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:38:39.741 [DEBUG] [Thread-131097] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:38:39.741 [DEBUG] [Thread-131097] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T16:38:39.741 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T16:38:39.741 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:38:39.742 [DEBUG] [Thread-131097] [transport.py] [_log()] userauth is OK
2025-12-31T16:38:39.742 [DEBUG] [Thread-131097] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:38:39.742 [DEBUG] [Thread-131097] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:38:39.742 [DEBUG] [Thread-131097] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T16:38:39.742 [DEBUG] [Thread-131097] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:38:39.763 [INFO] [Thread-131097] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:38:39.764 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:38:40.539 [DEBUG] [Thread-131097] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:38:40.539 [DEBUG] [Thread-131097] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:38:40.539 [DEBUG] [Thread-131097] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T16:38:40.579 [DEBUG] [Thread-131097] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:38:40.579 [DEBUG] [Thread-131097] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:38:40.582 [DEBUG] [Thread-131097] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:38:40.587 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:38:40.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T16:38:40.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T16:38:40.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T16:38:40.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:38:40.592 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T16:38:40.592 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:38:40.592 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:38:40.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T16:38:40.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.609516 -999.00  +24.50  38.02     20   +0.40 1 2 2 1 1   888    0 21.70 -109.63 ----- 32.8 38.0 291.4 46.2 27.4 -15.4 27.4 -15.3 27.1 -14.8 27.3 -14.5
2025-12-31T16:38:40.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T16:38:40.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T16:38:40.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.609516
2025-12-31T16:38:40.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T16:38:40.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T16:38:40.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T16:38:40.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T16:38:40.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T16:38:40.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T16:38:14', tmtdew=28.17, humidity=15.23, cloud=0.0, wind=33.21, temperature=24.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T14:37:42.182', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T16:38:40.593 [DEBUG] [Thread-131097] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:38:40.668 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T16:38:40.678 [DEBUG] [Thread-131100] [transport.py] [_log()] starting thread (client mode): 0xb9592e00
2025-12-31T16:38:40.678 [DEBUG] [Thread-131100] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:38:40.694 [DEBUG] [Thread-131100] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T16:38:40.694 [INFO] [Thread-131100] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T16:38:40.701 [DEBUG] [Thread-131100] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:38:40.701 [DEBUG] [Thread-131100] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T16:38:40.701 [DEBUG] [Thread-131100] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:38:40.701 [DEBUG] [Thread-131100] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:38:40.701 [DEBUG] [Thread-131100] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:38:40.701 [DEBUG] [Thread-131100] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:38:40.701 [DEBUG] [Thread-131100] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:38:40.701 [DEBUG] [Thread-131100] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:38:40.701 [DEBUG] [Thread-131100] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:38:40.701 [DEBUG] [Thread-131100] [transport.py] [_log()] client lang: <none>
2025-12-31T16:38:40.701 [DEBUG] [Thread-131100] [transport.py] [_log()] server lang: <none>
2025-12-31T16:38:40.701 [DEBUG] [Thread-131100] [transport.py] [_log()] kex follows: False
2025-12-31T16:38:40.701 [DEBUG] [Thread-131100] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:38:40.701 [DEBUG] [Thread-131100] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:38:40.702 [DEBUG] [Thread-131100] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:38:40.702 [DEBUG] [Thread-131100] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:38:40.702 [DEBUG] [Thread-131100] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:38:40.702 [DEBUG] [Thread-131100] [transport.py] [_log()] Compression: none
2025-12-31T16:38:40.702 [DEBUG] [Thread-131100] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:38:40.758 [DEBUG] [Thread-131100] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:38:40.758 [DEBUG] [Thread-131100] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:38:40.758 [DEBUG] [Thread-131100] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T16:38:40.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T16:38:40.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:38:40.819 [DEBUG] [Thread-131100] [transport.py] [_log()] userauth is OK
2025-12-31T16:38:40.819 [DEBUG] [Thread-131100] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:38:40.819 [DEBUG] [Thread-131100] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:38:40.819 [DEBUG] [Thread-131100] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T16:38:40.819 [DEBUG] [Thread-131100] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:38:40.837 [INFO] [Thread-131100] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:38:40.837 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T16:38:40.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:38:41.684 [DEBUG] [Thread-131100] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:38:41.684 [DEBUG] [Thread-131100] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:38:41.731 [DEBUG] [Thread-131100] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:38:41.731 [DEBUG] [Thread-131100] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:38:41.739 [DEBUG] [Thread-131100] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:38:41.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:38:41.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T16:38:41.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T16:38:41.763 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:38:41.763 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:38:41.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:38:41.771 [DEBUG] [Thread-131100] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:38:52.844 [DEBUG] [Thread-131102 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:39:07.897 [DEBUG] [Thread-131103 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:39:11.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T16:39:11.786 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T16:39:11.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T16:39:12.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 16, 38, 46), 28.51, 14.78, 0.0, 30.05, 24.98, 0, 0, 0, 2, 0, 0),)
2025-12-31T16:39:12.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 16:38:46
2025-12-31T16:39:12.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T16:39:12.777 [DEBUG] [Thread-131104] [transport.py] [_log()] starting thread (client mode): 0xb6ba1240
2025-12-31T16:39:12.777 [DEBUG] [Thread-131104] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:39:12.790 [DEBUG] [Thread-131104] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T16:39:12.790 [INFO] [Thread-131104] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T16:39:12.794 [DEBUG] [Thread-131104] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:39:12.794 [DEBUG] [Thread-131104] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T16:39:12.794 [DEBUG] [Thread-131104] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:39:12.794 [DEBUG] [Thread-131104] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:39:12.794 [DEBUG] [Thread-131104] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:39:12.794 [DEBUG] [Thread-131104] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:39:12.794 [DEBUG] [Thread-131104] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:39:12.794 [DEBUG] [Thread-131104] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:39:12.794 [DEBUG] [Thread-131104] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:39:12.794 [DEBUG] [Thread-131104] [transport.py] [_log()] client lang: <none>
2025-12-31T16:39:12.794 [DEBUG] [Thread-131104] [transport.py] [_log()] server lang: <none>
2025-12-31T16:39:12.794 [DEBUG] [Thread-131104] [transport.py] [_log()] kex follows: False
2025-12-31T16:39:12.794 [DEBUG] [Thread-131104] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:39:12.794 [DEBUG] [Thread-131104] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:39:12.794 [DEBUG] [Thread-131104] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:39:12.794 [DEBUG] [Thread-131104] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:39:12.794 [DEBUG] [Thread-131104] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:39:12.794 [DEBUG] [Thread-131104] [transport.py] [_log()] Compression: none
2025-12-31T16:39:12.794 [DEBUG] [Thread-131104] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:39:12.811 [DEBUG] [Thread-131104] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:39:12.811 [DEBUG] [Thread-131104] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:39:12.812 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T16:39:12.812 [DEBUG] [Thread-131104] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T16:39:12.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:39:12.814 [DEBUG] [Thread-131104] [transport.py] [_log()] userauth is OK
2025-12-31T16:39:12.814 [DEBUG] [Thread-131104] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:39:12.814 [DEBUG] [Thread-131104] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:39:12.814 [DEBUG] [Thread-131104] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T16:39:12.814 [DEBUG] [Thread-131104] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:39:12.833 [INFO] [Thread-131104] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:39:12.834 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:39:13.482 [DEBUG] [Thread-131104] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:39:13.482 [DEBUG] [Thread-131104] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:39:13.482 [DEBUG] [Thread-131104] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T16:39:13.523 [DEBUG] [Thread-131104] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:39:13.523 [DEBUG] [Thread-131104] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:39:13.525 [DEBUG] [Thread-131104] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:39:13.538 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:39:13.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T16:39:13.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T16:39:13.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T16:39:13.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:39:13.542 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T16:39:13.542 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:39:13.542 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:39:13.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T16:39:13.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.609863 -999.00  +24.50  35.07     20   +0.50 1 2 2 1 1   888    0 21.29 -109.68 ----- 37.7 35.1 306.4 37.1 27.5 -15.3 27.4 -15.4 27.1 -14.3 27.3 -14.1
2025-12-31T16:39:13.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T16:39:13.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T16:39:13.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.609863
2025-12-31T16:39:13.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T16:39:13.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T16:39:13.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T16:39:13.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T16:39:13.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T16:39:13.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T16:38:46', tmtdew=28.51, humidity=14.78, cloud=0.0, wind=30.05, temperature=24.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T14:38:12.163', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T16:39:13.543 [DEBUG] [Thread-131104] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:39:13.620 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T16:39:13.631 [DEBUG] [Thread-131107] [transport.py] [_log()] starting thread (client mode): 0xb9592140
2025-12-31T16:39:13.631 [DEBUG] [Thread-131107] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:39:13.653 [DEBUG] [Thread-131107] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T16:39:13.654 [INFO] [Thread-131107] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T16:39:13.661 [DEBUG] [Thread-131107] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:39:13.661 [DEBUG] [Thread-131107] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T16:39:13.661 [DEBUG] [Thread-131107] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:39:13.661 [DEBUG] [Thread-131107] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:39:13.662 [DEBUG] [Thread-131107] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:39:13.662 [DEBUG] [Thread-131107] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:39:13.662 [DEBUG] [Thread-131107] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:39:13.662 [DEBUG] [Thread-131107] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:39:13.662 [DEBUG] [Thread-131107] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:39:13.662 [DEBUG] [Thread-131107] [transport.py] [_log()] client lang: <none>
2025-12-31T16:39:13.662 [DEBUG] [Thread-131107] [transport.py] [_log()] server lang: <none>
2025-12-31T16:39:13.662 [DEBUG] [Thread-131107] [transport.py] [_log()] kex follows: False
2025-12-31T16:39:13.662 [DEBUG] [Thread-131107] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:39:13.662 [DEBUG] [Thread-131107] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:39:13.663 [DEBUG] [Thread-131107] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:39:13.663 [DEBUG] [Thread-131107] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:39:13.663 [DEBUG] [Thread-131107] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:39:13.663 [DEBUG] [Thread-131107] [transport.py] [_log()] Compression: none
2025-12-31T16:39:13.663 [DEBUG] [Thread-131107] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:39:13.720 [DEBUG] [Thread-131107] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:39:13.720 [DEBUG] [Thread-131107] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:39:13.721 [DEBUG] [Thread-131107] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T16:39:13.721 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T16:39:13.722 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:39:13.775 [DEBUG] [Thread-131107] [transport.py] [_log()] userauth is OK
2025-12-31T16:39:13.776 [DEBUG] [Thread-131107] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:39:13.776 [DEBUG] [Thread-131107] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:39:13.776 [DEBUG] [Thread-131107] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T16:39:13.776 [DEBUG] [Thread-131107] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:39:13.794 [INFO] [Thread-131107] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:39:13.795 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T16:39:13.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:39:14.625 [DEBUG] [Thread-131107] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:39:14.625 [DEBUG] [Thread-131107] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:39:14.673 [DEBUG] [Thread-131107] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:39:14.673 [DEBUG] [Thread-131107] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:39:14.682 [DEBUG] [Thread-131107] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:39:14.691 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:39:14.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T16:39:14.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T16:39:14.710 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:39:14.710 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:39:14.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:39:14.719 [DEBUG] [Thread-131107] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:39:17.631 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:39:17.631 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:39:22.929 [DEBUG] [Thread-131109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:39:24.967 [DEBUG] [Thread-131110 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:39:37.983 [DEBUG] [Thread-131111 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:39:44.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T16:39:44.741 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T16:39:44.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T16:39:45.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 16, 39, 18), 28.53, 14.78, 0.0, 35.45, 25.06, 0, 0, 0, 2, 0, 0),)
2025-12-31T16:39:45.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 16:39:18
2025-12-31T16:39:45.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T16:39:45.727 [DEBUG] [Thread-131112] [transport.py] [_log()] starting thread (client mode): 0xb6bbf940
2025-12-31T16:39:45.727 [DEBUG] [Thread-131112] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:39:45.748 [DEBUG] [Thread-131112] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T16:39:45.748 [INFO] [Thread-131112] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T16:39:45.751 [DEBUG] [Thread-131112] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:39:45.751 [DEBUG] [Thread-131112] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T16:39:45.751 [DEBUG] [Thread-131112] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:39:45.751 [DEBUG] [Thread-131112] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:39:45.751 [DEBUG] [Thread-131112] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:39:45.751 [DEBUG] [Thread-131112] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:39:45.751 [DEBUG] [Thread-131112] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:39:45.751 [DEBUG] [Thread-131112] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:39:45.751 [DEBUG] [Thread-131112] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:39:45.751 [DEBUG] [Thread-131112] [transport.py] [_log()] client lang: <none>
2025-12-31T16:39:45.751 [DEBUG] [Thread-131112] [transport.py] [_log()] server lang: <none>
2025-12-31T16:39:45.751 [DEBUG] [Thread-131112] [transport.py] [_log()] kex follows: False
2025-12-31T16:39:45.752 [DEBUG] [Thread-131112] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:39:45.752 [DEBUG] [Thread-131112] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:39:45.752 [DEBUG] [Thread-131112] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:39:45.752 [DEBUG] [Thread-131112] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:39:45.752 [DEBUG] [Thread-131112] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:39:45.752 [DEBUG] [Thread-131112] [transport.py] [_log()] Compression: none
2025-12-31T16:39:45.752 [DEBUG] [Thread-131112] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:39:45.771 [DEBUG] [Thread-131112] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:39:45.771 [DEBUG] [Thread-131112] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:39:45.772 [DEBUG] [Thread-131112] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T16:39:45.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T16:39:45.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:39:45.812 [DEBUG] [Thread-131112] [transport.py] [_log()] userauth is OK
2025-12-31T16:39:45.812 [DEBUG] [Thread-131112] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:39:45.813 [DEBUG] [Thread-131112] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:39:45.813 [DEBUG] [Thread-131112] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T16:39:45.813 [DEBUG] [Thread-131112] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:39:45.833 [INFO] [Thread-131112] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:39:45.834 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:39:46.559 [DEBUG] [Thread-131112] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:39:46.559 [DEBUG] [Thread-131112] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:39:46.560 [DEBUG] [Thread-131112] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T16:39:46.600 [DEBUG] [Thread-131112] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:39:46.600 [DEBUG] [Thread-131112] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:39:46.604 [DEBUG] [Thread-131112] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:39:46.615 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:39:46.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T16:39:46.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T16:39:46.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T16:39:46.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:39:46.627 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T16:39:46.628 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:39:46.628 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:39:46.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T16:39:46.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.610558 -999.00  +24.60  29.90     20   +0.50 1 2 1 1 1   888    0 21.88 -102.89 ----- 34.4 29.9 306.7 37.2 27.4 -14.9 27.4 -15.0 27.0 -13.9 27.2 -14.2
2025-12-31T16:39:46.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T16:39:46.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T16:39:46.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.610558
2025-12-31T16:39:46.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T16:39:46.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T16:39:46.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T16:39:46.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T16:39:46.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T16:39:46.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T16:39:18', tmtdew=28.53, humidity=14.78, cloud=0.0, wind=35.45, temperature=25.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T14:39:12.211', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T16:39:46.630 [DEBUG] [Thread-131112] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:39:46.713 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T16:39:46.724 [DEBUG] [Thread-131115] [transport.py] [_log()] starting thread (client mode): 0xb95f1a20
2025-12-31T16:39:46.724 [DEBUG] [Thread-131115] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:39:46.739 [DEBUG] [Thread-131115] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T16:39:46.739 [INFO] [Thread-131115] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T16:39:46.746 [DEBUG] [Thread-131115] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:39:46.747 [DEBUG] [Thread-131115] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T16:39:46.747 [DEBUG] [Thread-131115] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:39:46.747 [DEBUG] [Thread-131115] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:39:46.747 [DEBUG] [Thread-131115] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:39:46.747 [DEBUG] [Thread-131115] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:39:46.747 [DEBUG] [Thread-131115] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:39:46.747 [DEBUG] [Thread-131115] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:39:46.747 [DEBUG] [Thread-131115] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:39:46.747 [DEBUG] [Thread-131115] [transport.py] [_log()] client lang: <none>
2025-12-31T16:39:46.747 [DEBUG] [Thread-131115] [transport.py] [_log()] server lang: <none>
2025-12-31T16:39:46.747 [DEBUG] [Thread-131115] [transport.py] [_log()] kex follows: False
2025-12-31T16:39:46.747 [DEBUG] [Thread-131115] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:39:46.747 [DEBUG] [Thread-131115] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:39:46.747 [DEBUG] [Thread-131115] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:39:46.747 [DEBUG] [Thread-131115] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:39:46.747 [DEBUG] [Thread-131115] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:39:46.747 [DEBUG] [Thread-131115] [transport.py] [_log()] Compression: none
2025-12-31T16:39:46.747 [DEBUG] [Thread-131115] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:39:46.803 [DEBUG] [Thread-131115] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:39:46.803 [DEBUG] [Thread-131115] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:39:46.804 [DEBUG] [Thread-131115] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T16:39:46.804 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T16:39:46.805 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:39:46.859 [DEBUG] [Thread-131115] [transport.py] [_log()] userauth is OK
2025-12-31T16:39:46.859 [DEBUG] [Thread-131115] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:39:46.860 [DEBUG] [Thread-131115] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:39:46.860 [DEBUG] [Thread-131115] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T16:39:46.860 [DEBUG] [Thread-131115] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:39:46.879 [INFO] [Thread-131115] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:39:46.879 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T16:39:46.880 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:39:47.744 [DEBUG] [Thread-131115] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:39:47.744 [DEBUG] [Thread-131115] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:39:47.792 [DEBUG] [Thread-131115] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:39:47.792 [DEBUG] [Thread-131115] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:39:47.801 [DEBUG] [Thread-131115] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:39:47.811 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:39:47.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-12-31T16:39:47.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T16:39:47.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:39:47.830 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:39:47.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:39:47.839 [DEBUG] [Thread-131115] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:39:53.020 [DEBUG] [Thread-131117 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:40:08.075 [DEBUG] [Thread-131118 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:40:17.770 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:40:17.771 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:40:17.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T16:40:17.861 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T16:40:17.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T16:40:18.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 16, 39, 50), 28.67, 14.76, 0.0, 42.75, 24.98, 0, 0, 0, 2, 0, 0),)
2025-12-31T16:40:18.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 16:39:50
2025-12-31T16:40:18.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T16:40:18.855 [DEBUG] [Thread-131119] [transport.py] [_log()] starting thread (client mode): 0xb95f1390
2025-12-31T16:40:18.855 [DEBUG] [Thread-131119] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:40:18.875 [DEBUG] [Thread-131119] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T16:40:18.876 [INFO] [Thread-131119] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T16:40:18.879 [DEBUG] [Thread-131119] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:40:18.879 [DEBUG] [Thread-131119] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T16:40:18.879 [DEBUG] [Thread-131119] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:40:18.879 [DEBUG] [Thread-131119] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:40:18.879 [DEBUG] [Thread-131119] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:40:18.879 [DEBUG] [Thread-131119] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:40:18.879 [DEBUG] [Thread-131119] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:40:18.880 [DEBUG] [Thread-131119] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:40:18.880 [DEBUG] [Thread-131119] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:40:18.880 [DEBUG] [Thread-131119] [transport.py] [_log()] client lang: <none>
2025-12-31T16:40:18.880 [DEBUG] [Thread-131119] [transport.py] [_log()] server lang: <none>
2025-12-31T16:40:18.880 [DEBUG] [Thread-131119] [transport.py] [_log()] kex follows: False
2025-12-31T16:40:18.880 [DEBUG] [Thread-131119] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:40:18.880 [DEBUG] [Thread-131119] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:40:18.880 [DEBUG] [Thread-131119] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:40:18.880 [DEBUG] [Thread-131119] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:40:18.880 [DEBUG] [Thread-131119] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:40:18.880 [DEBUG] [Thread-131119] [transport.py] [_log()] Compression: none
2025-12-31T16:40:18.880 [DEBUG] [Thread-131119] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:40:18.898 [DEBUG] [Thread-131119] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:40:18.899 [DEBUG] [Thread-131119] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:40:18.900 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T16:40:18.900 [DEBUG] [Thread-131119] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T16:40:18.901 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:40:18.941 [DEBUG] [Thread-131119] [transport.py] [_log()] userauth is OK
2025-12-31T16:40:18.942 [DEBUG] [Thread-131119] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:40:18.942 [DEBUG] [Thread-131119] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:40:18.942 [DEBUG] [Thread-131119] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T16:40:18.942 [DEBUG] [Thread-131119] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:40:18.973 [INFO] [Thread-131119] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:40:18.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:40:21.602 [DEBUG] [Thread-131119] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:40:21.602 [DEBUG] [Thread-131119] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:40:21.603 [DEBUG] [Thread-131119] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T16:40:21.643 [DEBUG] [Thread-131119] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:40:21.643 [DEBUG] [Thread-131119] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:40:21.645 [DEBUG] [Thread-131119] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:40:21.657 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:40:21.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T16:40:21.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T16:40:21.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T16:40:21.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:40:21.674 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T16:40:21.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:40:21.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:40:21.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T16:40:21.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.610905 -999.00  +24.70  30.46     20   +0.50 1 2 2 1 1   888    0 21.29 -106.36 ----- 42.5 30.5 306.8 43.4 27.3 -15.9 27.3 -16.1 26.8 -14.9 27.2 -13.9
2025-12-31T16:40:21.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T16:40:21.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T16:40:21.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.610905
2025-12-31T16:40:21.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T16:40:21.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T16:40:21.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T16:40:21.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T16:40:21.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T16:40:21.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T16:39:50', tmtdew=28.67, humidity=14.76, cloud=0.0, wind=42.75, temperature=24.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T14:39:42.192', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T16:40:21.677 [DEBUG] [Thread-131119] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:40:21.761 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T16:40:21.775 [DEBUG] [Thread-131122] [transport.py] [_log()] starting thread (client mode): 0xb6bbc280
2025-12-31T16:40:21.775 [DEBUG] [Thread-131122] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:40:21.790 [DEBUG] [Thread-131122] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T16:40:21.790 [INFO] [Thread-131122] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T16:40:21.798 [DEBUG] [Thread-131122] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:40:21.798 [DEBUG] [Thread-131122] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T16:40:21.798 [DEBUG] [Thread-131122] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:40:21.798 [DEBUG] [Thread-131122] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:40:21.798 [DEBUG] [Thread-131122] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:40:21.798 [DEBUG] [Thread-131122] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:40:21.798 [DEBUG] [Thread-131122] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:40:21.798 [DEBUG] [Thread-131122] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:40:21.798 [DEBUG] [Thread-131122] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:40:21.798 [DEBUG] [Thread-131122] [transport.py] [_log()] client lang: <none>
2025-12-31T16:40:21.798 [DEBUG] [Thread-131122] [transport.py] [_log()] server lang: <none>
2025-12-31T16:40:21.798 [DEBUG] [Thread-131122] [transport.py] [_log()] kex follows: False
2025-12-31T16:40:21.798 [DEBUG] [Thread-131122] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:40:21.798 [DEBUG] [Thread-131122] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:40:21.799 [DEBUG] [Thread-131122] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:40:21.799 [DEBUG] [Thread-131122] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:40:21.799 [DEBUG] [Thread-131122] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:40:21.799 [DEBUG] [Thread-131122] [transport.py] [_log()] Compression: none
2025-12-31T16:40:21.799 [DEBUG] [Thread-131122] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:40:21.855 [DEBUG] [Thread-131122] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:40:21.855 [DEBUG] [Thread-131122] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:40:21.856 [DEBUG] [Thread-131122] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T16:40:21.856 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T16:40:21.857 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:40:21.911 [DEBUG] [Thread-131122] [transport.py] [_log()] userauth is OK
2025-12-31T16:40:21.911 [DEBUG] [Thread-131122] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:40:21.911 [DEBUG] [Thread-131122] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:40:21.911 [DEBUG] [Thread-131122] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T16:40:21.911 [DEBUG] [Thread-131122] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:40:21.930 [INFO] [Thread-131122] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:40:21.930 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T16:40:21.931 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:40:22.818 [DEBUG] [Thread-131122] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:40:22.818 [DEBUG] [Thread-131122] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:40:22.866 [DEBUG] [Thread-131122] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:40:22.866 [DEBUG] [Thread-131122] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:40:22.874 [DEBUG] [Thread-131122] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:40:22.882 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:40:22.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T16:40:22.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-12-31T16:40:22.898 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:40:22.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:40:22.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:40:22.906 [DEBUG] [Thread-131122] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:40:23.110 [DEBUG] [Thread-131124 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:40:25.027 [DEBUG] [Thread-131125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:40:38.145 [DEBUG] [Thread-131126 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:40:52.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T16:40:52.929 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T16:40:52.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-12-31T16:40:53.178 [DEBUG] [Thread-131127 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:40:53.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 16, 40, 22), 28.62, 14.81, 0.0, 46.28, 24.98, 0, 0, 0, 2, 1, 0),)
2025-12-31T16:40:53.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 16:40:22
2025-12-31T16:40:53.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T16:40:53.907 [DEBUG] [Thread-131128] [transport.py] [_log()] starting thread (client mode): 0xb95f19f0
2025-12-31T16:40:53.907 [DEBUG] [Thread-131128] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:40:53.928 [DEBUG] [Thread-131128] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T16:40:53.928 [INFO] [Thread-131128] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T16:40:53.931 [DEBUG] [Thread-131128] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:40:53.931 [DEBUG] [Thread-131128] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T16:40:53.931 [DEBUG] [Thread-131128] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:40:53.931 [DEBUG] [Thread-131128] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:40:53.931 [DEBUG] [Thread-131128] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:40:53.931 [DEBUG] [Thread-131128] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:40:53.931 [DEBUG] [Thread-131128] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:40:53.931 [DEBUG] [Thread-131128] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:40:53.931 [DEBUG] [Thread-131128] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:40:53.931 [DEBUG] [Thread-131128] [transport.py] [_log()] client lang: <none>
2025-12-31T16:40:53.931 [DEBUG] [Thread-131128] [transport.py] [_log()] server lang: <none>
2025-12-31T16:40:53.931 [DEBUG] [Thread-131128] [transport.py] [_log()] kex follows: False
2025-12-31T16:40:53.931 [DEBUG] [Thread-131128] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:40:53.931 [DEBUG] [Thread-131128] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:40:53.931 [DEBUG] [Thread-131128] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:40:53.931 [DEBUG] [Thread-131128] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:40:53.931 [DEBUG] [Thread-131128] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:40:53.931 [DEBUG] [Thread-131128] [transport.py] [_log()] Compression: none
2025-12-31T16:40:53.931 [DEBUG] [Thread-131128] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:40:53.950 [DEBUG] [Thread-131128] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:40:53.950 [DEBUG] [Thread-131128] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:40:53.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T16:40:53.951 [DEBUG] [Thread-131128] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T16:40:53.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:40:53.992 [DEBUG] [Thread-131128] [transport.py] [_log()] userauth is OK
2025-12-31T16:40:53.993 [DEBUG] [Thread-131128] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:40:53.993 [DEBUG] [Thread-131128] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:40:53.993 [DEBUG] [Thread-131128] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T16:40:53.993 [DEBUG] [Thread-131128] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:40:54.014 [INFO] [Thread-131128] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:40:54.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:40:54.695 [DEBUG] [Thread-131128] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:40:54.695 [DEBUG] [Thread-131128] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:40:54.696 [DEBUG] [Thread-131128] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T16:40:54.736 [DEBUG] [Thread-131128] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:40:54.736 [DEBUG] [Thread-131128] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:40:54.738 [DEBUG] [Thread-131128] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:40:54.751 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:40:54.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T16:40:54.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T16:40:54.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T16:40:54.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:40:54.756 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T16:40:54.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:40:54.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:40:54.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T16:40:54.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.611252 -999.00  +24.60  38.81     20   +0.50 1 2 2 1 1   888    0 21.75 -109.89 ----- 43.2 38.8 308.8 42.4 27.2 -15.9 27.1 -15.7 26.9 -14.6 27.1 -14.1
2025-12-31T16:40:54.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T16:40:54.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T16:40:54.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.611252
2025-12-31T16:40:54.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T16:40:54.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T16:40:54.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T16:40:54.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T16:40:54.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T16:40:54.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T16:40:22', tmtdew=28.62, humidity=14.81, cloud=0.0, wind=46.28, temperature=24.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T14:40:12.173', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T16:40:54.757 [DEBUG] [Thread-131128] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:40:54.831 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T16:40:54.842 [DEBUG] [Thread-131131] [transport.py] [_log()] starting thread (client mode): 0xb6bbb100
2025-12-31T16:40:54.842 [DEBUG] [Thread-131131] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:40:54.858 [DEBUG] [Thread-131131] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T16:40:54.858 [INFO] [Thread-131131] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T16:40:54.869 [DEBUG] [Thread-131131] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:40:54.869 [DEBUG] [Thread-131131] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T16:40:54.869 [DEBUG] [Thread-131131] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:40:54.869 [DEBUG] [Thread-131131] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:40:54.869 [DEBUG] [Thread-131131] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:40:54.869 [DEBUG] [Thread-131131] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:40:54.869 [DEBUG] [Thread-131131] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:40:54.869 [DEBUG] [Thread-131131] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:40:54.869 [DEBUG] [Thread-131131] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:40:54.869 [DEBUG] [Thread-131131] [transport.py] [_log()] client lang: <none>
2025-12-31T16:40:54.869 [DEBUG] [Thread-131131] [transport.py] [_log()] server lang: <none>
2025-12-31T16:40:54.869 [DEBUG] [Thread-131131] [transport.py] [_log()] kex follows: False
2025-12-31T16:40:54.869 [DEBUG] [Thread-131131] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:40:54.869 [DEBUG] [Thread-131131] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:40:54.869 [DEBUG] [Thread-131131] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:40:54.869 [DEBUG] [Thread-131131] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:40:54.869 [DEBUG] [Thread-131131] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:40:54.869 [DEBUG] [Thread-131131] [transport.py] [_log()] Compression: none
2025-12-31T16:40:54.869 [DEBUG] [Thread-131131] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:40:54.920 [DEBUG] [Thread-131131] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:40:54.920 [DEBUG] [Thread-131131] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:40:54.920 [DEBUG] [Thread-131131] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T16:40:54.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T16:40:54.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:40:54.978 [DEBUG] [Thread-131131] [transport.py] [_log()] userauth is OK
2025-12-31T16:40:54.978 [DEBUG] [Thread-131131] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:40:54.978 [DEBUG] [Thread-131131] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:40:54.978 [DEBUG] [Thread-131131] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T16:40:54.978 [DEBUG] [Thread-131131] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:40:54.991 [INFO] [Thread-131131] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:40:54.991 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T16:40:54.991 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:40:55.839 [DEBUG] [Thread-131131] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:40:55.839 [DEBUG] [Thread-131131] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:40:55.887 [DEBUG] [Thread-131131] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:40:55.887 [DEBUG] [Thread-131131] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:40:55.895 [DEBUG] [Thread-131131] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:40:55.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:40:55.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T16:40:55.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T16:40:55.919 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:40:55.919 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:40:55.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:40:55.927 [DEBUG] [Thread-131131] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:41:08.212 [DEBUG] [Thread-131133 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:41:17.913 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:41:17.914 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:41:23.268 [DEBUG] [Thread-131134 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:41:25.078 [DEBUG] [Thread-131135 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:41:25.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T16:41:25.948 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T16:41:25.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T16:41:26.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 16, 40, 54), 28.3, 15.28, 0.0, 37.62, 24.68, 0, 0, 0, 2, 0, 0),)
2025-12-31T16:41:26.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 16:40:54
2025-12-31T16:41:26.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T16:41:26.952 [DEBUG] [Thread-131136] [transport.py] [_log()] starting thread (client mode): 0xb6bbbe20
2025-12-31T16:41:26.952 [DEBUG] [Thread-131136] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:41:26.972 [DEBUG] [Thread-131136] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T16:41:26.972 [INFO] [Thread-131136] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T16:41:26.975 [DEBUG] [Thread-131136] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:41:26.975 [DEBUG] [Thread-131136] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T16:41:26.975 [DEBUG] [Thread-131136] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:41:26.975 [DEBUG] [Thread-131136] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:41:26.975 [DEBUG] [Thread-131136] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:41:26.975 [DEBUG] [Thread-131136] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:41:26.975 [DEBUG] [Thread-131136] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:41:26.975 [DEBUG] [Thread-131136] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:41:26.975 [DEBUG] [Thread-131136] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:41:26.975 [DEBUG] [Thread-131136] [transport.py] [_log()] client lang: <none>
2025-12-31T16:41:26.976 [DEBUG] [Thread-131136] [transport.py] [_log()] server lang: <none>
2025-12-31T16:41:26.976 [DEBUG] [Thread-131136] [transport.py] [_log()] kex follows: False
2025-12-31T16:41:26.976 [DEBUG] [Thread-131136] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:41:26.976 [DEBUG] [Thread-131136] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:41:26.976 [DEBUG] [Thread-131136] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:41:26.976 [DEBUG] [Thread-131136] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:41:26.976 [DEBUG] [Thread-131136] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:41:26.976 [DEBUG] [Thread-131136] [transport.py] [_log()] Compression: none
2025-12-31T16:41:26.976 [DEBUG] [Thread-131136] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:41:26.992 [DEBUG] [Thread-131136] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:41:26.992 [DEBUG] [Thread-131136] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:41:26.993 [DEBUG] [Thread-131136] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T16:41:26.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T16:41:26.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:41:26.994 [DEBUG] [Thread-131136] [transport.py] [_log()] userauth is OK
2025-12-31T16:41:26.994 [DEBUG] [Thread-131136] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:41:26.994 [DEBUG] [Thread-131136] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:41:26.994 [DEBUG] [Thread-131136] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T16:41:26.994 [DEBUG] [Thread-131136] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:41:27.013 [INFO] [Thread-131136] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:41:27.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:41:28.103 [DEBUG] [Thread-131136] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:41:28.103 [DEBUG] [Thread-131136] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:41:28.103 [DEBUG] [Thread-131136] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T16:41:28.145 [DEBUG] [Thread-131136] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:41:28.145 [DEBUG] [Thread-131136] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:41:28.147 [DEBUG] [Thread-131136] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:41:28.159 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:41:28.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T16:41:28.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T16:41:28.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T16:41:28.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:41:28.170 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T16:41:28.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:41:28.170 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:41:28.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T16:41:28.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.611599 -999.00  +24.30  37.64     20   +0.50 1 2 2 1 1   888    0 21.82 -110.73 ----- 32.4 37.6 294.2 46.4 27.1 -15.6 27.1 -15.4 26.7 -15.1 26.9 -14.2
2025-12-31T16:41:28.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T16:41:28.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T16:41:28.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.611599
2025-12-31T16:41:28.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T16:41:28.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T16:41:28.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T16:41:28.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T16:41:28.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T16:41:28.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T16:40:54', tmtdew=28.3, humidity=15.28, cloud=0.0, wind=37.62, temperature=24.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T14:40:42.154', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T16:41:28.172 [DEBUG] [Thread-131136] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:41:28.245 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T16:41:28.255 [DEBUG] [Thread-131139] [transport.py] [_log()] starting thread (client mode): 0xb6bbd900
2025-12-31T16:41:28.255 [DEBUG] [Thread-131139] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:41:28.272 [DEBUG] [Thread-131139] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T16:41:28.272 [INFO] [Thread-131139] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T16:41:28.284 [DEBUG] [Thread-131139] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:41:28.284 [DEBUG] [Thread-131139] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T16:41:28.284 [DEBUG] [Thread-131139] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:41:28.284 [DEBUG] [Thread-131139] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:41:28.284 [DEBUG] [Thread-131139] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:41:28.284 [DEBUG] [Thread-131139] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:41:28.284 [DEBUG] [Thread-131139] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:41:28.284 [DEBUG] [Thread-131139] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:41:28.284 [DEBUG] [Thread-131139] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:41:28.284 [DEBUG] [Thread-131139] [transport.py] [_log()] client lang: <none>
2025-12-31T16:41:28.284 [DEBUG] [Thread-131139] [transport.py] [_log()] server lang: <none>
2025-12-31T16:41:28.284 [DEBUG] [Thread-131139] [transport.py] [_log()] kex follows: False
2025-12-31T16:41:28.284 [DEBUG] [Thread-131139] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:41:28.284 [DEBUG] [Thread-131139] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:41:28.284 [DEBUG] [Thread-131139] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:41:28.284 [DEBUG] [Thread-131139] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:41:28.284 [DEBUG] [Thread-131139] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:41:28.284 [DEBUG] [Thread-131139] [transport.py] [_log()] Compression: none
2025-12-31T16:41:28.284 [DEBUG] [Thread-131139] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:41:28.336 [DEBUG] [Thread-131139] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:41:28.336 [DEBUG] [Thread-131139] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:41:28.337 [DEBUG] [Thread-131139] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T16:41:28.337 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T16:41:28.337 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:41:28.393 [DEBUG] [Thread-131139] [transport.py] [_log()] userauth is OK
2025-12-31T16:41:28.394 [DEBUG] [Thread-131139] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:41:28.394 [DEBUG] [Thread-131139] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:41:28.394 [DEBUG] [Thread-131139] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T16:41:28.394 [DEBUG] [Thread-131139] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:41:28.407 [INFO] [Thread-131139] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:41:28.407 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T16:41:28.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:41:29.284 [DEBUG] [Thread-131139] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:41:29.284 [DEBUG] [Thread-131139] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:41:29.331 [DEBUG] [Thread-131139] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:41:29.332 [DEBUG] [Thread-131139] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:41:29.340 [DEBUG] [Thread-131139] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:41:29.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:41:29.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T16:41:29.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T16:41:29.368 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:41:29.368 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:41:29.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:41:29.377 [DEBUG] [Thread-131139] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:41:38.304 [DEBUG] [Thread-131141 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:41:53.353 [DEBUG] [Thread-131142 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:41:59.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T16:41:59.399 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T16:41:59.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T16:42:00.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 16, 41, 26), 28.28, 15.26, 0.0, 37.63, 24.52, 0, 0, 0, 2, 0, 0),)
2025-12-31T16:42:00.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 16:41:26
2025-12-31T16:42:00.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T16:42:00.459 [DEBUG] [Thread-131143] [transport.py] [_log()] starting thread (client mode): 0xb6bbcee0
2025-12-31T16:42:00.459 [DEBUG] [Thread-131143] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:42:00.480 [DEBUG] [Thread-131143] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T16:42:00.480 [INFO] [Thread-131143] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T16:42:00.483 [DEBUG] [Thread-131143] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:42:00.483 [DEBUG] [Thread-131143] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T16:42:00.483 [DEBUG] [Thread-131143] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:42:00.483 [DEBUG] [Thread-131143] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:42:00.483 [DEBUG] [Thread-131143] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:42:00.483 [DEBUG] [Thread-131143] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:42:00.483 [DEBUG] [Thread-131143] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:42:00.483 [DEBUG] [Thread-131143] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:42:00.483 [DEBUG] [Thread-131143] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:42:00.483 [DEBUG] [Thread-131143] [transport.py] [_log()] client lang: <none>
2025-12-31T16:42:00.483 [DEBUG] [Thread-131143] [transport.py] [_log()] server lang: <none>
2025-12-31T16:42:00.483 [DEBUG] [Thread-131143] [transport.py] [_log()] kex follows: False
2025-12-31T16:42:00.483 [DEBUG] [Thread-131143] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:42:00.483 [DEBUG] [Thread-131143] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:42:00.483 [DEBUG] [Thread-131143] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:42:00.483 [DEBUG] [Thread-131143] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:42:00.483 [DEBUG] [Thread-131143] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:42:00.483 [DEBUG] [Thread-131143] [transport.py] [_log()] Compression: none
2025-12-31T16:42:00.483 [DEBUG] [Thread-131143] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:42:00.499 [DEBUG] [Thread-131143] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:42:00.500 [DEBUG] [Thread-131143] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:42:00.500 [DEBUG] [Thread-131143] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T16:42:00.500 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T16:42:00.500 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:42:00.544 [DEBUG] [Thread-131143] [transport.py] [_log()] userauth is OK
2025-12-31T16:42:00.544 [DEBUG] [Thread-131143] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:42:00.544 [DEBUG] [Thread-131143] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:42:00.544 [DEBUG] [Thread-131143] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T16:42:00.544 [DEBUG] [Thread-131143] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:42:00.559 [INFO] [Thread-131143] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:42:00.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:42:01.168 [DEBUG] [Thread-131143] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:42:01.169 [DEBUG] [Thread-131143] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:42:01.169 [DEBUG] [Thread-131143] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T16:42:01.210 [DEBUG] [Thread-131143] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:42:01.210 [DEBUG] [Thread-131143] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:42:01.213 [DEBUG] [Thread-131143] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:42:01.224 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:42:01.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T16:42:01.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T16:42:01.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T16:42:01.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:42:01.235 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T16:42:01.236 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:42:01.236 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:42:01.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T16:42:01.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.611946 -999.00  +24.10  32.12     21   +0.50 1 2 2 1 1   888    0 21.82 -110.78 ----- 30.7 32.1 292.6 43.4 27.1 -14.9 27.0 -15.2 26.6 -15.4 26.9 -13.7
2025-12-31T16:42:01.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T16:42:01.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T16:42:01.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.611946
2025-12-31T16:42:01.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T16:42:01.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T16:42:01.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T16:42:01.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T16:42:01.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T16:42:01.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T16:41:26', tmtdew=28.28, humidity=15.26, cloud=0.0, wind=37.63, temperature=24.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T14:41:12.134', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T16:42:01.238 [DEBUG] [Thread-131143] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:42:01.325 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T16:42:01.337 [DEBUG] [Thread-131146] [transport.py] [_log()] starting thread (client mode): 0xb95f1240
2025-12-31T16:42:01.337 [DEBUG] [Thread-131146] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:42:01.352 [DEBUG] [Thread-131146] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T16:42:01.352 [INFO] [Thread-131146] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T16:42:01.359 [DEBUG] [Thread-131146] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:42:01.359 [DEBUG] [Thread-131146] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T16:42:01.359 [DEBUG] [Thread-131146] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:42:01.359 [DEBUG] [Thread-131146] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:42:01.359 [DEBUG] [Thread-131146] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:42:01.359 [DEBUG] [Thread-131146] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:42:01.359 [DEBUG] [Thread-131146] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:42:01.359 [DEBUG] [Thread-131146] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:42:01.359 [DEBUG] [Thread-131146] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:42:01.359 [DEBUG] [Thread-131146] [transport.py] [_log()] client lang: <none>
2025-12-31T16:42:01.359 [DEBUG] [Thread-131146] [transport.py] [_log()] server lang: <none>
2025-12-31T16:42:01.359 [DEBUG] [Thread-131146] [transport.py] [_log()] kex follows: False
2025-12-31T16:42:01.359 [DEBUG] [Thread-131146] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:42:01.359 [DEBUG] [Thread-131146] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:42:01.359 [DEBUG] [Thread-131146] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:42:01.359 [DEBUG] [Thread-131146] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:42:01.359 [DEBUG] [Thread-131146] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:42:01.360 [DEBUG] [Thread-131146] [transport.py] [_log()] Compression: none
2025-12-31T16:42:01.360 [DEBUG] [Thread-131146] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:42:01.418 [DEBUG] [Thread-131146] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:42:01.418 [DEBUG] [Thread-131146] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:42:01.419 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T16:42:01.420 [DEBUG] [Thread-131146] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T16:42:01.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:42:01.473 [DEBUG] [Thread-131146] [transport.py] [_log()] userauth is OK
2025-12-31T16:42:01.474 [DEBUG] [Thread-131146] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:42:01.474 [DEBUG] [Thread-131146] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:42:01.475 [DEBUG] [Thread-131146] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T16:42:01.475 [DEBUG] [Thread-131146] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:42:01.494 [INFO] [Thread-131146] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:42:01.494 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T16:42:01.495 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:42:02.341 [DEBUG] [Thread-131146] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:42:02.341 [DEBUG] [Thread-131146] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:42:02.389 [DEBUG] [Thread-131146] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:42:02.389 [DEBUG] [Thread-131146] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:42:02.398 [DEBUG] [Thread-131146] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:42:02.407 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:42: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-12-31T16:42: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-12-31T16:42:02.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:42:02.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:42:02.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:42:02.435 [DEBUG] [Thread-131146] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:42:08.382 [DEBUG] [Thread-131148 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:42:18.052 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:42:18.053 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:42:23.434 [DEBUG] [Thread-131149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:42:25.128 [DEBUG] [Thread-131150 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:42:32.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T16:42:32.457 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T16:42:32.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T16:42:33.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 16, 41, 58), 28.14, 15.23, 0.0, 37.58, 24.48, 0, 0, 0, 2, 0, 0),)
2025-12-31T16:42:33.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 16:41:58
2025-12-31T16:42:33.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T16:42:33.513 [DEBUG] [Thread-131151] [transport.py] [_log()] starting thread (client mode): 0xb6bbaad0
2025-12-31T16:42:33.513 [DEBUG] [Thread-131151] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:42:33.533 [DEBUG] [Thread-131151] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T16:42:33.534 [INFO] [Thread-131151] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T16:42:33.537 [DEBUG] [Thread-131151] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:42:33.537 [DEBUG] [Thread-131151] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T16:42:33.537 [DEBUG] [Thread-131151] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:42:33.537 [DEBUG] [Thread-131151] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:42:33.537 [DEBUG] [Thread-131151] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:42:33.537 [DEBUG] [Thread-131151] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:42:33.537 [DEBUG] [Thread-131151] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:42:33.537 [DEBUG] [Thread-131151] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:42:33.537 [DEBUG] [Thread-131151] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:42:33.537 [DEBUG] [Thread-131151] [transport.py] [_log()] client lang: <none>
2025-12-31T16:42:33.537 [DEBUG] [Thread-131151] [transport.py] [_log()] server lang: <none>
2025-12-31T16:42:33.537 [DEBUG] [Thread-131151] [transport.py] [_log()] kex follows: False
2025-12-31T16:42:33.537 [DEBUG] [Thread-131151] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:42:33.537 [DEBUG] [Thread-131151] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:42:33.537 [DEBUG] [Thread-131151] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:42:33.537 [DEBUG] [Thread-131151] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:42:33.537 [DEBUG] [Thread-131151] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:42:33.537 [DEBUG] [Thread-131151] [transport.py] [_log()] Compression: none
2025-12-31T16:42:33.537 [DEBUG] [Thread-131151] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:42:33.553 [DEBUG] [Thread-131151] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:42:33.553 [DEBUG] [Thread-131151] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:42:33.553 [DEBUG] [Thread-131151] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T16:42:33.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T16:42:33.554 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:42:33.555 [DEBUG] [Thread-131151] [transport.py] [_log()] userauth is OK
2025-12-31T16:42:33.555 [DEBUG] [Thread-131151] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:42:33.555 [DEBUG] [Thread-131151] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:42:33.555 [DEBUG] [Thread-131151] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T16:42:33.555 [DEBUG] [Thread-131151] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:42:33.564 [INFO] [Thread-131151] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:42:33.564 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:42:34.300 [DEBUG] [Thread-131151] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:42:34.300 [DEBUG] [Thread-131151] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:42:34.301 [DEBUG] [Thread-131151] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T16:42:34.341 [DEBUG] [Thread-131151] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:42:34.341 [DEBUG] [Thread-131151] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:42:34.343 [DEBUG] [Thread-131151] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:42:34.354 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:42:34.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T16:42:34.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T16:42:34.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T16:42:34.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:42:34.359 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T16:42:34.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:42:34.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:42:34.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T16:42:34.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.612294 -999.00  +24.10  29.51     21   +0.60 1 2 1 1 1   888    0 21.63 -102.12 ----- 26.2 29.5 289.6 42.3 26.9 -15.8 26.9 -15.3 26.6 -14.7 26.8 -14.2
2025-12-31T16:42:34.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T16:42:34.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T16:42:34.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.612294
2025-12-31T16:42:34.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T16:42:34.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T16:42:34.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T16:42:34.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T16:42:34.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T16:42:34.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T16:41:58', tmtdew=28.14, humidity=15.23, cloud=0.0, wind=37.58, temperature=24.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T14:41:42.202', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T16:42:34.360 [DEBUG] [Thread-131151] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:42:34.434 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T16:42:34.446 [DEBUG] [Thread-131154] [transport.py] [_log()] starting thread (client mode): 0xb6b2ae90
2025-12-31T16:42:34.446 [DEBUG] [Thread-131154] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:42:34.460 [DEBUG] [Thread-131154] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T16:42:34.460 [INFO] [Thread-131154] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T16:42:34.468 [DEBUG] [Thread-131154] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:42:34.468 [DEBUG] [Thread-131154] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T16:42:34.468 [DEBUG] [Thread-131154] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:42:34.468 [DEBUG] [Thread-131154] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:42:34.468 [DEBUG] [Thread-131154] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:42:34.468 [DEBUG] [Thread-131154] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:42:34.468 [DEBUG] [Thread-131154] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:42:34.468 [DEBUG] [Thread-131154] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:42:34.468 [DEBUG] [Thread-131154] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:42:34.468 [DEBUG] [Thread-131154] [transport.py] [_log()] client lang: <none>
2025-12-31T16:42:34.468 [DEBUG] [Thread-131154] [transport.py] [_log()] server lang: <none>
2025-12-31T16:42:34.468 [DEBUG] [Thread-131154] [transport.py] [_log()] kex follows: False
2025-12-31T16:42:34.468 [DEBUG] [Thread-131154] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:42:34.468 [DEBUG] [Thread-131154] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:42:34.468 [DEBUG] [Thread-131154] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:42:34.468 [DEBUG] [Thread-131154] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:42:34.468 [DEBUG] [Thread-131154] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:42:34.468 [DEBUG] [Thread-131154] [transport.py] [_log()] Compression: none
2025-12-31T16:42:34.468 [DEBUG] [Thread-131154] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:42:34.524 [DEBUG] [Thread-131154] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:42:34.524 [DEBUG] [Thread-131154] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:42:34.524 [DEBUG] [Thread-131154] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T16:42:34.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T16:42:34.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:42:34.581 [DEBUG] [Thread-131154] [transport.py] [_log()] userauth is OK
2025-12-31T16:42:34.581 [DEBUG] [Thread-131154] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:42:34.581 [DEBUG] [Thread-131154] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:42:34.581 [DEBUG] [Thread-131154] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T16:42:34.581 [DEBUG] [Thread-131154] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:42:34.595 [INFO] [Thread-131154] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:42:34.595 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T16:42:34.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:42:35.415 [DEBUG] [Thread-131154] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:42:35.415 [DEBUG] [Thread-131154] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:42:35.464 [DEBUG] [Thread-131154] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:42:35.464 [DEBUG] [Thread-131154] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:42:35.472 [DEBUG] [Thread-131154] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:42:35.481 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:42:35.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T16:42:35.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T16:42:35.497 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:42:35.498 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:42:35.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:42:35.506 [DEBUG] [Thread-131154] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:42:38.468 [DEBUG] [Thread-131156 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:42:53.519 [DEBUG] [Thread-131157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:43:05.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T16:43:05.528 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T16:43: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-12-31T16:43:06.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 16, 43, 3), 28.31, 15.03, 0.0, 37.64, 24.4, 0, 0, 0, 2, 0, 0),)
2025-12-31T16:43:06.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 16:43:03
2025-12-31T16:43:06.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T16:43:06.526 [DEBUG] [Thread-131158] [transport.py] [_log()] starting thread (client mode): 0xb95f1150
2025-12-31T16:43:06.526 [DEBUG] [Thread-131158] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:43:06.547 [DEBUG] [Thread-131158] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T16:43:06.548 [INFO] [Thread-131158] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T16:43:06.551 [DEBUG] [Thread-131158] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:43:06.551 [DEBUG] [Thread-131158] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T16:43:06.551 [DEBUG] [Thread-131158] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:43:06.551 [DEBUG] [Thread-131158] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:43:06.551 [DEBUG] [Thread-131158] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:43:06.551 [DEBUG] [Thread-131158] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:43:06.551 [DEBUG] [Thread-131158] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:43:06.551 [DEBUG] [Thread-131158] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:43:06.551 [DEBUG] [Thread-131158] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:43:06.551 [DEBUG] [Thread-131158] [transport.py] [_log()] client lang: <none>
2025-12-31T16:43:06.551 [DEBUG] [Thread-131158] [transport.py] [_log()] server lang: <none>
2025-12-31T16:43:06.551 [DEBUG] [Thread-131158] [transport.py] [_log()] kex follows: False
2025-12-31T16:43:06.551 [DEBUG] [Thread-131158] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:43:06.551 [DEBUG] [Thread-131158] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:43:06.551 [DEBUG] [Thread-131158] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:43:06.551 [DEBUG] [Thread-131158] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:43:06.551 [DEBUG] [Thread-131158] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:43:06.551 [DEBUG] [Thread-131158] [transport.py] [_log()] Compression: none
2025-12-31T16:43:06.551 [DEBUG] [Thread-131158] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:43:06.568 [DEBUG] [Thread-131158] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:43:06.569 [DEBUG] [Thread-131158] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:43:06.569 [DEBUG] [Thread-131158] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T16:43:06.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T16:43:06.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:43:06.571 [DEBUG] [Thread-131158] [transport.py] [_log()] userauth is OK
2025-12-31T16:43:06.571 [DEBUG] [Thread-131158] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:43:06.571 [DEBUG] [Thread-131158] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:43:06.571 [DEBUG] [Thread-131158] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T16:43:06.572 [DEBUG] [Thread-131158] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:43:06.595 [INFO] [Thread-131158] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:43:06.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:43:07.223 [DEBUG] [Thread-131158] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:43:07.223 [DEBUG] [Thread-131158] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:43:07.223 [DEBUG] [Thread-131158] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T16:43:07.264 [DEBUG] [Thread-131158] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:43:07.264 [DEBUG] [Thread-131158] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:43:07.266 [DEBUG] [Thread-131158] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:43:07.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:43:07.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T16:43:07.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T16:43:07.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T16:43:07.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:43:07.285 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T16:43:07.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:43:07.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:43:07.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T16:43:07.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.612641 -999.00  +24.10  19.29     21   +0.70 1 2 1 1 1   888    0 21.88 -110.46 ----- 24.8 19.3 301.4 35.6 26.9 -15.8 26.9 -14.6 26.4 -15.3 26.9 -13.2
2025-12-31T16:43:07.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T16:43:07.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T16:43:07.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.612641
2025-12-31T16:43:07.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T16:43:07.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T16:43:07.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T16:43:07.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T16:43:07.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T16:43:07.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T16:43:03', tmtdew=28.31, humidity=15.03, cloud=0.0, wind=37.64, temperature=24.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T14:42:12.182', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T16:43:07.286 [DEBUG] [Thread-131158] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:43:07.361 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T16:43:07.373 [DEBUG] [Thread-131161] [transport.py] [_log()] starting thread (client mode): 0xb95f14e0
2025-12-31T16:43:07.373 [DEBUG] [Thread-131161] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:43:07.387 [DEBUG] [Thread-131161] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T16:43:07.387 [INFO] [Thread-131161] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T16:43:07.398 [DEBUG] [Thread-131161] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:43:07.398 [DEBUG] [Thread-131161] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T16:43:07.398 [DEBUG] [Thread-131161] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:43:07.399 [DEBUG] [Thread-131161] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:43:07.399 [DEBUG] [Thread-131161] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:43:07.399 [DEBUG] [Thread-131161] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:43:07.399 [DEBUG] [Thread-131161] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:43:07.399 [DEBUG] [Thread-131161] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:43:07.399 [DEBUG] [Thread-131161] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:43:07.399 [DEBUG] [Thread-131161] [transport.py] [_log()] client lang: <none>
2025-12-31T16:43:07.399 [DEBUG] [Thread-131161] [transport.py] [_log()] server lang: <none>
2025-12-31T16:43:07.399 [DEBUG] [Thread-131161] [transport.py] [_log()] kex follows: False
2025-12-31T16:43:07.399 [DEBUG] [Thread-131161] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:43:07.399 [DEBUG] [Thread-131161] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:43:07.399 [DEBUG] [Thread-131161] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:43:07.399 [DEBUG] [Thread-131161] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:43:07.399 [DEBUG] [Thread-131161] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:43:07.399 [DEBUG] [Thread-131161] [transport.py] [_log()] Compression: none
2025-12-31T16:43:07.399 [DEBUG] [Thread-131161] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:43:07.457 [DEBUG] [Thread-131161] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:43:07.458 [DEBUG] [Thread-131161] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:43:07.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T16:43:07.459 [DEBUG] [Thread-131161] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T16:43:07.459 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:43:07.513 [DEBUG] [Thread-131161] [transport.py] [_log()] userauth is OK
2025-12-31T16:43:07.513 [DEBUG] [Thread-131161] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:43:07.514 [DEBUG] [Thread-131161] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:43:07.514 [DEBUG] [Thread-131161] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T16:43:07.514 [DEBUG] [Thread-131161] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:43:07.538 [INFO] [Thread-131161] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:43:07.538 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T16:43:07.539 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:43:08.376 [DEBUG] [Thread-131161] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:43:08.377 [DEBUG] [Thread-131161] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:43:08.425 [DEBUG] [Thread-131161] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:43:08.425 [DEBUG] [Thread-131161] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:43:08.434 [DEBUG] [Thread-131161] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:43:08.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:43:08.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T16:43:08.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T16:43:08.462 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:43:08.462 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:43:08.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:43:08.471 [DEBUG] [Thread-131161] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:43:08.558 [DEBUG] [Thread-131163 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:43:18.192 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:43:18.193 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:43:23.617 [DEBUG] [Thread-131164 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:43:25.183 [DEBUG] [Thread-131165 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:43:38.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T16:43:38.494 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T16:43:38.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T16:43:38.652 [DEBUG] [Thread-131166 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:43:39.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 16, 43, 35), 28.12, 15.18, 0.0, 31.64, 24.55, 0, 0, 0, 2, 0, 0),)
2025-12-31T16:43:39.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 16:43:35
2025-12-31T16:43:39.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T16:43:39.476 [DEBUG] [Thread-131167] [transport.py] [_log()] starting thread (client mode): 0xb6bbfbe0
2025-12-31T16:43:39.476 [DEBUG] [Thread-131167] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:43:39.496 [DEBUG] [Thread-131167] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T16:43:39.496 [INFO] [Thread-131167] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T16:43:39.499 [DEBUG] [Thread-131167] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:43:39.499 [DEBUG] [Thread-131167] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T16:43:39.499 [DEBUG] [Thread-131167] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:43:39.499 [DEBUG] [Thread-131167] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:43:39.499 [DEBUG] [Thread-131167] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:43:39.499 [DEBUG] [Thread-131167] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:43:39.499 [DEBUG] [Thread-131167] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:43:39.499 [DEBUG] [Thread-131167] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:43:39.499 [DEBUG] [Thread-131167] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:43:39.499 [DEBUG] [Thread-131167] [transport.py] [_log()] client lang: <none>
2025-12-31T16:43:39.500 [DEBUG] [Thread-131167] [transport.py] [_log()] server lang: <none>
2025-12-31T16:43:39.500 [DEBUG] [Thread-131167] [transport.py] [_log()] kex follows: False
2025-12-31T16:43:39.500 [DEBUG] [Thread-131167] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:43:39.500 [DEBUG] [Thread-131167] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:43:39.500 [DEBUG] [Thread-131167] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:43:39.500 [DEBUG] [Thread-131167] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:43:39.500 [DEBUG] [Thread-131167] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:43:39.500 [DEBUG] [Thread-131167] [transport.py] [_log()] Compression: none
2025-12-31T16:43:39.500 [DEBUG] [Thread-131167] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:43:39.519 [DEBUG] [Thread-131167] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:43:39.520 [DEBUG] [Thread-131167] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:43:39.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T16:43:39.521 [DEBUG] [Thread-131167] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T16:43:39.522 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:43:39.523 [DEBUG] [Thread-131167] [transport.py] [_log()] userauth is OK
2025-12-31T16:43:39.524 [DEBUG] [Thread-131167] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:43:39.524 [DEBUG] [Thread-131167] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:43:39.524 [DEBUG] [Thread-131167] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T16:43:39.524 [DEBUG] [Thread-131167] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:43:39.548 [INFO] [Thread-131167] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:43:39.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:43:40.344 [DEBUG] [Thread-131167] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:43:40.344 [DEBUG] [Thread-131167] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:43:40.345 [DEBUG] [Thread-131167] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T16:43:40.385 [DEBUG] [Thread-131167] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:43:40.385 [DEBUG] [Thread-131167] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:43:40.388 [DEBUG] [Thread-131167] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:43:40.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:43:40.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T16:43:40.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T16:43:40.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T16:43:40.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:43:40.407 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T16:43:40.407 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:43:40.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:43:40.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T16:43:40.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.612988 -999.00  +24.30  25.97     21   +0.60 1 2 1 1 1   888    0 21.34 -111.78 ----- 21.5 26.0 278.0 30.3 27.0 -14.2 26.9 -14.5 26.5 -14.0 26.8 -13.1
2025-12-31T16:43:40.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T16:43:40.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T16:43:40.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.612988
2025-12-31T16:43:40.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T16:43:40.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T16:43:40.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T16:43:40.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T16:43:40.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T16:43:40.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T16:43:35', tmtdew=28.12, humidity=15.18, cloud=0.0, wind=31.64, temperature=24.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T14:42:42.163', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T16:43:40.410 [DEBUG] [Thread-131167] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:43:40.493 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T16:43:40.505 [DEBUG] [Thread-131170] [transport.py] [_log()] starting thread (client mode): 0xb95f3fa0
2025-12-31T16:43:40.505 [DEBUG] [Thread-131170] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:43:40.519 [DEBUG] [Thread-131170] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T16:43:40.520 [INFO] [Thread-131170] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T16:43:40.527 [DEBUG] [Thread-131170] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:43:40.528 [DEBUG] [Thread-131170] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T16:43:40.528 [DEBUG] [Thread-131170] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:43:40.528 [DEBUG] [Thread-131170] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:43:40.528 [DEBUG] [Thread-131170] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:43:40.528 [DEBUG] [Thread-131170] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:43:40.528 [DEBUG] [Thread-131170] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:43:40.528 [DEBUG] [Thread-131170] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:43:40.528 [DEBUG] [Thread-131170] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:43:40.528 [DEBUG] [Thread-131170] [transport.py] [_log()] client lang: <none>
2025-12-31T16:43:40.528 [DEBUG] [Thread-131170] [transport.py] [_log()] server lang: <none>
2025-12-31T16:43:40.528 [DEBUG] [Thread-131170] [transport.py] [_log()] kex follows: False
2025-12-31T16:43:40.528 [DEBUG] [Thread-131170] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:43:40.528 [DEBUG] [Thread-131170] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:43:40.528 [DEBUG] [Thread-131170] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:43:40.528 [DEBUG] [Thread-131170] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:43:40.528 [DEBUG] [Thread-131170] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:43:40.528 [DEBUG] [Thread-131170] [transport.py] [_log()] Compression: none
2025-12-31T16:43:40.528 [DEBUG] [Thread-131170] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:43:40.584 [DEBUG] [Thread-131170] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:43:40.585 [DEBUG] [Thread-131170] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:43:40.585 [DEBUG] [Thread-131170] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T16:43:40.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T16:43:40.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:43:40.641 [DEBUG] [Thread-131170] [transport.py] [_log()] userauth is OK
2025-12-31T16:43:40.641 [DEBUG] [Thread-131170] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:43:40.642 [DEBUG] [Thread-131170] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:43:40.642 [DEBUG] [Thread-131170] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T16:43:40.642 [DEBUG] [Thread-131170] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:43:40.660 [INFO] [Thread-131170] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:43:40.660 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T16:43:40.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:43:41.490 [DEBUG] [Thread-131170] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:43:41.490 [DEBUG] [Thread-131170] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:43:41.538 [DEBUG] [Thread-131170] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:43:41.538 [DEBUG] [Thread-131170] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:43:41.547 [DEBUG] [Thread-131170] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:43:41.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:43:41.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T16:43:41.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T16:43:41.573 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:43:41.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:43:41.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:43:41.581 [DEBUG] [Thread-131170] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:43:53.682 [DEBUG] [Thread-131172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:44:08.721 [DEBUG] [Thread-131173 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:44:11.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T16:44:11.604 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T16:44:11.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T16:44:12.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 16, 44, 7), 27.91, 15.4, 0.0, 32.94, 24.5, 0, 0, 0, 2, 0, 0),)
2025-12-31T16:44:12.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 16:44:07
2025-12-31T16:44:12.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T16:44:12.593 [DEBUG] [Thread-131174] [transport.py] [_log()] starting thread (client mode): 0xb6bbff10
2025-12-31T16:44:12.593 [DEBUG] [Thread-131174] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:44:12.613 [DEBUG] [Thread-131174] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T16:44:12.613 [INFO] [Thread-131174] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T16:44:12.616 [DEBUG] [Thread-131174] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:44:12.617 [DEBUG] [Thread-131174] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T16:44:12.617 [DEBUG] [Thread-131174] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:44:12.617 [DEBUG] [Thread-131174] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:44:12.617 [DEBUG] [Thread-131174] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:44:12.617 [DEBUG] [Thread-131174] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:44:12.617 [DEBUG] [Thread-131174] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:44:12.617 [DEBUG] [Thread-131174] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:44:12.617 [DEBUG] [Thread-131174] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:44:12.617 [DEBUG] [Thread-131174] [transport.py] [_log()] client lang: <none>
2025-12-31T16:44:12.617 [DEBUG] [Thread-131174] [transport.py] [_log()] server lang: <none>
2025-12-31T16:44:12.617 [DEBUG] [Thread-131174] [transport.py] [_log()] kex follows: False
2025-12-31T16:44:12.617 [DEBUG] [Thread-131174] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:44:12.617 [DEBUG] [Thread-131174] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:44:12.617 [DEBUG] [Thread-131174] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:44:12.617 [DEBUG] [Thread-131174] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:44:12.617 [DEBUG] [Thread-131174] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:44:12.617 [DEBUG] [Thread-131174] [transport.py] [_log()] Compression: none
2025-12-31T16:44:12.617 [DEBUG] [Thread-131174] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:44:12.634 [DEBUG] [Thread-131174] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:44:12.634 [DEBUG] [Thread-131174] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:44:12.635 [DEBUG] [Thread-131174] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T16:44:12.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T16:44:12.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:44:12.636 [DEBUG] [Thread-131174] [transport.py] [_log()] userauth is OK
2025-12-31T16:44:12.636 [DEBUG] [Thread-131174] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:44:12.636 [DEBUG] [Thread-131174] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:44:12.637 [DEBUG] [Thread-131174] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T16:44:12.637 [DEBUG] [Thread-131174] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:44:12.660 [INFO] [Thread-131174] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:44:12.661 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:44:13.274 [DEBUG] [Thread-131174] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:44:13.274 [DEBUG] [Thread-131174] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:44:13.275 [DEBUG] [Thread-131174] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T16:44:13.315 [DEBUG] [Thread-131174] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:44:13.315 [DEBUG] [Thread-131174] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:44:13.318 [DEBUG] [Thread-131174] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:44:13.329 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:44:13.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T16:44:13.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T16:44:13.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T16:44:13.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:44:13.341 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T16:44:13.341 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:44:13.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:44:13.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T16:44:13.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.613335 -999.00  +24.30  26.63     21   +0.60 1 2 1 1 1   888    0 21.15 -113.08 ----- 27.1 26.6 304.8 34.6 26.9 -14.2 26.9 -14.3 26.5 -13.1 26.8 -12.8
2025-12-31T16:44:13.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T16:44:13.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T16:44:13.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.613335
2025-12-31T16:44:13.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T16:44:13.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T16:44:13.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T16:44:13.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T16:44:13.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T16:44:13.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T16:44:07', tmtdew=27.91, humidity=15.4, cloud=0.0, wind=32.94, temperature=24.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T14:43:12.144', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T16:44:13.344 [DEBUG] [Thread-131174] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:44:13.427 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T16:44:13.441 [DEBUG] [Thread-131177] [transport.py] [_log()] starting thread (client mode): 0xb9591990
2025-12-31T16:44:13.441 [DEBUG] [Thread-131177] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:44:13.456 [DEBUG] [Thread-131177] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T16:44:13.456 [INFO] [Thread-131177] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T16:44:13.464 [DEBUG] [Thread-131177] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:44:13.464 [DEBUG] [Thread-131177] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T16:44:13.464 [DEBUG] [Thread-131177] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:44:13.464 [DEBUG] [Thread-131177] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:44:13.464 [DEBUG] [Thread-131177] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:44:13.464 [DEBUG] [Thread-131177] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:44:13.464 [DEBUG] [Thread-131177] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:44:13.464 [DEBUG] [Thread-131177] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:44:13.464 [DEBUG] [Thread-131177] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:44:13.464 [DEBUG] [Thread-131177] [transport.py] [_log()] client lang: <none>
2025-12-31T16:44:13.464 [DEBUG] [Thread-131177] [transport.py] [_log()] server lang: <none>
2025-12-31T16:44:13.464 [DEBUG] [Thread-131177] [transport.py] [_log()] kex follows: False
2025-12-31T16:44:13.464 [DEBUG] [Thread-131177] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:44:13.464 [DEBUG] [Thread-131177] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:44:13.464 [DEBUG] [Thread-131177] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:44:13.465 [DEBUG] [Thread-131177] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:44:13.465 [DEBUG] [Thread-131177] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:44:13.465 [DEBUG] [Thread-131177] [transport.py] [_log()] Compression: none
2025-12-31T16:44:13.465 [DEBUG] [Thread-131177] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:44:13.521 [DEBUG] [Thread-131177] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:44:13.521 [DEBUG] [Thread-131177] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:44:13.522 [DEBUG] [Thread-131177] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T16:44:13.522 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T16:44:13.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:44:13.577 [DEBUG] [Thread-131177] [transport.py] [_log()] userauth is OK
2025-12-31T16:44:13.577 [DEBUG] [Thread-131177] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:44:13.577 [DEBUG] [Thread-131177] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:44:13.577 [DEBUG] [Thread-131177] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T16:44:13.577 [DEBUG] [Thread-131177] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:44:13.595 [INFO] [Thread-131177] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:44:13.596 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T16:44:13.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:44:14.419 [DEBUG] [Thread-131177] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:44:14.419 [DEBUG] [Thread-131177] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:44:14.467 [DEBUG] [Thread-131177] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:44:14.467 [DEBUG] [Thread-131177] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:44:14.476 [DEBUG] [Thread-131177] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:44:14.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:44:14.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-12-31T16:44:14.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T16:44:14.506 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:44:14.506 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:44:14.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:44:14.514 [DEBUG] [Thread-131177] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:44:18.332 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:44:18.333 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:44:23.758 [DEBUG] [Thread-131179 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:44:25.235 [DEBUG] [Thread-131180 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:44:38.805 [DEBUG] [Thread-131181 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:44:44.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T16:44:44.536 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T16:44:44.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T16:44:45.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 16, 44, 39), 27.95, 15.35, 0.0, 30.56, 24.33, 0, 0, 0, 2, 0, 0),)
2025-12-31T16:44:45.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 16:44:39
2025-12-31T16:44:45.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T16:44:45.528 [DEBUG] [Thread-131182] [transport.py] [_log()] starting thread (client mode): 0xb6ba1540
2025-12-31T16:44:45.528 [DEBUG] [Thread-131182] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:44:45.549 [DEBUG] [Thread-131182] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T16:44:45.549 [INFO] [Thread-131182] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T16:44:45.552 [DEBUG] [Thread-131182] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:44:45.552 [DEBUG] [Thread-131182] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T16:44:45.552 [DEBUG] [Thread-131182] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:44:45.552 [DEBUG] [Thread-131182] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:44:45.552 [DEBUG] [Thread-131182] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:44:45.552 [DEBUG] [Thread-131182] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:44:45.552 [DEBUG] [Thread-131182] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:44:45.552 [DEBUG] [Thread-131182] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:44:45.552 [DEBUG] [Thread-131182] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:44:45.552 [DEBUG] [Thread-131182] [transport.py] [_log()] client lang: <none>
2025-12-31T16:44:45.552 [DEBUG] [Thread-131182] [transport.py] [_log()] server lang: <none>
2025-12-31T16:44:45.552 [DEBUG] [Thread-131182] [transport.py] [_log()] kex follows: False
2025-12-31T16:44:45.552 [DEBUG] [Thread-131182] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:44:45.552 [DEBUG] [Thread-131182] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:44:45.552 [DEBUG] [Thread-131182] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:44:45.552 [DEBUG] [Thread-131182] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:44:45.552 [DEBUG] [Thread-131182] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:44:45.552 [DEBUG] [Thread-131182] [transport.py] [_log()] Compression: none
2025-12-31T16:44:45.552 [DEBUG] [Thread-131182] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:44:45.567 [DEBUG] [Thread-131182] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:44:45.567 [DEBUG] [Thread-131182] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:44:45.567 [DEBUG] [Thread-131182] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T16:44:45.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T16:44:45.568 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:44:45.568 [DEBUG] [Thread-131182] [transport.py] [_log()] userauth is OK
2025-12-31T16:44:45.568 [DEBUG] [Thread-131182] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:44:45.569 [DEBUG] [Thread-131182] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:44:45.569 [DEBUG] [Thread-131182] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T16:44:45.569 [DEBUG] [Thread-131182] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:44:45.579 [INFO] [Thread-131182] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:44:45.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:44:46.315 [DEBUG] [Thread-131182] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:44:46.316 [DEBUG] [Thread-131182] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:44:46.316 [DEBUG] [Thread-131182] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T16:44:46.357 [DEBUG] [Thread-131182] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:44:46.357 [DEBUG] [Thread-131182] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:44:46.361 [DEBUG] [Thread-131182] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:44:46.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:44:46.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T16:44:46.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T16:44:46.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T16:44:46.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:44:46.388 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T16:44:46.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:44:46.388 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:44:46.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T16:44:46.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.614030 -999.00  +24.40  30.28     21   +0.60 1 2 2 1 1   888    0 21.49 -105.59 ----- 27.5 30.3 300.6 36.3 27.1 -14.1 27.1 -14.3 26.6 -13.1 26.9 -12.8
2025-12-31T16:44:46.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T16:44:46.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T16:44:46.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.614030
2025-12-31T16:44:46.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T16:44:46.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T16:44:46.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T16:44:46.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T16:44:46.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T16:44:46.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T16:44:39', tmtdew=27.95, humidity=15.35, cloud=0.0, wind=30.56, temperature=24.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T14:44:12.192', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T16:44:46.391 [DEBUG] [Thread-131182] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:44:46.474 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T16:44:46.485 [DEBUG] [Thread-131185] [transport.py] [_log()] starting thread (client mode): 0xb9591a50
2025-12-31T16:44:46.485 [DEBUG] [Thread-131185] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:44:46.500 [DEBUG] [Thread-131185] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T16:44:46.500 [INFO] [Thread-131185] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T16:44:46.507 [DEBUG] [Thread-131185] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:44:46.508 [DEBUG] [Thread-131185] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T16:44:46.508 [DEBUG] [Thread-131185] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:44:46.508 [DEBUG] [Thread-131185] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:44:46.508 [DEBUG] [Thread-131185] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:44:46.508 [DEBUG] [Thread-131185] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:44:46.508 [DEBUG] [Thread-131185] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:44:46.508 [DEBUG] [Thread-131185] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:44:46.508 [DEBUG] [Thread-131185] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:44:46.508 [DEBUG] [Thread-131185] [transport.py] [_log()] client lang: <none>
2025-12-31T16:44:46.509 [DEBUG] [Thread-131185] [transport.py] [_log()] server lang: <none>
2025-12-31T16:44:46.509 [DEBUG] [Thread-131185] [transport.py] [_log()] kex follows: False
2025-12-31T16:44:46.509 [DEBUG] [Thread-131185] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:44:46.509 [DEBUG] [Thread-131185] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:44:46.509 [DEBUG] [Thread-131185] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:44:46.509 [DEBUG] [Thread-131185] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:44:46.509 [DEBUG] [Thread-131185] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:44:46.510 [DEBUG] [Thread-131185] [transport.py] [_log()] Compression: none
2025-12-31T16:44:46.510 [DEBUG] [Thread-131185] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:44:46.565 [DEBUG] [Thread-131185] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:44:46.565 [DEBUG] [Thread-131185] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:44:46.566 [DEBUG] [Thread-131185] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T16:44:46.566 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T16:44:46.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:44:46.620 [DEBUG] [Thread-131185] [transport.py] [_log()] userauth is OK
2025-12-31T16:44:46.621 [DEBUG] [Thread-131185] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:44:46.621 [DEBUG] [Thread-131185] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:44:46.621 [DEBUG] [Thread-131185] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T16:44:46.621 [DEBUG] [Thread-131185] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:44:46.639 [INFO] [Thread-131185] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:44:46.639 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T16:44:46.640 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:44:47.492 [DEBUG] [Thread-131185] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:44:47.492 [DEBUG] [Thread-131185] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:44:47.540 [DEBUG] [Thread-131185] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:44:47.540 [DEBUG] [Thread-131185] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:44:47.550 [DEBUG] [Thread-131185] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:44:47.558 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:44:47.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T16:44:47.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T16:44:47.577 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:44:47.578 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:44:47.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:44:47.586 [DEBUG] [Thread-131185] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:44:53.842 [DEBUG] [Thread-131187 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:45:08.891 [DEBUG] [Thread-131188 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:45:17.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T16:45:17.609 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T16:45: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-12-31T16:45:18.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 16, 45, 12), 28.06, 15.25, 0.0, 28.06, 24.42, 0, 0, 0, 2, 0, 0),)
2025-12-31T16:45:18.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 16:45:12
2025-12-31T16:45:18.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T16:45:18.470 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:45:18.471 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:45:18.595 [DEBUG] [Thread-131189] [transport.py] [_log()] starting thread (client mode): 0xb9590880
2025-12-31T16:45:18.595 [DEBUG] [Thread-131189] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:45:18.616 [DEBUG] [Thread-131189] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T16:45:18.616 [INFO] [Thread-131189] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T16:45:18.619 [DEBUG] [Thread-131189] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:45:18.619 [DEBUG] [Thread-131189] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T16:45:18.619 [DEBUG] [Thread-131189] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:45:18.619 [DEBUG] [Thread-131189] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:45:18.619 [DEBUG] [Thread-131189] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:45:18.619 [DEBUG] [Thread-131189] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:45:18.619 [DEBUG] [Thread-131189] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:45:18.619 [DEBUG] [Thread-131189] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:45:18.619 [DEBUG] [Thread-131189] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:45:18.619 [DEBUG] [Thread-131189] [transport.py] [_log()] client lang: <none>
2025-12-31T16:45:18.619 [DEBUG] [Thread-131189] [transport.py] [_log()] server lang: <none>
2025-12-31T16:45:18.619 [DEBUG] [Thread-131189] [transport.py] [_log()] kex follows: False
2025-12-31T16:45:18.619 [DEBUG] [Thread-131189] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:45:18.619 [DEBUG] [Thread-131189] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:45:18.619 [DEBUG] [Thread-131189] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:45:18.619 [DEBUG] [Thread-131189] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:45:18.619 [DEBUG] [Thread-131189] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:45:18.619 [DEBUG] [Thread-131189] [transport.py] [_log()] Compression: none
2025-12-31T16:45:18.619 [DEBUG] [Thread-131189] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:45:18.636 [DEBUG] [Thread-131189] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:45:18.637 [DEBUG] [Thread-131189] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:45:18.638 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T16:45:18.638 [DEBUG] [Thread-131189] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T16:45:18.639 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:45:18.681 [DEBUG] [Thread-131189] [transport.py] [_log()] userauth is OK
2025-12-31T16:45:18.681 [DEBUG] [Thread-131189] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:45:18.682 [DEBUG] [Thread-131189] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:45:18.682 [DEBUG] [Thread-131189] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T16:45:18.682 [DEBUG] [Thread-131189] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:45:18.716 [INFO] [Thread-131189] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:45:18.718 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:45:20.714 [DEBUG] [Thread-131189] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:45:20.715 [DEBUG] [Thread-131189] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:45:20.716 [DEBUG] [Thread-131189] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T16:45:20.757 [DEBUG] [Thread-131189] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:45:20.757 [DEBUG] [Thread-131189] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:45:20.760 [DEBUG] [Thread-131189] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:45:20.773 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:45:20.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T16:45:20.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T16:45:20.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T16:45:20.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:45:20.795 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T16:45:20.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:45:20.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:45:20.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T16:45:20.796 [WARNING] [poll_weather_worker] [driver.py] [poll_weather_state()] Unable to get atlas cloud data: list index out of range
2025-12-31T16:45:20.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T16:45:12', tmtdew=28.06, humidity=15.25, cloud=0.0, wind=28.06, temperature=24.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp=None, atlas_cloud=None, atlas_rain=None, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T16:45:20.797 [DEBUG] [Thread-131189] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:45:20.878 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T16:45:20.892 [DEBUG] [Thread-131192] [transport.py] [_log()] starting thread (client mode): 0xb95f30d0
2025-12-31T16:45:20.892 [DEBUG] [Thread-131192] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:45:20.909 [DEBUG] [Thread-131192] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T16:45:20.910 [INFO] [Thread-131192] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T16:45:20.917 [DEBUG] [Thread-131192] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:45:20.917 [DEBUG] [Thread-131192] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T16:45:20.918 [DEBUG] [Thread-131192] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:45:20.918 [DEBUG] [Thread-131192] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:45:20.918 [DEBUG] [Thread-131192] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:45:20.918 [DEBUG] [Thread-131192] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:45:20.918 [DEBUG] [Thread-131192] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:45:20.918 [DEBUG] [Thread-131192] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:45:20.918 [DEBUG] [Thread-131192] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:45:20.918 [DEBUG] [Thread-131192] [transport.py] [_log()] client lang: <none>
2025-12-31T16:45:20.918 [DEBUG] [Thread-131192] [transport.py] [_log()] server lang: <none>
2025-12-31T16:45:20.918 [DEBUG] [Thread-131192] [transport.py] [_log()] kex follows: False
2025-12-31T16:45:20.918 [DEBUG] [Thread-131192] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:45:20.918 [DEBUG] [Thread-131192] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:45:20.918 [DEBUG] [Thread-131192] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:45:20.918 [DEBUG] [Thread-131192] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:45:20.918 [DEBUG] [Thread-131192] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:45:20.919 [DEBUG] [Thread-131192] [transport.py] [_log()] Compression: none
2025-12-31T16:45:20.919 [DEBUG] [Thread-131192] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:45:20.978 [DEBUG] [Thread-131192] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:45:20.978 [DEBUG] [Thread-131192] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:45:20.979 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T16:45:20.979 [DEBUG] [Thread-131192] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T16:45:20.980 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:45:21.037 [DEBUG] [Thread-131192] [transport.py] [_log()] userauth is OK
2025-12-31T16:45:21.037 [DEBUG] [Thread-131192] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:45:21.037 [DEBUG] [Thread-131192] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:45:21.038 [DEBUG] [Thread-131192] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T16:45:21.038 [DEBUG] [Thread-131192] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:45:21.056 [INFO] [Thread-131192] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:45:21.057 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T16:45:21.057 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:45:21.876 [DEBUG] [Thread-131192] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:45:21.877 [DEBUG] [Thread-131192] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:45:21.925 [DEBUG] [Thread-131192] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:45:21.925 [DEBUG] [Thread-131192] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:45:21.935 [DEBUG] [Thread-131192] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:45:21.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:45:21.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T16:45:21.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T16:45:21.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:45:21.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:45:21.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:45:21.976 [DEBUG] [Thread-131192] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:45:23.921 [DEBUG] [Thread-131194 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:45:25.293 [DEBUG] [Thread-131195 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:45:38.974 [DEBUG] [Thread-131196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:45:51.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T16:45:51.999 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T16:45:52.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T16:45:52.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 16, 45, 44), 28.2, 15.12, 0.0, 25.37, 24.57, 0, 0, 0, 2, 0, 0),)
2025-12-31T16:45:52.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 16:45:44
2025-12-31T16:45:52.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T16:45:52.982 [DEBUG] [Thread-131197] [transport.py] [_log()] starting thread (client mode): 0xb6bbf2e0
2025-12-31T16:45:52.982 [DEBUG] [Thread-131197] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:45:53.002 [DEBUG] [Thread-131197] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T16:45:53.002 [INFO] [Thread-131197] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T16:45:53.005 [DEBUG] [Thread-131197] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:45:53.005 [DEBUG] [Thread-131197] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T16:45:53.005 [DEBUG] [Thread-131197] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:45:53.005 [DEBUG] [Thread-131197] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:45:53.005 [DEBUG] [Thread-131197] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:45:53.005 [DEBUG] [Thread-131197] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:45:53.005 [DEBUG] [Thread-131197] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:45:53.005 [DEBUG] [Thread-131197] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:45:53.005 [DEBUG] [Thread-131197] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:45:53.005 [DEBUG] [Thread-131197] [transport.py] [_log()] client lang: <none>
2025-12-31T16:45:53.005 [DEBUG] [Thread-131197] [transport.py] [_log()] server lang: <none>
2025-12-31T16:45:53.005 [DEBUG] [Thread-131197] [transport.py] [_log()] kex follows: False
2025-12-31T16:45:53.005 [DEBUG] [Thread-131197] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:45:53.005 [DEBUG] [Thread-131197] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:45:53.005 [DEBUG] [Thread-131197] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:45:53.005 [DEBUG] [Thread-131197] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:45:53.005 [DEBUG] [Thread-131197] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:45:53.005 [DEBUG] [Thread-131197] [transport.py] [_log()] Compression: none
2025-12-31T16:45:53.005 [DEBUG] [Thread-131197] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:45:53.024 [DEBUG] [Thread-131197] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:45:53.025 [DEBUG] [Thread-131197] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:45:53.025 [DEBUG] [Thread-131197] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T16:45:53.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T16:45:53.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:45:53.027 [DEBUG] [Thread-131197] [transport.py] [_log()] userauth is OK
2025-12-31T16:45:53.028 [DEBUG] [Thread-131197] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:45:53.028 [DEBUG] [Thread-131197] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:45:53.028 [DEBUG] [Thread-131197] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T16:45:53.028 [DEBUG] [Thread-131197] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:45:53.053 [INFO] [Thread-131197] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:45:53.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:45:53.643 [DEBUG] [Thread-131197] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:45:53.643 [DEBUG] [Thread-131197] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:45:53.644 [DEBUG] [Thread-131197] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T16:45:53.684 [DEBUG] [Thread-131197] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:45:53.684 [DEBUG] [Thread-131197] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:45:53.689 [DEBUG] [Thread-131197] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:45:53.702 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:45:53.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T16:45:53.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T16:45:53.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T16:45:53.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:45:53.712 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T16:45:53.712 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:45:53.712 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:45:53.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T16:45:53.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.614724 -999.00  +24.60  20.07     20   +0.70 1 2 1 1 1   888    0 21.61 -93.60 ----- 20.5 20.1 295.8 27.8 27.1 -14.0 27.1 -14.2 26.7 -13.8 26.9 -13.0
2025-12-31T16:45:53.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T16:45:53.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T16:45:53.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.614724
2025-12-31T16:45:53.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T16:45:53.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T16:45:53.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T16:45:53.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T16:45:53.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T16:45:53.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T16:45:44', tmtdew=28.2, humidity=15.12, cloud=0.0, wind=25.37, temperature=24.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T14:45:12.154', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T16:45:53.715 [DEBUG] [Thread-131197] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:45:53.798 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T16:45:53.808 [DEBUG] [Thread-131200] [transport.py] [_log()] starting thread (client mode): 0xb6bb8e80
2025-12-31T16:45:53.809 [DEBUG] [Thread-131200] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:45:53.824 [DEBUG] [Thread-131200] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T16:45:53.824 [INFO] [Thread-131200] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T16:45:53.832 [DEBUG] [Thread-131200] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:45:53.832 [DEBUG] [Thread-131200] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T16:45:53.832 [DEBUG] [Thread-131200] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:45:53.832 [DEBUG] [Thread-131200] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:45:53.832 [DEBUG] [Thread-131200] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:45:53.832 [DEBUG] [Thread-131200] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:45:53.832 [DEBUG] [Thread-131200] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:45:53.832 [DEBUG] [Thread-131200] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:45:53.832 [DEBUG] [Thread-131200] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:45:53.832 [DEBUG] [Thread-131200] [transport.py] [_log()] client lang: <none>
2025-12-31T16:45:53.832 [DEBUG] [Thread-131200] [transport.py] [_log()] server lang: <none>
2025-12-31T16:45:53.832 [DEBUG] [Thread-131200] [transport.py] [_log()] kex follows: False
2025-12-31T16:45:53.833 [DEBUG] [Thread-131200] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:45:53.833 [DEBUG] [Thread-131200] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:45:53.833 [DEBUG] [Thread-131200] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:45:53.833 [DEBUG] [Thread-131200] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:45:53.833 [DEBUG] [Thread-131200] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:45:53.833 [DEBUG] [Thread-131200] [transport.py] [_log()] Compression: none
2025-12-31T16:45:53.833 [DEBUG] [Thread-131200] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:45:53.892 [DEBUG] [Thread-131200] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:45:53.893 [DEBUG] [Thread-131200] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:45:53.894 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T16:45:53.894 [DEBUG] [Thread-131200] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T16:45:53.895 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:45:53.948 [DEBUG] [Thread-131200] [transport.py] [_log()] userauth is OK
2025-12-31T16:45:53.949 [DEBUG] [Thread-131200] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:45:53.949 [DEBUG] [Thread-131200] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:45:53.949 [DEBUG] [Thread-131200] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T16:45:53.949 [DEBUG] [Thread-131200] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:45:53.975 [INFO] [Thread-131200] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:45:53.975 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T16:45:53.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:45:54.005 [DEBUG] [Thread-131202 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:45:54.840 [DEBUG] [Thread-131200] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:45:54.841 [DEBUG] [Thread-131200] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:45:54.889 [DEBUG] [Thread-131200] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:45:54.889 [DEBUG] [Thread-131200] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:45:54.898 [DEBUG] [Thread-131200] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:45:54.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:45:54.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T16:45:54.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T16:45:54.926 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:45:54.926 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:45:54.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:45:54.936 [DEBUG] [Thread-131200] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:46:09.057 [DEBUG] [Thread-131203 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:46:18.610 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:46:18.612 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:46:24.093 [DEBUG] [Thread-131204 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:46:24.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T16:46:24.958 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T16:46:24.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T16:46:25.347 [DEBUG] [Thread-131205 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:46:25.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 16, 46, 16), 28.3, 15.03, 0.0, 28.04, 24.65, 0, 0, 0, 2, 0, 0),)
2025-12-31T16:46:25.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 16:46:16
2025-12-31T16:46:25.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T16:46:26.038 [DEBUG] [Thread-131206] [transport.py] [_log()] starting thread (client mode): 0xb95d49d0
2025-12-31T16:46:26.038 [DEBUG] [Thread-131206] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:46:26.057 [DEBUG] [Thread-131206] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T16:46:26.058 [INFO] [Thread-131206] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T16:46:26.059 [DEBUG] [Thread-131206] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:46:26.059 [DEBUG] [Thread-131206] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T16:46:26.059 [DEBUG] [Thread-131206] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:46:26.059 [DEBUG] [Thread-131206] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:46:26.059 [DEBUG] [Thread-131206] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:46:26.059 [DEBUG] [Thread-131206] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:46:26.059 [DEBUG] [Thread-131206] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:46:26.059 [DEBUG] [Thread-131206] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:46:26.059 [DEBUG] [Thread-131206] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:46:26.059 [DEBUG] [Thread-131206] [transport.py] [_log()] client lang: <none>
2025-12-31T16:46:26.059 [DEBUG] [Thread-131206] [transport.py] [_log()] server lang: <none>
2025-12-31T16:46:26.059 [DEBUG] [Thread-131206] [transport.py] [_log()] kex follows: False
2025-12-31T16:46:26.059 [DEBUG] [Thread-131206] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:46:26.059 [DEBUG] [Thread-131206] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:46:26.059 [DEBUG] [Thread-131206] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:46:26.059 [DEBUG] [Thread-131206] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:46:26.059 [DEBUG] [Thread-131206] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:46:26.059 [DEBUG] [Thread-131206] [transport.py] [_log()] Compression: none
2025-12-31T16:46:26.059 [DEBUG] [Thread-131206] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:46:26.071 [DEBUG] [Thread-131206] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:46:26.071 [DEBUG] [Thread-131206] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:46:26.071 [DEBUG] [Thread-131206] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T16:46:26.071 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T16:46:26.071 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:46:26.072 [DEBUG] [Thread-131206] [transport.py] [_log()] userauth is OK
2025-12-31T16:46:26.072 [DEBUG] [Thread-131206] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:46:26.072 [DEBUG] [Thread-131206] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:46:26.072 [DEBUG] [Thread-131206] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T16:46:26.072 [DEBUG] [Thread-131206] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:46:26.081 [INFO] [Thread-131206] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:46:26.081 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:46:26.814 [DEBUG] [Thread-131206] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:46:26.814 [DEBUG] [Thread-131206] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:46:26.814 [DEBUG] [Thread-131206] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T16:46:26.855 [DEBUG] [Thread-131206] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:46:26.856 [DEBUG] [Thread-131206] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:46:26.858 [DEBUG] [Thread-131206] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:46:26.870 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:46:26.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T16:46:26.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T16:46:26.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T16:46:26.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:46:26.877 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T16:46:26.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:46:26.878 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:46:26.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T16:46:26.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.615071 -999.00  +24.60  22.65     20   +0.70 1 2 1 1 1   888    0 21.70 -95.15 ----- 28.9 22.6 287.9 27.0 27.2 -14.5 27.1 -14.8 26.6 -15.8 26.9 -13.7
2025-12-31T16:46:26.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T16:46:26.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T16:46:26.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.615071
2025-12-31T16:46:26.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T16:46:26.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T16:46:26.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T16:46:26.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T16:46:26.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T16:46:26.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T16:46:16', tmtdew=28.3, humidity=15.03, cloud=0.0, wind=28.04, temperature=24.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T14:45:42.134', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T16:46:26.879 [DEBUG] [Thread-131206] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:46:26.958 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T16:46:26.969 [DEBUG] [Thread-131209] [transport.py] [_log()] starting thread (client mode): 0xb6b623e0
2025-12-31T16:46:26.969 [DEBUG] [Thread-131209] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:46:26.984 [DEBUG] [Thread-131209] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T16:46:26.984 [INFO] [Thread-131209] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T16:46:26.992 [DEBUG] [Thread-131209] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:46:26.992 [DEBUG] [Thread-131209] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T16:46:26.992 [DEBUG] [Thread-131209] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:46:26.992 [DEBUG] [Thread-131209] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:46:26.992 [DEBUG] [Thread-131209] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:46:26.992 [DEBUG] [Thread-131209] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:46:26.992 [DEBUG] [Thread-131209] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:46:26.992 [DEBUG] [Thread-131209] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:46:26.992 [DEBUG] [Thread-131209] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:46:26.993 [DEBUG] [Thread-131209] [transport.py] [_log()] client lang: <none>
2025-12-31T16:46:26.993 [DEBUG] [Thread-131209] [transport.py] [_log()] server lang: <none>
2025-12-31T16:46:26.993 [DEBUG] [Thread-131209] [transport.py] [_log()] kex follows: False
2025-12-31T16:46:26.993 [DEBUG] [Thread-131209] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:46:26.993 [DEBUG] [Thread-131209] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:46:26.993 [DEBUG] [Thread-131209] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:46:26.993 [DEBUG] [Thread-131209] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:46:26.993 [DEBUG] [Thread-131209] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:46:26.993 [DEBUG] [Thread-131209] [transport.py] [_log()] Compression: none
2025-12-31T16:46:26.993 [DEBUG] [Thread-131209] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:46:27.054 [DEBUG] [Thread-131209] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:46:27.054 [DEBUG] [Thread-131209] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:46:27.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T16:46:27.054 [DEBUG] [Thread-131209] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T16:46:27.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:46:27.115 [DEBUG] [Thread-131209] [transport.py] [_log()] userauth is OK
2025-12-31T16:46:27.115 [DEBUG] [Thread-131209] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:46:27.115 [DEBUG] [Thread-131209] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:46:27.115 [DEBUG] [Thread-131209] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T16:46:27.115 [DEBUG] [Thread-131209] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:46:27.129 [INFO] [Thread-131209] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:46:27.129 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T16:46:27.129 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:46:28.022 [DEBUG] [Thread-131209] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:46:28.022 [DEBUG] [Thread-131209] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:46:28.069 [DEBUG] [Thread-131209] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:46:28.069 [DEBUG] [Thread-131209] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:46:28.077 [DEBUG] [Thread-131209] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:46:28.085 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:46:28.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T16:46:28.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-12-31T16:46:28.101 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:46:28.101 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:46:28.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:46:28.108 [DEBUG] [Thread-131209] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:46:39.125 [DEBUG] [Thread-131211 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:46:54.179 [DEBUG] [Thread-131212 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:46:58.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T16:46:58.103 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T16:46:58.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T16:46:58.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 16, 46, 48), 28.45, 15.15, 0.0, 30.84, 25.0, 0, 0, 0, 2, 0, 0),)
2025-12-31T16:46:58.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 16:46:48
2025-12-31T16:46:58.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T16:46:59.092 [DEBUG] [Thread-131213] [transport.py] [_log()] starting thread (client mode): 0xb95d77f0
2025-12-31T16:46:59.092 [DEBUG] [Thread-131213] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:46:59.113 [DEBUG] [Thread-131213] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T16:46:59.113 [INFO] [Thread-131213] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T16:46:59.116 [DEBUG] [Thread-131213] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:46:59.117 [DEBUG] [Thread-131213] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T16:46:59.117 [DEBUG] [Thread-131213] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:46:59.117 [DEBUG] [Thread-131213] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:46:59.117 [DEBUG] [Thread-131213] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:46:59.117 [DEBUG] [Thread-131213] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:46:59.117 [DEBUG] [Thread-131213] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:46:59.117 [DEBUG] [Thread-131213] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:46:59.117 [DEBUG] [Thread-131213] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:46:59.117 [DEBUG] [Thread-131213] [transport.py] [_log()] client lang: <none>
2025-12-31T16:46:59.117 [DEBUG] [Thread-131213] [transport.py] [_log()] server lang: <none>
2025-12-31T16:46:59.117 [DEBUG] [Thread-131213] [transport.py] [_log()] kex follows: False
2025-12-31T16:46:59.117 [DEBUG] [Thread-131213] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:46:59.117 [DEBUG] [Thread-131213] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:46:59.117 [DEBUG] [Thread-131213] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:46:59.118 [DEBUG] [Thread-131213] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:46:59.118 [DEBUG] [Thread-131213] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:46:59.118 [DEBUG] [Thread-131213] [transport.py] [_log()] Compression: none
2025-12-31T16:46:59.118 [DEBUG] [Thread-131213] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:46:59.127 [DEBUG] [Thread-131213] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:46:59.128 [DEBUG] [Thread-131213] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:46:59.128 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T16:46:59.129 [DEBUG] [Thread-131213] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T16:46:59.130 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:46:59.131 [DEBUG] [Thread-131213] [transport.py] [_log()] userauth is OK
2025-12-31T16:46:59.131 [DEBUG] [Thread-131213] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:46:59.131 [DEBUG] [Thread-131213] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:46:59.131 [DEBUG] [Thread-131213] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T16:46:59.131 [DEBUG] [Thread-131213] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:46:59.152 [INFO] [Thread-131213] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:46:59.154 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:46:59.798 [DEBUG] [Thread-131213] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:46:59.798 [DEBUG] [Thread-131213] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:46:59.799 [DEBUG] [Thread-131213] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T16:46:59.839 [DEBUG] [Thread-131213] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:46:59.839 [DEBUG] [Thread-131213] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:46:59.842 [DEBUG] [Thread-131213] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:46:59.854 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:46:59.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T16:46:59.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T16:46:59.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T16:46:59.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:46:59.864 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T16:46:59.864 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:46:59.864 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:46:59.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T16:46:59.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.615419 -999.00  +24.50  24.90     20   +0.60 1 2 1 1 1   888    0 21.60 -100.38 ----- 28.2 24.9 308.6 34.8 27.1 -14.8 26.9 -14.9 26.6 -14.3 26.9 -13.7
2025-12-31T16:46:59.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T16:46:59.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T16:46:59.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.615419
2025-12-31T16:46:59.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T16:46:59.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T16:46:59.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T16:46:59.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T16:46:59.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T16:46:59.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T16:46:48', tmtdew=28.45, humidity=15.15, cloud=0.0, wind=30.84, temperature=25.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T14:46:12.202', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T16:46:59.867 [DEBUG] [Thread-131213] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:46:59.950 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T16:46:59.961 [DEBUG] [Thread-131216] [transport.py] [_log()] starting thread (client mode): 0xb6bb1de0
2025-12-31T16:46:59.961 [DEBUG] [Thread-131216] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:46:59.975 [DEBUG] [Thread-131216] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T16:46:59.976 [INFO] [Thread-131216] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T16:46:59.983 [DEBUG] [Thread-131216] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:46:59.983 [DEBUG] [Thread-131216] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T16:46:59.983 [DEBUG] [Thread-131216] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:46:59.983 [DEBUG] [Thread-131216] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:46:59.983 [DEBUG] [Thread-131216] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:46:59.983 [DEBUG] [Thread-131216] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:46:59.983 [DEBUG] [Thread-131216] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:46:59.983 [DEBUG] [Thread-131216] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:46:59.983 [DEBUG] [Thread-131216] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:46:59.984 [DEBUG] [Thread-131216] [transport.py] [_log()] client lang: <none>
2025-12-31T16:46:59.984 [DEBUG] [Thread-131216] [transport.py] [_log()] server lang: <none>
2025-12-31T16:46:59.984 [DEBUG] [Thread-131216] [transport.py] [_log()] kex follows: False
2025-12-31T16:46:59.984 [DEBUG] [Thread-131216] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:46:59.984 [DEBUG] [Thread-131216] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:46:59.984 [DEBUG] [Thread-131216] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:46:59.984 [DEBUG] [Thread-131216] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:46:59.984 [DEBUG] [Thread-131216] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:46:59.984 [DEBUG] [Thread-131216] [transport.py] [_log()] Compression: none
2025-12-31T16:46:59.984 [DEBUG] [Thread-131216] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:47:00.042 [DEBUG] [Thread-131216] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:47:00.043 [DEBUG] [Thread-131216] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:47:00.043 [DEBUG] [Thread-131216] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T16:47:00.043 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T16:47:00.044 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:47:00.099 [DEBUG] [Thread-131216] [transport.py] [_log()] userauth is OK
2025-12-31T16:47:00.099 [DEBUG] [Thread-131216] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:47:00.099 [DEBUG] [Thread-131216] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:47:00.099 [DEBUG] [Thread-131216] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T16:47:00.099 [DEBUG] [Thread-131216] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:47:00.118 [INFO] [Thread-131216] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:47:00.118 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T16:47:00.118 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:47:00.937 [DEBUG] [Thread-131216] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:47:00.937 [DEBUG] [Thread-131216] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:47:00.985 [DEBUG] [Thread-131216] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:47:00.985 [DEBUG] [Thread-131216] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:47:00.993 [DEBUG] [Thread-131216] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:47:01.002 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:47:01.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-12-31T16:47:01.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T16:47:01.019 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:47:01.019 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:47:01.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:47:01.027 [DEBUG] [Thread-131216] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:47:09.207 [DEBUG] [Thread-131218 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:47:18.752 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:47:18.753 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:47:24.257 [DEBUG] [Thread-131219 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:47:25.414 [DEBUG] [Thread-131220 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:47:31.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T16:47:31.050 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T16:47:31.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T16:47:31.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 16, 47, 20), 28.34, 15.23, 0.0, 30.68, 24.85, 0, 0, 0, 2, 0, 0),)
2025-12-31T16:47:31.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 16:47:20
2025-12-31T16:47:31.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T16:47:32.023 [DEBUG] [Thread-131221] [transport.py] [_log()] starting thread (client mode): 0xb95793c0
2025-12-31T16:47:32.023 [DEBUG] [Thread-131221] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:47:32.044 [DEBUG] [Thread-131221] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T16:47:32.044 [INFO] [Thread-131221] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T16:47:32.047 [DEBUG] [Thread-131221] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:47:32.048 [DEBUG] [Thread-131221] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T16:47:32.048 [DEBUG] [Thread-131221] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:47:32.048 [DEBUG] [Thread-131221] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:47:32.048 [DEBUG] [Thread-131221] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:47:32.048 [DEBUG] [Thread-131221] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:47:32.048 [DEBUG] [Thread-131221] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:47:32.048 [DEBUG] [Thread-131221] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:47:32.048 [DEBUG] [Thread-131221] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:47:32.048 [DEBUG] [Thread-131221] [transport.py] [_log()] client lang: <none>
2025-12-31T16:47:32.048 [DEBUG] [Thread-131221] [transport.py] [_log()] server lang: <none>
2025-12-31T16:47:32.048 [DEBUG] [Thread-131221] [transport.py] [_log()] kex follows: False
2025-12-31T16:47:32.048 [DEBUG] [Thread-131221] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:47:32.048 [DEBUG] [Thread-131221] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:47:32.048 [DEBUG] [Thread-131221] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:47:32.048 [DEBUG] [Thread-131221] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:47:32.048 [DEBUG] [Thread-131221] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:47:32.048 [DEBUG] [Thread-131221] [transport.py] [_log()] Compression: none
2025-12-31T16:47:32.048 [DEBUG] [Thread-131221] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:47:32.065 [DEBUG] [Thread-131221] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:47:32.065 [DEBUG] [Thread-131221] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:47:32.066 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T16:47:32.066 [DEBUG] [Thread-131221] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T16:47:32.067 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:47:32.068 [DEBUG] [Thread-131221] [transport.py] [_log()] userauth is OK
2025-12-31T16:47:32.068 [DEBUG] [Thread-131221] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:47:32.069 [DEBUG] [Thread-131221] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:47:32.069 [DEBUG] [Thread-131221] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T16:47:32.069 [DEBUG] [Thread-131221] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:47:32.092 [INFO] [Thread-131221] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:47:32.093 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:47:32.843 [DEBUG] [Thread-131221] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:47:32.843 [DEBUG] [Thread-131221] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:47:32.844 [DEBUG] [Thread-131221] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T16:47:32.884 [DEBUG] [Thread-131221] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:47:32.884 [DEBUG] [Thread-131221] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:47:32.887 [DEBUG] [Thread-131221] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:47:32.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:47:32.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T16:47:32.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T16:47:32.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T16:47:32.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:47:32.902 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T16:47:32.902 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:47:32.902 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:47:32.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T16:47:32.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.615766 -999.00  +24.60  26.84     20   +0.70 1 2 1 1 1   888    0 21.59 -96.94 ----- 25.2 26.8 287.7 36.7 27.1 -14.5 26.9 -15.3 26.6 -13.7 26.9 -13.8
2025-12-31T16:47:32.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T16:47:32.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T16:47:32.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.615766
2025-12-31T16:47:32.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T16:47:32.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T16:47:32.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T16:47:32.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T16:47:32.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T16:47:32.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T16:47:20', tmtdew=28.34, humidity=15.23, cloud=0.0, wind=30.68, temperature=24.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T14:46:42.182', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T16:47:32.905 [DEBUG] [Thread-131221] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:47:32.989 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T16:47:33.002 [DEBUG] [Thread-131224] [transport.py] [_log()] starting thread (client mode): 0xb957a860
2025-12-31T16:47:33.002 [DEBUG] [Thread-131224] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:47:33.016 [DEBUG] [Thread-131224] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T16:47:33.017 [INFO] [Thread-131224] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T16:47:33.024 [DEBUG] [Thread-131224] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:47:33.024 [DEBUG] [Thread-131224] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T16:47:33.024 [DEBUG] [Thread-131224] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:47:33.024 [DEBUG] [Thread-131224] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:47:33.024 [DEBUG] [Thread-131224] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:47:33.024 [DEBUG] [Thread-131224] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:47:33.024 [DEBUG] [Thread-131224] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:47:33.025 [DEBUG] [Thread-131224] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:47:33.025 [DEBUG] [Thread-131224] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:47:33.025 [DEBUG] [Thread-131224] [transport.py] [_log()] client lang: <none>
2025-12-31T16:47:33.025 [DEBUG] [Thread-131224] [transport.py] [_log()] server lang: <none>
2025-12-31T16:47:33.025 [DEBUG] [Thread-131224] [transport.py] [_log()] kex follows: False
2025-12-31T16:47:33.025 [DEBUG] [Thread-131224] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:47:33.025 [DEBUG] [Thread-131224] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:47:33.025 [DEBUG] [Thread-131224] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:47:33.025 [DEBUG] [Thread-131224] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:47:33.025 [DEBUG] [Thread-131224] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:47:33.025 [DEBUG] [Thread-131224] [transport.py] [_log()] Compression: none
2025-12-31T16:47:33.025 [DEBUG] [Thread-131224] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:47:33.088 [DEBUG] [Thread-131224] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:47:33.089 [DEBUG] [Thread-131224] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:47:33.089 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T16:47:33.090 [DEBUG] [Thread-131224] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T16:47:33.091 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:47:33.148 [DEBUG] [Thread-131224] [transport.py] [_log()] userauth is OK
2025-12-31T16:47:33.148 [DEBUG] [Thread-131224] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:47:33.148 [DEBUG] [Thread-131224] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:47:33.148 [DEBUG] [Thread-131224] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T16:47:33.148 [DEBUG] [Thread-131224] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:47:33.167 [INFO] [Thread-131224] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:47:33.168 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T16:47:33.168 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:47:33.958 [DEBUG] [Thread-131224] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:47:33.959 [DEBUG] [Thread-131224] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:47:34.007 [DEBUG] [Thread-131224] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:47:34.007 [DEBUG] [Thread-131224] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:47:34.016 [DEBUG] [Thread-131224] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:47:34.024 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:47:34.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T16:47:34.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T16:47:34.042 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:47:34.042 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:47:34.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:47:34.051 [DEBUG] [Thread-131224] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:47:39.293 [DEBUG] [Thread-131226 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:47:54.348 [DEBUG] [Thread-131227 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:48:04.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T16:48:04.049 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T16:48:04.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T16:48:04.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 16, 47, 52), 27.94, 15.43, 0.0, 26.66, 24.47, 0, 0, 0, 2, 0, 0),)
2025-12-31T16:48:04.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 16:47:52
2025-12-31T16:48:04.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T16:48:05.036 [DEBUG] [Thread-131228] [transport.py] [_log()] starting thread (client mode): 0xb6b2b400
2025-12-31T16:48:05.036 [DEBUG] [Thread-131228] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:48:05.056 [DEBUG] [Thread-131228] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T16:48:05.056 [INFO] [Thread-131228] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T16:48:05.060 [DEBUG] [Thread-131228] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:48:05.060 [DEBUG] [Thread-131228] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T16:48:05.060 [DEBUG] [Thread-131228] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:48:05.060 [DEBUG] [Thread-131228] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:48:05.060 [DEBUG] [Thread-131228] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:48:05.060 [DEBUG] [Thread-131228] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:48:05.060 [DEBUG] [Thread-131228] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:48:05.060 [DEBUG] [Thread-131228] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:48:05.060 [DEBUG] [Thread-131228] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:48:05.060 [DEBUG] [Thread-131228] [transport.py] [_log()] client lang: <none>
2025-12-31T16:48:05.060 [DEBUG] [Thread-131228] [transport.py] [_log()] server lang: <none>
2025-12-31T16:48:05.060 [DEBUG] [Thread-131228] [transport.py] [_log()] kex follows: False
2025-12-31T16:48:05.060 [DEBUG] [Thread-131228] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:48:05.060 [DEBUG] [Thread-131228] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:48:05.061 [DEBUG] [Thread-131228] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:48:05.061 [DEBUG] [Thread-131228] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:48:05.061 [DEBUG] [Thread-131228] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:48:05.061 [DEBUG] [Thread-131228] [transport.py] [_log()] Compression: none
2025-12-31T16:48:05.061 [DEBUG] [Thread-131228] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:48:05.078 [DEBUG] [Thread-131228] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:48:05.079 [DEBUG] [Thread-131228] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:48:05.079 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T16:48:05.080 [DEBUG] [Thread-131228] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T16:48:05.081 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:48:05.082 [DEBUG] [Thread-131228] [transport.py] [_log()] userauth is OK
2025-12-31T16:48:05.082 [DEBUG] [Thread-131228] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:48:05.082 [DEBUG] [Thread-131228] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:48:05.082 [DEBUG] [Thread-131228] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T16:48:05.083 [DEBUG] [Thread-131228] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:48:05.116 [INFO] [Thread-131228] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:48:05.116 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:48:05.749 [DEBUG] [Thread-131228] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:48:05.750 [DEBUG] [Thread-131228] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:48:05.750 [DEBUG] [Thread-131228] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T16:48:05.791 [DEBUG] [Thread-131228] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:48:05.791 [DEBUG] [Thread-131228] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:48:05.794 [DEBUG] [Thread-131228] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:48:05.805 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:48:05.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T16:48:05.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T16:48:05.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T16:48:05.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:48:05.815 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T16:48:05.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:48:05.815 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:48:05.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T16:48:05.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.616113 -999.00  +24.30  28.52     21   +0.60 1 2 1 1 1   888    0 21.81 -99.33 ----- 25.5 28.5 293.4 33.8 27.1 -15.3 26.9 -15.6 26.5 -14.0 26.8 -13.9
2025-12-31T16:48:05.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T16:48:05.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T16:48:05.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.616113
2025-12-31T16:48:05.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T16:48:05.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T16:48:05.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T16:48:05.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T16:48:05.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T16:48:05.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T16:47:52', tmtdew=27.94, humidity=15.43, cloud=0.0, wind=26.66, temperature=24.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T14:47:12.163', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T16:48:05.818 [DEBUG] [Thread-131228] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:48: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-12-31T16:48:05.916 [DEBUG] [Thread-131231] [transport.py] [_log()] starting thread (client mode): 0xb6b2a950
2025-12-31T16:48:05.917 [DEBUG] [Thread-131231] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:48:05.931 [DEBUG] [Thread-131231] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T16:48:05.932 [INFO] [Thread-131231] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T16:48:05.939 [DEBUG] [Thread-131231] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:48:05.940 [DEBUG] [Thread-131231] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T16:48:05.940 [DEBUG] [Thread-131231] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:48:05.940 [DEBUG] [Thread-131231] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:48:05.940 [DEBUG] [Thread-131231] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:48:05.940 [DEBUG] [Thread-131231] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:48:05.940 [DEBUG] [Thread-131231] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:48:05.940 [DEBUG] [Thread-131231] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:48:05.940 [DEBUG] [Thread-131231] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:48:05.940 [DEBUG] [Thread-131231] [transport.py] [_log()] client lang: <none>
2025-12-31T16:48:05.940 [DEBUG] [Thread-131231] [transport.py] [_log()] server lang: <none>
2025-12-31T16:48:05.940 [DEBUG] [Thread-131231] [transport.py] [_log()] kex follows: False
2025-12-31T16:48:05.940 [DEBUG] [Thread-131231] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:48:05.940 [DEBUG] [Thread-131231] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:48:05.940 [DEBUG] [Thread-131231] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:48:05.940 [DEBUG] [Thread-131231] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:48:05.941 [DEBUG] [Thread-131231] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:48:05.941 [DEBUG] [Thread-131231] [transport.py] [_log()] Compression: none
2025-12-31T16:48:05.941 [DEBUG] [Thread-131231] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:48:05.999 [DEBUG] [Thread-131231] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:48:05.999 [DEBUG] [Thread-131231] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:48:06.000 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T16:48:06.000 [DEBUG] [Thread-131231] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T16:48:06.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:48:06.055 [DEBUG] [Thread-131231] [transport.py] [_log()] userauth is OK
2025-12-31T16:48:06.055 [DEBUG] [Thread-131231] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:48:06.056 [DEBUG] [Thread-131231] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:48:06.056 [DEBUG] [Thread-131231] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T16:48:06.056 [DEBUG] [Thread-131231] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:48:06.076 [INFO] [Thread-131231] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:48:06.076 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T16:48:06.077 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:48:06.907 [DEBUG] [Thread-131231] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:48:06.907 [DEBUG] [Thread-131231] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:48:06.955 [DEBUG] [Thread-131231] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:48:06.955 [DEBUG] [Thread-131231] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:48:06.964 [DEBUG] [Thread-131231] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:48:06.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:48:06.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T16:48:06.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T16:48:06.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:48:06.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:48:06.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:48:07.005 [DEBUG] [Thread-131231] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:48:09.381 [DEBUG] [Thread-131233 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:48:18.891 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:48:18.893 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:48:24.429 [DEBUG] [Thread-131234 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:48:25.459 [DEBUG] [Thread-131235 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:48:37.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T16:48:37.026 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T16:48:37.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T16:48:37.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 16, 48, 24), 27.96, 15.41, 0.0, 28.25, 24.5, 0, 0, 0, 2, 0, 0),)
2025-12-31T16:48:37.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 16:48:24
2025-12-31T16:48:37.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T16:48:38.007 [DEBUG] [Thread-131236] [transport.py] [_log()] starting thread (client mode): 0xb9579750
2025-12-31T16:48:38.007 [DEBUG] [Thread-131236] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:48:38.027 [DEBUG] [Thread-131236] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T16:48:38.027 [INFO] [Thread-131236] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T16:48:38.030 [DEBUG] [Thread-131236] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:48:38.030 [DEBUG] [Thread-131236] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T16:48:38.030 [DEBUG] [Thread-131236] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:48:38.030 [DEBUG] [Thread-131236] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:48:38.030 [DEBUG] [Thread-131236] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:48:38.030 [DEBUG] [Thread-131236] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:48:38.030 [DEBUG] [Thread-131236] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:48:38.030 [DEBUG] [Thread-131236] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:48:38.030 [DEBUG] [Thread-131236] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:48:38.030 [DEBUG] [Thread-131236] [transport.py] [_log()] client lang: <none>
2025-12-31T16:48:38.031 [DEBUG] [Thread-131236] [transport.py] [_log()] server lang: <none>
2025-12-31T16:48:38.031 [DEBUG] [Thread-131236] [transport.py] [_log()] kex follows: False
2025-12-31T16:48:38.031 [DEBUG] [Thread-131236] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:48:38.031 [DEBUG] [Thread-131236] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:48:38.031 [DEBUG] [Thread-131236] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:48:38.031 [DEBUG] [Thread-131236] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:48:38.031 [DEBUG] [Thread-131236] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:48:38.031 [DEBUG] [Thread-131236] [transport.py] [_log()] Compression: none
2025-12-31T16:48:38.031 [DEBUG] [Thread-131236] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:48:38.039 [DEBUG] [Thread-131236] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:48:38.039 [DEBUG] [Thread-131236] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:48:38.040 [DEBUG] [Thread-131236] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T16:48:38.040 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T16:48:38.040 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:48:38.041 [DEBUG] [Thread-131236] [transport.py] [_log()] userauth is OK
2025-12-31T16:48:38.041 [DEBUG] [Thread-131236] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:48:38.041 [DEBUG] [Thread-131236] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:48:38.041 [DEBUG] [Thread-131236] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T16:48:38.042 [DEBUG] [Thread-131236] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:48:38.057 [INFO] [Thread-131236] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:48:38.058 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:48:38.791 [DEBUG] [Thread-131236] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:48:38.791 [DEBUG] [Thread-131236] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:48:38.792 [DEBUG] [Thread-131236] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T16:48:38.832 [DEBUG] [Thread-131236] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:48:38.832 [DEBUG] [Thread-131236] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:48:38.836 [DEBUG] [Thread-131236] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:48:38.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:48:38.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T16:48:38.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T16:48:38.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T16:48:38.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:48:38.857 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T16:48:38.857 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:48:38.857 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:48:38.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T16:48:38.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.616460 -999.00  +24.10  21.71     21   +0.60 1 2 1 1 1   888    0 21.32 -105.67 ----- 21.5 21.7 299.2 26.2 26.9 -15.3 26.9 -15.0 26.5 -14.1 26.8 -13.4
2025-12-31T16:48:38.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T16:48:38.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T16:48:38.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.616460
2025-12-31T16:48:38.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T16:48:38.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T16:48:38.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T16:48:38.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T16:48:38.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T16:48:38.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T16:48:24', tmtdew=27.96, humidity=15.41, cloud=0.0, wind=28.25, temperature=24.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T14:47:42.144', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T16:48:38.860 [DEBUG] [Thread-131236] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:48:38.944 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T16:48:38.955 [DEBUG] [Thread-131239] [transport.py] [_log()] starting thread (client mode): 0xb6b61180
2025-12-31T16:48:38.955 [DEBUG] [Thread-131239] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:48:38.970 [DEBUG] [Thread-131239] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T16:48:38.971 [INFO] [Thread-131239] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T16:48:38.978 [DEBUG] [Thread-131239] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:48:38.978 [DEBUG] [Thread-131239] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T16:48:38.978 [DEBUG] [Thread-131239] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:48:38.978 [DEBUG] [Thread-131239] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:48:38.978 [DEBUG] [Thread-131239] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:48:38.979 [DEBUG] [Thread-131239] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:48:38.979 [DEBUG] [Thread-131239] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:48:38.979 [DEBUG] [Thread-131239] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:48:38.979 [DEBUG] [Thread-131239] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:48:38.979 [DEBUG] [Thread-131239] [transport.py] [_log()] client lang: <none>
2025-12-31T16:48:38.979 [DEBUG] [Thread-131239] [transport.py] [_log()] server lang: <none>
2025-12-31T16:48:38.979 [DEBUG] [Thread-131239] [transport.py] [_log()] kex follows: False
2025-12-31T16:48:38.979 [DEBUG] [Thread-131239] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:48:38.979 [DEBUG] [Thread-131239] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:48:38.979 [DEBUG] [Thread-131239] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:48:38.979 [DEBUG] [Thread-131239] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:48:38.979 [DEBUG] [Thread-131239] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:48:38.979 [DEBUG] [Thread-131239] [transport.py] [_log()] Compression: none
2025-12-31T16:48:38.979 [DEBUG] [Thread-131239] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:48:39.039 [DEBUG] [Thread-131239] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:48:39.040 [DEBUG] [Thread-131239] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:48:39.040 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T16:48:39.041 [DEBUG] [Thread-131239] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T16:48:39.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:48:39.095 [DEBUG] [Thread-131239] [transport.py] [_log()] userauth is OK
2025-12-31T16:48:39.095 [DEBUG] [Thread-131239] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:48:39.095 [DEBUG] [Thread-131239] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:48:39.095 [DEBUG] [Thread-131239] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T16:48:39.096 [DEBUG] [Thread-131239] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:48:39.114 [INFO] [Thread-131239] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:48:39.115 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T16:48:39.116 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:48:39.462 [DEBUG] [Thread-131241 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:48:39.963 [DEBUG] [Thread-131239] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:48:39.963 [DEBUG] [Thread-131239] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:48:40.011 [DEBUG] [Thread-131239] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:48:40.011 [DEBUG] [Thread-131239] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:48:40.020 [DEBUG] [Thread-131239] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:48:40.030 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:48:40.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T16:48:40.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-12-31T16:48:40.048 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:48:40.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:48:40.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:48:40.057 [DEBUG] [Thread-131239] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:48:54.515 [DEBUG] [Thread-131242 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:49:09.550 [DEBUG] [Thread-131243 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:49:10.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T16:49:10.079 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T16:49:10.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T16:49:10.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 16, 48, 56), 27.76, 15.56, 0.0, 36.47, 24.53, 0, 0, 0, 2, 0, 0),)
2025-12-31T16:49:10.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 16:48:56
2025-12-31T16:49:10.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T16:49:11.057 [DEBUG] [Thread-131244] [transport.py] [_log()] starting thread (client mode): 0xb6bb0820
2025-12-31T16:49:11.057 [DEBUG] [Thread-131244] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:49:11.077 [DEBUG] [Thread-131244] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T16:49:11.077 [INFO] [Thread-131244] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T16:49:11.080 [DEBUG] [Thread-131244] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:49:11.081 [DEBUG] [Thread-131244] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T16:49:11.081 [DEBUG] [Thread-131244] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:49:11.081 [DEBUG] [Thread-131244] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:49:11.081 [DEBUG] [Thread-131244] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:49:11.081 [DEBUG] [Thread-131244] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:49:11.081 [DEBUG] [Thread-131244] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:49:11.081 [DEBUG] [Thread-131244] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:49:11.081 [DEBUG] [Thread-131244] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:49:11.081 [DEBUG] [Thread-131244] [transport.py] [_log()] client lang: <none>
2025-12-31T16:49:11.081 [DEBUG] [Thread-131244] [transport.py] [_log()] server lang: <none>
2025-12-31T16:49:11.081 [DEBUG] [Thread-131244] [transport.py] [_log()] kex follows: False
2025-12-31T16:49:11.081 [DEBUG] [Thread-131244] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:49:11.081 [DEBUG] [Thread-131244] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:49:11.081 [DEBUG] [Thread-131244] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:49:11.081 [DEBUG] [Thread-131244] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:49:11.081 [DEBUG] [Thread-131244] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:49:11.081 [DEBUG] [Thread-131244] [transport.py] [_log()] Compression: none
2025-12-31T16:49:11.081 [DEBUG] [Thread-131244] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:49:11.099 [DEBUG] [Thread-131244] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:49:11.100 [DEBUG] [Thread-131244] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:49:11.100 [DEBUG] [Thread-131244] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T16:49:11.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T16:49:11.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:49:11.102 [DEBUG] [Thread-131244] [transport.py] [_log()] userauth is OK
2025-12-31T16:49:11.102 [DEBUG] [Thread-131244] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:49:11.102 [DEBUG] [Thread-131244] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:49:11.102 [DEBUG] [Thread-131244] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T16:49:11.102 [DEBUG] [Thread-131244] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:49:11.120 [INFO] [Thread-131244] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:49:11.121 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:49:11.754 [DEBUG] [Thread-131244] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:49:11.755 [DEBUG] [Thread-131244] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:49:11.755 [DEBUG] [Thread-131244] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T16:49:11.796 [DEBUG] [Thread-131244] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:49:11.797 [DEBUG] [Thread-131244] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:49:11.800 [DEBUG] [Thread-131244] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:49:11.811 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:49:11.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T16:49:11.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T16:49:11.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T16:49:11.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:49:11.823 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T16:49:11.823 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:49:11.823 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:49:11.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T16:49:11.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.616807 -999.00  +24.30  25.98     21   +0.70 1 2 1 1 1   888    0 20.89 -113.59 ----- 24.0 26.0 296.6 27.8 26.9 -14.7 26.9 -14.9 26.5 -13.8 26.8 -13.3
2025-12-31T16:49:11.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T16:49:11.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T16:49:11.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.616807
2025-12-31T16:49:11.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T16:49:11.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T16:49:11.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T16:49:11.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T16:49:11.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T16:49:11.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T16:48:56', tmtdew=27.76, humidity=15.56, cloud=0.0, wind=36.47, temperature=24.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T14:48:12.125', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T16:49:11.826 [DEBUG] [Thread-131244] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:49:11.907 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T16:49:11.919 [DEBUG] [Thread-131247] [transport.py] [_log()] starting thread (client mode): 0xb6b60dc0
2025-12-31T16:49:11.919 [DEBUG] [Thread-131247] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:49:11.934 [DEBUG] [Thread-131247] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T16:49:11.935 [INFO] [Thread-131247] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T16:49:11.942 [DEBUG] [Thread-131247] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:49:11.942 [DEBUG] [Thread-131247] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T16:49:11.942 [DEBUG] [Thread-131247] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:49:11.943 [DEBUG] [Thread-131247] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:49:11.943 [DEBUG] [Thread-131247] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:49:11.943 [DEBUG] [Thread-131247] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:49:11.943 [DEBUG] [Thread-131247] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:49:11.943 [DEBUG] [Thread-131247] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:49:11.943 [DEBUG] [Thread-131247] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:49:11.943 [DEBUG] [Thread-131247] [transport.py] [_log()] client lang: <none>
2025-12-31T16:49:11.943 [DEBUG] [Thread-131247] [transport.py] [_log()] server lang: <none>
2025-12-31T16:49:11.943 [DEBUG] [Thread-131247] [transport.py] [_log()] kex follows: False
2025-12-31T16:49:11.943 [DEBUG] [Thread-131247] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:49:11.943 [DEBUG] [Thread-131247] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:49:11.943 [DEBUG] [Thread-131247] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:49:11.943 [DEBUG] [Thread-131247] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:49:11.943 [DEBUG] [Thread-131247] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:49:11.943 [DEBUG] [Thread-131247] [transport.py] [_log()] Compression: none
2025-12-31T16:49:11.943 [DEBUG] [Thread-131247] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:49:12.007 [DEBUG] [Thread-131247] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:49:12.007 [DEBUG] [Thread-131247] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:49:12.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T16:49:12.009 [DEBUG] [Thread-131247] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T16:49:12.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:49:12.063 [DEBUG] [Thread-131247] [transport.py] [_log()] userauth is OK
2025-12-31T16:49:12.063 [DEBUG] [Thread-131247] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:49:12.063 [DEBUG] [Thread-131247] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:49:12.063 [DEBUG] [Thread-131247] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T16:49:12.063 [DEBUG] [Thread-131247] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:49:12.082 [INFO] [Thread-131247] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:49:12.083 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T16:49:12.083 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:49:12.926 [DEBUG] [Thread-131247] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:49:12.926 [DEBUG] [Thread-131247] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:49:12.974 [DEBUG] [Thread-131247] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:49:12.974 [DEBUG] [Thread-131247] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:49:12.983 [DEBUG] [Thread-131247] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:49:12.993 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:49:12.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T16:49:13.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T16:49:13.011 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:49:13.011 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:49:13.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:49:13.020 [DEBUG] [Thread-131247] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:49:19.030 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:49:19.031 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:49:24.586 [DEBUG] [Thread-131249 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:49:25.497 [DEBUG] [Thread-131250 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:49:39.638 [DEBUG] [Thread-131251 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:49:43.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T16:49:43.042 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T16:49:43.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T16:49:43.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 16, 49, 28), 27.71, 15.61, 0.0, 34.64, 24.53, 0, 0, 0, 2, 0, 0),)
2025-12-31T16:49:43.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 16:49:28
2025-12-31T16:49:43.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T16:49:44.075 [DEBUG] [Thread-131252] [transport.py] [_log()] starting thread (client mode): 0xb957a7a0
2025-12-31T16:49:44.075 [DEBUG] [Thread-131252] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:49:44.098 [DEBUG] [Thread-131252] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T16:49:44.098 [INFO] [Thread-131252] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T16:49:44.101 [DEBUG] [Thread-131252] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:49:44.101 [DEBUG] [Thread-131252] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T16:49:44.101 [DEBUG] [Thread-131252] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:49:44.101 [DEBUG] [Thread-131252] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:49:44.101 [DEBUG] [Thread-131252] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:49:44.101 [DEBUG] [Thread-131252] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:49:44.101 [DEBUG] [Thread-131252] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:49:44.101 [DEBUG] [Thread-131252] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:49:44.101 [DEBUG] [Thread-131252] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:49:44.101 [DEBUG] [Thread-131252] [transport.py] [_log()] client lang: <none>
2025-12-31T16:49:44.101 [DEBUG] [Thread-131252] [transport.py] [_log()] server lang: <none>
2025-12-31T16:49:44.101 [DEBUG] [Thread-131252] [transport.py] [_log()] kex follows: False
2025-12-31T16:49:44.101 [DEBUG] [Thread-131252] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:49:44.101 [DEBUG] [Thread-131252] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:49:44.101 [DEBUG] [Thread-131252] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:49:44.101 [DEBUG] [Thread-131252] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:49:44.101 [DEBUG] [Thread-131252] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:49:44.101 [DEBUG] [Thread-131252] [transport.py] [_log()] Compression: none
2025-12-31T16:49:44.101 [DEBUG] [Thread-131252] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:49:44.118 [DEBUG] [Thread-131252] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:49:44.118 [DEBUG] [Thread-131252] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:49:44.118 [DEBUG] [Thread-131252] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T16:49:44.118 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T16:49:44.118 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:49:44.119 [DEBUG] [Thread-131252] [transport.py] [_log()] userauth is OK
2025-12-31T16:49:44.119 [DEBUG] [Thread-131252] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:49:44.119 [DEBUG] [Thread-131252] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:49:44.119 [DEBUG] [Thread-131252] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T16:49:44.119 [DEBUG] [Thread-131252] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:49:44.129 [INFO] [Thread-131252] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:49:44.129 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:49:44.900 [DEBUG] [Thread-131252] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:49:44.900 [DEBUG] [Thread-131252] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:49:44.900 [DEBUG] [Thread-131252] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T16:49:44.940 [DEBUG] [Thread-131252] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:49:44.940 [DEBUG] [Thread-131252] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:49:44.945 [DEBUG] [Thread-131252] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:49:44.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:49:44.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T16:49:44.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T16:49:44.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T16:49:44.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:49:44.962 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T16:49:44.962 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:49:44.962 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:49:44.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T16:49:44.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.617155 -999.00  +24.40  34.37     21   +0.80 1 2 2 1 1   888    0 20.75 -112.76 ----- 33.4 34.4 276.0 39.3 27.0 -14.7 26.8 -15.5 26.5 -14.3 26.7 -13.7
2025-12-31T16:49:44.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T16:49:44.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T16:49:44.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.617155
2025-12-31T16:49:44.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T16:49:44.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T16:49:44.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T16:49:44.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T16:49:44.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T16:49:44.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T16:49:28', tmtdew=27.71, humidity=15.61, cloud=0.0, wind=34.64, temperature=24.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T14:48:42.192', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T16:49:44.963 [DEBUG] [Thread-131252] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:49:45.038 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T16:49:45.048 [DEBUG] [Thread-131255] [transport.py] [_log()] starting thread (client mode): 0xb95d7a00
2025-12-31T16:49:45.048 [DEBUG] [Thread-131255] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:49:45.063 [DEBUG] [Thread-131255] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T16:49:45.063 [INFO] [Thread-131255] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T16:49:45.070 [DEBUG] [Thread-131255] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:49:45.070 [DEBUG] [Thread-131255] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T16:49:45.070 [DEBUG] [Thread-131255] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:49:45.070 [DEBUG] [Thread-131255] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:49:45.070 [DEBUG] [Thread-131255] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:49:45.070 [DEBUG] [Thread-131255] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:49:45.070 [DEBUG] [Thread-131255] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:49:45.070 [DEBUG] [Thread-131255] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:49:45.070 [DEBUG] [Thread-131255] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:49:45.070 [DEBUG] [Thread-131255] [transport.py] [_log()] client lang: <none>
2025-12-31T16:49:45.070 [DEBUG] [Thread-131255] [transport.py] [_log()] server lang: <none>
2025-12-31T16:49:45.070 [DEBUG] [Thread-131255] [transport.py] [_log()] kex follows: False
2025-12-31T16:49:45.070 [DEBUG] [Thread-131255] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:49:45.070 [DEBUG] [Thread-131255] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:49:45.070 [DEBUG] [Thread-131255] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:49:45.070 [DEBUG] [Thread-131255] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:49:45.070 [DEBUG] [Thread-131255] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:49:45.071 [DEBUG] [Thread-131255] [transport.py] [_log()] Compression: none
2025-12-31T16:49:45.071 [DEBUG] [Thread-131255] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:49:45.129 [DEBUG] [Thread-131255] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:49:45.129 [DEBUG] [Thread-131255] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:49:45.129 [DEBUG] [Thread-131255] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T16:49:45.129 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T16:49:45.129 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:49:45.190 [DEBUG] [Thread-131255] [transport.py] [_log()] userauth is OK
2025-12-31T16:49:45.190 [DEBUG] [Thread-131255] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:49:45.190 [DEBUG] [Thread-131255] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:49:45.190 [DEBUG] [Thread-131255] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T16:49:45.190 [DEBUG] [Thread-131255] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:49:45.206 [INFO] [Thread-131255] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:49:45.206 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T16:49:45.206 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:49:46.032 [DEBUG] [Thread-131255] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:49:46.033 [DEBUG] [Thread-131255] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:49:46.080 [DEBUG] [Thread-131255] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:49:46.080 [DEBUG] [Thread-131255] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:49:46.089 [DEBUG] [Thread-131255] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:49:46.096 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:49:46.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T16:49:46.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T16:49:46.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:49:46.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:49:46.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:49:46.120 [DEBUG] [Thread-131255] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:49:54.674 [DEBUG] [Thread-131257 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:50:09.733 [DEBUG] [Thread-131258 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:50:16.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T16:50:16.143 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T16:50:16.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T16:50:16.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 16, 50), 27.38, 16.16, 0.0, 33.22, 24.33, 0, 0, 0, 2, 0, 0),)
2025-12-31T16:50:16.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 16:50:00
2025-12-31T16:50:16.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T16:50:17.126 [DEBUG] [Thread-131259] [transport.py] [_log()] starting thread (client mode): 0xb6bb03a0
2025-12-31T16:50:17.126 [DEBUG] [Thread-131259] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:50:17.146 [DEBUG] [Thread-131259] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T16:50:17.146 [INFO] [Thread-131259] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T16:50:17.147 [DEBUG] [Thread-131259] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:50:17.148 [DEBUG] [Thread-131259] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T16:50:17.148 [DEBUG] [Thread-131259] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:50:17.148 [DEBUG] [Thread-131259] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:50:17.148 [DEBUG] [Thread-131259] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:50:17.148 [DEBUG] [Thread-131259] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:50:17.148 [DEBUG] [Thread-131259] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:50:17.148 [DEBUG] [Thread-131259] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:50:17.148 [DEBUG] [Thread-131259] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:50:17.148 [DEBUG] [Thread-131259] [transport.py] [_log()] client lang: <none>
2025-12-31T16:50:17.148 [DEBUG] [Thread-131259] [transport.py] [_log()] server lang: <none>
2025-12-31T16:50:17.148 [DEBUG] [Thread-131259] [transport.py] [_log()] kex follows: False
2025-12-31T16:50:17.148 [DEBUG] [Thread-131259] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:50:17.148 [DEBUG] [Thread-131259] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:50:17.148 [DEBUG] [Thread-131259] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:50:17.148 [DEBUG] [Thread-131259] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:50:17.148 [DEBUG] [Thread-131259] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:50:17.148 [DEBUG] [Thread-131259] [transport.py] [_log()] Compression: none
2025-12-31T16:50:17.148 [DEBUG] [Thread-131259] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:50:17.165 [DEBUG] [Thread-131259] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:50:17.166 [DEBUG] [Thread-131259] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:50:17.166 [DEBUG] [Thread-131259] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T16:50:17.167 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T16:50:17.167 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:50:17.168 [DEBUG] [Thread-131259] [transport.py] [_log()] userauth is OK
2025-12-31T16:50:17.169 [DEBUG] [Thread-131259] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:50:17.169 [DEBUG] [Thread-131259] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:50:17.169 [DEBUG] [Thread-131259] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T16:50:17.169 [DEBUG] [Thread-131259] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:50:17.194 [INFO] [Thread-131259] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:50:17.195 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:50:19.170 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:50:19.171 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:50:21.033 [DEBUG] [Thread-131259] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:50:21.033 [DEBUG] [Thread-131259] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:50:21.033 [DEBUG] [Thread-131259] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T16:50:21.073 [DEBUG] [Thread-131259] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:50:21.073 [DEBUG] [Thread-131259] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:50:21.076 [DEBUG] [Thread-131259] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:50:21.118 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:50:21.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T16:50:21.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T16:50:21.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T16:50:21.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:50:21.179 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T16:50:21.179 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:50:21.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:50:21.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T16:50:21.180 [WARNING] [poll_weather_worker] [driver.py] [poll_weather_state()] Unable to get atlas cloud data: list index out of range
2025-12-31T16:50:21.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T16:50:00', tmtdew=27.38, humidity=16.16, cloud=0.0, wind=33.22, temperature=24.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp=None, atlas_cloud=None, atlas_rain=None, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T16:50:21.181 [DEBUG] [Thread-131259] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:50:21.253 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T16:50:21.263 [DEBUG] [Thread-131262] [transport.py] [_log()] starting thread (client mode): 0xb6bb9bd0
2025-12-31T16:50:21.263 [DEBUG] [Thread-131262] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:50:21.278 [DEBUG] [Thread-131262] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T16:50:21.278 [INFO] [Thread-131262] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T16:50:21.285 [DEBUG] [Thread-131262] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:50:21.285 [DEBUG] [Thread-131262] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T16:50:21.285 [DEBUG] [Thread-131262] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:50:21.285 [DEBUG] [Thread-131262] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:50:21.285 [DEBUG] [Thread-131262] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:50:21.285 [DEBUG] [Thread-131262] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:50:21.285 [DEBUG] [Thread-131262] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:50:21.285 [DEBUG] [Thread-131262] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:50:21.285 [DEBUG] [Thread-131262] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:50:21.285 [DEBUG] [Thread-131262] [transport.py] [_log()] client lang: <none>
2025-12-31T16:50:21.285 [DEBUG] [Thread-131262] [transport.py] [_log()] server lang: <none>
2025-12-31T16:50:21.285 [DEBUG] [Thread-131262] [transport.py] [_log()] kex follows: False
2025-12-31T16:50:21.285 [DEBUG] [Thread-131262] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:50:21.285 [DEBUG] [Thread-131262] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:50:21.285 [DEBUG] [Thread-131262] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:50:21.285 [DEBUG] [Thread-131262] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:50:21.285 [DEBUG] [Thread-131262] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:50:21.285 [DEBUG] [Thread-131262] [transport.py] [_log()] Compression: none
2025-12-31T16:50:21.285 [DEBUG] [Thread-131262] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:50:21.341 [DEBUG] [Thread-131262] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:50:21.341 [DEBUG] [Thread-131262] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:50:21.341 [DEBUG] [Thread-131262] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T16:50:21.341 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T16:50:21.341 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:50:21.398 [DEBUG] [Thread-131262] [transport.py] [_log()] userauth is OK
2025-12-31T16:50:21.398 [DEBUG] [Thread-131262] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:50:21.398 [DEBUG] [Thread-131262] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:50:21.398 [DEBUG] [Thread-131262] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T16:50:21.398 [DEBUG] [Thread-131262] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:50:21.412 [INFO] [Thread-131262] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:50:21.412 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T16:50:21.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:50:22.252 [DEBUG] [Thread-131262] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:50:22.252 [DEBUG] [Thread-131262] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:50:22.300 [DEBUG] [Thread-131262] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:50:22.300 [DEBUG] [Thread-131262] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:50:22.309 [DEBUG] [Thread-131262] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:50:22.317 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:50:22.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T16:50:22.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T16:50:22.333 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:50:22.333 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:50:22.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:50:22.341 [DEBUG] [Thread-131262] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:50:24.763 [DEBUG] [Thread-131264 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:50:25.564 [DEBUG] [Thread-131265 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:50:39.806 [DEBUG] [Thread-131266 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:50:52.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T16:50:52.363 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T16:50:52.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T16:50:53.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 16, 50, 32), 27.46, 16.1, 0.0, 31.14, 24.45, 0, 0, 0, 2, 0, 0),)
2025-12-31T16:50:53.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 16:50:32
2025-12-31T16:50:53.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T16:50:53.348 [DEBUG] [Thread-131267] [transport.py] [_log()] starting thread (client mode): 0xb6bb1600
2025-12-31T16:50:53.348 [DEBUG] [Thread-131267] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:50:53.367 [DEBUG] [Thread-131267] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T16:50:53.367 [INFO] [Thread-131267] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T16:50:53.370 [DEBUG] [Thread-131267] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:50:53.370 [DEBUG] [Thread-131267] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T16:50:53.370 [DEBUG] [Thread-131267] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:50:53.370 [DEBUG] [Thread-131267] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:50:53.371 [DEBUG] [Thread-131267] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:50:53.371 [DEBUG] [Thread-131267] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:50:53.371 [DEBUG] [Thread-131267] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:50:53.371 [DEBUG] [Thread-131267] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:50:53.371 [DEBUG] [Thread-131267] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:50:53.371 [DEBUG] [Thread-131267] [transport.py] [_log()] client lang: <none>
2025-12-31T16:50:53.371 [DEBUG] [Thread-131267] [transport.py] [_log()] server lang: <none>
2025-12-31T16:50:53.371 [DEBUG] [Thread-131267] [transport.py] [_log()] kex follows: False
2025-12-31T16:50:53.371 [DEBUG] [Thread-131267] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:50:53.371 [DEBUG] [Thread-131267] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:50:53.371 [DEBUG] [Thread-131267] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:50:53.371 [DEBUG] [Thread-131267] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:50:53.371 [DEBUG] [Thread-131267] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:50:53.371 [DEBUG] [Thread-131267] [transport.py] [_log()] Compression: none
2025-12-31T16:50:53.372 [DEBUG] [Thread-131267] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:50:53.390 [DEBUG] [Thread-131267] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:50:53.390 [DEBUG] [Thread-131267] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:50:53.391 [DEBUG] [Thread-131267] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T16:50:53.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T16:50:53.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:50:53.393 [DEBUG] [Thread-131267] [transport.py] [_log()] userauth is OK
2025-12-31T16:50:53.393 [DEBUG] [Thread-131267] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:50:53.393 [DEBUG] [Thread-131267] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:50:53.393 [DEBUG] [Thread-131267] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T16:50:53.394 [DEBUG] [Thread-131267] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:50:53.411 [INFO] [Thread-131267] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:50:53.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:50:54.024 [DEBUG] [Thread-131267] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:50:54.024 [DEBUG] [Thread-131267] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:50:54.024 [DEBUG] [Thread-131267] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T16:50:54.065 [DEBUG] [Thread-131267] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:50:54.065 [DEBUG] [Thread-131267] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:50:54.067 [DEBUG] [Thread-131267] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:50:54.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:50:54.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T16:50:54.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T16:50:54.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T16:50:54.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:50:54.086 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T16:50:54.086 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:50:54.087 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:50:54.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T16:50:54.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.618196 -999.00  +24.30  23.83     21   +0.90 1 2 1 1 1   888    0 20.72 -123.06 ----- 24.6 23.8 281.6 37.4 26.8 -15.3 26.6 -15.2 26.2 -14.3 26.6 -13.8
2025-12-31T16:50:54.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T16:50:54.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T16:50:54.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.618196
2025-12-31T16:50:54.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T16:50:54.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T16:50:54.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T16:50:54.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T16:50:54.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T16:50:54.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T16:50:32', tmtdew=27.46, humidity=16.1, cloud=0.0, wind=31.14, temperature=24.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T14:50:12.134', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T16:50:54.089 [DEBUG] [Thread-131267] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:50:54.170 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T16:50:54.182 [DEBUG] [Thread-131270] [transport.py] [_log()] starting thread (client mode): 0xb6b61e40
2025-12-31T16:50:54.183 [DEBUG] [Thread-131270] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:50:54.198 [DEBUG] [Thread-131270] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T16:50:54.198 [INFO] [Thread-131270] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T16:50:54.206 [DEBUG] [Thread-131270] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:50:54.206 [DEBUG] [Thread-131270] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T16:50:54.206 [DEBUG] [Thread-131270] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:50:54.206 [DEBUG] [Thread-131270] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:50:54.206 [DEBUG] [Thread-131270] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:50:54.206 [DEBUG] [Thread-131270] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:50:54.206 [DEBUG] [Thread-131270] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:50:54.206 [DEBUG] [Thread-131270] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:50:54.206 [DEBUG] [Thread-131270] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:50:54.206 [DEBUG] [Thread-131270] [transport.py] [_log()] client lang: <none>
2025-12-31T16:50:54.206 [DEBUG] [Thread-131270] [transport.py] [_log()] server lang: <none>
2025-12-31T16:50:54.207 [DEBUG] [Thread-131270] [transport.py] [_log()] kex follows: False
2025-12-31T16:50:54.207 [DEBUG] [Thread-131270] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:50:54.207 [DEBUG] [Thread-131270] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:50:54.207 [DEBUG] [Thread-131270] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:50:54.207 [DEBUG] [Thread-131270] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:50:54.207 [DEBUG] [Thread-131270] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:50:54.207 [DEBUG] [Thread-131270] [transport.py] [_log()] Compression: none
2025-12-31T16:50:54.207 [DEBUG] [Thread-131270] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:50:54.263 [DEBUG] [Thread-131270] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:50:54.264 [DEBUG] [Thread-131270] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:50:54.264 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T16:50:54.265 [DEBUG] [Thread-131270] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T16:50:54.266 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:50:54.322 [DEBUG] [Thread-131270] [transport.py] [_log()] userauth is OK
2025-12-31T16:50:54.323 [DEBUG] [Thread-131270] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:50:54.323 [DEBUG] [Thread-131270] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:50:54.323 [DEBUG] [Thread-131270] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T16:50:54.323 [DEBUG] [Thread-131270] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:50:54.344 [INFO] [Thread-131270] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:50:54.345 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T16:50:54.345 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:50:54.845 [DEBUG] [Thread-131272 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:50:55.171 [DEBUG] [Thread-131270] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:50:55.172 [DEBUG] [Thread-131270] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:50:55.220 [DEBUG] [Thread-131270] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:50:55.220 [DEBUG] [Thread-131270] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:50:55.230 [DEBUG] [Thread-131270] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:50:55.239 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:50:55.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-12-31T16:50:55.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T16:50:55.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:50:55.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:50:55.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:50:55.267 [DEBUG] [Thread-131270] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:51:09.889 [DEBUG] [Thread-131273 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:51:19.311 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:51:19.312 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:51:24.926 [DEBUG] [Thread-131274 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:51:25.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T16:51:25.289 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T16:51:25.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T16:51:25.612 [DEBUG] [Thread-131275 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:51:25.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 16, 51, 4), 27.58, 15.98, 0.0, 31.65, 24.52, 0, 0, 0, 2, 0, 0),)
2025-12-31T16:51:25.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 16:51:04
2025-12-31T16:51:26.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T16:51:26.262 [DEBUG] [Thread-131276] [transport.py] [_log()] starting thread (client mode): 0xb6bbb310
2025-12-31T16:51:26.262 [DEBUG] [Thread-131276] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:51:26.282 [DEBUG] [Thread-131276] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T16:51:26.282 [INFO] [Thread-131276] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T16:51:26.285 [DEBUG] [Thread-131276] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:51:26.285 [DEBUG] [Thread-131276] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T16:51:26.285 [DEBUG] [Thread-131276] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:51:26.285 [DEBUG] [Thread-131276] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:51:26.285 [DEBUG] [Thread-131276] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:51:26.285 [DEBUG] [Thread-131276] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:51:26.285 [DEBUG] [Thread-131276] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:51:26.285 [DEBUG] [Thread-131276] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:51:26.285 [DEBUG] [Thread-131276] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:51:26.285 [DEBUG] [Thread-131276] [transport.py] [_log()] client lang: <none>
2025-12-31T16:51:26.285 [DEBUG] [Thread-131276] [transport.py] [_log()] server lang: <none>
2025-12-31T16:51:26.285 [DEBUG] [Thread-131276] [transport.py] [_log()] kex follows: False
2025-12-31T16:51:26.285 [DEBUG] [Thread-131276] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:51:26.286 [DEBUG] [Thread-131276] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:51:26.286 [DEBUG] [Thread-131276] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:51:26.286 [DEBUG] [Thread-131276] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:51:26.286 [DEBUG] [Thread-131276] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:51:26.286 [DEBUG] [Thread-131276] [transport.py] [_log()] Compression: none
2025-12-31T16:51:26.286 [DEBUG] [Thread-131276] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:51:26.306 [DEBUG] [Thread-131276] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:51:26.307 [DEBUG] [Thread-131276] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:51:26.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T16:51:26.308 [DEBUG] [Thread-131276] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T16:51:26.309 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:51:26.310 [DEBUG] [Thread-131276] [transport.py] [_log()] userauth is OK
2025-12-31T16:51:26.310 [DEBUG] [Thread-131276] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:51:26.310 [DEBUG] [Thread-131276] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:51:26.310 [DEBUG] [Thread-131276] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T16:51:26.310 [DEBUG] [Thread-131276] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:51:26.328 [INFO] [Thread-131276] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:51:26.329 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:51:27.073 [DEBUG] [Thread-131276] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:51:27.074 [DEBUG] [Thread-131276] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:51:27.074 [DEBUG] [Thread-131276] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T16:51:27.114 [DEBUG] [Thread-131276] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:51:27.115 [DEBUG] [Thread-131276] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:51:27.118 [DEBUG] [Thread-131276] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:51:27.128 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:51:27.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T16:51:27.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T16:51:27.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T16:51:27.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:51:27.141 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T16:51:27.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:51:27.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:51:27.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T16:51:27.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.618544 -999.00  +24.20  19.45     21   +0.90 1 2 1 1 1   888    0 20.25 -119.98 ----- 18.5 19.4 285.4 26.9 26.7 -15.1 26.6 -14.8 26.1 -15.8 26.6 -13.2
2025-12-31T16:51:27.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T16:51:27.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T16:51:27.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.618544
2025-12-31T16:51:27.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T16:51:27.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T16:51:27.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T16:51:27.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T16:51:27.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T16:51:27.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T16:51:04', tmtdew=27.58, humidity=15.98, cloud=0.0, wind=31.65, temperature=24.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T14:50:42.202', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T16:51:27.144 [DEBUG] [Thread-131276] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:51:27.232 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T16:51:27.245 [DEBUG] [Thread-131279] [transport.py] [_log()] starting thread (client mode): 0xb6bb0640
2025-12-31T16:51:27.245 [DEBUG] [Thread-131279] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:51:27.260 [DEBUG] [Thread-131279] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T16:51:27.260 [INFO] [Thread-131279] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T16:51:27.268 [DEBUG] [Thread-131279] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:51:27.268 [DEBUG] [Thread-131279] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T16:51:27.268 [DEBUG] [Thread-131279] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:51:27.268 [DEBUG] [Thread-131279] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:51:27.268 [DEBUG] [Thread-131279] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:51:27.268 [DEBUG] [Thread-131279] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:51:27.268 [DEBUG] [Thread-131279] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:51:27.268 [DEBUG] [Thread-131279] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:51:27.268 [DEBUG] [Thread-131279] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:51:27.268 [DEBUG] [Thread-131279] [transport.py] [_log()] client lang: <none>
2025-12-31T16:51:27.268 [DEBUG] [Thread-131279] [transport.py] [_log()] server lang: <none>
2025-12-31T16:51:27.268 [DEBUG] [Thread-131279] [transport.py] [_log()] kex follows: False
2025-12-31T16:51:27.268 [DEBUG] [Thread-131279] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:51:27.269 [DEBUG] [Thread-131279] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:51:27.269 [DEBUG] [Thread-131279] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:51:27.269 [DEBUG] [Thread-131279] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:51:27.269 [DEBUG] [Thread-131279] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:51:27.269 [DEBUG] [Thread-131279] [transport.py] [_log()] Compression: none
2025-12-31T16:51:27.269 [DEBUG] [Thread-131279] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:51:27.326 [DEBUG] [Thread-131279] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:51:27.327 [DEBUG] [Thread-131279] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:51:27.327 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T16:51:27.328 [DEBUG] [Thread-131279] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T16:51:27.329 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:51:27.382 [DEBUG] [Thread-131279] [transport.py] [_log()] userauth is OK
2025-12-31T16:51:27.382 [DEBUG] [Thread-131279] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:51:27.382 [DEBUG] [Thread-131279] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:51:27.382 [DEBUG] [Thread-131279] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T16:51:27.382 [DEBUG] [Thread-131279] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:51:27.402 [INFO] [Thread-131279] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:51:27.403 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T16:51:27.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:51:28.215 [DEBUG] [Thread-131279] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:51:28.215 [DEBUG] [Thread-131279] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:51:28.264 [DEBUG] [Thread-131279] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:51:28.265 [DEBUG] [Thread-131279] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:51:28.276 [DEBUG] [Thread-131279] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:51:28.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:51:28.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T16:51:28.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T16:51:28.309 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:51:28.309 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:51:28.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:51:28.320 [DEBUG] [Thread-131279] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:51:39.959 [DEBUG] [Thread-131281 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:51:55.001 [DEBUG] [Thread-131282 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:51:58.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T16:51:58.328 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T16:51: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-12-31T16:51:59.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 16, 51, 36), 27.71, 15.78, 0.0, 28.09, 24.5, 0, 0, 0, 2, 0, 0),)
2025-12-31T16:51:59.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 16:51:36
2025-12-31T16:51:59.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T16:51:59.289 [DEBUG] [Thread-131283] [transport.py] [_log()] starting thread (client mode): 0xb95d6f50
2025-12-31T16:51:59.290 [DEBUG] [Thread-131283] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:51:59.309 [DEBUG] [Thread-131283] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T16:51:59.310 [INFO] [Thread-131283] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T16:51:59.313 [DEBUG] [Thread-131283] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:51:59.313 [DEBUG] [Thread-131283] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T16:51:59.313 [DEBUG] [Thread-131283] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:51:59.313 [DEBUG] [Thread-131283] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:51:59.313 [DEBUG] [Thread-131283] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:51:59.313 [DEBUG] [Thread-131283] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:51:59.313 [DEBUG] [Thread-131283] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:51:59.313 [DEBUG] [Thread-131283] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:51:59.313 [DEBUG] [Thread-131283] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:51:59.313 [DEBUG] [Thread-131283] [transport.py] [_log()] client lang: <none>
2025-12-31T16:51:59.313 [DEBUG] [Thread-131283] [transport.py] [_log()] server lang: <none>
2025-12-31T16:51:59.313 [DEBUG] [Thread-131283] [transport.py] [_log()] kex follows: False
2025-12-31T16:51:59.313 [DEBUG] [Thread-131283] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:51:59.314 [DEBUG] [Thread-131283] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:51:59.314 [DEBUG] [Thread-131283] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:51:59.314 [DEBUG] [Thread-131283] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:51:59.314 [DEBUG] [Thread-131283] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:51:59.314 [DEBUG] [Thread-131283] [transport.py] [_log()] Compression: none
2025-12-31T16:51:59.314 [DEBUG] [Thread-131283] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:51:59.331 [DEBUG] [Thread-131283] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:51:59.331 [DEBUG] [Thread-131283] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:51:59.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T16:51:59.332 [DEBUG] [Thread-131283] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T16:51:59.333 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:51:59.335 [DEBUG] [Thread-131283] [transport.py] [_log()] userauth is OK
2025-12-31T16:51:59.335 [DEBUG] [Thread-131283] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:51:59.335 [DEBUG] [Thread-131283] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:51:59.335 [DEBUG] [Thread-131283] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T16:51:59.335 [DEBUG] [Thread-131283] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:51:59.350 [INFO] [Thread-131283] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:51:59.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:52:00.013 [DEBUG] [Thread-131283] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:52:00.013 [DEBUG] [Thread-131283] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:52:00.014 [DEBUG] [Thread-131283] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T16:52:00.054 [DEBUG] [Thread-131283] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:52:00.054 [DEBUG] [Thread-131283] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:52:00.057 [DEBUG] [Thread-131283] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:52:00.071 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:52:00.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T16:52:00.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T16:52:00.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T16:52:00.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:52:00.082 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T16:52:00.082 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:52:00.082 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:52:00.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T16:52:00.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.618891 -999.00  +24.10  24.20     21   +0.90 1 2 1 1 1   888    0 20.67 -114.15 ----- 23.7 24.2 274.8 28.5 26.7 -14.3 26.6 -15.4 26.2 -14.5 26.6 -13.8
2025-12-31T16:52:00.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T16:52:00.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T16:52:00.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.618891
2025-12-31T16:52:00.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T16:52:00.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T16:52:00.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T16:52:00.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T16:52:00.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T16:52:00.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T16:51:36', tmtdew=27.71, humidity=15.78, cloud=0.0, wind=28.09, temperature=24.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T14:51:12.182', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T16:52:00.084 [DEBUG] [Thread-131283] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:52:00.167 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T16:52:00.180 [DEBUG] [Thread-131286] [transport.py] [_log()] starting thread (client mode): 0xb6b2b730
2025-12-31T16:52:00.180 [DEBUG] [Thread-131286] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:52:00.195 [DEBUG] [Thread-131286] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T16:52:00.195 [INFO] [Thread-131286] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T16:52:00.205 [DEBUG] [Thread-131286] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:52:00.205 [DEBUG] [Thread-131286] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T16:52:00.205 [DEBUG] [Thread-131286] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:52:00.205 [DEBUG] [Thread-131286] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:52:00.205 [DEBUG] [Thread-131286] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:52:00.205 [DEBUG] [Thread-131286] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:52:00.205 [DEBUG] [Thread-131286] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:52:00.205 [DEBUG] [Thread-131286] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:52:00.205 [DEBUG] [Thread-131286] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:52:00.205 [DEBUG] [Thread-131286] [transport.py] [_log()] client lang: <none>
2025-12-31T16:52:00.205 [DEBUG] [Thread-131286] [transport.py] [_log()] server lang: <none>
2025-12-31T16:52:00.205 [DEBUG] [Thread-131286] [transport.py] [_log()] kex follows: False
2025-12-31T16:52:00.205 [DEBUG] [Thread-131286] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:52:00.205 [DEBUG] [Thread-131286] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:52:00.205 [DEBUG] [Thread-131286] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:52:00.206 [DEBUG] [Thread-131286] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:52:00.206 [DEBUG] [Thread-131286] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:52:00.206 [DEBUG] [Thread-131286] [transport.py] [_log()] Compression: none
2025-12-31T16:52:00.206 [DEBUG] [Thread-131286] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:52:00.264 [DEBUG] [Thread-131286] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:52:00.264 [DEBUG] [Thread-131286] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:52:00.265 [DEBUG] [Thread-131286] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T16:52:00.265 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T16:52:00.266 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:52:00.323 [DEBUG] [Thread-131286] [transport.py] [_log()] userauth is OK
2025-12-31T16:52:00.323 [DEBUG] [Thread-131286] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:52:00.323 [DEBUG] [Thread-131286] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:52:00.323 [DEBUG] [Thread-131286] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T16:52:00.324 [DEBUG] [Thread-131286] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:52:00.344 [INFO] [Thread-131286] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:52:00.345 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T16:52:00.345 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:52:01.158 [DEBUG] [Thread-131286] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:52:01.159 [DEBUG] [Thread-131286] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:52:01.207 [DEBUG] [Thread-131286] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:52:01.207 [DEBUG] [Thread-131286] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:52:01.217 [DEBUG] [Thread-131286] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:52:01.226 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:52:01.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T16:52:01.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T16:52:01.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:52:01.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:52:01.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:52:01.253 [DEBUG] [Thread-131286] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:52:10.039 [DEBUG] [Thread-131288 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:52:19.452 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:52:19.453 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:52:25.080 [DEBUG] [Thread-131289 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:52:25.664 [DEBUG] [Thread-131290 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:52:31.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T16:52:31.253 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T16:52:31.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T16:52:31.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 16, 52, 9), 27.78, 15.7, 0.0, 27.01, 24.52, 0, 0, 0, 2, 0, 0),)
2025-12-31T16:52:31.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 16:52:09
2025-12-31T16:52:32.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T16:52:32.240 [DEBUG] [Thread-131291] [transport.py] [_log()] starting thread (client mode): 0xb95d7670
2025-12-31T16:52:32.240 [DEBUG] [Thread-131291] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:52:32.260 [DEBUG] [Thread-131291] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T16:52:32.260 [INFO] [Thread-131291] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T16:52:32.264 [DEBUG] [Thread-131291] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:52:32.264 [DEBUG] [Thread-131291] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T16:52:32.264 [DEBUG] [Thread-131291] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:52:32.264 [DEBUG] [Thread-131291] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:52:32.264 [DEBUG] [Thread-131291] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:52:32.264 [DEBUG] [Thread-131291] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:52:32.264 [DEBUG] [Thread-131291] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:52:32.264 [DEBUG] [Thread-131291] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:52:32.264 [DEBUG] [Thread-131291] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:52:32.264 [DEBUG] [Thread-131291] [transport.py] [_log()] client lang: <none>
2025-12-31T16:52:32.264 [DEBUG] [Thread-131291] [transport.py] [_log()] server lang: <none>
2025-12-31T16:52:32.264 [DEBUG] [Thread-131291] [transport.py] [_log()] kex follows: False
2025-12-31T16:52:32.264 [DEBUG] [Thread-131291] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:52:32.264 [DEBUG] [Thread-131291] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:52:32.265 [DEBUG] [Thread-131291] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:52:32.265 [DEBUG] [Thread-131291] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:52:32.265 [DEBUG] [Thread-131291] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:52:32.265 [DEBUG] [Thread-131291] [transport.py] [_log()] Compression: none
2025-12-31T16:52:32.265 [DEBUG] [Thread-131291] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:52:32.281 [DEBUG] [Thread-131291] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:52:32.282 [DEBUG] [Thread-131291] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:52:32.283 [DEBUG] [Thread-131291] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T16:52:32.283 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T16:52:32.283 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:52:32.284 [DEBUG] [Thread-131291] [transport.py] [_log()] userauth is OK
2025-12-31T16:52:32.285 [DEBUG] [Thread-131291] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:52:32.285 [DEBUG] [Thread-131291] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:52:32.285 [DEBUG] [Thread-131291] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T16:52:32.285 [DEBUG] [Thread-131291] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:52:32.309 [INFO] [Thread-131291] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:52:32.309 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:52:33.099 [DEBUG] [Thread-131291] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:52:33.100 [DEBUG] [Thread-131291] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:52:33.100 [DEBUG] [Thread-131291] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T16:52:33.141 [DEBUG] [Thread-131291] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:52:33.141 [DEBUG] [Thread-131291] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:52:33.146 [DEBUG] [Thread-131291] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:52:33.158 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:52:33.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T16:52:33.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T16:52:33.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T16:52:33.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:52:33.168 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T16:52:33.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:52:33.168 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:52:33.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T16:52:33.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.619238 -999.00  +24.00  21.43     21   +0.80 1 2 1 1 1   888    0 20.77 -114.20 ----- 20.5 21.4 296.8 29.4 26.6 -15.0 26.6 -15.4 26.2 -14.2 26.6 -13.4
2025-12-31T16:52:33.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T16:52:33.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T16:52:33.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.619238
2025-12-31T16:52:33.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T16:52:33.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T16:52:33.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T16:52:33.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T16:52:33.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T16:52:33.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T16:52:09', tmtdew=27.78, humidity=15.7, cloud=0.0, wind=27.01, temperature=24.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T14:51:42.163', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T16:52:33.171 [DEBUG] [Thread-131291] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:52:33.257 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T16:52:33.269 [DEBUG] [Thread-131294] [transport.py] [_log()] starting thread (client mode): 0xb957a3e0
2025-12-31T16:52:33.269 [DEBUG] [Thread-131294] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:52:33.284 [DEBUG] [Thread-131294] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T16:52:33.284 [INFO] [Thread-131294] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T16:52:33.292 [DEBUG] [Thread-131294] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:52:33.292 [DEBUG] [Thread-131294] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T16:52:33.292 [DEBUG] [Thread-131294] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:52:33.292 [DEBUG] [Thread-131294] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:52:33.293 [DEBUG] [Thread-131294] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:52:33.293 [DEBUG] [Thread-131294] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:52:33.293 [DEBUG] [Thread-131294] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:52:33.293 [DEBUG] [Thread-131294] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:52:33.293 [DEBUG] [Thread-131294] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:52:33.293 [DEBUG] [Thread-131294] [transport.py] [_log()] client lang: <none>
2025-12-31T16:52:33.293 [DEBUG] [Thread-131294] [transport.py] [_log()] server lang: <none>
2025-12-31T16:52:33.293 [DEBUG] [Thread-131294] [transport.py] [_log()] kex follows: False
2025-12-31T16:52:33.293 [DEBUG] [Thread-131294] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:52:33.294 [DEBUG] [Thread-131294] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:52:33.294 [DEBUG] [Thread-131294] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:52:33.294 [DEBUG] [Thread-131294] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:52:33.294 [DEBUG] [Thread-131294] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:52:33.294 [DEBUG] [Thread-131294] [transport.py] [_log()] Compression: none
2025-12-31T16:52:33.294 [DEBUG] [Thread-131294] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:52:33.351 [DEBUG] [Thread-131294] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:52:33.351 [DEBUG] [Thread-131294] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:52:33.352 [DEBUG] [Thread-131294] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T16:52:33.352 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T16:52:33.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:52:33.407 [DEBUG] [Thread-131294] [transport.py] [_log()] userauth is OK
2025-12-31T16:52:33.407 [DEBUG] [Thread-131294] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:52:33.407 [DEBUG] [Thread-131294] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:52:33.407 [DEBUG] [Thread-131294] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T16:52:33.407 [DEBUG] [Thread-131294] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:52:33.427 [INFO] [Thread-131294] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:52:33.428 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T16:52:33.428 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:52:34.277 [DEBUG] [Thread-131294] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:52:34.278 [DEBUG] [Thread-131294] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:52:34.325 [DEBUG] [Thread-131294] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:52:34.326 [DEBUG] [Thread-131294] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:52:34.335 [DEBUG] [Thread-131294] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:52:34.344 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:52:34.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T16:52:34.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T16:52:34.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:52:34.363 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:52:34.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:52:34.372 [DEBUG] [Thread-131294] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:52:40.117 [DEBUG] [Thread-131296 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:52:55.181 [DEBUG] [Thread-131297 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:53:04.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T16:53:04.394 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T16:53:04.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T16:53:05.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 16, 52, 41), 27.86, 15.68, 0.0, 29.08, 24.57, 0, 0, 0, 2, 0, 0),)
2025-12-31T16:53:05.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 16:52:41
2025-12-31T16:53:05.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T16:53:05.385 [DEBUG] [Thread-131298] [transport.py] [_log()] starting thread (client mode): 0xb95d6230
2025-12-31T16:53:05.385 [DEBUG] [Thread-131298] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:53:05.405 [DEBUG] [Thread-131298] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T16:53:05.405 [INFO] [Thread-131298] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T16:53:05.409 [DEBUG] [Thread-131298] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:53:05.409 [DEBUG] [Thread-131298] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T16:53:05.409 [DEBUG] [Thread-131298] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:53:05.409 [DEBUG] [Thread-131298] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:53:05.409 [DEBUG] [Thread-131298] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:53:05.409 [DEBUG] [Thread-131298] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:53:05.409 [DEBUG] [Thread-131298] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:53:05.409 [DEBUG] [Thread-131298] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:53:05.409 [DEBUG] [Thread-131298] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:53:05.409 [DEBUG] [Thread-131298] [transport.py] [_log()] client lang: <none>
2025-12-31T16:53:05.409 [DEBUG] [Thread-131298] [transport.py] [_log()] server lang: <none>
2025-12-31T16:53:05.409 [DEBUG] [Thread-131298] [transport.py] [_log()] kex follows: False
2025-12-31T16:53:05.410 [DEBUG] [Thread-131298] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:53:05.410 [DEBUG] [Thread-131298] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:53:05.410 [DEBUG] [Thread-131298] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:53:05.410 [DEBUG] [Thread-131298] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:53:05.410 [DEBUG] [Thread-131298] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:53:05.410 [DEBUG] [Thread-131298] [transport.py] [_log()] Compression: none
2025-12-31T16:53:05.410 [DEBUG] [Thread-131298] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:53:05.429 [DEBUG] [Thread-131298] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:53:05.430 [DEBUG] [Thread-131298] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:53:05.431 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T16:53:05.431 [DEBUG] [Thread-131298] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T16:53:05.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:53:05.433 [DEBUG] [Thread-131298] [transport.py] [_log()] userauth is OK
2025-12-31T16:53:05.433 [DEBUG] [Thread-131298] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:53:05.433 [DEBUG] [Thread-131298] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:53:05.433 [DEBUG] [Thread-131298] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T16:53:05.433 [DEBUG] [Thread-131298] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:53:05.450 [INFO] [Thread-131298] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:53:05.450 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:53:06.055 [DEBUG] [Thread-131298] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:53:06.055 [DEBUG] [Thread-131298] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:53:06.055 [DEBUG] [Thread-131298] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T16:53:06.096 [DEBUG] [Thread-131298] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:53:06.096 [DEBUG] [Thread-131298] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:53:06.100 [DEBUG] [Thread-131298] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:53:06.107 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:53:06.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T16:53:06.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T16:53:06.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T16:53:06.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:53:06.129 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T16:53:06.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:53:06.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:53:06.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T16:53:06.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.619585 -999.00  +24.10  27.47     21   +0.90 1 2 1 1 1   888    0 20.52 -115.11 ----- 27.1 27.5 281.6 34.7 26.7 -14.1 26.6 -15.1 26.3 -14.8 26.6 -13.7
2025-12-31T16:53:06.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T16:53:06.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T16:53:06.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.619585
2025-12-31T16:53:06.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T16:53:06.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T16:53:06.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T16:53:06.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T16:53:06.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T16:53:06.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T16:52:41', tmtdew=27.86, humidity=15.68, cloud=0.0, wind=29.08, temperature=24.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T14:52:12.144', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T16:53:06.132 [DEBUG] [Thread-131298] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:53:06.213 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T16:53:06.227 [DEBUG] [Thread-131301] [transport.py] [_log()] starting thread (client mode): 0xb95d51e0
2025-12-31T16:53:06.227 [DEBUG] [Thread-131301] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:53:06.242 [DEBUG] [Thread-131301] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T16:53:06.242 [INFO] [Thread-131301] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T16:53:06.250 [DEBUG] [Thread-131301] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:53:06.250 [DEBUG] [Thread-131301] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T16:53:06.250 [DEBUG] [Thread-131301] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:53:06.250 [DEBUG] [Thread-131301] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:53:06.250 [DEBUG] [Thread-131301] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:53:06.251 [DEBUG] [Thread-131301] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:53:06.251 [DEBUG] [Thread-131301] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:53:06.251 [DEBUG] [Thread-131301] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:53:06.251 [DEBUG] [Thread-131301] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:53:06.251 [DEBUG] [Thread-131301] [transport.py] [_log()] client lang: <none>
2025-12-31T16:53:06.251 [DEBUG] [Thread-131301] [transport.py] [_log()] server lang: <none>
2025-12-31T16:53:06.251 [DEBUG] [Thread-131301] [transport.py] [_log()] kex follows: False
2025-12-31T16:53:06.251 [DEBUG] [Thread-131301] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:53:06.252 [DEBUG] [Thread-131301] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:53:06.252 [DEBUG] [Thread-131301] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:53:06.252 [DEBUG] [Thread-131301] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:53:06.252 [DEBUG] [Thread-131301] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:53:06.252 [DEBUG] [Thread-131301] [transport.py] [_log()] Compression: none
2025-12-31T16:53:06.252 [DEBUG] [Thread-131301] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:53:06.308 [DEBUG] [Thread-131301] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:53:06.309 [DEBUG] [Thread-131301] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:53:06.310 [DEBUG] [Thread-131301] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T16:53:06.310 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T16:53:06.311 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:53:06.365 [DEBUG] [Thread-131301] [transport.py] [_log()] userauth is OK
2025-12-31T16:53:06.365 [DEBUG] [Thread-131301] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:53:06.365 [DEBUG] [Thread-131301] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:53:06.365 [DEBUG] [Thread-131301] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T16:53:06.366 [DEBUG] [Thread-131301] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:53:06.391 [INFO] [Thread-131301] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:53:06.392 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T16:53:06.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:53:07.217 [DEBUG] [Thread-131301] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:53:07.217 [DEBUG] [Thread-131301] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:53:07.265 [DEBUG] [Thread-131301] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:53:07.265 [DEBUG] [Thread-131301] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:53:07.277 [DEBUG] [Thread-131301] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:53:07.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:53:07.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T16:53:07.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T16:53:07.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:53:07.306 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:53:07.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:53:07.315 [DEBUG] [Thread-131301] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:53:10.214 [DEBUG] [Thread-131303 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:53:19.590 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:53:19.591 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:53:25.262 [DEBUG] [Thread-131304 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:53:25.726 [DEBUG] [Thread-131305 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:53:37.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T16:53:37.336 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T16:53:37.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T16:53:38.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 16, 53, 13), 27.76, 15.8, 0.0, 32.98, 24.58, 0, 0, 0, 2, 0, 0),)
2025-12-31T16:53:38.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 16:53:13
2025-12-31T16:53:38.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T16:53:38.363 [DEBUG] [Thread-131306] [transport.py] [_log()] starting thread (client mode): 0xb95d7df0
2025-12-31T16:53:38.363 [DEBUG] [Thread-131306] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:53:38.383 [DEBUG] [Thread-131306] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T16:53:38.383 [INFO] [Thread-131306] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T16:53:38.386 [DEBUG] [Thread-131306] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:53:38.386 [DEBUG] [Thread-131306] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T16:53:38.386 [DEBUG] [Thread-131306] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:53:38.386 [DEBUG] [Thread-131306] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:53:38.386 [DEBUG] [Thread-131306] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:53:38.386 [DEBUG] [Thread-131306] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:53:38.386 [DEBUG] [Thread-131306] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:53:38.386 [DEBUG] [Thread-131306] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:53:38.386 [DEBUG] [Thread-131306] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:53:38.386 [DEBUG] [Thread-131306] [transport.py] [_log()] client lang: <none>
2025-12-31T16:53:38.386 [DEBUG] [Thread-131306] [transport.py] [_log()] server lang: <none>
2025-12-31T16:53:38.386 [DEBUG] [Thread-131306] [transport.py] [_log()] kex follows: False
2025-12-31T16:53:38.386 [DEBUG] [Thread-131306] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:53:38.386 [DEBUG] [Thread-131306] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:53:38.386 [DEBUG] [Thread-131306] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:53:38.386 [DEBUG] [Thread-131306] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:53:38.386 [DEBUG] [Thread-131306] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:53:38.386 [DEBUG] [Thread-131306] [transport.py] [_log()] Compression: none
2025-12-31T16:53:38.386 [DEBUG] [Thread-131306] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:53:38.401 [DEBUG] [Thread-131306] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:53:38.401 [DEBUG] [Thread-131306] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:53:38.401 [DEBUG] [Thread-131306] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T16:53:38.401 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T16:53:38.401 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:53:38.402 [DEBUG] [Thread-131306] [transport.py] [_log()] userauth is OK
2025-12-31T16:53:38.402 [DEBUG] [Thread-131306] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:53:38.402 [DEBUG] [Thread-131306] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:53:38.402 [DEBUG] [Thread-131306] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T16:53:38.402 [DEBUG] [Thread-131306] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:53:38.429 [INFO] [Thread-131306] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:53:38.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:53:39.197 [DEBUG] [Thread-131306] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:53:39.197 [DEBUG] [Thread-131306] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:53:39.197 [DEBUG] [Thread-131306] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T16:53:39.237 [DEBUG] [Thread-131306] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:53:39.237 [DEBUG] [Thread-131306] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:53:39.239 [DEBUG] [Thread-131306] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:53:39.246 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:53:39.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T16:53:39.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T16:53:39.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T16:53:39.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:53:39.250 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T16:53:39.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:53:39.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:53:39.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T16:53:39.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.619933 -999.00  +24.20  28.39     21   +0.80 1 2 1 1 1   888    0 20.37 -113.82 ----- 23.4 28.4 281.0 33.5 26.6 -15.0 26.6 -15.5 26.1 -15.0 26.5 -13.6
2025-12-31T16:53:39.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T16:53:39.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T16:53:39.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.619933
2025-12-31T16:53:39.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T16:53:39.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T16:53:39.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T16:53:39.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T16:53:39.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T16:53:39.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T16:53:13', tmtdew=27.76, humidity=15.8, cloud=0.0, wind=32.98, temperature=24.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T14:52:42.211', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T16:53:39.252 [DEBUG] [Thread-131306] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:53:39.326 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T16:53:39.337 [DEBUG] [Thread-131309] [transport.py] [_log()] starting thread (client mode): 0xb95d5900
2025-12-31T16:53:39.337 [DEBUG] [Thread-131309] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:53:39.351 [DEBUG] [Thread-131309] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T16:53:39.351 [INFO] [Thread-131309] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T16:53:39.359 [DEBUG] [Thread-131309] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:53:39.359 [DEBUG] [Thread-131309] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T16:53:39.359 [DEBUG] [Thread-131309] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:53:39.359 [DEBUG] [Thread-131309] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:53:39.359 [DEBUG] [Thread-131309] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:53:39.359 [DEBUG] [Thread-131309] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:53:39.359 [DEBUG] [Thread-131309] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:53:39.359 [DEBUG] [Thread-131309] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:53:39.359 [DEBUG] [Thread-131309] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:53:39.359 [DEBUG] [Thread-131309] [transport.py] [_log()] client lang: <none>
2025-12-31T16:53:39.359 [DEBUG] [Thread-131309] [transport.py] [_log()] server lang: <none>
2025-12-31T16:53:39.359 [DEBUG] [Thread-131309] [transport.py] [_log()] kex follows: False
2025-12-31T16:53:39.359 [DEBUG] [Thread-131309] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:53:39.359 [DEBUG] [Thread-131309] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:53:39.359 [DEBUG] [Thread-131309] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:53:39.359 [DEBUG] [Thread-131309] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:53:39.359 [DEBUG] [Thread-131309] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:53:39.359 [DEBUG] [Thread-131309] [transport.py] [_log()] Compression: none
2025-12-31T16:53:39.359 [DEBUG] [Thread-131309] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:53:39.417 [DEBUG] [Thread-131309] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:53:39.417 [DEBUG] [Thread-131309] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:53:39.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T16:53:39.417 [DEBUG] [Thread-131309] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T16:53:39.418 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:53:39.474 [DEBUG] [Thread-131309] [transport.py] [_log()] userauth is OK
2025-12-31T16:53:39.474 [DEBUG] [Thread-131309] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:53:39.474 [DEBUG] [Thread-131309] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:53:39.474 [DEBUG] [Thread-131309] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T16:53:39.474 [DEBUG] [Thread-131309] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:53:39.488 [INFO] [Thread-131309] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:53:39.488 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T16:53:39.488 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:53:40.292 [DEBUG] [Thread-131311 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:53:40.320 [DEBUG] [Thread-131309] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:53:40.320 [DEBUG] [Thread-131309] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:53:40.368 [DEBUG] [Thread-131309] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:53:40.368 [DEBUG] [Thread-131309] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:53:40.376 [DEBUG] [Thread-131309] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:53:40.384 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:53:40.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T16:53:40.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T16:53:40.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:53:40.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:53:40.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:53:40.414 [DEBUG] [Thread-131309] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:53:55.332 [DEBUG] [Thread-131312 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:54:10.362 [DEBUG] [Thread-131313 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:54:10.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T16:54:10.432 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T16:54:10.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T16:54:11.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 16, 53, 45), 27.74, 15.85, 0.0, 28.28, 24.32, 0, 0, 0, 2, 0, 0),)
2025-12-31T16:54:11.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 16:53:45
2025-12-31T16:54:11.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T16:54:11.425 [DEBUG] [Thread-131314] [transport.py] [_log()] starting thread (client mode): 0xb95901c0
2025-12-31T16:54:11.425 [DEBUG] [Thread-131314] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:54:11.444 [DEBUG] [Thread-131314] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T16:54:11.444 [INFO] [Thread-131314] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T16:54:11.446 [DEBUG] [Thread-131314] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:54:11.446 [DEBUG] [Thread-131314] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T16:54:11.446 [DEBUG] [Thread-131314] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:54:11.446 [DEBUG] [Thread-131314] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:54:11.446 [DEBUG] [Thread-131314] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:54:11.447 [DEBUG] [Thread-131314] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:54:11.447 [DEBUG] [Thread-131314] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:54:11.447 [DEBUG] [Thread-131314] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:54:11.447 [DEBUG] [Thread-131314] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:54:11.447 [DEBUG] [Thread-131314] [transport.py] [_log()] client lang: <none>
2025-12-31T16:54:11.447 [DEBUG] [Thread-131314] [transport.py] [_log()] server lang: <none>
2025-12-31T16:54:11.447 [DEBUG] [Thread-131314] [transport.py] [_log()] kex follows: False
2025-12-31T16:54:11.447 [DEBUG] [Thread-131314] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:54:11.447 [DEBUG] [Thread-131314] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:54:11.447 [DEBUG] [Thread-131314] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:54:11.447 [DEBUG] [Thread-131314] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:54:11.447 [DEBUG] [Thread-131314] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:54:11.447 [DEBUG] [Thread-131314] [transport.py] [_log()] Compression: none
2025-12-31T16:54:11.447 [DEBUG] [Thread-131314] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:54:11.456 [DEBUG] [Thread-131314] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:54:11.456 [DEBUG] [Thread-131314] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:54:11.457 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T16:54:11.457 [DEBUG] [Thread-131314] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T16:54:11.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:54:11.459 [DEBUG] [Thread-131314] [transport.py] [_log()] userauth is OK
2025-12-31T16:54:11.459 [DEBUG] [Thread-131314] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:54:11.459 [DEBUG] [Thread-131314] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:54:11.459 [DEBUG] [Thread-131314] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T16:54:11.459 [DEBUG] [Thread-131314] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:54:11.477 [INFO] [Thread-131314] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:54:11.478 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:54:12.100 [DEBUG] [Thread-131314] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:54:12.100 [DEBUG] [Thread-131314] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:54:12.100 [DEBUG] [Thread-131314] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T16:54:12.141 [DEBUG] [Thread-131314] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:54:12.142 [DEBUG] [Thread-131314] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:54:12.145 [DEBUG] [Thread-131314] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:54:12.157 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:54:12.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T16:54:12.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T16:54:12.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T16:54:12.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:54:12.169 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T16:54:12.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:54:12.169 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:54:12.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T16:54:12.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.620280 -999.00  +24.20  28.94     21   +0.60 1 2 1 1 1   888    0 20.42 -104.44 ----- 25.4 28.9 280.2 33.8 26.6 -14.8 26.6 -15.6 26.1 -15.8 26.4 -14.2
2025-12-31T16:54:12.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T16:54:12.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T16:54:12.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.620280
2025-12-31T16:54:12.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T16:54:12.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T16:54:12.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T16:54:12.171 [DEBUG] [Thread-131314] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:54:12.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T16:54:12.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T16:54:12.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T16:53:45', tmtdew=27.74, humidity=15.85, cloud=0.0, wind=28.28, temperature=24.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T14:53:12.192', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T16:54:12.257 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T16:54:12.269 [DEBUG] [Thread-131317] [transport.py] [_log()] starting thread (client mode): 0xb95f30d0
2025-12-31T16:54:12.269 [DEBUG] [Thread-131317] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:54:12.284 [DEBUG] [Thread-131317] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T16:54:12.284 [INFO] [Thread-131317] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T16:54:12.291 [DEBUG] [Thread-131317] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:54:12.292 [DEBUG] [Thread-131317] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T16:54:12.292 [DEBUG] [Thread-131317] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:54:12.292 [DEBUG] [Thread-131317] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:54:12.292 [DEBUG] [Thread-131317] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:54:12.292 [DEBUG] [Thread-131317] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:54:12.292 [DEBUG] [Thread-131317] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:54:12.292 [DEBUG] [Thread-131317] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:54:12.292 [DEBUG] [Thread-131317] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:54:12.292 [DEBUG] [Thread-131317] [transport.py] [_log()] client lang: <none>
2025-12-31T16:54:12.293 [DEBUG] [Thread-131317] [transport.py] [_log()] server lang: <none>
2025-12-31T16:54:12.293 [DEBUG] [Thread-131317] [transport.py] [_log()] kex follows: False
2025-12-31T16:54:12.293 [DEBUG] [Thread-131317] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:54:12.293 [DEBUG] [Thread-131317] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:54:12.293 [DEBUG] [Thread-131317] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:54:12.293 [DEBUG] [Thread-131317] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:54:12.293 [DEBUG] [Thread-131317] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:54:12.294 [DEBUG] [Thread-131317] [transport.py] [_log()] Compression: none
2025-12-31T16:54:12.294 [DEBUG] [Thread-131317] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:54:12.349 [DEBUG] [Thread-131317] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:54:12.349 [DEBUG] [Thread-131317] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:54:12.350 [DEBUG] [Thread-131317] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T16:54:12.350 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T16:54:12.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:54:12.404 [DEBUG] [Thread-131317] [transport.py] [_log()] userauth is OK
2025-12-31T16:54:12.404 [DEBUG] [Thread-131317] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:54:12.404 [DEBUG] [Thread-131317] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:54:12.404 [DEBUG] [Thread-131317] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T16:54:12.404 [DEBUG] [Thread-131317] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:54:12.419 [INFO] [Thread-131317] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:54:12.419 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T16:54:12.419 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:54:13.210 [DEBUG] [Thread-131317] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:54:13.210 [DEBUG] [Thread-131317] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:54:13.258 [DEBUG] [Thread-131317] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:54:13.258 [DEBUG] [Thread-131317] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:54:13.267 [DEBUG] [Thread-131317] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:54:13.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:54:13.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T16:54:13.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T16:54:13.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:54:13.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:54:13.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:54:13.304 [DEBUG] [Thread-131317] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:54:19.730 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:54:19.730 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:54:25.395 [DEBUG] [Thread-131319 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:54:25.764 [DEBUG] [Thread-131320 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:54:40.451 [DEBUG] [Thread-131321 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:54:43.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T16:54:43.323 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T16:54:43.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T16:54:44.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 16, 54, 17), 27.66, 15.93, 0.0, 31.95, 24.28, 0, 0, 0, 2, 0, 0),)
2025-12-31T16:54:44.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 16:54:17
2025-12-31T16:54:44.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T16:54:44.302 [DEBUG] [Thread-131322] [transport.py] [_log()] starting thread (client mode): 0xb95d7df0
2025-12-31T16:54:44.302 [DEBUG] [Thread-131322] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:54:44.322 [DEBUG] [Thread-131322] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T16:54:44.322 [INFO] [Thread-131322] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T16:54:44.325 [DEBUG] [Thread-131322] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:54:44.326 [DEBUG] [Thread-131322] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T16:54:44.326 [DEBUG] [Thread-131322] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:54:44.326 [DEBUG] [Thread-131322] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:54:44.326 [DEBUG] [Thread-131322] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:54:44.326 [DEBUG] [Thread-131322] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:54:44.326 [DEBUG] [Thread-131322] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:54:44.326 [DEBUG] [Thread-131322] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:54:44.326 [DEBUG] [Thread-131322] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:54:44.326 [DEBUG] [Thread-131322] [transport.py] [_log()] client lang: <none>
2025-12-31T16:54:44.326 [DEBUG] [Thread-131322] [transport.py] [_log()] server lang: <none>
2025-12-31T16:54:44.326 [DEBUG] [Thread-131322] [transport.py] [_log()] kex follows: False
2025-12-31T16:54:44.326 [DEBUG] [Thread-131322] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:54:44.326 [DEBUG] [Thread-131322] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:54:44.326 [DEBUG] [Thread-131322] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:54:44.326 [DEBUG] [Thread-131322] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:54:44.326 [DEBUG] [Thread-131322] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:54:44.326 [DEBUG] [Thread-131322] [transport.py] [_log()] Compression: none
2025-12-31T16:54:44.326 [DEBUG] [Thread-131322] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:54:44.346 [DEBUG] [Thread-131322] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:54:44.346 [DEBUG] [Thread-131322] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:54:44.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T16:54:44.347 [DEBUG] [Thread-131322] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T16:54:44.348 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:54:44.349 [DEBUG] [Thread-131322] [transport.py] [_log()] userauth is OK
2025-12-31T16:54:44.349 [DEBUG] [Thread-131322] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:54:44.349 [DEBUG] [Thread-131322] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:54:44.349 [DEBUG] [Thread-131322] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T16:54:44.349 [DEBUG] [Thread-131322] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:54:44.371 [INFO] [Thread-131322] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:54:44.372 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:54:45.141 [DEBUG] [Thread-131322] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:54:45.141 [DEBUG] [Thread-131322] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:54:45.142 [DEBUG] [Thread-131322] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T16:54:45.182 [DEBUG] [Thread-131322] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:54:45.182 [DEBUG] [Thread-131322] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:54:45.185 [DEBUG] [Thread-131322] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:54:45.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:54:45.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T16:54:45.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T16:54:45.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T16:54:45.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:54:45.208 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T16:54:45.208 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:54:45.208 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:54:45.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T16:54:45.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.620974 -999.00  +24.00  26.44     21   +0.60 1 2 1 1 1   888    0 21.26 -96.75 ----- 27.3 26.4 286.0 31.0 26.5 -15.9 26.4 -16.3 26.1 -14.8 26.4 -14.7
2025-12-31T16:54:45.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T16:54:45.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T16:54:45.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.620974
2025-12-31T16:54:45.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T16:54:45.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T16:54:45.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T16:54:45.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T16:54:45.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T16:54:45.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T16:54:17', tmtdew=27.66, humidity=15.93, cloud=0.0, wind=31.95, temperature=24.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T14:54:12.154', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T16:54:45.211 [DEBUG] [Thread-131322] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:54:45.306 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T16:54:45.318 [DEBUG] [Thread-131325] [transport.py] [_log()] starting thread (client mode): 0xb9593910
2025-12-31T16:54:45.318 [DEBUG] [Thread-131325] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:54:45.333 [DEBUG] [Thread-131325] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T16:54:45.333 [INFO] [Thread-131325] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T16:54:45.341 [DEBUG] [Thread-131325] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:54:45.342 [DEBUG] [Thread-131325] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T16:54:45.342 [DEBUG] [Thread-131325] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:54:45.342 [DEBUG] [Thread-131325] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:54:45.342 [DEBUG] [Thread-131325] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:54:45.342 [DEBUG] [Thread-131325] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:54:45.342 [DEBUG] [Thread-131325] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:54:45.342 [DEBUG] [Thread-131325] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:54:45.342 [DEBUG] [Thread-131325] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:54:45.342 [DEBUG] [Thread-131325] [transport.py] [_log()] client lang: <none>
2025-12-31T16:54:45.342 [DEBUG] [Thread-131325] [transport.py] [_log()] server lang: <none>
2025-12-31T16:54:45.342 [DEBUG] [Thread-131325] [transport.py] [_log()] kex follows: False
2025-12-31T16:54:45.343 [DEBUG] [Thread-131325] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:54:45.343 [DEBUG] [Thread-131325] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:54:45.343 [DEBUG] [Thread-131325] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:54:45.343 [DEBUG] [Thread-131325] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:54:45.343 [DEBUG] [Thread-131325] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:54:45.343 [DEBUG] [Thread-131325] [transport.py] [_log()] Compression: none
2025-12-31T16:54:45.343 [DEBUG] [Thread-131325] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:54:45.398 [DEBUG] [Thread-131325] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:54:45.399 [DEBUG] [Thread-131325] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:54:45.400 [DEBUG] [Thread-131325] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T16:54:45.400 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T16:54:45.401 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:54:45.454 [DEBUG] [Thread-131325] [transport.py] [_log()] userauth is OK
2025-12-31T16:54:45.455 [DEBUG] [Thread-131325] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:54:45.455 [DEBUG] [Thread-131325] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:54:45.455 [DEBUG] [Thread-131325] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T16:54:45.455 [DEBUG] [Thread-131325] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:54:45.473 [INFO] [Thread-131325] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:54:45.473 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T16:54:45.474 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:54:46.338 [DEBUG] [Thread-131325] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:54:46.338 [DEBUG] [Thread-131325] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:54:46.386 [DEBUG] [Thread-131325] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:54:46.386 [DEBUG] [Thread-131325] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:54:46.396 [DEBUG] [Thread-131325] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:54:46.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:54:46.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T16:54:46.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T16:54:46.423 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:54:46.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:54:46.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:54:46.432 [DEBUG] [Thread-131325] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:54:55.481 [DEBUG] [Thread-131327 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:55:10.524 [DEBUG] [Thread-131328 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:55:16.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T16:55:16.451 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T16:55:16.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-12-31T16:55:17.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 16, 54, 49), 27.64, 15.93, 0.0, 29.22, 24.35, 0, 0, 0, 2, 0, 0),)
2025-12-31T16:55:17.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 16:54:49
2025-12-31T16:55:17.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T16:55:17.431 [DEBUG] [Thread-131329] [transport.py] [_log()] starting thread (client mode): 0xb9591a20
2025-12-31T16:55:17.431 [DEBUG] [Thread-131329] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:55:17.453 [DEBUG] [Thread-131329] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T16:55:17.453 [INFO] [Thread-131329] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T16:55:17.456 [DEBUG] [Thread-131329] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:55:17.457 [DEBUG] [Thread-131329] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T16:55:17.457 [DEBUG] [Thread-131329] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:55:17.457 [DEBUG] [Thread-131329] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:55:17.457 [DEBUG] [Thread-131329] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:55:17.457 [DEBUG] [Thread-131329] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:55:17.457 [DEBUG] [Thread-131329] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:55:17.457 [DEBUG] [Thread-131329] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:55:17.457 [DEBUG] [Thread-131329] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:55:17.457 [DEBUG] [Thread-131329] [transport.py] [_log()] client lang: <none>
2025-12-31T16:55:17.457 [DEBUG] [Thread-131329] [transport.py] [_log()] server lang: <none>
2025-12-31T16:55:17.457 [DEBUG] [Thread-131329] [transport.py] [_log()] kex follows: False
2025-12-31T16:55:17.457 [DEBUG] [Thread-131329] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:55:17.457 [DEBUG] [Thread-131329] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:55:17.458 [DEBUG] [Thread-131329] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:55:17.458 [DEBUG] [Thread-131329] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:55:17.458 [DEBUG] [Thread-131329] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:55:17.458 [DEBUG] [Thread-131329] [transport.py] [_log()] Compression: none
2025-12-31T16:55:17.458 [DEBUG] [Thread-131329] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:55:17.477 [DEBUG] [Thread-131329] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:55:17.477 [DEBUG] [Thread-131329] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:55:17.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T16:55:17.479 [DEBUG] [Thread-131329] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T16:55:17.479 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:55:17.481 [DEBUG] [Thread-131329] [transport.py] [_log()] userauth is OK
2025-12-31T16:55:17.481 [DEBUG] [Thread-131329] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:55:17.481 [DEBUG] [Thread-131329] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:55:17.481 [DEBUG] [Thread-131329] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T16:55:17.481 [DEBUG] [Thread-131329] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:55:17.516 [INFO] [Thread-131329] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:55:17.517 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:55:19.871 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:55:19.872 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:55:21.960 [DEBUG] [Thread-131329] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:55:21.960 [DEBUG] [Thread-131329] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:55:21.960 [DEBUG] [Thread-131329] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T16:55:22.001 [DEBUG] [Thread-131329] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:55:22.001 [DEBUG] [Thread-131329] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:55:22.003 [DEBUG] [Thread-131329] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:55:22.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:55:22.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T16:55:22.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T16:55:22.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T16:55:22.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:55:22.024 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T16:55:22.024 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:55:22.024 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:55:22.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T16:55:22.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.621321 -999.00  +24.10  31.22     21   +0.50 1 2 2 1 1   888    0 21.45 -87.72 ----- 30.4 31.2 299.4 38.9 26.6 -15.6 26.5 -16.7 26.1 -16.2 26.4 -15.4
2025-12-31T16:55:22.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T16:55:22.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T16:55:22.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.621321
2025-12-31T16:55:22.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T16:55:22.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T16:55:22.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T16:55:22.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T16:55:22.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T16:55:22.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T16:54:49', tmtdew=27.64, humidity=15.93, cloud=0.0, wind=29.22, temperature=24.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T14:54:42.134', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T16:55:22.026 [DEBUG] [Thread-131329] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:55:22.100 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T16:55:22.111 [DEBUG] [Thread-131332] [transport.py] [_log()] starting thread (client mode): 0xb957a9b0
2025-12-31T16:55:22.111 [DEBUG] [Thread-131332] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:55:22.126 [DEBUG] [Thread-131332] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T16:55:22.126 [INFO] [Thread-131332] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T16:55:22.133 [DEBUG] [Thread-131332] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:55:22.133 [DEBUG] [Thread-131332] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T16:55:22.133 [DEBUG] [Thread-131332] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:55:22.133 [DEBUG] [Thread-131332] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:55:22.133 [DEBUG] [Thread-131332] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:55:22.133 [DEBUG] [Thread-131332] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:55:22.133 [DEBUG] [Thread-131332] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:55:22.134 [DEBUG] [Thread-131332] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:55:22.134 [DEBUG] [Thread-131332] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:55:22.134 [DEBUG] [Thread-131332] [transport.py] [_log()] client lang: <none>
2025-12-31T16:55:22.134 [DEBUG] [Thread-131332] [transport.py] [_log()] server lang: <none>
2025-12-31T16:55:22.134 [DEBUG] [Thread-131332] [transport.py] [_log()] kex follows: False
2025-12-31T16:55:22.134 [DEBUG] [Thread-131332] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:55:22.134 [DEBUG] [Thread-131332] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:55:22.134 [DEBUG] [Thread-131332] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:55:22.134 [DEBUG] [Thread-131332] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:55:22.134 [DEBUG] [Thread-131332] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:55:22.134 [DEBUG] [Thread-131332] [transport.py] [_log()] Compression: none
2025-12-31T16:55:22.134 [DEBUG] [Thread-131332] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:55:22.191 [DEBUG] [Thread-131332] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:55:22.191 [DEBUG] [Thread-131332] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:55:22.191 [DEBUG] [Thread-131332] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T16:55:22.191 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T16:55:22.191 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:55:22.248 [DEBUG] [Thread-131332] [transport.py] [_log()] userauth is OK
2025-12-31T16:55:22.248 [DEBUG] [Thread-131332] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:55:22.248 [DEBUG] [Thread-131332] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:55:22.248 [DEBUG] [Thread-131332] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T16:55:22.248 [DEBUG] [Thread-131332] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:55:22.262 [INFO] [Thread-131332] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:55:22.262 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T16:55:22.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:55:23.106 [DEBUG] [Thread-131332] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:55:23.106 [DEBUG] [Thread-131332] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:55:23.153 [DEBUG] [Thread-131332] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:55:23.153 [DEBUG] [Thread-131332] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:55:23.161 [DEBUG] [Thread-131332] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:55:23.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:55: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')
2025-12-31T16:55:23.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T16:55:23.184 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:55:23.184 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:55:23.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:55:23.192 [DEBUG] [Thread-131332] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:55:25.565 [DEBUG] [Thread-131334 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:55:25.821 [DEBUG] [Thread-131335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:55:40.609 [DEBUG] [Thread-131336 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:55:53.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T16:55:53.215 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T16:55:53.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T16:55:53.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 16, 55, 21), 27.65, 15.93, 0.0, 31.81, 24.4, 0, 0, 0, 2, 0, 0),)
2025-12-31T16:55:53.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 16:55:21
2025-12-31T16:55:54.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T16:55:54.232 [DEBUG] [Thread-131337] [transport.py] [_log()] starting thread (client mode): 0xb9593bb0
2025-12-31T16:55:54.232 [DEBUG] [Thread-131337] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:55:54.251 [DEBUG] [Thread-131337] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T16:55:54.251 [INFO] [Thread-131337] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T16:55:54.254 [DEBUG] [Thread-131337] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:55:54.254 [DEBUG] [Thread-131337] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T16:55:54.254 [DEBUG] [Thread-131337] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:55:54.255 [DEBUG] [Thread-131337] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:55:54.255 [DEBUG] [Thread-131337] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:55:54.255 [DEBUG] [Thread-131337] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:55:54.255 [DEBUG] [Thread-131337] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:55:54.255 [DEBUG] [Thread-131337] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:55:54.255 [DEBUG] [Thread-131337] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:55:54.255 [DEBUG] [Thread-131337] [transport.py] [_log()] client lang: <none>
2025-12-31T16:55:54.255 [DEBUG] [Thread-131337] [transport.py] [_log()] server lang: <none>
2025-12-31T16:55:54.255 [DEBUG] [Thread-131337] [transport.py] [_log()] kex follows: False
2025-12-31T16:55:54.255 [DEBUG] [Thread-131337] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:55:54.255 [DEBUG] [Thread-131337] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:55:54.255 [DEBUG] [Thread-131337] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:55:54.255 [DEBUG] [Thread-131337] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:55:54.255 [DEBUG] [Thread-131337] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:55:54.255 [DEBUG] [Thread-131337] [transport.py] [_log()] Compression: none
2025-12-31T16:55:54.255 [DEBUG] [Thread-131337] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:55:54.272 [DEBUG] [Thread-131337] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:55:54.272 [DEBUG] [Thread-131337] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:55:54.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T16:55:54.272 [DEBUG] [Thread-131337] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T16:55:54.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:55:54.273 [DEBUG] [Thread-131337] [transport.py] [_log()] userauth is OK
2025-12-31T16:55:54.273 [DEBUG] [Thread-131337] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:55:54.273 [DEBUG] [Thread-131337] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:55:54.273 [DEBUG] [Thread-131337] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T16:55:54.273 [DEBUG] [Thread-131337] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:55:54.288 [INFO] [Thread-131337] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:55:54.288 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:55:54.936 [DEBUG] [Thread-131337] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:55:54.936 [DEBUG] [Thread-131337] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:55:54.936 [DEBUG] [Thread-131337] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T16:55:54.978 [DEBUG] [Thread-131337] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:55:54.978 [DEBUG] [Thread-131337] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:55:54.980 [DEBUG] [Thread-131337] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:55:54.991 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:55:54.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T16:55:54.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T16:55:54.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T16:55:54.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:55:54.997 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T16:55:54.997 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:55:54.997 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:55:54.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T16:55:54.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.621669 -999.00  +23.90  28.49     21   +0.50 1 2 1 1 1   888    0 21.45 -82.38 ----- 27.2 28.5 297.3 39.9 26.4 -16.5 26.4 -17.6 26.0 -15.8 26.4 -15.5
2025-12-31T16:55:54.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T16:55:54.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T16:55:54.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.621669
2025-12-31T16:55:54.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T16:55:54.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T16:55:54.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T16:55:54.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T16:55:54.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T16:55:54.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T16:55:21', tmtdew=27.65, humidity=15.93, cloud=0.0, wind=31.81, temperature=24.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T14:55:12.202', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T16:55:54.998 [DEBUG] [Thread-131337] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:55:55.072 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T16:55:55.084 [DEBUG] [Thread-131340] [transport.py] [_log()] starting thread (client mode): 0xb9592dd0
2025-12-31T16:55:55.084 [DEBUG] [Thread-131340] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:55:55.099 [DEBUG] [Thread-131340] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T16:55:55.099 [INFO] [Thread-131340] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T16:55:55.107 [DEBUG] [Thread-131340] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:55:55.107 [DEBUG] [Thread-131340] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T16:55:55.107 [DEBUG] [Thread-131340] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:55:55.107 [DEBUG] [Thread-131340] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:55:55.107 [DEBUG] [Thread-131340] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:55:55.107 [DEBUG] [Thread-131340] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:55:55.107 [DEBUG] [Thread-131340] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:55:55.107 [DEBUG] [Thread-131340] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:55:55.107 [DEBUG] [Thread-131340] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:55:55.107 [DEBUG] [Thread-131340] [transport.py] [_log()] client lang: <none>
2025-12-31T16:55:55.107 [DEBUG] [Thread-131340] [transport.py] [_log()] server lang: <none>
2025-12-31T16:55:55.107 [DEBUG] [Thread-131340] [transport.py] [_log()] kex follows: False
2025-12-31T16:55:55.107 [DEBUG] [Thread-131340] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:55:55.107 [DEBUG] [Thread-131340] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:55:55.107 [DEBUG] [Thread-131340] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:55:55.107 [DEBUG] [Thread-131340] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:55:55.107 [DEBUG] [Thread-131340] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:55:55.107 [DEBUG] [Thread-131340] [transport.py] [_log()] Compression: none
2025-12-31T16:55:55.107 [DEBUG] [Thread-131340] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:55:55.164 [DEBUG] [Thread-131340] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:55:55.164 [DEBUG] [Thread-131340] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:55:55.164 [DEBUG] [Thread-131340] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T16:55:55.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T16:55:55.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:55:55.222 [DEBUG] [Thread-131340] [transport.py] [_log()] userauth is OK
2025-12-31T16:55:55.222 [DEBUG] [Thread-131340] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:55:55.222 [DEBUG] [Thread-131340] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:55:55.222 [DEBUG] [Thread-131340] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T16:55:55.222 [DEBUG] [Thread-131340] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:55:55.236 [INFO] [Thread-131340] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:55:55.236 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T16:55:55.236 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:55:55.645 [DEBUG] [Thread-131342 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:55:56.041 [DEBUG] [Thread-131340] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:55:56.041 [DEBUG] [Thread-131340] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:55:56.088 [DEBUG] [Thread-131340] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:55:56.089 [DEBUG] [Thread-131340] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:55:56.097 [DEBUG] [Thread-131340] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:55:56.105 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:55:56.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T16:55:56.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T16:55:56.122 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:55:56.122 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:55:56.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:55:56.130 [DEBUG] [Thread-131340] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:56:10.688 [DEBUG] [Thread-131343 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:56:20.011 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:56:20.012 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:56:25.718 [DEBUG] [Thread-131344 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:56:25.874 [DEBUG] [Thread-131345 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:56:26.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T16:56:26.132 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T16:56:26.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T16:56:26.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 16, 55, 53), 27.77, 15.55, 0.0, 30.7, 24.37, 0, 0, 0, 2, 0, 0),)
2025-12-31T16:56:26.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 16:55:53
2025-12-31T16:56:27.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T16:56:27.179 [DEBUG] [Thread-131346] [transport.py] [_log()] starting thread (client mode): 0xb95d55a0
2025-12-31T16:56:27.179 [DEBUG] [Thread-131346] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:56:27.199 [DEBUG] [Thread-131346] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T16:56:27.199 [INFO] [Thread-131346] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T16:56:27.202 [DEBUG] [Thread-131346] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:56:27.202 [DEBUG] [Thread-131346] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T16:56:27.202 [DEBUG] [Thread-131346] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:56:27.202 [DEBUG] [Thread-131346] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:56:27.202 [DEBUG] [Thread-131346] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:56:27.202 [DEBUG] [Thread-131346] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:56:27.202 [DEBUG] [Thread-131346] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:56:27.202 [DEBUG] [Thread-131346] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:56:27.202 [DEBUG] [Thread-131346] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:56:27.202 [DEBUG] [Thread-131346] [transport.py] [_log()] client lang: <none>
2025-12-31T16:56:27.202 [DEBUG] [Thread-131346] [transport.py] [_log()] server lang: <none>
2025-12-31T16:56:27.202 [DEBUG] [Thread-131346] [transport.py] [_log()] kex follows: False
2025-12-31T16:56:27.202 [DEBUG] [Thread-131346] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:56:27.202 [DEBUG] [Thread-131346] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:56:27.202 [DEBUG] [Thread-131346] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:56:27.202 [DEBUG] [Thread-131346] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:56:27.202 [DEBUG] [Thread-131346] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:56:27.202 [DEBUG] [Thread-131346] [transport.py] [_log()] Compression: none
2025-12-31T16:56:27.202 [DEBUG] [Thread-131346] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:56:27.217 [DEBUG] [Thread-131346] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:56:27.217 [DEBUG] [Thread-131346] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:56:27.217 [DEBUG] [Thread-131346] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T16:56:27.218 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T16:56:27.218 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:56:27.218 [DEBUG] [Thread-131346] [transport.py] [_log()] userauth is OK
2025-12-31T16:56:27.218 [DEBUG] [Thread-131346] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:56:27.218 [DEBUG] [Thread-131346] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:56:27.218 [DEBUG] [Thread-131346] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T16:56:27.218 [DEBUG] [Thread-131346] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:56:27.227 [INFO] [Thread-131346] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:56:27.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:56:27.953 [DEBUG] [Thread-131346] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:56:27.954 [DEBUG] [Thread-131346] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:56:27.954 [DEBUG] [Thread-131346] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T16:56:27.995 [DEBUG] [Thread-131346] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:56:27.995 [DEBUG] [Thread-131346] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:56:27.998 [DEBUG] [Thread-131346] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:56:28.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:56:28.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T16:56:28.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T16:56:28.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T16:56:28.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:56:28.017 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T16:56:28.017 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:56:28.017 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:56:28.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T16:56:28.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.622016 -999.00  +24.10  27.24     21   +0.50 1 2 1 1 1   888    0 21.31 -88.46 ----- 25.8 27.2 299.6 34.1 26.5 -16.8 26.4 -17.6 26.1 -15.9 26.4 -15.7
2025-12-31T16:56:28.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T16:56:28.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T16:56:28.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.622016
2025-12-31T16:56:28.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T16:56:28.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T16:56:28.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T16:56:28.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T16:56:28.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T16:56:28.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T16:55:53', tmtdew=27.77, humidity=15.55, cloud=0.0, wind=30.7, temperature=24.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T14:55:42.182', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T16:56:28.020 [DEBUG] [Thread-131346] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:56:28.108 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T16:56:28.119 [DEBUG] [Thread-131349] [transport.py] [_log()] starting thread (client mode): 0xb95d6aa0
2025-12-31T16:56:28.119 [DEBUG] [Thread-131349] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:56:28.134 [DEBUG] [Thread-131349] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T16:56:28.134 [INFO] [Thread-131349] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T16:56:28.141 [DEBUG] [Thread-131349] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:56:28.141 [DEBUG] [Thread-131349] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T16:56:28.141 [DEBUG] [Thread-131349] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:56:28.141 [DEBUG] [Thread-131349] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:56:28.142 [DEBUG] [Thread-131349] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:56:28.142 [DEBUG] [Thread-131349] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:56:28.142 [DEBUG] [Thread-131349] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:56:28.142 [DEBUG] [Thread-131349] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:56:28.142 [DEBUG] [Thread-131349] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:56:28.142 [DEBUG] [Thread-131349] [transport.py] [_log()] client lang: <none>
2025-12-31T16:56:28.142 [DEBUG] [Thread-131349] [transport.py] [_log()] server lang: <none>
2025-12-31T16:56:28.142 [DEBUG] [Thread-131349] [transport.py] [_log()] kex follows: False
2025-12-31T16:56:28.142 [DEBUG] [Thread-131349] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:56:28.142 [DEBUG] [Thread-131349] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:56:28.142 [DEBUG] [Thread-131349] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:56:28.142 [DEBUG] [Thread-131349] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:56:28.142 [DEBUG] [Thread-131349] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:56:28.142 [DEBUG] [Thread-131349] [transport.py] [_log()] Compression: none
2025-12-31T16:56:28.142 [DEBUG] [Thread-131349] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:56:28.199 [DEBUG] [Thread-131349] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:56:28.200 [DEBUG] [Thread-131349] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:56:28.200 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T16:56:28.201 [DEBUG] [Thread-131349] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T16:56:28.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:56:28.256 [DEBUG] [Thread-131349] [transport.py] [_log()] userauth is OK
2025-12-31T16:56:28.256 [DEBUG] [Thread-131349] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:56:28.256 [DEBUG] [Thread-131349] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:56:28.256 [DEBUG] [Thread-131349] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T16:56:28.256 [DEBUG] [Thread-131349] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:56:28.280 [INFO] [Thread-131349] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:56:28.280 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T16:56:28.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:56:29.099 [DEBUG] [Thread-131349] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:56:29.100 [DEBUG] [Thread-131349] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:56:29.148 [DEBUG] [Thread-131349] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:56:29.148 [DEBUG] [Thread-131349] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:56:29.157 [DEBUG] [Thread-131349] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:56:29.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:56:29.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-12-31T16:56:29.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T16:56:29.183 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:56:29.184 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:56:29.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:56:29.192 [DEBUG] [Thread-131349] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:56:40.753 [DEBUG] [Thread-131351 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:56:55.808 [DEBUG] [Thread-131352 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:56:59.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T16:56:59.215 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T16:56:59.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T16:56:59.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 16, 56, 25), 27.71, 15.61, 0.0, 31.57, 24.39, 0, 0, 0, 2, 0, 0),)
2025-12-31T16:56:59.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 16:56:25
2025-12-31T16:57:00.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T16:57:00.243 [DEBUG] [Thread-131353] [transport.py] [_log()] starting thread (client mode): 0xb9579db0
2025-12-31T16:57:00.243 [DEBUG] [Thread-131353] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:57:00.255 [DEBUG] [Thread-131353] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T16:57:00.255 [INFO] [Thread-131353] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T16:57:00.259 [DEBUG] [Thread-131353] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:57:00.259 [DEBUG] [Thread-131353] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T16:57:00.259 [DEBUG] [Thread-131353] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:57:00.259 [DEBUG] [Thread-131353] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:57:00.259 [DEBUG] [Thread-131353] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:57:00.259 [DEBUG] [Thread-131353] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:57:00.259 [DEBUG] [Thread-131353] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:57:00.259 [DEBUG] [Thread-131353] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:57:00.259 [DEBUG] [Thread-131353] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:57:00.259 [DEBUG] [Thread-131353] [transport.py] [_log()] client lang: <none>
2025-12-31T16:57:00.259 [DEBUG] [Thread-131353] [transport.py] [_log()] server lang: <none>
2025-12-31T16:57:00.259 [DEBUG] [Thread-131353] [transport.py] [_log()] kex follows: False
2025-12-31T16:57:00.259 [DEBUG] [Thread-131353] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:57:00.259 [DEBUG] [Thread-131353] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:57:00.259 [DEBUG] [Thread-131353] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:57:00.259 [DEBUG] [Thread-131353] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:57:00.259 [DEBUG] [Thread-131353] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:57:00.259 [DEBUG] [Thread-131353] [transport.py] [_log()] Compression: none
2025-12-31T16:57:00.259 [DEBUG] [Thread-131353] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:57:00.277 [DEBUG] [Thread-131353] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:57:00.278 [DEBUG] [Thread-131353] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:57:00.278 [DEBUG] [Thread-131353] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T16:57:00.278 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T16:57:00.279 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:57:00.281 [DEBUG] [Thread-131353] [transport.py] [_log()] userauth is OK
2025-12-31T16:57:00.281 [DEBUG] [Thread-131353] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:57:00.281 [DEBUG] [Thread-131353] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:57:00.281 [DEBUG] [Thread-131353] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T16:57:00.281 [DEBUG] [Thread-131353] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:57:00.305 [INFO] [Thread-131353] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:57:00.306 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:57:00.960 [DEBUG] [Thread-131353] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:57:00.961 [DEBUG] [Thread-131353] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:57:00.961 [DEBUG] [Thread-131353] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T16:57:01.002 [DEBUG] [Thread-131353] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:57:01.002 [DEBUG] [Thread-131353] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:57:01.006 [DEBUG] [Thread-131353] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:57:01.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:57:01.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T16:57:01.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T16:57:01.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T16:57:01.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:57:01.030 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T16:57:01.030 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:57:01.030 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:57:01.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T16:57:01.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.622363 -999.00  +24.20  29.51     21   +0.50 1 2 1 1 1   888    0 21.58 -84.23 ----- 24.6 29.5 306.2 33.6 26.4 -16.9 26.4 -17.6 26.1 -16.1 26.4 -15.7
2025-12-31T16:57:01.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T16:57:01.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T16:57:01.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.622363
2025-12-31T16:57:01.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T16:57:01.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T16:57:01.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T16:57:01.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T16:57:01.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T16:57:01.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T16:56:25', tmtdew=27.71, humidity=15.61, cloud=0.0, wind=31.57, temperature=24.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T14:56:12.163', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T16:57:01.033 [DEBUG] [Thread-131353] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:57:01.120 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T16:57:01.132 [DEBUG] [Thread-131356] [transport.py] [_log()] starting thread (client mode): 0xb9579210
2025-12-31T16:57:01.132 [DEBUG] [Thread-131356] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:57:01.147 [DEBUG] [Thread-131356] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T16:57:01.147 [INFO] [Thread-131356] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T16:57:01.155 [DEBUG] [Thread-131356] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:57:01.155 [DEBUG] [Thread-131356] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T16:57:01.155 [DEBUG] [Thread-131356] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:57:01.155 [DEBUG] [Thread-131356] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:57:01.156 [DEBUG] [Thread-131356] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:57:01.156 [DEBUG] [Thread-131356] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:57:01.156 [DEBUG] [Thread-131356] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:57:01.156 [DEBUG] [Thread-131356] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:57:01.156 [DEBUG] [Thread-131356] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:57:01.156 [DEBUG] [Thread-131356] [transport.py] [_log()] client lang: <none>
2025-12-31T16:57:01.156 [DEBUG] [Thread-131356] [transport.py] [_log()] server lang: <none>
2025-12-31T16:57:01.156 [DEBUG] [Thread-131356] [transport.py] [_log()] kex follows: False
2025-12-31T16:57:01.156 [DEBUG] [Thread-131356] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:57:01.157 [DEBUG] [Thread-131356] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:57:01.157 [DEBUG] [Thread-131356] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:57:01.157 [DEBUG] [Thread-131356] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:57:01.157 [DEBUG] [Thread-131356] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:57:01.158 [DEBUG] [Thread-131356] [transport.py] [_log()] Compression: none
2025-12-31T16:57:01.158 [DEBUG] [Thread-131356] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:57:01.213 [DEBUG] [Thread-131356] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:57:01.214 [DEBUG] [Thread-131356] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:57:01.215 [DEBUG] [Thread-131356] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T16:57:01.215 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T16:57:01.216 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:57:01.269 [DEBUG] [Thread-131356] [transport.py] [_log()] userauth is OK
2025-12-31T16:57:01.270 [DEBUG] [Thread-131356] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:57:01.270 [DEBUG] [Thread-131356] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:57:01.270 [DEBUG] [Thread-131356] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T16:57:01.270 [DEBUG] [Thread-131356] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:57:01.289 [INFO] [Thread-131356] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:57:01.289 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T16:57:01.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:57:02.195 [DEBUG] [Thread-131356] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:57:02.195 [DEBUG] [Thread-131356] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:57:02.243 [DEBUG] [Thread-131356] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:57:02.243 [DEBUG] [Thread-131356] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:57:02.252 [DEBUG] [Thread-131356] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:57:02.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:57:02.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T16:57:02.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T16:57:02.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:57:02.282 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:57:02.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:57:02.291 [DEBUG] [Thread-131356] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:57:10.843 [DEBUG] [Thread-131358 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:57:20.152 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:57:20.154 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:57:25.906 [DEBUG] [Thread-131359 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:57:25.935 [DEBUG] [Thread-131360 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:57:32.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T16:57:32.312 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T16:57:32.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T16:57:33.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 16, 57, 29), 27.61, 15.66, 0.0, 25.85, 24.22, 0, 0, 0, 2, 0, 0),)
2025-12-31T16:57:33.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 16:57:29
2025-12-31T16:57:33.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T16:57:33.333 [DEBUG] [Thread-131361] [transport.py] [_log()] starting thread (client mode): 0xb6bb0af0
2025-12-31T16:57:33.333 [DEBUG] [Thread-131361] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:57:33.352 [DEBUG] [Thread-131361] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T16:57:33.352 [INFO] [Thread-131361] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T16:57:33.356 [DEBUG] [Thread-131361] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:57:33.356 [DEBUG] [Thread-131361] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T16:57:33.356 [DEBUG] [Thread-131361] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:57:33.356 [DEBUG] [Thread-131361] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:57:33.356 [DEBUG] [Thread-131361] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:57:33.356 [DEBUG] [Thread-131361] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:57:33.356 [DEBUG] [Thread-131361] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:57:33.356 [DEBUG] [Thread-131361] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:57:33.356 [DEBUG] [Thread-131361] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:57:33.356 [DEBUG] [Thread-131361] [transport.py] [_log()] client lang: <none>
2025-12-31T16:57:33.356 [DEBUG] [Thread-131361] [transport.py] [_log()] server lang: <none>
2025-12-31T16:57:33.356 [DEBUG] [Thread-131361] [transport.py] [_log()] kex follows: False
2025-12-31T16:57:33.356 [DEBUG] [Thread-131361] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:57:33.356 [DEBUG] [Thread-131361] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:57:33.356 [DEBUG] [Thread-131361] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:57:33.356 [DEBUG] [Thread-131361] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:57:33.356 [DEBUG] [Thread-131361] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:57:33.356 [DEBUG] [Thread-131361] [transport.py] [_log()] Compression: none
2025-12-31T16:57:33.356 [DEBUG] [Thread-131361] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:57:33.372 [DEBUG] [Thread-131361] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:57:33.372 [DEBUG] [Thread-131361] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:57:33.372 [DEBUG] [Thread-131361] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T16:57:33.372 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T16:57:33.372 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:57:33.373 [DEBUG] [Thread-131361] [transport.py] [_log()] userauth is OK
2025-12-31T16:57:33.373 [DEBUG] [Thread-131361] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:57:33.373 [DEBUG] [Thread-131361] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:57:33.373 [DEBUG] [Thread-131361] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T16:57:33.373 [DEBUG] [Thread-131361] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:57:33.404 [INFO] [Thread-131361] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:57:33.404 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:57:34.176 [DEBUG] [Thread-131361] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:57:34.176 [DEBUG] [Thread-131361] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:57:34.176 [DEBUG] [Thread-131361] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T16:57:34.217 [DEBUG] [Thread-131361] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:57:34.218 [DEBUG] [Thread-131361] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:57:34.220 [DEBUG] [Thread-131361] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:57:34.230 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:57:34.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T16:57:34.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T16:57:34.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T16:57:34.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:57:34.236 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T16:57:34.236 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:57:34.236 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:57:34.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T16:57:34.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.622710 -999.00  +24.10  28.51     21   +0.50 1 2 1 1 1   888    0 21.23 -79.76 ----- 26.1 28.5 309.4 34.7 26.5 -17.3 26.4 -17.9 26.1 -16.4 26.4 -15.9
2025-12-31T16:57:34.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T16:57:34.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T16:57:34.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.622710
2025-12-31T16:57:34.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T16:57:34.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T16:57:34.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T16:57:34.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T16:57:34.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T16:57:34.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T16:57:29', tmtdew=27.61, humidity=15.66, cloud=0.0, wind=25.85, temperature=24.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T14:56:42.144', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T16:57:34.237 [DEBUG] [Thread-131361] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:57:34.311 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T16:57:34.322 [DEBUG] [Thread-131364] [transport.py] [_log()] starting thread (client mode): 0xb95d5450
2025-12-31T16:57:34.322 [DEBUG] [Thread-131364] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:57:34.337 [DEBUG] [Thread-131364] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T16:57:34.337 [INFO] [Thread-131364] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T16:57:34.344 [DEBUG] [Thread-131364] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:57:34.345 [DEBUG] [Thread-131364] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T16:57:34.345 [DEBUG] [Thread-131364] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:57:34.345 [DEBUG] [Thread-131364] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:57:34.345 [DEBUG] [Thread-131364] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:57:34.345 [DEBUG] [Thread-131364] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:57:34.345 [DEBUG] [Thread-131364] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:57:34.345 [DEBUG] [Thread-131364] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:57:34.345 [DEBUG] [Thread-131364] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:57:34.345 [DEBUG] [Thread-131364] [transport.py] [_log()] client lang: <none>
2025-12-31T16:57:34.345 [DEBUG] [Thread-131364] [transport.py] [_log()] server lang: <none>
2025-12-31T16:57:34.345 [DEBUG] [Thread-131364] [transport.py] [_log()] kex follows: False
2025-12-31T16:57:34.345 [DEBUG] [Thread-131364] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:57:34.345 [DEBUG] [Thread-131364] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:57:34.345 [DEBUG] [Thread-131364] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:57:34.345 [DEBUG] [Thread-131364] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:57:34.345 [DEBUG] [Thread-131364] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:57:34.345 [DEBUG] [Thread-131364] [transport.py] [_log()] Compression: none
2025-12-31T16:57:34.345 [DEBUG] [Thread-131364] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:57:34.401 [DEBUG] [Thread-131364] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:57:34.401 [DEBUG] [Thread-131364] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:57:34.401 [DEBUG] [Thread-131364] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T16:57:34.401 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T16:57:34.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:57:34.462 [DEBUG] [Thread-131364] [transport.py] [_log()] userauth is OK
2025-12-31T16:57:34.462 [DEBUG] [Thread-131364] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:57:34.462 [DEBUG] [Thread-131364] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:57:34.462 [DEBUG] [Thread-131364] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T16:57:34.462 [DEBUG] [Thread-131364] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:57:34.476 [INFO] [Thread-131364] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:57:34.477 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T16:57:34.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:57:35.326 [DEBUG] [Thread-131364] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:57:35.326 [DEBUG] [Thread-131364] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:57:35.374 [DEBUG] [Thread-131364] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:57:35.374 [DEBUG] [Thread-131364] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:57:35.383 [DEBUG] [Thread-131364] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:57:35.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:57:35.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T16:57:35.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T16:57:35.413 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:57:35.413 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:57:35.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:57:35.424 [DEBUG] [Thread-131364] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:57:40.935 [DEBUG] [Thread-131366 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:57:55.984 [DEBUG] [Thread-131367 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:58:05.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T16:58:05.444 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T16:58:05.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T16:58:06.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 16, 58, 2), 27.6, 15.68, 0.0, 26.52, 24.25, 0, 0, 0, 2, 0, 0),)
2025-12-31T16:58:06.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 16:58:02
2025-12-31T16:58:06.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T16:58:06.424 [DEBUG] [Thread-131368] [transport.py] [_log()] starting thread (client mode): 0xb6bb20b0
2025-12-31T16:58:06.424 [DEBUG] [Thread-131368] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:58:06.443 [DEBUG] [Thread-131368] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T16:58:06.443 [INFO] [Thread-131368] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T16:58:06.447 [DEBUG] [Thread-131368] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:58:06.448 [DEBUG] [Thread-131368] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T16:58:06.448 [DEBUG] [Thread-131368] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:58:06.448 [DEBUG] [Thread-131368] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:58:06.448 [DEBUG] [Thread-131368] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:58:06.448 [DEBUG] [Thread-131368] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:58:06.448 [DEBUG] [Thread-131368] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:58:06.448 [DEBUG] [Thread-131368] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:58:06.448 [DEBUG] [Thread-131368] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:58:06.448 [DEBUG] [Thread-131368] [transport.py] [_log()] client lang: <none>
2025-12-31T16:58:06.448 [DEBUG] [Thread-131368] [transport.py] [_log()] server lang: <none>
2025-12-31T16:58:06.448 [DEBUG] [Thread-131368] [transport.py] [_log()] kex follows: False
2025-12-31T16:58:06.448 [DEBUG] [Thread-131368] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:58:06.448 [DEBUG] [Thread-131368] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:58:06.449 [DEBUG] [Thread-131368] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:58:06.449 [DEBUG] [Thread-131368] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:58:06.449 [DEBUG] [Thread-131368] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:58:06.449 [DEBUG] [Thread-131368] [transport.py] [_log()] Compression: none
2025-12-31T16:58:06.449 [DEBUG] [Thread-131368] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:58:06.461 [DEBUG] [Thread-131368] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:58:06.462 [DEBUG] [Thread-131368] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:58:06.462 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T16:58:06.463 [DEBUG] [Thread-131368] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T16:58:06.464 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:58:06.465 [DEBUG] [Thread-131368] [transport.py] [_log()] userauth is OK
2025-12-31T16:58:06.466 [DEBUG] [Thread-131368] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:58:06.466 [DEBUG] [Thread-131368] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:58:06.466 [DEBUG] [Thread-131368] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T16:58:06.466 [DEBUG] [Thread-131368] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:58:06.489 [INFO] [Thread-131368] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:58:06.489 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:58:07.154 [DEBUG] [Thread-131368] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:58:07.155 [DEBUG] [Thread-131368] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:58:07.155 [DEBUG] [Thread-131368] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T16:58:07.195 [DEBUG] [Thread-131368] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:58:07.195 [DEBUG] [Thread-131368] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:58:07.198 [DEBUG] [Thread-131368] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:58:07.212 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:58:07.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T16:58:07.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T16:58:07.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T16:58:07.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:58:07.217 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T16:58:07.217 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:58:07.217 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:58:07.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T16:58:07.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.623057 -999.00  +24.10  20.84     21   +0.60 1 2 1 1 1   888    0 21.83 -76.92 ----- 25.6 20.8 298.9 25.9 26.4 -17.7 26.4 -18.2 26.1 -16.9 26.4 -16.0
2025-12-31T16:58:07.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T16:58:07.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T16:58:07.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.623057
2025-12-31T16:58:07.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T16:58:07.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T16:58:07.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T16:58:07.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T16:58:07.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T16:58:07.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T16:58:02', tmtdew=27.6, humidity=15.68, cloud=0.0, wind=26.52, temperature=24.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T14:57:12.125', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T16:58:07.218 [DEBUG] [Thread-131368] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:58:07.292 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T16:58:07.306 [DEBUG] [Thread-131371] [transport.py] [_log()] starting thread (client mode): 0xb6ba14e0
2025-12-31T16:58:07.306 [DEBUG] [Thread-131371] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:58:07.322 [DEBUG] [Thread-131371] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T16:58:07.322 [INFO] [Thread-131371] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T16:58:07.329 [DEBUG] [Thread-131371] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:58:07.329 [DEBUG] [Thread-131371] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T16:58:07.329 [DEBUG] [Thread-131371] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:58:07.329 [DEBUG] [Thread-131371] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:58:07.329 [DEBUG] [Thread-131371] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:58:07.329 [DEBUG] [Thread-131371] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:58:07.329 [DEBUG] [Thread-131371] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:58:07.329 [DEBUG] [Thread-131371] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:58:07.329 [DEBUG] [Thread-131371] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:58:07.329 [DEBUG] [Thread-131371] [transport.py] [_log()] client lang: <none>
2025-12-31T16:58:07.329 [DEBUG] [Thread-131371] [transport.py] [_log()] server lang: <none>
2025-12-31T16:58:07.330 [DEBUG] [Thread-131371] [transport.py] [_log()] kex follows: False
2025-12-31T16:58:07.330 [DEBUG] [Thread-131371] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:58:07.330 [DEBUG] [Thread-131371] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:58:07.330 [DEBUG] [Thread-131371] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:58:07.330 [DEBUG] [Thread-131371] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:58:07.330 [DEBUG] [Thread-131371] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:58:07.330 [DEBUG] [Thread-131371] [transport.py] [_log()] Compression: none
2025-12-31T16:58:07.330 [DEBUG] [Thread-131371] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:58:07.390 [DEBUG] [Thread-131371] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:58:07.390 [DEBUG] [Thread-131371] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:58:07.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T16:58:07.391 [DEBUG] [Thread-131371] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T16:58:07.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:58:07.448 [DEBUG] [Thread-131371] [transport.py] [_log()] userauth is OK
2025-12-31T16:58:07.448 [DEBUG] [Thread-131371] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:58:07.448 [DEBUG] [Thread-131371] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:58:07.448 [DEBUG] [Thread-131371] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T16:58:07.448 [DEBUG] [Thread-131371] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:58:07.462 [INFO] [Thread-131371] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:58:07.462 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T16:58:07.462 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:58:08.278 [DEBUG] [Thread-131371] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:58:08.278 [DEBUG] [Thread-131371] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:58:08.325 [DEBUG] [Thread-131371] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:58:08.325 [DEBUG] [Thread-131371] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:58:08.333 [DEBUG] [Thread-131371] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:58:08.341 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:58:08.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T16:58:08.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T16:58:08.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:58:08.357 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:58:08.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:58:08.365 [DEBUG] [Thread-131371] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:58:11.013 [DEBUG] [Thread-131373 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:58:20.293 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:58:20.294 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:58:25.990 [DEBUG] [Thread-131374 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:58:26.056 [DEBUG] [Thread-131375 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:58:38.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T16:58:38.388 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T16:58:38.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T16:58:39.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 16, 58, 34), 28.24, 15.16, 0.0, 25.55, 24.84, 0, 0, 0, 2, 0, 0),)
2025-12-31T16:58:39.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 16:58:34
2025-12-31T16:58:39.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T16:58:39.365 [DEBUG] [Thread-131376] [transport.py] [_log()] starting thread (client mode): 0xb6bbcaf0
2025-12-31T16:58:39.365 [DEBUG] [Thread-131376] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:58:39.386 [DEBUG] [Thread-131376] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T16:58:39.386 [INFO] [Thread-131376] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T16:58:39.389 [DEBUG] [Thread-131376] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:58:39.390 [DEBUG] [Thread-131376] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T16:58:39.390 [DEBUG] [Thread-131376] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:58:39.390 [DEBUG] [Thread-131376] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:58:39.390 [DEBUG] [Thread-131376] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:58:39.390 [DEBUG] [Thread-131376] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:58:39.390 [DEBUG] [Thread-131376] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:58:39.390 [DEBUG] [Thread-131376] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:58:39.390 [DEBUG] [Thread-131376] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:58:39.390 [DEBUG] [Thread-131376] [transport.py] [_log()] client lang: <none>
2025-12-31T16:58:39.390 [DEBUG] [Thread-131376] [transport.py] [_log()] server lang: <none>
2025-12-31T16:58:39.390 [DEBUG] [Thread-131376] [transport.py] [_log()] kex follows: False
2025-12-31T16:58:39.390 [DEBUG] [Thread-131376] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:58:39.390 [DEBUG] [Thread-131376] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:58:39.391 [DEBUG] [Thread-131376] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:58:39.391 [DEBUG] [Thread-131376] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:58:39.391 [DEBUG] [Thread-131376] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:58:39.391 [DEBUG] [Thread-131376] [transport.py] [_log()] Compression: none
2025-12-31T16:58:39.391 [DEBUG] [Thread-131376] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:58:39.412 [DEBUG] [Thread-131376] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:58:39.412 [DEBUG] [Thread-131376] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:58:39.414 [DEBUG] [Thread-131376] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T16:58:39.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T16:58:39.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:58:39.416 [DEBUG] [Thread-131376] [transport.py] [_log()] userauth is OK
2025-12-31T16:58:39.416 [DEBUG] [Thread-131376] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:58:39.416 [DEBUG] [Thread-131376] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:58:39.416 [DEBUG] [Thread-131376] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T16:58:39.416 [DEBUG] [Thread-131376] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:58:39.441 [INFO] [Thread-131376] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:58:39.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:58:40.223 [DEBUG] [Thread-131376] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:58:40.224 [DEBUG] [Thread-131376] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:58:40.224 [DEBUG] [Thread-131376] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T16:58:40.266 [DEBUG] [Thread-131376] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:58:40.266 [DEBUG] [Thread-131376] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:58:40.269 [DEBUG] [Thread-131376] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:58:40.280 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:58:40.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T16:58:40.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T16:58:40.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T16:58:40.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:58:40.286 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T16:58:40.286 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:58:40.286 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:58:40.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T16:58:40.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.623405 -999.00  +24.00  25.39     21   +0.50 1 2 1 1 1   888    0 21.47 -73.58 ----- 22.0 25.4 294.6 29.0 26.5 -17.1 26.4 -18.1 26.1 -16.6 26.4 -16.1
2025-12-31T16:58:40.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T16:58:40.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T16:58:40.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.623405
2025-12-31T16:58:40.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T16:58:40.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T16:58:40.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T16:58:40.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T16:58:40.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T16:58:40.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T16:58:34', tmtdew=28.24, humidity=15.16, cloud=0.0, wind=25.55, temperature=24.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T14:57:42.192', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T16:58:40.287 [DEBUG] [Thread-131376] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:58:40.359 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T16:58:40.371 [DEBUG] [Thread-131379] [transport.py] [_log()] starting thread (client mode): 0xb6bbdf60
2025-12-31T16:58:40.371 [DEBUG] [Thread-131379] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:58:40.386 [DEBUG] [Thread-131379] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T16:58:40.386 [INFO] [Thread-131379] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T16:58:40.394 [DEBUG] [Thread-131379] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:58:40.394 [DEBUG] [Thread-131379] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T16:58:40.394 [DEBUG] [Thread-131379] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:58:40.394 [DEBUG] [Thread-131379] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:58:40.394 [DEBUG] [Thread-131379] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:58:40.395 [DEBUG] [Thread-131379] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:58:40.395 [DEBUG] [Thread-131379] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:58:40.395 [DEBUG] [Thread-131379] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:58:40.395 [DEBUG] [Thread-131379] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:58:40.395 [DEBUG] [Thread-131379] [transport.py] [_log()] client lang: <none>
2025-12-31T16:58:40.395 [DEBUG] [Thread-131379] [transport.py] [_log()] server lang: <none>
2025-12-31T16:58:40.395 [DEBUG] [Thread-131379] [transport.py] [_log()] kex follows: False
2025-12-31T16:58:40.395 [DEBUG] [Thread-131379] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:58:40.396 [DEBUG] [Thread-131379] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:58:40.396 [DEBUG] [Thread-131379] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:58:40.396 [DEBUG] [Thread-131379] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:58:40.396 [DEBUG] [Thread-131379] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:58:40.396 [DEBUG] [Thread-131379] [transport.py] [_log()] Compression: none
2025-12-31T16:58:40.396 [DEBUG] [Thread-131379] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:58:40.453 [DEBUG] [Thread-131379] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:58:40.454 [DEBUG] [Thread-131379] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:58:40.454 [DEBUG] [Thread-131379] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T16:58:40.454 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T16:58:40.455 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:58:40.509 [DEBUG] [Thread-131379] [transport.py] [_log()] userauth is OK
2025-12-31T16:58:40.510 [DEBUG] [Thread-131379] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:58:40.510 [DEBUG] [Thread-131379] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:58:40.510 [DEBUG] [Thread-131379] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T16:58:40.510 [DEBUG] [Thread-131379] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:58:40.529 [INFO] [Thread-131379] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:58:40.529 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T16:58:40.530 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:58:41.089 [DEBUG] [Thread-131381 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:58:41.379 [DEBUG] [Thread-131379] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:58:41.380 [DEBUG] [Thread-131379] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:58:41.428 [DEBUG] [Thread-131379] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:58:41.428 [DEBUG] [Thread-131379] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:58:41.437 [DEBUG] [Thread-131379] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:58:41.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:58:41.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T16:58: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') -> 00000000
2025-12-31T16:58:41.465 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:58:41.465 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:58:41.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:58:41.474 [DEBUG] [Thread-131379] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:58:56.145 [DEBUG] [Thread-131382 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:59:11.183 [DEBUG] [Thread-131383 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:59:11.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T16:59:11.496 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T16:59:11.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T16:59:12.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 16, 59, 6), 27.58, 16.03, 0.0, 21.42, 24.2, 0, 0, 0, 2, 0, 0),)
2025-12-31T16:59:12.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 16:59:06
2025-12-31T16:59:12.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T16:59:12.485 [DEBUG] [Thread-131384] [transport.py] [_log()] starting thread (client mode): 0xb6bb2140
2025-12-31T16:59:12.485 [DEBUG] [Thread-131384] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:59:12.506 [DEBUG] [Thread-131384] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T16:59:12.506 [INFO] [Thread-131384] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T16:59:12.509 [DEBUG] [Thread-131384] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:59:12.509 [DEBUG] [Thread-131384] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T16:59:12.509 [DEBUG] [Thread-131384] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:59:12.509 [DEBUG] [Thread-131384] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:59:12.509 [DEBUG] [Thread-131384] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:59:12.509 [DEBUG] [Thread-131384] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:59:12.509 [DEBUG] [Thread-131384] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:59:12.509 [DEBUG] [Thread-131384] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:59:12.509 [DEBUG] [Thread-131384] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:59:12.509 [DEBUG] [Thread-131384] [transport.py] [_log()] client lang: <none>
2025-12-31T16:59:12.509 [DEBUG] [Thread-131384] [transport.py] [_log()] server lang: <none>
2025-12-31T16:59:12.509 [DEBUG] [Thread-131384] [transport.py] [_log()] kex follows: False
2025-12-31T16:59:12.509 [DEBUG] [Thread-131384] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:59:12.509 [DEBUG] [Thread-131384] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:59:12.509 [DEBUG] [Thread-131384] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:59:12.509 [DEBUG] [Thread-131384] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:59:12.509 [DEBUG] [Thread-131384] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:59:12.509 [DEBUG] [Thread-131384] [transport.py] [_log()] Compression: none
2025-12-31T16:59:12.509 [DEBUG] [Thread-131384] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:59:12.528 [DEBUG] [Thread-131384] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:59:12.529 [DEBUG] [Thread-131384] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:59:12.529 [DEBUG] [Thread-131384] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T16:59:12.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T16:59:12.530 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:59:12.531 [DEBUG] [Thread-131384] [transport.py] [_log()] userauth is OK
2025-12-31T16:59:12.531 [DEBUG] [Thread-131384] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:59:12.531 [DEBUG] [Thread-131384] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:59:12.532 [DEBUG] [Thread-131384] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T16:59:12.532 [DEBUG] [Thread-131384] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:59:12.556 [INFO] [Thread-131384] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:59:12.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:59:13.200 [DEBUG] [Thread-131384] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:59:13.200 [DEBUG] [Thread-131384] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:59:13.200 [DEBUG] [Thread-131384] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T16:59:13.242 [DEBUG] [Thread-131384] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:59:13.242 [DEBUG] [Thread-131384] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:59:13.246 [DEBUG] [Thread-131384] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:59:13.259 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:59:13.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T16:59:13.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T16:59:13.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T16:59:13.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:59:13.272 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T16:59:13.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:59:13.273 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:59:13.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T16:59:13.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.623752 -999.00  +23.90  17.23     21   +0.50 1 2 1 1 1   888    0 21.89 -72.61 ----- 21.9 17.2 298.2 28.2 26.4 -17.5 26.3 -18.4 26.1 -16.3 26.3 -16.2
2025-12-31T16:59:13.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T16:59:13.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T16:59:13.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.623752
2025-12-31T16:59:13.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T16:59:13.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T16:59:13.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T16:59:13.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T16:59:13.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T16:59:13.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T16:59:06', tmtdew=27.58, humidity=16.03, cloud=0.0, wind=21.42, temperature=24.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T14:58:12.173', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T16:59:13.275 [DEBUG] [Thread-131384] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:59:13.366 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T16:59:13.380 [DEBUG] [Thread-131387] [transport.py] [_log()] starting thread (client mode): 0xb95f2a40
2025-12-31T16:59:13.380 [DEBUG] [Thread-131387] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:59:13.396 [DEBUG] [Thread-131387] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T16:59:13.396 [INFO] [Thread-131387] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T16:59:13.404 [DEBUG] [Thread-131387] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:59:13.404 [DEBUG] [Thread-131387] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T16:59:13.404 [DEBUG] [Thread-131387] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:59:13.404 [DEBUG] [Thread-131387] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:59:13.404 [DEBUG] [Thread-131387] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:59:13.404 [DEBUG] [Thread-131387] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:59:13.404 [DEBUG] [Thread-131387] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:59:13.404 [DEBUG] [Thread-131387] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:59:13.404 [DEBUG] [Thread-131387] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:59:13.404 [DEBUG] [Thread-131387] [transport.py] [_log()] client lang: <none>
2025-12-31T16:59:13.404 [DEBUG] [Thread-131387] [transport.py] [_log()] server lang: <none>
2025-12-31T16:59:13.404 [DEBUG] [Thread-131387] [transport.py] [_log()] kex follows: False
2025-12-31T16:59:13.405 [DEBUG] [Thread-131387] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:59:13.405 [DEBUG] [Thread-131387] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:59:13.405 [DEBUG] [Thread-131387] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:59:13.405 [DEBUG] [Thread-131387] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:59:13.405 [DEBUG] [Thread-131387] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:59:13.405 [DEBUG] [Thread-131387] [transport.py] [_log()] Compression: none
2025-12-31T16:59:13.405 [DEBUG] [Thread-131387] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:59:13.463 [DEBUG] [Thread-131387] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:59:13.463 [DEBUG] [Thread-131387] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:59:13.464 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T16:59:13.465 [DEBUG] [Thread-131387] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T16:59:13.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:59:13.519 [DEBUG] [Thread-131387] [transport.py] [_log()] userauth is OK
2025-12-31T16:59:13.519 [DEBUG] [Thread-131387] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:59:13.519 [DEBUG] [Thread-131387] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:59:13.519 [DEBUG] [Thread-131387] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T16:59:13.519 [DEBUG] [Thread-131387] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:59:13.538 [INFO] [Thread-131387] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:59:13.539 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T16:59:13.539 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:59:14.383 [DEBUG] [Thread-131387] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:59:14.383 [DEBUG] [Thread-131387] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:59:14.431 [DEBUG] [Thread-131387] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:59:14.431 [DEBUG] [Thread-131387] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:59:14.440 [DEBUG] [Thread-131387] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:59:14.448 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:59:14.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T16:59:14.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T16:59:14.465 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:59:14.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:59:14.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:59:14.474 [DEBUG] [Thread-131387] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:59:20.436 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:59:20.437 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:59:26.036 [DEBUG] [Thread-131389 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:59:26.217 [DEBUG] [Thread-131390 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:59:41.254 [DEBUG] [Thread-131391 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T16:59:44.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T16:59:44.496 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T16:59:44.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T16:59:45.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 16, 59, 38), 27.61, 15.66, 0.0, 29.63, 24.3, 0, 0, 0, 2, 0, 0),)
2025-12-31T16:59:45.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 16:59:38
2025-12-31T16:59:45.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T16:59:45.482 [DEBUG] [Thread-131392] [transport.py] [_log()] starting thread (client mode): 0xb95f3bb0
2025-12-31T16:59:45.482 [DEBUG] [Thread-131392] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:59:45.497 [DEBUG] [Thread-131392] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T16:59:45.497 [INFO] [Thread-131392] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T16:59:45.500 [DEBUG] [Thread-131392] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:59:45.500 [DEBUG] [Thread-131392] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T16:59:45.500 [DEBUG] [Thread-131392] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:59:45.500 [DEBUG] [Thread-131392] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:59:45.500 [DEBUG] [Thread-131392] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:59:45.500 [DEBUG] [Thread-131392] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:59:45.500 [DEBUG] [Thread-131392] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:59:45.500 [DEBUG] [Thread-131392] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:59:45.500 [DEBUG] [Thread-131392] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:59:45.500 [DEBUG] [Thread-131392] [transport.py] [_log()] client lang: <none>
2025-12-31T16:59:45.500 [DEBUG] [Thread-131392] [transport.py] [_log()] server lang: <none>
2025-12-31T16:59:45.500 [DEBUG] [Thread-131392] [transport.py] [_log()] kex follows: False
2025-12-31T16:59:45.500 [DEBUG] [Thread-131392] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:59:45.500 [DEBUG] [Thread-131392] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:59:45.500 [DEBUG] [Thread-131392] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:59:45.500 [DEBUG] [Thread-131392] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:59:45.500 [DEBUG] [Thread-131392] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:59:45.500 [DEBUG] [Thread-131392] [transport.py] [_log()] Compression: none
2025-12-31T16:59:45.500 [DEBUG] [Thread-131392] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:59:45.515 [DEBUG] [Thread-131392] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:59:45.515 [DEBUG] [Thread-131392] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:59:45.515 [DEBUG] [Thread-131392] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T16:59:45.516 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T16:59:45.516 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:59:45.516 [DEBUG] [Thread-131392] [transport.py] [_log()] userauth is OK
2025-12-31T16:59:45.516 [DEBUG] [Thread-131392] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:59:45.516 [DEBUG] [Thread-131392] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:59:45.516 [DEBUG] [Thread-131392] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T16:59:45.516 [DEBUG] [Thread-131392] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:59:45.527 [INFO] [Thread-131392] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:59:45.528 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:59:46.351 [DEBUG] [Thread-131392] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:59:46.351 [DEBUG] [Thread-131392] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:59:46.351 [DEBUG] [Thread-131392] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T16:59:46.391 [DEBUG] [Thread-131392] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:59:46.391 [DEBUG] [Thread-131392] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:59:46.393 [DEBUG] [Thread-131392] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:59:46.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:59:46.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T16:59:46.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T16:59:46.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T16:59:46.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:59:46.406 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T16:59:46.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:59:46.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:59:46.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T16:59:46.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.624446 -999.00  +24.00  35.45     21   +0.70 1 2 2 1 1   888    0 21.65 -63.48 ----- 32.1 35.5 314.0 38.5 26.4 -17.1 26.3 -17.7 26.1 -16.3 26.4 -16.1
2025-12-31T16:59:46.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T16:59:46.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T16:59:46.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.624446
2025-12-31T16:59:46.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T16:59:46.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T16:59:46.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T16:59:46.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T16:59:46.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T16:59:46.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T16:59:38', tmtdew=27.61, humidity=15.66, cloud=0.0, wind=29.63, temperature=24.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T14:59:12.134', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T16:59:46.407 [DEBUG] [Thread-131392] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:59:46.481 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T16:59:46.494 [DEBUG] [Thread-131395] [transport.py] [_log()] starting thread (client mode): 0xb6ba19c0
2025-12-31T16:59:46.494 [DEBUG] [Thread-131395] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T16:59:46.510 [DEBUG] [Thread-131395] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T16:59:46.510 [INFO] [Thread-131395] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T16:59:46.517 [DEBUG] [Thread-131395] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T16:59:46.517 [DEBUG] [Thread-131395] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T16:59:46.517 [DEBUG] [Thread-131395] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T16:59:46.517 [DEBUG] [Thread-131395] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:59:46.517 [DEBUG] [Thread-131395] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T16:59:46.517 [DEBUG] [Thread-131395] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:59:46.517 [DEBUG] [Thread-131395] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T16:59:46.517 [DEBUG] [Thread-131395] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T16:59:46.517 [DEBUG] [Thread-131395] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T16:59:46.517 [DEBUG] [Thread-131395] [transport.py] [_log()] client lang: <none>
2025-12-31T16:59:46.517 [DEBUG] [Thread-131395] [transport.py] [_log()] server lang: <none>
2025-12-31T16:59:46.517 [DEBUG] [Thread-131395] [transport.py] [_log()] kex follows: False
2025-12-31T16:59:46.517 [DEBUG] [Thread-131395] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T16:59:46.517 [DEBUG] [Thread-131395] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T16:59:46.517 [DEBUG] [Thread-131395] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T16:59:46.517 [DEBUG] [Thread-131395] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T16:59:46.517 [DEBUG] [Thread-131395] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T16:59:46.517 [DEBUG] [Thread-131395] [transport.py] [_log()] Compression: none
2025-12-31T16:59:46.517 [DEBUG] [Thread-131395] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T16:59:46.575 [DEBUG] [Thread-131395] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T16:59:46.576 [DEBUG] [Thread-131395] [transport.py] [_log()] Switch to new keys ...
2025-12-31T16:59:46.576 [DEBUG] [Thread-131395] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T16:59:46.576 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T16:59:46.577 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T16:59:46.635 [DEBUG] [Thread-131395] [transport.py] [_log()] userauth is OK
2025-12-31T16:59:46.635 [DEBUG] [Thread-131395] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T16:59:46.636 [DEBUG] [Thread-131395] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T16:59:46.636 [DEBUG] [Thread-131395] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T16:59:46.636 [DEBUG] [Thread-131395] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T16:59:46.654 [INFO] [Thread-131395] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T16:59:46.654 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T16:59:46.655 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T16:59:47.505 [DEBUG] [Thread-131395] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T16:59:47.505 [DEBUG] [Thread-131395] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T16:59:47.552 [DEBUG] [Thread-131395] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T16:59:47.553 [DEBUG] [Thread-131395] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T16:59:47.561 [DEBUG] [Thread-131395] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T16:59:47.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T16:59:47.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T16:59:47.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T16:59:47.587 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T16:59:47.587 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T16:59:47.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T16:59:47.595 [DEBUG] [Thread-131395] [transport.py] [_log()] EOF in transport thread
2025-12-31T16:59:56.287 [DEBUG] [Thread-131397 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:00:11.333 [DEBUG] [Thread-131398 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:00:17.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T17:00:17.618 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T17:00:17.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T17:00:18.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 17, 0, 10), 27.46, 15.84, 0.0, 34.32, 24.34, 0, 0, 0, 2, 0, 0),)
2025-12-31T17:00:18.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 17:00:10
2025-12-31T17:00:18.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T17:00:18.598 [DEBUG] [Thread-131399] [transport.py] [_log()] starting thread (client mode): 0xb95f2cb0
2025-12-31T17:00:18.598 [DEBUG] [Thread-131399] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:00:18.618 [DEBUG] [Thread-131399] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T17:00:18.618 [INFO] [Thread-131399] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T17:00:18.620 [DEBUG] [Thread-131399] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:00:18.620 [DEBUG] [Thread-131399] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T17:00:18.620 [DEBUG] [Thread-131399] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:00:18.620 [DEBUG] [Thread-131399] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:00:18.620 [DEBUG] [Thread-131399] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:00:18.620 [DEBUG] [Thread-131399] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:00:18.620 [DEBUG] [Thread-131399] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:00:18.620 [DEBUG] [Thread-131399] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:00:18.620 [DEBUG] [Thread-131399] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:00:18.620 [DEBUG] [Thread-131399] [transport.py] [_log()] client lang: <none>
2025-12-31T17:00:18.620 [DEBUG] [Thread-131399] [transport.py] [_log()] server lang: <none>
2025-12-31T17:00:18.620 [DEBUG] [Thread-131399] [transport.py] [_log()] kex follows: False
2025-12-31T17:00:18.620 [DEBUG] [Thread-131399] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:00:18.620 [DEBUG] [Thread-131399] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:00:18.620 [DEBUG] [Thread-131399] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:00:18.620 [DEBUG] [Thread-131399] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:00:18.620 [DEBUG] [Thread-131399] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:00:18.620 [DEBUG] [Thread-131399] [transport.py] [_log()] Compression: none
2025-12-31T17:00:18.621 [DEBUG] [Thread-131399] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:00:18.629 [DEBUG] [Thread-131399] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:00:18.630 [DEBUG] [Thread-131399] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:00:18.630 [DEBUG] [Thread-131399] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T17:00:18.630 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T17:00:18.630 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:00:18.631 [DEBUG] [Thread-131399] [transport.py] [_log()] userauth is OK
2025-12-31T17:00:18.631 [DEBUG] [Thread-131399] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:00:18.631 [DEBUG] [Thread-131399] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:00:18.631 [DEBUG] [Thread-131399] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T17:00:18.631 [DEBUG] [Thread-131399] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:00:18.644 [INFO] [Thread-131399] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:00:18.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:00:20.576 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:00:20.577 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:00:26.086 [DEBUG] [Thread-131401 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:00:26.365 [DEBUG] [Thread-131402 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:00:27.984 [DEBUG] [Thread-131399] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:00:27.984 [DEBUG] [Thread-131399] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:00:27.985 [DEBUG] [Thread-131399] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T17:00:28.025 [DEBUG] [Thread-131399] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:00:28.025 [DEBUG] [Thread-131399] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:00:28.027 [DEBUG] [Thread-131399] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:00:28.068 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:00:28.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T17:00:28.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T17:00:28.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T17:00:28.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:00:28.093 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T17:00:28.093 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:00:28.094 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:00:28.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T17:00:28.094 [WARNING] [poll_weather_worker] [driver.py] [poll_weather_state()] Unable to get atlas cloud data: list index out of range
2025-12-31T17:00:28.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T17:00:10', tmtdew=27.46, humidity=15.84, cloud=0.0, wind=34.32, temperature=24.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp=None, atlas_cloud=None, atlas_rain=None, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T17:00:28.095 [DEBUG] [Thread-131399] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:00:28.171 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T17:00:28.183 [DEBUG] [Thread-131404] [transport.py] [_log()] starting thread (client mode): 0xb9590eb0
2025-12-31T17:00:28.183 [DEBUG] [Thread-131404] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:00:28.197 [DEBUG] [Thread-131404] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T17:00:28.197 [INFO] [Thread-131404] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T17:00:28.205 [DEBUG] [Thread-131404] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:00:28.205 [DEBUG] [Thread-131404] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T17:00:28.205 [DEBUG] [Thread-131404] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:00:28.205 [DEBUG] [Thread-131404] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:00:28.205 [DEBUG] [Thread-131404] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:00:28.205 [DEBUG] [Thread-131404] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:00:28.205 [DEBUG] [Thread-131404] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:00:28.205 [DEBUG] [Thread-131404] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:00:28.205 [DEBUG] [Thread-131404] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:00:28.205 [DEBUG] [Thread-131404] [transport.py] [_log()] client lang: <none>
2025-12-31T17:00:28.206 [DEBUG] [Thread-131404] [transport.py] [_log()] server lang: <none>
2025-12-31T17:00:28.206 [DEBUG] [Thread-131404] [transport.py] [_log()] kex follows: False
2025-12-31T17:00:28.206 [DEBUG] [Thread-131404] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:00:28.206 [DEBUG] [Thread-131404] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:00:28.206 [DEBUG] [Thread-131404] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:00:28.206 [DEBUG] [Thread-131404] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:00:28.206 [DEBUG] [Thread-131404] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:00:28.206 [DEBUG] [Thread-131404] [transport.py] [_log()] Compression: none
2025-12-31T17:00:28.206 [DEBUG] [Thread-131404] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:00:28.269 [DEBUG] [Thread-131404] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:00:28.269 [DEBUG] [Thread-131404] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:00:28.270 [DEBUG] [Thread-131404] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T17:00:28.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T17:00:28.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:00:28.325 [DEBUG] [Thread-131404] [transport.py] [_log()] userauth is OK
2025-12-31T17:00:28.326 [DEBUG] [Thread-131404] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:00:28.326 [DEBUG] [Thread-131404] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:00:28.326 [DEBUG] [Thread-131404] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T17:00:28.326 [DEBUG] [Thread-131404] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:00:28.345 [INFO] [Thread-131404] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:00:28.345 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T17:00:28.345 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:00:29.201 [DEBUG] [Thread-131404] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:00:29.201 [DEBUG] [Thread-131404] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:00:29.248 [DEBUG] [Thread-131404] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:00:29.249 [DEBUG] [Thread-131404] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:00:29.257 [DEBUG] [Thread-131404] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:00:29.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:00:29.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T17:00:29.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T17:00:29.284 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:00:29.284 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:00:29.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:00:29.292 [DEBUG] [Thread-131404] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:00:41.401 [DEBUG] [Thread-131406 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:00:56.452 [DEBUG] [Thread-131407 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:00:59.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T17:00:59.309 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T17:00:59.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T17:00:59.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 17, 0, 42), 27.44, 15.83, 0.0, 38.02, 24.59, 0, 0, 0, 2, 0, 0),)
2025-12-31T17:00:59.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 17:00:42
2025-12-31T17:01:00.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T17:01:00.270 [DEBUG] [Thread-131408] [transport.py] [_log()] starting thread (client mode): 0xb9591e70
2025-12-31T17:01:00.270 [DEBUG] [Thread-131408] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:01:00.290 [DEBUG] [Thread-131408] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T17:01:00.290 [INFO] [Thread-131408] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T17:01:00.293 [DEBUG] [Thread-131408] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:01:00.293 [DEBUG] [Thread-131408] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T17:01:00.294 [DEBUG] [Thread-131408] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:01:00.294 [DEBUG] [Thread-131408] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:01:00.294 [DEBUG] [Thread-131408] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:01:00.294 [DEBUG] [Thread-131408] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:01:00.294 [DEBUG] [Thread-131408] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:01:00.294 [DEBUG] [Thread-131408] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:01:00.294 [DEBUG] [Thread-131408] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:01:00.294 [DEBUG] [Thread-131408] [transport.py] [_log()] client lang: <none>
2025-12-31T17:01:00.294 [DEBUG] [Thread-131408] [transport.py] [_log()] server lang: <none>
2025-12-31T17:01:00.294 [DEBUG] [Thread-131408] [transport.py] [_log()] kex follows: False
2025-12-31T17:01:00.294 [DEBUG] [Thread-131408] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:01:00.294 [DEBUG] [Thread-131408] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:01:00.294 [DEBUG] [Thread-131408] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:01:00.294 [DEBUG] [Thread-131408] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:01:00.294 [DEBUG] [Thread-131408] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:01:00.294 [DEBUG] [Thread-131408] [transport.py] [_log()] Compression: none
2025-12-31T17:01:00.294 [DEBUG] [Thread-131408] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:01:00.313 [DEBUG] [Thread-131408] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:01:00.314 [DEBUG] [Thread-131408] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:01:00.314 [DEBUG] [Thread-131408] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T17:01:00.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T17:01:00.315 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:01:00.316 [DEBUG] [Thread-131408] [transport.py] [_log()] userauth is OK
2025-12-31T17:01:00.316 [DEBUG] [Thread-131408] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:01:00.316 [DEBUG] [Thread-131408] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:01:00.317 [DEBUG] [Thread-131408] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T17:01:00.317 [DEBUG] [Thread-131408] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:01:00.341 [INFO] [Thread-131408] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:01:00.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:01:00.928 [DEBUG] [Thread-131408] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:01:00.928 [DEBUG] [Thread-131408] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:01:00.929 [DEBUG] [Thread-131408] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T17:01:00.969 [DEBUG] [Thread-131408] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:01:00.969 [DEBUG] [Thread-131408] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:01:00.972 [DEBUG] [Thread-131408] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:01:00.985 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:01:00.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T17:01:00.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T17:01:00.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T17:01:00.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:01:00.997 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T17:01:00.997 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:01:00.997 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:01:00.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T17:01:00.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.625141 -999.00  +24.20  19.31     21   +0.80 1 2 1 1 1   888    0 22.38 -59.02 ----- 28.9 19.3 300.0 34.9 26.4 -18.5 26.4 -17.5 26.0 -16.8 26.4 -16.2
2025-12-31T17:01:00.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T17:01:00.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T17:01:00.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.625141
2025-12-31T17:01:00.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T17:01:00.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T17:01:00.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T17:01:00.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T17:01:00.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T17:01:01.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T17:00:42', tmtdew=27.44, humidity=15.83, cloud=0.0, wind=38.02, temperature=24.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T15:00:12.182', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T17:01:01.000 [DEBUG] [Thread-131408] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:01:01.097 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T17:01:11.496 [DEBUG] [Thread-131411 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:01:20.718 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:01:20.719 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:01:26.132 [DEBUG] [Thread-131412 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:01:26.542 [DEBUG] [Thread-131413 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:01:41.577 [DEBUG] [Thread-131414 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:01:56.613 [DEBUG] [Thread-131415 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:02:11.647 [DEBUG] [Thread-131416 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:02:20.859 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:02:20.860 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:02:26.184 [DEBUG] [Thread-131417 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:02:26.684 [DEBUG] [Thread-131418 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:02:41.717 [DEBUG] [Thread-131419 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:02:56.751 [DEBUG] [Thread-131420 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:03:11.790 [DEBUG] [Thread-131421 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:03:13.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-12-31T17:03:20.998 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:03:20.999 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:03:26.238 [DEBUG] [Thread-131422 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:03:26.825 [DEBUG] [Thread-131423 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:03:41.863 [DEBUG] [Thread-131424 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:03:43.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T17:03:43.129 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T17:03:43.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T17:03:43.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 17, 3, 22), 27.09, 16.35, 0.0, 37.64, 24.42, 0, 0, 0, 2, 0, 0),)
2025-12-31T17:03:43.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 17:03:22
2025-12-31T17:03:43.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T17:03:44.140 [DEBUG] [Thread-131425] [transport.py] [_log()] starting thread (client mode): 0xb9590430
2025-12-31T17:03:44.140 [DEBUG] [Thread-131425] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:03:44.156 [DEBUG] [Thread-131425] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T17:03:44.156 [INFO] [Thread-131425] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T17:03:44.159 [DEBUG] [Thread-131425] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:03:44.159 [DEBUG] [Thread-131425] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T17:03:44.159 [DEBUG] [Thread-131425] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:03:44.159 [DEBUG] [Thread-131425] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:03:44.159 [DEBUG] [Thread-131425] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:03:44.159 [DEBUG] [Thread-131425] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:03:44.159 [DEBUG] [Thread-131425] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:03:44.159 [DEBUG] [Thread-131425] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:03:44.159 [DEBUG] [Thread-131425] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:03:44.159 [DEBUG] [Thread-131425] [transport.py] [_log()] client lang: <none>
2025-12-31T17:03:44.159 [DEBUG] [Thread-131425] [transport.py] [_log()] server lang: <none>
2025-12-31T17:03:44.159 [DEBUG] [Thread-131425] [transport.py] [_log()] kex follows: False
2025-12-31T17:03:44.159 [DEBUG] [Thread-131425] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:03:44.159 [DEBUG] [Thread-131425] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:03:44.159 [DEBUG] [Thread-131425] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:03:44.159 [DEBUG] [Thread-131425] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:03:44.159 [DEBUG] [Thread-131425] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:03:44.159 [DEBUG] [Thread-131425] [transport.py] [_log()] Compression: none
2025-12-31T17:03:44.159 [DEBUG] [Thread-131425] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:03:44.176 [DEBUG] [Thread-131425] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:03:44.176 [DEBUG] [Thread-131425] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:03:44.177 [DEBUG] [Thread-131425] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T17:03:44.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T17:03:44.178 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:03:44.179 [DEBUG] [Thread-131425] [transport.py] [_log()] userauth is OK
2025-12-31T17:03:44.179 [DEBUG] [Thread-131425] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:03:44.179 [DEBUG] [Thread-131425] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:03:44.179 [DEBUG] [Thread-131425] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T17:03:44.179 [DEBUG] [Thread-131425] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:03:44.205 [INFO] [Thread-131425] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:03:44.205 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:03:45.032 [DEBUG] [Thread-131425] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:03:45.033 [DEBUG] [Thread-131425] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:03:45.033 [DEBUG] [Thread-131425] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T17:03:45.074 [DEBUG] [Thread-131425] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:03:45.074 [DEBUG] [Thread-131425] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:03:45.078 [DEBUG] [Thread-131425] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:03:45.092 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:03:45.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T17:03:45.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T17:03:45.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T17:03:45.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:03:45.104 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T17:03:45.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:03:45.104 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:03:45.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T17:03:45.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.627224 -999.00  +24.20  27.60     21   +1.10 1 2 1 1 1   888    0 22.70 -41.10 ----- 28.9 27.6 283.9 38.6 26.4 -17.8 26.3 -17.4 26.0 -17.9 26.2 -16.1
2025-12-31T17:03:45.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T17:03:45.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T17:03:45.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.627224
2025-12-31T17:03:45.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T17:03:45.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T17:03:45.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T17:03:45.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T17:03:45.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T17:03:45.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T17:03:22', tmtdew=27.09, humidity=16.35, cloud=0.0, wind=37.64, temperature=24.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T15:03:12.154', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T17:03:45.107 [DEBUG] [Thread-131425] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:03:45.190 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T17:03:45.201 [DEBUG] [Thread-131428] [transport.py] [_log()] starting thread (client mode): 0xb95900d0
2025-12-31T17:03:45.201 [DEBUG] [Thread-131428] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:03:45.216 [DEBUG] [Thread-131428] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T17:03:45.216 [INFO] [Thread-131428] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T17:03:45.224 [DEBUG] [Thread-131428] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:03:45.224 [DEBUG] [Thread-131428] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T17:03:45.224 [DEBUG] [Thread-131428] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:03:45.224 [DEBUG] [Thread-131428] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:03:45.224 [DEBUG] [Thread-131428] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:03:45.224 [DEBUG] [Thread-131428] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:03:45.224 [DEBUG] [Thread-131428] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:03:45.224 [DEBUG] [Thread-131428] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:03:45.224 [DEBUG] [Thread-131428] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:03:45.224 [DEBUG] [Thread-131428] [transport.py] [_log()] client lang: <none>
2025-12-31T17:03:45.225 [DEBUG] [Thread-131428] [transport.py] [_log()] server lang: <none>
2025-12-31T17:03:45.225 [DEBUG] [Thread-131428] [transport.py] [_log()] kex follows: False
2025-12-31T17:03:45.225 [DEBUG] [Thread-131428] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:03:45.225 [DEBUG] [Thread-131428] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:03:45.225 [DEBUG] [Thread-131428] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:03:45.225 [DEBUG] [Thread-131428] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:03:45.225 [DEBUG] [Thread-131428] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:03:45.225 [DEBUG] [Thread-131428] [transport.py] [_log()] Compression: none
2025-12-31T17:03:45.225 [DEBUG] [Thread-131428] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:03:45.283 [DEBUG] [Thread-131428] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:03:45.283 [DEBUG] [Thread-131428] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:03:45.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T17:03:45.284 [DEBUG] [Thread-131428] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T17:03:45.285 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:03:45.339 [DEBUG] [Thread-131428] [transport.py] [_log()] userauth is OK
2025-12-31T17:03:45.339 [DEBUG] [Thread-131428] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:03:45.339 [DEBUG] [Thread-131428] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:03:45.340 [DEBUG] [Thread-131428] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T17:03:45.340 [DEBUG] [Thread-131428] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:03:45.358 [INFO] [Thread-131428] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:03:45.358 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T17:03:45.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:03:46.161 [DEBUG] [Thread-131428] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:03:46.161 [DEBUG] [Thread-131428] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:03:46.209 [DEBUG] [Thread-131428] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:03:46.209 [DEBUG] [Thread-131428] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:03:46.219 [DEBUG] [Thread-131428] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:03:46.228 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:03:46.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T17:03:46.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T17:03:46.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:03:46.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:03:46.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:03:46.256 [DEBUG] [Thread-131428] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:03:56.897 [DEBUG] [Thread-131430 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:04:11.940 [DEBUG] [Thread-131431 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:04:16.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T17:04:16.276 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T17:04:16.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T17:04:16.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 17, 3, 54), 27.16, 16.26, 0.0, 42.15, 24.42, 0, 0, 0, 2, 0, 0),)
2025-12-31T17:04:16.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 17:03:54
2025-12-31T17:04:17.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T17:04:17.263 [DEBUG] [Thread-131432] [transport.py] [_log()] starting thread (client mode): 0xb955bd30
2025-12-31T17:04:17.263 [DEBUG] [Thread-131432] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:04:17.283 [DEBUG] [Thread-131432] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T17:04:17.284 [INFO] [Thread-131432] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T17:04:17.285 [DEBUG] [Thread-131432] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:04:17.285 [DEBUG] [Thread-131432] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T17:04:17.285 [DEBUG] [Thread-131432] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:04:17.285 [DEBUG] [Thread-131432] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:04:17.285 [DEBUG] [Thread-131432] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:04:17.285 [DEBUG] [Thread-131432] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:04:17.285 [DEBUG] [Thread-131432] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:04:17.285 [DEBUG] [Thread-131432] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:04:17.285 [DEBUG] [Thread-131432] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:04:17.285 [DEBUG] [Thread-131432] [transport.py] [_log()] client lang: <none>
2025-12-31T17:04:17.285 [DEBUG] [Thread-131432] [transport.py] [_log()] server lang: <none>
2025-12-31T17:04:17.285 [DEBUG] [Thread-131432] [transport.py] [_log()] kex follows: False
2025-12-31T17:04:17.285 [DEBUG] [Thread-131432] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:04:17.285 [DEBUG] [Thread-131432] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:04:17.286 [DEBUG] [Thread-131432] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:04:17.286 [DEBUG] [Thread-131432] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:04:17.286 [DEBUG] [Thread-131432] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:04:17.286 [DEBUG] [Thread-131432] [transport.py] [_log()] Compression: none
2025-12-31T17:04:17.286 [DEBUG] [Thread-131432] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:04:17.305 [DEBUG] [Thread-131432] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:04:17.306 [DEBUG] [Thread-131432] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:04:17.307 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T17:04:17.308 [DEBUG] [Thread-131432] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T17:04:17.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:04:17.310 [DEBUG] [Thread-131432] [transport.py] [_log()] userauth is OK
2025-12-31T17:04:17.310 [DEBUG] [Thread-131432] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:04:17.310 [DEBUG] [Thread-131432] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:04:17.310 [DEBUG] [Thread-131432] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T17:04:17.311 [DEBUG] [Thread-131432] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:04:17.334 [INFO] [Thread-131432] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:04:17.335 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:04:17.968 [DEBUG] [Thread-131432] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:04:17.968 [DEBUG] [Thread-131432] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:04:17.969 [DEBUG] [Thread-131432] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T17:04:18.009 [DEBUG] [Thread-131432] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:04:18.009 [DEBUG] [Thread-131432] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:04:18.013 [DEBUG] [Thread-131432] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:04:18.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:04:18.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T17:04:18.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T17:04:18.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T17:04:18.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:04:18.039 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T17:04:18.039 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:04:18.039 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:04:18.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T17:04:18.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.627571 -999.00  +24.10  31.30     21   +1.00 1 2 2 1 1   888    0 22.65 -41.26 ----- 27.5 31.3 293.0 46.1 26.3 -17.5 26.3 -17.4 26.0 -15.5 26.4 -16.2
2025-12-31T17:04:18.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T17:04:18.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T17:04:18.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.627571
2025-12-31T17:04:18.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T17:04:18.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T17:04:18.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T17:04:18.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T17:04:18.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T17:04:18.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T17:03:54', tmtdew=27.16, humidity=16.26, cloud=0.0, wind=42.15, temperature=24.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T15:03:42.134', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T17:04:18.042 [DEBUG] [Thread-131432] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:04:18.127 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T17:04:18.140 [DEBUG] [Thread-131435] [transport.py] [_log()] starting thread (client mode): 0xb9558760
2025-12-31T17:04:18.140 [DEBUG] [Thread-131435] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:04:18.155 [DEBUG] [Thread-131435] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T17:04:18.155 [INFO] [Thread-131435] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T17:04:18.163 [DEBUG] [Thread-131435] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:04:18.163 [DEBUG] [Thread-131435] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T17:04:18.163 [DEBUG] [Thread-131435] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:04:18.163 [DEBUG] [Thread-131435] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:04:18.163 [DEBUG] [Thread-131435] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:04:18.163 [DEBUG] [Thread-131435] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:04:18.163 [DEBUG] [Thread-131435] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:04:18.163 [DEBUG] [Thread-131435] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:04:18.163 [DEBUG] [Thread-131435] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:04:18.164 [DEBUG] [Thread-131435] [transport.py] [_log()] client lang: <none>
2025-12-31T17:04:18.164 [DEBUG] [Thread-131435] [transport.py] [_log()] server lang: <none>
2025-12-31T17:04:18.164 [DEBUG] [Thread-131435] [transport.py] [_log()] kex follows: False
2025-12-31T17:04:18.164 [DEBUG] [Thread-131435] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:04:18.164 [DEBUG] [Thread-131435] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:04:18.164 [DEBUG] [Thread-131435] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:04:18.164 [DEBUG] [Thread-131435] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:04:18.164 [DEBUG] [Thread-131435] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:04:18.164 [DEBUG] [Thread-131435] [transport.py] [_log()] Compression: none
2025-12-31T17:04:18.164 [DEBUG] [Thread-131435] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:04:18.220 [DEBUG] [Thread-131435] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:04:18.220 [DEBUG] [Thread-131435] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:04:18.221 [DEBUG] [Thread-131435] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T17:04:18.221 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T17:04:18.222 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:04:18.276 [DEBUG] [Thread-131435] [transport.py] [_log()] userauth is OK
2025-12-31T17:04:18.276 [DEBUG] [Thread-131435] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:04:18.276 [DEBUG] [Thread-131435] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:04:18.276 [DEBUG] [Thread-131435] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T17:04:18.277 [DEBUG] [Thread-131435] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:04:18.296 [INFO] [Thread-131435] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:04:18.296 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T17:04:18.297 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:04:19.128 [DEBUG] [Thread-131435] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:04:19.129 [DEBUG] [Thread-131435] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:04:19.176 [DEBUG] [Thread-131435] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:04:19.176 [DEBUG] [Thread-131435] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:04:19.185 [DEBUG] [Thread-131435] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:04:19.195 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:04:19.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T17:04:19.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T17:04:19.212 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:04:19.213 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:04:19.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:04:19.223 [DEBUG] [Thread-131435] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:04:21.145 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:04:21.147 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:04:26.290 [DEBUG] [Thread-131437 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:04:26.977 [DEBUG] [Thread-131438 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:04:42.022 [DEBUG] [Thread-131439 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:04:49.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T17:04:49.222 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T17:04:49.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T17:04:49.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 17, 4, 27), 27.08, 16.33, 0.0, 39.89, 24.32, 0, 0, 0, 2, 0, 0),)
2025-12-31T17:04:49.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 17:04:27
2025-12-31T17:04:50.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T17:04:50.205 [DEBUG] [Thread-131440] [transport.py] [_log()] starting thread (client mode): 0xb95f1120
2025-12-31T17:04:50.205 [DEBUG] [Thread-131440] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:04:50.227 [DEBUG] [Thread-131440] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T17:04:50.227 [INFO] [Thread-131440] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T17:04:50.228 [DEBUG] [Thread-131440] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:04:50.228 [DEBUG] [Thread-131440] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T17:04:50.228 [DEBUG] [Thread-131440] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:04:50.228 [DEBUG] [Thread-131440] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:04:50.228 [DEBUG] [Thread-131440] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:04:50.228 [DEBUG] [Thread-131440] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:04:50.228 [DEBUG] [Thread-131440] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:04:50.229 [DEBUG] [Thread-131440] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:04:50.229 [DEBUG] [Thread-131440] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:04:50.229 [DEBUG] [Thread-131440] [transport.py] [_log()] client lang: <none>
2025-12-31T17:04:50.229 [DEBUG] [Thread-131440] [transport.py] [_log()] server lang: <none>
2025-12-31T17:04:50.229 [DEBUG] [Thread-131440] [transport.py] [_log()] kex follows: False
2025-12-31T17:04:50.229 [DEBUG] [Thread-131440] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:04:50.229 [DEBUG] [Thread-131440] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:04:50.229 [DEBUG] [Thread-131440] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:04:50.229 [DEBUG] [Thread-131440] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:04:50.229 [DEBUG] [Thread-131440] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:04:50.229 [DEBUG] [Thread-131440] [transport.py] [_log()] Compression: none
2025-12-31T17:04:50.229 [DEBUG] [Thread-131440] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:04:50.237 [DEBUG] [Thread-131440] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:04:50.238 [DEBUG] [Thread-131440] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:04:50.238 [DEBUG] [Thread-131440] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T17:04:50.238 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T17:04:50.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:04:50.240 [DEBUG] [Thread-131440] [transport.py] [_log()] userauth is OK
2025-12-31T17:04:50.240 [DEBUG] [Thread-131440] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:04:50.240 [DEBUG] [Thread-131440] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:04:50.240 [DEBUG] [Thread-131440] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T17:04:50.240 [DEBUG] [Thread-131440] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:04:50.258 [INFO] [Thread-131440] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:04:50.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:04:51.037 [DEBUG] [Thread-131440] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:04:51.037 [DEBUG] [Thread-131440] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:04:51.038 [DEBUG] [Thread-131440] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T17:04:51.078 [DEBUG] [Thread-131440] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:04:51.078 [DEBUG] [Thread-131440] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:04:51.082 [DEBUG] [Thread-131440] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:04:51.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:04:51.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T17:04:51.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T17:04:51.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T17:04:51.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:04:51.104 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T17:04:51.105 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:04:51.105 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:04:51.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T17:04:51.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.627919 -999.00  +24.30  33.43     21   +1.10 1 2 2 1 1   887    0 22.54 -38.70 ----- 28.6 33.4 294.8 37.2 26.4 -17.1 26.3 -16.7 26.1 -15.8 26.4 -15.3
2025-12-31T17:04:51.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T17:04:51.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T17:04:51.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.627919
2025-12-31T17:04:51.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T17:04:51.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T17:04:51.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T17:04:51.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T17:04:51.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T17:04:51.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T17:04:27', tmtdew=27.08, humidity=16.33, cloud=0.0, wind=39.89, temperature=24.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T15:04:12.202', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T17:04:51.107 [DEBUG] [Thread-131440] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:04:51.190 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T17:04:51.203 [DEBUG] [Thread-131443] [transport.py] [_log()] starting thread (client mode): 0xb9591de0
2025-12-31T17:04:51.203 [DEBUG] [Thread-131443] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:04:51.218 [DEBUG] [Thread-131443] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T17:04:51.218 [INFO] [Thread-131443] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T17:04:51.226 [DEBUG] [Thread-131443] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:04:51.226 [DEBUG] [Thread-131443] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T17:04:51.227 [DEBUG] [Thread-131443] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:04:51.227 [DEBUG] [Thread-131443] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:04:51.227 [DEBUG] [Thread-131443] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:04:51.227 [DEBUG] [Thread-131443] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:04:51.227 [DEBUG] [Thread-131443] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:04:51.227 [DEBUG] [Thread-131443] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:04:51.228 [DEBUG] [Thread-131443] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:04:51.228 [DEBUG] [Thread-131443] [transport.py] [_log()] client lang: <none>
2025-12-31T17:04:51.228 [DEBUG] [Thread-131443] [transport.py] [_log()] server lang: <none>
2025-12-31T17:04:51.228 [DEBUG] [Thread-131443] [transport.py] [_log()] kex follows: False
2025-12-31T17:04:51.228 [DEBUG] [Thread-131443] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:04:51.228 [DEBUG] [Thread-131443] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:04:51.228 [DEBUG] [Thread-131443] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:04:51.228 [DEBUG] [Thread-131443] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:04:51.228 [DEBUG] [Thread-131443] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:04:51.228 [DEBUG] [Thread-131443] [transport.py] [_log()] Compression: none
2025-12-31T17:04:51.229 [DEBUG] [Thread-131443] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:04:51.284 [DEBUG] [Thread-131443] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:04:51.285 [DEBUG] [Thread-131443] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:04:51.285 [DEBUG] [Thread-131443] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T17:04:51.286 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T17:04:51.286 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:04:51.340 [DEBUG] [Thread-131443] [transport.py] [_log()] userauth is OK
2025-12-31T17:04:51.340 [DEBUG] [Thread-131443] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:04:51.340 [DEBUG] [Thread-131443] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:04:51.340 [DEBUG] [Thread-131443] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T17:04:51.341 [DEBUG] [Thread-131443] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:04:51.363 [INFO] [Thread-131443] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:04:51.364 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T17:04:51.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:04:52.222 [DEBUG] [Thread-131443] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:04:52.222 [DEBUG] [Thread-131443] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:04:52.270 [DEBUG] [Thread-131443] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:04:52.270 [DEBUG] [Thread-131443] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:04:52.279 [DEBUG] [Thread-131443] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:04:52.288 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:04: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-12-31T17:04:52.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T17:04:52.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:04:52.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:04:52.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:04:52.316 [DEBUG] [Thread-131443] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:04:57.054 [DEBUG] [Thread-131445 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:05:12.105 [DEBUG] [Thread-131446 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:05:21.295 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:05:21.296 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:05:22.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T17:05:22.338 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T17:05:22.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T17:05:23.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 17, 4, 59), 27.0, 16.46, 0.0, 34.32, 24.29, 0, 0, 0, 2, 0, 0),)
2025-12-31T17:05:23.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 17:04:59
2025-12-31T17:05:23.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T17:05:23.317 [DEBUG] [Thread-131447] [transport.py] [_log()] starting thread (client mode): 0xb6ba0250
2025-12-31T17:05:23.317 [DEBUG] [Thread-131447] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:05:23.338 [DEBUG] [Thread-131447] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T17:05:23.338 [INFO] [Thread-131447] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T17:05:23.341 [DEBUG] [Thread-131447] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:05:23.341 [DEBUG] [Thread-131447] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T17:05:23.341 [DEBUG] [Thread-131447] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:05:23.341 [DEBUG] [Thread-131447] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:05:23.341 [DEBUG] [Thread-131447] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:05:23.341 [DEBUG] [Thread-131447] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:05:23.341 [DEBUG] [Thread-131447] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:05:23.341 [DEBUG] [Thread-131447] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:05:23.341 [DEBUG] [Thread-131447] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:05:23.341 [DEBUG] [Thread-131447] [transport.py] [_log()] client lang: <none>
2025-12-31T17:05:23.342 [DEBUG] [Thread-131447] [transport.py] [_log()] server lang: <none>
2025-12-31T17:05:23.342 [DEBUG] [Thread-131447] [transport.py] [_log()] kex follows: False
2025-12-31T17:05:23.342 [DEBUG] [Thread-131447] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:05:23.342 [DEBUG] [Thread-131447] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:05:23.342 [DEBUG] [Thread-131447] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:05:23.342 [DEBUG] [Thread-131447] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:05:23.342 [DEBUG] [Thread-131447] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:05:23.342 [DEBUG] [Thread-131447] [transport.py] [_log()] Compression: none
2025-12-31T17:05:23.342 [DEBUG] [Thread-131447] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:05:23.358 [DEBUG] [Thread-131447] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:05:23.359 [DEBUG] [Thread-131447] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:05:23.359 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T17:05:23.360 [DEBUG] [Thread-131447] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T17:05:23.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:05:23.362 [DEBUG] [Thread-131447] [transport.py] [_log()] userauth is OK
2025-12-31T17:05:23.362 [DEBUG] [Thread-131447] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:05:23.362 [DEBUG] [Thread-131447] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:05:23.362 [DEBUG] [Thread-131447] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T17:05:23.362 [DEBUG] [Thread-131447] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:05:23.399 [INFO] [Thread-131447] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:05:23.400 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:05:24.033 [DEBUG] [Thread-131447] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:05:24.033 [DEBUG] [Thread-131447] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:05:24.033 [DEBUG] [Thread-131447] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T17:05:24.074 [DEBUG] [Thread-131447] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:05:24.074 [DEBUG] [Thread-131447] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:05:24.077 [DEBUG] [Thread-131447] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:05:24.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:05:24.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T17:05:24.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T17:05:24.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T17:05:24.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:05:24.100 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T17:05:24.100 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:05:24.101 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:05:24.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T17:05:24.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.628266 -999.00  +24.30  36.08     21   +1.00 1 2 2 1 1   887    0 22.40 -35.90 ----- 34.3 36.1 298.4 43.8 26.4 -16.5 26.4 -16.5 26.2 -15.3 26.4 -15.4
2025-12-31T17:05:24.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T17:05:24.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T17:05:24.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.628266
2025-12-31T17:05:24.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T17:05:24.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T17:05:24.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T17:05:24.103 [DEBUG] [Thread-131447] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:05:24.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T17:05:24.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T17:05:24.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T17:04:59', tmtdew=27.0, humidity=16.46, cloud=0.0, wind=34.32, temperature=24.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T15:04:42.182', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T17:05:24.186 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T17:05:24.197 [DEBUG] [Thread-131450] [transport.py] [_log()] starting thread (client mode): 0xb9558760
2025-12-31T17:05:24.197 [DEBUG] [Thread-131450] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:05:24.213 [DEBUG] [Thread-131450] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T17:05:24.213 [INFO] [Thread-131450] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T17:05:24.221 [DEBUG] [Thread-131450] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:05:24.221 [DEBUG] [Thread-131450] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T17:05:24.221 [DEBUG] [Thread-131450] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:05:24.221 [DEBUG] [Thread-131450] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:05:24.222 [DEBUG] [Thread-131450] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:05:24.222 [DEBUG] [Thread-131450] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:05:24.222 [DEBUG] [Thread-131450] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:05:24.222 [DEBUG] [Thread-131450] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:05:24.222 [DEBUG] [Thread-131450] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:05:24.222 [DEBUG] [Thread-131450] [transport.py] [_log()] client lang: <none>
2025-12-31T17:05:24.222 [DEBUG] [Thread-131450] [transport.py] [_log()] server lang: <none>
2025-12-31T17:05:24.222 [DEBUG] [Thread-131450] [transport.py] [_log()] kex follows: False
2025-12-31T17:05:24.222 [DEBUG] [Thread-131450] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:05:24.223 [DEBUG] [Thread-131450] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:05:24.223 [DEBUG] [Thread-131450] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:05:24.223 [DEBUG] [Thread-131450] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:05:24.223 [DEBUG] [Thread-131450] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:05:24.224 [DEBUG] [Thread-131450] [transport.py] [_log()] Compression: none
2025-12-31T17:05:24.224 [DEBUG] [Thread-131450] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:05:24.281 [DEBUG] [Thread-131450] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:05:24.281 [DEBUG] [Thread-131450] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:05:24.282 [DEBUG] [Thread-131450] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T17:05:24.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T17:05:24.283 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:05:24.337 [DEBUG] [Thread-131450] [transport.py] [_log()] userauth is OK
2025-12-31T17:05:24.338 [DEBUG] [Thread-131450] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:05:24.338 [DEBUG] [Thread-131450] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:05:24.338 [DEBUG] [Thread-131450] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T17:05:24.338 [DEBUG] [Thread-131450] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:05:24.357 [INFO] [Thread-131450] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:05:24.358 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T17:05:24.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:05:25.235 [DEBUG] [Thread-131450] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:05:25.235 [DEBUG] [Thread-131450] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:05:25.283 [DEBUG] [Thread-131450] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:05:25.283 [DEBUG] [Thread-131450] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:05:25.292 [DEBUG] [Thread-131450] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:05:25.301 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:05:25.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T17:05:25.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T17:05:25.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:05:25.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:05:25.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:05:25.329 [DEBUG] [Thread-131450] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:05:26.340 [DEBUG] [Thread-131452 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:05:27.140 [DEBUG] [Thread-131453 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:05:42.191 [DEBUG] [Thread-131454 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:05:55.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T17:05:55.333 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T17:05:55.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T17:05:56.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 17, 5, 31), 27.07, 16.39, 0.0, 32.62, 24.35, 0, 0, 0, 2, 0, 0),)
2025-12-31T17:05:56.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 17:05:31
2025-12-31T17:05:56.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T17:05:56.400 [DEBUG] [Thread-131455] [transport.py] [_log()] starting thread (client mode): 0xb9591480
2025-12-31T17:05:56.400 [DEBUG] [Thread-131455] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:05:56.420 [DEBUG] [Thread-131455] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T17:05:56.420 [INFO] [Thread-131455] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T17:05:56.422 [DEBUG] [Thread-131455] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:05:56.422 [DEBUG] [Thread-131455] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T17:05:56.422 [DEBUG] [Thread-131455] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:05:56.422 [DEBUG] [Thread-131455] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:05:56.422 [DEBUG] [Thread-131455] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:05:56.422 [DEBUG] [Thread-131455] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:05:56.422 [DEBUG] [Thread-131455] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:05:56.422 [DEBUG] [Thread-131455] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:05:56.422 [DEBUG] [Thread-131455] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:05:56.422 [DEBUG] [Thread-131455] [transport.py] [_log()] client lang: <none>
2025-12-31T17:05:56.422 [DEBUG] [Thread-131455] [transport.py] [_log()] server lang: <none>
2025-12-31T17:05:56.422 [DEBUG] [Thread-131455] [transport.py] [_log()] kex follows: False
2025-12-31T17:05:56.422 [DEBUG] [Thread-131455] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:05:56.422 [DEBUG] [Thread-131455] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:05:56.423 [DEBUG] [Thread-131455] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:05:56.423 [DEBUG] [Thread-131455] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:05:56.423 [DEBUG] [Thread-131455] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:05:56.423 [DEBUG] [Thread-131455] [transport.py] [_log()] Compression: none
2025-12-31T17:05:56.423 [DEBUG] [Thread-131455] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:05:56.439 [DEBUG] [Thread-131455] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:05:56.439 [DEBUG] [Thread-131455] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:05:56.439 [DEBUG] [Thread-131455] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T17:05:56.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T17:05:56.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:05:56.440 [DEBUG] [Thread-131455] [transport.py] [_log()] userauth is OK
2025-12-31T17:05:56.440 [DEBUG] [Thread-131455] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:05:56.440 [DEBUG] [Thread-131455] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:05:56.440 [DEBUG] [Thread-131455] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T17:05:56.440 [DEBUG] [Thread-131455] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:05:56.453 [INFO] [Thread-131455] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:05:56.453 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:05:57.115 [DEBUG] [Thread-131455] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:05:57.115 [DEBUG] [Thread-131455] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:05:57.115 [DEBUG] [Thread-131455] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T17:05:57.156 [DEBUG] [Thread-131455] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:05:57.156 [DEBUG] [Thread-131455] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:05:57.159 [DEBUG] [Thread-131455] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:05:57.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:05:57.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T17:05:57.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T17:05:57.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T17:05:57.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:05:57.177 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T17:05:57.177 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:05:57.177 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:05:57.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T17:05:57.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.628613 -999.00  +24.20  32.18     21   +1.00 1 2 2 1 1   887    0 22.76 -35.21 ----- 30.6 32.2 296.0 38.9 26.5 -16.3 26.4 -16.5 26.2 -14.2 26.5 -14.8
2025-12-31T17:05:57.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T17:05:57.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T17:05:57.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.628613
2025-12-31T17:05:57.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T17:05:57.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T17:05:57.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T17:05:57.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T17:05:57.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T17:05:57.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T17:05:31', tmtdew=27.07, humidity=16.39, cloud=0.0, wind=32.62, temperature=24.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T15:05:12.163', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T17:05:57.178 [DEBUG] [Thread-131455] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:05:57.225 [DEBUG] [Thread-131458 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:05:57.253 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T17:05:57.265 [DEBUG] [Thread-131459] [transport.py] [_log()] starting thread (client mode): 0xb6bbdfc0
2025-12-31T17:05:57.265 [DEBUG] [Thread-131459] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:05:57.280 [DEBUG] [Thread-131459] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T17:05:57.280 [INFO] [Thread-131459] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T17:05:57.288 [DEBUG] [Thread-131459] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:05:57.288 [DEBUG] [Thread-131459] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T17:05:57.288 [DEBUG] [Thread-131459] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:05:57.288 [DEBUG] [Thread-131459] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:05:57.288 [DEBUG] [Thread-131459] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:05:57.288 [DEBUG] [Thread-131459] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:05:57.288 [DEBUG] [Thread-131459] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:05:57.288 [DEBUG] [Thread-131459] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:05:57.288 [DEBUG] [Thread-131459] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:05:57.288 [DEBUG] [Thread-131459] [transport.py] [_log()] client lang: <none>
2025-12-31T17:05:57.288 [DEBUG] [Thread-131459] [transport.py] [_log()] server lang: <none>
2025-12-31T17:05:57.288 [DEBUG] [Thread-131459] [transport.py] [_log()] kex follows: False
2025-12-31T17:05:57.288 [DEBUG] [Thread-131459] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:05:57.288 [DEBUG] [Thread-131459] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:05:57.288 [DEBUG] [Thread-131459] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:05:57.288 [DEBUG] [Thread-131459] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:05:57.288 [DEBUG] [Thread-131459] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:05:57.288 [DEBUG] [Thread-131459] [transport.py] [_log()] Compression: none
2025-12-31T17:05:57.288 [DEBUG] [Thread-131459] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:05:57.344 [DEBUG] [Thread-131459] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:05:57.344 [DEBUG] [Thread-131459] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:05:57.345 [DEBUG] [Thread-131459] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T17:05:57.345 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T17:05:57.345 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:05:57.401 [DEBUG] [Thread-131459] [transport.py] [_log()] userauth is OK
2025-12-31T17:05:57.401 [DEBUG] [Thread-131459] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:05:57.401 [DEBUG] [Thread-131459] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:05:57.401 [DEBUG] [Thread-131459] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T17:05:57.401 [DEBUG] [Thread-131459] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:05:57.416 [INFO] [Thread-131459] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:05:57.416 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T17:05:57.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:05:58.274 [DEBUG] [Thread-131459] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:05:58.275 [DEBUG] [Thread-131459] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:05:58.322 [DEBUG] [Thread-131459] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:05:58.322 [DEBUG] [Thread-131459] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:05:58.330 [DEBUG] [Thread-131459] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:05:58.338 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:05:58.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T17:05:58.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T17:05:58.354 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:05:58.354 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:05:58.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:05:58.362 [DEBUG] [Thread-131459] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:06:12.266 [DEBUG] [Thread-131461 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:06:21.434 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:06:21.435 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:06:26.407 [DEBUG] [Thread-131462 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:06:27.306 [DEBUG] [Thread-131463 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:06:28.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T17:06:28.385 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T17:06:28.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T17:06:29.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 17, 6, 3), 27.06, 16.41, 0.0, 32.57, 24.37, 0, 0, 0, 2, 0, 0),)
2025-12-31T17:06:29.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 17:06:03
2025-12-31T17:06:29.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T17:06:29.375 [DEBUG] [Thread-131464] [transport.py] [_log()] starting thread (client mode): 0xb9590f70
2025-12-31T17:06:29.375 [DEBUG] [Thread-131464] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:06:29.396 [DEBUG] [Thread-131464] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T17:06:29.397 [INFO] [Thread-131464] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T17:06:29.400 [DEBUG] [Thread-131464] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:06:29.400 [DEBUG] [Thread-131464] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T17:06:29.400 [DEBUG] [Thread-131464] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:06:29.400 [DEBUG] [Thread-131464] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:06:29.400 [DEBUG] [Thread-131464] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:06:29.400 [DEBUG] [Thread-131464] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:06:29.400 [DEBUG] [Thread-131464] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:06:29.400 [DEBUG] [Thread-131464] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:06:29.400 [DEBUG] [Thread-131464] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:06:29.400 [DEBUG] [Thread-131464] [transport.py] [_log()] client lang: <none>
2025-12-31T17:06:29.400 [DEBUG] [Thread-131464] [transport.py] [_log()] server lang: <none>
2025-12-31T17:06:29.400 [DEBUG] [Thread-131464] [transport.py] [_log()] kex follows: False
2025-12-31T17:06:29.400 [DEBUG] [Thread-131464] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:06:29.401 [DEBUG] [Thread-131464] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:06:29.401 [DEBUG] [Thread-131464] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:06:29.401 [DEBUG] [Thread-131464] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:06:29.401 [DEBUG] [Thread-131464] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:06:29.401 [DEBUG] [Thread-131464] [transport.py] [_log()] Compression: none
2025-12-31T17:06:29.401 [DEBUG] [Thread-131464] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:06:29.417 [DEBUG] [Thread-131464] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:06:29.417 [DEBUG] [Thread-131464] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:06:29.418 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T17:06:29.418 [DEBUG] [Thread-131464] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T17:06:29.419 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:06:29.420 [DEBUG] [Thread-131464] [transport.py] [_log()] userauth is OK
2025-12-31T17:06:29.420 [DEBUG] [Thread-131464] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:06:29.420 [DEBUG] [Thread-131464] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:06:29.421 [DEBUG] [Thread-131464] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T17:06:29.421 [DEBUG] [Thread-131464] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:06:29.446 [INFO] [Thread-131464] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:06:29.447 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:06:30.078 [DEBUG] [Thread-131464] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:06:30.078 [DEBUG] [Thread-131464] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:06:30.079 [DEBUG] [Thread-131464] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T17:06:30.119 [DEBUG] [Thread-131464] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:06:30.119 [DEBUG] [Thread-131464] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:06:30.123 [DEBUG] [Thread-131464] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:06:30.134 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:06:30.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T17:06:30.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T17:06:30.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T17:06:30.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:06:30.146 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T17:06:30.147 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:06:30.147 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:06:30.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T17:06:30.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.628960 -999.00  +24.20  29.76     22   +1.10 1 2 1 1 1   887    0 22.44 -37.26 ----- 34.6 29.8 305.2 47.0 26.6 -16.3 26.5 -15.9 26.2 -15.6 26.6 -14.6
2025-12-31T17:06:30.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T17:06:30.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T17:06:30.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.628960
2025-12-31T17:06:30.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T17:06:30.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T17:06:30.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T17:06:30.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T17:06:30.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T17:06:30.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T17:06:03', tmtdew=27.06, humidity=16.41, cloud=0.0, wind=32.57, temperature=24.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T15:05:42.144', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T17:06:30.150 [DEBUG] [Thread-131464] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:06:30.232 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T17:06:30.244 [DEBUG] [Thread-131467] [transport.py] [_log()] starting thread (client mode): 0xb95f18d0
2025-12-31T17:06:30.244 [DEBUG] [Thread-131467] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:06:30.260 [DEBUG] [Thread-131467] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T17:06:30.260 [INFO] [Thread-131467] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T17:06:30.268 [DEBUG] [Thread-131467] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:06:30.269 [DEBUG] [Thread-131467] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T17:06:30.269 [DEBUG] [Thread-131467] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:06:30.269 [DEBUG] [Thread-131467] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:06:30.269 [DEBUG] [Thread-131467] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:06:30.269 [DEBUG] [Thread-131467] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:06:30.269 [DEBUG] [Thread-131467] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:06:30.269 [DEBUG] [Thread-131467] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:06:30.269 [DEBUG] [Thread-131467] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:06:30.269 [DEBUG] [Thread-131467] [transport.py] [_log()] client lang: <none>
2025-12-31T17:06:30.269 [DEBUG] [Thread-131467] [transport.py] [_log()] server lang: <none>
2025-12-31T17:06:30.269 [DEBUG] [Thread-131467] [transport.py] [_log()] kex follows: False
2025-12-31T17:06:30.269 [DEBUG] [Thread-131467] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:06:30.269 [DEBUG] [Thread-131467] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:06:30.269 [DEBUG] [Thread-131467] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:06:30.269 [DEBUG] [Thread-131467] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:06:30.270 [DEBUG] [Thread-131467] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:06:30.270 [DEBUG] [Thread-131467] [transport.py] [_log()] Compression: none
2025-12-31T17:06:30.270 [DEBUG] [Thread-131467] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:06:30.328 [DEBUG] [Thread-131467] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:06:30.329 [DEBUG] [Thread-131467] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:06:30.330 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T17:06:30.330 [DEBUG] [Thread-131467] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T17:06:30.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:06:30.388 [DEBUG] [Thread-131467] [transport.py] [_log()] userauth is OK
2025-12-31T17:06:30.388 [DEBUG] [Thread-131467] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:06:30.388 [DEBUG] [Thread-131467] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:06:30.388 [DEBUG] [Thread-131467] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T17:06:30.389 [DEBUG] [Thread-131467] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:06:30.408 [INFO] [Thread-131467] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:06:30.408 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T17:06:30.409 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:06:31.251 [DEBUG] [Thread-131467] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:06:31.251 [DEBUG] [Thread-131467] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:06:31.299 [DEBUG] [Thread-131467] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:06:31.300 [DEBUG] [Thread-131467] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:06:31.312 [DEBUG] [Thread-131467] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:06:31.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:06:31.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T17:06:31.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-12-31T17:06:31.350 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:06:31.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:06:31.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:06:31.363 [DEBUG] [Thread-131467] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:06:42.339 [DEBUG] [Thread-131469 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:06:57.402 [DEBUG] [Thread-131470 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:07:01.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T17:07:01.390 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T17:07:01.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T17:07:02.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 17, 6, 35), 27.3, 16.28, 0.0, 31.48, 24.54, 0, 0, 0, 2, 0, 0),)
2025-12-31T17:07:02.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 17:06:35
2025-12-31T17:07:02.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T17:07:02.374 [DEBUG] [Thread-131471] [transport.py] [_log()] starting thread (client mode): 0xb95f31c0
2025-12-31T17:07:02.374 [DEBUG] [Thread-131471] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:07:02.395 [DEBUG] [Thread-131471] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T17:07:02.395 [INFO] [Thread-131471] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T17:07:02.398 [DEBUG] [Thread-131471] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:07:02.398 [DEBUG] [Thread-131471] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T17:07:02.399 [DEBUG] [Thread-131471] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:07:02.399 [DEBUG] [Thread-131471] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:07:02.399 [DEBUG] [Thread-131471] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:07:02.399 [DEBUG] [Thread-131471] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:07:02.399 [DEBUG] [Thread-131471] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:07:02.399 [DEBUG] [Thread-131471] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:07:02.399 [DEBUG] [Thread-131471] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:07:02.399 [DEBUG] [Thread-131471] [transport.py] [_log()] client lang: <none>
2025-12-31T17:07:02.399 [DEBUG] [Thread-131471] [transport.py] [_log()] server lang: <none>
2025-12-31T17:07:02.399 [DEBUG] [Thread-131471] [transport.py] [_log()] kex follows: False
2025-12-31T17:07:02.399 [DEBUG] [Thread-131471] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:07:02.399 [DEBUG] [Thread-131471] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:07:02.399 [DEBUG] [Thread-131471] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:07:02.399 [DEBUG] [Thread-131471] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:07:02.400 [DEBUG] [Thread-131471] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:07:02.400 [DEBUG] [Thread-131471] [transport.py] [_log()] Compression: none
2025-12-31T17:07:02.400 [DEBUG] [Thread-131471] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:07:02.418 [DEBUG] [Thread-131471] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:07:02.419 [DEBUG] [Thread-131471] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:07:02.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T17:07:02.421 [DEBUG] [Thread-131471] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T17:07:02.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:07:02.423 [DEBUG] [Thread-131471] [transport.py] [_log()] userauth is OK
2025-12-31T17:07:02.423 [DEBUG] [Thread-131471] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:07:02.423 [DEBUG] [Thread-131471] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:07:02.423 [DEBUG] [Thread-131471] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T17:07:02.423 [DEBUG] [Thread-131471] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:07:02.446 [INFO] [Thread-131471] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:07:02.447 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:07:03.113 [DEBUG] [Thread-131471] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:07:03.113 [DEBUG] [Thread-131471] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:07:03.114 [DEBUG] [Thread-131471] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T17:07:03.154 [DEBUG] [Thread-131471] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:07:03.154 [DEBUG] [Thread-131471] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:07:03.157 [DEBUG] [Thread-131471] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:07:03.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:07:03.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T17:07:03.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T17:07:03.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T17:07:03.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:07:03.180 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T17:07:03.180 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:07:03.180 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:07:03.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T17:07:03.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.629307 -999.00  +24.10  40.02     22   +1.00 1 2 2 1 1   887    0 22.21 -42.18 ----- 38.1 40.0 296.4 44.9 26.6 -15.5 26.5 -15.7 26.2 -15.5 26.6 -15.0
2025-12-31T17:07:03.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T17:07:03.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T17:07:03.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.629307
2025-12-31T17:07:03.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T17:07:03.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T17:07:03.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T17:07:03.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T17:07:03.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T17:07:03.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T17:06:35', tmtdew=27.3, humidity=16.28, cloud=0.0, wind=31.48, temperature=24.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T15:06:12.125', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T17:07:03.182 [DEBUG] [Thread-131471] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:07:03.265 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T17:07:03.278 [DEBUG] [Thread-131474] [transport.py] [_log()] starting thread (client mode): 0xb6b60970
2025-12-31T17:07:03.278 [DEBUG] [Thread-131474] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:07:03.295 [DEBUG] [Thread-131474] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T17:07:03.295 [INFO] [Thread-131474] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T17:07:03.302 [DEBUG] [Thread-131474] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:07:03.303 [DEBUG] [Thread-131474] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T17:07:03.303 [DEBUG] [Thread-131474] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:07:03.303 [DEBUG] [Thread-131474] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:07:03.303 [DEBUG] [Thread-131474] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:07:03.303 [DEBUG] [Thread-131474] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:07:03.303 [DEBUG] [Thread-131474] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:07:03.303 [DEBUG] [Thread-131474] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:07:03.303 [DEBUG] [Thread-131474] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:07:03.303 [DEBUG] [Thread-131474] [transport.py] [_log()] client lang: <none>
2025-12-31T17:07:03.303 [DEBUG] [Thread-131474] [transport.py] [_log()] server lang: <none>
2025-12-31T17:07:03.303 [DEBUG] [Thread-131474] [transport.py] [_log()] kex follows: False
2025-12-31T17:07:03.303 [DEBUG] [Thread-131474] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:07:03.303 [DEBUG] [Thread-131474] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:07:03.303 [DEBUG] [Thread-131474] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:07:03.303 [DEBUG] [Thread-131474] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:07:03.304 [DEBUG] [Thread-131474] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:07:03.304 [DEBUG] [Thread-131474] [transport.py] [_log()] Compression: none
2025-12-31T17:07:03.304 [DEBUG] [Thread-131474] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:07:03.363 [DEBUG] [Thread-131474] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:07:03.364 [DEBUG] [Thread-131474] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:07:03.364 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T17:07:03.365 [DEBUG] [Thread-131474] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T17:07:03.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:07:03.419 [DEBUG] [Thread-131474] [transport.py] [_log()] userauth is OK
2025-12-31T17:07:03.420 [DEBUG] [Thread-131474] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:07:03.420 [DEBUG] [Thread-131474] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:07:03.420 [DEBUG] [Thread-131474] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T17:07:03.420 [DEBUG] [Thread-131474] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:07:03.440 [INFO] [Thread-131474] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:07:03.440 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T17:07:03.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:07:04.295 [DEBUG] [Thread-131474] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:07:04.296 [DEBUG] [Thread-131474] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:07:04.343 [DEBUG] [Thread-131474] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:07:04.343 [DEBUG] [Thread-131474] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:07:04.352 [DEBUG] [Thread-131474] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:07:04.361 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:07:04.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-12-31T17:07:04.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-12-31T17:07:04.380 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:07:04.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:07:04.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:07:04.388 [DEBUG] [Thread-131474] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:07:12.438 [DEBUG] [Thread-131476 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:07:21.576 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:07:21.577 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:07:26.467 [DEBUG] [Thread-131477 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:07:27.488 [DEBUG] [Thread-131478 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:07:34.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T17:07:34.406 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T17:07:34.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T17:07:35.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 17, 7, 7), 27.36, 16.21, 0.0, 32.24, 24.57, 0, 0, 0, 2, 0, 0),)
2025-12-31T17:07:35.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 17:07:07
2025-12-31T17:07:35.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T17:07:35.385 [DEBUG] [Thread-131479] [transport.py] [_log()] starting thread (client mode): 0xb6bbba90
2025-12-31T17:07:35.385 [DEBUG] [Thread-131479] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:07:35.405 [DEBUG] [Thread-131479] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T17:07:35.405 [INFO] [Thread-131479] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T17:07:35.409 [DEBUG] [Thread-131479] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:07:35.409 [DEBUG] [Thread-131479] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T17:07:35.409 [DEBUG] [Thread-131479] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:07:35.409 [DEBUG] [Thread-131479] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:07:35.409 [DEBUG] [Thread-131479] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:07:35.409 [DEBUG] [Thread-131479] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:07:35.409 [DEBUG] [Thread-131479] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:07:35.409 [DEBUG] [Thread-131479] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:07:35.409 [DEBUG] [Thread-131479] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:07:35.409 [DEBUG] [Thread-131479] [transport.py] [_log()] client lang: <none>
2025-12-31T17:07:35.409 [DEBUG] [Thread-131479] [transport.py] [_log()] server lang: <none>
2025-12-31T17:07:35.409 [DEBUG] [Thread-131479] [transport.py] [_log()] kex follows: False
2025-12-31T17:07:35.409 [DEBUG] [Thread-131479] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:07:35.409 [DEBUG] [Thread-131479] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:07:35.410 [DEBUG] [Thread-131479] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:07:35.410 [DEBUG] [Thread-131479] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:07:35.410 [DEBUG] [Thread-131479] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:07:35.410 [DEBUG] [Thread-131479] [transport.py] [_log()] Compression: none
2025-12-31T17:07:35.410 [DEBUG] [Thread-131479] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:07:35.430 [DEBUG] [Thread-131479] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:07:35.430 [DEBUG] [Thread-131479] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:07:35.431 [DEBUG] [Thread-131479] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T17:07:35.431 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T17:07:35.431 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:07:35.433 [DEBUG] [Thread-131479] [transport.py] [_log()] userauth is OK
2025-12-31T17:07:35.433 [DEBUG] [Thread-131479] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:07:35.433 [DEBUG] [Thread-131479] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:07:35.433 [DEBUG] [Thread-131479] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T17:07:35.433 [DEBUG] [Thread-131479] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:07:35.456 [INFO] [Thread-131479] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:07:35.457 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:07:36.120 [DEBUG] [Thread-131479] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:07:36.120 [DEBUG] [Thread-131479] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:07:36.121 [DEBUG] [Thread-131479] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T17:07:36.161 [DEBUG] [Thread-131479] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:07:36.161 [DEBUG] [Thread-131479] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:07:36.165 [DEBUG] [Thread-131479] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:07:36.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:07:36.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T17:07:36.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T17:07:36.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T17:07:36.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:07:36.190 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T17:07:36.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:07:36.190 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:07:36.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T17:07:36.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.629655 -999.00  +24.00  29.69     22   +1.00 1 2 1 1 1   887    0 22.00 -44.18 ----- 34.1 29.7 296.4 40.4 26.5 -15.2 26.4 -15.4 26.2 -14.5 26.6 -14.7
2025-12-31T17:07:36.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T17:07:36.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T17:07:36.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.629655
2025-12-31T17:07:36.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T17:07:36.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T17:07:36.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T17:07:36.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T17:07:36.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T17:07:36.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T17:07:07', tmtdew=27.36, humidity=16.21, cloud=0.0, wind=32.24, temperature=24.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T15:06:42.192', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T17:07:36.193 [DEBUG] [Thread-131479] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:07:36.275 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T17:07:36.289 [DEBUG] [Thread-131482] [transport.py] [_log()] starting thread (client mode): 0xb95936a0
2025-12-31T17:07:36.289 [DEBUG] [Thread-131482] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:07:36.303 [DEBUG] [Thread-131482] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T17:07:36.303 [INFO] [Thread-131482] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T17:07:36.310 [DEBUG] [Thread-131482] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:07:36.311 [DEBUG] [Thread-131482] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T17:07:36.311 [DEBUG] [Thread-131482] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:07:36.311 [DEBUG] [Thread-131482] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:07:36.311 [DEBUG] [Thread-131482] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:07:36.311 [DEBUG] [Thread-131482] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:07:36.311 [DEBUG] [Thread-131482] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:07:36.312 [DEBUG] [Thread-131482] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:07:36.312 [DEBUG] [Thread-131482] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:07:36.312 [DEBUG] [Thread-131482] [transport.py] [_log()] client lang: <none>
2025-12-31T17:07:36.312 [DEBUG] [Thread-131482] [transport.py] [_log()] server lang: <none>
2025-12-31T17:07:36.312 [DEBUG] [Thread-131482] [transport.py] [_log()] kex follows: False
2025-12-31T17:07:36.312 [DEBUG] [Thread-131482] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:07:36.312 [DEBUG] [Thread-131482] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:07:36.312 [DEBUG] [Thread-131482] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:07:36.313 [DEBUG] [Thread-131482] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:07:36.313 [DEBUG] [Thread-131482] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:07:36.313 [DEBUG] [Thread-131482] [transport.py] [_log()] Compression: none
2025-12-31T17:07:36.313 [DEBUG] [Thread-131482] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:07:36.369 [DEBUG] [Thread-131482] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:07:36.369 [DEBUG] [Thread-131482] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:07:36.370 [DEBUG] [Thread-131482] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T17:07:36.370 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T17:07:36.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:07:36.428 [DEBUG] [Thread-131482] [transport.py] [_log()] userauth is OK
2025-12-31T17:07:36.429 [DEBUG] [Thread-131482] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:07:36.429 [DEBUG] [Thread-131482] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:07:36.429 [DEBUG] [Thread-131482] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T17:07:36.429 [DEBUG] [Thread-131482] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:07:36.447 [INFO] [Thread-131482] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:07:36.448 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T17:07:36.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:07:37.294 [DEBUG] [Thread-131482] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:07:37.295 [DEBUG] [Thread-131482] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:07:37.343 [DEBUG] [Thread-131482] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:07:37.343 [DEBUG] [Thread-131482] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:07:37.352 [DEBUG] [Thread-131482] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:07:37.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:07:37.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-12-31T17:07:37.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-12-31T17:07:37.381 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:07:37.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:07:37.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:07:37.390 [DEBUG] [Thread-131482] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:07:42.524 [DEBUG] [Thread-131484 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:07:57.571 [DEBUG] [Thread-131485 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:08:07.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T17:08:07.412 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T17:08:07.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T17:08:08.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 17, 7, 39), 27.28, 16.3, 0.0, 43.72, 24.49, 0, 0, 0, 2, 0, 0),)
2025-12-31T17:08:08.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 17:07:39
2025-12-31T17:08:08.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T17:08:08.385 [DEBUG] [Thread-131486] [transport.py] [_log()] starting thread (client mode): 0xb955b7f0
2025-12-31T17:08:08.385 [DEBUG] [Thread-131486] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:08:08.406 [DEBUG] [Thread-131486] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T17:08:08.406 [INFO] [Thread-131486] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T17:08:08.409 [DEBUG] [Thread-131486] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:08:08.409 [DEBUG] [Thread-131486] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T17:08:08.409 [DEBUG] [Thread-131486] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:08:08.409 [DEBUG] [Thread-131486] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:08:08.409 [DEBUG] [Thread-131486] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:08:08.409 [DEBUG] [Thread-131486] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:08:08.409 [DEBUG] [Thread-131486] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:08:08.409 [DEBUG] [Thread-131486] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:08:08.409 [DEBUG] [Thread-131486] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:08:08.409 [DEBUG] [Thread-131486] [transport.py] [_log()] client lang: <none>
2025-12-31T17:08:08.409 [DEBUG] [Thread-131486] [transport.py] [_log()] server lang: <none>
2025-12-31T17:08:08.409 [DEBUG] [Thread-131486] [transport.py] [_log()] kex follows: False
2025-12-31T17:08:08.409 [DEBUG] [Thread-131486] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:08:08.409 [DEBUG] [Thread-131486] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:08:08.409 [DEBUG] [Thread-131486] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:08:08.409 [DEBUG] [Thread-131486] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:08:08.409 [DEBUG] [Thread-131486] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:08:08.409 [DEBUG] [Thread-131486] [transport.py] [_log()] Compression: none
2025-12-31T17:08:08.409 [DEBUG] [Thread-131486] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:08:08.417 [DEBUG] [Thread-131486] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:08:08.418 [DEBUG] [Thread-131486] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:08:08.418 [DEBUG] [Thread-131486] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T17:08:08.418 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T17:08:08.419 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:08:08.420 [DEBUG] [Thread-131486] [transport.py] [_log()] userauth is OK
2025-12-31T17:08:08.420 [DEBUG] [Thread-131486] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:08:08.420 [DEBUG] [Thread-131486] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:08:08.420 [DEBUG] [Thread-131486] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T17:08:08.420 [DEBUG] [Thread-131486] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:08:08.443 [INFO] [Thread-131486] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:08:08.444 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:08:09.095 [DEBUG] [Thread-131486] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:08:09.095 [DEBUG] [Thread-131486] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:08:09.096 [DEBUG] [Thread-131486] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T17:08:09.136 [DEBUG] [Thread-131486] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:08:09.136 [DEBUG] [Thread-131486] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:08:09.139 [DEBUG] [Thread-131486] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:08:09.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:08:09.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T17:08:09.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T17:08:09.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T17:08:09.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:08:09.163 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T17:08:09.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:08:09.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:08:09.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T17:08:09.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.630002 -999.00  +24.00  32.44     22   +1.00 1 2 2 1 1   887    0 21.75 -44.89 ----- 35.2 32.4 293.8 40.2 26.5 -15.1 26.4 -15.1 26.2 -13.7 26.6 -14.1
2025-12-31T17:08:09.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T17:08:09.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T17:08:09.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.630002
2025-12-31T17:08:09.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T17:08:09.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T17:08:09.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T17:08:09.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T17:08:09.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T17:08:09.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T17:07:39', tmtdew=27.28, humidity=16.3, cloud=0.0, wind=43.72, temperature=24.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T15:07:12.173', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T17:08:09.166 [DEBUG] [Thread-131486] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:08:09.248 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T17:08:09.262 [DEBUG] [Thread-131489] [transport.py] [_log()] starting thread (client mode): 0xb9592c20
2025-12-31T17:08:09.262 [DEBUG] [Thread-131489] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:08:09.276 [DEBUG] [Thread-131489] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T17:08:09.276 [INFO] [Thread-131489] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T17:08:09.283 [DEBUG] [Thread-131489] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:08:09.284 [DEBUG] [Thread-131489] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T17:08:09.284 [DEBUG] [Thread-131489] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:08:09.284 [DEBUG] [Thread-131489] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:08:09.284 [DEBUG] [Thread-131489] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:08:09.284 [DEBUG] [Thread-131489] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:08:09.284 [DEBUG] [Thread-131489] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:08:09.284 [DEBUG] [Thread-131489] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:08:09.284 [DEBUG] [Thread-131489] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:08:09.284 [DEBUG] [Thread-131489] [transport.py] [_log()] client lang: <none>
2025-12-31T17:08:09.284 [DEBUG] [Thread-131489] [transport.py] [_log()] server lang: <none>
2025-12-31T17:08:09.285 [DEBUG] [Thread-131489] [transport.py] [_log()] kex follows: False
2025-12-31T17:08:09.285 [DEBUG] [Thread-131489] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:08:09.285 [DEBUG] [Thread-131489] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:08:09.285 [DEBUG] [Thread-131489] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:08:09.285 [DEBUG] [Thread-131489] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:08:09.285 [DEBUG] [Thread-131489] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:08:09.285 [DEBUG] [Thread-131489] [transport.py] [_log()] Compression: none
2025-12-31T17:08:09.285 [DEBUG] [Thread-131489] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:08:09.340 [DEBUG] [Thread-131489] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:08:09.341 [DEBUG] [Thread-131489] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:08:09.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T17:08:09.342 [DEBUG] [Thread-131489] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T17:08:09.343 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:08:09.397 [DEBUG] [Thread-131489] [transport.py] [_log()] userauth is OK
2025-12-31T17:08:09.397 [DEBUG] [Thread-131489] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:08:09.398 [DEBUG] [Thread-131489] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:08:09.398 [DEBUG] [Thread-131489] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T17:08:09.398 [DEBUG] [Thread-131489] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:08:09.420 [INFO] [Thread-131489] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:08:09.421 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T17:08:09.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:08:10.239 [DEBUG] [Thread-131489] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:08:10.240 [DEBUG] [Thread-131489] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:08:10.288 [DEBUG] [Thread-131489] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:08:10.288 [DEBUG] [Thread-131489] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:08:10.297 [DEBUG] [Thread-131489] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:08:10.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:08:10.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T17:08:10.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T17:08:10.323 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:08:10.323 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:08:10.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:08:10.332 [DEBUG] [Thread-131489] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:08:12.603 [DEBUG] [Thread-131491 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:08:21.724 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:08:21.725 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:08:26.536 [DEBUG] [Thread-131492 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:08:27.642 [DEBUG] [Thread-131493 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:08:40.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T17:08:40.342 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T17:08:40.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T17:08:41.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 17, 8, 11), 27.25, 16.31, 0.0, 40.53, 24.39, 0, 0, 0, 2, 0, 0),)
2025-12-31T17:08:41.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 17:08:11
2025-12-31T17:08:41.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T17:08:41.334 [DEBUG] [Thread-131494] [transport.py] [_log()] starting thread (client mode): 0xb6bbb010
2025-12-31T17:08:41.334 [DEBUG] [Thread-131494] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:08:41.355 [DEBUG] [Thread-131494] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T17:08:41.355 [INFO] [Thread-131494] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T17:08:41.356 [DEBUG] [Thread-131494] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:08:41.356 [DEBUG] [Thread-131494] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T17:08:41.356 [DEBUG] [Thread-131494] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:08:41.356 [DEBUG] [Thread-131494] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:08:41.357 [DEBUG] [Thread-131494] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:08:41.357 [DEBUG] [Thread-131494] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:08:41.357 [DEBUG] [Thread-131494] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:08:41.357 [DEBUG] [Thread-131494] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:08:41.357 [DEBUG] [Thread-131494] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:08:41.357 [DEBUG] [Thread-131494] [transport.py] [_log()] client lang: <none>
2025-12-31T17:08:41.357 [DEBUG] [Thread-131494] [transport.py] [_log()] server lang: <none>
2025-12-31T17:08:41.357 [DEBUG] [Thread-131494] [transport.py] [_log()] kex follows: False
2025-12-31T17:08:41.357 [DEBUG] [Thread-131494] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:08:41.357 [DEBUG] [Thread-131494] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:08:41.357 [DEBUG] [Thread-131494] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:08:41.357 [DEBUG] [Thread-131494] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:08:41.357 [DEBUG] [Thread-131494] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:08:41.357 [DEBUG] [Thread-131494] [transport.py] [_log()] Compression: none
2025-12-31T17:08:41.357 [DEBUG] [Thread-131494] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:08:41.366 [DEBUG] [Thread-131494] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:08:41.367 [DEBUG] [Thread-131494] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:08:41.368 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T17:08:41.368 [DEBUG] [Thread-131494] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T17:08:41.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:08:41.370 [DEBUG] [Thread-131494] [transport.py] [_log()] userauth is OK
2025-12-31T17:08:41.371 [DEBUG] [Thread-131494] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:08:41.371 [DEBUG] [Thread-131494] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:08:41.371 [DEBUG] [Thread-131494] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T17:08:41.371 [DEBUG] [Thread-131494] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:08:41.396 [INFO] [Thread-131494] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:08:41.398 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:08:42.021 [DEBUG] [Thread-131494] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:08:42.021 [DEBUG] [Thread-131494] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:08:42.022 [DEBUG] [Thread-131494] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T17:08:42.062 [DEBUG] [Thread-131494] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:08:42.062 [DEBUG] [Thread-131494] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:08:42.066 [DEBUG] [Thread-131494] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:08:42.078 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:08:42.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T17:08:42.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T17:08:42.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T17:08:42.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:08:42.090 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T17:08:42.091 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:08:42.091 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:08:42.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T17:08:42.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.630696 -999.00  +23.80  26.95     22   +1.10 1 2 1 1 1   887    0 22.37 -43.26 ----- 30.0 26.9 294.8 41.7 26.5 -15.2 26.4 -14.8 26.1 -14.6 26.6 -14.4
2025-12-31T17:08:42.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T17:08:42.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T17:08:42.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.630696
2025-12-31T17:08:42.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T17:08:42.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T17:08:42.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T17:08:42.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T17:08:42.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T17:08:42.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T17:08:11', tmtdew=27.25, humidity=16.31, cloud=0.0, wind=40.53, temperature=24.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T15:08:12.134', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T17:08:42.093 [DEBUG] [Thread-131494] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:08:42.177 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T17:08:42.190 [DEBUG] [Thread-131497] [transport.py] [_log()] starting thread (client mode): 0xb6bbeb30
2025-12-31T17:08:42.190 [DEBUG] [Thread-131497] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:08:42.205 [DEBUG] [Thread-131497] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T17:08:42.205 [INFO] [Thread-131497] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T17:08:42.212 [DEBUG] [Thread-131497] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:08:42.212 [DEBUG] [Thread-131497] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T17:08:42.212 [DEBUG] [Thread-131497] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:08:42.213 [DEBUG] [Thread-131497] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:08:42.213 [DEBUG] [Thread-131497] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:08:42.213 [DEBUG] [Thread-131497] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:08:42.213 [DEBUG] [Thread-131497] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:08:42.213 [DEBUG] [Thread-131497] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:08:42.213 [DEBUG] [Thread-131497] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:08:42.213 [DEBUG] [Thread-131497] [transport.py] [_log()] client lang: <none>
2025-12-31T17:08:42.213 [DEBUG] [Thread-131497] [transport.py] [_log()] server lang: <none>
2025-12-31T17:08:42.213 [DEBUG] [Thread-131497] [transport.py] [_log()] kex follows: False
2025-12-31T17:08:42.213 [DEBUG] [Thread-131497] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:08:42.213 [DEBUG] [Thread-131497] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:08:42.213 [DEBUG] [Thread-131497] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:08:42.213 [DEBUG] [Thread-131497] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:08:42.213 [DEBUG] [Thread-131497] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:08:42.213 [DEBUG] [Thread-131497] [transport.py] [_log()] Compression: none
2025-12-31T17:08:42.213 [DEBUG] [Thread-131497] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:08:42.273 [DEBUG] [Thread-131497] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:08:42.273 [DEBUG] [Thread-131497] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:08:42.274 [DEBUG] [Thread-131497] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T17:08:42.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T17:08:42.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:08:42.329 [DEBUG] [Thread-131497] [transport.py] [_log()] userauth is OK
2025-12-31T17:08:42.329 [DEBUG] [Thread-131497] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:08:42.329 [DEBUG] [Thread-131497] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:08:42.329 [DEBUG] [Thread-131497] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T17:08:42.330 [DEBUG] [Thread-131497] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:08:42.348 [INFO] [Thread-131497] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:08:42.349 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T17:08:42.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:08:42.679 [DEBUG] [Thread-131499 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:08:43.158 [DEBUG] [Thread-131497] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:08:43.158 [DEBUG] [Thread-131497] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:08:43.206 [DEBUG] [Thread-131497] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:08:43.206 [DEBUG] [Thread-131497] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:08:43.215 [DEBUG] [Thread-131497] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:08:43.224 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:08:43.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T17:08:43.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T17:08:43.241 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:08:43.241 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:08:43.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:08:43.250 [DEBUG] [Thread-131497] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:08:57.731 [DEBUG] [Thread-131500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:09:12.768 [DEBUG] [Thread-131501 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:09:13.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T17:09:13.272 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T17:09:13.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T17:09:14.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 17, 8, 43), 26.9, 16.48, 0.0, 36.17, 24.24, 0, 0, 0, 2, 0, 0),)
2025-12-31T17:09:14.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 17:08:43
2025-12-31T17:09:14.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T17:09:14.300 [DEBUG] [Thread-131502] [transport.py] [_log()] starting thread (client mode): 0xb9558370
2025-12-31T17:09:14.300 [DEBUG] [Thread-131502] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:09:14.320 [DEBUG] [Thread-131502] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T17:09:14.320 [INFO] [Thread-131502] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T17:09:14.323 [DEBUG] [Thread-131502] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:09:14.323 [DEBUG] [Thread-131502] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T17:09:14.323 [DEBUG] [Thread-131502] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:09:14.323 [DEBUG] [Thread-131502] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:09:14.323 [DEBUG] [Thread-131502] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:09:14.323 [DEBUG] [Thread-131502] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:09:14.323 [DEBUG] [Thread-131502] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:09:14.323 [DEBUG] [Thread-131502] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:09:14.323 [DEBUG] [Thread-131502] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:09:14.323 [DEBUG] [Thread-131502] [transport.py] [_log()] client lang: <none>
2025-12-31T17:09:14.323 [DEBUG] [Thread-131502] [transport.py] [_log()] server lang: <none>
2025-12-31T17:09:14.323 [DEBUG] [Thread-131502] [transport.py] [_log()] kex follows: False
2025-12-31T17:09:14.323 [DEBUG] [Thread-131502] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:09:14.323 [DEBUG] [Thread-131502] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:09:14.323 [DEBUG] [Thread-131502] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:09:14.323 [DEBUG] [Thread-131502] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:09:14.323 [DEBUG] [Thread-131502] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:09:14.323 [DEBUG] [Thread-131502] [transport.py] [_log()] Compression: none
2025-12-31T17:09:14.323 [DEBUG] [Thread-131502] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:09:14.339 [DEBUG] [Thread-131502] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:09:14.339 [DEBUG] [Thread-131502] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:09:14.339 [DEBUG] [Thread-131502] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T17:09:14.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T17:09:14.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:09:14.340 [DEBUG] [Thread-131502] [transport.py] [_log()] userauth is OK
2025-12-31T17:09:14.340 [DEBUG] [Thread-131502] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:09:14.340 [DEBUG] [Thread-131502] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:09:14.340 [DEBUG] [Thread-131502] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T17:09:14.340 [DEBUG] [Thread-131502] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:09:14.349 [INFO] [Thread-131502] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:09:14.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:09:14.993 [DEBUG] [Thread-131502] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:09:14.993 [DEBUG] [Thread-131502] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:09:14.993 [DEBUG] [Thread-131502] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T17:09:15.034 [DEBUG] [Thread-131502] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:09:15.034 [DEBUG] [Thread-131502] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:09:15.037 [DEBUG] [Thread-131502] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:09:15.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:09:15.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T17:09:15.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T17:09:15.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T17:09:15.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:09:15.055 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T17:09:15.055 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:09:15.055 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:09:15.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T17:09:15.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.631044 -999.00  +23.80  26.51     22   +1.00 1 2 1 1 1   887    0 21.69 -48.74 ----- 31.4 26.5 297.6 42.3 26.5 -15.3 26.4 -15.0 26.1 -14.6 26.5 -14.2
2025-12-31T17:09:15.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T17:09:15.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T17:09:15.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.631044
2025-12-31T17:09:15.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T17:09:15.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T17:09:15.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T17:09:15.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T17:09:15.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T17:09:15.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T17:08:43', tmtdew=26.9, humidity=16.48, cloud=0.0, wind=36.17, temperature=24.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T15:08:42.202', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T17:09:15.056 [DEBUG] [Thread-131502] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:09:15.130 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T17:09:15.143 [DEBUG] [Thread-131505] [transport.py] [_log()] starting thread (client mode): 0xb9579450
2025-12-31T17:09:15.143 [DEBUG] [Thread-131505] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:09:15.158 [DEBUG] [Thread-131505] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T17:09:15.158 [INFO] [Thread-131505] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T17:09:15.166 [DEBUG] [Thread-131505] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:09:15.166 [DEBUG] [Thread-131505] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T17:09:15.166 [DEBUG] [Thread-131505] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:09:15.166 [DEBUG] [Thread-131505] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:09:15.166 [DEBUG] [Thread-131505] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:09:15.166 [DEBUG] [Thread-131505] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:09:15.166 [DEBUG] [Thread-131505] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:09:15.166 [DEBUG] [Thread-131505] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:09:15.166 [DEBUG] [Thread-131505] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:09:15.166 [DEBUG] [Thread-131505] [transport.py] [_log()] client lang: <none>
2025-12-31T17:09:15.166 [DEBUG] [Thread-131505] [transport.py] [_log()] server lang: <none>
2025-12-31T17:09:15.166 [DEBUG] [Thread-131505] [transport.py] [_log()] kex follows: False
2025-12-31T17:09:15.166 [DEBUG] [Thread-131505] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:09:15.166 [DEBUG] [Thread-131505] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:09:15.166 [DEBUG] [Thread-131505] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:09:15.166 [DEBUG] [Thread-131505] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:09:15.166 [DEBUG] [Thread-131505] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:09:15.166 [DEBUG] [Thread-131505] [transport.py] [_log()] Compression: none
2025-12-31T17:09:15.166 [DEBUG] [Thread-131505] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:09:15.224 [DEBUG] [Thread-131505] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:09:15.224 [DEBUG] [Thread-131505] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:09:15.225 [DEBUG] [Thread-131505] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T17:09:15.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T17:09:15.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:09:15.281 [DEBUG] [Thread-131505] [transport.py] [_log()] userauth is OK
2025-12-31T17:09:15.281 [DEBUG] [Thread-131505] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:09:15.281 [DEBUG] [Thread-131505] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:09:15.281 [DEBUG] [Thread-131505] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T17:09:15.281 [DEBUG] [Thread-131505] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:09:15.296 [INFO] [Thread-131505] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:09:15.296 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T17:09:15.296 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:09:16.140 [DEBUG] [Thread-131505] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:09:16.140 [DEBUG] [Thread-131505] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:09:16.188 [DEBUG] [Thread-131505] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:09:16.189 [DEBUG] [Thread-131505] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:09:16.197 [DEBUG] [Thread-131505] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:09:16.205 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:09:16.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T17:09:16.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T17:09:16.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:09:16.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:09:16.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:09:16.228 [DEBUG] [Thread-131505] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:09:21.864 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:09:21.865 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:09:26.591 [DEBUG] [Thread-131507 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:09:27.800 [DEBUG] [Thread-131508 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:09:42.851 [DEBUG] [Thread-131509 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:09:46.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T17:09:46.251 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T17:09: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-12-31T17:09:46.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 17, 9, 15), 26.91, 16.46, 0.0, 33.47, 24.22, 0, 0, 0, 2, 0, 0),)
2025-12-31T17:09:46.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 17:09:15
2025-12-31T17:09:47.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T17:09:47.252 [DEBUG] [Thread-131510] [transport.py] [_log()] starting thread (client mode): 0xb955b7f0
2025-12-31T17:09:47.252 [DEBUG] [Thread-131510] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:09:47.268 [DEBUG] [Thread-131510] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T17:09:47.268 [INFO] [Thread-131510] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T17:09:47.271 [DEBUG] [Thread-131510] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:09:47.271 [DEBUG] [Thread-131510] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T17:09:47.271 [DEBUG] [Thread-131510] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:09:47.271 [DEBUG] [Thread-131510] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:09:47.271 [DEBUG] [Thread-131510] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:09:47.271 [DEBUG] [Thread-131510] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:09:47.271 [DEBUG] [Thread-131510] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:09:47.271 [DEBUG] [Thread-131510] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:09:47.271 [DEBUG] [Thread-131510] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:09:47.271 [DEBUG] [Thread-131510] [transport.py] [_log()] client lang: <none>
2025-12-31T17:09:47.271 [DEBUG] [Thread-131510] [transport.py] [_log()] server lang: <none>
2025-12-31T17:09:47.271 [DEBUG] [Thread-131510] [transport.py] [_log()] kex follows: False
2025-12-31T17:09:47.271 [DEBUG] [Thread-131510] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:09:47.271 [DEBUG] [Thread-131510] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:09:47.271 [DEBUG] [Thread-131510] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:09:47.271 [DEBUG] [Thread-131510] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:09:47.271 [DEBUG] [Thread-131510] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:09:47.271 [DEBUG] [Thread-131510] [transport.py] [_log()] Compression: none
2025-12-31T17:09:47.271 [DEBUG] [Thread-131510] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:09:47.286 [DEBUG] [Thread-131510] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:09:47.287 [DEBUG] [Thread-131510] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:09:47.287 [DEBUG] [Thread-131510] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T17:09:47.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T17:09:47.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:09:47.288 [DEBUG] [Thread-131510] [transport.py] [_log()] userauth is OK
2025-12-31T17:09:47.288 [DEBUG] [Thread-131510] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:09:47.288 [DEBUG] [Thread-131510] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:09:47.288 [DEBUG] [Thread-131510] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T17:09:47.288 [DEBUG] [Thread-131510] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:09:47.303 [INFO] [Thread-131510] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:09:47.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:09:47.899 [DEBUG] [Thread-131510] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:09:47.899 [DEBUG] [Thread-131510] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:09:47.899 [DEBUG] [Thread-131510] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T17:09:47.941 [DEBUG] [Thread-131510] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:09:47.941 [DEBUG] [Thread-131510] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:09:47.943 [DEBUG] [Thread-131510] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:09:47.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:09:47.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T17:09:47.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T17:09:47.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T17:09:47.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:09:47.962 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T17:09:47.962 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:09:47.962 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:09:47.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T17:09:47.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.631391 -999.00  +23.90  27.01     22   +1.10 1 2 1 1 1   887    0 22.40 -49.05 ----- 27.7 27.0 295.4 34.6 26.4 -15.0 26.4 -15.1 26.1 -15.4 26.4 -14.7
2025-12-31T17:09:47.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T17:09:47.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T17:09:47.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.631391
2025-12-31T17:09:47.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T17:09:47.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T17:09:47.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T17:09:47.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T17:09:47.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T17:09:47.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T17:09:15', tmtdew=26.91, humidity=16.46, cloud=0.0, wind=33.47, temperature=24.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T15:09:12.182', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T17:09:47.963 [DEBUG] [Thread-131510] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:09: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-12-31T17:09:48.047 [DEBUG] [Thread-131513] [transport.py] [_log()] starting thread (client mode): 0xb955a890
2025-12-31T17:09:48.048 [DEBUG] [Thread-131513] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:09:48.066 [DEBUG] [Thread-131513] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T17:09:48.066 [INFO] [Thread-131513] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T17:09:48.074 [DEBUG] [Thread-131513] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:09:48.074 [DEBUG] [Thread-131513] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T17:09:48.074 [DEBUG] [Thread-131513] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:09:48.074 [DEBUG] [Thread-131513] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:09:48.074 [DEBUG] [Thread-131513] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:09:48.074 [DEBUG] [Thread-131513] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:09:48.074 [DEBUG] [Thread-131513] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:09:48.074 [DEBUG] [Thread-131513] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:09:48.074 [DEBUG] [Thread-131513] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:09:48.074 [DEBUG] [Thread-131513] [transport.py] [_log()] client lang: <none>
2025-12-31T17:09:48.074 [DEBUG] [Thread-131513] [transport.py] [_log()] server lang: <none>
2025-12-31T17:09:48.074 [DEBUG] [Thread-131513] [transport.py] [_log()] kex follows: False
2025-12-31T17:09:48.074 [DEBUG] [Thread-131513] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:09:48.074 [DEBUG] [Thread-131513] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:09:48.074 [DEBUG] [Thread-131513] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:09:48.074 [DEBUG] [Thread-131513] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:09:48.074 [DEBUG] [Thread-131513] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:09:48.074 [DEBUG] [Thread-131513] [transport.py] [_log()] Compression: none
2025-12-31T17:09:48.074 [DEBUG] [Thread-131513] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:09:48.132 [DEBUG] [Thread-131513] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:09:48.132 [DEBUG] [Thread-131513] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:09:48.132 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T17:09:48.132 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:09:48.133 [DEBUG] [Thread-131513] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T17:09:48.189 [DEBUG] [Thread-131513] [transport.py] [_log()] userauth is OK
2025-12-31T17:09:48.189 [DEBUG] [Thread-131513] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:09:48.190 [DEBUG] [Thread-131513] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:09:48.190 [DEBUG] [Thread-131513] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T17:09:48.190 [DEBUG] [Thread-131513] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:09:48.203 [INFO] [Thread-131513] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:09:48.203 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T17:09:48.203 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:09:49.048 [DEBUG] [Thread-131513] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:09:49.048 [DEBUG] [Thread-131513] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:09:49.096 [DEBUG] [Thread-131513] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:09:49.096 [DEBUG] [Thread-131513] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:09:49.104 [DEBUG] [Thread-131513] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:09:49.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:09:49.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T17:09:49.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T17:09:49.128 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:09:49.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:09:49.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:09:49.136 [DEBUG] [Thread-131513] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:09:57.884 [DEBUG] [Thread-131515 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:10:12.937 [DEBUG] [Thread-131516 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:10:19.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T17:10:19.130 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T17:10:19.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T17:10:19.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 17, 9, 47), 27.08, 16.39, 0.0, 28.5, 24.37, 0, 0, 0, 2, 0, 0),)
2025-12-31T17:10:19.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 17:09:47
2025-12-31T17:10:19.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T17:10:20.141 [DEBUG] [Thread-131517] [transport.py] [_log()] starting thread (client mode): 0xb9559d50
2025-12-31T17:10:20.141 [DEBUG] [Thread-131517] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:10:20.160 [DEBUG] [Thread-131517] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T17:10:20.160 [INFO] [Thread-131517] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T17:10:20.162 [DEBUG] [Thread-131517] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:10:20.162 [DEBUG] [Thread-131517] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T17:10:20.162 [DEBUG] [Thread-131517] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:10:20.162 [DEBUG] [Thread-131517] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:10:20.162 [DEBUG] [Thread-131517] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:10:20.162 [DEBUG] [Thread-131517] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:10:20.162 [DEBUG] [Thread-131517] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:10:20.162 [DEBUG] [Thread-131517] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:10:20.162 [DEBUG] [Thread-131517] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:10:20.162 [DEBUG] [Thread-131517] [transport.py] [_log()] client lang: <none>
2025-12-31T17:10:20.162 [DEBUG] [Thread-131517] [transport.py] [_log()] server lang: <none>
2025-12-31T17:10:20.162 [DEBUG] [Thread-131517] [transport.py] [_log()] kex follows: False
2025-12-31T17:10:20.162 [DEBUG] [Thread-131517] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:10:20.162 [DEBUG] [Thread-131517] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:10:20.162 [DEBUG] [Thread-131517] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:10:20.162 [DEBUG] [Thread-131517] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:10:20.162 [DEBUG] [Thread-131517] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:10:20.162 [DEBUG] [Thread-131517] [transport.py] [_log()] Compression: none
2025-12-31T17:10:20.162 [DEBUG] [Thread-131517] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:10:20.176 [DEBUG] [Thread-131517] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:10:20.176 [DEBUG] [Thread-131517] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:10:20.176 [DEBUG] [Thread-131517] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T17:10:20.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T17:10:20.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:10:20.177 [DEBUG] [Thread-131517] [transport.py] [_log()] userauth is OK
2025-12-31T17:10:20.177 [DEBUG] [Thread-131517] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:10:20.177 [DEBUG] [Thread-131517] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:10:20.177 [DEBUG] [Thread-131517] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T17:10:20.177 [DEBUG] [Thread-131517] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:10:20.195 [INFO] [Thread-131517] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:10:20.195 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:10:21.177 [DEBUG] [Thread-131517] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:10:21.177 [DEBUG] [Thread-131517] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:10:21.177 [DEBUG] [Thread-131517] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T17:10:21.218 [DEBUG] [Thread-131517] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:10:21.218 [DEBUG] [Thread-131517] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:10:21.220 [DEBUG] [Thread-131517] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:10:21.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:10:21.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T17:10:21.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T17:10:21.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T17:10:21.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:10:21.364 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T17:10:21.364 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:10:21.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:10:21.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T17:10:21.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.631738 -999.00  +23.90  36.94     22   +1.00 1 2 2 1 1   887    0 21.61 -50.59 ----- 27.5 36.9 299.4 43.5 26.5 -15.3 26.4 -15.4 26.1 -15.6 26.4 -15.0
2025-12-31T17:10:21.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T17:10:21.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T17:10:21.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.631738
2025-12-31T17:10:21.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T17:10:21.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T17:10:21.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T17:10:21.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T17:10:21.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T17:10:21.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T17:09:47', tmtdew=27.08, humidity=16.39, cloud=0.0, wind=28.5, temperature=24.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T15:09:42.163', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T17:10:21.365 [DEBUG] [Thread-131517] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:10:21.439 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T17:10:21.450 [DEBUG] [Thread-131520] [transport.py] [_log()] starting thread (client mode): 0xb95f0760
2025-12-31T17:10:21.451 [DEBUG] [Thread-131520] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:10:21.466 [DEBUG] [Thread-131520] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T17:10:21.466 [INFO] [Thread-131520] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T17:10:21.473 [DEBUG] [Thread-131520] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:10:21.473 [DEBUG] [Thread-131520] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T17:10:21.473 [DEBUG] [Thread-131520] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:10:21.473 [DEBUG] [Thread-131520] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:10:21.473 [DEBUG] [Thread-131520] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:10:21.473 [DEBUG] [Thread-131520] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:10:21.473 [DEBUG] [Thread-131520] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:10:21.473 [DEBUG] [Thread-131520] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:10:21.473 [DEBUG] [Thread-131520] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:10:21.473 [DEBUG] [Thread-131520] [transport.py] [_log()] client lang: <none>
2025-12-31T17:10:21.473 [DEBUG] [Thread-131520] [transport.py] [_log()] server lang: <none>
2025-12-31T17:10:21.474 [DEBUG] [Thread-131520] [transport.py] [_log()] kex follows: False
2025-12-31T17:10:21.474 [DEBUG] [Thread-131520] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:10:21.474 [DEBUG] [Thread-131520] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:10:21.474 [DEBUG] [Thread-131520] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:10:21.474 [DEBUG] [Thread-131520] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:10:21.474 [DEBUG] [Thread-131520] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:10:21.474 [DEBUG] [Thread-131520] [transport.py] [_log()] Compression: none
2025-12-31T17:10:21.474 [DEBUG] [Thread-131520] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:10:21.529 [DEBUG] [Thread-131520] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:10:21.529 [DEBUG] [Thread-131520] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:10:21.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T17:10:21.529 [DEBUG] [Thread-131520] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T17:10:21.530 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:10:21.587 [DEBUG] [Thread-131520] [transport.py] [_log()] userauth is OK
2025-12-31T17:10:21.587 [DEBUG] [Thread-131520] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:10:21.587 [DEBUG] [Thread-131520] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:10:21.587 [DEBUG] [Thread-131520] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T17:10:21.587 [DEBUG] [Thread-131520] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:10:21.601 [INFO] [Thread-131520] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:10:21.601 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T17:10:21.602 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:10:22.008 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:10:22.009 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:10:22.457 [DEBUG] [Thread-131520] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:10:22.457 [DEBUG] [Thread-131520] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:10:22.505 [DEBUG] [Thread-131520] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:10:22.505 [DEBUG] [Thread-131520] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:10:22.514 [DEBUG] [Thread-131520] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:10:22.522 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:10: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')
2025-12-31T17:10:22.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T17:10:22.540 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:10:22.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:10:22.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:10:22.548 [DEBUG] [Thread-131520] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:10:26.640 [DEBUG] [Thread-131522 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:10:27.968 [DEBUG] [Thread-131523 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:10:43.013 [DEBUG] [Thread-131524 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:10:52.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T17:10:52.552 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T17:10:52.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T17:10:53.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 17, 10, 19), 27.0, 16.48, 0.0, 31.79, 24.32, 0, 0, 0, 2, 0, 0),)
2025-12-31T17:10:53.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 17:10:19
2025-12-31T17:10:53.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T17:10:53.607 [DEBUG] [Thread-131525] [transport.py] [_log()] starting thread (client mode): 0xb95d4c10
2025-12-31T17:10:53.607 [DEBUG] [Thread-131525] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:10:53.626 [DEBUG] [Thread-131525] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T17:10:53.627 [INFO] [Thread-131525] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T17:10:53.628 [DEBUG] [Thread-131525] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:10:53.628 [DEBUG] [Thread-131525] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T17:10:53.628 [DEBUG] [Thread-131525] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:10:53.628 [DEBUG] [Thread-131525] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:10:53.628 [DEBUG] [Thread-131525] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:10:53.628 [DEBUG] [Thread-131525] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:10:53.629 [DEBUG] [Thread-131525] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:10:53.629 [DEBUG] [Thread-131525] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:10:53.629 [DEBUG] [Thread-131525] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:10:53.629 [DEBUG] [Thread-131525] [transport.py] [_log()] client lang: <none>
2025-12-31T17:10:53.629 [DEBUG] [Thread-131525] [transport.py] [_log()] server lang: <none>
2025-12-31T17:10:53.629 [DEBUG] [Thread-131525] [transport.py] [_log()] kex follows: False
2025-12-31T17:10:53.629 [DEBUG] [Thread-131525] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:10:53.629 [DEBUG] [Thread-131525] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:10:53.629 [DEBUG] [Thread-131525] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:10:53.629 [DEBUG] [Thread-131525] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:10:53.629 [DEBUG] [Thread-131525] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:10:53.629 [DEBUG] [Thread-131525] [transport.py] [_log()] Compression: none
2025-12-31T17:10:53.629 [DEBUG] [Thread-131525] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:10:53.637 [DEBUG] [Thread-131525] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:10:53.638 [DEBUG] [Thread-131525] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:10:53.638 [DEBUG] [Thread-131525] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T17:10:53.638 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T17:10:53.638 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:10:53.639 [DEBUG] [Thread-131525] [transport.py] [_log()] userauth is OK
2025-12-31T17:10:53.639 [DEBUG] [Thread-131525] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:10:53.639 [DEBUG] [Thread-131525] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:10:53.639 [DEBUG] [Thread-131525] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T17:10:53.639 [DEBUG] [Thread-131525] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:10:53.657 [INFO] [Thread-131525] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:10:53.658 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:10:54.282 [DEBUG] [Thread-131525] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:10:54.282 [DEBUG] [Thread-131525] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:10:54.283 [DEBUG] [Thread-131525] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T17:10:54.323 [DEBUG] [Thread-131525] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:10:54.324 [DEBUG] [Thread-131525] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:10:54.327 [DEBUG] [Thread-131525] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:10:54.339 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:10:54.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T17:10:54.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T17:10:54.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T17:10:54.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:10:54.351 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T17:10:54.352 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:10:54.352 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:10:54.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T17:10:54.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.632085 -999.00  +24.00  33.80     21   +0.80 1 2 2 1 1   887    0 21.35 -44.35 ----- 29.4 33.8 295.2 39.3 26.4 -15.7 26.4 -15.8 26.1 -16.2 -999.0 -999.0
2025-12-31T17:10:54.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T17:10:54.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T17:10:54.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.632085
2025-12-31T17:10:54.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T17:10:54.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T17:10:54.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T17:10:54.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T17:10:54.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T17:10:54.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T17:10:19', tmtdew=27.0, humidity=16.48, cloud=0.0, wind=31.79, temperature=24.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T15:10:12.144', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T17:10:54.354 [DEBUG] [Thread-131525] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:10:54.441 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T17:10:54.453 [DEBUG] [Thread-131528] [transport.py] [_log()] starting thread (client mode): 0xb95d60b0
2025-12-31T17:10:54.454 [DEBUG] [Thread-131528] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:10:54.467 [DEBUG] [Thread-131528] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T17:10:54.468 [INFO] [Thread-131528] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T17:10:54.475 [DEBUG] [Thread-131528] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:10:54.476 [DEBUG] [Thread-131528] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T17:10:54.476 [DEBUG] [Thread-131528] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:10:54.476 [DEBUG] [Thread-131528] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:10:54.476 [DEBUG] [Thread-131528] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:10:54.476 [DEBUG] [Thread-131528] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:10:54.476 [DEBUG] [Thread-131528] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:10:54.476 [DEBUG] [Thread-131528] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:10:54.477 [DEBUG] [Thread-131528] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:10:54.477 [DEBUG] [Thread-131528] [transport.py] [_log()] client lang: <none>
2025-12-31T17:10:54.477 [DEBUG] [Thread-131528] [transport.py] [_log()] server lang: <none>
2025-12-31T17:10:54.477 [DEBUG] [Thread-131528] [transport.py] [_log()] kex follows: False
2025-12-31T17:10:54.477 [DEBUG] [Thread-131528] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:10:54.477 [DEBUG] [Thread-131528] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:10:54.477 [DEBUG] [Thread-131528] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:10:54.477 [DEBUG] [Thread-131528] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:10:54.477 [DEBUG] [Thread-131528] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:10:54.477 [DEBUG] [Thread-131528] [transport.py] [_log()] Compression: none
2025-12-31T17:10:54.477 [DEBUG] [Thread-131528] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:10:54.536 [DEBUG] [Thread-131528] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:10:54.537 [DEBUG] [Thread-131528] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:10:54.537 [DEBUG] [Thread-131528] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T17:10:54.537 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T17:10:54.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:10:54.591 [DEBUG] [Thread-131528] [transport.py] [_log()] userauth is OK
2025-12-31T17:10:54.592 [DEBUG] [Thread-131528] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:10:54.592 [DEBUG] [Thread-131528] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:10:54.592 [DEBUG] [Thread-131528] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T17:10:54.592 [DEBUG] [Thread-131528] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:10:54.610 [INFO] [Thread-131528] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:10:54.611 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T17:10:54.611 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:10:55.445 [DEBUG] [Thread-131528] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:10:55.445 [DEBUG] [Thread-131528] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:10:55.494 [DEBUG] [Thread-131528] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:10:55.494 [DEBUG] [Thread-131528] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:10:55.505 [DEBUG] [Thread-131528] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:10:55.515 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:10:55.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T17:10:55.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-12-31T17:10:55.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:10:55.536 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:10:55.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:10:55.544 [DEBUG] [Thread-131528] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:10:58.047 [DEBUG] [Thread-131530 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:11:13.096 [DEBUG] [Thread-131531 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:11:22.150 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:11:22.151 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:11:25.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T17:11:25.567 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T17:11:25.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T17:11:26.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 17, 10, 51), 27.32, 16.28, 0.0, 35.85, 24.3, 0, 0, 0, 2, 0, 0),)
2025-12-31T17:11:26.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 17:10:51
2025-12-31T17:11:26.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T17:11:26.578 [DEBUG] [Thread-131532] [transport.py] [_log()] starting thread (client mode): 0xb6bbb640
2025-12-31T17:11:26.578 [DEBUG] [Thread-131532] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:11:26.598 [DEBUG] [Thread-131532] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T17:11:26.598 [INFO] [Thread-131532] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T17:11:26.601 [DEBUG] [Thread-131532] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:11:26.601 [DEBUG] [Thread-131532] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T17:11:26.601 [DEBUG] [Thread-131532] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:11:26.602 [DEBUG] [Thread-131532] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:11:26.602 [DEBUG] [Thread-131532] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:11:26.602 [DEBUG] [Thread-131532] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:11:26.602 [DEBUG] [Thread-131532] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:11:26.602 [DEBUG] [Thread-131532] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:11:26.602 [DEBUG] [Thread-131532] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:11:26.602 [DEBUG] [Thread-131532] [transport.py] [_log()] client lang: <none>
2025-12-31T17:11:26.602 [DEBUG] [Thread-131532] [transport.py] [_log()] server lang: <none>
2025-12-31T17:11:26.602 [DEBUG] [Thread-131532] [transport.py] [_log()] kex follows: False
2025-12-31T17:11:26.602 [DEBUG] [Thread-131532] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:11:26.602 [DEBUG] [Thread-131532] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:11:26.602 [DEBUG] [Thread-131532] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:11:26.602 [DEBUG] [Thread-131532] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:11:26.602 [DEBUG] [Thread-131532] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:11:26.602 [DEBUG] [Thread-131532] [transport.py] [_log()] Compression: none
2025-12-31T17:11:26.602 [DEBUG] [Thread-131532] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:11:26.621 [DEBUG] [Thread-131532] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:11:26.621 [DEBUG] [Thread-131532] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:11:26.622 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T17:11:26.622 [DEBUG] [Thread-131532] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T17:11:26.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:11:26.624 [DEBUG] [Thread-131532] [transport.py] [_log()] userauth is OK
2025-12-31T17:11:26.625 [DEBUG] [Thread-131532] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:11:26.625 [DEBUG] [Thread-131532] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:11:26.625 [DEBUG] [Thread-131532] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T17:11:26.625 [DEBUG] [Thread-131532] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:11:26.649 [INFO] [Thread-131532] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:11:26.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:11:26.693 [DEBUG] [Thread-131534 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:11:27.419 [DEBUG] [Thread-131532] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:11:27.419 [DEBUG] [Thread-131532] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:11:27.419 [DEBUG] [Thread-131532] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T17:11:27.460 [DEBUG] [Thread-131532] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:11:27.460 [DEBUG] [Thread-131532] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:11:27.463 [DEBUG] [Thread-131532] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:11:27.469 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:11:27.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T17:11:27.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T17:11:27.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T17:11:27.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:11:27.479 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T17:11:27.479 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:11:27.479 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:11:27.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T17:11:27.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.632432 -999.00  +23.80  36.86     22   +0.80 1 2 2 1 1   887    0 22.22 -40.94 ----- 33.1 36.9 300.4 41.0 26.5 -15.7 26.4 -15.9 26.1 -15.7 26.4 -15.3
2025-12-31T17:11:27.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T17:11:27.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T17:11:27.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.632432
2025-12-31T17:11:27.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T17:11:27.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T17:11:27.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T17:11:27.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T17:11:27.482 [DEBUG] [Thread-131532] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:11:27.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T17:11:27.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T17:10:51', tmtdew=27.32, humidity=16.28, cloud=0.0, wind=35.85, temperature=24.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T15:10:42.125', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T17:11:27.562 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T17:11:27.573 [DEBUG] [Thread-131536] [transport.py] [_log()] starting thread (client mode): 0xb6bb3430
2025-12-31T17:11:27.573 [DEBUG] [Thread-131536] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:11:27.588 [DEBUG] [Thread-131536] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T17:11:27.588 [INFO] [Thread-131536] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T17:11:27.595 [DEBUG] [Thread-131536] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:11:27.596 [DEBUG] [Thread-131536] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T17:11:27.596 [DEBUG] [Thread-131536] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:11:27.596 [DEBUG] [Thread-131536] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:11:27.596 [DEBUG] [Thread-131536] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:11:27.596 [DEBUG] [Thread-131536] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:11:27.596 [DEBUG] [Thread-131536] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:11:27.596 [DEBUG] [Thread-131536] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:11:27.596 [DEBUG] [Thread-131536] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:11:27.596 [DEBUG] [Thread-131536] [transport.py] [_log()] client lang: <none>
2025-12-31T17:11:27.596 [DEBUG] [Thread-131536] [transport.py] [_log()] server lang: <none>
2025-12-31T17:11:27.596 [DEBUG] [Thread-131536] [transport.py] [_log()] kex follows: False
2025-12-31T17:11:27.596 [DEBUG] [Thread-131536] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:11:27.596 [DEBUG] [Thread-131536] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:11:27.596 [DEBUG] [Thread-131536] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:11:27.596 [DEBUG] [Thread-131536] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:11:27.596 [DEBUG] [Thread-131536] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:11:27.597 [DEBUG] [Thread-131536] [transport.py] [_log()] Compression: none
2025-12-31T17:11:27.597 [DEBUG] [Thread-131536] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:11:27.660 [DEBUG] [Thread-131536] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:11:27.661 [DEBUG] [Thread-131536] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:11:27.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T17:11:27.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:11:27.663 [DEBUG] [Thread-131536] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T17:11:27.716 [DEBUG] [Thread-131536] [transport.py] [_log()] userauth is OK
2025-12-31T17:11:27.717 [DEBUG] [Thread-131536] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:11:27.717 [DEBUG] [Thread-131536] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:11:27.717 [DEBUG] [Thread-131536] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T17:11:27.717 [DEBUG] [Thread-131536] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:11:27.736 [INFO] [Thread-131536] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:11:27.737 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T17:11:27.737 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:11:28.127 [DEBUG] [Thread-131538 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:11:28.580 [DEBUG] [Thread-131536] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:11:28.580 [DEBUG] [Thread-131536] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:11:28.628 [DEBUG] [Thread-131536] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:11:28.628 [DEBUG] [Thread-131536] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:11:28.637 [DEBUG] [Thread-131536] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:11:28.646 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:11:28.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T17:11:28.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T17:11:28.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:11:28.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:11:28.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:11:28.673 [DEBUG] [Thread-131536] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:11:43.180 [DEBUG] [Thread-131539 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:11:58.212 [DEBUG] [Thread-131540 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:11:58.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T17:11:58.694 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T17:11:58.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-12-31T17:11:59.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 17, 11, 55), 27.3, 16.26, 0.0, 34.55, 24.44, 0, 0, 0, 2, 0, 0),)
2025-12-31T17:11:59.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 17:11:55
2025-12-31T17:11:59.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T17:11:59.683 [DEBUG] [Thread-131541] [transport.py] [_log()] starting thread (client mode): 0xb6bb1240
2025-12-31T17:11:59.683 [DEBUG] [Thread-131541] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:11:59.704 [DEBUG] [Thread-131541] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T17:11:59.704 [INFO] [Thread-131541] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T17:11:59.707 [DEBUG] [Thread-131541] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:11:59.707 [DEBUG] [Thread-131541] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T17:11:59.707 [DEBUG] [Thread-131541] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:11:59.707 [DEBUG] [Thread-131541] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:11:59.707 [DEBUG] [Thread-131541] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:11:59.707 [DEBUG] [Thread-131541] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:11:59.707 [DEBUG] [Thread-131541] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:11:59.707 [DEBUG] [Thread-131541] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:11:59.707 [DEBUG] [Thread-131541] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:11:59.707 [DEBUG] [Thread-131541] [transport.py] [_log()] client lang: <none>
2025-12-31T17:11:59.707 [DEBUG] [Thread-131541] [transport.py] [_log()] server lang: <none>
2025-12-31T17:11:59.707 [DEBUG] [Thread-131541] [transport.py] [_log()] kex follows: False
2025-12-31T17:11:59.707 [DEBUG] [Thread-131541] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:11:59.707 [DEBUG] [Thread-131541] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:11:59.707 [DEBUG] [Thread-131541] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:11:59.707 [DEBUG] [Thread-131541] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:11:59.707 [DEBUG] [Thread-131541] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:11:59.707 [DEBUG] [Thread-131541] [transport.py] [_log()] Compression: none
2025-12-31T17:11:59.707 [DEBUG] [Thread-131541] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:11:59.721 [DEBUG] [Thread-131541] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:11:59.721 [DEBUG] [Thread-131541] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:11:59.721 [DEBUG] [Thread-131541] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T17:11:59.722 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T17:11:59.722 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:11:59.724 [DEBUG] [Thread-131541] [transport.py] [_log()] userauth is OK
2025-12-31T17:11:59.724 [DEBUG] [Thread-131541] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:11:59.724 [DEBUG] [Thread-131541] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:11:59.724 [DEBUG] [Thread-131541] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T17:11:59.724 [DEBUG] [Thread-131541] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:11:59.744 [INFO] [Thread-131541] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:11:59.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:12:00.403 [DEBUG] [Thread-131541] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:12:00.403 [DEBUG] [Thread-131541] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:12:00.403 [DEBUG] [Thread-131541] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T17:12:00.444 [DEBUG] [Thread-131541] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:12:00.444 [DEBUG] [Thread-131541] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:12:00.447 [DEBUG] [Thread-131541] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:12:00.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:12:00.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T17:12:00.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T17:12:00.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T17:12:00.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:12:00.473 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T17:12:00.473 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:12:00.473 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:12:00.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T17:12:00.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.632779 -999.00  +23.70  25.56     22   +0.80 1 2 1 1 1   887    0 21.87 -44.54 ----- 23.4 25.6 296.6 41.8 26.4 -16.0 26.4 -15.9 26.0 -14.8 26.4 -15.2
2025-12-31T17:12:00.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T17:12:00.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T17:12:00.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.632779
2025-12-31T17:12:00.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T17:12:00.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T17:12:00.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T17:12:00.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T17:12:00.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T17:12:00.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T17:11:55', tmtdew=27.3, humidity=16.26, cloud=0.0, wind=34.55, temperature=24.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T15:11:12.106', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T17:12:00.477 [DEBUG] [Thread-131541] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:12:00.560 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T17:12:00.572 [DEBUG] [Thread-131544] [transport.py] [_log()] starting thread (client mode): 0xb95d4400
2025-12-31T17:12:00.572 [DEBUG] [Thread-131544] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:12:00.587 [DEBUG] [Thread-131544] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T17:12:00.587 [INFO] [Thread-131544] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T17:12:00.596 [DEBUG] [Thread-131544] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:12:00.597 [DEBUG] [Thread-131544] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T17:12:00.597 [DEBUG] [Thread-131544] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:12:00.597 [DEBUG] [Thread-131544] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:12:00.597 [DEBUG] [Thread-131544] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:12:00.597 [DEBUG] [Thread-131544] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:12:00.597 [DEBUG] [Thread-131544] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:12:00.597 [DEBUG] [Thread-131544] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:12:00.597 [DEBUG] [Thread-131544] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:12:00.597 [DEBUG] [Thread-131544] [transport.py] [_log()] client lang: <none>
2025-12-31T17:12:00.597 [DEBUG] [Thread-131544] [transport.py] [_log()] server lang: <none>
2025-12-31T17:12:00.597 [DEBUG] [Thread-131544] [transport.py] [_log()] kex follows: False
2025-12-31T17:12:00.597 [DEBUG] [Thread-131544] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:12:00.597 [DEBUG] [Thread-131544] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:12:00.597 [DEBUG] [Thread-131544] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:12:00.597 [DEBUG] [Thread-131544] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:12:00.598 [DEBUG] [Thread-131544] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:12:00.598 [DEBUG] [Thread-131544] [transport.py] [_log()] Compression: none
2025-12-31T17:12:00.598 [DEBUG] [Thread-131544] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:12:00.656 [DEBUG] [Thread-131544] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:12:00.656 [DEBUG] [Thread-131544] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:12:00.657 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T17:12:00.657 [DEBUG] [Thread-131544] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T17:12:00.658 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:12:00.712 [DEBUG] [Thread-131544] [transport.py] [_log()] userauth is OK
2025-12-31T17:12:00.713 [DEBUG] [Thread-131544] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:12:00.713 [DEBUG] [Thread-131544] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:12:00.713 [DEBUG] [Thread-131544] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T17:12:00.713 [DEBUG] [Thread-131544] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:12:00.732 [INFO] [Thread-131544] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:12:00.733 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T17:12:00.733 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:12:01.563 [DEBUG] [Thread-131544] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:12:01.563 [DEBUG] [Thread-131544] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:12:01.611 [DEBUG] [Thread-131544] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:12:01.611 [DEBUG] [Thread-131544] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:12:01.620 [DEBUG] [Thread-131544] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:12:01.628 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:12:01.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T17:12:01.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T17:12:01.647 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:12:01.647 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:12:01.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:12:01.655 [DEBUG] [Thread-131544] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:12:13.252 [DEBUG] [Thread-131546 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:12:22.289 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:12:22.291 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:12:26.737 [DEBUG] [Thread-131547 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:12:28.299 [DEBUG] [Thread-131548 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:12:31.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T17:12:31.678 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T17:12:31.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T17:12:32.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 17, 12, 28), 27.24, 16.31, 0.0, 34.25, 24.34, 0, 0, 0, 2, 0, 0),)
2025-12-31T17:12:32.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 17:12:28
2025-12-31T17:12:32.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T17:12:32.691 [DEBUG] [Thread-131549] [transport.py] [_log()] starting thread (client mode): 0xb95d4550
2025-12-31T17:12:32.691 [DEBUG] [Thread-131549] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:12:32.714 [DEBUG] [Thread-131549] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T17:12:32.714 [INFO] [Thread-131549] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T17:12:32.717 [DEBUG] [Thread-131549] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:12:32.717 [DEBUG] [Thread-131549] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T17:12:32.717 [DEBUG] [Thread-131549] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:12:32.717 [DEBUG] [Thread-131549] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:12:32.717 [DEBUG] [Thread-131549] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:12:32.717 [DEBUG] [Thread-131549] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:12:32.717 [DEBUG] [Thread-131549] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:12:32.717 [DEBUG] [Thread-131549] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:12:32.717 [DEBUG] [Thread-131549] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:12:32.717 [DEBUG] [Thread-131549] [transport.py] [_log()] client lang: <none>
2025-12-31T17:12:32.717 [DEBUG] [Thread-131549] [transport.py] [_log()] server lang: <none>
2025-12-31T17:12:32.717 [DEBUG] [Thread-131549] [transport.py] [_log()] kex follows: False
2025-12-31T17:12:32.717 [DEBUG] [Thread-131549] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:12:32.717 [DEBUG] [Thread-131549] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:12:32.717 [DEBUG] [Thread-131549] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:12:32.717 [DEBUG] [Thread-131549] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:12:32.717 [DEBUG] [Thread-131549] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:12:32.717 [DEBUG] [Thread-131549] [transport.py] [_log()] Compression: none
2025-12-31T17:12:32.717 [DEBUG] [Thread-131549] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:12:32.734 [DEBUG] [Thread-131549] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:12:32.735 [DEBUG] [Thread-131549] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:12:32.736 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T17:12:32.736 [DEBUG] [Thread-131549] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T17:12:32.737 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:12:32.738 [DEBUG] [Thread-131549] [transport.py] [_log()] userauth is OK
2025-12-31T17:12:32.738 [DEBUG] [Thread-131549] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:12:32.738 [DEBUG] [Thread-131549] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:12:32.738 [DEBUG] [Thread-131549] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T17:12:32.738 [DEBUG] [Thread-131549] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:12:32.756 [INFO] [Thread-131549] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:12:32.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:12:33.553 [DEBUG] [Thread-131549] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:12:33.553 [DEBUG] [Thread-131549] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:12:33.554 [DEBUG] [Thread-131549] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T17:12:33.594 [DEBUG] [Thread-131549] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:12:33.594 [DEBUG] [Thread-131549] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:12:33.598 [DEBUG] [Thread-131549] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:12:33.610 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:12:33.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T17:12:33.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T17:12:33.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T17:12:33.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:12:33.620 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T17:12:33.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:12:33.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:12:33.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T17:12:33.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.633127 -999.00  +24.10  26.14     21   +0.90 1 2 1 1 1   887    0 21.92 -45.41 ----- 33.7 26.1 298.2 32.1 26.5 -15.6 26.4 -15.6 26.1 -15.2 26.4 -14.8
2025-12-31T17:12:33.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T17:12:33.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T17:12:33.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.633127
2025-12-31T17:12:33.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T17:12:33.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T17:12:33.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T17:12:33.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T17:12:33.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T17:12:33.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T17:12:28', tmtdew=27.24, humidity=16.31, cloud=0.0, wind=34.25, temperature=24.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T15:11:42.173', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T17:12:33.623 [DEBUG] [Thread-131549] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:12:33.705 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T17:12:33.717 [DEBUG] [Thread-131552] [transport.py] [_log()] starting thread (client mode): 0xb95f0ac0
2025-12-31T17:12:33.717 [DEBUG] [Thread-131552] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:12:33.732 [DEBUG] [Thread-131552] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T17:12:33.732 [INFO] [Thread-131552] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T17:12:33.739 [DEBUG] [Thread-131552] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:12:33.740 [DEBUG] [Thread-131552] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T17:12:33.740 [DEBUG] [Thread-131552] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:12:33.740 [DEBUG] [Thread-131552] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:12:33.740 [DEBUG] [Thread-131552] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:12:33.740 [DEBUG] [Thread-131552] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:12:33.740 [DEBUG] [Thread-131552] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:12:33.740 [DEBUG] [Thread-131552] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:12:33.741 [DEBUG] [Thread-131552] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:12:33.741 [DEBUG] [Thread-131552] [transport.py] [_log()] client lang: <none>
2025-12-31T17:12:33.741 [DEBUG] [Thread-131552] [transport.py] [_log()] server lang: <none>
2025-12-31T17:12:33.741 [DEBUG] [Thread-131552] [transport.py] [_log()] kex follows: False
2025-12-31T17:12:33.741 [DEBUG] [Thread-131552] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:12:33.741 [DEBUG] [Thread-131552] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:12:33.741 [DEBUG] [Thread-131552] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:12:33.741 [DEBUG] [Thread-131552] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:12:33.742 [DEBUG] [Thread-131552] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:12:33.742 [DEBUG] [Thread-131552] [transport.py] [_log()] Compression: none
2025-12-31T17:12:33.742 [DEBUG] [Thread-131552] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:12:33.797 [DEBUG] [Thread-131552] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:12:33.797 [DEBUG] [Thread-131552] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:12:33.798 [DEBUG] [Thread-131552] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T17:12:33.798 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T17:12:33.799 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:12:33.853 [DEBUG] [Thread-131552] [transport.py] [_log()] userauth is OK
2025-12-31T17:12:33.853 [DEBUG] [Thread-131552] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:12:33.854 [DEBUG] [Thread-131552] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:12:33.854 [DEBUG] [Thread-131552] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T17:12:33.854 [DEBUG] [Thread-131552] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:12:33.872 [INFO] [Thread-131552] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:12:33.872 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T17:12:33.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:12:34.765 [DEBUG] [Thread-131552] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:12:34.766 [DEBUG] [Thread-131552] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:12:34.814 [DEBUG] [Thread-131552] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:12:34.815 [DEBUG] [Thread-131552] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:12:34.824 [DEBUG] [Thread-131552] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:12:34.833 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:12:34.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T17:12:34.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T17:12:34.851 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:12:34.851 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:12:34.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:12:34.860 [DEBUG] [Thread-131552] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:12:43.332 [DEBUG] [Thread-131554 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:12:58.386 [DEBUG] [Thread-131555 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:13:04.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T17:13:04.882 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T17:13:04.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T17:13:05.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 17, 12, 28), 27.44, 15.81, 0.0, 32.45, 24.59, 0, 0, 0, 2, 0, 0),)
2025-12-31T17:13:05.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 17:12:28
2025-12-31T17:13:05.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T17:13:05.929 [DEBUG] [Thread-131556] [transport.py] [_log()] starting thread (client mode): 0xb95d7ee0
2025-12-31T17:13:05.929 [DEBUG] [Thread-131556] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:13:05.950 [DEBUG] [Thread-131556] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T17:13:05.950 [INFO] [Thread-131556] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T17:13:05.953 [DEBUG] [Thread-131556] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:13:05.953 [DEBUG] [Thread-131556] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T17:13:05.953 [DEBUG] [Thread-131556] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:13:05.953 [DEBUG] [Thread-131556] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:13:05.953 [DEBUG] [Thread-131556] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:13:05.953 [DEBUG] [Thread-131556] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:13:05.953 [DEBUG] [Thread-131556] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:13:05.953 [DEBUG] [Thread-131556] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:13:05.953 [DEBUG] [Thread-131556] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:13:05.953 [DEBUG] [Thread-131556] [transport.py] [_log()] client lang: <none>
2025-12-31T17:13:05.953 [DEBUG] [Thread-131556] [transport.py] [_log()] server lang: <none>
2025-12-31T17:13:05.953 [DEBUG] [Thread-131556] [transport.py] [_log()] kex follows: False
2025-12-31T17:13:05.953 [DEBUG] [Thread-131556] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:13:05.953 [DEBUG] [Thread-131556] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:13:05.953 [DEBUG] [Thread-131556] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:13:05.953 [DEBUG] [Thread-131556] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:13:05.953 [DEBUG] [Thread-131556] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:13:05.953 [DEBUG] [Thread-131556] [transport.py] [_log()] Compression: none
2025-12-31T17:13:05.953 [DEBUG] [Thread-131556] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:13:05.970 [DEBUG] [Thread-131556] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:13:05.970 [DEBUG] [Thread-131556] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:13:05.970 [DEBUG] [Thread-131556] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T17:13:05.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T17:13:05.971 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:13:05.971 [DEBUG] [Thread-131556] [transport.py] [_log()] userauth is OK
2025-12-31T17:13:05.971 [DEBUG] [Thread-131556] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:13:05.971 [DEBUG] [Thread-131556] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:13:05.971 [DEBUG] [Thread-131556] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T17:13:05.971 [DEBUG] [Thread-131556] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:13:05.980 [INFO] [Thread-131556] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:13:05.980 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:13:06.619 [DEBUG] [Thread-131556] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:13:06.619 [DEBUG] [Thread-131556] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:13:06.619 [DEBUG] [Thread-131556] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T17:13:06.660 [DEBUG] [Thread-131556] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:13:06.660 [DEBUG] [Thread-131556] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:13:06.662 [DEBUG] [Thread-131556] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:13:06.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:13:06.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T17:13:06.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T17:13:06.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T17:13:06.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:13:06.680 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T17:13:06.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:13:06.680 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:13:06.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T17:13:06.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.633474 -999.00  +24.10  34.50     21   +1.00 1 2 2 1 1   887    0 21.56 -46.59 ----- 36.0 34.5 295.8 40.1 26.5 -15.7 26.4 -15.7 26.2 -16.2 26.5 -14.7
2025-12-31T17:13:06.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T17:13:06.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T17:13:06.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.633474
2025-12-31T17:13:06.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T17:13:06.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T17:13:06.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T17:13:06.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T17:13:06.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T17:13:06.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T17:12:28', tmtdew=27.44, humidity=15.81, cloud=0.0, wind=32.45, temperature=24.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T15:12:12.154', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T17:13:06.681 [DEBUG] [Thread-131556] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:13:06.755 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T17:13:06.767 [DEBUG] [Thread-131559] [transport.py] [_log()] starting thread (client mode): 0xb6bb36a0
2025-12-31T17:13:06.767 [DEBUG] [Thread-131559] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:13:06.781 [DEBUG] [Thread-131559] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T17:13:06.781 [INFO] [Thread-131559] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T17:13:06.789 [DEBUG] [Thread-131559] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:13:06.789 [DEBUG] [Thread-131559] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T17:13:06.789 [DEBUG] [Thread-131559] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:13:06.789 [DEBUG] [Thread-131559] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:13:06.789 [DEBUG] [Thread-131559] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:13:06.789 [DEBUG] [Thread-131559] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:13:06.789 [DEBUG] [Thread-131559] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:13:06.789 [DEBUG] [Thread-131559] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:13:06.789 [DEBUG] [Thread-131559] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:13:06.789 [DEBUG] [Thread-131559] [transport.py] [_log()] client lang: <none>
2025-12-31T17:13:06.789 [DEBUG] [Thread-131559] [transport.py] [_log()] server lang: <none>
2025-12-31T17:13:06.789 [DEBUG] [Thread-131559] [transport.py] [_log()] kex follows: False
2025-12-31T17:13:06.789 [DEBUG] [Thread-131559] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:13:06.789 [DEBUG] [Thread-131559] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:13:06.789 [DEBUG] [Thread-131559] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:13:06.789 [DEBUG] [Thread-131559] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:13:06.790 [DEBUG] [Thread-131559] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:13:06.790 [DEBUG] [Thread-131559] [transport.py] [_log()] Compression: none
2025-12-31T17:13:06.790 [DEBUG] [Thread-131559] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:13:06.844 [DEBUG] [Thread-131559] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:13:06.844 [DEBUG] [Thread-131559] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:13:06.844 [DEBUG] [Thread-131559] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T17:13:06.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T17:13:06.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:13:06.901 [DEBUG] [Thread-131559] [transport.py] [_log()] userauth is OK
2025-12-31T17:13:06.901 [DEBUG] [Thread-131559] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:13:06.901 [DEBUG] [Thread-131559] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:13:06.901 [DEBUG] [Thread-131559] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T17:13:06.901 [DEBUG] [Thread-131559] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:13:06.917 [INFO] [Thread-131559] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:13:06.918 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T17:13:06.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:13:07.749 [DEBUG] [Thread-131559] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:13:07.749 [DEBUG] [Thread-131559] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:13:07.796 [DEBUG] [Thread-131559] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:13:07.796 [DEBUG] [Thread-131559] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:13:07.805 [DEBUG] [Thread-131559] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:13:07.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:13:07.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T17:13:07.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T17:13:07.829 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:13:07.829 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:13:07.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:13:07.836 [DEBUG] [Thread-131559] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:13:13.420 [DEBUG] [Thread-131561 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:13:22.430 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:13:22.432 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:13:26.787 [DEBUG] [Thread-131562 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:13:28.470 [DEBUG] [Thread-131563 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:13:37.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T17:13:37.859 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T17:13:37.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T17:13:38.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 17, 13, 32), 27.49, 15.78, 0.0, 29.73, 24.67, 0, 0, 0, 2, 0, 0),)
2025-12-31T17:13:38.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 17:13:32
2025-12-31T17:13:38.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T17:13:38.859 [DEBUG] [Thread-131564] [transport.py] [_log()] starting thread (client mode): 0xb95f1cf0
2025-12-31T17:13:38.859 [DEBUG] [Thread-131564] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:13:38.876 [DEBUG] [Thread-131564] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T17:13:38.877 [INFO] [Thread-131564] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T17:13:38.880 [DEBUG] [Thread-131564] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:13:38.880 [DEBUG] [Thread-131564] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T17:13:38.880 [DEBUG] [Thread-131564] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:13:38.880 [DEBUG] [Thread-131564] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:13:38.880 [DEBUG] [Thread-131564] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:13:38.880 [DEBUG] [Thread-131564] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:13:38.880 [DEBUG] [Thread-131564] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:13:38.880 [DEBUG] [Thread-131564] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:13:38.880 [DEBUG] [Thread-131564] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:13:38.880 [DEBUG] [Thread-131564] [transport.py] [_log()] client lang: <none>
2025-12-31T17:13:38.880 [DEBUG] [Thread-131564] [transport.py] [_log()] server lang: <none>
2025-12-31T17:13:38.880 [DEBUG] [Thread-131564] [transport.py] [_log()] kex follows: False
2025-12-31T17:13:38.880 [DEBUG] [Thread-131564] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:13:38.880 [DEBUG] [Thread-131564] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:13:38.880 [DEBUG] [Thread-131564] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:13:38.880 [DEBUG] [Thread-131564] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:13:38.880 [DEBUG] [Thread-131564] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:13:38.880 [DEBUG] [Thread-131564] [transport.py] [_log()] Compression: none
2025-12-31T17:13:38.880 [DEBUG] [Thread-131564] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:13:38.897 [DEBUG] [Thread-131564] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:13:38.897 [DEBUG] [Thread-131564] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:13:38.898 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T17:13:38.898 [DEBUG] [Thread-131564] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T17:13:38.899 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:13:38.900 [DEBUG] [Thread-131564] [transport.py] [_log()] userauth is OK
2025-12-31T17:13:38.900 [DEBUG] [Thread-131564] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:13:38.900 [DEBUG] [Thread-131564] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:13:38.900 [DEBUG] [Thread-131564] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T17:13:38.901 [DEBUG] [Thread-131564] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:13:38.932 [INFO] [Thread-131564] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:13:38.933 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:13:39.711 [DEBUG] [Thread-131564] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:13:39.711 [DEBUG] [Thread-131564] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:13:39.712 [DEBUG] [Thread-131564] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T17:13:39.753 [DEBUG] [Thread-131564] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:13:39.753 [DEBUG] [Thread-131564] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:13:39.756 [DEBUG] [Thread-131564] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:13:39.767 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:13:39.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T17:13:39.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T17:13:39.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T17:13:39.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:13:39.776 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T17:13:39.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:13:39.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:13:39.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T17:13:39.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.633821 -999.00  +24.10  31.35     22   +1.10 1 2 2 1 1   887    0 21.79 -48.46 ----- 23.2 31.4 274.8 36.7 26.5 -16.1 26.4 -16.2 26.1 -18.8 26.4 -14.9
2025-12-31T17:13:39.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T17:13:39.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T17:13:39.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.633821
2025-12-31T17:13:39.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T17:13:39.778 [DEBUG] [Thread-131564] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:13:39.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T17:13:39.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T17:13:39.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T17:13:39.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T17:13:39.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T17:13:32', tmtdew=27.49, humidity=15.78, cloud=0.0, wind=29.73, temperature=24.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T15:12:42.134', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T17:13:39.862 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T17:13:39.875 [DEBUG] [Thread-131567] [transport.py] [_log()] starting thread (client mode): 0xb95d6ec0
2025-12-31T17:13:39.875 [DEBUG] [Thread-131567] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:13:39.889 [DEBUG] [Thread-131567] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T17:13:39.890 [INFO] [Thread-131567] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T17:13:39.897 [DEBUG] [Thread-131567] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:13:39.898 [DEBUG] [Thread-131567] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T17:13:39.898 [DEBUG] [Thread-131567] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:13:39.898 [DEBUG] [Thread-131567] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:13:39.898 [DEBUG] [Thread-131567] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:13:39.898 [DEBUG] [Thread-131567] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:13:39.898 [DEBUG] [Thread-131567] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:13:39.898 [DEBUG] [Thread-131567] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:13:39.898 [DEBUG] [Thread-131567] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:13:39.899 [DEBUG] [Thread-131567] [transport.py] [_log()] client lang: <none>
2025-12-31T17:13:39.899 [DEBUG] [Thread-131567] [transport.py] [_log()] server lang: <none>
2025-12-31T17:13:39.899 [DEBUG] [Thread-131567] [transport.py] [_log()] kex follows: False
2025-12-31T17:13:39.899 [DEBUG] [Thread-131567] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:13:39.899 [DEBUG] [Thread-131567] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:13:39.899 [DEBUG] [Thread-131567] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:13:39.899 [DEBUG] [Thread-131567] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:13:39.900 [DEBUG] [Thread-131567] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:13:39.900 [DEBUG] [Thread-131567] [transport.py] [_log()] Compression: none
2025-12-31T17:13:39.900 [DEBUG] [Thread-131567] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:13:39.959 [DEBUG] [Thread-131567] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:13:39.960 [DEBUG] [Thread-131567] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:13:39.961 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T17:13:39.961 [DEBUG] [Thread-131567] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T17:13:39.962 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:13:40.018 [DEBUG] [Thread-131567] [transport.py] [_log()] userauth is OK
2025-12-31T17:13:40.019 [DEBUG] [Thread-131567] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:13:40.019 [DEBUG] [Thread-131567] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:13:40.019 [DEBUG] [Thread-131567] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T17:13:40.019 [DEBUG] [Thread-131567] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:13:40.037 [INFO] [Thread-131567] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:13:40.038 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T17:13:40.038 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:13:40.857 [DEBUG] [Thread-131567] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:13:40.858 [DEBUG] [Thread-131567] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:13:40.906 [DEBUG] [Thread-131567] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:13:40.906 [DEBUG] [Thread-131567] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:13:40.916 [DEBUG] [Thread-131567] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:13:40.925 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:13:40.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T17:13:40.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-12-31T17:13:40.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:13:40.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:13:40.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:13:40.953 [DEBUG] [Thread-131567] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:13:43.506 [DEBUG] [Thread-131569 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:13:58.552 [DEBUG] [Thread-131570 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:14:10.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T17:14:10.975 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T17:14:10.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T17:14:11.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 17, 14, 4), 27.49, 15.76, 0.0, 30.38, 24.62, 0, 0, 0, 2, 0, 0),)
2025-12-31T17:14:11.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 17:14:04
2025-12-31T17:14:11.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T17:14:11.978 [DEBUG] [Thread-131571] [transport.py] [_log()] starting thread (client mode): 0xb95d6aa0
2025-12-31T17:14:11.979 [DEBUG] [Thread-131571] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:14:11.999 [DEBUG] [Thread-131571] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T17:14:11.999 [INFO] [Thread-131571] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T17:14:12.002 [DEBUG] [Thread-131571] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:14:12.002 [DEBUG] [Thread-131571] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T17:14:12.002 [DEBUG] [Thread-131571] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:14:12.002 [DEBUG] [Thread-131571] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:14:12.002 [DEBUG] [Thread-131571] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:14:12.002 [DEBUG] [Thread-131571] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:14:12.003 [DEBUG] [Thread-131571] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:14:12.003 [DEBUG] [Thread-131571] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:14:12.003 [DEBUG] [Thread-131571] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:14:12.003 [DEBUG] [Thread-131571] [transport.py] [_log()] client lang: <none>
2025-12-31T17:14:12.003 [DEBUG] [Thread-131571] [transport.py] [_log()] server lang: <none>
2025-12-31T17:14:12.003 [DEBUG] [Thread-131571] [transport.py] [_log()] kex follows: False
2025-12-31T17:14:12.003 [DEBUG] [Thread-131571] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:14:12.003 [DEBUG] [Thread-131571] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:14:12.003 [DEBUG] [Thread-131571] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:14:12.003 [DEBUG] [Thread-131571] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:14:12.003 [DEBUG] [Thread-131571] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:14:12.003 [DEBUG] [Thread-131571] [transport.py] [_log()] Compression: none
2025-12-31T17:14:12.003 [DEBUG] [Thread-131571] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:14:12.021 [DEBUG] [Thread-131571] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:14:12.022 [DEBUG] [Thread-131571] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:14:12.022 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T17:14:12.023 [DEBUG] [Thread-131571] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T17:14:12.024 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:14:12.025 [DEBUG] [Thread-131571] [transport.py] [_log()] userauth is OK
2025-12-31T17:14:12.025 [DEBUG] [Thread-131571] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:14:12.025 [DEBUG] [Thread-131571] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:14:12.025 [DEBUG] [Thread-131571] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T17:14:12.025 [DEBUG] [Thread-131571] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:14:12.041 [INFO] [Thread-131571] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:14:12.042 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:14:12.673 [DEBUG] [Thread-131571] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:14:12.673 [DEBUG] [Thread-131571] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:14:12.673 [DEBUG] [Thread-131571] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T17:14:12.714 [DEBUG] [Thread-131571] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:14:12.714 [DEBUG] [Thread-131571] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:14:12.717 [DEBUG] [Thread-131571] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:14:12.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:14:12.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T17:14:12.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T17:14:12.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T17:14:12.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:14:12.743 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T17:14:12.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:14:12.744 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:14:12.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T17:14:12.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.634516 -999.00  +24.00  21.44     22   +1.00 1 2 1 1 1   887    0 21.75 -46.61 ----- 19.0 21.4 293.0 25.3 26.4 -15.9 26.4 -15.8 26.1 -14.1 26.4 -15.0
2025-12-31T17:14:12.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T17:14:12.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T17:14:12.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.634516
2025-12-31T17:14:12.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T17:14:12.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T17:14:12.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T17:14:12.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T17:14:12.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T17:14:12.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T17:14:04', tmtdew=27.49, humidity=15.76, cloud=0.0, wind=30.38, temperature=24.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T15:13:42.182', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T17:14:12.746 [DEBUG] [Thread-131571] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:14:12.829 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T17:14:12.841 [DEBUG] [Thread-131574] [transport.py] [_log()] starting thread (client mode): 0xb6b61750
2025-12-31T17:14:12.842 [DEBUG] [Thread-131574] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:14:12.856 [DEBUG] [Thread-131574] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T17:14:12.857 [INFO] [Thread-131574] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T17:14:12.864 [DEBUG] [Thread-131574] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:14:12.865 [DEBUG] [Thread-131574] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T17:14:12.865 [DEBUG] [Thread-131574] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:14:12.865 [DEBUG] [Thread-131574] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:14:12.865 [DEBUG] [Thread-131574] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:14:12.865 [DEBUG] [Thread-131574] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:14:12.865 [DEBUG] [Thread-131574] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:14:12.865 [DEBUG] [Thread-131574] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:14:12.865 [DEBUG] [Thread-131574] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:14:12.866 [DEBUG] [Thread-131574] [transport.py] [_log()] client lang: <none>
2025-12-31T17:14:12.866 [DEBUG] [Thread-131574] [transport.py] [_log()] server lang: <none>
2025-12-31T17:14:12.866 [DEBUG] [Thread-131574] [transport.py] [_log()] kex follows: False
2025-12-31T17:14:12.866 [DEBUG] [Thread-131574] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:14:12.866 [DEBUG] [Thread-131574] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:14:12.866 [DEBUG] [Thread-131574] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:14:12.866 [DEBUG] [Thread-131574] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:14:12.867 [DEBUG] [Thread-131574] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:14:12.867 [DEBUG] [Thread-131574] [transport.py] [_log()] Compression: none
2025-12-31T17:14:12.867 [DEBUG] [Thread-131574] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:14:12.923 [DEBUG] [Thread-131574] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:14:12.924 [DEBUG] [Thread-131574] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:14:12.924 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T17:14:12.925 [DEBUG] [Thread-131574] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T17:14:12.926 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:14:12.978 [DEBUG] [Thread-131574] [transport.py] [_log()] userauth is OK
2025-12-31T17:14:12.979 [DEBUG] [Thread-131574] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:14:12.979 [DEBUG] [Thread-131574] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:14:12.979 [DEBUG] [Thread-131574] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T17:14:12.980 [DEBUG] [Thread-131574] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:14:12.999 [INFO] [Thread-131574] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:14:13.000 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T17:14:13.000 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:14:13.587 [DEBUG] [Thread-131576 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:14:13.840 [DEBUG] [Thread-131574] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:14:13.841 [DEBUG] [Thread-131574] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:14:13.888 [DEBUG] [Thread-131574] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:14:13.889 [DEBUG] [Thread-131574] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:14:13.898 [DEBUG] [Thread-131574] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:14:13.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:14:13.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T17:14:13.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-12-31T17:14:13.926 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:14:13.926 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:14:13.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:14:13.934 [DEBUG] [Thread-131574] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:14:22.570 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:14:22.571 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:14:26.835 [DEBUG] [Thread-131577 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:14:28.633 [DEBUG] [Thread-131578 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:14:43.664 [DEBUG] [Thread-131579 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:14:43.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T17:14:43.957 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T17:14:43.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T17:14:44.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 17, 14, 36), 27.37, 15.83, 0.0, 28.16, 24.44, 0, 0, 0, 2, 0, 0),)
2025-12-31T17:14:44.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 17:14:36
2025-12-31T17:14:44.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T17:14:44.945 [DEBUG] [Thread-131580] [transport.py] [_log()] starting thread (client mode): 0xb957a7a0
2025-12-31T17:14:44.945 [DEBUG] [Thread-131580] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:14:44.965 [DEBUG] [Thread-131580] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T17:14:44.965 [INFO] [Thread-131580] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T17:14:44.968 [DEBUG] [Thread-131580] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:14:44.968 [DEBUG] [Thread-131580] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T17:14:44.968 [DEBUG] [Thread-131580] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:14:44.968 [DEBUG] [Thread-131580] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:14:44.968 [DEBUG] [Thread-131580] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:14:44.968 [DEBUG] [Thread-131580] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:14:44.968 [DEBUG] [Thread-131580] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:14:44.968 [DEBUG] [Thread-131580] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:14:44.968 [DEBUG] [Thread-131580] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:14:44.968 [DEBUG] [Thread-131580] [transport.py] [_log()] client lang: <none>
2025-12-31T17:14:44.968 [DEBUG] [Thread-131580] [transport.py] [_log()] server lang: <none>
2025-12-31T17:14:44.968 [DEBUG] [Thread-131580] [transport.py] [_log()] kex follows: False
2025-12-31T17:14:44.968 [DEBUG] [Thread-131580] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:14:44.968 [DEBUG] [Thread-131580] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:14:44.969 [DEBUG] [Thread-131580] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:14:44.969 [DEBUG] [Thread-131580] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:14:44.969 [DEBUG] [Thread-131580] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:14:44.969 [DEBUG] [Thread-131580] [transport.py] [_log()] Compression: none
2025-12-31T17:14:44.969 [DEBUG] [Thread-131580] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:14:44.986 [DEBUG] [Thread-131580] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:14:44.986 [DEBUG] [Thread-131580] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:14:44.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T17:14:44.987 [DEBUG] [Thread-131580] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T17:14:44.996 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:14:44.997 [DEBUG] [Thread-131580] [transport.py] [_log()] userauth is OK
2025-12-31T17:14:44.997 [DEBUG] [Thread-131580] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:14:44.997 [DEBUG] [Thread-131580] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:14:44.997 [DEBUG] [Thread-131580] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T17:14:44.998 [DEBUG] [Thread-131580] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:14:45.022 [INFO] [Thread-131580] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:14:45.023 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:14:45.766 [DEBUG] [Thread-131580] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:14:45.766 [DEBUG] [Thread-131580] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:14:45.767 [DEBUG] [Thread-131580] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T17:14:45.806 [DEBUG] [Thread-131580] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:14:45.806 [DEBUG] [Thread-131580] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:14:45.808 [DEBUG] [Thread-131580] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:14:45.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:14:45.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T17:14:45.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T17:14:45.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T17:14:45.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:14:45.821 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T17:14:45.821 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:14:45.821 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:14:45.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T17:14:45.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.634863 -999.00  +24.50  26.48     21   +1.10 1 2 1 1 1   887    0 22.00 -41.08 ----- 26.0 26.5 289.4 29.7 26.6 -15.0 26.4 -15.1 26.3 -14.1 26.6 -14.2
2025-12-31T17:14:45.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T17:14:45.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T17:14:45.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.634863
2025-12-31T17:14:45.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T17:14:45.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T17:14:45.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T17:14:45.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T17:14:45.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T17:14:45.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T17:14:36', tmtdew=27.37, humidity=15.83, cloud=0.0, wind=28.16, temperature=24.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T15:14:12.163', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T17:14:45.824 [DEBUG] [Thread-131580] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:14:45.905 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T17:14:45.917 [DEBUG] [Thread-131583] [transport.py] [_log()] starting thread (client mode): 0xb957aec0
2025-12-31T17:14:45.917 [DEBUG] [Thread-131583] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:14:45.932 [DEBUG] [Thread-131583] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T17:14:45.932 [INFO] [Thread-131583] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T17:14:45.942 [DEBUG] [Thread-131583] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:14:45.943 [DEBUG] [Thread-131583] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T17:14:45.943 [DEBUG] [Thread-131583] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:14:45.943 [DEBUG] [Thread-131583] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:14:45.943 [DEBUG] [Thread-131583] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:14:45.943 [DEBUG] [Thread-131583] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:14:45.944 [DEBUG] [Thread-131583] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:14:45.944 [DEBUG] [Thread-131583] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:14:45.944 [DEBUG] [Thread-131583] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:14:45.944 [DEBUG] [Thread-131583] [transport.py] [_log()] client lang: <none>
2025-12-31T17:14:45.944 [DEBUG] [Thread-131583] [transport.py] [_log()] server lang: <none>
2025-12-31T17:14:45.944 [DEBUG] [Thread-131583] [transport.py] [_log()] kex follows: False
2025-12-31T17:14:45.944 [DEBUG] [Thread-131583] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:14:45.944 [DEBUG] [Thread-131583] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:14:45.944 [DEBUG] [Thread-131583] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:14:45.944 [DEBUG] [Thread-131583] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:14:45.944 [DEBUG] [Thread-131583] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:14:45.944 [DEBUG] [Thread-131583] [transport.py] [_log()] Compression: none
2025-12-31T17:14:45.944 [DEBUG] [Thread-131583] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:14:46.006 [DEBUG] [Thread-131583] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:14:46.007 [DEBUG] [Thread-131583] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:14:46.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T17:14:46.009 [DEBUG] [Thread-131583] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T17:14:46.009 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:14:46.067 [DEBUG] [Thread-131583] [transport.py] [_log()] userauth is OK
2025-12-31T17:14:46.068 [DEBUG] [Thread-131583] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:14:46.068 [DEBUG] [Thread-131583] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:14:46.068 [DEBUG] [Thread-131583] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T17:14:46.068 [DEBUG] [Thread-131583] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:14:46.092 [INFO] [Thread-131583] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:14:46.093 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T17:14:46.093 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:14:46.950 [DEBUG] [Thread-131583] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:14:46.950 [DEBUG] [Thread-131583] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:14:46.998 [DEBUG] [Thread-131583] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:14:46.998 [DEBUG] [Thread-131583] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:14:47.007 [DEBUG] [Thread-131583] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:14:47.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:14:47.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T17:14:47.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T17:14:47.034 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:14:47.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:14:47.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:14:47.043 [DEBUG] [Thread-131583] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:14:58.700 [DEBUG] [Thread-131585 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:15:13.751 [DEBUG] [Thread-131586 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:15:17.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T17:15:17.045 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T17:15:17.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T17:15:17.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 17, 15, 8), 27.39, 15.83, 0.0, 30.52, 24.54, 0, 0, 0, 2, 0, 0),)
2025-12-31T17:15:17.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 17:15:08
2025-12-31T17:15:17.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T17:15:18.027 [DEBUG] [Thread-131587] [transport.py] [_log()] starting thread (client mode): 0xb6bb0c70
2025-12-31T17:15:18.028 [DEBUG] [Thread-131587] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:15:18.047 [DEBUG] [Thread-131587] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T17:15:18.048 [INFO] [Thread-131587] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T17:15:18.051 [DEBUG] [Thread-131587] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:15:18.051 [DEBUG] [Thread-131587] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T17:15:18.051 [DEBUG] [Thread-131587] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:15:18.051 [DEBUG] [Thread-131587] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:15:18.051 [DEBUG] [Thread-131587] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:15:18.051 [DEBUG] [Thread-131587] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:15:18.051 [DEBUG] [Thread-131587] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:15:18.051 [DEBUG] [Thread-131587] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:15:18.051 [DEBUG] [Thread-131587] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:15:18.051 [DEBUG] [Thread-131587] [transport.py] [_log()] client lang: <none>
2025-12-31T17:15:18.052 [DEBUG] [Thread-131587] [transport.py] [_log()] server lang: <none>
2025-12-31T17:15:18.052 [DEBUG] [Thread-131587] [transport.py] [_log()] kex follows: False
2025-12-31T17:15:18.052 [DEBUG] [Thread-131587] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:15:18.052 [DEBUG] [Thread-131587] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:15:18.052 [DEBUG] [Thread-131587] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:15:18.052 [DEBUG] [Thread-131587] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:15:18.052 [DEBUG] [Thread-131587] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:15:18.052 [DEBUG] [Thread-131587] [transport.py] [_log()] Compression: none
2025-12-31T17:15:18.052 [DEBUG] [Thread-131587] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:15:18.068 [DEBUG] [Thread-131587] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:15:18.068 [DEBUG] [Thread-131587] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:15:18.069 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T17:15:18.070 [DEBUG] [Thread-131587] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T17:15:18.071 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:15:18.072 [DEBUG] [Thread-131587] [transport.py] [_log()] userauth is OK
2025-12-31T17:15:18.072 [DEBUG] [Thread-131587] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:15:18.072 [DEBUG] [Thread-131587] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:15:18.073 [DEBUG] [Thread-131587] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T17:15:18.073 [DEBUG] [Thread-131587] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:15:18.098 [INFO] [Thread-131587] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:15:18.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:15:19.721 [DEBUG] [Thread-131587] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:15:19.721 [DEBUG] [Thread-131587] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:15:19.722 [DEBUG] [Thread-131587] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T17:15:19.762 [DEBUG] [Thread-131587] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:15:19.762 [DEBUG] [Thread-131587] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:15:19.765 [DEBUG] [Thread-131587] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:15:19.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:15:19.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T17:15:19.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T17:15:19.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T17:15:19.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:15:19.828 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T17:15:19.829 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:15:19.829 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:15:19.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T17:15:19.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.635210 -999.00  +24.40  29.53     21   +1.00 1 2 1 1 1   887    0 21.85 -35.05 ----- 26.0 29.5 297.8 34.7 26.6 -15.9 26.6 -15.8 26.2 -15.3 26.6 -14.6
2025-12-31T17:15:19.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T17:15:19.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T17:15:19.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.635210
2025-12-31T17:15:19.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T17:15:19.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T17:15:19.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T17:15:19.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T17:15:19.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T17:15:19.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T17:15:08', tmtdew=27.39, humidity=15.83, cloud=0.0, wind=30.52, temperature=24.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T15:14:42.144', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T17:15:19.832 [DEBUG] [Thread-131587] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:15:19.917 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T17:15:19.930 [DEBUG] [Thread-131590] [transport.py] [_log()] starting thread (client mode): 0xb6bbb010
2025-12-31T17:15:19.930 [DEBUG] [Thread-131590] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:15:19.946 [DEBUG] [Thread-131590] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T17:15:19.947 [INFO] [Thread-131590] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T17:15:19.955 [DEBUG] [Thread-131590] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:15:19.956 [DEBUG] [Thread-131590] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T17:15:19.956 [DEBUG] [Thread-131590] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:15:19.956 [DEBUG] [Thread-131590] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:15:19.956 [DEBUG] [Thread-131590] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:15:19.956 [DEBUG] [Thread-131590] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:15:19.956 [DEBUG] [Thread-131590] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:15:19.956 [DEBUG] [Thread-131590] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:15:19.956 [DEBUG] [Thread-131590] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:15:19.956 [DEBUG] [Thread-131590] [transport.py] [_log()] client lang: <none>
2025-12-31T17:15:19.956 [DEBUG] [Thread-131590] [transport.py] [_log()] server lang: <none>
2025-12-31T17:15:19.956 [DEBUG] [Thread-131590] [transport.py] [_log()] kex follows: False
2025-12-31T17:15:19.956 [DEBUG] [Thread-131590] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:15:19.956 [DEBUG] [Thread-131590] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:15:19.956 [DEBUG] [Thread-131590] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:15:19.957 [DEBUG] [Thread-131590] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:15:19.957 [DEBUG] [Thread-131590] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:15:19.957 [DEBUG] [Thread-131590] [transport.py] [_log()] Compression: none
2025-12-31T17:15:19.957 [DEBUG] [Thread-131590] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:15:20.015 [DEBUG] [Thread-131590] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:15:20.016 [DEBUG] [Thread-131590] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:15:20.016 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T17:15:20.017 [DEBUG] [Thread-131590] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T17:15:20.018 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:15:20.071 [DEBUG] [Thread-131590] [transport.py] [_log()] userauth is OK
2025-12-31T17:15:20.072 [DEBUG] [Thread-131590] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:15:20.072 [DEBUG] [Thread-131590] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:15:20.072 [DEBUG] [Thread-131590] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T17:15:20.072 [DEBUG] [Thread-131590] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:15:20.091 [INFO] [Thread-131590] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:15:20.091 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T17:15:20.092 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:15:20.931 [DEBUG] [Thread-131590] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:15:20.931 [DEBUG] [Thread-131590] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:15:20.983 [DEBUG] [Thread-131590] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:15:20.983 [DEBUG] [Thread-131590] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:15:20.996 [DEBUG] [Thread-131590] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:15:21.005 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:15:21.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T17:15:21.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T17:15:21.024 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:15:21.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:15:21.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:15:21.033 [DEBUG] [Thread-131590] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:15:22.714 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:15:22.715 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:15:26.890 [DEBUG] [Thread-131592 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:15:28.789 [DEBUG] [Thread-131593 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:15:43.839 [DEBUG] [Thread-131594 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:15:51.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T17:15:51.030 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T17:15:51.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T17:15:51.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 17, 15, 40), 27.16, 16.56, 0.0, 33.1, 24.72, 0, 0, 0, 2, 0, 0),)
2025-12-31T17:15:51.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 17:15:40
2025-12-31T17:15:51.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T17:15:52.019 [DEBUG] [Thread-131595] [transport.py] [_log()] starting thread (client mode): 0xb95d6e00
2025-12-31T17:15:52.019 [DEBUG] [Thread-131595] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:15:52.039 [DEBUG] [Thread-131595] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T17:15:52.040 [INFO] [Thread-131595] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T17:15:52.041 [DEBUG] [Thread-131595] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:15:52.041 [DEBUG] [Thread-131595] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T17:15:52.041 [DEBUG] [Thread-131595] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:15:52.041 [DEBUG] [Thread-131595] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:15:52.041 [DEBUG] [Thread-131595] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:15:52.041 [DEBUG] [Thread-131595] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:15:52.041 [DEBUG] [Thread-131595] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:15:52.041 [DEBUG] [Thread-131595] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:15:52.041 [DEBUG] [Thread-131595] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:15:52.041 [DEBUG] [Thread-131595] [transport.py] [_log()] client lang: <none>
2025-12-31T17:15:52.041 [DEBUG] [Thread-131595] [transport.py] [_log()] server lang: <none>
2025-12-31T17:15:52.041 [DEBUG] [Thread-131595] [transport.py] [_log()] kex follows: False
2025-12-31T17:15:52.041 [DEBUG] [Thread-131595] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:15:52.041 [DEBUG] [Thread-131595] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:15:52.041 [DEBUG] [Thread-131595] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:15:52.041 [DEBUG] [Thread-131595] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:15:52.041 [DEBUG] [Thread-131595] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:15:52.041 [DEBUG] [Thread-131595] [transport.py] [_log()] Compression: none
2025-12-31T17:15:52.041 [DEBUG] [Thread-131595] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:15:52.058 [DEBUG] [Thread-131595] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:15:52.059 [DEBUG] [Thread-131595] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:15:52.059 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T17:15:52.060 [DEBUG] [Thread-131595] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T17:15:52.061 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:15:52.062 [DEBUG] [Thread-131595] [transport.py] [_log()] userauth is OK
2025-12-31T17:15:52.062 [DEBUG] [Thread-131595] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:15:52.062 [DEBUG] [Thread-131595] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:15:52.062 [DEBUG] [Thread-131595] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T17:15:52.062 [DEBUG] [Thread-131595] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:15:52.086 [INFO] [Thread-131595] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:15:52.087 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:15:52.749 [DEBUG] [Thread-131595] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:15:52.749 [DEBUG] [Thread-131595] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:15:52.749 [DEBUG] [Thread-131595] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T17:15:52.790 [DEBUG] [Thread-131595] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:15:52.790 [DEBUG] [Thread-131595] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:15:52.794 [DEBUG] [Thread-131595] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:15:52.806 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:15:52.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T17:15:52.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T17:15:52.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T17:15:52.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:15:52.818 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T17:15:52.819 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:15:52.819 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:15:52.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T17:15:52.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.635557 -999.00  +24.30  29.95     22   +1.40 1 2 1 1 1   887    0 22.74 -32.62 ----- 24.3 29.9 287.8 36.4 26.6 -15.3 26.5 -15.4 26.2 -15.5 26.6 -14.0
2025-12-31T17:15:52.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T17:15:52.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T17:15:52.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.635557
2025-12-31T17:15:52.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T17:15:52.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T17:15:52.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T17:15:52.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T17:15:52.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T17:15:52.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T17:15:40', tmtdew=27.16, humidity=16.56, cloud=0.0, wind=33.1, temperature=24.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T15:15:12.125', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T17:15:52.822 [DEBUG] [Thread-131595] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:15:52.898 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T17:15:52.910 [DEBUG] [Thread-131598] [transport.py] [_log()] starting thread (client mode): 0xb95d6290
2025-12-31T17:15:52.910 [DEBUG] [Thread-131598] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:15:52.925 [DEBUG] [Thread-131598] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T17:15:52.925 [INFO] [Thread-131598] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T17:15:52.933 [DEBUG] [Thread-131598] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:15:52.933 [DEBUG] [Thread-131598] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T17:15:52.933 [DEBUG] [Thread-131598] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:15:52.933 [DEBUG] [Thread-131598] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:15:52.933 [DEBUG] [Thread-131598] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:15:52.933 [DEBUG] [Thread-131598] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:15:52.933 [DEBUG] [Thread-131598] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:15:52.933 [DEBUG] [Thread-131598] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:15:52.933 [DEBUG] [Thread-131598] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:15:52.933 [DEBUG] [Thread-131598] [transport.py] [_log()] client lang: <none>
2025-12-31T17:15:52.933 [DEBUG] [Thread-131598] [transport.py] [_log()] server lang: <none>
2025-12-31T17:15:52.934 [DEBUG] [Thread-131598] [transport.py] [_log()] kex follows: False
2025-12-31T17:15:52.934 [DEBUG] [Thread-131598] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:15:52.934 [DEBUG] [Thread-131598] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:15:52.934 [DEBUG] [Thread-131598] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:15:52.934 [DEBUG] [Thread-131598] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:15:52.934 [DEBUG] [Thread-131598] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:15:52.934 [DEBUG] [Thread-131598] [transport.py] [_log()] Compression: none
2025-12-31T17:15:52.934 [DEBUG] [Thread-131598] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:15:52.992 [DEBUG] [Thread-131598] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:15:52.992 [DEBUG] [Thread-131598] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:15:52.993 [DEBUG] [Thread-131598] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T17:15:52.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T17:15:52.994 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:15:53.048 [DEBUG] [Thread-131598] [transport.py] [_log()] userauth is OK
2025-12-31T17:15:53.048 [DEBUG] [Thread-131598] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:15:53.048 [DEBUG] [Thread-131598] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:15:53.048 [DEBUG] [Thread-131598] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T17:15:53.048 [DEBUG] [Thread-131598] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:15:53.067 [INFO] [Thread-131598] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:15:53.067 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T17:15:53.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:15:53.923 [DEBUG] [Thread-131598] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:15:53.923 [DEBUG] [Thread-131598] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:15:53.971 [DEBUG] [Thread-131598] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:15:53.971 [DEBUG] [Thread-131598] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:15:53.980 [DEBUG] [Thread-131598] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:15:53.989 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:15:53.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T17:15:53.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T17:15:54.006 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:15:54.006 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:15:54.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:15:54.014 [DEBUG] [Thread-131598] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:15:58.872 [DEBUG] [Thread-131600 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:16:13.921 [DEBUG] [Thread-131601 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:16:22.864 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:16:22.864 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:16:24.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T17:16:24.021 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T17:16:24.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T17:16:24.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 17, 16, 12), 27.02, 16.71, 0.0, 30.19, 24.66, 0, 0, 0, 2, 0, 0),)
2025-12-31T17:16:24.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 17:16:12
2025-12-31T17:16:24.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T17:16:25.045 [DEBUG] [Thread-131602] [transport.py] [_log()] starting thread (client mode): 0xb95f3490
2025-12-31T17:16:25.045 [DEBUG] [Thread-131602] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:16:25.065 [DEBUG] [Thread-131602] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T17:16:25.065 [INFO] [Thread-131602] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T17:16:25.067 [DEBUG] [Thread-131602] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:16:25.067 [DEBUG] [Thread-131602] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T17:16:25.067 [DEBUG] [Thread-131602] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:16:25.067 [DEBUG] [Thread-131602] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:16:25.067 [DEBUG] [Thread-131602] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:16:25.067 [DEBUG] [Thread-131602] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:16:25.067 [DEBUG] [Thread-131602] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:16:25.067 [DEBUG] [Thread-131602] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:16:25.067 [DEBUG] [Thread-131602] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:16:25.067 [DEBUG] [Thread-131602] [transport.py] [_log()] client lang: <none>
2025-12-31T17:16:25.067 [DEBUG] [Thread-131602] [transport.py] [_log()] server lang: <none>
2025-12-31T17:16:25.067 [DEBUG] [Thread-131602] [transport.py] [_log()] kex follows: False
2025-12-31T17:16:25.067 [DEBUG] [Thread-131602] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:16:25.068 [DEBUG] [Thread-131602] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:16:25.068 [DEBUG] [Thread-131602] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:16:25.068 [DEBUG] [Thread-131602] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:16:25.068 [DEBUG] [Thread-131602] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:16:25.068 [DEBUG] [Thread-131602] [transport.py] [_log()] Compression: none
2025-12-31T17:16:25.068 [DEBUG] [Thread-131602] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:16:25.081 [DEBUG] [Thread-131602] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:16:25.081 [DEBUG] [Thread-131602] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:16:25.081 [DEBUG] [Thread-131602] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T17:16:25.081 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T17:16:25.081 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:16:25.082 [DEBUG] [Thread-131602] [transport.py] [_log()] userauth is OK
2025-12-31T17:16:25.082 [DEBUG] [Thread-131602] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:16:25.082 [DEBUG] [Thread-131602] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:16:25.082 [DEBUG] [Thread-131602] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T17:16:25.082 [DEBUG] [Thread-131602] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:16:25.091 [INFO] [Thread-131602] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:16:25.091 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:16:25.838 [DEBUG] [Thread-131602] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:16:25.838 [DEBUG] [Thread-131602] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:16:25.838 [DEBUG] [Thread-131602] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T17:16:25.880 [DEBUG] [Thread-131602] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:16:25.880 [DEBUG] [Thread-131602] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:16:25.883 [DEBUG] [Thread-131602] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:16:25.893 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:16:25.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T17:16:25.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T17:16:25.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T17:16:25.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:16:25.898 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T17:16:25.898 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:16:25.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:16:25.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T17:16:25.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.635905 -999.00  +24.40  27.50     22   +1.40 1 2 1 1 1   887    0 22.17 -33.37 ----- 27.6 27.5 305.8 34.7 26.7 -15.2 26.6 -15.4 26.4 -14.9 26.7 -14.1
2025-12-31T17:16:25.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T17:16:25.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T17:16:25.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.635905
2025-12-31T17:16:25.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T17:16:25.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T17:16:25.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T17:16:25.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T17:16:25.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T17:16:25.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T17:16:12', tmtdew=27.02, humidity=16.71, cloud=0.0, wind=30.19, temperature=24.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T15:15:42.192', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T17:16:25.899 [DEBUG] [Thread-131602] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:16:25.971 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T17:16:25.983 [DEBUG] [Thread-131605] [transport.py] [_log()] starting thread (client mode): 0xb6b61750
2025-12-31T17:16:25.983 [DEBUG] [Thread-131605] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:16:26.001 [DEBUG] [Thread-131605] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T17:16:26.001 [INFO] [Thread-131605] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T17:16:26.009 [DEBUG] [Thread-131605] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:16:26.009 [DEBUG] [Thread-131605] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T17:16:26.009 [DEBUG] [Thread-131605] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:16:26.009 [DEBUG] [Thread-131605] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:16:26.009 [DEBUG] [Thread-131605] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:16:26.009 [DEBUG] [Thread-131605] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:16:26.010 [DEBUG] [Thread-131605] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:16:26.010 [DEBUG] [Thread-131605] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:16:26.010 [DEBUG] [Thread-131605] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:16:26.010 [DEBUG] [Thread-131605] [transport.py] [_log()] client lang: <none>
2025-12-31T17:16:26.010 [DEBUG] [Thread-131605] [transport.py] [_log()] server lang: <none>
2025-12-31T17:16:26.010 [DEBUG] [Thread-131605] [transport.py] [_log()] kex follows: False
2025-12-31T17:16:26.010 [DEBUG] [Thread-131605] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:16:26.010 [DEBUG] [Thread-131605] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:16:26.010 [DEBUG] [Thread-131605] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:16:26.010 [DEBUG] [Thread-131605] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:16:26.010 [DEBUG] [Thread-131605] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:16:26.010 [DEBUG] [Thread-131605] [transport.py] [_log()] Compression: none
2025-12-31T17:16:26.010 [DEBUG] [Thread-131605] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:16:26.070 [DEBUG] [Thread-131605] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:16:26.071 [DEBUG] [Thread-131605] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:16:26.071 [DEBUG] [Thread-131605] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T17:16:26.071 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T17:16:26.071 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:16:26.128 [DEBUG] [Thread-131605] [transport.py] [_log()] userauth is OK
2025-12-31T17:16:26.128 [DEBUG] [Thread-131605] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:16:26.128 [DEBUG] [Thread-131605] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:16:26.128 [DEBUG] [Thread-131605] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T17:16:26.128 [DEBUG] [Thread-131605] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:16:26.151 [INFO] [Thread-131605] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:16:26.152 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T17:16:26.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:16:26.942 [DEBUG] [Thread-131607 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:16:27.008 [DEBUG] [Thread-131605] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:16:27.009 [DEBUG] [Thread-131605] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:16:27.057 [DEBUG] [Thread-131605] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:16:27.057 [DEBUG] [Thread-131605] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:16:27.066 [DEBUG] [Thread-131605] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:16:27.079 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:16:27.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T17:16:27.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T17:16:27.102 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:16:27.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:16:27.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:16:27.114 [DEBUG] [Thread-131605] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:16:28.949 [DEBUG] [Thread-131608 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:16:43.987 [DEBUG] [Thread-131609 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:16:57.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T17:16:57.133 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T17:16:57.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T17:16:57.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 17, 16, 44), 26.84, 16.64, 0.0, 29.27, 24.67, 0, 0, 0, 2, 0, 0),)
2025-12-31T17:16:57.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 17:16:44
2025-12-31T17:16:57.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T17:16:58.118 [DEBUG] [Thread-131610] [transport.py] [_log()] starting thread (client mode): 0xb6bb0af0
2025-12-31T17:16:58.118 [DEBUG] [Thread-131610] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:16:58.140 [DEBUG] [Thread-131610] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T17:16:58.140 [INFO] [Thread-131610] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T17:16:58.143 [DEBUG] [Thread-131610] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:16:58.144 [DEBUG] [Thread-131610] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T17:16:58.144 [DEBUG] [Thread-131610] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:16:58.144 [DEBUG] [Thread-131610] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:16:58.144 [DEBUG] [Thread-131610] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:16:58.144 [DEBUG] [Thread-131610] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:16:58.144 [DEBUG] [Thread-131610] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:16:58.144 [DEBUG] [Thread-131610] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:16:58.144 [DEBUG] [Thread-131610] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:16:58.144 [DEBUG] [Thread-131610] [transport.py] [_log()] client lang: <none>
2025-12-31T17:16:58.144 [DEBUG] [Thread-131610] [transport.py] [_log()] server lang: <none>
2025-12-31T17:16:58.144 [DEBUG] [Thread-131610] [transport.py] [_log()] kex follows: False
2025-12-31T17:16:58.144 [DEBUG] [Thread-131610] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:16:58.144 [DEBUG] [Thread-131610] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:16:58.144 [DEBUG] [Thread-131610] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:16:58.144 [DEBUG] [Thread-131610] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:16:58.144 [DEBUG] [Thread-131610] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:16:58.144 [DEBUG] [Thread-131610] [transport.py] [_log()] Compression: none
2025-12-31T17:16:58.144 [DEBUG] [Thread-131610] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:16:58.162 [DEBUG] [Thread-131610] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:16:58.163 [DEBUG] [Thread-131610] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:16:58.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T17:16:58.164 [DEBUG] [Thread-131610] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T17:16:58.165 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:16:58.166 [DEBUG] [Thread-131610] [transport.py] [_log()] userauth is OK
2025-12-31T17:16:58.166 [DEBUG] [Thread-131610] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:16:58.167 [DEBUG] [Thread-131610] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:16:58.167 [DEBUG] [Thread-131610] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T17:16:58.167 [DEBUG] [Thread-131610] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:16:58.192 [INFO] [Thread-131610] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:16:58.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:16:58.862 [DEBUG] [Thread-131610] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:16:58.862 [DEBUG] [Thread-131610] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:16:58.862 [DEBUG] [Thread-131610] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T17:16:58.903 [DEBUG] [Thread-131610] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:16:58.903 [DEBUG] [Thread-131610] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:16:58.905 [DEBUG] [Thread-131610] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:16:58.917 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:16:58.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T17:16:58.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T17:16:58.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T17:16:58.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:16:58.923 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T17:16:58.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:16:58.923 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:16:58.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T17:16:58.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.636252 -999.00  +24.20  21.28     22   +1.60 1 2 1 1 1   887    0 22.18 -34.38 ----- 27.4 21.3 300.9 38.5 26.6 -15.9 26.6 -16.2 26.4 -14.2 26.6 -14.7
2025-12-31T17:16:58.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T17:16:58.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T17:16:58.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.636252
2025-12-31T17:16:58.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T17:16:58.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T17:16:58.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T17:16:58.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T17:16:58.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T17:16:58.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T17:16:44', tmtdew=26.84, humidity=16.64, cloud=0.0, wind=29.27, temperature=24.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T15:16:12.173', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T17:16:58.924 [DEBUG] [Thread-131610] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:16: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-12-31T17:16:59.008 [DEBUG] [Thread-131613] [transport.py] [_log()] starting thread (client mode): 0xb6ba2560
2025-12-31T17:16:59.008 [DEBUG] [Thread-131613] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:16:59.018 [DEBUG] [Thread-131614 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:16:59.023 [DEBUG] [Thread-131613] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T17:16:59.023 [INFO] [Thread-131613] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T17:16:59.030 [DEBUG] [Thread-131613] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:16:59.030 [DEBUG] [Thread-131613] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T17:16:59.030 [DEBUG] [Thread-131613] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:16:59.030 [DEBUG] [Thread-131613] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:16:59.030 [DEBUG] [Thread-131613] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:16:59.030 [DEBUG] [Thread-131613] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:16:59.030 [DEBUG] [Thread-131613] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:16:59.030 [DEBUG] [Thread-131613] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:16:59.030 [DEBUG] [Thread-131613] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:16:59.030 [DEBUG] [Thread-131613] [transport.py] [_log()] client lang: <none>
2025-12-31T17:16:59.030 [DEBUG] [Thread-131613] [transport.py] [_log()] server lang: <none>
2025-12-31T17:16:59.030 [DEBUG] [Thread-131613] [transport.py] [_log()] kex follows: False
2025-12-31T17:16:59.030 [DEBUG] [Thread-131613] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:16:59.030 [DEBUG] [Thread-131613] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:16:59.030 [DEBUG] [Thread-131613] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:16:59.030 [DEBUG] [Thread-131613] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:16:59.030 [DEBUG] [Thread-131613] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:16:59.030 [DEBUG] [Thread-131613] [transport.py] [_log()] Compression: none
2025-12-31T17:16:59.030 [DEBUG] [Thread-131613] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:16:59.086 [DEBUG] [Thread-131613] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:16:59.087 [DEBUG] [Thread-131613] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:16:59.087 [DEBUG] [Thread-131613] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T17:16:59.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T17:16:59.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:16:59.144 [DEBUG] [Thread-131613] [transport.py] [_log()] userauth is OK
2025-12-31T17:16:59.144 [DEBUG] [Thread-131613] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:16:59.144 [DEBUG] [Thread-131613] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:16:59.144 [DEBUG] [Thread-131613] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T17:16:59.144 [DEBUG] [Thread-131613] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:16:59.158 [INFO] [Thread-131613] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:16:59.158 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T17:16:59.158 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:16:59.971 [DEBUG] [Thread-131613] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:16:59.971 [DEBUG] [Thread-131613] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:17:00.018 [DEBUG] [Thread-131613] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:17:00.018 [DEBUG] [Thread-131613] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:17:00.026 [DEBUG] [Thread-131613] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:17:00.034 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:17: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')
2025-12-31T17:17:00.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T17:17:00.050 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:17:00.050 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:17:00.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:17:00.058 [DEBUG] [Thread-131613] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:17:14.061 [DEBUG] [Thread-131616 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:17:23.003 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:17:23.004 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:17:27.000 [DEBUG] [Thread-131617 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:17:29.095 [DEBUG] [Thread-131618 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:17:30.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T17:17:30.057 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T17:17:30.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T17:17:30.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 17, 17, 16), 26.82, 16.68, 0.0, 30.49, 24.75, 0, 0, 0, 2, 0, 0),)
2025-12-31T17:17:30.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 17:17:16
2025-12-31T17:17:30.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T17:17:31.042 [DEBUG] [Thread-131619] [transport.py] [_log()] starting thread (client mode): 0xb6bb1240
2025-12-31T17:17:31.042 [DEBUG] [Thread-131619] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:17:31.062 [DEBUG] [Thread-131619] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T17:17:31.062 [INFO] [Thread-131619] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T17:17:31.065 [DEBUG] [Thread-131619] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:17:31.066 [DEBUG] [Thread-131619] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T17:17:31.066 [DEBUG] [Thread-131619] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:17:31.066 [DEBUG] [Thread-131619] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:17:31.066 [DEBUG] [Thread-131619] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:17:31.066 [DEBUG] [Thread-131619] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:17:31.066 [DEBUG] [Thread-131619] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:17:31.066 [DEBUG] [Thread-131619] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:17:31.066 [DEBUG] [Thread-131619] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:17:31.066 [DEBUG] [Thread-131619] [transport.py] [_log()] client lang: <none>
2025-12-31T17:17:31.066 [DEBUG] [Thread-131619] [transport.py] [_log()] server lang: <none>
2025-12-31T17:17:31.066 [DEBUG] [Thread-131619] [transport.py] [_log()] kex follows: False
2025-12-31T17:17:31.066 [DEBUG] [Thread-131619] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:17:31.066 [DEBUG] [Thread-131619] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:17:31.066 [DEBUG] [Thread-131619] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:17:31.066 [DEBUG] [Thread-131619] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:17:31.066 [DEBUG] [Thread-131619] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:17:31.066 [DEBUG] [Thread-131619] [transport.py] [_log()] Compression: none
2025-12-31T17:17:31.066 [DEBUG] [Thread-131619] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:17:31.085 [DEBUG] [Thread-131619] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:17:31.085 [DEBUG] [Thread-131619] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:17:31.086 [DEBUG] [Thread-131619] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T17:17:31.086 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T17:17:31.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:17:31.088 [DEBUG] [Thread-131619] [transport.py] [_log()] userauth is OK
2025-12-31T17:17:31.088 [DEBUG] [Thread-131619] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:17:31.088 [DEBUG] [Thread-131619] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:17:31.088 [DEBUG] [Thread-131619] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T17:17:31.089 [DEBUG] [Thread-131619] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:17:31.113 [INFO] [Thread-131619] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:17:31.113 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:17:31.848 [DEBUG] [Thread-131619] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:17:31.848 [DEBUG] [Thread-131619] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:17:31.849 [DEBUG] [Thread-131619] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T17:17:31.889 [DEBUG] [Thread-131619] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:17:31.889 [DEBUG] [Thread-131619] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:17:31.894 [DEBUG] [Thread-131619] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:17:31.898 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:17:31.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T17:17:31.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T17:17:31.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T17:17:31.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:17:31.914 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T17:17:31.914 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:17:31.914 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:17:31.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T17:17:31.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.636599 -999.00  +24.20  27.06     22   +1.70 1 2 1 1 1   887    0 22.33 -33.40 ----- 23.0 27.1 294.6 41.9 26.6 -15.7 26.6 -16.0 26.4 -14.3 26.7 -14.4
2025-12-31T17:17:31.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T17:17:31.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T17:17:31.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.636599
2025-12-31T17:17:31.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T17:17:31.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T17:17:31.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T17:17:31.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T17:17:31.916 [DEBUG] [Thread-131619] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:17:31.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T17:17:31.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T17:17:16', tmtdew=26.82, humidity=16.68, cloud=0.0, wind=30.49, temperature=24.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T15:16:42.154', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T17:17:32.000 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T17:17:32.012 [DEBUG] [Thread-131622] [transport.py] [_log()] starting thread (client mode): 0xb6bba9e0
2025-12-31T17:17:32.012 [DEBUG] [Thread-131622] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:17:32.027 [DEBUG] [Thread-131622] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T17:17:32.027 [INFO] [Thread-131622] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T17:17:32.035 [DEBUG] [Thread-131622] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:17:32.035 [DEBUG] [Thread-131622] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T17:17:32.036 [DEBUG] [Thread-131622] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:17:32.036 [DEBUG] [Thread-131622] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:17:32.036 [DEBUG] [Thread-131622] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:17:32.036 [DEBUG] [Thread-131622] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:17:32.036 [DEBUG] [Thread-131622] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:17:32.036 [DEBUG] [Thread-131622] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:17:32.036 [DEBUG] [Thread-131622] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:17:32.037 [DEBUG] [Thread-131622] [transport.py] [_log()] client lang: <none>
2025-12-31T17:17:32.037 [DEBUG] [Thread-131622] [transport.py] [_log()] server lang: <none>
2025-12-31T17:17:32.037 [DEBUG] [Thread-131622] [transport.py] [_log()] kex follows: False
2025-12-31T17:17:32.037 [DEBUG] [Thread-131622] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:17:32.037 [DEBUG] [Thread-131622] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:17:32.037 [DEBUG] [Thread-131622] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:17:32.037 [DEBUG] [Thread-131622] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:17:32.037 [DEBUG] [Thread-131622] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:17:32.037 [DEBUG] [Thread-131622] [transport.py] [_log()] Compression: none
2025-12-31T17:17:32.037 [DEBUG] [Thread-131622] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:17:32.093 [DEBUG] [Thread-131622] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:17:32.093 [DEBUG] [Thread-131622] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:17:32.094 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T17:17:32.094 [DEBUG] [Thread-131622] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T17:17:32.095 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:17:32.149 [DEBUG] [Thread-131622] [transport.py] [_log()] userauth is OK
2025-12-31T17:17:32.149 [DEBUG] [Thread-131622] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:17:32.149 [DEBUG] [Thread-131622] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:17:32.149 [DEBUG] [Thread-131622] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T17:17:32.149 [DEBUG] [Thread-131622] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:17:32.168 [INFO] [Thread-131622] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:17:32.169 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T17:17:32.169 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:17:33.008 [DEBUG] [Thread-131622] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:17:33.009 [DEBUG] [Thread-131622] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:17:33.057 [DEBUG] [Thread-131622] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:17:33.057 [DEBUG] [Thread-131622] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:17:33.066 [DEBUG] [Thread-131622] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:17:33.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:17: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-12-31T17:17: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-12-31T17:17:33.092 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:17:33.093 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:17:33.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:17:33.101 [DEBUG] [Thread-131622] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:17:44.126 [DEBUG] [Thread-131624 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:17:59.178 [DEBUG] [Thread-131625 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:18:03.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T17:18:03.124 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T17:18:03.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T17:18:03.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 17, 17, 48), 26.82, 16.63, 0.0, 37.49, 24.62, 0, 0, 0, 2, 0, 0),)
2025-12-31T17:18:03.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 17:17:48
2025-12-31T17:18:03.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T17:18:04.101 [DEBUG] [Thread-131626] [transport.py] [_log()] starting thread (client mode): 0xb6bbb220
2025-12-31T17:18:04.101 [DEBUG] [Thread-131626] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:18:04.122 [DEBUG] [Thread-131626] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T17:18:04.122 [INFO] [Thread-131626] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T17:18:04.125 [DEBUG] [Thread-131626] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:18:04.125 [DEBUG] [Thread-131626] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T17:18:04.126 [DEBUG] [Thread-131626] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:18:04.126 [DEBUG] [Thread-131626] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:18:04.126 [DEBUG] [Thread-131626] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:18:04.126 [DEBUG] [Thread-131626] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:18:04.126 [DEBUG] [Thread-131626] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:18:04.126 [DEBUG] [Thread-131626] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:18:04.126 [DEBUG] [Thread-131626] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:18:04.126 [DEBUG] [Thread-131626] [transport.py] [_log()] client lang: <none>
2025-12-31T17:18:04.126 [DEBUG] [Thread-131626] [transport.py] [_log()] server lang: <none>
2025-12-31T17:18:04.126 [DEBUG] [Thread-131626] [transport.py] [_log()] kex follows: False
2025-12-31T17:18:04.126 [DEBUG] [Thread-131626] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:18:04.126 [DEBUG] [Thread-131626] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:18:04.126 [DEBUG] [Thread-131626] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:18:04.126 [DEBUG] [Thread-131626] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:18:04.126 [DEBUG] [Thread-131626] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:18:04.126 [DEBUG] [Thread-131626] [transport.py] [_log()] Compression: none
2025-12-31T17:18:04.126 [DEBUG] [Thread-131626] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:18:04.146 [DEBUG] [Thread-131626] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:18:04.146 [DEBUG] [Thread-131626] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:18:04.147 [DEBUG] [Thread-131626] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T17:18:04.147 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T17:18:04.148 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:18:04.149 [DEBUG] [Thread-131626] [transport.py] [_log()] userauth is OK
2025-12-31T17:18:04.149 [DEBUG] [Thread-131626] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:18:04.149 [DEBUG] [Thread-131626] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:18:04.149 [DEBUG] [Thread-131626] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T17:18:04.150 [DEBUG] [Thread-131626] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:18:04.172 [INFO] [Thread-131626] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:18:04.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:18:04.826 [DEBUG] [Thread-131626] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:18:04.826 [DEBUG] [Thread-131626] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:18:04.826 [DEBUG] [Thread-131626] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T17:18:04.868 [DEBUG] [Thread-131626] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:18:04.868 [DEBUG] [Thread-131626] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:18:04.872 [DEBUG] [Thread-131626] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:18:04.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:18:04.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T17:18:04.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T17:18:04.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T17:18:04.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:18:04.896 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T17:18:04.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:18:04.897 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:18:04.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T17:18:04.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.636946 -999.00  +24.40  40.52     22   +1.60 1 2 2 1 1   887    0 22.41 -32.47 ----- 43.6 40.5 296.2 45.0 26.7 -15.3 26.6 -15.1 26.4 -15.1 26.7 -13.9
2025-12-31T17:18:04.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T17:18:04.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T17:18:04.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.636946
2025-12-31T17:18:04.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T17:18:04.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T17:18:04.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T17:18:04.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T17:18:04.899 [DEBUG] [Thread-131626] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:18:04.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T17:18:04.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T17:17:48', tmtdew=26.82, humidity=16.63, cloud=0.0, wind=37.49, temperature=24.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T15:17:12.134', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T17:18:04.982 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T17:18:04.995 [DEBUG] [Thread-131629] [transport.py] [_log()] starting thread (client mode): 0xb6bba560
2025-12-31T17:18:04.995 [DEBUG] [Thread-131629] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:18:05.010 [DEBUG] [Thread-131629] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T17:18:05.011 [INFO] [Thread-131629] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T17:18:05.018 [DEBUG] [Thread-131629] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:18:05.018 [DEBUG] [Thread-131629] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T17:18:05.019 [DEBUG] [Thread-131629] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:18:05.019 [DEBUG] [Thread-131629] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:18:05.019 [DEBUG] [Thread-131629] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:18:05.019 [DEBUG] [Thread-131629] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:18:05.019 [DEBUG] [Thread-131629] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:18:05.019 [DEBUG] [Thread-131629] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:18:05.019 [DEBUG] [Thread-131629] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:18:05.019 [DEBUG] [Thread-131629] [transport.py] [_log()] client lang: <none>
2025-12-31T17:18:05.020 [DEBUG] [Thread-131629] [transport.py] [_log()] server lang: <none>
2025-12-31T17:18:05.020 [DEBUG] [Thread-131629] [transport.py] [_log()] kex follows: False
2025-12-31T17:18:05.020 [DEBUG] [Thread-131629] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:18:05.020 [DEBUG] [Thread-131629] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:18:05.020 [DEBUG] [Thread-131629] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:18:05.021 [DEBUG] [Thread-131629] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:18:05.021 [DEBUG] [Thread-131629] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:18:05.021 [DEBUG] [Thread-131629] [transport.py] [_log()] Compression: none
2025-12-31T17:18:05.021 [DEBUG] [Thread-131629] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:18:05.078 [DEBUG] [Thread-131629] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:18:05.078 [DEBUG] [Thread-131629] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:18:05.079 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T17:18:05.079 [DEBUG] [Thread-131629] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T17:18:05.080 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:18:05.133 [DEBUG] [Thread-131629] [transport.py] [_log()] userauth is OK
2025-12-31T17:18:05.134 [DEBUG] [Thread-131629] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:18:05.134 [DEBUG] [Thread-131629] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:18:05.134 [DEBUG] [Thread-131629] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T17:18:05.134 [DEBUG] [Thread-131629] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:18:05.154 [INFO] [Thread-131629] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:18:05.155 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T17:18:05.155 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:18:06.009 [DEBUG] [Thread-131629] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:18:06.010 [DEBUG] [Thread-131629] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:18:06.057 [DEBUG] [Thread-131629] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:18:06.057 [DEBUG] [Thread-131629] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:18:06.066 [DEBUG] [Thread-131629] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:18:06.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:18:06.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T17:18:06.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T17:18:06.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:18:06.094 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:18:06.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:18:06.103 [DEBUG] [Thread-131629] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:18:14.215 [DEBUG] [Thread-131631 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:18:23.143 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:18:23.144 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:18:27.051 [DEBUG] [Thread-131632 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:18:29.262 [DEBUG] [Thread-131633 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:18:36.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T17:18:36.101 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T17:18:36.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T17:18:36.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 17, 18, 20), 26.85, 16.61, 0.0, 38.61, 24.72, 0, 0, 0, 2, 0, 0),)
2025-12-31T17:18:36.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 17:18:20
2025-12-31T17:18:36.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T17:18:37.094 [DEBUG] [Thread-131634] [transport.py] [_log()] starting thread (client mode): 0xb9579cf0
2025-12-31T17:18:37.094 [DEBUG] [Thread-131634] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:18:37.114 [DEBUG] [Thread-131634] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T17:18:37.114 [INFO] [Thread-131634] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T17:18:37.117 [DEBUG] [Thread-131634] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:18:37.118 [DEBUG] [Thread-131634] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T17:18:37.118 [DEBUG] [Thread-131634] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:18:37.118 [DEBUG] [Thread-131634] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:18:37.118 [DEBUG] [Thread-131634] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:18:37.118 [DEBUG] [Thread-131634] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:18:37.118 [DEBUG] [Thread-131634] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:18:37.118 [DEBUG] [Thread-131634] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:18:37.118 [DEBUG] [Thread-131634] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:18:37.118 [DEBUG] [Thread-131634] [transport.py] [_log()] client lang: <none>
2025-12-31T17:18:37.118 [DEBUG] [Thread-131634] [transport.py] [_log()] server lang: <none>
2025-12-31T17:18:37.118 [DEBUG] [Thread-131634] [transport.py] [_log()] kex follows: False
2025-12-31T17:18:37.118 [DEBUG] [Thread-131634] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:18:37.118 [DEBUG] [Thread-131634] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:18:37.118 [DEBUG] [Thread-131634] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:18:37.118 [DEBUG] [Thread-131634] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:18:37.119 [DEBUG] [Thread-131634] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:18:37.119 [DEBUG] [Thread-131634] [transport.py] [_log()] Compression: none
2025-12-31T17:18:37.119 [DEBUG] [Thread-131634] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:18:37.137 [DEBUG] [Thread-131634] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:18:37.137 [DEBUG] [Thread-131634] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:18:37.138 [DEBUG] [Thread-131634] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T17:18:37.138 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T17:18:37.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:18:37.148 [DEBUG] [Thread-131634] [transport.py] [_log()] userauth is OK
2025-12-31T17:18:37.148 [DEBUG] [Thread-131634] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:18:37.148 [DEBUG] [Thread-131634] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:18:37.148 [DEBUG] [Thread-131634] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T17:18:37.148 [DEBUG] [Thread-131634] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:18:37.172 [INFO] [Thread-131634] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:18:37.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:18:37.896 [DEBUG] [Thread-131634] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:18:37.896 [DEBUG] [Thread-131634] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:18:37.897 [DEBUG] [Thread-131634] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T17:18:37.937 [DEBUG] [Thread-131634] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:18:37.937 [DEBUG] [Thread-131634] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:18:37.940 [DEBUG] [Thread-131634] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:18:37.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:18:37.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T17:18:37.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T17:18:37.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T17:18:37.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:18:37.965 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T17:18:37.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:18:37.965 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:18:37.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T17:18:37.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.637293 -999.00  +23.90  42.04     22   +1.40 1 2 2 1 1   887    0 22.25 -31.64 ----- 37.9 42.0 293.4 46.5 26.6 -15.7 26.6 -16.0 26.2 -15.0 26.7 -14.3
2025-12-31T17:18:37.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T17:18:37.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T17:18:37.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.637293
2025-12-31T17:18:37.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T17:18:37.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T17:18:37.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T17:18:37.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T17:18:37.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T17:18:37.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T17:18:20', tmtdew=26.85, humidity=16.61, cloud=0.0, wind=38.61, temperature=24.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T15:17:42.115', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T17:18:37.968 [DEBUG] [Thread-131634] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:18:38.052 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T17:18:38.065 [DEBUG] [Thread-131637] [transport.py] [_log()] starting thread (client mode): 0xb95d7f10
2025-12-31T17:18:38.065 [DEBUG] [Thread-131637] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:18:38.080 [DEBUG] [Thread-131637] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T17:18:38.080 [INFO] [Thread-131637] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T17:18:38.089 [DEBUG] [Thread-131637] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:18:38.089 [DEBUG] [Thread-131637] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T17:18:38.089 [DEBUG] [Thread-131637] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:18:38.089 [DEBUG] [Thread-131637] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:18:38.089 [DEBUG] [Thread-131637] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:18:38.089 [DEBUG] [Thread-131637] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:18:38.089 [DEBUG] [Thread-131637] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:18:38.089 [DEBUG] [Thread-131637] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:18:38.090 [DEBUG] [Thread-131637] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:18:38.090 [DEBUG] [Thread-131637] [transport.py] [_log()] client lang: <none>
2025-12-31T17:18:38.090 [DEBUG] [Thread-131637] [transport.py] [_log()] server lang: <none>
2025-12-31T17:18:38.090 [DEBUG] [Thread-131637] [transport.py] [_log()] kex follows: False
2025-12-31T17:18:38.090 [DEBUG] [Thread-131637] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:18:38.090 [DEBUG] [Thread-131637] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:18:38.090 [DEBUG] [Thread-131637] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:18:38.090 [DEBUG] [Thread-131637] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:18:38.090 [DEBUG] [Thread-131637] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:18:38.090 [DEBUG] [Thread-131637] [transport.py] [_log()] Compression: none
2025-12-31T17:18:38.090 [DEBUG] [Thread-131637] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:18:38.148 [DEBUG] [Thread-131637] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:18:38.149 [DEBUG] [Thread-131637] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:18:38.149 [DEBUG] [Thread-131637] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T17:18:38.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T17:18:38.150 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:18:38.205 [DEBUG] [Thread-131637] [transport.py] [_log()] userauth is OK
2025-12-31T17:18:38.206 [DEBUG] [Thread-131637] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:18:38.206 [DEBUG] [Thread-131637] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:18:38.206 [DEBUG] [Thread-131637] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T17:18:38.206 [DEBUG] [Thread-131637] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:18:38.225 [INFO] [Thread-131637] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:18:38.225 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T17:18:38.226 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:18:39.059 [DEBUG] [Thread-131637] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:18:39.060 [DEBUG] [Thread-131637] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:18:39.113 [DEBUG] [Thread-131637] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:18:39.113 [DEBUG] [Thread-131637] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:18:39.126 [DEBUG] [Thread-131637] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:18:39.137 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:18:39.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T17:18: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') -> 00000000
2025-12-31T17:18:39.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:18:39.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:18:39.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:18:39.173 [DEBUG] [Thread-131637] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:18:44.297 [DEBUG] [Thread-131639 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:18:59.338 [DEBUG] [Thread-131640 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:19:09.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T17:19:09.188 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T17:19:09.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-12-31T17:19:09.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 17, 18, 52), 26.49, 17.21, 0.0, 31.41, 24.42, 0, 0, 0, 2, 0, 0),)
2025-12-31T17:19:09.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 17:18:52
2025-12-31T17:19:10.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T17:19:10.163 [DEBUG] [Thread-131641] [transport.py] [_log()] starting thread (client mode): 0xb6ba2b60
2025-12-31T17:19:10.163 [DEBUG] [Thread-131641] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:19:10.184 [DEBUG] [Thread-131641] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T17:19:10.184 [INFO] [Thread-131641] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T17:19:10.185 [DEBUG] [Thread-131641] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:19:10.185 [DEBUG] [Thread-131641] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T17:19:10.185 [DEBUG] [Thread-131641] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:19:10.185 [DEBUG] [Thread-131641] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:19:10.185 [DEBUG] [Thread-131641] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:19:10.185 [DEBUG] [Thread-131641] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:19:10.185 [DEBUG] [Thread-131641] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:19:10.185 [DEBUG] [Thread-131641] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:19:10.185 [DEBUG] [Thread-131641] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:19:10.185 [DEBUG] [Thread-131641] [transport.py] [_log()] client lang: <none>
2025-12-31T17:19:10.186 [DEBUG] [Thread-131641] [transport.py] [_log()] server lang: <none>
2025-12-31T17:19:10.186 [DEBUG] [Thread-131641] [transport.py] [_log()] kex follows: False
2025-12-31T17:19:10.186 [DEBUG] [Thread-131641] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:19:10.186 [DEBUG] [Thread-131641] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:19:10.186 [DEBUG] [Thread-131641] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:19:10.186 [DEBUG] [Thread-131641] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:19:10.186 [DEBUG] [Thread-131641] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:19:10.186 [DEBUG] [Thread-131641] [transport.py] [_log()] Compression: none
2025-12-31T17:19:10.186 [DEBUG] [Thread-131641] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:19:10.205 [DEBUG] [Thread-131641] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:19:10.206 [DEBUG] [Thread-131641] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:19:10.206 [DEBUG] [Thread-131641] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T17:19:10.207 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T17:19:10.207 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:19:10.209 [DEBUG] [Thread-131641] [transport.py] [_log()] userauth is OK
2025-12-31T17:19:10.209 [DEBUG] [Thread-131641] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:19:10.209 [DEBUG] [Thread-131641] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:19:10.209 [DEBUG] [Thread-131641] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T17:19:10.209 [DEBUG] [Thread-131641] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:19:10.233 [INFO] [Thread-131641] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:19:10.234 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:19:10.896 [DEBUG] [Thread-131641] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:19:10.896 [DEBUG] [Thread-131641] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:19:10.896 [DEBUG] [Thread-131641] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T17:19:10.938 [DEBUG] [Thread-131641] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:19:10.938 [DEBUG] [Thread-131641] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:19:10.942 [DEBUG] [Thread-131641] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:19:10.955 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:19:10.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T17:19:10.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T17:19:10.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T17:19:10.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:19:10.968 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T17:19:10.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:19:10.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:19:10.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T17:19:10.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.637988 -999.00  +23.90  26.69     23   +1.50 1 2 1 1 1   887    0 21.56 -38.03 ----- 34.4 26.7 301.0 40.8 26.6 -15.6 26.5 -15.5 26.2 -14.4 26.6 -14.2
2025-12-31T17:19:10.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T17:19:10.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T17:19:10.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.637988
2025-12-31T17:19:10.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T17:19:10.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T17:19:10.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T17:19:10.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T17:19:10.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T17:19:10.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T17:18:52', tmtdew=26.49, humidity=17.21, cloud=0.0, wind=31.41, temperature=24.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T15:18:42.163', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T17:19:10.971 [DEBUG] [Thread-131641] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:19:11.054 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T17:19:11.067 [DEBUG] [Thread-131644] [transport.py] [_log()] starting thread (client mode): 0xb6bb0a30
2025-12-31T17:19:11.068 [DEBUG] [Thread-131644] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:19:11.083 [DEBUG] [Thread-131644] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T17:19:11.083 [INFO] [Thread-131644] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T17:19:11.090 [DEBUG] [Thread-131644] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:19:11.091 [DEBUG] [Thread-131644] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T17:19:11.091 [DEBUG] [Thread-131644] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:19:11.091 [DEBUG] [Thread-131644] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:19:11.091 [DEBUG] [Thread-131644] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:19:11.091 [DEBUG] [Thread-131644] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:19:11.091 [DEBUG] [Thread-131644] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:19:11.091 [DEBUG] [Thread-131644] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:19:11.091 [DEBUG] [Thread-131644] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:19:11.091 [DEBUG] [Thread-131644] [transport.py] [_log()] client lang: <none>
2025-12-31T17:19:11.091 [DEBUG] [Thread-131644] [transport.py] [_log()] server lang: <none>
2025-12-31T17:19:11.091 [DEBUG] [Thread-131644] [transport.py] [_log()] kex follows: False
2025-12-31T17:19:11.091 [DEBUG] [Thread-131644] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:19:11.091 [DEBUG] [Thread-131644] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:19:11.091 [DEBUG] [Thread-131644] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:19:11.092 [DEBUG] [Thread-131644] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:19:11.092 [DEBUG] [Thread-131644] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:19:11.092 [DEBUG] [Thread-131644] [transport.py] [_log()] Compression: none
2025-12-31T17:19:11.092 [DEBUG] [Thread-131644] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:19:11.150 [DEBUG] [Thread-131644] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:19:11.150 [DEBUG] [Thread-131644] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:19:11.151 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T17:19:11.151 [DEBUG] [Thread-131644] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T17:19:11.153 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:19:11.207 [DEBUG] [Thread-131644] [transport.py] [_log()] userauth is OK
2025-12-31T17:19:11.207 [DEBUG] [Thread-131644] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:19:11.207 [DEBUG] [Thread-131644] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:19:11.207 [DEBUG] [Thread-131644] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T17:19:11.207 [DEBUG] [Thread-131644] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:19:11.226 [INFO] [Thread-131644] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:19:11.227 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T17:19:11.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:19:12.077 [DEBUG] [Thread-131644] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:19:12.078 [DEBUG] [Thread-131644] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:19:12.126 [DEBUG] [Thread-131644] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:19:12.126 [DEBUG] [Thread-131644] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:19:12.138 [DEBUG] [Thread-131644] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:19:12.148 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:19:12.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T17:19:12.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T17:19:12.167 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:19:12.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:19:12.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:19:12.176 [DEBUG] [Thread-131644] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:19:14.372 [DEBUG] [Thread-131646 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:19:23.286 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:19:23.287 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:19:27.095 [DEBUG] [Thread-131647 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:19:29.431 [DEBUG] [Thread-131648 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:19:42.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T17:19:42.197 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T17:19:42.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T17:19:42.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 17, 19, 24), 26.5, 17.19, 0.0, 33.84, 24.37, 0, 0, 0, 2, 0, 0),)
2025-12-31T17:19:42.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 17:19:24
2025-12-31T17:19:43.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T17:19:43.179 [DEBUG] [Thread-131649] [transport.py] [_log()] starting thread (client mode): 0xb957b7f0
2025-12-31T17:19:43.179 [DEBUG] [Thread-131649] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:19:43.200 [DEBUG] [Thread-131649] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T17:19:43.200 [INFO] [Thread-131649] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T17:19:43.204 [DEBUG] [Thread-131649] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:19:43.204 [DEBUG] [Thread-131649] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T17:19:43.204 [DEBUG] [Thread-131649] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:19:43.204 [DEBUG] [Thread-131649] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:19:43.204 [DEBUG] [Thread-131649] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:19:43.204 [DEBUG] [Thread-131649] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:19:43.204 [DEBUG] [Thread-131649] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:19:43.204 [DEBUG] [Thread-131649] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:19:43.204 [DEBUG] [Thread-131649] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:19:43.204 [DEBUG] [Thread-131649] [transport.py] [_log()] client lang: <none>
2025-12-31T17:19:43.204 [DEBUG] [Thread-131649] [transport.py] [_log()] server lang: <none>
2025-12-31T17:19:43.204 [DEBUG] [Thread-131649] [transport.py] [_log()] kex follows: False
2025-12-31T17:19:43.204 [DEBUG] [Thread-131649] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:19:43.204 [DEBUG] [Thread-131649] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:19:43.204 [DEBUG] [Thread-131649] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:19:43.204 [DEBUG] [Thread-131649] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:19:43.204 [DEBUG] [Thread-131649] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:19:43.204 [DEBUG] [Thread-131649] [transport.py] [_log()] Compression: none
2025-12-31T17:19:43.204 [DEBUG] [Thread-131649] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:19:43.221 [DEBUG] [Thread-131649] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:19:43.222 [DEBUG] [Thread-131649] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:19:43.222 [DEBUG] [Thread-131649] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T17:19:43.222 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T17:19:43.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:19:43.225 [DEBUG] [Thread-131649] [transport.py] [_log()] userauth is OK
2025-12-31T17:19:43.225 [DEBUG] [Thread-131649] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:19:43.225 [DEBUG] [Thread-131649] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:19:43.225 [DEBUG] [Thread-131649] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T17:19:43.226 [DEBUG] [Thread-131649] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:19:43.239 [INFO] [Thread-131649] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:19:43.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:19:43.979 [DEBUG] [Thread-131649] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:19:43.979 [DEBUG] [Thread-131649] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:19:43.980 [DEBUG] [Thread-131649] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T17:19:44.020 [DEBUG] [Thread-131649] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:19:44.020 [DEBUG] [Thread-131649] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:19:44.023 [DEBUG] [Thread-131649] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:19:44.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:19:44.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T17:19:44.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T17:19:44.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T17:19:44.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:19:44.052 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T17:19:44.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:19:44.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:19:44.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T17:19:44.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.638335 -999.00  +23.70  29.56     23   +1.50 1 2 1 1 1   887    0 21.54 -40.70 ----- 29.7 29.6 295.8 39.7 26.6 -15.5 26.5 -15.6 26.2 -14.9 26.5 -14.1
2025-12-31T17:19:44.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T17:19:44.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T17:19:44.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.638335
2025-12-31T17:19:44.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T17:19:44.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T17:19:44.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T17:19:44.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T17:19:44.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T17:19:44.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T17:19:24', tmtdew=26.5, humidity=17.19, cloud=0.0, wind=33.84, temperature=24.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T15:19:12.144', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T17:19:44.055 [DEBUG] [Thread-131649] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:19:44.147 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T17:19:44.158 [DEBUG] [Thread-131652] [transport.py] [_log()] starting thread (client mode): 0xb6ba2a40
2025-12-31T17:19:44.158 [DEBUG] [Thread-131652] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:19:44.173 [DEBUG] [Thread-131652] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T17:19:44.173 [INFO] [Thread-131652] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T17:19:44.180 [DEBUG] [Thread-131652] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:19:44.181 [DEBUG] [Thread-131652] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T17:19:44.181 [DEBUG] [Thread-131652] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:19:44.181 [DEBUG] [Thread-131652] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:19:44.181 [DEBUG] [Thread-131652] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:19:44.181 [DEBUG] [Thread-131652] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:19:44.181 [DEBUG] [Thread-131652] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:19:44.181 [DEBUG] [Thread-131652] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:19:44.181 [DEBUG] [Thread-131652] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:19:44.181 [DEBUG] [Thread-131652] [transport.py] [_log()] client lang: <none>
2025-12-31T17:19:44.181 [DEBUG] [Thread-131652] [transport.py] [_log()] server lang: <none>
2025-12-31T17:19:44.181 [DEBUG] [Thread-131652] [transport.py] [_log()] kex follows: False
2025-12-31T17:19:44.181 [DEBUG] [Thread-131652] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:19:44.181 [DEBUG] [Thread-131652] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:19:44.182 [DEBUG] [Thread-131652] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:19:44.182 [DEBUG] [Thread-131652] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:19:44.182 [DEBUG] [Thread-131652] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:19:44.182 [DEBUG] [Thread-131652] [transport.py] [_log()] Compression: none
2025-12-31T17:19:44.182 [DEBUG] [Thread-131652] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:19:44.238 [DEBUG] [Thread-131652] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:19:44.239 [DEBUG] [Thread-131652] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:19:44.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T17:19:44.240 [DEBUG] [Thread-131652] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T17:19:44.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:19:44.294 [DEBUG] [Thread-131652] [transport.py] [_log()] userauth is OK
2025-12-31T17:19:44.295 [DEBUG] [Thread-131652] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:19:44.295 [DEBUG] [Thread-131652] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:19:44.295 [DEBUG] [Thread-131652] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T17:19:44.295 [DEBUG] [Thread-131652] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:19:44.314 [INFO] [Thread-131652] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:19:44.314 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T17:19:44.315 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:19:44.465 [DEBUG] [Thread-131654 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:19:45.150 [DEBUG] [Thread-131652] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:19:45.151 [DEBUG] [Thread-131652] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:19:45.199 [DEBUG] [Thread-131652] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:19:45.199 [DEBUG] [Thread-131652] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:19:45.208 [DEBUG] [Thread-131652] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:19:45.217 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:19:45.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T17:19:45.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T17:19:45.236 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:19:45.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:19:45.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:19:45.245 [DEBUG] [Thread-131652] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:19:59.517 [DEBUG] [Thread-131655 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:20:14.553 [DEBUG] [Thread-131656 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:20:15.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T17:20:15.267 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T17:20:15.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T17:20:16.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 17, 19, 56), 26.43, 17.29, 0.0, 29.96, 24.27, 0, 0, 0, 2, 0, 0),)
2025-12-31T17:20:16.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 17:19:56
2025-12-31T17:20:16.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T17:20:16.308 [DEBUG] [Thread-131657] [transport.py] [_log()] starting thread (client mode): 0xb9591330
2025-12-31T17:20:16.308 [DEBUG] [Thread-131657] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:20:16.329 [DEBUG] [Thread-131657] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T17:20:16.330 [INFO] [Thread-131657] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T17:20:16.331 [DEBUG] [Thread-131657] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:20:16.331 [DEBUG] [Thread-131657] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T17:20:16.331 [DEBUG] [Thread-131657] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:20:16.331 [DEBUG] [Thread-131657] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:20:16.331 [DEBUG] [Thread-131657] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:20:16.331 [DEBUG] [Thread-131657] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:20:16.331 [DEBUG] [Thread-131657] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:20:16.331 [DEBUG] [Thread-131657] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:20:16.331 [DEBUG] [Thread-131657] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:20:16.331 [DEBUG] [Thread-131657] [transport.py] [_log()] client lang: <none>
2025-12-31T17:20:16.331 [DEBUG] [Thread-131657] [transport.py] [_log()] server lang: <none>
2025-12-31T17:20:16.331 [DEBUG] [Thread-131657] [transport.py] [_log()] kex follows: False
2025-12-31T17:20:16.331 [DEBUG] [Thread-131657] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:20:16.331 [DEBUG] [Thread-131657] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:20:16.331 [DEBUG] [Thread-131657] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:20:16.331 [DEBUG] [Thread-131657] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:20:16.332 [DEBUG] [Thread-131657] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:20:16.332 [DEBUG] [Thread-131657] [transport.py] [_log()] Compression: none
2025-12-31T17:20:16.332 [DEBUG] [Thread-131657] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:20:16.341 [DEBUG] [Thread-131657] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:20:16.341 [DEBUG] [Thread-131657] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:20:16.342 [DEBUG] [Thread-131657] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T17:20:16.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T17:20:16.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:20:16.343 [DEBUG] [Thread-131657] [transport.py] [_log()] userauth is OK
2025-12-31T17:20:16.343 [DEBUG] [Thread-131657] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:20:16.343 [DEBUG] [Thread-131657] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:20:16.343 [DEBUG] [Thread-131657] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T17:20:16.343 [DEBUG] [Thread-131657] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:20:16.360 [INFO] [Thread-131657] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:20:16.360 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:20:18.642 [DEBUG] [Thread-131657] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:20:18.642 [DEBUG] [Thread-131657] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:20:18.642 [DEBUG] [Thread-131657] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T17:20:18.683 [DEBUG] [Thread-131657] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:20:18.683 [DEBUG] [Thread-131657] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:20:18.685 [DEBUG] [Thread-131657] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:20:18.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:20:18.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T17:20:18.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T17:20:18.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T17:20:18.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:20:18.780 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T17:20:18.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:20:18.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:20:18.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T17:20:18.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.638682 -999.00  +23.70  29.04     23   +1.40 1 2 1 1 1   887    0 21.69 -45.70 ----- 22.1 29.0 291.0 33.1 26.5 -15.3 26.5 -15.5 26.2 -14.3 26.6 -14.2
2025-12-31T17:20:18.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T17:20:18.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T17:20:18.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.638682
2025-12-31T17:20:18.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T17:20:18.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T17:20:18.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T17:20:18.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T17:20:18.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T17:20:18.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T17:19:56', tmtdew=26.43, humidity=17.29, cloud=0.0, wind=29.96, temperature=24.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T15:19:42.125', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T17:20:18.782 [DEBUG] [Thread-131657] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:20:18.855 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T17:20:23.426 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:20:23.427 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:20:27.139 [DEBUG] [Thread-131660 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:20:29.581 [DEBUG] [Thread-131661 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:20:44.624 [DEBUG] [Thread-131662 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:20:59.655 [DEBUG] [Thread-131663 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:21:14.692 [DEBUG] [Thread-131664 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:21:23.566 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:21:23.567 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:21:27.191 [DEBUG] [Thread-131665 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:21:29.728 [DEBUG] [Thread-131666 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:21:44.763 [DEBUG] [Thread-131667 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:21:59.803 [DEBUG] [Thread-131668 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:22:14.838 [DEBUG] [Thread-131669 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:22:23.708 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:22:23.709 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:22:27.243 [DEBUG] [Thread-131670 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:22:29.872 [DEBUG] [Thread-131671 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:22:32.277 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-12-31T17:22:44.909 [DEBUG] [Thread-131672 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:22:59.942 [DEBUG] [Thread-131673 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:23:02.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T17:23:02.308 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T17:23: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-12-31T17:23:03.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 17, 22, 36), 26.52, 17.28, 0.0, 32.85, 24.07, 0, 0, 0, 2, 0, 0),)
2025-12-31T17:23:03.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 17:22:36
2025-12-31T17:23:03.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T17:23:03.312 [DEBUG] [Thread-131674] [transport.py] [_log()] starting thread (client mode): 0xb9592410
2025-12-31T17:23:03.312 [DEBUG] [Thread-131674] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:23:03.333 [DEBUG] [Thread-131674] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T17:23:03.333 [INFO] [Thread-131674] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T17:23:03.336 [DEBUG] [Thread-131674] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:23:03.336 [DEBUG] [Thread-131674] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T17:23:03.337 [DEBUG] [Thread-131674] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:23:03.337 [DEBUG] [Thread-131674] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:23:03.337 [DEBUG] [Thread-131674] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:23:03.337 [DEBUG] [Thread-131674] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:23:03.337 [DEBUG] [Thread-131674] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:23:03.337 [DEBUG] [Thread-131674] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:23:03.337 [DEBUG] [Thread-131674] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:23:03.337 [DEBUG] [Thread-131674] [transport.py] [_log()] client lang: <none>
2025-12-31T17:23:03.337 [DEBUG] [Thread-131674] [transport.py] [_log()] server lang: <none>
2025-12-31T17:23:03.337 [DEBUG] [Thread-131674] [transport.py] [_log()] kex follows: False
2025-12-31T17:23:03.337 [DEBUG] [Thread-131674] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:23:03.337 [DEBUG] [Thread-131674] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:23:03.337 [DEBUG] [Thread-131674] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:23:03.337 [DEBUG] [Thread-131674] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:23:03.337 [DEBUG] [Thread-131674] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:23:03.337 [DEBUG] [Thread-131674] [transport.py] [_log()] Compression: none
2025-12-31T17:23:03.337 [DEBUG] [Thread-131674] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:23:03.355 [DEBUG] [Thread-131674] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:23:03.355 [DEBUG] [Thread-131674] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:23:03.355 [DEBUG] [Thread-131674] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T17:23:03.356 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T17:23:03.356 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:23:03.357 [DEBUG] [Thread-131674] [transport.py] [_log()] userauth is OK
2025-12-31T17:23:03.357 [DEBUG] [Thread-131674] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:23:03.358 [DEBUG] [Thread-131674] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:23:03.358 [DEBUG] [Thread-131674] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T17:23:03.358 [DEBUG] [Thread-131674] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:23:03.379 [INFO] [Thread-131674] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:23:03.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:23:04.031 [DEBUG] [Thread-131674] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:23:04.031 [DEBUG] [Thread-131674] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:23:04.032 [DEBUG] [Thread-131674] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T17:23:04.073 [DEBUG] [Thread-131674] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:23:04.073 [DEBUG] [Thread-131674] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:23:04.075 [DEBUG] [Thread-131674] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:23:04.087 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:23:04.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T17:23:04.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T17:23:04.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T17:23:04.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:23:04.097 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T17:23:04.097 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:23:04.097 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:23:04.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T17:23:04.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.640418 -999.00  +24.00  33.54     22   +1.40 1 2 2 1 1   887    0 21.08 -59.27 ----- 28.2 33.5 295.4 40.5 26.6 -15.8 26.4 -16.1 26.1 -15.9 26.5 -14.7
2025-12-31T17:23:04.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T17:23:04.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T17:23:04.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.640418
2025-12-31T17:23:04.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T17:23:04.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T17:23:04.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T17:23:04.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T17:23:04.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T17:23:04.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T17:22:36', tmtdew=26.52, humidity=17.28, cloud=0.0, wind=32.85, temperature=24.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T15:22:12.115', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T17:23:04.099 [DEBUG] [Thread-131674] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:23:04.184 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T17:23:04.196 [DEBUG] [Thread-131677] [transport.py] [_log()] starting thread (client mode): 0xb6bbbfd0
2025-12-31T17:23:04.196 [DEBUG] [Thread-131677] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:23:04.210 [DEBUG] [Thread-131677] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T17:23:04.210 [INFO] [Thread-131677] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T17:23:04.217 [DEBUG] [Thread-131677] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:23:04.217 [DEBUG] [Thread-131677] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T17:23:04.217 [DEBUG] [Thread-131677] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:23:04.218 [DEBUG] [Thread-131677] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:23:04.218 [DEBUG] [Thread-131677] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:23:04.218 [DEBUG] [Thread-131677] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:23:04.218 [DEBUG] [Thread-131677] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:23:04.218 [DEBUG] [Thread-131677] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:23:04.218 [DEBUG] [Thread-131677] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:23:04.218 [DEBUG] [Thread-131677] [transport.py] [_log()] client lang: <none>
2025-12-31T17:23:04.218 [DEBUG] [Thread-131677] [transport.py] [_log()] server lang: <none>
2025-12-31T17:23:04.218 [DEBUG] [Thread-131677] [transport.py] [_log()] kex follows: False
2025-12-31T17:23:04.218 [DEBUG] [Thread-131677] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:23:04.218 [DEBUG] [Thread-131677] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:23:04.218 [DEBUG] [Thread-131677] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:23:04.218 [DEBUG] [Thread-131677] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:23:04.218 [DEBUG] [Thread-131677] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:23:04.218 [DEBUG] [Thread-131677] [transport.py] [_log()] Compression: none
2025-12-31T17:23:04.218 [DEBUG] [Thread-131677] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:23:04.276 [DEBUG] [Thread-131677] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:23:04.276 [DEBUG] [Thread-131677] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:23:04.277 [DEBUG] [Thread-131677] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T17:23:04.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T17:23:04.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:23:04.332 [DEBUG] [Thread-131677] [transport.py] [_log()] userauth is OK
2025-12-31T17:23:04.332 [DEBUG] [Thread-131677] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:23:04.332 [DEBUG] [Thread-131677] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:23:04.332 [DEBUG] [Thread-131677] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T17:23:04.333 [DEBUG] [Thread-131677] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:23:04.351 [INFO] [Thread-131677] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:23:04.351 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T17:23:04.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:23:05.182 [DEBUG] [Thread-131677] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:23:05.182 [DEBUG] [Thread-131677] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:23:05.231 [DEBUG] [Thread-131677] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:23:05.231 [DEBUG] [Thread-131677] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:23:05.240 [DEBUG] [Thread-131677] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:23:05.248 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:23:05.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T17:23:05.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T17:23:05.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:23:05.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:23:05.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:23:05.273 [DEBUG] [Thread-131677] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:23:14.979 [DEBUG] [Thread-131679 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:23:23.850 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:23:23.851 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:23:27.276 [DEBUG] [Thread-131680 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:23:30.032 [DEBUG] [Thread-131681 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:23:35.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T17:23:35.296 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T17:23:35.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T17:23:36.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 17, 23, 9), 26.42, 17.39, 0.0, 28.87, 24.06, 0, 0, 0, 2, 0, 0),)
2025-12-31T17:23:36.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 17:23:09
2025-12-31T17:23:36.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T17:23:36.288 [DEBUG] [Thread-131682] [transport.py] [_log()] starting thread (client mode): 0xb9578a00
2025-12-31T17:23:36.288 [DEBUG] [Thread-131682] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:23:36.308 [DEBUG] [Thread-131682] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T17:23:36.308 [INFO] [Thread-131682] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T17:23:36.312 [DEBUG] [Thread-131682] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:23:36.312 [DEBUG] [Thread-131682] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T17:23:36.312 [DEBUG] [Thread-131682] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:23:36.312 [DEBUG] [Thread-131682] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:23:36.312 [DEBUG] [Thread-131682] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:23:36.312 [DEBUG] [Thread-131682] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:23:36.312 [DEBUG] [Thread-131682] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:23:36.312 [DEBUG] [Thread-131682] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:23:36.312 [DEBUG] [Thread-131682] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:23:36.312 [DEBUG] [Thread-131682] [transport.py] [_log()] client lang: <none>
2025-12-31T17:23:36.312 [DEBUG] [Thread-131682] [transport.py] [_log()] server lang: <none>
2025-12-31T17:23:36.312 [DEBUG] [Thread-131682] [transport.py] [_log()] kex follows: False
2025-12-31T17:23:36.312 [DEBUG] [Thread-131682] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:23:36.312 [DEBUG] [Thread-131682] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:23:36.313 [DEBUG] [Thread-131682] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:23:36.313 [DEBUG] [Thread-131682] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:23:36.313 [DEBUG] [Thread-131682] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:23:36.313 [DEBUG] [Thread-131682] [transport.py] [_log()] Compression: none
2025-12-31T17:23:36.313 [DEBUG] [Thread-131682] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:23:36.329 [DEBUG] [Thread-131682] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:23:36.329 [DEBUG] [Thread-131682] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:23:36.330 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T17:23:36.330 [DEBUG] [Thread-131682] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T17:23:36.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:23:36.332 [DEBUG] [Thread-131682] [transport.py] [_log()] userauth is OK
2025-12-31T17:23:36.332 [DEBUG] [Thread-131682] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:23:36.332 [DEBUG] [Thread-131682] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:23:36.332 [DEBUG] [Thread-131682] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T17:23:36.332 [DEBUG] [Thread-131682] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:23:36.357 [INFO] [Thread-131682] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:23:36.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:23:37.120 [DEBUG] [Thread-131682] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:23:37.120 [DEBUG] [Thread-131682] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:23:37.121 [DEBUG] [Thread-131682] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T17:23:37.161 [DEBUG] [Thread-131682] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:23:37.161 [DEBUG] [Thread-131682] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:23:37.164 [DEBUG] [Thread-131682] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:23:37.176 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:23:37.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T17:23:37.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T17:23:37.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T17:23:37.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:23:37.190 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T17:23:37.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:23:37.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:23:37.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T17:23:37.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.640766 -999.00  +24.10  26.34     22   +1.40 1 2 1 1 1   887    0 21.28 -57.72 ----- 27.2 26.3 307.6 33.3 26.5 -15.8 26.4 -16.1 26.2 -15.1 26.4 -14.8
2025-12-31T17:23:37.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T17:23:37.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T17:23:37.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.640766
2025-12-31T17:23:37.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T17:23:37.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T17:23:37.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T17:23:37.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T17:23:37.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T17:23:37.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T17:23:09', tmtdew=26.42, humidity=17.39, cloud=0.0, wind=28.87, temperature=24.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T15:22:42.182', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T17:23:37.193 [DEBUG] [Thread-131682] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:23:37.277 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T17:23:37.289 [DEBUG] [Thread-131685] [transport.py] [_log()] starting thread (client mode): 0xb95786d0
2025-12-31T17:23:37.290 [DEBUG] [Thread-131685] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:23:37.304 [DEBUG] [Thread-131685] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T17:23:37.304 [INFO] [Thread-131685] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T17:23:37.311 [DEBUG] [Thread-131685] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:23:37.311 [DEBUG] [Thread-131685] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T17:23:37.311 [DEBUG] [Thread-131685] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:23:37.311 [DEBUG] [Thread-131685] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:23:37.311 [DEBUG] [Thread-131685] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:23:37.311 [DEBUG] [Thread-131685] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:23:37.311 [DEBUG] [Thread-131685] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:23:37.311 [DEBUG] [Thread-131685] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:23:37.311 [DEBUG] [Thread-131685] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:23:37.311 [DEBUG] [Thread-131685] [transport.py] [_log()] client lang: <none>
2025-12-31T17:23:37.311 [DEBUG] [Thread-131685] [transport.py] [_log()] server lang: <none>
2025-12-31T17:23:37.311 [DEBUG] [Thread-131685] [transport.py] [_log()] kex follows: False
2025-12-31T17:23:37.311 [DEBUG] [Thread-131685] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:23:37.311 [DEBUG] [Thread-131685] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:23:37.312 [DEBUG] [Thread-131685] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:23:37.312 [DEBUG] [Thread-131685] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:23:37.312 [DEBUG] [Thread-131685] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:23:37.312 [DEBUG] [Thread-131685] [transport.py] [_log()] Compression: none
2025-12-31T17:23:37.312 [DEBUG] [Thread-131685] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:23:37.368 [DEBUG] [Thread-131685] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:23:37.368 [DEBUG] [Thread-131685] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:23:37.368 [DEBUG] [Thread-131685] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T17:23:37.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T17:23:37.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:23:37.424 [DEBUG] [Thread-131685] [transport.py] [_log()] userauth is OK
2025-12-31T17:23:37.424 [DEBUG] [Thread-131685] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:23:37.425 [DEBUG] [Thread-131685] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:23:37.425 [DEBUG] [Thread-131685] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T17:23:37.425 [DEBUG] [Thread-131685] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:23:37.444 [INFO] [Thread-131685] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:23:37.444 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T17:23:37.445 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:23:38.261 [DEBUG] [Thread-131685] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:23:38.261 [DEBUG] [Thread-131685] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:23:38.309 [DEBUG] [Thread-131685] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:23:38.309 [DEBUG] [Thread-131685] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:23:38.319 [DEBUG] [Thread-131685] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:23:38.328 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:23:38.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T17:23:38.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T17:23:38.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:23:38.346 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:23:38.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:23:38.355 [DEBUG] [Thread-131685] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:23:45.059 [DEBUG] [Thread-131687 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:24:00.119 [DEBUG] [Thread-131688 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:24:08.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T17:24:08.378 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T17:24:08.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-12-31T17:24:09.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 17, 23, 41), 26.28, 17.39, 0.0, 30.75, 24.04, 0, 0, 0, 2, 0, 0),)
2025-12-31T17:24:09.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 17:23:41
2025-12-31T17:24:09.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T17:24:09.406 [DEBUG] [Thread-131689] [transport.py] [_log()] starting thread (client mode): 0xb95903d0
2025-12-31T17:24:09.406 [DEBUG] [Thread-131689] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:24:09.425 [DEBUG] [Thread-131689] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T17:24:09.425 [INFO] [Thread-131689] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T17:24:09.428 [DEBUG] [Thread-131689] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:24:09.428 [DEBUG] [Thread-131689] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T17:24:09.429 [DEBUG] [Thread-131689] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:24:09.429 [DEBUG] [Thread-131689] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:24:09.429 [DEBUG] [Thread-131689] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:24:09.429 [DEBUG] [Thread-131689] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:24:09.429 [DEBUG] [Thread-131689] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:24:09.429 [DEBUG] [Thread-131689] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:24:09.429 [DEBUG] [Thread-131689] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:24:09.429 [DEBUG] [Thread-131689] [transport.py] [_log()] client lang: <none>
2025-12-31T17:24:09.429 [DEBUG] [Thread-131689] [transport.py] [_log()] server lang: <none>
2025-12-31T17:24:09.429 [DEBUG] [Thread-131689] [transport.py] [_log()] kex follows: False
2025-12-31T17:24:09.429 [DEBUG] [Thread-131689] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:24:09.429 [DEBUG] [Thread-131689] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:24:09.429 [DEBUG] [Thread-131689] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:24:09.429 [DEBUG] [Thread-131689] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:24:09.429 [DEBUG] [Thread-131689] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:24:09.429 [DEBUG] [Thread-131689] [transport.py] [_log()] Compression: none
2025-12-31T17:24:09.429 [DEBUG] [Thread-131689] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:24:09.445 [DEBUG] [Thread-131689] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:24:09.445 [DEBUG] [Thread-131689] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:24:09.445 [DEBUG] [Thread-131689] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T17:24:09.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T17:24:09.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:24:09.446 [DEBUG] [Thread-131689] [transport.py] [_log()] userauth is OK
2025-12-31T17:24:09.446 [DEBUG] [Thread-131689] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:24:09.446 [DEBUG] [Thread-131689] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:24:09.446 [DEBUG] [Thread-131689] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T17:24:09.446 [DEBUG] [Thread-131689] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:24:09.456 [INFO] [Thread-131689] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:24:09.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:24:10.100 [DEBUG] [Thread-131689] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:24:10.100 [DEBUG] [Thread-131689] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:24:10.100 [DEBUG] [Thread-131689] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T17:24:10.141 [DEBUG] [Thread-131689] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:24:10.142 [DEBUG] [Thread-131689] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:24:10.144 [DEBUG] [Thread-131689] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:24:10.155 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:24:10.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T17:24:10.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T17:24:10.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T17:24:10.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:24:10.161 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T17:24:10.161 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:24:10.161 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:24:10.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T17:24:10.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.641460 -999.00  +24.00  33.54     22   +1.50 1 2 2 1 1   887    0 21.55 -56.53 ----- 28.9 33.5 293.8 39.5 26.6 -16.6 26.4 -16.4 26.1 -16.3 26.5 -14.7
2025-12-31T17:24:10.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T17:24:10.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T17:24:10.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.641460
2025-12-31T17:24:10.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T17:24:10.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T17:24:10.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T17:24:10.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T17:24:10.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T17:24:10.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T17:23:41', tmtdew=26.28, humidity=17.39, cloud=0.0, wind=30.75, temperature=24.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T15:23:42.144', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T17:24:10.162 [DEBUG] [Thread-131689] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:24:10.236 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T17:24:10.249 [DEBUG] [Thread-131692] [transport.py] [_log()] starting thread (client mode): 0xb17473a0
2025-12-31T17:24:10.249 [DEBUG] [Thread-131692] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:24:10.263 [DEBUG] [Thread-131692] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T17:24:10.263 [INFO] [Thread-131692] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T17:24:10.271 [DEBUG] [Thread-131692] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:24:10.271 [DEBUG] [Thread-131692] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T17:24:10.271 [DEBUG] [Thread-131692] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:24:10.271 [DEBUG] [Thread-131692] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:24:10.271 [DEBUG] [Thread-131692] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:24:10.271 [DEBUG] [Thread-131692] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:24:10.271 [DEBUG] [Thread-131692] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:24:10.271 [DEBUG] [Thread-131692] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:24:10.271 [DEBUG] [Thread-131692] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:24:10.271 [DEBUG] [Thread-131692] [transport.py] [_log()] client lang: <none>
2025-12-31T17:24:10.271 [DEBUG] [Thread-131692] [transport.py] [_log()] server lang: <none>
2025-12-31T17:24:10.271 [DEBUG] [Thread-131692] [transport.py] [_log()] kex follows: False
2025-12-31T17:24:10.271 [DEBUG] [Thread-131692] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:24:10.271 [DEBUG] [Thread-131692] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:24:10.272 [DEBUG] [Thread-131692] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:24:10.272 [DEBUG] [Thread-131692] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:24:10.272 [DEBUG] [Thread-131692] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:24:10.272 [DEBUG] [Thread-131692] [transport.py] [_log()] Compression: none
2025-12-31T17:24:10.272 [DEBUG] [Thread-131692] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:24:10.327 [DEBUG] [Thread-131692] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:24:10.328 [DEBUG] [Thread-131692] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:24:10.328 [DEBUG] [Thread-131692] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T17:24:10.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T17:24:10.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:24:10.384 [DEBUG] [Thread-131692] [transport.py] [_log()] userauth is OK
2025-12-31T17:24:10.385 [DEBUG] [Thread-131692] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:24:10.385 [DEBUG] [Thread-131692] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:24:10.385 [DEBUG] [Thread-131692] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T17:24:10.385 [DEBUG] [Thread-131692] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:24:10.401 [INFO] [Thread-131692] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:24:10.401 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T17:24:10.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:24:11.247 [DEBUG] [Thread-131692] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:24:11.247 [DEBUG] [Thread-131692] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:24:11.294 [DEBUG] [Thread-131692] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:24:11.294 [DEBUG] [Thread-131692] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:24:11.302 [DEBUG] [Thread-131692] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:24:11.310 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:24: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')
2025-12-31T17:24:11.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T17:24:11.326 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:24:11.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:24:11.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:24:11.334 [DEBUG] [Thread-131692] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:24:15.151 [DEBUG] [Thread-131694 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:24:23.989 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:24:23.990 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:24:27.331 [DEBUG] [Thread-131695 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:24:30.194 [DEBUG] [Thread-131696 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:24:41.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T17:24:41.357 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T17:24:41.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T17:24:42.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 17, 24, 13), 26.33, 17.33, 0.0, 32.43, 24.04, 0, 0, 0, 2, 0, 0),)
2025-12-31T17:24:42.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 17:24:13
2025-12-31T17:24:42.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T17:24:42.341 [DEBUG] [Thread-131697] [transport.py] [_log()] starting thread (client mode): 0xb9591d20
2025-12-31T17:24:42.341 [DEBUG] [Thread-131697] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:24:42.361 [DEBUG] [Thread-131697] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T17:24:42.361 [INFO] [Thread-131697] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T17:24:42.364 [DEBUG] [Thread-131697] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:24:42.364 [DEBUG] [Thread-131697] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T17:24:42.364 [DEBUG] [Thread-131697] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:24:42.364 [DEBUG] [Thread-131697] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:24:42.364 [DEBUG] [Thread-131697] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:24:42.365 [DEBUG] [Thread-131697] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:24:42.365 [DEBUG] [Thread-131697] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:24:42.365 [DEBUG] [Thread-131697] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:24:42.365 [DEBUG] [Thread-131697] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:24:42.365 [DEBUG] [Thread-131697] [transport.py] [_log()] client lang: <none>
2025-12-31T17:24:42.365 [DEBUG] [Thread-131697] [transport.py] [_log()] server lang: <none>
2025-12-31T17:24:42.365 [DEBUG] [Thread-131697] [transport.py] [_log()] kex follows: False
2025-12-31T17:24:42.365 [DEBUG] [Thread-131697] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:24:42.365 [DEBUG] [Thread-131697] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:24:42.365 [DEBUG] [Thread-131697] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:24:42.365 [DEBUG] [Thread-131697] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:24:42.365 [DEBUG] [Thread-131697] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:24:42.365 [DEBUG] [Thread-131697] [transport.py] [_log()] Compression: none
2025-12-31T17:24:42.365 [DEBUG] [Thread-131697] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:24:42.382 [DEBUG] [Thread-131697] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:24:42.383 [DEBUG] [Thread-131697] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:24:42.383 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T17:24:42.384 [DEBUG] [Thread-131697] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T17:24:42.385 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:24:42.386 [DEBUG] [Thread-131697] [transport.py] [_log()] userauth is OK
2025-12-31T17:24:42.386 [DEBUG] [Thread-131697] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:24:42.386 [DEBUG] [Thread-131697] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:24:42.386 [DEBUG] [Thread-131697] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T17:24:42.386 [DEBUG] [Thread-131697] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:24:42.412 [INFO] [Thread-131697] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:24:42.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:24:43.164 [DEBUG] [Thread-131697] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:24:43.164 [DEBUG] [Thread-131697] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:24:43.164 [DEBUG] [Thread-131697] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T17:24:43.205 [DEBUG] [Thread-131697] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:24:43.205 [DEBUG] [Thread-131697] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:24:43.208 [DEBUG] [Thread-131697] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:24:43.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:24:43.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T17:24:43.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T17:24:43.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T17:24:43.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:24:43.232 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T17:24:43.232 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:24:43.232 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:24:43.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T17:24:43.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.641807 -999.00  +23.70  29.94     23   +1.40 1 2 1 1 1   887    0 21.16 -55.85 ----- 33.7 29.9 305.2 41.0 26.4 -16.8 26.4 -16.7 26.1 -16.4 26.5 -15.2
2025-12-31T17:24:43.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T17:24:43.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T17:24:43.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.641807
2025-12-31T17:24:43.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T17:24:43.234 [DEBUG] [Thread-131697] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:24:43.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T17:24:43.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T17:24:43.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T17:24:43.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T17:24:43.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T17:24:13', tmtdew=26.33, humidity=17.33, cloud=0.0, wind=32.43, temperature=24.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T15:24:12.125', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T17:24:43.318 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T17:24:43.330 [DEBUG] [Thread-131700] [transport.py] [_log()] starting thread (client mode): 0xb95901f0
2025-12-31T17:24:43.330 [DEBUG] [Thread-131700] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:24:43.344 [DEBUG] [Thread-131700] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T17:24:43.344 [INFO] [Thread-131700] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T17:24:43.351 [DEBUG] [Thread-131700] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:24:43.351 [DEBUG] [Thread-131700] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T17:24:43.352 [DEBUG] [Thread-131700] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:24:43.352 [DEBUG] [Thread-131700] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:24:43.352 [DEBUG] [Thread-131700] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:24:43.352 [DEBUG] [Thread-131700] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:24:43.352 [DEBUG] [Thread-131700] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:24:43.352 [DEBUG] [Thread-131700] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:24:43.352 [DEBUG] [Thread-131700] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:24:43.352 [DEBUG] [Thread-131700] [transport.py] [_log()] client lang: <none>
2025-12-31T17:24:43.352 [DEBUG] [Thread-131700] [transport.py] [_log()] server lang: <none>
2025-12-31T17:24:43.352 [DEBUG] [Thread-131700] [transport.py] [_log()] kex follows: False
2025-12-31T17:24:43.352 [DEBUG] [Thread-131700] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:24:43.352 [DEBUG] [Thread-131700] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:24:43.352 [DEBUG] [Thread-131700] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:24:43.352 [DEBUG] [Thread-131700] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:24:43.352 [DEBUG] [Thread-131700] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:24:43.352 [DEBUG] [Thread-131700] [transport.py] [_log()] Compression: none
2025-12-31T17:24:43.352 [DEBUG] [Thread-131700] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:24:43.409 [DEBUG] [Thread-131700] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:24:43.410 [DEBUG] [Thread-131700] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:24:43.411 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T17:24:43.411 [DEBUG] [Thread-131700] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T17:24:43.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:24:43.465 [DEBUG] [Thread-131700] [transport.py] [_log()] userauth is OK
2025-12-31T17:24:43.466 [DEBUG] [Thread-131700] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:24:43.466 [DEBUG] [Thread-131700] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:24:43.466 [DEBUG] [Thread-131700] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T17:24:43.466 [DEBUG] [Thread-131700] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:24:43.490 [INFO] [Thread-131700] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:24:43.490 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T17:24:43.493 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:24:44.299 [DEBUG] [Thread-131700] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:24:44.300 [DEBUG] [Thread-131700] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:24:44.347 [DEBUG] [Thread-131700] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:24:44.347 [DEBUG] [Thread-131700] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:24:44.356 [DEBUG] [Thread-131700] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:24:44.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:24:44.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T17:24:44.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T17:24:44.382 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:24:44.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:24:44.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:24:44.391 [DEBUG] [Thread-131700] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:24:45.231 [DEBUG] [Thread-131702 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:25:00.278 [DEBUG] [Thread-131703 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:25:14.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T17:25:14.404 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T17:25:14.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T17:25:15.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 17, 24, 45), 26.45, 17.38, 0.0, 28.57, 24.26, 0, 0, 0, 2, 0, 0),)
2025-12-31T17:25:15.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 17:24:45
2025-12-31T17:25:15.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T17:25:15.315 [DEBUG] [Thread-131704 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:25:15.398 [DEBUG] [Thread-131705] [transport.py] [_log()] starting thread (client mode): 0xb1746860
2025-12-31T17:25:15.398 [DEBUG] [Thread-131705] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:25:15.418 [DEBUG] [Thread-131705] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T17:25:15.418 [INFO] [Thread-131705] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T17:25:15.421 [DEBUG] [Thread-131705] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:25:15.421 [DEBUG] [Thread-131705] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T17:25:15.421 [DEBUG] [Thread-131705] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:25:15.421 [DEBUG] [Thread-131705] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:25:15.421 [DEBUG] [Thread-131705] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:25:15.421 [DEBUG] [Thread-131705] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:25:15.421 [DEBUG] [Thread-131705] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:25:15.421 [DEBUG] [Thread-131705] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:25:15.421 [DEBUG] [Thread-131705] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:25:15.421 [DEBUG] [Thread-131705] [transport.py] [_log()] client lang: <none>
2025-12-31T17:25:15.421 [DEBUG] [Thread-131705] [transport.py] [_log()] server lang: <none>
2025-12-31T17:25:15.421 [DEBUG] [Thread-131705] [transport.py] [_log()] kex follows: False
2025-12-31T17:25:15.421 [DEBUG] [Thread-131705] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:25:15.421 [DEBUG] [Thread-131705] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:25:15.421 [DEBUG] [Thread-131705] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:25:15.421 [DEBUG] [Thread-131705] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:25:15.421 [DEBUG] [Thread-131705] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:25:15.421 [DEBUG] [Thread-131705] [transport.py] [_log()] Compression: none
2025-12-31T17:25:15.421 [DEBUG] [Thread-131705] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:25:15.438 [DEBUG] [Thread-131705] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:25:15.438 [DEBUG] [Thread-131705] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:25:15.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T17:25:15.439 [DEBUG] [Thread-131705] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T17:25:15.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:25:15.440 [DEBUG] [Thread-131705] [transport.py] [_log()] userauth is OK
2025-12-31T17:25:15.440 [DEBUG] [Thread-131705] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:25:15.440 [DEBUG] [Thread-131705] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:25:15.440 [DEBUG] [Thread-131705] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T17:25:15.440 [DEBUG] [Thread-131705] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:25:15.459 [INFO] [Thread-131705] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:25:15.460 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:25:17.936 [DEBUG] [Thread-131705] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:25:17.936 [DEBUG] [Thread-131705] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:25:17.937 [DEBUG] [Thread-131705] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T17:25:17.977 [DEBUG] [Thread-131705] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:25:17.977 [DEBUG] [Thread-131705] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:25:17.980 [DEBUG] [Thread-131705] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:25:18.053 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:25:18.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T17:25:18.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T17:25:18.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T17:25:18.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:25:18.063 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T17:25:18.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:25:18.063 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:25:18.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T17:25:18.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.642154 -999.00  +23.60  29.04     23   +1.60 1 2 1 1 1   887    0 21.84 -51.39 ----- 26.5 29.0 297.4 40.5 26.4 -16.4 26.3 -16.6 26.1 -15.7 26.4 -14.6
2025-12-31T17:25:18.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T17:25:18.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T17:25:18.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.642154
2025-12-31T17:25:18.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T17:25:18.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T17:25:18.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T17:25:18.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T17:25:18.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T17:25:18.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T17:24:45', tmtdew=26.45, humidity=17.38, cloud=0.0, wind=28.57, temperature=24.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T15:24:42.106', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T17:25:18.065 [DEBUG] [Thread-131705] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:25:18.139 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T17:25:18.150 [DEBUG] [Thread-131708] [transport.py] [_log()] starting thread (client mode): 0xb1747850
2025-12-31T17:25:18.151 [DEBUG] [Thread-131708] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:25:18.165 [DEBUG] [Thread-131708] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T17:25:18.165 [INFO] [Thread-131708] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T17:25:18.172 [DEBUG] [Thread-131708] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:25:18.173 [DEBUG] [Thread-131708] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T17:25:18.173 [DEBUG] [Thread-131708] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:25:18.173 [DEBUG] [Thread-131708] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:25:18.173 [DEBUG] [Thread-131708] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:25:18.173 [DEBUG] [Thread-131708] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:25:18.173 [DEBUG] [Thread-131708] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:25:18.173 [DEBUG] [Thread-131708] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:25:18.173 [DEBUG] [Thread-131708] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:25:18.173 [DEBUG] [Thread-131708] [transport.py] [_log()] client lang: <none>
2025-12-31T17:25:18.173 [DEBUG] [Thread-131708] [transport.py] [_log()] server lang: <none>
2025-12-31T17:25:18.173 [DEBUG] [Thread-131708] [transport.py] [_log()] kex follows: False
2025-12-31T17:25:18.173 [DEBUG] [Thread-131708] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:25:18.173 [DEBUG] [Thread-131708] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:25:18.173 [DEBUG] [Thread-131708] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:25:18.173 [DEBUG] [Thread-131708] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:25:18.173 [DEBUG] [Thread-131708] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:25:18.173 [DEBUG] [Thread-131708] [transport.py] [_log()] Compression: none
2025-12-31T17:25:18.173 [DEBUG] [Thread-131708] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:25:18.231 [DEBUG] [Thread-131708] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:25:18.231 [DEBUG] [Thread-131708] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:25:18.232 [DEBUG] [Thread-131708] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T17:25:18.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T17:25:18.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:25:18.288 [DEBUG] [Thread-131708] [transport.py] [_log()] userauth is OK
2025-12-31T17:25:18.288 [DEBUG] [Thread-131708] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:25:18.288 [DEBUG] [Thread-131708] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:25:18.288 [DEBUG] [Thread-131708] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T17:25:18.288 [DEBUG] [Thread-131708] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:25:18.304 [INFO] [Thread-131708] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:25:18.304 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T17:25:18.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:25:19.167 [DEBUG] [Thread-131708] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:25:19.167 [DEBUG] [Thread-131708] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:25:19.214 [DEBUG] [Thread-131708] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:25:19.214 [DEBUG] [Thread-131708] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:25:19.223 [DEBUG] [Thread-131708] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:25:19.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:25:19.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T17:25:19.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T17:25:19.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:25:19.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:25:19.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:25:19.255 [DEBUG] [Thread-131708] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:25:24.128 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:25:24.129 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:25:27.380 [DEBUG] [Thread-131710 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:25:30.344 [DEBUG] [Thread-131711 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:25:45.388 [DEBUG] [Thread-131712 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:25:49.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T17:25:49.276 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T17:25:49.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T17:25:49.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 17, 25, 17), 26.34, 17.49, 0.0, 29.13, 24.19, 0, 0, 0, 2, 0, 0),)
2025-12-31T17:25:49.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 17:25:17
2025-12-31T17:25:50.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T17:25:50.272 [DEBUG] [Thread-131713] [transport.py] [_log()] starting thread (client mode): 0xb1746f50
2025-12-31T17:25:50.273 [DEBUG] [Thread-131713] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:25:50.290 [DEBUG] [Thread-131713] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T17:25:50.290 [INFO] [Thread-131713] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T17:25:50.292 [DEBUG] [Thread-131713] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:25:50.292 [DEBUG] [Thread-131713] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T17:25:50.292 [DEBUG] [Thread-131713] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:25:50.292 [DEBUG] [Thread-131713] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:25:50.292 [DEBUG] [Thread-131713] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:25:50.292 [DEBUG] [Thread-131713] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:25:50.292 [DEBUG] [Thread-131713] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:25:50.292 [DEBUG] [Thread-131713] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:25:50.292 [DEBUG] [Thread-131713] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:25:50.292 [DEBUG] [Thread-131713] [transport.py] [_log()] client lang: <none>
2025-12-31T17:25:50.293 [DEBUG] [Thread-131713] [transport.py] [_log()] server lang: <none>
2025-12-31T17:25:50.293 [DEBUG] [Thread-131713] [transport.py] [_log()] kex follows: False
2025-12-31T17:25:50.293 [DEBUG] [Thread-131713] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:25:50.293 [DEBUG] [Thread-131713] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:25:50.293 [DEBUG] [Thread-131713] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:25:50.293 [DEBUG] [Thread-131713] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:25:50.293 [DEBUG] [Thread-131713] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:25:50.293 [DEBUG] [Thread-131713] [transport.py] [_log()] Compression: none
2025-12-31T17:25:50.293 [DEBUG] [Thread-131713] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:25:50.308 [DEBUG] [Thread-131713] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:25:50.308 [DEBUG] [Thread-131713] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:25:50.309 [DEBUG] [Thread-131713] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T17:25:50.309 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T17:25:50.309 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:25:50.309 [DEBUG] [Thread-131713] [transport.py] [_log()] userauth is OK
2025-12-31T17:25:50.309 [DEBUG] [Thread-131713] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:25:50.309 [DEBUG] [Thread-131713] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:25:50.309 [DEBUG] [Thread-131713] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T17:25:50.309 [DEBUG] [Thread-131713] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:25:50.336 [INFO] [Thread-131713] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:25:50.336 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:25:51.006 [DEBUG] [Thread-131713] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:25:51.006 [DEBUG] [Thread-131713] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:25:51.006 [DEBUG] [Thread-131713] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T17:25:51.047 [DEBUG] [Thread-131713] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:25:51.047 [DEBUG] [Thread-131713] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:25:51.050 [DEBUG] [Thread-131713] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:25:51.061 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:25:51.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T17:25:51.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T17:25:51.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T17:25:51.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:25:51.066 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T17:25:51.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:25:51.066 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:25:51.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T17:25:51.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.642502 -999.00  +23.70  27.13     23   +1.80 1 2 1 1 1   887    0 21.38 -50.70 ----- 29.7 27.1 292.4 35.4 26.4 -16.5 26.3 -16.4 26.1 -15.2 26.4 -14.7
2025-12-31T17:25:51.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T17:25:51.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T17:25:51.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.642502
2025-12-31T17:25:51.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T17:25:51.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T17:25:51.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T17:25:51.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T17:25:51.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T17:25:51.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T17:25:17', tmtdew=26.34, humidity=17.49, cloud=0.0, wind=29.13, temperature=24.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T15:25:12.173', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T17:25:51.068 [DEBUG] [Thread-131713] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:25:51.141 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T17:25:51.153 [DEBUG] [Thread-131716] [transport.py] [_log()] starting thread (client mode): 0xb6bbf580
2025-12-31T17:25:51.153 [DEBUG] [Thread-131716] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:25:51.168 [DEBUG] [Thread-131716] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T17:25:51.168 [INFO] [Thread-131716] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T17:25:51.175 [DEBUG] [Thread-131716] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:25:51.175 [DEBUG] [Thread-131716] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T17:25:51.175 [DEBUG] [Thread-131716] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:25:51.175 [DEBUG] [Thread-131716] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:25:51.175 [DEBUG] [Thread-131716] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:25:51.175 [DEBUG] [Thread-131716] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:25:51.175 [DEBUG] [Thread-131716] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:25:51.175 [DEBUG] [Thread-131716] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:25:51.176 [DEBUG] [Thread-131716] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:25:51.176 [DEBUG] [Thread-131716] [transport.py] [_log()] client lang: <none>
2025-12-31T17:25:51.176 [DEBUG] [Thread-131716] [transport.py] [_log()] server lang: <none>
2025-12-31T17:25:51.176 [DEBUG] [Thread-131716] [transport.py] [_log()] kex follows: False
2025-12-31T17:25:51.176 [DEBUG] [Thread-131716] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:25:51.176 [DEBUG] [Thread-131716] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:25:51.176 [DEBUG] [Thread-131716] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:25:51.176 [DEBUG] [Thread-131716] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:25:51.176 [DEBUG] [Thread-131716] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:25:51.176 [DEBUG] [Thread-131716] [transport.py] [_log()] Compression: none
2025-12-31T17:25:51.176 [DEBUG] [Thread-131716] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:25:51.235 [DEBUG] [Thread-131716] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:25:51.235 [DEBUG] [Thread-131716] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:25:51.235 [DEBUG] [Thread-131716] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T17:25:51.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T17:25:51.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:25:51.291 [DEBUG] [Thread-131716] [transport.py] [_log()] userauth is OK
2025-12-31T17:25:51.291 [DEBUG] [Thread-131716] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:25:51.291 [DEBUG] [Thread-131716] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:25:51.291 [DEBUG] [Thread-131716] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T17:25:51.291 [DEBUG] [Thread-131716] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:25:51.309 [INFO] [Thread-131716] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:25:51.309 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T17:25:51.309 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:25:52.140 [DEBUG] [Thread-131716] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:25:52.140 [DEBUG] [Thread-131716] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:25:52.188 [DEBUG] [Thread-131716] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:25:52.188 [DEBUG] [Thread-131716] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:25:52.198 [DEBUG] [Thread-131716] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:25:52.207 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:25:52.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-12-31T17:25:52.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T17:25:52.224 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:25:52.225 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:25:52.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:25:52.232 [DEBUG] [Thread-131716] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:26:00.427 [DEBUG] [Thread-131718 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:26:15.474 [DEBUG] [Thread-131719 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:26:22.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T17:26:22.229 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T17:26:22.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T17:26:22.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 17, 25, 50), 25.95, 17.99, 0.0, 25.28, 24.14, 0, 0, 0, 2, 0, 0),)
2025-12-31T17:26:22.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 17:25:50
2025-12-31T17:26:23.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T17:26:23.246 [DEBUG] [Thread-131720] [transport.py] [_log()] starting thread (client mode): 0xb6bbdb70
2025-12-31T17:26:23.246 [DEBUG] [Thread-131720] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:26:23.266 [DEBUG] [Thread-131720] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T17:26:23.266 [INFO] [Thread-131720] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T17:26:23.268 [DEBUG] [Thread-131720] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:26:23.268 [DEBUG] [Thread-131720] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T17:26:23.268 [DEBUG] [Thread-131720] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:26:23.268 [DEBUG] [Thread-131720] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:26:23.268 [DEBUG] [Thread-131720] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:26:23.268 [DEBUG] [Thread-131720] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:26:23.268 [DEBUG] [Thread-131720] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:26:23.268 [DEBUG] [Thread-131720] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:26:23.268 [DEBUG] [Thread-131720] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:26:23.268 [DEBUG] [Thread-131720] [transport.py] [_log()] client lang: <none>
2025-12-31T17:26:23.268 [DEBUG] [Thread-131720] [transport.py] [_log()] server lang: <none>
2025-12-31T17:26:23.268 [DEBUG] [Thread-131720] [transport.py] [_log()] kex follows: False
2025-12-31T17:26:23.268 [DEBUG] [Thread-131720] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:26:23.268 [DEBUG] [Thread-131720] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:26:23.268 [DEBUG] [Thread-131720] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:26:23.268 [DEBUG] [Thread-131720] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:26:23.268 [DEBUG] [Thread-131720] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:26:23.268 [DEBUG] [Thread-131720] [transport.py] [_log()] Compression: none
2025-12-31T17:26:23.268 [DEBUG] [Thread-131720] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:26:23.280 [DEBUG] [Thread-131720] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:26:23.280 [DEBUG] [Thread-131720] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:26:23.280 [DEBUG] [Thread-131720] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T17:26:23.280 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T17:26:23.281 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:26:23.281 [DEBUG] [Thread-131720] [transport.py] [_log()] userauth is OK
2025-12-31T17:26:23.281 [DEBUG] [Thread-131720] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:26:23.281 [DEBUG] [Thread-131720] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:26:23.281 [DEBUG] [Thread-131720] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T17:26:23.281 [DEBUG] [Thread-131720] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:26:23.300 [INFO] [Thread-131720] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:26:23.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:26:24.086 [DEBUG] [Thread-131720] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:26:24.086 [DEBUG] [Thread-131720] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:26:24.086 [DEBUG] [Thread-131720] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T17:26:24.127 [DEBUG] [Thread-131720] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:26:24.128 [DEBUG] [Thread-131720] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:26:24.130 [DEBUG] [Thread-131720] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:26:24.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:26:24.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T17:26:24.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T17:26:24.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T17:26:24.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:26:24.142 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T17:26:24.142 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:26:24.142 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:26:24.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T17:26:24.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.642849 -999.00  +23.60  27.14     24   +1.90 1 2 1 1 1   887    0 21.34 -58.22 ----- 27.4 27.1 289.0 35.5 26.4 -16.0 26.3 -16.5 26.1 -14.5 26.4 -14.9
2025-12-31T17:26:24.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T17:26:24.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T17:26:24.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.642849
2025-12-31T17:26:24.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T17:26:24.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T17:26:24.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T17:26:24.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T17:26:24.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T17:26:24.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T17:25:50', tmtdew=25.95, humidity=17.99, cloud=0.0, wind=25.28, temperature=24.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T15:25:42.154', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T17:26:24.142 [DEBUG] [Thread-131720] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:26:24.215 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T17:26:24.226 [DEBUG] [Thread-131723] [transport.py] [_log()] starting thread (client mode): 0xb6bbe470
2025-12-31T17:26:24.227 [DEBUG] [Thread-131723] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:26:24.244 [DEBUG] [Thread-131723] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T17:26:24.244 [INFO] [Thread-131723] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T17:26:24.252 [DEBUG] [Thread-131723] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:26:24.252 [DEBUG] [Thread-131723] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T17:26:24.252 [DEBUG] [Thread-131723] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:26:24.252 [DEBUG] [Thread-131723] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:26:24.252 [DEBUG] [Thread-131723] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:26:24.252 [DEBUG] [Thread-131723] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:26:24.252 [DEBUG] [Thread-131723] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:26:24.252 [DEBUG] [Thread-131723] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:26:24.252 [DEBUG] [Thread-131723] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:26:24.252 [DEBUG] [Thread-131723] [transport.py] [_log()] client lang: <none>
2025-12-31T17:26:24.252 [DEBUG] [Thread-131723] [transport.py] [_log()] server lang: <none>
2025-12-31T17:26:24.252 [DEBUG] [Thread-131723] [transport.py] [_log()] kex follows: False
2025-12-31T17:26:24.252 [DEBUG] [Thread-131723] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:26:24.252 [DEBUG] [Thread-131723] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:26:24.252 [DEBUG] [Thread-131723] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:26:24.252 [DEBUG] [Thread-131723] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:26:24.252 [DEBUG] [Thread-131723] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:26:24.252 [DEBUG] [Thread-131723] [transport.py] [_log()] Compression: none
2025-12-31T17:26:24.252 [DEBUG] [Thread-131723] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:26:24.268 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:26:24.269 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:26:24.308 [DEBUG] [Thread-131723] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:26:24.308 [DEBUG] [Thread-131723] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:26:24.308 [DEBUG] [Thread-131723] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T17:26:24.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T17:26:24.309 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:26:24.365 [DEBUG] [Thread-131723] [transport.py] [_log()] userauth is OK
2025-12-31T17:26:24.365 [DEBUG] [Thread-131723] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:26:24.365 [DEBUG] [Thread-131723] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:26:24.365 [DEBUG] [Thread-131723] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T17:26:24.365 [DEBUG] [Thread-131723] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:26:24.380 [INFO] [Thread-131723] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:26:24.380 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T17:26:24.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:26:25.231 [DEBUG] [Thread-131723] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:26:25.231 [DEBUG] [Thread-131723] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:26:25.279 [DEBUG] [Thread-131723] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:26:25.279 [DEBUG] [Thread-131723] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:26:25.289 [DEBUG] [Thread-131723] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:26:25.298 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:26:25.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T17:26:25.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T17:26:25.316 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:26:25.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:26:25.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:26:25.325 [DEBUG] [Thread-131723] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:26:27.441 [DEBUG] [Thread-131725 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:26:30.507 [DEBUG] [Thread-131726 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:26:45.566 [DEBUG] [Thread-131727 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:26:55.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T17:26:55.331 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T17:26:55.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T17:26:56.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 17, 26, 22), 26.0, 17.94, 0.0, 28.44, 24.19, 0, 0, 0, 2, 0, 0),)
2025-12-31T17:26:56.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 17:26:22
2025-12-31T17:26:56.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T17:26:56.392 [DEBUG] [Thread-131728] [transport.py] [_log()] starting thread (client mode): 0xb17479a0
2025-12-31T17:26:56.392 [DEBUG] [Thread-131728] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:26:56.413 [DEBUG] [Thread-131728] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T17:26:56.413 [INFO] [Thread-131728] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T17:26:56.417 [DEBUG] [Thread-131728] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:26:56.417 [DEBUG] [Thread-131728] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T17:26:56.417 [DEBUG] [Thread-131728] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:26:56.417 [DEBUG] [Thread-131728] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:26:56.417 [DEBUG] [Thread-131728] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:26:56.417 [DEBUG] [Thread-131728] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:26:56.417 [DEBUG] [Thread-131728] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:26:56.417 [DEBUG] [Thread-131728] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:26:56.417 [DEBUG] [Thread-131728] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:26:56.417 [DEBUG] [Thread-131728] [transport.py] [_log()] client lang: <none>
2025-12-31T17:26:56.417 [DEBUG] [Thread-131728] [transport.py] [_log()] server lang: <none>
2025-12-31T17:26:56.417 [DEBUG] [Thread-131728] [transport.py] [_log()] kex follows: False
2025-12-31T17:26:56.417 [DEBUG] [Thread-131728] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:26:56.417 [DEBUG] [Thread-131728] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:26:56.417 [DEBUG] [Thread-131728] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:26:56.417 [DEBUG] [Thread-131728] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:26:56.417 [DEBUG] [Thread-131728] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:26:56.417 [DEBUG] [Thread-131728] [transport.py] [_log()] Compression: none
2025-12-31T17:26:56.417 [DEBUG] [Thread-131728] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:26:56.438 [DEBUG] [Thread-131728] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:26:56.438 [DEBUG] [Thread-131728] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:26:56.438 [DEBUG] [Thread-131728] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T17:26:56.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T17:26:56.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:26:56.439 [DEBUG] [Thread-131728] [transport.py] [_log()] userauth is OK
2025-12-31T17:26:56.439 [DEBUG] [Thread-131728] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:26:56.439 [DEBUG] [Thread-131728] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:26:56.439 [DEBUG] [Thread-131728] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T17:26:56.439 [DEBUG] [Thread-131728] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:26:56.454 [INFO] [Thread-131728] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:26:56.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:26:57.131 [DEBUG] [Thread-131728] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:26:57.131 [DEBUG] [Thread-131728] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:26:57.131 [DEBUG] [Thread-131728] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T17:26:57.172 [DEBUG] [Thread-131728] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:26:57.172 [DEBUG] [Thread-131728] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:26:57.176 [DEBUG] [Thread-131728] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:26:57.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:26:57.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T17:26:57.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T17:26:57.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T17:26:57.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:26:57.201 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T17:26:57.201 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:26:57.201 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:26:57.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T17:26:57.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.643196 -999.00  +23.80  25.91     23   +1.80 1 2 1 1 1   887    0 21.31 -59.55 ----- 22.7 25.9 291.0 35.9 26.4 -16.0 26.4 -16.1 26.1 -13.8 26.4 -14.2
2025-12-31T17:26:57.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T17:26:57.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T17:26:57.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.643196
2025-12-31T17:26:57.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T17:26:57.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T17:26:57.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T17:26:57.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T17:26:57.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T17:26:57.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T17:26:22', tmtdew=26.0, humidity=17.94, cloud=0.0, wind=28.44, temperature=24.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T15:26:12.134', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T17:26:57.204 [DEBUG] [Thread-131728] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:26:57.285 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T17:26:57.298 [DEBUG] [Thread-131731] [transport.py] [_log()] starting thread (client mode): 0xb95917b0
2025-12-31T17:26:57.298 [DEBUG] [Thread-131731] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:26:57.313 [DEBUG] [Thread-131731] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T17:26:57.313 [INFO] [Thread-131731] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T17:26:57.320 [DEBUG] [Thread-131731] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:26:57.320 [DEBUG] [Thread-131731] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T17:26:57.321 [DEBUG] [Thread-131731] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:26:57.321 [DEBUG] [Thread-131731] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:26:57.321 [DEBUG] [Thread-131731] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:26:57.321 [DEBUG] [Thread-131731] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:26:57.321 [DEBUG] [Thread-131731] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:26:57.321 [DEBUG] [Thread-131731] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:26:57.321 [DEBUG] [Thread-131731] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:26:57.321 [DEBUG] [Thread-131731] [transport.py] [_log()] client lang: <none>
2025-12-31T17:26:57.321 [DEBUG] [Thread-131731] [transport.py] [_log()] server lang: <none>
2025-12-31T17:26:57.321 [DEBUG] [Thread-131731] [transport.py] [_log()] kex follows: False
2025-12-31T17:26:57.321 [DEBUG] [Thread-131731] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:26:57.321 [DEBUG] [Thread-131731] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:26:57.321 [DEBUG] [Thread-131731] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:26:57.321 [DEBUG] [Thread-131731] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:26:57.321 [DEBUG] [Thread-131731] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:26:57.321 [DEBUG] [Thread-131731] [transport.py] [_log()] Compression: none
2025-12-31T17:26:57.321 [DEBUG] [Thread-131731] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:26:57.379 [DEBUG] [Thread-131731] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:26:57.380 [DEBUG] [Thread-131731] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:26:57.381 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T17:26:57.381 [DEBUG] [Thread-131731] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T17:26:57.382 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:26:57.435 [DEBUG] [Thread-131731] [transport.py] [_log()] userauth is OK
2025-12-31T17:26:57.435 [DEBUG] [Thread-131731] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:26:57.435 [DEBUG] [Thread-131731] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:26:57.436 [DEBUG] [Thread-131731] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T17:26:57.436 [DEBUG] [Thread-131731] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:26:57.454 [INFO] [Thread-131731] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:26:57.455 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T17:26:57.455 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:26:58.268 [DEBUG] [Thread-131731] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:26:58.269 [DEBUG] [Thread-131731] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:26:58.317 [DEBUG] [Thread-131731] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:26:58.317 [DEBUG] [Thread-131731] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:26:58.326 [DEBUG] [Thread-131731] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:26:58.335 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:26:58.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T17:26:58.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T17:26:58.354 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:26:58.355 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:26:58.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:26:58.363 [DEBUG] [Thread-131731] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:27:00.597 [DEBUG] [Thread-131733 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:27:15.649 [DEBUG] [Thread-131734 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:27:24.409 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:27:24.411 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:27:27.486 [DEBUG] [Thread-131735 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:27:28.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T17:27:28.385 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T17:27:28.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T17:27:29.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 17, 26, 54), 26.09, 17.47, 0.0, 28.07, 24.39, 0, 0, 0, 2, 0, 0),)
2025-12-31T17:27:29.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 17:26:54
2025-12-31T17:27:29.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T17:27:29.446 [DEBUG] [Thread-131736] [transport.py] [_log()] starting thread (client mode): 0xb9590af0
2025-12-31T17:27:29.446 [DEBUG] [Thread-131736] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:27:29.466 [DEBUG] [Thread-131736] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T17:27:29.466 [INFO] [Thread-131736] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T17:27:29.469 [DEBUG] [Thread-131736] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:27:29.469 [DEBUG] [Thread-131736] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T17:27:29.469 [DEBUG] [Thread-131736] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:27:29.469 [DEBUG] [Thread-131736] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:27:29.469 [DEBUG] [Thread-131736] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:27:29.469 [DEBUG] [Thread-131736] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:27:29.469 [DEBUG] [Thread-131736] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:27:29.469 [DEBUG] [Thread-131736] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:27:29.469 [DEBUG] [Thread-131736] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:27:29.469 [DEBUG] [Thread-131736] [transport.py] [_log()] client lang: <none>
2025-12-31T17:27:29.469 [DEBUG] [Thread-131736] [transport.py] [_log()] server lang: <none>
2025-12-31T17:27:29.469 [DEBUG] [Thread-131736] [transport.py] [_log()] kex follows: False
2025-12-31T17:27:29.469 [DEBUG] [Thread-131736] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:27:29.469 [DEBUG] [Thread-131736] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:27:29.469 [DEBUG] [Thread-131736] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:27:29.469 [DEBUG] [Thread-131736] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:27:29.470 [DEBUG] [Thread-131736] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:27:29.470 [DEBUG] [Thread-131736] [transport.py] [_log()] Compression: none
2025-12-31T17:27:29.470 [DEBUG] [Thread-131736] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:27:29.483 [DEBUG] [Thread-131736] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:27:29.483 [DEBUG] [Thread-131736] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:27:29.483 [DEBUG] [Thread-131736] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T17:27:29.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T17:27:29.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:27:29.484 [DEBUG] [Thread-131736] [transport.py] [_log()] userauth is OK
2025-12-31T17:27:29.484 [DEBUG] [Thread-131736] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:27:29.484 [DEBUG] [Thread-131736] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:27:29.484 [DEBUG] [Thread-131736] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T17:27:29.484 [DEBUG] [Thread-131736] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:27:29.496 [INFO] [Thread-131736] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:27:29.497 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:27:30.267 [DEBUG] [Thread-131736] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:27:30.267 [DEBUG] [Thread-131736] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:27:30.268 [DEBUG] [Thread-131736] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T17:27:30.308 [DEBUG] [Thread-131736] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:27:30.308 [DEBUG] [Thread-131736] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:27:30.312 [DEBUG] [Thread-131736] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:27:30.323 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:27:30.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T17:27:30.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T17:27:30.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T17:27:30.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:27:30.333 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T17:27:30.334 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:27:30.334 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:27:30.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T17:27:30.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.643543 -999.00  +23.90  27.95     23   +2.00 1 2 1 1 1   887    0 20.93 -59.56 ----- 24.4 27.9 300.2 39.9 26.4 -15.9 26.4 -15.8 26.2 -13.5 26.4 -14.3
2025-12-31T17:27:30.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T17:27:30.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T17:27:30.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.643543
2025-12-31T17:27:30.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T17:27:30.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T17:27:30.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T17:27:30.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T17:27:30.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T17:27:30.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T17:26:54', tmtdew=26.09, humidity=17.47, cloud=0.0, wind=28.07, temperature=24.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T15:26:42.115', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T17:27:30.336 [DEBUG] [Thread-131736] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:27:30.411 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T17:27:30.423 [DEBUG] [Thread-131739] [transport.py] [_log()] starting thread (client mode): 0xb6bbd780
2025-12-31T17:27:30.423 [DEBUG] [Thread-131739] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:27:30.439 [DEBUG] [Thread-131739] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T17:27:30.439 [INFO] [Thread-131739] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T17:27:30.447 [DEBUG] [Thread-131739] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:27:30.447 [DEBUG] [Thread-131739] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T17:27:30.448 [DEBUG] [Thread-131739] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:27:30.448 [DEBUG] [Thread-131739] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:27:30.448 [DEBUG] [Thread-131739] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:27:30.448 [DEBUG] [Thread-131739] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:27:30.448 [DEBUG] [Thread-131739] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:27:30.448 [DEBUG] [Thread-131739] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:27:30.448 [DEBUG] [Thread-131739] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:27:30.448 [DEBUG] [Thread-131739] [transport.py] [_log()] client lang: <none>
2025-12-31T17:27:30.448 [DEBUG] [Thread-131739] [transport.py] [_log()] server lang: <none>
2025-12-31T17:27:30.449 [DEBUG] [Thread-131739] [transport.py] [_log()] kex follows: False
2025-12-31T17:27:30.449 [DEBUG] [Thread-131739] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:27:30.449 [DEBUG] [Thread-131739] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:27:30.449 [DEBUG] [Thread-131739] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:27:30.449 [DEBUG] [Thread-131739] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:27:30.449 [DEBUG] [Thread-131739] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:27:30.449 [DEBUG] [Thread-131739] [transport.py] [_log()] Compression: none
2025-12-31T17:27:30.449 [DEBUG] [Thread-131739] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:27:30.507 [DEBUG] [Thread-131739] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:27:30.508 [DEBUG] [Thread-131739] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:27:30.509 [DEBUG] [Thread-131739] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T17:27:30.509 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T17:27:30.510 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:27:30.564 [DEBUG] [Thread-131739] [transport.py] [_log()] userauth is OK
2025-12-31T17:27:30.565 [DEBUG] [Thread-131739] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:27:30.565 [DEBUG] [Thread-131739] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:27:30.565 [DEBUG] [Thread-131739] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T17:27:30.565 [DEBUG] [Thread-131739] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:27:30.590 [INFO] [Thread-131739] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:27:30.590 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T17:27:30.591 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:27:30.677 [DEBUG] [Thread-131741 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:27:31.429 [DEBUG] [Thread-131739] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:27:31.429 [DEBUG] [Thread-131739] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:27:31.477 [DEBUG] [Thread-131739] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:27:31.477 [DEBUG] [Thread-131739] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:27:31.486 [DEBUG] [Thread-131739] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:27:31.495 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:27:31.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-12-31T17:27:31.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T17:27:31.514 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:27:31.514 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:27:31.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:27:31.523 [DEBUG] [Thread-131739] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:27:45.733 [DEBUG] [Thread-131742 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:28:00.768 [DEBUG] [Thread-131743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:28:01.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T17:28:01.545 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T17:28: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-12-31T17:28:02.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 17, 27, 59), 26.25, 17.49, 0.0, 29.8, 24.82, 0, 0, 0, 2, 0, 0),)
2025-12-31T17:28:02.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 17:27:59
2025-12-31T17:28:02.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T17:28:02.560 [DEBUG] [Thread-131744] [transport.py] [_log()] starting thread (client mode): 0xb9558940
2025-12-31T17:28:02.560 [DEBUG] [Thread-131744] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:28:02.575 [DEBUG] [Thread-131744] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T17:28:02.575 [INFO] [Thread-131744] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T17:28:02.578 [DEBUG] [Thread-131744] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:28:02.578 [DEBUG] [Thread-131744] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T17:28:02.578 [DEBUG] [Thread-131744] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:28:02.578 [DEBUG] [Thread-131744] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:28:02.578 [DEBUG] [Thread-131744] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:28:02.578 [DEBUG] [Thread-131744] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:28:02.578 [DEBUG] [Thread-131744] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:28:02.578 [DEBUG] [Thread-131744] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:28:02.578 [DEBUG] [Thread-131744] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:28:02.578 [DEBUG] [Thread-131744] [transport.py] [_log()] client lang: <none>
2025-12-31T17:28:02.578 [DEBUG] [Thread-131744] [transport.py] [_log()] server lang: <none>
2025-12-31T17:28:02.578 [DEBUG] [Thread-131744] [transport.py] [_log()] kex follows: False
2025-12-31T17:28:02.578 [DEBUG] [Thread-131744] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:28:02.578 [DEBUG] [Thread-131744] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:28:02.578 [DEBUG] [Thread-131744] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:28:02.578 [DEBUG] [Thread-131744] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:28:02.578 [DEBUG] [Thread-131744] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:28:02.578 [DEBUG] [Thread-131744] [transport.py] [_log()] Compression: none
2025-12-31T17:28:02.578 [DEBUG] [Thread-131744] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:28:02.595 [DEBUG] [Thread-131744] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:28:02.595 [DEBUG] [Thread-131744] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:28:02.595 [DEBUG] [Thread-131744] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T17:28:02.595 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T17:28:02.595 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:28:02.596 [DEBUG] [Thread-131744] [transport.py] [_log()] userauth is OK
2025-12-31T17:28:02.596 [DEBUG] [Thread-131744] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:28:02.596 [DEBUG] [Thread-131744] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:28:02.596 [DEBUG] [Thread-131744] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T17:28:02.596 [DEBUG] [Thread-131744] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:28:02.622 [INFO] [Thread-131744] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:28:02.623 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:28:03.277 [DEBUG] [Thread-131744] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:28:03.277 [DEBUG] [Thread-131744] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:28:03.277 [DEBUG] [Thread-131744] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T17:28:03.318 [DEBUG] [Thread-131744] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:28:03.318 [DEBUG] [Thread-131744] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:28:03.320 [DEBUG] [Thread-131744] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:28:03.334 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:28:03.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T17:28:03.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T17:28:03.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T17:28:03.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:28:03.339 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T17:28:03.339 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:28:03.339 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:28:03.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T17:28:03.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.643890 -999.00  +24.10  38.34     23   +2.20 1 2 2 1 1   887    0 21.04 -62.43 ----- 37.8 38.3 283.6 47.8 26.4 -15.6 26.4 -15.5 26.2 -15.6 26.6 -14.1
2025-12-31T17:28:03.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T17:28:03.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T17:28:03.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.643890
2025-12-31T17:28:03.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T17:28:03.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T17:28:03.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T17:28:03.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T17:28:03.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T17:28:03.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T17:27:59', tmtdew=26.25, humidity=17.49, cloud=0.0, wind=29.8, temperature=24.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T15:27:12.096', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T17:28:03.341 [DEBUG] [Thread-131744] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:28:03.415 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T17:28:03.427 [DEBUG] [Thread-131747] [transport.py] [_log()] starting thread (client mode): 0xb6bbddb0
2025-12-31T17:28:03.427 [DEBUG] [Thread-131747] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:28:03.441 [DEBUG] [Thread-131747] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T17:28:03.441 [INFO] [Thread-131747] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T17:28:03.449 [DEBUG] [Thread-131747] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:28:03.449 [DEBUG] [Thread-131747] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T17:28:03.449 [DEBUG] [Thread-131747] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:28:03.449 [DEBUG] [Thread-131747] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:28:03.449 [DEBUG] [Thread-131747] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:28:03.449 [DEBUG] [Thread-131747] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:28:03.449 [DEBUG] [Thread-131747] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:28:03.449 [DEBUG] [Thread-131747] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:28:03.449 [DEBUG] [Thread-131747] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:28:03.449 [DEBUG] [Thread-131747] [transport.py] [_log()] client lang: <none>
2025-12-31T17:28:03.449 [DEBUG] [Thread-131747] [transport.py] [_log()] server lang: <none>
2025-12-31T17:28:03.449 [DEBUG] [Thread-131747] [transport.py] [_log()] kex follows: False
2025-12-31T17:28:03.449 [DEBUG] [Thread-131747] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:28:03.449 [DEBUG] [Thread-131747] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:28:03.449 [DEBUG] [Thread-131747] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:28:03.449 [DEBUG] [Thread-131747] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:28:03.449 [DEBUG] [Thread-131747] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:28:03.449 [DEBUG] [Thread-131747] [transport.py] [_log()] Compression: none
2025-12-31T17:28:03.449 [DEBUG] [Thread-131747] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:28:03.508 [DEBUG] [Thread-131747] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:28:03.508 [DEBUG] [Thread-131747] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:28:03.509 [DEBUG] [Thread-131747] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T17:28:03.509 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T17:28:03.509 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:28:03.566 [DEBUG] [Thread-131747] [transport.py] [_log()] userauth is OK
2025-12-31T17:28:03.566 [DEBUG] [Thread-131747] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:28:03.566 [DEBUG] [Thread-131747] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:28:03.566 [DEBUG] [Thread-131747] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T17:28:03.566 [DEBUG] [Thread-131747] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:28:03.580 [INFO] [Thread-131747] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:28:03.580 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T17:28:03.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:28:04.398 [DEBUG] [Thread-131747] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:28:04.398 [DEBUG] [Thread-131747] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:28:04.446 [DEBUG] [Thread-131747] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:28:04.446 [DEBUG] [Thread-131747] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:28:04.455 [DEBUG] [Thread-131747] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:28:04.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:28:04.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T17:28:04.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-12-31T17:28:04.478 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:28:04.478 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:28:04.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:28:04.486 [DEBUG] [Thread-131747] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:28:15.797 [DEBUG] [Thread-131749 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:28:24.575 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:28:24.576 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:28:27.535 [DEBUG] [Thread-131750 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:28:30.848 [DEBUG] [Thread-131751 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:28:34.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T17:28:34.505 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T17:28:34.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T17:28:35.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 17, 28, 31), 26.32, 17.41, 0.0, 36.63, 24.84, 0, 0, 0, 2, 0, 0),)
2025-12-31T17:28:35.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 17:28:31
2025-12-31T17:28:35.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T17:28:35.519 [DEBUG] [Thread-131752] [transport.py] [_log()] starting thread (client mode): 0xb9590850
2025-12-31T17:28:35.519 [DEBUG] [Thread-131752] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:28:35.539 [DEBUG] [Thread-131752] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T17:28:35.539 [INFO] [Thread-131752] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T17:28:35.543 [DEBUG] [Thread-131752] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:28:35.543 [DEBUG] [Thread-131752] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T17:28:35.543 [DEBUG] [Thread-131752] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:28:35.543 [DEBUG] [Thread-131752] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:28:35.543 [DEBUG] [Thread-131752] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:28:35.543 [DEBUG] [Thread-131752] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:28:35.543 [DEBUG] [Thread-131752] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:28:35.543 [DEBUG] [Thread-131752] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:28:35.543 [DEBUG] [Thread-131752] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:28:35.543 [DEBUG] [Thread-131752] [transport.py] [_log()] client lang: <none>
2025-12-31T17:28:35.543 [DEBUG] [Thread-131752] [transport.py] [_log()] server lang: <none>
2025-12-31T17:28:35.543 [DEBUG] [Thread-131752] [transport.py] [_log()] kex follows: False
2025-12-31T17:28:35.543 [DEBUG] [Thread-131752] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:28:35.543 [DEBUG] [Thread-131752] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:28:35.543 [DEBUG] [Thread-131752] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:28:35.543 [DEBUG] [Thread-131752] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:28:35.543 [DEBUG] [Thread-131752] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:28:35.543 [DEBUG] [Thread-131752] [transport.py] [_log()] Compression: none
2025-12-31T17:28:35.543 [DEBUG] [Thread-131752] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:28:35.560 [DEBUG] [Thread-131752] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:28:35.560 [DEBUG] [Thread-131752] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:28:35.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T17:28:35.561 [DEBUG] [Thread-131752] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T17:28:35.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:28:35.562 [DEBUG] [Thread-131752] [transport.py] [_log()] userauth is OK
2025-12-31T17:28:35.563 [DEBUG] [Thread-131752] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:28:35.563 [DEBUG] [Thread-131752] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:28:35.563 [DEBUG] [Thread-131752] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T17:28:35.563 [DEBUG] [Thread-131752] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:28:35.579 [INFO] [Thread-131752] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:28:35.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:28:36.332 [DEBUG] [Thread-131752] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:28:36.332 [DEBUG] [Thread-131752] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:28:36.333 [DEBUG] [Thread-131752] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T17:28:36.373 [DEBUG] [Thread-131752] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:28:36.373 [DEBUG] [Thread-131752] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:28:36.376 [DEBUG] [Thread-131752] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:28:36.381 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:28:36.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T17:28:36.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T17:28:36.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T17:28:36.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:28:36.390 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T17:28:36.391 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:28:36.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:28:36.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T17:28:36.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.644238 -999.00  +24.00  31.98     23   +2.00 1 2 2 1 1   887    0 20.69 -61.20 ----- 30.0 32.0 292.2 45.9 26.4 -15.9 26.4 -16.2 26.1 -14.1 26.4 -14.6
2025-12-31T17:28:36.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T17:28:36.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T17:28:36.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.644238
2025-12-31T17:28:36.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T17:28:36.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T17:28:36.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T17:28:36.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T17:28:36.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T17:28:36.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T17:28:31', tmtdew=26.32, humidity=17.41, cloud=0.0, wind=36.63, temperature=24.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T15:27:42.163', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T17:28:36.393 [DEBUG] [Thread-131752] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:28:36.476 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T17:28:36.488 [DEBUG] [Thread-131755] [transport.py] [_log()] starting thread (client mode): 0xb6ba2c50
2025-12-31T17:28:36.488 [DEBUG] [Thread-131755] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:28:36.503 [DEBUG] [Thread-131755] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T17:28:36.503 [INFO] [Thread-131755] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T17:28:36.510 [DEBUG] [Thread-131755] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:28:36.511 [DEBUG] [Thread-131755] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T17:28:36.511 [DEBUG] [Thread-131755] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:28:36.511 [DEBUG] [Thread-131755] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:28:36.511 [DEBUG] [Thread-131755] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:28:36.511 [DEBUG] [Thread-131755] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:28:36.511 [DEBUG] [Thread-131755] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:28:36.511 [DEBUG] [Thread-131755] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:28:36.511 [DEBUG] [Thread-131755] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:28:36.512 [DEBUG] [Thread-131755] [transport.py] [_log()] client lang: <none>
2025-12-31T17:28:36.512 [DEBUG] [Thread-131755] [transport.py] [_log()] server lang: <none>
2025-12-31T17:28:36.512 [DEBUG] [Thread-131755] [transport.py] [_log()] kex follows: False
2025-12-31T17:28:36.512 [DEBUG] [Thread-131755] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:28:36.512 [DEBUG] [Thread-131755] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:28:36.512 [DEBUG] [Thread-131755] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:28:36.512 [DEBUG] [Thread-131755] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:28:36.512 [DEBUG] [Thread-131755] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:28:36.513 [DEBUG] [Thread-131755] [transport.py] [_log()] Compression: none
2025-12-31T17:28:36.513 [DEBUG] [Thread-131755] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:28:36.569 [DEBUG] [Thread-131755] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:28:36.569 [DEBUG] [Thread-131755] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:28:36.570 [DEBUG] [Thread-131755] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T17:28:36.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T17:28:36.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:28:36.624 [DEBUG] [Thread-131755] [transport.py] [_log()] userauth is OK
2025-12-31T17:28:36.625 [DEBUG] [Thread-131755] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:28:36.625 [DEBUG] [Thread-131755] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:28:36.625 [DEBUG] [Thread-131755] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T17:28:36.625 [DEBUG] [Thread-131755] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:28:36.649 [INFO] [Thread-131755] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:28:36.650 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T17:28:36.650 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:28:37.485 [DEBUG] [Thread-131755] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:28:37.486 [DEBUG] [Thread-131755] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:28:37.533 [DEBUG] [Thread-131755] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:28:37.533 [DEBUG] [Thread-131755] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:28:37.543 [DEBUG] [Thread-131755] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:28:37.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:28:37.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T17:28:37.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T17:28:37.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:28:37.571 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:28:37.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:28:37.579 [DEBUG] [Thread-131755] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:28:45.879 [DEBUG] [Thread-131757 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:29:00.923 [DEBUG] [Thread-131758 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:29:07.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T17:29:07.602 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T17:29:07.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T17:29:08.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 17, 29, 3), 26.27, 17.47, 0.0, 34.19, 24.84, 0, 0, 0, 2, 0, 0),)
2025-12-31T17:29:08.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 17:29:03
2025-12-31T17:29:08.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T17:29:08.596 [DEBUG] [Thread-131759] [transport.py] [_log()] starting thread (client mode): 0xb955beb0
2025-12-31T17:29:08.596 [DEBUG] [Thread-131759] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:29:08.617 [DEBUG] [Thread-131759] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T17:29:08.617 [INFO] [Thread-131759] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T17:29:08.620 [DEBUG] [Thread-131759] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:29:08.620 [DEBUG] [Thread-131759] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T17:29:08.620 [DEBUG] [Thread-131759] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:29:08.620 [DEBUG] [Thread-131759] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:29:08.620 [DEBUG] [Thread-131759] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:29:08.620 [DEBUG] [Thread-131759] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:29:08.620 [DEBUG] [Thread-131759] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:29:08.620 [DEBUG] [Thread-131759] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:29:08.620 [DEBUG] [Thread-131759] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:29:08.620 [DEBUG] [Thread-131759] [transport.py] [_log()] client lang: <none>
2025-12-31T17:29:08.620 [DEBUG] [Thread-131759] [transport.py] [_log()] server lang: <none>
2025-12-31T17:29:08.620 [DEBUG] [Thread-131759] [transport.py] [_log()] kex follows: False
2025-12-31T17:29:08.620 [DEBUG] [Thread-131759] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:29:08.620 [DEBUG] [Thread-131759] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:29:08.620 [DEBUG] [Thread-131759] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:29:08.621 [DEBUG] [Thread-131759] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:29:08.621 [DEBUG] [Thread-131759] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:29:08.621 [DEBUG] [Thread-131759] [transport.py] [_log()] Compression: none
2025-12-31T17:29:08.621 [DEBUG] [Thread-131759] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:29:08.629 [DEBUG] [Thread-131759] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:29:08.629 [DEBUG] [Thread-131759] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:29:08.630 [DEBUG] [Thread-131759] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T17:29:08.630 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T17:29:08.630 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:29:08.631 [DEBUG] [Thread-131759] [transport.py] [_log()] userauth is OK
2025-12-31T17:29:08.631 [DEBUG] [Thread-131759] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:29:08.631 [DEBUG] [Thread-131759] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:29:08.632 [DEBUG] [Thread-131759] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T17:29:08.632 [DEBUG] [Thread-131759] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:29:08.655 [INFO] [Thread-131759] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:29:08.656 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:29:09.249 [DEBUG] [Thread-131759] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:29:09.250 [DEBUG] [Thread-131759] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:29:09.250 [DEBUG] [Thread-131759] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T17:29:09.291 [DEBUG] [Thread-131759] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:29:09.291 [DEBUG] [Thread-131759] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:29:09.295 [DEBUG] [Thread-131759] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:29:09.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:29:09.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T17:29:09.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T17:29:09.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T17:29:09.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:29:09.317 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T17:29:09.318 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:29:09.318 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:29:09.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T17:29:09.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.644585 -999.00  +24.00  38.66     23   +1.90 1 2 2 1 1   887    0 20.79 -56.77 ----- 35.6 38.7 288.4 43.3 26.4 -15.5 26.4 -15.2 26.2 -15.3 26.5 -14.1
2025-12-31T17:29:09.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T17:29:09.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T17:29:09.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.644585
2025-12-31T17:29:09.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T17:29:09.319 [DEBUG] [Thread-131759] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:29:09.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T17:29:09.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T17:29:09.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T17:29:09.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T17:29:09.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T17:29:03', tmtdew=26.27, humidity=17.47, cloud=0.0, wind=34.19, temperature=24.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T15:28:12.144', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T17:29:09.404 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T17:29:09.416 [DEBUG] [Thread-131762] [transport.py] [_log()] starting thread (client mode): 0xb6bbe530
2025-12-31T17:29:09.416 [DEBUG] [Thread-131762] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:29:09.431 [DEBUG] [Thread-131762] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T17:29:09.431 [INFO] [Thread-131762] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T17:29:09.438 [DEBUG] [Thread-131762] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:29:09.438 [DEBUG] [Thread-131762] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T17:29:09.439 [DEBUG] [Thread-131762] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:29:09.439 [DEBUG] [Thread-131762] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:29:09.439 [DEBUG] [Thread-131762] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:29:09.439 [DEBUG] [Thread-131762] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:29:09.439 [DEBUG] [Thread-131762] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:29:09.439 [DEBUG] [Thread-131762] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:29:09.439 [DEBUG] [Thread-131762] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:29:09.439 [DEBUG] [Thread-131762] [transport.py] [_log()] client lang: <none>
2025-12-31T17:29:09.439 [DEBUG] [Thread-131762] [transport.py] [_log()] server lang: <none>
2025-12-31T17:29:09.439 [DEBUG] [Thread-131762] [transport.py] [_log()] kex follows: False
2025-12-31T17:29:09.439 [DEBUG] [Thread-131762] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:29:09.439 [DEBUG] [Thread-131762] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:29:09.439 [DEBUG] [Thread-131762] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:29:09.440 [DEBUG] [Thread-131762] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:29:09.440 [DEBUG] [Thread-131762] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:29:09.440 [DEBUG] [Thread-131762] [transport.py] [_log()] Compression: none
2025-12-31T17:29:09.440 [DEBUG] [Thread-131762] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:29:09.498 [DEBUG] [Thread-131762] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:29:09.499 [DEBUG] [Thread-131762] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:29:09.499 [DEBUG] [Thread-131762] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T17:29:09.500 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T17:29:09.500 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:29:09.554 [DEBUG] [Thread-131762] [transport.py] [_log()] userauth is OK
2025-12-31T17:29:09.555 [DEBUG] [Thread-131762] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:29:09.555 [DEBUG] [Thread-131762] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:29:09.555 [DEBUG] [Thread-131762] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T17:29:09.555 [DEBUG] [Thread-131762] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:29:09.578 [INFO] [Thread-131762] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:29:09.578 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T17:29:09.578 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:29:10.396 [DEBUG] [Thread-131762] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:29:10.396 [DEBUG] [Thread-131762] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:29:10.444 [DEBUG] [Thread-131762] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:29:10.444 [DEBUG] [Thread-131762] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:29:10.453 [DEBUG] [Thread-131762] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:29:10.462 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:29:10.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T17:29:10.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T17:29:10.481 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:29:10.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:29:10.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:29:10.490 [DEBUG] [Thread-131762] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:29:15.957 [DEBUG] [Thread-131764 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:29:24.716 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:29:24.717 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:29:27.594 [DEBUG] [Thread-131765 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:29:31.015 [DEBUG] [Thread-131766 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:29:40.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T17:29:40.510 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T17:29:40.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T17:29:41.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 17, 29, 35), 25.95, 17.59, 0.0, 33.44, 24.24, 0, 0, 0, 2, 0, 0),)
2025-12-31T17:29:41.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 17:29:35
2025-12-31T17:29:41.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T17:29:41.501 [DEBUG] [Thread-131767] [transport.py] [_log()] starting thread (client mode): 0xb6ba17e0
2025-12-31T17:29:41.502 [DEBUG] [Thread-131767] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:29:41.523 [DEBUG] [Thread-131767] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T17:29:41.523 [INFO] [Thread-131767] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T17:29:41.524 [DEBUG] [Thread-131767] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:29:41.524 [DEBUG] [Thread-131767] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T17:29:41.525 [DEBUG] [Thread-131767] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:29:41.525 [DEBUG] [Thread-131767] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:29:41.525 [DEBUG] [Thread-131767] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:29:41.525 [DEBUG] [Thread-131767] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:29:41.525 [DEBUG] [Thread-131767] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:29:41.525 [DEBUG] [Thread-131767] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:29:41.525 [DEBUG] [Thread-131767] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:29:41.525 [DEBUG] [Thread-131767] [transport.py] [_log()] client lang: <none>
2025-12-31T17:29:41.525 [DEBUG] [Thread-131767] [transport.py] [_log()] server lang: <none>
2025-12-31T17:29:41.525 [DEBUG] [Thread-131767] [transport.py] [_log()] kex follows: False
2025-12-31T17:29:41.525 [DEBUG] [Thread-131767] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:29:41.525 [DEBUG] [Thread-131767] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:29:41.525 [DEBUG] [Thread-131767] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:29:41.525 [DEBUG] [Thread-131767] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:29:41.525 [DEBUG] [Thread-131767] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:29:41.525 [DEBUG] [Thread-131767] [transport.py] [_log()] Compression: none
2025-12-31T17:29:41.525 [DEBUG] [Thread-131767] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:29:41.533 [DEBUG] [Thread-131767] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:29:41.534 [DEBUG] [Thread-131767] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:29:41.534 [DEBUG] [Thread-131767] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T17:29:41.534 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T17:29:41.535 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:29:41.536 [DEBUG] [Thread-131767] [transport.py] [_log()] userauth is OK
2025-12-31T17:29:41.536 [DEBUG] [Thread-131767] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:29:41.536 [DEBUG] [Thread-131767] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:29:41.536 [DEBUG] [Thread-131767] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T17:29:41.536 [DEBUG] [Thread-131767] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:29:41.559 [INFO] [Thread-131767] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:29:41.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:29:42.336 [DEBUG] [Thread-131767] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:29:42.336 [DEBUG] [Thread-131767] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:29:42.337 [DEBUG] [Thread-131767] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T17:29:42.377 [DEBUG] [Thread-131767] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:29:42.377 [DEBUG] [Thread-131767] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:29:42.380 [DEBUG] [Thread-131767] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:29:42.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:29:42.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T17:29:42.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T17:29:42.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T17:29:42.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:29:42.400 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T17:29:42.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:29:42.400 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:29:42.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T17:29:42.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.645279 -999.00  +23.60  35.55     23   +1.80 1 2 2 1 1   887    0 20.83 -55.78 ----- 38.7 35.5 297.6 51.1 26.3 -16.5 26.3 -16.2 26.0 -16.2 26.4 -15.2
2025-12-31T17:29:42.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T17:29:42.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T17:29:42.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.645279
2025-12-31T17:29:42.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T17:29:42.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T17:29:42.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T17:29:42.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T17:29:42.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T17:29:42.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T17:29:35', tmtdew=25.95, humidity=17.59, cloud=0.0, wind=33.44, temperature=24.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T15:29:12.106', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T17:29:42.403 [DEBUG] [Thread-131767] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:29:42.486 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T17:29:42.496 [DEBUG] [Thread-131770] [transport.py] [_log()] starting thread (client mode): 0xb6b612a0
2025-12-31T17:29:42.496 [DEBUG] [Thread-131770] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:29:42.511 [DEBUG] [Thread-131770] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T17:29:42.511 [INFO] [Thread-131770] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T17:29:42.518 [DEBUG] [Thread-131770] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:29:42.519 [DEBUG] [Thread-131770] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T17:29:42.519 [DEBUG] [Thread-131770] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:29:42.519 [DEBUG] [Thread-131770] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:29:42.519 [DEBUG] [Thread-131770] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:29:42.519 [DEBUG] [Thread-131770] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:29:42.519 [DEBUG] [Thread-131770] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:29:42.519 [DEBUG] [Thread-131770] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:29:42.519 [DEBUG] [Thread-131770] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:29:42.519 [DEBUG] [Thread-131770] [transport.py] [_log()] client lang: <none>
2025-12-31T17:29:42.519 [DEBUG] [Thread-131770] [transport.py] [_log()] server lang: <none>
2025-12-31T17:29:42.519 [DEBUG] [Thread-131770] [transport.py] [_log()] kex follows: False
2025-12-31T17:29:42.519 [DEBUG] [Thread-131770] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:29:42.520 [DEBUG] [Thread-131770] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:29:42.520 [DEBUG] [Thread-131770] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:29:42.520 [DEBUG] [Thread-131770] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:29:42.520 [DEBUG] [Thread-131770] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:29:42.520 [DEBUG] [Thread-131770] [transport.py] [_log()] Compression: none
2025-12-31T17:29:42.520 [DEBUG] [Thread-131770] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:29:42.576 [DEBUG] [Thread-131770] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:29:42.577 [DEBUG] [Thread-131770] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:29:42.577 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T17:29:42.578 [DEBUG] [Thread-131770] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T17:29:42.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:29:42.633 [DEBUG] [Thread-131770] [transport.py] [_log()] userauth is OK
2025-12-31T17:29:42.633 [DEBUG] [Thread-131770] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:29:42.633 [DEBUG] [Thread-131770] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:29:42.633 [DEBUG] [Thread-131770] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T17:29:42.633 [DEBUG] [Thread-131770] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:29:42.652 [INFO] [Thread-131770] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:29:42.652 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T17:29:42.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:29:43.470 [DEBUG] [Thread-131770] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:29:43.471 [DEBUG] [Thread-131770] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:29:43.519 [DEBUG] [Thread-131770] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:29:43.519 [DEBUG] [Thread-131770] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:29:43.528 [DEBUG] [Thread-131770] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:29:43.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:29:43.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T17:29:43.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T17:29:43.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:29:43.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:29:43.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:29:43.565 [DEBUG] [Thread-131770] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:29:46.049 [DEBUG] [Thread-131772 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:30:01.099 [DEBUG] [Thread-131773 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:30:13.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T17:30:13.573 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T17:30:13.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T17:30:14.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 17, 30, 7), 26.03, 17.51, 0.0, 32.41, 24.34, 0, 0, 0, 2, 0, 0),)
2025-12-31T17:30:14.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 17:30:07
2025-12-31T17:30:14.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T17:30:14.565 [DEBUG] [Thread-131774] [transport.py] [_log()] starting thread (client mode): 0xb6b63910
2025-12-31T17:30:14.565 [DEBUG] [Thread-131774] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:30:14.586 [DEBUG] [Thread-131774] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T17:30:14.586 [INFO] [Thread-131774] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T17:30:14.589 [DEBUG] [Thread-131774] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:30:14.589 [DEBUG] [Thread-131774] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T17:30:14.589 [DEBUG] [Thread-131774] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:30:14.589 [DEBUG] [Thread-131774] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:30:14.589 [DEBUG] [Thread-131774] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:30:14.589 [DEBUG] [Thread-131774] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:30:14.589 [DEBUG] [Thread-131774] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:30:14.589 [DEBUG] [Thread-131774] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:30:14.590 [DEBUG] [Thread-131774] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:30:14.590 [DEBUG] [Thread-131774] [transport.py] [_log()] client lang: <none>
2025-12-31T17:30:14.590 [DEBUG] [Thread-131774] [transport.py] [_log()] server lang: <none>
2025-12-31T17:30:14.590 [DEBUG] [Thread-131774] [transport.py] [_log()] kex follows: False
2025-12-31T17:30:14.590 [DEBUG] [Thread-131774] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:30:14.590 [DEBUG] [Thread-131774] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:30:14.590 [DEBUG] [Thread-131774] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:30:14.590 [DEBUG] [Thread-131774] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:30:14.590 [DEBUG] [Thread-131774] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:30:14.590 [DEBUG] [Thread-131774] [transport.py] [_log()] Compression: none
2025-12-31T17:30:14.590 [DEBUG] [Thread-131774] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:30:14.606 [DEBUG] [Thread-131774] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:30:14.607 [DEBUG] [Thread-131774] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:30:14.607 [DEBUG] [Thread-131774] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T17:30:14.608 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T17:30:14.608 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:30:14.609 [DEBUG] [Thread-131774] [transport.py] [_log()] userauth is OK
2025-12-31T17:30:14.610 [DEBUG] [Thread-131774] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:30:14.610 [DEBUG] [Thread-131774] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:30:14.610 [DEBUG] [Thread-131774] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T17:30:14.610 [DEBUG] [Thread-131774] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:30:14.634 [INFO] [Thread-131774] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:30:14.634 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:30:16.126 [DEBUG] [Thread-131776 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:30:18.006 [DEBUG] [Thread-131774] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:30:18.006 [DEBUG] [Thread-131774] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:30:18.006 [DEBUG] [Thread-131774] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T17:30:18.047 [DEBUG] [Thread-131774] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:30:18.047 [DEBUG] [Thread-131774] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:30:18.051 [DEBUG] [Thread-131774] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:30:18.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:30:18.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T17:30:18.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T17:30:18.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T17:30:18.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:30:18.175 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T17:30:18.175 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:30:18.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:30:18.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T17:30:18.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.645627 -999.00  +23.60  34.15     23   +1.80 1 2 2 1 1   887    0 20.96 -54.60 ----- 37.5 34.1 296.2 42.6 26.2 -17.0 26.2 -16.1 25.9 -15.6 26.4 -15.4
2025-12-31T17:30:18.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T17:30:18.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T17:30:18.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.645627
2025-12-31T17:30:18.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T17:30:18.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T17:30:18.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T17:30:18.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T17:30:18.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T17:30:18.177 [DEBUG] [Thread-131774] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:30:18.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T17:30:07', tmtdew=26.03, humidity=17.51, cloud=0.0, wind=32.41, temperature=24.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T15:29:42.173', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T17:30:18.263 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T17:30:18.275 [DEBUG] [Thread-131778] [transport.py] [_log()] starting thread (client mode): 0xb6bbe620
2025-12-31T17:30:18.275 [DEBUG] [Thread-131778] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:30:18.290 [DEBUG] [Thread-131778] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T17:30:18.290 [INFO] [Thread-131778] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T17:30:18.298 [DEBUG] [Thread-131778] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:30:18.298 [DEBUG] [Thread-131778] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T17:30:18.298 [DEBUG] [Thread-131778] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:30:18.298 [DEBUG] [Thread-131778] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:30:18.298 [DEBUG] [Thread-131778] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:30:18.298 [DEBUG] [Thread-131778] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:30:18.298 [DEBUG] [Thread-131778] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:30:18.298 [DEBUG] [Thread-131778] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:30:18.298 [DEBUG] [Thread-131778] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:30:18.298 [DEBUG] [Thread-131778] [transport.py] [_log()] client lang: <none>
2025-12-31T17:30:18.298 [DEBUG] [Thread-131778] [transport.py] [_log()] server lang: <none>
2025-12-31T17:30:18.298 [DEBUG] [Thread-131778] [transport.py] [_log()] kex follows: False
2025-12-31T17:30:18.298 [DEBUG] [Thread-131778] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:30:18.298 [DEBUG] [Thread-131778] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:30:18.298 [DEBUG] [Thread-131778] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:30:18.299 [DEBUG] [Thread-131778] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:30:18.299 [DEBUG] [Thread-131778] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:30:18.299 [DEBUG] [Thread-131778] [transport.py] [_log()] Compression: none
2025-12-31T17:30:18.299 [DEBUG] [Thread-131778] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:30:18.355 [DEBUG] [Thread-131778] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:30:18.355 [DEBUG] [Thread-131778] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:30:18.356 [DEBUG] [Thread-131778] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T17:30:18.356 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T17:30:18.357 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:30:18.411 [DEBUG] [Thread-131778] [transport.py] [_log()] userauth is OK
2025-12-31T17:30:18.411 [DEBUG] [Thread-131778] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:30:18.411 [DEBUG] [Thread-131778] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:30:18.412 [DEBUG] [Thread-131778] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T17:30:18.412 [DEBUG] [Thread-131778] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:30:18.436 [INFO] [Thread-131778] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:30:18.436 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T17:30:18.437 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:30:19.249 [DEBUG] [Thread-131778] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:30:19.250 [DEBUG] [Thread-131778] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:30:19.298 [DEBUG] [Thread-131778] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:30:19.298 [DEBUG] [Thread-131778] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:30:19.308 [DEBUG] [Thread-131778] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:30:19.318 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:30:19.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T17:30:19.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T17:30:19.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:30:19.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:30:19.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:30:19.346 [DEBUG] [Thread-131778] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:30:24.856 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:30:24.857 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:30:27.647 [DEBUG] [Thread-131780 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:30:31.165 [DEBUG] [Thread-131781 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:30:46.214 [DEBUG] [Thread-131782 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:30:49.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T17:30:49.369 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T17:30:49.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T17:30:50.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 17, 30, 39), 25.76, 18.39, 0.0, 37.09, 24.66, 0, 0, 0, 2, 0, 0),)
2025-12-31T17:30:50.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 17:30:39
2025-12-31T17:30:50.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T17:30:50.349 [DEBUG] [Thread-131783] [transport.py] [_log()] starting thread (client mode): 0xb6bbaad0
2025-12-31T17:30:50.350 [DEBUG] [Thread-131783] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:30:50.370 [DEBUG] [Thread-131783] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T17:30:50.370 [INFO] [Thread-131783] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T17:30:50.373 [DEBUG] [Thread-131783] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:30:50.373 [DEBUG] [Thread-131783] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T17:30:50.373 [DEBUG] [Thread-131783] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:30:50.373 [DEBUG] [Thread-131783] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:30:50.373 [DEBUG] [Thread-131783] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:30:50.373 [DEBUG] [Thread-131783] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:30:50.373 [DEBUG] [Thread-131783] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:30:50.373 [DEBUG] [Thread-131783] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:30:50.373 [DEBUG] [Thread-131783] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:30:50.373 [DEBUG] [Thread-131783] [transport.py] [_log()] client lang: <none>
2025-12-31T17:30:50.373 [DEBUG] [Thread-131783] [transport.py] [_log()] server lang: <none>
2025-12-31T17:30:50.373 [DEBUG] [Thread-131783] [transport.py] [_log()] kex follows: False
2025-12-31T17:30:50.373 [DEBUG] [Thread-131783] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:30:50.373 [DEBUG] [Thread-131783] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:30:50.373 [DEBUG] [Thread-131783] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:30:50.373 [DEBUG] [Thread-131783] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:30:50.374 [DEBUG] [Thread-131783] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:30:50.374 [DEBUG] [Thread-131783] [transport.py] [_log()] Compression: none
2025-12-31T17:30:50.374 [DEBUG] [Thread-131783] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:30:50.391 [DEBUG] [Thread-131783] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:30:50.392 [DEBUG] [Thread-131783] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:30:50.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T17:30:50.393 [DEBUG] [Thread-131783] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T17:30:50.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:30:50.395 [DEBUG] [Thread-131783] [transport.py] [_log()] userauth is OK
2025-12-31T17:30:50.395 [DEBUG] [Thread-131783] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:30:50.395 [DEBUG] [Thread-131783] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:30:50.395 [DEBUG] [Thread-131783] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T17:30:50.395 [DEBUG] [Thread-131783] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:30:50.428 [INFO] [Thread-131783] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:30:50.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:30:51.025 [DEBUG] [Thread-131783] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:30:51.026 [DEBUG] [Thread-131783] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:30:51.026 [DEBUG] [Thread-131783] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T17:30:51.067 [DEBUG] [Thread-131783] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:30:51.067 [DEBUG] [Thread-131783] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:30:51.070 [DEBUG] [Thread-131783] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:30:51.083 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:30:51.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T17:30:51.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T17:30:51.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T17:30:51.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:30:51.095 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T17:30:51.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:30:51.095 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:30:51.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T17:30:51.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.645974 -999.00  +23.60  34.01     23   +1.80 1 2 2 1 1   887    0 20.89 -62.47 ----- 27.8 34.0 292.6 42.6 26.1 -16.3 26.1 -16.6 25.9 -15.9 26.2 -15.4
2025-12-31T17:30:51.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T17:30:51.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T17:30:51.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.645974
2025-12-31T17:30:51.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T17:30:51.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T17:30:51.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T17:30:51.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T17:30:51.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T17:30:51.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T17:30:39', tmtdew=25.76, humidity=18.39, cloud=0.0, wind=37.09, temperature=24.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T15:30:12.154', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T17:30:51.098 [DEBUG] [Thread-131783] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:30:51.181 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T17:30:51.194 [DEBUG] [Thread-131786] [transport.py] [_log()] starting thread (client mode): 0xb6ba21d0
2025-12-31T17:30:51.194 [DEBUG] [Thread-131786] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:30:51.208 [DEBUG] [Thread-131786] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T17:30:51.208 [INFO] [Thread-131786] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T17:30:51.216 [DEBUG] [Thread-131786] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:30:51.216 [DEBUG] [Thread-131786] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T17:30:51.216 [DEBUG] [Thread-131786] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:30:51.216 [DEBUG] [Thread-131786] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:30:51.216 [DEBUG] [Thread-131786] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:30:51.216 [DEBUG] [Thread-131786] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:30:51.216 [DEBUG] [Thread-131786] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:30:51.216 [DEBUG] [Thread-131786] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:30:51.216 [DEBUG] [Thread-131786] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:30:51.216 [DEBUG] [Thread-131786] [transport.py] [_log()] client lang: <none>
2025-12-31T17:30:51.216 [DEBUG] [Thread-131786] [transport.py] [_log()] server lang: <none>
2025-12-31T17:30:51.217 [DEBUG] [Thread-131786] [transport.py] [_log()] kex follows: False
2025-12-31T17:30:51.217 [DEBUG] [Thread-131786] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:30:51.217 [DEBUG] [Thread-131786] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:30:51.217 [DEBUG] [Thread-131786] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:30:51.217 [DEBUG] [Thread-131786] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:30:51.217 [DEBUG] [Thread-131786] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:30:51.217 [DEBUG] [Thread-131786] [transport.py] [_log()] Compression: none
2025-12-31T17:30:51.217 [DEBUG] [Thread-131786] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:30:51.273 [DEBUG] [Thread-131786] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:30:51.274 [DEBUG] [Thread-131786] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:30:51.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T17:30:51.275 [DEBUG] [Thread-131786] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T17:30:51.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:30:51.329 [DEBUG] [Thread-131786] [transport.py] [_log()] userauth is OK
2025-12-31T17:30:51.329 [DEBUG] [Thread-131786] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:30:51.330 [DEBUG] [Thread-131786] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:30:51.330 [DEBUG] [Thread-131786] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T17:30:51.330 [DEBUG] [Thread-131786] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:30:51.349 [INFO] [Thread-131786] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:30:51.350 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T17:30:51.350 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:30:52.189 [DEBUG] [Thread-131786] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:30:52.189 [DEBUG] [Thread-131786] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:30:52.238 [DEBUG] [Thread-131786] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:30:52.238 [DEBUG] [Thread-131786] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:30:52.247 [DEBUG] [Thread-131786] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:30:52.256 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:30:52.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T17:30:52.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T17:30:52.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:30:52.273 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:30:52.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:30:52.281 [DEBUG] [Thread-131786] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:31:01.252 [DEBUG] [Thread-131788 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:31:16.301 [DEBUG] [Thread-131789 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:31:22.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T17:31:22.304 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T17:31:22.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T17:31:23.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 17, 31, 11), 25.51, 18.64, 0.0, 35.96, 24.37, 0, 0, 0, 2, 0, 0),)
2025-12-31T17:31:23.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 17:31:11
2025-12-31T17:31:23.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T17:31:23.339 [DEBUG] [Thread-131790] [transport.py] [_log()] starting thread (client mode): 0xb6ba3e80
2025-12-31T17:31:23.339 [DEBUG] [Thread-131790] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:31:23.361 [DEBUG] [Thread-131790] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T17:31:23.361 [INFO] [Thread-131790] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T17:31:23.365 [DEBUG] [Thread-131790] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:31:23.365 [DEBUG] [Thread-131790] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T17:31:23.365 [DEBUG] [Thread-131790] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:31:23.365 [DEBUG] [Thread-131790] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:31:23.365 [DEBUG] [Thread-131790] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:31:23.365 [DEBUG] [Thread-131790] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:31:23.365 [DEBUG] [Thread-131790] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:31:23.365 [DEBUG] [Thread-131790] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:31:23.365 [DEBUG] [Thread-131790] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:31:23.365 [DEBUG] [Thread-131790] [transport.py] [_log()] client lang: <none>
2025-12-31T17:31:23.365 [DEBUG] [Thread-131790] [transport.py] [_log()] server lang: <none>
2025-12-31T17:31:23.365 [DEBUG] [Thread-131790] [transport.py] [_log()] kex follows: False
2025-12-31T17:31:23.365 [DEBUG] [Thread-131790] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:31:23.365 [DEBUG] [Thread-131790] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:31:23.365 [DEBUG] [Thread-131790] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:31:23.365 [DEBUG] [Thread-131790] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:31:23.365 [DEBUG] [Thread-131790] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:31:23.365 [DEBUG] [Thread-131790] [transport.py] [_log()] Compression: none
2025-12-31T17:31:23.365 [DEBUG] [Thread-131790] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:31:23.372 [DEBUG] [Thread-131790] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:31:23.372 [DEBUG] [Thread-131790] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:31:23.372 [DEBUG] [Thread-131790] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T17:31:23.372 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T17:31:23.372 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:31:23.373 [DEBUG] [Thread-131790] [transport.py] [_log()] userauth is OK
2025-12-31T17:31:23.373 [DEBUG] [Thread-131790] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:31:23.373 [DEBUG] [Thread-131790] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:31:23.373 [DEBUG] [Thread-131790] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T17:31:23.373 [DEBUG] [Thread-131790] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:31:23.389 [INFO] [Thread-131790] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:31:23.389 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:31:24.156 [DEBUG] [Thread-131790] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:31:24.157 [DEBUG] [Thread-131790] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:31:24.157 [DEBUG] [Thread-131790] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T17:31:24.198 [DEBUG] [Thread-131790] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:31:24.198 [DEBUG] [Thread-131790] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:31:24.202 [DEBUG] [Thread-131790] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:31:24.208 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:31:24.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T17:31:24.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T17:31:24.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T17:31:24.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:31:24.220 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T17:31:24.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:31:24.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:31:24.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T17:31:24.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.646321 -999.00  +24.00  21.81     24   +2.40 1 2 1 1 1   887    0 21.32 -58.05 ----- 23.9 21.8 291.2 35.4 26.2 -16.4 26.1 -16.2 25.8 -16.8 26.2 -15.4
2025-12-31T17:31:24.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T17:31:24.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T17:31:24.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.646321
2025-12-31T17:31:24.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T17:31:24.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T17:31:24.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T17:31:24.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T17:31:24.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T17:31:24.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T17:31:11', tmtdew=25.51, humidity=18.64, cloud=0.0, wind=35.96, temperature=24.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T15:30:42.134', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T17:31:24.223 [DEBUG] [Thread-131790] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:31:24.306 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T17:31:24.318 [DEBUG] [Thread-131793] [transport.py] [_log()] starting thread (client mode): 0xb9590be0
2025-12-31T17:31:24.318 [DEBUG] [Thread-131793] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:31:24.332 [DEBUG] [Thread-131793] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T17:31:24.332 [INFO] [Thread-131793] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T17:31:24.340 [DEBUG] [Thread-131793] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:31:24.340 [DEBUG] [Thread-131793] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T17:31:24.341 [DEBUG] [Thread-131793] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:31:24.341 [DEBUG] [Thread-131793] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:31:24.341 [DEBUG] [Thread-131793] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:31:24.341 [DEBUG] [Thread-131793] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:31:24.341 [DEBUG] [Thread-131793] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:31:24.341 [DEBUG] [Thread-131793] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:31:24.341 [DEBUG] [Thread-131793] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:31:24.341 [DEBUG] [Thread-131793] [transport.py] [_log()] client lang: <none>
2025-12-31T17:31:24.341 [DEBUG] [Thread-131793] [transport.py] [_log()] server lang: <none>
2025-12-31T17:31:24.342 [DEBUG] [Thread-131793] [transport.py] [_log()] kex follows: False
2025-12-31T17:31:24.342 [DEBUG] [Thread-131793] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:31:24.342 [DEBUG] [Thread-131793] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:31:24.342 [DEBUG] [Thread-131793] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:31:24.342 [DEBUG] [Thread-131793] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:31:24.342 [DEBUG] [Thread-131793] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:31:24.342 [DEBUG] [Thread-131793] [transport.py] [_log()] Compression: none
2025-12-31T17:31:24.342 [DEBUG] [Thread-131793] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:31:24.399 [DEBUG] [Thread-131793] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:31:24.400 [DEBUG] [Thread-131793] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:31:24.401 [DEBUG] [Thread-131793] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T17:31:24.401 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T17:31:24.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:31:24.455 [DEBUG] [Thread-131793] [transport.py] [_log()] userauth is OK
2025-12-31T17:31:24.456 [DEBUG] [Thread-131793] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:31:24.456 [DEBUG] [Thread-131793] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:31:24.456 [DEBUG] [Thread-131793] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T17:31:24.457 [DEBUG] [Thread-131793] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:31:24.480 [INFO] [Thread-131793] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:31:24.480 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T17:31:24.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:31:24.997 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:31:24.999 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:31:25.311 [DEBUG] [Thread-131793] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:31:25.311 [DEBUG] [Thread-131793] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:31:25.359 [DEBUG] [Thread-131793] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:31:25.359 [DEBUG] [Thread-131793] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:31:25.369 [DEBUG] [Thread-131793] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:31:25.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:31:25.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T17:31:25.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-12-31T17:31:25.397 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:31:25.398 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:31:25.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:31:25.406 [DEBUG] [Thread-131793] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:31:27.702 [DEBUG] [Thread-131795 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:31:31.333 [DEBUG] [Thread-131796 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:31:46.380 [DEBUG] [Thread-131797 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:31:55.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T17:31:55.403 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T17:31:55.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T17:31:56.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 17, 31, 43), 24.93, 19.16, 0.0, 31.65, 24.11, 0, 0, 0, 2, 0, 0),)
2025-12-31T17:31:56.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 17:31:43
2025-12-31T17:31:56.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T17:31:56.423 [DEBUG] [Thread-131798] [transport.py] [_log()] starting thread (client mode): 0xb6bbbfd0
2025-12-31T17:31:56.423 [DEBUG] [Thread-131798] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:31:56.443 [DEBUG] [Thread-131798] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T17:31:56.443 [INFO] [Thread-131798] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T17:31:56.445 [DEBUG] [Thread-131798] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:31:56.445 [DEBUG] [Thread-131798] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T17:31:56.445 [DEBUG] [Thread-131798] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:31:56.445 [DEBUG] [Thread-131798] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:31:56.445 [DEBUG] [Thread-131798] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:31:56.445 [DEBUG] [Thread-131798] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:31:56.445 [DEBUG] [Thread-131798] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:31:56.445 [DEBUG] [Thread-131798] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:31:56.445 [DEBUG] [Thread-131798] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:31:56.446 [DEBUG] [Thread-131798] [transport.py] [_log()] client lang: <none>
2025-12-31T17:31:56.446 [DEBUG] [Thread-131798] [transport.py] [_log()] server lang: <none>
2025-12-31T17:31:56.446 [DEBUG] [Thread-131798] [transport.py] [_log()] kex follows: False
2025-12-31T17:31:56.446 [DEBUG] [Thread-131798] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:31:56.446 [DEBUG] [Thread-131798] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:31:56.446 [DEBUG] [Thread-131798] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:31:56.446 [DEBUG] [Thread-131798] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:31:56.446 [DEBUG] [Thread-131798] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:31:56.446 [DEBUG] [Thread-131798] [transport.py] [_log()] Compression: none
2025-12-31T17:31:56.446 [DEBUG] [Thread-131798] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:31:56.453 [DEBUG] [Thread-131798] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:31:56.453 [DEBUG] [Thread-131798] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:31:56.453 [DEBUG] [Thread-131798] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T17:31:56.454 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T17:31:56.454 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:31:56.454 [DEBUG] [Thread-131798] [transport.py] [_log()] userauth is OK
2025-12-31T17:31:56.454 [DEBUG] [Thread-131798] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:31:56.454 [DEBUG] [Thread-131798] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:31:56.454 [DEBUG] [Thread-131798] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T17:31:56.454 [DEBUG] [Thread-131798] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:31:56.464 [INFO] [Thread-131798] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:31:56.464 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:31:57.078 [DEBUG] [Thread-131798] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:31:57.078 [DEBUG] [Thread-131798] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:31:57.078 [DEBUG] [Thread-131798] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T17:31:57.120 [DEBUG] [Thread-131798] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:31:57.120 [DEBUG] [Thread-131798] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:31:57.122 [DEBUG] [Thread-131798] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:31:57.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:31:57.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T17:31:57.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T17:31:57.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T17:31:57.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:31:57.140 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T17:31:57.140 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:31:57.140 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:31:57.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T17:31:57.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.646668 -999.00  +23.90  22.26     25   +3.10 1 2 1 1 1   887    0 20.62 -62.84 ----- 25.1 22.3 268.4 31.4 26.1 -18.1 26.2 -16.8 25.7 -16.2 26.1 -16.2
2025-12-31T17:31:57.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T17:31:57.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T17:31:57.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.646668
2025-12-31T17:31:57.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T17:31:57.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T17:31:57.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T17:31:57.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T17:31:57.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T17:31:57.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T17:31:43', tmtdew=24.93, humidity=19.16, cloud=0.0, wind=31.65, temperature=24.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T15:31:12.115', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T17:31:57.142 [DEBUG] [Thread-131798] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:31:57.217 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T17:31:57.230 [DEBUG] [Thread-131801] [transport.py] [_log()] starting thread (client mode): 0xb6ba0eb0
2025-12-31T17:31:57.230 [DEBUG] [Thread-131801] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:31:57.245 [DEBUG] [Thread-131801] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T17:31:57.245 [INFO] [Thread-131801] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T17:31:57.252 [DEBUG] [Thread-131801] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:31:57.253 [DEBUG] [Thread-131801] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T17:31:57.253 [DEBUG] [Thread-131801] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:31:57.253 [DEBUG] [Thread-131801] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:31:57.253 [DEBUG] [Thread-131801] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:31:57.253 [DEBUG] [Thread-131801] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:31:57.253 [DEBUG] [Thread-131801] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:31:57.253 [DEBUG] [Thread-131801] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:31:57.253 [DEBUG] [Thread-131801] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:31:57.253 [DEBUG] [Thread-131801] [transport.py] [_log()] client lang: <none>
2025-12-31T17:31:57.253 [DEBUG] [Thread-131801] [transport.py] [_log()] server lang: <none>
2025-12-31T17:31:57.253 [DEBUG] [Thread-131801] [transport.py] [_log()] kex follows: False
2025-12-31T17:31:57.253 [DEBUG] [Thread-131801] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:31:57.253 [DEBUG] [Thread-131801] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:31:57.253 [DEBUG] [Thread-131801] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:31:57.253 [DEBUG] [Thread-131801] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:31:57.253 [DEBUG] [Thread-131801] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:31:57.253 [DEBUG] [Thread-131801] [transport.py] [_log()] Compression: none
2025-12-31T17:31:57.253 [DEBUG] [Thread-131801] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:31:57.312 [DEBUG] [Thread-131801] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:31:57.312 [DEBUG] [Thread-131801] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:31:57.312 [DEBUG] [Thread-131801] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T17:31:57.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T17:31:57.313 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:31:57.370 [DEBUG] [Thread-131801] [transport.py] [_log()] userauth is OK
2025-12-31T17:31:57.370 [DEBUG] [Thread-131801] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:31:57.370 [DEBUG] [Thread-131801] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:31:57.370 [DEBUG] [Thread-131801] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T17:31:57.370 [DEBUG] [Thread-131801] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:31:57.388 [INFO] [Thread-131801] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:31:57.388 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T17:31:57.388 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:31:58.256 [DEBUG] [Thread-131801] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:31:58.256 [DEBUG] [Thread-131801] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:31:58.304 [DEBUG] [Thread-131801] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:31:58.304 [DEBUG] [Thread-131801] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:31:58.313 [DEBUG] [Thread-131801] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:31:58.321 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:31:58.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T17:31:58.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T17:31:58.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:31:58.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:31:58.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:31:58.345 [DEBUG] [Thread-131801] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:32:01.412 [DEBUG] [Thread-131803 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:32:16.452 [DEBUG] [Thread-131804 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:32:25.141 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:32:25.142 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:32:27.766 [DEBUG] [Thread-131805 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:32:28.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T17:32:28.368 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T17:32:28.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T17:32:29.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 17, 32, 15), 24.87, 19.21, 0.0, 28.42, 23.99, 0, 0, 0, 2, 0, 0),)
2025-12-31T17:32:29.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 17:32:15
2025-12-31T17:32:29.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T17:32:29.353 [DEBUG] [Thread-131806] [transport.py] [_log()] starting thread (client mode): 0xb6bbcfd0
2025-12-31T17:32:29.353 [DEBUG] [Thread-131806] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:32:29.373 [DEBUG] [Thread-131806] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T17:32:29.374 [INFO] [Thread-131806] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T17:32:29.375 [DEBUG] [Thread-131806] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:32:29.375 [DEBUG] [Thread-131806] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T17:32:29.375 [DEBUG] [Thread-131806] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:32:29.375 [DEBUG] [Thread-131806] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:32:29.375 [DEBUG] [Thread-131806] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:32:29.375 [DEBUG] [Thread-131806] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:32:29.375 [DEBUG] [Thread-131806] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:32:29.375 [DEBUG] [Thread-131806] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:32:29.375 [DEBUG] [Thread-131806] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:32:29.375 [DEBUG] [Thread-131806] [transport.py] [_log()] client lang: <none>
2025-12-31T17:32:29.375 [DEBUG] [Thread-131806] [transport.py] [_log()] server lang: <none>
2025-12-31T17:32:29.375 [DEBUG] [Thread-131806] [transport.py] [_log()] kex follows: False
2025-12-31T17:32:29.375 [DEBUG] [Thread-131806] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:32:29.375 [DEBUG] [Thread-131806] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:32:29.375 [DEBUG] [Thread-131806] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:32:29.375 [DEBUG] [Thread-131806] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:32:29.376 [DEBUG] [Thread-131806] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:32:29.376 [DEBUG] [Thread-131806] [transport.py] [_log()] Compression: none
2025-12-31T17:32:29.376 [DEBUG] [Thread-131806] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:32:29.391 [DEBUG] [Thread-131806] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:32:29.392 [DEBUG] [Thread-131806] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:32:29.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T17:32:29.393 [DEBUG] [Thread-131806] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T17:32:29.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:32:29.395 [DEBUG] [Thread-131806] [transport.py] [_log()] userauth is OK
2025-12-31T17:32:29.395 [DEBUG] [Thread-131806] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:32:29.395 [DEBUG] [Thread-131806] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:32:29.395 [DEBUG] [Thread-131806] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T17:32:29.395 [DEBUG] [Thread-131806] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:32:29.419 [INFO] [Thread-131806] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:32:29.419 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:32:30.171 [DEBUG] [Thread-131806] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:32:30.171 [DEBUG] [Thread-131806] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:32:30.172 [DEBUG] [Thread-131806] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T17:32:30.212 [DEBUG] [Thread-131806] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:32:30.212 [DEBUG] [Thread-131806] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:32:30.218 [DEBUG] [Thread-131806] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:32:30.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:32:30.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T17:32:30.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T17:32:30.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T17:32:30.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:32:30.243 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T17:32:30.243 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:32:30.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:32:30.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T17:32:30.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.647015 -999.00  +23.90  23.36     25   +3.20 1 2 1 1 1   887    0 20.54 -72.31 ----- 28.5 23.4 281.4 35.8 26.1 -17.1 26.1 -16.8 25.7 -17.1 26.2 -16.5
2025-12-31T17:32:30.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T17:32:30.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T17:32:30.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.647015
2025-12-31T17:32:30.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T17:32:30.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T17:32:30.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T17:32:30.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T17:32:30.246 [DEBUG] [Thread-131806] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:32:30.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T17:32:30.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T17:32:15', tmtdew=24.87, humidity=19.21, cloud=0.0, wind=28.42, temperature=23.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T15:31:42.096', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T17:32:30.330 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T17:32:30.342 [DEBUG] [Thread-131809] [transport.py] [_log()] starting thread (client mode): 0xb95f3940
2025-12-31T17:32:30.342 [DEBUG] [Thread-131809] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:32:30.357 [DEBUG] [Thread-131809] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T17:32:30.357 [INFO] [Thread-131809] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T17:32:30.365 [DEBUG] [Thread-131809] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:32:30.365 [DEBUG] [Thread-131809] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T17:32:30.366 [DEBUG] [Thread-131809] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:32:30.366 [DEBUG] [Thread-131809] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:32:30.366 [DEBUG] [Thread-131809] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:32:30.366 [DEBUG] [Thread-131809] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:32:30.366 [DEBUG] [Thread-131809] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:32:30.366 [DEBUG] [Thread-131809] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:32:30.366 [DEBUG] [Thread-131809] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:32:30.366 [DEBUG] [Thread-131809] [transport.py] [_log()] client lang: <none>
2025-12-31T17:32:30.367 [DEBUG] [Thread-131809] [transport.py] [_log()] server lang: <none>
2025-12-31T17:32:30.367 [DEBUG] [Thread-131809] [transport.py] [_log()] kex follows: False
2025-12-31T17:32:30.367 [DEBUG] [Thread-131809] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:32:30.367 [DEBUG] [Thread-131809] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:32:30.367 [DEBUG] [Thread-131809] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:32:30.367 [DEBUG] [Thread-131809] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:32:30.367 [DEBUG] [Thread-131809] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:32:30.367 [DEBUG] [Thread-131809] [transport.py] [_log()] Compression: none
2025-12-31T17:32:30.368 [DEBUG] [Thread-131809] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:32:30.426 [DEBUG] [Thread-131809] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:32:30.426 [DEBUG] [Thread-131809] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:32:30.427 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T17:32:30.427 [DEBUG] [Thread-131809] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T17:32:30.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:32:30.481 [DEBUG] [Thread-131809] [transport.py] [_log()] userauth is OK
2025-12-31T17:32:30.481 [DEBUG] [Thread-131809] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:32:30.482 [DEBUG] [Thread-131809] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:32:30.482 [DEBUG] [Thread-131809] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T17:32:30.482 [DEBUG] [Thread-131809] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:32:30.501 [INFO] [Thread-131809] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:32:30.501 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T17:32:30.502 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:32:31.332 [DEBUG] [Thread-131809] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:32:31.332 [DEBUG] [Thread-131809] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:32:31.380 [DEBUG] [Thread-131809] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:32:31.380 [DEBUG] [Thread-131809] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:32:31.389 [DEBUG] [Thread-131809] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:32:31.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:32:31.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T17:32:31.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-12-31T17:32:31.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:32:31.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:32:31.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:32:31.426 [DEBUG] [Thread-131809] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:32:31.489 [DEBUG] [Thread-131811 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:32:46.543 [DEBUG] [Thread-131812 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:33:01.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T17:33:01.448 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T17:33:01.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T17:33:01.580 [DEBUG] [Thread-131813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:33:02.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 17, 32, 47), 24.43, 20.0, 0.0, 31.53, 23.79, 0, 0, 0, 2, 0, 0),)
2025-12-31T17:33:02.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 17:32:47
2025-12-31T17:33:02.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T17:33:02.469 [DEBUG] [Thread-131814] [transport.py] [_log()] starting thread (client mode): 0xb6bbd840
2025-12-31T17:33:02.469 [DEBUG] [Thread-131814] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:33:02.489 [DEBUG] [Thread-131814] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T17:33:02.489 [INFO] [Thread-131814] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T17:33:02.490 [DEBUG] [Thread-131814] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:33:02.490 [DEBUG] [Thread-131814] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T17:33:02.490 [DEBUG] [Thread-131814] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:33:02.490 [DEBUG] [Thread-131814] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:33:02.490 [DEBUG] [Thread-131814] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:33:02.490 [DEBUG] [Thread-131814] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:33:02.490 [DEBUG] [Thread-131814] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:33:02.490 [DEBUG] [Thread-131814] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:33:02.490 [DEBUG] [Thread-131814] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:33:02.490 [DEBUG] [Thread-131814] [transport.py] [_log()] client lang: <none>
2025-12-31T17:33:02.490 [DEBUG] [Thread-131814] [transport.py] [_log()] server lang: <none>
2025-12-31T17:33:02.490 [DEBUG] [Thread-131814] [transport.py] [_log()] kex follows: False
2025-12-31T17:33:02.490 [DEBUG] [Thread-131814] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:33:02.491 [DEBUG] [Thread-131814] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:33:02.491 [DEBUG] [Thread-131814] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:33:02.491 [DEBUG] [Thread-131814] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:33:02.491 [DEBUG] [Thread-131814] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:33:02.491 [DEBUG] [Thread-131814] [transport.py] [_log()] Compression: none
2025-12-31T17:33:02.491 [DEBUG] [Thread-131814] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:33:02.501 [DEBUG] [Thread-131814] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:33:02.501 [DEBUG] [Thread-131814] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:33:02.502 [DEBUG] [Thread-131814] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T17:33:02.502 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T17:33:02.502 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:33:02.503 [DEBUG] [Thread-131814] [transport.py] [_log()] userauth is OK
2025-12-31T17:33:02.503 [DEBUG] [Thread-131814] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:33:02.503 [DEBUG] [Thread-131814] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:33:02.503 [DEBUG] [Thread-131814] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T17:33:02.503 [DEBUG] [Thread-131814] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:33:02.517 [INFO] [Thread-131814] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:33:02.518 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:33:03.151 [DEBUG] [Thread-131814] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:33:03.152 [DEBUG] [Thread-131814] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:33:03.152 [DEBUG] [Thread-131814] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T17:33:03.193 [DEBUG] [Thread-131814] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:33:03.193 [DEBUG] [Thread-131814] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:33:03.196 [DEBUG] [Thread-131814] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:33:03.208 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:33:03.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T17:33:03.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T17:33:03.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T17:33:03.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:33:03.218 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T17:33:03.218 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:33:03.218 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:33:03.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T17:33:03.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.647363 -999.00  +23.70  28.47     26   +3.30 1 2 1 1 1   887    0 19.76 -86.87 ----- 24.0 28.5 270.0 31.6 26.1 -18.3 26.1 -17.8 25.5 -19.6 26.0 -16.5
2025-12-31T17:33:03.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T17:33:03.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T17:33:03.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.647363
2025-12-31T17:33:03.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T17:33:03.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T17:33:03.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T17:33:03.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T17:33:03.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T17:33:03.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T17:32:47', tmtdew=24.43, humidity=20.0, cloud=0.0, wind=31.53, temperature=23.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T15:32:12.163', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T17:33:03.221 [DEBUG] [Thread-131814] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:33:03.304 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T17:33:03.317 [DEBUG] [Thread-131817] [transport.py] [_log()] starting thread (client mode): 0xb6b635e0
2025-12-31T17:33:03.317 [DEBUG] [Thread-131817] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:33:03.332 [DEBUG] [Thread-131817] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T17:33:03.332 [INFO] [Thread-131817] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T17:33:03.340 [DEBUG] [Thread-131817] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:33:03.340 [DEBUG] [Thread-131817] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T17:33:03.340 [DEBUG] [Thread-131817] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:33:03.340 [DEBUG] [Thread-131817] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:33:03.340 [DEBUG] [Thread-131817] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:33:03.340 [DEBUG] [Thread-131817] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:33:03.340 [DEBUG] [Thread-131817] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:33:03.340 [DEBUG] [Thread-131817] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:33:03.341 [DEBUG] [Thread-131817] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:33:03.341 [DEBUG] [Thread-131817] [transport.py] [_log()] client lang: <none>
2025-12-31T17:33:03.341 [DEBUG] [Thread-131817] [transport.py] [_log()] server lang: <none>
2025-12-31T17:33:03.341 [DEBUG] [Thread-131817] [transport.py] [_log()] kex follows: False
2025-12-31T17:33:03.341 [DEBUG] [Thread-131817] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:33:03.341 [DEBUG] [Thread-131817] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:33:03.341 [DEBUG] [Thread-131817] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:33:03.341 [DEBUG] [Thread-131817] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:33:03.341 [DEBUG] [Thread-131817] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:33:03.341 [DEBUG] [Thread-131817] [transport.py] [_log()] Compression: none
2025-12-31T17:33:03.341 [DEBUG] [Thread-131817] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:33:03.399 [DEBUG] [Thread-131817] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:33:03.400 [DEBUG] [Thread-131817] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:33:03.401 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T17:33:03.401 [DEBUG] [Thread-131817] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T17:33:03.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:33:03.456 [DEBUG] [Thread-131817] [transport.py] [_log()] userauth is OK
2025-12-31T17:33:03.456 [DEBUG] [Thread-131817] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:33:03.456 [DEBUG] [Thread-131817] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:33:03.456 [DEBUG] [Thread-131817] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T17:33:03.457 [DEBUG] [Thread-131817] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:33:03.481 [INFO] [Thread-131817] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:33:03.481 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T17:33:03.482 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:33:04.295 [DEBUG] [Thread-131817] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:33:04.296 [DEBUG] [Thread-131817] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:33:04.344 [DEBUG] [Thread-131817] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:33:04.344 [DEBUG] [Thread-131817] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:33:04.354 [DEBUG] [Thread-131817] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:33:04.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:33: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')
2025-12-31T17:33:04.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T17:33:04.381 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:33:04.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:33:04.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:33:04.389 [DEBUG] [Thread-131817] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:33:16.609 [DEBUG] [Thread-131819 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:33:25.281 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:33:25.282 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:33:27.813 [DEBUG] [Thread-131820 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:33:31.651 [DEBUG] [Thread-131821 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:33:34.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T17:33:34.384 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T17:33:34.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T17:33:35.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 17, 33, 19), 24.01, 20.6, 0.0, 31.78, 23.89, 0, 0, 0, 2, 0, 0),)
2025-12-31T17:33:35.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 17:33:19
2025-12-31T17:33:35.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T17:33:35.376 [DEBUG] [Thread-131822] [transport.py] [_log()] starting thread (client mode): 0xb9590af0
2025-12-31T17:33:35.376 [DEBUG] [Thread-131822] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:33:35.399 [DEBUG] [Thread-131822] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T17:33:35.399 [INFO] [Thread-131822] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T17:33:35.402 [DEBUG] [Thread-131822] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:33:35.402 [DEBUG] [Thread-131822] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T17:33:35.402 [DEBUG] [Thread-131822] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:33:35.402 [DEBUG] [Thread-131822] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:33:35.402 [DEBUG] [Thread-131822] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:33:35.402 [DEBUG] [Thread-131822] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:33:35.402 [DEBUG] [Thread-131822] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:33:35.402 [DEBUG] [Thread-131822] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:33:35.402 [DEBUG] [Thread-131822] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:33:35.402 [DEBUG] [Thread-131822] [transport.py] [_log()] client lang: <none>
2025-12-31T17:33:35.403 [DEBUG] [Thread-131822] [transport.py] [_log()] server lang: <none>
2025-12-31T17:33:35.403 [DEBUG] [Thread-131822] [transport.py] [_log()] kex follows: False
2025-12-31T17:33:35.403 [DEBUG] [Thread-131822] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:33:35.403 [DEBUG] [Thread-131822] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:33:35.403 [DEBUG] [Thread-131822] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:33:35.403 [DEBUG] [Thread-131822] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:33:35.403 [DEBUG] [Thread-131822] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:33:35.403 [DEBUG] [Thread-131822] [transport.py] [_log()] Compression: none
2025-12-31T17:33:35.403 [DEBUG] [Thread-131822] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:33:35.419 [DEBUG] [Thread-131822] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:33:35.420 [DEBUG] [Thread-131822] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:33:35.420 [DEBUG] [Thread-131822] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T17:33:35.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T17:33:35.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:33:35.422 [DEBUG] [Thread-131822] [transport.py] [_log()] userauth is OK
2025-12-31T17:33:35.422 [DEBUG] [Thread-131822] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:33:35.423 [DEBUG] [Thread-131822] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:33:35.423 [DEBUG] [Thread-131822] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T17:33:35.423 [DEBUG] [Thread-131822] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:33:35.443 [INFO] [Thread-131822] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:33:35.444 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:33:36.268 [DEBUG] [Thread-131822] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:33:36.268 [DEBUG] [Thread-131822] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:33:36.269 [DEBUG] [Thread-131822] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T17:33:36.309 [DEBUG] [Thread-131822] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:33:36.309 [DEBUG] [Thread-131822] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:33:36.314 [DEBUG] [Thread-131822] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:33:36.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:33:36.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T17:33:36.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T17:33:36.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T17:33:36.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:33:36.334 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T17:33:36.334 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:33:36.335 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:33:36.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T17:33:36.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.647710 -999.00  +23.60  22.85     26   +3.30 1 2 1 1 1   887    0 19.59 -87.81 ----- 23.8 22.9 275.6 29.4 26.0 -18.4 25.9 -17.8 25.4 -17.7 25.9 -16.7
2025-12-31T17:33:36.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T17:33:36.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T17:33:36.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.647710
2025-12-31T17:33:36.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T17:33:36.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T17:33:36.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T17:33:36.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T17:33:36.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T17:33:36.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T17:33:19', tmtdew=24.01, humidity=20.6, cloud=0.0, wind=31.78, temperature=23.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T15:32:42.144', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T17:33:36.337 [DEBUG] [Thread-131822] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:33:36.421 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T17:33:36.432 [DEBUG] [Thread-131825] [transport.py] [_log()] starting thread (client mode): 0xb9590be0
2025-12-31T17:33:36.432 [DEBUG] [Thread-131825] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:33:36.450 [DEBUG] [Thread-131825] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T17:33:36.450 [INFO] [Thread-131825] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T17:33:36.458 [DEBUG] [Thread-131825] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:33:36.458 [DEBUG] [Thread-131825] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T17:33:36.458 [DEBUG] [Thread-131825] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:33:36.458 [DEBUG] [Thread-131825] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:33:36.459 [DEBUG] [Thread-131825] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:33:36.459 [DEBUG] [Thread-131825] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:33:36.459 [DEBUG] [Thread-131825] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:33:36.459 [DEBUG] [Thread-131825] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:33:36.459 [DEBUG] [Thread-131825] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:33:36.459 [DEBUG] [Thread-131825] [transport.py] [_log()] client lang: <none>
2025-12-31T17:33:36.459 [DEBUG] [Thread-131825] [transport.py] [_log()] server lang: <none>
2025-12-31T17:33:36.459 [DEBUG] [Thread-131825] [transport.py] [_log()] kex follows: False
2025-12-31T17:33:36.459 [DEBUG] [Thread-131825] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:33:36.460 [DEBUG] [Thread-131825] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:33:36.460 [DEBUG] [Thread-131825] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:33:36.460 [DEBUG] [Thread-131825] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:33:36.460 [DEBUG] [Thread-131825] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:33:36.460 [DEBUG] [Thread-131825] [transport.py] [_log()] Compression: none
2025-12-31T17:33:36.460 [DEBUG] [Thread-131825] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:33:36.519 [DEBUG] [Thread-131825] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:33:36.520 [DEBUG] [Thread-131825] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:33:36.520 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T17:33:36.521 [DEBUG] [Thread-131825] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T17:33:36.522 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:33:36.575 [DEBUG] [Thread-131825] [transport.py] [_log()] userauth is OK
2025-12-31T17:33:36.575 [DEBUG] [Thread-131825] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:33:36.576 [DEBUG] [Thread-131825] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:33:36.576 [DEBUG] [Thread-131825] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T17:33:36.576 [DEBUG] [Thread-131825] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:33:36.595 [INFO] [Thread-131825] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:33:36.595 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T17:33:36.596 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:33:37.401 [DEBUG] [Thread-131825] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:33:37.402 [DEBUG] [Thread-131825] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:33:37.450 [DEBUG] [Thread-131825] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:33:37.450 [DEBUG] [Thread-131825] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:33:37.460 [DEBUG] [Thread-131825] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:33:37.469 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:33:37.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T17:33:37.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T17:33:37.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:33:37.488 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:33:37.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:33:37.496 [DEBUG] [Thread-131825] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:33:46.686 [DEBUG] [Thread-131827 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:34:01.739 [DEBUG] [Thread-131828 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:34:07.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T17:34:07.519 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T17:34:07.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T17:34:08.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 17, 33, 51), 23.98, 20.48, 0.0, 30.74, 24.14, 0, 0, 0, 2, 0, 0),)
2025-12-31T17:34:08.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 17:33:51
2025-12-31T17:34:08.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T17:34:08.513 [DEBUG] [Thread-131829] [transport.py] [_log()] starting thread (client mode): 0xb95f07f0
2025-12-31T17:34:08.513 [DEBUG] [Thread-131829] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:34:08.533 [DEBUG] [Thread-131829] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T17:34:08.533 [INFO] [Thread-131829] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T17:34:08.536 [DEBUG] [Thread-131829] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:34:08.536 [DEBUG] [Thread-131829] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T17:34:08.537 [DEBUG] [Thread-131829] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:34:08.537 [DEBUG] [Thread-131829] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:34:08.537 [DEBUG] [Thread-131829] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:34:08.537 [DEBUG] [Thread-131829] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:34:08.537 [DEBUG] [Thread-131829] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:34:08.537 [DEBUG] [Thread-131829] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:34:08.537 [DEBUG] [Thread-131829] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:34:08.537 [DEBUG] [Thread-131829] [transport.py] [_log()] client lang: <none>
2025-12-31T17:34:08.537 [DEBUG] [Thread-131829] [transport.py] [_log()] server lang: <none>
2025-12-31T17:34:08.537 [DEBUG] [Thread-131829] [transport.py] [_log()] kex follows: False
2025-12-31T17:34:08.537 [DEBUG] [Thread-131829] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:34:08.537 [DEBUG] [Thread-131829] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:34:08.537 [DEBUG] [Thread-131829] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:34:08.537 [DEBUG] [Thread-131829] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:34:08.537 [DEBUG] [Thread-131829] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:34:08.537 [DEBUG] [Thread-131829] [transport.py] [_log()] Compression: none
2025-12-31T17:34:08.537 [DEBUG] [Thread-131829] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:34:08.559 [DEBUG] [Thread-131829] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:34:08.560 [DEBUG] [Thread-131829] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:34:08.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T17:34:08.560 [DEBUG] [Thread-131829] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T17:34:08.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:34:08.562 [DEBUG] [Thread-131829] [transport.py] [_log()] userauth is OK
2025-12-31T17:34:08.562 [DEBUG] [Thread-131829] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:34:08.562 [DEBUG] [Thread-131829] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:34:08.563 [DEBUG] [Thread-131829] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T17:34:08.563 [DEBUG] [Thread-131829] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:34:08.583 [INFO] [Thread-131829] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:34:08.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:34:09.227 [DEBUG] [Thread-131829] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:34:09.227 [DEBUG] [Thread-131829] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:34:09.227 [DEBUG] [Thread-131829] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T17:34:09.268 [DEBUG] [Thread-131829] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:34:09.268 [DEBUG] [Thread-131829] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:34:09.271 [DEBUG] [Thread-131829] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:34:09.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:34:09.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T17:34:09.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T17:34:09.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T17:34:09.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:34:09.297 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T17:34:09.297 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:34:09.297 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:34:09.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T17:34:09.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.648057 -999.00  +23.70  29.91     26   +3.30 1 2 1 1 1   887    0 19.86 -94.59 ----- 25.0 29.9 294.6 36.0 26.0 -17.7 25.9 -17.7 25.6 -16.9 25.9 -16.6
2025-12-31T17:34:09.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T17:34:09.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T17:34:09.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.648057
2025-12-31T17:34:09.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T17:34:09.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T17:34:09.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T17:34:09.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T17:34:09.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T17:34:09.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T17:33:51', tmtdew=23.98, humidity=20.48, cloud=0.0, wind=30.74, temperature=24.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T15:33:12.125', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T17:34:09.300 [DEBUG] [Thread-131829] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:34:09.380 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T17:34:09.393 [DEBUG] [Thread-131832] [transport.py] [_log()] starting thread (client mode): 0xb95787c0
2025-12-31T17:34:09.394 [DEBUG] [Thread-131832] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:34:09.408 [DEBUG] [Thread-131832] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T17:34:09.409 [INFO] [Thread-131832] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T17:34:09.416 [DEBUG] [Thread-131832] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:34:09.416 [DEBUG] [Thread-131832] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T17:34:09.416 [DEBUG] [Thread-131832] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:34:09.416 [DEBUG] [Thread-131832] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:34:09.416 [DEBUG] [Thread-131832] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:34:09.416 [DEBUG] [Thread-131832] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:34:09.416 [DEBUG] [Thread-131832] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:34:09.417 [DEBUG] [Thread-131832] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:34:09.417 [DEBUG] [Thread-131832] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:34:09.417 [DEBUG] [Thread-131832] [transport.py] [_log()] client lang: <none>
2025-12-31T17:34:09.417 [DEBUG] [Thread-131832] [transport.py] [_log()] server lang: <none>
2025-12-31T17:34:09.417 [DEBUG] [Thread-131832] [transport.py] [_log()] kex follows: False
2025-12-31T17:34:09.417 [DEBUG] [Thread-131832] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:34:09.417 [DEBUG] [Thread-131832] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:34:09.417 [DEBUG] [Thread-131832] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:34:09.417 [DEBUG] [Thread-131832] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:34:09.417 [DEBUG] [Thread-131832] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:34:09.417 [DEBUG] [Thread-131832] [transport.py] [_log()] Compression: none
2025-12-31T17:34:09.417 [DEBUG] [Thread-131832] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:34:09.473 [DEBUG] [Thread-131832] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:34:09.473 [DEBUG] [Thread-131832] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:34:09.474 [DEBUG] [Thread-131832] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T17:34:09.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T17:34:09.475 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:34:09.530 [DEBUG] [Thread-131832] [transport.py] [_log()] userauth is OK
2025-12-31T17:34:09.530 [DEBUG] [Thread-131832] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:34:09.530 [DEBUG] [Thread-131832] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:34:09.530 [DEBUG] [Thread-131832] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T17:34:09.530 [DEBUG] [Thread-131832] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:34:09.550 [INFO] [Thread-131832] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:34:09.550 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T17:34:09.551 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:34:10.353 [DEBUG] [Thread-131832] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:34:10.354 [DEBUG] [Thread-131832] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:34:10.401 [DEBUG] [Thread-131832] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:34:10.401 [DEBUG] [Thread-131832] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:34:10.411 [DEBUG] [Thread-131832] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:34:10.420 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:34:10.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T17:34:10.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T17:34:10.438 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:34:10.438 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:34:10.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:34:10.447 [DEBUG] [Thread-131832] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:34:16.781 [DEBUG] [Thread-131834 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:34:25.421 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:34:25.421 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:34:27.870 [DEBUG] [Thread-131835 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:34:31.833 [DEBUG] [Thread-131836 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:34:40.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T17:34:40.469 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T17:34:40.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T17:34:41.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 17, 34, 23), 23.92, 20.56, 0.0, 31.44, 24.11, 0, 0, 0, 2, 0, 0),)
2025-12-31T17:34:41.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 17:34:23
2025-12-31T17:34:41.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T17:34:41.468 [DEBUG] [Thread-131837] [transport.py] [_log()] starting thread (client mode): 0xb6b613f0
2025-12-31T17:34:41.468 [DEBUG] [Thread-131837] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:34:41.489 [DEBUG] [Thread-131837] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T17:34:41.489 [INFO] [Thread-131837] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T17:34:41.492 [DEBUG] [Thread-131837] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:34:41.492 [DEBUG] [Thread-131837] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T17:34:41.492 [DEBUG] [Thread-131837] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:34:41.492 [DEBUG] [Thread-131837] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:34:41.492 [DEBUG] [Thread-131837] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:34:41.492 [DEBUG] [Thread-131837] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:34:41.492 [DEBUG] [Thread-131837] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:34:41.492 [DEBUG] [Thread-131837] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:34:41.492 [DEBUG] [Thread-131837] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:34:41.492 [DEBUG] [Thread-131837] [transport.py] [_log()] client lang: <none>
2025-12-31T17:34:41.492 [DEBUG] [Thread-131837] [transport.py] [_log()] server lang: <none>
2025-12-31T17:34:41.492 [DEBUG] [Thread-131837] [transport.py] [_log()] kex follows: False
2025-12-31T17:34:41.492 [DEBUG] [Thread-131837] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:34:41.492 [DEBUG] [Thread-131837] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:34:41.492 [DEBUG] [Thread-131837] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:34:41.492 [DEBUG] [Thread-131837] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:34:41.492 [DEBUG] [Thread-131837] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:34:41.492 [DEBUG] [Thread-131837] [transport.py] [_log()] Compression: none
2025-12-31T17:34:41.492 [DEBUG] [Thread-131837] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:34:41.511 [DEBUG] [Thread-131837] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:34:41.512 [DEBUG] [Thread-131837] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:34:41.513 [DEBUG] [Thread-131837] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T17:34:41.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T17:34:41.514 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:34:41.515 [DEBUG] [Thread-131837] [transport.py] [_log()] userauth is OK
2025-12-31T17:34:41.515 [DEBUG] [Thread-131837] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:34:41.515 [DEBUG] [Thread-131837] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:34:41.515 [DEBUG] [Thread-131837] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T17:34:41.515 [DEBUG] [Thread-131837] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:34:41.540 [INFO] [Thread-131837] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:34:41.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:34:42.374 [DEBUG] [Thread-131837] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:34:42.374 [DEBUG] [Thread-131837] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:34:42.374 [DEBUG] [Thread-131837] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T17:34:42.415 [DEBUG] [Thread-131837] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:34:42.415 [DEBUG] [Thread-131837] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:34:42.419 [DEBUG] [Thread-131837] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:34:42.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:34:42.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T17:34:42.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T17:34:42.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T17:34:42.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:34:42.442 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T17:34:42.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:34:42.442 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:34:42.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T17:34:42.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.648752 -999.00  +23.70  20.67     26   +3.30 1 2 1 1 1   887    0 19.88 -97.52 ----- 21.1 20.7 279.3 37.1 25.8 -18.3 25.9 -18.0 25.4 -17.4 25.8 -17.2
2025-12-31T17:34:42.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T17:34:42.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T17:34:42.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.648752
2025-12-31T17:34:42.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T17:34:42.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T17:34:42.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T17:34:42.445 [DEBUG] [Thread-131837] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:34:42.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T17:34:42.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T17:34:42.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T17:34:23', tmtdew=23.92, humidity=20.56, cloud=0.0, wind=31.44, temperature=24.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T15:34:12.173', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T17:34:42.526 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T17:34:42.537 [DEBUG] [Thread-131840] [transport.py] [_log()] starting thread (client mode): 0xb6bbc310
2025-12-31T17:34:42.538 [DEBUG] [Thread-131840] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:34:42.552 [DEBUG] [Thread-131840] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T17:34:42.552 [INFO] [Thread-131840] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T17:34:42.560 [DEBUG] [Thread-131840] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:34:42.560 [DEBUG] [Thread-131840] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T17:34:42.560 [DEBUG] [Thread-131840] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:34:42.560 [DEBUG] [Thread-131840] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:34:42.560 [DEBUG] [Thread-131840] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:34:42.560 [DEBUG] [Thread-131840] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:34:42.561 [DEBUG] [Thread-131840] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:34:42.561 [DEBUG] [Thread-131840] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:34:42.561 [DEBUG] [Thread-131840] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:34:42.561 [DEBUG] [Thread-131840] [transport.py] [_log()] client lang: <none>
2025-12-31T17:34:42.561 [DEBUG] [Thread-131840] [transport.py] [_log()] server lang: <none>
2025-12-31T17:34:42.561 [DEBUG] [Thread-131840] [transport.py] [_log()] kex follows: False
2025-12-31T17:34:42.561 [DEBUG] [Thread-131840] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:34:42.561 [DEBUG] [Thread-131840] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:34:42.561 [DEBUG] [Thread-131840] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:34:42.561 [DEBUG] [Thread-131840] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:34:42.561 [DEBUG] [Thread-131840] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:34:42.561 [DEBUG] [Thread-131840] [transport.py] [_log()] Compression: none
2025-12-31T17:34:42.561 [DEBUG] [Thread-131840] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:34:42.621 [DEBUG] [Thread-131840] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:34:42.621 [DEBUG] [Thread-131840] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:34:42.622 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T17:34:42.622 [DEBUG] [Thread-131840] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T17:34:42.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:34:42.677 [DEBUG] [Thread-131840] [transport.py] [_log()] userauth is OK
2025-12-31T17:34:42.677 [DEBUG] [Thread-131840] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:34:42.677 [DEBUG] [Thread-131840] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:34:42.677 [DEBUG] [Thread-131840] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T17:34:42.677 [DEBUG] [Thread-131840] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:34:42.696 [INFO] [Thread-131840] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:34:42.696 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T17:34:42.696 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:34:43.526 [DEBUG] [Thread-131840] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:34:43.527 [DEBUG] [Thread-131840] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:34:43.575 [DEBUG] [Thread-131840] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:34:43.575 [DEBUG] [Thread-131840] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:34:43.584 [DEBUG] [Thread-131840] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:34:43.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:34:43.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T17:34:43.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T17:34:43.612 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:34:43.612 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:34:43.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:34:43.621 [DEBUG] [Thread-131840] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:34:46.866 [DEBUG] [Thread-131842 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:35:01.916 [DEBUG] [Thread-131843 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:35:13.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T17:35:13.639 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T17:35:13.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T17:35:14.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 17, 34, 56), 23.93, 20.66, 0.0, 26.93, 23.94, 0, 0, 0, 2, 0, 0),)
2025-12-31T17:35:14.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 17:34:56
2025-12-31T17:35:14.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T17:35:14.678 [DEBUG] [Thread-131844] [transport.py] [_log()] starting thread (client mode): 0xb95f2e90
2025-12-31T17:35:14.678 [DEBUG] [Thread-131844] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:35:14.698 [DEBUG] [Thread-131844] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T17:35:14.699 [INFO] [Thread-131844] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T17:35:14.702 [DEBUG] [Thread-131844] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:35:14.702 [DEBUG] [Thread-131844] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T17:35:14.702 [DEBUG] [Thread-131844] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:35:14.702 [DEBUG] [Thread-131844] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:35:14.702 [DEBUG] [Thread-131844] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:35:14.702 [DEBUG] [Thread-131844] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:35:14.702 [DEBUG] [Thread-131844] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:35:14.702 [DEBUG] [Thread-131844] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:35:14.702 [DEBUG] [Thread-131844] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:35:14.702 [DEBUG] [Thread-131844] [transport.py] [_log()] client lang: <none>
2025-12-31T17:35:14.702 [DEBUG] [Thread-131844] [transport.py] [_log()] server lang: <none>
2025-12-31T17:35:14.702 [DEBUG] [Thread-131844] [transport.py] [_log()] kex follows: False
2025-12-31T17:35:14.702 [DEBUG] [Thread-131844] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:35:14.702 [DEBUG] [Thread-131844] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:35:14.702 [DEBUG] [Thread-131844] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:35:14.702 [DEBUG] [Thread-131844] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:35:14.702 [DEBUG] [Thread-131844] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:35:14.703 [DEBUG] [Thread-131844] [transport.py] [_log()] Compression: none
2025-12-31T17:35:14.703 [DEBUG] [Thread-131844] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:35:14.720 [DEBUG] [Thread-131844] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:35:14.720 [DEBUG] [Thread-131844] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:35:14.720 [DEBUG] [Thread-131844] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T17:35:14.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T17:35:14.721 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:35:14.721 [DEBUG] [Thread-131844] [transport.py] [_log()] userauth is OK
2025-12-31T17:35:14.721 [DEBUG] [Thread-131844] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:35:14.721 [DEBUG] [Thread-131844] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:35:14.721 [DEBUG] [Thread-131844] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T17:35:14.721 [DEBUG] [Thread-131844] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:35:14.731 [INFO] [Thread-131844] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:35:14.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:35:16.369 [DEBUG] [Thread-131844] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:35:16.369 [DEBUG] [Thread-131844] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:35:16.369 [DEBUG] [Thread-131844] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T17:35:16.409 [DEBUG] [Thread-131844] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:35:16.409 [DEBUG] [Thread-131844] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:35:16.411 [DEBUG] [Thread-131844] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:35:16.422 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:35:16.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T17:35:16.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T17:35:16.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T17:35:16.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:35:16.443 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T17:35:16.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:35:16.443 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:35:16.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T17:35:16.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.649099 -999.00  +23.60  31.07     26   +3.10 1 2 2 1 1   887    0 19.55 -97.88 ----- 23.8 31.1 271.4 36.9 25.8 -19.0 25.9 -18.0 25.3 -16.5 25.7 -16.9
2025-12-31T17:35:16.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T17:35:16.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T17:35:16.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.649099
2025-12-31T17:35:16.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T17:35:16.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T17:35:16.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T17:35:16.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T17:35:16.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T17:35:16.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T17:34:56', tmtdew=23.93, humidity=20.66, cloud=0.0, wind=26.93, temperature=23.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T15:34:42.154', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T17:35:16.444 [DEBUG] [Thread-131844] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:35:16.521 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T17:35:16.534 [DEBUG] [Thread-131847] [transport.py] [_log()] starting thread (client mode): 0xb6b60970
2025-12-31T17:35:16.534 [DEBUG] [Thread-131847] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:35:16.552 [DEBUG] [Thread-131847] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T17:35:16.552 [INFO] [Thread-131847] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T17:35:16.560 [DEBUG] [Thread-131847] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:35:16.560 [DEBUG] [Thread-131847] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T17:35:16.560 [DEBUG] [Thread-131847] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:35:16.560 [DEBUG] [Thread-131847] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:35:16.560 [DEBUG] [Thread-131847] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:35:16.560 [DEBUG] [Thread-131847] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:35:16.560 [DEBUG] [Thread-131847] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:35:16.560 [DEBUG] [Thread-131847] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:35:16.560 [DEBUG] [Thread-131847] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:35:16.560 [DEBUG] [Thread-131847] [transport.py] [_log()] client lang: <none>
2025-12-31T17:35:16.560 [DEBUG] [Thread-131847] [transport.py] [_log()] server lang: <none>
2025-12-31T17:35:16.560 [DEBUG] [Thread-131847] [transport.py] [_log()] kex follows: False
2025-12-31T17:35:16.560 [DEBUG] [Thread-131847] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:35:16.560 [DEBUG] [Thread-131847] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:35:16.560 [DEBUG] [Thread-131847] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:35:16.560 [DEBUG] [Thread-131847] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:35:16.560 [DEBUG] [Thread-131847] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:35:16.560 [DEBUG] [Thread-131847] [transport.py] [_log()] Compression: none
2025-12-31T17:35:16.560 [DEBUG] [Thread-131847] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:35:16.620 [DEBUG] [Thread-131847] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:35:16.620 [DEBUG] [Thread-131847] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:35:16.620 [DEBUG] [Thread-131847] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T17:35:16.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T17:35:16.621 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:35:16.678 [DEBUG] [Thread-131847] [transport.py] [_log()] userauth is OK
2025-12-31T17:35:16.678 [DEBUG] [Thread-131847] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:35:16.678 [DEBUG] [Thread-131847] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:35:16.678 [DEBUG] [Thread-131847] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T17:35:16.678 [DEBUG] [Thread-131847] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:35:16.696 [INFO] [Thread-131847] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:35:16.697 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T17:35:16.697 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:35:16.943 [DEBUG] [Thread-131849 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:35:17.512 [DEBUG] [Thread-131847] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:35:17.512 [DEBUG] [Thread-131847] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:35:17.559 [DEBUG] [Thread-131847] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:35:17.560 [DEBUG] [Thread-131847] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:35:17.568 [DEBUG] [Thread-131847] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:35:17.576 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:35:17.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T17:35:17.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T17:35:17.592 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:35:17.592 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:35:17.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:35:17.600 [DEBUG] [Thread-131847] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:35:25.561 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:35:25.562 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:35:27.929 [DEBUG] [Thread-131850 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:35:31.988 [DEBUG] [Thread-131851 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:35:47.023 [DEBUG] [Thread-131852 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:35:47.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T17:35:47.622 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T17:35:47.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T17:35:48.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 17, 35, 28), 23.9, 20.73, 0.0, 23.68, 24.01, 0, 0, 0, 2, 0, 0),)
2025-12-31T17:35:48.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 17:35:28
2025-12-31T17:35:48.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T17:35:48.632 [DEBUG] [Thread-131853] [transport.py] [_log()] starting thread (client mode): 0xb95f19f0
2025-12-31T17:35:48.632 [DEBUG] [Thread-131853] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:35:48.653 [DEBUG] [Thread-131853] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T17:35:48.653 [INFO] [Thread-131853] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T17:35:48.656 [DEBUG] [Thread-131853] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:35:48.656 [DEBUG] [Thread-131853] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T17:35:48.656 [DEBUG] [Thread-131853] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:35:48.656 [DEBUG] [Thread-131853] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:35:48.656 [DEBUG] [Thread-131853] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:35:48.656 [DEBUG] [Thread-131853] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:35:48.656 [DEBUG] [Thread-131853] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:35:48.656 [DEBUG] [Thread-131853] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:35:48.656 [DEBUG] [Thread-131853] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:35:48.656 [DEBUG] [Thread-131853] [transport.py] [_log()] client lang: <none>
2025-12-31T17:35:48.656 [DEBUG] [Thread-131853] [transport.py] [_log()] server lang: <none>
2025-12-31T17:35:48.656 [DEBUG] [Thread-131853] [transport.py] [_log()] kex follows: False
2025-12-31T17:35:48.656 [DEBUG] [Thread-131853] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:35:48.656 [DEBUG] [Thread-131853] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:35:48.656 [DEBUG] [Thread-131853] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:35:48.656 [DEBUG] [Thread-131853] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:35:48.657 [DEBUG] [Thread-131853] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:35:48.657 [DEBUG] [Thread-131853] [transport.py] [_log()] Compression: none
2025-12-31T17:35:48.657 [DEBUG] [Thread-131853] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:35:48.675 [DEBUG] [Thread-131853] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:35:48.675 [DEBUG] [Thread-131853] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:35:48.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T17:35:48.676 [DEBUG] [Thread-131853] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T17:35:48.676 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:35:48.676 [DEBUG] [Thread-131853] [transport.py] [_log()] userauth is OK
2025-12-31T17:35:48.677 [DEBUG] [Thread-131853] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:35:48.677 [DEBUG] [Thread-131853] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:35:48.677 [DEBUG] [Thread-131853] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T17:35:48.677 [DEBUG] [Thread-131853] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:35:48.693 [INFO] [Thread-131853] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:35:48.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:35:49.366 [DEBUG] [Thread-131853] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:35:49.366 [DEBUG] [Thread-131853] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:35:49.367 [DEBUG] [Thread-131853] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T17:35:49.408 [DEBUG] [Thread-131853] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:35:49.408 [DEBUG] [Thread-131853] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:35:49.411 [DEBUG] [Thread-131853] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:35:49.423 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:35:49.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T17:35:49.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T17:35:49.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T17:35:49.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:35:49.432 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T17:35:49.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:35:49.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:35:49.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T17:35:49.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.649446 -999.00  +23.60  24.99     26   +3.10 1 2 1 1 1   887    0 19.18 -99.41 ----- 27.1 25.0 270.2 30.3 25.9 -18.3 25.8 -17.3 25.4 -16.0 25.7 -16.7
2025-12-31T17:35:49.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T17:35:49.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T17:35:49.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.649446
2025-12-31T17:35:49.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T17:35:49.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T17:35:49.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T17:35:49.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T17:35:49.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T17:35:49.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T17:35:28', tmtdew=23.9, humidity=20.73, cloud=0.0, wind=23.68, temperature=24.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T15:35:12.134', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T17:35:49.434 [DEBUG] [Thread-131853] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:35: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-12-31T17:35:49.531 [DEBUG] [Thread-131856] [transport.py] [_log()] starting thread (client mode): 0xb9592e00
2025-12-31T17:35:49.531 [DEBUG] [Thread-131856] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:35:49.546 [DEBUG] [Thread-131856] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T17:35:49.546 [INFO] [Thread-131856] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T17:35:49.553 [DEBUG] [Thread-131856] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:35:49.553 [DEBUG] [Thread-131856] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T17:35:49.554 [DEBUG] [Thread-131856] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:35:49.554 [DEBUG] [Thread-131856] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:35:49.554 [DEBUG] [Thread-131856] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:35:49.554 [DEBUG] [Thread-131856] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:35:49.554 [DEBUG] [Thread-131856] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:35:49.554 [DEBUG] [Thread-131856] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:35:49.554 [DEBUG] [Thread-131856] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:35:49.554 [DEBUG] [Thread-131856] [transport.py] [_log()] client lang: <none>
2025-12-31T17:35:49.554 [DEBUG] [Thread-131856] [transport.py] [_log()] server lang: <none>
2025-12-31T17:35:49.554 [DEBUG] [Thread-131856] [transport.py] [_log()] kex follows: False
2025-12-31T17:35:49.554 [DEBUG] [Thread-131856] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:35:49.554 [DEBUG] [Thread-131856] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:35:49.554 [DEBUG] [Thread-131856] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:35:49.555 [DEBUG] [Thread-131856] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:35:49.555 [DEBUG] [Thread-131856] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:35:49.555 [DEBUG] [Thread-131856] [transport.py] [_log()] Compression: none
2025-12-31T17:35:49.555 [DEBUG] [Thread-131856] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:35:49.609 [DEBUG] [Thread-131856] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:35:49.610 [DEBUG] [Thread-131856] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:35:49.610 [DEBUG] [Thread-131856] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T17:35:49.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T17:35:49.611 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:35:49.666 [DEBUG] [Thread-131856] [transport.py] [_log()] userauth is OK
2025-12-31T17:35:49.666 [DEBUG] [Thread-131856] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:35:49.666 [DEBUG] [Thread-131856] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:35:49.666 [DEBUG] [Thread-131856] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T17:35:49.667 [DEBUG] [Thread-131856] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:35:49.685 [INFO] [Thread-131856] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:35:49.685 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T17:35:49.687 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:35:50.491 [DEBUG] [Thread-131856] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:35:50.491 [DEBUG] [Thread-131856] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:35:50.538 [DEBUG] [Thread-131856] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:35:50.539 [DEBUG] [Thread-131856] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:35:50.547 [DEBUG] [Thread-131856] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:35:50.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:35:50.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T17:35:50.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T17:35:50.573 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:35:50.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:35:50.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:35:50.581 [DEBUG] [Thread-131856] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:36:02.052 [DEBUG] [Thread-131858 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:36:17.103 [DEBUG] [Thread-131859 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:36:20.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T17:36:20.590 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T17:36: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-12-31T17:36:21.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 17, 35, 28), 23.7, 20.73, 0.0, 21.88, 23.86, 0, 0, 0, 2, 0, 0),)
2025-12-31T17:36:21.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 17:35:28
2025-12-31T17:36:21.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T17:36:21.579 [DEBUG] [Thread-131860] [transport.py] [_log()] starting thread (client mode): 0xb95f0cd0
2025-12-31T17:36:21.579 [DEBUG] [Thread-131860] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:36:21.600 [DEBUG] [Thread-131860] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T17:36:21.600 [INFO] [Thread-131860] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T17:36:21.603 [DEBUG] [Thread-131860] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:36:21.603 [DEBUG] [Thread-131860] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T17:36:21.603 [DEBUG] [Thread-131860] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:36:21.603 [DEBUG] [Thread-131860] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:36:21.603 [DEBUG] [Thread-131860] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:36:21.603 [DEBUG] [Thread-131860] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:36:21.603 [DEBUG] [Thread-131860] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:36:21.603 [DEBUG] [Thread-131860] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:36:21.603 [DEBUG] [Thread-131860] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:36:21.603 [DEBUG] [Thread-131860] [transport.py] [_log()] client lang: <none>
2025-12-31T17:36:21.603 [DEBUG] [Thread-131860] [transport.py] [_log()] server lang: <none>
2025-12-31T17:36:21.603 [DEBUG] [Thread-131860] [transport.py] [_log()] kex follows: False
2025-12-31T17:36:21.603 [DEBUG] [Thread-131860] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:36:21.603 [DEBUG] [Thread-131860] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:36:21.603 [DEBUG] [Thread-131860] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:36:21.603 [DEBUG] [Thread-131860] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:36:21.603 [DEBUG] [Thread-131860] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:36:21.603 [DEBUG] [Thread-131860] [transport.py] [_log()] Compression: none
2025-12-31T17:36:21.604 [DEBUG] [Thread-131860] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:36:21.622 [DEBUG] [Thread-131860] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:36:21.623 [DEBUG] [Thread-131860] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:36:21.624 [DEBUG] [Thread-131860] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T17:36:21.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T17:36:21.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:36:21.626 [DEBUG] [Thread-131860] [transport.py] [_log()] userauth is OK
2025-12-31T17:36:21.626 [DEBUG] [Thread-131860] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:36:21.626 [DEBUG] [Thread-131860] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:36:21.626 [DEBUG] [Thread-131860] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T17:36:21.626 [DEBUG] [Thread-131860] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:36:21.651 [INFO] [Thread-131860] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:36:21.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:36:22.444 [DEBUG] [Thread-131860] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:36:22.444 [DEBUG] [Thread-131860] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:36:22.445 [DEBUG] [Thread-131860] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T17:36:22.485 [DEBUG] [Thread-131860] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:36:22.485 [DEBUG] [Thread-131860] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:36:22.489 [DEBUG] [Thread-131860] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:36:22.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:36:22.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T17:36:22.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T17:36:22.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T17:36:22.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:36:22.513 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T17:36:22.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:36:22.513 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:36:22.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T17:36:22.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.649793 -999.00  +23.60  26.73     26   +3.20 1 2 1 1 1   887    0 18.76 -102.99 ----- 27.8 26.7 271.8 32.5 25.8 -18.0 25.8 -17.6 25.3 -15.9 25.6 -16.3
2025-12-31T17:36:22.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T17:36:22.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T17:36:22.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.649793
2025-12-31T17:36:22.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T17:36:22.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T17:36:22.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T17:36:22.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T17:36:22.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T17:36:22.516 [DEBUG] [Thread-131860] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:36:22.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T17:35:28', tmtdew=23.7, humidity=20.73, cloud=0.0, wind=21.88, temperature=23.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T15:35:42.115', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T17:36:22.597 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T17:36:22.609 [DEBUG] [Thread-131863] [transport.py] [_log()] starting thread (client mode): 0xb6b60ca0
2025-12-31T17:36:22.609 [DEBUG] [Thread-131863] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:36:22.625 [DEBUG] [Thread-131863] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T17:36:22.625 [INFO] [Thread-131863] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T17:36:22.632 [DEBUG] [Thread-131863] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:36:22.633 [DEBUG] [Thread-131863] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T17:36:22.633 [DEBUG] [Thread-131863] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:36:22.633 [DEBUG] [Thread-131863] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:36:22.633 [DEBUG] [Thread-131863] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:36:22.633 [DEBUG] [Thread-131863] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:36:22.633 [DEBUG] [Thread-131863] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:36:22.633 [DEBUG] [Thread-131863] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:36:22.633 [DEBUG] [Thread-131863] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:36:22.633 [DEBUG] [Thread-131863] [transport.py] [_log()] client lang: <none>
2025-12-31T17:36:22.633 [DEBUG] [Thread-131863] [transport.py] [_log()] server lang: <none>
2025-12-31T17:36:22.633 [DEBUG] [Thread-131863] [transport.py] [_log()] kex follows: False
2025-12-31T17:36:22.633 [DEBUG] [Thread-131863] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:36:22.633 [DEBUG] [Thread-131863] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:36:22.633 [DEBUG] [Thread-131863] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:36:22.633 [DEBUG] [Thread-131863] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:36:22.634 [DEBUG] [Thread-131863] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:36:22.634 [DEBUG] [Thread-131863] [transport.py] [_log()] Compression: none
2025-12-31T17:36:22.634 [DEBUG] [Thread-131863] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:36:22.689 [DEBUG] [Thread-131863] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:36:22.690 [DEBUG] [Thread-131863] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:36:22.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T17:36:22.691 [DEBUG] [Thread-131863] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T17:36:22.692 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:36:22.746 [DEBUG] [Thread-131863] [transport.py] [_log()] userauth is OK
2025-12-31T17:36:22.746 [DEBUG] [Thread-131863] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:36:22.746 [DEBUG] [Thread-131863] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:36:22.747 [DEBUG] [Thread-131863] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T17:36:22.747 [DEBUG] [Thread-131863] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:36:22.765 [INFO] [Thread-131863] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:36:22.766 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T17:36:22.766 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:36:23.590 [DEBUG] [Thread-131863] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:36:23.591 [DEBUG] [Thread-131863] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:36:23.639 [DEBUG] [Thread-131863] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:36:23.639 [DEBUG] [Thread-131863] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:36:23.648 [DEBUG] [Thread-131863] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:36:23.657 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:36:23.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T17:36:23.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T17:36:23.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:36:23.675 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:36:23.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:36:23.684 [DEBUG] [Thread-131863] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:36:25.698 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:36:25.699 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:36:27.991 [DEBUG] [Thread-131865 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:36:32.137 [DEBUG] [Thread-131866 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:36:47.177 [DEBUG] [Thread-131867 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:36:53.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T17:36:53.705 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T17:36:53.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T17:36:54.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 17, 36, 32), 23.87, 20.5, 0.0, 27.31, 23.94, 0, 0, 0, 2, 0, 0),)
2025-12-31T17:36:54.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 17:36:32
2025-12-31T17:36:54.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T17:36:54.693 [DEBUG] [Thread-131868] [transport.py] [_log()] starting thread (client mode): 0xb95f2830
2025-12-31T17:36:54.693 [DEBUG] [Thread-131868] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:36:54.714 [DEBUG] [Thread-131868] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T17:36:54.714 [INFO] [Thread-131868] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T17:36:54.717 [DEBUG] [Thread-131868] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:36:54.717 [DEBUG] [Thread-131868] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T17:36:54.717 [DEBUG] [Thread-131868] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:36:54.717 [DEBUG] [Thread-131868] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:36:54.717 [DEBUG] [Thread-131868] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:36:54.717 [DEBUG] [Thread-131868] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:36:54.717 [DEBUG] [Thread-131868] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:36:54.717 [DEBUG] [Thread-131868] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:36:54.717 [DEBUG] [Thread-131868] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:36:54.717 [DEBUG] [Thread-131868] [transport.py] [_log()] client lang: <none>
2025-12-31T17:36:54.717 [DEBUG] [Thread-131868] [transport.py] [_log()] server lang: <none>
2025-12-31T17:36:54.717 [DEBUG] [Thread-131868] [transport.py] [_log()] kex follows: False
2025-12-31T17:36:54.718 [DEBUG] [Thread-131868] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:36:54.718 [DEBUG] [Thread-131868] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:36:54.718 [DEBUG] [Thread-131868] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:36:54.718 [DEBUG] [Thread-131868] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:36:54.718 [DEBUG] [Thread-131868] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:36:54.718 [DEBUG] [Thread-131868] [transport.py] [_log()] Compression: none
2025-12-31T17:36:54.718 [DEBUG] [Thread-131868] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:36:54.736 [DEBUG] [Thread-131868] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:36:54.737 [DEBUG] [Thread-131868] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:36:54.738 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T17:36:54.738 [DEBUG] [Thread-131868] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T17:36:54.739 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:36:54.740 [DEBUG] [Thread-131868] [transport.py] [_log()] userauth is OK
2025-12-31T17:36:54.740 [DEBUG] [Thread-131868] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:36:54.740 [DEBUG] [Thread-131868] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:36:54.740 [DEBUG] [Thread-131868] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T17:36:54.740 [DEBUG] [Thread-131868] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:36:54.758 [INFO] [Thread-131868] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:36:54.759 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:36:55.371 [DEBUG] [Thread-131868] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:36:55.371 [DEBUG] [Thread-131868] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:36:55.371 [DEBUG] [Thread-131868] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T17:36:55.412 [DEBUG] [Thread-131868] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:36:55.412 [DEBUG] [Thread-131868] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:36:55.415 [DEBUG] [Thread-131868] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:36:55.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:36:55.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T17:36:55.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T17:36:55.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T17:36:55.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:36:55.434 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T17:36:55.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:36:55.434 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:36:55.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T17:36:55.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.650140 -999.00  +23.50  17.27     26   +3.30 1 2 1 1 1   887    0 18.56 -113.14 ----- 19.9 17.3 265.8 25.1 25.8 -18.0 25.8 -17.3 25.4 -16.4 25.7 -16.2
2025-12-31T17:36:55.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T17:36:55.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T17:36:55.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.650140
2025-12-31T17:36:55.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T17:36:55.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T17:36:55.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T17:36:55.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T17:36:55.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T17:36:55.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T17:36:32', tmtdew=23.87, humidity=20.5, cloud=0.0, wind=27.31, temperature=23.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T15:36:12.096', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T17:36:55.435 [DEBUG] [Thread-131868] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:36:55.512 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T17:36:55.524 [DEBUG] [Thread-131871] [transport.py] [_log()] starting thread (client mode): 0xb95f0700
2025-12-31T17:36:55.524 [DEBUG] [Thread-131871] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:36:55.539 [DEBUG] [Thread-131871] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T17:36:55.539 [INFO] [Thread-131871] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T17:36:55.546 [DEBUG] [Thread-131871] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:36:55.546 [DEBUG] [Thread-131871] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T17:36:55.546 [DEBUG] [Thread-131871] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:36:55.546 [DEBUG] [Thread-131871] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:36:55.546 [DEBUG] [Thread-131871] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:36:55.546 [DEBUG] [Thread-131871] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:36:55.546 [DEBUG] [Thread-131871] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:36:55.546 [DEBUG] [Thread-131871] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:36:55.547 [DEBUG] [Thread-131871] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:36:55.547 [DEBUG] [Thread-131871] [transport.py] [_log()] client lang: <none>
2025-12-31T17:36:55.547 [DEBUG] [Thread-131871] [transport.py] [_log()] server lang: <none>
2025-12-31T17:36:55.547 [DEBUG] [Thread-131871] [transport.py] [_log()] kex follows: False
2025-12-31T17:36:55.547 [DEBUG] [Thread-131871] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:36:55.547 [DEBUG] [Thread-131871] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:36:55.547 [DEBUG] [Thread-131871] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:36:55.547 [DEBUG] [Thread-131871] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:36:55.547 [DEBUG] [Thread-131871] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:36:55.547 [DEBUG] [Thread-131871] [transport.py] [_log()] Compression: none
2025-12-31T17:36:55.547 [DEBUG] [Thread-131871] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:36:55.603 [DEBUG] [Thread-131871] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:36:55.604 [DEBUG] [Thread-131871] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:36:55.604 [DEBUG] [Thread-131871] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T17:36:55.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T17:36:55.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:36:55.663 [DEBUG] [Thread-131871] [transport.py] [_log()] userauth is OK
2025-12-31T17:36:55.664 [DEBUG] [Thread-131871] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:36:55.664 [DEBUG] [Thread-131871] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:36:55.664 [DEBUG] [Thread-131871] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T17:36:55.664 [DEBUG] [Thread-131871] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:36:55.684 [INFO] [Thread-131871] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:36:55.685 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T17:36:55.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:36:56.586 [DEBUG] [Thread-131871] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:36:56.587 [DEBUG] [Thread-131871] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:36:56.635 [DEBUG] [Thread-131871] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:36:56.635 [DEBUG] [Thread-131871] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:36:56.647 [DEBUG] [Thread-131871] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:36:56.657 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:36:56.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T17:36:56.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T17:36:56.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:36:56.675 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:36:56.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:36:56.684 [DEBUG] [Thread-131871] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:37:02.214 [DEBUG] [Thread-131873 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:37:17.264 [DEBUG] [Thread-131874 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:37:25.839 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:37:25.839 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:37:26.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T17:37:26.707 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T17:37:26.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T17:37:27.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 17, 37, 4), 23.79, 20.61, 0.0, 24.03, 23.91, 0, 0, 0, 2, 0, 0),)
2025-12-31T17:37:27.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 17:37:04
2025-12-31T17:37:27.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T17:37:27.701 [DEBUG] [Thread-131875] [transport.py] [_log()] starting thread (client mode): 0xb6bb39a0
2025-12-31T17:37:27.701 [DEBUG] [Thread-131875] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:37:27.717 [DEBUG] [Thread-131875] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T17:37:27.717 [INFO] [Thread-131875] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T17:37:27.720 [DEBUG] [Thread-131875] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:37:27.720 [DEBUG] [Thread-131875] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T17:37:27.721 [DEBUG] [Thread-131875] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:37:27.721 [DEBUG] [Thread-131875] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:37:27.721 [DEBUG] [Thread-131875] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:37:27.721 [DEBUG] [Thread-131875] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:37:27.721 [DEBUG] [Thread-131875] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:37:27.721 [DEBUG] [Thread-131875] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:37:27.721 [DEBUG] [Thread-131875] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:37:27.721 [DEBUG] [Thread-131875] [transport.py] [_log()] client lang: <none>
2025-12-31T17:37:27.721 [DEBUG] [Thread-131875] [transport.py] [_log()] server lang: <none>
2025-12-31T17:37:27.721 [DEBUG] [Thread-131875] [transport.py] [_log()] kex follows: False
2025-12-31T17:37:27.721 [DEBUG] [Thread-131875] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:37:27.721 [DEBUG] [Thread-131875] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:37:27.721 [DEBUG] [Thread-131875] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:37:27.721 [DEBUG] [Thread-131875] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:37:27.721 [DEBUG] [Thread-131875] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:37:27.721 [DEBUG] [Thread-131875] [transport.py] [_log()] Compression: none
2025-12-31T17:37:27.721 [DEBUG] [Thread-131875] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:37:27.740 [DEBUG] [Thread-131875] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:37:27.741 [DEBUG] [Thread-131875] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:37:27.742 [DEBUG] [Thread-131875] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T17:37:27.742 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T17:37:27.743 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:37:27.744 [DEBUG] [Thread-131875] [transport.py] [_log()] userauth is OK
2025-12-31T17:37:27.744 [DEBUG] [Thread-131875] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:37:27.744 [DEBUG] [Thread-131875] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:37:27.744 [DEBUG] [Thread-131875] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T17:37:27.744 [DEBUG] [Thread-131875] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:37:27.768 [INFO] [Thread-131875] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:37:27.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:37:28.050 [DEBUG] [Thread-131877 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:37:28.539 [DEBUG] [Thread-131875] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:37:28.539 [DEBUG] [Thread-131875] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:37:28.540 [DEBUG] [Thread-131875] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T17:37:28.581 [DEBUG] [Thread-131875] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:37:28.581 [DEBUG] [Thread-131875] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:37:28.585 [DEBUG] [Thread-131875] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:37:28.591 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:37:28.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T17:37:28.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T17:37:28.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T17:37:28.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:37:28.603 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T17:37:28.603 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:37:28.603 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:37:28.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T17:37:28.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.650488 -999.00  +23.50  20.89     26   +3.40 1 2 1 1 1   887    0 18.33 -117.73 ----- 23.6 20.9 251.0 29.6 25.8 -17.6 25.8 -17.0 25.4 -15.2 25.6 -15.9
2025-12-31T17:37:28.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T17:37:28.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T17:37:28.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.650488
2025-12-31T17:37:28.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T17:37:28.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T17:37:28.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T17:37:28.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T17:37:28.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T17:37:28.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T17:37:04', tmtdew=23.79, humidity=20.61, cloud=0.0, wind=24.03, temperature=23.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T15:36:42.163', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T17:37:28.606 [DEBUG] [Thread-131875] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:37:28.689 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T17:37:28.702 [DEBUG] [Thread-131879] [transport.py] [_log()] starting thread (client mode): 0xb6ba1030
2025-12-31T17:37:28.702 [DEBUG] [Thread-131879] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:37:28.717 [DEBUG] [Thread-131879] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T17:37:28.717 [INFO] [Thread-131879] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T17:37:28.725 [DEBUG] [Thread-131879] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:37:28.725 [DEBUG] [Thread-131879] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T17:37:28.725 [DEBUG] [Thread-131879] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:37:28.725 [DEBUG] [Thread-131879] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:37:28.725 [DEBUG] [Thread-131879] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:37:28.725 [DEBUG] [Thread-131879] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:37:28.725 [DEBUG] [Thread-131879] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:37:28.725 [DEBUG] [Thread-131879] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:37:28.725 [DEBUG] [Thread-131879] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:37:28.725 [DEBUG] [Thread-131879] [transport.py] [_log()] client lang: <none>
2025-12-31T17:37:28.725 [DEBUG] [Thread-131879] [transport.py] [_log()] server lang: <none>
2025-12-31T17:37:28.726 [DEBUG] [Thread-131879] [transport.py] [_log()] kex follows: False
2025-12-31T17:37:28.726 [DEBUG] [Thread-131879] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:37:28.726 [DEBUG] [Thread-131879] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:37:28.726 [DEBUG] [Thread-131879] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:37:28.726 [DEBUG] [Thread-131879] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:37:28.726 [DEBUG] [Thread-131879] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:37:28.726 [DEBUG] [Thread-131879] [transport.py] [_log()] Compression: none
2025-12-31T17:37:28.726 [DEBUG] [Thread-131879] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:37:28.785 [DEBUG] [Thread-131879] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:37:28.785 [DEBUG] [Thread-131879] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:37:28.786 [DEBUG] [Thread-131879] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T17:37:28.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T17:37:28.787 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:37:28.844 [DEBUG] [Thread-131879] [transport.py] [_log()] userauth is OK
2025-12-31T17:37:28.844 [DEBUG] [Thread-131879] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:37:28.845 [DEBUG] [Thread-131879] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:37:28.845 [DEBUG] [Thread-131879] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T17:37:28.845 [DEBUG] [Thread-131879] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:37:28.863 [INFO] [Thread-131879] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:37:28.864 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T17:37:28.864 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:37:29.700 [DEBUG] [Thread-131879] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:37:29.700 [DEBUG] [Thread-131879] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:37:29.747 [DEBUG] [Thread-131879] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:37:29.747 [DEBUG] [Thread-131879] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:37:29.756 [DEBUG] [Thread-131879] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:37:29.764 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:37:29.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T17:37:29.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T17:37:29.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:37:29.781 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:37:29.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:37:29.789 [DEBUG] [Thread-131879] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:37:32.303 [DEBUG] [Thread-131881 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:37:47.353 [DEBUG] [Thread-131882 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:37:59.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T17:37:59.812 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T17:37:59.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T17:38:00.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 17, 37, 36), 23.43, 21.31, 0.0, 25.27, 23.78, 0, 0, 0, 2, 0, 0),)
2025-12-31T17:38:00.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 17:37:36
2025-12-31T17:38:00.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T17:38:00.813 [DEBUG] [Thread-131883] [transport.py] [_log()] starting thread (client mode): 0xb6bb1ba0
2025-12-31T17:38:00.813 [DEBUG] [Thread-131883] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:38:00.833 [DEBUG] [Thread-131883] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T17:38:00.834 [INFO] [Thread-131883] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T17:38:00.837 [DEBUG] [Thread-131883] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:38:00.837 [DEBUG] [Thread-131883] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T17:38:00.837 [DEBUG] [Thread-131883] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:38:00.837 [DEBUG] [Thread-131883] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:38:00.837 [DEBUG] [Thread-131883] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:38:00.837 [DEBUG] [Thread-131883] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:38:00.837 [DEBUG] [Thread-131883] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:38:00.837 [DEBUG] [Thread-131883] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:38:00.837 [DEBUG] [Thread-131883] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:38:00.837 [DEBUG] [Thread-131883] [transport.py] [_log()] client lang: <none>
2025-12-31T17:38:00.837 [DEBUG] [Thread-131883] [transport.py] [_log()] server lang: <none>
2025-12-31T17:38:00.837 [DEBUG] [Thread-131883] [transport.py] [_log()] kex follows: False
2025-12-31T17:38:00.837 [DEBUG] [Thread-131883] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:38:00.837 [DEBUG] [Thread-131883] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:38:00.837 [DEBUG] [Thread-131883] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:38:00.837 [DEBUG] [Thread-131883] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:38:00.837 [DEBUG] [Thread-131883] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:38:00.837 [DEBUG] [Thread-131883] [transport.py] [_log()] Compression: none
2025-12-31T17:38:00.837 [DEBUG] [Thread-131883] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:38:00.854 [DEBUG] [Thread-131883] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:38:00.855 [DEBUG] [Thread-131883] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:38:00.855 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T17:38:00.856 [DEBUG] [Thread-131883] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T17:38:00.857 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:38:00.858 [DEBUG] [Thread-131883] [transport.py] [_log()] userauth is OK
2025-12-31T17:38:00.858 [DEBUG] [Thread-131883] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:38:00.858 [DEBUG] [Thread-131883] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:38:00.858 [DEBUG] [Thread-131883] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T17:38:00.858 [DEBUG] [Thread-131883] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:38:00.882 [INFO] [Thread-131883] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:38:00.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:38:01.500 [DEBUG] [Thread-131883] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:38:01.500 [DEBUG] [Thread-131883] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:38:01.500 [DEBUG] [Thread-131883] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T17:38:01.541 [DEBUG] [Thread-131883] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:38:01.541 [DEBUG] [Thread-131883] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:38:01.545 [DEBUG] [Thread-131883] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:38:01.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:38:01.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T17:38:01.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T17:38:01.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T17:38:01.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:38:01.568 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T17:38:01.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:38:01.568 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:38:01.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T17:38:01.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.650835 -999.00  +23.50  23.53     27   +3.40 1 2 1 1 1   887    0 18.60 -120.91 ----- 23.1 23.5 266.0 26.4 25.8 -17.3 25.8 -16.7 25.4 -14.7 25.6 -15.8
2025-12-31T17:38:01.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T17:38:01.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T17:38:01.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.650835
2025-12-31T17:38:01.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T17:38:01.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T17:38:01.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T17:38:01.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T17:38:01.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T17:38:01.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T17:37:36', tmtdew=23.43, humidity=21.31, cloud=0.0, wind=25.27, temperature=23.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T15:37:12.144', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T17:38:01.570 [DEBUG] [Thread-131883] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:38:01.654 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T17:38:01.666 [DEBUG] [Thread-131886] [transport.py] [_log()] starting thread (client mode): 0xb6b62350
2025-12-31T17:38:01.667 [DEBUG] [Thread-131886] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:38:01.681 [DEBUG] [Thread-131886] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T17:38:01.682 [INFO] [Thread-131886] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T17:38:01.689 [DEBUG] [Thread-131886] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:38:01.689 [DEBUG] [Thread-131886] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T17:38:01.690 [DEBUG] [Thread-131886] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:38:01.690 [DEBUG] [Thread-131886] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:38:01.690 [DEBUG] [Thread-131886] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:38:01.690 [DEBUG] [Thread-131886] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:38:01.690 [DEBUG] [Thread-131886] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:38:01.690 [DEBUG] [Thread-131886] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:38:01.690 [DEBUG] [Thread-131886] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:38:01.690 [DEBUG] [Thread-131886] [transport.py] [_log()] client lang: <none>
2025-12-31T17:38:01.691 [DEBUG] [Thread-131886] [transport.py] [_log()] server lang: <none>
2025-12-31T17:38:01.691 [DEBUG] [Thread-131886] [transport.py] [_log()] kex follows: False
2025-12-31T17:38:01.691 [DEBUG] [Thread-131886] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:38:01.691 [DEBUG] [Thread-131886] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:38:01.691 [DEBUG] [Thread-131886] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:38:01.691 [DEBUG] [Thread-131886] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:38:01.691 [DEBUG] [Thread-131886] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:38:01.692 [DEBUG] [Thread-131886] [transport.py] [_log()] Compression: none
2025-12-31T17:38:01.692 [DEBUG] [Thread-131886] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:38:01.747 [DEBUG] [Thread-131886] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:38:01.748 [DEBUG] [Thread-131886] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:38:01.748 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T17:38:01.749 [DEBUG] [Thread-131886] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T17:38:01.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:38:01.803 [DEBUG] [Thread-131886] [transport.py] [_log()] userauth is OK
2025-12-31T17:38:01.804 [DEBUG] [Thread-131886] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:38:01.804 [DEBUG] [Thread-131886] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:38:01.804 [DEBUG] [Thread-131886] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T17:38:01.804 [DEBUG] [Thread-131886] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:38:01.825 [INFO] [Thread-131886] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:38:01.826 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T17:38:01.826 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:38:02.378 [DEBUG] [Thread-131888 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:38:02.690 [DEBUG] [Thread-131886] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:38:02.690 [DEBUG] [Thread-131886] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:38:02.738 [DEBUG] [Thread-131886] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:38:02.738 [DEBUG] [Thread-131886] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:38:02.748 [DEBUG] [Thread-131886] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:38:02.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:38:02.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T17:38:02.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T17:38:02.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:38:02.775 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:38:02.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:38:02.784 [DEBUG] [Thread-131886] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:38:17.429 [DEBUG] [Thread-131889 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:38:25.977 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:38:25.978 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:38:28.101 [DEBUG] [Thread-131890 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:38:32.462 [DEBUG] [Thread-131891 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:38:32.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T17:38:32.805 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T17:38:32.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T17:38:33.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 17, 38, 8), 23.28, 21.51, 0.0, 23.45, 23.69, 0, 0, 0, 2, 0, 0),)
2025-12-31T17:38:33.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 17:38:08
2025-12-31T17:38:33.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T17:38:33.808 [DEBUG] [Thread-131892] [transport.py] [_log()] starting thread (client mode): 0xb957a290
2025-12-31T17:38:33.808 [DEBUG] [Thread-131892] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:38:33.828 [DEBUG] [Thread-131892] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T17:38:33.828 [INFO] [Thread-131892] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T17:38:33.831 [DEBUG] [Thread-131892] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:38:33.831 [DEBUG] [Thread-131892] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T17:38:33.831 [DEBUG] [Thread-131892] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:38:33.831 [DEBUG] [Thread-131892] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:38:33.831 [DEBUG] [Thread-131892] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:38:33.831 [DEBUG] [Thread-131892] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:38:33.831 [DEBUG] [Thread-131892] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:38:33.831 [DEBUG] [Thread-131892] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:38:33.831 [DEBUG] [Thread-131892] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:38:33.831 [DEBUG] [Thread-131892] [transport.py] [_log()] client lang: <none>
2025-12-31T17:38:33.831 [DEBUG] [Thread-131892] [transport.py] [_log()] server lang: <none>
2025-12-31T17:38:33.831 [DEBUG] [Thread-131892] [transport.py] [_log()] kex follows: False
2025-12-31T17:38:33.831 [DEBUG] [Thread-131892] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:38:33.831 [DEBUG] [Thread-131892] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:38:33.831 [DEBUG] [Thread-131892] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:38:33.831 [DEBUG] [Thread-131892] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:38:33.831 [DEBUG] [Thread-131892] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:38:33.831 [DEBUG] [Thread-131892] [transport.py] [_log()] Compression: none
2025-12-31T17:38:33.831 [DEBUG] [Thread-131892] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:38:33.848 [DEBUG] [Thread-131892] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:38:33.848 [DEBUG] [Thread-131892] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:38:33.849 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T17:38:33.849 [DEBUG] [Thread-131892] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T17:38:33.850 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:38:33.851 [DEBUG] [Thread-131892] [transport.py] [_log()] userauth is OK
2025-12-31T17:38:33.851 [DEBUG] [Thread-131892] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:38:33.851 [DEBUG] [Thread-131892] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:38:33.851 [DEBUG] [Thread-131892] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T17:38:33.851 [DEBUG] [Thread-131892] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:38:33.870 [INFO] [Thread-131892] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:38:33.871 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:38:34.699 [DEBUG] [Thread-131892] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:38:34.700 [DEBUG] [Thread-131892] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:38:34.701 [DEBUG] [Thread-131892] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T17:38:34.741 [DEBUG] [Thread-131892] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:38:34.741 [DEBUG] [Thread-131892] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:38:34.745 [DEBUG] [Thread-131892] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:38:34.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:38:34.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T17:38:34.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T17:38:34.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T17:38:34.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:38:34.769 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T17:38:34.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:38:34.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:38:34.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T17:38:34.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.651182 -999.00  +23.50  26.12     27   +3.50 1 2 1 1 1   887    0 18.33 -119.89 ----- 21.9 26.1 273.8 29.9 25.8 -16.7 25.8 -16.3 25.3 -15.0 25.6 -15.2
2025-12-31T17:38:34.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T17:38:34.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T17:38:34.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.651182
2025-12-31T17:38:34.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T17:38:34.771 [DEBUG] [Thread-131892] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:38:34.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T17:38:34.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T17:38:34.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T17:38:34.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T17:38:34.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T17:38:08', tmtdew=23.28, humidity=21.51, cloud=0.0, wind=23.45, temperature=23.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T15:37:42.125', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T17:38:34.855 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T17:38:34.867 [DEBUG] [Thread-131895] [transport.py] [_log()] starting thread (client mode): 0xb95f01c0
2025-12-31T17:38:34.867 [DEBUG] [Thread-131895] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:38:34.883 [DEBUG] [Thread-131895] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T17:38:34.883 [INFO] [Thread-131895] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T17:38:34.890 [DEBUG] [Thread-131895] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:38:34.891 [DEBUG] [Thread-131895] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T17:38:34.891 [DEBUG] [Thread-131895] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:38:34.891 [DEBUG] [Thread-131895] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:38:34.891 [DEBUG] [Thread-131895] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:38:34.891 [DEBUG] [Thread-131895] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:38:34.891 [DEBUG] [Thread-131895] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:38:34.891 [DEBUG] [Thread-131895] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:38:34.891 [DEBUG] [Thread-131895] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:38:34.891 [DEBUG] [Thread-131895] [transport.py] [_log()] client lang: <none>
2025-12-31T17:38:34.891 [DEBUG] [Thread-131895] [transport.py] [_log()] server lang: <none>
2025-12-31T17:38:34.891 [DEBUG] [Thread-131895] [transport.py] [_log()] kex follows: False
2025-12-31T17:38:34.891 [DEBUG] [Thread-131895] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:38:34.891 [DEBUG] [Thread-131895] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:38:34.891 [DEBUG] [Thread-131895] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:38:34.891 [DEBUG] [Thread-131895] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:38:34.891 [DEBUG] [Thread-131895] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:38:34.892 [DEBUG] [Thread-131895] [transport.py] [_log()] Compression: none
2025-12-31T17:38:34.892 [DEBUG] [Thread-131895] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:38:34.950 [DEBUG] [Thread-131895] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:38:34.951 [DEBUG] [Thread-131895] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:38:34.951 [DEBUG] [Thread-131895] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T17:38:34.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T17:38:34.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:38:35.007 [DEBUG] [Thread-131895] [transport.py] [_log()] userauth is OK
2025-12-31T17:38:35.007 [DEBUG] [Thread-131895] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:38:35.007 [DEBUG] [Thread-131895] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:38:35.007 [DEBUG] [Thread-131895] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T17:38:35.007 [DEBUG] [Thread-131895] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:38:35.026 [INFO] [Thread-131895] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:38:35.027 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T17:38:35.028 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:38:35.899 [DEBUG] [Thread-131895] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:38:35.899 [DEBUG] [Thread-131895] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:38:35.946 [DEBUG] [Thread-131895] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:38:35.947 [DEBUG] [Thread-131895] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:38:35.955 [DEBUG] [Thread-131895] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:38:35.963 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:38:35.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-12-31T17:38:35.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T17:38:35.981 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:38:35.981 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:38:35.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:38:35.990 [DEBUG] [Thread-131895] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:38:47.495 [DEBUG] [Thread-131897 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:39:02.550 [DEBUG] [Thread-131898 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:39:06.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T17:39:06.012 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T17:39:06.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T17:39:06.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 17, 38, 40), 23.29, 21.51, 0.0, 21.26, 23.76, 0, 0, 0, 2, 0, 0),)
2025-12-31T17:39:06.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 17:38:40
2025-12-31T17:39:06.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T17:39:07.057 [DEBUG] [Thread-131899] [transport.py] [_log()] starting thread (client mode): 0xb6b631c0
2025-12-31T17:39:07.058 [DEBUG] [Thread-131899] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:39:07.078 [DEBUG] [Thread-131899] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T17:39:07.079 [INFO] [Thread-131899] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T17:39:07.082 [DEBUG] [Thread-131899] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:39:07.082 [DEBUG] [Thread-131899] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T17:39:07.082 [DEBUG] [Thread-131899] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:39:07.082 [DEBUG] [Thread-131899] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:39:07.082 [DEBUG] [Thread-131899] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:39:07.082 [DEBUG] [Thread-131899] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:39:07.082 [DEBUG] [Thread-131899] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:39:07.082 [DEBUG] [Thread-131899] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:39:07.082 [DEBUG] [Thread-131899] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:39:07.082 [DEBUG] [Thread-131899] [transport.py] [_log()] client lang: <none>
2025-12-31T17:39:07.082 [DEBUG] [Thread-131899] [transport.py] [_log()] server lang: <none>
2025-12-31T17:39:07.082 [DEBUG] [Thread-131899] [transport.py] [_log()] kex follows: False
2025-12-31T17:39:07.082 [DEBUG] [Thread-131899] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:39:07.082 [DEBUG] [Thread-131899] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:39:07.082 [DEBUG] [Thread-131899] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:39:07.082 [DEBUG] [Thread-131899] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:39:07.082 [DEBUG] [Thread-131899] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:39:07.082 [DEBUG] [Thread-131899] [transport.py] [_log()] Compression: none
2025-12-31T17:39:07.082 [DEBUG] [Thread-131899] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:39:07.098 [DEBUG] [Thread-131899] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:39:07.098 [DEBUG] [Thread-131899] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:39:07.099 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T17:39:07.099 [DEBUG] [Thread-131899] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T17:39:07.099 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:39:07.100 [DEBUG] [Thread-131899] [transport.py] [_log()] userauth is OK
2025-12-31T17:39:07.100 [DEBUG] [Thread-131899] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:39:07.100 [DEBUG] [Thread-131899] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:39:07.100 [DEBUG] [Thread-131899] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T17:39:07.100 [DEBUG] [Thread-131899] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:39:07.110 [INFO] [Thread-131899] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:39:07.111 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:39:07.763 [DEBUG] [Thread-131899] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:39:07.763 [DEBUG] [Thread-131899] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:39:07.763 [DEBUG] [Thread-131899] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T17:39:07.804 [DEBUG] [Thread-131899] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:39:07.804 [DEBUG] [Thread-131899] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:39:07.806 [DEBUG] [Thread-131899] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:39:07.818 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:39:07.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T17:39:07.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T17:39:07.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T17:39:07.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:39:07.824 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T17:39:07.824 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:39:07.825 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:39:07.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T17:39:07.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.651529 -999.00  +23.50  13.74     27   +3.50 1 2 1 1 1   887    0 18.11 -124.21 ----- 16.7 13.7 279.3 23.9 25.8 -16.0 25.8 -16.0 25.4 -14.3 25.6 -14.4
2025-12-31T17:39:07.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T17:39:07.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T17:39:07.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.651529
2025-12-31T17:39:07.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T17:39:07.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T17:39:07.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T17:39:07.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T17:39:07.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T17:39:07.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T17:38:40', tmtdew=23.29, humidity=21.51, cloud=0.0, wind=21.26, temperature=23.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T15:38:12.106', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T17:39:07.826 [DEBUG] [Thread-131899] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:39:07.900 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T17:39:07.913 [DEBUG] [Thread-131902] [transport.py] [_log()] starting thread (client mode): 0xb95f1b10
2025-12-31T17:39:07.913 [DEBUG] [Thread-131902] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:39:07.930 [DEBUG] [Thread-131902] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T17:39:07.930 [INFO] [Thread-131902] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T17:39:07.942 [DEBUG] [Thread-131902] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:39:07.942 [DEBUG] [Thread-131902] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T17:39:07.942 [DEBUG] [Thread-131902] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:39:07.942 [DEBUG] [Thread-131902] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:39:07.942 [DEBUG] [Thread-131902] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:39:07.942 [DEBUG] [Thread-131902] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:39:07.942 [DEBUG] [Thread-131902] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:39:07.942 [DEBUG] [Thread-131902] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:39:07.942 [DEBUG] [Thread-131902] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:39:07.942 [DEBUG] [Thread-131902] [transport.py] [_log()] client lang: <none>
2025-12-31T17:39:07.942 [DEBUG] [Thread-131902] [transport.py] [_log()] server lang: <none>
2025-12-31T17:39:07.942 [DEBUG] [Thread-131902] [transport.py] [_log()] kex follows: False
2025-12-31T17:39:07.942 [DEBUG] [Thread-131902] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:39:07.942 [DEBUG] [Thread-131902] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:39:07.942 [DEBUG] [Thread-131902] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:39:07.942 [DEBUG] [Thread-131902] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:39:07.942 [DEBUG] [Thread-131902] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:39:07.942 [DEBUG] [Thread-131902] [transport.py] [_log()] Compression: none
2025-12-31T17:39:07.942 [DEBUG] [Thread-131902] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:39:07.998 [DEBUG] [Thread-131902] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:39:07.998 [DEBUG] [Thread-131902] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:39:07.998 [DEBUG] [Thread-131902] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T17:39:07.999 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T17:39:07.999 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:39:08.054 [DEBUG] [Thread-131902] [transport.py] [_log()] userauth is OK
2025-12-31T17:39:08.054 [DEBUG] [Thread-131902] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:39:08.054 [DEBUG] [Thread-131902] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:39:08.054 [DEBUG] [Thread-131902] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T17:39:08.054 [DEBUG] [Thread-131902] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:39:08.069 [INFO] [Thread-131902] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:39:08.069 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T17:39:08.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:39:08.908 [DEBUG] [Thread-131902] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:39:08.908 [DEBUG] [Thread-131902] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:39:08.961 [DEBUG] [Thread-131902] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:39:08.961 [DEBUG] [Thread-131902] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:39:08.972 [DEBUG] [Thread-131902] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:39:08.983 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:39:08.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T17:39:08.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T17:39:09.007 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:39:09.007 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:39:09.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:39:09.015 [DEBUG] [Thread-131902] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:39:17.583 [DEBUG] [Thread-131904 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:39:26.119 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:39:26.120 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:39:28.170 [DEBUG] [Thread-131905 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:39:32.644 [DEBUG] [Thread-131906 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:39:39.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T17:39:39.030 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T17:39:39.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T17:39:39.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 17, 39, 12), 23.39, 21.38, 0.0, 26.71, 23.84, 0, 0, 0, 2, 0, 0),)
2025-12-31T17:39:39.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 17:39:12
2025-12-31T17:39:39.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T17:39:40.039 [DEBUG] [Thread-131907] [transport.py] [_log()] starting thread (client mode): 0xb95799c0
2025-12-31T17:39:40.039 [DEBUG] [Thread-131907] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:39:40.059 [DEBUG] [Thread-131907] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T17:39:40.060 [INFO] [Thread-131907] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T17:39:40.062 [DEBUG] [Thread-131907] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:39:40.062 [DEBUG] [Thread-131907] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T17:39:40.062 [DEBUG] [Thread-131907] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:39:40.062 [DEBUG] [Thread-131907] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:39:40.062 [DEBUG] [Thread-131907] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:39:40.062 [DEBUG] [Thread-131907] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:39:40.062 [DEBUG] [Thread-131907] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:39:40.062 [DEBUG] [Thread-131907] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:39:40.062 [DEBUG] [Thread-131907] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:39:40.062 [DEBUG] [Thread-131907] [transport.py] [_log()] client lang: <none>
2025-12-31T17:39:40.062 [DEBUG] [Thread-131907] [transport.py] [_log()] server lang: <none>
2025-12-31T17:39:40.062 [DEBUG] [Thread-131907] [transport.py] [_log()] kex follows: False
2025-12-31T17:39:40.063 [DEBUG] [Thread-131907] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:39:40.063 [DEBUG] [Thread-131907] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:39:40.063 [DEBUG] [Thread-131907] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:39:40.063 [DEBUG] [Thread-131907] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:39:40.063 [DEBUG] [Thread-131907] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:39:40.063 [DEBUG] [Thread-131907] [transport.py] [_log()] Compression: none
2025-12-31T17:39:40.063 [DEBUG] [Thread-131907] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:39:40.080 [DEBUG] [Thread-131907] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:39:40.080 [DEBUG] [Thread-131907] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:39:40.081 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T17:39:40.081 [DEBUG] [Thread-131907] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T17:39:40.082 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:39:40.083 [DEBUG] [Thread-131907] [transport.py] [_log()] userauth is OK
2025-12-31T17:39:40.083 [DEBUG] [Thread-131907] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:39:40.084 [DEBUG] [Thread-131907] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:39:40.084 [DEBUG] [Thread-131907] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T17:39:40.084 [DEBUG] [Thread-131907] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:39:40.108 [INFO] [Thread-131907] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:39:40.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:39:40.883 [DEBUG] [Thread-131907] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:39:40.883 [DEBUG] [Thread-131907] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:39:40.884 [DEBUG] [Thread-131907] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T17:39:40.924 [DEBUG] [Thread-131907] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:39:40.924 [DEBUG] [Thread-131907] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:39:40.927 [DEBUG] [Thread-131907] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:39:40.940 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:39:40.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T17:39:40.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T17:39:40.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T17:39:40.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:39:40.950 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T17:39:40.950 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:39:40.950 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:39:40.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T17:39:40.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.651877 -999.00  +23.70  21.69     27   +3.60 1 2 1 1 1   887    0 18.08 -127.14 ----- 15.8 21.7 273.0 33.2 25.8 -16.2 25.8 -15.4 25.4 -13.7 25.7 -14.8
2025-12-31T17:39:40.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T17:39:40.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T17:39:40.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.651877
2025-12-31T17:39:40.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T17:39:40.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T17:39:40.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T17:39:40.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T17:39:40.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T17:39:40.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T17:39:12', tmtdew=23.39, humidity=21.38, cloud=0.0, wind=26.71, temperature=23.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T15:38:42.173', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T17:39:40.953 [DEBUG] [Thread-131907] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:39:41.027 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T17:39:41.039 [DEBUG] [Thread-131910] [transport.py] [_log()] starting thread (client mode): 0xb6ba3310
2025-12-31T17:39:41.039 [DEBUG] [Thread-131910] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:39:41.054 [DEBUG] [Thread-131910] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T17:39:41.054 [INFO] [Thread-131910] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T17:39:41.062 [DEBUG] [Thread-131910] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:39:41.062 [DEBUG] [Thread-131910] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T17:39:41.062 [DEBUG] [Thread-131910] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:39:41.062 [DEBUG] [Thread-131910] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:39:41.062 [DEBUG] [Thread-131910] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:39:41.062 [DEBUG] [Thread-131910] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:39:41.063 [DEBUG] [Thread-131910] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:39:41.063 [DEBUG] [Thread-131910] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:39:41.063 [DEBUG] [Thread-131910] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:39:41.063 [DEBUG] [Thread-131910] [transport.py] [_log()] client lang: <none>
2025-12-31T17:39:41.063 [DEBUG] [Thread-131910] [transport.py] [_log()] server lang: <none>
2025-12-31T17:39:41.063 [DEBUG] [Thread-131910] [transport.py] [_log()] kex follows: False
2025-12-31T17:39:41.063 [DEBUG] [Thread-131910] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:39:41.063 [DEBUG] [Thread-131910] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:39:41.063 [DEBUG] [Thread-131910] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:39:41.063 [DEBUG] [Thread-131910] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:39:41.063 [DEBUG] [Thread-131910] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:39:41.063 [DEBUG] [Thread-131910] [transport.py] [_log()] Compression: none
2025-12-31T17:39:41.063 [DEBUG] [Thread-131910] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:39:41.121 [DEBUG] [Thread-131910] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:39:41.122 [DEBUG] [Thread-131910] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:39:41.122 [DEBUG] [Thread-131910] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T17:39:41.123 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T17:39:41.123 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:39:41.177 [DEBUG] [Thread-131910] [transport.py] [_log()] userauth is OK
2025-12-31T17:39:41.178 [DEBUG] [Thread-131910] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:39:41.178 [DEBUG] [Thread-131910] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:39:41.178 [DEBUG] [Thread-131910] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T17:39:41.178 [DEBUG] [Thread-131910] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:39:41.196 [INFO] [Thread-131910] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:39:41.197 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T17:39:41.197 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:39:42.034 [DEBUG] [Thread-131910] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:39:42.034 [DEBUG] [Thread-131910] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:39:42.082 [DEBUG] [Thread-131910] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:39:42.082 [DEBUG] [Thread-131910] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:39:42.091 [DEBUG] [Thread-131910] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:39:42.100 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:39:42.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T17:39:42.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T17:39:42.119 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:39:42.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:39:42.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:39:42.128 [DEBUG] [Thread-131910] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:39:47.682 [DEBUG] [Thread-131912 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:40:02.722 [DEBUG] [Thread-131913 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:40:12.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T17:40:12.150 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T17:40:12.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T17:40:12.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 17, 39, 44), 23.52, 21.36, 0.0, 26.73, 23.99, 0, 0, 0, 2, 0, 0),)
2025-12-31T17:40:12.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 17:39:44
2025-12-31T17:40:12.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T17:40:13.129 [DEBUG] [Thread-131914] [transport.py] [_log()] starting thread (client mode): 0xb6b62aa0
2025-12-31T17:40:13.129 [DEBUG] [Thread-131914] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:40:13.150 [DEBUG] [Thread-131914] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T17:40:13.150 [INFO] [Thread-131914] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T17:40:13.152 [DEBUG] [Thread-131914] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:40:13.152 [DEBUG] [Thread-131914] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T17:40:13.152 [DEBUG] [Thread-131914] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:40:13.152 [DEBUG] [Thread-131914] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:40:13.152 [DEBUG] [Thread-131914] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:40:13.152 [DEBUG] [Thread-131914] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:40:13.152 [DEBUG] [Thread-131914] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:40:13.152 [DEBUG] [Thread-131914] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:40:13.152 [DEBUG] [Thread-131914] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:40:13.152 [DEBUG] [Thread-131914] [transport.py] [_log()] client lang: <none>
2025-12-31T17:40:13.152 [DEBUG] [Thread-131914] [transport.py] [_log()] server lang: <none>
2025-12-31T17:40:13.152 [DEBUG] [Thread-131914] [transport.py] [_log()] kex follows: False
2025-12-31T17:40:13.152 [DEBUG] [Thread-131914] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:40:13.152 [DEBUG] [Thread-131914] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:40:13.152 [DEBUG] [Thread-131914] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:40:13.152 [DEBUG] [Thread-131914] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:40:13.152 [DEBUG] [Thread-131914] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:40:13.152 [DEBUG] [Thread-131914] [transport.py] [_log()] Compression: none
2025-12-31T17:40:13.152 [DEBUG] [Thread-131914] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:40:13.161 [DEBUG] [Thread-131914] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:40:13.161 [DEBUG] [Thread-131914] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:40:13.161 [DEBUG] [Thread-131914] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T17:40:13.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T17:40:13.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:40:13.163 [DEBUG] [Thread-131914] [transport.py] [_log()] userauth is OK
2025-12-31T17:40:13.163 [DEBUG] [Thread-131914] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:40:13.163 [DEBUG] [Thread-131914] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:40:13.163 [DEBUG] [Thread-131914] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T17:40:13.163 [DEBUG] [Thread-131914] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:40:13.187 [INFO] [Thread-131914] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:40:13.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:40:17.196 [DEBUG] [Thread-131914] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:40:17.196 [DEBUG] [Thread-131914] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:40:17.196 [DEBUG] [Thread-131914] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T17:40:17.237 [DEBUG] [Thread-131914] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:40:17.237 [DEBUG] [Thread-131914] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:40:17.239 [DEBUG] [Thread-131914] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:40:17.308 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:40:17.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T17:40:17.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T17:40:17.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T17:40:17.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:40:17.317 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T17:40:17.317 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:40:17.317 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:40:17.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T17:40:17.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.652571 -999.00  +23.50  26.68     27   +3.40 1 2 1 1 1   887    0 17.51 -142.10 ----- 21.4 26.7 275.4 39.5 25.7 -16.4 25.7 -15.5 25.2 -13.0 25.6 -14.4
2025-12-31T17:40:17.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T17:40:17.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T17:40:17.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.652571
2025-12-31T17:40:17.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T17:40:17.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T17:40:17.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T17:40:17.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T17:40:17.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T17:40:17.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T17:39:44', tmtdew=23.52, humidity=21.36, cloud=0.0, wind=26.73, temperature=23.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T15:39:42.134', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T17:40:17.318 [DEBUG] [Thread-131914] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:40:17.392 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T17:40:17.404 [DEBUG] [Thread-131917] [transport.py] [_log()] starting thread (client mode): 0xb95d4580
2025-12-31T17:40:17.404 [DEBUG] [Thread-131917] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:40:17.419 [DEBUG] [Thread-131917] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T17:40:17.419 [INFO] [Thread-131917] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T17:40:17.427 [DEBUG] [Thread-131917] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:40:17.427 [DEBUG] [Thread-131917] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T17:40:17.427 [DEBUG] [Thread-131917] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:40:17.427 [DEBUG] [Thread-131917] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:40:17.427 [DEBUG] [Thread-131917] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:40:17.427 [DEBUG] [Thread-131917] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:40:17.427 [DEBUG] [Thread-131917] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:40:17.427 [DEBUG] [Thread-131917] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:40:17.427 [DEBUG] [Thread-131917] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:40:17.427 [DEBUG] [Thread-131917] [transport.py] [_log()] client lang: <none>
2025-12-31T17:40:17.427 [DEBUG] [Thread-131917] [transport.py] [_log()] server lang: <none>
2025-12-31T17:40:17.427 [DEBUG] [Thread-131917] [transport.py] [_log()] kex follows: False
2025-12-31T17:40:17.427 [DEBUG] [Thread-131917] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:40:17.427 [DEBUG] [Thread-131917] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:40:17.427 [DEBUG] [Thread-131917] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:40:17.427 [DEBUG] [Thread-131917] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:40:17.427 [DEBUG] [Thread-131917] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:40:17.428 [DEBUG] [Thread-131917] [transport.py] [_log()] Compression: none
2025-12-31T17:40:17.428 [DEBUG] [Thread-131917] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:40:17.483 [DEBUG] [Thread-131917] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:40:17.483 [DEBUG] [Thread-131917] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:40:17.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T17:40:17.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:40:17.484 [DEBUG] [Thread-131917] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T17:40:17.540 [DEBUG] [Thread-131917] [transport.py] [_log()] userauth is OK
2025-12-31T17:40:17.540 [DEBUG] [Thread-131917] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:40:17.540 [DEBUG] [Thread-131917] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:40:17.540 [DEBUG] [Thread-131917] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T17:40:17.540 [DEBUG] [Thread-131917] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:40:17.557 [INFO] [Thread-131917] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:40:17.557 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T17:40:17.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:40:17.753 [DEBUG] [Thread-131919 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:40:18.404 [DEBUG] [Thread-131917] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:40:18.404 [DEBUG] [Thread-131917] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:40:18.451 [DEBUG] [Thread-131917] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:40:18.451 [DEBUG] [Thread-131917] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:40:18.459 [DEBUG] [Thread-131917] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:40:18.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:40:18.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T17:40:18.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T17:40:18.483 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:40:18.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:40:18.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:40:18.491 [DEBUG] [Thread-131917] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:40:26.258 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:40:26.259 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:40:28.226 [DEBUG] [Thread-131920 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:40:32.800 [DEBUG] [Thread-131921 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:40:47.838 [DEBUG] [Thread-131922 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:40:48.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T17:40:48.514 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T17:40:48.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T17:40:49.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 17, 40, 16), 23.71, 21.1, 0.0, 30.79, 24.09, 0, 0, 0, 2, 0, 0),)
2025-12-31T17:40:49.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 17:40:16
2025-12-31T17:40:49.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T17:40:49.568 [DEBUG] [Thread-131923] [transport.py] [_log()] starting thread (client mode): 0xb95f0fa0
2025-12-31T17:40:49.568 [DEBUG] [Thread-131923] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:40:49.589 [DEBUG] [Thread-131923] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T17:40:49.589 [INFO] [Thread-131923] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T17:40:49.592 [DEBUG] [Thread-131923] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:40:49.592 [DEBUG] [Thread-131923] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T17:40:49.592 [DEBUG] [Thread-131923] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:40:49.592 [DEBUG] [Thread-131923] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:40:49.592 [DEBUG] [Thread-131923] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:40:49.592 [DEBUG] [Thread-131923] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:40:49.592 [DEBUG] [Thread-131923] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:40:49.592 [DEBUG] [Thread-131923] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:40:49.592 [DEBUG] [Thread-131923] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:40:49.592 [DEBUG] [Thread-131923] [transport.py] [_log()] client lang: <none>
2025-12-31T17:40:49.592 [DEBUG] [Thread-131923] [transport.py] [_log()] server lang: <none>
2025-12-31T17:40:49.592 [DEBUG] [Thread-131923] [transport.py] [_log()] kex follows: False
2025-12-31T17:40:49.592 [DEBUG] [Thread-131923] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:40:49.592 [DEBUG] [Thread-131923] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:40:49.592 [DEBUG] [Thread-131923] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:40:49.592 [DEBUG] [Thread-131923] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:40:49.593 [DEBUG] [Thread-131923] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:40:49.593 [DEBUG] [Thread-131923] [transport.py] [_log()] Compression: none
2025-12-31T17:40:49.593 [DEBUG] [Thread-131923] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:40:49.607 [DEBUG] [Thread-131923] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:40:49.608 [DEBUG] [Thread-131923] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:40:49.608 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T17:40:49.608 [DEBUG] [Thread-131923] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T17:40:49.608 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:40:49.608 [DEBUG] [Thread-131923] [transport.py] [_log()] userauth is OK
2025-12-31T17:40:49.608 [DEBUG] [Thread-131923] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:40:49.608 [DEBUG] [Thread-131923] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:40:49.609 [DEBUG] [Thread-131923] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T17:40:49.609 [DEBUG] [Thread-131923] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:40:49.618 [INFO] [Thread-131923] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:40:49.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:40:50.207 [DEBUG] [Thread-131923] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:40:50.207 [DEBUG] [Thread-131923] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:40:50.207 [DEBUG] [Thread-131923] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T17:40:50.249 [DEBUG] [Thread-131923] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:40:50.249 [DEBUG] [Thread-131923] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:40:50.251 [DEBUG] [Thread-131923] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:40:50.264 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:40:50.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T17:40:50.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T17:40:50.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T17:40:50.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:40:50.272 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T17:40:50.272 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:40:50.272 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:40:50.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T17:40:50.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.652918 -999.00  +23.50  19.92     26   +3.30 1 2 1 1 1   887    0 17.19 -142.59 ----- 22.9 19.9 281.5 31.9 25.7 -15.4 25.7 -14.4 25.3 -13.1 25.7 -13.6
2025-12-31T17:40:50.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T17:40:50.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T17:40:50.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.652918
2025-12-31T17:40:50.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T17:40:50.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T17:40:50.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T17:40:50.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T17:40:50.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T17:40:50.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T17:40:16', tmtdew=23.71, humidity=21.1, cloud=0.0, wind=30.79, temperature=24.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T15:40:12.115', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T17:40:50.273 [DEBUG] [Thread-131923] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:40:50.346 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T17:41:02.872 [DEBUG] [Thread-131926 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:41:17.912 [DEBUG] [Thread-131927 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:41:26.398 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:41:26.399 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:41:28.280 [DEBUG] [Thread-131928 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:41:32.949 [DEBUG] [Thread-131929 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:41:47.984 [DEBUG] [Thread-131930 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:42:03.020 [DEBUG] [Thread-131931 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:42:18.055 [DEBUG] [Thread-131932 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:42:26.539 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:42:26.540 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:42:28.336 [DEBUG] [Thread-131933 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:42:33.088 [DEBUG] [Thread-131934 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:42:48.126 [DEBUG] [Thread-131935 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:43:03.157 [DEBUG] [Thread-131936 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:43:05.173 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-12-31T17:43:18.193 [DEBUG] [Thread-131937 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:43:26.680 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:43:26.681 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:43:28.397 [DEBUG] [Thread-131938 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:43:33.231 [DEBUG] [Thread-131939 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:43:35.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T17:43:35.204 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T17:43:35.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T17:43:35.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 17, 43, 29), 23.91, 20.55, 0.0, 30.01, 23.88, 0, 0, 0, 2, 0, 0),)
2025-12-31T17:43:35.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 17:43:29
2025-12-31T17:43:36.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T17:43:36.202 [DEBUG] [Thread-131940] [transport.py] [_log()] starting thread (client mode): 0xb95d4fa0
2025-12-31T17:43:36.202 [DEBUG] [Thread-131940] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:43:36.222 [DEBUG] [Thread-131940] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T17:43:36.222 [INFO] [Thread-131940] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T17:43:36.226 [DEBUG] [Thread-131940] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:43:36.226 [DEBUG] [Thread-131940] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T17:43:36.226 [DEBUG] [Thread-131940] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:43:36.226 [DEBUG] [Thread-131940] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:43:36.226 [DEBUG] [Thread-131940] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:43:36.226 [DEBUG] [Thread-131940] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:43:36.226 [DEBUG] [Thread-131940] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:43:36.226 [DEBUG] [Thread-131940] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:43:36.226 [DEBUG] [Thread-131940] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:43:36.226 [DEBUG] [Thread-131940] [transport.py] [_log()] client lang: <none>
2025-12-31T17:43:36.226 [DEBUG] [Thread-131940] [transport.py] [_log()] server lang: <none>
2025-12-31T17:43:36.226 [DEBUG] [Thread-131940] [transport.py] [_log()] kex follows: False
2025-12-31T17:43:36.226 [DEBUG] [Thread-131940] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:43:36.226 [DEBUG] [Thread-131940] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:43:36.226 [DEBUG] [Thread-131940] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:43:36.226 [DEBUG] [Thread-131940] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:43:36.226 [DEBUG] [Thread-131940] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:43:36.226 [DEBUG] [Thread-131940] [transport.py] [_log()] Compression: none
2025-12-31T17:43:36.226 [DEBUG] [Thread-131940] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:43:36.243 [DEBUG] [Thread-131940] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:43:36.244 [DEBUG] [Thread-131940] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:43:36.244 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T17:43:36.245 [DEBUG] [Thread-131940] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T17:43:36.245 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:43:36.247 [DEBUG] [Thread-131940] [transport.py] [_log()] userauth is OK
2025-12-31T17:43:36.247 [DEBUG] [Thread-131940] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:43:36.247 [DEBUG] [Thread-131940] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:43:36.247 [DEBUG] [Thread-131940] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T17:43:36.247 [DEBUG] [Thread-131940] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:43:36.270 [INFO] [Thread-131940] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:43:36.270 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:43:36.889 [DEBUG] [Thread-131940] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:43:36.889 [DEBUG] [Thread-131940] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:43:36.889 [DEBUG] [Thread-131940] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T17:43:36.929 [DEBUG] [Thread-131940] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:43:36.930 [DEBUG] [Thread-131940] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:43:36.931 [DEBUG] [Thread-131940] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:43:36.945 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:43:36.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T17:43:36.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T17:43:36.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T17:43:36.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:43:36.955 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T17:43:36.955 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:43:36.955 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:43:36.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T17:43:36.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.654654 -999.00  +23.70  25.83     26   +3.20 1 2 1 1 1   887    0 16.75 -148.31 ----- 22.2 25.8 274.4 34.1 25.8 -15.0 25.8 -13.8 25.4 -13.0 25.7 -13.8
2025-12-31T17:43:36.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T17:43:36.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T17:43:36.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.654654
2025-12-31T17:43:36.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T17:43:36.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T17:43:36.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T17:43:36.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T17:43:36.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T17:43:36.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T17:43:29', tmtdew=23.91, humidity=20.55, cloud=0.0, wind=30.01, temperature=23.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T15:42:42.106', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T17:43:36.957 [DEBUG] [Thread-131940] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:43:37.045 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T17:43:37.057 [DEBUG] [Thread-131943] [transport.py] [_log()] starting thread (client mode): 0xb957b160
2025-12-31T17:43:37.057 [DEBUG] [Thread-131943] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:43:37.072 [DEBUG] [Thread-131943] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T17:43:37.072 [INFO] [Thread-131943] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T17:43:37.081 [DEBUG] [Thread-131943] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:43:37.081 [DEBUG] [Thread-131943] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T17:43:37.081 [DEBUG] [Thread-131943] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:43:37.081 [DEBUG] [Thread-131943] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:43:37.081 [DEBUG] [Thread-131943] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:43:37.081 [DEBUG] [Thread-131943] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:43:37.082 [DEBUG] [Thread-131943] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:43:37.082 [DEBUG] [Thread-131943] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:43:37.082 [DEBUG] [Thread-131943] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:43:37.082 [DEBUG] [Thread-131943] [transport.py] [_log()] client lang: <none>
2025-12-31T17:43:37.082 [DEBUG] [Thread-131943] [transport.py] [_log()] server lang: <none>
2025-12-31T17:43:37.082 [DEBUG] [Thread-131943] [transport.py] [_log()] kex follows: False
2025-12-31T17:43:37.082 [DEBUG] [Thread-131943] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:43:37.082 [DEBUG] [Thread-131943] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:43:37.082 [DEBUG] [Thread-131943] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:43:37.083 [DEBUG] [Thread-131943] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:43:37.083 [DEBUG] [Thread-131943] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:43:37.083 [DEBUG] [Thread-131943] [transport.py] [_log()] Compression: none
2025-12-31T17:43:37.083 [DEBUG] [Thread-131943] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:43:37.138 [DEBUG] [Thread-131943] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:43:37.139 [DEBUG] [Thread-131943] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:43:37.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T17:43:37.140 [DEBUG] [Thread-131943] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T17:43:37.141 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:43:37.198 [DEBUG] [Thread-131943] [transport.py] [_log()] userauth is OK
2025-12-31T17:43:37.198 [DEBUG] [Thread-131943] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:43:37.199 [DEBUG] [Thread-131943] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:43:37.199 [DEBUG] [Thread-131943] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T17:43:37.199 [DEBUG] [Thread-131943] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:43:37.217 [INFO] [Thread-131943] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:43:37.218 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T17:43:37.218 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:43:38.047 [DEBUG] [Thread-131943] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:43:38.048 [DEBUG] [Thread-131943] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:43:38.095 [DEBUG] [Thread-131943] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:43:38.095 [DEBUG] [Thread-131943] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:43:38.104 [DEBUG] [Thread-131943] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:43:38.111 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:43: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-12-31T17:43:38.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T17:43:38.128 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:43:38.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:43:38.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:43:38.135 [DEBUG] [Thread-131943] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:43:48.268 [DEBUG] [Thread-131945 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:44:03.329 [DEBUG] [Thread-131946 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:44:08.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T17:44:08.158 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T17:44:08.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T17:44:08.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 17, 44, 1), 23.74, 21.01, 0.0, 33.07, 23.73, 0, 0, 0, 2, 0, 0),)
2025-12-31T17:44:08.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 17:44:01
2025-12-31T17:44:08.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T17:44:09.144 [DEBUG] [Thread-131947] [transport.py] [_log()] starting thread (client mode): 0xb95d40a0
2025-12-31T17:44:09.145 [DEBUG] [Thread-131947] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:44:09.166 [DEBUG] [Thread-131947] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T17:44:09.166 [INFO] [Thread-131947] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T17:44:09.170 [DEBUG] [Thread-131947] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:44:09.170 [DEBUG] [Thread-131947] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T17:44:09.170 [DEBUG] [Thread-131947] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:44:09.170 [DEBUG] [Thread-131947] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:44:09.170 [DEBUG] [Thread-131947] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:44:09.170 [DEBUG] [Thread-131947] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:44:09.170 [DEBUG] [Thread-131947] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:44:09.170 [DEBUG] [Thread-131947] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:44:09.170 [DEBUG] [Thread-131947] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:44:09.170 [DEBUG] [Thread-131947] [transport.py] [_log()] client lang: <none>
2025-12-31T17:44:09.170 [DEBUG] [Thread-131947] [transport.py] [_log()] server lang: <none>
2025-12-31T17:44:09.170 [DEBUG] [Thread-131947] [transport.py] [_log()] kex follows: False
2025-12-31T17:44:09.171 [DEBUG] [Thread-131947] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:44:09.171 [DEBUG] [Thread-131947] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:44:09.171 [DEBUG] [Thread-131947] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:44:09.171 [DEBUG] [Thread-131947] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:44:09.171 [DEBUG] [Thread-131947] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:44:09.171 [DEBUG] [Thread-131947] [transport.py] [_log()] Compression: none
2025-12-31T17:44:09.171 [DEBUG] [Thread-131947] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:44:09.189 [DEBUG] [Thread-131947] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:44:09.189 [DEBUG] [Thread-131947] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:44:09.190 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T17:44:09.190 [DEBUG] [Thread-131947] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T17:44:09.191 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:44:09.192 [DEBUG] [Thread-131947] [transport.py] [_log()] userauth is OK
2025-12-31T17:44:09.193 [DEBUG] [Thread-131947] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:44:09.193 [DEBUG] [Thread-131947] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:44:09.193 [DEBUG] [Thread-131947] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T17:44:09.193 [DEBUG] [Thread-131947] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:44:09.216 [INFO] [Thread-131947] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:44:09.216 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:44:09.827 [DEBUG] [Thread-131947] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:44:09.827 [DEBUG] [Thread-131947] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:44:09.828 [DEBUG] [Thread-131947] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T17:44:09.868 [DEBUG] [Thread-131947] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:44:09.868 [DEBUG] [Thread-131947] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:44:09.872 [DEBUG] [Thread-131947] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:44:09.878 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:44:09.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T17:44:09.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T17:44:09.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T17:44:09.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:44:09.888 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T17:44:09.888 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:44:09.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:44:09.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T17:44:09.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.655001 -999.00  +23.70  22.04     26   +3.10 1 2 1 1 1   887    0 17.55 -138.50 ----- 23.8 22.0 282.8 33.8 25.8 -14.5 25.8 -13.8 25.5 -12.9 25.7 -14.1
2025-12-31T17:44:09.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T17:44:09.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T17:44:09.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.655001
2025-12-31T17:44:09.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T17:44:09.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T17:44:09.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T17:44:09.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T17:44:09.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T17:44:09.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T17:44:01', tmtdew=23.74, humidity=21.01, cloud=0.0, wind=33.07, temperature=23.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T15:43:12.086', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T17:44:09.890 [DEBUG] [Thread-131947] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:44:09.973 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T17:44:09.986 [DEBUG] [Thread-131950] [transport.py] [_log()] starting thread (client mode): 0xb95d4c10
2025-12-31T17:44:09.986 [DEBUG] [Thread-131950] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:44:10.000 [DEBUG] [Thread-131950] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T17:44:10.001 [INFO] [Thread-131950] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T17:44:10.010 [DEBUG] [Thread-131950] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:44:10.010 [DEBUG] [Thread-131950] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T17:44:10.010 [DEBUG] [Thread-131950] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:44:10.010 [DEBUG] [Thread-131950] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:44:10.010 [DEBUG] [Thread-131950] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:44:10.010 [DEBUG] [Thread-131950] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:44:10.010 [DEBUG] [Thread-131950] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:44:10.010 [DEBUG] [Thread-131950] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:44:10.010 [DEBUG] [Thread-131950] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:44:10.010 [DEBUG] [Thread-131950] [transport.py] [_log()] client lang: <none>
2025-12-31T17:44:10.010 [DEBUG] [Thread-131950] [transport.py] [_log()] server lang: <none>
2025-12-31T17:44:10.010 [DEBUG] [Thread-131950] [transport.py] [_log()] kex follows: False
2025-12-31T17:44:10.010 [DEBUG] [Thread-131950] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:44:10.011 [DEBUG] [Thread-131950] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:44:10.011 [DEBUG] [Thread-131950] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:44:10.011 [DEBUG] [Thread-131950] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:44:10.011 [DEBUG] [Thread-131950] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:44:10.011 [DEBUG] [Thread-131950] [transport.py] [_log()] Compression: none
2025-12-31T17:44:10.011 [DEBUG] [Thread-131950] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:44:10.068 [DEBUG] [Thread-131950] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:44:10.069 [DEBUG] [Thread-131950] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:44:10.069 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T17:44:10.070 [DEBUG] [Thread-131950] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T17:44:10.071 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:44:10.126 [DEBUG] [Thread-131950] [transport.py] [_log()] userauth is OK
2025-12-31T17:44:10.126 [DEBUG] [Thread-131950] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:44:10.126 [DEBUG] [Thread-131950] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:44:10.126 [DEBUG] [Thread-131950] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T17:44:10.126 [DEBUG] [Thread-131950] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:44:10.153 [INFO] [Thread-131950] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:44:10.153 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T17:44:10.154 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:44:10.971 [DEBUG] [Thread-131950] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:44:10.972 [DEBUG] [Thread-131950] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:44:11.020 [DEBUG] [Thread-131950] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:44:11.020 [DEBUG] [Thread-131950] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:44:11.029 [DEBUG] [Thread-131950] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:44:11.038 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:44: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')
2025-12-31T17:44: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') -> 00000000
2025-12-31T17:44:11.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:44:11.057 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:44:11.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:44:11.066 [DEBUG] [Thread-131950] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:44:18.364 [DEBUG] [Thread-131952 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:44:26.827 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:44:26.828 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:44:28.445 [DEBUG] [Thread-131953 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:44:33.401 [DEBUG] [Thread-131954 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:44:41.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T17:44:41.081 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T17:44: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-12-31T17:44:41.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 17, 44, 33), 23.84, 20.9, 0.0, 28.43, 23.83, 0, 0, 0, 2, 0, 0),)
2025-12-31T17:44:41.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 17:44:33
2025-12-31T17:44:41.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T17:44:42.077 [DEBUG] [Thread-131955] [transport.py] [_log()] starting thread (client mode): 0xb95d76a0
2025-12-31T17:44:42.077 [DEBUG] [Thread-131955] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:44:42.098 [DEBUG] [Thread-131955] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T17:44:42.099 [INFO] [Thread-131955] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T17:44:42.102 [DEBUG] [Thread-131955] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:44:42.102 [DEBUG] [Thread-131955] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T17:44:42.102 [DEBUG] [Thread-131955] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:44:42.102 [DEBUG] [Thread-131955] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:44:42.102 [DEBUG] [Thread-131955] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:44:42.102 [DEBUG] [Thread-131955] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:44:42.102 [DEBUG] [Thread-131955] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:44:42.102 [DEBUG] [Thread-131955] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:44:42.102 [DEBUG] [Thread-131955] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:44:42.102 [DEBUG] [Thread-131955] [transport.py] [_log()] client lang: <none>
2025-12-31T17:44:42.102 [DEBUG] [Thread-131955] [transport.py] [_log()] server lang: <none>
2025-12-31T17:44:42.102 [DEBUG] [Thread-131955] [transport.py] [_log()] kex follows: False
2025-12-31T17:44:42.102 [DEBUG] [Thread-131955] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:44:42.102 [DEBUG] [Thread-131955] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:44:42.102 [DEBUG] [Thread-131955] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:44:42.102 [DEBUG] [Thread-131955] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:44:42.102 [DEBUG] [Thread-131955] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:44:42.102 [DEBUG] [Thread-131955] [transport.py] [_log()] Compression: none
2025-12-31T17:44:42.102 [DEBUG] [Thread-131955] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:44:42.119 [DEBUG] [Thread-131955] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:44:42.120 [DEBUG] [Thread-131955] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:44:42.121 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T17:44:42.121 [DEBUG] [Thread-131955] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T17:44:42.122 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:44:42.123 [DEBUG] [Thread-131955] [transport.py] [_log()] userauth is OK
2025-12-31T17:44:42.123 [DEBUG] [Thread-131955] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:44:42.123 [DEBUG] [Thread-131955] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:44:42.124 [DEBUG] [Thread-131955] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T17:44:42.124 [DEBUG] [Thread-131955] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:44:42.147 [INFO] [Thread-131955] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:44:42.148 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:44:42.882 [DEBUG] [Thread-131955] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:44:42.882 [DEBUG] [Thread-131955] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:44:42.883 [DEBUG] [Thread-131955] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T17:44:42.923 [DEBUG] [Thread-131955] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:44:42.923 [DEBUG] [Thread-131955] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:44:42.927 [DEBUG] [Thread-131955] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:44:42.932 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:44:42.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T17:44:42.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T17:44:42.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T17:44:42.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:44:42.946 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T17:44:42.946 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:44:42.946 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:44:42.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T17:44:42.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.655349 -999.00  +23.60  28.05     26   +3.20 1 2 1 1 1   887    0 16.93 -143.35 ----- 31.9 28.1 273.0 39.7 25.8 -14.7 25.8 -14.1 25.4 -13.3 25.7 -14.2
2025-12-31T17:44:42.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T17:44:42.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T17:44:42.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.655349
2025-12-31T17:44:42.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T17:44:42.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T17:44:42.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T17:44:42.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T17:44:42.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T17:44:42.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T17:44:33', tmtdew=23.84, humidity=20.9, cloud=0.0, wind=28.43, temperature=23.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T15:43:42.154', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T17:44:42.949 [DEBUG] [Thread-131955] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:44:43.032 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T17:44:43.042 [DEBUG] [Thread-131958] [transport.py] [_log()] starting thread (client mode): 0xb6bb8640
2025-12-31T17:44:43.043 [DEBUG] [Thread-131958] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:44:43.060 [DEBUG] [Thread-131958] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T17:44:43.060 [INFO] [Thread-131958] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T17:44:43.068 [DEBUG] [Thread-131958] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:44:43.069 [DEBUG] [Thread-131958] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T17:44:43.069 [DEBUG] [Thread-131958] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:44:43.069 [DEBUG] [Thread-131958] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:44:43.069 [DEBUG] [Thread-131958] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:44:43.069 [DEBUG] [Thread-131958] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:44:43.069 [DEBUG] [Thread-131958] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:44:43.069 [DEBUG] [Thread-131958] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:44:43.069 [DEBUG] [Thread-131958] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:44:43.070 [DEBUG] [Thread-131958] [transport.py] [_log()] client lang: <none>
2025-12-31T17:44:43.070 [DEBUG] [Thread-131958] [transport.py] [_log()] server lang: <none>
2025-12-31T17:44:43.070 [DEBUG] [Thread-131958] [transport.py] [_log()] kex follows: False
2025-12-31T17:44:43.070 [DEBUG] [Thread-131958] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:44:43.070 [DEBUG] [Thread-131958] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:44:43.070 [DEBUG] [Thread-131958] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:44:43.070 [DEBUG] [Thread-131958] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:44:43.070 [DEBUG] [Thread-131958] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:44:43.071 [DEBUG] [Thread-131958] [transport.py] [_log()] Compression: none
2025-12-31T17:44:43.071 [DEBUG] [Thread-131958] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:44:43.130 [DEBUG] [Thread-131958] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:44:43.130 [DEBUG] [Thread-131958] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:44:43.131 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T17:44:43.131 [DEBUG] [Thread-131958] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T17:44:43.132 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:44:43.188 [DEBUG] [Thread-131958] [transport.py] [_log()] userauth is OK
2025-12-31T17:44:43.189 [DEBUG] [Thread-131958] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:44:43.189 [DEBUG] [Thread-131958] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:44:43.189 [DEBUG] [Thread-131958] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T17:44:43.189 [DEBUG] [Thread-131958] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:44:43.207 [INFO] [Thread-131958] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:44:43.208 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T17:44:43.208 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:44:44.095 [DEBUG] [Thread-131958] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:44:44.095 [DEBUG] [Thread-131958] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:44:44.143 [DEBUG] [Thread-131958] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:44:44.143 [DEBUG] [Thread-131958] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:44:44.153 [DEBUG] [Thread-131958] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:44:44.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:44:44.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T17:44:44.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T17:44:44.180 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:44:44.181 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:44:44.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:44:44.190 [DEBUG] [Thread-131958] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:44:48.435 [DEBUG] [Thread-131960 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:45:03.485 [DEBUG] [Thread-131961 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:45:14.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T17:45:14.210 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T17:45:14.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-12-31T17:45:14.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 17, 45, 5), 23.94, 20.78, 0.0, 28.71, 23.93, 0, 0, 0, 2, 0, 0),)
2025-12-31T17:45:14.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 17:45:05
2025-12-31T17:45:15.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T17:45:15.195 [DEBUG] [Thread-131962] [transport.py] [_log()] starting thread (client mode): 0xb9578ac0
2025-12-31T17:45:15.195 [DEBUG] [Thread-131962] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:45:15.215 [DEBUG] [Thread-131962] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T17:45:15.216 [INFO] [Thread-131962] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T17:45:15.219 [DEBUG] [Thread-131962] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:45:15.219 [DEBUG] [Thread-131962] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T17:45:15.219 [DEBUG] [Thread-131962] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:45:15.219 [DEBUG] [Thread-131962] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:45:15.219 [DEBUG] [Thread-131962] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:45:15.219 [DEBUG] [Thread-131962] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:45:15.219 [DEBUG] [Thread-131962] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:45:15.219 [DEBUG] [Thread-131962] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:45:15.219 [DEBUG] [Thread-131962] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:45:15.219 [DEBUG] [Thread-131962] [transport.py] [_log()] client lang: <none>
2025-12-31T17:45:15.219 [DEBUG] [Thread-131962] [transport.py] [_log()] server lang: <none>
2025-12-31T17:45:15.219 [DEBUG] [Thread-131962] [transport.py] [_log()] kex follows: False
2025-12-31T17:45:15.219 [DEBUG] [Thread-131962] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:45:15.219 [DEBUG] [Thread-131962] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:45:15.219 [DEBUG] [Thread-131962] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:45:15.219 [DEBUG] [Thread-131962] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:45:15.219 [DEBUG] [Thread-131962] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:45:15.219 [DEBUG] [Thread-131962] [transport.py] [_log()] Compression: none
2025-12-31T17:45:15.219 [DEBUG] [Thread-131962] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:45:15.238 [DEBUG] [Thread-131962] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:45:15.239 [DEBUG] [Thread-131962] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:45:15.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T17:45:15.239 [DEBUG] [Thread-131962] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T17:45:15.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:45:15.281 [DEBUG] [Thread-131962] [transport.py] [_log()] userauth is OK
2025-12-31T17:45:15.281 [DEBUG] [Thread-131962] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:45:15.281 [DEBUG] [Thread-131962] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:45:15.281 [DEBUG] [Thread-131962] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T17:45:15.282 [DEBUG] [Thread-131962] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:45:15.313 [INFO] [Thread-131962] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:45:15.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:45:16.226 [DEBUG] [Thread-131962] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:45:16.227 [DEBUG] [Thread-131962] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:45:16.227 [DEBUG] [Thread-131962] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T17:45:16.268 [DEBUG] [Thread-131962] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:45:16.268 [DEBUG] [Thread-131962] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:45:16.271 [DEBUG] [Thread-131962] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:45:16.435 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:45:16.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T17:45:16.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T17:45:16.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T17:45:16.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:45:16.519 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T17:45:16.519 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:45:16.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:45:16.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T17:45:16.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.656043 -999.00  +23.50  27.22     26   +3.30 1 2 1 1 1   887    0 16.75 -132.42 ----- 34.0 27.2 274.8 39.2 25.7 -14.8 25.8 -14.2 25.4 -13.7 25.8 -14.3
2025-12-31T17:45:16.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T17:45:16.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T17:45:16.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.656043
2025-12-31T17:45:16.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T17:45:16.521 [DEBUG] [Thread-131962] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:45:16.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T17:45:16.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T17:45:16.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T17:45:16.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T17:45:16.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T17:45:05', tmtdew=23.94, humidity=20.78, cloud=0.0, wind=28.71, temperature=23.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T15:44:42.115', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T17:45:16.600 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T17:45:16.613 [DEBUG] [Thread-131965] [transport.py] [_log()] starting thread (client mode): 0xb6bb8dc0
2025-12-31T17:45:16.614 [DEBUG] [Thread-131965] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:45:16.629 [DEBUG] [Thread-131965] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T17:45:16.629 [INFO] [Thread-131965] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T17:45:16.637 [DEBUG] [Thread-131965] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:45:16.637 [DEBUG] [Thread-131965] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T17:45:16.637 [DEBUG] [Thread-131965] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:45:16.637 [DEBUG] [Thread-131965] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:45:16.637 [DEBUG] [Thread-131965] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:45:16.637 [DEBUG] [Thread-131965] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:45:16.637 [DEBUG] [Thread-131965] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:45:16.637 [DEBUG] [Thread-131965] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:45:16.637 [DEBUG] [Thread-131965] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:45:16.637 [DEBUG] [Thread-131965] [transport.py] [_log()] client lang: <none>
2025-12-31T17:45:16.637 [DEBUG] [Thread-131965] [transport.py] [_log()] server lang: <none>
2025-12-31T17:45:16.638 [DEBUG] [Thread-131965] [transport.py] [_log()] kex follows: False
2025-12-31T17:45:16.638 [DEBUG] [Thread-131965] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:45:16.638 [DEBUG] [Thread-131965] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:45:16.638 [DEBUG] [Thread-131965] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:45:16.638 [DEBUG] [Thread-131965] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:45:16.638 [DEBUG] [Thread-131965] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:45:16.638 [DEBUG] [Thread-131965] [transport.py] [_log()] Compression: none
2025-12-31T17:45:16.638 [DEBUG] [Thread-131965] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:45:16.696 [DEBUG] [Thread-131965] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:45:16.697 [DEBUG] [Thread-131965] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:45:16.697 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T17:45:16.698 [DEBUG] [Thread-131965] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T17:45:16.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:45:16.753 [DEBUG] [Thread-131965] [transport.py] [_log()] userauth is OK
2025-12-31T17:45:16.753 [DEBUG] [Thread-131965] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:45:16.753 [DEBUG] [Thread-131965] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:45:16.753 [DEBUG] [Thread-131965] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T17:45:16.753 [DEBUG] [Thread-131965] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:45:16.772 [INFO] [Thread-131965] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:45: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-12-31T17:45:16.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:45:17.587 [DEBUG] [Thread-131965] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:45:17.588 [DEBUG] [Thread-131965] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:45:17.636 [DEBUG] [Thread-131965] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:45:17.636 [DEBUG] [Thread-131965] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:45:17.646 [DEBUG] [Thread-131965] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:45:17.655 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:45:17.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T17:45:17.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-12-31T17:45:17.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:45:17.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:45:17.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:45:17.685 [DEBUG] [Thread-131965] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:45:18.523 [DEBUG] [Thread-131967 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:45:26.966 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:45:26.968 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:45:28.495 [DEBUG] [Thread-131968 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:45:33.581 [DEBUG] [Thread-131969 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:45:47.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T17:45:47.701 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T17:45:47.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T17:45:48.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 17, 45, 37), 24.21, 20.13, 0.0, 34.86, 24.01, 0, 0, 0, 2, 0, 0),)
2025-12-31T17:45:48.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 17:45:37
2025-12-31T17:45:48.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T17:45:48.619 [DEBUG] [Thread-131970 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:45:48.700 [DEBUG] [Thread-131971] [transport.py] [_log()] starting thread (client mode): 0xb17447f0
2025-12-31T17:45:48.701 [DEBUG] [Thread-131971] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:45:48.721 [DEBUG] [Thread-131971] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T17:45:48.721 [INFO] [Thread-131971] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T17:45:48.724 [DEBUG] [Thread-131971] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:45:48.724 [DEBUG] [Thread-131971] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T17:45:48.725 [DEBUG] [Thread-131971] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:45:48.725 [DEBUG] [Thread-131971] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:45:48.725 [DEBUG] [Thread-131971] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:45:48.725 [DEBUG] [Thread-131971] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:45:48.725 [DEBUG] [Thread-131971] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:45:48.725 [DEBUG] [Thread-131971] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:45:48.725 [DEBUG] [Thread-131971] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:45:48.725 [DEBUG] [Thread-131971] [transport.py] [_log()] client lang: <none>
2025-12-31T17:45:48.725 [DEBUG] [Thread-131971] [transport.py] [_log()] server lang: <none>
2025-12-31T17:45:48.725 [DEBUG] [Thread-131971] [transport.py] [_log()] kex follows: False
2025-12-31T17:45:48.725 [DEBUG] [Thread-131971] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:45:48.725 [DEBUG] [Thread-131971] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:45:48.725 [DEBUG] [Thread-131971] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:45:48.725 [DEBUG] [Thread-131971] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:45:48.726 [DEBUG] [Thread-131971] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:45:48.726 [DEBUG] [Thread-131971] [transport.py] [_log()] Compression: none
2025-12-31T17:45:48.726 [DEBUG] [Thread-131971] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:45:48.743 [DEBUG] [Thread-131971] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:45:48.744 [DEBUG] [Thread-131971] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:45:48.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T17:45:48.745 [DEBUG] [Thread-131971] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T17:45:48.746 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:45:48.747 [DEBUG] [Thread-131971] [transport.py] [_log()] userauth is OK
2025-12-31T17:45:48.747 [DEBUG] [Thread-131971] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:45:48.747 [DEBUG] [Thread-131971] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:45:48.747 [DEBUG] [Thread-131971] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T17:45:48.748 [DEBUG] [Thread-131971] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:45:48.765 [INFO] [Thread-131971] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:45:48.766 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:45:49.373 [DEBUG] [Thread-131971] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:45:49.373 [DEBUG] [Thread-131971] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:45:49.373 [DEBUG] [Thread-131971] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T17:45:49.414 [DEBUG] [Thread-131971] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:45:49.414 [DEBUG] [Thread-131971] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:45:49.417 [DEBUG] [Thread-131971] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:45:49.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:45:49.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T17:45:49.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T17:45:49.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T17:45:49.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:45:49.438 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T17:45:49.438 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:45:49.438 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:45:49.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T17:45:49.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.656390 -999.00  +23.50  30.46     26   +3.00 1 2 2 1 1   887    0 17.23 -129.00 ----- 27.1 30.5 266.4 35.2 25.8 -14.6 25.8 -13.9 25.5 -13.3 25.9 -13.9
2025-12-31T17:45:49.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T17:45:49.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T17:45:49.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.656390
2025-12-31T17:45:49.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T17:45:49.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T17:45:49.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T17:45:49.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T17:45:49.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T17:45:49.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T17:45:37', tmtdew=24.21, humidity=20.13, cloud=0.0, wind=34.86, temperature=24.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T15:45:12.096', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T17:45:49.440 [DEBUG] [Thread-131971] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:45:49.526 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T17:45:49.538 [DEBUG] [Thread-131974] [transport.py] [_log()] starting thread (client mode): 0xb9578bb0
2025-12-31T17:45:49.538 [DEBUG] [Thread-131974] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:45:49.552 [DEBUG] [Thread-131974] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T17:45:49.553 [INFO] [Thread-131974] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T17:45:49.560 [DEBUG] [Thread-131974] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:45:49.560 [DEBUG] [Thread-131974] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T17:45:49.560 [DEBUG] [Thread-131974] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:45:49.560 [DEBUG] [Thread-131974] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:45:49.560 [DEBUG] [Thread-131974] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:45:49.560 [DEBUG] [Thread-131974] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:45:49.560 [DEBUG] [Thread-131974] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:45:49.560 [DEBUG] [Thread-131974] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:45:49.560 [DEBUG] [Thread-131974] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:45:49.560 [DEBUG] [Thread-131974] [transport.py] [_log()] client lang: <none>
2025-12-31T17:45:49.560 [DEBUG] [Thread-131974] [transport.py] [_log()] server lang: <none>
2025-12-31T17:45:49.560 [DEBUG] [Thread-131974] [transport.py] [_log()] kex follows: False
2025-12-31T17:45:49.561 [DEBUG] [Thread-131974] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:45:49.561 [DEBUG] [Thread-131974] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:45:49.561 [DEBUG] [Thread-131974] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:45:49.561 [DEBUG] [Thread-131974] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:45:49.561 [DEBUG] [Thread-131974] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:45:49.561 [DEBUG] [Thread-131974] [transport.py] [_log()] Compression: none
2025-12-31T17:45:49.561 [DEBUG] [Thread-131974] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:45:49.620 [DEBUG] [Thread-131974] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:45:49.620 [DEBUG] [Thread-131974] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:45:49.621 [DEBUG] [Thread-131974] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T17:45:49.621 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T17:45:49.622 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:45:49.676 [DEBUG] [Thread-131974] [transport.py] [_log()] userauth is OK
2025-12-31T17:45:49.676 [DEBUG] [Thread-131974] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:45:49.677 [DEBUG] [Thread-131974] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:45:49.677 [DEBUG] [Thread-131974] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T17:45:49.677 [DEBUG] [Thread-131974] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:45:49.701 [INFO] [Thread-131974] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:45:49.701 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T17:45:49.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:45:50.510 [DEBUG] [Thread-131974] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:45:50.510 [DEBUG] [Thread-131974] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:45:50.558 [DEBUG] [Thread-131974] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:45:50.558 [DEBUG] [Thread-131974] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:45:50.567 [DEBUG] [Thread-131974] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:45:50.576 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:45:50.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T17:45:50.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T17:45:50.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:45:50.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:45:50.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:45:50.604 [DEBUG] [Thread-131974] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:46:03.653 [DEBUG] [Thread-131976 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:46:18.698 [DEBUG] [Thread-131977 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:46:20.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T17:46:20.606 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T17:46:20.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T17:46:21.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 17, 46, 9), 24.09, 20.28, 0.0, 33.0, 23.94, 0, 0, 0, 2, 0, 0),)
2025-12-31T17:46:21.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 17:46:09
2025-12-31T17:46:21.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T17:46:21.589 [DEBUG] [Thread-131978] [transport.py] [_log()] starting thread (client mode): 0xb6b626e0
2025-12-31T17:46:21.589 [DEBUG] [Thread-131978] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:46:21.605 [DEBUG] [Thread-131978] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T17:46:21.606 [INFO] [Thread-131978] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T17:46:21.607 [DEBUG] [Thread-131978] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:46:21.607 [DEBUG] [Thread-131978] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T17:46:21.607 [DEBUG] [Thread-131978] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:46:21.607 [DEBUG] [Thread-131978] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:46:21.607 [DEBUG] [Thread-131978] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:46:21.607 [DEBUG] [Thread-131978] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:46:21.607 [DEBUG] [Thread-131978] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:46:21.608 [DEBUG] [Thread-131978] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:46:21.608 [DEBUG] [Thread-131978] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:46:21.608 [DEBUG] [Thread-131978] [transport.py] [_log()] client lang: <none>
2025-12-31T17:46:21.608 [DEBUG] [Thread-131978] [transport.py] [_log()] server lang: <none>
2025-12-31T17:46:21.608 [DEBUG] [Thread-131978] [transport.py] [_log()] kex follows: False
2025-12-31T17:46:21.608 [DEBUG] [Thread-131978] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:46:21.608 [DEBUG] [Thread-131978] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:46:21.608 [DEBUG] [Thread-131978] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:46:21.608 [DEBUG] [Thread-131978] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:46:21.608 [DEBUG] [Thread-131978] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:46:21.608 [DEBUG] [Thread-131978] [transport.py] [_log()] Compression: none
2025-12-31T17:46:21.608 [DEBUG] [Thread-131978] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:46:21.619 [DEBUG] [Thread-131978] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:46:21.619 [DEBUG] [Thread-131978] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:46:21.619 [DEBUG] [Thread-131978] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T17:46:21.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T17:46:21.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:46:21.621 [DEBUG] [Thread-131978] [transport.py] [_log()] userauth is OK
2025-12-31T17:46:21.621 [DEBUG] [Thread-131978] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:46:21.621 [DEBUG] [Thread-131978] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:46:21.621 [DEBUG] [Thread-131978] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T17:46:21.621 [DEBUG] [Thread-131978] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:46:21.635 [INFO] [Thread-131978] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:46:21.635 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:46:22.433 [DEBUG] [Thread-131978] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:46:22.433 [DEBUG] [Thread-131978] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:46:22.434 [DEBUG] [Thread-131978] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T17:46:22.474 [DEBUG] [Thread-131978] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:46:22.474 [DEBUG] [Thread-131978] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:46:22.477 [DEBUG] [Thread-131978] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:46:22.490 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:46:22.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T17:46:22.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T17:46:22.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T17:46:22.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:46:22.500 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T17:46:22.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:46:22.500 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:46:22.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T17:46:22.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.656738 -999.00  +23.70  25.63     26   +3.00 1 2 1 1 1   887    0 17.43 -128.52 ----- 23.8 25.6 277.2 27.9 25.9 -15.1 25.9 -13.9 25.8 -14.3 26.0 -13.8
2025-12-31T17:46:22.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T17:46:22.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T17:46:22.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.656738
2025-12-31T17:46:22.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T17:46:22.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T17:46:22.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T17:46:22.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T17:46:22.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T17:46:22.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T17:46:09', tmtdew=24.09, humidity=20.28, cloud=0.0, wind=33.0, temperature=23.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T15:45:42.163', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T17:46:22.503 [DEBUG] [Thread-131978] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:46:22.586 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T17:46:22.597 [DEBUG] [Thread-131981] [transport.py] [_log()] starting thread (client mode): 0xb95798a0
2025-12-31T17:46:22.597 [DEBUG] [Thread-131981] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:46:22.611 [DEBUG] [Thread-131981] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T17:46:22.611 [INFO] [Thread-131981] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T17:46:22.619 [DEBUG] [Thread-131981] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:46:22.619 [DEBUG] [Thread-131981] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T17:46:22.619 [DEBUG] [Thread-131981] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:46:22.619 [DEBUG] [Thread-131981] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:46:22.620 [DEBUG] [Thread-131981] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:46:22.620 [DEBUG] [Thread-131981] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:46:22.620 [DEBUG] [Thread-131981] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:46:22.620 [DEBUG] [Thread-131981] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:46:22.620 [DEBUG] [Thread-131981] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:46:22.620 [DEBUG] [Thread-131981] [transport.py] [_log()] client lang: <none>
2025-12-31T17:46:22.620 [DEBUG] [Thread-131981] [transport.py] [_log()] server lang: <none>
2025-12-31T17:46:22.620 [DEBUG] [Thread-131981] [transport.py] [_log()] kex follows: False
2025-12-31T17:46:22.620 [DEBUG] [Thread-131981] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:46:22.620 [DEBUG] [Thread-131981] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:46:22.621 [DEBUG] [Thread-131981] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:46:22.621 [DEBUG] [Thread-131981] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:46:22.621 [DEBUG] [Thread-131981] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:46:22.621 [DEBUG] [Thread-131981] [transport.py] [_log()] Compression: none
2025-12-31T17:46:22.621 [DEBUG] [Thread-131981] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:46:22.679 [DEBUG] [Thread-131981] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:46:22.680 [DEBUG] [Thread-131981] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:46:22.680 [DEBUG] [Thread-131981] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T17:46:22.681 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T17:46:22.681 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:46:22.735 [DEBUG] [Thread-131981] [transport.py] [_log()] userauth is OK
2025-12-31T17:46:22.735 [DEBUG] [Thread-131981] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:46:22.735 [DEBUG] [Thread-131981] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:46:22.735 [DEBUG] [Thread-131981] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T17:46:22.736 [DEBUG] [Thread-131981] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:46:22.753 [INFO] [Thread-131981] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:46:22.754 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T17:46:22.754 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:46:23.579 [DEBUG] [Thread-131981] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:46:23.579 [DEBUG] [Thread-131981] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:46:23.627 [DEBUG] [Thread-131981] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:46:23.628 [DEBUG] [Thread-131981] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:46:23.636 [DEBUG] [Thread-131981] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:46:23.645 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:46:23.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T17:46:23.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T17:46:23.662 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:46:23.662 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:46:23.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:46:23.670 [DEBUG] [Thread-131981] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:46:27.108 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:46:27.109 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:46:28.554 [DEBUG] [Thread-131983 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:46:33.734 [DEBUG] [Thread-131984 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:46:48.788 [DEBUG] [Thread-131985 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:46:53.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T17:46:53.693 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T17:46:53.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T17:46:54.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 17, 46, 41), 24.05, 20.7, 0.0, 26.59, 24.01, 0, 0, 0, 2, 0, 0),)
2025-12-31T17:46:54.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 17:46:41
2025-12-31T17:46:54.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T17:46:54.728 [DEBUG] [Thread-131986] [transport.py] [_log()] starting thread (client mode): 0xb6bb9900
2025-12-31T17:46:54.729 [DEBUG] [Thread-131986] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:46:54.743 [DEBUG] [Thread-131986] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T17:46:54.743 [INFO] [Thread-131986] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T17:46:54.745 [DEBUG] [Thread-131986] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:46:54.745 [DEBUG] [Thread-131986] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T17:46:54.745 [DEBUG] [Thread-131986] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:46:54.745 [DEBUG] [Thread-131986] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:46:54.745 [DEBUG] [Thread-131986] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:46:54.745 [DEBUG] [Thread-131986] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:46:54.745 [DEBUG] [Thread-131986] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:46:54.745 [DEBUG] [Thread-131986] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:46:54.745 [DEBUG] [Thread-131986] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:46:54.745 [DEBUG] [Thread-131986] [transport.py] [_log()] client lang: <none>
2025-12-31T17:46:54.745 [DEBUG] [Thread-131986] [transport.py] [_log()] server lang: <none>
2025-12-31T17:46:54.745 [DEBUG] [Thread-131986] [transport.py] [_log()] kex follows: False
2025-12-31T17:46:54.745 [DEBUG] [Thread-131986] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:46:54.745 [DEBUG] [Thread-131986] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:46:54.745 [DEBUG] [Thread-131986] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:46:54.745 [DEBUG] [Thread-131986] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:46:54.745 [DEBUG] [Thread-131986] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:46:54.745 [DEBUG] [Thread-131986] [transport.py] [_log()] Compression: none
2025-12-31T17:46:54.745 [DEBUG] [Thread-131986] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:46:54.761 [DEBUG] [Thread-131986] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:46:54.761 [DEBUG] [Thread-131986] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:46:54.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T17:46:54.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:46:54.762 [DEBUG] [Thread-131986] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T17:46:54.762 [DEBUG] [Thread-131986] [transport.py] [_log()] userauth is OK
2025-12-31T17:46:54.763 [DEBUG] [Thread-131986] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:46:54.763 [DEBUG] [Thread-131986] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:46:54.763 [DEBUG] [Thread-131986] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T17:46:54.763 [DEBUG] [Thread-131986] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:46:54.775 [INFO] [Thread-131986] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:46:54.775 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:46:55.431 [DEBUG] [Thread-131986] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:46:55.431 [DEBUG] [Thread-131986] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:46:55.431 [DEBUG] [Thread-131986] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T17:46:55.472 [DEBUG] [Thread-131986] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:46:55.472 [DEBUG] [Thread-131986] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:46:55.475 [DEBUG] [Thread-131986] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:46:55.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:46:55.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T17:46:55.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T17:46:55.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T17:46:55.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:46:55.491 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T17:46:55.491 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:46:55.491 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:46:55.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T17:46:55.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.657084 -999.00  +23.50  28.28     26   +3.00 1 2 1 1 1   887    0 16.72 -129.73 ----- 29.2 28.3 269.6 31.2 25.8 -16.0 25.9 -14.3 25.6 -15.8 26.0 -14.8
2025-12-31T17:46:55.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T17:46:55.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T17:46:55.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.657084
2025-12-31T17:46:55.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T17:46:55.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T17:46:55.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T17:46:55.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T17:46:55.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T17:46:55.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T17:46:41', tmtdew=24.05, humidity=20.7, cloud=0.0, wind=26.59, temperature=24.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T15:46:12.058', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T17:46:55.492 [DEBUG] [Thread-131986] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:46:55.567 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T17:46:55.578 [DEBUG] [Thread-131989] [transport.py] [_log()] starting thread (client mode): 0xb955ace0
2025-12-31T17:46:55.578 [DEBUG] [Thread-131989] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:46:55.593 [DEBUG] [Thread-131989] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T17:46:55.593 [INFO] [Thread-131989] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T17:46:55.601 [DEBUG] [Thread-131989] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:46:55.601 [DEBUG] [Thread-131989] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T17:46:55.601 [DEBUG] [Thread-131989] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:46:55.601 [DEBUG] [Thread-131989] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:46:55.601 [DEBUG] [Thread-131989] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:46:55.601 [DEBUG] [Thread-131989] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:46:55.601 [DEBUG] [Thread-131989] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:46:55.601 [DEBUG] [Thread-131989] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:46:55.601 [DEBUG] [Thread-131989] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:46:55.601 [DEBUG] [Thread-131989] [transport.py] [_log()] client lang: <none>
2025-12-31T17:46:55.601 [DEBUG] [Thread-131989] [transport.py] [_log()] server lang: <none>
2025-12-31T17:46:55.601 [DEBUG] [Thread-131989] [transport.py] [_log()] kex follows: False
2025-12-31T17:46:55.601 [DEBUG] [Thread-131989] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:46:55.601 [DEBUG] [Thread-131989] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:46:55.601 [DEBUG] [Thread-131989] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:46:55.601 [DEBUG] [Thread-131989] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:46:55.601 [DEBUG] [Thread-131989] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:46:55.601 [DEBUG] [Thread-131989] [transport.py] [_log()] Compression: none
2025-12-31T17:46:55.601 [DEBUG] [Thread-131989] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:46:55.666 [DEBUG] [Thread-131989] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:46:55.666 [DEBUG] [Thread-131989] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:46:55.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T17:46:55.666 [DEBUG] [Thread-131989] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T17:46:55.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:46:55.723 [DEBUG] [Thread-131989] [transport.py] [_log()] userauth is OK
2025-12-31T17:46:55.723 [DEBUG] [Thread-131989] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:46:55.723 [DEBUG] [Thread-131989] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:46:55.723 [DEBUG] [Thread-131989] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T17:46:55.723 [DEBUG] [Thread-131989] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:46:55.737 [INFO] [Thread-131989] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:46:55.737 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T17:46:55.737 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:46:56.621 [DEBUG] [Thread-131989] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:46:56.621 [DEBUG] [Thread-131989] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:46:56.668 [DEBUG] [Thread-131989] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:46:56.668 [DEBUG] [Thread-131989] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:46:56.676 [DEBUG] [Thread-131989] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:46:56.684 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:46:56.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T17:46:56.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T17:46:56.700 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:46:56.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:46:56.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:46:56.708 [DEBUG] [Thread-131989] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:47:03.821 [DEBUG] [Thread-131991 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:47:18.873 [DEBUG] [Thread-131992 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:47:26.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T17:47:26.722 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T17:47:26.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T17:47:27.249 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:47:27.250 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:47:27.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 17, 47, 13), 24.03, 20.7, 0.0, 26.96, 23.91, 0, 0, 0, 2, 0, 0),)
2025-12-31T17:47:27.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 17:47:13
2025-12-31T17:47:27.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T17:47:27.715 [DEBUG] [Thread-131993] [transport.py] [_log()] starting thread (client mode): 0xb6bbead0
2025-12-31T17:47:27.715 [DEBUG] [Thread-131993] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:47:27.734 [DEBUG] [Thread-131993] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T17:47:27.734 [INFO] [Thread-131993] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T17:47:27.736 [DEBUG] [Thread-131993] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:47:27.736 [DEBUG] [Thread-131993] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T17:47:27.736 [DEBUG] [Thread-131993] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:47:27.736 [DEBUG] [Thread-131993] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:47:27.736 [DEBUG] [Thread-131993] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:47:27.736 [DEBUG] [Thread-131993] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:47:27.736 [DEBUG] [Thread-131993] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:47:27.736 [DEBUG] [Thread-131993] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:47:27.736 [DEBUG] [Thread-131993] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:47:27.736 [DEBUG] [Thread-131993] [transport.py] [_log()] client lang: <none>
2025-12-31T17:47:27.736 [DEBUG] [Thread-131993] [transport.py] [_log()] server lang: <none>
2025-12-31T17:47:27.736 [DEBUG] [Thread-131993] [transport.py] [_log()] kex follows: False
2025-12-31T17:47:27.736 [DEBUG] [Thread-131993] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:47:27.736 [DEBUG] [Thread-131993] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:47:27.736 [DEBUG] [Thread-131993] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:47:27.736 [DEBUG] [Thread-131993] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:47:27.736 [DEBUG] [Thread-131993] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:47:27.736 [DEBUG] [Thread-131993] [transport.py] [_log()] Compression: none
2025-12-31T17:47:27.736 [DEBUG] [Thread-131993] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:47:27.749 [DEBUG] [Thread-131993] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:47:27.749 [DEBUG] [Thread-131993] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:47:27.750 [DEBUG] [Thread-131993] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T17:47:27.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T17:47:27.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:47:27.751 [DEBUG] [Thread-131993] [transport.py] [_log()] userauth is OK
2025-12-31T17:47:27.751 [DEBUG] [Thread-131993] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:47:27.751 [DEBUG] [Thread-131993] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:47:27.751 [DEBUG] [Thread-131993] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T17:47:27.751 [DEBUG] [Thread-131993] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:47:27.771 [INFO] [Thread-131993] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:47:27.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:47:28.561 [DEBUG] [Thread-131993] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:47:28.561 [DEBUG] [Thread-131993] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:47:28.561 [DEBUG] [Thread-131993] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T17:47:28.601 [DEBUG] [Thread-131993] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:47:28.601 [DEBUG] [Thread-131993] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:47:28.604 [DEBUG] [Thread-131993] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:47:28.606 [DEBUG] [Thread-131995 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:47:28.618 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:47:28.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T17:47:28.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T17:47:28.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T17:47:28.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:47:28.624 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T17:47:28.624 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:47:28.624 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:47:28.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T17:47:28.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.657432 -999.00  +23.50  37.04     26   +3.10 1 2 2 1 1   887    0 17.45 -132.50 ----- 31.3 37.0 266.0 43.0 25.7 -16.2 25.9 -14.4 25.6 -13.6 26.0 -15.3
2025-12-31T17:47:28.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T17:47:28.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T17:47:28.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.657432
2025-12-31T17:47:28.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T17:47:28.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T17:47:28.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T17:47:28.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T17:47:28.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T17:47:28.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T17:47:13', tmtdew=24.03, humidity=20.7, cloud=0.0, wind=26.96, temperature=23.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T15:46:42.125', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T17:47:28.626 [DEBUG] [Thread-131993] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:47:28.709 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T17:47:28.720 [DEBUG] [Thread-131997] [transport.py] [_log()] starting thread (client mode): 0xb1746c80
2025-12-31T17:47:28.720 [DEBUG] [Thread-131997] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:47:28.734 [DEBUG] [Thread-131997] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T17:47:28.734 [INFO] [Thread-131997] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T17:47:28.742 [DEBUG] [Thread-131997] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:47:28.742 [DEBUG] [Thread-131997] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T17:47:28.742 [DEBUG] [Thread-131997] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:47:28.742 [DEBUG] [Thread-131997] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:47:28.742 [DEBUG] [Thread-131997] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:47:28.742 [DEBUG] [Thread-131997] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:47:28.742 [DEBUG] [Thread-131997] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:47:28.742 [DEBUG] [Thread-131997] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:47:28.743 [DEBUG] [Thread-131997] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:47:28.743 [DEBUG] [Thread-131997] [transport.py] [_log()] client lang: <none>
2025-12-31T17:47:28.743 [DEBUG] [Thread-131997] [transport.py] [_log()] server lang: <none>
2025-12-31T17:47:28.743 [DEBUG] [Thread-131997] [transport.py] [_log()] kex follows: False
2025-12-31T17:47:28.743 [DEBUG] [Thread-131997] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:47:28.743 [DEBUG] [Thread-131997] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:47:28.743 [DEBUG] [Thread-131997] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:47:28.743 [DEBUG] [Thread-131997] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:47:28.744 [DEBUG] [Thread-131997] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:47:28.744 [DEBUG] [Thread-131997] [transport.py] [_log()] Compression: none
2025-12-31T17:47:28.744 [DEBUG] [Thread-131997] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:47:28.801 [DEBUG] [Thread-131997] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:47:28.801 [DEBUG] [Thread-131997] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:47:28.802 [DEBUG] [Thread-131997] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T17:47:28.802 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T17:47:28.803 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:47:28.859 [DEBUG] [Thread-131997] [transport.py] [_log()] userauth is OK
2025-12-31T17:47:28.860 [DEBUG] [Thread-131997] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:47:28.860 [DEBUG] [Thread-131997] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:47:28.860 [DEBUG] [Thread-131997] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T17:47:28.860 [DEBUG] [Thread-131997] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:47:28.879 [INFO] [Thread-131997] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:47:28.880 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T17:47:28.880 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:47:29.744 [DEBUG] [Thread-131997] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:47:29.744 [DEBUG] [Thread-131997] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:47:29.792 [DEBUG] [Thread-131997] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:47:29.792 [DEBUG] [Thread-131997] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:47:29.801 [DEBUG] [Thread-131997] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:47:29.809 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:47:29.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-12-31T17:47:29.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-12-31T17:47:29.827 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:47:29.827 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:47:29.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:47:29.836 [DEBUG] [Thread-131997] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:47:33.908 [DEBUG] [Thread-131999 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:47:48.952 [DEBUG] [Thread-132000 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:47:59.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T17:47:59.858 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T17:47:59.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T17:48:00.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 17, 47, 45), 24.1, 20.32, 0.0, 32.04, 23.94, 0, 0, 0, 2, 0, 0),)
2025-12-31T17:48:00.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 17:47:45
2025-12-31T17:48:00.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T17:48:00.849 [DEBUG] [Thread-132001] [transport.py] [_log()] starting thread (client mode): 0xb9590970
2025-12-31T17:48:00.849 [DEBUG] [Thread-132001] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:48:00.870 [DEBUG] [Thread-132001] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T17:48:00.871 [INFO] [Thread-132001] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T17:48:00.874 [DEBUG] [Thread-132001] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:48:00.874 [DEBUG] [Thread-132001] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T17:48:00.874 [DEBUG] [Thread-132001] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:48:00.874 [DEBUG] [Thread-132001] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:48:00.874 [DEBUG] [Thread-132001] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:48:00.874 [DEBUG] [Thread-132001] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:48:00.874 [DEBUG] [Thread-132001] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:48:00.874 [DEBUG] [Thread-132001] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:48:00.874 [DEBUG] [Thread-132001] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:48:00.874 [DEBUG] [Thread-132001] [transport.py] [_log()] client lang: <none>
2025-12-31T17:48:00.874 [DEBUG] [Thread-132001] [transport.py] [_log()] server lang: <none>
2025-12-31T17:48:00.875 [DEBUG] [Thread-132001] [transport.py] [_log()] kex follows: False
2025-12-31T17:48:00.875 [DEBUG] [Thread-132001] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:48:00.875 [DEBUG] [Thread-132001] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:48:00.875 [DEBUG] [Thread-132001] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:48:00.875 [DEBUG] [Thread-132001] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:48:00.875 [DEBUG] [Thread-132001] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:48:00.875 [DEBUG] [Thread-132001] [transport.py] [_log()] Compression: none
2025-12-31T17:48:00.875 [DEBUG] [Thread-132001] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:48:00.894 [DEBUG] [Thread-132001] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:48:00.895 [DEBUG] [Thread-132001] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:48:00.895 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T17:48:00.896 [DEBUG] [Thread-132001] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T17:48:00.897 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:48:00.898 [DEBUG] [Thread-132001] [transport.py] [_log()] userauth is OK
2025-12-31T17:48:00.898 [DEBUG] [Thread-132001] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:48:00.898 [DEBUG] [Thread-132001] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:48:00.898 [DEBUG] [Thread-132001] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T17:48:00.898 [DEBUG] [Thread-132001] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:48:00.916 [INFO] [Thread-132001] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:48:00.916 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:48:01.526 [DEBUG] [Thread-132001] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:48:01.527 [DEBUG] [Thread-132001] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:48:01.527 [DEBUG] [Thread-132001] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T17:48:01.567 [DEBUG] [Thread-132001] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:48:01.567 [DEBUG] [Thread-132001] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:48:01.570 [DEBUG] [Thread-132001] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:48:01.583 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:48:01.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T17:48:01.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T17:48:01.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T17:48:01.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:48:01.595 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T17:48:01.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:48:01.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:48:01.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T17:48:01.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.657779 -999.00  +23.50  27.68     26   +3.00 1 2 1 1 1   887    0 17.56 -123.59 ----- 31.9 27.7 272.8 37.4 25.8 -15.9 25.9 -14.6 25.6 -14.5 26.0 -15.5
2025-12-31T17:48:01.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T17:48:01.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T17:48:01.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.657779
2025-12-31T17:48:01.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T17:48:01.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T17:48:01.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T17:48:01.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T17:48:01.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T17:48:01.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T17:47:45', tmtdew=24.1, humidity=20.32, cloud=0.0, wind=32.04, temperature=23.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T15:47:12.106', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T17:48:01.598 [DEBUG] [Thread-132001] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:48:01.682 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T17:48:01.694 [DEBUG] [Thread-132004] [transport.py] [_log()] starting thread (client mode): 0xb95d63e0
2025-12-31T17:48:01.694 [DEBUG] [Thread-132004] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:48:01.708 [DEBUG] [Thread-132004] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T17:48:01.709 [INFO] [Thread-132004] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T17:48:01.716 [DEBUG] [Thread-132004] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:48:01.716 [DEBUG] [Thread-132004] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T17:48:01.716 [DEBUG] [Thread-132004] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:48:01.716 [DEBUG] [Thread-132004] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:48:01.717 [DEBUG] [Thread-132004] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:48:01.717 [DEBUG] [Thread-132004] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:48:01.717 [DEBUG] [Thread-132004] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:48:01.717 [DEBUG] [Thread-132004] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:48:01.717 [DEBUG] [Thread-132004] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:48:01.717 [DEBUG] [Thread-132004] [transport.py] [_log()] client lang: <none>
2025-12-31T17:48:01.717 [DEBUG] [Thread-132004] [transport.py] [_log()] server lang: <none>
2025-12-31T17:48:01.717 [DEBUG] [Thread-132004] [transport.py] [_log()] kex follows: False
2025-12-31T17:48:01.717 [DEBUG] [Thread-132004] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:48:01.717 [DEBUG] [Thread-132004] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:48:01.717 [DEBUG] [Thread-132004] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:48:01.717 [DEBUG] [Thread-132004] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:48:01.717 [DEBUG] [Thread-132004] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:48:01.717 [DEBUG] [Thread-132004] [transport.py] [_log()] Compression: none
2025-12-31T17:48:01.717 [DEBUG] [Thread-132004] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:48:01.775 [DEBUG] [Thread-132004] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:48:01.776 [DEBUG] [Thread-132004] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:48:01.776 [DEBUG] [Thread-132004] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T17:48:01.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T17:48:01.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:48:01.831 [DEBUG] [Thread-132004] [transport.py] [_log()] userauth is OK
2025-12-31T17:48:01.831 [DEBUG] [Thread-132004] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:48:01.831 [DEBUG] [Thread-132004] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:48:01.832 [DEBUG] [Thread-132004] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T17:48:01.832 [DEBUG] [Thread-132004] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:48:01.856 [INFO] [Thread-132004] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:48:01.857 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T17:48:01.857 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:48:02.692 [DEBUG] [Thread-132004] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:48:02.692 [DEBUG] [Thread-132004] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:48:02.740 [DEBUG] [Thread-132004] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:48:02.740 [DEBUG] [Thread-132004] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:48:02.749 [DEBUG] [Thread-132004] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:48:02.759 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:48:02.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-12-31T17:48:02.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-12-31T17:48:02.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:48:02.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:48:02.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:48:02.786 [DEBUG] [Thread-132004] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:48:03.988 [DEBUG] [Thread-132006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:48:19.041 [DEBUG] [Thread-132007 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:48:27.398 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:48:27.400 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:48:28.668 [DEBUG] [Thread-132008 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:48:32.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T17:48:32.806 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T17:48:32.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T17:48:33.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 17, 48, 17), 24.16, 20.25, 0.0, 31.97, 23.99, 0, 0, 0, 2, 0, 0),)
2025-12-31T17:48:33.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 17:48:17
2025-12-31T17:48:33.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T17:48:33.793 [DEBUG] [Thread-132009] [transport.py] [_log()] starting thread (client mode): 0xb1747fd0
2025-12-31T17:48:33.793 [DEBUG] [Thread-132009] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:48:33.814 [DEBUG] [Thread-132009] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T17:48:33.814 [INFO] [Thread-132009] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T17:48:33.815 [DEBUG] [Thread-132009] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:48:33.815 [DEBUG] [Thread-132009] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T17:48:33.815 [DEBUG] [Thread-132009] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:48:33.815 [DEBUG] [Thread-132009] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:48:33.815 [DEBUG] [Thread-132009] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:48:33.815 [DEBUG] [Thread-132009] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:48:33.815 [DEBUG] [Thread-132009] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:48:33.815 [DEBUG] [Thread-132009] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:48:33.815 [DEBUG] [Thread-132009] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:48:33.816 [DEBUG] [Thread-132009] [transport.py] [_log()] client lang: <none>
2025-12-31T17:48:33.816 [DEBUG] [Thread-132009] [transport.py] [_log()] server lang: <none>
2025-12-31T17:48:33.816 [DEBUG] [Thread-132009] [transport.py] [_log()] kex follows: False
2025-12-31T17:48:33.816 [DEBUG] [Thread-132009] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:48:33.816 [DEBUG] [Thread-132009] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:48:33.816 [DEBUG] [Thread-132009] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:48:33.816 [DEBUG] [Thread-132009] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:48:33.816 [DEBUG] [Thread-132009] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:48:33.816 [DEBUG] [Thread-132009] [transport.py] [_log()] Compression: none
2025-12-31T17:48:33.816 [DEBUG] [Thread-132009] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:48:33.835 [DEBUG] [Thread-132009] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:48:33.835 [DEBUG] [Thread-132009] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:48:33.836 [DEBUG] [Thread-132009] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T17:48:33.836 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T17:48:33.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:48:33.838 [DEBUG] [Thread-132009] [transport.py] [_log()] userauth is OK
2025-12-31T17:48:33.838 [DEBUG] [Thread-132009] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:48:33.838 [DEBUG] [Thread-132009] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:48:33.838 [DEBUG] [Thread-132009] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T17:48:33.838 [DEBUG] [Thread-132009] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:48:33.861 [INFO] [Thread-132009] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:48:33.862 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:48:34.074 [DEBUG] [Thread-132011 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:48:34.659 [DEBUG] [Thread-132009] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:48:34.659 [DEBUG] [Thread-132009] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:48:34.660 [DEBUG] [Thread-132009] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T17:48:34.700 [DEBUG] [Thread-132009] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:48:34.701 [DEBUG] [Thread-132009] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:48:34.704 [DEBUG] [Thread-132009] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:48:34.718 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:48:34.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T17:48:34.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T17:48:34.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T17:48:34.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:48:34.731 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T17:48:34.732 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:48:34.732 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:48:34.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T17:48:34.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.658126 -999.00  +23.50  25.24     26   +3.00 1 2 1 1 1   887    0 17.47 -122.86 ----- 23.9 25.2 274.6 37.5 25.8 -15.8 25.9 -14.9 25.6 -13.9 26.0 -15.2
2025-12-31T17:48:34.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T17:48:34.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T17:48:34.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.658126
2025-12-31T17:48:34.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T17:48:34.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T17:48:34.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T17:48:34.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T17:48:34.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T17:48:34.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T17:48:17', tmtdew=24.16, humidity=20.25, cloud=0.0, wind=31.97, temperature=23.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T15:47:42.086', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T17:48:34.734 [DEBUG] [Thread-132009] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:48:34.830 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T17:48:34.841 [DEBUG] [Thread-132013] [transport.py] [_log()] starting thread (client mode): 0xb6bbce80
2025-12-31T17:48:34.841 [DEBUG] [Thread-132013] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:48:34.855 [DEBUG] [Thread-132013] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T17:48:34.855 [INFO] [Thread-132013] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T17:48:34.863 [DEBUG] [Thread-132013] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:48:34.863 [DEBUG] [Thread-132013] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T17:48:34.863 [DEBUG] [Thread-132013] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:48:34.863 [DEBUG] [Thread-132013] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:48:34.863 [DEBUG] [Thread-132013] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:48:34.863 [DEBUG] [Thread-132013] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:48:34.864 [DEBUG] [Thread-132013] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:48:34.864 [DEBUG] [Thread-132013] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:48:34.864 [DEBUG] [Thread-132013] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:48:34.864 [DEBUG] [Thread-132013] [transport.py] [_log()] client lang: <none>
2025-12-31T17:48:34.864 [DEBUG] [Thread-132013] [transport.py] [_log()] server lang: <none>
2025-12-31T17:48:34.864 [DEBUG] [Thread-132013] [transport.py] [_log()] kex follows: False
2025-12-31T17:48:34.864 [DEBUG] [Thread-132013] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:48:34.864 [DEBUG] [Thread-132013] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:48:34.864 [DEBUG] [Thread-132013] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:48:34.864 [DEBUG] [Thread-132013] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:48:34.865 [DEBUG] [Thread-132013] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:48:34.865 [DEBUG] [Thread-132013] [transport.py] [_log()] Compression: none
2025-12-31T17:48:34.865 [DEBUG] [Thread-132013] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:48:34.921 [DEBUG] [Thread-132013] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:48:34.921 [DEBUG] [Thread-132013] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:48:34.922 [DEBUG] [Thread-132013] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T17:48:34.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T17:48:34.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:48:34.978 [DEBUG] [Thread-132013] [transport.py] [_log()] userauth is OK
2025-12-31T17:48:34.978 [DEBUG] [Thread-132013] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:48:34.978 [DEBUG] [Thread-132013] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:48:34.978 [DEBUG] [Thread-132013] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T17:48:34.978 [DEBUG] [Thread-132013] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:48:34.997 [INFO] [Thread-132013] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:48:34.997 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T17:48:34.998 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:48:35.794 [DEBUG] [Thread-132013] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:48:35.794 [DEBUG] [Thread-132013] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:48:35.841 [DEBUG] [Thread-132013] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:48:35.841 [DEBUG] [Thread-132013] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:48:35.850 [DEBUG] [Thread-132013] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:48:35.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:48:35.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T17:48: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-12-31T17:48:35.876 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:48:35.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:48:35.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:48:35.884 [DEBUG] [Thread-132013] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:48:49.111 [DEBUG] [Thread-132015 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:49:04.161 [DEBUG] [Thread-132016 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:49:05.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T17:49:05.907 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T17:49:05.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T17:49:06.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 17, 48, 49), 24.38, 20.02, 0.0, 28.09, 23.96, 0, 0, 0, 2, 0, 0),)
2025-12-31T17:49:06.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 17:48:49
2025-12-31T17:49:06.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T17:49:06.867 [DEBUG] [Thread-132017] [transport.py] [_log()] starting thread (client mode): 0xb9592b00
2025-12-31T17:49:06.867 [DEBUG] [Thread-132017] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:49:06.888 [DEBUG] [Thread-132017] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T17:49:06.888 [INFO] [Thread-132017] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T17:49:06.891 [DEBUG] [Thread-132017] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:49:06.891 [DEBUG] [Thread-132017] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T17:49:06.891 [DEBUG] [Thread-132017] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:49:06.891 [DEBUG] [Thread-132017] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:49:06.891 [DEBUG] [Thread-132017] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:49:06.891 [DEBUG] [Thread-132017] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:49:06.891 [DEBUG] [Thread-132017] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:49:06.891 [DEBUG] [Thread-132017] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:49:06.891 [DEBUG] [Thread-132017] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:49:06.891 [DEBUG] [Thread-132017] [transport.py] [_log()] client lang: <none>
2025-12-31T17:49:06.891 [DEBUG] [Thread-132017] [transport.py] [_log()] server lang: <none>
2025-12-31T17:49:06.891 [DEBUG] [Thread-132017] [transport.py] [_log()] kex follows: False
2025-12-31T17:49:06.891 [DEBUG] [Thread-132017] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:49:06.891 [DEBUG] [Thread-132017] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:49:06.892 [DEBUG] [Thread-132017] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:49:06.892 [DEBUG] [Thread-132017] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:49:06.892 [DEBUG] [Thread-132017] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:49:06.892 [DEBUG] [Thread-132017] [transport.py] [_log()] Compression: none
2025-12-31T17:49:06.892 [DEBUG] [Thread-132017] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:49:06.909 [DEBUG] [Thread-132017] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:49:06.909 [DEBUG] [Thread-132017] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:49:06.910 [DEBUG] [Thread-132017] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T17:49:06.910 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T17:49:06.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:49:06.913 [DEBUG] [Thread-132017] [transport.py] [_log()] userauth is OK
2025-12-31T17:49:06.913 [DEBUG] [Thread-132017] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:49:06.913 [DEBUG] [Thread-132017] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:49:06.913 [DEBUG] [Thread-132017] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T17:49:06.913 [DEBUG] [Thread-132017] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:49:06.951 [INFO] [Thread-132017] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:49:06.951 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:49:07.597 [DEBUG] [Thread-132017] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:49:07.597 [DEBUG] [Thread-132017] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:49:07.598 [DEBUG] [Thread-132017] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T17:49:07.638 [DEBUG] [Thread-132017] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:49:07.638 [DEBUG] [Thread-132017] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:49:07.641 [DEBUG] [Thread-132017] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:49:07.653 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:49:07.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T17:49:07.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T17:49:07.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T17:49:07.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:49:07.662 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T17:49:07.662 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:49:07.663 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:49:07.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T17:49:07.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.658474 -999.00  +23.40  34.36     26   +2.80 1 2 2 1 1   887    0 17.45 -116.84 ----- 30.2 34.4 271.0 39.4 25.8 -16.0 25.9 -15.0 25.6 -13.6 26.0 -15.8
2025-12-31T17:49:07.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T17:49:07.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T17:49:07.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.658474
2025-12-31T17:49:07.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T17:49:07.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T17:49:07.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T17:49:07.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T17:49:07.665 [DEBUG] [Thread-132017] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:49:07.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T17:49:07.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T17:48:49', tmtdew=24.38, humidity=20.02, cloud=0.0, wind=28.09, temperature=23.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T15:48:12.154', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T17:49:07.760 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T17:49:07.772 [DEBUG] [Thread-132020] [transport.py] [_log()] starting thread (client mode): 0xb9559fc0
2025-12-31T17:49:07.772 [DEBUG] [Thread-132020] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:49:07.787 [DEBUG] [Thread-132020] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T17:49:07.787 [INFO] [Thread-132020] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T17:49:07.795 [DEBUG] [Thread-132020] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:49:07.795 [DEBUG] [Thread-132020] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T17:49:07.795 [DEBUG] [Thread-132020] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:49:07.795 [DEBUG] [Thread-132020] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:49:07.795 [DEBUG] [Thread-132020] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:49:07.795 [DEBUG] [Thread-132020] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:49:07.795 [DEBUG] [Thread-132020] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:49:07.795 [DEBUG] [Thread-132020] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:49:07.795 [DEBUG] [Thread-132020] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:49:07.795 [DEBUG] [Thread-132020] [transport.py] [_log()] client lang: <none>
2025-12-31T17:49:07.795 [DEBUG] [Thread-132020] [transport.py] [_log()] server lang: <none>
2025-12-31T17:49:07.795 [DEBUG] [Thread-132020] [transport.py] [_log()] kex follows: False
2025-12-31T17:49:07.795 [DEBUG] [Thread-132020] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:49:07.796 [DEBUG] [Thread-132020] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:49:07.796 [DEBUG] [Thread-132020] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:49:07.796 [DEBUG] [Thread-132020] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:49:07.796 [DEBUG] [Thread-132020] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:49:07.796 [DEBUG] [Thread-132020] [transport.py] [_log()] Compression: none
2025-12-31T17:49:07.796 [DEBUG] [Thread-132020] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:49:07.855 [DEBUG] [Thread-132020] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:49:07.855 [DEBUG] [Thread-132020] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:49:07.856 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T17:49:07.856 [DEBUG] [Thread-132020] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T17:49:07.857 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:49:07.910 [DEBUG] [Thread-132020] [transport.py] [_log()] userauth is OK
2025-12-31T17:49:07.910 [DEBUG] [Thread-132020] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:49:07.911 [DEBUG] [Thread-132020] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:49:07.911 [DEBUG] [Thread-132020] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T17:49:07.911 [DEBUG] [Thread-132020] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:49:07.929 [INFO] [Thread-132020] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:49:07.930 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T17:49:07.930 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:49:08.768 [DEBUG] [Thread-132020] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:49:08.768 [DEBUG] [Thread-132020] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:49:08.816 [DEBUG] [Thread-132020] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:49:08.816 [DEBUG] [Thread-132020] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:49:08.826 [DEBUG] [Thread-132020] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:49:08.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:49:08.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T17:49:08.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T17:49:08.853 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:49:08.854 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:49:08.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:49:08.862 [DEBUG] [Thread-132020] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:49:19.196 [DEBUG] [Thread-132022 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:49:27.540 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:49:27.541 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:49:28.715 [DEBUG] [Thread-132023 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:49:34.246 [DEBUG] [Thread-132024 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:49:38.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T17:49:38.885 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T17:49:38.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T17:49:39.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 17, 49, 21), 24.37, 20.03, 0.0, 24.35, 23.94, 0, 0, 0, 2, 0, 0),)
2025-12-31T17:49:39.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 17:49:21
2025-12-31T17:49:39.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T17:49:39.867 [DEBUG] [Thread-132025] [transport.py] [_log()] starting thread (client mode): 0xb17469b0
2025-12-31T17:49:39.868 [DEBUG] [Thread-132025] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:49:39.888 [DEBUG] [Thread-132025] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T17:49:39.888 [INFO] [Thread-132025] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T17:49:39.891 [DEBUG] [Thread-132025] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:49:39.891 [DEBUG] [Thread-132025] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T17:49:39.891 [DEBUG] [Thread-132025] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:49:39.891 [DEBUG] [Thread-132025] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:49:39.891 [DEBUG] [Thread-132025] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:49:39.891 [DEBUG] [Thread-132025] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:49:39.891 [DEBUG] [Thread-132025] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:49:39.891 [DEBUG] [Thread-132025] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:49:39.891 [DEBUG] [Thread-132025] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:49:39.892 [DEBUG] [Thread-132025] [transport.py] [_log()] client lang: <none>
2025-12-31T17:49:39.892 [DEBUG] [Thread-132025] [transport.py] [_log()] server lang: <none>
2025-12-31T17:49:39.892 [DEBUG] [Thread-132025] [transport.py] [_log()] kex follows: False
2025-12-31T17:49:39.892 [DEBUG] [Thread-132025] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:49:39.892 [DEBUG] [Thread-132025] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:49:39.892 [DEBUG] [Thread-132025] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:49:39.892 [DEBUG] [Thread-132025] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:49:39.892 [DEBUG] [Thread-132025] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:49:39.892 [DEBUG] [Thread-132025] [transport.py] [_log()] Compression: none
2025-12-31T17:49:39.892 [DEBUG] [Thread-132025] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:49:39.911 [DEBUG] [Thread-132025] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:49:39.911 [DEBUG] [Thread-132025] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:49:39.912 [DEBUG] [Thread-132025] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T17:49:39.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T17:49:39.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:49:39.914 [DEBUG] [Thread-132025] [transport.py] [_log()] userauth is OK
2025-12-31T17:49:39.914 [DEBUG] [Thread-132025] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:49:39.914 [DEBUG] [Thread-132025] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:49:39.914 [DEBUG] [Thread-132025] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T17:49:39.914 [DEBUG] [Thread-132025] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:49:39.936 [INFO] [Thread-132025] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:49:39.939 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:49:40.755 [DEBUG] [Thread-132025] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:49:40.756 [DEBUG] [Thread-132025] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:49:40.756 [DEBUG] [Thread-132025] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T17:49:40.796 [DEBUG] [Thread-132025] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:49:40.796 [DEBUG] [Thread-132025] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:49:40.800 [DEBUG] [Thread-132025] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:49:40.812 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:49:40.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T17:49:40.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T17:49:40.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T17:49:40.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:49:40.825 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T17:49:40.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:49:40.825 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:49:40.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T17:49:40.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.658821 -999.00  +23.50  25.46     26   +2.90 1 2 1 1 1   887    0 17.94 -115.95 ----- 30.3 25.5 270.0 31.8 25.9 -16.7 25.9 -14.6 25.8 -14.2 26.1 -14.7
2025-12-31T17:49:40.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T17:49:40.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T17:49:40.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.658821
2025-12-31T17:49:40.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T17:49:40.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T17:49:40.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T17:49:40.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T17:49:40.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T17:49:40.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T17:49:21', tmtdew=24.37, humidity=20.03, cloud=0.0, wind=24.35, temperature=23.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T15:48:42.134', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T17:49:40.828 [DEBUG] [Thread-132025] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:49:40.905 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T17:49:40.917 [DEBUG] [Thread-132028] [transport.py] [_log()] starting thread (client mode): 0xb6bb0730
2025-12-31T17:49:40.917 [DEBUG] [Thread-132028] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:49:40.934 [DEBUG] [Thread-132028] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T17:49:40.934 [INFO] [Thread-132028] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T17:49:40.941 [DEBUG] [Thread-132028] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:49:40.942 [DEBUG] [Thread-132028] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T17:49:40.942 [DEBUG] [Thread-132028] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:49:40.942 [DEBUG] [Thread-132028] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:49:40.942 [DEBUG] [Thread-132028] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:49:40.942 [DEBUG] [Thread-132028] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:49:40.943 [DEBUG] [Thread-132028] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:49:40.943 [DEBUG] [Thread-132028] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:49:40.943 [DEBUG] [Thread-132028] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:49:40.943 [DEBUG] [Thread-132028] [transport.py] [_log()] client lang: <none>
2025-12-31T17:49:40.943 [DEBUG] [Thread-132028] [transport.py] [_log()] server lang: <none>
2025-12-31T17:49:40.943 [DEBUG] [Thread-132028] [transport.py] [_log()] kex follows: False
2025-12-31T17:49:40.943 [DEBUG] [Thread-132028] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:49:40.943 [DEBUG] [Thread-132028] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:49:40.943 [DEBUG] [Thread-132028] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:49:40.944 [DEBUG] [Thread-132028] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:49:40.944 [DEBUG] [Thread-132028] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:49:40.944 [DEBUG] [Thread-132028] [transport.py] [_log()] Compression: none
2025-12-31T17:49:40.944 [DEBUG] [Thread-132028] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:49:41.002 [DEBUG] [Thread-132028] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:49:41.003 [DEBUG] [Thread-132028] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:49:41.003 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T17:49:41.004 [DEBUG] [Thread-132028] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T17:49:41.005 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:49:41.058 [DEBUG] [Thread-132028] [transport.py] [_log()] userauth is OK
2025-12-31T17:49:41.059 [DEBUG] [Thread-132028] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:49:41.059 [DEBUG] [Thread-132028] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:49:41.059 [DEBUG] [Thread-132028] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T17:49:41.059 [DEBUG] [Thread-132028] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:49:41.077 [INFO] [Thread-132028] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:49:41.078 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T17:49:41.078 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:49:41.927 [DEBUG] [Thread-132028] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:49:41.927 [DEBUG] [Thread-132028] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:49:41.975 [DEBUG] [Thread-132028] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:49:41.975 [DEBUG] [Thread-132028] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:49:41.984 [DEBUG] [Thread-132028] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:49:41.994 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:49:41.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T17:49:42.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T17:49:42.012 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:49:42.012 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:49:42.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:49:42.021 [DEBUG] [Thread-132028] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:49:49.284 [DEBUG] [Thread-132030 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:50:04.339 [DEBUG] [Thread-132031 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:50:12.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T17:50:12.043 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T17:50:12.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T17:50:12.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 17, 49, 53), 24.53, 20.03, 0.0, 27.72, 24.28, 0, 0, 0, 2, 0, 0),)
2025-12-31T17:50:12.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 17:49:53
2025-12-31T17:50:12.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T17:50:13.025 [DEBUG] [Thread-132032] [transport.py] [_log()] starting thread (client mode): 0xb9591300
2025-12-31T17:50:13.025 [DEBUG] [Thread-132032] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:50:13.045 [DEBUG] [Thread-132032] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T17:50:13.045 [INFO] [Thread-132032] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T17:50:13.049 [DEBUG] [Thread-132032] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:50:13.049 [DEBUG] [Thread-132032] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T17:50:13.049 [DEBUG] [Thread-132032] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:50:13.049 [DEBUG] [Thread-132032] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:50:13.049 [DEBUG] [Thread-132032] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:50:13.049 [DEBUG] [Thread-132032] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:50:13.049 [DEBUG] [Thread-132032] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:50:13.049 [DEBUG] [Thread-132032] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:50:13.049 [DEBUG] [Thread-132032] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:50:13.049 [DEBUG] [Thread-132032] [transport.py] [_log()] client lang: <none>
2025-12-31T17:50:13.049 [DEBUG] [Thread-132032] [transport.py] [_log()] server lang: <none>
2025-12-31T17:50:13.049 [DEBUG] [Thread-132032] [transport.py] [_log()] kex follows: False
2025-12-31T17:50:13.049 [DEBUG] [Thread-132032] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:50:13.049 [DEBUG] [Thread-132032] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:50:13.049 [DEBUG] [Thread-132032] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:50:13.049 [DEBUG] [Thread-132032] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:50:13.049 [DEBUG] [Thread-132032] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:50:13.049 [DEBUG] [Thread-132032] [transport.py] [_log()] Compression: none
2025-12-31T17:50:13.049 [DEBUG] [Thread-132032] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:50:13.065 [DEBUG] [Thread-132032] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:50:13.066 [DEBUG] [Thread-132032] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:50:13.066 [DEBUG] [Thread-132032] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T17:50:13.066 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T17:50:13.066 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:50:13.067 [DEBUG] [Thread-132032] [transport.py] [_log()] userauth is OK
2025-12-31T17:50:13.067 [DEBUG] [Thread-132032] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:50:13.067 [DEBUG] [Thread-132032] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:50:13.067 [DEBUG] [Thread-132032] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T17:50:13.067 [DEBUG] [Thread-132032] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:50:13.085 [INFO] [Thread-132032] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:50:13.085 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:50:17.597 [DEBUG] [Thread-132032] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:50:17.597 [DEBUG] [Thread-132032] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:50:17.598 [DEBUG] [Thread-132032] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T17:50:17.638 [DEBUG] [Thread-132032] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:50:17.638 [DEBUG] [Thread-132032] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:50:17.640 [DEBUG] [Thread-132032] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:50:17.726 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:50:17.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T17:50:17.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T17:50:17.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T17:50:17.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:50:17.744 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T17:50:17.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:50:17.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:50:17.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T17:50:17.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.659168 -999.00  +23.50  25.72     26   +3.00 1 2 1 1 1   887    0 17.47 -110.28 ----- 27.4 25.7 274.2 34.6 25.8 -16.6 25.9 -15.6 25.6 -16.6 26.0 -16.4
2025-12-31T17:50:17.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T17:50:17.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T17:50:17.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.659168
2025-12-31T17:50:17.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T17:50:17.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T17:50:17.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T17:50:17.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T17:50:17.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T17:50:17.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T17:49:53', tmtdew=24.53, humidity=20.03, cloud=0.0, wind=27.72, temperature=24.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T15:49:12.115', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T17:50:17.747 [DEBUG] [Thread-132032] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:50:17.831 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T17:50:17.845 [DEBUG] [Thread-132035] [transport.py] [_log()] starting thread (client mode): 0xb9558760
2025-12-31T17:50:17.845 [DEBUG] [Thread-132035] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:50:17.861 [DEBUG] [Thread-132035] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T17:50:17.861 [INFO] [Thread-132035] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T17:50:17.868 [DEBUG] [Thread-132035] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:50:17.869 [DEBUG] [Thread-132035] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T17:50:17.869 [DEBUG] [Thread-132035] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:50:17.869 [DEBUG] [Thread-132035] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:50:17.869 [DEBUG] [Thread-132035] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:50:17.869 [DEBUG] [Thread-132035] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:50:17.869 [DEBUG] [Thread-132035] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:50:17.869 [DEBUG] [Thread-132035] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:50:17.869 [DEBUG] [Thread-132035] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:50:17.869 [DEBUG] [Thread-132035] [transport.py] [_log()] client lang: <none>
2025-12-31T17:50:17.869 [DEBUG] [Thread-132035] [transport.py] [_log()] server lang: <none>
2025-12-31T17:50:17.869 [DEBUG] [Thread-132035] [transport.py] [_log()] kex follows: False
2025-12-31T17:50:17.869 [DEBUG] [Thread-132035] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:50:17.869 [DEBUG] [Thread-132035] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:50:17.869 [DEBUG] [Thread-132035] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:50:17.869 [DEBUG] [Thread-132035] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:50:17.869 [DEBUG] [Thread-132035] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:50:17.869 [DEBUG] [Thread-132035] [transport.py] [_log()] Compression: none
2025-12-31T17:50:17.869 [DEBUG] [Thread-132035] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:50:17.925 [DEBUG] [Thread-132035] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:50:17.926 [DEBUG] [Thread-132035] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:50:17.927 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T17:50:17.927 [DEBUG] [Thread-132035] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T17:50:17.928 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:50:17.982 [DEBUG] [Thread-132035] [transport.py] [_log()] userauth is OK
2025-12-31T17:50:17.982 [DEBUG] [Thread-132035] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:50:17.982 [DEBUG] [Thread-132035] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:50:17.983 [DEBUG] [Thread-132035] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T17:50:17.983 [DEBUG] [Thread-132035] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:50:18.002 [INFO] [Thread-132035] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:50:18.002 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T17:50:18.003 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:50:18.791 [DEBUG] [Thread-132035] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:50:18.792 [DEBUG] [Thread-132035] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:50:18.840 [DEBUG] [Thread-132035] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:50:18.840 [DEBUG] [Thread-132035] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:50:18.849 [DEBUG] [Thread-132035] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:50:18.858 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:50:18.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T17:50:18.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T17:50:18.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:50:18.877 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:50:18.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:50:18.886 [DEBUG] [Thread-132035] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:50:19.374 [DEBUG] [Thread-132037 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:50:27.680 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:50:27.681 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:50:28.769 [DEBUG] [Thread-132038 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:50:34.429 [DEBUG] [Thread-132039 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:50:48.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T17:50:48.908 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T17:50:48.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T17:50:49.460 [DEBUG] [Thread-132040 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:50:49.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 17, 50, 25), 24.57, 19.99, 0.0, 29.47, 24.29, 0, 0, 0, 2, 0, 0),)
2025-12-31T17:50:49.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 17:50:25
2025-12-31T17:50:49.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T17:50:49.951 [DEBUG] [Thread-132041] [transport.py] [_log()] starting thread (client mode): 0xb9592440
2025-12-31T17:50:49.951 [DEBUG] [Thread-132041] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:50:49.970 [DEBUG] [Thread-132041] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T17:50:49.970 [INFO] [Thread-132041] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T17:50:49.973 [DEBUG] [Thread-132041] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:50:49.973 [DEBUG] [Thread-132041] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T17:50:49.973 [DEBUG] [Thread-132041] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:50:49.973 [DEBUG] [Thread-132041] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:50:49.973 [DEBUG] [Thread-132041] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:50:49.973 [DEBUG] [Thread-132041] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:50:49.973 [DEBUG] [Thread-132041] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:50:49.973 [DEBUG] [Thread-132041] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:50:49.973 [DEBUG] [Thread-132041] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:50:49.973 [DEBUG] [Thread-132041] [transport.py] [_log()] client lang: <none>
2025-12-31T17:50:49.973 [DEBUG] [Thread-132041] [transport.py] [_log()] server lang: <none>
2025-12-31T17:50:49.974 [DEBUG] [Thread-132041] [transport.py] [_log()] kex follows: False
2025-12-31T17:50:49.974 [DEBUG] [Thread-132041] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:50:49.974 [DEBUG] [Thread-132041] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:50:49.974 [DEBUG] [Thread-132041] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:50:49.974 [DEBUG] [Thread-132041] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:50:49.974 [DEBUG] [Thread-132041] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:50:49.974 [DEBUG] [Thread-132041] [transport.py] [_log()] Compression: none
2025-12-31T17:50:49.974 [DEBUG] [Thread-132041] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:50:49.990 [DEBUG] [Thread-132041] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:50:49.990 [DEBUG] [Thread-132041] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:50:49.990 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T17:50:49.990 [DEBUG] [Thread-132041] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T17:50:49.990 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:50:49.990 [DEBUG] [Thread-132041] [transport.py] [_log()] userauth is OK
2025-12-31T17:50:49.990 [DEBUG] [Thread-132041] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:50:49.991 [DEBUG] [Thread-132041] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:50:49.991 [DEBUG] [Thread-132041] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T17:50:49.991 [DEBUG] [Thread-132041] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:50:50.005 [INFO] [Thread-132041] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:50:50.006 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:50:50.590 [DEBUG] [Thread-132041] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:50:50.590 [DEBUG] [Thread-132041] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:50:50.590 [DEBUG] [Thread-132041] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T17:50:50.631 [DEBUG] [Thread-132041] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:50:50.631 [DEBUG] [Thread-132041] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:50:50.634 [DEBUG] [Thread-132041] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:50:50.643 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:50:50.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T17:50:50.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T17:50:50.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T17:50:50.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:50:50.648 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T17:50:50.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:50:50.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:50:50.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T17:50:50.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.659862 -999.00  +23.70  15.36     25   +2.90 1 2 1 1 1   887    0 18.12 -99.95 ----- 19.8 15.4 272.2 24.8 25.9 -16.1 25.9 -15.6 25.9 -14.2 26.1 -15.6
2025-12-31T17:50:50.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T17:50:50.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T17:50:50.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.659862
2025-12-31T17:50:50.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T17:50:50.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T17:50:50.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T17:50:50.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T17:50:50.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T17:50:50.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T17:50:25', tmtdew=24.57, humidity=19.99, cloud=0.0, wind=29.47, temperature=24.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T15:50:12.077', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T17:50:50.649 [DEBUG] [Thread-132041] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:50:50.723 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T17:50:50.735 [DEBUG] [Thread-132044] [transport.py] [_log()] starting thread (client mode): 0xb1747460
2025-12-31T17:50:50.735 [DEBUG] [Thread-132044] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:50:50.750 [DEBUG] [Thread-132044] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T17:50:50.750 [INFO] [Thread-132044] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T17:50:50.757 [DEBUG] [Thread-132044] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:50:50.757 [DEBUG] [Thread-132044] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T17:50:50.757 [DEBUG] [Thread-132044] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:50:50.757 [DEBUG] [Thread-132044] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:50:50.757 [DEBUG] [Thread-132044] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:50:50.757 [DEBUG] [Thread-132044] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:50:50.757 [DEBUG] [Thread-132044] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:50:50.757 [DEBUG] [Thread-132044] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:50:50.757 [DEBUG] [Thread-132044] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:50:50.757 [DEBUG] [Thread-132044] [transport.py] [_log()] client lang: <none>
2025-12-31T17:50:50.757 [DEBUG] [Thread-132044] [transport.py] [_log()] server lang: <none>
2025-12-31T17:50:50.757 [DEBUG] [Thread-132044] [transport.py] [_log()] kex follows: False
2025-12-31T17:50:50.757 [DEBUG] [Thread-132044] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:50:50.758 [DEBUG] [Thread-132044] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:50:50.758 [DEBUG] [Thread-132044] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:50:50.758 [DEBUG] [Thread-132044] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:50:50.758 [DEBUG] [Thread-132044] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:50:50.758 [DEBUG] [Thread-132044] [transport.py] [_log()] Compression: none
2025-12-31T17:50:50.758 [DEBUG] [Thread-132044] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:50:50.819 [DEBUG] [Thread-132044] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:50:50.820 [DEBUG] [Thread-132044] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:50:50.820 [DEBUG] [Thread-132044] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T17:50:50.820 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T17:50:50.820 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:50:50.877 [DEBUG] [Thread-132044] [transport.py] [_log()] userauth is OK
2025-12-31T17:50:50.877 [DEBUG] [Thread-132044] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:50:50.877 [DEBUG] [Thread-132044] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:50:50.877 [DEBUG] [Thread-132044] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T17:50:50.877 [DEBUG] [Thread-132044] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:50:50.890 [INFO] [Thread-132044] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:50:50.890 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T17:50:50.890 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:50:51.718 [DEBUG] [Thread-132044] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:50:51.719 [DEBUG] [Thread-132044] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:50:51.766 [DEBUG] [Thread-132044] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:50:51.766 [DEBUG] [Thread-132044] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:50:51.774 [DEBUG] [Thread-132044] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:50:51.782 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:50:51.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T17:50:51.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T17:50:51.798 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:50:51.798 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:50:51.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:50:51.805 [DEBUG] [Thread-132044] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:51:04.491 [DEBUG] [Thread-132046 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:51:19.546 [DEBUG] [Thread-132047 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:51:21.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T17:51:21.828 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T17:51:21.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T17:51:22.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 17, 50, 58), 24.59, 19.49, 0.0, 23.84, 24.13, 0, 0, 0, 2, 0, 0),)
2025-12-31T17:51:22.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 17:50:58
2025-12-31T17:51:22.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T17:51:22.805 [DEBUG] [Thread-132048] [transport.py] [_log()] starting thread (client mode): 0xb955af20
2025-12-31T17:51:22.806 [DEBUG] [Thread-132048] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:51:22.827 [DEBUG] [Thread-132048] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T17:51:22.827 [INFO] [Thread-132048] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T17:51:22.830 [DEBUG] [Thread-132048] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:51:22.830 [DEBUG] [Thread-132048] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T17:51:22.830 [DEBUG] [Thread-132048] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:51:22.830 [DEBUG] [Thread-132048] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:51:22.830 [DEBUG] [Thread-132048] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:51:22.831 [DEBUG] [Thread-132048] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:51:22.831 [DEBUG] [Thread-132048] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:51:22.831 [DEBUG] [Thread-132048] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:51:22.831 [DEBUG] [Thread-132048] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:51:22.831 [DEBUG] [Thread-132048] [transport.py] [_log()] client lang: <none>
2025-12-31T17:51:22.831 [DEBUG] [Thread-132048] [transport.py] [_log()] server lang: <none>
2025-12-31T17:51:22.831 [DEBUG] [Thread-132048] [transport.py] [_log()] kex follows: False
2025-12-31T17:51:22.831 [DEBUG] [Thread-132048] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:51:22.831 [DEBUG] [Thread-132048] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:51:22.831 [DEBUG] [Thread-132048] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:51:22.831 [DEBUG] [Thread-132048] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:51:22.831 [DEBUG] [Thread-132048] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:51:22.831 [DEBUG] [Thread-132048] [transport.py] [_log()] Compression: none
2025-12-31T17:51:22.831 [DEBUG] [Thread-132048] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:51:22.849 [DEBUG] [Thread-132048] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:51:22.849 [DEBUG] [Thread-132048] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:51:22.850 [DEBUG] [Thread-132048] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T17:51:22.850 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T17:51:22.851 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:51:22.852 [DEBUG] [Thread-132048] [transport.py] [_log()] userauth is OK
2025-12-31T17:51:22.852 [DEBUG] [Thread-132048] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:51:22.852 [DEBUG] [Thread-132048] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:51:22.852 [DEBUG] [Thread-132048] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T17:51:22.852 [DEBUG] [Thread-132048] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:51:22.876 [INFO] [Thread-132048] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:51:22.877 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:51:23.651 [DEBUG] [Thread-132048] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:51:23.652 [DEBUG] [Thread-132048] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:51:23.652 [DEBUG] [Thread-132048] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T17:51:23.692 [DEBUG] [Thread-132048] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:51:23.693 [DEBUG] [Thread-132048] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:51:23.696 [DEBUG] [Thread-132048] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:51:23.710 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:51:23.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T17:51:23.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T17:51:23.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T17:51:23.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:51:23.721 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T17:51:23.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:51:23.721 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:51:23.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T17:51:23.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.660210 -999.00  +23.80  22.52     25   +3.00 1 2 1 1 1   887    0 17.88 -94.13 ----- 22.2 22.5 265.2 31.0 25.9 -16.5 26.0 -15.3 26.0 -14.8 26.1 -16.3
2025-12-31T17:51:23.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T17:51:23.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T17:51:23.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.660210
2025-12-31T17:51:23.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T17:51:23.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T17:51:23.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T17:51:23.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T17:51:23.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T17:51:23.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T17:50:58', tmtdew=24.59, humidity=19.49, cloud=0.0, wind=23.84, temperature=24.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T15:50:42.144', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T17:51:23.724 [DEBUG] [Thread-132048] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:51:23.807 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T17:51:23.821 [DEBUG] [Thread-132051] [transport.py] [_log()] starting thread (client mode): 0xb95589d0
2025-12-31T17:51:23.821 [DEBUG] [Thread-132051] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:51:23.836 [DEBUG] [Thread-132051] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T17:51:23.837 [INFO] [Thread-132051] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T17:51:23.846 [DEBUG] [Thread-132051] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:51:23.846 [DEBUG] [Thread-132051] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T17:51:23.846 [DEBUG] [Thread-132051] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:51:23.846 [DEBUG] [Thread-132051] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:51:23.846 [DEBUG] [Thread-132051] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:51:23.847 [DEBUG] [Thread-132051] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:51:23.847 [DEBUG] [Thread-132051] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:51:23.847 [DEBUG] [Thread-132051] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:51:23.847 [DEBUG] [Thread-132051] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:51:23.847 [DEBUG] [Thread-132051] [transport.py] [_log()] client lang: <none>
2025-12-31T17:51:23.847 [DEBUG] [Thread-132051] [transport.py] [_log()] server lang: <none>
2025-12-31T17:51:23.847 [DEBUG] [Thread-132051] [transport.py] [_log()] kex follows: False
2025-12-31T17:51:23.847 [DEBUG] [Thread-132051] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:51:23.847 [DEBUG] [Thread-132051] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:51:23.847 [DEBUG] [Thread-132051] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:51:23.847 [DEBUG] [Thread-132051] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:51:23.847 [DEBUG] [Thread-132051] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:51:23.847 [DEBUG] [Thread-132051] [transport.py] [_log()] Compression: none
2025-12-31T17:51:23.847 [DEBUG] [Thread-132051] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:51:23.902 [DEBUG] [Thread-132051] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:51:23.902 [DEBUG] [Thread-132051] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:51:23.903 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T17:51:23.904 [DEBUG] [Thread-132051] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T17:51:23.905 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:51:23.963 [DEBUG] [Thread-132051] [transport.py] [_log()] userauth is OK
2025-12-31T17:51:23.963 [DEBUG] [Thread-132051] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:51:23.964 [DEBUG] [Thread-132051] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:51:23.964 [DEBUG] [Thread-132051] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T17:51:23.964 [DEBUG] [Thread-132051] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:51:23.983 [INFO] [Thread-132051] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:51:23.983 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T17:51:23.984 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:51:24.805 [DEBUG] [Thread-132051] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:51:24.805 [DEBUG] [Thread-132051] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:51:24.856 [DEBUG] [Thread-132051] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:51:24.857 [DEBUG] [Thread-132051] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:51:24.866 [DEBUG] [Thread-132051] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:51:24.875 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:51:24.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T17:51:24.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T17:51:24.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:51:24.894 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:51:24.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:51:24.903 [DEBUG] [Thread-132051] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:51:27.820 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:51:27.821 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:51:28.816 [DEBUG] [Thread-132053 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:51:34.581 [DEBUG] [Thread-132054 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:51:49.643 [DEBUG] [Thread-132055 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:51:54.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T17:51:54.926 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T17:51:54.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T17:51:55.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 17, 51, 30), 24.49, 19.6, 0.0, 29.41, 24.05, 0, 0, 0, 2, 0, 0),)
2025-12-31T17:51:55.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 17:51:30
2025-12-31T17:51:55.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T17:51:55.914 [DEBUG] [Thread-132056] [transport.py] [_log()] starting thread (client mode): 0xb6bb3e50
2025-12-31T17:51:55.914 [DEBUG] [Thread-132056] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:51:55.935 [DEBUG] [Thread-132056] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T17:51:55.935 [INFO] [Thread-132056] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T17:51:55.938 [DEBUG] [Thread-132056] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:51:55.938 [DEBUG] [Thread-132056] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T17:51:55.938 [DEBUG] [Thread-132056] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:51:55.938 [DEBUG] [Thread-132056] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:51:55.938 [DEBUG] [Thread-132056] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:51:55.938 [DEBUG] [Thread-132056] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:51:55.938 [DEBUG] [Thread-132056] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:51:55.938 [DEBUG] [Thread-132056] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:51:55.938 [DEBUG] [Thread-132056] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:51:55.938 [DEBUG] [Thread-132056] [transport.py] [_log()] client lang: <none>
2025-12-31T17:51:55.938 [DEBUG] [Thread-132056] [transport.py] [_log()] server lang: <none>
2025-12-31T17:51:55.938 [DEBUG] [Thread-132056] [transport.py] [_log()] kex follows: False
2025-12-31T17:51:55.938 [DEBUG] [Thread-132056] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:51:55.939 [DEBUG] [Thread-132056] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:51:55.939 [DEBUG] [Thread-132056] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:51:55.939 [DEBUG] [Thread-132056] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:51:55.939 [DEBUG] [Thread-132056] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:51:55.939 [DEBUG] [Thread-132056] [transport.py] [_log()] Compression: none
2025-12-31T17:51:55.939 [DEBUG] [Thread-132056] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:51:55.956 [DEBUG] [Thread-132056] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:51:55.957 [DEBUG] [Thread-132056] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:51:55.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T17:51:55.958 [DEBUG] [Thread-132056] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T17:51:55.958 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:51:55.960 [DEBUG] [Thread-132056] [transport.py] [_log()] userauth is OK
2025-12-31T17:51:55.960 [DEBUG] [Thread-132056] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:51:55.960 [DEBUG] [Thread-132056] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:51:55.960 [DEBUG] [Thread-132056] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T17:51:55.960 [DEBUG] [Thread-132056] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:51:55.999 [INFO] [Thread-132056] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:51:56.000 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:51:56.621 [DEBUG] [Thread-132056] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:51:56.621 [DEBUG] [Thread-132056] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:51:56.621 [DEBUG] [Thread-132056] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T17:51:56.662 [DEBUG] [Thread-132056] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:51:56.662 [DEBUG] [Thread-132056] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:51:56.665 [DEBUG] [Thread-132056] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:51:56.676 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:51:56.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T17:51:56.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T17:51:56.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T17:51:56.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:51:56.689 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T17:51:56.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:51:56.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:51:56.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T17:51:56.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.660557 -999.00  +23.70  26.52     25   +2.90 1 2 1 1 1   887    0 17.96 -90.00 ----- 28.0 26.5 278.8 36.5 26.0 -16.5 26.1 -15.2 25.9 -16.3 26.2 -16.1
2025-12-31T17:51:56.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T17:51:56.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T17:51:56.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.660557
2025-12-31T17:51:56.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T17:51:56.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T17:51:56.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T17:51:56.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T17:51:56.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T17:51:56.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T17:51:30', tmtdew=24.49, humidity=19.6, cloud=0.0, wind=29.41, temperature=24.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T15:51:12.125', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T17:51:56.692 [DEBUG] [Thread-132056] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:51:56.775 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T17:51:56.787 [DEBUG] [Thread-132059] [transport.py] [_log()] starting thread (client mode): 0xb9593040
2025-12-31T17:51:56.788 [DEBUG] [Thread-132059] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:51:56.802 [DEBUG] [Thread-132059] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T17:51:56.802 [INFO] [Thread-132059] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T17:51:56.810 [DEBUG] [Thread-132059] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:51:56.810 [DEBUG] [Thread-132059] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T17:51:56.810 [DEBUG] [Thread-132059] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:51:56.810 [DEBUG] [Thread-132059] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:51:56.811 [DEBUG] [Thread-132059] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:51:56.811 [DEBUG] [Thread-132059] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:51:56.811 [DEBUG] [Thread-132059] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:51:56.811 [DEBUG] [Thread-132059] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:51:56.811 [DEBUG] [Thread-132059] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:51:56.811 [DEBUG] [Thread-132059] [transport.py] [_log()] client lang: <none>
2025-12-31T17:51:56.811 [DEBUG] [Thread-132059] [transport.py] [_log()] server lang: <none>
2025-12-31T17:51:56.811 [DEBUG] [Thread-132059] [transport.py] [_log()] kex follows: False
2025-12-31T17:51:56.811 [DEBUG] [Thread-132059] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:51:56.811 [DEBUG] [Thread-132059] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:51:56.811 [DEBUG] [Thread-132059] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:51:56.811 [DEBUG] [Thread-132059] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:51:56.811 [DEBUG] [Thread-132059] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:51:56.811 [DEBUG] [Thread-132059] [transport.py] [_log()] Compression: none
2025-12-31T17:51:56.811 [DEBUG] [Thread-132059] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:51:56.869 [DEBUG] [Thread-132059] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:51:56.870 [DEBUG] [Thread-132059] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:51:56.871 [DEBUG] [Thread-132059] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T17:51:56.871 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T17:51:56.872 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:51:56.925 [DEBUG] [Thread-132059] [transport.py] [_log()] userauth is OK
2025-12-31T17:51:56.925 [DEBUG] [Thread-132059] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:51:56.926 [DEBUG] [Thread-132059] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:51:56.926 [DEBUG] [Thread-132059] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T17:51:56.926 [DEBUG] [Thread-132059] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:51:56.944 [INFO] [Thread-132059] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:51:56.945 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T17:51:56.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:51:57.836 [DEBUG] [Thread-132059] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:51:57.836 [DEBUG] [Thread-132059] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:51:57.884 [DEBUG] [Thread-132059] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:51:57.884 [DEBUG] [Thread-132059] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:51:57.893 [DEBUG] [Thread-132059] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:51:57.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:51:57.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T17:51:57.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-12-31T17:51:57.921 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:51:57.922 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:51:57.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:51:57.930 [DEBUG] [Thread-132059] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:52:04.678 [DEBUG] [Thread-132061 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:52:19.730 [DEBUG] [Thread-132062 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:52:27.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T17:52:27.953 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T17:52:27.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T17:52:27.959 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:52:27.960 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:52:28.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 17, 52, 2), 24.43, 19.7, 0.0, 26.55, 24.09, 0, 0, 0, 2, 0, 0),)
2025-12-31T17:52:28.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 17:52:02
2025-12-31T17:52:28.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T17:52:28.862 [DEBUG] [Thread-132063 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:52:28.930 [DEBUG] [Thread-132064] [transport.py] [_log()] starting thread (client mode): 0xb9590a60
2025-12-31T17:52:28.930 [DEBUG] [Thread-132064] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:52:28.949 [DEBUG] [Thread-132064] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T17:52:28.949 [INFO] [Thread-132064] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T17:52:28.952 [DEBUG] [Thread-132064] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:52:28.952 [DEBUG] [Thread-132064] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T17:52:28.952 [DEBUG] [Thread-132064] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:52:28.952 [DEBUG] [Thread-132064] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:52:28.952 [DEBUG] [Thread-132064] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:52:28.952 [DEBUG] [Thread-132064] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:52:28.952 [DEBUG] [Thread-132064] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:52:28.952 [DEBUG] [Thread-132064] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:52:28.952 [DEBUG] [Thread-132064] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:52:28.952 [DEBUG] [Thread-132064] [transport.py] [_log()] client lang: <none>
2025-12-31T17:52:28.952 [DEBUG] [Thread-132064] [transport.py] [_log()] server lang: <none>
2025-12-31T17:52:28.952 [DEBUG] [Thread-132064] [transport.py] [_log()] kex follows: False
2025-12-31T17:52:28.952 [DEBUG] [Thread-132064] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:52:28.952 [DEBUG] [Thread-132064] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:52:28.952 [DEBUG] [Thread-132064] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:52:28.952 [DEBUG] [Thread-132064] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:52:28.952 [DEBUG] [Thread-132064] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:52:28.953 [DEBUG] [Thread-132064] [transport.py] [_log()] Compression: none
2025-12-31T17:52:28.953 [DEBUG] [Thread-132064] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:52:28.967 [DEBUG] [Thread-132064] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:52:28.967 [DEBUG] [Thread-132064] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:52:28.967 [DEBUG] [Thread-132064] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T17:52:28.967 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T17:52:28.967 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:52:28.968 [DEBUG] [Thread-132064] [transport.py] [_log()] userauth is OK
2025-12-31T17:52:28.968 [DEBUG] [Thread-132064] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:52:28.968 [DEBUG] [Thread-132064] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:52:28.968 [DEBUG] [Thread-132064] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T17:52:28.968 [DEBUG] [Thread-132064] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:52:28.983 [INFO] [Thread-132064] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:52:28.983 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:52:29.761 [DEBUG] [Thread-132064] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:52:29.761 [DEBUG] [Thread-132064] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:52:29.761 [DEBUG] [Thread-132064] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T17:52:29.802 [DEBUG] [Thread-132064] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:52:29.802 [DEBUG] [Thread-132064] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:52:29.805 [DEBUG] [Thread-132064] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:52:29.819 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:52:29.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T17:52:29.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T17:52:29.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T17:52:29.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:52:29.831 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T17:52:29.831 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:52:29.832 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:52:29.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T17:52:29.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.660904 -999.00  +23.50  32.22     25   +2.70 1 2 2 1 1   887    0 18.75 -92.85 ----- 30.0 32.2 276.3 38.0 26.0 -17.1 26.1 -16.1 25.9 -16.3 26.3 -16.3
2025-12-31T17:52:29.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T17:52:29.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T17:52:29.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.660904
2025-12-31T17:52:29.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T17:52:29.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T17:52:29.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T17:52:29.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T17:52:29.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T17:52:29.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T17:52:02', tmtdew=24.43, humidity=19.7, cloud=0.0, wind=26.55, temperature=24.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T15:51:42.106', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T17:52:29.834 [DEBUG] [Thread-132064] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:52:29.917 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T17:52:29.929 [DEBUG] [Thread-132067] [transport.py] [_log()] starting thread (client mode): 0xb6bbd060
2025-12-31T17:52:29.929 [DEBUG] [Thread-132067] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:52:29.944 [DEBUG] [Thread-132067] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T17:52:29.944 [INFO] [Thread-132067] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T17:52:29.951 [DEBUG] [Thread-132067] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:52:29.952 [DEBUG] [Thread-132067] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T17:52:29.952 [DEBUG] [Thread-132067] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:52:29.952 [DEBUG] [Thread-132067] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:52:29.952 [DEBUG] [Thread-132067] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:52:29.952 [DEBUG] [Thread-132067] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:52:29.952 [DEBUG] [Thread-132067] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:52:29.952 [DEBUG] [Thread-132067] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:52:29.953 [DEBUG] [Thread-132067] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:52:29.953 [DEBUG] [Thread-132067] [transport.py] [_log()] client lang: <none>
2025-12-31T17:52:29.953 [DEBUG] [Thread-132067] [transport.py] [_log()] server lang: <none>
2025-12-31T17:52:29.953 [DEBUG] [Thread-132067] [transport.py] [_log()] kex follows: False
2025-12-31T17:52:29.953 [DEBUG] [Thread-132067] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:52:29.953 [DEBUG] [Thread-132067] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:52:29.953 [DEBUG] [Thread-132067] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:52:29.953 [DEBUG] [Thread-132067] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:52:29.953 [DEBUG] [Thread-132067] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:52:29.954 [DEBUG] [Thread-132067] [transport.py] [_log()] Compression: none
2025-12-31T17:52:29.954 [DEBUG] [Thread-132067] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:52:30.013 [DEBUG] [Thread-132067] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:52:30.014 [DEBUG] [Thread-132067] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:52:30.015 [DEBUG] [Thread-132067] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T17:52:30.015 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T17:52:30.016 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:52:30.069 [DEBUG] [Thread-132067] [transport.py] [_log()] userauth is OK
2025-12-31T17:52:30.070 [DEBUG] [Thread-132067] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:52:30.070 [DEBUG] [Thread-132067] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:52:30.070 [DEBUG] [Thread-132067] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T17:52:30.070 [DEBUG] [Thread-132067] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:52:30.089 [INFO] [Thread-132067] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:52:30.090 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T17:52:30.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:52:30.917 [DEBUG] [Thread-132067] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:52:30.917 [DEBUG] [Thread-132067] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:52:30.965 [DEBUG] [Thread-132067] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:52:30.965 [DEBUG] [Thread-132067] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:52:30.974 [DEBUG] [Thread-132067] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:52:30.984 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:52:30.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T17:52:30.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T17:52:31.002 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:52:31.003 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:52:31.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:52:31.011 [DEBUG] [Thread-132067] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:52:34.763 [DEBUG] [Thread-132069 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:52:49.814 [DEBUG] [Thread-132070 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:53:01.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T17:53:01.021 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T17:53:01.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T17:53:01.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 17, 52, 34), 24.38, 20.03, 0.0, 26.68, 24.06, 0, 0, 0, 2, 0, 0),)
2025-12-31T17:53:01.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 17:52:34
2025-12-31T17:53:01.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T17:53:02.018 [DEBUG] [Thread-132071] [transport.py] [_log()] starting thread (client mode): 0xb6bbd150
2025-12-31T17:53:02.019 [DEBUG] [Thread-132071] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:53:02.039 [DEBUG] [Thread-132071] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T17:53:02.039 [INFO] [Thread-132071] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T17:53:02.042 [DEBUG] [Thread-132071] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:53:02.042 [DEBUG] [Thread-132071] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T17:53:02.042 [DEBUG] [Thread-132071] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:53:02.042 [DEBUG] [Thread-132071] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:53:02.042 [DEBUG] [Thread-132071] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:53:02.042 [DEBUG] [Thread-132071] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:53:02.042 [DEBUG] [Thread-132071] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:53:02.042 [DEBUG] [Thread-132071] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:53:02.042 [DEBUG] [Thread-132071] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:53:02.042 [DEBUG] [Thread-132071] [transport.py] [_log()] client lang: <none>
2025-12-31T17:53:02.042 [DEBUG] [Thread-132071] [transport.py] [_log()] server lang: <none>
2025-12-31T17:53:02.042 [DEBUG] [Thread-132071] [transport.py] [_log()] kex follows: False
2025-12-31T17:53:02.043 [DEBUG] [Thread-132071] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:53:02.043 [DEBUG] [Thread-132071] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:53:02.043 [DEBUG] [Thread-132071] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:53:02.043 [DEBUG] [Thread-132071] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:53:02.043 [DEBUG] [Thread-132071] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:53:02.043 [DEBUG] [Thread-132071] [transport.py] [_log()] Compression: none
2025-12-31T17:53:02.043 [DEBUG] [Thread-132071] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:53:02.061 [DEBUG] [Thread-132071] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:53:02.061 [DEBUG] [Thread-132071] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:53:02.062 [DEBUG] [Thread-132071] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T17:53:02.062 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T17:53:02.063 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:53:02.064 [DEBUG] [Thread-132071] [transport.py] [_log()] userauth is OK
2025-12-31T17:53:02.064 [DEBUG] [Thread-132071] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:53:02.064 [DEBUG] [Thread-132071] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:53:02.064 [DEBUG] [Thread-132071] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T17:53:02.064 [DEBUG] [Thread-132071] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:53:02.082 [INFO] [Thread-132071] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:53:02.083 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:53:02.708 [DEBUG] [Thread-132071] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:53:02.709 [DEBUG] [Thread-132071] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:53:02.709 [DEBUG] [Thread-132071] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T17:53:02.749 [DEBUG] [Thread-132071] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:53:02.749 [DEBUG] [Thread-132071] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:53:02.753 [DEBUG] [Thread-132071] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:53:02.764 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:53:02.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T17:53:02.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T17:53:02.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T17:53:02.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:53:02.776 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T17:53:02.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:53:02.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:53:02.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T17:53:02.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.661251 -999.00  +23.30  27.22     26   +2.90 1 2 1 1 1   887    0 18.71 -85.05 ----- 31.3 27.2 285.8 40.6 26.0 -17.1 26.2 -16.3 26.1 -17.0 26.4 -16.7
2025-12-31T17:53:02.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T17:53:02.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T17:53:02.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.661251
2025-12-31T17:53:02.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T17:53:02.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T17:53:02.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T17:53:02.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T17:53:02.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T17:53:02.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T17:52:34', tmtdew=24.38, humidity=20.03, cloud=0.0, wind=26.68, temperature=24.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T15:52:12.086', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T17:53:02.779 [DEBUG] [Thread-132071] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:53:02.873 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T17:53:02.887 [DEBUG] [Thread-132074] [transport.py] [_log()] starting thread (client mode): 0xb95917e0
2025-12-31T17:53:02.887 [DEBUG] [Thread-132074] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:53:02.902 [DEBUG] [Thread-132074] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T17:53:02.902 [INFO] [Thread-132074] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T17:53:02.909 [DEBUG] [Thread-132074] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:53:02.909 [DEBUG] [Thread-132074] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T17:53:02.909 [DEBUG] [Thread-132074] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:53:02.910 [DEBUG] [Thread-132074] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:53:02.910 [DEBUG] [Thread-132074] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:53:02.910 [DEBUG] [Thread-132074] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:53:02.910 [DEBUG] [Thread-132074] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:53:02.910 [DEBUG] [Thread-132074] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:53:02.910 [DEBUG] [Thread-132074] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:53:02.910 [DEBUG] [Thread-132074] [transport.py] [_log()] client lang: <none>
2025-12-31T17:53:02.910 [DEBUG] [Thread-132074] [transport.py] [_log()] server lang: <none>
2025-12-31T17:53:02.910 [DEBUG] [Thread-132074] [transport.py] [_log()] kex follows: False
2025-12-31T17:53:02.910 [DEBUG] [Thread-132074] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:53:02.910 [DEBUG] [Thread-132074] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:53:02.910 [DEBUG] [Thread-132074] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:53:02.910 [DEBUG] [Thread-132074] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:53:02.910 [DEBUG] [Thread-132074] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:53:02.910 [DEBUG] [Thread-132074] [transport.py] [_log()] Compression: none
2025-12-31T17:53:02.910 [DEBUG] [Thread-132074] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:53:02.969 [DEBUG] [Thread-132074] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:53:02.970 [DEBUG] [Thread-132074] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:53:02.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T17:53:02.971 [DEBUG] [Thread-132074] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T17:53:02.972 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:53:03.025 [DEBUG] [Thread-132074] [transport.py] [_log()] userauth is OK
2025-12-31T17:53:03.025 [DEBUG] [Thread-132074] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:53:03.025 [DEBUG] [Thread-132074] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:53:03.025 [DEBUG] [Thread-132074] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T17:53:03.026 [DEBUG] [Thread-132074] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:53:03.044 [INFO] [Thread-132074] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:53:03.044 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T17:53:03.045 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:53:03.893 [DEBUG] [Thread-132074] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:53:03.893 [DEBUG] [Thread-132074] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:53:03.941 [DEBUG] [Thread-132074] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:53:03.941 [DEBUG] [Thread-132074] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:53:03.950 [DEBUG] [Thread-132074] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:53:03.959 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:53:03.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T17:53:03.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T17:53:03.978 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:53:03.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:53:03.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:53:03.987 [DEBUG] [Thread-132074] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:53:04.849 [DEBUG] [Thread-132076 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:53:19.909 [DEBUG] [Thread-132077 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:53:28.099 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:53:28.100 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:53:28.909 [DEBUG] [Thread-132078 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:53:34.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T17:53:34.010 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T17:53:34.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T17:53:34.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 17, 53, 6), 24.58, 19.8, 0.0, 25.41, 24.26, 0, 0, 0, 2, 0, 0),)
2025-12-31T17:53:34.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 17:53:06
2025-12-31T17:53:34.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T17:53:34.942 [DEBUG] [Thread-132079 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:53:34.998 [DEBUG] [Thread-132080] [transport.py] [_log()] starting thread (client mode): 0xb6bb9c00
2025-12-31T17:53:34.998 [DEBUG] [Thread-132080] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:53:35.017 [DEBUG] [Thread-132080] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T17:53:35.017 [INFO] [Thread-132080] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T17:53:35.020 [DEBUG] [Thread-132080] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:53:35.021 [DEBUG] [Thread-132080] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T17:53:35.021 [DEBUG] [Thread-132080] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:53:35.021 [DEBUG] [Thread-132080] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:53:35.021 [DEBUG] [Thread-132080] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:53:35.021 [DEBUG] [Thread-132080] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:53:35.021 [DEBUG] [Thread-132080] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:53:35.021 [DEBUG] [Thread-132080] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:53:35.021 [DEBUG] [Thread-132080] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:53:35.021 [DEBUG] [Thread-132080] [transport.py] [_log()] client lang: <none>
2025-12-31T17:53:35.021 [DEBUG] [Thread-132080] [transport.py] [_log()] server lang: <none>
2025-12-31T17:53:35.021 [DEBUG] [Thread-132080] [transport.py] [_log()] kex follows: False
2025-12-31T17:53:35.021 [DEBUG] [Thread-132080] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:53:35.021 [DEBUG] [Thread-132080] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:53:35.021 [DEBUG] [Thread-132080] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:53:35.021 [DEBUG] [Thread-132080] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:53:35.021 [DEBUG] [Thread-132080] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:53:35.021 [DEBUG] [Thread-132080] [transport.py] [_log()] Compression: none
2025-12-31T17:53:35.022 [DEBUG] [Thread-132080] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:53:35.037 [DEBUG] [Thread-132080] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:53:35.038 [DEBUG] [Thread-132080] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:53:35.039 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T17:53:35.039 [DEBUG] [Thread-132080] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T17:53:35.040 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:53:35.042 [DEBUG] [Thread-132080] [transport.py] [_log()] userauth is OK
2025-12-31T17:53:35.043 [DEBUG] [Thread-132080] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:53:35.043 [DEBUG] [Thread-132080] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:53:35.043 [DEBUG] [Thread-132080] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T17:53:35.043 [DEBUG] [Thread-132080] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:53:35.067 [INFO] [Thread-132080] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:53:35.067 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:53:35.845 [DEBUG] [Thread-132080] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:53:35.845 [DEBUG] [Thread-132080] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:53:35.845 [DEBUG] [Thread-132080] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T17:53:35.886 [DEBUG] [Thread-132080] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:53:35.886 [DEBUG] [Thread-132080] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:53:35.890 [DEBUG] [Thread-132080] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:53:35.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:53:35.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T17:53:35.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T17:53:35.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T17:53:35.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:53:35.909 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T17:53:35.909 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:53:35.909 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:53:35.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T17:53:35.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.661599 -999.00  +23.50  20.92     26   +2.80 1 2 1 1 1   887    0 18.57 -76.69 ----- 21.6 20.9 284.6 33.2 26.1 -16.8 26.2 -16.4 26.1 -16.9 26.7 -16.0
2025-12-31T17:53:35.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T17:53:35.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T17:53:35.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.661599
2025-12-31T17:53:35.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T17:53:35.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T17:53:35.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T17:53:35.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T17:53:35.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T17:53:35.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T17:53:06', tmtdew=24.58, humidity=19.8, cloud=0.0, wind=25.41, temperature=24.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T15:52:42.154', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T17:53:35.910 [DEBUG] [Thread-132080] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:53:35.994 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T17:53:36.006 [DEBUG] [Thread-132083] [transport.py] [_log()] starting thread (client mode): 0xb6bba320
2025-12-31T17:53:36.006 [DEBUG] [Thread-132083] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:53:36.020 [DEBUG] [Thread-132083] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T17:53:36.020 [INFO] [Thread-132083] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T17:53:36.028 [DEBUG] [Thread-132083] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:53:36.028 [DEBUG] [Thread-132083] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T17:53:36.028 [DEBUG] [Thread-132083] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:53:36.028 [DEBUG] [Thread-132083] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:53:36.028 [DEBUG] [Thread-132083] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:53:36.028 [DEBUG] [Thread-132083] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:53:36.028 [DEBUG] [Thread-132083] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:53:36.028 [DEBUG] [Thread-132083] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:53:36.029 [DEBUG] [Thread-132083] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:53:36.029 [DEBUG] [Thread-132083] [transport.py] [_log()] client lang: <none>
2025-12-31T17:53:36.029 [DEBUG] [Thread-132083] [transport.py] [_log()] server lang: <none>
2025-12-31T17:53:36.029 [DEBUG] [Thread-132083] [transport.py] [_log()] kex follows: False
2025-12-31T17:53:36.029 [DEBUG] [Thread-132083] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:53:36.029 [DEBUG] [Thread-132083] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:53:36.029 [DEBUG] [Thread-132083] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:53:36.029 [DEBUG] [Thread-132083] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:53:36.029 [DEBUG] [Thread-132083] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:53:36.029 [DEBUG] [Thread-132083] [transport.py] [_log()] Compression: none
2025-12-31T17:53:36.029 [DEBUG] [Thread-132083] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:53:36.084 [DEBUG] [Thread-132083] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:53:36.084 [DEBUG] [Thread-132083] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:53:36.085 [DEBUG] [Thread-132083] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T17:53:36.085 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T17:53:36.086 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:53:36.141 [DEBUG] [Thread-132083] [transport.py] [_log()] userauth is OK
2025-12-31T17:53:36.141 [DEBUG] [Thread-132083] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:53:36.141 [DEBUG] [Thread-132083] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:53:36.141 [DEBUG] [Thread-132083] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T17:53:36.141 [DEBUG] [Thread-132083] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:53:36.166 [INFO] [Thread-132083] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:53:36.167 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T17:53:36.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:53:36.975 [DEBUG] [Thread-132083] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:53:36.975 [DEBUG] [Thread-132083] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:53:37.026 [DEBUG] [Thread-132083] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:53:37.027 [DEBUG] [Thread-132083] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:53:37.036 [DEBUG] [Thread-132083] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:53:37.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:53:37.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T17:53:37.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T17:53:37.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:53:37.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:53:37.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:53:37.073 [DEBUG] [Thread-132083] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:53:49.978 [DEBUG] [Thread-132085 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:54:05.026 [DEBUG] [Thread-132086 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:54:07.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T17:54:07.095 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T17:54:07.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T17:54:07.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 17, 53, 38), 24.89, 19.09, 0.0, 23.71, 24.54, 0, 0, 0, 2, 0, 0),)
2025-12-31T17:54:07.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 17:53:38
2025-12-31T17:54:07.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T17:54:08.081 [DEBUG] [Thread-132087] [transport.py] [_log()] starting thread (client mode): 0xb6bbb220
2025-12-31T17:54:08.082 [DEBUG] [Thread-132087] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:54:08.100 [DEBUG] [Thread-132087] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T17:54:08.100 [INFO] [Thread-132087] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T17:54:08.103 [DEBUG] [Thread-132087] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:54:08.103 [DEBUG] [Thread-132087] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T17:54:08.103 [DEBUG] [Thread-132087] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:54:08.103 [DEBUG] [Thread-132087] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:54:08.103 [DEBUG] [Thread-132087] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:54:08.103 [DEBUG] [Thread-132087] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:54:08.103 [DEBUG] [Thread-132087] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:54:08.104 [DEBUG] [Thread-132087] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:54:08.104 [DEBUG] [Thread-132087] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:54:08.104 [DEBUG] [Thread-132087] [transport.py] [_log()] client lang: <none>
2025-12-31T17:54:08.104 [DEBUG] [Thread-132087] [transport.py] [_log()] server lang: <none>
2025-12-31T17:54:08.104 [DEBUG] [Thread-132087] [transport.py] [_log()] kex follows: False
2025-12-31T17:54:08.104 [DEBUG] [Thread-132087] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:54:08.104 [DEBUG] [Thread-132087] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:54:08.104 [DEBUG] [Thread-132087] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:54:08.104 [DEBUG] [Thread-132087] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:54:08.104 [DEBUG] [Thread-132087] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:54:08.104 [DEBUG] [Thread-132087] [transport.py] [_log()] Compression: none
2025-12-31T17:54:08.104 [DEBUG] [Thread-132087] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:54:08.111 [DEBUG] [Thread-132087] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:54:08.111 [DEBUG] [Thread-132087] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:54:08.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T17:54:08.111 [DEBUG] [Thread-132087] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T17:54:08.112 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:54:08.112 [DEBUG] [Thread-132087] [transport.py] [_log()] userauth is OK
2025-12-31T17:54:08.112 [DEBUG] [Thread-132087] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:54:08.112 [DEBUG] [Thread-132087] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:54:08.112 [DEBUG] [Thread-132087] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T17:54:08.112 [DEBUG] [Thread-132087] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:54:08.131 [INFO] [Thread-132087] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:54:08.131 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:54:08.790 [DEBUG] [Thread-132087] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:54:08.790 [DEBUG] [Thread-132087] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:54:08.790 [DEBUG] [Thread-132087] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T17:54:08.831 [DEBUG] [Thread-132087] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:54:08.831 [DEBUG] [Thread-132087] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:54:08.835 [DEBUG] [Thread-132087] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:54:08.849 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:54:08.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T17:54:08.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T17:54:08.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T17:54:08.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:54:08.866 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T17:54:08.866 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:54:08.866 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:54:08.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T17:54:08.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.661946 -999.00  +23.80  18.42     25   +3.00 1 2 1 1 1   887    0 18.71 -67.33 ----- 20.1 18.4 264.4 22.6 26.3 -17.2 26.4 -16.7 26.4 -16.5 26.9 -16.0
2025-12-31T17:54:08.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T17:54:08.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T17:54:08.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.661946
2025-12-31T17:54:08.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T17:54:08.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T17:54:08.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T17:54:08.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T17:54:08.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T17:54:08.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T17:53:38', tmtdew=24.89, humidity=19.09, cloud=0.0, wind=23.71, temperature=24.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T15:53:12.134', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T17:54:08.870 [DEBUG] [Thread-132087] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:54:08.952 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T17:54:08.966 [DEBUG] [Thread-132090] [transport.py] [_log()] starting thread (client mode): 0xb1747a00
2025-12-31T17:54:08.966 [DEBUG] [Thread-132090] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:54:08.980 [DEBUG] [Thread-132090] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T17:54:08.981 [INFO] [Thread-132090] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T17:54:08.988 [DEBUG] [Thread-132090] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:54:08.988 [DEBUG] [Thread-132090] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T17:54:08.989 [DEBUG] [Thread-132090] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:54:08.989 [DEBUG] [Thread-132090] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:54:08.989 [DEBUG] [Thread-132090] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:54:08.989 [DEBUG] [Thread-132090] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:54:08.989 [DEBUG] [Thread-132090] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:54:08.989 [DEBUG] [Thread-132090] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:54:08.989 [DEBUG] [Thread-132090] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:54:08.989 [DEBUG] [Thread-132090] [transport.py] [_log()] client lang: <none>
2025-12-31T17:54:08.989 [DEBUG] [Thread-132090] [transport.py] [_log()] server lang: <none>
2025-12-31T17:54:08.989 [DEBUG] [Thread-132090] [transport.py] [_log()] kex follows: False
2025-12-31T17:54:08.989 [DEBUG] [Thread-132090] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:54:08.989 [DEBUG] [Thread-132090] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:54:08.989 [DEBUG] [Thread-132090] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:54:08.989 [DEBUG] [Thread-132090] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:54:08.989 [DEBUG] [Thread-132090] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:54:08.989 [DEBUG] [Thread-132090] [transport.py] [_log()] Compression: none
2025-12-31T17:54:08.989 [DEBUG] [Thread-132090] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:54:09.048 [DEBUG] [Thread-132090] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:54:09.049 [DEBUG] [Thread-132090] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:54:09.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T17:54:09.050 [DEBUG] [Thread-132090] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T17:54:09.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:54:09.104 [DEBUG] [Thread-132090] [transport.py] [_log()] userauth is OK
2025-12-31T17:54:09.105 [DEBUG] [Thread-132090] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:54:09.105 [DEBUG] [Thread-132090] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:54:09.105 [DEBUG] [Thread-132090] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T17:54:09.105 [DEBUG] [Thread-132090] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:54:09.125 [INFO] [Thread-132090] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:54:09.126 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T17:54:09.127 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:54:09.913 [DEBUG] [Thread-132090] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:54:09.913 [DEBUG] [Thread-132090] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:54:09.960 [DEBUG] [Thread-132090] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:54:09.961 [DEBUG] [Thread-132090] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:54:09.969 [DEBUG] [Thread-132090] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:54:09.978 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:54:09.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T17:54:09.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T17:54:09.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:54:09.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:54:09.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:54:10.003 [DEBUG] [Thread-132090] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:54:20.058 [DEBUG] [Thread-132092 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:54:28.240 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:54:28.240 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:54:28.946 [DEBUG] [Thread-132093 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:54:35.109 [DEBUG] [Thread-132094 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:54:40.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T17:54:40.026 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T17:54:40.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T17:54:40.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 17, 54, 10), 24.8, 19.22, 0.0, 21.17, 24.59, 0, 0, 0, 2, 0, 0),)
2025-12-31T17:54:40.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 17:54:10
2025-12-31T17:54:40.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T17:54:41.017 [DEBUG] [Thread-132095] [transport.py] [_log()] starting thread (client mode): 0xb1746560
2025-12-31T17:54:41.017 [DEBUG] [Thread-132095] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:54:41.037 [DEBUG] [Thread-132095] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T17:54:41.037 [INFO] [Thread-132095] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T17:54:41.040 [DEBUG] [Thread-132095] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:54:41.040 [DEBUG] [Thread-132095] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T17:54:41.040 [DEBUG] [Thread-132095] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:54:41.040 [DEBUG] [Thread-132095] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:54:41.040 [DEBUG] [Thread-132095] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:54:41.040 [DEBUG] [Thread-132095] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:54:41.040 [DEBUG] [Thread-132095] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:54:41.040 [DEBUG] [Thread-132095] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:54:41.040 [DEBUG] [Thread-132095] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:54:41.040 [DEBUG] [Thread-132095] [transport.py] [_log()] client lang: <none>
2025-12-31T17:54:41.040 [DEBUG] [Thread-132095] [transport.py] [_log()] server lang: <none>
2025-12-31T17:54:41.040 [DEBUG] [Thread-132095] [transport.py] [_log()] kex follows: False
2025-12-31T17:54:41.040 [DEBUG] [Thread-132095] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:54:41.040 [DEBUG] [Thread-132095] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:54:41.041 [DEBUG] [Thread-132095] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:54:41.041 [DEBUG] [Thread-132095] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:54:41.041 [DEBUG] [Thread-132095] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:54:41.041 [DEBUG] [Thread-132095] [transport.py] [_log()] Compression: none
2025-12-31T17:54:41.041 [DEBUG] [Thread-132095] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:54:41.055 [DEBUG] [Thread-132095] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:54:41.055 [DEBUG] [Thread-132095] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:54:41.056 [DEBUG] [Thread-132095] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T17:54:41.056 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T17:54:41.056 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:54:41.056 [DEBUG] [Thread-132095] [transport.py] [_log()] userauth is OK
2025-12-31T17:54:41.056 [DEBUG] [Thread-132095] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:54:41.056 [DEBUG] [Thread-132095] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:54:41.056 [DEBUG] [Thread-132095] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T17:54:41.056 [DEBUG] [Thread-132095] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:54:41.067 [INFO] [Thread-132095] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:54:41.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:54:41.865 [DEBUG] [Thread-132095] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:54:41.865 [DEBUG] [Thread-132095] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:54:41.866 [DEBUG] [Thread-132095] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T17:54:41.906 [DEBUG] [Thread-132095] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:54:41.907 [DEBUG] [Thread-132095] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:54:41.909 [DEBUG] [Thread-132095] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:54:41.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:54:41.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T17:54:41.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T17:54:41.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T17:54:41.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:54:41.929 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T17:54:41.929 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:54:41.929 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:54:41.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T17:54:41.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.662293 -999.00  +24.00  21.54     25   +3.00 1 2 1 1 1   887    0 18.92 -64.25 ----- 22.0 21.5 272.2 29.4 26.4 -17.3 26.6 -16.9 26.6 -18.2 27.1 -16.5
2025-12-31T17:54:41.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T17:54:41.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T17:54:41.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.662293
2025-12-31T17:54:41.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T17:54:41.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T17:54:41.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T17:54:41.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T17:54:41.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T17:54:41.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T17:54:10', tmtdew=24.8, humidity=19.22, cloud=0.0, wind=21.17, temperature=24.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T15:53:42.115', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T17:54:41.930 [DEBUG] [Thread-132095] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:54:42.004 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T17:54:42.016 [DEBUG] [Thread-132098] [transport.py] [_log()] starting thread (client mode): 0xb6bbe1a0
2025-12-31T17:54:42.016 [DEBUG] [Thread-132098] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:54:42.031 [DEBUG] [Thread-132098] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T17:54:42.031 [INFO] [Thread-132098] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T17:54:42.038 [DEBUG] [Thread-132098] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:54:42.038 [DEBUG] [Thread-132098] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T17:54:42.038 [DEBUG] [Thread-132098] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:54:42.038 [DEBUG] [Thread-132098] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:54:42.038 [DEBUG] [Thread-132098] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:54:42.038 [DEBUG] [Thread-132098] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:54:42.038 [DEBUG] [Thread-132098] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:54:42.038 [DEBUG] [Thread-132098] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:54:42.038 [DEBUG] [Thread-132098] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:54:42.038 [DEBUG] [Thread-132098] [transport.py] [_log()] client lang: <none>
2025-12-31T17:54:42.038 [DEBUG] [Thread-132098] [transport.py] [_log()] server lang: <none>
2025-12-31T17:54:42.038 [DEBUG] [Thread-132098] [transport.py] [_log()] kex follows: False
2025-12-31T17:54:42.038 [DEBUG] [Thread-132098] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:54:42.038 [DEBUG] [Thread-132098] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:54:42.038 [DEBUG] [Thread-132098] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:54:42.038 [DEBUG] [Thread-132098] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:54:42.038 [DEBUG] [Thread-132098] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:54:42.038 [DEBUG] [Thread-132098] [transport.py] [_log()] Compression: none
2025-12-31T17:54:42.038 [DEBUG] [Thread-132098] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:54:42.094 [DEBUG] [Thread-132098] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:54:42.095 [DEBUG] [Thread-132098] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:54:42.095 [DEBUG] [Thread-132098] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T17:54:42.095 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T17:54:42.095 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:54:42.152 [DEBUG] [Thread-132098] [transport.py] [_log()] userauth is OK
2025-12-31T17:54:42.152 [DEBUG] [Thread-132098] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:54:42.152 [DEBUG] [Thread-132098] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:54:42.152 [DEBUG] [Thread-132098] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T17:54:42.152 [DEBUG] [Thread-132098] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:54:42.166 [INFO] [Thread-132098] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:54:42.167 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T17:54:42.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:54:43.015 [DEBUG] [Thread-132098] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:54:43.015 [DEBUG] [Thread-132098] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:54:43.063 [DEBUG] [Thread-132098] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:54:43.063 [DEBUG] [Thread-132098] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:54:43.071 [DEBUG] [Thread-132098] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:54:43.079 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:54:43.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T17:54:43.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T17:54:43.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:54:43.095 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:54:43.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:54:43.103 [DEBUG] [Thread-132098] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:54:50.145 [DEBUG] [Thread-132100 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:55:05.195 [DEBUG] [Thread-132101 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:55:13.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T17:55:13.120 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T17:55:13.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T17:55:13.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 17, 54, 42), 25.23, 18.75, 0.0, 23.61, 24.86, 0, 0, 0, 2, 0, 0),)
2025-12-31T17:55:13.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 17:54:42
2025-12-31T17:55:13.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T17:55:14.110 [DEBUG] [Thread-132102] [transport.py] [_log()] starting thread (client mode): 0xb6bbe4d0
2025-12-31T17:55:14.110 [DEBUG] [Thread-132102] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:55:14.130 [DEBUG] [Thread-132102] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T17:55:14.130 [INFO] [Thread-132102] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T17:55:14.134 [DEBUG] [Thread-132102] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:55:14.134 [DEBUG] [Thread-132102] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T17:55:14.134 [DEBUG] [Thread-132102] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:55:14.134 [DEBUG] [Thread-132102] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:55:14.134 [DEBUG] [Thread-132102] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:55:14.134 [DEBUG] [Thread-132102] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:55:14.134 [DEBUG] [Thread-132102] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:55:14.134 [DEBUG] [Thread-132102] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:55:14.134 [DEBUG] [Thread-132102] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:55:14.134 [DEBUG] [Thread-132102] [transport.py] [_log()] client lang: <none>
2025-12-31T17:55:14.134 [DEBUG] [Thread-132102] [transport.py] [_log()] server lang: <none>
2025-12-31T17:55:14.134 [DEBUG] [Thread-132102] [transport.py] [_log()] kex follows: False
2025-12-31T17:55:14.134 [DEBUG] [Thread-132102] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:55:14.134 [DEBUG] [Thread-132102] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:55:14.134 [DEBUG] [Thread-132102] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:55:14.134 [DEBUG] [Thread-132102] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:55:14.135 [DEBUG] [Thread-132102] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:55:14.135 [DEBUG] [Thread-132102] [transport.py] [_log()] Compression: none
2025-12-31T17:55:14.135 [DEBUG] [Thread-132102] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:55:14.143 [DEBUG] [Thread-132102] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:55:14.144 [DEBUG] [Thread-132102] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:55:14.144 [DEBUG] [Thread-132102] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T17:55:14.144 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T17:55:14.145 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:55:14.146 [DEBUG] [Thread-132102] [transport.py] [_log()] userauth is OK
2025-12-31T17:55:14.146 [DEBUG] [Thread-132102] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:55:14.146 [DEBUG] [Thread-132102] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:55:14.146 [DEBUG] [Thread-132102] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T17:55:14.146 [DEBUG] [Thread-132102] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:55:14.174 [INFO] [Thread-132102] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:55:14.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:55:15.504 [DEBUG] [Thread-132102] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:55:15.504 [DEBUG] [Thread-132102] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:55:15.504 [DEBUG] [Thread-132102] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T17:55:15.545 [DEBUG] [Thread-132102] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:55:15.545 [DEBUG] [Thread-132102] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:55:15.547 [DEBUG] [Thread-132102] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:55:15.560 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:55:15.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T17:55:15.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T17:55:15.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T17:55:15.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:55:15.577 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T17:55:15.577 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:55:15.577 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:55:15.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T17:55:15.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.662640 -999.00  +24.20  16.62     25   +3.00 1 2 1 1 1   887    0 18.91 -57.52 ----- 20.6 16.6 281.8 27.4 26.5 -17.9 26.6 -17.3 26.9 -17.4 27.2 -17.4
2025-12-31T17:55:15.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T17:55:15.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T17:55:15.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.662640
2025-12-31T17:55:15.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T17:55:15.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T17:55:15.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T17:55:15.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T17:55:15.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T17:55:15.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T17:54:42', tmtdew=25.23, humidity=18.75, cloud=0.0, wind=23.61, temperature=24.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T15:54:12.096', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T17:55:15.578 [DEBUG] [Thread-132102] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:55:15.653 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T17:55:15.667 [DEBUG] [Thread-132105] [transport.py] [_log()] starting thread (client mode): 0xb9592c20
2025-12-31T17:55:15.667 [DEBUG] [Thread-132105] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:55:15.682 [DEBUG] [Thread-132105] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T17:55:15.682 [INFO] [Thread-132105] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T17:55:15.690 [DEBUG] [Thread-132105] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:55:15.690 [DEBUG] [Thread-132105] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T17:55:15.690 [DEBUG] [Thread-132105] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:55:15.690 [DEBUG] [Thread-132105] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:55:15.690 [DEBUG] [Thread-132105] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:55:15.690 [DEBUG] [Thread-132105] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:55:15.690 [DEBUG] [Thread-132105] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:55:15.690 [DEBUG] [Thread-132105] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:55:15.690 [DEBUG] [Thread-132105] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:55:15.690 [DEBUG] [Thread-132105] [transport.py] [_log()] client lang: <none>
2025-12-31T17:55:15.690 [DEBUG] [Thread-132105] [transport.py] [_log()] server lang: <none>
2025-12-31T17:55:15.690 [DEBUG] [Thread-132105] [transport.py] [_log()] kex follows: False
2025-12-31T17:55:15.690 [DEBUG] [Thread-132105] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:55:15.690 [DEBUG] [Thread-132105] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:55:15.690 [DEBUG] [Thread-132105] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:55:15.690 [DEBUG] [Thread-132105] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:55:15.690 [DEBUG] [Thread-132105] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:55:15.690 [DEBUG] [Thread-132105] [transport.py] [_log()] Compression: none
2025-12-31T17:55:15.690 [DEBUG] [Thread-132105] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:55:15.752 [DEBUG] [Thread-132105] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:55:15.752 [DEBUG] [Thread-132105] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:55:15.752 [DEBUG] [Thread-132105] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T17:55:15.753 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T17:55:15.753 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:55:15.812 [DEBUG] [Thread-132105] [transport.py] [_log()] userauth is OK
2025-12-31T17:55:15.812 [DEBUG] [Thread-132105] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:55:15.812 [DEBUG] [Thread-132105] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:55:15.812 [DEBUG] [Thread-132105] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T17:55:15.812 [DEBUG] [Thread-132105] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:55:15.825 [INFO] [Thread-132105] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:55:15.825 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T17:55:15.825 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:55:16.654 [DEBUG] [Thread-132105] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:55:16.654 [DEBUG] [Thread-132105] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:55:16.702 [DEBUG] [Thread-132105] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:55:16.702 [DEBUG] [Thread-132105] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:55:16.711 [DEBUG] [Thread-132105] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:55:16.719 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:55:16.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-12-31T17:55:16.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-12-31T17:55:16.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:55:16.738 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:55:16.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:55:16.746 [DEBUG] [Thread-132105] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:55:20.227 [DEBUG] [Thread-132107 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:55:28.379 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:55:28.380 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:55:28.989 [DEBUG] [Thread-132108 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:55:35.268 [DEBUG] [Thread-132109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:55:46.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T17:55:46.746 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T17:55:46.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T17:55:47.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 17, 55, 14), 25.61, 18.27, 0.0, 32.15, 24.96, 0, 0, 0, 2, 0, 0),)
2025-12-31T17:55:47.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 17:55:14
2025-12-31T17:55:47.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T17:55:47.807 [DEBUG] [Thread-132110] [transport.py] [_log()] starting thread (client mode): 0xb1746bf0
2025-12-31T17:55:47.807 [DEBUG] [Thread-132110] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:55:47.827 [DEBUG] [Thread-132110] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T17:55:47.827 [INFO] [Thread-132110] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T17:55:47.830 [DEBUG] [Thread-132110] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:55:47.831 [DEBUG] [Thread-132110] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T17:55:47.831 [DEBUG] [Thread-132110] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:55:47.831 [DEBUG] [Thread-132110] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:55:47.831 [DEBUG] [Thread-132110] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:55:47.831 [DEBUG] [Thread-132110] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:55:47.831 [DEBUG] [Thread-132110] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:55:47.831 [DEBUG] [Thread-132110] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:55:47.831 [DEBUG] [Thread-132110] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:55:47.831 [DEBUG] [Thread-132110] [transport.py] [_log()] client lang: <none>
2025-12-31T17:55:47.831 [DEBUG] [Thread-132110] [transport.py] [_log()] server lang: <none>
2025-12-31T17:55:47.831 [DEBUG] [Thread-132110] [transport.py] [_log()] kex follows: False
2025-12-31T17:55:47.831 [DEBUG] [Thread-132110] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:55:47.831 [DEBUG] [Thread-132110] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:55:47.831 [DEBUG] [Thread-132110] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:55:47.831 [DEBUG] [Thread-132110] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:55:47.831 [DEBUG] [Thread-132110] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:55:47.831 [DEBUG] [Thread-132110] [transport.py] [_log()] Compression: none
2025-12-31T17:55:47.831 [DEBUG] [Thread-132110] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:55:47.847 [DEBUG] [Thread-132110] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:55:47.847 [DEBUG] [Thread-132110] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:55:47.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T17:55:47.847 [DEBUG] [Thread-132110] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T17:55:47.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:55:47.848 [DEBUG] [Thread-132110] [transport.py] [_log()] userauth is OK
2025-12-31T17:55:47.848 [DEBUG] [Thread-132110] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:55:47.848 [DEBUG] [Thread-132110] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:55:47.848 [DEBUG] [Thread-132110] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T17:55:47.848 [DEBUG] [Thread-132110] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:55:47.857 [INFO] [Thread-132110] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:55:47.857 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:55:48.498 [DEBUG] [Thread-132110] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:55:48.498 [DEBUG] [Thread-132110] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:55:48.498 [DEBUG] [Thread-132110] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T17:55:48.539 [DEBUG] [Thread-132110] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:55:48.539 [DEBUG] [Thread-132110] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:55:48.541 [DEBUG] [Thread-132110] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:55:48.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:55:48.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T17:55:48.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T17:55:48.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T17:55:48.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:55:48.558 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T17:55:48.558 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:55:48.558 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:55:48.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T17:55:48.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.663335 -999.00  +24.40  26.55     23   +2.30 1 2 1 1 1   887    0 19.75 -38.29 ----- 23.6 26.6 291.4 32.6 26.6 -20.4 26.9 -18.6 27.1 -18.1 27.5 -21.2
2025-12-31T17:55:48.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T17:55:48.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T17:55:48.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.663335
2025-12-31T17:55:48.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T17:55:48.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T17:55:48.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T17:55:48.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T17:55:48.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T17:55:48.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T17:55:14', tmtdew=25.61, humidity=18.27, cloud=0.0, wind=32.15, temperature=24.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T15:55:12.144', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T17:55:48.559 [DEBUG] [Thread-132110] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:55:48.632 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T17:55:48.641 [DEBUG] [Thread-132113] [transport.py] [_log()] starting thread (client mode): 0xb6bbd1e0
2025-12-31T17:55:48.641 [DEBUG] [Thread-132113] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:55:48.656 [DEBUG] [Thread-132113] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T17:55:48.656 [INFO] [Thread-132113] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T17:55:48.664 [DEBUG] [Thread-132113] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:55:48.664 [DEBUG] [Thread-132113] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T17:55:48.664 [DEBUG] [Thread-132113] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:55:48.664 [DEBUG] [Thread-132113] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:55:48.664 [DEBUG] [Thread-132113] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:55:48.664 [DEBUG] [Thread-132113] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:55:48.664 [DEBUG] [Thread-132113] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:55:48.664 [DEBUG] [Thread-132113] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:55:48.664 [DEBUG] [Thread-132113] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:55:48.664 [DEBUG] [Thread-132113] [transport.py] [_log()] client lang: <none>
2025-12-31T17:55:48.664 [DEBUG] [Thread-132113] [transport.py] [_log()] server lang: <none>
2025-12-31T17:55:48.664 [DEBUG] [Thread-132113] [transport.py] [_log()] kex follows: False
2025-12-31T17:55:48.664 [DEBUG] [Thread-132113] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:55:48.664 [DEBUG] [Thread-132113] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:55:48.664 [DEBUG] [Thread-132113] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:55:48.664 [DEBUG] [Thread-132113] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:55:48.664 [DEBUG] [Thread-132113] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:55:48.664 [DEBUG] [Thread-132113] [transport.py] [_log()] Compression: none
2025-12-31T17:55:48.664 [DEBUG] [Thread-132113] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:55:48.727 [DEBUG] [Thread-132113] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:55:48.728 [DEBUG] [Thread-132113] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:55:48.728 [DEBUG] [Thread-132113] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T17:55:48.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T17:55:48.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:55:48.783 [DEBUG] [Thread-132113] [transport.py] [_log()] userauth is OK
2025-12-31T17:55:48.784 [DEBUG] [Thread-132113] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:55:48.784 [DEBUG] [Thread-132113] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:55:48.784 [DEBUG] [Thread-132113] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T17:55:48.784 [DEBUG] [Thread-132113] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:55:48.802 [INFO] [Thread-132113] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:55:48.803 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T17:55:48.803 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:55:49.678 [DEBUG] [Thread-132113] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:55:49.678 [DEBUG] [Thread-132113] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:55:49.726 [DEBUG] [Thread-132113] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:55:49.726 [DEBUG] [Thread-132113] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:55:49.735 [DEBUG] [Thread-132113] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:55:49.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:55:49.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T17:55:49.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T17:55:49.763 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:55:49.764 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:55:49.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:55:49.772 [DEBUG] [Thread-132113] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:55:50.308 [DEBUG] [Thread-132115 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:56:05.364 [DEBUG] [Thread-132116 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:56:19.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T17:56:19.785 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T17:56:19.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T17:56:20.402 [DEBUG] [Thread-132117 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:56:20.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 17, 55, 46), 25.73, 18.22, 0.0, 27.42, 24.49, 0, 0, 0, 2, 0, 0),)
2025-12-31T17:56:20.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 17:55:46
2025-12-31T17:56:20.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T17:56:20.825 [DEBUG] [Thread-132118] [transport.py] [_log()] starting thread (client mode): 0xb9591210
2025-12-31T17:56:20.825 [DEBUG] [Thread-132118] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:56:20.838 [DEBUG] [Thread-132118] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T17:56:20.838 [INFO] [Thread-132118] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T17:56:20.842 [DEBUG] [Thread-132118] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:56:20.842 [DEBUG] [Thread-132118] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T17:56:20.842 [DEBUG] [Thread-132118] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:56:20.842 [DEBUG] [Thread-132118] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:56:20.842 [DEBUG] [Thread-132118] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:56:20.842 [DEBUG] [Thread-132118] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:56:20.842 [DEBUG] [Thread-132118] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:56:20.842 [DEBUG] [Thread-132118] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:56:20.842 [DEBUG] [Thread-132118] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:56:20.842 [DEBUG] [Thread-132118] [transport.py] [_log()] client lang: <none>
2025-12-31T17:56:20.842 [DEBUG] [Thread-132118] [transport.py] [_log()] server lang: <none>
2025-12-31T17:56:20.842 [DEBUG] [Thread-132118] [transport.py] [_log()] kex follows: False
2025-12-31T17:56:20.842 [DEBUG] [Thread-132118] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:56:20.842 [DEBUG] [Thread-132118] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:56:20.842 [DEBUG] [Thread-132118] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:56:20.842 [DEBUG] [Thread-132118] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:56:20.842 [DEBUG] [Thread-132118] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:56:20.842 [DEBUG] [Thread-132118] [transport.py] [_log()] Compression: none
2025-12-31T17:56:20.842 [DEBUG] [Thread-132118] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:56:20.856 [DEBUG] [Thread-132118] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:56:20.857 [DEBUG] [Thread-132118] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:56:20.857 [DEBUG] [Thread-132118] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T17:56:20.857 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T17:56:20.858 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:56:20.859 [DEBUG] [Thread-132118] [transport.py] [_log()] userauth is OK
2025-12-31T17:56:20.859 [DEBUG] [Thread-132118] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:56:20.859 [DEBUG] [Thread-132118] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:56:20.859 [DEBUG] [Thread-132118] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T17:56:20.859 [DEBUG] [Thread-132118] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:56:20.876 [INFO] [Thread-132118] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:56:20.877 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:56:21.637 [DEBUG] [Thread-132118] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:56:21.637 [DEBUG] [Thread-132118] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:56:21.637 [DEBUG] [Thread-132118] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T17:56:21.678 [DEBUG] [Thread-132118] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:56:21.678 [DEBUG] [Thread-132118] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:56:21.682 [DEBUG] [Thread-132118] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:56:21.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:56:21.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T17:56:21.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T17:56:21.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T17:56:21.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:56:21.705 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T17:56:21.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:56:21.705 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:56:21.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T17:56:21.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.663682 -999.00  +24.10  18.57     23   +2.20 1 2 1 1 1   887    0 19.79 -32.14 ----- 24.7 18.6 279.8 29.3 26.4 -20.3 26.7 -20.6 27.1 -20.8 27.2 -21.1
2025-12-31T17:56:21.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T17:56:21.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T17:56:21.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.663682
2025-12-31T17:56:21.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T17:56:21.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T17:56:21.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T17:56:21.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T17:56:21.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T17:56:21.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T17:55:46', tmtdew=25.73, humidity=18.22, cloud=0.0, wind=27.42, temperature=24.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T15:55:42.125', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T17:56:21.708 [DEBUG] [Thread-132118] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:56:21.790 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T17:56:21.802 [DEBUG] [Thread-132121] [transport.py] [_log()] starting thread (client mode): 0xb6b611b0
2025-12-31T17:56:21.803 [DEBUG] [Thread-132121] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:56:21.817 [DEBUG] [Thread-132121] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T17:56:21.817 [INFO] [Thread-132121] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T17:56:21.825 [DEBUG] [Thread-132121] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:56:21.825 [DEBUG] [Thread-132121] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T17:56:21.825 [DEBUG] [Thread-132121] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:56:21.825 [DEBUG] [Thread-132121] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:56:21.826 [DEBUG] [Thread-132121] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:56:21.826 [DEBUG] [Thread-132121] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:56:21.826 [DEBUG] [Thread-132121] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:56:21.826 [DEBUG] [Thread-132121] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:56:21.826 [DEBUG] [Thread-132121] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:56:21.826 [DEBUG] [Thread-132121] [transport.py] [_log()] client lang: <none>
2025-12-31T17:56:21.826 [DEBUG] [Thread-132121] [transport.py] [_log()] server lang: <none>
2025-12-31T17:56:21.826 [DEBUG] [Thread-132121] [transport.py] [_log()] kex follows: False
2025-12-31T17:56:21.826 [DEBUG] [Thread-132121] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:56:21.827 [DEBUG] [Thread-132121] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:56:21.827 [DEBUG] [Thread-132121] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:56:21.827 [DEBUG] [Thread-132121] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:56:21.827 [DEBUG] [Thread-132121] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:56:21.827 [DEBUG] [Thread-132121] [transport.py] [_log()] Compression: none
2025-12-31T17:56:21.827 [DEBUG] [Thread-132121] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:56:21.888 [DEBUG] [Thread-132121] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:56:21.889 [DEBUG] [Thread-132121] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:56:21.889 [DEBUG] [Thread-132121] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T17:56:21.889 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T17:56:21.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:56:21.944 [DEBUG] [Thread-132121] [transport.py] [_log()] userauth is OK
2025-12-31T17:56:21.944 [DEBUG] [Thread-132121] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:56:21.944 [DEBUG] [Thread-132121] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:56:21.944 [DEBUG] [Thread-132121] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T17:56:21.944 [DEBUG] [Thread-132121] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:56:21.969 [INFO] [Thread-132121] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:56:21.970 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T17:56:21.970 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:56:22.754 [DEBUG] [Thread-132121] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:56:22.754 [DEBUG] [Thread-132121] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:56:22.802 [DEBUG] [Thread-132121] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:56:22.802 [DEBUG] [Thread-132121] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:56:22.811 [DEBUG] [Thread-132121] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:56:22.821 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:56:22.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T17:56:22.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T17:56:22.839 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:56:22.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:56:22.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:56:22.848 [DEBUG] [Thread-132121] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:56:28.529 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:56:28.531 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:56:29.034 [DEBUG] [Thread-132123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:56:35.437 [DEBUG] [Thread-132124 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:56:50.486 [DEBUG] [Thread-132125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:56:52.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T17:56:52.865 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T17:56: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-12-31T17:56:53.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 17, 56, 18), 25.7, 18.26, 0.0, 26.87, 24.48, 0, 0, 0, 2, 0, 0),)
2025-12-31T17:56:53.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 17:56:18
2025-12-31T17:56:53.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T17:56:53.861 [DEBUG] [Thread-132126] [transport.py] [_log()] starting thread (client mode): 0xb9559120
2025-12-31T17:56:53.861 [DEBUG] [Thread-132126] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:56:53.881 [DEBUG] [Thread-132126] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T17:56:53.881 [INFO] [Thread-132126] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T17:56:53.885 [DEBUG] [Thread-132126] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:56:53.885 [DEBUG] [Thread-132126] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T17:56:53.885 [DEBUG] [Thread-132126] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:56:53.885 [DEBUG] [Thread-132126] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:56:53.885 [DEBUG] [Thread-132126] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:56:53.885 [DEBUG] [Thread-132126] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:56:53.885 [DEBUG] [Thread-132126] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:56:53.885 [DEBUG] [Thread-132126] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:56:53.885 [DEBUG] [Thread-132126] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:56:53.886 [DEBUG] [Thread-132126] [transport.py] [_log()] client lang: <none>
2025-12-31T17:56:53.886 [DEBUG] [Thread-132126] [transport.py] [_log()] server lang: <none>
2025-12-31T17:56:53.886 [DEBUG] [Thread-132126] [transport.py] [_log()] kex follows: False
2025-12-31T17:56:53.886 [DEBUG] [Thread-132126] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:56:53.886 [DEBUG] [Thread-132126] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:56:53.886 [DEBUG] [Thread-132126] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:56:53.886 [DEBUG] [Thread-132126] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:56:53.886 [DEBUG] [Thread-132126] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:56:53.886 [DEBUG] [Thread-132126] [transport.py] [_log()] Compression: none
2025-12-31T17:56:53.886 [DEBUG] [Thread-132126] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:56:53.905 [DEBUG] [Thread-132126] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:56:53.906 [DEBUG] [Thread-132126] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:56:53.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T17:56:53.907 [DEBUG] [Thread-132126] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T17:56:53.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:56:53.909 [DEBUG] [Thread-132126] [transport.py] [_log()] userauth is OK
2025-12-31T17:56:53.909 [DEBUG] [Thread-132126] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:56:53.909 [DEBUG] [Thread-132126] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:56:53.910 [DEBUG] [Thread-132126] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T17:56:53.910 [DEBUG] [Thread-132126] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:56:53.932 [INFO] [Thread-132126] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:56:53.933 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:56:54.568 [DEBUG] [Thread-132126] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:56:54.568 [DEBUG] [Thread-132126] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:56:54.568 [DEBUG] [Thread-132126] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T17:56:54.609 [DEBUG] [Thread-132126] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:56:54.609 [DEBUG] [Thread-132126] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:56:54.613 [DEBUG] [Thread-132126] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:56:54.624 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:56:54.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T17:56:54.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T17:56:54.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T17:56:54.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:56:54.637 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T17:56:54.637 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:56:54.637 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:56:54.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T17:56:54.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.664029 -999.00  +23.90  17.96     24   +2.10 1 2 1 1 1   887    0 20.61 -20.50 ----- 19.6 18.0 298.0 24.8 26.5 -20.5 26.6 -20.1 26.7 -20.9 27.2 -20.5
2025-12-31T17:56:54.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T17:56:54.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T17:56:54.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.664029
2025-12-31T17:56:54.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T17:56:54.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T17:56:54.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T17:56:54.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T17:56:54.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T17:56:54.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T17:56:18', tmtdew=25.7, humidity=18.26, cloud=0.0, wind=26.87, temperature=24.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T15:56:12.106', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T17:56:54.640 [DEBUG] [Thread-132126] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:56:54.721 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T17:56:54.733 [DEBUG] [Thread-132129] [transport.py] [_log()] starting thread (client mode): 0xb6bba110
2025-12-31T17:56:54.733 [DEBUG] [Thread-132129] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:56:54.748 [DEBUG] [Thread-132129] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T17:56:54.748 [INFO] [Thread-132129] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T17:56:54.756 [DEBUG] [Thread-132129] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:56:54.756 [DEBUG] [Thread-132129] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T17:56:54.756 [DEBUG] [Thread-132129] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:56:54.756 [DEBUG] [Thread-132129] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:56:54.757 [DEBUG] [Thread-132129] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:56:54.757 [DEBUG] [Thread-132129] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:56:54.757 [DEBUG] [Thread-132129] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:56:54.757 [DEBUG] [Thread-132129] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:56:54.757 [DEBUG] [Thread-132129] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:56:54.757 [DEBUG] [Thread-132129] [transport.py] [_log()] client lang: <none>
2025-12-31T17:56:54.757 [DEBUG] [Thread-132129] [transport.py] [_log()] server lang: <none>
2025-12-31T17:56:54.757 [DEBUG] [Thread-132129] [transport.py] [_log()] kex follows: False
2025-12-31T17:56:54.757 [DEBUG] [Thread-132129] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:56:54.757 [DEBUG] [Thread-132129] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:56:54.757 [DEBUG] [Thread-132129] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:56:54.757 [DEBUG] [Thread-132129] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:56:54.757 [DEBUG] [Thread-132129] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:56:54.757 [DEBUG] [Thread-132129] [transport.py] [_log()] Compression: none
2025-12-31T17:56:54.757 [DEBUG] [Thread-132129] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:56:54.816 [DEBUG] [Thread-132129] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:56:54.816 [DEBUG] [Thread-132129] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:56:54.817 [DEBUG] [Thread-132129] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T17:56:54.817 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T17:56:54.818 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:56:54.872 [DEBUG] [Thread-132129] [transport.py] [_log()] userauth is OK
2025-12-31T17:56:54.872 [DEBUG] [Thread-132129] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:56:54.872 [DEBUG] [Thread-132129] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:56:54.873 [DEBUG] [Thread-132129] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T17:56:54.873 [DEBUG] [Thread-132129] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:56:54.891 [INFO] [Thread-132129] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:56:54.892 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T17:56:54.893 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:56:55.695 [DEBUG] [Thread-132129] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:56:55.696 [DEBUG] [Thread-132129] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:56:55.746 [DEBUG] [Thread-132129] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:56:55.746 [DEBUG] [Thread-132129] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:56:55.755 [DEBUG] [Thread-132129] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:56:55.763 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:56:55.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T17:56:55.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T17:56:55.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:56:55.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:56:55.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:56:55.788 [DEBUG] [Thread-132129] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:57:05.518 [DEBUG] [Thread-132131 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:57:20.565 [DEBUG] [Thread-132132 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:57:25.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T17:57:25.810 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T17:57:25.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T17:57:26.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 17, 57, 22), 25.16, 18.99, 0.0, 22.44, 23.93, 0, 0, 0, 2, 0, 0),)
2025-12-31T17:57:26.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 17:57:22
2025-12-31T17:57:26.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T17:57:26.791 [DEBUG] [Thread-132133] [transport.py] [_log()] starting thread (client mode): 0xb6bbbe50
2025-12-31T17:57:26.791 [DEBUG] [Thread-132133] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:57:26.811 [DEBUG] [Thread-132133] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T17:57:26.811 [INFO] [Thread-132133] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T17:57:26.813 [DEBUG] [Thread-132133] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:57:26.813 [DEBUG] [Thread-132133] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T17:57:26.813 [DEBUG] [Thread-132133] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:57:26.813 [DEBUG] [Thread-132133] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:57:26.813 [DEBUG] [Thread-132133] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:57:26.813 [DEBUG] [Thread-132133] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:57:26.813 [DEBUG] [Thread-132133] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:57:26.813 [DEBUG] [Thread-132133] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:57:26.813 [DEBUG] [Thread-132133] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:57:26.813 [DEBUG] [Thread-132133] [transport.py] [_log()] client lang: <none>
2025-12-31T17:57:26.813 [DEBUG] [Thread-132133] [transport.py] [_log()] server lang: <none>
2025-12-31T17:57:26.813 [DEBUG] [Thread-132133] [transport.py] [_log()] kex follows: False
2025-12-31T17:57:26.813 [DEBUG] [Thread-132133] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:57:26.814 [DEBUG] [Thread-132133] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:57:26.814 [DEBUG] [Thread-132133] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:57:26.814 [DEBUG] [Thread-132133] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:57:26.814 [DEBUG] [Thread-132133] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:57:26.814 [DEBUG] [Thread-132133] [transport.py] [_log()] Compression: none
2025-12-31T17:57:26.814 [DEBUG] [Thread-132133] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:57:26.825 [DEBUG] [Thread-132133] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:57:26.826 [DEBUG] [Thread-132133] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:57:26.827 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T17:57:26.828 [DEBUG] [Thread-132133] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T17:57:26.829 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:57:26.830 [DEBUG] [Thread-132133] [transport.py] [_log()] userauth is OK
2025-12-31T17:57:26.830 [DEBUG] [Thread-132133] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:57:26.830 [DEBUG] [Thread-132133] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:57:26.830 [DEBUG] [Thread-132133] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T17:57:26.830 [DEBUG] [Thread-132133] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:57:26.848 [INFO] [Thread-132133] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:57:26.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:57:27.610 [DEBUG] [Thread-132133] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:57:27.610 [DEBUG] [Thread-132133] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:57:27.611 [DEBUG] [Thread-132133] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T17:57:27.651 [DEBUG] [Thread-132133] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:57:27.651 [DEBUG] [Thread-132133] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:57:27.654 [DEBUG] [Thread-132133] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:57:27.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:57:27.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T17:57:27.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T17:57:27.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T17:57:27.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:57:27.675 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T17:57:27.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:57:27.675 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:57:27.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T17:57:27.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.664376 -999.00  +23.70  19.57     24   +2.20 1 2 1 1 1   887    0 20.50 -10.50 ----- 17.0 19.6 291.4 22.6 26.5 -20.5 26.6 -20.6 26.8 -21.8 27.1 -21.1
2025-12-31T17:57:27.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T17:57:27.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T17:57:27.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.664376
2025-12-31T17:57:27.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T17:57:27.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T17:57:27.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T17:57:27.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T17:57:27.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T17:57:27.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T17:57:22', tmtdew=25.16, humidity=18.99, cloud=0.0, wind=22.44, temperature=23.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T15:56:42.086', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T17:57:27.676 [DEBUG] [Thread-132133] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:57: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-12-31T17:57:27.763 [DEBUG] [Thread-132136] [transport.py] [_log()] starting thread (client mode): 0xb6bbfca0
2025-12-31T17:57:27.764 [DEBUG] [Thread-132136] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:57:27.783 [DEBUG] [Thread-132136] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T17:57:27.783 [INFO] [Thread-132136] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T17:57:27.791 [DEBUG] [Thread-132136] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:57:27.791 [DEBUG] [Thread-132136] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T17:57:27.791 [DEBUG] [Thread-132136] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:57:27.791 [DEBUG] [Thread-132136] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:57:27.792 [DEBUG] [Thread-132136] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:57:27.792 [DEBUG] [Thread-132136] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:57:27.792 [DEBUG] [Thread-132136] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:57:27.792 [DEBUG] [Thread-132136] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:57:27.792 [DEBUG] [Thread-132136] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:57:27.792 [DEBUG] [Thread-132136] [transport.py] [_log()] client lang: <none>
2025-12-31T17:57:27.792 [DEBUG] [Thread-132136] [transport.py] [_log()] server lang: <none>
2025-12-31T17:57:27.792 [DEBUG] [Thread-132136] [transport.py] [_log()] kex follows: False
2025-12-31T17:57:27.792 [DEBUG] [Thread-132136] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:57:27.792 [DEBUG] [Thread-132136] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:57:27.792 [DEBUG] [Thread-132136] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:57:27.792 [DEBUG] [Thread-132136] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:57:27.792 [DEBUG] [Thread-132136] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:57:27.792 [DEBUG] [Thread-132136] [transport.py] [_log()] Compression: none
2025-12-31T17:57:27.793 [DEBUG] [Thread-132136] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:57:27.852 [DEBUG] [Thread-132136] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:57:27.853 [DEBUG] [Thread-132136] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:57:27.854 [DEBUG] [Thread-132136] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T17:57:27.854 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T17:57:27.854 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:57:27.911 [DEBUG] [Thread-132136] [transport.py] [_log()] userauth is OK
2025-12-31T17:57:27.911 [DEBUG] [Thread-132136] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:57:27.912 [DEBUG] [Thread-132136] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:57:27.912 [DEBUG] [Thread-132136] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T17:57:27.912 [DEBUG] [Thread-132136] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:57:27.935 [INFO] [Thread-132136] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:57:27.935 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T17:57:27.936 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:57:28.672 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:57:28.673 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:57:28.842 [DEBUG] [Thread-132136] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:57:28.842 [DEBUG] [Thread-132136] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:57:28.890 [DEBUG] [Thread-132136] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:57:28.890 [DEBUG] [Thread-132136] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:57:28.899 [DEBUG] [Thread-132136] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:57:28.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:57:28.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T17:57:28.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T17:57:28.926 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:57:28.927 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:57:28.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:57:28.935 [DEBUG] [Thread-132136] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:57:29.062 [DEBUG] [Thread-132138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:57:35.597 [DEBUG] [Thread-132139 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:57:50.651 [DEBUG] [Thread-132140 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:57:58.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T17:57:58.957 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T17:57:58.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T17:57:59.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 17, 57, 54), 24.94, 19.07, 0.0, 17.8, 24.31, 0, 0, 0, 2, 0, 0),)
2025-12-31T17:57:59.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 17:57:54
2025-12-31T17:57:59.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T17:57:59.973 [DEBUG] [Thread-132141] [transport.py] [_log()] starting thread (client mode): 0xb9591c60
2025-12-31T17:57:59.973 [DEBUG] [Thread-132141] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:57:59.994 [DEBUG] [Thread-132141] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T17:57:59.994 [INFO] [Thread-132141] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T17:57:59.997 [DEBUG] [Thread-132141] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:57:59.997 [DEBUG] [Thread-132141] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T17:57:59.997 [DEBUG] [Thread-132141] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:57:59.998 [DEBUG] [Thread-132141] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:57:59.998 [DEBUG] [Thread-132141] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:57:59.998 [DEBUG] [Thread-132141] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:57:59.998 [DEBUG] [Thread-132141] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:57:59.998 [DEBUG] [Thread-132141] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:57:59.998 [DEBUG] [Thread-132141] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:57:59.998 [DEBUG] [Thread-132141] [transport.py] [_log()] client lang: <none>
2025-12-31T17:57:59.998 [DEBUG] [Thread-132141] [transport.py] [_log()] server lang: <none>
2025-12-31T17:57:59.998 [DEBUG] [Thread-132141] [transport.py] [_log()] kex follows: False
2025-12-31T17:57:59.998 [DEBUG] [Thread-132141] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:57:59.998 [DEBUG] [Thread-132141] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:57:59.998 [DEBUG] [Thread-132141] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:57:59.998 [DEBUG] [Thread-132141] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:57:59.998 [DEBUG] [Thread-132141] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:57:59.998 [DEBUG] [Thread-132141] [transport.py] [_log()] Compression: none
2025-12-31T17:57:59.998 [DEBUG] [Thread-132141] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:58:00.014 [DEBUG] [Thread-132141] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:58:00.014 [DEBUG] [Thread-132141] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:58:00.014 [DEBUG] [Thread-132141] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T17:58:00.015 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T17:58:00.015 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:58:00.015 [DEBUG] [Thread-132141] [transport.py] [_log()] userauth is OK
2025-12-31T17:58:00.015 [DEBUG] [Thread-132141] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:58:00.015 [DEBUG] [Thread-132141] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:58:00.016 [DEBUG] [Thread-132141] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T17:58:00.016 [DEBUG] [Thread-132141] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:58:00.026 [INFO] [Thread-132141] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:58:00.026 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:58:00.686 [DEBUG] [Thread-132141] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:58:00.686 [DEBUG] [Thread-132141] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:58:00.686 [DEBUG] [Thread-132141] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T17:58:00.728 [DEBUG] [Thread-132141] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:58:00.728 [DEBUG] [Thread-132141] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:58:00.730 [DEBUG] [Thread-132141] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:58:00.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:58:00.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T17:58:00.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T17:58:00.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T17:58:00.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:58:00.748 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T17:58:00.748 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:58:00.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:58:00.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T17:58:00.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.664723 -999.00  +23.90  17.39     24   +2.50 1 2 1 1 1   887    0 21.21 0.10 ----- 20.1 17.4 271.4 21.1 26.5 -20.6 26.6 -20.3 26.8 -20.4 27.1 -21.2
2025-12-31T17:58:00.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T17:58:00.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T17:58:00.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.664723
2025-12-31T17:58:00.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T17:58:00.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T17:58:00.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T17:58:00.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T17:58:00.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T17:58:00.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T17:57:54', tmtdew=24.94, humidity=19.07, cloud=0.0, wind=17.8, temperature=24.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T15:57:12.067', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T17:58:00.750 [DEBUG] [Thread-132141] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:58:00.822 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T17:58:00.834 [DEBUG] [Thread-132144] [transport.py] [_log()] starting thread (client mode): 0xb95d7b50
2025-12-31T17:58:00.834 [DEBUG] [Thread-132144] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:58:00.849 [DEBUG] [Thread-132144] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T17:58:00.849 [INFO] [Thread-132144] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T17:58:00.856 [DEBUG] [Thread-132144] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:58:00.856 [DEBUG] [Thread-132144] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T17:58:00.856 [DEBUG] [Thread-132144] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:58:00.856 [DEBUG] [Thread-132144] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:58:00.856 [DEBUG] [Thread-132144] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:58:00.856 [DEBUG] [Thread-132144] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:58:00.856 [DEBUG] [Thread-132144] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:58:00.856 [DEBUG] [Thread-132144] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:58:00.856 [DEBUG] [Thread-132144] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:58:00.856 [DEBUG] [Thread-132144] [transport.py] [_log()] client lang: <none>
2025-12-31T17:58:00.856 [DEBUG] [Thread-132144] [transport.py] [_log()] server lang: <none>
2025-12-31T17:58:00.856 [DEBUG] [Thread-132144] [transport.py] [_log()] kex follows: False
2025-12-31T17:58:00.856 [DEBUG] [Thread-132144] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:58:00.856 [DEBUG] [Thread-132144] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:58:00.856 [DEBUG] [Thread-132144] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:58:00.856 [DEBUG] [Thread-132144] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:58:00.856 [DEBUG] [Thread-132144] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:58:00.856 [DEBUG] [Thread-132144] [transport.py] [_log()] Compression: none
2025-12-31T17:58:00.856 [DEBUG] [Thread-132144] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:58:00.913 [DEBUG] [Thread-132144] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:58:00.913 [DEBUG] [Thread-132144] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:58:00.913 [DEBUG] [Thread-132144] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T17:58:00.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T17:58:00.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:58:00.970 [DEBUG] [Thread-132144] [transport.py] [_log()] userauth is OK
2025-12-31T17:58:00.971 [DEBUG] [Thread-132144] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:58:00.971 [DEBUG] [Thread-132144] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:58:00.971 [DEBUG] [Thread-132144] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T17:58:00.971 [DEBUG] [Thread-132144] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:58:00.987 [INFO] [Thread-132144] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:58:00.987 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T17:58:00.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:58:01.819 [DEBUG] [Thread-132144] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:58:01.819 [DEBUG] [Thread-132144] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:58:01.866 [DEBUG] [Thread-132144] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:58:01.866 [DEBUG] [Thread-132144] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:58:01.874 [DEBUG] [Thread-132144] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:58:01.882 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:58:01.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T17:58:01.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-12-31T17:58:01.898 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:58:01.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:58:01.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:58:01.906 [DEBUG] [Thread-132144] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:58:05.682 [DEBUG] [Thread-132146 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:58:20.739 [DEBUG] [Thread-132147 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:58:28.813 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:58:28.814 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:58:29.107 [DEBUG] [Thread-132148 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:58:31.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T17:58:31.925 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T17:58:31.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T17:58:32.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 17, 58, 27), 25.0, 19.01, 0.0, 20.84, 24.36, 0, 0, 0, 2, 0, 0),)
2025-12-31T17:58:32.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 17:58:27
2025-12-31T17:58:32.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T17:58:32.911 [DEBUG] [Thread-132149] [transport.py] [_log()] starting thread (client mode): 0xb955bc10
2025-12-31T17:58:32.911 [DEBUG] [Thread-132149] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:58:32.931 [DEBUG] [Thread-132149] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T17:58:32.931 [INFO] [Thread-132149] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T17:58:32.935 [DEBUG] [Thread-132149] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:58:32.935 [DEBUG] [Thread-132149] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T17:58:32.935 [DEBUG] [Thread-132149] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:58:32.935 [DEBUG] [Thread-132149] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:58:32.935 [DEBUG] [Thread-132149] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:58:32.935 [DEBUG] [Thread-132149] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:58:32.935 [DEBUG] [Thread-132149] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:58:32.935 [DEBUG] [Thread-132149] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:58:32.935 [DEBUG] [Thread-132149] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:58:32.935 [DEBUG] [Thread-132149] [transport.py] [_log()] client lang: <none>
2025-12-31T17:58:32.935 [DEBUG] [Thread-132149] [transport.py] [_log()] server lang: <none>
2025-12-31T17:58:32.935 [DEBUG] [Thread-132149] [transport.py] [_log()] kex follows: False
2025-12-31T17:58:32.935 [DEBUG] [Thread-132149] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:58:32.935 [DEBUG] [Thread-132149] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:58:32.935 [DEBUG] [Thread-132149] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:58:32.935 [DEBUG] [Thread-132149] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:58:32.935 [DEBUG] [Thread-132149] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:58:32.935 [DEBUG] [Thread-132149] [transport.py] [_log()] Compression: none
2025-12-31T17:58:32.935 [DEBUG] [Thread-132149] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:58:32.942 [DEBUG] [Thread-132149] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:58:32.942 [DEBUG] [Thread-132149] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:58:32.942 [DEBUG] [Thread-132149] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T17:58:32.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T17:58:32.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:58:32.984 [DEBUG] [Thread-132149] [transport.py] [_log()] userauth is OK
2025-12-31T17:58:32.985 [DEBUG] [Thread-132149] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:58:32.985 [DEBUG] [Thread-132149] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:58:32.985 [DEBUG] [Thread-132149] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T17:58:32.985 [DEBUG] [Thread-132149] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:58:33.016 [INFO] [Thread-132149] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:58:33.017 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:58:33.826 [DEBUG] [Thread-132149] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:58:33.827 [DEBUG] [Thread-132149] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:58:33.827 [DEBUG] [Thread-132149] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T17:58:33.868 [DEBUG] [Thread-132149] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:58:33.868 [DEBUG] [Thread-132149] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:58:33.871 [DEBUG] [Thread-132149] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:58:33.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:58:33.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T17:58:33.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T17:58:33.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T17:58:33.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:58:33.888 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T17:58:33.888 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:58:33.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:58:33.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T17:58:33.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.665071 -999.00  +24.10  23.90     24   +2.50 1 2 1 1 1   887    0 21.40 11.42 ----- 23.2 23.9 283.6 30.5 26.5 -20.6 26.6 -20.4 26.6 -21.3 27.1 -21.1
2025-12-31T17:58:33.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T17:58:33.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T17:58:33.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.665071
2025-12-31T17:58:33.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T17:58:33.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T17:58:33.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T17:58:33.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T17:58:33.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T17:58:33.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T17:58:27', tmtdew=25.0, humidity=19.01, cloud=0.0, wind=20.84, temperature=24.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T15:57:42.134', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T17:58:33.891 [DEBUG] [Thread-132149] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:58:33.974 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T17:58:33.986 [DEBUG] [Thread-132152] [transport.py] [_log()] starting thread (client mode): 0xb6bbdbd0
2025-12-31T17:58:33.986 [DEBUG] [Thread-132152] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:58:34.001 [DEBUG] [Thread-132152] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T17:58:34.001 [INFO] [Thread-132152] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T17:58:34.008 [DEBUG] [Thread-132152] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:58:34.008 [DEBUG] [Thread-132152] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T17:58:34.008 [DEBUG] [Thread-132152] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:58:34.008 [DEBUG] [Thread-132152] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:58:34.008 [DEBUG] [Thread-132152] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:58:34.008 [DEBUG] [Thread-132152] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:58:34.008 [DEBUG] [Thread-132152] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:58:34.009 [DEBUG] [Thread-132152] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:58:34.009 [DEBUG] [Thread-132152] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:58:34.009 [DEBUG] [Thread-132152] [transport.py] [_log()] client lang: <none>
2025-12-31T17:58:34.009 [DEBUG] [Thread-132152] [transport.py] [_log()] server lang: <none>
2025-12-31T17:58:34.009 [DEBUG] [Thread-132152] [transport.py] [_log()] kex follows: False
2025-12-31T17:58:34.009 [DEBUG] [Thread-132152] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:58:34.009 [DEBUG] [Thread-132152] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:58:34.009 [DEBUG] [Thread-132152] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:58:34.009 [DEBUG] [Thread-132152] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:58:34.009 [DEBUG] [Thread-132152] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:58:34.009 [DEBUG] [Thread-132152] [transport.py] [_log()] Compression: none
2025-12-31T17:58:34.009 [DEBUG] [Thread-132152] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:58:34.065 [DEBUG] [Thread-132152] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:58:34.065 [DEBUG] [Thread-132152] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:58:34.065 [DEBUG] [Thread-132152] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T17:58:34.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T17:58:34.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:58:34.126 [DEBUG] [Thread-132152] [transport.py] [_log()] userauth is OK
2025-12-31T17:58:34.126 [DEBUG] [Thread-132152] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:58:34.127 [DEBUG] [Thread-132152] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:58:34.127 [DEBUG] [Thread-132152] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T17:58:34.127 [DEBUG] [Thread-132152] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:58:34.151 [INFO] [Thread-132152] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:58:34.151 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T17:58:34.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:58:35.015 [DEBUG] [Thread-132152] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:58:35.016 [DEBUG] [Thread-132152] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:58:35.064 [DEBUG] [Thread-132152] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:58:35.064 [DEBUG] [Thread-132152] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:58:35.073 [DEBUG] [Thread-132152] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:58:35.082 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:58:35.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T17:58:35.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T17:58:35.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:58:35.105 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:58:35.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:58:35.115 [DEBUG] [Thread-132152] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:58:35.772 [DEBUG] [Thread-132154 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:58:50.816 [DEBUG] [Thread-132155 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:59:05.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T17:59:05.125 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T17:59:05.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T17:59:05.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 17, 58, 59), 25.1, 19.15, 0.0, 26.1, 24.41, 0, 0, 0, 2, 0, 0),)
2025-12-31T17:59:05.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 17:58:59
2025-12-31T17:59:05.851 [DEBUG] [Thread-132156 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:59:05.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T17:59:06.123 [DEBUG] [Thread-132157] [transport.py] [_log()] starting thread (client mode): 0xb9558d00
2025-12-31T17:59:06.123 [DEBUG] [Thread-132157] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:59:06.144 [DEBUG] [Thread-132157] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T17:59:06.144 [INFO] [Thread-132157] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T17:59:06.147 [DEBUG] [Thread-132157] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:59:06.147 [DEBUG] [Thread-132157] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T17:59:06.147 [DEBUG] [Thread-132157] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:59:06.147 [DEBUG] [Thread-132157] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:59:06.147 [DEBUG] [Thread-132157] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:59:06.147 [DEBUG] [Thread-132157] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:59:06.147 [DEBUG] [Thread-132157] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:59:06.147 [DEBUG] [Thread-132157] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:59:06.147 [DEBUG] [Thread-132157] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:59:06.147 [DEBUG] [Thread-132157] [transport.py] [_log()] client lang: <none>
2025-12-31T17:59:06.147 [DEBUG] [Thread-132157] [transport.py] [_log()] server lang: <none>
2025-12-31T17:59:06.147 [DEBUG] [Thread-132157] [transport.py] [_log()] kex follows: False
2025-12-31T17:59:06.147 [DEBUG] [Thread-132157] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:59:06.147 [DEBUG] [Thread-132157] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:59:06.147 [DEBUG] [Thread-132157] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:59:06.148 [DEBUG] [Thread-132157] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:59:06.148 [DEBUG] [Thread-132157] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:59:06.148 [DEBUG] [Thread-132157] [transport.py] [_log()] Compression: none
2025-12-31T17:59:06.148 [DEBUG] [Thread-132157] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:59:06.156 [DEBUG] [Thread-132157] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:59:06.156 [DEBUG] [Thread-132157] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:59:06.157 [DEBUG] [Thread-132157] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T17:59:06.157 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T17:59:06.157 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:59:06.158 [DEBUG] [Thread-132157] [transport.py] [_log()] userauth is OK
2025-12-31T17:59:06.158 [DEBUG] [Thread-132157] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:59:06.158 [DEBUG] [Thread-132157] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:59:06.158 [DEBUG] [Thread-132157] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T17:59:06.158 [DEBUG] [Thread-132157] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:59:06.178 [INFO] [Thread-132157] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:59:06.178 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:59:06.817 [DEBUG] [Thread-132157] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:59:06.817 [DEBUG] [Thread-132157] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:59:06.818 [DEBUG] [Thread-132157] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T17:59:06.858 [DEBUG] [Thread-132157] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:59:06.858 [DEBUG] [Thread-132157] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:59:06.862 [DEBUG] [Thread-132157] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:59:06.872 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:59:06.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T17:59:06.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T17:59:06.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T17:59:06.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:59:06.884 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T17:59:06.884 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:59:06.885 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:59:06.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T17:59:06.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.665418 -999.00  +24.20  15.11     23   +2.30 1 2 1 1 1   887    0 21.62 24.24 ----- 13.4 15.1 274.4 26.6 26.5 -21.2 26.7 -20.7 26.7 -20.1 26.9 -21.3
2025-12-31T17:59:06.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T17:59:06.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T17:59:06.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.665418
2025-12-31T17:59:06.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T17:59:06.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T17:59:06.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T17:59:06.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T17:59:06.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T17:59:06.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T17:58:59', tmtdew=25.1, humidity=19.15, cloud=0.0, wind=26.1, temperature=24.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T15:58:12.115', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T17:59:06.887 [DEBUG] [Thread-132157] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:59:06.971 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T17:59:06.983 [DEBUG] [Thread-132160] [transport.py] [_log()] starting thread (client mode): 0xb6bbebf0
2025-12-31T17:59:06.983 [DEBUG] [Thread-132160] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:59:06.997 [DEBUG] [Thread-132160] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T17:59:06.998 [INFO] [Thread-132160] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T17:59:07.005 [DEBUG] [Thread-132160] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:59:07.006 [DEBUG] [Thread-132160] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T17:59:07.006 [DEBUG] [Thread-132160] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:59:07.006 [DEBUG] [Thread-132160] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:59:07.006 [DEBUG] [Thread-132160] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:59:07.006 [DEBUG] [Thread-132160] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:59:07.006 [DEBUG] [Thread-132160] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:59:07.006 [DEBUG] [Thread-132160] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:59:07.006 [DEBUG] [Thread-132160] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:59:07.007 [DEBUG] [Thread-132160] [transport.py] [_log()] client lang: <none>
2025-12-31T17:59:07.007 [DEBUG] [Thread-132160] [transport.py] [_log()] server lang: <none>
2025-12-31T17:59:07.007 [DEBUG] [Thread-132160] [transport.py] [_log()] kex follows: False
2025-12-31T17:59:07.007 [DEBUG] [Thread-132160] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:59:07.007 [DEBUG] [Thread-132160] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:59:07.007 [DEBUG] [Thread-132160] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:59:07.007 [DEBUG] [Thread-132160] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:59:07.007 [DEBUG] [Thread-132160] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:59:07.008 [DEBUG] [Thread-132160] [transport.py] [_log()] Compression: none
2025-12-31T17:59:07.008 [DEBUG] [Thread-132160] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:59:07.064 [DEBUG] [Thread-132160] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:59:07.065 [DEBUG] [Thread-132160] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:59:07.066 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T17:59:07.067 [DEBUG] [Thread-132160] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T17:59:07.068 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:59:07.123 [DEBUG] [Thread-132160] [transport.py] [_log()] userauth is OK
2025-12-31T17:59:07.123 [DEBUG] [Thread-132160] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:59:07.124 [DEBUG] [Thread-132160] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:59:07.124 [DEBUG] [Thread-132160] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T17:59:07.124 [DEBUG] [Thread-132160] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:59:07.145 [INFO] [Thread-132160] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:59:07.145 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T17:59:07.146 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:59:07.961 [DEBUG] [Thread-132160] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:59:07.962 [DEBUG] [Thread-132160] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:59:08.010 [DEBUG] [Thread-132160] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:59:08.010 [DEBUG] [Thread-132160] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:59:08.020 [DEBUG] [Thread-132160] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:59:08.029 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:59: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-12-31T17:59: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-12-31T17:59:08.048 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:59:08.048 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:59:08.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:59:08.056 [DEBUG] [Thread-132160] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:59:20.879 [DEBUG] [Thread-132162 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:59:28.953 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:59:28.954 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:59:29.172 [DEBUG] [Thread-132163 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:59:35.939 [DEBUG] [Thread-132164 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T17:59:38.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T17:59:38.079 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T17:59: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-12-31T17:59:38.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 17, 59, 31), 25.02, 19.24, 0.0, 22.18, 24.33, 0, 0, 0, 2, 0, 0),)
2025-12-31T17:59:38.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 17:59:31
2025-12-31T17:59:38.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T17:59:39.068 [DEBUG] [Thread-132165] [transport.py] [_log()] starting thread (client mode): 0xb6b612a0
2025-12-31T17:59:39.068 [DEBUG] [Thread-132165] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:59:39.088 [DEBUG] [Thread-132165] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T17:59:39.088 [INFO] [Thread-132165] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T17:59:39.091 [DEBUG] [Thread-132165] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:59:39.091 [DEBUG] [Thread-132165] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T17:59:39.091 [DEBUG] [Thread-132165] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:59:39.091 [DEBUG] [Thread-132165] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:59:39.091 [DEBUG] [Thread-132165] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:59:39.091 [DEBUG] [Thread-132165] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:59:39.091 [DEBUG] [Thread-132165] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:59:39.091 [DEBUG] [Thread-132165] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:59:39.091 [DEBUG] [Thread-132165] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:59:39.091 [DEBUG] [Thread-132165] [transport.py] [_log()] client lang: <none>
2025-12-31T17:59:39.091 [DEBUG] [Thread-132165] [transport.py] [_log()] server lang: <none>
2025-12-31T17:59:39.091 [DEBUG] [Thread-132165] [transport.py] [_log()] kex follows: False
2025-12-31T17:59:39.091 [DEBUG] [Thread-132165] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:59:39.091 [DEBUG] [Thread-132165] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:59:39.091 [DEBUG] [Thread-132165] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:59:39.091 [DEBUG] [Thread-132165] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:59:39.091 [DEBUG] [Thread-132165] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:59:39.091 [DEBUG] [Thread-132165] [transport.py] [_log()] Compression: none
2025-12-31T17:59:39.091 [DEBUG] [Thread-132165] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:59:39.110 [DEBUG] [Thread-132165] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:59:39.111 [DEBUG] [Thread-132165] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:59:39.112 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T17:59:39.112 [DEBUG] [Thread-132165] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T17:59:39.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:59:39.114 [DEBUG] [Thread-132165] [transport.py] [_log()] userauth is OK
2025-12-31T17:59:39.115 [DEBUG] [Thread-132165] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:59:39.115 [DEBUG] [Thread-132165] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:59:39.115 [DEBUG] [Thread-132165] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T17:59:39.115 [DEBUG] [Thread-132165] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:59:39.139 [INFO] [Thread-132165] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:59:39.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:59:39.883 [DEBUG] [Thread-132165] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:59:39.884 [DEBUG] [Thread-132165] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:59:39.884 [DEBUG] [Thread-132165] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T17:59:39.925 [DEBUG] [Thread-132165] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:59:39.925 [DEBUG] [Thread-132165] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:59:39.929 [DEBUG] [Thread-132165] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:59:39.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:59:39.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T17:59:39.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T17:59:39.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T17:59:39.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:59:39.955 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T17:59:39.955 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:59:39.955 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:59:39.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T17:59:39.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.665765 -999.00  +24.30  23.59     24   +2.70 1 2 1 1 1   887    0 22.04 39.88 ----- 18.4 23.6 277.4 28.8 26.5 -21.1 26.6 -21.1 26.6 -20.9 26.9 -21.0
2025-12-31T17:59:39.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T17:59:39.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T17:59:39.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.665765
2025-12-31T17:59:39.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T17:59:39.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T17:59:39.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T17:59:39.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T17:59:39.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T17:59:39.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T17:59:31', tmtdew=25.02, humidity=19.24, cloud=0.0, wind=22.18, temperature=24.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T15:58:42.096', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T17:59:39.958 [DEBUG] [Thread-132165] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:59:40.041 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T17:59:40.053 [DEBUG] [Thread-132168] [transport.py] [_log()] starting thread (client mode): 0xb95d4940
2025-12-31T17:59:40.053 [DEBUG] [Thread-132168] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T17:59:40.067 [DEBUG] [Thread-132168] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T17:59:40.067 [INFO] [Thread-132168] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T17:59:40.074 [DEBUG] [Thread-132168] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T17:59:40.075 [DEBUG] [Thread-132168] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T17:59:40.075 [DEBUG] [Thread-132168] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T17:59:40.075 [DEBUG] [Thread-132168] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:59:40.075 [DEBUG] [Thread-132168] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T17:59:40.075 [DEBUG] [Thread-132168] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:59:40.075 [DEBUG] [Thread-132168] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T17:59:40.075 [DEBUG] [Thread-132168] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T17:59:40.075 [DEBUG] [Thread-132168] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T17:59:40.075 [DEBUG] [Thread-132168] [transport.py] [_log()] client lang: <none>
2025-12-31T17:59:40.076 [DEBUG] [Thread-132168] [transport.py] [_log()] server lang: <none>
2025-12-31T17:59:40.076 [DEBUG] [Thread-132168] [transport.py] [_log()] kex follows: False
2025-12-31T17:59:40.076 [DEBUG] [Thread-132168] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T17:59:40.076 [DEBUG] [Thread-132168] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T17:59:40.076 [DEBUG] [Thread-132168] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T17:59:40.076 [DEBUG] [Thread-132168] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T17:59:40.076 [DEBUG] [Thread-132168] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T17:59:40.076 [DEBUG] [Thread-132168] [transport.py] [_log()] Compression: none
2025-12-31T17:59:40.077 [DEBUG] [Thread-132168] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T17:59:40.131 [DEBUG] [Thread-132168] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T17:59:40.132 [DEBUG] [Thread-132168] [transport.py] [_log()] Switch to new keys ...
2025-12-31T17:59:40.132 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T17:59:40.133 [DEBUG] [Thread-132168] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T17:59:40.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T17:59:40.188 [DEBUG] [Thread-132168] [transport.py] [_log()] userauth is OK
2025-12-31T17:59:40.189 [DEBUG] [Thread-132168] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T17:59:40.189 [DEBUG] [Thread-132168] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T17:59:40.189 [DEBUG] [Thread-132168] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T17:59:40.189 [DEBUG] [Thread-132168] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T17:59:40.208 [INFO] [Thread-132168] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T17:59:40.208 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T17:59:40.209 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T17:59:41.006 [DEBUG] [Thread-132168] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T17:59:41.006 [DEBUG] [Thread-132168] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T17:59:41.054 [DEBUG] [Thread-132168] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T17:59:41.054 [DEBUG] [Thread-132168] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T17:59:41.063 [DEBUG] [Thread-132168] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T17:59:41.072 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T17:59:41.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T17:59:41.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T17:59:41.091 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T17:59:41.092 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T17:59:41.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T17:59:41.100 [DEBUG] [Thread-132168] [transport.py] [_log()] EOF in transport thread
2025-12-31T17:59:50.978 [DEBUG] [Thread-132170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:00:06.034 [DEBUG] [Thread-132171 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:00:11.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T18:00:11.104 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T18:00:11.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T18:00:11.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 18, 0, 3), 25.01, 19.25, 0.0, 20.79, 24.35, 0, 0, 0, 2, 0, 0),)
2025-12-31T18:00:11.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 18:00:03
2025-12-31T18:00:11.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T18:00:12.096 [DEBUG] [Thread-132172] [transport.py] [_log()] starting thread (client mode): 0xb9579ff0
2025-12-31T18:00:12.096 [DEBUG] [Thread-132172] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:00:12.117 [DEBUG] [Thread-132172] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T18:00:12.117 [INFO] [Thread-132172] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T18:00:12.120 [DEBUG] [Thread-132172] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:00:12.120 [DEBUG] [Thread-132172] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T18:00:12.120 [DEBUG] [Thread-132172] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:00:12.120 [DEBUG] [Thread-132172] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:00:12.120 [DEBUG] [Thread-132172] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:00:12.120 [DEBUG] [Thread-132172] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:00:12.120 [DEBUG] [Thread-132172] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:00:12.120 [DEBUG] [Thread-132172] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:00:12.120 [DEBUG] [Thread-132172] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:00:12.120 [DEBUG] [Thread-132172] [transport.py] [_log()] client lang: <none>
2025-12-31T18:00:12.120 [DEBUG] [Thread-132172] [transport.py] [_log()] server lang: <none>
2025-12-31T18:00:12.120 [DEBUG] [Thread-132172] [transport.py] [_log()] kex follows: False
2025-12-31T18:00:12.120 [DEBUG] [Thread-132172] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:00:12.121 [DEBUG] [Thread-132172] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:00:12.121 [DEBUG] [Thread-132172] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:00:12.121 [DEBUG] [Thread-132172] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:00:12.121 [DEBUG] [Thread-132172] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:00:12.121 [DEBUG] [Thread-132172] [transport.py] [_log()] Compression: none
2025-12-31T18:00:12.121 [DEBUG] [Thread-132172] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:00:12.136 [DEBUG] [Thread-132172] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:00:12.137 [DEBUG] [Thread-132172] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:00:12.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T18:00:12.138 [DEBUG] [Thread-132172] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T18:00:12.138 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:00:12.139 [DEBUG] [Thread-132172] [transport.py] [_log()] userauth is OK
2025-12-31T18:00:12.140 [DEBUG] [Thread-132172] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:00:12.140 [DEBUG] [Thread-132172] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:00:12.140 [DEBUG] [Thread-132172] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T18:00:12.140 [DEBUG] [Thread-132172] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:00:12.164 [INFO] [Thread-132172] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:00:12.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:00:15.760 [DEBUG] [Thread-132172] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:00:15.760 [DEBUG] [Thread-132172] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:00:15.761 [DEBUG] [Thread-132172] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T18:00:15.802 [DEBUG] [Thread-132172] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:00:15.802 [DEBUG] [Thread-132172] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:00:15.804 [DEBUG] [Thread-132172] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:00:15.936 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:00:15.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T18:00:15.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T18:00:15.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T18:00:15.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:00:15.980 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T18:00:15.981 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:00:15.981 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:00:15.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T18:00:15.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.666112 -999.00  +24.00  23.74     24   +2.60 1 2 1 1 1   887    0 22.87 52.19 ----- 21.7 23.7 280.8 28.0 26.4 -21.3 26.6 -21.5 26.6 -21.1 26.8 -21.1
2025-12-31T18:00:15.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T18:00:15.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T18:00:15.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.666112
2025-12-31T18:00:15.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T18:00:15.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T18:00:15.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T18:00:15.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T18:00:15.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T18:00:15.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T18:00:03', tmtdew=25.01, humidity=19.25, cloud=0.0, wind=20.79, temperature=24.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T15:59:12.077', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T18:00:15.984 [DEBUG] [Thread-132172] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:00:16.068 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T18:00:16.080 [DEBUG] [Thread-132175] [transport.py] [_log()] starting thread (client mode): 0xb95d79a0
2025-12-31T18:00:16.080 [DEBUG] [Thread-132175] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:00:16.094 [DEBUG] [Thread-132175] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T18:00:16.094 [INFO] [Thread-132175] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T18:00:16.102 [DEBUG] [Thread-132175] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:00:16.102 [DEBUG] [Thread-132175] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T18:00:16.102 [DEBUG] [Thread-132175] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:00:16.102 [DEBUG] [Thread-132175] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:00:16.102 [DEBUG] [Thread-132175] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:00:16.102 [DEBUG] [Thread-132175] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:00:16.102 [DEBUG] [Thread-132175] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:00:16.102 [DEBUG] [Thread-132175] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:00:16.102 [DEBUG] [Thread-132175] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:00:16.102 [DEBUG] [Thread-132175] [transport.py] [_log()] client lang: <none>
2025-12-31T18:00:16.102 [DEBUG] [Thread-132175] [transport.py] [_log()] server lang: <none>
2025-12-31T18:00:16.102 [DEBUG] [Thread-132175] [transport.py] [_log()] kex follows: False
2025-12-31T18:00:16.102 [DEBUG] [Thread-132175] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:00:16.102 [DEBUG] [Thread-132175] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:00:16.102 [DEBUG] [Thread-132175] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:00:16.102 [DEBUG] [Thread-132175] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:00:16.102 [DEBUG] [Thread-132175] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:00:16.103 [DEBUG] [Thread-132175] [transport.py] [_log()] Compression: none
2025-12-31T18:00:16.103 [DEBUG] [Thread-132175] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:00:16.160 [DEBUG] [Thread-132175] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:00:16.160 [DEBUG] [Thread-132175] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:00:16.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T18:00:16.161 [DEBUG] [Thread-132175] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T18:00:16.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:00:16.218 [DEBUG] [Thread-132175] [transport.py] [_log()] userauth is OK
2025-12-31T18:00:16.218 [DEBUG] [Thread-132175] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:00:16.218 [DEBUG] [Thread-132175] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:00:16.218 [DEBUG] [Thread-132175] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T18:00:16.218 [DEBUG] [Thread-132175] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:00:16.236 [INFO] [Thread-132175] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:00:16.237 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T18:00:16.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:00:17.053 [DEBUG] [Thread-132175] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:00:17.054 [DEBUG] [Thread-132175] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:00:17.102 [DEBUG] [Thread-132175] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:00:17.102 [DEBUG] [Thread-132175] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:00:17.111 [DEBUG] [Thread-132175] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:00:17.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:00:17.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T18:00:17.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T18:00:17.138 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:00:17.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:00:17.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:00:17.147 [DEBUG] [Thread-132175] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:00:21.073 [DEBUG] [Thread-132177 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:00:29.097 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:00:29.098 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:00:29.218 [DEBUG] [Thread-132178 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:00:36.129 [DEBUG] [Thread-132179 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:00:47.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T18:00:47.154 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T18:00:47.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T18:00:47.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 18, 0, 35), 24.23, 20.35, 0.0, 26.08, 24.36, 0, 0, 0, 2, 0, 0),)
2025-12-31T18:00:47.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 18:00:35
2025-12-31T18:00:47.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T18:00:48.131 [DEBUG] [Thread-132180] [transport.py] [_log()] starting thread (client mode): 0xb6bbd180
2025-12-31T18:00:48.131 [DEBUG] [Thread-132180] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:00:48.151 [DEBUG] [Thread-132180] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T18:00:48.151 [INFO] [Thread-132180] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T18:00:48.154 [DEBUG] [Thread-132180] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:00:48.155 [DEBUG] [Thread-132180] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T18:00:48.155 [DEBUG] [Thread-132180] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:00:48.155 [DEBUG] [Thread-132180] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:00:48.155 [DEBUG] [Thread-132180] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:00:48.155 [DEBUG] [Thread-132180] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:00:48.155 [DEBUG] [Thread-132180] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:00:48.155 [DEBUG] [Thread-132180] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:00:48.155 [DEBUG] [Thread-132180] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:00:48.155 [DEBUG] [Thread-132180] [transport.py] [_log()] client lang: <none>
2025-12-31T18:00:48.155 [DEBUG] [Thread-132180] [transport.py] [_log()] server lang: <none>
2025-12-31T18:00:48.155 [DEBUG] [Thread-132180] [transport.py] [_log()] kex follows: False
2025-12-31T18:00:48.155 [DEBUG] [Thread-132180] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:00:48.156 [DEBUG] [Thread-132180] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:00:48.156 [DEBUG] [Thread-132180] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:00:48.156 [DEBUG] [Thread-132180] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:00:48.156 [DEBUG] [Thread-132180] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:00:48.156 [DEBUG] [Thread-132180] [transport.py] [_log()] Compression: none
2025-12-31T18:00:48.156 [DEBUG] [Thread-132180] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:00:48.176 [DEBUG] [Thread-132180] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:00:48.176 [DEBUG] [Thread-132180] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:00:48.177 [DEBUG] [Thread-132180] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T18:00:48.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T18:00:48.178 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:00:48.179 [DEBUG] [Thread-132180] [transport.py] [_log()] userauth is OK
2025-12-31T18:00:48.179 [DEBUG] [Thread-132180] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:00:48.179 [DEBUG] [Thread-132180] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:00:48.179 [DEBUG] [Thread-132180] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T18:00:48.179 [DEBUG] [Thread-132180] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:00:48.214 [INFO] [Thread-132180] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:00:48.217 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:00:48.828 [DEBUG] [Thread-132180] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:00:48.828 [DEBUG] [Thread-132180] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:00:48.828 [DEBUG] [Thread-132180] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T18:00:48.869 [DEBUG] [Thread-132180] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:00:48.869 [DEBUG] [Thread-132180] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:00:48.872 [DEBUG] [Thread-132180] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:00:48.879 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:00:48.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T18:00:48.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T18:00:48.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T18:00:48.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:00:48.891 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T18:00:48.891 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:00:48.892 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:00:48.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T18:00:48.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.666806 -999.00  +24.30  21.23     26   +3.60 1 2 1 1 1   887    0 22.23 63.73 ----- 22.1 21.2 275.5 27.8 26.6 -21.1 26.7 -20.5 26.8 -18.7 27.1 -20.2
2025-12-31T18:00:48.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T18:00:48.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T18:00:48.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.666806
2025-12-31T18:00:48.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T18:00:48.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T18:00:48.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T18:00:48.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T18:00:48.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T18:00:48.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T18:00:35', tmtdew=24.23, humidity=20.35, cloud=0.0, wind=26.08, temperature=24.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T16:00:12.038', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T18:00:48.894 [DEBUG] [Thread-132180] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:00:48.971 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T18:00:48.983 [DEBUG] [Thread-132183] [transport.py] [_log()] starting thread (client mode): 0xb9579210
2025-12-31T18:00:48.983 [DEBUG] [Thread-132183] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:00:48.998 [DEBUG] [Thread-132183] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T18:00:48.998 [INFO] [Thread-132183] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T18:00:49.005 [DEBUG] [Thread-132183] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:00:49.006 [DEBUG] [Thread-132183] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T18:00:49.006 [DEBUG] [Thread-132183] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:00:49.006 [DEBUG] [Thread-132183] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:00:49.006 [DEBUG] [Thread-132183] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:00:49.006 [DEBUG] [Thread-132183] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:00:49.006 [DEBUG] [Thread-132183] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:00:49.006 [DEBUG] [Thread-132183] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:00:49.006 [DEBUG] [Thread-132183] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:00:49.006 [DEBUG] [Thread-132183] [transport.py] [_log()] client lang: <none>
2025-12-31T18:00:49.006 [DEBUG] [Thread-132183] [transport.py] [_log()] server lang: <none>
2025-12-31T18:00:49.006 [DEBUG] [Thread-132183] [transport.py] [_log()] kex follows: False
2025-12-31T18:00:49.006 [DEBUG] [Thread-132183] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:00:49.006 [DEBUG] [Thread-132183] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:00:49.006 [DEBUG] [Thread-132183] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:00:49.006 [DEBUG] [Thread-132183] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:00:49.006 [DEBUG] [Thread-132183] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:00:49.006 [DEBUG] [Thread-132183] [transport.py] [_log()] Compression: none
2025-12-31T18:00:49.006 [DEBUG] [Thread-132183] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:00:49.064 [DEBUG] [Thread-132183] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:00:49.065 [DEBUG] [Thread-132183] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:00:49.065 [DEBUG] [Thread-132183] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T18:00:49.066 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T18:00:49.067 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:00:49.120 [DEBUG] [Thread-132183] [transport.py] [_log()] userauth is OK
2025-12-31T18:00:49.120 [DEBUG] [Thread-132183] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:00:49.121 [DEBUG] [Thread-132183] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:00:49.121 [DEBUG] [Thread-132183] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T18:00:49.121 [DEBUG] [Thread-132183] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:00:49.146 [INFO] [Thread-132183] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:00:49.146 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T18:00:49.147 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:00:49.989 [DEBUG] [Thread-132183] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:00:49.990 [DEBUG] [Thread-132183] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:00:50.038 [DEBUG] [Thread-132183] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:00:50.038 [DEBUG] [Thread-132183] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:00:50.047 [DEBUG] [Thread-132183] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:00:50.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:00:50.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T18:00:50.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T18:00:50.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:00:50.075 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:00:50.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:00:50.084 [DEBUG] [Thread-132183] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:00:51.163 [DEBUG] [Thread-132185 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:01:06.217 [DEBUG] [Thread-132186 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:01:20.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T18:01:20.106 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T18:01:20.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-12-31T18:01:20.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 18, 1, 7), 23.94, 20.78, 0.0, 26.52, 24.49, 0, 0, 0, 2, 0, 0),)
2025-12-31T18:01:20.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 18:01:07
2025-12-31T18:01:20.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T18:01:21.098 [DEBUG] [Thread-132187] [transport.py] [_log()] starting thread (client mode): 0xb957b4c0
2025-12-31T18:01:21.098 [DEBUG] [Thread-132187] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:01:21.116 [DEBUG] [Thread-132187] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T18:01:21.116 [INFO] [Thread-132187] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T18:01:21.119 [DEBUG] [Thread-132187] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:01:21.119 [DEBUG] [Thread-132187] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T18:01:21.119 [DEBUG] [Thread-132187] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:01:21.119 [DEBUG] [Thread-132187] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:01:21.119 [DEBUG] [Thread-132187] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:01:21.119 [DEBUG] [Thread-132187] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:01:21.120 [DEBUG] [Thread-132187] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:01:21.120 [DEBUG] [Thread-132187] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:01:21.120 [DEBUG] [Thread-132187] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:01:21.120 [DEBUG] [Thread-132187] [transport.py] [_log()] client lang: <none>
2025-12-31T18:01:21.120 [DEBUG] [Thread-132187] [transport.py] [_log()] server lang: <none>
2025-12-31T18:01:21.120 [DEBUG] [Thread-132187] [transport.py] [_log()] kex follows: False
2025-12-31T18:01:21.120 [DEBUG] [Thread-132187] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:01:21.120 [DEBUG] [Thread-132187] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:01:21.120 [DEBUG] [Thread-132187] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:01:21.120 [DEBUG] [Thread-132187] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:01:21.120 [DEBUG] [Thread-132187] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:01:21.120 [DEBUG] [Thread-132187] [transport.py] [_log()] Compression: none
2025-12-31T18:01:21.120 [DEBUG] [Thread-132187] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:01:21.142 [DEBUG] [Thread-132187] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:01:21.143 [DEBUG] [Thread-132187] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:01:21.143 [DEBUG] [Thread-132187] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T18:01:21.143 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T18:01:21.143 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:01:21.143 [DEBUG] [Thread-132187] [transport.py] [_log()] userauth is OK
2025-12-31T18:01:21.144 [DEBUG] [Thread-132187] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:01:21.144 [DEBUG] [Thread-132187] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:01:21.144 [DEBUG] [Thread-132187] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T18:01:21.144 [DEBUG] [Thread-132187] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:01:21.158 [INFO] [Thread-132187] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:01:21.159 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:01:21.249 [DEBUG] [Thread-132189 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:01:21.963 [DEBUG] [Thread-132187] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:01:21.963 [DEBUG] [Thread-132187] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:01:21.964 [DEBUG] [Thread-132187] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T18:01:22.004 [DEBUG] [Thread-132187] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:01:22.004 [DEBUG] [Thread-132187] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:01:22.007 [DEBUG] [Thread-132187] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:01:22.018 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:01:22.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T18:01:22.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T18:01:22.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T18:01:22.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:01:22.028 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T18:01:22.028 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:01:22.028 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:01:22.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T18:01:22.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.667154 -999.00  +24.10  29.21     26   +3.80 1 2 1 1 1   887    0 23.19 73.31 ----- 23.6 29.2 274.8 35.5 26.4 -22.0 26.7 -21.1 26.9 -20.8 27.2 -21.5
2025-12-31T18:01:22.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T18:01:22.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T18:01:22.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.667154
2025-12-31T18:01:22.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T18:01:22.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T18:01:22.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T18:01:22.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T18:01:22.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T18:01:22.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T18:01:07', tmtdew=23.94, humidity=20.78, cloud=0.0, wind=26.52, temperature=24.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T16:00:42.106', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T18:01:22.030 [DEBUG] [Thread-132187] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:01:22.114 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T18:01:22.125 [DEBUG] [Thread-132191] [transport.py] [_log()] starting thread (client mode): 0xb6b62f50
2025-12-31T18:01:22.125 [DEBUG] [Thread-132191] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:01:22.142 [DEBUG] [Thread-132191] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T18:01:22.142 [INFO] [Thread-132191] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T18:01:22.149 [DEBUG] [Thread-132191] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:01:22.149 [DEBUG] [Thread-132191] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T18:01:22.149 [DEBUG] [Thread-132191] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:01:22.149 [DEBUG] [Thread-132191] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:01:22.149 [DEBUG] [Thread-132191] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:01:22.149 [DEBUG] [Thread-132191] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:01:22.149 [DEBUG] [Thread-132191] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:01:22.149 [DEBUG] [Thread-132191] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:01:22.149 [DEBUG] [Thread-132191] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:01:22.150 [DEBUG] [Thread-132191] [transport.py] [_log()] client lang: <none>
2025-12-31T18:01:22.150 [DEBUG] [Thread-132191] [transport.py] [_log()] server lang: <none>
2025-12-31T18:01:22.150 [DEBUG] [Thread-132191] [transport.py] [_log()] kex follows: False
2025-12-31T18:01:22.150 [DEBUG] [Thread-132191] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:01:22.150 [DEBUG] [Thread-132191] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:01:22.150 [DEBUG] [Thread-132191] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:01:22.150 [DEBUG] [Thread-132191] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:01:22.150 [DEBUG] [Thread-132191] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:01:22.150 [DEBUG] [Thread-132191] [transport.py] [_log()] Compression: none
2025-12-31T18:01:22.150 [DEBUG] [Thread-132191] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:01:22.209 [DEBUG] [Thread-132191] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:01:22.210 [DEBUG] [Thread-132191] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:01:22.211 [DEBUG] [Thread-132191] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T18:01:22.211 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T18:01:22.211 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:01:22.268 [DEBUG] [Thread-132191] [transport.py] [_log()] userauth is OK
2025-12-31T18:01:22.268 [DEBUG] [Thread-132191] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:01:22.268 [DEBUG] [Thread-132191] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:01:22.268 [DEBUG] [Thread-132191] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T18:01:22.268 [DEBUG] [Thread-132191] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:01:22.286 [INFO] [Thread-132191] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:01:22.287 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T18:01:22.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:01:23.117 [DEBUG] [Thread-132191] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:01:23.117 [DEBUG] [Thread-132191] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:01:23.165 [DEBUG] [Thread-132191] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:01:23.165 [DEBUG] [Thread-132191] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:01:23.174 [DEBUG] [Thread-132191] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:01:23.183 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:01:23.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T18:01:23.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-12-31T18:01:23.202 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:01:23.202 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:01:23.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:01:23.211 [DEBUG] [Thread-132191] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:01:29.243 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:01:29.244 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:01:29.266 [DEBUG] [Thread-132193 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:01:36.286 [DEBUG] [Thread-132194 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:01:51.344 [DEBUG] [Thread-132195 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:01:53.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T18:01:53.233 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T18:01:53.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T18:01:53.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 18, 1, 39), 24.21, 20.33, 0.0, 28.48, 24.73, 0, 0, 0, 2, 0, 0),)
2025-12-31T18:01:53.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 18:01:39
2025-12-31T18:01:54.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T18:01:54.236 [DEBUG] [Thread-132196] [transport.py] [_log()] starting thread (client mode): 0xb95d6530
2025-12-31T18:01:54.236 [DEBUG] [Thread-132196] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:01:54.255 [DEBUG] [Thread-132196] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T18:01:54.256 [INFO] [Thread-132196] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T18:01:54.259 [DEBUG] [Thread-132196] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:01:54.259 [DEBUG] [Thread-132196] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T18:01:54.259 [DEBUG] [Thread-132196] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:01:54.259 [DEBUG] [Thread-132196] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:01:54.259 [DEBUG] [Thread-132196] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:01:54.259 [DEBUG] [Thread-132196] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:01:54.259 [DEBUG] [Thread-132196] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:01:54.259 [DEBUG] [Thread-132196] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:01:54.259 [DEBUG] [Thread-132196] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:01:54.259 [DEBUG] [Thread-132196] [transport.py] [_log()] client lang: <none>
2025-12-31T18:01:54.259 [DEBUG] [Thread-132196] [transport.py] [_log()] server lang: <none>
2025-12-31T18:01:54.259 [DEBUG] [Thread-132196] [transport.py] [_log()] kex follows: False
2025-12-31T18:01:54.259 [DEBUG] [Thread-132196] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:01:54.259 [DEBUG] [Thread-132196] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:01:54.259 [DEBUG] [Thread-132196] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:01:54.259 [DEBUG] [Thread-132196] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:01:54.259 [DEBUG] [Thread-132196] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:01:54.259 [DEBUG] [Thread-132196] [transport.py] [_log()] Compression: none
2025-12-31T18:01:54.259 [DEBUG] [Thread-132196] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:01:54.277 [DEBUG] [Thread-132196] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:01:54.277 [DEBUG] [Thread-132196] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:01:54.277 [DEBUG] [Thread-132196] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T18:01:54.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T18:01:54.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:01:54.278 [DEBUG] [Thread-132196] [transport.py] [_log()] userauth is OK
2025-12-31T18:01:54.278 [DEBUG] [Thread-132196] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:01:54.278 [DEBUG] [Thread-132196] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:01:54.278 [DEBUG] [Thread-132196] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T18:01:54.278 [DEBUG] [Thread-132196] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:01:54.288 [INFO] [Thread-132196] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:01:54.288 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:01:54.893 [DEBUG] [Thread-132196] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:01:54.893 [DEBUG] [Thread-132196] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:01:54.893 [DEBUG] [Thread-132196] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T18:01:54.933 [DEBUG] [Thread-132196] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:01:54.933 [DEBUG] [Thread-132196] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:01:54.936 [DEBUG] [Thread-132196] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:01:54.949 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:01:54.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T18:01:54.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T18:01:54.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T18:01:54.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:01:54.954 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T18:01:54.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:01:54.954 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:01:54.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T18:01:54.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.667501 -999.00  +23.80  33.42     26   +3.40 1 2 2 1 1   887    0 23.46 80.77 ----- 29.9 33.4 276.6 37.3 26.5 -22.5 26.8 -21.4 26.9 -22.7 27.2 -21.8
2025-12-31T18:01:54.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T18:01:54.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T18:01:54.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.667501
2025-12-31T18:01:54.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T18:01:54.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T18:01:54.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T18:01:54.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T18:01:54.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T18:01:54.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T18:01:39', tmtdew=24.21, humidity=20.33, cloud=0.0, wind=28.48, temperature=24.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T16:01:12.086', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T18:01:54.956 [DEBUG] [Thread-132196] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:01:55.029 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T18:01:55.042 [DEBUG] [Thread-132199] [transport.py] [_log()] starting thread (client mode): 0xb95d4a00
2025-12-31T18:01:55.042 [DEBUG] [Thread-132199] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:01:55.057 [DEBUG] [Thread-132199] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T18:01:55.057 [INFO] [Thread-132199] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T18:01:55.065 [DEBUG] [Thread-132199] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:01:55.065 [DEBUG] [Thread-132199] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T18:01:55.065 [DEBUG] [Thread-132199] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:01:55.065 [DEBUG] [Thread-132199] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:01:55.065 [DEBUG] [Thread-132199] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:01:55.065 [DEBUG] [Thread-132199] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:01:55.065 [DEBUG] [Thread-132199] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:01:55.065 [DEBUG] [Thread-132199] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:01:55.065 [DEBUG] [Thread-132199] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:01:55.065 [DEBUG] [Thread-132199] [transport.py] [_log()] client lang: <none>
2025-12-31T18:01:55.065 [DEBUG] [Thread-132199] [transport.py] [_log()] server lang: <none>
2025-12-31T18:01:55.065 [DEBUG] [Thread-132199] [transport.py] [_log()] kex follows: False
2025-12-31T18:01:55.065 [DEBUG] [Thread-132199] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:01:55.065 [DEBUG] [Thread-132199] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:01:55.065 [DEBUG] [Thread-132199] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:01:55.065 [DEBUG] [Thread-132199] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:01:55.065 [DEBUG] [Thread-132199] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:01:55.065 [DEBUG] [Thread-132199] [transport.py] [_log()] Compression: none
2025-12-31T18:01:55.065 [DEBUG] [Thread-132199] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:01:55.122 [DEBUG] [Thread-132199] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:01:55.123 [DEBUG] [Thread-132199] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:01:55.123 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T18:01:55.123 [DEBUG] [Thread-132199] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T18:01:55.123 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:01:55.179 [DEBUG] [Thread-132199] [transport.py] [_log()] userauth is OK
2025-12-31T18:01:55.179 [DEBUG] [Thread-132199] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:01:55.180 [DEBUG] [Thread-132199] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:01:55.180 [DEBUG] [Thread-132199] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T18:01:55.180 [DEBUG] [Thread-132199] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:01:55.193 [INFO] [Thread-132199] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:01:55.193 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T18:01:55.193 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:01:55.997 [DEBUG] [Thread-132199] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:01:55.997 [DEBUG] [Thread-132199] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:01:56.045 [DEBUG] [Thread-132199] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:01:56.045 [DEBUG] [Thread-132199] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:01:56.053 [DEBUG] [Thread-132199] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:01:56.062 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:01:56.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T18:01:56.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T18:01:56.077 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:01:56.077 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:01:56.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:01:56.085 [DEBUG] [Thread-132199] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:02:06.375 [DEBUG] [Thread-132201 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:02:21.436 [DEBUG] [Thread-132202 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:02:26.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T18:02:26.079 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T18:02:26.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T18:02:26.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 18, 2, 11), 24.33, 20.17, 0.0, 22.73, 24.79, 0, 0, 0, 2, 0, 0),)
2025-12-31T18:02:26.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 18:02:11
2025-12-31T18:02:26.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T18:02:27.058 [DEBUG] [Thread-132203] [transport.py] [_log()] starting thread (client mode): 0xb6b61f30
2025-12-31T18:02:27.059 [DEBUG] [Thread-132203] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:02:27.071 [DEBUG] [Thread-132203] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T18:02:27.072 [INFO] [Thread-132203] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T18:02:27.074 [DEBUG] [Thread-132203] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:02:27.074 [DEBUG] [Thread-132203] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T18:02:27.074 [DEBUG] [Thread-132203] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:02:27.074 [DEBUG] [Thread-132203] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:02:27.074 [DEBUG] [Thread-132203] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:02:27.074 [DEBUG] [Thread-132203] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:02:27.074 [DEBUG] [Thread-132203] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:02:27.074 [DEBUG] [Thread-132203] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:02:27.074 [DEBUG] [Thread-132203] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:02:27.074 [DEBUG] [Thread-132203] [transport.py] [_log()] client lang: <none>
2025-12-31T18:02:27.074 [DEBUG] [Thread-132203] [transport.py] [_log()] server lang: <none>
2025-12-31T18:02:27.075 [DEBUG] [Thread-132203] [transport.py] [_log()] kex follows: False
2025-12-31T18:02:27.075 [DEBUG] [Thread-132203] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:02:27.075 [DEBUG] [Thread-132203] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:02:27.075 [DEBUG] [Thread-132203] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:02:27.075 [DEBUG] [Thread-132203] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:02:27.075 [DEBUG] [Thread-132203] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:02:27.075 [DEBUG] [Thread-132203] [transport.py] [_log()] Compression: none
2025-12-31T18:02:27.075 [DEBUG] [Thread-132203] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:02:27.093 [DEBUG] [Thread-132203] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:02:27.094 [DEBUG] [Thread-132203] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:02:27.094 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T18:02:27.095 [DEBUG] [Thread-132203] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T18:02:27.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:02:27.098 [DEBUG] [Thread-132203] [transport.py] [_log()] userauth is OK
2025-12-31T18:02:27.099 [DEBUG] [Thread-132203] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:02:27.099 [DEBUG] [Thread-132203] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:02:27.099 [DEBUG] [Thread-132203] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T18:02:27.100 [DEBUG] [Thread-132203] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:02:27.125 [INFO] [Thread-132203] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:02:27.125 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:02:27.878 [DEBUG] [Thread-132203] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:02:27.878 [DEBUG] [Thread-132203] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:02:27.878 [DEBUG] [Thread-132203] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T18:02:27.918 [DEBUG] [Thread-132203] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:02:27.918 [DEBUG] [Thread-132203] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:02:27.921 [DEBUG] [Thread-132203] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:02:27.932 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:02:27.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T18:02:27.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T18:02:27.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T18:02:27.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:02:27.947 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T18:02:27.947 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:02:27.947 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:02:27.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T18:02:27.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.667848 -999.00  +23.70  15.29     26   +3.50 1 2 1 1 1   887    0 22.83 70.91 ----- 12.7 15.3 267.5 30.4 26.5 -21.9 26.7 -21.9 26.7 -23.1 27.2 -21.1
2025-12-31T18:02:27.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T18:02:27.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T18:02:27.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.667848
2025-12-31T18:02:27.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T18:02:27.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T18:02:27.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T18:02:27.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T18:02:27.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T18:02:27.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T18:02:11', tmtdew=24.33, humidity=20.17, cloud=0.0, wind=22.73, temperature=24.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T16:01:42.067', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T18:02:27.949 [DEBUG] [Thread-132203] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:02:28.023 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T18:02:28.036 [DEBUG] [Thread-132206] [transport.py] [_log()] starting thread (client mode): 0xb6b61090
2025-12-31T18:02:28.036 [DEBUG] [Thread-132206] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:02:28.056 [DEBUG] [Thread-132206] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T18:02:28.056 [INFO] [Thread-132206] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T18:02:28.064 [DEBUG] [Thread-132206] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:02:28.064 [DEBUG] [Thread-132206] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T18:02:28.064 [DEBUG] [Thread-132206] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:02:28.064 [DEBUG] [Thread-132206] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:02:28.064 [DEBUG] [Thread-132206] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:02:28.065 [DEBUG] [Thread-132206] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:02:28.065 [DEBUG] [Thread-132206] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:02:28.065 [DEBUG] [Thread-132206] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:02:28.065 [DEBUG] [Thread-132206] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:02:28.065 [DEBUG] [Thread-132206] [transport.py] [_log()] client lang: <none>
2025-12-31T18:02:28.065 [DEBUG] [Thread-132206] [transport.py] [_log()] server lang: <none>
2025-12-31T18:02:28.065 [DEBUG] [Thread-132206] [transport.py] [_log()] kex follows: False
2025-12-31T18:02:28.065 [DEBUG] [Thread-132206] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:02:28.065 [DEBUG] [Thread-132206] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:02:28.066 [DEBUG] [Thread-132206] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:02:28.066 [DEBUG] [Thread-132206] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:02:28.066 [DEBUG] [Thread-132206] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:02:28.066 [DEBUG] [Thread-132206] [transport.py] [_log()] Compression: none
2025-12-31T18:02:28.066 [DEBUG] [Thread-132206] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:02:28.124 [DEBUG] [Thread-132206] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:02:28.125 [DEBUG] [Thread-132206] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:02:28.125 [DEBUG] [Thread-132206] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T18:02:28.125 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T18:02:28.126 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:02:28.180 [DEBUG] [Thread-132206] [transport.py] [_log()] userauth is OK
2025-12-31T18:02:28.180 [DEBUG] [Thread-132206] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:02:28.180 [DEBUG] [Thread-132206] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:02:28.180 [DEBUG] [Thread-132206] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T18:02:28.180 [DEBUG] [Thread-132206] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:02:28.194 [INFO] [Thread-132206] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:02:28.195 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T18:02:28.195 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:02:29.060 [DEBUG] [Thread-132206] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:02:29.060 [DEBUG] [Thread-132206] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:02:29.108 [DEBUG] [Thread-132206] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:02:29.108 [DEBUG] [Thread-132206] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:02:29.117 [DEBUG] [Thread-132206] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:02:29.126 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:02:29.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T18:02:29.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T18:02:29.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:02:29.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:02:29.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:02:29.151 [DEBUG] [Thread-132206] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:02:29.319 [DEBUG] [Thread-132208 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:02:29.384 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:02:29.385 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:02:36.473 [DEBUG] [Thread-132209 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:02:51.528 [DEBUG] [Thread-132210 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:02:59.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T18:02:59.174 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T18:02:59.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T18:02:59.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 18, 2, 43), 24.19, 20.15, 0.0, 27.88, 24.46, 0, 0, 0, 2, 0, 0),)
2025-12-31T18:02:59.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 18:02:43
2025-12-31T18:03:00.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T18:03:00.155 [DEBUG] [Thread-132211] [transport.py] [_log()] starting thread (client mode): 0xb6b63910
2025-12-31T18:03:00.155 [DEBUG] [Thread-132211] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:03:00.174 [DEBUG] [Thread-132211] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T18:03:00.175 [INFO] [Thread-132211] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T18:03:00.178 [DEBUG] [Thread-132211] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:03:00.178 [DEBUG] [Thread-132211] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T18:03:00.178 [DEBUG] [Thread-132211] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:03:00.178 [DEBUG] [Thread-132211] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:03:00.178 [DEBUG] [Thread-132211] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:03:00.178 [DEBUG] [Thread-132211] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:03:00.178 [DEBUG] [Thread-132211] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:03:00.178 [DEBUG] [Thread-132211] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:03:00.178 [DEBUG] [Thread-132211] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:03:00.178 [DEBUG] [Thread-132211] [transport.py] [_log()] client lang: <none>
2025-12-31T18:03:00.178 [DEBUG] [Thread-132211] [transport.py] [_log()] server lang: <none>
2025-12-31T18:03:00.178 [DEBUG] [Thread-132211] [transport.py] [_log()] kex follows: False
2025-12-31T18:03:00.178 [DEBUG] [Thread-132211] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:03:00.178 [DEBUG] [Thread-132211] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:03:00.178 [DEBUG] [Thread-132211] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:03:00.178 [DEBUG] [Thread-132211] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:03:00.179 [DEBUG] [Thread-132211] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:03:00.179 [DEBUG] [Thread-132211] [transport.py] [_log()] Compression: none
2025-12-31T18:03:00.179 [DEBUG] [Thread-132211] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:03:00.196 [DEBUG] [Thread-132211] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:03:00.196 [DEBUG] [Thread-132211] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:03:00.197 [DEBUG] [Thread-132211] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T18:03:00.197 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T18:03:00.198 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:03:00.199 [DEBUG] [Thread-132211] [transport.py] [_log()] userauth is OK
2025-12-31T18:03:00.199 [DEBUG] [Thread-132211] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:03:00.199 [DEBUG] [Thread-132211] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:03:00.199 [DEBUG] [Thread-132211] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T18:03:00.199 [DEBUG] [Thread-132211] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:03:00.225 [INFO] [Thread-132211] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:03:00.225 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:03:00.909 [DEBUG] [Thread-132211] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:03:00.909 [DEBUG] [Thread-132211] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:03:00.909 [DEBUG] [Thread-132211] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T18:03:00.950 [DEBUG] [Thread-132211] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:03:00.950 [DEBUG] [Thread-132211] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:03:00.954 [DEBUG] [Thread-132211] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:03:00.966 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:03:00.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T18:03:00.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T18:03:00.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T18:03:00.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:03:00.979 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T18:03:00.979 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:03:00.980 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:03:00.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T18:03:00.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.668196 -999.00  +24.00  23.41     26   +3.50 1 2 1 1 1   887    0 23.01 72.53 ----- 26.9 23.4 258.8 30.4 26.4 -23.8 26.9 -21.7 27.1 -19.6 27.1 -23.6
2025-12-31T18:03:00.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T18:03:00.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T18:03:00.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.668196
2025-12-31T18:03:00.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T18:03:00.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T18:03:00.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T18:03:00.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T18:03:00.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T18:03:00.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T18:02:43', tmtdew=24.19, humidity=20.15, cloud=0.0, wind=27.88, temperature=24.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T16:02:12.134', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T18:03:00.982 [DEBUG] [Thread-132211] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:03:01.074 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T18:03:01.086 [DEBUG] [Thread-132214] [transport.py] [_log()] starting thread (client mode): 0xb9578640
2025-12-31T18:03:01.087 [DEBUG] [Thread-132214] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:03:01.101 [DEBUG] [Thread-132214] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T18:03:01.102 [INFO] [Thread-132214] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T18:03:01.109 [DEBUG] [Thread-132214] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:03:01.109 [DEBUG] [Thread-132214] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T18:03:01.109 [DEBUG] [Thread-132214] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:03:01.109 [DEBUG] [Thread-132214] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:03:01.110 [DEBUG] [Thread-132214] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:03:01.110 [DEBUG] [Thread-132214] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:03:01.110 [DEBUG] [Thread-132214] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:03:01.110 [DEBUG] [Thread-132214] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:03:01.110 [DEBUG] [Thread-132214] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:03:01.110 [DEBUG] [Thread-132214] [transport.py] [_log()] client lang: <none>
2025-12-31T18:03:01.110 [DEBUG] [Thread-132214] [transport.py] [_log()] server lang: <none>
2025-12-31T18:03:01.110 [DEBUG] [Thread-132214] [transport.py] [_log()] kex follows: False
2025-12-31T18:03:01.110 [DEBUG] [Thread-132214] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:03:01.110 [DEBUG] [Thread-132214] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:03:01.110 [DEBUG] [Thread-132214] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:03:01.110 [DEBUG] [Thread-132214] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:03:01.110 [DEBUG] [Thread-132214] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:03:01.110 [DEBUG] [Thread-132214] [transport.py] [_log()] Compression: none
2025-12-31T18:03:01.110 [DEBUG] [Thread-132214] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:03:01.173 [DEBUG] [Thread-132214] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:03:01.173 [DEBUG] [Thread-132214] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:03:01.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T18:03:01.174 [DEBUG] [Thread-132214] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T18:03:01.175 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:03:01.228 [DEBUG] [Thread-132214] [transport.py] [_log()] userauth is OK
2025-12-31T18:03:01.229 [DEBUG] [Thread-132214] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:03:01.229 [DEBUG] [Thread-132214] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:03:01.229 [DEBUG] [Thread-132214] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T18:03:01.229 [DEBUG] [Thread-132214] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:03:01.252 [INFO] [Thread-132214] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:03:01.252 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T18:03:01.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:03:02.082 [DEBUG] [Thread-132214] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:03:02.082 [DEBUG] [Thread-132214] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:03:02.130 [DEBUG] [Thread-132214] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:03:02.131 [DEBUG] [Thread-132214] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:03:02.140 [DEBUG] [Thread-132214] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:03:02.149 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:03:02.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T18:03:02.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T18:03:02.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:03:02.168 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:03:02.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:03:02.176 [DEBUG] [Thread-132214] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:03:06.565 [DEBUG] [Thread-132216 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:03:21.614 [DEBUG] [Thread-132217 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:03:29.373 [DEBUG] [Thread-132218 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:03:29.524 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:03:29.525 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:03:32.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T18:03:32.176 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T18:03:32.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T18:03:32.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 18, 3, 15), 24.01, 20.38, 0.0, 29.55, 24.38, 0, 0, 0, 2, 0, 0),)
2025-12-31T18:03:32.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 18:03:15
2025-12-31T18:03:33.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T18:03:33.164 [DEBUG] [Thread-132219] [transport.py] [_log()] starting thread (client mode): 0xb95d4c40
2025-12-31T18:03:33.164 [DEBUG] [Thread-132219] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:03:33.180 [DEBUG] [Thread-132219] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T18:03:33.180 [INFO] [Thread-132219] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T18:03:33.183 [DEBUG] [Thread-132219] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:03:33.183 [DEBUG] [Thread-132219] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T18:03:33.183 [DEBUG] [Thread-132219] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:03:33.183 [DEBUG] [Thread-132219] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:03:33.183 [DEBUG] [Thread-132219] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:03:33.184 [DEBUG] [Thread-132219] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:03:33.184 [DEBUG] [Thread-132219] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:03:33.184 [DEBUG] [Thread-132219] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:03:33.184 [DEBUG] [Thread-132219] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:03:33.184 [DEBUG] [Thread-132219] [transport.py] [_log()] client lang: <none>
2025-12-31T18:03:33.184 [DEBUG] [Thread-132219] [transport.py] [_log()] server lang: <none>
2025-12-31T18:03:33.184 [DEBUG] [Thread-132219] [transport.py] [_log()] kex follows: False
2025-12-31T18:03:33.184 [DEBUG] [Thread-132219] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:03:33.184 [DEBUG] [Thread-132219] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:03:33.184 [DEBUG] [Thread-132219] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:03:33.184 [DEBUG] [Thread-132219] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:03:33.184 [DEBUG] [Thread-132219] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:03:33.184 [DEBUG] [Thread-132219] [transport.py] [_log()] Compression: none
2025-12-31T18:03:33.184 [DEBUG] [Thread-132219] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:03:33.202 [DEBUG] [Thread-132219] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:03:33.203 [DEBUG] [Thread-132219] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:03:33.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T18:03:33.204 [DEBUG] [Thread-132219] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T18:03:33.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:03:33.206 [DEBUG] [Thread-132219] [transport.py] [_log()] userauth is OK
2025-12-31T18:03:33.206 [DEBUG] [Thread-132219] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:03:33.206 [DEBUG] [Thread-132219] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:03:33.206 [DEBUG] [Thread-132219] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T18:03:33.206 [DEBUG] [Thread-132219] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:03:33.225 [INFO] [Thread-132219] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:03:33.226 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:03:33.999 [DEBUG] [Thread-132219] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:03:33.999 [DEBUG] [Thread-132219] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:03:34.000 [DEBUG] [Thread-132219] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T18:03:34.040 [DEBUG] [Thread-132219] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:03:34.040 [DEBUG] [Thread-132219] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:03:34.043 [DEBUG] [Thread-132219] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:03:34.053 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:03:34.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T18:03:34.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T18:03:34.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T18:03:34.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:03:34.063 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T18:03:34.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:03:34.063 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:03:34.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T18:03:34.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.668543 -999.00  +23.80  26.31     26   +3.60 1 2 1 1 1   887    0 23.12 70.04 ----- 26.6 26.3 243.8 28.8 26.4 -25.1 26.6 -22.8 26.9 -22.3 26.9 -24.0
2025-12-31T18:03:34.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T18:03:34.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T18:03:34.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.668543
2025-12-31T18:03:34.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T18:03:34.064 [DEBUG] [Thread-132219] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:03:34.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T18:03:34.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T18:03:34.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T18:03:34.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T18:03:34.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T18:03:15', tmtdew=24.01, humidity=20.38, cloud=0.0, wind=29.55, temperature=24.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T16:02:42.115', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T18:03:34.148 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T18:03:34.160 [DEBUG] [Thread-132222] [transport.py] [_log()] starting thread (client mode): 0xb95f16f0
2025-12-31T18:03:34.160 [DEBUG] [Thread-132222] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:03:34.176 [DEBUG] [Thread-132222] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T18:03:34.176 [INFO] [Thread-132222] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T18:03:34.183 [DEBUG] [Thread-132222] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:03:34.184 [DEBUG] [Thread-132222] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T18:03:34.184 [DEBUG] [Thread-132222] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:03:34.184 [DEBUG] [Thread-132222] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:03:34.184 [DEBUG] [Thread-132222] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:03:34.184 [DEBUG] [Thread-132222] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:03:34.184 [DEBUG] [Thread-132222] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:03:34.184 [DEBUG] [Thread-132222] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:03:34.184 [DEBUG] [Thread-132222] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:03:34.184 [DEBUG] [Thread-132222] [transport.py] [_log()] client lang: <none>
2025-12-31T18:03:34.184 [DEBUG] [Thread-132222] [transport.py] [_log()] server lang: <none>
2025-12-31T18:03:34.184 [DEBUG] [Thread-132222] [transport.py] [_log()] kex follows: False
2025-12-31T18:03:34.184 [DEBUG] [Thread-132222] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:03:34.184 [DEBUG] [Thread-132222] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:03:34.184 [DEBUG] [Thread-132222] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:03:34.184 [DEBUG] [Thread-132222] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:03:34.184 [DEBUG] [Thread-132222] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:03:34.185 [DEBUG] [Thread-132222] [transport.py] [_log()] Compression: none
2025-12-31T18:03:34.185 [DEBUG] [Thread-132222] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:03:34.248 [DEBUG] [Thread-132222] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:03:34.248 [DEBUG] [Thread-132222] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:03:34.249 [DEBUG] [Thread-132222] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T18:03:34.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T18:03:34.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:03:34.305 [DEBUG] [Thread-132222] [transport.py] [_log()] userauth is OK
2025-12-31T18:03:34.305 [DEBUG] [Thread-132222] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:03:34.306 [DEBUG] [Thread-132222] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:03:34.306 [DEBUG] [Thread-132222] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T18:03:34.306 [DEBUG] [Thread-132222] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:03:34.325 [INFO] [Thread-132222] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:03:34.325 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T18:03:34.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:03:35.156 [DEBUG] [Thread-132222] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:03:35.156 [DEBUG] [Thread-132222] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:03:35.204 [DEBUG] [Thread-132222] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:03:35.204 [DEBUG] [Thread-132222] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:03:35.213 [DEBUG] [Thread-132222] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:03:35.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:03:35.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T18:03:35.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T18:03:35.241 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:03:35.241 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:03:35.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:03:35.249 [DEBUG] [Thread-132222] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:03:36.649 [DEBUG] [Thread-132224 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:03:51.698 [DEBUG] [Thread-132225 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:04:05.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T18:04:05.272 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T18:04:05.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T18:04:05.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 18, 3, 47), 23.42, 21.11, 0.0, 24.92, 23.93, 0, 0, 0, 2, 0, 0),)
2025-12-31T18:04:05.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 18:03:47
2025-12-31T18:04:06.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T18:04:06.255 [DEBUG] [Thread-132226] [transport.py] [_log()] starting thread (client mode): 0xb6ba1540
2025-12-31T18:04:06.255 [DEBUG] [Thread-132226] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:04:06.275 [DEBUG] [Thread-132226] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T18:04:06.276 [INFO] [Thread-132226] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T18:04:06.278 [DEBUG] [Thread-132226] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:04:06.278 [DEBUG] [Thread-132226] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T18:04:06.278 [DEBUG] [Thread-132226] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:04:06.278 [DEBUG] [Thread-132226] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:04:06.278 [DEBUG] [Thread-132226] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:04:06.278 [DEBUG] [Thread-132226] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:04:06.278 [DEBUG] [Thread-132226] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:04:06.278 [DEBUG] [Thread-132226] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:04:06.278 [DEBUG] [Thread-132226] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:04:06.278 [DEBUG] [Thread-132226] [transport.py] [_log()] client lang: <none>
2025-12-31T18:04:06.278 [DEBUG] [Thread-132226] [transport.py] [_log()] server lang: <none>
2025-12-31T18:04:06.278 [DEBUG] [Thread-132226] [transport.py] [_log()] kex follows: False
2025-12-31T18:04:06.278 [DEBUG] [Thread-132226] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:04:06.278 [DEBUG] [Thread-132226] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:04:06.278 [DEBUG] [Thread-132226] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:04:06.278 [DEBUG] [Thread-132226] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:04:06.278 [DEBUG] [Thread-132226] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:04:06.278 [DEBUG] [Thread-132226] [transport.py] [_log()] Compression: none
2025-12-31T18:04:06.278 [DEBUG] [Thread-132226] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:04:06.295 [DEBUG] [Thread-132226] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:04:06.295 [DEBUG] [Thread-132226] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:04:06.296 [DEBUG] [Thread-132226] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T18:04:06.296 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T18:04:06.296 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:04:06.337 [DEBUG] [Thread-132226] [transport.py] [_log()] userauth is OK
2025-12-31T18:04:06.337 [DEBUG] [Thread-132226] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:04:06.338 [DEBUG] [Thread-132226] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:04:06.338 [DEBUG] [Thread-132226] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T18:04:06.338 [DEBUG] [Thread-132226] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:04:06.364 [INFO] [Thread-132226] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:04:06.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:04:06.734 [DEBUG] [Thread-132228 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:04:06.995 [DEBUG] [Thread-132226] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:04:06.995 [DEBUG] [Thread-132226] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:04:06.996 [DEBUG] [Thread-132226] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T18:04:07.036 [DEBUG] [Thread-132226] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:04:07.036 [DEBUG] [Thread-132226] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:04:07.039 [DEBUG] [Thread-132226] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:04:07.053 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:04:07.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T18:04:07.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T18:04:07.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T18:04:07.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:04:07.066 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T18:04:07.067 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:04:07.067 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:04:07.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T18:04:07.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.668890 -999.00  +23.50  18.40     27   +3.60 1 1 1 1 1   887    0 22.59 57.74 ----- 17.2 18.4 254.4 32.6 26.2 -24.6 26.5 -23.8 26.7 -22.8 26.7 -23.7
2025-12-31T18:04:07.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T18:04:07.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T18:04:07.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.668890
2025-12-31T18:04:07.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T18:04:07.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T18:04:07.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T18:04:07.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T18:04:07.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T18:04:07.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T18:03:47', tmtdew=23.42, humidity=21.11, cloud=0.0, wind=24.92, temperature=23.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T16:03:12.096', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T18:04:07.070 [DEBUG] [Thread-132226] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:04:07.153 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T18:04:07.165 [DEBUG] [Thread-132230] [transport.py] [_log()] starting thread (client mode): 0xb957a320
2025-12-31T18:04:07.165 [DEBUG] [Thread-132230] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:04:07.180 [DEBUG] [Thread-132230] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T18:04:07.180 [INFO] [Thread-132230] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T18:04:07.187 [DEBUG] [Thread-132230] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:04:07.188 [DEBUG] [Thread-132230] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T18:04:07.188 [DEBUG] [Thread-132230] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:04:07.188 [DEBUG] [Thread-132230] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:04:07.188 [DEBUG] [Thread-132230] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:04:07.188 [DEBUG] [Thread-132230] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:04:07.188 [DEBUG] [Thread-132230] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:04:07.188 [DEBUG] [Thread-132230] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:04:07.188 [DEBUG] [Thread-132230] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:04:07.188 [DEBUG] [Thread-132230] [transport.py] [_log()] client lang: <none>
2025-12-31T18:04:07.188 [DEBUG] [Thread-132230] [transport.py] [_log()] server lang: <none>
2025-12-31T18:04:07.188 [DEBUG] [Thread-132230] [transport.py] [_log()] kex follows: False
2025-12-31T18:04:07.188 [DEBUG] [Thread-132230] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:04:07.188 [DEBUG] [Thread-132230] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:04:07.188 [DEBUG] [Thread-132230] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:04:07.188 [DEBUG] [Thread-132230] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:04:07.188 [DEBUG] [Thread-132230] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:04:07.188 [DEBUG] [Thread-132230] [transport.py] [_log()] Compression: none
2025-12-31T18:04:07.188 [DEBUG] [Thread-132230] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:04:07.244 [DEBUG] [Thread-132230] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:04:07.245 [DEBUG] [Thread-132230] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:04:07.246 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T18:04:07.246 [DEBUG] [Thread-132230] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T18:04:07.247 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:04:07.305 [DEBUG] [Thread-132230] [transport.py] [_log()] userauth is OK
2025-12-31T18:04:07.305 [DEBUG] [Thread-132230] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:04:07.305 [DEBUG] [Thread-132230] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:04:07.305 [DEBUG] [Thread-132230] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T18:04:07.305 [DEBUG] [Thread-132230] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:04:07.324 [INFO] [Thread-132230] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:04:07.325 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T18:04:07.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:04:08.160 [DEBUG] [Thread-132230] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:04:08.161 [DEBUG] [Thread-132230] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:04:08.209 [DEBUG] [Thread-132230] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:04:08.209 [DEBUG] [Thread-132230] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:04:08.219 [DEBUG] [Thread-132230] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:04:08.229 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:04:08.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T18:04:08.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T18:04:08.248 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:04:08.248 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:04:08.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:04:08.257 [DEBUG] [Thread-132230] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:04:21.773 [DEBUG] [Thread-132232 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:04:29.430 [DEBUG] [Thread-132233 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:04:29.663 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:04:29.664 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:04:36.815 [DEBUG] [Thread-132234 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:04:38.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T18:04:38.279 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T18:04:38.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-12-31T18:04:38.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 18, 4, 19), 23.33, 21.23, 0.0, 25.74, 23.89, 0, 0, 0, 2, 0, 0),)
2025-12-31T18:04:38.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 18:04:19
2025-12-31T18:04:39.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T18:04:39.239 [DEBUG] [Thread-132235] [transport.py] [_log()] starting thread (client mode): 0xb6bb95a0
2025-12-31T18:04:39.240 [DEBUG] [Thread-132235] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:04:39.260 [DEBUG] [Thread-132235] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T18:04:39.260 [INFO] [Thread-132235] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T18:04:39.263 [DEBUG] [Thread-132235] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:04:39.264 [DEBUG] [Thread-132235] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T18:04:39.264 [DEBUG] [Thread-132235] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:04:39.264 [DEBUG] [Thread-132235] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:04:39.264 [DEBUG] [Thread-132235] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:04:39.264 [DEBUG] [Thread-132235] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:04:39.264 [DEBUG] [Thread-132235] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:04:39.264 [DEBUG] [Thread-132235] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:04:39.264 [DEBUG] [Thread-132235] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:04:39.264 [DEBUG] [Thread-132235] [transport.py] [_log()] client lang: <none>
2025-12-31T18:04:39.264 [DEBUG] [Thread-132235] [transport.py] [_log()] server lang: <none>
2025-12-31T18:04:39.264 [DEBUG] [Thread-132235] [transport.py] [_log()] kex follows: False
2025-12-31T18:04:39.264 [DEBUG] [Thread-132235] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:04:39.264 [DEBUG] [Thread-132235] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:04:39.264 [DEBUG] [Thread-132235] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:04:39.264 [DEBUG] [Thread-132235] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:04:39.264 [DEBUG] [Thread-132235] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:04:39.264 [DEBUG] [Thread-132235] [transport.py] [_log()] Compression: none
2025-12-31T18:04:39.264 [DEBUG] [Thread-132235] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:04:39.282 [DEBUG] [Thread-132235] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:04:39.282 [DEBUG] [Thread-132235] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:04:39.283 [DEBUG] [Thread-132235] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T18:04:39.283 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T18:04:39.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:04:39.285 [DEBUG] [Thread-132235] [transport.py] [_log()] userauth is OK
2025-12-31T18:04:39.285 [DEBUG] [Thread-132235] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:04:39.285 [DEBUG] [Thread-132235] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:04:39.286 [DEBUG] [Thread-132235] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T18:04:39.286 [DEBUG] [Thread-132235] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:04:39.311 [INFO] [Thread-132235] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:04:39.312 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:04:40.113 [DEBUG] [Thread-132235] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:04:40.113 [DEBUG] [Thread-132235] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:04:40.113 [DEBUG] [Thread-132235] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T18:04:40.154 [DEBUG] [Thread-132235] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:04:40.155 [DEBUG] [Thread-132235] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:04:40.159 [DEBUG] [Thread-132235] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:04:40.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:04:40.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T18:04:40.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T18:04:40.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T18:04:40.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:04:40.187 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T18:04:40.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:04:40.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:04:40.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T18:04:40.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.669237 -999.00  +23.50  23.06     27   +3.60 1 1 1 1 1   887    0 22.27 53.14 ----- 20.4 23.1 238.2 31.2 26.1 -24.7 26.4 -23.6 26.5 -22.9 26.6 -25.0
2025-12-31T18:04:40.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T18:04:40.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T18:04:40.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.669237
2025-12-31T18:04:40.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T18:04:40.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T18:04:40.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T18:04:40.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T18:04:40.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T18:04:40.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T18:04:19', tmtdew=23.33, humidity=21.23, cloud=0.0, wind=25.74, temperature=23.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T16:03:42.077', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T18:04:40.190 [DEBUG] [Thread-132235] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:04:40.273 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T18:04:40.285 [DEBUG] [Thread-132238] [transport.py] [_log()] starting thread (client mode): 0xb6bba980
2025-12-31T18:04:40.286 [DEBUG] [Thread-132238] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:04:40.300 [DEBUG] [Thread-132238] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T18:04:40.301 [INFO] [Thread-132238] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T18:04:40.308 [DEBUG] [Thread-132238] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:04:40.309 [DEBUG] [Thread-132238] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T18:04:40.309 [DEBUG] [Thread-132238] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:04:40.309 [DEBUG] [Thread-132238] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:04:40.309 [DEBUG] [Thread-132238] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:04:40.309 [DEBUG] [Thread-132238] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:04:40.309 [DEBUG] [Thread-132238] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:04:40.309 [DEBUG] [Thread-132238] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:04:40.309 [DEBUG] [Thread-132238] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:04:40.309 [DEBUG] [Thread-132238] [transport.py] [_log()] client lang: <none>
2025-12-31T18:04:40.309 [DEBUG] [Thread-132238] [transport.py] [_log()] server lang: <none>
2025-12-31T18:04:40.309 [DEBUG] [Thread-132238] [transport.py] [_log()] kex follows: False
2025-12-31T18:04:40.309 [DEBUG] [Thread-132238] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:04:40.309 [DEBUG] [Thread-132238] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:04:40.309 [DEBUG] [Thread-132238] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:04:40.309 [DEBUG] [Thread-132238] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:04:40.309 [DEBUG] [Thread-132238] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:04:40.309 [DEBUG] [Thread-132238] [transport.py] [_log()] Compression: none
2025-12-31T18:04:40.309 [DEBUG] [Thread-132238] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:04:40.369 [DEBUG] [Thread-132238] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:04:40.369 [DEBUG] [Thread-132238] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:04:40.370 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T18:04:40.371 [DEBUG] [Thread-132238] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T18:04:40.372 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:04:40.425 [DEBUG] [Thread-132238] [transport.py] [_log()] userauth is OK
2025-12-31T18:04:40.425 [DEBUG] [Thread-132238] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:04:40.425 [DEBUG] [Thread-132238] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:04:40.425 [DEBUG] [Thread-132238] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T18:04:40.425 [DEBUG] [Thread-132238] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:04:40.444 [INFO] [Thread-132238] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:04:40.444 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T18:04:40.445 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:04:41.310 [DEBUG] [Thread-132238] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:04:41.310 [DEBUG] [Thread-132238] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:04:41.358 [DEBUG] [Thread-132238] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:04:41.358 [DEBUG] [Thread-132238] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:04:41.367 [DEBUG] [Thread-132238] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:04:41.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:04:41.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T18:04:41.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T18:04:41.395 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:04:41.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:04:41.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:04:41.404 [DEBUG] [Thread-132238] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:04:51.855 [DEBUG] [Thread-132240 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:05:06.914 [DEBUG] [Thread-132241 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:05:11.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T18:05:11.426 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T18:05:11.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T18:05:12.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 18, 4, 51), 23.45, 21.2, 0.0, 28.21, 24.03, 0, 0, 0, 2, 0, 0),)
2025-12-31T18:05:12.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 18:04:51
2025-12-31T18:05:12.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T18:05:12.435 [DEBUG] [Thread-132242] [transport.py] [_log()] starting thread (client mode): 0xb6ba2c20
2025-12-31T18:05:12.435 [DEBUG] [Thread-132242] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:05:12.456 [DEBUG] [Thread-132242] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T18:05:12.456 [INFO] [Thread-132242] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T18:05:12.457 [DEBUG] [Thread-132242] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:05:12.457 [DEBUG] [Thread-132242] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T18:05:12.457 [DEBUG] [Thread-132242] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:05:12.457 [DEBUG] [Thread-132242] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:05:12.457 [DEBUG] [Thread-132242] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:05:12.457 [DEBUG] [Thread-132242] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:05:12.457 [DEBUG] [Thread-132242] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:05:12.457 [DEBUG] [Thread-132242] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:05:12.457 [DEBUG] [Thread-132242] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:05:12.457 [DEBUG] [Thread-132242] [transport.py] [_log()] client lang: <none>
2025-12-31T18:05:12.457 [DEBUG] [Thread-132242] [transport.py] [_log()] server lang: <none>
2025-12-31T18:05:12.457 [DEBUG] [Thread-132242] [transport.py] [_log()] kex follows: False
2025-12-31T18:05:12.457 [DEBUG] [Thread-132242] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:05:12.457 [DEBUG] [Thread-132242] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:05:12.457 [DEBUG] [Thread-132242] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:05:12.457 [DEBUG] [Thread-132242] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:05:12.457 [DEBUG] [Thread-132242] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:05:12.457 [DEBUG] [Thread-132242] [transport.py] [_log()] Compression: none
2025-12-31T18:05:12.457 [DEBUG] [Thread-132242] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:05:12.468 [DEBUG] [Thread-132242] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:05:12.468 [DEBUG] [Thread-132242] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:05:12.469 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T18:05:12.469 [DEBUG] [Thread-132242] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T18:05:12.470 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:05:12.472 [DEBUG] [Thread-132242] [transport.py] [_log()] userauth is OK
2025-12-31T18:05:12.473 [DEBUG] [Thread-132242] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:05:12.473 [DEBUG] [Thread-132242] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:05:12.473 [DEBUG] [Thread-132242] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T18:05:12.473 [DEBUG] [Thread-132242] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:05:12.511 [INFO] [Thread-132242] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:05:12.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:05:16.379 [DEBUG] [Thread-132242] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:05:16.380 [DEBUG] [Thread-132242] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:05:16.380 [DEBUG] [Thread-132242] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T18:05:16.421 [DEBUG] [Thread-132242] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:05:16.421 [DEBUG] [Thread-132242] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:05:16.425 [DEBUG] [Thread-132242] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:05:16.437 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:05:16.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T18:05:16.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T18:05:16.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T18:05:16.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:05:16.537 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T18:05:16.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:05:16.537 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:05:16.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T18:05:16.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.669585 -999.00  +23.50  20.04     27   +3.60 1 2 1 1 1   887    0 21.73 45.09 ----- 16.9 20.0 248.6 26.6 26.1 -24.5 26.3 -23.5 26.4 -22.2 26.4 -24.2
2025-12-31T18:05:16.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T18:05:16.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T18:05:16.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.669585
2025-12-31T18:05:16.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T18:05:16.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T18:05:16.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T18:05:16.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T18:05:16.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T18:05:16.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T18:04:51', tmtdew=23.45, humidity=21.2, cloud=0.0, wind=28.21, temperature=24.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T16:04:12.144', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T18:05:16.540 [DEBUG] [Thread-132242] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:05:16.627 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T18:05:16.640 [DEBUG] [Thread-132245] [transport.py] [_log()] starting thread (client mode): 0xb957a740
2025-12-31T18:05:16.640 [DEBUG] [Thread-132245] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:05:16.655 [DEBUG] [Thread-132245] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T18:05:16.655 [INFO] [Thread-132245] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T18:05:16.663 [DEBUG] [Thread-132245] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:05:16.663 [DEBUG] [Thread-132245] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T18:05:16.663 [DEBUG] [Thread-132245] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:05:16.663 [DEBUG] [Thread-132245] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:05:16.663 [DEBUG] [Thread-132245] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:05:16.663 [DEBUG] [Thread-132245] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:05:16.663 [DEBUG] [Thread-132245] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:05:16.663 [DEBUG] [Thread-132245] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:05:16.663 [DEBUG] [Thread-132245] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:05:16.663 [DEBUG] [Thread-132245] [transport.py] [_log()] client lang: <none>
2025-12-31T18:05:16.663 [DEBUG] [Thread-132245] [transport.py] [_log()] server lang: <none>
2025-12-31T18:05:16.663 [DEBUG] [Thread-132245] [transport.py] [_log()] kex follows: False
2025-12-31T18:05:16.663 [DEBUG] [Thread-132245] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:05:16.663 [DEBUG] [Thread-132245] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:05:16.663 [DEBUG] [Thread-132245] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:05:16.664 [DEBUG] [Thread-132245] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:05:16.664 [DEBUG] [Thread-132245] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:05:16.664 [DEBUG] [Thread-132245] [transport.py] [_log()] Compression: none
2025-12-31T18:05:16.664 [DEBUG] [Thread-132245] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:05:16.721 [DEBUG] [Thread-132245] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:05:16.721 [DEBUG] [Thread-132245] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:05:16.722 [DEBUG] [Thread-132245] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T18:05:16.722 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T18:05:16.723 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:05:16.777 [DEBUG] [Thread-132245] [transport.py] [_log()] userauth is OK
2025-12-31T18:05:16.777 [DEBUG] [Thread-132245] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:05:16.778 [DEBUG] [Thread-132245] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:05:16.778 [DEBUG] [Thread-132245] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T18:05:16.778 [DEBUG] [Thread-132245] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:05:16.796 [INFO] [Thread-132245] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:05:16.797 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T18:05:16.798 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:05:17.642 [DEBUG] [Thread-132245] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:05:17.643 [DEBUG] [Thread-132245] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:05:17.691 [DEBUG] [Thread-132245] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:05:17.691 [DEBUG] [Thread-132245] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:05:17.700 [DEBUG] [Thread-132245] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:05:17.709 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:05:17.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T18:05:17.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T18:05:17.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:05:17.727 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:05:17.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:05:17.735 [DEBUG] [Thread-132245] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:05:21.948 [DEBUG] [Thread-132247 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:05:29.495 [DEBUG] [Thread-132248 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:05:29.804 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:05:29.805 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:05:36.999 [DEBUG] [Thread-132249 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:05:47.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T18:05:47.749 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T18:05:47.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T18:05:48.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 18, 5, 24), 23.4, 21.26, 0.0, 27.95, 24.01, 0, 0, 0, 2, 0, 0),)
2025-12-31T18:05:48.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 18:05:24
2025-12-31T18:05:48.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T18:05:48.791 [DEBUG] [Thread-132250] [transport.py] [_log()] starting thread (client mode): 0xb6b60df0
2025-12-31T18:05:48.792 [DEBUG] [Thread-132250] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:05:48.811 [DEBUG] [Thread-132250] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T18:05:48.811 [INFO] [Thread-132250] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T18:05:48.814 [DEBUG] [Thread-132250] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:05:48.814 [DEBUG] [Thread-132250] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T18:05:48.814 [DEBUG] [Thread-132250] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:05:48.814 [DEBUG] [Thread-132250] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:05:48.814 [DEBUG] [Thread-132250] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:05:48.814 [DEBUG] [Thread-132250] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:05:48.814 [DEBUG] [Thread-132250] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:05:48.814 [DEBUG] [Thread-132250] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:05:48.814 [DEBUG] [Thread-132250] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:05:48.814 [DEBUG] [Thread-132250] [transport.py] [_log()] client lang: <none>
2025-12-31T18:05:48.814 [DEBUG] [Thread-132250] [transport.py] [_log()] server lang: <none>
2025-12-31T18:05:48.814 [DEBUG] [Thread-132250] [transport.py] [_log()] kex follows: False
2025-12-31T18:05:48.814 [DEBUG] [Thread-132250] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:05:48.814 [DEBUG] [Thread-132250] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:05:48.815 [DEBUG] [Thread-132250] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:05:48.815 [DEBUG] [Thread-132250] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:05:48.815 [DEBUG] [Thread-132250] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:05:48.815 [DEBUG] [Thread-132250] [transport.py] [_log()] Compression: none
2025-12-31T18:05:48.815 [DEBUG] [Thread-132250] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:05:48.831 [DEBUG] [Thread-132250] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:05:48.831 [DEBUG] [Thread-132250] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:05:48.831 [DEBUG] [Thread-132250] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T18:05:48.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T18:05:48.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:05:48.832 [DEBUG] [Thread-132250] [transport.py] [_log()] userauth is OK
2025-12-31T18:05:48.832 [DEBUG] [Thread-132250] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:05:48.832 [DEBUG] [Thread-132250] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:05:48.832 [DEBUG] [Thread-132250] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T18:05:48.832 [DEBUG] [Thread-132250] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:05:48.844 [INFO] [Thread-132250] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:05:48.844 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:05:49.441 [DEBUG] [Thread-132250] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:05:49.441 [DEBUG] [Thread-132250] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:05:49.441 [DEBUG] [Thread-132250] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T18:05:49.482 [DEBUG] [Thread-132250] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:05:49.482 [DEBUG] [Thread-132250] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:05:49.484 [DEBUG] [Thread-132250] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:05:49.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:05:49.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T18:05:49.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T18:05:49.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T18:05:49.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:05:49.501 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T18:05:49.501 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:05:49.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:05:49.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T18:05:49.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.670279 -999.00  +23.50  19.30     27   +3.60 1 1 1 1 1   887    0 21.52 31.87 ----- 22.1 19.3 270.8 33.2 25.9 -24.2 26.1 -23.9 26.1 -22.6 26.2 -23.4
2025-12-31T18:05:49.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T18:05:49.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T18:05:49.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.670279
2025-12-31T18:05:49.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T18:05:49.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T18:05:49.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T18:05:49.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T18:05:49.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T18:05:49.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T18:05:24', tmtdew=23.4, humidity=21.26, cloud=0.0, wind=27.95, temperature=24.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T16:05:12.106', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T18:05:49.503 [DEBUG] [Thread-132250] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:05:49.577 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T18:05:49.590 [DEBUG] [Thread-132253] [transport.py] [_log()] starting thread (client mode): 0xb95f2d40
2025-12-31T18:05:49.590 [DEBUG] [Thread-132253] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:05:49.605 [DEBUG] [Thread-132253] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T18:05:49.605 [INFO] [Thread-132253] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T18:05:49.612 [DEBUG] [Thread-132253] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:05:49.612 [DEBUG] [Thread-132253] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T18:05:49.612 [DEBUG] [Thread-132253] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:05:49.612 [DEBUG] [Thread-132253] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:05:49.612 [DEBUG] [Thread-132253] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:05:49.612 [DEBUG] [Thread-132253] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:05:49.612 [DEBUG] [Thread-132253] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:05:49.612 [DEBUG] [Thread-132253] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:05:49.612 [DEBUG] [Thread-132253] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:05:49.613 [DEBUG] [Thread-132253] [transport.py] [_log()] client lang: <none>
2025-12-31T18:05:49.613 [DEBUG] [Thread-132253] [transport.py] [_log()] server lang: <none>
2025-12-31T18:05:49.613 [DEBUG] [Thread-132253] [transport.py] [_log()] kex follows: False
2025-12-31T18:05:49.613 [DEBUG] [Thread-132253] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:05:49.613 [DEBUG] [Thread-132253] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:05:49.613 [DEBUG] [Thread-132253] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:05:49.613 [DEBUG] [Thread-132253] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:05:49.613 [DEBUG] [Thread-132253] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:05:49.613 [DEBUG] [Thread-132253] [transport.py] [_log()] Compression: none
2025-12-31T18:05:49.613 [DEBUG] [Thread-132253] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:05:49.667 [DEBUG] [Thread-132253] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:05:49.667 [DEBUG] [Thread-132253] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:05:49.667 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T18:05:49.668 [DEBUG] [Thread-132253] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T18:05:49.668 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:05:49.728 [DEBUG] [Thread-132253] [transport.py] [_log()] userauth is OK
2025-12-31T18:05:49.728 [DEBUG] [Thread-132253] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:05:49.729 [DEBUG] [Thread-132253] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:05:49.729 [DEBUG] [Thread-132253] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T18:05:49.729 [DEBUG] [Thread-132253] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:05:49.743 [INFO] [Thread-132253] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:05:49.743 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T18:05:49.743 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:05:50.559 [DEBUG] [Thread-132253] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:05:50.559 [DEBUG] [Thread-132253] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:05:50.607 [DEBUG] [Thread-132253] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:05:50.607 [DEBUG] [Thread-132253] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:05:50.616 [DEBUG] [Thread-132253] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:05:50.625 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:05:50.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T18:05:50.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T18:05:50.642 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:05:50.642 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:05:50.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:05:50.650 [DEBUG] [Thread-132253] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:05:52.033 [DEBUG] [Thread-132255 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:06:07.082 [DEBUG] [Thread-132256 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:06:20.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T18:06:20.645 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T18:06:20.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T18:06:21.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 18, 5, 56), 23.38, 21.28, 0.0, 32.91, 23.83, 0, 0, 0, 2, 0, 0),)
2025-12-31T18:06:21.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 18:05:56
2025-12-31T18:06:21.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T18:06:21.657 [DEBUG] [Thread-132257] [transport.py] [_log()] starting thread (client mode): 0xb6ba0f40
2025-12-31T18:06:21.657 [DEBUG] [Thread-132257] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:06:21.678 [DEBUG] [Thread-132257] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T18:06:21.678 [INFO] [Thread-132257] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T18:06:21.681 [DEBUG] [Thread-132257] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:06:21.681 [DEBUG] [Thread-132257] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T18:06:21.681 [DEBUG] [Thread-132257] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:06:21.681 [DEBUG] [Thread-132257] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:06:21.681 [DEBUG] [Thread-132257] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:06:21.681 [DEBUG] [Thread-132257] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:06:21.681 [DEBUG] [Thread-132257] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:06:21.681 [DEBUG] [Thread-132257] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:06:21.681 [DEBUG] [Thread-132257] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:06:21.681 [DEBUG] [Thread-132257] [transport.py] [_log()] client lang: <none>
2025-12-31T18:06:21.681 [DEBUG] [Thread-132257] [transport.py] [_log()] server lang: <none>
2025-12-31T18:06:21.681 [DEBUG] [Thread-132257] [transport.py] [_log()] kex follows: False
2025-12-31T18:06:21.681 [DEBUG] [Thread-132257] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:06:21.681 [DEBUG] [Thread-132257] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:06:21.682 [DEBUG] [Thread-132257] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:06:21.682 [DEBUG] [Thread-132257] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:06:21.682 [DEBUG] [Thread-132257] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:06:21.682 [DEBUG] [Thread-132257] [transport.py] [_log()] Compression: none
2025-12-31T18:06:21.682 [DEBUG] [Thread-132257] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:06:21.697 [DEBUG] [Thread-132257] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:06:21.698 [DEBUG] [Thread-132257] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:06:21.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T18:06:21.700 [DEBUG] [Thread-132257] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T18:06:21.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:06:21.701 [DEBUG] [Thread-132257] [transport.py] [_log()] userauth is OK
2025-12-31T18:06:21.702 [DEBUG] [Thread-132257] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:06:21.702 [DEBUG] [Thread-132257] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:06:21.702 [DEBUG] [Thread-132257] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T18:06:21.702 [DEBUG] [Thread-132257] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:06:21.733 [INFO] [Thread-132257] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:06:21.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:06:22.121 [DEBUG] [Thread-132259 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:06:22.517 [DEBUG] [Thread-132257] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:06:22.517 [DEBUG] [Thread-132257] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:06:22.518 [DEBUG] [Thread-132257] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T18:06:22.558 [DEBUG] [Thread-132257] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:06:22.559 [DEBUG] [Thread-132257] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:06:22.561 [DEBUG] [Thread-132257] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:06:22.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:06:22.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T18:06:22.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T18:06:22.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T18:06:22.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:06:22.586 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T18:06:22.586 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:06:22.586 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:06:22.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T18:06:22.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.670626 -999.00  +23.60  19.74     27   +3.60 1 2 1 1 1   887    0 21.77 28.20 ----- 21.3 19.7 280.6 31.4 26.0 -23.3 26.0 -23.2 25.9 -21.7 26.1 -22.3
2025-12-31T18:06:22.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T18:06:22.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T18:06:22.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.670626
2025-12-31T18:06:22.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T18:06:22.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T18:06:22.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T18:06:22.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T18:06:22.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T18:06:22.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T18:05:56', tmtdew=23.38, humidity=21.28, cloud=0.0, wind=32.91, temperature=23.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T16:05:42.086', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T18:06:22.589 [DEBUG] [Thread-132257] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:06:22.673 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T18:06:22.684 [DEBUG] [Thread-132261] [transport.py] [_log()] starting thread (client mode): 0xb9593040
2025-12-31T18:06:22.685 [DEBUG] [Thread-132261] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:06:22.700 [DEBUG] [Thread-132261] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T18:06:22.700 [INFO] [Thread-132261] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T18:06:22.708 [DEBUG] [Thread-132261] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:06:22.708 [DEBUG] [Thread-132261] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T18:06:22.708 [DEBUG] [Thread-132261] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:06:22.708 [DEBUG] [Thread-132261] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:06:22.708 [DEBUG] [Thread-132261] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:06:22.708 [DEBUG] [Thread-132261] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:06:22.708 [DEBUG] [Thread-132261] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:06:22.708 [DEBUG] [Thread-132261] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:06:22.708 [DEBUG] [Thread-132261] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:06:22.708 [DEBUG] [Thread-132261] [transport.py] [_log()] client lang: <none>
2025-12-31T18:06:22.708 [DEBUG] [Thread-132261] [transport.py] [_log()] server lang: <none>
2025-12-31T18:06:22.708 [DEBUG] [Thread-132261] [transport.py] [_log()] kex follows: False
2025-12-31T18:06:22.708 [DEBUG] [Thread-132261] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:06:22.708 [DEBUG] [Thread-132261] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:06:22.708 [DEBUG] [Thread-132261] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:06:22.709 [DEBUG] [Thread-132261] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:06:22.709 [DEBUG] [Thread-132261] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:06:22.709 [DEBUG] [Thread-132261] [transport.py] [_log()] Compression: none
2025-12-31T18:06:22.709 [DEBUG] [Thread-132261] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:06:22.765 [DEBUG] [Thread-132261] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:06:22.765 [DEBUG] [Thread-132261] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:06:22.766 [DEBUG] [Thread-132261] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T18:06:22.766 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T18:06:22.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:06:22.821 [DEBUG] [Thread-132261] [transport.py] [_log()] userauth is OK
2025-12-31T18:06:22.821 [DEBUG] [Thread-132261] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:06:22.821 [DEBUG] [Thread-132261] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:06:22.822 [DEBUG] [Thread-132261] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T18:06:22.822 [DEBUG] [Thread-132261] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:06:22.840 [INFO] [Thread-132261] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:06: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-12-31T18:06:22.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:06:23.676 [DEBUG] [Thread-132261] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:06:23.676 [DEBUG] [Thread-132261] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:06:23.724 [DEBUG] [Thread-132261] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:06:23.724 [DEBUG] [Thread-132261] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:06:23.733 [DEBUG] [Thread-132261] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:06:23.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:06:23.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T18:06:23.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T18:06:23.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:06:23.761 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:06:23.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:06:23.769 [DEBUG] [Thread-132261] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:06:29.540 [DEBUG] [Thread-132263 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:06:29.943 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:06:29.944 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:06:37.155 [DEBUG] [Thread-132264 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:06:52.213 [DEBUG] [Thread-132265 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:06:53.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T18:06:53.792 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T18:06:53.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T18:06:54.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 18, 6, 28), 23.36, 21.3, 0.0, 31.05, 23.81, 0, 0, 0, 2, 0, 0),)
2025-12-31T18:06:54.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 18:06:28
2025-12-31T18:06:54.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T18:06:54.768 [DEBUG] [Thread-132266] [transport.py] [_log()] starting thread (client mode): 0xb9579210
2025-12-31T18:06:54.768 [DEBUG] [Thread-132266] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:06:54.789 [DEBUG] [Thread-132266] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T18:06:54.789 [INFO] [Thread-132266] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T18:06:54.792 [DEBUG] [Thread-132266] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:06:54.792 [DEBUG] [Thread-132266] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T18:06:54.792 [DEBUG] [Thread-132266] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:06:54.792 [DEBUG] [Thread-132266] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:06:54.793 [DEBUG] [Thread-132266] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:06:54.793 [DEBUG] [Thread-132266] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:06:54.793 [DEBUG] [Thread-132266] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:06:54.793 [DEBUG] [Thread-132266] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:06:54.793 [DEBUG] [Thread-132266] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:06:54.793 [DEBUG] [Thread-132266] [transport.py] [_log()] client lang: <none>
2025-12-31T18:06:54.793 [DEBUG] [Thread-132266] [transport.py] [_log()] server lang: <none>
2025-12-31T18:06:54.793 [DEBUG] [Thread-132266] [transport.py] [_log()] kex follows: False
2025-12-31T18:06:54.793 [DEBUG] [Thread-132266] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:06:54.793 [DEBUG] [Thread-132266] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:06:54.793 [DEBUG] [Thread-132266] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:06:54.793 [DEBUG] [Thread-132266] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:06:54.794 [DEBUG] [Thread-132266] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:06:54.794 [DEBUG] [Thread-132266] [transport.py] [_log()] Compression: none
2025-12-31T18:06:54.794 [DEBUG] [Thread-132266] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:06:54.812 [DEBUG] [Thread-132266] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:06:54.813 [DEBUG] [Thread-132266] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:06:54.814 [DEBUG] [Thread-132266] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T18:06:54.814 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T18:06:54.815 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:06:54.816 [DEBUG] [Thread-132266] [transport.py] [_log()] userauth is OK
2025-12-31T18:06:54.816 [DEBUG] [Thread-132266] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:06:54.816 [DEBUG] [Thread-132266] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:06:54.816 [DEBUG] [Thread-132266] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T18:06:54.817 [DEBUG] [Thread-132266] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:06:54.840 [INFO] [Thread-132266] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:06:54.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:06:55.501 [DEBUG] [Thread-132266] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:06:55.501 [DEBUG] [Thread-132266] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:06:55.502 [DEBUG] [Thread-132266] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T18:06:55.542 [DEBUG] [Thread-132266] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:06:55.543 [DEBUG] [Thread-132266] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:06:55.546 [DEBUG] [Thread-132266] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:06:55.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:06:55.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T18:06:55.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T18:06:55.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T18:06:55.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:06:55.565 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T18:06:55.565 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:06:55.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:06:55.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T18:06:55.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.670973 -999.00  +23.80  20.82     27   +3.60 1 2 1 1 1   887    0 21.23 21.51 ----- 21.7 20.8 276.0 26.7 26.0 -23.1 26.2 -22.4 26.1 -20.6 26.4 -21.9
2025-12-31T18:06:55.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T18:06:55.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T18:06:55.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.670973
2025-12-31T18:06:55.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T18:06:55.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T18:06:55.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T18:06:55.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T18:06:55.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T18:06:55.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T18:06:28', tmtdew=23.36, humidity=21.3, cloud=0.0, wind=31.05, temperature=23.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T16:06:12.067', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T18:06:55.566 [DEBUG] [Thread-132266] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:06:55.658 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T18:06:55.670 [DEBUG] [Thread-132269] [transport.py] [_log()] starting thread (client mode): 0xb6b60250
2025-12-31T18:06:55.670 [DEBUG] [Thread-132269] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:06:55.685 [DEBUG] [Thread-132269] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T18:06:55.685 [INFO] [Thread-132269] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T18:06:55.693 [DEBUG] [Thread-132269] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:06:55.693 [DEBUG] [Thread-132269] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T18:06:55.693 [DEBUG] [Thread-132269] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:06:55.693 [DEBUG] [Thread-132269] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:06:55.693 [DEBUG] [Thread-132269] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:06:55.693 [DEBUG] [Thread-132269] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:06:55.693 [DEBUG] [Thread-132269] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:06:55.693 [DEBUG] [Thread-132269] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:06:55.693 [DEBUG] [Thread-132269] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:06:55.693 [DEBUG] [Thread-132269] [transport.py] [_log()] client lang: <none>
2025-12-31T18:06:55.693 [DEBUG] [Thread-132269] [transport.py] [_log()] server lang: <none>
2025-12-31T18:06:55.693 [DEBUG] [Thread-132269] [transport.py] [_log()] kex follows: False
2025-12-31T18:06:55.693 [DEBUG] [Thread-132269] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:06:55.693 [DEBUG] [Thread-132269] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:06:55.694 [DEBUG] [Thread-132269] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:06:55.694 [DEBUG] [Thread-132269] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:06:55.694 [DEBUG] [Thread-132269] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:06:55.694 [DEBUG] [Thread-132269] [transport.py] [_log()] Compression: none
2025-12-31T18:06:55.694 [DEBUG] [Thread-132269] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:06:55.758 [DEBUG] [Thread-132269] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:06:55.758 [DEBUG] [Thread-132269] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:06:55.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T18:06:55.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:06:55.760 [DEBUG] [Thread-132269] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T18:06:55.817 [DEBUG] [Thread-132269] [transport.py] [_log()] userauth is OK
2025-12-31T18:06:55.817 [DEBUG] [Thread-132269] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:06:55.817 [DEBUG] [Thread-132269] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:06:55.817 [DEBUG] [Thread-132269] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T18:06:55.817 [DEBUG] [Thread-132269] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:06:55.837 [INFO] [Thread-132269] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:06:55.837 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T18:06:55.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:06:56.674 [DEBUG] [Thread-132269] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:06:56.683 [DEBUG] [Thread-132269] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:06:56.722 [DEBUG] [Thread-132269] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:06:56.722 [DEBUG] [Thread-132269] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:06:56.732 [DEBUG] [Thread-132269] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:06:56.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:06:56.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T18:06:56.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T18:06:56.759 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:06:56.759 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:06:56.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:06:56.768 [DEBUG] [Thread-132269] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:07:07.244 [DEBUG] [Thread-132271 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:07:22.292 [DEBUG] [Thread-132272 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:07:26.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T18:07:26.770 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T18:07:26.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T18:07:27.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 18, 6, 28), 23.36, 21.3, 0.0, 31.05, 23.81, 0, 0, 0, 2, 0, 0),)
2025-12-31T18:07:27.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 18:06:28
2025-12-31T18:07:27.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T18:07:27.743 [DEBUG] [Thread-132273] [transport.py] [_log()] starting thread (client mode): 0xb6bba7a0
2025-12-31T18:07:27.743 [DEBUG] [Thread-132273] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:07:27.755 [DEBUG] [Thread-132273] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T18:07:27.755 [INFO] [Thread-132273] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T18:07:27.759 [DEBUG] [Thread-132273] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:07:27.759 [DEBUG] [Thread-132273] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T18:07:27.759 [DEBUG] [Thread-132273] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:07:27.759 [DEBUG] [Thread-132273] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:07:27.759 [DEBUG] [Thread-132273] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:07:27.759 [DEBUG] [Thread-132273] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:07:27.759 [DEBUG] [Thread-132273] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:07:27.759 [DEBUG] [Thread-132273] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:07:27.759 [DEBUG] [Thread-132273] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:07:27.759 [DEBUG] [Thread-132273] [transport.py] [_log()] client lang: <none>
2025-12-31T18:07:27.759 [DEBUG] [Thread-132273] [transport.py] [_log()] server lang: <none>
2025-12-31T18:07:27.759 [DEBUG] [Thread-132273] [transport.py] [_log()] kex follows: False
2025-12-31T18:07:27.759 [DEBUG] [Thread-132273] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:07:27.759 [DEBUG] [Thread-132273] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:07:27.759 [DEBUG] [Thread-132273] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:07:27.759 [DEBUG] [Thread-132273] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:07:27.759 [DEBUG] [Thread-132273] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:07:27.759 [DEBUG] [Thread-132273] [transport.py] [_log()] Compression: none
2025-12-31T18:07:27.759 [DEBUG] [Thread-132273] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:07:27.780 [DEBUG] [Thread-132273] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:07:27.780 [DEBUG] [Thread-132273] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:07:27.781 [DEBUG] [Thread-132273] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T18:07:27.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T18:07:27.782 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:07:27.783 [DEBUG] [Thread-132273] [transport.py] [_log()] userauth is OK
2025-12-31T18:07:27.783 [DEBUG] [Thread-132273] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:07:27.784 [DEBUG] [Thread-132273] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:07:27.784 [DEBUG] [Thread-132273] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T18:07:27.784 [DEBUG] [Thread-132273] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:07:27.807 [INFO] [Thread-132273] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:07:27.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:07:28.634 [DEBUG] [Thread-132273] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:07:28.634 [DEBUG] [Thread-132273] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:07:28.634 [DEBUG] [Thread-132273] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T18:07:28.675 [DEBUG] [Thread-132273] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:07:28.675 [DEBUG] [Thread-132273] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:07:28.679 [DEBUG] [Thread-132273] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:07:28.691 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:07:28.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T18:07:28.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T18:07:28.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T18:07:28.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:07:28.703 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T18:07:28.703 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:07:28.703 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:07:28.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T18:07:28.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.671321 -999.00  +23.90  17.38     26   +3.60 1 2 1 1 1   887    0 21.25 16.86 ----- 17.8 17.4 271.8 24.0 26.1 -23.4 26.3 -22.4 26.3 -19.8 26.5 -22.3
2025-12-31T18:07:28.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T18:07:28.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T18:07:28.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.671321
2025-12-31T18:07:28.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T18:07:28.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T18:07:28.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T18:07:28.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T18:07:28.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T18:07:28.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T18:06:28', tmtdew=23.36, humidity=21.3, cloud=0.0, wind=31.05, temperature=23.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T16:06:42.134', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T18:07:28.706 [DEBUG] [Thread-132273] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:07:28.791 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T18:07:28.802 [DEBUG] [Thread-132276] [transport.py] [_log()] starting thread (client mode): 0xb6b63910
2025-12-31T18:07:28.802 [DEBUG] [Thread-132276] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:07:28.818 [DEBUG] [Thread-132276] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T18:07:28.818 [INFO] [Thread-132276] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T18:07:28.825 [DEBUG] [Thread-132276] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:07:28.826 [DEBUG] [Thread-132276] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T18:07:28.826 [DEBUG] [Thread-132276] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:07:28.826 [DEBUG] [Thread-132276] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:07:28.826 [DEBUG] [Thread-132276] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:07:28.826 [DEBUG] [Thread-132276] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:07:28.826 [DEBUG] [Thread-132276] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:07:28.826 [DEBUG] [Thread-132276] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:07:28.827 [DEBUG] [Thread-132276] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:07:28.827 [DEBUG] [Thread-132276] [transport.py] [_log()] client lang: <none>
2025-12-31T18:07:28.827 [DEBUG] [Thread-132276] [transport.py] [_log()] server lang: <none>
2025-12-31T18:07:28.827 [DEBUG] [Thread-132276] [transport.py] [_log()] kex follows: False
2025-12-31T18:07:28.827 [DEBUG] [Thread-132276] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:07:28.827 [DEBUG] [Thread-132276] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:07:28.827 [DEBUG] [Thread-132276] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:07:28.828 [DEBUG] [Thread-132276] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:07:28.828 [DEBUG] [Thread-132276] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:07:28.828 [DEBUG] [Thread-132276] [transport.py] [_log()] Compression: none
2025-12-31T18:07:28.828 [DEBUG] [Thread-132276] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:07:28.886 [DEBUG] [Thread-132276] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:07:28.887 [DEBUG] [Thread-132276] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:07:28.888 [DEBUG] [Thread-132276] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T18:07:28.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T18:07:28.889 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:07:28.941 [DEBUG] [Thread-132276] [transport.py] [_log()] userauth is OK
2025-12-31T18:07:28.942 [DEBUG] [Thread-132276] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:07:28.942 [DEBUG] [Thread-132276] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:07:28.942 [DEBUG] [Thread-132276] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T18:07:28.942 [DEBUG] [Thread-132276] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:07:28.961 [INFO] [Thread-132276] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:07:28.962 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T18:07:28.962 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:07:29.593 [DEBUG] [Thread-132278 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:07:29.811 [DEBUG] [Thread-132276] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:07:29.812 [DEBUG] [Thread-132276] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:07:29.859 [DEBUG] [Thread-132276] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:07:29.859 [DEBUG] [Thread-132276] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:07:29.868 [DEBUG] [Thread-132276] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:07:29.878 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:07: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')
2025-12-31T18:07:29.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T18:07:29.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:07:29.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:07:29.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:07:29.905 [DEBUG] [Thread-132276] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:07:30.084 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:07:30.085 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:07:37.327 [DEBUG] [Thread-132279 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:07:52.375 [DEBUG] [Thread-132280 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:07:59.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T18:07:59.925 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T18:07:59.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T18:08:00.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 18, 7, 32), 23.29, 21.4, 0.0, 28.99, 23.81, 0, 0, 0, 2, 0, 0),)
2025-12-31T18:08:00.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 18:07:32
2025-12-31T18:08:00.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T18:08:00.913 [DEBUG] [Thread-132281] [transport.py] [_log()] starting thread (client mode): 0xb957b4c0
2025-12-31T18:08:00.913 [DEBUG] [Thread-132281] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:08:00.933 [DEBUG] [Thread-132281] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T18:08:00.933 [INFO] [Thread-132281] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T18:08:00.936 [DEBUG] [Thread-132281] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:08:00.937 [DEBUG] [Thread-132281] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T18:08:00.937 [DEBUG] [Thread-132281] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:08:00.937 [DEBUG] [Thread-132281] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:08:00.937 [DEBUG] [Thread-132281] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:08:00.937 [DEBUG] [Thread-132281] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:08:00.937 [DEBUG] [Thread-132281] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:08:00.937 [DEBUG] [Thread-132281] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:08:00.937 [DEBUG] [Thread-132281] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:08:00.937 [DEBUG] [Thread-132281] [transport.py] [_log()] client lang: <none>
2025-12-31T18:08:00.937 [DEBUG] [Thread-132281] [transport.py] [_log()] server lang: <none>
2025-12-31T18:08:00.937 [DEBUG] [Thread-132281] [transport.py] [_log()] kex follows: False
2025-12-31T18:08:00.937 [DEBUG] [Thread-132281] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:08:00.937 [DEBUG] [Thread-132281] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:08:00.937 [DEBUG] [Thread-132281] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:08:00.937 [DEBUG] [Thread-132281] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:08:00.937 [DEBUG] [Thread-132281] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:08:00.937 [DEBUG] [Thread-132281] [transport.py] [_log()] Compression: none
2025-12-31T18:08:00.937 [DEBUG] [Thread-132281] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:08:00.952 [DEBUG] [Thread-132281] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:08:00.952 [DEBUG] [Thread-132281] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:08:00.953 [DEBUG] [Thread-132281] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T18:08:00.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T18:08:00.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:08:00.954 [DEBUG] [Thread-132281] [transport.py] [_log()] userauth is OK
2025-12-31T18:08:00.955 [DEBUG] [Thread-132281] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:08:00.955 [DEBUG] [Thread-132281] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:08:00.955 [DEBUG] [Thread-132281] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T18:08:00.955 [DEBUG] [Thread-132281] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:08:00.987 [INFO] [Thread-132281] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:08:00.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:08:01.622 [DEBUG] [Thread-132281] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:08:01.623 [DEBUG] [Thread-132281] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:08:01.623 [DEBUG] [Thread-132281] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T18:08:01.664 [DEBUG] [Thread-132281] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:08:01.664 [DEBUG] [Thread-132281] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:08:01.667 [DEBUG] [Thread-132281] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:08:01.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:08:01.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T18:08:01.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T18:08:01.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T18:08:01.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:08:01.689 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T18:08:01.690 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:08:01.690 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:08:01.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T18:08:01.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.671668 -999.00  +23.90  15.59     26   +3.60 1 2 1 1 1   887    0 20.53 12.47 ----- 17.0 15.6 263.2 22.6 26.1 -23.6 26.3 -22.8 26.4 -20.9 26.6 -22.2
2025-12-31T18:08:01.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T18:08:01.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T18:08:01.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.671668
2025-12-31T18:08:01.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T18:08:01.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T18:08:01.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T18:08:01.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T18:08:01.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T18:08:01.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T18:07:32', tmtdew=23.29, humidity=21.4, cloud=0.0, wind=28.99, temperature=23.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T16:07:12.115', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T18:08:01.693 [DEBUG] [Thread-132281] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:08:01.790 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T18:08:01.802 [DEBUG] [Thread-132284] [transport.py] [_log()] starting thread (client mode): 0xb9592800
2025-12-31T18:08:01.803 [DEBUG] [Thread-132284] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:08:01.822 [DEBUG] [Thread-132284] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T18:08:01.822 [INFO] [Thread-132284] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T18:08:01.829 [DEBUG] [Thread-132284] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:08:01.830 [DEBUG] [Thread-132284] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T18:08:01.830 [DEBUG] [Thread-132284] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:08:01.830 [DEBUG] [Thread-132284] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:08:01.830 [DEBUG] [Thread-132284] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:08:01.830 [DEBUG] [Thread-132284] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:08:01.830 [DEBUG] [Thread-132284] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:08:01.830 [DEBUG] [Thread-132284] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:08:01.830 [DEBUG] [Thread-132284] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:08:01.830 [DEBUG] [Thread-132284] [transport.py] [_log()] client lang: <none>
2025-12-31T18:08:01.830 [DEBUG] [Thread-132284] [transport.py] [_log()] server lang: <none>
2025-12-31T18:08:01.830 [DEBUG] [Thread-132284] [transport.py] [_log()] kex follows: False
2025-12-31T18:08:01.830 [DEBUG] [Thread-132284] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:08:01.830 [DEBUG] [Thread-132284] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:08:01.830 [DEBUG] [Thread-132284] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:08:01.830 [DEBUG] [Thread-132284] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:08:01.830 [DEBUG] [Thread-132284] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:08:01.830 [DEBUG] [Thread-132284] [transport.py] [_log()] Compression: none
2025-12-31T18:08:01.830 [DEBUG] [Thread-132284] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:08:01.889 [DEBUG] [Thread-132284] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:08:01.890 [DEBUG] [Thread-132284] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:08:01.891 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T18:08:01.891 [DEBUG] [Thread-132284] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T18:08:01.892 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:08:01.945 [DEBUG] [Thread-132284] [transport.py] [_log()] userauth is OK
2025-12-31T18:08:01.945 [DEBUG] [Thread-132284] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:08:01.946 [DEBUG] [Thread-132284] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:08:01.946 [DEBUG] [Thread-132284] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T18:08:01.946 [DEBUG] [Thread-132284] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:08:01.965 [INFO] [Thread-132284] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:08:01.965 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T18:08:01.967 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:08:02.833 [DEBUG] [Thread-132284] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:08:02.833 [DEBUG] [Thread-132284] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:08:02.881 [DEBUG] [Thread-132284] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:08:02.881 [DEBUG] [Thread-132284] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:08:02.891 [DEBUG] [Thread-132284] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:08:02.900 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:08:02.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T18:08:02.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T18:08:02.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:08:02.919 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:08:02.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:08:02.927 [DEBUG] [Thread-132284] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:08:07.414 [DEBUG] [Thread-132286 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:08:22.465 [DEBUG] [Thread-132287 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:08:29.646 [DEBUG] [Thread-132288 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:08:30.223 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:08:30.225 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:08:32.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T18:08:32.946 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T18:08:32.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T18:08:33.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 18, 8, 4), 23.28, 21.43, 0.0, 27.56, 23.86, 0, 0, 0, 2, 0, 0),)
2025-12-31T18:08:33.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 18:08:04
2025-12-31T18:08:33.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T18:08:33.926 [DEBUG] [Thread-132289] [transport.py] [_log()] starting thread (client mode): 0xb6ba2c20
2025-12-31T18:08:33.927 [DEBUG] [Thread-132289] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:08:33.946 [DEBUG] [Thread-132289] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T18:08:33.946 [INFO] [Thread-132289] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T18:08:33.948 [DEBUG] [Thread-132289] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:08:33.948 [DEBUG] [Thread-132289] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T18:08:33.948 [DEBUG] [Thread-132289] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:08:33.948 [DEBUG] [Thread-132289] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:08:33.948 [DEBUG] [Thread-132289] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:08:33.948 [DEBUG] [Thread-132289] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:08:33.948 [DEBUG] [Thread-132289] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:08:33.948 [DEBUG] [Thread-132289] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:08:33.948 [DEBUG] [Thread-132289] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:08:33.948 [DEBUG] [Thread-132289] [transport.py] [_log()] client lang: <none>
2025-12-31T18:08:33.948 [DEBUG] [Thread-132289] [transport.py] [_log()] server lang: <none>
2025-12-31T18:08:33.948 [DEBUG] [Thread-132289] [transport.py] [_log()] kex follows: False
2025-12-31T18:08:33.948 [DEBUG] [Thread-132289] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:08:33.948 [DEBUG] [Thread-132289] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:08:33.948 [DEBUG] [Thread-132289] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:08:33.948 [DEBUG] [Thread-132289] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:08:33.948 [DEBUG] [Thread-132289] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:08:33.948 [DEBUG] [Thread-132289] [transport.py] [_log()] Compression: none
2025-12-31T18:08:33.948 [DEBUG] [Thread-132289] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:08:33.958 [DEBUG] [Thread-132289] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:08:33.958 [DEBUG] [Thread-132289] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:08:33.958 [DEBUG] [Thread-132289] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T18:08:33.958 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T18:08:33.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:08:33.960 [DEBUG] [Thread-132289] [transport.py] [_log()] userauth is OK
2025-12-31T18:08:33.960 [DEBUG] [Thread-132289] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:08:33.960 [DEBUG] [Thread-132289] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:08:33.960 [DEBUG] [Thread-132289] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T18:08:33.960 [DEBUG] [Thread-132289] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:08:33.982 [INFO] [Thread-132289] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:08:33.983 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:08:34.768 [DEBUG] [Thread-132289] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:08:34.768 [DEBUG] [Thread-132289] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:08:34.769 [DEBUG] [Thread-132289] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T18:08:34.811 [DEBUG] [Thread-132289] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:08:34.811 [DEBUG] [Thread-132289] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:08:34.815 [DEBUG] [Thread-132289] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:08:34.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:08:34.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T18:08:34.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T18:08:34.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T18:08:34.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:08:34.840 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T18:08:34.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:08:34.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:08:34.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T18:08:34.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.672015 -999.00  +24.00  26.51     26   +3.80 1 2 1 1 1   887    0 21.23 6.86 ----- 29.2 26.5 276.4 31.7 26.2 -24.0 26.4 -22.8 26.6 -20.5 26.7 -22.2
2025-12-31T18:08:34.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T18:08:34.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T18:08:34.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.672015
2025-12-31T18:08:34.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T18:08:34.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T18:08:34.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T18:08:34.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T18:08:34.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T18:08:34.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T18:08:04', tmtdew=23.28, humidity=21.43, cloud=0.0, wind=27.56, temperature=23.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T16:07:42.096', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T18:08:34.843 [DEBUG] [Thread-132289] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:08:34.927 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T18:08:34.940 [DEBUG] [Thread-132292] [transport.py] [_log()] starting thread (client mode): 0xb9593e50
2025-12-31T18:08:34.940 [DEBUG] [Thread-132292] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:08:34.954 [DEBUG] [Thread-132292] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T18:08:34.954 [INFO] [Thread-132292] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T18:08:34.962 [DEBUG] [Thread-132292] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:08:34.962 [DEBUG] [Thread-132292] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T18:08:34.962 [DEBUG] [Thread-132292] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:08:34.962 [DEBUG] [Thread-132292] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:08:34.962 [DEBUG] [Thread-132292] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:08:34.963 [DEBUG] [Thread-132292] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:08:34.963 [DEBUG] [Thread-132292] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:08:34.963 [DEBUG] [Thread-132292] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:08:34.963 [DEBUG] [Thread-132292] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:08:34.963 [DEBUG] [Thread-132292] [transport.py] [_log()] client lang: <none>
2025-12-31T18:08:34.963 [DEBUG] [Thread-132292] [transport.py] [_log()] server lang: <none>
2025-12-31T18:08:34.963 [DEBUG] [Thread-132292] [transport.py] [_log()] kex follows: False
2025-12-31T18:08:34.963 [DEBUG] [Thread-132292] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:08:34.963 [DEBUG] [Thread-132292] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:08:34.963 [DEBUG] [Thread-132292] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:08:34.963 [DEBUG] [Thread-132292] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:08:34.963 [DEBUG] [Thread-132292] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:08:34.963 [DEBUG] [Thread-132292] [transport.py] [_log()] Compression: none
2025-12-31T18:08:34.963 [DEBUG] [Thread-132292] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:08:35.025 [DEBUG] [Thread-132292] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:08:35.026 [DEBUG] [Thread-132292] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:08:35.027 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T18:08:35.027 [DEBUG] [Thread-132292] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T18:08:35.028 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:08:35.082 [DEBUG] [Thread-132292] [transport.py] [_log()] userauth is OK
2025-12-31T18:08:35.082 [DEBUG] [Thread-132292] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:08:35.082 [DEBUG] [Thread-132292] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:08:35.082 [DEBUG] [Thread-132292] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T18:08:35.082 [DEBUG] [Thread-132292] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:08:35.101 [INFO] [Thread-132292] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:08:35.102 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T18:08:35.102 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:08:35.966 [DEBUG] [Thread-132292] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:08:35.966 [DEBUG] [Thread-132292] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:08:36.014 [DEBUG] [Thread-132292] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:08:36.014 [DEBUG] [Thread-132292] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:08:36.023 [DEBUG] [Thread-132292] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:08:36.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:08:36.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T18:08:36.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T18:08:36.051 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:08:36.051 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:08:36.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:08:36.060 [DEBUG] [Thread-132292] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:08:37.493 [DEBUG] [Thread-132294 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:08:52.538 [DEBUG] [Thread-132295 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:09:06.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T18:09:06.083 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T18:09:06.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T18:09:06.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 18, 8, 36), 23.5, 21.36, 0.0, 33.58, 24.36, 0, 0, 0, 2, 0, 0),)
2025-12-31T18:09:06.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 18:08:36
2025-12-31T18:09:06.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T18:09:07.074 [DEBUG] [Thread-132296] [transport.py] [_log()] starting thread (client mode): 0xb95f14b0
2025-12-31T18:09:07.074 [DEBUG] [Thread-132296] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:09:07.097 [DEBUG] [Thread-132296] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T18:09:07.097 [INFO] [Thread-132296] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T18:09:07.101 [DEBUG] [Thread-132296] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:09:07.101 [DEBUG] [Thread-132296] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T18:09:07.101 [DEBUG] [Thread-132296] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:09:07.101 [DEBUG] [Thread-132296] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:09:07.101 [DEBUG] [Thread-132296] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:09:07.101 [DEBUG] [Thread-132296] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:09:07.101 [DEBUG] [Thread-132296] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:09:07.102 [DEBUG] [Thread-132296] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:09:07.102 [DEBUG] [Thread-132296] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:09:07.102 [DEBUG] [Thread-132296] [transport.py] [_log()] client lang: <none>
2025-12-31T18:09:07.102 [DEBUG] [Thread-132296] [transport.py] [_log()] server lang: <none>
2025-12-31T18:09:07.102 [DEBUG] [Thread-132296] [transport.py] [_log()] kex follows: False
2025-12-31T18:09:07.102 [DEBUG] [Thread-132296] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:09:07.102 [DEBUG] [Thread-132296] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:09:07.102 [DEBUG] [Thread-132296] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:09:07.102 [DEBUG] [Thread-132296] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:09:07.102 [DEBUG] [Thread-132296] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:09:07.102 [DEBUG] [Thread-132296] [transport.py] [_log()] Compression: none
2025-12-31T18:09:07.103 [DEBUG] [Thread-132296] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:09:07.125 [DEBUG] [Thread-132296] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:09:07.126 [DEBUG] [Thread-132296] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:09:07.126 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T18:09:07.127 [DEBUG] [Thread-132296] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T18:09:07.128 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:09:07.130 [DEBUG] [Thread-132296] [transport.py] [_log()] userauth is OK
2025-12-31T18:09:07.131 [DEBUG] [Thread-132296] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:09:07.131 [DEBUG] [Thread-132296] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:09:07.131 [DEBUG] [Thread-132296] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T18:09:07.131 [DEBUG] [Thread-132296] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:09:07.169 [INFO] [Thread-132296] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:09:07.171 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:09:07.570 [DEBUG] [Thread-132298 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:09:07.847 [DEBUG] [Thread-132296] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:09:07.847 [DEBUG] [Thread-132296] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:09:07.848 [DEBUG] [Thread-132296] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T18:09:07.887 [DEBUG] [Thread-132296] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:09:07.888 [DEBUG] [Thread-132296] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:09:07.890 [DEBUG] [Thread-132296] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:09:07.902 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:09:07.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T18:09:07.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T18:09:07.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T18:09:07.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:09:07.911 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T18:09:07.911 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:09:07.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:09:07.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T18:09:07.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.672362 -999.00  +23.70  26.68     27   +3.70 1 2 1 1 1   887    0 20.12 0.14 ----- 24.8 26.7 283.4 34.1 26.1 -24.2 26.4 -22.9 26.6 -22.2 26.8 -22.9
2025-12-31T18:09:07.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T18:09:07.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T18:09:07.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.672362
2025-12-31T18:09:07.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T18:09:07.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T18:09:07.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T18:09:07.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T18:09:07.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T18:09:07.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T18:08:36', tmtdew=23.5, humidity=21.36, cloud=0.0, wind=33.58, temperature=24.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T16:08:12.077', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T18:09:07.913 [DEBUG] [Thread-132296] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:09:07.997 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T18:09:08.010 [DEBUG] [Thread-132300] [transport.py] [_log()] starting thread (client mode): 0xb957b4c0
2025-12-31T18:09:08.010 [DEBUG] [Thread-132300] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:09:08.026 [DEBUG] [Thread-132300] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T18:09:08.026 [INFO] [Thread-132300] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T18:09:08.036 [DEBUG] [Thread-132300] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:09:08.037 [DEBUG] [Thread-132300] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T18:09:08.037 [DEBUG] [Thread-132300] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:09:08.037 [DEBUG] [Thread-132300] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:09:08.037 [DEBUG] [Thread-132300] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:09:08.037 [DEBUG] [Thread-132300] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:09:08.038 [DEBUG] [Thread-132300] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:09:08.038 [DEBUG] [Thread-132300] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:09:08.038 [DEBUG] [Thread-132300] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:09:08.038 [DEBUG] [Thread-132300] [transport.py] [_log()] client lang: <none>
2025-12-31T18:09:08.038 [DEBUG] [Thread-132300] [transport.py] [_log()] server lang: <none>
2025-12-31T18:09:08.038 [DEBUG] [Thread-132300] [transport.py] [_log()] kex follows: False
2025-12-31T18:09:08.038 [DEBUG] [Thread-132300] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:09:08.038 [DEBUG] [Thread-132300] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:09:08.038 [DEBUG] [Thread-132300] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:09:08.038 [DEBUG] [Thread-132300] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:09:08.038 [DEBUG] [Thread-132300] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:09:08.038 [DEBUG] [Thread-132300] [transport.py] [_log()] Compression: none
2025-12-31T18:09:08.038 [DEBUG] [Thread-132300] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:09:08.093 [DEBUG] [Thread-132300] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:09:08.094 [DEBUG] [Thread-132300] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:09:08.095 [DEBUG] [Thread-132300] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T18:09:08.095 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T18:09:08.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:09:08.149 [DEBUG] [Thread-132300] [transport.py] [_log()] userauth is OK
2025-12-31T18:09:08.149 [DEBUG] [Thread-132300] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:09:08.149 [DEBUG] [Thread-132300] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:09:08.149 [DEBUG] [Thread-132300] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T18:09:08.149 [DEBUG] [Thread-132300] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:09:08.171 [INFO] [Thread-132300] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:09:08.172 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T18:09:08.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:09:08.994 [DEBUG] [Thread-132300] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:09:08.994 [DEBUG] [Thread-132300] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:09:09.042 [DEBUG] [Thread-132300] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:09:09.043 [DEBUG] [Thread-132300] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:09:09.051 [DEBUG] [Thread-132300] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:09:09.058 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:09: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-12-31T18:09: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-12-31T18:09:09.074 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:09:09.074 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:09:09.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:09:09.082 [DEBUG] [Thread-132300] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:09:22.606 [DEBUG] [Thread-132302 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:09:29.700 [DEBUG] [Thread-132303 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:09:30.363 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:09:30.364 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:09:37.659 [DEBUG] [Thread-132304 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:09:39.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T18:09:39.104 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T18:09:39.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T18:09:39.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 18, 9, 8), 23.51, 21.35, 0.0, 34.48, 24.38, 0, 0, 0, 2, 0, 0),)
2025-12-31T18:09:39.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 18:09:08
2025-12-31T18:09:39.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T18:09:40.141 [DEBUG] [Thread-132305] [transport.py] [_log()] starting thread (client mode): 0xb9578850
2025-12-31T18:09:40.141 [DEBUG] [Thread-132305] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:09:40.162 [DEBUG] [Thread-132305] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T18:09:40.162 [INFO] [Thread-132305] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T18:09:40.165 [DEBUG] [Thread-132305] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:09:40.165 [DEBUG] [Thread-132305] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T18:09:40.165 [DEBUG] [Thread-132305] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:09:40.165 [DEBUG] [Thread-132305] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:09:40.165 [DEBUG] [Thread-132305] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:09:40.165 [DEBUG] [Thread-132305] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:09:40.165 [DEBUG] [Thread-132305] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:09:40.165 [DEBUG] [Thread-132305] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:09:40.165 [DEBUG] [Thread-132305] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:09:40.165 [DEBUG] [Thread-132305] [transport.py] [_log()] client lang: <none>
2025-12-31T18:09:40.165 [DEBUG] [Thread-132305] [transport.py] [_log()] server lang: <none>
2025-12-31T18:09:40.165 [DEBUG] [Thread-132305] [transport.py] [_log()] kex follows: False
2025-12-31T18:09:40.165 [DEBUG] [Thread-132305] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:09:40.165 [DEBUG] [Thread-132305] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:09:40.165 [DEBUG] [Thread-132305] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:09:40.165 [DEBUG] [Thread-132305] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:09:40.165 [DEBUG] [Thread-132305] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:09:40.165 [DEBUG] [Thread-132305] [transport.py] [_log()] Compression: none
2025-12-31T18:09:40.165 [DEBUG] [Thread-132305] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:09:40.182 [DEBUG] [Thread-132305] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:09:40.182 [DEBUG] [Thread-132305] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:09:40.182 [DEBUG] [Thread-132305] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T18:09:40.182 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T18:09:40.182 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:09:40.183 [DEBUG] [Thread-132305] [transport.py] [_log()] userauth is OK
2025-12-31T18:09:40.183 [DEBUG] [Thread-132305] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:09:40.183 [DEBUG] [Thread-132305] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:09:40.183 [DEBUG] [Thread-132305] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T18:09:40.183 [DEBUG] [Thread-132305] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:09:40.192 [INFO] [Thread-132305] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:09:40.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:09:40.961 [DEBUG] [Thread-132305] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:09:40.961 [DEBUG] [Thread-132305] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:09:40.961 [DEBUG] [Thread-132305] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T18:09:41.002 [DEBUG] [Thread-132305] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:09:41.003 [DEBUG] [Thread-132305] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:09:41.004 [DEBUG] [Thread-132305] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:09:41.015 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:09:41.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T18:09:41.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T18:09:41.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T18:09:41.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:09:41.020 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T18:09:41.020 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:09:41.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:09:41.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T18:09:41.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.672710 -999.00  +23.60  32.47     27   +3.80 1 2 2 1 1   887    0 20.03 -6.67 ----- 27.3 32.5 273.4 40.9 25.9 -24.7 26.4 -23.0 26.4 -21.1 26.6 -24.2
2025-12-31T18:09:41.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T18:09:41.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T18:09:41.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.672710
2025-12-31T18:09:41.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T18:09:41.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T18:09:41.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T18:09:41.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T18:09:41.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T18:09:41.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T18:09:08', tmtdew=23.51, humidity=21.35, cloud=0.0, wind=34.48, temperature=24.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T16:08:42.144', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T18:09:41.020 [DEBUG] [Thread-132305] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:09:41.095 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T18:09:52.689 [DEBUG] [Thread-132308 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:10:07.739 [DEBUG] [Thread-132309 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:10:22.772 [DEBUG] [Thread-132310 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:10:29.755 [DEBUG] [Thread-132311 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:10:30.505 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:10:30.506 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:10:37.805 [DEBUG] [Thread-132312 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:10:52.842 [DEBUG] [Thread-132313 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:11:07.879 [DEBUG] [Thread-132314 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:11:22.914 [DEBUG] [Thread-132315 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:11:29.812 [DEBUG] [Thread-132316 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:11:30.646 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:11:30.648 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:11:37.951 [DEBUG] [Thread-132317 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:11:52.982 [DEBUG] [Thread-132318 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:11:53.685 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-12-31T18:12:08.016 [DEBUG] [Thread-132319 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:12:23.049 [DEBUG] [Thread-132320 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:12:23.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T18:12:23.702 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T18:12:23.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T18:12:24.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 18, 12, 20), 22.52, 22.54, 0.0, 23.27, 23.38, 0, 0, 0, 2, 0, 0),)
2025-12-31T18:12:24.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 18:12:20
2025-12-31T18:12:24.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T18:12:24.713 [DEBUG] [Thread-132321] [transport.py] [_log()] starting thread (client mode): 0xb95d6710
2025-12-31T18:12:24.713 [DEBUG] [Thread-132321] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:12:24.733 [DEBUG] [Thread-132321] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T18:12:24.734 [INFO] [Thread-132321] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T18:12:24.736 [DEBUG] [Thread-132321] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:12:24.737 [DEBUG] [Thread-132321] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T18:12:24.737 [DEBUG] [Thread-132321] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:12:24.737 [DEBUG] [Thread-132321] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:12:24.737 [DEBUG] [Thread-132321] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:12:24.737 [DEBUG] [Thread-132321] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:12:24.737 [DEBUG] [Thread-132321] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:12:24.737 [DEBUG] [Thread-132321] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:12:24.737 [DEBUG] [Thread-132321] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:12:24.737 [DEBUG] [Thread-132321] [transport.py] [_log()] client lang: <none>
2025-12-31T18:12:24.737 [DEBUG] [Thread-132321] [transport.py] [_log()] server lang: <none>
2025-12-31T18:12:24.737 [DEBUG] [Thread-132321] [transport.py] [_log()] kex follows: False
2025-12-31T18:12:24.737 [DEBUG] [Thread-132321] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:12:24.738 [DEBUG] [Thread-132321] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:12:24.738 [DEBUG] [Thread-132321] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:12:24.738 [DEBUG] [Thread-132321] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:12:24.738 [DEBUG] [Thread-132321] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:12:24.738 [DEBUG] [Thread-132321] [transport.py] [_log()] Compression: none
2025-12-31T18:12:24.738 [DEBUG] [Thread-132321] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:12:24.757 [DEBUG] [Thread-132321] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:12:24.758 [DEBUG] [Thread-132321] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:12:24.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T18:12:24.759 [DEBUG] [Thread-132321] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T18:12:24.760 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:12:24.761 [DEBUG] [Thread-132321] [transport.py] [_log()] userauth is OK
2025-12-31T18:12:24.761 [DEBUG] [Thread-132321] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:12:24.761 [DEBUG] [Thread-132321] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:12:24.761 [DEBUG] [Thread-132321] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T18:12:24.762 [DEBUG] [Thread-132321] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:12:24.787 [INFO] [Thread-132321] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:12:24.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:12:25.424 [DEBUG] [Thread-132321] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:12:25.424 [DEBUG] [Thread-132321] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:12:25.424 [DEBUG] [Thread-132321] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T18:12:25.464 [DEBUG] [Thread-132321] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:12:25.465 [DEBUG] [Thread-132321] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:12:25.467 [DEBUG] [Thread-132321] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:12:25.478 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:12:25.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T18:12:25.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T18:12:25.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T18:12:25.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:12:25.486 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T18:12:25.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:12:25.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:12:25.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T18:12:25.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.674793 -999.00  +23.00  23.41     28   +3.80 1 2 1 1 1   887    0 18.53 -51.77 ----- 21.8 23.4 277.2 27.4 25.2 -23.2 25.5 -22.5 25.2 -22.7 25.4 -23.1
2025-12-31T18:12:25.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T18:12:25.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T18:12:25.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.674793
2025-12-31T18:12:25.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T18:12:25.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T18:12:25.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T18:12:25.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T18:12:25.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T18:12:25.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T18:12:20', tmtdew=22.52, humidity=22.54, cloud=0.0, wind=23.27, temperature=23.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T16:11:42.115', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T18:12:25.487 [DEBUG] [Thread-132321] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:12:25.571 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T18:12:25.582 [DEBUG] [Thread-132324] [transport.py] [_log()] starting thread (client mode): 0xb95f3220
2025-12-31T18:12:25.582 [DEBUG] [Thread-132324] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:12:25.596 [DEBUG] [Thread-132324] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T18:12:25.596 [INFO] [Thread-132324] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T18:12:25.604 [DEBUG] [Thread-132324] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:12:25.604 [DEBUG] [Thread-132324] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T18:12:25.604 [DEBUG] [Thread-132324] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:12:25.604 [DEBUG] [Thread-132324] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:12:25.604 [DEBUG] [Thread-132324] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:12:25.604 [DEBUG] [Thread-132324] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:12:25.604 [DEBUG] [Thread-132324] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:12:25.605 [DEBUG] [Thread-132324] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:12:25.605 [DEBUG] [Thread-132324] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:12:25.605 [DEBUG] [Thread-132324] [transport.py] [_log()] client lang: <none>
2025-12-31T18:12:25.605 [DEBUG] [Thread-132324] [transport.py] [_log()] server lang: <none>
2025-12-31T18:12:25.605 [DEBUG] [Thread-132324] [transport.py] [_log()] kex follows: False
2025-12-31T18:12:25.605 [DEBUG] [Thread-132324] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:12:25.605 [DEBUG] [Thread-132324] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:12:25.605 [DEBUG] [Thread-132324] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:12:25.605 [DEBUG] [Thread-132324] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:12:25.606 [DEBUG] [Thread-132324] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:12:25.606 [DEBUG] [Thread-132324] [transport.py] [_log()] Compression: none
2025-12-31T18:12:25.606 [DEBUG] [Thread-132324] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:12:25.661 [DEBUG] [Thread-132324] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:12:25.662 [DEBUG] [Thread-132324] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:12:25.662 [DEBUG] [Thread-132324] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T18:12:25.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T18:12:25.663 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:12:25.722 [DEBUG] [Thread-132324] [transport.py] [_log()] userauth is OK
2025-12-31T18:12:25.722 [DEBUG] [Thread-132324] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:12:25.722 [DEBUG] [Thread-132324] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:12:25.722 [DEBUG] [Thread-132324] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T18:12:25.722 [DEBUG] [Thread-132324] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:12:25.742 [INFO] [Thread-132324] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:12:25.742 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T18:12:25.743 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:12:26.597 [DEBUG] [Thread-132324] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:12:26.598 [DEBUG] [Thread-132324] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:12:26.646 [DEBUG] [Thread-132324] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:12:26.646 [DEBUG] [Thread-132324] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:12:26.655 [DEBUG] [Thread-132324] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:12:26.664 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:12:26.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T18:12:26.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T18:12:26.682 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:12:26.682 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:12:26.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:12:26.690 [DEBUG] [Thread-132324] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:12:29.863 [DEBUG] [Thread-132326 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:12:30.789 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:12:30.790 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:12:38.087 [DEBUG] [Thread-132327 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:12:53.137 [DEBUG] [Thread-132328 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:12:56.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T18:12:56.712 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T18:12:56.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T18:12:57.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 18, 12, 52), 22.66, 22.56, 0.0, 22.87, 23.53, 0, 0, 0, 2, 0, 0),)
2025-12-31T18:12:57.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 18:12:52
2025-12-31T18:12:57.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T18:12:57.752 [DEBUG] [Thread-132329] [transport.py] [_log()] starting thread (client mode): 0xb6bba800
2025-12-31T18:12:57.752 [DEBUG] [Thread-132329] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:12:57.771 [DEBUG] [Thread-132329] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T18:12:57.772 [INFO] [Thread-132329] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T18:12:57.775 [DEBUG] [Thread-132329] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:12:57.775 [DEBUG] [Thread-132329] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T18:12:57.775 [DEBUG] [Thread-132329] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:12:57.775 [DEBUG] [Thread-132329] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:12:57.775 [DEBUG] [Thread-132329] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:12:57.775 [DEBUG] [Thread-132329] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:12:57.775 [DEBUG] [Thread-132329] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:12:57.775 [DEBUG] [Thread-132329] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:12:57.775 [DEBUG] [Thread-132329] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:12:57.775 [DEBUG] [Thread-132329] [transport.py] [_log()] client lang: <none>
2025-12-31T18:12:57.775 [DEBUG] [Thread-132329] [transport.py] [_log()] server lang: <none>
2025-12-31T18:12:57.775 [DEBUG] [Thread-132329] [transport.py] [_log()] kex follows: False
2025-12-31T18:12:57.775 [DEBUG] [Thread-132329] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:12:57.775 [DEBUG] [Thread-132329] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:12:57.775 [DEBUG] [Thread-132329] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:12:57.775 [DEBUG] [Thread-132329] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:12:57.775 [DEBUG] [Thread-132329] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:12:57.775 [DEBUG] [Thread-132329] [transport.py] [_log()] Compression: none
2025-12-31T18:12:57.775 [DEBUG] [Thread-132329] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:12:57.790 [DEBUG] [Thread-132329] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:12:57.790 [DEBUG] [Thread-132329] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:12:57.790 [DEBUG] [Thread-132329] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T18:12:57.790 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T18:12:57.791 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:12:57.791 [DEBUG] [Thread-132329] [transport.py] [_log()] userauth is OK
2025-12-31T18:12:57.791 [DEBUG] [Thread-132329] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:12:57.792 [DEBUG] [Thread-132329] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:12:57.792 [DEBUG] [Thread-132329] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T18:12:57.792 [DEBUG] [Thread-132329] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:12:57.804 [INFO] [Thread-132329] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:12:57.804 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:12:58.435 [DEBUG] [Thread-132329] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:12:58.435 [DEBUG] [Thread-132329] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:12:58.435 [DEBUG] [Thread-132329] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T18:12:58.476 [DEBUG] [Thread-132329] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:12:58.477 [DEBUG] [Thread-132329] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:12:58.479 [DEBUG] [Thread-132329] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:12:58.490 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:12:58.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T18:12:58.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T18:12:58.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T18:12:58.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:12:58.496 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T18:12:58.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:12:58.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:12:58.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T18:12:58.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.675140 -999.00  +23.10  19.21     28   +3.70 1 2 1 1 1   887    0 18.81 -54.55 ----- 18.4 19.2 267.2 27.6 25.2 -22.9 25.3 -22.2 25.0 -21.7 25.3 -22.0
2025-12-31T18:12:58.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T18:12:58.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T18:12:58.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.675140
2025-12-31T18:12:58.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T18:12:58.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T18:12:58.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T18:12:58.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T18:12:58.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T18:12:58.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T18:12:52', tmtdew=22.66, humidity=22.56, cloud=0.0, wind=22.87, temperature=23.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T16:12:12.096', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T18:12:58.497 [DEBUG] [Thread-132329] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:12:58.571 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T18:12:58.582 [DEBUG] [Thread-132332] [transport.py] [_log()] starting thread (client mode): 0xb6bbb430
2025-12-31T18:12:58.582 [DEBUG] [Thread-132332] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:12:58.597 [DEBUG] [Thread-132332] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T18:12:58.597 [INFO] [Thread-132332] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T18:12:58.604 [DEBUG] [Thread-132332] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:12:58.604 [DEBUG] [Thread-132332] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T18:12:58.604 [DEBUG] [Thread-132332] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:12:58.604 [DEBUG] [Thread-132332] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:12:58.604 [DEBUG] [Thread-132332] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:12:58.604 [DEBUG] [Thread-132332] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:12:58.604 [DEBUG] [Thread-132332] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:12:58.605 [DEBUG] [Thread-132332] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:12:58.605 [DEBUG] [Thread-132332] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:12:58.605 [DEBUG] [Thread-132332] [transport.py] [_log()] client lang: <none>
2025-12-31T18:12:58.605 [DEBUG] [Thread-132332] [transport.py] [_log()] server lang: <none>
2025-12-31T18:12:58.605 [DEBUG] [Thread-132332] [transport.py] [_log()] kex follows: False
2025-12-31T18:12:58.605 [DEBUG] [Thread-132332] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:12:58.605 [DEBUG] [Thread-132332] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:12:58.605 [DEBUG] [Thread-132332] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:12:58.605 [DEBUG] [Thread-132332] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:12:58.605 [DEBUG] [Thread-132332] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:12:58.605 [DEBUG] [Thread-132332] [transport.py] [_log()] Compression: none
2025-12-31T18:12:58.605 [DEBUG] [Thread-132332] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:12:58.659 [DEBUG] [Thread-132332] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:12:58.660 [DEBUG] [Thread-132332] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:12:58.660 [DEBUG] [Thread-132332] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T18:12:58.660 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T18:12:58.660 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:12:58.717 [DEBUG] [Thread-132332] [transport.py] [_log()] userauth is OK
2025-12-31T18:12:58.717 [DEBUG] [Thread-132332] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:12:58.717 [DEBUG] [Thread-132332] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:12:58.717 [DEBUG] [Thread-132332] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T18:12:58.717 [DEBUG] [Thread-132332] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:12:58.731 [INFO] [Thread-132332] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:12:58.731 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T18:12:58.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:12:59.544 [DEBUG] [Thread-132332] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:12:59.544 [DEBUG] [Thread-132332] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:12:59.591 [DEBUG] [Thread-132332] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:12:59.591 [DEBUG] [Thread-132332] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:12:59.599 [DEBUG] [Thread-132332] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:12:59.607 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:12:59.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-12-31T18:12: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') -> 00000000
2025-12-31T18:12:59.622 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:12:59.622 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:12:59.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:12:59.630 [DEBUG] [Thread-132332] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:13:08.169 [DEBUG] [Thread-132334 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:13:23.230 [DEBUG] [Thread-132335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:13:29.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T18:13:29.652 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T18:13:29.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T18:13:29.908 [DEBUG] [Thread-132336 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:13:30.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 18, 13, 24), 22.65, 22.57, 0.0, 22.02, 23.51, 0, 0, 0, 2, 0, 0),)
2025-12-31T18:13:30.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 18:13:24
2025-12-31T18:13:30.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T18:13:30.647 [DEBUG] [Thread-132337] [transport.py] [_log()] starting thread (client mode): 0xb6bb8ee0
2025-12-31T18:13:30.647 [DEBUG] [Thread-132337] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:13:30.666 [DEBUG] [Thread-132337] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T18:13:30.667 [INFO] [Thread-132337] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T18:13:30.670 [DEBUG] [Thread-132337] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:13:30.670 [DEBUG] [Thread-132337] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T18:13:30.670 [DEBUG] [Thread-132337] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:13:30.670 [DEBUG] [Thread-132337] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:13:30.670 [DEBUG] [Thread-132337] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:13:30.670 [DEBUG] [Thread-132337] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:13:30.670 [DEBUG] [Thread-132337] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:13:30.670 [DEBUG] [Thread-132337] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:13:30.670 [DEBUG] [Thread-132337] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:13:30.670 [DEBUG] [Thread-132337] [transport.py] [_log()] client lang: <none>
2025-12-31T18:13:30.670 [DEBUG] [Thread-132337] [transport.py] [_log()] server lang: <none>
2025-12-31T18:13:30.670 [DEBUG] [Thread-132337] [transport.py] [_log()] kex follows: False
2025-12-31T18:13:30.670 [DEBUG] [Thread-132337] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:13:30.670 [DEBUG] [Thread-132337] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:13:30.670 [DEBUG] [Thread-132337] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:13:30.670 [DEBUG] [Thread-132337] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:13:30.670 [DEBUG] [Thread-132337] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:13:30.670 [DEBUG] [Thread-132337] [transport.py] [_log()] Compression: none
2025-12-31T18:13:30.670 [DEBUG] [Thread-132337] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:13:30.689 [DEBUG] [Thread-132337] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:13:30.689 [DEBUG] [Thread-132337] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:13:30.690 [DEBUG] [Thread-132337] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T18:13:30.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T18:13:30.691 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:13:30.733 [DEBUG] [Thread-132337] [transport.py] [_log()] userauth is OK
2025-12-31T18:13:30.733 [DEBUG] [Thread-132337] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:13:30.733 [DEBUG] [Thread-132337] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:13:30.733 [DEBUG] [Thread-132337] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T18:13:30.734 [DEBUG] [Thread-132337] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:13:30.759 [INFO] [Thread-132337] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:13:30.760 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:13:30.928 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:13:30.929 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:13:31.386 [DEBUG] [Thread-132337] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:13:31.386 [DEBUG] [Thread-132337] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:13:31.387 [DEBUG] [Thread-132337] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T18:13:31.427 [DEBUG] [Thread-132337] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:13:31.427 [DEBUG] [Thread-132337] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:13:31.430 [DEBUG] [Thread-132337] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:13:31.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:13:31.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T18:13:31.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T18:13:31.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T18:13:31.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:13:31.453 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T18:13:31.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:13:31.453 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:13:31.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T18:13:31.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.675487 -999.00  +23.30  13.18     28   +3.70 1 2 1 1 1   887    0 18.52 -62.08 ----- 16.1 13.2 279.0 22.1 25.2 -22.6 25.3 -22.0 25.0 -21.7 25.3 -21.9
2025-12-31T18:13:31.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T18:13:31.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T18:13:31.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.675487
2025-12-31T18:13:31.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T18:13:31.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T18:13:31.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T18:13:31.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T18:13:31.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T18:13:31.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T18:13:24', tmtdew=22.65, humidity=22.57, cloud=0.0, wind=22.02, temperature=23.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T16:12:42.077', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T18:13:31.455 [DEBUG] [Thread-132337] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:13:31.539 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T18:13:31.550 [DEBUG] [Thread-132340] [transport.py] [_log()] starting thread (client mode): 0xb175bb20
2025-12-31T18:13:31.550 [DEBUG] [Thread-132340] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:13:31.565 [DEBUG] [Thread-132340] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T18:13:31.565 [INFO] [Thread-132340] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T18:13:31.572 [DEBUG] [Thread-132340] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:13:31.573 [DEBUG] [Thread-132340] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T18:13:31.573 [DEBUG] [Thread-132340] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:13:31.573 [DEBUG] [Thread-132340] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:13:31.573 [DEBUG] [Thread-132340] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:13:31.573 [DEBUG] [Thread-132340] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:13:31.573 [DEBUG] [Thread-132340] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:13:31.573 [DEBUG] [Thread-132340] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:13:31.573 [DEBUG] [Thread-132340] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:13:31.573 [DEBUG] [Thread-132340] [transport.py] [_log()] client lang: <none>
2025-12-31T18:13:31.573 [DEBUG] [Thread-132340] [transport.py] [_log()] server lang: <none>
2025-12-31T18:13:31.573 [DEBUG] [Thread-132340] [transport.py] [_log()] kex follows: False
2025-12-31T18:13:31.573 [DEBUG] [Thread-132340] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:13:31.573 [DEBUG] [Thread-132340] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:13:31.573 [DEBUG] [Thread-132340] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:13:31.574 [DEBUG] [Thread-132340] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:13:31.574 [DEBUG] [Thread-132340] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:13:31.574 [DEBUG] [Thread-132340] [transport.py] [_log()] Compression: none
2025-12-31T18:13:31.574 [DEBUG] [Thread-132340] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:13:31.630 [DEBUG] [Thread-132340] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:13:31.630 [DEBUG] [Thread-132340] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:13:31.631 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T18:13:31.632 [DEBUG] [Thread-132340] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T18:13:31.632 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:13:31.686 [DEBUG] [Thread-132340] [transport.py] [_log()] userauth is OK
2025-12-31T18:13:31.686 [DEBUG] [Thread-132340] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:13:31.686 [DEBUG] [Thread-132340] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:13:31.686 [DEBUG] [Thread-132340] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T18:13:31.686 [DEBUG] [Thread-132340] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:13:31.705 [INFO] [Thread-132340] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:13:31.706 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T18:13:31.706 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:13:32.556 [DEBUG] [Thread-132340] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:13:32.556 [DEBUG] [Thread-132340] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:13:32.604 [DEBUG] [Thread-132340] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:13:32.604 [DEBUG] [Thread-132340] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:13:32.614 [DEBUG] [Thread-132340] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:13:32.623 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:13:32.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T18:13:32.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-12-31T18:13:32.641 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:13:32.642 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:13:32.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:13:32.650 [DEBUG] [Thread-132340] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:13:38.258 [DEBUG] [Thread-132342 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:13:53.301 [DEBUG] [Thread-132343 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:14:02.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T18:14:02.672 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T18:14:02.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-12-31T18:14:03.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 18, 13, 56), 22.49, 22.59, 0.0, 21.69, 23.35, 0, 0, 0, 2, 0, 0),)
2025-12-31T18:14:03.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 18:13:56
2025-12-31T18:14:03.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T18:14:03.677 [DEBUG] [Thread-132344] [transport.py] [_log()] starting thread (client mode): 0xb1747d60
2025-12-31T18:14:03.677 [DEBUG] [Thread-132344] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:14:03.697 [DEBUG] [Thread-132344] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T18:14:03.697 [INFO] [Thread-132344] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T18:14:03.700 [DEBUG] [Thread-132344] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:14:03.700 [DEBUG] [Thread-132344] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T18:14:03.700 [DEBUG] [Thread-132344] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:14:03.700 [DEBUG] [Thread-132344] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:14:03.700 [DEBUG] [Thread-132344] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:14:03.700 [DEBUG] [Thread-132344] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:14:03.700 [DEBUG] [Thread-132344] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:14:03.700 [DEBUG] [Thread-132344] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:14:03.700 [DEBUG] [Thread-132344] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:14:03.700 [DEBUG] [Thread-132344] [transport.py] [_log()] client lang: <none>
2025-12-31T18:14:03.700 [DEBUG] [Thread-132344] [transport.py] [_log()] server lang: <none>
2025-12-31T18:14:03.700 [DEBUG] [Thread-132344] [transport.py] [_log()] kex follows: False
2025-12-31T18:14:03.700 [DEBUG] [Thread-132344] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:14:03.700 [DEBUG] [Thread-132344] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:14:03.700 [DEBUG] [Thread-132344] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:14:03.700 [DEBUG] [Thread-132344] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:14:03.700 [DEBUG] [Thread-132344] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:14:03.700 [DEBUG] [Thread-132344] [transport.py] [_log()] Compression: none
2025-12-31T18:14:03.700 [DEBUG] [Thread-132344] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:14:03.720 [DEBUG] [Thread-132344] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:14:03.721 [DEBUG] [Thread-132344] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:14:03.721 [DEBUG] [Thread-132344] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T18:14:03.721 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T18:14:03.722 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:14:03.723 [DEBUG] [Thread-132344] [transport.py] [_log()] userauth is OK
2025-12-31T18:14:03.723 [DEBUG] [Thread-132344] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:14:03.723 [DEBUG] [Thread-132344] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:14:03.723 [DEBUG] [Thread-132344] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T18:14:03.723 [DEBUG] [Thread-132344] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:14:03.740 [INFO] [Thread-132344] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:14:03.740 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:14:04.362 [DEBUG] [Thread-132344] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:14:04.363 [DEBUG] [Thread-132344] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:14:04.363 [DEBUG] [Thread-132344] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T18:14:04.403 [DEBUG] [Thread-132344] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:14:04.404 [DEBUG] [Thread-132344] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:14:04.407 [DEBUG] [Thread-132344] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:14:04.419 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:14:04.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T18:14:04.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T18:14:04.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T18:14:04.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:14:04.428 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T18:14:04.428 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:14:04.428 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:14:04.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T18:14:04.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.675835 -999.00  +23.20  20.92     28   +3.80 1 2 1 1 1   887    0 18.08 -67.09 ----- 23.0 20.9 255.9 29.7 25.2 -22.9 25.3 -22.2 25.0 -21.1 25.1 -22.8
2025-12-31T18:14:04.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T18:14:04.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T18:14:04.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.675835
2025-12-31T18:14:04.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T18:14:04.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T18:14:04.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T18:14:04.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T18:14:04.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T18:14:04.430 [DEBUG] [Thread-132344] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:14:04.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T18:13:56', tmtdew=22.49, humidity=22.59, cloud=0.0, wind=21.69, temperature=23.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T16:13:12.144', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T18:14:04.515 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T18:14:04.527 [DEBUG] [Thread-132347] [transport.py] [_log()] starting thread (client mode): 0xb1747e50
2025-12-31T18:14:04.527 [DEBUG] [Thread-132347] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:14:04.542 [DEBUG] [Thread-132347] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T18:14:04.542 [INFO] [Thread-132347] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T18:14:04.550 [DEBUG] [Thread-132347] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:14:04.550 [DEBUG] [Thread-132347] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T18:14:04.550 [DEBUG] [Thread-132347] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:14:04.550 [DEBUG] [Thread-132347] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:14:04.550 [DEBUG] [Thread-132347] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:14:04.550 [DEBUG] [Thread-132347] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:14:04.550 [DEBUG] [Thread-132347] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:14:04.550 [DEBUG] [Thread-132347] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:14:04.550 [DEBUG] [Thread-132347] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:14:04.550 [DEBUG] [Thread-132347] [transport.py] [_log()] client lang: <none>
2025-12-31T18:14:04.551 [DEBUG] [Thread-132347] [transport.py] [_log()] server lang: <none>
2025-12-31T18:14:04.551 [DEBUG] [Thread-132347] [transport.py] [_log()] kex follows: False
2025-12-31T18:14:04.551 [DEBUG] [Thread-132347] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:14:04.551 [DEBUG] [Thread-132347] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:14:04.551 [DEBUG] [Thread-132347] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:14:04.551 [DEBUG] [Thread-132347] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:14:04.551 [DEBUG] [Thread-132347] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:14:04.551 [DEBUG] [Thread-132347] [transport.py] [_log()] Compression: none
2025-12-31T18:14:04.551 [DEBUG] [Thread-132347] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:14:04.609 [DEBUG] [Thread-132347] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:14:04.609 [DEBUG] [Thread-132347] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:14:04.610 [DEBUG] [Thread-132347] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T18:14:04.611 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T18:14:04.611 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:14:04.665 [DEBUG] [Thread-132347] [transport.py] [_log()] userauth is OK
2025-12-31T18:14:04.665 [DEBUG] [Thread-132347] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:14:04.665 [DEBUG] [Thread-132347] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:14:04.665 [DEBUG] [Thread-132347] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T18:14:04.665 [DEBUG] [Thread-132347] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:14:04.684 [INFO] [Thread-132347] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:14:04.685 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T18:14:04.687 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:14:05.516 [DEBUG] [Thread-132347] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:14:05.517 [DEBUG] [Thread-132347] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:14:05.566 [DEBUG] [Thread-132347] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:14:05.566 [DEBUG] [Thread-132347] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:14:05.575 [DEBUG] [Thread-132347] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:14:05.583 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:14:05.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T18:14:05.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T18:14:05.601 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:14:05.601 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:14:05.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:14:05.610 [DEBUG] [Thread-132347] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:14:08.333 [DEBUG] [Thread-132349 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:14:23.413 [DEBUG] [Thread-132350 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:14:29.956 [DEBUG] [Thread-132351 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:14:31.071 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:14:31.072 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:14:35.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T18:14:35.633 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T18:14:35.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T18:14:36.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 18, 14, 28), 22.5, 22.56, 0.0, 25.74, 23.31, 0, 0, 0, 2, 0, 0),)
2025-12-31T18:14:36.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 18:14:28
2025-12-31T18:14:36.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T18:14:36.623 [DEBUG] [Thread-132352] [transport.py] [_log()] starting thread (client mode): 0xb175a050
2025-12-31T18:14:36.623 [DEBUG] [Thread-132352] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:14:36.644 [DEBUG] [Thread-132352] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T18:14:36.644 [INFO] [Thread-132352] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T18:14:36.647 [DEBUG] [Thread-132352] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:14:36.647 [DEBUG] [Thread-132352] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T18:14:36.647 [DEBUG] [Thread-132352] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:14:36.647 [DEBUG] [Thread-132352] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:14:36.647 [DEBUG] [Thread-132352] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:14:36.647 [DEBUG] [Thread-132352] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:14:36.647 [DEBUG] [Thread-132352] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:14:36.647 [DEBUG] [Thread-132352] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:14:36.647 [DEBUG] [Thread-132352] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:14:36.647 [DEBUG] [Thread-132352] [transport.py] [_log()] client lang: <none>
2025-12-31T18:14:36.647 [DEBUG] [Thread-132352] [transport.py] [_log()] server lang: <none>
2025-12-31T18:14:36.647 [DEBUG] [Thread-132352] [transport.py] [_log()] kex follows: False
2025-12-31T18:14:36.647 [DEBUG] [Thread-132352] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:14:36.647 [DEBUG] [Thread-132352] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:14:36.647 [DEBUG] [Thread-132352] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:14:36.648 [DEBUG] [Thread-132352] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:14:36.648 [DEBUG] [Thread-132352] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:14:36.648 [DEBUG] [Thread-132352] [transport.py] [_log()] Compression: none
2025-12-31T18:14:36.648 [DEBUG] [Thread-132352] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:14:36.666 [DEBUG] [Thread-132352] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:14:36.667 [DEBUG] [Thread-132352] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:14:36.667 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T18:14:36.667 [DEBUG] [Thread-132352] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T18:14:36.668 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:14:36.669 [DEBUG] [Thread-132352] [transport.py] [_log()] userauth is OK
2025-12-31T18:14:36.670 [DEBUG] [Thread-132352] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:14:36.670 [DEBUG] [Thread-132352] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:14:36.670 [DEBUG] [Thread-132352] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T18:14:36.670 [DEBUG] [Thread-132352] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:14:36.693 [INFO] [Thread-132352] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:14:36.694 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:14:37.336 [DEBUG] [Thread-132352] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:14:37.336 [DEBUG] [Thread-132352] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:14:37.337 [DEBUG] [Thread-132352] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T18:14:37.377 [DEBUG] [Thread-132352] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:14:37.377 [DEBUG] [Thread-132352] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:14:37.380 [DEBUG] [Thread-132352] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:14:37.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:14:37.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T18:14:37.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T18:14:37.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T18:14:37.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:14:37.398 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T18:14:37.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:14:37.398 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:14:37.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T18:14:37.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.676182 -999.00  +23.10  20.30     28   +3.80 1 2 1 1 1   887    0 17.90 -74.15 ----- 28.9 20.3 266.4 28.3 25.1 -23.2 25.2 -22.5 24.9 -21.8 25.1 -22.4
2025-12-31T18:14:37.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T18:14:37.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T18:14:37.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.676182
2025-12-31T18:14:37.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T18:14:37.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T18:14:37.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T18:14:37.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T18:14:37.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T18:14:37.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T18:14:28', tmtdew=22.5, humidity=22.56, cloud=0.0, wind=25.74, temperature=23.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T16:13:42.125', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T18:14:37.401 [DEBUG] [Thread-132352] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:14:37.484 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T18:14:37.495 [DEBUG] [Thread-132355] [transport.py] [_log()] starting thread (client mode): 0xb175beb0
2025-12-31T18:14:37.496 [DEBUG] [Thread-132355] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:14:37.511 [DEBUG] [Thread-132355] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T18:14:37.511 [INFO] [Thread-132355] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T18:14:37.518 [DEBUG] [Thread-132355] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:14:37.518 [DEBUG] [Thread-132355] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T18:14:37.519 [DEBUG] [Thread-132355] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:14:37.519 [DEBUG] [Thread-132355] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:14:37.519 [DEBUG] [Thread-132355] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:14:37.519 [DEBUG] [Thread-132355] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:14:37.519 [DEBUG] [Thread-132355] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:14:37.519 [DEBUG] [Thread-132355] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:14:37.519 [DEBUG] [Thread-132355] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:14:37.519 [DEBUG] [Thread-132355] [transport.py] [_log()] client lang: <none>
2025-12-31T18:14:37.519 [DEBUG] [Thread-132355] [transport.py] [_log()] server lang: <none>
2025-12-31T18:14:37.519 [DEBUG] [Thread-132355] [transport.py] [_log()] kex follows: False
2025-12-31T18:14:37.519 [DEBUG] [Thread-132355] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:14:37.519 [DEBUG] [Thread-132355] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:14:37.519 [DEBUG] [Thread-132355] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:14:37.520 [DEBUG] [Thread-132355] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:14:37.520 [DEBUG] [Thread-132355] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:14:37.520 [DEBUG] [Thread-132355] [transport.py] [_log()] Compression: none
2025-12-31T18:14:37.520 [DEBUG] [Thread-132355] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:14:37.578 [DEBUG] [Thread-132355] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:14:37.578 [DEBUG] [Thread-132355] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:14:37.579 [DEBUG] [Thread-132355] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T18:14:37.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T18:14:37.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:14:37.634 [DEBUG] [Thread-132355] [transport.py] [_log()] userauth is OK
2025-12-31T18:14:37.634 [DEBUG] [Thread-132355] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:14:37.634 [DEBUG] [Thread-132355] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:14:37.634 [DEBUG] [Thread-132355] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T18:14:37.634 [DEBUG] [Thread-132355] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:14:37.653 [INFO] [Thread-132355] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:14:37.654 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T18:14:37.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:14:38.448 [DEBUG] [Thread-132357 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:14:38.484 [DEBUG] [Thread-132355] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:14:38.484 [DEBUG] [Thread-132355] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:14:38.532 [DEBUG] [Thread-132355] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:14:38.532 [DEBUG] [Thread-132355] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:14:38.541 [DEBUG] [Thread-132355] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:14:38.550 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:14: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-12-31T18:14: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-12-31T18:14:38.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:14:38.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:14:38.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:14:38.578 [DEBUG] [Thread-132355] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:14:53.500 [DEBUG] [Thread-132358 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:15:08.533 [DEBUG] [Thread-132359 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:15:08.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T18:15:08.584 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T18:15:08.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T18:15:09.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 18, 15), 22.26, 23.21, 0.0, 25.55, 23.21, 0, 0, 0, 2, 0, 0),)
2025-12-31T18:15:09.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 18:15:00
2025-12-31T18:15:09.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T18:15:09.572 [DEBUG] [Thread-132360] [transport.py] [_log()] starting thread (client mode): 0xb6bbf220
2025-12-31T18:15:09.572 [DEBUG] [Thread-132360] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:15:09.592 [DEBUG] [Thread-132360] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T18:15:09.592 [INFO] [Thread-132360] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T18:15:09.595 [DEBUG] [Thread-132360] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:15:09.595 [DEBUG] [Thread-132360] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T18:15:09.595 [DEBUG] [Thread-132360] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:15:09.595 [DEBUG] [Thread-132360] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:15:09.595 [DEBUG] [Thread-132360] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:15:09.596 [DEBUG] [Thread-132360] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:15:09.596 [DEBUG] [Thread-132360] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:15:09.596 [DEBUG] [Thread-132360] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:15:09.596 [DEBUG] [Thread-132360] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:15:09.596 [DEBUG] [Thread-132360] [transport.py] [_log()] client lang: <none>
2025-12-31T18:15:09.596 [DEBUG] [Thread-132360] [transport.py] [_log()] server lang: <none>
2025-12-31T18:15:09.596 [DEBUG] [Thread-132360] [transport.py] [_log()] kex follows: False
2025-12-31T18:15:09.596 [DEBUG] [Thread-132360] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:15:09.596 [DEBUG] [Thread-132360] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:15:09.596 [DEBUG] [Thread-132360] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:15:09.596 [DEBUG] [Thread-132360] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:15:09.596 [DEBUG] [Thread-132360] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:15:09.596 [DEBUG] [Thread-132360] [transport.py] [_log()] Compression: none
2025-12-31T18:15:09.596 [DEBUG] [Thread-132360] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:15:09.615 [DEBUG] [Thread-132360] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:15:09.616 [DEBUG] [Thread-132360] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:15:09.616 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T18:15:09.617 [DEBUG] [Thread-132360] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T18:15:09.617 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:15:09.619 [DEBUG] [Thread-132360] [transport.py] [_log()] userauth is OK
2025-12-31T18:15:09.619 [DEBUG] [Thread-132360] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:15:09.619 [DEBUG] [Thread-132360] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:15:09.619 [DEBUG] [Thread-132360] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T18:15:09.619 [DEBUG] [Thread-132360] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:15:09.655 [INFO] [Thread-132360] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:15:09.657 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:15:16.343 [DEBUG] [Thread-132360] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:15:16.344 [DEBUG] [Thread-132360] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:15:16.345 [DEBUG] [Thread-132360] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T18:15:16.385 [DEBUG] [Thread-132360] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:15:16.385 [DEBUG] [Thread-132360] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:15:16.389 [DEBUG] [Thread-132360] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:15:16.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:15:16.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T18:15:16.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T18:15:16.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T18:15:16.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:15:16.411 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T18:15:16.411 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:15:16.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:15:16.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T18:15:16.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.676529 -999.00  +23.10  19.30     28   +3.80 1 2 1 1 1   887    0 17.58 -80.60 ----- 24.7 19.3 259.8 29.2 25.0 -23.7 25.2 -22.4 24.8 -22.3 25.0 -22.7
2025-12-31T18:15:16.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T18:15:16.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T18:15:16.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.676529
2025-12-31T18:15:16.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T18:15:16.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T18:15:16.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T18:15:16.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T18:15:16.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T18:15:16.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T18:15:00', tmtdew=22.26, humidity=23.21, cloud=0.0, wind=25.55, temperature=23.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T16:14:12.106', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T18:15:16.414 [DEBUG] [Thread-132360] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:15:16.496 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T18:15:16.508 [DEBUG] [Thread-132363] [transport.py] [_log()] starting thread (client mode): 0xb1747910
2025-12-31T18:15:16.509 [DEBUG] [Thread-132363] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:15:16.523 [DEBUG] [Thread-132363] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T18:15:16.523 [INFO] [Thread-132363] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T18:15:16.531 [DEBUG] [Thread-132363] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:15:16.531 [DEBUG] [Thread-132363] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T18:15:16.531 [DEBUG] [Thread-132363] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:15:16.531 [DEBUG] [Thread-132363] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:15:16.531 [DEBUG] [Thread-132363] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:15:16.531 [DEBUG] [Thread-132363] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:15:16.532 [DEBUG] [Thread-132363] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:15:16.532 [DEBUG] [Thread-132363] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:15:16.532 [DEBUG] [Thread-132363] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:15:16.532 [DEBUG] [Thread-132363] [transport.py] [_log()] client lang: <none>
2025-12-31T18:15:16.532 [DEBUG] [Thread-132363] [transport.py] [_log()] server lang: <none>
2025-12-31T18:15:16.532 [DEBUG] [Thread-132363] [transport.py] [_log()] kex follows: False
2025-12-31T18:15:16.532 [DEBUG] [Thread-132363] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:15:16.532 [DEBUG] [Thread-132363] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:15:16.532 [DEBUG] [Thread-132363] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:15:16.532 [DEBUG] [Thread-132363] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:15:16.532 [DEBUG] [Thread-132363] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:15:16.532 [DEBUG] [Thread-132363] [transport.py] [_log()] Compression: none
2025-12-31T18:15:16.532 [DEBUG] [Thread-132363] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:15:16.590 [DEBUG] [Thread-132363] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:15:16.590 [DEBUG] [Thread-132363] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:15:16.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T18:15:16.591 [DEBUG] [Thread-132363] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T18:15:16.592 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:15:16.646 [DEBUG] [Thread-132363] [transport.py] [_log()] userauth is OK
2025-12-31T18:15:16.646 [DEBUG] [Thread-132363] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:15:16.646 [DEBUG] [Thread-132363] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:15:16.647 [DEBUG] [Thread-132363] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T18:15:16.647 [DEBUG] [Thread-132363] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:15:16.666 [INFO] [Thread-132363] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:15:16.666 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T18:15:16.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:15:17.513 [DEBUG] [Thread-132363] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:15:17.514 [DEBUG] [Thread-132363] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:15:17.562 [DEBUG] [Thread-132363] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:15:17.562 [DEBUG] [Thread-132363] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:15:17.571 [DEBUG] [Thread-132363] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:15:17.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:15:17.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T18:15:17.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T18:15:17.599 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:15:17.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:15:17.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:15:17.608 [DEBUG] [Thread-132363] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:15:23.572 [DEBUG] [Thread-132365 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:15:30.019 [DEBUG] [Thread-132366 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:15:31.213 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:15:31.214 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:15:38.626 [DEBUG] [Thread-132367 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:15:47.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T18:15:47.631 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T18:15:47.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T18:15:48.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 18, 15, 33), 22.16, 23.36, 0.0, 26.27, 23.16, 0, 0, 0, 2, 0, 0),)
2025-12-31T18:15:48.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 18:15:33
2025-12-31T18:15:48.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T18:15:48.608 [DEBUG] [Thread-132368] [transport.py] [_log()] starting thread (client mode): 0xb6bbe140
2025-12-31T18:15:48.608 [DEBUG] [Thread-132368] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:15:48.630 [DEBUG] [Thread-132368] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T18:15:48.630 [INFO] [Thread-132368] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T18:15:48.633 [DEBUG] [Thread-132368] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:15:48.633 [DEBUG] [Thread-132368] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T18:15:48.633 [DEBUG] [Thread-132368] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:15:48.633 [DEBUG] [Thread-132368] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:15:48.633 [DEBUG] [Thread-132368] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:15:48.633 [DEBUG] [Thread-132368] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:15:48.633 [DEBUG] [Thread-132368] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:15:48.633 [DEBUG] [Thread-132368] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:15:48.633 [DEBUG] [Thread-132368] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:15:48.633 [DEBUG] [Thread-132368] [transport.py] [_log()] client lang: <none>
2025-12-31T18:15:48.633 [DEBUG] [Thread-132368] [transport.py] [_log()] server lang: <none>
2025-12-31T18:15:48.633 [DEBUG] [Thread-132368] [transport.py] [_log()] kex follows: False
2025-12-31T18:15:48.633 [DEBUG] [Thread-132368] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:15:48.633 [DEBUG] [Thread-132368] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:15:48.633 [DEBUG] [Thread-132368] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:15:48.633 [DEBUG] [Thread-132368] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:15:48.633 [DEBUG] [Thread-132368] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:15:48.634 [DEBUG] [Thread-132368] [transport.py] [_log()] Compression: none
2025-12-31T18:15:48.634 [DEBUG] [Thread-132368] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:15:48.651 [DEBUG] [Thread-132368] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:15:48.652 [DEBUG] [Thread-132368] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:15:48.652 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T18:15:48.652 [DEBUG] [Thread-132368] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T18:15:48.653 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:15:48.655 [DEBUG] [Thread-132368] [transport.py] [_log()] userauth is OK
2025-12-31T18:15:48.655 [DEBUG] [Thread-132368] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:15:48.655 [DEBUG] [Thread-132368] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:15:48.655 [DEBUG] [Thread-132368] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T18:15:48.655 [DEBUG] [Thread-132368] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:15:48.691 [INFO] [Thread-132368] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:15:48.692 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:15:49.280 [DEBUG] [Thread-132368] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:15:49.280 [DEBUG] [Thread-132368] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:15:49.281 [DEBUG] [Thread-132368] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T18:15:49.322 [DEBUG] [Thread-132368] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:15:49.322 [DEBUG] [Thread-132368] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:15:49.325 [DEBUG] [Thread-132368] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:15:49.340 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:15:49.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T18:15:49.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T18:15:49.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T18:15:49.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:15:49.349 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T18:15:49.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:15:49.350 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:15:49.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T18:15:49.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.677223 -999.00  +22.70  23.59     29   +3.90 1 1 1 1 1   887    0 17.72 -90.31 ----- 26.8 23.6 269.2 29.9 24.8 -24.1 25.0 -23.2 24.4 -24.3 24.7 -23.0
2025-12-31T18:15:49.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T18:15:49.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T18:15:49.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.677223
2025-12-31T18:15:49.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T18:15:49.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T18:15:49.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T18:15:49.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T18:15:49.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T18:15:49.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T18:15:33', tmtdew=22.16, humidity=23.36, cloud=0.0, wind=26.27, temperature=23.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T16:15:12.067', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T18:15:49.352 [DEBUG] [Thread-132368] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:15:49.437 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T18:15:49.449 [DEBUG] [Thread-132371] [transport.py] [_log()] starting thread (client mode): 0xb6bbf730
2025-12-31T18:15:49.449 [DEBUG] [Thread-132371] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:15:49.464 [DEBUG] [Thread-132371] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T18:15:49.464 [INFO] [Thread-132371] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T18:15:49.471 [DEBUG] [Thread-132371] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:15:49.472 [DEBUG] [Thread-132371] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T18:15:49.472 [DEBUG] [Thread-132371] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:15:49.472 [DEBUG] [Thread-132371] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:15:49.472 [DEBUG] [Thread-132371] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:15:49.472 [DEBUG] [Thread-132371] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:15:49.472 [DEBUG] [Thread-132371] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:15:49.472 [DEBUG] [Thread-132371] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:15:49.472 [DEBUG] [Thread-132371] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:15:49.473 [DEBUG] [Thread-132371] [transport.py] [_log()] client lang: <none>
2025-12-31T18:15:49.473 [DEBUG] [Thread-132371] [transport.py] [_log()] server lang: <none>
2025-12-31T18:15:49.473 [DEBUG] [Thread-132371] [transport.py] [_log()] kex follows: False
2025-12-31T18:15:49.473 [DEBUG] [Thread-132371] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:15:49.473 [DEBUG] [Thread-132371] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:15:49.473 [DEBUG] [Thread-132371] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:15:49.473 [DEBUG] [Thread-132371] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:15:49.473 [DEBUG] [Thread-132371] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:15:49.474 [DEBUG] [Thread-132371] [transport.py] [_log()] Compression: none
2025-12-31T18:15:49.474 [DEBUG] [Thread-132371] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:15:49.530 [DEBUG] [Thread-132371] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:15:49.530 [DEBUG] [Thread-132371] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:15:49.531 [DEBUG] [Thread-132371] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T18:15:49.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T18:15:49.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:15:49.586 [DEBUG] [Thread-132371] [transport.py] [_log()] userauth is OK
2025-12-31T18:15:49.586 [DEBUG] [Thread-132371] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:15:49.586 [DEBUG] [Thread-132371] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:15:49.586 [DEBUG] [Thread-132371] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T18:15:49.586 [DEBUG] [Thread-132371] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:15:49.605 [INFO] [Thread-132371] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:15:49.606 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T18:15:49.606 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:15:50.435 [DEBUG] [Thread-132371] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:15:50.435 [DEBUG] [Thread-132371] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:15:50.483 [DEBUG] [Thread-132371] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:15:50.483 [DEBUG] [Thread-132371] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:15:50.492 [DEBUG] [Thread-132371] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:15:50.501 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:15:50.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T18:15:50.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T18:15:50.520 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:15:50.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:15:50.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:15:50.529 [DEBUG] [Thread-132371] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:15:53.659 [DEBUG] [Thread-132373 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:16:08.712 [DEBUG] [Thread-132374 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:16:20.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T18:16:20.552 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T18:16: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-12-31T18:16:21.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 18, 16, 5), 22.12, 23.41, 0.0, 24.83, 23.12, 0, 0, 0, 2, 0, 0),)
2025-12-31T18:16:21.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 18:16:05
2025-12-31T18:16:21.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T18:16:21.545 [DEBUG] [Thread-132375] [transport.py] [_log()] starting thread (client mode): 0xb6bbd000
2025-12-31T18:16:21.545 [DEBUG] [Thread-132375] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:16:21.562 [DEBUG] [Thread-132375] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T18:16:21.562 [INFO] [Thread-132375] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T18:16:21.565 [DEBUG] [Thread-132375] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:16:21.565 [DEBUG] [Thread-132375] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T18:16:21.565 [DEBUG] [Thread-132375] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:16:21.565 [DEBUG] [Thread-132375] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:16:21.565 [DEBUG] [Thread-132375] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:16:21.565 [DEBUG] [Thread-132375] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:16:21.565 [DEBUG] [Thread-132375] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:16:21.565 [DEBUG] [Thread-132375] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:16:21.565 [DEBUG] [Thread-132375] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:16:21.565 [DEBUG] [Thread-132375] [transport.py] [_log()] client lang: <none>
2025-12-31T18:16:21.565 [DEBUG] [Thread-132375] [transport.py] [_log()] server lang: <none>
2025-12-31T18:16:21.565 [DEBUG] [Thread-132375] [transport.py] [_log()] kex follows: False
2025-12-31T18:16:21.565 [DEBUG] [Thread-132375] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:16:21.565 [DEBUG] [Thread-132375] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:16:21.565 [DEBUG] [Thread-132375] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:16:21.565 [DEBUG] [Thread-132375] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:16:21.565 [DEBUG] [Thread-132375] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:16:21.565 [DEBUG] [Thread-132375] [transport.py] [_log()] Compression: none
2025-12-31T18:16:21.565 [DEBUG] [Thread-132375] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:16:21.583 [DEBUG] [Thread-132375] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:16:21.584 [DEBUG] [Thread-132375] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:16:21.584 [DEBUG] [Thread-132375] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T18:16:21.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T18:16:21.585 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:16:21.586 [DEBUG] [Thread-132375] [transport.py] [_log()] userauth is OK
2025-12-31T18:16:21.586 [DEBUG] [Thread-132375] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:16:21.586 [DEBUG] [Thread-132375] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:16:21.586 [DEBUG] [Thread-132375] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T18:16:21.586 [DEBUG] [Thread-132375] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:16:21.619 [INFO] [Thread-132375] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:16:21.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:16:22.421 [DEBUG] [Thread-132375] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:16:22.421 [DEBUG] [Thread-132375] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:16:22.421 [DEBUG] [Thread-132375] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T18:16:22.462 [DEBUG] [Thread-132375] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:16:22.462 [DEBUG] [Thread-132375] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:16:22.465 [DEBUG] [Thread-132375] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:16:22.477 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:16:22.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T18:16:22.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T18:16:22.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T18:16:22.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:16:22.488 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T18:16:22.488 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:16:22.488 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:16:22.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T18:16:22.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.677571 -999.00  +22.50  29.53     29   +3.90 1 1 1 1 1   887    0 17.44 -98.98 ----- 23.7 29.5 266.8 33.6 24.6 -24.3 24.8 -23.3 24.3 -23.3 24.6 -23.1
2025-12-31T18:16:22.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T18:16:22.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T18:16:22.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.677571
2025-12-31T18:16:22.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T18:16:22.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T18:16:22.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T18:16:22.491 [DEBUG] [Thread-132375] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:16:22.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T18:16:22.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T18:16:22.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T18:16:05', tmtdew=22.12, humidity=23.41, cloud=0.0, wind=24.83, temperature=23.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T16:15:42.134', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T18:16:22.575 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T18:16:22.587 [DEBUG] [Thread-132378] [transport.py] [_log()] starting thread (client mode): 0xb955be20
2025-12-31T18:16:22.587 [DEBUG] [Thread-132378] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:16:22.601 [DEBUG] [Thread-132378] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T18:16:22.602 [INFO] [Thread-132378] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T18:16:22.609 [DEBUG] [Thread-132378] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:16:22.609 [DEBUG] [Thread-132378] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T18:16:22.609 [DEBUG] [Thread-132378] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:16:22.609 [DEBUG] [Thread-132378] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:16:22.609 [DEBUG] [Thread-132378] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:16:22.609 [DEBUG] [Thread-132378] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:16:22.609 [DEBUG] [Thread-132378] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:16:22.609 [DEBUG] [Thread-132378] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:16:22.609 [DEBUG] [Thread-132378] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:16:22.610 [DEBUG] [Thread-132378] [transport.py] [_log()] client lang: <none>
2025-12-31T18:16:22.610 [DEBUG] [Thread-132378] [transport.py] [_log()] server lang: <none>
2025-12-31T18:16:22.610 [DEBUG] [Thread-132378] [transport.py] [_log()] kex follows: False
2025-12-31T18:16:22.610 [DEBUG] [Thread-132378] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:16:22.610 [DEBUG] [Thread-132378] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:16:22.610 [DEBUG] [Thread-132378] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:16:22.610 [DEBUG] [Thread-132378] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:16:22.610 [DEBUG] [Thread-132378] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:16:22.610 [DEBUG] [Thread-132378] [transport.py] [_log()] Compression: none
2025-12-31T18:16:22.610 [DEBUG] [Thread-132378] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:16:22.670 [DEBUG] [Thread-132378] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:16:22.670 [DEBUG] [Thread-132378] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:16:22.671 [DEBUG] [Thread-132378] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T18:16:22.671 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T18:16:22.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:16:22.726 [DEBUG] [Thread-132378] [transport.py] [_log()] userauth is OK
2025-12-31T18:16:22.726 [DEBUG] [Thread-132378] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:16:22.726 [DEBUG] [Thread-132378] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:16:22.726 [DEBUG] [Thread-132378] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T18:16:22.726 [DEBUG] [Thread-132378] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:16:22.746 [INFO] [Thread-132378] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:16:22.746 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T18:16:22.747 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:16:23.579 [DEBUG] [Thread-132378] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:16:23.580 [DEBUG] [Thread-132378] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:16:23.628 [DEBUG] [Thread-132378] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:16:23.628 [DEBUG] [Thread-132378] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:16:23.637 [DEBUG] [Thread-132378] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:16:23.647 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:16:23.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T18:16:23.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T18:16:23.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:16:23.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:16:23.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:16:23.674 [DEBUG] [Thread-132378] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:16:23.743 [DEBUG] [Thread-132380 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:16:30.072 [DEBUG] [Thread-132381 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:16:31.355 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:16:31.356 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:16:38.794 [DEBUG] [Thread-132382 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:16:53.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T18:16:53.684 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T18:16:53.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T18:16:53.828 [DEBUG] [Thread-132383 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:16:54.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 18, 16, 37), 22.16, 23.34, 0.0, 23.8, 23.08, 0, 0, 0, 2, 0, 0),)
2025-12-31T18:16:54.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 18:16:37
2025-12-31T18:16:54.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T18:16:54.711 [DEBUG] [Thread-132384] [transport.py] [_log()] starting thread (client mode): 0xb9558e80
2025-12-31T18:16:54.712 [DEBUG] [Thread-132384] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:16:54.733 [DEBUG] [Thread-132384] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T18:16:54.733 [INFO] [Thread-132384] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T18:16:54.736 [DEBUG] [Thread-132384] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:16:54.736 [DEBUG] [Thread-132384] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T18:16:54.736 [DEBUG] [Thread-132384] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:16:54.736 [DEBUG] [Thread-132384] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:16:54.736 [DEBUG] [Thread-132384] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:16:54.736 [DEBUG] [Thread-132384] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:16:54.736 [DEBUG] [Thread-132384] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:16:54.736 [DEBUG] [Thread-132384] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:16:54.736 [DEBUG] [Thread-132384] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:16:54.736 [DEBUG] [Thread-132384] [transport.py] [_log()] client lang: <none>
2025-12-31T18:16:54.736 [DEBUG] [Thread-132384] [transport.py] [_log()] server lang: <none>
2025-12-31T18:16:54.736 [DEBUG] [Thread-132384] [transport.py] [_log()] kex follows: False
2025-12-31T18:16:54.736 [DEBUG] [Thread-132384] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:16:54.736 [DEBUG] [Thread-132384] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:16:54.737 [DEBUG] [Thread-132384] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:16:54.737 [DEBUG] [Thread-132384] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:16:54.737 [DEBUG] [Thread-132384] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:16:54.737 [DEBUG] [Thread-132384] [transport.py] [_log()] Compression: none
2025-12-31T18:16:54.737 [DEBUG] [Thread-132384] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:16:54.755 [DEBUG] [Thread-132384] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:16:54.755 [DEBUG] [Thread-132384] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:16:54.755 [DEBUG] [Thread-132384] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T18:16:54.755 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T18:16:54.755 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:16:54.756 [DEBUG] [Thread-132384] [transport.py] [_log()] userauth is OK
2025-12-31T18:16:54.756 [DEBUG] [Thread-132384] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:16:54.756 [DEBUG] [Thread-132384] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:16:54.756 [DEBUG] [Thread-132384] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T18:16:54.756 [DEBUG] [Thread-132384] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:16:54.765 [INFO] [Thread-132384] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:16:54.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:16:55.427 [DEBUG] [Thread-132384] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:16:55.428 [DEBUG] [Thread-132384] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:16:55.428 [DEBUG] [Thread-132384] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T18:16:55.468 [DEBUG] [Thread-132384] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:16:55.468 [DEBUG] [Thread-132384] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:16:55.470 [DEBUG] [Thread-132384] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:16:55.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:16:55.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T18:16:55.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T18:16:55.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T18:16:55.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:16:55.487 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T18:16:55.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:16:55.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:16:55.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T18:16:55.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.677918 -999.00  +22.60  24.95     29   +4.00 1 1 1 1 1   887    0 17.61 -100.21 ----- 19.8 24.9 280.0 30.4 24.6 -23.7 24.7 -23.3 24.1 -24.0 24.5 -22.8
2025-12-31T18:16:55.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T18:16:55.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T18:16:55.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.677918
2025-12-31T18:16:55.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T18:16:55.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T18:16:55.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T18:16:55.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T18:16:55.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T18:16:55.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T18:16:37', tmtdew=22.16, humidity=23.34, cloud=0.0, wind=23.8, temperature=23.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T16:16:12.115', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T18:16:55.489 [DEBUG] [Thread-132384] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:16:55.563 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T18:16:55.575 [DEBUG] [Thread-132387] [transport.py] [_log()] starting thread (client mode): 0xb955b7f0
2025-12-31T18:16:55.575 [DEBUG] [Thread-132387] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:16:55.590 [DEBUG] [Thread-132387] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T18:16:55.590 [INFO] [Thread-132387] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T18:16:55.598 [DEBUG] [Thread-132387] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:16:55.598 [DEBUG] [Thread-132387] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T18:16:55.598 [DEBUG] [Thread-132387] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:16:55.598 [DEBUG] [Thread-132387] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:16:55.598 [DEBUG] [Thread-132387] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:16:55.598 [DEBUG] [Thread-132387] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:16:55.598 [DEBUG] [Thread-132387] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:16:55.598 [DEBUG] [Thread-132387] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:16:55.598 [DEBUG] [Thread-132387] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:16:55.598 [DEBUG] [Thread-132387] [transport.py] [_log()] client lang: <none>
2025-12-31T18:16:55.598 [DEBUG] [Thread-132387] [transport.py] [_log()] server lang: <none>
2025-12-31T18:16:55.598 [DEBUG] [Thread-132387] [transport.py] [_log()] kex follows: False
2025-12-31T18:16:55.598 [DEBUG] [Thread-132387] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:16:55.598 [DEBUG] [Thread-132387] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:16:55.598 [DEBUG] [Thread-132387] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:16:55.598 [DEBUG] [Thread-132387] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:16:55.598 [DEBUG] [Thread-132387] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:16:55.598 [DEBUG] [Thread-132387] [transport.py] [_log()] Compression: none
2025-12-31T18:16:55.598 [DEBUG] [Thread-132387] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:16:55.655 [DEBUG] [Thread-132387] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:16:55.656 [DEBUG] [Thread-132387] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:16:55.656 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T18:16:55.656 [DEBUG] [Thread-132387] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T18:16:55.656 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:16:55.713 [DEBUG] [Thread-132387] [transport.py] [_log()] userauth is OK
2025-12-31T18:16:55.713 [DEBUG] [Thread-132387] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:16:55.713 [DEBUG] [Thread-132387] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:16:55.713 [DEBUG] [Thread-132387] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T18:16:55.713 [DEBUG] [Thread-132387] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:16:55.727 [INFO] [Thread-132387] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:16:55.728 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T18:16:55.728 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:16:56.548 [DEBUG] [Thread-132387] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:16:56.548 [DEBUG] [Thread-132387] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:16:56.597 [DEBUG] [Thread-132387] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:16:56.597 [DEBUG] [Thread-132387] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:16:56.605 [DEBUG] [Thread-132387] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:16:56.613 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:16:56.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T18:16:56.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T18:16:56.629 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:16:56.629 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:16:56.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:16:56.637 [DEBUG] [Thread-132387] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:17:08.860 [DEBUG] [Thread-132389 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:17:23.914 [DEBUG] [Thread-132390 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:17:26.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T18:17:26.660 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T18:17:26.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T18:17:27.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 18, 17, 9), 22.12, 23.41, 0.0, 29.85, 23.13, 0, 0, 0, 2, 0, 0),)
2025-12-31T18:17:27.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 18:17:09
2025-12-31T18:17:27.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T18:17:27.642 [DEBUG] [Thread-132391] [transport.py] [_log()] starting thread (client mode): 0xb1746ce0
2025-12-31T18:17:27.643 [DEBUG] [Thread-132391] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:17:27.664 [DEBUG] [Thread-132391] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T18:17:27.664 [INFO] [Thread-132391] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T18:17:27.668 [DEBUG] [Thread-132391] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:17:27.668 [DEBUG] [Thread-132391] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T18:17:27.668 [DEBUG] [Thread-132391] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:17:27.668 [DEBUG] [Thread-132391] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:17:27.668 [DEBUG] [Thread-132391] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:17:27.668 [DEBUG] [Thread-132391] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:17:27.668 [DEBUG] [Thread-132391] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:17:27.668 [DEBUG] [Thread-132391] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:17:27.668 [DEBUG] [Thread-132391] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:17:27.668 [DEBUG] [Thread-132391] [transport.py] [_log()] client lang: <none>
2025-12-31T18:17:27.668 [DEBUG] [Thread-132391] [transport.py] [_log()] server lang: <none>
2025-12-31T18:17:27.668 [DEBUG] [Thread-132391] [transport.py] [_log()] kex follows: False
2025-12-31T18:17:27.668 [DEBUG] [Thread-132391] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:17:27.669 [DEBUG] [Thread-132391] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:17:27.669 [DEBUG] [Thread-132391] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:17:27.669 [DEBUG] [Thread-132391] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:17:27.669 [DEBUG] [Thread-132391] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:17:27.669 [DEBUG] [Thread-132391] [transport.py] [_log()] Compression: none
2025-12-31T18:17:27.669 [DEBUG] [Thread-132391] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:17:27.687 [DEBUG] [Thread-132391] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:17:27.687 [DEBUG] [Thread-132391] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:17:27.688 [DEBUG] [Thread-132391] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T18:17:27.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T18:17:27.689 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:17:27.690 [DEBUG] [Thread-132391] [transport.py] [_log()] userauth is OK
2025-12-31T18:17:27.690 [DEBUG] [Thread-132391] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:17:27.690 [DEBUG] [Thread-132391] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:17:27.690 [DEBUG] [Thread-132391] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T18:17:27.690 [DEBUG] [Thread-132391] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:17:27.711 [INFO] [Thread-132391] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:17:27.712 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:17:28.427 [DEBUG] [Thread-132391] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:17:28.427 [DEBUG] [Thread-132391] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:17:28.427 [DEBUG] [Thread-132391] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T18:17:28.467 [DEBUG] [Thread-132391] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:17:28.467 [DEBUG] [Thread-132391] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:17:28.473 [DEBUG] [Thread-132391] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:17:28.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:17:28.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T18:17:28.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T18:17:28.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T18:17:28.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:17:28.497 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T18:17:28.497 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:17:28.497 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:17:28.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T18:17:28.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.678265 -999.00  +22.80  27.72     29   +3.90 1 2 1 1 1   887    0 16.90 -109.27 ----- 25.1 27.7 270.8 32.0 24.6 -23.9 24.7 -23.1 24.3 -22.0 24.5 -23.3
2025-12-31T18:17:28.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T18:17:28.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T18:17:28.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.678265
2025-12-31T18:17:28.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T18:17:28.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T18:17:28.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T18:17:28.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T18:17:28.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T18:17:28.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T18:17:09', tmtdew=22.12, humidity=23.41, cloud=0.0, wind=29.85, temperature=23.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T16:16:42.096', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T18:17:28.499 [DEBUG] [Thread-132391] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:17:28.580 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T18:17:28.592 [DEBUG] [Thread-132394] [transport.py] [_log()] starting thread (client mode): 0xb6bbc640
2025-12-31T18:17:28.592 [DEBUG] [Thread-132394] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:17:28.607 [DEBUG] [Thread-132394] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T18:17:28.608 [INFO] [Thread-132394] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T18:17:28.615 [DEBUG] [Thread-132394] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:17:28.615 [DEBUG] [Thread-132394] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T18:17:28.615 [DEBUG] [Thread-132394] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:17:28.615 [DEBUG] [Thread-132394] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:17:28.616 [DEBUG] [Thread-132394] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:17:28.616 [DEBUG] [Thread-132394] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:17:28.616 [DEBUG] [Thread-132394] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:17:28.616 [DEBUG] [Thread-132394] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:17:28.616 [DEBUG] [Thread-132394] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:17:28.616 [DEBUG] [Thread-132394] [transport.py] [_log()] client lang: <none>
2025-12-31T18:17:28.616 [DEBUG] [Thread-132394] [transport.py] [_log()] server lang: <none>
2025-12-31T18:17:28.616 [DEBUG] [Thread-132394] [transport.py] [_log()] kex follows: False
2025-12-31T18:17:28.616 [DEBUG] [Thread-132394] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:17:28.617 [DEBUG] [Thread-132394] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:17:28.617 [DEBUG] [Thread-132394] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:17:28.617 [DEBUG] [Thread-132394] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:17:28.617 [DEBUG] [Thread-132394] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:17:28.617 [DEBUG] [Thread-132394] [transport.py] [_log()] Compression: none
2025-12-31T18:17:28.617 [DEBUG] [Thread-132394] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:17:28.674 [DEBUG] [Thread-132394] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:17:28.674 [DEBUG] [Thread-132394] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:17:28.675 [DEBUG] [Thread-132394] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T18:17:28.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T18:17:28.676 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:17:28.730 [DEBUG] [Thread-132394] [transport.py] [_log()] userauth is OK
2025-12-31T18:17:28.730 [DEBUG] [Thread-132394] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:17:28.731 [DEBUG] [Thread-132394] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:17:28.731 [DEBUG] [Thread-132394] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T18:17:28.731 [DEBUG] [Thread-132394] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:17:28.755 [INFO] [Thread-132394] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:17:28.755 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T18:17:28.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:17:29.581 [DEBUG] [Thread-132394] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:17:29.581 [DEBUG] [Thread-132394] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:17:29.629 [DEBUG] [Thread-132394] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:17:29.629 [DEBUG] [Thread-132394] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:17:29.637 [DEBUG] [Thread-132394] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:17:29.645 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:17:29.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T18:17:29.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T18:17:29.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:17:29.661 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:17:29.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:17:29.669 [DEBUG] [Thread-132394] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:17:30.115 [DEBUG] [Thread-132396 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:17:31.496 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:17:31.497 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:17:38.948 [DEBUG] [Thread-132397 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:17:54.000 [DEBUG] [Thread-132398 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:17:59.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T18:17:59.692 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T18:17:59.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T18:18:00.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 18, 17, 41), 22.21, 23.34, 0.0, 27.35, 23.11, 0, 0, 0, 2, 0, 0),)
2025-12-31T18:18:00.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 18:17:41
2025-12-31T18:18:00.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T18:18:00.688 [DEBUG] [Thread-132399] [transport.py] [_log()] starting thread (client mode): 0xb6bbdb70
2025-12-31T18:18:00.688 [DEBUG] [Thread-132399] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:18:00.708 [DEBUG] [Thread-132399] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T18:18:00.708 [INFO] [Thread-132399] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T18:18:00.711 [DEBUG] [Thread-132399] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:18:00.711 [DEBUG] [Thread-132399] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T18:18:00.711 [DEBUG] [Thread-132399] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:18:00.711 [DEBUG] [Thread-132399] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:18:00.711 [DEBUG] [Thread-132399] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:18:00.711 [DEBUG] [Thread-132399] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:18:00.711 [DEBUG] [Thread-132399] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:18:00.711 [DEBUG] [Thread-132399] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:18:00.711 [DEBUG] [Thread-132399] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:18:00.711 [DEBUG] [Thread-132399] [transport.py] [_log()] client lang: <none>
2025-12-31T18:18:00.711 [DEBUG] [Thread-132399] [transport.py] [_log()] server lang: <none>
2025-12-31T18:18:00.711 [DEBUG] [Thread-132399] [transport.py] [_log()] kex follows: False
2025-12-31T18:18:00.711 [DEBUG] [Thread-132399] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:18:00.711 [DEBUG] [Thread-132399] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:18:00.711 [DEBUG] [Thread-132399] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:18:00.711 [DEBUG] [Thread-132399] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:18:00.711 [DEBUG] [Thread-132399] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:18:00.711 [DEBUG] [Thread-132399] [transport.py] [_log()] Compression: none
2025-12-31T18:18:00.712 [DEBUG] [Thread-132399] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:18:00.729 [DEBUG] [Thread-132399] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:18:00.730 [DEBUG] [Thread-132399] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:18:00.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T18:18:00.731 [DEBUG] [Thread-132399] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T18:18:00.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:18:00.733 [DEBUG] [Thread-132399] [transport.py] [_log()] userauth is OK
2025-12-31T18:18:00.734 [DEBUG] [Thread-132399] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:18:00.734 [DEBUG] [Thread-132399] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:18:00.734 [DEBUG] [Thread-132399] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T18:18:00.734 [DEBUG] [Thread-132399] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:18:00.753 [INFO] [Thread-132399] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:18:00.754 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:18:01.401 [DEBUG] [Thread-132399] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:18:01.402 [DEBUG] [Thread-132399] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:18:01.402 [DEBUG] [Thread-132399] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T18:18:01.443 [DEBUG] [Thread-132399] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:18:01.443 [DEBUG] [Thread-132399] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:18:01.447 [DEBUG] [Thread-132399] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:18:01.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:18:01.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T18:18:01.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T18:18:01.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T18:18:01.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:18:01.470 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T18:18:01.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:18:01.470 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:18:01.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T18:18:01.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.678612 -999.00  +22.80  18.94     29   +3.90 1 1 1 1 1   887    0 16.66 -106.74 ----- 22.4 18.9 263.9 29.4 24.6 -23.8 24.6 -23.5 24.2 -22.7 24.4 -22.8
2025-12-31T18:18:01.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T18:18:01.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T18:18:01.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.678612
2025-12-31T18:18:01.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T18:18:01.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T18:18:01.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T18:18:01.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T18:18:01.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T18:18:01.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T18:17:41', tmtdew=22.21, humidity=23.34, cloud=0.0, wind=27.35, temperature=23.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T16:17:12.077', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T18:18:01.474 [DEBUG] [Thread-132399] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:18:01.557 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T18:18:01.570 [DEBUG] [Thread-132402] [transport.py] [_log()] starting thread (client mode): 0xb6bb96c0
2025-12-31T18:18:01.570 [DEBUG] [Thread-132402] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:18:01.587 [DEBUG] [Thread-132402] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T18:18:01.587 [INFO] [Thread-132402] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T18:18:01.595 [DEBUG] [Thread-132402] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:18:01.595 [DEBUG] [Thread-132402] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T18:18:01.595 [DEBUG] [Thread-132402] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:18:01.595 [DEBUG] [Thread-132402] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:18:01.595 [DEBUG] [Thread-132402] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:18:01.595 [DEBUG] [Thread-132402] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:18:01.595 [DEBUG] [Thread-132402] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:18:01.595 [DEBUG] [Thread-132402] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:18:01.595 [DEBUG] [Thread-132402] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:18:01.595 [DEBUG] [Thread-132402] [transport.py] [_log()] client lang: <none>
2025-12-31T18:18:01.595 [DEBUG] [Thread-132402] [transport.py] [_log()] server lang: <none>
2025-12-31T18:18:01.595 [DEBUG] [Thread-132402] [transport.py] [_log()] kex follows: False
2025-12-31T18:18:01.595 [DEBUG] [Thread-132402] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:18:01.596 [DEBUG] [Thread-132402] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:18:01.596 [DEBUG] [Thread-132402] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:18:01.596 [DEBUG] [Thread-132402] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:18:01.596 [DEBUG] [Thread-132402] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:18:01.596 [DEBUG] [Thread-132402] [transport.py] [_log()] Compression: none
2025-12-31T18:18:01.596 [DEBUG] [Thread-132402] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:18:01.653 [DEBUG] [Thread-132402] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:18:01.654 [DEBUG] [Thread-132402] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:18:01.654 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T18:18:01.655 [DEBUG] [Thread-132402] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T18:18:01.656 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:18:01.709 [DEBUG] [Thread-132402] [transport.py] [_log()] userauth is OK
2025-12-31T18:18:01.709 [DEBUG] [Thread-132402] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:18:01.709 [DEBUG] [Thread-132402] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:18:01.709 [DEBUG] [Thread-132402] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T18:18:01.709 [DEBUG] [Thread-132402] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:18:01.723 [INFO] [Thread-132402] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:18:01.723 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T18:18:01.723 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:18:02.597 [DEBUG] [Thread-132402] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:18:02.598 [DEBUG] [Thread-132402] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:18:02.645 [DEBUG] [Thread-132402] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:18:02.645 [DEBUG] [Thread-132402] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:18:02.655 [DEBUG] [Thread-132402] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:18:02.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:18:02.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T18:18:02.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T18:18:02.683 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:18:02.683 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:18:02.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:18:02.692 [DEBUG] [Thread-132402] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:18:09.033 [DEBUG] [Thread-132404 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:18:24.069 [DEBUG] [Thread-132405 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:18:30.167 [DEBUG] [Thread-132406 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:18:31.640 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:18:31.641 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:18:32.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T18:18:32.714 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T18:18:32.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-12-31T18:18:33.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 18, 18, 13), 22.25, 23.26, 0.0, 25.99, 23.02, 0, 0, 0, 2, 0, 0),)
2025-12-31T18:18:33.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 18:18:13
2025-12-31T18:18:33.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T18:18:33.711 [DEBUG] [Thread-132407] [transport.py] [_log()] starting thread (client mode): 0xb9593940
2025-12-31T18:18:33.711 [DEBUG] [Thread-132407] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:18:33.731 [DEBUG] [Thread-132407] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T18:18:33.731 [INFO] [Thread-132407] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T18:18:33.734 [DEBUG] [Thread-132407] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:18:33.734 [DEBUG] [Thread-132407] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T18:18:33.734 [DEBUG] [Thread-132407] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:18:33.735 [DEBUG] [Thread-132407] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:18:33.735 [DEBUG] [Thread-132407] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:18:33.735 [DEBUG] [Thread-132407] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:18:33.735 [DEBUG] [Thread-132407] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:18:33.735 [DEBUG] [Thread-132407] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:18:33.735 [DEBUG] [Thread-132407] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:18:33.735 [DEBUG] [Thread-132407] [transport.py] [_log()] client lang: <none>
2025-12-31T18:18:33.735 [DEBUG] [Thread-132407] [transport.py] [_log()] server lang: <none>
2025-12-31T18:18:33.735 [DEBUG] [Thread-132407] [transport.py] [_log()] kex follows: False
2025-12-31T18:18:33.735 [DEBUG] [Thread-132407] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:18:33.735 [DEBUG] [Thread-132407] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:18:33.735 [DEBUG] [Thread-132407] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:18:33.735 [DEBUG] [Thread-132407] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:18:33.735 [DEBUG] [Thread-132407] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:18:33.735 [DEBUG] [Thread-132407] [transport.py] [_log()] Compression: none
2025-12-31T18:18:33.735 [DEBUG] [Thread-132407] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:18:33.756 [DEBUG] [Thread-132407] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:18:33.756 [DEBUG] [Thread-132407] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:18:33.757 [DEBUG] [Thread-132407] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T18:18:33.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T18:18:33.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:18:33.800 [DEBUG] [Thread-132407] [transport.py] [_log()] userauth is OK
2025-12-31T18:18:33.801 [DEBUG] [Thread-132407] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:18:33.801 [DEBUG] [Thread-132407] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:18:33.801 [DEBUG] [Thread-132407] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T18:18:33.801 [DEBUG] [Thread-132407] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:18:33.832 [INFO] [Thread-132407] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:18:33.833 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:18:34.586 [DEBUG] [Thread-132407] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:18:34.590 [DEBUG] [Thread-132407] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:18:34.590 [DEBUG] [Thread-132407] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T18:18:34.628 [DEBUG] [Thread-132407] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:18:34.628 [DEBUG] [Thread-132407] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:18:34.632 [DEBUG] [Thread-132407] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:18:34.642 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:18:34.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T18:18:34.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T18:18:34.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T18:18:34.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:18:34.654 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T18:18:34.654 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:18:34.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:18:34.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T18:18:34.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.678960 -999.00  +22.90  23.16     28   +3.70 1 2 1 1 1   887    0 16.82 -105.69 ----- 21.2 23.2 273.8 27.6 24.5 -24.3 24.6 -23.4 24.2 -22.1 24.4 -23.1
2025-12-31T18:18:34.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T18:18:34.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T18:18:34.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.678960
2025-12-31T18:18:34.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T18:18:34.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T18:18:34.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T18:18:34.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T18:18:34.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T18:18:34.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T18:18:13', tmtdew=22.25, humidity=23.26, cloud=0.0, wind=25.99, temperature=23.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T16:17:42.144', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T18:18:34.657 [DEBUG] [Thread-132407] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:18:34.740 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T18:18:34.752 [DEBUG] [Thread-132410] [transport.py] [_log()] starting thread (client mode): 0xb1747820
2025-12-31T18:18:34.753 [DEBUG] [Thread-132410] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:18:34.767 [DEBUG] [Thread-132410] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T18:18:34.768 [INFO] [Thread-132410] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T18:18:34.775 [DEBUG] [Thread-132410] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:18:34.775 [DEBUG] [Thread-132410] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T18:18:34.775 [DEBUG] [Thread-132410] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:18:34.775 [DEBUG] [Thread-132410] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:18:34.776 [DEBUG] [Thread-132410] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:18:34.776 [DEBUG] [Thread-132410] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:18:34.776 [DEBUG] [Thread-132410] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:18:34.776 [DEBUG] [Thread-132410] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:18:34.776 [DEBUG] [Thread-132410] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:18:34.776 [DEBUG] [Thread-132410] [transport.py] [_log()] client lang: <none>
2025-12-31T18:18:34.776 [DEBUG] [Thread-132410] [transport.py] [_log()] server lang: <none>
2025-12-31T18:18:34.776 [DEBUG] [Thread-132410] [transport.py] [_log()] kex follows: False
2025-12-31T18:18:34.776 [DEBUG] [Thread-132410] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:18:34.776 [DEBUG] [Thread-132410] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:18:34.776 [DEBUG] [Thread-132410] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:18:34.776 [DEBUG] [Thread-132410] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:18:34.776 [DEBUG] [Thread-132410] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:18:34.776 [DEBUG] [Thread-132410] [transport.py] [_log()] Compression: none
2025-12-31T18:18:34.776 [DEBUG] [Thread-132410] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:18:34.834 [DEBUG] [Thread-132410] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:18:34.834 [DEBUG] [Thread-132410] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:18:34.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T18:18:34.836 [DEBUG] [Thread-132410] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T18:18:34.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:18:34.891 [DEBUG] [Thread-132410] [transport.py] [_log()] userauth is OK
2025-12-31T18:18:34.891 [DEBUG] [Thread-132410] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:18:34.891 [DEBUG] [Thread-132410] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:18:34.891 [DEBUG] [Thread-132410] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T18:18:34.891 [DEBUG] [Thread-132410] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:18:34.910 [INFO] [Thread-132410] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:18:34.910 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T18:18:34.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:18:35.775 [DEBUG] [Thread-132410] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:18:35.775 [DEBUG] [Thread-132410] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:18:35.823 [DEBUG] [Thread-132410] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:18:35.823 [DEBUG] [Thread-132410] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:18:35.832 [DEBUG] [Thread-132410] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:18:35.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:18:35.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T18:18:35.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T18:18:35.858 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:18:35.858 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:18:35.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:18:35.866 [DEBUG] [Thread-132410] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:18:39.104 [DEBUG] [Thread-132412 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:18:54.152 [DEBUG] [Thread-132413 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:19:05.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T18:19:05.889 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T18:19:05.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T18:19:06.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 18, 18, 45), 22.23, 22.79, 0.0, 29.91, 23.05, 0, 0, 0, 2, 0, 0),)
2025-12-31T18:19:06.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 18:18:45
2025-12-31T18:19:06.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T18:19:06.879 [DEBUG] [Thread-132414] [transport.py] [_log()] starting thread (client mode): 0xb6bb3430
2025-12-31T18:19:06.879 [DEBUG] [Thread-132414] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:19:06.899 [DEBUG] [Thread-132414] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T18:19:06.900 [INFO] [Thread-132414] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T18:19:06.902 [DEBUG] [Thread-132414] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:19:06.903 [DEBUG] [Thread-132414] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T18:19:06.903 [DEBUG] [Thread-132414] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:19:06.903 [DEBUG] [Thread-132414] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:19:06.903 [DEBUG] [Thread-132414] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:19:06.903 [DEBUG] [Thread-132414] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:19:06.903 [DEBUG] [Thread-132414] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:19:06.903 [DEBUG] [Thread-132414] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:19:06.903 [DEBUG] [Thread-132414] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:19:06.903 [DEBUG] [Thread-132414] [transport.py] [_log()] client lang: <none>
2025-12-31T18:19:06.903 [DEBUG] [Thread-132414] [transport.py] [_log()] server lang: <none>
2025-12-31T18:19:06.903 [DEBUG] [Thread-132414] [transport.py] [_log()] kex follows: False
2025-12-31T18:19:06.904 [DEBUG] [Thread-132414] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:19:06.904 [DEBUG] [Thread-132414] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:19:06.904 [DEBUG] [Thread-132414] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:19:06.904 [DEBUG] [Thread-132414] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:19:06.904 [DEBUG] [Thread-132414] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:19:06.904 [DEBUG] [Thread-132414] [transport.py] [_log()] Compression: none
2025-12-31T18:19:06.904 [DEBUG] [Thread-132414] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:19:06.912 [DEBUG] [Thread-132414] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:19:06.912 [DEBUG] [Thread-132414] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:19:06.913 [DEBUG] [Thread-132414] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T18:19:06.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T18:19:06.914 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:19:06.957 [DEBUG] [Thread-132414] [transport.py] [_log()] userauth is OK
2025-12-31T18:19:06.957 [DEBUG] [Thread-132414] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:19:06.957 [DEBUG] [Thread-132414] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:19:06.957 [DEBUG] [Thread-132414] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T18:19:06.957 [DEBUG] [Thread-132414] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:19:06.990 [INFO] [Thread-132414] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:19:06.991 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:19:07.661 [DEBUG] [Thread-132414] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:19:07.661 [DEBUG] [Thread-132414] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:19:07.661 [DEBUG] [Thread-132414] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T18:19:07.702 [DEBUG] [Thread-132414] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:19:07.702 [DEBUG] [Thread-132414] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:19:07.706 [DEBUG] [Thread-132414] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:19:07.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:19:07.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T18:19:07.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T18:19:07.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T18:19:07.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:19:07.731 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T18:19:07.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:19:07.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:19:07.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T18:19:07.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.679307 -999.00  +22.90  24.13     28   +3.70 1 1 1 1 1   887    0 16.47 -108.69 ----- 25.2 24.1 272.2 28.8 24.4 -24.3 24.6 -23.6 24.1 -23.3 24.4 -22.9
2025-12-31T18:19:07.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T18:19:07.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T18:19:07.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.679307
2025-12-31T18:19:07.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T18:19:07.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T18:19:07.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T18:19:07.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T18:19:07.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T18:19:07.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T18:18:45', tmtdew=22.23, humidity=22.79, cloud=0.0, wind=29.91, temperature=23.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T16:18:12.125', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T18:19:07.734 [DEBUG] [Thread-132414] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:19:07.808 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T18:19:07.820 [DEBUG] [Thread-132417] [transport.py] [_log()] starting thread (client mode): 0xb6ba07f0
2025-12-31T18:19:07.820 [DEBUG] [Thread-132417] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:19:07.836 [DEBUG] [Thread-132417] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T18:19:07.836 [INFO] [Thread-132417] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T18:19:07.843 [DEBUG] [Thread-132417] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:19:07.844 [DEBUG] [Thread-132417] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T18:19:07.844 [DEBUG] [Thread-132417] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:19:07.844 [DEBUG] [Thread-132417] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:19:07.844 [DEBUG] [Thread-132417] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:19:07.844 [DEBUG] [Thread-132417] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:19:07.844 [DEBUG] [Thread-132417] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:19:07.844 [DEBUG] [Thread-132417] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:19:07.844 [DEBUG] [Thread-132417] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:19:07.844 [DEBUG] [Thread-132417] [transport.py] [_log()] client lang: <none>
2025-12-31T18:19:07.844 [DEBUG] [Thread-132417] [transport.py] [_log()] server lang: <none>
2025-12-31T18:19:07.844 [DEBUG] [Thread-132417] [transport.py] [_log()] kex follows: False
2025-12-31T18:19:07.844 [DEBUG] [Thread-132417] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:19:07.844 [DEBUG] [Thread-132417] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:19:07.844 [DEBUG] [Thread-132417] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:19:07.844 [DEBUG] [Thread-132417] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:19:07.845 [DEBUG] [Thread-132417] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:19:07.845 [DEBUG] [Thread-132417] [transport.py] [_log()] Compression: none
2025-12-31T18:19:07.845 [DEBUG] [Thread-132417] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:19:07.901 [DEBUG] [Thread-132417] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:19:07.902 [DEBUG] [Thread-132417] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:19:07.902 [DEBUG] [Thread-132417] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T18:19:07.902 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T18:19:07.903 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:19:07.958 [DEBUG] [Thread-132417] [transport.py] [_log()] userauth is OK
2025-12-31T18:19:07.959 [DEBUG] [Thread-132417] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:19:07.959 [DEBUG] [Thread-132417] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:19:07.959 [DEBUG] [Thread-132417] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T18:19:07.959 [DEBUG] [Thread-132417] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:19:07.980 [INFO] [Thread-132417] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:19:07.980 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T18:19:07.981 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:19:08.845 [DEBUG] [Thread-132417] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:19:08.845 [DEBUG] [Thread-132417] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:19:08.893 [DEBUG] [Thread-132417] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:19:08.893 [DEBUG] [Thread-132417] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:19:08.903 [DEBUG] [Thread-132417] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:19:08.912 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:19:08.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T18:19:08.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T18:19:08.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:19:08.931 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:19:08.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:19:08.940 [DEBUG] [Thread-132417] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:19:09.188 [DEBUG] [Thread-132419 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:19:24.248 [DEBUG] [Thread-132420 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:19:30.215 [DEBUG] [Thread-132421 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:19:31.783 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:19:31.783 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:19:38.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T18:19:38.963 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T18:19:38.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T18:19:39.284 [DEBUG] [Thread-132422 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:19:39.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 18, 19, 17), 22.24, 22.77, 0.0, 28.74, 23.05, 0, 0, 0, 2, 0, 0),)
2025-12-31T18:19:39.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 18:19:17
2025-12-31T18:19:39.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T18:19:39.960 [DEBUG] [Thread-132423] [transport.py] [_log()] starting thread (client mode): 0xb6ba2c20
2025-12-31T18:19:39.960 [DEBUG] [Thread-132423] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:19:39.980 [DEBUG] [Thread-132423] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T18:19:39.980 [INFO] [Thread-132423] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T18:19:39.982 [DEBUG] [Thread-132423] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:19:39.982 [DEBUG] [Thread-132423] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T18:19:39.982 [DEBUG] [Thread-132423] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:19:39.982 [DEBUG] [Thread-132423] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:19:39.982 [DEBUG] [Thread-132423] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:19:39.982 [DEBUG] [Thread-132423] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:19:39.982 [DEBUG] [Thread-132423] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:19:39.982 [DEBUG] [Thread-132423] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:19:39.982 [DEBUG] [Thread-132423] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:19:39.982 [DEBUG] [Thread-132423] [transport.py] [_log()] client lang: <none>
2025-12-31T18:19:39.982 [DEBUG] [Thread-132423] [transport.py] [_log()] server lang: <none>
2025-12-31T18:19:39.982 [DEBUG] [Thread-132423] [transport.py] [_log()] kex follows: False
2025-12-31T18:19:39.982 [DEBUG] [Thread-132423] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:19:39.982 [DEBUG] [Thread-132423] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:19:39.982 [DEBUG] [Thread-132423] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:19:39.982 [DEBUG] [Thread-132423] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:19:39.983 [DEBUG] [Thread-132423] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:19:39.983 [DEBUG] [Thread-132423] [transport.py] [_log()] Compression: none
2025-12-31T18:19:39.983 [DEBUG] [Thread-132423] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:19:39.993 [DEBUG] [Thread-132423] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:19:39.994 [DEBUG] [Thread-132423] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:19:39.994 [DEBUG] [Thread-132423] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T18:19:39.994 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T18:19:39.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:19:39.996 [DEBUG] [Thread-132423] [transport.py] [_log()] userauth is OK
2025-12-31T18:19:39.996 [DEBUG] [Thread-132423] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:19:39.996 [DEBUG] [Thread-132423] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:19:39.996 [DEBUG] [Thread-132423] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T18:19:39.996 [DEBUG] [Thread-132423] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:19:40.020 [INFO] [Thread-132423] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:19:40.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:19:40.757 [DEBUG] [Thread-132423] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:19:40.758 [DEBUG] [Thread-132423] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:19:40.758 [DEBUG] [Thread-132423] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T18:19:40.798 [DEBUG] [Thread-132423] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:19:40.798 [DEBUG] [Thread-132423] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:19:40.802 [DEBUG] [Thread-132423] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:19:40.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:19:40.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T18:19:40.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T18:19:40.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T18:19:40.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:19:40.828 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T18:19:40.828 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:19:40.828 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:19:40.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T18:19:40.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.679654 -999.00  +22.90  25.23     28   +3.80 1 1 1 1 1   887    0 17.17 -111.29 ----- 30.7 25.2 272.6 35.0 24.4 -24.8 24.5 -23.8 -999.0 -999.0 24.3 -23.0
2025-12-31T18:19:40.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T18:19:40.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T18:19:40.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.679654
2025-12-31T18:19:40.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T18:19:40.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T18:19:40.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T18:19:40.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T18:19:40.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T18:19:40.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T18:19:17', tmtdew=22.24, humidity=22.77, cloud=0.0, wind=28.74, temperature=23.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T16:18:42.106', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T18:19:40.831 [DEBUG] [Thread-132423] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:19:40.914 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T18:19:40.926 [DEBUG] [Thread-132426] [transport.py] [_log()] starting thread (client mode): 0xb6bbf4c0
2025-12-31T18:19:40.927 [DEBUG] [Thread-132426] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:19:40.941 [DEBUG] [Thread-132426] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T18:19:40.941 [INFO] [Thread-132426] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T18:19:40.948 [DEBUG] [Thread-132426] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:19:40.949 [DEBUG] [Thread-132426] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T18:19:40.949 [DEBUG] [Thread-132426] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:19:40.949 [DEBUG] [Thread-132426] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:19:40.949 [DEBUG] [Thread-132426] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:19:40.949 [DEBUG] [Thread-132426] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:19:40.949 [DEBUG] [Thread-132426] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:19:40.950 [DEBUG] [Thread-132426] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:19:40.950 [DEBUG] [Thread-132426] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:19:40.950 [DEBUG] [Thread-132426] [transport.py] [_log()] client lang: <none>
2025-12-31T18:19:40.950 [DEBUG] [Thread-132426] [transport.py] [_log()] server lang: <none>
2025-12-31T18:19:40.950 [DEBUG] [Thread-132426] [transport.py] [_log()] kex follows: False
2025-12-31T18:19:40.950 [DEBUG] [Thread-132426] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:19:40.950 [DEBUG] [Thread-132426] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:19:40.951 [DEBUG] [Thread-132426] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:19:40.951 [DEBUG] [Thread-132426] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:19:40.951 [DEBUG] [Thread-132426] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:19:40.951 [DEBUG] [Thread-132426] [transport.py] [_log()] Compression: none
2025-12-31T18:19:40.951 [DEBUG] [Thread-132426] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:19:41.005 [DEBUG] [Thread-132426] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:19:41.006 [DEBUG] [Thread-132426] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:19:41.006 [DEBUG] [Thread-132426] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T18:19:41.007 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T18:19:41.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:19:41.062 [DEBUG] [Thread-132426] [transport.py] [_log()] userauth is OK
2025-12-31T18:19:41.062 [DEBUG] [Thread-132426] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:19:41.062 [DEBUG] [Thread-132426] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:19:41.063 [DEBUG] [Thread-132426] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T18:19:41.063 [DEBUG] [Thread-132426] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:19:41.082 [INFO] [Thread-132426] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:19:41.082 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T18:19:41.083 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:19:41.899 [DEBUG] [Thread-132426] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:19:41.899 [DEBUG] [Thread-132426] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:19:41.947 [DEBUG] [Thread-132426] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:19:41.947 [DEBUG] [Thread-132426] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:19:41.956 [DEBUG] [Thread-132426] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:19:41.966 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:19:41.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T18:19:41.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T18:19:41.984 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:19:41.985 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:19:41.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:19:41.993 [DEBUG] [Thread-132426] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:19:54.320 [DEBUG] [Thread-132428 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:20:09.369 [DEBUG] [Thread-132429 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:20:11.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T18:20:11.996 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T18:20:11.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T18:20:12.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 18, 19, 49), 22.18, 23.29, 0.0, 33.19, 23.03, 0, 0, 0, 2, 0, 0),)
2025-12-31T18:20:12.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 18:19:49
2025-12-31T18:20:12.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T18:20:12.994 [DEBUG] [Thread-132430] [transport.py] [_log()] starting thread (client mode): 0xb6bbe1d0
2025-12-31T18:20:12.995 [DEBUG] [Thread-132430] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:20:13.015 [DEBUG] [Thread-132430] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T18:20:13.015 [INFO] [Thread-132430] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T18:20:13.017 [DEBUG] [Thread-132430] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:20:13.017 [DEBUG] [Thread-132430] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T18:20:13.017 [DEBUG] [Thread-132430] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:20:13.017 [DEBUG] [Thread-132430] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:20:13.017 [DEBUG] [Thread-132430] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:20:13.017 [DEBUG] [Thread-132430] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:20:13.017 [DEBUG] [Thread-132430] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:20:13.017 [DEBUG] [Thread-132430] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:20:13.017 [DEBUG] [Thread-132430] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:20:13.017 [DEBUG] [Thread-132430] [transport.py] [_log()] client lang: <none>
2025-12-31T18:20:13.017 [DEBUG] [Thread-132430] [transport.py] [_log()] server lang: <none>
2025-12-31T18:20:13.017 [DEBUG] [Thread-132430] [transport.py] [_log()] kex follows: False
2025-12-31T18:20:13.017 [DEBUG] [Thread-132430] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:20:13.017 [DEBUG] [Thread-132430] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:20:13.017 [DEBUG] [Thread-132430] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:20:13.017 [DEBUG] [Thread-132430] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:20:13.017 [DEBUG] [Thread-132430] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:20:13.017 [DEBUG] [Thread-132430] [transport.py] [_log()] Compression: none
2025-12-31T18:20:13.017 [DEBUG] [Thread-132430] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:20:13.036 [DEBUG] [Thread-132430] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:20:13.037 [DEBUG] [Thread-132430] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:20:13.037 [DEBUG] [Thread-132430] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T18:20:13.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T18:20:13.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:20:13.039 [DEBUG] [Thread-132430] [transport.py] [_log()] userauth is OK
2025-12-31T18:20:13.040 [DEBUG] [Thread-132430] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:20:13.040 [DEBUG] [Thread-132430] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:20:13.040 [DEBUG] [Thread-132430] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T18:20:13.040 [DEBUG] [Thread-132430] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:20:13.064 [INFO] [Thread-132430] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:20:13.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:20:13.726 [DEBUG] [Thread-132430] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:20:13.726 [DEBUG] [Thread-132430] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:20:13.726 [DEBUG] [Thread-132430] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T18:20:13.767 [DEBUG] [Thread-132430] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:20:13.768 [DEBUG] [Thread-132430] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:20:13.771 [DEBUG] [Thread-132430] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:20:13.783 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:20:13.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T18:20:13.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T18:20:13.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T18:20:13.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:20:13.796 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T18:20:13.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:20:13.796 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:20:13.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T18:20:13.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.680001 -999.00  +22.80  24.88     28   +3.80 1 1 1 1 1   887    0 16.15 -130.78 ----- 28.8 24.9 277.4 32.5 24.3 -24.9 24.4 -23.9 23.9 -23.2 24.2 -23.1
2025-12-31T18:20:13.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T18:20:13.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T18:20:13.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.680001
2025-12-31T18:20:13.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T18:20:13.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T18:20:13.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T18:20:13.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T18:20:13.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T18:20:13.798 [DEBUG] [Thread-132430] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:20:13.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T18:19:49', tmtdew=22.18, humidity=23.29, cloud=0.0, wind=33.19, temperature=23.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T16:19:12.086', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T18:20:13.883 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T18:20:13.898 [DEBUG] [Thread-132433] [transport.py] [_log()] starting thread (client mode): 0xb6bb9f30
2025-12-31T18:20:13.898 [DEBUG] [Thread-132433] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:20:13.915 [DEBUG] [Thread-132433] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T18:20:13.915 [INFO] [Thread-132433] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T18:20:13.923 [DEBUG] [Thread-132433] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:20:13.924 [DEBUG] [Thread-132433] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T18:20:13.924 [DEBUG] [Thread-132433] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:20:13.924 [DEBUG] [Thread-132433] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:20:13.924 [DEBUG] [Thread-132433] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:20:13.925 [DEBUG] [Thread-132433] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:20:13.925 [DEBUG] [Thread-132433] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:20:13.925 [DEBUG] [Thread-132433] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:20:13.925 [DEBUG] [Thread-132433] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:20:13.925 [DEBUG] [Thread-132433] [transport.py] [_log()] client lang: <none>
2025-12-31T18:20:13.925 [DEBUG] [Thread-132433] [transport.py] [_log()] server lang: <none>
2025-12-31T18:20:13.925 [DEBUG] [Thread-132433] [transport.py] [_log()] kex follows: False
2025-12-31T18:20:13.925 [DEBUG] [Thread-132433] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:20:13.925 [DEBUG] [Thread-132433] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:20:13.925 [DEBUG] [Thread-132433] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:20:13.925 [DEBUG] [Thread-132433] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:20:13.925 [DEBUG] [Thread-132433] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:20:13.925 [DEBUG] [Thread-132433] [transport.py] [_log()] Compression: none
2025-12-31T18:20:13.925 [DEBUG] [Thread-132433] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:20:13.981 [DEBUG] [Thread-132433] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:20:13.982 [DEBUG] [Thread-132433] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:20:13.982 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T18:20:13.983 [DEBUG] [Thread-132433] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T18:20:13.984 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:20:14.037 [DEBUG] [Thread-132433] [transport.py] [_log()] userauth is OK
2025-12-31T18:20:14.037 [DEBUG] [Thread-132433] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:20:14.037 [DEBUG] [Thread-132433] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:20:14.038 [DEBUG] [Thread-132433] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T18:20:14.038 [DEBUG] [Thread-132433] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:20:14.057 [INFO] [Thread-132433] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:20:14.057 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T18:20:14.057 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:20:14.877 [DEBUG] [Thread-132433] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:20:14.877 [DEBUG] [Thread-132433] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:20:14.925 [DEBUG] [Thread-132433] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:20:14.925 [DEBUG] [Thread-132433] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:20:14.934 [DEBUG] [Thread-132433] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:20:14.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:20:14.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T18:20:14.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T18:20:14.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:20:14.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:20:14.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:20:14.969 [DEBUG] [Thread-132433] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:20:24.400 [DEBUG] [Thread-132435 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:20:30.266 [DEBUG] [Thread-132436 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:20:31.921 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:20:31.923 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:20:39.449 [DEBUG] [Thread-132437 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:20:44.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T18:20:44.992 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T18:20:44.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T18:20:45.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 18, 20, 21), 22.15, 23.34, 0.0, 29.91, 23.05, 0, 0, 0, 2, 0, 0),)
2025-12-31T18:20:45.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 18:20:21
2025-12-31T18:20:45.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T18:20:46.030 [DEBUG] [Thread-132438] [transport.py] [_log()] starting thread (client mode): 0xb6ba2a40
2025-12-31T18:20:46.030 [DEBUG] [Thread-132438] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:20:46.051 [DEBUG] [Thread-132438] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T18:20:46.052 [INFO] [Thread-132438] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T18:20:46.055 [DEBUG] [Thread-132438] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:20:46.055 [DEBUG] [Thread-132438] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T18:20:46.055 [DEBUG] [Thread-132438] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:20:46.055 [DEBUG] [Thread-132438] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:20:46.055 [DEBUG] [Thread-132438] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:20:46.055 [DEBUG] [Thread-132438] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:20:46.055 [DEBUG] [Thread-132438] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:20:46.055 [DEBUG] [Thread-132438] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:20:46.055 [DEBUG] [Thread-132438] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:20:46.055 [DEBUG] [Thread-132438] [transport.py] [_log()] client lang: <none>
2025-12-31T18:20:46.055 [DEBUG] [Thread-132438] [transport.py] [_log()] server lang: <none>
2025-12-31T18:20:46.055 [DEBUG] [Thread-132438] [transport.py] [_log()] kex follows: False
2025-12-31T18:20:46.055 [DEBUG] [Thread-132438] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:20:46.055 [DEBUG] [Thread-132438] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:20:46.055 [DEBUG] [Thread-132438] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:20:46.055 [DEBUG] [Thread-132438] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:20:46.055 [DEBUG] [Thread-132438] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:20:46.056 [DEBUG] [Thread-132438] [transport.py] [_log()] Compression: none
2025-12-31T18:20:46.056 [DEBUG] [Thread-132438] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:20:46.071 [DEBUG] [Thread-132438] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:20:46.072 [DEBUG] [Thread-132438] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:20:46.072 [DEBUG] [Thread-132438] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T18:20:46.072 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T18:20:46.072 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:20:46.073 [DEBUG] [Thread-132438] [transport.py] [_log()] userauth is OK
2025-12-31T18:20:46.073 [DEBUG] [Thread-132438] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:20:46.073 [DEBUG] [Thread-132438] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:20:46.073 [DEBUG] [Thread-132438] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T18:20:46.073 [DEBUG] [Thread-132438] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:20:46.082 [INFO] [Thread-132438] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:20:46.082 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:20:46.711 [DEBUG] [Thread-132438] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:20:46.711 [DEBUG] [Thread-132438] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:20:46.711 [DEBUG] [Thread-132438] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T18:20:46.753 [DEBUG] [Thread-132438] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:20:46.753 [DEBUG] [Thread-132438] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:20:46.755 [DEBUG] [Thread-132438] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:20:46.767 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:20:46.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T18:20:46.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T18:20:46.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T18:20:46.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:20:46.774 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T18:20:46.774 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:20:46.774 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:20:46.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T18:20:46.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.680696 -999.00  +22.70  27.89     29   +3.80 1 1 1 1 1   887    0 15.58 -146.74 ----- 25.7 27.9 274.6 32.8 24.2 -24.4 24.3 -23.8 23.9 -22.9 24.1 -23.3
2025-12-31T18:20:46.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T18:20:46.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T18:20:46.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.680696
2025-12-31T18:20:46.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T18:20:46.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T18:20:46.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T18:20:46.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T18:20:46.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T18:20:46.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T18:20:21', tmtdew=22.15, humidity=23.34, cloud=0.0, wind=29.91, temperature=23.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T16:20:12.134', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T18:20:46.775 [DEBUG] [Thread-132438] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:20:46.850 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T18:20:46.860 [DEBUG] [Thread-132441] [transport.py] [_log()] starting thread (client mode): 0xb957bf10
2025-12-31T18:20:46.861 [DEBUG] [Thread-132441] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:20:46.875 [DEBUG] [Thread-132441] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T18:20:46.875 [INFO] [Thread-132441] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T18:20:46.882 [DEBUG] [Thread-132441] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:20:46.883 [DEBUG] [Thread-132441] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T18:20:46.883 [DEBUG] [Thread-132441] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:20:46.883 [DEBUG] [Thread-132441] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:20:46.883 [DEBUG] [Thread-132441] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:20:46.883 [DEBUG] [Thread-132441] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:20:46.883 [DEBUG] [Thread-132441] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:20:46.883 [DEBUG] [Thread-132441] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:20:46.883 [DEBUG] [Thread-132441] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:20:46.883 [DEBUG] [Thread-132441] [transport.py] [_log()] client lang: <none>
2025-12-31T18:20:46.883 [DEBUG] [Thread-132441] [transport.py] [_log()] server lang: <none>
2025-12-31T18:20:46.883 [DEBUG] [Thread-132441] [transport.py] [_log()] kex follows: False
2025-12-31T18:20:46.883 [DEBUG] [Thread-132441] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:20:46.883 [DEBUG] [Thread-132441] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:20:46.883 [DEBUG] [Thread-132441] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:20:46.883 [DEBUG] [Thread-132441] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:20:46.883 [DEBUG] [Thread-132441] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:20:46.883 [DEBUG] [Thread-132441] [transport.py] [_log()] Compression: none
2025-12-31T18:20:46.883 [DEBUG] [Thread-132441] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:20:46.940 [DEBUG] [Thread-132441] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:20:46.940 [DEBUG] [Thread-132441] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:20:46.940 [DEBUG] [Thread-132441] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T18:20:46.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T18:20:46.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:20:46.997 [DEBUG] [Thread-132441] [transport.py] [_log()] userauth is OK
2025-12-31T18:20:46.997 [DEBUG] [Thread-132441] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:20:46.997 [DEBUG] [Thread-132441] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:20:46.997 [DEBUG] [Thread-132441] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T18:20:46.997 [DEBUG] [Thread-132441] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:20:47.011 [INFO] [Thread-132441] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:20:47.011 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T18:20:47.011 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:20:47.865 [DEBUG] [Thread-132441] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:20:47.865 [DEBUG] [Thread-132441] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:20:47.913 [DEBUG] [Thread-132441] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:20:47.913 [DEBUG] [Thread-132441] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:20:47.921 [DEBUG] [Thread-132441] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:20:47.929 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:20:47.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T18:20:47.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T18:20:47.945 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:20:47.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:20:47.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:20:47.953 [DEBUG] [Thread-132441] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:20:54.480 [DEBUG] [Thread-132443 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:21:09.523 [DEBUG] [Thread-132444 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:21:17.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T18:21:17.976 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T18:21:17.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T18:21:18.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 18, 20, 53), 22.02, 23.37, 0.0, 26.43, 23.0, 0, 0, 0, 2, 0, 0),)
2025-12-31T18:21:18.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 18:20:53
2025-12-31T18:21:18.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T18:21:18.963 [DEBUG] [Thread-132445] [transport.py] [_log()] starting thread (client mode): 0xb6bbe1d0
2025-12-31T18:21:18.963 [DEBUG] [Thread-132445] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:21:18.984 [DEBUG] [Thread-132445] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T18:21:18.984 [INFO] [Thread-132445] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T18:21:18.988 [DEBUG] [Thread-132445] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:21:18.988 [DEBUG] [Thread-132445] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T18:21:18.988 [DEBUG] [Thread-132445] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:21:18.988 [DEBUG] [Thread-132445] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:21:18.988 [DEBUG] [Thread-132445] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:21:18.988 [DEBUG] [Thread-132445] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:21:18.988 [DEBUG] [Thread-132445] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:21:18.988 [DEBUG] [Thread-132445] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:21:18.988 [DEBUG] [Thread-132445] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:21:18.988 [DEBUG] [Thread-132445] [transport.py] [_log()] client lang: <none>
2025-12-31T18:21:18.988 [DEBUG] [Thread-132445] [transport.py] [_log()] server lang: <none>
2025-12-31T18:21:18.988 [DEBUG] [Thread-132445] [transport.py] [_log()] kex follows: False
2025-12-31T18:21:18.988 [DEBUG] [Thread-132445] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:21:18.988 [DEBUG] [Thread-132445] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:21:18.988 [DEBUG] [Thread-132445] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:21:18.988 [DEBUG] [Thread-132445] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:21:18.988 [DEBUG] [Thread-132445] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:21:18.988 [DEBUG] [Thread-132445] [transport.py] [_log()] Compression: none
2025-12-31T18:21:18.988 [DEBUG] [Thread-132445] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:21:19.006 [DEBUG] [Thread-132445] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:21:19.006 [DEBUG] [Thread-132445] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:21:19.007 [DEBUG] [Thread-132445] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T18:21:19.007 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T18:21:19.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:21:19.009 [DEBUG] [Thread-132445] [transport.py] [_log()] userauth is OK
2025-12-31T18:21:19.009 [DEBUG] [Thread-132445] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:21:19.009 [DEBUG] [Thread-132445] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:21:19.009 [DEBUG] [Thread-132445] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T18:21:19.009 [DEBUG] [Thread-132445] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:21:19.030 [INFO] [Thread-132445] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:21:19.031 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:21:19.769 [DEBUG] [Thread-132445] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:21:19.769 [DEBUG] [Thread-132445] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:21:19.769 [DEBUG] [Thread-132445] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T18:21:19.810 [DEBUG] [Thread-132445] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:21:19.810 [DEBUG] [Thread-132445] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:21:19.814 [DEBUG] [Thread-132445] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:21:19.824 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:21:19.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T18:21:19.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T18:21:19.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T18:21:19.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:21:19.831 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T18:21:19.831 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:21:19.832 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:21:19.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T18:21:19.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.681043 -999.00  +22.80  24.31     29   +4.00 1 1 1 1 1   887    0 15.90 -134.81 ----- 25.1 24.3 271.2 31.4 24.1 -24.3 24.3 -23.8 23.8 -22.8 24.1 -23.0
2025-12-31T18:21:19.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T18:21:19.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T18:21:19.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.681043
2025-12-31T18:21:19.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T18:21:19.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T18:21:19.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T18:21:19.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T18:21:19.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T18:21:19.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T18:20:53', tmtdew=22.02, humidity=23.37, cloud=0.0, wind=26.43, temperature=23.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T16:20:42.115', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T18:21:19.833 [DEBUG] [Thread-132445] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:21:19.904 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T18:21:19.917 [DEBUG] [Thread-132448] [transport.py] [_log()] starting thread (client mode): 0xb6ba2c50
2025-12-31T18:21:19.917 [DEBUG] [Thread-132448] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:21:19.933 [DEBUG] [Thread-132448] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T18:21:19.933 [INFO] [Thread-132448] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T18:21:19.940 [DEBUG] [Thread-132448] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:21:19.941 [DEBUG] [Thread-132448] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T18:21:19.941 [DEBUG] [Thread-132448] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:21:19.941 [DEBUG] [Thread-132448] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:21:19.941 [DEBUG] [Thread-132448] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:21:19.941 [DEBUG] [Thread-132448] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:21:19.941 [DEBUG] [Thread-132448] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:21:19.941 [DEBUG] [Thread-132448] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:21:19.941 [DEBUG] [Thread-132448] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:21:19.941 [DEBUG] [Thread-132448] [transport.py] [_log()] client lang: <none>
2025-12-31T18:21:19.941 [DEBUG] [Thread-132448] [transport.py] [_log()] server lang: <none>
2025-12-31T18:21:19.941 [DEBUG] [Thread-132448] [transport.py] [_log()] kex follows: False
2025-12-31T18:21:19.941 [DEBUG] [Thread-132448] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:21:19.941 [DEBUG] [Thread-132448] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:21:19.941 [DEBUG] [Thread-132448] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:21:19.941 [DEBUG] [Thread-132448] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:21:19.941 [DEBUG] [Thread-132448] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:21:19.942 [DEBUG] [Thread-132448] [transport.py] [_log()] Compression: none
2025-12-31T18:21:19.942 [DEBUG] [Thread-132448] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:21:19.997 [DEBUG] [Thread-132448] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:21:19.998 [DEBUG] [Thread-132448] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:21:19.999 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T18:21:19.999 [DEBUG] [Thread-132448] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T18:21:20.000 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:21:20.053 [DEBUG] [Thread-132448] [transport.py] [_log()] userauth is OK
2025-12-31T18:21:20.054 [DEBUG] [Thread-132448] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:21:20.054 [DEBUG] [Thread-132448] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:21:20.054 [DEBUG] [Thread-132448] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T18:21:20.054 [DEBUG] [Thread-132448] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:21:20.074 [INFO] [Thread-132448] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:21:20.074 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T18:21:20.075 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:21:20.885 [DEBUG] [Thread-132448] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:21:20.885 [DEBUG] [Thread-132448] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:21:20.934 [DEBUG] [Thread-132448] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:21:20.934 [DEBUG] [Thread-132448] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:21:20.946 [DEBUG] [Thread-132448] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:21:20.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:21:20.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T18:21:20.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T18:21:20.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:21:20.977 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:21:20.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:21:20.986 [DEBUG] [Thread-132448] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:21:24.561 [DEBUG] [Thread-132450 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:21:30.317 [DEBUG] [Thread-132451 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:21:32.068 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:21:32.069 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:21:39.601 [DEBUG] [Thread-132452 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:21:51.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T18:21:51.008 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T18:21:51.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T18:21:51.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 18, 21, 25), 21.92, 23.55, 0.0, 29.59, 23.07, 0, 0, 0, 2, 0, 0),)
2025-12-31T18:21:51.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 18:21:25
2025-12-31T18:21:51.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T18:21:51.993 [DEBUG] [Thread-132453] [transport.py] [_log()] starting thread (client mode): 0xb6b635b0
2025-12-31T18:21:51.993 [DEBUG] [Thread-132453] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:21:52.015 [DEBUG] [Thread-132453] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T18:21:52.015 [INFO] [Thread-132453] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T18:21:52.019 [DEBUG] [Thread-132453] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:21:52.019 [DEBUG] [Thread-132453] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T18:21:52.019 [DEBUG] [Thread-132453] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:21:52.019 [DEBUG] [Thread-132453] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:21:52.019 [DEBUG] [Thread-132453] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:21:52.019 [DEBUG] [Thread-132453] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:21:52.019 [DEBUG] [Thread-132453] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:21:52.019 [DEBUG] [Thread-132453] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:21:52.019 [DEBUG] [Thread-132453] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:21:52.019 [DEBUG] [Thread-132453] [transport.py] [_log()] client lang: <none>
2025-12-31T18:21:52.019 [DEBUG] [Thread-132453] [transport.py] [_log()] server lang: <none>
2025-12-31T18:21:52.019 [DEBUG] [Thread-132453] [transport.py] [_log()] kex follows: False
2025-12-31T18:21:52.019 [DEBUG] [Thread-132453] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:21:52.019 [DEBUG] [Thread-132453] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:21:52.019 [DEBUG] [Thread-132453] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:21:52.019 [DEBUG] [Thread-132453] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:21:52.019 [DEBUG] [Thread-132453] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:21:52.019 [DEBUG] [Thread-132453] [transport.py] [_log()] Compression: none
2025-12-31T18:21:52.019 [DEBUG] [Thread-132453] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:21:52.036 [DEBUG] [Thread-132453] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:21:52.037 [DEBUG] [Thread-132453] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:21:52.037 [DEBUG] [Thread-132453] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T18:21:52.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T18:21:52.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:21:52.039 [DEBUG] [Thread-132453] [transport.py] [_log()] userauth is OK
2025-12-31T18:21:52.040 [DEBUG] [Thread-132453] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:21:52.040 [DEBUG] [Thread-132453] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:21:52.040 [DEBUG] [Thread-132453] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T18:21:52.040 [DEBUG] [Thread-132453] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:21:52.065 [INFO] [Thread-132453] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:21:52.066 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:21:52.720 [DEBUG] [Thread-132453] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:21:52.721 [DEBUG] [Thread-132453] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:21:52.721 [DEBUG] [Thread-132453] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T18:21:52.762 [DEBUG] [Thread-132453] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:21:52.762 [DEBUG] [Thread-132453] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:21:52.766 [DEBUG] [Thread-132453] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:21:52.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:21:52.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T18:21:52.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T18:21:52.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T18:21:52.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:21:52.789 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T18:21:52.790 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:21:52.790 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:21:52.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T18:21:52.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.681390 -999.00  +22.70  29.58     29   +4.00 1 1 1 1 1   887    0 16.12 -139.37 ----- 26.1 29.6 268.8 32.3 24.1 -24.6 24.2 -23.9 23.7 -23.2 24.0 -23.2
2025-12-31T18:21:52.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T18:21:52.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T18:21:52.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.681390
2025-12-31T18:21:52.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T18:21:52.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T18:21:52.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T18:21:52.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T18:21:52.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T18:21:52.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T18:21:25', tmtdew=21.92, humidity=23.55, cloud=0.0, wind=29.59, temperature=23.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T16:21:12.096', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T18:21:52.792 [DEBUG] [Thread-132453] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:21:52.876 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T18:21:52.888 [DEBUG] [Thread-132456] [transport.py] [_log()] starting thread (client mode): 0xb6ba3310
2025-12-31T18:21:52.888 [DEBUG] [Thread-132456] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:21:52.908 [DEBUG] [Thread-132456] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T18:21:52.908 [INFO] [Thread-132456] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T18:21:52.916 [DEBUG] [Thread-132456] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:21:52.916 [DEBUG] [Thread-132456] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T18:21:52.916 [DEBUG] [Thread-132456] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:21:52.916 [DEBUG] [Thread-132456] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:21:52.916 [DEBUG] [Thread-132456] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:21:52.916 [DEBUG] [Thread-132456] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:21:52.916 [DEBUG] [Thread-132456] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:21:52.916 [DEBUG] [Thread-132456] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:21:52.916 [DEBUG] [Thread-132456] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:21:52.916 [DEBUG] [Thread-132456] [transport.py] [_log()] client lang: <none>
2025-12-31T18:21:52.916 [DEBUG] [Thread-132456] [transport.py] [_log()] server lang: <none>
2025-12-31T18:21:52.916 [DEBUG] [Thread-132456] [transport.py] [_log()] kex follows: False
2025-12-31T18:21:52.916 [DEBUG] [Thread-132456] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:21:52.916 [DEBUG] [Thread-132456] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:21:52.917 [DEBUG] [Thread-132456] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:21:52.917 [DEBUG] [Thread-132456] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:21:52.917 [DEBUG] [Thread-132456] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:21:52.917 [DEBUG] [Thread-132456] [transport.py] [_log()] Compression: none
2025-12-31T18:21:52.917 [DEBUG] [Thread-132456] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:21:52.973 [DEBUG] [Thread-132456] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:21:52.974 [DEBUG] [Thread-132456] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:21:52.975 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T18:21:52.975 [DEBUG] [Thread-132456] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T18:21:52.976 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:21:53.030 [DEBUG] [Thread-132456] [transport.py] [_log()] userauth is OK
2025-12-31T18:21:53.030 [DEBUG] [Thread-132456] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:21:53.030 [DEBUG] [Thread-132456] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:21:53.030 [DEBUG] [Thread-132456] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T18:21:53.030 [DEBUG] [Thread-132456] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:21:53.049 [INFO] [Thread-132456] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:21:53.049 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T18:21:53.050 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:21:53.848 [DEBUG] [Thread-132456] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:21:53.848 [DEBUG] [Thread-132456] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:21:53.896 [DEBUG] [Thread-132456] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:21:53.896 [DEBUG] [Thread-132456] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:21:53.906 [DEBUG] [Thread-132456] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:21:53.915 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:21:53.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T18:21:53.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-12-31T18:21:53.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:21:53.934 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:21:53.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:21:53.943 [DEBUG] [Thread-132456] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:21:54.638 [DEBUG] [Thread-132458 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:22:09.682 [DEBUG] [Thread-132459 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:22:23.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T18:22:23.957 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T18:22:23.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T18:22:24.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 18, 21, 57), 21.96, 23.67, 0.0, 23.15, 23.2, 0, 0, 0, 2, 0, 0),)
2025-12-31T18:22:24.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 18:21:57
2025-12-31T18:22:24.719 [DEBUG] [Thread-132460 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:22:24.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T18:22:24.957 [DEBUG] [Thread-132461] [transport.py] [_log()] starting thread (client mode): 0xb9590bb0
2025-12-31T18:22:24.957 [DEBUG] [Thread-132461] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:22:24.978 [DEBUG] [Thread-132461] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T18:22:24.978 [INFO] [Thread-132461] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T18:22:24.981 [DEBUG] [Thread-132461] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:22:24.981 [DEBUG] [Thread-132461] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T18:22:24.981 [DEBUG] [Thread-132461] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:22:24.981 [DEBUG] [Thread-132461] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:22:24.981 [DEBUG] [Thread-132461] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:22:24.981 [DEBUG] [Thread-132461] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:22:24.981 [DEBUG] [Thread-132461] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:22:24.981 [DEBUG] [Thread-132461] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:22:24.981 [DEBUG] [Thread-132461] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:22:24.982 [DEBUG] [Thread-132461] [transport.py] [_log()] client lang: <none>
2025-12-31T18:22:24.982 [DEBUG] [Thread-132461] [transport.py] [_log()] server lang: <none>
2025-12-31T18:22:24.982 [DEBUG] [Thread-132461] [transport.py] [_log()] kex follows: False
2025-12-31T18:22:24.982 [DEBUG] [Thread-132461] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:22:24.982 [DEBUG] [Thread-132461] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:22:24.982 [DEBUG] [Thread-132461] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:22:24.982 [DEBUG] [Thread-132461] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:22:24.982 [DEBUG] [Thread-132461] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:22:24.982 [DEBUG] [Thread-132461] [transport.py] [_log()] Compression: none
2025-12-31T18:22:24.982 [DEBUG] [Thread-132461] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:22:24.999 [DEBUG] [Thread-132461] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:22:25.000 [DEBUG] [Thread-132461] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:22:25.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T18:22:25.001 [DEBUG] [Thread-132461] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T18:22:25.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:22:25.003 [DEBUG] [Thread-132461] [transport.py] [_log()] userauth is OK
2025-12-31T18:22:25.003 [DEBUG] [Thread-132461] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:22:25.003 [DEBUG] [Thread-132461] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:22:25.004 [DEBUG] [Thread-132461] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T18:22:25.004 [DEBUG] [Thread-132461] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:22:25.040 [INFO] [Thread-132461] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:22:25.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:22:25.800 [DEBUG] [Thread-132461] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:22:25.800 [DEBUG] [Thread-132461] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:22:25.800 [DEBUG] [Thread-132461] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T18:22:25.841 [DEBUG] [Thread-132461] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:22:25.841 [DEBUG] [Thread-132461] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:22:25.843 [DEBUG] [Thread-132461] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:22:25.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:22:25.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T18:22:25.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T18:22:25.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T18:22:25.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:22:25.854 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T18:22:25.854 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:22:25.854 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:22:25.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T18:22:25.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.681737 -999.00  +22.70  21.95     29   +4.00 1 1 1 1 1   887    0 15.73 -136.78 ----- 20.8 21.9 273.6 37.7 24.1 -23.9 24.1 -23.5 23.7 -22.6 24.0 -22.8
2025-12-31T18:22:25.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T18:22:25.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T18:22:25.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.681737
2025-12-31T18:22:25.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T18:22:25.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T18:22:25.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T18:22:25.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T18:22:25.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T18:22:25.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T18:21:57', tmtdew=21.96, humidity=23.67, cloud=0.0, wind=23.15, temperature=23.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T16:21:42.077', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T18:22:25.855 [DEBUG] [Thread-132461] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:22:25.933 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T18:22:25.944 [DEBUG] [Thread-132464] [transport.py] [_log()] starting thread (client mode): 0xb6bba800
2025-12-31T18:22:25.944 [DEBUG] [Thread-132464] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:22:25.959 [DEBUG] [Thread-132464] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T18:22:25.959 [INFO] [Thread-132464] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T18:22:25.967 [DEBUG] [Thread-132464] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:22:25.967 [DEBUG] [Thread-132464] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T18:22:25.967 [DEBUG] [Thread-132464] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:22:25.967 [DEBUG] [Thread-132464] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:22:25.967 [DEBUG] [Thread-132464] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:22:25.967 [DEBUG] [Thread-132464] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:22:25.967 [DEBUG] [Thread-132464] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:22:25.967 [DEBUG] [Thread-132464] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:22:25.967 [DEBUG] [Thread-132464] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:22:25.967 [DEBUG] [Thread-132464] [transport.py] [_log()] client lang: <none>
2025-12-31T18:22:25.967 [DEBUG] [Thread-132464] [transport.py] [_log()] server lang: <none>
2025-12-31T18:22:25.967 [DEBUG] [Thread-132464] [transport.py] [_log()] kex follows: False
2025-12-31T18:22:25.967 [DEBUG] [Thread-132464] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:22:25.968 [DEBUG] [Thread-132464] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:22:25.968 [DEBUG] [Thread-132464] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:22:25.968 [DEBUG] [Thread-132464] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:22:25.968 [DEBUG] [Thread-132464] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:22:25.968 [DEBUG] [Thread-132464] [transport.py] [_log()] Compression: none
2025-12-31T18:22:25.968 [DEBUG] [Thread-132464] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:22:26.025 [DEBUG] [Thread-132464] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:22:26.026 [DEBUG] [Thread-132464] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:22:26.026 [DEBUG] [Thread-132464] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T18:22:26.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T18:22:26.027 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:22:26.085 [DEBUG] [Thread-132464] [transport.py] [_log()] userauth is OK
2025-12-31T18:22:26.085 [DEBUG] [Thread-132464] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:22:26.085 [DEBUG] [Thread-132464] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:22:26.085 [DEBUG] [Thread-132464] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T18:22:26.085 [DEBUG] [Thread-132464] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:22:26.103 [INFO] [Thread-132464] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:22:26.104 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T18:22:26.105 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:22:26.923 [DEBUG] [Thread-132464] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:22:26.923 [DEBUG] [Thread-132464] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:22:26.971 [DEBUG] [Thread-132464] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:22:26.971 [DEBUG] [Thread-132464] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:22:26.980 [DEBUG] [Thread-132464] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:22:26.989 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:22:26.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T18:22:26.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T18:22:27.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:22:27.008 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:22:27.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:22:27.017 [DEBUG] [Thread-132464] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:22:30.363 [DEBUG] [Thread-132466 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:22:32.209 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:22:32.210 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:22:39.748 [DEBUG] [Thread-132467 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:22:54.803 [DEBUG] [Thread-132468 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:22:57.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T18:22:57.040 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T18:22:57.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T18:22:57.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 18, 22, 30), 22.09, 23.44, 0.0, 21.53, 23.17, 0, 0, 0, 2, 0, 0),)
2025-12-31T18:22:57.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 18:22:30
2025-12-31T18:22:57.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T18:22:58.045 [DEBUG] [Thread-132469] [transport.py] [_log()] starting thread (client mode): 0xb9590bb0
2025-12-31T18:22:58.045 [DEBUG] [Thread-132469] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:22:58.065 [DEBUG] [Thread-132469] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T18:22:58.065 [INFO] [Thread-132469] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T18:22:58.068 [DEBUG] [Thread-132469] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:22:58.069 [DEBUG] [Thread-132469] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T18:22:58.069 [DEBUG] [Thread-132469] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:22:58.069 [DEBUG] [Thread-132469] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:22:58.069 [DEBUG] [Thread-132469] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:22:58.069 [DEBUG] [Thread-132469] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:22:58.069 [DEBUG] [Thread-132469] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:22:58.069 [DEBUG] [Thread-132469] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:22:58.069 [DEBUG] [Thread-132469] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:22:58.069 [DEBUG] [Thread-132469] [transport.py] [_log()] client lang: <none>
2025-12-31T18:22:58.069 [DEBUG] [Thread-132469] [transport.py] [_log()] server lang: <none>
2025-12-31T18:22:58.069 [DEBUG] [Thread-132469] [transport.py] [_log()] kex follows: False
2025-12-31T18:22:58.069 [DEBUG] [Thread-132469] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:22:58.069 [DEBUG] [Thread-132469] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:22:58.069 [DEBUG] [Thread-132469] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:22:58.069 [DEBUG] [Thread-132469] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:22:58.069 [DEBUG] [Thread-132469] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:22:58.069 [DEBUG] [Thread-132469] [transport.py] [_log()] Compression: none
2025-12-31T18:22:58.069 [DEBUG] [Thread-132469] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:22:58.087 [DEBUG] [Thread-132469] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:22:58.087 [DEBUG] [Thread-132469] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:22:58.088 [DEBUG] [Thread-132469] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T18:22:58.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T18:22:58.089 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:22:58.090 [DEBUG] [Thread-132469] [transport.py] [_log()] userauth is OK
2025-12-31T18:22:58.090 [DEBUG] [Thread-132469] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:22:58.091 [DEBUG] [Thread-132469] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:22:58.091 [DEBUG] [Thread-132469] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T18:22:58.091 [DEBUG] [Thread-132469] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:22:58.127 [INFO] [Thread-132469] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:22:58.127 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:22:58.759 [DEBUG] [Thread-132469] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:22:58.759 [DEBUG] [Thread-132469] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:22:58.759 [DEBUG] [Thread-132469] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T18:22:58.801 [DEBUG] [Thread-132469] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:22:58.801 [DEBUG] [Thread-132469] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:22:58.806 [DEBUG] [Thread-132469] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:22:58.818 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:22:58.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T18:22:58.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T18:22:58.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T18:22:58.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:22:58.835 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T18:22:58.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:22:58.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:22:58.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T18:22:58.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.682084 -999.00  +22.80  25.76     29   +4.00 1 2 1 1 1   887    0 15.87 -127.10 ----- 25.1 25.8 270.8 28.8 24.0 -24.3 24.1 -23.5 23.7 -22.4 24.0 -23.1
2025-12-31T18:22:58.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T18:22:58.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T18:22:58.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.682084
2025-12-31T18:22:58.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T18:22:58.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T18:22:58.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T18:22:58.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T18:22:58.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T18:22:58.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T18:22:30', tmtdew=22.09, humidity=23.44, cloud=0.0, wind=21.53, temperature=23.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T16:22:12.058', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T18:22:58.838 [DEBUG] [Thread-132469] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:22:58.921 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T18:22:58.934 [DEBUG] [Thread-132472] [transport.py] [_log()] starting thread (client mode): 0xb6bb85b0
2025-12-31T18:22:58.935 [DEBUG] [Thread-132472] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:22:58.950 [DEBUG] [Thread-132472] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T18:22:58.950 [INFO] [Thread-132472] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T18:22:58.958 [DEBUG] [Thread-132472] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:22:58.958 [DEBUG] [Thread-132472] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T18:22:58.958 [DEBUG] [Thread-132472] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:22:58.958 [DEBUG] [Thread-132472] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:22:58.959 [DEBUG] [Thread-132472] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:22:58.959 [DEBUG] [Thread-132472] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:22:58.959 [DEBUG] [Thread-132472] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:22:58.959 [DEBUG] [Thread-132472] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:22:58.959 [DEBUG] [Thread-132472] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:22:58.959 [DEBUG] [Thread-132472] [transport.py] [_log()] client lang: <none>
2025-12-31T18:22:58.959 [DEBUG] [Thread-132472] [transport.py] [_log()] server lang: <none>
2025-12-31T18:22:58.959 [DEBUG] [Thread-132472] [transport.py] [_log()] kex follows: False
2025-12-31T18:22:58.959 [DEBUG] [Thread-132472] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:22:58.959 [DEBUG] [Thread-132472] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:22:58.959 [DEBUG] [Thread-132472] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:22:58.959 [DEBUG] [Thread-132472] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:22:58.959 [DEBUG] [Thread-132472] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:22:58.959 [DEBUG] [Thread-132472] [transport.py] [_log()] Compression: none
2025-12-31T18:22:58.959 [DEBUG] [Thread-132472] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:22:59.018 [DEBUG] [Thread-132472] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:22:59.018 [DEBUG] [Thread-132472] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:22:59.019 [DEBUG] [Thread-132472] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T18:22:59.019 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T18:22:59.020 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:22:59.073 [DEBUG] [Thread-132472] [transport.py] [_log()] userauth is OK
2025-12-31T18:22:59.073 [DEBUG] [Thread-132472] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:22:59.074 [DEBUG] [Thread-132472] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:22:59.074 [DEBUG] [Thread-132472] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T18:22:59.074 [DEBUG] [Thread-132472] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:22:59.095 [INFO] [Thread-132472] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:22:59.095 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T18:22:59.096 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:22:59.996 [DEBUG] [Thread-132472] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:22:59.997 [DEBUG] [Thread-132472] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:23:00.045 [DEBUG] [Thread-132472] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:23:00.045 [DEBUG] [Thread-132472] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:23:00.054 [DEBUG] [Thread-132472] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:23:00.062 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:23:00.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T18:23:00.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T18:23:00.080 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:23:00.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:23:00.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:23:00.088 [DEBUG] [Thread-132472] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:23:09.841 [DEBUG] [Thread-132474 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:23:24.887 [DEBUG] [Thread-132475 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:23:30.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T18:23:30.109 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T18:23:30.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-12-31T18:23:30.412 [DEBUG] [Thread-132476 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:23:30.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 18, 23, 2), 22.17, 23.31, 0.0, 22.02, 23.15, 0, 0, 0, 2, 0, 0),)
2025-12-31T18:23:30.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 18:23:02
2025-12-31T18:23:30.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T18:23:31.101 [DEBUG] [Thread-132477] [transport.py] [_log()] starting thread (client mode): 0xb6bba3b0
2025-12-31T18:23:31.101 [DEBUG] [Thread-132477] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:23:31.121 [DEBUG] [Thread-132477] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T18:23:31.121 [INFO] [Thread-132477] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T18:23:31.124 [DEBUG] [Thread-132477] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:23:31.124 [DEBUG] [Thread-132477] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T18:23:31.124 [DEBUG] [Thread-132477] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:23:31.124 [DEBUG] [Thread-132477] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:23:31.124 [DEBUG] [Thread-132477] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:23:31.124 [DEBUG] [Thread-132477] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:23:31.124 [DEBUG] [Thread-132477] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:23:31.124 [DEBUG] [Thread-132477] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:23:31.124 [DEBUG] [Thread-132477] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:23:31.124 [DEBUG] [Thread-132477] [transport.py] [_log()] client lang: <none>
2025-12-31T18:23:31.124 [DEBUG] [Thread-132477] [transport.py] [_log()] server lang: <none>
2025-12-31T18:23:31.124 [DEBUG] [Thread-132477] [transport.py] [_log()] kex follows: False
2025-12-31T18:23:31.124 [DEBUG] [Thread-132477] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:23:31.124 [DEBUG] [Thread-132477] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:23:31.124 [DEBUG] [Thread-132477] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:23:31.125 [DEBUG] [Thread-132477] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:23:31.125 [DEBUG] [Thread-132477] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:23:31.125 [DEBUG] [Thread-132477] [transport.py] [_log()] Compression: none
2025-12-31T18:23:31.125 [DEBUG] [Thread-132477] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:23:31.143 [DEBUG] [Thread-132477] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:23:31.144 [DEBUG] [Thread-132477] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:23:31.144 [DEBUG] [Thread-132477] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T18:23:31.145 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T18:23:31.145 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:23:31.146 [DEBUG] [Thread-132477] [transport.py] [_log()] userauth is OK
2025-12-31T18:23:31.146 [DEBUG] [Thread-132477] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:23:31.147 [DEBUG] [Thread-132477] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:23:31.147 [DEBUG] [Thread-132477] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T18:23:31.147 [DEBUG] [Thread-132477] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:23:31.171 [INFO] [Thread-132477] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:23:31.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:23:31.937 [DEBUG] [Thread-132477] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:23:31.938 [DEBUG] [Thread-132477] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:23:31.947 [DEBUG] [Thread-132477] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T18:23:31.979 [DEBUG] [Thread-132477] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:23:31.979 [DEBUG] [Thread-132477] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:23:31.983 [DEBUG] [Thread-132477] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:23:31.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:23:31.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T18:23:31.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T18:23:32.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T18:23:32.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:23:32.007 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T18:23:32.007 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:23:32.007 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:23:32.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T18:23:32.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.682432 -999.00  +22.80  14.82     29   +4.00 1 2 1 1 1   887    0 15.55 -139.59 ----- 16.2 14.8 283.0 25.1 24.1 -24.0 24.1 -23.5 23.7 -22.4 24.0 -22.6
2025-12-31T18:23:32.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T18:23:32.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T18:23:32.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.682432
2025-12-31T18:23:32.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T18:23:32.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T18:23:32.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T18:23:32.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T18:23:32.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T18:23:32.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T18:23:02', tmtdew=22.17, humidity=23.31, cloud=0.0, wind=22.02, temperature=23.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T16:22:42.125', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T18:23:32.010 [DEBUG] [Thread-132477] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:23:32.090 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T18:23:32.102 [DEBUG] [Thread-132480] [transport.py] [_log()] starting thread (client mode): 0xb6ba3a00
2025-12-31T18:23:32.102 [DEBUG] [Thread-132480] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:23:32.118 [DEBUG] [Thread-132480] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T18:23:32.118 [INFO] [Thread-132480] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T18:23:32.126 [DEBUG] [Thread-132480] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:23:32.126 [DEBUG] [Thread-132480] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T18:23:32.126 [DEBUG] [Thread-132480] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:23:32.126 [DEBUG] [Thread-132480] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:23:32.126 [DEBUG] [Thread-132480] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:23:32.126 [DEBUG] [Thread-132480] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:23:32.126 [DEBUG] [Thread-132480] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:23:32.127 [DEBUG] [Thread-132480] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:23:32.127 [DEBUG] [Thread-132480] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:23:32.127 [DEBUG] [Thread-132480] [transport.py] [_log()] client lang: <none>
2025-12-31T18:23:32.127 [DEBUG] [Thread-132480] [transport.py] [_log()] server lang: <none>
2025-12-31T18:23:32.127 [DEBUG] [Thread-132480] [transport.py] [_log()] kex follows: False
2025-12-31T18:23:32.127 [DEBUG] [Thread-132480] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:23:32.127 [DEBUG] [Thread-132480] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:23:32.127 [DEBUG] [Thread-132480] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:23:32.127 [DEBUG] [Thread-132480] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:23:32.127 [DEBUG] [Thread-132480] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:23:32.127 [DEBUG] [Thread-132480] [transport.py] [_log()] Compression: none
2025-12-31T18:23:32.127 [DEBUG] [Thread-132480] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:23:32.185 [DEBUG] [Thread-132480] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:23:32.186 [DEBUG] [Thread-132480] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:23:32.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T18:23:32.187 [DEBUG] [Thread-132480] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T18:23:32.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:23:32.242 [DEBUG] [Thread-132480] [transport.py] [_log()] userauth is OK
2025-12-31T18:23:32.242 [DEBUG] [Thread-132480] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:23:32.242 [DEBUG] [Thread-132480] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:23:32.242 [DEBUG] [Thread-132480] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T18:23:32.242 [DEBUG] [Thread-132480] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:23:32.260 [INFO] [Thread-132480] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:23:32.261 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T18:23:32.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:23:32.348 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:23:32.350 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:23:33.075 [DEBUG] [Thread-132480] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:23:33.075 [DEBUG] [Thread-132480] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:23:33.123 [DEBUG] [Thread-132480] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:23:33.123 [DEBUG] [Thread-132480] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:23:33.132 [DEBUG] [Thread-132480] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:23:33.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:23:33.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T18:23:33.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T18:23:33.158 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:23:33.158 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:23:33.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:23:33.166 [DEBUG] [Thread-132480] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:23:39.920 [DEBUG] [Thread-132482 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:23:54.973 [DEBUG] [Thread-132483 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:24:03.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T18:24:03.189 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T18:24:03.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T18:24:03.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 18, 23, 34), 22.67, 22.45, 0.0, 25.97, 23.63, 0, 0, 0, 2, 0, 0),)
2025-12-31T18:24:03.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 18:23:34
2025-12-31T18:24:04.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T18:24:04.179 [DEBUG] [Thread-132484] [transport.py] [_log()] starting thread (client mode): 0xb95d6ef0
2025-12-31T18:24:04.179 [DEBUG] [Thread-132484] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:24:04.199 [DEBUG] [Thread-132484] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T18:24:04.200 [INFO] [Thread-132484] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T18:24:04.203 [DEBUG] [Thread-132484] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:24:04.203 [DEBUG] [Thread-132484] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T18:24:04.203 [DEBUG] [Thread-132484] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:24:04.203 [DEBUG] [Thread-132484] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:24:04.203 [DEBUG] [Thread-132484] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:24:04.203 [DEBUG] [Thread-132484] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:24:04.203 [DEBUG] [Thread-132484] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:24:04.203 [DEBUG] [Thread-132484] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:24:04.203 [DEBUG] [Thread-132484] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:24:04.204 [DEBUG] [Thread-132484] [transport.py] [_log()] client lang: <none>
2025-12-31T18:24:04.204 [DEBUG] [Thread-132484] [transport.py] [_log()] server lang: <none>
2025-12-31T18:24:04.204 [DEBUG] [Thread-132484] [transport.py] [_log()] kex follows: False
2025-12-31T18:24:04.204 [DEBUG] [Thread-132484] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:24:04.204 [DEBUG] [Thread-132484] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:24:04.204 [DEBUG] [Thread-132484] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:24:04.204 [DEBUG] [Thread-132484] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:24:04.204 [DEBUG] [Thread-132484] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:24:04.204 [DEBUG] [Thread-132484] [transport.py] [_log()] Compression: none
2025-12-31T18:24:04.204 [DEBUG] [Thread-132484] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:24:04.221 [DEBUG] [Thread-132484] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:24:04.222 [DEBUG] [Thread-132484] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:24:04.222 [DEBUG] [Thread-132484] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T18:24:04.222 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T18:24:04.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:24:04.224 [DEBUG] [Thread-132484] [transport.py] [_log()] userauth is OK
2025-12-31T18:24:04.225 [DEBUG] [Thread-132484] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:24:04.225 [DEBUG] [Thread-132484] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:24:04.225 [DEBUG] [Thread-132484] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T18:24:04.225 [DEBUG] [Thread-132484] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:24:04.246 [INFO] [Thread-132484] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:24:04.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:24:04.878 [DEBUG] [Thread-132484] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:24:04.878 [DEBUG] [Thread-132484] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:24:04.879 [DEBUG] [Thread-132484] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T18:24:04.919 [DEBUG] [Thread-132484] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:24:04.919 [DEBUG] [Thread-132484] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:24:04.923 [DEBUG] [Thread-132484] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:24:04.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:24:04.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T18:24:04.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T18:24:04.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T18:24:04.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:24:04.945 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T18:24:04.945 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:24:04.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:24:04.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T18:24:04.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.682779 -999.00  +22.80  22.86     29   +4.30 1 2 1 1 1   887    0 15.76 -136.92 ----- 21.7 22.9 281.8 29.2 24.0 -24.0 24.1 -23.5 23.7 -22.2 23.9 -22.7
2025-12-31T18:24:04.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T18:24:04.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T18:24:04.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.682779
2025-12-31T18:24:04.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T18:24:04.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T18:24:04.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T18:24:04.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T18:24:04.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T18:24:04.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T18:23:34', tmtdew=22.67, humidity=22.45, cloud=0.0, wind=25.97, temperature=23.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T16:23:12.106', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T18:24:04.948 [DEBUG] [Thread-132484] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:24:05.030 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T18:24:05.044 [DEBUG] [Thread-132487] [transport.py] [_log()] starting thread (client mode): 0xb9591de0
2025-12-31T18:24:05.044 [DEBUG] [Thread-132487] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:24:05.058 [DEBUG] [Thread-132487] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T18:24:05.058 [INFO] [Thread-132487] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T18:24:05.066 [DEBUG] [Thread-132487] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:24:05.066 [DEBUG] [Thread-132487] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T18:24:05.066 [DEBUG] [Thread-132487] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:24:05.066 [DEBUG] [Thread-132487] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:24:05.066 [DEBUG] [Thread-132487] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:24:05.067 [DEBUG] [Thread-132487] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:24:05.067 [DEBUG] [Thread-132487] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:24:05.067 [DEBUG] [Thread-132487] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:24:05.067 [DEBUG] [Thread-132487] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:24:05.067 [DEBUG] [Thread-132487] [transport.py] [_log()] client lang: <none>
2025-12-31T18:24:05.067 [DEBUG] [Thread-132487] [transport.py] [_log()] server lang: <none>
2025-12-31T18:24:05.067 [DEBUG] [Thread-132487] [transport.py] [_log()] kex follows: False
2025-12-31T18:24:05.067 [DEBUG] [Thread-132487] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:24:05.067 [DEBUG] [Thread-132487] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:24:05.068 [DEBUG] [Thread-132487] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:24:05.068 [DEBUG] [Thread-132487] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:24:05.068 [DEBUG] [Thread-132487] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:24:05.068 [DEBUG] [Thread-132487] [transport.py] [_log()] Compression: none
2025-12-31T18:24:05.068 [DEBUG] [Thread-132487] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:24:05.126 [DEBUG] [Thread-132487] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:24:05.126 [DEBUG] [Thread-132487] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:24:05.127 [DEBUG] [Thread-132487] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T18:24:05.127 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T18:24:05.128 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:24:05.181 [DEBUG] [Thread-132487] [transport.py] [_log()] userauth is OK
2025-12-31T18:24:05.182 [DEBUG] [Thread-132487] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:24:05.182 [DEBUG] [Thread-132487] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:24:05.182 [DEBUG] [Thread-132487] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T18:24:05.182 [DEBUG] [Thread-132487] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:24:05.201 [INFO] [Thread-132487] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:24:05.201 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T18:24:05.202 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:24:06.036 [DEBUG] [Thread-132487] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:24:06.036 [DEBUG] [Thread-132487] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:24:06.084 [DEBUG] [Thread-132487] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:24:06.084 [DEBUG] [Thread-132487] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:24:06.093 [DEBUG] [Thread-132487] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:24:06.102 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:24:06.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-12-31T18:24:06.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T18:24:06.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:24:06.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:24:06.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:24:06.129 [DEBUG] [Thread-132487] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:24:10.002 [DEBUG] [Thread-132489 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:24:25.058 [DEBUG] [Thread-132490 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:24:30.462 [DEBUG] [Thread-132491 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:24:32.489 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:24:32.490 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:24:36.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T18:24:36.150 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T18:24:36.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T18:24:36.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 18, 24, 6), 22.04, 23.26, 0.0, 19.73, 23.1, 0, 0, 0, 2, 0, 0),)
2025-12-31T18:24:36.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 18:24:06
2025-12-31T18:24:37.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T18:24:37.191 [DEBUG] [Thread-132492] [transport.py] [_log()] starting thread (client mode): 0xb95d4340
2025-12-31T18:24:37.191 [DEBUG] [Thread-132492] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:24:37.213 [DEBUG] [Thread-132492] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T18:24:37.213 [INFO] [Thread-132492] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T18:24:37.217 [DEBUG] [Thread-132492] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:24:37.217 [DEBUG] [Thread-132492] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T18:24:37.217 [DEBUG] [Thread-132492] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:24:37.217 [DEBUG] [Thread-132492] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:24:37.217 [DEBUG] [Thread-132492] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:24:37.217 [DEBUG] [Thread-132492] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:24:37.217 [DEBUG] [Thread-132492] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:24:37.217 [DEBUG] [Thread-132492] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:24:37.217 [DEBUG] [Thread-132492] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:24:37.217 [DEBUG] [Thread-132492] [transport.py] [_log()] client lang: <none>
2025-12-31T18:24:37.217 [DEBUG] [Thread-132492] [transport.py] [_log()] server lang: <none>
2025-12-31T18:24:37.217 [DEBUG] [Thread-132492] [transport.py] [_log()] kex follows: False
2025-12-31T18:24:37.217 [DEBUG] [Thread-132492] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:24:37.217 [DEBUG] [Thread-132492] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:24:37.217 [DEBUG] [Thread-132492] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:24:37.217 [DEBUG] [Thread-132492] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:24:37.217 [DEBUG] [Thread-132492] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:24:37.217 [DEBUG] [Thread-132492] [transport.py] [_log()] Compression: none
2025-12-31T18:24:37.217 [DEBUG] [Thread-132492] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:24:37.232 [DEBUG] [Thread-132492] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:24:37.232 [DEBUG] [Thread-132492] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:24:37.232 [DEBUG] [Thread-132492] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T18:24:37.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T18:24:37.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:24:37.233 [DEBUG] [Thread-132492] [transport.py] [_log()] userauth is OK
2025-12-31T18:24:37.233 [DEBUG] [Thread-132492] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:24:37.233 [DEBUG] [Thread-132492] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:24:37.233 [DEBUG] [Thread-132492] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T18:24:37.233 [DEBUG] [Thread-132492] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:24:37.243 [INFO] [Thread-132492] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:24:37.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:24:38.022 [DEBUG] [Thread-132492] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:24:38.022 [DEBUG] [Thread-132492] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:24:38.022 [DEBUG] [Thread-132492] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T18:24:38.063 [DEBUG] [Thread-132492] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:24:38.063 [DEBUG] [Thread-132492] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:24:38.065 [DEBUG] [Thread-132492] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:24:38.077 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:24:38.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T18:24:38.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T18:24:38.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T18:24:38.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:24:38.082 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T18:24:38.082 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:24:38.082 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:24:38.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T18:24:38.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.683126 -999.00  +22.70  19.66     30   +4.40 1 1 1 1 1   887    0 15.56 -136.23 ----- 18.5 19.7 285.8 26.7 24.0 -24.3 24.1 -23.5 23.6 -22.7 23.9 -22.4
2025-12-31T18:24:38.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T18:24:38.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T18:24:38.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.683126
2025-12-31T18:24:38.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T18:24:38.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T18:24:38.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T18:24:38.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T18:24:38.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T18:24:38.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T18:24:06', tmtdew=22.04, humidity=23.26, cloud=0.0, wind=19.73, temperature=23.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T16:23:42.086', atlas_cloud=1, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T18:24:38.084 [DEBUG] [Thread-132492] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:24:38.157 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T18:24:38.168 [DEBUG] [Thread-132495] [transport.py] [_log()] starting thread (client mode): 0xb1758c40
2025-12-31T18:24:38.168 [DEBUG] [Thread-132495] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:24:38.182 [DEBUG] [Thread-132495] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T18:24:38.183 [INFO] [Thread-132495] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T18:24:38.190 [DEBUG] [Thread-132495] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:24:38.190 [DEBUG] [Thread-132495] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T18:24:38.190 [DEBUG] [Thread-132495] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:24:38.190 [DEBUG] [Thread-132495] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:24:38.190 [DEBUG] [Thread-132495] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:24:38.190 [DEBUG] [Thread-132495] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:24:38.190 [DEBUG] [Thread-132495] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:24:38.190 [DEBUG] [Thread-132495] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:24:38.190 [DEBUG] [Thread-132495] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:24:38.190 [DEBUG] [Thread-132495] [transport.py] [_log()] client lang: <none>
2025-12-31T18:24:38.190 [DEBUG] [Thread-132495] [transport.py] [_log()] server lang: <none>
2025-12-31T18:24:38.190 [DEBUG] [Thread-132495] [transport.py] [_log()] kex follows: False
2025-12-31T18:24:38.190 [DEBUG] [Thread-132495] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:24:38.190 [DEBUG] [Thread-132495] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:24:38.190 [DEBUG] [Thread-132495] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:24:38.190 [DEBUG] [Thread-132495] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:24:38.190 [DEBUG] [Thread-132495] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:24:38.190 [DEBUG] [Thread-132495] [transport.py] [_log()] Compression: none
2025-12-31T18:24:38.190 [DEBUG] [Thread-132495] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:24:38.247 [DEBUG] [Thread-132495] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:24:38.247 [DEBUG] [Thread-132495] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:24:38.248 [DEBUG] [Thread-132495] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T18:24:38.248 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T18:24:38.248 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:24:38.305 [DEBUG] [Thread-132495] [transport.py] [_log()] userauth is OK
2025-12-31T18:24:38.305 [DEBUG] [Thread-132495] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:24:38.305 [DEBUG] [Thread-132495] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:24:38.305 [DEBUG] [Thread-132495] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T18:24:38.305 [DEBUG] [Thread-132495] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:24:38.321 [INFO] [Thread-132495] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:24:38.322 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T18:24:38.322 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:24:39.131 [DEBUG] [Thread-132495] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:24:39.131 [DEBUG] [Thread-132495] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:24:39.179 [DEBUG] [Thread-132495] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:24:39.179 [DEBUG] [Thread-132495] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:24:39.187 [DEBUG] [Thread-132495] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:24:39.195 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:24:39.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T18:24:39.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T18:24:39.211 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:24:39.211 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:24:39.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:24:39.218 [DEBUG] [Thread-132495] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:24:40.090 [DEBUG] [Thread-132497 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:24:55.133 [DEBUG] [Thread-132498 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:25:09.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T18:25:09.241 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T18:25:09.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T18:25:09.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 18, 24, 38), 21.72, 23.89, 0.0, 20.82, 23.07, 0, 0, 0, 2, 0, 0),)
2025-12-31T18:25:09.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 18:24:38
2025-12-31T18:25:10.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T18:25:10.168 [DEBUG] [Thread-132499 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:25:10.224 [DEBUG] [Thread-132500] [transport.py] [_log()] starting thread (client mode): 0xb95d6710
2025-12-31T18:25:10.224 [DEBUG] [Thread-132500] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:25:10.244 [DEBUG] [Thread-132500] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T18:25:10.244 [INFO] [Thread-132500] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T18:25:10.247 [DEBUG] [Thread-132500] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:25:10.247 [DEBUG] [Thread-132500] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T18:25:10.248 [DEBUG] [Thread-132500] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:25:10.248 [DEBUG] [Thread-132500] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:25:10.248 [DEBUG] [Thread-132500] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:25:10.248 [DEBUG] [Thread-132500] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:25:10.248 [DEBUG] [Thread-132500] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:25:10.248 [DEBUG] [Thread-132500] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:25:10.248 [DEBUG] [Thread-132500] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:25:10.248 [DEBUG] [Thread-132500] [transport.py] [_log()] client lang: <none>
2025-12-31T18:25:10.248 [DEBUG] [Thread-132500] [transport.py] [_log()] server lang: <none>
2025-12-31T18:25:10.248 [DEBUG] [Thread-132500] [transport.py] [_log()] kex follows: False
2025-12-31T18:25:10.248 [DEBUG] [Thread-132500] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:25:10.248 [DEBUG] [Thread-132500] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:25:10.248 [DEBUG] [Thread-132500] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:25:10.248 [DEBUG] [Thread-132500] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:25:10.248 [DEBUG] [Thread-132500] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:25:10.249 [DEBUG] [Thread-132500] [transport.py] [_log()] Compression: none
2025-12-31T18:25:10.249 [DEBUG] [Thread-132500] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:25:10.266 [DEBUG] [Thread-132500] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:25:10.267 [DEBUG] [Thread-132500] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:25:10.267 [DEBUG] [Thread-132500] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T18:25:10.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T18:25:10.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:25:10.269 [DEBUG] [Thread-132500] [transport.py] [_log()] userauth is OK
2025-12-31T18:25:10.269 [DEBUG] [Thread-132500] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:25:10.269 [DEBUG] [Thread-132500] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:25:10.269 [DEBUG] [Thread-132500] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T18:25:10.269 [DEBUG] [Thread-132500] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:25:10.284 [INFO] [Thread-132500] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:25:10.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:25:13.951 [DEBUG] [Thread-132500] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:25:13.951 [DEBUG] [Thread-132500] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:25:13.951 [DEBUG] [Thread-132500] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T18:25:13.992 [DEBUG] [Thread-132500] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:25:13.992 [DEBUG] [Thread-132500] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:25:13.994 [DEBUG] [Thread-132500] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:25:14.068 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:25:14.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T18:25:14.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T18:25:14.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T18:25:14.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:25:14.125 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T18:25:14.125 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:25:14.125 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:25:14.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T18:25:14.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.683473 -999.00  +22.70  16.14     30   +4.50 1 2 1 1 1   887    0 15.53 -134.62 ----- 13.5 16.1 268.2 24.6 24.0 -23.9 24.0 -23.2 23.6 -21.7 23.9 -22.4
2025-12-31T18:25:14.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T18:25:14.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T18:25:14.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.683473
2025-12-31T18:25:14.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T18:25:14.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T18:25:14.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T18:25:14.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T18:25:14.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T18:25:14.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T18:24:38', tmtdew=21.72, humidity=23.89, cloud=0.0, wind=20.82, temperature=23.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T16:24:12.067', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T18:25:14.128 [DEBUG] [Thread-132500] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:25:14.221 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T18:25:14.233 [DEBUG] [Thread-132503] [transport.py] [_log()] starting thread (client mode): 0xb95d67d0
2025-12-31T18:25:14.234 [DEBUG] [Thread-132503] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:25:14.248 [DEBUG] [Thread-132503] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T18:25:14.248 [INFO] [Thread-132503] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T18:25:14.256 [DEBUG] [Thread-132503] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:25:14.256 [DEBUG] [Thread-132503] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T18:25:14.256 [DEBUG] [Thread-132503] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:25:14.256 [DEBUG] [Thread-132503] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:25:14.256 [DEBUG] [Thread-132503] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:25:14.256 [DEBUG] [Thread-132503] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:25:14.256 [DEBUG] [Thread-132503] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:25:14.256 [DEBUG] [Thread-132503] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:25:14.256 [DEBUG] [Thread-132503] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:25:14.256 [DEBUG] [Thread-132503] [transport.py] [_log()] client lang: <none>
2025-12-31T18:25:14.256 [DEBUG] [Thread-132503] [transport.py] [_log()] server lang: <none>
2025-12-31T18:25:14.256 [DEBUG] [Thread-132503] [transport.py] [_log()] kex follows: False
2025-12-31T18:25:14.257 [DEBUG] [Thread-132503] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:25:14.257 [DEBUG] [Thread-132503] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:25:14.257 [DEBUG] [Thread-132503] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:25:14.257 [DEBUG] [Thread-132503] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:25:14.257 [DEBUG] [Thread-132503] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:25:14.257 [DEBUG] [Thread-132503] [transport.py] [_log()] Compression: none
2025-12-31T18:25:14.257 [DEBUG] [Thread-132503] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:25:14.313 [DEBUG] [Thread-132503] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:25:14.314 [DEBUG] [Thread-132503] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:25:14.315 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T18:25:14.315 [DEBUG] [Thread-132503] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T18:25:14.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:25:14.370 [DEBUG] [Thread-132503] [transport.py] [_log()] userauth is OK
2025-12-31T18:25:14.370 [DEBUG] [Thread-132503] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:25:14.370 [DEBUG] [Thread-132503] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:25:14.371 [DEBUG] [Thread-132503] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T18:25:14.371 [DEBUG] [Thread-132503] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:25:14.389 [INFO] [Thread-132503] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:25:14.390 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T18:25:14.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:25:15.200 [DEBUG] [Thread-132503] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:25:15.200 [DEBUG] [Thread-132503] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:25:15.248 [DEBUG] [Thread-132503] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:25:15.248 [DEBUG] [Thread-132503] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:25:15.257 [DEBUG] [Thread-132503] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:25:15.267 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:25:15.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T18:25:15.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T18:25:15.286 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:25:15.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:25:15.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:25:15.295 [DEBUG] [Thread-132503] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:25:25.199 [DEBUG] [Thread-132505 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:25:30.496 [DEBUG] [Thread-132506 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:25:32.629 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:25:32.630 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:25:40.252 [DEBUG] [Thread-132507 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:25:45.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T18:25:45.318 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T18:25:45.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T18:25:46.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 18, 25, 42), 21.16, 24.92, 0.0, 26.45, 22.92, 0, 0, 0, 2, 0, 0),)
2025-12-31T18:25:46.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 18:25:42
2025-12-31T18:25:46.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T18:25:46.298 [DEBUG] [Thread-132508] [transport.py] [_log()] starting thread (client mode): 0xb6bb2140
2025-12-31T18:25:46.298 [DEBUG] [Thread-132508] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:25:46.321 [DEBUG] [Thread-132508] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T18:25:46.322 [INFO] [Thread-132508] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T18:25:46.324 [DEBUG] [Thread-132508] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:25:46.325 [DEBUG] [Thread-132508] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T18:25:46.325 [DEBUG] [Thread-132508] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:25:46.325 [DEBUG] [Thread-132508] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:25:46.325 [DEBUG] [Thread-132508] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:25:46.325 [DEBUG] [Thread-132508] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:25:46.325 [DEBUG] [Thread-132508] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:25:46.325 [DEBUG] [Thread-132508] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:25:46.325 [DEBUG] [Thread-132508] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:25:46.325 [DEBUG] [Thread-132508] [transport.py] [_log()] client lang: <none>
2025-12-31T18:25:46.325 [DEBUG] [Thread-132508] [transport.py] [_log()] server lang: <none>
2025-12-31T18:25:46.325 [DEBUG] [Thread-132508] [transport.py] [_log()] kex follows: False
2025-12-31T18:25:46.325 [DEBUG] [Thread-132508] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:25:46.325 [DEBUG] [Thread-132508] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:25:46.325 [DEBUG] [Thread-132508] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:25:46.325 [DEBUG] [Thread-132508] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:25:46.325 [DEBUG] [Thread-132508] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:25:46.326 [DEBUG] [Thread-132508] [transport.py] [_log()] Compression: none
2025-12-31T18:25:46.326 [DEBUG] [Thread-132508] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:25:46.343 [DEBUG] [Thread-132508] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:25:46.343 [DEBUG] [Thread-132508] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:25:46.344 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T18:25:46.344 [DEBUG] [Thread-132508] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T18:25:46.345 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:25:46.346 [DEBUG] [Thread-132508] [transport.py] [_log()] userauth is OK
2025-12-31T18:25:46.346 [DEBUG] [Thread-132508] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:25:46.346 [DEBUG] [Thread-132508] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:25:46.346 [DEBUG] [Thread-132508] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T18:25:46.347 [DEBUG] [Thread-132508] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:25:46.382 [INFO] [Thread-132508] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:25:46.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:25:47.009 [DEBUG] [Thread-132508] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:25:47.009 [DEBUG] [Thread-132508] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:25:47.010 [DEBUG] [Thread-132508] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T18:25:47.050 [DEBUG] [Thread-132508] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:25:47.050 [DEBUG] [Thread-132508] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:25:47.053 [DEBUG] [Thread-132508] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:25:47.068 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:25:47.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T18:25:47.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T18:25:47.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T18:25:47.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:25:47.080 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T18:25:47.080 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:25:47.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:25:47.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T18:25:47.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.684168 -999.00  +22.60  18.48     31   +4.70 1 2 1 1 1   887    0 15.60 -129.17 ----- 22.8 18.5 253.4 30.3 24.0 -24.2 24.0 -23.2 23.6 -21.7 23.9 -22.6
2025-12-31T18:25:47.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T18:25:47.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T18:25:47.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.684168
2025-12-31T18:25:47.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T18:25:47.082 [DEBUG] [Thread-132508] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:25:47.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T18:25:47.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T18:25:47.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T18:25:47.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T18:25:47.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T18:25:42', tmtdew=21.16, humidity=24.92, cloud=0.0, wind=26.45, temperature=22.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T16:25:12.115', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T18:25:47.165 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T18:25:47.174 [DEBUG] [Thread-132511] [transport.py] [_log()] starting thread (client mode): 0xb95f34c0
2025-12-31T18:25:47.175 [DEBUG] [Thread-132511] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:25:47.189 [DEBUG] [Thread-132511] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T18:25:47.189 [INFO] [Thread-132511] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T18:25:47.197 [DEBUG] [Thread-132511] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:25:47.197 [DEBUG] [Thread-132511] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T18:25:47.197 [DEBUG] [Thread-132511] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:25:47.197 [DEBUG] [Thread-132511] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:25:47.197 [DEBUG] [Thread-132511] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:25:47.197 [DEBUG] [Thread-132511] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:25:47.198 [DEBUG] [Thread-132511] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:25:47.198 [DEBUG] [Thread-132511] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:25:47.198 [DEBUG] [Thread-132511] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:25:47.198 [DEBUG] [Thread-132511] [transport.py] [_log()] client lang: <none>
2025-12-31T18:25:47.198 [DEBUG] [Thread-132511] [transport.py] [_log()] server lang: <none>
2025-12-31T18:25:47.198 [DEBUG] [Thread-132511] [transport.py] [_log()] kex follows: False
2025-12-31T18:25:47.198 [DEBUG] [Thread-132511] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:25:47.198 [DEBUG] [Thread-132511] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:25:47.198 [DEBUG] [Thread-132511] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:25:47.198 [DEBUG] [Thread-132511] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:25:47.199 [DEBUG] [Thread-132511] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:25:47.199 [DEBUG] [Thread-132511] [transport.py] [_log()] Compression: none
2025-12-31T18:25:47.199 [DEBUG] [Thread-132511] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:25:47.258 [DEBUG] [Thread-132511] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:25:47.258 [DEBUG] [Thread-132511] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:25:47.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T18:25:47.260 [DEBUG] [Thread-132511] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T18:25:47.261 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:25:47.317 [DEBUG] [Thread-132511] [transport.py] [_log()] userauth is OK
2025-12-31T18:25:47.317 [DEBUG] [Thread-132511] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:25:47.317 [DEBUG] [Thread-132511] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:25:47.318 [DEBUG] [Thread-132511] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T18:25:47.318 [DEBUG] [Thread-132511] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:25:47.336 [INFO] [Thread-132511] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:25:47.336 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T18:25:47.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:25:48.173 [DEBUG] [Thread-132511] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:25:48.173 [DEBUG] [Thread-132511] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:25:48.221 [DEBUG] [Thread-132511] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:25:48.221 [DEBUG] [Thread-132511] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:25:48.230 [DEBUG] [Thread-132511] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:25:48.239 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:25:48.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T18:25:48.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T18:25:48.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:25:48.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:25:48.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:25:48.266 [DEBUG] [Thread-132511] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:25:55.285 [DEBUG] [Thread-132513 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:26:10.326 [DEBUG] [Thread-132514 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:26:18.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T18:26:18.289 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T18:26:18.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T18:26:18.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 18, 26, 14), 20.99, 25.2, 0.0, 23.79, 22.88, 0, 0, 0, 2, 0, 0),)
2025-12-31T18:26:18.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 18:26:14
2025-12-31T18:26:19.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T18:26:19.270 [DEBUG] [Thread-132515] [transport.py] [_log()] starting thread (client mode): 0xb95d6aa0
2025-12-31T18:26:19.270 [DEBUG] [Thread-132515] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:26:19.293 [DEBUG] [Thread-132515] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T18:26:19.293 [INFO] [Thread-132515] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T18:26:19.297 [DEBUG] [Thread-132515] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:26:19.297 [DEBUG] [Thread-132515] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T18:26:19.297 [DEBUG] [Thread-132515] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:26:19.297 [DEBUG] [Thread-132515] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:26:19.297 [DEBUG] [Thread-132515] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:26:19.297 [DEBUG] [Thread-132515] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:26:19.297 [DEBUG] [Thread-132515] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:26:19.297 [DEBUG] [Thread-132515] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:26:19.297 [DEBUG] [Thread-132515] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:26:19.297 [DEBUG] [Thread-132515] [transport.py] [_log()] client lang: <none>
2025-12-31T18:26:19.297 [DEBUG] [Thread-132515] [transport.py] [_log()] server lang: <none>
2025-12-31T18:26:19.298 [DEBUG] [Thread-132515] [transport.py] [_log()] kex follows: False
2025-12-31T18:26:19.298 [DEBUG] [Thread-132515] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:26:19.298 [DEBUG] [Thread-132515] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:26:19.298 [DEBUG] [Thread-132515] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:26:19.298 [DEBUG] [Thread-132515] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:26:19.298 [DEBUG] [Thread-132515] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:26:19.298 [DEBUG] [Thread-132515] [transport.py] [_log()] Compression: none
2025-12-31T18:26:19.298 [DEBUG] [Thread-132515] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:26:19.315 [DEBUG] [Thread-132515] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:26:19.316 [DEBUG] [Thread-132515] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:26:19.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T18:26:19.317 [DEBUG] [Thread-132515] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T18:26:19.318 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:26:19.319 [DEBUG] [Thread-132515] [transport.py] [_log()] userauth is OK
2025-12-31T18:26:19.319 [DEBUG] [Thread-132515] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:26:19.319 [DEBUG] [Thread-132515] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:26:19.319 [DEBUG] [Thread-132515] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T18:26:19.320 [DEBUG] [Thread-132515] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:26:19.343 [INFO] [Thread-132515] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:26:19.344 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:26:20.099 [DEBUG] [Thread-132515] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:26:20.100 [DEBUG] [Thread-132515] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:26:20.100 [DEBUG] [Thread-132515] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T18:26:20.140 [DEBUG] [Thread-132515] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:26:20.140 [DEBUG] [Thread-132515] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:26:20.144 [DEBUG] [Thread-132515] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:26:20.155 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:26:20.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T18:26:20.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T18:26:20.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T18:26:20.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:26:20.166 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T18:26:20.167 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:26:20.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:26:20.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T18:26:20.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.684515 -999.00  +22.50  16.26     31   +4.60 1 2 1 1 1   887    0 15.83 -120.39 ----- 18.4 16.3 263.6 26.4 23.9 -23.8 23.9 -23.4 23.6 -21.5 23.8 -22.1
2025-12-31T18:26:20.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T18:26:20.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T18:26:20.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.684515
2025-12-31T18:26:20.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T18:26:20.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T18:26:20.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T18:26:20.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T18:26:20.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T18:26:20.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T18:26:14', tmtdew=20.99, humidity=25.2, cloud=0.0, wind=23.79, temperature=22.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T16:25:42.096', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T18:26:20.169 [DEBUG] [Thread-132515] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:26:20.252 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T18:26:20.265 [DEBUG] [Thread-132518] [transport.py] [_log()] starting thread (client mode): 0xb6b62110
2025-12-31T18:26:20.265 [DEBUG] [Thread-132518] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:26:20.279 [DEBUG] [Thread-132518] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T18:26:20.280 [INFO] [Thread-132518] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T18:26:20.287 [DEBUG] [Thread-132518] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:26:20.287 [DEBUG] [Thread-132518] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T18:26:20.287 [DEBUG] [Thread-132518] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:26:20.287 [DEBUG] [Thread-132518] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:26:20.287 [DEBUG] [Thread-132518] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:26:20.287 [DEBUG] [Thread-132518] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:26:20.287 [DEBUG] [Thread-132518] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:26:20.287 [DEBUG] [Thread-132518] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:26:20.287 [DEBUG] [Thread-132518] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:26:20.288 [DEBUG] [Thread-132518] [transport.py] [_log()] client lang: <none>
2025-12-31T18:26:20.288 [DEBUG] [Thread-132518] [transport.py] [_log()] server lang: <none>
2025-12-31T18:26:20.288 [DEBUG] [Thread-132518] [transport.py] [_log()] kex follows: False
2025-12-31T18:26:20.288 [DEBUG] [Thread-132518] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:26:20.288 [DEBUG] [Thread-132518] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:26:20.288 [DEBUG] [Thread-132518] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:26:20.288 [DEBUG] [Thread-132518] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:26:20.288 [DEBUG] [Thread-132518] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:26:20.288 [DEBUG] [Thread-132518] [transport.py] [_log()] Compression: none
2025-12-31T18:26:20.288 [DEBUG] [Thread-132518] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:26:20.345 [DEBUG] [Thread-132518] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:26:20.346 [DEBUG] [Thread-132518] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:26:20.346 [DEBUG] [Thread-132518] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T18:26:20.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T18:26:20.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:26:20.405 [DEBUG] [Thread-132518] [transport.py] [_log()] userauth is OK
2025-12-31T18:26:20.405 [DEBUG] [Thread-132518] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:26:20.406 [DEBUG] [Thread-132518] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:26:20.406 [DEBUG] [Thread-132518] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T18:26:20.406 [DEBUG] [Thread-132518] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:26:20.425 [INFO] [Thread-132518] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:26:20.425 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T18:26:20.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:26:21.220 [DEBUG] [Thread-132518] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:26:21.220 [DEBUG] [Thread-132518] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:26:21.268 [DEBUG] [Thread-132518] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:26:21.268 [DEBUG] [Thread-132518] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:26:21.278 [DEBUG] [Thread-132518] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:26:21.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:26:21.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T18:26:21.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T18:26:21.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:26:21.306 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:26:21.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:26:21.315 [DEBUG] [Thread-132518] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:26:25.366 [DEBUG] [Thread-132520 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:26:30.550 [DEBUG] [Thread-132521 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:26:32.780 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:26:32.781 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:26:40.420 [DEBUG] [Thread-132522 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:26:51.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T18:26:51.337 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T18:26:51.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T18:26:52.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 18, 26, 46), 20.82, 25.46, 0.0, 20.33, 22.85, 0, 0, 0, 2, 0, 0),)
2025-12-31T18:26:52.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 18:26:46
2025-12-31T18:26:52.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T18:26:52.325 [DEBUG] [Thread-132523] [transport.py] [_log()] starting thread (client mode): 0xb95f0fa0
2025-12-31T18:26:52.325 [DEBUG] [Thread-132523] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:26:52.346 [DEBUG] [Thread-132523] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T18:26:52.346 [INFO] [Thread-132523] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T18:26:52.349 [DEBUG] [Thread-132523] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:26:52.350 [DEBUG] [Thread-132523] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T18:26:52.350 [DEBUG] [Thread-132523] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:26:52.350 [DEBUG] [Thread-132523] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:26:52.350 [DEBUG] [Thread-132523] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:26:52.350 [DEBUG] [Thread-132523] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:26:52.350 [DEBUG] [Thread-132523] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:26:52.350 [DEBUG] [Thread-132523] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:26:52.350 [DEBUG] [Thread-132523] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:26:52.350 [DEBUG] [Thread-132523] [transport.py] [_log()] client lang: <none>
2025-12-31T18:26:52.350 [DEBUG] [Thread-132523] [transport.py] [_log()] server lang: <none>
2025-12-31T18:26:52.350 [DEBUG] [Thread-132523] [transport.py] [_log()] kex follows: False
2025-12-31T18:26:52.350 [DEBUG] [Thread-132523] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:26:52.350 [DEBUG] [Thread-132523] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:26:52.350 [DEBUG] [Thread-132523] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:26:52.350 [DEBUG] [Thread-132523] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:26:52.350 [DEBUG] [Thread-132523] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:26:52.350 [DEBUG] [Thread-132523] [transport.py] [_log()] Compression: none
2025-12-31T18:26:52.350 [DEBUG] [Thread-132523] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:26:52.369 [DEBUG] [Thread-132523] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:26:52.369 [DEBUG] [Thread-132523] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:26:52.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T18:26:52.370 [DEBUG] [Thread-132523] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T18:26:52.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:26:52.372 [DEBUG] [Thread-132523] [transport.py] [_log()] userauth is OK
2025-12-31T18:26:52.372 [DEBUG] [Thread-132523] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:26:52.372 [DEBUG] [Thread-132523] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:26:52.372 [DEBUG] [Thread-132523] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T18:26:52.372 [DEBUG] [Thread-132523] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:26:52.395 [INFO] [Thread-132523] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:26:52.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:26:53.033 [DEBUG] [Thread-132523] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:26:53.033 [DEBUG] [Thread-132523] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:26:53.033 [DEBUG] [Thread-132523] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T18:26:53.074 [DEBUG] [Thread-132523] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:26:53.074 [DEBUG] [Thread-132523] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:26:53.078 [DEBUG] [Thread-132523] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:26:53.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:26:53.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T18:26:53.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T18:26:53.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T18:26:53.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:26:53.099 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T18:26:53.099 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:26:53.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:26:53.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T18:26:53.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.684862 -999.00  +22.60  16.95     31   +4.70 1 2 1 1 1   887    0 15.99 -121.11 ----- 17.2 16.9 268.4 25.7 23.9 -23.5 23.9 -22.9 23.7 -21.4 23.8 -22.1
2025-12-31T18:26:53.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T18:26:53.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T18:26:53.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.684862
2025-12-31T18:26:53.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T18:26:53.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T18:26:53.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T18:26:53.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T18:26:53.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T18:26:53.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T18:26:46', tmtdew=20.82, humidity=25.46, cloud=0.0, wind=20.33, temperature=22.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T16:26:12.077', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T18:26:53.102 [DEBUG] [Thread-132523] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:26:53.184 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T18:26:53.197 [DEBUG] [Thread-132526] [transport.py] [_log()] starting thread (client mode): 0xb6bb29e0
2025-12-31T18:26:53.197 [DEBUG] [Thread-132526] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:26:53.212 [DEBUG] [Thread-132526] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T18:26:53.212 [INFO] [Thread-132526] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T18:26:53.219 [DEBUG] [Thread-132526] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:26:53.220 [DEBUG] [Thread-132526] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T18:26:53.220 [DEBUG] [Thread-132526] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:26:53.220 [DEBUG] [Thread-132526] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:26:53.220 [DEBUG] [Thread-132526] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:26:53.220 [DEBUG] [Thread-132526] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:26:53.220 [DEBUG] [Thread-132526] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:26:53.220 [DEBUG] [Thread-132526] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:26:53.220 [DEBUG] [Thread-132526] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:26:53.220 [DEBUG] [Thread-132526] [transport.py] [_log()] client lang: <none>
2025-12-31T18:26:53.220 [DEBUG] [Thread-132526] [transport.py] [_log()] server lang: <none>
2025-12-31T18:26:53.220 [DEBUG] [Thread-132526] [transport.py] [_log()] kex follows: False
2025-12-31T18:26:53.220 [DEBUG] [Thread-132526] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:26:53.220 [DEBUG] [Thread-132526] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:26:53.220 [DEBUG] [Thread-132526] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:26:53.220 [DEBUG] [Thread-132526] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:26:53.220 [DEBUG] [Thread-132526] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:26:53.221 [DEBUG] [Thread-132526] [transport.py] [_log()] Compression: none
2025-12-31T18:26:53.221 [DEBUG] [Thread-132526] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:26:53.277 [DEBUG] [Thread-132526] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:26:53.277 [DEBUG] [Thread-132526] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:26:53.278 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T18:26:53.278 [DEBUG] [Thread-132526] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T18:26:53.279 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:26:53.333 [DEBUG] [Thread-132526] [transport.py] [_log()] userauth is OK
2025-12-31T18:26:53.333 [DEBUG] [Thread-132526] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:26:53.333 [DEBUG] [Thread-132526] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:26:53.334 [DEBUG] [Thread-132526] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T18:26:53.334 [DEBUG] [Thread-132526] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:26:53.352 [INFO] [Thread-132526] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:26:53.352 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T18:26:53.353 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:26:54.159 [DEBUG] [Thread-132526] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:26:54.159 [DEBUG] [Thread-132526] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:26:54.207 [DEBUG] [Thread-132526] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:26:54.207 [DEBUG] [Thread-132526] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:26:54.216 [DEBUG] [Thread-132526] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:26:54.225 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:26:54.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T18:26:54.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T18:26:54.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:26:54.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:26:54.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:26:54.253 [DEBUG] [Thread-132526] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:26:55.451 [DEBUG] [Thread-132528 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:27:10.500 [DEBUG] [Thread-132529 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:27:24.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T18:27:24.275 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T18:27:24.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T18:27:24.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 18, 27, 18), 20.79, 25.51, 0.0, 17.17, 22.8, 0, 0, 0, 2, 0, 0),)
2025-12-31T18:27:24.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 18:27:18
2025-12-31T18:27:25.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T18:27:25.262 [DEBUG] [Thread-132530] [transport.py] [_log()] starting thread (client mode): 0xb95d79a0
2025-12-31T18:27:25.262 [DEBUG] [Thread-132530] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:27:25.283 [DEBUG] [Thread-132530] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T18:27:25.283 [INFO] [Thread-132530] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T18:27:25.286 [DEBUG] [Thread-132530] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:27:25.286 [DEBUG] [Thread-132530] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T18:27:25.286 [DEBUG] [Thread-132530] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:27:25.286 [DEBUG] [Thread-132530] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:27:25.286 [DEBUG] [Thread-132530] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:27:25.286 [DEBUG] [Thread-132530] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:27:25.286 [DEBUG] [Thread-132530] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:27:25.286 [DEBUG] [Thread-132530] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:27:25.287 [DEBUG] [Thread-132530] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:27:25.287 [DEBUG] [Thread-132530] [transport.py] [_log()] client lang: <none>
2025-12-31T18:27:25.287 [DEBUG] [Thread-132530] [transport.py] [_log()] server lang: <none>
2025-12-31T18:27:25.287 [DEBUG] [Thread-132530] [transport.py] [_log()] kex follows: False
2025-12-31T18:27:25.287 [DEBUG] [Thread-132530] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:27:25.287 [DEBUG] [Thread-132530] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:27:25.287 [DEBUG] [Thread-132530] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:27:25.287 [DEBUG] [Thread-132530] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:27:25.287 [DEBUG] [Thread-132530] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:27:25.287 [DEBUG] [Thread-132530] [transport.py] [_log()] Compression: none
2025-12-31T18:27:25.287 [DEBUG] [Thread-132530] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:27:25.303 [DEBUG] [Thread-132530] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:27:25.304 [DEBUG] [Thread-132530] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:27:25.304 [DEBUG] [Thread-132530] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T18:27:25.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T18:27:25.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:27:25.306 [DEBUG] [Thread-132530] [transport.py] [_log()] userauth is OK
2025-12-31T18:27:25.306 [DEBUG] [Thread-132530] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:27:25.306 [DEBUG] [Thread-132530] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:27:25.306 [DEBUG] [Thread-132530] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T18:27:25.306 [DEBUG] [Thread-132530] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:27:25.324 [INFO] [Thread-132530] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:27:25.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:27:25.533 [DEBUG] [Thread-132532 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:27:26.101 [DEBUG] [Thread-132530] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:27:26.101 [DEBUG] [Thread-132530] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:27:26.101 [DEBUG] [Thread-132530] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T18:27:26.142 [DEBUG] [Thread-132530] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:27:26.142 [DEBUG] [Thread-132530] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:27:26.146 [DEBUG] [Thread-132530] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:27:26.158 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:27:26.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T18:27:26.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T18:27:26.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T18:27:26.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:27:26.167 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T18:27:26.167 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:27:26.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:27:26.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T18:27:26.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.685209 -999.00  +22.60  12.21     31   +4.70 1 2 1 1 1   887    0 16.04 -111.40 ----- 15.9 12.2 270.4 21.4 23.9 -23.5 23.9 -22.7 23.6 -21.1 23.8 -22.0
2025-12-31T18:27:26.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T18:27:26.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T18:27:26.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.685209
2025-12-31T18:27:26.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T18:27:26.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T18:27:26.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T18:27:26.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T18:27:26.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T18:27:26.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T18:27:18', tmtdew=20.79, humidity=25.51, cloud=0.0, wind=17.17, temperature=22.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T16:26:42.058', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T18:27:26.170 [DEBUG] [Thread-132530] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:27:26.254 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T18:27:26.266 [DEBUG] [Thread-132534] [transport.py] [_log()] starting thread (client mode): 0xb957a680
2025-12-31T18:27:26.266 [DEBUG] [Thread-132534] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:27:26.281 [DEBUG] [Thread-132534] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T18:27:26.281 [INFO] [Thread-132534] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T18:27:26.288 [DEBUG] [Thread-132534] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:27:26.289 [DEBUG] [Thread-132534] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T18:27:26.289 [DEBUG] [Thread-132534] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:27:26.289 [DEBUG] [Thread-132534] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:27:26.289 [DEBUG] [Thread-132534] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:27:26.289 [DEBUG] [Thread-132534] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:27:26.289 [DEBUG] [Thread-132534] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:27:26.289 [DEBUG] [Thread-132534] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:27:26.289 [DEBUG] [Thread-132534] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:27:26.289 [DEBUG] [Thread-132534] [transport.py] [_log()] client lang: <none>
2025-12-31T18:27:26.289 [DEBUG] [Thread-132534] [transport.py] [_log()] server lang: <none>
2025-12-31T18:27:26.289 [DEBUG] [Thread-132534] [transport.py] [_log()] kex follows: False
2025-12-31T18:27:26.289 [DEBUG] [Thread-132534] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:27:26.289 [DEBUG] [Thread-132534] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:27:26.290 [DEBUG] [Thread-132534] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:27:26.290 [DEBUG] [Thread-132534] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:27:26.290 [DEBUG] [Thread-132534] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:27:26.290 [DEBUG] [Thread-132534] [transport.py] [_log()] Compression: none
2025-12-31T18:27:26.290 [DEBUG] [Thread-132534] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:27:26.349 [DEBUG] [Thread-132534] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:27:26.350 [DEBUG] [Thread-132534] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:27:26.350 [DEBUG] [Thread-132534] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T18:27:26.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T18:27:26.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:27:26.406 [DEBUG] [Thread-132534] [transport.py] [_log()] userauth is OK
2025-12-31T18:27:26.406 [DEBUG] [Thread-132534] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:27:26.406 [DEBUG] [Thread-132534] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:27:26.407 [DEBUG] [Thread-132534] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T18:27:26.407 [DEBUG] [Thread-132534] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:27:26.427 [INFO] [Thread-132534] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:27:26.427 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T18:27:26.428 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:27:27.235 [DEBUG] [Thread-132534] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:27:27.235 [DEBUG] [Thread-132534] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:27:27.283 [DEBUG] [Thread-132534] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:27:27.283 [DEBUG] [Thread-132534] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:27:27.294 [DEBUG] [Thread-132534] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:27:27.305 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:27:27.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T18:27:27.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T18:27:27.324 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:27:27.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:27:27.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:27:27.333 [DEBUG] [Thread-132534] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:27:30.604 [DEBUG] [Thread-132536 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:27:32.922 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:27:32.923 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:27:40.571 [DEBUG] [Thread-132537 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:27:55.626 [DEBUG] [Thread-132538 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:27:57.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T18:27:57.355 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T18:27:57.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T18:27:58.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 18, 27, 50), 20.72, 25.55, 0.0, 21.62, 22.75, 0, 0, 0, 2, 0, 0),)
2025-12-31T18:27:58.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 18:27:50
2025-12-31T18:27:58.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T18:27:58.314 [DEBUG] [Thread-132539] [transport.py] [_log()] starting thread (client mode): 0xb95d48e0
2025-12-31T18:27:58.314 [DEBUG] [Thread-132539] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:27:58.336 [DEBUG] [Thread-132539] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T18:27:58.336 [INFO] [Thread-132539] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T18:27:58.339 [DEBUG] [Thread-132539] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:27:58.340 [DEBUG] [Thread-132539] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T18:27:58.340 [DEBUG] [Thread-132539] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:27:58.340 [DEBUG] [Thread-132539] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:27:58.340 [DEBUG] [Thread-132539] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:27:58.340 [DEBUG] [Thread-132539] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:27:58.340 [DEBUG] [Thread-132539] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:27:58.340 [DEBUG] [Thread-132539] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:27:58.340 [DEBUG] [Thread-132539] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:27:58.340 [DEBUG] [Thread-132539] [transport.py] [_log()] client lang: <none>
2025-12-31T18:27:58.340 [DEBUG] [Thread-132539] [transport.py] [_log()] server lang: <none>
2025-12-31T18:27:58.340 [DEBUG] [Thread-132539] [transport.py] [_log()] kex follows: False
2025-12-31T18:27:58.340 [DEBUG] [Thread-132539] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:27:58.340 [DEBUG] [Thread-132539] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:27:58.340 [DEBUG] [Thread-132539] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:27:58.340 [DEBUG] [Thread-132539] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:27:58.340 [DEBUG] [Thread-132539] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:27:58.340 [DEBUG] [Thread-132539] [transport.py] [_log()] Compression: none
2025-12-31T18:27:58.340 [DEBUG] [Thread-132539] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:27:58.356 [DEBUG] [Thread-132539] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:27:58.357 [DEBUG] [Thread-132539] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:27:58.357 [DEBUG] [Thread-132539] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T18:27:58.358 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T18:27:58.358 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:27:58.360 [DEBUG] [Thread-132539] [transport.py] [_log()] userauth is OK
2025-12-31T18:27:58.360 [DEBUG] [Thread-132539] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:27:58.360 [DEBUG] [Thread-132539] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:27:58.360 [DEBUG] [Thread-132539] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T18:27:58.360 [DEBUG] [Thread-132539] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:27:58.384 [INFO] [Thread-132539] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:27:58.384 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:27:59.050 [DEBUG] [Thread-132539] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:27:59.051 [DEBUG] [Thread-132539] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:27:59.051 [DEBUG] [Thread-132539] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T18:27:59.092 [DEBUG] [Thread-132539] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:27:59.092 [DEBUG] [Thread-132539] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:27:59.095 [DEBUG] [Thread-132539] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:27:59.106 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:27:59.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T18:27:59.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T18:27:59.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T18:27:59.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:27:59.117 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T18:27:59.117 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:27:59.118 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:27:59.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T18:27:59.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.685557 -999.00  +22.70  14.47     31   +4.70 1 2 1 1 1   887    0 16.25 -109.59 ----- 11.8 14.5 274.4 20.3 23.9 -23.3 24.0 -22.7 23.6 -21.0 23.9 -21.7
2025-12-31T18:27:59.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T18:27:59.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T18:27:59.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.685557
2025-12-31T18:27:59.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T18:27:59.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T18:27:59.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T18:27:59.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T18:27:59.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T18:27:59.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T18:27:50', tmtdew=20.72, humidity=25.55, cloud=0.0, wind=21.62, temperature=22.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T16:27:12.125', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T18:27:59.120 [DEBUG] [Thread-132539] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:27:59.210 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T18:27:59.222 [DEBUG] [Thread-132542] [transport.py] [_log()] starting thread (client mode): 0xb6bb3e50
2025-12-31T18:27:59.222 [DEBUG] [Thread-132542] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:27:59.237 [DEBUG] [Thread-132542] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T18:27:59.238 [INFO] [Thread-132542] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T18:27:59.245 [DEBUG] [Thread-132542] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:27:59.246 [DEBUG] [Thread-132542] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T18:27:59.246 [DEBUG] [Thread-132542] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:27:59.246 [DEBUG] [Thread-132542] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:27:59.246 [DEBUG] [Thread-132542] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:27:59.246 [DEBUG] [Thread-132542] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:27:59.246 [DEBUG] [Thread-132542] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:27:59.246 [DEBUG] [Thread-132542] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:27:59.246 [DEBUG] [Thread-132542] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:27:59.246 [DEBUG] [Thread-132542] [transport.py] [_log()] client lang: <none>
2025-12-31T18:27:59.246 [DEBUG] [Thread-132542] [transport.py] [_log()] server lang: <none>
2025-12-31T18:27:59.246 [DEBUG] [Thread-132542] [transport.py] [_log()] kex follows: False
2025-12-31T18:27:59.246 [DEBUG] [Thread-132542] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:27:59.246 [DEBUG] [Thread-132542] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:27:59.246 [DEBUG] [Thread-132542] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:27:59.246 [DEBUG] [Thread-132542] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:27:59.246 [DEBUG] [Thread-132542] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:27:59.246 [DEBUG] [Thread-132542] [transport.py] [_log()] Compression: none
2025-12-31T18:27:59.247 [DEBUG] [Thread-132542] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:27:59.305 [DEBUG] [Thread-132542] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:27:59.306 [DEBUG] [Thread-132542] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:27:59.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T18:27:59.306 [DEBUG] [Thread-132542] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T18:27:59.307 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:27:59.362 [DEBUG] [Thread-132542] [transport.py] [_log()] userauth is OK
2025-12-31T18:27:59.362 [DEBUG] [Thread-132542] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:27:59.362 [DEBUG] [Thread-132542] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:27:59.362 [DEBUG] [Thread-132542] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T18:27:59.362 [DEBUG] [Thread-132542] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:27:59.381 [INFO] [Thread-132542] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:27:59.382 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T18:27:59.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:28:00.195 [DEBUG] [Thread-132542] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:28:00.196 [DEBUG] [Thread-132542] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:28:00.243 [DEBUG] [Thread-132542] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:28:00.243 [DEBUG] [Thread-132542] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:28:00.252 [DEBUG] [Thread-132542] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:28:00.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:28:00.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T18:28:00.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T18:28:00.280 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:28:00.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:28:00.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:28:00.289 [DEBUG] [Thread-132542] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:28:10.660 [DEBUG] [Thread-132544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:28:25.713 [DEBUG] [Thread-132545 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:28:30.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T18:28:30.311 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T18:28:30.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T18:28:30.635 [DEBUG] [Thread-132546 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:28:31.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 18, 28, 22), 20.73, 25.51, 0.0, 23.19, 22.72, 0, 0, 0, 2, 0, 0),)
2025-12-31T18:28:31.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 18:28:22
2025-12-31T18:28:31.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T18:28:31.327 [DEBUG] [Thread-132547] [transport.py] [_log()] starting thread (client mode): 0xb6ba3700
2025-12-31T18:28:31.327 [DEBUG] [Thread-132547] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:28:31.348 [DEBUG] [Thread-132547] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T18:28:31.348 [INFO] [Thread-132547] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T18:28:31.351 [DEBUG] [Thread-132547] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:28:31.351 [DEBUG] [Thread-132547] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T18:28:31.351 [DEBUG] [Thread-132547] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:28:31.351 [DEBUG] [Thread-132547] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:28:31.351 [DEBUG] [Thread-132547] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:28:31.351 [DEBUG] [Thread-132547] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:28:31.351 [DEBUG] [Thread-132547] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:28:31.351 [DEBUG] [Thread-132547] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:28:31.351 [DEBUG] [Thread-132547] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:28:31.351 [DEBUG] [Thread-132547] [transport.py] [_log()] client lang: <none>
2025-12-31T18:28:31.351 [DEBUG] [Thread-132547] [transport.py] [_log()] server lang: <none>
2025-12-31T18:28:31.351 [DEBUG] [Thread-132547] [transport.py] [_log()] kex follows: False
2025-12-31T18:28:31.351 [DEBUG] [Thread-132547] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:28:31.351 [DEBUG] [Thread-132547] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:28:31.351 [DEBUG] [Thread-132547] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:28:31.351 [DEBUG] [Thread-132547] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:28:31.351 [DEBUG] [Thread-132547] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:28:31.351 [DEBUG] [Thread-132547] [transport.py] [_log()] Compression: none
2025-12-31T18:28:31.351 [DEBUG] [Thread-132547] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:28:31.365 [DEBUG] [Thread-132547] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:28:31.365 [DEBUG] [Thread-132547] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:28:31.365 [DEBUG] [Thread-132547] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T18:28:31.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T18:28:31.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:28:31.366 [DEBUG] [Thread-132547] [transport.py] [_log()] userauth is OK
2025-12-31T18:28:31.374 [DEBUG] [Thread-132547] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:28:31.374 [DEBUG] [Thread-132547] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:28:31.374 [DEBUG] [Thread-132547] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T18:28:31.374 [DEBUG] [Thread-132547] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:28:31.383 [INFO] [Thread-132547] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:28:31.384 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:28:32.141 [DEBUG] [Thread-132547] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:28:32.141 [DEBUG] [Thread-132547] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:28:32.141 [DEBUG] [Thread-132547] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T18:28:32.182 [DEBUG] [Thread-132547] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:28:32.182 [DEBUG] [Thread-132547] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:28:32.185 [DEBUG] [Thread-132547] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:28:32.197 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:28:32.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T18:28:32.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T18:28:32.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T18:28:32.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:28:32.202 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T18:28:32.202 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:28:32.202 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:28:32.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T18:28:32.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.685904 -999.00  +22.60  14.62     31   +4.70 1 2 1 1 1   887    0 15.76 -115.74 ----- 19.0 14.6 234.8 26.4 24.0 -23.3 23.9 -22.9 23.6 -21.2 23.8 -21.9
2025-12-31T18:28:32.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T18:28:32.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T18:28:32.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.685904
2025-12-31T18:28:32.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T18:28:32.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T18:28:32.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T18:28:32.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T18:28:32.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T18:28:32.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T18:28:22', tmtdew=20.73, humidity=25.51, cloud=0.0, wind=23.19, temperature=22.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T16:27:42.106', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T18:28:32.203 [DEBUG] [Thread-132547] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:28: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-12-31T18:28:32.288 [DEBUG] [Thread-132550] [transport.py] [_log()] starting thread (client mode): 0xb6b61de0
2025-12-31T18:28:32.289 [DEBUG] [Thread-132550] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:28:32.304 [DEBUG] [Thread-132550] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T18:28:32.304 [INFO] [Thread-132550] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T18:28:32.311 [DEBUG] [Thread-132550] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:28:32.311 [DEBUG] [Thread-132550] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T18:28:32.311 [DEBUG] [Thread-132550] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:28:32.311 [DEBUG] [Thread-132550] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:28:32.311 [DEBUG] [Thread-132550] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:28:32.311 [DEBUG] [Thread-132550] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:28:32.311 [DEBUG] [Thread-132550] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:28:32.311 [DEBUG] [Thread-132550] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:28:32.311 [DEBUG] [Thread-132550] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:28:32.311 [DEBUG] [Thread-132550] [transport.py] [_log()] client lang: <none>
2025-12-31T18:28:32.311 [DEBUG] [Thread-132550] [transport.py] [_log()] server lang: <none>
2025-12-31T18:28:32.312 [DEBUG] [Thread-132550] [transport.py] [_log()] kex follows: False
2025-12-31T18:28:32.312 [DEBUG] [Thread-132550] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:28:32.312 [DEBUG] [Thread-132550] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:28:32.312 [DEBUG] [Thread-132550] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:28:32.312 [DEBUG] [Thread-132550] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:28:32.312 [DEBUG] [Thread-132550] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:28:32.312 [DEBUG] [Thread-132550] [transport.py] [_log()] Compression: none
2025-12-31T18:28:32.312 [DEBUG] [Thread-132550] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:28:32.367 [DEBUG] [Thread-132550] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:28:32.367 [DEBUG] [Thread-132550] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:28:32.367 [DEBUG] [Thread-132550] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T18:28:32.367 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T18:28:32.367 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:28:32.424 [DEBUG] [Thread-132550] [transport.py] [_log()] userauth is OK
2025-12-31T18:28:32.424 [DEBUG] [Thread-132550] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:28:32.424 [DEBUG] [Thread-132550] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:28:32.424 [DEBUG] [Thread-132550] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T18:28:32.424 [DEBUG] [Thread-132550] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:28:32.438 [INFO] [Thread-132550] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:28:32.438 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T18:28:32.438 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:28:33.064 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:28:33.064 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:28:33.222 [DEBUG] [Thread-132550] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:28:33.222 [DEBUG] [Thread-132550] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:28:33.270 [DEBUG] [Thread-132550] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:28:33.270 [DEBUG] [Thread-132550] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:28:33.279 [DEBUG] [Thread-132550] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:28:33.288 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:28:33.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T18:28:33.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T18:28:33.304 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:28:33.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:28:33.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:28:33.312 [DEBUG] [Thread-132550] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:28:40.746 [DEBUG] [Thread-132552 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:28:55.794 [DEBUG] [Thread-132553 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:29:03.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T18:29:03.335 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T18:29:03.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T18:29:04.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 18, 28, 54), 20.61, 25.58, 0.0, 23.96, 22.73, 0, 0, 0, 2, 0, 0),)
2025-12-31T18:29:04.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 18:28:54
2025-12-31T18:29:04.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T18:29:04.306 [DEBUG] [Thread-132554] [transport.py] [_log()] starting thread (client mode): 0xb6b62350
2025-12-31T18:29:04.306 [DEBUG] [Thread-132554] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:29:04.327 [DEBUG] [Thread-132554] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T18:29:04.328 [INFO] [Thread-132554] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T18:29:04.331 [DEBUG] [Thread-132554] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:29:04.331 [DEBUG] [Thread-132554] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T18:29:04.331 [DEBUG] [Thread-132554] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:29:04.331 [DEBUG] [Thread-132554] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:29:04.331 [DEBUG] [Thread-132554] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:29:04.331 [DEBUG] [Thread-132554] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:29:04.331 [DEBUG] [Thread-132554] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:29:04.331 [DEBUG] [Thread-132554] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:29:04.331 [DEBUG] [Thread-132554] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:29:04.332 [DEBUG] [Thread-132554] [transport.py] [_log()] client lang: <none>
2025-12-31T18:29:04.332 [DEBUG] [Thread-132554] [transport.py] [_log()] server lang: <none>
2025-12-31T18:29:04.332 [DEBUG] [Thread-132554] [transport.py] [_log()] kex follows: False
2025-12-31T18:29:04.332 [DEBUG] [Thread-132554] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:29:04.332 [DEBUG] [Thread-132554] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:29:04.332 [DEBUG] [Thread-132554] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:29:04.332 [DEBUG] [Thread-132554] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:29:04.332 [DEBUG] [Thread-132554] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:29:04.332 [DEBUG] [Thread-132554] [transport.py] [_log()] Compression: none
2025-12-31T18:29:04.332 [DEBUG] [Thread-132554] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:29:04.352 [DEBUG] [Thread-132554] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:29:04.353 [DEBUG] [Thread-132554] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:29:04.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T18:29:04.354 [DEBUG] [Thread-132554] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T18:29:04.355 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:29:04.356 [DEBUG] [Thread-132554] [transport.py] [_log()] userauth is OK
2025-12-31T18:29:04.356 [DEBUG] [Thread-132554] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:29:04.356 [DEBUG] [Thread-132554] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:29:04.356 [DEBUG] [Thread-132554] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T18:29:04.356 [DEBUG] [Thread-132554] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:29:04.380 [INFO] [Thread-132554] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:29:04.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:29:05.051 [DEBUG] [Thread-132554] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:29:05.052 [DEBUG] [Thread-132554] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:29:05.052 [DEBUG] [Thread-132554] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T18:29:05.093 [DEBUG] [Thread-132554] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:29:05.093 [DEBUG] [Thread-132554] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:29:05.097 [DEBUG] [Thread-132554] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:29:05.111 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:29:05.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T18:29:05.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T18:29:05.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T18:29:05.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:29:05.123 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T18:29:05.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:29:05.123 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:29:05.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T18:29:05.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.686251 -999.00  +22.60  24.78     31   +4.80 1 2 1 1 1   887    0 15.53 -118.52 ----- 18.1 24.8 264.8 30.9 23.9 -23.4 23.9 -23.0 23.6 -21.3 23.8 -21.8
2025-12-31T18:29:05.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T18:29:05.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T18:29:05.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.686251
2025-12-31T18:29:05.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T18:29:05.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T18:29:05.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T18:29:05.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T18:29:05.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T18:29:05.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T18:28:54', tmtdew=20.61, humidity=25.58, cloud=0.0, wind=23.96, temperature=22.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T16:28:12.086', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T18:29:05.126 [DEBUG] [Thread-132554] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:29:05.210 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T18:29:05.221 [DEBUG] [Thread-132557] [transport.py] [_log()] starting thread (client mode): 0xb6bb8400
2025-12-31T18:29:05.221 [DEBUG] [Thread-132557] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:29:05.236 [DEBUG] [Thread-132557] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T18:29:05.236 [INFO] [Thread-132557] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T18:29:05.244 [DEBUG] [Thread-132557] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:29:05.244 [DEBUG] [Thread-132557] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T18:29:05.244 [DEBUG] [Thread-132557] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:29:05.244 [DEBUG] [Thread-132557] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:29:05.244 [DEBUG] [Thread-132557] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:29:05.244 [DEBUG] [Thread-132557] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:29:05.244 [DEBUG] [Thread-132557] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:29:05.244 [DEBUG] [Thread-132557] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:29:05.244 [DEBUG] [Thread-132557] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:29:05.244 [DEBUG] [Thread-132557] [transport.py] [_log()] client lang: <none>
2025-12-31T18:29:05.244 [DEBUG] [Thread-132557] [transport.py] [_log()] server lang: <none>
2025-12-31T18:29:05.244 [DEBUG] [Thread-132557] [transport.py] [_log()] kex follows: False
2025-12-31T18:29:05.244 [DEBUG] [Thread-132557] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:29:05.245 [DEBUG] [Thread-132557] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:29:05.245 [DEBUG] [Thread-132557] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:29:05.245 [DEBUG] [Thread-132557] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:29:05.245 [DEBUG] [Thread-132557] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:29:05.245 [DEBUG] [Thread-132557] [transport.py] [_log()] Compression: none
2025-12-31T18:29:05.245 [DEBUG] [Thread-132557] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:29:05.303 [DEBUG] [Thread-132557] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:29:05.303 [DEBUG] [Thread-132557] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:29:05.303 [DEBUG] [Thread-132557] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T18:29:05.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T18:29:05.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:29:05.361 [DEBUG] [Thread-132557] [transport.py] [_log()] userauth is OK
2025-12-31T18:29:05.361 [DEBUG] [Thread-132557] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:29:05.362 [DEBUG] [Thread-132557] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:29:05.362 [DEBUG] [Thread-132557] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T18:29:05.362 [DEBUG] [Thread-132557] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:29:05.384 [INFO] [Thread-132557] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:29:05.385 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T18:29:05.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:29:06.207 [DEBUG] [Thread-132557] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:29:06.207 [DEBUG] [Thread-132557] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:29:06.255 [DEBUG] [Thread-132557] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:29:06.255 [DEBUG] [Thread-132557] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:29:06.264 [DEBUG] [Thread-132557] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:29:06.274 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:29: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')
2025-12-31T18:29:06.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T18:29:06.293 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:29:06.293 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:29:06.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:29:06.301 [DEBUG] [Thread-132557] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:29:10.823 [DEBUG] [Thread-132559 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:29:25.871 [DEBUG] [Thread-132560 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:29:30.688 [DEBUG] [Thread-132561 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:29:33.203 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:29:33.204 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:29:36.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T18:29:36.313 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T18:29:36.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T18:29:37.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 18, 29, 27), 20.59, 25.6, 0.0, 20.47, 22.68, 0, 0, 0, 2, 0, 0),)
2025-12-31T18:29:37.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 18:29:27
2025-12-31T18:29:37.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T18:29:37.294 [DEBUG] [Thread-132562] [transport.py] [_log()] starting thread (client mode): 0xb6ba3700
2025-12-31T18:29:37.295 [DEBUG] [Thread-132562] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:29:37.316 [DEBUG] [Thread-132562] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T18:29:37.317 [INFO] [Thread-132562] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T18:29:37.320 [DEBUG] [Thread-132562] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:29:37.320 [DEBUG] [Thread-132562] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T18:29:37.320 [DEBUG] [Thread-132562] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:29:37.320 [DEBUG] [Thread-132562] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:29:37.320 [DEBUG] [Thread-132562] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:29:37.321 [DEBUG] [Thread-132562] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:29:37.321 [DEBUG] [Thread-132562] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:29:37.321 [DEBUG] [Thread-132562] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:29:37.321 [DEBUG] [Thread-132562] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:29:37.321 [DEBUG] [Thread-132562] [transport.py] [_log()] client lang: <none>
2025-12-31T18:29:37.321 [DEBUG] [Thread-132562] [transport.py] [_log()] server lang: <none>
2025-12-31T18:29:37.321 [DEBUG] [Thread-132562] [transport.py] [_log()] kex follows: False
2025-12-31T18:29:37.321 [DEBUG] [Thread-132562] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:29:37.321 [DEBUG] [Thread-132562] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:29:37.321 [DEBUG] [Thread-132562] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:29:37.321 [DEBUG] [Thread-132562] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:29:37.321 [DEBUG] [Thread-132562] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:29:37.322 [DEBUG] [Thread-132562] [transport.py] [_log()] Compression: none
2025-12-31T18:29:37.322 [DEBUG] [Thread-132562] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:29:37.340 [DEBUG] [Thread-132562] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:29:37.341 [DEBUG] [Thread-132562] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:29:37.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T18:29:37.342 [DEBUG] [Thread-132562] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T18:29:37.343 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:29:37.344 [DEBUG] [Thread-132562] [transport.py] [_log()] userauth is OK
2025-12-31T18:29:37.344 [DEBUG] [Thread-132562] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:29:37.344 [DEBUG] [Thread-132562] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:29:37.344 [DEBUG] [Thread-132562] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T18:29:37.345 [DEBUG] [Thread-132562] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:29:37.381 [INFO] [Thread-132562] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:29:37.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:29:38.210 [DEBUG] [Thread-132562] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:29:38.210 [DEBUG] [Thread-132562] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:29:38.211 [DEBUG] [Thread-132562] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T18:29:38.251 [DEBUG] [Thread-132562] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:29:38.252 [DEBUG] [Thread-132562] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:29:38.254 [DEBUG] [Thread-132562] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:29:38.267 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:29:38.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T18:29:38.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T18:29:38.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T18:29:38.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:29:38.277 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T18:29:38.278 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:29:38.278 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:29:38.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T18:29:38.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.686598 -999.00  +22.50  20.35     31   +4.80 1 2 1 1 1   887    0 15.54 -112.30 ----- 22.3 20.4 255.6 25.6 23.9 -23.5 23.9 -22.9 23.6 -21.1 23.7 -22.0
2025-12-31T18:29:38.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T18:29:38.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T18:29:38.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.686598
2025-12-31T18:29:38.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T18:29:38.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T18:29:38.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T18:29:38.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T18:29:38.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T18:29:38.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T18:29:27', tmtdew=20.59, humidity=25.6, cloud=0.0, wind=20.47, temperature=22.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T16:28:42.067', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T18:29:38.280 [DEBUG] [Thread-132562] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:29:38.363 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T18:29:38.374 [DEBUG] [Thread-132565] [transport.py] [_log()] starting thread (client mode): 0xb6b631c0
2025-12-31T18:29:38.374 [DEBUG] [Thread-132565] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:29:38.389 [DEBUG] [Thread-132565] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T18:29:38.389 [INFO] [Thread-132565] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T18:29:38.396 [DEBUG] [Thread-132565] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:29:38.397 [DEBUG] [Thread-132565] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T18:29:38.397 [DEBUG] [Thread-132565] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:29:38.397 [DEBUG] [Thread-132565] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:29:38.397 [DEBUG] [Thread-132565] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:29:38.397 [DEBUG] [Thread-132565] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:29:38.397 [DEBUG] [Thread-132565] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:29:38.397 [DEBUG] [Thread-132565] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:29:38.397 [DEBUG] [Thread-132565] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:29:38.398 [DEBUG] [Thread-132565] [transport.py] [_log()] client lang: <none>
2025-12-31T18:29:38.398 [DEBUG] [Thread-132565] [transport.py] [_log()] server lang: <none>
2025-12-31T18:29:38.398 [DEBUG] [Thread-132565] [transport.py] [_log()] kex follows: False
2025-12-31T18:29:38.398 [DEBUG] [Thread-132565] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:29:38.398 [DEBUG] [Thread-132565] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:29:38.398 [DEBUG] [Thread-132565] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:29:38.398 [DEBUG] [Thread-132565] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:29:38.398 [DEBUG] [Thread-132565] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:29:38.398 [DEBUG] [Thread-132565] [transport.py] [_log()] Compression: none
2025-12-31T18:29:38.398 [DEBUG] [Thread-132565] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:29:38.456 [DEBUG] [Thread-132565] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:29:38.457 [DEBUG] [Thread-132565] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:29:38.457 [DEBUG] [Thread-132565] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T18:29:38.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T18:29:38.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:29:38.513 [DEBUG] [Thread-132565] [transport.py] [_log()] userauth is OK
2025-12-31T18:29:38.514 [DEBUG] [Thread-132565] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:29:38.514 [DEBUG] [Thread-132565] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:29:38.514 [DEBUG] [Thread-132565] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T18:29:38.515 [DEBUG] [Thread-132565] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:29:38.538 [INFO] [Thread-132565] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:29:38.539 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T18:29:38.539 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:29:39.343 [DEBUG] [Thread-132565] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:29:39.343 [DEBUG] [Thread-132565] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:29:39.391 [DEBUG] [Thread-132565] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:29:39.392 [DEBUG] [Thread-132565] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:29:39.401 [DEBUG] [Thread-132565] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:29:39.412 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:29:39.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T18:29:39.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-12-31T18:29:39.433 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:29:39.434 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:29:39.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:29:39.442 [DEBUG] [Thread-132565] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:29:40.905 [DEBUG] [Thread-132567 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:29:55.962 [DEBUG] [Thread-132568 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:30:09.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T18:30:09.465 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T18:30:09.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T18:30:10.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 18, 29, 59), 20.52, 25.63, 0.0, 20.2, 22.63, 0, 0, 0, 2, 0, 0),)
2025-12-31T18:30:10.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 18:29:59
2025-12-31T18:30:10.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T18:30:10.460 [DEBUG] [Thread-132569] [transport.py] [_log()] starting thread (client mode): 0xb6b60760
2025-12-31T18:30:10.461 [DEBUG] [Thread-132569] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:30:10.476 [DEBUG] [Thread-132569] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T18:30:10.477 [INFO] [Thread-132569] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T18:30:10.480 [DEBUG] [Thread-132569] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:30:10.480 [DEBUG] [Thread-132569] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T18:30:10.480 [DEBUG] [Thread-132569] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:30:10.480 [DEBUG] [Thread-132569] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:30:10.480 [DEBUG] [Thread-132569] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:30:10.480 [DEBUG] [Thread-132569] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:30:10.480 [DEBUG] [Thread-132569] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:30:10.480 [DEBUG] [Thread-132569] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:30:10.480 [DEBUG] [Thread-132569] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:30:10.480 [DEBUG] [Thread-132569] [transport.py] [_log()] client lang: <none>
2025-12-31T18:30:10.480 [DEBUG] [Thread-132569] [transport.py] [_log()] server lang: <none>
2025-12-31T18:30:10.480 [DEBUG] [Thread-132569] [transport.py] [_log()] kex follows: False
2025-12-31T18:30:10.480 [DEBUG] [Thread-132569] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:30:10.480 [DEBUG] [Thread-132569] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:30:10.480 [DEBUG] [Thread-132569] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:30:10.480 [DEBUG] [Thread-132569] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:30:10.480 [DEBUG] [Thread-132569] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:30:10.480 [DEBUG] [Thread-132569] [transport.py] [_log()] Compression: none
2025-12-31T18:30:10.481 [DEBUG] [Thread-132569] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:30:10.493 [DEBUG] [Thread-132569] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:30:10.494 [DEBUG] [Thread-132569] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:30:10.494 [DEBUG] [Thread-132569] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T18:30:10.494 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T18:30:10.495 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:30:10.496 [DEBUG] [Thread-132569] [transport.py] [_log()] userauth is OK
2025-12-31T18:30:10.496 [DEBUG] [Thread-132569] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:30:10.496 [DEBUG] [Thread-132569] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:30:10.496 [DEBUG] [Thread-132569] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T18:30:10.496 [DEBUG] [Thread-132569] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:30:10.533 [INFO] [Thread-132569] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:30:10.533 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:30:10.996 [DEBUG] [Thread-132571 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:30:16.212 [DEBUG] [Thread-132569] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:30:16.213 [DEBUG] [Thread-132569] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:30:16.213 [DEBUG] [Thread-132569] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T18:30:16.253 [DEBUG] [Thread-132569] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:30:16.253 [DEBUG] [Thread-132569] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:30:16.257 [DEBUG] [Thread-132569] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:30:16.339 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:30:16.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T18:30:16.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T18:30:16.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T18:30:16.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:30:16.360 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T18:30:16.360 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:30:16.360 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:30:16.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T18:30:16.361 [WARNING] [poll_weather_worker] [driver.py] [poll_weather_state()] Unable to get atlas cloud data: list index out of range
2025-12-31T18:30:16.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T18:29:59', tmtdew=20.52, humidity=25.63, cloud=0.0, wind=20.2, temperature=22.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp=None, atlas_cloud=None, atlas_rain=None, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T18:30:16.363 [DEBUG] [Thread-132569] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:30:16.448 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T18:30:17.502 [DEBUG] [Thread-132573] [transport.py] [_log()] starting thread (client mode): 0xb95d5b70
2025-12-31T18:30:17.502 [DEBUG] [Thread-132573] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:30:17.516 [DEBUG] [Thread-132573] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T18:30:17.516 [INFO] [Thread-132573] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T18:30:17.524 [DEBUG] [Thread-132573] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:30:17.524 [DEBUG] [Thread-132573] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T18:30:17.524 [DEBUG] [Thread-132573] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:30:17.524 [DEBUG] [Thread-132573] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:30:17.524 [DEBUG] [Thread-132573] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:30:17.524 [DEBUG] [Thread-132573] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:30:17.524 [DEBUG] [Thread-132573] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:30:17.524 [DEBUG] [Thread-132573] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:30:17.525 [DEBUG] [Thread-132573] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:30:17.525 [DEBUG] [Thread-132573] [transport.py] [_log()] client lang: <none>
2025-12-31T18:30:17.525 [DEBUG] [Thread-132573] [transport.py] [_log()] server lang: <none>
2025-12-31T18:30:17.525 [DEBUG] [Thread-132573] [transport.py] [_log()] kex follows: False
2025-12-31T18:30:17.525 [DEBUG] [Thread-132573] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:30:17.525 [DEBUG] [Thread-132573] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:30:17.525 [DEBUG] [Thread-132573] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:30:17.525 [DEBUG] [Thread-132573] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:30:17.525 [DEBUG] [Thread-132573] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:30:17.525 [DEBUG] [Thread-132573] [transport.py] [_log()] Compression: none
2025-12-31T18:30:17.525 [DEBUG] [Thread-132573] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:30:17.581 [DEBUG] [Thread-132573] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:30:17.581 [DEBUG] [Thread-132573] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:30:17.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T18:30:17.583 [DEBUG] [Thread-132573] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T18:30:17.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:30:17.637 [DEBUG] [Thread-132573] [transport.py] [_log()] userauth is OK
2025-12-31T18:30:17.637 [DEBUG] [Thread-132573] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:30:17.638 [DEBUG] [Thread-132573] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:30:17.638 [DEBUG] [Thread-132573] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T18:30:17.638 [DEBUG] [Thread-132573] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:30:17.657 [INFO] [Thread-132573] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:30:17.658 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T18:30:17.658 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:30:18.501 [DEBUG] [Thread-132573] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:30:18.501 [DEBUG] [Thread-132573] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:30:18.549 [DEBUG] [Thread-132573] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:30:18.549 [DEBUG] [Thread-132573] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:30:18.558 [DEBUG] [Thread-132573] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:30:18.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:30:18.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T18:30:18.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T18:30:18.586 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:30:18.586 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:30:18.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:30:18.595 [DEBUG] [Thread-132573] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:30:26.031 [DEBUG] [Thread-132575 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:30:30.733 [DEBUG] [Thread-132576 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:30:33.344 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:30:33.345 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:30:41.073 [DEBUG] [Thread-132577 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:30:48.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T18:30:48.592 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T18:30:48.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T18:30:49.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 18, 30, 31), 20.5, 25.66, 0.0, 20.41, 22.6, 0, 0, 0, 2, 0, 0),)
2025-12-31T18:30:49.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 18:30:31
2025-12-31T18:30:49.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T18:30:49.574 [DEBUG] [Thread-132578] [transport.py] [_log()] starting thread (client mode): 0xb6b63c10
2025-12-31T18:30:49.574 [DEBUG] [Thread-132578] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:30:49.588 [DEBUG] [Thread-132578] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T18:30:49.588 [INFO] [Thread-132578] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T18:30:49.591 [DEBUG] [Thread-132578] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:30:49.591 [DEBUG] [Thread-132578] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T18:30:49.591 [DEBUG] [Thread-132578] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:30:49.591 [DEBUG] [Thread-132578] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:30:49.591 [DEBUG] [Thread-132578] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:30:49.591 [DEBUG] [Thread-132578] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:30:49.591 [DEBUG] [Thread-132578] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:30:49.591 [DEBUG] [Thread-132578] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:30:49.591 [DEBUG] [Thread-132578] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:30:49.591 [DEBUG] [Thread-132578] [transport.py] [_log()] client lang: <none>
2025-12-31T18:30:49.591 [DEBUG] [Thread-132578] [transport.py] [_log()] server lang: <none>
2025-12-31T18:30:49.591 [DEBUG] [Thread-132578] [transport.py] [_log()] kex follows: False
2025-12-31T18:30:49.591 [DEBUG] [Thread-132578] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:30:49.591 [DEBUG] [Thread-132578] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:30:49.591 [DEBUG] [Thread-132578] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:30:49.591 [DEBUG] [Thread-132578] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:30:49.591 [DEBUG] [Thread-132578] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:30:49.591 [DEBUG] [Thread-132578] [transport.py] [_log()] Compression: none
2025-12-31T18:30:49.591 [DEBUG] [Thread-132578] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:30:49.599 [DEBUG] [Thread-132578] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:30:49.599 [DEBUG] [Thread-132578] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:30:49.600 [DEBUG] [Thread-132578] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T18:30:49.600 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T18:30:49.600 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:30:49.601 [DEBUG] [Thread-132578] [transport.py] [_log()] userauth is OK
2025-12-31T18:30:49.601 [DEBUG] [Thread-132578] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:30:49.601 [DEBUG] [Thread-132578] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:30:49.601 [DEBUG] [Thread-132578] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T18:30:49.601 [DEBUG] [Thread-132578] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:30:49.614 [INFO] [Thread-132578] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:30:49.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:30:50.200 [DEBUG] [Thread-132578] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:30:50.201 [DEBUG] [Thread-132578] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:30:50.210 [DEBUG] [Thread-132578] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T18:30:50.242 [DEBUG] [Thread-132578] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:30:50.242 [DEBUG] [Thread-132578] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:30:50.246 [DEBUG] [Thread-132578] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:30:50.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:30:50.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T18:30:50.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T18:30:50.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T18:30:50.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:30:50.262 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T18:30:50.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:30:50.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:30:50.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T18:30:50.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.687987 -999.00  +22.50  15.97     31   +4.70 1 2 1 1 1   887    0 15.70 -102.99 ----- 16.9 16.0 264.6 23.9 23.8 -22.7 23.9 -22.2 23.6 -20.7 23.7 -21.0
2025-12-31T18:30:50.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T18:30:50.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T18:30:50.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.687987
2025-12-31T18:30:50.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T18:30:50.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T18:30:50.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T18:30:50.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T18:30:50.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T18:30:50.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T18:30:31', tmtdew=20.5, humidity=25.66, cloud=0.0, wind=20.41, temperature=22.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T16:30:42.077', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T18:30:50.265 [DEBUG] [Thread-132578] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:30:50.348 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T18:30:50.361 [DEBUG] [Thread-132581] [transport.py] [_log()] starting thread (client mode): 0xb1759fc0
2025-12-31T18:30:50.361 [DEBUG] [Thread-132581] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:30:50.375 [DEBUG] [Thread-132581] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T18:30:50.376 [INFO] [Thread-132581] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T18:30:50.383 [DEBUG] [Thread-132581] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:30:50.383 [DEBUG] [Thread-132581] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T18:30:50.384 [DEBUG] [Thread-132581] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:30:50.384 [DEBUG] [Thread-132581] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:30:50.384 [DEBUG] [Thread-132581] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:30:50.384 [DEBUG] [Thread-132581] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:30:50.384 [DEBUG] [Thread-132581] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:30:50.384 [DEBUG] [Thread-132581] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:30:50.384 [DEBUG] [Thread-132581] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:30:50.384 [DEBUG] [Thread-132581] [transport.py] [_log()] client lang: <none>
2025-12-31T18:30:50.384 [DEBUG] [Thread-132581] [transport.py] [_log()] server lang: <none>
2025-12-31T18:30:50.384 [DEBUG] [Thread-132581] [transport.py] [_log()] kex follows: False
2025-12-31T18:30:50.384 [DEBUG] [Thread-132581] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:30:50.384 [DEBUG] [Thread-132581] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:30:50.384 [DEBUG] [Thread-132581] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:30:50.384 [DEBUG] [Thread-132581] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:30:50.384 [DEBUG] [Thread-132581] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:30:50.384 [DEBUG] [Thread-132581] [transport.py] [_log()] Compression: none
2025-12-31T18:30:50.384 [DEBUG] [Thread-132581] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:30:50.441 [DEBUG] [Thread-132581] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:30:50.441 [DEBUG] [Thread-132581] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:30:50.442 [DEBUG] [Thread-132581] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T18:30:50.442 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T18:30:50.443 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:30:50.497 [DEBUG] [Thread-132581] [transport.py] [_log()] userauth is OK
2025-12-31T18:30:50.497 [DEBUG] [Thread-132581] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:30:50.498 [DEBUG] [Thread-132581] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:30:50.498 [DEBUG] [Thread-132581] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T18:30:50.498 [DEBUG] [Thread-132581] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:30:50.516 [INFO] [Thread-132581] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:30:50.517 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T18:30:50.517 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:30:51.372 [DEBUG] [Thread-132581] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:30:51.372 [DEBUG] [Thread-132581] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:30:51.420 [DEBUG] [Thread-132581] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:30:51.420 [DEBUG] [Thread-132581] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:30:51.429 [DEBUG] [Thread-132581] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:30:51.438 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:30:51.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T18:30:51.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-12-31T18:30:51.457 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:30:51.458 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:30:51.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:30:51.466 [DEBUG] [Thread-132581] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:30:56.108 [DEBUG] [Thread-132583 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:31:11.157 [DEBUG] [Thread-132584 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:31:21.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T18:31:21.473 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T18:31:21.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T18:31:22.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 18, 31, 3), 20.47, 25.71, 0.0, 21.9, 22.6, 0, 0, 0, 2, 0, 0),)
2025-12-31T18:31:22.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 18:31:03
2025-12-31T18:31:22.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T18:31:22.446 [DEBUG] [Thread-132585] [transport.py] [_log()] starting thread (client mode): 0xb6bbff10
2025-12-31T18:31:22.446 [DEBUG] [Thread-132585] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:31:22.468 [DEBUG] [Thread-132585] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T18:31:22.468 [INFO] [Thread-132585] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T18:31:22.469 [DEBUG] [Thread-132585] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:31:22.469 [DEBUG] [Thread-132585] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T18:31:22.469 [DEBUG] [Thread-132585] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:31:22.469 [DEBUG] [Thread-132585] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:31:22.470 [DEBUG] [Thread-132585] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:31:22.470 [DEBUG] [Thread-132585] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:31:22.470 [DEBUG] [Thread-132585] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:31:22.470 [DEBUG] [Thread-132585] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:31:22.470 [DEBUG] [Thread-132585] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:31:22.470 [DEBUG] [Thread-132585] [transport.py] [_log()] client lang: <none>
2025-12-31T18:31:22.470 [DEBUG] [Thread-132585] [transport.py] [_log()] server lang: <none>
2025-12-31T18:31:22.470 [DEBUG] [Thread-132585] [transport.py] [_log()] kex follows: False
2025-12-31T18:31:22.470 [DEBUG] [Thread-132585] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:31:22.470 [DEBUG] [Thread-132585] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:31:22.470 [DEBUG] [Thread-132585] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:31:22.470 [DEBUG] [Thread-132585] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:31:22.470 [DEBUG] [Thread-132585] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:31:22.470 [DEBUG] [Thread-132585] [transport.py] [_log()] Compression: none
2025-12-31T18:31:22.470 [DEBUG] [Thread-132585] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:31:22.488 [DEBUG] [Thread-132585] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:31:22.488 [DEBUG] [Thread-132585] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:31:22.489 [DEBUG] [Thread-132585] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T18:31:22.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T18:31:22.490 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:31:22.491 [DEBUG] [Thread-132585] [transport.py] [_log()] userauth is OK
2025-12-31T18:31:22.491 [DEBUG] [Thread-132585] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:31:22.491 [DEBUG] [Thread-132585] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:31:22.491 [DEBUG] [Thread-132585] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T18:31:22.491 [DEBUG] [Thread-132585] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:31:22.517 [INFO] [Thread-132585] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:31:22.518 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:31:23.127 [DEBUG] [Thread-132585] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:31:23.127 [DEBUG] [Thread-132585] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:31:23.128 [DEBUG] [Thread-132585] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T18:31:23.168 [DEBUG] [Thread-132585] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:31:23.168 [DEBUG] [Thread-132585] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:31:23.172 [DEBUG] [Thread-132585] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:31:23.183 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:31:23.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T18:31:23.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T18:31:23.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T18:31:23.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:31:23.194 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T18:31:23.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:31:23.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:31:23.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T18:31:23.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.687987 -999.00  +22.50  15.97     31   +4.70 1 2 1 1 1   887    0 15.70 -102.99 ----- 16.9 16.0 264.6 23.9 23.8 -22.7 23.9 -22.2 23.6 -20.7 23.7 -21.0
2025-12-31T18:31:23.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T18:31:23.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T18:31:23.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.687987
2025-12-31T18:31:23.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T18:31:23.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T18:31:23.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T18:31:23.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T18:31:23.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T18:31:23.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T18:31:03', tmtdew=20.47, humidity=25.71, cloud=0.0, wind=21.9, temperature=22.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T16:30:42.077', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T18:31:23.197 [DEBUG] [Thread-132585] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:31:23.280 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T18:31:23.292 [DEBUG] [Thread-132588] [transport.py] [_log()] starting thread (client mode): 0xb6b612a0
2025-12-31T18:31:23.292 [DEBUG] [Thread-132588] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:31:23.307 [DEBUG] [Thread-132588] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T18:31:23.307 [INFO] [Thread-132588] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T18:31:23.314 [DEBUG] [Thread-132588] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:31:23.315 [DEBUG] [Thread-132588] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T18:31:23.315 [DEBUG] [Thread-132588] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:31:23.315 [DEBUG] [Thread-132588] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:31:23.315 [DEBUG] [Thread-132588] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:31:23.315 [DEBUG] [Thread-132588] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:31:23.315 [DEBUG] [Thread-132588] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:31:23.315 [DEBUG] [Thread-132588] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:31:23.315 [DEBUG] [Thread-132588] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:31:23.315 [DEBUG] [Thread-132588] [transport.py] [_log()] client lang: <none>
2025-12-31T18:31:23.315 [DEBUG] [Thread-132588] [transport.py] [_log()] server lang: <none>
2025-12-31T18:31:23.315 [DEBUG] [Thread-132588] [transport.py] [_log()] kex follows: False
2025-12-31T18:31:23.315 [DEBUG] [Thread-132588] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:31:23.315 [DEBUG] [Thread-132588] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:31:23.315 [DEBUG] [Thread-132588] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:31:23.315 [DEBUG] [Thread-132588] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:31:23.315 [DEBUG] [Thread-132588] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:31:23.315 [DEBUG] [Thread-132588] [transport.py] [_log()] Compression: none
2025-12-31T18:31:23.315 [DEBUG] [Thread-132588] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:31:23.373 [DEBUG] [Thread-132588] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:31:23.374 [DEBUG] [Thread-132588] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:31:23.374 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T18:31:23.375 [DEBUG] [Thread-132588] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T18:31:23.376 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:31:23.429 [DEBUG] [Thread-132588] [transport.py] [_log()] userauth is OK
2025-12-31T18:31:23.430 [DEBUG] [Thread-132588] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:31:23.430 [DEBUG] [Thread-132588] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:31:23.430 [DEBUG] [Thread-132588] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T18:31:23.430 [DEBUG] [Thread-132588] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:31:23.448 [INFO] [Thread-132588] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:31:23.449 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T18:31:23.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:31:24.274 [DEBUG] [Thread-132588] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:31:24.274 [DEBUG] [Thread-132588] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:31:24.322 [DEBUG] [Thread-132588] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:31:24.322 [DEBUG] [Thread-132588] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:31:24.331 [DEBUG] [Thread-132588] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:31:24.341 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:31:24.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T18:31:24.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T18:31:24.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:31:24.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:31:24.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:31:24.368 [DEBUG] [Thread-132588] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:31:26.195 [DEBUG] [Thread-132590 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:31:30.777 [DEBUG] [Thread-132591 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:31:33.485 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:31:33.486 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:31:41.246 [DEBUG] [Thread-132592 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:31:54.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T18:31:54.390 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T18:31:54.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T18:31:55.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 18, 31, 35), 20.55, 25.75, 0.0, 24.24, 22.58, 0, 0, 0, 2, 0, 0),)
2025-12-31T18:31:55.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 18:31:35
2025-12-31T18:31:55.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T18:31:55.382 [DEBUG] [Thread-132593] [transport.py] [_log()] starting thread (client mode): 0xb6b60130
2025-12-31T18:31:55.383 [DEBUG] [Thread-132593] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:31:55.403 [DEBUG] [Thread-132593] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T18:31:55.403 [INFO] [Thread-132593] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T18:31:55.404 [DEBUG] [Thread-132593] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:31:55.404 [DEBUG] [Thread-132593] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T18:31:55.404 [DEBUG] [Thread-132593] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:31:55.404 [DEBUG] [Thread-132593] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:31:55.404 [DEBUG] [Thread-132593] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:31:55.404 [DEBUG] [Thread-132593] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:31:55.404 [DEBUG] [Thread-132593] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:31:55.404 [DEBUG] [Thread-132593] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:31:55.404 [DEBUG] [Thread-132593] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:31:55.404 [DEBUG] [Thread-132593] [transport.py] [_log()] client lang: <none>
2025-12-31T18:31:55.404 [DEBUG] [Thread-132593] [transport.py] [_log()] server lang: <none>
2025-12-31T18:31:55.404 [DEBUG] [Thread-132593] [transport.py] [_log()] kex follows: False
2025-12-31T18:31:55.404 [DEBUG] [Thread-132593] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:31:55.404 [DEBUG] [Thread-132593] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:31:55.404 [DEBUG] [Thread-132593] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:31:55.404 [DEBUG] [Thread-132593] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:31:55.405 [DEBUG] [Thread-132593] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:31:55.405 [DEBUG] [Thread-132593] [transport.py] [_log()] Compression: none
2025-12-31T18:31:55.405 [DEBUG] [Thread-132593] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:31:55.415 [DEBUG] [Thread-132593] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:31:55.415 [DEBUG] [Thread-132593] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:31:55.416 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T18:31:55.416 [DEBUG] [Thread-132593] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T18:31:55.416 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:31:55.417 [DEBUG] [Thread-132593] [transport.py] [_log()] userauth is OK
2025-12-31T18:31:55.417 [DEBUG] [Thread-132593] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:31:55.417 [DEBUG] [Thread-132593] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:31:55.417 [DEBUG] [Thread-132593] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T18:31:55.417 [DEBUG] [Thread-132593] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:31:55.427 [INFO] [Thread-132593] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:31:55.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:31:55.971 [DEBUG] [Thread-132593] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:31:55.971 [DEBUG] [Thread-132593] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:31:55.971 [DEBUG] [Thread-132593] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T18:31:56.013 [DEBUG] [Thread-132593] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:31:56.013 [DEBUG] [Thread-132593] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:31:56.016 [DEBUG] [Thread-132593] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:31:56.023 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:31:56.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T18:31:56.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T18:31:56.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T18:31:56.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:31:56.035 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T18:31:56.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:31:56.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:31:56.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T18:31:56.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.688334 -999.00  +22.50  20.38     31   +4.70 1 2 1 1 1   887    0 15.78 -103.95 ----- 19.9 20.4 254.6 25.1 23.8 -22.6 23.8 -22.1 23.6 -20.7 23.7 -21.3
2025-12-31T18:31:56.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T18:31:56.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T18:31:56.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.688334
2025-12-31T18:31:56.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T18:31:56.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T18:31:56.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T18:31:56.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T18:31:56.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T18:31:56.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T18:31:35', tmtdew=20.55, humidity=25.75, cloud=0.0, wind=24.24, temperature=22.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T16:31:12.058', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T18:31:56.038 [DEBUG] [Thread-132593] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:31:56.133 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T18:31:56.145 [DEBUG] [Thread-132596] [transport.py] [_log()] starting thread (client mode): 0xb6b61870
2025-12-31T18:31:56.145 [DEBUG] [Thread-132596] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:31:56.159 [DEBUG] [Thread-132596] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T18:31:56.159 [INFO] [Thread-132596] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T18:31:56.166 [DEBUG] [Thread-132596] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:31:56.166 [DEBUG] [Thread-132596] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T18:31:56.166 [DEBUG] [Thread-132596] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:31:56.166 [DEBUG] [Thread-132596] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:31:56.167 [DEBUG] [Thread-132596] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:31:56.167 [DEBUG] [Thread-132596] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:31:56.167 [DEBUG] [Thread-132596] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:31:56.167 [DEBUG] [Thread-132596] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:31:56.167 [DEBUG] [Thread-132596] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:31:56.167 [DEBUG] [Thread-132596] [transport.py] [_log()] client lang: <none>
2025-12-31T18:31:56.167 [DEBUG] [Thread-132596] [transport.py] [_log()] server lang: <none>
2025-12-31T18:31:56.167 [DEBUG] [Thread-132596] [transport.py] [_log()] kex follows: False
2025-12-31T18:31:56.167 [DEBUG] [Thread-132596] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:31:56.167 [DEBUG] [Thread-132596] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:31:56.167 [DEBUG] [Thread-132596] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:31:56.167 [DEBUG] [Thread-132596] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:31:56.167 [DEBUG] [Thread-132596] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:31:56.167 [DEBUG] [Thread-132596] [transport.py] [_log()] Compression: none
2025-12-31T18:31:56.167 [DEBUG] [Thread-132596] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:31:56.224 [DEBUG] [Thread-132596] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:31:56.224 [DEBUG] [Thread-132596] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:31:56.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T18:31:56.225 [DEBUG] [Thread-132596] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T18:31:56.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:31:56.281 [DEBUG] [Thread-132596] [transport.py] [_log()] userauth is OK
2025-12-31T18:31:56.281 [DEBUG] [Thread-132596] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:31:56.282 [DEBUG] [Thread-132596] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:31:56.282 [DEBUG] [Thread-132596] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T18:31:56.282 [DEBUG] [Thread-132596] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:31:56.283 [DEBUG] [Thread-132598 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:31:56.306 [INFO] [Thread-132596] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:31:56.306 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T18:31:56.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:31:57.118 [DEBUG] [Thread-132596] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:31:57.119 [DEBUG] [Thread-132596] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:31:57.170 [DEBUG] [Thread-132596] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:31:57.170 [DEBUG] [Thread-132596] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:31:57.183 [DEBUG] [Thread-132596] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:31:57.192 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:31:57.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T18:31:57.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T18:31:57.218 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:31:57.219 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:31:57.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:31:57.227 [DEBUG] [Thread-132596] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:32:11.334 [DEBUG] [Thread-132599 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:32:26.364 [DEBUG] [Thread-132600 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:32:27.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T18:32:27.249 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T18:32:27.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T18:32:27.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 18, 32, 7), 20.56, 25.71, 0.0, 22.13, 22.55, 0, 0, 0, 2, 0, 0),)
2025-12-31T18:32:27.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 18:32:07
2025-12-31T18:32:28.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T18:32:28.240 [DEBUG] [Thread-132601] [transport.py] [_log()] starting thread (client mode): 0xb6bba7a0
2025-12-31T18:32:28.240 [DEBUG] [Thread-132601] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:32:28.250 [DEBUG] [Thread-132601] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T18:32:28.251 [INFO] [Thread-132601] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T18:32:28.252 [DEBUG] [Thread-132601] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:32:28.252 [DEBUG] [Thread-132601] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T18:32:28.252 [DEBUG] [Thread-132601] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:32:28.252 [DEBUG] [Thread-132601] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:32:28.252 [DEBUG] [Thread-132601] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:32:28.252 [DEBUG] [Thread-132601] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:32:28.252 [DEBUG] [Thread-132601] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:32:28.252 [DEBUG] [Thread-132601] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:32:28.252 [DEBUG] [Thread-132601] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:32:28.252 [DEBUG] [Thread-132601] [transport.py] [_log()] client lang: <none>
2025-12-31T18:32:28.252 [DEBUG] [Thread-132601] [transport.py] [_log()] server lang: <none>
2025-12-31T18:32:28.252 [DEBUG] [Thread-132601] [transport.py] [_log()] kex follows: False
2025-12-31T18:32:28.252 [DEBUG] [Thread-132601] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:32:28.252 [DEBUG] [Thread-132601] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:32:28.252 [DEBUG] [Thread-132601] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:32:28.252 [DEBUG] [Thread-132601] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:32:28.252 [DEBUG] [Thread-132601] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:32:28.252 [DEBUG] [Thread-132601] [transport.py] [_log()] Compression: none
2025-12-31T18:32:28.252 [DEBUG] [Thread-132601] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:32:28.259 [DEBUG] [Thread-132601] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:32:28.259 [DEBUG] [Thread-132601] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:32:28.259 [DEBUG] [Thread-132601] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T18:32:28.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T18:32:28.260 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:32:28.261 [DEBUG] [Thread-132601] [transport.py] [_log()] userauth is OK
2025-12-31T18:32:28.261 [DEBUG] [Thread-132601] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:32:28.261 [DEBUG] [Thread-132601] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:32:28.261 [DEBUG] [Thread-132601] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T18:32:28.261 [DEBUG] [Thread-132601] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:32:28.273 [INFO] [Thread-132601] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:32:28.273 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:32:28.944 [DEBUG] [Thread-132601] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:32:28.945 [DEBUG] [Thread-132601] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:32:28.945 [DEBUG] [Thread-132601] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T18:32:28.986 [DEBUG] [Thread-132601] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:32:28.986 [DEBUG] [Thread-132601] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:32:28.989 [DEBUG] [Thread-132601] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:32:29.005 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:32:29.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T18:32:29.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T18:32:29.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T18:32:29.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:32:29.009 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T18:32:29.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:32:29.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:32:29.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T18:32:29.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.688682 -999.00  +22.40  22.84     31   +4.70 1 2 1 1 1   887    0 15.43 -110.49 ----- 18.4 22.8 265.2 24.8 23.8 -22.6 23.8 -22.1 23.5 -20.8 23.7 -21.2
2025-12-31T18:32:29.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T18:32:29.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T18:32:29.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.688682
2025-12-31T18:32:29.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T18:32:29.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T18:32:29.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T18:32:29.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T18:32:29.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T18:32:29.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T18:32:07', tmtdew=20.56, humidity=25.71, cloud=0.0, wind=22.13, temperature=22.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T16:31:42.125', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T18:32:29.010 [DEBUG] [Thread-132601] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:32:29.082 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T18:32:29.094 [DEBUG] [Thread-132604] [transport.py] [_log()] starting thread (client mode): 0xb6bbb8e0
2025-12-31T18:32:29.094 [DEBUG] [Thread-132604] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:32:29.111 [DEBUG] [Thread-132604] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T18:32:29.111 [INFO] [Thread-132604] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T18:32:29.119 [DEBUG] [Thread-132604] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:32:29.119 [DEBUG] [Thread-132604] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T18:32:29.119 [DEBUG] [Thread-132604] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:32:29.119 [DEBUG] [Thread-132604] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:32:29.119 [DEBUG] [Thread-132604] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:32:29.119 [DEBUG] [Thread-132604] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:32:29.119 [DEBUG] [Thread-132604] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:32:29.119 [DEBUG] [Thread-132604] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:32:29.119 [DEBUG] [Thread-132604] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:32:29.119 [DEBUG] [Thread-132604] [transport.py] [_log()] client lang: <none>
2025-12-31T18:32:29.119 [DEBUG] [Thread-132604] [transport.py] [_log()] server lang: <none>
2025-12-31T18:32:29.119 [DEBUG] [Thread-132604] [transport.py] [_log()] kex follows: False
2025-12-31T18:32:29.119 [DEBUG] [Thread-132604] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:32:29.119 [DEBUG] [Thread-132604] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:32:29.119 [DEBUG] [Thread-132604] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:32:29.119 [DEBUG] [Thread-132604] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:32:29.119 [DEBUG] [Thread-132604] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:32:29.119 [DEBUG] [Thread-132604] [transport.py] [_log()] Compression: none
2025-12-31T18:32:29.119 [DEBUG] [Thread-132604] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:32:29.177 [DEBUG] [Thread-132604] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:32:29.177 [DEBUG] [Thread-132604] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:32:29.178 [DEBUG] [Thread-132604] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T18:32:29.178 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T18:32:29.179 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:32:29.233 [DEBUG] [Thread-132604] [transport.py] [_log()] userauth is OK
2025-12-31T18:32:29.233 [DEBUG] [Thread-132604] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:32:29.233 [DEBUG] [Thread-132604] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:32:29.233 [DEBUG] [Thread-132604] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T18:32:29.233 [DEBUG] [Thread-132604] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:32:29.256 [INFO] [Thread-132604] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:32:29.257 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T18:32:29.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:32:30.151 [DEBUG] [Thread-132604] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:32:30.151 [DEBUG] [Thread-132604] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:32:30.199 [DEBUG] [Thread-132604] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:32:30.199 [DEBUG] [Thread-132604] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:32:30.209 [DEBUG] [Thread-132604] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:32:30.218 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:32:30.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T18:32:30.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T18:32:30.236 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:32:30.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:32:30.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:32:30.245 [DEBUG] [Thread-132604] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:32:30.826 [DEBUG] [Thread-132606 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:32:33.628 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:32:33.630 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:32:41.397 [DEBUG] [Thread-132607 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:32:56.443 [DEBUG] [Thread-132608 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:33:00.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T18:33:00.245 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T18:33:00.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T18:33:00.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 18, 32, 39), 20.5, 25.73, 0.0, 23.42, 22.55, 0, 0, 0, 2, 0, 0),)
2025-12-31T18:33:00.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 18:32:39
2025-12-31T18:33:01.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T18:33:01.280 [DEBUG] [Thread-132609] [transport.py] [_log()] starting thread (client mode): 0xb95f0760
2025-12-31T18:33:01.281 [DEBUG] [Thread-132609] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:33:01.300 [DEBUG] [Thread-132609] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T18:33:01.300 [INFO] [Thread-132609] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T18:33:01.304 [DEBUG] [Thread-132609] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:33:01.304 [DEBUG] [Thread-132609] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T18:33:01.304 [DEBUG] [Thread-132609] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:33:01.304 [DEBUG] [Thread-132609] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:33:01.304 [DEBUG] [Thread-132609] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:33:01.304 [DEBUG] [Thread-132609] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:33:01.304 [DEBUG] [Thread-132609] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:33:01.304 [DEBUG] [Thread-132609] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:33:01.304 [DEBUG] [Thread-132609] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:33:01.304 [DEBUG] [Thread-132609] [transport.py] [_log()] client lang: <none>
2025-12-31T18:33:01.304 [DEBUG] [Thread-132609] [transport.py] [_log()] server lang: <none>
2025-12-31T18:33:01.304 [DEBUG] [Thread-132609] [transport.py] [_log()] kex follows: False
2025-12-31T18:33:01.304 [DEBUG] [Thread-132609] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:33:01.304 [DEBUG] [Thread-132609] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:33:01.304 [DEBUG] [Thread-132609] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:33:01.304 [DEBUG] [Thread-132609] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:33:01.304 [DEBUG] [Thread-132609] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:33:01.304 [DEBUG] [Thread-132609] [transport.py] [_log()] Compression: none
2025-12-31T18:33:01.304 [DEBUG] [Thread-132609] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:33:01.320 [DEBUG] [Thread-132609] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:33:01.320 [DEBUG] [Thread-132609] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:33:01.320 [DEBUG] [Thread-132609] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T18:33:01.320 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T18:33:01.320 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:33:01.321 [DEBUG] [Thread-132609] [transport.py] [_log()] userauth is OK
2025-12-31T18:33:01.321 [DEBUG] [Thread-132609] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:33:01.321 [DEBUG] [Thread-132609] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:33:01.321 [DEBUG] [Thread-132609] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T18:33:01.321 [DEBUG] [Thread-132609] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:33:01.336 [INFO] [Thread-132609] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:33:01.336 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:33:01.942 [DEBUG] [Thread-132609] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:33:01.942 [DEBUG] [Thread-132609] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:33:01.942 [DEBUG] [Thread-132609] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T18:33:01.984 [DEBUG] [Thread-132609] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:33:01.984 [DEBUG] [Thread-132609] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:33:01.987 [DEBUG] [Thread-132609] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:33:01.998 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:33:01.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T18:33:01.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T18:33:02.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T18:33:02.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:33:02.004 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T18:33:02.004 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:33:02.004 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:33:02.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T18:33:02.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.689029 -999.00  +22.40  16.35     31   +4.60 1 2 1 1 1   887    0 15.47 -109.47 ----- 16.0 16.4 266.8 24.9 23.8 -22.8 23.8 -22.3 23.5 -21.1 23.7 -21.2
2025-12-31T18:33:02.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T18:33:02.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T18:33:02.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.689029
2025-12-31T18:33:02.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T18:33:02.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T18:33:02.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T18:33:02.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T18:33:02.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T18:33:02.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T18:32:39', tmtdew=20.5, humidity=25.73, cloud=0.0, wind=23.42, temperature=22.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T16:32:12.106', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T18:33:02.005 [DEBUG] [Thread-132609] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:33:02.079 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T18:33:02.092 [DEBUG] [Thread-132612] [transport.py] [_log()] starting thread (client mode): 0xb175bd00
2025-12-31T18:33:02.092 [DEBUG] [Thread-132612] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:33:02.106 [DEBUG] [Thread-132612] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T18:33:02.106 [INFO] [Thread-132612] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T18:33:02.114 [DEBUG] [Thread-132612] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:33:02.114 [DEBUG] [Thread-132612] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T18:33:02.114 [DEBUG] [Thread-132612] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:33:02.114 [DEBUG] [Thread-132612] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:33:02.114 [DEBUG] [Thread-132612] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:33:02.114 [DEBUG] [Thread-132612] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:33:02.114 [DEBUG] [Thread-132612] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:33:02.114 [DEBUG] [Thread-132612] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:33:02.114 [DEBUG] [Thread-132612] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:33:02.114 [DEBUG] [Thread-132612] [transport.py] [_log()] client lang: <none>
2025-12-31T18:33:02.114 [DEBUG] [Thread-132612] [transport.py] [_log()] server lang: <none>
2025-12-31T18:33:02.114 [DEBUG] [Thread-132612] [transport.py] [_log()] kex follows: False
2025-12-31T18:33:02.114 [DEBUG] [Thread-132612] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:33:02.114 [DEBUG] [Thread-132612] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:33:02.114 [DEBUG] [Thread-132612] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:33:02.114 [DEBUG] [Thread-132612] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:33:02.114 [DEBUG] [Thread-132612] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:33:02.114 [DEBUG] [Thread-132612] [transport.py] [_log()] Compression: none
2025-12-31T18:33:02.114 [DEBUG] [Thread-132612] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:33:02.171 [DEBUG] [Thread-132612] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:33:02.171 [DEBUG] [Thread-132612] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:33:02.172 [DEBUG] [Thread-132612] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T18:33:02.172 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T18:33:02.172 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:33:02.228 [DEBUG] [Thread-132612] [transport.py] [_log()] userauth is OK
2025-12-31T18:33:02.228 [DEBUG] [Thread-132612] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:33:02.228 [DEBUG] [Thread-132612] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:33:02.228 [DEBUG] [Thread-132612] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T18:33:02.228 [DEBUG] [Thread-132612] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:33:02.242 [INFO] [Thread-132612] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:33:02.242 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T18:33:02.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:33:03.090 [DEBUG] [Thread-132612] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:33:03.090 [DEBUG] [Thread-132612] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:33:03.137 [DEBUG] [Thread-132612] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:33:03.137 [DEBUG] [Thread-132612] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:33:03.146 [DEBUG] [Thread-132612] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:33:03.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:33:03.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T18:33:03.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T18:33:03.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:33:03.169 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:33:03.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:33:03.178 [DEBUG] [Thread-132612] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:33:11.473 [DEBUG] [Thread-132614 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:33:26.521 [DEBUG] [Thread-132615 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:33:30.879 [DEBUG] [Thread-132616 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:33:33.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T18:33:33.175 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T18:33:33.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T18:33:33.771 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:33:33.772 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:33:33.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 18, 33, 11), 20.53, 25.66, 0.0, 22.16, 22.5, 0, 0, 0, 2, 0, 0),)
2025-12-31T18:33:33.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 18:33:11
2025-12-31T18:33:34.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T18:33:34.159 [DEBUG] [Thread-132617] [transport.py] [_log()] starting thread (client mode): 0xb95d6ef0
2025-12-31T18:33:34.159 [DEBUG] [Thread-132617] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:33:34.173 [DEBUG] [Thread-132617] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T18:33:34.173 [INFO] [Thread-132617] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T18:33:34.176 [DEBUG] [Thread-132617] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:33:34.176 [DEBUG] [Thread-132617] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T18:33:34.176 [DEBUG] [Thread-132617] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:33:34.176 [DEBUG] [Thread-132617] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:33:34.176 [DEBUG] [Thread-132617] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:33:34.176 [DEBUG] [Thread-132617] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:33:34.176 [DEBUG] [Thread-132617] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:33:34.176 [DEBUG] [Thread-132617] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:33:34.176 [DEBUG] [Thread-132617] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:33:34.176 [DEBUG] [Thread-132617] [transport.py] [_log()] client lang: <none>
2025-12-31T18:33:34.176 [DEBUG] [Thread-132617] [transport.py] [_log()] server lang: <none>
2025-12-31T18:33:34.177 [DEBUG] [Thread-132617] [transport.py] [_log()] kex follows: False
2025-12-31T18:33:34.177 [DEBUG] [Thread-132617] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:33:34.177 [DEBUG] [Thread-132617] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:33:34.177 [DEBUG] [Thread-132617] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:33:34.177 [DEBUG] [Thread-132617] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:33:34.177 [DEBUG] [Thread-132617] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:33:34.177 [DEBUG] [Thread-132617] [transport.py] [_log()] Compression: none
2025-12-31T18:33:34.177 [DEBUG] [Thread-132617] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:33:34.196 [DEBUG] [Thread-132617] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:33:34.196 [DEBUG] [Thread-132617] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:33:34.197 [DEBUG] [Thread-132617] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T18:33:34.197 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T18:33:34.197 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:33:34.198 [DEBUG] [Thread-132617] [transport.py] [_log()] userauth is OK
2025-12-31T18:33:34.199 [DEBUG] [Thread-132617] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:33:34.199 [DEBUG] [Thread-132617] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:33:34.199 [DEBUG] [Thread-132617] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T18:33:34.199 [DEBUG] [Thread-132617] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:33:34.213 [INFO] [Thread-132617] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:33:34.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:33:35.026 [DEBUG] [Thread-132617] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:33:35.027 [DEBUG] [Thread-132617] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:33:35.027 [DEBUG] [Thread-132617] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T18:33:35.067 [DEBUG] [Thread-132617] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:33:35.067 [DEBUG] [Thread-132617] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:33:35.070 [DEBUG] [Thread-132617] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:33:35.079 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:33:35.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T18:33:35.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T18:33:35.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T18:33:35.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:33:35.089 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T18:33:35.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:33:35.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:33:35.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T18:33:35.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.689376 -999.00  +22.40  19.97     31   +4.70 1 2 1 1 1   887    0 15.34 -119.29 ----- 17.8 20.0 262.4 22.8 23.7 -22.5 23.8 -22.3 23.5 -21.4 23.6 -21.0
2025-12-31T18:33:35.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T18:33:35.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T18:33:35.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.689376
2025-12-31T18:33:35.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T18:33:35.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T18:33:35.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T18:33:35.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T18:33:35.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T18:33:35.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T18:33:11', tmtdew=20.53, humidity=25.66, cloud=0.0, wind=22.16, temperature=22.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T16:32:42.086', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T18:33:35.092 [DEBUG] [Thread-132617] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:33:35.176 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T18:33:35.188 [DEBUG] [Thread-132620] [transport.py] [_log()] starting thread (client mode): 0xb17466e0
2025-12-31T18:33:35.189 [DEBUG] [Thread-132620] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:33:35.203 [DEBUG] [Thread-132620] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T18:33:35.203 [INFO] [Thread-132620] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T18:33:35.211 [DEBUG] [Thread-132620] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:33:35.211 [DEBUG] [Thread-132620] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T18:33:35.211 [DEBUG] [Thread-132620] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:33:35.212 [DEBUG] [Thread-132620] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:33:35.212 [DEBUG] [Thread-132620] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:33:35.212 [DEBUG] [Thread-132620] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:33:35.212 [DEBUG] [Thread-132620] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:33:35.212 [DEBUG] [Thread-132620] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:33:35.212 [DEBUG] [Thread-132620] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:33:35.212 [DEBUG] [Thread-132620] [transport.py] [_log()] client lang: <none>
2025-12-31T18:33:35.212 [DEBUG] [Thread-132620] [transport.py] [_log()] server lang: <none>
2025-12-31T18:33:35.213 [DEBUG] [Thread-132620] [transport.py] [_log()] kex follows: False
2025-12-31T18:33:35.213 [DEBUG] [Thread-132620] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:33:35.213 [DEBUG] [Thread-132620] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:33:35.213 [DEBUG] [Thread-132620] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:33:35.213 [DEBUG] [Thread-132620] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:33:35.213 [DEBUG] [Thread-132620] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:33:35.213 [DEBUG] [Thread-132620] [transport.py] [_log()] Compression: none
2025-12-31T18:33:35.213 [DEBUG] [Thread-132620] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:33:35.272 [DEBUG] [Thread-132620] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:33:35.272 [DEBUG] [Thread-132620] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:33:35.273 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T18:33:35.274 [DEBUG] [Thread-132620] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T18:33:35.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:33:35.331 [DEBUG] [Thread-132620] [transport.py] [_log()] userauth is OK
2025-12-31T18:33:35.331 [DEBUG] [Thread-132620] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:33:35.332 [DEBUG] [Thread-132620] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:33:35.332 [DEBUG] [Thread-132620] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T18:33:35.332 [DEBUG] [Thread-132620] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:33:35.350 [INFO] [Thread-132620] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:33:35.351 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T18:33:35.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:33:36.186 [DEBUG] [Thread-132620] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:33:36.186 [DEBUG] [Thread-132620] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:33:36.234 [DEBUG] [Thread-132620] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:33:36.234 [DEBUG] [Thread-132620] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:33:36.244 [DEBUG] [Thread-132620] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:33:36.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:33:36.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T18:33:36.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-12-31T18:33:36.271 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:33:36.272 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:33:36.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:33:36.280 [DEBUG] [Thread-132620] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:33:41.555 [DEBUG] [Thread-132622 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:33:56.594 [DEBUG] [Thread-132623 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:34:06.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T18:34:06.303 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T18:34:06.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T18:34:07.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 18, 33, 43), 20.58, 25.66, 0.0, 24.16, 22.5, 0, 0, 0, 2, 0, 0),)
2025-12-31T18:34:07.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 18:33:43
2025-12-31T18:34:07.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T18:34:07.294 [DEBUG] [Thread-132624] [transport.py] [_log()] starting thread (client mode): 0xb6bbb6a0
2025-12-31T18:34:07.294 [DEBUG] [Thread-132624] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:34:07.317 [DEBUG] [Thread-132624] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T18:34:07.317 [INFO] [Thread-132624] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T18:34:07.321 [DEBUG] [Thread-132624] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:34:07.321 [DEBUG] [Thread-132624] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T18:34:07.321 [DEBUG] [Thread-132624] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:34:07.321 [DEBUG] [Thread-132624] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:34:07.321 [DEBUG] [Thread-132624] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:34:07.321 [DEBUG] [Thread-132624] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:34:07.321 [DEBUG] [Thread-132624] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:34:07.321 [DEBUG] [Thread-132624] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:34:07.321 [DEBUG] [Thread-132624] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:34:07.321 [DEBUG] [Thread-132624] [transport.py] [_log()] client lang: <none>
2025-12-31T18:34:07.322 [DEBUG] [Thread-132624] [transport.py] [_log()] server lang: <none>
2025-12-31T18:34:07.322 [DEBUG] [Thread-132624] [transport.py] [_log()] kex follows: False
2025-12-31T18:34:07.322 [DEBUG] [Thread-132624] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:34:07.322 [DEBUG] [Thread-132624] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:34:07.322 [DEBUG] [Thread-132624] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:34:07.322 [DEBUG] [Thread-132624] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:34:07.322 [DEBUG] [Thread-132624] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:34:07.322 [DEBUG] [Thread-132624] [transport.py] [_log()] Compression: none
2025-12-31T18:34:07.322 [DEBUG] [Thread-132624] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:34:07.340 [DEBUG] [Thread-132624] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:34:07.341 [DEBUG] [Thread-132624] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:34:07.341 [DEBUG] [Thread-132624] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T18:34:07.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T18:34:07.343 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:34:07.344 [DEBUG] [Thread-132624] [transport.py] [_log()] userauth is OK
2025-12-31T18:34:07.344 [DEBUG] [Thread-132624] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:34:07.344 [DEBUG] [Thread-132624] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:34:07.344 [DEBUG] [Thread-132624] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T18:34:07.344 [DEBUG] [Thread-132624] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:34:07.368 [INFO] [Thread-132624] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:34:07.368 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:34:08.019 [DEBUG] [Thread-132624] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:34:08.019 [DEBUG] [Thread-132624] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:34:08.020 [DEBUG] [Thread-132624] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T18:34:08.060 [DEBUG] [Thread-132624] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:34:08.060 [DEBUG] [Thread-132624] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:34:08.063 [DEBUG] [Thread-132624] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:34:08.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:34:08.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T18:34:08.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T18:34:08.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T18:34:08.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:34:08.086 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T18:34:08.086 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:34:08.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:34:08.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T18:34:08.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.689723 -999.00  +22.40  16.59     31   +4.60 1 2 1 1 1   887    0 14.74 -119.28 ----- 21.7 16.6 255.0 22.7 23.8 -22.6 23.8 -22.2 23.5 -21.0 23.6 -21.3
2025-12-31T18:34:08.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T18:34:08.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T18:34:08.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.689723
2025-12-31T18:34:08.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T18:34:08.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T18:34:08.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T18:34:08.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T18:34:08.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T18:34:08.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T18:33:43', tmtdew=20.58, humidity=25.66, cloud=0.0, wind=24.16, temperature=22.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T16:33:12.067', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T18:34:08.089 [DEBUG] [Thread-132624] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:34:08.173 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T18:34:08.186 [DEBUG] [Thread-132627] [transport.py] [_log()] starting thread (client mode): 0xb6bb8310
2025-12-31T18:34:08.186 [DEBUG] [Thread-132627] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:34:08.201 [DEBUG] [Thread-132627] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T18:34:08.201 [INFO] [Thread-132627] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T18:34:08.209 [DEBUG] [Thread-132627] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:34:08.209 [DEBUG] [Thread-132627] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T18:34:08.209 [DEBUG] [Thread-132627] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:34:08.209 [DEBUG] [Thread-132627] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:34:08.209 [DEBUG] [Thread-132627] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:34:08.209 [DEBUG] [Thread-132627] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:34:08.209 [DEBUG] [Thread-132627] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:34:08.209 [DEBUG] [Thread-132627] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:34:08.209 [DEBUG] [Thread-132627] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:34:08.209 [DEBUG] [Thread-132627] [transport.py] [_log()] client lang: <none>
2025-12-31T18:34:08.209 [DEBUG] [Thread-132627] [transport.py] [_log()] server lang: <none>
2025-12-31T18:34:08.209 [DEBUG] [Thread-132627] [transport.py] [_log()] kex follows: False
2025-12-31T18:34:08.209 [DEBUG] [Thread-132627] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:34:08.209 [DEBUG] [Thread-132627] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:34:08.209 [DEBUG] [Thread-132627] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:34:08.209 [DEBUG] [Thread-132627] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:34:08.209 [DEBUG] [Thread-132627] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:34:08.210 [DEBUG] [Thread-132627] [transport.py] [_log()] Compression: none
2025-12-31T18:34:08.210 [DEBUG] [Thread-132627] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:34:08.270 [DEBUG] [Thread-132627] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:34:08.270 [DEBUG] [Thread-132627] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:34:08.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T18:34:08.271 [DEBUG] [Thread-132627] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T18:34:08.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:34:08.329 [DEBUG] [Thread-132627] [transport.py] [_log()] userauth is OK
2025-12-31T18:34:08.329 [DEBUG] [Thread-132627] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:34:08.329 [DEBUG] [Thread-132627] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:34:08.329 [DEBUG] [Thread-132627] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T18:34:08.330 [DEBUG] [Thread-132627] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:34:08.348 [INFO] [Thread-132627] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:34:08.348 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T18:34:08.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:34:09.162 [DEBUG] [Thread-132627] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:34:09.162 [DEBUG] [Thread-132627] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:34:09.210 [DEBUG] [Thread-132627] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:34:09.210 [DEBUG] [Thread-132627] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:34:09.219 [DEBUG] [Thread-132627] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:34:09.228 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:34:09.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T18:34:09.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T18:34:09.246 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:34:09.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:34:09.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:34:09.255 [DEBUG] [Thread-132627] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:34:11.631 [DEBUG] [Thread-132629 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:34:26.682 [DEBUG] [Thread-132630 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:34:30.934 [DEBUG] [Thread-132631 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:34:33.916 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:34:33.918 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:34:39.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T18:34:39.272 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T18:34:39.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T18:34:39.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 18, 34, 15), 20.61, 25.61, 0.0, 21.72, 22.52, 0, 0, 0, 2, 0, 0),)
2025-12-31T18:34:39.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 18:34:15
2025-12-31T18:34:40.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T18:34:40.241 [DEBUG] [Thread-132632] [transport.py] [_log()] starting thread (client mode): 0xb95f3d60
2025-12-31T18:34:40.241 [DEBUG] [Thread-132632] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:34:40.261 [DEBUG] [Thread-132632] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T18:34:40.261 [INFO] [Thread-132632] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T18:34:40.264 [DEBUG] [Thread-132632] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:34:40.264 [DEBUG] [Thread-132632] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T18:34:40.264 [DEBUG] [Thread-132632] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:34:40.264 [DEBUG] [Thread-132632] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:34:40.264 [DEBUG] [Thread-132632] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:34:40.264 [DEBUG] [Thread-132632] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:34:40.264 [DEBUG] [Thread-132632] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:34:40.264 [DEBUG] [Thread-132632] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:34:40.264 [DEBUG] [Thread-132632] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:34:40.264 [DEBUG] [Thread-132632] [transport.py] [_log()] client lang: <none>
2025-12-31T18:34:40.264 [DEBUG] [Thread-132632] [transport.py] [_log()] server lang: <none>
2025-12-31T18:34:40.265 [DEBUG] [Thread-132632] [transport.py] [_log()] kex follows: False
2025-12-31T18:34:40.265 [DEBUG] [Thread-132632] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:34:40.265 [DEBUG] [Thread-132632] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:34:40.265 [DEBUG] [Thread-132632] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:34:40.265 [DEBUG] [Thread-132632] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:34:40.265 [DEBUG] [Thread-132632] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:34:40.265 [DEBUG] [Thread-132632] [transport.py] [_log()] Compression: none
2025-12-31T18:34:40.265 [DEBUG] [Thread-132632] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:34:40.282 [DEBUG] [Thread-132632] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:34:40.282 [DEBUG] [Thread-132632] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:34:40.283 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T18:34:40.283 [DEBUG] [Thread-132632] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T18:34:40.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:34:40.286 [DEBUG] [Thread-132632] [transport.py] [_log()] userauth is OK
2025-12-31T18:34:40.286 [DEBUG] [Thread-132632] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:34:40.286 [DEBUG] [Thread-132632] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:34:40.286 [DEBUG] [Thread-132632] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T18:34:40.286 [DEBUG] [Thread-132632] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:34:40.310 [INFO] [Thread-132632] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:34:40.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:34:41.071 [DEBUG] [Thread-132632] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:34:41.071 [DEBUG] [Thread-132632] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:34:41.072 [DEBUG] [Thread-132632] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T18:34:41.112 [DEBUG] [Thread-132632] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:34:41.112 [DEBUG] [Thread-132632] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:34:41.117 [DEBUG] [Thread-132632] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:34:41.128 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:34:41.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T18:34:41.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T18:34:41.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T18:34:41.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:34:41.139 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T18:34:41.140 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:34:41.140 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:34:41.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T18:34:41.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.690070 -999.00  +22.40  17.62     31   +4.50 1 2 1 1 1   887    0 14.58 -121.96 ----- 19.3 17.6 257.0 23.8 23.8 -22.4 23.8 -22.3 23.4 -21.0 23.7 -21.1
2025-12-31T18:34:41.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T18:34:41.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T18:34:41.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.690070
2025-12-31T18:34:41.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T18:34:41.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T18:34:41.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T18:34:41.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T18:34:41.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T18:34:41.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T18:34:15', tmtdew=20.61, humidity=25.61, cloud=0.0, wind=21.72, temperature=22.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T16:33:42.048', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T18:34:41.142 [DEBUG] [Thread-132632] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:34:41.225 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T18:34:41.237 [DEBUG] [Thread-132635] [transport.py] [_log()] starting thread (client mode): 0xb6bbb310
2025-12-31T18:34:41.237 [DEBUG] [Thread-132635] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:34:41.252 [DEBUG] [Thread-132635] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T18:34:41.252 [INFO] [Thread-132635] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T18:34:41.259 [DEBUG] [Thread-132635] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:34:41.260 [DEBUG] [Thread-132635] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T18:34:41.260 [DEBUG] [Thread-132635] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:34:41.260 [DEBUG] [Thread-132635] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:34:41.260 [DEBUG] [Thread-132635] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:34:41.260 [DEBUG] [Thread-132635] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:34:41.260 [DEBUG] [Thread-132635] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:34:41.260 [DEBUG] [Thread-132635] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:34:41.260 [DEBUG] [Thread-132635] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:34:41.261 [DEBUG] [Thread-132635] [transport.py] [_log()] client lang: <none>
2025-12-31T18:34:41.261 [DEBUG] [Thread-132635] [transport.py] [_log()] server lang: <none>
2025-12-31T18:34:41.261 [DEBUG] [Thread-132635] [transport.py] [_log()] kex follows: False
2025-12-31T18:34:41.261 [DEBUG] [Thread-132635] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:34:41.261 [DEBUG] [Thread-132635] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:34:41.261 [DEBUG] [Thread-132635] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:34:41.261 [DEBUG] [Thread-132635] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:34:41.261 [DEBUG] [Thread-132635] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:34:41.262 [DEBUG] [Thread-132635] [transport.py] [_log()] Compression: none
2025-12-31T18:34:41.262 [DEBUG] [Thread-132635] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:34:41.319 [DEBUG] [Thread-132635] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:34:41.320 [DEBUG] [Thread-132635] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:34:41.320 [DEBUG] [Thread-132635] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T18:34:41.320 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T18:34:41.321 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:34:41.375 [DEBUG] [Thread-132635] [transport.py] [_log()] userauth is OK
2025-12-31T18:34:41.375 [DEBUG] [Thread-132635] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:34:41.375 [DEBUG] [Thread-132635] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:34:41.375 [DEBUG] [Thread-132635] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T18:34:41.376 [DEBUG] [Thread-132635] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:34:41.394 [INFO] [Thread-132635] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:34:41.395 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T18:34:41.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:34:41.722 [DEBUG] [Thread-132637 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:34:42.227 [DEBUG] [Thread-132635] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:34:42.228 [DEBUG] [Thread-132635] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:34:42.276 [DEBUG] [Thread-132635] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:34:42.276 [DEBUG] [Thread-132635] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:34:42.286 [DEBUG] [Thread-132635] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:34:42.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:34:42.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T18:34:42.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T18:34:42.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:34:42.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:34:42.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:34:42.322 [DEBUG] [Thread-132635] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:34:56.774 [DEBUG] [Thread-132638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:35:11.805 [DEBUG] [Thread-132639 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:35:12.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T18:35:12.344 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T18:35:12.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T18:35:13.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 18, 34, 47), 20.63, 25.58, 0.0, 21.12, 22.49, 0, 0, 0, 2, 0, 0),)
2025-12-31T18:35:13.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 18:34:47
2025-12-31T18:35:13.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T18:35:13.331 [DEBUG] [Thread-132640] [transport.py] [_log()] starting thread (client mode): 0xb95d5120
2025-12-31T18:35:13.331 [DEBUG] [Thread-132640] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:35:13.351 [DEBUG] [Thread-132640] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T18:35:13.351 [INFO] [Thread-132640] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T18:35:13.355 [DEBUG] [Thread-132640] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:35:13.355 [DEBUG] [Thread-132640] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T18:35:13.355 [DEBUG] [Thread-132640] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:35:13.355 [DEBUG] [Thread-132640] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:35:13.355 [DEBUG] [Thread-132640] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:35:13.355 [DEBUG] [Thread-132640] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:35:13.355 [DEBUG] [Thread-132640] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:35:13.355 [DEBUG] [Thread-132640] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:35:13.355 [DEBUG] [Thread-132640] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:35:13.355 [DEBUG] [Thread-132640] [transport.py] [_log()] client lang: <none>
2025-12-31T18:35:13.355 [DEBUG] [Thread-132640] [transport.py] [_log()] server lang: <none>
2025-12-31T18:35:13.355 [DEBUG] [Thread-132640] [transport.py] [_log()] kex follows: False
2025-12-31T18:35:13.355 [DEBUG] [Thread-132640] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:35:13.355 [DEBUG] [Thread-132640] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:35:13.355 [DEBUG] [Thread-132640] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:35:13.355 [DEBUG] [Thread-132640] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:35:13.356 [DEBUG] [Thread-132640] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:35:13.356 [DEBUG] [Thread-132640] [transport.py] [_log()] Compression: none
2025-12-31T18:35:13.356 [DEBUG] [Thread-132640] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:35:13.372 [DEBUG] [Thread-132640] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:35:13.372 [DEBUG] [Thread-132640] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:35:13.373 [DEBUG] [Thread-132640] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T18:35:13.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T18:35:13.374 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:35:13.375 [DEBUG] [Thread-132640] [transport.py] [_log()] userauth is OK
2025-12-31T18:35:13.375 [DEBUG] [Thread-132640] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:35:13.375 [DEBUG] [Thread-132640] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:35:13.375 [DEBUG] [Thread-132640] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T18:35:13.375 [DEBUG] [Thread-132640] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:35:13.393 [INFO] [Thread-132640] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:35:13.394 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:35:15.699 [DEBUG] [Thread-132640] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:35:15.699 [DEBUG] [Thread-132640] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:35:15.700 [DEBUG] [Thread-132640] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T18:35:15.741 [DEBUG] [Thread-132640] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:35:15.742 [DEBUG] [Thread-132640] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:35:15.744 [DEBUG] [Thread-132640] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:35:15.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:35:15.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T18:35:15.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T18:35:15.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T18:35:15.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:35:15.813 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T18:35:15.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:35:15.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:35:15.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T18:35:15.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.690418 -999.00  +22.40  12.02     31   +4.50 1 2 1 1 1   887    0 14.66 -132.86 ----- 17.2 12.0 256.0 27.0 23.8 -22.5 23.8 -22.1 23.4 -20.9 23.6 -21.2
2025-12-31T18:35:15.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T18:35:15.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T18:35:15.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.690418
2025-12-31T18:35:15.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T18:35:15.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T18:35:15.815 [DEBUG] [Thread-132640] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:35:15.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T18:35:15.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T18:35:15.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T18:35:15.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T18:34:47', tmtdew=20.63, humidity=25.58, cloud=0.0, wind=21.12, temperature=22.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T16:34:12.115', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T18:35:15.903 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T18:35:15.916 [DEBUG] [Thread-132643] [transport.py] [_log()] starting thread (client mode): 0xb95d4f70
2025-12-31T18:35:15.916 [DEBUG] [Thread-132643] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:35:15.930 [DEBUG] [Thread-132643] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T18:35:15.931 [INFO] [Thread-132643] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T18:35:15.938 [DEBUG] [Thread-132643] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:35:15.938 [DEBUG] [Thread-132643] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T18:35:15.938 [DEBUG] [Thread-132643] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:35:15.938 [DEBUG] [Thread-132643] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:35:15.938 [DEBUG] [Thread-132643] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:35:15.938 [DEBUG] [Thread-132643] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:35:15.938 [DEBUG] [Thread-132643] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:35:15.938 [DEBUG] [Thread-132643] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:35:15.938 [DEBUG] [Thread-132643] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:35:15.938 [DEBUG] [Thread-132643] [transport.py] [_log()] client lang: <none>
2025-12-31T18:35:15.938 [DEBUG] [Thread-132643] [transport.py] [_log()] server lang: <none>
2025-12-31T18:35:15.938 [DEBUG] [Thread-132643] [transport.py] [_log()] kex follows: False
2025-12-31T18:35:15.938 [DEBUG] [Thread-132643] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:35:15.939 [DEBUG] [Thread-132643] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:35:15.939 [DEBUG] [Thread-132643] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:35:15.939 [DEBUG] [Thread-132643] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:35:15.939 [DEBUG] [Thread-132643] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:35:15.939 [DEBUG] [Thread-132643] [transport.py] [_log()] Compression: none
2025-12-31T18:35:15.939 [DEBUG] [Thread-132643] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:35:15.996 [DEBUG] [Thread-132643] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:35:15.996 [DEBUG] [Thread-132643] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:35:15.997 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T18:35:15.997 [DEBUG] [Thread-132643] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T18:35:15.998 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:35:16.052 [DEBUG] [Thread-132643] [transport.py] [_log()] userauth is OK
2025-12-31T18:35:16.053 [DEBUG] [Thread-132643] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:35:16.053 [DEBUG] [Thread-132643] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:35:16.053 [DEBUG] [Thread-132643] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T18:35:16.053 [DEBUG] [Thread-132643] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:35:16.072 [INFO] [Thread-132643] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:35:16.072 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T18:35:16.073 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:35:16.922 [DEBUG] [Thread-132643] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:35:16.922 [DEBUG] [Thread-132643] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:35:16.969 [DEBUG] [Thread-132643] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:35:16.970 [DEBUG] [Thread-132643] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:35:16.978 [DEBUG] [Thread-132643] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:35:16.987 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:35:16.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T18:35:16.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-12-31T18:35:17.004 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:35:17.004 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:35:17.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:35:17.012 [DEBUG] [Thread-132643] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:35:26.841 [DEBUG] [Thread-132645 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:35:30.995 [DEBUG] [Thread-132646 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:35:34.057 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:35:34.058 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:35:41.890 [DEBUG] [Thread-132647 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:35:47.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T18:35:47.033 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T18:35:47.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T18:35:47.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 18, 35, 19), 20.63, 25.58, 0.0, 21.28, 22.54, 0, 0, 0, 2, 0, 0),)
2025-12-31T18:35:47.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 18:35:19
2025-12-31T18:35:47.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T18:35:48.015 [DEBUG] [Thread-132648] [transport.py] [_log()] starting thread (client mode): 0xb955b7c0
2025-12-31T18:35:48.016 [DEBUG] [Thread-132648] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:35:48.036 [DEBUG] [Thread-132648] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T18:35:48.036 [INFO] [Thread-132648] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T18:35:48.039 [DEBUG] [Thread-132648] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:35:48.039 [DEBUG] [Thread-132648] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T18:35:48.039 [DEBUG] [Thread-132648] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:35:48.039 [DEBUG] [Thread-132648] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:35:48.039 [DEBUG] [Thread-132648] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:35:48.039 [DEBUG] [Thread-132648] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:35:48.039 [DEBUG] [Thread-132648] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:35:48.039 [DEBUG] [Thread-132648] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:35:48.039 [DEBUG] [Thread-132648] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:35:48.039 [DEBUG] [Thread-132648] [transport.py] [_log()] client lang: <none>
2025-12-31T18:35:48.039 [DEBUG] [Thread-132648] [transport.py] [_log()] server lang: <none>
2025-12-31T18:35:48.039 [DEBUG] [Thread-132648] [transport.py] [_log()] kex follows: False
2025-12-31T18:35:48.039 [DEBUG] [Thread-132648] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:35:48.039 [DEBUG] [Thread-132648] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:35:48.039 [DEBUG] [Thread-132648] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:35:48.039 [DEBUG] [Thread-132648] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:35:48.039 [DEBUG] [Thread-132648] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:35:48.039 [DEBUG] [Thread-132648] [transport.py] [_log()] Compression: none
2025-12-31T18:35:48.040 [DEBUG] [Thread-132648] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:35:48.048 [DEBUG] [Thread-132648] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:35:48.048 [DEBUG] [Thread-132648] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:35:48.049 [DEBUG] [Thread-132648] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T18:35:48.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T18:35:48.050 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:35:48.051 [DEBUG] [Thread-132648] [transport.py] [_log()] userauth is OK
2025-12-31T18:35:48.051 [DEBUG] [Thread-132648] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:35:48.051 [DEBUG] [Thread-132648] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:35:48.051 [DEBUG] [Thread-132648] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T18:35:48.051 [DEBUG] [Thread-132648] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:35:48.086 [INFO] [Thread-132648] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:35:48.087 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:35:48.660 [DEBUG] [Thread-132648] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:35:48.661 [DEBUG] [Thread-132648] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:35:48.661 [DEBUG] [Thread-132648] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T18:35:48.701 [DEBUG] [Thread-132648] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:35:48.701 [DEBUG] [Thread-132648] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:35:48.706 [DEBUG] [Thread-132648] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:35:48.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:35:48.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T18:35:48.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T18:35:48.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T18:35:48.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:35:48.726 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T18:35:48.726 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:35:48.726 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:35:48.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T18:35:48.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.691112 -999.00  +22.50  23.64     31   +4.60 1 2 1 1 1   887    0 14.45 -131.75 ----- 24.8 23.6 264.8 33.9 23.8 -22.3 23.8 -22.0 23.5 -20.9 23.7 -21.1
2025-12-31T18:35:48.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T18:35:48.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T18:35:48.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.691112
2025-12-31T18:35:48.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T18:35:48.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T18:35:48.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T18:35:48.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T18:35:48.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T18:35:48.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T18:35:19', tmtdew=20.63, humidity=25.58, cloud=0.0, wind=21.28, temperature=22.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T16:35:12.077', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T18:35:48.727 [DEBUG] [Thread-132648] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:35:48.808 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T18:35:48.821 [DEBUG] [Thread-132651] [transport.py] [_log()] starting thread (client mode): 0xb955beb0
2025-12-31T18:35:48.821 [DEBUG] [Thread-132651] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:35:48.838 [DEBUG] [Thread-132651] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T18:35:48.838 [INFO] [Thread-132651] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T18:35:48.846 [DEBUG] [Thread-132651] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:35:48.846 [DEBUG] [Thread-132651] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T18:35:48.846 [DEBUG] [Thread-132651] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:35:48.846 [DEBUG] [Thread-132651] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:35:48.846 [DEBUG] [Thread-132651] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:35:48.846 [DEBUG] [Thread-132651] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:35:48.846 [DEBUG] [Thread-132651] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:35:48.846 [DEBUG] [Thread-132651] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:35:48.846 [DEBUG] [Thread-132651] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:35:48.846 [DEBUG] [Thread-132651] [transport.py] [_log()] client lang: <none>
2025-12-31T18:35:48.846 [DEBUG] [Thread-132651] [transport.py] [_log()] server lang: <none>
2025-12-31T18:35:48.846 [DEBUG] [Thread-132651] [transport.py] [_log()] kex follows: False
2025-12-31T18:35:48.847 [DEBUG] [Thread-132651] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:35:48.847 [DEBUG] [Thread-132651] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:35:48.847 [DEBUG] [Thread-132651] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:35:48.847 [DEBUG] [Thread-132651] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:35:48.847 [DEBUG] [Thread-132651] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:35:48.847 [DEBUG] [Thread-132651] [transport.py] [_log()] Compression: none
2025-12-31T18:35:48.847 [DEBUG] [Thread-132651] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:35:48.907 [DEBUG] [Thread-132651] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:35:48.907 [DEBUG] [Thread-132651] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:35:48.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T18:35:48.908 [DEBUG] [Thread-132651] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T18:35:48.909 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:35:48.962 [DEBUG] [Thread-132651] [transport.py] [_log()] userauth is OK
2025-12-31T18:35:48.963 [DEBUG] [Thread-132651] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:35:48.963 [DEBUG] [Thread-132651] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:35:48.963 [DEBUG] [Thread-132651] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T18:35:48.963 [DEBUG] [Thread-132651] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:35:48.984 [INFO] [Thread-132651] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:35:48.984 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T18:35:48.984 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:35:49.842 [DEBUG] [Thread-132651] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:35:49.842 [DEBUG] [Thread-132651] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:35:49.890 [DEBUG] [Thread-132651] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:35:49.890 [DEBUG] [Thread-132651] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:35:49.899 [DEBUG] [Thread-132651] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:35:49.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:35:49.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T18:35:49.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T18:35:49.927 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:35:49.927 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:35:49.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:35:49.935 [DEBUG] [Thread-132651] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:35:56.925 [DEBUG] [Thread-132653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:36:11.985 [DEBUG] [Thread-132654 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:36:19.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T18:36:19.958 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T18:36:19.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T18:36:20.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 18, 35, 51), 20.69, 25.5, 0.0, 25.36, 22.6, 0, 0, 0, 2, 0, 0),)
2025-12-31T18:36:20.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 18:35:51
2025-12-31T18:36:20.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T18:36:20.962 [DEBUG] [Thread-132655] [transport.py] [_log()] starting thread (client mode): 0xb9559a50
2025-12-31T18:36:20.962 [DEBUG] [Thread-132655] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:36:20.982 [DEBUG] [Thread-132655] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T18:36:20.982 [INFO] [Thread-132655] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T18:36:20.985 [DEBUG] [Thread-132655] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:36:20.985 [DEBUG] [Thread-132655] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T18:36:20.985 [DEBUG] [Thread-132655] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:36:20.985 [DEBUG] [Thread-132655] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:36:20.985 [DEBUG] [Thread-132655] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:36:20.985 [DEBUG] [Thread-132655] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:36:20.985 [DEBUG] [Thread-132655] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:36:20.985 [DEBUG] [Thread-132655] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:36:20.985 [DEBUG] [Thread-132655] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:36:20.985 [DEBUG] [Thread-132655] [transport.py] [_log()] client lang: <none>
2025-12-31T18:36:20.985 [DEBUG] [Thread-132655] [transport.py] [_log()] server lang: <none>
2025-12-31T18:36:20.985 [DEBUG] [Thread-132655] [transport.py] [_log()] kex follows: False
2025-12-31T18:36:20.985 [DEBUG] [Thread-132655] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:36:20.985 [DEBUG] [Thread-132655] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:36:20.985 [DEBUG] [Thread-132655] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:36:20.985 [DEBUG] [Thread-132655] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:36:20.985 [DEBUG] [Thread-132655] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:36:20.986 [DEBUG] [Thread-132655] [transport.py] [_log()] Compression: none
2025-12-31T18:36:20.986 [DEBUG] [Thread-132655] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:36:21.004 [DEBUG] [Thread-132655] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:36:21.005 [DEBUG] [Thread-132655] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:36:21.005 [DEBUG] [Thread-132655] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T18:36:21.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T18:36:21.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:36:21.007 [DEBUG] [Thread-132655] [transport.py] [_log()] userauth is OK
2025-12-31T18:36:21.007 [DEBUG] [Thread-132655] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:36:21.008 [DEBUG] [Thread-132655] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:36:21.008 [DEBUG] [Thread-132655] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T18:36:21.008 [DEBUG] [Thread-132655] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:36:21.032 [INFO] [Thread-132655] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:36:21.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:36:21.792 [DEBUG] [Thread-132655] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:36:21.792 [DEBUG] [Thread-132655] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:36:21.793 [DEBUG] [Thread-132655] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T18:36:21.833 [DEBUG] [Thread-132655] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:36:21.833 [DEBUG] [Thread-132655] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:36:21.836 [DEBUG] [Thread-132655] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:36:21.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:36:21.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T18:36:21.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T18:36:21.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T18:36:21.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:36:21.853 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T18:36:21.853 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:36:21.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:36:21.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T18:36:21.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.691459 -999.00  +22.50  13.87     31   +4.60 1 2 1 1 1   887    0 14.68 -125.86 ----- 20.7 13.9 281.4 25.6 23.7 -22.5 23.7 -22.1 23.4 -20.8 23.6 -21.0
2025-12-31T18:36:21.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T18:36:21.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T18:36:21.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.691459
2025-12-31T18:36:21.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T18:36:21.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T18:36:21.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T18:36:21.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T18:36:21.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T18:36:21.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T18:35:51', tmtdew=20.69, humidity=25.5, cloud=0.0, wind=25.36, temperature=22.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T16:35:42.058', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T18:36:21.856 [DEBUG] [Thread-132655] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:36:21.941 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T18:36:21.954 [DEBUG] [Thread-132658] [transport.py] [_log()] starting thread (client mode): 0xb95f0700
2025-12-31T18:36:21.955 [DEBUG] [Thread-132658] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:36:21.971 [DEBUG] [Thread-132658] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T18:36:21.971 [INFO] [Thread-132658] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T18:36:21.979 [DEBUG] [Thread-132658] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:36:21.980 [DEBUG] [Thread-132658] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T18:36:21.980 [DEBUG] [Thread-132658] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:36:21.980 [DEBUG] [Thread-132658] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:36:21.980 [DEBUG] [Thread-132658] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:36:21.980 [DEBUG] [Thread-132658] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:36:21.980 [DEBUG] [Thread-132658] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:36:21.980 [DEBUG] [Thread-132658] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:36:21.980 [DEBUG] [Thread-132658] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:36:21.981 [DEBUG] [Thread-132658] [transport.py] [_log()] client lang: <none>
2025-12-31T18:36:21.981 [DEBUG] [Thread-132658] [transport.py] [_log()] server lang: <none>
2025-12-31T18:36:21.981 [DEBUG] [Thread-132658] [transport.py] [_log()] kex follows: False
2025-12-31T18:36:21.981 [DEBUG] [Thread-132658] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:36:21.981 [DEBUG] [Thread-132658] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:36:21.981 [DEBUG] [Thread-132658] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:36:21.981 [DEBUG] [Thread-132658] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:36:21.981 [DEBUG] [Thread-132658] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:36:21.982 [DEBUG] [Thread-132658] [transport.py] [_log()] Compression: none
2025-12-31T18:36:21.982 [DEBUG] [Thread-132658] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:36:22.041 [DEBUG] [Thread-132658] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:36:22.041 [DEBUG] [Thread-132658] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:36:22.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T18:36:22.043 [DEBUG] [Thread-132658] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T18:36:22.044 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:36:22.102 [DEBUG] [Thread-132658] [transport.py] [_log()] userauth is OK
2025-12-31T18:36:22.102 [DEBUG] [Thread-132658] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:36:22.102 [DEBUG] [Thread-132658] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:36:22.102 [DEBUG] [Thread-132658] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T18:36:22.102 [DEBUG] [Thread-132658] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:36:22.121 [INFO] [Thread-132658] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:36:22.122 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T18:36:22.122 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:36:22.966 [DEBUG] [Thread-132658] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:36:22.966 [DEBUG] [Thread-132658] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:36:23.014 [DEBUG] [Thread-132658] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:36:23.014 [DEBUG] [Thread-132658] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:36:23.024 [DEBUG] [Thread-132658] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:36:23.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:36:23.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T18:36:23.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T18:36:23.051 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:36:23.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:36:23.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:36:23.060 [DEBUG] [Thread-132658] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:36:27.016 [DEBUG] [Thread-132660 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:36:31.061 [DEBUG] [Thread-132661 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:36:34.197 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:36:34.199 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:36:42.069 [DEBUG] [Thread-132662 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:36:53.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T18:36:53.083 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T18:36:53.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T18:36:53.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 18, 36, 24), 20.73, 25.43, 0.0, 27.49, 22.62, 0, 0, 0, 2, 0, 0),)
2025-12-31T18:36:53.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 18:36:24
2025-12-31T18:36:53.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T18:36:54.125 [DEBUG] [Thread-132663] [transport.py] [_log()] starting thread (client mode): 0xb17467d0
2025-12-31T18:36:54.126 [DEBUG] [Thread-132663] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:36:54.146 [DEBUG] [Thread-132663] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T18:36:54.146 [INFO] [Thread-132663] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T18:36:54.147 [DEBUG] [Thread-132663] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:36:54.147 [DEBUG] [Thread-132663] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T18:36:54.147 [DEBUG] [Thread-132663] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:36:54.147 [DEBUG] [Thread-132663] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:36:54.147 [DEBUG] [Thread-132663] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:36:54.147 [DEBUG] [Thread-132663] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:36:54.147 [DEBUG] [Thread-132663] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:36:54.147 [DEBUG] [Thread-132663] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:36:54.147 [DEBUG] [Thread-132663] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:36:54.147 [DEBUG] [Thread-132663] [transport.py] [_log()] client lang: <none>
2025-12-31T18:36:54.147 [DEBUG] [Thread-132663] [transport.py] [_log()] server lang: <none>
2025-12-31T18:36:54.147 [DEBUG] [Thread-132663] [transport.py] [_log()] kex follows: False
2025-12-31T18:36:54.147 [DEBUG] [Thread-132663] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:36:54.147 [DEBUG] [Thread-132663] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:36:54.147 [DEBUG] [Thread-132663] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:36:54.147 [DEBUG] [Thread-132663] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:36:54.148 [DEBUG] [Thread-132663] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:36:54.148 [DEBUG] [Thread-132663] [transport.py] [_log()] Compression: none
2025-12-31T18:36:54.148 [DEBUG] [Thread-132663] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:36:54.165 [DEBUG] [Thread-132663] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:36:54.166 [DEBUG] [Thread-132663] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:36:54.166 [DEBUG] [Thread-132663] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T18:36:54.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T18:36:54.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:36:54.166 [DEBUG] [Thread-132663] [transport.py] [_log()] userauth is OK
2025-12-31T18:36:54.166 [DEBUG] [Thread-132663] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:36:54.166 [DEBUG] [Thread-132663] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:36:54.166 [DEBUG] [Thread-132663] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T18:36:54.166 [DEBUG] [Thread-132663] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:36:54.176 [INFO] [Thread-132663] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:36:54.176 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:36:54.822 [DEBUG] [Thread-132663] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:36:54.822 [DEBUG] [Thread-132663] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:36:54.822 [DEBUG] [Thread-132663] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T18:36:54.863 [DEBUG] [Thread-132663] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:36:54.863 [DEBUG] [Thread-132663] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:36:54.866 [DEBUG] [Thread-132663] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:36:54.879 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:36:54.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T18:36:54.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T18:36:54.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T18:36:54.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:36:54.886 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T18:36:54.886 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:36:54.886 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:36:54.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T18:36:54.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.691807 -999.00  +22.40  25.34     31   +4.60 1 2 1 1 1   887    0 15.09 -122.99 ----- 24.1 25.3 277.8 31.4 23.7 -22.4 23.7 -22.3 23.4 -22.0 23.6 -21.0
2025-12-31T18:36:54.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T18:36:54.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T18:36:54.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.691807
2025-12-31T18:36:54.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T18:36:54.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T18:36:54.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T18:36:54.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T18:36:54.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T18:36:54.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T18:36:24', tmtdew=20.73, humidity=25.43, cloud=0.0, wind=27.49, temperature=22.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T16:36:12.125', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T18:36:54.888 [DEBUG] [Thread-132663] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:36:54.962 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T18:36:54.974 [DEBUG] [Thread-132666] [transport.py] [_log()] starting thread (client mode): 0xb9558ca0
2025-12-31T18:36:54.974 [DEBUG] [Thread-132666] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:36:54.988 [DEBUG] [Thread-132666] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T18:36:54.989 [INFO] [Thread-132666] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T18:36:54.996 [DEBUG] [Thread-132666] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:36:54.996 [DEBUG] [Thread-132666] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T18:36:54.996 [DEBUG] [Thread-132666] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:36:54.996 [DEBUG] [Thread-132666] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:36:54.996 [DEBUG] [Thread-132666] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:36:54.996 [DEBUG] [Thread-132666] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:36:54.996 [DEBUG] [Thread-132666] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:36:54.996 [DEBUG] [Thread-132666] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:36:54.996 [DEBUG] [Thread-132666] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:36:54.996 [DEBUG] [Thread-132666] [transport.py] [_log()] client lang: <none>
2025-12-31T18:36:54.996 [DEBUG] [Thread-132666] [transport.py] [_log()] server lang: <none>
2025-12-31T18:36:54.996 [DEBUG] [Thread-132666] [transport.py] [_log()] kex follows: False
2025-12-31T18:36:54.996 [DEBUG] [Thread-132666] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:36:54.996 [DEBUG] [Thread-132666] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:36:54.996 [DEBUG] [Thread-132666] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:36:54.996 [DEBUG] [Thread-132666] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:36:54.996 [DEBUG] [Thread-132666] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:36:54.997 [DEBUG] [Thread-132666] [transport.py] [_log()] Compression: none
2025-12-31T18:36:54.997 [DEBUG] [Thread-132666] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:36:55.053 [DEBUG] [Thread-132666] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:36:55.053 [DEBUG] [Thread-132666] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:36:55.053 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T18:36:55.053 [DEBUG] [Thread-132666] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T18:36:55.053 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:36:55.109 [DEBUG] [Thread-132666] [transport.py] [_log()] userauth is OK
2025-12-31T18:36:55.109 [DEBUG] [Thread-132666] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:36:55.109 [DEBUG] [Thread-132666] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:36:55.109 [DEBUG] [Thread-132666] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T18:36:55.109 [DEBUG] [Thread-132666] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:36:55.123 [INFO] [Thread-132666] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:36:55.123 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T18:36:55.123 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:36:55.942 [DEBUG] [Thread-132666] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:36:55.942 [DEBUG] [Thread-132666] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:36:55.990 [DEBUG] [Thread-132666] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:36:55.990 [DEBUG] [Thread-132666] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:36:55.998 [DEBUG] [Thread-132666] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:36:56.006 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:36:56.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-12-31T18:36:56.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-12-31T18:36:56.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:36:56.022 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:36:56.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:36:56.030 [DEBUG] [Thread-132666] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:36:57.102 [DEBUG] [Thread-132668 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:37:12.145 [DEBUG] [Thread-132669 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:37:26.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T18:37:26.052 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T18:37:26.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T18:37:26.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 18, 36, 56), 20.8, 25.42, 0.0, 21.14, 22.72, 0, 0, 0, 2, 0, 0),)
2025-12-31T18:37:26.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 18:36:56
2025-12-31T18:37:26.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T18:37:27.048 [DEBUG] [Thread-132670] [transport.py] [_log()] starting thread (client mode): 0xb9592860
2025-12-31T18:37:27.048 [DEBUG] [Thread-132670] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:37:27.068 [DEBUG] [Thread-132670] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T18:37:27.068 [INFO] [Thread-132670] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T18:37:27.072 [DEBUG] [Thread-132670] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:37:27.072 [DEBUG] [Thread-132670] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T18:37:27.072 [DEBUG] [Thread-132670] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:37:27.072 [DEBUG] [Thread-132670] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:37:27.072 [DEBUG] [Thread-132670] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:37:27.072 [DEBUG] [Thread-132670] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:37:27.072 [DEBUG] [Thread-132670] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:37:27.072 [DEBUG] [Thread-132670] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:37:27.072 [DEBUG] [Thread-132670] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:37:27.072 [DEBUG] [Thread-132670] [transport.py] [_log()] client lang: <none>
2025-12-31T18:37:27.072 [DEBUG] [Thread-132670] [transport.py] [_log()] server lang: <none>
2025-12-31T18:37:27.072 [DEBUG] [Thread-132670] [transport.py] [_log()] kex follows: False
2025-12-31T18:37:27.072 [DEBUG] [Thread-132670] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:37:27.072 [DEBUG] [Thread-132670] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:37:27.072 [DEBUG] [Thread-132670] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:37:27.072 [DEBUG] [Thread-132670] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:37:27.073 [DEBUG] [Thread-132670] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:37:27.073 [DEBUG] [Thread-132670] [transport.py] [_log()] Compression: none
2025-12-31T18:37:27.073 [DEBUG] [Thread-132670] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:37:27.092 [DEBUG] [Thread-132670] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:37:27.092 [DEBUG] [Thread-132670] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:37:27.093 [DEBUG] [Thread-132670] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T18:37:27.093 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T18:37:27.093 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:37:27.094 [DEBUG] [Thread-132670] [transport.py] [_log()] userauth is OK
2025-12-31T18:37:27.095 [DEBUG] [Thread-132670] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:37:27.095 [DEBUG] [Thread-132670] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:37:27.095 [DEBUG] [Thread-132670] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T18:37:27.095 [DEBUG] [Thread-132670] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:37:27.112 [INFO] [Thread-132670] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:37:27.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:37:27.178 [DEBUG] [Thread-132672 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:37:27.865 [DEBUG] [Thread-132670] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:37:27.866 [DEBUG] [Thread-132670] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:37:27.866 [DEBUG] [Thread-132670] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T18:37:27.907 [DEBUG] [Thread-132670] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:37:27.907 [DEBUG] [Thread-132670] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:37:27.909 [DEBUG] [Thread-132670] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:37:27.916 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:37:27.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T18:37:27.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T18:37:27.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T18:37:27.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:37:27.923 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T18:37:27.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:37:27.923 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:37:27.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T18:37:27.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.692154 -999.00  +22.40  18.24     31   +4.60 1 2 1 1 1   887    0 15.09 -119.15 ----- 13.1 18.2 281.2 29.1 23.7 -22.7 23.7 -22.1 23.3 -21.4 23.6 -20.8
2025-12-31T18:37:27.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T18:37:27.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T18:37:27.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.692154
2025-12-31T18:37:27.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T18:37:27.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T18:37:27.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T18:37:27.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T18:37:27.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T18:37:27.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T18:36:56', tmtdew=20.8, humidity=25.42, cloud=0.0, wind=21.14, temperature=22.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T16:36:42.106', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T18:37:27.924 [DEBUG] [Thread-132670] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:37:27.995 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T18:37:28.008 [DEBUG] [Thread-132674] [transport.py] [_log()] starting thread (client mode): 0xb95594b0
2025-12-31T18:37:28.008 [DEBUG] [Thread-132674] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:37:28.023 [DEBUG] [Thread-132674] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T18:37:28.023 [INFO] [Thread-132674] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T18:37:28.031 [DEBUG] [Thread-132674] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:37:28.031 [DEBUG] [Thread-132674] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T18:37:28.031 [DEBUG] [Thread-132674] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:37:28.031 [DEBUG] [Thread-132674] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:37:28.031 [DEBUG] [Thread-132674] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:37:28.031 [DEBUG] [Thread-132674] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:37:28.031 [DEBUG] [Thread-132674] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:37:28.031 [DEBUG] [Thread-132674] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:37:28.031 [DEBUG] [Thread-132674] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:37:28.031 [DEBUG] [Thread-132674] [transport.py] [_log()] client lang: <none>
2025-12-31T18:37:28.031 [DEBUG] [Thread-132674] [transport.py] [_log()] server lang: <none>
2025-12-31T18:37:28.032 [DEBUG] [Thread-132674] [transport.py] [_log()] kex follows: False
2025-12-31T18:37:28.032 [DEBUG] [Thread-132674] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:37:28.032 [DEBUG] [Thread-132674] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:37:28.032 [DEBUG] [Thread-132674] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:37:28.032 [DEBUG] [Thread-132674] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:37:28.032 [DEBUG] [Thread-132674] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:37:28.032 [DEBUG] [Thread-132674] [transport.py] [_log()] Compression: none
2025-12-31T18:37:28.032 [DEBUG] [Thread-132674] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:37:28.094 [DEBUG] [Thread-132674] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:37:28.095 [DEBUG] [Thread-132674] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:37:28.095 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T18:37:28.095 [DEBUG] [Thread-132674] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T18:37:28.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:37:28.150 [DEBUG] [Thread-132674] [transport.py] [_log()] userauth is OK
2025-12-31T18:37:28.150 [DEBUG] [Thread-132674] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:37:28.151 [DEBUG] [Thread-132674] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:37:28.151 [DEBUG] [Thread-132674] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T18:37:28.151 [DEBUG] [Thread-132674] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:37:28.174 [INFO] [Thread-132674] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:37:28.174 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T18:37:28.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:37:29.023 [DEBUG] [Thread-132674] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:37:29.023 [DEBUG] [Thread-132674] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:37:29.071 [DEBUG] [Thread-132674] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:37:29.071 [DEBUG] [Thread-132674] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:37:29.079 [DEBUG] [Thread-132674] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:37:29.087 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:37:29.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T18:37:29.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T18:37:29.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:37:29.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:37:29.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:37:29.111 [DEBUG] [Thread-132674] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:37:31.124 [DEBUG] [Thread-132676 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:37:34.337 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:37:34.338 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:37:42.209 [DEBUG] [Thread-132677 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:37:57.268 [DEBUG] [Thread-132678 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:37:59.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T18:37:59.121 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T18:37:59.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T18:37:59.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 18, 37, 28), 20.76, 25.48, 0.0, 16.76, 22.7, 0, 0, 0, 2, 0, 0),)
2025-12-31T18:37:59.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 18:37:28
2025-12-31T18:37:59.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T18:38:00.114 [DEBUG] [Thread-132679] [transport.py] [_log()] starting thread (client mode): 0xb9591450
2025-12-31T18:38:00.114 [DEBUG] [Thread-132679] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:38:00.134 [DEBUG] [Thread-132679] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T18:38:00.135 [INFO] [Thread-132679] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T18:38:00.137 [DEBUG] [Thread-132679] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:38:00.137 [DEBUG] [Thread-132679] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T18:38:00.137 [DEBUG] [Thread-132679] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:38:00.137 [DEBUG] [Thread-132679] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:38:00.137 [DEBUG] [Thread-132679] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:38:00.137 [DEBUG] [Thread-132679] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:38:00.137 [DEBUG] [Thread-132679] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:38:00.137 [DEBUG] [Thread-132679] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:38:00.137 [DEBUG] [Thread-132679] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:38:00.137 [DEBUG] [Thread-132679] [transport.py] [_log()] client lang: <none>
2025-12-31T18:38:00.137 [DEBUG] [Thread-132679] [transport.py] [_log()] server lang: <none>
2025-12-31T18:38:00.137 [DEBUG] [Thread-132679] [transport.py] [_log()] kex follows: False
2025-12-31T18:38:00.138 [DEBUG] [Thread-132679] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:38:00.138 [DEBUG] [Thread-132679] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:38:00.138 [DEBUG] [Thread-132679] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:38:00.138 [DEBUG] [Thread-132679] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:38:00.138 [DEBUG] [Thread-132679] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:38:00.138 [DEBUG] [Thread-132679] [transport.py] [_log()] Compression: none
2025-12-31T18:38:00.138 [DEBUG] [Thread-132679] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:38:00.154 [DEBUG] [Thread-132679] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:38:00.155 [DEBUG] [Thread-132679] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:38:00.155 [DEBUG] [Thread-132679] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T18:38:00.156 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T18:38:00.156 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:38:00.157 [DEBUG] [Thread-132679] [transport.py] [_log()] userauth is OK
2025-12-31T18:38:00.157 [DEBUG] [Thread-132679] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:38:00.157 [DEBUG] [Thread-132679] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:38:00.157 [DEBUG] [Thread-132679] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T18:38:00.158 [DEBUG] [Thread-132679] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:38:00.181 [INFO] [Thread-132679] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:38:00.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:38:00.838 [DEBUG] [Thread-132679] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:38:00.838 [DEBUG] [Thread-132679] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:38:00.838 [DEBUG] [Thread-132679] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T18:38:00.878 [DEBUG] [Thread-132679] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:38:00.878 [DEBUG] [Thread-132679] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:38:00.881 [DEBUG] [Thread-132679] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:38:00.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:38:00.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T18:38:00.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T18:38:00.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T18:38:00.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:38:00.899 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T18:38:00.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:38:00.899 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:38:00.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T18:38:00.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.692501 -999.00  +22.50  14.05     31   +4.60 1 2 1 1 1   887    0 15.12 -119.15 ----- 17.9 14.1 275.2 18.5 23.7 -22.0 23.7 -21.9 23.4 -20.8 23.7 -20.7
2025-12-31T18:38:00.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T18:38:00.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T18:38:00.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.692501
2025-12-31T18:38:00.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T18:38:00.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T18:38:00.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T18:38:00.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T18:38:00.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T18:38:00.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T18:37:28', tmtdew=20.76, humidity=25.48, cloud=0.0, wind=16.76, temperature=22.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T16:37:12.086', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T18:38:00.900 [DEBUG] [Thread-132679] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:38:00.974 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T18:38:00.986 [DEBUG] [Thread-132682] [transport.py] [_log()] starting thread (client mode): 0xb1746da0
2025-12-31T18:38:00.986 [DEBUG] [Thread-132682] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:38:01.000 [DEBUG] [Thread-132682] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T18:38:01.000 [INFO] [Thread-132682] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T18:38:01.008 [DEBUG] [Thread-132682] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:38:01.008 [DEBUG] [Thread-132682] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T18:38:01.008 [DEBUG] [Thread-132682] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:38:01.008 [DEBUG] [Thread-132682] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:38:01.008 [DEBUG] [Thread-132682] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:38:01.008 [DEBUG] [Thread-132682] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:38:01.008 [DEBUG] [Thread-132682] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:38:01.008 [DEBUG] [Thread-132682] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:38:01.008 [DEBUG] [Thread-132682] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:38:01.008 [DEBUG] [Thread-132682] [transport.py] [_log()] client lang: <none>
2025-12-31T18:38:01.008 [DEBUG] [Thread-132682] [transport.py] [_log()] server lang: <none>
2025-12-31T18:38:01.008 [DEBUG] [Thread-132682] [transport.py] [_log()] kex follows: False
2025-12-31T18:38:01.008 [DEBUG] [Thread-132682] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:38:01.008 [DEBUG] [Thread-132682] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:38:01.008 [DEBUG] [Thread-132682] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:38:01.008 [DEBUG] [Thread-132682] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:38:01.008 [DEBUG] [Thread-132682] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:38:01.008 [DEBUG] [Thread-132682] [transport.py] [_log()] Compression: none
2025-12-31T18:38:01.008 [DEBUG] [Thread-132682] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:38:01.066 [DEBUG] [Thread-132682] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:38:01.067 [DEBUG] [Thread-132682] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:38:01.067 [DEBUG] [Thread-132682] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T18:38:01.067 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T18:38:01.067 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:38:01.124 [DEBUG] [Thread-132682] [transport.py] [_log()] userauth is OK
2025-12-31T18:38:01.124 [DEBUG] [Thread-132682] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:38:01.124 [DEBUG] [Thread-132682] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:38:01.124 [DEBUG] [Thread-132682] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T18:38:01.124 [DEBUG] [Thread-132682] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:38:01.137 [INFO] [Thread-132682] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:38:01.138 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T18:38:01.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:38:01.993 [DEBUG] [Thread-132682] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:38:01.993 [DEBUG] [Thread-132682] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:38:02.040 [DEBUG] [Thread-132682] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:38:02.040 [DEBUG] [Thread-132682] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:38:02.049 [DEBUG] [Thread-132682] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:38:02.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:38:02.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T18:38:02.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T18:38:02.072 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:38:02.073 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:38:02.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:38:02.080 [DEBUG] [Thread-132682] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:38:12.302 [DEBUG] [Thread-132684 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:38:27.350 [DEBUG] [Thread-132685 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:38:31.179 [DEBUG] [Thread-132686 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:38:32.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T18:38:32.078 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T18:38:32.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T18:38:32.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 18, 37, 28), 20.81, 25.48, 0.0, 20.36, 22.75, 0, 0, 0, 2, 0, 0),)
2025-12-31T18:38:32.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 18:37:28
2025-12-31T18:38:32.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T18:38:33.139 [DEBUG] [Thread-132687] [transport.py] [_log()] starting thread (client mode): 0xb1747d00
2025-12-31T18:38:33.139 [DEBUG] [Thread-132687] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:38:33.159 [DEBUG] [Thread-132687] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T18:38:33.160 [INFO] [Thread-132687] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T18:38:33.162 [DEBUG] [Thread-132687] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:38:33.162 [DEBUG] [Thread-132687] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T18:38:33.162 [DEBUG] [Thread-132687] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:38:33.162 [DEBUG] [Thread-132687] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:38:33.162 [DEBUG] [Thread-132687] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:38:33.162 [DEBUG] [Thread-132687] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:38:33.162 [DEBUG] [Thread-132687] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:38:33.162 [DEBUG] [Thread-132687] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:38:33.162 [DEBUG] [Thread-132687] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:38:33.162 [DEBUG] [Thread-132687] [transport.py] [_log()] client lang: <none>
2025-12-31T18:38:33.162 [DEBUG] [Thread-132687] [transport.py] [_log()] server lang: <none>
2025-12-31T18:38:33.162 [DEBUG] [Thread-132687] [transport.py] [_log()] kex follows: False
2025-12-31T18:38:33.162 [DEBUG] [Thread-132687] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:38:33.162 [DEBUG] [Thread-132687] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:38:33.162 [DEBUG] [Thread-132687] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:38:33.162 [DEBUG] [Thread-132687] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:38:33.162 [DEBUG] [Thread-132687] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:38:33.162 [DEBUG] [Thread-132687] [transport.py] [_log()] Compression: none
2025-12-31T18:38:33.162 [DEBUG] [Thread-132687] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:38:33.177 [DEBUG] [Thread-132687] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:38:33.178 [DEBUG] [Thread-132687] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:38:33.178 [DEBUG] [Thread-132687] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T18:38:33.178 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T18:38:33.178 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:38:33.178 [DEBUG] [Thread-132687] [transport.py] [_log()] userauth is OK
2025-12-31T18:38:33.178 [DEBUG] [Thread-132687] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:38:33.178 [DEBUG] [Thread-132687] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:38:33.178 [DEBUG] [Thread-132687] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T18:38:33.179 [DEBUG] [Thread-132687] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:38:33.188 [INFO] [Thread-132687] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:38:33.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:38:33.960 [DEBUG] [Thread-132687] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:38:33.960 [DEBUG] [Thread-132687] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:38:33.960 [DEBUG] [Thread-132687] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T18:38:34.000 [DEBUG] [Thread-132687] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:38:34.000 [DEBUG] [Thread-132687] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:38:34.002 [DEBUG] [Thread-132687] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:38:34.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:38:34.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T18:38:34.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T18:38:34.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T18:38:34.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:38:34.022 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T18:38:34.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:38:34.022 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:38:34.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T18:38:34.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.692848 -999.00  +22.60  20.17     31   +4.70 1 2 1 1 1   887    0 15.09 -108.96 ----- 20.0 20.2 273.0 27.1 23.8 -22.0 23.7 -21.9 23.4 -20.6 23.7 -20.7
2025-12-31T18:38:34.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T18:38:34.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T18:38:34.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.692848
2025-12-31T18:38:34.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T18:38:34.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T18:38:34.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T18:38:34.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T18:38:34.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T18:38:34.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T18:37:28', tmtdew=20.81, humidity=25.48, cloud=0.0, wind=20.36, temperature=22.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T16:37:42.067', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T18:38:34.023 [DEBUG] [Thread-132687] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:38:34.097 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T18:38:34.108 [DEBUG] [Thread-132690] [transport.py] [_log()] starting thread (client mode): 0xb95f3100
2025-12-31T18:38:34.108 [DEBUG] [Thread-132690] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:38:34.122 [DEBUG] [Thread-132690] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T18:38:34.123 [INFO] [Thread-132690] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T18:38:34.130 [DEBUG] [Thread-132690] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:38:34.130 [DEBUG] [Thread-132690] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T18:38:34.130 [DEBUG] [Thread-132690] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:38:34.130 [DEBUG] [Thread-132690] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:38:34.130 [DEBUG] [Thread-132690] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:38:34.130 [DEBUG] [Thread-132690] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:38:34.130 [DEBUG] [Thread-132690] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:38:34.130 [DEBUG] [Thread-132690] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:38:34.130 [DEBUG] [Thread-132690] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:38:34.130 [DEBUG] [Thread-132690] [transport.py] [_log()] client lang: <none>
2025-12-31T18:38:34.130 [DEBUG] [Thread-132690] [transport.py] [_log()] server lang: <none>
2025-12-31T18:38:34.130 [DEBUG] [Thread-132690] [transport.py] [_log()] kex follows: False
2025-12-31T18:38:34.130 [DEBUG] [Thread-132690] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:38:34.130 [DEBUG] [Thread-132690] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:38:34.130 [DEBUG] [Thread-132690] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:38:34.130 [DEBUG] [Thread-132690] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:38:34.130 [DEBUG] [Thread-132690] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:38:34.130 [DEBUG] [Thread-132690] [transport.py] [_log()] Compression: none
2025-12-31T18:38:34.131 [DEBUG] [Thread-132690] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:38:34.187 [DEBUG] [Thread-132690] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:38:34.188 [DEBUG] [Thread-132690] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:38:34.188 [DEBUG] [Thread-132690] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T18:38:34.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T18:38:34.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:38:34.245 [DEBUG] [Thread-132690] [transport.py] [_log()] userauth is OK
2025-12-31T18:38:34.245 [DEBUG] [Thread-132690] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:38:34.245 [DEBUG] [Thread-132690] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:38:34.245 [DEBUG] [Thread-132690] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T18:38:34.245 [DEBUG] [Thread-132690] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:38:34.258 [INFO] [Thread-132690] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:38:34.259 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T18:38:34.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:38:34.492 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:38:34.493 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:38:35.099 [DEBUG] [Thread-132690] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:38:35.099 [DEBUG] [Thread-132690] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:38:35.147 [DEBUG] [Thread-132690] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:38:35.147 [DEBUG] [Thread-132690] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:38:35.156 [DEBUG] [Thread-132690] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:38:35.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:38:35.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T18:38:35.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T18:38:35.184 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:38:35.184 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:38:35.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:38:35.193 [DEBUG] [Thread-132690] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:38:42.387 [DEBUG] [Thread-132692 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:38:57.436 [DEBUG] [Thread-132693 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:39:05.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T18:39:05.215 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T18:39:05.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T18:39:05.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 18, 38, 32), 20.81, 25.5, 0.0, 25.2, 22.8, 0, 0, 0, 2, 0, 0),)
2025-12-31T18:39:05.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 18:38:32
2025-12-31T18:39:06.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T18:39:06.263 [DEBUG] [Thread-132694] [transport.py] [_log()] starting thread (client mode): 0xb95f3490
2025-12-31T18:39:06.263 [DEBUG] [Thread-132694] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:39:06.284 [DEBUG] [Thread-132694] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T18:39:06.284 [INFO] [Thread-132694] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T18:39:06.286 [DEBUG] [Thread-132694] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:39:06.286 [DEBUG] [Thread-132694] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T18:39:06.286 [DEBUG] [Thread-132694] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:39:06.286 [DEBUG] [Thread-132694] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:39:06.286 [DEBUG] [Thread-132694] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:39:06.286 [DEBUG] [Thread-132694] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:39:06.286 [DEBUG] [Thread-132694] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:39:06.286 [DEBUG] [Thread-132694] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:39:06.286 [DEBUG] [Thread-132694] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:39:06.286 [DEBUG] [Thread-132694] [transport.py] [_log()] client lang: <none>
2025-12-31T18:39:06.286 [DEBUG] [Thread-132694] [transport.py] [_log()] server lang: <none>
2025-12-31T18:39:06.286 [DEBUG] [Thread-132694] [transport.py] [_log()] kex follows: False
2025-12-31T18:39:06.286 [DEBUG] [Thread-132694] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:39:06.286 [DEBUG] [Thread-132694] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:39:06.286 [DEBUG] [Thread-132694] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:39:06.286 [DEBUG] [Thread-132694] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:39:06.286 [DEBUG] [Thread-132694] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:39:06.286 [DEBUG] [Thread-132694] [transport.py] [_log()] Compression: none
2025-12-31T18:39:06.286 [DEBUG] [Thread-132694] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:39:06.301 [DEBUG] [Thread-132694] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:39:06.301 [DEBUG] [Thread-132694] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:39:06.301 [DEBUG] [Thread-132694] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T18:39:06.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T18:39:06.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:39:06.302 [DEBUG] [Thread-132694] [transport.py] [_log()] userauth is OK
2025-12-31T18:39:06.302 [DEBUG] [Thread-132694] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:39:06.302 [DEBUG] [Thread-132694] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:39:06.302 [DEBUG] [Thread-132694] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T18:39:06.302 [DEBUG] [Thread-132694] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:39:06.317 [INFO] [Thread-132694] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:39:06.317 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:39:06.961 [DEBUG] [Thread-132694] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:39:06.961 [DEBUG] [Thread-132694] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:39:06.962 [DEBUG] [Thread-132694] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T18:39:07.002 [DEBUG] [Thread-132694] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:39:07.002 [DEBUG] [Thread-132694] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:39:07.004 [DEBUG] [Thread-132694] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:39:07.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:39:07.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T18:39:07.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T18:39:07.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T18:39:07.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:39:07.027 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T18:39:07.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:39:07.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:39:07.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T18:39:07.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.693195 -999.00  +22.50  21.43     31   +4.60 1 2 1 1 1   887    0 14.94 -99.61 ----- 26.8 21.4 273.8 28.6 23.8 -22.1 23.8 -22.1 23.4 -21.3 23.7 -20.8
2025-12-31T18:39:07.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T18:39:07.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T18:39:07.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.693195
2025-12-31T18:39:07.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T18:39:07.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T18:39:07.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T18:39:07.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T18:39:07.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T18:39:07.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T18:38:32', tmtdew=20.81, humidity=25.5, cloud=0.0, wind=25.2, temperature=22.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T16:38:12.048', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T18:39:07.029 [DEBUG] [Thread-132694] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:39:07.113 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T18:39:07.125 [DEBUG] [Thread-132697] [transport.py] [_log()] starting thread (client mode): 0xb17473d0
2025-12-31T18:39:07.125 [DEBUG] [Thread-132697] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:39:07.140 [DEBUG] [Thread-132697] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T18:39:07.140 [INFO] [Thread-132697] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T18:39:07.149 [DEBUG] [Thread-132697] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:39:07.149 [DEBUG] [Thread-132697] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T18:39:07.149 [DEBUG] [Thread-132697] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:39:07.149 [DEBUG] [Thread-132697] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:39:07.149 [DEBUG] [Thread-132697] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:39:07.149 [DEBUG] [Thread-132697] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:39:07.149 [DEBUG] [Thread-132697] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:39:07.150 [DEBUG] [Thread-132697] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:39:07.150 [DEBUG] [Thread-132697] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:39:07.150 [DEBUG] [Thread-132697] [transport.py] [_log()] client lang: <none>
2025-12-31T18:39:07.150 [DEBUG] [Thread-132697] [transport.py] [_log()] server lang: <none>
2025-12-31T18:39:07.150 [DEBUG] [Thread-132697] [transport.py] [_log()] kex follows: False
2025-12-31T18:39:07.150 [DEBUG] [Thread-132697] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:39:07.150 [DEBUG] [Thread-132697] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:39:07.150 [DEBUG] [Thread-132697] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:39:07.150 [DEBUG] [Thread-132697] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:39:07.150 [DEBUG] [Thread-132697] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:39:07.150 [DEBUG] [Thread-132697] [transport.py] [_log()] Compression: none
2025-12-31T18:39:07.150 [DEBUG] [Thread-132697] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:39:07.213 [DEBUG] [Thread-132697] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:39:07.213 [DEBUG] [Thread-132697] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:39:07.214 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T18:39:07.214 [DEBUG] [Thread-132697] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T18:39:07.215 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:39:07.271 [DEBUG] [Thread-132697] [transport.py] [_log()] userauth is OK
2025-12-31T18:39:07.271 [DEBUG] [Thread-132697] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:39:07.271 [DEBUG] [Thread-132697] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:39:07.271 [DEBUG] [Thread-132697] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T18:39:07.272 [DEBUG] [Thread-132697] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:39:07.289 [INFO] [Thread-132697] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:39:07.290 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T18:39:07.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:39:08.113 [DEBUG] [Thread-132697] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:39:08.113 [DEBUG] [Thread-132697] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:39:08.163 [DEBUG] [Thread-132697] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:39:08.164 [DEBUG] [Thread-132697] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:39:08.176 [DEBUG] [Thread-132697] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:39:08.189 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:39:08.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T18:39:08.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T18:39:08.215 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:39:08.215 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:39:08.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:39:08.223 [DEBUG] [Thread-132697] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:39:12.473 [DEBUG] [Thread-132699 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:39:27.526 [DEBUG] [Thread-132700 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:39:31.237 [DEBUG] [Thread-132701 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:39:34.633 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:39:34.633 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:39:38.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T18:39:38.223 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T18:39:38.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T18:39:38.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 18, 39, 4), 20.77, 25.55, 0.0, 26.4, 22.75, 0, 0, 0, 2, 0, 0),)
2025-12-31T18:39:38.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 18:39:04
2025-12-31T18:39:39.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T18:39:39.252 [DEBUG] [Thread-132702] [transport.py] [_log()] starting thread (client mode): 0xb17467d0
2025-12-31T18:39:39.252 [DEBUG] [Thread-132702] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:39:39.273 [DEBUG] [Thread-132702] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T18:39:39.273 [INFO] [Thread-132702] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T18:39:39.276 [DEBUG] [Thread-132702] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:39:39.276 [DEBUG] [Thread-132702] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T18:39:39.276 [DEBUG] [Thread-132702] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:39:39.276 [DEBUG] [Thread-132702] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:39:39.276 [DEBUG] [Thread-132702] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:39:39.276 [DEBUG] [Thread-132702] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:39:39.276 [DEBUG] [Thread-132702] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:39:39.276 [DEBUG] [Thread-132702] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:39:39.277 [DEBUG] [Thread-132702] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:39:39.277 [DEBUG] [Thread-132702] [transport.py] [_log()] client lang: <none>
2025-12-31T18:39:39.277 [DEBUG] [Thread-132702] [transport.py] [_log()] server lang: <none>
2025-12-31T18:39:39.277 [DEBUG] [Thread-132702] [transport.py] [_log()] kex follows: False
2025-12-31T18:39:39.277 [DEBUG] [Thread-132702] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:39:39.277 [DEBUG] [Thread-132702] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:39:39.277 [DEBUG] [Thread-132702] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:39:39.277 [DEBUG] [Thread-132702] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:39:39.277 [DEBUG] [Thread-132702] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:39:39.277 [DEBUG] [Thread-132702] [transport.py] [_log()] Compression: none
2025-12-31T18:39:39.277 [DEBUG] [Thread-132702] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:39:39.294 [DEBUG] [Thread-132702] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:39:39.294 [DEBUG] [Thread-132702] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:39:39.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T18:39:39.295 [DEBUG] [Thread-132702] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T18:39:39.296 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:39:39.297 [DEBUG] [Thread-132702] [transport.py] [_log()] userauth is OK
2025-12-31T18:39:39.298 [DEBUG] [Thread-132702] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:39:39.298 [DEBUG] [Thread-132702] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:39:39.298 [DEBUG] [Thread-132702] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T18:39:39.298 [DEBUG] [Thread-132702] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:39:39.322 [INFO] [Thread-132702] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:39:39.323 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:39:40.064 [DEBUG] [Thread-132702] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:39:40.064 [DEBUG] [Thread-132702] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:39:40.065 [DEBUG] [Thread-132702] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T18:39:40.105 [DEBUG] [Thread-132702] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:39:40.105 [DEBUG] [Thread-132702] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:39:40.108 [DEBUG] [Thread-132702] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:39:40.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:39:40.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T18:39:40.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T18:39:40.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T18:39:40.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:39:40.132 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T18:39:40.132 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:39:40.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:39:40.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T18:39:40.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.693543 -999.00  +22.50  24.96     31   +4.70 1 2 1 1 1   887    0 15.37 -93.28 ----- 24.1 25.0 273.6 31.5 23.7 -22.2 23.7 -22.1 23.4 -21.8 23.7 -21.0
2025-12-31T18:39:40.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T18:39:40.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T18:39:40.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.693543
2025-12-31T18:39:40.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T18:39:40.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T18:39:40.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T18:39:40.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T18:39:40.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T18:39:40.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T18:39:04', tmtdew=20.77, humidity=25.55, cloud=0.0, wind=26.4, temperature=22.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T16:38:42.115', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T18:39:40.135 [DEBUG] [Thread-132702] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:39:40.219 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T18:39:40.230 [DEBUG] [Thread-132705] [transport.py] [_log()] starting thread (client mode): 0xb1759a50
2025-12-31T18:39:40.230 [DEBUG] [Thread-132705] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:39:40.245 [DEBUG] [Thread-132705] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T18:39:40.246 [INFO] [Thread-132705] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T18:39:40.253 [DEBUG] [Thread-132705] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:39:40.253 [DEBUG] [Thread-132705] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T18:39:40.253 [DEBUG] [Thread-132705] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:39:40.253 [DEBUG] [Thread-132705] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:39:40.253 [DEBUG] [Thread-132705] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:39:40.254 [DEBUG] [Thread-132705] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:39:40.254 [DEBUG] [Thread-132705] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:39:40.254 [DEBUG] [Thread-132705] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:39:40.254 [DEBUG] [Thread-132705] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:39:40.254 [DEBUG] [Thread-132705] [transport.py] [_log()] client lang: <none>
2025-12-31T18:39:40.254 [DEBUG] [Thread-132705] [transport.py] [_log()] server lang: <none>
2025-12-31T18:39:40.254 [DEBUG] [Thread-132705] [transport.py] [_log()] kex follows: False
2025-12-31T18:39:40.254 [DEBUG] [Thread-132705] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:39:40.255 [DEBUG] [Thread-132705] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:39:40.255 [DEBUG] [Thread-132705] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:39:40.255 [DEBUG] [Thread-132705] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:39:40.255 [DEBUG] [Thread-132705] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:39:40.255 [DEBUG] [Thread-132705] [transport.py] [_log()] Compression: none
2025-12-31T18:39:40.255 [DEBUG] [Thread-132705] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:39:40.315 [DEBUG] [Thread-132705] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:39:40.316 [DEBUG] [Thread-132705] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:39:40.316 [DEBUG] [Thread-132705] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T18:39:40.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T18:39:40.317 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:39:40.371 [DEBUG] [Thread-132705] [transport.py] [_log()] userauth is OK
2025-12-31T18:39:40.371 [DEBUG] [Thread-132705] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:39:40.372 [DEBUG] [Thread-132705] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:39:40.372 [DEBUG] [Thread-132705] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T18:39:40.372 [DEBUG] [Thread-132705] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:39:40.391 [INFO] [Thread-132705] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:39:40.391 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T18:39:40.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:39:41.198 [DEBUG] [Thread-132705] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:39:41.198 [DEBUG] [Thread-132705] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:39:41.246 [DEBUG] [Thread-132705] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:39:41.246 [DEBUG] [Thread-132705] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:39:41.255 [DEBUG] [Thread-132705] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:39:41.264 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:39:41.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T18:39:41.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T18:39:41.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:39:41.283 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:39:41.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:39:41.292 [DEBUG] [Thread-132705] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:39:42.556 [DEBUG] [Thread-132707 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:39:57.610 [DEBUG] [Thread-132708 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:40:11.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T18:40:11.314 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T18:40:11.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T18:40:12.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 18, 40, 8), 20.48, 25.76, 0.0, 25.39, 22.52, 0, 0, 0, 2, 0, 0),)
2025-12-31T18:40:12.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 18:40:08
2025-12-31T18:40:12.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T18:40:12.303 [DEBUG] [Thread-132709] [transport.py] [_log()] starting thread (client mode): 0xb1744940
2025-12-31T18:40:12.303 [DEBUG] [Thread-132709] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:40:12.314 [DEBUG] [Thread-132709] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T18:40:12.314 [INFO] [Thread-132709] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T18:40:12.317 [DEBUG] [Thread-132709] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:40:12.317 [DEBUG] [Thread-132709] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T18:40:12.317 [DEBUG] [Thread-132709] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:40:12.317 [DEBUG] [Thread-132709] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:40:12.317 [DEBUG] [Thread-132709] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:40:12.317 [DEBUG] [Thread-132709] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:40:12.317 [DEBUG] [Thread-132709] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:40:12.317 [DEBUG] [Thread-132709] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:40:12.317 [DEBUG] [Thread-132709] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:40:12.317 [DEBUG] [Thread-132709] [transport.py] [_log()] client lang: <none>
2025-12-31T18:40:12.318 [DEBUG] [Thread-132709] [transport.py] [_log()] server lang: <none>
2025-12-31T18:40:12.318 [DEBUG] [Thread-132709] [transport.py] [_log()] kex follows: False
2025-12-31T18:40:12.318 [DEBUG] [Thread-132709] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:40:12.318 [DEBUG] [Thread-132709] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:40:12.318 [DEBUG] [Thread-132709] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:40:12.318 [DEBUG] [Thread-132709] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:40:12.318 [DEBUG] [Thread-132709] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:40:12.318 [DEBUG] [Thread-132709] [transport.py] [_log()] Compression: none
2025-12-31T18:40:12.318 [DEBUG] [Thread-132709] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:40:12.333 [DEBUG] [Thread-132709] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:40:12.334 [DEBUG] [Thread-132709] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:40:12.334 [DEBUG] [Thread-132709] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T18:40:12.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T18:40:12.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:40:12.335 [DEBUG] [Thread-132709] [transport.py] [_log()] userauth is OK
2025-12-31T18:40:12.335 [DEBUG] [Thread-132709] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:40:12.335 [DEBUG] [Thread-132709] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:40:12.335 [DEBUG] [Thread-132709] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T18:40:12.335 [DEBUG] [Thread-132709] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:40:12.348 [INFO] [Thread-132709] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:40:12.348 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:40:12.644 [DEBUG] [Thread-132711 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:40:16.653 [DEBUG] [Thread-132709] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:40:16.654 [DEBUG] [Thread-132709] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:40:16.655 [DEBUG] [Thread-132709] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T18:40:16.694 [DEBUG] [Thread-132709] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:40:16.694 [DEBUG] [Thread-132709] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:40:16.697 [DEBUG] [Thread-132709] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:40:16.773 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:40:16.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T18:40:16.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T18:40:16.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T18:40:16.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:40:16.798 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T18:40:16.798 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:40:16.798 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:40:16.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T18:40:16.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.693890 -999.00  +22.50  18.40     31   +4.70 1 2 1 1 1   887    0 15.51 -89.44 ----- 21.0 18.4 282.0 26.8 -999.0 -999.0 23.7 -21.9 23.4 -21.0 23.7 -20.8
2025-12-31T18:40:16.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T18:40:16.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T18:40:16.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.693890
2025-12-31T18:40:16.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T18:40:16.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T18:40:16.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T18:40:16.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T18:40:16.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T18:40:16.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T18:40:08', tmtdew=20.48, humidity=25.76, cloud=0.0, wind=25.39, temperature=22.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T16:39:12.096', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T18:40:16.801 [DEBUG] [Thread-132709] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:40:16.885 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T18:40:16.897 [DEBUG] [Thread-132713] [transport.py] [_log()] starting thread (client mode): 0xb6bbeb30
2025-12-31T18:40:16.897 [DEBUG] [Thread-132713] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:40:16.912 [DEBUG] [Thread-132713] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T18:40:16.913 [INFO] [Thread-132713] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T18:40:16.920 [DEBUG] [Thread-132713] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:40:16.921 [DEBUG] [Thread-132713] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T18:40:16.921 [DEBUG] [Thread-132713] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:40:16.921 [DEBUG] [Thread-132713] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:40:16.921 [DEBUG] [Thread-132713] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:40:16.921 [DEBUG] [Thread-132713] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:40:16.921 [DEBUG] [Thread-132713] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:40:16.921 [DEBUG] [Thread-132713] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:40:16.922 [DEBUG] [Thread-132713] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:40:16.922 [DEBUG] [Thread-132713] [transport.py] [_log()] client lang: <none>
2025-12-31T18:40:16.922 [DEBUG] [Thread-132713] [transport.py] [_log()] server lang: <none>
2025-12-31T18:40:16.922 [DEBUG] [Thread-132713] [transport.py] [_log()] kex follows: False
2025-12-31T18:40:16.922 [DEBUG] [Thread-132713] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:40:16.922 [DEBUG] [Thread-132713] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:40:16.922 [DEBUG] [Thread-132713] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:40:16.922 [DEBUG] [Thread-132713] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:40:16.922 [DEBUG] [Thread-132713] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:40:16.922 [DEBUG] [Thread-132713] [transport.py] [_log()] Compression: none
2025-12-31T18:40:16.922 [DEBUG] [Thread-132713] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:40:16.982 [DEBUG] [Thread-132713] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:40:16.983 [DEBUG] [Thread-132713] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:40:16.992 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T18:40:16.992 [DEBUG] [Thread-132713] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T18:40:16.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:40:17.041 [DEBUG] [Thread-132713] [transport.py] [_log()] userauth is OK
2025-12-31T18:40:17.041 [DEBUG] [Thread-132713] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:40:17.042 [DEBUG] [Thread-132713] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:40:17.042 [DEBUG] [Thread-132713] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T18:40:17.042 [DEBUG] [Thread-132713] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:40:17.060 [INFO] [Thread-132713] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:40:17.061 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T18:40:17.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:40:17.923 [DEBUG] [Thread-132713] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:40:17.923 [DEBUG] [Thread-132713] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:40:17.971 [DEBUG] [Thread-132713] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:40:17.971 [DEBUG] [Thread-132713] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:40:17.980 [DEBUG] [Thread-132713] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:40:17.989 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:40:17.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T18:40:17.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T18:40:18.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:40:18.008 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:40:18.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:40:18.017 [DEBUG] [Thread-132713] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:40:27.677 [DEBUG] [Thread-132715 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:40:31.314 [DEBUG] [Thread-132716 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:40:34.773 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:40:34.774 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:40:42.728 [DEBUG] [Thread-132717 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:40:48.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T18:40:48.039 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T18:40:48.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T18:40:48.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 18, 40, 40), 20.31, 26.3, 0.0, 20.04, 22.42, 0, 0, 0, 2, 0, 0),)
2025-12-31T18:40:48.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 18:40:40
2025-12-31T18:40:48.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T18:40:49.084 [DEBUG] [Thread-132718] [transport.py] [_log()] starting thread (client mode): 0xb6bbe8f0
2025-12-31T18:40:49.084 [DEBUG] [Thread-132718] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:40:49.104 [DEBUG] [Thread-132718] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T18:40:49.104 [INFO] [Thread-132718] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T18:40:49.107 [DEBUG] [Thread-132718] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:40:49.107 [DEBUG] [Thread-132718] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T18:40:49.107 [DEBUG] [Thread-132718] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:40:49.107 [DEBUG] [Thread-132718] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:40:49.107 [DEBUG] [Thread-132718] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:40:49.107 [DEBUG] [Thread-132718] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:40:49.107 [DEBUG] [Thread-132718] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:40:49.107 [DEBUG] [Thread-132718] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:40:49.107 [DEBUG] [Thread-132718] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:40:49.107 [DEBUG] [Thread-132718] [transport.py] [_log()] client lang: <none>
2025-12-31T18:40:49.107 [DEBUG] [Thread-132718] [transport.py] [_log()] server lang: <none>
2025-12-31T18:40:49.107 [DEBUG] [Thread-132718] [transport.py] [_log()] kex follows: False
2025-12-31T18:40:49.107 [DEBUG] [Thread-132718] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:40:49.107 [DEBUG] [Thread-132718] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:40:49.107 [DEBUG] [Thread-132718] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:40:49.107 [DEBUG] [Thread-132718] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:40:49.107 [DEBUG] [Thread-132718] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:40:49.107 [DEBUG] [Thread-132718] [transport.py] [_log()] Compression: none
2025-12-31T18:40:49.107 [DEBUG] [Thread-132718] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:40:49.123 [DEBUG] [Thread-132718] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:40:49.123 [DEBUG] [Thread-132718] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:40:49.123 [DEBUG] [Thread-132718] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T18:40:49.123 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T18:40:49.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:40:49.124 [DEBUG] [Thread-132718] [transport.py] [_log()] userauth is OK
2025-12-31T18:40:49.124 [DEBUG] [Thread-132718] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:40:49.124 [DEBUG] [Thread-132718] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:40:49.124 [DEBUG] [Thread-132718] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T18:40:49.124 [DEBUG] [Thread-132718] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:40:49.133 [INFO] [Thread-132718] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:40:49.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:40:49.737 [DEBUG] [Thread-132718] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:40:49.737 [DEBUG] [Thread-132718] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:40:49.738 [DEBUG] [Thread-132718] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T18:40:49.779 [DEBUG] [Thread-132718] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:40:49.779 [DEBUG] [Thread-132718] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:40:49.781 [DEBUG] [Thread-132718] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:40:49.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:40:49.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T18:40:49.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T18:40:49.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T18:40:49.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:40:49.792 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T18:40:49.792 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:40:49.792 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:40:49.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T18:40:49.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.694584 -999.00  +22.30  17.26     31   +4.70 1 2 1 1 1   887    0 15.97 -83.90 ----- 14.2 17.3 274.6 25.9 23.7 -22.2 23.7 -21.9 23.4 -21.0 23.6 -21.1
2025-12-31T18:40:49.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T18:40:49.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T18:40:49.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.694584
2025-12-31T18:40:49.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T18:40:49.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T18:40:49.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T18:40:49.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T18:40:49.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T18:40:49.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T18:40:40', tmtdew=20.31, humidity=26.3, cloud=0.0, wind=20.04, temperature=22.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T16:40:12.058', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T18:40:49.793 [DEBUG] [Thread-132718] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:40:49.868 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T18:40:49.880 [DEBUG] [Thread-132721] [transport.py] [_log()] starting thread (client mode): 0xb175bcd0
2025-12-31T18:40:49.880 [DEBUG] [Thread-132721] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:40:49.895 [DEBUG] [Thread-132721] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T18:40:49.895 [INFO] [Thread-132721] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T18:40:49.902 [DEBUG] [Thread-132721] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:40:49.902 [DEBUG] [Thread-132721] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T18:40:49.902 [DEBUG] [Thread-132721] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:40:49.902 [DEBUG] [Thread-132721] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:40:49.902 [DEBUG] [Thread-132721] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:40:49.902 [DEBUG] [Thread-132721] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:40:49.902 [DEBUG] [Thread-132721] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:40:49.902 [DEBUG] [Thread-132721] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:40:49.902 [DEBUG] [Thread-132721] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:40:49.902 [DEBUG] [Thread-132721] [transport.py] [_log()] client lang: <none>
2025-12-31T18:40:49.902 [DEBUG] [Thread-132721] [transport.py] [_log()] server lang: <none>
2025-12-31T18:40:49.902 [DEBUG] [Thread-132721] [transport.py] [_log()] kex follows: False
2025-12-31T18:40:49.902 [DEBUG] [Thread-132721] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:40:49.902 [DEBUG] [Thread-132721] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:40:49.902 [DEBUG] [Thread-132721] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:40:49.902 [DEBUG] [Thread-132721] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:40:49.902 [DEBUG] [Thread-132721] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:40:49.902 [DEBUG] [Thread-132721] [transport.py] [_log()] Compression: none
2025-12-31T18:40:49.902 [DEBUG] [Thread-132721] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:40:49.965 [DEBUG] [Thread-132721] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:40:49.965 [DEBUG] [Thread-132721] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:40:49.965 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T18:40:49.965 [DEBUG] [Thread-132721] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T18:40:49.965 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:40:50.025 [DEBUG] [Thread-132721] [transport.py] [_log()] userauth is OK
2025-12-31T18:40:50.025 [DEBUG] [Thread-132721] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:40:50.025 [DEBUG] [Thread-132721] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:40:50.025 [DEBUG] [Thread-132721] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T18:40:50.025 [DEBUG] [Thread-132721] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:40:50.039 [INFO] [Thread-132721] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:40:50.039 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T18:40:50.039 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:40:50.841 [DEBUG] [Thread-132721] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:40:50.842 [DEBUG] [Thread-132721] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:40:50.889 [DEBUG] [Thread-132721] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:40:50.889 [DEBUG] [Thread-132721] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:40:50.898 [DEBUG] [Thread-132721] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:40:50.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:40:50.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T18:40:50.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T18:40:50.926 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:40:50.926 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:40:50.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:40:50.938 [DEBUG] [Thread-132721] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:40:57.756 [DEBUG] [Thread-132723 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:41:12.812 [DEBUG] [Thread-132724 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:41:20.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T18:41:20.929 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T18:41:20.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-12-31T18:41:21.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 18, 41, 12), 20.34, 26.25, 0.0, 16.99, 22.44, 0, 0, 0, 2, 0, 0),)
2025-12-31T18:41:21.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 18:41:12
2025-12-31T18:41:21.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T18:41:21.919 [DEBUG] [Thread-132725] [transport.py] [_log()] starting thread (client mode): 0xb6bbc220
2025-12-31T18:41:21.919 [DEBUG] [Thread-132725] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:41:21.939 [DEBUG] [Thread-132725] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T18:41:21.940 [INFO] [Thread-132725] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T18:41:21.943 [DEBUG] [Thread-132725] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:41:21.943 [DEBUG] [Thread-132725] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T18:41:21.943 [DEBUG] [Thread-132725] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:41:21.943 [DEBUG] [Thread-132725] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:41:21.943 [DEBUG] [Thread-132725] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:41:21.943 [DEBUG] [Thread-132725] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:41:21.943 [DEBUG] [Thread-132725] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:41:21.943 [DEBUG] [Thread-132725] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:41:21.943 [DEBUG] [Thread-132725] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:41:21.943 [DEBUG] [Thread-132725] [transport.py] [_log()] client lang: <none>
2025-12-31T18:41:21.943 [DEBUG] [Thread-132725] [transport.py] [_log()] server lang: <none>
2025-12-31T18:41:21.943 [DEBUG] [Thread-132725] [transport.py] [_log()] kex follows: False
2025-12-31T18:41:21.943 [DEBUG] [Thread-132725] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:41:21.943 [DEBUG] [Thread-132725] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:41:21.943 [DEBUG] [Thread-132725] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:41:21.943 [DEBUG] [Thread-132725] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:41:21.943 [DEBUG] [Thread-132725] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:41:21.943 [DEBUG] [Thread-132725] [transport.py] [_log()] Compression: none
2025-12-31T18:41:21.943 [DEBUG] [Thread-132725] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:41:21.963 [DEBUG] [Thread-132725] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:41:21.964 [DEBUG] [Thread-132725] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:41:21.965 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T18:41:21.965 [DEBUG] [Thread-132725] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T18:41:21.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:41:21.967 [DEBUG] [Thread-132725] [transport.py] [_log()] userauth is OK
2025-12-31T18:41:21.967 [DEBUG] [Thread-132725] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:41:21.967 [DEBUG] [Thread-132725] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:41:21.967 [DEBUG] [Thread-132725] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T18:41:21.967 [DEBUG] [Thread-132725] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:41:21.992 [INFO] [Thread-132725] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:41:21.993 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:41:22.780 [DEBUG] [Thread-132725] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:41:22.780 [DEBUG] [Thread-132725] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:41:22.780 [DEBUG] [Thread-132725] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T18:41:22.821 [DEBUG] [Thread-132725] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:41:22.821 [DEBUG] [Thread-132725] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:41:22.824 [DEBUG] [Thread-132725] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:41:22.831 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:41:22.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T18:41:22.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T18:41:22.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T18:41:22.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:41:22.843 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T18:41:22.843 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:41:22.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:41:22.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T18:41:22.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.694931 -999.00  +22.20  10.44     31   +4.70 1 2 1 1 1   887    0 16.11 -83.28 ----- 10.2 10.4 276.6 20.5 23.7 -22.4 23.7 -22.0 23.3 -22.0 23.6 -20.9
2025-12-31T18:41:22.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T18:41:22.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T18:41:22.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.694931
2025-12-31T18:41:22.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T18:41:22.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T18:41:22.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T18:41:22.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T18:41:22.846 [DEBUG] [Thread-132725] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:41:22.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T18:41:22.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T18:41:12', tmtdew=20.34, humidity=26.25, cloud=0.0, wind=16.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-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T16:40:42.038', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T18:41:22.930 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T18:41:22.941 [DEBUG] [Thread-132728] [transport.py] [_log()] starting thread (client mode): 0xb1746bf0
2025-12-31T18:41:22.941 [DEBUG] [Thread-132728] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:41:22.956 [DEBUG] [Thread-132728] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T18:41:22.956 [INFO] [Thread-132728] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T18:41:22.963 [DEBUG] [Thread-132728] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:41:22.963 [DEBUG] [Thread-132728] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T18:41:22.963 [DEBUG] [Thread-132728] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:41:22.964 [DEBUG] [Thread-132728] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:41:22.964 [DEBUG] [Thread-132728] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:41:22.964 [DEBUG] [Thread-132728] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:41:22.964 [DEBUG] [Thread-132728] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:41:22.964 [DEBUG] [Thread-132728] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:41:22.964 [DEBUG] [Thread-132728] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:41:22.964 [DEBUG] [Thread-132728] [transport.py] [_log()] client lang: <none>
2025-12-31T18:41:22.964 [DEBUG] [Thread-132728] [transport.py] [_log()] server lang: <none>
2025-12-31T18:41:22.964 [DEBUG] [Thread-132728] [transport.py] [_log()] kex follows: False
2025-12-31T18:41:22.964 [DEBUG] [Thread-132728] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:41:22.964 [DEBUG] [Thread-132728] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:41:22.964 [DEBUG] [Thread-132728] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:41:22.964 [DEBUG] [Thread-132728] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:41:22.964 [DEBUG] [Thread-132728] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:41:22.964 [DEBUG] [Thread-132728] [transport.py] [_log()] Compression: none
2025-12-31T18:41:22.964 [DEBUG] [Thread-132728] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:41:23.023 [DEBUG] [Thread-132728] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:41:23.023 [DEBUG] [Thread-132728] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:41:23.024 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T18:41:23.024 [DEBUG] [Thread-132728] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T18:41:23.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:41:23.079 [DEBUG] [Thread-132728] [transport.py] [_log()] userauth is OK
2025-12-31T18:41:23.080 [DEBUG] [Thread-132728] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:41:23.080 [DEBUG] [Thread-132728] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:41:23.089 [DEBUG] [Thread-132728] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T18:41:23.089 [DEBUG] [Thread-132728] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:41:23.108 [INFO] [Thread-132728] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:41:23.108 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T18:41:23.108 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:41:23.929 [DEBUG] [Thread-132728] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:41:23.930 [DEBUG] [Thread-132728] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:41:23.977 [DEBUG] [Thread-132728] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:41:23.977 [DEBUG] [Thread-132728] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:41:23.986 [DEBUG] [Thread-132728] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:41:23.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:41:23.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T18:41:24.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T18:41:24.012 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:41:24.012 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:41:24.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:41:24.020 [DEBUG] [Thread-132728] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:41:27.843 [DEBUG] [Thread-132730 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:41:31.362 [DEBUG] [Thread-132731 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:41:34.915 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:41:34.916 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:41:42.882 [DEBUG] [Thread-132732 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:41:54.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T18:41:54.043 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T18:41:54.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-12-31T18:41:54.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 18, 41, 44), 20.45, 26.25, 0.0, 15.76, 22.5, 0, 0, 0, 2, 0, 0),)
2025-12-31T18:41:54.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 18:41:44
2025-12-31T18:41:54.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T18:41:55.031 [DEBUG] [Thread-132733] [transport.py] [_log()] starting thread (client mode): 0xb95d7eb0
2025-12-31T18:41:55.032 [DEBUG] [Thread-132733] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:41:55.052 [DEBUG] [Thread-132733] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T18:41:55.052 [INFO] [Thread-132733] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T18:41:55.055 [DEBUG] [Thread-132733] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:41:55.055 [DEBUG] [Thread-132733] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T18:41:55.055 [DEBUG] [Thread-132733] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:41:55.055 [DEBUG] [Thread-132733] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:41:55.055 [DEBUG] [Thread-132733] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:41:55.056 [DEBUG] [Thread-132733] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:41:55.056 [DEBUG] [Thread-132733] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:41:55.056 [DEBUG] [Thread-132733] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:41:55.056 [DEBUG] [Thread-132733] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:41:55.056 [DEBUG] [Thread-132733] [transport.py] [_log()] client lang: <none>
2025-12-31T18:41:55.056 [DEBUG] [Thread-132733] [transport.py] [_log()] server lang: <none>
2025-12-31T18:41:55.056 [DEBUG] [Thread-132733] [transport.py] [_log()] kex follows: False
2025-12-31T18:41:55.056 [DEBUG] [Thread-132733] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:41:55.056 [DEBUG] [Thread-132733] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:41:55.056 [DEBUG] [Thread-132733] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:41:55.056 [DEBUG] [Thread-132733] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:41:55.056 [DEBUG] [Thread-132733] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:41:55.056 [DEBUG] [Thread-132733] [transport.py] [_log()] Compression: none
2025-12-31T18:41:55.057 [DEBUG] [Thread-132733] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:41:55.073 [DEBUG] [Thread-132733] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:41:55.073 [DEBUG] [Thread-132733] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:41:55.074 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T18:41:55.074 [DEBUG] [Thread-132733] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T18:41:55.075 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:41:55.076 [DEBUG] [Thread-132733] [transport.py] [_log()] userauth is OK
2025-12-31T18:41:55.076 [DEBUG] [Thread-132733] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:41:55.076 [DEBUG] [Thread-132733] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:41:55.077 [DEBUG] [Thread-132733] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T18:41:55.077 [DEBUG] [Thread-132733] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:41:55.100 [INFO] [Thread-132733] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:41:55.102 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:41:55.779 [DEBUG] [Thread-132733] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:41:55.779 [DEBUG] [Thread-132733] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:41:55.780 [DEBUG] [Thread-132733] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T18:41:55.820 [DEBUG] [Thread-132733] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:41:55.820 [DEBUG] [Thread-132733] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:41:55.823 [DEBUG] [Thread-132733] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:41:55.836 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:41:55.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T18:41:55.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T18:41:55.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T18:41:55.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:41:55.847 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T18:41:55.847 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:41:55.847 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:41:55.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T18:41:55.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.695279 -999.00  +22.30   7.09     31   +4.70 1 2 1 1 1   887    0 15.70 -79.90 ----- 10.3 7.1 247.8 13.1 23.7 -21.9 23.7 -21.9 23.4 -20.7 23.7 -21.1
2025-12-31T18:41:55.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T18:41:55.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T18:41:55.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.695279
2025-12-31T18:41:55.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T18:41:55.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T18:41:55.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T18:41:55.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T18:41:55.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T18:41:55.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T18:41:44', tmtdew=20.45, humidity=26.25, cloud=0.0, wind=15.76, temperature=22.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T16:41:12.106', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T18:41:55.850 [DEBUG] [Thread-132733] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:41:55.933 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T18:41:55.945 [DEBUG] [Thread-132736] [transport.py] [_log()] starting thread (client mode): 0xb6bb0a30
2025-12-31T18:41:55.945 [DEBUG] [Thread-132736] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:41:55.960 [DEBUG] [Thread-132736] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T18:41:55.961 [INFO] [Thread-132736] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T18:41:55.968 [DEBUG] [Thread-132736] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:41:55.968 [DEBUG] [Thread-132736] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T18:41:55.968 [DEBUG] [Thread-132736] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:41:55.968 [DEBUG] [Thread-132736] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:41:55.968 [DEBUG] [Thread-132736] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:41:55.968 [DEBUG] [Thread-132736] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:41:55.968 [DEBUG] [Thread-132736] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:41:55.968 [DEBUG] [Thread-132736] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:41:55.968 [DEBUG] [Thread-132736] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:41:55.968 [DEBUG] [Thread-132736] [transport.py] [_log()] client lang: <none>
2025-12-31T18:41:55.968 [DEBUG] [Thread-132736] [transport.py] [_log()] server lang: <none>
2025-12-31T18:41:55.968 [DEBUG] [Thread-132736] [transport.py] [_log()] kex follows: False
2025-12-31T18:41:55.968 [DEBUG] [Thread-132736] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:41:55.968 [DEBUG] [Thread-132736] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:41:55.968 [DEBUG] [Thread-132736] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:41:55.968 [DEBUG] [Thread-132736] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:41:55.968 [DEBUG] [Thread-132736] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:41:55.968 [DEBUG] [Thread-132736] [transport.py] [_log()] Compression: none
2025-12-31T18:41:55.968 [DEBUG] [Thread-132736] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:41:56.029 [DEBUG] [Thread-132736] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:41:56.030 [DEBUG] [Thread-132736] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:41:56.030 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T18:41:56.031 [DEBUG] [Thread-132736] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T18:41:56.031 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:41:56.087 [DEBUG] [Thread-132736] [transport.py] [_log()] userauth is OK
2025-12-31T18:41:56.087 [DEBUG] [Thread-132736] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:41:56.087 [DEBUG] [Thread-132736] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:41:56.087 [DEBUG] [Thread-132736] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T18:41:56.087 [DEBUG] [Thread-132736] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:41:56.103 [INFO] [Thread-132736] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:41:56.104 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T18:41:56.104 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:41:56.927 [DEBUG] [Thread-132736] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:41:56.928 [DEBUG] [Thread-132736] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:41:56.975 [DEBUG] [Thread-132736] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:41:56.975 [DEBUG] [Thread-132736] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:41:56.984 [DEBUG] [Thread-132736] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:41:56.994 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:41:56.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T18:41:57.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T18:41:57.012 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:41:57.012 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:41:57.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:41:57.020 [DEBUG] [Thread-132736] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:41:57.917 [DEBUG] [Thread-132738 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:42:12.965 [DEBUG] [Thread-132739 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:42:27.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T18:42:27.043 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T18:42:27.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T18:42:27.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 18, 42, 16), 20.39, 26.33, 0.0, 15.7, 22.44, 0, 0, 0, 2, 0, 0),)
2025-12-31T18:42:27.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 18:42:16
2025-12-31T18:42:27.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T18:42:28.001 [DEBUG] [Thread-132740 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:42:28.020 [DEBUG] [Thread-132741] [transport.py] [_log()] starting thread (client mode): 0xb6ba3c70
2025-12-31T18:42:28.020 [DEBUG] [Thread-132741] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:42:28.041 [DEBUG] [Thread-132741] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T18:42:28.041 [INFO] [Thread-132741] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T18:42:28.044 [DEBUG] [Thread-132741] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:42:28.044 [DEBUG] [Thread-132741] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T18:42:28.044 [DEBUG] [Thread-132741] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:42:28.044 [DEBUG] [Thread-132741] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:42:28.044 [DEBUG] [Thread-132741] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:42:28.044 [DEBUG] [Thread-132741] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:42:28.044 [DEBUG] [Thread-132741] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:42:28.044 [DEBUG] [Thread-132741] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:42:28.044 [DEBUG] [Thread-132741] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:42:28.044 [DEBUG] [Thread-132741] [transport.py] [_log()] client lang: <none>
2025-12-31T18:42:28.044 [DEBUG] [Thread-132741] [transport.py] [_log()] server lang: <none>
2025-12-31T18:42:28.044 [DEBUG] [Thread-132741] [transport.py] [_log()] kex follows: False
2025-12-31T18:42:28.044 [DEBUG] [Thread-132741] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:42:28.044 [DEBUG] [Thread-132741] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:42:28.044 [DEBUG] [Thread-132741] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:42:28.044 [DEBUG] [Thread-132741] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:42:28.044 [DEBUG] [Thread-132741] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:42:28.044 [DEBUG] [Thread-132741] [transport.py] [_log()] Compression: none
2025-12-31T18:42:28.045 [DEBUG] [Thread-132741] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:42:28.061 [DEBUG] [Thread-132741] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:42:28.061 [DEBUG] [Thread-132741] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:42:28.062 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T18:42:28.062 [DEBUG] [Thread-132741] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T18:42:28.063 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:42:28.064 [DEBUG] [Thread-132741] [transport.py] [_log()] userauth is OK
2025-12-31T18:42:28.064 [DEBUG] [Thread-132741] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:42:28.064 [DEBUG] [Thread-132741] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:42:28.065 [DEBUG] [Thread-132741] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T18:42:28.065 [DEBUG] [Thread-132741] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:42:28.088 [INFO] [Thread-132741] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:42:28.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:42:28.829 [DEBUG] [Thread-132741] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:42:28.829 [DEBUG] [Thread-132741] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:42:28.829 [DEBUG] [Thread-132741] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T18:42:28.870 [DEBUG] [Thread-132741] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:42:28.870 [DEBUG] [Thread-132741] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:42:28.873 [DEBUG] [Thread-132741] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:42:28.885 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:42:28.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T18:42:28.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T18:42:28.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T18:42:28.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:42:28.896 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T18:42:28.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:42:28.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:42:28.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T18:42:28.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.695626 -999.00  +22.30  12.72     31   +4.70 1 2 1 1 1   887    0 15.88 -81.78 ----- 9.7 12.7 266.2 17.8 23.7 -22.2 23.7 -22.0 23.4 -20.7 23.6 -20.9
2025-12-31T18:42:28.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T18:42:28.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T18:42:28.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.695626
2025-12-31T18:42:28.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T18:42:28.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T18:42:28.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T18:42:28.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T18:42:28.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T18:42:28.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T18:42:16', tmtdew=20.39, humidity=26.33, cloud=0.0, wind=15.7, temperature=22.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T16:41:42.086', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T18:42:28.899 [DEBUG] [Thread-132741] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:42:28.981 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T18:42:28.993 [DEBUG] [Thread-132744] [transport.py] [_log()] starting thread (client mode): 0xb9591c30
2025-12-31T18:42:28.993 [DEBUG] [Thread-132744] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:42:29.009 [DEBUG] [Thread-132744] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T18:42:29.009 [INFO] [Thread-132744] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T18:42:29.019 [DEBUG] [Thread-132744] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:42:29.019 [DEBUG] [Thread-132744] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T18:42:29.019 [DEBUG] [Thread-132744] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:42:29.019 [DEBUG] [Thread-132744] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:42:29.019 [DEBUG] [Thread-132744] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:42:29.019 [DEBUG] [Thread-132744] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:42:29.019 [DEBUG] [Thread-132744] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:42:29.019 [DEBUG] [Thread-132744] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:42:29.019 [DEBUG] [Thread-132744] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:42:29.019 [DEBUG] [Thread-132744] [transport.py] [_log()] client lang: <none>
2025-12-31T18:42:29.019 [DEBUG] [Thread-132744] [transport.py] [_log()] server lang: <none>
2025-12-31T18:42:29.019 [DEBUG] [Thread-132744] [transport.py] [_log()] kex follows: False
2025-12-31T18:42:29.019 [DEBUG] [Thread-132744] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:42:29.019 [DEBUG] [Thread-132744] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:42:29.019 [DEBUG] [Thread-132744] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:42:29.019 [DEBUG] [Thread-132744] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:42:29.019 [DEBUG] [Thread-132744] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:42:29.020 [DEBUG] [Thread-132744] [transport.py] [_log()] Compression: none
2025-12-31T18:42:29.020 [DEBUG] [Thread-132744] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:42:29.075 [DEBUG] [Thread-132744] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:42:29.075 [DEBUG] [Thread-132744] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:42:29.075 [DEBUG] [Thread-132744] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T18:42:29.075 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T18:42:29.076 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:42:29.137 [DEBUG] [Thread-132744] [transport.py] [_log()] userauth is OK
2025-12-31T18:42:29.137 [DEBUG] [Thread-132744] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:42:29.137 [DEBUG] [Thread-132744] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:42:29.137 [DEBUG] [Thread-132744] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T18:42:29.137 [DEBUG] [Thread-132744] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:42:29.151 [INFO] [Thread-132744] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:42:29.151 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T18:42:29.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:42:29.964 [DEBUG] [Thread-132744] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:42:29.965 [DEBUG] [Thread-132744] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:42:30.012 [DEBUG] [Thread-132744] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:42:30.012 [DEBUG] [Thread-132744] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:42:30.022 [DEBUG] [Thread-132744] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:42:30.031 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:42:30.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T18:42:30.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T18:42:30.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:42:30.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:42:30.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:42:30.058 [DEBUG] [Thread-132744] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:42:31.413 [DEBUG] [Thread-132746 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:42:35.055 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:42:35.056 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:42:43.035 [DEBUG] [Thread-132747 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:42:58.082 [DEBUG] [Thread-132748 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:43:00.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T18:43:00.081 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T18:43:00.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T18:43:00.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 18, 42, 48), 20.44, 25.83, 0.0, 16.2, 22.49, 0, 0, 0, 2, 0, 0),)
2025-12-31T18:43:00.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 18:42:48
2025-12-31T18:43:00.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T18:43:01.074 [DEBUG] [Thread-132749] [transport.py] [_log()] starting thread (client mode): 0xb95d4340
2025-12-31T18:43:01.074 [DEBUG] [Thread-132749] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:43:01.094 [DEBUG] [Thread-132749] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T18:43:01.094 [INFO] [Thread-132749] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T18:43:01.097 [DEBUG] [Thread-132749] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:43:01.097 [DEBUG] [Thread-132749] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T18:43:01.098 [DEBUG] [Thread-132749] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:43:01.098 [DEBUG] [Thread-132749] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:43:01.098 [DEBUG] [Thread-132749] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:43:01.098 [DEBUG] [Thread-132749] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:43:01.098 [DEBUG] [Thread-132749] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:43:01.098 [DEBUG] [Thread-132749] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:43:01.098 [DEBUG] [Thread-132749] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:43:01.098 [DEBUG] [Thread-132749] [transport.py] [_log()] client lang: <none>
2025-12-31T18:43:01.098 [DEBUG] [Thread-132749] [transport.py] [_log()] server lang: <none>
2025-12-31T18:43:01.098 [DEBUG] [Thread-132749] [transport.py] [_log()] kex follows: False
2025-12-31T18:43:01.098 [DEBUG] [Thread-132749] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:43:01.098 [DEBUG] [Thread-132749] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:43:01.098 [DEBUG] [Thread-132749] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:43:01.098 [DEBUG] [Thread-132749] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:43:01.098 [DEBUG] [Thread-132749] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:43:01.098 [DEBUG] [Thread-132749] [transport.py] [_log()] Compression: none
2025-12-31T18:43:01.098 [DEBUG] [Thread-132749] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:43:01.115 [DEBUG] [Thread-132749] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:43:01.115 [DEBUG] [Thread-132749] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:43:01.116 [DEBUG] [Thread-132749] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T18:43:01.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T18:43:01.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:43:01.117 [DEBUG] [Thread-132749] [transport.py] [_log()] userauth is OK
2025-12-31T18:43:01.118 [DEBUG] [Thread-132749] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:43:01.118 [DEBUG] [Thread-132749] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:43:01.118 [DEBUG] [Thread-132749] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T18:43:01.118 [DEBUG] [Thread-132749] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:43:01.137 [INFO] [Thread-132749] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:43:01.137 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:43:01.806 [DEBUG] [Thread-132749] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:43:01.806 [DEBUG] [Thread-132749] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:43:01.807 [DEBUG] [Thread-132749] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T18:43:01.847 [DEBUG] [Thread-132749] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:43:01.847 [DEBUG] [Thread-132749] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:43:01.850 [DEBUG] [Thread-132749] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:43:01.863 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:43:01.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T18:43:01.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T18:43:01.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T18:43:01.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:43:01.874 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T18:43:01.874 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:43:01.874 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:43:01.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T18:43:01.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.695973 -999.00  +22.40  15.61     31   +4.60 1 2 1 1 1   887    0 15.50 -79.00 ----- 16.8 15.6 265.8 24.4 23.7 -22.1 23.7 -21.7 23.4 -20.8 23.7 -21.0
2025-12-31T18:43:01.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T18:43:01.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T18:43:01.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.695973
2025-12-31T18:43:01.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T18:43:01.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T18:43:01.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T18:43:01.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T18:43:01.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T18:43:01.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T18:42:48', tmtdew=20.44, humidity=25.83, cloud=0.0, wind=16.2, temperature=22.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T16:42:12.067', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T18:43:01.877 [DEBUG] [Thread-132749] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:43:01.958 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T18:43:01.970 [DEBUG] [Thread-132752] [transport.py] [_log()] starting thread (client mode): 0xb6bbb430
2025-12-31T18:43:01.970 [DEBUG] [Thread-132752] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:43:01.985 [DEBUG] [Thread-132752] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T18:43:01.986 [INFO] [Thread-132752] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T18:43:01.993 [DEBUG] [Thread-132752] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:43:01.993 [DEBUG] [Thread-132752] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T18:43:01.993 [DEBUG] [Thread-132752] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:43:01.993 [DEBUG] [Thread-132752] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:43:01.993 [DEBUG] [Thread-132752] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:43:01.993 [DEBUG] [Thread-132752] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:43:01.993 [DEBUG] [Thread-132752] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:43:01.994 [DEBUG] [Thread-132752] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:43:01.994 [DEBUG] [Thread-132752] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:43:01.994 [DEBUG] [Thread-132752] [transport.py] [_log()] client lang: <none>
2025-12-31T18:43:01.994 [DEBUG] [Thread-132752] [transport.py] [_log()] server lang: <none>
2025-12-31T18:43:01.994 [DEBUG] [Thread-132752] [transport.py] [_log()] kex follows: False
2025-12-31T18:43:01.994 [DEBUG] [Thread-132752] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:43:01.994 [DEBUG] [Thread-132752] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:43:01.994 [DEBUG] [Thread-132752] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:43:01.994 [DEBUG] [Thread-132752] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:43:01.994 [DEBUG] [Thread-132752] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:43:01.994 [DEBUG] [Thread-132752] [transport.py] [_log()] Compression: none
2025-12-31T18:43:01.994 [DEBUG] [Thread-132752] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:43:02.054 [DEBUG] [Thread-132752] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:43:02.054 [DEBUG] [Thread-132752] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:43:02.055 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T18:43:02.055 [DEBUG] [Thread-132752] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T18:43:02.056 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:43:02.110 [DEBUG] [Thread-132752] [transport.py] [_log()] userauth is OK
2025-12-31T18:43:02.110 [DEBUG] [Thread-132752] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:43:02.110 [DEBUG] [Thread-132752] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:43:02.110 [DEBUG] [Thread-132752] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T18:43:02.110 [DEBUG] [Thread-132752] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:43:02.129 [INFO] [Thread-132752] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:43:02.129 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T18:43:02.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:43:02.948 [DEBUG] [Thread-132752] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:43:02.948 [DEBUG] [Thread-132752] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:43:02.996 [DEBUG] [Thread-132752] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:43:02.996 [DEBUG] [Thread-132752] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:43:03.005 [DEBUG] [Thread-132752] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:43:03.014 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:43:03.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T18:43:03.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T18:43:03.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:43:03.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:43:03.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:43:03.041 [DEBUG] [Thread-132752] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:43:13.118 [DEBUG] [Thread-132754 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:43:28.164 [DEBUG] [Thread-132755 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:43:31.463 [DEBUG] [Thread-132756 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:43:33.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T18:43:33.064 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T18:43:33.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T18:43:33.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 18, 43, 21), 20.47, 25.78, 0.0, 17.7, 22.54, 0, 0, 0, 2, 0, 0),)
2025-12-31T18:43:33.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 18:43:21
2025-12-31T18:43:33.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T18:43:34.026 [DEBUG] [Thread-132757] [transport.py] [_log()] starting thread (client mode): 0xb1759e40
2025-12-31T18:43:34.026 [DEBUG] [Thread-132757] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:43:34.045 [DEBUG] [Thread-132757] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T18:43:34.045 [INFO] [Thread-132757] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T18:43:34.049 [DEBUG] [Thread-132757] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:43:34.049 [DEBUG] [Thread-132757] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T18:43:34.049 [DEBUG] [Thread-132757] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:43:34.049 [DEBUG] [Thread-132757] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:43:34.049 [DEBUG] [Thread-132757] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:43:34.049 [DEBUG] [Thread-132757] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:43:34.049 [DEBUG] [Thread-132757] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:43:34.049 [DEBUG] [Thread-132757] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:43:34.049 [DEBUG] [Thread-132757] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:43:34.049 [DEBUG] [Thread-132757] [transport.py] [_log()] client lang: <none>
2025-12-31T18:43:34.049 [DEBUG] [Thread-132757] [transport.py] [_log()] server lang: <none>
2025-12-31T18:43:34.049 [DEBUG] [Thread-132757] [transport.py] [_log()] kex follows: False
2025-12-31T18:43:34.049 [DEBUG] [Thread-132757] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:43:34.049 [DEBUG] [Thread-132757] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:43:34.049 [DEBUG] [Thread-132757] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:43:34.049 [DEBUG] [Thread-132757] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:43:34.049 [DEBUG] [Thread-132757] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:43:34.049 [DEBUG] [Thread-132757] [transport.py] [_log()] Compression: none
2025-12-31T18:43:34.049 [DEBUG] [Thread-132757] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:43:34.067 [DEBUG] [Thread-132757] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:43:34.068 [DEBUG] [Thread-132757] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:43:34.068 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T18:43:34.068 [DEBUG] [Thread-132757] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T18:43:34.069 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:43:34.070 [DEBUG] [Thread-132757] [transport.py] [_log()] userauth is OK
2025-12-31T18:43:34.070 [DEBUG] [Thread-132757] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:43:34.070 [DEBUG] [Thread-132757] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:43:34.070 [DEBUG] [Thread-132757] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T18:43:34.070 [DEBUG] [Thread-132757] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:43:34.103 [INFO] [Thread-132757] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:43:34.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:43:34.903 [DEBUG] [Thread-132757] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:43:34.904 [DEBUG] [Thread-132757] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:43:34.904 [DEBUG] [Thread-132757] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T18:43:34.944 [DEBUG] [Thread-132757] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:43:34.944 [DEBUG] [Thread-132757] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:43:34.948 [DEBUG] [Thread-132757] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:43:34.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:43:34.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T18:43:34.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T18:43:34.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T18:43:34.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:43:34.966 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T18:43:34.966 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:43:34.966 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:43:34.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T18:43:34.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.696320 -999.00  +22.40  13.35     31   +4.70 1 2 1 1 1   887    0 15.66 -80.13 ----- 13.3 13.3 266.0 17.3 23.7 -22.2 23.8 -21.9 23.4 -20.7 23.6 -21.0
2025-12-31T18:43:34.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T18:43:34.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T18:43:34.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.696320
2025-12-31T18:43:34.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T18:43:34.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T18:43:34.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T18:43:34.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T18:43:34.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T18:43:34.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T18:43:21', tmtdew=20.47, humidity=25.78, cloud=0.0, wind=17.7, temperature=22.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T16:42:42.048', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T18:43:34.969 [DEBUG] [Thread-132757] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:43:35.048 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T18:43:35.059 [DEBUG] [Thread-132760] [transport.py] [_log()] starting thread (client mode): 0xb1759ae0
2025-12-31T18:43:35.059 [DEBUG] [Thread-132760] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:43:35.074 [DEBUG] [Thread-132760] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T18:43:35.074 [INFO] [Thread-132760] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T18:43:35.081 [DEBUG] [Thread-132760] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:43:35.082 [DEBUG] [Thread-132760] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T18:43:35.082 [DEBUG] [Thread-132760] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:43:35.082 [DEBUG] [Thread-132760] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:43:35.082 [DEBUG] [Thread-132760] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:43:35.082 [DEBUG] [Thread-132760] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:43:35.082 [DEBUG] [Thread-132760] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:43:35.082 [DEBUG] [Thread-132760] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:43:35.082 [DEBUG] [Thread-132760] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:43:35.082 [DEBUG] [Thread-132760] [transport.py] [_log()] client lang: <none>
2025-12-31T18:43:35.082 [DEBUG] [Thread-132760] [transport.py] [_log()] server lang: <none>
2025-12-31T18:43:35.083 [DEBUG] [Thread-132760] [transport.py] [_log()] kex follows: False
2025-12-31T18:43:35.083 [DEBUG] [Thread-132760] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:43:35.083 [DEBUG] [Thread-132760] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:43:35.083 [DEBUG] [Thread-132760] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:43:35.083 [DEBUG] [Thread-132760] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:43:35.083 [DEBUG] [Thread-132760] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:43:35.083 [DEBUG] [Thread-132760] [transport.py] [_log()] Compression: none
2025-12-31T18:43:35.083 [DEBUG] [Thread-132760] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:43:35.138 [DEBUG] [Thread-132760] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:43:35.139 [DEBUG] [Thread-132760] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:43:35.139 [DEBUG] [Thread-132760] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T18:43:35.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T18:43:35.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:43:35.195 [DEBUG] [Thread-132760] [transport.py] [_log()] userauth is OK
2025-12-31T18:43:35.195 [DEBUG] [Thread-132760] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:43:35.195 [DEBUG] [Thread-132760] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:43:35.195 [DEBUG] [Thread-132760] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T18:43:35.196 [DEBUG] [Thread-132760] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:43:35.197 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:43:35.199 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:43:35.219 [INFO] [Thread-132760] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:43:35.220 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T18:43:35.221 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:43:36.060 [DEBUG] [Thread-132760] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:43:36.060 [DEBUG] [Thread-132760] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:43:36.108 [DEBUG] [Thread-132760] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:43:36.108 [DEBUG] [Thread-132760] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:43:36.117 [DEBUG] [Thread-132760] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:43:36.126 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:43:36.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T18:43:36.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T18:43:36.146 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:43:36.146 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:43:36.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:43:36.154 [DEBUG] [Thread-132760] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:43:43.197 [DEBUG] [Thread-132762 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:43:58.249 [DEBUG] [Thread-132763 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:44:06.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T18:44:06.177 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T18:44:06.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T18:44:06.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 18, 43, 53), 20.57, 25.68, 0.0, 15.49, 22.55, 0, 0, 0, 2, 0, 0),)
2025-12-31T18:44:06.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 18:43:53
2025-12-31T18:44:07.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T18:44:07.196 [DEBUG] [Thread-132764] [transport.py] [_log()] starting thread (client mode): 0xb6ba14e0
2025-12-31T18:44:07.196 [DEBUG] [Thread-132764] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:44:07.217 [DEBUG] [Thread-132764] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T18:44:07.217 [INFO] [Thread-132764] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T18:44:07.220 [DEBUG] [Thread-132764] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:44:07.220 [DEBUG] [Thread-132764] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T18:44:07.220 [DEBUG] [Thread-132764] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:44:07.220 [DEBUG] [Thread-132764] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:44:07.220 [DEBUG] [Thread-132764] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:44:07.220 [DEBUG] [Thread-132764] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:44:07.220 [DEBUG] [Thread-132764] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:44:07.220 [DEBUG] [Thread-132764] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:44:07.220 [DEBUG] [Thread-132764] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:44:07.220 [DEBUG] [Thread-132764] [transport.py] [_log()] client lang: <none>
2025-12-31T18:44:07.220 [DEBUG] [Thread-132764] [transport.py] [_log()] server lang: <none>
2025-12-31T18:44:07.220 [DEBUG] [Thread-132764] [transport.py] [_log()] kex follows: False
2025-12-31T18:44:07.220 [DEBUG] [Thread-132764] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:44:07.220 [DEBUG] [Thread-132764] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:44:07.220 [DEBUG] [Thread-132764] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:44:07.221 [DEBUG] [Thread-132764] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:44:07.221 [DEBUG] [Thread-132764] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:44:07.221 [DEBUG] [Thread-132764] [transport.py] [_log()] Compression: none
2025-12-31T18:44:07.221 [DEBUG] [Thread-132764] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:44:07.231 [DEBUG] [Thread-132764] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:44:07.231 [DEBUG] [Thread-132764] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:44:07.231 [DEBUG] [Thread-132764] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T18:44:07.231 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T18:44:07.231 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:44:07.232 [DEBUG] [Thread-132764] [transport.py] [_log()] userauth is OK
2025-12-31T18:44:07.232 [DEBUG] [Thread-132764] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:44:07.232 [DEBUG] [Thread-132764] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:44:07.232 [DEBUG] [Thread-132764] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T18:44:07.232 [DEBUG] [Thread-132764] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:44:07.249 [INFO] [Thread-132764] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:44:07.249 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:44:07.891 [DEBUG] [Thread-132764] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:44:07.891 [DEBUG] [Thread-132764] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:44:07.892 [DEBUG] [Thread-132764] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T18:44:07.932 [DEBUG] [Thread-132764] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:44:07.932 [DEBUG] [Thread-132764] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:44:07.935 [DEBUG] [Thread-132764] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:44:07.947 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:44:07.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T18:44:07.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T18:44:07.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T18:44:07.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:44:07.960 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T18:44:07.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:44:07.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:44:07.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T18:44:07.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.696667 -999.00  +22.50  10.63     31   +4.70 1 2 1 1 1   887    0 16.26 -74.21 ----- 9.9 10.6 251.4 16.2 23.7 -22.1 23.8 -21.7 23.4 -21.2 23.6 -20.9
2025-12-31T18:44:07.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T18:44:07.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T18:44:07.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.696667
2025-12-31T18:44:07.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T18:44:07.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T18:44:07.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T18:44:07.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T18:44:07.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T18:44:07.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T18:43:53', tmtdew=20.57, humidity=25.68, cloud=0.0, wind=15.49, temperature=22.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T16:43:12.029', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T18:44:07.963 [DEBUG] [Thread-132764] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:44:08.047 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T18:44:08.059 [DEBUG] [Thread-132767] [transport.py] [_log()] starting thread (client mode): 0xb1747700
2025-12-31T18:44:08.059 [DEBUG] [Thread-132767] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:44:08.074 [DEBUG] [Thread-132767] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T18:44:08.074 [INFO] [Thread-132767] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T18:44:08.084 [DEBUG] [Thread-132767] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:44:08.085 [DEBUG] [Thread-132767] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T18:44:08.085 [DEBUG] [Thread-132767] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:44:08.085 [DEBUG] [Thread-132767] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:44:08.085 [DEBUG] [Thread-132767] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:44:08.085 [DEBUG] [Thread-132767] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:44:08.085 [DEBUG] [Thread-132767] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:44:08.085 [DEBUG] [Thread-132767] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:44:08.085 [DEBUG] [Thread-132767] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:44:08.085 [DEBUG] [Thread-132767] [transport.py] [_log()] client lang: <none>
2025-12-31T18:44:08.085 [DEBUG] [Thread-132767] [transport.py] [_log()] server lang: <none>
2025-12-31T18:44:08.085 [DEBUG] [Thread-132767] [transport.py] [_log()] kex follows: False
2025-12-31T18:44:08.085 [DEBUG] [Thread-132767] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:44:08.085 [DEBUG] [Thread-132767] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:44:08.086 [DEBUG] [Thread-132767] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:44:08.086 [DEBUG] [Thread-132767] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:44:08.086 [DEBUG] [Thread-132767] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:44:08.086 [DEBUG] [Thread-132767] [transport.py] [_log()] Compression: none
2025-12-31T18:44:08.086 [DEBUG] [Thread-132767] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:44:08.139 [DEBUG] [Thread-132767] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:44:08.139 [DEBUG] [Thread-132767] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:44:08.140 [DEBUG] [Thread-132767] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T18:44:08.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T18:44:08.141 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:44:08.197 [DEBUG] [Thread-132767] [transport.py] [_log()] userauth is OK
2025-12-31T18:44:08.198 [DEBUG] [Thread-132767] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:44:08.198 [DEBUG] [Thread-132767] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:44:08.198 [DEBUG] [Thread-132767] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T18:44:08.198 [DEBUG] [Thread-132767] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:44:08.221 [INFO] [Thread-132767] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:44:08.222 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T18:44:08.222 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:44:09.042 [DEBUG] [Thread-132767] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:44:09.043 [DEBUG] [Thread-132767] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:44:09.091 [DEBUG] [Thread-132767] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:44:09.091 [DEBUG] [Thread-132767] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:44:09.100 [DEBUG] [Thread-132767] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:44:09.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:44:09.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-12-31T18:44:09.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T18:44:09.128 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:44:09.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:44:09.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:44:09.136 [DEBUG] [Thread-132767] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:44:13.289 [DEBUG] [Thread-132769 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:44:28.341 [DEBUG] [Thread-132770 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:44:31.518 [DEBUG] [Thread-132771 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:44:35.338 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:44:35.339 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:44:39.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T18:44:39.160 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T18:44:39.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T18:44:39.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 18, 44, 25), 20.58, 25.68, 0.0, 16.0, 22.57, 0, 0, 0, 2, 0, 0),)
2025-12-31T18:44:39.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 18:44:25
2025-12-31T18:44:39.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T18:44:40.144 [DEBUG] [Thread-132772] [transport.py] [_log()] starting thread (client mode): 0xb6bb0af0
2025-12-31T18:44:40.144 [DEBUG] [Thread-132772] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:44:40.163 [DEBUG] [Thread-132772] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T18:44:40.163 [INFO] [Thread-132772] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T18:44:40.166 [DEBUG] [Thread-132772] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:44:40.166 [DEBUG] [Thread-132772] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T18:44:40.166 [DEBUG] [Thread-132772] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:44:40.167 [DEBUG] [Thread-132772] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:44:40.167 [DEBUG] [Thread-132772] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:44:40.167 [DEBUG] [Thread-132772] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:44:40.167 [DEBUG] [Thread-132772] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:44:40.167 [DEBUG] [Thread-132772] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:44:40.167 [DEBUG] [Thread-132772] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:44:40.167 [DEBUG] [Thread-132772] [transport.py] [_log()] client lang: <none>
2025-12-31T18:44:40.167 [DEBUG] [Thread-132772] [transport.py] [_log()] server lang: <none>
2025-12-31T18:44:40.167 [DEBUG] [Thread-132772] [transport.py] [_log()] kex follows: False
2025-12-31T18:44:40.167 [DEBUG] [Thread-132772] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:44:40.167 [DEBUG] [Thread-132772] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:44:40.167 [DEBUG] [Thread-132772] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:44:40.167 [DEBUG] [Thread-132772] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:44:40.167 [DEBUG] [Thread-132772] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:44:40.167 [DEBUG] [Thread-132772] [transport.py] [_log()] Compression: none
2025-12-31T18:44:40.167 [DEBUG] [Thread-132772] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:44:40.181 [DEBUG] [Thread-132772] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:44:40.182 [DEBUG] [Thread-132772] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:44:40.182 [DEBUG] [Thread-132772] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T18:44:40.182 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T18:44:40.182 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:44:40.183 [DEBUG] [Thread-132772] [transport.py] [_log()] userauth is OK
2025-12-31T18:44:40.183 [DEBUG] [Thread-132772] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:44:40.183 [DEBUG] [Thread-132772] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:44:40.183 [DEBUG] [Thread-132772] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T18:44:40.183 [DEBUG] [Thread-132772] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:44:40.194 [INFO] [Thread-132772] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:44:40.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:44:41.026 [DEBUG] [Thread-132772] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:44:41.026 [DEBUG] [Thread-132772] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:44:41.026 [DEBUG] [Thread-132772] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T18:44:41.066 [DEBUG] [Thread-132772] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:44:41.066 [DEBUG] [Thread-132772] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:44:41.069 [DEBUG] [Thread-132772] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:44:41.081 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:44:41.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T18:44:41.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T18:44:41.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T18:44:41.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:44:41.086 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T18:44:41.086 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:44:41.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:44:41.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T18:44:41.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.697015 -999.00  +22.50  10.75     31   +4.70 1 2 1 1 1   887    0 15.90 -69.88 ----- 10.9 10.8 260.2 20.0 23.8 -22.0 23.7 -21.7 23.5 -20.6 23.7 -21.0
2025-12-31T18:44:41.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T18:44:41.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T18:44:41.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.697015
2025-12-31T18:44:41.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T18:44:41.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T18:44:41.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T18:44:41.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T18:44:41.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T18:44:41.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T18:44:25', tmtdew=20.58, humidity=25.68, cloud=0.0, wind=16.0, temperature=22.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T16:43:42.096', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T18:44:41.087 [DEBUG] [Thread-132772] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:44:41.162 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T18:44:41.173 [DEBUG] [Thread-132775] [transport.py] [_log()] starting thread (client mode): 0xb6bb0c70
2025-12-31T18:44:41.173 [DEBUG] [Thread-132775] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:44:41.188 [DEBUG] [Thread-132775] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T18:44:41.188 [INFO] [Thread-132775] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T18:44:41.195 [DEBUG] [Thread-132775] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:44:41.195 [DEBUG] [Thread-132775] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T18:44:41.195 [DEBUG] [Thread-132775] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:44:41.195 [DEBUG] [Thread-132775] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:44:41.195 [DEBUG] [Thread-132775] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:44:41.195 [DEBUG] [Thread-132775] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:44:41.195 [DEBUG] [Thread-132775] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:44:41.195 [DEBUG] [Thread-132775] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:44:41.195 [DEBUG] [Thread-132775] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:44:41.195 [DEBUG] [Thread-132775] [transport.py] [_log()] client lang: <none>
2025-12-31T18:44:41.196 [DEBUG] [Thread-132775] [transport.py] [_log()] server lang: <none>
2025-12-31T18:44:41.196 [DEBUG] [Thread-132775] [transport.py] [_log()] kex follows: False
2025-12-31T18:44:41.196 [DEBUG] [Thread-132775] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:44:41.196 [DEBUG] [Thread-132775] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:44:41.196 [DEBUG] [Thread-132775] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:44:41.196 [DEBUG] [Thread-132775] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:44:41.196 [DEBUG] [Thread-132775] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:44:41.196 [DEBUG] [Thread-132775] [transport.py] [_log()] Compression: none
2025-12-31T18:44:41.196 [DEBUG] [Thread-132775] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:44:41.250 [DEBUG] [Thread-132775] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:44:41.250 [DEBUG] [Thread-132775] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:44:41.251 [DEBUG] [Thread-132775] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T18:44:41.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T18:44:41.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:44:41.307 [DEBUG] [Thread-132775] [transport.py] [_log()] userauth is OK
2025-12-31T18:44:41.308 [DEBUG] [Thread-132775] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:44:41.308 [DEBUG] [Thread-132775] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:44:41.308 [DEBUG] [Thread-132775] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T18:44:41.308 [DEBUG] [Thread-132775] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:44:41.326 [INFO] [Thread-132775] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:44:41.326 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T18:44:41.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:44:42.145 [DEBUG] [Thread-132775] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:44:42.146 [DEBUG] [Thread-132775] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:44:42.193 [DEBUG] [Thread-132775] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:44:42.194 [DEBUG] [Thread-132775] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:44:42.202 [DEBUG] [Thread-132775] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:44:42.210 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:44:42.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T18:44:42.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T18:44:42.226 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:44:42.226 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:44:42.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:44:42.234 [DEBUG] [Thread-132775] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:44:43.374 [DEBUG] [Thread-132777 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:44:58.416 [DEBUG] [Thread-132778 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:45:12.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T18:45:12.257 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T18:45:12.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T18:45:12.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 18, 44, 57), 20.32, 26.4, 0.0, 20.26, 22.74, 0, 0, 0, 2, 0, 0),)
2025-12-31T18:45:12.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 18:44:57
2025-12-31T18:45:13.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T18:45:13.236 [DEBUG] [Thread-132779] [transport.py] [_log()] starting thread (client mode): 0xb957a8c0
2025-12-31T18:45:13.236 [DEBUG] [Thread-132779] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:45:13.258 [DEBUG] [Thread-132779] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T18:45:13.258 [INFO] [Thread-132779] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T18:45:13.262 [DEBUG] [Thread-132779] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:45:13.262 [DEBUG] [Thread-132779] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T18:45:13.262 [DEBUG] [Thread-132779] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:45:13.262 [DEBUG] [Thread-132779] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:45:13.262 [DEBUG] [Thread-132779] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:45:13.262 [DEBUG] [Thread-132779] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:45:13.262 [DEBUG] [Thread-132779] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:45:13.262 [DEBUG] [Thread-132779] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:45:13.263 [DEBUG] [Thread-132779] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:45:13.263 [DEBUG] [Thread-132779] [transport.py] [_log()] client lang: <none>
2025-12-31T18:45:13.263 [DEBUG] [Thread-132779] [transport.py] [_log()] server lang: <none>
2025-12-31T18:45:13.263 [DEBUG] [Thread-132779] [transport.py] [_log()] kex follows: False
2025-12-31T18:45:13.263 [DEBUG] [Thread-132779] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:45:13.263 [DEBUG] [Thread-132779] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:45:13.263 [DEBUG] [Thread-132779] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:45:13.263 [DEBUG] [Thread-132779] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:45:13.263 [DEBUG] [Thread-132779] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:45:13.263 [DEBUG] [Thread-132779] [transport.py] [_log()] Compression: none
2025-12-31T18:45:13.263 [DEBUG] [Thread-132779] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:45:13.278 [DEBUG] [Thread-132779] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:45:13.279 [DEBUG] [Thread-132779] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:45:13.280 [DEBUG] [Thread-132779] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T18:45:13.280 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T18:45:13.281 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:45:13.283 [DEBUG] [Thread-132779] [transport.py] [_log()] userauth is OK
2025-12-31T18:45:13.283 [DEBUG] [Thread-132779] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:45:13.284 [DEBUG] [Thread-132779] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:45:13.284 [DEBUG] [Thread-132779] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T18:45:13.284 [DEBUG] [Thread-132779] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:45:13.304 [INFO] [Thread-132779] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:45:13.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:45:13.448 [DEBUG] [Thread-132781 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:45:18.518 [DEBUG] [Thread-132779] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:45:18.518 [DEBUG] [Thread-132779] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:45:18.519 [DEBUG] [Thread-132779] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T18:45:18.559 [DEBUG] [Thread-132779] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:45:18.559 [DEBUG] [Thread-132779] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:45:18.563 [DEBUG] [Thread-132779] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:45:18.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:45:18.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T18:45:18.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T18:45:18.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T18:45:18.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:45:18.596 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T18:45:18.596 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:45:18.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:45:18.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T18:45:18.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.697362 -999.00  +22.60  11.22     31   +4.90 1 2 1 1 1   887    0 15.84 -65.78 ----- 8.8 11.2 274.8 19.1 23.8 -22.2 23.8 -21.6 23.4 -21.0 23.7 -21.0
2025-12-31T18:45:18.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T18:45:18.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T18:45:18.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.697362
2025-12-31T18:45:18.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T18:45:18.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T18:45:18.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T18:45:18.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T18:45:18.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T18:45:18.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T18:44:57', tmtdew=20.32, humidity=26.4, cloud=0.0, wind=20.26, temperature=22.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T16:44:12.077', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T18:45:18.600 [DEBUG] [Thread-132779] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:45:18.683 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T18:45:18.697 [DEBUG] [Thread-132783] [transport.py] [_log()] starting thread (client mode): 0xb95f0fa0
2025-12-31T18:45:18.697 [DEBUG] [Thread-132783] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:45:18.712 [DEBUG] [Thread-132783] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T18:45:18.712 [INFO] [Thread-132783] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T18:45:18.720 [DEBUG] [Thread-132783] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:45:18.720 [DEBUG] [Thread-132783] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T18:45:18.720 [DEBUG] [Thread-132783] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:45:18.720 [DEBUG] [Thread-132783] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:45:18.720 [DEBUG] [Thread-132783] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:45:18.720 [DEBUG] [Thread-132783] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:45:18.720 [DEBUG] [Thread-132783] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:45:18.720 [DEBUG] [Thread-132783] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:45:18.720 [DEBUG] [Thread-132783] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:45:18.720 [DEBUG] [Thread-132783] [transport.py] [_log()] client lang: <none>
2025-12-31T18:45:18.720 [DEBUG] [Thread-132783] [transport.py] [_log()] server lang: <none>
2025-12-31T18:45:18.720 [DEBUG] [Thread-132783] [transport.py] [_log()] kex follows: False
2025-12-31T18:45:18.720 [DEBUG] [Thread-132783] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:45:18.720 [DEBUG] [Thread-132783] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:45:18.720 [DEBUG] [Thread-132783] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:45:18.720 [DEBUG] [Thread-132783] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:45:18.720 [DEBUG] [Thread-132783] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:45:18.720 [DEBUG] [Thread-132783] [transport.py] [_log()] Compression: none
2025-12-31T18:45:18.720 [DEBUG] [Thread-132783] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:45:18.775 [DEBUG] [Thread-132783] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:45:18.775 [DEBUG] [Thread-132783] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:45:18.775 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T18:45:18.775 [DEBUG] [Thread-132783] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T18:45:18.775 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:45:18.832 [DEBUG] [Thread-132783] [transport.py] [_log()] userauth is OK
2025-12-31T18:45:18.832 [DEBUG] [Thread-132783] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:45:18.832 [DEBUG] [Thread-132783] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:45:18.832 [DEBUG] [Thread-132783] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T18:45:18.832 [DEBUG] [Thread-132783] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:45:18.846 [INFO] [Thread-132783] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:45:18.846 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T18:45:18.846 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:45:19.688 [DEBUG] [Thread-132783] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:45:19.688 [DEBUG] [Thread-132783] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:45:19.736 [DEBUG] [Thread-132783] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:45:19.736 [DEBUG] [Thread-132783] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:45:19.744 [DEBUG] [Thread-132783] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:45:19.752 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:45:19.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T18:45:19.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T18:45:19.768 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:45:19.768 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:45:19.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:45:19.776 [DEBUG] [Thread-132783] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:45:28.480 [DEBUG] [Thread-132785 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:45:31.568 [DEBUG] [Thread-132786 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:45:35.480 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:45:35.481 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:45:43.529 [DEBUG] [Thread-132787 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:45:49.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T18:45:49.798 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T18:45:49.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T18:45:50.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 18, 45, 29), 19.94, 27.13, 0.0, 24.01, 22.77, 0, 0, 0, 2, 0, 0),)
2025-12-31T18:45:50.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 18:45:29
2025-12-31T18:45:50.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T18:45:50.789 [DEBUG] [Thread-132788] [transport.py] [_log()] starting thread (client mode): 0xb1765a80
2025-12-31T18:45:50.789 [DEBUG] [Thread-132788] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:45:50.807 [DEBUG] [Thread-132788] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T18:45:50.807 [INFO] [Thread-132788] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T18:45:50.810 [DEBUG] [Thread-132788] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:45:50.811 [DEBUG] [Thread-132788] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T18:45:50.811 [DEBUG] [Thread-132788] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:45:50.811 [DEBUG] [Thread-132788] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:45:50.811 [DEBUG] [Thread-132788] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:45:50.811 [DEBUG] [Thread-132788] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:45:50.811 [DEBUG] [Thread-132788] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:45:50.811 [DEBUG] [Thread-132788] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:45:50.811 [DEBUG] [Thread-132788] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:45:50.811 [DEBUG] [Thread-132788] [transport.py] [_log()] client lang: <none>
2025-12-31T18:45:50.811 [DEBUG] [Thread-132788] [transport.py] [_log()] server lang: <none>
2025-12-31T18:45:50.811 [DEBUG] [Thread-132788] [transport.py] [_log()] kex follows: False
2025-12-31T18:45:50.811 [DEBUG] [Thread-132788] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:45:50.811 [DEBUG] [Thread-132788] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:45:50.811 [DEBUG] [Thread-132788] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:45:50.811 [DEBUG] [Thread-132788] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:45:50.812 [DEBUG] [Thread-132788] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:45:50.812 [DEBUG] [Thread-132788] [transport.py] [_log()] Compression: none
2025-12-31T18:45:50.812 [DEBUG] [Thread-132788] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:45:50.831 [DEBUG] [Thread-132788] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:45:50.831 [DEBUG] [Thread-132788] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:45:50.832 [DEBUG] [Thread-132788] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T18:45:50.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T18:45:50.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:45:50.834 [DEBUG] [Thread-132788] [transport.py] [_log()] userauth is OK
2025-12-31T18:45:50.834 [DEBUG] [Thread-132788] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:45:50.834 [DEBUG] [Thread-132788] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:45:50.834 [DEBUG] [Thread-132788] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T18:45:50.834 [DEBUG] [Thread-132788] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:45:50.858 [INFO] [Thread-132788] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:45:50.859 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:45:51.457 [DEBUG] [Thread-132788] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:45:51.458 [DEBUG] [Thread-132788] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:45:51.458 [DEBUG] [Thread-132788] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T18:45:51.499 [DEBUG] [Thread-132788] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:45:51.500 [DEBUG] [Thread-132788] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:45:51.505 [DEBUG] [Thread-132788] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:45:51.517 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:45:51.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T18:45:51.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T18:45:51.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T18:45:51.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:45:51.526 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T18:45:51.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:45:51.526 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:45:51.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T18:45:51.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.698056 -999.00  +22.60  16.86     34   +6.20 1 2 1 1 1   887    0 15.85 -65.89 ----- 14.6 16.9 244.2 20.6 23.8 -21.7 23.9 -21.5 23.6 -21.3 23.7 -20.8
2025-12-31T18:45:51.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T18:45:51.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T18:45:51.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.698056
2025-12-31T18:45:51.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T18:45:51.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T18:45:51.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T18:45:51.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T18:45:51.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T18:45:51.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T18:45:29', tmtdew=19.94, humidity=27.13, cloud=0.0, wind=24.01, temperature=22.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T16:45:12.038', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T18:45:51.529 [DEBUG] [Thread-132788] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:45:51.613 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T18:45:51.625 [DEBUG] [Thread-132791] [transport.py] [_log()] starting thread (client mode): 0xb9593c10
2025-12-31T18:45:51.625 [DEBUG] [Thread-132791] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:45:51.640 [DEBUG] [Thread-132791] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T18:45:51.640 [INFO] [Thread-132791] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T18:45:51.647 [DEBUG] [Thread-132791] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:45:51.648 [DEBUG] [Thread-132791] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T18:45:51.648 [DEBUG] [Thread-132791] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:45:51.648 [DEBUG] [Thread-132791] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:45:51.648 [DEBUG] [Thread-132791] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:45:51.648 [DEBUG] [Thread-132791] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:45:51.648 [DEBUG] [Thread-132791] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:45:51.648 [DEBUG] [Thread-132791] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:45:51.648 [DEBUG] [Thread-132791] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:45:51.648 [DEBUG] [Thread-132791] [transport.py] [_log()] client lang: <none>
2025-12-31T18:45:51.648 [DEBUG] [Thread-132791] [transport.py] [_log()] server lang: <none>
2025-12-31T18:45:51.648 [DEBUG] [Thread-132791] [transport.py] [_log()] kex follows: False
2025-12-31T18:45:51.648 [DEBUG] [Thread-132791] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:45:51.648 [DEBUG] [Thread-132791] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:45:51.648 [DEBUG] [Thread-132791] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:45:51.648 [DEBUG] [Thread-132791] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:45:51.648 [DEBUG] [Thread-132791] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:45:51.648 [DEBUG] [Thread-132791] [transport.py] [_log()] Compression: none
2025-12-31T18:45:51.648 [DEBUG] [Thread-132791] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:45:51.708 [DEBUG] [Thread-132791] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:45:51.709 [DEBUG] [Thread-132791] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:45:51.709 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T18:45:51.710 [DEBUG] [Thread-132791] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T18:45:51.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:45:51.765 [DEBUG] [Thread-132791] [transport.py] [_log()] userauth is OK
2025-12-31T18:45:51.765 [DEBUG] [Thread-132791] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:45:51.765 [DEBUG] [Thread-132791] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:45:51.765 [DEBUG] [Thread-132791] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T18:45:51.765 [DEBUG] [Thread-132791] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:45:51.785 [INFO] [Thread-132791] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:45:51.785 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T18:45:51.785 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:45:52.620 [DEBUG] [Thread-132791] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:45:52.620 [DEBUG] [Thread-132791] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:45:52.668 [DEBUG] [Thread-132791] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:45:52.669 [DEBUG] [Thread-132791] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:45:52.677 [DEBUG] [Thread-132791] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:45:52.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:45:52.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T18:45:52.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T18:45:52.703 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:45:52.703 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:45:52.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:45:52.711 [DEBUG] [Thread-132791] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:45:58.560 [DEBUG] [Thread-132793 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:46:13.601 [DEBUG] [Thread-132794 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:46:22.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T18:46:22.734 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T18:46:22.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T18:46:23.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 18, 46, 1), 19.62, 27.75, 0.0, 23.13, 22.79, 0, 0, 0, 2, 0, 0),)
2025-12-31T18:46:23.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 18:46:01
2025-12-31T18:46:23.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T18:46:23.715 [DEBUG] [Thread-132795] [transport.py] [_log()] starting thread (client mode): 0xb957af20
2025-12-31T18:46:23.716 [DEBUG] [Thread-132795] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:46:23.737 [DEBUG] [Thread-132795] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T18:46:23.737 [INFO] [Thread-132795] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T18:46:23.740 [DEBUG] [Thread-132795] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:46:23.740 [DEBUG] [Thread-132795] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T18:46:23.740 [DEBUG] [Thread-132795] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:46:23.740 [DEBUG] [Thread-132795] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:46:23.741 [DEBUG] [Thread-132795] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:46:23.741 [DEBUG] [Thread-132795] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:46:23.741 [DEBUG] [Thread-132795] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:46:23.741 [DEBUG] [Thread-132795] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:46:23.741 [DEBUG] [Thread-132795] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:46:23.741 [DEBUG] [Thread-132795] [transport.py] [_log()] client lang: <none>
2025-12-31T18:46:23.741 [DEBUG] [Thread-132795] [transport.py] [_log()] server lang: <none>
2025-12-31T18:46:23.741 [DEBUG] [Thread-132795] [transport.py] [_log()] kex follows: False
2025-12-31T18:46:23.741 [DEBUG] [Thread-132795] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:46:23.741 [DEBUG] [Thread-132795] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:46:23.741 [DEBUG] [Thread-132795] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:46:23.741 [DEBUG] [Thread-132795] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:46:23.741 [DEBUG] [Thread-132795] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:46:23.741 [DEBUG] [Thread-132795] [transport.py] [_log()] Compression: none
2025-12-31T18:46:23.741 [DEBUG] [Thread-132795] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:46:23.759 [DEBUG] [Thread-132795] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:46:23.759 [DEBUG] [Thread-132795] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:46:23.760 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T18:46:23.760 [DEBUG] [Thread-132795] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T18:46:23.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:46:23.762 [DEBUG] [Thread-132795] [transport.py] [_log()] userauth is OK
2025-12-31T18:46:23.763 [DEBUG] [Thread-132795] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:46:23.763 [DEBUG] [Thread-132795] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:46:23.763 [DEBUG] [Thread-132795] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T18:46:23.763 [DEBUG] [Thread-132795] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:46:23.799 [INFO] [Thread-132795] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:46:23.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:46:24.585 [DEBUG] [Thread-132795] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:46:24.586 [DEBUG] [Thread-132795] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:46:24.586 [DEBUG] [Thread-132795] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T18:46:24.627 [DEBUG] [Thread-132795] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:46:24.627 [DEBUG] [Thread-132795] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:46:24.629 [DEBUG] [Thread-132795] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:46:24.640 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:46:24.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T18:46:24.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T18:46:24.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T18:46:24.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:46:24.651 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T18:46:24.651 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:46:24.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:46:24.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T18:46:24.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.698404 -999.00  +22.50  19.31     35   +6.50 1 2 1 1 1   887    0 15.67 -71.28 ----- 17.5 19.3 265.8 21.6 23.8 -22.1 23.8 -21.6 23.6 -20.7 23.8 -21.1
2025-12-31T18:46:24.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T18:46:24.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T18:46:24.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.698404
2025-12-31T18:46:24.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T18:46:24.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T18:46:24.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T18:46:24.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T18:46:24.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T18:46:24.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T18:46:01', tmtdew=19.62, humidity=27.75, cloud=0.0, wind=23.13, temperature=22.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T16:45:42.106', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T18:46:24.654 [DEBUG] [Thread-132795] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:46:24.737 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T18:46:24.748 [DEBUG] [Thread-132798] [transport.py] [_log()] starting thread (client mode): 0xb95785e0
2025-12-31T18:46:24.748 [DEBUG] [Thread-132798] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:46:24.765 [DEBUG] [Thread-132798] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T18:46:24.765 [INFO] [Thread-132798] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T18:46:24.773 [DEBUG] [Thread-132798] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:46:24.773 [DEBUG] [Thread-132798] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T18:46:24.773 [DEBUG] [Thread-132798] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:46:24.773 [DEBUG] [Thread-132798] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:46:24.773 [DEBUG] [Thread-132798] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:46:24.773 [DEBUG] [Thread-132798] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:46:24.773 [DEBUG] [Thread-132798] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:46:24.773 [DEBUG] [Thread-132798] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:46:24.773 [DEBUG] [Thread-132798] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:46:24.773 [DEBUG] [Thread-132798] [transport.py] [_log()] client lang: <none>
2025-12-31T18:46:24.773 [DEBUG] [Thread-132798] [transport.py] [_log()] server lang: <none>
2025-12-31T18:46:24.773 [DEBUG] [Thread-132798] [transport.py] [_log()] kex follows: False
2025-12-31T18:46:24.773 [DEBUG] [Thread-132798] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:46:24.773 [DEBUG] [Thread-132798] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:46:24.774 [DEBUG] [Thread-132798] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:46:24.774 [DEBUG] [Thread-132798] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:46:24.774 [DEBUG] [Thread-132798] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:46:24.774 [DEBUG] [Thread-132798] [transport.py] [_log()] Compression: none
2025-12-31T18:46:24.774 [DEBUG] [Thread-132798] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:46:24.831 [DEBUG] [Thread-132798] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:46:24.831 [DEBUG] [Thread-132798] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:46:24.832 [DEBUG] [Thread-132798] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T18:46:24.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T18:46:24.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:46:24.890 [DEBUG] [Thread-132798] [transport.py] [_log()] userauth is OK
2025-12-31T18:46:24.891 [DEBUG] [Thread-132798] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:46:24.891 [DEBUG] [Thread-132798] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:46:24.891 [DEBUG] [Thread-132798] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T18:46:24.891 [DEBUG] [Thread-132798] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:46:24.910 [INFO] [Thread-132798] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:46:24.911 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T18:46:24.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:46:25.781 [DEBUG] [Thread-132798] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:46:25.781 [DEBUG] [Thread-132798] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:46:25.829 [DEBUG] [Thread-132798] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:46:25.830 [DEBUG] [Thread-132798] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:46:25.838 [DEBUG] [Thread-132798] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:46:25.847 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:46:25.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T18:46:25.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T18:46:25.863 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:46:25.863 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:46:25.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:46:25.871 [DEBUG] [Thread-132798] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:46:28.636 [DEBUG] [Thread-132800 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:46:31.622 [DEBUG] [Thread-132801 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:46:35.619 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:46:35.620 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:46:43.680 [DEBUG] [Thread-132802 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:46:55.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T18:46:55.894 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T18:46:55.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T18:46:56.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 18, 46, 34), 18.65, 29.7, 0.0, 24.95, 23.14, 0, 0, 0, 2, 0, 0),)
2025-12-31T18:46:56.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 18:46:34
2025-12-31T18:46:56.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T18:46:56.888 [DEBUG] [Thread-132803] [transport.py] [_log()] starting thread (client mode): 0xb1746bf0
2025-12-31T18:46:56.889 [DEBUG] [Thread-132803] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:46:56.909 [DEBUG] [Thread-132803] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T18:46:56.909 [INFO] [Thread-132803] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T18:46:56.912 [DEBUG] [Thread-132803] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:46:56.912 [DEBUG] [Thread-132803] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T18:46:56.912 [DEBUG] [Thread-132803] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:46:56.912 [DEBUG] [Thread-132803] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:46:56.912 [DEBUG] [Thread-132803] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:46:56.912 [DEBUG] [Thread-132803] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:46:56.912 [DEBUG] [Thread-132803] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:46:56.912 [DEBUG] [Thread-132803] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:46:56.912 [DEBUG] [Thread-132803] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:46:56.912 [DEBUG] [Thread-132803] [transport.py] [_log()] client lang: <none>
2025-12-31T18:46:56.912 [DEBUG] [Thread-132803] [transport.py] [_log()] server lang: <none>
2025-12-31T18:46:56.912 [DEBUG] [Thread-132803] [transport.py] [_log()] kex follows: False
2025-12-31T18:46:56.912 [DEBUG] [Thread-132803] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:46:56.912 [DEBUG] [Thread-132803] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:46:56.912 [DEBUG] [Thread-132803] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:46:56.912 [DEBUG] [Thread-132803] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:46:56.912 [DEBUG] [Thread-132803] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:46:56.912 [DEBUG] [Thread-132803] [transport.py] [_log()] Compression: none
2025-12-31T18:46:56.913 [DEBUG] [Thread-132803] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:46:56.929 [DEBUG] [Thread-132803] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:46:56.930 [DEBUG] [Thread-132803] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:46:56.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T18:46:56.931 [DEBUG] [Thread-132803] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T18:46:56.932 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:46:56.933 [DEBUG] [Thread-132803] [transport.py] [_log()] userauth is OK
2025-12-31T18:46:56.933 [DEBUG] [Thread-132803] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:46:56.934 [DEBUG] [Thread-132803] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:46:56.934 [DEBUG] [Thread-132803] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T18:46:56.934 [DEBUG] [Thread-132803] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:46:56.953 [INFO] [Thread-132803] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:46:56.954 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:46:57.581 [DEBUG] [Thread-132803] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:46:57.582 [DEBUG] [Thread-132803] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:46:57.582 [DEBUG] [Thread-132803] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T18:46:57.623 [DEBUG] [Thread-132803] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:46:57.623 [DEBUG] [Thread-132803] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:46:57.627 [DEBUG] [Thread-132803] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:46:57.638 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:46:57.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T18:46:57.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T18:46:57.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T18:46:57.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:46:57.652 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T18:46:57.652 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:46:57.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:46:57.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T18:46:57.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.698751 -999.00  +22.40  16.35     36   +6.60 1 2 1 1 1   887    0 15.89 -77.30 ----- 12.0 16.4 255.4 20.2 23.8 -22.3 23.8 -21.6 23.6 -20.7 23.8 -21.5
2025-12-31T18:46:57.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T18:46:57.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T18:46:57.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.698751
2025-12-31T18:46:57.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T18:46:57.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T18:46:57.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T18:46:57.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T18:46:57.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T18:46:57.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T18:46:34', tmtdew=18.65, humidity=29.7, cloud=0.0, wind=24.95, temperature=23.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T16:46:12.086', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T18:46:57.655 [DEBUG] [Thread-132803] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:46:57.738 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T18:46:57.751 [DEBUG] [Thread-132806] [transport.py] [_log()] starting thread (client mode): 0xb95d6440
2025-12-31T18:46:57.751 [DEBUG] [Thread-132806] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:46:57.766 [DEBUG] [Thread-132806] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T18:46:57.766 [INFO] [Thread-132806] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T18:46:57.773 [DEBUG] [Thread-132806] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:46:57.773 [DEBUG] [Thread-132806] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T18:46:57.773 [DEBUG] [Thread-132806] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:46:57.774 [DEBUG] [Thread-132806] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:46:57.774 [DEBUG] [Thread-132806] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:46:57.774 [DEBUG] [Thread-132806] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:46:57.774 [DEBUG] [Thread-132806] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:46:57.774 [DEBUG] [Thread-132806] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:46:57.774 [DEBUG] [Thread-132806] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:46:57.774 [DEBUG] [Thread-132806] [transport.py] [_log()] client lang: <none>
2025-12-31T18:46:57.774 [DEBUG] [Thread-132806] [transport.py] [_log()] server lang: <none>
2025-12-31T18:46:57.774 [DEBUG] [Thread-132806] [transport.py] [_log()] kex follows: False
2025-12-31T18:46:57.774 [DEBUG] [Thread-132806] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:46:57.774 [DEBUG] [Thread-132806] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:46:57.774 [DEBUG] [Thread-132806] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:46:57.774 [DEBUG] [Thread-132806] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:46:57.774 [DEBUG] [Thread-132806] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:46:57.774 [DEBUG] [Thread-132806] [transport.py] [_log()] Compression: none
2025-12-31T18:46:57.774 [DEBUG] [Thread-132806] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:46:57.831 [DEBUG] [Thread-132806] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:46:57.831 [DEBUG] [Thread-132806] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:46:57.832 [DEBUG] [Thread-132806] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T18:46:57.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T18:46:57.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:46:57.887 [DEBUG] [Thread-132806] [transport.py] [_log()] userauth is OK
2025-12-31T18:46:57.887 [DEBUG] [Thread-132806] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:46:57.887 [DEBUG] [Thread-132806] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:46:57.887 [DEBUG] [Thread-132806] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T18:46:57.888 [DEBUG] [Thread-132806] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:46:57.906 [INFO] [Thread-132806] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:46:57.906 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T18:46:57.907 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:46:58.717 [DEBUG] [Thread-132808 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:46:58.728 [DEBUG] [Thread-132806] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:46:58.728 [DEBUG] [Thread-132806] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:46:58.776 [DEBUG] [Thread-132806] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:46:58.776 [DEBUG] [Thread-132806] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:46:58.785 [DEBUG] [Thread-132806] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:46:58.794 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:46:58.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T18:46:58.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T18:46:58.811 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:46:58.811 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:46:58.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:46:58.820 [DEBUG] [Thread-132806] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:47:13.773 [DEBUG] [Thread-132809 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:47:28.811 [DEBUG] [Thread-132810 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:47:28.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T18:47:28.843 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T18:47:28.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T18:47:29.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 18, 47, 6), 18.15, 30.58, 0.0, 14.52, 22.57, 0, 0, 0, 2, 0, 0),)
2025-12-31T18:47:29.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 18:47:06
2025-12-31T18:47:29.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T18:47:29.848 [DEBUG] [Thread-132811] [transport.py] [_log()] starting thread (client mode): 0xb9590ac0
2025-12-31T18:47:29.848 [DEBUG] [Thread-132811] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:47:29.869 [DEBUG] [Thread-132811] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T18:47:29.869 [INFO] [Thread-132811] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T18:47:29.873 [DEBUG] [Thread-132811] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:47:29.873 [DEBUG] [Thread-132811] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T18:47:29.873 [DEBUG] [Thread-132811] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:47:29.873 [DEBUG] [Thread-132811] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:47:29.873 [DEBUG] [Thread-132811] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:47:29.873 [DEBUG] [Thread-132811] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:47:29.873 [DEBUG] [Thread-132811] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:47:29.873 [DEBUG] [Thread-132811] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:47:29.873 [DEBUG] [Thread-132811] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:47:29.873 [DEBUG] [Thread-132811] [transport.py] [_log()] client lang: <none>
2025-12-31T18:47:29.873 [DEBUG] [Thread-132811] [transport.py] [_log()] server lang: <none>
2025-12-31T18:47:29.873 [DEBUG] [Thread-132811] [transport.py] [_log()] kex follows: False
2025-12-31T18:47:29.873 [DEBUG] [Thread-132811] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:47:29.873 [DEBUG] [Thread-132811] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:47:29.874 [DEBUG] [Thread-132811] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:47:29.874 [DEBUG] [Thread-132811] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:47:29.874 [DEBUG] [Thread-132811] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:47:29.874 [DEBUG] [Thread-132811] [transport.py] [_log()] Compression: none
2025-12-31T18:47:29.874 [DEBUG] [Thread-132811] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:47:29.892 [DEBUG] [Thread-132811] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:47:29.892 [DEBUG] [Thread-132811] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:47:29.893 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T18:47:29.893 [DEBUG] [Thread-132811] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T18:47:29.894 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:47:29.895 [DEBUG] [Thread-132811] [transport.py] [_log()] userauth is OK
2025-12-31T18:47:29.896 [DEBUG] [Thread-132811] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:47:29.896 [DEBUG] [Thread-132811] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:47:29.896 [DEBUG] [Thread-132811] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T18:47:29.896 [DEBUG] [Thread-132811] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:47:29.913 [INFO] [Thread-132811] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:47:29.916 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:47:30.655 [DEBUG] [Thread-132811] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:47:30.655 [DEBUG] [Thread-132811] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:47:30.656 [DEBUG] [Thread-132811] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T18:47:30.696 [DEBUG] [Thread-132811] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:47:30.696 [DEBUG] [Thread-132811] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:47:30.698 [DEBUG] [Thread-132811] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:47:30.710 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:47:30.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T18:47:30.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T18:47:30.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T18:47:30.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:47:30.721 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T18:47:30.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:47:30.721 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:47:30.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T18:47:30.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.699098 -999.00  +22.40  17.86     36   +6.60 1 2 1 1 1   887    0 15.49 -86.12 ----- 11.9 17.9 270.0 24.1 23.8 -22.1 23.8 -21.8 23.7 -20.9 23.8 -21.1
2025-12-31T18:47:30.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T18:47:30.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T18:47:30.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.699098
2025-12-31T18:47:30.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T18:47:30.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T18:47:30.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T18:47:30.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T18:47:30.723 [DEBUG] [Thread-132811] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:47:30.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T18:47:30.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T18:47:06', tmtdew=18.15, humidity=30.58, cloud=0.0, wind=14.52, temperature=22.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T16:46:42.067', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T18:47:30.807 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T18:47:30.819 [DEBUG] [Thread-132814] [transport.py] [_log()] starting thread (client mode): 0xb6bb1600
2025-12-31T18:47:30.820 [DEBUG] [Thread-132814] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:47:30.834 [DEBUG] [Thread-132814] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T18:47:30.834 [INFO] [Thread-132814] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T18:47:30.841 [DEBUG] [Thread-132814] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:47:30.842 [DEBUG] [Thread-132814] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T18:47:30.842 [DEBUG] [Thread-132814] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:47:30.842 [DEBUG] [Thread-132814] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:47:30.842 [DEBUG] [Thread-132814] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:47:30.842 [DEBUG] [Thread-132814] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:47:30.842 [DEBUG] [Thread-132814] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:47:30.842 [DEBUG] [Thread-132814] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:47:30.842 [DEBUG] [Thread-132814] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:47:30.842 [DEBUG] [Thread-132814] [transport.py] [_log()] client lang: <none>
2025-12-31T18:47:30.842 [DEBUG] [Thread-132814] [transport.py] [_log()] server lang: <none>
2025-12-31T18:47:30.842 [DEBUG] [Thread-132814] [transport.py] [_log()] kex follows: False
2025-12-31T18:47:30.843 [DEBUG] [Thread-132814] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:47:30.843 [DEBUG] [Thread-132814] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:47:30.843 [DEBUG] [Thread-132814] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:47:30.843 [DEBUG] [Thread-132814] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:47:30.843 [DEBUG] [Thread-132814] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:47:30.843 [DEBUG] [Thread-132814] [transport.py] [_log()] Compression: none
2025-12-31T18:47:30.843 [DEBUG] [Thread-132814] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:47:30.898 [DEBUG] [Thread-132814] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:47:30.899 [DEBUG] [Thread-132814] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:47:30.899 [DEBUG] [Thread-132814] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T18:47:30.899 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T18:47:30.900 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:47:30.955 [DEBUG] [Thread-132814] [transport.py] [_log()] userauth is OK
2025-12-31T18:47:30.956 [DEBUG] [Thread-132814] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:47:30.956 [DEBUG] [Thread-132814] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:47:30.956 [DEBUG] [Thread-132814] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T18:47:30.956 [DEBUG] [Thread-132814] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:47:30.975 [INFO] [Thread-132814] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:47:30.975 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T18:47:30.975 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:47:31.677 [DEBUG] [Thread-132816 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:47:31.815 [DEBUG] [Thread-132814] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:47:31.816 [DEBUG] [Thread-132814] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:47:31.864 [DEBUG] [Thread-132814] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:47:31.864 [DEBUG] [Thread-132814] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:47:31.873 [DEBUG] [Thread-132814] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:47:31.882 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:47:31.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T18:47:31.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T18:47:31.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:47:31.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:47:31.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:47:31.910 [DEBUG] [Thread-132814] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:47:35.759 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:47:35.760 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:47:43.849 [DEBUG] [Thread-132817 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:47:58.896 [DEBUG] [Thread-132818 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:48:01.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T18:48:01.932 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T18:48:01.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T18:48:02.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 18, 47, 38), 18.32, 30.03, 0.0, 20.1, 22.57, 0, 0, 0, 2, 0, 0),)
2025-12-31T18:48:02.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 18:47:38
2025-12-31T18:48:02.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T18:48:02.936 [DEBUG] [Thread-132819] [transport.py] [_log()] starting thread (client mode): 0xb95f2590
2025-12-31T18:48:02.936 [DEBUG] [Thread-132819] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:48:02.955 [DEBUG] [Thread-132819] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T18:48:02.955 [INFO] [Thread-132819] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T18:48:02.958 [DEBUG] [Thread-132819] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:48:02.958 [DEBUG] [Thread-132819] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T18:48:02.958 [DEBUG] [Thread-132819] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:48:02.958 [DEBUG] [Thread-132819] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:48:02.958 [DEBUG] [Thread-132819] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:48:02.958 [DEBUG] [Thread-132819] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:48:02.958 [DEBUG] [Thread-132819] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:48:02.958 [DEBUG] [Thread-132819] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:48:02.958 [DEBUG] [Thread-132819] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:48:02.958 [DEBUG] [Thread-132819] [transport.py] [_log()] client lang: <none>
2025-12-31T18:48:02.958 [DEBUG] [Thread-132819] [transport.py] [_log()] server lang: <none>
2025-12-31T18:48:02.958 [DEBUG] [Thread-132819] [transport.py] [_log()] kex follows: False
2025-12-31T18:48:02.958 [DEBUG] [Thread-132819] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:48:02.958 [DEBUG] [Thread-132819] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:48:02.958 [DEBUG] [Thread-132819] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:48:02.958 [DEBUG] [Thread-132819] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:48:02.958 [DEBUG] [Thread-132819] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:48:02.958 [DEBUG] [Thread-132819] [transport.py] [_log()] Compression: none
2025-12-31T18:48:02.958 [DEBUG] [Thread-132819] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:48:02.974 [DEBUG] [Thread-132819] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:48:02.975 [DEBUG] [Thread-132819] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:48:02.975 [DEBUG] [Thread-132819] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T18:48:02.975 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T18:48:02.976 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:48:02.977 [DEBUG] [Thread-132819] [transport.py] [_log()] userauth is OK
2025-12-31T18:48:02.977 [DEBUG] [Thread-132819] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:48:02.978 [DEBUG] [Thread-132819] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:48:02.978 [DEBUG] [Thread-132819] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T18:48:02.978 [DEBUG] [Thread-132819] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:48:03.003 [INFO] [Thread-132819] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:48:03.004 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:48:03.654 [DEBUG] [Thread-132819] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:48:03.654 [DEBUG] [Thread-132819] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:48:03.655 [DEBUG] [Thread-132819] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T18:48:03.696 [DEBUG] [Thread-132819] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:48:03.696 [DEBUG] [Thread-132819] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:48:03.698 [DEBUG] [Thread-132819] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:48:03.712 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:48:03.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T18:48:03.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T18:48:03.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T18:48:03.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:48:03.720 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T18:48:03.720 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:48:03.721 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:48:03.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T18:48:03.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.699445 -999.00  +22.50  13.56     35   +6.60 1 2 1 1 1   887    0 15.18 -89.90 ----- 18.0 13.6 254.4 17.2 23.8 -22.1 23.9 -21.8 23.6 -21.0 23.8 -21.4
2025-12-31T18:48:03.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T18:48:03.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T18:48:03.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.699445
2025-12-31T18:48:03.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T18:48:03.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T18:48:03.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T18:48:03.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T18:48:03.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T18:48:03.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T18:47:38', tmtdew=18.32, humidity=30.03, cloud=0.0, wind=20.1, temperature=22.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T16:47:12.048', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T18:48:03.723 [DEBUG] [Thread-132819] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:48:03.807 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T18:48:03.819 [DEBUG] [Thread-132822] [transport.py] [_log()] starting thread (client mode): 0xb1767370
2025-12-31T18:48:03.819 [DEBUG] [Thread-132822] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:48:03.834 [DEBUG] [Thread-132822] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T18:48:03.834 [INFO] [Thread-132822] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T18:48:03.841 [DEBUG] [Thread-132822] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:48:03.841 [DEBUG] [Thread-132822] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T18:48:03.841 [DEBUG] [Thread-132822] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:48:03.841 [DEBUG] [Thread-132822] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:48:03.841 [DEBUG] [Thread-132822] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:48:03.841 [DEBUG] [Thread-132822] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:48:03.841 [DEBUG] [Thread-132822] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:48:03.841 [DEBUG] [Thread-132822] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:48:03.841 [DEBUG] [Thread-132822] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:48:03.842 [DEBUG] [Thread-132822] [transport.py] [_log()] client lang: <none>
2025-12-31T18:48:03.842 [DEBUG] [Thread-132822] [transport.py] [_log()] server lang: <none>
2025-12-31T18:48:03.842 [DEBUG] [Thread-132822] [transport.py] [_log()] kex follows: False
2025-12-31T18:48:03.842 [DEBUG] [Thread-132822] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:48:03.842 [DEBUG] [Thread-132822] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:48:03.842 [DEBUG] [Thread-132822] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:48:03.842 [DEBUG] [Thread-132822] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:48:03.842 [DEBUG] [Thread-132822] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:48:03.842 [DEBUG] [Thread-132822] [transport.py] [_log()] Compression: none
2025-12-31T18:48:03.842 [DEBUG] [Thread-132822] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:48:03.903 [DEBUG] [Thread-132822] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:48:03.903 [DEBUG] [Thread-132822] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:48:03.904 [DEBUG] [Thread-132822] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T18:48:03.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T18:48:03.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:48:03.963 [DEBUG] [Thread-132822] [transport.py] [_log()] userauth is OK
2025-12-31T18:48:03.963 [DEBUG] [Thread-132822] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:48:03.964 [DEBUG] [Thread-132822] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:48:03.964 [DEBUG] [Thread-132822] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T18:48:03.964 [DEBUG] [Thread-132822] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:48:03.983 [INFO] [Thread-132822] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:48:03.983 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T18:48:03.983 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:48:04.861 [DEBUG] [Thread-132822] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:48:04.861 [DEBUG] [Thread-132822] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:48:04.908 [DEBUG] [Thread-132822] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:48:04.909 [DEBUG] [Thread-132822] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:48:04.917 [DEBUG] [Thread-132822] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:48:04.925 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:48:04.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T18:48:04.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T18:48:04.942 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:48:04.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:48:04.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:48:04.950 [DEBUG] [Thread-132822] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:48:13.931 [DEBUG] [Thread-132824 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:48:28.985 [DEBUG] [Thread-132825 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:48:31.726 [DEBUG] [Thread-132826 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:48:34.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T18:48:34.973 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T18:48:34.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T18:48:35.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 18, 48, 10), 18.31, 30.07, 0.0, 21.67, 22.57, 0, 0, 0, 2, 0, 0),)
2025-12-31T18:48:35.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 18:48:10
2025-12-31T18:48:35.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T18:48:35.899 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:48:35.899 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:48:36.020 [DEBUG] [Thread-132827] [transport.py] [_log()] starting thread (client mode): 0xb6b633d0
2025-12-31T18:48:36.021 [DEBUG] [Thread-132827] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:48:36.040 [DEBUG] [Thread-132827] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T18:48:36.040 [INFO] [Thread-132827] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T18:48:36.043 [DEBUG] [Thread-132827] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:48:36.043 [DEBUG] [Thread-132827] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T18:48:36.043 [DEBUG] [Thread-132827] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:48:36.043 [DEBUG] [Thread-132827] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:48:36.043 [DEBUG] [Thread-132827] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:48:36.043 [DEBUG] [Thread-132827] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:48:36.043 [DEBUG] [Thread-132827] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:48:36.043 [DEBUG] [Thread-132827] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:48:36.043 [DEBUG] [Thread-132827] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:48:36.043 [DEBUG] [Thread-132827] [transport.py] [_log()] client lang: <none>
2025-12-31T18:48:36.043 [DEBUG] [Thread-132827] [transport.py] [_log()] server lang: <none>
2025-12-31T18:48:36.043 [DEBUG] [Thread-132827] [transport.py] [_log()] kex follows: False
2025-12-31T18:48:36.043 [DEBUG] [Thread-132827] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:48:36.043 [DEBUG] [Thread-132827] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:48:36.043 [DEBUG] [Thread-132827] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:48:36.043 [DEBUG] [Thread-132827] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:48:36.043 [DEBUG] [Thread-132827] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:48:36.043 [DEBUG] [Thread-132827] [transport.py] [_log()] Compression: none
2025-12-31T18:48:36.043 [DEBUG] [Thread-132827] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:48:36.060 [DEBUG] [Thread-132827] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:48:36.060 [DEBUG] [Thread-132827] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:48:36.060 [DEBUG] [Thread-132827] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T18:48:36.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T18:48:36.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:48:36.061 [DEBUG] [Thread-132827] [transport.py] [_log()] userauth is OK
2025-12-31T18:48:36.061 [DEBUG] [Thread-132827] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:48:36.061 [DEBUG] [Thread-132827] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:48:36.061 [DEBUG] [Thread-132827] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T18:48:36.061 [DEBUG] [Thread-132827] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:48:36.074 [INFO] [Thread-132827] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:48:36.074 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:48:36.848 [DEBUG] [Thread-132827] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:48:36.848 [DEBUG] [Thread-132827] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:48:36.848 [DEBUG] [Thread-132827] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T18:48:36.889 [DEBUG] [Thread-132827] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:48:36.889 [DEBUG] [Thread-132827] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:48:36.891 [DEBUG] [Thread-132827] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:48:36.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:48:36.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T18:48:36.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T18:48:36.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T18:48:36.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:48:36.903 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T18:48:36.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:48:36.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:48:36.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T18:48:36.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.699792 -999.00  +22.40  13.51     35   +6.50 1 2 1 1 1   887    0 15.27 -94.50 ----- 12.6 13.5 245.6 21.2 23.8 -22.7 23.8 -22.1 23.6 -21.4 23.8 -21.9
2025-12-31T18:48:36.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T18:48:36.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T18:48:36.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.699792
2025-12-31T18:48:36.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T18:48:36.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T18:48:36.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T18:48:36.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T18:48:36.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T18:48:36.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T18:48:10', tmtdew=18.31, humidity=30.07, cloud=0.0, wind=21.67, temperature=22.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T16:47:42.029', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T18:48:36.904 [DEBUG] [Thread-132827] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:48:36.979 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T18:48:36.990 [DEBUG] [Thread-132830] [transport.py] [_log()] starting thread (client mode): 0xb95597b0
2025-12-31T18:48:36.990 [DEBUG] [Thread-132830] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:48:37.005 [DEBUG] [Thread-132830] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T18:48:37.005 [INFO] [Thread-132830] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T18:48:37.012 [DEBUG] [Thread-132830] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:48:37.012 [DEBUG] [Thread-132830] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T18:48:37.012 [DEBUG] [Thread-132830] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:48:37.012 [DEBUG] [Thread-132830] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:48:37.012 [DEBUG] [Thread-132830] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:48:37.012 [DEBUG] [Thread-132830] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:48:37.012 [DEBUG] [Thread-132830] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:48:37.012 [DEBUG] [Thread-132830] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:48:37.012 [DEBUG] [Thread-132830] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:48:37.012 [DEBUG] [Thread-132830] [transport.py] [_log()] client lang: <none>
2025-12-31T18:48:37.012 [DEBUG] [Thread-132830] [transport.py] [_log()] server lang: <none>
2025-12-31T18:48:37.012 [DEBUG] [Thread-132830] [transport.py] [_log()] kex follows: False
2025-12-31T18:48:37.012 [DEBUG] [Thread-132830] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:48:37.012 [DEBUG] [Thread-132830] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:48:37.012 [DEBUG] [Thread-132830] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:48:37.012 [DEBUG] [Thread-132830] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:48:37.012 [DEBUG] [Thread-132830] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:48:37.012 [DEBUG] [Thread-132830] [transport.py] [_log()] Compression: none
2025-12-31T18:48:37.012 [DEBUG] [Thread-132830] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:48:37.070 [DEBUG] [Thread-132830] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:48:37.071 [DEBUG] [Thread-132830] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:48:37.071 [DEBUG] [Thread-132830] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T18:48:37.071 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T18:48:37.071 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:48:37.128 [DEBUG] [Thread-132830] [transport.py] [_log()] userauth is OK
2025-12-31T18:48:37.128 [DEBUG] [Thread-132830] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:48:37.128 [DEBUG] [Thread-132830] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:48:37.128 [DEBUG] [Thread-132830] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T18:48:37.128 [DEBUG] [Thread-132830] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:48:37.144 [INFO] [Thread-132830] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:48:37.144 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T18:48:37.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:48:37.980 [DEBUG] [Thread-132830] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:48:37.980 [DEBUG] [Thread-132830] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:48:38.028 [DEBUG] [Thread-132830] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:48:38.028 [DEBUG] [Thread-132830] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:48:38.037 [DEBUG] [Thread-132830] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:48:38.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:48:38.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T18:48:38.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T18:48:38.060 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:48:38.060 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:48:38.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:48:38.068 [DEBUG] [Thread-132830] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:48:44.019 [DEBUG] [Thread-132832 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:48:59.059 [DEBUG] [Thread-132833 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:49:08.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T18:49:08.091 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T18:49:08.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T18:49:08.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 18, 48, 42), 17.93, 31.02, 0.0, 18.12, 22.39, 0, 0, 0, 2, 0, 0),)
2025-12-31T18:49:08.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 18:48:42
2025-12-31T18:49:08.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T18:49:09.077 [DEBUG] [Thread-132834] [transport.py] [_log()] starting thread (client mode): 0xb9558b20
2025-12-31T18:49:09.077 [DEBUG] [Thread-132834] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:49:09.097 [DEBUG] [Thread-132834] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T18:49:09.097 [INFO] [Thread-132834] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T18:49:09.101 [DEBUG] [Thread-132834] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:49:09.101 [DEBUG] [Thread-132834] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T18:49:09.101 [DEBUG] [Thread-132834] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:49:09.101 [DEBUG] [Thread-132834] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:49:09.101 [DEBUG] [Thread-132834] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:49:09.101 [DEBUG] [Thread-132834] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:49:09.101 [DEBUG] [Thread-132834] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:49:09.101 [DEBUG] [Thread-132834] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:49:09.101 [DEBUG] [Thread-132834] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:49:09.101 [DEBUG] [Thread-132834] [transport.py] [_log()] client lang: <none>
2025-12-31T18:49:09.101 [DEBUG] [Thread-132834] [transport.py] [_log()] server lang: <none>
2025-12-31T18:49:09.102 [DEBUG] [Thread-132834] [transport.py] [_log()] kex follows: False
2025-12-31T18:49:09.102 [DEBUG] [Thread-132834] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:49:09.102 [DEBUG] [Thread-132834] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:49:09.102 [DEBUG] [Thread-132834] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:49:09.102 [DEBUG] [Thread-132834] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:49:09.102 [DEBUG] [Thread-132834] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:49:09.102 [DEBUG] [Thread-132834] [transport.py] [_log()] Compression: none
2025-12-31T18:49:09.102 [DEBUG] [Thread-132834] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:49:09.122 [DEBUG] [Thread-132834] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:49:09.122 [DEBUG] [Thread-132834] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:49:09.123 [DEBUG] [Thread-132834] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T18:49:09.123 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T18:49:09.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:49:09.125 [DEBUG] [Thread-132834] [transport.py] [_log()] userauth is OK
2025-12-31T18:49:09.125 [DEBUG] [Thread-132834] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:49:09.125 [DEBUG] [Thread-132834] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:49:09.125 [DEBUG] [Thread-132834] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T18:49:09.125 [DEBUG] [Thread-132834] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:49:09.149 [INFO] [Thread-132834] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:49:09.150 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:49:09.799 [DEBUG] [Thread-132834] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:49:09.800 [DEBUG] [Thread-132834] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:49:09.800 [DEBUG] [Thread-132834] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T18:49:09.841 [DEBUG] [Thread-132834] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:49:09.841 [DEBUG] [Thread-132834] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:49:09.844 [DEBUG] [Thread-132834] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:49:09.855 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:49:09.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T18:49:09.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T18:49:09.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T18:49:09.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:49:09.866 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T18:49:09.867 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:49:09.867 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:49:09.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T18:49:09.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.700140 -999.00  +22.30  14.70     36   +6.80 1 2 1 1 1   887    0 14.51 -105.54 ----- 15.0 14.7 265.6 23.9 23.8 -23.1 23.8 -22.3 23.5 -22.3 23.8 -21.7
2025-12-31T18:49:09.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T18:49:09.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T18:49:09.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.700140
2025-12-31T18:49:09.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T18:49:09.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T18:49:09.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T18:49:09.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T18:49:09.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T18:49:09.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T18:48:42', tmtdew=17.93, humidity=31.02, cloud=0.0, wind=18.12, temperature=22.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T16:48:12.096', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T18:49:09.869 [DEBUG] [Thread-132834] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:49:09.952 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T18:49:09.965 [DEBUG] [Thread-132837] [transport.py] [_log()] starting thread (client mode): 0xb1764ca0
2025-12-31T18:49:09.965 [DEBUG] [Thread-132837] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:49:09.979 [DEBUG] [Thread-132837] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T18:49:09.980 [INFO] [Thread-132837] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T18:49:09.987 [DEBUG] [Thread-132837] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:49:09.987 [DEBUG] [Thread-132837] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T18:49:09.987 [DEBUG] [Thread-132837] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:49:09.987 [DEBUG] [Thread-132837] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:49:09.987 [DEBUG] [Thread-132837] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:49:09.987 [DEBUG] [Thread-132837] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:49:09.987 [DEBUG] [Thread-132837] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:49:09.987 [DEBUG] [Thread-132837] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:49:09.987 [DEBUG] [Thread-132837] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:49:09.987 [DEBUG] [Thread-132837] [transport.py] [_log()] client lang: <none>
2025-12-31T18:49:09.987 [DEBUG] [Thread-132837] [transport.py] [_log()] server lang: <none>
2025-12-31T18:49:09.988 [DEBUG] [Thread-132837] [transport.py] [_log()] kex follows: False
2025-12-31T18:49:09.988 [DEBUG] [Thread-132837] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:49:09.988 [DEBUG] [Thread-132837] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:49:09.988 [DEBUG] [Thread-132837] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:49:09.988 [DEBUG] [Thread-132837] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:49:09.988 [DEBUG] [Thread-132837] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:49:09.988 [DEBUG] [Thread-132837] [transport.py] [_log()] Compression: none
2025-12-31T18:49:09.988 [DEBUG] [Thread-132837] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:49:10.045 [DEBUG] [Thread-132837] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:49:10.046 [DEBUG] [Thread-132837] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:49:10.047 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T18:49:10.047 [DEBUG] [Thread-132837] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T18:49:10.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:49:10.105 [DEBUG] [Thread-132837] [transport.py] [_log()] userauth is OK
2025-12-31T18:49:10.105 [DEBUG] [Thread-132837] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:49:10.105 [DEBUG] [Thread-132837] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:49:10.106 [DEBUG] [Thread-132837] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T18:49:10.106 [DEBUG] [Thread-132837] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:49:10.127 [INFO] [Thread-132837] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:49:10.127 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T18:49:10.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:49:10.936 [DEBUG] [Thread-132837] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:49:10.936 [DEBUG] [Thread-132837] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:49:10.984 [DEBUG] [Thread-132837] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:49:10.984 [DEBUG] [Thread-132837] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:49:10.994 [DEBUG] [Thread-132837] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:49:11.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:49:11.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T18:49:11.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T18:49:11.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:49:11.022 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:49:11.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:49:11.030 [DEBUG] [Thread-132837] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:49:14.095 [DEBUG] [Thread-132839 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:49:29.132 [DEBUG] [Thread-132840 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:49:31.776 [DEBUG] [Thread-132841 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:49:36.051 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:49:36.052 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:49:41.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T18:49:41.032 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T18:49:41.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T18:49:41.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 18, 49, 14), 17.92, 31.03, 0.0, 18.33, 22.37, 0, 0, 0, 2, 0, 0),)
2025-12-31T18:49:41.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 18:49:14
2025-12-31T18:49:41.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T18:49:42.033 [DEBUG] [Thread-132842] [transport.py] [_log()] starting thread (client mode): 0xb6bb2350
2025-12-31T18:49:42.033 [DEBUG] [Thread-132842] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:49:42.054 [DEBUG] [Thread-132842] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T18:49:42.054 [INFO] [Thread-132842] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T18:49:42.057 [DEBUG] [Thread-132842] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:49:42.057 [DEBUG] [Thread-132842] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T18:49:42.057 [DEBUG] [Thread-132842] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:49:42.057 [DEBUG] [Thread-132842] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:49:42.057 [DEBUG] [Thread-132842] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:49:42.058 [DEBUG] [Thread-132842] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:49:42.058 [DEBUG] [Thread-132842] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:49:42.058 [DEBUG] [Thread-132842] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:49:42.058 [DEBUG] [Thread-132842] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:49:42.058 [DEBUG] [Thread-132842] [transport.py] [_log()] client lang: <none>
2025-12-31T18:49:42.058 [DEBUG] [Thread-132842] [transport.py] [_log()] server lang: <none>
2025-12-31T18:49:42.058 [DEBUG] [Thread-132842] [transport.py] [_log()] kex follows: False
2025-12-31T18:49:42.058 [DEBUG] [Thread-132842] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:49:42.058 [DEBUG] [Thread-132842] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:49:42.058 [DEBUG] [Thread-132842] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:49:42.058 [DEBUG] [Thread-132842] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:49:42.058 [DEBUG] [Thread-132842] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:49:42.058 [DEBUG] [Thread-132842] [transport.py] [_log()] Compression: none
2025-12-31T18:49:42.058 [DEBUG] [Thread-132842] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:49:42.076 [DEBUG] [Thread-132842] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:49:42.076 [DEBUG] [Thread-132842] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:49:42.077 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T18:49:42.077 [DEBUG] [Thread-132842] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T18:49:42.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:49:42.079 [DEBUG] [Thread-132842] [transport.py] [_log()] userauth is OK
2025-12-31T18:49:42.079 [DEBUG] [Thread-132842] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:49:42.079 [DEBUG] [Thread-132842] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:49:42.079 [DEBUG] [Thread-132842] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T18:49:42.079 [DEBUG] [Thread-132842] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:49:42.099 [INFO] [Thread-132842] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:49:42.100 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:49:42.887 [DEBUG] [Thread-132842] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:49:42.887 [DEBUG] [Thread-132842] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:49:42.888 [DEBUG] [Thread-132842] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T18:49:42.928 [DEBUG] [Thread-132842] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:49:42.928 [DEBUG] [Thread-132842] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:49:42.930 [DEBUG] [Thread-132842] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:49:42.940 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:49:42.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T18:49:42.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T18:49:42.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T18:49:42.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:49:42.950 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T18:49:42.950 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:49:42.950 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:49:42.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T18:49:42.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.700487 -999.00  +22.20  16.34     36   +6.80 1 2 1 1 1   887    0 14.53 -109.41 ----- 16.2 16.3 269.2 23.8 23.8 -22.9 23.8 -22.5 23.5 -21.8 23.7 -22.1
2025-12-31T18:49:42.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T18:49:42.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T18:49:42.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.700487
2025-12-31T18:49:42.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T18:49:42.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T18:49:42.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T18:49:42.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T18:49:42.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T18:49:42.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T18:49:14', tmtdew=17.92, humidity=31.03, cloud=0.0, wind=18.33, temperature=22.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T16:48:42.077', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T18:49:42.953 [DEBUG] [Thread-132842] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:49:43.036 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T18:49:43.046 [DEBUG] [Thread-132845] [transport.py] [_log()] starting thread (client mode): 0xb1767070
2025-12-31T18:49:43.046 [DEBUG] [Thread-132845] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:49:43.061 [DEBUG] [Thread-132845] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T18:49:43.061 [INFO] [Thread-132845] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T18:49:43.069 [DEBUG] [Thread-132845] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:49:43.069 [DEBUG] [Thread-132845] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T18:49:43.069 [DEBUG] [Thread-132845] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:49:43.069 [DEBUG] [Thread-132845] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:49:43.069 [DEBUG] [Thread-132845] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:49:43.069 [DEBUG] [Thread-132845] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:49:43.069 [DEBUG] [Thread-132845] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:49:43.069 [DEBUG] [Thread-132845] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:49:43.069 [DEBUG] [Thread-132845] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:49:43.070 [DEBUG] [Thread-132845] [transport.py] [_log()] client lang: <none>
2025-12-31T18:49:43.070 [DEBUG] [Thread-132845] [transport.py] [_log()] server lang: <none>
2025-12-31T18:49:43.070 [DEBUG] [Thread-132845] [transport.py] [_log()] kex follows: False
2025-12-31T18:49:43.070 [DEBUG] [Thread-132845] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:49:43.070 [DEBUG] [Thread-132845] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:49:43.070 [DEBUG] [Thread-132845] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:49:43.070 [DEBUG] [Thread-132845] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:49:43.070 [DEBUG] [Thread-132845] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:49:43.070 [DEBUG] [Thread-132845] [transport.py] [_log()] Compression: none
2025-12-31T18:49:43.070 [DEBUG] [Thread-132845] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:49:43.130 [DEBUG] [Thread-132845] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:49:43.130 [DEBUG] [Thread-132845] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:49:43.131 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T18:49:43.131 [DEBUG] [Thread-132845] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T18:49:43.132 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:49:43.185 [DEBUG] [Thread-132845] [transport.py] [_log()] userauth is OK
2025-12-31T18:49:43.185 [DEBUG] [Thread-132845] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:49:43.185 [DEBUG] [Thread-132845] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:49:43.185 [DEBUG] [Thread-132845] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T18:49:43.186 [DEBUG] [Thread-132845] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:49:43.204 [INFO] [Thread-132845] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:49:43.204 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T18:49:43.205 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:49:44.059 [DEBUG] [Thread-132845] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:49:44.059 [DEBUG] [Thread-132845] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:49:44.107 [DEBUG] [Thread-132845] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:49:44.107 [DEBUG] [Thread-132845] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:49:44.116 [DEBUG] [Thread-132845] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:49:44.126 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:49:44.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T18:49:44.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T18:49:44.144 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:49:44.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:49:44.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:49:44.153 [DEBUG] [Thread-132845] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:49:44.166 [DEBUG] [Thread-132847 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:49:59.212 [DEBUG] [Thread-132848 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:50:14.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T18:50:14.175 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T18:50: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-12-31T18:50:14.244 [DEBUG] [Thread-132849 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:50:14.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 18, 49, 46), 17.49, 31.8, 0.0, 20.15, 22.17, 0, 0, 0, 2, 0, 0),)
2025-12-31T18:50:14.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 18:49:46
2025-12-31T18:50:15.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T18:50:15.153 [DEBUG] [Thread-132850] [transport.py] [_log()] starting thread (client mode): 0xb1764490
2025-12-31T18:50:15.153 [DEBUG] [Thread-132850] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:50:15.175 [DEBUG] [Thread-132850] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T18:50:15.175 [INFO] [Thread-132850] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T18:50:15.178 [DEBUG] [Thread-132850] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:50:15.178 [DEBUG] [Thread-132850] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T18:50:15.178 [DEBUG] [Thread-132850] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:50:15.178 [DEBUG] [Thread-132850] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:50:15.178 [DEBUG] [Thread-132850] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:50:15.178 [DEBUG] [Thread-132850] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:50:15.178 [DEBUG] [Thread-132850] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:50:15.178 [DEBUG] [Thread-132850] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:50:15.178 [DEBUG] [Thread-132850] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:50:15.178 [DEBUG] [Thread-132850] [transport.py] [_log()] client lang: <none>
2025-12-31T18:50:15.178 [DEBUG] [Thread-132850] [transport.py] [_log()] server lang: <none>
2025-12-31T18:50:15.178 [DEBUG] [Thread-132850] [transport.py] [_log()] kex follows: False
2025-12-31T18:50:15.178 [DEBUG] [Thread-132850] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:50:15.178 [DEBUG] [Thread-132850] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:50:15.178 [DEBUG] [Thread-132850] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:50:15.178 [DEBUG] [Thread-132850] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:50:15.178 [DEBUG] [Thread-132850] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:50:15.179 [DEBUG] [Thread-132850] [transport.py] [_log()] Compression: none
2025-12-31T18:50:15.179 [DEBUG] [Thread-132850] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:50:15.196 [DEBUG] [Thread-132850] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:50:15.197 [DEBUG] [Thread-132850] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:50:15.197 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T18:50:15.198 [DEBUG] [Thread-132850] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T18:50:15.199 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:50:15.200 [DEBUG] [Thread-132850] [transport.py] [_log()] userauth is OK
2025-12-31T18:50:15.200 [DEBUG] [Thread-132850] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:50:15.200 [DEBUG] [Thread-132850] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:50:15.200 [DEBUG] [Thread-132850] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T18:50:15.200 [DEBUG] [Thread-132850] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:50:15.224 [INFO] [Thread-132850] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:50:15.225 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:50:21.440 [DEBUG] [Thread-132850] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:50:21.441 [DEBUG] [Thread-132850] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:50:21.441 [DEBUG] [Thread-132850] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T18:50:21.482 [DEBUG] [Thread-132850] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:50:21.482 [DEBUG] [Thread-132850] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:50:21.485 [DEBUG] [Thread-132850] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:50:21.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:50:21.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T18:50:21.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T18:50:21.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T18:50:21.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:50:21.586 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T18:50:21.586 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:50:21.587 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:50:21.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T18:50:21.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.701181 -999.00  +22.00  20.55     38   +7.00 1 2 1 1 1   887    0 14.09 -128.19 ----- 17.0 20.6 273.6 24.3 23.6 -23.1 23.7 -22.3 23.2 -22.0 23.6 -22.2
2025-12-31T18:50:21.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T18:50:21.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T18:50:21.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.701181
2025-12-31T18:50:21.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T18:50:21.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T18:50:21.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T18:50:21.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T18:50:21.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T18:50:21.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T18:49:46', tmtdew=17.49, humidity=31.8, cloud=0.0, wind=20.15, temperature=22.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T16:49:42.038', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T18:50:21.589 [DEBUG] [Thread-132850] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:50:21.673 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T18:50:29.273 [DEBUG] [Thread-132853 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:50:31.825 [DEBUG] [Thread-132854 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:50:36.193 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:50:36.195 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:50:44.311 [DEBUG] [Thread-132855 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:50:59.348 [DEBUG] [Thread-132856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:51:14.387 [DEBUG] [Thread-132857 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:51:29.422 [DEBUG] [Thread-132858 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:51:31.882 [DEBUG] [Thread-132859 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:51:36.335 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:51:36.336 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:51:44.459 [DEBUG] [Thread-132860 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:51:59.491 [DEBUG] [Thread-132861 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:52:14.528 [DEBUG] [Thread-132862 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:52:29.557 [DEBUG] [Thread-132863 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:52:31.940 [DEBUG] [Thread-132864 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:52:34.901 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-12-31T18:52:36.477 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:52:36.478 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:52:44.593 [DEBUG] [Thread-132865 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:52:59.629 [DEBUG] [Thread-132866 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:53:04.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T18:53:04.932 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T18:53:04.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-12-31T18:53:05.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 18, 52, 58), 17.11, 32.58, 0.0, 18.05, 22.04, 0, 0, 0, 2, 0, 0),)
2025-12-31T18:53:05.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 18:52:58
2025-12-31T18:53:05.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T18:53:05.981 [DEBUG] [Thread-132867] [transport.py] [_log()] starting thread (client mode): 0xb6b62350
2025-12-31T18:53:05.982 [DEBUG] [Thread-132867] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:53:06.002 [DEBUG] [Thread-132867] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T18:53:06.002 [INFO] [Thread-132867] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T18:53:06.005 [DEBUG] [Thread-132867] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:53:06.005 [DEBUG] [Thread-132867] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T18:53:06.005 [DEBUG] [Thread-132867] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:53:06.005 [DEBUG] [Thread-132867] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:53:06.005 [DEBUG] [Thread-132867] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:53:06.005 [DEBUG] [Thread-132867] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:53:06.006 [DEBUG] [Thread-132867] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:53:06.006 [DEBUG] [Thread-132867] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:53:06.006 [DEBUG] [Thread-132867] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:53:06.006 [DEBUG] [Thread-132867] [transport.py] [_log()] client lang: <none>
2025-12-31T18:53:06.006 [DEBUG] [Thread-132867] [transport.py] [_log()] server lang: <none>
2025-12-31T18:53:06.006 [DEBUG] [Thread-132867] [transport.py] [_log()] kex follows: False
2025-12-31T18:53:06.006 [DEBUG] [Thread-132867] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:53:06.006 [DEBUG] [Thread-132867] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:53:06.006 [DEBUG] [Thread-132867] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:53:06.006 [DEBUG] [Thread-132867] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:53:06.006 [DEBUG] [Thread-132867] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:53:06.006 [DEBUG] [Thread-132867] [transport.py] [_log()] Compression: none
2025-12-31T18:53:06.006 [DEBUG] [Thread-132867] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:53:06.021 [DEBUG] [Thread-132867] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:53:06.021 [DEBUG] [Thread-132867] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:53:06.021 [DEBUG] [Thread-132867] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T18:53:06.021 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T18:53:06.021 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:53:06.022 [DEBUG] [Thread-132867] [transport.py] [_log()] userauth is OK
2025-12-31T18:53:06.022 [DEBUG] [Thread-132867] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:53:06.022 [DEBUG] [Thread-132867] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:53:06.022 [DEBUG] [Thread-132867] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T18:53:06.022 [DEBUG] [Thread-132867] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:53:06.032 [INFO] [Thread-132867] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:53:06.032 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:53:06.648 [DEBUG] [Thread-132867] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:53:06.648 [DEBUG] [Thread-132867] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:53:06.648 [DEBUG] [Thread-132867] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T18:53:06.689 [DEBUG] [Thread-132867] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:53:06.689 [DEBUG] [Thread-132867] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:53:06.692 [DEBUG] [Thread-132867] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:53:06.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:53:06.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T18:53:06.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T18:53:06.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T18:53:06.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:53:06.710 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T18:53:06.710 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:53:06.710 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:53:06.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T18:53:06.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.702918 -999.00  +21.90  15.63     38   +7.00 1 2 1 1 1   887    0 11.94 -166.89 ----- 18.2 15.6 263.0 23.3 23.5 -22.6 23.5 -21.8 23.2 -21.2 23.4 -22.2
2025-12-31T18:53:06.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T18:53:06.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T18:53:06.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.702918
2025-12-31T18:53:06.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T18:53:06.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T18:53:06.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T18:53:06.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T18:53:06.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T18:53:06.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T18:52:58', tmtdew=17.11, humidity=32.58, cloud=0.0, wind=18.05, temperature=22.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T16:52:12.115', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T18:53:06.712 [DEBUG] [Thread-132867] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:53:06.786 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T18:53:06.798 [DEBUG] [Thread-132870] [transport.py] [_log()] starting thread (client mode): 0xb6b60250
2025-12-31T18:53:06.798 [DEBUG] [Thread-132870] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:53:06.813 [DEBUG] [Thread-132870] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T18:53:06.813 [INFO] [Thread-132870] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T18:53:06.821 [DEBUG] [Thread-132870] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:53:06.821 [DEBUG] [Thread-132870] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T18:53:06.821 [DEBUG] [Thread-132870] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:53:06.821 [DEBUG] [Thread-132870] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:53:06.821 [DEBUG] [Thread-132870] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:53:06.821 [DEBUG] [Thread-132870] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:53:06.821 [DEBUG] [Thread-132870] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:53:06.821 [DEBUG] [Thread-132870] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:53:06.821 [DEBUG] [Thread-132870] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:53:06.821 [DEBUG] [Thread-132870] [transport.py] [_log()] client lang: <none>
2025-12-31T18:53:06.821 [DEBUG] [Thread-132870] [transport.py] [_log()] server lang: <none>
2025-12-31T18:53:06.821 [DEBUG] [Thread-132870] [transport.py] [_log()] kex follows: False
2025-12-31T18:53:06.821 [DEBUG] [Thread-132870] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:53:06.821 [DEBUG] [Thread-132870] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:53:06.821 [DEBUG] [Thread-132870] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:53:06.821 [DEBUG] [Thread-132870] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:53:06.821 [DEBUG] [Thread-132870] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:53:06.821 [DEBUG] [Thread-132870] [transport.py] [_log()] Compression: none
2025-12-31T18:53:06.821 [DEBUG] [Thread-132870] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:53:06.878 [DEBUG] [Thread-132870] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:53:06.878 [DEBUG] [Thread-132870] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:53:06.879 [DEBUG] [Thread-132870] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T18:53:06.879 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T18:53:06.879 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:53:06.936 [DEBUG] [Thread-132870] [transport.py] [_log()] userauth is OK
2025-12-31T18:53:06.936 [DEBUG] [Thread-132870] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:53:06.936 [DEBUG] [Thread-132870] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:53:06.936 [DEBUG] [Thread-132870] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T18:53:06.936 [DEBUG] [Thread-132870] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:53:06.950 [INFO] [Thread-132870] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:53:06.950 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T18:53:06.950 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:53:07.826 [DEBUG] [Thread-132870] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:53:07.826 [DEBUG] [Thread-132870] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:53:07.874 [DEBUG] [Thread-132870] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:53:07.874 [DEBUG] [Thread-132870] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:53:07.883 [DEBUG] [Thread-132870] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:53:07.891 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:53:07.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T18:53:07.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T18:53:07.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:53:07.907 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:53:07.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:53:07.914 [DEBUG] [Thread-132870] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:53:14.658 [DEBUG] [Thread-132872 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:53:29.710 [DEBUG] [Thread-132873 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:53:31.989 [DEBUG] [Thread-132874 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:53:36.617 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:53:36.618 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:53:37.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T18:53:37.925 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T18:53:37.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T18:53:38.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 18, 53, 30), 17.12, 32.58, 0.0, 20.56, 22.07, 0, 0, 0, 2, 0, 0),)
2025-12-31T18:53:38.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 18:53:30
2025-12-31T18:53:38.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T18:53:38.940 [DEBUG] [Thread-132875] [transport.py] [_log()] starting thread (client mode): 0xb957baf0
2025-12-31T18:53:38.940 [DEBUG] [Thread-132875] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:53:38.960 [DEBUG] [Thread-132875] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T18:53:38.961 [INFO] [Thread-132875] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T18:53:38.964 [DEBUG] [Thread-132875] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:53:38.964 [DEBUG] [Thread-132875] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T18:53:38.964 [DEBUG] [Thread-132875] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:53:38.964 [DEBUG] [Thread-132875] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:53:38.964 [DEBUG] [Thread-132875] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:53:38.964 [DEBUG] [Thread-132875] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:53:38.964 [DEBUG] [Thread-132875] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:53:38.964 [DEBUG] [Thread-132875] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:53:38.964 [DEBUG] [Thread-132875] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:53:38.964 [DEBUG] [Thread-132875] [transport.py] [_log()] client lang: <none>
2025-12-31T18:53:38.964 [DEBUG] [Thread-132875] [transport.py] [_log()] server lang: <none>
2025-12-31T18:53:38.964 [DEBUG] [Thread-132875] [transport.py] [_log()] kex follows: False
2025-12-31T18:53:38.964 [DEBUG] [Thread-132875] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:53:38.965 [DEBUG] [Thread-132875] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:53:38.965 [DEBUG] [Thread-132875] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:53:38.965 [DEBUG] [Thread-132875] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:53:38.965 [DEBUG] [Thread-132875] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:53:38.965 [DEBUG] [Thread-132875] [transport.py] [_log()] Compression: none
2025-12-31T18:53:38.965 [DEBUG] [Thread-132875] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:53:38.984 [DEBUG] [Thread-132875] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:53:38.985 [DEBUG] [Thread-132875] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:53:38.986 [DEBUG] [Thread-132875] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T18:53:38.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T18:53:38.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:53:38.988 [DEBUG] [Thread-132875] [transport.py] [_log()] userauth is OK
2025-12-31T18:53:38.988 [DEBUG] [Thread-132875] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:53:38.988 [DEBUG] [Thread-132875] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:53:38.988 [DEBUG] [Thread-132875] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T18:53:38.988 [DEBUG] [Thread-132875] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:53:39.012 [INFO] [Thread-132875] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:53:39.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:53:39.824 [DEBUG] [Thread-132875] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:53:39.824 [DEBUG] [Thread-132875] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:53:39.825 [DEBUG] [Thread-132875] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T18:53:39.865 [DEBUG] [Thread-132875] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:53:39.865 [DEBUG] [Thread-132875] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:53:39.868 [DEBUG] [Thread-132875] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:53:39.881 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:53:39.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T18:53:39.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T18:53:39.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T18:53:39.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:53:39.891 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T18:53:39.891 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:53:39.891 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:53:39.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T18:53:39.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.703265 -999.00  +21.90  17.02     38   +6.90 1 2 1 1 1   887    0 11.72 -173.62 ----- 15.4 17.0 270.2 22.6 23.5 -22.4 23.5 -21.9 23.1 -21.1 23.4 -22.0
2025-12-31T18:53:39.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T18:53:39.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T18:53:39.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.703265
2025-12-31T18:53:39.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T18:53:39.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T18:53:39.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T18:53:39.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T18:53:39.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T18:53:39.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T18:53:30', tmtdew=17.12, humidity=32.58, cloud=0.0, wind=20.56, temperature=22.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T16:52:42.096', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T18:53:39.894 [DEBUG] [Thread-132875] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:53:39.977 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T18:53:39.989 [DEBUG] [Thread-132878] [transport.py] [_log()] starting thread (client mode): 0xb6bb9900
2025-12-31T18:53:39.989 [DEBUG] [Thread-132878] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:53:40.003 [DEBUG] [Thread-132878] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T18:53:40.003 [INFO] [Thread-132878] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T18:53:40.011 [DEBUG] [Thread-132878] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:53:40.011 [DEBUG] [Thread-132878] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T18:53:40.012 [DEBUG] [Thread-132878] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:53:40.012 [DEBUG] [Thread-132878] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:53:40.012 [DEBUG] [Thread-132878] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:53:40.012 [DEBUG] [Thread-132878] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:53:40.012 [DEBUG] [Thread-132878] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:53:40.012 [DEBUG] [Thread-132878] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:53:40.012 [DEBUG] [Thread-132878] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:53:40.012 [DEBUG] [Thread-132878] [transport.py] [_log()] client lang: <none>
2025-12-31T18:53:40.012 [DEBUG] [Thread-132878] [transport.py] [_log()] server lang: <none>
2025-12-31T18:53:40.013 [DEBUG] [Thread-132878] [transport.py] [_log()] kex follows: False
2025-12-31T18:53:40.013 [DEBUG] [Thread-132878] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:53:40.013 [DEBUG] [Thread-132878] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:53:40.013 [DEBUG] [Thread-132878] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:53:40.013 [DEBUG] [Thread-132878] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:53:40.013 [DEBUG] [Thread-132878] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:53:40.013 [DEBUG] [Thread-132878] [transport.py] [_log()] Compression: none
2025-12-31T18:53:40.014 [DEBUG] [Thread-132878] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:53:40.069 [DEBUG] [Thread-132878] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:53:40.069 [DEBUG] [Thread-132878] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:53:40.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T18:53:40.070 [DEBUG] [Thread-132878] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T18:53:40.071 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:53:40.125 [DEBUG] [Thread-132878] [transport.py] [_log()] userauth is OK
2025-12-31T18:53:40.125 [DEBUG] [Thread-132878] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:53:40.125 [DEBUG] [Thread-132878] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:53:40.126 [DEBUG] [Thread-132878] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T18:53:40.126 [DEBUG] [Thread-132878] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:53:40.145 [INFO] [Thread-132878] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:53:40.145 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T18:53:40.146 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:53:40.975 [DEBUG] [Thread-132878] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:53:40.975 [DEBUG] [Thread-132878] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:53:41.023 [DEBUG] [Thread-132878] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:53:41.023 [DEBUG] [Thread-132878] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:53:41.033 [DEBUG] [Thread-132878] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:53:41.042 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:53:41.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T18:53:41.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T18:53:41.060 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:53:41.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:53:41.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:53:41.069 [DEBUG] [Thread-132878] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:53:44.740 [DEBUG] [Thread-132880 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:53:59.781 [DEBUG] [Thread-132881 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:54:11.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T18:54:11.092 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T18:54:11.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T18:54:11.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 18, 54, 2), 17.12, 32.58, 0.0, 18.84, 22.09, 0, 0, 0, 2, 0, 0),)
2025-12-31T18:54:11.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 18:54:02
2025-12-31T18:54:11.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T18:54:12.084 [DEBUG] [Thread-132882] [transport.py] [_log()] starting thread (client mode): 0xb957a680
2025-12-31T18:54:12.084 [DEBUG] [Thread-132882] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:54:12.107 [DEBUG] [Thread-132882] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T18:54:12.107 [INFO] [Thread-132882] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T18:54:12.110 [DEBUG] [Thread-132882] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:54:12.110 [DEBUG] [Thread-132882] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T18:54:12.110 [DEBUG] [Thread-132882] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:54:12.110 [DEBUG] [Thread-132882] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:54:12.110 [DEBUG] [Thread-132882] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:54:12.110 [DEBUG] [Thread-132882] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:54:12.110 [DEBUG] [Thread-132882] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:54:12.110 [DEBUG] [Thread-132882] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:54:12.110 [DEBUG] [Thread-132882] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:54:12.110 [DEBUG] [Thread-132882] [transport.py] [_log()] client lang: <none>
2025-12-31T18:54:12.110 [DEBUG] [Thread-132882] [transport.py] [_log()] server lang: <none>
2025-12-31T18:54:12.110 [DEBUG] [Thread-132882] [transport.py] [_log()] kex follows: False
2025-12-31T18:54:12.110 [DEBUG] [Thread-132882] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:54:12.110 [DEBUG] [Thread-132882] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:54:12.110 [DEBUG] [Thread-132882] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:54:12.110 [DEBUG] [Thread-132882] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:54:12.110 [DEBUG] [Thread-132882] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:54:12.110 [DEBUG] [Thread-132882] [transport.py] [_log()] Compression: none
2025-12-31T18:54:12.110 [DEBUG] [Thread-132882] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:54:12.132 [DEBUG] [Thread-132882] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:54:12.132 [DEBUG] [Thread-132882] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:54:12.133 [DEBUG] [Thread-132882] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T18:54:12.133 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T18:54:12.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:54:12.135 [DEBUG] [Thread-132882] [transport.py] [_log()] userauth is OK
2025-12-31T18:54:12.135 [DEBUG] [Thread-132882] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:54:12.135 [DEBUG] [Thread-132882] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:54:12.135 [DEBUG] [Thread-132882] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T18:54:12.135 [DEBUG] [Thread-132882] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:54:12.158 [INFO] [Thread-132882] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:54:12.159 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:54:12.832 [DEBUG] [Thread-132882] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:54:12.833 [DEBUG] [Thread-132882] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:54:12.833 [DEBUG] [Thread-132882] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T18:54:12.874 [DEBUG] [Thread-132882] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:54:12.874 [DEBUG] [Thread-132882] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:54:12.877 [DEBUG] [Thread-132882] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:54:12.887 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:54:12.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T18:54:12.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T18:54:12.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T18:54:12.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:54:12.896 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T18:54:12.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:54:12.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:54:12.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T18:54:12.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.703612 -999.00  +21.90  13.62     38   +7.00 1 2 1 1 1   887    0 11.54 -172.02 ----- 13.2 13.6 254.4 24.1 23.5 -22.5 23.5 -21.8 23.2 -20.8 23.4 -21.8
2025-12-31T18:54:12.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T18:54:12.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T18:54:12.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.703612
2025-12-31T18:54:12.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T18:54:12.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T18:54:12.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T18:54:12.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T18:54:12.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T18:54:12.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T18:54:02', tmtdew=17.12, humidity=32.58, cloud=0.0, wind=18.84, temperature=22.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T16:53:12.077', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T18:54:12.898 [DEBUG] [Thread-132882] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:54:12.979 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T18:54:12.991 [DEBUG] [Thread-132885] [transport.py] [_log()] starting thread (client mode): 0xb957a2f0
2025-12-31T18:54:12.991 [DEBUG] [Thread-132885] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:54:13.008 [DEBUG] [Thread-132885] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T18:54:13.008 [INFO] [Thread-132885] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T18:54:13.016 [DEBUG] [Thread-132885] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:54:13.016 [DEBUG] [Thread-132885] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T18:54:13.016 [DEBUG] [Thread-132885] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:54:13.017 [DEBUG] [Thread-132885] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:54:13.017 [DEBUG] [Thread-132885] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:54:13.017 [DEBUG] [Thread-132885] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:54:13.017 [DEBUG] [Thread-132885] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:54:13.017 [DEBUG] [Thread-132885] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:54:13.017 [DEBUG] [Thread-132885] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:54:13.017 [DEBUG] [Thread-132885] [transport.py] [_log()] client lang: <none>
2025-12-31T18:54:13.017 [DEBUG] [Thread-132885] [transport.py] [_log()] server lang: <none>
2025-12-31T18:54:13.017 [DEBUG] [Thread-132885] [transport.py] [_log()] kex follows: False
2025-12-31T18:54:13.017 [DEBUG] [Thread-132885] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:54:13.017 [DEBUG] [Thread-132885] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:54:13.017 [DEBUG] [Thread-132885] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:54:13.017 [DEBUG] [Thread-132885] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:54:13.017 [DEBUG] [Thread-132885] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:54:13.017 [DEBUG] [Thread-132885] [transport.py] [_log()] Compression: none
2025-12-31T18:54:13.017 [DEBUG] [Thread-132885] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:54:13.072 [DEBUG] [Thread-132885] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:54:13.073 [DEBUG] [Thread-132885] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:54:13.074 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T18:54:13.074 [DEBUG] [Thread-132885] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T18:54:13.075 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:54:13.137 [DEBUG] [Thread-132885] [transport.py] [_log()] userauth is OK
2025-12-31T18:54:13.137 [DEBUG] [Thread-132885] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:54:13.137 [DEBUG] [Thread-132885] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:54:13.137 [DEBUG] [Thread-132885] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T18:54:13.137 [DEBUG] [Thread-132885] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:54:13.156 [INFO] [Thread-132885] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:54:13.157 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T18:54:13.157 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:54:13.962 [DEBUG] [Thread-132885] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:54:13.962 [DEBUG] [Thread-132885] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:54:14.010 [DEBUG] [Thread-132885] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:54:14.010 [DEBUG] [Thread-132885] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:54:14.018 [DEBUG] [Thread-132885] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:54:14.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:54:14.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T18:54: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-12-31T18:54:14.044 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:54:14.045 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:54:14.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:54:14.058 [DEBUG] [Thread-132885] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:54:14.819 [DEBUG] [Thread-132887 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:54:29.868 [DEBUG] [Thread-132888 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:54:32.038 [DEBUG] [Thread-132889 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:54:36.756 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:54:36.757 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:54:44.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T18:54:44.076 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T18:54:44.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T18:54:44.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 18, 54, 34), 17.1, 32.61, 0.0, 14.8, 22.14, 0, 0, 0, 2, 0, 0),)
2025-12-31T18:54:44.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 18:54:34
2025-12-31T18:54:44.901 [DEBUG] [Thread-132890 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:54:44.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T18:54:45.058 [DEBUG] [Thread-132891] [transport.py] [_log()] starting thread (client mode): 0xb6bbb700
2025-12-31T18:54:45.058 [DEBUG] [Thread-132891] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:54:45.079 [DEBUG] [Thread-132891] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T18:54:45.080 [INFO] [Thread-132891] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T18:54:45.083 [DEBUG] [Thread-132891] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:54:45.083 [DEBUG] [Thread-132891] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T18:54:45.083 [DEBUG] [Thread-132891] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:54:45.083 [DEBUG] [Thread-132891] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:54:45.083 [DEBUG] [Thread-132891] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:54:45.083 [DEBUG] [Thread-132891] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:54:45.083 [DEBUG] [Thread-132891] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:54:45.083 [DEBUG] [Thread-132891] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:54:45.083 [DEBUG] [Thread-132891] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:54:45.083 [DEBUG] [Thread-132891] [transport.py] [_log()] client lang: <none>
2025-12-31T18:54:45.083 [DEBUG] [Thread-132891] [transport.py] [_log()] server lang: <none>
2025-12-31T18:54:45.083 [DEBUG] [Thread-132891] [transport.py] [_log()] kex follows: False
2025-12-31T18:54:45.083 [DEBUG] [Thread-132891] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:54:45.083 [DEBUG] [Thread-132891] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:54:45.083 [DEBUG] [Thread-132891] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:54:45.083 [DEBUG] [Thread-132891] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:54:45.083 [DEBUG] [Thread-132891] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:54:45.083 [DEBUG] [Thread-132891] [transport.py] [_log()] Compression: none
2025-12-31T18:54:45.083 [DEBUG] [Thread-132891] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:54:45.100 [DEBUG] [Thread-132891] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:54:45.101 [DEBUG] [Thread-132891] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:54:45.101 [DEBUG] [Thread-132891] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T18:54:45.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T18:54:45.102 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:54:45.103 [DEBUG] [Thread-132891] [transport.py] [_log()] userauth is OK
2025-12-31T18:54:45.104 [DEBUG] [Thread-132891] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:54:45.104 [DEBUG] [Thread-132891] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:54:45.104 [DEBUG] [Thread-132891] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T18:54:45.104 [DEBUG] [Thread-132891] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:54:45.118 [INFO] [Thread-132891] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:54:45.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:54:45.906 [DEBUG] [Thread-132891] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:54:45.906 [DEBUG] [Thread-132891] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:54:45.906 [DEBUG] [Thread-132891] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T18:54:45.946 [DEBUG] [Thread-132891] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:54:45.947 [DEBUG] [Thread-132891] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:54:45.949 [DEBUG] [Thread-132891] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:54:45.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:54:45.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T18:54:45.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T18:54:45.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T18:54:45.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:54:45.969 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T18:54:45.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:54:45.969 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:54:45.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T18:54:45.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.704306 -999.00  +22.00   7.72     37   +7.00 1 2 1 1 1   887    0 10.92 -196.10 ----- 9.7 7.7 210.9 11.8 23.5 -22.1 23.5 -22.0 23.3 -20.8 23.4 -21.6
2025-12-31T18:54:45.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T18:54:45.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T18:54:45.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.704306
2025-12-31T18:54:45.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T18:54:45.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T18:54:45.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T18:54:45.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T18:54:45.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T18:54:45.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T18:54:34', tmtdew=17.1, humidity=32.61, cloud=0.0, wind=14.8, temperature=22.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T16:54:12.038', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T18:54:45.972 [DEBUG] [Thread-132891] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:54:46.053 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T18:54:46.065 [DEBUG] [Thread-132894] [transport.py] [_log()] starting thread (client mode): 0xb6ba3400
2025-12-31T18:54:46.065 [DEBUG] [Thread-132894] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:54:46.080 [DEBUG] [Thread-132894] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T18:54:46.080 [INFO] [Thread-132894] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T18:54:46.088 [DEBUG] [Thread-132894] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:54:46.088 [DEBUG] [Thread-132894] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T18:54:46.088 [DEBUG] [Thread-132894] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:54:46.088 [DEBUG] [Thread-132894] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:54:46.088 [DEBUG] [Thread-132894] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:54:46.088 [DEBUG] [Thread-132894] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:54:46.089 [DEBUG] [Thread-132894] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:54:46.089 [DEBUG] [Thread-132894] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:54:46.089 [DEBUG] [Thread-132894] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:54:46.089 [DEBUG] [Thread-132894] [transport.py] [_log()] client lang: <none>
2025-12-31T18:54:46.089 [DEBUG] [Thread-132894] [transport.py] [_log()] server lang: <none>
2025-12-31T18:54:46.089 [DEBUG] [Thread-132894] [transport.py] [_log()] kex follows: False
2025-12-31T18:54:46.089 [DEBUG] [Thread-132894] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:54:46.089 [DEBUG] [Thread-132894] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:54:46.089 [DEBUG] [Thread-132894] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:54:46.089 [DEBUG] [Thread-132894] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:54:46.089 [DEBUG] [Thread-132894] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:54:46.089 [DEBUG] [Thread-132894] [transport.py] [_log()] Compression: none
2025-12-31T18:54:46.089 [DEBUG] [Thread-132894] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:54:46.148 [DEBUG] [Thread-132894] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:54:46.148 [DEBUG] [Thread-132894] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:54:46.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T18:54:46.149 [DEBUG] [Thread-132894] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T18:54:46.150 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:54:46.206 [DEBUG] [Thread-132894] [transport.py] [_log()] userauth is OK
2025-12-31T18:54:46.206 [DEBUG] [Thread-132894] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:54:46.206 [DEBUG] [Thread-132894] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:54:46.206 [DEBUG] [Thread-132894] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T18:54:46.206 [DEBUG] [Thread-132894] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:54:46.227 [INFO] [Thread-132894] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:54:46.227 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T18:54:46.228 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:54:47.078 [DEBUG] [Thread-132894] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:54:47.079 [DEBUG] [Thread-132894] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:54:47.127 [DEBUG] [Thread-132894] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:54:47.127 [DEBUG] [Thread-132894] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:54:47.135 [DEBUG] [Thread-132894] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:54:47.145 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:54:47.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-12-31T18:54:47.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-12-31T18:54:47.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:54:47.163 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:54:47.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:54:47.171 [DEBUG] [Thread-132894] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:54:59.940 [DEBUG] [Thread-132896 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:55:14.988 [DEBUG] [Thread-132897 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:55:17.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T18:55:17.194 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T18:55:17.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T18:55:17.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 18, 55, 7), 17.11, 32.59, 0.0, 13.62, 22.16, 0, 0, 0, 2, 0, 0),)
2025-12-31T18:55:17.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 18:55:07
2025-12-31T18:55:18.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T18:55:18.180 [DEBUG] [Thread-132898] [transport.py] [_log()] starting thread (client mode): 0xb955a7a0
2025-12-31T18:55:18.180 [DEBUG] [Thread-132898] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:55:18.203 [DEBUG] [Thread-132898] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T18:55:18.204 [INFO] [Thread-132898] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T18:55:18.206 [DEBUG] [Thread-132898] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:55:18.206 [DEBUG] [Thread-132898] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T18:55:18.206 [DEBUG] [Thread-132898] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:55:18.206 [DEBUG] [Thread-132898] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:55:18.206 [DEBUG] [Thread-132898] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:55:18.207 [DEBUG] [Thread-132898] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:55:18.207 [DEBUG] [Thread-132898] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:55:18.207 [DEBUG] [Thread-132898] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:55:18.207 [DEBUG] [Thread-132898] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:55:18.207 [DEBUG] [Thread-132898] [transport.py] [_log()] client lang: <none>
2025-12-31T18:55:18.207 [DEBUG] [Thread-132898] [transport.py] [_log()] server lang: <none>
2025-12-31T18:55:18.207 [DEBUG] [Thread-132898] [transport.py] [_log()] kex follows: False
2025-12-31T18:55:18.207 [DEBUG] [Thread-132898] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:55:18.207 [DEBUG] [Thread-132898] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:55:18.207 [DEBUG] [Thread-132898] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:55:18.207 [DEBUG] [Thread-132898] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:55:18.207 [DEBUG] [Thread-132898] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:55:18.208 [DEBUG] [Thread-132898] [transport.py] [_log()] Compression: none
2025-12-31T18:55:18.208 [DEBUG] [Thread-132898] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:55:18.229 [DEBUG] [Thread-132898] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:55:18.230 [DEBUG] [Thread-132898] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:55:18.230 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T18:55:18.231 [DEBUG] [Thread-132898] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T18:55:18.231 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:55:18.232 [DEBUG] [Thread-132898] [transport.py] [_log()] userauth is OK
2025-12-31T18:55:18.232 [DEBUG] [Thread-132898] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:55:18.232 [DEBUG] [Thread-132898] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:55:18.232 [DEBUG] [Thread-132898] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T18:55:18.232 [DEBUG] [Thread-132898] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:55:18.255 [INFO] [Thread-132898] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:55:18.256 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:55:23.040 [DEBUG] [Thread-132898] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:55:23.040 [DEBUG] [Thread-132898] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:55:23.040 [DEBUG] [Thread-132898] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T18:55:23.081 [DEBUG] [Thread-132898] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:55:23.081 [DEBUG] [Thread-132898] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:55:23.085 [DEBUG] [Thread-132898] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:55:23.098 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:55:23.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T18:55:23.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T18:55:23.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T18:55:23.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:55:23.163 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T18:55:23.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:55:23.163 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:55:23.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T18:55:23.164 [WARNING] [poll_weather_worker] [driver.py] [poll_weather_state()] Unable to get atlas cloud data: list index out of range
2025-12-31T18:55:23.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T18:55:07', tmtdew=17.11, humidity=32.59, cloud=0.0, wind=13.62, temperature=22.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp=None, atlas_cloud=None, atlas_rain=None, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T18:55:23.166 [DEBUG] [Thread-132898] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:55:23.251 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T18:55:23.263 [DEBUG] [Thread-132901] [transport.py] [_log()] starting thread (client mode): 0xb95d7cd0
2025-12-31T18:55:23.263 [DEBUG] [Thread-132901] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:55:23.276 [DEBUG] [Thread-132901] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T18:55:23.276 [INFO] [Thread-132901] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T18:55:23.284 [DEBUG] [Thread-132901] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:55:23.285 [DEBUG] [Thread-132901] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T18:55:23.285 [DEBUG] [Thread-132901] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:55:23.285 [DEBUG] [Thread-132901] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:55:23.285 [DEBUG] [Thread-132901] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:55:23.285 [DEBUG] [Thread-132901] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:55:23.285 [DEBUG] [Thread-132901] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:55:23.285 [DEBUG] [Thread-132901] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:55:23.285 [DEBUG] [Thread-132901] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:55:23.285 [DEBUG] [Thread-132901] [transport.py] [_log()] client lang: <none>
2025-12-31T18:55:23.285 [DEBUG] [Thread-132901] [transport.py] [_log()] server lang: <none>
2025-12-31T18:55:23.285 [DEBUG] [Thread-132901] [transport.py] [_log()] kex follows: False
2025-12-31T18:55:23.285 [DEBUG] [Thread-132901] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:55:23.285 [DEBUG] [Thread-132901] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:55:23.285 [DEBUG] [Thread-132901] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:55:23.285 [DEBUG] [Thread-132901] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:55:23.285 [DEBUG] [Thread-132901] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:55:23.285 [DEBUG] [Thread-132901] [transport.py] [_log()] Compression: none
2025-12-31T18:55:23.285 [DEBUG] [Thread-132901] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:55:23.343 [DEBUG] [Thread-132901] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:55:23.344 [DEBUG] [Thread-132901] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:55:23.344 [DEBUG] [Thread-132901] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T18:55:23.344 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T18:55:23.345 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:55:23.405 [DEBUG] [Thread-132901] [transport.py] [_log()] userauth is OK
2025-12-31T18:55:23.405 [DEBUG] [Thread-132901] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:55:23.405 [DEBUG] [Thread-132901] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:55:23.405 [DEBUG] [Thread-132901] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T18:55:23.405 [DEBUG] [Thread-132901] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:55:23.421 [INFO] [Thread-132901] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:55:23.422 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T18:55:23.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:55:24.233 [DEBUG] [Thread-132901] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:55:24.233 [DEBUG] [Thread-132901] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:55:24.281 [DEBUG] [Thread-132901] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:55:24.281 [DEBUG] [Thread-132901] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:55:24.291 [DEBUG] [Thread-132901] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:55:24.300 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:55:24.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T18:55:24.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T18:55:24.318 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:55:24.319 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:55:24.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:55:24.328 [DEBUG] [Thread-132901] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:55:30.026 [DEBUG] [Thread-132903 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:55:32.091 [DEBUG] [Thread-132904 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:55:36.896 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:55:36.898 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:55:45.071 [DEBUG] [Thread-132905 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:55:54.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T18:55:54.336 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T18:55:54.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T18:55:55.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 18, 55, 39), 17.2, 32.53, 0.0, 17.72, 22.27, 0, 0, 0, 2, 0, 0),)
2025-12-31T18:55:55.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 18:55:39
2025-12-31T18:55:55.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T18:55:55.324 [DEBUG] [Thread-132906] [transport.py] [_log()] starting thread (client mode): 0xb1765090
2025-12-31T18:55:55.324 [DEBUG] [Thread-132906] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:55:55.344 [DEBUG] [Thread-132906] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T18:55:55.344 [INFO] [Thread-132906] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T18:55:55.347 [DEBUG] [Thread-132906] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:55:55.347 [DEBUG] [Thread-132906] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T18:55:55.347 [DEBUG] [Thread-132906] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:55:55.347 [DEBUG] [Thread-132906] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:55:55.347 [DEBUG] [Thread-132906] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:55:55.347 [DEBUG] [Thread-132906] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:55:55.347 [DEBUG] [Thread-132906] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:55:55.347 [DEBUG] [Thread-132906] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:55:55.347 [DEBUG] [Thread-132906] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:55:55.347 [DEBUG] [Thread-132906] [transport.py] [_log()] client lang: <none>
2025-12-31T18:55:55.347 [DEBUG] [Thread-132906] [transport.py] [_log()] server lang: <none>
2025-12-31T18:55:55.347 [DEBUG] [Thread-132906] [transport.py] [_log()] kex follows: False
2025-12-31T18:55:55.347 [DEBUG] [Thread-132906] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:55:55.347 [DEBUG] [Thread-132906] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:55:55.347 [DEBUG] [Thread-132906] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:55:55.347 [DEBUG] [Thread-132906] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:55:55.347 [DEBUG] [Thread-132906] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:55:55.347 [DEBUG] [Thread-132906] [transport.py] [_log()] Compression: none
2025-12-31T18:55:55.347 [DEBUG] [Thread-132906] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:55:55.363 [DEBUG] [Thread-132906] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:55:55.363 [DEBUG] [Thread-132906] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:55:55.363 [DEBUG] [Thread-132906] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T18:55:55.363 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T18:55:55.364 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:55:55.364 [DEBUG] [Thread-132906] [transport.py] [_log()] userauth is OK
2025-12-31T18:55:55.364 [DEBUG] [Thread-132906] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:55:55.364 [DEBUG] [Thread-132906] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:55:55.364 [DEBUG] [Thread-132906] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T18:55:55.364 [DEBUG] [Thread-132906] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:55:55.379 [INFO] [Thread-132906] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:55:55.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:55:55.980 [DEBUG] [Thread-132906] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:55:55.980 [DEBUG] [Thread-132906] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:55:55.981 [DEBUG] [Thread-132906] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T18:55:56.021 [DEBUG] [Thread-132906] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:55:56.021 [DEBUG] [Thread-132906] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:55:56.024 [DEBUG] [Thread-132906] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:55:56.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:55:56.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T18:55:56.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T18:55:56.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T18:55:56.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:55:56.046 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T18:55:56.046 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:55:56.047 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:55:56.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T18:55:56.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.705001 -999.00  +22.20  10.09     37   +7.10 1 2 1 1 1   887    0 10.49 -205.30 ----- 6.8 10.1 245.4 14.4 23.5 -22.1 23.6 -21.3 23.5 -20.2 23.6 -21.4
2025-12-31T18:55:56.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T18:55:56.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T18:55:56.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.705001
2025-12-31T18:55:56.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T18:55:56.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T18:55:56.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T18:55:56.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T18:55:56.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T18:55:56.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T18:55:39', tmtdew=17.2, humidity=32.53, cloud=0.0, wind=17.72, temperature=22.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T16:55:12.086', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T18:55:56.049 [DEBUG] [Thread-132906] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:55:56.136 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T18:55:56.149 [DEBUG] [Thread-132909] [transport.py] [_log()] starting thread (client mode): 0xb95594b0
2025-12-31T18:55:56.149 [DEBUG] [Thread-132909] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:55:56.163 [DEBUG] [Thread-132909] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T18:55:56.163 [INFO] [Thread-132909] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T18:55:56.170 [DEBUG] [Thread-132909] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:55:56.171 [DEBUG] [Thread-132909] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T18:55:56.171 [DEBUG] [Thread-132909] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:55:56.171 [DEBUG] [Thread-132909] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:55:56.171 [DEBUG] [Thread-132909] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:55:56.171 [DEBUG] [Thread-132909] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:55:56.171 [DEBUG] [Thread-132909] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:55:56.171 [DEBUG] [Thread-132909] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:55:56.171 [DEBUG] [Thread-132909] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:55:56.171 [DEBUG] [Thread-132909] [transport.py] [_log()] client lang: <none>
2025-12-31T18:55:56.171 [DEBUG] [Thread-132909] [transport.py] [_log()] server lang: <none>
2025-12-31T18:55:56.171 [DEBUG] [Thread-132909] [transport.py] [_log()] kex follows: False
2025-12-31T18:55:56.171 [DEBUG] [Thread-132909] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:55:56.171 [DEBUG] [Thread-132909] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:55:56.171 [DEBUG] [Thread-132909] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:55:56.171 [DEBUG] [Thread-132909] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:55:56.171 [DEBUG] [Thread-132909] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:55:56.171 [DEBUG] [Thread-132909] [transport.py] [_log()] Compression: none
2025-12-31T18:55:56.171 [DEBUG] [Thread-132909] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:55:56.229 [DEBUG] [Thread-132909] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:55:56.229 [DEBUG] [Thread-132909] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:55:56.229 [DEBUG] [Thread-132909] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T18:55:56.229 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T18:55:56.230 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:55:56.286 [DEBUG] [Thread-132909] [transport.py] [_log()] userauth is OK
2025-12-31T18:55:56.287 [DEBUG] [Thread-132909] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:55:56.287 [DEBUG] [Thread-132909] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:55:56.287 [DEBUG] [Thread-132909] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T18:55:56.288 [DEBUG] [Thread-132909] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:55:56.312 [INFO] [Thread-132909] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:55:56.312 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T18:55:56.313 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:55:57.107 [DEBUG] [Thread-132909] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:55:57.107 [DEBUG] [Thread-132909] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:55:57.156 [DEBUG] [Thread-132909] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:55:57.156 [DEBUG] [Thread-132909] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:55:57.165 [DEBUG] [Thread-132909] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:55:57.174 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:55:57.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T18:55:57.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T18:55:57.192 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:55:57.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:55:57.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:55:57.201 [DEBUG] [Thread-132909] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:56:00.104 [DEBUG] [Thread-132911 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:56:15.155 [DEBUG] [Thread-132912 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:56:27.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T18:56:27.196 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T18: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-12-31T18:56:27.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 18, 56, 11), 17.23, 32.48, 0.0, 17.05, 22.36, 0, 0, 0, 2, 0, 0),)
2025-12-31T18:56:27.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 18:56:11
2025-12-31T18:56:28.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T18:56:28.188 [DEBUG] [Thread-132913] [transport.py] [_log()] starting thread (client mode): 0xb1764400
2025-12-31T18:56:28.189 [DEBUG] [Thread-132913] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:56:28.208 [DEBUG] [Thread-132913] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T18:56:28.208 [INFO] [Thread-132913] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T18:56:28.211 [DEBUG] [Thread-132913] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:56:28.211 [DEBUG] [Thread-132913] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T18:56:28.211 [DEBUG] [Thread-132913] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:56:28.211 [DEBUG] [Thread-132913] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:56:28.211 [DEBUG] [Thread-132913] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:56:28.211 [DEBUG] [Thread-132913] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:56:28.211 [DEBUG] [Thread-132913] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:56:28.211 [DEBUG] [Thread-132913] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:56:28.211 [DEBUG] [Thread-132913] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:56:28.211 [DEBUG] [Thread-132913] [transport.py] [_log()] client lang: <none>
2025-12-31T18:56:28.211 [DEBUG] [Thread-132913] [transport.py] [_log()] server lang: <none>
2025-12-31T18:56:28.212 [DEBUG] [Thread-132913] [transport.py] [_log()] kex follows: False
2025-12-31T18:56:28.212 [DEBUG] [Thread-132913] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:56:28.212 [DEBUG] [Thread-132913] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:56:28.212 [DEBUG] [Thread-132913] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:56:28.212 [DEBUG] [Thread-132913] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:56:28.212 [DEBUG] [Thread-132913] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:56:28.212 [DEBUG] [Thread-132913] [transport.py] [_log()] Compression: none
2025-12-31T18:56:28.212 [DEBUG] [Thread-132913] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:56:28.228 [DEBUG] [Thread-132913] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:56:28.229 [DEBUG] [Thread-132913] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:56:28.229 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T18:56:28.230 [DEBUG] [Thread-132913] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T18:56:28.230 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:56:28.232 [DEBUG] [Thread-132913] [transport.py] [_log()] userauth is OK
2025-12-31T18:56:28.232 [DEBUG] [Thread-132913] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:56:28.232 [DEBUG] [Thread-132913] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:56:28.232 [DEBUG] [Thread-132913] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T18:56:28.232 [DEBUG] [Thread-132913] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:56:28.255 [INFO] [Thread-132913] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:56:28.255 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:56:29.056 [DEBUG] [Thread-132913] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:56:29.056 [DEBUG] [Thread-132913] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:56:29.056 [DEBUG] [Thread-132913] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T18:56:29.096 [DEBUG] [Thread-132913] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:56:29.097 [DEBUG] [Thread-132913] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:56:29.098 [DEBUG] [Thread-132913] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:56:29.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:56:29.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T18:56:29.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T18:56:29.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T18:56:29.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:56:29.108 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T18:56:29.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:56:29.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:56:29.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T18:56:29.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.705348 -999.00  +22.30  13.39     37   +7.10 1 2 1 1 1   887    0 10.69 -194.48 ----- 17.6 13.4 244.2 20.5 23.5 -22.0 23.6 -21.4 23.6 -20.2 23.7 -21.2
2025-12-31T18:56:29.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T18:56:29.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T18:56:29.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.705348
2025-12-31T18:56:29.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T18:56:29.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T18:56:29.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T18:56:29.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T18:56:29.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T18:56:29.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T18:56:11', tmtdew=17.23, humidity=32.48, cloud=0.0, wind=17.05, temperature=22.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T16:55:42.067', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T18:56:29.109 [DEBUG] [Thread-132913] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:56:29.182 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T18:56:29.193 [DEBUG] [Thread-132916] [transport.py] [_log()] starting thread (client mode): 0xb95d56c0
2025-12-31T18:56:29.193 [DEBUG] [Thread-132916] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:56:29.207 [DEBUG] [Thread-132916] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T18:56:29.207 [INFO] [Thread-132916] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T18:56:29.215 [DEBUG] [Thread-132916] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:56:29.215 [DEBUG] [Thread-132916] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T18:56:29.215 [DEBUG] [Thread-132916] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:56:29.215 [DEBUG] [Thread-132916] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:56:29.215 [DEBUG] [Thread-132916] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:56:29.215 [DEBUG] [Thread-132916] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:56:29.215 [DEBUG] [Thread-132916] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:56:29.216 [DEBUG] [Thread-132916] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:56:29.216 [DEBUG] [Thread-132916] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:56:29.216 [DEBUG] [Thread-132916] [transport.py] [_log()] client lang: <none>
2025-12-31T18:56:29.216 [DEBUG] [Thread-132916] [transport.py] [_log()] server lang: <none>
2025-12-31T18:56:29.216 [DEBUG] [Thread-132916] [transport.py] [_log()] kex follows: False
2025-12-31T18:56:29.216 [DEBUG] [Thread-132916] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:56:29.216 [DEBUG] [Thread-132916] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:56:29.216 [DEBUG] [Thread-132916] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:56:29.216 [DEBUG] [Thread-132916] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:56:29.216 [DEBUG] [Thread-132916] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:56:29.217 [DEBUG] [Thread-132916] [transport.py] [_log()] Compression: none
2025-12-31T18:56:29.217 [DEBUG] [Thread-132916] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:56:29.274 [DEBUG] [Thread-132916] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:56:29.274 [DEBUG] [Thread-132916] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:56:29.275 [DEBUG] [Thread-132916] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T18:56:29.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T18:56:29.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:56:29.330 [DEBUG] [Thread-132916] [transport.py] [_log()] userauth is OK
2025-12-31T18:56:29.330 [DEBUG] [Thread-132916] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:56:29.330 [DEBUG] [Thread-132916] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:56:29.331 [DEBUG] [Thread-132916] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T18:56:29.331 [DEBUG] [Thread-132916] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:56:29.353 [INFO] [Thread-132916] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:56:29.353 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T18:56:29.353 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:56:30.190 [DEBUG] [Thread-132918 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:56:30.192 [DEBUG] [Thread-132916] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:56:30.193 [DEBUG] [Thread-132916] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:56:30.240 [DEBUG] [Thread-132916] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:56:30.240 [DEBUG] [Thread-132916] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:56:30.249 [DEBUG] [Thread-132916] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:56:30.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:56:30.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T18:56:30.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T18:56:30.274 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:56:30.274 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:56:30.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:56:30.283 [DEBUG] [Thread-132916] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:56:32.153 [DEBUG] [Thread-132919 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:56:37.046 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:56:37.047 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:56:45.235 [DEBUG] [Thread-132920 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:57:00.265 [DEBUG] [Thread-132921 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:57:00.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T18:57:00.305 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T18:57:00.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T18:57:01.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 18, 56, 43), 17.42, 32.39, 0.0, 19.16, 22.52, 0, 0, 0, 2, 0, 0),)
2025-12-31T18:57:01.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 18:56:43
2025-12-31T18:57:01.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T18:57:01.338 [DEBUG] [Thread-132922] [transport.py] [_log()] starting thread (client mode): 0xb17679d0
2025-12-31T18:57:01.338 [DEBUG] [Thread-132922] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:57:01.355 [DEBUG] [Thread-132922] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T18:57:01.355 [INFO] [Thread-132922] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T18:57:01.358 [DEBUG] [Thread-132922] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:57:01.358 [DEBUG] [Thread-132922] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T18:57:01.358 [DEBUG] [Thread-132922] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:57:01.358 [DEBUG] [Thread-132922] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:57:01.358 [DEBUG] [Thread-132922] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:57:01.358 [DEBUG] [Thread-132922] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:57:01.359 [DEBUG] [Thread-132922] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:57:01.359 [DEBUG] [Thread-132922] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:57:01.359 [DEBUG] [Thread-132922] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:57:01.359 [DEBUG] [Thread-132922] [transport.py] [_log()] client lang: <none>
2025-12-31T18:57:01.359 [DEBUG] [Thread-132922] [transport.py] [_log()] server lang: <none>
2025-12-31T18:57:01.359 [DEBUG] [Thread-132922] [transport.py] [_log()] kex follows: False
2025-12-31T18:57:01.359 [DEBUG] [Thread-132922] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:57:01.359 [DEBUG] [Thread-132922] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:57:01.359 [DEBUG] [Thread-132922] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:57:01.359 [DEBUG] [Thread-132922] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:57:01.359 [DEBUG] [Thread-132922] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:57:01.359 [DEBUG] [Thread-132922] [transport.py] [_log()] Compression: none
2025-12-31T18:57:01.359 [DEBUG] [Thread-132922] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:57:01.375 [DEBUG] [Thread-132922] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:57:01.375 [DEBUG] [Thread-132922] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:57:01.375 [DEBUG] [Thread-132922] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T18:57:01.375 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T18:57:01.376 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:57:01.376 [DEBUG] [Thread-132922] [transport.py] [_log()] userauth is OK
2025-12-31T18:57:01.376 [DEBUG] [Thread-132922] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:57:01.376 [DEBUG] [Thread-132922] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:57:01.376 [DEBUG] [Thread-132922] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T18:57:01.376 [DEBUG] [Thread-132922] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:57:01.388 [INFO] [Thread-132922] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:57:01.389 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:57:02.053 [DEBUG] [Thread-132922] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:57:02.053 [DEBUG] [Thread-132922] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:57:02.053 [DEBUG] [Thread-132922] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T18:57:02.094 [DEBUG] [Thread-132922] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:57:02.094 [DEBUG] [Thread-132922] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:57:02.096 [DEBUG] [Thread-132922] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:57:02.108 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:57:02.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T18:57:02.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T18:57:02.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T18:57:02.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:57:02.114 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T18:57:02.114 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:57:02.114 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:57:02.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T18:57:02.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.705695 -999.00  +22.30  10.85     37   +7.10 1 2 1 1 1   887    0 10.28 -207.69 ----- 7.5 10.8 231.1 19.9 23.5 -22.1 23.7 -21.4 23.8 -20.1 23.7 -21.6
2025-12-31T18:57:02.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T18:57:02.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T18:57:02.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.705695
2025-12-31T18:57:02.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T18:57:02.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T18:57:02.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T18:57:02.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T18:57:02.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T18:57:02.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T18:56:43', tmtdew=17.42, humidity=32.39, cloud=0.0, wind=19.16, temperature=22.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T16:56:12.048', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T18:57:02.115 [DEBUG] [Thread-132922] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:57:02.190 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T18:57:02.201 [DEBUG] [Thread-132925] [transport.py] [_log()] starting thread (client mode): 0xb957be80
2025-12-31T18:57:02.201 [DEBUG] [Thread-132925] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:57:02.216 [DEBUG] [Thread-132925] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T18:57:02.216 [INFO] [Thread-132925] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T18:57:02.227 [DEBUG] [Thread-132925] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:57:02.227 [DEBUG] [Thread-132925] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T18:57:02.227 [DEBUG] [Thread-132925] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:57:02.227 [DEBUG] [Thread-132925] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:57:02.227 [DEBUG] [Thread-132925] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:57:02.227 [DEBUG] [Thread-132925] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:57:02.227 [DEBUG] [Thread-132925] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:57:02.227 [DEBUG] [Thread-132925] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:57:02.227 [DEBUG] [Thread-132925] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:57:02.227 [DEBUG] [Thread-132925] [transport.py] [_log()] client lang: <none>
2025-12-31T18:57:02.227 [DEBUG] [Thread-132925] [transport.py] [_log()] server lang: <none>
2025-12-31T18:57:02.227 [DEBUG] [Thread-132925] [transport.py] [_log()] kex follows: False
2025-12-31T18:57:02.227 [DEBUG] [Thread-132925] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:57:02.227 [DEBUG] [Thread-132925] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:57:02.227 [DEBUG] [Thread-132925] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:57:02.227 [DEBUG] [Thread-132925] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:57:02.227 [DEBUG] [Thread-132925] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:57:02.227 [DEBUG] [Thread-132925] [transport.py] [_log()] Compression: none
2025-12-31T18:57:02.227 [DEBUG] [Thread-132925] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:57:02.287 [DEBUG] [Thread-132925] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:57:02.287 [DEBUG] [Thread-132925] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:57:02.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T18:57:02.287 [DEBUG] [Thread-132925] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T18:57:02.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:57:02.342 [DEBUG] [Thread-132925] [transport.py] [_log()] userauth is OK
2025-12-31T18:57:02.342 [DEBUG] [Thread-132925] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:57:02.342 [DEBUG] [Thread-132925] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:57:02.342 [DEBUG] [Thread-132925] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T18:57:02.342 [DEBUG] [Thread-132925] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:57:02.356 [INFO] [Thread-132925] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:57:02.356 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T18:57:02.356 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:57:03.188 [DEBUG] [Thread-132925] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:57:03.188 [DEBUG] [Thread-132925] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:57:03.236 [DEBUG] [Thread-132925] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:57:03.236 [DEBUG] [Thread-132925] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:57:03.245 [DEBUG] [Thread-132925] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:57:03.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:57:03.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-12-31T18:57:03.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T18:57:03.272 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:57:03.272 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:57:03.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:57:03.280 [DEBUG] [Thread-132925] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:57:15.297 [DEBUG] [Thread-132927 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:57:30.353 [DEBUG] [Thread-132928 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:57:32.201 [DEBUG] [Thread-132929 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:57:33.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T18:57:33.303 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T18:57:33.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T18:57:34.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 18, 57, 15), 17.47, 32.29, 0.0, 20.94, 22.59, 0, 0, 0, 2, 0, 0),)
2025-12-31T18:57:34.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 18:57:15
2025-12-31T18:57:34.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T18:57:34.285 [DEBUG] [Thread-132930] [transport.py] [_log()] starting thread (client mode): 0xb6bbcd90
2025-12-31T18:57:34.285 [DEBUG] [Thread-132930] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:57:34.305 [DEBUG] [Thread-132930] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T18:57:34.305 [INFO] [Thread-132930] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T18:57:34.308 [DEBUG] [Thread-132930] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:57:34.308 [DEBUG] [Thread-132930] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T18:57:34.308 [DEBUG] [Thread-132930] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:57:34.308 [DEBUG] [Thread-132930] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:57:34.308 [DEBUG] [Thread-132930] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:57:34.308 [DEBUG] [Thread-132930] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:57:34.308 [DEBUG] [Thread-132930] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:57:34.308 [DEBUG] [Thread-132930] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:57:34.308 [DEBUG] [Thread-132930] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:57:34.308 [DEBUG] [Thread-132930] [transport.py] [_log()] client lang: <none>
2025-12-31T18:57:34.308 [DEBUG] [Thread-132930] [transport.py] [_log()] server lang: <none>
2025-12-31T18:57:34.308 [DEBUG] [Thread-132930] [transport.py] [_log()] kex follows: False
2025-12-31T18:57:34.308 [DEBUG] [Thread-132930] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:57:34.308 [DEBUG] [Thread-132930] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:57:34.308 [DEBUG] [Thread-132930] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:57:34.308 [DEBUG] [Thread-132930] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:57:34.309 [DEBUG] [Thread-132930] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:57:34.309 [DEBUG] [Thread-132930] [transport.py] [_log()] Compression: none
2025-12-31T18:57:34.309 [DEBUG] [Thread-132930] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:57:34.326 [DEBUG] [Thread-132930] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:57:34.326 [DEBUG] [Thread-132930] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:57:34.327 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T18:57:34.328 [DEBUG] [Thread-132930] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T18:57:34.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:57:34.330 [DEBUG] [Thread-132930] [transport.py] [_log()] userauth is OK
2025-12-31T18:57:34.330 [DEBUG] [Thread-132930] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:57:34.330 [DEBUG] [Thread-132930] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:57:34.330 [DEBUG] [Thread-132930] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T18:57:34.330 [DEBUG] [Thread-132930] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:57:34.352 [INFO] [Thread-132930] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:57:34.353 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:57:35.109 [DEBUG] [Thread-132930] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:57:35.109 [DEBUG] [Thread-132930] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:57:35.110 [DEBUG] [Thread-132930] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T18:57:35.150 [DEBUG] [Thread-132930] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:57:35.150 [DEBUG] [Thread-132930] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:57:35.154 [DEBUG] [Thread-132930] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:57:35.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:57:35.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T18:57:35.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T18:57:35.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T18:57:35.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:57:35.172 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T18:57:35.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:57:35.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:57:35.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T18:57:35.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.706042 -999.00  +22.40  18.95     37   +7.10 1 2 1 1 1   887    0 10.22 -210.40 ----- 21.0 18.9 249.4 21.7 23.6 -22.1 23.8 -21.3 23.9 -20.2 23.9 -21.5
2025-12-31T18:57:35.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T18:57:35.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T18:57:35.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.706042
2025-12-31T18:57:35.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T18:57:35.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T18:57:35.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T18:57:35.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T18:57:35.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T18:57:35.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T18:57:15', tmtdew=17.47, humidity=32.29, cloud=0.0, wind=20.94, temperature=22.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T16:56:42.029', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T18:57:35.175 [DEBUG] [Thread-132930] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:57:35.255 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T18:57:35.267 [DEBUG] [Thread-132933] [transport.py] [_log()] starting thread (client mode): 0xb6bbfd60
2025-12-31T18:57:35.267 [DEBUG] [Thread-132933] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:57:35.281 [DEBUG] [Thread-132933] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T18:57:35.282 [INFO] [Thread-132933] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T18:57:35.289 [DEBUG] [Thread-132933] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:57:35.289 [DEBUG] [Thread-132933] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T18:57:35.290 [DEBUG] [Thread-132933] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:57:35.290 [DEBUG] [Thread-132933] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:57:35.290 [DEBUG] [Thread-132933] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:57:35.290 [DEBUG] [Thread-132933] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:57:35.290 [DEBUG] [Thread-132933] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:57:35.290 [DEBUG] [Thread-132933] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:57:35.290 [DEBUG] [Thread-132933] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:57:35.290 [DEBUG] [Thread-132933] [transport.py] [_log()] client lang: <none>
2025-12-31T18:57:35.290 [DEBUG] [Thread-132933] [transport.py] [_log()] server lang: <none>
2025-12-31T18:57:35.290 [DEBUG] [Thread-132933] [transport.py] [_log()] kex follows: False
2025-12-31T18:57:35.290 [DEBUG] [Thread-132933] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:57:35.290 [DEBUG] [Thread-132933] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:57:35.290 [DEBUG] [Thread-132933] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:57:35.290 [DEBUG] [Thread-132933] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:57:35.290 [DEBUG] [Thread-132933] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:57:35.290 [DEBUG] [Thread-132933] [transport.py] [_log()] Compression: none
2025-12-31T18:57:35.290 [DEBUG] [Thread-132933] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:57:35.347 [DEBUG] [Thread-132933] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:57:35.347 [DEBUG] [Thread-132933] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:57:35.348 [DEBUG] [Thread-132933] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T18:57:35.348 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T18:57:35.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:57:35.403 [DEBUG] [Thread-132933] [transport.py] [_log()] userauth is OK
2025-12-31T18:57:35.403 [DEBUG] [Thread-132933] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:57:35.403 [DEBUG] [Thread-132933] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:57:35.404 [DEBUG] [Thread-132933] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T18:57:35.404 [DEBUG] [Thread-132933] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:57:35.422 [INFO] [Thread-132933] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:57:35.422 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T18:57:35.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:57:36.242 [DEBUG] [Thread-132933] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:57:36.242 [DEBUG] [Thread-132933] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:57:36.291 [DEBUG] [Thread-132933] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:57:36.291 [DEBUG] [Thread-132933] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:57:36.299 [DEBUG] [Thread-132933] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:57:36.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:57:36.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T18:57:36.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T18:57:36.322 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:57:36.322 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:57:36.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:57:36.330 [DEBUG] [Thread-132933] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:57:37.185 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:57:37.185 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:57:45.388 [DEBUG] [Thread-132935 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:58:00.443 [DEBUG] [Thread-132936 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:58:06.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T18:58:06.353 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T18:58:06.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T18:58:07.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 18, 57, 47), 17.53, 31.68, 0.0, 19.9, 22.51, 0, 0, 0, 2, 0, 0),)
2025-12-31T18:58:07.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 18:57:47
2025-12-31T18:58:07.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T18:58:07.337 [DEBUG] [Thread-132937] [transport.py] [_log()] starting thread (client mode): 0xb9559a80
2025-12-31T18:58:07.337 [DEBUG] [Thread-132937] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:58:07.358 [DEBUG] [Thread-132937] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T18:58:07.358 [INFO] [Thread-132937] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T18:58:07.360 [DEBUG] [Thread-132937] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:58:07.360 [DEBUG] [Thread-132937] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T18:58:07.360 [DEBUG] [Thread-132937] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:58:07.360 [DEBUG] [Thread-132937] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:58:07.360 [DEBUG] [Thread-132937] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:58:07.360 [DEBUG] [Thread-132937] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:58:07.360 [DEBUG] [Thread-132937] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:58:07.360 [DEBUG] [Thread-132937] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:58:07.360 [DEBUG] [Thread-132937] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:58:07.360 [DEBUG] [Thread-132937] [transport.py] [_log()] client lang: <none>
2025-12-31T18:58:07.360 [DEBUG] [Thread-132937] [transport.py] [_log()] server lang: <none>
2025-12-31T18:58:07.360 [DEBUG] [Thread-132937] [transport.py] [_log()] kex follows: False
2025-12-31T18:58:07.360 [DEBUG] [Thread-132937] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:58:07.360 [DEBUG] [Thread-132937] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:58:07.360 [DEBUG] [Thread-132937] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:58:07.360 [DEBUG] [Thread-132937] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:58:07.361 [DEBUG] [Thread-132937] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:58:07.361 [DEBUG] [Thread-132937] [transport.py] [_log()] Compression: none
2025-12-31T18:58:07.361 [DEBUG] [Thread-132937] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:58:07.379 [DEBUG] [Thread-132937] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:58:07.379 [DEBUG] [Thread-132937] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:58:07.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T18:58:07.380 [DEBUG] [Thread-132937] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T18:58:07.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:58:07.382 [DEBUG] [Thread-132937] [transport.py] [_log()] userauth is OK
2025-12-31T18:58:07.382 [DEBUG] [Thread-132937] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:58:07.383 [DEBUG] [Thread-132937] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:58:07.383 [DEBUG] [Thread-132937] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T18:58:07.383 [DEBUG] [Thread-132937] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:58:07.404 [INFO] [Thread-132937] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:58:07.404 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:58:08.020 [DEBUG] [Thread-132937] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:58:08.020 [DEBUG] [Thread-132937] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:58:08.021 [DEBUG] [Thread-132937] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T18:58:08.061 [DEBUG] [Thread-132937] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:58:08.062 [DEBUG] [Thread-132937] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:58:08.065 [DEBUG] [Thread-132937] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:58:08.077 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:58:08.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T18:58:08.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T18:58:08.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T18:58:08.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:58:08.091 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T18:58:08.092 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:58:08.092 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:58:08.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T18:58:08.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.706390 -999.00  +22.30  20.52     37   +7.10 1 2 1 1 1   887    0 9.80 -215.57 ----- 14.5 20.5 256.4 23.1 23.6 -22.5 23.9 -21.7 23.9 -20.4 23.9 -22.2
2025-12-31T18:58:08.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T18:58:08.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T18:58:08.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.706390
2025-12-31T18:58:08.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T18:58:08.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T18:58:08.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T18:58:08.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T18:58:08.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T18:58:08.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T18:57:47', tmtdew=17.53, humidity=31.68, cloud=0.0, wind=19.9, temperature=22.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T16:57:12.096', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T18:58:08.094 [DEBUG] [Thread-132937] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:58:08.179 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T18:58:08.191 [DEBUG] [Thread-132940] [transport.py] [_log()] starting thread (client mode): 0xb1765390
2025-12-31T18:58:08.191 [DEBUG] [Thread-132940] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:58:08.205 [DEBUG] [Thread-132940] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T18:58:08.206 [INFO] [Thread-132940] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T18:58:08.213 [DEBUG] [Thread-132940] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:58:08.213 [DEBUG] [Thread-132940] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T18:58:08.214 [DEBUG] [Thread-132940] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:58:08.214 [DEBUG] [Thread-132940] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:58:08.214 [DEBUG] [Thread-132940] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:58:08.214 [DEBUG] [Thread-132940] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:58:08.214 [DEBUG] [Thread-132940] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:58:08.214 [DEBUG] [Thread-132940] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:58:08.214 [DEBUG] [Thread-132940] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:58:08.214 [DEBUG] [Thread-132940] [transport.py] [_log()] client lang: <none>
2025-12-31T18:58:08.214 [DEBUG] [Thread-132940] [transport.py] [_log()] server lang: <none>
2025-12-31T18:58:08.215 [DEBUG] [Thread-132940] [transport.py] [_log()] kex follows: False
2025-12-31T18:58:08.215 [DEBUG] [Thread-132940] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:58:08.215 [DEBUG] [Thread-132940] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:58:08.215 [DEBUG] [Thread-132940] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:58:08.215 [DEBUG] [Thread-132940] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:58:08.215 [DEBUG] [Thread-132940] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:58:08.215 [DEBUG] [Thread-132940] [transport.py] [_log()] Compression: none
2025-12-31T18:58:08.215 [DEBUG] [Thread-132940] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:58:08.276 [DEBUG] [Thread-132940] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:58:08.277 [DEBUG] [Thread-132940] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:58:08.277 [DEBUG] [Thread-132940] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T18:58:08.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T18:58:08.278 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:58:08.337 [DEBUG] [Thread-132940] [transport.py] [_log()] userauth is OK
2025-12-31T18:58:08.337 [DEBUG] [Thread-132940] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:58:08.337 [DEBUG] [Thread-132940] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:58:08.337 [DEBUG] [Thread-132940] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T18:58:08.337 [DEBUG] [Thread-132940] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:58:08.356 [INFO] [Thread-132940] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:58:08.356 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T18:58:08.357 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:58:09.214 [DEBUG] [Thread-132940] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:58:09.214 [DEBUG] [Thread-132940] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:58:09.263 [DEBUG] [Thread-132940] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:58:09.264 [DEBUG] [Thread-132940] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:58:09.275 [DEBUG] [Thread-132940] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:58:09.286 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:58:09.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T18:58:09.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T18:58:09.309 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:58:09.310 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:58:09.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:58:09.321 [DEBUG] [Thread-132940] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:58:15.478 [DEBUG] [Thread-132942 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:58:30.516 [DEBUG] [Thread-132943 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:58:32.249 [DEBUG] [Thread-132944 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:58:37.324 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:58:37.325 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:58:39.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T18:58:39.341 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T18:58:39.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T18:58:40.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 18, 58, 19), 17.56, 31.61, 0.0, 21.12, 22.52, 0, 0, 0, 2, 0, 0),)
2025-12-31T18:58:40.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 18:58:19
2025-12-31T18:58:40.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T18:58:40.343 [DEBUG] [Thread-132945] [transport.py] [_log()] starting thread (client mode): 0xb957a4d0
2025-12-31T18:58:40.343 [DEBUG] [Thread-132945] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:58:40.363 [DEBUG] [Thread-132945] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T18:58:40.363 [INFO] [Thread-132945] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T18:58:40.366 [DEBUG] [Thread-132945] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:58:40.366 [DEBUG] [Thread-132945] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T18:58:40.366 [DEBUG] [Thread-132945] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:58:40.366 [DEBUG] [Thread-132945] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:58:40.367 [DEBUG] [Thread-132945] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:58:40.367 [DEBUG] [Thread-132945] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:58:40.367 [DEBUG] [Thread-132945] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:58:40.367 [DEBUG] [Thread-132945] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:58:40.367 [DEBUG] [Thread-132945] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:58:40.367 [DEBUG] [Thread-132945] [transport.py] [_log()] client lang: <none>
2025-12-31T18:58:40.367 [DEBUG] [Thread-132945] [transport.py] [_log()] server lang: <none>
2025-12-31T18:58:40.367 [DEBUG] [Thread-132945] [transport.py] [_log()] kex follows: False
2025-12-31T18:58:40.367 [DEBUG] [Thread-132945] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:58:40.367 [DEBUG] [Thread-132945] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:58:40.367 [DEBUG] [Thread-132945] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:58:40.367 [DEBUG] [Thread-132945] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:58:40.367 [DEBUG] [Thread-132945] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:58:40.367 [DEBUG] [Thread-132945] [transport.py] [_log()] Compression: none
2025-12-31T18:58:40.367 [DEBUG] [Thread-132945] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:58:40.385 [DEBUG] [Thread-132945] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:58:40.386 [DEBUG] [Thread-132945] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:58:40.386 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T18:58:40.387 [DEBUG] [Thread-132945] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T18:58:40.388 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:58:40.429 [DEBUG] [Thread-132945] [transport.py] [_log()] userauth is OK
2025-12-31T18:58:40.429 [DEBUG] [Thread-132945] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:58:40.429 [DEBUG] [Thread-132945] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:58:40.430 [DEBUG] [Thread-132945] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T18:58:40.430 [DEBUG] [Thread-132945] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:58:40.464 [INFO] [Thread-132945] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:58:40.465 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:58:41.226 [DEBUG] [Thread-132945] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:58:41.226 [DEBUG] [Thread-132945] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:58:41.226 [DEBUG] [Thread-132945] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T18:58:41.266 [DEBUG] [Thread-132945] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:58:41.267 [DEBUG] [Thread-132945] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:58:41.270 [DEBUG] [Thread-132945] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:58:41.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:58:41.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T18:58:41.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T18:58:41.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T18:58:41.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:58:41.292 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T18:58:41.292 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:58:41.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:58:41.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T18:58:41.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.706737 -999.00  +22.20  21.74     37   +7.00 1 2 1 1 1   887    0 9.96 -220.57 ----- 19.7 21.7 259.6 22.8 23.6 -22.6 23.9 -21.7 24.0 -20.8 24.0 -22.5
2025-12-31T18:58:41.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T18:58:41.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T18:58:41.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.706737
2025-12-31T18:58:41.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T18:58:41.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T18:58:41.294 [DEBUG] [Thread-132945] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:58:41.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T18:58:41.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T18:58:41.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T18:58:41.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T18:58:19', tmtdew=17.56, humidity=31.61, cloud=0.0, wind=21.12, temperature=22.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T16:57:42.077', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T18:58:41.379 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T18:58:41.389 [DEBUG] [Thread-132948] [transport.py] [_log()] starting thread (client mode): 0xb1746bf0
2025-12-31T18:58:41.389 [DEBUG] [Thread-132948] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:58:41.404 [DEBUG] [Thread-132948] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T18:58:41.404 [INFO] [Thread-132948] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T18:58:41.412 [DEBUG] [Thread-132948] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:58:41.412 [DEBUG] [Thread-132948] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T18:58:41.412 [DEBUG] [Thread-132948] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:58:41.412 [DEBUG] [Thread-132948] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:58:41.412 [DEBUG] [Thread-132948] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:58:41.412 [DEBUG] [Thread-132948] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:58:41.412 [DEBUG] [Thread-132948] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:58:41.412 [DEBUG] [Thread-132948] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:58:41.413 [DEBUG] [Thread-132948] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:58:41.413 [DEBUG] [Thread-132948] [transport.py] [_log()] client lang: <none>
2025-12-31T18:58:41.413 [DEBUG] [Thread-132948] [transport.py] [_log()] server lang: <none>
2025-12-31T18:58:41.413 [DEBUG] [Thread-132948] [transport.py] [_log()] kex follows: False
2025-12-31T18:58:41.413 [DEBUG] [Thread-132948] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:58:41.413 [DEBUG] [Thread-132948] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:58:41.413 [DEBUG] [Thread-132948] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:58:41.414 [DEBUG] [Thread-132948] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:58:41.414 [DEBUG] [Thread-132948] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:58:41.414 [DEBUG] [Thread-132948] [transport.py] [_log()] Compression: none
2025-12-31T18:58:41.414 [DEBUG] [Thread-132948] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:58:41.471 [DEBUG] [Thread-132948] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:58:41.471 [DEBUG] [Thread-132948] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:58:41.472 [DEBUG] [Thread-132948] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T18:58:41.472 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T18:58:41.472 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:58:41.527 [DEBUG] [Thread-132948] [transport.py] [_log()] userauth is OK
2025-12-31T18:58:41.527 [DEBUG] [Thread-132948] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:58:41.527 [DEBUG] [Thread-132948] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:58:41.528 [DEBUG] [Thread-132948] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T18:58:41.528 [DEBUG] [Thread-132948] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:58:41.550 [INFO] [Thread-132948] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:58:41.550 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T18:58:41.551 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:58:42.395 [DEBUG] [Thread-132948] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:58:42.395 [DEBUG] [Thread-132948] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:58:42.442 [DEBUG] [Thread-132948] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:58:42.443 [DEBUG] [Thread-132948] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:58:42.451 [DEBUG] [Thread-132948] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:58:42.460 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:58:42.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T18:58:42.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T18:58:42.477 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:58:42.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:58:42.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:58:42.485 [DEBUG] [Thread-132948] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:58:45.549 [DEBUG] [Thread-132950 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:59:00.594 [DEBUG] [Thread-132951 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:59:12.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T18:59:12.508 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T18:59:12.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-12-31T18:59:13.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 18, 58, 51), 17.37, 32.2, 0.0, 20.66, 22.54, 0, 0, 0, 2, 0, 0),)
2025-12-31T18:59:13.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 18:58:51
2025-12-31T18:59:13.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T18:59:13.472 [DEBUG] [Thread-132952] [transport.py] [_log()] starting thread (client mode): 0xb6bbe050
2025-12-31T18:59:13.473 [DEBUG] [Thread-132952] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:59:13.494 [DEBUG] [Thread-132952] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T18:59:13.494 [INFO] [Thread-132952] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T18:59:13.496 [DEBUG] [Thread-132952] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:59:13.496 [DEBUG] [Thread-132952] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T18:59:13.496 [DEBUG] [Thread-132952] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:59:13.496 [DEBUG] [Thread-132952] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:59:13.496 [DEBUG] [Thread-132952] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:59:13.496 [DEBUG] [Thread-132952] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:59:13.496 [DEBUG] [Thread-132952] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:59:13.496 [DEBUG] [Thread-132952] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:59:13.496 [DEBUG] [Thread-132952] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:59:13.496 [DEBUG] [Thread-132952] [transport.py] [_log()] client lang: <none>
2025-12-31T18:59:13.496 [DEBUG] [Thread-132952] [transport.py] [_log()] server lang: <none>
2025-12-31T18:59:13.496 [DEBUG] [Thread-132952] [transport.py] [_log()] kex follows: False
2025-12-31T18:59:13.496 [DEBUG] [Thread-132952] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:59:13.496 [DEBUG] [Thread-132952] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:59:13.496 [DEBUG] [Thread-132952] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:59:13.496 [DEBUG] [Thread-132952] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:59:13.496 [DEBUG] [Thread-132952] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:59:13.496 [DEBUG] [Thread-132952] [transport.py] [_log()] Compression: none
2025-12-31T18:59:13.496 [DEBUG] [Thread-132952] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:59:13.505 [DEBUG] [Thread-132952] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:59:13.505 [DEBUG] [Thread-132952] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:59:13.505 [DEBUG] [Thread-132952] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T18:59:13.506 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T18:59:13.506 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:59:13.508 [DEBUG] [Thread-132952] [transport.py] [_log()] userauth is OK
2025-12-31T18:59:13.508 [DEBUG] [Thread-132952] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:59:13.508 [DEBUG] [Thread-132952] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:59:13.508 [DEBUG] [Thread-132952] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T18:59:13.508 [DEBUG] [Thread-132952] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:59:13.526 [INFO] [Thread-132952] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:59:13.528 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:59:14.158 [DEBUG] [Thread-132952] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:59:14.159 [DEBUG] [Thread-132952] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:59:14.159 [DEBUG] [Thread-132952] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T18:59:14.199 [DEBUG] [Thread-132952] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:59:14.199 [DEBUG] [Thread-132952] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:59:14.203 [DEBUG] [Thread-132952] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:59:14.214 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:59:14.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T18:59:14.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T18:59:14.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T18:59:14.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:59:14.231 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T18:59:14.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:59:14.231 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:59:14.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T18:59:14.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.707084 -999.00  +22.20  12.92     38   +7.20 1 2 1 1 1   887    0 10.32 -209.67 ----- 10.7 12.9 257.8 20.3 23.6 -22.7 23.9 -21.7 24.0 -20.7 24.1 -22.3
2025-12-31T18:59:14.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T18:59:14.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T18:59:14.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.707084
2025-12-31T18:59:14.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T18:59:14.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T18:59:14.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T18:59:14.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T18:59:14.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T18:59:14.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T18:58:51', tmtdew=17.37, humidity=32.2, cloud=0.0, wind=20.66, temperature=22.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T16:58:12.058', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T18:59:14.234 [DEBUG] [Thread-132952] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:59:14.310 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T18:59:14.323 [DEBUG] [Thread-132955] [transport.py] [_log()] starting thread (client mode): 0xb1765300
2025-12-31T18:59:14.323 [DEBUG] [Thread-132955] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:59:14.338 [DEBUG] [Thread-132955] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T18:59:14.338 [INFO] [Thread-132955] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T18:59:14.348 [DEBUG] [Thread-132955] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:59:14.349 [DEBUG] [Thread-132955] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T18:59:14.349 [DEBUG] [Thread-132955] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:59:14.349 [DEBUG] [Thread-132955] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:59:14.349 [DEBUG] [Thread-132955] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:59:14.349 [DEBUG] [Thread-132955] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:59:14.349 [DEBUG] [Thread-132955] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:59:14.349 [DEBUG] [Thread-132955] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:59:14.350 [DEBUG] [Thread-132955] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:59:14.350 [DEBUG] [Thread-132955] [transport.py] [_log()] client lang: <none>
2025-12-31T18:59:14.350 [DEBUG] [Thread-132955] [transport.py] [_log()] server lang: <none>
2025-12-31T18:59:14.350 [DEBUG] [Thread-132955] [transport.py] [_log()] kex follows: False
2025-12-31T18:59:14.350 [DEBUG] [Thread-132955] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:59:14.350 [DEBUG] [Thread-132955] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:59:14.350 [DEBUG] [Thread-132955] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:59:14.351 [DEBUG] [Thread-132955] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:59:14.351 [DEBUG] [Thread-132955] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:59:14.351 [DEBUG] [Thread-132955] [transport.py] [_log()] Compression: none
2025-12-31T18:59:14.351 [DEBUG] [Thread-132955] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:59:14.405 [DEBUG] [Thread-132955] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:59:14.405 [DEBUG] [Thread-132955] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:59:14.406 [DEBUG] [Thread-132955] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T18:59:14.406 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T18:59:14.408 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:59:14.464 [DEBUG] [Thread-132955] [transport.py] [_log()] userauth is OK
2025-12-31T18:59:14.464 [DEBUG] [Thread-132955] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:59:14.465 [DEBUG] [Thread-132955] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:59:14.465 [DEBUG] [Thread-132955] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T18:59:14.465 [DEBUG] [Thread-132955] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:59:14.484 [INFO] [Thread-132955] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:59: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-12-31T18:59:14.485 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:59:15.374 [DEBUG] [Thread-132955] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:59:15.375 [DEBUG] [Thread-132955] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:59:15.422 [DEBUG] [Thread-132955] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:59:15.422 [DEBUG] [Thread-132955] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:59:15.431 [DEBUG] [Thread-132955] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:59:15.439 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:59:15.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T18:59:15.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T18:59:15.456 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:59:15.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:59:15.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:59:15.464 [DEBUG] [Thread-132955] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:59:15.629 [DEBUG] [Thread-132957 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:59:30.689 [DEBUG] [Thread-132958 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:59:32.286 [DEBUG] [Thread-132959 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:59:37.465 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:59:37.466 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:59:45.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T18:59:45.487 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T18:59:45.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T18:59:45.721 [DEBUG] [Thread-132960 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T18:59:46.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 18, 59, 23), 17.29, 32.36, 0.0, 20.17, 22.52, 0, 0, 0, 2, 0, 0),)
2025-12-31T18:59:46.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 18:59:23
2025-12-31T18:59:46.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T18:59:46.477 [DEBUG] [Thread-132961] [transport.py] [_log()] starting thread (client mode): 0xb6ba0dc0
2025-12-31T18:59:46.477 [DEBUG] [Thread-132961] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:59:46.498 [DEBUG] [Thread-132961] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T18:59:46.498 [INFO] [Thread-132961] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T18:59:46.502 [DEBUG] [Thread-132961] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:59:46.502 [DEBUG] [Thread-132961] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T18:59:46.502 [DEBUG] [Thread-132961] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:59:46.502 [DEBUG] [Thread-132961] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:59:46.502 [DEBUG] [Thread-132961] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:59:46.502 [DEBUG] [Thread-132961] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:59:46.503 [DEBUG] [Thread-132961] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:59:46.503 [DEBUG] [Thread-132961] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:59:46.503 [DEBUG] [Thread-132961] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:59:46.503 [DEBUG] [Thread-132961] [transport.py] [_log()] client lang: <none>
2025-12-31T18:59:46.503 [DEBUG] [Thread-132961] [transport.py] [_log()] server lang: <none>
2025-12-31T18:59:46.503 [DEBUG] [Thread-132961] [transport.py] [_log()] kex follows: False
2025-12-31T18:59:46.503 [DEBUG] [Thread-132961] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:59:46.503 [DEBUG] [Thread-132961] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:59:46.503 [DEBUG] [Thread-132961] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:59:46.503 [DEBUG] [Thread-132961] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:59:46.503 [DEBUG] [Thread-132961] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:59:46.503 [DEBUG] [Thread-132961] [transport.py] [_log()] Compression: none
2025-12-31T18:59:46.503 [DEBUG] [Thread-132961] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:59:46.520 [DEBUG] [Thread-132961] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:59:46.521 [DEBUG] [Thread-132961] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:59:46.521 [DEBUG] [Thread-132961] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T18:59:46.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T18:59:46.522 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:59:46.523 [DEBUG] [Thread-132961] [transport.py] [_log()] userauth is OK
2025-12-31T18:59:46.523 [DEBUG] [Thread-132961] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:59:46.524 [DEBUG] [Thread-132961] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:59:46.524 [DEBUG] [Thread-132961] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T18:59:46.524 [DEBUG] [Thread-132961] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:59:46.547 [INFO] [Thread-132961] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:59:46.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:59:47.283 [DEBUG] [Thread-132961] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:59:47.284 [DEBUG] [Thread-132961] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:59:47.284 [DEBUG] [Thread-132961] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T18:59:47.325 [DEBUG] [Thread-132961] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:59:47.325 [DEBUG] [Thread-132961] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:59:47.329 [DEBUG] [Thread-132961] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:59:47.343 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:59:47.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T18:59:47.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T18:59:47.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T18:59:47.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:59:47.353 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T18:59:47.353 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:59:47.353 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:59:47.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T18:59:47.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.707778 -999.00  +22.40  10.71     37   +7.20 1 2 1 1 1   887    0 10.17 -202.25 ----- 8.2 10.7 246.3 17.5 23.7 -22.4 24.0 -21.6 24.2 -20.8 24.2 -22.1
2025-12-31T18:59:47.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T18:59:47.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T18:59:47.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.707778
2025-12-31T18:59:47.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T18:59:47.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T18:59:47.355 [DEBUG] [Thread-132961] [transport.py] [_log()] EOF in transport thread
2025-12-31T18:59:47.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T18:59:47.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T18:59:47.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T18:59:47.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T18:59:23', tmtdew=17.29, humidity=32.36, cloud=0.0, wind=20.17, temperature=22.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T16:59:12.019', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T18:59:47.444 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T18:59:47.455 [DEBUG] [Thread-132964] [transport.py] [_log()] starting thread (client mode): 0xb1746980
2025-12-31T18:59:47.455 [DEBUG] [Thread-132964] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T18:59:47.470 [DEBUG] [Thread-132964] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T18:59:47.470 [INFO] [Thread-132964] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T18:59:47.478 [DEBUG] [Thread-132964] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T18:59:47.478 [DEBUG] [Thread-132964] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T18:59:47.478 [DEBUG] [Thread-132964] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T18:59:47.478 [DEBUG] [Thread-132964] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:59:47.478 [DEBUG] [Thread-132964] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T18:59:47.478 [DEBUG] [Thread-132964] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:59:47.478 [DEBUG] [Thread-132964] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T18:59:47.479 [DEBUG] [Thread-132964] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T18:59:47.479 [DEBUG] [Thread-132964] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T18:59:47.479 [DEBUG] [Thread-132964] [transport.py] [_log()] client lang: <none>
2025-12-31T18:59:47.479 [DEBUG] [Thread-132964] [transport.py] [_log()] server lang: <none>
2025-12-31T18:59:47.479 [DEBUG] [Thread-132964] [transport.py] [_log()] kex follows: False
2025-12-31T18:59:47.479 [DEBUG] [Thread-132964] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T18:59:47.479 [DEBUG] [Thread-132964] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T18:59:47.479 [DEBUG] [Thread-132964] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T18:59:47.479 [DEBUG] [Thread-132964] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T18:59:47.479 [DEBUG] [Thread-132964] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T18:59:47.479 [DEBUG] [Thread-132964] [transport.py] [_log()] Compression: none
2025-12-31T18:59:47.479 [DEBUG] [Thread-132964] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T18:59:47.536 [DEBUG] [Thread-132964] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T18:59:47.537 [DEBUG] [Thread-132964] [transport.py] [_log()] Switch to new keys ...
2025-12-31T18:59:47.538 [DEBUG] [Thread-132964] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T18:59:47.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T18:59:47.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T18:59:47.592 [DEBUG] [Thread-132964] [transport.py] [_log()] userauth is OK
2025-12-31T18:59:47.593 [DEBUG] [Thread-132964] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T18:59:47.593 [DEBUG] [Thread-132964] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T18:59:47.593 [DEBUG] [Thread-132964] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T18:59:47.593 [DEBUG] [Thread-132964] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T18:59:47.612 [INFO] [Thread-132964] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T18:59:47.612 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T18:59:47.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T18:59:48.436 [DEBUG] [Thread-132964] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T18:59:48.436 [DEBUG] [Thread-132964] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T18:59:48.484 [DEBUG] [Thread-132964] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T18:59:48.484 [DEBUG] [Thread-132964] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T18:59:48.493 [DEBUG] [Thread-132964] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T18:59:48.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T18:59:48.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T18:59:48.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T18:59:48.521 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T18:59:48.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T18:59:48.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T18:59:48.530 [DEBUG] [Thread-132964] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:00:00.753 [DEBUG] [Thread-132966 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:00:15.807 [DEBUG] [Thread-132967 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:00:18.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T19:00:18.552 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T19:00:18.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T19:00:19.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 18, 59, 55), 17.3, 32.56, 0.0, 14.26, 22.46, 0, 0, 0, 2, 0, 0),)
2025-12-31T19:00:19.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 18:59:55
2025-12-31T19:00:19.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T19:00:19.527 [DEBUG] [Thread-132968] [transport.py] [_log()] starting thread (client mode): 0xb95597b0
2025-12-31T19:00:19.527 [DEBUG] [Thread-132968] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:00:19.546 [DEBUG] [Thread-132968] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T19:00:19.546 [INFO] [Thread-132968] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T19:00:19.548 [DEBUG] [Thread-132968] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:00:19.548 [DEBUG] [Thread-132968] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T19:00:19.548 [DEBUG] [Thread-132968] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:00:19.548 [DEBUG] [Thread-132968] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:00:19.548 [DEBUG] [Thread-132968] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:00:19.548 [DEBUG] [Thread-132968] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:00:19.548 [DEBUG] [Thread-132968] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:00:19.548 [DEBUG] [Thread-132968] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:00:19.548 [DEBUG] [Thread-132968] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:00:19.548 [DEBUG] [Thread-132968] [transport.py] [_log()] client lang: <none>
2025-12-31T19:00:19.548 [DEBUG] [Thread-132968] [transport.py] [_log()] server lang: <none>
2025-12-31T19:00:19.548 [DEBUG] [Thread-132968] [transport.py] [_log()] kex follows: False
2025-12-31T19:00:19.548 [DEBUG] [Thread-132968] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:00:19.548 [DEBUG] [Thread-132968] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:00:19.548 [DEBUG] [Thread-132968] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:00:19.548 [DEBUG] [Thread-132968] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:00:19.548 [DEBUG] [Thread-132968] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:00:19.548 [DEBUG] [Thread-132968] [transport.py] [_log()] Compression: none
2025-12-31T19:00:19.549 [DEBUG] [Thread-132968] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:00:19.566 [DEBUG] [Thread-132968] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:00:19.566 [DEBUG] [Thread-132968] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:00:19.566 [DEBUG] [Thread-132968] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T19:00:19.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T19:00:19.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:00:19.568 [DEBUG] [Thread-132968] [transport.py] [_log()] userauth is OK
2025-12-31T19:00:19.568 [DEBUG] [Thread-132968] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:00:19.568 [DEBUG] [Thread-132968] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:00:19.568 [DEBUG] [Thread-132968] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T19:00:19.569 [DEBUG] [Thread-132968] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:00:19.592 [INFO] [Thread-132968] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:00:19.593 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:00:22.591 [DEBUG] [Thread-132968] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:00:22.592 [DEBUG] [Thread-132968] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:00:22.592 [DEBUG] [Thread-132968] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T19:00:22.633 [DEBUG] [Thread-132968] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:00:22.633 [DEBUG] [Thread-132968] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:00:22.635 [DEBUG] [Thread-132968] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:00:22.698 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:00:22.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T19:00:22.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T19:00:22.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T19:00:22.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:00:22.716 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T19:00:22.716 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:00:22.716 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:00:22.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T19:00:22.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.708126 -999.00  +22.40   9.08     37   +7.10 1 2 1 1 1   887    0 10.20 -200.06 ----- 6.0 9.1 245.7 15.1 23.8 -22.4 24.0 -22.9 24.2 -21.4 24.2 -22.4
2025-12-31T19:00:22.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T19:00:22.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T19:00:22.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.708126
2025-12-31T19:00:22.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T19:00:22.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T19:00:22.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T19:00:22.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T19:00:22.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T19:00:22.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T18:59:55', tmtdew=17.3, humidity=32.56, cloud=0.0, wind=14.26, temperature=22.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T16:59:42.086', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T19:00:22.719 [DEBUG] [Thread-132968] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:00:22.801 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T19:00:22.813 [DEBUG] [Thread-132971] [transport.py] [_log()] starting thread (client mode): 0xb1759b70
2025-12-31T19:00:22.813 [DEBUG] [Thread-132971] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:00:22.828 [DEBUG] [Thread-132971] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T19:00:22.829 [INFO] [Thread-132971] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T19:00:22.836 [DEBUG] [Thread-132971] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:00:22.836 [DEBUG] [Thread-132971] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T19:00:22.836 [DEBUG] [Thread-132971] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:00:22.836 [DEBUG] [Thread-132971] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:00:22.836 [DEBUG] [Thread-132971] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:00:22.837 [DEBUG] [Thread-132971] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:00:22.837 [DEBUG] [Thread-132971] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:00:22.837 [DEBUG] [Thread-132971] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:00:22.837 [DEBUG] [Thread-132971] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:00:22.837 [DEBUG] [Thread-132971] [transport.py] [_log()] client lang: <none>
2025-12-31T19:00:22.837 [DEBUG] [Thread-132971] [transport.py] [_log()] server lang: <none>
2025-12-31T19:00:22.837 [DEBUG] [Thread-132971] [transport.py] [_log()] kex follows: False
2025-12-31T19:00:22.837 [DEBUG] [Thread-132971] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:00:22.837 [DEBUG] [Thread-132971] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:00:22.837 [DEBUG] [Thread-132971] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:00:22.837 [DEBUG] [Thread-132971] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:00:22.837 [DEBUG] [Thread-132971] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:00:22.837 [DEBUG] [Thread-132971] [transport.py] [_log()] Compression: none
2025-12-31T19:00:22.837 [DEBUG] [Thread-132971] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:00:22.897 [DEBUG] [Thread-132971] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:00:22.897 [DEBUG] [Thread-132971] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:00:22.898 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T19:00:22.899 [DEBUG] [Thread-132971] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T19:00:22.899 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:00:22.953 [DEBUG] [Thread-132971] [transport.py] [_log()] userauth is OK
2025-12-31T19:00:22.953 [DEBUG] [Thread-132971] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:00:22.953 [DEBUG] [Thread-132971] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:00:22.953 [DEBUG] [Thread-132971] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T19:00:22.953 [DEBUG] [Thread-132971] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:00:22.973 [INFO] [Thread-132971] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:00:22.973 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T19:00:22.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:00:23.801 [DEBUG] [Thread-132971] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:00:23.802 [DEBUG] [Thread-132971] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:00:23.850 [DEBUG] [Thread-132971] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:00:23.850 [DEBUG] [Thread-132971] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:00:23.860 [DEBUG] [Thread-132971] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:00:23.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:00:23.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T19:00:23.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-12-31T19:00:23.887 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:00:23.887 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:00:23.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:00:23.896 [DEBUG] [Thread-132971] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:00:30.837 [DEBUG] [Thread-132973 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:00:32.337 [DEBUG] [Thread-132974 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:00:37.604 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:00:37.605 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:00:45.889 [DEBUG] [Thread-132975 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:00:53.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T19:00:53.918 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T19:00:53.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T19:00:54.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 19, 0, 27), 17.44, 32.26, 0.0, 13.39, 22.49, 0, 0, 0, 2, 0, 0),)
2025-12-31T19:00:54.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 19:00:27
2025-12-31T19:00:54.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T19:00:54.948 [DEBUG] [Thread-132976] [transport.py] [_log()] starting thread (client mode): 0xb6bbf6d0
2025-12-31T19:00:54.948 [DEBUG] [Thread-132976] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:00:54.969 [DEBUG] [Thread-132976] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T19:00:54.969 [INFO] [Thread-132976] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T19:00:54.972 [DEBUG] [Thread-132976] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:00:54.972 [DEBUG] [Thread-132976] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T19:00:54.972 [DEBUG] [Thread-132976] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:00:54.972 [DEBUG] [Thread-132976] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:00:54.972 [DEBUG] [Thread-132976] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:00:54.972 [DEBUG] [Thread-132976] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:00:54.972 [DEBUG] [Thread-132976] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:00:54.972 [DEBUG] [Thread-132976] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:00:54.972 [DEBUG] [Thread-132976] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:00:54.972 [DEBUG] [Thread-132976] [transport.py] [_log()] client lang: <none>
2025-12-31T19:00:54.972 [DEBUG] [Thread-132976] [transport.py] [_log()] server lang: <none>
2025-12-31T19:00:54.972 [DEBUG] [Thread-132976] [transport.py] [_log()] kex follows: False
2025-12-31T19:00:54.972 [DEBUG] [Thread-132976] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:00:54.972 [DEBUG] [Thread-132976] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:00:54.972 [DEBUG] [Thread-132976] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:00:54.972 [DEBUG] [Thread-132976] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:00:54.972 [DEBUG] [Thread-132976] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:00:54.972 [DEBUG] [Thread-132976] [transport.py] [_log()] Compression: none
2025-12-31T19:00:54.972 [DEBUG] [Thread-132976] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:00:54.990 [DEBUG] [Thread-132976] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:00:54.991 [DEBUG] [Thread-132976] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:00:54.991 [DEBUG] [Thread-132976] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T19:00:54.991 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T19:00:54.991 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:00:54.992 [DEBUG] [Thread-132976] [transport.py] [_log()] userauth is OK
2025-12-31T19:00:54.992 [DEBUG] [Thread-132976] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:00:54.992 [DEBUG] [Thread-132976] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:00:54.992 [DEBUG] [Thread-132976] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T19:00:54.992 [DEBUG] [Thread-132976] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:00:55.003 [INFO] [Thread-132976] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:00:55.003 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:00:55.650 [DEBUG] [Thread-132976] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:00:55.650 [DEBUG] [Thread-132976] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:00:55.650 [DEBUG] [Thread-132976] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T19:00:55.691 [DEBUG] [Thread-132976] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:00:55.691 [DEBUG] [Thread-132976] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:00:55.694 [DEBUG] [Thread-132976] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:00:55.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:00:55.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T19:00:55.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T19:00:55.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T19:00:55.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:00:55.714 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T19:00:55.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:00:55.714 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:00:55.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T19:00:55.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.708473 -999.00  +22.50  11.04     37   +7.10 1 2 1 1 1   887    0 9.86 -211.71 ----- 17.6 11.0 262.2 16.2 23.8 -22.3 24.1 -21.5 24.3 -21.2 24.3 -22.3
2025-12-31T19:00:55.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T19:00:55.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T19:00:55.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.708473
2025-12-31T19:00:55.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T19:00:55.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T19:00:55.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T19:00:55.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T19:00:55.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T19:00:55.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T19:00:27', tmtdew=17.44, humidity=32.26, cloud=0.0, wind=13.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-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T17:00:12.067', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T19:00:55.716 [DEBUG] [Thread-132976] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:00:55.801 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T19:00:55.814 [DEBUG] [Thread-132979] [transport.py] [_log()] starting thread (client mode): 0xb6bbe110
2025-12-31T19:00:55.814 [DEBUG] [Thread-132979] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:00:55.830 [DEBUG] [Thread-132979] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T19:00:55.830 [INFO] [Thread-132979] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T19:00:55.838 [DEBUG] [Thread-132979] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:00:55.838 [DEBUG] [Thread-132979] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T19:00:55.838 [DEBUG] [Thread-132979] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:00:55.838 [DEBUG] [Thread-132979] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:00:55.838 [DEBUG] [Thread-132979] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:00:55.838 [DEBUG] [Thread-132979] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:00:55.838 [DEBUG] [Thread-132979] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:00:55.838 [DEBUG] [Thread-132979] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:00:55.838 [DEBUG] [Thread-132979] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:00:55.838 [DEBUG] [Thread-132979] [transport.py] [_log()] client lang: <none>
2025-12-31T19:00:55.838 [DEBUG] [Thread-132979] [transport.py] [_log()] server lang: <none>
2025-12-31T19:00:55.838 [DEBUG] [Thread-132979] [transport.py] [_log()] kex follows: False
2025-12-31T19:00:55.838 [DEBUG] [Thread-132979] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:00:55.838 [DEBUG] [Thread-132979] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:00:55.838 [DEBUG] [Thread-132979] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:00:55.838 [DEBUG] [Thread-132979] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:00:55.838 [DEBUG] [Thread-132979] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:00:55.838 [DEBUG] [Thread-132979] [transport.py] [_log()] Compression: none
2025-12-31T19:00:55.838 [DEBUG] [Thread-132979] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:00:55.900 [DEBUG] [Thread-132979] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:00:55.900 [DEBUG] [Thread-132979] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:00:55.901 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T19:00:55.901 [DEBUG] [Thread-132979] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T19:00:55.902 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:00:55.957 [DEBUG] [Thread-132979] [transport.py] [_log()] userauth is OK
2025-12-31T19:00:55.957 [DEBUG] [Thread-132979] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:00:55.957 [DEBUG] [Thread-132979] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:00:55.958 [DEBUG] [Thread-132979] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T19:00:55.958 [DEBUG] [Thread-132979] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:00:55.977 [INFO] [Thread-132979] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:00:55.977 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T19:00:55.980 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:00:56.815 [DEBUG] [Thread-132979] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:00:56.815 [DEBUG] [Thread-132979] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:00:56.863 [DEBUG] [Thread-132979] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:00:56.863 [DEBUG] [Thread-132979] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:00:56.872 [DEBUG] [Thread-132979] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:00:56.881 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:00:56.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T19:00:56.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T19:00:56.900 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:00:56.900 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:00:56.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:00:56.909 [DEBUG] [Thread-132979] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:01:00.916 [DEBUG] [Thread-132981 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:01:15.956 [DEBUG] [Thread-132982 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:01:26.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T19:01:26.932 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T19:01:26.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T19:01:27.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 19, 0, 59), 17.47, 32.3, 0.0, 14.79, 22.51, 0, 0, 0, 2, 0, 0),)
2025-12-31T19:01:27.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 19:00:59
2025-12-31T19:01:27.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T19:01:27.911 [DEBUG] [Thread-132983] [transport.py] [_log()] starting thread (client mode): 0xb6b60250
2025-12-31T19:01:27.912 [DEBUG] [Thread-132983] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:01:27.933 [DEBUG] [Thread-132983] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T19:01:27.933 [INFO] [Thread-132983] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T19:01:27.936 [DEBUG] [Thread-132983] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:01:27.936 [DEBUG] [Thread-132983] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T19:01:27.936 [DEBUG] [Thread-132983] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:01:27.936 [DEBUG] [Thread-132983] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:01:27.936 [DEBUG] [Thread-132983] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:01:27.936 [DEBUG] [Thread-132983] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:01:27.936 [DEBUG] [Thread-132983] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:01:27.936 [DEBUG] [Thread-132983] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:01:27.936 [DEBUG] [Thread-132983] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:01:27.936 [DEBUG] [Thread-132983] [transport.py] [_log()] client lang: <none>
2025-12-31T19:01:27.936 [DEBUG] [Thread-132983] [transport.py] [_log()] server lang: <none>
2025-12-31T19:01:27.936 [DEBUG] [Thread-132983] [transport.py] [_log()] kex follows: False
2025-12-31T19:01:27.936 [DEBUG] [Thread-132983] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:01:27.936 [DEBUG] [Thread-132983] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:01:27.936 [DEBUG] [Thread-132983] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:01:27.936 [DEBUG] [Thread-132983] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:01:27.936 [DEBUG] [Thread-132983] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:01:27.936 [DEBUG] [Thread-132983] [transport.py] [_log()] Compression: none
2025-12-31T19:01:27.936 [DEBUG] [Thread-132983] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:01:27.954 [DEBUG] [Thread-132983] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:01:27.954 [DEBUG] [Thread-132983] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:01:27.954 [DEBUG] [Thread-132983] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T19:01:27.955 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T19:01:27.955 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:01:27.955 [DEBUG] [Thread-132983] [transport.py] [_log()] userauth is OK
2025-12-31T19:01:27.955 [DEBUG] [Thread-132983] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:01:27.955 [DEBUG] [Thread-132983] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:01:27.955 [DEBUG] [Thread-132983] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T19:01:27.955 [DEBUG] [Thread-132983] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:01:27.967 [INFO] [Thread-132983] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:01:27.967 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:01:28.757 [DEBUG] [Thread-132983] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:01:28.757 [DEBUG] [Thread-132983] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:01:28.757 [DEBUG] [Thread-132983] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T19:01:28.798 [DEBUG] [Thread-132983] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:01:28.798 [DEBUG] [Thread-132983] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:01:28.800 [DEBUG] [Thread-132983] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:01:28.805 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:01:28.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T19:01:28.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T19:01:28.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T19:01:28.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:01:28.809 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T19:01:28.809 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:01:28.809 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:01:28.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T19:01:28.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.708820 -999.00  +22.40  14.61     37   +7.10 1 2 1 1 1   887    0 9.66 -217.75 ----- 12.0 14.6 257.6 15.9 23.8 -22.3 24.1 -21.6 24.2 -21.0 24.3 -22.8
2025-12-31T19:01:28.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T19:01:28.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T19:01:28.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.708820
2025-12-31T19:01:28.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T19:01:28.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T19:01:28.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T19:01:28.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T19:01:28.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T19:01:28.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T19:00:59', tmtdew=17.47, humidity=32.3, cloud=0.0, wind=14.79, temperature=22.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T17:00:42.048', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T19:01:28.809 [DEBUG] [Thread-132983] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:01:28.881 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T19:01:28.894 [DEBUG] [Thread-132986] [transport.py] [_log()] starting thread (client mode): 0xb6b631c0
2025-12-31T19:01:28.894 [DEBUG] [Thread-132986] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:01:28.910 [DEBUG] [Thread-132986] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T19:01:28.910 [INFO] [Thread-132986] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T19:01:28.917 [DEBUG] [Thread-132986] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:01:28.917 [DEBUG] [Thread-132986] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T19:01:28.917 [DEBUG] [Thread-132986] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:01:28.917 [DEBUG] [Thread-132986] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:01:28.917 [DEBUG] [Thread-132986] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:01:28.917 [DEBUG] [Thread-132986] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:01:28.917 [DEBUG] [Thread-132986] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:01:28.917 [DEBUG] [Thread-132986] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:01:28.917 [DEBUG] [Thread-132986] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:01:28.917 [DEBUG] [Thread-132986] [transport.py] [_log()] client lang: <none>
2025-12-31T19:01:28.917 [DEBUG] [Thread-132986] [transport.py] [_log()] server lang: <none>
2025-12-31T19:01:28.917 [DEBUG] [Thread-132986] [transport.py] [_log()] kex follows: False
2025-12-31T19:01:28.917 [DEBUG] [Thread-132986] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:01:28.917 [DEBUG] [Thread-132986] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:01:28.917 [DEBUG] [Thread-132986] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:01:28.918 [DEBUG] [Thread-132986] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:01:28.918 [DEBUG] [Thread-132986] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:01:28.918 [DEBUG] [Thread-132986] [transport.py] [_log()] Compression: none
2025-12-31T19:01:28.918 [DEBUG] [Thread-132986] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:01:28.975 [DEBUG] [Thread-132986] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:01:28.975 [DEBUG] [Thread-132986] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:01:28.975 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T19:01:28.975 [DEBUG] [Thread-132986] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T19:01:28.975 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:01:29.033 [DEBUG] [Thread-132986] [transport.py] [_log()] userauth is OK
2025-12-31T19:01:29.033 [DEBUG] [Thread-132986] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:01:29.033 [DEBUG] [Thread-132986] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:01:29.033 [DEBUG] [Thread-132986] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T19:01:29.033 [DEBUG] [Thread-132986] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:01:29.047 [INFO] [Thread-132986] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:01:29.047 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T19:01:29.048 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:01:29.874 [DEBUG] [Thread-132986] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:01:29.875 [DEBUG] [Thread-132986] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:01:29.922 [DEBUG] [Thread-132986] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:01:29.922 [DEBUG] [Thread-132986] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:01:29.931 [DEBUG] [Thread-132986] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:01:29.938 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:01:29.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T19:01:29.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T19:01:29.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:01:29.954 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:01:29.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:01:29.962 [DEBUG] [Thread-132986] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:01:30.990 [DEBUG] [Thread-132988 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:01:32.384 [DEBUG] [Thread-132989 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:01:37.745 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:01:37.746 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:01:46.033 [DEBUG] [Thread-132990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:01:59.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T19:01:59.985 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T19:01:59.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T19:02:00.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 19, 1, 31), 17.45, 32.33, 0.0, 14.13, 22.47, 0, 0, 0, 2, 0, 0),)
2025-12-31T19:02:00.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 19:01:31
2025-12-31T19:02:00.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T19:02:00.955 [DEBUG] [Thread-132991] [transport.py] [_log()] starting thread (client mode): 0xb955a0e0
2025-12-31T19:02:00.955 [DEBUG] [Thread-132991] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:02:00.976 [DEBUG] [Thread-132991] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T19:02:00.976 [INFO] [Thread-132991] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T19:02:00.979 [DEBUG] [Thread-132991] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:02:00.980 [DEBUG] [Thread-132991] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T19:02:00.980 [DEBUG] [Thread-132991] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:02:00.980 [DEBUG] [Thread-132991] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:02:00.980 [DEBUG] [Thread-132991] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:02:00.980 [DEBUG] [Thread-132991] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:02:00.980 [DEBUG] [Thread-132991] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:02:00.980 [DEBUG] [Thread-132991] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:02:00.980 [DEBUG] [Thread-132991] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:02:00.980 [DEBUG] [Thread-132991] [transport.py] [_log()] client lang: <none>
2025-12-31T19:02:00.980 [DEBUG] [Thread-132991] [transport.py] [_log()] server lang: <none>
2025-12-31T19:02:00.980 [DEBUG] [Thread-132991] [transport.py] [_log()] kex follows: False
2025-12-31T19:02:00.980 [DEBUG] [Thread-132991] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:02:00.980 [DEBUG] [Thread-132991] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:02:00.980 [DEBUG] [Thread-132991] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:02:00.980 [DEBUG] [Thread-132991] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:02:00.980 [DEBUG] [Thread-132991] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:02:00.980 [DEBUG] [Thread-132991] [transport.py] [_log()] Compression: none
2025-12-31T19:02:00.980 [DEBUG] [Thread-132991] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:02:00.999 [DEBUG] [Thread-132991] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:02:00.999 [DEBUG] [Thread-132991] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:02:01.000 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T19:02:01.000 [DEBUG] [Thread-132991] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T19:02:01.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:02:01.004 [DEBUG] [Thread-132991] [transport.py] [_log()] userauth is OK
2025-12-31T19:02:01.004 [DEBUG] [Thread-132991] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:02:01.004 [DEBUG] [Thread-132991] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:02:01.004 [DEBUG] [Thread-132991] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T19:02:01.004 [DEBUG] [Thread-132991] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:02:01.028 [INFO] [Thread-132991] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:02:01.030 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:02:01.071 [DEBUG] [Thread-132993 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:02:01.630 [DEBUG] [Thread-132991] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:02:01.630 [DEBUG] [Thread-132991] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:02:01.631 [DEBUG] [Thread-132991] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T19:02:01.671 [DEBUG] [Thread-132991] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:02:01.671 [DEBUG] [Thread-132991] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:02:01.675 [DEBUG] [Thread-132991] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:02:01.688 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:02:01.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T19:02:01.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T19:02:01.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T19:02:01.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:02:01.699 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T19:02:01.700 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:02:01.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:02:01.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T19:02:01.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.709167 -999.00  +22.50  11.02     36   +7.00 1 2 1 1 1   887    0 10.23 -206.45 ----- 13.8 11.0 229.2 16.2 23.9 -22.3 24.1 -21.6 24.2 -21.6 24.4 -22.2
2025-12-31T19:02:01.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T19:02:01.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T19:02:01.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.709167
2025-12-31T19:02:01.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T19:02:01.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T19:02:01.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T19:02:01.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T19:02:01.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T19:02:01.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T19:01:31', tmtdew=17.45, humidity=32.33, cloud=0.0, wind=14.13, temperature=22.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T17:01:12.029', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T19:02:01.702 [DEBUG] [Thread-132991] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:02:01.786 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T19:02:01.799 [DEBUG] [Thread-132995] [transport.py] [_log()] starting thread (client mode): 0xb9593d30
2025-12-31T19:02:01.800 [DEBUG] [Thread-132995] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:02:01.814 [DEBUG] [Thread-132995] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T19:02:01.815 [INFO] [Thread-132995] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T19:02:01.822 [DEBUG] [Thread-132995] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:02:01.822 [DEBUG] [Thread-132995] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T19:02:01.822 [DEBUG] [Thread-132995] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:02:01.822 [DEBUG] [Thread-132995] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:02:01.822 [DEBUG] [Thread-132995] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:02:01.822 [DEBUG] [Thread-132995] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:02:01.822 [DEBUG] [Thread-132995] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:02:01.822 [DEBUG] [Thread-132995] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:02:01.822 [DEBUG] [Thread-132995] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:02:01.823 [DEBUG] [Thread-132995] [transport.py] [_log()] client lang: <none>
2025-12-31T19:02:01.823 [DEBUG] [Thread-132995] [transport.py] [_log()] server lang: <none>
2025-12-31T19:02:01.823 [DEBUG] [Thread-132995] [transport.py] [_log()] kex follows: False
2025-12-31T19:02:01.823 [DEBUG] [Thread-132995] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:02:01.823 [DEBUG] [Thread-132995] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:02:01.823 [DEBUG] [Thread-132995] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:02:01.823 [DEBUG] [Thread-132995] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:02:01.823 [DEBUG] [Thread-132995] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:02:01.823 [DEBUG] [Thread-132995] [transport.py] [_log()] Compression: none
2025-12-31T19:02:01.823 [DEBUG] [Thread-132995] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:02:01.881 [DEBUG] [Thread-132995] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:02:01.882 [DEBUG] [Thread-132995] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:02:01.883 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T19:02:01.883 [DEBUG] [Thread-132995] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T19:02:01.884 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:02:01.937 [DEBUG] [Thread-132995] [transport.py] [_log()] userauth is OK
2025-12-31T19:02:01.938 [DEBUG] [Thread-132995] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:02:01.938 [DEBUG] [Thread-132995] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:02:01.938 [DEBUG] [Thread-132995] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T19:02:01.938 [DEBUG] [Thread-132995] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:02:01.956 [INFO] [Thread-132995] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:02:01.957 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T19:02:01.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:02:02.834 [DEBUG] [Thread-132995] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:02:02.834 [DEBUG] [Thread-132995] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:02:02.884 [DEBUG] [Thread-132995] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:02:02.884 [DEBUG] [Thread-132995] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:02:02.897 [DEBUG] [Thread-132995] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:02:02.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:02:02.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T19:02:02.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T19:02:02.924 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:02:02.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:02:02.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:02:02.933 [DEBUG] [Thread-132995] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:02:16.102 [DEBUG] [Thread-132997 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:02:31.156 [DEBUG] [Thread-132998 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:02:32.422 [DEBUG] [Thread-132999 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:02:32.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T19:02:32.956 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T19:02:32.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T19:02:33.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 19, 2, 4), 17.47, 32.28, 0.0, 16.27, 22.46, 0, 0, 0, 2, 0, 0),)
2025-12-31T19:02:33.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 19:02:04
2025-12-31T19:02:33.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T19:02:33.924 [DEBUG] [Thread-133000] [transport.py] [_log()] starting thread (client mode): 0xb955a8c0
2025-12-31T19:02:33.924 [DEBUG] [Thread-133000] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:02:33.946 [DEBUG] [Thread-133000] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T19:02:33.946 [INFO] [Thread-133000] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T19:02:33.948 [DEBUG] [Thread-133000] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:02:33.949 [DEBUG] [Thread-133000] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T19:02:33.949 [DEBUG] [Thread-133000] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:02:33.949 [DEBUG] [Thread-133000] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:02:33.949 [DEBUG] [Thread-133000] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:02:33.949 [DEBUG] [Thread-133000] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:02:33.949 [DEBUG] [Thread-133000] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:02:33.949 [DEBUG] [Thread-133000] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:02:33.949 [DEBUG] [Thread-133000] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:02:33.949 [DEBUG] [Thread-133000] [transport.py] [_log()] client lang: <none>
2025-12-31T19:02:33.949 [DEBUG] [Thread-133000] [transport.py] [_log()] server lang: <none>
2025-12-31T19:02:33.949 [DEBUG] [Thread-133000] [transport.py] [_log()] kex follows: False
2025-12-31T19:02:33.949 [DEBUG] [Thread-133000] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:02:33.949 [DEBUG] [Thread-133000] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:02:33.949 [DEBUG] [Thread-133000] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:02:33.949 [DEBUG] [Thread-133000] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:02:33.949 [DEBUG] [Thread-133000] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:02:33.950 [DEBUG] [Thread-133000] [transport.py] [_log()] Compression: none
2025-12-31T19:02:33.950 [DEBUG] [Thread-133000] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:02:33.967 [DEBUG] [Thread-133000] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:02:33.968 [DEBUG] [Thread-133000] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:02:33.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T19:02:33.968 [DEBUG] [Thread-133000] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T19:02:33.969 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:02:33.971 [DEBUG] [Thread-133000] [transport.py] [_log()] userauth is OK
2025-12-31T19:02:33.971 [DEBUG] [Thread-133000] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:02:33.971 [DEBUG] [Thread-133000] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:02:33.971 [DEBUG] [Thread-133000] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T19:02:33.971 [DEBUG] [Thread-133000] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:02:33.996 [INFO] [Thread-133000] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:02:33.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:02:34.817 [DEBUG] [Thread-133000] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:02:34.817 [DEBUG] [Thread-133000] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:02:34.817 [DEBUG] [Thread-133000] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T19:02:34.858 [DEBUG] [Thread-133000] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:02:34.858 [DEBUG] [Thread-133000] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:02:34.861 [DEBUG] [Thread-133000] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:02:34.876 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:02:34.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T19:02:34.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T19:02:34.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T19:02:34.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:02:34.887 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T19:02:34.887 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:02:34.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:02:34.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T19:02:34.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.709515 -999.00  +22.40   8.86     36   +6.90 1 2 1 1 1   887    0 10.32 -192.53 ----- 9.1 8.9 245.1 19.0 23.9 -22.4 24.1 -21.5 24.1 -21.3 24.2 -22.8
2025-12-31T19:02:34.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T19:02:34.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T19:02:34.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.709515
2025-12-31T19:02:34.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T19:02:34.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T19:02:34.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T19:02:34.890 [DEBUG] [Thread-133000] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:02:34.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T19:02:34.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T19:02:34.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T19:02:04', tmtdew=17.47, humidity=32.28, cloud=0.0, wind=16.27, temperature=22.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T17:01:42.096', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T19:02:34.971 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T19:02:34.983 [DEBUG] [Thread-133003] [transport.py] [_log()] starting thread (client mode): 0xb6b62aa0
2025-12-31T19:02:34.983 [DEBUG] [Thread-133003] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:02:34.997 [DEBUG] [Thread-133003] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T19:02:34.997 [INFO] [Thread-133003] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T19:02:35.004 [DEBUG] [Thread-133003] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:02:35.004 [DEBUG] [Thread-133003] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T19:02:35.004 [DEBUG] [Thread-133003] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:02:35.005 [DEBUG] [Thread-133003] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:02:35.005 [DEBUG] [Thread-133003] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:02:35.005 [DEBUG] [Thread-133003] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:02:35.005 [DEBUG] [Thread-133003] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:02:35.005 [DEBUG] [Thread-133003] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:02:35.005 [DEBUG] [Thread-133003] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:02:35.005 [DEBUG] [Thread-133003] [transport.py] [_log()] client lang: <none>
2025-12-31T19:02:35.005 [DEBUG] [Thread-133003] [transport.py] [_log()] server lang: <none>
2025-12-31T19:02:35.005 [DEBUG] [Thread-133003] [transport.py] [_log()] kex follows: False
2025-12-31T19:02:35.005 [DEBUG] [Thread-133003] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:02:35.005 [DEBUG] [Thread-133003] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:02:35.005 [DEBUG] [Thread-133003] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:02:35.005 [DEBUG] [Thread-133003] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:02:35.005 [DEBUG] [Thread-133003] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:02:35.005 [DEBUG] [Thread-133003] [transport.py] [_log()] Compression: none
2025-12-31T19:02:35.005 [DEBUG] [Thread-133003] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:02:35.061 [DEBUG] [Thread-133003] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:02:35.062 [DEBUG] [Thread-133003] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:02:35.062 [DEBUG] [Thread-133003] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T19:02:35.063 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T19:02:35.063 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:02:35.123 [DEBUG] [Thread-133003] [transport.py] [_log()] userauth is OK
2025-12-31T19:02:35.124 [DEBUG] [Thread-133003] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:02:35.124 [DEBUG] [Thread-133003] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:02:35.124 [DEBUG] [Thread-133003] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T19:02:35.124 [DEBUG] [Thread-133003] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:02:35.144 [INFO] [Thread-133003] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:02:35.144 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T19:02:35.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:02:35.964 [DEBUG] [Thread-133003] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:02:35.964 [DEBUG] [Thread-133003] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:02:36.012 [DEBUG] [Thread-133003] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:02:36.012 [DEBUG] [Thread-133003] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:02:36.022 [DEBUG] [Thread-133003] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:02:36.031 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:02:36.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T19:02:36.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T19:02:36.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:02:36.050 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:02:36.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:02:36.058 [DEBUG] [Thread-133003] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:02:37.886 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:02:37.887 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:02:46.189 [DEBUG] [Thread-133005 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:03:01.227 [DEBUG] [Thread-133006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:03:06.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T19:03:06.080 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T19:03:06.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T19:03:06.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 19, 2, 36), 17.73, 31.63, 0.0, 17.08, 22.44, 0, 0, 0, 2, 0, 0),)
2025-12-31T19:03:06.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 19:02:36
2025-12-31T19:03:06.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T19:03:07.041 [DEBUG] [Thread-133007] [transport.py] [_log()] starting thread (client mode): 0xb6b61750
2025-12-31T19:03:07.041 [DEBUG] [Thread-133007] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:03:07.062 [DEBUG] [Thread-133007] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T19:03:07.062 [INFO] [Thread-133007] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T19:03:07.065 [DEBUG] [Thread-133007] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:03:07.066 [DEBUG] [Thread-133007] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T19:03:07.066 [DEBUG] [Thread-133007] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:03:07.066 [DEBUG] [Thread-133007] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:03:07.066 [DEBUG] [Thread-133007] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:03:07.066 [DEBUG] [Thread-133007] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:03:07.066 [DEBUG] [Thread-133007] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:03:07.066 [DEBUG] [Thread-133007] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:03:07.066 [DEBUG] [Thread-133007] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:03:07.066 [DEBUG] [Thread-133007] [transport.py] [_log()] client lang: <none>
2025-12-31T19:03:07.066 [DEBUG] [Thread-133007] [transport.py] [_log()] server lang: <none>
2025-12-31T19:03:07.066 [DEBUG] [Thread-133007] [transport.py] [_log()] kex follows: False
2025-12-31T19:03:07.066 [DEBUG] [Thread-133007] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:03:07.066 [DEBUG] [Thread-133007] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:03:07.066 [DEBUG] [Thread-133007] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:03:07.067 [DEBUG] [Thread-133007] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:03:07.067 [DEBUG] [Thread-133007] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:03:07.067 [DEBUG] [Thread-133007] [transport.py] [_log()] Compression: none
2025-12-31T19:03:07.067 [DEBUG] [Thread-133007] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:03:07.084 [DEBUG] [Thread-133007] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:03:07.085 [DEBUG] [Thread-133007] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:03:07.086 [DEBUG] [Thread-133007] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T19:03:07.086 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T19:03:07.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:03:07.088 [DEBUG] [Thread-133007] [transport.py] [_log()] userauth is OK
2025-12-31T19:03:07.088 [DEBUG] [Thread-133007] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:03:07.088 [DEBUG] [Thread-133007] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:03:07.089 [DEBUG] [Thread-133007] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T19:03:07.089 [DEBUG] [Thread-133007] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:03:07.106 [INFO] [Thread-133007] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:03:07.107 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:03:07.688 [DEBUG] [Thread-133007] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:03:07.689 [DEBUG] [Thread-133007] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:03:07.689 [DEBUG] [Thread-133007] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T19:03:07.730 [DEBUG] [Thread-133007] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:03:07.730 [DEBUG] [Thread-133007] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:03:07.733 [DEBUG] [Thread-133007] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:03:07.744 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:03:07.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T19:03:07.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T19:03:07.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T19:03:07.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:03:07.755 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T19:03:07.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:03:07.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:03:07.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T19:03:07.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.709862 -999.00  +22.50  13.12     36   +6.90 1 2 1 1 1   887    0 10.06 -200.62 ----- 12.4 13.1 246.2 17.9 23.9 -22.2 24.1 -21.5 24.1 -21.3 24.3 -22.4
2025-12-31T19:03:07.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T19:03:07.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T19:03:07.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.709862
2025-12-31T19:03:07.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T19:03:07.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T19:03:07.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T19:03:07.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T19:03:07.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T19:03:07.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T19:02:36', tmtdew=17.73, humidity=31.63, cloud=0.0, wind=17.08, temperature=22.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T17:02:12.077', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T19:03:07.759 [DEBUG] [Thread-133007] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:03:07.854 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T19:03:07.868 [DEBUG] [Thread-133010] [transport.py] [_log()] starting thread (client mode): 0xb17466e0
2025-12-31T19:03:07.868 [DEBUG] [Thread-133010] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:03:07.884 [DEBUG] [Thread-133010] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T19:03:07.884 [INFO] [Thread-133010] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T19:03:07.891 [DEBUG] [Thread-133010] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:03:07.892 [DEBUG] [Thread-133010] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T19:03:07.892 [DEBUG] [Thread-133010] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:03:07.892 [DEBUG] [Thread-133010] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:03:07.892 [DEBUG] [Thread-133010] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:03:07.892 [DEBUG] [Thread-133010] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:03:07.892 [DEBUG] [Thread-133010] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:03:07.892 [DEBUG] [Thread-133010] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:03:07.892 [DEBUG] [Thread-133010] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:03:07.892 [DEBUG] [Thread-133010] [transport.py] [_log()] client lang: <none>
2025-12-31T19:03:07.892 [DEBUG] [Thread-133010] [transport.py] [_log()] server lang: <none>
2025-12-31T19:03:07.892 [DEBUG] [Thread-133010] [transport.py] [_log()] kex follows: False
2025-12-31T19:03:07.892 [DEBUG] [Thread-133010] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:03:07.892 [DEBUG] [Thread-133010] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:03:07.892 [DEBUG] [Thread-133010] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:03:07.892 [DEBUG] [Thread-133010] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:03:07.893 [DEBUG] [Thread-133010] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:03:07.893 [DEBUG] [Thread-133010] [transport.py] [_log()] Compression: none
2025-12-31T19:03:07.893 [DEBUG] [Thread-133010] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:03:07.950 [DEBUG] [Thread-133010] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:03:07.951 [DEBUG] [Thread-133010] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:03:07.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T19:03:07.952 [DEBUG] [Thread-133010] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T19:03:07.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:03:08.006 [DEBUG] [Thread-133010] [transport.py] [_log()] userauth is OK
2025-12-31T19:03:08.007 [DEBUG] [Thread-133010] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:03:08.007 [DEBUG] [Thread-133010] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:03:08.007 [DEBUG] [Thread-133010] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T19:03:08.007 [DEBUG] [Thread-133010] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:03:08.027 [INFO] [Thread-133010] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:03:08.028 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T19:03:08.028 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:03:08.848 [DEBUG] [Thread-133010] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:03:08.848 [DEBUG] [Thread-133010] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:03:08.896 [DEBUG] [Thread-133010] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:03:08.896 [DEBUG] [Thread-133010] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:03:08.905 [DEBUG] [Thread-133010] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:03:08.912 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:03:08.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T19:03:08.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T19:03:08.928 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:03:08.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:03:08.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:03:08.936 [DEBUG] [Thread-133010] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:03:16.264 [DEBUG] [Thread-133012 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:03:31.315 [DEBUG] [Thread-133013 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:03:32.475 [DEBUG] [Thread-133014 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:03:38.028 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:03:38.030 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:03:38.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T19:03:38.959 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T19:03:38.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T19:03:39.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 19, 3, 8), 17.68, 31.75, 0.0, 14.89, 22.43, 0, 0, 0, 2, 0, 0),)
2025-12-31T19:03:39.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 19:03:08
2025-12-31T19:03:39.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T19:03:39.923 [DEBUG] [Thread-133015] [transport.py] [_log()] starting thread (client mode): 0xb1759a20
2025-12-31T19:03:39.923 [DEBUG] [Thread-133015] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:03:39.943 [DEBUG] [Thread-133015] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T19:03:39.943 [INFO] [Thread-133015] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T19:03:39.946 [DEBUG] [Thread-133015] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:03:39.947 [DEBUG] [Thread-133015] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T19:03:39.947 [DEBUG] [Thread-133015] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:03:39.947 [DEBUG] [Thread-133015] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:03:39.947 [DEBUG] [Thread-133015] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:03:39.947 [DEBUG] [Thread-133015] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:03:39.947 [DEBUG] [Thread-133015] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:03:39.947 [DEBUG] [Thread-133015] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:03:39.947 [DEBUG] [Thread-133015] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:03:39.947 [DEBUG] [Thread-133015] [transport.py] [_log()] client lang: <none>
2025-12-31T19:03:39.947 [DEBUG] [Thread-133015] [transport.py] [_log()] server lang: <none>
2025-12-31T19:03:39.947 [DEBUG] [Thread-133015] [transport.py] [_log()] kex follows: False
2025-12-31T19:03:39.947 [DEBUG] [Thread-133015] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:03:39.947 [DEBUG] [Thread-133015] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:03:39.947 [DEBUG] [Thread-133015] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:03:39.947 [DEBUG] [Thread-133015] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:03:39.948 [DEBUG] [Thread-133015] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:03:39.948 [DEBUG] [Thread-133015] [transport.py] [_log()] Compression: none
2025-12-31T19:03:39.948 [DEBUG] [Thread-133015] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:03:39.966 [DEBUG] [Thread-133015] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:03:39.966 [DEBUG] [Thread-133015] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:03:39.967 [DEBUG] [Thread-133015] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T19:03:39.967 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T19:03:39.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:03:40.008 [DEBUG] [Thread-133015] [transport.py] [_log()] userauth is OK
2025-12-31T19:03:40.009 [DEBUG] [Thread-133015] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:03:40.009 [DEBUG] [Thread-133015] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:03:40.009 [DEBUG] [Thread-133015] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T19:03:40.009 [DEBUG] [Thread-133015] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:03:40.029 [INFO] [Thread-133015] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:03:40.030 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:03:40.782 [DEBUG] [Thread-133015] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:03:40.782 [DEBUG] [Thread-133015] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:03:40.782 [DEBUG] [Thread-133015] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T19:03:40.823 [DEBUG] [Thread-133015] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:03:40.823 [DEBUG] [Thread-133015] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:03:40.825 [DEBUG] [Thread-133015] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:03:40.838 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:03:40.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T19:03:40.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T19:03:40.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T19:03:40.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:03:40.844 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T19:03:40.844 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:03:40.844 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:03:40.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T19:03:40.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.710209 -999.00  +22.40  11.22     36   +6.90 1 2 1 1 1   887    0 10.20 -194.37 ----- 9.5 11.2 254.2 16.4 23.9 -22.8 24.1 -21.9 24.1 -21.7 24.2 -23.1
2025-12-31T19:03:40.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T19:03:40.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T19:03:40.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.710209
2025-12-31T19:03:40.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T19:03:40.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T19:03:40.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T19:03:40.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T19:03:40.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T19:03:40.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T19:03:08', tmtdew=17.68, humidity=31.75, cloud=0.0, wind=14.89, temperature=22.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T17:02:42.058', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T19:03:40.845 [DEBUG] [Thread-133015] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:03:40.920 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T19:03:40.931 [DEBUG] [Thread-133018] [transport.py] [_log()] starting thread (client mode): 0xb955a7a0
2025-12-31T19:03:40.931 [DEBUG] [Thread-133018] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:03:40.945 [DEBUG] [Thread-133018] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T19:03:40.945 [INFO] [Thread-133018] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T19:03:40.952 [DEBUG] [Thread-133018] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:03:40.952 [DEBUG] [Thread-133018] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T19:03:40.952 [DEBUG] [Thread-133018] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:03:40.952 [DEBUG] [Thread-133018] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:03:40.952 [DEBUG] [Thread-133018] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:03:40.953 [DEBUG] [Thread-133018] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:03:40.953 [DEBUG] [Thread-133018] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:03:40.953 [DEBUG] [Thread-133018] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:03:40.953 [DEBUG] [Thread-133018] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:03:40.953 [DEBUG] [Thread-133018] [transport.py] [_log()] client lang: <none>
2025-12-31T19:03:40.953 [DEBUG] [Thread-133018] [transport.py] [_log()] server lang: <none>
2025-12-31T19:03:40.953 [DEBUG] [Thread-133018] [transport.py] [_log()] kex follows: False
2025-12-31T19:03:40.953 [DEBUG] [Thread-133018] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:03:40.953 [DEBUG] [Thread-133018] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:03:40.953 [DEBUG] [Thread-133018] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:03:40.953 [DEBUG] [Thread-133018] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:03:40.953 [DEBUG] [Thread-133018] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:03:40.953 [DEBUG] [Thread-133018] [transport.py] [_log()] Compression: none
2025-12-31T19:03:40.953 [DEBUG] [Thread-133018] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:03:41.008 [DEBUG] [Thread-133018] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:03:41.008 [DEBUG] [Thread-133018] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:03:41.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T19:03:41.008 [DEBUG] [Thread-133018] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T19:03:41.009 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:03:41.065 [DEBUG] [Thread-133018] [transport.py] [_log()] userauth is OK
2025-12-31T19:03:41.065 [DEBUG] [Thread-133018] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:03:41.065 [DEBUG] [Thread-133018] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:03:41.065 [DEBUG] [Thread-133018] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T19:03:41.065 [DEBUG] [Thread-133018] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:03:41.079 [INFO] [Thread-133018] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:03:41.079 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T19:03:41.079 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:03:41.942 [DEBUG] [Thread-133018] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:03:41.942 [DEBUG] [Thread-133018] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:03:41.989 [DEBUG] [Thread-133018] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:03:41.989 [DEBUG] [Thread-133018] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:03:41.998 [DEBUG] [Thread-133018] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:03:42.006 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:03:42.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-12-31T19:03:42.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T19:03:42.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:03:42.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:03:42.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:03:42.029 [DEBUG] [Thread-133018] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:03:46.349 [DEBUG] [Thread-133020 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:04:01.402 [DEBUG] [Thread-133021 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:04:12.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T19:04:12.052 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T19:04:12.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T19:04:12.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 19, 3, 40), 17.54, 31.73, 0.0, 14.03, 22.29, 0, 0, 0, 2, 0, 0),)
2025-12-31T19:04:12.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 19:03:40
2025-12-31T19:04:12.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T19:04:13.087 [DEBUG] [Thread-133022] [transport.py] [_log()] starting thread (client mode): 0xb1744dc0
2025-12-31T19:04:13.088 [DEBUG] [Thread-133022] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:04:13.107 [DEBUG] [Thread-133022] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T19:04:13.108 [INFO] [Thread-133022] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T19:04:13.109 [DEBUG] [Thread-133022] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:04:13.109 [DEBUG] [Thread-133022] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T19:04:13.109 [DEBUG] [Thread-133022] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:04:13.109 [DEBUG] [Thread-133022] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:04:13.109 [DEBUG] [Thread-133022] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:04:13.109 [DEBUG] [Thread-133022] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:04:13.109 [DEBUG] [Thread-133022] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:04:13.109 [DEBUG] [Thread-133022] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:04:13.109 [DEBUG] [Thread-133022] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:04:13.109 [DEBUG] [Thread-133022] [transport.py] [_log()] client lang: <none>
2025-12-31T19:04:13.109 [DEBUG] [Thread-133022] [transport.py] [_log()] server lang: <none>
2025-12-31T19:04:13.109 [DEBUG] [Thread-133022] [transport.py] [_log()] kex follows: False
2025-12-31T19:04:13.109 [DEBUG] [Thread-133022] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:04:13.109 [DEBUG] [Thread-133022] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:04:13.109 [DEBUG] [Thread-133022] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:04:13.109 [DEBUG] [Thread-133022] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:04:13.109 [DEBUG] [Thread-133022] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:04:13.109 [DEBUG] [Thread-133022] [transport.py] [_log()] Compression: none
2025-12-31T19:04:13.109 [DEBUG] [Thread-133022] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:04:13.126 [DEBUG] [Thread-133022] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:04:13.127 [DEBUG] [Thread-133022] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:04:13.127 [DEBUG] [Thread-133022] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T19:04:13.127 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T19:04:13.127 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:04:13.127 [DEBUG] [Thread-133022] [transport.py] [_log()] userauth is OK
2025-12-31T19:04:13.127 [DEBUG] [Thread-133022] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:04:13.127 [DEBUG] [Thread-133022] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:04:13.127 [DEBUG] [Thread-133022] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T19:04:13.127 [DEBUG] [Thread-133022] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:04:13.138 [INFO] [Thread-133022] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:04:13.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:04:13.825 [DEBUG] [Thread-133022] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:04:13.826 [DEBUG] [Thread-133022] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:04:13.826 [DEBUG] [Thread-133022] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T19:04:13.867 [DEBUG] [Thread-133022] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:04:13.867 [DEBUG] [Thread-133022] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:04:13.869 [DEBUG] [Thread-133022] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:04:13.882 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:04:13.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T19:04:13.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T19:04:13.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T19:04:13.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:04:13.888 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T19:04:13.888 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:04:13.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:04:13.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T19:04:13.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.710556 -999.00  +22.30  10.17     36   +6.80 1 2 1 1 1   887    0 9.90 -199.76 ----- 7.2 10.2 252.2 17.4 23.9 -22.8 24.0 -21.9 24.0 -21.7 24.1 -22.9
2025-12-31T19:04:13.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T19:04:13.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T19:04:13.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.710556
2025-12-31T19:04:13.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T19:04:13.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T19:04:13.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T19:04:13.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T19:04:13.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T19:04:13.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T19:03:40', tmtdew=17.54, humidity=31.73, cloud=0.0, wind=14.03, temperature=22.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T17:03:12.038', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T19:04:13.889 [DEBUG] [Thread-133022] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:04:13.963 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T19:04:13.975 [DEBUG] [Thread-133025] [transport.py] [_log()] starting thread (client mode): 0xb9591570
2025-12-31T19:04:13.975 [DEBUG] [Thread-133025] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:04:13.990 [DEBUG] [Thread-133025] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T19:04:13.991 [INFO] [Thread-133025] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T19:04:13.998 [DEBUG] [Thread-133025] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:04:13.998 [DEBUG] [Thread-133025] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T19:04:13.998 [DEBUG] [Thread-133025] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:04:13.998 [DEBUG] [Thread-133025] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:04:13.998 [DEBUG] [Thread-133025] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:04:13.998 [DEBUG] [Thread-133025] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:04:13.998 [DEBUG] [Thread-133025] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:04:13.998 [DEBUG] [Thread-133025] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:04:13.998 [DEBUG] [Thread-133025] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:04:13.998 [DEBUG] [Thread-133025] [transport.py] [_log()] client lang: <none>
2025-12-31T19:04:13.998 [DEBUG] [Thread-133025] [transport.py] [_log()] server lang: <none>
2025-12-31T19:04:13.998 [DEBUG] [Thread-133025] [transport.py] [_log()] kex follows: False
2025-12-31T19:04:13.998 [DEBUG] [Thread-133025] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:04:13.998 [DEBUG] [Thread-133025] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:04:13.998 [DEBUG] [Thread-133025] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:04:13.998 [DEBUG] [Thread-133025] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:04:13.998 [DEBUG] [Thread-133025] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:04:13.998 [DEBUG] [Thread-133025] [transport.py] [_log()] Compression: none
2025-12-31T19:04:13.998 [DEBUG] [Thread-133025] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:04:14.053 [DEBUG] [Thread-133025] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:04:14.053 [DEBUG] [Thread-133025] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:04:14.053 [DEBUG] [Thread-133025] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T19:04:14.053 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T19:04:14.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:04:14.110 [DEBUG] [Thread-133025] [transport.py] [_log()] userauth is OK
2025-12-31T19:04:14.110 [DEBUG] [Thread-133025] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:04:14.110 [DEBUG] [Thread-133025] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:04:14.110 [DEBUG] [Thread-133025] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T19:04:14.110 [DEBUG] [Thread-133025] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:04:14.128 [INFO] [Thread-133025] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:04:14.128 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T19:04:14.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:04:14.969 [DEBUG] [Thread-133025] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:04:14.970 [DEBUG] [Thread-133025] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:04:15.018 [DEBUG] [Thread-133025] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:04:15.018 [DEBUG] [Thread-133025] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:04:15.027 [DEBUG] [Thread-133025] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:04:15.036 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:04:15.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T19:04:15.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T19:04:15.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:04:15.056 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:04:15.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:04:15.064 [DEBUG] [Thread-133025] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:04:16.437 [DEBUG] [Thread-133027 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:04:31.490 [DEBUG] [Thread-133028 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:04:32.528 [DEBUG] [Thread-133029 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:04:38.168 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:04:38.170 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:04:45.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T19:04:45.086 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T19:04: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-12-31T19:04:45.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 19, 4, 12), 17.57, 31.66, 0.0, 16.69, 22.28, 0, 0, 0, 2, 0, 0),)
2025-12-31T19:04:45.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 19:04:12
2025-12-31T19:04:46.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T19:04:46.159 [DEBUG] [Thread-133030] [transport.py] [_log()] starting thread (client mode): 0xb9590f70
2025-12-31T19:04:46.159 [DEBUG] [Thread-133030] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:04:46.181 [DEBUG] [Thread-133030] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T19:04:46.181 [INFO] [Thread-133030] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T19:04:46.184 [DEBUG] [Thread-133030] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:04:46.184 [DEBUG] [Thread-133030] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T19:04:46.184 [DEBUG] [Thread-133030] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:04:46.184 [DEBUG] [Thread-133030] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:04:46.184 [DEBUG] [Thread-133030] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:04:46.184 [DEBUG] [Thread-133030] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:04:46.184 [DEBUG] [Thread-133030] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:04:46.184 [DEBUG] [Thread-133030] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:04:46.184 [DEBUG] [Thread-133030] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:04:46.184 [DEBUG] [Thread-133030] [transport.py] [_log()] client lang: <none>
2025-12-31T19:04:46.184 [DEBUG] [Thread-133030] [transport.py] [_log()] server lang: <none>
2025-12-31T19:04:46.184 [DEBUG] [Thread-133030] [transport.py] [_log()] kex follows: False
2025-12-31T19:04:46.184 [DEBUG] [Thread-133030] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:04:46.184 [DEBUG] [Thread-133030] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:04:46.184 [DEBUG] [Thread-133030] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:04:46.184 [DEBUG] [Thread-133030] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:04:46.184 [DEBUG] [Thread-133030] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:04:46.184 [DEBUG] [Thread-133030] [transport.py] [_log()] Compression: none
2025-12-31T19:04:46.184 [DEBUG] [Thread-133030] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:04:46.201 [DEBUG] [Thread-133030] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:04:46.201 [DEBUG] [Thread-133030] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:04:46.201 [DEBUG] [Thread-133030] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T19:04:46.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T19:04:46.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:04:46.202 [DEBUG] [Thread-133030] [transport.py] [_log()] userauth is OK
2025-12-31T19:04:46.202 [DEBUG] [Thread-133030] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:04:46.202 [DEBUG] [Thread-133030] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:04:46.202 [DEBUG] [Thread-133030] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T19:04:46.202 [DEBUG] [Thread-133030] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:04:46.217 [INFO] [Thread-133030] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:04:46.218 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:04:46.523 [DEBUG] [Thread-133032 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:04:46.997 [DEBUG] [Thread-133030] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:04:46.997 [DEBUG] [Thread-133030] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:04:46.998 [DEBUG] [Thread-133030] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T19:04:47.038 [DEBUG] [Thread-133030] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:04:47.038 [DEBUG] [Thread-133030] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:04:47.041 [DEBUG] [Thread-133030] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:04:47.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:04:47.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T19:04:47.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T19:04:47.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T19:04:47.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:04:47.059 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T19:04:47.059 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:04:47.059 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:04:47.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T19:04:47.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.711251 -999.00  +22.20  12.77     37   +6.80 1 2 1 1 1   887    0 10.09 -193.53 ----- 11.5 12.8 250.6 16.2 23.8 -22.4 23.9 -21.6 23.9 -21.5 24.0 -22.8
2025-12-31T19:04:47.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T19:04:47.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T19:04:47.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.711251
2025-12-31T19:04:47.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T19:04:47.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T19:04:47.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T19:04:47.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T19:04:47.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T19:04:47.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T19:04:12', tmtdew=17.57, humidity=31.66, cloud=0.0, wind=16.69, temperature=22.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T17:04:12.086', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T19:04:47.060 [DEBUG] [Thread-133030] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:04:47.133 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T19:04:47.143 [DEBUG] [Thread-133034] [transport.py] [_log()] starting thread (client mode): 0xb6bbea40
2025-12-31T19:04:47.143 [DEBUG] [Thread-133034] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:04:47.158 [DEBUG] [Thread-133034] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T19:04:47.158 [INFO] [Thread-133034] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T19:04:47.165 [DEBUG] [Thread-133034] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:04:47.165 [DEBUG] [Thread-133034] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T19:04:47.165 [DEBUG] [Thread-133034] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:04:47.165 [DEBUG] [Thread-133034] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:04:47.165 [DEBUG] [Thread-133034] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:04:47.165 [DEBUG] [Thread-133034] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:04:47.165 [DEBUG] [Thread-133034] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:04:47.165 [DEBUG] [Thread-133034] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:04:47.165 [DEBUG] [Thread-133034] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:04:47.165 [DEBUG] [Thread-133034] [transport.py] [_log()] client lang: <none>
2025-12-31T19:04:47.165 [DEBUG] [Thread-133034] [transport.py] [_log()] server lang: <none>
2025-12-31T19:04:47.165 [DEBUG] [Thread-133034] [transport.py] [_log()] kex follows: False
2025-12-31T19:04:47.165 [DEBUG] [Thread-133034] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:04:47.165 [DEBUG] [Thread-133034] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:04:47.165 [DEBUG] [Thread-133034] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:04:47.165 [DEBUG] [Thread-133034] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:04:47.165 [DEBUG] [Thread-133034] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:04:47.165 [DEBUG] [Thread-133034] [transport.py] [_log()] Compression: none
2025-12-31T19:04:47.165 [DEBUG] [Thread-133034] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:04:47.221 [DEBUG] [Thread-133034] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:04:47.222 [DEBUG] [Thread-133034] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:04:47.222 [DEBUG] [Thread-133034] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T19:04:47.222 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T19:04:47.222 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:04:47.278 [DEBUG] [Thread-133034] [transport.py] [_log()] userauth is OK
2025-12-31T19:04:47.278 [DEBUG] [Thread-133034] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:04:47.278 [DEBUG] [Thread-133034] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:04:47.278 [DEBUG] [Thread-133034] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T19:04:47.278 [DEBUG] [Thread-133034] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:04:47.292 [INFO] [Thread-133034] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:04:47.292 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T19:04:47.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:04:48.112 [DEBUG] [Thread-133034] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:04:48.112 [DEBUG] [Thread-133034] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:04:48.160 [DEBUG] [Thread-133034] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:04:48.160 [DEBUG] [Thread-133034] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:04:48.168 [DEBUG] [Thread-133034] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:04:48.177 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:04:48.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T19:04:48.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T19:04:48.195 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:04:48.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:04:48.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:04:48.204 [DEBUG] [Thread-133034] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:05:01.556 [DEBUG] [Thread-133036 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:05:16.608 [DEBUG] [Thread-133037 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:05:18.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T19:05:18.226 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T19:05:18.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-12-31T19:05:18.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 19, 4, 44), 17.46, 32.15, 0.0, 14.91, 22.14, 0, 0, 0, 2, 0, 0),)
2025-12-31T19:05:18.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 19:04:44
2025-12-31T19:05:19.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T19:05:19.233 [DEBUG] [Thread-133038] [transport.py] [_log()] starting thread (client mode): 0xb6bbcd60
2025-12-31T19:05:19.233 [DEBUG] [Thread-133038] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:05:19.254 [DEBUG] [Thread-133038] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T19:05:19.254 [INFO] [Thread-133038] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T19:05:19.258 [DEBUG] [Thread-133038] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:05:19.258 [DEBUG] [Thread-133038] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T19:05:19.258 [DEBUG] [Thread-133038] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:05:19.258 [DEBUG] [Thread-133038] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:05:19.258 [DEBUG] [Thread-133038] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:05:19.258 [DEBUG] [Thread-133038] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:05:19.258 [DEBUG] [Thread-133038] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:05:19.258 [DEBUG] [Thread-133038] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:05:19.258 [DEBUG] [Thread-133038] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:05:19.258 [DEBUG] [Thread-133038] [transport.py] [_log()] client lang: <none>
2025-12-31T19:05:19.258 [DEBUG] [Thread-133038] [transport.py] [_log()] server lang: <none>
2025-12-31T19:05:19.258 [DEBUG] [Thread-133038] [transport.py] [_log()] kex follows: False
2025-12-31T19:05:19.258 [DEBUG] [Thread-133038] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:05:19.258 [DEBUG] [Thread-133038] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:05:19.258 [DEBUG] [Thread-133038] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:05:19.258 [DEBUG] [Thread-133038] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:05:19.258 [DEBUG] [Thread-133038] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:05:19.258 [DEBUG] [Thread-133038] [transport.py] [_log()] Compression: none
2025-12-31T19:05:19.258 [DEBUG] [Thread-133038] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:05:19.272 [DEBUG] [Thread-133038] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:05:19.273 [DEBUG] [Thread-133038] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:05:19.273 [DEBUG] [Thread-133038] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T19:05:19.273 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T19:05:19.273 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:05:19.274 [DEBUG] [Thread-133038] [transport.py] [_log()] userauth is OK
2025-12-31T19:05:19.274 [DEBUG] [Thread-133038] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:05:19.274 [DEBUG] [Thread-133038] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:05:19.274 [DEBUG] [Thread-133038] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T19:05:19.274 [DEBUG] [Thread-133038] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:05:19.305 [INFO] [Thread-133038] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:05:19.306 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:05:23.082 [DEBUG] [Thread-133038] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:05:23.082 [DEBUG] [Thread-133038] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:05:23.082 [DEBUG] [Thread-133038] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T19:05:23.123 [DEBUG] [Thread-133038] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:05:23.124 [DEBUG] [Thread-133038] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:05:23.126 [DEBUG] [Thread-133038] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:05:23.138 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:05:23.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T19:05:23.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T19:05:23.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T19:05:23.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:05:23.190 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T19:05:23.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:05:23.190 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:05:23.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T19:05:23.190 [WARNING] [poll_weather_worker] [driver.py] [poll_weather_state()] Unable to get atlas cloud data: list index out of range
2025-12-31T19:05:23.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T19:04:44', tmtdew=17.46, humidity=32.15, cloud=0.0, wind=14.91, temperature=22.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp=None, atlas_cloud=None, atlas_rain=None, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T19:05:23.192 [DEBUG] [Thread-133038] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:05:23.265 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T19:05:23.276 [DEBUG] [Thread-133041] [transport.py] [_log()] starting thread (client mode): 0xb95d6680
2025-12-31T19:05:23.277 [DEBUG] [Thread-133041] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:05:23.293 [DEBUG] [Thread-133041] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T19:05:23.293 [INFO] [Thread-133041] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T19:05:23.301 [DEBUG] [Thread-133041] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:05:23.301 [DEBUG] [Thread-133041] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T19:05:23.301 [DEBUG] [Thread-133041] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:05:23.301 [DEBUG] [Thread-133041] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:05:23.301 [DEBUG] [Thread-133041] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:05:23.301 [DEBUG] [Thread-133041] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:05:23.301 [DEBUG] [Thread-133041] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:05:23.301 [DEBUG] [Thread-133041] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:05:23.301 [DEBUG] [Thread-133041] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:05:23.301 [DEBUG] [Thread-133041] [transport.py] [_log()] client lang: <none>
2025-12-31T19:05:23.301 [DEBUG] [Thread-133041] [transport.py] [_log()] server lang: <none>
2025-12-31T19:05:23.301 [DEBUG] [Thread-133041] [transport.py] [_log()] kex follows: False
2025-12-31T19:05:23.301 [DEBUG] [Thread-133041] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:05:23.301 [DEBUG] [Thread-133041] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:05:23.301 [DEBUG] [Thread-133041] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:05:23.301 [DEBUG] [Thread-133041] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:05:23.301 [DEBUG] [Thread-133041] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:05:23.301 [DEBUG] [Thread-133041] [transport.py] [_log()] Compression: none
2025-12-31T19:05:23.301 [DEBUG] [Thread-133041] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:05:23.357 [DEBUG] [Thread-133041] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:05:23.357 [DEBUG] [Thread-133041] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:05:23.358 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T19:05:23.358 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:05:23.358 [DEBUG] [Thread-133041] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T19:05:23.415 [DEBUG] [Thread-133041] [transport.py] [_log()] userauth is OK
2025-12-31T19:05:23.415 [DEBUG] [Thread-133041] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:05:23.415 [DEBUG] [Thread-133041] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:05:23.415 [DEBUG] [Thread-133041] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T19:05:23.415 [DEBUG] [Thread-133041] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:05:23.428 [INFO] [Thread-133041] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:05:23.429 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T19:05:23.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:05:24.230 [DEBUG] [Thread-133041] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:05:24.230 [DEBUG] [Thread-133041] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:05:24.278 [DEBUG] [Thread-133041] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:05:24.278 [DEBUG] [Thread-133041] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:05:24.287 [DEBUG] [Thread-133041] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:05:24.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:05:24.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T19:05:24.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T19:05:24.311 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:05:24.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:05:24.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:05:24.319 [DEBUG] [Thread-133041] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:05:31.642 [DEBUG] [Thread-133043 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:05:32.579 [DEBUG] [Thread-133044 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:05:38.313 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:05:38.314 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:05:46.722 [DEBUG] [Thread-133045 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:05:54.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T19:05:54.341 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T19:05:54.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T19:05:55.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 19, 5, 48), 17.4, 32.38, 0.0, 18.39, 22.13, 0, 0, 0, 2, 0, 0),)
2025-12-31T19:05:55.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 19:05:48
2025-12-31T19:05:55.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T19:05:55.321 [DEBUG] [Thread-133046] [transport.py] [_log()] starting thread (client mode): 0xb6ba0e80
2025-12-31T19:05:55.321 [DEBUG] [Thread-133046] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:05:55.341 [DEBUG] [Thread-133046] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T19:05:55.341 [INFO] [Thread-133046] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T19:05:55.344 [DEBUG] [Thread-133046] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:05:55.344 [DEBUG] [Thread-133046] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T19:05:55.344 [DEBUG] [Thread-133046] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:05:55.344 [DEBUG] [Thread-133046] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:05:55.345 [DEBUG] [Thread-133046] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:05:55.345 [DEBUG] [Thread-133046] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:05:55.345 [DEBUG] [Thread-133046] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:05:55.345 [DEBUG] [Thread-133046] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:05:55.345 [DEBUG] [Thread-133046] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:05:55.345 [DEBUG] [Thread-133046] [transport.py] [_log()] client lang: <none>
2025-12-31T19:05:55.345 [DEBUG] [Thread-133046] [transport.py] [_log()] server lang: <none>
2025-12-31T19:05:55.345 [DEBUG] [Thread-133046] [transport.py] [_log()] kex follows: False
2025-12-31T19:05:55.345 [DEBUG] [Thread-133046] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:05:55.345 [DEBUG] [Thread-133046] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:05:55.345 [DEBUG] [Thread-133046] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:05:55.345 [DEBUG] [Thread-133046] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:05:55.345 [DEBUG] [Thread-133046] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:05:55.345 [DEBUG] [Thread-133046] [transport.py] [_log()] Compression: none
2025-12-31T19:05:55.345 [DEBUG] [Thread-133046] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:05:55.360 [DEBUG] [Thread-133046] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:05:55.360 [DEBUG] [Thread-133046] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:05:55.360 [DEBUG] [Thread-133046] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T19:05:55.360 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T19:05:55.360 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:05:55.361 [DEBUG] [Thread-133046] [transport.py] [_log()] userauth is OK
2025-12-31T19:05:55.361 [DEBUG] [Thread-133046] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:05:55.361 [DEBUG] [Thread-133046] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:05:55.361 [DEBUG] [Thread-133046] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T19:05:55.361 [DEBUG] [Thread-133046] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:05:55.376 [INFO] [Thread-133046] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:05:55.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:05:55.979 [DEBUG] [Thread-133046] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:05:55.979 [DEBUG] [Thread-133046] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:05:55.979 [DEBUG] [Thread-133046] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T19:05:56.020 [DEBUG] [Thread-133046] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:05:56.020 [DEBUG] [Thread-133046] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:05:56.023 [DEBUG] [Thread-133046] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:05:56.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:05:56.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T19:05:56.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T19:05:56.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T19:05:56.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:05:56.046 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T19:05:56.046 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:05:56.046 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:05:56.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T19:05:56.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.711945 -999.00  +22.10  14.34     37   +6.80 1 2 1 1 1   887    0 10.07 -185.94 ----- 13.3 14.3 250.6 18.2 23.7 -22.8 23.9 -21.6 23.8 -21.6 23.9 -23.0
2025-12-31T19:05:56.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T19:05:56.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T19:05:56.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.711945
2025-12-31T19:05:56.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T19:05:56.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T19:05:56.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T19:05:56.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T19:05:56.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T19:05:56.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T19:05:48', tmtdew=17.4, humidity=32.38, cloud=0.0, wind=18.39, temperature=22.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T17:05:12.048', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T19:05:56.049 [DEBUG] [Thread-133046] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:05:56.151 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T19:05:56.163 [DEBUG] [Thread-133049] [transport.py] [_log()] starting thread (client mode): 0xb9591300
2025-12-31T19:05:56.163 [DEBUG] [Thread-133049] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:05:56.178 [DEBUG] [Thread-133049] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T19:05:56.178 [INFO] [Thread-133049] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T19:05:56.185 [DEBUG] [Thread-133049] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:05:56.185 [DEBUG] [Thread-133049] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T19:05:56.185 [DEBUG] [Thread-133049] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:05:56.185 [DEBUG] [Thread-133049] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:05:56.185 [DEBUG] [Thread-133049] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:05:56.185 [DEBUG] [Thread-133049] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:05:56.185 [DEBUG] [Thread-133049] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:05:56.185 [DEBUG] [Thread-133049] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:05:56.185 [DEBUG] [Thread-133049] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:05:56.185 [DEBUG] [Thread-133049] [transport.py] [_log()] client lang: <none>
2025-12-31T19:05:56.185 [DEBUG] [Thread-133049] [transport.py] [_log()] server lang: <none>
2025-12-31T19:05:56.185 [DEBUG] [Thread-133049] [transport.py] [_log()] kex follows: False
2025-12-31T19:05:56.185 [DEBUG] [Thread-133049] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:05:56.186 [DEBUG] [Thread-133049] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:05:56.186 [DEBUG] [Thread-133049] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:05:56.186 [DEBUG] [Thread-133049] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:05:56.186 [DEBUG] [Thread-133049] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:05:56.186 [DEBUG] [Thread-133049] [transport.py] [_log()] Compression: none
2025-12-31T19:05:56.186 [DEBUG] [Thread-133049] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:05:56.241 [DEBUG] [Thread-133049] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:05:56.241 [DEBUG] [Thread-133049] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:05:56.241 [DEBUG] [Thread-133049] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T19:05:56.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T19:05:56.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:05:56.299 [DEBUG] [Thread-133049] [transport.py] [_log()] userauth is OK
2025-12-31T19:05:56.300 [DEBUG] [Thread-133049] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:05:56.300 [DEBUG] [Thread-133049] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:05:56.300 [DEBUG] [Thread-133049] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T19:05:56.300 [DEBUG] [Thread-133049] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:05:56.318 [INFO] [Thread-133049] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:05:56.319 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T19:05:56.319 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:05:57.133 [DEBUG] [Thread-133049] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:05:57.133 [DEBUG] [Thread-133049] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:05:57.181 [DEBUG] [Thread-133049] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:05:57.181 [DEBUG] [Thread-133049] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:05:57.190 [DEBUG] [Thread-133049] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:05:57.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:05:57.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T19:05:57.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T19:05:57.217 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:05:57.218 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:05:57.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:05:57.226 [DEBUG] [Thread-133049] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:06:01.757 [DEBUG] [Thread-133051 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:06:16.800 [DEBUG] [Thread-133052 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:06:27.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T19:06:27.223 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T19:06:27.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T19:06:27.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 19, 6, 20), 17.38, 32.41, 0.0, 18.84, 22.11, 0, 0, 0, 2, 0, 0),)
2025-12-31T19:06:27.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 19:06:20
2025-12-31T19:06:28.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T19:06:28.216 [DEBUG] [Thread-133053] [transport.py] [_log()] starting thread (client mode): 0xb95900d0
2025-12-31T19:06:28.216 [DEBUG] [Thread-133053] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:06:28.236 [DEBUG] [Thread-133053] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T19:06:28.236 [INFO] [Thread-133053] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T19:06:28.238 [DEBUG] [Thread-133053] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:06:28.239 [DEBUG] [Thread-133053] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T19:06:28.239 [DEBUG] [Thread-133053] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:06:28.239 [DEBUG] [Thread-133053] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:06:28.239 [DEBUG] [Thread-133053] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:06:28.239 [DEBUG] [Thread-133053] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:06:28.239 [DEBUG] [Thread-133053] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:06:28.239 [DEBUG] [Thread-133053] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:06:28.239 [DEBUG] [Thread-133053] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:06:28.239 [DEBUG] [Thread-133053] [transport.py] [_log()] client lang: <none>
2025-12-31T19:06:28.239 [DEBUG] [Thread-133053] [transport.py] [_log()] server lang: <none>
2025-12-31T19:06:28.239 [DEBUG] [Thread-133053] [transport.py] [_log()] kex follows: False
2025-12-31T19:06:28.239 [DEBUG] [Thread-133053] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:06:28.239 [DEBUG] [Thread-133053] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:06:28.239 [DEBUG] [Thread-133053] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:06:28.239 [DEBUG] [Thread-133053] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:06:28.239 [DEBUG] [Thread-133053] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:06:28.239 [DEBUG] [Thread-133053] [transport.py] [_log()] Compression: none
2025-12-31T19:06:28.239 [DEBUG] [Thread-133053] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:06:28.254 [DEBUG] [Thread-133053] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:06:28.255 [DEBUG] [Thread-133053] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:06:28.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T19:06:28.256 [DEBUG] [Thread-133053] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T19:06:28.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:06:28.257 [DEBUG] [Thread-133053] [transport.py] [_log()] userauth is OK
2025-12-31T19:06:28.257 [DEBUG] [Thread-133053] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:06:28.258 [DEBUG] [Thread-133053] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:06:28.258 [DEBUG] [Thread-133053] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T19:06:28.258 [DEBUG] [Thread-133053] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:06:28.272 [INFO] [Thread-133053] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:06:28.273 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:06:29.051 [DEBUG] [Thread-133053] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:06:29.052 [DEBUG] [Thread-133053] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:06:29.052 [DEBUG] [Thread-133053] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T19:06:29.093 [DEBUG] [Thread-133053] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:06:29.093 [DEBUG] [Thread-133053] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:06:29.095 [DEBUG] [Thread-133053] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:06:29.106 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:06:29.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T19:06:29.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T19:06:29.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T19:06:29.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:06:29.119 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T19:06:29.119 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:06:29.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:06:29.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T19:06:29.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.712292 -999.00  +22.20  15.12     37   +6.90 1 2 1 1 1   887    0 10.88 -175.16 ----- 13.6 15.1 263.2 18.0 23.7 -22.5 23.9 -21.5 23.7 -21.5 23.9 -22.6
2025-12-31T19:06:29.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T19:06:29.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T19:06:29.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.712292
2025-12-31T19:06:29.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T19:06:29.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T19:06:29.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T19:06:29.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T19:06:29.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T19:06:29.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T19:06:20', tmtdew=17.38, humidity=32.41, cloud=0.0, wind=18.84, temperature=22.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T17:05:42.029', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T19:06:29.120 [DEBUG] [Thread-133053] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:06:29.190 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T19:06:29.202 [DEBUG] [Thread-133056] [transport.py] [_log()] starting thread (client mode): 0xb6bbe290
2025-12-31T19:06:29.202 [DEBUG] [Thread-133056] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:06:29.217 [DEBUG] [Thread-133056] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T19:06:29.217 [INFO] [Thread-133056] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T19:06:29.224 [DEBUG] [Thread-133056] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:06:29.224 [DEBUG] [Thread-133056] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T19:06:29.224 [DEBUG] [Thread-133056] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:06:29.224 [DEBUG] [Thread-133056] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:06:29.224 [DEBUG] [Thread-133056] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:06:29.224 [DEBUG] [Thread-133056] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:06:29.224 [DEBUG] [Thread-133056] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:06:29.224 [DEBUG] [Thread-133056] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:06:29.224 [DEBUG] [Thread-133056] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:06:29.224 [DEBUG] [Thread-133056] [transport.py] [_log()] client lang: <none>
2025-12-31T19:06:29.224 [DEBUG] [Thread-133056] [transport.py] [_log()] server lang: <none>
2025-12-31T19:06:29.224 [DEBUG] [Thread-133056] [transport.py] [_log()] kex follows: False
2025-12-31T19:06:29.224 [DEBUG] [Thread-133056] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:06:29.225 [DEBUG] [Thread-133056] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:06:29.225 [DEBUG] [Thread-133056] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:06:29.225 [DEBUG] [Thread-133056] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:06:29.225 [DEBUG] [Thread-133056] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:06:29.225 [DEBUG] [Thread-133056] [transport.py] [_log()] Compression: none
2025-12-31T19:06:29.225 [DEBUG] [Thread-133056] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:06:29.283 [DEBUG] [Thread-133056] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:06:29.283 [DEBUG] [Thread-133056] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:06:29.284 [DEBUG] [Thread-133056] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T19:06:29.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T19:06:29.285 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:06:29.339 [DEBUG] [Thread-133056] [transport.py] [_log()] userauth is OK
2025-12-31T19:06:29.339 [DEBUG] [Thread-133056] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:06:29.339 [DEBUG] [Thread-133056] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:06:29.339 [DEBUG] [Thread-133056] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T19:06:29.340 [DEBUG] [Thread-133056] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:06:29.358 [INFO] [Thread-133056] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:06:29.358 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T19:06:29.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:06:30.199 [DEBUG] [Thread-133056] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:06:30.200 [DEBUG] [Thread-133056] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:06:30.248 [DEBUG] [Thread-133056] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:06:30.248 [DEBUG] [Thread-133056] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:06:30.257 [DEBUG] [Thread-133056] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:06:30.267 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:06:30.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T19:06:30.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T19:06:30.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:06:30.286 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:06:30.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:06:30.294 [DEBUG] [Thread-133056] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:06:31.837 [DEBUG] [Thread-133058 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:06:32.633 [DEBUG] [Thread-133059 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:06:38.452 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:06:38.453 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:06:46.887 [DEBUG] [Thread-133060 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:07:00.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T19:07:00.288 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T19:07:00.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T19:07:00.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 19, 6, 52), 17.17, 32.66, 0.0, 17.79, 21.99, 0, 0, 0, 2, 0, 0),)
2025-12-31T19:07:00.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 19:06:52
2025-12-31T19:07:01.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T19:07:01.265 [DEBUG] [Thread-133061] [transport.py] [_log()] starting thread (client mode): 0xb6ba2a40
2025-12-31T19:07:01.265 [DEBUG] [Thread-133061] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:07:01.284 [DEBUG] [Thread-133061] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T19:07:01.284 [INFO] [Thread-133061] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T19:07:01.287 [DEBUG] [Thread-133061] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:07:01.287 [DEBUG] [Thread-133061] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T19:07:01.287 [DEBUG] [Thread-133061] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:07:01.287 [DEBUG] [Thread-133061] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:07:01.287 [DEBUG] [Thread-133061] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:07:01.287 [DEBUG] [Thread-133061] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:07:01.287 [DEBUG] [Thread-133061] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:07:01.287 [DEBUG] [Thread-133061] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:07:01.287 [DEBUG] [Thread-133061] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:07:01.287 [DEBUG] [Thread-133061] [transport.py] [_log()] client lang: <none>
2025-12-31T19:07:01.287 [DEBUG] [Thread-133061] [transport.py] [_log()] server lang: <none>
2025-12-31T19:07:01.287 [DEBUG] [Thread-133061] [transport.py] [_log()] kex follows: False
2025-12-31T19:07:01.287 [DEBUG] [Thread-133061] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:07:01.287 [DEBUG] [Thread-133061] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:07:01.287 [DEBUG] [Thread-133061] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:07:01.287 [DEBUG] [Thread-133061] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:07:01.287 [DEBUG] [Thread-133061] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:07:01.287 [DEBUG] [Thread-133061] [transport.py] [_log()] Compression: none
2025-12-31T19:07:01.287 [DEBUG] [Thread-133061] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:07:01.305 [DEBUG] [Thread-133061] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:07:01.305 [DEBUG] [Thread-133061] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:07:01.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T19:07:01.306 [DEBUG] [Thread-133061] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T19:07:01.307 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:07:01.308 [DEBUG] [Thread-133061] [transport.py] [_log()] userauth is OK
2025-12-31T19:07:01.308 [DEBUG] [Thread-133061] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:07:01.308 [DEBUG] [Thread-133061] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:07:01.309 [DEBUG] [Thread-133061] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T19:07:01.309 [DEBUG] [Thread-133061] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:07:01.333 [INFO] [Thread-133061] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:07:01.334 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:07:01.922 [DEBUG] [Thread-133063 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:07:02.020 [DEBUG] [Thread-133061] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:07:02.020 [DEBUG] [Thread-133061] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:07:02.020 [DEBUG] [Thread-133061] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T19:07:02.061 [DEBUG] [Thread-133061] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:07:02.061 [DEBUG] [Thread-133061] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:07:02.065 [DEBUG] [Thread-133061] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:07:02.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:07:02.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T19:07:02.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T19:07:02.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T19:07:02.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:07:02.088 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T19:07:02.088 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:07:02.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:07:02.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T19:07:02.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.712639 -999.00  +22.10  17.20     37   +6.90 1 2 1 1 1   887    0 10.43 -172.20 ----- 13.8 17.2 271.0 21.1 23.7 -22.5 23.8 -21.7 23.6 -21.6 23.8 -22.9
2025-12-31T19:07:02.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T19:07:02.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T19:07:02.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.712639
2025-12-31T19:07:02.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T19:07:02.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T19:07:02.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T19:07:02.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T19:07:02.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T19:07:02.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T19:06:52', tmtdew=17.17, humidity=32.66, cloud=0.0, wind=17.79, temperature=21.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T17:06:12.010', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T19:07:02.091 [DEBUG] [Thread-133061] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:07:02.175 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T19:07:02.187 [DEBUG] [Thread-133065] [transport.py] [_log()] starting thread (client mode): 0xb95d4400
2025-12-31T19:07:02.187 [DEBUG] [Thread-133065] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:07:02.209 [DEBUG] [Thread-133065] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T19:07:02.209 [INFO] [Thread-133065] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T19:07:02.219 [DEBUG] [Thread-133065] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:07:02.219 [DEBUG] [Thread-133065] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T19:07:02.219 [DEBUG] [Thread-133065] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:07:02.219 [DEBUG] [Thread-133065] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:07:02.219 [DEBUG] [Thread-133065] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:07:02.220 [DEBUG] [Thread-133065] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:07:02.220 [DEBUG] [Thread-133065] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:07:02.220 [DEBUG] [Thread-133065] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:07:02.220 [DEBUG] [Thread-133065] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:07:02.220 [DEBUG] [Thread-133065] [transport.py] [_log()] client lang: <none>
2025-12-31T19:07:02.220 [DEBUG] [Thread-133065] [transport.py] [_log()] server lang: <none>
2025-12-31T19:07:02.220 [DEBUG] [Thread-133065] [transport.py] [_log()] kex follows: False
2025-12-31T19:07:02.220 [DEBUG] [Thread-133065] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:07:02.221 [DEBUG] [Thread-133065] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:07:02.221 [DEBUG] [Thread-133065] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:07:02.221 [DEBUG] [Thread-133065] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:07:02.221 [DEBUG] [Thread-133065] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:07:02.221 [DEBUG] [Thread-133065] [transport.py] [_log()] Compression: none
2025-12-31T19:07:02.221 [DEBUG] [Thread-133065] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:07:02.277 [DEBUG] [Thread-133065] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:07:02.277 [DEBUG] [Thread-133065] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:07:02.278 [DEBUG] [Thread-133065] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T19:07:02.278 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T19:07:02.279 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:07:02.339 [DEBUG] [Thread-133065] [transport.py] [_log()] userauth is OK
2025-12-31T19:07:02.339 [DEBUG] [Thread-133065] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:07:02.339 [DEBUG] [Thread-133065] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:07:02.339 [DEBUG] [Thread-133065] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T19:07:02.339 [DEBUG] [Thread-133065] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:07:02.353 [INFO] [Thread-133065] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:07:02.354 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T19:07:02.354 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:07:03.178 [DEBUG] [Thread-133065] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:07:03.178 [DEBUG] [Thread-133065] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:07:03.226 [DEBUG] [Thread-133065] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:07:03.226 [DEBUG] [Thread-133065] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:07:03.235 [DEBUG] [Thread-133065] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:07:03.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:07:03.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T19:07:03.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T19:07:03.263 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:07:03.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:07:03.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:07:03.271 [DEBUG] [Thread-133065] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:07:16.953 [DEBUG] [Thread-133067 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:07:32.003 [DEBUG] [Thread-133068 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:07:32.683 [DEBUG] [Thread-133069 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:07:33.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T19:07:33.269 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T19:07:33.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T19:07:33.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 19, 7, 24), 17.14, 32.71, 0.0, 18.02, 21.96, 0, 0, 0, 2, 0, 0),)
2025-12-31T19:07:33.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 19:07:24
2025-12-31T19:07:34.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T19:07:34.240 [DEBUG] [Thread-133070] [transport.py] [_log()] starting thread (client mode): 0xb1765180
2025-12-31T19:07:34.240 [DEBUG] [Thread-133070] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:07:34.263 [DEBUG] [Thread-133070] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T19:07:34.263 [INFO] [Thread-133070] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T19:07:34.266 [DEBUG] [Thread-133070] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:07:34.267 [DEBUG] [Thread-133070] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T19:07:34.267 [DEBUG] [Thread-133070] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:07:34.267 [DEBUG] [Thread-133070] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:07:34.267 [DEBUG] [Thread-133070] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:07:34.267 [DEBUG] [Thread-133070] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:07:34.267 [DEBUG] [Thread-133070] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:07:34.267 [DEBUG] [Thread-133070] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:07:34.267 [DEBUG] [Thread-133070] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:07:34.267 [DEBUG] [Thread-133070] [transport.py] [_log()] client lang: <none>
2025-12-31T19:07:34.267 [DEBUG] [Thread-133070] [transport.py] [_log()] server lang: <none>
2025-12-31T19:07:34.267 [DEBUG] [Thread-133070] [transport.py] [_log()] kex follows: False
2025-12-31T19:07:34.267 [DEBUG] [Thread-133070] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:07:34.267 [DEBUG] [Thread-133070] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:07:34.267 [DEBUG] [Thread-133070] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:07:34.267 [DEBUG] [Thread-133070] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:07:34.267 [DEBUG] [Thread-133070] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:07:34.267 [DEBUG] [Thread-133070] [transport.py] [_log()] Compression: none
2025-12-31T19:07:34.267 [DEBUG] [Thread-133070] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:07:34.284 [DEBUG] [Thread-133070] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:07:34.285 [DEBUG] [Thread-133070] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:07:34.286 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T19:07:34.286 [DEBUG] [Thread-133070] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T19:07:34.286 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:07:34.287 [DEBUG] [Thread-133070] [transport.py] [_log()] userauth is OK
2025-12-31T19:07:34.287 [DEBUG] [Thread-133070] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:07:34.287 [DEBUG] [Thread-133070] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:07:34.287 [DEBUG] [Thread-133070] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T19:07:34.287 [DEBUG] [Thread-133070] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:07:34.302 [INFO] [Thread-133070] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:07:34.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:07:35.070 [DEBUG] [Thread-133070] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:07:35.071 [DEBUG] [Thread-133070] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:07:35.071 [DEBUG] [Thread-133070] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T19:07:35.113 [DEBUG] [Thread-133070] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:07:35.113 [DEBUG] [Thread-133070] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:07:35.117 [DEBUG] [Thread-133070] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:07:35.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:07:35.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T19:07:35.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T19:07:35.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T19:07:35.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:07:35.146 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T19:07:35.146 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:07:35.146 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:07:35.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T19:07:35.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.712987 -999.00  +22.00  14.64     37   +6.90 1 2 1 1 1   887    0 10.97 -159.77 ----- 16.9 14.6 275.4 24.2 23.6 -22.9 23.8 -21.5 23.5 -23.0 23.8 -23.0
2025-12-31T19:07:35.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T19:07:35.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T19:07:35.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.712987
2025-12-31T19:07:35.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T19:07:35.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T19:07:35.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T19:07:35.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T19:07:35.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T19:07:35.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T19:07:24', tmtdew=17.14, humidity=32.71, cloud=0.0, wind=18.02, temperature=21.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T17:06:42.077', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T19:07:35.149 [DEBUG] [Thread-133070] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:07:35.245 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T19:07:35.256 [DEBUG] [Thread-133073] [transport.py] [_log()] starting thread (client mode): 0xb175ba60
2025-12-31T19:07:35.256 [DEBUG] [Thread-133073] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:07:35.271 [DEBUG] [Thread-133073] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T19:07:35.271 [INFO] [Thread-133073] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T19:07:35.279 [DEBUG] [Thread-133073] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:07:35.279 [DEBUG] [Thread-133073] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T19:07:35.279 [DEBUG] [Thread-133073] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:07:35.279 [DEBUG] [Thread-133073] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:07:35.279 [DEBUG] [Thread-133073] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:07:35.279 [DEBUG] [Thread-133073] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:07:35.279 [DEBUG] [Thread-133073] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:07:35.280 [DEBUG] [Thread-133073] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:07:35.280 [DEBUG] [Thread-133073] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:07:35.280 [DEBUG] [Thread-133073] [transport.py] [_log()] client lang: <none>
2025-12-31T19:07:35.280 [DEBUG] [Thread-133073] [transport.py] [_log()] server lang: <none>
2025-12-31T19:07:35.280 [DEBUG] [Thread-133073] [transport.py] [_log()] kex follows: False
2025-12-31T19:07:35.280 [DEBUG] [Thread-133073] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:07:35.280 [DEBUG] [Thread-133073] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:07:35.280 [DEBUG] [Thread-133073] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:07:35.280 [DEBUG] [Thread-133073] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:07:35.280 [DEBUG] [Thread-133073] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:07:35.280 [DEBUG] [Thread-133073] [transport.py] [_log()] Compression: none
2025-12-31T19:07:35.280 [DEBUG] [Thread-133073] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:07:35.339 [DEBUG] [Thread-133073] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:07:35.340 [DEBUG] [Thread-133073] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:07:35.340 [DEBUG] [Thread-133073] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T19:07:35.340 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T19:07:35.341 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:07:35.396 [DEBUG] [Thread-133073] [transport.py] [_log()] userauth is OK
2025-12-31T19:07:35.396 [DEBUG] [Thread-133073] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:07:35.396 [DEBUG] [Thread-133073] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:07:35.397 [DEBUG] [Thread-133073] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T19:07:35.397 [DEBUG] [Thread-133073] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:07:35.416 [INFO] [Thread-133073] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:07: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-12-31T19:07:35.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:07:36.216 [DEBUG] [Thread-133073] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:07:36.216 [DEBUG] [Thread-133073] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:07:36.264 [DEBUG] [Thread-133073] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:07:36.264 [DEBUG] [Thread-133073] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:07:36.274 [DEBUG] [Thread-133073] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:07:36.284 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:07:36.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T19:07:36.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T19:07:36.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:07:36.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:07:36.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:07:36.312 [DEBUG] [Thread-133073] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:07:38.593 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:07:38.594 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:07:47.044 [DEBUG] [Thread-133075 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:08:02.092 [DEBUG] [Thread-133076 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:08:06.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T19:08:06.334 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T19:08:06.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T19:08:07.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 19, 7, 56), 17.12, 32.64, 0.0, 16.66, 21.89, 0, 0, 0, 2, 0, 0),)
2025-12-31T19:08:07.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 19:07:56
2025-12-31T19:08:07.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T19:08:07.305 [DEBUG] [Thread-133077] [transport.py] [_log()] starting thread (client mode): 0xb1744c40
2025-12-31T19:08:07.305 [DEBUG] [Thread-133077] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:08:07.325 [DEBUG] [Thread-133077] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T19:08:07.325 [INFO] [Thread-133077] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T19:08:07.328 [DEBUG] [Thread-133077] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:08:07.328 [DEBUG] [Thread-133077] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T19:08:07.328 [DEBUG] [Thread-133077] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:08:07.328 [DEBUG] [Thread-133077] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:08:07.328 [DEBUG] [Thread-133077] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:08:07.329 [DEBUG] [Thread-133077] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:08:07.329 [DEBUG] [Thread-133077] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:08:07.329 [DEBUG] [Thread-133077] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:08:07.329 [DEBUG] [Thread-133077] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:08:07.329 [DEBUG] [Thread-133077] [transport.py] [_log()] client lang: <none>
2025-12-31T19:08:07.329 [DEBUG] [Thread-133077] [transport.py] [_log()] server lang: <none>
2025-12-31T19:08:07.329 [DEBUG] [Thread-133077] [transport.py] [_log()] kex follows: False
2025-12-31T19:08:07.329 [DEBUG] [Thread-133077] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:08:07.329 [DEBUG] [Thread-133077] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:08:07.329 [DEBUG] [Thread-133077] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:08:07.329 [DEBUG] [Thread-133077] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:08:07.329 [DEBUG] [Thread-133077] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:08:07.329 [DEBUG] [Thread-133077] [transport.py] [_log()] Compression: none
2025-12-31T19:08:07.329 [DEBUG] [Thread-133077] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:08:07.349 [DEBUG] [Thread-133077] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:08:07.350 [DEBUG] [Thread-133077] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:08:07.350 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T19:08:07.351 [DEBUG] [Thread-133077] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T19:08:07.352 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:08:07.353 [DEBUG] [Thread-133077] [transport.py] [_log()] userauth is OK
2025-12-31T19:08:07.353 [DEBUG] [Thread-133077] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:08:07.353 [DEBUG] [Thread-133077] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:08:07.353 [DEBUG] [Thread-133077] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T19:08:07.353 [DEBUG] [Thread-133077] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:08:07.368 [INFO] [Thread-133077] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:08:07.369 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:08:07.994 [DEBUG] [Thread-133077] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:08:07.995 [DEBUG] [Thread-133077] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:08:07.995 [DEBUG] [Thread-133077] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T19:08:08.036 [DEBUG] [Thread-133077] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:08:08.036 [DEBUG] [Thread-133077] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:08:08.039 [DEBUG] [Thread-133077] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:08:08.051 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:08:08.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T19:08:08.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T19:08:08.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T19:08:08.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:08:08.063 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T19:08:08.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:08:08.063 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:08:08.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T19:08:08.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.713334 -999.00  +21.90  12.77     37   +6.90 1 2 1 1 1   887    0 11.40 -144.40 ----- 10.7 12.8 270.0 19.7 23.6 -22.5 23.8 -21.5 23.4 -21.4 23.6 -22.8
2025-12-31T19:08:08.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T19:08:08.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T19:08:08.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.713334
2025-12-31T19:08:08.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T19:08:08.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T19:08:08.065 [DEBUG] [Thread-133077] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:08:08.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T19:08:08.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T19:08:08.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T19:08:08.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T19:07:56', tmtdew=17.12, humidity=32.64, cloud=0.0, wind=16.66, temperature=21.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T17:07:12.058', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T19:08:08.152 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T19:08:08.164 [DEBUG] [Thread-133080] [transport.py] [_log()] starting thread (client mode): 0xb95910f0
2025-12-31T19:08:08.164 [DEBUG] [Thread-133080] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:08:08.178 [DEBUG] [Thread-133080] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T19:08:08.179 [INFO] [Thread-133080] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T19:08:08.186 [DEBUG] [Thread-133080] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:08:08.186 [DEBUG] [Thread-133080] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T19:08:08.186 [DEBUG] [Thread-133080] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:08:08.186 [DEBUG] [Thread-133080] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:08:08.186 [DEBUG] [Thread-133080] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:08:08.186 [DEBUG] [Thread-133080] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:08:08.186 [DEBUG] [Thread-133080] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:08:08.186 [DEBUG] [Thread-133080] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:08:08.186 [DEBUG] [Thread-133080] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:08:08.186 [DEBUG] [Thread-133080] [transport.py] [_log()] client lang: <none>
2025-12-31T19:08:08.186 [DEBUG] [Thread-133080] [transport.py] [_log()] server lang: <none>
2025-12-31T19:08:08.186 [DEBUG] [Thread-133080] [transport.py] [_log()] kex follows: False
2025-12-31T19:08:08.186 [DEBUG] [Thread-133080] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:08:08.187 [DEBUG] [Thread-133080] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:08:08.187 [DEBUG] [Thread-133080] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:08:08.187 [DEBUG] [Thread-133080] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:08:08.187 [DEBUG] [Thread-133080] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:08:08.187 [DEBUG] [Thread-133080] [transport.py] [_log()] Compression: none
2025-12-31T19:08:08.187 [DEBUG] [Thread-133080] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:08:08.251 [DEBUG] [Thread-133080] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:08:08.251 [DEBUG] [Thread-133080] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:08:08.251 [DEBUG] [Thread-133080] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T19:08:08.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T19:08:08.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:08:08.307 [DEBUG] [Thread-133080] [transport.py] [_log()] userauth is OK
2025-12-31T19:08:08.307 [DEBUG] [Thread-133080] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:08:08.307 [DEBUG] [Thread-133080] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:08:08.308 [DEBUG] [Thread-133080] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T19:08:08.308 [DEBUG] [Thread-133080] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:08:08.326 [INFO] [Thread-133080] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:08:08.326 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T19:08:08.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:08:09.157 [DEBUG] [Thread-133080] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:08:09.157 [DEBUG] [Thread-133080] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:08:09.206 [DEBUG] [Thread-133080] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:08:09.206 [DEBUG] [Thread-133080] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:08:09.215 [DEBUG] [Thread-133080] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:08:09.225 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:08:09.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-12-31T19:08:09.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T19:08:09.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:08:09.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:08:09.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:08:09.253 [DEBUG] [Thread-133080] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:08:17.131 [DEBUG] [Thread-133082 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:08:32.180 [DEBUG] [Thread-133083 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:08:32.736 [DEBUG] [Thread-133084 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:08:38.732 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:08:38.733 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:08:39.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T19:08:39.261 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T19:08:39.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T19:08:39.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 19, 8, 29), 17.11, 32.66, 0.0, 17.42, 21.89, 0, 0, 0, 2, 0, 0),)
2025-12-31T19:08:39.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 19:08:29
2025-12-31T19:08:40.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T19:08:40.236 [DEBUG] [Thread-133085] [transport.py] [_log()] starting thread (client mode): 0xb6bbe020
2025-12-31T19:08:40.236 [DEBUG] [Thread-133085] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:08:40.256 [DEBUG] [Thread-133085] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T19:08:40.256 [INFO] [Thread-133085] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T19:08:40.259 [DEBUG] [Thread-133085] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:08:40.259 [DEBUG] [Thread-133085] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T19:08:40.259 [DEBUG] [Thread-133085] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:08:40.259 [DEBUG] [Thread-133085] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:08:40.259 [DEBUG] [Thread-133085] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:08:40.259 [DEBUG] [Thread-133085] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:08:40.259 [DEBUG] [Thread-133085] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:08:40.259 [DEBUG] [Thread-133085] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:08:40.259 [DEBUG] [Thread-133085] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:08:40.259 [DEBUG] [Thread-133085] [transport.py] [_log()] client lang: <none>
2025-12-31T19:08:40.259 [DEBUG] [Thread-133085] [transport.py] [_log()] server lang: <none>
2025-12-31T19:08:40.259 [DEBUG] [Thread-133085] [transport.py] [_log()] kex follows: False
2025-12-31T19:08:40.260 [DEBUG] [Thread-133085] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:08:40.260 [DEBUG] [Thread-133085] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:08:40.260 [DEBUG] [Thread-133085] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:08:40.260 [DEBUG] [Thread-133085] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:08:40.260 [DEBUG] [Thread-133085] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:08:40.260 [DEBUG] [Thread-133085] [transport.py] [_log()] Compression: none
2025-12-31T19:08:40.260 [DEBUG] [Thread-133085] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:08:40.276 [DEBUG] [Thread-133085] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:08:40.276 [DEBUG] [Thread-133085] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:08:40.276 [DEBUG] [Thread-133085] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T19:08:40.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T19:08:40.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:08:40.277 [DEBUG] [Thread-133085] [transport.py] [_log()] userauth is OK
2025-12-31T19:08:40.277 [DEBUG] [Thread-133085] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:08:40.277 [DEBUG] [Thread-133085] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:08:40.277 [DEBUG] [Thread-133085] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T19:08:40.277 [DEBUG] [Thread-133085] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:08:40.286 [INFO] [Thread-133085] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:08:40.286 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:08:41.092 [DEBUG] [Thread-133085] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:08:41.093 [DEBUG] [Thread-133085] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:08:41.093 [DEBUG] [Thread-133085] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T19:08:41.134 [DEBUG] [Thread-133085] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:08:41.134 [DEBUG] [Thread-133085] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:08:41.138 [DEBUG] [Thread-133085] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:08:41.150 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:08:41.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T19:08:41.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T19:08:41.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T19:08:41.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:08:41.162 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T19:08:41.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:08:41.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:08:41.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T19:08:41.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.713682 -999.00  +21.80  17.36     37   +6.80 1 2 1 1 1   887    0 12.09 -131.45 ----- 15.5 17.4 255.6 19.8 23.6 -22.6 23.7 -21.5 23.4 -21.2 23.6 -22.7
2025-12-31T19:08:41.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T19:08:41.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T19:08:41.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.713682
2025-12-31T19:08:41.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T19:08:41.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T19:08:41.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T19:08:41.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T19:08:41.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T19:08:41.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T19:08:29', tmtdew=17.11, humidity=32.66, cloud=0.0, wind=17.42, temperature=21.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T17:07:42.125', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T19:08:41.165 [DEBUG] [Thread-133085] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:08: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-12-31T19:08:47.218 [DEBUG] [Thread-133088 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:09:02.266 [DEBUG] [Thread-133089 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:09:17.294 [DEBUG] [Thread-133090 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:09:32.328 [DEBUG] [Thread-133091 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:09:32.791 [DEBUG] [Thread-133092 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:09:38.873 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:09:38.874 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:09:47.363 [DEBUG] [Thread-133093 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:10:02.393 [DEBUG] [Thread-133094 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:10:17.424 [DEBUG] [Thread-133095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:10:32.461 [DEBUG] [Thread-133096 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:10:32.835 [DEBUG] [Thread-133097 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:10:39.011 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:10:39.012 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:10:47.492 [DEBUG] [Thread-133098 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:10:56.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-12-31T19:11:02.531 [DEBUG] [Thread-133099 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:11:17.565 [DEBUG] [Thread-133100 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:11:26.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T19:11:26.728 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T19:11:26.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T19:11:27.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 19, 11, 9), 16.31, 34.72, 0.0, 18.63, 21.78, 0, 0, 0, 2, 0, 0),)
2025-12-31T19:11:27.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 19:11:09
2025-12-31T19:11:27.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T19:11:27.739 [DEBUG] [Thread-133101] [transport.py] [_log()] starting thread (client mode): 0xb6bbf220
2025-12-31T19:11:27.740 [DEBUG] [Thread-133101] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:11:27.760 [DEBUG] [Thread-133101] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T19:11:27.760 [INFO] [Thread-133101] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T19:11:27.763 [DEBUG] [Thread-133101] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:11:27.764 [DEBUG] [Thread-133101] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T19:11:27.764 [DEBUG] [Thread-133101] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:11:27.764 [DEBUG] [Thread-133101] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:11:27.764 [DEBUG] [Thread-133101] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:11:27.764 [DEBUG] [Thread-133101] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:11:27.764 [DEBUG] [Thread-133101] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:11:27.764 [DEBUG] [Thread-133101] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:11:27.764 [DEBUG] [Thread-133101] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:11:27.764 [DEBUG] [Thread-133101] [transport.py] [_log()] client lang: <none>
2025-12-31T19:11:27.764 [DEBUG] [Thread-133101] [transport.py] [_log()] server lang: <none>
2025-12-31T19:11:27.764 [DEBUG] [Thread-133101] [transport.py] [_log()] kex follows: False
2025-12-31T19:11:27.764 [DEBUG] [Thread-133101] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:11:27.764 [DEBUG] [Thread-133101] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:11:27.764 [DEBUG] [Thread-133101] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:11:27.765 [DEBUG] [Thread-133101] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:11:27.765 [DEBUG] [Thread-133101] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:11:27.765 [DEBUG] [Thread-133101] [transport.py] [_log()] Compression: none
2025-12-31T19:11:27.765 [DEBUG] [Thread-133101] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:11:27.783 [DEBUG] [Thread-133101] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:11:27.783 [DEBUG] [Thread-133101] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:11:27.784 [DEBUG] [Thread-133101] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T19:11:27.784 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T19:11:27.785 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:11:27.786 [DEBUG] [Thread-133101] [transport.py] [_log()] userauth is OK
2025-12-31T19:11:27.786 [DEBUG] [Thread-133101] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:11:27.786 [DEBUG] [Thread-133101] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:11:27.786 [DEBUG] [Thread-133101] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T19:11:27.786 [DEBUG] [Thread-133101] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:11:27.802 [INFO] [Thread-133101] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:11:27.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:11:28.588 [DEBUG] [Thread-133101] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:11:28.588 [DEBUG] [Thread-133101] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:11:28.588 [DEBUG] [Thread-133101] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T19:11:28.629 [DEBUG] [Thread-133101] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:11:28.629 [DEBUG] [Thread-133101] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:11:28.632 [DEBUG] [Thread-133101] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:11:28.643 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:11:28.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T19:11:28.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T19:11:28.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T19:11:28.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:11:28.652 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T19:11:28.652 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:11:28.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:11:28.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T19:11:28.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.715765 -999.00  +21.80  15.14     39   +7.50 1 2 1 1 1   887    0 12.19 -105.34 ----- 10.2 15.1 225.0 22.9 23.4 -21.5 23.5 -20.6 23.4 -20.2 23.5 -21.9
2025-12-31T19:11:28.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T19:11:28.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T19:11:28.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.715765
2025-12-31T19:11:28.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T19:11:28.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T19:11:28.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T19:11:28.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T19:11:28.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T19:11:28.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T19:11:09', tmtdew=16.31, humidity=34.72, cloud=0.0, wind=18.63, temperature=21.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T17:10:42.096', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T19:11:28.654 [DEBUG] [Thread-133101] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:11:28.737 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T19:11:28.749 [DEBUG] [Thread-133104] [transport.py] [_log()] starting thread (client mode): 0xb955bd30
2025-12-31T19:11:28.750 [DEBUG] [Thread-133104] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:11:28.764 [DEBUG] [Thread-133104] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T19:11:28.764 [INFO] [Thread-133104] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T19:11:28.772 [DEBUG] [Thread-133104] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:11:28.772 [DEBUG] [Thread-133104] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T19:11:28.773 [DEBUG] [Thread-133104] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:11:28.773 [DEBUG] [Thread-133104] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:11:28.773 [DEBUG] [Thread-133104] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:11:28.773 [DEBUG] [Thread-133104] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:11:28.773 [DEBUG] [Thread-133104] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:11:28.773 [DEBUG] [Thread-133104] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:11:28.773 [DEBUG] [Thread-133104] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:11:28.773 [DEBUG] [Thread-133104] [transport.py] [_log()] client lang: <none>
2025-12-31T19:11:28.774 [DEBUG] [Thread-133104] [transport.py] [_log()] server lang: <none>
2025-12-31T19:11:28.774 [DEBUG] [Thread-133104] [transport.py] [_log()] kex follows: False
2025-12-31T19:11:28.774 [DEBUG] [Thread-133104] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:11:28.774 [DEBUG] [Thread-133104] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:11:28.774 [DEBUG] [Thread-133104] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:11:28.774 [DEBUG] [Thread-133104] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:11:28.774 [DEBUG] [Thread-133104] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:11:28.774 [DEBUG] [Thread-133104] [transport.py] [_log()] Compression: none
2025-12-31T19:11:28.774 [DEBUG] [Thread-133104] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:11:28.832 [DEBUG] [Thread-133104] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:11:28.832 [DEBUG] [Thread-133104] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:11:28.833 [DEBUG] [Thread-133104] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T19:11:28.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T19:11:28.834 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:11:28.888 [DEBUG] [Thread-133104] [transport.py] [_log()] userauth is OK
2025-12-31T19:11:28.888 [DEBUG] [Thread-133104] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:11:28.888 [DEBUG] [Thread-133104] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:11:28.888 [DEBUG] [Thread-133104] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T19:11:28.889 [DEBUG] [Thread-133104] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:11:28.912 [INFO] [Thread-133104] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:11:28.913 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T19:11:28.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:11:29.759 [DEBUG] [Thread-133104] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:11:29.759 [DEBUG] [Thread-133104] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:11:29.807 [DEBUG] [Thread-133104] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:11:29.807 [DEBUG] [Thread-133104] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:11:29.817 [DEBUG] [Thread-133104] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:11:29.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:11:29.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T19:11:29.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T19:11:29.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:11:29.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:11:29.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:11:29.857 [DEBUG] [Thread-133104] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:11:32.601 [DEBUG] [Thread-133106 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:11:32.889 [DEBUG] [Thread-133107 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:11:39.152 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:11:39.153 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:11:47.651 [DEBUG] [Thread-133108 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:11:59.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T19:11:59.858 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T19:11:59.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T19:12:00.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 19, 11, 41), 16.15, 34.89, 0.0, 17.43, 21.86, 0, 0, 0, 2, 0, 0),)
2025-12-31T19:12:00.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 19:11:41
2025-12-31T19:12:00.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T19:12:00.868 [DEBUG] [Thread-133109] [transport.py] [_log()] starting thread (client mode): 0xb95f1f90
2025-12-31T19:12:00.868 [DEBUG] [Thread-133109] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:12:00.888 [DEBUG] [Thread-133109] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T19:12:00.889 [INFO] [Thread-133109] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T19:12:00.891 [DEBUG] [Thread-133109] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:12:00.891 [DEBUG] [Thread-133109] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T19:12:00.891 [DEBUG] [Thread-133109] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:12:00.891 [DEBUG] [Thread-133109] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:12:00.891 [DEBUG] [Thread-133109] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:12:00.891 [DEBUG] [Thread-133109] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:12:00.891 [DEBUG] [Thread-133109] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:12:00.891 [DEBUG] [Thread-133109] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:12:00.891 [DEBUG] [Thread-133109] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:12:00.891 [DEBUG] [Thread-133109] [transport.py] [_log()] client lang: <none>
2025-12-31T19:12:00.891 [DEBUG] [Thread-133109] [transport.py] [_log()] server lang: <none>
2025-12-31T19:12:00.891 [DEBUG] [Thread-133109] [transport.py] [_log()] kex follows: False
2025-12-31T19:12:00.891 [DEBUG] [Thread-133109] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:12:00.891 [DEBUG] [Thread-133109] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:12:00.891 [DEBUG] [Thread-133109] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:12:00.892 [DEBUG] [Thread-133109] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:12:00.892 [DEBUG] [Thread-133109] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:12:00.892 [DEBUG] [Thread-133109] [transport.py] [_log()] Compression: none
2025-12-31T19:12:00.892 [DEBUG] [Thread-133109] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:12:00.903 [DEBUG] [Thread-133109] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:12:00.904 [DEBUG] [Thread-133109] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:12:00.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T19:12:00.905 [DEBUG] [Thread-133109] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T19:12:00.906 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:12:00.907 [DEBUG] [Thread-133109] [transport.py] [_log()] userauth is OK
2025-12-31T19:12:00.907 [DEBUG] [Thread-133109] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:12:00.907 [DEBUG] [Thread-133109] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:12:00.907 [DEBUG] [Thread-133109] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T19:12:00.907 [DEBUG] [Thread-133109] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:12:00.932 [INFO] [Thread-133109] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:12:00.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:12:01.583 [DEBUG] [Thread-133109] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:12:01.583 [DEBUG] [Thread-133109] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:12:01.584 [DEBUG] [Thread-133109] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T19:12:01.624 [DEBUG] [Thread-133109] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:12:01.624 [DEBUG] [Thread-133109] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:12:01.628 [DEBUG] [Thread-133109] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:12:01.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:12:01.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T19:12:01.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T19:12:01.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T19:12:01.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:12:01.650 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T19:12:01.650 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:12:01.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:12:01.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T19:12:01.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.716112 -999.00  +21.90  12.36     40   +7.70 1 2 1 1 1   887    0 12.37 -100.65 ----- 10.2 12.4 193.4 19.4 23.4 -21.6 23.5 -20.5 23.4 -20.2 23.5 -21.6
2025-12-31T19:12:01.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T19:12:01.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T19:12:01.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.716112
2025-12-31T19:12:01.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T19:12:01.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T19:12:01.653 [DEBUG] [Thread-133109] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:12:01.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T19:12:01.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T19:12:01.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T19:12:01.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T19:11:41', tmtdew=16.15, humidity=34.89, cloud=0.0, wind=17.43, temperature=21.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T17:11:12.077', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T19:12:01.738 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T19:12:01.749 [DEBUG] [Thread-133112] [transport.py] [_log()] starting thread (client mode): 0xb175a230
2025-12-31T19:12:01.749 [DEBUG] [Thread-133112] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:12:01.764 [DEBUG] [Thread-133112] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T19:12:01.764 [INFO] [Thread-133112] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T19:12:01.772 [DEBUG] [Thread-133112] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:12:01.772 [DEBUG] [Thread-133112] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T19:12:01.772 [DEBUG] [Thread-133112] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:12:01.773 [DEBUG] [Thread-133112] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:12:01.773 [DEBUG] [Thread-133112] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:12:01.773 [DEBUG] [Thread-133112] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:12:01.773 [DEBUG] [Thread-133112] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:12:01.773 [DEBUG] [Thread-133112] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:12:01.773 [DEBUG] [Thread-133112] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:12:01.773 [DEBUG] [Thread-133112] [transport.py] [_log()] client lang: <none>
2025-12-31T19:12:01.773 [DEBUG] [Thread-133112] [transport.py] [_log()] server lang: <none>
2025-12-31T19:12:01.773 [DEBUG] [Thread-133112] [transport.py] [_log()] kex follows: False
2025-12-31T19:12:01.774 [DEBUG] [Thread-133112] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:12:01.774 [DEBUG] [Thread-133112] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:12:01.774 [DEBUG] [Thread-133112] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:12:01.774 [DEBUG] [Thread-133112] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:12:01.774 [DEBUG] [Thread-133112] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:12:01.774 [DEBUG] [Thread-133112] [transport.py] [_log()] Compression: none
2025-12-31T19:12:01.774 [DEBUG] [Thread-133112] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:12:01.835 [DEBUG] [Thread-133112] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:12:01.835 [DEBUG] [Thread-133112] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:12:01.836 [DEBUG] [Thread-133112] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T19:12:01.836 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T19:12:01.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:12:01.896 [DEBUG] [Thread-133112] [transport.py] [_log()] userauth is OK
2025-12-31T19:12:01.896 [DEBUG] [Thread-133112] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:12:01.896 [DEBUG] [Thread-133112] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:12:01.896 [DEBUG] [Thread-133112] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T19:12:01.897 [DEBUG] [Thread-133112] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:12:01.921 [INFO] [Thread-133112] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:12: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-12-31T19:12:01.922 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:12:02.682 [DEBUG] [Thread-133114 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:12:02.785 [DEBUG] [Thread-133112] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:12:02.785 [DEBUG] [Thread-133112] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:12:02.833 [DEBUG] [Thread-133112] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:12:02.833 [DEBUG] [Thread-133112] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:12:02.842 [DEBUG] [Thread-133112] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:12:02.851 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:12: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-12-31T19:12: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-12-31T19:12:02.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:12:02.870 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:12:02.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:12:02.878 [DEBUG] [Thread-133112] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:12:17.735 [DEBUG] [Thread-133115 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:12:32.766 [DEBUG] [Thread-133116 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:12:32.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T19:12:32.900 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T19:12: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-12-31T19:12:32.933 [DEBUG] [Thread-133117 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:12:33.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 19, 12, 13), 16.1, 35.0, 0.0, 16.99, 21.91, 0, 0, 0, 2, 0, 0),)
2025-12-31T19:12:33.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 19:12:13
2025-12-31T19:12:33.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T19:12:33.890 [DEBUG] [Thread-133118] [transport.py] [_log()] starting thread (client mode): 0xb955a920
2025-12-31T19:12:33.890 [DEBUG] [Thread-133118] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:12:33.910 [DEBUG] [Thread-133118] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T19:12:33.910 [INFO] [Thread-133118] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T19:12:33.913 [DEBUG] [Thread-133118] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:12:33.913 [DEBUG] [Thread-133118] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T19:12:33.913 [DEBUG] [Thread-133118] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:12:33.913 [DEBUG] [Thread-133118] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:12:33.914 [DEBUG] [Thread-133118] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:12:33.914 [DEBUG] [Thread-133118] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:12:33.914 [DEBUG] [Thread-133118] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:12:33.914 [DEBUG] [Thread-133118] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:12:33.914 [DEBUG] [Thread-133118] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:12:33.914 [DEBUG] [Thread-133118] [transport.py] [_log()] client lang: <none>
2025-12-31T19:12:33.914 [DEBUG] [Thread-133118] [transport.py] [_log()] server lang: <none>
2025-12-31T19:12:33.914 [DEBUG] [Thread-133118] [transport.py] [_log()] kex follows: False
2025-12-31T19:12:33.914 [DEBUG] [Thread-133118] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:12:33.914 [DEBUG] [Thread-133118] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:12:33.914 [DEBUG] [Thread-133118] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:12:33.914 [DEBUG] [Thread-133118] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:12:33.914 [DEBUG] [Thread-133118] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:12:33.914 [DEBUG] [Thread-133118] [transport.py] [_log()] Compression: none
2025-12-31T19:12:33.914 [DEBUG] [Thread-133118] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:12:33.931 [DEBUG] [Thread-133118] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:12:33.931 [DEBUG] [Thread-133118] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:12:33.932 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T19:12:33.932 [DEBUG] [Thread-133118] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T19:12:33.933 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:12:33.934 [DEBUG] [Thread-133118] [transport.py] [_log()] userauth is OK
2025-12-31T19:12:33.934 [DEBUG] [Thread-133118] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:12:33.934 [DEBUG] [Thread-133118] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:12:33.934 [DEBUG] [Thread-133118] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T19:12:33.935 [DEBUG] [Thread-133118] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:12:33.953 [INFO] [Thread-133118] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:12:33.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:12:34.767 [DEBUG] [Thread-133118] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:12:34.768 [DEBUG] [Thread-133118] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:12:34.768 [DEBUG] [Thread-133118] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T19:12:34.809 [DEBUG] [Thread-133118] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:12:34.809 [DEBUG] [Thread-133118] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:12:34.813 [DEBUG] [Thread-133118] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:12:34.824 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:12:34.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T19:12:34.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T19:12:34.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T19:12:34.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:12:34.837 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T19:12:34.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:12:34.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:12:34.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T19:12:34.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.716459 -999.00  +21.90  12.39     40   +7.70 1 2 1 1 1   887    0 12.90 -91.22 ----- 7.9 12.4 212.2 20.0 23.4 -21.3 23.5 -20.1 23.5 -20.0 23.5 -21.4
2025-12-31T19:12:34.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T19:12:34.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T19:12:34.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.716459
2025-12-31T19:12:34.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T19:12:34.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T19:12:34.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T19:12:34.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T19:12:34.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T19:12:34.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T19:12:13', tmtdew=16.1, humidity=35.0, cloud=0.0, wind=16.99, temperature=21.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T17:11:42.058', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T19:12:34.840 [DEBUG] [Thread-133118] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:12:34.924 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T19:12:34.936 [DEBUG] [Thread-133121] [transport.py] [_log()] starting thread (client mode): 0xb1764460
2025-12-31T19:12:34.937 [DEBUG] [Thread-133121] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:12:34.956 [DEBUG] [Thread-133121] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T19:12:34.957 [INFO] [Thread-133121] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T19:12:34.964 [DEBUG] [Thread-133121] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:12:34.964 [DEBUG] [Thread-133121] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T19:12:34.964 [DEBUG] [Thread-133121] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:12:34.964 [DEBUG] [Thread-133121] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:12:34.964 [DEBUG] [Thread-133121] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:12:34.964 [DEBUG] [Thread-133121] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:12:34.964 [DEBUG] [Thread-133121] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:12:34.964 [DEBUG] [Thread-133121] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:12:34.964 [DEBUG] [Thread-133121] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:12:34.964 [DEBUG] [Thread-133121] [transport.py] [_log()] client lang: <none>
2025-12-31T19:12:34.965 [DEBUG] [Thread-133121] [transport.py] [_log()] server lang: <none>
2025-12-31T19:12:34.965 [DEBUG] [Thread-133121] [transport.py] [_log()] kex follows: False
2025-12-31T19:12:34.965 [DEBUG] [Thread-133121] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:12:34.965 [DEBUG] [Thread-133121] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:12:34.965 [DEBUG] [Thread-133121] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:12:34.965 [DEBUG] [Thread-133121] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:12:34.965 [DEBUG] [Thread-133121] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:12:34.965 [DEBUG] [Thread-133121] [transport.py] [_log()] Compression: none
2025-12-31T19:12:34.965 [DEBUG] [Thread-133121] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:12:35.023 [DEBUG] [Thread-133121] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:12:35.023 [DEBUG] [Thread-133121] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:12:35.024 [DEBUG] [Thread-133121] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T19:12:35.024 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T19:12:35.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:12:35.079 [DEBUG] [Thread-133121] [transport.py] [_log()] userauth is OK
2025-12-31T19:12:35.079 [DEBUG] [Thread-133121] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:12:35.079 [DEBUG] [Thread-133121] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:12:35.079 [DEBUG] [Thread-133121] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T19:12:35.079 [DEBUG] [Thread-133121] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:12:35.098 [INFO] [Thread-133121] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:12:35.098 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T19:12:35.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:12:35.945 [DEBUG] [Thread-133121] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:12:35.945 [DEBUG] [Thread-133121] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:12:35.993 [DEBUG] [Thread-133121] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:12:35.993 [DEBUG] [Thread-133121] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:12:36.002 [DEBUG] [Thread-133121] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:12:36.012 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:12:36.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T19:12:36.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T19:12:36.031 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:12:36.031 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:12:36.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:12:36.040 [DEBUG] [Thread-133121] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:12:39.291 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:12:39.292 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:12:47.800 [DEBUG] [Thread-133123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:13:02.853 [DEBUG] [Thread-133124 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:13:06.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T19:13:06.062 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T19:13:06.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T19:13:06.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 19, 12, 45), 16.03, 35.07, 0.0, 20.54, 21.88, 0, 0, 0, 2, 0, 0),)
2025-12-31T19:13:06.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 19:12:45
2025-12-31T19:13:06.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T19:13:07.115 [DEBUG] [Thread-133125] [transport.py] [_log()] starting thread (client mode): 0xb95f1f30
2025-12-31T19:13:07.115 [DEBUG] [Thread-133125] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:13:07.134 [DEBUG] [Thread-133125] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T19:13:07.134 [INFO] [Thread-133125] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T19:13:07.138 [DEBUG] [Thread-133125] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:13:07.138 [DEBUG] [Thread-133125] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T19:13:07.138 [DEBUG] [Thread-133125] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:13:07.138 [DEBUG] [Thread-133125] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:13:07.138 [DEBUG] [Thread-133125] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:13:07.138 [DEBUG] [Thread-133125] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:13:07.138 [DEBUG] [Thread-133125] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:13:07.138 [DEBUG] [Thread-133125] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:13:07.138 [DEBUG] [Thread-133125] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:13:07.138 [DEBUG] [Thread-133125] [transport.py] [_log()] client lang: <none>
2025-12-31T19:13:07.138 [DEBUG] [Thread-133125] [transport.py] [_log()] server lang: <none>
2025-12-31T19:13:07.138 [DEBUG] [Thread-133125] [transport.py] [_log()] kex follows: False
2025-12-31T19:13:07.138 [DEBUG] [Thread-133125] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:13:07.138 [DEBUG] [Thread-133125] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:13:07.138 [DEBUG] [Thread-133125] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:13:07.138 [DEBUG] [Thread-133125] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:13:07.138 [DEBUG] [Thread-133125] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:13:07.138 [DEBUG] [Thread-133125] [transport.py] [_log()] Compression: none
2025-12-31T19:13:07.138 [DEBUG] [Thread-133125] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:13:07.153 [DEBUG] [Thread-133125] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:13:07.153 [DEBUG] [Thread-133125] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:13:07.153 [DEBUG] [Thread-133125] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T19:13:07.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T19:13:07.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:13:07.155 [DEBUG] [Thread-133125] [transport.py] [_log()] userauth is OK
2025-12-31T19:13:07.155 [DEBUG] [Thread-133125] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:13:07.155 [DEBUG] [Thread-133125] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:13:07.155 [DEBUG] [Thread-133125] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T19:13:07.155 [DEBUG] [Thread-133125] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:13:07.171 [INFO] [Thread-133125] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:13:07.171 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:13:07.833 [DEBUG] [Thread-133125] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:13:07.833 [DEBUG] [Thread-133125] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:13:07.834 [DEBUG] [Thread-133125] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T19:13:07.874 [DEBUG] [Thread-133125] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:13:07.874 [DEBUG] [Thread-133125] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:13:07.877 [DEBUG] [Thread-133125] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:13:07.892 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:13:07.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T19:13:07.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T19:13:07.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T19:13:07.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:13:07.897 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T19:13:07.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:13:07.897 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:13:07.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T19:13:07.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.716806 -999.00  +21.90  10.76     40   +7.80 1 2 1 1 1   887    0 12.67 -90.19 ----- 7.7 10.8 240.7 17.7 23.4 -21.4 23.5 -19.9 23.6 -20.1 23.6 -21.7
2025-12-31T19:13:07.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T19:13:07.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T19:13:07.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.716806
2025-12-31T19:13:07.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T19:13:07.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T19:13:07.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T19:13:07.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T19:13:07.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T19:13:07.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T19:12:45', tmtdew=16.03, humidity=35.07, cloud=0.0, wind=20.54, temperature=21.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T17:12:12.038', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T19:13:07.898 [DEBUG] [Thread-133125] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:13:07.973 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T19:13:07.984 [DEBUG] [Thread-133128] [transport.py] [_log()] starting thread (client mode): 0xb95914b0
2025-12-31T19:13:07.984 [DEBUG] [Thread-133128] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:13:07.999 [DEBUG] [Thread-133128] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T19:13:07.999 [INFO] [Thread-133128] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T19:13:08.007 [DEBUG] [Thread-133128] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:13:08.007 [DEBUG] [Thread-133128] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T19:13:08.007 [DEBUG] [Thread-133128] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:13:08.007 [DEBUG] [Thread-133128] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:13:08.007 [DEBUG] [Thread-133128] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:13:08.007 [DEBUG] [Thread-133128] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:13:08.007 [DEBUG] [Thread-133128] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:13:08.007 [DEBUG] [Thread-133128] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:13:08.007 [DEBUG] [Thread-133128] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:13:08.007 [DEBUG] [Thread-133128] [transport.py] [_log()] client lang: <none>
2025-12-31T19:13:08.007 [DEBUG] [Thread-133128] [transport.py] [_log()] server lang: <none>
2025-12-31T19:13:08.007 [DEBUG] [Thread-133128] [transport.py] [_log()] kex follows: False
2025-12-31T19:13:08.007 [DEBUG] [Thread-133128] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:13:08.007 [DEBUG] [Thread-133128] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:13:08.007 [DEBUG] [Thread-133128] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:13:08.007 [DEBUG] [Thread-133128] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:13:08.007 [DEBUG] [Thread-133128] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:13:08.007 [DEBUG] [Thread-133128] [transport.py] [_log()] Compression: none
2025-12-31T19:13:08.007 [DEBUG] [Thread-133128] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:13:08.069 [DEBUG] [Thread-133128] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:13:08.069 [DEBUG] [Thread-133128] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:13:08.070 [DEBUG] [Thread-133128] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T19:13:08.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T19:13:08.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:13:08.126 [DEBUG] [Thread-133128] [transport.py] [_log()] userauth is OK
2025-12-31T19:13:08.126 [DEBUG] [Thread-133128] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:13:08.126 [DEBUG] [Thread-133128] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:13:08.126 [DEBUG] [Thread-133128] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T19:13:08.126 [DEBUG] [Thread-133128] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:13:08.141 [INFO] [Thread-133128] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:13:08.141 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T19:13:08.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:13:08.969 [DEBUG] [Thread-133128] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:13:08.969 [DEBUG] [Thread-133128] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:13:09.017 [DEBUG] [Thread-133128] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:13:09.017 [DEBUG] [Thread-133128] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:13:09.026 [DEBUG] [Thread-133128] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:13:09.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:13:09.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T19:13:09.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T19:13:09.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:13:09.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:13:09.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:13:09.057 [DEBUG] [Thread-133128] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:13:17.886 [DEBUG] [Thread-133130 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:13:32.933 [DEBUG] [Thread-133131 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:13:32.995 [DEBUG] [Thread-133132 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:13:39.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T19:13:39.080 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T19:13:39.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T19:13:39.434 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:13:39.434 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:13:39.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 19, 13, 17), 15.92, 35.32, 0.0, 22.83, 21.83, 0, 0, 0, 2, 0, 0),)
2025-12-31T19:13:39.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 19:13:17
2025-12-31T19:13:39.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T19:13:40.070 [DEBUG] [Thread-133133] [transport.py] [_log()] starting thread (client mode): 0xb95f0fa0
2025-12-31T19:13:40.070 [DEBUG] [Thread-133133] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:13:40.092 [DEBUG] [Thread-133133] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T19:13:40.092 [INFO] [Thread-133133] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T19:13:40.095 [DEBUG] [Thread-133133] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:13:40.095 [DEBUG] [Thread-133133] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T19:13:40.095 [DEBUG] [Thread-133133] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:13:40.095 [DEBUG] [Thread-133133] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:13:40.095 [DEBUG] [Thread-133133] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:13:40.095 [DEBUG] [Thread-133133] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:13:40.095 [DEBUG] [Thread-133133] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:13:40.095 [DEBUG] [Thread-133133] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:13:40.095 [DEBUG] [Thread-133133] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:13:40.095 [DEBUG] [Thread-133133] [transport.py] [_log()] client lang: <none>
2025-12-31T19:13:40.095 [DEBUG] [Thread-133133] [transport.py] [_log()] server lang: <none>
2025-12-31T19:13:40.095 [DEBUG] [Thread-133133] [transport.py] [_log()] kex follows: False
2025-12-31T19:13:40.095 [DEBUG] [Thread-133133] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:13:40.096 [DEBUG] [Thread-133133] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:13:40.096 [DEBUG] [Thread-133133] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:13:40.096 [DEBUG] [Thread-133133] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:13:40.096 [DEBUG] [Thread-133133] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:13:40.096 [DEBUG] [Thread-133133] [transport.py] [_log()] Compression: none
2025-12-31T19:13:40.096 [DEBUG] [Thread-133133] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:13:40.113 [DEBUG] [Thread-133133] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:13:40.114 [DEBUG] [Thread-133133] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:13:40.114 [DEBUG] [Thread-133133] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T19:13:40.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T19:13:40.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:13:40.116 [DEBUG] [Thread-133133] [transport.py] [_log()] userauth is OK
2025-12-31T19:13:40.116 [DEBUG] [Thread-133133] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:13:40.116 [DEBUG] [Thread-133133] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:13:40.117 [DEBUG] [Thread-133133] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T19:13:40.117 [DEBUG] [Thread-133133] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:13:40.132 [INFO] [Thread-133133] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:13:40.134 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:13:40.943 [DEBUG] [Thread-133133] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:13:40.943 [DEBUG] [Thread-133133] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:13:40.944 [DEBUG] [Thread-133133] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T19:13:40.984 [DEBUG] [Thread-133133] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:13:40.984 [DEBUG] [Thread-133133] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:13:40.987 [DEBUG] [Thread-133133] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:13:40.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:13:40.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T19:13:41.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T19:13:41.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T19:13:41.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:13:41.011 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T19:13:41.011 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:13:41.011 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:13:41.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T19:13:41.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.717153 -999.00  +21.90  14.89     40   +7.70 1 2 1 1 1   887    0 12.66 -82.99 ----- 15.9 14.9 233.1 22.0 23.4 -21.2 23.5 -19.9 23.6 -20.0 23.6 -21.8
2025-12-31T19:13:41.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T19:13:41.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T19:13:41.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.717153
2025-12-31T19:13:41.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T19:13:41.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T19:13:41.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T19:13:41.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T19:13:41.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T19:13:41.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T19:13:17', tmtdew=15.92, humidity=35.32, cloud=0.0, wind=22.83, temperature=21.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T17:12:42.019', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T19:13:41.013 [DEBUG] [Thread-133133] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:13:41.109 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T19:13:41.123 [DEBUG] [Thread-133136] [transport.py] [_log()] starting thread (client mode): 0xb175b9d0
2025-12-31T19:13:41.123 [DEBUG] [Thread-133136] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:13:41.137 [DEBUG] [Thread-133136] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T19:13:41.137 [INFO] [Thread-133136] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T19:13:41.145 [DEBUG] [Thread-133136] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:13:41.145 [DEBUG] [Thread-133136] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T19:13:41.145 [DEBUG] [Thread-133136] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:13:41.145 [DEBUG] [Thread-133136] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:13:41.145 [DEBUG] [Thread-133136] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:13:41.145 [DEBUG] [Thread-133136] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:13:41.145 [DEBUG] [Thread-133136] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:13:41.145 [DEBUG] [Thread-133136] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:13:41.145 [DEBUG] [Thread-133136] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:13:41.145 [DEBUG] [Thread-133136] [transport.py] [_log()] client lang: <none>
2025-12-31T19:13:41.145 [DEBUG] [Thread-133136] [transport.py] [_log()] server lang: <none>
2025-12-31T19:13:41.145 [DEBUG] [Thread-133136] [transport.py] [_log()] kex follows: False
2025-12-31T19:13:41.146 [DEBUG] [Thread-133136] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:13:41.146 [DEBUG] [Thread-133136] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:13:41.146 [DEBUG] [Thread-133136] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:13:41.146 [DEBUG] [Thread-133136] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:13:41.146 [DEBUG] [Thread-133136] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:13:41.146 [DEBUG] [Thread-133136] [transport.py] [_log()] Compression: none
2025-12-31T19:13:41.146 [DEBUG] [Thread-133136] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:13:41.201 [DEBUG] [Thread-133136] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:13:41.202 [DEBUG] [Thread-133136] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:13:41.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T19:13:41.203 [DEBUG] [Thread-133136] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T19:13:41.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:13:41.262 [DEBUG] [Thread-133136] [transport.py] [_log()] userauth is OK
2025-12-31T19:13:41.262 [DEBUG] [Thread-133136] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:13:41.262 [DEBUG] [Thread-133136] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:13:41.262 [DEBUG] [Thread-133136] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T19:13:41.263 [DEBUG] [Thread-133136] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:13:41.281 [INFO] [Thread-133136] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:13:41.281 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T19:13:41.282 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:13:42.093 [DEBUG] [Thread-133136] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:13:42.094 [DEBUG] [Thread-133136] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:13:42.144 [DEBUG] [Thread-133136] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:13:42.145 [DEBUG] [Thread-133136] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:13:42.154 [DEBUG] [Thread-133136] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:13:42.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:13:42.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-12-31T19:13:42.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T19:13:42.186 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:13:42.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:13:42.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:13:42.200 [DEBUG] [Thread-133136] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:13:47.962 [DEBUG] [Thread-133138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:14:03.003 [DEBUG] [Thread-133139 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:14:12.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T19:14:12.218 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T19:14:12.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T19:14:12.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 19, 13, 49), 15.91, 35.34, 0.0, 19.2, 21.81, 0, 0, 0, 2, 0, 0),)
2025-12-31T19:14:12.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 19:13:49
2025-12-31T19:14:13.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T19:14:13.217 [DEBUG] [Thread-133140] [transport.py] [_log()] starting thread (client mode): 0xb6bbab90
2025-12-31T19:14:13.217 [DEBUG] [Thread-133140] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:14:13.237 [DEBUG] [Thread-133140] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T19:14:13.237 [INFO] [Thread-133140] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T19:14:13.240 [DEBUG] [Thread-133140] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:14:13.240 [DEBUG] [Thread-133140] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T19:14:13.241 [DEBUG] [Thread-133140] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:14:13.241 [DEBUG] [Thread-133140] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:14:13.241 [DEBUG] [Thread-133140] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:14:13.241 [DEBUG] [Thread-133140] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:14:13.241 [DEBUG] [Thread-133140] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:14:13.241 [DEBUG] [Thread-133140] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:14:13.241 [DEBUG] [Thread-133140] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:14:13.241 [DEBUG] [Thread-133140] [transport.py] [_log()] client lang: <none>
2025-12-31T19:14:13.241 [DEBUG] [Thread-133140] [transport.py] [_log()] server lang: <none>
2025-12-31T19:14:13.241 [DEBUG] [Thread-133140] [transport.py] [_log()] kex follows: False
2025-12-31T19:14:13.241 [DEBUG] [Thread-133140] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:14:13.241 [DEBUG] [Thread-133140] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:14:13.241 [DEBUG] [Thread-133140] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:14:13.241 [DEBUG] [Thread-133140] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:14:13.241 [DEBUG] [Thread-133140] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:14:13.242 [DEBUG] [Thread-133140] [transport.py] [_log()] Compression: none
2025-12-31T19:14:13.242 [DEBUG] [Thread-133140] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:14:13.259 [DEBUG] [Thread-133140] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:14:13.260 [DEBUG] [Thread-133140] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:14:13.261 [DEBUG] [Thread-133140] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T19:14:13.261 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T19:14:13.261 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:14:13.262 [DEBUG] [Thread-133140] [transport.py] [_log()] userauth is OK
2025-12-31T19:14:13.263 [DEBUG] [Thread-133140] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:14:13.263 [DEBUG] [Thread-133140] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:14:13.263 [DEBUG] [Thread-133140] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T19:14:13.263 [DEBUG] [Thread-133140] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:14:13.287 [INFO] [Thread-133140] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:14:13.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:14:13.918 [DEBUG] [Thread-133140] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:14:13.918 [DEBUG] [Thread-133140] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:14:13.919 [DEBUG] [Thread-133140] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T19:14:13.959 [DEBUG] [Thread-133140] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:14:13.959 [DEBUG] [Thread-133140] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:14:13.963 [DEBUG] [Thread-133140] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:14:13.975 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:14:13.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T19:14:13.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T19:14:13.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T19:14:13.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:14:13.985 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T19:14:13.986 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:14:13.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:14:13.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T19:14:13.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.717500 -999.00  +21.90  10.86     40   +7.80 1 2 1 1 1   887    0 12.70 -77.50 ----- 8.0 10.9 236.2 18.4 23.3 -21.2 23.5 -20.2 23.6 -20.1 23.7 -21.6
2025-12-31T19:14:13.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T19:14:13.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T19:14:13.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.717500
2025-12-31T19:14:13.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T19:14:13.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T19:14:13.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T19:14:13.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T19:14:13.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T19:14:13.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T19:13:49', tmtdew=15.91, humidity=35.34, cloud=0.0, wind=19.2, temperature=21.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T17:13:12.000', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T19:14:13.988 [DEBUG] [Thread-133140] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:14:14.072 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T19:14:14.084 [DEBUG] [Thread-133143] [transport.py] [_log()] starting thread (client mode): 0xb9592d10
2025-12-31T19:14:14.084 [DEBUG] [Thread-133143] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:14:14.099 [DEBUG] [Thread-133143] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T19:14:14.099 [INFO] [Thread-133143] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T19:14:14.107 [DEBUG] [Thread-133143] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:14:14.107 [DEBUG] [Thread-133143] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T19:14:14.107 [DEBUG] [Thread-133143] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:14:14.107 [DEBUG] [Thread-133143] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:14:14.107 [DEBUG] [Thread-133143] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:14:14.107 [DEBUG] [Thread-133143] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:14:14.108 [DEBUG] [Thread-133143] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:14:14.108 [DEBUG] [Thread-133143] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:14:14.108 [DEBUG] [Thread-133143] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:14:14.108 [DEBUG] [Thread-133143] [transport.py] [_log()] client lang: <none>
2025-12-31T19:14:14.108 [DEBUG] [Thread-133143] [transport.py] [_log()] server lang: <none>
2025-12-31T19:14:14.108 [DEBUG] [Thread-133143] [transport.py] [_log()] kex follows: False
2025-12-31T19:14:14.108 [DEBUG] [Thread-133143] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:14:14.108 [DEBUG] [Thread-133143] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:14:14.108 [DEBUG] [Thread-133143] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:14:14.108 [DEBUG] [Thread-133143] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:14:14.108 [DEBUG] [Thread-133143] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:14:14.108 [DEBUG] [Thread-133143] [transport.py] [_log()] Compression: none
2025-12-31T19:14:14.108 [DEBUG] [Thread-133143] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:14:14.166 [DEBUG] [Thread-133143] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:14:14.167 [DEBUG] [Thread-133143] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:14:14.168 [DEBUG] [Thread-133143] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T19:14:14.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T19:14:14.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:14:14.222 [DEBUG] [Thread-133143] [transport.py] [_log()] userauth is OK
2025-12-31T19:14:14.223 [DEBUG] [Thread-133143] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:14:14.223 [DEBUG] [Thread-133143] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:14:14.223 [DEBUG] [Thread-133143] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T19:14:14.223 [DEBUG] [Thread-133143] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:14:14.241 [INFO] [Thread-133143] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:14:14.242 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T19:14:14.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:14:15.065 [DEBUG] [Thread-133143] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:14:15.065 [DEBUG] [Thread-133143] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:14:15.113 [DEBUG] [Thread-133143] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:14:15.113 [DEBUG] [Thread-133143] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:14:15.122 [DEBUG] [Thread-133143] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:14:15.131 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:14:15.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T19:14:15.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T19:14:15.150 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:14:15.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:14:15.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:14:15.159 [DEBUG] [Thread-133143] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:14:18.040 [DEBUG] [Thread-133145 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:14:33.047 [DEBUG] [Thread-133146 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:14:33.088 [DEBUG] [Thread-133147 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:14:39.573 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:14:39.575 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:14:45.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T19:14:45.182 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T19:14:45.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T19:14:45.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 19, 14, 21), 15.87, 35.42, 0.0, 19.73, 21.79, 0, 0, 0, 2, 0, 0),)
2025-12-31T19:14:45.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 19:14:21
2025-12-31T19:14:46.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T19:14:46.181 [DEBUG] [Thread-133148] [transport.py] [_log()] starting thread (client mode): 0xb9590d60
2025-12-31T19:14:46.181 [DEBUG] [Thread-133148] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:14:46.194 [DEBUG] [Thread-133148] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T19:14:46.194 [INFO] [Thread-133148] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T19:14:46.197 [DEBUG] [Thread-133148] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:14:46.197 [DEBUG] [Thread-133148] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T19:14:46.197 [DEBUG] [Thread-133148] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:14:46.197 [DEBUG] [Thread-133148] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:14:46.197 [DEBUG] [Thread-133148] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:14:46.197 [DEBUG] [Thread-133148] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:14:46.197 [DEBUG] [Thread-133148] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:14:46.197 [DEBUG] [Thread-133148] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:14:46.197 [DEBUG] [Thread-133148] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:14:46.197 [DEBUG] [Thread-133148] [transport.py] [_log()] client lang: <none>
2025-12-31T19:14:46.197 [DEBUG] [Thread-133148] [transport.py] [_log()] server lang: <none>
2025-12-31T19:14:46.197 [DEBUG] [Thread-133148] [transport.py] [_log()] kex follows: False
2025-12-31T19:14:46.197 [DEBUG] [Thread-133148] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:14:46.197 [DEBUG] [Thread-133148] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:14:46.197 [DEBUG] [Thread-133148] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:14:46.197 [DEBUG] [Thread-133148] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:14:46.197 [DEBUG] [Thread-133148] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:14:46.197 [DEBUG] [Thread-133148] [transport.py] [_log()] Compression: none
2025-12-31T19:14:46.197 [DEBUG] [Thread-133148] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:14:46.209 [DEBUG] [Thread-133148] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:14:46.209 [DEBUG] [Thread-133148] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:14:46.209 [DEBUG] [Thread-133148] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T19:14:46.209 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T19:14:46.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:14:46.210 [DEBUG] [Thread-133148] [transport.py] [_log()] userauth is OK
2025-12-31T19:14:46.211 [DEBUG] [Thread-133148] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:14:46.211 [DEBUG] [Thread-133148] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:14:46.211 [DEBUG] [Thread-133148] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T19:14:46.211 [DEBUG] [Thread-133148] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:14:46.222 [INFO] [Thread-133148] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:14:46.222 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:14:47.009 [DEBUG] [Thread-133148] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:14:47.009 [DEBUG] [Thread-133148] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:14:47.010 [DEBUG] [Thread-133148] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T19:14:47.050 [DEBUG] [Thread-133148] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:14:47.051 [DEBUG] [Thread-133148] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:14:47.054 [DEBUG] [Thread-133148] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:14:47.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:14:47.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T19:14:47.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T19:14:47.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T19:14:47.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:14:47.077 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T19:14:47.077 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:14:47.077 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:14:47.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T19:14:47.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.718195 -999.00  +22.00   6.25     39   +7.70 1 2 1 1 1   887    0 13.07 -62.04 ----- 10.1 6.2 215.9 11.8 23.4 -20.6 23.6 -19.4 23.8 -20.0 23.8 -21.2
2025-12-31T19:14:47.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T19:14:47.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T19:14:47.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.718195
2025-12-31T19:14:47.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T19:14:47.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T19:14:47.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T19:14:47.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T19:14:47.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T19:14:47.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T19:14:21', tmtdew=15.87, humidity=35.42, cloud=0.0, wind=19.73, temperature=21.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T17:14:12.048', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T19:14:47.080 [DEBUG] [Thread-133148] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:14:47.157 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T19:14:47.166 [DEBUG] [Thread-133151] [transport.py] [_log()] starting thread (client mode): 0xb95f3610
2025-12-31T19:14:47.166 [DEBUG] [Thread-133151] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:14:47.181 [DEBUG] [Thread-133151] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T19:14:47.181 [INFO] [Thread-133151] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T19:14:47.188 [DEBUG] [Thread-133151] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:14:47.189 [DEBUG] [Thread-133151] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T19:14:47.189 [DEBUG] [Thread-133151] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:14:47.189 [DEBUG] [Thread-133151] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:14:47.189 [DEBUG] [Thread-133151] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:14:47.189 [DEBUG] [Thread-133151] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:14:47.189 [DEBUG] [Thread-133151] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:14:47.189 [DEBUG] [Thread-133151] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:14:47.189 [DEBUG] [Thread-133151] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:14:47.189 [DEBUG] [Thread-133151] [transport.py] [_log()] client lang: <none>
2025-12-31T19:14:47.190 [DEBUG] [Thread-133151] [transport.py] [_log()] server lang: <none>
2025-12-31T19:14:47.190 [DEBUG] [Thread-133151] [transport.py] [_log()] kex follows: False
2025-12-31T19:14:47.190 [DEBUG] [Thread-133151] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:14:47.190 [DEBUG] [Thread-133151] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:14:47.190 [DEBUG] [Thread-133151] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:14:47.190 [DEBUG] [Thread-133151] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:14:47.190 [DEBUG] [Thread-133151] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:14:47.190 [DEBUG] [Thread-133151] [transport.py] [_log()] Compression: none
2025-12-31T19:14:47.190 [DEBUG] [Thread-133151] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:14:47.245 [DEBUG] [Thread-133151] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:14:47.246 [DEBUG] [Thread-133151] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:14:47.246 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T19:14:47.247 [DEBUG] [Thread-133151] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T19:14:47.247 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:14:47.301 [DEBUG] [Thread-133151] [transport.py] [_log()] userauth is OK
2025-12-31T19:14:47.302 [DEBUG] [Thread-133151] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:14:47.302 [DEBUG] [Thread-133151] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:14:47.302 [DEBUG] [Thread-133151] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T19:14:47.302 [DEBUG] [Thread-133151] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:14:47.321 [INFO] [Thread-133151] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:14:47.322 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T19:14:47.322 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:14:48.125 [DEBUG] [Thread-133153 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:14:48.238 [DEBUG] [Thread-133151] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:14:48.238 [DEBUG] [Thread-133151] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:14:48.286 [DEBUG] [Thread-133151] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:14:48.286 [DEBUG] [Thread-133151] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:14:48.295 [DEBUG] [Thread-133151] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:14:48.304 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:14:48.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T19:14: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') -> 00000000
2025-12-31T19:14:48.322 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:14:48.322 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:14:48.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:14:48.330 [DEBUG] [Thread-133151] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:15:03.168 [DEBUG] [Thread-133154 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:15:18.199 [DEBUG] [Thread-133155 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:15:18.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T19:15:18.353 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T19:15:18.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T19:15:19.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 19, 14, 53), 15.99, 35.35, 0.0, 18.3, 21.79, 0, 0, 0, 2, 0, 0),)
2025-12-31T19:15:19.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 19:14:53
2025-12-31T19:15:19.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T19:15:19.345 [DEBUG] [Thread-133156] [transport.py] [_log()] starting thread (client mode): 0xb955aa40
2025-12-31T19:15:19.345 [DEBUG] [Thread-133156] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:15:19.364 [DEBUG] [Thread-133156] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T19:15:19.364 [INFO] [Thread-133156] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T19:15:19.367 [DEBUG] [Thread-133156] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:15:19.367 [DEBUG] [Thread-133156] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T19:15:19.367 [DEBUG] [Thread-133156] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:15:19.368 [DEBUG] [Thread-133156] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:15:19.368 [DEBUG] [Thread-133156] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:15:19.368 [DEBUG] [Thread-133156] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:15:19.368 [DEBUG] [Thread-133156] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:15:19.368 [DEBUG] [Thread-133156] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:15:19.368 [DEBUG] [Thread-133156] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:15:19.368 [DEBUG] [Thread-133156] [transport.py] [_log()] client lang: <none>
2025-12-31T19:15:19.368 [DEBUG] [Thread-133156] [transport.py] [_log()] server lang: <none>
2025-12-31T19:15:19.368 [DEBUG] [Thread-133156] [transport.py] [_log()] kex follows: False
2025-12-31T19:15:19.368 [DEBUG] [Thread-133156] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:15:19.368 [DEBUG] [Thread-133156] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:15:19.368 [DEBUG] [Thread-133156] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:15:19.368 [DEBUG] [Thread-133156] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:15:19.368 [DEBUG] [Thread-133156] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:15:19.368 [DEBUG] [Thread-133156] [transport.py] [_log()] Compression: none
2025-12-31T19:15:19.368 [DEBUG] [Thread-133156] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:15:19.384 [DEBUG] [Thread-133156] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:15:19.384 [DEBUG] [Thread-133156] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:15:19.385 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T19:15:19.385 [DEBUG] [Thread-133156] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T19:15:19.386 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:15:19.387 [DEBUG] [Thread-133156] [transport.py] [_log()] userauth is OK
2025-12-31T19:15:19.387 [DEBUG] [Thread-133156] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:15:19.387 [DEBUG] [Thread-133156] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:15:19.387 [DEBUG] [Thread-133156] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T19:15:19.387 [DEBUG] [Thread-133156] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:15:19.411 [INFO] [Thread-133156] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:15:19.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:15:24.742 [DEBUG] [Thread-133156] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:15:24.742 [DEBUG] [Thread-133156] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:15:24.742 [DEBUG] [Thread-133156] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T19:15:24.783 [DEBUG] [Thread-133156] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:15:24.783 [DEBUG] [Thread-133156] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:15:24.788 [DEBUG] [Thread-133156] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:15:24.799 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:15:24.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T19:15:24.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T19:15:24.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T19:15:24.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:15:24.816 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T19:15:24.816 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:15:24.817 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:15:24.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T19:15:24.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.718542 -999.00  +22.00  10.89     39   +7.70 1 2 1 1 1   887    0 13.21 -56.86 ----- 13.7 10.9 201.7 17.3 23.4 -20.8 23.6 -19.7 23.7 -20.1 23.9 -21.6
2025-12-31T19:15:24.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T19:15:24.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T19:15:24.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.718542
2025-12-31T19:15:24.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T19:15:24.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T19:15:24.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T19:15:24.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T19:15:24.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T19:15:24.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T19:14:53', tmtdew=15.99, humidity=35.35, cloud=0.0, wind=18.3, temperature=21.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T17:14:42.029', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T19:15:24.819 [DEBUG] [Thread-133156] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:15:24.903 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T19:15:24.923 [DEBUG] [Thread-133159] [transport.py] [_log()] starting thread (client mode): 0xb9558940
2025-12-31T19:15:24.923 [DEBUG] [Thread-133159] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:15:24.938 [DEBUG] [Thread-133159] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T19:15:24.938 [INFO] [Thread-133159] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T19:15:24.945 [DEBUG] [Thread-133159] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:15:24.946 [DEBUG] [Thread-133159] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T19:15:24.946 [DEBUG] [Thread-133159] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:15:24.946 [DEBUG] [Thread-133159] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:15:24.946 [DEBUG] [Thread-133159] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:15:24.946 [DEBUG] [Thread-133159] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:15:24.946 [DEBUG] [Thread-133159] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:15:24.946 [DEBUG] [Thread-133159] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:15:24.946 [DEBUG] [Thread-133159] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:15:24.946 [DEBUG] [Thread-133159] [transport.py] [_log()] client lang: <none>
2025-12-31T19:15:24.946 [DEBUG] [Thread-133159] [transport.py] [_log()] server lang: <none>
2025-12-31T19:15:24.946 [DEBUG] [Thread-133159] [transport.py] [_log()] kex follows: False
2025-12-31T19:15:24.946 [DEBUG] [Thread-133159] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:15:24.947 [DEBUG] [Thread-133159] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:15:24.947 [DEBUG] [Thread-133159] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:15:24.947 [DEBUG] [Thread-133159] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:15:24.947 [DEBUG] [Thread-133159] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:15:24.947 [DEBUG] [Thread-133159] [transport.py] [_log()] Compression: none
2025-12-31T19:15:24.947 [DEBUG] [Thread-133159] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:15:25.006 [DEBUG] [Thread-133159] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:15:25.006 [DEBUG] [Thread-133159] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:15:25.007 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T19:15:25.007 [DEBUG] [Thread-133159] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T19:15:25.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:15:25.061 [DEBUG] [Thread-133159] [transport.py] [_log()] userauth is OK
2025-12-31T19:15:25.062 [DEBUG] [Thread-133159] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:15:25.062 [DEBUG] [Thread-133159] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:15:25.062 [DEBUG] [Thread-133159] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T19:15:25.062 [DEBUG] [Thread-133159] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:15:25.080 [INFO] [Thread-133159] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:15:25.080 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T19:15:25.081 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:15:25.931 [DEBUG] [Thread-133159] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:15:25.931 [DEBUG] [Thread-133159] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:15:25.979 [DEBUG] [Thread-133159] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:15:25.979 [DEBUG] [Thread-133159] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:15:25.987 [DEBUG] [Thread-133159] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:15:25.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:15:25.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T19:15:26.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T19:15:26.011 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:15:26.011 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:15:26.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:15:26.019 [DEBUG] [Thread-133159] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:15:33.102 [DEBUG] [Thread-133161 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:15:33.235 [DEBUG] [Thread-133162 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:15:39.714 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:15:39.715 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:15:48.289 [DEBUG] [Thread-133163 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:15:56.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T19:15:56.034 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T19:15:56.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T19:15:56.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 19, 15, 25), 15.97, 35.4, 0.0, 17.94, 21.84, 0, 0, 0, 2, 0, 0),)
2025-12-31T19:15:56.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 19:15:25
2025-12-31T19:15:56.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T19:15:57.041 [DEBUG] [Thread-133164] [transport.py] [_log()] starting thread (client mode): 0xb9559900
2025-12-31T19:15:57.042 [DEBUG] [Thread-133164] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:15:57.062 [DEBUG] [Thread-133164] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T19:15:57.062 [INFO] [Thread-133164] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T19:15:57.065 [DEBUG] [Thread-133164] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:15:57.065 [DEBUG] [Thread-133164] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T19:15:57.065 [DEBUG] [Thread-133164] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:15:57.065 [DEBUG] [Thread-133164] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:15:57.065 [DEBUG] [Thread-133164] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:15:57.065 [DEBUG] [Thread-133164] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:15:57.065 [DEBUG] [Thread-133164] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:15:57.066 [DEBUG] [Thread-133164] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:15:57.066 [DEBUG] [Thread-133164] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:15:57.066 [DEBUG] [Thread-133164] [transport.py] [_log()] client lang: <none>
2025-12-31T19:15:57.066 [DEBUG] [Thread-133164] [transport.py] [_log()] server lang: <none>
2025-12-31T19:15:57.066 [DEBUG] [Thread-133164] [transport.py] [_log()] kex follows: False
2025-12-31T19:15:57.066 [DEBUG] [Thread-133164] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:15:57.066 [DEBUG] [Thread-133164] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:15:57.066 [DEBUG] [Thread-133164] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:15:57.066 [DEBUG] [Thread-133164] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:15:57.066 [DEBUG] [Thread-133164] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:15:57.066 [DEBUG] [Thread-133164] [transport.py] [_log()] Compression: none
2025-12-31T19:15:57.066 [DEBUG] [Thread-133164] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:15:57.083 [DEBUG] [Thread-133164] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:15:57.083 [DEBUG] [Thread-133164] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:15:57.084 [DEBUG] [Thread-133164] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T19:15:57.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T19:15:57.085 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:15:57.086 [DEBUG] [Thread-133164] [transport.py] [_log()] userauth is OK
2025-12-31T19:15:57.087 [DEBUG] [Thread-133164] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:15:57.087 [DEBUG] [Thread-133164] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:15:57.087 [DEBUG] [Thread-133164] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T19:15:57.087 [DEBUG] [Thread-133164] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:15:57.125 [INFO] [Thread-133164] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:15:57.126 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:15:57.768 [DEBUG] [Thread-133164] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:15:57.768 [DEBUG] [Thread-133164] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:15:57.768 [DEBUG] [Thread-133164] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T19:15:57.809 [DEBUG] [Thread-133164] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:15:57.809 [DEBUG] [Thread-133164] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:15:57.811 [DEBUG] [Thread-133164] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:15:57.824 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:15:57.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T19:15:57.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T19:15:57.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T19:15:57.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:15:57.831 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T19:15:57.831 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:15:57.831 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:15:57.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T19:15:57.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.718889 -999.00  +21.90   8.92     40   +7.70 1 2 1 1 1   887    0 13.34 -52.22 ----- 11.9 8.9 216.5 20.4 23.4 -20.7 23.5 -19.7 23.8 -20.0 23.8 -21.8
2025-12-31T19:15:57.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T19:15:57.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T19:15:57.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.718889
2025-12-31T19:15:57.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T19:15:57.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T19:15:57.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T19:15:57.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T19:15:57.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T19:15:57.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T19:15:25', tmtdew=15.97, humidity=35.4, cloud=0.0, wind=17.94, temperature=21.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T17:15:12.010', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T19:15:57.832 [DEBUG] [Thread-133164] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:15:57.911 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T19:15:57.922 [DEBUG] [Thread-133167] [transport.py] [_log()] starting thread (client mode): 0xb957a5c0
2025-12-31T19:15:57.922 [DEBUG] [Thread-133167] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:15:57.937 [DEBUG] [Thread-133167] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T19:15:57.937 [INFO] [Thread-133167] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T19:15:57.944 [DEBUG] [Thread-133167] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:15:57.944 [DEBUG] [Thread-133167] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T19:15:57.944 [DEBUG] [Thread-133167] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:15:57.944 [DEBUG] [Thread-133167] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:15:57.944 [DEBUG] [Thread-133167] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:15:57.944 [DEBUG] [Thread-133167] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:15:57.944 [DEBUG] [Thread-133167] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:15:57.944 [DEBUG] [Thread-133167] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:15:57.944 [DEBUG] [Thread-133167] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:15:57.944 [DEBUG] [Thread-133167] [transport.py] [_log()] client lang: <none>
2025-12-31T19:15:57.944 [DEBUG] [Thread-133167] [transport.py] [_log()] server lang: <none>
2025-12-31T19:15:57.944 [DEBUG] [Thread-133167] [transport.py] [_log()] kex follows: False
2025-12-31T19:15:57.945 [DEBUG] [Thread-133167] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:15:57.945 [DEBUG] [Thread-133167] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:15:57.945 [DEBUG] [Thread-133167] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:15:57.945 [DEBUG] [Thread-133167] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:15:57.945 [DEBUG] [Thread-133167] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:15:57.945 [DEBUG] [Thread-133167] [transport.py] [_log()] Compression: none
2025-12-31T19:15:57.945 [DEBUG] [Thread-133167] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:15:57.999 [DEBUG] [Thread-133167] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:15:58.000 [DEBUG] [Thread-133167] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:15:58.000 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T19:15:58.000 [DEBUG] [Thread-133167] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T19:15:58.000 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:15:58.057 [DEBUG] [Thread-133167] [transport.py] [_log()] userauth is OK
2025-12-31T19:15:58.057 [DEBUG] [Thread-133167] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:15:58.057 [DEBUG] [Thread-133167] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:15:58.057 [DEBUG] [Thread-133167] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T19:15:58.057 [DEBUG] [Thread-133167] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:15:58.073 [INFO] [Thread-133167] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:15:58.073 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T19:15:58.073 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:15:58.878 [DEBUG] [Thread-133167] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:15:58.878 [DEBUG] [Thread-133167] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:15:58.926 [DEBUG] [Thread-133167] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:15:58.926 [DEBUG] [Thread-133167] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:15:58.935 [DEBUG] [Thread-133167] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:15:58.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:15:58.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T19:15:58.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T19:15:58.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:15:58.958 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:15:58.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:15:58.966 [DEBUG] [Thread-133167] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:16:03.324 [DEBUG] [Thread-133169 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:16:18.379 [DEBUG] [Thread-133170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:16:28.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T19:16:28.989 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T19:16:28.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T19:16:29.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 19, 15, 57), 16.02, 35.4, 0.0, 15.74, 21.84, 0, 0, 0, 2, 0, 0),)
2025-12-31T19:16:29.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 19:15:57
2025-12-31T19:16:29.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T19:16:30.006 [DEBUG] [Thread-133171] [transport.py] [_log()] starting thread (client mode): 0xb1765d50
2025-12-31T19:16:30.007 [DEBUG] [Thread-133171] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:16:30.022 [DEBUG] [Thread-133171] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T19:16:30.022 [INFO] [Thread-133171] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T19:16:30.025 [DEBUG] [Thread-133171] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:16:30.025 [DEBUG] [Thread-133171] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T19:16:30.025 [DEBUG] [Thread-133171] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:16:30.025 [DEBUG] [Thread-133171] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:16:30.025 [DEBUG] [Thread-133171] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:16:30.025 [DEBUG] [Thread-133171] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:16:30.025 [DEBUG] [Thread-133171] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:16:30.025 [DEBUG] [Thread-133171] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:16:30.025 [DEBUG] [Thread-133171] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:16:30.025 [DEBUG] [Thread-133171] [transport.py] [_log()] client lang: <none>
2025-12-31T19:16:30.025 [DEBUG] [Thread-133171] [transport.py] [_log()] server lang: <none>
2025-12-31T19:16:30.025 [DEBUG] [Thread-133171] [transport.py] [_log()] kex follows: False
2025-12-31T19:16:30.025 [DEBUG] [Thread-133171] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:16:30.025 [DEBUG] [Thread-133171] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:16:30.025 [DEBUG] [Thread-133171] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:16:30.025 [DEBUG] [Thread-133171] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:16:30.026 [DEBUG] [Thread-133171] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:16:30.026 [DEBUG] [Thread-133171] [transport.py] [_log()] Compression: none
2025-12-31T19:16:30.026 [DEBUG] [Thread-133171] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:16:30.041 [DEBUG] [Thread-133171] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:16:30.042 [DEBUG] [Thread-133171] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:16:30.042 [DEBUG] [Thread-133171] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T19:16:30.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T19:16:30.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:16:30.044 [DEBUG] [Thread-133171] [transport.py] [_log()] userauth is OK
2025-12-31T19:16:30.044 [DEBUG] [Thread-133171] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:16:30.044 [DEBUG] [Thread-133171] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:16:30.044 [DEBUG] [Thread-133171] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T19:16:30.044 [DEBUG] [Thread-133171] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:16:30.063 [INFO] [Thread-133171] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:16:30.063 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:16:30.820 [DEBUG] [Thread-133171] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:16:30.820 [DEBUG] [Thread-133171] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:16:30.820 [DEBUG] [Thread-133171] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T19:16:30.861 [DEBUG] [Thread-133171] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:16:30.861 [DEBUG] [Thread-133171] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:16:30.863 [DEBUG] [Thread-133171] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:16:30.876 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:16:30.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T19:16:30.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T19:16:30.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T19:16:30.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:16:30.881 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T19:16:30.881 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:16:30.881 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:16:30.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T19:16:30.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.719237 -999.00  +22.00   7.37     39   +7.70 1 2 1 1 1   887    0 13.36 -51.09 ----- 9.6 7.4 217.6 14.2 23.4 -20.5 23.6 -19.5 23.8 -19.8 23.9 -21.5
2025-12-31T19:16:30.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T19:16:30.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T19:16:30.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.719237
2025-12-31T19:16:30.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T19:16:30.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T19:16:30.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T19:16:30.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T19:16:30.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T19:16:30.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T19:15:57', tmtdew=16.02, humidity=35.4, cloud=0.0, wind=15.74, temperature=21.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T17:15:42.077', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T19:16:30.882 [DEBUG] [Thread-133171] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:16:30.957 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T19:16:30.968 [DEBUG] [Thread-133174] [transport.py] [_log()] starting thread (client mode): 0xb6bb84f0
2025-12-31T19:16:30.968 [DEBUG] [Thread-133174] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:16:30.983 [DEBUG] [Thread-133174] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T19:16:30.983 [INFO] [Thread-133174] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T19:16:30.992 [DEBUG] [Thread-133174] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:16:30.992 [DEBUG] [Thread-133174] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T19:16:30.992 [DEBUG] [Thread-133174] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:16:30.992 [DEBUG] [Thread-133174] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:16:30.992 [DEBUG] [Thread-133174] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:16:30.992 [DEBUG] [Thread-133174] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:16:30.992 [DEBUG] [Thread-133174] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:16:30.992 [DEBUG] [Thread-133174] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:16:30.992 [DEBUG] [Thread-133174] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:16:30.992 [DEBUG] [Thread-133174] [transport.py] [_log()] client lang: <none>
2025-12-31T19:16:30.992 [DEBUG] [Thread-133174] [transport.py] [_log()] server lang: <none>
2025-12-31T19:16:30.992 [DEBUG] [Thread-133174] [transport.py] [_log()] kex follows: False
2025-12-31T19:16:30.992 [DEBUG] [Thread-133174] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:16:30.992 [DEBUG] [Thread-133174] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:16:30.992 [DEBUG] [Thread-133174] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:16:30.992 [DEBUG] [Thread-133174] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:16:30.992 [DEBUG] [Thread-133174] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:16:30.992 [DEBUG] [Thread-133174] [transport.py] [_log()] Compression: none
2025-12-31T19:16:30.992 [DEBUG] [Thread-133174] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:16:31.048 [DEBUG] [Thread-133174] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:16:31.048 [DEBUG] [Thread-133174] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:16:31.049 [DEBUG] [Thread-133174] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T19:16:31.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T19:16:31.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:16:31.104 [DEBUG] [Thread-133174] [transport.py] [_log()] userauth is OK
2025-12-31T19:16:31.105 [DEBUG] [Thread-133174] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:16:31.105 [DEBUG] [Thread-133174] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:16:31.105 [DEBUG] [Thread-133174] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T19:16:31.105 [DEBUG] [Thread-133174] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:16:31.122 [INFO] [Thread-133174] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:16:31.122 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T19:16:31.122 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:16:31.931 [DEBUG] [Thread-133174] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:16:31.932 [DEBUG] [Thread-133174] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:16:31.979 [DEBUG] [Thread-133174] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:16:31.979 [DEBUG] [Thread-133174] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:16:31.988 [DEBUG] [Thread-133174] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:16:31.998 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:16:31.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T19:16:32.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T19:16:32.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:16:32.017 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:16:32.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:16:32.026 [DEBUG] [Thread-133174] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:16:33.152 [DEBUG] [Thread-133176 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:16:33.409 [DEBUG] [Thread-133177 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:16:39.855 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:16:39.856 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:16:48.462 [DEBUG] [Thread-133178 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:17:02.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T19:17:02.037 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T19:17:02.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T19:17:02.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 19, 16, 29), 16.04, 35.37, 0.0, 17.27, 21.88, 0, 0, 0, 2, 0, 0),)
2025-12-31T19:17:02.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 19:16:29
2025-12-31T19:17:03.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T19:17:03.155 [DEBUG] [Thread-133179] [transport.py] [_log()] starting thread (client mode): 0xb95582e0
2025-12-31T19:17:03.155 [DEBUG] [Thread-133179] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:17:03.175 [DEBUG] [Thread-133179] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T19:17:03.175 [INFO] [Thread-133179] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T19:17:03.178 [DEBUG] [Thread-133179] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:17:03.179 [DEBUG] [Thread-133179] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T19:17:03.179 [DEBUG] [Thread-133179] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:17:03.179 [DEBUG] [Thread-133179] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:17:03.179 [DEBUG] [Thread-133179] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:17:03.179 [DEBUG] [Thread-133179] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:17:03.179 [DEBUG] [Thread-133179] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:17:03.179 [DEBUG] [Thread-133179] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:17:03.179 [DEBUG] [Thread-133179] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:17:03.179 [DEBUG] [Thread-133179] [transport.py] [_log()] client lang: <none>
2025-12-31T19:17:03.179 [DEBUG] [Thread-133179] [transport.py] [_log()] server lang: <none>
2025-12-31T19:17:03.179 [DEBUG] [Thread-133179] [transport.py] [_log()] kex follows: False
2025-12-31T19:17:03.179 [DEBUG] [Thread-133179] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:17:03.179 [DEBUG] [Thread-133179] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:17:03.179 [DEBUG] [Thread-133179] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:17:03.179 [DEBUG] [Thread-133179] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:17:03.179 [DEBUG] [Thread-133179] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:17:03.179 [DEBUG] [Thread-133179] [transport.py] [_log()] Compression: none
2025-12-31T19:17:03.179 [DEBUG] [Thread-133179] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:17:03.195 [DEBUG] [Thread-133179] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:17:03.195 [DEBUG] [Thread-133179] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:17:03.195 [DEBUG] [Thread-133179] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T19:17:03.195 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T19:17:03.195 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:17:03.241 [DEBUG] [Thread-133179] [transport.py] [_log()] userauth is OK
2025-12-31T19:17:03.241 [DEBUG] [Thread-133179] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:17:03.241 [DEBUG] [Thread-133179] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:17:03.241 [DEBUG] [Thread-133179] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T19:17:03.241 [DEBUG] [Thread-133179] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:17:03.256 [INFO] [Thread-133179] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:17:03.256 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:17:03.495 [DEBUG] [Thread-133181 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:17:03.887 [DEBUG] [Thread-133179] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:17:03.887 [DEBUG] [Thread-133179] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:17:03.887 [DEBUG] [Thread-133179] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T19:17:03.929 [DEBUG] [Thread-133179] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:17:03.929 [DEBUG] [Thread-133179] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:17:03.931 [DEBUG] [Thread-133179] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:17:03.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:17:03.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T19:17:03.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T19:17:03.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T19:17:03.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:17:03.953 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T19:17:03.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:17:03.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:17:03.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T19:17:03.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.719584 -999.00  +21.90  11.33     40   +7.70 1 2 1 1 1   887    0 13.48 -50.15 ----- 13.8 11.3 243.2 18.2 23.3 -21.0 23.6 -19.7 23.8 -20.1 23.9 -21.8
2025-12-31T19:17:03.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T19:17:03.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T19:17:03.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.719584
2025-12-31T19:17:03.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T19:17:03.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T19:17:03.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T19:17:03.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T19:17:03.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T19:17:03.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T19:16:29', tmtdew=16.04, humidity=35.37, cloud=0.0, wind=17.27, temperature=21.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T17:16:12.058', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T19:17:03.955 [DEBUG] [Thread-133179] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:17:04.031 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T19:17:04.043 [DEBUG] [Thread-133183] [transport.py] [_log()] starting thread (client mode): 0xb17664d0
2025-12-31T19:17:04.043 [DEBUG] [Thread-133183] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:17:04.058 [DEBUG] [Thread-133183] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T19:17:04.058 [INFO] [Thread-133183] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T19:17:04.065 [DEBUG] [Thread-133183] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:17:04.065 [DEBUG] [Thread-133183] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T19:17:04.066 [DEBUG] [Thread-133183] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:17:04.066 [DEBUG] [Thread-133183] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:17:04.066 [DEBUG] [Thread-133183] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:17:04.066 [DEBUG] [Thread-133183] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:17:04.066 [DEBUG] [Thread-133183] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:17:04.066 [DEBUG] [Thread-133183] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:17:04.066 [DEBUG] [Thread-133183] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:17:04.066 [DEBUG] [Thread-133183] [transport.py] [_log()] client lang: <none>
2025-12-31T19:17:04.066 [DEBUG] [Thread-133183] [transport.py] [_log()] server lang: <none>
2025-12-31T19:17:04.066 [DEBUG] [Thread-133183] [transport.py] [_log()] kex follows: False
2025-12-31T19:17:04.066 [DEBUG] [Thread-133183] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:17:04.066 [DEBUG] [Thread-133183] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:17:04.066 [DEBUG] [Thread-133183] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:17:04.066 [DEBUG] [Thread-133183] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:17:04.066 [DEBUG] [Thread-133183] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:17:04.066 [DEBUG] [Thread-133183] [transport.py] [_log()] Compression: none
2025-12-31T19:17:04.066 [DEBUG] [Thread-133183] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:17:04.123 [DEBUG] [Thread-133183] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:17:04.123 [DEBUG] [Thread-133183] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:17:04.123 [DEBUG] [Thread-133183] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T19:17:04.123 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T19:17:04.123 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:17:04.180 [DEBUG] [Thread-133183] [transport.py] [_log()] userauth is OK
2025-12-31T19:17:04.180 [DEBUG] [Thread-133183] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:17:04.180 [DEBUG] [Thread-133183] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:17:04.180 [DEBUG] [Thread-133183] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T19:17:04.180 [DEBUG] [Thread-133183] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:17:04.194 [INFO] [Thread-133183] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:17:04.194 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T19:17:04.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:17:05.003 [DEBUG] [Thread-133183] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:17:05.003 [DEBUG] [Thread-133183] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:17:05.051 [DEBUG] [Thread-133183] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:17:05.051 [DEBUG] [Thread-133183] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:17:05.064 [DEBUG] [Thread-133183] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:17:05.073 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:17: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')
2025-12-31T19:17:05.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T19:17:05.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:17:05.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:17:05.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:17:05.098 [DEBUG] [Thread-133183] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:17:18.526 [DEBUG] [Thread-133185 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:17:33.206 [DEBUG] [Thread-133186 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:17:33.581 [DEBUG] [Thread-133187 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:17:35.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T19:17:35.120 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T19:17:35.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-12-31T19:17:35.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 19, 17, 1), 16.04, 35.37, 0.0, 16.83, 21.88, 0, 0, 0, 2, 0, 0),)
2025-12-31T19:17:35.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 19:17:01
2025-12-31T19:17:36.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T19:17:36.157 [DEBUG] [Thread-133188] [transport.py] [_log()] starting thread (client mode): 0xb95d7c10
2025-12-31T19:17:36.157 [DEBUG] [Thread-133188] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:17:36.178 [DEBUG] [Thread-133188] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T19:17:36.178 [INFO] [Thread-133188] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T19:17:36.181 [DEBUG] [Thread-133188] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:17:36.182 [DEBUG] [Thread-133188] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T19:17:36.182 [DEBUG] [Thread-133188] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:17:36.182 [DEBUG] [Thread-133188] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:17:36.182 [DEBUG] [Thread-133188] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:17:36.182 [DEBUG] [Thread-133188] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:17:36.182 [DEBUG] [Thread-133188] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:17:36.182 [DEBUG] [Thread-133188] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:17:36.182 [DEBUG] [Thread-133188] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:17:36.182 [DEBUG] [Thread-133188] [transport.py] [_log()] client lang: <none>
2025-12-31T19:17:36.182 [DEBUG] [Thread-133188] [transport.py] [_log()] server lang: <none>
2025-12-31T19:17:36.182 [DEBUG] [Thread-133188] [transport.py] [_log()] kex follows: False
2025-12-31T19:17:36.182 [DEBUG] [Thread-133188] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:17:36.182 [DEBUG] [Thread-133188] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:17:36.183 [DEBUG] [Thread-133188] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:17:36.183 [DEBUG] [Thread-133188] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:17:36.183 [DEBUG] [Thread-133188] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:17:36.183 [DEBUG] [Thread-133188] [transport.py] [_log()] Compression: none
2025-12-31T19:17:36.183 [DEBUG] [Thread-133188] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:17:36.201 [DEBUG] [Thread-133188] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:17:36.201 [DEBUG] [Thread-133188] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:17:36.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T19:17:36.202 [DEBUG] [Thread-133188] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T19:17:36.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:17:36.204 [DEBUG] [Thread-133188] [transport.py] [_log()] userauth is OK
2025-12-31T19:17:36.205 [DEBUG] [Thread-133188] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:17:36.205 [DEBUG] [Thread-133188] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:17:36.205 [DEBUG] [Thread-133188] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T19:17:36.205 [DEBUG] [Thread-133188] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:17:36.228 [INFO] [Thread-133188] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:17:36.229 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:17:36.962 [DEBUG] [Thread-133188] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:17:36.962 [DEBUG] [Thread-133188] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:17:36.963 [DEBUG] [Thread-133188] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T19:17:37.003 [DEBUG] [Thread-133188] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:17:37.003 [DEBUG] [Thread-133188] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:17:37.006 [DEBUG] [Thread-133188] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:17:37.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:17:37.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T19:17:37.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T19:17:37.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T19:17:37.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:17:37.024 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T19:17:37.024 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:17:37.024 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:17:37.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T19:17:37.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.719931 -999.00  +21.90   6.06     40   +7.80 1 2 1 1 1   887    0 13.45 -55.66 ----- 8.9 6.1 226.4 15.0 23.4 -20.2 23.6 -19.3 23.8 -19.7 23.9 -21.3
2025-12-31T19:17:37.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T19:17:37.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T19:17:37.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.719931
2025-12-31T19:17:37.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T19:17:37.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T19:17:37.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T19:17:37.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T19:17:37.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T19:17:37.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T19:17:01', tmtdew=16.04, humidity=35.37, cloud=0.0, wind=16.83, temperature=21.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T17:16:42.038', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T19:17:37.027 [DEBUG] [Thread-133188] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:17:37.111 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T19:17:37.123 [DEBUG] [Thread-133191] [transport.py] [_log()] starting thread (client mode): 0xb95d54e0
2025-12-31T19:17:37.123 [DEBUG] [Thread-133191] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:17:37.137 [DEBUG] [Thread-133191] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T19:17:37.137 [INFO] [Thread-133191] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T19:17:37.145 [DEBUG] [Thread-133191] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:17:37.145 [DEBUG] [Thread-133191] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T19:17:37.145 [DEBUG] [Thread-133191] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:17:37.145 [DEBUG] [Thread-133191] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:17:37.145 [DEBUG] [Thread-133191] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:17:37.145 [DEBUG] [Thread-133191] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:17:37.145 [DEBUG] [Thread-133191] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:17:37.145 [DEBUG] [Thread-133191] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:17:37.145 [DEBUG] [Thread-133191] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:17:37.145 [DEBUG] [Thread-133191] [transport.py] [_log()] client lang: <none>
2025-12-31T19:17:37.145 [DEBUG] [Thread-133191] [transport.py] [_log()] server lang: <none>
2025-12-31T19:17:37.145 [DEBUG] [Thread-133191] [transport.py] [_log()] kex follows: False
2025-12-31T19:17:37.145 [DEBUG] [Thread-133191] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:17:37.145 [DEBUG] [Thread-133191] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:17:37.145 [DEBUG] [Thread-133191] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:17:37.146 [DEBUG] [Thread-133191] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:17:37.146 [DEBUG] [Thread-133191] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:17:37.146 [DEBUG] [Thread-133191] [transport.py] [_log()] Compression: none
2025-12-31T19:17:37.146 [DEBUG] [Thread-133191] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:17:37.205 [DEBUG] [Thread-133191] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:17:37.205 [DEBUG] [Thread-133191] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:17:37.206 [DEBUG] [Thread-133191] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T19:17:37.206 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T19:17:37.207 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:17:37.261 [DEBUG] [Thread-133191] [transport.py] [_log()] userauth is OK
2025-12-31T19:17:37.261 [DEBUG] [Thread-133191] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:17:37.261 [DEBUG] [Thread-133191] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:17:37.261 [DEBUG] [Thread-133191] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T19:17:37.261 [DEBUG] [Thread-133191] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:17:37.280 [INFO] [Thread-133191] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:17:37.281 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T19:17:37.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:17:38.081 [DEBUG] [Thread-133191] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:17:38.081 [DEBUG] [Thread-133191] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:17:38.128 [DEBUG] [Thread-133191] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:17:38.129 [DEBUG] [Thread-133191] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:17:38.137 [DEBUG] [Thread-133191] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:17:38.146 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:17:38.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T19:17:38.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T19:17:38.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:17:38.163 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:17:38.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:17:38.171 [DEBUG] [Thread-133191] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:17:39.995 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:17:39.996 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:17:48.613 [DEBUG] [Thread-133193 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:18:03.663 [DEBUG] [Thread-133194 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:18:08.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T19:18:08.174 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T19:18:08.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T19:18:08.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 19, 18, 6), 16.13, 34.77, 0.0, 13.31, 21.89, 0, 0, 0, 2, 0, 0),)
2025-12-31T19:18:08.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 19:18:06
2025-12-31T19:18:09.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T19:18:09.182 [DEBUG] [Thread-133195] [transport.py] [_log()] starting thread (client mode): 0xb95d4100
2025-12-31T19:18:09.182 [DEBUG] [Thread-133195] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:18:09.197 [DEBUG] [Thread-133195] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T19:18:09.197 [INFO] [Thread-133195] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T19:18:09.200 [DEBUG] [Thread-133195] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:18:09.200 [DEBUG] [Thread-133195] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T19:18:09.200 [DEBUG] [Thread-133195] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:18:09.200 [DEBUG] [Thread-133195] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:18:09.200 [DEBUG] [Thread-133195] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:18:09.200 [DEBUG] [Thread-133195] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:18:09.201 [DEBUG] [Thread-133195] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:18:09.201 [DEBUG] [Thread-133195] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:18:09.201 [DEBUG] [Thread-133195] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:18:09.201 [DEBUG] [Thread-133195] [transport.py] [_log()] client lang: <none>
2025-12-31T19:18:09.201 [DEBUG] [Thread-133195] [transport.py] [_log()] server lang: <none>
2025-12-31T19:18:09.201 [DEBUG] [Thread-133195] [transport.py] [_log()] kex follows: False
2025-12-31T19:18:09.201 [DEBUG] [Thread-133195] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:18:09.201 [DEBUG] [Thread-133195] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:18:09.201 [DEBUG] [Thread-133195] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:18:09.201 [DEBUG] [Thread-133195] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:18:09.201 [DEBUG] [Thread-133195] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:18:09.201 [DEBUG] [Thread-133195] [transport.py] [_log()] Compression: none
2025-12-31T19:18:09.201 [DEBUG] [Thread-133195] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:18:09.220 [DEBUG] [Thread-133195] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:18:09.221 [DEBUG] [Thread-133195] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:18:09.222 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T19:18:09.223 [DEBUG] [Thread-133195] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T19:18:09.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:18:09.225 [DEBUG] [Thread-133195] [transport.py] [_log()] userauth is OK
2025-12-31T19:18:09.225 [DEBUG] [Thread-133195] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:18:09.225 [DEBUG] [Thread-133195] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:18:09.225 [DEBUG] [Thread-133195] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T19:18:09.225 [DEBUG] [Thread-133195] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:18:09.240 [INFO] [Thread-133195] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:18:09.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:18:09.882 [DEBUG] [Thread-133195] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:18:09.882 [DEBUG] [Thread-133195] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:18:09.883 [DEBUG] [Thread-133195] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T19:18:09.923 [DEBUG] [Thread-133195] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:18:09.923 [DEBUG] [Thread-133195] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:18:09.927 [DEBUG] [Thread-133195] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:18:09.939 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:18:09.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T19:18:09.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T19:18:09.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T19:18:09.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:18:09.955 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T19:18:09.956 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:18:09.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:18:09.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T19:18:09.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.720278 -999.00  +21.90  10.22     39   +7.60 1 2 1 1 1   887    0 13.03 -54.60 ----- 11.2 10.2 222.4 21.0 23.4 -20.5 23.6 -19.4 23.8 -20.3 23.9 -21.6
2025-12-31T19:18:09.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T19:18:09.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T19:18:09.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.720278
2025-12-31T19:18:09.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T19:18:09.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T19:18:09.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T19:18:09.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T19:18:09.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T19:18:09.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T19:18:06', tmtdew=16.13, humidity=34.77, cloud=0.0, wind=13.31, temperature=21.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T17:17:12.019', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T19:18:09.958 [DEBUG] [Thread-133195] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:18:10.042 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T19:18:10.054 [DEBUG] [Thread-133198] [transport.py] [_log()] starting thread (client mode): 0xb1764c70
2025-12-31T19:18:10.055 [DEBUG] [Thread-133198] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:18:10.069 [DEBUG] [Thread-133198] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T19:18:10.069 [INFO] [Thread-133198] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T19:18:10.076 [DEBUG] [Thread-133198] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:18:10.076 [DEBUG] [Thread-133198] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T19:18:10.077 [DEBUG] [Thread-133198] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:18:10.077 [DEBUG] [Thread-133198] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:18:10.077 [DEBUG] [Thread-133198] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:18:10.077 [DEBUG] [Thread-133198] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:18:10.077 [DEBUG] [Thread-133198] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:18:10.077 [DEBUG] [Thread-133198] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:18:10.077 [DEBUG] [Thread-133198] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:18:10.077 [DEBUG] [Thread-133198] [transport.py] [_log()] client lang: <none>
2025-12-31T19:18:10.078 [DEBUG] [Thread-133198] [transport.py] [_log()] server lang: <none>
2025-12-31T19:18:10.078 [DEBUG] [Thread-133198] [transport.py] [_log()] kex follows: False
2025-12-31T19:18:10.078 [DEBUG] [Thread-133198] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:18:10.078 [DEBUG] [Thread-133198] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:18:10.078 [DEBUG] [Thread-133198] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:18:10.078 [DEBUG] [Thread-133198] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:18:10.078 [DEBUG] [Thread-133198] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:18:10.078 [DEBUG] [Thread-133198] [transport.py] [_log()] Compression: none
2025-12-31T19:18:10.078 [DEBUG] [Thread-133198] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:18:10.136 [DEBUG] [Thread-133198] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:18:10.137 [DEBUG] [Thread-133198] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:18:10.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T19:18:10.138 [DEBUG] [Thread-133198] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T19:18:10.139 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:18:10.192 [DEBUG] [Thread-133198] [transport.py] [_log()] userauth is OK
2025-12-31T19:18:10.192 [DEBUG] [Thread-133198] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:18:10.192 [DEBUG] [Thread-133198] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:18:10.192 [DEBUG] [Thread-133198] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T19:18:10.192 [DEBUG] [Thread-133198] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:18:10.216 [INFO] [Thread-133198] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:18:10.217 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T19:18:10.217 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:18:11.056 [DEBUG] [Thread-133198] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:18:11.057 [DEBUG] [Thread-133198] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:18:11.104 [DEBUG] [Thread-133198] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:18:11.105 [DEBUG] [Thread-133198] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:18:11.114 [DEBUG] [Thread-133198] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:18:11.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:18:11.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T19:18:11.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T19:18:11.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:18:11.142 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:18:11.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:18:11.150 [DEBUG] [Thread-133198] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:18:18.693 [DEBUG] [Thread-133200 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:18:33.259 [DEBUG] [Thread-133201 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:18:33.735 [DEBUG] [Thread-133202 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:18:40.133 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:18:40.135 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:18:41.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T19:18:41.154 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T19:18:41.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T19:18:41.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 19, 18, 38), 16.25, 34.74, 0.0, 15.14, 21.88, 0, 0, 0, 2, 0, 0),)
2025-12-31T19:18:41.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 19:18:38
2025-12-31T19:18:42.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T19:18:42.157 [DEBUG] [Thread-133203] [transport.py] [_log()] starting thread (client mode): 0xb6bba500
2025-12-31T19:18:42.157 [DEBUG] [Thread-133203] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:18:42.178 [DEBUG] [Thread-133203] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T19:18:42.178 [INFO] [Thread-133203] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T19:18:42.181 [DEBUG] [Thread-133203] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:18:42.181 [DEBUG] [Thread-133203] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T19:18:42.181 [DEBUG] [Thread-133203] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:18:42.181 [DEBUG] [Thread-133203] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:18:42.181 [DEBUG] [Thread-133203] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:18:42.181 [DEBUG] [Thread-133203] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:18:42.181 [DEBUG] [Thread-133203] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:18:42.181 [DEBUG] [Thread-133203] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:18:42.181 [DEBUG] [Thread-133203] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:18:42.182 [DEBUG] [Thread-133203] [transport.py] [_log()] client lang: <none>
2025-12-31T19:18:42.182 [DEBUG] [Thread-133203] [transport.py] [_log()] server lang: <none>
2025-12-31T19:18:42.182 [DEBUG] [Thread-133203] [transport.py] [_log()] kex follows: False
2025-12-31T19:18:42.182 [DEBUG] [Thread-133203] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:18:42.182 [DEBUG] [Thread-133203] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:18:42.182 [DEBUG] [Thread-133203] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:18:42.182 [DEBUG] [Thread-133203] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:18:42.182 [DEBUG] [Thread-133203] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:18:42.182 [DEBUG] [Thread-133203] [transport.py] [_log()] Compression: none
2025-12-31T19:18:42.182 [DEBUG] [Thread-133203] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:18:42.199 [DEBUG] [Thread-133203] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:18:42.199 [DEBUG] [Thread-133203] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:18:42.200 [DEBUG] [Thread-133203] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T19:18:42.200 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T19:18:42.200 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:18:42.201 [DEBUG] [Thread-133203] [transport.py] [_log()] userauth is OK
2025-12-31T19:18:42.202 [DEBUG] [Thread-133203] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:18:42.202 [DEBUG] [Thread-133203] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:18:42.202 [DEBUG] [Thread-133203] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T19:18:42.202 [DEBUG] [Thread-133203] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:18:42.226 [INFO] [Thread-133203] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:18:42.226 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:18:42.985 [DEBUG] [Thread-133203] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:18:42.985 [DEBUG] [Thread-133203] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:18:42.986 [DEBUG] [Thread-133203] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T19:18:43.027 [DEBUG] [Thread-133203] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:18:43.027 [DEBUG] [Thread-133203] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:18:43.031 [DEBUG] [Thread-133203] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:18:43.042 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:18:43.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T19:18:43.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T19:18:43.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T19:18:43.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:18:43.061 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T19:18:43.061 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:18:43.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:18:43.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T19:18:43.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.720626 -999.00  +22.00   5.58     39   +7.50 1 2 1 1 1   887    0 13.12 -57.01 ----- 10.0 5.6 217.6 14.8 23.4 -20.3 23.6 -19.3 23.9 -19.8 23.9 -21.2
2025-12-31T19:18:43.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T19:18:43.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T19:18:43.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.720626
2025-12-31T19:18:43.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T19:18:43.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T19:18:43.063 [DEBUG] [Thread-133203] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:18:43.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T19:18:43.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T19:18:43.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T19:18:43.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T19:18:38', tmtdew=16.25, humidity=34.74, cloud=0.0, wind=15.14, temperature=21.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T17:17:42.086', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T19:18:43.147 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T19:18:43.157 [DEBUG] [Thread-133206] [transport.py] [_log()] starting thread (client mode): 0xb1765ff0
2025-12-31T19:18:43.157 [DEBUG] [Thread-133206] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:18:43.172 [DEBUG] [Thread-133206] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T19:18:43.172 [INFO] [Thread-133206] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T19:18:43.179 [DEBUG] [Thread-133206] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:18:43.180 [DEBUG] [Thread-133206] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T19:18:43.180 [DEBUG] [Thread-133206] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:18:43.180 [DEBUG] [Thread-133206] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:18:43.180 [DEBUG] [Thread-133206] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:18:43.180 [DEBUG] [Thread-133206] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:18:43.180 [DEBUG] [Thread-133206] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:18:43.180 [DEBUG] [Thread-133206] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:18:43.180 [DEBUG] [Thread-133206] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:18:43.180 [DEBUG] [Thread-133206] [transport.py] [_log()] client lang: <none>
2025-12-31T19:18:43.180 [DEBUG] [Thread-133206] [transport.py] [_log()] server lang: <none>
2025-12-31T19:18:43.180 [DEBUG] [Thread-133206] [transport.py] [_log()] kex follows: False
2025-12-31T19:18:43.180 [DEBUG] [Thread-133206] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:18:43.180 [DEBUG] [Thread-133206] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:18:43.180 [DEBUG] [Thread-133206] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:18:43.180 [DEBUG] [Thread-133206] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:18:43.180 [DEBUG] [Thread-133206] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:18:43.180 [DEBUG] [Thread-133206] [transport.py] [_log()] Compression: none
2025-12-31T19:18:43.180 [DEBUG] [Thread-133206] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:18:43.236 [DEBUG] [Thread-133206] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:18:43.236 [DEBUG] [Thread-133206] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:18:43.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T19:18:43.237 [DEBUG] [Thread-133206] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T19:18:43.238 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:18:43.292 [DEBUG] [Thread-133206] [transport.py] [_log()] userauth is OK
2025-12-31T19:18:43.292 [DEBUG] [Thread-133206] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:18:43.293 [DEBUG] [Thread-133206] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:18:43.293 [DEBUG] [Thread-133206] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T19:18:43.293 [DEBUG] [Thread-133206] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:18:43.311 [INFO] [Thread-133206] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:18:43.312 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T19:18:43.312 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:18:44.155 [DEBUG] [Thread-133206] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:18:44.155 [DEBUG] [Thread-133206] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:18:44.203 [DEBUG] [Thread-133206] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:18:44.203 [DEBUG] [Thread-133206] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:18:44.212 [DEBUG] [Thread-133206] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:18:44.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:18:44.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T19:18:44.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T19:18:44.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:18:44.241 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:18:44.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:18:44.249 [DEBUG] [Thread-133206] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:18:48.774 [DEBUG] [Thread-133208 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:19:03.821 [DEBUG] [Thread-133209 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:19:14.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T19:19:14.261 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T19:19:14.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T19:19:14.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 19, 19, 10), 16.35, 34.5, 0.0, 15.51, 21.93, 0, 0, 0, 2, 0, 0),)
2025-12-31T19:19:14.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 19:19:10
2025-12-31T19:19:15.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T19:19:15.268 [DEBUG] [Thread-133210] [transport.py] [_log()] starting thread (client mode): 0xb1764520
2025-12-31T19:19:15.268 [DEBUG] [Thread-133210] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:19:15.288 [DEBUG] [Thread-133210] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T19:19:15.288 [INFO] [Thread-133210] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T19:19:15.291 [DEBUG] [Thread-133210] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:19:15.291 [DEBUG] [Thread-133210] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T19:19:15.291 [DEBUG] [Thread-133210] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:19:15.291 [DEBUG] [Thread-133210] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:19:15.291 [DEBUG] [Thread-133210] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:19:15.291 [DEBUG] [Thread-133210] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:19:15.292 [DEBUG] [Thread-133210] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:19:15.292 [DEBUG] [Thread-133210] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:19:15.292 [DEBUG] [Thread-133210] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:19:15.292 [DEBUG] [Thread-133210] [transport.py] [_log()] client lang: <none>
2025-12-31T19:19:15.292 [DEBUG] [Thread-133210] [transport.py] [_log()] server lang: <none>
2025-12-31T19:19:15.292 [DEBUG] [Thread-133210] [transport.py] [_log()] kex follows: False
2025-12-31T19:19:15.292 [DEBUG] [Thread-133210] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:19:15.292 [DEBUG] [Thread-133210] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:19:15.292 [DEBUG] [Thread-133210] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:19:15.292 [DEBUG] [Thread-133210] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:19:15.292 [DEBUG] [Thread-133210] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:19:15.292 [DEBUG] [Thread-133210] [transport.py] [_log()] Compression: none
2025-12-31T19:19:15.292 [DEBUG] [Thread-133210] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:19:15.311 [DEBUG] [Thread-133210] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:19:15.312 [DEBUG] [Thread-133210] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:19:15.313 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T19:19:15.313 [DEBUG] [Thread-133210] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T19:19:15.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:19:15.315 [DEBUG] [Thread-133210] [transport.py] [_log()] userauth is OK
2025-12-31T19:19:15.316 [DEBUG] [Thread-133210] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:19:15.316 [DEBUG] [Thread-133210] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:19:15.316 [DEBUG] [Thread-133210] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T19:19:15.316 [DEBUG] [Thread-133210] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:19:15.341 [INFO] [Thread-133210] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:19:15.342 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:19:15.961 [DEBUG] [Thread-133210] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:19:15.961 [DEBUG] [Thread-133210] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:19:15.962 [DEBUG] [Thread-133210] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T19:19:16.003 [DEBUG] [Thread-133210] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:19:16.003 [DEBUG] [Thread-133210] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:19:16.007 [DEBUG] [Thread-133210] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:19:16.018 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:19:16.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T19:19:16.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T19:19:16.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T19:19:16.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:19:16.031 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T19:19:16.031 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:19:16.031 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:19:16.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T19:19:16.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.721320 -999.00  +22.10   5.65     39   +7.50 1 2 1 1 1   887    0 13.39 -55.24 ----- 6.5 5.7 252.4 17.8 23.4 -20.3 23.7 -19.4 23.9 -20.1 23.9 -21.6
2025-12-31T19:19:16.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T19:19:16.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T19:19:16.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.721320
2025-12-31T19:19:16.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T19:19:16.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T19:19:16.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T19:19:16.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T19:19:16.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T19:19:16.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T19:19:10', tmtdew=16.35, humidity=34.5, cloud=0.0, wind=15.51, temperature=21.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T17:18:42.048', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T19:19:16.034 [DEBUG] [Thread-133210] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:19:16.117 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T19:19:16.130 [DEBUG] [Thread-133213] [transport.py] [_log()] starting thread (client mode): 0xb175bd60
2025-12-31T19:19:16.130 [DEBUG] [Thread-133213] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:19:16.146 [DEBUG] [Thread-133213] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T19:19:16.147 [INFO] [Thread-133213] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T19:19:16.154 [DEBUG] [Thread-133213] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:19:16.154 [DEBUG] [Thread-133213] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T19:19:16.155 [DEBUG] [Thread-133213] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:19:16.155 [DEBUG] [Thread-133213] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:19:16.155 [DEBUG] [Thread-133213] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:19:16.155 [DEBUG] [Thread-133213] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:19:16.155 [DEBUG] [Thread-133213] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:19:16.155 [DEBUG] [Thread-133213] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:19:16.155 [DEBUG] [Thread-133213] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:19:16.155 [DEBUG] [Thread-133213] [transport.py] [_log()] client lang: <none>
2025-12-31T19:19:16.155 [DEBUG] [Thread-133213] [transport.py] [_log()] server lang: <none>
2025-12-31T19:19:16.155 [DEBUG] [Thread-133213] [transport.py] [_log()] kex follows: False
2025-12-31T19:19:16.155 [DEBUG] [Thread-133213] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:19:16.155 [DEBUG] [Thread-133213] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:19:16.155 [DEBUG] [Thread-133213] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:19:16.155 [DEBUG] [Thread-133213] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:19:16.155 [DEBUG] [Thread-133213] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:19:16.155 [DEBUG] [Thread-133213] [transport.py] [_log()] Compression: none
2025-12-31T19:19:16.156 [DEBUG] [Thread-133213] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:19:16.212 [DEBUG] [Thread-133213] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:19:16.213 [DEBUG] [Thread-133213] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:19:16.213 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T19:19:16.214 [DEBUG] [Thread-133213] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T19:19:16.215 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:19:16.268 [DEBUG] [Thread-133213] [transport.py] [_log()] userauth is OK
2025-12-31T19:19:16.269 [DEBUG] [Thread-133213] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:19:16.269 [DEBUG] [Thread-133213] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:19:16.269 [DEBUG] [Thread-133213] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T19:19:16.269 [DEBUG] [Thread-133213] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:19:16.288 [INFO] [Thread-133213] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:19:16.288 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T19:19:16.289 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:19:17.107 [DEBUG] [Thread-133213] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:19:17.108 [DEBUG] [Thread-133213] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:19:17.156 [DEBUG] [Thread-133213] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:19:17.156 [DEBUG] [Thread-133213] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:19:17.165 [DEBUG] [Thread-133213] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:19:17.174 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:19:17.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T19:19:17.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T19:19:17.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:19:17.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:19:17.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:19:17.199 [DEBUG] [Thread-133213] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:19:18.856 [DEBUG] [Thread-133215 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:19:33.312 [DEBUG] [Thread-133216 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:19:33.910 [DEBUG] [Thread-133217 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:19:40.276 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:19:40.276 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:19:47.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T19:19:47.222 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T19:19:47.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T19:19:47.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 19, 19, 42), 16.37, 34.46, 0.0, 15.92, 21.99, 0, 0, 0, 2, 0, 0),)
2025-12-31T19:19:47.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 19:19:42
2025-12-31T19:19:48.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T19:19:48.202 [DEBUG] [Thread-133218] [transport.py] [_log()] starting thread (client mode): 0xb6bbad70
2025-12-31T19:19:48.203 [DEBUG] [Thread-133218] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:19:48.223 [DEBUG] [Thread-133218] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T19:19:48.223 [INFO] [Thread-133218] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T19:19:48.224 [DEBUG] [Thread-133218] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:19:48.225 [DEBUG] [Thread-133218] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T19:19:48.225 [DEBUG] [Thread-133218] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:19:48.225 [DEBUG] [Thread-133218] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:19:48.225 [DEBUG] [Thread-133218] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:19:48.225 [DEBUG] [Thread-133218] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:19:48.225 [DEBUG] [Thread-133218] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:19:48.225 [DEBUG] [Thread-133218] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:19:48.225 [DEBUG] [Thread-133218] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:19:48.225 [DEBUG] [Thread-133218] [transport.py] [_log()] client lang: <none>
2025-12-31T19:19:48.225 [DEBUG] [Thread-133218] [transport.py] [_log()] server lang: <none>
2025-12-31T19:19:48.225 [DEBUG] [Thread-133218] [transport.py] [_log()] kex follows: False
2025-12-31T19:19:48.225 [DEBUG] [Thread-133218] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:19:48.225 [DEBUG] [Thread-133218] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:19:48.225 [DEBUG] [Thread-133218] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:19:48.225 [DEBUG] [Thread-133218] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:19:48.225 [DEBUG] [Thread-133218] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:19:48.225 [DEBUG] [Thread-133218] [transport.py] [_log()] Compression: none
2025-12-31T19:19:48.225 [DEBUG] [Thread-133218] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:19:48.238 [DEBUG] [Thread-133218] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:19:48.238 [DEBUG] [Thread-133218] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:19:48.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T19:19:48.239 [DEBUG] [Thread-133218] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T19:19:48.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:19:48.241 [DEBUG] [Thread-133218] [transport.py] [_log()] userauth is OK
2025-12-31T19:19:48.241 [DEBUG] [Thread-133218] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:19:48.241 [DEBUG] [Thread-133218] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:19:48.241 [DEBUG] [Thread-133218] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T19:19:48.241 [DEBUG] [Thread-133218] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:19:48.265 [INFO] [Thread-133218] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:19:48.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:19:48.939 [DEBUG] [Thread-133220 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:19:49.107 [DEBUG] [Thread-133218] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:19:49.107 [DEBUG] [Thread-133218] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:19:49.108 [DEBUG] [Thread-133218] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T19:19:49.148 [DEBUG] [Thread-133218] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:19:49.148 [DEBUG] [Thread-133218] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:19:49.151 [DEBUG] [Thread-133218] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:19:49.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:19:49.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T19:19:49.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T19:19:49.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T19:19:49.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:19:49.176 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T19:19:49.176 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:19:49.176 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:19:49.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T19:19:49.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.721667 -999.00  +22.10   9.04     39   +7.50 1 2 1 1 1   887    0 13.29 -51.76 ----- 8.3 9.0 216.7 12.5 23.4 -20.2 23.7 -19.7 23.9 -20.1 24.0 -21.4
2025-12-31T19:19:49.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T19:19:49.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T19:19:49.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.721667
2025-12-31T19:19:49.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T19:19:49.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T19:19:49.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T19:19:49.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T19:19:49.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T19:19:49.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T19:19:42', tmtdew=16.37, humidity=34.46, cloud=0.0, wind=15.92, temperature=21.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T17:19:12.029', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T19:19:49.179 [DEBUG] [Thread-133218] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:19:49.262 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T19:19:49.274 [DEBUG] [Thread-133222] [transport.py] [_log()] starting thread (client mode): 0xb95d6260
2025-12-31T19:19:49.274 [DEBUG] [Thread-133222] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:19:49.293 [DEBUG] [Thread-133222] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T19:19:49.294 [INFO] [Thread-133222] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T19:19:49.301 [DEBUG] [Thread-133222] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:19:49.302 [DEBUG] [Thread-133222] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T19:19:49.302 [DEBUG] [Thread-133222] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:19:49.302 [DEBUG] [Thread-133222] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:19:49.302 [DEBUG] [Thread-133222] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:19:49.302 [DEBUG] [Thread-133222] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:19:49.303 [DEBUG] [Thread-133222] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:19:49.303 [DEBUG] [Thread-133222] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:19:49.303 [DEBUG] [Thread-133222] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:19:49.303 [DEBUG] [Thread-133222] [transport.py] [_log()] client lang: <none>
2025-12-31T19:19:49.303 [DEBUG] [Thread-133222] [transport.py] [_log()] server lang: <none>
2025-12-31T19:19:49.303 [DEBUG] [Thread-133222] [transport.py] [_log()] kex follows: False
2025-12-31T19:19:49.303 [DEBUG] [Thread-133222] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:19:49.303 [DEBUG] [Thread-133222] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:19:49.303 [DEBUG] [Thread-133222] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:19:49.303 [DEBUG] [Thread-133222] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:19:49.303 [DEBUG] [Thread-133222] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:19:49.303 [DEBUG] [Thread-133222] [transport.py] [_log()] Compression: none
2025-12-31T19:19:49.303 [DEBUG] [Thread-133222] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:19:49.361 [DEBUG] [Thread-133222] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:19:49.361 [DEBUG] [Thread-133222] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:19:49.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T19:19:49.362 [DEBUG] [Thread-133222] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T19:19:49.363 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:19:49.420 [DEBUG] [Thread-133222] [transport.py] [_log()] userauth is OK
2025-12-31T19:19:49.421 [DEBUG] [Thread-133222] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:19:49.430 [DEBUG] [Thread-133222] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:19:49.430 [DEBUG] [Thread-133222] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T19:19:49.430 [DEBUG] [Thread-133222] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:19:49.450 [INFO] [Thread-133222] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:19:49.450 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T19:19:49.451 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:19:50.327 [DEBUG] [Thread-133222] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:19:50.327 [DEBUG] [Thread-133222] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:19:50.375 [DEBUG] [Thread-133222] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:19:50.375 [DEBUG] [Thread-133222] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:19:50.384 [DEBUG] [Thread-133222] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:19:50.393 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:19:50.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-12-31T19:19:50.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T19:19:50.411 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:19:50.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:19:50.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:19:50.419 [DEBUG] [Thread-133222] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:20:03.974 [DEBUG] [Thread-133224 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:20:19.020 [DEBUG] [Thread-133225 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:20:20.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T19:20:20.442 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T19:20:20.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-12-31T19:20:21.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 19, 20, 14), 16.41, 34.37, 0.0, 18.32, 21.98, 0, 0, 0, 2, 0, 0),)
2025-12-31T19:20:21.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 19:20:14
2025-12-31T19:20:21.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T19:20:21.424 [DEBUG] [Thread-133226] [transport.py] [_log()] starting thread (client mode): 0xb6b63af0
2025-12-31T19:20:21.424 [DEBUG] [Thread-133226] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:20:21.439 [DEBUG] [Thread-133226] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T19:20:21.439 [INFO] [Thread-133226] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T19:20:21.442 [DEBUG] [Thread-133226] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:20:21.442 [DEBUG] [Thread-133226] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T19:20:21.442 [DEBUG] [Thread-133226] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:20:21.442 [DEBUG] [Thread-133226] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:20:21.442 [DEBUG] [Thread-133226] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:20:21.442 [DEBUG] [Thread-133226] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:20:21.442 [DEBUG] [Thread-133226] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:20:21.442 [DEBUG] [Thread-133226] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:20:21.442 [DEBUG] [Thread-133226] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:20:21.442 [DEBUG] [Thread-133226] [transport.py] [_log()] client lang: <none>
2025-12-31T19:20:21.442 [DEBUG] [Thread-133226] [transport.py] [_log()] server lang: <none>
2025-12-31T19:20:21.442 [DEBUG] [Thread-133226] [transport.py] [_log()] kex follows: False
2025-12-31T19:20:21.442 [DEBUG] [Thread-133226] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:20:21.442 [DEBUG] [Thread-133226] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:20:21.442 [DEBUG] [Thread-133226] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:20:21.442 [DEBUG] [Thread-133226] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:20:21.442 [DEBUG] [Thread-133226] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:20:21.442 [DEBUG] [Thread-133226] [transport.py] [_log()] Compression: none
2025-12-31T19:20:21.442 [DEBUG] [Thread-133226] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:20:21.459 [DEBUG] [Thread-133226] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:20:21.460 [DEBUG] [Thread-133226] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:20:21.460 [DEBUG] [Thread-133226] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T19:20:21.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T19:20:21.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:20:21.462 [DEBUG] [Thread-133226] [transport.py] [_log()] userauth is OK
2025-12-31T19:20:21.462 [DEBUG] [Thread-133226] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:20:21.462 [DEBUG] [Thread-133226] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:20:21.462 [DEBUG] [Thread-133226] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T19:20:21.463 [DEBUG] [Thread-133226] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:20:21.488 [INFO] [Thread-133226] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:20:21.489 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:20:25.335 [DEBUG] [Thread-133226] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:20:25.335 [DEBUG] [Thread-133226] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:20:25.336 [DEBUG] [Thread-133226] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T19:20:25.376 [DEBUG] [Thread-133226] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:20:25.376 [DEBUG] [Thread-133226] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:20:25.380 [DEBUG] [Thread-133226] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:20:25.393 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:20:25.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T19:20:25.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T19:20:25.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T19:20:25.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:20:25.404 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T19:20:25.404 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:20:25.404 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:20:25.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T19:20:25.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.722014 -999.00  +22.10  13.87     39   +7.60 1 2 1 1 1   887    0 13.23 -53.72 ----- 16.1 13.9 250.8 15.9 23.5 -20.5 23.7 -19.7 23.9 -20.0 24.0 -21.4
2025-12-31T19:20:25.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T19:20:25.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T19:20:25.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.722014
2025-12-31T19:20:25.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T19:20:25.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T19:20:25.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T19:20:25.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T19:20:25.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T19:20:25.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T19:20:14', tmtdew=16.41, humidity=34.37, cloud=0.0, wind=18.32, temperature=21.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T17:19:42.010', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T19:20:25.408 [DEBUG] [Thread-133226] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:20:25.488 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T19:20:25.499 [DEBUG] [Thread-133229] [transport.py] [_log()] starting thread (client mode): 0xb6b639a0
2025-12-31T19:20:25.499 [DEBUG] [Thread-133229] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:20:25.514 [DEBUG] [Thread-133229] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T19:20:25.514 [INFO] [Thread-133229] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T19:20:25.521 [DEBUG] [Thread-133229] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:20:25.521 [DEBUG] [Thread-133229] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T19:20:25.521 [DEBUG] [Thread-133229] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:20:25.522 [DEBUG] [Thread-133229] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:20:25.522 [DEBUG] [Thread-133229] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:20:25.522 [DEBUG] [Thread-133229] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:20:25.522 [DEBUG] [Thread-133229] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:20:25.522 [DEBUG] [Thread-133229] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:20:25.522 [DEBUG] [Thread-133229] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:20:25.522 [DEBUG] [Thread-133229] [transport.py] [_log()] client lang: <none>
2025-12-31T19:20:25.522 [DEBUG] [Thread-133229] [transport.py] [_log()] server lang: <none>
2025-12-31T19:20:25.523 [DEBUG] [Thread-133229] [transport.py] [_log()] kex follows: False
2025-12-31T19:20:25.523 [DEBUG] [Thread-133229] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:20:25.523 [DEBUG] [Thread-133229] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:20:25.523 [DEBUG] [Thread-133229] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:20:25.523 [DEBUG] [Thread-133229] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:20:25.523 [DEBUG] [Thread-133229] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:20:25.523 [DEBUG] [Thread-133229] [transport.py] [_log()] Compression: none
2025-12-31T19:20:25.523 [DEBUG] [Thread-133229] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:20:25.579 [DEBUG] [Thread-133229] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:20:25.579 [DEBUG] [Thread-133229] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:20:25.579 [DEBUG] [Thread-133229] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T19:20:25.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T19:20:25.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:20:25.635 [DEBUG] [Thread-133229] [transport.py] [_log()] userauth is OK
2025-12-31T19:20:25.636 [DEBUG] [Thread-133229] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:20:25.636 [DEBUG] [Thread-133229] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:20:25.636 [DEBUG] [Thread-133229] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T19:20:25.636 [DEBUG] [Thread-133229] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:20:25.654 [INFO] [Thread-133229] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:20:25.654 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T19:20:25.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:20:26.482 [DEBUG] [Thread-133229] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:20:26.482 [DEBUG] [Thread-133229] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:20:26.530 [DEBUG] [Thread-133229] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:20:26.530 [DEBUG] [Thread-133229] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:20:26.540 [DEBUG] [Thread-133229] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:20:26.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:20:26.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T19:20:26.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T19:20:26.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:20:26.568 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:20:26.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:20:26.576 [DEBUG] [Thread-133229] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:20:33.364 [DEBUG] [Thread-133231 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:20:34.057 [DEBUG] [Thread-133232 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:20:40.415 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:20:40.416 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:20:49.123 [DEBUG] [Thread-133233 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:20:56.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T19:20:56.599 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T19:20:56.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T19:20:57.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 19, 20, 46), 16.35, 34.41, 0.0, 14.35, 22.03, 0, 0, 0, 2, 0, 0),)
2025-12-31T19:20:57.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 19:20:46
2025-12-31T19:20:57.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T19:20:57.616 [DEBUG] [Thread-133234] [transport.py] [_log()] starting thread (client mode): 0xb1764700
2025-12-31T19:20:57.616 [DEBUG] [Thread-133234] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:20:57.633 [DEBUG] [Thread-133234] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T19:20:57.633 [INFO] [Thread-133234] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T19:20:57.636 [DEBUG] [Thread-133234] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:20:57.636 [DEBUG] [Thread-133234] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T19:20:57.636 [DEBUG] [Thread-133234] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:20:57.636 [DEBUG] [Thread-133234] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:20:57.636 [DEBUG] [Thread-133234] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:20:57.636 [DEBUG] [Thread-133234] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:20:57.637 [DEBUG] [Thread-133234] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:20:57.637 [DEBUG] [Thread-133234] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:20:57.637 [DEBUG] [Thread-133234] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:20:57.637 [DEBUG] [Thread-133234] [transport.py] [_log()] client lang: <none>
2025-12-31T19:20:57.637 [DEBUG] [Thread-133234] [transport.py] [_log()] server lang: <none>
2025-12-31T19:20:57.637 [DEBUG] [Thread-133234] [transport.py] [_log()] kex follows: False
2025-12-31T19:20:57.637 [DEBUG] [Thread-133234] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:20:57.637 [DEBUG] [Thread-133234] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:20:57.637 [DEBUG] [Thread-133234] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:20:57.637 [DEBUG] [Thread-133234] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:20:57.637 [DEBUG] [Thread-133234] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:20:57.637 [DEBUG] [Thread-133234] [transport.py] [_log()] Compression: none
2025-12-31T19:20:57.637 [DEBUG] [Thread-133234] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:20:57.654 [DEBUG] [Thread-133234] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:20:57.655 [DEBUG] [Thread-133234] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:20:57.655 [DEBUG] [Thread-133234] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T19:20:57.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T19:20:57.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:20:57.656 [DEBUG] [Thread-133234] [transport.py] [_log()] userauth is OK
2025-12-31T19:20:57.656 [DEBUG] [Thread-133234] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:20:57.656 [DEBUG] [Thread-133234] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:20:57.656 [DEBUG] [Thread-133234] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T19:20:57.656 [DEBUG] [Thread-133234] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:20:57.666 [INFO] [Thread-133234] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:20:57.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:20:58.261 [DEBUG] [Thread-133234] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:20:58.261 [DEBUG] [Thread-133234] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:20:58.261 [DEBUG] [Thread-133234] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T19:20:58.302 [DEBUG] [Thread-133234] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:20:58.302 [DEBUG] [Thread-133234] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:20:58.305 [DEBUG] [Thread-133234] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:20:58.316 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:20:58.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T19:20:58.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T19:20:58.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T19:20:58.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:20:58.326 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T19:20:58.326 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:20:58.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:20:58.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T19:20:58.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.722361 -999.00  +22.10   7.93     39   +7.60 1 2 1 1 1   887    0 12.95 -58.84 ----- 4.6 7.9 200.5 14.4 23.5 -20.2 23.7 -19.4 23.9 -20.1 24.0 -21.4
2025-12-31T19:20:58.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T19:20:58.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T19:20:58.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.722361
2025-12-31T19:20:58.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T19:20:58.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T19:20:58.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T19:20:58.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T19:20:58.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T19:20:58.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T19:20:46', tmtdew=16.35, humidity=34.41, cloud=0.0, wind=14.35, temperature=22.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T17:20:11.990', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T19:20:58.329 [DEBUG] [Thread-133234] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:20:58.414 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T19:20:58.427 [DEBUG] [Thread-133237] [transport.py] [_log()] starting thread (client mode): 0xb957b5e0
2025-12-31T19:20:58.427 [DEBUG] [Thread-133237] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:20:58.441 [DEBUG] [Thread-133237] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T19:20:58.441 [INFO] [Thread-133237] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T19:20:58.449 [DEBUG] [Thread-133237] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:20:58.449 [DEBUG] [Thread-133237] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T19:20:58.449 [DEBUG] [Thread-133237] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:20:58.449 [DEBUG] [Thread-133237] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:20:58.449 [DEBUG] [Thread-133237] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:20:58.450 [DEBUG] [Thread-133237] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:20:58.450 [DEBUG] [Thread-133237] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:20:58.450 [DEBUG] [Thread-133237] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:20:58.450 [DEBUG] [Thread-133237] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:20:58.450 [DEBUG] [Thread-133237] [transport.py] [_log()] client lang: <none>
2025-12-31T19:20:58.450 [DEBUG] [Thread-133237] [transport.py] [_log()] server lang: <none>
2025-12-31T19:20:58.450 [DEBUG] [Thread-133237] [transport.py] [_log()] kex follows: False
2025-12-31T19:20:58.450 [DEBUG] [Thread-133237] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:20:58.451 [DEBUG] [Thread-133237] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:20:58.451 [DEBUG] [Thread-133237] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:20:58.451 [DEBUG] [Thread-133237] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:20:58.451 [DEBUG] [Thread-133237] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:20:58.451 [DEBUG] [Thread-133237] [transport.py] [_log()] Compression: none
2025-12-31T19:20:58.451 [DEBUG] [Thread-133237] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:20:58.509 [DEBUG] [Thread-133237] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:20:58.509 [DEBUG] [Thread-133237] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:20:58.510 [DEBUG] [Thread-133237] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T19:20:58.510 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T19:20:58.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:20:58.568 [DEBUG] [Thread-133237] [transport.py] [_log()] userauth is OK
2025-12-31T19:20:58.568 [DEBUG] [Thread-133237] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:20:58.568 [DEBUG] [Thread-133237] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:20:58.568 [DEBUG] [Thread-133237] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T19:20:58.568 [DEBUG] [Thread-133237] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:20:58.589 [INFO] [Thread-133237] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:20:58.589 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T19:20:58.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:20:59.419 [DEBUG] [Thread-133237] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:20:59.419 [DEBUG] [Thread-133237] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:20:59.467 [DEBUG] [Thread-133237] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:20:59.467 [DEBUG] [Thread-133237] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:20:59.477 [DEBUG] [Thread-133237] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:20:59.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:20:59.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-12-31T19:20:59.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T19:20:59.505 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:20:59.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:20:59.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:20:59.513 [DEBUG] [Thread-133237] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:21:04.158 [DEBUG] [Thread-133239 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:21:19.209 [DEBUG] [Thread-133240 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:21:29.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T19:21:29.536 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T19:21:29.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T19:21:30.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 19, 21, 18), 16.31, 34.47, 0.0, 14.82, 21.98, 0, 0, 0, 2, 0, 0),)
2025-12-31T19:21:30.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 19:21:18
2025-12-31T19:21:30.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T19:21:30.508 [DEBUG] [Thread-133241] [transport.py] [_log()] starting thread (client mode): 0xb175b850
2025-12-31T19:21:30.508 [DEBUG] [Thread-133241] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:21:30.529 [DEBUG] [Thread-133241] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T19:21:30.529 [INFO] [Thread-133241] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T19:21:30.532 [DEBUG] [Thread-133241] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:21:30.532 [DEBUG] [Thread-133241] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T19:21:30.532 [DEBUG] [Thread-133241] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:21:30.533 [DEBUG] [Thread-133241] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:21:30.533 [DEBUG] [Thread-133241] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:21:30.533 [DEBUG] [Thread-133241] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:21:30.533 [DEBUG] [Thread-133241] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:21:30.533 [DEBUG] [Thread-133241] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:21:30.533 [DEBUG] [Thread-133241] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:21:30.533 [DEBUG] [Thread-133241] [transport.py] [_log()] client lang: <none>
2025-12-31T19:21:30.533 [DEBUG] [Thread-133241] [transport.py] [_log()] server lang: <none>
2025-12-31T19:21:30.533 [DEBUG] [Thread-133241] [transport.py] [_log()] kex follows: False
2025-12-31T19:21:30.533 [DEBUG] [Thread-133241] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:21:30.533 [DEBUG] [Thread-133241] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:21:30.533 [DEBUG] [Thread-133241] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:21:30.533 [DEBUG] [Thread-133241] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:21:30.533 [DEBUG] [Thread-133241] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:21:30.534 [DEBUG] [Thread-133241] [transport.py] [_log()] Compression: none
2025-12-31T19:21:30.534 [DEBUG] [Thread-133241] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:21:30.552 [DEBUG] [Thread-133241] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:21:30.552 [DEBUG] [Thread-133241] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:21:30.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T19:21:30.554 [DEBUG] [Thread-133241] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T19:21:30.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:21:30.556 [DEBUG] [Thread-133241] [transport.py] [_log()] userauth is OK
2025-12-31T19:21:30.556 [DEBUG] [Thread-133241] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:21:30.557 [DEBUG] [Thread-133241] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:21:30.557 [DEBUG] [Thread-133241] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T19:21:30.557 [DEBUG] [Thread-133241] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:21:30.573 [INFO] [Thread-133241] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:21:30.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:21:31.300 [DEBUG] [Thread-133241] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:21:31.300 [DEBUG] [Thread-133241] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:21:31.301 [DEBUG] [Thread-133241] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T19:21:31.342 [DEBUG] [Thread-133241] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:21:31.342 [DEBUG] [Thread-133241] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:21:31.344 [DEBUG] [Thread-133241] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:21:31.351 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:21:31.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T19:21:31.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T19:21:31.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T19:21:31.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:21:31.356 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T19:21:31.356 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:21:31.356 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:21:31.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T19:21:31.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.722709 -999.00  +22.20   5.72     39   +7.60 1 2 1 1 1   887    0 12.72 -64.42 ----- 6.5 5.7 226.6 11.9 23.5 -20.0 23.7 -19.3 23.9 -19.7 24.0 -21.1
2025-12-31T19:21:31.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T19:21:31.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T19:21:31.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.722709
2025-12-31T19:21:31.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T19:21:31.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T19:21:31.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T19:21:31.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T19:21:31.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T19:21:31.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T19:21:18', tmtdew=16.31, humidity=34.47, cloud=0.0, wind=14.82, temperature=21.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T17:20:42.058', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T19:21:31.357 [DEBUG] [Thread-133241] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:21:31.432 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T19:21:31.443 [DEBUG] [Thread-133244] [transport.py] [_log()] starting thread (client mode): 0xb175b730
2025-12-31T19:21:31.443 [DEBUG] [Thread-133244] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:21:31.458 [DEBUG] [Thread-133244] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T19:21:31.458 [INFO] [Thread-133244] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T19:21:31.465 [DEBUG] [Thread-133244] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:21:31.465 [DEBUG] [Thread-133244] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T19:21:31.465 [DEBUG] [Thread-133244] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:21:31.465 [DEBUG] [Thread-133244] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:21:31.465 [DEBUG] [Thread-133244] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:21:31.465 [DEBUG] [Thread-133244] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:21:31.465 [DEBUG] [Thread-133244] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:21:31.465 [DEBUG] [Thread-133244] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:21:31.465 [DEBUG] [Thread-133244] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:21:31.465 [DEBUG] [Thread-133244] [transport.py] [_log()] client lang: <none>
2025-12-31T19:21:31.465 [DEBUG] [Thread-133244] [transport.py] [_log()] server lang: <none>
2025-12-31T19:21:31.466 [DEBUG] [Thread-133244] [transport.py] [_log()] kex follows: False
2025-12-31T19:21:31.466 [DEBUG] [Thread-133244] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:21:31.466 [DEBUG] [Thread-133244] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:21:31.466 [DEBUG] [Thread-133244] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:21:31.466 [DEBUG] [Thread-133244] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:21:31.466 [DEBUG] [Thread-133244] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:21:31.466 [DEBUG] [Thread-133244] [transport.py] [_log()] Compression: none
2025-12-31T19:21:31.466 [DEBUG] [Thread-133244] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:21:31.522 [DEBUG] [Thread-133244] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:21:31.522 [DEBUG] [Thread-133244] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:21:31.522 [DEBUG] [Thread-133244] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T19:21:31.522 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T19:21:31.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:21:31.579 [DEBUG] [Thread-133244] [transport.py] [_log()] userauth is OK
2025-12-31T19:21:31.579 [DEBUG] [Thread-133244] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:21:31.579 [DEBUG] [Thread-133244] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:21:31.579 [DEBUG] [Thread-133244] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T19:21:31.579 [DEBUG] [Thread-133244] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:21:31.595 [INFO] [Thread-133244] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:21:31.595 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T19:21:31.596 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:21:32.407 [DEBUG] [Thread-133244] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:21:32.407 [DEBUG] [Thread-133244] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:21:32.455 [DEBUG] [Thread-133244] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:21:32.455 [DEBUG] [Thread-133244] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:21:32.463 [DEBUG] [Thread-133244] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:21:32.471 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:21:32.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T19:21:32.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T19:21:32.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:21:32.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:21:32.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:21:32.495 [DEBUG] [Thread-133244] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:21:33.413 [DEBUG] [Thread-133246 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:21:34.241 [DEBUG] [Thread-133247 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:21:40.555 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:21:40.557 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:21:49.287 [DEBUG] [Thread-133248 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:22:02.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T19:22:02.518 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T19:22:02.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T19:22:03.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 19, 21, 50), 16.1, 35.22, 0.0, 16.41, 21.91, 0, 0, 0, 2, 0, 0),)
2025-12-31T19:22:03.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 19:21:50
2025-12-31T19:22:03.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T19:22:03.509 [DEBUG] [Thread-133249] [transport.py] [_log()] starting thread (client mode): 0xb95d4100
2025-12-31T19:22:03.509 [DEBUG] [Thread-133249] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:22:03.529 [DEBUG] [Thread-133249] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T19:22:03.529 [INFO] [Thread-133249] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T19:22:03.533 [DEBUG] [Thread-133249] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:22:03.533 [DEBUG] [Thread-133249] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T19:22:03.533 [DEBUG] [Thread-133249] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:22:03.533 [DEBUG] [Thread-133249] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:22:03.533 [DEBUG] [Thread-133249] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:22:03.533 [DEBUG] [Thread-133249] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:22:03.534 [DEBUG] [Thread-133249] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:22:03.534 [DEBUG] [Thread-133249] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:22:03.534 [DEBUG] [Thread-133249] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:22:03.534 [DEBUG] [Thread-133249] [transport.py] [_log()] client lang: <none>
2025-12-31T19:22:03.534 [DEBUG] [Thread-133249] [transport.py] [_log()] server lang: <none>
2025-12-31T19:22:03.534 [DEBUG] [Thread-133249] [transport.py] [_log()] kex follows: False
2025-12-31T19:22:03.534 [DEBUG] [Thread-133249] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:22:03.534 [DEBUG] [Thread-133249] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:22:03.534 [DEBUG] [Thread-133249] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:22:03.534 [DEBUG] [Thread-133249] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:22:03.534 [DEBUG] [Thread-133249] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:22:03.534 [DEBUG] [Thread-133249] [transport.py] [_log()] Compression: none
2025-12-31T19:22:03.534 [DEBUG] [Thread-133249] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:22:03.553 [DEBUG] [Thread-133249] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:22:03.554 [DEBUG] [Thread-133249] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:22:03.554 [DEBUG] [Thread-133249] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T19:22:03.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T19:22:03.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:22:03.556 [DEBUG] [Thread-133249] [transport.py] [_log()] userauth is OK
2025-12-31T19:22:03.556 [DEBUG] [Thread-133249] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:22:03.557 [DEBUG] [Thread-133249] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:22:03.557 [DEBUG] [Thread-133249] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T19:22:03.557 [DEBUG] [Thread-133249] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:22:03.574 [INFO] [Thread-133249] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:22:03.576 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:22:04.238 [DEBUG] [Thread-133249] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:22:04.238 [DEBUG] [Thread-133249] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:22:04.238 [DEBUG] [Thread-133249] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T19:22:04.279 [DEBUG] [Thread-133249] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:22:04.279 [DEBUG] [Thread-133249] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:22:04.281 [DEBUG] [Thread-133249] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:22:04.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:22:04.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T19:22:04.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T19:22:04.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T19:22:04.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:22:04.303 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T19:22:04.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:22:04.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:22:04.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T19:22:04.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.723056 -999.00  +22.20   4.65     39   +7.70 1 2 1 1 1   887    0 13.01 -67.67 ----- 6.2 4.7 217.2 15.7 23.6 -20.1 23.8 -19.0 23.9 -19.7 24.0 -21.2
2025-12-31T19:22:04.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T19:22:04.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T19:22:04.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.723056
2025-12-31T19:22:04.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T19:22:04.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T19:22:04.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T19:22:04.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T19:22:04.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T19:22:04.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T19:21:50', tmtdew=16.1, humidity=35.22, cloud=0.0, wind=16.41, temperature=21.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T17:21:12.038', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T19:22:04.306 [DEBUG] [Thread-133249] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:22:04.320 [DEBUG] [Thread-133252 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:22:04.391 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T19:22:04.402 [DEBUG] [Thread-133253] [transport.py] [_log()] starting thread (client mode): 0xb95f35b0
2025-12-31T19:22:04.402 [DEBUG] [Thread-133253] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:22:04.417 [DEBUG] [Thread-133253] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T19:22:04.417 [INFO] [Thread-133253] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T19:22:04.424 [DEBUG] [Thread-133253] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:22:04.425 [DEBUG] [Thread-133253] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T19:22:04.425 [DEBUG] [Thread-133253] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:22:04.425 [DEBUG] [Thread-133253] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:22:04.425 [DEBUG] [Thread-133253] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:22:04.425 [DEBUG] [Thread-133253] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:22:04.425 [DEBUG] [Thread-133253] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:22:04.425 [DEBUG] [Thread-133253] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:22:04.425 [DEBUG] [Thread-133253] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:22:04.425 [DEBUG] [Thread-133253] [transport.py] [_log()] client lang: <none>
2025-12-31T19:22:04.425 [DEBUG] [Thread-133253] [transport.py] [_log()] server lang: <none>
2025-12-31T19:22:04.425 [DEBUG] [Thread-133253] [transport.py] [_log()] kex follows: False
2025-12-31T19:22:04.425 [DEBUG] [Thread-133253] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:22:04.426 [DEBUG] [Thread-133253] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:22:04.426 [DEBUG] [Thread-133253] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:22:04.426 [DEBUG] [Thread-133253] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:22:04.426 [DEBUG] [Thread-133253] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:22:04.426 [DEBUG] [Thread-133253] [transport.py] [_log()] Compression: none
2025-12-31T19:22:04.426 [DEBUG] [Thread-133253] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:22:04.482 [DEBUG] [Thread-133253] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:22:04.483 [DEBUG] [Thread-133253] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:22:04.483 [DEBUG] [Thread-133253] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T19:22:04.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T19:22:04.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:22:04.540 [DEBUG] [Thread-133253] [transport.py] [_log()] userauth is OK
2025-12-31T19:22:04.540 [DEBUG] [Thread-133253] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:22:04.540 [DEBUG] [Thread-133253] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:22:04.540 [DEBUG] [Thread-133253] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T19:22:04.540 [DEBUG] [Thread-133253] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:22:04.559 [INFO] [Thread-133253] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:22:04.559 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T19:22:04.559 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:22:05.412 [DEBUG] [Thread-133253] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:22:05.412 [DEBUG] [Thread-133253] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:22:05.459 [DEBUG] [Thread-133253] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:22:05.459 [DEBUG] [Thread-133253] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:22:05.468 [DEBUG] [Thread-133253] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:22:05.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:22:05.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T19:22:05.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T19:22:05.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:22:05.492 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:22:05.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:22:05.500 [DEBUG] [Thread-133253] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:22:19.359 [DEBUG] [Thread-133255 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:22:33.467 [DEBUG] [Thread-133256 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:22:34.395 [DEBUG] [Thread-133257 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:22:35.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T19:22:35.522 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T19:22:35.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-12-31T19:22:36.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 19, 22, 22), 16.12, 35.19, 0.0, 16.18, 21.95, 0, 0, 0, 2, 0, 0),)
2025-12-31T19:22:36.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 19:22:22
2025-12-31T19:22:36.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T19:22:36.513 [DEBUG] [Thread-133258] [transport.py] [_log()] starting thread (client mode): 0xb95d5570
2025-12-31T19:22:36.513 [DEBUG] [Thread-133258] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:22:36.535 [DEBUG] [Thread-133258] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T19:22:36.535 [INFO] [Thread-133258] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T19:22:36.538 [DEBUG] [Thread-133258] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:22:36.538 [DEBUG] [Thread-133258] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T19:22:36.538 [DEBUG] [Thread-133258] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:22:36.538 [DEBUG] [Thread-133258] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:22:36.538 [DEBUG] [Thread-133258] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:22:36.538 [DEBUG] [Thread-133258] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:22:36.539 [DEBUG] [Thread-133258] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:22:36.539 [DEBUG] [Thread-133258] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:22:36.539 [DEBUG] [Thread-133258] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:22:36.539 [DEBUG] [Thread-133258] [transport.py] [_log()] client lang: <none>
2025-12-31T19:22:36.539 [DEBUG] [Thread-133258] [transport.py] [_log()] server lang: <none>
2025-12-31T19:22:36.539 [DEBUG] [Thread-133258] [transport.py] [_log()] kex follows: False
2025-12-31T19:22:36.539 [DEBUG] [Thread-133258] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:22:36.539 [DEBUG] [Thread-133258] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:22:36.539 [DEBUG] [Thread-133258] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:22:36.539 [DEBUG] [Thread-133258] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:22:36.539 [DEBUG] [Thread-133258] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:22:36.539 [DEBUG] [Thread-133258] [transport.py] [_log()] Compression: none
2025-12-31T19:22:36.539 [DEBUG] [Thread-133258] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:22:36.558 [DEBUG] [Thread-133258] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:22:36.559 [DEBUG] [Thread-133258] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:22:36.560 [DEBUG] [Thread-133258] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T19:22:36.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T19:22:36.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:22:36.562 [DEBUG] [Thread-133258] [transport.py] [_log()] userauth is OK
2025-12-31T19:22:36.563 [DEBUG] [Thread-133258] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:22:36.563 [DEBUG] [Thread-133258] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:22:36.563 [DEBUG] [Thread-133258] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T19:22:36.563 [DEBUG] [Thread-133258] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:22:36.586 [INFO] [Thread-133258] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:22:36.587 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:22:37.367 [DEBUG] [Thread-133258] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:22:37.368 [DEBUG] [Thread-133258] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:22:37.368 [DEBUG] [Thread-133258] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T19:22:37.408 [DEBUG] [Thread-133258] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:22:37.408 [DEBUG] [Thread-133258] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:22:37.414 [DEBUG] [Thread-133258] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:22:37.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:22:37.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T19:22:37.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T19:22:37.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T19:22:37.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:22:37.431 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T19:22:37.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:22:37.431 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:22:37.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T19:22:37.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.723403 -999.00  +22.20  11.59     39   +7.80 1 2 1 1 1   887    0 12.86 -72.34 ----- 9.6 11.6 239.2 18.2 23.6 -20.0 23.8 -19.4 23.9 -20.2 24.0 -21.3
2025-12-31T19:22:37.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T19:22:37.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T19:22:37.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.723403
2025-12-31T19:22:37.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T19:22:37.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T19:22:37.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T19:22:37.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T19:22:37.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T19:22:37.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T19:22:22', tmtdew=16.12, humidity=35.19, cloud=0.0, wind=16.18, temperature=21.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T17:21:42.019', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T19:22:37.434 [DEBUG] [Thread-133258] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:22:37.516 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T19:22:37.528 [DEBUG] [Thread-133261] [transport.py] [_log()] starting thread (client mode): 0xb6bbe530
2025-12-31T19:22:37.528 [DEBUG] [Thread-133261] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:22:37.548 [DEBUG] [Thread-133261] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T19:22:37.548 [INFO] [Thread-133261] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T19:22:37.556 [DEBUG] [Thread-133261] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:22:37.556 [DEBUG] [Thread-133261] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T19:22:37.556 [DEBUG] [Thread-133261] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:22:37.556 [DEBUG] [Thread-133261] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:22:37.556 [DEBUG] [Thread-133261] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:22:37.556 [DEBUG] [Thread-133261] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:22:37.556 [DEBUG] [Thread-133261] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:22:37.556 [DEBUG] [Thread-133261] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:22:37.556 [DEBUG] [Thread-133261] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:22:37.557 [DEBUG] [Thread-133261] [transport.py] [_log()] client lang: <none>
2025-12-31T19:22:37.557 [DEBUG] [Thread-133261] [transport.py] [_log()] server lang: <none>
2025-12-31T19:22:37.557 [DEBUG] [Thread-133261] [transport.py] [_log()] kex follows: False
2025-12-31T19:22:37.557 [DEBUG] [Thread-133261] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:22:37.557 [DEBUG] [Thread-133261] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:22:37.557 [DEBUG] [Thread-133261] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:22:37.557 [DEBUG] [Thread-133261] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:22:37.557 [DEBUG] [Thread-133261] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:22:37.557 [DEBUG] [Thread-133261] [transport.py] [_log()] Compression: none
2025-12-31T19:22:37.557 [DEBUG] [Thread-133261] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:22:37.616 [DEBUG] [Thread-133261] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:22:37.616 [DEBUG] [Thread-133261] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:22:37.617 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T19:22:37.617 [DEBUG] [Thread-133261] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T19:22:37.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:22:37.672 [DEBUG] [Thread-133261] [transport.py] [_log()] userauth is OK
2025-12-31T19:22:37.672 [DEBUG] [Thread-133261] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:22:37.672 [DEBUG] [Thread-133261] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:22:37.673 [DEBUG] [Thread-133261] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T19:22:37.673 [DEBUG] [Thread-133261] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:22:37.693 [INFO] [Thread-133261] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:22:37.693 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T19:22:37.694 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:22:38.526 [DEBUG] [Thread-133261] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:22:38.527 [DEBUG] [Thread-133261] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:22:38.575 [DEBUG] [Thread-133261] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:22:38.575 [DEBUG] [Thread-133261] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:22:38.585 [DEBUG] [Thread-133261] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:22:38.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:22:38.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T19:22: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') -> 00000000
2025-12-31T19:22:38.613 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:22:38.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:22:38.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:22:38.621 [DEBUG] [Thread-133261] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:22:40.697 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:22:40.698 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:22:49.433 [DEBUG] [Thread-133263 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:23:04.473 [DEBUG] [Thread-133264 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:23:08.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T19:23:08.629 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T19:23:08.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T19:23:09.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 19, 22, 54), 15.94, 35.37, 0.0, 16.69, 21.88, 0, 0, 0, 2, 0, 0),)
2025-12-31T19:23:09.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 19:22:54
2025-12-31T19:23:09.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T19:23:09.608 [DEBUG] [Thread-133265] [transport.py] [_log()] starting thread (client mode): 0xb1765e70
2025-12-31T19:23:09.608 [DEBUG] [Thread-133265] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:23:09.628 [DEBUG] [Thread-133265] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T19:23:09.628 [INFO] [Thread-133265] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T19:23:09.631 [DEBUG] [Thread-133265] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:23:09.631 [DEBUG] [Thread-133265] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T19:23:09.631 [DEBUG] [Thread-133265] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:23:09.631 [DEBUG] [Thread-133265] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:23:09.631 [DEBUG] [Thread-133265] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:23:09.632 [DEBUG] [Thread-133265] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:23:09.632 [DEBUG] [Thread-133265] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:23:09.632 [DEBUG] [Thread-133265] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:23:09.632 [DEBUG] [Thread-133265] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:23:09.632 [DEBUG] [Thread-133265] [transport.py] [_log()] client lang: <none>
2025-12-31T19:23:09.632 [DEBUG] [Thread-133265] [transport.py] [_log()] server lang: <none>
2025-12-31T19:23:09.632 [DEBUG] [Thread-133265] [transport.py] [_log()] kex follows: False
2025-12-31T19:23:09.632 [DEBUG] [Thread-133265] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:23:09.632 [DEBUG] [Thread-133265] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:23:09.632 [DEBUG] [Thread-133265] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:23:09.632 [DEBUG] [Thread-133265] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:23:09.632 [DEBUG] [Thread-133265] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:23:09.632 [DEBUG] [Thread-133265] [transport.py] [_log()] Compression: none
2025-12-31T19:23:09.632 [DEBUG] [Thread-133265] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:23:09.649 [DEBUG] [Thread-133265] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:23:09.649 [DEBUG] [Thread-133265] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:23:09.650 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T19:23:09.650 [DEBUG] [Thread-133265] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T19:23:09.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:23:09.652 [DEBUG] [Thread-133265] [transport.py] [_log()] userauth is OK
2025-12-31T19:23:09.652 [DEBUG] [Thread-133265] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:23:09.652 [DEBUG] [Thread-133265] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:23:09.652 [DEBUG] [Thread-133265] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T19:23:09.652 [DEBUG] [Thread-133265] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:23:09.676 [INFO] [Thread-133265] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:23:09.677 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:23:10.315 [DEBUG] [Thread-133265] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:23:10.315 [DEBUG] [Thread-133265] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:23:10.316 [DEBUG] [Thread-133265] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T19:23:10.356 [DEBUG] [Thread-133265] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:23:10.356 [DEBUG] [Thread-133265] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:23:10.359 [DEBUG] [Thread-133265] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:23:10.370 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:23:10.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T19:23:10.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T19:23:10.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T19:23:10.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:23:10.381 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T19:23:10.381 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:23:10.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:23:10.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T19:23:10.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.723750 -999.00  +22.20   7.11     39   +7.80 1 2 1 1 1   887    0 12.24 -76.20 ----- 9.6 7.1 242.6 14.7 23.6 -20.2 23.8 -19.0 23.9 -19.6 24.1 -21.3
2025-12-31T19:23:10.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T19:23:10.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T19:23:10.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.723750
2025-12-31T19:23:10.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T19:23:10.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T19:23:10.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T19:23:10.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T19:23:10.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T19:23:10.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T19:22:54', tmtdew=15.94, humidity=35.37, cloud=0.0, wind=16.69, temperature=21.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T17:22:12.000', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T19:23:10.383 [DEBUG] [Thread-133265] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:23:10.466 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T19:23:10.478 [DEBUG] [Thread-133268] [transport.py] [_log()] starting thread (client mode): 0xb6bbb1c0
2025-12-31T19:23:10.478 [DEBUG] [Thread-133268] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:23:10.493 [DEBUG] [Thread-133268] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T19:23:10.493 [INFO] [Thread-133268] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T19:23:10.501 [DEBUG] [Thread-133268] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:23:10.501 [DEBUG] [Thread-133268] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T19:23:10.501 [DEBUG] [Thread-133268] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:23:10.501 [DEBUG] [Thread-133268] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:23:10.502 [DEBUG] [Thread-133268] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:23:10.502 [DEBUG] [Thread-133268] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:23:10.502 [DEBUG] [Thread-133268] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:23:10.502 [DEBUG] [Thread-133268] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:23:10.502 [DEBUG] [Thread-133268] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:23:10.502 [DEBUG] [Thread-133268] [transport.py] [_log()] client lang: <none>
2025-12-31T19:23:10.502 [DEBUG] [Thread-133268] [transport.py] [_log()] server lang: <none>
2025-12-31T19:23:10.502 [DEBUG] [Thread-133268] [transport.py] [_log()] kex follows: False
2025-12-31T19:23:10.502 [DEBUG] [Thread-133268] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:23:10.502 [DEBUG] [Thread-133268] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:23:10.502 [DEBUG] [Thread-133268] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:23:10.502 [DEBUG] [Thread-133268] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:23:10.502 [DEBUG] [Thread-133268] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:23:10.502 [DEBUG] [Thread-133268] [transport.py] [_log()] Compression: none
2025-12-31T19:23:10.502 [DEBUG] [Thread-133268] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:23:10.564 [DEBUG] [Thread-133268] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:23:10.565 [DEBUG] [Thread-133268] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:23:10.565 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T19:23:10.566 [DEBUG] [Thread-133268] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T19:23:10.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:23:10.620 [DEBUG] [Thread-133268] [transport.py] [_log()] userauth is OK
2025-12-31T19:23:10.620 [DEBUG] [Thread-133268] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:23:10.620 [DEBUG] [Thread-133268] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:23:10.620 [DEBUG] [Thread-133268] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T19:23:10.620 [DEBUG] [Thread-133268] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:23:10.639 [INFO] [Thread-133268] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:23:10.640 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T19:23:10.640 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:23:11.467 [DEBUG] [Thread-133268] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:23:11.467 [DEBUG] [Thread-133268] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:23:11.515 [DEBUG] [Thread-133268] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:23:11.516 [DEBUG] [Thread-133268] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:23:11.526 [DEBUG] [Thread-133268] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:23:11.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:23:11.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T19:23: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-12-31T19:23:11.553 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:23:11.553 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:23:11.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:23:11.562 [DEBUG] [Thread-133268] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:23:19.511 [DEBUG] [Thread-133270 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:23:33.521 [DEBUG] [Thread-133271 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:23:34.560 [DEBUG] [Thread-133272 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:23:40.838 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:23:40.839 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:23:41.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T19:23:41.584 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T19:23:41.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T19:23:42.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 19, 23, 26), 15.9, 35.48, 0.0, 13.41, 21.91, 0, 0, 0, 2, 0, 0),)
2025-12-31T19:23:42.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 19:23:26
2025-12-31T19:23:42.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T19:23:42.559 [DEBUG] [Thread-133273] [transport.py] [_log()] starting thread (client mode): 0xb1765ff0
2025-12-31T19:23:42.559 [DEBUG] [Thread-133273] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:23:42.581 [DEBUG] [Thread-133273] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T19:23:42.581 [INFO] [Thread-133273] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T19:23:42.584 [DEBUG] [Thread-133273] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:23:42.585 [DEBUG] [Thread-133273] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T19:23:42.585 [DEBUG] [Thread-133273] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:23:42.585 [DEBUG] [Thread-133273] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:23:42.585 [DEBUG] [Thread-133273] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:23:42.585 [DEBUG] [Thread-133273] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:23:42.585 [DEBUG] [Thread-133273] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:23:42.585 [DEBUG] [Thread-133273] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:23:42.585 [DEBUG] [Thread-133273] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:23:42.585 [DEBUG] [Thread-133273] [transport.py] [_log()] client lang: <none>
2025-12-31T19:23:42.585 [DEBUG] [Thread-133273] [transport.py] [_log()] server lang: <none>
2025-12-31T19:23:42.585 [DEBUG] [Thread-133273] [transport.py] [_log()] kex follows: False
2025-12-31T19:23:42.586 [DEBUG] [Thread-133273] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:23:42.586 [DEBUG] [Thread-133273] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:23:42.586 [DEBUG] [Thread-133273] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:23:42.586 [DEBUG] [Thread-133273] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:23:42.586 [DEBUG] [Thread-133273] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:23:42.586 [DEBUG] [Thread-133273] [transport.py] [_log()] Compression: none
2025-12-31T19:23:42.586 [DEBUG] [Thread-133273] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:23:42.603 [DEBUG] [Thread-133273] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:23:42.604 [DEBUG] [Thread-133273] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:23:42.604 [DEBUG] [Thread-133273] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T19:23:42.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T19:23:42.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:23:42.606 [DEBUG] [Thread-133273] [transport.py] [_log()] userauth is OK
2025-12-31T19:23:42.606 [DEBUG] [Thread-133273] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:23:42.607 [DEBUG] [Thread-133273] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:23:42.607 [DEBUG] [Thread-133273] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T19:23:42.607 [DEBUG] [Thread-133273] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:23:42.643 [INFO] [Thread-133273] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:23:42.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:23:43.383 [DEBUG] [Thread-133273] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:23:43.384 [DEBUG] [Thread-133273] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:23:43.384 [DEBUG] [Thread-133273] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T19:23:43.425 [DEBUG] [Thread-133273] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:23:43.425 [DEBUG] [Thread-133273] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:23:43.429 [DEBUG] [Thread-133273] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:23:43.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:23:43.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T19:23:43.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T19:23:43.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T19:23:43.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:23:43.466 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T19:23:43.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:23:43.467 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:23:43.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T19:23:43.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.724098 -999.00  +22.10  10.40     40   +7.90 1 2 1 1 1   887    0 12.42 -76.16 ----- 8.4 10.4 213.1 15.6 23.6 -19.8 23.8 -19.0 23.9 -20.1 24.0 -21.3
2025-12-31T19:23:43.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T19:23:43.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T19:23:43.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.724098
2025-12-31T19:23:43.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T19:23:43.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T19:23:43.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T19:23:43.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T19:23:43.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T19:23:43.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T19:23:26', tmtdew=15.9, humidity=35.48, cloud=0.0, wind=13.41, temperature=21.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T17:22:42.067', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T19:23:43.469 [DEBUG] [Thread-133273] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:23:43.554 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T19:23:43.565 [DEBUG] [Thread-133276] [transport.py] [_log()] starting thread (client mode): 0xb1746da0
2025-12-31T19:23:43.566 [DEBUG] [Thread-133276] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:23:43.580 [DEBUG] [Thread-133276] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T19:23:43.581 [INFO] [Thread-133276] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T19:23:43.588 [DEBUG] [Thread-133276] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:23:43.588 [DEBUG] [Thread-133276] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T19:23:43.588 [DEBUG] [Thread-133276] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:23:43.588 [DEBUG] [Thread-133276] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:23:43.589 [DEBUG] [Thread-133276] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:23:43.589 [DEBUG] [Thread-133276] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:23:43.589 [DEBUG] [Thread-133276] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:23:43.589 [DEBUG] [Thread-133276] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:23:43.589 [DEBUG] [Thread-133276] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:23:43.589 [DEBUG] [Thread-133276] [transport.py] [_log()] client lang: <none>
2025-12-31T19:23:43.589 [DEBUG] [Thread-133276] [transport.py] [_log()] server lang: <none>
2025-12-31T19:23:43.589 [DEBUG] [Thread-133276] [transport.py] [_log()] kex follows: False
2025-12-31T19:23:43.589 [DEBUG] [Thread-133276] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:23:43.590 [DEBUG] [Thread-133276] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:23:43.590 [DEBUG] [Thread-133276] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:23:43.590 [DEBUG] [Thread-133276] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:23:43.590 [DEBUG] [Thread-133276] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:23:43.590 [DEBUG] [Thread-133276] [transport.py] [_log()] Compression: none
2025-12-31T19:23:43.590 [DEBUG] [Thread-133276] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:23:43.649 [DEBUG] [Thread-133276] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:23:43.649 [DEBUG] [Thread-133276] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:23:43.650 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T19:23:43.650 [DEBUG] [Thread-133276] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T19:23:43.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:23:43.708 [DEBUG] [Thread-133276] [transport.py] [_log()] userauth is OK
2025-12-31T19:23:43.708 [DEBUG] [Thread-133276] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:23:43.708 [DEBUG] [Thread-133276] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:23:43.708 [DEBUG] [Thread-133276] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T19:23:43.708 [DEBUG] [Thread-133276] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:23:43.727 [INFO] [Thread-133276] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:23:43.727 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T19:23:43.727 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:23:44.546 [DEBUG] [Thread-133276] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:23:44.548 [DEBUG] [Thread-133276] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:23:44.595 [DEBUG] [Thread-133276] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:23:44.595 [DEBUG] [Thread-133276] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:23:44.605 [DEBUG] [Thread-133276] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:23:44.616 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:23:44.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T19:23:44.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T19:23:44.636 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:23:44.636 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:23:44.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:23:44.645 [DEBUG] [Thread-133276] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:23:49.599 [DEBUG] [Thread-133278 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:24:04.650 [DEBUG] [Thread-133279 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:24:14.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T19:24:14.651 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T19:24:14.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T19:24:15.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 19, 23, 58), 16.07, 35.03, 0.0, 13.8, 21.93, 0, 0, 0, 2, 0, 0),)
2025-12-31T19:24:15.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 19:23:58
2025-12-31T19:24:15.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T19:24:15.647 [DEBUG] [Thread-133280] [transport.py] [_log()] starting thread (client mode): 0xb1747cd0
2025-12-31T19:24:15.647 [DEBUG] [Thread-133280] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:24:15.669 [DEBUG] [Thread-133280] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T19:24:15.669 [INFO] [Thread-133280] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T19:24:15.672 [DEBUG] [Thread-133280] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:24:15.672 [DEBUG] [Thread-133280] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T19:24:15.672 [DEBUG] [Thread-133280] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:24:15.672 [DEBUG] [Thread-133280] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:24:15.672 [DEBUG] [Thread-133280] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:24:15.672 [DEBUG] [Thread-133280] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:24:15.672 [DEBUG] [Thread-133280] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:24:15.672 [DEBUG] [Thread-133280] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:24:15.673 [DEBUG] [Thread-133280] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:24:15.673 [DEBUG] [Thread-133280] [transport.py] [_log()] client lang: <none>
2025-12-31T19:24:15.673 [DEBUG] [Thread-133280] [transport.py] [_log()] server lang: <none>
2025-12-31T19:24:15.673 [DEBUG] [Thread-133280] [transport.py] [_log()] kex follows: False
2025-12-31T19:24:15.673 [DEBUG] [Thread-133280] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:24:15.673 [DEBUG] [Thread-133280] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:24:15.673 [DEBUG] [Thread-133280] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:24:15.673 [DEBUG] [Thread-133280] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:24:15.673 [DEBUG] [Thread-133280] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:24:15.673 [DEBUG] [Thread-133280] [transport.py] [_log()] Compression: none
2025-12-31T19:24:15.673 [DEBUG] [Thread-133280] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:24:15.690 [DEBUG] [Thread-133280] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:24:15.691 [DEBUG] [Thread-133280] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:24:15.692 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T19:24:15.692 [DEBUG] [Thread-133280] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T19:24:15.693 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:24:15.694 [DEBUG] [Thread-133280] [transport.py] [_log()] userauth is OK
2025-12-31T19:24:15.694 [DEBUG] [Thread-133280] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:24:15.695 [DEBUG] [Thread-133280] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:24:15.695 [DEBUG] [Thread-133280] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T19:24:15.695 [DEBUG] [Thread-133280] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:24:15.718 [INFO] [Thread-133280] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:24:15.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:24:16.376 [DEBUG] [Thread-133280] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:24:16.376 [DEBUG] [Thread-133280] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:24:16.377 [DEBUG] [Thread-133280] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T19:24:16.417 [DEBUG] [Thread-133280] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:24:16.417 [DEBUG] [Thread-133280] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:24:16.420 [DEBUG] [Thread-133280] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:24:16.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:24:16.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T19:24:16.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T19:24:16.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T19:24:16.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:24:16.444 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T19:24:16.444 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:24:16.444 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:24:16.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T19:24:16.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.724792 -999.00  +22.00  14.55     39   +7.50 1 2 1 1 1   887    0 12.08 -81.14 ----- 11.5 14.6 255.6 20.9 23.6 -20.0 23.7 -19.1 23.7 -20.0 23.9 -21.5
2025-12-31T19:24:16.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T19:24:16.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T19:24:16.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.724792
2025-12-31T19:24:16.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T19:24:16.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T19:24:16.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T19:24:16.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T19:24:16.446 [DEBUG] [Thread-133280] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:24:16.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T19:24:16.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T19:23:58', tmtdew=16.07, humidity=35.03, cloud=0.0, wind=13.8, temperature=21.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T17:23:42.029', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T19:24:16.530 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T19:24:16.542 [DEBUG] [Thread-133283] [transport.py] [_log()] starting thread (client mode): 0xb95914b0
2025-12-31T19:24:16.542 [DEBUG] [Thread-133283] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:24:16.557 [DEBUG] [Thread-133283] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T19:24:16.557 [INFO] [Thread-133283] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T19:24:16.566 [DEBUG] [Thread-133283] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:24:16.566 [DEBUG] [Thread-133283] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T19:24:16.566 [DEBUG] [Thread-133283] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:24:16.566 [DEBUG] [Thread-133283] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:24:16.566 [DEBUG] [Thread-133283] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:24:16.566 [DEBUG] [Thread-133283] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:24:16.566 [DEBUG] [Thread-133283] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:24:16.566 [DEBUG] [Thread-133283] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:24:16.566 [DEBUG] [Thread-133283] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:24:16.566 [DEBUG] [Thread-133283] [transport.py] [_log()] client lang: <none>
2025-12-31T19:24:16.566 [DEBUG] [Thread-133283] [transport.py] [_log()] server lang: <none>
2025-12-31T19:24:16.566 [DEBUG] [Thread-133283] [transport.py] [_log()] kex follows: False
2025-12-31T19:24:16.566 [DEBUG] [Thread-133283] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:24:16.566 [DEBUG] [Thread-133283] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:24:16.567 [DEBUG] [Thread-133283] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:24:16.567 [DEBUG] [Thread-133283] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:24:16.567 [DEBUG] [Thread-133283] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:24:16.567 [DEBUG] [Thread-133283] [transport.py] [_log()] Compression: none
2025-12-31T19:24:16.567 [DEBUG] [Thread-133283] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:24:16.623 [DEBUG] [Thread-133283] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:24:16.624 [DEBUG] [Thread-133283] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:24:16.625 [DEBUG] [Thread-133283] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T19:24:16.625 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T19:24:16.625 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:24:16.681 [DEBUG] [Thread-133283] [transport.py] [_log()] userauth is OK
2025-12-31T19:24:16.681 [DEBUG] [Thread-133283] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:24:16.681 [DEBUG] [Thread-133283] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:24:16.682 [DEBUG] [Thread-133283] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T19:24:16.682 [DEBUG] [Thread-133283] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:24:16.700 [INFO] [Thread-133283] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:24:16.701 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T19:24:16.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:24:17.527 [DEBUG] [Thread-133283] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:24:17.527 [DEBUG] [Thread-133283] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:24:17.578 [DEBUG] [Thread-133283] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:24:17.579 [DEBUG] [Thread-133283] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:24:17.588 [DEBUG] [Thread-133283] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:24:17.597 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:24:17.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T19:24:17.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T19:24:17.616 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:24:17.616 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:24:17.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:24:17.625 [DEBUG] [Thread-133283] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:24:19.681 [DEBUG] [Thread-133285 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:24:33.588 [DEBUG] [Thread-133286 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:24:34.734 [DEBUG] [Thread-133287 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:24:40.978 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:24:40.979 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:24:47.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T19:24:47.647 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T19:24:47.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T19:24:48.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 19, 24, 30), 16.09, 34.99, 0.0, 16.52, 21.93, 0, 0, 0, 2, 0, 0),)
2025-12-31T19:24:48.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 19:24:30
2025-12-31T19:24:48.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T19:24:48.664 [DEBUG] [Thread-133288] [transport.py] [_log()] starting thread (client mode): 0xb6bbb1c0
2025-12-31T19:24:48.664 [DEBUG] [Thread-133288] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:24:48.683 [DEBUG] [Thread-133288] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T19:24:48.683 [INFO] [Thread-133288] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T19:24:48.685 [DEBUG] [Thread-133288] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:24:48.685 [DEBUG] [Thread-133288] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T19:24:48.685 [DEBUG] [Thread-133288] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:24:48.685 [DEBUG] [Thread-133288] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:24:48.685 [DEBUG] [Thread-133288] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:24:48.685 [DEBUG] [Thread-133288] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:24:48.685 [DEBUG] [Thread-133288] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:24:48.685 [DEBUG] [Thread-133288] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:24:48.685 [DEBUG] [Thread-133288] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:24:48.685 [DEBUG] [Thread-133288] [transport.py] [_log()] client lang: <none>
2025-12-31T19:24:48.685 [DEBUG] [Thread-133288] [transport.py] [_log()] server lang: <none>
2025-12-31T19:24:48.685 [DEBUG] [Thread-133288] [transport.py] [_log()] kex follows: False
2025-12-31T19:24:48.685 [DEBUG] [Thread-133288] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:24:48.686 [DEBUG] [Thread-133288] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:24:48.686 [DEBUG] [Thread-133288] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:24:48.686 [DEBUG] [Thread-133288] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:24:48.686 [DEBUG] [Thread-133288] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:24:48.686 [DEBUG] [Thread-133288] [transport.py] [_log()] Compression: none
2025-12-31T19:24:48.686 [DEBUG] [Thread-133288] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:24:48.702 [DEBUG] [Thread-133288] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:24:48.702 [DEBUG] [Thread-133288] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:24:48.702 [DEBUG] [Thread-133288] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T19:24:48.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T19:24:48.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:24:48.703 [DEBUG] [Thread-133288] [transport.py] [_log()] userauth is OK
2025-12-31T19:24:48.703 [DEBUG] [Thread-133288] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:24:48.703 [DEBUG] [Thread-133288] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:24:48.703 [DEBUG] [Thread-133288] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T19:24:48.703 [DEBUG] [Thread-133288] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:24:48.713 [INFO] [Thread-133288] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:24:48.714 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:24:49.483 [DEBUG] [Thread-133288] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:24:49.483 [DEBUG] [Thread-133288] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:24:49.483 [DEBUG] [Thread-133288] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T19:24:49.523 [DEBUG] [Thread-133288] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:24:49.524 [DEBUG] [Thread-133288] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:24:49.526 [DEBUG] [Thread-133288] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:24:49.538 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:24:49.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T19:24:49.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T19:24:49.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T19:24:49.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:24:49.543 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T19:24:49.544 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:24:49.544 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:24:49.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T19:24:49.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.725139 -999.00  +21.90  11.25     39   +7.50 1 2 1 1 1   887    0 12.01 -94.13 ----- 11.0 11.2 256.6 16.3 23.6 -19.8 23.7 -18.9 23.6 -19.9 23.9 -21.1
2025-12-31T19:24:49.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T19:24:49.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T19:24:49.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.725139
2025-12-31T19:24:49.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T19:24:49.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T19:24:49.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T19:24:49.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T19:24:49.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T19:24:49.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T19:24:30', tmtdew=16.09, humidity=34.99, cloud=0.0, wind=16.52, temperature=21.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T17:24:12.010', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T19:24:49.545 [DEBUG] [Thread-133288] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:24:49.628 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T19:24:49.640 [DEBUG] [Thread-133291] [transport.py] [_log()] starting thread (client mode): 0xb17463b0
2025-12-31T19:24:49.640 [DEBUG] [Thread-133291] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:24:49.655 [DEBUG] [Thread-133291] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T19:24:49.655 [INFO] [Thread-133291] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T19:24:49.662 [DEBUG] [Thread-133291] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:24:49.662 [DEBUG] [Thread-133291] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T19:24:49.662 [DEBUG] [Thread-133291] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:24:49.662 [DEBUG] [Thread-133291] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:24:49.663 [DEBUG] [Thread-133291] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:24:49.663 [DEBUG] [Thread-133291] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:24:49.663 [DEBUG] [Thread-133291] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:24:49.663 [DEBUG] [Thread-133291] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:24:49.663 [DEBUG] [Thread-133291] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:24:49.663 [DEBUG] [Thread-133291] [transport.py] [_log()] client lang: <none>
2025-12-31T19:24:49.663 [DEBUG] [Thread-133291] [transport.py] [_log()] server lang: <none>
2025-12-31T19:24:49.663 [DEBUG] [Thread-133291] [transport.py] [_log()] kex follows: False
2025-12-31T19:24:49.663 [DEBUG] [Thread-133291] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:24:49.663 [DEBUG] [Thread-133291] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:24:49.663 [DEBUG] [Thread-133291] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:24:49.663 [DEBUG] [Thread-133291] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:24:49.663 [DEBUG] [Thread-133291] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:24:49.663 [DEBUG] [Thread-133291] [transport.py] [_log()] Compression: none
2025-12-31T19:24:49.663 [DEBUG] [Thread-133291] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:24:49.722 [DEBUG] [Thread-133291] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:24:49.722 [DEBUG] [Thread-133291] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:24:49.722 [DEBUG] [Thread-133291] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T19:24:49.722 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T19:24:49.722 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:24:49.767 [DEBUG] [Thread-133293 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:24:49.779 [DEBUG] [Thread-133291] [transport.py] [_log()] userauth is OK
2025-12-31T19:24:49.779 [DEBUG] [Thread-133291] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:24:49.779 [DEBUG] [Thread-133291] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:24:49.779 [DEBUG] [Thread-133291] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T19:24:49.779 [DEBUG] [Thread-133291] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:24:49.792 [INFO] [Thread-133291] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:24:49.792 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T19:24:49.792 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:24:50.640 [DEBUG] [Thread-133291] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:24:50.640 [DEBUG] [Thread-133291] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:24:50.687 [DEBUG] [Thread-133291] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:24:50.687 [DEBUG] [Thread-133291] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:24:50.695 [DEBUG] [Thread-133291] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:24:50.703 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:24:50.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T19:24:50.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T19:24:50.719 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:24:50.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:24:50.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:24:50.727 [DEBUG] [Thread-133291] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:25:04.806 [DEBUG] [Thread-133294 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:25:19.839 [DEBUG] [Thread-133295 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:25:20.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T19:25:20.750 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T19:25:20.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T19:25:21.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 19, 25, 2), 16.19, 34.75, 0.0, 14.28, 21.91, 0, 0, 0, 2, 0, 0),)
2025-12-31T19:25:21.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 19:25:02
2025-12-31T19:25:21.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T19:25:21.736 [DEBUG] [Thread-133296] [transport.py] [_log()] starting thread (client mode): 0xb9590e50
2025-12-31T19:25:21.736 [DEBUG] [Thread-133296] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:25:21.761 [DEBUG] [Thread-133296] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T19:25:21.761 [INFO] [Thread-133296] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T19:25:21.764 [DEBUG] [Thread-133296] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:25:21.765 [DEBUG] [Thread-133296] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T19:25:21.765 [DEBUG] [Thread-133296] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:25:21.765 [DEBUG] [Thread-133296] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:25:21.765 [DEBUG] [Thread-133296] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:25:21.765 [DEBUG] [Thread-133296] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:25:21.765 [DEBUG] [Thread-133296] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:25:21.765 [DEBUG] [Thread-133296] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:25:21.765 [DEBUG] [Thread-133296] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:25:21.765 [DEBUG] [Thread-133296] [transport.py] [_log()] client lang: <none>
2025-12-31T19:25:21.765 [DEBUG] [Thread-133296] [transport.py] [_log()] server lang: <none>
2025-12-31T19:25:21.765 [DEBUG] [Thread-133296] [transport.py] [_log()] kex follows: False
2025-12-31T19:25:21.765 [DEBUG] [Thread-133296] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:25:21.765 [DEBUG] [Thread-133296] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:25:21.765 [DEBUG] [Thread-133296] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:25:21.765 [DEBUG] [Thread-133296] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:25:21.765 [DEBUG] [Thread-133296] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:25:21.765 [DEBUG] [Thread-133296] [transport.py] [_log()] Compression: none
2025-12-31T19:25:21.765 [DEBUG] [Thread-133296] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:25:21.785 [DEBUG] [Thread-133296] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:25:21.785 [DEBUG] [Thread-133296] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:25:21.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T19:25:21.786 [DEBUG] [Thread-133296] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T19:25:21.787 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:25:21.788 [DEBUG] [Thread-133296] [transport.py] [_log()] userauth is OK
2025-12-31T19:25:21.789 [DEBUG] [Thread-133296] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:25:21.789 [DEBUG] [Thread-133296] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:25:21.789 [DEBUG] [Thread-133296] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T19:25:21.789 [DEBUG] [Thread-133296] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:25:21.824 [INFO] [Thread-133296] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:25:21.825 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:25:22.819 [DEBUG] [Thread-133296] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:25:22.819 [DEBUG] [Thread-133296] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:25:22.820 [DEBUG] [Thread-133296] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T19:25:22.860 [DEBUG] [Thread-133296] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:25:22.860 [DEBUG] [Thread-133296] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:25:22.864 [DEBUG] [Thread-133296] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:25:22.871 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:25:22.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T19:25:22.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T19:25:22.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T19:25:22.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:25:22.882 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T19:25:22.882 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:25:22.882 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:25:22.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T19:25:22.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.725487 -999.00  +21.90  11.69     39   +7.50 1 2 1 1 1   887    0 12.18 -93.35 ----- 15.1 11.7 257.8 14.4 23.6 -19.8 23.7 -18.8 23.6 -19.8 23.8 -21.0
2025-12-31T19:25:22.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T19:25:22.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T19:25:22.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.725487
2025-12-31T19:25:22.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T19:25:22.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T19:25:22.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T19:25:22.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T19:25:22.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T19:25:22.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T19:25:02', tmtdew=16.19, humidity=34.75, cloud=0.0, wind=14.28, temperature=21.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T17:24:42.077', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T19:25:22.885 [DEBUG] [Thread-133296] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:25:22.971 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T19:25:22.983 [DEBUG] [Thread-133299] [transport.py] [_log()] starting thread (client mode): 0xb957a620
2025-12-31T19:25:22.984 [DEBUG] [Thread-133299] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:25:22.999 [DEBUG] [Thread-133299] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T19:25:22.999 [INFO] [Thread-133299] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T19:25:23.006 [DEBUG] [Thread-133299] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:25:23.007 [DEBUG] [Thread-133299] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T19:25:23.007 [DEBUG] [Thread-133299] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:25:23.007 [DEBUG] [Thread-133299] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:25:23.007 [DEBUG] [Thread-133299] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:25:23.007 [DEBUG] [Thread-133299] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:25:23.007 [DEBUG] [Thread-133299] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:25:23.007 [DEBUG] [Thread-133299] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:25:23.007 [DEBUG] [Thread-133299] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:25:23.007 [DEBUG] [Thread-133299] [transport.py] [_log()] client lang: <none>
2025-12-31T19:25:23.007 [DEBUG] [Thread-133299] [transport.py] [_log()] server lang: <none>
2025-12-31T19:25:23.007 [DEBUG] [Thread-133299] [transport.py] [_log()] kex follows: False
2025-12-31T19:25:23.007 [DEBUG] [Thread-133299] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:25:23.007 [DEBUG] [Thread-133299] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:25:23.007 [DEBUG] [Thread-133299] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:25:23.007 [DEBUG] [Thread-133299] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:25:23.007 [DEBUG] [Thread-133299] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:25:23.007 [DEBUG] [Thread-133299] [transport.py] [_log()] Compression: none
2025-12-31T19:25:23.008 [DEBUG] [Thread-133299] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:25:23.063 [DEBUG] [Thread-133299] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:25:23.064 [DEBUG] [Thread-133299] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:25:23.064 [DEBUG] [Thread-133299] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T19:25:23.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T19:25:23.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:25:23.120 [DEBUG] [Thread-133299] [transport.py] [_log()] userauth is OK
2025-12-31T19:25:23.120 [DEBUG] [Thread-133299] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:25:23.120 [DEBUG] [Thread-133299] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:25:23.120 [DEBUG] [Thread-133299] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T19:25:23.120 [DEBUG] [Thread-133299] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:25:23.138 [INFO] [Thread-133299] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:25:23.139 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T19:25:23.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:25:23.983 [DEBUG] [Thread-133299] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:25:23.983 [DEBUG] [Thread-133299] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:25:24.030 [DEBUG] [Thread-133299] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:25:24.030 [DEBUG] [Thread-133299] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:25:24.038 [DEBUG] [Thread-133299] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:25:24.046 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:25: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')
2025-12-31T19:25:24.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T19:25:24.062 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:25:24.062 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:25:24.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:25:24.069 [DEBUG] [Thread-133299] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:25:33.651 [DEBUG] [Thread-133301 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:25:34.870 [DEBUG] [Thread-133302 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:25:41.118 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:25:41.119 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:25:49.924 [DEBUG] [Thread-133303 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:25:54.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T19:25:54.080 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T19:25:54.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T19:25:54.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 19, 25, 34), 16.05, 35.22, 0.0, 16.5, 21.76, 0, 0, 0, 2, 0, 0),)
2025-12-31T19:25:54.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 19:25:34
2025-12-31T19:25:54.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T19:25:55.062 [DEBUG] [Thread-133304] [transport.py] [_log()] starting thread (client mode): 0xb95928c0
2025-12-31T19:25:55.062 [DEBUG] [Thread-133304] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:25:55.081 [DEBUG] [Thread-133304] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T19:25:55.081 [INFO] [Thread-133304] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T19:25:55.083 [DEBUG] [Thread-133304] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:25:55.083 [DEBUG] [Thread-133304] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T19:25:55.083 [DEBUG] [Thread-133304] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:25:55.083 [DEBUG] [Thread-133304] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:25:55.083 [DEBUG] [Thread-133304] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:25:55.083 [DEBUG] [Thread-133304] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:25:55.083 [DEBUG] [Thread-133304] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:25:55.083 [DEBUG] [Thread-133304] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:25:55.083 [DEBUG] [Thread-133304] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:25:55.083 [DEBUG] [Thread-133304] [transport.py] [_log()] client lang: <none>
2025-12-31T19:25:55.083 [DEBUG] [Thread-133304] [transport.py] [_log()] server lang: <none>
2025-12-31T19:25:55.083 [DEBUG] [Thread-133304] [transport.py] [_log()] kex follows: False
2025-12-31T19:25:55.083 [DEBUG] [Thread-133304] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:25:55.083 [DEBUG] [Thread-133304] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:25:55.084 [DEBUG] [Thread-133304] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:25:55.084 [DEBUG] [Thread-133304] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:25:55.084 [DEBUG] [Thread-133304] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:25:55.084 [DEBUG] [Thread-133304] [transport.py] [_log()] Compression: none
2025-12-31T19:25:55.084 [DEBUG] [Thread-133304] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:25:55.093 [DEBUG] [Thread-133304] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:25:55.093 [DEBUG] [Thread-133304] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:25:55.094 [DEBUG] [Thread-133304] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T19:25:55.094 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T19:25:55.095 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:25:55.096 [DEBUG] [Thread-133304] [transport.py] [_log()] userauth is OK
2025-12-31T19:25:55.096 [DEBUG] [Thread-133304] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:25:55.096 [DEBUG] [Thread-133304] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:25:55.096 [DEBUG] [Thread-133304] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T19:25:55.096 [DEBUG] [Thread-133304] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:25:55.110 [INFO] [Thread-133304] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:25:55.110 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:25:55.744 [DEBUG] [Thread-133304] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:25:55.744 [DEBUG] [Thread-133304] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:25:55.745 [DEBUG] [Thread-133304] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T19:25:55.784 [DEBUG] [Thread-133304] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:25:55.785 [DEBUG] [Thread-133304] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:25:55.787 [DEBUG] [Thread-133304] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:25:55.798 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:25:55.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T19:25:55.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T19:25:55.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T19:25:55.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:25:55.807 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T19:25:55.807 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:25:55.808 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:25:55.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T19:25:55.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.725834 -999.00  +21.80   6.57     40   +7.60 1 2 1 1 1   887    0 12.28 -86.58 ----- 5.5 6.6 228.3 17.0 23.6 -19.6 23.7 -19.0 23.5 -19.7 23.7 -21.0
2025-12-31T19:25:55.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T19:25:55.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T19:25:55.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.725834
2025-12-31T19:25:55.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T19:25:55.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T19:25:55.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T19:25:55.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T19:25:55.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T19:25:55.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T19:25:34', tmtdew=16.05, humidity=35.22, cloud=0.0, wind=16.5, temperature=21.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T17:25:12.058', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T19:25:55.810 [DEBUG] [Thread-133304] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:25:55.892 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T19:25:55.904 [DEBUG] [Thread-133307] [transport.py] [_log()] starting thread (client mode): 0xb6b61480
2025-12-31T19:25:55.904 [DEBUG] [Thread-133307] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:25:55.918 [DEBUG] [Thread-133307] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T19:25:55.918 [INFO] [Thread-133307] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T19:25:55.925 [DEBUG] [Thread-133307] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:25:55.926 [DEBUG] [Thread-133307] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T19:25:55.926 [DEBUG] [Thread-133307] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:25:55.926 [DEBUG] [Thread-133307] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:25:55.926 [DEBUG] [Thread-133307] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:25:55.926 [DEBUG] [Thread-133307] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:25:55.926 [DEBUG] [Thread-133307] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:25:55.926 [DEBUG] [Thread-133307] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:25:55.926 [DEBUG] [Thread-133307] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:25:55.926 [DEBUG] [Thread-133307] [transport.py] [_log()] client lang: <none>
2025-12-31T19:25:55.926 [DEBUG] [Thread-133307] [transport.py] [_log()] server lang: <none>
2025-12-31T19:25:55.926 [DEBUG] [Thread-133307] [transport.py] [_log()] kex follows: False
2025-12-31T19:25:55.926 [DEBUG] [Thread-133307] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:25:55.926 [DEBUG] [Thread-133307] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:25:55.926 [DEBUG] [Thread-133307] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:25:55.926 [DEBUG] [Thread-133307] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:25:55.926 [DEBUG] [Thread-133307] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:25:55.926 [DEBUG] [Thread-133307] [transport.py] [_log()] Compression: none
2025-12-31T19:25:55.926 [DEBUG] [Thread-133307] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:25:55.983 [DEBUG] [Thread-133307] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:25:55.984 [DEBUG] [Thread-133307] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:25:55.984 [DEBUG] [Thread-133307] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T19:25:55.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T19:25:55.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:25:56.039 [DEBUG] [Thread-133307] [transport.py] [_log()] userauth is OK
2025-12-31T19:25:56.040 [DEBUG] [Thread-133307] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:25:56.040 [DEBUG] [Thread-133307] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:25:56.040 [DEBUG] [Thread-133307] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T19:25:56.040 [DEBUG] [Thread-133307] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:25:56.059 [INFO] [Thread-133307] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:25:56.059 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T19:25:56.060 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:25:56.867 [DEBUG] [Thread-133307] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:25:56.867 [DEBUG] [Thread-133307] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:25:56.915 [DEBUG] [Thread-133307] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:25:56.915 [DEBUG] [Thread-133307] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:25:56.924 [DEBUG] [Thread-133307] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:25:56.933 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:25:56.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T19:25:56.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T19:25:56.952 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:25:56.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:25:56.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:25:56.961 [DEBUG] [Thread-133307] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:26:04.957 [DEBUG] [Thread-133309 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:26:19.995 [DEBUG] [Thread-133310 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:26:26.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T19:26:26.965 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T19:26:26.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T19:26:27.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 19, 26, 7), 16.0, 35.34, 0.0, 14.24, 21.73, 0, 0, 0, 2, 0, 0),)
2025-12-31T19:26:27.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 19:26:07
2025-12-31T19:26:27.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T19:26:27.930 [DEBUG] [Thread-133311] [transport.py] [_log()] starting thread (client mode): 0xb1746e00
2025-12-31T19:26:27.930 [DEBUG] [Thread-133311] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:26:27.951 [DEBUG] [Thread-133311] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T19:26:27.951 [INFO] [Thread-133311] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T19:26:27.954 [DEBUG] [Thread-133311] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:26:27.954 [DEBUG] [Thread-133311] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T19:26:27.954 [DEBUG] [Thread-133311] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:26:27.954 [DEBUG] [Thread-133311] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:26:27.955 [DEBUG] [Thread-133311] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:26:27.955 [DEBUG] [Thread-133311] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:26:27.955 [DEBUG] [Thread-133311] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:26:27.955 [DEBUG] [Thread-133311] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:26:27.955 [DEBUG] [Thread-133311] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:26:27.955 [DEBUG] [Thread-133311] [transport.py] [_log()] client lang: <none>
2025-12-31T19:26:27.955 [DEBUG] [Thread-133311] [transport.py] [_log()] server lang: <none>
2025-12-31T19:26:27.955 [DEBUG] [Thread-133311] [transport.py] [_log()] kex follows: False
2025-12-31T19:26:27.955 [DEBUG] [Thread-133311] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:26:27.955 [DEBUG] [Thread-133311] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:26:27.955 [DEBUG] [Thread-133311] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:26:27.955 [DEBUG] [Thread-133311] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:26:27.955 [DEBUG] [Thread-133311] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:26:27.955 [DEBUG] [Thread-133311] [transport.py] [_log()] Compression: none
2025-12-31T19:26:27.956 [DEBUG] [Thread-133311] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:26:27.973 [DEBUG] [Thread-133311] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:26:27.973 [DEBUG] [Thread-133311] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:26:27.973 [DEBUG] [Thread-133311] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T19:26:27.973 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T19:26:27.974 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:26:27.974 [DEBUG] [Thread-133311] [transport.py] [_log()] userauth is OK
2025-12-31T19:26:27.974 [DEBUG] [Thread-133311] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:26:27.974 [DEBUG] [Thread-133311] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:26:27.974 [DEBUG] [Thread-133311] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T19:26:27.974 [DEBUG] [Thread-133311] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:26:27.985 [INFO] [Thread-133311] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:26:27.985 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:26:28.616 [DEBUG] [Thread-133311] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:26:28.616 [DEBUG] [Thread-133311] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:26:28.617 [DEBUG] [Thread-133311] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T19:26:28.658 [DEBUG] [Thread-133311] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:26:28.658 [DEBUG] [Thread-133311] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:26:28.661 [DEBUG] [Thread-133311] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:26:28.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:26:28.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T19:26:28.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T19:26:28.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T19:26:28.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:26:28.675 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T19:26:28.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:26:28.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:26:28.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T19:26:28.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.726181 -999.00  +21.80   9.73     39   +7.60 1 2 1 1 1   887    0 12.12 -83.54 ----- 6.8 9.7 245.2 15.2 23.6 -19.7 23.6 -19.6 23.5 -19.9 23.6 -20.8
2025-12-31T19:26:28.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T19:26:28.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T19:26:28.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.726181
2025-12-31T19:26:28.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T19:26:28.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T19:26:28.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T19:26:28.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T19:26:28.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T19:26:28.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T19:26:07', tmtdew=16.0, humidity=35.34, cloud=0.0, wind=14.24, temperature=21.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T17:25:42.038', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T19:26:28.678 [DEBUG] [Thread-133311] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:26:28.762 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T19:26:28.774 [DEBUG] [Thread-133314] [transport.py] [_log()] starting thread (client mode): 0xb17464a0
2025-12-31T19:26:28.774 [DEBUG] [Thread-133314] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:26:28.788 [DEBUG] [Thread-133314] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T19:26:28.788 [INFO] [Thread-133314] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T19:26:28.796 [DEBUG] [Thread-133314] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:26:28.796 [DEBUG] [Thread-133314] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T19:26:28.796 [DEBUG] [Thread-133314] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:26:28.796 [DEBUG] [Thread-133314] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:26:28.796 [DEBUG] [Thread-133314] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:26:28.796 [DEBUG] [Thread-133314] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:26:28.796 [DEBUG] [Thread-133314] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:26:28.796 [DEBUG] [Thread-133314] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:26:28.796 [DEBUG] [Thread-133314] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:26:28.797 [DEBUG] [Thread-133314] [transport.py] [_log()] client lang: <none>
2025-12-31T19:26:28.797 [DEBUG] [Thread-133314] [transport.py] [_log()] server lang: <none>
2025-12-31T19:26:28.797 [DEBUG] [Thread-133314] [transport.py] [_log()] kex follows: False
2025-12-31T19:26:28.797 [DEBUG] [Thread-133314] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:26:28.797 [DEBUG] [Thread-133314] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:26:28.797 [DEBUG] [Thread-133314] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:26:28.797 [DEBUG] [Thread-133314] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:26:28.797 [DEBUG] [Thread-133314] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:26:28.797 [DEBUG] [Thread-133314] [transport.py] [_log()] Compression: none
2025-12-31T19:26:28.797 [DEBUG] [Thread-133314] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:26:28.857 [DEBUG] [Thread-133314] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:26:28.857 [DEBUG] [Thread-133314] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:26:28.858 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T19:26:28.858 [DEBUG] [Thread-133314] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T19:26:28.859 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:26:28.920 [DEBUG] [Thread-133314] [transport.py] [_log()] userauth is OK
2025-12-31T19:26:28.920 [DEBUG] [Thread-133314] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:26:28.920 [DEBUG] [Thread-133314] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:26:28.920 [DEBUG] [Thread-133314] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T19:26:28.920 [DEBUG] [Thread-133314] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:26:28.938 [INFO] [Thread-133314] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:26:28.939 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T19:26:28.940 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:26:29.803 [DEBUG] [Thread-133314] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:26:29.803 [DEBUG] [Thread-133314] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:26:29.851 [DEBUG] [Thread-133314] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:26:29.851 [DEBUG] [Thread-133314] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:26:29.860 [DEBUG] [Thread-133314] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:26:29.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:26: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-12-31T19:26: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-12-31T19:26:29.887 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:26:29.887 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:26:29.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:26:29.895 [DEBUG] [Thread-133314] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:26:33.715 [DEBUG] [Thread-133316 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:26:35.033 [DEBUG] [Thread-133317 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:26:41.258 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:26:41.259 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:26:50.091 [DEBUG] [Thread-133318 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:26:59.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T19:26:59.905 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T19:26:59.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T19:27:00.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 19, 26, 39), 16.04, 35.35, 0.0, 14.35, 21.73, 0, 0, 0, 2, 0, 0),)
2025-12-31T19:27:00.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 19:26:39
2025-12-31T19:27:00.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T19:27:00.873 [DEBUG] [Thread-133319] [transport.py] [_log()] starting thread (client mode): 0xb6b61180
2025-12-31T19:27:00.873 [DEBUG] [Thread-133319] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:27:00.893 [DEBUG] [Thread-133319] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T19:27:00.893 [INFO] [Thread-133319] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T19:27:00.895 [DEBUG] [Thread-133319] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:27:00.895 [DEBUG] [Thread-133319] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T19:27:00.895 [DEBUG] [Thread-133319] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:27:00.895 [DEBUG] [Thread-133319] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:27:00.895 [DEBUG] [Thread-133319] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:27:00.895 [DEBUG] [Thread-133319] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:27:00.895 [DEBUG] [Thread-133319] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:27:00.895 [DEBUG] [Thread-133319] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:27:00.895 [DEBUG] [Thread-133319] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:27:00.895 [DEBUG] [Thread-133319] [transport.py] [_log()] client lang: <none>
2025-12-31T19:27:00.895 [DEBUG] [Thread-133319] [transport.py] [_log()] server lang: <none>
2025-12-31T19:27:00.895 [DEBUG] [Thread-133319] [transport.py] [_log()] kex follows: False
2025-12-31T19:27:00.895 [DEBUG] [Thread-133319] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:27:00.895 [DEBUG] [Thread-133319] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:27:00.895 [DEBUG] [Thread-133319] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:27:00.895 [DEBUG] [Thread-133319] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:27:00.895 [DEBUG] [Thread-133319] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:27:00.895 [DEBUG] [Thread-133319] [transport.py] [_log()] Compression: none
2025-12-31T19:27:00.895 [DEBUG] [Thread-133319] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:27:00.913 [DEBUG] [Thread-133319] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:27:00.913 [DEBUG] [Thread-133319] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:27:00.914 [DEBUG] [Thread-133319] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T19:27:00.914 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T19:27:00.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:27:00.916 [DEBUG] [Thread-133319] [transport.py] [_log()] userauth is OK
2025-12-31T19:27:00.916 [DEBUG] [Thread-133319] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:27:00.916 [DEBUG] [Thread-133319] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:27:00.916 [DEBUG] [Thread-133319] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T19:27:00.917 [DEBUG] [Thread-133319] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:27:00.953 [INFO] [Thread-133319] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:27:00.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:27:01.604 [DEBUG] [Thread-133319] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:27:01.605 [DEBUG] [Thread-133319] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:27:01.605 [DEBUG] [Thread-133319] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T19:27:01.645 [DEBUG] [Thread-133319] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:27:01.645 [DEBUG] [Thread-133319] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:27:01.649 [DEBUG] [Thread-133319] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:27:01.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:27:01.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T19:27:01.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T19:27:01.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T19:27:01.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:27:01.674 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T19:27:01.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:27:01.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:27:01.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T19:27:01.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.726528 -999.00  +21.80  10.67     40   +7.60 1 2 1 1 1   887    0 11.82 -92.35 ----- 14.9 10.7 258.2 17.2 23.6 -19.9 23.6 -19.1 23.4 -19.8 23.6 -21.1
2025-12-31T19:27:01.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T19:27:01.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T19:27:01.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.726528
2025-12-31T19:27:01.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T19:27:01.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T19:27:01.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T19:27:01.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T19:27:01.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T19:27:01.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T19:26:39', tmtdew=16.04, humidity=35.35, cloud=0.0, wind=14.35, temperature=21.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T17:26:12.019', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T19:27:01.677 [DEBUG] [Thread-133319] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:27: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-12-31T19:27:01.772 [DEBUG] [Thread-133322] [transport.py] [_log()] starting thread (client mode): 0xb1747460
2025-12-31T19:27:01.773 [DEBUG] [Thread-133322] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:27:01.788 [DEBUG] [Thread-133322] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T19:27:01.788 [INFO] [Thread-133322] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T19:27:01.795 [DEBUG] [Thread-133322] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:27:01.796 [DEBUG] [Thread-133322] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T19:27:01.796 [DEBUG] [Thread-133322] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:27:01.796 [DEBUG] [Thread-133322] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:27:01.796 [DEBUG] [Thread-133322] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:27:01.796 [DEBUG] [Thread-133322] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:27:01.796 [DEBUG] [Thread-133322] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:27:01.796 [DEBUG] [Thread-133322] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:27:01.797 [DEBUG] [Thread-133322] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:27:01.797 [DEBUG] [Thread-133322] [transport.py] [_log()] client lang: <none>
2025-12-31T19:27:01.797 [DEBUG] [Thread-133322] [transport.py] [_log()] server lang: <none>
2025-12-31T19:27:01.797 [DEBUG] [Thread-133322] [transport.py] [_log()] kex follows: False
2025-12-31T19:27:01.797 [DEBUG] [Thread-133322] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:27:01.797 [DEBUG] [Thread-133322] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:27:01.797 [DEBUG] [Thread-133322] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:27:01.797 [DEBUG] [Thread-133322] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:27:01.798 [DEBUG] [Thread-133322] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:27:01.798 [DEBUG] [Thread-133322] [transport.py] [_log()] Compression: none
2025-12-31T19:27:01.798 [DEBUG] [Thread-133322] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:27:01.856 [DEBUG] [Thread-133322] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:27:01.856 [DEBUG] [Thread-133322] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:27:01.857 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T19:27:01.858 [DEBUG] [Thread-133322] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T19:27:01.859 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:27:01.911 [DEBUG] [Thread-133322] [transport.py] [_log()] userauth is OK
2025-12-31T19:27:01.911 [DEBUG] [Thread-133322] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:27:01.911 [DEBUG] [Thread-133322] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:27:01.911 [DEBUG] [Thread-133322] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T19:27:01.911 [DEBUG] [Thread-133322] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:27:01.925 [INFO] [Thread-133322] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:27:01.925 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T19:27:01.925 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:27:02.774 [DEBUG] [Thread-133322] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:27:02.774 [DEBUG] [Thread-133322] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:27:02.822 [DEBUG] [Thread-133322] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:27:02.822 [DEBUG] [Thread-133322] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:27:02.831 [DEBUG] [Thread-133322] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:27:02.840 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:27:02.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T19:27:02.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-12-31T19:27:02.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:27:02.859 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:27:02.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:27:02.868 [DEBUG] [Thread-133322] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:27:05.128 [DEBUG] [Thread-133324 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:27:20.175 [DEBUG] [Thread-133325 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:27:32.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T19:27:32.890 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T19:27:32.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T19:27:33.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 19, 27, 11), 16.05, 35.34, 0.0, 15.23, 21.75, 0, 0, 0, 2, 0, 0),)
2025-12-31T19:27:33.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 19:27:11
2025-12-31T19:27:33.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T19:27:33.766 [DEBUG] [Thread-133326 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:27:33.870 [DEBUG] [Thread-133327] [transport.py] [_log()] starting thread (client mode): 0xb1746ce0
2025-12-31T19:27:33.870 [DEBUG] [Thread-133327] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:27:33.892 [DEBUG] [Thread-133327] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T19:27:33.892 [INFO] [Thread-133327] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T19:27:33.895 [DEBUG] [Thread-133327] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:27:33.895 [DEBUG] [Thread-133327] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T19:27:33.895 [DEBUG] [Thread-133327] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:27:33.895 [DEBUG] [Thread-133327] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:27:33.895 [DEBUG] [Thread-133327] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:27:33.895 [DEBUG] [Thread-133327] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:27:33.896 [DEBUG] [Thread-133327] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:27:33.896 [DEBUG] [Thread-133327] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:27:33.896 [DEBUG] [Thread-133327] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:27:33.896 [DEBUG] [Thread-133327] [transport.py] [_log()] client lang: <none>
2025-12-31T19:27:33.896 [DEBUG] [Thread-133327] [transport.py] [_log()] server lang: <none>
2025-12-31T19:27:33.896 [DEBUG] [Thread-133327] [transport.py] [_log()] kex follows: False
2025-12-31T19:27:33.896 [DEBUG] [Thread-133327] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:27:33.896 [DEBUG] [Thread-133327] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:27:33.896 [DEBUG] [Thread-133327] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:27:33.896 [DEBUG] [Thread-133327] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:27:33.896 [DEBUG] [Thread-133327] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:27:33.896 [DEBUG] [Thread-133327] [transport.py] [_log()] Compression: none
2025-12-31T19:27:33.896 [DEBUG] [Thread-133327] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:27:33.914 [DEBUG] [Thread-133327] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:27:33.915 [DEBUG] [Thread-133327] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:27:33.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T19:27:33.916 [DEBUG] [Thread-133327] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T19:27:33.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:27:33.917 [DEBUG] [Thread-133327] [transport.py] [_log()] userauth is OK
2025-12-31T19:27:33.918 [DEBUG] [Thread-133327] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:27:33.918 [DEBUG] [Thread-133327] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:27:33.918 [DEBUG] [Thread-133327] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T19:27:33.918 [DEBUG] [Thread-133327] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:27:33.953 [INFO] [Thread-133327] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:27:33.954 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:27:34.572 [DEBUG] [Thread-133327] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:27:34.572 [DEBUG] [Thread-133327] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:27:34.572 [DEBUG] [Thread-133327] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T19:27:34.613 [DEBUG] [Thread-133327] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:27:34.614 [DEBUG] [Thread-133327] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:27:34.617 [DEBUG] [Thread-133327] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:27:34.628 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:27:34.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T19:27:34.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T19:27:34.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T19:27:34.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:27:34.640 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T19:27:34.640 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:27:34.641 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:27:34.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T19:27:34.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.726875 -999.00  +21.70   9.07     40   +7.60 1 2 1 1 1   887    0 11.61 -102.25 ----- 8.9 9.1 237.2 17.4 23.5 -20.0 23.5 -19.2 23.3 -19.9 23.5 -21.3
2025-12-31T19:27:34.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T19:27:34.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T19:27:34.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.726875
2025-12-31T19:27:34.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T19:27:34.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T19:27:34.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T19:27:34.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T19:27:34.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T19:27:34.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T19:27:11', tmtdew=16.05, humidity=35.34, cloud=0.0, wind=15.23, temperature=21.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T17:26:42.000', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T19:27:34.644 [DEBUG] [Thread-133327] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:27:34.729 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T19:27:34.741 [DEBUG] [Thread-133330] [transport.py] [_log()] starting thread (client mode): 0xb6ba3c70
2025-12-31T19:27:34.741 [DEBUG] [Thread-133330] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:27:34.756 [DEBUG] [Thread-133330] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T19:27:34.756 [INFO] [Thread-133330] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T19:27:34.763 [DEBUG] [Thread-133330] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:27:34.763 [DEBUG] [Thread-133330] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T19:27:34.764 [DEBUG] [Thread-133330] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:27:34.764 [DEBUG] [Thread-133330] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:27:34.764 [DEBUG] [Thread-133330] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:27:34.764 [DEBUG] [Thread-133330] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:27:34.764 [DEBUG] [Thread-133330] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:27:34.764 [DEBUG] [Thread-133330] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:27:34.764 [DEBUG] [Thread-133330] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:27:34.764 [DEBUG] [Thread-133330] [transport.py] [_log()] client lang: <none>
2025-12-31T19:27:34.764 [DEBUG] [Thread-133330] [transport.py] [_log()] server lang: <none>
2025-12-31T19:27:34.764 [DEBUG] [Thread-133330] [transport.py] [_log()] kex follows: False
2025-12-31T19:27:34.764 [DEBUG] [Thread-133330] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:27:34.764 [DEBUG] [Thread-133330] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:27:34.764 [DEBUG] [Thread-133330] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:27:34.764 [DEBUG] [Thread-133330] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:27:34.764 [DEBUG] [Thread-133330] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:27:34.764 [DEBUG] [Thread-133330] [transport.py] [_log()] Compression: none
2025-12-31T19:27:34.764 [DEBUG] [Thread-133330] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:27:34.824 [DEBUG] [Thread-133330] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:27:34.824 [DEBUG] [Thread-133330] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:27:34.825 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T19:27:34.825 [DEBUG] [Thread-133330] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T19:27:34.826 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:27:34.879 [DEBUG] [Thread-133330] [transport.py] [_log()] userauth is OK
2025-12-31T19:27:34.880 [DEBUG] [Thread-133330] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:27:34.880 [DEBUG] [Thread-133330] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:27:34.880 [DEBUG] [Thread-133330] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T19:27:34.880 [DEBUG] [Thread-133330] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:27:34.898 [INFO] [Thread-133330] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:27:34.899 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T19:27:34.899 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:27:35.206 [DEBUG] [Thread-133332 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:27:35.745 [DEBUG] [Thread-133330] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:27:35.745 [DEBUG] [Thread-133330] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:27:35.792 [DEBUG] [Thread-133330] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:27:35.793 [DEBUG] [Thread-133330] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:27:35.801 [DEBUG] [Thread-133330] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:27:35.810 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:27:35.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T19:27:35.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-12-31T19:27:35.827 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:27:35.827 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:27:35.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:27:35.835 [DEBUG] [Thread-133330] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:27:41.398 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:27:41.399 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:27:50.268 [DEBUG] [Thread-133333 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:28:05.303 [DEBUG] [Thread-133334 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:28:05.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T19:28:05.848 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T19:28:05.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T19:28:06.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 19, 27, 43), 15.93, 35.25, 0.0, 12.4, 21.68, 0, 0, 0, 2, 0, 0),)
2025-12-31T19:28:06.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 19:27:43
2025-12-31T19:28:06.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T19:28:06.826 [DEBUG] [Thread-133335] [transport.py] [_log()] starting thread (client mode): 0xb957a8c0
2025-12-31T19:28:06.826 [DEBUG] [Thread-133335] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:28:06.845 [DEBUG] [Thread-133335] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T19:28:06.846 [INFO] [Thread-133335] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T19:28:06.849 [DEBUG] [Thread-133335] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:28:06.849 [DEBUG] [Thread-133335] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T19:28:06.849 [DEBUG] [Thread-133335] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:28:06.849 [DEBUG] [Thread-133335] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:28:06.849 [DEBUG] [Thread-133335] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:28:06.849 [DEBUG] [Thread-133335] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:28:06.849 [DEBUG] [Thread-133335] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:28:06.849 [DEBUG] [Thread-133335] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:28:06.849 [DEBUG] [Thread-133335] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:28:06.849 [DEBUG] [Thread-133335] [transport.py] [_log()] client lang: <none>
2025-12-31T19:28:06.849 [DEBUG] [Thread-133335] [transport.py] [_log()] server lang: <none>
2025-12-31T19:28:06.849 [DEBUG] [Thread-133335] [transport.py] [_log()] kex follows: False
2025-12-31T19:28:06.849 [DEBUG] [Thread-133335] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:28:06.849 [DEBUG] [Thread-133335] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:28:06.849 [DEBUG] [Thread-133335] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:28:06.849 [DEBUG] [Thread-133335] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:28:06.849 [DEBUG] [Thread-133335] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:28:06.849 [DEBUG] [Thread-133335] [transport.py] [_log()] Compression: none
2025-12-31T19:28:06.849 [DEBUG] [Thread-133335] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:28:06.868 [DEBUG] [Thread-133335] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:28:06.868 [DEBUG] [Thread-133335] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:28:06.869 [DEBUG] [Thread-133335] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T19:28:06.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T19:28:06.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:28:06.870 [DEBUG] [Thread-133335] [transport.py] [_log()] userauth is OK
2025-12-31T19:28:06.871 [DEBUG] [Thread-133335] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:28:06.871 [DEBUG] [Thread-133335] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:28:06.871 [DEBUG] [Thread-133335] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T19:28:06.871 [DEBUG] [Thread-133335] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:28:06.891 [INFO] [Thread-133335] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:28:06.892 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:28:07.538 [DEBUG] [Thread-133335] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:28:07.538 [DEBUG] [Thread-133335] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:28:07.539 [DEBUG] [Thread-133335] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T19:28:07.579 [DEBUG] [Thread-133335] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:28:07.579 [DEBUG] [Thread-133335] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:28:07.583 [DEBUG] [Thread-133335] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:28:07.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:28:07.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T19:28:07.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T19:28:07.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T19:28:07.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:28:07.606 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T19:28:07.607 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:28:07.607 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:28:07.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T19:28:07.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.727223 -999.00  +21.70   9.95     40   +7.60 1 2 1 1 1   887    0 11.56 -98.28 ----- 12.6 9.9 228.8 15.5 23.4 -20.0 23.5 -19.0 23.3 -19.8 23.4 -20.8
2025-12-31T19:28:07.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T19:28:07.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T19:28:07.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.727223
2025-12-31T19:28:07.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T19:28:07.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T19:28:07.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T19:28:07.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T19:28:07.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T19:28:07.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T19:27:43', tmtdew=15.93, humidity=35.25, cloud=0.0, wind=12.4, temperature=21.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T17:27:12.067', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T19:28:07.609 [DEBUG] [Thread-133335] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:28:07.706 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T19:28:07.719 [DEBUG] [Thread-133338] [transport.py] [_log()] starting thread (client mode): 0xb6ba07f0
2025-12-31T19:28:07.719 [DEBUG] [Thread-133338] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:28:07.734 [DEBUG] [Thread-133338] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T19:28:07.734 [INFO] [Thread-133338] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T19:28:07.742 [DEBUG] [Thread-133338] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:28:07.742 [DEBUG] [Thread-133338] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T19:28:07.742 [DEBUG] [Thread-133338] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:28:07.742 [DEBUG] [Thread-133338] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:28:07.742 [DEBUG] [Thread-133338] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:28:07.742 [DEBUG] [Thread-133338] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:28:07.742 [DEBUG] [Thread-133338] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:28:07.742 [DEBUG] [Thread-133338] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:28:07.742 [DEBUG] [Thread-133338] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:28:07.742 [DEBUG] [Thread-133338] [transport.py] [_log()] client lang: <none>
2025-12-31T19:28:07.742 [DEBUG] [Thread-133338] [transport.py] [_log()] server lang: <none>
2025-12-31T19:28:07.742 [DEBUG] [Thread-133338] [transport.py] [_log()] kex follows: False
2025-12-31T19:28:07.742 [DEBUG] [Thread-133338] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:28:07.742 [DEBUG] [Thread-133338] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:28:07.743 [DEBUG] [Thread-133338] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:28:07.743 [DEBUG] [Thread-133338] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:28:07.743 [DEBUG] [Thread-133338] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:28:07.743 [DEBUG] [Thread-133338] [transport.py] [_log()] Compression: none
2025-12-31T19:28:07.743 [DEBUG] [Thread-133338] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:28:07.800 [DEBUG] [Thread-133338] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:28:07.800 [DEBUG] [Thread-133338] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:28:07.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T19:28:07.802 [DEBUG] [Thread-133338] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T19:28:07.802 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:28:07.856 [DEBUG] [Thread-133338] [transport.py] [_log()] userauth is OK
2025-12-31T19:28:07.856 [DEBUG] [Thread-133338] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:28:07.857 [DEBUG] [Thread-133338] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:28:07.857 [DEBUG] [Thread-133338] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T19:28:07.857 [DEBUG] [Thread-133338] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:28:07.876 [INFO] [Thread-133338] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:28:07.876 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T19:28:07.877 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:28:08.698 [DEBUG] [Thread-133338] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:28:08.698 [DEBUG] [Thread-133338] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:28:08.746 [DEBUG] [Thread-133338] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:28:08.746 [DEBUG] [Thread-133338] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:28:08.755 [DEBUG] [Thread-133338] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:28:08.763 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:28:08.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T19:28:08.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T19:28:08.779 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:28:08.779 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:28:08.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:28:08.786 [DEBUG] [Thread-133338] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:28:20.340 [DEBUG] [Thread-133340 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:28:33.825 [DEBUG] [Thread-133341 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:28:35.389 [DEBUG] [Thread-133342 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:28:38.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T19:28:38.809 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T19:28:38.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T19:28:39.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 19, 28, 15), 15.89, 35.35, 0.0, 11.4, 21.68, 0, 0, 0, 2, 0, 0),)
2025-12-31T19:28:39.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 19:28:15
2025-12-31T19:28:39.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T19:28:39.832 [DEBUG] [Thread-133343] [transport.py] [_log()] starting thread (client mode): 0xb95786a0
2025-12-31T19:28:39.832 [DEBUG] [Thread-133343] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:28:39.851 [DEBUG] [Thread-133343] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T19:28:39.852 [INFO] [Thread-133343] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T19:28:39.853 [DEBUG] [Thread-133343] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:28:39.853 [DEBUG] [Thread-133343] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T19:28:39.853 [DEBUG] [Thread-133343] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:28:39.853 [DEBUG] [Thread-133343] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:28:39.853 [DEBUG] [Thread-133343] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:28:39.853 [DEBUG] [Thread-133343] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:28:39.853 [DEBUG] [Thread-133343] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:28:39.853 [DEBUG] [Thread-133343] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:28:39.853 [DEBUG] [Thread-133343] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:28:39.853 [DEBUG] [Thread-133343] [transport.py] [_log()] client lang: <none>
2025-12-31T19:28:39.853 [DEBUG] [Thread-133343] [transport.py] [_log()] server lang: <none>
2025-12-31T19:28:39.853 [DEBUG] [Thread-133343] [transport.py] [_log()] kex follows: False
2025-12-31T19:28:39.853 [DEBUG] [Thread-133343] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:28:39.853 [DEBUG] [Thread-133343] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:28:39.853 [DEBUG] [Thread-133343] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:28:39.853 [DEBUG] [Thread-133343] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:28:39.853 [DEBUG] [Thread-133343] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:28:39.853 [DEBUG] [Thread-133343] [transport.py] [_log()] Compression: none
2025-12-31T19:28:39.853 [DEBUG] [Thread-133343] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:28:39.867 [DEBUG] [Thread-133343] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:28:39.867 [DEBUG] [Thread-133343] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:28:39.868 [DEBUG] [Thread-133343] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T19:28:39.868 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T19:28:39.868 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:28:39.869 [DEBUG] [Thread-133343] [transport.py] [_log()] userauth is OK
2025-12-31T19:28:39.869 [DEBUG] [Thread-133343] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:28:39.869 [DEBUG] [Thread-133343] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:28:39.869 [DEBUG] [Thread-133343] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T19:28:39.869 [DEBUG] [Thread-133343] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:28:39.882 [INFO] [Thread-133343] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:28:39.882 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:28:40.543 [DEBUG] [Thread-133343] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:28:40.543 [DEBUG] [Thread-133343] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:28:40.543 [DEBUG] [Thread-133343] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T19:28:40.584 [DEBUG] [Thread-133343] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:28:40.584 [DEBUG] [Thread-133343] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:28:40.586 [DEBUG] [Thread-133343] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:28:40.600 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:28:40.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T19:28:40.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T19:28:40.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T19:28:40.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:28:40.605 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T19:28:40.605 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:28:40.605 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:28:40.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T19:28:40.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.727570 -999.00  +21.80   5.93     40   +7.60 1 2 1 1 1   887    0 11.84 -93.46 ----- 7.8 5.9 233.6 15.3 23.4 -19.6 23.4 -19.0 23.2 -19.7 23.4 -20.8
2025-12-31T19:28:40.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T19:28:40.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T19:28:40.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.727570
2025-12-31T19:28:40.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T19:28:40.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T19:28:40.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T19:28:40.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T19:28:40.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T19:28:40.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T19:28:15', tmtdew=15.89, humidity=35.35, cloud=0.0, wind=11.4, temperature=21.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T17:27:42.048', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T19:28:40.606 [DEBUG] [Thread-133343] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:28:40.682 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T19:28:40.693 [DEBUG] [Thread-133346] [transport.py] [_log()] starting thread (client mode): 0xb1759a20
2025-12-31T19:28:40.693 [DEBUG] [Thread-133346] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:28:40.708 [DEBUG] [Thread-133346] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T19:28:40.708 [INFO] [Thread-133346] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T19:28:40.715 [DEBUG] [Thread-133346] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:28:40.715 [DEBUG] [Thread-133346] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T19:28:40.715 [DEBUG] [Thread-133346] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:28:40.715 [DEBUG] [Thread-133346] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:28:40.715 [DEBUG] [Thread-133346] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:28:40.715 [DEBUG] [Thread-133346] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:28:40.715 [DEBUG] [Thread-133346] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:28:40.715 [DEBUG] [Thread-133346] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:28:40.715 [DEBUG] [Thread-133346] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:28:40.715 [DEBUG] [Thread-133346] [transport.py] [_log()] client lang: <none>
2025-12-31T19:28:40.715 [DEBUG] [Thread-133346] [transport.py] [_log()] server lang: <none>
2025-12-31T19:28:40.715 [DEBUG] [Thread-133346] [transport.py] [_log()] kex follows: False
2025-12-31T19:28:40.715 [DEBUG] [Thread-133346] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:28:40.715 [DEBUG] [Thread-133346] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:28:40.715 [DEBUG] [Thread-133346] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:28:40.715 [DEBUG] [Thread-133346] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:28:40.715 [DEBUG] [Thread-133346] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:28:40.716 [DEBUG] [Thread-133346] [transport.py] [_log()] Compression: none
2025-12-31T19:28:40.716 [DEBUG] [Thread-133346] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:28:40.774 [DEBUG] [Thread-133346] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:28:40.774 [DEBUG] [Thread-133346] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:28:40.774 [DEBUG] [Thread-133346] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T19:28:40.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T19:28:40.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:28:40.831 [DEBUG] [Thread-133346] [transport.py] [_log()] userauth is OK
2025-12-31T19:28:40.831 [DEBUG] [Thread-133346] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:28:40.831 [DEBUG] [Thread-133346] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:28:40.831 [DEBUG] [Thread-133346] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T19:28:40.831 [DEBUG] [Thread-133346] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:28:40.845 [INFO] [Thread-133346] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:28:40.845 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T19:28:40.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:28:41.538 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:28:41.539 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:28:41.673 [DEBUG] [Thread-133346] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:28:41.673 [DEBUG] [Thread-133346] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:28:41.721 [DEBUG] [Thread-133346] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:28:41.721 [DEBUG] [Thread-133346] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:28:41.729 [DEBUG] [Thread-133346] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:28:41.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:28: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')
2025-12-31T19:28:41.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T19:28:41.753 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:28:41.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:28:41.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:28:41.762 [DEBUG] [Thread-133346] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:28:50.426 [DEBUG] [Thread-133348 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:29:05.477 [DEBUG] [Thread-133349 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:29:11.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T19:29:11.773 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T19:29:11.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T19:29:12.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 19, 28, 47), 15.94, 35.35, 0.0, 13.23, 21.63, 0, 0, 0, 2, 0, 0),)
2025-12-31T19:29:12.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 19:28:47
2025-12-31T19:29:12.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T19:29:12.760 [DEBUG] [Thread-133350] [transport.py] [_log()] starting thread (client mode): 0xb6bbf1c0
2025-12-31T19:29:12.760 [DEBUG] [Thread-133350] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:29:12.782 [DEBUG] [Thread-133350] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T19:29:12.782 [INFO] [Thread-133350] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T19:29:12.785 [DEBUG] [Thread-133350] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:29:12.786 [DEBUG] [Thread-133350] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T19:29:12.786 [DEBUG] [Thread-133350] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:29:12.786 [DEBUG] [Thread-133350] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:29:12.786 [DEBUG] [Thread-133350] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:29:12.786 [DEBUG] [Thread-133350] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:29:12.786 [DEBUG] [Thread-133350] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:29:12.786 [DEBUG] [Thread-133350] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:29:12.786 [DEBUG] [Thread-133350] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:29:12.786 [DEBUG] [Thread-133350] [transport.py] [_log()] client lang: <none>
2025-12-31T19:29:12.786 [DEBUG] [Thread-133350] [transport.py] [_log()] server lang: <none>
2025-12-31T19:29:12.786 [DEBUG] [Thread-133350] [transport.py] [_log()] kex follows: False
2025-12-31T19:29:12.787 [DEBUG] [Thread-133350] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:29:12.787 [DEBUG] [Thread-133350] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:29:12.787 [DEBUG] [Thread-133350] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:29:12.787 [DEBUG] [Thread-133350] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:29:12.787 [DEBUG] [Thread-133350] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:29:12.787 [DEBUG] [Thread-133350] [transport.py] [_log()] Compression: none
2025-12-31T19:29:12.787 [DEBUG] [Thread-133350] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:29:12.809 [DEBUG] [Thread-133350] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:29:12.809 [DEBUG] [Thread-133350] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:29:12.810 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T19:29:12.810 [DEBUG] [Thread-133350] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T19:29:12.811 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:29:12.813 [DEBUG] [Thread-133350] [transport.py] [_log()] userauth is OK
2025-12-31T19:29:12.813 [DEBUG] [Thread-133350] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:29:12.813 [DEBUG] [Thread-133350] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:29:12.813 [DEBUG] [Thread-133350] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T19:29:12.814 [DEBUG] [Thread-133350] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:29:12.850 [INFO] [Thread-133350] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:29:12.851 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:29:13.511 [DEBUG] [Thread-133350] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:29:13.512 [DEBUG] [Thread-133350] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:29:13.512 [DEBUG] [Thread-133350] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T19:29:13.553 [DEBUG] [Thread-133350] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:29:13.553 [DEBUG] [Thread-133350] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:29:13.555 [DEBUG] [Thread-133350] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:29:13.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:29:13.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T19:29:13.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T19:29:13.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T19:29:13.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:29:13.577 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T19:29:13.578 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:29:13.578 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:29:13.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T19:29:13.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.727917 -999.00  +21.70  14.49     40   +7.50 1 2 1 1 1   887    0 12.44 -80.22 ----- 13.4 14.5 244.2 17.4 23.4 -20.0 23.4 -18.8 23.1 -19.6 23.3 -20.9
2025-12-31T19:29:13.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T19:29:13.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T19:29:13.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.727917
2025-12-31T19:29:13.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T19:29:13.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T19:29:13.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T19:29:13.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T19:29:13.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T19:29:13.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T19:28:47', tmtdew=15.94, humidity=35.35, cloud=0.0, wind=13.23, temperature=21.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T17:28:12.029', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T19:29:13.580 [DEBUG] [Thread-133350] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:29:13.662 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T19:29:13.674 [DEBUG] [Thread-133353] [transport.py] [_log()] starting thread (client mode): 0xb6bbf250
2025-12-31T19:29:13.674 [DEBUG] [Thread-133353] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:29:13.689 [DEBUG] [Thread-133353] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T19:29:13.689 [INFO] [Thread-133353] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T19:29:13.697 [DEBUG] [Thread-133353] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:29:13.697 [DEBUG] [Thread-133353] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T19:29:13.698 [DEBUG] [Thread-133353] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:29:13.698 [DEBUG] [Thread-133353] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:29:13.698 [DEBUG] [Thread-133353] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:29:13.698 [DEBUG] [Thread-133353] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:29:13.698 [DEBUG] [Thread-133353] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:29:13.698 [DEBUG] [Thread-133353] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:29:13.699 [DEBUG] [Thread-133353] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:29:13.699 [DEBUG] [Thread-133353] [transport.py] [_log()] client lang: <none>
2025-12-31T19:29:13.699 [DEBUG] [Thread-133353] [transport.py] [_log()] server lang: <none>
2025-12-31T19:29:13.699 [DEBUG] [Thread-133353] [transport.py] [_log()] kex follows: False
2025-12-31T19:29:13.699 [DEBUG] [Thread-133353] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:29:13.699 [DEBUG] [Thread-133353] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:29:13.699 [DEBUG] [Thread-133353] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:29:13.699 [DEBUG] [Thread-133353] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:29:13.699 [DEBUG] [Thread-133353] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:29:13.699 [DEBUG] [Thread-133353] [transport.py] [_log()] Compression: none
2025-12-31T19:29:13.699 [DEBUG] [Thread-133353] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:29:13.756 [DEBUG] [Thread-133353] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:29:13.756 [DEBUG] [Thread-133353] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:29:13.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T19:29:13.758 [DEBUG] [Thread-133353] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T19:29:13.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:29:13.812 [DEBUG] [Thread-133353] [transport.py] [_log()] userauth is OK
2025-12-31T19:29:13.812 [DEBUG] [Thread-133353] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:29:13.812 [DEBUG] [Thread-133353] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:29:13.813 [DEBUG] [Thread-133353] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T19:29:13.813 [DEBUG] [Thread-133353] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:29:13.831 [INFO] [Thread-133353] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:29:13.832 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T19:29:13.833 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:29:14.671 [DEBUG] [Thread-133353] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:29:14.672 [DEBUG] [Thread-133353] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:29:14.721 [DEBUG] [Thread-133353] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:29:14.721 [DEBUG] [Thread-133353] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:29:14.730 [DEBUG] [Thread-133353] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:29:14.740 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:29:14.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T19:29:14.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-12-31T19:29:14.759 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:29:14.759 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:29:14.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:29:14.767 [DEBUG] [Thread-133353] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:29:20.508 [DEBUG] [Thread-133355 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:29:33.878 [DEBUG] [Thread-133356 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:29:35.555 [DEBUG] [Thread-133357 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:29:41.677 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:29:41.678 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:29:44.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T19:29:44.790 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T19:29:44.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T19:29:45.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 19, 29, 19), 15.91, 35.42, 0.0, 11.75, 21.6, 0, 0, 0, 2, 0, 0),)
2025-12-31T19:29:45.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 19:29:19
2025-12-31T19:29:45.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T19:29:45.765 [DEBUG] [Thread-133358] [transport.py] [_log()] starting thread (client mode): 0xb6bbc490
2025-12-31T19:29:45.765 [DEBUG] [Thread-133358] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:29:45.786 [DEBUG] [Thread-133358] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T19:29:45.786 [INFO] [Thread-133358] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T19:29:45.788 [DEBUG] [Thread-133358] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:29:45.788 [DEBUG] [Thread-133358] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T19:29:45.788 [DEBUG] [Thread-133358] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:29:45.788 [DEBUG] [Thread-133358] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:29:45.789 [DEBUG] [Thread-133358] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:29:45.789 [DEBUG] [Thread-133358] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:29:45.789 [DEBUG] [Thread-133358] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:29:45.789 [DEBUG] [Thread-133358] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:29:45.789 [DEBUG] [Thread-133358] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:29:45.789 [DEBUG] [Thread-133358] [transport.py] [_log()] client lang: <none>
2025-12-31T19:29:45.789 [DEBUG] [Thread-133358] [transport.py] [_log()] server lang: <none>
2025-12-31T19:29:45.789 [DEBUG] [Thread-133358] [transport.py] [_log()] kex follows: False
2025-12-31T19:29:45.789 [DEBUG] [Thread-133358] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:29:45.789 [DEBUG] [Thread-133358] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:29:45.789 [DEBUG] [Thread-133358] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:29:45.789 [DEBUG] [Thread-133358] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:29:45.789 [DEBUG] [Thread-133358] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:29:45.790 [DEBUG] [Thread-133358] [transport.py] [_log()] Compression: none
2025-12-31T19:29:45.790 [DEBUG] [Thread-133358] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:29:45.799 [DEBUG] [Thread-133358] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:29:45.799 [DEBUG] [Thread-133358] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:29:45.800 [DEBUG] [Thread-133358] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T19:29:45.800 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T19:29:45.800 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:29:45.800 [DEBUG] [Thread-133358] [transport.py] [_log()] userauth is OK
2025-12-31T19:29:45.801 [DEBUG] [Thread-133358] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:29:45.801 [DEBUG] [Thread-133358] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:29:45.801 [DEBUG] [Thread-133358] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T19:29:45.801 [DEBUG] [Thread-133358] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:29:45.820 [INFO] [Thread-133358] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:29:45.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:29:46.463 [DEBUG] [Thread-133358] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:29:46.463 [DEBUG] [Thread-133358] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:29:46.464 [DEBUG] [Thread-133358] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T19:29:46.504 [DEBUG] [Thread-133358] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:29:46.505 [DEBUG] [Thread-133358] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:29:46.508 [DEBUG] [Thread-133358] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:29:46.516 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:29:46.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T19:29:46.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T19:29:46.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T19:29:46.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:29:46.529 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T19:29:46.529 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:29:46.529 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:29:46.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T19:29:46.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.728611 -999.00  +21.60  13.45     40   +7.60 1 2 1 1 1   887    0 12.38 -71.75 ----- 17.3 13.4 254.6 18.8 23.3 -19.7 23.4 -18.7 23.1 -19.4 23.2 -20.6
2025-12-31T19:29:46.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T19:29:46.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T19:29:46.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.728611
2025-12-31T19:29:46.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T19:29:46.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T19:29:46.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T19:29:46.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T19:29:46.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T19:29:46.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T19:29:19', tmtdew=15.91, humidity=35.42, cloud=0.0, wind=11.75, temperature=21.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T17:29:11.990', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T19:29:46.532 [DEBUG] [Thread-133358] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:29:46.615 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T19:29:46.626 [DEBUG] [Thread-133361] [transport.py] [_log()] starting thread (client mode): 0xb17475b0
2025-12-31T19:29:46.627 [DEBUG] [Thread-133361] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:29:46.641 [DEBUG] [Thread-133361] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T19:29:46.641 [INFO] [Thread-133361] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T19:29:46.649 [DEBUG] [Thread-133361] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:29:46.649 [DEBUG] [Thread-133361] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T19:29:46.649 [DEBUG] [Thread-133361] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:29:46.649 [DEBUG] [Thread-133361] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:29:46.650 [DEBUG] [Thread-133361] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:29:46.650 [DEBUG] [Thread-133361] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:29:46.650 [DEBUG] [Thread-133361] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:29:46.650 [DEBUG] [Thread-133361] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:29:46.650 [DEBUG] [Thread-133361] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:29:46.650 [DEBUG] [Thread-133361] [transport.py] [_log()] client lang: <none>
2025-12-31T19:29:46.650 [DEBUG] [Thread-133361] [transport.py] [_log()] server lang: <none>
2025-12-31T19:29:46.650 [DEBUG] [Thread-133361] [transport.py] [_log()] kex follows: False
2025-12-31T19:29:46.650 [DEBUG] [Thread-133361] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:29:46.651 [DEBUG] [Thread-133361] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:29:46.651 [DEBUG] [Thread-133361] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:29:46.651 [DEBUG] [Thread-133361] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:29:46.651 [DEBUG] [Thread-133361] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:29:46.651 [DEBUG] [Thread-133361] [transport.py] [_log()] Compression: none
2025-12-31T19:29:46.651 [DEBUG] [Thread-133361] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:29:46.708 [DEBUG] [Thread-133361] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:29:46.709 [DEBUG] [Thread-133361] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:29:46.710 [DEBUG] [Thread-133361] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T19:29:46.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T19:29:46.712 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:29:46.768 [DEBUG] [Thread-133361] [transport.py] [_log()] userauth is OK
2025-12-31T19:29:46.768 [DEBUG] [Thread-133361] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:29:46.768 [DEBUG] [Thread-133361] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:29:46.769 [DEBUG] [Thread-133361] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T19:29:46.769 [DEBUG] [Thread-133361] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:29:46.788 [INFO] [Thread-133361] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:29:46.788 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T19:29:46.789 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:29:47.619 [DEBUG] [Thread-133361] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:29:47.620 [DEBUG] [Thread-133361] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:29:47.668 [DEBUG] [Thread-133361] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:29:47.668 [DEBUG] [Thread-133361] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:29:47.678 [DEBUG] [Thread-133361] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:29:47.687 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:29: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-12-31T19:29: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-12-31T19:29:47.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:29:47.705 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:29:47.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:29:47.714 [DEBUG] [Thread-133361] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:29:50.595 [DEBUG] [Thread-133363 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:30:05.649 [DEBUG] [Thread-133364 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:30:17.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T19:30:17.723 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T19:30:17.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T19:30:18.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 19, 29, 51), 15.81, 35.42, 0.0, 15.47, 21.53, 0, 0, 0, 2, 0, 0),)
2025-12-31T19:30:18.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 19:29:51
2025-12-31T19:30:18.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T19:30:18.681 [DEBUG] [Thread-133365] [transport.py] [_log()] starting thread (client mode): 0xb175be50
2025-12-31T19:30:18.681 [DEBUG] [Thread-133365] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:30:18.702 [DEBUG] [Thread-133365] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T19:30:18.702 [INFO] [Thread-133365] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T19:30:18.706 [DEBUG] [Thread-133365] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:30:18.706 [DEBUG] [Thread-133365] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T19:30:18.706 [DEBUG] [Thread-133365] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:30:18.706 [DEBUG] [Thread-133365] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:30:18.706 [DEBUG] [Thread-133365] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:30:18.706 [DEBUG] [Thread-133365] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:30:18.706 [DEBUG] [Thread-133365] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:30:18.707 [DEBUG] [Thread-133365] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:30:18.707 [DEBUG] [Thread-133365] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:30:18.707 [DEBUG] [Thread-133365] [transport.py] [_log()] client lang: <none>
2025-12-31T19:30:18.707 [DEBUG] [Thread-133365] [transport.py] [_log()] server lang: <none>
2025-12-31T19:30:18.707 [DEBUG] [Thread-133365] [transport.py] [_log()] kex follows: False
2025-12-31T19:30:18.707 [DEBUG] [Thread-133365] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:30:18.707 [DEBUG] [Thread-133365] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:30:18.707 [DEBUG] [Thread-133365] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:30:18.707 [DEBUG] [Thread-133365] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:30:18.707 [DEBUG] [Thread-133365] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:30:18.707 [DEBUG] [Thread-133365] [transport.py] [_log()] Compression: none
2025-12-31T19:30:18.708 [DEBUG] [Thread-133365] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:30:18.726 [DEBUG] [Thread-133365] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:30:18.727 [DEBUG] [Thread-133365] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:30:18.728 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T19:30:18.729 [DEBUG] [Thread-133365] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T19:30:18.730 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:30:18.731 [DEBUG] [Thread-133365] [transport.py] [_log()] userauth is OK
2025-12-31T19:30:18.732 [DEBUG] [Thread-133365] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:30:18.732 [DEBUG] [Thread-133365] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:30:18.732 [DEBUG] [Thread-133365] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T19:30:18.732 [DEBUG] [Thread-133365] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:30:18.768 [INFO] [Thread-133365] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:30:18.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:30:19.399 [DEBUG] [Thread-133365] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:30:19.400 [DEBUG] [Thread-133365] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:30:19.400 [DEBUG] [Thread-133365] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T19:30:19.440 [DEBUG] [Thread-133365] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:30:19.440 [DEBUG] [Thread-133365] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:30:19.443 [DEBUG] [Thread-133365] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:30:19.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:30:19.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T19:30:19.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T19:30:19.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T19:30:19.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:30:19.470 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T19:30:19.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:30:19.470 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:30:19.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T19:30:19.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.728959 -999.00  +21.50  13.46     40   +7.60 1 2 1 1 1   887    0 12.37 -68.09 ----- 11.8 13.5 247.2 19.5 23.2 -19.6 23.2 -18.8 23.0 -19.4 23.2 -20.7
2025-12-31T19:30:19.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T19:30:19.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T19:30:19.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.728959
2025-12-31T19:30:19.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T19:30:19.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T19:30:19.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T19:30:19.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T19:30:19.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T19:30:19.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T19:29:51', tmtdew=15.81, humidity=35.42, cloud=0.0, wind=15.47, temperature=21.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T17:29:42.058', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T19:30:19.473 [DEBUG] [Thread-133365] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:30:19.557 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T19:30:19.570 [DEBUG] [Thread-133368] [transport.py] [_log()] starting thread (client mode): 0xb6bb03a0
2025-12-31T19:30:19.571 [DEBUG] [Thread-133368] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:30:19.586 [DEBUG] [Thread-133368] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T19:30:19.586 [INFO] [Thread-133368] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T19:30:19.593 [DEBUG] [Thread-133368] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:30:19.594 [DEBUG] [Thread-133368] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T19:30:19.594 [DEBUG] [Thread-133368] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:30:19.594 [DEBUG] [Thread-133368] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:30:19.594 [DEBUG] [Thread-133368] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:30:19.594 [DEBUG] [Thread-133368] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:30:19.594 [DEBUG] [Thread-133368] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:30:19.594 [DEBUG] [Thread-133368] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:30:19.594 [DEBUG] [Thread-133368] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:30:19.594 [DEBUG] [Thread-133368] [transport.py] [_log()] client lang: <none>
2025-12-31T19:30:19.594 [DEBUG] [Thread-133368] [transport.py] [_log()] server lang: <none>
2025-12-31T19:30:19.594 [DEBUG] [Thread-133368] [transport.py] [_log()] kex follows: False
2025-12-31T19:30:19.594 [DEBUG] [Thread-133368] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:30:19.594 [DEBUG] [Thread-133368] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:30:19.594 [DEBUG] [Thread-133368] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:30:19.594 [DEBUG] [Thread-133368] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:30:19.594 [DEBUG] [Thread-133368] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:30:19.594 [DEBUG] [Thread-133368] [transport.py] [_log()] Compression: none
2025-12-31T19:30:19.595 [DEBUG] [Thread-133368] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:30:19.652 [DEBUG] [Thread-133368] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:30:19.652 [DEBUG] [Thread-133368] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:30:19.653 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T19:30:19.653 [DEBUG] [Thread-133368] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T19:30:19.654 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:30:19.709 [DEBUG] [Thread-133368] [transport.py] [_log()] userauth is OK
2025-12-31T19:30:19.709 [DEBUG] [Thread-133368] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:30:19.709 [DEBUG] [Thread-133368] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:30:19.709 [DEBUG] [Thread-133368] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T19:30:19.709 [DEBUG] [Thread-133368] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:30:19.734 [INFO] [Thread-133368] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:30:19.735 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T19:30:19.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:30:20.559 [DEBUG] [Thread-133368] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:30:20.559 [DEBUG] [Thread-133368] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:30:20.607 [DEBUG] [Thread-133368] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:30:20.607 [DEBUG] [Thread-133368] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:30:20.616 [DEBUG] [Thread-133368] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:30:20.625 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:30:20.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T19:30:20.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T19:30:20.643 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:30:20.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:30:20.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:30:20.652 [DEBUG] [Thread-133368] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:30:20.684 [DEBUG] [Thread-133370 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:30:33.921 [DEBUG] [Thread-133371 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:30:35.731 [DEBUG] [Thread-133372 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:30:41.817 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:30:41.818 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:30:50.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T19:30:50.675 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T19:30:50.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T19:30:50.767 [DEBUG] [Thread-133373 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:30:51.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 19, 30, 23), 15.79, 35.47, 0.0, 14.95, 21.51, 0, 0, 0, 2, 0, 0),)
2025-12-31T19:30:51.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 19:30:23
2025-12-31T19:30:51.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T19:30:51.655 [DEBUG] [Thread-133374] [transport.py] [_log()] starting thread (client mode): 0xb6bbf040
2025-12-31T19:30:51.655 [DEBUG] [Thread-133374] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:30:51.668 [DEBUG] [Thread-133374] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T19:30:51.668 [INFO] [Thread-133374] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T19:30:51.671 [DEBUG] [Thread-133374] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:30:51.671 [DEBUG] [Thread-133374] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T19:30:51.671 [DEBUG] [Thread-133374] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:30:51.671 [DEBUG] [Thread-133374] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:30:51.671 [DEBUG] [Thread-133374] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:30:51.671 [DEBUG] [Thread-133374] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:30:51.671 [DEBUG] [Thread-133374] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:30:51.671 [DEBUG] [Thread-133374] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:30:51.671 [DEBUG] [Thread-133374] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:30:51.671 [DEBUG] [Thread-133374] [transport.py] [_log()] client lang: <none>
2025-12-31T19:30:51.671 [DEBUG] [Thread-133374] [transport.py] [_log()] server lang: <none>
2025-12-31T19:30:51.671 [DEBUG] [Thread-133374] [transport.py] [_log()] kex follows: False
2025-12-31T19:30:51.672 [DEBUG] [Thread-133374] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:30:51.672 [DEBUG] [Thread-133374] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:30:51.672 [DEBUG] [Thread-133374] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:30:51.672 [DEBUG] [Thread-133374] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:30:51.672 [DEBUG] [Thread-133374] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:30:51.672 [DEBUG] [Thread-133374] [transport.py] [_log()] Compression: none
2025-12-31T19:30:51.672 [DEBUG] [Thread-133374] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:30:51.690 [DEBUG] [Thread-133374] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:30:51.690 [DEBUG] [Thread-133374] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:30:51.691 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T19:30:51.691 [DEBUG] [Thread-133374] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T19:30:51.692 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:30:51.694 [DEBUG] [Thread-133374] [transport.py] [_log()] userauth is OK
2025-12-31T19:30:51.695 [DEBUG] [Thread-133374] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:30:51.695 [DEBUG] [Thread-133374] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:30:51.695 [DEBUG] [Thread-133374] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T19:30:51.695 [DEBUG] [Thread-133374] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:30:51.721 [INFO] [Thread-133374] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:30:51.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:30:52.375 [DEBUG] [Thread-133374] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:30:52.375 [DEBUG] [Thread-133374] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:30:52.376 [DEBUG] [Thread-133374] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T19:30:52.416 [DEBUG] [Thread-133374] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:30:52.416 [DEBUG] [Thread-133374] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:30:52.419 [DEBUG] [Thread-133374] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:30:52.430 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:30:52.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T19:30:52.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T19:30:52.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T19:30:52.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:30:52.442 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T19:30:52.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:30:52.442 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:30:52.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T19:30:52.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.729306 -999.00  +21.50   8.68     40   +7.50 1 2 1 1 1   887    0 12.62 -61.70 ----- 14.3 8.7 253.6 17.6 23.2 -19.2 23.2 -18.6 22.9 -19.2 23.1 -20.4
2025-12-31T19:30:52.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T19:30:52.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T19:30:52.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.729306
2025-12-31T19:30:52.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T19:30:52.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T19:30:52.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T19:30:52.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T19:30:52.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T19:30:52.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T19:30:23', tmtdew=15.79, humidity=35.47, cloud=0.0, wind=14.95, temperature=21.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T17:30:12.038', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T19:30:52.445 [DEBUG] [Thread-133374] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:30:52.528 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T19:30:52.541 [DEBUG] [Thread-133377] [transport.py] [_log()] starting thread (client mode): 0xb6bb2230
2025-12-31T19:30:52.541 [DEBUG] [Thread-133377] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:30:52.556 [DEBUG] [Thread-133377] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T19:30:52.556 [INFO] [Thread-133377] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T19:30:52.563 [DEBUG] [Thread-133377] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:30:52.563 [DEBUG] [Thread-133377] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T19:30:52.564 [DEBUG] [Thread-133377] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:30:52.564 [DEBUG] [Thread-133377] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:30:52.564 [DEBUG] [Thread-133377] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:30:52.564 [DEBUG] [Thread-133377] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:30:52.564 [DEBUG] [Thread-133377] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:30:52.564 [DEBUG] [Thread-133377] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:30:52.564 [DEBUG] [Thread-133377] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:30:52.564 [DEBUG] [Thread-133377] [transport.py] [_log()] client lang: <none>
2025-12-31T19:30:52.564 [DEBUG] [Thread-133377] [transport.py] [_log()] server lang: <none>
2025-12-31T19:30:52.564 [DEBUG] [Thread-133377] [transport.py] [_log()] kex follows: False
2025-12-31T19:30:52.564 [DEBUG] [Thread-133377] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:30:52.564 [DEBUG] [Thread-133377] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:30:52.564 [DEBUG] [Thread-133377] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:30:52.564 [DEBUG] [Thread-133377] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:30:52.564 [DEBUG] [Thread-133377] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:30:52.564 [DEBUG] [Thread-133377] [transport.py] [_log()] Compression: none
2025-12-31T19:30:52.564 [DEBUG] [Thread-133377] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:30:52.623 [DEBUG] [Thread-133377] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:30:52.624 [DEBUG] [Thread-133377] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:30:52.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T19:30:52.625 [DEBUG] [Thread-133377] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T19:30:52.626 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:30:52.680 [DEBUG] [Thread-133377] [transport.py] [_log()] userauth is OK
2025-12-31T19:30:52.680 [DEBUG] [Thread-133377] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:30:52.680 [DEBUG] [Thread-133377] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:30:52.681 [DEBUG] [Thread-133377] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T19:30:52.681 [DEBUG] [Thread-133377] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:30:52.699 [INFO] [Thread-133377] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:30: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-12-31T19:30:52.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:30:53.518 [DEBUG] [Thread-133377] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:30:53.518 [DEBUG] [Thread-133377] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:30:53.566 [DEBUG] [Thread-133377] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:30:53.566 [DEBUG] [Thread-133377] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:30:53.575 [DEBUG] [Thread-133377] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:30:53.585 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:30: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')
2025-12-31T19:30:53.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T19:30:53.603 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:30:53.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:30:53.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:30:53.613 [DEBUG] [Thread-133377] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:31:05.797 [DEBUG] [Thread-133379 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:31:20.845 [DEBUG] [Thread-133380 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:31:23.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T19:31:23.635 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T19:31:23.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T19:31:24.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 19, 30, 55), 15.88, 35.47, 0.0, 13.8, 21.51, 0, 0, 0, 2, 0, 0),)
2025-12-31T19:31:24.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 19:30:55
2025-12-31T19:31:24.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T19:31:24.622 [DEBUG] [Thread-133381] [transport.py] [_log()] starting thread (client mode): 0xb175bcd0
2025-12-31T19:31:24.622 [DEBUG] [Thread-133381] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:31:24.642 [DEBUG] [Thread-133381] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T19:31:24.643 [INFO] [Thread-133381] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T19:31:24.646 [DEBUG] [Thread-133381] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:31:24.646 [DEBUG] [Thread-133381] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T19:31:24.646 [DEBUG] [Thread-133381] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:31:24.646 [DEBUG] [Thread-133381] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:31:24.647 [DEBUG] [Thread-133381] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:31:24.647 [DEBUG] [Thread-133381] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:31:24.647 [DEBUG] [Thread-133381] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:31:24.647 [DEBUG] [Thread-133381] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:31:24.647 [DEBUG] [Thread-133381] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:31:24.647 [DEBUG] [Thread-133381] [transport.py] [_log()] client lang: <none>
2025-12-31T19:31:24.647 [DEBUG] [Thread-133381] [transport.py] [_log()] server lang: <none>
2025-12-31T19:31:24.647 [DEBUG] [Thread-133381] [transport.py] [_log()] kex follows: False
2025-12-31T19:31:24.647 [DEBUG] [Thread-133381] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:31:24.647 [DEBUG] [Thread-133381] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:31:24.647 [DEBUG] [Thread-133381] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:31:24.647 [DEBUG] [Thread-133381] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:31:24.647 [DEBUG] [Thread-133381] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:31:24.648 [DEBUG] [Thread-133381] [transport.py] [_log()] Compression: none
2025-12-31T19:31:24.648 [DEBUG] [Thread-133381] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:31:24.666 [DEBUG] [Thread-133381] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:31:24.666 [DEBUG] [Thread-133381] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:31:24.667 [DEBUG] [Thread-133381] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T19:31:24.667 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T19:31:24.668 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:31:24.669 [DEBUG] [Thread-133381] [transport.py] [_log()] userauth is OK
2025-12-31T19:31:24.669 [DEBUG] [Thread-133381] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:31:24.669 [DEBUG] [Thread-133381] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:31:24.669 [DEBUG] [Thread-133381] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T19:31:24.669 [DEBUG] [Thread-133381] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:31:24.693 [INFO] [Thread-133381] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:31:24.694 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:31:25.276 [DEBUG] [Thread-133381] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:31:25.276 [DEBUG] [Thread-133381] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:31:25.276 [DEBUG] [Thread-133381] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T19:31:25.317 [DEBUG] [Thread-133381] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:31:25.317 [DEBUG] [Thread-133381] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:31:25.320 [DEBUG] [Thread-133381] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:31:25.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:31:25.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T19:31:25.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T19:31:25.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T19:31:25.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:31:25.342 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T19:31:25.343 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:31:25.343 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:31:25.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T19:31:25.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.729653 -999.00  +21.50  19.48     40   +7.50 1 2 1 1 1   887    0 12.95 -60.20 ----- 15.8 19.5 258.6 22.1 23.2 -19.3 23.2 -18.7 22.9 -19.3 23.1 -20.5
2025-12-31T19:31:25.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T19:31:25.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T19:31:25.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.729653
2025-12-31T19:31:25.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T19:31:25.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T19:31:25.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T19:31:25.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T19:31:25.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T19:31:25.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T19:30:55', tmtdew=15.88, humidity=35.47, cloud=0.0, wind=13.8, temperature=21.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T17:30:42.019', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T19:31:25.345 [DEBUG] [Thread-133381] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:31:25.427 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T19:31:25.439 [DEBUG] [Thread-133384] [transport.py] [_log()] starting thread (client mode): 0xb6bba1a0
2025-12-31T19:31:25.439 [DEBUG] [Thread-133384] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:31:25.453 [DEBUG] [Thread-133384] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T19:31:25.453 [INFO] [Thread-133384] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T19:31:25.461 [DEBUG] [Thread-133384] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:31:25.461 [DEBUG] [Thread-133384] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T19:31:25.461 [DEBUG] [Thread-133384] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:31:25.461 [DEBUG] [Thread-133384] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:31:25.461 [DEBUG] [Thread-133384] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:31:25.461 [DEBUG] [Thread-133384] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:31:25.461 [DEBUG] [Thread-133384] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:31:25.461 [DEBUG] [Thread-133384] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:31:25.461 [DEBUG] [Thread-133384] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:31:25.461 [DEBUG] [Thread-133384] [transport.py] [_log()] client lang: <none>
2025-12-31T19:31:25.461 [DEBUG] [Thread-133384] [transport.py] [_log()] server lang: <none>
2025-12-31T19:31:25.461 [DEBUG] [Thread-133384] [transport.py] [_log()] kex follows: False
2025-12-31T19:31:25.461 [DEBUG] [Thread-133384] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:31:25.461 [DEBUG] [Thread-133384] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:31:25.461 [DEBUG] [Thread-133384] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:31:25.461 [DEBUG] [Thread-133384] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:31:25.462 [DEBUG] [Thread-133384] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:31:25.462 [DEBUG] [Thread-133384] [transport.py] [_log()] Compression: none
2025-12-31T19:31:25.462 [DEBUG] [Thread-133384] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:31:25.519 [DEBUG] [Thread-133384] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:31:25.519 [DEBUG] [Thread-133384] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:31:25.520 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T19:31:25.520 [DEBUG] [Thread-133384] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T19:31:25.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:31:25.575 [DEBUG] [Thread-133384] [transport.py] [_log()] userauth is OK
2025-12-31T19:31:25.575 [DEBUG] [Thread-133384] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:31:25.575 [DEBUG] [Thread-133384] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:31:25.575 [DEBUG] [Thread-133384] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T19:31:25.575 [DEBUG] [Thread-133384] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:31:25.595 [INFO] [Thread-133384] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:31:25.595 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T19:31:25.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:31:26.414 [DEBUG] [Thread-133384] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:31:26.414 [DEBUG] [Thread-133384] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:31:26.462 [DEBUG] [Thread-133384] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:31:26.462 [DEBUG] [Thread-133384] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:31:26.471 [DEBUG] [Thread-133384] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:31:26.480 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:31:26.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T19:31:26.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-12-31T19:31:26.499 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:31:26.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:31:26.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:31:26.508 [DEBUG] [Thread-133384] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:31:33.969 [DEBUG] [Thread-133386 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:31:35.880 [DEBUG] [Thread-133387 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:31:41.957 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:31:41.958 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:31:50.939 [DEBUG] [Thread-133388 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:31:56.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T19:31:56.530 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T19:31:56.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T19:31:57.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 19, 31, 27), 15.89, 35.45, 0.0, 17.36, 21.55, 0, 0, 0, 2, 0, 0),)
2025-12-31T19:31:57.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 19:31:27
2025-12-31T19:31:57.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T19:31:57.544 [DEBUG] [Thread-133389] [transport.py] [_log()] starting thread (client mode): 0xb9590d90
2025-12-31T19:31:57.544 [DEBUG] [Thread-133389] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:31:57.569 [DEBUG] [Thread-133389] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T19:31:57.569 [INFO] [Thread-133389] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T19:31:57.571 [DEBUG] [Thread-133389] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:31:57.571 [DEBUG] [Thread-133389] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T19:31:57.571 [DEBUG] [Thread-133389] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:31:57.571 [DEBUG] [Thread-133389] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:31:57.571 [DEBUG] [Thread-133389] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:31:57.572 [DEBUG] [Thread-133389] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:31:57.572 [DEBUG] [Thread-133389] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:31:57.572 [DEBUG] [Thread-133389] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:31:57.572 [DEBUG] [Thread-133389] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:31:57.572 [DEBUG] [Thread-133389] [transport.py] [_log()] client lang: <none>
2025-12-31T19:31:57.572 [DEBUG] [Thread-133389] [transport.py] [_log()] server lang: <none>
2025-12-31T19:31:57.572 [DEBUG] [Thread-133389] [transport.py] [_log()] kex follows: False
2025-12-31T19:31:57.572 [DEBUG] [Thread-133389] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:31:57.572 [DEBUG] [Thread-133389] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:31:57.572 [DEBUG] [Thread-133389] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:31:57.572 [DEBUG] [Thread-133389] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:31:57.572 [DEBUG] [Thread-133389] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:31:57.573 [DEBUG] [Thread-133389] [transport.py] [_log()] Compression: none
2025-12-31T19:31:57.573 [DEBUG] [Thread-133389] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:31:57.585 [DEBUG] [Thread-133389] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:31:57.586 [DEBUG] [Thread-133389] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:31:57.586 [DEBUG] [Thread-133389] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T19:31:57.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T19:31:57.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:31:57.588 [DEBUG] [Thread-133389] [transport.py] [_log()] userauth is OK
2025-12-31T19:31:57.588 [DEBUG] [Thread-133389] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:31:57.588 [DEBUG] [Thread-133389] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:31:57.588 [DEBUG] [Thread-133389] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T19:31:57.588 [DEBUG] [Thread-133389] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:31:57.612 [INFO] [Thread-133389] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:31:57.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:31:58.293 [DEBUG] [Thread-133389] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:31:58.294 [DEBUG] [Thread-133389] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:31:58.294 [DEBUG] [Thread-133389] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T19:31:58.335 [DEBUG] [Thread-133389] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:31:58.335 [DEBUG] [Thread-133389] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:31:58.339 [DEBUG] [Thread-133389] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:31:58.352 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:31:58.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T19:31:58.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T19:31:58.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T19:31:58.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:31:58.363 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T19:31:58.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:31:58.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:31:58.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T19:31:58.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.730000 -999.00  +21.50  16.72     40   +7.50 1 2 1 1 1   887    0 12.78 -56.18 ----- 14.7 16.7 263.6 21.0 23.2 -19.5 23.2 -18.7 22.8 -19.3 23.1 -20.3
2025-12-31T19:31:58.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T19:31:58.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T19:31:58.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.730000
2025-12-31T19:31:58.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T19:31:58.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T19:31:58.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T19:31:58.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T19:31:58.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T19:31:58.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T19:31:27', tmtdew=15.89, humidity=35.45, cloud=0.0, wind=17.36, temperature=21.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T17:31:12.000', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T19:31:58.366 [DEBUG] [Thread-133389] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:31:58.450 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T19:31:58.463 [DEBUG] [Thread-133392] [transport.py] [_log()] starting thread (client mode): 0xb6bbf6d0
2025-12-31T19:31:58.463 [DEBUG] [Thread-133392] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:31:58.480 [DEBUG] [Thread-133392] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T19:31:58.481 [INFO] [Thread-133392] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T19:31:58.488 [DEBUG] [Thread-133392] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:31:58.489 [DEBUG] [Thread-133392] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T19:31:58.489 [DEBUG] [Thread-133392] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:31:58.489 [DEBUG] [Thread-133392] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:31:58.489 [DEBUG] [Thread-133392] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:31:58.489 [DEBUG] [Thread-133392] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:31:58.489 [DEBUG] [Thread-133392] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:31:58.489 [DEBUG] [Thread-133392] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:31:58.489 [DEBUG] [Thread-133392] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:31:58.489 [DEBUG] [Thread-133392] [transport.py] [_log()] client lang: <none>
2025-12-31T19:31:58.489 [DEBUG] [Thread-133392] [transport.py] [_log()] server lang: <none>
2025-12-31T19:31:58.489 [DEBUG] [Thread-133392] [transport.py] [_log()] kex follows: False
2025-12-31T19:31:58.489 [DEBUG] [Thread-133392] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:31:58.489 [DEBUG] [Thread-133392] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:31:58.489 [DEBUG] [Thread-133392] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:31:58.490 [DEBUG] [Thread-133392] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:31:58.490 [DEBUG] [Thread-133392] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:31:58.490 [DEBUG] [Thread-133392] [transport.py] [_log()] Compression: none
2025-12-31T19:31:58.490 [DEBUG] [Thread-133392] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:31:58.547 [DEBUG] [Thread-133392] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:31:58.548 [DEBUG] [Thread-133392] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:31:58.549 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T19:31:58.549 [DEBUG] [Thread-133392] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T19:31:58.550 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:31:58.604 [DEBUG] [Thread-133392] [transport.py] [_log()] userauth is OK
2025-12-31T19:31:58.604 [DEBUG] [Thread-133392] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:31:58.604 [DEBUG] [Thread-133392] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:31:58.605 [DEBUG] [Thread-133392] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T19:31:58.605 [DEBUG] [Thread-133392] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:31:58.623 [INFO] [Thread-133392] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:31:58.623 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T19:31:58.624 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:31:59.441 [DEBUG] [Thread-133392] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:31:59.442 [DEBUG] [Thread-133392] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:31:59.493 [DEBUG] [Thread-133392] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:31:59.493 [DEBUG] [Thread-133392] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:31:59.502 [DEBUG] [Thread-133392] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:31:59.511 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:31:59.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T19:31:59.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T19:31:59.530 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:31:59.530 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:31:59.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:31:59.539 [DEBUG] [Thread-133392] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:32:05.970 [DEBUG] [Thread-133394 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:32:21.024 [DEBUG] [Thread-133395 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:32:29.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T19:32:29.561 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T19:32:29.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T19:32:30.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 19, 31, 59), 15.88, 35.47, 0.0, 19.69, 21.58, 0, 0, 0, 2, 0, 0),)
2025-12-31T19:32:30.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 19:31:59
2025-12-31T19:32:30.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T19:32:30.561 [DEBUG] [Thread-133396] [transport.py] [_log()] starting thread (client mode): 0xb6bbf4c0
2025-12-31T19:32:30.562 [DEBUG] [Thread-133396] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:32:30.586 [DEBUG] [Thread-133396] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T19:32:30.586 [INFO] [Thread-133396] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T19:32:30.590 [DEBUG] [Thread-133396] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:32:30.590 [DEBUG] [Thread-133396] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T19:32:30.590 [DEBUG] [Thread-133396] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:32:30.590 [DEBUG] [Thread-133396] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:32:30.590 [DEBUG] [Thread-133396] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:32:30.590 [DEBUG] [Thread-133396] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:32:30.590 [DEBUG] [Thread-133396] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:32:30.590 [DEBUG] [Thread-133396] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:32:30.590 [DEBUG] [Thread-133396] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:32:30.590 [DEBUG] [Thread-133396] [transport.py] [_log()] client lang: <none>
2025-12-31T19:32:30.590 [DEBUG] [Thread-133396] [transport.py] [_log()] server lang: <none>
2025-12-31T19:32:30.590 [DEBUG] [Thread-133396] [transport.py] [_log()] kex follows: False
2025-12-31T19:32:30.590 [DEBUG] [Thread-133396] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:32:30.590 [DEBUG] [Thread-133396] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:32:30.590 [DEBUG] [Thread-133396] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:32:30.590 [DEBUG] [Thread-133396] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:32:30.590 [DEBUG] [Thread-133396] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:32:30.590 [DEBUG] [Thread-133396] [transport.py] [_log()] Compression: none
2025-12-31T19:32:30.590 [DEBUG] [Thread-133396] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:32:30.604 [DEBUG] [Thread-133396] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:32:30.604 [DEBUG] [Thread-133396] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:32:30.604 [DEBUG] [Thread-133396] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T19:32:30.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T19:32:30.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:32:30.605 [DEBUG] [Thread-133396] [transport.py] [_log()] userauth is OK
2025-12-31T19:32:30.605 [DEBUG] [Thread-133396] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:32:30.605 [DEBUG] [Thread-133396] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:32:30.605 [DEBUG] [Thread-133396] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T19:32:30.605 [DEBUG] [Thread-133396] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:32:30.620 [INFO] [Thread-133396] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:32:30.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:32:31.267 [DEBUG] [Thread-133396] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:32:31.267 [DEBUG] [Thread-133396] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:32:31.267 [DEBUG] [Thread-133396] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T19:32:31.309 [DEBUG] [Thread-133396] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:32:31.309 [DEBUG] [Thread-133396] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:32:31.310 [DEBUG] [Thread-133396] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:32:31.322 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:32:31.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T19:32:31.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T19:32:31.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T19:32:31.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:32:31.328 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T19:32:31.328 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:32:31.328 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:32:31.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T19:32:31.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.730348 -999.00  +21.50  14.80     40   +7.60 1 2 1 1 1   887    0 12.86 -53.28 ----- 12.7 14.8 246.4 18.7 23.1 -19.6 23.2 -18.9 22.8 -19.4 22.9 -20.4
2025-12-31T19:32:31.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T19:32:31.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T19:32:31.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.730348
2025-12-31T19:32:31.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T19:32:31.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T19:32:31.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T19:32:31.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T19:32:31.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T19:32:31.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T19:31:59', tmtdew=15.88, humidity=35.47, cloud=0.0, wind=19.69, temperature=21.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T17:31:42.067', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T19:32:31.329 [DEBUG] [Thread-133396] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:32:31.404 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T19:32:31.417 [DEBUG] [Thread-133399] [transport.py] [_log()] starting thread (client mode): 0xb95d5360
2025-12-31T19:32:31.417 [DEBUG] [Thread-133399] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:32:31.431 [DEBUG] [Thread-133399] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T19:32:31.431 [INFO] [Thread-133399] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T19:32:31.438 [DEBUG] [Thread-133399] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:32:31.438 [DEBUG] [Thread-133399] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T19:32:31.438 [DEBUG] [Thread-133399] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:32:31.438 [DEBUG] [Thread-133399] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:32:31.438 [DEBUG] [Thread-133399] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:32:31.438 [DEBUG] [Thread-133399] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:32:31.438 [DEBUG] [Thread-133399] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:32:31.439 [DEBUG] [Thread-133399] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:32:31.439 [DEBUG] [Thread-133399] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:32:31.439 [DEBUG] [Thread-133399] [transport.py] [_log()] client lang: <none>
2025-12-31T19:32:31.439 [DEBUG] [Thread-133399] [transport.py] [_log()] server lang: <none>
2025-12-31T19:32:31.439 [DEBUG] [Thread-133399] [transport.py] [_log()] kex follows: False
2025-12-31T19:32:31.439 [DEBUG] [Thread-133399] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:32:31.439 [DEBUG] [Thread-133399] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:32:31.439 [DEBUG] [Thread-133399] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:32:31.439 [DEBUG] [Thread-133399] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:32:31.439 [DEBUG] [Thread-133399] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:32:31.439 [DEBUG] [Thread-133399] [transport.py] [_log()] Compression: none
2025-12-31T19:32:31.439 [DEBUG] [Thread-133399] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:32:31.494 [DEBUG] [Thread-133399] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:32:31.494 [DEBUG] [Thread-133399] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:32:31.495 [DEBUG] [Thread-133399] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T19:32:31.495 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T19:32:31.495 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:32:31.551 [DEBUG] [Thread-133399] [transport.py] [_log()] userauth is OK
2025-12-31T19:32:31.551 [DEBUG] [Thread-133399] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:32:31.551 [DEBUG] [Thread-133399] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:32:31.551 [DEBUG] [Thread-133399] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T19:32:31.551 [DEBUG] [Thread-133399] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:32:31.569 [INFO] [Thread-133399] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:32:31.569 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T19:32:31.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:32:32.397 [DEBUG] [Thread-133399] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:32:32.397 [DEBUG] [Thread-133399] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:32:32.445 [DEBUG] [Thread-133399] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:32:32.445 [DEBUG] [Thread-133399] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:32:32.454 [DEBUG] [Thread-133399] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:32:32.462 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:32:32.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T19:32:32.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-12-31T19:32:32.477 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:32:32.478 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:32:32.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:32:32.485 [DEBUG] [Thread-133399] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:32:34.013 [DEBUG] [Thread-133401 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:32:36.056 [DEBUG] [Thread-133402 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:32:42.097 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:32:42.098 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:32:51.098 [DEBUG] [Thread-133403 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:33:02.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T19:33:02.507 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T19:33:02.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T19:33:03.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 19, 32, 31), 15.87, 35.49, 0.0, 16.04, 21.56, 0, 0, 0, 2, 0, 0),)
2025-12-31T19:33:03.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 19:32:31
2025-12-31T19:33:03.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T19:33:03.487 [DEBUG] [Thread-133404] [transport.py] [_log()] starting thread (client mode): 0xb6bb93f0
2025-12-31T19:33:03.487 [DEBUG] [Thread-133404] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:33:03.509 [DEBUG] [Thread-133404] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T19:33:03.510 [INFO] [Thread-133404] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T19:33:03.513 [DEBUG] [Thread-133404] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:33:03.513 [DEBUG] [Thread-133404] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T19:33:03.514 [DEBUG] [Thread-133404] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:33:03.514 [DEBUG] [Thread-133404] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:33:03.514 [DEBUG] [Thread-133404] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:33:03.514 [DEBUG] [Thread-133404] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:33:03.514 [DEBUG] [Thread-133404] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:33:03.514 [DEBUG] [Thread-133404] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:33:03.514 [DEBUG] [Thread-133404] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:33:03.514 [DEBUG] [Thread-133404] [transport.py] [_log()] client lang: <none>
2025-12-31T19:33:03.514 [DEBUG] [Thread-133404] [transport.py] [_log()] server lang: <none>
2025-12-31T19:33:03.514 [DEBUG] [Thread-133404] [transport.py] [_log()] kex follows: False
2025-12-31T19:33:03.514 [DEBUG] [Thread-133404] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:33:03.514 [DEBUG] [Thread-133404] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:33:03.515 [DEBUG] [Thread-133404] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:33:03.515 [DEBUG] [Thread-133404] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:33:03.515 [DEBUG] [Thread-133404] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:33:03.515 [DEBUG] [Thread-133404] [transport.py] [_log()] Compression: none
2025-12-31T19:33:03.515 [DEBUG] [Thread-133404] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:33:03.527 [DEBUG] [Thread-133404] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:33:03.527 [DEBUG] [Thread-133404] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:33:03.528 [DEBUG] [Thread-133404] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T19:33:03.528 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T19:33:03.528 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:33:03.531 [DEBUG] [Thread-133404] [transport.py] [_log()] userauth is OK
2025-12-31T19:33:03.531 [DEBUG] [Thread-133404] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:33:03.531 [DEBUG] [Thread-133404] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:33:03.531 [DEBUG] [Thread-133404] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T19:33:03.531 [DEBUG] [Thread-133404] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:33:03.546 [INFO] [Thread-133404] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:33:03.547 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:33:04.223 [DEBUG] [Thread-133404] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:33:04.223 [DEBUG] [Thread-133404] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:33:04.223 [DEBUG] [Thread-133404] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T19:33:04.265 [DEBUG] [Thread-133404] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:33:04.265 [DEBUG] [Thread-133404] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:33:04.267 [DEBUG] [Thread-133404] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:33:04.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:33:04.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T19:33:04.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T19:33:04.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T19:33:04.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:33:04.287 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T19:33:04.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:33:04.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:33:04.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T19:33:04.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.730695 -999.00  +21.40  13.13     40   +7.60 1 2 1 1 1   887    0 12.84 -50.92 ----- 12.5 13.1 250.1 18.9 23.1 -19.4 23.1 -18.8 22.8 -19.3 22.9 -20.3
2025-12-31T19:33:04.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T19:33:04.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T19:33:04.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.730695
2025-12-31T19:33:04.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T19:33:04.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T19:33:04.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T19:33:04.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T19:33:04.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T19:33:04.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T19:32:31', tmtdew=15.87, humidity=35.49, cloud=0.0, wind=16.04, temperature=21.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T17:32:12.048', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T19:33:04.288 [DEBUG] [Thread-133404] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:33: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-12-31T19:33:04.373 [DEBUG] [Thread-133407] [transport.py] [_log()] starting thread (client mode): 0xb6bbfca0
2025-12-31T19:33:04.373 [DEBUG] [Thread-133407] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:33:04.390 [DEBUG] [Thread-133407] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T19:33:04.390 [INFO] [Thread-133407] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T19:33:04.398 [DEBUG] [Thread-133407] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:33:04.398 [DEBUG] [Thread-133407] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T19:33:04.398 [DEBUG] [Thread-133407] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:33:04.398 [DEBUG] [Thread-133407] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:33:04.398 [DEBUG] [Thread-133407] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:33:04.398 [DEBUG] [Thread-133407] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:33:04.398 [DEBUG] [Thread-133407] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:33:04.398 [DEBUG] [Thread-133407] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:33:04.398 [DEBUG] [Thread-133407] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:33:04.398 [DEBUG] [Thread-133407] [transport.py] [_log()] client lang: <none>
2025-12-31T19:33:04.398 [DEBUG] [Thread-133407] [transport.py] [_log()] server lang: <none>
2025-12-31T19:33:04.398 [DEBUG] [Thread-133407] [transport.py] [_log()] kex follows: False
2025-12-31T19:33:04.398 [DEBUG] [Thread-133407] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:33:04.398 [DEBUG] [Thread-133407] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:33:04.398 [DEBUG] [Thread-133407] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:33:04.398 [DEBUG] [Thread-133407] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:33:04.398 [DEBUG] [Thread-133407] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:33:04.398 [DEBUG] [Thread-133407] [transport.py] [_log()] Compression: none
2025-12-31T19:33:04.398 [DEBUG] [Thread-133407] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:33:04.454 [DEBUG] [Thread-133407] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:33:04.454 [DEBUG] [Thread-133407] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:33:04.454 [DEBUG] [Thread-133407] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T19:33:04.454 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T19:33:04.455 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:33:04.511 [DEBUG] [Thread-133407] [transport.py] [_log()] userauth is OK
2025-12-31T19:33:04.511 [DEBUG] [Thread-133407] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:33:04.511 [DEBUG] [Thread-133407] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:33:04.511 [DEBUG] [Thread-133407] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T19:33:04.511 [DEBUG] [Thread-133407] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:33:04.530 [INFO] [Thread-133407] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:33: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-12-31T19:33:04.530 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:33:05.343 [DEBUG] [Thread-133407] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:33:05.343 [DEBUG] [Thread-133407] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:33:05.390 [DEBUG] [Thread-133407] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:33:05.390 [DEBUG] [Thread-133407] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:33:05.398 [DEBUG] [Thread-133407] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:33:05.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:33:05.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T19:33:05.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T19:33:05.422 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:33:05.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:33:05.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:33:05.430 [DEBUG] [Thread-133407] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:33:06.137 [DEBUG] [Thread-133409 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:33:21.189 [DEBUG] [Thread-133410 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:33:34.062 [DEBUG] [Thread-133411 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:33:35.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T19:33:35.452 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T19:33: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-12-31T19:33:36.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 19, 33, 4), 15.88, 35.49, 0.0, 16.68, 21.58, 0, 0, 0, 2, 0, 0),)
2025-12-31T19:33:36.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 19:33:04
2025-12-31T19:33:36.223 [DEBUG] [Thread-133412 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:33:36.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T19:33:36.463 [DEBUG] [Thread-133413] [transport.py] [_log()] starting thread (client mode): 0xb1764610
2025-12-31T19:33:36.464 [DEBUG] [Thread-133413] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:33:36.485 [DEBUG] [Thread-133413] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T19:33:36.485 [INFO] [Thread-133413] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T19:33:36.488 [DEBUG] [Thread-133413] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:33:36.488 [DEBUG] [Thread-133413] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T19:33:36.488 [DEBUG] [Thread-133413] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:33:36.488 [DEBUG] [Thread-133413] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:33:36.489 [DEBUG] [Thread-133413] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:33:36.489 [DEBUG] [Thread-133413] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:33:36.489 [DEBUG] [Thread-133413] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:33:36.489 [DEBUG] [Thread-133413] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:33:36.489 [DEBUG] [Thread-133413] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:33:36.489 [DEBUG] [Thread-133413] [transport.py] [_log()] client lang: <none>
2025-12-31T19:33:36.489 [DEBUG] [Thread-133413] [transport.py] [_log()] server lang: <none>
2025-12-31T19:33:36.489 [DEBUG] [Thread-133413] [transport.py] [_log()] kex follows: False
2025-12-31T19:33:36.489 [DEBUG] [Thread-133413] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:33:36.489 [DEBUG] [Thread-133413] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:33:36.489 [DEBUG] [Thread-133413] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:33:36.489 [DEBUG] [Thread-133413] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:33:36.489 [DEBUG] [Thread-133413] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:33:36.489 [DEBUG] [Thread-133413] [transport.py] [_log()] Compression: none
2025-12-31T19:33:36.489 [DEBUG] [Thread-133413] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:33:36.506 [DEBUG] [Thread-133413] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:33:36.506 [DEBUG] [Thread-133413] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:33:36.506 [DEBUG] [Thread-133413] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T19:33:36.506 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T19:33:36.506 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:33:36.507 [DEBUG] [Thread-133413] [transport.py] [_log()] userauth is OK
2025-12-31T19:33:36.507 [DEBUG] [Thread-133413] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:33:36.507 [DEBUG] [Thread-133413] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:33:36.507 [DEBUG] [Thread-133413] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T19:33:36.507 [DEBUG] [Thread-133413] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:33:36.517 [INFO] [Thread-133413] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:33:36.517 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:33:37.187 [DEBUG] [Thread-133413] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:33:37.188 [DEBUG] [Thread-133413] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:33:37.188 [DEBUG] [Thread-133413] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T19:33:37.230 [DEBUG] [Thread-133413] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:33:37.230 [DEBUG] [Thread-133413] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:33:37.232 [DEBUG] [Thread-133413] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:33:37.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:33:37.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T19:33:37.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T19:33:37.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T19:33:37.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:33:37.250 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T19:33:37.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:33:37.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:33:37.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T19:33:37.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.731042 -999.00  +21.50  11.20     40   +7.60 1 2 1 1 1   887    0 12.85 -48.39 ----- 11.6 11.2 256.0 15.8 23.1 -19.1 23.1 -18.9 22.7 -19.3 22.9 -19.9
2025-12-31T19:33:37.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T19:33:37.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T19:33:37.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.731042
2025-12-31T19:33:37.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T19:33:37.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T19:33:37.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T19:33:37.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T19:33:37.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T19:33:37.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T19:33:04', tmtdew=15.88, humidity=35.49, cloud=0.0, wind=16.68, temperature=21.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T17:32:42.029', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T19:33:37.251 [DEBUG] [Thread-133413] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:33:37.325 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T19:33:37.336 [DEBUG] [Thread-133416] [transport.py] [_log()] starting thread (client mode): 0xb9590e80
2025-12-31T19:33:37.336 [DEBUG] [Thread-133416] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:33:37.350 [DEBUG] [Thread-133416] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T19:33:37.350 [INFO] [Thread-133416] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T19:33:37.358 [DEBUG] [Thread-133416] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:33:37.358 [DEBUG] [Thread-133416] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T19:33:37.358 [DEBUG] [Thread-133416] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:33:37.358 [DEBUG] [Thread-133416] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:33:37.358 [DEBUG] [Thread-133416] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:33:37.358 [DEBUG] [Thread-133416] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:33:37.358 [DEBUG] [Thread-133416] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:33:37.358 [DEBUG] [Thread-133416] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:33:37.358 [DEBUG] [Thread-133416] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:33:37.358 [DEBUG] [Thread-133416] [transport.py] [_log()] client lang: <none>
2025-12-31T19:33:37.358 [DEBUG] [Thread-133416] [transport.py] [_log()] server lang: <none>
2025-12-31T19:33:37.358 [DEBUG] [Thread-133416] [transport.py] [_log()] kex follows: False
2025-12-31T19:33:37.358 [DEBUG] [Thread-133416] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:33:37.358 [DEBUG] [Thread-133416] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:33:37.358 [DEBUG] [Thread-133416] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:33:37.358 [DEBUG] [Thread-133416] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:33:37.358 [DEBUG] [Thread-133416] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:33:37.358 [DEBUG] [Thread-133416] [transport.py] [_log()] Compression: none
2025-12-31T19:33:37.358 [DEBUG] [Thread-133416] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:33:37.414 [DEBUG] [Thread-133416] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:33:37.414 [DEBUG] [Thread-133416] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:33:37.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T19:33:37.415 [DEBUG] [Thread-133416] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T19:33:37.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:33:37.471 [DEBUG] [Thread-133416] [transport.py] [_log()] userauth is OK
2025-12-31T19:33:37.471 [DEBUG] [Thread-133416] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:33:37.471 [DEBUG] [Thread-133416] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:33:37.471 [DEBUG] [Thread-133416] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T19:33:37.471 [DEBUG] [Thread-133416] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:33:37.485 [INFO] [Thread-133416] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:33:37.485 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T19:33:37.485 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:33:38.321 [DEBUG] [Thread-133416] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:33:38.322 [DEBUG] [Thread-133416] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:33:38.370 [DEBUG] [Thread-133416] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:33:38.370 [DEBUG] [Thread-133416] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:33:38.379 [DEBUG] [Thread-133416] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:33:38.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:33:38.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T19:33:38.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T19:33:38.407 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:33:38.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:33:38.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:33:38.415 [DEBUG] [Thread-133416] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:33:42.238 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:33:42.239 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:33:51.254 [DEBUG] [Thread-133418 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:34:06.304 [DEBUG] [Thread-133419 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:34:08.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T19:34:08.438 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T19:34:08.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T19:34:09.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 19, 33, 36), 15.83, 35.6, 0.0, 17.43, 21.53, 0, 0, 0, 2, 0, 0),)
2025-12-31T19:34:09.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 19:33:36
2025-12-31T19:34:09.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T19:34:09.489 [DEBUG] [Thread-133420] [transport.py] [_log()] starting thread (client mode): 0xb9558370
2025-12-31T19:34:09.489 [DEBUG] [Thread-133420] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:34:09.508 [DEBUG] [Thread-133420] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T19:34:09.508 [INFO] [Thread-133420] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T19:34:09.511 [DEBUG] [Thread-133420] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:34:09.511 [DEBUG] [Thread-133420] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T19:34:09.511 [DEBUG] [Thread-133420] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:34:09.511 [DEBUG] [Thread-133420] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:34:09.511 [DEBUG] [Thread-133420] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:34:09.511 [DEBUG] [Thread-133420] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:34:09.511 [DEBUG] [Thread-133420] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:34:09.511 [DEBUG] [Thread-133420] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:34:09.511 [DEBUG] [Thread-133420] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:34:09.511 [DEBUG] [Thread-133420] [transport.py] [_log()] client lang: <none>
2025-12-31T19:34:09.511 [DEBUG] [Thread-133420] [transport.py] [_log()] server lang: <none>
2025-12-31T19:34:09.511 [DEBUG] [Thread-133420] [transport.py] [_log()] kex follows: False
2025-12-31T19:34:09.511 [DEBUG] [Thread-133420] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:34:09.511 [DEBUG] [Thread-133420] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:34:09.511 [DEBUG] [Thread-133420] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:34:09.511 [DEBUG] [Thread-133420] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:34:09.511 [DEBUG] [Thread-133420] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:34:09.511 [DEBUG] [Thread-133420] [transport.py] [_log()] Compression: none
2025-12-31T19:34:09.511 [DEBUG] [Thread-133420] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:34:09.527 [DEBUG] [Thread-133420] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:34:09.528 [DEBUG] [Thread-133420] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:34:09.528 [DEBUG] [Thread-133420] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T19:34:09.528 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T19:34:09.528 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:34:09.529 [DEBUG] [Thread-133420] [transport.py] [_log()] userauth is OK
2025-12-31T19:34:09.529 [DEBUG] [Thread-133420] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:34:09.529 [DEBUG] [Thread-133420] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:34:09.529 [DEBUG] [Thread-133420] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T19:34:09.529 [DEBUG] [Thread-133420] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:34:09.539 [INFO] [Thread-133420] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:34:09.539 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:34:10.315 [DEBUG] [Thread-133420] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:34:10.316 [DEBUG] [Thread-133420] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:34:10.316 [DEBUG] [Thread-133420] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T19:34:10.356 [DEBUG] [Thread-133420] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:34:10.356 [DEBUG] [Thread-133420] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:34:10.359 [DEBUG] [Thread-133420] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:34:10.370 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:34:10.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T19:34:10.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T19:34:10.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T19:34:10.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:34:10.381 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T19:34:10.381 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:34:10.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:34:10.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T19:34:10.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.731389 -999.00  +21.40  15.47     40   +7.60 1 2 1 1 1   886    0 12.86 -45.10 ----- 15.2 15.5 265.7 18.9 23.0 -19.3 23.1 -18.9 22.7 -19.4 22.9 -20.0
2025-12-31T19:34:10.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T19:34:10.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T19:34:10.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.731389
2025-12-31T19:34:10.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T19:34:10.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T19:34:10.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T19:34:10.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T19:34:10.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T19:34:10.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T19:33:36', tmtdew=15.83, humidity=35.6, cloud=0.0, wind=17.43, temperature=21.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T17:33:12.010', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T19:34:10.383 [DEBUG] [Thread-133420] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:34:10.469 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T19:34:10.482 [DEBUG] [Thread-133423] [transport.py] [_log()] starting thread (client mode): 0xb1758c40
2025-12-31T19:34:10.482 [DEBUG] [Thread-133423] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:34:10.496 [DEBUG] [Thread-133423] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T19:34:10.496 [INFO] [Thread-133423] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T19:34:10.504 [DEBUG] [Thread-133423] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:34:10.504 [DEBUG] [Thread-133423] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T19:34:10.505 [DEBUG] [Thread-133423] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:34:10.505 [DEBUG] [Thread-133423] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:34:10.505 [DEBUG] [Thread-133423] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:34:10.505 [DEBUG] [Thread-133423] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:34:10.505 [DEBUG] [Thread-133423] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:34:10.505 [DEBUG] [Thread-133423] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:34:10.505 [DEBUG] [Thread-133423] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:34:10.505 [DEBUG] [Thread-133423] [transport.py] [_log()] client lang: <none>
2025-12-31T19:34:10.505 [DEBUG] [Thread-133423] [transport.py] [_log()] server lang: <none>
2025-12-31T19:34:10.506 [DEBUG] [Thread-133423] [transport.py] [_log()] kex follows: False
2025-12-31T19:34:10.506 [DEBUG] [Thread-133423] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:34:10.506 [DEBUG] [Thread-133423] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:34:10.506 [DEBUG] [Thread-133423] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:34:10.506 [DEBUG] [Thread-133423] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:34:10.506 [DEBUG] [Thread-133423] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:34:10.506 [DEBUG] [Thread-133423] [transport.py] [_log()] Compression: none
2025-12-31T19:34:10.507 [DEBUG] [Thread-133423] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:34:10.564 [DEBUG] [Thread-133423] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:34:10.564 [DEBUG] [Thread-133423] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:34:10.565 [DEBUG] [Thread-133423] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T19:34:10.565 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T19:34:10.566 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:34:10.620 [DEBUG] [Thread-133423] [transport.py] [_log()] userauth is OK
2025-12-31T19:34:10.621 [DEBUG] [Thread-133423] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:34:10.621 [DEBUG] [Thread-133423] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:34:10.621 [DEBUG] [Thread-133423] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T19:34:10.621 [DEBUG] [Thread-133423] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:34:10.641 [INFO] [Thread-133423] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:34:10.642 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T19:34:10.642 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:34:11.437 [DEBUG] [Thread-133423] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:34:11.437 [DEBUG] [Thread-133423] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:34:11.485 [DEBUG] [Thread-133423] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:34:11.485 [DEBUG] [Thread-133423] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:34:11.494 [DEBUG] [Thread-133423] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:34:11.503 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:34:11.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T19:34:11.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T19:34:11.522 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:34:11.522 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:34:11.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:34:11.530 [DEBUG] [Thread-133423] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:34:21.346 [DEBUG] [Thread-133425 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:34:34.117 [DEBUG] [Thread-133426 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:34:36.394 [DEBUG] [Thread-133427 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:34:41.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T19:34:41.553 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T19:34:41.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T19:34:42.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 19, 34, 8), 15.86, 35.52, 0.0, 16.38, 21.5, 0, 0, 0, 2, 0, 0),)
2025-12-31T19:34:42.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 19:34:08
2025-12-31T19:34:42.377 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:34:42.378 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:34:42.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T19:34:42.576 [DEBUG] [Thread-133428] [transport.py] [_log()] starting thread (client mode): 0xb6bb83a0
2025-12-31T19:34:42.576 [DEBUG] [Thread-133428] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:34:42.597 [DEBUG] [Thread-133428] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T19:34:42.597 [INFO] [Thread-133428] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T19:34:42.600 [DEBUG] [Thread-133428] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:34:42.600 [DEBUG] [Thread-133428] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T19:34:42.600 [DEBUG] [Thread-133428] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:34:42.600 [DEBUG] [Thread-133428] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:34:42.600 [DEBUG] [Thread-133428] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:34:42.600 [DEBUG] [Thread-133428] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:34:42.600 [DEBUG] [Thread-133428] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:34:42.600 [DEBUG] [Thread-133428] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:34:42.600 [DEBUG] [Thread-133428] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:34:42.600 [DEBUG] [Thread-133428] [transport.py] [_log()] client lang: <none>
2025-12-31T19:34:42.600 [DEBUG] [Thread-133428] [transport.py] [_log()] server lang: <none>
2025-12-31T19:34:42.600 [DEBUG] [Thread-133428] [transport.py] [_log()] kex follows: False
2025-12-31T19:34:42.600 [DEBUG] [Thread-133428] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:34:42.600 [DEBUG] [Thread-133428] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:34:42.600 [DEBUG] [Thread-133428] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:34:42.600 [DEBUG] [Thread-133428] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:34:42.600 [DEBUG] [Thread-133428] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:34:42.600 [DEBUG] [Thread-133428] [transport.py] [_log()] Compression: none
2025-12-31T19:34:42.600 [DEBUG] [Thread-133428] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:34:42.617 [DEBUG] [Thread-133428] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:34:42.617 [DEBUG] [Thread-133428] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:34:42.618 [DEBUG] [Thread-133428] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T19:34:42.618 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T19:34:42.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:34:42.619 [DEBUG] [Thread-133428] [transport.py] [_log()] userauth is OK
2025-12-31T19:34:42.620 [DEBUG] [Thread-133428] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:34:42.620 [DEBUG] [Thread-133428] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:34:42.620 [DEBUG] [Thread-133428] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T19:34:42.620 [DEBUG] [Thread-133428] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:34:42.641 [INFO] [Thread-133428] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:34:42.641 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:34:43.279 [DEBUG] [Thread-133428] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:34:43.279 [DEBUG] [Thread-133428] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:34:43.279 [DEBUG] [Thread-133428] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T19:34:43.320 [DEBUG] [Thread-133428] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:34:43.320 [DEBUG] [Thread-133428] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:34:43.322 [DEBUG] [Thread-133428] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:34:43.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:34:43.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T19:34:43.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T19:34:43.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T19:34:43.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:34:43.344 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T19:34:43.344 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:34:43.344 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:34:43.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T19:34:43.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.732084 -999.00  +21.50  15.75     40   +7.50 1 2 1 1 1   886    0 13.20 -37.27 ----- 15.1 15.8 278.2 20.1 23.0 -19.4 23.0 -19.2 22.6 -19.8 22.8 -20.0
2025-12-31T19:34:43.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T19:34:43.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T19:34:43.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.732084
2025-12-31T19:34:43.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T19:34:43.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T19:34:43.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T19:34:43.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T19:34:43.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T19:34:43.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T19:34:08', tmtdew=15.86, humidity=35.52, cloud=0.0, wind=16.38, temperature=21.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T17:34:12.058', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T19:34:43.346 [DEBUG] [Thread-133428] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:34:43.431 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T19:34:43.440 [DEBUG] [Thread-133431] [transport.py] [_log()] starting thread (client mode): 0xb95d5f90
2025-12-31T19:34:43.440 [DEBUG] [Thread-133431] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:34:43.455 [DEBUG] [Thread-133431] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T19:34:43.455 [INFO] [Thread-133431] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T19:34:43.462 [DEBUG] [Thread-133431] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:34:43.462 [DEBUG] [Thread-133431] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T19:34:43.462 [DEBUG] [Thread-133431] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:34:43.462 [DEBUG] [Thread-133431] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:34:43.462 [DEBUG] [Thread-133431] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:34:43.463 [DEBUG] [Thread-133431] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:34:43.463 [DEBUG] [Thread-133431] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:34:43.463 [DEBUG] [Thread-133431] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:34:43.463 [DEBUG] [Thread-133431] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:34:43.463 [DEBUG] [Thread-133431] [transport.py] [_log()] client lang: <none>
2025-12-31T19:34:43.463 [DEBUG] [Thread-133431] [transport.py] [_log()] server lang: <none>
2025-12-31T19:34:43.463 [DEBUG] [Thread-133431] [transport.py] [_log()] kex follows: False
2025-12-31T19:34:43.463 [DEBUG] [Thread-133431] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:34:43.463 [DEBUG] [Thread-133431] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:34:43.463 [DEBUG] [Thread-133431] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:34:43.463 [DEBUG] [Thread-133431] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:34:43.463 [DEBUG] [Thread-133431] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:34:43.463 [DEBUG] [Thread-133431] [transport.py] [_log()] Compression: none
2025-12-31T19:34:43.463 [DEBUG] [Thread-133431] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:34:43.519 [DEBUG] [Thread-133431] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:34:43.519 [DEBUG] [Thread-133431] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:34:43.519 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T19:34:43.520 [DEBUG] [Thread-133431] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T19:34:43.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:34:43.575 [DEBUG] [Thread-133431] [transport.py] [_log()] userauth is OK
2025-12-31T19:34:43.575 [DEBUG] [Thread-133431] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:34:43.576 [DEBUG] [Thread-133431] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:34:43.576 [DEBUG] [Thread-133431] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T19:34:43.576 [DEBUG] [Thread-133431] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:34:43.594 [INFO] [Thread-133431] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:34:43.595 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T19:34:43.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:34:44.423 [DEBUG] [Thread-133431] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:34:44.424 [DEBUG] [Thread-133431] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:34:44.472 [DEBUG] [Thread-133431] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:34:44.472 [DEBUG] [Thread-133431] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:34:44.481 [DEBUG] [Thread-133431] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:34:44.489 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:34:44.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T19:34:44.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T19:34:44.506 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:34:44.506 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:34:44.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:34:44.514 [DEBUG] [Thread-133431] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:34:51.432 [DEBUG] [Thread-133433 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:35:06.493 [DEBUG] [Thread-133434 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:35:14.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T19:35:14.519 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T19:35:14.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T19:35:15.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 19, 35, 12), 15.88, 35.49, 0.0, 15.79, 21.53, 0, 0, 0, 2, 0, 0),)
2025-12-31T19:35:15.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 19:35:12
2025-12-31T19:35:15.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T19:35:15.525 [DEBUG] [Thread-133435] [transport.py] [_log()] starting thread (client mode): 0xb95d4850
2025-12-31T19:35:15.525 [DEBUG] [Thread-133435] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:35:15.544 [DEBUG] [Thread-133435] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T19:35:15.544 [INFO] [Thread-133435] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T19:35:15.547 [DEBUG] [Thread-133435] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:35:15.547 [DEBUG] [Thread-133435] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T19:35:15.547 [DEBUG] [Thread-133435] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:35:15.547 [DEBUG] [Thread-133435] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:35:15.547 [DEBUG] [Thread-133435] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:35:15.547 [DEBUG] [Thread-133435] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:35:15.547 [DEBUG] [Thread-133435] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:35:15.547 [DEBUG] [Thread-133435] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:35:15.547 [DEBUG] [Thread-133435] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:35:15.547 [DEBUG] [Thread-133435] [transport.py] [_log()] client lang: <none>
2025-12-31T19:35:15.547 [DEBUG] [Thread-133435] [transport.py] [_log()] server lang: <none>
2025-12-31T19:35:15.547 [DEBUG] [Thread-133435] [transport.py] [_log()] kex follows: False
2025-12-31T19:35:15.547 [DEBUG] [Thread-133435] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:35:15.547 [DEBUG] [Thread-133435] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:35:15.548 [DEBUG] [Thread-133435] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:35:15.548 [DEBUG] [Thread-133435] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:35:15.548 [DEBUG] [Thread-133435] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:35:15.548 [DEBUG] [Thread-133435] [transport.py] [_log()] Compression: none
2025-12-31T19:35:15.548 [DEBUG] [Thread-133435] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:35:15.565 [DEBUG] [Thread-133435] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:35:15.566 [DEBUG] [Thread-133435] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:35:15.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T19:35:15.567 [DEBUG] [Thread-133435] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T19:35:15.568 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:35:15.569 [DEBUG] [Thread-133435] [transport.py] [_log()] userauth is OK
2025-12-31T19:35:15.569 [DEBUG] [Thread-133435] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:35:15.569 [DEBUG] [Thread-133435] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:35:15.569 [DEBUG] [Thread-133435] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T19:35:15.570 [DEBUG] [Thread-133435] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:35:15.593 [INFO] [Thread-133435] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:35:15.593 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:35:21.521 [DEBUG] [Thread-133437 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:35:22.175 [DEBUG] [Thread-133435] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:35:22.175 [DEBUG] [Thread-133435] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:35:22.176 [DEBUG] [Thread-133435] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T19:35:22.216 [DEBUG] [Thread-133435] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:35:22.216 [DEBUG] [Thread-133435] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:35:22.219 [DEBUG] [Thread-133435] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:35:22.298 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:35:22.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T19:35:22.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T19:35:22.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T19:35:22.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:35:22.358 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T19:35:22.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:35:22.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:35:22.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T19:35:22.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.732431 -999.00  +21.50  12.61     40   +7.50 1 2 1 1 1   886    0 13.27 -34.08 ----- 11.3 12.6 283.6 16.3 22.9 -19.2 23.0 -19.4 22.6 -19.9 22.8 -19.7
2025-12-31T19:35:22.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T19:35:22.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T19:35:22.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.732431
2025-12-31T19:35:22.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T19:35:22.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T19:35:22.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T19:35:22.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T19:35:22.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T19:35:22.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T19:35:12', tmtdew=15.88, humidity=35.49, cloud=0.0, wind=15.79, temperature=21.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T17:34:42.038', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T19:35:22.362 [DEBUG] [Thread-133435] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:35:22.446 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T19:35:22.457 [DEBUG] [Thread-133439] [transport.py] [_log()] starting thread (client mode): 0xb1764a60
2025-12-31T19:35:22.458 [DEBUG] [Thread-133439] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:35:22.472 [DEBUG] [Thread-133439] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T19:35:22.472 [INFO] [Thread-133439] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T19:35:22.480 [DEBUG] [Thread-133439] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:35:22.480 [DEBUG] [Thread-133439] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T19:35:22.480 [DEBUG] [Thread-133439] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:35:22.480 [DEBUG] [Thread-133439] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:35:22.480 [DEBUG] [Thread-133439] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:35:22.480 [DEBUG] [Thread-133439] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:35:22.480 [DEBUG] [Thread-133439] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:35:22.480 [DEBUG] [Thread-133439] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:35:22.480 [DEBUG] [Thread-133439] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:35:22.480 [DEBUG] [Thread-133439] [transport.py] [_log()] client lang: <none>
2025-12-31T19:35:22.480 [DEBUG] [Thread-133439] [transport.py] [_log()] server lang: <none>
2025-12-31T19:35:22.480 [DEBUG] [Thread-133439] [transport.py] [_log()] kex follows: False
2025-12-31T19:35:22.480 [DEBUG] [Thread-133439] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:35:22.480 [DEBUG] [Thread-133439] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:35:22.480 [DEBUG] [Thread-133439] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:35:22.480 [DEBUG] [Thread-133439] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:35:22.480 [DEBUG] [Thread-133439] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:35:22.481 [DEBUG] [Thread-133439] [transport.py] [_log()] Compression: none
2025-12-31T19:35:22.481 [DEBUG] [Thread-133439] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:35:22.540 [DEBUG] [Thread-133439] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:35:22.540 [DEBUG] [Thread-133439] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:35:22.541 [DEBUG] [Thread-133439] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T19:35:22.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T19:35:22.542 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:35:22.600 [DEBUG] [Thread-133439] [transport.py] [_log()] userauth is OK
2025-12-31T19:35:22.600 [DEBUG] [Thread-133439] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:35:22.601 [DEBUG] [Thread-133439] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:35:22.601 [DEBUG] [Thread-133439] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T19:35:22.601 [DEBUG] [Thread-133439] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:35:22.619 [INFO] [Thread-133439] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:35:22.619 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T19:35:22.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:35:23.479 [DEBUG] [Thread-133439] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:35:23.479 [DEBUG] [Thread-133439] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:35:23.527 [DEBUG] [Thread-133439] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:35:23.527 [DEBUG] [Thread-133439] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:35:23.536 [DEBUG] [Thread-133439] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:35:23.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:35:23.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T19:35:23.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T19:35:23.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:35:23.567 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:35:23.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:35:23.575 [DEBUG] [Thread-133439] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:35:34.171 [DEBUG] [Thread-133441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:35:36.559 [DEBUG] [Thread-133442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:35:42.518 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:35:42.519 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:35:51.609 [DEBUG] [Thread-133443 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:35:53.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T19:35:53.574 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T19:35:53.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T19:35:54.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 19, 35, 44), 15.82, 35.49, 0.0, 17.49, 21.51, 0, 0, 0, 2, 0, 0),)
2025-12-31T19:35:54.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 19:35:44
2025-12-31T19:35:54.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T19:35:54.568 [DEBUG] [Thread-133444] [transport.py] [_log()] starting thread (client mode): 0xb1776800
2025-12-31T19:35:54.568 [DEBUG] [Thread-133444] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:35:54.589 [DEBUG] [Thread-133444] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T19:35:54.589 [INFO] [Thread-133444] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T19:35:54.592 [DEBUG] [Thread-133444] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:35:54.592 [DEBUG] [Thread-133444] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T19:35:54.592 [DEBUG] [Thread-133444] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:35:54.592 [DEBUG] [Thread-133444] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:35:54.592 [DEBUG] [Thread-133444] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:35:54.592 [DEBUG] [Thread-133444] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:35:54.592 [DEBUG] [Thread-133444] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:35:54.592 [DEBUG] [Thread-133444] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:35:54.592 [DEBUG] [Thread-133444] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:35:54.592 [DEBUG] [Thread-133444] [transport.py] [_log()] client lang: <none>
2025-12-31T19:35:54.592 [DEBUG] [Thread-133444] [transport.py] [_log()] server lang: <none>
2025-12-31T19:35:54.593 [DEBUG] [Thread-133444] [transport.py] [_log()] kex follows: False
2025-12-31T19:35:54.593 [DEBUG] [Thread-133444] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:35:54.593 [DEBUG] [Thread-133444] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:35:54.593 [DEBUG] [Thread-133444] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:35:54.593 [DEBUG] [Thread-133444] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:35:54.593 [DEBUG] [Thread-133444] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:35:54.593 [DEBUG] [Thread-133444] [transport.py] [_log()] Compression: none
2025-12-31T19:35:54.593 [DEBUG] [Thread-133444] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:35:54.610 [DEBUG] [Thread-133444] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:35:54.611 [DEBUG] [Thread-133444] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:35:54.611 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T19:35:54.612 [DEBUG] [Thread-133444] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T19:35:54.613 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:35:54.614 [DEBUG] [Thread-133444] [transport.py] [_log()] userauth is OK
2025-12-31T19:35:54.614 [DEBUG] [Thread-133444] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:35:54.614 [DEBUG] [Thread-133444] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:35:54.614 [DEBUG] [Thread-133444] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T19:35:54.614 [DEBUG] [Thread-133444] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:35:54.632 [INFO] [Thread-133444] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:35:54.634 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:35:55.225 [DEBUG] [Thread-133444] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:35:55.225 [DEBUG] [Thread-133444] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:35:55.226 [DEBUG] [Thread-133444] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T19:35:55.266 [DEBUG] [Thread-133444] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:35:55.266 [DEBUG] [Thread-133444] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:35:55.271 [DEBUG] [Thread-133444] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:35:55.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:35:55.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T19:35:55.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T19:35:55.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T19:35:55.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:35:55.294 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T19:35:55.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:35:55.294 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:35:55.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T19:35:55.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.732778 -999.00  +21.50  10.14     40   +7.50 1 2 1 1 1   886    0 13.05 -35.54 ----- 13.1 10.1 269.8 18.8 23.0 -19.3 23.0 -19.6 22.6 -19.6 22.8 -19.7
2025-12-31T19:35:55.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T19:35:55.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T19:35:55.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.732778
2025-12-31T19:35:55.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T19:35:55.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T19:35:55.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T19:35:55.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T19:35:55.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T19:35:55.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T19:35:44', tmtdew=15.82, humidity=35.49, cloud=0.0, wind=17.49, temperature=21.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T17:35:12.019', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T19:35:55.297 [DEBUG] [Thread-133444] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:35:55.381 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T19:35:55.393 [DEBUG] [Thread-133447] [transport.py] [_log()] starting thread (client mode): 0xb95d65f0
2025-12-31T19:35:55.393 [DEBUG] [Thread-133447] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:35:55.408 [DEBUG] [Thread-133447] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T19:35:55.408 [INFO] [Thread-133447] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T19:35:55.415 [DEBUG] [Thread-133447] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:35:55.416 [DEBUG] [Thread-133447] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T19:35:55.416 [DEBUG] [Thread-133447] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:35:55.416 [DEBUG] [Thread-133447] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:35:55.416 [DEBUG] [Thread-133447] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:35:55.416 [DEBUG] [Thread-133447] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:35:55.416 [DEBUG] [Thread-133447] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:35:55.416 [DEBUG] [Thread-133447] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:35:55.416 [DEBUG] [Thread-133447] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:35:55.416 [DEBUG] [Thread-133447] [transport.py] [_log()] client lang: <none>
2025-12-31T19:35:55.416 [DEBUG] [Thread-133447] [transport.py] [_log()] server lang: <none>
2025-12-31T19:35:55.416 [DEBUG] [Thread-133447] [transport.py] [_log()] kex follows: False
2025-12-31T19:35:55.416 [DEBUG] [Thread-133447] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:35:55.416 [DEBUG] [Thread-133447] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:35:55.416 [DEBUG] [Thread-133447] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:35:55.416 [DEBUG] [Thread-133447] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:35:55.416 [DEBUG] [Thread-133447] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:35:55.416 [DEBUG] [Thread-133447] [transport.py] [_log()] Compression: none
2025-12-31T19:35:55.416 [DEBUG] [Thread-133447] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:35:55.478 [DEBUG] [Thread-133447] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:35:55.479 [DEBUG] [Thread-133447] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:35:55.479 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T19:35:55.479 [DEBUG] [Thread-133447] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T19:35:55.479 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:35:55.536 [DEBUG] [Thread-133447] [transport.py] [_log()] userauth is OK
2025-12-31T19:35:55.536 [DEBUG] [Thread-133447] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:35:55.536 [DEBUG] [Thread-133447] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:35:55.537 [DEBUG] [Thread-133447] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T19:35:55.537 [DEBUG] [Thread-133447] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:35:55.560 [INFO] [Thread-133447] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:35:55.561 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T19:35:55.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:35:56.385 [DEBUG] [Thread-133447] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:35:56.385 [DEBUG] [Thread-133447] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:35:56.434 [DEBUG] [Thread-133447] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:35:56.434 [DEBUG] [Thread-133447] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:35:56.443 [DEBUG] [Thread-133447] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:35:56.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:35: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')
2025-12-31T19:35:56.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T19:35:56.471 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:35:56.472 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:35:56.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:35:56.481 [DEBUG] [Thread-133447] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:36:06.646 [DEBUG] [Thread-133449 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:36:21.697 [DEBUG] [Thread-133450 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:36:26.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T19:36:26.502 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T19:36:26.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T19:36:27.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 19, 36, 16), 15.73, 35.73, 0.0, 17.91, 21.55, 0, 0, 0, 2, 0, 0),)
2025-12-31T19:36:27.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 19:36:16
2025-12-31T19:36:27.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T19:36:27.533 [DEBUG] [Thread-133451] [transport.py] [_log()] starting thread (client mode): 0xb1765ba0
2025-12-31T19:36:27.533 [DEBUG] [Thread-133451] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:36:27.552 [DEBUG] [Thread-133451] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T19:36:27.552 [INFO] [Thread-133451] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T19:36:27.555 [DEBUG] [Thread-133451] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:36:27.556 [DEBUG] [Thread-133451] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T19:36:27.556 [DEBUG] [Thread-133451] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:36:27.556 [DEBUG] [Thread-133451] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:36:27.556 [DEBUG] [Thread-133451] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:36:27.556 [DEBUG] [Thread-133451] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:36:27.556 [DEBUG] [Thread-133451] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:36:27.556 [DEBUG] [Thread-133451] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:36:27.556 [DEBUG] [Thread-133451] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:36:27.556 [DEBUG] [Thread-133451] [transport.py] [_log()] client lang: <none>
2025-12-31T19:36:27.556 [DEBUG] [Thread-133451] [transport.py] [_log()] server lang: <none>
2025-12-31T19:36:27.556 [DEBUG] [Thread-133451] [transport.py] [_log()] kex follows: False
2025-12-31T19:36:27.556 [DEBUG] [Thread-133451] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:36:27.556 [DEBUG] [Thread-133451] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:36:27.556 [DEBUG] [Thread-133451] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:36:27.556 [DEBUG] [Thread-133451] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:36:27.556 [DEBUG] [Thread-133451] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:36:27.556 [DEBUG] [Thread-133451] [transport.py] [_log()] Compression: none
2025-12-31T19:36:27.556 [DEBUG] [Thread-133451] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:36:27.571 [DEBUG] [Thread-133451] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:36:27.571 [DEBUG] [Thread-133451] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:36:27.571 [DEBUG] [Thread-133451] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T19:36:27.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T19:36:27.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:36:27.572 [DEBUG] [Thread-133451] [transport.py] [_log()] userauth is OK
2025-12-31T19:36:27.572 [DEBUG] [Thread-133451] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:36:27.572 [DEBUG] [Thread-133451] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:36:27.572 [DEBUG] [Thread-133451] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T19:36:27.572 [DEBUG] [Thread-133451] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:36:27.585 [INFO] [Thread-133451] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:36:27.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:36:28.346 [DEBUG] [Thread-133451] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:36:28.346 [DEBUG] [Thread-133451] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:36:28.346 [DEBUG] [Thread-133451] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T19:36:28.387 [DEBUG] [Thread-133451] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:36:28.388 [DEBUG] [Thread-133451] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:36:28.390 [DEBUG] [Thread-133451] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:36:28.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:36:28.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T19:36:28.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T19:36:28.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T19:36:28.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:36:28.405 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T19:36:28.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:36:28.405 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:36:28.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T19:36:28.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.733125 -999.00  +21.40  14.02     40   +7.60 1 2 1 1 1   886    0 13.23 -31.87 ----- 12.3 14.0 274.4 15.9 22.9 -19.7 22.9 -19.8 22.6 -19.8 22.8 -19.7
2025-12-31T19:36:28.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T19:36:28.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T19:36:28.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.733125
2025-12-31T19:36:28.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T19:36:28.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T19:36:28.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T19:36:28.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T19:36:28.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T19:36:28.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T19:36:16', tmtdew=15.73, humidity=35.73, cloud=0.0, wind=17.91, temperature=21.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T17:35:42.000', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T19:36:28.407 [DEBUG] [Thread-133451] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:36:28.481 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T19:36:28.492 [DEBUG] [Thread-133454] [transport.py] [_log()] starting thread (client mode): 0xb6bba3b0
2025-12-31T19:36:28.492 [DEBUG] [Thread-133454] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:36:28.506 [DEBUG] [Thread-133454] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T19:36:28.506 [INFO] [Thread-133454] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T19:36:28.514 [DEBUG] [Thread-133454] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:36:28.514 [DEBUG] [Thread-133454] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T19:36:28.514 [DEBUG] [Thread-133454] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:36:28.514 [DEBUG] [Thread-133454] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:36:28.514 [DEBUG] [Thread-133454] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:36:28.514 [DEBUG] [Thread-133454] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:36:28.514 [DEBUG] [Thread-133454] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:36:28.514 [DEBUG] [Thread-133454] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:36:28.514 [DEBUG] [Thread-133454] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:36:28.514 [DEBUG] [Thread-133454] [transport.py] [_log()] client lang: <none>
2025-12-31T19:36:28.514 [DEBUG] [Thread-133454] [transport.py] [_log()] server lang: <none>
2025-12-31T19:36:28.514 [DEBUG] [Thread-133454] [transport.py] [_log()] kex follows: False
2025-12-31T19:36:28.514 [DEBUG] [Thread-133454] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:36:28.514 [DEBUG] [Thread-133454] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:36:28.514 [DEBUG] [Thread-133454] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:36:28.514 [DEBUG] [Thread-133454] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:36:28.514 [DEBUG] [Thread-133454] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:36:28.514 [DEBUG] [Thread-133454] [transport.py] [_log()] Compression: none
2025-12-31T19:36:28.514 [DEBUG] [Thread-133454] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:36:28.576 [DEBUG] [Thread-133454] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:36:28.576 [DEBUG] [Thread-133454] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:36:28.576 [DEBUG] [Thread-133454] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T19:36:28.576 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T19:36:28.576 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:36:28.632 [DEBUG] [Thread-133454] [transport.py] [_log()] userauth is OK
2025-12-31T19:36:28.632 [DEBUG] [Thread-133454] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:36:28.632 [DEBUG] [Thread-133454] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:36:28.632 [DEBUG] [Thread-133454] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T19:36:28.632 [DEBUG] [Thread-133454] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:36:28.647 [INFO] [Thread-133454] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:36:28.647 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T19:36:28.647 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:36:29.452 [DEBUG] [Thread-133454] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:36:29.452 [DEBUG] [Thread-133454] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:36:29.500 [DEBUG] [Thread-133454] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:36:29.500 [DEBUG] [Thread-133454] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:36:29.508 [DEBUG] [Thread-133454] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:36:29.516 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:36:29.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T19:36:29.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T19:36:29.532 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:36:29.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:36:29.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:36:29.540 [DEBUG] [Thread-133454] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:36:34.205 [DEBUG] [Thread-133456 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:36:36.732 [DEBUG] [Thread-133457 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:36:42.658 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:36:42.659 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:36:51.785 [DEBUG] [Thread-133458 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:36:59.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T19:36:59.554 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T19:36:59.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T19:37:00.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 19, 36, 48), 15.57, 36.37, 0.0, 15.44, 21.46, 0, 0, 0, 2, 0, 0),)
2025-12-31T19:37:00.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 19:36:48
2025-12-31T19:37:00.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T19:37:00.533 [DEBUG] [Thread-133459] [transport.py] [_log()] starting thread (client mode): 0xb95d4520
2025-12-31T19:37:00.533 [DEBUG] [Thread-133459] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:37:00.557 [DEBUG] [Thread-133459] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T19:37:00.557 [INFO] [Thread-133459] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T19:37:00.561 [DEBUG] [Thread-133459] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:37:00.561 [DEBUG] [Thread-133459] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T19:37:00.561 [DEBUG] [Thread-133459] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:37:00.561 [DEBUG] [Thread-133459] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:37:00.561 [DEBUG] [Thread-133459] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:37:00.561 [DEBUG] [Thread-133459] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:37:00.561 [DEBUG] [Thread-133459] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:37:00.561 [DEBUG] [Thread-133459] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:37:00.561 [DEBUG] [Thread-133459] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:37:00.561 [DEBUG] [Thread-133459] [transport.py] [_log()] client lang: <none>
2025-12-31T19:37:00.561 [DEBUG] [Thread-133459] [transport.py] [_log()] server lang: <none>
2025-12-31T19:37:00.561 [DEBUG] [Thread-133459] [transport.py] [_log()] kex follows: False
2025-12-31T19:37:00.561 [DEBUG] [Thread-133459] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:37:00.561 [DEBUG] [Thread-133459] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:37:00.561 [DEBUG] [Thread-133459] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:37:00.561 [DEBUG] [Thread-133459] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:37:00.561 [DEBUG] [Thread-133459] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:37:00.561 [DEBUG] [Thread-133459] [transport.py] [_log()] Compression: none
2025-12-31T19:37:00.561 [DEBUG] [Thread-133459] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:37:00.578 [DEBUG] [Thread-133459] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:37:00.579 [DEBUG] [Thread-133459] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:37:00.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T19:37:00.580 [DEBUG] [Thread-133459] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T19:37:00.581 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:37:00.582 [DEBUG] [Thread-133459] [transport.py] [_log()] userauth is OK
2025-12-31T19:37:00.582 [DEBUG] [Thread-133459] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:37:00.582 [DEBUG] [Thread-133459] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:37:00.582 [DEBUG] [Thread-133459] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T19:37:00.582 [DEBUG] [Thread-133459] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:37:00.605 [INFO] [Thread-133459] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:37:00.606 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:37:01.211 [DEBUG] [Thread-133459] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:37:01.211 [DEBUG] [Thread-133459] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:37:01.211 [DEBUG] [Thread-133459] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T19:37:01.252 [DEBUG] [Thread-133459] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:37:01.253 [DEBUG] [Thread-133459] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:37:01.255 [DEBUG] [Thread-133459] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:37:01.264 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:37:01.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T19:37:01.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T19:37:01.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T19:37:01.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:37:01.269 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T19:37:01.269 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:37:01.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:37:01.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T19:37:01.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.733472 -999.00  +21.40  12.98     41   +7.60 1 2 1 1 1   886    0 13.40 -31.67 ----- 12.9 13.0 270.4 16.7 22.9 -19.8 23.0 -20.1 22.5 -20.3 22.8 -20.0
2025-12-31T19:37:01.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T19:37:01.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T19:37:01.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.733472
2025-12-31T19:37:01.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T19:37:01.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T19:37:01.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T19:37:01.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T19:37:01.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T19:37:01.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T19:36:48', tmtdew=15.57, humidity=36.37, cloud=0.0, wind=15.44, temperature=21.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T17:36:11.981', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T19:37:01.270 [DEBUG] [Thread-133459] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:37:01.356 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T19:37:01.368 [DEBUG] [Thread-133462] [transport.py] [_log()] starting thread (client mode): 0xb955bac0
2025-12-31T19:37:01.368 [DEBUG] [Thread-133462] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:37:01.383 [DEBUG] [Thread-133462] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T19:37:01.384 [INFO] [Thread-133462] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T19:37:01.391 [DEBUG] [Thread-133462] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:37:01.391 [DEBUG] [Thread-133462] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T19:37:01.391 [DEBUG] [Thread-133462] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:37:01.391 [DEBUG] [Thread-133462] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:37:01.391 [DEBUG] [Thread-133462] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:37:01.391 [DEBUG] [Thread-133462] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:37:01.391 [DEBUG] [Thread-133462] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:37:01.391 [DEBUG] [Thread-133462] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:37:01.391 [DEBUG] [Thread-133462] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:37:01.392 [DEBUG] [Thread-133462] [transport.py] [_log()] client lang: <none>
2025-12-31T19:37:01.392 [DEBUG] [Thread-133462] [transport.py] [_log()] server lang: <none>
2025-12-31T19:37:01.392 [DEBUG] [Thread-133462] [transport.py] [_log()] kex follows: False
2025-12-31T19:37:01.392 [DEBUG] [Thread-133462] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:37:01.392 [DEBUG] [Thread-133462] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:37:01.392 [DEBUG] [Thread-133462] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:37:01.392 [DEBUG] [Thread-133462] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:37:01.392 [DEBUG] [Thread-133462] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:37:01.392 [DEBUG] [Thread-133462] [transport.py] [_log()] Compression: none
2025-12-31T19:37:01.392 [DEBUG] [Thread-133462] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:37:01.448 [DEBUG] [Thread-133462] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:37:01.449 [DEBUG] [Thread-133462] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:37:01.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T19:37:01.450 [DEBUG] [Thread-133462] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T19:37:01.451 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:37:01.504 [DEBUG] [Thread-133462] [transport.py] [_log()] userauth is OK
2025-12-31T19:37:01.504 [DEBUG] [Thread-133462] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:37:01.505 [DEBUG] [Thread-133462] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:37:01.505 [DEBUG] [Thread-133462] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T19:37:01.505 [DEBUG] [Thread-133462] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:37:01.523 [INFO] [Thread-133462] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:37:01.523 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T19:37:01.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:37:02.359 [DEBUG] [Thread-133462] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:37:02.360 [DEBUG] [Thread-133462] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:37:02.408 [DEBUG] [Thread-133462] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:37:02.408 [DEBUG] [Thread-133462] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:37:02.421 [DEBUG] [Thread-133462] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:37:02.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:37:02.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T19:37:02.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T19:37:02.456 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:37:02.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:37:02.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:37:02.465 [DEBUG] [Thread-133462] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:37:06.816 [DEBUG] [Thread-133464 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:37:21.856 [DEBUG] [Thread-133465 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:37:32.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T19:37:32.487 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T19:37:32.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T19:37:33.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 19, 37, 20), 15.58, 36.32, 0.0, 15.67, 21.4, 0, 0, 0, 2, 0, 0),)
2025-12-31T19:37:33.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 19:37:20
2025-12-31T19:37:33.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T19:37:33.481 [DEBUG] [Thread-133466] [transport.py] [_log()] starting thread (client mode): 0xb17777f0
2025-12-31T19:37:33.481 [DEBUG] [Thread-133466] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:37:33.500 [DEBUG] [Thread-133466] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T19:37:33.501 [INFO] [Thread-133466] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T19:37:33.503 [DEBUG] [Thread-133466] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:37:33.504 [DEBUG] [Thread-133466] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T19:37:33.504 [DEBUG] [Thread-133466] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:37:33.504 [DEBUG] [Thread-133466] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:37:33.504 [DEBUG] [Thread-133466] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:37:33.504 [DEBUG] [Thread-133466] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:37:33.504 [DEBUG] [Thread-133466] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:37:33.504 [DEBUG] [Thread-133466] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:37:33.504 [DEBUG] [Thread-133466] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:37:33.504 [DEBUG] [Thread-133466] [transport.py] [_log()] client lang: <none>
2025-12-31T19:37:33.504 [DEBUG] [Thread-133466] [transport.py] [_log()] server lang: <none>
2025-12-31T19:37:33.504 [DEBUG] [Thread-133466] [transport.py] [_log()] kex follows: False
2025-12-31T19:37:33.504 [DEBUG] [Thread-133466] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:37:33.504 [DEBUG] [Thread-133466] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:37:33.504 [DEBUG] [Thread-133466] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:37:33.504 [DEBUG] [Thread-133466] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:37:33.504 [DEBUG] [Thread-133466] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:37:33.504 [DEBUG] [Thread-133466] [transport.py] [_log()] Compression: none
2025-12-31T19:37:33.504 [DEBUG] [Thread-133466] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:37:33.520 [DEBUG] [Thread-133466] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:37:33.521 [DEBUG] [Thread-133466] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:37:33.521 [DEBUG] [Thread-133466] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T19:37:33.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T19:37:33.522 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:37:33.523 [DEBUG] [Thread-133466] [transport.py] [_log()] userauth is OK
2025-12-31T19:37:33.524 [DEBUG] [Thread-133466] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:37:33.524 [DEBUG] [Thread-133466] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:37:33.524 [DEBUG] [Thread-133466] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T19:37:33.524 [DEBUG] [Thread-133466] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:37:33.548 [INFO] [Thread-133466] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:37:33.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:37:34.254 [DEBUG] [Thread-133468 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:37:34.285 [DEBUG] [Thread-133466] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:37:34.286 [DEBUG] [Thread-133466] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:37:34.286 [DEBUG] [Thread-133466] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T19:37:34.327 [DEBUG] [Thread-133466] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:37:34.327 [DEBUG] [Thread-133466] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:37:34.330 [DEBUG] [Thread-133466] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:37:34.342 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:37:34.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T19:37:34.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T19:37:34.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T19:37:34.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:37:34.352 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T19:37:34.352 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:37:34.353 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:37:34.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T19:37:34.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.733820 -999.00  +21.40  12.36     41   +7.70 1 2 1 1 1   886    0 13.32 -30.67 ----- 13.0 12.4 280.2 16.3 22.9 -19.9 22.9 -20.2 22.5 -20.4 22.8 -20.0
2025-12-31T19:37:34.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T19:37:34.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T19:37:34.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.733820
2025-12-31T19:37:34.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T19:37:34.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T19:37:34.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T19:37:34.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T19:37:34.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T19:37:34.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T19:37:20', tmtdew=15.58, humidity=36.32, cloud=0.0, wind=15.67, temperature=21.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T17:36:42.048', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T19:37:34.355 [DEBUG] [Thread-133466] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:37:34.438 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T19:37:34.451 [DEBUG] [Thread-133470] [transport.py] [_log()] starting thread (client mode): 0xb17762c0
2025-12-31T19:37:34.451 [DEBUG] [Thread-133470] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:37:34.466 [DEBUG] [Thread-133470] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T19:37:34.467 [INFO] [Thread-133470] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T19:37:34.474 [DEBUG] [Thread-133470] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:37:34.475 [DEBUG] [Thread-133470] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T19:37:34.475 [DEBUG] [Thread-133470] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:37:34.475 [DEBUG] [Thread-133470] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:37:34.475 [DEBUG] [Thread-133470] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:37:34.475 [DEBUG] [Thread-133470] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:37:34.475 [DEBUG] [Thread-133470] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:37:34.475 [DEBUG] [Thread-133470] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:37:34.475 [DEBUG] [Thread-133470] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:37:34.475 [DEBUG] [Thread-133470] [transport.py] [_log()] client lang: <none>
2025-12-31T19:37:34.475 [DEBUG] [Thread-133470] [transport.py] [_log()] server lang: <none>
2025-12-31T19:37:34.475 [DEBUG] [Thread-133470] [transport.py] [_log()] kex follows: False
2025-12-31T19:37:34.475 [DEBUG] [Thread-133470] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:37:34.475 [DEBUG] [Thread-133470] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:37:34.475 [DEBUG] [Thread-133470] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:37:34.475 [DEBUG] [Thread-133470] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:37:34.475 [DEBUG] [Thread-133470] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:37:34.475 [DEBUG] [Thread-133470] [transport.py] [_log()] Compression: none
2025-12-31T19:37:34.475 [DEBUG] [Thread-133470] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:37:34.532 [DEBUG] [Thread-133470] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:37:34.533 [DEBUG] [Thread-133470] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:37:34.533 [DEBUG] [Thread-133470] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T19:37:34.533 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T19:37:34.534 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:37:34.588 [DEBUG] [Thread-133470] [transport.py] [_log()] userauth is OK
2025-12-31T19:37:34.589 [DEBUG] [Thread-133470] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:37:34.589 [DEBUG] [Thread-133470] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:37:34.589 [DEBUG] [Thread-133470] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T19:37:34.589 [DEBUG] [Thread-133470] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:37:34.608 [INFO] [Thread-133470] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:37:34.608 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T19:37:34.609 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:37:35.413 [DEBUG] [Thread-133470] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:37:35.414 [DEBUG] [Thread-133470] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:37:35.460 [DEBUG] [Thread-133470] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:37:35.461 [DEBUG] [Thread-133470] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:37:35.470 [DEBUG] [Thread-133470] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:37:35.478 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:37:35.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-12-31T19:37:35.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T19:37:35.495 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:37:35.495 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:37:35.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:37:35.503 [DEBUG] [Thread-133470] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:37:36.891 [DEBUG] [Thread-133472 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:37:42.797 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:37:42.798 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:37:51.953 [DEBUG] [Thread-133473 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:38:05.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T19:38:05.526 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T19:38:05.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T19:38:06.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 19, 37, 52), 15.38, 36.57, 0.0, 12.74, 21.36, 0, 0, 0, 2, 0, 0),)
2025-12-31T19:38:06.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 19:37:52
2025-12-31T19:38:06.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T19:38:06.514 [DEBUG] [Thread-133474] [transport.py] [_log()] starting thread (client mode): 0xb6ba0310
2025-12-31T19:38:06.515 [DEBUG] [Thread-133474] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:38:06.535 [DEBUG] [Thread-133474] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T19:38:06.535 [INFO] [Thread-133474] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T19:38:06.538 [DEBUG] [Thread-133474] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:38:06.538 [DEBUG] [Thread-133474] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T19:38:06.538 [DEBUG] [Thread-133474] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:38:06.538 [DEBUG] [Thread-133474] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:38:06.538 [DEBUG] [Thread-133474] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:38:06.538 [DEBUG] [Thread-133474] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:38:06.539 [DEBUG] [Thread-133474] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:38:06.539 [DEBUG] [Thread-133474] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:38:06.539 [DEBUG] [Thread-133474] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:38:06.539 [DEBUG] [Thread-133474] [transport.py] [_log()] client lang: <none>
2025-12-31T19:38:06.539 [DEBUG] [Thread-133474] [transport.py] [_log()] server lang: <none>
2025-12-31T19:38:06.539 [DEBUG] [Thread-133474] [transport.py] [_log()] kex follows: False
2025-12-31T19:38:06.539 [DEBUG] [Thread-133474] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:38:06.539 [DEBUG] [Thread-133474] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:38:06.539 [DEBUG] [Thread-133474] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:38:06.539 [DEBUG] [Thread-133474] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:38:06.539 [DEBUG] [Thread-133474] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:38:06.539 [DEBUG] [Thread-133474] [transport.py] [_log()] Compression: none
2025-12-31T19:38:06.539 [DEBUG] [Thread-133474] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:38:06.557 [DEBUG] [Thread-133474] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:38:06.558 [DEBUG] [Thread-133474] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:38:06.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T19:38:06.559 [DEBUG] [Thread-133474] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T19:38:06.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:38:06.561 [DEBUG] [Thread-133474] [transport.py] [_log()] userauth is OK
2025-12-31T19:38:06.562 [DEBUG] [Thread-133474] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:38:06.562 [DEBUG] [Thread-133474] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:38:06.562 [DEBUG] [Thread-133474] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T19:38:06.562 [DEBUG] [Thread-133474] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:38:06.585 [INFO] [Thread-133474] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:38:06.586 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:38:06.987 [DEBUG] [Thread-133476 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:38:07.227 [DEBUG] [Thread-133474] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:38:07.227 [DEBUG] [Thread-133474] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:38:07.227 [DEBUG] [Thread-133474] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T19:38:07.268 [DEBUG] [Thread-133474] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:38:07.268 [DEBUG] [Thread-133474] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:38:07.272 [DEBUG] [Thread-133474] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:38:07.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:38:07.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T19:38:07.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T19:38:07.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T19:38:07.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:38:07.295 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T19:38:07.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:38:07.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:38:07.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T19:38:07.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.734167 -999.00  +21.30  13.51     41   +7.80 1 2 1 1 1   885    0 13.40 -32.26 ----- 13.9 13.5 272.6 19.1 22.8 -20.1 22.9 -20.3 22.4 -21.3 22.7 -20.5
2025-12-31T19:38:07.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T19:38:07.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T19:38:07.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.734167
2025-12-31T19:38:07.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T19:38:07.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T19:38:07.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T19:38:07.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T19:38:07.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T19:38:07.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T19:37:52', tmtdew=15.38, humidity=36.57, cloud=0.0, wind=12.74, temperature=21.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T17:37:12.029', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T19:38:07.298 [DEBUG] [Thread-133474] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:38:07.381 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T19:38:07.393 [DEBUG] [Thread-133478] [transport.py] [_log()] starting thread (client mode): 0xb1777ac0
2025-12-31T19:38:07.394 [DEBUG] [Thread-133478] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:38:07.408 [DEBUG] [Thread-133478] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T19:38:07.409 [INFO] [Thread-133478] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T19:38:07.416 [DEBUG] [Thread-133478] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:38:07.416 [DEBUG] [Thread-133478] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T19:38:07.417 [DEBUG] [Thread-133478] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:38:07.417 [DEBUG] [Thread-133478] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:38:07.417 [DEBUG] [Thread-133478] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:38:07.417 [DEBUG] [Thread-133478] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:38:07.417 [DEBUG] [Thread-133478] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:38:07.417 [DEBUG] [Thread-133478] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:38:07.417 [DEBUG] [Thread-133478] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:38:07.418 [DEBUG] [Thread-133478] [transport.py] [_log()] client lang: <none>
2025-12-31T19:38:07.418 [DEBUG] [Thread-133478] [transport.py] [_log()] server lang: <none>
2025-12-31T19:38:07.418 [DEBUG] [Thread-133478] [transport.py] [_log()] kex follows: False
2025-12-31T19:38:07.418 [DEBUG] [Thread-133478] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:38:07.418 [DEBUG] [Thread-133478] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:38:07.418 [DEBUG] [Thread-133478] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:38:07.418 [DEBUG] [Thread-133478] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:38:07.418 [DEBUG] [Thread-133478] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:38:07.418 [DEBUG] [Thread-133478] [transport.py] [_log()] Compression: none
2025-12-31T19:38:07.418 [DEBUG] [Thread-133478] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:38:07.476 [DEBUG] [Thread-133478] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:38:07.476 [DEBUG] [Thread-133478] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:38:07.477 [DEBUG] [Thread-133478] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T19:38:07.477 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T19:38:07.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:38:07.532 [DEBUG] [Thread-133478] [transport.py] [_log()] userauth is OK
2025-12-31T19:38:07.533 [DEBUG] [Thread-133478] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:38:07.542 [DEBUG] [Thread-133478] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:38:07.542 [DEBUG] [Thread-133478] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T19:38:07.542 [DEBUG] [Thread-133478] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:38:07.562 [INFO] [Thread-133478] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:38:07.562 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T19:38:07.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:38:08.393 [DEBUG] [Thread-133478] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:38:08.393 [DEBUG] [Thread-133478] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:38:08.441 [DEBUG] [Thread-133478] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:38:08.441 [DEBUG] [Thread-133478] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:38:08.450 [DEBUG] [Thread-133478] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:38:08.460 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:38:08.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T19:38:08.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T19:38:08.479 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:38:08.479 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:38:08.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:38:08.487 [DEBUG] [Thread-133478] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:38:22.021 [DEBUG] [Thread-133480 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:38:34.308 [DEBUG] [Thread-133481 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:38:37.058 [DEBUG] [Thread-133482 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:38:38.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T19:38:38.509 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T19:38:38.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T19:38:39.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 19, 38, 24), 15.35, 36.65, 0.0, 12.7, 21.35, 0, 0, 0, 2, 0, 0),)
2025-12-31T19:38:39.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 19:38:24
2025-12-31T19:38:39.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T19:38:39.501 [DEBUG] [Thread-133483] [transport.py] [_log()] starting thread (client mode): 0xb1765600
2025-12-31T19:38:39.501 [DEBUG] [Thread-133483] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:38:39.523 [DEBUG] [Thread-133483] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T19:38:39.523 [INFO] [Thread-133483] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T19:38:39.526 [DEBUG] [Thread-133483] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:38:39.526 [DEBUG] [Thread-133483] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T19:38:39.526 [DEBUG] [Thread-133483] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:38:39.526 [DEBUG] [Thread-133483] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:38:39.526 [DEBUG] [Thread-133483] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:38:39.526 [DEBUG] [Thread-133483] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:38:39.527 [DEBUG] [Thread-133483] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:38:39.527 [DEBUG] [Thread-133483] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:38:39.527 [DEBUG] [Thread-133483] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:38:39.527 [DEBUG] [Thread-133483] [transport.py] [_log()] client lang: <none>
2025-12-31T19:38:39.527 [DEBUG] [Thread-133483] [transport.py] [_log()] server lang: <none>
2025-12-31T19:38:39.527 [DEBUG] [Thread-133483] [transport.py] [_log()] kex follows: False
2025-12-31T19:38:39.527 [DEBUG] [Thread-133483] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:38:39.527 [DEBUG] [Thread-133483] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:38:39.527 [DEBUG] [Thread-133483] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:38:39.527 [DEBUG] [Thread-133483] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:38:39.527 [DEBUG] [Thread-133483] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:38:39.527 [DEBUG] [Thread-133483] [transport.py] [_log()] Compression: none
2025-12-31T19:38:39.527 [DEBUG] [Thread-133483] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:38:39.543 [DEBUG] [Thread-133483] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:38:39.544 [DEBUG] [Thread-133483] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:38:39.545 [DEBUG] [Thread-133483] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T19:38:39.545 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T19:38:39.546 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:38:39.547 [DEBUG] [Thread-133483] [transport.py] [_log()] userauth is OK
2025-12-31T19:38:39.547 [DEBUG] [Thread-133483] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:38:39.547 [DEBUG] [Thread-133483] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:38:39.547 [DEBUG] [Thread-133483] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T19:38:39.547 [DEBUG] [Thread-133483] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:38:39.571 [INFO] [Thread-133483] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:38:39.572 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:38:40.331 [DEBUG] [Thread-133483] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:38:40.331 [DEBUG] [Thread-133483] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:38:40.331 [DEBUG] [Thread-133483] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T19:38:40.372 [DEBUG] [Thread-133483] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:38:40.372 [DEBUG] [Thread-133483] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:38:40.374 [DEBUG] [Thread-133483] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:38:40.381 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:38:40.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T19:38:40.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T19:38:40.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T19:38:40.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:38:40.390 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T19:38:40.390 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:38:40.390 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:38:40.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T19:38:40.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.734514 -999.00  +21.30  16.55     41   +7.80 1 2 1 1 1   885    0 13.09 -30.81 ----- 14.5 16.6 265.6 19.6 22.8 -20.1 22.8 -20.3 22.3 -21.0 22.7 -20.2
2025-12-31T19:38:40.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T19:38:40.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T19:38:40.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.734514
2025-12-31T19:38:40.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T19:38:40.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T19:38:40.393 [DEBUG] [Thread-133483] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:38:40.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T19:38:40.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T19:38:40.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T19:38:40.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T19:38:24', tmtdew=15.35, humidity=36.65, cloud=0.0, wind=12.7, temperature=21.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T17:37:42.010', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T19:38:40.476 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T19:38:40.489 [DEBUG] [Thread-133486] [transport.py] [_log()] starting thread (client mode): 0xb1766740
2025-12-31T19:38:40.489 [DEBUG] [Thread-133486] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:38:40.504 [DEBUG] [Thread-133486] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T19:38:40.505 [INFO] [Thread-133486] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T19:38:40.512 [DEBUG] [Thread-133486] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:38:40.512 [DEBUG] [Thread-133486] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T19:38:40.512 [DEBUG] [Thread-133486] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:38:40.512 [DEBUG] [Thread-133486] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:38:40.512 [DEBUG] [Thread-133486] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:38:40.512 [DEBUG] [Thread-133486] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:38:40.512 [DEBUG] [Thread-133486] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:38:40.512 [DEBUG] [Thread-133486] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:38:40.512 [DEBUG] [Thread-133486] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:38:40.512 [DEBUG] [Thread-133486] [transport.py] [_log()] client lang: <none>
2025-12-31T19:38:40.512 [DEBUG] [Thread-133486] [transport.py] [_log()] server lang: <none>
2025-12-31T19:38:40.512 [DEBUG] [Thread-133486] [transport.py] [_log()] kex follows: False
2025-12-31T19:38:40.512 [DEBUG] [Thread-133486] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:38:40.513 [DEBUG] [Thread-133486] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:38:40.513 [DEBUG] [Thread-133486] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:38:40.513 [DEBUG] [Thread-133486] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:38:40.513 [DEBUG] [Thread-133486] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:38:40.513 [DEBUG] [Thread-133486] [transport.py] [_log()] Compression: none
2025-12-31T19:38:40.513 [DEBUG] [Thread-133486] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:38:40.572 [DEBUG] [Thread-133486] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:38:40.572 [DEBUG] [Thread-133486] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:38:40.573 [DEBUG] [Thread-133486] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T19:38:40.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T19:38:40.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:38:40.628 [DEBUG] [Thread-133486] [transport.py] [_log()] userauth is OK
2025-12-31T19:38:40.629 [DEBUG] [Thread-133486] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:38:40.629 [DEBUG] [Thread-133486] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:38:40.629 [DEBUG] [Thread-133486] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T19:38:40.629 [DEBUG] [Thread-133486] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:38:40.648 [INFO] [Thread-133486] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:38:40.648 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T19:38:40.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:38:41.479 [DEBUG] [Thread-133486] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:38:41.480 [DEBUG] [Thread-133486] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:38:41.528 [DEBUG] [Thread-133486] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:38:41.528 [DEBUG] [Thread-133486] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:38:41.538 [DEBUG] [Thread-133486] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:38:41.547 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:38:41.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T19:38:41.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T19:38:41.565 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:38:41.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:38:41.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:38:41.574 [DEBUG] [Thread-133486] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:38:42.937 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:38:42.939 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:38:52.095 [DEBUG] [Thread-133488 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:39:07.141 [DEBUG] [Thread-133489 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:39:11.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T19:39:11.597 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T19:39:11.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T19:39:12.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 19, 38, 56), 15.28, 36.68, 0.0, 15.18, 21.3, 0, 0, 0, 2, 0, 0),)
2025-12-31T19:39:12.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 19:38:56
2025-12-31T19:39:12.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T19:39:12.571 [DEBUG] [Thread-133490] [transport.py] [_log()] starting thread (client mode): 0xb6ba1240
2025-12-31T19:39:12.571 [DEBUG] [Thread-133490] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:39:12.591 [DEBUG] [Thread-133490] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T19:39:12.592 [INFO] [Thread-133490] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T19:39:12.595 [DEBUG] [Thread-133490] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:39:12.595 [DEBUG] [Thread-133490] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T19:39:12.595 [DEBUG] [Thread-133490] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:39:12.595 [DEBUG] [Thread-133490] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:39:12.595 [DEBUG] [Thread-133490] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:39:12.595 [DEBUG] [Thread-133490] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:39:12.595 [DEBUG] [Thread-133490] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:39:12.595 [DEBUG] [Thread-133490] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:39:12.595 [DEBUG] [Thread-133490] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:39:12.595 [DEBUG] [Thread-133490] [transport.py] [_log()] client lang: <none>
2025-12-31T19:39:12.595 [DEBUG] [Thread-133490] [transport.py] [_log()] server lang: <none>
2025-12-31T19:39:12.595 [DEBUG] [Thread-133490] [transport.py] [_log()] kex follows: False
2025-12-31T19:39:12.595 [DEBUG] [Thread-133490] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:39:12.595 [DEBUG] [Thread-133490] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:39:12.595 [DEBUG] [Thread-133490] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:39:12.595 [DEBUG] [Thread-133490] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:39:12.595 [DEBUG] [Thread-133490] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:39:12.595 [DEBUG] [Thread-133490] [transport.py] [_log()] Compression: none
2025-12-31T19:39:12.595 [DEBUG] [Thread-133490] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:39:12.613 [DEBUG] [Thread-133490] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:39:12.614 [DEBUG] [Thread-133490] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:39:12.615 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T19:39:12.615 [DEBUG] [Thread-133490] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T19:39:12.616 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:39:12.617 [DEBUG] [Thread-133490] [transport.py] [_log()] userauth is OK
2025-12-31T19:39:12.617 [DEBUG] [Thread-133490] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:39:12.617 [DEBUG] [Thread-133490] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:39:12.617 [DEBUG] [Thread-133490] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T19:39:12.617 [DEBUG] [Thread-133490] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:39:12.642 [INFO] [Thread-133490] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:39:12.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:39:13.286 [DEBUG] [Thread-133490] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:39:13.287 [DEBUG] [Thread-133490] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:39:13.287 [DEBUG] [Thread-133490] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T19:39:13.328 [DEBUG] [Thread-133490] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:39:13.328 [DEBUG] [Thread-133490] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:39:13.331 [DEBUG] [Thread-133490] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:39:13.344 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:39:13.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T19:39:13.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T19:39:13.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T19:39:13.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:39:13.357 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T19:39:13.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:39:13.357 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:39:13.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T19:39:13.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.734861 -999.00  +21.20  13.64     42   +7.80 1 2 1 1 1   885    0 13.07 -31.81 ----- 13.9 13.6 271.6 18.2 22.7 -20.3 22.8 -20.4 22.3 -20.9 22.6 -20.3
2025-12-31T19:39:13.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T19:39:13.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T19:39:13.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.734861
2025-12-31T19:39:13.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T19:39:13.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T19:39:13.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T19:39:13.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T19:39:13.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T19:39:13.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T19:38:56', tmtdew=15.28, humidity=36.68, cloud=0.0, wind=15.18, temperature=21.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T17:38:11.990', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T19:39:13.360 [DEBUG] [Thread-133490] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:39:13.443 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T19:39:13.456 [DEBUG] [Thread-133493] [transport.py] [_log()] starting thread (client mode): 0xb6ba3e80
2025-12-31T19:39:13.456 [DEBUG] [Thread-133493] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:39:13.470 [DEBUG] [Thread-133493] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T19:39:13.471 [INFO] [Thread-133493] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T19:39:13.479 [DEBUG] [Thread-133493] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:39:13.479 [DEBUG] [Thread-133493] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T19:39:13.479 [DEBUG] [Thread-133493] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:39:13.479 [DEBUG] [Thread-133493] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:39:13.479 [DEBUG] [Thread-133493] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:39:13.479 [DEBUG] [Thread-133493] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:39:13.479 [DEBUG] [Thread-133493] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:39:13.479 [DEBUG] [Thread-133493] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:39:13.479 [DEBUG] [Thread-133493] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:39:13.479 [DEBUG] [Thread-133493] [transport.py] [_log()] client lang: <none>
2025-12-31T19:39:13.479 [DEBUG] [Thread-133493] [transport.py] [_log()] server lang: <none>
2025-12-31T19:39:13.479 [DEBUG] [Thread-133493] [transport.py] [_log()] kex follows: False
2025-12-31T19:39:13.479 [DEBUG] [Thread-133493] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:39:13.479 [DEBUG] [Thread-133493] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:39:13.479 [DEBUG] [Thread-133493] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:39:13.479 [DEBUG] [Thread-133493] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:39:13.479 [DEBUG] [Thread-133493] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:39:13.479 [DEBUG] [Thread-133493] [transport.py] [_log()] Compression: none
2025-12-31T19:39:13.479 [DEBUG] [Thread-133493] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:39:13.536 [DEBUG] [Thread-133493] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:39:13.537 [DEBUG] [Thread-133493] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:39:13.538 [DEBUG] [Thread-133493] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T19:39:13.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T19:39:13.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:39:13.597 [DEBUG] [Thread-133493] [transport.py] [_log()] userauth is OK
2025-12-31T19:39:13.598 [DEBUG] [Thread-133493] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:39:13.598 [DEBUG] [Thread-133493] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:39:13.598 [DEBUG] [Thread-133493] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T19:39:13.598 [DEBUG] [Thread-133493] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:39:13.617 [INFO] [Thread-133493] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:39:13.617 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T19:39:13.617 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:39:14.463 [DEBUG] [Thread-133493] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:39:14.463 [DEBUG] [Thread-133493] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:39:14.511 [DEBUG] [Thread-133493] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:39:14.511 [DEBUG] [Thread-133493] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:39:14.520 [DEBUG] [Thread-133493] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:39:14.530 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:39:14.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T19:39:14.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T19:39:14.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:39:14.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:39:14.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:39:14.557 [DEBUG] [Thread-133493] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:39:22.178 [DEBUG] [Thread-133495 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:39:34.360 [DEBUG] [Thread-133496 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:39:37.232 [DEBUG] [Thread-133497 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:39:43.080 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:39:43.081 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:39:44.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T19:39:44.576 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T19:39:44.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-12-31T19:39:45.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 19, 39, 28), 15.23, 36.81, 0.0, 13.55, 21.32, 0, 0, 0, 2, 0, 0),)
2025-12-31T19:39:45.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 19:39:28
2025-12-31T19:39:45.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T19:39:45.580 [DEBUG] [Thread-133498] [transport.py] [_log()] starting thread (client mode): 0xb17779d0
2025-12-31T19:39:45.580 [DEBUG] [Thread-133498] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:39:45.591 [DEBUG] [Thread-133498] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T19:39:45.591 [INFO] [Thread-133498] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T19:39:45.594 [DEBUG] [Thread-133498] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:39:45.594 [DEBUG] [Thread-133498] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T19:39:45.594 [DEBUG] [Thread-133498] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:39:45.594 [DEBUG] [Thread-133498] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:39:45.594 [DEBUG] [Thread-133498] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:39:45.595 [DEBUG] [Thread-133498] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:39:45.595 [DEBUG] [Thread-133498] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:39:45.595 [DEBUG] [Thread-133498] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:39:45.595 [DEBUG] [Thread-133498] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:39:45.595 [DEBUG] [Thread-133498] [transport.py] [_log()] client lang: <none>
2025-12-31T19:39:45.595 [DEBUG] [Thread-133498] [transport.py] [_log()] server lang: <none>
2025-12-31T19:39:45.595 [DEBUG] [Thread-133498] [transport.py] [_log()] kex follows: False
2025-12-31T19:39:45.595 [DEBUG] [Thread-133498] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:39:45.595 [DEBUG] [Thread-133498] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:39:45.595 [DEBUG] [Thread-133498] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:39:45.595 [DEBUG] [Thread-133498] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:39:45.595 [DEBUG] [Thread-133498] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:39:45.595 [DEBUG] [Thread-133498] [transport.py] [_log()] Compression: none
2025-12-31T19:39:45.595 [DEBUG] [Thread-133498] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:39:45.610 [DEBUG] [Thread-133498] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:39:45.610 [DEBUG] [Thread-133498] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:39:45.611 [DEBUG] [Thread-133498] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T19:39:45.611 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T19:39:45.611 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:39:45.612 [DEBUG] [Thread-133498] [transport.py] [_log()] userauth is OK
2025-12-31T19:39:45.613 [DEBUG] [Thread-133498] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:39:45.613 [DEBUG] [Thread-133498] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:39:45.613 [DEBUG] [Thread-133498] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T19:39:45.613 [DEBUG] [Thread-133498] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:39:45.639 [INFO] [Thread-133498] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:39:45.639 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:39:46.387 [DEBUG] [Thread-133498] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:39:46.387 [DEBUG] [Thread-133498] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:39:46.388 [DEBUG] [Thread-133498] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T19:39:46.428 [DEBUG] [Thread-133498] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:39:46.428 [DEBUG] [Thread-133498] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:39:46.432 [DEBUG] [Thread-133498] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:39:46.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:39:46.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T19:39:46.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T19:39:46.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T19:39:46.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:39:46.447 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T19:39:46.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:39:46.448 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:39:46.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T19:39:46.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.735556 -999.00  +21.20  10.79     41   +7.80 1 2 1 1 1   884    0 12.77 -35.99 ----- 12.4 10.8 278.8 15.2 22.7 -20.1 22.7 -20.1 22.2 -20.7 22.6 -20.3
2025-12-31T19:39:46.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T19:39:46.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T19:39:46.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.735556
2025-12-31T19:39:46.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T19:39:46.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T19:39:46.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T19:39:46.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T19:39:46.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T19:39:46.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T19:39:28', tmtdew=15.23, humidity=36.81, cloud=0.0, wind=13.55, temperature=21.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T17:39:12.038', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T19:39:46.450 [DEBUG] [Thread-133498] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:39:46.533 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T19:39:46.544 [DEBUG] [Thread-133501] [transport.py] [_log()] starting thread (client mode): 0xb6bbbe20
2025-12-31T19:39:46.544 [DEBUG] [Thread-133501] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:39:46.558 [DEBUG] [Thread-133501] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T19:39:46.558 [INFO] [Thread-133501] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T19:39:46.566 [DEBUG] [Thread-133501] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:39:46.566 [DEBUG] [Thread-133501] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T19:39:46.566 [DEBUG] [Thread-133501] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:39:46.566 [DEBUG] [Thread-133501] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:39:46.566 [DEBUG] [Thread-133501] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:39:46.567 [DEBUG] [Thread-133501] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:39:46.567 [DEBUG] [Thread-133501] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:39:46.567 [DEBUG] [Thread-133501] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:39:46.567 [DEBUG] [Thread-133501] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:39:46.567 [DEBUG] [Thread-133501] [transport.py] [_log()] client lang: <none>
2025-12-31T19:39:46.567 [DEBUG] [Thread-133501] [transport.py] [_log()] server lang: <none>
2025-12-31T19:39:46.567 [DEBUG] [Thread-133501] [transport.py] [_log()] kex follows: False
2025-12-31T19:39:46.567 [DEBUG] [Thread-133501] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:39:46.567 [DEBUG] [Thread-133501] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:39:46.567 [DEBUG] [Thread-133501] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:39:46.568 [DEBUG] [Thread-133501] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:39:46.568 [DEBUG] [Thread-133501] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:39:46.568 [DEBUG] [Thread-133501] [transport.py] [_log()] Compression: none
2025-12-31T19:39:46.568 [DEBUG] [Thread-133501] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:39:46.625 [DEBUG] [Thread-133501] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:39:46.626 [DEBUG] [Thread-133501] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:39:46.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T19:39:46.627 [DEBUG] [Thread-133501] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T19:39:46.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:39:46.684 [DEBUG] [Thread-133501] [transport.py] [_log()] userauth is OK
2025-12-31T19:39:46.685 [DEBUG] [Thread-133501] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:39:46.685 [DEBUG] [Thread-133501] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:39:46.686 [DEBUG] [Thread-133501] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T19:39:46.686 [DEBUG] [Thread-133501] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:39:46.704 [INFO] [Thread-133501] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:39:46.704 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T19:39:46.705 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:39:47.535 [DEBUG] [Thread-133501] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:39:47.535 [DEBUG] [Thread-133501] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:39:47.583 [DEBUG] [Thread-133501] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:39:47.583 [DEBUG] [Thread-133501] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:39:47.593 [DEBUG] [Thread-133501] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:39:47.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:39:47.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T19:39:47.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-12-31T19:39:47.621 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:39:47.621 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:39:47.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:39:47.629 [DEBUG] [Thread-133501] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:39:52.271 [DEBUG] [Thread-133503 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:40:07.321 [DEBUG] [Thread-133504 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:40:17.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T19:40:17.651 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T19:40:17.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T19:40:18.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 19, 40), 15.29, 36.76, 0.0, 10.62, 21.3, 0, 0, 0, 2, 0, 0),)
2025-12-31T19:40:18.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 19:40:00
2025-12-31T19:40:18.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T19:40:18.710 [DEBUG] [Thread-133505] [transport.py] [_log()] starting thread (client mode): 0xb6bbb700
2025-12-31T19:40:18.710 [DEBUG] [Thread-133505] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:40:18.731 [DEBUG] [Thread-133505] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T19:40:18.731 [INFO] [Thread-133505] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T19:40:18.734 [DEBUG] [Thread-133505] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:40:18.734 [DEBUG] [Thread-133505] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T19:40:18.734 [DEBUG] [Thread-133505] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:40:18.734 [DEBUG] [Thread-133505] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:40:18.734 [DEBUG] [Thread-133505] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:40:18.734 [DEBUG] [Thread-133505] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:40:18.734 [DEBUG] [Thread-133505] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:40:18.734 [DEBUG] [Thread-133505] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:40:18.734 [DEBUG] [Thread-133505] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:40:18.734 [DEBUG] [Thread-133505] [transport.py] [_log()] client lang: <none>
2025-12-31T19:40:18.734 [DEBUG] [Thread-133505] [transport.py] [_log()] server lang: <none>
2025-12-31T19:40:18.734 [DEBUG] [Thread-133505] [transport.py] [_log()] kex follows: False
2025-12-31T19:40:18.734 [DEBUG] [Thread-133505] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:40:18.735 [DEBUG] [Thread-133505] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:40:18.735 [DEBUG] [Thread-133505] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:40:18.735 [DEBUG] [Thread-133505] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:40:18.735 [DEBUG] [Thread-133505] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:40:18.735 [DEBUG] [Thread-133505] [transport.py] [_log()] Compression: none
2025-12-31T19:40:18.735 [DEBUG] [Thread-133505] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:40:18.750 [DEBUG] [Thread-133505] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:40:18.750 [DEBUG] [Thread-133505] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:40:18.750 [DEBUG] [Thread-133505] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T19:40:18.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T19:40:18.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:40:18.751 [DEBUG] [Thread-133505] [transport.py] [_log()] userauth is OK
2025-12-31T19:40:18.751 [DEBUG] [Thread-133505] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:40:18.751 [DEBUG] [Thread-133505] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:40:18.752 [DEBUG] [Thread-133505] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T19:40:18.752 [DEBUG] [Thread-133505] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:40:18.763 [INFO] [Thread-133505] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:40:18.763 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:40:22.351 [DEBUG] [Thread-133507 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:40:23.585 [DEBUG] [Thread-133505] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:40:23.586 [DEBUG] [Thread-133505] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:40:23.586 [DEBUG] [Thread-133505] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T19:40:23.626 [DEBUG] [Thread-133505] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:40:23.627 [DEBUG] [Thread-133505] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:40:23.630 [DEBUG] [Thread-133505] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:40:23.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:40:23.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T19:40:23.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T19:40:23.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T19:40:23.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:40:23.720 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T19:40:23.720 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:40:23.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:40:23.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T19:40:23.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.735903 -999.00  +21.30  10.84     41   +7.70 1 2 1 1 1   884    0 13.22 -39.14 ----- 10.3 10.8 275.8 13.9 22.7 -20.2 22.7 -20.0 22.2 -20.1 22.5 -20.3
2025-12-31T19:40:23.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T19:40:23.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T19:40:23.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.735903
2025-12-31T19:40:23.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T19:40:23.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T19:40:23.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T19:40:23.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T19:40:23.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T19:40:23.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T19:40:00', tmtdew=15.29, humidity=36.76, cloud=0.0, wind=10.62, temperature=21.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T17:39:42.019', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T19:40:23.723 [DEBUG] [Thread-133505] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:40:23.808 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T19:40:23.820 [DEBUG] [Thread-133509] [transport.py] [_log()] starting thread (client mode): 0xb6bbb040
2025-12-31T19:40:23.821 [DEBUG] [Thread-133509] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:40:23.835 [DEBUG] [Thread-133509] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T19:40:23.835 [INFO] [Thread-133509] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T19:40:23.843 [DEBUG] [Thread-133509] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:40:23.843 [DEBUG] [Thread-133509] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T19:40:23.843 [DEBUG] [Thread-133509] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:40:23.843 [DEBUG] [Thread-133509] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:40:23.843 [DEBUG] [Thread-133509] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:40:23.843 [DEBUG] [Thread-133509] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:40:23.843 [DEBUG] [Thread-133509] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:40:23.843 [DEBUG] [Thread-133509] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:40:23.843 [DEBUG] [Thread-133509] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:40:23.843 [DEBUG] [Thread-133509] [transport.py] [_log()] client lang: <none>
2025-12-31T19:40:23.843 [DEBUG] [Thread-133509] [transport.py] [_log()] server lang: <none>
2025-12-31T19:40:23.844 [DEBUG] [Thread-133509] [transport.py] [_log()] kex follows: False
2025-12-31T19:40:23.844 [DEBUG] [Thread-133509] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:40:23.844 [DEBUG] [Thread-133509] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:40:23.844 [DEBUG] [Thread-133509] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:40:23.844 [DEBUG] [Thread-133509] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:40:23.844 [DEBUG] [Thread-133509] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:40:23.844 [DEBUG] [Thread-133509] [transport.py] [_log()] Compression: none
2025-12-31T19:40:23.844 [DEBUG] [Thread-133509] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:40:23.901 [DEBUG] [Thread-133509] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:40:23.901 [DEBUG] [Thread-133509] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:40:23.902 [DEBUG] [Thread-133509] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T19:40:23.902 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T19:40:23.903 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:40:23.957 [DEBUG] [Thread-133509] [transport.py] [_log()] userauth is OK
2025-12-31T19:40:23.957 [DEBUG] [Thread-133509] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:40:23.958 [DEBUG] [Thread-133509] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:40:23.958 [DEBUG] [Thread-133509] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T19:40:23.958 [DEBUG] [Thread-133509] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:40:23.981 [INFO] [Thread-133509] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:40:23.981 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T19:40:23.982 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:40:24.800 [DEBUG] [Thread-133509] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:40:24.800 [DEBUG] [Thread-133509] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:40:24.849 [DEBUG] [Thread-133509] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:40:24.849 [DEBUG] [Thread-133509] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:40:24.858 [DEBUG] [Thread-133509] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:40:24.867 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:40:24.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T19:40:24.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T19:40:24.886 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:40:24.887 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:40:24.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:40:24.895 [DEBUG] [Thread-133509] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:40:34.421 [DEBUG] [Thread-133511 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:40:37.383 [DEBUG] [Thread-133512 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:40:43.227 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:40:43.228 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:40:52.441 [DEBUG] [Thread-133513 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:40:54.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T19:40:54.893 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T19:40:54.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T19:40:55.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 19, 40, 32), 15.32, 36.7, 0.0, 14.26, 21.28, 0, 0, 0, 2, 0, 0),)
2025-12-31T19:40:55.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 19:40:32
2025-12-31T19:40:55.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T19:40:55.891 [DEBUG] [Thread-133514] [transport.py] [_log()] starting thread (client mode): 0xb17765f0
2025-12-31T19:40:55.891 [DEBUG] [Thread-133514] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:40:55.912 [DEBUG] [Thread-133514] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T19:40:55.912 [INFO] [Thread-133514] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T19:40:55.915 [DEBUG] [Thread-133514] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:40:55.915 [DEBUG] [Thread-133514] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T19:40:55.915 [DEBUG] [Thread-133514] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:40:55.915 [DEBUG] [Thread-133514] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:40:55.915 [DEBUG] [Thread-133514] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:40:55.915 [DEBUG] [Thread-133514] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:40:55.915 [DEBUG] [Thread-133514] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:40:55.915 [DEBUG] [Thread-133514] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:40:55.915 [DEBUG] [Thread-133514] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:40:55.915 [DEBUG] [Thread-133514] [transport.py] [_log()] client lang: <none>
2025-12-31T19:40:55.915 [DEBUG] [Thread-133514] [transport.py] [_log()] server lang: <none>
2025-12-31T19:40:55.915 [DEBUG] [Thread-133514] [transport.py] [_log()] kex follows: False
2025-12-31T19:40:55.915 [DEBUG] [Thread-133514] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:40:55.915 [DEBUG] [Thread-133514] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:40:55.915 [DEBUG] [Thread-133514] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:40:55.916 [DEBUG] [Thread-133514] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:40:55.916 [DEBUG] [Thread-133514] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:40:55.916 [DEBUG] [Thread-133514] [transport.py] [_log()] Compression: none
2025-12-31T19:40:55.916 [DEBUG] [Thread-133514] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:40:55.932 [DEBUG] [Thread-133514] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:40:55.933 [DEBUG] [Thread-133514] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:40:55.933 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T19:40:55.934 [DEBUG] [Thread-133514] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T19:40:55.935 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:40:55.936 [DEBUG] [Thread-133514] [transport.py] [_log()] userauth is OK
2025-12-31T19:40:55.936 [DEBUG] [Thread-133514] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:40:55.936 [DEBUG] [Thread-133514] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:40:55.936 [DEBUG] [Thread-133514] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T19:40:55.936 [DEBUG] [Thread-133514] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:40:55.959 [INFO] [Thread-133514] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:40:55.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:40:56.583 [DEBUG] [Thread-133514] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:40:56.583 [DEBUG] [Thread-133514] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:40:56.583 [DEBUG] [Thread-133514] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T19:40:56.625 [DEBUG] [Thread-133514] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:40:56.625 [DEBUG] [Thread-133514] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:40:56.627 [DEBUG] [Thread-133514] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:40:56.641 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:40:56.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T19:40:56.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T19:40:56.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T19:40:56.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:40:56.647 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T19:40:56.647 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:40:56.647 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:40:56.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T19:40:56.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.736250 -999.00  +21.30  11.34     41   +7.70 1 2 1 1 1   884    0 12.81 -39.67 ----- 15.6 11.3 270.0 13.5 22.7 -20.5 22.7 -20.3 22.2 -20.2 22.5 -20.4
2025-12-31T19:40:56.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T19:40:56.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T19:40:56.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.736250
2025-12-31T19:40:56.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T19:40:56.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T19:40:56.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T19:40:56.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T19:40:56.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T19:40:56.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T19:40:32', tmtdew=15.32, humidity=36.7, cloud=0.0, wind=14.26, temperature=21.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T17:40:12.000', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T19:40:56.649 [DEBUG] [Thread-133514] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:40:56.723 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T19:41:07.475 [DEBUG] [Thread-133517 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:41:22.525 [DEBUG] [Thread-133518 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:41:34.484 [DEBUG] [Thread-133519 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:41:37.559 [DEBUG] [Thread-133520 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:41:43.370 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:41:43.371 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:41:52.595 [DEBUG] [Thread-133521 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:42:07.634 [DEBUG] [Thread-133522 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:42:22.666 [DEBUG] [Thread-133523 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:42:34.582 [DEBUG] [Thread-133524 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:42:37.705 [DEBUG] [Thread-133525 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:42:43.510 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:42:43.511 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:42:52.744 [DEBUG] [Thread-133526 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:43:07.777 [DEBUG] [Thread-133527 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:43:10.037 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-12-31T19:43:22.812 [DEBUG] [Thread-133528 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:43:34.665 [DEBUG] [Thread-133529 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:43:37.845 [DEBUG] [Thread-133530 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:43:40.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T19:43:40.045 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T19:43:40.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T19:43:40.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 19, 43, 13), 15.26, 37.31, 0.0, 17.72, 21.15, 0, 0, 0, 2, 0, 0),)
2025-12-31T19:43:40.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 19:43:13
2025-12-31T19:43:40.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T19:43:41.040 [DEBUG] [Thread-133531] [transport.py] [_log()] starting thread (client mode): 0xb1764730
2025-12-31T19:43:41.040 [DEBUG] [Thread-133531] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:43:41.060 [DEBUG] [Thread-133531] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T19:43:41.061 [INFO] [Thread-133531] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T19:43:41.064 [DEBUG] [Thread-133531] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:43:41.064 [DEBUG] [Thread-133531] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T19:43:41.064 [DEBUG] [Thread-133531] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:43:41.064 [DEBUG] [Thread-133531] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:43:41.064 [DEBUG] [Thread-133531] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:43:41.064 [DEBUG] [Thread-133531] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:43:41.064 [DEBUG] [Thread-133531] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:43:41.064 [DEBUG] [Thread-133531] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:43:41.064 [DEBUG] [Thread-133531] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:43:41.064 [DEBUG] [Thread-133531] [transport.py] [_log()] client lang: <none>
2025-12-31T19:43:41.064 [DEBUG] [Thread-133531] [transport.py] [_log()] server lang: <none>
2025-12-31T19:43:41.064 [DEBUG] [Thread-133531] [transport.py] [_log()] kex follows: False
2025-12-31T19:43:41.064 [DEBUG] [Thread-133531] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:43:41.064 [DEBUG] [Thread-133531] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:43:41.064 [DEBUG] [Thread-133531] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:43:41.064 [DEBUG] [Thread-133531] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:43:41.064 [DEBUG] [Thread-133531] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:43:41.064 [DEBUG] [Thread-133531] [transport.py] [_log()] Compression: none
2025-12-31T19:43:41.064 [DEBUG] [Thread-133531] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:43:41.082 [DEBUG] [Thread-133531] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:43:41.082 [DEBUG] [Thread-133531] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:43:41.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T19:43:41.083 [DEBUG] [Thread-133531] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T19:43:41.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:43:41.085 [DEBUG] [Thread-133531] [transport.py] [_log()] userauth is OK
2025-12-31T19:43:41.085 [DEBUG] [Thread-133531] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:43:41.086 [DEBUG] [Thread-133531] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:43:41.086 [DEBUG] [Thread-133531] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T19:43:41.086 [DEBUG] [Thread-133531] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:43:41.104 [INFO] [Thread-133531] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:43:41.105 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:43:41.974 [DEBUG] [Thread-133531] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:43:41.974 [DEBUG] [Thread-133531] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:43:41.975 [DEBUG] [Thread-133531] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T19:43:42.015 [DEBUG] [Thread-133531] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:43:42.015 [DEBUG] [Thread-133531] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:43:42.019 [DEBUG] [Thread-133531] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:43:42.031 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:43:42.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T19:43:42.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T19:43:42.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T19:43:42.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:43:42.048 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T19:43:42.048 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:43:42.048 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:43:42.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T19:43:42.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.737986 -999.00  +21.00  11.27     42   +7.70 1 2 1 1 1   881    0 12.24 -53.05 ----- 12.8 11.3 274.3 19.6 22.5 -20.6 22.4 -20.7 22.0 -20.2 22.3 -20.5
2025-12-31T19:43:42.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T19:43:42.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T19:43:42.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.737986
2025-12-31T19:43:42.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T19:43:42.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T19:43:42.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T19:43:42.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T19:43:42.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T19:43:42.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T19:43:13', tmtdew=15.26, humidity=37.31, cloud=0.0, wind=17.72, temperature=21.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T17:42:41.990', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T19:43:42.051 [DEBUG] [Thread-133531] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:43:42.138 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T19:43:42.152 [DEBUG] [Thread-133534] [transport.py] [_log()] starting thread (client mode): 0xb1774ee0
2025-12-31T19:43:42.152 [DEBUG] [Thread-133534] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:43:42.166 [DEBUG] [Thread-133534] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T19:43:42.166 [INFO] [Thread-133534] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T19:43:42.174 [DEBUG] [Thread-133534] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:43:42.174 [DEBUG] [Thread-133534] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T19:43:42.174 [DEBUG] [Thread-133534] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:43:42.174 [DEBUG] [Thread-133534] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:43:42.175 [DEBUG] [Thread-133534] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:43:42.175 [DEBUG] [Thread-133534] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:43:42.175 [DEBUG] [Thread-133534] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:43:42.175 [DEBUG] [Thread-133534] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:43:42.175 [DEBUG] [Thread-133534] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:43:42.175 [DEBUG] [Thread-133534] [transport.py] [_log()] client lang: <none>
2025-12-31T19:43:42.175 [DEBUG] [Thread-133534] [transport.py] [_log()] server lang: <none>
2025-12-31T19:43:42.175 [DEBUG] [Thread-133534] [transport.py] [_log()] kex follows: False
2025-12-31T19:43:42.175 [DEBUG] [Thread-133534] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:43:42.175 [DEBUG] [Thread-133534] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:43:42.175 [DEBUG] [Thread-133534] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:43:42.175 [DEBUG] [Thread-133534] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:43:42.175 [DEBUG] [Thread-133534] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:43:42.175 [DEBUG] [Thread-133534] [transport.py] [_log()] Compression: none
2025-12-31T19:43:42.175 [DEBUG] [Thread-133534] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:43:42.233 [DEBUG] [Thread-133534] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:43:42.234 [DEBUG] [Thread-133534] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:43:42.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T19:43:42.235 [DEBUG] [Thread-133534] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T19:43:42.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:43:42.292 [DEBUG] [Thread-133534] [transport.py] [_log()] userauth is OK
2025-12-31T19:43:42.292 [DEBUG] [Thread-133534] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:43:42.293 [DEBUG] [Thread-133534] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:43:42.293 [DEBUG] [Thread-133534] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T19:43:42.293 [DEBUG] [Thread-133534] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:43:42.311 [INFO] [Thread-133534] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:43:42.311 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T19:43:42.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:43:43.085 [DEBUG] [Thread-133534] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:43:43.085 [DEBUG] [Thread-133534] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:43:43.133 [DEBUG] [Thread-133534] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:43:43.134 [DEBUG] [Thread-133534] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:43:43.143 [DEBUG] [Thread-133534] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:43:43.152 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:43:43.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T19:43:43.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T19:43:43.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:43:43.171 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:43:43.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:43:43.179 [DEBUG] [Thread-133534] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:43:50.214 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:43:50.215 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:43:52.882 [DEBUG] [Thread-133536 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:44:07.935 [DEBUG] [Thread-133537 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:44:13.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T19:44:13.175 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T19:44:13.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T19:44:13.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 19, 43, 45), 15.21, 37.31, 0.0, 17.19, 21.1, 0, 0, 0, 2, 0, 0),)
2025-12-31T19:44:13.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 19:43:45
2025-12-31T19:44:14.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T19:44:14.214 [DEBUG] [Thread-133538] [transport.py] [_log()] starting thread (client mode): 0xb95d4610
2025-12-31T19:44:14.214 [DEBUG] [Thread-133538] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:44:14.230 [DEBUG] [Thread-133538] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T19:44:14.230 [INFO] [Thread-133538] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T19:44:14.233 [DEBUG] [Thread-133538] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:44:14.234 [DEBUG] [Thread-133538] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T19:44:14.234 [DEBUG] [Thread-133538] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:44:14.234 [DEBUG] [Thread-133538] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:44:14.234 [DEBUG] [Thread-133538] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:44:14.234 [DEBUG] [Thread-133538] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:44:14.234 [DEBUG] [Thread-133538] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:44:14.234 [DEBUG] [Thread-133538] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:44:14.234 [DEBUG] [Thread-133538] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:44:14.234 [DEBUG] [Thread-133538] [transport.py] [_log()] client lang: <none>
2025-12-31T19:44:14.234 [DEBUG] [Thread-133538] [transport.py] [_log()] server lang: <none>
2025-12-31T19:44:14.234 [DEBUG] [Thread-133538] [transport.py] [_log()] kex follows: False
2025-12-31T19:44:14.234 [DEBUG] [Thread-133538] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:44:14.234 [DEBUG] [Thread-133538] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:44:14.234 [DEBUG] [Thread-133538] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:44:14.234 [DEBUG] [Thread-133538] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:44:14.234 [DEBUG] [Thread-133538] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:44:14.234 [DEBUG] [Thread-133538] [transport.py] [_log()] Compression: none
2025-12-31T19:44:14.234 [DEBUG] [Thread-133538] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:44:14.250 [DEBUG] [Thread-133538] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:44:14.251 [DEBUG] [Thread-133538] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:44:14.251 [DEBUG] [Thread-133538] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T19:44:14.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T19:44:14.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:44:14.252 [DEBUG] [Thread-133538] [transport.py] [_log()] userauth is OK
2025-12-31T19:44:14.252 [DEBUG] [Thread-133538] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:44:14.252 [DEBUG] [Thread-133538] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:44:14.252 [DEBUG] [Thread-133538] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T19:44:14.252 [DEBUG] [Thread-133538] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:44:14.263 [INFO] [Thread-133538] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:44:14.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:44:14.899 [DEBUG] [Thread-133538] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:44:14.899 [DEBUG] [Thread-133538] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:44:14.899 [DEBUG] [Thread-133538] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T19:44:14.940 [DEBUG] [Thread-133538] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:44:14.940 [DEBUG] [Thread-133538] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:44:14.942 [DEBUG] [Thread-133538] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:44:14.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:44:14.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T19:44:14.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T19:44:14.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T19:44:14.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:44:14.958 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T19:44:14.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:44:14.958 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:44:14.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T19:44:14.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.738333 -999.00  +21.10   9.30     42   +7.60 1 2 1 1 1   881    0 12.28 -62.49 ----- 12.5 9.3 286.0 14.7 22.4 -20.6 22.5 -20.6 22.0 -20.4 22.3 -20.6
2025-12-31T19:44:14.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T19:44:14.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T19:44:14.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.738333
2025-12-31T19:44:14.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T19:44:14.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T19:44:14.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T19:44:14.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T19:44:14.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T19:44:14.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T19:43:45', tmtdew=15.21, humidity=37.31, cloud=0.0, wind=17.19, temperature=21.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T17:43:11.971', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T19:44:14.959 [DEBUG] [Thread-133538] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:44:15.033 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T19:44:15.047 [DEBUG] [Thread-133541] [transport.py] [_log()] starting thread (client mode): 0xb1776650
2025-12-31T19:44:15.048 [DEBUG] [Thread-133541] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:44:15.063 [DEBUG] [Thread-133541] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T19:44:15.063 [INFO] [Thread-133541] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T19:44:15.070 [DEBUG] [Thread-133541] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:44:15.070 [DEBUG] [Thread-133541] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T19:44:15.071 [DEBUG] [Thread-133541] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:44:15.071 [DEBUG] [Thread-133541] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:44:15.071 [DEBUG] [Thread-133541] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:44:15.071 [DEBUG] [Thread-133541] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:44:15.071 [DEBUG] [Thread-133541] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:44:15.071 [DEBUG] [Thread-133541] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:44:15.071 [DEBUG] [Thread-133541] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:44:15.071 [DEBUG] [Thread-133541] [transport.py] [_log()] client lang: <none>
2025-12-31T19:44:15.071 [DEBUG] [Thread-133541] [transport.py] [_log()] server lang: <none>
2025-12-31T19:44:15.071 [DEBUG] [Thread-133541] [transport.py] [_log()] kex follows: False
2025-12-31T19:44:15.071 [DEBUG] [Thread-133541] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:44:15.071 [DEBUG] [Thread-133541] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:44:15.071 [DEBUG] [Thread-133541] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:44:15.071 [DEBUG] [Thread-133541] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:44:15.071 [DEBUG] [Thread-133541] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:44:15.071 [DEBUG] [Thread-133541] [transport.py] [_log()] Compression: none
2025-12-31T19:44:15.071 [DEBUG] [Thread-133541] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:44:15.128 [DEBUG] [Thread-133541] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:44:15.129 [DEBUG] [Thread-133541] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:44:15.129 [DEBUG] [Thread-133541] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T19:44:15.129 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T19:44:15.129 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:44:15.186 [DEBUG] [Thread-133541] [transport.py] [_log()] userauth is OK
2025-12-31T19:44:15.186 [DEBUG] [Thread-133541] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:44:15.186 [DEBUG] [Thread-133541] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:44:15.186 [DEBUG] [Thread-133541] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T19:44:15.186 [DEBUG] [Thread-133541] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:44:15.204 [INFO] [Thread-133541] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:44:15.204 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T19:44:15.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:44:16.037 [DEBUG] [Thread-133541] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:44:16.037 [DEBUG] [Thread-133541] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:44:16.085 [DEBUG] [Thread-133541] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:44:16.086 [DEBUG] [Thread-133541] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:44:16.094 [DEBUG] [Thread-133541] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:44:16.102 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:44:16.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T19:44:16.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-12-31T19:44:16.118 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:44:16.118 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:44:16.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:44:16.125 [DEBUG] [Thread-133541] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:44:22.967 [DEBUG] [Thread-133543 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:44:34.741 [DEBUG] [Thread-133544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:44:38.019 [DEBUG] [Thread-133545 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:44:46.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T19:44:46.146 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T19:44:46.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T19:44:46.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 19, 44, 17), 15.2, 37.35, 0.0, 17.84, 21.08, 0, 0, 0, 2, 0, 0),)
2025-12-31T19:44:46.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 19:44:17
2025-12-31T19:44:47.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T19:44:47.150 [DEBUG] [Thread-133546] [transport.py] [_log()] starting thread (client mode): 0xb6bb8640
2025-12-31T19:44:47.150 [DEBUG] [Thread-133546] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:44:47.169 [DEBUG] [Thread-133546] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T19:44:47.169 [INFO] [Thread-133546] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T19:44:47.172 [DEBUG] [Thread-133546] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:44:47.172 [DEBUG] [Thread-133546] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T19:44:47.172 [DEBUG] [Thread-133546] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:44:47.172 [DEBUG] [Thread-133546] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:44:47.172 [DEBUG] [Thread-133546] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:44:47.172 [DEBUG] [Thread-133546] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:44:47.172 [DEBUG] [Thread-133546] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:44:47.172 [DEBUG] [Thread-133546] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:44:47.172 [DEBUG] [Thread-133546] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:44:47.172 [DEBUG] [Thread-133546] [transport.py] [_log()] client lang: <none>
2025-12-31T19:44:47.172 [DEBUG] [Thread-133546] [transport.py] [_log()] server lang: <none>
2025-12-31T19:44:47.172 [DEBUG] [Thread-133546] [transport.py] [_log()] kex follows: False
2025-12-31T19:44:47.173 [DEBUG] [Thread-133546] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:44:47.173 [DEBUG] [Thread-133546] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:44:47.173 [DEBUG] [Thread-133546] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:44:47.173 [DEBUG] [Thread-133546] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:44:47.173 [DEBUG] [Thread-133546] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:44:47.173 [DEBUG] [Thread-133546] [transport.py] [_log()] Compression: none
2025-12-31T19:44:47.173 [DEBUG] [Thread-133546] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:44:47.191 [DEBUG] [Thread-133546] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:44:47.192 [DEBUG] [Thread-133546] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:44:47.192 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T19:44:47.193 [DEBUG] [Thread-133546] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T19:44:47.194 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:44:47.195 [DEBUG] [Thread-133546] [transport.py] [_log()] userauth is OK
2025-12-31T19:44:47.195 [DEBUG] [Thread-133546] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:44:47.195 [DEBUG] [Thread-133546] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:44:47.195 [DEBUG] [Thread-133546] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T19:44:47.195 [DEBUG] [Thread-133546] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:44:47.220 [INFO] [Thread-133546] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:44:47.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:44:48.034 [DEBUG] [Thread-133546] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:44:48.034 [DEBUG] [Thread-133546] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:44:48.035 [DEBUG] [Thread-133546] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T19:44:48.075 [DEBUG] [Thread-133546] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:44:48.075 [DEBUG] [Thread-133546] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:44:48.078 [DEBUG] [Thread-133546] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:44:48.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:44:48.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T19:44:48.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T19:44:48.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T19:44:48.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:44:48.101 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T19:44:48.102 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:44:48.102 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:44:48.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T19:44:48.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.739028 -999.00  +21.00  16.70     42   +7.70 1 2 1 1 1   879    0 11.96 -62.30 ----- 13.6 16.7 272.4 19.7 22.4 -20.8 22.4 -20.2 21.9 -19.9 22.2 -20.2
2025-12-31T19:44:48.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T19:44:48.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T19:44:48.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.739028
2025-12-31T19:44:48.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T19:44:48.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T19:44:48.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T19:44:48.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T19:44:48.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T19:44:48.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T19:44:17', tmtdew=15.2, humidity=37.35, cloud=0.0, wind=17.84, temperature=21.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T17:44:12.019', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T19:44:48.104 [DEBUG] [Thread-133546] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:44:48.196 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T19:44:48.208 [DEBUG] [Thread-133549] [transport.py] [_log()] starting thread (client mode): 0xb1764af0
2025-12-31T19:44:48.208 [DEBUG] [Thread-133549] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:44:48.222 [DEBUG] [Thread-133549] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T19:44:48.222 [INFO] [Thread-133549] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T19:44:48.229 [DEBUG] [Thread-133549] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:44:48.230 [DEBUG] [Thread-133549] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T19:44:48.230 [DEBUG] [Thread-133549] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:44:48.230 [DEBUG] [Thread-133549] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:44:48.230 [DEBUG] [Thread-133549] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:44:48.230 [DEBUG] [Thread-133549] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:44:48.230 [DEBUG] [Thread-133549] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:44:48.230 [DEBUG] [Thread-133549] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:44:48.231 [DEBUG] [Thread-133549] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:44:48.231 [DEBUG] [Thread-133549] [transport.py] [_log()] client lang: <none>
2025-12-31T19:44:48.231 [DEBUG] [Thread-133549] [transport.py] [_log()] server lang: <none>
2025-12-31T19:44:48.231 [DEBUG] [Thread-133549] [transport.py] [_log()] kex follows: False
2025-12-31T19:44:48.231 [DEBUG] [Thread-133549] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:44:48.231 [DEBUG] [Thread-133549] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:44:48.231 [DEBUG] [Thread-133549] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:44:48.231 [DEBUG] [Thread-133549] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:44:48.232 [DEBUG] [Thread-133549] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:44:48.232 [DEBUG] [Thread-133549] [transport.py] [_log()] Compression: none
2025-12-31T19:44:48.232 [DEBUG] [Thread-133549] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:44:48.293 [DEBUG] [Thread-133549] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:44:48.293 [DEBUG] [Thread-133549] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:44:48.294 [DEBUG] [Thread-133549] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T19:44:48.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T19:44:48.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:44:48.348 [DEBUG] [Thread-133549] [transport.py] [_log()] userauth is OK
2025-12-31T19:44:48.348 [DEBUG] [Thread-133549] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:44:48.348 [DEBUG] [Thread-133549] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:44:48.348 [DEBUG] [Thread-133549] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T19:44:48.348 [DEBUG] [Thread-133549] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:44:48.365 [INFO] [Thread-133549] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:44:48.365 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T19:44:48.366 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:44:49.182 [DEBUG] [Thread-133549] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:44:49.183 [DEBUG] [Thread-133549] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:44:49.230 [DEBUG] [Thread-133549] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:44:49.230 [DEBUG] [Thread-133549] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:44:49.240 [DEBUG] [Thread-133549] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:44:49.249 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:44:49.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-12-31T19:44:49.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-12-31T19:44:49.268 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:44:49.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:44:49.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:44:49.277 [DEBUG] [Thread-133549] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:44:53.054 [DEBUG] [Thread-133551 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:44:57.220 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:44:57.221 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:45:08.106 [DEBUG] [Thread-133552 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:45:19.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T19:45:19.293 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T19:45:19.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T19:45:20.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 19, 44, 49), 15.18, 37.26, 0.0, 16.9, 21.08, 0, 0, 0, 2, 0, 0),)
2025-12-31T19:45:20.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 19:44:49
2025-12-31T19:45:20.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T19:45:20.298 [DEBUG] [Thread-133553] [transport.py] [_log()] starting thread (client mode): 0xb17666b0
2025-12-31T19:45:20.298 [DEBUG] [Thread-133553] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:45:20.318 [DEBUG] [Thread-133553] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T19:45:20.318 [INFO] [Thread-133553] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T19:45:20.321 [DEBUG] [Thread-133553] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:45:20.321 [DEBUG] [Thread-133553] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T19:45:20.321 [DEBUG] [Thread-133553] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:45:20.321 [DEBUG] [Thread-133553] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:45:20.321 [DEBUG] [Thread-133553] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:45:20.321 [DEBUG] [Thread-133553] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:45:20.321 [DEBUG] [Thread-133553] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:45:20.321 [DEBUG] [Thread-133553] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:45:20.321 [DEBUG] [Thread-133553] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:45:20.321 [DEBUG] [Thread-133553] [transport.py] [_log()] client lang: <none>
2025-12-31T19:45:20.321 [DEBUG] [Thread-133553] [transport.py] [_log()] server lang: <none>
2025-12-31T19:45:20.322 [DEBUG] [Thread-133553] [transport.py] [_log()] kex follows: False
2025-12-31T19:45:20.322 [DEBUG] [Thread-133553] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:45:20.322 [DEBUG] [Thread-133553] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:45:20.322 [DEBUG] [Thread-133553] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:45:20.322 [DEBUG] [Thread-133553] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:45:20.322 [DEBUG] [Thread-133553] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:45:20.322 [DEBUG] [Thread-133553] [transport.py] [_log()] Compression: none
2025-12-31T19:45:20.322 [DEBUG] [Thread-133553] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:45:20.339 [DEBUG] [Thread-133553] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:45:20.340 [DEBUG] [Thread-133553] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:45:20.341 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T19:45:20.341 [DEBUG] [Thread-133553] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T19:45:20.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:45:20.344 [DEBUG] [Thread-133553] [transport.py] [_log()] userauth is OK
2025-12-31T19:45:20.344 [DEBUG] [Thread-133553] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:45:20.344 [DEBUG] [Thread-133553] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:45:20.344 [DEBUG] [Thread-133553] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T19:45:20.344 [DEBUG] [Thread-133553] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:45:20.366 [INFO] [Thread-133553] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:45:20.367 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:45:23.139 [DEBUG] [Thread-133555 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:45:25.363 [DEBUG] [Thread-133553] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:45:25.364 [DEBUG] [Thread-133553] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:45:25.364 [DEBUG] [Thread-133553] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T19:45:25.404 [DEBUG] [Thread-133553] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:45:25.405 [DEBUG] [Thread-133553] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:45:25.407 [DEBUG] [Thread-133553] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:45:25.522 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:45:25.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T19:45:25.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T19:45:25.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T19:45:25.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:45:25.568 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T19:45:25.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:45:25.568 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:45:25.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T19:45:25.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.739375 -999.00  +21.00  14.62     42   +7.70 1 2 1 1 1   879    0 12.01 -67.34 ----- 14.1 14.6 270.0 21.0 22.3 -20.4 22.3 -20.2 21.9 -19.7 22.2 -20.1
2025-12-31T19:45:25.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T19:45:25.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T19:45:25.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.739375
2025-12-31T19:45:25.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T19:45:25.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T19:45:25.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T19:45:25.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T19:45:25.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T19:45:25.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T19:44:49', tmtdew=15.18, humidity=37.26, cloud=0.0, wind=16.9, temperature=21.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T17:44:42.000', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T19:45:25.570 [DEBUG] [Thread-133553] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:45:25.647 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T19:45:25.659 [DEBUG] [Thread-133557] [transport.py] [_log()] starting thread (client mode): 0xb6bbac20
2025-12-31T19:45:25.659 [DEBUG] [Thread-133557] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:45:25.674 [DEBUG] [Thread-133557] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T19:45:25.674 [INFO] [Thread-133557] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T19:45:25.682 [DEBUG] [Thread-133557] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:45:25.682 [DEBUG] [Thread-133557] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T19:45:25.682 [DEBUG] [Thread-133557] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:45:25.682 [DEBUG] [Thread-133557] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:45:25.682 [DEBUG] [Thread-133557] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:45:25.682 [DEBUG] [Thread-133557] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:45:25.682 [DEBUG] [Thread-133557] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:45:25.683 [DEBUG] [Thread-133557] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:45:25.683 [DEBUG] [Thread-133557] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:45:25.683 [DEBUG] [Thread-133557] [transport.py] [_log()] client lang: <none>
2025-12-31T19:45:25.683 [DEBUG] [Thread-133557] [transport.py] [_log()] server lang: <none>
2025-12-31T19:45:25.683 [DEBUG] [Thread-133557] [transport.py] [_log()] kex follows: False
2025-12-31T19:45:25.683 [DEBUG] [Thread-133557] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:45:25.683 [DEBUG] [Thread-133557] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:45:25.683 [DEBUG] [Thread-133557] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:45:25.684 [DEBUG] [Thread-133557] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:45:25.684 [DEBUG] [Thread-133557] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:45:25.684 [DEBUG] [Thread-133557] [transport.py] [_log()] Compression: none
2025-12-31T19:45:25.684 [DEBUG] [Thread-133557] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:45:25.738 [DEBUG] [Thread-133557] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:45:25.739 [DEBUG] [Thread-133557] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:45:25.739 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T19:45:25.739 [DEBUG] [Thread-133557] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T19:45:25.740 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:45:25.794 [DEBUG] [Thread-133557] [transport.py] [_log()] userauth is OK
2025-12-31T19:45:25.794 [DEBUG] [Thread-133557] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:45:25.795 [DEBUG] [Thread-133557] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:45:25.795 [DEBUG] [Thread-133557] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T19:45:25.795 [DEBUG] [Thread-133557] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:45:25.820 [INFO] [Thread-133557] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:45:25.820 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T19:45:25.821 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:45:26.677 [DEBUG] [Thread-133557] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:45:26.677 [DEBUG] [Thread-133557] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:45:26.724 [DEBUG] [Thread-133557] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:45:26.725 [DEBUG] [Thread-133557] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:45:26.733 [DEBUG] [Thread-133557] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:45:26.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:45:26.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T19:45:26.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-12-31T19:45:26.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:45:26.758 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:45:26.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:45:26.766 [DEBUG] [Thread-133557] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:45:34.815 [DEBUG] [Thread-133559 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:45:38.170 [DEBUG] [Thread-133560 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:45:53.227 [DEBUG] [Thread-133561 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:45:56.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T19:45:56.789 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T19:45:56.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T19:45:57.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 19, 45, 53), 15.14, 37.36, 0.0, 18.95, 21.07, 0, 0, 0, 2, 0, 0),)
2025-12-31T19:45:57.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 19:45:53
2025-12-31T19:45:57.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T19:45:57.782 [DEBUG] [Thread-133562] [transport.py] [_log()] starting thread (client mode): 0xb95904c0
2025-12-31T19:45:57.782 [DEBUG] [Thread-133562] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:45:57.803 [DEBUG] [Thread-133562] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T19:45:57.803 [INFO] [Thread-133562] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T19:45:57.806 [DEBUG] [Thread-133562] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:45:57.806 [DEBUG] [Thread-133562] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T19:45:57.806 [DEBUG] [Thread-133562] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:45:57.806 [DEBUG] [Thread-133562] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:45:57.806 [DEBUG] [Thread-133562] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:45:57.807 [DEBUG] [Thread-133562] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:45:57.807 [DEBUG] [Thread-133562] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:45:57.807 [DEBUG] [Thread-133562] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:45:57.807 [DEBUG] [Thread-133562] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:45:57.807 [DEBUG] [Thread-133562] [transport.py] [_log()] client lang: <none>
2025-12-31T19:45:57.807 [DEBUG] [Thread-133562] [transport.py] [_log()] server lang: <none>
2025-12-31T19:45:57.807 [DEBUG] [Thread-133562] [transport.py] [_log()] kex follows: False
2025-12-31T19:45:57.807 [DEBUG] [Thread-133562] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:45:57.807 [DEBUG] [Thread-133562] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:45:57.807 [DEBUG] [Thread-133562] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:45:57.807 [DEBUG] [Thread-133562] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:45:57.807 [DEBUG] [Thread-133562] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:45:57.808 [DEBUG] [Thread-133562] [transport.py] [_log()] Compression: none
2025-12-31T19:45:57.808 [DEBUG] [Thread-133562] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:45:57.826 [DEBUG] [Thread-133562] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:45:57.826 [DEBUG] [Thread-133562] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:45:57.827 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T19:45:57.827 [DEBUG] [Thread-133562] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T19:45:57.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:45:57.829 [DEBUG] [Thread-133562] [transport.py] [_log()] userauth is OK
2025-12-31T19:45:57.830 [DEBUG] [Thread-133562] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:45:57.830 [DEBUG] [Thread-133562] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:45:57.830 [DEBUG] [Thread-133562] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T19:45:57.830 [DEBUG] [Thread-133562] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:45:57.855 [INFO] [Thread-133562] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:45:57.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:45:58.472 [DEBUG] [Thread-133562] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:45:58.473 [DEBUG] [Thread-133562] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:45:58.473 [DEBUG] [Thread-133562] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T19:45:58.513 [DEBUG] [Thread-133562] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:45:58.513 [DEBUG] [Thread-133562] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:45:58.518 [DEBUG] [Thread-133562] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:45:58.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:45:58.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T19:45:58.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T19:45:58.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T19:45:58.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:45:58.542 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T19:45:58.542 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:45:58.542 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:45:58.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T19:45:58.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.739722 -999.00  +21.00  16.46     42   +7.70 1 2 1 1 1   878    0 11.71 -71.82 ----- 16.3 16.5 271.4 19.6 22.4 -20.5 22.3 -20.0 21.9 -20.1 22.1 -20.1
2025-12-31T19:45:58.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T19:45:58.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T19:45:58.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.739722
2025-12-31T19:45:58.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T19:45:58.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T19:45:58.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T19:45:58.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T19:45:58.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T19:45:58.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T19:45:53', tmtdew=15.14, humidity=37.36, cloud=0.0, wind=18.95, temperature=21.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T17:45:11.981', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T19:45:58.545 [DEBUG] [Thread-133562] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:45:58.630 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T19:45:58.643 [DEBUG] [Thread-133565] [transport.py] [_log()] starting thread (client mode): 0xb6bb2ef0
2025-12-31T19:45:58.643 [DEBUG] [Thread-133565] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:45:58.657 [DEBUG] [Thread-133565] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T19:45:58.657 [INFO] [Thread-133565] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T19:45:58.665 [DEBUG] [Thread-133565] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:45:58.665 [DEBUG] [Thread-133565] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T19:45:58.665 [DEBUG] [Thread-133565] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:45:58.666 [DEBUG] [Thread-133565] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:45:58.666 [DEBUG] [Thread-133565] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:45:58.666 [DEBUG] [Thread-133565] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:45:58.666 [DEBUG] [Thread-133565] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:45:58.666 [DEBUG] [Thread-133565] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:45:58.666 [DEBUG] [Thread-133565] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:45:58.666 [DEBUG] [Thread-133565] [transport.py] [_log()] client lang: <none>
2025-12-31T19:45:58.666 [DEBUG] [Thread-133565] [transport.py] [_log()] server lang: <none>
2025-12-31T19:45:58.666 [DEBUG] [Thread-133565] [transport.py] [_log()] kex follows: False
2025-12-31T19:45:58.666 [DEBUG] [Thread-133565] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:45:58.666 [DEBUG] [Thread-133565] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:45:58.666 [DEBUG] [Thread-133565] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:45:58.666 [DEBUG] [Thread-133565] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:45:58.666 [DEBUG] [Thread-133565] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:45:58.666 [DEBUG] [Thread-133565] [transport.py] [_log()] Compression: none
2025-12-31T19:45:58.666 [DEBUG] [Thread-133565] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:45:58.726 [DEBUG] [Thread-133565] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:45:58.726 [DEBUG] [Thread-133565] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:45:58.727 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T19:45:58.727 [DEBUG] [Thread-133565] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T19:45:58.728 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:45:58.781 [DEBUG] [Thread-133565] [transport.py] [_log()] userauth is OK
2025-12-31T19:45:58.782 [DEBUG] [Thread-133565] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:45:58.782 [DEBUG] [Thread-133565] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:45:58.782 [DEBUG] [Thread-133565] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T19:45:58.782 [DEBUG] [Thread-133565] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:45:58.800 [INFO] [Thread-133565] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:45:58.800 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T19:45:58.801 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:45:59.630 [DEBUG] [Thread-133565] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:45:59.631 [DEBUG] [Thread-133565] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:45:59.678 [DEBUG] [Thread-133565] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:45:59.678 [DEBUG] [Thread-133565] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:45:59.687 [DEBUG] [Thread-133565] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:45:59.699 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:45:59.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-12-31T19:45:59.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T19:45:59.720 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:45:59.721 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:45:59.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:45:59.729 [DEBUG] [Thread-133565] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:46:01.510 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:46:01.511 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:46:08.264 [DEBUG] [Thread-133567 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:46:23.312 [DEBUG] [Thread-133568 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:46:29.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T19:46:29.752 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T19:46:29.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T19:46:30.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 19, 46, 25), 15.18, 37.25, 0.0, 18.07, 21.03, 0, 0, 0, 2, 0, 0),)
2025-12-31T19:46:30.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 19:46:25
2025-12-31T19:46:30.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T19:46:30.737 [DEBUG] [Thread-133569] [transport.py] [_log()] starting thread (client mode): 0xb6bb0af0
2025-12-31T19:46:30.737 [DEBUG] [Thread-133569] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:46:30.757 [DEBUG] [Thread-133569] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T19:46:30.757 [INFO] [Thread-133569] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T19:46:30.760 [DEBUG] [Thread-133569] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:46:30.760 [DEBUG] [Thread-133569] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T19:46:30.760 [DEBUG] [Thread-133569] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:46:30.760 [DEBUG] [Thread-133569] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:46:30.760 [DEBUG] [Thread-133569] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:46:30.760 [DEBUG] [Thread-133569] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:46:30.760 [DEBUG] [Thread-133569] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:46:30.761 [DEBUG] [Thread-133569] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:46:30.761 [DEBUG] [Thread-133569] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:46:30.761 [DEBUG] [Thread-133569] [transport.py] [_log()] client lang: <none>
2025-12-31T19:46:30.761 [DEBUG] [Thread-133569] [transport.py] [_log()] server lang: <none>
2025-12-31T19:46:30.761 [DEBUG] [Thread-133569] [transport.py] [_log()] kex follows: False
2025-12-31T19:46:30.761 [DEBUG] [Thread-133569] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:46:30.761 [DEBUG] [Thread-133569] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:46:30.761 [DEBUG] [Thread-133569] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:46:30.761 [DEBUG] [Thread-133569] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:46:30.761 [DEBUG] [Thread-133569] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:46:30.761 [DEBUG] [Thread-133569] [transport.py] [_log()] Compression: none
2025-12-31T19:46:30.761 [DEBUG] [Thread-133569] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:46:30.781 [DEBUG] [Thread-133569] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:46:30.781 [DEBUG] [Thread-133569] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:46:30.782 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T19:46:30.782 [DEBUG] [Thread-133569] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T19:46:30.783 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:46:30.785 [DEBUG] [Thread-133569] [transport.py] [_log()] userauth is OK
2025-12-31T19:46:30.785 [DEBUG] [Thread-133569] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:46:30.786 [DEBUG] [Thread-133569] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:46:30.786 [DEBUG] [Thread-133569] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T19:46:30.786 [DEBUG] [Thread-133569] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:46:30.810 [INFO] [Thread-133569] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:46:30.810 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:46:31.547 [DEBUG] [Thread-133569] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:46:31.547 [DEBUG] [Thread-133569] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:46:31.547 [DEBUG] [Thread-133569] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T19:46:31.588 [DEBUG] [Thread-133569] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:46:31.588 [DEBUG] [Thread-133569] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:46:31.592 [DEBUG] [Thread-133569] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:46:31.603 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:46:31.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T19:46:31.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T19:46:31.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T19:46:31.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:46:31.618 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T19:46:31.618 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:46:31.619 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:46:31.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T19:46:31.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.740070 -999.00  +21.00  19.02     42   +7.70 1 2 1 1 1   877    0 11.73 -74.02 ----- 16.1 19.0 275.4 22.2 22.3 -20.2 22.3 -19.9 21.9 -19.4 22.1 -20.0
2025-12-31T19:46:31.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T19:46:31.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T19:46:31.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.740070
2025-12-31T19:46:31.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T19:46:31.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T19:46:31.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T19:46:31.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T19:46:31.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T19:46:31.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T19:46:25', tmtdew=15.18, humidity=37.25, cloud=0.0, wind=18.07, temperature=21.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T17:45:42.048', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T19:46:31.621 [DEBUG] [Thread-133569] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:46:31.704 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T19:46:31.717 [DEBUG] [Thread-133572] [transport.py] [_log()] starting thread (client mode): 0xb6b61480
2025-12-31T19:46:31.717 [DEBUG] [Thread-133572] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:46:31.735 [DEBUG] [Thread-133572] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T19:46:31.735 [INFO] [Thread-133572] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T19:46:31.745 [DEBUG] [Thread-133572] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:46:31.745 [DEBUG] [Thread-133572] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T19:46:31.746 [DEBUG] [Thread-133572] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:46:31.746 [DEBUG] [Thread-133572] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:46:31.746 [DEBUG] [Thread-133572] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:46:31.746 [DEBUG] [Thread-133572] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:46:31.746 [DEBUG] [Thread-133572] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:46:31.746 [DEBUG] [Thread-133572] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:46:31.746 [DEBUG] [Thread-133572] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:46:31.746 [DEBUG] [Thread-133572] [transport.py] [_log()] client lang: <none>
2025-12-31T19:46:31.746 [DEBUG] [Thread-133572] [transport.py] [_log()] server lang: <none>
2025-12-31T19:46:31.746 [DEBUG] [Thread-133572] [transport.py] [_log()] kex follows: False
2025-12-31T19:46:31.746 [DEBUG] [Thread-133572] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:46:31.746 [DEBUG] [Thread-133572] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:46:31.746 [DEBUG] [Thread-133572] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:46:31.746 [DEBUG] [Thread-133572] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:46:31.746 [DEBUG] [Thread-133572] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:46:31.746 [DEBUG] [Thread-133572] [transport.py] [_log()] Compression: none
2025-12-31T19:46:31.746 [DEBUG] [Thread-133572] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:46:31.800 [DEBUG] [Thread-133572] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:46:31.801 [DEBUG] [Thread-133572] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:46:31.801 [DEBUG] [Thread-133572] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T19:46:31.802 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T19:46:31.802 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:46:31.862 [DEBUG] [Thread-133572] [transport.py] [_log()] userauth is OK
2025-12-31T19:46:31.862 [DEBUG] [Thread-133572] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:46:31.862 [DEBUG] [Thread-133572] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:46:31.863 [DEBUG] [Thread-133572] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T19:46:31.863 [DEBUG] [Thread-133572] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:46:31.885 [INFO] [Thread-133572] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:46:31.885 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T19:46:31.886 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:46:32.705 [DEBUG] [Thread-133572] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:46:32.705 [DEBUG] [Thread-133572] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:46:32.753 [DEBUG] [Thread-133572] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:46:32.753 [DEBUG] [Thread-133572] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:46:32.762 [DEBUG] [Thread-133572] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:46:32.770 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:46:32.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T19:46:32.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T19:46:32.788 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:46:32.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:46:32.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:46:32.796 [DEBUG] [Thread-133572] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:46:34.892 [DEBUG] [Thread-133574 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:46:38.351 [DEBUG] [Thread-133575 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:46:53.402 [DEBUG] [Thread-133576 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:47:02.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T19:47:02.807 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T19:47:02.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T19:47:03.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 19, 46, 57), 15.19, 37.36, 0.0, 17.84, 21.12, 0, 0, 0, 2, 0, 0),)
2025-12-31T19:47:03.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 19:46:57
2025-12-31T19:47:03.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T19:47:03.797 [DEBUG] [Thread-133577] [transport.py] [_log()] starting thread (client mode): 0xb95918a0
2025-12-31T19:47:03.797 [DEBUG] [Thread-133577] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:47:03.816 [DEBUG] [Thread-133577] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T19:47:03.817 [INFO] [Thread-133577] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T19:47:03.820 [DEBUG] [Thread-133577] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:47:03.820 [DEBUG] [Thread-133577] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T19:47:03.820 [DEBUG] [Thread-133577] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:47:03.820 [DEBUG] [Thread-133577] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:47:03.820 [DEBUG] [Thread-133577] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:47:03.820 [DEBUG] [Thread-133577] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:47:03.820 [DEBUG] [Thread-133577] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:47:03.821 [DEBUG] [Thread-133577] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:47:03.821 [DEBUG] [Thread-133577] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:47:03.821 [DEBUG] [Thread-133577] [transport.py] [_log()] client lang: <none>
2025-12-31T19:47:03.821 [DEBUG] [Thread-133577] [transport.py] [_log()] server lang: <none>
2025-12-31T19:47:03.821 [DEBUG] [Thread-133577] [transport.py] [_log()] kex follows: False
2025-12-31T19:47:03.821 [DEBUG] [Thread-133577] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:47:03.821 [DEBUG] [Thread-133577] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:47:03.821 [DEBUG] [Thread-133577] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:47:03.821 [DEBUG] [Thread-133577] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:47:03.821 [DEBUG] [Thread-133577] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:47:03.821 [DEBUG] [Thread-133577] [transport.py] [_log()] Compression: none
2025-12-31T19:47:03.821 [DEBUG] [Thread-133577] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:47:03.840 [DEBUG] [Thread-133577] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:47:03.840 [DEBUG] [Thread-133577] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:47:03.841 [DEBUG] [Thread-133577] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T19:47:03.841 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T19:47:03.842 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:47:03.844 [DEBUG] [Thread-133577] [transport.py] [_log()] userauth is OK
2025-12-31T19:47:03.844 [DEBUG] [Thread-133577] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:47:03.844 [DEBUG] [Thread-133577] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:47:03.844 [DEBUG] [Thread-133577] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T19:47:03.844 [DEBUG] [Thread-133577] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:47:03.872 [INFO] [Thread-133577] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:47:03.872 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:47:04.523 [DEBUG] [Thread-133577] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:47:04.523 [DEBUG] [Thread-133577] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:47:04.523 [DEBUG] [Thread-133577] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T19:47:04.564 [DEBUG] [Thread-133577] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:47:04.564 [DEBUG] [Thread-133577] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:47:04.568 [DEBUG] [Thread-133577] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:47:04.579 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:47:04.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T19:47:04.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T19:47:04.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T19:47:04.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:47:04.592 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T19:47:04.592 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:47:04.592 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:47:04.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T19:47:04.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.740417 -999.00  +21.10  11.53     42   +7.70 1 2 1 1 1   876    0 11.38 -74.60 ----- 9.6 11.5 289.8 18.9 22.3 -20.1 22.3 -19.7 21.8 -19.2 22.1 -20.0
2025-12-31T19:47:04.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T19:47:04.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T19:47:04.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.740417
2025-12-31T19:47:04.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T19:47:04.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T19:47:04.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T19:47:04.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T19:47:04.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T19:47:04.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T19:46:57', tmtdew=15.19, humidity=37.36, cloud=0.0, wind=17.84, temperature=21.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T17:46:12.029', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T19:47:04.595 [DEBUG] [Thread-133577] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:47:04.679 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T19:47:04.691 [DEBUG] [Thread-133580] [transport.py] [_log()] starting thread (client mode): 0xb9592740
2025-12-31T19:47:04.691 [DEBUG] [Thread-133580] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:47:04.706 [DEBUG] [Thread-133580] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T19:47:04.706 [INFO] [Thread-133580] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T19:47:04.714 [DEBUG] [Thread-133580] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:47:04.714 [DEBUG] [Thread-133580] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T19:47:04.714 [DEBUG] [Thread-133580] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:47:04.714 [DEBUG] [Thread-133580] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:47:04.714 [DEBUG] [Thread-133580] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:47:04.714 [DEBUG] [Thread-133580] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:47:04.714 [DEBUG] [Thread-133580] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:47:04.714 [DEBUG] [Thread-133580] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:47:04.714 [DEBUG] [Thread-133580] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:47:04.714 [DEBUG] [Thread-133580] [transport.py] [_log()] client lang: <none>
2025-12-31T19:47:04.714 [DEBUG] [Thread-133580] [transport.py] [_log()] server lang: <none>
2025-12-31T19:47:04.714 [DEBUG] [Thread-133580] [transport.py] [_log()] kex follows: False
2025-12-31T19:47:04.714 [DEBUG] [Thread-133580] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:47:04.714 [DEBUG] [Thread-133580] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:47:04.714 [DEBUG] [Thread-133580] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:47:04.714 [DEBUG] [Thread-133580] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:47:04.714 [DEBUG] [Thread-133580] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:47:04.714 [DEBUG] [Thread-133580] [transport.py] [_log()] Compression: none
2025-12-31T19:47:04.714 [DEBUG] [Thread-133580] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:47:04.771 [DEBUG] [Thread-133580] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:47:04.771 [DEBUG] [Thread-133580] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:47:04.772 [DEBUG] [Thread-133580] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T19:47:04.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T19:47:04.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:47:04.827 [DEBUG] [Thread-133580] [transport.py] [_log()] userauth is OK
2025-12-31T19:47:04.827 [DEBUG] [Thread-133580] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:47:04.827 [DEBUG] [Thread-133580] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:47:04.827 [DEBUG] [Thread-133580] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T19:47:04.828 [DEBUG] [Thread-133580] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:47:04.847 [INFO] [Thread-133580] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:47: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-12-31T19:47:04.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:47:05.691 [DEBUG] [Thread-133580] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:47:05.691 [DEBUG] [Thread-133580] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:47:05.740 [DEBUG] [Thread-133580] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:47:05.740 [DEBUG] [Thread-133580] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:47:05.749 [DEBUG] [Thread-133580] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:47:05.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:47:05.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T19:47:05.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T19:47:05.774 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:47:05.774 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:47:05.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:47:05.782 [DEBUG] [Thread-133580] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:47:06.883 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:47:06.885 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:47:08.435 [DEBUG] [Thread-133582 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:47:23.492 [DEBUG] [Thread-133583 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:47:34.967 [DEBUG] [Thread-133584 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:47:35.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T19:47:35.804 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T19:47:35.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T19:47:36.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 19, 47, 29), 15.17, 37.41, 0.0, 16.25, 21.1, 0, 0, 0, 2, 0, 0),)
2025-12-31T19:47:36.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 19:47:29
2025-12-31T19:47:36.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T19:47:36.795 [DEBUG] [Thread-133585] [transport.py] [_log()] starting thread (client mode): 0xb95d54b0
2025-12-31T19:47:36.795 [DEBUG] [Thread-133585] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:47:36.818 [DEBUG] [Thread-133585] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T19:47:36.818 [INFO] [Thread-133585] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T19:47:36.822 [DEBUG] [Thread-133585] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:47:36.823 [DEBUG] [Thread-133585] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T19:47:36.823 [DEBUG] [Thread-133585] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:47:36.823 [DEBUG] [Thread-133585] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:47:36.823 [DEBUG] [Thread-133585] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:47:36.823 [DEBUG] [Thread-133585] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:47:36.823 [DEBUG] [Thread-133585] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:47:36.823 [DEBUG] [Thread-133585] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:47:36.823 [DEBUG] [Thread-133585] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:47:36.823 [DEBUG] [Thread-133585] [transport.py] [_log()] client lang: <none>
2025-12-31T19:47:36.823 [DEBUG] [Thread-133585] [transport.py] [_log()] server lang: <none>
2025-12-31T19:47:36.824 [DEBUG] [Thread-133585] [transport.py] [_log()] kex follows: False
2025-12-31T19:47:36.824 [DEBUG] [Thread-133585] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:47:36.824 [DEBUG] [Thread-133585] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:47:36.824 [DEBUG] [Thread-133585] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:47:36.824 [DEBUG] [Thread-133585] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:47:36.824 [DEBUG] [Thread-133585] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:47:36.824 [DEBUG] [Thread-133585] [transport.py] [_log()] Compression: none
2025-12-31T19:47:36.824 [DEBUG] [Thread-133585] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:47:36.842 [DEBUG] [Thread-133585] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:47:36.842 [DEBUG] [Thread-133585] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:47:36.843 [DEBUG] [Thread-133585] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T19:47:36.843 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T19:47:36.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:47:36.844 [DEBUG] [Thread-133585] [transport.py] [_log()] userauth is OK
2025-12-31T19:47:36.845 [DEBUG] [Thread-133585] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:47:36.845 [DEBUG] [Thread-133585] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:47:36.845 [DEBUG] [Thread-133585] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T19:47:36.845 [DEBUG] [Thread-133585] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:47:36.869 [INFO] [Thread-133585] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:47:36.870 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:47:37.633 [DEBUG] [Thread-133585] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:47:37.633 [DEBUG] [Thread-133585] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:47:37.633 [DEBUG] [Thread-133585] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T19:47:37.675 [DEBUG] [Thread-133585] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:47:37.675 [DEBUG] [Thread-133585] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:47:37.680 [DEBUG] [Thread-133585] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:47:37.690 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:47:37.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T19:47:37.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T19:47:37.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T19:47:37.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:47:37.707 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T19:47:37.707 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:47:37.707 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:47:37.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T19:47:37.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.740764 -999.00  +21.10  16.26     42   +7.70 1 2 1 1 1   875    0 11.44 -75.20 ----- 15.2 16.3 267.8 19.7 22.3 -20.0 22.3 -19.5 21.8 -19.4 22.1 -19.8
2025-12-31T19:47:37.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T19:47:37.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T19:47:37.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.740764
2025-12-31T19:47:37.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T19:47:37.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T19:47:37.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T19:47:37.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T19:47:37.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T19:47:37.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T19:47:29', tmtdew=15.17, humidity=37.41, cloud=0.0, wind=16.25, temperature=21.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T17:46:42.010', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T19:47:37.710 [DEBUG] [Thread-133585] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:47:37.793 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T19:47:37.808 [DEBUG] [Thread-133588] [transport.py] [_log()] starting thread (client mode): 0xb17662f0
2025-12-31T19:47:37.808 [DEBUG] [Thread-133588] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:47:37.822 [DEBUG] [Thread-133588] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T19:47:37.822 [INFO] [Thread-133588] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T19:47:37.831 [DEBUG] [Thread-133588] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:47:37.831 [DEBUG] [Thread-133588] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T19:47:37.832 [DEBUG] [Thread-133588] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:47:37.832 [DEBUG] [Thread-133588] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:47:37.832 [DEBUG] [Thread-133588] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:47:37.832 [DEBUG] [Thread-133588] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:47:37.832 [DEBUG] [Thread-133588] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:47:37.832 [DEBUG] [Thread-133588] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:47:37.832 [DEBUG] [Thread-133588] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:47:37.832 [DEBUG] [Thread-133588] [transport.py] [_log()] client lang: <none>
2025-12-31T19:47:37.832 [DEBUG] [Thread-133588] [transport.py] [_log()] server lang: <none>
2025-12-31T19:47:37.832 [DEBUG] [Thread-133588] [transport.py] [_log()] kex follows: False
2025-12-31T19:47:37.832 [DEBUG] [Thread-133588] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:47:37.832 [DEBUG] [Thread-133588] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:47:37.832 [DEBUG] [Thread-133588] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:47:37.832 [DEBUG] [Thread-133588] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:47:37.832 [DEBUG] [Thread-133588] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:47:37.832 [DEBUG] [Thread-133588] [transport.py] [_log()] Compression: none
2025-12-31T19:47:37.833 [DEBUG] [Thread-133588] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:47:37.891 [DEBUG] [Thread-133588] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:47:37.891 [DEBUG] [Thread-133588] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:47:37.892 [DEBUG] [Thread-133588] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T19:47:37.892 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T19:47:37.893 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:47:37.960 [DEBUG] [Thread-133588] [transport.py] [_log()] userauth is OK
2025-12-31T19:47:37.960 [DEBUG] [Thread-133588] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:47:37.960 [DEBUG] [Thread-133588] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:47:37.960 [DEBUG] [Thread-133588] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T19:47:37.960 [DEBUG] [Thread-133588] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:47:37.981 [INFO] [Thread-133588] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:47:37.982 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T19:47:37.983 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:47:38.528 [DEBUG] [Thread-133590 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:47:38.775 [DEBUG] [Thread-133588] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:47:38.776 [DEBUG] [Thread-133588] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:47:38.824 [DEBUG] [Thread-133588] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:47:38.824 [DEBUG] [Thread-133588] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:47:38.834 [DEBUG] [Thread-133588] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:47:38.843 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:47:38.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T19:47:38.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-12-31T19:47:38.862 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:47:38.862 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:47:38.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:47:38.870 [DEBUG] [Thread-133588] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:47:53.582 [DEBUG] [Thread-133591 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:48:08.616 [DEBUG] [Thread-133592 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:48:08.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T19:48:08.866 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T19:48:08.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T19:48:09.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 19, 48, 1), 15.19, 37.36, 0.0, 16.43, 21.08, 0, 0, 0, 2, 0, 0),)
2025-12-31T19:48:09.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 19:48:01
2025-12-31T19:48:09.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T19:48:09.910 [DEBUG] [Thread-133593] [transport.py] [_log()] starting thread (client mode): 0xb6bbb8e0
2025-12-31T19:48:09.910 [DEBUG] [Thread-133593] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:48:09.925 [DEBUG] [Thread-133593] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T19:48:09.925 [INFO] [Thread-133593] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T19:48:09.929 [DEBUG] [Thread-133593] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:48:09.929 [DEBUG] [Thread-133593] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T19:48:09.929 [DEBUG] [Thread-133593] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:48:09.929 [DEBUG] [Thread-133593] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:48:09.929 [DEBUG] [Thread-133593] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:48:09.929 [DEBUG] [Thread-133593] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:48:09.929 [DEBUG] [Thread-133593] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:48:09.929 [DEBUG] [Thread-133593] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:48:09.929 [DEBUG] [Thread-133593] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:48:09.929 [DEBUG] [Thread-133593] [transport.py] [_log()] client lang: <none>
2025-12-31T19:48:09.929 [DEBUG] [Thread-133593] [transport.py] [_log()] server lang: <none>
2025-12-31T19:48:09.929 [DEBUG] [Thread-133593] [transport.py] [_log()] kex follows: False
2025-12-31T19:48:09.929 [DEBUG] [Thread-133593] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:48:09.929 [DEBUG] [Thread-133593] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:48:09.929 [DEBUG] [Thread-133593] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:48:09.929 [DEBUG] [Thread-133593] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:48:09.929 [DEBUG] [Thread-133593] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:48:09.929 [DEBUG] [Thread-133593] [transport.py] [_log()] Compression: none
2025-12-31T19:48:09.929 [DEBUG] [Thread-133593] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:48:09.947 [DEBUG] [Thread-133593] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:48:09.947 [DEBUG] [Thread-133593] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:48:09.947 [DEBUG] [Thread-133593] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T19:48:09.947 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T19:48:09.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:48:09.949 [DEBUG] [Thread-133593] [transport.py] [_log()] userauth is OK
2025-12-31T19:48:09.949 [DEBUG] [Thread-133593] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:48:09.949 [DEBUG] [Thread-133593] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:48:09.950 [DEBUG] [Thread-133593] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T19:48:09.950 [DEBUG] [Thread-133593] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:48:09.961 [INFO] [Thread-133593] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:48:09.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:48:10.610 [DEBUG] [Thread-133593] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:48:10.611 [DEBUG] [Thread-133593] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:48:10.611 [DEBUG] [Thread-133593] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T19:48:10.651 [DEBUG] [Thread-133593] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:48:10.652 [DEBUG] [Thread-133593] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:48:10.654 [DEBUG] [Thread-133593] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:48:10.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:48:10.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T19:48:10.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T19:48:10.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T19:48:10.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:48:10.670 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T19:48:10.670 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:48:10.670 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:48:10.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T19:48:10.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.741111 -999.00  +21.10  16.71     42   +7.70 1 2 1 1 1   873    0 11.56 -73.72 ----- 13.9 16.7 277.6 19.7 22.2 -19.9 22.2 -19.5 21.8 -19.1 22.0 -19.9
2025-12-31T19:48:10.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T19:48:10.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T19:48:10.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.741111
2025-12-31T19:48:10.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T19:48:10.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T19:48:10.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T19:48:10.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T19:48:10.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T19:48:10.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T19:48:01', tmtdew=15.19, humidity=37.36, cloud=0.0, wind=16.43, temperature=21.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T17:47:11.990', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T19:48:10.671 [DEBUG] [Thread-133593] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:48:10.745 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T19:48:10.758 [DEBUG] [Thread-133596] [transport.py] [_log()] starting thread (client mode): 0xb6bbbe20
2025-12-31T19:48:10.758 [DEBUG] [Thread-133596] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:48:10.772 [DEBUG] [Thread-133596] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T19:48:10.772 [INFO] [Thread-133596] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T19:48:10.780 [DEBUG] [Thread-133596] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:48:10.780 [DEBUG] [Thread-133596] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T19:48:10.780 [DEBUG] [Thread-133596] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:48:10.780 [DEBUG] [Thread-133596] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:48:10.780 [DEBUG] [Thread-133596] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:48:10.780 [DEBUG] [Thread-133596] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:48:10.780 [DEBUG] [Thread-133596] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:48:10.780 [DEBUG] [Thread-133596] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:48:10.780 [DEBUG] [Thread-133596] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:48:10.780 [DEBUG] [Thread-133596] [transport.py] [_log()] client lang: <none>
2025-12-31T19:48:10.780 [DEBUG] [Thread-133596] [transport.py] [_log()] server lang: <none>
2025-12-31T19:48:10.780 [DEBUG] [Thread-133596] [transport.py] [_log()] kex follows: False
2025-12-31T19:48:10.780 [DEBUG] [Thread-133596] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:48:10.780 [DEBUG] [Thread-133596] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:48:10.780 [DEBUG] [Thread-133596] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:48:10.780 [DEBUG] [Thread-133596] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:48:10.780 [DEBUG] [Thread-133596] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:48:10.780 [DEBUG] [Thread-133596] [transport.py] [_log()] Compression: none
2025-12-31T19:48:10.780 [DEBUG] [Thread-133596] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:48:10.823 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:48:10.824 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:48:10.838 [DEBUG] [Thread-133596] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:48:10.838 [DEBUG] [Thread-133596] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:48:10.838 [DEBUG] [Thread-133596] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T19:48:10.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T19:48:10.839 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:48:10.895 [DEBUG] [Thread-133596] [transport.py] [_log()] userauth is OK
2025-12-31T19:48:10.895 [DEBUG] [Thread-133596] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:48:10.896 [DEBUG] [Thread-133596] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:48:10.896 [DEBUG] [Thread-133596] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T19:48:10.896 [DEBUG] [Thread-133596] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:48:10.909 [INFO] [Thread-133596] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:48:10.910 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T19:48:10.910 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:48:11.733 [DEBUG] [Thread-133596] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:48:11.733 [DEBUG] [Thread-133596] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:48:11.781 [DEBUG] [Thread-133596] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:48:11.781 [DEBUG] [Thread-133596] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:48:11.790 [DEBUG] [Thread-133596] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:48:11.797 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:48:11.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T19:48:11.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-12-31T19:48:11.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:48:11.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:48:11.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:48:11.821 [DEBUG] [Thread-133596] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:48:23.651 [DEBUG] [Thread-133598 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:48:35.038 [DEBUG] [Thread-133599 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:48:38.712 [DEBUG] [Thread-133600 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:48:41.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T19:48:41.843 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T19:48:41.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T19:48:42.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 19, 48, 34), 15.27, 37.02, 0.0, 19.8, 21.47, 0, 0, 0, 2, 0, 0),)
2025-12-31T19:48:42.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 19:48:34
2025-12-31T19:48:42.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T19:48:42.825 [DEBUG] [Thread-133601] [transport.py] [_log()] starting thread (client mode): 0xb9593d30
2025-12-31T19:48:42.825 [DEBUG] [Thread-133601] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:48:42.846 [DEBUG] [Thread-133601] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T19:48:42.846 [INFO] [Thread-133601] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T19:48:42.849 [DEBUG] [Thread-133601] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:48:42.849 [DEBUG] [Thread-133601] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T19:48:42.849 [DEBUG] [Thread-133601] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:48:42.849 [DEBUG] [Thread-133601] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:48:42.850 [DEBUG] [Thread-133601] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:48:42.850 [DEBUG] [Thread-133601] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:48:42.850 [DEBUG] [Thread-133601] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:48:42.850 [DEBUG] [Thread-133601] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:48:42.850 [DEBUG] [Thread-133601] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:48:42.850 [DEBUG] [Thread-133601] [transport.py] [_log()] client lang: <none>
2025-12-31T19:48:42.850 [DEBUG] [Thread-133601] [transport.py] [_log()] server lang: <none>
2025-12-31T19:48:42.850 [DEBUG] [Thread-133601] [transport.py] [_log()] kex follows: False
2025-12-31T19:48:42.850 [DEBUG] [Thread-133601] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:48:42.850 [DEBUG] [Thread-133601] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:48:42.850 [DEBUG] [Thread-133601] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:48:42.850 [DEBUG] [Thread-133601] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:48:42.850 [DEBUG] [Thread-133601] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:48:42.850 [DEBUG] [Thread-133601] [transport.py] [_log()] Compression: none
2025-12-31T19:48:42.850 [DEBUG] [Thread-133601] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:48:42.866 [DEBUG] [Thread-133601] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:48:42.866 [DEBUG] [Thread-133601] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:48:42.866 [DEBUG] [Thread-133601] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T19:48:42.866 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T19:48:42.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:48:42.867 [DEBUG] [Thread-133601] [transport.py] [_log()] userauth is OK
2025-12-31T19:48:42.867 [DEBUG] [Thread-133601] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:48:42.867 [DEBUG] [Thread-133601] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:48:42.867 [DEBUG] [Thread-133601] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T19:48:42.867 [DEBUG] [Thread-133601] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:48:42.878 [INFO] [Thread-133601] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:48:42.879 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:48:43.652 [DEBUG] [Thread-133601] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:48:43.652 [DEBUG] [Thread-133601] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:48:43.653 [DEBUG] [Thread-133601] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T19:48:43.693 [DEBUG] [Thread-133601] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:48:43.693 [DEBUG] [Thread-133601] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:48:43.696 [DEBUG] [Thread-133601] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:48:43.708 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:48:43.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T19:48:43.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T19:48:43.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T19:48:43.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:48:43.716 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T19:48:43.716 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:48:43.716 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:48:43.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T19:48:43.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.741458 -999.00  +21.00  16.48     42   +7.80 1 2 1 1 1   872    0 11.26 -76.17 ----- 14.4 16.5 262.4 19.6 22.2 -19.7 22.2 -19.4 21.8 -18.8 22.0 -19.7
2025-12-31T19:48:43.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T19:48:43.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T19:48:43.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.741458
2025-12-31T19:48:43.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T19:48:43.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T19:48:43.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T19:48:43.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T19:48:43.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T19:48:43.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T19:48:34', tmtdew=15.27, humidity=37.02, cloud=0.0, wind=19.8, temperature=21.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T17:47:41.971', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T19:48:43.718 [DEBUG] [Thread-133601] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:48:43.796 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T19:48:43.807 [DEBUG] [Thread-133604] [transport.py] [_log()] starting thread (client mode): 0xb6bbd240
2025-12-31T19:48:43.807 [DEBUG] [Thread-133604] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:48:43.822 [DEBUG] [Thread-133604] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T19:48:43.822 [INFO] [Thread-133604] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T19:48:43.830 [DEBUG] [Thread-133604] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:48:43.830 [DEBUG] [Thread-133604] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T19:48:43.830 [DEBUG] [Thread-133604] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:48:43.830 [DEBUG] [Thread-133604] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:48:43.830 [DEBUG] [Thread-133604] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:48:43.830 [DEBUG] [Thread-133604] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:48:43.830 [DEBUG] [Thread-133604] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:48:43.830 [DEBUG] [Thread-133604] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:48:43.830 [DEBUG] [Thread-133604] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:48:43.830 [DEBUG] [Thread-133604] [transport.py] [_log()] client lang: <none>
2025-12-31T19:48:43.831 [DEBUG] [Thread-133604] [transport.py] [_log()] server lang: <none>
2025-12-31T19:48:43.831 [DEBUG] [Thread-133604] [transport.py] [_log()] kex follows: False
2025-12-31T19:48:43.831 [DEBUG] [Thread-133604] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:48:43.831 [DEBUG] [Thread-133604] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:48:43.831 [DEBUG] [Thread-133604] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:48:43.831 [DEBUG] [Thread-133604] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:48:43.831 [DEBUG] [Thread-133604] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:48:43.831 [DEBUG] [Thread-133604] [transport.py] [_log()] Compression: none
2025-12-31T19:48:43.831 [DEBUG] [Thread-133604] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:48:43.886 [DEBUG] [Thread-133604] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:48:43.887 [DEBUG] [Thread-133604] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:48:43.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T19:48:43.888 [DEBUG] [Thread-133604] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T19:48:43.889 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:48:43.943 [DEBUG] [Thread-133604] [transport.py] [_log()] userauth is OK
2025-12-31T19:48:43.943 [DEBUG] [Thread-133604] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:48:43.943 [DEBUG] [Thread-133604] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:48:43.943 [DEBUG] [Thread-133604] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T19:48:43.944 [DEBUG] [Thread-133604] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:48:43.967 [INFO] [Thread-133604] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:48:43.968 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T19:48:43.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:48:44.774 [DEBUG] [Thread-133604] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:48:44.775 [DEBUG] [Thread-133604] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:48:44.822 [DEBUG] [Thread-133604] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:48:44.822 [DEBUG] [Thread-133604] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:48:44.831 [DEBUG] [Thread-133604] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:48:44.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:48:44.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-12-31T19:48:44.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-12-31T19:48:44.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:48:44.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:48:44.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:48:44.868 [DEBUG] [Thread-133604] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:48:53.748 [DEBUG] [Thread-133606 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:49:08.808 [DEBUG] [Thread-133607 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:49:14.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T19:49:14.891 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T19:49:14.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T19:49:15.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 19, 49, 6), 14.96, 37.56, 0.0, 15.67, 21.07, 0, 0, 0, 2, 0, 0),)
2025-12-31T19:49:15.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 19:49:06
2025-12-31T19:49:15.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T19:49:15.887 [DEBUG] [Thread-133608] [transport.py] [_log()] starting thread (client mode): 0xb1764d60
2025-12-31T19:49:15.887 [DEBUG] [Thread-133608] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:49:15.900 [DEBUG] [Thread-133608] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T19:49:15.900 [INFO] [Thread-133608] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T19:49:15.903 [DEBUG] [Thread-133608] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:49:15.903 [DEBUG] [Thread-133608] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T19:49:15.903 [DEBUG] [Thread-133608] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:49:15.903 [DEBUG] [Thread-133608] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:49:15.904 [DEBUG] [Thread-133608] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:49:15.904 [DEBUG] [Thread-133608] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:49:15.904 [DEBUG] [Thread-133608] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:49:15.904 [DEBUG] [Thread-133608] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:49:15.904 [DEBUG] [Thread-133608] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:49:15.904 [DEBUG] [Thread-133608] [transport.py] [_log()] client lang: <none>
2025-12-31T19:49:15.904 [DEBUG] [Thread-133608] [transport.py] [_log()] server lang: <none>
2025-12-31T19:49:15.904 [DEBUG] [Thread-133608] [transport.py] [_log()] kex follows: False
2025-12-31T19:49:15.904 [DEBUG] [Thread-133608] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:49:15.904 [DEBUG] [Thread-133608] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:49:15.904 [DEBUG] [Thread-133608] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:49:15.904 [DEBUG] [Thread-133608] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:49:15.904 [DEBUG] [Thread-133608] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:49:15.904 [DEBUG] [Thread-133608] [transport.py] [_log()] Compression: none
2025-12-31T19:49:15.904 [DEBUG] [Thread-133608] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:49:15.921 [DEBUG] [Thread-133608] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:49:15.922 [DEBUG] [Thread-133608] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:49:15.922 [DEBUG] [Thread-133608] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T19:49:15.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T19:49:15.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:49:15.924 [DEBUG] [Thread-133608] [transport.py] [_log()] userauth is OK
2025-12-31T19:49:15.924 [DEBUG] [Thread-133608] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:49:15.924 [DEBUG] [Thread-133608] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:49:15.924 [DEBUG] [Thread-133608] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T19:49:15.924 [DEBUG] [Thread-133608] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:49:15.943 [INFO] [Thread-133608] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:49:15.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:49:16.545 [DEBUG] [Thread-133608] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:49:16.545 [DEBUG] [Thread-133608] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:49:16.545 [DEBUG] [Thread-133608] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T19:49:16.586 [DEBUG] [Thread-133608] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:49:16.586 [DEBUG] [Thread-133608] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:49:16.589 [DEBUG] [Thread-133608] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:49:16.601 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:49:16.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T19:49:16.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T19:49:16.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T19:49:16.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:49:16.613 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T19:49:16.613 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:49:16.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:49:16.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T19:49:16.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.742153 -999.00  +21.00  16.73     42   +7.90 1 2 1 1 1   869    0 11.92 -69.07 ----- 13.5 16.7 275.4 19.5 22.2 -19.2 22.1 -18.9 21.7 -18.4 22.0 -19.0
2025-12-31T19:49:16.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T19:49:16.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T19:49:16.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.742153
2025-12-31T19:49:16.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T19:49:16.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T19:49:16.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T19:49:16.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T19:49:16.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T19:49:16.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T19:49:06', tmtdew=14.96, humidity=37.56, cloud=0.0, wind=15.67, temperature=21.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T17:48:42.019', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T19:49:16.615 [DEBUG] [Thread-133608] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:49:16.689 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T19:49:16.701 [DEBUG] [Thread-133611] [transport.py] [_log()] starting thread (client mode): 0xb6bb16c0
2025-12-31T19:49:16.701 [DEBUG] [Thread-133611] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:49:16.715 [DEBUG] [Thread-133611] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T19:49:16.716 [INFO] [Thread-133611] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T19:49:16.723 [DEBUG] [Thread-133611] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:49:16.724 [DEBUG] [Thread-133611] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T19:49:16.724 [DEBUG] [Thread-133611] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:49:16.724 [DEBUG] [Thread-133611] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:49:16.724 [DEBUG] [Thread-133611] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:49:16.724 [DEBUG] [Thread-133611] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:49:16.724 [DEBUG] [Thread-133611] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:49:16.724 [DEBUG] [Thread-133611] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:49:16.724 [DEBUG] [Thread-133611] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:49:16.724 [DEBUG] [Thread-133611] [transport.py] [_log()] client lang: <none>
2025-12-31T19:49:16.724 [DEBUG] [Thread-133611] [transport.py] [_log()] server lang: <none>
2025-12-31T19:49:16.724 [DEBUG] [Thread-133611] [transport.py] [_log()] kex follows: False
2025-12-31T19:49:16.724 [DEBUG] [Thread-133611] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:49:16.724 [DEBUG] [Thread-133611] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:49:16.725 [DEBUG] [Thread-133611] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:49:16.725 [DEBUG] [Thread-133611] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:49:16.725 [DEBUG] [Thread-133611] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:49:16.725 [DEBUG] [Thread-133611] [transport.py] [_log()] Compression: none
2025-12-31T19:49:16.725 [DEBUG] [Thread-133611] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:49:16.782 [DEBUG] [Thread-133611] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:49:16.782 [DEBUG] [Thread-133611] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:49:16.783 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T19:49:16.784 [DEBUG] [Thread-133611] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T19:49:16.785 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:49:16.838 [DEBUG] [Thread-133611] [transport.py] [_log()] userauth is OK
2025-12-31T19:49:16.838 [DEBUG] [Thread-133611] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:49:16.838 [DEBUG] [Thread-133611] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:49:16.839 [DEBUG] [Thread-133611] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T19:49:16.839 [DEBUG] [Thread-133611] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:49:16.857 [INFO] [Thread-133611] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:49:16.858 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T19:49:16.858 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:49:17.177 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:49:17.179 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:49:17.668 [DEBUG] [Thread-133611] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:49:17.669 [DEBUG] [Thread-133611] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:49:17.716 [DEBUG] [Thread-133611] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:49:17.716 [DEBUG] [Thread-133611] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:49:17.726 [DEBUG] [Thread-133611] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:49:17.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:49:17.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T19:49:17.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T19:49:17.754 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:49:17.754 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:49:17.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:49:17.763 [DEBUG] [Thread-133611] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:49:23.846 [DEBUG] [Thread-133613 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:49:35.111 [DEBUG] [Thread-133614 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:49:38.897 [DEBUG] [Thread-133615 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:49:47.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T19:49:47.785 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T19:49:47.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T19:49:48.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 19, 49, 38), 14.93, 37.64, 0.0, 15.3, 21.03, 0, 0, 0, 2, 0, 0),)
2025-12-31T19:49:48.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 19:49:38
2025-12-31T19:49:48.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T19:49:48.782 [DEBUG] [Thread-133616] [transport.py] [_log()] starting thread (client mode): 0xb17447f0
2025-12-31T19:49:48.782 [DEBUG] [Thread-133616] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:49:48.801 [DEBUG] [Thread-133616] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T19:49:48.801 [INFO] [Thread-133616] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T19:49:48.804 [DEBUG] [Thread-133616] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:49:48.804 [DEBUG] [Thread-133616] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T19:49:48.804 [DEBUG] [Thread-133616] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:49:48.805 [DEBUG] [Thread-133616] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:49:48.805 [DEBUG] [Thread-133616] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:49:48.805 [DEBUG] [Thread-133616] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:49:48.805 [DEBUG] [Thread-133616] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:49:48.805 [DEBUG] [Thread-133616] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:49:48.805 [DEBUG] [Thread-133616] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:49:48.805 [DEBUG] [Thread-133616] [transport.py] [_log()] client lang: <none>
2025-12-31T19:49:48.805 [DEBUG] [Thread-133616] [transport.py] [_log()] server lang: <none>
2025-12-31T19:49:48.805 [DEBUG] [Thread-133616] [transport.py] [_log()] kex follows: False
2025-12-31T19:49:48.805 [DEBUG] [Thread-133616] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:49:48.805 [DEBUG] [Thread-133616] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:49:48.805 [DEBUG] [Thread-133616] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:49:48.805 [DEBUG] [Thread-133616] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:49:48.805 [DEBUG] [Thread-133616] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:49:48.805 [DEBUG] [Thread-133616] [transport.py] [_log()] Compression: none
2025-12-31T19:49:48.805 [DEBUG] [Thread-133616] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:49:48.822 [DEBUG] [Thread-133616] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:49:48.822 [DEBUG] [Thread-133616] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:49:48.823 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T19:49:48.823 [DEBUG] [Thread-133616] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T19:49:48.824 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:49:48.825 [DEBUG] [Thread-133616] [transport.py] [_log()] userauth is OK
2025-12-31T19:49:48.825 [DEBUG] [Thread-133616] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:49:48.825 [DEBUG] [Thread-133616] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:49:48.825 [DEBUG] [Thread-133616] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T19:49:48.825 [DEBUG] [Thread-133616] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:49:48.840 [INFO] [Thread-133616] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:49:48.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:49:49.622 [DEBUG] [Thread-133616] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:49:49.622 [DEBUG] [Thread-133616] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:49:49.623 [DEBUG] [Thread-133616] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T19:49:49.663 [DEBUG] [Thread-133616] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:49:49.663 [DEBUG] [Thread-133616] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:49:49.666 [DEBUG] [Thread-133616] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:49:49.678 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:49:49.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T19:49:49.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T19:49:49.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T19:49:49.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:49:49.689 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T19:49:49.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:49:49.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:49:49.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T19:49:49.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.742500 -999.00  +21.00   8.13     42   +7.80 1 2 1 1 1   867    0 11.22 -75.77 ----- 9.8 8.1 268.8 16.8 22.1 -18.6 22.1 -18.4 21.8 -18.1 22.0 -18.7
2025-12-31T19:49:49.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T19:49:49.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T19:49:49.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.742500
2025-12-31T19:49:49.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T19:49:49.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T19:49:49.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T19:49:49.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T19:49:49.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T19:49:49.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T19:49:38', tmtdew=14.93, humidity=37.64, cloud=0.0, wind=15.3, temperature=21.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T17:49:12.000', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T19:49:49.692 [DEBUG] [Thread-133616] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:49:49.775 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T19:49:49.788 [DEBUG] [Thread-133619] [transport.py] [_log()] starting thread (client mode): 0xb1777cd0
2025-12-31T19:49:49.788 [DEBUG] [Thread-133619] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:49:49.803 [DEBUG] [Thread-133619] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T19:49:49.803 [INFO] [Thread-133619] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T19:49:49.810 [DEBUG] [Thread-133619] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:49:49.811 [DEBUG] [Thread-133619] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T19:49:49.811 [DEBUG] [Thread-133619] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:49:49.811 [DEBUG] [Thread-133619] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:49:49.811 [DEBUG] [Thread-133619] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:49:49.811 [DEBUG] [Thread-133619] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:49:49.811 [DEBUG] [Thread-133619] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:49:49.811 [DEBUG] [Thread-133619] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:49:49.811 [DEBUG] [Thread-133619] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:49:49.811 [DEBUG] [Thread-133619] [transport.py] [_log()] client lang: <none>
2025-12-31T19:49:49.811 [DEBUG] [Thread-133619] [transport.py] [_log()] server lang: <none>
2025-12-31T19:49:49.811 [DEBUG] [Thread-133619] [transport.py] [_log()] kex follows: False
2025-12-31T19:49:49.811 [DEBUG] [Thread-133619] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:49:49.811 [DEBUG] [Thread-133619] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:49:49.811 [DEBUG] [Thread-133619] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:49:49.811 [DEBUG] [Thread-133619] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:49:49.811 [DEBUG] [Thread-133619] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:49:49.811 [DEBUG] [Thread-133619] [transport.py] [_log()] Compression: none
2025-12-31T19:49:49.812 [DEBUG] [Thread-133619] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:49:49.867 [DEBUG] [Thread-133619] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:49:49.867 [DEBUG] [Thread-133619] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:49:49.867 [DEBUG] [Thread-133619] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T19:49:49.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T19:49:49.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:49:49.925 [DEBUG] [Thread-133619] [transport.py] [_log()] userauth is OK
2025-12-31T19:49:49.925 [DEBUG] [Thread-133619] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:49:49.925 [DEBUG] [Thread-133619] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:49:49.925 [DEBUG] [Thread-133619] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T19:49:49.926 [DEBUG] [Thread-133619] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:49:49.943 [INFO] [Thread-133619] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:49:49.944 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T19:49:49.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:49:50.839 [DEBUG] [Thread-133619] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:49:50.839 [DEBUG] [Thread-133619] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:49:50.887 [DEBUG] [Thread-133619] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:49:50.887 [DEBUG] [Thread-133619] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:49:50.896 [DEBUG] [Thread-133619] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:49:50.905 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:49:50.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T19:49:50.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T19:49:50.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:49:50.923 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:49:50.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:49:50.931 [DEBUG] [Thread-133619] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:49:53.931 [DEBUG] [Thread-133621 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:50:08.982 [DEBUG] [Thread-133622 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:50:20.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T19:50:20.944 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T19:50:20.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T19:50:21.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 19, 50, 10), 14.86, 37.83, 0.0, 16.75, 21.03, 0, 0, 0, 2, 0, 0),)
2025-12-31T19:50:21.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 19:50:10
2025-12-31T19:50:21.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T19:50:21.944 [DEBUG] [Thread-133623] [transport.py] [_log()] starting thread (client mode): 0xb95d5840
2025-12-31T19:50:21.944 [DEBUG] [Thread-133623] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:50:21.964 [DEBUG] [Thread-133623] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T19:50:21.964 [INFO] [Thread-133623] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T19:50:21.967 [DEBUG] [Thread-133623] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:50:21.967 [DEBUG] [Thread-133623] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T19:50:21.967 [DEBUG] [Thread-133623] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:50:21.967 [DEBUG] [Thread-133623] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:50:21.967 [DEBUG] [Thread-133623] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:50:21.967 [DEBUG] [Thread-133623] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:50:21.967 [DEBUG] [Thread-133623] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:50:21.968 [DEBUG] [Thread-133623] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:50:21.968 [DEBUG] [Thread-133623] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:50:21.968 [DEBUG] [Thread-133623] [transport.py] [_log()] client lang: <none>
2025-12-31T19:50:21.968 [DEBUG] [Thread-133623] [transport.py] [_log()] server lang: <none>
2025-12-31T19:50:21.968 [DEBUG] [Thread-133623] [transport.py] [_log()] kex follows: False
2025-12-31T19:50:21.968 [DEBUG] [Thread-133623] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:50:21.968 [DEBUG] [Thread-133623] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:50:21.968 [DEBUG] [Thread-133623] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:50:21.968 [DEBUG] [Thread-133623] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:50:21.968 [DEBUG] [Thread-133623] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:50:21.968 [DEBUG] [Thread-133623] [transport.py] [_log()] Compression: none
2025-12-31T19:50:21.968 [DEBUG] [Thread-133623] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:50:21.985 [DEBUG] [Thread-133623] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:50:21.985 [DEBUG] [Thread-133623] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:50:21.986 [DEBUG] [Thread-133623] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T19:50:21.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T19:50:21.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:50:21.987 [DEBUG] [Thread-133623] [transport.py] [_log()] userauth is OK
2025-12-31T19:50:21.987 [DEBUG] [Thread-133623] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:50:21.987 [DEBUG] [Thread-133623] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:50:21.987 [DEBUG] [Thread-133623] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T19:50:21.987 [DEBUG] [Thread-133623] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:50:21.999 [INFO] [Thread-133623] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:50:21.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:50:23.839 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:50:23.840 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:50:24.014 [DEBUG] [Thread-133625 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:50:26.828 [DEBUG] [Thread-133623] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:50:26.828 [DEBUG] [Thread-133623] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:50:26.829 [DEBUG] [Thread-133623] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T19:50:26.869 [DEBUG] [Thread-133623] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:50:26.869 [DEBUG] [Thread-133623] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:50:26.873 [DEBUG] [Thread-133623] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:50:26.886 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:50:26.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T19:50:26.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T19:50:26.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T19:50:26.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:50:26.899 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T19:50:26.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:50:26.899 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:50:26.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T19:50:26.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.742847 -999.00  +21.00  10.25     42   +7.80 1 2 1 1 1   865    0 11.45 -72.96 ----- 10.5 10.2 270.6 13.7 22.1 -18.4 22.1 -18.1 21.7 -17.9 21.9 -18.5
2025-12-31T19:50:26.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T19:50:26.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T19:50:26.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.742847
2025-12-31T19:50:26.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T19:50:26.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T19:50:26.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T19:50:26.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T19:50:26.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T19:50:26.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T19:50:10', tmtdew=14.86, humidity=37.83, cloud=0.0, wind=16.75, temperature=21.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T17:49:41.981', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T19:50:26.902 [DEBUG] [Thread-133623] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:50:26.990 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T19:50:27.001 [DEBUG] [Thread-133627] [transport.py] [_log()] starting thread (client mode): 0xb95d4400
2025-12-31T19:50:27.002 [DEBUG] [Thread-133627] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:50:27.017 [DEBUG] [Thread-133627] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T19:50:27.017 [INFO] [Thread-133627] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T19:50:27.024 [DEBUG] [Thread-133627] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:50:27.024 [DEBUG] [Thread-133627] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T19:50:27.025 [DEBUG] [Thread-133627] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:50:27.025 [DEBUG] [Thread-133627] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:50:27.025 [DEBUG] [Thread-133627] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:50:27.025 [DEBUG] [Thread-133627] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:50:27.025 [DEBUG] [Thread-133627] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:50:27.025 [DEBUG] [Thread-133627] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:50:27.025 [DEBUG] [Thread-133627] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:50:27.025 [DEBUG] [Thread-133627] [transport.py] [_log()] client lang: <none>
2025-12-31T19:50:27.025 [DEBUG] [Thread-133627] [transport.py] [_log()] server lang: <none>
2025-12-31T19:50:27.025 [DEBUG] [Thread-133627] [transport.py] [_log()] kex follows: False
2025-12-31T19:50:27.025 [DEBUG] [Thread-133627] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:50:27.025 [DEBUG] [Thread-133627] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:50:27.025 [DEBUG] [Thread-133627] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:50:27.025 [DEBUG] [Thread-133627] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:50:27.025 [DEBUG] [Thread-133627] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:50:27.025 [DEBUG] [Thread-133627] [transport.py] [_log()] Compression: none
2025-12-31T19:50:27.025 [DEBUG] [Thread-133627] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:50:27.084 [DEBUG] [Thread-133627] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:50:27.084 [DEBUG] [Thread-133627] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:50:27.085 [DEBUG] [Thread-133627] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T19:50:27.085 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T19:50:27.086 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:50:27.144 [DEBUG] [Thread-133627] [transport.py] [_log()] userauth is OK
2025-12-31T19:50:27.144 [DEBUG] [Thread-133627] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:50:27.144 [DEBUG] [Thread-133627] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:50:27.144 [DEBUG] [Thread-133627] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T19:50:27.144 [DEBUG] [Thread-133627] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:50:27.162 [INFO] [Thread-133627] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:50:27.163 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T19:50:27.165 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:50:27.996 [DEBUG] [Thread-133627] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:50:27.996 [DEBUG] [Thread-133627] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:50:28.044 [DEBUG] [Thread-133627] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:50:28.045 [DEBUG] [Thread-133627] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:50:28.053 [DEBUG] [Thread-133627] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:50:28.062 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:50:28.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T19:50:28.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T19:50:28.080 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:50:28.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:50:28.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:50:28.088 [DEBUG] [Thread-133627] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:50:35.188 [DEBUG] [Thread-133629 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:50:39.051 [DEBUG] [Thread-133630 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:50:54.101 [DEBUG] [Thread-133631 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:50:58.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T19:50:58.085 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T19:50:58.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T19:50:58.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 19, 50, 42), 14.79, 37.86, 0.0, 15.21, 20.98, 0, 0, 0, 2, 0, 0),)
2025-12-31T19:50:58.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 19:50:42
2025-12-31T19:50:58.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T19:50:59.072 [DEBUG] [Thread-133632] [transport.py] [_log()] starting thread (client mode): 0xb6bb1210
2025-12-31T19:50:59.072 [DEBUG] [Thread-133632] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:50:59.093 [DEBUG] [Thread-133632] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T19:50:59.093 [INFO] [Thread-133632] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T19:50:59.096 [DEBUG] [Thread-133632] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:50:59.096 [DEBUG] [Thread-133632] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T19:50:59.096 [DEBUG] [Thread-133632] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:50:59.096 [DEBUG] [Thread-133632] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:50:59.096 [DEBUG] [Thread-133632] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:50:59.096 [DEBUG] [Thread-133632] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:50:59.096 [DEBUG] [Thread-133632] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:50:59.096 [DEBUG] [Thread-133632] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:50:59.096 [DEBUG] [Thread-133632] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:50:59.096 [DEBUG] [Thread-133632] [transport.py] [_log()] client lang: <none>
2025-12-31T19:50:59.096 [DEBUG] [Thread-133632] [transport.py] [_log()] server lang: <none>
2025-12-31T19:50:59.096 [DEBUG] [Thread-133632] [transport.py] [_log()] kex follows: False
2025-12-31T19:50:59.096 [DEBUG] [Thread-133632] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:50:59.096 [DEBUG] [Thread-133632] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:50:59.096 [DEBUG] [Thread-133632] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:50:59.096 [DEBUG] [Thread-133632] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:50:59.096 [DEBUG] [Thread-133632] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:50:59.096 [DEBUG] [Thread-133632] [transport.py] [_log()] Compression: none
2025-12-31T19:50:59.096 [DEBUG] [Thread-133632] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:50:59.112 [DEBUG] [Thread-133632] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:50:59.113 [DEBUG] [Thread-133632] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:50:59.114 [DEBUG] [Thread-133632] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T19:50:59.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T19:50:59.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:50:59.115 [DEBUG] [Thread-133632] [transport.py] [_log()] userauth is OK
2025-12-31T19:50:59.116 [DEBUG] [Thread-133632] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:50:59.116 [DEBUG] [Thread-133632] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:50:59.116 [DEBUG] [Thread-133632] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T19:50:59.116 [DEBUG] [Thread-133632] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:50:59.140 [INFO] [Thread-133632] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:50:59.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:50:59.785 [DEBUG] [Thread-133632] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:50:59.785 [DEBUG] [Thread-133632] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:50:59.785 [DEBUG] [Thread-133632] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T19:50:59.826 [DEBUG] [Thread-133632] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:50:59.826 [DEBUG] [Thread-133632] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:50:59.830 [DEBUG] [Thread-133632] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:50:59.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:50:59.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T19:50:59.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T19:50:59.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T19:50:59.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:50:59.853 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T19:50:59.853 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:50:59.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:50:59.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T19:50:59.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.743195 -999.00  +21.00  10.69     42   +7.80 1 2 1 1 1   863    0 11.47 -75.40 ----- 10.3 10.7 284.2 14.1 22.1 -17.9 22.1 -17.8 21.7 -17.8 21.9 -18.4
2025-12-31T19:50:59.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T19:50:59.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T19:50:59.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.743195
2025-12-31T19:50:59.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T19:50:59.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T19:50:59.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T19:50:59.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T19:50:59.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T19:50:59.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T19:50:42', tmtdew=14.79, humidity=37.86, cloud=0.0, wind=15.21, temperature=20.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T17:50:12.048', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T19:50:59.856 [DEBUG] [Thread-133632] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:50:59.940 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T19:50:59.951 [DEBUG] [Thread-133635] [transport.py] [_log()] starting thread (client mode): 0xb6ba2a40
2025-12-31T19:50:59.951 [DEBUG] [Thread-133635] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:50:59.966 [DEBUG] [Thread-133635] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T19:50:59.966 [INFO] [Thread-133635] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T19:50:59.974 [DEBUG] [Thread-133635] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:50:59.974 [DEBUG] [Thread-133635] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T19:50:59.974 [DEBUG] [Thread-133635] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:50:59.974 [DEBUG] [Thread-133635] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:50:59.974 [DEBUG] [Thread-133635] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:50:59.974 [DEBUG] [Thread-133635] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:50:59.974 [DEBUG] [Thread-133635] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:50:59.974 [DEBUG] [Thread-133635] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:50:59.974 [DEBUG] [Thread-133635] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:50:59.974 [DEBUG] [Thread-133635] [transport.py] [_log()] client lang: <none>
2025-12-31T19:50:59.974 [DEBUG] [Thread-133635] [transport.py] [_log()] server lang: <none>
2025-12-31T19:50:59.974 [DEBUG] [Thread-133635] [transport.py] [_log()] kex follows: False
2025-12-31T19:50:59.975 [DEBUG] [Thread-133635] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:50:59.975 [DEBUG] [Thread-133635] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:50:59.975 [DEBUG] [Thread-133635] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:50:59.975 [DEBUG] [Thread-133635] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:50:59.975 [DEBUG] [Thread-133635] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:50:59.975 [DEBUG] [Thread-133635] [transport.py] [_log()] Compression: none
2025-12-31T19:50:59.975 [DEBUG] [Thread-133635] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:51:00.034 [DEBUG] [Thread-133635] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:51:00.034 [DEBUG] [Thread-133635] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:51:00.035 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T19:51:00.035 [DEBUG] [Thread-133635] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T19:51:00.036 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:51:00.095 [DEBUG] [Thread-133635] [transport.py] [_log()] userauth is OK
2025-12-31T19:51:00.095 [DEBUG] [Thread-133635] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:51:00.095 [DEBUG] [Thread-133635] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:51:00.095 [DEBUG] [Thread-133635] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T19:51:00.095 [DEBUG] [Thread-133635] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:51:00.114 [INFO] [Thread-133635] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:51:00.114 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T19:51:00.114 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:51:00.911 [DEBUG] [Thread-133635] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:51:00.911 [DEBUG] [Thread-133635] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:51:00.959 [DEBUG] [Thread-133635] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:51:00.959 [DEBUG] [Thread-133635] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:51:00.968 [DEBUG] [Thread-133635] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:51:00.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:51:00.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T19:51:00.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T19:51:00.996 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:51:00.997 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:51:00.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:51:01.005 [DEBUG] [Thread-133635] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:51:09.138 [DEBUG] [Thread-133637 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:51:24.193 [DEBUG] [Thread-133638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:51:29.096 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:51:29.097 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:51:31.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T19:51:31.028 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T19:51:31.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T19:51:31.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 19, 51, 14), 14.81, 37.78, 0.0, 12.11, 20.85, 0, 0, 0, 2, 0, 0),)
2025-12-31T19:51:31.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 19:51:14
2025-12-31T19:51:31.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T19:51:32.020 [DEBUG] [Thread-133639] [transport.py] [_log()] starting thread (client mode): 0xb9558a30
2025-12-31T19:51:32.020 [DEBUG] [Thread-133639] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:51:32.041 [DEBUG] [Thread-133639] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T19:51:32.042 [INFO] [Thread-133639] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T19:51:32.045 [DEBUG] [Thread-133639] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:51:32.045 [DEBUG] [Thread-133639] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T19:51:32.045 [DEBUG] [Thread-133639] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:51:32.045 [DEBUG] [Thread-133639] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:51:32.045 [DEBUG] [Thread-133639] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:51:32.045 [DEBUG] [Thread-133639] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:51:32.045 [DEBUG] [Thread-133639] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:51:32.045 [DEBUG] [Thread-133639] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:51:32.045 [DEBUG] [Thread-133639] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:51:32.045 [DEBUG] [Thread-133639] [transport.py] [_log()] client lang: <none>
2025-12-31T19:51:32.045 [DEBUG] [Thread-133639] [transport.py] [_log()] server lang: <none>
2025-12-31T19:51:32.045 [DEBUG] [Thread-133639] [transport.py] [_log()] kex follows: False
2025-12-31T19:51:32.045 [DEBUG] [Thread-133639] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:51:32.045 [DEBUG] [Thread-133639] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:51:32.045 [DEBUG] [Thread-133639] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:51:32.045 [DEBUG] [Thread-133639] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:51:32.045 [DEBUG] [Thread-133639] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:51:32.045 [DEBUG] [Thread-133639] [transport.py] [_log()] Compression: none
2025-12-31T19:51:32.045 [DEBUG] [Thread-133639] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:51:32.062 [DEBUG] [Thread-133639] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:51:32.063 [DEBUG] [Thread-133639] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:51:32.063 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T19:51:32.063 [DEBUG] [Thread-133639] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T19:51:32.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:51:32.066 [DEBUG] [Thread-133639] [transport.py] [_log()] userauth is OK
2025-12-31T19:51:32.066 [DEBUG] [Thread-133639] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:51:32.066 [DEBUG] [Thread-133639] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:51:32.066 [DEBUG] [Thread-133639] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T19:51:32.066 [DEBUG] [Thread-133639] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:51:32.085 [INFO] [Thread-133639] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:51:32.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:51:32.812 [DEBUG] [Thread-133639] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:51:32.812 [DEBUG] [Thread-133639] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:51:32.813 [DEBUG] [Thread-133639] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T19:51:32.853 [DEBUG] [Thread-133639] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:51:32.853 [DEBUG] [Thread-133639] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:51:32.857 [DEBUG] [Thread-133639] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:51:32.870 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:51:32.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T19:51:32.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T19:51:32.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T19:51:32.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:51:32.884 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T19:51:32.884 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:51:32.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:51:32.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T19:51:32.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.743542 -999.00  +21.00   9.00     42   +7.80 1 2 1 1 1   861    0 11.48 -70.14 ----- 10.0 9.0 276.6 11.6 22.1 -17.8 22.1 -17.7 21.7 -17.6 21.9 -18.2
2025-12-31T19:51:32.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T19:51:32.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T19:51:32.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.743542
2025-12-31T19:51:32.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T19:51:32.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T19:51:32.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T19:51:32.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T19:51:32.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T19:51:32.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T19:51:14', tmtdew=14.81, humidity=37.78, cloud=0.0, wind=12.11, temperature=20.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T17:50:42.029', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T19:51:32.888 [DEBUG] [Thread-133639] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:51:32.970 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T19:51:32.982 [DEBUG] [Thread-133642] [transport.py] [_log()] starting thread (client mode): 0xb95782b0
2025-12-31T19:51:32.982 [DEBUG] [Thread-133642] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:51:32.997 [DEBUG] [Thread-133642] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T19:51:32.997 [INFO] [Thread-133642] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T19:51:33.005 [DEBUG] [Thread-133642] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:51:33.005 [DEBUG] [Thread-133642] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T19:51:33.005 [DEBUG] [Thread-133642] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:51:33.005 [DEBUG] [Thread-133642] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:51:33.005 [DEBUG] [Thread-133642] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:51:33.005 [DEBUG] [Thread-133642] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:51:33.005 [DEBUG] [Thread-133642] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:51:33.005 [DEBUG] [Thread-133642] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:51:33.005 [DEBUG] [Thread-133642] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:51:33.005 [DEBUG] [Thread-133642] [transport.py] [_log()] client lang: <none>
2025-12-31T19:51:33.005 [DEBUG] [Thread-133642] [transport.py] [_log()] server lang: <none>
2025-12-31T19:51:33.005 [DEBUG] [Thread-133642] [transport.py] [_log()] kex follows: False
2025-12-31T19:51:33.005 [DEBUG] [Thread-133642] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:51:33.006 [DEBUG] [Thread-133642] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:51:33.006 [DEBUG] [Thread-133642] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:51:33.006 [DEBUG] [Thread-133642] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:51:33.006 [DEBUG] [Thread-133642] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:51:33.006 [DEBUG] [Thread-133642] [transport.py] [_log()] Compression: none
2025-12-31T19:51:33.006 [DEBUG] [Thread-133642] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:51:33.060 [DEBUG] [Thread-133642] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:51:33.061 [DEBUG] [Thread-133642] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:51:33.061 [DEBUG] [Thread-133642] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T19:51:33.061 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T19:51:33.061 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:51:33.118 [DEBUG] [Thread-133642] [transport.py] [_log()] userauth is OK
2025-12-31T19:51:33.118 [DEBUG] [Thread-133642] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:51:33.118 [DEBUG] [Thread-133642] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:51:33.118 [DEBUG] [Thread-133642] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T19:51:33.118 [DEBUG] [Thread-133642] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:51:33.139 [INFO] [Thread-133642] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:51:33.140 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T19:51:33.140 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:51:33.963 [DEBUG] [Thread-133642] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:51:33.963 [DEBUG] [Thread-133642] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:51:34.011 [DEBUG] [Thread-133642] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:51:34.011 [DEBUG] [Thread-133642] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:51:34.020 [DEBUG] [Thread-133642] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:51:34.028 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:51:34.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T19:51:34.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T19:51:34.046 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:51:34.046 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:51:34.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:51:34.054 [DEBUG] [Thread-133642] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:51:35.273 [DEBUG] [Thread-133644 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:51:39.224 [DEBUG] [Thread-133645 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:51:54.269 [DEBUG] [Thread-133646 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:52:04.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T19:52:04.076 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T19:52:04.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T19:52:04.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 19, 51, 46), 14.79, 37.84, 0.0, 13.41, 20.92, 0, 0, 0, 2, 0, 0),)
2025-12-31T19:52:04.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 19:51:46
2025-12-31T19:52:04.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T19:52:05.104 [DEBUG] [Thread-133647] [transport.py] [_log()] starting thread (client mode): 0xb6ba1d50
2025-12-31T19:52:05.104 [DEBUG] [Thread-133647] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:52:05.124 [DEBUG] [Thread-133647] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T19:52:05.124 [INFO] [Thread-133647] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T19:52:05.128 [DEBUG] [Thread-133647] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:52:05.128 [DEBUG] [Thread-133647] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T19:52:05.128 [DEBUG] [Thread-133647] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:52:05.128 [DEBUG] [Thread-133647] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:52:05.128 [DEBUG] [Thread-133647] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:52:05.128 [DEBUG] [Thread-133647] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:52:05.128 [DEBUG] [Thread-133647] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:52:05.128 [DEBUG] [Thread-133647] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:52:05.128 [DEBUG] [Thread-133647] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:52:05.128 [DEBUG] [Thread-133647] [transport.py] [_log()] client lang: <none>
2025-12-31T19:52:05.128 [DEBUG] [Thread-133647] [transport.py] [_log()] server lang: <none>
2025-12-31T19:52:05.128 [DEBUG] [Thread-133647] [transport.py] [_log()] kex follows: False
2025-12-31T19:52:05.128 [DEBUG] [Thread-133647] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:52:05.128 [DEBUG] [Thread-133647] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:52:05.128 [DEBUG] [Thread-133647] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:52:05.128 [DEBUG] [Thread-133647] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:52:05.128 [DEBUG] [Thread-133647] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:52:05.128 [DEBUG] [Thread-133647] [transport.py] [_log()] Compression: none
2025-12-31T19:52:05.128 [DEBUG] [Thread-133647] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:52:05.147 [DEBUG] [Thread-133647] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:52:05.147 [DEBUG] [Thread-133647] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:52:05.147 [DEBUG] [Thread-133647] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T19:52:05.147 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T19:52:05.147 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:52:05.148 [DEBUG] [Thread-133647] [transport.py] [_log()] userauth is OK
2025-12-31T19:52:05.148 [DEBUG] [Thread-133647] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:52:05.148 [DEBUG] [Thread-133647] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:52:05.148 [DEBUG] [Thread-133647] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T19:52:05.148 [DEBUG] [Thread-133647] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:52:05.163 [INFO] [Thread-133647] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:52:05.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:52:05.809 [DEBUG] [Thread-133647] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:52:05.809 [DEBUG] [Thread-133647] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:52:05.809 [DEBUG] [Thread-133647] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T19:52:05.850 [DEBUG] [Thread-133647] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:52:05.850 [DEBUG] [Thread-133647] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:52:05.852 [DEBUG] [Thread-133647] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:52:05.864 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:52:05.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T19:52:05.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T19:52:05.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T19:52:05.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:52:05.869 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T19:52:05.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:52:05.869 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:52:05.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T19:52:05.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.743889 -999.00  +21.00   9.73     42   +7.80 1 2 1 1 1   859    0 11.41 -71.94 ----- 8.3 9.7 266.8 11.6 22.1 -17.8 22.1 -17.7 21.7 -17.9 21.9 -18.3
2025-12-31T19:52:05.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T19:52:05.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T19:52:05.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.743889
2025-12-31T19:52:05.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T19:52:05.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T19:52:05.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T19:52:05.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T19:52:05.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T19:52:05.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T19:51:46', tmtdew=14.79, humidity=37.84, cloud=0.0, wind=13.41, temperature=20.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T17:51:12.010', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T19:52:05.870 [DEBUG] [Thread-133647] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:52:05.944 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T19:52:05.959 [DEBUG] [Thread-133650] [transport.py] [_log()] starting thread (client mode): 0xb6bb2230
2025-12-31T19:52:05.960 [DEBUG] [Thread-133650] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:52:05.975 [DEBUG] [Thread-133650] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T19:52:05.975 [INFO] [Thread-133650] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T19:52:05.982 [DEBUG] [Thread-133650] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:52:05.982 [DEBUG] [Thread-133650] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T19:52:05.982 [DEBUG] [Thread-133650] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:52:05.982 [DEBUG] [Thread-133650] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:52:05.982 [DEBUG] [Thread-133650] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:52:05.982 [DEBUG] [Thread-133650] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:52:05.982 [DEBUG] [Thread-133650] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:52:05.982 [DEBUG] [Thread-133650] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:52:05.982 [DEBUG] [Thread-133650] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:52:05.982 [DEBUG] [Thread-133650] [transport.py] [_log()] client lang: <none>
2025-12-31T19:52:05.982 [DEBUG] [Thread-133650] [transport.py] [_log()] server lang: <none>
2025-12-31T19:52:05.982 [DEBUG] [Thread-133650] [transport.py] [_log()] kex follows: False
2025-12-31T19:52:05.982 [DEBUG] [Thread-133650] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:52:05.982 [DEBUG] [Thread-133650] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:52:05.982 [DEBUG] [Thread-133650] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:52:05.982 [DEBUG] [Thread-133650] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:52:05.982 [DEBUG] [Thread-133650] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:52:05.982 [DEBUG] [Thread-133650] [transport.py] [_log()] Compression: none
2025-12-31T19:52:05.983 [DEBUG] [Thread-133650] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:52:06.039 [DEBUG] [Thread-133650] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:52:06.040 [DEBUG] [Thread-133650] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:52:06.040 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T19:52:06.040 [DEBUG] [Thread-133650] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T19:52:06.040 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:52:06.096 [DEBUG] [Thread-133650] [transport.py] [_log()] userauth is OK
2025-12-31T19:52:06.096 [DEBUG] [Thread-133650] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:52:06.097 [DEBUG] [Thread-133650] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:52:06.097 [DEBUG] [Thread-133650] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T19:52:06.097 [DEBUG] [Thread-133650] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:52:06.114 [INFO] [Thread-133650] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:52:06.114 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T19:52:06.115 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:52:07.015 [DEBUG] [Thread-133650] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:52:07.015 [DEBUG] [Thread-133650] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:52:07.063 [DEBUG] [Thread-133650] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:52:07.063 [DEBUG] [Thread-133650] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:52:07.072 [DEBUG] [Thread-133650] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:52:07.080 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:52:07.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T19:52:07.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T19:52:07.096 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:52:07.096 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:52:07.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:52:07.104 [DEBUG] [Thread-133650] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:52:09.299 [DEBUG] [Thread-133652 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:52:24.349 [DEBUG] [Thread-133653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:52:35.348 [DEBUG] [Thread-133654 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:52:37.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T19:52:37.127 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T19:52:37.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T19:52:37.232 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:52:37.233 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:52:37.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 19, 52, 18), 14.8, 37.83, 0.0, 14.08, 20.92, 0, 0, 0, 2, 0, 0),)
2025-12-31T19:52:37.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 19:52:18
2025-12-31T19:52:37.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T19:52:38.126 [DEBUG] [Thread-133655] [transport.py] [_log()] starting thread (client mode): 0xb6bb1c90
2025-12-31T19:52:38.126 [DEBUG] [Thread-133655] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:52:38.146 [DEBUG] [Thread-133655] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T19:52:38.146 [INFO] [Thread-133655] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T19:52:38.149 [DEBUG] [Thread-133655] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:52:38.149 [DEBUG] [Thread-133655] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T19:52:38.149 [DEBUG] [Thread-133655] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:52:38.150 [DEBUG] [Thread-133655] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:52:38.150 [DEBUG] [Thread-133655] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:52:38.150 [DEBUG] [Thread-133655] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:52:38.150 [DEBUG] [Thread-133655] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:52:38.150 [DEBUG] [Thread-133655] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:52:38.150 [DEBUG] [Thread-133655] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:52:38.150 [DEBUG] [Thread-133655] [transport.py] [_log()] client lang: <none>
2025-12-31T19:52:38.150 [DEBUG] [Thread-133655] [transport.py] [_log()] server lang: <none>
2025-12-31T19:52:38.150 [DEBUG] [Thread-133655] [transport.py] [_log()] kex follows: False
2025-12-31T19:52:38.150 [DEBUG] [Thread-133655] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:52:38.150 [DEBUG] [Thread-133655] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:52:38.150 [DEBUG] [Thread-133655] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:52:38.150 [DEBUG] [Thread-133655] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:52:38.150 [DEBUG] [Thread-133655] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:52:38.150 [DEBUG] [Thread-133655] [transport.py] [_log()] Compression: none
2025-12-31T19:52:38.150 [DEBUG] [Thread-133655] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:52:38.168 [DEBUG] [Thread-133655] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:52:38.168 [DEBUG] [Thread-133655] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:52:38.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T19:52:38.169 [DEBUG] [Thread-133655] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T19:52:38.170 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:52:38.171 [DEBUG] [Thread-133655] [transport.py] [_log()] userauth is OK
2025-12-31T19:52:38.172 [DEBUG] [Thread-133655] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:52:38.172 [DEBUG] [Thread-133655] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:52:38.172 [DEBUG] [Thread-133655] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T19:52:38.172 [DEBUG] [Thread-133655] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:52:38.207 [INFO] [Thread-133655] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:52:38.208 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:52:38.959 [DEBUG] [Thread-133655] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:52:38.959 [DEBUG] [Thread-133655] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:52:38.959 [DEBUG] [Thread-133655] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T19:52:39.000 [DEBUG] [Thread-133655] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:52:39.000 [DEBUG] [Thread-133655] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:52:39.002 [DEBUG] [Thread-133655] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:52:39.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:52:39.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T19:52:39.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T19:52:39.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T19:52:39.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:52:39.020 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T19:52:39.020 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:52:39.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:52:39.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T19:52:39.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.744236 -999.00  +21.00  11.93     42   +7.80 1 2 1 1 1   856    0 11.75 -69.65 ----- 12.3 11.9 268.0 13.1 22.1 -17.9 22.1 -17.7 21.7 -17.8 21.9 -18.4
2025-12-31T19:52:39.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T19:52:39.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T19:52:39.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.744236
2025-12-31T19:52:39.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T19:52:39.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T19:52:39.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T19:52:39.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T19:52:39.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T19:52:39.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T19:52:18', tmtdew=14.8, humidity=37.83, cloud=0.0, wind=14.08, temperature=20.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T17:51:41.990', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T19:52:39.023 [DEBUG] [Thread-133655] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:52:39.107 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T19:52:39.119 [DEBUG] [Thread-133658] [transport.py] [_log()] starting thread (client mode): 0xb175b9a0
2025-12-31T19:52:39.119 [DEBUG] [Thread-133658] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:52:39.134 [DEBUG] [Thread-133658] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T19:52:39.134 [INFO] [Thread-133658] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T19:52:39.142 [DEBUG] [Thread-133658] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:52:39.142 [DEBUG] [Thread-133658] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T19:52:39.142 [DEBUG] [Thread-133658] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:52:39.142 [DEBUG] [Thread-133658] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:52:39.142 [DEBUG] [Thread-133658] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:52:39.142 [DEBUG] [Thread-133658] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:52:39.142 [DEBUG] [Thread-133658] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:52:39.142 [DEBUG] [Thread-133658] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:52:39.142 [DEBUG] [Thread-133658] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:52:39.142 [DEBUG] [Thread-133658] [transport.py] [_log()] client lang: <none>
2025-12-31T19:52:39.142 [DEBUG] [Thread-133658] [transport.py] [_log()] server lang: <none>
2025-12-31T19:52:39.142 [DEBUG] [Thread-133658] [transport.py] [_log()] kex follows: False
2025-12-31T19:52:39.142 [DEBUG] [Thread-133658] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:52:39.142 [DEBUG] [Thread-133658] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:52:39.142 [DEBUG] [Thread-133658] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:52:39.142 [DEBUG] [Thread-133658] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:52:39.142 [DEBUG] [Thread-133658] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:52:39.142 [DEBUG] [Thread-133658] [transport.py] [_log()] Compression: none
2025-12-31T19:52:39.142 [DEBUG] [Thread-133658] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:52:39.200 [DEBUG] [Thread-133658] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:52:39.201 [DEBUG] [Thread-133658] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:52:39.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T19:52:39.202 [DEBUG] [Thread-133658] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T19:52:39.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:52:39.256 [DEBUG] [Thread-133658] [transport.py] [_log()] userauth is OK
2025-12-31T19:52:39.257 [DEBUG] [Thread-133658] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:52:39.257 [DEBUG] [Thread-133658] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:52:39.257 [DEBUG] [Thread-133658] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T19:52:39.257 [DEBUG] [Thread-133658] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:52:39.276 [INFO] [Thread-133658] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:52:39.276 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T19:52:39.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:52:39.386 [DEBUG] [Thread-133660 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:52:40.115 [DEBUG] [Thread-133658] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:52:40.116 [DEBUG] [Thread-133658] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:52:40.164 [DEBUG] [Thread-133658] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:52:40.164 [DEBUG] [Thread-133658] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:52:40.173 [DEBUG] [Thread-133658] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:52:40.183 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:52:40.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T19:52:40.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T19:52:40.201 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:52:40.201 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:52:40.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:52:40.209 [DEBUG] [Thread-133658] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:52:54.436 [DEBUG] [Thread-133661 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:53:09.474 [DEBUG] [Thread-133662 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:53:10.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T19:53:10.210 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T19:53:10.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T19:53:10.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 19, 52, 50), 14.8, 38.33, 0.0, 13.43, 20.93, 0, 0, 0, 2, 0, 0),)
2025-12-31T19:53:10.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 19:52:50
2025-12-31T19:53:11.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T19:53:11.187 [DEBUG] [Thread-133663] [transport.py] [_log()] starting thread (client mode): 0xb1759bd0
2025-12-31T19:53:11.187 [DEBUG] [Thread-133663] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:53:11.207 [DEBUG] [Thread-133663] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T19:53:11.207 [INFO] [Thread-133663] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T19:53:11.210 [DEBUG] [Thread-133663] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:53:11.210 [DEBUG] [Thread-133663] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T19:53:11.210 [DEBUG] [Thread-133663] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:53:11.210 [DEBUG] [Thread-133663] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:53:11.210 [DEBUG] [Thread-133663] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:53:11.210 [DEBUG] [Thread-133663] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:53:11.210 [DEBUG] [Thread-133663] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:53:11.210 [DEBUG] [Thread-133663] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:53:11.210 [DEBUG] [Thread-133663] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:53:11.210 [DEBUG] [Thread-133663] [transport.py] [_log()] client lang: <none>
2025-12-31T19:53:11.210 [DEBUG] [Thread-133663] [transport.py] [_log()] server lang: <none>
2025-12-31T19:53:11.210 [DEBUG] [Thread-133663] [transport.py] [_log()] kex follows: False
2025-12-31T19:53:11.210 [DEBUG] [Thread-133663] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:53:11.211 [DEBUG] [Thread-133663] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:53:11.211 [DEBUG] [Thread-133663] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:53:11.211 [DEBUG] [Thread-133663] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:53:11.211 [DEBUG] [Thread-133663] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:53:11.211 [DEBUG] [Thread-133663] [transport.py] [_log()] Compression: none
2025-12-31T19:53:11.211 [DEBUG] [Thread-133663] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:53:11.227 [DEBUG] [Thread-133663] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:53:11.227 [DEBUG] [Thread-133663] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:53:11.228 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T19:53:11.228 [DEBUG] [Thread-133663] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T19:53:11.229 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:53:11.230 [DEBUG] [Thread-133663] [transport.py] [_log()] userauth is OK
2025-12-31T19:53:11.230 [DEBUG] [Thread-133663] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:53:11.230 [DEBUG] [Thread-133663] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:53:11.230 [DEBUG] [Thread-133663] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T19:53:11.230 [DEBUG] [Thread-133663] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:53:11.255 [INFO] [Thread-133663] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:53:11.256 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:53:11.929 [DEBUG] [Thread-133663] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:53:11.929 [DEBUG] [Thread-133663] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:53:11.930 [DEBUG] [Thread-133663] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T19:53:11.970 [DEBUG] [Thread-133663] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:53:11.970 [DEBUG] [Thread-133663] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:53:11.973 [DEBUG] [Thread-133663] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:53:11.985 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:53:11.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T19:53:11.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T19:53:11.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T19:53:11.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:53:11.994 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T19:53:11.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:53:11.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:53:11.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T19:53:11.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.744583 -999.00  +21.00  10.68     42   +7.80 1 2 1 1 1   853    0 11.70 -60.86 ----- 8.9 10.7 252.6 13.3 22.1 -17.8 22.1 -17.6 21.7 -17.8 21.9 -18.5
2025-12-31T19:53:11.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T19:53:11.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T19:53:11.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.744583
2025-12-31T19:53:11.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T19:53:11.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T19:53:11.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T19:53:11.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T19:53:11.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T19:53:11.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T19:52:50', tmtdew=14.8, humidity=38.33, cloud=0.0, wind=13.43, temperature=20.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T17:52:11.971', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T19:53:11.998 [DEBUG] [Thread-133663] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:53:12.081 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T19:53:12.094 [DEBUG] [Thread-133666] [transport.py] [_log()] starting thread (client mode): 0xb6ba1cf0
2025-12-31T19:53:12.094 [DEBUG] [Thread-133666] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:53:12.108 [DEBUG] [Thread-133666] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T19:53:12.109 [INFO] [Thread-133666] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T19:53:12.116 [DEBUG] [Thread-133666] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:53:12.117 [DEBUG] [Thread-133666] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T19:53:12.117 [DEBUG] [Thread-133666] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:53:12.117 [DEBUG] [Thread-133666] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:53:12.117 [DEBUG] [Thread-133666] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:53:12.117 [DEBUG] [Thread-133666] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:53:12.117 [DEBUG] [Thread-133666] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:53:12.117 [DEBUG] [Thread-133666] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:53:12.117 [DEBUG] [Thread-133666] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:53:12.117 [DEBUG] [Thread-133666] [transport.py] [_log()] client lang: <none>
2025-12-31T19:53:12.117 [DEBUG] [Thread-133666] [transport.py] [_log()] server lang: <none>
2025-12-31T19:53:12.117 [DEBUG] [Thread-133666] [transport.py] [_log()] kex follows: False
2025-12-31T19:53:12.117 [DEBUG] [Thread-133666] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:53:12.117 [DEBUG] [Thread-133666] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:53:12.117 [DEBUG] [Thread-133666] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:53:12.117 [DEBUG] [Thread-133666] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:53:12.117 [DEBUG] [Thread-133666] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:53:12.118 [DEBUG] [Thread-133666] [transport.py] [_log()] Compression: none
2025-12-31T19:53:12.118 [DEBUG] [Thread-133666] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:53:12.175 [DEBUG] [Thread-133666] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:53:12.176 [DEBUG] [Thread-133666] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:53:12.176 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T19:53:12.177 [DEBUG] [Thread-133666] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T19:53:12.178 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:53:12.231 [DEBUG] [Thread-133666] [transport.py] [_log()] userauth is OK
2025-12-31T19:53:12.232 [DEBUG] [Thread-133666] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:53:12.232 [DEBUG] [Thread-133666] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:53:12.232 [DEBUG] [Thread-133666] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T19:53:12.232 [DEBUG] [Thread-133666] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:53:12.250 [INFO] [Thread-133666] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:53:12.251 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T19:53:12.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:53:13.050 [DEBUG] [Thread-133666] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:53:13.051 [DEBUG] [Thread-133666] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:53:13.099 [DEBUG] [Thread-133666] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:53:13.099 [DEBUG] [Thread-133666] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:53:13.108 [DEBUG] [Thread-133666] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:53:13.116 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:53:13.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T19:53:13.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T19:53:13.132 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:53:13.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:53:13.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:53:13.140 [DEBUG] [Thread-133666] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:53:24.505 [DEBUG] [Thread-133668 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:53:35.403 [DEBUG] [Thread-133669 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:53:39.546 [DEBUG] [Thread-133670 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:53:43.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T19:53:43.163 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T19:53:43.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T19:53:43.348 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:53:43.349 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:53:43.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 19, 53, 22), 14.84, 38.21, 0.0, 14.52, 20.92, 0, 0, 0, 2, 0, 0),)
2025-12-31T19:53:43.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 19:53:22
2025-12-31T19:53:43.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T19:53:44.133 [DEBUG] [Thread-133671] [transport.py] [_log()] starting thread (client mode): 0xb957b550
2025-12-31T19:53:44.133 [DEBUG] [Thread-133671] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:53:44.154 [DEBUG] [Thread-133671] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T19:53:44.154 [INFO] [Thread-133671] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T19:53:44.155 [DEBUG] [Thread-133671] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:53:44.155 [DEBUG] [Thread-133671] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T19:53:44.155 [DEBUG] [Thread-133671] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:53:44.155 [DEBUG] [Thread-133671] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:53:44.155 [DEBUG] [Thread-133671] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:53:44.155 [DEBUG] [Thread-133671] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:53:44.155 [DEBUG] [Thread-133671] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:53:44.155 [DEBUG] [Thread-133671] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:53:44.156 [DEBUG] [Thread-133671] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:53:44.156 [DEBUG] [Thread-133671] [transport.py] [_log()] client lang: <none>
2025-12-31T19:53:44.156 [DEBUG] [Thread-133671] [transport.py] [_log()] server lang: <none>
2025-12-31T19:53:44.156 [DEBUG] [Thread-133671] [transport.py] [_log()] kex follows: False
2025-12-31T19:53:44.156 [DEBUG] [Thread-133671] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:53:44.156 [DEBUG] [Thread-133671] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:53:44.156 [DEBUG] [Thread-133671] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:53:44.156 [DEBUG] [Thread-133671] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:53:44.156 [DEBUG] [Thread-133671] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:53:44.156 [DEBUG] [Thread-133671] [transport.py] [_log()] Compression: none
2025-12-31T19:53:44.156 [DEBUG] [Thread-133671] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:53:44.169 [DEBUG] [Thread-133671] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:53:44.170 [DEBUG] [Thread-133671] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:53:44.170 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T19:53:44.171 [DEBUG] [Thread-133671] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T19:53:44.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:53:44.173 [DEBUG] [Thread-133671] [transport.py] [_log()] userauth is OK
2025-12-31T19:53:44.173 [DEBUG] [Thread-133671] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:53:44.173 [DEBUG] [Thread-133671] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:53:44.173 [DEBUG] [Thread-133671] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T19:53:44.173 [DEBUG] [Thread-133671] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:53:44.198 [INFO] [Thread-133671] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:53:44.199 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:53:44.946 [DEBUG] [Thread-133671] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:53:44.946 [DEBUG] [Thread-133671] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:53:44.947 [DEBUG] [Thread-133671] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T19:53:44.987 [DEBUG] [Thread-133671] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:53:44.987 [DEBUG] [Thread-133671] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:53:44.991 [DEBUG] [Thread-133671] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:53:45.001 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:53:45.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T19:53:45.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T19:53:45.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T19:53:45.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:53:45.013 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T19:53:45.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:53:45.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:53:45.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T19:53:45.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.744931 -999.00  +21.00  11.84     42   +7.90 1 2 1 1 1   850    0 11.88 -60.63 ----- 8.9 11.8 264.2 13.1 22.1 -17.9 22.1 -17.8 21.6 -17.9 21.9 -18.5
2025-12-31T19:53:45.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T19:53:45.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T19:53:45.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.744931
2025-12-31T19:53:45.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T19:53:45.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T19:53:45.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T19:53:45.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T19:53:45.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T19:53:45.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T19:53:22', tmtdew=14.84, humidity=38.21, cloud=0.0, wind=14.52, temperature=20.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T17:52:42.038', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T19:53:45.016 [DEBUG] [Thread-133671] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:53:45.099 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T19:53:45.112 [DEBUG] [Thread-133674] [transport.py] [_log()] starting thread (client mode): 0xb6ba14e0
2025-12-31T19:53:45.112 [DEBUG] [Thread-133674] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:53:45.130 [DEBUG] [Thread-133674] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T19:53:45.130 [INFO] [Thread-133674] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T19:53:45.137 [DEBUG] [Thread-133674] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:53:45.138 [DEBUG] [Thread-133674] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T19:53:45.138 [DEBUG] [Thread-133674] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:53:45.138 [DEBUG] [Thread-133674] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:53:45.138 [DEBUG] [Thread-133674] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:53:45.138 [DEBUG] [Thread-133674] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:53:45.138 [DEBUG] [Thread-133674] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:53:45.138 [DEBUG] [Thread-133674] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:53:45.138 [DEBUG] [Thread-133674] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:53:45.138 [DEBUG] [Thread-133674] [transport.py] [_log()] client lang: <none>
2025-12-31T19:53:45.138 [DEBUG] [Thread-133674] [transport.py] [_log()] server lang: <none>
2025-12-31T19:53:45.138 [DEBUG] [Thread-133674] [transport.py] [_log()] kex follows: False
2025-12-31T19:53:45.138 [DEBUG] [Thread-133674] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:53:45.138 [DEBUG] [Thread-133674] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:53:45.138 [DEBUG] [Thread-133674] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:53:45.138 [DEBUG] [Thread-133674] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:53:45.139 [DEBUG] [Thread-133674] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:53:45.139 [DEBUG] [Thread-133674] [transport.py] [_log()] Compression: none
2025-12-31T19:53:45.139 [DEBUG] [Thread-133674] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:53:45.195 [DEBUG] [Thread-133674] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:53:45.195 [DEBUG] [Thread-133674] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:53:45.196 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T19:53:45.196 [DEBUG] [Thread-133674] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T19:53:45.197 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:53:45.251 [DEBUG] [Thread-133674] [transport.py] [_log()] userauth is OK
2025-12-31T19:53:45.251 [DEBUG] [Thread-133674] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:53:45.252 [DEBUG] [Thread-133674] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:53:45.252 [DEBUG] [Thread-133674] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T19:53:45.252 [DEBUG] [Thread-133674] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:53:45.270 [INFO] [Thread-133674] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:53:45.271 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T19:53:45.271 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:53:46.112 [DEBUG] [Thread-133674] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:53:46.112 [DEBUG] [Thread-133674] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:53:46.160 [DEBUG] [Thread-133674] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:53:46.160 [DEBUG] [Thread-133674] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:53:46.170 [DEBUG] [Thread-133674] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:53:46.179 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:53:46.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T19:53:46.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-12-31T19:53:46.197 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:53:46.198 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:53:46.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:53:46.206 [DEBUG] [Thread-133674] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:53:54.587 [DEBUG] [Thread-133676 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:54:09.644 [DEBUG] [Thread-133677 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:54:16.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T19:54:16.229 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T19:54:16.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-12-31T19:54:16.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 19, 53, 54), 14.61, 38.44, 0.0, 15.93, 20.83, 0, 0, 0, 2, 0, 0),)
2025-12-31T19:54:16.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 19:53:54
2025-12-31T19:54:17.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T19:54:17.223 [DEBUG] [Thread-133678] [transport.py] [_log()] starting thread (client mode): 0xb175b820
2025-12-31T19:54:17.223 [DEBUG] [Thread-133678] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:54:17.244 [DEBUG] [Thread-133678] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T19:54:17.244 [INFO] [Thread-133678] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T19:54:17.247 [DEBUG] [Thread-133678] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:54:17.248 [DEBUG] [Thread-133678] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T19:54:17.248 [DEBUG] [Thread-133678] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:54:17.248 [DEBUG] [Thread-133678] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:54:17.248 [DEBUG] [Thread-133678] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:54:17.248 [DEBUG] [Thread-133678] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:54:17.248 [DEBUG] [Thread-133678] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:54:17.248 [DEBUG] [Thread-133678] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:54:17.248 [DEBUG] [Thread-133678] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:54:17.248 [DEBUG] [Thread-133678] [transport.py] [_log()] client lang: <none>
2025-12-31T19:54:17.248 [DEBUG] [Thread-133678] [transport.py] [_log()] server lang: <none>
2025-12-31T19:54:17.248 [DEBUG] [Thread-133678] [transport.py] [_log()] kex follows: False
2025-12-31T19:54:17.248 [DEBUG] [Thread-133678] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:54:17.248 [DEBUG] [Thread-133678] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:54:17.248 [DEBUG] [Thread-133678] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:54:17.248 [DEBUG] [Thread-133678] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:54:17.248 [DEBUG] [Thread-133678] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:54:17.248 [DEBUG] [Thread-133678] [transport.py] [_log()] Compression: none
2025-12-31T19:54:17.248 [DEBUG] [Thread-133678] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:54:17.266 [DEBUG] [Thread-133678] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:54:17.266 [DEBUG] [Thread-133678] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:54:17.267 [DEBUG] [Thread-133678] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T19:54:17.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T19:54:17.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:54:17.309 [DEBUG] [Thread-133678] [transport.py] [_log()] userauth is OK
2025-12-31T19:54:17.310 [DEBUG] [Thread-133678] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:54:17.310 [DEBUG] [Thread-133678] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:54:17.310 [DEBUG] [Thread-133678] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T19:54:17.310 [DEBUG] [Thread-133678] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:54:17.341 [INFO] [Thread-133678] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:54:17.343 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:54:17.988 [DEBUG] [Thread-133678] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:54:17.989 [DEBUG] [Thread-133678] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:54:17.989 [DEBUG] [Thread-133678] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T19:54:18.029 [DEBUG] [Thread-133678] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:54:18.029 [DEBUG] [Thread-133678] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:54:18.034 [DEBUG] [Thread-133678] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:54:18.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:54:18.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T19:54:18.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T19:54:18.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T19:54:18.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:54:18.062 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T19:54:18.062 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:54:18.062 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:54:18.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T19:54:18.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.745625 -999.00  +20.90  14.41     43   +7.90 1 2 1 1 1   842    0 11.72 -61.93 ----- 12.4 14.4 263.4 18.2 22.0 -18.2 22.0 -18.0 21.6 -18.1 21.8 -18.8
2025-12-31T19:54:18.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T19:54:18.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T19:54:18.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.745625
2025-12-31T19:54:18.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T19:54:18.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T19:54:18.064 [DEBUG] [Thread-133678] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:54:18.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T19:54:18.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T19:54:18.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T19:54:18.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T19:53:54', tmtdew=14.61, humidity=38.44, cloud=0.0, wind=15.93, temperature=20.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T17:53:42.000', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T19:54:18.149 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T19:54:18.161 [DEBUG] [Thread-133681] [transport.py] [_log()] starting thread (client mode): 0xb6bb89a0
2025-12-31T19:54:18.161 [DEBUG] [Thread-133681] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:54:18.175 [DEBUG] [Thread-133681] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T19:54:18.176 [INFO] [Thread-133681] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T19:54:18.183 [DEBUG] [Thread-133681] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:54:18.183 [DEBUG] [Thread-133681] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T19:54:18.184 [DEBUG] [Thread-133681] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:54:18.184 [DEBUG] [Thread-133681] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:54:18.184 [DEBUG] [Thread-133681] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:54:18.184 [DEBUG] [Thread-133681] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:54:18.184 [DEBUG] [Thread-133681] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:54:18.184 [DEBUG] [Thread-133681] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:54:18.184 [DEBUG] [Thread-133681] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:54:18.184 [DEBUG] [Thread-133681] [transport.py] [_log()] client lang: <none>
2025-12-31T19:54:18.184 [DEBUG] [Thread-133681] [transport.py] [_log()] server lang: <none>
2025-12-31T19:54:18.184 [DEBUG] [Thread-133681] [transport.py] [_log()] kex follows: False
2025-12-31T19:54:18.184 [DEBUG] [Thread-133681] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:54:18.184 [DEBUG] [Thread-133681] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:54:18.184 [DEBUG] [Thread-133681] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:54:18.184 [DEBUG] [Thread-133681] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:54:18.184 [DEBUG] [Thread-133681] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:54:18.184 [DEBUG] [Thread-133681] [transport.py] [_log()] Compression: none
2025-12-31T19:54:18.184 [DEBUG] [Thread-133681] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:54:18.242 [DEBUG] [Thread-133681] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:54:18.243 [DEBUG] [Thread-133681] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:54:18.243 [DEBUG] [Thread-133681] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T19:54:18.244 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T19:54:18.244 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:54:18.298 [DEBUG] [Thread-133681] [transport.py] [_log()] userauth is OK
2025-12-31T19:54:18.299 [DEBUG] [Thread-133681] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:54:18.299 [DEBUG] [Thread-133681] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:54:18.299 [DEBUG] [Thread-133681] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T19:54:18.299 [DEBUG] [Thread-133681] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:54:18.317 [INFO] [Thread-133681] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:54:18.318 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T19:54:18.318 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:54:19.118 [DEBUG] [Thread-133681] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:54:19.119 [DEBUG] [Thread-133681] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:54:19.167 [DEBUG] [Thread-133681] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:54:19.167 [DEBUG] [Thread-133681] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:54:19.176 [DEBUG] [Thread-133681] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:54:19.185 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:54:19.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T19:54:19.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T19:54:19.203 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:54:19.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:54:19.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:54:19.212 [DEBUG] [Thread-133681] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:54:24.692 [DEBUG] [Thread-133683 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:54:35.478 [DEBUG] [Thread-133684 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:54:39.740 [DEBUG] [Thread-133685 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:54:48.290 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:54:48.292 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:54:49.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T19:54:49.235 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T19:54:49.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T19:54:49.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 19, 54, 26), 14.56, 38.56, 0.0, 15.07, 20.82, 0, 0, 0, 2, 0, 0),)
2025-12-31T19:54:49.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 19:54:26
2025-12-31T19:54:50.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T19:54:50.228 [DEBUG] [Thread-133686] [transport.py] [_log()] starting thread (client mode): 0xb6ba1240
2025-12-31T19:54:50.228 [DEBUG] [Thread-133686] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:54:50.249 [DEBUG] [Thread-133686] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T19:54:50.250 [INFO] [Thread-133686] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T19:54:50.252 [DEBUG] [Thread-133686] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:54:50.253 [DEBUG] [Thread-133686] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T19:54:50.253 [DEBUG] [Thread-133686] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:54:50.253 [DEBUG] [Thread-133686] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:54:50.253 [DEBUG] [Thread-133686] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:54:50.253 [DEBUG] [Thread-133686] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:54:50.253 [DEBUG] [Thread-133686] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:54:50.253 [DEBUG] [Thread-133686] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:54:50.253 [DEBUG] [Thread-133686] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:54:50.253 [DEBUG] [Thread-133686] [transport.py] [_log()] client lang: <none>
2025-12-31T19:54:50.253 [DEBUG] [Thread-133686] [transport.py] [_log()] server lang: <none>
2025-12-31T19:54:50.253 [DEBUG] [Thread-133686] [transport.py] [_log()] kex follows: False
2025-12-31T19:54:50.253 [DEBUG] [Thread-133686] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:54:50.254 [DEBUG] [Thread-133686] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:54:50.254 [DEBUG] [Thread-133686] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:54:50.254 [DEBUG] [Thread-133686] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:54:50.254 [DEBUG] [Thread-133686] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:54:50.254 [DEBUG] [Thread-133686] [transport.py] [_log()] Compression: none
2025-12-31T19:54:50.254 [DEBUG] [Thread-133686] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:54:50.272 [DEBUG] [Thread-133686] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:54:50.273 [DEBUG] [Thread-133686] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:54:50.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T19:54:50.274 [DEBUG] [Thread-133686] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T19:54:50.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:54:50.276 [DEBUG] [Thread-133686] [transport.py] [_log()] userauth is OK
2025-12-31T19:54:50.276 [DEBUG] [Thread-133686] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:54:50.276 [DEBUG] [Thread-133686] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:54:50.277 [DEBUG] [Thread-133686] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T19:54:50.277 [DEBUG] [Thread-133686] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:54:50.308 [INFO] [Thread-133686] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:54:50.309 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:54:51.124 [DEBUG] [Thread-133686] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:54:51.125 [DEBUG] [Thread-133686] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:54:51.125 [DEBUG] [Thread-133686] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T19:54:51.166 [DEBUG] [Thread-133686] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:54:51.166 [DEBUG] [Thread-133686] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:54:51.170 [DEBUG] [Thread-133686] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:54:51.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:54:51.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T19:54:51.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T19:54:51.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T19:54:51.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:54:51.188 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T19:54:51.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:54:51.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:54:51.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T19:54:51.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.745972 -999.00  +20.70  10.33     43   +7.90 1 2 1 1 1   838    0 11.58 -61.70 ----- 12.1 10.3 263.0 19.4 22.0 -18.1 22.0 -17.9 21.6 -18.2 21.8 -18.7
2025-12-31T19:54:51.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T19:54:51.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T19:54:51.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.745972
2025-12-31T19:54:51.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T19:54:51.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T19:54:51.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T19:54:51.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T19:54:51.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T19:54:51.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T19:54:26', tmtdew=14.56, humidity=38.56, cloud=0.0, wind=15.07, temperature=20.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T17:54:11.981', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T19:54:51.190 [DEBUG] [Thread-133686] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:54:51.273 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T19:54:51.286 [DEBUG] [Thread-133689] [transport.py] [_log()] starting thread (client mode): 0xb1744850
2025-12-31T19:54:51.286 [DEBUG] [Thread-133689] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:54:51.300 [DEBUG] [Thread-133689] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T19:54:51.301 [INFO] [Thread-133689] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T19:54:51.308 [DEBUG] [Thread-133689] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:54:51.308 [DEBUG] [Thread-133689] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T19:54:51.308 [DEBUG] [Thread-133689] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:54:51.308 [DEBUG] [Thread-133689] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:54:51.309 [DEBUG] [Thread-133689] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:54:51.309 [DEBUG] [Thread-133689] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:54:51.309 [DEBUG] [Thread-133689] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:54:51.309 [DEBUG] [Thread-133689] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:54:51.309 [DEBUG] [Thread-133689] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:54:51.309 [DEBUG] [Thread-133689] [transport.py] [_log()] client lang: <none>
2025-12-31T19:54:51.309 [DEBUG] [Thread-133689] [transport.py] [_log()] server lang: <none>
2025-12-31T19:54:51.309 [DEBUG] [Thread-133689] [transport.py] [_log()] kex follows: False
2025-12-31T19:54:51.309 [DEBUG] [Thread-133689] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:54:51.309 [DEBUG] [Thread-133689] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:54:51.309 [DEBUG] [Thread-133689] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:54:51.309 [DEBUG] [Thread-133689] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:54:51.309 [DEBUG] [Thread-133689] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:54:51.309 [DEBUG] [Thread-133689] [transport.py] [_log()] Compression: none
2025-12-31T19:54:51.309 [DEBUG] [Thread-133689] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:54:51.365 [DEBUG] [Thread-133689] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:54:51.366 [DEBUG] [Thread-133689] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:54:51.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T19:54:51.367 [DEBUG] [Thread-133689] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T19:54:51.368 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:54:51.422 [DEBUG] [Thread-133689] [transport.py] [_log()] userauth is OK
2025-12-31T19:54:51.422 [DEBUG] [Thread-133689] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:54:51.422 [DEBUG] [Thread-133689] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:54:51.422 [DEBUG] [Thread-133689] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T19:54:51.422 [DEBUG] [Thread-133689] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:54:51.441 [INFO] [Thread-133689] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:54:51.442 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T19:54:51.442 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:54:52.268 [DEBUG] [Thread-133689] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:54:52.268 [DEBUG] [Thread-133689] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:54:52.316 [DEBUG] [Thread-133689] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:54:52.316 [DEBUG] [Thread-133689] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:54:52.325 [DEBUG] [Thread-133689] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:54:52.334 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:54:52.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T19:54:52.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T19:54:52.352 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:54:52.353 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:54:52.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:54:52.361 [DEBUG] [Thread-133689] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:54:54.772 [DEBUG] [Thread-133691 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:55:09.826 [DEBUG] [Thread-133692 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:55:22.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T19:55:22.383 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T19:55:22.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T19:55:23.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 19, 54, 59), 14.5, 39.08, 0.0, 16.38, 20.77, 0, 0, 0, 2, 0, 0),)
2025-12-31T19:55:23.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 19:54:59
2025-12-31T19:55:23.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T19:55:23.392 [DEBUG] [Thread-133693] [transport.py] [_log()] starting thread (client mode): 0xb95d4d90
2025-12-31T19:55:23.392 [DEBUG] [Thread-133693] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:55:23.414 [DEBUG] [Thread-133693] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T19:55:23.414 [INFO] [Thread-133693] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T19:55:23.417 [DEBUG] [Thread-133693] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:55:23.417 [DEBUG] [Thread-133693] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T19:55:23.417 [DEBUG] [Thread-133693] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:55:23.418 [DEBUG] [Thread-133693] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:55:23.418 [DEBUG] [Thread-133693] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:55:23.418 [DEBUG] [Thread-133693] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:55:23.418 [DEBUG] [Thread-133693] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:55:23.418 [DEBUG] [Thread-133693] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:55:23.418 [DEBUG] [Thread-133693] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:55:23.418 [DEBUG] [Thread-133693] [transport.py] [_log()] client lang: <none>
2025-12-31T19:55:23.418 [DEBUG] [Thread-133693] [transport.py] [_log()] server lang: <none>
2025-12-31T19:55:23.418 [DEBUG] [Thread-133693] [transport.py] [_log()] kex follows: False
2025-12-31T19:55:23.418 [DEBUG] [Thread-133693] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:55:23.418 [DEBUG] [Thread-133693] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:55:23.419 [DEBUG] [Thread-133693] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:55:23.419 [DEBUG] [Thread-133693] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:55:23.419 [DEBUG] [Thread-133693] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:55:23.419 [DEBUG] [Thread-133693] [transport.py] [_log()] Compression: none
2025-12-31T19:55:23.419 [DEBUG] [Thread-133693] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:55:23.436 [DEBUG] [Thread-133693] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:55:23.436 [DEBUG] [Thread-133693] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:55:23.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T19:55:23.437 [DEBUG] [Thread-133693] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T19:55:23.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:55:23.439 [DEBUG] [Thread-133693] [transport.py] [_log()] userauth is OK
2025-12-31T19:55:23.439 [DEBUG] [Thread-133693] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:55:23.439 [DEBUG] [Thread-133693] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:55:23.439 [DEBUG] [Thread-133693] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T19:55:23.439 [DEBUG] [Thread-133693] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:55:23.451 [INFO] [Thread-133693] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:55:23.452 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:55:24.860 [DEBUG] [Thread-133695 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:55:25.913 [DEBUG] [Thread-133693] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:55:25.913 [DEBUG] [Thread-133693] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:55:25.913 [DEBUG] [Thread-133693] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T19:55:25.954 [DEBUG] [Thread-133693] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:55:25.954 [DEBUG] [Thread-133693] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:55:25.956 [DEBUG] [Thread-133693] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:55:25.970 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:55:25.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T19:55:25.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T19:55:25.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T19:55:25.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:55:25.978 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T19:55:25.978 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:55:25.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:55:25.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T19:55:25.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.746319 -999.00  +20.70  13.51     43   +7.90 1 2 1 1 1   834    0 11.50 -58.58 ----- 16.3 13.5 252.6 18.1 22.0 -18.2 22.0 -17.9 21.5 -18.2 21.8 -19.0
2025-12-31T19:55:25.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T19:55:25.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T19:55:25.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.746319
2025-12-31T19:55:25.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T19:55:25.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T19:55:25.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T19:55:25.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T19:55:25.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T19:55:25.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T19:54:59', tmtdew=14.5, humidity=39.08, cloud=0.0, wind=16.38, temperature=20.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T17:54:41.962', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T19:55:25.980 [DEBUG] [Thread-133693] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:55:26.064 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T19:55:26.076 [DEBUG] [Thread-133697] [transport.py] [_log()] starting thread (client mode): 0xb95d6680
2025-12-31T19:55:26.076 [DEBUG] [Thread-133697] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:55:26.092 [DEBUG] [Thread-133697] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T19:55:26.092 [INFO] [Thread-133697] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T19:55:26.099 [DEBUG] [Thread-133697] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:55:26.100 [DEBUG] [Thread-133697] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T19:55:26.100 [DEBUG] [Thread-133697] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:55:26.100 [DEBUG] [Thread-133697] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:55:26.100 [DEBUG] [Thread-133697] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:55:26.101 [DEBUG] [Thread-133697] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:55:26.101 [DEBUG] [Thread-133697] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:55:26.101 [DEBUG] [Thread-133697] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:55:26.101 [DEBUG] [Thread-133697] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:55:26.101 [DEBUG] [Thread-133697] [transport.py] [_log()] client lang: <none>
2025-12-31T19:55:26.101 [DEBUG] [Thread-133697] [transport.py] [_log()] server lang: <none>
2025-12-31T19:55:26.101 [DEBUG] [Thread-133697] [transport.py] [_log()] kex follows: False
2025-12-31T19:55:26.101 [DEBUG] [Thread-133697] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:55:26.101 [DEBUG] [Thread-133697] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:55:26.101 [DEBUG] [Thread-133697] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:55:26.101 [DEBUG] [Thread-133697] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:55:26.101 [DEBUG] [Thread-133697] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:55:26.101 [DEBUG] [Thread-133697] [transport.py] [_log()] Compression: none
2025-12-31T19:55:26.101 [DEBUG] [Thread-133697] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:55:26.156 [DEBUG] [Thread-133697] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:55:26.157 [DEBUG] [Thread-133697] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:55:26.158 [DEBUG] [Thread-133697] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T19:55:26.158 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T19:55:26.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:55:26.213 [DEBUG] [Thread-133697] [transport.py] [_log()] userauth is OK
2025-12-31T19:55:26.213 [DEBUG] [Thread-133697] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:55:26.213 [DEBUG] [Thread-133697] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:55:26.214 [DEBUG] [Thread-133697] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T19:55:26.214 [DEBUG] [Thread-133697] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:55:26.232 [INFO] [Thread-133697] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:55:26.233 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T19:55:26.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:55:27.074 [DEBUG] [Thread-133697] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:55:27.074 [DEBUG] [Thread-133697] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:55:27.122 [DEBUG] [Thread-133697] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:55:27.122 [DEBUG] [Thread-133697] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:55:27.132 [DEBUG] [Thread-133697] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:55:27.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:55:27.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T19:55: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-12-31T19:55:27.159 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:55:27.159 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:55:27.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:55:27.168 [DEBUG] [Thread-133697] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:55:35.559 [DEBUG] [Thread-133699 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:55:39.896 [DEBUG] [Thread-133700 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:55:54.950 [DEBUG] [Thread-133701 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:55:55.663 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:55:55.664 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:55:57.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T19:55:57.190 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T19:55:57.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-12-31T19:55:57.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 19, 55, 31), 14.47, 39.14, 0.0, 17.36, 20.77, 0, 0, 0, 2, 0, 0),)
2025-12-31T19:55:57.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 19:55:31
2025-12-31T19:55:58.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T19:55:58.237 [DEBUG] [Thread-133702] [transport.py] [_log()] starting thread (client mode): 0xb6bbfee0
2025-12-31T19:55:58.237 [DEBUG] [Thread-133702] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:55:58.257 [DEBUG] [Thread-133702] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T19:55:58.257 [INFO] [Thread-133702] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T19:55:58.260 [DEBUG] [Thread-133702] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:55:58.260 [DEBUG] [Thread-133702] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T19:55:58.260 [DEBUG] [Thread-133702] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:55:58.260 [DEBUG] [Thread-133702] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:55:58.260 [DEBUG] [Thread-133702] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:55:58.260 [DEBUG] [Thread-133702] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:55:58.260 [DEBUG] [Thread-133702] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:55:58.260 [DEBUG] [Thread-133702] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:55:58.260 [DEBUG] [Thread-133702] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:55:58.260 [DEBUG] [Thread-133702] [transport.py] [_log()] client lang: <none>
2025-12-31T19:55:58.260 [DEBUG] [Thread-133702] [transport.py] [_log()] server lang: <none>
2025-12-31T19:55:58.260 [DEBUG] [Thread-133702] [transport.py] [_log()] kex follows: False
2025-12-31T19:55:58.260 [DEBUG] [Thread-133702] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:55:58.260 [DEBUG] [Thread-133702] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:55:58.260 [DEBUG] [Thread-133702] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:55:58.260 [DEBUG] [Thread-133702] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:55:58.260 [DEBUG] [Thread-133702] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:55:58.260 [DEBUG] [Thread-133702] [transport.py] [_log()] Compression: none
2025-12-31T19:55:58.260 [DEBUG] [Thread-133702] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:55:58.275 [DEBUG] [Thread-133702] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:55:58.276 [DEBUG] [Thread-133702] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:55:58.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T19:55:58.276 [DEBUG] [Thread-133702] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T19:55:58.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:55:58.277 [DEBUG] [Thread-133702] [transport.py] [_log()] userauth is OK
2025-12-31T19:55:58.277 [DEBUG] [Thread-133702] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:55:58.277 [DEBUG] [Thread-133702] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:55:58.277 [DEBUG] [Thread-133702] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T19:55:58.277 [DEBUG] [Thread-133702] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:55:58.286 [INFO] [Thread-133702] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:55:58.286 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:55:58.883 [DEBUG] [Thread-133702] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:55:58.883 [DEBUG] [Thread-133702] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:55:58.883 [DEBUG] [Thread-133702] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T19:55:58.925 [DEBUG] [Thread-133702] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:55:58.925 [DEBUG] [Thread-133702] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:55:58.927 [DEBUG] [Thread-133702] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:55:58.938 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:55:58.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T19:55:58.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T19:55:58.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T19:55:58.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:55:58.942 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T19:55:58.942 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:55:58.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:55:58.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T19:55:58.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.746667 -999.00  +20.70  14.25     44   +8.00 1 2 1 1 1   829    0 11.55 -66.28 ----- 14.2 14.2 257.2 19.1 21.9 -18.2 21.9 -17.8 21.5 -18.2 21.7 -19.1
2025-12-31T19:55:58.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T19:55:58.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T19:55:58.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.746667
2025-12-31T19:55:58.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T19:55:58.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T19:55:58.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T19:55:58.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T19:55:58.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T19:55:58.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T19:55:31', tmtdew=14.47, humidity=39.14, cloud=0.0, wind=17.36, temperature=20.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T17:55:12.029', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T19:55:58.943 [DEBUG] [Thread-133702] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:55: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-12-31T19:55:59.028 [DEBUG] [Thread-133705] [transport.py] [_log()] starting thread (client mode): 0xb1759c00
2025-12-31T19:55:59.028 [DEBUG] [Thread-133705] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:55:59.046 [DEBUG] [Thread-133705] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T19:55:59.046 [INFO] [Thread-133705] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T19:55:59.054 [DEBUG] [Thread-133705] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:55:59.054 [DEBUG] [Thread-133705] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T19:55:59.054 [DEBUG] [Thread-133705] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:55:59.054 [DEBUG] [Thread-133705] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:55:59.054 [DEBUG] [Thread-133705] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:55:59.054 [DEBUG] [Thread-133705] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:55:59.054 [DEBUG] [Thread-133705] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:55:59.054 [DEBUG] [Thread-133705] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:55:59.054 [DEBUG] [Thread-133705] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:55:59.054 [DEBUG] [Thread-133705] [transport.py] [_log()] client lang: <none>
2025-12-31T19:55:59.054 [DEBUG] [Thread-133705] [transport.py] [_log()] server lang: <none>
2025-12-31T19:55:59.054 [DEBUG] [Thread-133705] [transport.py] [_log()] kex follows: False
2025-12-31T19:55:59.054 [DEBUG] [Thread-133705] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:55:59.054 [DEBUG] [Thread-133705] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:55:59.054 [DEBUG] [Thread-133705] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:55:59.054 [DEBUG] [Thread-133705] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:55:59.054 [DEBUG] [Thread-133705] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:55:59.054 [DEBUG] [Thread-133705] [transport.py] [_log()] Compression: none
2025-12-31T19:55:59.054 [DEBUG] [Thread-133705] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:55:59.110 [DEBUG] [Thread-133705] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:55:59.110 [DEBUG] [Thread-133705] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:55:59.110 [DEBUG] [Thread-133705] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T19:55:59.110 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T19:55:59.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:55:59.167 [DEBUG] [Thread-133705] [transport.py] [_log()] userauth is OK
2025-12-31T19:55:59.167 [DEBUG] [Thread-133705] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:55:59.167 [DEBUG] [Thread-133705] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:55:59.167 [DEBUG] [Thread-133705] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T19:55:59.167 [DEBUG] [Thread-133705] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:55:59.180 [INFO] [Thread-133705] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:55:59.181 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T19:55:59.181 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:56:00.014 [DEBUG] [Thread-133705] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:56:00.014 [DEBUG] [Thread-133705] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:56:00.061 [DEBUG] [Thread-133705] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:56:00.061 [DEBUG] [Thread-133705] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:56:00.069 [DEBUG] [Thread-133705] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:56:00.077 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:56:00.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T19:56:00.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T19:56:00.092 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:56:00.092 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:56:00.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:56:00.100 [DEBUG] [Thread-133705] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:56:09.977 [DEBUG] [Thread-133707 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:56:25.029 [DEBUG] [Thread-133708 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:56:30.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T19:56:30.123 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T19:56:30.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T19:56:30.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 19, 56, 3), 14.45, 39.21, 0.0, 17.77, 20.77, 0, 0, 0, 2, 0, 0),)
2025-12-31T19:56:30.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 19:56:03
2025-12-31T19:56:30.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T19:56:31.113 [DEBUG] [Thread-133709] [transport.py] [_log()] starting thread (client mode): 0xb6bbcdc0
2025-12-31T19:56:31.113 [DEBUG] [Thread-133709] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:56:31.134 [DEBUG] [Thread-133709] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T19:56:31.134 [INFO] [Thread-133709] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T19:56:31.137 [DEBUG] [Thread-133709] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:56:31.138 [DEBUG] [Thread-133709] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T19:56:31.138 [DEBUG] [Thread-133709] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:56:31.138 [DEBUG] [Thread-133709] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:56:31.138 [DEBUG] [Thread-133709] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:56:31.138 [DEBUG] [Thread-133709] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:56:31.138 [DEBUG] [Thread-133709] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:56:31.138 [DEBUG] [Thread-133709] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:56:31.138 [DEBUG] [Thread-133709] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:56:31.138 [DEBUG] [Thread-133709] [transport.py] [_log()] client lang: <none>
2025-12-31T19:56:31.138 [DEBUG] [Thread-133709] [transport.py] [_log()] server lang: <none>
2025-12-31T19:56:31.138 [DEBUG] [Thread-133709] [transport.py] [_log()] kex follows: False
2025-12-31T19:56:31.138 [DEBUG] [Thread-133709] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:56:31.138 [DEBUG] [Thread-133709] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:56:31.138 [DEBUG] [Thread-133709] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:56:31.139 [DEBUG] [Thread-133709] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:56:31.139 [DEBUG] [Thread-133709] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:56:31.139 [DEBUG] [Thread-133709] [transport.py] [_log()] Compression: none
2025-12-31T19:56:31.139 [DEBUG] [Thread-133709] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:56:31.157 [DEBUG] [Thread-133709] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:56:31.158 [DEBUG] [Thread-133709] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:56:31.158 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T19:56:31.159 [DEBUG] [Thread-133709] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T19:56:31.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:56:31.162 [DEBUG] [Thread-133709] [transport.py] [_log()] userauth is OK
2025-12-31T19:56:31.162 [DEBUG] [Thread-133709] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:56:31.162 [DEBUG] [Thread-133709] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:56:31.163 [DEBUG] [Thread-133709] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T19:56:31.163 [DEBUG] [Thread-133709] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:56:31.192 [INFO] [Thread-133709] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:56:31.193 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:56:32.001 [DEBUG] [Thread-133709] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:56:32.001 [DEBUG] [Thread-133709] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:56:32.002 [DEBUG] [Thread-133709] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T19:56:32.043 [DEBUG] [Thread-133709] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:56:32.043 [DEBUG] [Thread-133709] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:56:32.047 [DEBUG] [Thread-133709] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:56:32.058 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:56:32.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T19:56:32.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T19:56:32.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T19:56:32.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:56:32.070 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T19:56:32.070 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:56:32.070 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:56:32.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T19:56:32.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.747014 -999.00  +20.70  11.71     44   +8.00 1 2 1 1 1   824    0 11.39 -72.38 ----- 12.5 11.7 255.6 16.7 21.9 -18.1 21.9 -17.8 21.5 -18.2 21.7 -19.0
2025-12-31T19:56:32.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T19:56:32.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T19:56:32.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.747014
2025-12-31T19:56:32.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T19:56:32.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T19:56:32.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T19:56:32.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T19:56:32.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T19:56:32.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T19:56:03', tmtdew=14.45, humidity=39.21, cloud=0.0, wind=17.77, temperature=20.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T17:55:42.010', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T19:56:32.073 [DEBUG] [Thread-133709] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:56:32.164 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T19:56:32.176 [DEBUG] [Thread-133712] [transport.py] [_log()] starting thread (client mode): 0xb17598d0
2025-12-31T19:56:32.176 [DEBUG] [Thread-133712] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:56:32.191 [DEBUG] [Thread-133712] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T19:56:32.192 [INFO] [Thread-133712] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T19:56:32.199 [DEBUG] [Thread-133712] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:56:32.199 [DEBUG] [Thread-133712] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T19:56:32.199 [DEBUG] [Thread-133712] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:56:32.200 [DEBUG] [Thread-133712] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:56:32.200 [DEBUG] [Thread-133712] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:56:32.200 [DEBUG] [Thread-133712] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:56:32.200 [DEBUG] [Thread-133712] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:56:32.200 [DEBUG] [Thread-133712] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:56:32.200 [DEBUG] [Thread-133712] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:56:32.200 [DEBUG] [Thread-133712] [transport.py] [_log()] client lang: <none>
2025-12-31T19:56:32.200 [DEBUG] [Thread-133712] [transport.py] [_log()] server lang: <none>
2025-12-31T19:56:32.200 [DEBUG] [Thread-133712] [transport.py] [_log()] kex follows: False
2025-12-31T19:56:32.200 [DEBUG] [Thread-133712] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:56:32.200 [DEBUG] [Thread-133712] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:56:32.200 [DEBUG] [Thread-133712] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:56:32.200 [DEBUG] [Thread-133712] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:56:32.200 [DEBUG] [Thread-133712] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:56:32.200 [DEBUG] [Thread-133712] [transport.py] [_log()] Compression: none
2025-12-31T19:56:32.200 [DEBUG] [Thread-133712] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:56:32.259 [DEBUG] [Thread-133712] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:56:32.260 [DEBUG] [Thread-133712] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:56:32.261 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T19:56:32.261 [DEBUG] [Thread-133712] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T19:56:32.262 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:56:32.315 [DEBUG] [Thread-133712] [transport.py] [_log()] userauth is OK
2025-12-31T19:56:32.316 [DEBUG] [Thread-133712] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:56:32.316 [DEBUG] [Thread-133712] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:56:32.316 [DEBUG] [Thread-133712] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T19:56:32.316 [DEBUG] [Thread-133712] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:56:32.335 [INFO] [Thread-133712] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:56:32.335 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T19:56:32.336 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:56:33.170 [DEBUG] [Thread-133712] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:56:33.170 [DEBUG] [Thread-133712] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:56:33.221 [DEBUG] [Thread-133712] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:56:33.221 [DEBUG] [Thread-133712] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:56:33.230 [DEBUG] [Thread-133712] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:56:33.238 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:56:33.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-12-31T19:56:33.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-12-31T19:56:33.256 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:56:33.256 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:56:33.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:56:33.264 [DEBUG] [Thread-133712] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:56:35.629 [DEBUG] [Thread-133714 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:56:40.061 [DEBUG] [Thread-133715 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:56:55.102 [DEBUG] [Thread-133716 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:57:01.024 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:57:01.025 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:57:03.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T19:57:03.276 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T19:57:03.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T19:57:03.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 19, 56, 35), 14.24, 39.36, 0.0, 19.74, 20.7, 0, 0, 0, 2, 0, 0),)
2025-12-31T19:57:03.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 19:56:35
2025-12-31T19:57:04.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T19:57:04.247 [DEBUG] [Thread-133717] [transport.py] [_log()] starting thread (client mode): 0xb95d7550
2025-12-31T19:57:04.247 [DEBUG] [Thread-133717] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:57:04.268 [DEBUG] [Thread-133717] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T19:57:04.268 [INFO] [Thread-133717] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T19:57:04.270 [DEBUG] [Thread-133717] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:57:04.270 [DEBUG] [Thread-133717] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T19:57:04.270 [DEBUG] [Thread-133717] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:57:04.270 [DEBUG] [Thread-133717] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:57:04.271 [DEBUG] [Thread-133717] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:57:04.271 [DEBUG] [Thread-133717] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:57:04.271 [DEBUG] [Thread-133717] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:57:04.271 [DEBUG] [Thread-133717] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:57:04.271 [DEBUG] [Thread-133717] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:57:04.271 [DEBUG] [Thread-133717] [transport.py] [_log()] client lang: <none>
2025-12-31T19:57:04.271 [DEBUG] [Thread-133717] [transport.py] [_log()] server lang: <none>
2025-12-31T19:57:04.271 [DEBUG] [Thread-133717] [transport.py] [_log()] kex follows: False
2025-12-31T19:57:04.271 [DEBUG] [Thread-133717] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:57:04.271 [DEBUG] [Thread-133717] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:57:04.271 [DEBUG] [Thread-133717] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:57:04.271 [DEBUG] [Thread-133717] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:57:04.271 [DEBUG] [Thread-133717] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:57:04.271 [DEBUG] [Thread-133717] [transport.py] [_log()] Compression: none
2025-12-31T19:57:04.271 [DEBUG] [Thread-133717] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:57:04.290 [DEBUG] [Thread-133717] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:57:04.290 [DEBUG] [Thread-133717] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:57:04.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T19:57:04.291 [DEBUG] [Thread-133717] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T19:57:04.292 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:57:04.332 [DEBUG] [Thread-133717] [transport.py] [_log()] userauth is OK
2025-12-31T19:57:04.333 [DEBUG] [Thread-133717] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:57:04.333 [DEBUG] [Thread-133717] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:57:04.333 [DEBUG] [Thread-133717] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T19:57:04.333 [DEBUG] [Thread-133717] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:57:04.373 [INFO] [Thread-133717] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:57:04.374 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:57:05.029 [DEBUG] [Thread-133717] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:57:05.030 [DEBUG] [Thread-133717] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:57:05.030 [DEBUG] [Thread-133717] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T19:57:05.071 [DEBUG] [Thread-133717] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:57:05.071 [DEBUG] [Thread-133717] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:57:05.075 [DEBUG] [Thread-133717] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:57:05.083 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:57:05.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T19:57:05.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T19:57:05.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T19:57:05.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:57:05.095 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T19:57:05.096 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:57:05.096 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:57:05.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T19:57:05.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.747361 -999.00  +20.70  13.56     44   +8.10 1 2 1 1 1   818    0 11.43 -64.33 ----- 11.8 13.6 259.2 15.4 21.9 -18.2 21.9 -17.6 21.5 -18.2 21.7 -19.1
2025-12-31T19:57:05.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T19:57:05.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T19:57:05.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.747361
2025-12-31T19:57:05.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T19:57:05.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T19:57:05.098 [DEBUG] [Thread-133717] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:57:05.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T19:57:05.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T19:57:05.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T19:57:05.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T19:56:35', tmtdew=14.24, humidity=39.36, cloud=0.0, wind=19.74, temperature=20.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T17:56:11.990', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T19:57:05.182 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T19:57:05.195 [DEBUG] [Thread-133720] [transport.py] [_log()] starting thread (client mode): 0xb17641c0
2025-12-31T19:57:05.195 [DEBUG] [Thread-133720] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:57:05.209 [DEBUG] [Thread-133720] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T19:57:05.209 [INFO] [Thread-133720] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T19:57:05.216 [DEBUG] [Thread-133720] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:57:05.217 [DEBUG] [Thread-133720] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T19:57:05.217 [DEBUG] [Thread-133720] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:57:05.217 [DEBUG] [Thread-133720] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:57:05.217 [DEBUG] [Thread-133720] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:57:05.217 [DEBUG] [Thread-133720] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:57:05.217 [DEBUG] [Thread-133720] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:57:05.217 [DEBUG] [Thread-133720] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:57:05.217 [DEBUG] [Thread-133720] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:57:05.217 [DEBUG] [Thread-133720] [transport.py] [_log()] client lang: <none>
2025-12-31T19:57:05.217 [DEBUG] [Thread-133720] [transport.py] [_log()] server lang: <none>
2025-12-31T19:57:05.217 [DEBUG] [Thread-133720] [transport.py] [_log()] kex follows: False
2025-12-31T19:57:05.217 [DEBUG] [Thread-133720] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:57:05.217 [DEBUG] [Thread-133720] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:57:05.217 [DEBUG] [Thread-133720] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:57:05.217 [DEBUG] [Thread-133720] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:57:05.217 [DEBUG] [Thread-133720] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:57:05.217 [DEBUG] [Thread-133720] [transport.py] [_log()] Compression: none
2025-12-31T19:57:05.217 [DEBUG] [Thread-133720] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:57:05.279 [DEBUG] [Thread-133720] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:57:05.280 [DEBUG] [Thread-133720] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:57:05.281 [DEBUG] [Thread-133720] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T19:57:05.281 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T19:57:05.281 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:57:05.335 [DEBUG] [Thread-133720] [transport.py] [_log()] userauth is OK
2025-12-31T19:57:05.336 [DEBUG] [Thread-133720] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:57:05.336 [DEBUG] [Thread-133720] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:57:05.336 [DEBUG] [Thread-133720] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T19:57:05.336 [DEBUG] [Thread-133720] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:57:05.354 [INFO] [Thread-133720] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:57:05.355 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T19:57:05.355 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:57:06.248 [DEBUG] [Thread-133720] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:57:06.249 [DEBUG] [Thread-133720] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:57:06.298 [DEBUG] [Thread-133720] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:57:06.298 [DEBUG] [Thread-133720] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:57:06.307 [DEBUG] [Thread-133720] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:57:06.317 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:57:06.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T19:57:06.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T19:57:06.335 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:57:06.336 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:57:06.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:57:06.344 [DEBUG] [Thread-133720] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:57:10.140 [DEBUG] [Thread-133722 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:57:25.198 [DEBUG] [Thread-133723 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:57:35.702 [DEBUG] [Thread-133724 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:57:36.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T19:57:36.367 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T19:57:36.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T19:57:37.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 19, 57, 7), 14.17, 39.54, 0.0, 19.44, 20.69, 0, 0, 0, 2, 0, 0),)
2025-12-31T19:57:37.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 19:57:07
2025-12-31T19:57:37.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T19:57:37.370 [DEBUG] [Thread-133725] [transport.py] [_log()] starting thread (client mode): 0xb6ba1240
2025-12-31T19:57:37.370 [DEBUG] [Thread-133725] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:57:37.390 [DEBUG] [Thread-133725] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T19:57:37.390 [INFO] [Thread-133725] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T19:57:37.392 [DEBUG] [Thread-133725] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:57:37.392 [DEBUG] [Thread-133725] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T19:57:37.392 [DEBUG] [Thread-133725] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:57:37.392 [DEBUG] [Thread-133725] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:57:37.392 [DEBUG] [Thread-133725] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:57:37.392 [DEBUG] [Thread-133725] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:57:37.392 [DEBUG] [Thread-133725] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:57:37.392 [DEBUG] [Thread-133725] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:57:37.392 [DEBUG] [Thread-133725] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:57:37.392 [DEBUG] [Thread-133725] [transport.py] [_log()] client lang: <none>
2025-12-31T19:57:37.392 [DEBUG] [Thread-133725] [transport.py] [_log()] server lang: <none>
2025-12-31T19:57:37.392 [DEBUG] [Thread-133725] [transport.py] [_log()] kex follows: False
2025-12-31T19:57:37.392 [DEBUG] [Thread-133725] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:57:37.392 [DEBUG] [Thread-133725] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:57:37.392 [DEBUG] [Thread-133725] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:57:37.392 [DEBUG] [Thread-133725] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:57:37.392 [DEBUG] [Thread-133725] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:57:37.392 [DEBUG] [Thread-133725] [transport.py] [_log()] Compression: none
2025-12-31T19:57:37.393 [DEBUG] [Thread-133725] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:57:37.409 [DEBUG] [Thread-133725] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:57:37.409 [DEBUG] [Thread-133725] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:57:37.410 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T19:57:37.410 [DEBUG] [Thread-133725] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T19:57:37.411 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:57:37.412 [DEBUG] [Thread-133725] [transport.py] [_log()] userauth is OK
2025-12-31T19:57:37.412 [DEBUG] [Thread-133725] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:57:37.413 [DEBUG] [Thread-133725] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:57:37.413 [DEBUG] [Thread-133725] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T19:57:37.413 [DEBUG] [Thread-133725] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:57:37.438 [INFO] [Thread-133725] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:57:37.438 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:57:38.200 [DEBUG] [Thread-133725] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:57:38.200 [DEBUG] [Thread-133725] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:57:38.201 [DEBUG] [Thread-133725] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T19:57:38.241 [DEBUG] [Thread-133725] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:57:38.241 [DEBUG] [Thread-133725] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:57:38.244 [DEBUG] [Thread-133725] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:57:38.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:57:38.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T19:57:38.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T19:57:38.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T19:57:38.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:57:38.269 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T19:57:38.269 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:57:38.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:57:38.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T19:57:38.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.747708 -999.00  +20.70  15.47     44   +8.10 1 2 1 1 1   812    0 11.32 -66.23 ----- 10.6 15.5 264.0 21.8 21.9 -18.1 21.9 -17.5 21.5 -18.2 21.7 -19.1
2025-12-31T19:57:38.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T19:57:38.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T19:57:38.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.747708
2025-12-31T19:57:38.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T19:57:38.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T19:57:38.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T19:57:38.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T19:57:38.271 [DEBUG] [Thread-133725] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:57:38.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T19:57:38.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T19:57:07', tmtdew=14.17, humidity=39.54, cloud=0.0, wind=19.44, temperature=20.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T17:56:41.971', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T19:57:38.355 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T19:57:38.368 [DEBUG] [Thread-133728] [transport.py] [_log()] starting thread (client mode): 0xb6bbf1f0
2025-12-31T19:57:38.369 [DEBUG] [Thread-133728] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:57:38.383 [DEBUG] [Thread-133728] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T19:57:38.383 [INFO] [Thread-133728] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T19:57:38.390 [DEBUG] [Thread-133728] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:57:38.391 [DEBUG] [Thread-133728] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T19:57:38.391 [DEBUG] [Thread-133728] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:57:38.391 [DEBUG] [Thread-133728] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:57:38.391 [DEBUG] [Thread-133728] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:57:38.391 [DEBUG] [Thread-133728] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:57:38.391 [DEBUG] [Thread-133728] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:57:38.391 [DEBUG] [Thread-133728] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:57:38.391 [DEBUG] [Thread-133728] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:57:38.391 [DEBUG] [Thread-133728] [transport.py] [_log()] client lang: <none>
2025-12-31T19:57:38.391 [DEBUG] [Thread-133728] [transport.py] [_log()] server lang: <none>
2025-12-31T19:57:38.391 [DEBUG] [Thread-133728] [transport.py] [_log()] kex follows: False
2025-12-31T19:57:38.391 [DEBUG] [Thread-133728] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:57:38.391 [DEBUG] [Thread-133728] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:57:38.391 [DEBUG] [Thread-133728] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:57:38.391 [DEBUG] [Thread-133728] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:57:38.392 [DEBUG] [Thread-133728] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:57:38.392 [DEBUG] [Thread-133728] [transport.py] [_log()] Compression: none
2025-12-31T19:57:38.392 [DEBUG] [Thread-133728] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:57:38.450 [DEBUG] [Thread-133728] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:57:38.451 [DEBUG] [Thread-133728] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:57:38.451 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T19:57:38.452 [DEBUG] [Thread-133728] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T19:57:38.453 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:57:38.507 [DEBUG] [Thread-133728] [transport.py] [_log()] userauth is OK
2025-12-31T19:57:38.507 [DEBUG] [Thread-133728] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:57:38.508 [DEBUG] [Thread-133728] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:57:38.508 [DEBUG] [Thread-133728] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T19:57:38.508 [DEBUG] [Thread-133728] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:57:38.526 [INFO] [Thread-133728] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:57:38.527 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T19:57:38.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:57:39.339 [DEBUG] [Thread-133728] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:57:39.339 [DEBUG] [Thread-133728] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:57:39.387 [DEBUG] [Thread-133728] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:57:39.387 [DEBUG] [Thread-133728] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:57:39.395 [DEBUG] [Thread-133728] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:57:39.404 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:57:39.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T19:57:39.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T19:57:39.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:57:39.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:57:39.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:57:39.429 [DEBUG] [Thread-133728] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:57:40.232 [DEBUG] [Thread-133730 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:57:55.275 [DEBUG] [Thread-133731 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:58:06.896 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:58:06.897 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:58:09.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T19:58:09.452 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T19:58:09.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-12-31T19:58:10.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 19, 57, 39), 14.16, 39.57, 0.0, 14.19, 20.69, 0, 0, 0, 2, 0, 0),)
2025-12-31T19:58:10.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 19:57:39
2025-12-31T19:58:10.301 [DEBUG] [Thread-133732 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:58:10.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T19:58:10.457 [DEBUG] [Thread-133733] [transport.py] [_log()] starting thread (client mode): 0xb6bbac50
2025-12-31T19:58:10.457 [DEBUG] [Thread-133733] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:58:10.481 [DEBUG] [Thread-133733] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T19:58:10.481 [INFO] [Thread-133733] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T19:58:10.484 [DEBUG] [Thread-133733] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:58:10.485 [DEBUG] [Thread-133733] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T19:58:10.485 [DEBUG] [Thread-133733] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:58:10.485 [DEBUG] [Thread-133733] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:58:10.485 [DEBUG] [Thread-133733] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:58:10.485 [DEBUG] [Thread-133733] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:58:10.485 [DEBUG] [Thread-133733] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:58:10.485 [DEBUG] [Thread-133733] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:58:10.485 [DEBUG] [Thread-133733] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:58:10.485 [DEBUG] [Thread-133733] [transport.py] [_log()] client lang: <none>
2025-12-31T19:58:10.485 [DEBUG] [Thread-133733] [transport.py] [_log()] server lang: <none>
2025-12-31T19:58:10.485 [DEBUG] [Thread-133733] [transport.py] [_log()] kex follows: False
2025-12-31T19:58:10.485 [DEBUG] [Thread-133733] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:58:10.485 [DEBUG] [Thread-133733] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:58:10.485 [DEBUG] [Thread-133733] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:58:10.485 [DEBUG] [Thread-133733] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:58:10.485 [DEBUG] [Thread-133733] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:58:10.485 [DEBUG] [Thread-133733] [transport.py] [_log()] Compression: none
2025-12-31T19:58:10.485 [DEBUG] [Thread-133733] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:58:10.501 [DEBUG] [Thread-133733] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:58:10.502 [DEBUG] [Thread-133733] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:58:10.502 [DEBUG] [Thread-133733] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T19:58:10.502 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T19:58:10.503 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:58:10.504 [DEBUG] [Thread-133733] [transport.py] [_log()] userauth is OK
2025-12-31T19:58:10.504 [DEBUG] [Thread-133733] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:58:10.504 [DEBUG] [Thread-133733] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:58:10.504 [DEBUG] [Thread-133733] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T19:58:10.504 [DEBUG] [Thread-133733] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:58:10.527 [INFO] [Thread-133733] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:58:10.528 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:58:11.149 [DEBUG] [Thread-133733] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:58:11.149 [DEBUG] [Thread-133733] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:58:11.150 [DEBUG] [Thread-133733] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T19:58:11.190 [DEBUG] [Thread-133733] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:58:11.190 [DEBUG] [Thread-133733] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:58:11.192 [DEBUG] [Thread-133733] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:58:11.198 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:58:11.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T19:58:11.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T19:58:11.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T19:58:11.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:58:11.209 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T19:58:11.210 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:58:11.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:58:11.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T19:58:11.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.748056 -999.00  +20.70  10.94     44   +8.20 1 2 1 1 1   805    0 11.73 -61.20 ----- 8.1 10.9 255.8 19.9 21.9 -18.1 21.9 -17.5 21.4 -18.1 21.7 -19.0
2025-12-31T19:58:11.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T19:58:11.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T19:58:11.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.748056
2025-12-31T19:58:11.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T19:58:11.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T19:58:11.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T19:58:11.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T19:58:11.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T19:58:11.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T19:57:39', tmtdew=14.16, humidity=39.57, cloud=0.0, wind=14.19, temperature=20.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T17:57:12.038', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T19:58:11.212 [DEBUG] [Thread-133733] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:58:11.296 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T19:58:11.310 [DEBUG] [Thread-133736] [transport.py] [_log()] starting thread (client mode): 0xb17468f0
2025-12-31T19:58:11.310 [DEBUG] [Thread-133736] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:58:11.325 [DEBUG] [Thread-133736] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T19:58:11.325 [INFO] [Thread-133736] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T19:58:11.332 [DEBUG] [Thread-133736] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:58:11.333 [DEBUG] [Thread-133736] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T19:58:11.333 [DEBUG] [Thread-133736] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:58:11.333 [DEBUG] [Thread-133736] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:58:11.333 [DEBUG] [Thread-133736] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:58:11.333 [DEBUG] [Thread-133736] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:58:11.333 [DEBUG] [Thread-133736] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:58:11.333 [DEBUG] [Thread-133736] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:58:11.333 [DEBUG] [Thread-133736] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:58:11.333 [DEBUG] [Thread-133736] [transport.py] [_log()] client lang: <none>
2025-12-31T19:58:11.333 [DEBUG] [Thread-133736] [transport.py] [_log()] server lang: <none>
2025-12-31T19:58:11.333 [DEBUG] [Thread-133736] [transport.py] [_log()] kex follows: False
2025-12-31T19:58:11.333 [DEBUG] [Thread-133736] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:58:11.333 [DEBUG] [Thread-133736] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:58:11.333 [DEBUG] [Thread-133736] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:58:11.333 [DEBUG] [Thread-133736] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:58:11.333 [DEBUG] [Thread-133736] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:58:11.334 [DEBUG] [Thread-133736] [transport.py] [_log()] Compression: none
2025-12-31T19:58:11.334 [DEBUG] [Thread-133736] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:58:11.390 [DEBUG] [Thread-133736] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:58:11.391 [DEBUG] [Thread-133736] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:58:11.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T19:58:11.392 [DEBUG] [Thread-133736] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T19:58:11.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:58:11.446 [DEBUG] [Thread-133736] [transport.py] [_log()] userauth is OK
2025-12-31T19:58:11.446 [DEBUG] [Thread-133736] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:58:11.446 [DEBUG] [Thread-133736] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:58:11.446 [DEBUG] [Thread-133736] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T19:58:11.446 [DEBUG] [Thread-133736] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:58:11.464 [INFO] [Thread-133736] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:58:11.464 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T19:58:11.464 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:58:12.299 [DEBUG] [Thread-133736] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:58:12.299 [DEBUG] [Thread-133736] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:58:12.347 [DEBUG] [Thread-133736] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:58:12.347 [DEBUG] [Thread-133736] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:58:12.356 [DEBUG] [Thread-133736] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:58:12.364 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:58:12.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T19:58:12.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-12-31T19:58:12.379 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:58:12.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:58:12.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:58:12.387 [DEBUG] [Thread-133736] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:58:25.335 [DEBUG] [Thread-133738 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:58:35.772 [DEBUG] [Thread-133739 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:58:40.386 [DEBUG] [Thread-133740 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:58:42.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T19:58:42.410 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T19:58:42.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T19:58:43.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 19, 58, 11), 14.11, 39.69, 0.0, 15.92, 20.62, 0, 0, 0, 2, 0, 0),)
2025-12-31T19:58:43.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 19:58:11
2025-12-31T19:58:43.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T19:58:43.412 [DEBUG] [Thread-133741] [transport.py] [_log()] starting thread (client mode): 0xb6bbb5e0
2025-12-31T19:58:43.412 [DEBUG] [Thread-133741] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:58:43.433 [DEBUG] [Thread-133741] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T19:58:43.433 [INFO] [Thread-133741] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T19:58:43.436 [DEBUG] [Thread-133741] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:58:43.436 [DEBUG] [Thread-133741] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T19:58:43.436 [DEBUG] [Thread-133741] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:58:43.436 [DEBUG] [Thread-133741] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:58:43.436 [DEBUG] [Thread-133741] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:58:43.436 [DEBUG] [Thread-133741] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:58:43.436 [DEBUG] [Thread-133741] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:58:43.436 [DEBUG] [Thread-133741] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:58:43.436 [DEBUG] [Thread-133741] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:58:43.436 [DEBUG] [Thread-133741] [transport.py] [_log()] client lang: <none>
2025-12-31T19:58:43.436 [DEBUG] [Thread-133741] [transport.py] [_log()] server lang: <none>
2025-12-31T19:58:43.437 [DEBUG] [Thread-133741] [transport.py] [_log()] kex follows: False
2025-12-31T19:58:43.437 [DEBUG] [Thread-133741] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:58:43.437 [DEBUG] [Thread-133741] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:58:43.437 [DEBUG] [Thread-133741] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:58:43.437 [DEBUG] [Thread-133741] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:58:43.437 [DEBUG] [Thread-133741] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:58:43.437 [DEBUG] [Thread-133741] [transport.py] [_log()] Compression: none
2025-12-31T19:58:43.437 [DEBUG] [Thread-133741] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:58:43.453 [DEBUG] [Thread-133741] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:58:43.454 [DEBUG] [Thread-133741] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:58:43.454 [DEBUG] [Thread-133741] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T19:58:43.455 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T19:58:43.455 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:58:43.456 [DEBUG] [Thread-133741] [transport.py] [_log()] userauth is OK
2025-12-31T19:58:43.456 [DEBUG] [Thread-133741] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:58:43.456 [DEBUG] [Thread-133741] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:58:43.456 [DEBUG] [Thread-133741] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T19:58:43.457 [DEBUG] [Thread-133741] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:58:43.474 [INFO] [Thread-133741] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:58:43.475 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:58:44.277 [DEBUG] [Thread-133741] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:58:44.278 [DEBUG] [Thread-133741] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:58:44.278 [DEBUG] [Thread-133741] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T19:58:44.318 [DEBUG] [Thread-133741] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:58:44.319 [DEBUG] [Thread-133741] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:58:44.325 [DEBUG] [Thread-133741] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:58:44.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:58:44.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T19:58:44.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T19:58:44.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T19:58:44.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:58:44.341 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T19:58:44.341 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:58:44.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:58:44.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T19:58:44.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.748403 -999.00  +20.70  14.28     44   +8.30 1 2 1 1 1   798    0 11.53 -62.38 ----- 14.4 14.3 258.4 19.8 21.8 -18.2 21.8 -17.4 21.4 -18.0 21.6 -19.0
2025-12-31T19:58:44.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T19:58:44.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T19:58:44.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.748403
2025-12-31T19:58:44.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T19:58:44.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T19:58:44.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T19:58:44.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T19:58:44.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T19:58:44.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T19:58:11', tmtdew=14.11, humidity=39.69, cloud=0.0, wind=15.92, temperature=20.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T17:57:42.019', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T19:58:44.341 [DEBUG] [Thread-133741] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:58:44.416 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T19:58:44.427 [DEBUG] [Thread-133744] [transport.py] [_log()] starting thread (client mode): 0xb1764c10
2025-12-31T19:58:44.428 [DEBUG] [Thread-133744] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:58:44.442 [DEBUG] [Thread-133744] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T19:58:44.442 [INFO] [Thread-133744] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T19:58:44.449 [DEBUG] [Thread-133744] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:58:44.450 [DEBUG] [Thread-133744] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T19:58:44.450 [DEBUG] [Thread-133744] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:58:44.450 [DEBUG] [Thread-133744] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:58:44.450 [DEBUG] [Thread-133744] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:58:44.450 [DEBUG] [Thread-133744] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:58:44.450 [DEBUG] [Thread-133744] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:58:44.450 [DEBUG] [Thread-133744] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:58:44.450 [DEBUG] [Thread-133744] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:58:44.450 [DEBUG] [Thread-133744] [transport.py] [_log()] client lang: <none>
2025-12-31T19:58:44.450 [DEBUG] [Thread-133744] [transport.py] [_log()] server lang: <none>
2025-12-31T19:58:44.450 [DEBUG] [Thread-133744] [transport.py] [_log()] kex follows: False
2025-12-31T19:58:44.450 [DEBUG] [Thread-133744] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:58:44.450 [DEBUG] [Thread-133744] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:58:44.450 [DEBUG] [Thread-133744] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:58:44.450 [DEBUG] [Thread-133744] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:58:44.450 [DEBUG] [Thread-133744] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:58:44.450 [DEBUG] [Thread-133744] [transport.py] [_log()] Compression: none
2025-12-31T19:58:44.450 [DEBUG] [Thread-133744] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:58:44.512 [DEBUG] [Thread-133744] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:58:44.512 [DEBUG] [Thread-133744] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:58:44.512 [DEBUG] [Thread-133744] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T19:58:44.512 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T19:58:44.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:58:44.569 [DEBUG] [Thread-133744] [transport.py] [_log()] userauth is OK
2025-12-31T19:58:44.569 [DEBUG] [Thread-133744] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:58:44.569 [DEBUG] [Thread-133744] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:58:44.569 [DEBUG] [Thread-133744] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T19:58:44.569 [DEBUG] [Thread-133744] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:58:44.587 [INFO] [Thread-133744] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:58:44.587 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T19:58:44.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:58:45.391 [DEBUG] [Thread-133744] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:58:45.391 [DEBUG] [Thread-133744] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:58:45.439 [DEBUG] [Thread-133744] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:58:45.440 [DEBUG] [Thread-133744] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:58:45.448 [DEBUG] [Thread-133744] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:58:45.456 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:58:45.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T19:58:45.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-12-31T19:58:45.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:58:45.472 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:58:45.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:58:45.480 [DEBUG] [Thread-133744] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:58:55.422 [DEBUG] [Thread-133746 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:59:10.463 [DEBUG] [Thread-133747 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:59:13.047 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:59:13.048 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:59:15.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T19:59:15.502 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T19:59:15.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-12-31T19:59:16.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 19, 58, 43), 13.74, 40.76, 0.0, 17.56, 20.59, 0, 0, 0, 2, 0, 0),)
2025-12-31T19:59:16.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 19:58:43
2025-12-31T19:59:16.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T19:59:16.585 [DEBUG] [Thread-133748] [transport.py] [_log()] starting thread (client mode): 0xb9593700
2025-12-31T19:59:16.585 [DEBUG] [Thread-133748] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:59:16.606 [DEBUG] [Thread-133748] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T19:59:16.606 [INFO] [Thread-133748] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T19:59:16.609 [DEBUG] [Thread-133748] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:59:16.609 [DEBUG] [Thread-133748] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T19:59:16.609 [DEBUG] [Thread-133748] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:59:16.609 [DEBUG] [Thread-133748] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:59:16.609 [DEBUG] [Thread-133748] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:59:16.609 [DEBUG] [Thread-133748] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:59:16.609 [DEBUG] [Thread-133748] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:59:16.609 [DEBUG] [Thread-133748] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:59:16.609 [DEBUG] [Thread-133748] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:59:16.609 [DEBUG] [Thread-133748] [transport.py] [_log()] client lang: <none>
2025-12-31T19:59:16.609 [DEBUG] [Thread-133748] [transport.py] [_log()] server lang: <none>
2025-12-31T19:59:16.609 [DEBUG] [Thread-133748] [transport.py] [_log()] kex follows: False
2025-12-31T19:59:16.609 [DEBUG] [Thread-133748] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:59:16.609 [DEBUG] [Thread-133748] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:59:16.609 [DEBUG] [Thread-133748] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:59:16.609 [DEBUG] [Thread-133748] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:59:16.609 [DEBUG] [Thread-133748] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:59:16.609 [DEBUG] [Thread-133748] [transport.py] [_log()] Compression: none
2025-12-31T19:59:16.609 [DEBUG] [Thread-133748] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:59:16.626 [DEBUG] [Thread-133748] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:59:16.626 [DEBUG] [Thread-133748] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:59:16.626 [DEBUG] [Thread-133748] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T19:59:16.626 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T19:59:16.626 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:59:16.627 [DEBUG] [Thread-133748] [transport.py] [_log()] userauth is OK
2025-12-31T19:59:16.627 [DEBUG] [Thread-133748] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:59:16.627 [DEBUG] [Thread-133748] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:59:16.627 [DEBUG] [Thread-133748] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T19:59:16.627 [DEBUG] [Thread-133748] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:59:16.646 [INFO] [Thread-133748] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:59:16.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:59:17.266 [DEBUG] [Thread-133748] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:59:17.266 [DEBUG] [Thread-133748] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:59:17.266 [DEBUG] [Thread-133748] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T19:59:17.308 [DEBUG] [Thread-133748] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:59:17.308 [DEBUG] [Thread-133748] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:59:17.310 [DEBUG] [Thread-133748] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:59:17.321 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:59:17.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T19:59:17.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T19:59:17.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T19:59:17.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:59:17.326 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T19:59:17.326 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:59:17.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:59:17.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T19:59:17.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.749097 -999.00  +20.50   9.97     46   +8.80 1 2 1 1 1   782    0 11.36 -71.09 ----- 7.6 10.0 234.9 16.7 21.7 -18.1 21.7 -17.3 21.3 -18.1 21.5 -19.3
2025-12-31T19:59:17.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T19:59:17.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T19:59:17.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.749097
2025-12-31T19:59:17.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T19:59:17.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T19:59:17.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T19:59:17.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T19:59:17.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T19:59:17.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T19:58:43', tmtdew=13.74, humidity=40.76, cloud=0.0, wind=17.56, temperature=20.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T17:58:41.981', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T19:59:17.328 [DEBUG] [Thread-133748] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:59:17.402 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T19:59:17.414 [DEBUG] [Thread-133751] [transport.py] [_log()] starting thread (client mode): 0xb6bb9f90
2025-12-31T19:59:17.414 [DEBUG] [Thread-133751] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:59:17.428 [DEBUG] [Thread-133751] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T19:59:17.428 [INFO] [Thread-133751] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T19:59:17.436 [DEBUG] [Thread-133751] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:59:17.436 [DEBUG] [Thread-133751] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T19:59:17.436 [DEBUG] [Thread-133751] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:59:17.436 [DEBUG] [Thread-133751] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:59:17.436 [DEBUG] [Thread-133751] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:59:17.436 [DEBUG] [Thread-133751] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:59:17.436 [DEBUG] [Thread-133751] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:59:17.436 [DEBUG] [Thread-133751] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:59:17.436 [DEBUG] [Thread-133751] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:59:17.436 [DEBUG] [Thread-133751] [transport.py] [_log()] client lang: <none>
2025-12-31T19:59:17.436 [DEBUG] [Thread-133751] [transport.py] [_log()] server lang: <none>
2025-12-31T19:59:17.436 [DEBUG] [Thread-133751] [transport.py] [_log()] kex follows: False
2025-12-31T19:59:17.436 [DEBUG] [Thread-133751] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:59:17.436 [DEBUG] [Thread-133751] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:59:17.436 [DEBUG] [Thread-133751] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:59:17.436 [DEBUG] [Thread-133751] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:59:17.436 [DEBUG] [Thread-133751] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:59:17.436 [DEBUG] [Thread-133751] [transport.py] [_log()] Compression: none
2025-12-31T19:59:17.436 [DEBUG] [Thread-133751] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:59:17.491 [DEBUG] [Thread-133751] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:59:17.491 [DEBUG] [Thread-133751] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:59:17.491 [DEBUG] [Thread-133751] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T19:59:17.491 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T19:59:17.492 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:59:17.548 [DEBUG] [Thread-133751] [transport.py] [_log()] userauth is OK
2025-12-31T19:59:17.548 [DEBUG] [Thread-133751] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:59:17.548 [DEBUG] [Thread-133751] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:59:17.548 [DEBUG] [Thread-133751] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T19:59:17.548 [DEBUG] [Thread-133751] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:59:17.562 [INFO] [Thread-133751] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:59:17.562 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T19:59:17.562 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:59:18.379 [DEBUG] [Thread-133751] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:59:18.379 [DEBUG] [Thread-133751] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:59:18.427 [DEBUG] [Thread-133751] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:59:18.427 [DEBUG] [Thread-133751] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:59:18.435 [DEBUG] [Thread-133751] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:59:18.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:59:18.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T19:59:18.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T19:59:18.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:59:18.458 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:59:18.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:59:18.466 [DEBUG] [Thread-133751] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:59:25.499 [DEBUG] [Thread-133753 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:59:35.857 [DEBUG] [Thread-133754 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:59:40.557 [DEBUG] [Thread-133755 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T19:59:48.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T19:59:48.488 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T19:59:48.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T19:59:49.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 19, 59, 15), 13.51, 41.38, 0.0, 19.27, 20.55, 0, 0, 0, 2, 0, 0),)
2025-12-31T19:59:49.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 19:59:15
2025-12-31T19:59:49.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T19:59:49.535 [DEBUG] [Thread-133756] [transport.py] [_log()] starting thread (client mode): 0xb6bbb220
2025-12-31T19:59:49.535 [DEBUG] [Thread-133756] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:59:49.550 [DEBUG] [Thread-133756] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T19:59:49.551 [INFO] [Thread-133756] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T19:59:49.554 [DEBUG] [Thread-133756] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:59:49.554 [DEBUG] [Thread-133756] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T19:59:49.554 [DEBUG] [Thread-133756] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:59:49.554 [DEBUG] [Thread-133756] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:59:49.554 [DEBUG] [Thread-133756] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:59:49.554 [DEBUG] [Thread-133756] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:59:49.554 [DEBUG] [Thread-133756] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:59:49.554 [DEBUG] [Thread-133756] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:59:49.554 [DEBUG] [Thread-133756] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:59:49.554 [DEBUG] [Thread-133756] [transport.py] [_log()] client lang: <none>
2025-12-31T19:59:49.554 [DEBUG] [Thread-133756] [transport.py] [_log()] server lang: <none>
2025-12-31T19:59:49.554 [DEBUG] [Thread-133756] [transport.py] [_log()] kex follows: False
2025-12-31T19:59:49.554 [DEBUG] [Thread-133756] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:59:49.554 [DEBUG] [Thread-133756] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:59:49.554 [DEBUG] [Thread-133756] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:59:49.554 [DEBUG] [Thread-133756] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:59:49.554 [DEBUG] [Thread-133756] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:59:49.554 [DEBUG] [Thread-133756] [transport.py] [_log()] Compression: none
2025-12-31T19:59:49.554 [DEBUG] [Thread-133756] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:59:49.569 [DEBUG] [Thread-133756] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:59:49.569 [DEBUG] [Thread-133756] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:59:49.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T19:59:49.570 [DEBUG] [Thread-133756] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T19:59:49.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:59:49.570 [DEBUG] [Thread-133756] [transport.py] [_log()] userauth is OK
2025-12-31T19:59:49.570 [DEBUG] [Thread-133756] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:59:49.570 [DEBUG] [Thread-133756] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:59:49.570 [DEBUG] [Thread-133756] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T19:59:49.570 [DEBUG] [Thread-133756] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:59:49.580 [INFO] [Thread-133756] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:59:49.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:59:50.321 [DEBUG] [Thread-133756] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:59:50.321 [DEBUG] [Thread-133756] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:59:50.321 [DEBUG] [Thread-133756] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T19:59:50.362 [DEBUG] [Thread-133756] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:59:50.362 [DEBUG] [Thread-133756] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:59:50.366 [DEBUG] [Thread-133756] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:59:50.371 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:59:50.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T19:59:50.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T19:59:50.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T19:59:50.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:59:50.382 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T19:59:50.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:59:50.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:59:50.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T19:59:50.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.749444 -999.00  +20.50  11.69     47   +9.00 1 2 1 1 1   774    0 11.08 -69.87 ----- 10.1 11.7 213.4 17.3 21.7 -18.2 21.6 -17.3 21.3 -18.1 21.5 -19.3
2025-12-31T19:59:50.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T19:59:50.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T19:59:50.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.749444
2025-12-31T19:59:50.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T19:59:50.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T19:59:50.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T19:59:50.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T19:59:50.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T19:59:50.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T19:59:15', tmtdew=13.51, humidity=41.38, cloud=0.0, wind=19.27, temperature=20.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T17:59:11.962', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T19:59:50.385 [DEBUG] [Thread-133756] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:59:50.468 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T19:59:50.480 [DEBUG] [Thread-133759] [transport.py] [_log()] starting thread (client mode): 0xb6bbc220
2025-12-31T19:59:50.481 [DEBUG] [Thread-133759] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T19:59:50.495 [DEBUG] [Thread-133759] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T19:59:50.495 [INFO] [Thread-133759] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T19:59:50.502 [DEBUG] [Thread-133759] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T19:59:50.502 [DEBUG] [Thread-133759] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T19:59:50.502 [DEBUG] [Thread-133759] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T19:59:50.502 [DEBUG] [Thread-133759] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:59:50.502 [DEBUG] [Thread-133759] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T19:59:50.502 [DEBUG] [Thread-133759] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:59:50.502 [DEBUG] [Thread-133759] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T19:59:50.502 [DEBUG] [Thread-133759] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T19:59:50.503 [DEBUG] [Thread-133759] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T19:59:50.503 [DEBUG] [Thread-133759] [transport.py] [_log()] client lang: <none>
2025-12-31T19:59:50.503 [DEBUG] [Thread-133759] [transport.py] [_log()] server lang: <none>
2025-12-31T19:59:50.503 [DEBUG] [Thread-133759] [transport.py] [_log()] kex follows: False
2025-12-31T19:59:50.503 [DEBUG] [Thread-133759] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T19:59:50.503 [DEBUG] [Thread-133759] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T19:59:50.503 [DEBUG] [Thread-133759] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T19:59:50.503 [DEBUG] [Thread-133759] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T19:59:50.503 [DEBUG] [Thread-133759] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T19:59:50.503 [DEBUG] [Thread-133759] [transport.py] [_log()] Compression: none
2025-12-31T19:59:50.503 [DEBUG] [Thread-133759] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T19:59:50.560 [DEBUG] [Thread-133759] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T19:59:50.561 [DEBUG] [Thread-133759] [transport.py] [_log()] Switch to new keys ...
2025-12-31T19:59:50.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T19:59:50.562 [DEBUG] [Thread-133759] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T19:59:50.563 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T19:59:50.617 [DEBUG] [Thread-133759] [transport.py] [_log()] userauth is OK
2025-12-31T19:59:50.617 [DEBUG] [Thread-133759] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T19:59:50.617 [DEBUG] [Thread-133759] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T19:59:50.618 [DEBUG] [Thread-133759] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T19:59:50.618 [DEBUG] [Thread-133759] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T19:59:50.642 [INFO] [Thread-133759] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T19:59:50.642 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T19:59:50.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T19:59:51.493 [DEBUG] [Thread-133759] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T19:59:51.494 [DEBUG] [Thread-133759] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T19:59:51.542 [DEBUG] [Thread-133759] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T19:59:51.543 [DEBUG] [Thread-133759] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T19:59:51.552 [DEBUG] [Thread-133759] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T19:59:51.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T19:59:51.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T19:59:51.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T19:59:51.579 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T19:59:51.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T19:59:51.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T19:59:51.588 [DEBUG] [Thread-133759] [transport.py] [_log()] EOF in transport thread
2025-12-31T19:59:55.588 [DEBUG] [Thread-133761 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:00:10.626 [DEBUG] [Thread-133762 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:00:18.417 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:00:18.419 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:00:21.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T20:00:21.610 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T20:00:21.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T20:00:22.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 19, 59, 47), 13.09, 42.82, 0.0, 17.34, 20.32, 0, 0, 0, 2, 0, 0),)
2025-12-31T20:00:22.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 19:59:47
2025-12-31T20:00:22.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T20:00:22.599 [DEBUG] [Thread-133763] [transport.py] [_log()] starting thread (client mode): 0xb6bbba90
2025-12-31T20:00:22.599 [DEBUG] [Thread-133763] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:00:22.620 [DEBUG] [Thread-133763] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T20:00:22.620 [INFO] [Thread-133763] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T20:00:22.621 [DEBUG] [Thread-133763] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:00:22.621 [DEBUG] [Thread-133763] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T20:00:22.621 [DEBUG] [Thread-133763] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:00:22.621 [DEBUG] [Thread-133763] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:00:22.621 [DEBUG] [Thread-133763] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:00:22.621 [DEBUG] [Thread-133763] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:00:22.621 [DEBUG] [Thread-133763] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:00:22.621 [DEBUG] [Thread-133763] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:00:22.621 [DEBUG] [Thread-133763] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:00:22.621 [DEBUG] [Thread-133763] [transport.py] [_log()] client lang: <none>
2025-12-31T20:00:22.621 [DEBUG] [Thread-133763] [transport.py] [_log()] server lang: <none>
2025-12-31T20:00:22.621 [DEBUG] [Thread-133763] [transport.py] [_log()] kex follows: False
2025-12-31T20:00:22.621 [DEBUG] [Thread-133763] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:00:22.621 [DEBUG] [Thread-133763] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:00:22.621 [DEBUG] [Thread-133763] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:00:22.621 [DEBUG] [Thread-133763] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:00:22.621 [DEBUG] [Thread-133763] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:00:22.621 [DEBUG] [Thread-133763] [transport.py] [_log()] Compression: none
2025-12-31T20:00:22.621 [DEBUG] [Thread-133763] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:00:22.640 [DEBUG] [Thread-133763] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:00:22.640 [DEBUG] [Thread-133763] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:00:22.641 [DEBUG] [Thread-133763] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T20:00:22.641 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T20:00:22.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:00:22.643 [DEBUG] [Thread-133763] [transport.py] [_log()] userauth is OK
2025-12-31T20:00:22.643 [DEBUG] [Thread-133763] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:00:22.643 [DEBUG] [Thread-133763] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:00:22.643 [DEBUG] [Thread-133763] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T20:00:22.643 [DEBUG] [Thread-133763] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:00:22.658 [INFO] [Thread-133763] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:00:22.658 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:00:23.418 [DEBUG] [Thread-133763] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:00:23.418 [DEBUG] [Thread-133763] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:00:23.419 [DEBUG] [Thread-133763] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T20:00:23.459 [DEBUG] [Thread-133763] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:00:23.459 [DEBUG] [Thread-133763] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:00:23.462 [DEBUG] [Thread-133763] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:00:23.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:00:23.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T20:00:23.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T20:00:23.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T20:00:23.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:00:23.488 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T20:00:23.488 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:00:23.488 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:00:23.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T20:00:23.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.749792 -999.00  +20.40  12.28     47   +8.90 1 2 1 1 1   764    0 10.65 -80.47 ----- 9.1 12.3 238.6 14.7 21.6 -18.2 21.6 -17.2 21.3 -18.0 21.5 -19.2
2025-12-31T20:00:23.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T20:00:23.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T20:00:23.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.749792
2025-12-31T20:00:23.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T20:00:23.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T20:00:23.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T20:00:23.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T20:00:23.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T20:00:23.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T19:59:47', tmtdew=13.09, humidity=42.82, cloud=0.0, wind=17.34, temperature=20.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T17:59:42.029', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T20:00:23.492 [DEBUG] [Thread-133763] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:00:23.575 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T20:00:23.586 [DEBUG] [Thread-133766] [transport.py] [_log()] starting thread (client mode): 0xb9578f70
2025-12-31T20:00:23.586 [DEBUG] [Thread-133766] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:00:23.601 [DEBUG] [Thread-133766] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T20:00:23.601 [INFO] [Thread-133766] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T20:00:23.609 [DEBUG] [Thread-133766] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:00:23.609 [DEBUG] [Thread-133766] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T20:00:23.609 [DEBUG] [Thread-133766] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:00:23.609 [DEBUG] [Thread-133766] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:00:23.609 [DEBUG] [Thread-133766] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:00:23.609 [DEBUG] [Thread-133766] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:00:23.609 [DEBUG] [Thread-133766] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:00:23.609 [DEBUG] [Thread-133766] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:00:23.609 [DEBUG] [Thread-133766] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:00:23.609 [DEBUG] [Thread-133766] [transport.py] [_log()] client lang: <none>
2025-12-31T20:00:23.609 [DEBUG] [Thread-133766] [transport.py] [_log()] server lang: <none>
2025-12-31T20:00:23.609 [DEBUG] [Thread-133766] [transport.py] [_log()] kex follows: False
2025-12-31T20:00:23.609 [DEBUG] [Thread-133766] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:00:23.609 [DEBUG] [Thread-133766] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:00:23.609 [DEBUG] [Thread-133766] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:00:23.610 [DEBUG] [Thread-133766] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:00:23.610 [DEBUG] [Thread-133766] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:00:23.610 [DEBUG] [Thread-133766] [transport.py] [_log()] Compression: none
2025-12-31T20:00:23.610 [DEBUG] [Thread-133766] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:00:23.667 [DEBUG] [Thread-133766] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:00:23.668 [DEBUG] [Thread-133766] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:00:23.668 [DEBUG] [Thread-133766] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T20:00:23.669 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T20:00:23.669 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:00:23.724 [DEBUG] [Thread-133766] [transport.py] [_log()] userauth is OK
2025-12-31T20:00:23.725 [DEBUG] [Thread-133766] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:00:23.725 [DEBUG] [Thread-133766] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:00:23.725 [DEBUG] [Thread-133766] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T20:00:23.725 [DEBUG] [Thread-133766] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:00:23.743 [INFO] [Thread-133766] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:00:23.744 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T20:00:23.744 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:00:24.602 [DEBUG] [Thread-133766] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:00:24.602 [DEBUG] [Thread-133766] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:00:24.650 [DEBUG] [Thread-133766] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:00:24.650 [DEBUG] [Thread-133766] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:00:24.659 [DEBUG] [Thread-133766] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:00:24.669 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:00:24.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T20:00:24.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T20:00:24.687 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:00:24.687 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:00:24.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:00:24.697 [DEBUG] [Thread-133766] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:00:25.659 [DEBUG] [Thread-133768 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:00:35.926 [DEBUG] [Thread-133769 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:00:40.704 [DEBUG] [Thread-133770 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:00:54.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T20:00:54.719 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T20:00:54.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T20:00:55.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 20, 0, 51), 12.7, 43.49, 0.0, 18.74, 20.17, 0, 0, 0, 2, 0, 0),)
2025-12-31T20:00:55.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 20:00:51
2025-12-31T20:00:55.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T20:00:55.721 [DEBUG] [Thread-133771] [transport.py] [_log()] starting thread (client mode): 0xb9591480
2025-12-31T20:00:55.721 [DEBUG] [Thread-133771] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:00:55.736 [DEBUG] [Thread-133772 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:00:55.740 [DEBUG] [Thread-133771] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T20:00:55.740 [INFO] [Thread-133771] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T20:00:55.742 [DEBUG] [Thread-133771] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:00:55.742 [DEBUG] [Thread-133771] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T20:00:55.742 [DEBUG] [Thread-133771] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:00:55.742 [DEBUG] [Thread-133771] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:00:55.742 [DEBUG] [Thread-133771] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:00:55.743 [DEBUG] [Thread-133771] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:00:55.743 [DEBUG] [Thread-133771] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:00:55.743 [DEBUG] [Thread-133771] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:00:55.743 [DEBUG] [Thread-133771] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:00:55.743 [DEBUG] [Thread-133771] [transport.py] [_log()] client lang: <none>
2025-12-31T20:00:55.743 [DEBUG] [Thread-133771] [transport.py] [_log()] server lang: <none>
2025-12-31T20:00:55.743 [DEBUG] [Thread-133771] [transport.py] [_log()] kex follows: False
2025-12-31T20:00:55.743 [DEBUG] [Thread-133771] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:00:55.743 [DEBUG] [Thread-133771] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:00:55.743 [DEBUG] [Thread-133771] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:00:55.743 [DEBUG] [Thread-133771] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:00:55.743 [DEBUG] [Thread-133771] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:00:55.743 [DEBUG] [Thread-133771] [transport.py] [_log()] Compression: none
2025-12-31T20:00:55.743 [DEBUG] [Thread-133771] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:00:55.755 [DEBUG] [Thread-133771] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:00:55.756 [DEBUG] [Thread-133771] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:00:55.756 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T20:00:55.757 [DEBUG] [Thread-133771] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T20:00:55.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:00:55.759 [DEBUG] [Thread-133771] [transport.py] [_log()] userauth is OK
2025-12-31T20:00:55.759 [DEBUG] [Thread-133771] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:00:55.759 [DEBUG] [Thread-133771] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:00:55.759 [DEBUG] [Thread-133771] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T20:00:55.759 [DEBUG] [Thread-133771] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:00:55.776 [INFO] [Thread-133771] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:00:55.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:00:56.409 [DEBUG] [Thread-133771] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:00:56.409 [DEBUG] [Thread-133771] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:00:56.409 [DEBUG] [Thread-133771] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T20:00:56.449 [DEBUG] [Thread-133771] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:00:56.450 [DEBUG] [Thread-133771] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:00:56.452 [DEBUG] [Thread-133771] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:00:56.459 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:00:56.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T20:00:56.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T20:00:56.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T20:00:56.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:00:56.465 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T20:00:56.465 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:00:56.465 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:00:56.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T20:00:56.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.750139 -999.00  +20.40  12.69     47   +9.00 1 2 1 1 1   754    0 10.49 -82.45 ----- 11.4 12.7 206.6 16.1 21.6 -18.2 21.6 -17.2 21.2 -17.8 21.4 -19.1
2025-12-31T20:00:56.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T20:00:56.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T20:00:56.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.750139
2025-12-31T20:00:56.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T20:00:56.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T20:00:56.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T20:00:56.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T20:00:56.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T20:00:56.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T20:00:51', tmtdew=12.7, humidity=43.49, cloud=0.0, wind=18.74, temperature=20.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T18:00:12.010', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T20:00:56.466 [DEBUG] [Thread-133771] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:00:56.538 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T20:00:56.550 [DEBUG] [Thread-133775] [transport.py] [_log()] starting thread (client mode): 0xb95d7820
2025-12-31T20:00:56.550 [DEBUG] [Thread-133775] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:00:56.569 [DEBUG] [Thread-133775] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T20:00:56.569 [INFO] [Thread-133775] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T20:00:56.577 [DEBUG] [Thread-133775] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:00:56.577 [DEBUG] [Thread-133775] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T20:00:56.577 [DEBUG] [Thread-133775] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:00:56.577 [DEBUG] [Thread-133775] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:00:56.577 [DEBUG] [Thread-133775] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:00:56.577 [DEBUG] [Thread-133775] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:00:56.577 [DEBUG] [Thread-133775] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:00:56.577 [DEBUG] [Thread-133775] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:00:56.577 [DEBUG] [Thread-133775] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:00:56.577 [DEBUG] [Thread-133775] [transport.py] [_log()] client lang: <none>
2025-12-31T20:00:56.577 [DEBUG] [Thread-133775] [transport.py] [_log()] server lang: <none>
2025-12-31T20:00:56.577 [DEBUG] [Thread-133775] [transport.py] [_log()] kex follows: False
2025-12-31T20:00:56.577 [DEBUG] [Thread-133775] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:00:56.577 [DEBUG] [Thread-133775] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:00:56.577 [DEBUG] [Thread-133775] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:00:56.577 [DEBUG] [Thread-133775] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:00:56.577 [DEBUG] [Thread-133775] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:00:56.577 [DEBUG] [Thread-133775] [transport.py] [_log()] Compression: none
2025-12-31T20:00:56.577 [DEBUG] [Thread-133775] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:00:56.640 [DEBUG] [Thread-133775] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:00:56.640 [DEBUG] [Thread-133775] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:00:56.640 [DEBUG] [Thread-133775] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T20:00:56.640 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T20:00:56.640 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:00:56.696 [DEBUG] [Thread-133775] [transport.py] [_log()] userauth is OK
2025-12-31T20:00:56.696 [DEBUG] [Thread-133775] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:00:56.696 [DEBUG] [Thread-133775] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:00:56.696 [DEBUG] [Thread-133775] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T20:00:56.696 [DEBUG] [Thread-133775] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:00:56.720 [INFO] [Thread-133775] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:00:56.721 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T20:00:56.721 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:00:57.553 [DEBUG] [Thread-133775] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:00:57.553 [DEBUG] [Thread-133775] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:00:57.601 [DEBUG] [Thread-133775] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:00:57.601 [DEBUG] [Thread-133775] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:00:57.610 [DEBUG] [Thread-133775] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:00:57.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:00:57.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T20:00:57.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T20:00:57.646 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:00:57.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:00:57.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:00:57.654 [DEBUG] [Thread-133775] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:01:10.769 [DEBUG] [Thread-133777 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:01:23.377 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:01:23.378 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:01:25.809 [DEBUG] [Thread-133778 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:01:27.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T20:01:27.677 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T20:01:27.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T20:01:28.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 20, 1, 23), 12.66, 43.61, 0.0, 18.28, 20.14, 0, 0, 0, 2, 0, 0),)
2025-12-31T20:01:28.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 20:01:23
2025-12-31T20:01:28.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T20:01:28.657 [DEBUG] [Thread-133779] [transport.py] [_log()] starting thread (client mode): 0xb17754b0
2025-12-31T20:01:28.657 [DEBUG] [Thread-133779] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:01:28.674 [DEBUG] [Thread-133779] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T20:01:28.674 [INFO] [Thread-133779] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T20:01:28.677 [DEBUG] [Thread-133779] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:01:28.677 [DEBUG] [Thread-133779] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T20:01:28.677 [DEBUG] [Thread-133779] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:01:28.677 [DEBUG] [Thread-133779] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:01:28.677 [DEBUG] [Thread-133779] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:01:28.677 [DEBUG] [Thread-133779] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:01:28.677 [DEBUG] [Thread-133779] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:01:28.677 [DEBUG] [Thread-133779] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:01:28.677 [DEBUG] [Thread-133779] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:01:28.677 [DEBUG] [Thread-133779] [transport.py] [_log()] client lang: <none>
2025-12-31T20:01:28.677 [DEBUG] [Thread-133779] [transport.py] [_log()] server lang: <none>
2025-12-31T20:01:28.677 [DEBUG] [Thread-133779] [transport.py] [_log()] kex follows: False
2025-12-31T20:01:28.677 [DEBUG] [Thread-133779] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:01:28.677 [DEBUG] [Thread-133779] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:01:28.677 [DEBUG] [Thread-133779] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:01:28.677 [DEBUG] [Thread-133779] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:01:28.677 [DEBUG] [Thread-133779] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:01:28.677 [DEBUG] [Thread-133779] [transport.py] [_log()] Compression: none
2025-12-31T20:01:28.677 [DEBUG] [Thread-133779] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:01:28.692 [DEBUG] [Thread-133779] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:01:28.692 [DEBUG] [Thread-133779] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:01:28.692 [DEBUG] [Thread-133779] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T20:01:28.692 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T20:01:28.692 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:01:28.693 [DEBUG] [Thread-133779] [transport.py] [_log()] userauth is OK
2025-12-31T20:01:28.693 [DEBUG] [Thread-133779] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:01:28.693 [DEBUG] [Thread-133779] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:01:28.693 [DEBUG] [Thread-133779] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T20:01:28.693 [DEBUG] [Thread-133779] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:01:28.702 [INFO] [Thread-133779] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:01:28.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:01:29.517 [DEBUG] [Thread-133779] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:01:29.517 [DEBUG] [Thread-133779] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:01:29.517 [DEBUG] [Thread-133779] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T20:01:29.558 [DEBUG] [Thread-133779] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:01:29.559 [DEBUG] [Thread-133779] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:01:29.562 [DEBUG] [Thread-133779] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:01:29.573 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:01:29.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T20:01:29.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T20:01:29.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T20:01:29.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:01:29.583 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T20:01:29.584 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:01:29.584 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:01:29.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T20:01:29.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.750486 -999.00  +20.30  11.53     48   +9.00 1 2 1 1 1   744    0 10.62 -85.20 ----- 12.2 11.5 202.7 19.5 21.5 -18.2 21.5 -17.4 21.1 -18.0 21.4 -19.2
2025-12-31T20:01:29.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T20:01:29.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T20:01:29.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.750486
2025-12-31T20:01:29.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T20:01:29.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T20:01:29.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T20:01:29.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T20:01:29.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T20:01:29.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T20:01:23', tmtdew=12.66, humidity=43.61, cloud=0.0, wind=18.28, temperature=20.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T18:00:41.990', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T20:01:29.586 [DEBUG] [Thread-133779] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:01:29.667 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T20:01:29.679 [DEBUG] [Thread-133782] [transport.py] [_log()] starting thread (client mode): 0xb1765420
2025-12-31T20:01:29.679 [DEBUG] [Thread-133782] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:01:29.694 [DEBUG] [Thread-133782] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T20:01:29.695 [INFO] [Thread-133782] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T20:01:29.702 [DEBUG] [Thread-133782] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:01:29.703 [DEBUG] [Thread-133782] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T20:01:29.703 [DEBUG] [Thread-133782] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:01:29.703 [DEBUG] [Thread-133782] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:01:29.703 [DEBUG] [Thread-133782] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:01:29.703 [DEBUG] [Thread-133782] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:01:29.703 [DEBUG] [Thread-133782] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:01:29.703 [DEBUG] [Thread-133782] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:01:29.703 [DEBUG] [Thread-133782] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:01:29.703 [DEBUG] [Thread-133782] [transport.py] [_log()] client lang: <none>
2025-12-31T20:01:29.704 [DEBUG] [Thread-133782] [transport.py] [_log()] server lang: <none>
2025-12-31T20:01:29.704 [DEBUG] [Thread-133782] [transport.py] [_log()] kex follows: False
2025-12-31T20:01:29.704 [DEBUG] [Thread-133782] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:01:29.704 [DEBUG] [Thread-133782] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:01:29.704 [DEBUG] [Thread-133782] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:01:29.704 [DEBUG] [Thread-133782] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:01:29.704 [DEBUG] [Thread-133782] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:01:29.705 [DEBUG] [Thread-133782] [transport.py] [_log()] Compression: none
2025-12-31T20:01:29.705 [DEBUG] [Thread-133782] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:01:29.760 [DEBUG] [Thread-133782] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:01:29.760 [DEBUG] [Thread-133782] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:01:29.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T20:01:29.762 [DEBUG] [Thread-133782] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T20:01:29.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:01:29.815 [DEBUG] [Thread-133782] [transport.py] [_log()] userauth is OK
2025-12-31T20:01:29.816 [DEBUG] [Thread-133782] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:01:29.816 [DEBUG] [Thread-133782] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:01:29.816 [DEBUG] [Thread-133782] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T20:01:29.816 [DEBUG] [Thread-133782] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:01:29.836 [INFO] [Thread-133782] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:01:29.836 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T20:01:29.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:01:30.677 [DEBUG] [Thread-133782] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:01:30.677 [DEBUG] [Thread-133782] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:01:30.725 [DEBUG] [Thread-133782] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:01:30.725 [DEBUG] [Thread-133782] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:01:30.735 [DEBUG] [Thread-133782] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:01:30.744 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:01:30.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-12-31T20:01:30.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T20:01:30.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:01:30.763 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:01:30.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:01:30.771 [DEBUG] [Thread-133782] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:01:36.002 [DEBUG] [Thread-133784 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:01:40.840 [DEBUG] [Thread-133785 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:01:55.890 [DEBUG] [Thread-133786 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:02:00.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T20:02:00.776 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T20:02:00.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T20:02:01.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 20, 1, 55), 12.53, 44.19, 0.0, 21.49, 20.04, 0, 0, 0, 2, 0, 0),)
2025-12-31T20:02:01.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 20:01:55
2025-12-31T20:02:01.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T20:02:01.749 [DEBUG] [Thread-133787] [transport.py] [_log()] starting thread (client mode): 0xb95d7430
2025-12-31T20:02:01.749 [DEBUG] [Thread-133787] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:02:01.769 [DEBUG] [Thread-133787] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T20:02:01.769 [INFO] [Thread-133787] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T20:02:01.773 [DEBUG] [Thread-133787] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:02:01.773 [DEBUG] [Thread-133787] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T20:02:01.773 [DEBUG] [Thread-133787] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:02:01.773 [DEBUG] [Thread-133787] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:02:01.773 [DEBUG] [Thread-133787] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:02:01.773 [DEBUG] [Thread-133787] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:02:01.773 [DEBUG] [Thread-133787] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:02:01.773 [DEBUG] [Thread-133787] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:02:01.773 [DEBUG] [Thread-133787] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:02:01.773 [DEBUG] [Thread-133787] [transport.py] [_log()] client lang: <none>
2025-12-31T20:02:01.773 [DEBUG] [Thread-133787] [transport.py] [_log()] server lang: <none>
2025-12-31T20:02:01.773 [DEBUG] [Thread-133787] [transport.py] [_log()] kex follows: False
2025-12-31T20:02:01.773 [DEBUG] [Thread-133787] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:02:01.773 [DEBUG] [Thread-133787] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:02:01.773 [DEBUG] [Thread-133787] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:02:01.773 [DEBUG] [Thread-133787] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:02:01.773 [DEBUG] [Thread-133787] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:02:01.773 [DEBUG] [Thread-133787] [transport.py] [_log()] Compression: none
2025-12-31T20:02:01.773 [DEBUG] [Thread-133787] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:02:01.792 [DEBUG] [Thread-133787] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:02:01.792 [DEBUG] [Thread-133787] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:02:01.793 [DEBUG] [Thread-133787] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T20:02:01.793 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T20:02:01.794 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:02:01.795 [DEBUG] [Thread-133787] [transport.py] [_log()] userauth is OK
2025-12-31T20:02:01.796 [DEBUG] [Thread-133787] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:02:01.796 [DEBUG] [Thread-133787] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:02:01.796 [DEBUG] [Thread-133787] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T20:02:01.796 [DEBUG] [Thread-133787] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:02:01.817 [INFO] [Thread-133787] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:02:01.818 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:02:02.469 [DEBUG] [Thread-133787] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:02:02.469 [DEBUG] [Thread-133787] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:02:02.470 [DEBUG] [Thread-133787] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T20:02:02.510 [DEBUG] [Thread-133787] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:02:02.510 [DEBUG] [Thread-133787] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:02:02.513 [DEBUG] [Thread-133787] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:02:02.524 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:02:02.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T20:02:02.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T20:02:02.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T20:02:02.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:02:02.536 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T20:02:02.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:02:02.537 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:02:02.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T20:02:02.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.750833 -999.00  +20.30  12.90     48   +9.00 1 2 1 1 1   732    0 10.35 -90.92 ----- 6.2 12.9 211.4 24.3 21.4 -18.1 21.4 -17.0 21.1 -18.0 21.3 -19.1
2025-12-31T20:02:02.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T20:02:02.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T20:02:02.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.750833
2025-12-31T20:02:02.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T20:02:02.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T20:02:02.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T20:02:02.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T20:02:02.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T20:02:02.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T20:01:55', tmtdew=12.53, humidity=44.19, cloud=0.0, wind=21.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-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T18:01:11.971', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T20:02:02.539 [DEBUG] [Thread-133787] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:02:02.623 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T20:02:02.635 [DEBUG] [Thread-133790] [transport.py] [_log()] starting thread (client mode): 0xb95d6260
2025-12-31T20:02:02.635 [DEBUG] [Thread-133790] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:02:02.650 [DEBUG] [Thread-133790] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T20:02:02.650 [INFO] [Thread-133790] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T20:02:02.657 [DEBUG] [Thread-133790] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:02:02.658 [DEBUG] [Thread-133790] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T20:02:02.658 [DEBUG] [Thread-133790] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:02:02.658 [DEBUG] [Thread-133790] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:02:02.658 [DEBUG] [Thread-133790] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:02:02.658 [DEBUG] [Thread-133790] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:02:02.658 [DEBUG] [Thread-133790] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:02:02.658 [DEBUG] [Thread-133790] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:02:02.658 [DEBUG] [Thread-133790] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:02:02.658 [DEBUG] [Thread-133790] [transport.py] [_log()] client lang: <none>
2025-12-31T20:02:02.658 [DEBUG] [Thread-133790] [transport.py] [_log()] server lang: <none>
2025-12-31T20:02:02.658 [DEBUG] [Thread-133790] [transport.py] [_log()] kex follows: False
2025-12-31T20:02:02.658 [DEBUG] [Thread-133790] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:02:02.658 [DEBUG] [Thread-133790] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:02:02.658 [DEBUG] [Thread-133790] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:02:02.658 [DEBUG] [Thread-133790] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:02:02.658 [DEBUG] [Thread-133790] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:02:02.658 [DEBUG] [Thread-133790] [transport.py] [_log()] Compression: none
2025-12-31T20:02:02.658 [DEBUG] [Thread-133790] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:02:02.719 [DEBUG] [Thread-133790] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:02:02.719 [DEBUG] [Thread-133790] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:02:02.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T20:02:02.721 [DEBUG] [Thread-133790] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T20:02:02.722 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:02:02.775 [DEBUG] [Thread-133790] [transport.py] [_log()] userauth is OK
2025-12-31T20:02:02.776 [DEBUG] [Thread-133790] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:02:02.776 [DEBUG] [Thread-133790] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:02:02.776 [DEBUG] [Thread-133790] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T20:02:02.776 [DEBUG] [Thread-133790] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:02:02.797 [INFO] [Thread-133790] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:02:02.797 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T20:02:02.798 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:02:03.627 [DEBUG] [Thread-133790] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:02:03.628 [DEBUG] [Thread-133790] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:02:03.676 [DEBUG] [Thread-133790] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:02:03.677 [DEBUG] [Thread-133790] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:02:03.686 [DEBUG] [Thread-133790] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:02:03.696 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:02:03.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T20:02:03.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T20:02:03.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:02:03.714 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:02:03.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:02:03.723 [DEBUG] [Thread-133790] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:02:10.923 [DEBUG] [Thread-133792 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:02:25.974 [DEBUG] [Thread-133793 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:02:29.790 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:02:29.791 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:02:33.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T20:02:33.745 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T20:02:33.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T20:02:34.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 20, 2, 27), 12.45, 44.44, 0.0, 20.64, 20.06, 0, 0, 0, 2, 0, 0),)
2025-12-31T20:02:34.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 20:02:27
2025-12-31T20:02:34.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T20:02:34.761 [DEBUG] [Thread-133794] [transport.py] [_log()] starting thread (client mode): 0xb95d5a80
2025-12-31T20:02:34.761 [DEBUG] [Thread-133794] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:02:34.781 [DEBUG] [Thread-133794] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T20:02:34.781 [INFO] [Thread-133794] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T20:02:34.784 [DEBUG] [Thread-133794] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:02:34.784 [DEBUG] [Thread-133794] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T20:02:34.784 [DEBUG] [Thread-133794] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:02:34.784 [DEBUG] [Thread-133794] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:02:34.784 [DEBUG] [Thread-133794] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:02:34.785 [DEBUG] [Thread-133794] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:02:34.785 [DEBUG] [Thread-133794] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:02:34.785 [DEBUG] [Thread-133794] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:02:34.785 [DEBUG] [Thread-133794] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:02:34.785 [DEBUG] [Thread-133794] [transport.py] [_log()] client lang: <none>
2025-12-31T20:02:34.785 [DEBUG] [Thread-133794] [transport.py] [_log()] server lang: <none>
2025-12-31T20:02:34.785 [DEBUG] [Thread-133794] [transport.py] [_log()] kex follows: False
2025-12-31T20:02:34.785 [DEBUG] [Thread-133794] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:02:34.785 [DEBUG] [Thread-133794] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:02:34.785 [DEBUG] [Thread-133794] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:02:34.785 [DEBUG] [Thread-133794] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:02:34.785 [DEBUG] [Thread-133794] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:02:34.785 [DEBUG] [Thread-133794] [transport.py] [_log()] Compression: none
2025-12-31T20:02:34.785 [DEBUG] [Thread-133794] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:02:34.800 [DEBUG] [Thread-133794] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:02:34.800 [DEBUG] [Thread-133794] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:02:34.801 [DEBUG] [Thread-133794] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T20:02:34.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T20:02:34.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:02:34.802 [DEBUG] [Thread-133794] [transport.py] [_log()] userauth is OK
2025-12-31T20:02:34.802 [DEBUG] [Thread-133794] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:02:34.802 [DEBUG] [Thread-133794] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:02:34.802 [DEBUG] [Thread-133794] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T20:02:34.802 [DEBUG] [Thread-133794] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:02:34.821 [INFO] [Thread-133794] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:02:34.821 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:02:35.478 [DEBUG] [Thread-133794] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:02:35.478 [DEBUG] [Thread-133794] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:02:35.478 [DEBUG] [Thread-133794] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T20:02:35.520 [DEBUG] [Thread-133794] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:02:35.520 [DEBUG] [Thread-133794] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:02:35.523 [DEBUG] [Thread-133794] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:02:35.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:02:35.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T20:02:35.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T20:02:35.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T20:02:35.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:02:35.543 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T20:02:35.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:02:35.543 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:02:35.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T20:02:35.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.751180 -999.00  +20.30   6.40     48   +9.00 1 2 1 1 1   720    0 10.37 -88.90 ----- 6.1 6.4 222.3 13.5 21.4 -17.9 21.4 -16.9 21.1 -18.1 21.3 -19.1
2025-12-31T20:02:35.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T20:02:35.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T20:02:35.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.751180
2025-12-31T20:02:35.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T20:02:35.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T20:02:35.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T20:02:35.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T20:02:35.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T20:02:35.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T20:02:27', tmtdew=12.45, humidity=44.44, cloud=0.0, wind=20.64, temperature=20.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T18:01:41.952', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T20:02:35.545 [DEBUG] [Thread-133794] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:02:35.630 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T20:02:35.641 [DEBUG] [Thread-133797] [transport.py] [_log()] starting thread (client mode): 0xb6bb2230
2025-12-31T20:02:35.641 [DEBUG] [Thread-133797] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:02:35.655 [DEBUG] [Thread-133797] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T20:02:35.655 [INFO] [Thread-133797] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T20:02:35.662 [DEBUG] [Thread-133797] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:02:35.662 [DEBUG] [Thread-133797] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T20:02:35.663 [DEBUG] [Thread-133797] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:02:35.663 [DEBUG] [Thread-133797] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:02:35.663 [DEBUG] [Thread-133797] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:02:35.663 [DEBUG] [Thread-133797] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:02:35.663 [DEBUG] [Thread-133797] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:02:35.663 [DEBUG] [Thread-133797] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:02:35.663 [DEBUG] [Thread-133797] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:02:35.663 [DEBUG] [Thread-133797] [transport.py] [_log()] client lang: <none>
2025-12-31T20:02:35.663 [DEBUG] [Thread-133797] [transport.py] [_log()] server lang: <none>
2025-12-31T20:02:35.663 [DEBUG] [Thread-133797] [transport.py] [_log()] kex follows: False
2025-12-31T20:02:35.663 [DEBUG] [Thread-133797] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:02:35.663 [DEBUG] [Thread-133797] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:02:35.663 [DEBUG] [Thread-133797] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:02:35.663 [DEBUG] [Thread-133797] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:02:35.663 [DEBUG] [Thread-133797] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:02:35.663 [DEBUG] [Thread-133797] [transport.py] [_log()] Compression: none
2025-12-31T20:02:35.663 [DEBUG] [Thread-133797] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:02:35.722 [DEBUG] [Thread-133797] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:02:35.723 [DEBUG] [Thread-133797] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:02:35.723 [DEBUG] [Thread-133797] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T20:02:35.723 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T20:02:35.724 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:02:35.778 [DEBUG] [Thread-133797] [transport.py] [_log()] userauth is OK
2025-12-31T20:02:35.779 [DEBUG] [Thread-133797] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:02:35.779 [DEBUG] [Thread-133797] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:02:35.779 [DEBUG] [Thread-133797] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T20:02:35.779 [DEBUG] [Thread-133797] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:02:35.802 [INFO] [Thread-133797] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:02:35.802 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T20:02:35.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:02:36.078 [DEBUG] [Thread-133799 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:02:36.633 [DEBUG] [Thread-133797] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:02:36.633 [DEBUG] [Thread-133797] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:02:36.681 [DEBUG] [Thread-133797] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:02:36.682 [DEBUG] [Thread-133797] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:02:36.691 [DEBUG] [Thread-133797] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:02:36.699 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:02:36.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-12-31T20:02:36.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T20:02:36.718 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:02:36.718 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:02:36.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:02:36.726 [DEBUG] [Thread-133797] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:02:41.011 [DEBUG] [Thread-133800 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:02:56.072 [DEBUG] [Thread-133801 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:03:06.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T20:03:06.724 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T20:03:06.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T20:03:07.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 20, 2, 27), 12.4, 44.44, 0.0, 18.84, 20.01, 0, 0, 0, 2, 0, 0),)
2025-12-31T20:03:07.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 20:02:27
2025-12-31T20:03:07.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T20:03:07.716 [DEBUG] [Thread-133802] [transport.py] [_log()] starting thread (client mode): 0xb6bb3ca0
2025-12-31T20:03:07.717 [DEBUG] [Thread-133802] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:03:07.732 [DEBUG] [Thread-133802] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T20:03:07.732 [INFO] [Thread-133802] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T20:03:07.736 [DEBUG] [Thread-133802] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:03:07.736 [DEBUG] [Thread-133802] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T20:03:07.736 [DEBUG] [Thread-133802] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:03:07.736 [DEBUG] [Thread-133802] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:03:07.736 [DEBUG] [Thread-133802] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:03:07.736 [DEBUG] [Thread-133802] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:03:07.736 [DEBUG] [Thread-133802] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:03:07.736 [DEBUG] [Thread-133802] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:03:07.736 [DEBUG] [Thread-133802] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:03:07.736 [DEBUG] [Thread-133802] [transport.py] [_log()] client lang: <none>
2025-12-31T20:03:07.736 [DEBUG] [Thread-133802] [transport.py] [_log()] server lang: <none>
2025-12-31T20:03:07.736 [DEBUG] [Thread-133802] [transport.py] [_log()] kex follows: False
2025-12-31T20:03:07.736 [DEBUG] [Thread-133802] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:03:07.736 [DEBUG] [Thread-133802] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:03:07.736 [DEBUG] [Thread-133802] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:03:07.736 [DEBUG] [Thread-133802] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:03:07.736 [DEBUG] [Thread-133802] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:03:07.736 [DEBUG] [Thread-133802] [transport.py] [_log()] Compression: none
2025-12-31T20:03:07.736 [DEBUG] [Thread-133802] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:03:07.752 [DEBUG] [Thread-133802] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:03:07.752 [DEBUG] [Thread-133802] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:03:07.752 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T20:03:07.752 [DEBUG] [Thread-133802] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T20:03:07.752 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:03:07.754 [DEBUG] [Thread-133802] [transport.py] [_log()] userauth is OK
2025-12-31T20:03:07.754 [DEBUG] [Thread-133802] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:03:07.754 [DEBUG] [Thread-133802] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:03:07.754 [DEBUG] [Thread-133802] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T20:03:07.754 [DEBUG] [Thread-133802] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:03:07.770 [INFO] [Thread-133802] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:03:07.770 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:03:08.432 [DEBUG] [Thread-133802] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:03:08.432 [DEBUG] [Thread-133802] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:03:08.432 [DEBUG] [Thread-133802] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T20:03:08.473 [DEBUG] [Thread-133802] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:03:08.473 [DEBUG] [Thread-133802] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:03:08.476 [DEBUG] [Thread-133802] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:03:08.488 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:03:08.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T20:03:08.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T20:03:08.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T20:03:08.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:03:08.494 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T20:03:08.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:03:08.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:03:08.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T20:03:08.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.751528 -999.00  +20.40   5.88     48   +9.10 1 2 1 1 1   708    0 10.40 -87.97 ----- 14.1 5.9 184.2 9.9 21.4 -18.2 21.4 -17.3 21.1 -17.8 21.3 -19.0
2025-12-31T20:03:08.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T20:03:08.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T20:03:08.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.751528
2025-12-31T20:03:08.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T20:03:08.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T20:03:08.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T20:03:08.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T20:03:08.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T20:03:08.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T20:02:27', tmtdew=12.4, humidity=44.44, cloud=0.0, wind=18.84, temperature=20.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T18:02:12.019', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T20:03:08.495 [DEBUG] [Thread-133802] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:03:08.570 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T20:03:08.582 [DEBUG] [Thread-133805] [transport.py] [_log()] starting thread (client mode): 0xb6bb1210
2025-12-31T20:03:08.582 [DEBUG] [Thread-133805] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:03:08.597 [DEBUG] [Thread-133805] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T20:03:08.597 [INFO] [Thread-133805] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T20:03:08.604 [DEBUG] [Thread-133805] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:03:08.604 [DEBUG] [Thread-133805] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T20:03:08.604 [DEBUG] [Thread-133805] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:03:08.604 [DEBUG] [Thread-133805] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:03:08.604 [DEBUG] [Thread-133805] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:03:08.604 [DEBUG] [Thread-133805] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:03:08.604 [DEBUG] [Thread-133805] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:03:08.604 [DEBUG] [Thread-133805] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:03:08.604 [DEBUG] [Thread-133805] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:03:08.604 [DEBUG] [Thread-133805] [transport.py] [_log()] client lang: <none>
2025-12-31T20:03:08.604 [DEBUG] [Thread-133805] [transport.py] [_log()] server lang: <none>
2025-12-31T20:03:08.605 [DEBUG] [Thread-133805] [transport.py] [_log()] kex follows: False
2025-12-31T20:03:08.605 [DEBUG] [Thread-133805] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:03:08.605 [DEBUG] [Thread-133805] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:03:08.605 [DEBUG] [Thread-133805] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:03:08.605 [DEBUG] [Thread-133805] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:03:08.605 [DEBUG] [Thread-133805] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:03:08.605 [DEBUG] [Thread-133805] [transport.py] [_log()] Compression: none
2025-12-31T20:03:08.605 [DEBUG] [Thread-133805] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:03:08.660 [DEBUG] [Thread-133805] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:03:08.660 [DEBUG] [Thread-133805] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:03:08.660 [DEBUG] [Thread-133805] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T20:03:08.660 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T20:03:08.660 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:03:08.718 [DEBUG] [Thread-133805] [transport.py] [_log()] userauth is OK
2025-12-31T20:03:08.718 [DEBUG] [Thread-133805] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:03:08.718 [DEBUG] [Thread-133805] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:03:08.718 [DEBUG] [Thread-133805] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T20:03:08.718 [DEBUG] [Thread-133805] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:03:08.731 [INFO] [Thread-133805] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:03:08.731 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T20:03:08.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:03:09.530 [DEBUG] [Thread-133805] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:03:09.530 [DEBUG] [Thread-133805] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:03:09.578 [DEBUG] [Thread-133805] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:03:09.578 [DEBUG] [Thread-133805] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:03:09.588 [DEBUG] [Thread-133805] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:03:09.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:03:09.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T20:03:09.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T20:03:09.614 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:03:09.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:03:09.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:03:09.627 [DEBUG] [Thread-133805] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:03:11.103 [DEBUG] [Thread-133807 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:03:26.149 [DEBUG] [Thread-133808 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:03:34.722 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:03:34.724 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:03:36.153 [DEBUG] [Thread-133809 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:03:39.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T20:03:39.645 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T20:03:39.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T20:03:40.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 20, 3, 32), 12.37, 44.51, 0.0, 18.46, 19.96, 0, 0, 0, 2, 0, 0),)
2025-12-31T20:03:40.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 20:03:32
2025-12-31T20:03:40.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T20:03:40.629 [DEBUG] [Thread-133810] [transport.py] [_log()] starting thread (client mode): 0xb17774f0
2025-12-31T20:03:40.629 [DEBUG] [Thread-133810] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:03:40.648 [DEBUG] [Thread-133810] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T20:03:40.648 [INFO] [Thread-133810] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T20:03:40.652 [DEBUG] [Thread-133810] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:03:40.652 [DEBUG] [Thread-133810] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T20:03:40.652 [DEBUG] [Thread-133810] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:03:40.652 [DEBUG] [Thread-133810] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:03:40.652 [DEBUG] [Thread-133810] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:03:40.652 [DEBUG] [Thread-133810] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:03:40.652 [DEBUG] [Thread-133810] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:03:40.652 [DEBUG] [Thread-133810] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:03:40.652 [DEBUG] [Thread-133810] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:03:40.652 [DEBUG] [Thread-133810] [transport.py] [_log()] client lang: <none>
2025-12-31T20:03:40.653 [DEBUG] [Thread-133810] [transport.py] [_log()] server lang: <none>
2025-12-31T20:03:40.653 [DEBUG] [Thread-133810] [transport.py] [_log()] kex follows: False
2025-12-31T20:03:40.653 [DEBUG] [Thread-133810] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:03:40.653 [DEBUG] [Thread-133810] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:03:40.653 [DEBUG] [Thread-133810] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:03:40.653 [DEBUG] [Thread-133810] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:03:40.653 [DEBUG] [Thread-133810] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:03:40.653 [DEBUG] [Thread-133810] [transport.py] [_log()] Compression: none
2025-12-31T20:03:40.653 [DEBUG] [Thread-133810] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:03:40.664 [DEBUG] [Thread-133810] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:03:40.665 [DEBUG] [Thread-133810] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:03:40.665 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T20:03:40.666 [DEBUG] [Thread-133810] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T20:03:40.667 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:03:40.668 [DEBUG] [Thread-133810] [transport.py] [_log()] userauth is OK
2025-12-31T20:03:40.669 [DEBUG] [Thread-133810] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:03:40.669 [DEBUG] [Thread-133810] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:03:40.669 [DEBUG] [Thread-133810] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T20:03:40.669 [DEBUG] [Thread-133810] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:03:40.695 [INFO] [Thread-133810] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:03:40.696 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:03:41.186 [DEBUG] [Thread-133812 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:03:41.359 [DEBUG] [Thread-133810] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:03:41.359 [DEBUG] [Thread-133810] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:03:41.359 [DEBUG] [Thread-133810] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T20:03:41.400 [DEBUG] [Thread-133810] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:03:41.400 [DEBUG] [Thread-133810] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:03:41.404 [DEBUG] [Thread-133810] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:03:41.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:03:41.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T20:03:41.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T20:03:41.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T20:03:41.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:03:41.428 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T20:03:41.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:03:41.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:03:41.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T20:03:41.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.751875 -999.00  +20.30  10.66     48   +9.10 1 2 1 1 1   694    0 10.16 -91.06 ----- 7.7 10.7 216.8 14.5 21.4 -17.8 21.3 -17.0 21.1 -17.8 21.3 -18.9
2025-12-31T20:03:41.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T20:03:41.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T20:03:41.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.751875
2025-12-31T20:03:41.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T20:03:41.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T20:03:41.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T20:03:41.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T20:03:41.431 [DEBUG] [Thread-133810] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:03:41.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T20:03:41.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T20:03:32', tmtdew=12.37, humidity=44.51, cloud=0.0, wind=18.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-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T18:02:42.000', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T20:03:41.524 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T20:03:41.535 [DEBUG] [Thread-133814] [transport.py] [_log()] starting thread (client mode): 0xb17653f0
2025-12-31T20:03:41.535 [DEBUG] [Thread-133814] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:03:41.550 [DEBUG] [Thread-133814] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T20:03:41.550 [INFO] [Thread-133814] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T20:03:41.557 [DEBUG] [Thread-133814] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:03:41.558 [DEBUG] [Thread-133814] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T20:03:41.558 [DEBUG] [Thread-133814] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:03:41.558 [DEBUG] [Thread-133814] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:03:41.558 [DEBUG] [Thread-133814] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:03:41.558 [DEBUG] [Thread-133814] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:03:41.558 [DEBUG] [Thread-133814] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:03:41.558 [DEBUG] [Thread-133814] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:03:41.558 [DEBUG] [Thread-133814] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:03:41.558 [DEBUG] [Thread-133814] [transport.py] [_log()] client lang: <none>
2025-12-31T20:03:41.558 [DEBUG] [Thread-133814] [transport.py] [_log()] server lang: <none>
2025-12-31T20:03:41.558 [DEBUG] [Thread-133814] [transport.py] [_log()] kex follows: False
2025-12-31T20:03:41.558 [DEBUG] [Thread-133814] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:03:41.558 [DEBUG] [Thread-133814] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:03:41.558 [DEBUG] [Thread-133814] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:03:41.558 [DEBUG] [Thread-133814] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:03:41.558 [DEBUG] [Thread-133814] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:03:41.558 [DEBUG] [Thread-133814] [transport.py] [_log()] Compression: none
2025-12-31T20:03:41.558 [DEBUG] [Thread-133814] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:03:41.618 [DEBUG] [Thread-133814] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:03:41.618 [DEBUG] [Thread-133814] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:03:41.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T20:03:41.619 [DEBUG] [Thread-133814] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T20:03:41.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:03:41.674 [DEBUG] [Thread-133814] [transport.py] [_log()] userauth is OK
2025-12-31T20:03:41.674 [DEBUG] [Thread-133814] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:03:41.675 [DEBUG] [Thread-133814] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:03:41.675 [DEBUG] [Thread-133814] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T20:03:41.675 [DEBUG] [Thread-133814] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:03:41.693 [INFO] [Thread-133814] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:03:41.694 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T20:03:41.694 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:03:42.479 [DEBUG] [Thread-133814] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:03:42.480 [DEBUG] [Thread-133814] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:03:42.528 [DEBUG] [Thread-133814] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:03:42.528 [DEBUG] [Thread-133814] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:03:42.537 [DEBUG] [Thread-133814] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:03:42.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:03:42.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T20:03:42.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T20:03:42.565 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:03:42.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:03:42.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:03:42.574 [DEBUG] [Thread-133814] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:03:56.219 [DEBUG] [Thread-133816 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:04:11.268 [DEBUG] [Thread-133817 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:04:12.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T20:04:12.589 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T20:04:12.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T20:04:13.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 20, 4, 4), 12.36, 44.54, 0.0, 16.76, 19.94, 0, 0, 0, 2, 0, 0),)
2025-12-31T20:04:13.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 20:04:04
2025-12-31T20:04:13.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T20:04:13.564 [DEBUG] [Thread-133818] [transport.py] [_log()] starting thread (client mode): 0xb1775810
2025-12-31T20:04:13.564 [DEBUG] [Thread-133818] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:04:13.585 [DEBUG] [Thread-133818] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T20:04:13.585 [INFO] [Thread-133818] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T20:04:13.589 [DEBUG] [Thread-133818] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:04:13.589 [DEBUG] [Thread-133818] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T20:04:13.589 [DEBUG] [Thread-133818] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:04:13.589 [DEBUG] [Thread-133818] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:04:13.589 [DEBUG] [Thread-133818] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:04:13.589 [DEBUG] [Thread-133818] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:04:13.589 [DEBUG] [Thread-133818] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:04:13.589 [DEBUG] [Thread-133818] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:04:13.589 [DEBUG] [Thread-133818] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:04:13.589 [DEBUG] [Thread-133818] [transport.py] [_log()] client lang: <none>
2025-12-31T20:04:13.589 [DEBUG] [Thread-133818] [transport.py] [_log()] server lang: <none>
2025-12-31T20:04:13.589 [DEBUG] [Thread-133818] [transport.py] [_log()] kex follows: False
2025-12-31T20:04:13.589 [DEBUG] [Thread-133818] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:04:13.590 [DEBUG] [Thread-133818] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:04:13.590 [DEBUG] [Thread-133818] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:04:13.590 [DEBUG] [Thread-133818] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:04:13.590 [DEBUG] [Thread-133818] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:04:13.590 [DEBUG] [Thread-133818] [transport.py] [_log()] Compression: none
2025-12-31T20:04:13.590 [DEBUG] [Thread-133818] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:04:13.610 [DEBUG] [Thread-133818] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:04:13.611 [DEBUG] [Thread-133818] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:04:13.612 [DEBUG] [Thread-133818] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T20:04:13.612 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T20:04:13.613 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:04:13.614 [DEBUG] [Thread-133818] [transport.py] [_log()] userauth is OK
2025-12-31T20:04:13.614 [DEBUG] [Thread-133818] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:04:13.614 [DEBUG] [Thread-133818] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:04:13.614 [DEBUG] [Thread-133818] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T20:04:13.615 [DEBUG] [Thread-133818] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:04:13.639 [INFO] [Thread-133818] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:04:13.639 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:04:14.267 [DEBUG] [Thread-133818] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:04:14.267 [DEBUG] [Thread-133818] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:04:14.268 [DEBUG] [Thread-133818] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T20:04:14.308 [DEBUG] [Thread-133818] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:04:14.308 [DEBUG] [Thread-133818] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:04:14.312 [DEBUG] [Thread-133818] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:04:14.323 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:04:14.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T20:04:14.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T20:04:14.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T20:04:14.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:04:14.336 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T20:04:14.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:04:14.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:04:14.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T20:04:14.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.752222 -999.00  +20.20   7.38     48   +9.10 1 2 1 1 1   680    0 10.22 -88.98 ----- 12.2 7.4 184.4 17.3 21.4 -18.0 21.3 -17.2 21.0 -17.8 21.3 -19.0
2025-12-31T20:04:14.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T20:04:14.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T20:04:14.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.752222
2025-12-31T20:04:14.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T20:04:14.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T20:04:14.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T20:04:14.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T20:04:14.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T20:04:14.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T20:04:04', tmtdew=12.36, humidity=44.54, cloud=0.0, wind=16.76, temperature=19.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T18:03:11.981', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T20:04:14.339 [DEBUG] [Thread-133818] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:04:14.423 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T20:04:14.436 [DEBUG] [Thread-133821] [transport.py] [_log()] starting thread (client mode): 0xb1775ff0
2025-12-31T20:04:14.436 [DEBUG] [Thread-133821] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:04:14.452 [DEBUG] [Thread-133821] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T20:04:14.452 [INFO] [Thread-133821] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T20:04:14.460 [DEBUG] [Thread-133821] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:04:14.460 [DEBUG] [Thread-133821] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T20:04:14.460 [DEBUG] [Thread-133821] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:04:14.460 [DEBUG] [Thread-133821] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:04:14.460 [DEBUG] [Thread-133821] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:04:14.461 [DEBUG] [Thread-133821] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:04:14.461 [DEBUG] [Thread-133821] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:04:14.461 [DEBUG] [Thread-133821] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:04:14.461 [DEBUG] [Thread-133821] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:04:14.461 [DEBUG] [Thread-133821] [transport.py] [_log()] client lang: <none>
2025-12-31T20:04:14.461 [DEBUG] [Thread-133821] [transport.py] [_log()] server lang: <none>
2025-12-31T20:04:14.461 [DEBUG] [Thread-133821] [transport.py] [_log()] kex follows: False
2025-12-31T20:04:14.461 [DEBUG] [Thread-133821] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:04:14.462 [DEBUG] [Thread-133821] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:04:14.462 [DEBUG] [Thread-133821] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:04:14.462 [DEBUG] [Thread-133821] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:04:14.462 [DEBUG] [Thread-133821] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:04:14.462 [DEBUG] [Thread-133821] [transport.py] [_log()] Compression: none
2025-12-31T20:04:14.462 [DEBUG] [Thread-133821] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:04:14.518 [DEBUG] [Thread-133821] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:04:14.518 [DEBUG] [Thread-133821] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:04:14.519 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T20:04:14.520 [DEBUG] [Thread-133821] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T20:04:14.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:04:14.574 [DEBUG] [Thread-133821] [transport.py] [_log()] userauth is OK
2025-12-31T20:04:14.574 [DEBUG] [Thread-133821] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:04:14.574 [DEBUG] [Thread-133821] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:04:14.574 [DEBUG] [Thread-133821] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T20:04:14.574 [DEBUG] [Thread-133821] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:04:14.595 [INFO] [Thread-133821] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:04:14.596 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T20:04:14.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:04:15.402 [DEBUG] [Thread-133821] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:04:15.402 [DEBUG] [Thread-133821] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:04:15.450 [DEBUG] [Thread-133821] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:04:15.450 [DEBUG] [Thread-133821] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:04:15.459 [DEBUG] [Thread-133821] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:04:15.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:04:15.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T20:04:15.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T20:04:15.484 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:04:15.484 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:04:15.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:04:15.492 [DEBUG] [Thread-133821] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:04:26.302 [DEBUG] [Thread-133823 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:04:36.232 [DEBUG] [Thread-133824 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:04:39.833 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:04:39.834 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:04:41.340 [DEBUG] [Thread-133825 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:04:45.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T20:04:45.497 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T20:04:45.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T20:04:46.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 20, 4, 36), 12.13, 45.62, 0.0, 19.99, 19.86, 0, 0, 0, 2, 0, 0),)
2025-12-31T20:04:46.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 20:04:36
2025-12-31T20:04:46.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T20:04:46.482 [DEBUG] [Thread-133826] [transport.py] [_log()] starting thread (client mode): 0xb6bb36a0
2025-12-31T20:04:46.482 [DEBUG] [Thread-133826] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:04:46.496 [DEBUG] [Thread-133826] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T20:04:46.496 [INFO] [Thread-133826] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T20:04:46.500 [DEBUG] [Thread-133826] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:04:46.500 [DEBUG] [Thread-133826] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T20:04:46.500 [DEBUG] [Thread-133826] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:04:46.500 [DEBUG] [Thread-133826] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:04:46.500 [DEBUG] [Thread-133826] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:04:46.500 [DEBUG] [Thread-133826] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:04:46.500 [DEBUG] [Thread-133826] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:04:46.500 [DEBUG] [Thread-133826] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:04:46.500 [DEBUG] [Thread-133826] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:04:46.500 [DEBUG] [Thread-133826] [transport.py] [_log()] client lang: <none>
2025-12-31T20:04:46.500 [DEBUG] [Thread-133826] [transport.py] [_log()] server lang: <none>
2025-12-31T20:04:46.500 [DEBUG] [Thread-133826] [transport.py] [_log()] kex follows: False
2025-12-31T20:04:46.500 [DEBUG] [Thread-133826] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:04:46.500 [DEBUG] [Thread-133826] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:04:46.500 [DEBUG] [Thread-133826] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:04:46.500 [DEBUG] [Thread-133826] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:04:46.500 [DEBUG] [Thread-133826] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:04:46.500 [DEBUG] [Thread-133826] [transport.py] [_log()] Compression: none
2025-12-31T20:04:46.500 [DEBUG] [Thread-133826] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:04:46.516 [DEBUG] [Thread-133826] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:04:46.517 [DEBUG] [Thread-133826] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:04:46.517 [DEBUG] [Thread-133826] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T20:04:46.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T20:04:46.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:04:46.519 [DEBUG] [Thread-133826] [transport.py] [_log()] userauth is OK
2025-12-31T20:04:46.519 [DEBUG] [Thread-133826] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:04:46.519 [DEBUG] [Thread-133826] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:04:46.519 [DEBUG] [Thread-133826] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T20:04:46.519 [DEBUG] [Thread-133826] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:04:46.551 [INFO] [Thread-133826] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:04:46.551 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:04:47.196 [DEBUG] [Thread-133826] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:04:47.196 [DEBUG] [Thread-133826] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:04:47.197 [DEBUG] [Thread-133826] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T20:04:47.238 [DEBUG] [Thread-133826] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:04:47.238 [DEBUG] [Thread-133826] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:04:47.241 [DEBUG] [Thread-133826] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:04:47.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:04:47.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T20:04:47.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T20:04:47.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T20:04:47.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:04:47.263 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T20:04:47.263 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:04:47.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:04:47.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T20:04:47.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.752917 -999.00  +20.20  10.63     49   +9.20 1 2 1 1 1   650    0 9.68 -97.91 ----- 13.6 10.6 227.7 18.4 21.2 -17.7 21.2 -16.8 21.0 -17.4 21.2 -18.8
2025-12-31T20:04:47.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T20:04:47.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T20:04:47.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.752917
2025-12-31T20:04:47.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T20:04:47.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T20:04:47.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T20:04:47.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T20:04:47.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T20:04:47.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T20:04:36', tmtdew=12.13, humidity=45.62, cloud=0.0, wind=19.99, temperature=19.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T18:04:12.029', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T20:04:47.266 [DEBUG] [Thread-133826] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:04:47.349 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T20:04:56.377 [DEBUG] [Thread-133829 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:05:11.422 [DEBUG] [Thread-133830 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:05:26.461 [DEBUG] [Thread-133831 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:05:36.310 [DEBUG] [Thread-133832 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:05:41.497 [DEBUG] [Thread-133833 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:05:49.328 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:05:49.329 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:05:56.527 [DEBUG] [Thread-133834 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:06:11.568 [DEBUG] [Thread-133835 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:06:26.599 [DEBUG] [Thread-133836 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:06:36.379 [DEBUG] [Thread-133837 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:06:41.628 [DEBUG] [Thread-133838 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:06:54.172 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:06:54.173 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:06:56.669 [DEBUG] [Thread-133839 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:06:59.541 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-12-31T20:07:11.703 [DEBUG] [Thread-133840 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:07:26.739 [DEBUG] [Thread-133841 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:07:29.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T20:07:29.542 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T20:07:29.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T20:07:30.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 20, 7, 16), 11.3, 47.9, 0.0, 20.38, 19.61, 0, 0, 0, 2, 0, 0),)
2025-12-31T20:07:30.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 20:07:16
2025-12-31T20:07:30.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T20:07:30.532 [DEBUG] [Thread-133842] [transport.py] [_log()] starting thread (client mode): 0xb95d54e0
2025-12-31T20:07:30.532 [DEBUG] [Thread-133842] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:07:30.552 [DEBUG] [Thread-133842] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T20:07:30.552 [INFO] [Thread-133842] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T20:07:30.555 [DEBUG] [Thread-133842] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:07:30.555 [DEBUG] [Thread-133842] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T20:07:30.555 [DEBUG] [Thread-133842] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:07:30.555 [DEBUG] [Thread-133842] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:07:30.555 [DEBUG] [Thread-133842] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:07:30.555 [DEBUG] [Thread-133842] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:07:30.555 [DEBUG] [Thread-133842] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:07:30.555 [DEBUG] [Thread-133842] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:07:30.555 [DEBUG] [Thread-133842] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:07:30.555 [DEBUG] [Thread-133842] [transport.py] [_log()] client lang: <none>
2025-12-31T20:07:30.555 [DEBUG] [Thread-133842] [transport.py] [_log()] server lang: <none>
2025-12-31T20:07:30.555 [DEBUG] [Thread-133842] [transport.py] [_log()] kex follows: False
2025-12-31T20:07:30.555 [DEBUG] [Thread-133842] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:07:30.555 [DEBUG] [Thread-133842] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:07:30.555 [DEBUG] [Thread-133842] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:07:30.555 [DEBUG] [Thread-133842] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:07:30.555 [DEBUG] [Thread-133842] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:07:30.555 [DEBUG] [Thread-133842] [transport.py] [_log()] Compression: none
2025-12-31T20:07:30.555 [DEBUG] [Thread-133842] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:07:30.573 [DEBUG] [Thread-133842] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:07:30.574 [DEBUG] [Thread-133842] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:07:30.574 [DEBUG] [Thread-133842] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T20:07:30.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T20:07:30.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:07:30.576 [DEBUG] [Thread-133842] [transport.py] [_log()] userauth is OK
2025-12-31T20:07:30.576 [DEBUG] [Thread-133842] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:07:30.577 [DEBUG] [Thread-133842] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:07:30.577 [DEBUG] [Thread-133842] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T20:07:30.577 [DEBUG] [Thread-133842] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:07:30.595 [INFO] [Thread-133842] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:07:30.596 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:07:31.246 [DEBUG] [Thread-133842] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:07:31.246 [DEBUG] [Thread-133842] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:07:31.247 [DEBUG] [Thread-133842] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T20:07:31.287 [DEBUG] [Thread-133842] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:07:31.287 [DEBUG] [Thread-133842] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:07:31.290 [DEBUG] [Thread-133842] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:07:31.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:07:31.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T20:07:31.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T20:07:31.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T20:07:31.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:07:31.314 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T20:07:31.314 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:07:31.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:07:31.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T20:07:31.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.754653 -999.00  +19.80  13.32     52   +9.80 1 2 1 1 1   563    0 8.52 -132.76 ----- 15.3 13.3 204.6 15.7 21.1 -17.4 21.0 -16.7 20.7 -17.1 20.9 -18.4
2025-12-31T20:07:31.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T20:07:31.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T20:07:31.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.754653
2025-12-31T20:07:31.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T20:07:31.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T20:07:31.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T20:07:31.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T20:07:31.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T20:07:31.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T20:07:16', tmtdew=11.3, humidity=47.9, cloud=0.0, wind=20.38, temperature=19.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T18:06:42.019', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T20:07:31.316 [DEBUG] [Thread-133842] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:07:31.397 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T20:07:31.409 [DEBUG] [Thread-133845] [transport.py] [_log()] starting thread (client mode): 0xb6bb29e0
2025-12-31T20:07:31.409 [DEBUG] [Thread-133845] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:07:31.424 [DEBUG] [Thread-133845] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T20:07:31.425 [INFO] [Thread-133845] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T20:07:31.432 [DEBUG] [Thread-133845] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:07:31.433 [DEBUG] [Thread-133845] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T20:07:31.433 [DEBUG] [Thread-133845] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:07:31.433 [DEBUG] [Thread-133845] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:07:31.433 [DEBUG] [Thread-133845] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:07:31.433 [DEBUG] [Thread-133845] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:07:31.433 [DEBUG] [Thread-133845] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:07:31.433 [DEBUG] [Thread-133845] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:07:31.433 [DEBUG] [Thread-133845] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:07:31.434 [DEBUG] [Thread-133845] [transport.py] [_log()] client lang: <none>
2025-12-31T20:07:31.434 [DEBUG] [Thread-133845] [transport.py] [_log()] server lang: <none>
2025-12-31T20:07:31.434 [DEBUG] [Thread-133845] [transport.py] [_log()] kex follows: False
2025-12-31T20:07:31.434 [DEBUG] [Thread-133845] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:07:31.434 [DEBUG] [Thread-133845] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:07:31.434 [DEBUG] [Thread-133845] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:07:31.434 [DEBUG] [Thread-133845] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:07:31.434 [DEBUG] [Thread-133845] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:07:31.435 [DEBUG] [Thread-133845] [transport.py] [_log()] Compression: none
2025-12-31T20:07:31.435 [DEBUG] [Thread-133845] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:07:31.493 [DEBUG] [Thread-133845] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:07:31.493 [DEBUG] [Thread-133845] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:07:31.494 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T20:07:31.494 [DEBUG] [Thread-133845] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T20:07:31.495 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:07:31.552 [DEBUG] [Thread-133845] [transport.py] [_log()] userauth is OK
2025-12-31T20:07:31.553 [DEBUG] [Thread-133845] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:07:31.553 [DEBUG] [Thread-133845] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:07:31.553 [DEBUG] [Thread-133845] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T20:07:31.553 [DEBUG] [Thread-133845] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:07:31.572 [INFO] [Thread-133845] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:07:31.573 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T20:07:31.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:07:32.482 [DEBUG] [Thread-133845] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:07:32.482 [DEBUG] [Thread-133845] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:07:32.530 [DEBUG] [Thread-133845] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:07:32.530 [DEBUG] [Thread-133845] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:07:32.539 [DEBUG] [Thread-133845] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:07:32.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:07:32.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-12-31T20:07: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-12-31T20:07:32.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:07:32.568 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:07:32.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:07:32.576 [DEBUG] [Thread-133845] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:07:36.441 [DEBUG] [Thread-133847 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:07:41.774 [DEBUG] [Thread-133848 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:07:56.815 [DEBUG] [Thread-133849 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:07:59.480 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:07:59.481 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:08:02.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T20:08:02.599 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T20:08:02.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T20:08:03.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 20, 7, 48), 11.05, 48.73, 0.0, 17.22, 19.56, 0, 0, 0, 2, 0, 0),)
2025-12-31T20:08:03.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 20:07:48
2025-12-31T20:08:03.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T20:08:03.585 [DEBUG] [Thread-133850] [transport.py] [_log()] starting thread (client mode): 0xb95d48e0
2025-12-31T20:08:03.585 [DEBUG] [Thread-133850] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:08:03.605 [DEBUG] [Thread-133850] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T20:08:03.605 [INFO] [Thread-133850] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T20:08:03.609 [DEBUG] [Thread-133850] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:08:03.609 [DEBUG] [Thread-133850] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T20:08:03.609 [DEBUG] [Thread-133850] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:08:03.609 [DEBUG] [Thread-133850] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:08:03.609 [DEBUG] [Thread-133850] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:08:03.609 [DEBUG] [Thread-133850] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:08:03.609 [DEBUG] [Thread-133850] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:08:03.609 [DEBUG] [Thread-133850] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:08:03.609 [DEBUG] [Thread-133850] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:08:03.609 [DEBUG] [Thread-133850] [transport.py] [_log()] client lang: <none>
2025-12-31T20:08:03.609 [DEBUG] [Thread-133850] [transport.py] [_log()] server lang: <none>
2025-12-31T20:08:03.610 [DEBUG] [Thread-133850] [transport.py] [_log()] kex follows: False
2025-12-31T20:08:03.610 [DEBUG] [Thread-133850] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:08:03.610 [DEBUG] [Thread-133850] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:08:03.610 [DEBUG] [Thread-133850] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:08:03.610 [DEBUG] [Thread-133850] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:08:03.610 [DEBUG] [Thread-133850] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:08:03.610 [DEBUG] [Thread-133850] [transport.py] [_log()] Compression: none
2025-12-31T20:08:03.610 [DEBUG] [Thread-133850] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:08:03.628 [DEBUG] [Thread-133850] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:08:03.628 [DEBUG] [Thread-133850] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:08:03.629 [DEBUG] [Thread-133850] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T20:08:03.629 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T20:08:03.630 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:08:03.630 [DEBUG] [Thread-133850] [transport.py] [_log()] userauth is OK
2025-12-31T20:08:03.631 [DEBUG] [Thread-133850] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:08:03.631 [DEBUG] [Thread-133850] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:08:03.631 [DEBUG] [Thread-133850] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T20:08:03.631 [DEBUG] [Thread-133850] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:08:03.644 [INFO] [Thread-133850] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:08:03.645 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:08:04.406 [DEBUG] [Thread-133850] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:08:04.406 [DEBUG] [Thread-133850] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:08:04.407 [DEBUG] [Thread-133850] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T20:08:04.447 [DEBUG] [Thread-133850] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:08:04.447 [DEBUG] [Thread-133850] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:08:04.449 [DEBUG] [Thread-133850] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:08:04.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:08:04.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T20:08:04.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T20:08:04.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T20:08:04.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:08:04.470 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T20:08:04.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:08:04.470 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:08:04.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T20:08:04.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.755000 -999.00  +19.70  15.95     52   +9.80 1 2 1 1 1   544    0 8.32 -131.62 ----- 15.5 15.9 192.4 20.6 21.0 -17.5 20.9 -16.4 20.7 -17.2 20.9 -18.2
2025-12-31T20:08:04.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T20:08:04.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T20:08:04.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.755000
2025-12-31T20:08:04.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T20:08:04.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T20:08:04.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T20:08:04.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T20:08:04.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T20:08:04.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T20:07:48', tmtdew=11.05, humidity=48.73, cloud=0.0, wind=17.22, temperature=19.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T18:07:12.000', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T20:08:04.473 [DEBUG] [Thread-133850] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:08:04.556 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T20:08:04.570 [DEBUG] [Thread-133853] [transport.py] [_log()] starting thread (client mode): 0xb6ba0c70
2025-12-31T20:08:04.570 [DEBUG] [Thread-133853] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:08:04.585 [DEBUG] [Thread-133853] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T20:08:04.585 [INFO] [Thread-133853] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T20:08:04.592 [DEBUG] [Thread-133853] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:08:04.593 [DEBUG] [Thread-133853] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T20:08:04.593 [DEBUG] [Thread-133853] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:08:04.593 [DEBUG] [Thread-133853] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:08:04.593 [DEBUG] [Thread-133853] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:08:04.593 [DEBUG] [Thread-133853] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:08:04.593 [DEBUG] [Thread-133853] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:08:04.593 [DEBUG] [Thread-133853] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:08:04.593 [DEBUG] [Thread-133853] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:08:04.593 [DEBUG] [Thread-133853] [transport.py] [_log()] client lang: <none>
2025-12-31T20:08:04.593 [DEBUG] [Thread-133853] [transport.py] [_log()] server lang: <none>
2025-12-31T20:08:04.593 [DEBUG] [Thread-133853] [transport.py] [_log()] kex follows: False
2025-12-31T20:08:04.593 [DEBUG] [Thread-133853] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:08:04.593 [DEBUG] [Thread-133853] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:08:04.593 [DEBUG] [Thread-133853] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:08:04.593 [DEBUG] [Thread-133853] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:08:04.593 [DEBUG] [Thread-133853] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:08:04.593 [DEBUG] [Thread-133853] [transport.py] [_log()] Compression: none
2025-12-31T20:08:04.594 [DEBUG] [Thread-133853] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:08:04.651 [DEBUG] [Thread-133853] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:08:04.652 [DEBUG] [Thread-133853] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:08:04.653 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T20:08:04.653 [DEBUG] [Thread-133853] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T20:08:04.654 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:08:04.707 [DEBUG] [Thread-133853] [transport.py] [_log()] userauth is OK
2025-12-31T20:08:04.707 [DEBUG] [Thread-133853] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:08:04.707 [DEBUG] [Thread-133853] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:08:04.707 [DEBUG] [Thread-133853] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T20:08:04.707 [DEBUG] [Thread-133853] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:08:04.721 [INFO] [Thread-133853] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:08: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-12-31T20:08:04.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:08:05.566 [DEBUG] [Thread-133853] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:08:05.566 [DEBUG] [Thread-133853] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:08:05.613 [DEBUG] [Thread-133853] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:08:05.614 [DEBUG] [Thread-133853] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:08:05.622 [DEBUG] [Thread-133853] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:08:05.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:08:05.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T20:08:05.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T20:08:05.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:08:05.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:08:05.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:08:05.656 [DEBUG] [Thread-133853] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:08:11.850 [DEBUG] [Thread-133855 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:08:26.894 [DEBUG] [Thread-133856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:08:35.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T20:08:35.678 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T20:08: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-12-31T20:08:36.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 20, 8, 20), 11.0, 48.88, 0.0, 18.23, 19.52, 0, 0, 0, 2, 0, 0),)
2025-12-31T20:08:36.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 20:08:20
2025-12-31T20:08:36.495 [DEBUG] [Thread-133857 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:08:36.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T20:08:36.662 [DEBUG] [Thread-133858] [transport.py] [_log()] starting thread (client mode): 0xb6bb0c70
2025-12-31T20:08:36.662 [DEBUG] [Thread-133858] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:08:36.682 [DEBUG] [Thread-133858] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T20:08:36.682 [INFO] [Thread-133858] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T20:08:36.685 [DEBUG] [Thread-133858] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:08:36.685 [DEBUG] [Thread-133858] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T20:08:36.685 [DEBUG] [Thread-133858] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:08:36.685 [DEBUG] [Thread-133858] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:08:36.685 [DEBUG] [Thread-133858] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:08:36.685 [DEBUG] [Thread-133858] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:08:36.685 [DEBUG] [Thread-133858] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:08:36.685 [DEBUG] [Thread-133858] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:08:36.685 [DEBUG] [Thread-133858] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:08:36.685 [DEBUG] [Thread-133858] [transport.py] [_log()] client lang: <none>
2025-12-31T20:08:36.685 [DEBUG] [Thread-133858] [transport.py] [_log()] server lang: <none>
2025-12-31T20:08:36.685 [DEBUG] [Thread-133858] [transport.py] [_log()] kex follows: False
2025-12-31T20:08:36.685 [DEBUG] [Thread-133858] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:08:36.685 [DEBUG] [Thread-133858] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:08:36.686 [DEBUG] [Thread-133858] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:08:36.686 [DEBUG] [Thread-133858] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:08:36.686 [DEBUG] [Thread-133858] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:08:36.686 [DEBUG] [Thread-133858] [transport.py] [_log()] Compression: none
2025-12-31T20:08:36.686 [DEBUG] [Thread-133858] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:08:36.695 [DEBUG] [Thread-133858] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:08:36.695 [DEBUG] [Thread-133858] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:08:36.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T20:08:36.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:08:36.697 [DEBUG] [Thread-133858] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T20:08:36.698 [DEBUG] [Thread-133858] [transport.py] [_log()] userauth is OK
2025-12-31T20:08:36.698 [DEBUG] [Thread-133858] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:08:36.698 [DEBUG] [Thread-133858] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:08:36.698 [DEBUG] [Thread-133858] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T20:08:36.699 [DEBUG] [Thread-133858] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:08:36.723 [INFO] [Thread-133858] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:08:36.724 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:08:37.357 [DEBUG] [Thread-133858] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:08:37.357 [DEBUG] [Thread-133858] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:08:37.357 [DEBUG] [Thread-133858] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T20:08:37.398 [DEBUG] [Thread-133858] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:08:37.398 [DEBUG] [Thread-133858] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:08:37.400 [DEBUG] [Thread-133858] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:08:37.412 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:08:37.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T20:08:37.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T20:08:37.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T20:08:37.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:08:37.422 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T20:08:37.422 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:08:37.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:08:37.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T20:08:37.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.755347 -999.00  +19.70  12.04     52   +9.80 1 2 1 1 1   525    0 8.26 -133.55 ----- 6.4 12.0 210.3 21.1 20.9 -17.2 20.9 -16.2 20.6 -16.8 20.9 -18.0
2025-12-31T20:08:37.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T20:08:37.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T20:08:37.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.755347
2025-12-31T20:08:37.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T20:08:37.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T20:08:37.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T20:08:37.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T20:08:37.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T20:08:37.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T20:08:20', tmtdew=11.0, humidity=48.88, cloud=0.0, wind=18.23, temperature=19.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T18:07:41.981', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T20:08:37.424 [DEBUG] [Thread-133858] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:08:37.506 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T20:08:37.518 [DEBUG] [Thread-133861] [transport.py] [_log()] starting thread (client mode): 0xb6bbf880
2025-12-31T20:08:37.518 [DEBUG] [Thread-133861] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:08:37.538 [DEBUG] [Thread-133861] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T20:08:37.538 [INFO] [Thread-133861] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T20:08:37.546 [DEBUG] [Thread-133861] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:08:37.546 [DEBUG] [Thread-133861] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T20:08:37.546 [DEBUG] [Thread-133861] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:08:37.546 [DEBUG] [Thread-133861] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:08:37.546 [DEBUG] [Thread-133861] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:08:37.546 [DEBUG] [Thread-133861] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:08:37.546 [DEBUG] [Thread-133861] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:08:37.546 [DEBUG] [Thread-133861] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:08:37.546 [DEBUG] [Thread-133861] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:08:37.546 [DEBUG] [Thread-133861] [transport.py] [_log()] client lang: <none>
2025-12-31T20:08:37.547 [DEBUG] [Thread-133861] [transport.py] [_log()] server lang: <none>
2025-12-31T20:08:37.547 [DEBUG] [Thread-133861] [transport.py] [_log()] kex follows: False
2025-12-31T20:08:37.547 [DEBUG] [Thread-133861] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:08:37.547 [DEBUG] [Thread-133861] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:08:37.547 [DEBUG] [Thread-133861] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:08:37.547 [DEBUG] [Thread-133861] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:08:37.547 [DEBUG] [Thread-133861] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:08:37.547 [DEBUG] [Thread-133861] [transport.py] [_log()] Compression: none
2025-12-31T20:08:37.547 [DEBUG] [Thread-133861] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:08:37.603 [DEBUG] [Thread-133861] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:08:37.603 [DEBUG] [Thread-133861] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:08:37.604 [DEBUG] [Thread-133861] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T20:08:37.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T20:08:37.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:08:37.659 [DEBUG] [Thread-133861] [transport.py] [_log()] userauth is OK
2025-12-31T20:08:37.659 [DEBUG] [Thread-133861] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:08:37.660 [DEBUG] [Thread-133861] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:08:37.660 [DEBUG] [Thread-133861] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T20:08:37.660 [DEBUG] [Thread-133861] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:08:37.679 [INFO] [Thread-133861] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:08:37.680 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T20:08:37.681 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:08:38.508 [DEBUG] [Thread-133861] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:08:38.508 [DEBUG] [Thread-133861] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:08:38.556 [DEBUG] [Thread-133861] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:08:38.556 [DEBUG] [Thread-133861] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:08:38.565 [DEBUG] [Thread-133861] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:08:38.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:08:38.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T20:08:38.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T20:08:38.593 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:08:38.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:08:38.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:08:38.602 [DEBUG] [Thread-133861] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:08:41.927 [DEBUG] [Thread-133863 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:08:56.972 [DEBUG] [Thread-133864 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:09:03.765 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:09:03.766 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:09:08.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T20:09:08.607 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T20:09:08.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T20:09:09.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 20, 8, 52), 10.88, 49.1, 0.0, 18.33, 19.43, 0, 0, 0, 2, 0, 0),)
2025-12-31T20:09:09.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 20:08:52
2025-12-31T20:09:09.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T20:09:09.586 [DEBUG] [Thread-133865] [transport.py] [_log()] starting thread (client mode): 0xb95d7df0
2025-12-31T20:09:09.587 [DEBUG] [Thread-133865] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:09:09.607 [DEBUG] [Thread-133865] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T20:09:09.607 [INFO] [Thread-133865] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T20:09:09.610 [DEBUG] [Thread-133865] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:09:09.611 [DEBUG] [Thread-133865] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T20:09:09.611 [DEBUG] [Thread-133865] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:09:09.611 [DEBUG] [Thread-133865] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:09:09.611 [DEBUG] [Thread-133865] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:09:09.611 [DEBUG] [Thread-133865] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:09:09.611 [DEBUG] [Thread-133865] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:09:09.611 [DEBUG] [Thread-133865] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:09:09.611 [DEBUG] [Thread-133865] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:09:09.611 [DEBUG] [Thread-133865] [transport.py] [_log()] client lang: <none>
2025-12-31T20:09:09.611 [DEBUG] [Thread-133865] [transport.py] [_log()] server lang: <none>
2025-12-31T20:09:09.611 [DEBUG] [Thread-133865] [transport.py] [_log()] kex follows: False
2025-12-31T20:09:09.611 [DEBUG] [Thread-133865] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:09:09.611 [DEBUG] [Thread-133865] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:09:09.611 [DEBUG] [Thread-133865] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:09:09.611 [DEBUG] [Thread-133865] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:09:09.611 [DEBUG] [Thread-133865] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:09:09.611 [DEBUG] [Thread-133865] [transport.py] [_log()] Compression: none
2025-12-31T20:09:09.611 [DEBUG] [Thread-133865] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:09:09.626 [DEBUG] [Thread-133865] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:09:09.627 [DEBUG] [Thread-133865] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:09:09.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T20:09:09.628 [DEBUG] [Thread-133865] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T20:09:09.629 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:09:09.630 [DEBUG] [Thread-133865] [transport.py] [_log()] userauth is OK
2025-12-31T20:09:09.630 [DEBUG] [Thread-133865] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:09:09.630 [DEBUG] [Thread-133865] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:09:09.630 [DEBUG] [Thread-133865] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T20:09:09.630 [DEBUG] [Thread-133865] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:09:09.666 [INFO] [Thread-133865] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:09:09.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:09:10.441 [DEBUG] [Thread-133865] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:09:10.441 [DEBUG] [Thread-133865] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:09:10.441 [DEBUG] [Thread-133865] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T20:09:10.482 [DEBUG] [Thread-133865] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:09:10.482 [DEBUG] [Thread-133865] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:09:10.486 [DEBUG] [Thread-133865] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:09:10.498 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:09:10.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T20:09:10.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T20:09:10.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T20:09:10.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:09:10.516 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T20:09:10.516 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:09:10.516 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:09:10.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T20:09:10.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.755694 -999.00  +19.60  12.64     53   +9.90 1 2 1 1 1   505    0 7.85 -141.05 ----- 11.1 12.6 216.6 23.6 20.9 -17.3 20.8 -16.5 20.6 -16.8 20.8 -17.9
2025-12-31T20:09:10.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T20:09:10.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T20:09:10.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.755694
2025-12-31T20:09:10.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T20:09:10.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T20:09:10.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T20:09:10.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T20:09:10.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T20:09:10.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T20:08:52', tmtdew=10.88, humidity=49.1, cloud=0.0, wind=18.33, temperature=19.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T18:08:11.962', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T20:09:10.519 [DEBUG] [Thread-133865] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:09:10.604 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T20:09:10.616 [DEBUG] [Thread-133868] [transport.py] [_log()] starting thread (client mode): 0xb95931f0
2025-12-31T20:09:10.617 [DEBUG] [Thread-133868] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:09:10.631 [DEBUG] [Thread-133868] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T20:09:10.631 [INFO] [Thread-133868] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T20:09:10.641 [DEBUG] [Thread-133868] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:09:10.641 [DEBUG] [Thread-133868] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T20:09:10.641 [DEBUG] [Thread-133868] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:09:10.641 [DEBUG] [Thread-133868] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:09:10.641 [DEBUG] [Thread-133868] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:09:10.642 [DEBUG] [Thread-133868] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:09:10.642 [DEBUG] [Thread-133868] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:09:10.642 [DEBUG] [Thread-133868] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:09:10.642 [DEBUG] [Thread-133868] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:09:10.642 [DEBUG] [Thread-133868] [transport.py] [_log()] client lang: <none>
2025-12-31T20:09:10.642 [DEBUG] [Thread-133868] [transport.py] [_log()] server lang: <none>
2025-12-31T20:09:10.642 [DEBUG] [Thread-133868] [transport.py] [_log()] kex follows: False
2025-12-31T20:09:10.642 [DEBUG] [Thread-133868] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:09:10.642 [DEBUG] [Thread-133868] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:09:10.642 [DEBUG] [Thread-133868] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:09:10.642 [DEBUG] [Thread-133868] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:09:10.642 [DEBUG] [Thread-133868] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:09:10.642 [DEBUG] [Thread-133868] [transport.py] [_log()] Compression: none
2025-12-31T20:09:10.642 [DEBUG] [Thread-133868] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:09:10.699 [DEBUG] [Thread-133868] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:09:10.699 [DEBUG] [Thread-133868] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:09:10.700 [DEBUG] [Thread-133868] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T20:09:10.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T20:09:10.701 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:09:10.755 [DEBUG] [Thread-133868] [transport.py] [_log()] userauth is OK
2025-12-31T20:09:10.755 [DEBUG] [Thread-133868] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:09:10.755 [DEBUG] [Thread-133868] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:09:10.756 [DEBUG] [Thread-133868] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T20:09:10.756 [DEBUG] [Thread-133868] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:09:10.780 [INFO] [Thread-133868] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:09:10.781 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T20:09:10.781 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:09:11.581 [DEBUG] [Thread-133868] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:09:11.581 [DEBUG] [Thread-133868] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:09:11.629 [DEBUG] [Thread-133868] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:09:11.629 [DEBUG] [Thread-133868] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:09:11.639 [DEBUG] [Thread-133868] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:09:11.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:09:11.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T20:09:11.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T20:09:11.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:09:11.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:09:11.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:09:11.675 [DEBUG] [Thread-133868] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:09:12.005 [DEBUG] [Thread-133870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:09:27.056 [DEBUG] [Thread-133871 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:09:36.550 [DEBUG] [Thread-133872 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:09:41.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T20:09:41.697 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T20:09:41.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T20:09:42.090 [DEBUG] [Thread-133873 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:09:42.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 20, 9, 24), 10.83, 49.26, 0.0, 21.4, 19.38, 0, 0, 0, 2, 0, 0),)
2025-12-31T20:09:42.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 20:09:24
2025-12-31T20:09:42.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T20:09:42.736 [DEBUG] [Thread-133874] [transport.py] [_log()] starting thread (client mode): 0xb9558490
2025-12-31T20:09:42.736 [DEBUG] [Thread-133874] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:09:42.758 [DEBUG] [Thread-133874] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T20:09:42.758 [INFO] [Thread-133874] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T20:09:42.762 [DEBUG] [Thread-133874] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:09:42.762 [DEBUG] [Thread-133874] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T20:09:42.762 [DEBUG] [Thread-133874] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:09:42.762 [DEBUG] [Thread-133874] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:09:42.762 [DEBUG] [Thread-133874] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:09:42.762 [DEBUG] [Thread-133874] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:09:42.762 [DEBUG] [Thread-133874] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:09:42.762 [DEBUG] [Thread-133874] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:09:42.762 [DEBUG] [Thread-133874] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:09:42.762 [DEBUG] [Thread-133874] [transport.py] [_log()] client lang: <none>
2025-12-31T20:09:42.762 [DEBUG] [Thread-133874] [transport.py] [_log()] server lang: <none>
2025-12-31T20:09:42.762 [DEBUG] [Thread-133874] [transport.py] [_log()] kex follows: False
2025-12-31T20:09:42.762 [DEBUG] [Thread-133874] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:09:42.762 [DEBUG] [Thread-133874] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:09:42.762 [DEBUG] [Thread-133874] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:09:42.762 [DEBUG] [Thread-133874] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:09:42.762 [DEBUG] [Thread-133874] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:09:42.762 [DEBUG] [Thread-133874] [transport.py] [_log()] Compression: none
2025-12-31T20:09:42.762 [DEBUG] [Thread-133874] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:09:42.777 [DEBUG] [Thread-133874] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:09:42.777 [DEBUG] [Thread-133874] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:09:42.777 [DEBUG] [Thread-133874] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T20:09:42.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T20:09:42.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:09:42.778 [DEBUG] [Thread-133874] [transport.py] [_log()] userauth is OK
2025-12-31T20:09:42.778 [DEBUG] [Thread-133874] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:09:42.778 [DEBUG] [Thread-133874] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:09:42.778 [DEBUG] [Thread-133874] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T20:09:42.778 [DEBUG] [Thread-133874] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:09:42.788 [INFO] [Thread-133874] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:09:42.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:09:43.454 [DEBUG] [Thread-133874] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:09:43.454 [DEBUG] [Thread-133874] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:09:43.454 [DEBUG] [Thread-133874] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T20:09:43.496 [DEBUG] [Thread-133874] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:09:43.496 [DEBUG] [Thread-133874] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:09:43.498 [DEBUG] [Thread-133874] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:09:43.510 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:09:43.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T20:09:43.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T20:09:43.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T20:09:43.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:09:43.517 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T20:09:43.517 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:09:43.517 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:09:43.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T20:09:43.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.756389 -999.00  +19.60  12.33     53   +9.90 1 2 1 1 1   466    0 6.86 -170.71 ----- 10.9 12.3 208.9 26.1 20.8 -17.2 20.8 -16.3 20.5 -16.8 20.8 -18.0
2025-12-31T20:09:43.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T20:09:43.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T20:09:43.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.756389
2025-12-31T20:09:43.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T20:09:43.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T20:09:43.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T20:09:43.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T20:09:43.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T20:09:43.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T20:09:24', tmtdew=10.83, humidity=49.26, cloud=0.0, wind=21.4, temperature=19.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T18:09:12.010', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T20:09:43.518 [DEBUG] [Thread-133874] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:09:43.592 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T20:09:43.603 [DEBUG] [Thread-133877] [transport.py] [_log()] starting thread (client mode): 0xb17470d0
2025-12-31T20:09:43.603 [DEBUG] [Thread-133877] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:09:43.620 [DEBUG] [Thread-133877] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T20:09:43.620 [INFO] [Thread-133877] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T20:09:43.628 [DEBUG] [Thread-133877] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:09:43.628 [DEBUG] [Thread-133877] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T20:09:43.628 [DEBUG] [Thread-133877] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:09:43.628 [DEBUG] [Thread-133877] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:09:43.628 [DEBUG] [Thread-133877] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:09:43.628 [DEBUG] [Thread-133877] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:09:43.628 [DEBUG] [Thread-133877] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:09:43.628 [DEBUG] [Thread-133877] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:09:43.628 [DEBUG] [Thread-133877] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:09:43.628 [DEBUG] [Thread-133877] [transport.py] [_log()] client lang: <none>
2025-12-31T20:09:43.628 [DEBUG] [Thread-133877] [transport.py] [_log()] server lang: <none>
2025-12-31T20:09:43.628 [DEBUG] [Thread-133877] [transport.py] [_log()] kex follows: False
2025-12-31T20:09:43.628 [DEBUG] [Thread-133877] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:09:43.628 [DEBUG] [Thread-133877] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:09:43.628 [DEBUG] [Thread-133877] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:09:43.628 [DEBUG] [Thread-133877] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:09:43.628 [DEBUG] [Thread-133877] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:09:43.628 [DEBUG] [Thread-133877] [transport.py] [_log()] Compression: none
2025-12-31T20:09:43.628 [DEBUG] [Thread-133877] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:09:43.685 [DEBUG] [Thread-133877] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:09:43.685 [DEBUG] [Thread-133877] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:09:43.685 [DEBUG] [Thread-133877] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T20:09:43.685 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T20:09:43.685 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:09:43.742 [DEBUG] [Thread-133877] [transport.py] [_log()] userauth is OK
2025-12-31T20:09:43.742 [DEBUG] [Thread-133877] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:09:43.742 [DEBUG] [Thread-133877] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:09:43.742 [DEBUG] [Thread-133877] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T20:09:43.742 [DEBUG] [Thread-133877] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:09:43.759 [INFO] [Thread-133877] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:09:43.760 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T20:09:43.760 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:09:44.660 [DEBUG] [Thread-133877] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:09:44.660 [DEBUG] [Thread-133877] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:09:44.708 [DEBUG] [Thread-133877] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:09:44.708 [DEBUG] [Thread-133877] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:09:44.717 [DEBUG] [Thread-133877] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:09:44.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:09:44.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T20:09:44.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-12-31T20:09:44.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:09:44.741 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:09:44.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:09:44.749 [DEBUG] [Thread-133877] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:09:57.120 [DEBUG] [Thread-133879 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:10:08.663 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:10:08.664 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:10:12.162 [DEBUG] [Thread-133880 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:10:14.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T20:10:14.772 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T20:10:14.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T20:10:15.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 20, 9, 56), 10.68, 50.08, 0.0, 20.89, 19.36, 0, 0, 0, 2, 0, 0),)
2025-12-31T20:10:15.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 20:09:56
2025-12-31T20:10:15.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T20:10:15.765 [DEBUG] [Thread-133881] [transport.py] [_log()] starting thread (client mode): 0xb95d65f0
2025-12-31T20:10:15.765 [DEBUG] [Thread-133881] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:10:15.787 [DEBUG] [Thread-133881] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T20:10:15.787 [INFO] [Thread-133881] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T20:10:15.790 [DEBUG] [Thread-133881] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:10:15.790 [DEBUG] [Thread-133881] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T20:10:15.790 [DEBUG] [Thread-133881] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:10:15.790 [DEBUG] [Thread-133881] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:10:15.790 [DEBUG] [Thread-133881] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:10:15.790 [DEBUG] [Thread-133881] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:10:15.790 [DEBUG] [Thread-133881] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:10:15.790 [DEBUG] [Thread-133881] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:10:15.790 [DEBUG] [Thread-133881] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:10:15.790 [DEBUG] [Thread-133881] [transport.py] [_log()] client lang: <none>
2025-12-31T20:10:15.790 [DEBUG] [Thread-133881] [transport.py] [_log()] server lang: <none>
2025-12-31T20:10:15.791 [DEBUG] [Thread-133881] [transport.py] [_log()] kex follows: False
2025-12-31T20:10:15.791 [DEBUG] [Thread-133881] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:10:15.791 [DEBUG] [Thread-133881] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:10:15.791 [DEBUG] [Thread-133881] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:10:15.791 [DEBUG] [Thread-133881] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:10:15.791 [DEBUG] [Thread-133881] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:10:15.791 [DEBUG] [Thread-133881] [transport.py] [_log()] Compression: none
2025-12-31T20:10:15.791 [DEBUG] [Thread-133881] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:10:15.808 [DEBUG] [Thread-133881] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:10:15.809 [DEBUG] [Thread-133881] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:10:15.809 [DEBUG] [Thread-133881] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T20:10:15.810 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T20:10:15.810 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:10:15.812 [DEBUG] [Thread-133881] [transport.py] [_log()] userauth is OK
2025-12-31T20:10:15.813 [DEBUG] [Thread-133881] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:10:15.813 [DEBUG] [Thread-133881] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:10:15.813 [DEBUG] [Thread-133881] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T20:10:15.813 [DEBUG] [Thread-133881] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:10:15.838 [INFO] [Thread-133881] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:10:15.839 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:10:17.015 [DEBUG] [Thread-133881] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:10:17.015 [DEBUG] [Thread-133881] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:10:17.016 [DEBUG] [Thread-133881] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T20:10:17.056 [DEBUG] [Thread-133881] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:10:17.056 [DEBUG] [Thread-133881] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:10:17.060 [DEBUG] [Thread-133881] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:10:17.071 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:10:17.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T20:10:17.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T20:10:17.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T20:10:17.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:10:17.083 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T20:10:17.083 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:10:17.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:10:17.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T20:10:17.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.756736 -999.00  +19.60  13.06     53  +10.00 1 2 1 1 1   446    0 6.43 -182.91 ----- 15.8 13.1 200.6 24.9 20.8 -17.1 20.7 -16.3 20.5 -16.8 20.7 -17.8
2025-12-31T20:10:17.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T20:10:17.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T20:10:17.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.756736
2025-12-31T20:10:17.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T20:10:17.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T20:10:17.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T20:10:17.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T20:10:17.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T20:10:17.086 [DEBUG] [Thread-133881] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:10:17.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T20:09:56', tmtdew=10.68, humidity=50.08, cloud=0.0, wind=20.89, temperature=19.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T18:09:41.990', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T20:10:17.170 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T20:10:17.183 [DEBUG] [Thread-133884] [transport.py] [_log()] starting thread (client mode): 0xb17447f0
2025-12-31T20:10:17.183 [DEBUG] [Thread-133884] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:10:17.198 [DEBUG] [Thread-133884] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T20:10:17.199 [INFO] [Thread-133884] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T20:10:17.206 [DEBUG] [Thread-133884] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:10:17.206 [DEBUG] [Thread-133884] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T20:10:17.206 [DEBUG] [Thread-133884] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:10:17.206 [DEBUG] [Thread-133884] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:10:17.206 [DEBUG] [Thread-133884] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:10:17.206 [DEBUG] [Thread-133884] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:10:17.206 [DEBUG] [Thread-133884] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:10:17.206 [DEBUG] [Thread-133884] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:10:17.206 [DEBUG] [Thread-133884] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:10:17.206 [DEBUG] [Thread-133884] [transport.py] [_log()] client lang: <none>
2025-12-31T20:10:17.206 [DEBUG] [Thread-133884] [transport.py] [_log()] server lang: <none>
2025-12-31T20:10:17.206 [DEBUG] [Thread-133884] [transport.py] [_log()] kex follows: False
2025-12-31T20:10:17.206 [DEBUG] [Thread-133884] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:10:17.206 [DEBUG] [Thread-133884] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:10:17.206 [DEBUG] [Thread-133884] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:10:17.206 [DEBUG] [Thread-133884] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:10:17.206 [DEBUG] [Thread-133884] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:10:17.206 [DEBUG] [Thread-133884] [transport.py] [_log()] Compression: none
2025-12-31T20:10:17.206 [DEBUG] [Thread-133884] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:10:17.266 [DEBUG] [Thread-133884] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:10:17.266 [DEBUG] [Thread-133884] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:10:17.267 [DEBUG] [Thread-133884] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T20:10:17.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T20:10:17.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:10:17.329 [DEBUG] [Thread-133884] [transport.py] [_log()] userauth is OK
2025-12-31T20:10:17.330 [DEBUG] [Thread-133884] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:10:17.330 [DEBUG] [Thread-133884] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:10:17.330 [DEBUG] [Thread-133884] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T20:10:17.330 [DEBUG] [Thread-133884] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:10:17.349 [INFO] [Thread-133884] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:10:17.350 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T20:10:17.350 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:10:18.200 [DEBUG] [Thread-133884] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:10:18.200 [DEBUG] [Thread-133884] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:10:18.248 [DEBUG] [Thread-133884] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:10:18.248 [DEBUG] [Thread-133884] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:10:18.257 [DEBUG] [Thread-133884] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:10:18.267 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:10:18.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T20:10: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') -> 00000000
2025-12-31T20:10:18.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:10:18.286 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:10:18.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:10:18.294 [DEBUG] [Thread-133884] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:10:27.195 [DEBUG] [Thread-133886 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:10:36.612 [DEBUG] [Thread-133887 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:10:42.242 [DEBUG] [Thread-133888 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:10:48.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T20:10:48.316 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T20:10:48.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T20:10:49.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 20, 10, 28), 10.62, 50.26, 0.0, 21.33, 19.34, 0, 0, 0, 2, 0, 0),)
2025-12-31T20:10:49.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 20:10:28
2025-12-31T20:10:49.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T20:10:49.313 [DEBUG] [Thread-133889] [transport.py] [_log()] starting thread (client mode): 0xb6bb97b0
2025-12-31T20:10:49.313 [DEBUG] [Thread-133889] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:10:49.333 [DEBUG] [Thread-133889] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T20:10:49.333 [INFO] [Thread-133889] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T20:10:49.336 [DEBUG] [Thread-133889] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:10:49.337 [DEBUG] [Thread-133889] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T20:10:49.337 [DEBUG] [Thread-133889] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:10:49.337 [DEBUG] [Thread-133889] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:10:49.337 [DEBUG] [Thread-133889] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:10:49.337 [DEBUG] [Thread-133889] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:10:49.337 [DEBUG] [Thread-133889] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:10:49.337 [DEBUG] [Thread-133889] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:10:49.337 [DEBUG] [Thread-133889] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:10:49.337 [DEBUG] [Thread-133889] [transport.py] [_log()] client lang: <none>
2025-12-31T20:10:49.337 [DEBUG] [Thread-133889] [transport.py] [_log()] server lang: <none>
2025-12-31T20:10:49.337 [DEBUG] [Thread-133889] [transport.py] [_log()] kex follows: False
2025-12-31T20:10:49.337 [DEBUG] [Thread-133889] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:10:49.337 [DEBUG] [Thread-133889] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:10:49.337 [DEBUG] [Thread-133889] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:10:49.337 [DEBUG] [Thread-133889] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:10:49.337 [DEBUG] [Thread-133889] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:10:49.337 [DEBUG] [Thread-133889] [transport.py] [_log()] Compression: none
2025-12-31T20:10:49.337 [DEBUG] [Thread-133889] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:10:49.356 [DEBUG] [Thread-133889] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:10:49.356 [DEBUG] [Thread-133889] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:10:49.357 [DEBUG] [Thread-133889] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T20:10:49.357 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T20:10:49.358 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:10:49.359 [DEBUG] [Thread-133889] [transport.py] [_log()] userauth is OK
2025-12-31T20:10:49.359 [DEBUG] [Thread-133889] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:10:49.359 [DEBUG] [Thread-133889] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:10:49.359 [DEBUG] [Thread-133889] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T20:10:49.359 [DEBUG] [Thread-133889] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:10:49.376 [INFO] [Thread-133889] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:10:49.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:10:49.993 [DEBUG] [Thread-133889] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:10:49.993 [DEBUG] [Thread-133889] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:10:49.994 [DEBUG] [Thread-133889] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T20:10:50.035 [DEBUG] [Thread-133889] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:10:50.035 [DEBUG] [Thread-133889] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:10:50.038 [DEBUG] [Thread-133889] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:10:50.050 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:10:50.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T20:10:50.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T20:10:50.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T20:10:50.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:10:50.059 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T20:10:50.059 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:10:50.059 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:10:50.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T20:10:50.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.757083 -999.00  +19.50  11.99     54  +10.00 1 2 1 1 1   426    0 5.70 -200.83 ----- 14.3 12.0 213.4 24.0 20.8 -17.0 20.6 -16.2 20.4 -16.8 20.7 -17.9
2025-12-31T20:10:50.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T20:10:50.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T20:10:50.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.757083
2025-12-31T20:10:50.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T20:10:50.060 [DEBUG] [Thread-133889] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:10:50.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T20:10:50.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T20:10:50.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T20:10:50.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T20:10:50.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T20:10:28', tmtdew=10.62, humidity=50.26, cloud=0.0, wind=21.33, temperature=19.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T18:10:11.971', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T20:10:50.145 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T20:10:50.156 [DEBUG] [Thread-133892] [transport.py] [_log()] starting thread (client mode): 0xb1774ee0
2025-12-31T20:10:50.157 [DEBUG] [Thread-133892] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:10:50.171 [DEBUG] [Thread-133892] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T20:10:50.172 [INFO] [Thread-133892] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T20:10:50.179 [DEBUG] [Thread-133892] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:10:50.179 [DEBUG] [Thread-133892] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T20:10:50.179 [DEBUG] [Thread-133892] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:10:50.179 [DEBUG] [Thread-133892] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:10:50.179 [DEBUG] [Thread-133892] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:10:50.180 [DEBUG] [Thread-133892] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:10:50.180 [DEBUG] [Thread-133892] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:10:50.180 [DEBUG] [Thread-133892] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:10:50.180 [DEBUG] [Thread-133892] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:10:50.180 [DEBUG] [Thread-133892] [transport.py] [_log()] client lang: <none>
2025-12-31T20:10:50.180 [DEBUG] [Thread-133892] [transport.py] [_log()] server lang: <none>
2025-12-31T20:10:50.180 [DEBUG] [Thread-133892] [transport.py] [_log()] kex follows: False
2025-12-31T20:10:50.180 [DEBUG] [Thread-133892] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:10:50.180 [DEBUG] [Thread-133892] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:10:50.180 [DEBUG] [Thread-133892] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:10:50.180 [DEBUG] [Thread-133892] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:10:50.180 [DEBUG] [Thread-133892] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:10:50.180 [DEBUG] [Thread-133892] [transport.py] [_log()] Compression: none
2025-12-31T20:10:50.180 [DEBUG] [Thread-133892] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:10:50.241 [DEBUG] [Thread-133892] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:10:50.241 [DEBUG] [Thread-133892] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:10:50.242 [DEBUG] [Thread-133892] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T20:10:50.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T20:10:50.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:10:50.301 [DEBUG] [Thread-133892] [transport.py] [_log()] userauth is OK
2025-12-31T20:10:50.302 [DEBUG] [Thread-133892] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:10:50.302 [DEBUG] [Thread-133892] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:10:50.302 [DEBUG] [Thread-133892] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T20:10:50.302 [DEBUG] [Thread-133892] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:10:50.320 [INFO] [Thread-133892] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:10:50.320 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T20:10:50.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:10:51.211 [DEBUG] [Thread-133892] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:10:51.211 [DEBUG] [Thread-133892] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:10:51.260 [DEBUG] [Thread-133892] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:10:51.260 [DEBUG] [Thread-133892] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:10:51.269 [DEBUG] [Thread-133892] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:10:51.277 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:10:51.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T20:10:51.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T20:10:51.293 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:10:51.294 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:10:51.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:10:51.302 [DEBUG] [Thread-133892] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:10:57.281 [DEBUG] [Thread-133894 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:11:12.339 [DEBUG] [Thread-133895 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:11:15.723 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:11:15.725 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:11:21.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T20:11:21.325 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T20:11:21.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T20:11:22.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 20, 11, 1), 10.42, 50.94, 0.0, 23.31, 19.26, 0, 0, 0, 2, 0, 0),)
2025-12-31T20:11:22.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 20:11:01
2025-12-31T20:11:22.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T20:11:22.311 [DEBUG] [Thread-133896] [transport.py] [_log()] starting thread (client mode): 0xb6bbd660
2025-12-31T20:11:22.311 [DEBUG] [Thread-133896] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:11:22.334 [DEBUG] [Thread-133896] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T20:11:22.334 [INFO] [Thread-133896] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T20:11:22.337 [DEBUG] [Thread-133896] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:11:22.337 [DEBUG] [Thread-133896] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T20:11:22.337 [DEBUG] [Thread-133896] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:11:22.337 [DEBUG] [Thread-133896] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:11:22.337 [DEBUG] [Thread-133896] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:11:22.337 [DEBUG] [Thread-133896] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:11:22.337 [DEBUG] [Thread-133896] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:11:22.337 [DEBUG] [Thread-133896] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:11:22.337 [DEBUG] [Thread-133896] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:11:22.338 [DEBUG] [Thread-133896] [transport.py] [_log()] client lang: <none>
2025-12-31T20:11:22.338 [DEBUG] [Thread-133896] [transport.py] [_log()] server lang: <none>
2025-12-31T20:11:22.338 [DEBUG] [Thread-133896] [transport.py] [_log()] kex follows: False
2025-12-31T20:11:22.338 [DEBUG] [Thread-133896] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:11:22.338 [DEBUG] [Thread-133896] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:11:22.338 [DEBUG] [Thread-133896] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:11:22.338 [DEBUG] [Thread-133896] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:11:22.338 [DEBUG] [Thread-133896] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:11:22.338 [DEBUG] [Thread-133896] [transport.py] [_log()] Compression: none
2025-12-31T20:11:22.338 [DEBUG] [Thread-133896] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:11:22.355 [DEBUG] [Thread-133896] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:11:22.355 [DEBUG] [Thread-133896] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:11:22.356 [DEBUG] [Thread-133896] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T20:11:22.356 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T20:11:22.357 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:11:22.358 [DEBUG] [Thread-133896] [transport.py] [_log()] userauth is OK
2025-12-31T20:11:22.358 [DEBUG] [Thread-133896] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:11:22.358 [DEBUG] [Thread-133896] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:11:22.358 [DEBUG] [Thread-133896] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T20:11:22.358 [DEBUG] [Thread-133896] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:11:22.393 [INFO] [Thread-133896] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:11:22.394 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:11:23.006 [DEBUG] [Thread-133896] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:11:23.007 [DEBUG] [Thread-133896] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:11:23.007 [DEBUG] [Thread-133896] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T20:11:23.048 [DEBUG] [Thread-133896] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:11:23.048 [DEBUG] [Thread-133896] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:11:23.052 [DEBUG] [Thread-133896] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:11:23.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:11:23.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T20:11:23.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T20:11:23.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T20:11:23.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:11:23.076 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T20:11:23.077 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:11:23.077 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:11:23.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T20:11:23.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.757430 -999.00  +19.50  17.08     54  +10.00 1 2 1 1 1   406    0 5.56 -205.99 ----- 17.9 17.1 205.4 27.5 20.7 -17.0 20.6 -16.8 20.4 -16.8 20.6 -17.7
2025-12-31T20:11:23.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T20:11:23.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T20:11:23.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.757430
2025-12-31T20:11:23.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T20:11:23.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T20:11:23.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T20:11:23.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T20:11:23.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T20:11:23.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T20:11:01', tmtdew=10.42, humidity=50.94, cloud=0.0, wind=23.31, temperature=19.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T18:10:41.952', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T20:11:23.079 [DEBUG] [Thread-133896] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:11:23.157 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T20:11:23.168 [DEBUG] [Thread-133899] [transport.py] [_log()] starting thread (client mode): 0xb95d7dc0
2025-12-31T20:11:23.168 [DEBUG] [Thread-133899] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:11:23.184 [DEBUG] [Thread-133899] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T20:11:23.184 [INFO] [Thread-133899] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T20:11:23.192 [DEBUG] [Thread-133899] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:11:23.192 [DEBUG] [Thread-133899] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T20:11:23.192 [DEBUG] [Thread-133899] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:11:23.193 [DEBUG] [Thread-133899] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:11:23.193 [DEBUG] [Thread-133899] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:11:23.193 [DEBUG] [Thread-133899] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:11:23.193 [DEBUG] [Thread-133899] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:11:23.193 [DEBUG] [Thread-133899] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:11:23.193 [DEBUG] [Thread-133899] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:11:23.193 [DEBUG] [Thread-133899] [transport.py] [_log()] client lang: <none>
2025-12-31T20:11:23.193 [DEBUG] [Thread-133899] [transport.py] [_log()] server lang: <none>
2025-12-31T20:11:23.193 [DEBUG] [Thread-133899] [transport.py] [_log()] kex follows: False
2025-12-31T20:11:23.194 [DEBUG] [Thread-133899] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:11:23.194 [DEBUG] [Thread-133899] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:11:23.194 [DEBUG] [Thread-133899] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:11:23.194 [DEBUG] [Thread-133899] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:11:23.194 [DEBUG] [Thread-133899] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:11:23.194 [DEBUG] [Thread-133899] [transport.py] [_log()] Compression: none
2025-12-31T20:11:23.194 [DEBUG] [Thread-133899] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:11:23.250 [DEBUG] [Thread-133899] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:11:23.251 [DEBUG] [Thread-133899] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:11:23.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T20:11:23.252 [DEBUG] [Thread-133899] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T20:11:23.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:11:23.306 [DEBUG] [Thread-133899] [transport.py] [_log()] userauth is OK
2025-12-31T20:11:23.307 [DEBUG] [Thread-133899] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:11:23.307 [DEBUG] [Thread-133899] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:11:23.307 [DEBUG] [Thread-133899] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T20:11:23.307 [DEBUG] [Thread-133899] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:11:23.327 [INFO] [Thread-133899] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:11:23.327 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T20:11:23.328 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:11:24.204 [DEBUG] [Thread-133899] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:11:24.204 [DEBUG] [Thread-133899] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:11:24.252 [DEBUG] [Thread-133899] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:11:24.252 [DEBUG] [Thread-133899] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:11:24.261 [DEBUG] [Thread-133899] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:11:24.270 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:11:24.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T20:11:24.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T20:11:24.288 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:11:24.288 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:11:24.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:11:24.297 [DEBUG] [Thread-133899] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:11:27.374 [DEBUG] [Thread-133901 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:11:36.699 [DEBUG] [Thread-133902 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:11:42.418 [DEBUG] [Thread-133903 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:11:54.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T20:11:54.319 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T20:11:54.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T20:11:55.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 20, 11, 33), 10.31, 51.29, 0.0, 21.95, 19.21, 0, 0, 0, 2, 0, 0),)
2025-12-31T20:11:55.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 20:11:33
2025-12-31T20:11:55.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T20:11:55.299 [DEBUG] [Thread-133904] [transport.py] [_log()] starting thread (client mode): 0xb6bb96c0
2025-12-31T20:11:55.299 [DEBUG] [Thread-133904] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:11:55.319 [DEBUG] [Thread-133904] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T20:11:55.319 [INFO] [Thread-133904] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T20:11:55.322 [DEBUG] [Thread-133904] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:11:55.322 [DEBUG] [Thread-133904] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T20:11:55.322 [DEBUG] [Thread-133904] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:11:55.322 [DEBUG] [Thread-133904] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:11:55.322 [DEBUG] [Thread-133904] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:11:55.322 [DEBUG] [Thread-133904] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:11:55.322 [DEBUG] [Thread-133904] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:11:55.322 [DEBUG] [Thread-133904] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:11:55.322 [DEBUG] [Thread-133904] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:11:55.322 [DEBUG] [Thread-133904] [transport.py] [_log()] client lang: <none>
2025-12-31T20:11:55.322 [DEBUG] [Thread-133904] [transport.py] [_log()] server lang: <none>
2025-12-31T20:11:55.322 [DEBUG] [Thread-133904] [transport.py] [_log()] kex follows: False
2025-12-31T20:11:55.322 [DEBUG] [Thread-133904] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:11:55.322 [DEBUG] [Thread-133904] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:11:55.322 [DEBUG] [Thread-133904] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:11:55.323 [DEBUG] [Thread-133904] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:11:55.323 [DEBUG] [Thread-133904] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:11:55.323 [DEBUG] [Thread-133904] [transport.py] [_log()] Compression: none
2025-12-31T20:11:55.323 [DEBUG] [Thread-133904] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:11:55.339 [DEBUG] [Thread-133904] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:11:55.340 [DEBUG] [Thread-133904] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:11:55.340 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T20:11:55.341 [DEBUG] [Thread-133904] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T20:11:55.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:11:55.384 [DEBUG] [Thread-133904] [transport.py] [_log()] userauth is OK
2025-12-31T20:11:55.384 [DEBUG] [Thread-133904] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:11:55.384 [DEBUG] [Thread-133904] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:11:55.384 [DEBUG] [Thread-133904] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T20:11:55.384 [DEBUG] [Thread-133904] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:11:55.400 [INFO] [Thread-133904] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:11:55.400 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:11:56.015 [DEBUG] [Thread-133904] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:11:56.016 [DEBUG] [Thread-133904] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:11:56.016 [DEBUG] [Thread-133904] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T20:11:56.056 [DEBUG] [Thread-133904] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:11:56.056 [DEBUG] [Thread-133904] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:11:56.060 [DEBUG] [Thread-133904] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:11:56.072 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:11:56.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T20:11:56.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T20:11:56.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T20:11:56.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:11:56.087 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T20:11:56.087 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:11:56.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:11:56.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T20:11:56.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.757778 -999.00  +19.50  10.42     54  +10.00 1 2 1 1 1   386    0 5.46 -202.98 ----- 11.5 10.4 200.0 24.4 20.7 -16.8 20.6 -16.0 20.4 -16.6 20.6 -17.6
2025-12-31T20:11:56.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T20:11:56.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T20:11:56.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.757778
2025-12-31T20:11:56.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T20:11:56.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T20:11:56.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T20:11:56.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T20:11:56.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T20:11:56.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T20:11:33', tmtdew=10.31, humidity=51.29, cloud=0.0, wind=21.95, temperature=19.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T18:11:12.019', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T20:11:56.090 [DEBUG] [Thread-133904] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:11:56.179 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T20:11:56.190 [DEBUG] [Thread-133907] [transport.py] [_log()] starting thread (client mode): 0xb1746ce0
2025-12-31T20:11:56.191 [DEBUG] [Thread-133907] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:11:56.208 [DEBUG] [Thread-133907] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T20:11:56.208 [INFO] [Thread-133907] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T20:11:56.215 [DEBUG] [Thread-133907] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:11:56.215 [DEBUG] [Thread-133907] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T20:11:56.215 [DEBUG] [Thread-133907] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:11:56.215 [DEBUG] [Thread-133907] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:11:56.215 [DEBUG] [Thread-133907] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:11:56.215 [DEBUG] [Thread-133907] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:11:56.215 [DEBUG] [Thread-133907] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:11:56.215 [DEBUG] [Thread-133907] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:11:56.215 [DEBUG] [Thread-133907] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:11:56.215 [DEBUG] [Thread-133907] [transport.py] [_log()] client lang: <none>
2025-12-31T20:11:56.215 [DEBUG] [Thread-133907] [transport.py] [_log()] server lang: <none>
2025-12-31T20:11:56.215 [DEBUG] [Thread-133907] [transport.py] [_log()] kex follows: False
2025-12-31T20:11:56.215 [DEBUG] [Thread-133907] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:11:56.215 [DEBUG] [Thread-133907] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:11:56.215 [DEBUG] [Thread-133907] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:11:56.215 [DEBUG] [Thread-133907] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:11:56.215 [DEBUG] [Thread-133907] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:11:56.216 [DEBUG] [Thread-133907] [transport.py] [_log()] Compression: none
2025-12-31T20:11:56.216 [DEBUG] [Thread-133907] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:11:56.274 [DEBUG] [Thread-133907] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:11:56.274 [DEBUG] [Thread-133907] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:11:56.274 [DEBUG] [Thread-133907] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T20:11:56.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T20:11:56.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:11:56.329 [DEBUG] [Thread-133907] [transport.py] [_log()] userauth is OK
2025-12-31T20:11:56.329 [DEBUG] [Thread-133907] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:11:56.329 [DEBUG] [Thread-133907] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:11:56.329 [DEBUG] [Thread-133907] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T20:11:56.329 [DEBUG] [Thread-133907] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:11:56.352 [INFO] [Thread-133907] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:11:56.353 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T20:11:56.353 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:11:57.186 [DEBUG] [Thread-133907] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:11:57.187 [DEBUG] [Thread-133907] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:11:57.234 [DEBUG] [Thread-133907] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:11:57.234 [DEBUG] [Thread-133907] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:11:57.243 [DEBUG] [Thread-133907] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:11:57.252 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:11: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')
2025-12-31T20:11:57.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-12-31T20:11:57.271 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:11:57.271 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:11:57.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:11:57.280 [DEBUG] [Thread-133907] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:11:57.454 [DEBUG] [Thread-133909 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:12:12.514 [DEBUG] [Thread-133910 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:12:20.770 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:12:20.771 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:12:27.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T20:12:27.303 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T20:12:27.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T20:12:27.544 [DEBUG] [Thread-133911 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:12:28.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 20, 12, 5), 10.26, 51.45, 0.0, 21.93, 19.16, 0, 0, 0, 2, 0, 0),)
2025-12-31T20:12:28.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 20:12:05
2025-12-31T20:12:28.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T20:12:28.304 [DEBUG] [Thread-133912] [transport.py] [_log()] starting thread (client mode): 0xb1747970
2025-12-31T20:12:28.304 [DEBUG] [Thread-133912] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:12:28.324 [DEBUG] [Thread-133912] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T20:12:28.324 [INFO] [Thread-133912] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T20:12:28.327 [DEBUG] [Thread-133912] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:12:28.327 [DEBUG] [Thread-133912] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T20:12:28.327 [DEBUG] [Thread-133912] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:12:28.327 [DEBUG] [Thread-133912] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:12:28.327 [DEBUG] [Thread-133912] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:12:28.327 [DEBUG] [Thread-133912] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:12:28.327 [DEBUG] [Thread-133912] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:12:28.327 [DEBUG] [Thread-133912] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:12:28.327 [DEBUG] [Thread-133912] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:12:28.327 [DEBUG] [Thread-133912] [transport.py] [_log()] client lang: <none>
2025-12-31T20:12:28.327 [DEBUG] [Thread-133912] [transport.py] [_log()] server lang: <none>
2025-12-31T20:12:28.328 [DEBUG] [Thread-133912] [transport.py] [_log()] kex follows: False
2025-12-31T20:12:28.328 [DEBUG] [Thread-133912] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:12:28.328 [DEBUG] [Thread-133912] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:12:28.328 [DEBUG] [Thread-133912] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:12:28.328 [DEBUG] [Thread-133912] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:12:28.328 [DEBUG] [Thread-133912] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:12:28.328 [DEBUG] [Thread-133912] [transport.py] [_log()] Compression: none
2025-12-31T20:12:28.328 [DEBUG] [Thread-133912] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:12:28.344 [DEBUG] [Thread-133912] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:12:28.344 [DEBUG] [Thread-133912] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:12:28.344 [DEBUG] [Thread-133912] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T20:12:28.345 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T20:12:28.345 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:12:28.346 [DEBUG] [Thread-133912] [transport.py] [_log()] userauth is OK
2025-12-31T20:12:28.346 [DEBUG] [Thread-133912] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:12:28.346 [DEBUG] [Thread-133912] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:12:28.346 [DEBUG] [Thread-133912] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T20:12:28.347 [DEBUG] [Thread-133912] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:12:28.367 [INFO] [Thread-133912] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:12:28.368 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:12:29.016 [DEBUG] [Thread-133912] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:12:29.016 [DEBUG] [Thread-133912] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:12:29.017 [DEBUG] [Thread-133912] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T20:12:29.057 [DEBUG] [Thread-133912] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:12:29.057 [DEBUG] [Thread-133912] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:12:29.061 [DEBUG] [Thread-133912] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:12:29.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:12:29.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T20:12:29.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T20:12:29.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T20:12:29.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:12:29.084 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T20:12:29.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:12:29.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:12:29.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T20:12:29.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.758125 -999.00  +19.50  10.40     54  +10.10 1 2 1 1 1   367    0 5.26 -215.85 ----- 15.2 10.4 186.2 19.4 20.7 -16.8 20.6 -16.6 20.3 -16.7 20.6 -17.5
2025-12-31T20:12:29.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T20:12:29.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T20:12:29.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.758125
2025-12-31T20:12:29.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T20:12:29.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T20:12:29.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T20:12:29.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T20:12:29.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T20:12:29.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T20:12:05', tmtdew=10.26, humidity=51.45, cloud=0.0, wind=21.93, temperature=19.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T18:11:42.000', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T20:12:29.086 [DEBUG] [Thread-133912] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:12:29.158 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T20:12:29.170 [DEBUG] [Thread-133915] [transport.py] [_log()] starting thread (client mode): 0xb95d5330
2025-12-31T20:12:29.170 [DEBUG] [Thread-133915] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:12:29.185 [DEBUG] [Thread-133915] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T20:12:29.185 [INFO] [Thread-133915] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T20:12:29.192 [DEBUG] [Thread-133915] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:12:29.192 [DEBUG] [Thread-133915] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T20:12:29.192 [DEBUG] [Thread-133915] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:12:29.193 [DEBUG] [Thread-133915] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:12:29.193 [DEBUG] [Thread-133915] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:12:29.193 [DEBUG] [Thread-133915] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:12:29.193 [DEBUG] [Thread-133915] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:12:29.193 [DEBUG] [Thread-133915] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:12:29.193 [DEBUG] [Thread-133915] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:12:29.193 [DEBUG] [Thread-133915] [transport.py] [_log()] client lang: <none>
2025-12-31T20:12:29.193 [DEBUG] [Thread-133915] [transport.py] [_log()] server lang: <none>
2025-12-31T20:12:29.193 [DEBUG] [Thread-133915] [transport.py] [_log()] kex follows: False
2025-12-31T20:12:29.193 [DEBUG] [Thread-133915] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:12:29.193 [DEBUG] [Thread-133915] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:12:29.193 [DEBUG] [Thread-133915] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:12:29.193 [DEBUG] [Thread-133915] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:12:29.193 [DEBUG] [Thread-133915] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:12:29.193 [DEBUG] [Thread-133915] [transport.py] [_log()] Compression: none
2025-12-31T20:12:29.193 [DEBUG] [Thread-133915] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:12:29.249 [DEBUG] [Thread-133915] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:12:29.249 [DEBUG] [Thread-133915] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:12:29.250 [DEBUG] [Thread-133915] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T20:12:29.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T20:12:29.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:12:29.306 [DEBUG] [Thread-133915] [transport.py] [_log()] userauth is OK
2025-12-31T20:12:29.306 [DEBUG] [Thread-133915] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:12:29.306 [DEBUG] [Thread-133915] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:12:29.306 [DEBUG] [Thread-133915] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T20:12:29.306 [DEBUG] [Thread-133915] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:12:29.325 [INFO] [Thread-133915] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:12:29.326 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T20:12:29.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:12:30.146 [DEBUG] [Thread-133915] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:12:30.147 [DEBUG] [Thread-133915] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:12:30.195 [DEBUG] [Thread-133915] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:12:30.195 [DEBUG] [Thread-133915] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:12:30.205 [DEBUG] [Thread-133915] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:12:30.214 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:12:30.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T20:12:30.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T20:12:30.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:12:30.234 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:12:30.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:12:30.243 [DEBUG] [Thread-133915] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:12:36.772 [DEBUG] [Thread-133917 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:12:42.578 [DEBUG] [Thread-133918 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:12:57.628 [DEBUG] [Thread-133919 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:13:00.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T20:13:00.264 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T20:13:00.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T20:13:01.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 20, 12, 37), 10.02, 52.09, 0.0, 17.38, 19.03, 0, 0, 0, 2, 0, 0),)
2025-12-31T20:13:01.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 20:12:37
2025-12-31T20:13:01.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T20:13:01.290 [DEBUG] [Thread-133920] [transport.py] [_log()] starting thread (client mode): 0xb1746f80
2025-12-31T20:13:01.291 [DEBUG] [Thread-133920] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:13:01.310 [DEBUG] [Thread-133920] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T20:13:01.310 [INFO] [Thread-133920] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T20:13:01.313 [DEBUG] [Thread-133920] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:13:01.313 [DEBUG] [Thread-133920] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T20:13:01.313 [DEBUG] [Thread-133920] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:13:01.313 [DEBUG] [Thread-133920] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:13:01.313 [DEBUG] [Thread-133920] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:13:01.314 [DEBUG] [Thread-133920] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:13:01.314 [DEBUG] [Thread-133920] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:13:01.314 [DEBUG] [Thread-133920] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:13:01.314 [DEBUG] [Thread-133920] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:13:01.314 [DEBUG] [Thread-133920] [transport.py] [_log()] client lang: <none>
2025-12-31T20:13:01.314 [DEBUG] [Thread-133920] [transport.py] [_log()] server lang: <none>
2025-12-31T20:13:01.314 [DEBUG] [Thread-133920] [transport.py] [_log()] kex follows: False
2025-12-31T20:13:01.314 [DEBUG] [Thread-133920] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:13:01.314 [DEBUG] [Thread-133920] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:13:01.314 [DEBUG] [Thread-133920] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:13:01.314 [DEBUG] [Thread-133920] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:13:01.314 [DEBUG] [Thread-133920] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:13:01.314 [DEBUG] [Thread-133920] [transport.py] [_log()] Compression: none
2025-12-31T20:13:01.314 [DEBUG] [Thread-133920] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:13:01.332 [DEBUG] [Thread-133920] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:13:01.333 [DEBUG] [Thread-133920] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:13:01.333 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T20:13:01.334 [DEBUG] [Thread-133920] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T20:13:01.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:13:01.335 [DEBUG] [Thread-133920] [transport.py] [_log()] userauth is OK
2025-12-31T20:13:01.335 [DEBUG] [Thread-133920] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:13:01.335 [DEBUG] [Thread-133920] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:13:01.335 [DEBUG] [Thread-133920] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T20:13:01.335 [DEBUG] [Thread-133920] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:13:01.356 [INFO] [Thread-133920] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:13:01.356 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:13:01.952 [DEBUG] [Thread-133920] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:13:01.952 [DEBUG] [Thread-133920] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:13:01.953 [DEBUG] [Thread-133920] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T20:13:01.993 [DEBUG] [Thread-133920] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:13:01.994 [DEBUG] [Thread-133920] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:13:01.997 [DEBUG] [Thread-133920] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:13:02.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:13:02.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T20:13:02.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T20:13:02.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T20:13:02.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:13:02.020 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T20:13:02.020 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:13:02.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:13:02.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T20:13:02.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.758472 -999.00  +19.40  15.18     55  +10.20 1 2 1 1 1   347    0 5.48 -205.35 ----- 12.5 15.2 225.6 22.1 20.6 -16.6 20.5 -16.5 20.3 -16.9 20.6 -17.6
2025-12-31T20:13:02.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T20:13:02.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T20:13:02.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.758472
2025-12-31T20:13:02.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T20:13:02.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T20:13:02.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T20:13:02.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T20:13:02.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T20:13:02.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T20:12:37', tmtdew=10.02, humidity=52.09, cloud=0.0, wind=17.38, temperature=19.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T18:12:11.981', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T20:13:02.023 [DEBUG] [Thread-133920] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:13:02.112 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T20:13:02.124 [DEBUG] [Thread-133923] [transport.py] [_log()] starting thread (client mode): 0xb17752a0
2025-12-31T20:13:02.124 [DEBUG] [Thread-133923] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:13:02.139 [DEBUG] [Thread-133923] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T20:13:02.139 [INFO] [Thread-133923] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T20:13:02.146 [DEBUG] [Thread-133923] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:13:02.147 [DEBUG] [Thread-133923] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T20:13:02.147 [DEBUG] [Thread-133923] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:13:02.147 [DEBUG] [Thread-133923] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:13:02.147 [DEBUG] [Thread-133923] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:13:02.147 [DEBUG] [Thread-133923] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:13:02.148 [DEBUG] [Thread-133923] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:13:02.148 [DEBUG] [Thread-133923] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:13:02.148 [DEBUG] [Thread-133923] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:13:02.148 [DEBUG] [Thread-133923] [transport.py] [_log()] client lang: <none>
2025-12-31T20:13:02.148 [DEBUG] [Thread-133923] [transport.py] [_log()] server lang: <none>
2025-12-31T20:13:02.148 [DEBUG] [Thread-133923] [transport.py] [_log()] kex follows: False
2025-12-31T20:13:02.148 [DEBUG] [Thread-133923] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:13:02.149 [DEBUG] [Thread-133923] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:13:02.149 [DEBUG] [Thread-133923] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:13:02.149 [DEBUG] [Thread-133923] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:13:02.149 [DEBUG] [Thread-133923] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:13:02.149 [DEBUG] [Thread-133923] [transport.py] [_log()] Compression: none
2025-12-31T20:13:02.149 [DEBUG] [Thread-133923] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:13:02.214 [DEBUG] [Thread-133923] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:13:02.215 [DEBUG] [Thread-133923] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:13:02.215 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T20:13:02.216 [DEBUG] [Thread-133923] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T20:13:02.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:13:02.273 [DEBUG] [Thread-133923] [transport.py] [_log()] userauth is OK
2025-12-31T20:13:02.274 [DEBUG] [Thread-133923] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:13:02.274 [DEBUG] [Thread-133923] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:13:02.274 [DEBUG] [Thread-133923] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T20:13:02.274 [DEBUG] [Thread-133923] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:13:02.299 [INFO] [Thread-133923] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:13:02.299 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T20:13:02.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:13:03.154 [DEBUG] [Thread-133923] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:13:03.154 [DEBUG] [Thread-133923] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:13:03.205 [DEBUG] [Thread-133923] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:13:03.205 [DEBUG] [Thread-133923] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:13:03.216 [DEBUG] [Thread-133923] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:13:03.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:13:03.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T20:13:03.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T20:13:03.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:13:03.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:13:03.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:13:03.256 [DEBUG] [Thread-133923] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:13:12.659 [DEBUG] [Thread-133925 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:13:27.711 [DEBUG] [Thread-133926 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:13:28.167 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:13:28.168 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:13:33.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T20:13:33.269 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T20:13:33.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T20:13:33.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 20, 13, 9), 9.98, 52.2, 0.0, 17.77, 19.01, 0, 0, 0, 2, 0, 0),)
2025-12-31T20:13:33.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 20:13:09
2025-12-31T20:13:34.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T20:13:34.287 [DEBUG] [Thread-133927] [transport.py] [_log()] starting thread (client mode): 0xb17753c0
2025-12-31T20:13:34.287 [DEBUG] [Thread-133927] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:13:34.308 [DEBUG] [Thread-133927] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T20:13:34.308 [INFO] [Thread-133927] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T20:13:34.311 [DEBUG] [Thread-133927] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:13:34.311 [DEBUG] [Thread-133927] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T20:13:34.311 [DEBUG] [Thread-133927] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:13:34.311 [DEBUG] [Thread-133927] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:13:34.311 [DEBUG] [Thread-133927] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:13:34.311 [DEBUG] [Thread-133927] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:13:34.311 [DEBUG] [Thread-133927] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:13:34.311 [DEBUG] [Thread-133927] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:13:34.311 [DEBUG] [Thread-133927] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:13:34.311 [DEBUG] [Thread-133927] [transport.py] [_log()] client lang: <none>
2025-12-31T20:13:34.311 [DEBUG] [Thread-133927] [transport.py] [_log()] server lang: <none>
2025-12-31T20:13:34.311 [DEBUG] [Thread-133927] [transport.py] [_log()] kex follows: False
2025-12-31T20:13:34.311 [DEBUG] [Thread-133927] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:13:34.311 [DEBUG] [Thread-133927] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:13:34.311 [DEBUG] [Thread-133927] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:13:34.311 [DEBUG] [Thread-133927] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:13:34.311 [DEBUG] [Thread-133927] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:13:34.311 [DEBUG] [Thread-133927] [transport.py] [_log()] Compression: none
2025-12-31T20:13:34.311 [DEBUG] [Thread-133927] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:13:34.330 [DEBUG] [Thread-133927] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:13:34.330 [DEBUG] [Thread-133927] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:13:34.331 [DEBUG] [Thread-133927] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T20:13:34.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T20:13:34.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:13:34.332 [DEBUG] [Thread-133927] [transport.py] [_log()] userauth is OK
2025-12-31T20:13:34.332 [DEBUG] [Thread-133927] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:13:34.332 [DEBUG] [Thread-133927] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:13:34.332 [DEBUG] [Thread-133927] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T20:13:34.332 [DEBUG] [Thread-133927] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:13:34.348 [INFO] [Thread-133927] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:13:34.348 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:13:34.982 [DEBUG] [Thread-133927] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:13:34.982 [DEBUG] [Thread-133927] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:13:34.982 [DEBUG] [Thread-133927] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T20:13:35.023 [DEBUG] [Thread-133927] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:13:35.023 [DEBUG] [Thread-133927] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:13:35.025 [DEBUG] [Thread-133927] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:13:35.037 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:13:35.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T20:13:35.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T20:13:35.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T20:13:35.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:13:35.042 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T20:13:35.042 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:13:35.042 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:13:35.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T20:13:35.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.758819 -999.00  +19.40   9.74     55  +10.20 1 2 1 1 1   329    0 5.12 -215.32 ----- 9.9 9.7 222.6 13.1 20.6 -16.4 20.5 -16.8 20.3 -16.7 20.6 -17.4
2025-12-31T20:13:35.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T20:13:35.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T20:13:35.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.758819
2025-12-31T20:13:35.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T20:13:35.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T20:13:35.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T20:13:35.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T20:13:35.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T20:13:35.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T20:13:09', tmtdew=9.98, humidity=52.2, cloud=0.0, wind=17.77, temperature=19.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T18:12:41.962', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T20:13:35.043 [DEBUG] [Thread-133927] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:13:35.117 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T20:13:35.128 [DEBUG] [Thread-133930] [transport.py] [_log()] starting thread (client mode): 0xb17777f0
2025-12-31T20:13:35.129 [DEBUG] [Thread-133930] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:13:35.143 [DEBUG] [Thread-133930] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T20:13:35.143 [INFO] [Thread-133930] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T20:13:35.151 [DEBUG] [Thread-133930] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:13:35.151 [DEBUG] [Thread-133930] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T20:13:35.151 [DEBUG] [Thread-133930] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:13:35.151 [DEBUG] [Thread-133930] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:13:35.151 [DEBUG] [Thread-133930] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:13:35.151 [DEBUG] [Thread-133930] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:13:35.151 [DEBUG] [Thread-133930] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:13:35.151 [DEBUG] [Thread-133930] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:13:35.151 [DEBUG] [Thread-133930] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:13:35.151 [DEBUG] [Thread-133930] [transport.py] [_log()] client lang: <none>
2025-12-31T20:13:35.151 [DEBUG] [Thread-133930] [transport.py] [_log()] server lang: <none>
2025-12-31T20:13:35.151 [DEBUG] [Thread-133930] [transport.py] [_log()] kex follows: False
2025-12-31T20:13:35.151 [DEBUG] [Thread-133930] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:13:35.151 [DEBUG] [Thread-133930] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:13:35.151 [DEBUG] [Thread-133930] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:13:35.151 [DEBUG] [Thread-133930] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:13:35.151 [DEBUG] [Thread-133930] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:13:35.151 [DEBUG] [Thread-133930] [transport.py] [_log()] Compression: none
2025-12-31T20:13:35.151 [DEBUG] [Thread-133930] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:13:35.213 [DEBUG] [Thread-133930] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:13:35.213 [DEBUG] [Thread-133930] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:13:35.214 [DEBUG] [Thread-133930] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T20:13:35.214 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T20:13:35.214 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:13:35.273 [DEBUG] [Thread-133930] [transport.py] [_log()] userauth is OK
2025-12-31T20:13:35.273 [DEBUG] [Thread-133930] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:13:35.273 [DEBUG] [Thread-133930] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:13:35.273 [DEBUG] [Thread-133930] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T20:13:35.273 [DEBUG] [Thread-133930] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:13:35.293 [INFO] [Thread-133930] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:13:35.293 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T20:13:35.293 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:13:36.139 [DEBUG] [Thread-133930] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:13:36.139 [DEBUG] [Thread-133930] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:13:36.187 [DEBUG] [Thread-133930] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:13:36.187 [DEBUG] [Thread-133930] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:13:36.195 [DEBUG] [Thread-133930] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:13:36.203 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:13:36.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-12-31T20:13:36.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-12-31T20:13:36.219 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:13:36.219 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:13:36.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:13:36.227 [DEBUG] [Thread-133930] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:13:36.841 [DEBUG] [Thread-133932 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:13:42.745 [DEBUG] [Thread-133933 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:13:57.788 [DEBUG] [Thread-133934 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:14:06.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T20:14:06.256 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T20:14: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-12-31T20:14:06.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 20, 13, 41), 9.89, 52.85, 0.0, 18.97, 18.99, 0, 0, 0, 2, 0, 0),)
2025-12-31T20:14:06.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 20:13:41
2025-12-31T20:14:07.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T20:14:07.232 [DEBUG] [Thread-133935] [transport.py] [_log()] starting thread (client mode): 0xb1758b80
2025-12-31T20:14:07.233 [DEBUG] [Thread-133935] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:14:07.253 [DEBUG] [Thread-133935] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T20:14:07.253 [INFO] [Thread-133935] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T20:14:07.256 [DEBUG] [Thread-133935] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:14:07.257 [DEBUG] [Thread-133935] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T20:14:07.257 [DEBUG] [Thread-133935] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:14:07.257 [DEBUG] [Thread-133935] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:14:07.257 [DEBUG] [Thread-133935] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:14:07.257 [DEBUG] [Thread-133935] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:14:07.257 [DEBUG] [Thread-133935] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:14:07.257 [DEBUG] [Thread-133935] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:14:07.257 [DEBUG] [Thread-133935] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:14:07.257 [DEBUG] [Thread-133935] [transport.py] [_log()] client lang: <none>
2025-12-31T20:14:07.257 [DEBUG] [Thread-133935] [transport.py] [_log()] server lang: <none>
2025-12-31T20:14:07.257 [DEBUG] [Thread-133935] [transport.py] [_log()] kex follows: False
2025-12-31T20:14:07.257 [DEBUG] [Thread-133935] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:14:07.257 [DEBUG] [Thread-133935] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:14:07.257 [DEBUG] [Thread-133935] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:14:07.257 [DEBUG] [Thread-133935] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:14:07.257 [DEBUG] [Thread-133935] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:14:07.258 [DEBUG] [Thread-133935] [transport.py] [_log()] Compression: none
2025-12-31T20:14:07.258 [DEBUG] [Thread-133935] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:14:07.276 [DEBUG] [Thread-133935] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:14:07.277 [DEBUG] [Thread-133935] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:14:07.277 [DEBUG] [Thread-133935] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T20:14:07.278 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T20:14:07.278 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:14:07.280 [DEBUG] [Thread-133935] [transport.py] [_log()] userauth is OK
2025-12-31T20:14:07.280 [DEBUG] [Thread-133935] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:14:07.280 [DEBUG] [Thread-133935] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:14:07.280 [DEBUG] [Thread-133935] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T20:14:07.280 [DEBUG] [Thread-133935] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:14:07.304 [INFO] [Thread-133935] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:14:07.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:14:07.958 [DEBUG] [Thread-133935] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:14:07.959 [DEBUG] [Thread-133935] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:14:07.959 [DEBUG] [Thread-133935] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T20:14:08.000 [DEBUG] [Thread-133935] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:14:08.000 [DEBUG] [Thread-133935] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:14:08.004 [DEBUG] [Thread-133935] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:14:08.018 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:14:08.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T20:14:08.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T20:14:08.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T20:14:08.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:14:08.029 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T20:14:08.030 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:14:08.030 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:14:08.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T20:14:08.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.759166 -999.00  +19.40   9.98     55  +10.20 1 2 1 1 1   310    0 4.43 -233.97 ----- 8.2 10.0 204.2 13.9 20.6 -16.7 20.5 -16.5 20.3 -16.9 20.6 -17.5
2025-12-31T20:14:08.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T20:14:08.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T20:14:08.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.759166
2025-12-31T20:14:08.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T20:14:08.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T20:14:08.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T20:14:08.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T20:14:08.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T20:14:08.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T20:13:41', tmtdew=9.89, humidity=52.85, cloud=0.0, wind=18.97, temperature=18.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T18:13:11.942', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T20:14:08.032 [DEBUG] [Thread-133935] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:14:08.116 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T20:14:08.131 [DEBUG] [Thread-133938] [transport.py] [_log()] starting thread (client mode): 0xb17665c0
2025-12-31T20:14:08.131 [DEBUG] [Thread-133938] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:14:08.146 [DEBUG] [Thread-133938] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T20:14:08.146 [INFO] [Thread-133938] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T20:14:08.154 [DEBUG] [Thread-133938] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:14:08.154 [DEBUG] [Thread-133938] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T20:14:08.154 [DEBUG] [Thread-133938] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:14:08.154 [DEBUG] [Thread-133938] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:14:08.154 [DEBUG] [Thread-133938] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:14:08.154 [DEBUG] [Thread-133938] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:14:08.154 [DEBUG] [Thread-133938] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:14:08.154 [DEBUG] [Thread-133938] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:14:08.154 [DEBUG] [Thread-133938] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:14:08.154 [DEBUG] [Thread-133938] [transport.py] [_log()] client lang: <none>
2025-12-31T20:14:08.154 [DEBUG] [Thread-133938] [transport.py] [_log()] server lang: <none>
2025-12-31T20:14:08.154 [DEBUG] [Thread-133938] [transport.py] [_log()] kex follows: False
2025-12-31T20:14:08.154 [DEBUG] [Thread-133938] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:14:08.155 [DEBUG] [Thread-133938] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:14:08.155 [DEBUG] [Thread-133938] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:14:08.155 [DEBUG] [Thread-133938] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:14:08.155 [DEBUG] [Thread-133938] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:14:08.155 [DEBUG] [Thread-133938] [transport.py] [_log()] Compression: none
2025-12-31T20:14:08.155 [DEBUG] [Thread-133938] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:14:08.212 [DEBUG] [Thread-133938] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:14:08.212 [DEBUG] [Thread-133938] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:14:08.213 [DEBUG] [Thread-133938] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T20:14:08.213 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T20:14:08.214 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:14:08.269 [DEBUG] [Thread-133938] [transport.py] [_log()] userauth is OK
2025-12-31T20:14:08.269 [DEBUG] [Thread-133938] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:14:08.269 [DEBUG] [Thread-133938] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:14:08.269 [DEBUG] [Thread-133938] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T20:14:08.269 [DEBUG] [Thread-133938] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:14:08.289 [INFO] [Thread-133938] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:14:08.289 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T20:14:08.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:14:09.125 [DEBUG] [Thread-133938] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:14:09.125 [DEBUG] [Thread-133938] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:14:09.173 [DEBUG] [Thread-133938] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:14:09.174 [DEBUG] [Thread-133938] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:14:09.183 [DEBUG] [Thread-133938] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:14:09.192 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:14:09.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T20:14:09.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T20:14:09.211 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:14:09.211 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:14:09.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:14:09.220 [DEBUG] [Thread-133938] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:14:12.827 [DEBUG] [Thread-133940 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:14:27.884 [DEBUG] [Thread-133941 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:14:35.255 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:14:35.256 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:14:36.920 [DEBUG] [Thread-133942 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:14:39.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T20:14:39.240 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T20:14:39.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T20:14:39.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 20, 14, 13), 9.83, 53.07, 0.0, 19.45, 19.04, 0, 0, 0, 2, 0, 0),)
2025-12-31T20:14:39.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 20:14:13
2025-12-31T20:14:40.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T20:14:40.214 [DEBUG] [Thread-133943] [transport.py] [_log()] starting thread (client mode): 0xb957a2c0
2025-12-31T20:14:40.214 [DEBUG] [Thread-133943] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:14:40.234 [DEBUG] [Thread-133943] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T20:14:40.234 [INFO] [Thread-133943] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T20:14:40.237 [DEBUG] [Thread-133943] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:14:40.237 [DEBUG] [Thread-133943] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T20:14:40.237 [DEBUG] [Thread-133943] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:14:40.237 [DEBUG] [Thread-133943] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:14:40.237 [DEBUG] [Thread-133943] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:14:40.237 [DEBUG] [Thread-133943] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:14:40.237 [DEBUG] [Thread-133943] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:14:40.238 [DEBUG] [Thread-133943] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:14:40.238 [DEBUG] [Thread-133943] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:14:40.238 [DEBUG] [Thread-133943] [transport.py] [_log()] client lang: <none>
2025-12-31T20:14:40.238 [DEBUG] [Thread-133943] [transport.py] [_log()] server lang: <none>
2025-12-31T20:14:40.238 [DEBUG] [Thread-133943] [transport.py] [_log()] kex follows: False
2025-12-31T20:14:40.238 [DEBUG] [Thread-133943] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:14:40.238 [DEBUG] [Thread-133943] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:14:40.238 [DEBUG] [Thread-133943] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:14:40.238 [DEBUG] [Thread-133943] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:14:40.238 [DEBUG] [Thread-133943] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:14:40.238 [DEBUG] [Thread-133943] [transport.py] [_log()] Compression: none
2025-12-31T20:14:40.238 [DEBUG] [Thread-133943] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:14:40.257 [DEBUG] [Thread-133943] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:14:40.257 [DEBUG] [Thread-133943] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:14:40.258 [DEBUG] [Thread-133943] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T20:14:40.258 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T20:14:40.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:14:40.260 [DEBUG] [Thread-133943] [transport.py] [_log()] userauth is OK
2025-12-31T20:14:40.260 [DEBUG] [Thread-133943] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:14:40.261 [DEBUG] [Thread-133943] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:14:40.261 [DEBUG] [Thread-133943] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T20:14:40.261 [DEBUG] [Thread-133943] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:14:40.297 [INFO] [Thread-133943] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:14:40.298 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:14:40.945 [DEBUG] [Thread-133943] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:14:40.946 [DEBUG] [Thread-133943] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:14:40.946 [DEBUG] [Thread-133943] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T20:14:40.987 [DEBUG] [Thread-133943] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:14:40.987 [DEBUG] [Thread-133943] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:14:40.991 [DEBUG] [Thread-133943] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:14:41.004 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:14:41.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T20:14:41.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T20:14:41.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T20:14:41.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:14:41.015 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T20:14:41.015 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:14:41.015 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:14:41.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T20:14:41.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.759861 -999.00  +19.40   6.72     55  +10.30 1 2 1 1 1   275    0 3.80 -245.27 ----- 3.9 6.7 184.5 20.1 20.6 -16.9 20.4 -16.9 20.2 -17.4 20.4 -18.0
2025-12-31T20:14:41.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T20:14:41.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T20:14:41.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.759861
2025-12-31T20:14:41.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T20:14:41.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T20:14:41.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T20:14:41.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T20:14:41.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T20:14:41.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T20:14:13', tmtdew=9.83, humidity=53.07, cloud=0.0, wind=19.45, temperature=19.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T18:14:11.990', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T20:14:41.018 [DEBUG] [Thread-133943] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:14:41.101 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T20:14:41.112 [DEBUG] [Thread-133946] [transport.py] [_log()] starting thread (client mode): 0xb1775a20
2025-12-31T20:14:41.113 [DEBUG] [Thread-133946] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:14:41.128 [DEBUG] [Thread-133946] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T20:14:41.128 [INFO] [Thread-133946] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T20:14:41.135 [DEBUG] [Thread-133946] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:14:41.136 [DEBUG] [Thread-133946] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T20:14:41.136 [DEBUG] [Thread-133946] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:14:41.136 [DEBUG] [Thread-133946] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:14:41.136 [DEBUG] [Thread-133946] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:14:41.136 [DEBUG] [Thread-133946] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:14:41.136 [DEBUG] [Thread-133946] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:14:41.136 [DEBUG] [Thread-133946] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:14:41.136 [DEBUG] [Thread-133946] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:14:41.136 [DEBUG] [Thread-133946] [transport.py] [_log()] client lang: <none>
2025-12-31T20:14:41.136 [DEBUG] [Thread-133946] [transport.py] [_log()] server lang: <none>
2025-12-31T20:14:41.136 [DEBUG] [Thread-133946] [transport.py] [_log()] kex follows: False
2025-12-31T20:14:41.136 [DEBUG] [Thread-133946] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:14:41.136 [DEBUG] [Thread-133946] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:14:41.136 [DEBUG] [Thread-133946] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:14:41.136 [DEBUG] [Thread-133946] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:14:41.136 [DEBUG] [Thread-133946] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:14:41.136 [DEBUG] [Thread-133946] [transport.py] [_log()] Compression: none
2025-12-31T20:14:41.136 [DEBUG] [Thread-133946] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:14:41.197 [DEBUG] [Thread-133946] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:14:41.197 [DEBUG] [Thread-133946] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:14:41.198 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T20:14:41.198 [DEBUG] [Thread-133946] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T20:14:41.199 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:14:41.256 [DEBUG] [Thread-133946] [transport.py] [_log()] userauth is OK
2025-12-31T20:14:41.257 [DEBUG] [Thread-133946] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:14:41.257 [DEBUG] [Thread-133946] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:14:41.257 [DEBUG] [Thread-133946] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T20:14:41.257 [DEBUG] [Thread-133946] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:14:41.276 [INFO] [Thread-133946] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:14:41.277 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T20:14:41.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:14:42.140 [DEBUG] [Thread-133946] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:14:42.140 [DEBUG] [Thread-133946] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:14:42.188 [DEBUG] [Thread-133946] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:14:42.188 [DEBUG] [Thread-133946] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:14:42.198 [DEBUG] [Thread-133946] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:14:42.207 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:14:42.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-12-31T20:14:42.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T20:14:42.226 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:14:42.226 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:14:42.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:14:42.235 [DEBUG] [Thread-133946] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:14:42.931 [DEBUG] [Thread-133948 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:14:57.977 [DEBUG] [Thread-133949 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:15:12.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T20:15:12.257 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T20:15:12.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T20:15:12.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 20, 14, 46), 9.69, 53.2, 0.0, 16.59, 18.96, 0, 0, 0, 2, 0, 0),)
2025-12-31T20:15:12.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 20:14:46
2025-12-31T20:15:13.003 [DEBUG] [Thread-133950 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:15:13.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T20:15:13.240 [DEBUG] [Thread-133951] [transport.py] [_log()] starting thread (client mode): 0xb17465f0
2025-12-31T20:15:13.240 [DEBUG] [Thread-133951] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:15:13.260 [DEBUG] [Thread-133951] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T20:15:13.260 [INFO] [Thread-133951] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T20:15:13.263 [DEBUG] [Thread-133951] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:15:13.263 [DEBUG] [Thread-133951] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T20:15:13.263 [DEBUG] [Thread-133951] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:15:13.263 [DEBUG] [Thread-133951] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:15:13.263 [DEBUG] [Thread-133951] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:15:13.263 [DEBUG] [Thread-133951] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:15:13.263 [DEBUG] [Thread-133951] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:15:13.263 [DEBUG] [Thread-133951] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:15:13.263 [DEBUG] [Thread-133951] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:15:13.263 [DEBUG] [Thread-133951] [transport.py] [_log()] client lang: <none>
2025-12-31T20:15:13.263 [DEBUG] [Thread-133951] [transport.py] [_log()] server lang: <none>
2025-12-31T20:15:13.263 [DEBUG] [Thread-133951] [transport.py] [_log()] kex follows: False
2025-12-31T20:15:13.263 [DEBUG] [Thread-133951] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:15:13.263 [DEBUG] [Thread-133951] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:15:13.263 [DEBUG] [Thread-133951] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:15:13.263 [DEBUG] [Thread-133951] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:15:13.264 [DEBUG] [Thread-133951] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:15:13.264 [DEBUG] [Thread-133951] [transport.py] [_log()] Compression: none
2025-12-31T20:15:13.264 [DEBUG] [Thread-133951] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:15:13.271 [DEBUG] [Thread-133951] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:15:13.272 [DEBUG] [Thread-133951] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:15:13.272 [DEBUG] [Thread-133951] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T20:15:13.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T20:15:13.273 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:15:13.274 [DEBUG] [Thread-133951] [transport.py] [_log()] userauth is OK
2025-12-31T20:15:13.274 [DEBUG] [Thread-133951] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:15:13.274 [DEBUG] [Thread-133951] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:15:13.274 [DEBUG] [Thread-133951] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T20:15:13.274 [DEBUG] [Thread-133951] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:15:13.291 [INFO] [Thread-133951] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:15:13.293 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:15:14.181 [DEBUG] [Thread-133951] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:15:14.181 [DEBUG] [Thread-133951] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:15:14.181 [DEBUG] [Thread-133951] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T20:15:14.222 [DEBUG] [Thread-133951] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:15:14.222 [DEBUG] [Thread-133951] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:15:14.226 [DEBUG] [Thread-133951] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:15:14.239 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:15:14.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T20:15:14.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T20:15:14.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T20:15:14.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:15:14.252 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T20:15:14.252 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:15:14.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:15:14.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T20:15:14.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.760208 -999.00  +19.40  12.44     55  +10.30 1 2 1 1 1   258    0 3.07 -270.46 ----- 13.0 12.4 199.0 14.6 20.5 -17.1 20.4 -17.2 20.2 -17.4 20.5 -18.2
2025-12-31T20:15:14.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T20:15:14.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T20:15:14.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.760208
2025-12-31T20:15:14.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T20:15:14.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T20:15:14.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T20:15:14.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T20:15:14.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T20:15:14.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T20:14:46', tmtdew=9.69, humidity=53.2, cloud=0.0, wind=16.59, temperature=18.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T18:14:41.971', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T20:15:14.255 [DEBUG] [Thread-133951] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:15:14.334 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T20:15:14.348 [DEBUG] [Thread-133954] [transport.py] [_log()] starting thread (client mode): 0xb6bb1f00
2025-12-31T20:15:14.348 [DEBUG] [Thread-133954] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:15:14.363 [DEBUG] [Thread-133954] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T20:15:14.363 [INFO] [Thread-133954] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T20:15:14.370 [DEBUG] [Thread-133954] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:15:14.371 [DEBUG] [Thread-133954] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T20:15:14.371 [DEBUG] [Thread-133954] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:15:14.371 [DEBUG] [Thread-133954] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:15:14.371 [DEBUG] [Thread-133954] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:15:14.371 [DEBUG] [Thread-133954] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:15:14.371 [DEBUG] [Thread-133954] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:15:14.371 [DEBUG] [Thread-133954] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:15:14.371 [DEBUG] [Thread-133954] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:15:14.371 [DEBUG] [Thread-133954] [transport.py] [_log()] client lang: <none>
2025-12-31T20:15:14.371 [DEBUG] [Thread-133954] [transport.py] [_log()] server lang: <none>
2025-12-31T20:15:14.371 [DEBUG] [Thread-133954] [transport.py] [_log()] kex follows: False
2025-12-31T20:15:14.371 [DEBUG] [Thread-133954] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:15:14.371 [DEBUG] [Thread-133954] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:15:14.371 [DEBUG] [Thread-133954] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:15:14.371 [DEBUG] [Thread-133954] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:15:14.371 [DEBUG] [Thread-133954] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:15:14.371 [DEBUG] [Thread-133954] [transport.py] [_log()] Compression: none
2025-12-31T20:15:14.371 [DEBUG] [Thread-133954] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:15:14.427 [DEBUG] [Thread-133954] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:15:14.428 [DEBUG] [Thread-133954] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:15:14.428 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T20:15:14.429 [DEBUG] [Thread-133954] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T20:15:14.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:15:14.484 [DEBUG] [Thread-133954] [transport.py] [_log()] userauth is OK
2025-12-31T20:15:14.484 [DEBUG] [Thread-133954] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:15:14.484 [DEBUG] [Thread-133954] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:15:14.484 [DEBUG] [Thread-133954] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T20:15:14.484 [DEBUG] [Thread-133954] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:15:14.502 [INFO] [Thread-133954] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:15:14.502 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T20:15:14.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:15:15.298 [DEBUG] [Thread-133954] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:15:15.298 [DEBUG] [Thread-133954] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:15:15.346 [DEBUG] [Thread-133954] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:15:15.346 [DEBUG] [Thread-133954] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:15:15.356 [DEBUG] [Thread-133954] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:15:15.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:15: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-12-31T20:15:15.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T20:15:15.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:15:15.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:15:15.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:15:15.392 [DEBUG] [Thread-133954] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:15:28.039 [DEBUG] [Thread-133956 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:15:36.987 [DEBUG] [Thread-133957 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:15:40.548 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:15:40.549 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:15:43.098 [DEBUG] [Thread-133958 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:15:45.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T20:15:45.414 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T20:15:45.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T20:15:46.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 20, 15, 18), 9.65, 53.33, 0.0, 18.17, 18.96, 0, 0, 0, 2, 0, 0),)
2025-12-31T20:15:46.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 20:15:18
2025-12-31T20:15:46.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T20:15:46.402 [DEBUG] [Thread-133959] [transport.py] [_log()] starting thread (client mode): 0xb1784700
2025-12-31T20:15:46.402 [DEBUG] [Thread-133959] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:15:46.427 [DEBUG] [Thread-133959] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T20:15:46.427 [INFO] [Thread-133959] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T20:15:46.430 [DEBUG] [Thread-133959] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:15:46.431 [DEBUG] [Thread-133959] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T20:15:46.431 [DEBUG] [Thread-133959] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:15:46.431 [DEBUG] [Thread-133959] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:15:46.431 [DEBUG] [Thread-133959] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:15:46.431 [DEBUG] [Thread-133959] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:15:46.431 [DEBUG] [Thread-133959] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:15:46.431 [DEBUG] [Thread-133959] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:15:46.431 [DEBUG] [Thread-133959] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:15:46.431 [DEBUG] [Thread-133959] [transport.py] [_log()] client lang: <none>
2025-12-31T20:15:46.431 [DEBUG] [Thread-133959] [transport.py] [_log()] server lang: <none>
2025-12-31T20:15:46.431 [DEBUG] [Thread-133959] [transport.py] [_log()] kex follows: False
2025-12-31T20:15:46.431 [DEBUG] [Thread-133959] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:15:46.431 [DEBUG] [Thread-133959] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:15:46.431 [DEBUG] [Thread-133959] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:15:46.431 [DEBUG] [Thread-133959] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:15:46.431 [DEBUG] [Thread-133959] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:15:46.431 [DEBUG] [Thread-133959] [transport.py] [_log()] Compression: none
2025-12-31T20:15:46.431 [DEBUG] [Thread-133959] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:15:46.449 [DEBUG] [Thread-133959] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:15:46.450 [DEBUG] [Thread-133959] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:15:46.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T20:15:46.451 [DEBUG] [Thread-133959] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T20:15:46.451 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:15:46.453 [DEBUG] [Thread-133959] [transport.py] [_log()] userauth is OK
2025-12-31T20:15:46.453 [DEBUG] [Thread-133959] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:15:46.453 [DEBUG] [Thread-133959] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:15:46.453 [DEBUG] [Thread-133959] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T20:15:46.453 [DEBUG] [Thread-133959] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:15:46.475 [INFO] [Thread-133959] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:15:46.476 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:15:47.136 [DEBUG] [Thread-133959] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:15:47.137 [DEBUG] [Thread-133959] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:15:47.137 [DEBUG] [Thread-133959] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T20:15:47.177 [DEBUG] [Thread-133959] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:15:47.177 [DEBUG] [Thread-133959] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:15:47.181 [DEBUG] [Thread-133959] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:15:47.192 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:15:47.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T20:15:47.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T20:15:47.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T20:15:47.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:15:47.203 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T20:15:47.203 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:15:47.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:15:47.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T20:15:47.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.760555 -999.00  +19.40  11.72     55  +10.30 1 2 1 1 1   242    0 3.08 -265.89 ----- 7.3 11.7 202.4 15.7 20.5 -17.4 20.4 -17.5 20.2 -17.7 20.4 -18.3
2025-12-31T20:15:47.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T20:15:47.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T20:15:47.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.760555
2025-12-31T20:15:47.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T20:15:47.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T20:15:47.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T20:15:47.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T20:15:47.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T20:15:47.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T20:15:18', tmtdew=9.65, humidity=53.33, cloud=0.0, wind=18.17, temperature=18.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T18:15:11.952', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T20:15:47.206 [DEBUG] [Thread-133959] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:15:47.290 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T20:15:47.299 [DEBUG] [Thread-133962] [transport.py] [_log()] starting thread (client mode): 0xb1786a10
2025-12-31T20:15:47.300 [DEBUG] [Thread-133962] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:15:47.318 [DEBUG] [Thread-133962] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T20:15:47.318 [INFO] [Thread-133962] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T20:15:47.325 [DEBUG] [Thread-133962] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:15:47.326 [DEBUG] [Thread-133962] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T20:15:47.326 [DEBUG] [Thread-133962] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:15:47.326 [DEBUG] [Thread-133962] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:15:47.326 [DEBUG] [Thread-133962] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:15:47.326 [DEBUG] [Thread-133962] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:15:47.326 [DEBUG] [Thread-133962] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:15:47.326 [DEBUG] [Thread-133962] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:15:47.326 [DEBUG] [Thread-133962] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:15:47.326 [DEBUG] [Thread-133962] [transport.py] [_log()] client lang: <none>
2025-12-31T20:15:47.326 [DEBUG] [Thread-133962] [transport.py] [_log()] server lang: <none>
2025-12-31T20:15:47.326 [DEBUG] [Thread-133962] [transport.py] [_log()] kex follows: False
2025-12-31T20:15:47.326 [DEBUG] [Thread-133962] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:15:47.326 [DEBUG] [Thread-133962] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:15:47.326 [DEBUG] [Thread-133962] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:15:47.326 [DEBUG] [Thread-133962] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:15:47.326 [DEBUG] [Thread-133962] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:15:47.326 [DEBUG] [Thread-133962] [transport.py] [_log()] Compression: none
2025-12-31T20:15:47.326 [DEBUG] [Thread-133962] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:15:47.386 [DEBUG] [Thread-133962] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:15:47.387 [DEBUG] [Thread-133962] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:15:47.387 [DEBUG] [Thread-133962] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T20:15:47.387 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T20:15:47.388 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:15:47.445 [DEBUG] [Thread-133962] [transport.py] [_log()] userauth is OK
2025-12-31T20:15:47.445 [DEBUG] [Thread-133962] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:15:47.446 [DEBUG] [Thread-133962] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:15:47.446 [DEBUG] [Thread-133962] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T20:15:47.446 [DEBUG] [Thread-133962] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:15:47.465 [INFO] [Thread-133962] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:15:47.466 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T20:15:47.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:15:48.380 [DEBUG] [Thread-133962] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:15:48.380 [DEBUG] [Thread-133962] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:15:48.428 [DEBUG] [Thread-133962] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:15:48.428 [DEBUG] [Thread-133962] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:15:48.438 [DEBUG] [Thread-133962] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:15:48.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:15:48.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T20:15:48.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T20:15:48.465 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:15:48.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:15:48.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:15:48.474 [DEBUG] [Thread-133962] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:15:58.133 [DEBUG] [Thread-133964 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:16:13.180 [DEBUG] [Thread-133965 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:16:18.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T20:16:18.468 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T20:16:18.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T20:16:19.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 20, 15, 50), 9.63, 53.38, 0.0, 18.23, 18.93, 0, 0, 0, 2, 0, 0),)
2025-12-31T20:16:19.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 20:15:50
2025-12-31T20:16:19.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T20:16:19.468 [DEBUG] [Thread-133966] [transport.py] [_log()] starting thread (client mode): 0xb9578940
2025-12-31T20:16:19.468 [DEBUG] [Thread-133966] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:16:19.487 [DEBUG] [Thread-133966] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T20:16:19.487 [INFO] [Thread-133966] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T20:16:19.491 [DEBUG] [Thread-133966] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:16:19.491 [DEBUG] [Thread-133966] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T20:16:19.491 [DEBUG] [Thread-133966] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:16:19.491 [DEBUG] [Thread-133966] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:16:19.491 [DEBUG] [Thread-133966] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:16:19.491 [DEBUG] [Thread-133966] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:16:19.491 [DEBUG] [Thread-133966] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:16:19.491 [DEBUG] [Thread-133966] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:16:19.491 [DEBUG] [Thread-133966] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:16:19.491 [DEBUG] [Thread-133966] [transport.py] [_log()] client lang: <none>
2025-12-31T20:16:19.491 [DEBUG] [Thread-133966] [transport.py] [_log()] server lang: <none>
2025-12-31T20:16:19.491 [DEBUG] [Thread-133966] [transport.py] [_log()] kex follows: False
2025-12-31T20:16:19.491 [DEBUG] [Thread-133966] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:16:19.491 [DEBUG] [Thread-133966] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:16:19.491 [DEBUG] [Thread-133966] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:16:19.491 [DEBUG] [Thread-133966] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:16:19.491 [DEBUG] [Thread-133966] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:16:19.491 [DEBUG] [Thread-133966] [transport.py] [_log()] Compression: none
2025-12-31T20:16:19.491 [DEBUG] [Thread-133966] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:16:19.508 [DEBUG] [Thread-133966] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:16:19.508 [DEBUG] [Thread-133966] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:16:19.509 [DEBUG] [Thread-133966] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T20:16:19.509 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T20:16:19.510 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:16:19.511 [DEBUG] [Thread-133966] [transport.py] [_log()] userauth is OK
2025-12-31T20:16:19.511 [DEBUG] [Thread-133966] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:16:19.511 [DEBUG] [Thread-133966] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:16:19.511 [DEBUG] [Thread-133966] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T20:16:19.511 [DEBUG] [Thread-133966] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:16:19.546 [INFO] [Thread-133966] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:16:19.547 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:16:20.210 [DEBUG] [Thread-133966] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:16:20.210 [DEBUG] [Thread-133966] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:16:20.210 [DEBUG] [Thread-133966] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T20:16:20.251 [DEBUG] [Thread-133966] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:16:20.251 [DEBUG] [Thread-133966] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:16:20.255 [DEBUG] [Thread-133966] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:16:20.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:16:20.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T20:16:20.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T20:16:20.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T20:16:20.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:16:20.279 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T20:16:20.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:16:20.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:16:20.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T20:16:20.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.760903 -999.00  +19.40   9.81     55  +10.30 1 2 1 1 1   227    0 2.57 -284.06 ----- 6.7 9.8 208.4 12.7 20.5 -17.5 20.4 -17.7 20.2 -17.9 20.4 -18.5
2025-12-31T20:16:20.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T20:16:20.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T20:16:20.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.760903
2025-12-31T20:16:20.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T20:16:20.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T20:16:20.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T20:16:20.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T20:16:20.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T20:16:20.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T20:15:50', tmtdew=9.63, humidity=53.38, cloud=0.0, wind=18.23, temperature=18.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T18:15:42.019', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T20:16:20.282 [DEBUG] [Thread-133966] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:16:20.365 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T20:16:20.387 [DEBUG] [Thread-133969] [transport.py] [_log()] starting thread (client mode): 0xb9578ac0
2025-12-31T20:16:20.387 [DEBUG] [Thread-133969] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:16:20.405 [DEBUG] [Thread-133969] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T20:16:20.405 [INFO] [Thread-133969] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T20:16:20.412 [DEBUG] [Thread-133969] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:16:20.413 [DEBUG] [Thread-133969] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T20:16:20.413 [DEBUG] [Thread-133969] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:16:20.413 [DEBUG] [Thread-133969] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:16:20.413 [DEBUG] [Thread-133969] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:16:20.413 [DEBUG] [Thread-133969] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:16:20.413 [DEBUG] [Thread-133969] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:16:20.413 [DEBUG] [Thread-133969] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:16:20.413 [DEBUG] [Thread-133969] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:16:20.414 [DEBUG] [Thread-133969] [transport.py] [_log()] client lang: <none>
2025-12-31T20:16:20.414 [DEBUG] [Thread-133969] [transport.py] [_log()] server lang: <none>
2025-12-31T20:16:20.414 [DEBUG] [Thread-133969] [transport.py] [_log()] kex follows: False
2025-12-31T20:16:20.414 [DEBUG] [Thread-133969] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:16:20.414 [DEBUG] [Thread-133969] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:16:20.414 [DEBUG] [Thread-133969] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:16:20.414 [DEBUG] [Thread-133969] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:16:20.414 [DEBUG] [Thread-133969] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:16:20.414 [DEBUG] [Thread-133969] [transport.py] [_log()] Compression: none
2025-12-31T20:16:20.414 [DEBUG] [Thread-133969] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:16:20.472 [DEBUG] [Thread-133969] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:16:20.472 [DEBUG] [Thread-133969] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:16:20.473 [DEBUG] [Thread-133969] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T20:16:20.473 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T20:16:20.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:16:20.528 [DEBUG] [Thread-133969] [transport.py] [_log()] userauth is OK
2025-12-31T20:16:20.528 [DEBUG] [Thread-133969] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:16:20.528 [DEBUG] [Thread-133969] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:16:20.529 [DEBUG] [Thread-133969] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T20:16:20.529 [DEBUG] [Thread-133969] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:16:20.547 [INFO] [Thread-133969] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:16:20.547 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T20:16:20.547 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:16:21.344 [DEBUG] [Thread-133969] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:16:21.344 [DEBUG] [Thread-133969] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:16:21.392 [DEBUG] [Thread-133969] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:16:21.392 [DEBUG] [Thread-133969] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:16:21.401 [DEBUG] [Thread-133969] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:16:21.410 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:16: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')
2025-12-31T20:16:21.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T20:16:21.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:16:21.430 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:16:21.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:16:21.438 [DEBUG] [Thread-133969] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:16:28.208 [DEBUG] [Thread-133971 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:16:37.072 [DEBUG] [Thread-133972 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:16:43.258 [DEBUG] [Thread-133973 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:16:45.469 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:16:45.470 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:16:51.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T20:16:51.460 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T20:16:51.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T20:16:52.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 20, 16, 22), 9.61, 53.45, 0.0, 16.06, 18.9, 0, 0, 0, 2, 0, 0),)
2025-12-31T20:16:52.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 20:16:22
2025-12-31T20:16:52.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T20:16:52.512 [DEBUG] [Thread-133974] [transport.py] [_log()] starting thread (client mode): 0xb1786800
2025-12-31T20:16:52.512 [DEBUG] [Thread-133974] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:16:52.533 [DEBUG] [Thread-133974] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T20:16:52.534 [INFO] [Thread-133974] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T20:16:52.537 [DEBUG] [Thread-133974] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:16:52.537 [DEBUG] [Thread-133974] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T20:16:52.537 [DEBUG] [Thread-133974] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:16:52.537 [DEBUG] [Thread-133974] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:16:52.537 [DEBUG] [Thread-133974] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:16:52.537 [DEBUG] [Thread-133974] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:16:52.537 [DEBUG] [Thread-133974] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:16:52.537 [DEBUG] [Thread-133974] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:16:52.537 [DEBUG] [Thread-133974] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:16:52.537 [DEBUG] [Thread-133974] [transport.py] [_log()] client lang: <none>
2025-12-31T20:16:52.537 [DEBUG] [Thread-133974] [transport.py] [_log()] server lang: <none>
2025-12-31T20:16:52.537 [DEBUG] [Thread-133974] [transport.py] [_log()] kex follows: False
2025-12-31T20:16:52.537 [DEBUG] [Thread-133974] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:16:52.537 [DEBUG] [Thread-133974] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:16:52.537 [DEBUG] [Thread-133974] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:16:52.537 [DEBUG] [Thread-133974] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:16:52.537 [DEBUG] [Thread-133974] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:16:52.537 [DEBUG] [Thread-133974] [transport.py] [_log()] Compression: none
2025-12-31T20:16:52.537 [DEBUG] [Thread-133974] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:16:52.552 [DEBUG] [Thread-133974] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:16:52.553 [DEBUG] [Thread-133974] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:16:52.553 [DEBUG] [Thread-133974] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T20:16:52.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T20:16:52.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:16:52.554 [DEBUG] [Thread-133974] [transport.py] [_log()] userauth is OK
2025-12-31T20:16:52.554 [DEBUG] [Thread-133974] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:16:52.554 [DEBUG] [Thread-133974] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:16:52.554 [DEBUG] [Thread-133974] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T20:16:52.554 [DEBUG] [Thread-133974] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:16:52.565 [INFO] [Thread-133974] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:16:52.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:16:53.201 [DEBUG] [Thread-133974] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:16:53.201 [DEBUG] [Thread-133974] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:16:53.201 [DEBUG] [Thread-133974] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T20:16:53.242 [DEBUG] [Thread-133974] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:16:53.242 [DEBUG] [Thread-133974] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:16:53.244 [DEBUG] [Thread-133974] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:16:53.259 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:16:53.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T20:16:53.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T20:16:53.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T20:16:53.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:16:53.268 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T20:16:53.268 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:16:53.268 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:16:53.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T20:16:53.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.761250 -999.00  +19.40  14.53     55  +10.30 1 2 1 1 1   212    0 2.41 -290.01 ----- 10.2 14.5 203.2 17.6 20.5 -18.0 20.4 -18.5 20.1 -18.2 20.4 -18.8
2025-12-31T20:16:53.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T20:16:53.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T20:16:53.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.761250
2025-12-31T20:16:53.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T20:16:53.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T20:16:53.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T20:16:53.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T20:16:53.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T20:16:53.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T20:16:22', tmtdew=9.61, humidity=53.45, cloud=0.0, wind=16.06, temperature=18.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T18:16:12.000', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T20:16:53.270 [DEBUG] [Thread-133974] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:16:53.344 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T20:16:53.356 [DEBUG] [Thread-133977] [transport.py] [_log()] starting thread (client mode): 0xb1786980
2025-12-31T20:16:53.356 [DEBUG] [Thread-133977] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:16:53.370 [DEBUG] [Thread-133977] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T20:16:53.370 [INFO] [Thread-133977] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T20:16:53.378 [DEBUG] [Thread-133977] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:16:53.378 [DEBUG] [Thread-133977] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T20:16:53.378 [DEBUG] [Thread-133977] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:16:53.378 [DEBUG] [Thread-133977] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:16:53.378 [DEBUG] [Thread-133977] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:16:53.378 [DEBUG] [Thread-133977] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:16:53.378 [DEBUG] [Thread-133977] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:16:53.378 [DEBUG] [Thread-133977] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:16:53.378 [DEBUG] [Thread-133977] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:16:53.378 [DEBUG] [Thread-133977] [transport.py] [_log()] client lang: <none>
2025-12-31T20:16:53.378 [DEBUG] [Thread-133977] [transport.py] [_log()] server lang: <none>
2025-12-31T20:16:53.378 [DEBUG] [Thread-133977] [transport.py] [_log()] kex follows: False
2025-12-31T20:16:53.378 [DEBUG] [Thread-133977] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:16:53.378 [DEBUG] [Thread-133977] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:16:53.378 [DEBUG] [Thread-133977] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:16:53.378 [DEBUG] [Thread-133977] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:16:53.378 [DEBUG] [Thread-133977] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:16:53.378 [DEBUG] [Thread-133977] [transport.py] [_log()] Compression: none
2025-12-31T20:16:53.378 [DEBUG] [Thread-133977] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:16:53.432 [DEBUG] [Thread-133977] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:16:53.432 [DEBUG] [Thread-133977] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:16:53.433 [DEBUG] [Thread-133977] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T20:16:53.433 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T20:16:53.433 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:16:53.490 [DEBUG] [Thread-133977] [transport.py] [_log()] userauth is OK
2025-12-31T20:16:53.490 [DEBUG] [Thread-133977] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:16:53.490 [DEBUG] [Thread-133977] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:16:53.490 [DEBUG] [Thread-133977] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T20:16:53.490 [DEBUG] [Thread-133977] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:16:53.503 [INFO] [Thread-133977] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:16:53.503 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T20:16:53.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:16:54.292 [DEBUG] [Thread-133977] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:16:54.292 [DEBUG] [Thread-133977] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:16:54.341 [DEBUG] [Thread-133977] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:16:54.341 [DEBUG] [Thread-133977] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:16:54.349 [DEBUG] [Thread-133977] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:16:54.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:16:54.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T20:16:54.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T20:16:54.372 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:16:54.372 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:16:54.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:16:54.380 [DEBUG] [Thread-133977] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:16:58.288 [DEBUG] [Thread-133979 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:17:13.342 [DEBUG] [Thread-133980 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:17:24.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T20:17:24.401 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T20:17:24.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-12-31T20:17:25.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 20, 16, 54), 9.51, 53.98, 0.0, 21.77, 18.88, 0, 0, 0, 2, 0, 0),)
2025-12-31T20:17:25.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 20:16:54
2025-12-31T20:17:25.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T20:17:25.401 [DEBUG] [Thread-133981] [transport.py] [_log()] starting thread (client mode): 0xb955bfd0
2025-12-31T20:17:25.401 [DEBUG] [Thread-133981] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:17:25.420 [DEBUG] [Thread-133981] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T20:17:25.420 [INFO] [Thread-133981] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T20:17:25.424 [DEBUG] [Thread-133981] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:17:25.424 [DEBUG] [Thread-133981] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T20:17:25.424 [DEBUG] [Thread-133981] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:17:25.424 [DEBUG] [Thread-133981] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:17:25.424 [DEBUG] [Thread-133981] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:17:25.424 [DEBUG] [Thread-133981] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:17:25.424 [DEBUG] [Thread-133981] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:17:25.424 [DEBUG] [Thread-133981] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:17:25.424 [DEBUG] [Thread-133981] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:17:25.424 [DEBUG] [Thread-133981] [transport.py] [_log()] client lang: <none>
2025-12-31T20:17:25.424 [DEBUG] [Thread-133981] [transport.py] [_log()] server lang: <none>
2025-12-31T20:17:25.424 [DEBUG] [Thread-133981] [transport.py] [_log()] kex follows: False
2025-12-31T20:17:25.424 [DEBUG] [Thread-133981] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:17:25.424 [DEBUG] [Thread-133981] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:17:25.424 [DEBUG] [Thread-133981] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:17:25.424 [DEBUG] [Thread-133981] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:17:25.425 [DEBUG] [Thread-133981] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:17:25.425 [DEBUG] [Thread-133981] [transport.py] [_log()] Compression: none
2025-12-31T20:17:25.425 [DEBUG] [Thread-133981] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:17:25.440 [DEBUG] [Thread-133981] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:17:25.441 [DEBUG] [Thread-133981] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:17:25.442 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T20:17:25.442 [DEBUG] [Thread-133981] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T20:17:25.442 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:17:25.444 [DEBUG] [Thread-133981] [transport.py] [_log()] userauth is OK
2025-12-31T20:17:25.444 [DEBUG] [Thread-133981] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:17:25.444 [DEBUG] [Thread-133981] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:17:25.444 [DEBUG] [Thread-133981] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T20:17:25.444 [DEBUG] [Thread-133981] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:17:25.462 [INFO] [Thread-133981] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:17:25.462 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:17:26.110 [DEBUG] [Thread-133981] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:17:26.111 [DEBUG] [Thread-133981] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:17:26.111 [DEBUG] [Thread-133981] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T20:17:26.152 [DEBUG] [Thread-133981] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:17:26.152 [DEBUG] [Thread-133981] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:17:26.156 [DEBUG] [Thread-133981] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:17:26.161 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:17:26.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T20:17:26.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T20:17:26.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T20:17:26.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:17:26.173 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T20:17:26.174 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:17:26.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:17:26.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T20:17:26.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.761597 -999.00  +19.30  17.11     56  +10.40 1 2 1 1 1   198    0 2.24 -286.45 ----- 10.2 17.1 204.9 19.9 20.5 -18.3 20.3 -18.2 20.1 -18.5 20.3 -18.9
2025-12-31T20:17:26.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T20:17:26.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T20:17:26.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.761597
2025-12-31T20:17:26.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T20:17:26.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T20:17:26.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T20:17:26.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T20:17:26.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T20:17:26.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T20:16:54', tmtdew=9.51, humidity=53.98, cloud=0.0, wind=21.77, temperature=18.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T18:16:41.981', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T20:17:26.176 [DEBUG] [Thread-133981] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:17:26.256 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T20:17:26.268 [DEBUG] [Thread-133984] [transport.py] [_log()] starting thread (client mode): 0xb6bb2140
2025-12-31T20:17:26.268 [DEBUG] [Thread-133984] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:17:26.283 [DEBUG] [Thread-133984] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T20:17:26.284 [INFO] [Thread-133984] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T20:17:26.291 [DEBUG] [Thread-133984] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:17:26.291 [DEBUG] [Thread-133984] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T20:17:26.291 [DEBUG] [Thread-133984] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:17:26.291 [DEBUG] [Thread-133984] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:17:26.291 [DEBUG] [Thread-133984] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:17:26.291 [DEBUG] [Thread-133984] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:17:26.291 [DEBUG] [Thread-133984] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:17:26.291 [DEBUG] [Thread-133984] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:17:26.291 [DEBUG] [Thread-133984] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:17:26.291 [DEBUG] [Thread-133984] [transport.py] [_log()] client lang: <none>
2025-12-31T20:17:26.291 [DEBUG] [Thread-133984] [transport.py] [_log()] server lang: <none>
2025-12-31T20:17:26.291 [DEBUG] [Thread-133984] [transport.py] [_log()] kex follows: False
2025-12-31T20:17:26.291 [DEBUG] [Thread-133984] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:17:26.291 [DEBUG] [Thread-133984] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:17:26.291 [DEBUG] [Thread-133984] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:17:26.292 [DEBUG] [Thread-133984] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:17:26.292 [DEBUG] [Thread-133984] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:17:26.292 [DEBUG] [Thread-133984] [transport.py] [_log()] Compression: none
2025-12-31T20:17:26.292 [DEBUG] [Thread-133984] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:17:26.347 [DEBUG] [Thread-133984] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:17:26.348 [DEBUG] [Thread-133984] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:17:26.348 [DEBUG] [Thread-133984] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T20:17:26.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T20:17:26.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:17:26.404 [DEBUG] [Thread-133984] [transport.py] [_log()] userauth is OK
2025-12-31T20:17:26.405 [DEBUG] [Thread-133984] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:17:26.405 [DEBUG] [Thread-133984] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:17:26.405 [DEBUG] [Thread-133984] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T20:17:26.405 [DEBUG] [Thread-133984] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:17:26.424 [INFO] [Thread-133984] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:17:26.424 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T20:17:26.425 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:17:27.239 [DEBUG] [Thread-133984] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:17:27.239 [DEBUG] [Thread-133984] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:17:27.286 [DEBUG] [Thread-133984] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:17:27.286 [DEBUG] [Thread-133984] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:17:27.294 [DEBUG] [Thread-133984] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:17:27.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:17:27.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T20:17:27.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T20:17:27.318 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:17:27.318 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:17:27.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:17:27.326 [DEBUG] [Thread-133984] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:17:28.375 [DEBUG] [Thread-133986 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:17:37.132 [DEBUG] [Thread-133987 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:17:43.425 [DEBUG] [Thread-133988 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:17:51.552 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:17:51.553 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:17:57.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T20:17:57.330 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T20:17:57.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T20:17:58.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 20, 17, 26), 9.46, 54.13, 0.0, 20.87, 18.8, 0, 0, 0, 2, 0, 0),)
2025-12-31T20:17:58.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 20:17:26
2025-12-31T20:17:58.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T20:17:58.326 [DEBUG] [Thread-133989] [transport.py] [_log()] starting thread (client mode): 0xb1784a90
2025-12-31T20:17:58.327 [DEBUG] [Thread-133989] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:17:58.347 [DEBUG] [Thread-133989] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T20:17:58.348 [INFO] [Thread-133989] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T20:17:58.350 [DEBUG] [Thread-133989] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:17:58.351 [DEBUG] [Thread-133989] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T20:17:58.351 [DEBUG] [Thread-133989] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:17:58.351 [DEBUG] [Thread-133989] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:17:58.351 [DEBUG] [Thread-133989] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:17:58.351 [DEBUG] [Thread-133989] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:17:58.351 [DEBUG] [Thread-133989] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:17:58.351 [DEBUG] [Thread-133989] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:17:58.351 [DEBUG] [Thread-133989] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:17:58.351 [DEBUG] [Thread-133989] [transport.py] [_log()] client lang: <none>
2025-12-31T20:17:58.351 [DEBUG] [Thread-133989] [transport.py] [_log()] server lang: <none>
2025-12-31T20:17:58.352 [DEBUG] [Thread-133989] [transport.py] [_log()] kex follows: False
2025-12-31T20:17:58.352 [DEBUG] [Thread-133989] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:17:58.352 [DEBUG] [Thread-133989] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:17:58.352 [DEBUG] [Thread-133989] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:17:58.352 [DEBUG] [Thread-133989] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:17:58.352 [DEBUG] [Thread-133989] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:17:58.352 [DEBUG] [Thread-133989] [transport.py] [_log()] Compression: none
2025-12-31T20:17:58.352 [DEBUG] [Thread-133989] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:17:58.370 [DEBUG] [Thread-133989] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:17:58.371 [DEBUG] [Thread-133989] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:17:58.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T20:17:58.372 [DEBUG] [Thread-133989] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T20:17:58.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:17:58.374 [DEBUG] [Thread-133989] [transport.py] [_log()] userauth is OK
2025-12-31T20:17:58.374 [DEBUG] [Thread-133989] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:17:58.374 [DEBUG] [Thread-133989] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:17:58.374 [DEBUG] [Thread-133989] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T20:17:58.374 [DEBUG] [Thread-133989] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:17:58.393 [INFO] [Thread-133989] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:17:58.394 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:17:58.463 [DEBUG] [Thread-133991 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:17:58.949 [DEBUG] [Thread-133989] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:17:58.949 [DEBUG] [Thread-133989] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:17:58.949 [DEBUG] [Thread-133989] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T20:17:58.989 [DEBUG] [Thread-133989] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:17:58.989 [DEBUG] [Thread-133989] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:17:58.992 [DEBUG] [Thread-133989] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:17:59.005 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:17:59.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T20:17:59.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T20:17:59.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T20:17:59.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:17:59.011 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T20:17:59.011 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:17:59.011 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:17:59.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T20:17:59.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.761944 -999.00  +19.20  14.78     56  +10.40 1 2 1 1 1   185    0 1.95 -291.93 ----- 16.0 14.8 200.7 16.9 20.4 -18.4 20.3 -18.3 20.1 -18.7 20.3 -19.2
2025-12-31T20:17:59.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T20:17:59.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T20:17:59.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.761944
2025-12-31T20:17:59.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T20:17:59.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T20:17:59.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T20:17:59.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T20:17:59.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T20:17:59.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T20:17:26', tmtdew=9.46, humidity=54.13, cloud=0.0, wind=20.87, temperature=18.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T18:17:11.962', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T20:17:59.012 [DEBUG] [Thread-133989] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:17:59.086 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T20:17:59.098 [DEBUG] [Thread-133993] [transport.py] [_log()] starting thread (client mode): 0xb6bba1a0
2025-12-31T20:17:59.098 [DEBUG] [Thread-133993] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:17:59.113 [DEBUG] [Thread-133993] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T20:17:59.113 [INFO] [Thread-133993] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T20:17:59.121 [DEBUG] [Thread-133993] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:17:59.121 [DEBUG] [Thread-133993] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T20:17:59.121 [DEBUG] [Thread-133993] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:17:59.121 [DEBUG] [Thread-133993] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:17:59.121 [DEBUG] [Thread-133993] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:17:59.121 [DEBUG] [Thread-133993] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:17:59.121 [DEBUG] [Thread-133993] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:17:59.121 [DEBUG] [Thread-133993] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:17:59.121 [DEBUG] [Thread-133993] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:17:59.121 [DEBUG] [Thread-133993] [transport.py] [_log()] client lang: <none>
2025-12-31T20:17:59.121 [DEBUG] [Thread-133993] [transport.py] [_log()] server lang: <none>
2025-12-31T20:17:59.121 [DEBUG] [Thread-133993] [transport.py] [_log()] kex follows: False
2025-12-31T20:17:59.121 [DEBUG] [Thread-133993] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:17:59.121 [DEBUG] [Thread-133993] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:17:59.121 [DEBUG] [Thread-133993] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:17:59.121 [DEBUG] [Thread-133993] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:17:59.121 [DEBUG] [Thread-133993] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:17:59.121 [DEBUG] [Thread-133993] [transport.py] [_log()] Compression: none
2025-12-31T20:17:59.121 [DEBUG] [Thread-133993] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:17:59.176 [DEBUG] [Thread-133993] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:17:59.177 [DEBUG] [Thread-133993] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:17:59.177 [DEBUG] [Thread-133993] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T20:17:59.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T20:17:59.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:17:59.234 [DEBUG] [Thread-133993] [transport.py] [_log()] userauth is OK
2025-12-31T20:17:59.234 [DEBUG] [Thread-133993] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:17:59.234 [DEBUG] [Thread-133993] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:17:59.234 [DEBUG] [Thread-133993] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T20:17:59.234 [DEBUG] [Thread-133993] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:17:59.252 [INFO] [Thread-133993] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:17:59.252 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T20:17:59.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:18:00.056 [DEBUG] [Thread-133993] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:18:00.056 [DEBUG] [Thread-133993] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:18:00.104 [DEBUG] [Thread-133993] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:18:00.104 [DEBUG] [Thread-133993] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:18:00.113 [DEBUG] [Thread-133993] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:18:00.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:18:00.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T20:18:00.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T20:18:00.137 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:18:00.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:18:00.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:18:00.146 [DEBUG] [Thread-133993] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:18:13.495 [DEBUG] [Thread-133995 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:18:28.544 [DEBUG] [Thread-133996 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:18:30.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T20:18:30.169 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T20:18:30.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T20:18:30.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 20, 17, 58), 9.37, 54.26, 0.0, 20.1, 18.76, 0, 0, 0, 2, 0, 0),)
2025-12-31T20:18:30.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 20:17:58
2025-12-31T20:18:31.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T20:18:31.210 [DEBUG] [Thread-133997] [transport.py] [_log()] starting thread (client mode): 0xb6bb2350
2025-12-31T20:18:31.210 [DEBUG] [Thread-133997] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:18:31.231 [DEBUG] [Thread-133997] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T20:18:31.231 [INFO] [Thread-133997] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T20:18:31.234 [DEBUG] [Thread-133997] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:18:31.234 [DEBUG] [Thread-133997] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T20:18:31.235 [DEBUG] [Thread-133997] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:18:31.235 [DEBUG] [Thread-133997] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:18:31.235 [DEBUG] [Thread-133997] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:18:31.235 [DEBUG] [Thread-133997] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:18:31.235 [DEBUG] [Thread-133997] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:18:31.235 [DEBUG] [Thread-133997] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:18:31.235 [DEBUG] [Thread-133997] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:18:31.235 [DEBUG] [Thread-133997] [transport.py] [_log()] client lang: <none>
2025-12-31T20:18:31.235 [DEBUG] [Thread-133997] [transport.py] [_log()] server lang: <none>
2025-12-31T20:18:31.235 [DEBUG] [Thread-133997] [transport.py] [_log()] kex follows: False
2025-12-31T20:18:31.235 [DEBUG] [Thread-133997] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:18:31.235 [DEBUG] [Thread-133997] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:18:31.235 [DEBUG] [Thread-133997] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:18:31.235 [DEBUG] [Thread-133997] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:18:31.235 [DEBUG] [Thread-133997] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:18:31.235 [DEBUG] [Thread-133997] [transport.py] [_log()] Compression: none
2025-12-31T20:18:31.235 [DEBUG] [Thread-133997] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:18:31.242 [DEBUG] [Thread-133997] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:18:31.242 [DEBUG] [Thread-133997] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:18:31.242 [DEBUG] [Thread-133997] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T20:18:31.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T20:18:31.243 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:18:31.243 [DEBUG] [Thread-133997] [transport.py] [_log()] userauth is OK
2025-12-31T20:18:31.243 [DEBUG] [Thread-133997] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:18:31.243 [DEBUG] [Thread-133997] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:18:31.243 [DEBUG] [Thread-133997] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T20:18:31.243 [DEBUG] [Thread-133997] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:18:31.258 [INFO] [Thread-133997] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:18:31.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:18:31.908 [DEBUG] [Thread-133997] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:18:31.908 [DEBUG] [Thread-133997] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:18:31.908 [DEBUG] [Thread-133997] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T20:18:31.950 [DEBUG] [Thread-133997] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:18:31.950 [DEBUG] [Thread-133997] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:18:31.952 [DEBUG] [Thread-133997] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:18:31.963 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:18:31.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T20:18:31.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T20:18:31.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T20:18:31.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:18:31.968 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T20:18:31.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:18:31.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:18:31.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T20:18:31.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.762291 -999.00  +19.10  14.58     57  +10.50 1 2 1 1 1   172    0 2.46 -276.76 ----- 10.5 14.6 202.2 17.9 20.4 -18.8 20.3 -18.6 20.1 -19.1 20.3 -19.4
2025-12-31T20:18:31.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T20:18:31.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T20:18:31.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.762291
2025-12-31T20:18:31.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T20:18:31.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T20:18:31.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T20:18:31.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T20:18:31.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T20:18:31.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T20:17:58', tmtdew=9.37, humidity=54.26, cloud=0.0, wind=20.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-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T18:17:41.942', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T20:18:31.969 [DEBUG] [Thread-133997] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:18:32.043 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T20:18:32.054 [DEBUG] [Thread-134000] [transport.py] [_log()] starting thread (client mode): 0xb957a8c0
2025-12-31T20:18:32.054 [DEBUG] [Thread-134000] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:18:32.069 [DEBUG] [Thread-134000] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T20:18:32.069 [INFO] [Thread-134000] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T20:18:32.076 [DEBUG] [Thread-134000] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:18:32.076 [DEBUG] [Thread-134000] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T20:18:32.076 [DEBUG] [Thread-134000] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:18:32.076 [DEBUG] [Thread-134000] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:18:32.076 [DEBUG] [Thread-134000] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:18:32.076 [DEBUG] [Thread-134000] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:18:32.076 [DEBUG] [Thread-134000] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:18:32.076 [DEBUG] [Thread-134000] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:18:32.076 [DEBUG] [Thread-134000] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:18:32.076 [DEBUG] [Thread-134000] [transport.py] [_log()] client lang: <none>
2025-12-31T20:18:32.076 [DEBUG] [Thread-134000] [transport.py] [_log()] server lang: <none>
2025-12-31T20:18:32.076 [DEBUG] [Thread-134000] [transport.py] [_log()] kex follows: False
2025-12-31T20:18:32.076 [DEBUG] [Thread-134000] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:18:32.076 [DEBUG] [Thread-134000] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:18:32.076 [DEBUG] [Thread-134000] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:18:32.076 [DEBUG] [Thread-134000] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:18:32.077 [DEBUG] [Thread-134000] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:18:32.077 [DEBUG] [Thread-134000] [transport.py] [_log()] Compression: none
2025-12-31T20:18:32.077 [DEBUG] [Thread-134000] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:18:32.134 [DEBUG] [Thread-134000] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:18:32.134 [DEBUG] [Thread-134000] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:18:32.135 [DEBUG] [Thread-134000] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T20:18:32.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T20:18:32.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:18:32.192 [DEBUG] [Thread-134000] [transport.py] [_log()] userauth is OK
2025-12-31T20:18:32.192 [DEBUG] [Thread-134000] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:18:32.192 [DEBUG] [Thread-134000] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:18:32.192 [DEBUG] [Thread-134000] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T20:18:32.192 [DEBUG] [Thread-134000] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:18:32.206 [INFO] [Thread-134000] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:18:32.206 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T20:18:32.206 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:18:33.015 [DEBUG] [Thread-134000] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:18:33.016 [DEBUG] [Thread-134000] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:18:33.064 [DEBUG] [Thread-134000] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:18:33.064 [DEBUG] [Thread-134000] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:18:33.073 [DEBUG] [Thread-134000] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:18:33.082 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:18:33.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T20:18:33.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T20:18:33.101 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:18:33.101 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:18:33.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:18:33.110 [DEBUG] [Thread-134000] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:18:37.188 [DEBUG] [Thread-134002 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:18:43.578 [DEBUG] [Thread-134003 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:18:57.671 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:18:57.672 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:18:58.626 [DEBUG] [Thread-134004 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:19:03.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T20:19:03.132 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T20:19: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-12-31T20:19:03.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 20, 18, 30), 9.34, 54.36, 0.0, 19.0, 18.73, 0, 0, 0, 2, 0, 0),)
2025-12-31T20:19:03.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 20:18:30
2025-12-31T20:19:04.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T20:19:04.186 [DEBUG] [Thread-134005] [transport.py] [_log()] starting thread (client mode): 0xb957ada0
2025-12-31T20:19:04.187 [DEBUG] [Thread-134005] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:19:04.201 [DEBUG] [Thread-134005] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T20:19:04.201 [INFO] [Thread-134005] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T20:19:04.203 [DEBUG] [Thread-134005] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:19:04.203 [DEBUG] [Thread-134005] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T20:19:04.203 [DEBUG] [Thread-134005] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:19:04.203 [DEBUG] [Thread-134005] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:19:04.203 [DEBUG] [Thread-134005] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:19:04.203 [DEBUG] [Thread-134005] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:19:04.203 [DEBUG] [Thread-134005] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:19:04.203 [DEBUG] [Thread-134005] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:19:04.203 [DEBUG] [Thread-134005] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:19:04.203 [DEBUG] [Thread-134005] [transport.py] [_log()] client lang: <none>
2025-12-31T20:19:04.203 [DEBUG] [Thread-134005] [transport.py] [_log()] server lang: <none>
2025-12-31T20:19:04.203 [DEBUG] [Thread-134005] [transport.py] [_log()] kex follows: False
2025-12-31T20:19:04.203 [DEBUG] [Thread-134005] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:19:04.203 [DEBUG] [Thread-134005] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:19:04.203 [DEBUG] [Thread-134005] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:19:04.204 [DEBUG] [Thread-134005] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:19:04.204 [DEBUG] [Thread-134005] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:19:04.204 [DEBUG] [Thread-134005] [transport.py] [_log()] Compression: none
2025-12-31T20:19:04.204 [DEBUG] [Thread-134005] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:19:04.211 [DEBUG] [Thread-134005] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:19:04.211 [DEBUG] [Thread-134005] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:19:04.212 [DEBUG] [Thread-134005] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T20:19:04.212 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T20:19:04.212 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:19:04.213 [DEBUG] [Thread-134005] [transport.py] [_log()] userauth is OK
2025-12-31T20:19:04.213 [DEBUG] [Thread-134005] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:19:04.213 [DEBUG] [Thread-134005] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:19:04.213 [DEBUG] [Thread-134005] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T20:19:04.213 [DEBUG] [Thread-134005] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:19:04.222 [INFO] [Thread-134005] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:19:04.222 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:19:04.887 [DEBUG] [Thread-134005] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:19:04.887 [DEBUG] [Thread-134005] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:19:04.888 [DEBUG] [Thread-134005] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T20:19:04.928 [DEBUG] [Thread-134005] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:19:04.928 [DEBUG] [Thread-134005] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:19:04.932 [DEBUG] [Thread-134005] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:19:04.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:19:04.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T20:19:04.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T20:19:04.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T20:19:04.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:19:04.954 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T20:19:04.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:19:04.954 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:19:04.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T20:19:04.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.762639 -999.00  +19.00  14.86     57  +10.40 1 2 1 1 1   160    0 1.31 -313.99 ----- 15.2 14.9 222.4 20.3 20.3 -18.8 20.2 -18.8 20.0 -19.0 20.2 -19.4
2025-12-31T20:19:04.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T20:19:04.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T20:19:04.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.762639
2025-12-31T20:19:04.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T20:19:04.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T20:19:04.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T20:19:04.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T20:19:04.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T20:19:04.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T20:18:30', tmtdew=9.34, humidity=54.36, cloud=0.0, wind=19.0, temperature=18.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T18:18:12.010', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T20:19:04.957 [DEBUG] [Thread-134005] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:19:05.041 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T20:19:05.053 [DEBUG] [Thread-134008] [transport.py] [_log()] starting thread (client mode): 0xb9578a00
2025-12-31T20:19:05.054 [DEBUG] [Thread-134008] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:19:05.070 [DEBUG] [Thread-134008] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T20:19:05.071 [INFO] [Thread-134008] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T20:19:05.078 [DEBUG] [Thread-134008] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:19:05.078 [DEBUG] [Thread-134008] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T20:19:05.078 [DEBUG] [Thread-134008] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:19:05.079 [DEBUG] [Thread-134008] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:19:05.079 [DEBUG] [Thread-134008] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:19:05.079 [DEBUG] [Thread-134008] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:19:05.079 [DEBUG] [Thread-134008] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:19:05.079 [DEBUG] [Thread-134008] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:19:05.079 [DEBUG] [Thread-134008] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:19:05.079 [DEBUG] [Thread-134008] [transport.py] [_log()] client lang: <none>
2025-12-31T20:19:05.079 [DEBUG] [Thread-134008] [transport.py] [_log()] server lang: <none>
2025-12-31T20:19:05.079 [DEBUG] [Thread-134008] [transport.py] [_log()] kex follows: False
2025-12-31T20:19:05.079 [DEBUG] [Thread-134008] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:19:05.079 [DEBUG] [Thread-134008] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:19:05.079 [DEBUG] [Thread-134008] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:19:05.079 [DEBUG] [Thread-134008] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:19:05.079 [DEBUG] [Thread-134008] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:19:05.079 [DEBUG] [Thread-134008] [transport.py] [_log()] Compression: none
2025-12-31T20:19:05.079 [DEBUG] [Thread-134008] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:19:05.141 [DEBUG] [Thread-134008] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:19:05.142 [DEBUG] [Thread-134008] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:19:05.142 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T20:19:05.143 [DEBUG] [Thread-134008] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T20:19:05.144 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:19:05.202 [DEBUG] [Thread-134008] [transport.py] [_log()] userauth is OK
2025-12-31T20:19:05.203 [DEBUG] [Thread-134008] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:19:05.203 [DEBUG] [Thread-134008] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:19:05.203 [DEBUG] [Thread-134008] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T20:19:05.203 [DEBUG] [Thread-134008] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:19:05.223 [INFO] [Thread-134008] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:19:05.224 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T20:19:05.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:19:06.108 [DEBUG] [Thread-134008] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:19:06.108 [DEBUG] [Thread-134008] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:19:06.156 [DEBUG] [Thread-134008] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:19:06.156 [DEBUG] [Thread-134008] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:19:06.165 [DEBUG] [Thread-134008] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:19:06.175 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:19:06.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T20:19:06.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T20:19:06.196 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:19:06.197 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:19:06.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:19:06.207 [DEBUG] [Thread-134008] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:19:13.661 [DEBUG] [Thread-134010 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:19:28.710 [DEBUG] [Thread-134011 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:19:36.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T20:19:36.228 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T20:19:36.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T20:19:36.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 20, 19, 2), 9.33, 54.41, 0.0, 21.68, 18.78, 0, 0, 0, 2, 0, 0),)
2025-12-31T20:19:36.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 20:19:02
2025-12-31T20:19:37.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T20:19:37.242 [DEBUG] [Thread-134012] [transport.py] [_log()] starting thread (client mode): 0xb1785c90
2025-12-31T20:19:37.242 [DEBUG] [Thread-134012] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:19:37.259 [DEBUG] [Thread-134013 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:19:37.264 [DEBUG] [Thread-134012] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T20:19:37.264 [INFO] [Thread-134012] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T20:19:37.267 [DEBUG] [Thread-134012] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:19:37.267 [DEBUG] [Thread-134012] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T20:19:37.267 [DEBUG] [Thread-134012] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:19:37.267 [DEBUG] [Thread-134012] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:19:37.267 [DEBUG] [Thread-134012] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:19:37.267 [DEBUG] [Thread-134012] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:19:37.267 [DEBUG] [Thread-134012] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:19:37.267 [DEBUG] [Thread-134012] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:19:37.267 [DEBUG] [Thread-134012] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:19:37.267 [DEBUG] [Thread-134012] [transport.py] [_log()] client lang: <none>
2025-12-31T20:19:37.267 [DEBUG] [Thread-134012] [transport.py] [_log()] server lang: <none>
2025-12-31T20:19:37.267 [DEBUG] [Thread-134012] [transport.py] [_log()] kex follows: False
2025-12-31T20:19:37.267 [DEBUG] [Thread-134012] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:19:37.267 [DEBUG] [Thread-134012] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:19:37.267 [DEBUG] [Thread-134012] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:19:37.267 [DEBUG] [Thread-134012] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:19:37.267 [DEBUG] [Thread-134012] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:19:37.267 [DEBUG] [Thread-134012] [transport.py] [_log()] Compression: none
2025-12-31T20:19:37.267 [DEBUG] [Thread-134012] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:19:37.284 [DEBUG] [Thread-134012] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:19:37.284 [DEBUG] [Thread-134012] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:19:37.284 [DEBUG] [Thread-134012] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T20:19:37.285 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T20:19:37.285 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:19:37.286 [DEBUG] [Thread-134012] [transport.py] [_log()] userauth is OK
2025-12-31T20:19:37.286 [DEBUG] [Thread-134012] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:19:37.286 [DEBUG] [Thread-134012] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:19:37.286 [DEBUG] [Thread-134012] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T20:19:37.286 [DEBUG] [Thread-134012] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:19:37.297 [INFO] [Thread-134012] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:19:37.297 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:19:37.915 [DEBUG] [Thread-134012] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:19:37.915 [DEBUG] [Thread-134012] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:19:37.915 [DEBUG] [Thread-134012] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T20:19:37.956 [DEBUG] [Thread-134012] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:19:37.956 [DEBUG] [Thread-134012] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:19:37.959 [DEBUG] [Thread-134012] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:19:37.973 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:19:37.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T20:19:37.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T20:19:37.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T20:19:37.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:19:37.984 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T20:19:37.984 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:19:37.984 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:19:37.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T20:19:37.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.762986 -999.00  +19.00  14.10     57  +10.40 1 2 1 1 1   149    0 1.89 -295.92 ----- 9.8 14.1 212.2 21.6 20.2 -18.7 20.2 -18.7 19.9 -18.9 20.2 -19.0
2025-12-31T20:19:37.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T20:19:37.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T20:19:37.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.762986
2025-12-31T20:19:37.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T20:19:37.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T20:19:37.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T20:19:37.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T20:19:37.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T20:19:37.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T20:19:02', tmtdew=9.33, humidity=54.41, cloud=0.0, wind=21.68, temperature=18.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T18:18:41.990', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T20:19:37.987 [DEBUG] [Thread-134012] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:19:38.070 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T20:19:38.081 [DEBUG] [Thread-134016] [transport.py] [_log()] starting thread (client mode): 0xb17587c0
2025-12-31T20:19:38.081 [DEBUG] [Thread-134016] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:19:38.096 [DEBUG] [Thread-134016] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T20:19:38.096 [INFO] [Thread-134016] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T20:19:38.104 [DEBUG] [Thread-134016] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:19:38.104 [DEBUG] [Thread-134016] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T20:19:38.104 [DEBUG] [Thread-134016] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:19:38.104 [DEBUG] [Thread-134016] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:19:38.104 [DEBUG] [Thread-134016] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:19:38.104 [DEBUG] [Thread-134016] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:19:38.105 [DEBUG] [Thread-134016] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:19:38.105 [DEBUG] [Thread-134016] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:19:38.105 [DEBUG] [Thread-134016] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:19:38.105 [DEBUG] [Thread-134016] [transport.py] [_log()] client lang: <none>
2025-12-31T20:19:38.105 [DEBUG] [Thread-134016] [transport.py] [_log()] server lang: <none>
2025-12-31T20:19:38.105 [DEBUG] [Thread-134016] [transport.py] [_log()] kex follows: False
2025-12-31T20:19:38.105 [DEBUG] [Thread-134016] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:19:38.105 [DEBUG] [Thread-134016] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:19:38.105 [DEBUG] [Thread-134016] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:19:38.106 [DEBUG] [Thread-134016] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:19:38.106 [DEBUG] [Thread-134016] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:19:38.106 [DEBUG] [Thread-134016] [transport.py] [_log()] Compression: none
2025-12-31T20:19:38.106 [DEBUG] [Thread-134016] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:19:38.160 [DEBUG] [Thread-134016] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:19:38.161 [DEBUG] [Thread-134016] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:19:38.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T20:19:38.162 [DEBUG] [Thread-134016] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T20:19:38.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:19:38.216 [DEBUG] [Thread-134016] [transport.py] [_log()] userauth is OK
2025-12-31T20:19:38.217 [DEBUG] [Thread-134016] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:19:38.217 [DEBUG] [Thread-134016] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:19:38.217 [DEBUG] [Thread-134016] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T20:19:38.217 [DEBUG] [Thread-134016] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:19:38.236 [INFO] [Thread-134016] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:19:38.236 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T20:19:38.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:19:39.031 [DEBUG] [Thread-134016] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:19:39.032 [DEBUG] [Thread-134016] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:19:39.079 [DEBUG] [Thread-134016] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:19:39.079 [DEBUG] [Thread-134016] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:19:39.088 [DEBUG] [Thread-134016] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:19:39.097 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:19:39.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T20:19:39.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T20:19:39.115 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:19:39.116 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:19:39.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:19:39.124 [DEBUG] [Thread-134016] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:19:43.741 [DEBUG] [Thread-134018 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:19:58.806 [DEBUG] [Thread-134019 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:20:03.497 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:20:03.498 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:20:09.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T20:20:09.147 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T20:20:09.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T20:20:09.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 20, 20, 6), 9.3, 54.53, 0.0, 17.7, 18.7, 0, 0, 0, 2, 0, 0),)
2025-12-31T20:20:09.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 20:20:06
2025-12-31T20:20:10.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T20:20:10.187 [DEBUG] [Thread-134020] [transport.py] [_log()] starting thread (client mode): 0xb6bb09d0
2025-12-31T20:20:10.187 [DEBUG] [Thread-134020] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:20:10.201 [DEBUG] [Thread-134020] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T20:20:10.202 [INFO] [Thread-134020] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T20:20:10.203 [DEBUG] [Thread-134020] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:20:10.203 [DEBUG] [Thread-134020] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T20:20:10.203 [DEBUG] [Thread-134020] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:20:10.203 [DEBUG] [Thread-134020] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:20:10.203 [DEBUG] [Thread-134020] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:20:10.203 [DEBUG] [Thread-134020] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:20:10.203 [DEBUG] [Thread-134020] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:20:10.203 [DEBUG] [Thread-134020] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:20:10.203 [DEBUG] [Thread-134020] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:20:10.203 [DEBUG] [Thread-134020] [transport.py] [_log()] client lang: <none>
2025-12-31T20:20:10.203 [DEBUG] [Thread-134020] [transport.py] [_log()] server lang: <none>
2025-12-31T20:20:10.204 [DEBUG] [Thread-134020] [transport.py] [_log()] kex follows: False
2025-12-31T20:20:10.204 [DEBUG] [Thread-134020] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:20:10.204 [DEBUG] [Thread-134020] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:20:10.204 [DEBUG] [Thread-134020] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:20:10.204 [DEBUG] [Thread-134020] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:20:10.204 [DEBUG] [Thread-134020] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:20:10.204 [DEBUG] [Thread-134020] [transport.py] [_log()] Compression: none
2025-12-31T20:20:10.204 [DEBUG] [Thread-134020] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:20:10.222 [DEBUG] [Thread-134020] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:20:10.223 [DEBUG] [Thread-134020] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:20:10.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T20:20:10.223 [DEBUG] [Thread-134020] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T20:20:10.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:20:10.224 [DEBUG] [Thread-134020] [transport.py] [_log()] userauth is OK
2025-12-31T20:20:10.224 [DEBUG] [Thread-134020] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:20:10.224 [DEBUG] [Thread-134020] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:20:10.224 [DEBUG] [Thread-134020] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T20:20:10.224 [DEBUG] [Thread-134020] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:20:10.251 [INFO] [Thread-134020] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:20:10.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:20:11.559 [DEBUG] [Thread-134020] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:20:11.559 [DEBUG] [Thread-134020] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:20:11.559 [DEBUG] [Thread-134020] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T20:20:11.600 [DEBUG] [Thread-134020] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:20:11.600 [DEBUG] [Thread-134020] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:20:11.602 [DEBUG] [Thread-134020] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:20:11.615 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:20:11.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T20:20:11.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T20:20:11.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T20:20:11.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:20:11.622 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T20:20:11.622 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:20:11.622 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:20:11.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T20:20:11.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.763680 -999.00  +19.10   5.81     57  +10.40 1 2 1 1 1   128    0 1.76 -286.56 ----- 4.4 5.8 215.8 11.4 20.2 -18.7 20.1 -19.0 19.9 -18.8 20.2 -19.4
2025-12-31T20:20:11.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T20:20:11.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T20:20:11.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.763680
2025-12-31T20:20:11.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T20:20:11.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T20:20:11.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T20:20:11.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T20:20:11.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T20:20:11.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T20:20:06', tmtdew=9.3, humidity=54.53, cloud=0.0, wind=17.7, temperature=18.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T18:19:41.952', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T20:20:11.623 [DEBUG] [Thread-134020] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:20:11.698 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T20:20:11.710 [DEBUG] [Thread-134023] [transport.py] [_log()] starting thread (client mode): 0xb17598a0
2025-12-31T20:20:11.710 [DEBUG] [Thread-134023] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:20:11.724 [DEBUG] [Thread-134023] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T20:20:11.724 [INFO] [Thread-134023] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T20:20:11.731 [DEBUG] [Thread-134023] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:20:11.732 [DEBUG] [Thread-134023] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T20:20:11.732 [DEBUG] [Thread-134023] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:20:11.732 [DEBUG] [Thread-134023] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:20:11.732 [DEBUG] [Thread-134023] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:20:11.732 [DEBUG] [Thread-134023] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:20:11.732 [DEBUG] [Thread-134023] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:20:11.732 [DEBUG] [Thread-134023] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:20:11.732 [DEBUG] [Thread-134023] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:20:11.732 [DEBUG] [Thread-134023] [transport.py] [_log()] client lang: <none>
2025-12-31T20:20:11.732 [DEBUG] [Thread-134023] [transport.py] [_log()] server lang: <none>
2025-12-31T20:20:11.732 [DEBUG] [Thread-134023] [transport.py] [_log()] kex follows: False
2025-12-31T20:20:11.732 [DEBUG] [Thread-134023] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:20:11.732 [DEBUG] [Thread-134023] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:20:11.732 [DEBUG] [Thread-134023] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:20:11.732 [DEBUG] [Thread-134023] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:20:11.732 [DEBUG] [Thread-134023] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:20:11.732 [DEBUG] [Thread-134023] [transport.py] [_log()] Compression: none
2025-12-31T20:20:11.732 [DEBUG] [Thread-134023] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:20:11.788 [DEBUG] [Thread-134023] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:20:11.788 [DEBUG] [Thread-134023] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:20:11.788 [DEBUG] [Thread-134023] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T20:20:11.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T20:20:11.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:20:11.846 [DEBUG] [Thread-134023] [transport.py] [_log()] userauth is OK
2025-12-31T20:20:11.846 [DEBUG] [Thread-134023] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:20:11.846 [DEBUG] [Thread-134023] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:20:11.846 [DEBUG] [Thread-134023] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T20:20:11.846 [DEBUG] [Thread-134023] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:20:11.861 [INFO] [Thread-134023] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:20:11.861 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T20:20:11.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:20:12.713 [DEBUG] [Thread-134023] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:20:12.713 [DEBUG] [Thread-134023] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:20:12.761 [DEBUG] [Thread-134023] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:20:12.761 [DEBUG] [Thread-134023] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:20:12.770 [DEBUG] [Thread-134023] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:20:12.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:20:12.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-12-31T20:20:12.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T20:20:12.793 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:20:12.794 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:20:12.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:20:12.801 [DEBUG] [Thread-134023] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:20:13.843 [DEBUG] [Thread-134025 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:20:28.896 [DEBUG] [Thread-134026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:20:37.315 [DEBUG] [Thread-134027 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:20:42.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T20:20:42.823 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T20:20:42.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-12-31T20:20:43.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 20, 20, 38), 9.33, 54.58, 0.0, 18.76, 18.73, 0, 0, 0, 2, 0, 0),)
2025-12-31T20:20:43.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 20:20:38
2025-12-31T20:20:43.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T20:20:43.814 [DEBUG] [Thread-134028] [transport.py] [_log()] starting thread (client mode): 0xb9579270
2025-12-31T20:20:43.814 [DEBUG] [Thread-134028] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:20:43.837 [DEBUG] [Thread-134028] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T20:20:43.837 [INFO] [Thread-134028] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T20:20:43.841 [DEBUG] [Thread-134028] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:20:43.841 [DEBUG] [Thread-134028] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T20:20:43.841 [DEBUG] [Thread-134028] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:20:43.841 [DEBUG] [Thread-134028] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:20:43.841 [DEBUG] [Thread-134028] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:20:43.841 [DEBUG] [Thread-134028] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:20:43.841 [DEBUG] [Thread-134028] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:20:43.841 [DEBUG] [Thread-134028] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:20:43.841 [DEBUG] [Thread-134028] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:20:43.841 [DEBUG] [Thread-134028] [transport.py] [_log()] client lang: <none>
2025-12-31T20:20:43.841 [DEBUG] [Thread-134028] [transport.py] [_log()] server lang: <none>
2025-12-31T20:20:43.841 [DEBUG] [Thread-134028] [transport.py] [_log()] kex follows: False
2025-12-31T20:20:43.841 [DEBUG] [Thread-134028] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:20:43.841 [DEBUG] [Thread-134028] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:20:43.841 [DEBUG] [Thread-134028] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:20:43.842 [DEBUG] [Thread-134028] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:20:43.842 [DEBUG] [Thread-134028] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:20:43.842 [DEBUG] [Thread-134028] [transport.py] [_log()] Compression: none
2025-12-31T20:20:43.842 [DEBUG] [Thread-134028] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:20:43.860 [DEBUG] [Thread-134028] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:20:43.860 [DEBUG] [Thread-134028] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:20:43.861 [DEBUG] [Thread-134028] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T20:20:43.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T20:20:43.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:20:43.863 [DEBUG] [Thread-134028] [transport.py] [_log()] userauth is OK
2025-12-31T20:20:43.863 [DEBUG] [Thread-134028] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:20:43.864 [DEBUG] [Thread-134028] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:20:43.864 [DEBUG] [Thread-134028] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T20:20:43.864 [DEBUG] [Thread-134028] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:20:43.889 [INFO] [Thread-134028] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:20:43.891 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:20:43.930 [DEBUG] [Thread-134030 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:20:44.520 [DEBUG] [Thread-134028] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:20:44.520 [DEBUG] [Thread-134028] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:20:44.521 [DEBUG] [Thread-134028] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T20:20:44.561 [DEBUG] [Thread-134028] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:20:44.561 [DEBUG] [Thread-134028] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:20:44.565 [DEBUG] [Thread-134028] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:20:44.577 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:20:44.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T20:20:44.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T20:20:44.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T20:20:44.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:20:44.593 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T20:20:44.593 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:20:44.593 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:20:44.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T20:20:44.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.764027 -999.00  +19.00   7.99     57  +10.40 1 2 1 1 1   118    0 2.13 -272.70 ----- 9.4 8.0 223.8 20.8 20.2 -18.9 20.1 -18.9 19.9 -18.9 20.1 -19.1
2025-12-31T20:20:44.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T20:20:44.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T20:20:44.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.764027
2025-12-31T20:20:44.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T20:20:44.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T20:20:44.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T20:20:44.596 [DEBUG] [Thread-134028] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:20:44.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T20:20:44.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T20:20:44.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T20:20:38', tmtdew=9.33, humidity=54.58, cloud=0.0, wind=18.76, temperature=18.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T18:20:11.933', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T20:20:44.692 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T20:20:44.704 [DEBUG] [Thread-134032] [transport.py] [_log()] starting thread (client mode): 0xb1746890
2025-12-31T20:20:44.704 [DEBUG] [Thread-134032] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:20:44.723 [DEBUG] [Thread-134032] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T20:20:44.724 [INFO] [Thread-134032] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T20:20:44.731 [DEBUG] [Thread-134032] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:20:44.732 [DEBUG] [Thread-134032] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T20:20:44.732 [DEBUG] [Thread-134032] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:20:44.732 [DEBUG] [Thread-134032] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:20:44.732 [DEBUG] [Thread-134032] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:20:44.732 [DEBUG] [Thread-134032] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:20:44.732 [DEBUG] [Thread-134032] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:20:44.732 [DEBUG] [Thread-134032] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:20:44.733 [DEBUG] [Thread-134032] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:20:44.733 [DEBUG] [Thread-134032] [transport.py] [_log()] client lang: <none>
2025-12-31T20:20:44.733 [DEBUG] [Thread-134032] [transport.py] [_log()] server lang: <none>
2025-12-31T20:20:44.733 [DEBUG] [Thread-134032] [transport.py] [_log()] kex follows: False
2025-12-31T20:20:44.733 [DEBUG] [Thread-134032] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:20:44.733 [DEBUG] [Thread-134032] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:20:44.733 [DEBUG] [Thread-134032] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:20:44.734 [DEBUG] [Thread-134032] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:20:44.734 [DEBUG] [Thread-134032] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:20:44.734 [DEBUG] [Thread-134032] [transport.py] [_log()] Compression: none
2025-12-31T20:20:44.734 [DEBUG] [Thread-134032] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:20:44.792 [DEBUG] [Thread-134032] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:20:44.793 [DEBUG] [Thread-134032] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:20:44.794 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T20:20:44.794 [DEBUG] [Thread-134032] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T20:20:44.795 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:20:44.852 [DEBUG] [Thread-134032] [transport.py] [_log()] userauth is OK
2025-12-31T20:20:44.852 [DEBUG] [Thread-134032] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:20:44.852 [DEBUG] [Thread-134032] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:20:44.852 [DEBUG] [Thread-134032] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T20:20:44.853 [DEBUG] [Thread-134032] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:20:44.877 [INFO] [Thread-134032] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:20:44.878 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T20:20:44.878 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:20:45.711 [DEBUG] [Thread-134032] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:20:45.711 [DEBUG] [Thread-134032] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:20:45.758 [DEBUG] [Thread-134032] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:20:45.759 [DEBUG] [Thread-134032] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:20:45.768 [DEBUG] [Thread-134032] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:20:45.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:20:45.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T20:20:45.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T20:20:45.793 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:20:45.793 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:20:45.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:20:45.801 [DEBUG] [Thread-134032] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:20:58.961 [DEBUG] [Thread-134034 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:21:08.427 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:21:08.428 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:21:14.011 [DEBUG] [Thread-134035 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:21:15.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T20:21:15.824 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T20:21:15.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-12-31T20:21:16.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 20, 21, 10), 9.32, 54.61, 0.0, 18.24, 18.7, 0, 0, 0, 2, 0, 0),)
2025-12-31T20:21:16.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 20:21:10
2025-12-31T20:21:16.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T20:21:16.800 [DEBUG] [Thread-134036] [transport.py] [_log()] starting thread (client mode): 0xb17473d0
2025-12-31T20:21:16.800 [DEBUG] [Thread-134036] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:21:16.820 [DEBUG] [Thread-134036] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T20:21:16.820 [INFO] [Thread-134036] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T20:21:16.822 [DEBUG] [Thread-134036] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:21:16.822 [DEBUG] [Thread-134036] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T20:21:16.822 [DEBUG] [Thread-134036] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:21:16.822 [DEBUG] [Thread-134036] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:21:16.822 [DEBUG] [Thread-134036] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:21:16.822 [DEBUG] [Thread-134036] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:21:16.822 [DEBUG] [Thread-134036] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:21:16.822 [DEBUG] [Thread-134036] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:21:16.822 [DEBUG] [Thread-134036] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:21:16.822 [DEBUG] [Thread-134036] [transport.py] [_log()] client lang: <none>
2025-12-31T20:21:16.822 [DEBUG] [Thread-134036] [transport.py] [_log()] server lang: <none>
2025-12-31T20:21:16.822 [DEBUG] [Thread-134036] [transport.py] [_log()] kex follows: False
2025-12-31T20:21:16.822 [DEBUG] [Thread-134036] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:21:16.822 [DEBUG] [Thread-134036] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:21:16.822 [DEBUG] [Thread-134036] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:21:16.822 [DEBUG] [Thread-134036] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:21:16.822 [DEBUG] [Thread-134036] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:21:16.822 [DEBUG] [Thread-134036] [transport.py] [_log()] Compression: none
2025-12-31T20:21:16.822 [DEBUG] [Thread-134036] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:21:16.830 [DEBUG] [Thread-134036] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:21:16.831 [DEBUG] [Thread-134036] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:21:16.831 [DEBUG] [Thread-134036] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T20:21:16.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T20:21:16.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:21:16.833 [DEBUG] [Thread-134036] [transport.py] [_log()] userauth is OK
2025-12-31T20:21:16.833 [DEBUG] [Thread-134036] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:21:16.833 [DEBUG] [Thread-134036] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:21:16.833 [DEBUG] [Thread-134036] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T20:21:16.833 [DEBUG] [Thread-134036] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:21:16.851 [INFO] [Thread-134036] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:21:16.851 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:21:17.519 [DEBUG] [Thread-134036] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:21:17.520 [DEBUG] [Thread-134036] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:21:17.520 [DEBUG] [Thread-134036] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T20:21:17.561 [DEBUG] [Thread-134036] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:21:17.561 [DEBUG] [Thread-134036] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:21:17.565 [DEBUG] [Thread-134036] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:21:17.578 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:21:17.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T20:21:17.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T20:21:17.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T20:21:17.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:21:17.591 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T20:21:17.592 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:21:17.592 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:21:17.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T20:21:17.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.764375 -999.00  +19.10   8.29     57  +10.40 1 2 1 1 1   110    0 1.66 -282.18 ----- 8.8 8.3 191.9 12.1 20.2 -18.8 20.1 -18.9 19.9 -18.9 20.1 -19.1
2025-12-31T20:21:17.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T20:21:17.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T20:21:17.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.764375
2025-12-31T20:21:17.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T20:21:17.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T20:21:17.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T20:21:17.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T20:21:17.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T20:21:17.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T20:21:10', tmtdew=9.32, humidity=54.61, cloud=0.0, wind=18.24, temperature=18.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T18:20:42.000', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T20:21:17.594 [DEBUG] [Thread-134036] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:21:17.678 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T20:21:17.691 [DEBUG] [Thread-134039] [transport.py] [_log()] starting thread (client mode): 0xb6bbfac0
2025-12-31T20:21:17.691 [DEBUG] [Thread-134039] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:21:17.708 [DEBUG] [Thread-134039] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T20:21:17.708 [INFO] [Thread-134039] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T20:21:17.716 [DEBUG] [Thread-134039] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:21:17.716 [DEBUG] [Thread-134039] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T20:21:17.716 [DEBUG] [Thread-134039] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:21:17.716 [DEBUG] [Thread-134039] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:21:17.717 [DEBUG] [Thread-134039] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:21:17.717 [DEBUG] [Thread-134039] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:21:17.717 [DEBUG] [Thread-134039] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:21:17.717 [DEBUG] [Thread-134039] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:21:17.717 [DEBUG] [Thread-134039] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:21:17.717 [DEBUG] [Thread-134039] [transport.py] [_log()] client lang: <none>
2025-12-31T20:21:17.717 [DEBUG] [Thread-134039] [transport.py] [_log()] server lang: <none>
2025-12-31T20:21:17.717 [DEBUG] [Thread-134039] [transport.py] [_log()] kex follows: False
2025-12-31T20:21:17.717 [DEBUG] [Thread-134039] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:21:17.718 [DEBUG] [Thread-134039] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:21:17.718 [DEBUG] [Thread-134039] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:21:17.718 [DEBUG] [Thread-134039] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:21:17.718 [DEBUG] [Thread-134039] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:21:17.718 [DEBUG] [Thread-134039] [transport.py] [_log()] Compression: none
2025-12-31T20:21:17.718 [DEBUG] [Thread-134039] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:21:17.774 [DEBUG] [Thread-134039] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:21:17.774 [DEBUG] [Thread-134039] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:21:17.775 [DEBUG] [Thread-134039] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T20:21:17.775 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T20:21:17.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:21:17.833 [DEBUG] [Thread-134039] [transport.py] [_log()] userauth is OK
2025-12-31T20:21:17.834 [DEBUG] [Thread-134039] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:21:17.834 [DEBUG] [Thread-134039] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:21:17.834 [DEBUG] [Thread-134039] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T20:21:17.834 [DEBUG] [Thread-134039] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:21:17.854 [INFO] [Thread-134039] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:21:17.854 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T20:21:17.855 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:21:18.672 [DEBUG] [Thread-134039] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:21:18.672 [DEBUG] [Thread-134039] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:21:18.720 [DEBUG] [Thread-134039] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:21:18.720 [DEBUG] [Thread-134039] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:21:18.730 [DEBUG] [Thread-134039] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:21:18.739 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:21:18.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T20:21:18.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T20:21:18.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:21:18.758 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:21:18.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:21:18.767 [DEBUG] [Thread-134039] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:21:29.042 [DEBUG] [Thread-134041 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:21:37.370 [DEBUG] [Thread-134042 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:21:44.080 [DEBUG] [Thread-134043 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:21:48.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T20:21:48.789 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T20:21:48.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T20:21:49.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 20, 21, 43), 9.24, 54.71, 0.0, 22.92, 18.7, 0, 0, 0, 2, 0, 0),)
2025-12-31T20:21:49.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 20:21:43
2025-12-31T20:21:49.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T20:21:49.757 [DEBUG] [Thread-134044] [transport.py] [_log()] starting thread (client mode): 0xb95d79a0
2025-12-31T20:21:49.757 [DEBUG] [Thread-134044] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:21:49.778 [DEBUG] [Thread-134044] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T20:21:49.778 [INFO] [Thread-134044] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T20:21:49.782 [DEBUG] [Thread-134044] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:21:49.782 [DEBUG] [Thread-134044] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T20:21:49.782 [DEBUG] [Thread-134044] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:21:49.782 [DEBUG] [Thread-134044] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:21:49.782 [DEBUG] [Thread-134044] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:21:49.782 [DEBUG] [Thread-134044] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:21:49.782 [DEBUG] [Thread-134044] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:21:49.782 [DEBUG] [Thread-134044] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:21:49.782 [DEBUG] [Thread-134044] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:21:49.782 [DEBUG] [Thread-134044] [transport.py] [_log()] client lang: <none>
2025-12-31T20:21:49.782 [DEBUG] [Thread-134044] [transport.py] [_log()] server lang: <none>
2025-12-31T20:21:49.782 [DEBUG] [Thread-134044] [transport.py] [_log()] kex follows: False
2025-12-31T20:21:49.782 [DEBUG] [Thread-134044] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:21:49.782 [DEBUG] [Thread-134044] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:21:49.782 [DEBUG] [Thread-134044] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:21:49.782 [DEBUG] [Thread-134044] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:21:49.782 [DEBUG] [Thread-134044] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:21:49.782 [DEBUG] [Thread-134044] [transport.py] [_log()] Compression: none
2025-12-31T20:21:49.782 [DEBUG] [Thread-134044] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:21:49.802 [DEBUG] [Thread-134044] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:21:49.803 [DEBUG] [Thread-134044] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:21:49.804 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T20:21:49.804 [DEBUG] [Thread-134044] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T20:21:49.805 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:21:49.807 [DEBUG] [Thread-134044] [transport.py] [_log()] userauth is OK
2025-12-31T20:21:49.807 [DEBUG] [Thread-134044] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:21:49.807 [DEBUG] [Thread-134044] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:21:49.807 [DEBUG] [Thread-134044] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T20:21:49.808 [DEBUG] [Thread-134044] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:21:49.833 [INFO] [Thread-134044] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:21:49.833 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:21:50.481 [DEBUG] [Thread-134044] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:21:50.481 [DEBUG] [Thread-134044] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:21:50.482 [DEBUG] [Thread-134044] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T20:21:50.522 [DEBUG] [Thread-134044] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:21:50.523 [DEBUG] [Thread-134044] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:21:50.526 [DEBUG] [Thread-134044] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:21:50.538 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:21:50.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T20:21:50.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T20:21:50.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T20:21:50.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:21:50.549 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T20:21:50.550 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:21:50.550 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:21:50.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T20:21:50.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.764722 -999.00  +19.10   7.96     57  +10.40 1 2 1 1 1   101    0 2.25 -278.56 ----- 12.2 8.0 192.8 15.7 20.2 -19.0 20.1 -19.0 19.9 -18.9 20.1 -19.4
2025-12-31T20:21:50.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T20:21:50.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T20:21:50.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.764722
2025-12-31T20:21:50.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T20:21:50.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T20:21:50.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T20:21:50.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T20:21:50.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T20:21:50.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T20:21:43', tmtdew=9.24, humidity=54.71, cloud=0.0, wind=22.92, temperature=18.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T18:21:11.981', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T20:21:50.552 [DEBUG] [Thread-134044] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:21:50.637 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T20:21:50.650 [DEBUG] [Thread-134047] [transport.py] [_log()] starting thread (client mode): 0xb6bbb220
2025-12-31T20:21:50.650 [DEBUG] [Thread-134047] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:21:50.665 [DEBUG] [Thread-134047] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T20:21:50.665 [INFO] [Thread-134047] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T20:21:50.673 [DEBUG] [Thread-134047] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:21:50.673 [DEBUG] [Thread-134047] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T20:21:50.673 [DEBUG] [Thread-134047] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:21:50.673 [DEBUG] [Thread-134047] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:21:50.673 [DEBUG] [Thread-134047] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:21:50.674 [DEBUG] [Thread-134047] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:21:50.674 [DEBUG] [Thread-134047] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:21:50.674 [DEBUG] [Thread-134047] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:21:50.674 [DEBUG] [Thread-134047] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:21:50.674 [DEBUG] [Thread-134047] [transport.py] [_log()] client lang: <none>
2025-12-31T20:21:50.674 [DEBUG] [Thread-134047] [transport.py] [_log()] server lang: <none>
2025-12-31T20:21:50.674 [DEBUG] [Thread-134047] [transport.py] [_log()] kex follows: False
2025-12-31T20:21:50.674 [DEBUG] [Thread-134047] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:21:50.675 [DEBUG] [Thread-134047] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:21:50.675 [DEBUG] [Thread-134047] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:21:50.675 [DEBUG] [Thread-134047] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:21:50.675 [DEBUG] [Thread-134047] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:21:50.675 [DEBUG] [Thread-134047] [transport.py] [_log()] Compression: none
2025-12-31T20:21:50.675 [DEBUG] [Thread-134047] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:21:50.732 [DEBUG] [Thread-134047] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:21:50.732 [DEBUG] [Thread-134047] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:21:50.733 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T20:21:50.734 [DEBUG] [Thread-134047] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T20:21:50.735 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:21:50.791 [DEBUG] [Thread-134047] [transport.py] [_log()] userauth is OK
2025-12-31T20:21:50.792 [DEBUG] [Thread-134047] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:21:50.792 [DEBUG] [Thread-134047] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:21:50.792 [DEBUG] [Thread-134047] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T20:21:50.792 [DEBUG] [Thread-134047] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:21:50.811 [INFO] [Thread-134047] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:21:50.811 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T20:21:50.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:21:51.658 [DEBUG] [Thread-134047] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:21:51.658 [DEBUG] [Thread-134047] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:21:51.706 [DEBUG] [Thread-134047] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:21:51.706 [DEBUG] [Thread-134047] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:21:51.716 [DEBUG] [Thread-134047] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:21:51.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:21:51.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T20:21:51.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T20:21:51.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:21:51.744 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:21:51.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:21:51.752 [DEBUG] [Thread-134047] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:21:59.111 [DEBUG] [Thread-134049 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:22:14.169 [DEBUG] [Thread-134050 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:22:15.203 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:22:15.204 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:22:21.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T20:22:21.770 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T20:22:21.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T20:22:22.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 20, 22, 15), 9.18, 54.91, 0.0, 20.91, 18.63, 0, 0, 0, 2, 0, 0),)
2025-12-31T20:22:22.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 20:22:15
2025-12-31T20:22:22.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T20:22:22.748 [DEBUG] [Thread-134051] [transport.py] [_log()] starting thread (client mode): 0xb1786b90
2025-12-31T20:22:22.748 [DEBUG] [Thread-134051] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:22:22.767 [DEBUG] [Thread-134051] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T20:22:22.767 [INFO] [Thread-134051] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T20:22:22.769 [DEBUG] [Thread-134051] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:22:22.770 [DEBUG] [Thread-134051] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T20:22:22.770 [DEBUG] [Thread-134051] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:22:22.770 [DEBUG] [Thread-134051] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:22:22.770 [DEBUG] [Thread-134051] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:22:22.770 [DEBUG] [Thread-134051] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:22:22.770 [DEBUG] [Thread-134051] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:22:22.770 [DEBUG] [Thread-134051] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:22:22.770 [DEBUG] [Thread-134051] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:22:22.770 [DEBUG] [Thread-134051] [transport.py] [_log()] client lang: <none>
2025-12-31T20:22:22.770 [DEBUG] [Thread-134051] [transport.py] [_log()] server lang: <none>
2025-12-31T20:22:22.770 [DEBUG] [Thread-134051] [transport.py] [_log()] kex follows: False
2025-12-31T20:22:22.770 [DEBUG] [Thread-134051] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:22:22.770 [DEBUG] [Thread-134051] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:22:22.770 [DEBUG] [Thread-134051] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:22:22.770 [DEBUG] [Thread-134051] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:22:22.770 [DEBUG] [Thread-134051] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:22:22.770 [DEBUG] [Thread-134051] [transport.py] [_log()] Compression: none
2025-12-31T20:22:22.770 [DEBUG] [Thread-134051] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:22:22.778 [DEBUG] [Thread-134051] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:22:22.778 [DEBUG] [Thread-134051] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:22:22.779 [DEBUG] [Thread-134051] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T20:22:22.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T20:22:22.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:22:22.780 [DEBUG] [Thread-134051] [transport.py] [_log()] userauth is OK
2025-12-31T20:22:22.780 [DEBUG] [Thread-134051] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:22:22.780 [DEBUG] [Thread-134051] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:22:22.780 [DEBUG] [Thread-134051] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T20:22:22.780 [DEBUG] [Thread-134051] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:22:22.803 [INFO] [Thread-134051] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:22:22.804 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:22:23.371 [DEBUG] [Thread-134051] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:22:23.371 [DEBUG] [Thread-134051] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:22:23.371 [DEBUG] [Thread-134051] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T20:22:23.412 [DEBUG] [Thread-134051] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:22:23.412 [DEBUG] [Thread-134051] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:22:23.416 [DEBUG] [Thread-134051] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:22:23.427 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:22:23.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T20:22:23.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T20:22:23.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T20:22:23.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:22:23.439 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T20:22:23.439 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:22:23.439 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:22:23.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T20:22:23.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.765069 -999.00  +19.00   8.85     57  +10.40 1 2 1 1 1    94    0 2.25 -266.57 ----- 15.3 8.8 200.6 24.3 20.1 -19.0 20.1 -19.0 19.8 -19.1 20.1 -19.2
2025-12-31T20:22:23.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T20:22:23.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T20:22:23.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.765069
2025-12-31T20:22:23.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T20:22:23.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T20:22:23.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T20:22:23.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T20:22:23.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T20:22:23.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T20:22:15', tmtdew=9.18, humidity=54.91, cloud=0.0, wind=20.91, temperature=18.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T18:21:41.962', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T20:22:23.442 [DEBUG] [Thread-134051] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:22:23.526 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T20:22:23.537 [DEBUG] [Thread-134054] [transport.py] [_log()] starting thread (client mode): 0xb6bbefb0
2025-12-31T20:22:23.538 [DEBUG] [Thread-134054] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:22:23.554 [DEBUG] [Thread-134054] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T20:22:23.554 [INFO] [Thread-134054] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T20:22:23.561 [DEBUG] [Thread-134054] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:22:23.562 [DEBUG] [Thread-134054] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T20:22:23.562 [DEBUG] [Thread-134054] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:22:23.562 [DEBUG] [Thread-134054] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:22:23.562 [DEBUG] [Thread-134054] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:22:23.562 [DEBUG] [Thread-134054] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:22:23.562 [DEBUG] [Thread-134054] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:22:23.562 [DEBUG] [Thread-134054] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:22:23.562 [DEBUG] [Thread-134054] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:22:23.562 [DEBUG] [Thread-134054] [transport.py] [_log()] client lang: <none>
2025-12-31T20:22:23.562 [DEBUG] [Thread-134054] [transport.py] [_log()] server lang: <none>
2025-12-31T20:22:23.562 [DEBUG] [Thread-134054] [transport.py] [_log()] kex follows: False
2025-12-31T20:22:23.562 [DEBUG] [Thread-134054] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:22:23.562 [DEBUG] [Thread-134054] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:22:23.562 [DEBUG] [Thread-134054] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:22:23.562 [DEBUG] [Thread-134054] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:22:23.562 [DEBUG] [Thread-134054] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:22:23.562 [DEBUG] [Thread-134054] [transport.py] [_log()] Compression: none
2025-12-31T20:22:23.562 [DEBUG] [Thread-134054] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:22:23.625 [DEBUG] [Thread-134054] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:22:23.626 [DEBUG] [Thread-134054] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:22:23.626 [DEBUG] [Thread-134054] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T20:22:23.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T20:22:23.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:22:23.684 [DEBUG] [Thread-134054] [transport.py] [_log()] userauth is OK
2025-12-31T20:22:23.684 [DEBUG] [Thread-134054] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:22:23.684 [DEBUG] [Thread-134054] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:22:23.684 [DEBUG] [Thread-134054] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T20:22:23.684 [DEBUG] [Thread-134054] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:22:23.704 [INFO] [Thread-134054] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:22:23.704 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T20:22:23.705 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:22:24.538 [DEBUG] [Thread-134054] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:22:24.539 [DEBUG] [Thread-134054] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:22:24.587 [DEBUG] [Thread-134054] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:22:24.587 [DEBUG] [Thread-134054] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:22:24.596 [DEBUG] [Thread-134054] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:22:24.606 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:22:24.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T20:22:24.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T20:22:24.624 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:22:24.625 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:22:24.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:22:24.634 [DEBUG] [Thread-134054] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:22:29.201 [DEBUG] [Thread-134056 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:22:37.445 [DEBUG] [Thread-134057 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:22:44.246 [DEBUG] [Thread-134058 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:22:54.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T20:22:54.652 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T20:22:54.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T20:22:55.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 20, 22, 47), 9.09, 55.41, 0.0, 17.93, 18.56, 0, 0, 0, 2, 0, 0),)
2025-12-31T20:22:55.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 20:22:47
2025-12-31T20:22:55.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T20:22:55.655 [DEBUG] [Thread-134059] [transport.py] [_log()] starting thread (client mode): 0xb1759de0
2025-12-31T20:22:55.655 [DEBUG] [Thread-134059] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:22:55.675 [DEBUG] [Thread-134059] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T20:22:55.675 [INFO] [Thread-134059] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T20:22:55.678 [DEBUG] [Thread-134059] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:22:55.679 [DEBUG] [Thread-134059] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T20:22:55.679 [DEBUG] [Thread-134059] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:22:55.679 [DEBUG] [Thread-134059] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:22:55.679 [DEBUG] [Thread-134059] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:22:55.679 [DEBUG] [Thread-134059] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:22:55.679 [DEBUG] [Thread-134059] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:22:55.679 [DEBUG] [Thread-134059] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:22:55.679 [DEBUG] [Thread-134059] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:22:55.679 [DEBUG] [Thread-134059] [transport.py] [_log()] client lang: <none>
2025-12-31T20:22:55.679 [DEBUG] [Thread-134059] [transport.py] [_log()] server lang: <none>
2025-12-31T20:22:55.679 [DEBUG] [Thread-134059] [transport.py] [_log()] kex follows: False
2025-12-31T20:22:55.679 [DEBUG] [Thread-134059] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:22:55.680 [DEBUG] [Thread-134059] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:22:55.680 [DEBUG] [Thread-134059] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:22:55.680 [DEBUG] [Thread-134059] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:22:55.680 [DEBUG] [Thread-134059] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:22:55.680 [DEBUG] [Thread-134059] [transport.py] [_log()] Compression: none
2025-12-31T20:22:55.680 [DEBUG] [Thread-134059] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:22:55.699 [DEBUG] [Thread-134059] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:22:55.700 [DEBUG] [Thread-134059] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:22:55.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T20:22:55.701 [DEBUG] [Thread-134059] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T20:22:55.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:22:55.744 [DEBUG] [Thread-134059] [transport.py] [_log()] userauth is OK
2025-12-31T20:22:55.745 [DEBUG] [Thread-134059] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:22:55.745 [DEBUG] [Thread-134059] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:22:55.745 [DEBUG] [Thread-134059] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T20:22:55.745 [DEBUG] [Thread-134059] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:22:55.781 [INFO] [Thread-134059] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:22:55.781 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:22:56.443 [DEBUG] [Thread-134059] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:22:56.443 [DEBUG] [Thread-134059] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:22:56.443 [DEBUG] [Thread-134059] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T20:22:56.484 [DEBUG] [Thread-134059] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:22:56.484 [DEBUG] [Thread-134059] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:22:56.488 [DEBUG] [Thread-134059] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:22:56.499 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:22:56.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T20:22:56.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T20:22:56.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T20:22:56.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:22:56.512 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T20:22:56.512 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:22:56.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:22:56.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T20:22:56.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.765416 -999.00  +19.00   9.94     57  +10.50 1 2 1 1 1    86    0 3.14 -232.54 ----- 5.8 9.9 176.3 20.3 20.1 -19.2 20.0 -19.3 19.8 -19.2 20.1 -19.4
2025-12-31T20:22:56.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T20:22:56.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T20:22:56.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.765416
2025-12-31T20:22:56.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T20:22:56.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T20:22:56.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T20:22:56.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T20:22:56.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T20:22:56.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T20:22:47', tmtdew=9.09, humidity=55.41, cloud=0.0, wind=17.93, temperature=18.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T18:22:11.942', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T20:22:56.515 [DEBUG] [Thread-134059] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:22:56.599 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T20:22:56.612 [DEBUG] [Thread-134062] [transport.py] [_log()] starting thread (client mode): 0xb17467d0
2025-12-31T20:22:56.612 [DEBUG] [Thread-134062] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:22:56.629 [DEBUG] [Thread-134062] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T20:22:56.630 [INFO] [Thread-134062] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T20:22:56.637 [DEBUG] [Thread-134062] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:22:56.638 [DEBUG] [Thread-134062] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T20:22:56.638 [DEBUG] [Thread-134062] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:22:56.638 [DEBUG] [Thread-134062] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:22:56.638 [DEBUG] [Thread-134062] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:22:56.638 [DEBUG] [Thread-134062] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:22:56.638 [DEBUG] [Thread-134062] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:22:56.638 [DEBUG] [Thread-134062] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:22:56.638 [DEBUG] [Thread-134062] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:22:56.638 [DEBUG] [Thread-134062] [transport.py] [_log()] client lang: <none>
2025-12-31T20:22:56.638 [DEBUG] [Thread-134062] [transport.py] [_log()] server lang: <none>
2025-12-31T20:22:56.638 [DEBUG] [Thread-134062] [transport.py] [_log()] kex follows: False
2025-12-31T20:22:56.638 [DEBUG] [Thread-134062] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:22:56.638 [DEBUG] [Thread-134062] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:22:56.638 [DEBUG] [Thread-134062] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:22:56.639 [DEBUG] [Thread-134062] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:22:56.639 [DEBUG] [Thread-134062] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:22:56.639 [DEBUG] [Thread-134062] [transport.py] [_log()] Compression: none
2025-12-31T20:22:56.639 [DEBUG] [Thread-134062] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:22:56.697 [DEBUG] [Thread-134062] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:22:56.698 [DEBUG] [Thread-134062] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:22:56.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T20:22:56.699 [DEBUG] [Thread-134062] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T20:22:56.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:22:56.754 [DEBUG] [Thread-134062] [transport.py] [_log()] userauth is OK
2025-12-31T20:22:56.754 [DEBUG] [Thread-134062] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:22:56.755 [DEBUG] [Thread-134062] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:22:56.755 [DEBUG] [Thread-134062] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T20:22:56.755 [DEBUG] [Thread-134062] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:22:56.774 [INFO] [Thread-134062] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:22:56.774 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T20:22:56.775 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:22:57.563 [DEBUG] [Thread-134062] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:22:57.563 [DEBUG] [Thread-134062] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:22:57.611 [DEBUG] [Thread-134062] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:22:57.611 [DEBUG] [Thread-134062] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:22:57.620 [DEBUG] [Thread-134062] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:22:57.629 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:22:57.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T20:22:57.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T20:22:57.646 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:22:57.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:22:57.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:22:57.655 [DEBUG] [Thread-134062] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:22:59.276 [DEBUG] [Thread-134064 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:23:14.337 [DEBUG] [Thread-134065 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:23:20.323 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:23:20.323 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:23:27.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T20:23:27.677 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T20:23:27.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-12-31T20:23:28.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 20, 23, 19), 9.12, 55.29, 0.0, 17.26, 18.6, 0, 0, 0, 2, 0, 0),)
2025-12-31T20:23:28.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 20:23:19
2025-12-31T20:23:28.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T20:23:28.711 [DEBUG] [Thread-134066] [transport.py] [_log()] starting thread (client mode): 0xb1759ea0
2025-12-31T20:23:28.712 [DEBUG] [Thread-134066] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:23:28.726 [DEBUG] [Thread-134066] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T20:23:28.726 [INFO] [Thread-134066] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T20:23:28.727 [DEBUG] [Thread-134066] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:23:28.727 [DEBUG] [Thread-134066] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T20:23:28.727 [DEBUG] [Thread-134066] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:23:28.727 [DEBUG] [Thread-134066] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:23:28.727 [DEBUG] [Thread-134066] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:23:28.727 [DEBUG] [Thread-134066] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:23:28.727 [DEBUG] [Thread-134066] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:23:28.727 [DEBUG] [Thread-134066] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:23:28.727 [DEBUG] [Thread-134066] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:23:28.727 [DEBUG] [Thread-134066] [transport.py] [_log()] client lang: <none>
2025-12-31T20:23:28.727 [DEBUG] [Thread-134066] [transport.py] [_log()] server lang: <none>
2025-12-31T20:23:28.727 [DEBUG] [Thread-134066] [transport.py] [_log()] kex follows: False
2025-12-31T20:23:28.727 [DEBUG] [Thread-134066] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:23:28.727 [DEBUG] [Thread-134066] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:23:28.727 [DEBUG] [Thread-134066] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:23:28.727 [DEBUG] [Thread-134066] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:23:28.727 [DEBUG] [Thread-134066] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:23:28.727 [DEBUG] [Thread-134066] [transport.py] [_log()] Compression: none
2025-12-31T20:23:28.727 [DEBUG] [Thread-134066] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:23:28.734 [DEBUG] [Thread-134066] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:23:28.734 [DEBUG] [Thread-134066] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:23:28.734 [DEBUG] [Thread-134066] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T20:23:28.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T20:23:28.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:23:28.735 [DEBUG] [Thread-134066] [transport.py] [_log()] userauth is OK
2025-12-31T20:23:28.735 [DEBUG] [Thread-134066] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:23:28.735 [DEBUG] [Thread-134066] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:23:28.735 [DEBUG] [Thread-134066] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T20:23:28.735 [DEBUG] [Thread-134066] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:23:28.744 [INFO] [Thread-134066] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:23:28.744 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:23:29.368 [DEBUG] [Thread-134068 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:23:29.414 [DEBUG] [Thread-134066] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:23:29.414 [DEBUG] [Thread-134066] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:23:29.414 [DEBUG] [Thread-134066] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T20:23:29.455 [DEBUG] [Thread-134066] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:23:29.455 [DEBUG] [Thread-134066] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:23:29.457 [DEBUG] [Thread-134066] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:23:29.469 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:23:29.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T20:23:29.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T20:23:29.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T20:23:29.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:23:29.476 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T20:23:29.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:23:29.476 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:23:29.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T20:23:29.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.765764 -999.00  +19.00  12.53     57  +10.50 1 2 1 1 1    80    0 3.30 -214.65 ----- 14.2 12.5 228.2 20.9 20.1 -19.0 20.0 -19.3 19.8 -19.0 20.1 -19.2
2025-12-31T20:23:29.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T20:23:29.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T20:23:29.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.765764
2025-12-31T20:23:29.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T20:23:29.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T20:23:29.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T20:23:29.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T20:23:29.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T20:23:29.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T20:23:19', tmtdew=9.12, humidity=55.29, cloud=0.0, wind=17.26, temperature=18.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T18:22:42.010', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T20:23:29.477 [DEBUG] [Thread-134066] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:23: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-12-31T20:23:29.562 [DEBUG] [Thread-134070] [transport.py] [_log()] starting thread (client mode): 0xb6bb29e0
2025-12-31T20:23:29.562 [DEBUG] [Thread-134070] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:23:29.577 [DEBUG] [Thread-134070] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T20:23:29.577 [INFO] [Thread-134070] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T20:23:29.588 [DEBUG] [Thread-134070] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:23:29.588 [DEBUG] [Thread-134070] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T20:23:29.588 [DEBUG] [Thread-134070] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:23:29.588 [DEBUG] [Thread-134070] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:23:29.588 [DEBUG] [Thread-134070] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:23:29.588 [DEBUG] [Thread-134070] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:23:29.588 [DEBUG] [Thread-134070] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:23:29.588 [DEBUG] [Thread-134070] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:23:29.588 [DEBUG] [Thread-134070] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:23:29.588 [DEBUG] [Thread-134070] [transport.py] [_log()] client lang: <none>
2025-12-31T20:23:29.588 [DEBUG] [Thread-134070] [transport.py] [_log()] server lang: <none>
2025-12-31T20:23:29.588 [DEBUG] [Thread-134070] [transport.py] [_log()] kex follows: False
2025-12-31T20:23:29.588 [DEBUG] [Thread-134070] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:23:29.588 [DEBUG] [Thread-134070] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:23:29.588 [DEBUG] [Thread-134070] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:23:29.588 [DEBUG] [Thread-134070] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:23:29.589 [DEBUG] [Thread-134070] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:23:29.589 [DEBUG] [Thread-134070] [transport.py] [_log()] Compression: none
2025-12-31T20:23:29.589 [DEBUG] [Thread-134070] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:23:29.640 [DEBUG] [Thread-134070] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:23:29.640 [DEBUG] [Thread-134070] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:23:29.640 [DEBUG] [Thread-134070] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T20:23:29.640 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T20:23:29.641 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:23:29.698 [DEBUG] [Thread-134070] [transport.py] [_log()] userauth is OK
2025-12-31T20:23:29.698 [DEBUG] [Thread-134070] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:23:29.698 [DEBUG] [Thread-134070] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:23:29.698 [DEBUG] [Thread-134070] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T20:23:29.698 [DEBUG] [Thread-134070] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:23:29.717 [INFO] [Thread-134070] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:23:29.717 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T20:23:29.717 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:23:30.571 [DEBUG] [Thread-134070] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:23:30.571 [DEBUG] [Thread-134070] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:23:30.619 [DEBUG] [Thread-134070] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:23:30.619 [DEBUG] [Thread-134070] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:23:30.631 [DEBUG] [Thread-134070] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:23:30.640 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:23:30.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T20:23:30.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T20:23:30.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:23:30.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:23:30.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:23:30.668 [DEBUG] [Thread-134070] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:23:37.530 [DEBUG] [Thread-134072 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:23:44.399 [DEBUG] [Thread-134073 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:23:59.450 [DEBUG] [Thread-134074 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:24:00.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T20:24:00.677 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T20:24:00.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T20:24:01.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 20, 23, 51), 9.13, 55.24, 0.0, 19.97, 18.6, 0, 0, 0, 2, 0, 0),)
2025-12-31T20:24:01.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 20:23:51
2025-12-31T20:24:01.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T20:24:01.675 [DEBUG] [Thread-134075] [transport.py] [_log()] starting thread (client mode): 0xb1746ef0
2025-12-31T20:24:01.675 [DEBUG] [Thread-134075] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:24:01.695 [DEBUG] [Thread-134075] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T20:24:01.695 [INFO] [Thread-134075] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T20:24:01.698 [DEBUG] [Thread-134075] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:24:01.699 [DEBUG] [Thread-134075] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T20:24:01.699 [DEBUG] [Thread-134075] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:24:01.699 [DEBUG] [Thread-134075] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:24:01.699 [DEBUG] [Thread-134075] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:24:01.699 [DEBUG] [Thread-134075] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:24:01.699 [DEBUG] [Thread-134075] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:24:01.699 [DEBUG] [Thread-134075] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:24:01.699 [DEBUG] [Thread-134075] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:24:01.699 [DEBUG] [Thread-134075] [transport.py] [_log()] client lang: <none>
2025-12-31T20:24:01.699 [DEBUG] [Thread-134075] [transport.py] [_log()] server lang: <none>
2025-12-31T20:24:01.699 [DEBUG] [Thread-134075] [transport.py] [_log()] kex follows: False
2025-12-31T20:24:01.699 [DEBUG] [Thread-134075] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:24:01.699 [DEBUG] [Thread-134075] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:24:01.699 [DEBUG] [Thread-134075] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:24:01.699 [DEBUG] [Thread-134075] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:24:01.700 [DEBUG] [Thread-134075] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:24:01.700 [DEBUG] [Thread-134075] [transport.py] [_log()] Compression: none
2025-12-31T20:24:01.700 [DEBUG] [Thread-134075] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:24:01.716 [DEBUG] [Thread-134075] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:24:01.716 [DEBUG] [Thread-134075] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:24:01.717 [DEBUG] [Thread-134075] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T20:24:01.717 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T20:24:01.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:24:01.761 [DEBUG] [Thread-134075] [transport.py] [_log()] userauth is OK
2025-12-31T20:24:01.761 [DEBUG] [Thread-134075] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:24:01.762 [DEBUG] [Thread-134075] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:24:01.762 [DEBUG] [Thread-134075] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T20:24:01.762 [DEBUG] [Thread-134075] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:24:01.800 [INFO] [Thread-134075] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:24:01.801 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:24:02.461 [DEBUG] [Thread-134075] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:24:02.462 [DEBUG] [Thread-134075] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:24:02.462 [DEBUG] [Thread-134075] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T20:24:02.502 [DEBUG] [Thread-134075] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:24:02.502 [DEBUG] [Thread-134075] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:24:02.506 [DEBUG] [Thread-134075] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:24:02.518 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:24:02.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T20:24:02.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T20:24:02.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T20:24:02.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:24:02.531 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T20:24:02.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:24:02.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:24:02.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T20:24:02.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.766111 -999.00  +19.00   7.38     57  +10.40 1 2 1 1 1    73    0 3.57 -212.47 ----- 4.0 7.4 228.8 14.5 20.1 -19.1 20.0 -19.1 19.8 -19.0 20.0 -19.2
2025-12-31T20:24:02.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T20:24:02.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T20:24:02.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.766111
2025-12-31T20:24:02.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T20:24:02.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T20:24:02.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T20:24:02.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T20:24:02.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T20:24:02.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T20:23:51', tmtdew=9.13, humidity=55.24, cloud=0.0, wind=19.97, temperature=18.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T18:23:11.990', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T20:24:02.534 [DEBUG] [Thread-134075] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:24: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-12-31T20:24:02.640 [DEBUG] [Thread-134078] [transport.py] [_log()] starting thread (client mode): 0xb17476a0
2025-12-31T20:24:02.640 [DEBUG] [Thread-134078] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:24:02.654 [DEBUG] [Thread-134078] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T20:24:02.654 [INFO] [Thread-134078] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T20:24:02.661 [DEBUG] [Thread-134078] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:24:02.662 [DEBUG] [Thread-134078] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T20:24:02.662 [DEBUG] [Thread-134078] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:24:02.662 [DEBUG] [Thread-134078] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:24:02.662 [DEBUG] [Thread-134078] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:24:02.662 [DEBUG] [Thread-134078] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:24:02.662 [DEBUG] [Thread-134078] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:24:02.662 [DEBUG] [Thread-134078] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:24:02.662 [DEBUG] [Thread-134078] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:24:02.663 [DEBUG] [Thread-134078] [transport.py] [_log()] client lang: <none>
2025-12-31T20:24:02.663 [DEBUG] [Thread-134078] [transport.py] [_log()] server lang: <none>
2025-12-31T20:24:02.663 [DEBUG] [Thread-134078] [transport.py] [_log()] kex follows: False
2025-12-31T20:24:02.663 [DEBUG] [Thread-134078] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:24:02.663 [DEBUG] [Thread-134078] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:24:02.663 [DEBUG] [Thread-134078] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:24:02.663 [DEBUG] [Thread-134078] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:24:02.663 [DEBUG] [Thread-134078] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:24:02.663 [DEBUG] [Thread-134078] [transport.py] [_log()] Compression: none
2025-12-31T20:24:02.663 [DEBUG] [Thread-134078] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:24:02.718 [DEBUG] [Thread-134078] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:24:02.718 [DEBUG] [Thread-134078] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:24:02.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T20:24:02.719 [DEBUG] [Thread-134078] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T20:24:02.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:24:02.776 [DEBUG] [Thread-134078] [transport.py] [_log()] userauth is OK
2025-12-31T20:24:02.776 [DEBUG] [Thread-134078] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:24:02.776 [DEBUG] [Thread-134078] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:24:02.777 [DEBUG] [Thread-134078] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T20:24:02.777 [DEBUG] [Thread-134078] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:24:02.796 [INFO] [Thread-134078] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:24:02.796 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T20:24:02.797 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:24:03.631 [DEBUG] [Thread-134078] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:24:03.631 [DEBUG] [Thread-134078] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:24:03.680 [DEBUG] [Thread-134078] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:24:03.680 [DEBUG] [Thread-134078] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:24:03.689 [DEBUG] [Thread-134078] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:24:03.696 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:24:03.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T20:24:03.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T20:24:03.712 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:24:03.712 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:24:03.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:24:03.720 [DEBUG] [Thread-134078] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:24:14.482 [DEBUG] [Thread-134080 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:24:25.633 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:24:25.634 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:24:29.535 [DEBUG] [Thread-134081 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:24:33.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T20:24:33.743 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T20:24:33.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T20:24:34.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 20, 24, 23), 9.09, 55.39, 0.0, 22.06, 18.58, 0, 0, 0, 2, 0, 0),)
2025-12-31T20:24:34.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 20:24:23
2025-12-31T20:24:34.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T20:24:34.734 [DEBUG] [Thread-134082] [transport.py] [_log()] starting thread (client mode): 0xb1777a00
2025-12-31T20:24:34.734 [DEBUG] [Thread-134082] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:24:34.755 [DEBUG] [Thread-134082] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T20:24:34.755 [INFO] [Thread-134082] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T20:24:34.758 [DEBUG] [Thread-134082] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:24:34.758 [DEBUG] [Thread-134082] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T20:24:34.758 [DEBUG] [Thread-134082] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:24:34.758 [DEBUG] [Thread-134082] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:24:34.758 [DEBUG] [Thread-134082] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:24:34.758 [DEBUG] [Thread-134082] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:24:34.758 [DEBUG] [Thread-134082] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:24:34.758 [DEBUG] [Thread-134082] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:24:34.758 [DEBUG] [Thread-134082] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:24:34.758 [DEBUG] [Thread-134082] [transport.py] [_log()] client lang: <none>
2025-12-31T20:24:34.759 [DEBUG] [Thread-134082] [transport.py] [_log()] server lang: <none>
2025-12-31T20:24:34.759 [DEBUG] [Thread-134082] [transport.py] [_log()] kex follows: False
2025-12-31T20:24:34.759 [DEBUG] [Thread-134082] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:24:34.759 [DEBUG] [Thread-134082] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:24:34.759 [DEBUG] [Thread-134082] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:24:34.759 [DEBUG] [Thread-134082] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:24:34.759 [DEBUG] [Thread-134082] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:24:34.759 [DEBUG] [Thread-134082] [transport.py] [_log()] Compression: none
2025-12-31T20:24:34.759 [DEBUG] [Thread-134082] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:24:34.778 [DEBUG] [Thread-134082] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:24:34.779 [DEBUG] [Thread-134082] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:24:34.780 [DEBUG] [Thread-134082] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T20:24:34.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T20:24:34.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:24:34.785 [DEBUG] [Thread-134082] [transport.py] [_log()] userauth is OK
2025-12-31T20:24:34.785 [DEBUG] [Thread-134082] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:24:34.786 [DEBUG] [Thread-134082] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:24:34.786 [DEBUG] [Thread-134082] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T20:24:34.786 [DEBUG] [Thread-134082] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:24:34.810 [INFO] [Thread-134082] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:24:34.810 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:24:35.544 [DEBUG] [Thread-134082] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:24:35.545 [DEBUG] [Thread-134082] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:24:35.545 [DEBUG] [Thread-134082] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T20:24:35.587 [DEBUG] [Thread-134082] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:24:35.587 [DEBUG] [Thread-134082] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:24:35.590 [DEBUG] [Thread-134082] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:24:35.604 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:24:35.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T20:24:35.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T20:24:35.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T20:24:35.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:24:35.615 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T20:24:35.615 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:24:35.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:24:35.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T20:24:35.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.766458 -999.00  +19.00  14.79     57  +10.50 1 2 1 1 1    68    0 3.74 -205.30 ----- 9.7 14.8 213.5 17.9 20.1 -19.1 20.0 -19.1 19.8 -19.0 20.0 -19.2
2025-12-31T20:24:35.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T20:24:35.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T20:24:35.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.766458
2025-12-31T20:24:35.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T20:24:35.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T20:24:35.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T20:24:35.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T20:24:35.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T20:24:35.618 [DEBUG] [Thread-134082] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:24:35.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T20:24:23', tmtdew=9.09, humidity=55.39, cloud=0.0, wind=22.06, temperature=18.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T18:23:41.971', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T20:24:35.713 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T20:24:35.724 [DEBUG] [Thread-134085] [transport.py] [_log()] starting thread (client mode): 0xb9591ab0
2025-12-31T20:24:35.724 [DEBUG] [Thread-134085] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:24:35.744 [DEBUG] [Thread-134085] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T20:24:35.745 [INFO] [Thread-134085] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T20:24:35.752 [DEBUG] [Thread-134085] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:24:35.752 [DEBUG] [Thread-134085] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T20:24:35.752 [DEBUG] [Thread-134085] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:24:35.752 [DEBUG] [Thread-134085] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:24:35.752 [DEBUG] [Thread-134085] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:24:35.752 [DEBUG] [Thread-134085] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:24:35.752 [DEBUG] [Thread-134085] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:24:35.752 [DEBUG] [Thread-134085] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:24:35.752 [DEBUG] [Thread-134085] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:24:35.752 [DEBUG] [Thread-134085] [transport.py] [_log()] client lang: <none>
2025-12-31T20:24:35.753 [DEBUG] [Thread-134085] [transport.py] [_log()] server lang: <none>
2025-12-31T20:24:35.753 [DEBUG] [Thread-134085] [transport.py] [_log()] kex follows: False
2025-12-31T20:24:35.753 [DEBUG] [Thread-134085] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:24:35.753 [DEBUG] [Thread-134085] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:24:35.753 [DEBUG] [Thread-134085] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:24:35.753 [DEBUG] [Thread-134085] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:24:35.753 [DEBUG] [Thread-134085] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:24:35.753 [DEBUG] [Thread-134085] [transport.py] [_log()] Compression: none
2025-12-31T20:24:35.753 [DEBUG] [Thread-134085] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:24:35.812 [DEBUG] [Thread-134085] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:24:35.813 [DEBUG] [Thread-134085] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:24:35.813 [DEBUG] [Thread-134085] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T20:24:35.814 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T20:24:35.814 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:24:35.868 [DEBUG] [Thread-134085] [transport.py] [_log()] userauth is OK
2025-12-31T20:24:35.869 [DEBUG] [Thread-134085] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:24:35.869 [DEBUG] [Thread-134085] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:24:35.869 [DEBUG] [Thread-134085] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T20:24:35.869 [DEBUG] [Thread-134085] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:24:35.889 [INFO] [Thread-134085] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:24:35.889 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T20:24:35.890 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:24:36.713 [DEBUG] [Thread-134085] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:24:36.713 [DEBUG] [Thread-134085] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:24:36.761 [DEBUG] [Thread-134085] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:24:36.761 [DEBUG] [Thread-134085] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:24:36.770 [DEBUG] [Thread-134085] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:24:36.779 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:24:36.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T20:24:36.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T20:24:36.797 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:24:36.797 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:24:36.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:24:36.806 [DEBUG] [Thread-134085] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:24:37.607 [DEBUG] [Thread-134087 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:24:44.568 [DEBUG] [Thread-134088 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:24:59.608 [DEBUG] [Thread-134089 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:25:06.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T20:25:06.829 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T20:25:06.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-12-31T20:25:07.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 20, 24, 55), 9.02, 55.48, 0.0, 19.46, 18.56, 0, 0, 0, 2, 0, 0),)
2025-12-31T20:25:07.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 20:24:55
2025-12-31T20:25:07.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T20:25:07.810 [DEBUG] [Thread-134090] [transport.py] [_log()] starting thread (client mode): 0xb17858a0
2025-12-31T20:25:07.810 [DEBUG] [Thread-134090] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:25:07.829 [DEBUG] [Thread-134090] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T20:25:07.829 [INFO] [Thread-134090] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T20:25:07.832 [DEBUG] [Thread-134090] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:25:07.832 [DEBUG] [Thread-134090] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T20:25:07.833 [DEBUG] [Thread-134090] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:25:07.833 [DEBUG] [Thread-134090] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:25:07.833 [DEBUG] [Thread-134090] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:25:07.833 [DEBUG] [Thread-134090] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:25:07.833 [DEBUG] [Thread-134090] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:25:07.833 [DEBUG] [Thread-134090] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:25:07.833 [DEBUG] [Thread-134090] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:25:07.833 [DEBUG] [Thread-134090] [transport.py] [_log()] client lang: <none>
2025-12-31T20:25:07.833 [DEBUG] [Thread-134090] [transport.py] [_log()] server lang: <none>
2025-12-31T20:25:07.833 [DEBUG] [Thread-134090] [transport.py] [_log()] kex follows: False
2025-12-31T20:25:07.833 [DEBUG] [Thread-134090] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:25:07.833 [DEBUG] [Thread-134090] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:25:07.833 [DEBUG] [Thread-134090] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:25:07.833 [DEBUG] [Thread-134090] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:25:07.833 [DEBUG] [Thread-134090] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:25:07.833 [DEBUG] [Thread-134090] [transport.py] [_log()] Compression: none
2025-12-31T20:25:07.833 [DEBUG] [Thread-134090] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:25:07.849 [DEBUG] [Thread-134090] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:25:07.850 [DEBUG] [Thread-134090] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:25:07.850 [DEBUG] [Thread-134090] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T20:25:07.850 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T20:25:07.851 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:25:07.852 [DEBUG] [Thread-134090] [transport.py] [_log()] userauth is OK
2025-12-31T20:25:07.852 [DEBUG] [Thread-134090] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:25:07.852 [DEBUG] [Thread-134090] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:25:07.852 [DEBUG] [Thread-134090] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T20:25:07.853 [DEBUG] [Thread-134090] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:25:07.877 [INFO] [Thread-134090] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:25:07.878 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:25:14.645 [DEBUG] [Thread-134092 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:25:17.113 [DEBUG] [Thread-134090] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:25:17.114 [DEBUG] [Thread-134090] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:25:17.114 [DEBUG] [Thread-134090] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T20:25:17.155 [DEBUG] [Thread-134090] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:25:17.155 [DEBUG] [Thread-134090] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:25:17.158 [DEBUG] [Thread-134090] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:25:17.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:25:17.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T20:25:17.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T20:25:17.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T20:25:17.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:25:17.198 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T20:25:17.198 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:25:17.199 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:25:17.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T20:25:17.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.767152 -999.00  +18.90  14.59     58  +10.50 1 2 1 1 1    57    0 3.16 -213.64 ----- 23.2 14.6 196.8 18.3 20.1 -19.1 19.9 -19.1 19.7 -18.9 19.9 -19.4
2025-12-31T20:25:17.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T20:25:17.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T20:25:17.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.767152
2025-12-31T20:25:17.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T20:25:17.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T20:25:17.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T20:25:17.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T20:25:17.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T20:25:17.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T20:24:55', tmtdew=9.02, humidity=55.48, cloud=0.0, wind=19.46, temperature=18.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T18:24:41.933', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T20:25:17.201 [DEBUG] [Thread-134090] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:25:17.285 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T20:25:17.298 [DEBUG] [Thread-134094] [transport.py] [_log()] starting thread (client mode): 0xb1784af0
2025-12-31T20:25:17.298 [DEBUG] [Thread-134094] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:25:17.312 [DEBUG] [Thread-134094] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T20:25:17.312 [INFO] [Thread-134094] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T20:25:17.320 [DEBUG] [Thread-134094] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:25:17.320 [DEBUG] [Thread-134094] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T20:25:17.320 [DEBUG] [Thread-134094] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:25:17.320 [DEBUG] [Thread-134094] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:25:17.320 [DEBUG] [Thread-134094] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:25:17.320 [DEBUG] [Thread-134094] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:25:17.320 [DEBUG] [Thread-134094] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:25:17.321 [DEBUG] [Thread-134094] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:25:17.321 [DEBUG] [Thread-134094] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:25:17.321 [DEBUG] [Thread-134094] [transport.py] [_log()] client lang: <none>
2025-12-31T20:25:17.321 [DEBUG] [Thread-134094] [transport.py] [_log()] server lang: <none>
2025-12-31T20:25:17.321 [DEBUG] [Thread-134094] [transport.py] [_log()] kex follows: False
2025-12-31T20:25:17.321 [DEBUG] [Thread-134094] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:25:17.321 [DEBUG] [Thread-134094] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:25:17.321 [DEBUG] [Thread-134094] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:25:17.321 [DEBUG] [Thread-134094] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:25:17.321 [DEBUG] [Thread-134094] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:25:17.321 [DEBUG] [Thread-134094] [transport.py] [_log()] Compression: none
2025-12-31T20:25:17.321 [DEBUG] [Thread-134094] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:25:17.377 [DEBUG] [Thread-134094] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:25:17.377 [DEBUG] [Thread-134094] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:25:17.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T20:25:17.378 [DEBUG] [Thread-134094] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T20:25:17.379 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:25:17.433 [DEBUG] [Thread-134094] [transport.py] [_log()] userauth is OK
2025-12-31T20:25:17.433 [DEBUG] [Thread-134094] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:25:17.433 [DEBUG] [Thread-134094] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:25:17.434 [DEBUG] [Thread-134094] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T20:25:17.434 [DEBUG] [Thread-134094] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:25:17.452 [INFO] [Thread-134094] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:25:17.453 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T20:25:17.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:25:18.274 [DEBUG] [Thread-134094] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:25:18.274 [DEBUG] [Thread-134094] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:25:18.322 [DEBUG] [Thread-134094] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:25:18.322 [DEBUG] [Thread-134094] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:25:18.333 [DEBUG] [Thread-134094] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:25:18.342 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:25:18.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T20:25:18.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T20:25:18.361 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:25:18.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:25:18.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:25:18.370 [DEBUG] [Thread-134094] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:25:29.677 [DEBUG] [Thread-134096 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:25:30.367 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:25:30.369 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:25:37.683 [DEBUG] [Thread-134097 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:25:44.719 [DEBUG] [Thread-134098 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:25:48.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T20:25:48.372 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T20:25:48.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T20:25:49.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 20, 25, 27), 9.01, 55.49, 0.0, 20.86, 18.56, 0, 0, 0, 2, 0, 0),)
2025-12-31T20:25:49.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 20:25:27
2025-12-31T20:25:49.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T20:25:49.348 [DEBUG] [Thread-134099] [transport.py] [_log()] starting thread (client mode): 0xb957a620
2025-12-31T20:25:49.348 [DEBUG] [Thread-134099] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:25:49.368 [DEBUG] [Thread-134099] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T20:25:49.368 [INFO] [Thread-134099] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T20:25:49.372 [DEBUG] [Thread-134099] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:25:49.372 [DEBUG] [Thread-134099] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T20:25:49.372 [DEBUG] [Thread-134099] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:25:49.372 [DEBUG] [Thread-134099] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:25:49.372 [DEBUG] [Thread-134099] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:25:49.372 [DEBUG] [Thread-134099] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:25:49.372 [DEBUG] [Thread-134099] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:25:49.372 [DEBUG] [Thread-134099] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:25:49.372 [DEBUG] [Thread-134099] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:25:49.372 [DEBUG] [Thread-134099] [transport.py] [_log()] client lang: <none>
2025-12-31T20:25:49.372 [DEBUG] [Thread-134099] [transport.py] [_log()] server lang: <none>
2025-12-31T20:25:49.372 [DEBUG] [Thread-134099] [transport.py] [_log()] kex follows: False
2025-12-31T20:25:49.372 [DEBUG] [Thread-134099] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:25:49.372 [DEBUG] [Thread-134099] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:25:49.372 [DEBUG] [Thread-134099] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:25:49.372 [DEBUG] [Thread-134099] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:25:49.372 [DEBUG] [Thread-134099] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:25:49.372 [DEBUG] [Thread-134099] [transport.py] [_log()] Compression: none
2025-12-31T20:25:49.372 [DEBUG] [Thread-134099] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:25:49.391 [DEBUG] [Thread-134099] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:25:49.392 [DEBUG] [Thread-134099] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:25:49.392 [DEBUG] [Thread-134099] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T20:25:49.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T20:25:49.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:25:49.394 [DEBUG] [Thread-134099] [transport.py] [_log()] userauth is OK
2025-12-31T20:25:49.395 [DEBUG] [Thread-134099] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:25:49.395 [DEBUG] [Thread-134099] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:25:49.395 [DEBUG] [Thread-134099] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T20:25:49.395 [DEBUG] [Thread-134099] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:25:49.420 [INFO] [Thread-134099] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:25:49.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:25:50.017 [DEBUG] [Thread-134099] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:25:50.017 [DEBUG] [Thread-134099] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:25:50.018 [DEBUG] [Thread-134099] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T20:25:50.059 [DEBUG] [Thread-134099] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:25:50.059 [DEBUG] [Thread-134099] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:25:50.064 [DEBUG] [Thread-134099] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:25:50.077 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:25:50.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T20:25:50.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T20:25:50.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T20:25:50.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:25:50.091 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T20:25:50.092 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:25:50.092 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:25:50.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T20:25:50.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.767500 -999.00  +18.80  15.69     58  +10.60 1 2 1 1 1    53    0 3.64 -206.11 ----- 13.1 15.7 194.6 24.7 20.0 -19.1 19.9 -19.2 19.6 -18.9 19.9 -19.1
2025-12-31T20:25:50.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T20:25:50.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T20:25:50.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.767500
2025-12-31T20:25:50.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T20:25:50.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T20:25:50.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T20:25:50.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T20:25:50.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T20:25:50.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T20:25:27', tmtdew=9.01, humidity=55.49, cloud=0.0, wind=20.86, temperature=18.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T18:25:12.000', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T20:25:50.094 [DEBUG] [Thread-134099] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:25:50.178 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T20:25:50.189 [DEBUG] [Thread-134102] [transport.py] [_log()] starting thread (client mode): 0xb1775a50
2025-12-31T20:25:50.189 [DEBUG] [Thread-134102] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:25:50.204 [DEBUG] [Thread-134102] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T20:25:50.204 [INFO] [Thread-134102] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T20:25:50.211 [DEBUG] [Thread-134102] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:25:50.212 [DEBUG] [Thread-134102] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T20:25:50.212 [DEBUG] [Thread-134102] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:25:50.212 [DEBUG] [Thread-134102] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:25:50.212 [DEBUG] [Thread-134102] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:25:50.212 [DEBUG] [Thread-134102] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:25:50.212 [DEBUG] [Thread-134102] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:25:50.212 [DEBUG] [Thread-134102] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:25:50.212 [DEBUG] [Thread-134102] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:25:50.213 [DEBUG] [Thread-134102] [transport.py] [_log()] client lang: <none>
2025-12-31T20:25:50.213 [DEBUG] [Thread-134102] [transport.py] [_log()] server lang: <none>
2025-12-31T20:25:50.213 [DEBUG] [Thread-134102] [transport.py] [_log()] kex follows: False
2025-12-31T20:25:50.213 [DEBUG] [Thread-134102] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:25:50.213 [DEBUG] [Thread-134102] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:25:50.213 [DEBUG] [Thread-134102] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:25:50.213 [DEBUG] [Thread-134102] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:25:50.213 [DEBUG] [Thread-134102] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:25:50.214 [DEBUG] [Thread-134102] [transport.py] [_log()] Compression: none
2025-12-31T20:25:50.214 [DEBUG] [Thread-134102] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:25:50.271 [DEBUG] [Thread-134102] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:25:50.272 [DEBUG] [Thread-134102] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:25:50.272 [DEBUG] [Thread-134102] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T20:25:50.273 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T20:25:50.273 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:25:50.331 [DEBUG] [Thread-134102] [transport.py] [_log()] userauth is OK
2025-12-31T20:25:50.331 [DEBUG] [Thread-134102] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:25:50.331 [DEBUG] [Thread-134102] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:25:50.332 [DEBUG] [Thread-134102] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T20:25:50.332 [DEBUG] [Thread-134102] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:25:50.350 [INFO] [Thread-134102] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:25:50.351 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T20:25:50.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:25:51.233 [DEBUG] [Thread-134102] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:25:51.234 [DEBUG] [Thread-134102] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:25:51.282 [DEBUG] [Thread-134102] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:25:51.282 [DEBUG] [Thread-134102] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:25:51.292 [DEBUG] [Thread-134102] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:25:51.301 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:25:51.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T20:25:51.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T20:25:51.319 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:25:51.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:25:51.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:25:51.328 [DEBUG] [Thread-134102] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:25:59.754 [DEBUG] [Thread-134104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:26:14.808 [DEBUG] [Thread-134105 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:26:21.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T20:26:21.339 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T20:26:21.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T20:26:22.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 20, 25, 59), 8.99, 56.06, 0.0, 17.8, 18.56, 0, 0, 0, 2, 0, 0),)
2025-12-31T20:26:22.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 20:25:59
2025-12-31T20:26:22.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T20:26:22.324 [DEBUG] [Thread-134106] [transport.py] [_log()] starting thread (client mode): 0xb1785390
2025-12-31T20:26:22.324 [DEBUG] [Thread-134106] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:26:22.344 [DEBUG] [Thread-134106] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T20:26:22.344 [INFO] [Thread-134106] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T20:26:22.345 [DEBUG] [Thread-134106] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:26:22.345 [DEBUG] [Thread-134106] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T20:26:22.345 [DEBUG] [Thread-134106] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:26:22.345 [DEBUG] [Thread-134106] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:26:22.345 [DEBUG] [Thread-134106] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:26:22.345 [DEBUG] [Thread-134106] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:26:22.345 [DEBUG] [Thread-134106] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:26:22.345 [DEBUG] [Thread-134106] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:26:22.345 [DEBUG] [Thread-134106] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:26:22.346 [DEBUG] [Thread-134106] [transport.py] [_log()] client lang: <none>
2025-12-31T20:26:22.346 [DEBUG] [Thread-134106] [transport.py] [_log()] server lang: <none>
2025-12-31T20:26:22.346 [DEBUG] [Thread-134106] [transport.py] [_log()] kex follows: False
2025-12-31T20:26:22.346 [DEBUG] [Thread-134106] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:26:22.346 [DEBUG] [Thread-134106] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:26:22.346 [DEBUG] [Thread-134106] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:26:22.346 [DEBUG] [Thread-134106] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:26:22.346 [DEBUG] [Thread-134106] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:26:22.346 [DEBUG] [Thread-134106] [transport.py] [_log()] Compression: none
2025-12-31T20:26:22.346 [DEBUG] [Thread-134106] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:26:22.364 [DEBUG] [Thread-134106] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:26:22.364 [DEBUG] [Thread-134106] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:26:22.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T20:26:22.365 [DEBUG] [Thread-134106] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T20:26:22.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:26:22.367 [DEBUG] [Thread-134106] [transport.py] [_log()] userauth is OK
2025-12-31T20:26:22.367 [DEBUG] [Thread-134106] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:26:22.367 [DEBUG] [Thread-134106] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:26:22.367 [DEBUG] [Thread-134106] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T20:26:22.367 [DEBUG] [Thread-134106] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:26:22.388 [INFO] [Thread-134106] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:26:22.390 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:26:23.194 [DEBUG] [Thread-134106] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:26:23.194 [DEBUG] [Thread-134106] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:26:23.195 [DEBUG] [Thread-134106] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T20:26:23.235 [DEBUG] [Thread-134106] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:26:23.235 [DEBUG] [Thread-134106] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:26:23.240 [DEBUG] [Thread-134106] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:26:23.252 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:26:23.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T20:26:23.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T20:26:23.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T20:26:23.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:26:23.265 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T20:26:23.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:26:23.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:26:23.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T20:26:23.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.767847 -999.00  +18.80  11.78     58  +10.60 1 2 1 1 1    49    0 3.89 -193.88 ----- 11.9 11.8 194.5 15.7 20.0 -19.0 19.9 -19.2 19.6 -18.8 19.9 -19.0
2025-12-31T20:26:23.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T20:26:23.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T20:26:23.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.767847
2025-12-31T20:26:23.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T20:26:23.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T20:26:23.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T20:26:23.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T20:26:23.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T20:26:23.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T20:25:59', tmtdew=8.99, humidity=56.06, cloud=0.0, wind=17.8, temperature=18.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T18:25:41.981', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T20:26:23.268 [DEBUG] [Thread-134106] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:26:23.351 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T20:26:23.363 [DEBUG] [Thread-134109] [transport.py] [_log()] starting thread (client mode): 0xb6bb2650
2025-12-31T20:26:23.363 [DEBUG] [Thread-134109] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:26:23.377 [DEBUG] [Thread-134109] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T20:26:23.377 [INFO] [Thread-134109] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T20:26:23.385 [DEBUG] [Thread-134109] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:26:23.385 [DEBUG] [Thread-134109] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T20:26:23.385 [DEBUG] [Thread-134109] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:26:23.385 [DEBUG] [Thread-134109] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:26:23.385 [DEBUG] [Thread-134109] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:26:23.385 [DEBUG] [Thread-134109] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:26:23.385 [DEBUG] [Thread-134109] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:26:23.385 [DEBUG] [Thread-134109] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:26:23.385 [DEBUG] [Thread-134109] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:26:23.385 [DEBUG] [Thread-134109] [transport.py] [_log()] client lang: <none>
2025-12-31T20:26:23.385 [DEBUG] [Thread-134109] [transport.py] [_log()] server lang: <none>
2025-12-31T20:26:23.385 [DEBUG] [Thread-134109] [transport.py] [_log()] kex follows: False
2025-12-31T20:26:23.385 [DEBUG] [Thread-134109] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:26:23.385 [DEBUG] [Thread-134109] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:26:23.385 [DEBUG] [Thread-134109] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:26:23.385 [DEBUG] [Thread-134109] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:26:23.385 [DEBUG] [Thread-134109] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:26:23.386 [DEBUG] [Thread-134109] [transport.py] [_log()] Compression: none
2025-12-31T20:26:23.386 [DEBUG] [Thread-134109] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:26:23.444 [DEBUG] [Thread-134109] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:26:23.444 [DEBUG] [Thread-134109] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:26:23.445 [DEBUG] [Thread-134109] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T20:26:23.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T20:26:23.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:26:23.499 [DEBUG] [Thread-134109] [transport.py] [_log()] userauth is OK
2025-12-31T20:26:23.499 [DEBUG] [Thread-134109] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:26:23.499 [DEBUG] [Thread-134109] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:26:23.499 [DEBUG] [Thread-134109] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T20:26:23.500 [DEBUG] [Thread-134109] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:26:23.514 [INFO] [Thread-134109] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:26:23.514 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T20:26:23.514 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:26:24.353 [DEBUG] [Thread-134109] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:26:24.353 [DEBUG] [Thread-134109] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:26:24.402 [DEBUG] [Thread-134109] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:26:24.402 [DEBUG] [Thread-134109] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:26:24.411 [DEBUG] [Thread-134109] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:26:24.420 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:26:24.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T20:26:24.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T20:26:24.437 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:26:24.438 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:26:24.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:26:24.446 [DEBUG] [Thread-134109] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:26:29.846 [DEBUG] [Thread-134111 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:26:37.763 [DEBUG] [Thread-134112 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:26:39.844 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:26:39.845 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:26:44.893 [DEBUG] [Thread-134113 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:26:54.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T20:26:54.468 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T20:26:54.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T20:26:55.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 20, 26, 31), 8.92, 56.32, 0.0, 22.25, 18.58, 0, 0, 0, 2, 0, 0),)
2025-12-31T20:26:55.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 20:26:31
2025-12-31T20:26:55.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T20:26:55.457 [DEBUG] [Thread-134114] [transport.py] [_log()] starting thread (client mode): 0xb1764c70
2025-12-31T20:26:55.457 [DEBUG] [Thread-134114] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:26:55.477 [DEBUG] [Thread-134114] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T20:26:55.477 [INFO] [Thread-134114] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T20:26:55.478 [DEBUG] [Thread-134114] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:26:55.478 [DEBUG] [Thread-134114] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T20:26:55.478 [DEBUG] [Thread-134114] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:26:55.478 [DEBUG] [Thread-134114] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:26:55.478 [DEBUG] [Thread-134114] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:26:55.478 [DEBUG] [Thread-134114] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:26:55.478 [DEBUG] [Thread-134114] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:26:55.478 [DEBUG] [Thread-134114] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:26:55.478 [DEBUG] [Thread-134114] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:26:55.478 [DEBUG] [Thread-134114] [transport.py] [_log()] client lang: <none>
2025-12-31T20:26:55.479 [DEBUG] [Thread-134114] [transport.py] [_log()] server lang: <none>
2025-12-31T20:26:55.479 [DEBUG] [Thread-134114] [transport.py] [_log()] kex follows: False
2025-12-31T20:26:55.479 [DEBUG] [Thread-134114] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:26:55.479 [DEBUG] [Thread-134114] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:26:55.479 [DEBUG] [Thread-134114] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:26:55.479 [DEBUG] [Thread-134114] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:26:55.479 [DEBUG] [Thread-134114] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:26:55.479 [DEBUG] [Thread-134114] [transport.py] [_log()] Compression: none
2025-12-31T20:26:55.479 [DEBUG] [Thread-134114] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:26:55.495 [DEBUG] [Thread-134114] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:26:55.496 [DEBUG] [Thread-134114] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:26:55.496 [DEBUG] [Thread-134114] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T20:26:55.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T20:26:55.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:26:55.496 [DEBUG] [Thread-134114] [transport.py] [_log()] userauth is OK
2025-12-31T20:26:55.497 [DEBUG] [Thread-134114] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:26:55.497 [DEBUG] [Thread-134114] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:26:55.497 [DEBUG] [Thread-134114] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T20:26:55.497 [DEBUG] [Thread-134114] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:26:55.505 [INFO] [Thread-134114] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:26:55.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:26:56.140 [DEBUG] [Thread-134114] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:26:56.140 [DEBUG] [Thread-134114] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:26:56.140 [DEBUG] [Thread-134114] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T20:26:56.181 [DEBUG] [Thread-134114] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:26:56.181 [DEBUG] [Thread-134114] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:26:56.184 [DEBUG] [Thread-134114] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:26:56.195 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:26:56.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T20:26:56.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T20:26:56.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T20:26:56.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:26:56.202 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T20:26:56.202 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:26:56.202 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:26:56.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T20:26:56.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.768194 -999.00  +18.80  16.50     59  +10.70 1 2 1 1 1    45    0 4.10 -184.42 ----- 14.9 16.5 204.8 24.1 20.0 -19.1 19.8 -20.0 19.7 -18.8 19.9 -19.5
2025-12-31T20:26:56.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T20:26:56.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T20:26:56.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.768194
2025-12-31T20:26:56.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T20:26:56.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T20:26:56.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T20:26:56.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T20:26:56.204 [DEBUG] [Thread-134114] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:26:56.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T20:26:56.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T20:26:31', tmtdew=8.92, humidity=56.32, cloud=0.0, wind=22.25, temperature=18.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T18:26:11.962', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T20:26:56.294 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T20:26:56.306 [DEBUG] [Thread-134117] [transport.py] [_log()] starting thread (client mode): 0xb17662c0
2025-12-31T20:26:56.306 [DEBUG] [Thread-134117] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:26:56.322 [DEBUG] [Thread-134117] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T20:26:56.322 [INFO] [Thread-134117] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T20:26:56.330 [DEBUG] [Thread-134117] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:26:56.330 [DEBUG] [Thread-134117] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T20:26:56.330 [DEBUG] [Thread-134117] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:26:56.330 [DEBUG] [Thread-134117] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:26:56.330 [DEBUG] [Thread-134117] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:26:56.330 [DEBUG] [Thread-134117] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:26:56.330 [DEBUG] [Thread-134117] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:26:56.330 [DEBUG] [Thread-134117] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:26:56.331 [DEBUG] [Thread-134117] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:26:56.331 [DEBUG] [Thread-134117] [transport.py] [_log()] client lang: <none>
2025-12-31T20:26:56.331 [DEBUG] [Thread-134117] [transport.py] [_log()] server lang: <none>
2025-12-31T20:26:56.331 [DEBUG] [Thread-134117] [transport.py] [_log()] kex follows: False
2025-12-31T20:26:56.331 [DEBUG] [Thread-134117] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:26:56.331 [DEBUG] [Thread-134117] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:26:56.331 [DEBUG] [Thread-134117] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:26:56.331 [DEBUG] [Thread-134117] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:26:56.331 [DEBUG] [Thread-134117] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:26:56.331 [DEBUG] [Thread-134117] [transport.py] [_log()] Compression: none
2025-12-31T20:26:56.331 [DEBUG] [Thread-134117] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:26:56.391 [DEBUG] [Thread-134117] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:26:56.392 [DEBUG] [Thread-134117] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:26:56.392 [DEBUG] [Thread-134117] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T20:26:56.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T20:26:56.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:26:56.448 [DEBUG] [Thread-134117] [transport.py] [_log()] userauth is OK
2025-12-31T20:26:56.448 [DEBUG] [Thread-134117] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:26:56.448 [DEBUG] [Thread-134117] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:26:56.448 [DEBUG] [Thread-134117] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T20:26:56.448 [DEBUG] [Thread-134117] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:26:56.467 [INFO] [Thread-134117] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:26:56.467 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T20:26:56.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:26:57.337 [DEBUG] [Thread-134117] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:26:57.338 [DEBUG] [Thread-134117] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:26:57.385 [DEBUG] [Thread-134117] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:26:57.386 [DEBUG] [Thread-134117] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:26:57.394 [DEBUG] [Thread-134117] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:26:57.403 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:26:57.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T20:26:57.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T20:26:57.420 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:26:57.420 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:26:57.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:26:57.428 [DEBUG] [Thread-134117] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:26:59.925 [DEBUG] [Thread-134119 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:27:14.987 [DEBUG] [Thread-134120 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:27:27.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T20:27:27.450 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T20:27:27.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T20:27:28.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 20, 27, 4), 8.88, 56.49, 0.0, 20.86, 18.55, 0, 0, 0, 2, 0, 0),)
2025-12-31T20:27:28.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 20:27:04
2025-12-31T20:27:28.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T20:27:28.427 [DEBUG] [Thread-134121] [transport.py] [_log()] starting thread (client mode): 0xb1765330
2025-12-31T20:27:28.427 [DEBUG] [Thread-134121] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:27:28.448 [DEBUG] [Thread-134121] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T20:27:28.448 [INFO] [Thread-134121] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T20:27:28.451 [DEBUG] [Thread-134121] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:27:28.451 [DEBUG] [Thread-134121] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T20:27:28.451 [DEBUG] [Thread-134121] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:27:28.451 [DEBUG] [Thread-134121] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:27:28.451 [DEBUG] [Thread-134121] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:27:28.451 [DEBUG] [Thread-134121] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:27:28.451 [DEBUG] [Thread-134121] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:27:28.451 [DEBUG] [Thread-134121] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:27:28.451 [DEBUG] [Thread-134121] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:27:28.452 [DEBUG] [Thread-134121] [transport.py] [_log()] client lang: <none>
2025-12-31T20:27:28.452 [DEBUG] [Thread-134121] [transport.py] [_log()] server lang: <none>
2025-12-31T20:27:28.452 [DEBUG] [Thread-134121] [transport.py] [_log()] kex follows: False
2025-12-31T20:27:28.452 [DEBUG] [Thread-134121] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:27:28.452 [DEBUG] [Thread-134121] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:27:28.452 [DEBUG] [Thread-134121] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:27:28.452 [DEBUG] [Thread-134121] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:27:28.452 [DEBUG] [Thread-134121] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:27:28.452 [DEBUG] [Thread-134121] [transport.py] [_log()] Compression: none
2025-12-31T20:27:28.452 [DEBUG] [Thread-134121] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:27:28.472 [DEBUG] [Thread-134121] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:27:28.472 [DEBUG] [Thread-134121] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:27:28.473 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T20:27:28.474 [DEBUG] [Thread-134121] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T20:27:28.475 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:27:28.476 [DEBUG] [Thread-134121] [transport.py] [_log()] userauth is OK
2025-12-31T20:27:28.476 [DEBUG] [Thread-134121] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:27:28.476 [DEBUG] [Thread-134121] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:27:28.476 [DEBUG] [Thread-134121] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T20:27:28.476 [DEBUG] [Thread-134121] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:27:28.499 [INFO] [Thread-134121] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:27:28.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:27:29.333 [DEBUG] [Thread-134121] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:27:29.333 [DEBUG] [Thread-134121] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:27:29.334 [DEBUG] [Thread-134121] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T20:27:29.374 [DEBUG] [Thread-134121] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:27:29.375 [DEBUG] [Thread-134121] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:27:29.378 [DEBUG] [Thread-134121] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:27:29.384 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:27:29.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T20:27:29.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T20:27:29.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T20:27:29.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:27:29.394 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T20:27:29.394 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:27:29.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:27:29.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T20:27:29.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.768541 -999.00  +18.60  24.42     60  +10.80 1 2 1 1 1    41    0 4.41 -173.72 ----- 19.1 24.4 200.0 30.2 19.9 -19.4 19.7 -19.8 19.6 -19.0 19.8 -19.5
2025-12-31T20:27:29.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T20:27:29.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T20:27:29.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.768541
2025-12-31T20:27:29.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T20:27:29.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T20:27:29.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T20:27:29.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T20:27:29.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T20:27:29.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T20:27:04', tmtdew=8.88, humidity=56.49, cloud=0.0, wind=20.86, temperature=18.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T18:26:41.942', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T20:27:29.397 [DEBUG] [Thread-134121] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:27:29.491 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T20:27:29.503 [DEBUG] [Thread-134124] [transport.py] [_log()] starting thread (client mode): 0xb95929e0
2025-12-31T20:27:29.503 [DEBUG] [Thread-134124] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:27:29.519 [DEBUG] [Thread-134124] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T20:27:29.519 [INFO] [Thread-134124] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T20:27:29.527 [DEBUG] [Thread-134124] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:27:29.527 [DEBUG] [Thread-134124] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T20:27:29.527 [DEBUG] [Thread-134124] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:27:29.527 [DEBUG] [Thread-134124] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:27:29.527 [DEBUG] [Thread-134124] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:27:29.527 [DEBUG] [Thread-134124] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:27:29.527 [DEBUG] [Thread-134124] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:27:29.527 [DEBUG] [Thread-134124] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:27:29.527 [DEBUG] [Thread-134124] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:27:29.527 [DEBUG] [Thread-134124] [transport.py] [_log()] client lang: <none>
2025-12-31T20:27:29.527 [DEBUG] [Thread-134124] [transport.py] [_log()] server lang: <none>
2025-12-31T20:27:29.527 [DEBUG] [Thread-134124] [transport.py] [_log()] kex follows: False
2025-12-31T20:27:29.527 [DEBUG] [Thread-134124] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:27:29.527 [DEBUG] [Thread-134124] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:27:29.527 [DEBUG] [Thread-134124] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:27:29.527 [DEBUG] [Thread-134124] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:27:29.528 [DEBUG] [Thread-134124] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:27:29.528 [DEBUG] [Thread-134124] [transport.py] [_log()] Compression: none
2025-12-31T20:27:29.528 [DEBUG] [Thread-134124] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:27:29.585 [DEBUG] [Thread-134124] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:27:29.585 [DEBUG] [Thread-134124] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:27:29.586 [DEBUG] [Thread-134124] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T20:27:29.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T20:27:29.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:27:29.642 [DEBUG] [Thread-134124] [transport.py] [_log()] userauth is OK
2025-12-31T20:27:29.642 [DEBUG] [Thread-134124] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:27:29.642 [DEBUG] [Thread-134124] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:27:29.642 [DEBUG] [Thread-134124] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T20:27:29.642 [DEBUG] [Thread-134124] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:27:29.661 [INFO] [Thread-134124] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:27:29.662 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T20:27:29.662 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:27:30.019 [DEBUG] [Thread-134126 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:27:30.475 [DEBUG] [Thread-134124] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:27:30.475 [DEBUG] [Thread-134124] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:27:30.523 [DEBUG] [Thread-134124] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:27:30.523 [DEBUG] [Thread-134124] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:27:30.533 [DEBUG] [Thread-134124] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:27:30.542 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:27:30.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T20:27:30.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T20:27:30.560 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:27:30.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:27:30.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:27:30.569 [DEBUG] [Thread-134124] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:27:37.833 [DEBUG] [Thread-134127 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:27:44.777 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:27:44.778 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:27:45.074 [DEBUG] [Thread-134128 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:28:00.104 [DEBUG] [Thread-134129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:28:00.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T20:28:00.591 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T20:28:00.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T20:28:01.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 20, 27, 36), 8.46, 57.72, 0.0, 27.46, 18.27, 0, 0, 0, 2, 0, 0),)
2025-12-31T20:28:01.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 20:27:36
2025-12-31T20:28:01.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T20:28:01.630 [DEBUG] [Thread-134130] [transport.py] [_log()] starting thread (client mode): 0xb1764220
2025-12-31T20:28:01.630 [DEBUG] [Thread-134130] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:28:01.649 [DEBUG] [Thread-134130] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T20:28:01.649 [INFO] [Thread-134130] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T20:28:01.653 [DEBUG] [Thread-134130] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:28:01.653 [DEBUG] [Thread-134130] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T20:28:01.653 [DEBUG] [Thread-134130] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:28:01.653 [DEBUG] [Thread-134130] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:28:01.653 [DEBUG] [Thread-134130] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:28:01.653 [DEBUG] [Thread-134130] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:28:01.653 [DEBUG] [Thread-134130] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:28:01.653 [DEBUG] [Thread-134130] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:28:01.653 [DEBUG] [Thread-134130] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:28:01.653 [DEBUG] [Thread-134130] [transport.py] [_log()] client lang: <none>
2025-12-31T20:28:01.653 [DEBUG] [Thread-134130] [transport.py] [_log()] server lang: <none>
2025-12-31T20:28:01.653 [DEBUG] [Thread-134130] [transport.py] [_log()] kex follows: False
2025-12-31T20:28:01.653 [DEBUG] [Thread-134130] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:28:01.653 [DEBUG] [Thread-134130] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:28:01.653 [DEBUG] [Thread-134130] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:28:01.653 [DEBUG] [Thread-134130] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:28:01.653 [DEBUG] [Thread-134130] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:28:01.653 [DEBUG] [Thread-134130] [transport.py] [_log()] Compression: none
2025-12-31T20:28:01.653 [DEBUG] [Thread-134130] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:28:01.668 [DEBUG] [Thread-134130] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:28:01.668 [DEBUG] [Thread-134130] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:28:01.668 [DEBUG] [Thread-134130] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T20:28:01.669 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T20:28:01.669 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:28:01.672 [DEBUG] [Thread-134130] [transport.py] [_log()] userauth is OK
2025-12-31T20:28:01.672 [DEBUG] [Thread-134130] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:28:01.672 [DEBUG] [Thread-134130] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:28:01.672 [DEBUG] [Thread-134130] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T20:28:01.672 [DEBUG] [Thread-134130] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:28:01.683 [INFO] [Thread-134130] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:28:01.683 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:28:02.302 [DEBUG] [Thread-134130] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:28:02.302 [DEBUG] [Thread-134130] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:28:02.302 [DEBUG] [Thread-134130] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T20:28:02.343 [DEBUG] [Thread-134130] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:28:02.343 [DEBUG] [Thread-134130] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:28:02.345 [DEBUG] [Thread-134130] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:28:02.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:28:02.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T20:28:02.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T20:28:02.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T20:28:02.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:28:02.366 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T20:28:02.366 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:28:02.366 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:28:02.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T20:28:02.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.768888 -999.00  +18.50  17.96     60  +10.80 1 2 1 1 1    38    0 4.32 -172.18 ----- 14.9 18.0 199.0 24.2 19.9 -19.4 19.6 -19.8 19.5 -19.1 19.8 -19.3
2025-12-31T20:28:02.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T20:28:02.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T20:28:02.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.768888
2025-12-31T20:28:02.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T20:28:02.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T20:28:02.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T20:28:02.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T20:28:02.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T20:28:02.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T20:27:36', tmtdew=8.46, humidity=57.72, cloud=0.0, wind=27.46, temperature=18.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T18:27:11.923', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T20:28:02.368 [DEBUG] [Thread-134130] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:28:02.440 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T20:28:02.452 [DEBUG] [Thread-134133] [transport.py] [_log()] starting thread (client mode): 0xb6bb16c0
2025-12-31T20:28:02.452 [DEBUG] [Thread-134133] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:28:02.468 [DEBUG] [Thread-134133] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T20:28:02.469 [INFO] [Thread-134133] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T20:28:02.476 [DEBUG] [Thread-134133] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:28:02.476 [DEBUG] [Thread-134133] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T20:28:02.476 [DEBUG] [Thread-134133] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:28:02.476 [DEBUG] [Thread-134133] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:28:02.476 [DEBUG] [Thread-134133] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:28:02.476 [DEBUG] [Thread-134133] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:28:02.476 [DEBUG] [Thread-134133] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:28:02.476 [DEBUG] [Thread-134133] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:28:02.476 [DEBUG] [Thread-134133] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:28:02.476 [DEBUG] [Thread-134133] [transport.py] [_log()] client lang: <none>
2025-12-31T20:28:02.476 [DEBUG] [Thread-134133] [transport.py] [_log()] server lang: <none>
2025-12-31T20:28:02.476 [DEBUG] [Thread-134133] [transport.py] [_log()] kex follows: False
2025-12-31T20:28:02.476 [DEBUG] [Thread-134133] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:28:02.476 [DEBUG] [Thread-134133] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:28:02.476 [DEBUG] [Thread-134133] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:28:02.476 [DEBUG] [Thread-134133] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:28:02.476 [DEBUG] [Thread-134133] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:28:02.476 [DEBUG] [Thread-134133] [transport.py] [_log()] Compression: none
2025-12-31T20:28:02.477 [DEBUG] [Thread-134133] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:28:02.535 [DEBUG] [Thread-134133] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:28:02.536 [DEBUG] [Thread-134133] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:28:02.536 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T20:28:02.536 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:28:02.536 [DEBUG] [Thread-134133] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T20:28:02.593 [DEBUG] [Thread-134133] [transport.py] [_log()] userauth is OK
2025-12-31T20:28:02.593 [DEBUG] [Thread-134133] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:28:02.593 [DEBUG] [Thread-134133] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:28:02.593 [DEBUG] [Thread-134133] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T20:28:02.593 [DEBUG] [Thread-134133] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:28:02.609 [INFO] [Thread-134133] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:28:02.609 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T20:28:02.609 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:28:03.407 [DEBUG] [Thread-134133] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:28:03.408 [DEBUG] [Thread-134133] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:28:03.455 [DEBUG] [Thread-134133] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:28:03.455 [DEBUG] [Thread-134133] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:28:03.464 [DEBUG] [Thread-134133] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:28:03.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:28: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-12-31T20:28:03.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T20:28:03.488 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:28:03.488 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:28:03.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:28:03.497 [DEBUG] [Thread-134133] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:28:15.134 [DEBUG] [Thread-134135 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:28:30.195 [DEBUG] [Thread-134136 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:28:33.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T20:28:33.509 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T20:28: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-12-31T20:28:34.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 20, 28, 8), 8.4, 57.97, 0.0, 29.11, 18.27, 0, 0, 0, 2, 0, 0),)
2025-12-31T20:28:34.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 20:28:08
2025-12-31T20:28:34.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T20:28:34.483 [DEBUG] [Thread-134137] [transport.py] [_log()] starting thread (client mode): 0xb9592d10
2025-12-31T20:28:34.483 [DEBUG] [Thread-134137] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:28:34.498 [DEBUG] [Thread-134137] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T20:28:34.499 [INFO] [Thread-134137] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T20:28:34.502 [DEBUG] [Thread-134137] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:28:34.502 [DEBUG] [Thread-134137] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T20:28:34.502 [DEBUG] [Thread-134137] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:28:34.502 [DEBUG] [Thread-134137] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:28:34.502 [DEBUG] [Thread-134137] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:28:34.502 [DEBUG] [Thread-134137] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:28:34.502 [DEBUG] [Thread-134137] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:28:34.502 [DEBUG] [Thread-134137] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:28:34.502 [DEBUG] [Thread-134137] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:28:34.502 [DEBUG] [Thread-134137] [transport.py] [_log()] client lang: <none>
2025-12-31T20:28:34.502 [DEBUG] [Thread-134137] [transport.py] [_log()] server lang: <none>
2025-12-31T20:28:34.502 [DEBUG] [Thread-134137] [transport.py] [_log()] kex follows: False
2025-12-31T20:28:34.502 [DEBUG] [Thread-134137] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:28:34.502 [DEBUG] [Thread-134137] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:28:34.502 [DEBUG] [Thread-134137] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:28:34.502 [DEBUG] [Thread-134137] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:28:34.502 [DEBUG] [Thread-134137] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:28:34.502 [DEBUG] [Thread-134137] [transport.py] [_log()] Compression: none
2025-12-31T20:28:34.502 [DEBUG] [Thread-134137] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:28:34.520 [DEBUG] [Thread-134137] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:28:34.520 [DEBUG] [Thread-134137] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:28:34.521 [DEBUG] [Thread-134137] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T20:28:34.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T20:28:34.522 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:28:34.523 [DEBUG] [Thread-134137] [transport.py] [_log()] userauth is OK
2025-12-31T20:28:34.524 [DEBUG] [Thread-134137] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:28:34.524 [DEBUG] [Thread-134137] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:28:34.524 [DEBUG] [Thread-134137] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T20:28:34.524 [DEBUG] [Thread-134137] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:28:34.549 [INFO] [Thread-134137] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:28:34.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:28:35.347 [DEBUG] [Thread-134137] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:28:35.347 [DEBUG] [Thread-134137] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:28:35.348 [DEBUG] [Thread-134137] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T20:28:35.388 [DEBUG] [Thread-134137] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:28:35.389 [DEBUG] [Thread-134137] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:28:35.392 [DEBUG] [Thread-134137] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:28:35.404 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:28:35.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T20:28:35.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T20:28:35.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T20:28:35.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:28:35.419 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T20:28:35.419 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:28:35.420 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:28:35.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T20:28:35.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.769236 -999.00  +18.40  24.51     61  +10.80 1 2 1 1 1    35    0 4.73 -157.58 ----- 24.3 24.5 200.6 31.2 19.8 -19.4 19.6 -19.8 19.5 -18.8 19.7 -19.5
2025-12-31T20:28:35.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T20:28:35.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T20:28:35.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.769236
2025-12-31T20:28:35.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T20:28:35.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T20:28:35.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T20:28:35.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T20:28:35.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T20:28:35.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T20:28:08', tmtdew=8.4, humidity=57.97, cloud=0.0, wind=29.11, temperature=18.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T18:27:41.990', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T20:28:35.422 [DEBUG] [Thread-134137] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:28:35.510 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T20:28:35.520 [DEBUG] [Thread-134140] [transport.py] [_log()] starting thread (client mode): 0xb1765ea0
2025-12-31T20:28:35.520 [DEBUG] [Thread-134140] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:28:35.536 [DEBUG] [Thread-134140] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T20:28:35.537 [INFO] [Thread-134140] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T20:28:35.544 [DEBUG] [Thread-134140] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:28:35.544 [DEBUG] [Thread-134140] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T20:28:35.544 [DEBUG] [Thread-134140] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:28:35.544 [DEBUG] [Thread-134140] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:28:35.544 [DEBUG] [Thread-134140] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:28:35.544 [DEBUG] [Thread-134140] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:28:35.544 [DEBUG] [Thread-134140] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:28:35.544 [DEBUG] [Thread-134140] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:28:35.544 [DEBUG] [Thread-134140] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:28:35.544 [DEBUG] [Thread-134140] [transport.py] [_log()] client lang: <none>
2025-12-31T20:28:35.544 [DEBUG] [Thread-134140] [transport.py] [_log()] server lang: <none>
2025-12-31T20:28:35.544 [DEBUG] [Thread-134140] [transport.py] [_log()] kex follows: False
2025-12-31T20:28:35.544 [DEBUG] [Thread-134140] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:28:35.544 [DEBUG] [Thread-134140] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:28:35.544 [DEBUG] [Thread-134140] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:28:35.544 [DEBUG] [Thread-134140] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:28:35.544 [DEBUG] [Thread-134140] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:28:35.544 [DEBUG] [Thread-134140] [transport.py] [_log()] Compression: none
2025-12-31T20:28:35.544 [DEBUG] [Thread-134140] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:28:35.602 [DEBUG] [Thread-134140] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:28:35.603 [DEBUG] [Thread-134140] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:28:35.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T20:28:35.604 [DEBUG] [Thread-134140] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T20:28:35.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:28:35.658 [DEBUG] [Thread-134140] [transport.py] [_log()] userauth is OK
2025-12-31T20:28:35.658 [DEBUG] [Thread-134140] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:28:35.659 [DEBUG] [Thread-134140] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:28:35.659 [DEBUG] [Thread-134140] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T20:28:35.659 [DEBUG] [Thread-134140] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:28:35.680 [INFO] [Thread-134140] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:28: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-12-31T20:28:35.681 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:28:36.484 [DEBUG] [Thread-134140] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:28:36.484 [DEBUG] [Thread-134140] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:28:36.531 [DEBUG] [Thread-134140] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:28:36.532 [DEBUG] [Thread-134140] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:28:36.541 [DEBUG] [Thread-134140] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:28:36.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:28:36.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T20:28:36.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T20:28:36.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:28:36.567 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:28:36.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:28:36.575 [DEBUG] [Thread-134140] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:28:37.891 [DEBUG] [Thread-134142 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:28:45.228 [DEBUG] [Thread-134143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:28:51.888 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:28:51.889 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:29:00.288 [DEBUG] [Thread-134144 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:29:06.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T20:29:06.588 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T20:29:06.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T20:29:07.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 20, 28, 40), 8.36, 58.07, 0.0, 25.51, 18.17, 0, 0, 0, 2, 0, 0),)
2025-12-31T20:29:07.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 20:28:40
2025-12-31T20:29:07.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T20:29:07.544 [DEBUG] [Thread-134145] [transport.py] [_log()] starting thread (client mode): 0xb6bb1c90
2025-12-31T20:29:07.544 [DEBUG] [Thread-134145] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:29:07.556 [DEBUG] [Thread-134145] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T20:29:07.556 [INFO] [Thread-134145] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T20:29:07.560 [DEBUG] [Thread-134145] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:29:07.560 [DEBUG] [Thread-134145] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T20:29:07.560 [DEBUG] [Thread-134145] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:29:07.560 [DEBUG] [Thread-134145] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:29:07.560 [DEBUG] [Thread-134145] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:29:07.560 [DEBUG] [Thread-134145] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:29:07.560 [DEBUG] [Thread-134145] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:29:07.560 [DEBUG] [Thread-134145] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:29:07.560 [DEBUG] [Thread-134145] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:29:07.560 [DEBUG] [Thread-134145] [transport.py] [_log()] client lang: <none>
2025-12-31T20:29:07.560 [DEBUG] [Thread-134145] [transport.py] [_log()] server lang: <none>
2025-12-31T20:29:07.560 [DEBUG] [Thread-134145] [transport.py] [_log()] kex follows: False
2025-12-31T20:29:07.560 [DEBUG] [Thread-134145] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:29:07.560 [DEBUG] [Thread-134145] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:29:07.560 [DEBUG] [Thread-134145] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:29:07.560 [DEBUG] [Thread-134145] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:29:07.560 [DEBUG] [Thread-134145] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:29:07.560 [DEBUG] [Thread-134145] [transport.py] [_log()] Compression: none
2025-12-31T20:29:07.560 [DEBUG] [Thread-134145] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:29:07.575 [DEBUG] [Thread-134145] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:29:07.576 [DEBUG] [Thread-134145] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:29:07.576 [DEBUG] [Thread-134145] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T20:29:07.576 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T20:29:07.576 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:29:07.577 [DEBUG] [Thread-134145] [transport.py] [_log()] userauth is OK
2025-12-31T20:29:07.577 [DEBUG] [Thread-134145] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:29:07.577 [DEBUG] [Thread-134145] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:29:07.577 [DEBUG] [Thread-134145] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T20:29:07.577 [DEBUG] [Thread-134145] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:29:07.591 [INFO] [Thread-134145] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:29:07.592 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:29:08.181 [DEBUG] [Thread-134145] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:29:08.182 [DEBUG] [Thread-134145] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:29:08.182 [DEBUG] [Thread-134145] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T20:29:08.223 [DEBUG] [Thread-134145] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:29:08.223 [DEBUG] [Thread-134145] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:29:08.227 [DEBUG] [Thread-134145] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:29:08.238 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:29:08.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T20:29:08.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T20:29:08.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T20:29:08.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:29:08.249 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T20:29:08.249 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:29:08.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:29:08.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T20:29:08.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.769583 -999.00  +18.30  27.49     61  +10.80 1 2 1 1 1    32    0 4.55 -159.76 ----- 28.2 27.5 201.7 35.5 19.7 -19.2 19.5 -18.9 19.4 -18.7 19.7 -19.5
2025-12-31T20:29:08.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T20:29:08.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T20:29:08.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.769583
2025-12-31T20:29:08.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T20:29:08.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T20:29:08.252 [DEBUG] [Thread-134145] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:29:08.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T20:29:08.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T20:29:08.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T20:29:08.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T20:28:40', tmtdew=8.36, humidity=58.07, cloud=0.0, wind=25.51, temperature=18.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T18:28:11.971', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T20:29:08.335 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T20:29:08.349 [DEBUG] [Thread-134148] [transport.py] [_log()] starting thread (client mode): 0xb6ba1d20
2025-12-31T20:29:08.349 [DEBUG] [Thread-134148] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:29:08.363 [DEBUG] [Thread-134148] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T20:29:08.363 [INFO] [Thread-134148] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T20:29:08.371 [DEBUG] [Thread-134148] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:29:08.371 [DEBUG] [Thread-134148] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T20:29:08.371 [DEBUG] [Thread-134148] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:29:08.371 [DEBUG] [Thread-134148] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:29:08.371 [DEBUG] [Thread-134148] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:29:08.371 [DEBUG] [Thread-134148] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:29:08.371 [DEBUG] [Thread-134148] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:29:08.371 [DEBUG] [Thread-134148] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:29:08.371 [DEBUG] [Thread-134148] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:29:08.372 [DEBUG] [Thread-134148] [transport.py] [_log()] client lang: <none>
2025-12-31T20:29:08.372 [DEBUG] [Thread-134148] [transport.py] [_log()] server lang: <none>
2025-12-31T20:29:08.372 [DEBUG] [Thread-134148] [transport.py] [_log()] kex follows: False
2025-12-31T20:29:08.372 [DEBUG] [Thread-134148] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:29:08.372 [DEBUG] [Thread-134148] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:29:08.372 [DEBUG] [Thread-134148] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:29:08.372 [DEBUG] [Thread-134148] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:29:08.372 [DEBUG] [Thread-134148] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:29:08.372 [DEBUG] [Thread-134148] [transport.py] [_log()] Compression: none
2025-12-31T20:29:08.372 [DEBUG] [Thread-134148] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:29:08.431 [DEBUG] [Thread-134148] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:29:08.432 [DEBUG] [Thread-134148] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:29:08.433 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T20:29:08.433 [DEBUG] [Thread-134148] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T20:29:08.434 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:29:08.488 [DEBUG] [Thread-134148] [transport.py] [_log()] userauth is OK
2025-12-31T20:29:08.488 [DEBUG] [Thread-134148] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:29:08.488 [DEBUG] [Thread-134148] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:29:08.488 [DEBUG] [Thread-134148] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T20:29:08.488 [DEBUG] [Thread-134148] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:29:08.514 [INFO] [Thread-134148] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:29:08.514 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T20:29:08.515 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:29:09.330 [DEBUG] [Thread-134148] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:29:09.330 [DEBUG] [Thread-134148] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:29:09.378 [DEBUG] [Thread-134148] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:29:09.378 [DEBUG] [Thread-134148] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:29:09.392 [DEBUG] [Thread-134148] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:29:09.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:29: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')
2025-12-31T20:29:09.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T20:29:09.418 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:29:09.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:29:09.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:29:09.427 [DEBUG] [Thread-134148] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:29:15.324 [DEBUG] [Thread-134150 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:29:30.379 [DEBUG] [Thread-134151 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:29:37.947 [DEBUG] [Thread-134152 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:29:39.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T20:29:39.425 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T20:29:39.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T20:29:40.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 20, 29, 12), 8.31, 58.27, 0.0, 18.93, 18.15, 0, 0, 0, 2, 0, 0),)
2025-12-31T20:29:40.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 20:29:12
2025-12-31T20:29:40.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T20:29:40.385 [DEBUG] [Thread-134153] [transport.py] [_log()] starting thread (client mode): 0xb17760b0
2025-12-31T20:29:40.385 [DEBUG] [Thread-134153] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:29:40.401 [DEBUG] [Thread-134153] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T20:29:40.401 [INFO] [Thread-134153] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T20:29:40.402 [DEBUG] [Thread-134153] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:29:40.402 [DEBUG] [Thread-134153] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T20:29:40.402 [DEBUG] [Thread-134153] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:29:40.402 [DEBUG] [Thread-134153] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:29:40.402 [DEBUG] [Thread-134153] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:29:40.402 [DEBUG] [Thread-134153] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:29:40.402 [DEBUG] [Thread-134153] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:29:40.402 [DEBUG] [Thread-134153] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:29:40.402 [DEBUG] [Thread-134153] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:29:40.402 [DEBUG] [Thread-134153] [transport.py] [_log()] client lang: <none>
2025-12-31T20:29:40.402 [DEBUG] [Thread-134153] [transport.py] [_log()] server lang: <none>
2025-12-31T20:29:40.402 [DEBUG] [Thread-134153] [transport.py] [_log()] kex follows: False
2025-12-31T20:29:40.402 [DEBUG] [Thread-134153] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:29:40.402 [DEBUG] [Thread-134153] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:29:40.402 [DEBUG] [Thread-134153] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:29:40.402 [DEBUG] [Thread-134153] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:29:40.403 [DEBUG] [Thread-134153] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:29:40.403 [DEBUG] [Thread-134153] [transport.py] [_log()] Compression: none
2025-12-31T20:29:40.403 [DEBUG] [Thread-134153] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:29:40.413 [DEBUG] [Thread-134153] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:29:40.413 [DEBUG] [Thread-134153] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:29:40.414 [DEBUG] [Thread-134153] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T20:29:40.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T20:29:40.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:29:40.416 [DEBUG] [Thread-134153] [transport.py] [_log()] userauth is OK
2025-12-31T20:29:40.416 [DEBUG] [Thread-134153] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:29:40.416 [DEBUG] [Thread-134153] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:29:40.416 [DEBUG] [Thread-134153] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T20:29:40.416 [DEBUG] [Thread-134153] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:29:40.441 [INFO] [Thread-134153] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:29:40.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:29:41.200 [DEBUG] [Thread-134153] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:29:41.201 [DEBUG] [Thread-134153] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:29:41.201 [DEBUG] [Thread-134153] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T20:29:41.241 [DEBUG] [Thread-134153] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:29:41.241 [DEBUG] [Thread-134153] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:29:41.245 [DEBUG] [Thread-134153] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:29:41.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:29:41.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T20:29:41.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T20:29:41.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T20:29:41.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:29:41.268 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T20:29:41.268 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:29:41.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:29:41.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T20:29:41.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.769930 -999.00  +18.20  28.68     62  +10.80 1 2 1 1 1    29    0 4.61 -156.55 ----- 20.5 28.7 200.0 32.3 19.6 -19.4 19.4 -19.2 19.3 -18.6 19.6 -19.0
2025-12-31T20:29:41.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T20:29:41.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T20:29:41.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.769930
2025-12-31T20:29:41.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T20:29:41.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T20:29:41.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T20:29:41.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T20:29:41.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T20:29:41.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T20:29:12', tmtdew=8.31, humidity=58.27, cloud=0.0, wind=18.93, temperature=18.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T18:28:41.952', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T20:29:41.271 [DEBUG] [Thread-134153] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:29:41.354 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T20:29:41.365 [DEBUG] [Thread-134156] [transport.py] [_log()] starting thread (client mode): 0xb1777370
2025-12-31T20:29:41.366 [DEBUG] [Thread-134156] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:29:41.379 [DEBUG] [Thread-134156] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T20:29:41.379 [INFO] [Thread-134156] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T20:29:41.387 [DEBUG] [Thread-134156] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:29:41.387 [DEBUG] [Thread-134156] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T20:29:41.387 [DEBUG] [Thread-134156] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:29:41.387 [DEBUG] [Thread-134156] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:29:41.387 [DEBUG] [Thread-134156] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:29:41.387 [DEBUG] [Thread-134156] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:29:41.387 [DEBUG] [Thread-134156] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:29:41.387 [DEBUG] [Thread-134156] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:29:41.387 [DEBUG] [Thread-134156] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:29:41.387 [DEBUG] [Thread-134156] [transport.py] [_log()] client lang: <none>
2025-12-31T20:29:41.387 [DEBUG] [Thread-134156] [transport.py] [_log()] server lang: <none>
2025-12-31T20:29:41.387 [DEBUG] [Thread-134156] [transport.py] [_log()] kex follows: False
2025-12-31T20:29:41.388 [DEBUG] [Thread-134156] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:29:41.388 [DEBUG] [Thread-134156] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:29:41.388 [DEBUG] [Thread-134156] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:29:41.388 [DEBUG] [Thread-134156] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:29:41.388 [DEBUG] [Thread-134156] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:29:41.388 [DEBUG] [Thread-134156] [transport.py] [_log()] Compression: none
2025-12-31T20:29:41.388 [DEBUG] [Thread-134156] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:29:41.443 [DEBUG] [Thread-134156] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:29:41.444 [DEBUG] [Thread-134156] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:29:41.444 [DEBUG] [Thread-134156] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T20:29:41.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T20:29:41.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:29:41.505 [DEBUG] [Thread-134156] [transport.py] [_log()] userauth is OK
2025-12-31T20:29:41.505 [DEBUG] [Thread-134156] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:29:41.506 [DEBUG] [Thread-134156] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:29:41.506 [DEBUG] [Thread-134156] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T20:29:41.506 [DEBUG] [Thread-134156] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:29:41.523 [INFO] [Thread-134156] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:29:41.524 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T20:29:41.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:29:42.332 [DEBUG] [Thread-134156] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:29:42.332 [DEBUG] [Thread-134156] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:29:42.380 [DEBUG] [Thread-134156] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:29:42.380 [DEBUG] [Thread-134156] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:29:42.389 [DEBUG] [Thread-134156] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:29:42.397 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:29:42.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T20:29:42.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T20:29:42.414 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:29:42.414 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:29:42.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:29:42.423 [DEBUG] [Thread-134156] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:29:45.418 [DEBUG] [Thread-134158 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:29:57.230 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:29:57.231 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:30:00.451 [DEBUG] [Thread-134159 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:30:12.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T20:30:12.437 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T20:30:12.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T20:30:13.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 20, 29, 44), 8.31, 58.25, 0.0, 21.79, 18.15, 0, 0, 0, 2, 0, 0),)
2025-12-31T20:30:13.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 20:29:44
2025-12-31T20:30:13.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T20:30:13.410 [DEBUG] [Thread-134160] [transport.py] [_log()] starting thread (client mode): 0xb9559900
2025-12-31T20:30:13.410 [DEBUG] [Thread-134160] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:30:13.431 [DEBUG] [Thread-134160] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T20:30:13.431 [INFO] [Thread-134160] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T20:30:13.434 [DEBUG] [Thread-134160] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:30:13.434 [DEBUG] [Thread-134160] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T20:30:13.434 [DEBUG] [Thread-134160] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:30:13.434 [DEBUG] [Thread-134160] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:30:13.434 [DEBUG] [Thread-134160] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:30:13.435 [DEBUG] [Thread-134160] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:30:13.435 [DEBUG] [Thread-134160] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:30:13.435 [DEBUG] [Thread-134160] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:30:13.435 [DEBUG] [Thread-134160] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:30:13.435 [DEBUG] [Thread-134160] [transport.py] [_log()] client lang: <none>
2025-12-31T20:30:13.435 [DEBUG] [Thread-134160] [transport.py] [_log()] server lang: <none>
2025-12-31T20:30:13.435 [DEBUG] [Thread-134160] [transport.py] [_log()] kex follows: False
2025-12-31T20:30:13.435 [DEBUG] [Thread-134160] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:30:13.435 [DEBUG] [Thread-134160] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:30:13.435 [DEBUG] [Thread-134160] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:30:13.435 [DEBUG] [Thread-134160] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:30:13.435 [DEBUG] [Thread-134160] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:30:13.435 [DEBUG] [Thread-134160] [transport.py] [_log()] Compression: none
2025-12-31T20:30:13.435 [DEBUG] [Thread-134160] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:30:13.452 [DEBUG] [Thread-134160] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:30:13.452 [DEBUG] [Thread-134160] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:30:13.453 [DEBUG] [Thread-134160] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T20:30:13.453 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T20:30:13.454 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:30:13.455 [DEBUG] [Thread-134160] [transport.py] [_log()] userauth is OK
2025-12-31T20:30:13.455 [DEBUG] [Thread-134160] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:30:13.455 [DEBUG] [Thread-134160] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:30:13.455 [DEBUG] [Thread-134160] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T20:30:13.456 [DEBUG] [Thread-134160] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:30:13.474 [INFO] [Thread-134160] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:30:13.475 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:30:14.110 [DEBUG] [Thread-134160] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:30:14.110 [DEBUG] [Thread-134160] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:30:14.111 [DEBUG] [Thread-134160] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T20:30:14.151 [DEBUG] [Thread-134160] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:30:14.152 [DEBUG] [Thread-134160] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:30:14.155 [DEBUG] [Thread-134160] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:30:14.167 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:30:14.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T20:30:14.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T20:30:14.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T20:30:14.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:30:14.181 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T20:30:14.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:30:14.181 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:30:14.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T20:30:14.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.770277 -999.00  +18.20  18.87     62  +10.80 1 2 1 1 1    27    0 4.48 -159.06 ----- 18.4 18.9 199.8 23.1 19.6 -19.0 19.4 -18.6 19.3 -18.3 19.6 -19.0
2025-12-31T20:30:14.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T20:30:14.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T20:30:14.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.770277
2025-12-31T20:30:14.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T20:30:14.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T20:30:14.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T20:30:14.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T20:30:14.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T20:30:14.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T20:29:44', tmtdew=8.31, humidity=58.25, cloud=0.0, wind=21.79, temperature=18.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T18:29:11.933', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T20:30:14.184 [DEBUG] [Thread-134160] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:30:14.258 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T20:30:14.270 [DEBUG] [Thread-134163] [transport.py] [_log()] starting thread (client mode): 0xb1747d60
2025-12-31T20:30:14.270 [DEBUG] [Thread-134163] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:30:14.284 [DEBUG] [Thread-134163] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T20:30:14.284 [INFO] [Thread-134163] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T20:30:14.292 [DEBUG] [Thread-134163] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:30:14.292 [DEBUG] [Thread-134163] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T20:30:14.292 [DEBUG] [Thread-134163] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:30:14.293 [DEBUG] [Thread-134163] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:30:14.293 [DEBUG] [Thread-134163] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:30:14.293 [DEBUG] [Thread-134163] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:30:14.293 [DEBUG] [Thread-134163] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:30:14.293 [DEBUG] [Thread-134163] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:30:14.293 [DEBUG] [Thread-134163] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:30:14.293 [DEBUG] [Thread-134163] [transport.py] [_log()] client lang: <none>
2025-12-31T20:30:14.293 [DEBUG] [Thread-134163] [transport.py] [_log()] server lang: <none>
2025-12-31T20:30:14.293 [DEBUG] [Thread-134163] [transport.py] [_log()] kex follows: False
2025-12-31T20:30:14.294 [DEBUG] [Thread-134163] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:30:14.294 [DEBUG] [Thread-134163] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:30:14.294 [DEBUG] [Thread-134163] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:30:14.294 [DEBUG] [Thread-134163] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:30:14.294 [DEBUG] [Thread-134163] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:30:14.294 [DEBUG] [Thread-134163] [transport.py] [_log()] Compression: none
2025-12-31T20:30:14.294 [DEBUG] [Thread-134163] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:30:14.354 [DEBUG] [Thread-134163] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:30:14.354 [DEBUG] [Thread-134163] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:30:14.355 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T20:30:14.355 [DEBUG] [Thread-134163] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T20:30:14.356 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:30:14.413 [DEBUG] [Thread-134163] [transport.py] [_log()] userauth is OK
2025-12-31T20:30:14.413 [DEBUG] [Thread-134163] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:30:14.413 [DEBUG] [Thread-134163] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:30:14.413 [DEBUG] [Thread-134163] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T20:30:14.413 [DEBUG] [Thread-134163] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:30:14.431 [INFO] [Thread-134163] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:30:14.431 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T20:30:14.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:30:15.242 [DEBUG] [Thread-134163] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:30:15.242 [DEBUG] [Thread-134163] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:30:15.289 [DEBUG] [Thread-134163] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:30:15.290 [DEBUG] [Thread-134163] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:30:15.298 [DEBUG] [Thread-134163] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:30:15.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:30:15.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T20:30:15.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T20:30:15.323 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:30:15.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:30:15.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:30:15.332 [DEBUG] [Thread-134163] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:30:15.484 [DEBUG] [Thread-134165 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:30:30.531 [DEBUG] [Thread-134166 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:30:37.999 [DEBUG] [Thread-134167 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:30:45.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T20:30:45.354 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T20:30:45.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T20:30:45.566 [DEBUG] [Thread-134168 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:30:46.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 20, 30, 17), 8.31, 58.27, 0.0, 19.52, 18.18, 0, 0, 0, 2, 0, 0),)
2025-12-31T20:30:46.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 20:30:17
2025-12-31T20:30:46.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T20:30:46.324 [DEBUG] [Thread-134169] [transport.py] [_log()] starting thread (client mode): 0xb955bac0
2025-12-31T20:30:46.325 [DEBUG] [Thread-134169] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:30:46.340 [DEBUG] [Thread-134169] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T20:30:46.340 [INFO] [Thread-134169] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T20:30:46.343 [DEBUG] [Thread-134169] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:30:46.343 [DEBUG] [Thread-134169] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T20:30:46.343 [DEBUG] [Thread-134169] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:30:46.343 [DEBUG] [Thread-134169] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:30:46.343 [DEBUG] [Thread-134169] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:30:46.343 [DEBUG] [Thread-134169] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:30:46.344 [DEBUG] [Thread-134169] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:30:46.344 [DEBUG] [Thread-134169] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:30:46.344 [DEBUG] [Thread-134169] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:30:46.344 [DEBUG] [Thread-134169] [transport.py] [_log()] client lang: <none>
2025-12-31T20:30:46.344 [DEBUG] [Thread-134169] [transport.py] [_log()] server lang: <none>
2025-12-31T20:30:46.344 [DEBUG] [Thread-134169] [transport.py] [_log()] kex follows: False
2025-12-31T20:30:46.344 [DEBUG] [Thread-134169] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:30:46.344 [DEBUG] [Thread-134169] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:30:46.344 [DEBUG] [Thread-134169] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:30:46.344 [DEBUG] [Thread-134169] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:30:46.344 [DEBUG] [Thread-134169] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:30:46.344 [DEBUG] [Thread-134169] [transport.py] [_log()] Compression: none
2025-12-31T20:30:46.344 [DEBUG] [Thread-134169] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:30:46.361 [DEBUG] [Thread-134169] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:30:46.361 [DEBUG] [Thread-134169] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:30:46.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T20:30:46.362 [DEBUG] [Thread-134169] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T20:30:46.363 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:30:46.365 [DEBUG] [Thread-134169] [transport.py] [_log()] userauth is OK
2025-12-31T20:30:46.365 [DEBUG] [Thread-134169] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:30:46.365 [DEBUG] [Thread-134169] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:30:46.365 [DEBUG] [Thread-134169] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T20:30:46.365 [DEBUG] [Thread-134169] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:30:46.389 [INFO] [Thread-134169] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:30:46.390 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:30:47.037 [DEBUG] [Thread-134169] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:30:47.037 [DEBUG] [Thread-134169] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:30:47.038 [DEBUG] [Thread-134169] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T20:30:47.078 [DEBUG] [Thread-134169] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:30:47.078 [DEBUG] [Thread-134169] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:30:47.081 [DEBUG] [Thread-134169] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:30:47.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:30:47.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T20:30:47.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T20:30:47.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T20:30:47.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:30:47.106 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T20:30:47.106 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:30:47.106 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:30:47.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T20:30:47.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.770972 -999.00  +18.30  16.63     61  +10.80 1 2 1 1 1    23    0 4.03 -167.82 ----- 11.8 16.6 207.8 24.2 19.6 -18.6 19.4 -18.2 19.2 -18.0 19.6 -18.8
2025-12-31T20:30:47.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T20:30:47.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T20:30:47.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.770972
2025-12-31T20:30:47.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T20:30:47.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T20:30:47.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T20:30:47.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T20:30:47.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T20:30:47.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T20:30:17', tmtdew=8.31, humidity=58.27, cloud=0.0, wind=19.52, temperature=18.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T18:30:11.981', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T20:30:47.108 [DEBUG] [Thread-134169] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:30:47.192 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T20:30:47.205 [DEBUG] [Thread-134172] [transport.py] [_log()] starting thread (client mode): 0xb1764700
2025-12-31T20:30:47.205 [DEBUG] [Thread-134172] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:30:47.220 [DEBUG] [Thread-134172] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T20:30:47.220 [INFO] [Thread-134172] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T20:30:47.227 [DEBUG] [Thread-134172] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:30:47.228 [DEBUG] [Thread-134172] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T20:30:47.228 [DEBUG] [Thread-134172] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:30:47.228 [DEBUG] [Thread-134172] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:30:47.228 [DEBUG] [Thread-134172] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:30:47.228 [DEBUG] [Thread-134172] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:30:47.228 [DEBUG] [Thread-134172] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:30:47.228 [DEBUG] [Thread-134172] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:30:47.228 [DEBUG] [Thread-134172] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:30:47.228 [DEBUG] [Thread-134172] [transport.py] [_log()] client lang: <none>
2025-12-31T20:30:47.228 [DEBUG] [Thread-134172] [transport.py] [_log()] server lang: <none>
2025-12-31T20:30:47.229 [DEBUG] [Thread-134172] [transport.py] [_log()] kex follows: False
2025-12-31T20:30:47.229 [DEBUG] [Thread-134172] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:30:47.229 [DEBUG] [Thread-134172] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:30:47.229 [DEBUG] [Thread-134172] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:30:47.229 [DEBUG] [Thread-134172] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:30:47.229 [DEBUG] [Thread-134172] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:30:47.229 [DEBUG] [Thread-134172] [transport.py] [_log()] Compression: none
2025-12-31T20:30:47.229 [DEBUG] [Thread-134172] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:30:47.286 [DEBUG] [Thread-134172] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:30:47.286 [DEBUG] [Thread-134172] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:30:47.287 [DEBUG] [Thread-134172] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T20:30:47.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T20:30:47.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:30:47.345 [DEBUG] [Thread-134172] [transport.py] [_log()] userauth is OK
2025-12-31T20:30:47.346 [DEBUG] [Thread-134172] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:30:47.346 [DEBUG] [Thread-134172] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:30:47.346 [DEBUG] [Thread-134172] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T20:30:47.346 [DEBUG] [Thread-134172] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:30:47.365 [INFO] [Thread-134172] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:30:47.365 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T20:30:47.366 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:30:48.205 [DEBUG] [Thread-134172] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:30:48.206 [DEBUG] [Thread-134172] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:30:48.254 [DEBUG] [Thread-134172] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:30:48.254 [DEBUG] [Thread-134172] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:30:48.264 [DEBUG] [Thread-134172] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:30:48.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:30: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')
2025-12-31T20:30:48.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T20:30:48.292 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:30:48.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:30:48.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:30:48.300 [DEBUG] [Thread-134172] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:31:00.599 [DEBUG] [Thread-134174 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:31:05.107 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:31:05.108 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:31:15.653 [DEBUG] [Thread-134175 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:31:18.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T20:31:18.323 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T20:31:18.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T20:31:19.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 20, 30, 49), 8.32, 58.25, 0.0, 16.29, 18.18, 0, 0, 0, 2, 0, 0),)
2025-12-31T20:31:19.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 20:30:49
2025-12-31T20:31:19.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T20:31:19.362 [DEBUG] [Thread-134176] [transport.py] [_log()] starting thread (client mode): 0xb95904c0
2025-12-31T20:31:19.362 [DEBUG] [Thread-134176] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:31:19.382 [DEBUG] [Thread-134176] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T20:31:19.382 [INFO] [Thread-134176] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T20:31:19.385 [DEBUG] [Thread-134176] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:31:19.385 [DEBUG] [Thread-134176] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T20:31:19.385 [DEBUG] [Thread-134176] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:31:19.385 [DEBUG] [Thread-134176] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:31:19.385 [DEBUG] [Thread-134176] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:31:19.385 [DEBUG] [Thread-134176] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:31:19.385 [DEBUG] [Thread-134176] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:31:19.385 [DEBUG] [Thread-134176] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:31:19.385 [DEBUG] [Thread-134176] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:31:19.385 [DEBUG] [Thread-134176] [transport.py] [_log()] client lang: <none>
2025-12-31T20:31:19.385 [DEBUG] [Thread-134176] [transport.py] [_log()] server lang: <none>
2025-12-31T20:31:19.385 [DEBUG] [Thread-134176] [transport.py] [_log()] kex follows: False
2025-12-31T20:31:19.385 [DEBUG] [Thread-134176] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:31:19.385 [DEBUG] [Thread-134176] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:31:19.385 [DEBUG] [Thread-134176] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:31:19.385 [DEBUG] [Thread-134176] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:31:19.385 [DEBUG] [Thread-134176] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:31:19.385 [DEBUG] [Thread-134176] [transport.py] [_log()] Compression: none
2025-12-31T20:31:19.385 [DEBUG] [Thread-134176] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:31:19.399 [DEBUG] [Thread-134176] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:31:19.399 [DEBUG] [Thread-134176] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:31:19.399 [DEBUG] [Thread-134176] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T20:31:19.399 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T20:31:19.399 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:31:19.400 [DEBUG] [Thread-134176] [transport.py] [_log()] userauth is OK
2025-12-31T20:31:19.400 [DEBUG] [Thread-134176] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:31:19.400 [DEBUG] [Thread-134176] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:31:19.400 [DEBUG] [Thread-134176] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T20:31:19.400 [DEBUG] [Thread-134176] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:31:19.416 [INFO] [Thread-134176] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:31:19.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:31:20.053 [DEBUG] [Thread-134176] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:31:20.053 [DEBUG] [Thread-134176] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:31:20.053 [DEBUG] [Thread-134176] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T20:31:20.094 [DEBUG] [Thread-134176] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:31:20.094 [DEBUG] [Thread-134176] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:31:20.096 [DEBUG] [Thread-134176] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:31:20.108 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:31:20.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T20:31:20.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T20:31:20.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T20:31:20.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:31:20.112 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T20:31:20.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:31:20.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:31:20.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T20:31:20.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.771319 -999.00  +18.30  10.91     61  +10.80 1 2 1 1 1    21    0 4.30 -159.85 ----- 7.5 10.9 212.4 17.5 19.6 -18.5 19.4 -18.4 19.2 -18.0 19.5 -18.6
2025-12-31T20:31:20.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T20:31:20.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T20:31:20.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.771319
2025-12-31T20:31:20.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T20:31:20.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T20:31:20.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T20:31:20.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T20:31:20.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T20:31:20.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T20:30:49', tmtdew=8.32, humidity=58.25, cloud=0.0, wind=16.29, temperature=18.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T18:30:41.962', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T20:31:20.113 [DEBUG] [Thread-134176] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:31:20.188 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T20:31:20.201 [DEBUG] [Thread-134179] [transport.py] [_log()] starting thread (client mode): 0xb17768c0
2025-12-31T20:31:20.202 [DEBUG] [Thread-134179] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:31:20.216 [DEBUG] [Thread-134179] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T20:31:20.216 [INFO] [Thread-134179] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T20:31:20.224 [DEBUG] [Thread-134179] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:31:20.224 [DEBUG] [Thread-134179] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T20:31:20.224 [DEBUG] [Thread-134179] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:31:20.224 [DEBUG] [Thread-134179] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:31:20.224 [DEBUG] [Thread-134179] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:31:20.224 [DEBUG] [Thread-134179] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:31:20.224 [DEBUG] [Thread-134179] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:31:20.224 [DEBUG] [Thread-134179] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:31:20.224 [DEBUG] [Thread-134179] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:31:20.224 [DEBUG] [Thread-134179] [transport.py] [_log()] client lang: <none>
2025-12-31T20:31:20.224 [DEBUG] [Thread-134179] [transport.py] [_log()] server lang: <none>
2025-12-31T20:31:20.224 [DEBUG] [Thread-134179] [transport.py] [_log()] kex follows: False
2025-12-31T20:31:20.224 [DEBUG] [Thread-134179] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:31:20.224 [DEBUG] [Thread-134179] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:31:20.224 [DEBUG] [Thread-134179] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:31:20.224 [DEBUG] [Thread-134179] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:31:20.224 [DEBUG] [Thread-134179] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:31:20.224 [DEBUG] [Thread-134179] [transport.py] [_log()] Compression: none
2025-12-31T20:31:20.224 [DEBUG] [Thread-134179] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:31:20.280 [DEBUG] [Thread-134179] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:31:20.280 [DEBUG] [Thread-134179] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:31:20.280 [DEBUG] [Thread-134179] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T20:31:20.280 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T20:31:20.280 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:31:20.337 [DEBUG] [Thread-134179] [transport.py] [_log()] userauth is OK
2025-12-31T20:31:20.337 [DEBUG] [Thread-134179] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:31:20.337 [DEBUG] [Thread-134179] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:31:20.337 [DEBUG] [Thread-134179] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T20:31:20.337 [DEBUG] [Thread-134179] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:31:20.352 [INFO] [Thread-134179] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:31:20.352 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T20:31:20.352 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:31:21.167 [DEBUG] [Thread-134179] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:31:21.167 [DEBUG] [Thread-134179] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:31:21.214 [DEBUG] [Thread-134179] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:31:21.214 [DEBUG] [Thread-134179] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:31:21.223 [DEBUG] [Thread-134179] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:31:21.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:31:21.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-12-31T20:31:21.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T20:31:21.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:31:21.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:31:21.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:31:21.255 [DEBUG] [Thread-134179] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:31:30.684 [DEBUG] [Thread-134181 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:31:38.052 [DEBUG] [Thread-134182 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:31:45.736 [DEBUG] [Thread-134183 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:31:51.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T20:31:51.261 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T20:31:51.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T20:31:51.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 20, 31, 21), 8.33, 58.22, 0.0, 18.9, 18.2, 0, 0, 0, 2, 0, 0),)
2025-12-31T20:31:51.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 20:31:21
2025-12-31T20:31:52.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T20:31:52.266 [DEBUG] [Thread-134184] [transport.py] [_log()] starting thread (client mode): 0xb1777400
2025-12-31T20:31:52.266 [DEBUG] [Thread-134184] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:31:52.285 [DEBUG] [Thread-134184] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T20:31:52.285 [INFO] [Thread-134184] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T20:31:52.288 [DEBUG] [Thread-134184] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:31:52.289 [DEBUG] [Thread-134184] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T20:31:52.289 [DEBUG] [Thread-134184] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:31:52.289 [DEBUG] [Thread-134184] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:31:52.289 [DEBUG] [Thread-134184] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:31:52.289 [DEBUG] [Thread-134184] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:31:52.289 [DEBUG] [Thread-134184] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:31:52.289 [DEBUG] [Thread-134184] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:31:52.289 [DEBUG] [Thread-134184] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:31:52.289 [DEBUG] [Thread-134184] [transport.py] [_log()] client lang: <none>
2025-12-31T20:31:52.289 [DEBUG] [Thread-134184] [transport.py] [_log()] server lang: <none>
2025-12-31T20:31:52.289 [DEBUG] [Thread-134184] [transport.py] [_log()] kex follows: False
2025-12-31T20:31:52.289 [DEBUG] [Thread-134184] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:31:52.289 [DEBUG] [Thread-134184] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:31:52.289 [DEBUG] [Thread-134184] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:31:52.289 [DEBUG] [Thread-134184] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:31:52.289 [DEBUG] [Thread-134184] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:31:52.289 [DEBUG] [Thread-134184] [transport.py] [_log()] Compression: none
2025-12-31T20:31:52.289 [DEBUG] [Thread-134184] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:31:52.306 [DEBUG] [Thread-134184] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:31:52.306 [DEBUG] [Thread-134184] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:31:52.307 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T20:31:52.307 [DEBUG] [Thread-134184] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T20:31:52.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:31:52.309 [DEBUG] [Thread-134184] [transport.py] [_log()] userauth is OK
2025-12-31T20:31:52.309 [DEBUG] [Thread-134184] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:31:52.309 [DEBUG] [Thread-134184] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:31:52.309 [DEBUG] [Thread-134184] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T20:31:52.309 [DEBUG] [Thread-134184] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:31:52.330 [INFO] [Thread-134184] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:31:52.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:31:52.982 [DEBUG] [Thread-134184] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:31:52.983 [DEBUG] [Thread-134184] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:31:52.983 [DEBUG] [Thread-134184] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T20:31:53.023 [DEBUG] [Thread-134184] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:31:53.023 [DEBUG] [Thread-134184] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:31:53.026 [DEBUG] [Thread-134184] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:31:53.039 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:31:53.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T20:31:53.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T20:31:53.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T20:31:53.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:31:53.050 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T20:31:53.050 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:31:53.050 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:31:53.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T20:31:53.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.771666 -999.00  +18.30  22.91     61  +10.80 1 2 1 1 1    19    0 4.03 -159.66 ----- 21.0 22.9 192.2 28.1 19.6 -18.5 19.4 -18.7 19.2 -18.0 19.5 -18.8
2025-12-31T20:31:53.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T20:31:53.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T20:31:53.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.771666
2025-12-31T20:31:53.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T20:31:53.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T20:31:53.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T20:31:53.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T20:31:53.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T20:31:53.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T20:31:21', tmtdew=8.33, humidity=58.22, cloud=0.0, wind=18.9, temperature=18.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T18:31:11.942', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T20:31:53.053 [DEBUG] [Thread-134184] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:31:53.137 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T20:31:53.149 [DEBUG] [Thread-134187] [transport.py] [_log()] starting thread (client mode): 0xb6bbf1f0
2025-12-31T20:31:53.149 [DEBUG] [Thread-134187] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:31:53.163 [DEBUG] [Thread-134187] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T20:31:53.163 [INFO] [Thread-134187] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T20:31:53.171 [DEBUG] [Thread-134187] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:31:53.171 [DEBUG] [Thread-134187] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T20:31:53.171 [DEBUG] [Thread-134187] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:31:53.171 [DEBUG] [Thread-134187] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:31:53.171 [DEBUG] [Thread-134187] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:31:53.171 [DEBUG] [Thread-134187] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:31:53.171 [DEBUG] [Thread-134187] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:31:53.171 [DEBUG] [Thread-134187] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:31:53.171 [DEBUG] [Thread-134187] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:31:53.171 [DEBUG] [Thread-134187] [transport.py] [_log()] client lang: <none>
2025-12-31T20:31:53.171 [DEBUG] [Thread-134187] [transport.py] [_log()] server lang: <none>
2025-12-31T20:31:53.171 [DEBUG] [Thread-134187] [transport.py] [_log()] kex follows: False
2025-12-31T20:31:53.171 [DEBUG] [Thread-134187] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:31:53.171 [DEBUG] [Thread-134187] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:31:53.171 [DEBUG] [Thread-134187] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:31:53.171 [DEBUG] [Thread-134187] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:31:53.172 [DEBUG] [Thread-134187] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:31:53.172 [DEBUG] [Thread-134187] [transport.py] [_log()] Compression: none
2025-12-31T20:31:53.172 [DEBUG] [Thread-134187] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:31:53.230 [DEBUG] [Thread-134187] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:31:53.231 [DEBUG] [Thread-134187] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:31:53.231 [DEBUG] [Thread-134187] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T20:31:53.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T20:31:53.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:31:53.286 [DEBUG] [Thread-134187] [transport.py] [_log()] userauth is OK
2025-12-31T20:31:53.286 [DEBUG] [Thread-134187] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:31:53.287 [DEBUG] [Thread-134187] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:31:53.287 [DEBUG] [Thread-134187] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T20:31:53.287 [DEBUG] [Thread-134187] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:31:53.305 [INFO] [Thread-134187] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:31:53.306 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T20:31:53.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:31:54.136 [DEBUG] [Thread-134187] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:31:54.136 [DEBUG] [Thread-134187] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:31:54.183 [DEBUG] [Thread-134187] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:31:54.183 [DEBUG] [Thread-134187] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:31:54.192 [DEBUG] [Thread-134187] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:31:54.200 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:31:54.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T20:31:54.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T20:31:54.215 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:31:54.215 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:31:54.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:31:54.223 [DEBUG] [Thread-134187] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:32:00.768 [DEBUG] [Thread-134189 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:32:12.709 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:32:12.710 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:32:15.805 [DEBUG] [Thread-134190 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:32:24.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T20:32:24.236 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T20:32:24.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T20:32:24.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 20, 31, 53), 8.3, 58.32, 0.0, 20.47, 18.13, 0, 0, 0, 2, 0, 0),)
2025-12-31T20:32:24.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 20:31:53
2025-12-31T20:32:25.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T20:32:25.209 [DEBUG] [Thread-134191] [transport.py] [_log()] starting thread (client mode): 0xb6bbe050
2025-12-31T20:32:25.209 [DEBUG] [Thread-134191] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:32:25.229 [DEBUG] [Thread-134191] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T20:32:25.229 [INFO] [Thread-134191] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T20:32:25.232 [DEBUG] [Thread-134191] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:32:25.232 [DEBUG] [Thread-134191] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T20:32:25.232 [DEBUG] [Thread-134191] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:32:25.232 [DEBUG] [Thread-134191] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:32:25.232 [DEBUG] [Thread-134191] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:32:25.232 [DEBUG] [Thread-134191] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:32:25.232 [DEBUG] [Thread-134191] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:32:25.232 [DEBUG] [Thread-134191] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:32:25.232 [DEBUG] [Thread-134191] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:32:25.232 [DEBUG] [Thread-134191] [transport.py] [_log()] client lang: <none>
2025-12-31T20:32:25.232 [DEBUG] [Thread-134191] [transport.py] [_log()] server lang: <none>
2025-12-31T20:32:25.232 [DEBUG] [Thread-134191] [transport.py] [_log()] kex follows: False
2025-12-31T20:32:25.232 [DEBUG] [Thread-134191] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:32:25.232 [DEBUG] [Thread-134191] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:32:25.232 [DEBUG] [Thread-134191] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:32:25.232 [DEBUG] [Thread-134191] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:32:25.232 [DEBUG] [Thread-134191] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:32:25.232 [DEBUG] [Thread-134191] [transport.py] [_log()] Compression: none
2025-12-31T20:32:25.232 [DEBUG] [Thread-134191] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:32:25.251 [DEBUG] [Thread-134191] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:32:25.251 [DEBUG] [Thread-134191] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:32:25.252 [DEBUG] [Thread-134191] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T20:32:25.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T20:32:25.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:32:25.254 [DEBUG] [Thread-134191] [transport.py] [_log()] userauth is OK
2025-12-31T20:32:25.255 [DEBUG] [Thread-134191] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:32:25.255 [DEBUG] [Thread-134191] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:32:25.255 [DEBUG] [Thread-134191] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T20:32:25.255 [DEBUG] [Thread-134191] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:32:25.288 [INFO] [Thread-134191] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:32:25.289 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:32:25.928 [DEBUG] [Thread-134191] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:32:25.928 [DEBUG] [Thread-134191] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:32:25.928 [DEBUG] [Thread-134191] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T20:32:25.970 [DEBUG] [Thread-134191] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:32:25.970 [DEBUG] [Thread-134191] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:32:25.973 [DEBUG] [Thread-134191] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:32:25.984 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:32:25.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T20:32:25.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T20:32:25.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T20:32:25.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:32:25.992 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T20:32:25.992 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:32:25.992 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:32:25.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T20:32:25.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.772013 -999.00  +18.20  13.26     61  +10.80 1 2 1 1 1    17    0 3.44 -176.17 ----- 14.9 13.3 225.6 24.7 19.5 -18.4 19.3 -18.1 19.2 -17.9 19.4 -18.7
2025-12-31T20:32:25.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T20:32:25.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T20:32:25.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.772013
2025-12-31T20:32:25.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T20:32:25.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T20:32:25.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T20:32:25.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T20:32:25.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T20:32:25.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T20:31:53', tmtdew=8.3, humidity=58.32, cloud=0.0, wind=20.47, temperature=18.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T18:31:41.923', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T20:32:25.993 [DEBUG] [Thread-134191] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:32:26.067 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T20:32:26.078 [DEBUG] [Thread-134194] [transport.py] [_log()] starting thread (client mode): 0xb1775a80
2025-12-31T20:32:26.079 [DEBUG] [Thread-134194] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:32:26.093 [DEBUG] [Thread-134194] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T20:32:26.093 [INFO] [Thread-134194] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T20:32:26.101 [DEBUG] [Thread-134194] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:32:26.101 [DEBUG] [Thread-134194] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T20:32:26.101 [DEBUG] [Thread-134194] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:32:26.101 [DEBUG] [Thread-134194] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:32:26.101 [DEBUG] [Thread-134194] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:32:26.101 [DEBUG] [Thread-134194] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:32:26.101 [DEBUG] [Thread-134194] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:32:26.101 [DEBUG] [Thread-134194] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:32:26.101 [DEBUG] [Thread-134194] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:32:26.101 [DEBUG] [Thread-134194] [transport.py] [_log()] client lang: <none>
2025-12-31T20:32:26.101 [DEBUG] [Thread-134194] [transport.py] [_log()] server lang: <none>
2025-12-31T20:32:26.101 [DEBUG] [Thread-134194] [transport.py] [_log()] kex follows: False
2025-12-31T20:32:26.101 [DEBUG] [Thread-134194] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:32:26.101 [DEBUG] [Thread-134194] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:32:26.101 [DEBUG] [Thread-134194] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:32:26.101 [DEBUG] [Thread-134194] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:32:26.101 [DEBUG] [Thread-134194] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:32:26.101 [DEBUG] [Thread-134194] [transport.py] [_log()] Compression: none
2025-12-31T20:32:26.101 [DEBUG] [Thread-134194] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:32:26.157 [DEBUG] [Thread-134194] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:32:26.158 [DEBUG] [Thread-134194] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:32:26.158 [DEBUG] [Thread-134194] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T20:32:26.158 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T20:32:26.158 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:32:26.214 [DEBUG] [Thread-134194] [transport.py] [_log()] userauth is OK
2025-12-31T20:32:26.214 [DEBUG] [Thread-134194] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:32:26.214 [DEBUG] [Thread-134194] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:32:26.214 [DEBUG] [Thread-134194] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T20:32:26.214 [DEBUG] [Thread-134194] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:32:26.228 [INFO] [Thread-134194] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:32:26.228 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T20:32:26.229 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:32:27.074 [DEBUG] [Thread-134194] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:32:27.074 [DEBUG] [Thread-134194] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:32:27.122 [DEBUG] [Thread-134194] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:32:27.122 [DEBUG] [Thread-134194] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:32:27.130 [DEBUG] [Thread-134194] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:32:27.138 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:32:27.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T20:32:27.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T20:32:27.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:32:27.154 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:32:27.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:32:27.162 [DEBUG] [Thread-134194] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:32:30.839 [DEBUG] [Thread-134196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:32:38.106 [DEBUG] [Thread-134197 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:32:45.888 [DEBUG] [Thread-134198 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:32:57.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T20:32:57.171 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T20:32:57.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T20:32:57.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 20, 32, 25), 8.3, 58.32, 0.0, 20.86, 18.1, 0, 0, 0, 2, 0, 0),)
2025-12-31T20:32:57.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 20:32:25
2025-12-31T20:32:58.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T20:32:58.216 [DEBUG] [Thread-134199] [transport.py] [_log()] starting thread (client mode): 0xb95d60b0
2025-12-31T20:32:58.216 [DEBUG] [Thread-134199] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:32:58.238 [DEBUG] [Thread-134199] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T20:32:58.238 [INFO] [Thread-134199] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T20:32:58.241 [DEBUG] [Thread-134199] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:32:58.241 [DEBUG] [Thread-134199] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T20:32:58.241 [DEBUG] [Thread-134199] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:32:58.241 [DEBUG] [Thread-134199] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:32:58.241 [DEBUG] [Thread-134199] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:32:58.241 [DEBUG] [Thread-134199] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:32:58.241 [DEBUG] [Thread-134199] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:32:58.241 [DEBUG] [Thread-134199] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:32:58.241 [DEBUG] [Thread-134199] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:32:58.241 [DEBUG] [Thread-134199] [transport.py] [_log()] client lang: <none>
2025-12-31T20:32:58.241 [DEBUG] [Thread-134199] [transport.py] [_log()] server lang: <none>
2025-12-31T20:32:58.241 [DEBUG] [Thread-134199] [transport.py] [_log()] kex follows: False
2025-12-31T20:32:58.241 [DEBUG] [Thread-134199] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:32:58.241 [DEBUG] [Thread-134199] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:32:58.241 [DEBUG] [Thread-134199] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:32:58.241 [DEBUG] [Thread-134199] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:32:58.241 [DEBUG] [Thread-134199] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:32:58.241 [DEBUG] [Thread-134199] [transport.py] [_log()] Compression: none
2025-12-31T20:32:58.241 [DEBUG] [Thread-134199] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:32:58.255 [DEBUG] [Thread-134199] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:32:58.255 [DEBUG] [Thread-134199] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:32:58.255 [DEBUG] [Thread-134199] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T20:32:58.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T20:32:58.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:32:58.256 [DEBUG] [Thread-134199] [transport.py] [_log()] userauth is OK
2025-12-31T20:32:58.256 [DEBUG] [Thread-134199] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:32:58.256 [DEBUG] [Thread-134199] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:32:58.256 [DEBUG] [Thread-134199] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T20:32:58.256 [DEBUG] [Thread-134199] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:32:58.265 [INFO] [Thread-134199] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:32:58.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:32:58.936 [DEBUG] [Thread-134199] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:32:58.936 [DEBUG] [Thread-134199] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:32:58.936 [DEBUG] [Thread-134199] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T20:32:58.977 [DEBUG] [Thread-134199] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:32:58.977 [DEBUG] [Thread-134199] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:32:58.979 [DEBUG] [Thread-134199] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:32:58.992 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:32:58.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T20:32:58.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T20:32:58.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T20:32:58.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:32:58.999 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T20:32:58.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:32:58.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:32:58.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T20:32:58.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.772361 -999.00  +18.30  21.69     61  +10.80 1 2 1 1 1    16    0 3.50 -172.39 ----- 17.7 21.7 205.2 28.2 19.5 -18.4 19.3 -18.2 19.1 -17.9 19.5 -18.4
2025-12-31T20:32:58.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T20:32:58.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T20:32:58.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.772361
2025-12-31T20:32:58.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T20:32:59.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T20:32:59.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T20:32:59.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T20:32:59.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T20:32:59.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T20:32:25', tmtdew=8.3, humidity=58.32, cloud=0.0, wind=20.86, temperature=18.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T18:32:11.990', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T20:32:59.000 [DEBUG] [Thread-134199] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:32:59.074 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T20:32:59.086 [DEBUG] [Thread-134202] [transport.py] [_log()] starting thread (client mode): 0xb1775f90
2025-12-31T20:32:59.086 [DEBUG] [Thread-134202] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:32:59.101 [DEBUG] [Thread-134202] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T20:32:59.101 [INFO] [Thread-134202] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T20:32:59.109 [DEBUG] [Thread-134202] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:32:59.109 [DEBUG] [Thread-134202] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T20:32:59.109 [DEBUG] [Thread-134202] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:32:59.109 [DEBUG] [Thread-134202] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:32:59.109 [DEBUG] [Thread-134202] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:32:59.109 [DEBUG] [Thread-134202] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:32:59.109 [DEBUG] [Thread-134202] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:32:59.109 [DEBUG] [Thread-134202] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:32:59.109 [DEBUG] [Thread-134202] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:32:59.109 [DEBUG] [Thread-134202] [transport.py] [_log()] client lang: <none>
2025-12-31T20:32:59.109 [DEBUG] [Thread-134202] [transport.py] [_log()] server lang: <none>
2025-12-31T20:32:59.109 [DEBUG] [Thread-134202] [transport.py] [_log()] kex follows: False
2025-12-31T20:32:59.109 [DEBUG] [Thread-134202] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:32:59.109 [DEBUG] [Thread-134202] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:32:59.109 [DEBUG] [Thread-134202] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:32:59.109 [DEBUG] [Thread-134202] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:32:59.109 [DEBUG] [Thread-134202] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:32:59.109 [DEBUG] [Thread-134202] [transport.py] [_log()] Compression: none
2025-12-31T20:32:59.109 [DEBUG] [Thread-134202] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:32:59.165 [DEBUG] [Thread-134202] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:32:59.165 [DEBUG] [Thread-134202] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:32:59.165 [DEBUG] [Thread-134202] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T20:32:59.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T20:32:59.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:32:59.223 [DEBUG] [Thread-134202] [transport.py] [_log()] userauth is OK
2025-12-31T20:32:59.223 [DEBUG] [Thread-134202] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:32:59.223 [DEBUG] [Thread-134202] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:32:59.223 [DEBUG] [Thread-134202] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T20:32:59.223 [DEBUG] [Thread-134202] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:32:59.236 [INFO] [Thread-134202] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:32:59.236 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T20:32:59.236 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:33:00.111 [DEBUG] [Thread-134202] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:33:00.111 [DEBUG] [Thread-134202] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:33:00.159 [DEBUG] [Thread-134202] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:33:00.159 [DEBUG] [Thread-134202] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:33:00.168 [DEBUG] [Thread-134202] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:33:00.177 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:33:00.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-12-31T20:33:00.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T20:33:00.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:33:00.195 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:33:00.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:33:00.202 [DEBUG] [Thread-134202] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:33:00.925 [DEBUG] [Thread-134204 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:33:15.968 [DEBUG] [Thread-134205 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:33:19.750 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:33:19.750 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:33:30.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T20:33:30.225 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T20:33:30.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T20:33:30.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 20, 32, 57), 8.25, 58.8, 0.0, 20.47, 18.05, 0, 0, 0, 2, 0, 0),)
2025-12-31T20:33:30.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 20:32:57
2025-12-31T20:33:30.999 [DEBUG] [Thread-134206 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:33:31.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T20:33:31.270 [DEBUG] [Thread-134207] [transport.py] [_log()] starting thread (client mode): 0xb1765a50
2025-12-31T20:33:31.270 [DEBUG] [Thread-134207] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:33:31.290 [DEBUG] [Thread-134207] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T20:33:31.290 [INFO] [Thread-134207] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T20:33:31.293 [DEBUG] [Thread-134207] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:33:31.294 [DEBUG] [Thread-134207] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T20:33:31.294 [DEBUG] [Thread-134207] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:33:31.294 [DEBUG] [Thread-134207] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:33:31.294 [DEBUG] [Thread-134207] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:33:31.294 [DEBUG] [Thread-134207] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:33:31.294 [DEBUG] [Thread-134207] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:33:31.294 [DEBUG] [Thread-134207] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:33:31.294 [DEBUG] [Thread-134207] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:33:31.294 [DEBUG] [Thread-134207] [transport.py] [_log()] client lang: <none>
2025-12-31T20:33:31.294 [DEBUG] [Thread-134207] [transport.py] [_log()] server lang: <none>
2025-12-31T20:33:31.294 [DEBUG] [Thread-134207] [transport.py] [_log()] kex follows: False
2025-12-31T20:33:31.294 [DEBUG] [Thread-134207] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:33:31.294 [DEBUG] [Thread-134207] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:33:31.294 [DEBUG] [Thread-134207] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:33:31.294 [DEBUG] [Thread-134207] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:33:31.294 [DEBUG] [Thread-134207] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:33:31.294 [DEBUG] [Thread-134207] [transport.py] [_log()] Compression: none
2025-12-31T20:33:31.294 [DEBUG] [Thread-134207] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:33:31.309 [DEBUG] [Thread-134207] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:33:31.309 [DEBUG] [Thread-134207] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:33:31.309 [DEBUG] [Thread-134207] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T20:33:31.309 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T20:33:31.309 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:33:31.310 [DEBUG] [Thread-134207] [transport.py] [_log()] userauth is OK
2025-12-31T20:33:31.310 [DEBUG] [Thread-134207] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:33:31.310 [DEBUG] [Thread-134207] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:33:31.310 [DEBUG] [Thread-134207] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T20:33:31.310 [DEBUG] [Thread-134207] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:33:31.325 [INFO] [Thread-134207] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:33:31.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:33:32.007 [DEBUG] [Thread-134207] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:33:32.007 [DEBUG] [Thread-134207] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:33:32.008 [DEBUG] [Thread-134207] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T20:33:32.048 [DEBUG] [Thread-134207] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:33:32.048 [DEBUG] [Thread-134207] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:33:32.051 [DEBUG] [Thread-134207] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:33:32.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:33:32.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T20:33:32.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T20:33:32.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T20:33:32.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:33:32.073 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T20:33:32.074 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:33:32.074 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:33:32.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T20:33:32.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.772708 -999.00  +18.30  12.14     61  +10.80 1 2 1 1 1    15    0 3.75 -166.16 ----- 13.3 12.1 209.9 19.0 19.4 -18.1 19.4 -18.0 19.1 -17.7 19.4 -18.2
2025-12-31T20:33:32.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T20:33:32.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T20:33:32.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.772708
2025-12-31T20:33:32.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T20:33:32.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T20:33:32.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T20:33:32.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T20:33:32.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T20:33:32.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T20:32:57', tmtdew=8.25, humidity=58.8, cloud=0.0, wind=20.47, temperature=18.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T18:32:41.971', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T20:33:32.076 [DEBUG] [Thread-134207] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:33:32.160 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T20:33:32.171 [DEBUG] [Thread-134210] [transport.py] [_log()] starting thread (client mode): 0xb6bba1a0
2025-12-31T20:33:32.171 [DEBUG] [Thread-134210] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:33:32.186 [DEBUG] [Thread-134210] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T20:33:32.186 [INFO] [Thread-134210] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T20:33:32.194 [DEBUG] [Thread-134210] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:33:32.194 [DEBUG] [Thread-134210] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T20:33:32.194 [DEBUG] [Thread-134210] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:33:32.194 [DEBUG] [Thread-134210] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:33:32.194 [DEBUG] [Thread-134210] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:33:32.195 [DEBUG] [Thread-134210] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:33:32.195 [DEBUG] [Thread-134210] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:33:32.195 [DEBUG] [Thread-134210] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:33:32.195 [DEBUG] [Thread-134210] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:33:32.195 [DEBUG] [Thread-134210] [transport.py] [_log()] client lang: <none>
2025-12-31T20:33:32.195 [DEBUG] [Thread-134210] [transport.py] [_log()] server lang: <none>
2025-12-31T20:33:32.195 [DEBUG] [Thread-134210] [transport.py] [_log()] kex follows: False
2025-12-31T20:33:32.195 [DEBUG] [Thread-134210] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:33:32.195 [DEBUG] [Thread-134210] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:33:32.196 [DEBUG] [Thread-134210] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:33:32.196 [DEBUG] [Thread-134210] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:33:32.196 [DEBUG] [Thread-134210] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:33:32.196 [DEBUG] [Thread-134210] [transport.py] [_log()] Compression: none
2025-12-31T20:33:32.196 [DEBUG] [Thread-134210] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:33:32.252 [DEBUG] [Thread-134210] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:33:32.253 [DEBUG] [Thread-134210] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:33:32.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T20:33:32.254 [DEBUG] [Thread-134210] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T20:33:32.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:33:32.308 [DEBUG] [Thread-134210] [transport.py] [_log()] userauth is OK
2025-12-31T20:33:32.308 [DEBUG] [Thread-134210] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:33:32.308 [DEBUG] [Thread-134210] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:33:32.308 [DEBUG] [Thread-134210] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T20:33:32.308 [DEBUG] [Thread-134210] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:33:32.326 [INFO] [Thread-134210] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:33:32.327 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T20:33:32.328 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:33:33.144 [DEBUG] [Thread-134210] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:33:33.145 [DEBUG] [Thread-134210] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:33:33.193 [DEBUG] [Thread-134210] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:33:33.194 [DEBUG] [Thread-134210] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:33:33.203 [DEBUG] [Thread-134210] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:33:33.212 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:33:33.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-12-31T20:33:33.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T20:33:33.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:33:33.231 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:33:33.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:33:33.240 [DEBUG] [Thread-134210] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:33:38.190 [DEBUG] [Thread-134212 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:33:46.032 [DEBUG] [Thread-134213 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:34:01.081 [DEBUG] [Thread-134214 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:34:03.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T20:34:03.262 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T20:34:03.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T20:34:04.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 20, 33, 29), 8.25, 58.8, 0.0, 20.47, 18.07, 0, 0, 0, 2, 0, 0),)
2025-12-31T20:34:04.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 20:33:29
2025-12-31T20:34:04.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T20:34:04.277 [DEBUG] [Thread-134215] [transport.py] [_log()] starting thread (client mode): 0xb6bbc1c0
2025-12-31T20:34:04.277 [DEBUG] [Thread-134215] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:34:04.297 [DEBUG] [Thread-134215] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T20:34:04.297 [INFO] [Thread-134215] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T20:34:04.298 [DEBUG] [Thread-134215] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:34:04.298 [DEBUG] [Thread-134215] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T20:34:04.298 [DEBUG] [Thread-134215] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:34:04.299 [DEBUG] [Thread-134215] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:34:04.299 [DEBUG] [Thread-134215] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:34:04.299 [DEBUG] [Thread-134215] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:34:04.299 [DEBUG] [Thread-134215] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:34:04.299 [DEBUG] [Thread-134215] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:34:04.299 [DEBUG] [Thread-134215] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:34:04.299 [DEBUG] [Thread-134215] [transport.py] [_log()] client lang: <none>
2025-12-31T20:34:04.299 [DEBUG] [Thread-134215] [transport.py] [_log()] server lang: <none>
2025-12-31T20:34:04.299 [DEBUG] [Thread-134215] [transport.py] [_log()] kex follows: False
2025-12-31T20:34:04.299 [DEBUG] [Thread-134215] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:34:04.299 [DEBUG] [Thread-134215] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:34:04.299 [DEBUG] [Thread-134215] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:34:04.299 [DEBUG] [Thread-134215] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:34:04.299 [DEBUG] [Thread-134215] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:34:04.299 [DEBUG] [Thread-134215] [transport.py] [_log()] Compression: none
2025-12-31T20:34:04.299 [DEBUG] [Thread-134215] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:34:04.307 [DEBUG] [Thread-134215] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:34:04.307 [DEBUG] [Thread-134215] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:34:04.307 [DEBUG] [Thread-134215] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T20:34:04.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T20:34:04.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:34:04.309 [DEBUG] [Thread-134215] [transport.py] [_log()] userauth is OK
2025-12-31T20:34:04.309 [DEBUG] [Thread-134215] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:34:04.309 [DEBUG] [Thread-134215] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:34:04.309 [DEBUG] [Thread-134215] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T20:34:04.309 [DEBUG] [Thread-134215] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:34:04.327 [INFO] [Thread-134215] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:34:04.328 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:34:04.920 [DEBUG] [Thread-134215] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:34:04.920 [DEBUG] [Thread-134215] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:34:04.920 [DEBUG] [Thread-134215] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T20:34:04.961 [DEBUG] [Thread-134215] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:34:04.961 [DEBUG] [Thread-134215] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:34:04.965 [DEBUG] [Thread-134215] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:34:04.975 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:34:04.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T20:34:04.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T20:34:04.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T20:34:04.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:34:04.987 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T20:34:04.987 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:34:04.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:34:04.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T20:34:04.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.773055 -999.00  +18.20  17.47     61  +10.80 1 2 1 1 1    13    0 3.66 -163.81 ----- 21.3 17.5 193.8 22.8 19.4 -18.2 19.3 -18.6 19.1 -18.0 19.4 -18.3
2025-12-31T20:34:04.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T20:34:04.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T20:34:04.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.773055
2025-12-31T20:34:04.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T20:34:04.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T20:34:04.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T20:34:04.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T20:34:04.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T20:34:04.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T20:33:29', tmtdew=8.25, humidity=58.8, cloud=0.0, wind=20.47, temperature=18.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T18:33:11.952', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T20:34:04.990 [DEBUG] [Thread-134215] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:34:05.073 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T20:34:05.085 [DEBUG] [Thread-134218] [transport.py] [_log()] starting thread (client mode): 0xb1747460
2025-12-31T20:34:05.085 [DEBUG] [Thread-134218] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:34:05.100 [DEBUG] [Thread-134218] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T20:34:05.100 [INFO] [Thread-134218] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T20:34:05.108 [DEBUG] [Thread-134218] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:34:05.108 [DEBUG] [Thread-134218] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T20:34:05.108 [DEBUG] [Thread-134218] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:34:05.108 [DEBUG] [Thread-134218] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:34:05.108 [DEBUG] [Thread-134218] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:34:05.108 [DEBUG] [Thread-134218] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:34:05.108 [DEBUG] [Thread-134218] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:34:05.108 [DEBUG] [Thread-134218] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:34:05.108 [DEBUG] [Thread-134218] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:34:05.108 [DEBUG] [Thread-134218] [transport.py] [_log()] client lang: <none>
2025-12-31T20:34:05.109 [DEBUG] [Thread-134218] [transport.py] [_log()] server lang: <none>
2025-12-31T20:34:05.109 [DEBUG] [Thread-134218] [transport.py] [_log()] kex follows: False
2025-12-31T20:34:05.109 [DEBUG] [Thread-134218] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:34:05.109 [DEBUG] [Thread-134218] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:34:05.109 [DEBUG] [Thread-134218] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:34:05.109 [DEBUG] [Thread-134218] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:34:05.109 [DEBUG] [Thread-134218] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:34:05.109 [DEBUG] [Thread-134218] [transport.py] [_log()] Compression: none
2025-12-31T20:34:05.109 [DEBUG] [Thread-134218] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:34:05.173 [DEBUG] [Thread-134218] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:34:05.173 [DEBUG] [Thread-134218] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:34:05.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T20:34:05.175 [DEBUG] [Thread-134218] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T20:34:05.176 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:34:05.232 [DEBUG] [Thread-134218] [transport.py] [_log()] userauth is OK
2025-12-31T20:34:05.232 [DEBUG] [Thread-134218] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:34:05.233 [DEBUG] [Thread-134218] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:34:05.233 [DEBUG] [Thread-134218] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T20:34:05.233 [DEBUG] [Thread-134218] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:34:05.251 [INFO] [Thread-134218] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:34:05.251 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T20:34:05.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:34:06.095 [DEBUG] [Thread-134218] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:34:06.095 [DEBUG] [Thread-134218] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:34:06.143 [DEBUG] [Thread-134218] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:34:06.143 [DEBUG] [Thread-134218] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:34:06.152 [DEBUG] [Thread-134218] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:34:06.161 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:34:06.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T20:34:06.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T20:34:06.179 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:34:06.180 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:34:06.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:34:06.188 [DEBUG] [Thread-134218] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:34:16.112 [DEBUG] [Thread-134220 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:34:25.936 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:34:25.937 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:34:31.163 [DEBUG] [Thread-134221 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:34:36.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T20:34:36.181 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T20:34:36.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-12-31T20:34:36.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 20, 34, 33), 8.4, 58.03, 0.0, 25.37, 18.57, 0, 0, 0, 2, 0, 0),)
2025-12-31T20:34:36.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 20:34:33
2025-12-31T20:34:37.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T20:34:37.220 [DEBUG] [Thread-134222] [transport.py] [_log()] starting thread (client mode): 0xb6bbec20
2025-12-31T20:34:37.220 [DEBUG] [Thread-134222] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:34:37.240 [DEBUG] [Thread-134222] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T20:34:37.240 [INFO] [Thread-134222] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T20:34:37.243 [DEBUG] [Thread-134222] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:34:37.244 [DEBUG] [Thread-134222] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T20:34:37.244 [DEBUG] [Thread-134222] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:34:37.244 [DEBUG] [Thread-134222] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:34:37.244 [DEBUG] [Thread-134222] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:34:37.244 [DEBUG] [Thread-134222] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:34:37.244 [DEBUG] [Thread-134222] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:34:37.244 [DEBUG] [Thread-134222] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:34:37.244 [DEBUG] [Thread-134222] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:34:37.244 [DEBUG] [Thread-134222] [transport.py] [_log()] client lang: <none>
2025-12-31T20:34:37.244 [DEBUG] [Thread-134222] [transport.py] [_log()] server lang: <none>
2025-12-31T20:34:37.244 [DEBUG] [Thread-134222] [transport.py] [_log()] kex follows: False
2025-12-31T20:34:37.244 [DEBUG] [Thread-134222] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:34:37.244 [DEBUG] [Thread-134222] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:34:37.244 [DEBUG] [Thread-134222] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:34:37.244 [DEBUG] [Thread-134222] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:34:37.244 [DEBUG] [Thread-134222] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:34:37.244 [DEBUG] [Thread-134222] [transport.py] [_log()] Compression: none
2025-12-31T20:34:37.244 [DEBUG] [Thread-134222] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:34:37.259 [DEBUG] [Thread-134222] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:34:37.259 [DEBUG] [Thread-134222] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:34:37.259 [DEBUG] [Thread-134222] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T20:34:37.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T20:34:37.260 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:34:37.261 [DEBUG] [Thread-134222] [transport.py] [_log()] userauth is OK
2025-12-31T20:34:37.261 [DEBUG] [Thread-134222] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:34:37.261 [DEBUG] [Thread-134222] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:34:37.261 [DEBUG] [Thread-134222] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T20:34:37.261 [DEBUG] [Thread-134222] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:34:37.274 [INFO] [Thread-134222] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:34:37.274 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:34:37.887 [DEBUG] [Thread-134222] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:34:37.887 [DEBUG] [Thread-134222] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:34:37.887 [DEBUG] [Thread-134222] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T20:34:37.929 [DEBUG] [Thread-134222] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:34:37.929 [DEBUG] [Thread-134222] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:34:37.932 [DEBUG] [Thread-134222] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:34:37.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:34:37.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T20:34:37.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T20:34:37.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T20:34:37.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:34:37.953 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T20:34:37.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:34:37.954 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:34:37.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T20:34:37.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.773402 -999.00  +18.20  10.74     62  +10.80 1 2 1 1 1    12    0 3.65 -161.87 ----- 19.4 10.7 192.6 23.3 19.4 -18.0 19.3 -18.5 19.1 -17.9 19.4 -18.2
2025-12-31T20:34:37.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T20:34:37.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T20:34:37.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.773402
2025-12-31T20:34:37.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T20:34:37.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T20:34:37.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T20:34:37.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T20:34:37.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T20:34:37.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T20:34:33', tmtdew=8.4, humidity=58.03, cloud=0.0, wind=25.37, temperature=18.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T18:33:41.933', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T20:34:37.955 [DEBUG] [Thread-134222] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:34:38.028 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T20:34:38.039 [DEBUG] [Thread-134225] [transport.py] [_log()] starting thread (client mode): 0xb1775f00
2025-12-31T20:34:38.039 [DEBUG] [Thread-134225] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:34:38.053 [DEBUG] [Thread-134225] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T20:34:38.053 [INFO] [Thread-134225] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T20:34:38.061 [DEBUG] [Thread-134225] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:34:38.061 [DEBUG] [Thread-134225] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T20:34:38.061 [DEBUG] [Thread-134225] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:34:38.061 [DEBUG] [Thread-134225] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:34:38.061 [DEBUG] [Thread-134225] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:34:38.061 [DEBUG] [Thread-134225] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:34:38.061 [DEBUG] [Thread-134225] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:34:38.061 [DEBUG] [Thread-134225] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:34:38.061 [DEBUG] [Thread-134225] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:34:38.061 [DEBUG] [Thread-134225] [transport.py] [_log()] client lang: <none>
2025-12-31T20:34:38.061 [DEBUG] [Thread-134225] [transport.py] [_log()] server lang: <none>
2025-12-31T20:34:38.061 [DEBUG] [Thread-134225] [transport.py] [_log()] kex follows: False
2025-12-31T20:34:38.061 [DEBUG] [Thread-134225] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:34:38.061 [DEBUG] [Thread-134225] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:34:38.061 [DEBUG] [Thread-134225] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:34:38.061 [DEBUG] [Thread-134225] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:34:38.061 [DEBUG] [Thread-134225] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:34:38.061 [DEBUG] [Thread-134225] [transport.py] [_log()] Compression: none
2025-12-31T20:34:38.061 [DEBUG] [Thread-134225] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:34:38.119 [DEBUG] [Thread-134225] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:34:38.119 [DEBUG] [Thread-134225] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:34:38.119 [DEBUG] [Thread-134225] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T20:34:38.119 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T20:34:38.120 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:34:38.180 [DEBUG] [Thread-134225] [transport.py] [_log()] userauth is OK
2025-12-31T20:34:38.180 [DEBUG] [Thread-134225] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:34:38.180 [DEBUG] [Thread-134225] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:34:38.180 [DEBUG] [Thread-134225] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T20:34:38.180 [DEBUG] [Thread-134225] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:34:38.194 [INFO] [Thread-134225] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:34: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-12-31T20:34:38.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:34:38.261 [DEBUG] [Thread-134227 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:34:39.012 [DEBUG] [Thread-134225] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:34:39.012 [DEBUG] [Thread-134225] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:34:39.061 [DEBUG] [Thread-134225] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:34:39.062 [DEBUG] [Thread-134225] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:34:39.071 [DEBUG] [Thread-134225] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:34:39.080 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:34:39.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T20:34:39.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T20:34:39.099 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:34:39.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:34:39.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:34:39.107 [DEBUG] [Thread-134225] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:34:46.197 [DEBUG] [Thread-134228 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:35:01.239 [DEBUG] [Thread-134229 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:35:09.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T20:35:09.130 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T20:35:09.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T20:35:09.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 20, 35, 5), 8.16, 59.13, 0.0, 19.34, 18.07, 0, 0, 0, 2, 0, 0),)
2025-12-31T20:35:09.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 20:35:05
2025-12-31T20:35:09.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T20:35:10.103 [DEBUG] [Thread-134230] [transport.py] [_log()] starting thread (client mode): 0xb1777040
2025-12-31T20:35:10.103 [DEBUG] [Thread-134230] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:35:10.123 [DEBUG] [Thread-134230] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T20:35:10.123 [INFO] [Thread-134230] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T20:35:10.125 [DEBUG] [Thread-134230] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:35:10.125 [DEBUG] [Thread-134230] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T20:35:10.125 [DEBUG] [Thread-134230] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:35:10.125 [DEBUG] [Thread-134230] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:35:10.125 [DEBUG] [Thread-134230] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:35:10.125 [DEBUG] [Thread-134230] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:35:10.125 [DEBUG] [Thread-134230] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:35:10.125 [DEBUG] [Thread-134230] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:35:10.125 [DEBUG] [Thread-134230] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:35:10.125 [DEBUG] [Thread-134230] [transport.py] [_log()] client lang: <none>
2025-12-31T20:35:10.126 [DEBUG] [Thread-134230] [transport.py] [_log()] server lang: <none>
2025-12-31T20:35:10.126 [DEBUG] [Thread-134230] [transport.py] [_log()] kex follows: False
2025-12-31T20:35:10.126 [DEBUG] [Thread-134230] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:35:10.126 [DEBUG] [Thread-134230] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:35:10.126 [DEBUG] [Thread-134230] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:35:10.126 [DEBUG] [Thread-134230] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:35:10.126 [DEBUG] [Thread-134230] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:35:10.126 [DEBUG] [Thread-134230] [transport.py] [_log()] Compression: none
2025-12-31T20:35:10.126 [DEBUG] [Thread-134230] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:35:10.142 [DEBUG] [Thread-134230] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:35:10.143 [DEBUG] [Thread-134230] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:35:10.143 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T20:35:10.144 [DEBUG] [Thread-134230] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T20:35:10.145 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:35:10.146 [DEBUG] [Thread-134230] [transport.py] [_log()] userauth is OK
2025-12-31T20:35:10.146 [DEBUG] [Thread-134230] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:35:10.146 [DEBUG] [Thread-134230] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:35:10.146 [DEBUG] [Thread-134230] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T20:35:10.146 [DEBUG] [Thread-134230] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:35:10.173 [INFO] [Thread-134230] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:35:10.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:35:11.417 [DEBUG] [Thread-134230] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:35:11.418 [DEBUG] [Thread-134230] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:35:11.418 [DEBUG] [Thread-134230] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T20:35:11.458 [DEBUG] [Thread-134230] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:35:11.458 [DEBUG] [Thread-134230] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:35:11.462 [DEBUG] [Thread-134230] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:35:11.475 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:35:11.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T20:35:11.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T20:35:11.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T20:35:11.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:35:11.486 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T20:35:11.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:35:11.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:35:11.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T20:35:11.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.773750 -999.00  +18.20  15.72     62  +10.80 1 2 1 1 1    11    0 4.00 -153.29 ----- 13.1 15.7 185.8 21.9 19.4 -18.0 19.2 -18.5 19.1 -17.9 19.4 -18.1
2025-12-31T20:35:11.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T20:35:11.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T20:35:11.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.773750
2025-12-31T20:35:11.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T20:35:11.488 [DEBUG] [Thread-134230] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:35:11.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T20:35:11.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T20:35:11.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T20:35:11.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T20:35:11.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T20:35:05', tmtdew=8.16, humidity=59.13, cloud=0.0, wind=19.34, temperature=18.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T18:34:12.000', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T20:35:11.567 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T20:35:11.579 [DEBUG] [Thread-134233] [transport.py] [_log()] starting thread (client mode): 0xb1765690
2025-12-31T20:35:11.579 [DEBUG] [Thread-134233] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:35:11.594 [DEBUG] [Thread-134233] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T20:35:11.594 [INFO] [Thread-134233] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T20:35:11.602 [DEBUG] [Thread-134233] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:35:11.602 [DEBUG] [Thread-134233] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T20:35:11.602 [DEBUG] [Thread-134233] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:35:11.602 [DEBUG] [Thread-134233] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:35:11.603 [DEBUG] [Thread-134233] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:35:11.603 [DEBUG] [Thread-134233] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:35:11.603 [DEBUG] [Thread-134233] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:35:11.603 [DEBUG] [Thread-134233] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:35:11.603 [DEBUG] [Thread-134233] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:35:11.603 [DEBUG] [Thread-134233] [transport.py] [_log()] client lang: <none>
2025-12-31T20:35:11.603 [DEBUG] [Thread-134233] [transport.py] [_log()] server lang: <none>
2025-12-31T20:35:11.603 [DEBUG] [Thread-134233] [transport.py] [_log()] kex follows: False
2025-12-31T20:35:11.603 [DEBUG] [Thread-134233] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:35:11.603 [DEBUG] [Thread-134233] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:35:11.603 [DEBUG] [Thread-134233] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:35:11.603 [DEBUG] [Thread-134233] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:35:11.603 [DEBUG] [Thread-134233] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:35:11.603 [DEBUG] [Thread-134233] [transport.py] [_log()] Compression: none
2025-12-31T20:35:11.603 [DEBUG] [Thread-134233] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:35:11.661 [DEBUG] [Thread-134233] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:35:11.662 [DEBUG] [Thread-134233] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:35:11.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T20:35:11.663 [DEBUG] [Thread-134233] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T20:35:11.664 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:35:11.717 [DEBUG] [Thread-134233] [transport.py] [_log()] userauth is OK
2025-12-31T20:35:11.717 [DEBUG] [Thread-134233] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:35:11.717 [DEBUG] [Thread-134233] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:35:11.717 [DEBUG] [Thread-134233] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T20:35:11.717 [DEBUG] [Thread-134233] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:35:11.736 [INFO] [Thread-134233] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:35:11.736 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T20:35:11.737 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:35:12.567 [DEBUG] [Thread-134233] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:35:12.567 [DEBUG] [Thread-134233] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:35:12.614 [DEBUG] [Thread-134233] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:35:12.614 [DEBUG] [Thread-134233] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:35:12.623 [DEBUG] [Thread-134233] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:35:12.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:35:12.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T20:35:12.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T20:35:12.646 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:35:12.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:35:12.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:35:12.654 [DEBUG] [Thread-134233] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:35:16.269 [DEBUG] [Thread-134235 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:35:31.313 [DEBUG] [Thread-134236 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:35:32.742 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:35:32.744 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:35:38.328 [DEBUG] [Thread-134237 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:35:42.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T20:35:42.677 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T20:35:42.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T20:35:43.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 20, 35, 37), 8.1, 59.36, 0.0, 23.24, 18.03, 0, 0, 0, 2, 0, 0),)
2025-12-31T20:35:43.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 20:35:37
2025-12-31T20:35:43.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T20:35:43.646 [DEBUG] [Thread-134238] [transport.py] [_log()] starting thread (client mode): 0xb1784f10
2025-12-31T20:35:43.646 [DEBUG] [Thread-134238] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:35:43.667 [DEBUG] [Thread-134238] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T20:35:43.667 [INFO] [Thread-134238] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T20:35:43.671 [DEBUG] [Thread-134238] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:35:43.671 [DEBUG] [Thread-134238] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T20:35:43.671 [DEBUG] [Thread-134238] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:35:43.671 [DEBUG] [Thread-134238] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:35:43.671 [DEBUG] [Thread-134238] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:35:43.671 [DEBUG] [Thread-134238] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:35:43.671 [DEBUG] [Thread-134238] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:35:43.671 [DEBUG] [Thread-134238] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:35:43.672 [DEBUG] [Thread-134238] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:35:43.672 [DEBUG] [Thread-134238] [transport.py] [_log()] client lang: <none>
2025-12-31T20:35:43.672 [DEBUG] [Thread-134238] [transport.py] [_log()] server lang: <none>
2025-12-31T20:35:43.672 [DEBUG] [Thread-134238] [transport.py] [_log()] kex follows: False
2025-12-31T20:35:43.672 [DEBUG] [Thread-134238] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:35:43.672 [DEBUG] [Thread-134238] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:35:43.672 [DEBUG] [Thread-134238] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:35:43.672 [DEBUG] [Thread-134238] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:35:43.673 [DEBUG] [Thread-134238] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:35:43.673 [DEBUG] [Thread-134238] [transport.py] [_log()] Compression: none
2025-12-31T20:35:43.673 [DEBUG] [Thread-134238] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:35:43.688 [DEBUG] [Thread-134238] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:35:43.689 [DEBUG] [Thread-134238] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:35:43.689 [DEBUG] [Thread-134238] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T20:35:43.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T20:35:43.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:35:43.691 [DEBUG] [Thread-134238] [transport.py] [_log()] userauth is OK
2025-12-31T20:35:43.692 [DEBUG] [Thread-134238] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:35:43.692 [DEBUG] [Thread-134238] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:35:43.692 [DEBUG] [Thread-134238] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T20:35:43.692 [DEBUG] [Thread-134238] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:35:43.716 [INFO] [Thread-134238] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:35:43.717 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:35:44.385 [DEBUG] [Thread-134238] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:35:44.385 [DEBUG] [Thread-134238] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:35:44.386 [DEBUG] [Thread-134238] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T20:35:44.426 [DEBUG] [Thread-134238] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:35:44.426 [DEBUG] [Thread-134238] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:35:44.430 [DEBUG] [Thread-134238] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:35:44.441 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:35:44.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T20:35:44.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T20:35:44.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T20:35:44.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:35:44.451 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T20:35:44.451 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:35:44.451 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:35:44.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T20:35:44.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.774444 -999.00  +18.10  17.28     62  +10.90 1 2 1 1 1     9    0 4.25 -140.13 ----- 18.9 17.3 198.2 22.5 19.3 -17.8 19.2 -18.7 19.0 -18.1 19.3 -17.9
2025-12-31T20:35:44.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T20:35:44.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T20:35:44.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.774444
2025-12-31T20:35:44.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T20:35:44.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T20:35:44.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T20:35:44.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T20:35:44.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T20:35:44.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T20:35:37', tmtdew=8.1, humidity=59.36, cloud=0.0, wind=23.24, temperature=18.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T18:35:11.962', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T20:35:44.454 [DEBUG] [Thread-134238] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:35:44.547 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T20:35:44.560 [DEBUG] [Thread-134241] [transport.py] [_log()] starting thread (client mode): 0xb95782b0
2025-12-31T20:35:44.560 [DEBUG] [Thread-134241] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:35:44.574 [DEBUG] [Thread-134241] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T20:35:44.574 [INFO] [Thread-134241] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T20:35:44.582 [DEBUG] [Thread-134241] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:35:44.582 [DEBUG] [Thread-134241] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T20:35:44.582 [DEBUG] [Thread-134241] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:35:44.582 [DEBUG] [Thread-134241] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:35:44.582 [DEBUG] [Thread-134241] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:35:44.582 [DEBUG] [Thread-134241] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:35:44.582 [DEBUG] [Thread-134241] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:35:44.582 [DEBUG] [Thread-134241] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:35:44.582 [DEBUG] [Thread-134241] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:35:44.582 [DEBUG] [Thread-134241] [transport.py] [_log()] client lang: <none>
2025-12-31T20:35:44.582 [DEBUG] [Thread-134241] [transport.py] [_log()] server lang: <none>
2025-12-31T20:35:44.582 [DEBUG] [Thread-134241] [transport.py] [_log()] kex follows: False
2025-12-31T20:35:44.582 [DEBUG] [Thread-134241] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:35:44.582 [DEBUG] [Thread-134241] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:35:44.582 [DEBUG] [Thread-134241] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:35:44.583 [DEBUG] [Thread-134241] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:35:44.583 [DEBUG] [Thread-134241] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:35:44.583 [DEBUG] [Thread-134241] [transport.py] [_log()] Compression: none
2025-12-31T20:35:44.583 [DEBUG] [Thread-134241] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:35:44.641 [DEBUG] [Thread-134241] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:35:44.642 [DEBUG] [Thread-134241] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:35:44.642 [DEBUG] [Thread-134241] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T20:35:44.643 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T20:35:44.643 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:35:44.697 [DEBUG] [Thread-134241] [transport.py] [_log()] userauth is OK
2025-12-31T20:35:44.697 [DEBUG] [Thread-134241] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:35:44.698 [DEBUG] [Thread-134241] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:35:44.698 [DEBUG] [Thread-134241] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T20:35:44.698 [DEBUG] [Thread-134241] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:35:44.722 [INFO] [Thread-134241] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:35:44.722 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T20:35:44.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:35:45.525 [DEBUG] [Thread-134241] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:35:45.525 [DEBUG] [Thread-134241] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:35:45.573 [DEBUG] [Thread-134241] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:35:45.574 [DEBUG] [Thread-134241] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:35:45.583 [DEBUG] [Thread-134241] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:35:45.592 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:35:45.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T20:35:45.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T20:35:45.610 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:35:45.610 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:35:45.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:35:45.619 [DEBUG] [Thread-134241] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:35:46.348 [DEBUG] [Thread-134243 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:36:01.398 [DEBUG] [Thread-134244 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:36:15.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T20:36:15.622 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T20:36:15.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T20:36:16.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 20, 36, 10), 8.06, 59.51, 0.0, 21.58, 18.0, 0, 0, 0, 2, 0, 0),)
2025-12-31T20:36:16.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 20:36:10
2025-12-31T20:36:16.435 [DEBUG] [Thread-134245 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:36:16.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T20:36:16.607 [DEBUG] [Thread-134246] [transport.py] [_log()] starting thread (client mode): 0xb957a290
2025-12-31T20:36:16.607 [DEBUG] [Thread-134246] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:36:16.622 [DEBUG] [Thread-134246] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T20:36:16.622 [INFO] [Thread-134246] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T20:36:16.624 [DEBUG] [Thread-134246] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:36:16.624 [DEBUG] [Thread-134246] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T20:36:16.624 [DEBUG] [Thread-134246] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:36:16.624 [DEBUG] [Thread-134246] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:36:16.624 [DEBUG] [Thread-134246] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:36:16.624 [DEBUG] [Thread-134246] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:36:16.624 [DEBUG] [Thread-134246] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:36:16.624 [DEBUG] [Thread-134246] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:36:16.624 [DEBUG] [Thread-134246] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:36:16.624 [DEBUG] [Thread-134246] [transport.py] [_log()] client lang: <none>
2025-12-31T20:36:16.624 [DEBUG] [Thread-134246] [transport.py] [_log()] server lang: <none>
2025-12-31T20:36:16.624 [DEBUG] [Thread-134246] [transport.py] [_log()] kex follows: False
2025-12-31T20:36:16.624 [DEBUG] [Thread-134246] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:36:16.624 [DEBUG] [Thread-134246] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:36:16.624 [DEBUG] [Thread-134246] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:36:16.624 [DEBUG] [Thread-134246] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:36:16.624 [DEBUG] [Thread-134246] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:36:16.624 [DEBUG] [Thread-134246] [transport.py] [_log()] Compression: none
2025-12-31T20:36:16.624 [DEBUG] [Thread-134246] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:36:16.638 [DEBUG] [Thread-134246] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:36:16.639 [DEBUG] [Thread-134246] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:36:16.639 [DEBUG] [Thread-134246] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T20:36:16.639 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T20:36:16.640 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:36:16.640 [DEBUG] [Thread-134246] [transport.py] [_log()] userauth is OK
2025-12-31T20:36:16.640 [DEBUG] [Thread-134246] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:36:16.641 [DEBUG] [Thread-134246] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:36:16.641 [DEBUG] [Thread-134246] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T20:36:16.641 [DEBUG] [Thread-134246] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:36:16.658 [INFO] [Thread-134246] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:36:16.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:36:17.313 [DEBUG] [Thread-134246] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:36:17.313 [DEBUG] [Thread-134246] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:36:17.313 [DEBUG] [Thread-134246] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T20:36:17.354 [DEBUG] [Thread-134246] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:36:17.354 [DEBUG] [Thread-134246] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:36:17.357 [DEBUG] [Thread-134246] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:36:17.368 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:36:17.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T20:36:17.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T20:36:17.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T20:36:17.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:36:17.377 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T20:36:17.377 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:36:17.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:36:17.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T20:36:17.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.774791 -999.00  +18.10  10.14     62  +10.90 1 2 1 1 1     9    0 4.22 -138.84 ----- 15.6 10.1 201.6 23.3 19.3 -17.9 19.2 -18.3 19.0 -18.1 19.3 -17.9
2025-12-31T20:36:17.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T20:36:17.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T20:36:17.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.774791
2025-12-31T20:36:17.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T20:36:17.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T20:36:17.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T20:36:17.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T20:36:17.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T20:36:17.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T20:36:10', tmtdew=8.06, humidity=59.51, cloud=0.0, wind=21.58, temperature=18.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T04:51:23', seeing=1.5, atlas_timestamp='2025-12-31T18:35:41.942', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T20:36:17.379 [DEBUG] [Thread-134246] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:36:17.464 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T20:36:31.463 [DEBUG] [Thread-134249 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:36:38.403 [DEBUG] [Thread-134250 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:36:38.594 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:36:38.595 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:36:46.501 [DEBUG] [Thread-134251 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:37:01.541 [DEBUG] [Thread-134252 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:37:16.579 [DEBUG] [Thread-134253 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:37:31.617 [DEBUG] [Thread-134254 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:37:38.482 [DEBUG] [Thread-134255 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:37:46.652 [DEBUG] [Thread-134256 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:37:46.724 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:37:46.725 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:38:01.677 [DEBUG] [Thread-134257 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:38:16.702 [DEBUG] [Thread-134258 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:38:31.725 [DEBUG] [Thread-134259 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:38:31.893 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-12-31T20:38:38.559 [DEBUG] [Thread-134260 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:38:46.751 [DEBUG] [Thread-134261 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:38:52.565 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:38:52.566 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:39:01.775 [DEBUG] [Thread-134262 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:39:01.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T20:39:01.923 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T20:39:01.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T20:39:02.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 20, 38, 50), 7.9, 59.76, 0.0, 18.67, 17.85, 0, 0, 0, 2, 0, 0),)
2025-12-31T20:39:02.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 20:38:50
2025-12-31T20:39:02.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T20:39:02.990 [DEBUG] [Thread-134263] [transport.py] [_log()] starting thread (client mode): 0xb1786350
2025-12-31T20:39:02.990 [DEBUG] [Thread-134263] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:39:03.009 [DEBUG] [Thread-134263] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T20:39:03.009 [INFO] [Thread-134263] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T20:39:03.014 [DEBUG] [Thread-134263] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:39:03.014 [DEBUG] [Thread-134263] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T20:39:03.014 [DEBUG] [Thread-134263] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:39:03.014 [DEBUG] [Thread-134263] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:39:03.014 [DEBUG] [Thread-134263] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:39:03.014 [DEBUG] [Thread-134263] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:39:03.014 [DEBUG] [Thread-134263] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:39:03.014 [DEBUG] [Thread-134263] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:39:03.014 [DEBUG] [Thread-134263] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:39:03.014 [DEBUG] [Thread-134263] [transport.py] [_log()] client lang: <none>
2025-12-31T20:39:03.014 [DEBUG] [Thread-134263] [transport.py] [_log()] server lang: <none>
2025-12-31T20:39:03.014 [DEBUG] [Thread-134263] [transport.py] [_log()] kex follows: False
2025-12-31T20:39:03.014 [DEBUG] [Thread-134263] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:39:03.014 [DEBUG] [Thread-134263] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:39:03.015 [DEBUG] [Thread-134263] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:39:03.015 [DEBUG] [Thread-134263] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:39:03.015 [DEBUG] [Thread-134263] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:39:03.015 [DEBUG] [Thread-134263] [transport.py] [_log()] Compression: none
2025-12-31T20:39:03.015 [DEBUG] [Thread-134263] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:39:03.036 [DEBUG] [Thread-134263] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:39:03.038 [DEBUG] [Thread-134263] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:39:03.038 [DEBUG] [Thread-134263] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T20:39:03.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T20:39:03.039 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:39:03.039 [DEBUG] [Thread-134263] [transport.py] [_log()] userauth is OK
2025-12-31T20:39:03.039 [DEBUG] [Thread-134263] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:39:03.039 [DEBUG] [Thread-134263] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:39:03.039 [DEBUG] [Thread-134263] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T20:39:03.039 [DEBUG] [Thread-134263] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:39:03.050 [INFO] [Thread-134263] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:39:03.051 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:39:03.707 [DEBUG] [Thread-134263] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:39:03.707 [DEBUG] [Thread-134263] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:39:03.708 [DEBUG] [Thread-134263] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T20:39:03.748 [DEBUG] [Thread-134263] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:39:03.748 [DEBUG] [Thread-134263] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:39:03.750 [DEBUG] [Thread-134263] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:39:03.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:39:03.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T20:39:03.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T20:39:03.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T20:39:03.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:39:03.767 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T20:39:03.768 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:39:03.768 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:39:03.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T20:39:03.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.776527 -999.00  +18.10  11.71     62  +10.90 1 2 1 1 1     5    0 4.28 -125.68 ----- 11.0 11.7 198.2 18.5 19.2 -18.0 19.1 -19.1 18.9 -18.2 19.2 -18.3
2025-12-31T20:39:03.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T20:39:03.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T20:39:03.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.776527
2025-12-31T20:39:03.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T20:39:03.770 [DEBUG] [Thread-134263] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:39:03.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T20:39:03.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T20:39:03.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T20:39:03.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T20:39:03.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T20:38:50', tmtdew=7.9, humidity=59.76, cloud=0.0, wind=18.67, temperature=17.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T20:38:50', seeing=1.73, atlas_timestamp='2025-12-31T18:38:11.933', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T20:39:03.845 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T20:39:03.860 [DEBUG] [Thread-134266] [transport.py] [_log()] starting thread (client mode): 0xb6bbc2b0
2025-12-31T20:39:03.860 [DEBUG] [Thread-134266] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:39:03.875 [DEBUG] [Thread-134266] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T20:39:03.875 [INFO] [Thread-134266] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T20:39:03.884 [DEBUG] [Thread-134266] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:39:03.884 [DEBUG] [Thread-134266] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T20:39:03.884 [DEBUG] [Thread-134266] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:39:03.884 [DEBUG] [Thread-134266] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:39:03.884 [DEBUG] [Thread-134266] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:39:03.884 [DEBUG] [Thread-134266] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:39:03.884 [DEBUG] [Thread-134266] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:39:03.884 [DEBUG] [Thread-134266] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:39:03.884 [DEBUG] [Thread-134266] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:39:03.884 [DEBUG] [Thread-134266] [transport.py] [_log()] client lang: <none>
2025-12-31T20:39:03.884 [DEBUG] [Thread-134266] [transport.py] [_log()] server lang: <none>
2025-12-31T20:39:03.884 [DEBUG] [Thread-134266] [transport.py] [_log()] kex follows: False
2025-12-31T20:39:03.884 [DEBUG] [Thread-134266] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:39:03.884 [DEBUG] [Thread-134266] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:39:03.884 [DEBUG] [Thread-134266] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:39:03.884 [DEBUG] [Thread-134266] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:39:03.884 [DEBUG] [Thread-134266] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:39:03.885 [DEBUG] [Thread-134266] [transport.py] [_log()] Compression: none
2025-12-31T20:39:03.885 [DEBUG] [Thread-134266] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:39:03.942 [DEBUG] [Thread-134266] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:39:03.942 [DEBUG] [Thread-134266] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:39:03.942 [DEBUG] [Thread-134266] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T20:39:03.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T20:39:03.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:39:03.998 [DEBUG] [Thread-134266] [transport.py] [_log()] userauth is OK
2025-12-31T20:39:03.998 [DEBUG] [Thread-134266] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:39:03.999 [DEBUG] [Thread-134266] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:39:03.999 [DEBUG] [Thread-134266] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T20:39:03.999 [DEBUG] [Thread-134266] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:39:04.012 [INFO] [Thread-134266] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:39: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-12-31T20:39:04.012 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:39:04.839 [DEBUG] [Thread-134266] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:39:04.839 [DEBUG] [Thread-134266] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:39:04.887 [DEBUG] [Thread-134266] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:39:04.887 [DEBUG] [Thread-134266] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:39:04.895 [DEBUG] [Thread-134266] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:39:04.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:39:04.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T20:39:04.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T20:39:04.919 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:39:04.919 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:39:04.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:39:04.927 [DEBUG] [Thread-134266] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:39:16.801 [DEBUG] [Thread-134268 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:39:31.839 [DEBUG] [Thread-134269 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:39:34.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T20:39:34.949 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T20:39:34.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T20:39:35.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 20, 39, 22), 7.9, 59.73, 0.0, 17.89, 17.84, 0, 0, 0, 2, 0, 0),)
2025-12-31T20:39:35.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 20:39:22
2025-12-31T20:39:35.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T20:39:36.116 [DEBUG] [Thread-134270] [transport.py] [_log()] starting thread (client mode): 0xb17857b0
2025-12-31T20:39:36.116 [DEBUG] [Thread-134270] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:39:36.135 [DEBUG] [Thread-134270] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T20:39:36.135 [INFO] [Thread-134270] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T20:39:36.138 [DEBUG] [Thread-134270] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:39:36.138 [DEBUG] [Thread-134270] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T20:39:36.138 [DEBUG] [Thread-134270] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:39:36.138 [DEBUG] [Thread-134270] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:39:36.138 [DEBUG] [Thread-134270] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:39:36.138 [DEBUG] [Thread-134270] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:39:36.138 [DEBUG] [Thread-134270] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:39:36.138 [DEBUG] [Thread-134270] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:39:36.139 [DEBUG] [Thread-134270] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:39:36.139 [DEBUG] [Thread-134270] [transport.py] [_log()] client lang: <none>
2025-12-31T20:39:36.139 [DEBUG] [Thread-134270] [transport.py] [_log()] server lang: <none>
2025-12-31T20:39:36.139 [DEBUG] [Thread-134270] [transport.py] [_log()] kex follows: False
2025-12-31T20:39:36.139 [DEBUG] [Thread-134270] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:39:36.139 [DEBUG] [Thread-134270] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:39:36.139 [DEBUG] [Thread-134270] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:39:36.139 [DEBUG] [Thread-134270] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:39:36.139 [DEBUG] [Thread-134270] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:39:36.139 [DEBUG] [Thread-134270] [transport.py] [_log()] Compression: none
2025-12-31T20:39:36.139 [DEBUG] [Thread-134270] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:39:36.155 [DEBUG] [Thread-134270] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:39:36.155 [DEBUG] [Thread-134270] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:39:36.155 [DEBUG] [Thread-134270] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T20:39:36.155 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T20:39:36.155 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:39:36.156 [DEBUG] [Thread-134270] [transport.py] [_log()] userauth is OK
2025-12-31T20:39:36.156 [DEBUG] [Thread-134270] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:39:36.156 [DEBUG] [Thread-134270] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:39:36.156 [DEBUG] [Thread-134270] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T20:39:36.156 [DEBUG] [Thread-134270] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:39:36.165 [INFO] [Thread-134270] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:39:36.165 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:39:36.908 [DEBUG] [Thread-134270] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:39:36.908 [DEBUG] [Thread-134270] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:39:36.908 [DEBUG] [Thread-134270] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T20:39:36.949 [DEBUG] [Thread-134270] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:39:36.950 [DEBUG] [Thread-134270] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:39:36.952 [DEBUG] [Thread-134270] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:39:36.964 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:39:36.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T20:39:36.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T20:39:36.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T20:39:36.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:39:36.975 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T20:39:36.975 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:39:36.975 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:39:36.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T20:39:36.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.776874 -999.00  +18.10   8.94     62  +10.90 1 2 1 1 1     5    0 4.13 -130.54 ----- 10.1 8.9 232.3 19.3 19.2 -18.3 19.1 -18.8 18.9 -18.3 19.2 -18.5
2025-12-31T20:39:36.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T20:39:36.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T20:39:36.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.776874
2025-12-31T20:39:36.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T20:39:36.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T20:39:36.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T20:39:36.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T20:39:36.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T20:39:36.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T20:39:22', tmtdew=7.9, humidity=59.73, cloud=0.0, wind=17.89, temperature=17.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T20:39:22', seeing=1.59, atlas_timestamp='2025-12-31T18:38:41.914', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T20:39:36.976 [DEBUG] [Thread-134270] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:39:37.049 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T20:39:37.061 [DEBUG] [Thread-134273] [transport.py] [_log()] starting thread (client mode): 0xb1784220
2025-12-31T20:39:37.061 [DEBUG] [Thread-134273] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:39:37.076 [DEBUG] [Thread-134273] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T20:39:37.076 [INFO] [Thread-134273] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T20:39:37.083 [DEBUG] [Thread-134273] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:39:37.083 [DEBUG] [Thread-134273] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T20:39:37.083 [DEBUG] [Thread-134273] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:39:37.083 [DEBUG] [Thread-134273] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:39:37.083 [DEBUG] [Thread-134273] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:39:37.083 [DEBUG] [Thread-134273] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:39:37.083 [DEBUG] [Thread-134273] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:39:37.083 [DEBUG] [Thread-134273] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:39:37.083 [DEBUG] [Thread-134273] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:39:37.083 [DEBUG] [Thread-134273] [transport.py] [_log()] client lang: <none>
2025-12-31T20:39:37.083 [DEBUG] [Thread-134273] [transport.py] [_log()] server lang: <none>
2025-12-31T20:39:37.083 [DEBUG] [Thread-134273] [transport.py] [_log()] kex follows: False
2025-12-31T20:39:37.083 [DEBUG] [Thread-134273] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:39:37.084 [DEBUG] [Thread-134273] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:39:37.084 [DEBUG] [Thread-134273] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:39:37.084 [DEBUG] [Thread-134273] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:39:37.084 [DEBUG] [Thread-134273] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:39:37.084 [DEBUG] [Thread-134273] [transport.py] [_log()] Compression: none
2025-12-31T20:39:37.084 [DEBUG] [Thread-134273] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:39:37.146 [DEBUG] [Thread-134273] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:39:37.146 [DEBUG] [Thread-134273] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:39:37.146 [DEBUG] [Thread-134273] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T20:39:37.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T20:39:37.147 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:39:37.203 [DEBUG] [Thread-134273] [transport.py] [_log()] userauth is OK
2025-12-31T20:39:37.203 [DEBUG] [Thread-134273] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:39:37.203 [DEBUG] [Thread-134273] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:39:37.203 [DEBUG] [Thread-134273] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T20:39:37.203 [DEBUG] [Thread-134273] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:39:37.217 [INFO] [Thread-134273] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:39:37.217 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T20:39:37.217 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:39:38.040 [DEBUG] [Thread-134273] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:39:38.040 [DEBUG] [Thread-134273] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:39:38.087 [DEBUG] [Thread-134273] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:39:38.087 [DEBUG] [Thread-134273] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:39:38.095 [DEBUG] [Thread-134273] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:39:38.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:39:38.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T20:39:38.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T20:39:38.119 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:39:38.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:39:38.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:39:38.127 [DEBUG] [Thread-134273] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:39:38.730 [DEBUG] [Thread-134275 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:39:46.862 [DEBUG] [Thread-134276 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:39:58.691 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:39:58.692 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:40:01.895 [DEBUG] [Thread-134277 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:40:08.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T20:40:08.127 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T20:40:08.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T20:40:09.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 20, 39, 54), 7.85, 59.75, 0.0, 19.74, 17.82, 0, 0, 0, 2, 0, 0),)
2025-12-31T20:40:09.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 20:39:54
2025-12-31T20:40:09.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T20:40:09.353 [DEBUG] [Thread-134278] [transport.py] [_log()] starting thread (client mode): 0xb955bac0
2025-12-31T20:40:09.353 [DEBUG] [Thread-134278] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:40:09.375 [DEBUG] [Thread-134278] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T20:40:09.375 [INFO] [Thread-134278] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T20:40:09.378 [DEBUG] [Thread-134278] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:40:09.378 [DEBUG] [Thread-134278] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T20:40:09.378 [DEBUG] [Thread-134278] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:40:09.378 [DEBUG] [Thread-134278] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:40:09.378 [DEBUG] [Thread-134278] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:40:09.378 [DEBUG] [Thread-134278] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:40:09.378 [DEBUG] [Thread-134278] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:40:09.378 [DEBUG] [Thread-134278] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:40:09.378 [DEBUG] [Thread-134278] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:40:09.378 [DEBUG] [Thread-134278] [transport.py] [_log()] client lang: <none>
2025-12-31T20:40:09.378 [DEBUG] [Thread-134278] [transport.py] [_log()] server lang: <none>
2025-12-31T20:40:09.378 [DEBUG] [Thread-134278] [transport.py] [_log()] kex follows: False
2025-12-31T20:40:09.378 [DEBUG] [Thread-134278] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:40:09.378 [DEBUG] [Thread-134278] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:40:09.378 [DEBUG] [Thread-134278] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:40:09.378 [DEBUG] [Thread-134278] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:40:09.378 [DEBUG] [Thread-134278] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:40:09.378 [DEBUG] [Thread-134278] [transport.py] [_log()] Compression: none
2025-12-31T20:40:09.378 [DEBUG] [Thread-134278] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:40:09.393 [DEBUG] [Thread-134278] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:40:09.393 [DEBUG] [Thread-134278] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:40:09.393 [DEBUG] [Thread-134278] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T20:40:09.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T20:40:09.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:40:09.396 [DEBUG] [Thread-134278] [transport.py] [_log()] userauth is OK
2025-12-31T20:40:09.396 [DEBUG] [Thread-134278] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:40:09.396 [DEBUG] [Thread-134278] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:40:09.396 [DEBUG] [Thread-134278] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T20:40:09.396 [DEBUG] [Thread-134278] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:40:09.412 [INFO] [Thread-134278] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:40:09.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:40:11.931 [DEBUG] [Thread-134278] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:40:11.931 [DEBUG] [Thread-134278] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:40:11.931 [DEBUG] [Thread-134278] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T20:40:11.972 [DEBUG] [Thread-134278] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:40:11.972 [DEBUG] [Thread-134278] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:40:11.974 [DEBUG] [Thread-134278] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:40:11.985 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:40:11.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T20:40:11.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T20:40:11.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T20:40:11.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:40:11.991 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T20:40:11.991 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:40:11.991 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:40:11.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T20:40:11.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.777222 -999.00  +18.10  11.20     62  +10.90 1 2 1 1 1     4    0 4.06 -133.88 ----- 17.6 11.2 201.1 17.1 19.2 -18.5 19.1 -19.0 18.9 -18.4 19.2 -18.5
2025-12-31T20:40:11.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T20:40:11.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T20:40:11.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.777222
2025-12-31T20:40:11.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T20:40:11.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T20:40:11.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T20:40:11.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T20:40:11.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T20:40:11.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T20:39:54', tmtdew=7.85, humidity=59.75, cloud=0.0, wind=19.74, temperature=17.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T20:39:54', seeing=1.59, atlas_timestamp='2025-12-31T18:39:11.981', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T20:40:11.993 [DEBUG] [Thread-134278] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:40:12.064 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T20:40:12.076 [DEBUG] [Thread-134281] [transport.py] [_log()] starting thread (client mode): 0xb1758850
2025-12-31T20:40:12.076 [DEBUG] [Thread-134281] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:40:12.091 [DEBUG] [Thread-134281] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T20:40:12.091 [INFO] [Thread-134281] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T20:40:12.098 [DEBUG] [Thread-134281] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:40:12.098 [DEBUG] [Thread-134281] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T20:40:12.098 [DEBUG] [Thread-134281] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:40:12.098 [DEBUG] [Thread-134281] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:40:12.098 [DEBUG] [Thread-134281] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:40:12.099 [DEBUG] [Thread-134281] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:40:12.099 [DEBUG] [Thread-134281] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:40:12.099 [DEBUG] [Thread-134281] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:40:12.099 [DEBUG] [Thread-134281] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:40:12.099 [DEBUG] [Thread-134281] [transport.py] [_log()] client lang: <none>
2025-12-31T20:40:12.099 [DEBUG] [Thread-134281] [transport.py] [_log()] server lang: <none>
2025-12-31T20:40:12.099 [DEBUG] [Thread-134281] [transport.py] [_log()] kex follows: False
2025-12-31T20:40:12.099 [DEBUG] [Thread-134281] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:40:12.099 [DEBUG] [Thread-134281] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:40:12.099 [DEBUG] [Thread-134281] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:40:12.099 [DEBUG] [Thread-134281] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:40:12.099 [DEBUG] [Thread-134281] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:40:12.099 [DEBUG] [Thread-134281] [transport.py] [_log()] Compression: none
2025-12-31T20:40:12.099 [DEBUG] [Thread-134281] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:40:12.154 [DEBUG] [Thread-134281] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:40:12.154 [DEBUG] [Thread-134281] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:40:12.154 [DEBUG] [Thread-134281] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T20:40:12.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T20:40:12.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:40:12.211 [DEBUG] [Thread-134281] [transport.py] [_log()] userauth is OK
2025-12-31T20:40:12.211 [DEBUG] [Thread-134281] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:40:12.211 [DEBUG] [Thread-134281] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:40:12.211 [DEBUG] [Thread-134281] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T20:40:12.211 [DEBUG] [Thread-134281] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:40:12.225 [INFO] [Thread-134281] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:40:12.225 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T20:40:12.225 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:40:13.089 [DEBUG] [Thread-134281] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:40:13.089 [DEBUG] [Thread-134281] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:40:13.136 [DEBUG] [Thread-134281] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:40:13.136 [DEBUG] [Thread-134281] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:40:13.144 [DEBUG] [Thread-134281] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:40:13.152 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:40:13.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T20:40:13.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T20:40:13.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:40:13.169 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:40:13.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:40:13.176 [DEBUG] [Thread-134281] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:40:16.920 [DEBUG] [Thread-134283 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:40:31.955 [DEBUG] [Thread-134284 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:40:38.879 [DEBUG] [Thread-134285 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:40:43.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T20:40:43.199 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T20:40:43.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-12-31T20:40:44.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 20, 40, 27), 7.85, 59.76, 0.0, 16.71, 17.79, 0, 0, 0, 2, 0, 0),)
2025-12-31T20:40:44.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 20:40:27
2025-12-31T20:40:44.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T20:40:44.482 [DEBUG] [Thread-134286] [transport.py] [_log()] starting thread (client mode): 0xb9578be0
2025-12-31T20:40:44.482 [DEBUG] [Thread-134286] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:40:44.502 [DEBUG] [Thread-134286] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T20:40:44.502 [INFO] [Thread-134286] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T20:40:44.505 [DEBUG] [Thread-134286] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:40:44.505 [DEBUG] [Thread-134286] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T20:40:44.505 [DEBUG] [Thread-134286] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:40:44.505 [DEBUG] [Thread-134286] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:40:44.505 [DEBUG] [Thread-134286] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:40:44.505 [DEBUG] [Thread-134286] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:40:44.505 [DEBUG] [Thread-134286] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:40:44.505 [DEBUG] [Thread-134286] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:40:44.505 [DEBUG] [Thread-134286] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:40:44.506 [DEBUG] [Thread-134286] [transport.py] [_log()] client lang: <none>
2025-12-31T20:40:44.506 [DEBUG] [Thread-134286] [transport.py] [_log()] server lang: <none>
2025-12-31T20:40:44.506 [DEBUG] [Thread-134286] [transport.py] [_log()] kex follows: False
2025-12-31T20:40:44.506 [DEBUG] [Thread-134286] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:40:44.506 [DEBUG] [Thread-134286] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:40:44.506 [DEBUG] [Thread-134286] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:40:44.506 [DEBUG] [Thread-134286] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:40:44.506 [DEBUG] [Thread-134286] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:40:44.506 [DEBUG] [Thread-134286] [transport.py] [_log()] Compression: none
2025-12-31T20:40:44.506 [DEBUG] [Thread-134286] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:40:44.521 [DEBUG] [Thread-134286] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:40:44.521 [DEBUG] [Thread-134286] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:40:44.521 [DEBUG] [Thread-134286] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T20:40:44.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T20:40:44.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:40:44.522 [DEBUG] [Thread-134286] [transport.py] [_log()] userauth is OK
2025-12-31T20:40:44.522 [DEBUG] [Thread-134286] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:40:44.522 [DEBUG] [Thread-134286] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:40:44.522 [DEBUG] [Thread-134286] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T20:40:44.522 [DEBUG] [Thread-134286] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:40:44.532 [INFO] [Thread-134286] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:40:44.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:40:45.146 [DEBUG] [Thread-134286] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:40:45.146 [DEBUG] [Thread-134286] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:40:45.146 [DEBUG] [Thread-134286] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T20:40:45.187 [DEBUG] [Thread-134286] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:40:45.187 [DEBUG] [Thread-134286] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:40:45.189 [DEBUG] [Thread-134286] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:40:45.201 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:40:45.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T20:40:45.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T20:40:45.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T20:40:45.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:40:45.207 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T20:40:45.207 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:40:45.207 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:40:45.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T20:40:45.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.777916 -999.00  +18.00   9.12     62  +10.80 1 2 1 1 1     4    0 3.22 -161.43 ----- 8.9 9.1 267.2 22.5 19.1 -18.8 19.1 -19.0 18.8 -18.6 19.1 -18.6
2025-12-31T20:40:45.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T20:40:45.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T20:40:45.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.777916
2025-12-31T20:40:45.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T20:40:45.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T20:40:45.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T20:40:45.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T20:40:45.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T20:40:45.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T20:40:27', tmtdew=7.85, humidity=59.76, cloud=0.0, wind=16.71, temperature=17.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T20:40:27', seeing=1.82, atlas_timestamp='2025-12-31T18:40:11.942', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T20:40:45.208 [DEBUG] [Thread-134286] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:40:45.280 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T20:40:45.292 [DEBUG] [Thread-134289] [transport.py] [_log()] starting thread (client mode): 0xb957be80
2025-12-31T20:40:45.292 [DEBUG] [Thread-134289] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:40:45.307 [DEBUG] [Thread-134289] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T20:40:45.307 [INFO] [Thread-134289] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T20:40:45.314 [DEBUG] [Thread-134289] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:40:45.314 [DEBUG] [Thread-134289] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T20:40:45.314 [DEBUG] [Thread-134289] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:40:45.314 [DEBUG] [Thread-134289] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:40:45.314 [DEBUG] [Thread-134289] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:40:45.314 [DEBUG] [Thread-134289] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:40:45.314 [DEBUG] [Thread-134289] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:40:45.314 [DEBUG] [Thread-134289] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:40:45.315 [DEBUG] [Thread-134289] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:40:45.315 [DEBUG] [Thread-134289] [transport.py] [_log()] client lang: <none>
2025-12-31T20:40:45.315 [DEBUG] [Thread-134289] [transport.py] [_log()] server lang: <none>
2025-12-31T20:40:45.315 [DEBUG] [Thread-134289] [transport.py] [_log()] kex follows: False
2025-12-31T20:40:45.315 [DEBUG] [Thread-134289] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:40:45.315 [DEBUG] [Thread-134289] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:40:45.315 [DEBUG] [Thread-134289] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:40:45.315 [DEBUG] [Thread-134289] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:40:45.315 [DEBUG] [Thread-134289] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:40:45.315 [DEBUG] [Thread-134289] [transport.py] [_log()] Compression: none
2025-12-31T20:40:45.315 [DEBUG] [Thread-134289] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:40:45.370 [DEBUG] [Thread-134289] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:40:45.370 [DEBUG] [Thread-134289] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:40:45.370 [DEBUG] [Thread-134289] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T20:40:45.370 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T20:40:45.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:40:45.427 [DEBUG] [Thread-134289] [transport.py] [_log()] userauth is OK
2025-12-31T20:40:45.427 [DEBUG] [Thread-134289] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:40:45.427 [DEBUG] [Thread-134289] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:40:45.427 [DEBUG] [Thread-134289] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T20:40:45.427 [DEBUG] [Thread-134289] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:40:45.442 [INFO] [Thread-134289] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:40:45.442 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T20:40:45.442 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:40:46.283 [DEBUG] [Thread-134289] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:40:46.283 [DEBUG] [Thread-134289] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:40:46.331 [DEBUG] [Thread-134289] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:40:46.331 [DEBUG] [Thread-134289] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:40:46.340 [DEBUG] [Thread-134289] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:40:46.348 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:40:46.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T20:40:46.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T20:40:46.364 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:40:46.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:40:46.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:40:46.372 [DEBUG] [Thread-134289] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:40:46.981 [DEBUG] [Thread-134291 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:41:02.051 [DEBUG] [Thread-134292 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:41:03.310 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:41:03.311 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:41:16.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T20:41:16.367 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T20:41:16.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T20:41:17.075 [DEBUG] [Thread-134293 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:41:17.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 20, 40, 59), 7.86, 59.7, 0.0, 19.52, 17.77, 0, 0, 0, 2, 0, 0),)
2025-12-31T20:41:17.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 20:40:59
2025-12-31T20:41:17.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T20:41:17.542 [DEBUG] [Thread-134294] [transport.py] [_log()] starting thread (client mode): 0xb95790c0
2025-12-31T20:41:17.542 [DEBUG] [Thread-134294] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:41:17.562 [DEBUG] [Thread-134294] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T20:41:17.562 [INFO] [Thread-134294] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T20:41:17.565 [DEBUG] [Thread-134294] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:41:17.565 [DEBUG] [Thread-134294] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T20:41:17.565 [DEBUG] [Thread-134294] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:41:17.565 [DEBUG] [Thread-134294] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:41:17.565 [DEBUG] [Thread-134294] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:41:17.566 [DEBUG] [Thread-134294] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:41:17.566 [DEBUG] [Thread-134294] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:41:17.566 [DEBUG] [Thread-134294] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:41:17.566 [DEBUG] [Thread-134294] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:41:17.566 [DEBUG] [Thread-134294] [transport.py] [_log()] client lang: <none>
2025-12-31T20:41:17.566 [DEBUG] [Thread-134294] [transport.py] [_log()] server lang: <none>
2025-12-31T20:41:17.566 [DEBUG] [Thread-134294] [transport.py] [_log()] kex follows: False
2025-12-31T20:41:17.566 [DEBUG] [Thread-134294] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:41:17.566 [DEBUG] [Thread-134294] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:41:17.566 [DEBUG] [Thread-134294] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:41:17.566 [DEBUG] [Thread-134294] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:41:17.566 [DEBUG] [Thread-134294] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:41:17.566 [DEBUG] [Thread-134294] [transport.py] [_log()] Compression: none
2025-12-31T20:41:17.566 [DEBUG] [Thread-134294] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:41:17.581 [DEBUG] [Thread-134294] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:41:17.582 [DEBUG] [Thread-134294] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:41:17.582 [DEBUG] [Thread-134294] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T20:41:17.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T20:41:17.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:41:17.583 [DEBUG] [Thread-134294] [transport.py] [_log()] userauth is OK
2025-12-31T20:41:17.583 [DEBUG] [Thread-134294] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:41:17.583 [DEBUG] [Thread-134294] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:41:17.583 [DEBUG] [Thread-134294] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T20:41:17.583 [DEBUG] [Thread-134294] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:41:17.593 [INFO] [Thread-134294] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:41:17.593 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:41:18.411 [DEBUG] [Thread-134294] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:41:18.412 [DEBUG] [Thread-134294] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:41:18.412 [DEBUG] [Thread-134294] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T20:41:18.452 [DEBUG] [Thread-134294] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:41:18.453 [DEBUG] [Thread-134294] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:41:18.455 [DEBUG] [Thread-134294] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:41:18.465 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:41:18.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T20:41:18.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T20:41:18.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T20:41:18.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:41:18.471 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T20:41:18.471 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:41:18.471 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:41:18.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T20:41:18.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.778263 -999.00  +18.00   9.24     62  +10.90 1 2 1 1 1     3    0 3.20 -153.49 ----- 14.3 9.2 209.2 24.5 19.1 -18.8 19.0 -19.3 18.8 -18.5 19.1 -18.5
2025-12-31T20:41:18.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T20:41:18.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T20:41:18.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.778263
2025-12-31T20:41:18.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T20:41:18.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T20:41:18.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T20:41:18.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T20:41:18.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T20:41:18.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T20:40:59', tmtdew=7.86, humidity=59.7, cloud=0.0, wind=19.52, temperature=17.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T20:41:00', seeing=1.75, atlas_timestamp='2025-12-31T18:40:41.923', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T20:41:18.473 [DEBUG] [Thread-134294] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:41:18.546 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T20:41:18.559 [DEBUG] [Thread-134297] [transport.py] [_log()] starting thread (client mode): 0xb957a050
2025-12-31T20:41:18.559 [DEBUG] [Thread-134297] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:41:18.574 [DEBUG] [Thread-134297] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T20:41:18.574 [INFO] [Thread-134297] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T20:41:18.581 [DEBUG] [Thread-134297] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:41:18.581 [DEBUG] [Thread-134297] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T20:41:18.581 [DEBUG] [Thread-134297] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:41:18.581 [DEBUG] [Thread-134297] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:41:18.582 [DEBUG] [Thread-134297] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:41:18.582 [DEBUG] [Thread-134297] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:41:18.582 [DEBUG] [Thread-134297] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:41:18.582 [DEBUG] [Thread-134297] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:41:18.582 [DEBUG] [Thread-134297] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:41:18.582 [DEBUG] [Thread-134297] [transport.py] [_log()] client lang: <none>
2025-12-31T20:41:18.582 [DEBUG] [Thread-134297] [transport.py] [_log()] server lang: <none>
2025-12-31T20:41:18.582 [DEBUG] [Thread-134297] [transport.py] [_log()] kex follows: False
2025-12-31T20:41:18.582 [DEBUG] [Thread-134297] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:41:18.582 [DEBUG] [Thread-134297] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:41:18.582 [DEBUG] [Thread-134297] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:41:18.582 [DEBUG] [Thread-134297] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:41:18.582 [DEBUG] [Thread-134297] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:41:18.582 [DEBUG] [Thread-134297] [transport.py] [_log()] Compression: none
2025-12-31T20:41:18.582 [DEBUG] [Thread-134297] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:41:18.639 [DEBUG] [Thread-134297] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:41:18.639 [DEBUG] [Thread-134297] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:41:18.639 [DEBUG] [Thread-134297] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T20:41:18.639 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T20:41:18.639 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:41:18.696 [DEBUG] [Thread-134297] [transport.py] [_log()] userauth is OK
2025-12-31T20:41:18.696 [DEBUG] [Thread-134297] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:41:18.696 [DEBUG] [Thread-134297] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:41:18.696 [DEBUG] [Thread-134297] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T20:41:18.696 [DEBUG] [Thread-134297] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:41:18.710 [INFO] [Thread-134297] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:41:18.710 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T20:41:18.710 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:41:19.587 [DEBUG] [Thread-134297] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:41:19.587 [DEBUG] [Thread-134297] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:41:19.635 [DEBUG] [Thread-134297] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:41:19.635 [DEBUG] [Thread-134297] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:41:19.643 [DEBUG] [Thread-134297] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:41:19.651 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:41:19.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T20:41:19.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T20:41:19.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:41:19.666 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:41:19.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:41:19.674 [DEBUG] [Thread-134297] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:41:32.102 [DEBUG] [Thread-134299 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:41:39.136 [DEBUG] [Thread-134300 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:41:47.138 [DEBUG] [Thread-134301 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:41:49.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T20:41:49.697 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T20:41:49.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T20:41:50.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 20, 41, 32), 7.9, 59.56, 0.0, 22.34, 17.82, 0, 0, 0, 2, 0, 0),)
2025-12-31T20:41:50.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 20:41:32
2025-12-31T20:41:50.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T20:41:50.876 [DEBUG] [Thread-134302] [transport.py] [_log()] starting thread (client mode): 0xb957a9b0
2025-12-31T20:41:50.876 [DEBUG] [Thread-134302] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:41:50.899 [DEBUG] [Thread-134302] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T20:41:50.900 [INFO] [Thread-134302] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T20:41:50.904 [DEBUG] [Thread-134302] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:41:50.904 [DEBUG] [Thread-134302] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T20:41:50.904 [DEBUG] [Thread-134302] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:41:50.904 [DEBUG] [Thread-134302] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:41:50.904 [DEBUG] [Thread-134302] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:41:50.904 [DEBUG] [Thread-134302] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:41:50.904 [DEBUG] [Thread-134302] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:41:50.904 [DEBUG] [Thread-134302] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:41:50.904 [DEBUG] [Thread-134302] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:41:50.904 [DEBUG] [Thread-134302] [transport.py] [_log()] client lang: <none>
2025-12-31T20:41:50.904 [DEBUG] [Thread-134302] [transport.py] [_log()] server lang: <none>
2025-12-31T20:41:50.904 [DEBUG] [Thread-134302] [transport.py] [_log()] kex follows: False
2025-12-31T20:41:50.904 [DEBUG] [Thread-134302] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:41:50.904 [DEBUG] [Thread-134302] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:41:50.904 [DEBUG] [Thread-134302] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:41:50.904 [DEBUG] [Thread-134302] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:41:50.904 [DEBUG] [Thread-134302] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:41:50.904 [DEBUG] [Thread-134302] [transport.py] [_log()] Compression: none
2025-12-31T20:41:50.904 [DEBUG] [Thread-134302] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:41:50.920 [DEBUG] [Thread-134302] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:41:50.920 [DEBUG] [Thread-134302] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:41:50.920 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T20:41:50.920 [DEBUG] [Thread-134302] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T20:41:50.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:41:50.921 [DEBUG] [Thread-134302] [transport.py] [_log()] userauth is OK
2025-12-31T20:41:50.921 [DEBUG] [Thread-134302] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:41:50.921 [DEBUG] [Thread-134302] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:41:50.921 [DEBUG] [Thread-134302] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T20:41:50.921 [DEBUG] [Thread-134302] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:41:50.931 [INFO] [Thread-134302] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:41:50.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:41:51.546 [DEBUG] [Thread-134302] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:41:51.546 [DEBUG] [Thread-134302] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:41:51.546 [DEBUG] [Thread-134302] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T20:41:51.586 [DEBUG] [Thread-134302] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:41:51.586 [DEBUG] [Thread-134302] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:41:51.589 [DEBUG] [Thread-134302] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:41:51.601 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:41:51.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T20:41:51.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T20:41:51.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T20:41:51.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:41:51.607 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T20:41:51.607 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:41:51.607 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:41:51.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T20:41:51.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.778610 -999.00  +18.00  12.08     63  +10.80 1 2 1 1 1     3    0 2.77 -167.53 ----- 14.3 12.1 214.6 20.4 19.1 -18.7 19.0 -18.8 18.8 -18.3 19.1 -18.7
2025-12-31T20:41:51.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T20:41:51.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T20:41:51.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.778610
2025-12-31T20:41:51.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T20:41:51.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T20:41:51.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T20:41:51.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T20:41:51.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T20:41:51.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T20:41:32', tmtdew=7.9, humidity=59.56, cloud=0.0, wind=22.34, temperature=17.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T20:41:32', seeing=1.67, atlas_timestamp='2025-12-31T18:41:11.904', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T20:41:51.609 [DEBUG] [Thread-134302] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:41:51.682 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T20:41:51.694 [DEBUG] [Thread-134305] [transport.py] [_log()] starting thread (client mode): 0xb1785300
2025-12-31T20:41:51.694 [DEBUG] [Thread-134305] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:41:51.709 [DEBUG] [Thread-134305] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T20:41:51.709 [INFO] [Thread-134305] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T20:41:51.716 [DEBUG] [Thread-134305] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:41:51.717 [DEBUG] [Thread-134305] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T20:41:51.717 [DEBUG] [Thread-134305] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:41:51.717 [DEBUG] [Thread-134305] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:41:51.717 [DEBUG] [Thread-134305] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:41:51.717 [DEBUG] [Thread-134305] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:41:51.717 [DEBUG] [Thread-134305] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:41:51.717 [DEBUG] [Thread-134305] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:41:51.717 [DEBUG] [Thread-134305] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:41:51.717 [DEBUG] [Thread-134305] [transport.py] [_log()] client lang: <none>
2025-12-31T20:41:51.717 [DEBUG] [Thread-134305] [transport.py] [_log()] server lang: <none>
2025-12-31T20:41:51.717 [DEBUG] [Thread-134305] [transport.py] [_log()] kex follows: False
2025-12-31T20:41:51.717 [DEBUG] [Thread-134305] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:41:51.717 [DEBUG] [Thread-134305] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:41:51.717 [DEBUG] [Thread-134305] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:41:51.717 [DEBUG] [Thread-134305] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:41:51.717 [DEBUG] [Thread-134305] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:41:51.718 [DEBUG] [Thread-134305] [transport.py] [_log()] Compression: none
2025-12-31T20:41:51.718 [DEBUG] [Thread-134305] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:41:51.781 [DEBUG] [Thread-134305] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:41:51.781 [DEBUG] [Thread-134305] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:41:51.781 [DEBUG] [Thread-134305] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T20:41:51.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T20:41:51.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:41:51.836 [DEBUG] [Thread-134305] [transport.py] [_log()] userauth is OK
2025-12-31T20:41:51.836 [DEBUG] [Thread-134305] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:41:51.836 [DEBUG] [Thread-134305] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:41:51.836 [DEBUG] [Thread-134305] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T20:41:51.836 [DEBUG] [Thread-134305] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:41:51.850 [INFO] [Thread-134305] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:41:51.850 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T20:41:51.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:41:52.762 [DEBUG] [Thread-134305] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:41:52.762 [DEBUG] [Thread-134305] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:41:52.809 [DEBUG] [Thread-134305] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:41:52.809 [DEBUG] [Thread-134305] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:41:52.817 [DEBUG] [Thread-134305] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:41:52.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:41:52.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T20:41:52.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T20:41:52.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:41:52.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:41:52.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:41:52.849 [DEBUG] [Thread-134305] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:42:02.173 [DEBUG] [Thread-134307 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:42:08.902 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:42:08.903 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:42:17.207 [DEBUG] [Thread-134308 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:42:22.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T20:42:22.869 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T20:42:22.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T20:42:23.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 20, 42, 5), 7.9, 59.56, 0.0, 23.27, 17.84, 0, 0, 0, 2, 0, 0),)
2025-12-31T20:42:23.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 20:42:05
2025-12-31T20:42:23.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T20:42:24.045 [DEBUG] [Thread-134309] [transport.py] [_log()] starting thread (client mode): 0xb9578940
2025-12-31T20:42:24.045 [DEBUG] [Thread-134309] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:42:24.064 [DEBUG] [Thread-134309] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T20:42:24.064 [INFO] [Thread-134309] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T20:42:24.065 [DEBUG] [Thread-134309] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:42:24.066 [DEBUG] [Thread-134309] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T20:42:24.066 [DEBUG] [Thread-134309] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:42:24.066 [DEBUG] [Thread-134309] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:42:24.066 [DEBUG] [Thread-134309] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:42:24.066 [DEBUG] [Thread-134309] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:42:24.066 [DEBUG] [Thread-134309] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:42:24.066 [DEBUG] [Thread-134309] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:42:24.066 [DEBUG] [Thread-134309] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:42:24.066 [DEBUG] [Thread-134309] [transport.py] [_log()] client lang: <none>
2025-12-31T20:42:24.066 [DEBUG] [Thread-134309] [transport.py] [_log()] server lang: <none>
2025-12-31T20:42:24.066 [DEBUG] [Thread-134309] [transport.py] [_log()] kex follows: False
2025-12-31T20:42:24.066 [DEBUG] [Thread-134309] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:42:24.066 [DEBUG] [Thread-134309] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:42:24.066 [DEBUG] [Thread-134309] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:42:24.066 [DEBUG] [Thread-134309] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:42:24.066 [DEBUG] [Thread-134309] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:42:24.066 [DEBUG] [Thread-134309] [transport.py] [_log()] Compression: none
2025-12-31T20:42:24.066 [DEBUG] [Thread-134309] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:42:24.073 [DEBUG] [Thread-134309] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:42:24.073 [DEBUG] [Thread-134309] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:42:24.073 [DEBUG] [Thread-134309] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T20:42:24.074 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T20:42:24.074 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:42:24.074 [DEBUG] [Thread-134309] [transport.py] [_log()] userauth is OK
2025-12-31T20:42:24.074 [DEBUG] [Thread-134309] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:42:24.074 [DEBUG] [Thread-134309] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:42:24.074 [DEBUG] [Thread-134309] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T20:42:24.074 [DEBUG] [Thread-134309] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:42:24.083 [INFO] [Thread-134309] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:42:24.083 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:42:24.881 [DEBUG] [Thread-134309] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:42:24.881 [DEBUG] [Thread-134309] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:42:24.881 [DEBUG] [Thread-134309] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T20:42:24.922 [DEBUG] [Thread-134309] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:42:24.922 [DEBUG] [Thread-134309] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:42:24.924 [DEBUG] [Thread-134309] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:42:24.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:42:24.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T20:42:24.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T20:42:24.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T20:42:24.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:42:24.937 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T20:42:24.937 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:42:24.937 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:42:24.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T20:42:24.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.778958 -999.00  +17.90  17.15     63  +10.80 1 2 1 1 1     3    0 2.31 -184.89 ----- 13.9 17.1 226.9 23.6 19.1 -18.5 18.9 -18.7 18.7 -18.3 19.1 -18.6
2025-12-31T20:42:24.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T20:42:24.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T20:42:24.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.778958
2025-12-31T20:42:24.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T20:42:24.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T20:42:24.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T20:42:24.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T20:42:24.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T20:42:24.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T20:42:05', tmtdew=7.9, humidity=59.56, cloud=0.0, wind=23.27, temperature=17.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T20:42:05', seeing=1.69, atlas_timestamp='2025-12-31T18:41:41.971', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T20:42:24.938 [DEBUG] [Thread-134309] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:42:25.011 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T20:42:25.022 [DEBUG] [Thread-134312] [transport.py] [_log()] starting thread (client mode): 0xb957a350
2025-12-31T20:42:25.022 [DEBUG] [Thread-134312] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:42:25.038 [DEBUG] [Thread-134312] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T20:42:25.038 [INFO] [Thread-134312] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T20:42:25.046 [DEBUG] [Thread-134312] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:42:25.046 [DEBUG] [Thread-134312] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T20:42:25.046 [DEBUG] [Thread-134312] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:42:25.046 [DEBUG] [Thread-134312] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:42:25.046 [DEBUG] [Thread-134312] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:42:25.046 [DEBUG] [Thread-134312] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:42:25.046 [DEBUG] [Thread-134312] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:42:25.046 [DEBUG] [Thread-134312] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:42:25.046 [DEBUG] [Thread-134312] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:42:25.046 [DEBUG] [Thread-134312] [transport.py] [_log()] client lang: <none>
2025-12-31T20:42:25.046 [DEBUG] [Thread-134312] [transport.py] [_log()] server lang: <none>
2025-12-31T20:42:25.046 [DEBUG] [Thread-134312] [transport.py] [_log()] kex follows: False
2025-12-31T20:42:25.046 [DEBUG] [Thread-134312] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:42:25.046 [DEBUG] [Thread-134312] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:42:25.046 [DEBUG] [Thread-134312] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:42:25.046 [DEBUG] [Thread-134312] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:42:25.046 [DEBUG] [Thread-134312] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:42:25.046 [DEBUG] [Thread-134312] [transport.py] [_log()] Compression: none
2025-12-31T20:42:25.046 [DEBUG] [Thread-134312] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:42:25.103 [DEBUG] [Thread-134312] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:42:25.103 [DEBUG] [Thread-134312] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:42:25.103 [DEBUG] [Thread-134312] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T20:42:25.103 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T20:42:25.104 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:42:25.160 [DEBUG] [Thread-134312] [transport.py] [_log()] userauth is OK
2025-12-31T20:42:25.160 [DEBUG] [Thread-134312] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:42:25.160 [DEBUG] [Thread-134312] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:42:25.160 [DEBUG] [Thread-134312] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T20:42:25.160 [DEBUG] [Thread-134312] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:42:25.175 [INFO] [Thread-134312] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:42:25.175 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T20:42:25.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:42:26.029 [DEBUG] [Thread-134312] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:42:26.029 [DEBUG] [Thread-134312] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:42:26.077 [DEBUG] [Thread-134312] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:42:26.077 [DEBUG] [Thread-134312] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:42:26.085 [DEBUG] [Thread-134312] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:42:26.093 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:42:26.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T20:42:26.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-12-31T20:42:26.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:42:26.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:42:26.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:42:26.117 [DEBUG] [Thread-134312] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:42:32.234 [DEBUG] [Thread-134314 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:42:39.350 [DEBUG] [Thread-134315 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:42:47.269 [DEBUG] [Thread-134316 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:42:56.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T20:42:56.139 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T20:42:56.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T20:42:57.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 20, 42, 38), 7.9, 60.06, 0.0, 25.3, 17.77, 0, 0, 0, 2, 0, 0),)
2025-12-31T20:42:57.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 20:42:38
2025-12-31T20:42:57.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T20:42:57.373 [DEBUG] [Thread-134317] [transport.py] [_log()] starting thread (client mode): 0xb957bd30
2025-12-31T20:42:57.373 [DEBUG] [Thread-134317] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:42:57.390 [DEBUG] [Thread-134317] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T20:42:57.390 [INFO] [Thread-134317] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T20:42:57.393 [DEBUG] [Thread-134317] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:42:57.393 [DEBUG] [Thread-134317] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T20:42:57.393 [DEBUG] [Thread-134317] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:42:57.393 [DEBUG] [Thread-134317] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:42:57.393 [DEBUG] [Thread-134317] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:42:57.393 [DEBUG] [Thread-134317] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:42:57.394 [DEBUG] [Thread-134317] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:42:57.394 [DEBUG] [Thread-134317] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:42:57.394 [DEBUG] [Thread-134317] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:42:57.394 [DEBUG] [Thread-134317] [transport.py] [_log()] client lang: <none>
2025-12-31T20:42:57.394 [DEBUG] [Thread-134317] [transport.py] [_log()] server lang: <none>
2025-12-31T20:42:57.394 [DEBUG] [Thread-134317] [transport.py] [_log()] kex follows: False
2025-12-31T20:42:57.394 [DEBUG] [Thread-134317] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:42:57.394 [DEBUG] [Thread-134317] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:42:57.394 [DEBUG] [Thread-134317] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:42:57.394 [DEBUG] [Thread-134317] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:42:57.394 [DEBUG] [Thread-134317] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:42:57.394 [DEBUG] [Thread-134317] [transport.py] [_log()] Compression: none
2025-12-31T20:42:57.394 [DEBUG] [Thread-134317] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:42:57.415 [DEBUG] [Thread-134317] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:42:57.416 [DEBUG] [Thread-134317] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:42:57.416 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T20:42:57.417 [DEBUG] [Thread-134317] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T20:42:57.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:42:57.418 [DEBUG] [Thread-134317] [transport.py] [_log()] userauth is OK
2025-12-31T20:42:57.419 [DEBUG] [Thread-134317] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:42:57.419 [DEBUG] [Thread-134317] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:42:57.419 [DEBUG] [Thread-134317] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T20:42:57.419 [DEBUG] [Thread-134317] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:42:57.429 [INFO] [Thread-134317] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:42:57.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:42:58.100 [DEBUG] [Thread-134317] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:42:58.100 [DEBUG] [Thread-134317] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:42:58.100 [DEBUG] [Thread-134317] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T20:42:58.142 [DEBUG] [Thread-134317] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:42:58.142 [DEBUG] [Thread-134317] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:42:58.144 [DEBUG] [Thread-134317] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:42:58.155 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:42:58.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T20:42:58.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T20:42:58.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T20:42:58.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:42:58.161 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T20:42:58.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:42:58.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:42:58.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T20:42:58.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.779305 -999.00  +17.90   9.99     63  +10.80 1 2 1 1 1     2    0 2.10 -186.27 ----- 10.0 10.0 216.7 19.9 19.1 -18.5 18.9 -18.4 18.7 -18.3 19.1 -18.3
2025-12-31T20:42:58.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T20:42:58.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T20:42:58.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.779305
2025-12-31T20:42:58.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T20:42:58.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T20:42:58.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T20:42:58.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T20:42:58.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T20:42:58.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T20:42:38', tmtdew=7.9, humidity=60.06, cloud=0.0, wind=25.3, temperature=17.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T20:42:38', seeing=1.69, atlas_timestamp='2025-12-31T18:42:11.952', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T20:42:58.166 [DEBUG] [Thread-134317] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:42:58.240 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T20:42:58.253 [DEBUG] [Thread-134320] [transport.py] [_log()] starting thread (client mode): 0xb6bb9120
2025-12-31T20:42:58.253 [DEBUG] [Thread-134320] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:42:58.268 [DEBUG] [Thread-134320] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T20:42:58.268 [INFO] [Thread-134320] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T20:42:58.275 [DEBUG] [Thread-134320] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:42:58.275 [DEBUG] [Thread-134320] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T20:42:58.275 [DEBUG] [Thread-134320] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:42:58.275 [DEBUG] [Thread-134320] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:42:58.275 [DEBUG] [Thread-134320] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:42:58.275 [DEBUG] [Thread-134320] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:42:58.275 [DEBUG] [Thread-134320] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:42:58.275 [DEBUG] [Thread-134320] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:42:58.275 [DEBUG] [Thread-134320] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:42:58.275 [DEBUG] [Thread-134320] [transport.py] [_log()] client lang: <none>
2025-12-31T20:42:58.275 [DEBUG] [Thread-134320] [transport.py] [_log()] server lang: <none>
2025-12-31T20:42:58.275 [DEBUG] [Thread-134320] [transport.py] [_log()] kex follows: False
2025-12-31T20:42:58.275 [DEBUG] [Thread-134320] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:42:58.275 [DEBUG] [Thread-134320] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:42:58.275 [DEBUG] [Thread-134320] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:42:58.275 [DEBUG] [Thread-134320] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:42:58.275 [DEBUG] [Thread-134320] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:42:58.275 [DEBUG] [Thread-134320] [transport.py] [_log()] Compression: none
2025-12-31T20:42:58.275 [DEBUG] [Thread-134320] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:42:58.331 [DEBUG] [Thread-134320] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:42:58.331 [DEBUG] [Thread-134320] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:42:58.331 [DEBUG] [Thread-134320] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T20:42:58.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T20:42:58.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:42:58.389 [DEBUG] [Thread-134320] [transport.py] [_log()] userauth is OK
2025-12-31T20:42:58.389 [DEBUG] [Thread-134320] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:42:58.389 [DEBUG] [Thread-134320] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:42:58.389 [DEBUG] [Thread-134320] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T20:42:58.389 [DEBUG] [Thread-134320] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:42:58.402 [INFO] [Thread-134320] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:42:58.402 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T20:42:58.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:42:59.767 [DEBUG] [Thread-134320] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:42:59.767 [DEBUG] [Thread-134320] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:42:59.815 [DEBUG] [Thread-134320] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:42:59.815 [DEBUG] [Thread-134320] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:42:59.824 [DEBUG] [Thread-134320] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:42:59.831 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:42:59.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T20:42:59.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T20:42:59.847 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:42:59.847 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:42:59.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:42:59.855 [DEBUG] [Thread-134320] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:43:02.292 [DEBUG] [Thread-134322 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:43:13.225 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:43:13.226 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:43:17.328 [DEBUG] [Thread-134323 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:43:29.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T20:43:29.877 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T20:43:29.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T20:43:30.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 20, 43, 10), 7.88, 60.11, 0.0, 25.11, 17.74, 0, 0, 0, 2, 0, 0),)
2025-12-31T20:43:30.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 20:43:10
2025-12-31T20:43:30.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T20:43:31.060 [DEBUG] [Thread-134324] [transport.py] [_log()] starting thread (client mode): 0xb175b6a0
2025-12-31T20:43:31.060 [DEBUG] [Thread-134324] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:43:31.076 [DEBUG] [Thread-134324] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T20:43:31.076 [INFO] [Thread-134324] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T20:43:31.079 [DEBUG] [Thread-134324] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:43:31.080 [DEBUG] [Thread-134324] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T20:43:31.080 [DEBUG] [Thread-134324] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:43:31.080 [DEBUG] [Thread-134324] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:43:31.080 [DEBUG] [Thread-134324] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:43:31.080 [DEBUG] [Thread-134324] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:43:31.080 [DEBUG] [Thread-134324] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:43:31.080 [DEBUG] [Thread-134324] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:43:31.080 [DEBUG] [Thread-134324] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:43:31.080 [DEBUG] [Thread-134324] [transport.py] [_log()] client lang: <none>
2025-12-31T20:43:31.080 [DEBUG] [Thread-134324] [transport.py] [_log()] server lang: <none>
2025-12-31T20:43:31.080 [DEBUG] [Thread-134324] [transport.py] [_log()] kex follows: False
2025-12-31T20:43:31.080 [DEBUG] [Thread-134324] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:43:31.080 [DEBUG] [Thread-134324] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:43:31.080 [DEBUG] [Thread-134324] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:43:31.080 [DEBUG] [Thread-134324] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:43:31.080 [DEBUG] [Thread-134324] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:43:31.080 [DEBUG] [Thread-134324] [transport.py] [_log()] Compression: none
2025-12-31T20:43:31.080 [DEBUG] [Thread-134324] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:43:31.096 [DEBUG] [Thread-134324] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:43:31.096 [DEBUG] [Thread-134324] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:43:31.096 [DEBUG] [Thread-134324] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T20:43:31.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T20:43:31.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:43:31.097 [DEBUG] [Thread-134324] [transport.py] [_log()] userauth is OK
2025-12-31T20:43:31.097 [DEBUG] [Thread-134324] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:43:31.097 [DEBUG] [Thread-134324] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:43:31.097 [DEBUG] [Thread-134324] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T20:43:31.097 [DEBUG] [Thread-134324] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:43:31.105 [INFO] [Thread-134324] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:43:31.106 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:43:31.873 [DEBUG] [Thread-134324] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:43:31.873 [DEBUG] [Thread-134324] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:43:31.873 [DEBUG] [Thread-134324] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T20:43:31.914 [DEBUG] [Thread-134324] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:43:31.914 [DEBUG] [Thread-134324] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:43:31.916 [DEBUG] [Thread-134324] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:43:31.928 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:43:31.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T20:43:31.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T20:43:31.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T20:43:31.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:43:31.932 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T20:43:31.932 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:43:31.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:43:31.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T20:43:31.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.779652 -999.00  +17.90  11.62     63  +10.80 1 2 1 1 1     2    0 2.55 -172.89 Z.e.W 8.2 11.6 219.3 20.4 19.1 -18.1 18.9 -17.9 18.7 -18.0 19.0 -18.3
2025-12-31T20:43:31.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T20:43:31.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T20:43:31.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.779652
2025-12-31T20:43:31.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T20:43:31.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T20:43:31.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T20:43:31.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T20:43:31.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T20:43:31.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T20:43:10', tmtdew=7.88, humidity=60.11, cloud=0.0, wind=25.11, temperature=17.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T20:43:10', seeing=1.74, atlas_timestamp='2025-12-31T18:42:41.933', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T20:43:31.933 [DEBUG] [Thread-134324] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:43:32.006 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T20:43:32.018 [DEBUG] [Thread-134327] [transport.py] [_log()] starting thread (client mode): 0xb175b6d0
2025-12-31T20:43:32.018 [DEBUG] [Thread-134327] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:43:32.032 [DEBUG] [Thread-134327] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T20:43:32.032 [INFO] [Thread-134327] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T20:43:32.039 [DEBUG] [Thread-134327] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:43:32.039 [DEBUG] [Thread-134327] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T20:43:32.039 [DEBUG] [Thread-134327] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:43:32.039 [DEBUG] [Thread-134327] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:43:32.039 [DEBUG] [Thread-134327] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:43:32.039 [DEBUG] [Thread-134327] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:43:32.039 [DEBUG] [Thread-134327] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:43:32.039 [DEBUG] [Thread-134327] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:43:32.039 [DEBUG] [Thread-134327] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:43:32.039 [DEBUG] [Thread-134327] [transport.py] [_log()] client lang: <none>
2025-12-31T20:43:32.039 [DEBUG] [Thread-134327] [transport.py] [_log()] server lang: <none>
2025-12-31T20:43:32.039 [DEBUG] [Thread-134327] [transport.py] [_log()] kex follows: False
2025-12-31T20:43:32.039 [DEBUG] [Thread-134327] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:43:32.039 [DEBUG] [Thread-134327] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:43:32.039 [DEBUG] [Thread-134327] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:43:32.040 [DEBUG] [Thread-134327] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:43:32.040 [DEBUG] [Thread-134327] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:43:32.040 [DEBUG] [Thread-134327] [transport.py] [_log()] Compression: none
2025-12-31T20:43:32.040 [DEBUG] [Thread-134327] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:43:32.100 [DEBUG] [Thread-134327] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:43:32.100 [DEBUG] [Thread-134327] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:43:32.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T20:43:32.101 [DEBUG] [Thread-134327] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T20:43:32.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:43:32.161 [DEBUG] [Thread-134327] [transport.py] [_log()] userauth is OK
2025-12-31T20:43:32.162 [DEBUG] [Thread-134327] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:43:32.162 [DEBUG] [Thread-134327] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:43:32.162 [DEBUG] [Thread-134327] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T20:43:32.162 [DEBUG] [Thread-134327] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:43:32.175 [INFO] [Thread-134327] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:43:32.175 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T20:43:32.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:43:32.352 [DEBUG] [Thread-134329 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:43:33.283 [DEBUG] [Thread-134327] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:43:33.283 [DEBUG] [Thread-134327] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:43:33.330 [DEBUG] [Thread-134327] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:43:33.330 [DEBUG] [Thread-134327] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:43:33.339 [DEBUG] [Thread-134327] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:43:33.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:43: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-12-31T20:43:33.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T20:43:33.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:43:33.363 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:43:33.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:43:33.370 [DEBUG] [Thread-134327] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:43:39.421 [DEBUG] [Thread-134330 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:43:47.386 [DEBUG] [Thread-134331 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:44:02.413 [DEBUG] [Thread-134332 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:44:03.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T20:44:03.369 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T20:44:03.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T20:44:04.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 20, 43, 42), 7.83, 60.13, 0.0, 20.2, 17.69, 0, 0, 0, 2, 0, 0),)
2025-12-31T20:44:04.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 20:43:42
2025-12-31T20:44:04.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T20:44:04.613 [DEBUG] [Thread-134333] [transport.py] [_log()] starting thread (client mode): 0xb957a350
2025-12-31T20:44:04.613 [DEBUG] [Thread-134333] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:44:04.633 [DEBUG] [Thread-134333] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T20:44:04.634 [INFO] [Thread-134333] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T20:44:04.637 [DEBUG] [Thread-134333] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:44:04.637 [DEBUG] [Thread-134333] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T20:44:04.637 [DEBUG] [Thread-134333] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:44:04.637 [DEBUG] [Thread-134333] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:44:04.637 [DEBUG] [Thread-134333] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:44:04.637 [DEBUG] [Thread-134333] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:44:04.637 [DEBUG] [Thread-134333] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:44:04.637 [DEBUG] [Thread-134333] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:44:04.637 [DEBUG] [Thread-134333] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:44:04.637 [DEBUG] [Thread-134333] [transport.py] [_log()] client lang: <none>
2025-12-31T20:44:04.637 [DEBUG] [Thread-134333] [transport.py] [_log()] server lang: <none>
2025-12-31T20:44:04.637 [DEBUG] [Thread-134333] [transport.py] [_log()] kex follows: False
2025-12-31T20:44:04.637 [DEBUG] [Thread-134333] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:44:04.637 [DEBUG] [Thread-134333] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:44:04.637 [DEBUG] [Thread-134333] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:44:04.637 [DEBUG] [Thread-134333] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:44:04.637 [DEBUG] [Thread-134333] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:44:04.637 [DEBUG] [Thread-134333] [transport.py] [_log()] Compression: none
2025-12-31T20:44:04.637 [DEBUG] [Thread-134333] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:44:04.654 [DEBUG] [Thread-134333] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:44:04.654 [DEBUG] [Thread-134333] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:44:04.654 [DEBUG] [Thread-134333] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T20:44:04.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T20:44:04.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:44:04.656 [DEBUG] [Thread-134333] [transport.py] [_log()] userauth is OK
2025-12-31T20:44:04.656 [DEBUG] [Thread-134333] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:44:04.656 [DEBUG] [Thread-134333] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:44:04.656 [DEBUG] [Thread-134333] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T20:44:04.656 [DEBUG] [Thread-134333] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:44:04.669 [INFO] [Thread-134333] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:44:04.670 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:44:05.298 [DEBUG] [Thread-134333] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:44:05.298 [DEBUG] [Thread-134333] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:44:05.298 [DEBUG] [Thread-134333] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T20:44:05.339 [DEBUG] [Thread-134333] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:44:05.339 [DEBUG] [Thread-134333] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:44:05.342 [DEBUG] [Thread-134333] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:44:05.354 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:44:05.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T20:44:05.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T20:44:05.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T20:44:05.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:44:05.363 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T20:44:05.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:44:05.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:44:05.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T20:44:05.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.779999 -999.00  +17.90   7.47     62  +10.70 1 2 1 1 1     2    0 3.04 -160.33 Z...W 11.7 7.5 198.1 18.0 19.0 -17.2 18.9 -17.7 18.7 -17.7 19.0 -17.8
2025-12-31T20:44:05.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T20:44:05.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T20:44:05.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.779999
2025-12-31T20:44:05.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T20:44:05.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T20:44:05.366 [DEBUG] [Thread-134333] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:44:05.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T20:44:05.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T20:44:05.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T20:44:05.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T20:43:42', tmtdew=7.83, humidity=60.13, cloud=0.0, wind=20.2, temperature=17.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T20:43:43', seeing=1.74, atlas_timestamp='2025-12-31T18:43:11.914', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T20:44:05.453 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T20:44:05.465 [DEBUG] [Thread-134336] [transport.py] [_log()] starting thread (client mode): 0xb17861a0
2025-12-31T20:44:05.466 [DEBUG] [Thread-134336] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:44:05.480 [DEBUG] [Thread-134336] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T20:44:05.480 [INFO] [Thread-134336] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T20:44:05.488 [DEBUG] [Thread-134336] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:44:05.488 [DEBUG] [Thread-134336] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T20:44:05.488 [DEBUG] [Thread-134336] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:44:05.488 [DEBUG] [Thread-134336] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:44:05.488 [DEBUG] [Thread-134336] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:44:05.488 [DEBUG] [Thread-134336] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:44:05.488 [DEBUG] [Thread-134336] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:44:05.488 [DEBUG] [Thread-134336] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:44:05.488 [DEBUG] [Thread-134336] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:44:05.488 [DEBUG] [Thread-134336] [transport.py] [_log()] client lang: <none>
2025-12-31T20:44:05.488 [DEBUG] [Thread-134336] [transport.py] [_log()] server lang: <none>
2025-12-31T20:44:05.488 [DEBUG] [Thread-134336] [transport.py] [_log()] kex follows: False
2025-12-31T20:44:05.488 [DEBUG] [Thread-134336] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:44:05.488 [DEBUG] [Thread-134336] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:44:05.488 [DEBUG] [Thread-134336] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:44:05.488 [DEBUG] [Thread-134336] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:44:05.488 [DEBUG] [Thread-134336] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:44:05.488 [DEBUG] [Thread-134336] [transport.py] [_log()] Compression: none
2025-12-31T20:44:05.488 [DEBUG] [Thread-134336] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:44:05.548 [DEBUG] [Thread-134336] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:44:05.548 [DEBUG] [Thread-134336] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:44:05.548 [DEBUG] [Thread-134336] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T20:44:05.549 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T20:44:05.549 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:44:05.605 [DEBUG] [Thread-134336] [transport.py] [_log()] userauth is OK
2025-12-31T20:44:05.605 [DEBUG] [Thread-134336] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:44:05.605 [DEBUG] [Thread-134336] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:44:05.605 [DEBUG] [Thread-134336] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T20:44:05.605 [DEBUG] [Thread-134336] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:44:05.619 [INFO] [Thread-134336] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:44:05.620 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T20:44:05.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:44:06.479 [DEBUG] [Thread-134336] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:44:06.479 [DEBUG] [Thread-134336] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:44:06.526 [DEBUG] [Thread-134336] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:44:06.527 [DEBUG] [Thread-134336] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:44:06.535 [DEBUG] [Thread-134336] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:44:06.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:44:06.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T20:44:06.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T20:44:06.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:44:06.559 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:44:06.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:44:06.567 [DEBUG] [Thread-134336] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:44:17.437 [DEBUG] [Thread-134338 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:44:18.127 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:44:18.128 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:44:32.486 [DEBUG] [Thread-134339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:44:36.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T20:44:36.569 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T20:44:36.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T20:44:37.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 20, 44, 15), 7.85, 60.05, 0.0, 19.46, 17.64, 0, 0, 0, 2, 0, 0),)
2025-12-31T20:44:37.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 20:44:15
2025-12-31T20:44:37.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T20:44:37.768 [DEBUG] [Thread-134340] [transport.py] [_log()] starting thread (client mode): 0xb1785db0
2025-12-31T20:44:37.768 [DEBUG] [Thread-134340] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:44:37.786 [DEBUG] [Thread-134340] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T20:44:37.786 [INFO] [Thread-134340] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T20:44:37.789 [DEBUG] [Thread-134340] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:44:37.790 [DEBUG] [Thread-134340] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T20:44:37.790 [DEBUG] [Thread-134340] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:44:37.790 [DEBUG] [Thread-134340] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:44:37.790 [DEBUG] [Thread-134340] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:44:37.790 [DEBUG] [Thread-134340] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:44:37.790 [DEBUG] [Thread-134340] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:44:37.790 [DEBUG] [Thread-134340] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:44:37.790 [DEBUG] [Thread-134340] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:44:37.790 [DEBUG] [Thread-134340] [transport.py] [_log()] client lang: <none>
2025-12-31T20:44:37.790 [DEBUG] [Thread-134340] [transport.py] [_log()] server lang: <none>
2025-12-31T20:44:37.790 [DEBUG] [Thread-134340] [transport.py] [_log()] kex follows: False
2025-12-31T20:44:37.790 [DEBUG] [Thread-134340] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:44:37.790 [DEBUG] [Thread-134340] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:44:37.790 [DEBUG] [Thread-134340] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:44:37.791 [DEBUG] [Thread-134340] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:44:37.791 [DEBUG] [Thread-134340] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:44:37.791 [DEBUG] [Thread-134340] [transport.py] [_log()] Compression: none
2025-12-31T20:44:37.791 [DEBUG] [Thread-134340] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:44:37.809 [DEBUG] [Thread-134340] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:44:37.809 [DEBUG] [Thread-134340] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:44:37.810 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T20:44:37.810 [DEBUG] [Thread-134340] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T20:44:37.811 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:44:37.852 [DEBUG] [Thread-134340] [transport.py] [_log()] userauth is OK
2025-12-31T20:44:37.853 [DEBUG] [Thread-134340] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:44:37.853 [DEBUG] [Thread-134340] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:44:37.853 [DEBUG] [Thread-134340] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T20:44:37.853 [DEBUG] [Thread-134340] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:44:37.883 [INFO] [Thread-134340] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:44:37.887 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:44:38.625 [DEBUG] [Thread-134340] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:44:38.625 [DEBUG] [Thread-134340] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:44:38.626 [DEBUG] [Thread-134340] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T20:44:38.667 [DEBUG] [Thread-134340] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:44:38.667 [DEBUG] [Thread-134340] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:44:38.669 [DEBUG] [Thread-134340] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:44:38.681 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:44:38.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T20:44:38.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T20:44:38.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T20:44:38.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:44:38.690 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T20:44:38.690 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:44:38.690 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:44:38.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T20:44:38.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.780347 -999.00  +17.90   9.53     63  +10.80 1 2 1 1 1     2    0 2.91 -166.52 Z...W 13.8 9.5 222.7 21.7 19.1 -17.2 18.9 -17.5 18.7 -17.9 19.0 -17.6
2025-12-31T20:44:38.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T20:44:38.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T20:44:38.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.780347
2025-12-31T20:44:38.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T20:44:38.705 [DEBUG] [Thread-134340] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:44:38.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T20:44:38.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T20:44:38.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T20:44:38.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T20:44:38.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T20:44:15', tmtdew=7.85, humidity=60.05, cloud=0.0, wind=19.46, temperature=17.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T20:44:15', seeing=1.74, atlas_timestamp='2025-12-31T18:43:41.981', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T20:44:38.788 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T20:44:38.799 [DEBUG] [Thread-134343] [transport.py] [_log()] starting thread (client mode): 0xb1747820
2025-12-31T20:44:38.799 [DEBUG] [Thread-134343] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:44:38.815 [DEBUG] [Thread-134343] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T20:44:38.815 [INFO] [Thread-134343] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T20:44:38.823 [DEBUG] [Thread-134343] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:44:38.823 [DEBUG] [Thread-134343] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T20:44:38.823 [DEBUG] [Thread-134343] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:44:38.823 [DEBUG] [Thread-134343] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:44:38.823 [DEBUG] [Thread-134343] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:44:38.823 [DEBUG] [Thread-134343] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:44:38.823 [DEBUG] [Thread-134343] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:44:38.823 [DEBUG] [Thread-134343] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:44:38.823 [DEBUG] [Thread-134343] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:44:38.823 [DEBUG] [Thread-134343] [transport.py] [_log()] client lang: <none>
2025-12-31T20:44:38.823 [DEBUG] [Thread-134343] [transport.py] [_log()] server lang: <none>
2025-12-31T20:44:38.823 [DEBUG] [Thread-134343] [transport.py] [_log()] kex follows: False
2025-12-31T20:44:38.823 [DEBUG] [Thread-134343] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:44:38.823 [DEBUG] [Thread-134343] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:44:38.823 [DEBUG] [Thread-134343] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:44:38.823 [DEBUG] [Thread-134343] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:44:38.823 [DEBUG] [Thread-134343] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:44:38.823 [DEBUG] [Thread-134343] [transport.py] [_log()] Compression: none
2025-12-31T20:44:38.823 [DEBUG] [Thread-134343] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:44:38.881 [DEBUG] [Thread-134343] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:44:38.881 [DEBUG] [Thread-134343] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:44:38.881 [DEBUG] [Thread-134343] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T20:44:38.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T20:44:38.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:44:38.937 [DEBUG] [Thread-134343] [transport.py] [_log()] userauth is OK
2025-12-31T20:44:38.937 [DEBUG] [Thread-134343] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:44:38.937 [DEBUG] [Thread-134343] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:44:38.937 [DEBUG] [Thread-134343] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T20:44:38.937 [DEBUG] [Thread-134343] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:44:38.953 [INFO] [Thread-134343] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:44:38.953 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T20:44:38.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:44:39.693 [DEBUG] [Thread-134345 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:44:40.104 [DEBUG] [Thread-134343] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:44:40.104 [DEBUG] [Thread-134343] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:44:40.152 [DEBUG] [Thread-134343] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:44:40.152 [DEBUG] [Thread-134343] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:44:40.160 [DEBUG] [Thread-134343] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:44:40.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:44:40.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T20:44:40.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T20:44:40.185 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:44:40.185 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:44:40.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:44:40.193 [DEBUG] [Thread-134343] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:44:47.512 [DEBUG] [Thread-134346 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:45:02.543 [DEBUG] [Thread-134347 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:45:10.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T20:45:10.210 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T20:45:10.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T20:45:11.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 20, 44, 48), 7.8, 60.05, 0.0, 24.07, 17.67, 0, 0, 0, 2, 0, 0),)
2025-12-31T20:45:11.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 20:44:48
2025-12-31T20:45:11.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T20:45:11.390 [DEBUG] [Thread-134348] [transport.py] [_log()] starting thread (client mode): 0xb1744850
2025-12-31T20:45:11.391 [DEBUG] [Thread-134348] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:45:11.408 [DEBUG] [Thread-134348] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T20:45:11.408 [INFO] [Thread-134348] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T20:45:11.411 [DEBUG] [Thread-134348] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:45:11.411 [DEBUG] [Thread-134348] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T20:45:11.411 [DEBUG] [Thread-134348] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:45:11.412 [DEBUG] [Thread-134348] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:45:11.412 [DEBUG] [Thread-134348] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:45:11.412 [DEBUG] [Thread-134348] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:45:11.412 [DEBUG] [Thread-134348] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:45:11.412 [DEBUG] [Thread-134348] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:45:11.412 [DEBUG] [Thread-134348] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:45:11.412 [DEBUG] [Thread-134348] [transport.py] [_log()] client lang: <none>
2025-12-31T20:45:11.412 [DEBUG] [Thread-134348] [transport.py] [_log()] server lang: <none>
2025-12-31T20:45:11.412 [DEBUG] [Thread-134348] [transport.py] [_log()] kex follows: False
2025-12-31T20:45:11.412 [DEBUG] [Thread-134348] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:45:11.412 [DEBUG] [Thread-134348] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:45:11.412 [DEBUG] [Thread-134348] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:45:11.412 [DEBUG] [Thread-134348] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:45:11.412 [DEBUG] [Thread-134348] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:45:11.412 [DEBUG] [Thread-134348] [transport.py] [_log()] Compression: none
2025-12-31T20:45:11.412 [DEBUG] [Thread-134348] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:45:11.428 [DEBUG] [Thread-134348] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:45:11.429 [DEBUG] [Thread-134348] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:45:11.429 [DEBUG] [Thread-134348] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T20:45:11.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T20:45:11.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:45:11.430 [DEBUG] [Thread-134348] [transport.py] [_log()] userauth is OK
2025-12-31T20:45:11.430 [DEBUG] [Thread-134348] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:45:11.430 [DEBUG] [Thread-134348] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:45:11.430 [DEBUG] [Thread-134348] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T20:45:11.430 [DEBUG] [Thread-134348] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:45:11.443 [INFO] [Thread-134348] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:45:11.443 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:45:15.136 [DEBUG] [Thread-134348] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:45:15.136 [DEBUG] [Thread-134348] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:45:15.136 [DEBUG] [Thread-134348] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T20:45:15.176 [DEBUG] [Thread-134348] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:45:15.176 [DEBUG] [Thread-134348] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:45:15.179 [DEBUG] [Thread-134348] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:45:15.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:45:15.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T20:45:15.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T20:45:15.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T20:45:15.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:45:15.206 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T20:45:15.206 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:45:15.206 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:45:15.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T20:45:15.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.780694 -999.00  +17.90   9.41     63  +10.80 1 2 1 1 1     2    0 3.02 -157.27 Z...W 18.7 9.4 208.7 21.7 19.0 -17.1 18.9 -17.3 18.7 -17.7 18.9 -17.5
2025-12-31T20:45:15.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T20:45:15.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T20:45:15.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.780694
2025-12-31T20:45:15.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T20:45:15.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T20:45:15.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T20:45:15.208 [DEBUG] [Thread-134348] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:45:15.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T20:45:15.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T20:45:15.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T20:44:48', tmtdew=7.8, humidity=60.05, cloud=0.0, wind=24.07, temperature=17.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T20:44:48', seeing=1.74, atlas_timestamp='2025-12-31T18:44:11.962', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T20:45:15.282 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T20:45:15.296 [DEBUG] [Thread-134351] [transport.py] [_log()] starting thread (client mode): 0xb1759600
2025-12-31T20:45:15.296 [DEBUG] [Thread-134351] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:45:15.311 [DEBUG] [Thread-134351] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T20:45:15.311 [INFO] [Thread-134351] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T20:45:15.318 [DEBUG] [Thread-134351] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:45:15.318 [DEBUG] [Thread-134351] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T20:45:15.318 [DEBUG] [Thread-134351] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:45:15.318 [DEBUG] [Thread-134351] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:45:15.318 [DEBUG] [Thread-134351] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:45:15.318 [DEBUG] [Thread-134351] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:45:15.318 [DEBUG] [Thread-134351] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:45:15.319 [DEBUG] [Thread-134351] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:45:15.319 [DEBUG] [Thread-134351] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:45:15.319 [DEBUG] [Thread-134351] [transport.py] [_log()] client lang: <none>
2025-12-31T20:45:15.319 [DEBUG] [Thread-134351] [transport.py] [_log()] server lang: <none>
2025-12-31T20:45:15.319 [DEBUG] [Thread-134351] [transport.py] [_log()] kex follows: False
2025-12-31T20:45:15.319 [DEBUG] [Thread-134351] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:45:15.319 [DEBUG] [Thread-134351] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:45:15.319 [DEBUG] [Thread-134351] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:45:15.319 [DEBUG] [Thread-134351] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:45:15.319 [DEBUG] [Thread-134351] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:45:15.319 [DEBUG] [Thread-134351] [transport.py] [_log()] Compression: none
2025-12-31T20:45:15.319 [DEBUG] [Thread-134351] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:45:15.377 [DEBUG] [Thread-134351] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:45:15.377 [DEBUG] [Thread-134351] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:45:15.377 [DEBUG] [Thread-134351] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T20:45:15.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T20:45:15.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:45:15.433 [DEBUG] [Thread-134351] [transport.py] [_log()] userauth is OK
2025-12-31T20:45:15.433 [DEBUG] [Thread-134351] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:45:15.433 [DEBUG] [Thread-134351] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:45:15.433 [DEBUG] [Thread-134351] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T20:45:15.433 [DEBUG] [Thread-134351] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:45:15.447 [INFO] [Thread-134351] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:45:15.447 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T20:45:15.447 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:45:16.295 [DEBUG] [Thread-134351] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:45:16.295 [DEBUG] [Thread-134351] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:45:16.342 [DEBUG] [Thread-134351] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:45:16.342 [DEBUG] [Thread-134351] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:45:16.350 [DEBUG] [Thread-134351] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:45:16.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:45:16.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T20:45:16.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T20:45:16.374 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:45:16.374 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:45:16.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:45:16.382 [DEBUG] [Thread-134351] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:45:17.569 [DEBUG] [Thread-134353 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:45:24.700 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:45:24.701 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:45:32.603 [DEBUG] [Thread-134354 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:45:39.912 [DEBUG] [Thread-134355 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:45:46.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T20:45:46.404 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T20:45:46.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T20:45:47.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 20, 45, 21), 7.79, 60.1, 0.0, 21.39, 17.7, 0, 0, 0, 2, 0, 0),)
2025-12-31T20:45:47.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 20:45:21
2025-12-31T20:45:47.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T20:45:47.577 [DEBUG] [Thread-134356] [transport.py] [_log()] starting thread (client mode): 0xb1764c10
2025-12-31T20:45:47.577 [DEBUG] [Thread-134356] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:45:47.595 [DEBUG] [Thread-134356] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T20:45:47.595 [INFO] [Thread-134356] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T20:45:47.598 [DEBUG] [Thread-134356] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:45:47.599 [DEBUG] [Thread-134356] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T20:45:47.599 [DEBUG] [Thread-134356] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:45:47.599 [DEBUG] [Thread-134356] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:45:47.599 [DEBUG] [Thread-134356] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:45:47.599 [DEBUG] [Thread-134356] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:45:47.599 [DEBUG] [Thread-134356] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:45:47.599 [DEBUG] [Thread-134356] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:45:47.599 [DEBUG] [Thread-134356] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:45:47.599 [DEBUG] [Thread-134356] [transport.py] [_log()] client lang: <none>
2025-12-31T20:45:47.599 [DEBUG] [Thread-134356] [transport.py] [_log()] server lang: <none>
2025-12-31T20:45:47.599 [DEBUG] [Thread-134356] [transport.py] [_log()] kex follows: False
2025-12-31T20:45:47.599 [DEBUG] [Thread-134356] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:45:47.599 [DEBUG] [Thread-134356] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:45:47.599 [DEBUG] [Thread-134356] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:45:47.599 [DEBUG] [Thread-134356] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:45:47.599 [DEBUG] [Thread-134356] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:45:47.599 [DEBUG] [Thread-134356] [transport.py] [_log()] Compression: none
2025-12-31T20:45:47.599 [DEBUG] [Thread-134356] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:45:47.614 [DEBUG] [Thread-134356] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:45:47.615 [DEBUG] [Thread-134356] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:45:47.615 [DEBUG] [Thread-134356] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T20:45:47.615 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T20:45:47.615 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:45:47.629 [DEBUG] [Thread-134358 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:45:47.656 [DEBUG] [Thread-134356] [transport.py] [_log()] userauth is OK
2025-12-31T20:45:47.656 [DEBUG] [Thread-134356] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:45:47.656 [DEBUG] [Thread-134356] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:45:47.656 [DEBUG] [Thread-134356] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T20:45:47.656 [DEBUG] [Thread-134356] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:45:47.683 [INFO] [Thread-134356] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:45:47.683 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:45:48.297 [DEBUG] [Thread-134356] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:45:48.297 [DEBUG] [Thread-134356] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:45:48.297 [DEBUG] [Thread-134356] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T20:45:48.337 [DEBUG] [Thread-134356] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:45:48.337 [DEBUG] [Thread-134356] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:45:48.339 [DEBUG] [Thread-134356] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:45:48.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:45:48.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T20:45:48.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T20:45:48.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T20:45:48.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:45:48.352 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T20:45:48.352 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:45:48.352 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:45:48.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T20:45:48.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.781041 -999.00  +17.90  14.39     63  +10.80 1 2 1 1 1     1    0 3.43 -145.56 Z...w 12.1 14.4 209.2 24.8 19.0 -16.9 18.9 -17.3 18.7 -17.6 18.9 -17.5
2025-12-31T20:45:48.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T20:45:48.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T20:45:48.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.781041
2025-12-31T20:45:48.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T20:45:48.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T20:45:48.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T20:45:48.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T20:45:48.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T20:45:48.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T20:45:21', tmtdew=7.79, humidity=60.1, cloud=0.0, wind=21.39, temperature=17.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T20:45:21', seeing=1.74, atlas_timestamp='2025-12-31T18:44:41.942', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T20:45:48.353 [DEBUG] [Thread-134356] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:45:48.425 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T20:45:48.437 [DEBUG] [Thread-134360] [transport.py] [_log()] starting thread (client mode): 0xb9579f60
2025-12-31T20:45:48.437 [DEBUG] [Thread-134360] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:45:48.451 [DEBUG] [Thread-134360] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T20:45:48.451 [INFO] [Thread-134360] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T20:45:48.458 [DEBUG] [Thread-134360] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:45:48.458 [DEBUG] [Thread-134360] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T20:45:48.458 [DEBUG] [Thread-134360] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:45:48.458 [DEBUG] [Thread-134360] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:45:48.459 [DEBUG] [Thread-134360] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:45:48.459 [DEBUG] [Thread-134360] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:45:48.459 [DEBUG] [Thread-134360] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:45:48.459 [DEBUG] [Thread-134360] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:45:48.459 [DEBUG] [Thread-134360] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:45:48.459 [DEBUG] [Thread-134360] [transport.py] [_log()] client lang: <none>
2025-12-31T20:45:48.459 [DEBUG] [Thread-134360] [transport.py] [_log()] server lang: <none>
2025-12-31T20:45:48.459 [DEBUG] [Thread-134360] [transport.py] [_log()] kex follows: False
2025-12-31T20:45:48.459 [DEBUG] [Thread-134360] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:45:48.459 [DEBUG] [Thread-134360] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:45:48.459 [DEBUG] [Thread-134360] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:45:48.459 [DEBUG] [Thread-134360] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:45:48.459 [DEBUG] [Thread-134360] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:45:48.459 [DEBUG] [Thread-134360] [transport.py] [_log()] Compression: none
2025-12-31T20:45:48.459 [DEBUG] [Thread-134360] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:45:48.519 [DEBUG] [Thread-134360] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:45:48.519 [DEBUG] [Thread-134360] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:45:48.519 [DEBUG] [Thread-134360] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T20:45:48.520 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T20:45:48.520 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:45:48.577 [DEBUG] [Thread-134360] [transport.py] [_log()] userauth is OK
2025-12-31T20:45:48.577 [DEBUG] [Thread-134360] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:45:48.577 [DEBUG] [Thread-134360] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:45:48.578 [DEBUG] [Thread-134360] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T20:45:48.578 [DEBUG] [Thread-134360] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:45:48.591 [INFO] [Thread-134360] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:45:48.591 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T20:45:48.591 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:45:49.659 [DEBUG] [Thread-134360] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:45:49.659 [DEBUG] [Thread-134360] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:45:49.707 [DEBUG] [Thread-134360] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:45:49.707 [DEBUG] [Thread-134360] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:45:49.716 [DEBUG] [Thread-134360] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:45:49.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:45:49.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T20:45: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-12-31T20:45:49.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:45:49.741 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:45:49.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:45:49.749 [DEBUG] [Thread-134360] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:46:02.651 [DEBUG] [Thread-134362 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:46:17.684 [DEBUG] [Thread-134363 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:46:19.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T20:46:19.772 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T20:46:19.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T20:46:20.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 20, 45, 53), 7.8, 60.05, 0.0, 22.28, 17.67, 0, 0, 0, 2, 0, 0),)
2025-12-31T20:46:20.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 20:45:53
2025-12-31T20:46:20.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T20:46:20.976 [DEBUG] [Thread-134364] [transport.py] [_log()] starting thread (client mode): 0xb1784790
2025-12-31T20:46:20.976 [DEBUG] [Thread-134364] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:46:20.997 [DEBUG] [Thread-134364] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T20:46:20.997 [INFO] [Thread-134364] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T20:46:21.000 [DEBUG] [Thread-134364] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:46:21.000 [DEBUG] [Thread-134364] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T20:46:21.000 [DEBUG] [Thread-134364] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:46:21.000 [DEBUG] [Thread-134364] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:46:21.000 [DEBUG] [Thread-134364] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:46:21.000 [DEBUG] [Thread-134364] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:46:21.000 [DEBUG] [Thread-134364] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:46:21.000 [DEBUG] [Thread-134364] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:46:21.000 [DEBUG] [Thread-134364] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:46:21.000 [DEBUG] [Thread-134364] [transport.py] [_log()] client lang: <none>
2025-12-31T20:46:21.000 [DEBUG] [Thread-134364] [transport.py] [_log()] server lang: <none>
2025-12-31T20:46:21.000 [DEBUG] [Thread-134364] [transport.py] [_log()] kex follows: False
2025-12-31T20:46:21.000 [DEBUG] [Thread-134364] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:46:21.000 [DEBUG] [Thread-134364] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:46:21.000 [DEBUG] [Thread-134364] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:46:21.000 [DEBUG] [Thread-134364] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:46:21.000 [DEBUG] [Thread-134364] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:46:21.000 [DEBUG] [Thread-134364] [transport.py] [_log()] Compression: none
2025-12-31T20:46:21.000 [DEBUG] [Thread-134364] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:46:21.016 [DEBUG] [Thread-134364] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:46:21.016 [DEBUG] [Thread-134364] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:46:21.016 [DEBUG] [Thread-134364] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T20:46:21.016 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T20:46:21.016 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:46:21.016 [DEBUG] [Thread-134364] [transport.py] [_log()] userauth is OK
2025-12-31T20:46:21.016 [DEBUG] [Thread-134364] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:46:21.017 [DEBUG] [Thread-134364] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:46:21.017 [DEBUG] [Thread-134364] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T20:46:21.017 [DEBUG] [Thread-134364] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:46:21.025 [INFO] [Thread-134364] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:46:21.026 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:46:21.779 [DEBUG] [Thread-134364] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:46:21.780 [DEBUG] [Thread-134364] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:46:21.780 [DEBUG] [Thread-134364] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T20:46:21.820 [DEBUG] [Thread-134364] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:46:21.820 [DEBUG] [Thread-134364] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:46:21.823 [DEBUG] [Thread-134364] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:46:21.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:46:21.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T20:46:21.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T20:46:21.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T20:46:21.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:46:21.841 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T20:46:21.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:46:21.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:46:21.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T20:46:21.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.781735 -999.00  +17.90  13.15     63  +10.90 1 2 1 1 1     1    0 4.20 -113.37 Z..sW 15.7 13.2 200.4 18.6 18.9 -16.8 18.8 -17.2 18.6 -17.4 18.9 -17.3
2025-12-31T20:46:21.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T20:46:21.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T20:46:21.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.781735
2025-12-31T20:46:21.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T20:46:21.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T20:46:21.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T20:46:21.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T20:46:21.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T20:46:21.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T20:45:53', tmtdew=7.8, humidity=60.05, cloud=0.0, wind=22.28, temperature=17.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T20:45:53', seeing=2.06, atlas_timestamp='2025-12-31T18:45:41.904', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T20:46:21.842 [DEBUG] [Thread-134364] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:46: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-12-31T20:46:21.930 [DEBUG] [Thread-134367] [transport.py] [_log()] starting thread (client mode): 0xb17479d0
2025-12-31T20:46:21.930 [DEBUG] [Thread-134367] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:46:21.944 [DEBUG] [Thread-134367] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T20:46:21.944 [INFO] [Thread-134367] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T20:46:21.952 [DEBUG] [Thread-134367] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:46:21.952 [DEBUG] [Thread-134367] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T20:46:21.952 [DEBUG] [Thread-134367] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:46:21.952 [DEBUG] [Thread-134367] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:46:21.952 [DEBUG] [Thread-134367] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:46:21.952 [DEBUG] [Thread-134367] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:46:21.952 [DEBUG] [Thread-134367] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:46:21.952 [DEBUG] [Thread-134367] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:46:21.952 [DEBUG] [Thread-134367] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:46:21.952 [DEBUG] [Thread-134367] [transport.py] [_log()] client lang: <none>
2025-12-31T20:46:21.952 [DEBUG] [Thread-134367] [transport.py] [_log()] server lang: <none>
2025-12-31T20:46:21.952 [DEBUG] [Thread-134367] [transport.py] [_log()] kex follows: False
2025-12-31T20:46:21.952 [DEBUG] [Thread-134367] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:46:21.952 [DEBUG] [Thread-134367] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:46:21.952 [DEBUG] [Thread-134367] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:46:21.952 [DEBUG] [Thread-134367] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:46:21.952 [DEBUG] [Thread-134367] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:46:21.952 [DEBUG] [Thread-134367] [transport.py] [_log()] Compression: none
2025-12-31T20:46:21.952 [DEBUG] [Thread-134367] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:46:22.012 [DEBUG] [Thread-134367] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:46:22.013 [DEBUG] [Thread-134367] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:46:22.013 [DEBUG] [Thread-134367] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T20:46:22.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T20:46:22.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:46:22.070 [DEBUG] [Thread-134367] [transport.py] [_log()] userauth is OK
2025-12-31T20:46:22.070 [DEBUG] [Thread-134367] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:46:22.070 [DEBUG] [Thread-134367] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:46:22.070 [DEBUG] [Thread-134367] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T20:46:22.070 [DEBUG] [Thread-134367] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:46:22.084 [INFO] [Thread-134367] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:46:22.084 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T20:46:22.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:46:23.231 [DEBUG] [Thread-134367] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:46:23.231 [DEBUG] [Thread-134367] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:46:23.279 [DEBUG] [Thread-134367] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:46:23.279 [DEBUG] [Thread-134367] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:46:23.291 [DEBUG] [Thread-134367] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:46:23.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:46:23.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T20:46:23.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T20:46:23.343 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:46:23.343 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:46:23.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:46:23.350 [DEBUG] [Thread-134367] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:46:29.413 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:46:29.413 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:46:32.711 [DEBUG] [Thread-134369 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:46:39.975 [DEBUG] [Thread-134370 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:46:47.749 [DEBUG] [Thread-134371 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:46:53.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T20:46:53.373 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T20:46:53.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T20:46:54.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 20, 46, 26), 7.77, 60.16, 0.0, 20.38, 17.62, 0, 0, 0, 2, 0, 0),)
2025-12-31T20:46:54.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 20:46:26
2025-12-31T20:46:54.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T20:46:54.981 [DEBUG] [Thread-134372] [transport.py] [_log()] starting thread (client mode): 0xb1746860
2025-12-31T20:46:54.981 [DEBUG] [Thread-134372] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:46:54.995 [DEBUG] [Thread-134372] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T20:46:54.995 [INFO] [Thread-134372] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T20:46:54.998 [DEBUG] [Thread-134372] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:46:54.998 [DEBUG] [Thread-134372] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T20:46:54.998 [DEBUG] [Thread-134372] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:46:54.999 [DEBUG] [Thread-134372] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:46:54.999 [DEBUG] [Thread-134372] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:46:54.999 [DEBUG] [Thread-134372] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:46:54.999 [DEBUG] [Thread-134372] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:46:54.999 [DEBUG] [Thread-134372] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:46:54.999 [DEBUG] [Thread-134372] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:46:54.999 [DEBUG] [Thread-134372] [transport.py] [_log()] client lang: <none>
2025-12-31T20:46:54.999 [DEBUG] [Thread-134372] [transport.py] [_log()] server lang: <none>
2025-12-31T20:46:54.999 [DEBUG] [Thread-134372] [transport.py] [_log()] kex follows: False
2025-12-31T20:46:54.999 [DEBUG] [Thread-134372] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:46:54.999 [DEBUG] [Thread-134372] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:46:54.999 [DEBUG] [Thread-134372] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:46:54.999 [DEBUG] [Thread-134372] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:46:54.999 [DEBUG] [Thread-134372] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:46:54.999 [DEBUG] [Thread-134372] [transport.py] [_log()] Compression: none
2025-12-31T20:46:54.999 [DEBUG] [Thread-134372] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:46:55.008 [DEBUG] [Thread-134372] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:46:55.008 [DEBUG] [Thread-134372] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:46:55.008 [DEBUG] [Thread-134372] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T20:46:55.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T20:46:55.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:46:55.009 [DEBUG] [Thread-134372] [transport.py] [_log()] userauth is OK
2025-12-31T20:46:55.009 [DEBUG] [Thread-134372] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:46:55.009 [DEBUG] [Thread-134372] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:46:55.009 [DEBUG] [Thread-134372] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T20:46:55.009 [DEBUG] [Thread-134372] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:46:55.020 [INFO] [Thread-134372] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:46:55.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:46:55.601 [DEBUG] [Thread-134372] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:46:55.601 [DEBUG] [Thread-134372] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:46:55.601 [DEBUG] [Thread-134372] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T20:46:55.641 [DEBUG] [Thread-134372] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:46:55.641 [DEBUG] [Thread-134372] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:46:55.643 [DEBUG] [Thread-134372] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:46:55.655 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:46:55.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T20:46:55.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T20:46:55.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T20:46:55.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:46:55.660 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T20:46:55.660 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:46:55.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:46:55.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T20:46:55.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.782430 -999.00  +17.80  13.85     63  +10.80 1 2 1 1 1     1    0 4.72 -93.43 Z..SW 12.4 13.8 233.3 21.1 18.9 -16.5 18.7 -16.7 18.6 -16.9 18.8 -17.0
2025-12-31T20:46:55.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T20:46:55.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T20:46:55.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.782430
2025-12-31T20:46:55.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T20:46:55.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T20:46:55.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T20:46:55.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T20:46:55.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T20:46:55.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T20:46:26', tmtdew=7.77, humidity=60.16, cloud=0.0, wind=20.38, temperature=17.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T20:46:26', seeing=1.93, atlas_timestamp='2025-12-31T18:46:41.952', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T20:46:55.663 [DEBUG] [Thread-134372] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:46:55.739 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T20:46:55.750 [DEBUG] [Thread-134375] [transport.py] [_log()] starting thread (client mode): 0xb1786a40
2025-12-31T20:46:55.750 [DEBUG] [Thread-134375] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:46:55.769 [DEBUG] [Thread-134375] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T20:46:55.769 [INFO] [Thread-134375] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T20:46:55.778 [DEBUG] [Thread-134375] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:46:55.778 [DEBUG] [Thread-134375] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T20:46:55.778 [DEBUG] [Thread-134375] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:46:55.778 [DEBUG] [Thread-134375] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:46:55.778 [DEBUG] [Thread-134375] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:46:55.778 [DEBUG] [Thread-134375] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:46:55.778 [DEBUG] [Thread-134375] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:46:55.778 [DEBUG] [Thread-134375] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:46:55.778 [DEBUG] [Thread-134375] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:46:55.778 [DEBUG] [Thread-134375] [transport.py] [_log()] client lang: <none>
2025-12-31T20:46:55.778 [DEBUG] [Thread-134375] [transport.py] [_log()] server lang: <none>
2025-12-31T20:46:55.778 [DEBUG] [Thread-134375] [transport.py] [_log()] kex follows: False
2025-12-31T20:46:55.778 [DEBUG] [Thread-134375] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:46:55.778 [DEBUG] [Thread-134375] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:46:55.778 [DEBUG] [Thread-134375] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:46:55.778 [DEBUG] [Thread-134375] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:46:55.778 [DEBUG] [Thread-134375] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:46:55.778 [DEBUG] [Thread-134375] [transport.py] [_log()] Compression: none
2025-12-31T20:46:55.778 [DEBUG] [Thread-134375] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:46:55.833 [DEBUG] [Thread-134375] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:46:55.834 [DEBUG] [Thread-134375] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:46:55.834 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T20:46:55.834 [DEBUG] [Thread-134375] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T20:46:55.834 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:46:55.894 [DEBUG] [Thread-134375] [transport.py] [_log()] userauth is OK
2025-12-31T20:46:55.894 [DEBUG] [Thread-134375] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:46:55.894 [DEBUG] [Thread-134375] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:46:55.894 [DEBUG] [Thread-134375] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T20:46:55.894 [DEBUG] [Thread-134375] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:46:55.909 [INFO] [Thread-134375] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:46:55.909 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T20:46:55.909 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:46:56.935 [DEBUG] [Thread-134375] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:46:56.935 [DEBUG] [Thread-134375] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:46:56.982 [DEBUG] [Thread-134375] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:46:56.982 [DEBUG] [Thread-134375] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:46:56.990 [DEBUG] [Thread-134375] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:46:56.998 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:46:56.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T20:46:57.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T20:46:57.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:46:57.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:46:57.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:46:57.021 [DEBUG] [Thread-134375] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:47:02.776 [DEBUG] [Thread-134377 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:47:17.820 [DEBUG] [Thread-134378 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:47:27.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T20:47:27.044 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T20:47:27.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T20:47:27.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 20, 46, 58), 7.76, 60.18, 0.0, 26.96, 17.65, 0, 0, 0, 2, 0, 0),)
2025-12-31T20:47:27.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 20:46:58
2025-12-31T20:47:28.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T20:47:28.213 [DEBUG] [Thread-134379] [transport.py] [_log()] starting thread (client mode): 0xb6ba07f0
2025-12-31T20:47:28.213 [DEBUG] [Thread-134379] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:47:28.233 [DEBUG] [Thread-134379] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T20:47:28.233 [INFO] [Thread-134379] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T20:47:28.236 [DEBUG] [Thread-134379] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:47:28.236 [DEBUG] [Thread-134379] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T20:47:28.236 [DEBUG] [Thread-134379] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:47:28.236 [DEBUG] [Thread-134379] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:47:28.236 [DEBUG] [Thread-134379] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:47:28.236 [DEBUG] [Thread-134379] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:47:28.236 [DEBUG] [Thread-134379] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:47:28.236 [DEBUG] [Thread-134379] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:47:28.236 [DEBUG] [Thread-134379] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:47:28.236 [DEBUG] [Thread-134379] [transport.py] [_log()] client lang: <none>
2025-12-31T20:47:28.236 [DEBUG] [Thread-134379] [transport.py] [_log()] server lang: <none>
2025-12-31T20:47:28.236 [DEBUG] [Thread-134379] [transport.py] [_log()] kex follows: False
2025-12-31T20:47:28.236 [DEBUG] [Thread-134379] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:47:28.236 [DEBUG] [Thread-134379] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:47:28.236 [DEBUG] [Thread-134379] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:47:28.236 [DEBUG] [Thread-134379] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:47:28.236 [DEBUG] [Thread-134379] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:47:28.236 [DEBUG] [Thread-134379] [transport.py] [_log()] Compression: none
2025-12-31T20:47:28.236 [DEBUG] [Thread-134379] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:47:28.243 [DEBUG] [Thread-134379] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:47:28.244 [DEBUG] [Thread-134379] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:47:28.244 [DEBUG] [Thread-134379] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T20:47:28.244 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T20:47:28.244 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:47:28.245 [DEBUG] [Thread-134379] [transport.py] [_log()] userauth is OK
2025-12-31T20:47:28.245 [DEBUG] [Thread-134379] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:47:28.245 [DEBUG] [Thread-134379] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:47:28.245 [DEBUG] [Thread-134379] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T20:47:28.245 [DEBUG] [Thread-134379] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:47:28.254 [INFO] [Thread-134379] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:47:28.255 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:47:28.867 [DEBUG] [Thread-134379] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:47:28.867 [DEBUG] [Thread-134379] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:47:28.868 [DEBUG] [Thread-134379] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T20:47:28.908 [DEBUG] [Thread-134379] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:47:28.908 [DEBUG] [Thread-134379] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:47:28.912 [DEBUG] [Thread-134379] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:47:28.916 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:47:28.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T20:47:28.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T20:47:28.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T20:47:28.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:47:28.929 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T20:47:28.929 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:47:28.929 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:47:28.937 [DEBUG] [Thread-134379] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:47:28.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T20:47:28.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.782777 -999.00  +17.70  14.15     64  +10.80 1 2 1 1 1     1    0 4.54 -99.22 Z..sw 12.7 14.2 222.2 32.3 18.9 -16.3 18.7 -16.4 18.5 -16.8 18.8 -17.0
2025-12-31T20:47:28.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T20:47:28.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T20:47:28.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.782777
2025-12-31T20:47:28.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T20:47:28.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T20:47:28.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T20:47:28.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T20:47:28.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T20:47:28.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T20:46:58', tmtdew=7.76, humidity=60.18, cloud=0.0, wind=26.96, temperature=17.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T20:46:58', seeing=1.73, atlas_timestamp='2025-12-31T18:47:11.933', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T20:47:29.022 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T20:47:29.036 [DEBUG] [Thread-134382] [transport.py] [_log()] starting thread (client mode): 0xb6ba1d20
2025-12-31T20:47:29.037 [DEBUG] [Thread-134382] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:47:29.051 [DEBUG] [Thread-134382] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T20:47:29.051 [INFO] [Thread-134382] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T20:47:29.058 [DEBUG] [Thread-134382] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:47:29.059 [DEBUG] [Thread-134382] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T20:47:29.059 [DEBUG] [Thread-134382] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:47:29.059 [DEBUG] [Thread-134382] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:47:29.059 [DEBUG] [Thread-134382] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:47:29.059 [DEBUG] [Thread-134382] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:47:29.059 [DEBUG] [Thread-134382] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:47:29.059 [DEBUG] [Thread-134382] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:47:29.059 [DEBUG] [Thread-134382] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:47:29.059 [DEBUG] [Thread-134382] [transport.py] [_log()] client lang: <none>
2025-12-31T20:47:29.059 [DEBUG] [Thread-134382] [transport.py] [_log()] server lang: <none>
2025-12-31T20:47:29.059 [DEBUG] [Thread-134382] [transport.py] [_log()] kex follows: False
2025-12-31T20:47:29.059 [DEBUG] [Thread-134382] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:47:29.059 [DEBUG] [Thread-134382] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:47:29.059 [DEBUG] [Thread-134382] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:47:29.059 [DEBUG] [Thread-134382] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:47:29.059 [DEBUG] [Thread-134382] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:47:29.059 [DEBUG] [Thread-134382] [transport.py] [_log()] Compression: none
2025-12-31T20:47:29.059 [DEBUG] [Thread-134382] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:47:29.121 [DEBUG] [Thread-134382] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:47:29.121 [DEBUG] [Thread-134382] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:47:29.121 [DEBUG] [Thread-134382] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T20:47:29.121 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T20:47:29.121 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:47:29.178 [DEBUG] [Thread-134382] [transport.py] [_log()] userauth is OK
2025-12-31T20:47:29.178 [DEBUG] [Thread-134382] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:47:29.178 [DEBUG] [Thread-134382] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:47:29.178 [DEBUG] [Thread-134382] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T20:47:29.178 [DEBUG] [Thread-134382] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:47:29.192 [INFO] [Thread-134382] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:47:29.192 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T20:47:29.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:47:30.025 [DEBUG] [Thread-134382] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:47:30.026 [DEBUG] [Thread-134382] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:47:30.074 [DEBUG] [Thread-134382] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:47:30.074 [DEBUG] [Thread-134382] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:47:30.083 [DEBUG] [Thread-134382] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:47:30.093 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:47:30.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T20:47:30.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T20:47:30.111 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:47:30.111 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:47:30.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:47:30.120 [DEBUG] [Thread-134382] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:47:32.856 [DEBUG] [Thread-134384 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:47:34.416 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:47:34.418 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:47:40.099 [DEBUG] [Thread-134385 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:47:47.897 [DEBUG] [Thread-134386 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:48:00.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T20:48:00.142 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T20:48:00.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T20:48:00.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 20, 47, 31), 7.73, 60.31, 0.0, 27.35, 17.69, 0, 0, 0, 2, 0, 0),)
2025-12-31T20:48:00.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 20:47:31
2025-12-31T20:48:01.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T20:48:01.167 [DEBUG] [Thread-134387] [transport.py] [_log()] starting thread (client mode): 0xb6bbde10
2025-12-31T20:48:01.167 [DEBUG] [Thread-134387] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:48:01.190 [DEBUG] [Thread-134387] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T20:48:01.190 [INFO] [Thread-134387] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T20:48:01.191 [DEBUG] [Thread-134387] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:48:01.191 [DEBUG] [Thread-134387] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T20:48:01.191 [DEBUG] [Thread-134387] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:48:01.192 [DEBUG] [Thread-134387] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:48:01.192 [DEBUG] [Thread-134387] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:48:01.192 [DEBUG] [Thread-134387] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:48:01.192 [DEBUG] [Thread-134387] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:48:01.192 [DEBUG] [Thread-134387] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:48:01.192 [DEBUG] [Thread-134387] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:48:01.192 [DEBUG] [Thread-134387] [transport.py] [_log()] client lang: <none>
2025-12-31T20:48:01.192 [DEBUG] [Thread-134387] [transport.py] [_log()] server lang: <none>
2025-12-31T20:48:01.192 [DEBUG] [Thread-134387] [transport.py] [_log()] kex follows: False
2025-12-31T20:48:01.192 [DEBUG] [Thread-134387] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:48:01.192 [DEBUG] [Thread-134387] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:48:01.192 [DEBUG] [Thread-134387] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:48:01.192 [DEBUG] [Thread-134387] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:48:01.192 [DEBUG] [Thread-134387] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:48:01.192 [DEBUG] [Thread-134387] [transport.py] [_log()] Compression: none
2025-12-31T20:48:01.193 [DEBUG] [Thread-134387] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:48:01.209 [DEBUG] [Thread-134387] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:48:01.210 [DEBUG] [Thread-134387] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:48:01.211 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T20:48:01.212 [DEBUG] [Thread-134387] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T20:48:01.213 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:48:01.214 [DEBUG] [Thread-134387] [transport.py] [_log()] userauth is OK
2025-12-31T20:48:01.214 [DEBUG] [Thread-134387] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:48:01.214 [DEBUG] [Thread-134387] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:48:01.214 [DEBUG] [Thread-134387] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T20:48:01.215 [DEBUG] [Thread-134387] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:48:01.228 [INFO] [Thread-134387] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:48:01.229 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:48:01.805 [DEBUG] [Thread-134387] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:48:01.805 [DEBUG] [Thread-134387] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:48:01.805 [DEBUG] [Thread-134387] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T20:48:01.845 [DEBUG] [Thread-134387] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:48:01.845 [DEBUG] [Thread-134387] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:48:01.847 [DEBUG] [Thread-134387] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:48:01.853 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:48:01.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T20:48:01.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T20:48:01.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T20:48:01.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:48:01.861 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T20:48:01.862 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:48:01.862 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:48:01.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T20:48:01.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.782777 -999.00  +17.70  14.15     64  +10.80 1 2 1 1 1     1    0 4.54 -99.22 Z..sw 12.7 14.2 222.2 32.3 18.9 -16.3 18.7 -16.4 18.5 -16.8 18.8 -17.0
2025-12-31T20:48:01.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T20:48:01.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T20:48:01.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.782777
2025-12-31T20:48:01.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T20:48:01.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T20:48:01.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T20:48:01.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T20:48:01.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T20:48:01.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T20:47:31', tmtdew=7.73, humidity=60.31, cloud=0.0, wind=27.35, temperature=17.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T20:47:31', seeing=2.14, atlas_timestamp='2025-12-31T18:47:11.933', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T20:48:01.866 [DEBUG] [Thread-134387] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:48:01.953 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T20:48:01.966 [DEBUG] [Thread-134390] [transport.py] [_log()] starting thread (client mode): 0xb1747820
2025-12-31T20:48:01.966 [DEBUG] [Thread-134390] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:48:01.980 [DEBUG] [Thread-134390] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T20:48:01.980 [INFO] [Thread-134390] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T20:48:01.988 [DEBUG] [Thread-134390] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:48:01.988 [DEBUG] [Thread-134390] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T20:48:01.988 [DEBUG] [Thread-134390] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:48:01.988 [DEBUG] [Thread-134390] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:48:01.988 [DEBUG] [Thread-134390] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:48:01.988 [DEBUG] [Thread-134390] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:48:01.988 [DEBUG] [Thread-134390] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:48:01.988 [DEBUG] [Thread-134390] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:48:01.988 [DEBUG] [Thread-134390] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:48:01.988 [DEBUG] [Thread-134390] [transport.py] [_log()] client lang: <none>
2025-12-31T20:48:01.988 [DEBUG] [Thread-134390] [transport.py] [_log()] server lang: <none>
2025-12-31T20:48:01.989 [DEBUG] [Thread-134390] [transport.py] [_log()] kex follows: False
2025-12-31T20:48:01.989 [DEBUG] [Thread-134390] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:48:01.989 [DEBUG] [Thread-134390] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:48:01.989 [DEBUG] [Thread-134390] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:48:01.989 [DEBUG] [Thread-134390] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:48:01.989 [DEBUG] [Thread-134390] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:48:01.989 [DEBUG] [Thread-134390] [transport.py] [_log()] Compression: none
2025-12-31T20:48:01.989 [DEBUG] [Thread-134390] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:48:02.047 [DEBUG] [Thread-134390] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:48:02.048 [DEBUG] [Thread-134390] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:48:02.048 [DEBUG] [Thread-134390] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T20:48:02.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T20:48:02.050 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:48:02.103 [DEBUG] [Thread-134390] [transport.py] [_log()] userauth is OK
2025-12-31T20:48:02.103 [DEBUG] [Thread-134390] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:48:02.103 [DEBUG] [Thread-134390] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:48:02.103 [DEBUG] [Thread-134390] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T20:48:02.103 [DEBUG] [Thread-134390] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:48:02.122 [INFO] [Thread-134390] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:48:02.123 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T20:48:02.123 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:48:02.931 [DEBUG] [Thread-134392 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:48:02.936 [DEBUG] [Thread-134390] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:48:02.936 [DEBUG] [Thread-134390] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:48:02.983 [DEBUG] [Thread-134390] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:48:02.984 [DEBUG] [Thread-134390] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:48:02.992 [DEBUG] [Thread-134390] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:48:03.001 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:48:03.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-12-31T20:48:03.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T20:48:03.020 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:48:03.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:48:03.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:48:03.029 [DEBUG] [Thread-134390] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:48:17.972 [DEBUG] [Thread-134393 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:48:33.006 [DEBUG] [Thread-134394 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:48:33.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T20:48:33.051 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T20:48:33.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T20:48:33.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 20, 48, 3), 7.72, 60.33, 0.0, 25.02, 17.62, 0, 0, 0, 2, 0, 0),)
2025-12-31T20:48:33.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 20:48:03
2025-12-31T20:48:33.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T20:48:34.098 [DEBUG] [Thread-134395] [transport.py] [_log()] starting thread (client mode): 0xb1747550
2025-12-31T20:48:34.099 [DEBUG] [Thread-134395] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:48:34.120 [DEBUG] [Thread-134395] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T20:48:34.120 [INFO] [Thread-134395] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T20:48:34.123 [DEBUG] [Thread-134395] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:48:34.123 [DEBUG] [Thread-134395] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T20:48:34.123 [DEBUG] [Thread-134395] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:48:34.123 [DEBUG] [Thread-134395] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:48:34.123 [DEBUG] [Thread-134395] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:48:34.123 [DEBUG] [Thread-134395] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:48:34.123 [DEBUG] [Thread-134395] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:48:34.123 [DEBUG] [Thread-134395] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:48:34.123 [DEBUG] [Thread-134395] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:48:34.123 [DEBUG] [Thread-134395] [transport.py] [_log()] client lang: <none>
2025-12-31T20:48:34.123 [DEBUG] [Thread-134395] [transport.py] [_log()] server lang: <none>
2025-12-31T20:48:34.123 [DEBUG] [Thread-134395] [transport.py] [_log()] kex follows: False
2025-12-31T20:48:34.123 [DEBUG] [Thread-134395] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:48:34.123 [DEBUG] [Thread-134395] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:48:34.123 [DEBUG] [Thread-134395] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:48:34.123 [DEBUG] [Thread-134395] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:48:34.123 [DEBUG] [Thread-134395] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:48:34.123 [DEBUG] [Thread-134395] [transport.py] [_log()] Compression: none
2025-12-31T20:48:34.123 [DEBUG] [Thread-134395] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:48:34.141 [DEBUG] [Thread-134395] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:48:34.142 [DEBUG] [Thread-134395] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:48:34.142 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T20:48:34.143 [DEBUG] [Thread-134395] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T20:48:34.144 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:48:34.145 [DEBUG] [Thread-134395] [transport.py] [_log()] userauth is OK
2025-12-31T20:48:34.146 [DEBUG] [Thread-134395] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:48:34.146 [DEBUG] [Thread-134395] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:48:34.146 [DEBUG] [Thread-134395] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T20:48:34.146 [DEBUG] [Thread-134395] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:48:34.165 [INFO] [Thread-134395] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:48:34.165 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:48:34.874 [DEBUG] [Thread-134395] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:48:34.875 [DEBUG] [Thread-134395] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:48:34.875 [DEBUG] [Thread-134395] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T20:48:34.916 [DEBUG] [Thread-134395] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:48:34.917 [DEBUG] [Thread-134395] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:48:34.920 [DEBUG] [Thread-134395] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:48:34.928 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:48:34.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T20:48:34.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T20:48:34.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T20:48:34.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:48:34.949 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T20:48:34.949 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:48:34.949 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:48:34.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T20:48:34.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.783124 -999.00  +17.70  13.84     64  +10.90 1 2 1 1 1     1    0 4.76 -93.75 Z..sw 15.6 13.8 223.3 24.8 18.8 -16.1 18.7 -16.0 18.5 -16.5 18.8 -16.7
2025-12-31T20:48:34.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T20:48:34.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T20:48:34.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.783124
2025-12-31T20:48:34.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T20:48:34.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T20:48:34.952 [DEBUG] [Thread-134395] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:48:34.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T20:48:34.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T20:48:34.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T20:48:34.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T20:48:03', tmtdew=7.72, humidity=60.33, cloud=0.0, wind=25.02, temperature=17.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T20:48:03', seeing=2.36, atlas_timestamp='2025-12-31T18:47:41.914', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T20:48:35.038 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T20:48:35.051 [DEBUG] [Thread-134398] [transport.py] [_log()] starting thread (client mode): 0xb9592710
2025-12-31T20:48:35.051 [DEBUG] [Thread-134398] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:48:35.066 [DEBUG] [Thread-134398] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T20:48:35.066 [INFO] [Thread-134398] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T20:48:35.073 [DEBUG] [Thread-134398] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:48:35.073 [DEBUG] [Thread-134398] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T20:48:35.073 [DEBUG] [Thread-134398] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:48:35.074 [DEBUG] [Thread-134398] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:48:35.074 [DEBUG] [Thread-134398] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:48:35.074 [DEBUG] [Thread-134398] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:48:35.074 [DEBUG] [Thread-134398] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:48:35.074 [DEBUG] [Thread-134398] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:48:35.074 [DEBUG] [Thread-134398] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:48:35.074 [DEBUG] [Thread-134398] [transport.py] [_log()] client lang: <none>
2025-12-31T20:48:35.074 [DEBUG] [Thread-134398] [transport.py] [_log()] server lang: <none>
2025-12-31T20:48:35.074 [DEBUG] [Thread-134398] [transport.py] [_log()] kex follows: False
2025-12-31T20:48:35.074 [DEBUG] [Thread-134398] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:48:35.074 [DEBUG] [Thread-134398] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:48:35.075 [DEBUG] [Thread-134398] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:48:35.075 [DEBUG] [Thread-134398] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:48:35.075 [DEBUG] [Thread-134398] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:48:35.075 [DEBUG] [Thread-134398] [transport.py] [_log()] Compression: none
2025-12-31T20:48:35.075 [DEBUG] [Thread-134398] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:48:35.132 [DEBUG] [Thread-134398] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:48:35.133 [DEBUG] [Thread-134398] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:48:35.133 [DEBUG] [Thread-134398] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T20:48:35.133 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T20:48:35.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:48:35.191 [DEBUG] [Thread-134398] [transport.py] [_log()] userauth is OK
2025-12-31T20:48:35.192 [DEBUG] [Thread-134398] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:48:35.192 [DEBUG] [Thread-134398] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:48:35.192 [DEBUG] [Thread-134398] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T20:48:35.192 [DEBUG] [Thread-134398] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:48:35.211 [INFO] [Thread-134398] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:48:35.211 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T20:48:35.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:48:36.022 [DEBUG] [Thread-134398] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:48:36.023 [DEBUG] [Thread-134398] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:48:36.071 [DEBUG] [Thread-134398] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:48:36.071 [DEBUG] [Thread-134398] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:48:36.081 [DEBUG] [Thread-134398] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:48:36.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:48:36.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T20:48:36.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T20:48:36.107 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:48:36.107 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:48:36.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:48:36.116 [DEBUG] [Thread-134398] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:48:39.777 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:48:39.779 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:48:40.195 [DEBUG] [Thread-134400 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:48:48.040 [DEBUG] [Thread-134401 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:49:03.100 [DEBUG] [Thread-134402 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:49:06.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T20:49:06.133 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T20:49:06.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T20:49:06.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 20, 48, 36), 7.59, 60.98, 0.0, 25.58, 17.55, 0, 0, 0, 2, 0, 0),)
2025-12-31T20:49:06.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 20:48:36
2025-12-31T20:49:07.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T20:49:07.167 [DEBUG] [Thread-134403] [transport.py] [_log()] starting thread (client mode): 0xb1785840
2025-12-31T20:49:07.176 [DEBUG] [Thread-134403] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:49:07.187 [DEBUG] [Thread-134403] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T20:49:07.187 [INFO] [Thread-134403] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T20:49:07.190 [DEBUG] [Thread-134403] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:49:07.190 [DEBUG] [Thread-134403] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T20:49:07.191 [DEBUG] [Thread-134403] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:49:07.191 [DEBUG] [Thread-134403] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:49:07.191 [DEBUG] [Thread-134403] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:49:07.191 [DEBUG] [Thread-134403] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:49:07.191 [DEBUG] [Thread-134403] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:49:07.191 [DEBUG] [Thread-134403] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:49:07.191 [DEBUG] [Thread-134403] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:49:07.191 [DEBUG] [Thread-134403] [transport.py] [_log()] client lang: <none>
2025-12-31T20:49:07.191 [DEBUG] [Thread-134403] [transport.py] [_log()] server lang: <none>
2025-12-31T20:49:07.191 [DEBUG] [Thread-134403] [transport.py] [_log()] kex follows: False
2025-12-31T20:49:07.191 [DEBUG] [Thread-134403] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:49:07.191 [DEBUG] [Thread-134403] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:49:07.191 [DEBUG] [Thread-134403] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:49:07.191 [DEBUG] [Thread-134403] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:49:07.191 [DEBUG] [Thread-134403] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:49:07.191 [DEBUG] [Thread-134403] [transport.py] [_log()] Compression: none
2025-12-31T20:49:07.191 [DEBUG] [Thread-134403] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:49:07.209 [DEBUG] [Thread-134403] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:49:07.209 [DEBUG] [Thread-134403] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:49:07.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T20:49:07.210 [DEBUG] [Thread-134403] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T20:49:07.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:49:07.252 [DEBUG] [Thread-134403] [transport.py] [_log()] userauth is OK
2025-12-31T20:49:07.252 [DEBUG] [Thread-134403] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:49:07.253 [DEBUG] [Thread-134403] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:49:07.253 [DEBUG] [Thread-134403] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T20:49:07.253 [DEBUG] [Thread-134403] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:49:07.275 [INFO] [Thread-134403] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:49:07.276 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:49:07.902 [DEBUG] [Thread-134403] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:49:07.903 [DEBUG] [Thread-134403] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:49:07.903 [DEBUG] [Thread-134403] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T20:49:07.944 [DEBUG] [Thread-134403] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:49:07.944 [DEBUG] [Thread-134403] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:49:07.949 [DEBUG] [Thread-134403] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:49:07.962 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:49:07.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T20:49:07.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T20:49:07.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T20:49:07.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:49:07.972 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T20:49:07.972 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:49:07.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:49:07.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T20:49:07.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.783471 -999.00  +17.70  14.57     64  +10.90 1 2 1 1 1     1    0 4.54 -95.31 Z..sW 22.0 14.6 208.4 22.4 18.9 -15.6 18.7 -15.4 18.4 -16.0 18.8 -16.2
2025-12-31T20:49:07.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T20:49:07.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T20:49:07.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.783471
2025-12-31T20:49:07.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T20:49:07.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T20:49:07.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T20:49:07.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T20:49:07.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T20:49:07.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T20:48:36', tmtdew=7.59, humidity=60.98, cloud=0.0, wind=25.58, temperature=17.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T20:48:36', seeing=1.93, atlas_timestamp='2025-12-31T18:48:11.894', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T20:49:07.976 [DEBUG] [Thread-134403] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:49:08.059 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T20:49:08.072 [DEBUG] [Thread-134406] [transport.py] [_log()] starting thread (client mode): 0xb1766d10
2025-12-31T20:49:08.072 [DEBUG] [Thread-134406] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:49:08.087 [DEBUG] [Thread-134406] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T20:49:08.087 [INFO] [Thread-134406] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T20:49:08.094 [DEBUG] [Thread-134406] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:49:08.095 [DEBUG] [Thread-134406] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T20:49:08.095 [DEBUG] [Thread-134406] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:49:08.095 [DEBUG] [Thread-134406] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:49:08.095 [DEBUG] [Thread-134406] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:49:08.095 [DEBUG] [Thread-134406] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:49:08.095 [DEBUG] [Thread-134406] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:49:08.095 [DEBUG] [Thread-134406] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:49:08.095 [DEBUG] [Thread-134406] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:49:08.095 [DEBUG] [Thread-134406] [transport.py] [_log()] client lang: <none>
2025-12-31T20:49:08.095 [DEBUG] [Thread-134406] [transport.py] [_log()] server lang: <none>
2025-12-31T20:49:08.095 [DEBUG] [Thread-134406] [transport.py] [_log()] kex follows: False
2025-12-31T20:49:08.095 [DEBUG] [Thread-134406] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:49:08.095 [DEBUG] [Thread-134406] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:49:08.095 [DEBUG] [Thread-134406] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:49:08.095 [DEBUG] [Thread-134406] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:49:08.095 [DEBUG] [Thread-134406] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:49:08.095 [DEBUG] [Thread-134406] [transport.py] [_log()] Compression: none
2025-12-31T20:49:08.095 [DEBUG] [Thread-134406] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:49:08.155 [DEBUG] [Thread-134406] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:49:08.155 [DEBUG] [Thread-134406] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:49:08.156 [DEBUG] [Thread-134406] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T20:49:08.156 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T20:49:08.165 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:49:08.215 [DEBUG] [Thread-134406] [transport.py] [_log()] userauth is OK
2025-12-31T20:49:08.215 [DEBUG] [Thread-134406] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:49:08.215 [DEBUG] [Thread-134406] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:49:08.215 [DEBUG] [Thread-134406] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T20:49:08.215 [DEBUG] [Thread-134406] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:49:08.233 [INFO] [Thread-134406] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:49:08.234 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T20:49:08.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:49:09.073 [DEBUG] [Thread-134406] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:49:09.074 [DEBUG] [Thread-134406] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:49:09.121 [DEBUG] [Thread-134406] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:49:09.121 [DEBUG] [Thread-134406] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:49:09.129 [DEBUG] [Thread-134406] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:49:09.137 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:49:09.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T20:49:09.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-12-31T20:49:09.153 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:49:09.153 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:49:09.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:49:09.161 [DEBUG] [Thread-134406] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:49:18.132 [DEBUG] [Thread-134408 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:49:33.181 [DEBUG] [Thread-134409 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:49:39.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T20:49:39.175 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T20:49:39.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T20:49:39.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 20, 49, 8), 7.55, 61.15, 0.0, 23.61, 17.59, 0, 0, 0, 2, 0, 0),)
2025-12-31T20:49:39.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 20:49:08
2025-12-31T20:49:40.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T20:49:40.234 [DEBUG] [Thread-134410] [transport.py] [_log()] starting thread (client mode): 0xb17861a0
2025-12-31T20:49:40.234 [DEBUG] [Thread-134410] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:49:40.255 [DEBUG] [Thread-134410] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T20:49:40.256 [INFO] [Thread-134410] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T20:49:40.258 [DEBUG] [Thread-134412 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:49:40.259 [DEBUG] [Thread-134410] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:49:40.259 [DEBUG] [Thread-134410] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T20:49:40.259 [DEBUG] [Thread-134410] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:49:40.259 [DEBUG] [Thread-134410] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:49:40.259 [DEBUG] [Thread-134410] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:49:40.259 [DEBUG] [Thread-134410] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:49:40.259 [DEBUG] [Thread-134410] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:49:40.259 [DEBUG] [Thread-134410] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:49:40.259 [DEBUG] [Thread-134410] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:49:40.259 [DEBUG] [Thread-134410] [transport.py] [_log()] client lang: <none>
2025-12-31T20:49:40.259 [DEBUG] [Thread-134410] [transport.py] [_log()] server lang: <none>
2025-12-31T20:49:40.259 [DEBUG] [Thread-134410] [transport.py] [_log()] kex follows: False
2025-12-31T20:49:40.259 [DEBUG] [Thread-134410] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:49:40.259 [DEBUG] [Thread-134410] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:49:40.259 [DEBUG] [Thread-134410] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:49:40.260 [DEBUG] [Thread-134410] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:49:40.260 [DEBUG] [Thread-134410] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:49:40.260 [DEBUG] [Thread-134410] [transport.py] [_log()] Compression: none
2025-12-31T20:49:40.260 [DEBUG] [Thread-134410] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:49:40.275 [DEBUG] [Thread-134410] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:49:40.276 [DEBUG] [Thread-134410] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:49:40.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T20:49:40.276 [DEBUG] [Thread-134410] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T20:49:40.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:49:40.277 [DEBUG] [Thread-134410] [transport.py] [_log()] userauth is OK
2025-12-31T20:49:40.277 [DEBUG] [Thread-134410] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:49:40.277 [DEBUG] [Thread-134410] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:49:40.277 [DEBUG] [Thread-134410] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T20:49:40.277 [DEBUG] [Thread-134410] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:49:40.287 [INFO] [Thread-134410] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:49:40.288 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:49:41.036 [DEBUG] [Thread-134410] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:49:41.036 [DEBUG] [Thread-134410] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:49:41.036 [DEBUG] [Thread-134410] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T20:49:41.076 [DEBUG] [Thread-134410] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:49:41.076 [DEBUG] [Thread-134410] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:49:41.080 [DEBUG] [Thread-134410] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:49:41.092 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:49:41.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T20:49:41.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T20:49:41.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T20:49:41.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:49:41.100 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T20:49:41.100 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:49:41.100 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:49:41.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T20:49:41.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.783819 -999.00  +17.60  16.70     64  +10.90 1 2 1 1 1     0    0 4.89 -86.16 Z...W 11.4 16.7 215.0 21.6 18.8 -14.9 18.7 -15.1 18.5 -15.7 18.8 -15.8
2025-12-31T20:49:41.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T20:49:41.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T20:49:41.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.783819
2025-12-31T20:49:41.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T20:49:41.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T20:49:41.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T20:49:41.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T20:49:41.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T20:49:41.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T20:49:08', tmtdew=7.55, humidity=61.15, cloud=0.0, wind=23.61, temperature=17.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T20:49:08', seeing=1.93, atlas_timestamp='2025-12-31T18:48:41.962', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T20:49:41.101 [DEBUG] [Thread-134410] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:49:41.175 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T20:49:41.186 [DEBUG] [Thread-134414] [transport.py] [_log()] starting thread (client mode): 0xb6ba14e0
2025-12-31T20:49:41.187 [DEBUG] [Thread-134414] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:49:41.202 [DEBUG] [Thread-134414] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T20:49:41.202 [INFO] [Thread-134414] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T20:49:41.210 [DEBUG] [Thread-134414] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:49:41.210 [DEBUG] [Thread-134414] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T20:49:41.210 [DEBUG] [Thread-134414] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:49:41.210 [DEBUG] [Thread-134414] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:49:41.210 [DEBUG] [Thread-134414] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:49:41.210 [DEBUG] [Thread-134414] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:49:41.210 [DEBUG] [Thread-134414] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:49:41.210 [DEBUG] [Thread-134414] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:49:41.210 [DEBUG] [Thread-134414] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:49:41.210 [DEBUG] [Thread-134414] [transport.py] [_log()] client lang: <none>
2025-12-31T20:49:41.210 [DEBUG] [Thread-134414] [transport.py] [_log()] server lang: <none>
2025-12-31T20:49:41.210 [DEBUG] [Thread-134414] [transport.py] [_log()] kex follows: False
2025-12-31T20:49:41.210 [DEBUG] [Thread-134414] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:49:41.210 [DEBUG] [Thread-134414] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:49:41.210 [DEBUG] [Thread-134414] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:49:41.210 [DEBUG] [Thread-134414] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:49:41.210 [DEBUG] [Thread-134414] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:49:41.210 [DEBUG] [Thread-134414] [transport.py] [_log()] Compression: none
2025-12-31T20:49:41.210 [DEBUG] [Thread-134414] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:49:41.265 [DEBUG] [Thread-134414] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:49:41.265 [DEBUG] [Thread-134414] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:49:41.266 [DEBUG] [Thread-134414] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T20:49:41.266 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T20:49:41.266 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:49:41.323 [DEBUG] [Thread-134414] [transport.py] [_log()] userauth is OK
2025-12-31T20:49:41.323 [DEBUG] [Thread-134414] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:49:41.323 [DEBUG] [Thread-134414] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:49:41.323 [DEBUG] [Thread-134414] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T20:49:41.323 [DEBUG] [Thread-134414] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:49:41.341 [INFO] [Thread-134414] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:49:41.342 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T20:49:41.342 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:49:42.378 [DEBUG] [Thread-134414] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:49:42.387 [DEBUG] [Thread-134414] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:49:42.426 [DEBUG] [Thread-134414] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:49:42.426 [DEBUG] [Thread-134414] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:49:42.435 [DEBUG] [Thread-134414] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:49:42.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:49:42.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T20:49:42.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T20:49:42.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:49:42.458 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:49:42.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:49:42.466 [DEBUG] [Thread-134414] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:49:48.212 [DEBUG] [Thread-134416 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:49:48.790 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:49:48.800 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:50:03.271 [DEBUG] [Thread-134417 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:50:12.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T20:50:12.489 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T20:50:12.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-12-31T20:50:13.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 20, 49, 40), 7.49, 61.16, 0.0, 23.38, 17.49, 0, 0, 0, 2, 0, 0),)
2025-12-31T20:50:13.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 20:49:40
2025-12-31T20:50:13.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T20:50:13.548 [DEBUG] [Thread-134418] [transport.py] [_log()] starting thread (client mode): 0xb95929e0
2025-12-31T20:50:13.549 [DEBUG] [Thread-134418] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:50:13.560 [DEBUG] [Thread-134418] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T20:50:13.560 [INFO] [Thread-134418] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T20:50:13.563 [DEBUG] [Thread-134418] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:50:13.563 [DEBUG] [Thread-134418] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T20:50:13.563 [DEBUG] [Thread-134418] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:50:13.563 [DEBUG] [Thread-134418] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:50:13.563 [DEBUG] [Thread-134418] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:50:13.563 [DEBUG] [Thread-134418] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:50:13.563 [DEBUG] [Thread-134418] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:50:13.563 [DEBUG] [Thread-134418] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:50:13.563 [DEBUG] [Thread-134418] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:50:13.563 [DEBUG] [Thread-134418] [transport.py] [_log()] client lang: <none>
2025-12-31T20:50:13.564 [DEBUG] [Thread-134418] [transport.py] [_log()] server lang: <none>
2025-12-31T20:50:13.564 [DEBUG] [Thread-134418] [transport.py] [_log()] kex follows: False
2025-12-31T20:50:13.564 [DEBUG] [Thread-134418] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:50:13.564 [DEBUG] [Thread-134418] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:50:13.564 [DEBUG] [Thread-134418] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:50:13.564 [DEBUG] [Thread-134418] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:50:13.564 [DEBUG] [Thread-134418] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:50:13.564 [DEBUG] [Thread-134418] [transport.py] [_log()] Compression: none
2025-12-31T20:50:13.564 [DEBUG] [Thread-134418] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:50:13.580 [DEBUG] [Thread-134418] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:50:13.580 [DEBUG] [Thread-134418] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:50:13.580 [DEBUG] [Thread-134418] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T20:50:13.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T20:50:13.581 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:50:13.581 [DEBUG] [Thread-134418] [transport.py] [_log()] userauth is OK
2025-12-31T20:50:13.581 [DEBUG] [Thread-134418] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:50:13.581 [DEBUG] [Thread-134418] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:50:13.581 [DEBUG] [Thread-134418] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T20:50:13.581 [DEBUG] [Thread-134418] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:50:13.594 [INFO] [Thread-134418] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:50:13.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:50:16.637 [DEBUG] [Thread-134418] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:50:16.637 [DEBUG] [Thread-134418] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:50:16.637 [DEBUG] [Thread-134418] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T20:50:16.678 [DEBUG] [Thread-134418] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:50:16.678 [DEBUG] [Thread-134418] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:50:16.680 [DEBUG] [Thread-134418] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:50:16.792 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:50:16.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T20:50:16.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T20:50:16.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T20:50:16.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:50:16.799 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T20:50:16.799 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:50:16.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:50:16.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T20:50:16.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.784166 -999.00  +17.60  19.30     64  +10.90 1 2 1 1 1     0    0 5.05 -78.44 Z...W 16.5 19.3 220.1 27.0 18.8 -14.9 18.7 -14.9 18.4 -15.5 18.8 -15.4
2025-12-31T20:50:16.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T20:50:16.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T20:50:16.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.784166
2025-12-31T20:50:16.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T20:50:16.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T20:50:16.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T20:50:16.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T20:50:16.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T20:50:16.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T20:49:40', tmtdew=7.49, humidity=61.16, cloud=0.0, wind=23.38, temperature=17.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T20:49:40', seeing=1.84, atlas_timestamp='2025-12-31T18:49:11.942', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T20:50:16.800 [DEBUG] [Thread-134418] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:50:16.875 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T20:50:16.886 [DEBUG] [Thread-134421] [transport.py] [_log()] starting thread (client mode): 0xb95d7c70
2025-12-31T20:50:16.886 [DEBUG] [Thread-134421] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:50:16.901 [DEBUG] [Thread-134421] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T20:50:16.901 [INFO] [Thread-134421] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T20:50:16.908 [DEBUG] [Thread-134421] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:50:16.908 [DEBUG] [Thread-134421] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T20:50:16.908 [DEBUG] [Thread-134421] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:50:16.908 [DEBUG] [Thread-134421] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:50:16.908 [DEBUG] [Thread-134421] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:50:16.908 [DEBUG] [Thread-134421] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:50:16.908 [DEBUG] [Thread-134421] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:50:16.908 [DEBUG] [Thread-134421] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:50:16.908 [DEBUG] [Thread-134421] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:50:16.908 [DEBUG] [Thread-134421] [transport.py] [_log()] client lang: <none>
2025-12-31T20:50:16.908 [DEBUG] [Thread-134421] [transport.py] [_log()] server lang: <none>
2025-12-31T20:50:16.908 [DEBUG] [Thread-134421] [transport.py] [_log()] kex follows: False
2025-12-31T20:50:16.908 [DEBUG] [Thread-134421] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:50:16.908 [DEBUG] [Thread-134421] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:50:16.909 [DEBUG] [Thread-134421] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:50:16.909 [DEBUG] [Thread-134421] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:50:16.909 [DEBUG] [Thread-134421] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:50:16.909 [DEBUG] [Thread-134421] [transport.py] [_log()] Compression: none
2025-12-31T20:50:16.909 [DEBUG] [Thread-134421] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:50:16.967 [DEBUG] [Thread-134421] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:50:16.967 [DEBUG] [Thread-134421] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:50:16.967 [DEBUG] [Thread-134421] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T20:50:16.967 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T20:50:16.967 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:50:17.024 [DEBUG] [Thread-134421] [transport.py] [_log()] userauth is OK
2025-12-31T20:50:17.024 [DEBUG] [Thread-134421] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:50:17.024 [DEBUG] [Thread-134421] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:50:17.024 [DEBUG] [Thread-134421] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T20:50:17.024 [DEBUG] [Thread-134421] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:50:17.038 [INFO] [Thread-134421] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:50:17.038 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T20:50:17.038 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:50:18.226 [DEBUG] [Thread-134421] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:50:18.227 [DEBUG] [Thread-134421] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:50:18.274 [DEBUG] [Thread-134421] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:50:18.274 [DEBUG] [Thread-134421] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:50:18.282 [DEBUG] [Thread-134421] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:50:18.292 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:50:18.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T20:50:18.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T20:50:18.301 [DEBUG] [Thread-134423 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:50:18.308 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:50:18.308 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:50:18.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:50:18.316 [DEBUG] [Thread-134421] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:50:33.340 [DEBUG] [Thread-134424 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:50:40.330 [DEBUG] [Thread-134425 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:50:48.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T20:50:48.309 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T20:50:48.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T20:50:48.374 [DEBUG] [Thread-134426 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:50:49.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 20, 50, 45), 7.39, 61.84, 0.0, 24.38, 17.47, 0, 0, 0, 2, 0, 0),)
2025-12-31T20:50:49.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 20:50:45
2025-12-31T20:50:49.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T20:50:49.317 [DEBUG] [Thread-134427] [transport.py] [_log()] starting thread (client mode): 0xb1777a00
2025-12-31T20:50:49.317 [DEBUG] [Thread-134427] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:50:49.336 [DEBUG] [Thread-134427] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T20:50:49.337 [INFO] [Thread-134427] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T20:50:49.338 [DEBUG] [Thread-134427] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:50:49.339 [DEBUG] [Thread-134427] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T20:50:49.339 [DEBUG] [Thread-134427] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:50:49.339 [DEBUG] [Thread-134427] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:50:49.339 [DEBUG] [Thread-134427] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:50:49.339 [DEBUG] [Thread-134427] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:50:49.339 [DEBUG] [Thread-134427] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:50:49.339 [DEBUG] [Thread-134427] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:50:49.339 [DEBUG] [Thread-134427] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:50:49.339 [DEBUG] [Thread-134427] [transport.py] [_log()] client lang: <none>
2025-12-31T20:50:49.339 [DEBUG] [Thread-134427] [transport.py] [_log()] server lang: <none>
2025-12-31T20:50:49.339 [DEBUG] [Thread-134427] [transport.py] [_log()] kex follows: False
2025-12-31T20:50:49.339 [DEBUG] [Thread-134427] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:50:49.339 [DEBUG] [Thread-134427] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:50:49.339 [DEBUG] [Thread-134427] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:50:49.339 [DEBUG] [Thread-134427] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:50:49.339 [DEBUG] [Thread-134427] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:50:49.339 [DEBUG] [Thread-134427] [transport.py] [_log()] Compression: none
2025-12-31T20:50:49.339 [DEBUG] [Thread-134427] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:50:49.355 [DEBUG] [Thread-134427] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:50:49.355 [DEBUG] [Thread-134427] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:50:49.356 [DEBUG] [Thread-134427] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T20:50:49.356 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T20:50:49.357 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:50:49.358 [DEBUG] [Thread-134427] [transport.py] [_log()] userauth is OK
2025-12-31T20:50:49.358 [DEBUG] [Thread-134427] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:50:49.358 [DEBUG] [Thread-134427] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:50:49.358 [DEBUG] [Thread-134427] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T20:50:49.358 [DEBUG] [Thread-134427] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:50:49.377 [INFO] [Thread-134427] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:50:49.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:50:49.969 [DEBUG] [Thread-134427] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:50:49.978 [DEBUG] [Thread-134427] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:50:49.978 [DEBUG] [Thread-134427] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T20:50:50.010 [DEBUG] [Thread-134427] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:50:50.010 [DEBUG] [Thread-134427] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:50:50.014 [DEBUG] [Thread-134427] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:50:50.029 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:50:50.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T20:50:50.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T20:50:50.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T20:50:50.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:50:50.040 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T20:50:50.040 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:50:50.040 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:50:50.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T20:50:50.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.785208 -999.00  +17.60  15.83     65  +11.00 1 2 1 1 1     0    0 4.72 -87.32 ....W 18.5 15.8 221.3 28.9 18.7 -14.3 18.6 -14.6 18.4 -15.1 18.7 -15.0
2025-12-31T20:50:50.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T20:50:50.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T20:50:50.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.785208
2025-12-31T20:50:50.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T20:50:50.042 [DEBUG] [Thread-134427] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:50:50.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T20:50:50.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T20:50:50.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T20:50:50.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T20:50:50.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T20:50:45', tmtdew=7.39, humidity=61.84, cloud=0.0, wind=24.38, temperature=17.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T20:50:45', seeing=2.23, atlas_timestamp='2025-12-31T18:50:41.971', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T20:50:50.129 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T20:50:50.141 [DEBUG] [Thread-134430] [transport.py] [_log()] starting thread (client mode): 0xb6ba0f40
2025-12-31T20:50:50.141 [DEBUG] [Thread-134430] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:50:50.155 [DEBUG] [Thread-134430] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T20:50:50.156 [INFO] [Thread-134430] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T20:50:50.163 [DEBUG] [Thread-134430] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:50:50.163 [DEBUG] [Thread-134430] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T20:50:50.163 [DEBUG] [Thread-134430] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:50:50.163 [DEBUG] [Thread-134430] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:50:50.163 [DEBUG] [Thread-134430] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:50:50.163 [DEBUG] [Thread-134430] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:50:50.163 [DEBUG] [Thread-134430] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:50:50.163 [DEBUG] [Thread-134430] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:50:50.163 [DEBUG] [Thread-134430] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:50:50.163 [DEBUG] [Thread-134430] [transport.py] [_log()] client lang: <none>
2025-12-31T20:50:50.163 [DEBUG] [Thread-134430] [transport.py] [_log()] server lang: <none>
2025-12-31T20:50:50.164 [DEBUG] [Thread-134430] [transport.py] [_log()] kex follows: False
2025-12-31T20:50:50.164 [DEBUG] [Thread-134430] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:50:50.164 [DEBUG] [Thread-134430] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:50:50.164 [DEBUG] [Thread-134430] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:50:50.164 [DEBUG] [Thread-134430] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:50:50.164 [DEBUG] [Thread-134430] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:50:50.164 [DEBUG] [Thread-134430] [transport.py] [_log()] Compression: none
2025-12-31T20:50:50.164 [DEBUG] [Thread-134430] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:50:50.223 [DEBUG] [Thread-134430] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:50:50.224 [DEBUG] [Thread-134430] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:50:50.224 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T20:50:50.224 [DEBUG] [Thread-134430] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T20:50:50.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:50:50.281 [DEBUG] [Thread-134430] [transport.py] [_log()] userauth is OK
2025-12-31T20:50:50.281 [DEBUG] [Thread-134430] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:50:50.282 [DEBUG] [Thread-134430] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:50:50.282 [DEBUG] [Thread-134430] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T20:50:50.282 [DEBUG] [Thread-134430] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:50:50.299 [INFO] [Thread-134430] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:50:50.299 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T20:50:50.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:50:51.402 [DEBUG] [Thread-134430] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:50:51.411 [DEBUG] [Thread-134430] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:50:51.452 [DEBUG] [Thread-134430] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:50:51.452 [DEBUG] [Thread-134430] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:50:51.460 [DEBUG] [Thread-134430] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:50:51.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:50:51.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T20:50:51.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T20:50:51.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:50:51.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:50:51.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:50:51.495 [DEBUG] [Thread-134430] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:50:54.193 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:50:54.194 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:51:03.402 [DEBUG] [Thread-134432 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:51:18.449 [DEBUG] [Thread-134433 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:51:21.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T20:51:21.519 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T20:51:21.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T20:51:22.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 20, 51, 17), 7.39, 61.88, 0.0, 23.86, 17.46, 0, 0, 0, 2, 0, 0),)
2025-12-31T20:51:22.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 20:51:17
2025-12-31T20:51:22.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T20:51:22.536 [DEBUG] [Thread-134434] [transport.py] [_log()] starting thread (client mode): 0xb6ba1240
2025-12-31T20:51:22.536 [DEBUG] [Thread-134434] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:51:22.554 [DEBUG] [Thread-134434] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T20:51:22.554 [INFO] [Thread-134434] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T20:51:22.557 [DEBUG] [Thread-134434] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:51:22.557 [DEBUG] [Thread-134434] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T20:51:22.557 [DEBUG] [Thread-134434] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:51:22.558 [DEBUG] [Thread-134434] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:51:22.558 [DEBUG] [Thread-134434] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:51:22.558 [DEBUG] [Thread-134434] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:51:22.558 [DEBUG] [Thread-134434] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:51:22.558 [DEBUG] [Thread-134434] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:51:22.558 [DEBUG] [Thread-134434] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:51:22.558 [DEBUG] [Thread-134434] [transport.py] [_log()] client lang: <none>
2025-12-31T20:51:22.558 [DEBUG] [Thread-134434] [transport.py] [_log()] server lang: <none>
2025-12-31T20:51:22.558 [DEBUG] [Thread-134434] [transport.py] [_log()] kex follows: False
2025-12-31T20:51:22.558 [DEBUG] [Thread-134434] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:51:22.558 [DEBUG] [Thread-134434] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:51:22.558 [DEBUG] [Thread-134434] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:51:22.558 [DEBUG] [Thread-134434] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:51:22.558 [DEBUG] [Thread-134434] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:51:22.558 [DEBUG] [Thread-134434] [transport.py] [_log()] Compression: none
2025-12-31T20:51:22.558 [DEBUG] [Thread-134434] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:51:22.575 [DEBUG] [Thread-134434] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:51:22.576 [DEBUG] [Thread-134434] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:51:22.576 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T20:51:22.577 [DEBUG] [Thread-134434] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T20:51:22.577 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:51:22.579 [DEBUG] [Thread-134434] [transport.py] [_log()] userauth is OK
2025-12-31T20:51:22.579 [DEBUG] [Thread-134434] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:51:22.579 [DEBUG] [Thread-134434] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:51:22.579 [DEBUG] [Thread-134434] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T20:51:22.579 [DEBUG] [Thread-134434] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:51:22.596 [INFO] [Thread-134434] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:51:22.596 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:51:23.341 [DEBUG] [Thread-134434] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:51:23.342 [DEBUG] [Thread-134434] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:51:23.342 [DEBUG] [Thread-134434] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T20:51:23.382 [DEBUG] [Thread-134434] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:51:23.383 [DEBUG] [Thread-134434] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:51:23.386 [DEBUG] [Thread-134434] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:51:23.393 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:51:23.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T20:51:23.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T20:51:23.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T20:51:23.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:51:23.406 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T20:51:23.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:51:23.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:51:23.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T20:51:23.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.785555 -999.00  +17.60  13.49     65  +11.00 1 2 1 1 1     0    0 4.78 -82.93 ...SW 15.0 13.5 227.7 23.9 18.7 -13.9 18.6 -14.5 18.4 -14.8 18.6 -14.6
2025-12-31T20:51:23.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T20:51:23.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T20:51:23.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.785555
2025-12-31T20:51:23.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T20:51:23.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T20:51:23.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T20:51:23.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T20:51:23.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T20:51:23.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T20:51:17', tmtdew=7.39, humidity=61.88, cloud=0.0, wind=23.86, temperature=17.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T20:51:17', seeing=2.04, atlas_timestamp='2025-12-31T18:51:11.952', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T20:51:23.409 [DEBUG] [Thread-134434] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:51:23.495 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T20:51:23.506 [DEBUG] [Thread-134437] [transport.py] [_log()] starting thread (client mode): 0xb6ba2c20
2025-12-31T20:51:23.506 [DEBUG] [Thread-134437] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:51:23.522 [DEBUG] [Thread-134437] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T20:51:23.522 [INFO] [Thread-134437] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T20:51:23.529 [DEBUG] [Thread-134437] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:51:23.530 [DEBUG] [Thread-134437] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T20:51:23.530 [DEBUG] [Thread-134437] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:51:23.530 [DEBUG] [Thread-134437] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:51:23.530 [DEBUG] [Thread-134437] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:51:23.530 [DEBUG] [Thread-134437] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:51:23.530 [DEBUG] [Thread-134437] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:51:23.530 [DEBUG] [Thread-134437] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:51:23.530 [DEBUG] [Thread-134437] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:51:23.530 [DEBUG] [Thread-134437] [transport.py] [_log()] client lang: <none>
2025-12-31T20:51:23.530 [DEBUG] [Thread-134437] [transport.py] [_log()] server lang: <none>
2025-12-31T20:51:23.530 [DEBUG] [Thread-134437] [transport.py] [_log()] kex follows: False
2025-12-31T20:51:23.530 [DEBUG] [Thread-134437] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:51:23.530 [DEBUG] [Thread-134437] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:51:23.530 [DEBUG] [Thread-134437] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:51:23.530 [DEBUG] [Thread-134437] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:51:23.530 [DEBUG] [Thread-134437] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:51:23.530 [DEBUG] [Thread-134437] [transport.py] [_log()] Compression: none
2025-12-31T20:51:23.531 [DEBUG] [Thread-134437] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:51:23.592 [DEBUG] [Thread-134437] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:51:23.593 [DEBUG] [Thread-134437] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:51:23.593 [DEBUG] [Thread-134437] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T20:51:23.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T20:51:23.594 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:51:23.648 [DEBUG] [Thread-134437] [transport.py] [_log()] userauth is OK
2025-12-31T20:51:23.648 [DEBUG] [Thread-134437] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:51:23.649 [DEBUG] [Thread-134437] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:51:23.649 [DEBUG] [Thread-134437] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T20:51:23.649 [DEBUG] [Thread-134437] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:51:23.668 [INFO] [Thread-134437] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:51:23.668 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T20:51:23.669 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:51:24.830 [DEBUG] [Thread-134437] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:51:24.830 [DEBUG] [Thread-134437] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:51:24.878 [DEBUG] [Thread-134437] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:51:24.878 [DEBUG] [Thread-134437] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:51:24.887 [DEBUG] [Thread-134437] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:51:24.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:51:24.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T20:51:24.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T20:51:24.917 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:51:24.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:51:24.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:51:24.926 [DEBUG] [Thread-134437] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:51:33.478 [DEBUG] [Thread-134439 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:51:40.411 [DEBUG] [Thread-134440 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:51:48.516 [DEBUG] [Thread-134441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:51:54.402 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:51:54.404 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:51:54.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T20:51:54.924 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T20:51:54.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-12-31T20:51:55.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 20, 51, 49), 7.37, 61.93, 0.0, 25.69, 17.42, 0, 0, 0, 2, 0, 0),)
2025-12-31T20:51:55.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 20:51:49
2025-12-31T20:51:55.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T20:51:55.933 [DEBUG] [Thread-134442] [transport.py] [_log()] starting thread (client mode): 0xb1776200
2025-12-31T20:51:55.933 [DEBUG] [Thread-134442] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:51:55.954 [DEBUG] [Thread-134442] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T20:51:55.954 [INFO] [Thread-134442] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T20:51:55.958 [DEBUG] [Thread-134442] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:51:55.958 [DEBUG] [Thread-134442] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T20:51:55.958 [DEBUG] [Thread-134442] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:51:55.958 [DEBUG] [Thread-134442] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:51:55.958 [DEBUG] [Thread-134442] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:51:55.958 [DEBUG] [Thread-134442] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:51:55.958 [DEBUG] [Thread-134442] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:51:55.958 [DEBUG] [Thread-134442] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:51:55.958 [DEBUG] [Thread-134442] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:51:55.958 [DEBUG] [Thread-134442] [transport.py] [_log()] client lang: <none>
2025-12-31T20:51:55.958 [DEBUG] [Thread-134442] [transport.py] [_log()] server lang: <none>
2025-12-31T20:51:55.958 [DEBUG] [Thread-134442] [transport.py] [_log()] kex follows: False
2025-12-31T20:51:55.958 [DEBUG] [Thread-134442] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:51:55.958 [DEBUG] [Thread-134442] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:51:55.958 [DEBUG] [Thread-134442] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:51:55.958 [DEBUG] [Thread-134442] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:51:55.958 [DEBUG] [Thread-134442] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:51:55.959 [DEBUG] [Thread-134442] [transport.py] [_log()] Compression: none
2025-12-31T20:51:55.959 [DEBUG] [Thread-134442] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:51:55.977 [DEBUG] [Thread-134442] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:51:55.977 [DEBUG] [Thread-134442] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:51:55.978 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T20:51:55.978 [DEBUG] [Thread-134442] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T20:51:55.979 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:51:55.981 [DEBUG] [Thread-134442] [transport.py] [_log()] userauth is OK
2025-12-31T20:51:55.981 [DEBUG] [Thread-134442] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:51:55.981 [DEBUG] [Thread-134442] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:51:55.981 [DEBUG] [Thread-134442] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T20:51:55.981 [DEBUG] [Thread-134442] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:51:55.998 [INFO] [Thread-134442] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:51:55.998 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:51:56.635 [DEBUG] [Thread-134442] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:51:56.635 [DEBUG] [Thread-134442] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:51:56.635 [DEBUG] [Thread-134442] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T20:51:56.676 [DEBUG] [Thread-134442] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:51:56.676 [DEBUG] [Thread-134442] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:51:56.682 [DEBUG] [Thread-134442] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:51:56.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:51:56.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T20:51:56.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T20:51:56.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T20:51:56.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:51:56.702 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T20:51:56.702 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:51:56.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:51:56.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T20:51:56.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.785555 -999.00  +17.60  13.49     65  +11.00 1 2 1 1 1     0    0 4.78 -82.93 ...SW 15.0 13.5 227.7 23.9 18.7 -13.9 18.6 -14.5 18.4 -14.8 18.6 -14.6
2025-12-31T20:51:56.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T20:51:56.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T20:51:56.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.785555
2025-12-31T20:51:56.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T20:51:56.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T20:51:56.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T20:51:56.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T20:51:56.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T20:51:56.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T20:51:49', tmtdew=7.37, humidity=61.93, cloud=0.0, wind=25.69, temperature=17.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T20:51:49', seeing=2.26, atlas_timestamp='2025-12-31T18:51:11.952', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T20:51:56.704 [DEBUG] [Thread-134442] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:51:56.787 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T20:51:56.799 [DEBUG] [Thread-134445] [transport.py] [_log()] starting thread (client mode): 0xb1776380
2025-12-31T20:51:56.799 [DEBUG] [Thread-134445] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:51:56.813 [DEBUG] [Thread-134445] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T20:51:56.813 [INFO] [Thread-134445] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T20:51:56.821 [DEBUG] [Thread-134445] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:51:56.821 [DEBUG] [Thread-134445] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T20:51:56.821 [DEBUG] [Thread-134445] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:51:56.821 [DEBUG] [Thread-134445] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:51:56.821 [DEBUG] [Thread-134445] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:51:56.821 [DEBUG] [Thread-134445] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:51:56.821 [DEBUG] [Thread-134445] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:51:56.821 [DEBUG] [Thread-134445] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:51:56.821 [DEBUG] [Thread-134445] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:51:56.821 [DEBUG] [Thread-134445] [transport.py] [_log()] client lang: <none>
2025-12-31T20:51:56.821 [DEBUG] [Thread-134445] [transport.py] [_log()] server lang: <none>
2025-12-31T20:51:56.821 [DEBUG] [Thread-134445] [transport.py] [_log()] kex follows: False
2025-12-31T20:51:56.821 [DEBUG] [Thread-134445] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:51:56.821 [DEBUG] [Thread-134445] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:51:56.821 [DEBUG] [Thread-134445] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:51:56.821 [DEBUG] [Thread-134445] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:51:56.821 [DEBUG] [Thread-134445] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:51:56.822 [DEBUG] [Thread-134445] [transport.py] [_log()] Compression: none
2025-12-31T20:51:56.822 [DEBUG] [Thread-134445] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:51:56.877 [DEBUG] [Thread-134445] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:51:56.878 [DEBUG] [Thread-134445] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:51:56.878 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T20:51:56.878 [DEBUG] [Thread-134445] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T20:51:56.879 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:51:56.933 [DEBUG] [Thread-134445] [transport.py] [_log()] userauth is OK
2025-12-31T20:51:56.933 [DEBUG] [Thread-134445] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:51:56.934 [DEBUG] [Thread-134445] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:51:56.934 [DEBUG] [Thread-134445] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T20:51:56.934 [DEBUG] [Thread-134445] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:51:56.951 [INFO] [Thread-134445] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:51:56.952 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T20:51:56.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:51:57.564 [DEBUG] [Thread-134445] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:51:57.564 [DEBUG] [Thread-134445] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:51:57.611 [DEBUG] [Thread-134445] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:51:57.611 [DEBUG] [Thread-134445] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:51:57.620 [DEBUG] [Thread-134445] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:51:57.628 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:51:57.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T20:51:57.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T20:51:57.647 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:51:57.647 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:51:57.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:51:57.655 [DEBUG] [Thread-134445] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:52:03.550 [DEBUG] [Thread-134447 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:52:18.631 [DEBUG] [Thread-134448 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:52:27.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T20:52:27.674 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T20:52:27.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T20:52:28.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 20, 52, 21), 7.37, 61.93, 0.0, 24.99, 17.44, 0, 0, 0, 2, 0, 0),)
2025-12-31T20:52:28.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 20:52:21
2025-12-31T20:52:28.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T20:52:28.691 [DEBUG] [Thread-134449] [transport.py] [_log()] starting thread (client mode): 0xb6ba3d30
2025-12-31T20:52:28.691 [DEBUG] [Thread-134449] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:52:28.711 [DEBUG] [Thread-134449] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T20:52:28.711 [INFO] [Thread-134449] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T20:52:28.715 [DEBUG] [Thread-134449] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:52:28.715 [DEBUG] [Thread-134449] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T20:52:28.715 [DEBUG] [Thread-134449] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:52:28.715 [DEBUG] [Thread-134449] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:52:28.715 [DEBUG] [Thread-134449] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:52:28.715 [DEBUG] [Thread-134449] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:52:28.715 [DEBUG] [Thread-134449] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:52:28.715 [DEBUG] [Thread-134449] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:52:28.715 [DEBUG] [Thread-134449] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:52:28.715 [DEBUG] [Thread-134449] [transport.py] [_log()] client lang: <none>
2025-12-31T20:52:28.715 [DEBUG] [Thread-134449] [transport.py] [_log()] server lang: <none>
2025-12-31T20:52:28.715 [DEBUG] [Thread-134449] [transport.py] [_log()] kex follows: False
2025-12-31T20:52:28.715 [DEBUG] [Thread-134449] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:52:28.715 [DEBUG] [Thread-134449] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:52:28.715 [DEBUG] [Thread-134449] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:52:28.715 [DEBUG] [Thread-134449] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:52:28.715 [DEBUG] [Thread-134449] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:52:28.715 [DEBUG] [Thread-134449] [transport.py] [_log()] Compression: none
2025-12-31T20:52:28.715 [DEBUG] [Thread-134449] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:52:28.732 [DEBUG] [Thread-134449] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:52:28.733 [DEBUG] [Thread-134449] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:52:28.733 [DEBUG] [Thread-134449] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T20:52:28.733 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T20:52:28.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:52:28.735 [DEBUG] [Thread-134449] [transport.py] [_log()] userauth is OK
2025-12-31T20:52:28.735 [DEBUG] [Thread-134449] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:52:28.735 [DEBUG] [Thread-134449] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:52:28.735 [DEBUG] [Thread-134449] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T20:52:28.735 [DEBUG] [Thread-134449] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:52:28.752 [INFO] [Thread-134449] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:52:28.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:52:29.532 [DEBUG] [Thread-134449] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:52:29.532 [DEBUG] [Thread-134449] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:52:29.533 [DEBUG] [Thread-134449] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T20:52:29.573 [DEBUG] [Thread-134449] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:52:29.573 [DEBUG] [Thread-134449] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:52:29.577 [DEBUG] [Thread-134449] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:52:29.591 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:52:29.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T20:52:29.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T20:52:29.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T20:52:29.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:52:29.600 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T20:52:29.600 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:52:29.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:52:29.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T20:52:29.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.785902 -999.00  +17.60  19.96     65  +11.00 1 2 1 1 1     0    0 4.81 -83.98 ...SW 15.0 20.0 204.0 25.7 18.7 -13.7 18.6 -14.7 18.4 -14.6 18.6 -14.2
2025-12-31T20:52:29.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T20:52:29.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T20:52:29.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.785902
2025-12-31T20:52:29.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T20:52:29.602 [DEBUG] [Thread-134449] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:52:29.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T20:52:29.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T20:52:29.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T20:52:29.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T20:52:29.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T20:52:21', tmtdew=7.37, humidity=61.93, cloud=0.0, wind=24.99, temperature=17.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T20:52:21', seeing=2.26, atlas_timestamp='2025-12-31T18:51:41.933', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T20:52:29.685 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T20:52:29.697 [DEBUG] [Thread-134452] [transport.py] [_log()] starting thread (client mode): 0xb9591c30
2025-12-31T20:52:29.697 [DEBUG] [Thread-134452] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:52:29.711 [DEBUG] [Thread-134452] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T20:52:29.711 [INFO] [Thread-134452] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T20:52:29.719 [DEBUG] [Thread-134452] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:52:29.719 [DEBUG] [Thread-134452] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T20:52:29.719 [DEBUG] [Thread-134452] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:52:29.719 [DEBUG] [Thread-134452] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:52:29.719 [DEBUG] [Thread-134452] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:52:29.719 [DEBUG] [Thread-134452] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:52:29.719 [DEBUG] [Thread-134452] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:52:29.720 [DEBUG] [Thread-134452] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:52:29.720 [DEBUG] [Thread-134452] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:52:29.720 [DEBUG] [Thread-134452] [transport.py] [_log()] client lang: <none>
2025-12-31T20:52:29.720 [DEBUG] [Thread-134452] [transport.py] [_log()] server lang: <none>
2025-12-31T20:52:29.720 [DEBUG] [Thread-134452] [transport.py] [_log()] kex follows: False
2025-12-31T20:52:29.720 [DEBUG] [Thread-134452] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:52:29.720 [DEBUG] [Thread-134452] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:52:29.720 [DEBUG] [Thread-134452] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:52:29.720 [DEBUG] [Thread-134452] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:52:29.720 [DEBUG] [Thread-134452] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:52:29.720 [DEBUG] [Thread-134452] [transport.py] [_log()] Compression: none
2025-12-31T20:52:29.720 [DEBUG] [Thread-134452] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:52:29.789 [DEBUG] [Thread-134452] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:52:29.789 [DEBUG] [Thread-134452] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:52:29.790 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T20:52:29.790 [DEBUG] [Thread-134452] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T20:52:29.799 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:52:29.848 [DEBUG] [Thread-134452] [transport.py] [_log()] userauth is OK
2025-12-31T20:52:29.848 [DEBUG] [Thread-134452] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:52:29.848 [DEBUG] [Thread-134452] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:52:29.848 [DEBUG] [Thread-134452] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T20:52:29.848 [DEBUG] [Thread-134452] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:52:29.868 [INFO] [Thread-134452] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:52:29.869 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T20:52:29.869 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:52:30.372 [DEBUG] [Thread-134452] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:52:30.372 [DEBUG] [Thread-134452] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:52:30.420 [DEBUG] [Thread-134452] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:52:30.420 [DEBUG] [Thread-134452] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:52:30.429 [DEBUG] [Thread-134452] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:52:30.438 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:52:30.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T20:52:30.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-12-31T20:52:30.457 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:52:30.458 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:52:30.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:52:30.466 [DEBUG] [Thread-134452] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:52:33.667 [DEBUG] [Thread-134454 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:52:40.490 [DEBUG] [Thread-134455 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:52:48.732 [DEBUG] [Thread-134456 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:52:54.623 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:52:54.623 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:53:00.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T20:53:00.489 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T20:53:00.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T20:53:01.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 20, 52, 53), 7.36, 61.98, 0.0, 24.16, 17.44, 0, 0, 0, 2, 0, 0),)
2025-12-31T20:53:01.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 20:52:53
2025-12-31T20:53:01.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T20:53:01.485 [DEBUG] [Thread-134457] [transport.py] [_log()] starting thread (client mode): 0xb95d7430
2025-12-31T20:53:01.485 [DEBUG] [Thread-134457] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:53:01.506 [DEBUG] [Thread-134457] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T20:53:01.507 [INFO] [Thread-134457] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T20:53:01.508 [DEBUG] [Thread-134457] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:53:01.508 [DEBUG] [Thread-134457] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T20:53:01.508 [DEBUG] [Thread-134457] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:53:01.508 [DEBUG] [Thread-134457] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:53:01.508 [DEBUG] [Thread-134457] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:53:01.508 [DEBUG] [Thread-134457] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:53:01.508 [DEBUG] [Thread-134457] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:53:01.508 [DEBUG] [Thread-134457] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:53:01.508 [DEBUG] [Thread-134457] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:53:01.508 [DEBUG] [Thread-134457] [transport.py] [_log()] client lang: <none>
2025-12-31T20:53:01.508 [DEBUG] [Thread-134457] [transport.py] [_log()] server lang: <none>
2025-12-31T20:53:01.508 [DEBUG] [Thread-134457] [transport.py] [_log()] kex follows: False
2025-12-31T20:53:01.508 [DEBUG] [Thread-134457] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:53:01.508 [DEBUG] [Thread-134457] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:53:01.509 [DEBUG] [Thread-134457] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:53:01.509 [DEBUG] [Thread-134457] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:53:01.509 [DEBUG] [Thread-134457] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:53:01.509 [DEBUG] [Thread-134457] [transport.py] [_log()] Compression: none
2025-12-31T20:53:01.509 [DEBUG] [Thread-134457] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:53:01.528 [DEBUG] [Thread-134457] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:53:01.528 [DEBUG] [Thread-134457] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:53:01.529 [DEBUG] [Thread-134457] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T20:53:01.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T20:53:01.530 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:53:01.531 [DEBUG] [Thread-134457] [transport.py] [_log()] userauth is OK
2025-12-31T20:53:01.531 [DEBUG] [Thread-134457] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:53:01.531 [DEBUG] [Thread-134457] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:53:01.531 [DEBUG] [Thread-134457] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T20:53:01.531 [DEBUG] [Thread-134457] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:53:01.555 [INFO] [Thread-134457] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:53:01.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:53:02.156 [DEBUG] [Thread-134457] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:53:02.156 [DEBUG] [Thread-134457] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:53:02.157 [DEBUG] [Thread-134457] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T20:53:02.198 [DEBUG] [Thread-134457] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:53:02.198 [DEBUG] [Thread-134457] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:53:02.202 [DEBUG] [Thread-134457] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:53:02.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:53:02.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T20:53:02.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T20:53:02.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T20:53:02.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:53:02.224 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T20:53:02.225 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:53:02.225 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:53:02.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T20:53:02.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.786249 -999.00  +17.50   9.62     65  +11.00 1 2 1 1 1     0    0 4.82 -79.19 ...SW 14.6 9.6 204.6 23.5 18.6 -13.6 18.5 -14.6 18.3 -14.7 18.6 -14.0
2025-12-31T20:53:02.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T20:53:02.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T20:53:02.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.786249
2025-12-31T20:53:02.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T20:53:02.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T20:53:02.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T20:53:02.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T20:53:02.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T20:53:02.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T20:52:53', tmtdew=7.36, humidity=61.98, cloud=0.0, wind=24.16, temperature=17.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T20:52:53', seeing=2.11, atlas_timestamp='2025-12-31T18:52:11.914', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T20:53:02.227 [DEBUG] [Thread-134457] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:53:02.310 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T20:53:02.322 [DEBUG] [Thread-134460] [transport.py] [_log()] starting thread (client mode): 0xb6bbeb30
2025-12-31T20:53:02.322 [DEBUG] [Thread-134460] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:53:02.336 [DEBUG] [Thread-134460] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T20:53:02.336 [INFO] [Thread-134460] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T20:53:02.344 [DEBUG] [Thread-134460] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:53:02.344 [DEBUG] [Thread-134460] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T20:53:02.344 [DEBUG] [Thread-134460] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:53:02.344 [DEBUG] [Thread-134460] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:53:02.344 [DEBUG] [Thread-134460] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:53:02.344 [DEBUG] [Thread-134460] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:53:02.344 [DEBUG] [Thread-134460] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:53:02.344 [DEBUG] [Thread-134460] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:53:02.344 [DEBUG] [Thread-134460] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:53:02.344 [DEBUG] [Thread-134460] [transport.py] [_log()] client lang: <none>
2025-12-31T20:53:02.344 [DEBUG] [Thread-134460] [transport.py] [_log()] server lang: <none>
2025-12-31T20:53:02.344 [DEBUG] [Thread-134460] [transport.py] [_log()] kex follows: False
2025-12-31T20:53:02.344 [DEBUG] [Thread-134460] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:53:02.345 [DEBUG] [Thread-134460] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:53:02.345 [DEBUG] [Thread-134460] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:53:02.345 [DEBUG] [Thread-134460] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:53:02.345 [DEBUG] [Thread-134460] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:53:02.345 [DEBUG] [Thread-134460] [transport.py] [_log()] Compression: none
2025-12-31T20:53:02.345 [DEBUG] [Thread-134460] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:53:02.402 [DEBUG] [Thread-134460] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:53:02.403 [DEBUG] [Thread-134460] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:53:02.403 [DEBUG] [Thread-134460] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T20:53:02.404 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T20:53:02.404 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:53:02.458 [DEBUG] [Thread-134460] [transport.py] [_log()] userauth is OK
2025-12-31T20:53:02.459 [DEBUG] [Thread-134460] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:53:02.459 [DEBUG] [Thread-134460] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:53:02.459 [DEBUG] [Thread-134460] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T20:53:02.459 [DEBUG] [Thread-134460] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:53:02.478 [INFO] [Thread-134460] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:53:02.478 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T20:53:02.479 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:53:02.964 [DEBUG] [Thread-134460] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:53:02.964 [DEBUG] [Thread-134460] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:53:03.012 [DEBUG] [Thread-134460] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:53:03.012 [DEBUG] [Thread-134460] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:53:03.022 [DEBUG] [Thread-134460] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:53:03.032 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:53:03.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T20:53:03.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T20:53:03.053 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:53:03.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:53:03.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:53:03.063 [DEBUG] [Thread-134460] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:53:03.766 [DEBUG] [Thread-134462 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:53:18.822 [DEBUG] [Thread-134463 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:53:33.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T20:53:33.070 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T20:53:33.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T20:53:33.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 20, 53, 25), 7.35, 61.99, 0.0, 23.26, 17.42, 0, 0, 0, 2, 0, 0),)
2025-12-31T20:53:33.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 20:53:25
2025-12-31T20:53:33.849 [DEBUG] [Thread-134464 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:53:33.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T20:53:34.113 [DEBUG] [Thread-134465] [transport.py] [_log()] starting thread (client mode): 0xb6ba0f40
2025-12-31T20:53:34.113 [DEBUG] [Thread-134465] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:53:34.133 [DEBUG] [Thread-134465] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T20:53:34.133 [INFO] [Thread-134465] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T20:53:34.135 [DEBUG] [Thread-134465] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:53:34.135 [DEBUG] [Thread-134465] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T20:53:34.135 [DEBUG] [Thread-134465] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:53:34.135 [DEBUG] [Thread-134465] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:53:34.135 [DEBUG] [Thread-134465] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:53:34.135 [DEBUG] [Thread-134465] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:53:34.135 [DEBUG] [Thread-134465] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:53:34.135 [DEBUG] [Thread-134465] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:53:34.135 [DEBUG] [Thread-134465] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:53:34.135 [DEBUG] [Thread-134465] [transport.py] [_log()] client lang: <none>
2025-12-31T20:53:34.135 [DEBUG] [Thread-134465] [transport.py] [_log()] server lang: <none>
2025-12-31T20:53:34.135 [DEBUG] [Thread-134465] [transport.py] [_log()] kex follows: False
2025-12-31T20:53:34.135 [DEBUG] [Thread-134465] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:53:34.135 [DEBUG] [Thread-134465] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:53:34.135 [DEBUG] [Thread-134465] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:53:34.135 [DEBUG] [Thread-134465] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:53:34.135 [DEBUG] [Thread-134465] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:53:34.135 [DEBUG] [Thread-134465] [transport.py] [_log()] Compression: none
2025-12-31T20:53:34.135 [DEBUG] [Thread-134465] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:53:34.150 [DEBUG] [Thread-134465] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:53:34.150 [DEBUG] [Thread-134465] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:53:34.150 [DEBUG] [Thread-134465] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T20:53:34.150 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T20:53:34.151 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:53:34.151 [DEBUG] [Thread-134465] [transport.py] [_log()] userauth is OK
2025-12-31T20:53:34.151 [DEBUG] [Thread-134465] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:53:34.151 [DEBUG] [Thread-134465] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:53:34.151 [DEBUG] [Thread-134465] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T20:53:34.151 [DEBUG] [Thread-134465] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:53:34.160 [INFO] [Thread-134465] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:53:34.161 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:53:34.949 [DEBUG] [Thread-134465] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:53:34.949 [DEBUG] [Thread-134465] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:53:34.949 [DEBUG] [Thread-134465] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T20:53:34.989 [DEBUG] [Thread-134465] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:53:34.989 [DEBUG] [Thread-134465] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:53:34.992 [DEBUG] [Thread-134465] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:53:35.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:53:35.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T20:53:35.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T20:53:35.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T20:53:35.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:53:35.008 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T20:53:35.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:53:35.009 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:53:35.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T20:53:35.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.786597 -999.00  +17.50  18.03     65  +10.90 1 2 1 1 1     0    0 5.02 -72.25 ..eSW 17.9 18.0 216.2 24.0 18.7 -13.8 18.5 -14.7 18.4 -14.7 18.6 -13.8
2025-12-31T20:53:35.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T20:53:35.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T20:53:35.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.786597
2025-12-31T20:53:35.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T20:53:35.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T20:53:35.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T20:53:35.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T20:53:35.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T20:53:35.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T20:53:25', tmtdew=7.35, humidity=61.99, cloud=0.0, wind=23.26, temperature=17.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T20:53:25', seeing=2.53, atlas_timestamp='2025-12-31T18:52:41.981', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T20:53:35.010 [DEBUG] [Thread-134465] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:53:35.084 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T20:53:35.096 [DEBUG] [Thread-134468] [transport.py] [_log()] starting thread (client mode): 0xb95904f0
2025-12-31T20:53:35.096 [DEBUG] [Thread-134468] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:53:35.111 [DEBUG] [Thread-134468] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T20:53:35.111 [INFO] [Thread-134468] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T20:53:35.118 [DEBUG] [Thread-134468] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:53:35.118 [DEBUG] [Thread-134468] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T20:53:35.118 [DEBUG] [Thread-134468] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:53:35.118 [DEBUG] [Thread-134468] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:53:35.118 [DEBUG] [Thread-134468] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:53:35.118 [DEBUG] [Thread-134468] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:53:35.118 [DEBUG] [Thread-134468] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:53:35.118 [DEBUG] [Thread-134468] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:53:35.118 [DEBUG] [Thread-134468] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:53:35.118 [DEBUG] [Thread-134468] [transport.py] [_log()] client lang: <none>
2025-12-31T20:53:35.118 [DEBUG] [Thread-134468] [transport.py] [_log()] server lang: <none>
2025-12-31T20:53:35.118 [DEBUG] [Thread-134468] [transport.py] [_log()] kex follows: False
2025-12-31T20:53:35.118 [DEBUG] [Thread-134468] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:53:35.118 [DEBUG] [Thread-134468] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:53:35.118 [DEBUG] [Thread-134468] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:53:35.118 [DEBUG] [Thread-134468] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:53:35.118 [DEBUG] [Thread-134468] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:53:35.118 [DEBUG] [Thread-134468] [transport.py] [_log()] Compression: none
2025-12-31T20:53:35.118 [DEBUG] [Thread-134468] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:53:35.183 [DEBUG] [Thread-134468] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:53:35.183 [DEBUG] [Thread-134468] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:53:35.184 [DEBUG] [Thread-134468] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T20:53:35.184 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T20:53:35.184 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:53:35.232 [DEBUG] [Thread-134468] [transport.py] [_log()] userauth is OK
2025-12-31T20:53:35.232 [DEBUG] [Thread-134468] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:53:35.232 [DEBUG] [Thread-134468] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:53:35.232 [DEBUG] [Thread-134468] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T20:53:35.232 [DEBUG] [Thread-134468] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:53:35.246 [INFO] [Thread-134468] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:53:35.246 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T20:53:35.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:53:36.068 [DEBUG] [Thread-134468] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:53:36.068 [DEBUG] [Thread-134468] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:53:36.116 [DEBUG] [Thread-134468] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:53:36.116 [DEBUG] [Thread-134468] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:53:36.124 [DEBUG] [Thread-134468] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:53:36.132 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:53:36.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T20:53: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') -> 00000000
2025-12-31T20:53:36.147 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:53:36.148 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:53:36.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:53:36.155 [DEBUG] [Thread-134468] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:53:40.572 [DEBUG] [Thread-134470 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:53:48.886 [DEBUG] [Thread-134471 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:53:54.839 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:53:54.840 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:54:03.937 [DEBUG] [Thread-134472 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:54:06.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T20:54:06.171 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T20:54:06.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T20:54:06.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 20, 53, 57), 7.3, 62.01, 0.0, 18.79, 17.37, 0, 0, 0, 2, 0, 0),)
2025-12-31T20:54:06.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 20:53:57
2025-12-31T20:54:07.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T20:54:07.194 [DEBUG] [Thread-134473] [transport.py] [_log()] starting thread (client mode): 0xb95d70d0
2025-12-31T20:54:07.194 [DEBUG] [Thread-134473] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:54:07.213 [DEBUG] [Thread-134473] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T20:54:07.213 [INFO] [Thread-134473] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T20:54:07.216 [DEBUG] [Thread-134473] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:54:07.216 [DEBUG] [Thread-134473] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T20:54:07.216 [DEBUG] [Thread-134473] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:54:07.216 [DEBUG] [Thread-134473] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:54:07.217 [DEBUG] [Thread-134473] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:54:07.217 [DEBUG] [Thread-134473] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:54:07.217 [DEBUG] [Thread-134473] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:54:07.217 [DEBUG] [Thread-134473] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:54:07.217 [DEBUG] [Thread-134473] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:54:07.217 [DEBUG] [Thread-134473] [transport.py] [_log()] client lang: <none>
2025-12-31T20:54:07.217 [DEBUG] [Thread-134473] [transport.py] [_log()] server lang: <none>
2025-12-31T20:54:07.217 [DEBUG] [Thread-134473] [transport.py] [_log()] kex follows: False
2025-12-31T20:54:07.217 [DEBUG] [Thread-134473] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:54:07.217 [DEBUG] [Thread-134473] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:54:07.217 [DEBUG] [Thread-134473] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:54:07.217 [DEBUG] [Thread-134473] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:54:07.217 [DEBUG] [Thread-134473] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:54:07.217 [DEBUG] [Thread-134473] [transport.py] [_log()] Compression: none
2025-12-31T20:54:07.217 [DEBUG] [Thread-134473] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:54:07.233 [DEBUG] [Thread-134473] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:54:07.233 [DEBUG] [Thread-134473] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:54:07.234 [DEBUG] [Thread-134473] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T20:54:07.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T20:54:07.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:54:07.236 [DEBUG] [Thread-134473] [transport.py] [_log()] userauth is OK
2025-12-31T20:54:07.236 [DEBUG] [Thread-134473] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:54:07.236 [DEBUG] [Thread-134473] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:54:07.237 [DEBUG] [Thread-134473] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T20:54:07.237 [DEBUG] [Thread-134473] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:54:07.262 [INFO] [Thread-134473] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:54:07.262 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:54:07.937 [DEBUG] [Thread-134473] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:54:07.937 [DEBUG] [Thread-134473] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:54:07.938 [DEBUG] [Thread-134473] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T20:54:07.978 [DEBUG] [Thread-134473] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:54:07.979 [DEBUG] [Thread-134473] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:54:07.983 [DEBUG] [Thread-134473] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:54:07.987 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:54:07.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T20:54:07.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T20:54:07.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T20:54:07.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:54:07.999 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T20:54:08.000 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:54:08.000 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:54:08.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T20:54:08.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.786944 -999.00  +17.50  15.98     65  +10.90 1 2 1 1 1     0    0 5.09 -68.23 Z..SW 11.1 16.0 208.0 24.6 18.6 -13.7 18.5 -14.9 18.3 -14.8 18.6 -13.8
2025-12-31T20:54:08.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T20:54:08.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T20:54:08.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.786944
2025-12-31T20:54:08.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T20:54:08.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T20:54:08.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T20:54:08.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T20:54:08.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T20:54:08.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T20:53:57', tmtdew=7.3, humidity=62.01, cloud=0.0, wind=18.79, temperature=17.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T20:53:57', seeing=2.3, atlas_timestamp='2025-12-31T18:53:11.962', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T20:54:08.002 [DEBUG] [Thread-134473] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:54:08.086 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T20:54:08.098 [DEBUG] [Thread-134476] [transport.py] [_log()] starting thread (client mode): 0xb1764700
2025-12-31T20:54:08.098 [DEBUG] [Thread-134476] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:54:08.113 [DEBUG] [Thread-134476] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T20:54:08.113 [INFO] [Thread-134476] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T20:54:08.120 [DEBUG] [Thread-134476] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:54:08.120 [DEBUG] [Thread-134476] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T20:54:08.120 [DEBUG] [Thread-134476] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:54:08.120 [DEBUG] [Thread-134476] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:54:08.121 [DEBUG] [Thread-134476] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:54:08.121 [DEBUG] [Thread-134476] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:54:08.121 [DEBUG] [Thread-134476] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:54:08.121 [DEBUG] [Thread-134476] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:54:08.121 [DEBUG] [Thread-134476] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:54:08.121 [DEBUG] [Thread-134476] [transport.py] [_log()] client lang: <none>
2025-12-31T20:54:08.121 [DEBUG] [Thread-134476] [transport.py] [_log()] server lang: <none>
2025-12-31T20:54:08.121 [DEBUG] [Thread-134476] [transport.py] [_log()] kex follows: False
2025-12-31T20:54:08.121 [DEBUG] [Thread-134476] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:54:08.121 [DEBUG] [Thread-134476] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:54:08.122 [DEBUG] [Thread-134476] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:54:08.122 [DEBUG] [Thread-134476] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:54:08.122 [DEBUG] [Thread-134476] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:54:08.122 [DEBUG] [Thread-134476] [transport.py] [_log()] Compression: none
2025-12-31T20:54:08.122 [DEBUG] [Thread-134476] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:54:08.178 [DEBUG] [Thread-134476] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:54:08.178 [DEBUG] [Thread-134476] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:54:08.178 [DEBUG] [Thread-134476] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T20:54:08.179 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T20:54:08.179 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:54:08.235 [DEBUG] [Thread-134476] [transport.py] [_log()] userauth is OK
2025-12-31T20:54:08.235 [DEBUG] [Thread-134476] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:54:08.236 [DEBUG] [Thread-134476] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:54:08.236 [DEBUG] [Thread-134476] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T20:54:08.236 [DEBUG] [Thread-134476] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:54:08.257 [INFO] [Thread-134476] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:54:08.257 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T20:54:08.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:54:09.150 [DEBUG] [Thread-134476] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:54:09.151 [DEBUG] [Thread-134476] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:54:09.198 [DEBUG] [Thread-134476] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:54:09.198 [DEBUG] [Thread-134476] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:54:09.207 [DEBUG] [Thread-134476] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:54:09.215 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:54:09.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-12-31T20:54:09.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T20:54:09.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:54:09.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:54:09.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:54:09.241 [DEBUG] [Thread-134476] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:54:18.969 [DEBUG] [Thread-134478 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:54:34.020 [DEBUG] [Thread-134479 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:54:39.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T20:54:39.264 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T20:54:39.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T20:54:39.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 20, 54, 29), 7.29, 62.08, 0.0, 17.38, 17.39, 0, 0, 0, 2, 0, 0),)
2025-12-31T20:54:39.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 20:54:29
2025-12-31T20:54:40.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T20:54:40.270 [DEBUG] [Thread-134480] [transport.py] [_log()] starting thread (client mode): 0xb1776050
2025-12-31T20:54:40.270 [DEBUG] [Thread-134480] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:54:40.290 [DEBUG] [Thread-134480] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T20:54:40.290 [INFO] [Thread-134480] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T20:54:40.293 [DEBUG] [Thread-134480] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:54:40.293 [DEBUG] [Thread-134480] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T20:54:40.294 [DEBUG] [Thread-134480] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:54:40.294 [DEBUG] [Thread-134480] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:54:40.294 [DEBUG] [Thread-134480] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:54:40.294 [DEBUG] [Thread-134480] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:54:40.294 [DEBUG] [Thread-134480] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:54:40.294 [DEBUG] [Thread-134480] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:54:40.294 [DEBUG] [Thread-134480] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:54:40.294 [DEBUG] [Thread-134480] [transport.py] [_log()] client lang: <none>
2025-12-31T20:54:40.294 [DEBUG] [Thread-134480] [transport.py] [_log()] server lang: <none>
2025-12-31T20:54:40.294 [DEBUG] [Thread-134480] [transport.py] [_log()] kex follows: False
2025-12-31T20:54:40.294 [DEBUG] [Thread-134480] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:54:40.294 [DEBUG] [Thread-134480] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:54:40.294 [DEBUG] [Thread-134480] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:54:40.294 [DEBUG] [Thread-134480] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:54:40.294 [DEBUG] [Thread-134480] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:54:40.294 [DEBUG] [Thread-134480] [transport.py] [_log()] Compression: none
2025-12-31T20:54:40.294 [DEBUG] [Thread-134480] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:54:40.303 [DEBUG] [Thread-134480] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:54:40.303 [DEBUG] [Thread-134480] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:54:40.303 [DEBUG] [Thread-134480] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T20:54:40.303 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T20:54:40.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:54:40.305 [DEBUG] [Thread-134480] [transport.py] [_log()] userauth is OK
2025-12-31T20:54:40.305 [DEBUG] [Thread-134480] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:54:40.305 [DEBUG] [Thread-134480] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:54:40.305 [DEBUG] [Thread-134480] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T20:54:40.306 [DEBUG] [Thread-134480] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:54:40.322 [INFO] [Thread-134480] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:54:40.322 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:54:40.649 [DEBUG] [Thread-134482 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:54:40.976 [DEBUG] [Thread-134480] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:54:40.976 [DEBUG] [Thread-134480] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:54:40.977 [DEBUG] [Thread-134480] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T20:54:41.017 [DEBUG] [Thread-134480] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:54:41.017 [DEBUG] [Thread-134480] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:54:41.021 [DEBUG] [Thread-134480] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:54:41.034 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:54:41.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T20:54:41.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T20:54:41.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T20:54:41.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:54:41.046 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T20:54:41.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:54:41.047 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:54:41.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T20:54:41.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.787291 -999.00  +17.50  14.30     65  +10.90 1 2 1 1 1     0    0 5.30 -65.81 Z..SW 11.4 14.3 234.9 25.1 18.6 -13.8 18.5 -15.0 18.3 -14.7 18.6 -13.8
2025-12-31T20:54:41.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T20:54:41.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T20:54:41.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.787291
2025-12-31T20:54:41.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T20:54:41.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T20:54:41.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T20:54:41.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T20:54:41.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T20:54:41.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T20:54:29', tmtdew=7.29, humidity=62.08, cloud=0.0, wind=17.38, temperature=17.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T20:54:30', seeing=2.19, atlas_timestamp='2025-12-31T18:53:41.942', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T20:54:41.049 [DEBUG] [Thread-134480] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:54:41.133 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T20:54:41.147 [DEBUG] [Thread-134484] [transport.py] [_log()] starting thread (client mode): 0xb1775120
2025-12-31T20:54:41.147 [DEBUG] [Thread-134484] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:54:41.162 [DEBUG] [Thread-134484] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T20:54:41.162 [INFO] [Thread-134484] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T20:54:41.169 [DEBUG] [Thread-134484] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:54:41.169 [DEBUG] [Thread-134484] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T20:54:41.169 [DEBUG] [Thread-134484] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:54:41.169 [DEBUG] [Thread-134484] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:54:41.170 [DEBUG] [Thread-134484] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:54:41.170 [DEBUG] [Thread-134484] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:54:41.170 [DEBUG] [Thread-134484] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:54:41.170 [DEBUG] [Thread-134484] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:54:41.170 [DEBUG] [Thread-134484] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:54:41.170 [DEBUG] [Thread-134484] [transport.py] [_log()] client lang: <none>
2025-12-31T20:54:41.170 [DEBUG] [Thread-134484] [transport.py] [_log()] server lang: <none>
2025-12-31T20:54:41.170 [DEBUG] [Thread-134484] [transport.py] [_log()] kex follows: False
2025-12-31T20:54:41.170 [DEBUG] [Thread-134484] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:54:41.170 [DEBUG] [Thread-134484] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:54:41.170 [DEBUG] [Thread-134484] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:54:41.170 [DEBUG] [Thread-134484] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:54:41.170 [DEBUG] [Thread-134484] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:54:41.170 [DEBUG] [Thread-134484] [transport.py] [_log()] Compression: none
2025-12-31T20:54:41.170 [DEBUG] [Thread-134484] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:54:41.229 [DEBUG] [Thread-134484] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:54:41.230 [DEBUG] [Thread-134484] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:54:41.230 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T20:54:41.231 [DEBUG] [Thread-134484] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T20:54:41.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:54:41.285 [DEBUG] [Thread-134484] [transport.py] [_log()] userauth is OK
2025-12-31T20:54:41.286 [DEBUG] [Thread-134484] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:54:41.286 [DEBUG] [Thread-134484] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:54:41.286 [DEBUG] [Thread-134484] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T20:54:41.286 [DEBUG] [Thread-134484] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:54:41.305 [INFO] [Thread-134484] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:54:41.305 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T20:54:41.306 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:54:42.121 [DEBUG] [Thread-134484] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:54:42.122 [DEBUG] [Thread-134484] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:54:42.171 [DEBUG] [Thread-134484] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:54:42.171 [DEBUG] [Thread-134484] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:54:42.180 [DEBUG] [Thread-134484] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:54:42.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:54:42.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T20:54:42.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T20:54:42.209 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:54:42.209 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:54:42.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:54:42.218 [DEBUG] [Thread-134484] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:54:49.057 [DEBUG] [Thread-134486 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:54:55.043 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:54:55.044 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:55:04.094 [DEBUG] [Thread-134487 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:55:12.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T20:55:12.241 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T20:55:12.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-12-31T20:55:12.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 20, 55, 2), 7.3, 61.99, 0.0, 18.84, 17.36, 0, 0, 0, 2, 0, 0),)
2025-12-31T20:55:12.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 20:55:02
2025-12-31T20:55:13.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T20:55:13.243 [DEBUG] [Thread-134488] [transport.py] [_log()] starting thread (client mode): 0xb1776b90
2025-12-31T20:55:13.243 [DEBUG] [Thread-134488] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:55:13.263 [DEBUG] [Thread-134488] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T20:55:13.263 [INFO] [Thread-134488] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T20:55:13.266 [DEBUG] [Thread-134488] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:55:13.266 [DEBUG] [Thread-134488] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T20:55:13.267 [DEBUG] [Thread-134488] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:55:13.267 [DEBUG] [Thread-134488] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:55:13.267 [DEBUG] [Thread-134488] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:55:13.267 [DEBUG] [Thread-134488] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:55:13.267 [DEBUG] [Thread-134488] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:55:13.267 [DEBUG] [Thread-134488] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:55:13.267 [DEBUG] [Thread-134488] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:55:13.267 [DEBUG] [Thread-134488] [transport.py] [_log()] client lang: <none>
2025-12-31T20:55:13.267 [DEBUG] [Thread-134488] [transport.py] [_log()] server lang: <none>
2025-12-31T20:55:13.267 [DEBUG] [Thread-134488] [transport.py] [_log()] kex follows: False
2025-12-31T20:55:13.267 [DEBUG] [Thread-134488] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:55:13.267 [DEBUG] [Thread-134488] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:55:13.267 [DEBUG] [Thread-134488] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:55:13.267 [DEBUG] [Thread-134488] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:55:13.268 [DEBUG] [Thread-134488] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:55:13.268 [DEBUG] [Thread-134488] [transport.py] [_log()] Compression: none
2025-12-31T20:55:13.268 [DEBUG] [Thread-134488] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:55:13.287 [DEBUG] [Thread-134488] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:55:13.287 [DEBUG] [Thread-134488] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:55:13.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T20:55:13.288 [DEBUG] [Thread-134488] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T20:55:13.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:55:13.290 [DEBUG] [Thread-134488] [transport.py] [_log()] userauth is OK
2025-12-31T20:55:13.291 [DEBUG] [Thread-134488] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:55:13.291 [DEBUG] [Thread-134488] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:55:13.291 [DEBUG] [Thread-134488] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T20:55:13.291 [DEBUG] [Thread-134488] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:55:13.315 [INFO] [Thread-134488] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:55:13.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:55:19.126 [DEBUG] [Thread-134490 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:55:19.406 [DEBUG] [Thread-134488] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:55:19.406 [DEBUG] [Thread-134488] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:55:19.407 [DEBUG] [Thread-134488] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T20:55:19.447 [DEBUG] [Thread-134488] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:55:19.447 [DEBUG] [Thread-134488] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:55:19.451 [DEBUG] [Thread-134488] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:55:19.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:55:19.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T20:55:19.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T20:55:19.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T20:55:19.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:55:19.480 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T20:55:19.480 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:55:19.480 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:55:19.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T20:55:19.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.787638 -999.00  +17.50  15.07     65  +11.00 1 2 1 1 1     0    0 5.13 -67.54 Z...W 12.1 15.1 201.0 23.5 18.6 -13.9 18.5 -15.1 18.2 -14.8 18.6 -13.9
2025-12-31T20:55:19.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T20:55:19.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T20:55:19.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.787638
2025-12-31T20:55:19.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T20:55:19.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T20:55:19.482 [DEBUG] [Thread-134488] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:55:19.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T20:55:19.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T20:55:19.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T20:55:19.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T20:55:02', tmtdew=7.3, humidity=61.99, cloud=0.0, wind=18.84, temperature=17.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T20:55:02', seeing=3.04, atlas_timestamp='2025-12-31T18:54:11.923', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T20:55:19.564 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T20:55:19.577 [DEBUG] [Thread-134492] [transport.py] [_log()] starting thread (client mode): 0xb6bbd8a0
2025-12-31T20:55:19.578 [DEBUG] [Thread-134492] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:55:19.595 [DEBUG] [Thread-134492] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T20:55:19.595 [INFO] [Thread-134492] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T20:55:19.603 [DEBUG] [Thread-134492] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:55:19.603 [DEBUG] [Thread-134492] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T20:55:19.604 [DEBUG] [Thread-134492] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:55:19.604 [DEBUG] [Thread-134492] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:55:19.604 [DEBUG] [Thread-134492] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:55:19.604 [DEBUG] [Thread-134492] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:55:19.604 [DEBUG] [Thread-134492] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:55:19.604 [DEBUG] [Thread-134492] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:55:19.604 [DEBUG] [Thread-134492] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:55:19.604 [DEBUG] [Thread-134492] [transport.py] [_log()] client lang: <none>
2025-12-31T20:55:19.604 [DEBUG] [Thread-134492] [transport.py] [_log()] server lang: <none>
2025-12-31T20:55:19.604 [DEBUG] [Thread-134492] [transport.py] [_log()] kex follows: False
2025-12-31T20:55:19.605 [DEBUG] [Thread-134492] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:55:19.605 [DEBUG] [Thread-134492] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:55:19.605 [DEBUG] [Thread-134492] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:55:19.605 [DEBUG] [Thread-134492] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:55:19.605 [DEBUG] [Thread-134492] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:55:19.605 [DEBUG] [Thread-134492] [transport.py] [_log()] Compression: none
2025-12-31T20:55:19.605 [DEBUG] [Thread-134492] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:55:19.660 [DEBUG] [Thread-134492] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:55:19.660 [DEBUG] [Thread-134492] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:55:19.661 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T20:55:19.661 [DEBUG] [Thread-134492] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T20:55:19.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:55:19.715 [DEBUG] [Thread-134492] [transport.py] [_log()] userauth is OK
2025-12-31T20:55:19.716 [DEBUG] [Thread-134492] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:55:19.716 [DEBUG] [Thread-134492] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:55:19.716 [DEBUG] [Thread-134492] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T20:55:19.716 [DEBUG] [Thread-134492] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:55:19.734 [INFO] [Thread-134492] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:55:19.735 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T20:55:19.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:55:20.550 [DEBUG] [Thread-134492] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:55:20.551 [DEBUG] [Thread-134492] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:55:20.599 [DEBUG] [Thread-134492] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:55:20.599 [DEBUG] [Thread-134492] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:55:20.608 [DEBUG] [Thread-134492] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:55:20.617 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:55:20.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T20:55:20.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T20:55:20.636 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:55:20.637 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:55:20.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:55:20.645 [DEBUG] [Thread-134492] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:55:34.157 [DEBUG] [Thread-134494 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:55:40.750 [DEBUG] [Thread-134495 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:55:49.220 [DEBUG] [Thread-134496 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:55:50.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T20:55:50.668 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T20:55:50.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T20:55:51.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 20, 55, 34), 7.4, 62.03, 0.0, 17.29, 17.44, 0, 0, 0, 2, 0, 0),)
2025-12-31T20:55:51.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 20:55:34
2025-12-31T20:55:51.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T20:55:51.691 [DEBUG] [Thread-134497] [transport.py] [_log()] starting thread (client mode): 0xb1764b80
2025-12-31T20:55:51.691 [DEBUG] [Thread-134497] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:55:51.712 [DEBUG] [Thread-134497] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T20:55:51.712 [INFO] [Thread-134497] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T20:55:51.715 [DEBUG] [Thread-134497] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:55:51.715 [DEBUG] [Thread-134497] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T20:55:51.715 [DEBUG] [Thread-134497] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:55:51.715 [DEBUG] [Thread-134497] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:55:51.715 [DEBUG] [Thread-134497] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:55:51.715 [DEBUG] [Thread-134497] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:55:51.715 [DEBUG] [Thread-134497] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:55:51.715 [DEBUG] [Thread-134497] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:55:51.715 [DEBUG] [Thread-134497] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:55:51.715 [DEBUG] [Thread-134497] [transport.py] [_log()] client lang: <none>
2025-12-31T20:55:51.715 [DEBUG] [Thread-134497] [transport.py] [_log()] server lang: <none>
2025-12-31T20:55:51.715 [DEBUG] [Thread-134497] [transport.py] [_log()] kex follows: False
2025-12-31T20:55:51.715 [DEBUG] [Thread-134497] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:55:51.715 [DEBUG] [Thread-134497] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:55:51.716 [DEBUG] [Thread-134497] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:55:51.716 [DEBUG] [Thread-134497] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:55:51.716 [DEBUG] [Thread-134497] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:55:51.716 [DEBUG] [Thread-134497] [transport.py] [_log()] Compression: none
2025-12-31T20:55:51.716 [DEBUG] [Thread-134497] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:55:51.733 [DEBUG] [Thread-134497] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:55:51.734 [DEBUG] [Thread-134497] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:55:51.734 [DEBUG] [Thread-134497] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T20:55:51.735 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T20:55:51.735 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:55:51.778 [DEBUG] [Thread-134497] [transport.py] [_log()] userauth is OK
2025-12-31T20:55:51.778 [DEBUG] [Thread-134497] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:55:51.779 [DEBUG] [Thread-134497] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:55:51.779 [DEBUG] [Thread-134497] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T20:55:51.779 [DEBUG] [Thread-134497] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:55:51.811 [INFO] [Thread-134497] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:55:51.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:55:52.461 [DEBUG] [Thread-134497] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:55:52.461 [DEBUG] [Thread-134497] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:55:52.461 [DEBUG] [Thread-134497] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T20:55:52.502 [DEBUG] [Thread-134497] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:55:52.502 [DEBUG] [Thread-134497] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:55:52.506 [DEBUG] [Thread-134497] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:55:52.519 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:55:52.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T20:55:52.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T20:55:52.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T20:55:52.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:55:52.532 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T20:55:52.532 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:55:52.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:55:52.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T20:55:52.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.788333 -999.00  +17.50  12.80     65  +10.90 1 2 1 1 1     0    0 5.15 -61.80 Z..SW 13.7 12.8 188.0 21.5 18.6 -14.1 18.5 -15.1 18.2 -14.7 18.6 -13.8
2025-12-31T20:55:52.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T20:55:52.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T20:55:52.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.788333
2025-12-31T20:55:52.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T20:55:52.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T20:55:52.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T20:55:52.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T20:55:52.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T20:55:52.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T20:55:34', tmtdew=7.4, humidity=62.03, cloud=0.0, wind=17.29, temperature=17.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T20:55:34', seeing=3.04, atlas_timestamp='2025-12-31T18:55:11.971', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T20:55:52.534 [DEBUG] [Thread-134497] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:55:52.618 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T20:55:52.631 [DEBUG] [Thread-134500] [transport.py] [_log()] starting thread (client mode): 0xb1759cc0
2025-12-31T20:55:52.631 [DEBUG] [Thread-134500] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:55:52.646 [DEBUG] [Thread-134500] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T20:55:52.646 [INFO] [Thread-134500] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T20:55:52.653 [DEBUG] [Thread-134500] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:55:52.653 [DEBUG] [Thread-134500] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T20:55:52.653 [DEBUG] [Thread-134500] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:55:52.653 [DEBUG] [Thread-134500] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:55:52.653 [DEBUG] [Thread-134500] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:55:52.653 [DEBUG] [Thread-134500] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:55:52.653 [DEBUG] [Thread-134500] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:55:52.653 [DEBUG] [Thread-134500] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:55:52.653 [DEBUG] [Thread-134500] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:55:52.653 [DEBUG] [Thread-134500] [transport.py] [_log()] client lang: <none>
2025-12-31T20:55:52.654 [DEBUG] [Thread-134500] [transport.py] [_log()] server lang: <none>
2025-12-31T20:55:52.654 [DEBUG] [Thread-134500] [transport.py] [_log()] kex follows: False
2025-12-31T20:55:52.654 [DEBUG] [Thread-134500] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:55:52.654 [DEBUG] [Thread-134500] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:55:52.654 [DEBUG] [Thread-134500] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:55:52.654 [DEBUG] [Thread-134500] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:55:52.654 [DEBUG] [Thread-134500] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:55:52.654 [DEBUG] [Thread-134500] [transport.py] [_log()] Compression: none
2025-12-31T20:55:52.654 [DEBUG] [Thread-134500] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:55:52.717 [DEBUG] [Thread-134500] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:55:52.718 [DEBUG] [Thread-134500] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:55:52.718 [DEBUG] [Thread-134500] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T20:55:52.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T20:55:52.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:55:52.775 [DEBUG] [Thread-134500] [transport.py] [_log()] userauth is OK
2025-12-31T20:55:52.775 [DEBUG] [Thread-134500] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:55:52.775 [DEBUG] [Thread-134500] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:55:52.775 [DEBUG] [Thread-134500] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T20:55:52.776 [DEBUG] [Thread-134500] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:55:52.794 [INFO] [Thread-134500] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:55:52.795 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T20:55:52.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:55:53.596 [DEBUG] [Thread-134500] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:55:53.597 [DEBUG] [Thread-134500] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:55:53.645 [DEBUG] [Thread-134500] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:55:53.645 [DEBUG] [Thread-134500] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:55:53.655 [DEBUG] [Thread-134500] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:55:53.664 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:55: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')
2025-12-31T20:55:53.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T20:55:53.682 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:55:53.682 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:55:53.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:55:53.691 [DEBUG] [Thread-134500] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:55:55.250 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:55:55.251 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:56:04.257 [DEBUG] [Thread-134502 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:56:19.305 [DEBUG] [Thread-134503 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:56:23.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T20:56:23.704 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T20:56:23.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T20:56:24.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 20, 56, 6), 7.4, 61.99, 0.0, 19.9, 17.42, 0, 0, 0, 2, 0, 0),)
2025-12-31T20:56:24.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 20:56:06
2025-12-31T20:56:24.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T20:56:24.686 [DEBUG] [Thread-134504] [transport.py] [_log()] starting thread (client mode): 0xb1775840
2025-12-31T20:56:24.686 [DEBUG] [Thread-134504] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:56:24.707 [DEBUG] [Thread-134504] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T20:56:24.707 [INFO] [Thread-134504] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T20:56:24.710 [DEBUG] [Thread-134504] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:56:24.710 [DEBUG] [Thread-134504] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T20:56:24.710 [DEBUG] [Thread-134504] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:56:24.710 [DEBUG] [Thread-134504] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:56:24.710 [DEBUG] [Thread-134504] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:56:24.710 [DEBUG] [Thread-134504] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:56:24.710 [DEBUG] [Thread-134504] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:56:24.710 [DEBUG] [Thread-134504] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:56:24.710 [DEBUG] [Thread-134504] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:56:24.711 [DEBUG] [Thread-134504] [transport.py] [_log()] client lang: <none>
2025-12-31T20:56:24.711 [DEBUG] [Thread-134504] [transport.py] [_log()] server lang: <none>
2025-12-31T20:56:24.711 [DEBUG] [Thread-134504] [transport.py] [_log()] kex follows: False
2025-12-31T20:56:24.711 [DEBUG] [Thread-134504] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:56:24.711 [DEBUG] [Thread-134504] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:56:24.711 [DEBUG] [Thread-134504] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:56:24.711 [DEBUG] [Thread-134504] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:56:24.711 [DEBUG] [Thread-134504] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:56:24.711 [DEBUG] [Thread-134504] [transport.py] [_log()] Compression: none
2025-12-31T20:56:24.711 [DEBUG] [Thread-134504] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:56:24.727 [DEBUG] [Thread-134504] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:56:24.728 [DEBUG] [Thread-134504] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:56:24.728 [DEBUG] [Thread-134504] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T20:56:24.728 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T20:56:24.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:56:24.730 [DEBUG] [Thread-134504] [transport.py] [_log()] userauth is OK
2025-12-31T20:56:24.730 [DEBUG] [Thread-134504] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:56:24.730 [DEBUG] [Thread-134504] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:56:24.730 [DEBUG] [Thread-134504] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T20:56:24.730 [DEBUG] [Thread-134504] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:56:24.754 [INFO] [Thread-134504] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:56:24.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:56:25.529 [DEBUG] [Thread-134504] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:56:25.529 [DEBUG] [Thread-134504] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:56:25.529 [DEBUG] [Thread-134504] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T20:56:25.569 [DEBUG] [Thread-134504] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:56:25.570 [DEBUG] [Thread-134504] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:56:25.572 [DEBUG] [Thread-134504] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:56:25.584 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:56:25.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T20:56:25.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T20:56:25.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T20:56:25.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:56:25.591 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T20:56:25.592 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:56:25.592 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:56:25.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T20:56:25.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.788680 -999.00  +17.60  12.56     65  +11.00 1 2 1 1 1     0    0 5.25 -60.94 Z..SW 8.8 12.6 181.2 22.0 18.6 -13.9 18.5 -15.4 18.3 -14.8 18.6 -13.6
2025-12-31T20:56:25.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T20:56:25.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T20:56:25.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.788680
2025-12-31T20:56:25.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T20:56:25.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T20:56:25.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T20:56:25.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T20:56:25.594 [DEBUG] [Thread-134504] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:56:25.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T20:56:25.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T20:56:06', tmtdew=7.4, humidity=61.99, cloud=0.0, wind=19.9, temperature=17.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T20:56:06', seeing=2.55, atlas_timestamp='2025-12-31T18:55:41.952', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T20:56:25.680 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T20:56:25.691 [DEBUG] [Thread-134507] [transport.py] [_log()] starting thread (client mode): 0xb1776b90
2025-12-31T20:56:25.691 [DEBUG] [Thread-134507] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:56:25.706 [DEBUG] [Thread-134507] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T20:56:25.706 [INFO] [Thread-134507] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T20:56:25.713 [DEBUG] [Thread-134507] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:56:25.713 [DEBUG] [Thread-134507] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T20:56:25.713 [DEBUG] [Thread-134507] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:56:25.713 [DEBUG] [Thread-134507] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:56:25.713 [DEBUG] [Thread-134507] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:56:25.714 [DEBUG] [Thread-134507] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:56:25.714 [DEBUG] [Thread-134507] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:56:25.714 [DEBUG] [Thread-134507] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:56:25.714 [DEBUG] [Thread-134507] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:56:25.714 [DEBUG] [Thread-134507] [transport.py] [_log()] client lang: <none>
2025-12-31T20:56:25.714 [DEBUG] [Thread-134507] [transport.py] [_log()] server lang: <none>
2025-12-31T20:56:25.714 [DEBUG] [Thread-134507] [transport.py] [_log()] kex follows: False
2025-12-31T20:56:25.714 [DEBUG] [Thread-134507] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:56:25.714 [DEBUG] [Thread-134507] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:56:25.714 [DEBUG] [Thread-134507] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:56:25.714 [DEBUG] [Thread-134507] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:56:25.714 [DEBUG] [Thread-134507] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:56:25.714 [DEBUG] [Thread-134507] [transport.py] [_log()] Compression: none
2025-12-31T20:56:25.714 [DEBUG] [Thread-134507] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:56:25.775 [DEBUG] [Thread-134507] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:56:25.776 [DEBUG] [Thread-134507] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:56:25.776 [DEBUG] [Thread-134507] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T20:56:25.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T20:56:25.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:56:25.837 [DEBUG] [Thread-134507] [transport.py] [_log()] userauth is OK
2025-12-31T20:56:25.838 [DEBUG] [Thread-134507] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:56:25.838 [DEBUG] [Thread-134507] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:56:25.838 [DEBUG] [Thread-134507] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T20:56:25.838 [DEBUG] [Thread-134507] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:56:25.857 [INFO] [Thread-134507] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:56:25.857 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T20:56:25.858 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:56:26.687 [DEBUG] [Thread-134507] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:56:26.687 [DEBUG] [Thread-134507] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:56:26.735 [DEBUG] [Thread-134507] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:56:26.735 [DEBUG] [Thread-134507] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:56:26.744 [DEBUG] [Thread-134507] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:56:26.753 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:56:26.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T20:56:26.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T20:56:26.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:56:26.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:56:26.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:56:26.781 [DEBUG] [Thread-134507] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:56:34.341 [DEBUG] [Thread-134509 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:56:40.831 [DEBUG] [Thread-134510 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:56:49.395 [DEBUG] [Thread-134511 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:56:55.451 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:56:55.452 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:56:56.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T20:56:56.803 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T20:56:56.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T20:56:57.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 20, 56, 38), 7.34, 62.04, 0.0, 19.13, 17.44, 0, 0, 0, 2, 0, 0),)
2025-12-31T20:56:57.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 20:56:38
2025-12-31T20:56:57.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T20:56:57.789 [DEBUG] [Thread-134512] [transport.py] [_log()] starting thread (client mode): 0xb1746920
2025-12-31T20:56:57.789 [DEBUG] [Thread-134512] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:56:57.810 [DEBUG] [Thread-134512] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T20:56:57.810 [INFO] [Thread-134512] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T20:56:57.814 [DEBUG] [Thread-134512] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:56:57.814 [DEBUG] [Thread-134512] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T20:56:57.814 [DEBUG] [Thread-134512] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:56:57.814 [DEBUG] [Thread-134512] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:56:57.814 [DEBUG] [Thread-134512] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:56:57.814 [DEBUG] [Thread-134512] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:56:57.814 [DEBUG] [Thread-134512] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:56:57.814 [DEBUG] [Thread-134512] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:56:57.815 [DEBUG] [Thread-134512] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:56:57.815 [DEBUG] [Thread-134512] [transport.py] [_log()] client lang: <none>
2025-12-31T20:56:57.815 [DEBUG] [Thread-134512] [transport.py] [_log()] server lang: <none>
2025-12-31T20:56:57.815 [DEBUG] [Thread-134512] [transport.py] [_log()] kex follows: False
2025-12-31T20:56:57.815 [DEBUG] [Thread-134512] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:56:57.815 [DEBUG] [Thread-134512] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:56:57.815 [DEBUG] [Thread-134512] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:56:57.815 [DEBUG] [Thread-134512] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:56:57.815 [DEBUG] [Thread-134512] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:56:57.815 [DEBUG] [Thread-134512] [transport.py] [_log()] Compression: none
2025-12-31T20:56:57.815 [DEBUG] [Thread-134512] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:56:57.832 [DEBUG] [Thread-134512] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:56:57.833 [DEBUG] [Thread-134512] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:56:57.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T20:56:57.834 [DEBUG] [Thread-134512] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T20:56:57.834 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:56:57.836 [DEBUG] [Thread-134512] [transport.py] [_log()] userauth is OK
2025-12-31T20:56:57.836 [DEBUG] [Thread-134512] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:56:57.836 [DEBUG] [Thread-134512] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:56:57.836 [DEBUG] [Thread-134512] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T20:56:57.836 [DEBUG] [Thread-134512] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:56:57.860 [INFO] [Thread-134512] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:56:57.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:56:58.490 [DEBUG] [Thread-134512] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:56:58.490 [DEBUG] [Thread-134512] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:56:58.490 [DEBUG] [Thread-134512] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T20:56:58.531 [DEBUG] [Thread-134512] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:56:58.531 [DEBUG] [Thread-134512] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:56:58.535 [DEBUG] [Thread-134512] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:56:58.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:56:58.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T20:56:58.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T20:56:58.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T20:56:58.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:56:58.559 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T20:56:58.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:56:58.559 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:56:58.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T20:56:58.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.789027 -999.00  +17.60  12.38     65  +11.00 1 2 1 1 1     0    0 5.16 -59.23 Z..SW 11.9 12.4 228.1 16.9 18.6 -13.8 18.4 -14.7 18.2 -14.5 18.6 -13.7
2025-12-31T20:56:58.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T20:56:58.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T20:56:58.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.789027
2025-12-31T20:56:58.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T20:56:58.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T20:56:58.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T20:56:58.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T20:56:58.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T20:56:58.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T20:56:38', tmtdew=7.34, humidity=62.04, cloud=0.0, wind=19.13, temperature=17.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T20:56:38', seeing=2.36, atlas_timestamp='2025-12-31T18:56:11.933', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T20:56:58.562 [DEBUG] [Thread-134512] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:56:58.645 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T20:56:58.658 [DEBUG] [Thread-134515] [transport.py] [_log()] starting thread (client mode): 0xb1747730
2025-12-31T20:56:58.658 [DEBUG] [Thread-134515] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:56:58.676 [DEBUG] [Thread-134515] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T20:56:58.677 [INFO] [Thread-134515] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T20:56:58.684 [DEBUG] [Thread-134515] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:56:58.685 [DEBUG] [Thread-134515] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T20:56:58.685 [DEBUG] [Thread-134515] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:56:58.685 [DEBUG] [Thread-134515] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:56:58.685 [DEBUG] [Thread-134515] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:56:58.685 [DEBUG] [Thread-134515] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:56:58.685 [DEBUG] [Thread-134515] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:56:58.685 [DEBUG] [Thread-134515] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:56:58.685 [DEBUG] [Thread-134515] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:56:58.685 [DEBUG] [Thread-134515] [transport.py] [_log()] client lang: <none>
2025-12-31T20:56:58.685 [DEBUG] [Thread-134515] [transport.py] [_log()] server lang: <none>
2025-12-31T20:56:58.685 [DEBUG] [Thread-134515] [transport.py] [_log()] kex follows: False
2025-12-31T20:56:58.685 [DEBUG] [Thread-134515] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:56:58.685 [DEBUG] [Thread-134515] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:56:58.685 [DEBUG] [Thread-134515] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:56:58.686 [DEBUG] [Thread-134515] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:56:58.686 [DEBUG] [Thread-134515] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:56:58.686 [DEBUG] [Thread-134515] [transport.py] [_log()] Compression: none
2025-12-31T20:56:58.686 [DEBUG] [Thread-134515] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:56:58.746 [DEBUG] [Thread-134515] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:56:58.746 [DEBUG] [Thread-134515] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:56:58.747 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T20:56:58.747 [DEBUG] [Thread-134515] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T20:56:58.748 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:56:58.805 [DEBUG] [Thread-134515] [transport.py] [_log()] userauth is OK
2025-12-31T20:56:58.806 [DEBUG] [Thread-134515] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:56:58.806 [DEBUG] [Thread-134515] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:56:58.806 [DEBUG] [Thread-134515] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T20:56:58.806 [DEBUG] [Thread-134515] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:56:58.825 [INFO] [Thread-134515] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:56:58.826 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T20:56:58.826 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:56:59.688 [DEBUG] [Thread-134515] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:56:59.688 [DEBUG] [Thread-134515] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:56:59.736 [DEBUG] [Thread-134515] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:56:59.736 [DEBUG] [Thread-134515] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:56:59.745 [DEBUG] [Thread-134515] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:56:59.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:56:59.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T20:56:59.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T20:56:59.773 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:56:59.774 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:56:59.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:56:59.782 [DEBUG] [Thread-134515] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:57:04.426 [DEBUG] [Thread-134517 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:57:19.484 [DEBUG] [Thread-134518 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:57:29.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T20:57:29.804 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T20:57:29.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T20:57:30.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 20, 57, 10), 7.34, 62.06, 0.0, 20.36, 17.39, 0, 0, 0, 2, 0, 0),)
2025-12-31T20:57:30.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 20:57:10
2025-12-31T20:57:30.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T20:57:30.808 [DEBUG] [Thread-134519] [transport.py] [_log()] starting thread (client mode): 0xb9591ab0
2025-12-31T20:57:30.808 [DEBUG] [Thread-134519] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:57:30.827 [DEBUG] [Thread-134519] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T20:57:30.827 [INFO] [Thread-134519] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T20:57:30.830 [DEBUG] [Thread-134519] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:57:30.831 [DEBUG] [Thread-134519] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T20:57:30.831 [DEBUG] [Thread-134519] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:57:30.831 [DEBUG] [Thread-134519] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:57:30.831 [DEBUG] [Thread-134519] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:57:30.831 [DEBUG] [Thread-134519] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:57:30.831 [DEBUG] [Thread-134519] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:57:30.831 [DEBUG] [Thread-134519] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:57:30.831 [DEBUG] [Thread-134519] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:57:30.831 [DEBUG] [Thread-134519] [transport.py] [_log()] client lang: <none>
2025-12-31T20:57:30.831 [DEBUG] [Thread-134519] [transport.py] [_log()] server lang: <none>
2025-12-31T20:57:30.831 [DEBUG] [Thread-134519] [transport.py] [_log()] kex follows: False
2025-12-31T20:57:30.831 [DEBUG] [Thread-134519] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:57:30.831 [DEBUG] [Thread-134519] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:57:30.831 [DEBUG] [Thread-134519] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:57:30.831 [DEBUG] [Thread-134519] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:57:30.831 [DEBUG] [Thread-134519] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:57:30.831 [DEBUG] [Thread-134519] [transport.py] [_log()] Compression: none
2025-12-31T20:57:30.831 [DEBUG] [Thread-134519] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:57:30.846 [DEBUG] [Thread-134519] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:57:30.846 [DEBUG] [Thread-134519] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:57:30.846 [DEBUG] [Thread-134519] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T20:57:30.846 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T20:57:30.846 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:57:30.847 [DEBUG] [Thread-134519] [transport.py] [_log()] userauth is OK
2025-12-31T20:57:30.847 [DEBUG] [Thread-134519] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:57:30.847 [DEBUG] [Thread-134519] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:57:30.847 [DEBUG] [Thread-134519] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T20:57:30.847 [DEBUG] [Thread-134519] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:57:30.856 [INFO] [Thread-134519] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:57:30.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:57:31.654 [DEBUG] [Thread-134519] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:57:31.654 [DEBUG] [Thread-134519] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:57:31.655 [DEBUG] [Thread-134519] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T20:57:31.695 [DEBUG] [Thread-134519] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:57:31.695 [DEBUG] [Thread-134519] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:57:31.698 [DEBUG] [Thread-134519] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:57:31.710 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:57:31.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T20:57:31.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T20:57:31.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T20:57:31.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:57:31.722 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T20:57:31.722 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:57:31.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:57:31.730 [DEBUG] [Thread-134519] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:57:31.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T20:57:31.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.789375 -999.00  +17.60   7.80     65  +11.00 1 2 1 1 1     0    0 5.32 -56.86 ....W 12.9 7.8 202.3 22.8 18.6 -13.6 18.5 -14.7 18.2 -14.5 18.6 -13.7
2025-12-31T20:57:31.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T20:57:31.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T20:57:31.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.789375
2025-12-31T20:57:31.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T20:57:31.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T20:57:31.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T20:57:31.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T20:57:31.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T20:57:31.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T20:57:10', tmtdew=7.34, humidity=62.06, cloud=0.0, wind=20.36, temperature=17.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T20:57:10', seeing=2.36, atlas_timestamp='2025-12-31T18:56:42.000', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T20:57:31.820 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T20:57:31.831 [DEBUG] [Thread-134522] [transport.py] [_log()] starting thread (client mode): 0xb17779d0
2025-12-31T20:57:31.831 [DEBUG] [Thread-134522] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:57:31.846 [DEBUG] [Thread-134522] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T20:57:31.846 [INFO] [Thread-134522] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T20:57:31.854 [DEBUG] [Thread-134522] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:57:31.855 [DEBUG] [Thread-134522] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T20:57:31.855 [DEBUG] [Thread-134522] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:57:31.855 [DEBUG] [Thread-134522] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:57:31.855 [DEBUG] [Thread-134522] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:57:31.855 [DEBUG] [Thread-134522] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:57:31.855 [DEBUG] [Thread-134522] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:57:31.855 [DEBUG] [Thread-134522] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:57:31.855 [DEBUG] [Thread-134522] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:57:31.855 [DEBUG] [Thread-134522] [transport.py] [_log()] client lang: <none>
2025-12-31T20:57:31.855 [DEBUG] [Thread-134522] [transport.py] [_log()] server lang: <none>
2025-12-31T20:57:31.855 [DEBUG] [Thread-134522] [transport.py] [_log()] kex follows: False
2025-12-31T20:57:31.855 [DEBUG] [Thread-134522] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:57:31.855 [DEBUG] [Thread-134522] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:57:31.855 [DEBUG] [Thread-134522] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:57:31.855 [DEBUG] [Thread-134522] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:57:31.855 [DEBUG] [Thread-134522] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:57:31.855 [DEBUG] [Thread-134522] [transport.py] [_log()] Compression: none
2025-12-31T20:57:31.855 [DEBUG] [Thread-134522] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:57:31.914 [DEBUG] [Thread-134522] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:57:31.914 [DEBUG] [Thread-134522] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:57:31.915 [DEBUG] [Thread-134522] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T20:57:31.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T20:57:31.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:57:31.973 [DEBUG] [Thread-134522] [transport.py] [_log()] userauth is OK
2025-12-31T20:57:31.974 [DEBUG] [Thread-134522] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:57:31.974 [DEBUG] [Thread-134522] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:57:31.974 [DEBUG] [Thread-134522] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T20:57:31.974 [DEBUG] [Thread-134522] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:57:31.993 [INFO] [Thread-134522] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:57:31.993 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T20:57:31.994 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:57:32.788 [DEBUG] [Thread-134522] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:57:32.788 [DEBUG] [Thread-134522] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:57:32.835 [DEBUG] [Thread-134522] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:57:32.836 [DEBUG] [Thread-134522] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:57:32.844 [DEBUG] [Thread-134522] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:57:32.853 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:57:32.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T20:57:32.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T20:57:32.870 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:57:32.870 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:57:32.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:57:32.878 [DEBUG] [Thread-134522] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:57:34.514 [DEBUG] [Thread-134524 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:57:40.899 [DEBUG] [Thread-134525 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:57:49.567 [DEBUG] [Thread-134526 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:57:55.655 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:57:55.656 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:58:02.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T20:58:02.900 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T20:58:02.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T20:58:03.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 20, 57, 42), 7.32, 62.11, 0.0, 21.47, 17.39, 0, 0, 0, 2, 0, 0),)
2025-12-31T20:58:03.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 20:57:42
2025-12-31T20:58:03.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T20:58:03.898 [DEBUG] [Thread-134527] [transport.py] [_log()] starting thread (client mode): 0xb9591ab0
2025-12-31T20:58:03.898 [DEBUG] [Thread-134527] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:58:03.917 [DEBUG] [Thread-134527] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T20:58:03.918 [INFO] [Thread-134527] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T20:58:03.919 [DEBUG] [Thread-134527] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:58:03.919 [DEBUG] [Thread-134527] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T20:58:03.919 [DEBUG] [Thread-134527] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:58:03.919 [DEBUG] [Thread-134527] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:58:03.919 [DEBUG] [Thread-134527] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:58:03.919 [DEBUG] [Thread-134527] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:58:03.919 [DEBUG] [Thread-134527] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:58:03.919 [DEBUG] [Thread-134527] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:58:03.919 [DEBUG] [Thread-134527] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:58:03.919 [DEBUG] [Thread-134527] [transport.py] [_log()] client lang: <none>
2025-12-31T20:58:03.919 [DEBUG] [Thread-134527] [transport.py] [_log()] server lang: <none>
2025-12-31T20:58:03.919 [DEBUG] [Thread-134527] [transport.py] [_log()] kex follows: False
2025-12-31T20:58:03.919 [DEBUG] [Thread-134527] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:58:03.919 [DEBUG] [Thread-134527] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:58:03.919 [DEBUG] [Thread-134527] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:58:03.919 [DEBUG] [Thread-134527] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:58:03.919 [DEBUG] [Thread-134527] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:58:03.919 [DEBUG] [Thread-134527] [transport.py] [_log()] Compression: none
2025-12-31T20:58:03.919 [DEBUG] [Thread-134527] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:58:03.926 [DEBUG] [Thread-134527] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:58:03.927 [DEBUG] [Thread-134527] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:58:03.927 [DEBUG] [Thread-134527] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T20:58:03.927 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T20:58:03.927 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:58:03.927 [DEBUG] [Thread-134527] [transport.py] [_log()] userauth is OK
2025-12-31T20:58:03.927 [DEBUG] [Thread-134527] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:58:03.928 [DEBUG] [Thread-134527] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:58:03.928 [DEBUG] [Thread-134527] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T20:58:03.928 [DEBUG] [Thread-134527] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:58:03.936 [INFO] [Thread-134527] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:58:03.937 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:58:04.556 [DEBUG] [Thread-134527] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:58:04.556 [DEBUG] [Thread-134527] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:58:04.556 [DEBUG] [Thread-134527] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T20:58:04.597 [DEBUG] [Thread-134527] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:58:04.597 [DEBUG] [Thread-134527] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:58:04.600 [DEBUG] [Thread-134527] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:58:04.611 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:58:04.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T20:58:04.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T20:58:04.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T20:58:04.613 [DEBUG] [Thread-134530 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:58:04.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:58:04.616 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T20:58:04.617 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:58:04.617 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:58:04.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T20:58:04.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.789721 -999.00  +17.60   7.23     65  +11.00 1 2 1 1 1     0    0 5.40 -55.17 ....W 12.2 7.2 225.4 17.2 18.6 -13.5 18.5 -14.7 18.2 -14.4 18.6 -13.7
2025-12-31T20:58:04.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T20:58:04.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T20:58:04.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.789721
2025-12-31T20:58:04.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T20:58:04.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T20:58:04.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T20:58:04.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T20:58:04.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T20:58:04.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T20:57:42', tmtdew=7.32, humidity=62.11, cloud=0.0, wind=21.47, temperature=17.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T20:57:42', seeing=2.36, atlas_timestamp='2025-12-31T18:57:11.894', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T20:58:04.617 [DEBUG] [Thread-134527] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:58:04.692 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T20:58:04.703 [DEBUG] [Thread-134531] [transport.py] [_log()] starting thread (client mode): 0xb175baf0
2025-12-31T20:58:04.704 [DEBUG] [Thread-134531] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:58:04.719 [DEBUG] [Thread-134531] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T20:58:04.719 [INFO] [Thread-134531] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T20:58:04.726 [DEBUG] [Thread-134531] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:58:04.726 [DEBUG] [Thread-134531] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T20:58:04.726 [DEBUG] [Thread-134531] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:58:04.726 [DEBUG] [Thread-134531] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:58:04.726 [DEBUG] [Thread-134531] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:58:04.726 [DEBUG] [Thread-134531] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:58:04.726 [DEBUG] [Thread-134531] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:58:04.726 [DEBUG] [Thread-134531] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:58:04.726 [DEBUG] [Thread-134531] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:58:04.726 [DEBUG] [Thread-134531] [transport.py] [_log()] client lang: <none>
2025-12-31T20:58:04.726 [DEBUG] [Thread-134531] [transport.py] [_log()] server lang: <none>
2025-12-31T20:58:04.726 [DEBUG] [Thread-134531] [transport.py] [_log()] kex follows: False
2025-12-31T20:58:04.726 [DEBUG] [Thread-134531] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:58:04.726 [DEBUG] [Thread-134531] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:58:04.726 [DEBUG] [Thread-134531] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:58:04.727 [DEBUG] [Thread-134531] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:58:04.727 [DEBUG] [Thread-134531] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:58:04.727 [DEBUG] [Thread-134531] [transport.py] [_log()] Compression: none
2025-12-31T20:58:04.727 [DEBUG] [Thread-134531] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:58:04.784 [DEBUG] [Thread-134531] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:58:04.784 [DEBUG] [Thread-134531] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:58:04.784 [DEBUG] [Thread-134531] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T20:58:04.784 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T20:58:04.784 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:58:04.841 [DEBUG] [Thread-134531] [transport.py] [_log()] userauth is OK
2025-12-31T20:58:04.841 [DEBUG] [Thread-134531] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:58:04.841 [DEBUG] [Thread-134531] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:58:04.841 [DEBUG] [Thread-134531] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T20:58:04.841 [DEBUG] [Thread-134531] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:58:04.859 [INFO] [Thread-134531] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:58:04.860 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T20:58:04.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:58:05.662 [DEBUG] [Thread-134531] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:58:05.662 [DEBUG] [Thread-134531] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:58:05.713 [DEBUG] [Thread-134531] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:58:05.713 [DEBUG] [Thread-134531] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:58:05.725 [DEBUG] [Thread-134531] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:58:05.736 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:58:05.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T20:58:05.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T20:58:05.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:58:05.760 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:58:05.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:58:05.768 [DEBUG] [Thread-134531] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:58:19.641 [DEBUG] [Thread-134533 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:58:34.691 [DEBUG] [Thread-134534 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:58:35.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T20:58:35.790 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T20:58:35.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T20:58:36.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 20, 58, 14), 7.33, 62.08, 0.0, 21.14, 17.41, 0, 0, 0, 2, 0, 0),)
2025-12-31T20:58:36.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 20:58:14
2025-12-31T20:58:36.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T20:58:36.778 [DEBUG] [Thread-134535] [transport.py] [_log()] starting thread (client mode): 0xb6bbaa70
2025-12-31T20:58:36.778 [DEBUG] [Thread-134535] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:58:36.797 [DEBUG] [Thread-134535] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T20:58:36.797 [INFO] [Thread-134535] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T20:58:36.800 [DEBUG] [Thread-134535] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:58:36.800 [DEBUG] [Thread-134535] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T20:58:36.800 [DEBUG] [Thread-134535] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:58:36.800 [DEBUG] [Thread-134535] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:58:36.800 [DEBUG] [Thread-134535] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:58:36.800 [DEBUG] [Thread-134535] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:58:36.801 [DEBUG] [Thread-134535] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:58:36.801 [DEBUG] [Thread-134535] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:58:36.801 [DEBUG] [Thread-134535] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:58:36.801 [DEBUG] [Thread-134535] [transport.py] [_log()] client lang: <none>
2025-12-31T20:58:36.801 [DEBUG] [Thread-134535] [transport.py] [_log()] server lang: <none>
2025-12-31T20:58:36.801 [DEBUG] [Thread-134535] [transport.py] [_log()] kex follows: False
2025-12-31T20:58:36.801 [DEBUG] [Thread-134535] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:58:36.801 [DEBUG] [Thread-134535] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:58:36.801 [DEBUG] [Thread-134535] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:58:36.801 [DEBUG] [Thread-134535] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:58:36.801 [DEBUG] [Thread-134535] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:58:36.801 [DEBUG] [Thread-134535] [transport.py] [_log()] Compression: none
2025-12-31T20:58:36.801 [DEBUG] [Thread-134535] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:58:36.817 [DEBUG] [Thread-134535] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:58:36.818 [DEBUG] [Thread-134535] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:58:36.818 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T20:58:36.819 [DEBUG] [Thread-134535] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T20:58:36.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:58:36.821 [DEBUG] [Thread-134535] [transport.py] [_log()] userauth is OK
2025-12-31T20:58:36.821 [DEBUG] [Thread-134535] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:58:36.821 [DEBUG] [Thread-134535] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:58:36.821 [DEBUG] [Thread-134535] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T20:58:36.821 [DEBUG] [Thread-134535] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:58:36.839 [INFO] [Thread-134535] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:58:36.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:58:37.630 [DEBUG] [Thread-134535] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:58:37.630 [DEBUG] [Thread-134535] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:58:37.630 [DEBUG] [Thread-134535] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T20:58:37.670 [DEBUG] [Thread-134535] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:58:37.670 [DEBUG] [Thread-134535] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:58:37.673 [DEBUG] [Thread-134535] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:58:37.686 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:58:37.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T20:58:37.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T20:58:37.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T20:58:37.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:58:37.701 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T20:58:37.701 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:58:37.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:58:37.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T20:58:37.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.790069 -999.00  +17.50  12.00     65  +11.00 1 2 1 1 1     0    0 5.22 -56.25 ....W 9.7 12.0 197.3 24.2 18.6 -13.6 18.4 -14.5 18.3 -14.6 18.6 -13.8
2025-12-31T20:58:37.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T20:58:37.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T20:58:37.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.790069
2025-12-31T20:58:37.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T20:58:37.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T20:58:37.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T20:58:37.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T20:58:37.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T20:58:37.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T20:58:14', tmtdew=7.33, humidity=62.08, cloud=0.0, wind=21.14, temperature=17.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T20:58:15', seeing=2.55, atlas_timestamp='2025-12-31T18:57:41.962', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T20:58:37.702 [DEBUG] [Thread-134535] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:58:37.772 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T20:58:37.784 [DEBUG] [Thread-134538] [transport.py] [_log()] starting thread (client mode): 0xb95929e0
2025-12-31T20:58:37.784 [DEBUG] [Thread-134538] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:58:37.799 [DEBUG] [Thread-134538] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T20:58:37.799 [INFO] [Thread-134538] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T20:58:37.807 [DEBUG] [Thread-134538] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:58:37.807 [DEBUG] [Thread-134538] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T20:58:37.807 [DEBUG] [Thread-134538] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:58:37.807 [DEBUG] [Thread-134538] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:58:37.807 [DEBUG] [Thread-134538] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:58:37.807 [DEBUG] [Thread-134538] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:58:37.807 [DEBUG] [Thread-134538] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:58:37.807 [DEBUG] [Thread-134538] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:58:37.807 [DEBUG] [Thread-134538] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:58:37.807 [DEBUG] [Thread-134538] [transport.py] [_log()] client lang: <none>
2025-12-31T20:58:37.808 [DEBUG] [Thread-134538] [transport.py] [_log()] server lang: <none>
2025-12-31T20:58:37.808 [DEBUG] [Thread-134538] [transport.py] [_log()] kex follows: False
2025-12-31T20:58:37.808 [DEBUG] [Thread-134538] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:58:37.808 [DEBUG] [Thread-134538] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:58:37.808 [DEBUG] [Thread-134538] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:58:37.808 [DEBUG] [Thread-134538] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:58:37.808 [DEBUG] [Thread-134538] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:58:37.808 [DEBUG] [Thread-134538] [transport.py] [_log()] Compression: none
2025-12-31T20:58:37.808 [DEBUG] [Thread-134538] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:58:37.864 [DEBUG] [Thread-134538] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:58:37.864 [DEBUG] [Thread-134538] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:58:37.865 [DEBUG] [Thread-134538] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T20:58:37.865 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T20:58:37.866 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:58:37.921 [DEBUG] [Thread-134538] [transport.py] [_log()] userauth is OK
2025-12-31T20:58:37.922 [DEBUG] [Thread-134538] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:58:37.922 [DEBUG] [Thread-134538] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:58:37.922 [DEBUG] [Thread-134538] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T20:58:37.922 [DEBUG] [Thread-134538] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:58:37.944 [INFO] [Thread-134538] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:58:37.944 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T20:58:37.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:58:38.840 [DEBUG] [Thread-134538] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:58:38.841 [DEBUG] [Thread-134538] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:58:38.889 [DEBUG] [Thread-134538] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:58:38.889 [DEBUG] [Thread-134538] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:58:38.898 [DEBUG] [Thread-134538] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:58:38.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:58: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')
2025-12-31T20:58:38.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T20:58:38.927 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:58:38.927 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:58:38.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:58:38.935 [DEBUG] [Thread-134538] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:58:40.957 [DEBUG] [Thread-134540 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:58:49.722 [DEBUG] [Thread-134541 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:58:55.859 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:58:55.860 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:59:04.777 [DEBUG] [Thread-134542 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:59:08.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T20:59:08.958 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T20:59:08.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T20:59:09.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 20, 58, 47), 7.32, 62.13, 0.0, 16.67, 17.41, 0, 0, 0, 2, 0, 0),)
2025-12-31T20:59:09.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 20:58:47
2025-12-31T20:59:09.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T20:59:09.954 [DEBUG] [Thread-134543] [transport.py] [_log()] starting thread (client mode): 0xb6bba800
2025-12-31T20:59:09.954 [DEBUG] [Thread-134543] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:59:09.976 [DEBUG] [Thread-134543] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T20:59:09.976 [INFO] [Thread-134543] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T20:59:09.979 [DEBUG] [Thread-134543] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:59:09.980 [DEBUG] [Thread-134543] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T20:59:09.980 [DEBUG] [Thread-134543] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:59:09.980 [DEBUG] [Thread-134543] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:59:09.980 [DEBUG] [Thread-134543] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:59:09.980 [DEBUG] [Thread-134543] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:59:09.980 [DEBUG] [Thread-134543] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:59:09.980 [DEBUG] [Thread-134543] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:59:09.980 [DEBUG] [Thread-134543] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:59:09.980 [DEBUG] [Thread-134543] [transport.py] [_log()] client lang: <none>
2025-12-31T20:59:09.980 [DEBUG] [Thread-134543] [transport.py] [_log()] server lang: <none>
2025-12-31T20:59:09.980 [DEBUG] [Thread-134543] [transport.py] [_log()] kex follows: False
2025-12-31T20:59:09.980 [DEBUG] [Thread-134543] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:59:09.980 [DEBUG] [Thread-134543] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:59:09.980 [DEBUG] [Thread-134543] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:59:09.980 [DEBUG] [Thread-134543] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:59:09.980 [DEBUG] [Thread-134543] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:59:09.980 [DEBUG] [Thread-134543] [transport.py] [_log()] Compression: none
2025-12-31T20:59:09.980 [DEBUG] [Thread-134543] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:59:09.997 [DEBUG] [Thread-134543] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:59:09.998 [DEBUG] [Thread-134543] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:59:09.998 [DEBUG] [Thread-134543] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T20:59:09.999 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T20:59:09.999 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:59:10.000 [DEBUG] [Thread-134543] [transport.py] [_log()] userauth is OK
2025-12-31T20:59:10.001 [DEBUG] [Thread-134543] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:59:10.001 [DEBUG] [Thread-134543] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:59:10.001 [DEBUG] [Thread-134543] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T20:59:10.001 [DEBUG] [Thread-134543] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:59:10.024 [INFO] [Thread-134543] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:59:10.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:59:10.694 [DEBUG] [Thread-134543] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:59:10.695 [DEBUG] [Thread-134543] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:59:10.695 [DEBUG] [Thread-134543] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T20:59:10.736 [DEBUG] [Thread-134543] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:59:10.736 [DEBUG] [Thread-134543] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:59:10.739 [DEBUG] [Thread-134543] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:59:10.753 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:59:10.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T20:59:10.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T20:59:10.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T20:59:10.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:59:10.766 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T20:59:10.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:59:10.766 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:59:10.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T20:59:10.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.790416 -999.00  +17.60  10.23     65  +11.00 1 2 1 1 1     0    0 5.23 -57.87 ....W 6.2 10.2 203.8 15.2 18.6 -13.4 18.5 -14.3 18.2 -14.3 18.6 -13.6
2025-12-31T20:59:10.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T20:59:10.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T20:59:10.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.790416
2025-12-31T20:59:10.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T20:59:10.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T20:59:10.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T20:59:10.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T20:59:10.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T20:59:10.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T20:58:47', tmtdew=7.32, humidity=62.13, cloud=0.0, wind=16.67, temperature=17.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T20:58:47', seeing=2.35, atlas_timestamp='2025-12-31T18:58:11.942', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T20:59:10.769 [DEBUG] [Thread-134543] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:59:10.853 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T20:59:10.866 [DEBUG] [Thread-134546] [transport.py] [_log()] starting thread (client mode): 0xb1758df0
2025-12-31T20:59:10.866 [DEBUG] [Thread-134546] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:59:10.879 [DEBUG] [Thread-134546] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T20:59:10.880 [INFO] [Thread-134546] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T20:59:10.887 [DEBUG] [Thread-134546] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:59:10.887 [DEBUG] [Thread-134546] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T20:59:10.887 [DEBUG] [Thread-134546] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:59:10.888 [DEBUG] [Thread-134546] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:59:10.888 [DEBUG] [Thread-134546] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:59:10.888 [DEBUG] [Thread-134546] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:59:10.888 [DEBUG] [Thread-134546] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:59:10.888 [DEBUG] [Thread-134546] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:59:10.888 [DEBUG] [Thread-134546] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:59:10.888 [DEBUG] [Thread-134546] [transport.py] [_log()] client lang: <none>
2025-12-31T20:59:10.888 [DEBUG] [Thread-134546] [transport.py] [_log()] server lang: <none>
2025-12-31T20:59:10.888 [DEBUG] [Thread-134546] [transport.py] [_log()] kex follows: False
2025-12-31T20:59:10.889 [DEBUG] [Thread-134546] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:59:10.889 [DEBUG] [Thread-134546] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:59:10.889 [DEBUG] [Thread-134546] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:59:10.889 [DEBUG] [Thread-134546] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:59:10.889 [DEBUG] [Thread-134546] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:59:10.889 [DEBUG] [Thread-134546] [transport.py] [_log()] Compression: none
2025-12-31T20:59:10.889 [DEBUG] [Thread-134546] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:59:10.950 [DEBUG] [Thread-134546] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:59:10.951 [DEBUG] [Thread-134546] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:59:10.952 [DEBUG] [Thread-134546] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T20:59:10.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T20:59:10.962 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:59:11.008 [DEBUG] [Thread-134546] [transport.py] [_log()] userauth is OK
2025-12-31T20:59:11.008 [DEBUG] [Thread-134546] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:59:11.008 [DEBUG] [Thread-134546] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:59:11.009 [DEBUG] [Thread-134546] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T20:59:11.009 [DEBUG] [Thread-134546] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:59:11.027 [INFO] [Thread-134546] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:59:11.028 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T20:59:11.028 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:59:11.817 [DEBUG] [Thread-134546] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:59:11.817 [DEBUG] [Thread-134546] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:59:11.865 [DEBUG] [Thread-134546] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:59:11.865 [DEBUG] [Thread-134546] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:59:11.874 [DEBUG] [Thread-134546] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:59:11.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:59:11.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T20:59:11.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T20:59:11.902 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:59:11.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:59:11.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:59:11.911 [DEBUG] [Thread-134546] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:59:19.810 [DEBUG] [Thread-134548 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:59:34.848 [DEBUG] [Thread-134549 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:59:41.044 [DEBUG] [Thread-134550 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:59:41.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T20:59:41.934 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T20:59:41.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-12-31T20:59:42.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 20, 59, 19), 7.33, 62.09, 0.0, 15.39, 17.42, 0, 0, 0, 2, 0, 0),)
2025-12-31T20:59:42.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 20:59:19
2025-12-31T20:59:42.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T20:59:42.949 [DEBUG] [Thread-134551] [transport.py] [_log()] starting thread (client mode): 0xb95d5f90
2025-12-31T20:59:42.949 [DEBUG] [Thread-134551] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:59:42.969 [DEBUG] [Thread-134551] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T20:59:42.969 [INFO] [Thread-134551] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T20:59:42.973 [DEBUG] [Thread-134551] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:59:42.973 [DEBUG] [Thread-134551] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T20:59:42.973 [DEBUG] [Thread-134551] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:59:42.973 [DEBUG] [Thread-134551] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:59:42.973 [DEBUG] [Thread-134551] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:59:42.973 [DEBUG] [Thread-134551] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:59:42.973 [DEBUG] [Thread-134551] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:59:42.973 [DEBUG] [Thread-134551] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:59:42.973 [DEBUG] [Thread-134551] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:59:42.973 [DEBUG] [Thread-134551] [transport.py] [_log()] client lang: <none>
2025-12-31T20:59:42.973 [DEBUG] [Thread-134551] [transport.py] [_log()] server lang: <none>
2025-12-31T20:59:42.973 [DEBUG] [Thread-134551] [transport.py] [_log()] kex follows: False
2025-12-31T20:59:42.973 [DEBUG] [Thread-134551] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:59:42.973 [DEBUG] [Thread-134551] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:59:42.973 [DEBUG] [Thread-134551] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:59:42.973 [DEBUG] [Thread-134551] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:59:42.974 [DEBUG] [Thread-134551] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:59:42.974 [DEBUG] [Thread-134551] [transport.py] [_log()] Compression: none
2025-12-31T20:59:42.974 [DEBUG] [Thread-134551] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:59:42.990 [DEBUG] [Thread-134551] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:59:42.991 [DEBUG] [Thread-134551] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:59:42.991 [DEBUG] [Thread-134551] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T20:59:42.992 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T20:59:42.992 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:59:42.993 [DEBUG] [Thread-134551] [transport.py] [_log()] userauth is OK
2025-12-31T20:59:42.993 [DEBUG] [Thread-134551] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:59:42.993 [DEBUG] [Thread-134551] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:59:42.993 [DEBUG] [Thread-134551] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T20:59:42.993 [DEBUG] [Thread-134551] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:59:43.011 [INFO] [Thread-134551] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:59:43.012 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:59:43.650 [DEBUG] [Thread-134551] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:59:43.651 [DEBUG] [Thread-134551] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:59:43.651 [DEBUG] [Thread-134551] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T20:59:43.691 [DEBUG] [Thread-134551] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:59:43.692 [DEBUG] [Thread-134551] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:59:43.694 [DEBUG] [Thread-134551] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:59:43.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:59:43.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T20:59:43.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T20:59:43.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T20:59:43.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:59:43.715 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T20:59:43.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:59:43.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:59:43.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T20:59:43.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.790763 -999.00  +17.60   9.73     65  +11.00 1 2 1 1 1     0    0 5.07 -63.13 Z...W 6.4 9.7 204.6 16.1 18.6 -13.6 18.5 -14.4 18.3 -14.6 18.6 -13.7
2025-12-31T20:59:43.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T20:59:43.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T20:59:43.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.790763
2025-12-31T20:59:43.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T20:59:43.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T20:59:43.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T20:59:43.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T20:59:43.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T20:59:43.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T20:59:19', tmtdew=7.33, humidity=62.09, cloud=0.0, wind=15.39, temperature=17.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T20:59:19', seeing=2.35, atlas_timestamp='2025-12-31T18:58:41.923', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T20:59:43.718 [DEBUG] [Thread-134551] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:59:43.803 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T20:59:43.814 [DEBUG] [Thread-134554] [transport.py] [_log()] starting thread (client mode): 0xb6bbff10
2025-12-31T20:59:43.814 [DEBUG] [Thread-134554] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T20:59:43.828 [DEBUG] [Thread-134554] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T20:59:43.829 [INFO] [Thread-134554] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T20:59:43.836 [DEBUG] [Thread-134554] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T20:59:43.836 [DEBUG] [Thread-134554] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T20:59:43.836 [DEBUG] [Thread-134554] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T20:59:43.836 [DEBUG] [Thread-134554] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:59:43.836 [DEBUG] [Thread-134554] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T20:59:43.837 [DEBUG] [Thread-134554] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:59:43.837 [DEBUG] [Thread-134554] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T20:59:43.837 [DEBUG] [Thread-134554] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T20:59:43.837 [DEBUG] [Thread-134554] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T20:59:43.837 [DEBUG] [Thread-134554] [transport.py] [_log()] client lang: <none>
2025-12-31T20:59:43.837 [DEBUG] [Thread-134554] [transport.py] [_log()] server lang: <none>
2025-12-31T20:59:43.837 [DEBUG] [Thread-134554] [transport.py] [_log()] kex follows: False
2025-12-31T20:59:43.837 [DEBUG] [Thread-134554] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T20:59:43.837 [DEBUG] [Thread-134554] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T20:59:43.837 [DEBUG] [Thread-134554] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T20:59:43.837 [DEBUG] [Thread-134554] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T20:59:43.837 [DEBUG] [Thread-134554] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T20:59:43.837 [DEBUG] [Thread-134554] [transport.py] [_log()] Compression: none
2025-12-31T20:59:43.838 [DEBUG] [Thread-134554] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T20:59:43.894 [DEBUG] [Thread-134554] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T20:59:43.895 [DEBUG] [Thread-134554] [transport.py] [_log()] Switch to new keys ...
2025-12-31T20:59:43.895 [DEBUG] [Thread-134554] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T20:59:43.896 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T20:59:43.896 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T20:59:43.950 [DEBUG] [Thread-134554] [transport.py] [_log()] userauth is OK
2025-12-31T20:59:43.951 [DEBUG] [Thread-134554] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T20:59:43.951 [DEBUG] [Thread-134554] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T20:59:43.951 [DEBUG] [Thread-134554] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T20:59:43.951 [DEBUG] [Thread-134554] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T20:59:43.970 [INFO] [Thread-134554] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T20:59:43.971 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T20:59:43.971 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T20:59:44.809 [DEBUG] [Thread-134554] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T20:59:44.809 [DEBUG] [Thread-134554] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T20:59:44.860 [DEBUG] [Thread-134554] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T20:59:44.860 [DEBUG] [Thread-134554] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T20:59:44.869 [DEBUG] [Thread-134554] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T20:59:44.880 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T20:59:44.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-12-31T20:59:44.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T20:59:44.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T20:59:44.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T20:59:44.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T20:59:44.908 [DEBUG] [Thread-134554] [transport.py] [_log()] EOF in transport thread
2025-12-31T20:59:49.885 [DEBUG] [Thread-134556 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:59:56.061 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T20:59:56.063 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:00:04.932 [DEBUG] [Thread-134557 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:00:14.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T21:00:14.925 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T21:00:14.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T21:00:15.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 20, 59, 51), 7.33, 62.09, 0.0, 15.39, 17.41, 0, 0, 0, 2, 0, 0),)
2025-12-31T21:00:15.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 20:59:51
2025-12-31T21:00:15.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T21:00:15.939 [DEBUG] [Thread-134558] [transport.py] [_log()] starting thread (client mode): 0xb1786b30
2025-12-31T21:00:15.939 [DEBUG] [Thread-134558] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:00:15.959 [DEBUG] [Thread-134558] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T21:00:15.960 [INFO] [Thread-134558] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T21:00:15.963 [DEBUG] [Thread-134558] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:00:15.963 [DEBUG] [Thread-134558] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T21:00:15.963 [DEBUG] [Thread-134558] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:00:15.963 [DEBUG] [Thread-134558] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:00:15.963 [DEBUG] [Thread-134558] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:00:15.963 [DEBUG] [Thread-134558] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:00:15.963 [DEBUG] [Thread-134558] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:00:15.963 [DEBUG] [Thread-134558] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:00:15.963 [DEBUG] [Thread-134558] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:00:15.963 [DEBUG] [Thread-134558] [transport.py] [_log()] client lang: <none>
2025-12-31T21:00:15.963 [DEBUG] [Thread-134558] [transport.py] [_log()] server lang: <none>
2025-12-31T21:00:15.963 [DEBUG] [Thread-134558] [transport.py] [_log()] kex follows: False
2025-12-31T21:00:15.963 [DEBUG] [Thread-134558] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:00:15.963 [DEBUG] [Thread-134558] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:00:15.963 [DEBUG] [Thread-134558] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:00:15.963 [DEBUG] [Thread-134558] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:00:15.963 [DEBUG] [Thread-134558] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:00:15.963 [DEBUG] [Thread-134558] [transport.py] [_log()] Compression: none
2025-12-31T21:00:15.963 [DEBUG] [Thread-134558] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:00:15.981 [DEBUG] [Thread-134558] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:00:15.982 [DEBUG] [Thread-134558] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:00:15.983 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T21:00:15.983 [DEBUG] [Thread-134558] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T21:00:15.984 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:00:15.986 [DEBUG] [Thread-134558] [transport.py] [_log()] userauth is OK
2025-12-31T21:00:15.986 [DEBUG] [Thread-134558] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:00:15.986 [DEBUG] [Thread-134558] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:00:15.986 [DEBUG] [Thread-134558] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T21:00:15.986 [DEBUG] [Thread-134558] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:00:16.007 [INFO] [Thread-134558] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:00:16.007 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:00:19.965 [DEBUG] [Thread-134560 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:00:23.542 [DEBUG] [Thread-134558] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:00:23.542 [DEBUG] [Thread-134558] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:00:23.543 [DEBUG] [Thread-134558] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T21:00:23.583 [DEBUG] [Thread-134558] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:00:23.583 [DEBUG] [Thread-134558] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:00:23.586 [DEBUG] [Thread-134558] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:00:23.624 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:00:23.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T21:00:23.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T21:00:23.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T21:00:23.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:00:23.774 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T21:00:23.774 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:00:23.774 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:00:23.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T21:00:23.783 [DEBUG] [Thread-134558] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:00:23.783 [WARNING] [poll_weather_worker] [driver.py] [poll_weather_state()] Unable to get atlas cloud data: list index out of range
2025-12-31T21:00:23.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T20:59:51', tmtdew=7.33, humidity=62.09, cloud=0.0, wind=15.39, temperature=17.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T20:59:51', seeing=2.35, atlas_timestamp=None, atlas_cloud=None, atlas_rain=None, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T21:00:23.858 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T21:00:23.870 [DEBUG] [Thread-134562] [transport.py] [_log()] starting thread (client mode): 0xb9578d00
2025-12-31T21:00:23.870 [DEBUG] [Thread-134562] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:00:23.884 [DEBUG] [Thread-134562] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T21:00:23.885 [INFO] [Thread-134562] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T21:00:23.892 [DEBUG] [Thread-134562] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:00:23.892 [DEBUG] [Thread-134562] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T21:00:23.892 [DEBUG] [Thread-134562] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:00:23.892 [DEBUG] [Thread-134562] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:00:23.892 [DEBUG] [Thread-134562] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:00:23.892 [DEBUG] [Thread-134562] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:00:23.892 [DEBUG] [Thread-134562] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:00:23.892 [DEBUG] [Thread-134562] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:00:23.892 [DEBUG] [Thread-134562] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:00:23.892 [DEBUG] [Thread-134562] [transport.py] [_log()] client lang: <none>
2025-12-31T21:00:23.892 [DEBUG] [Thread-134562] [transport.py] [_log()] server lang: <none>
2025-12-31T21:00:23.893 [DEBUG] [Thread-134562] [transport.py] [_log()] kex follows: False
2025-12-31T21:00:23.893 [DEBUG] [Thread-134562] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:00:23.893 [DEBUG] [Thread-134562] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:00:23.893 [DEBUG] [Thread-134562] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:00:23.893 [DEBUG] [Thread-134562] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:00:23.893 [DEBUG] [Thread-134562] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:00:23.893 [DEBUG] [Thread-134562] [transport.py] [_log()] Compression: none
2025-12-31T21:00:23.893 [DEBUG] [Thread-134562] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:00:23.949 [DEBUG] [Thread-134562] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:00:23.949 [DEBUG] [Thread-134562] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:00:23.949 [DEBUG] [Thread-134562] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T21:00:23.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T21:00:23.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:00:24.009 [DEBUG] [Thread-134562] [transport.py] [_log()] userauth is OK
2025-12-31T21:00:24.009 [DEBUG] [Thread-134562] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:00:24.009 [DEBUG] [Thread-134562] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:00:24.009 [DEBUG] [Thread-134562] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T21:00:24.009 [DEBUG] [Thread-134562] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:00:24.023 [INFO] [Thread-134562] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:00:24.023 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T21:00:24.023 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:00:24.846 [DEBUG] [Thread-134562] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:00:24.847 [DEBUG] [Thread-134562] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:00:24.894 [DEBUG] [Thread-134562] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:00:24.894 [DEBUG] [Thread-134562] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:00:24.903 [DEBUG] [Thread-134562] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:00:24.911 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:00:24.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T21:00:24.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T21:00:24.927 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:00:24.927 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:00:24.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:00:24.935 [DEBUG] [Thread-134562] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:00:35.002 [DEBUG] [Thread-134564 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:00:41.096 [DEBUG] [Thread-134565 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:00:50.054 [DEBUG] [Thread-134566 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:00:54.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T21:00:54.948 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T21:00:54.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T21:00:55.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 21, 0, 23), 7.34, 62.04, 0.0, 15.26, 17.41, 0, 0, 0, 2, 0, 0),)
2025-12-31T21:00:55.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 21:00:23
2025-12-31T21:00:55.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T21:00:55.975 [DEBUG] [Thread-134567] [transport.py] [_log()] starting thread (client mode): 0xb1746ad0
2025-12-31T21:00:55.975 [DEBUG] [Thread-134567] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:00:55.995 [DEBUG] [Thread-134567] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T21:00:55.995 [INFO] [Thread-134567] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T21:00:55.998 [DEBUG] [Thread-134567] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:00:55.998 [DEBUG] [Thread-134567] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T21:00:55.998 [DEBUG] [Thread-134567] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:00:55.998 [DEBUG] [Thread-134567] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:00:55.998 [DEBUG] [Thread-134567] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:00:55.998 [DEBUG] [Thread-134567] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:00:55.998 [DEBUG] [Thread-134567] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:00:55.998 [DEBUG] [Thread-134567] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:00:55.998 [DEBUG] [Thread-134567] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:00:55.998 [DEBUG] [Thread-134567] [transport.py] [_log()] client lang: <none>
2025-12-31T21:00:55.998 [DEBUG] [Thread-134567] [transport.py] [_log()] server lang: <none>
2025-12-31T21:00:55.998 [DEBUG] [Thread-134567] [transport.py] [_log()] kex follows: False
2025-12-31T21:00:55.998 [DEBUG] [Thread-134567] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:00:55.998 [DEBUG] [Thread-134567] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:00:55.998 [DEBUG] [Thread-134567] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:00:55.998 [DEBUG] [Thread-134567] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:00:55.998 [DEBUG] [Thread-134567] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:00:55.998 [DEBUG] [Thread-134567] [transport.py] [_log()] Compression: none
2025-12-31T21:00:55.998 [DEBUG] [Thread-134567] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:00:56.016 [DEBUG] [Thread-134567] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:00:56.016 [DEBUG] [Thread-134567] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:00:56.016 [DEBUG] [Thread-134567] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T21:00:56.016 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T21:00:56.016 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:00:56.017 [DEBUG] [Thread-134567] [transport.py] [_log()] userauth is OK
2025-12-31T21:00:56.017 [DEBUG] [Thread-134567] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:00:56.017 [DEBUG] [Thread-134567] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:00:56.017 [DEBUG] [Thread-134567] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T21:00:56.017 [DEBUG] [Thread-134567] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:00:56.027 [INFO] [Thread-134567] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:00:56.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:00:56.267 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:00:56.268 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:00:56.589 [DEBUG] [Thread-134567] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:00:56.589 [DEBUG] [Thread-134567] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:00:56.589 [DEBUG] [Thread-134567] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T21:00:56.630 [DEBUG] [Thread-134567] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:00:56.630 [DEBUG] [Thread-134567] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:00:56.632 [DEBUG] [Thread-134567] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:00:56.645 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:00:56.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T21:00:56.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T21:00:56.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T21:00:56.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:00:56.650 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T21:00:56.650 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:00:56.650 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:00:56.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T21:00:56.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.791805 -999.00  +17.60  11.13     65  +11.00 1 2 1 1 1     0    0 5.00 -66.05 ....W 14.8 11.1 215.2 21.5 18.6 -13.5 18.5 -14.1 18.3 -14.5 18.6 -13.7
2025-12-31T21:00:56.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T21:00:56.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T21:00:56.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.791805
2025-12-31T21:00:56.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T21:00:56.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T21:00:56.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T21:00:56.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T21:00:56.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T21:00:56.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T21:00:23', tmtdew=7.34, humidity=62.04, cloud=0.0, wind=15.26, temperature=17.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T21:00:23', seeing=2.35, atlas_timestamp='2025-12-31T19:00:11.952', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T21:00:56.651 [DEBUG] [Thread-134567] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:00:56.726 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T21:00:56.737 [DEBUG] [Thread-134570] [transport.py] [_log()] starting thread (client mode): 0xb1777820
2025-12-31T21:00:56.738 [DEBUG] [Thread-134570] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:00:56.752 [DEBUG] [Thread-134570] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T21:00:56.752 [INFO] [Thread-134570] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T21:00:56.760 [DEBUG] [Thread-134570] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:00:56.760 [DEBUG] [Thread-134570] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T21:00:56.760 [DEBUG] [Thread-134570] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:00:56.760 [DEBUG] [Thread-134570] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:00:56.760 [DEBUG] [Thread-134570] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:00:56.760 [DEBUG] [Thread-134570] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:00:56.760 [DEBUG] [Thread-134570] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:00:56.760 [DEBUG] [Thread-134570] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:00:56.760 [DEBUG] [Thread-134570] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:00:56.760 [DEBUG] [Thread-134570] [transport.py] [_log()] client lang: <none>
2025-12-31T21:00:56.760 [DEBUG] [Thread-134570] [transport.py] [_log()] server lang: <none>
2025-12-31T21:00:56.760 [DEBUG] [Thread-134570] [transport.py] [_log()] kex follows: False
2025-12-31T21:00:56.760 [DEBUG] [Thread-134570] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:00:56.760 [DEBUG] [Thread-134570] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:00:56.760 [DEBUG] [Thread-134570] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:00:56.760 [DEBUG] [Thread-134570] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:00:56.760 [DEBUG] [Thread-134570] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:00:56.760 [DEBUG] [Thread-134570] [transport.py] [_log()] Compression: none
2025-12-31T21:00:56.760 [DEBUG] [Thread-134570] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:00:56.815 [DEBUG] [Thread-134570] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:00:56.816 [DEBUG] [Thread-134570] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:00:56.816 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T21:00:56.816 [DEBUG] [Thread-134570] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T21:00:56.816 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:00:56.872 [DEBUG] [Thread-134570] [transport.py] [_log()] userauth is OK
2025-12-31T21:00:56.872 [DEBUG] [Thread-134570] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:00:56.872 [DEBUG] [Thread-134570] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:00:56.872 [DEBUG] [Thread-134570] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T21:00:56.872 [DEBUG] [Thread-134570] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:00:56.887 [INFO] [Thread-134570] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:00:56.887 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T21:00:56.887 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:00:57.701 [DEBUG] [Thread-134570] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:00:57.701 [DEBUG] [Thread-134570] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:00:57.749 [DEBUG] [Thread-134570] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:00:57.749 [DEBUG] [Thread-134570] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:00:57.758 [DEBUG] [Thread-134570] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:00:57.767 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:00:57.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T21:00:57.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T21:00:57.785 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:00:57.785 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:00:57.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:00:57.794 [DEBUG] [Thread-134570] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:01:05.091 [DEBUG] [Thread-134572 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:01:20.141 [DEBUG] [Thread-134573 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:01:27.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T21:01:27.816 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T21:01:27.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T21:01:28.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 21, 0, 55), 7.35, 62.01, 0.0, 14.75, 17.46, 0, 0, 0, 2, 0, 0),)
2025-12-31T21:01:28.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 21:00:55
2025-12-31T21:01:28.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T21:01:28.907 [DEBUG] [Thread-134574] [transport.py] [_log()] starting thread (client mode): 0xb1785cc0
2025-12-31T21:01:28.908 [DEBUG] [Thread-134574] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:01:28.928 [DEBUG] [Thread-134574] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T21:01:28.928 [INFO] [Thread-134574] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T21:01:28.930 [DEBUG] [Thread-134574] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:01:28.930 [DEBUG] [Thread-134574] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T21:01:28.930 [DEBUG] [Thread-134574] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:01:28.930 [DEBUG] [Thread-134574] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:01:28.930 [DEBUG] [Thread-134574] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:01:28.930 [DEBUG] [Thread-134574] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:01:28.930 [DEBUG] [Thread-134574] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:01:28.930 [DEBUG] [Thread-134574] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:01:28.930 [DEBUG] [Thread-134574] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:01:28.930 [DEBUG] [Thread-134574] [transport.py] [_log()] client lang: <none>
2025-12-31T21:01:28.930 [DEBUG] [Thread-134574] [transport.py] [_log()] server lang: <none>
2025-12-31T21:01:28.930 [DEBUG] [Thread-134574] [transport.py] [_log()] kex follows: False
2025-12-31T21:01:28.930 [DEBUG] [Thread-134574] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:01:28.930 [DEBUG] [Thread-134574] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:01:28.930 [DEBUG] [Thread-134574] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:01:28.930 [DEBUG] [Thread-134574] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:01:28.930 [DEBUG] [Thread-134574] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:01:28.930 [DEBUG] [Thread-134574] [transport.py] [_log()] Compression: none
2025-12-31T21:01:28.930 [DEBUG] [Thread-134574] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:01:28.947 [DEBUG] [Thread-134574] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:01:28.947 [DEBUG] [Thread-134574] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:01:28.947 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T21:01:28.947 [DEBUG] [Thread-134574] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T21:01:28.947 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:01:28.948 [DEBUG] [Thread-134574] [transport.py] [_log()] userauth is OK
2025-12-31T21:01:28.948 [DEBUG] [Thread-134574] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:01:28.948 [DEBUG] [Thread-134574] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:01:28.948 [DEBUG] [Thread-134574] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T21:01:28.948 [DEBUG] [Thread-134574] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:01:28.958 [INFO] [Thread-134574] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:01:28.958 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:01:29.674 [DEBUG] [Thread-134574] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:01:29.674 [DEBUG] [Thread-134574] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:01:29.674 [DEBUG] [Thread-134574] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T21:01:29.714 [DEBUG] [Thread-134574] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:01:29.714 [DEBUG] [Thread-134574] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:01:29.716 [DEBUG] [Thread-134574] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:01:29.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:01:29.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T21:01:29.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T21:01:29.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T21:01:29.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:01:29.728 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T21:01:29.728 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:01:29.728 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:01:29.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T21:01:29.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.792152 -999.00  +17.60  11.89     65  +11.00 1 2 1 1 1     0    0 4.96 -67.17 ....W 16.8 11.9 214.7 20.9 18.6 -13.3 18.5 -14.1 18.2 -14.2 18.6 -13.6
2025-12-31T21:01:29.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T21:01:29.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T21:01:29.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.792152
2025-12-31T21:01:29.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T21:01:29.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T21:01:29.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T21:01:29.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T21:01:29.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T21:01:29.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T21:00:55', tmtdew=7.35, humidity=62.01, cloud=0.0, wind=14.75, temperature=17.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T21:01:27', seeing=2.35, atlas_timestamp='2025-12-31T19:00:41.933', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T21:01:29.730 [DEBUG] [Thread-134574] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:01:29.811 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T21:01:29.823 [DEBUG] [Thread-134577] [transport.py] [_log()] starting thread (client mode): 0xb6bbff10
2025-12-31T21:01:29.823 [DEBUG] [Thread-134577] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:01:29.838 [DEBUG] [Thread-134577] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T21:01:29.838 [INFO] [Thread-134577] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T21:01:29.845 [DEBUG] [Thread-134577] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:01:29.846 [DEBUG] [Thread-134577] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T21:01:29.846 [DEBUG] [Thread-134577] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:01:29.846 [DEBUG] [Thread-134577] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:01:29.846 [DEBUG] [Thread-134577] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:01:29.846 [DEBUG] [Thread-134577] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:01:29.846 [DEBUG] [Thread-134577] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:01:29.846 [DEBUG] [Thread-134577] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:01:29.847 [DEBUG] [Thread-134577] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:01:29.847 [DEBUG] [Thread-134577] [transport.py] [_log()] client lang: <none>
2025-12-31T21:01:29.847 [DEBUG] [Thread-134577] [transport.py] [_log()] server lang: <none>
2025-12-31T21:01:29.847 [DEBUG] [Thread-134577] [transport.py] [_log()] kex follows: False
2025-12-31T21:01:29.847 [DEBUG] [Thread-134577] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:01:29.847 [DEBUG] [Thread-134577] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:01:29.847 [DEBUG] [Thread-134577] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:01:29.847 [DEBUG] [Thread-134577] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:01:29.848 [DEBUG] [Thread-134577] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:01:29.848 [DEBUG] [Thread-134577] [transport.py] [_log()] Compression: none
2025-12-31T21:01:29.848 [DEBUG] [Thread-134577] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:01:29.910 [DEBUG] [Thread-134577] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:01:29.911 [DEBUG] [Thread-134577] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:01:29.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T21:01:29.913 [DEBUG] [Thread-134577] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T21:01:29.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:01:29.974 [DEBUG] [Thread-134577] [transport.py] [_log()] userauth is OK
2025-12-31T21:01:29.975 [DEBUG] [Thread-134577] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:01:29.975 [DEBUG] [Thread-134577] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:01:29.976 [DEBUG] [Thread-134577] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T21:01:29.976 [DEBUG] [Thread-134577] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:01:29.998 [INFO] [Thread-134577] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:01:29.998 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T21:01:29.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:01:30.846 [DEBUG] [Thread-134577] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:01:30.846 [DEBUG] [Thread-134577] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:01:30.894 [DEBUG] [Thread-134577] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:01:30.894 [DEBUG] [Thread-134577] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:01:30.903 [DEBUG] [Thread-134577] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:01:30.912 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:01:30.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T21:01:30.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T21:01:30.930 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:01:30.930 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:01:30.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:01:30.939 [DEBUG] [Thread-134577] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:01:35.172 [DEBUG] [Thread-134579 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:01:41.175 [DEBUG] [Thread-134580 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:01:50.221 [DEBUG] [Thread-134581 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:01:56.471 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:01:56.472 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:02:00.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T21:02:00.961 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T21:02:00.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T21:02:01.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 21, 1, 27), 7.38, 61.9, 0.0, 17.64, 17.44, 0, 0, 0, 2, 0, 0),)
2025-12-31T21:02:01.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 21:01:27
2025-12-31T21:02:01.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T21:02:02.060 [DEBUG] [Thread-134582] [transport.py] [_log()] starting thread (client mode): 0xb1777820
2025-12-31T21:02:02.060 [DEBUG] [Thread-134582] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:02:02.080 [DEBUG] [Thread-134582] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T21:02:02.080 [INFO] [Thread-134582] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T21:02:02.083 [DEBUG] [Thread-134582] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:02:02.083 [DEBUG] [Thread-134582] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T21:02:02.084 [DEBUG] [Thread-134582] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:02:02.084 [DEBUG] [Thread-134582] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:02:02.084 [DEBUG] [Thread-134582] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:02:02.084 [DEBUG] [Thread-134582] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:02:02.084 [DEBUG] [Thread-134582] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:02:02.084 [DEBUG] [Thread-134582] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:02:02.084 [DEBUG] [Thread-134582] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:02:02.084 [DEBUG] [Thread-134582] [transport.py] [_log()] client lang: <none>
2025-12-31T21:02:02.084 [DEBUG] [Thread-134582] [transport.py] [_log()] server lang: <none>
2025-12-31T21:02:02.084 [DEBUG] [Thread-134582] [transport.py] [_log()] kex follows: False
2025-12-31T21:02:02.084 [DEBUG] [Thread-134582] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:02:02.084 [DEBUG] [Thread-134582] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:02:02.084 [DEBUG] [Thread-134582] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:02:02.084 [DEBUG] [Thread-134582] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:02:02.084 [DEBUG] [Thread-134582] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:02:02.084 [DEBUG] [Thread-134582] [transport.py] [_log()] Compression: none
2025-12-31T21:02:02.084 [DEBUG] [Thread-134582] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:02:02.094 [DEBUG] [Thread-134582] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:02:02.094 [DEBUG] [Thread-134582] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:02:02.094 [DEBUG] [Thread-134582] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T21:02:02.094 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T21:02:02.094 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:02:02.095 [DEBUG] [Thread-134582] [transport.py] [_log()] userauth is OK
2025-12-31T21:02:02.095 [DEBUG] [Thread-134582] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:02:02.095 [DEBUG] [Thread-134582] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:02:02.095 [DEBUG] [Thread-134582] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T21:02:02.095 [DEBUG] [Thread-134582] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:02:02.104 [INFO] [Thread-134582] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:02:02.104 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:02:02.721 [DEBUG] [Thread-134582] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:02:02.721 [DEBUG] [Thread-134582] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:02:02.721 [DEBUG] [Thread-134582] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T21:02:02.762 [DEBUG] [Thread-134582] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:02:02.762 [DEBUG] [Thread-134582] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:02:02.765 [DEBUG] [Thread-134582] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:02:02.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:02:02.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T21:02:02.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T21:02:02.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T21:02:02.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:02:02.780 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T21:02:02.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:02:02.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:02:02.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T21:02:02.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.792499 -999.00  +17.50  18.77     65  +10.90 1 2 1 1 1     0    0 4.90 -63.87 ....W 11.8 18.8 209.8 20.6 18.6 -13.4 18.4 -14.1 18.2 -14.2 18.6 -13.6
2025-12-31T21:02:02.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T21:02:02.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T21:02:02.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.792499
2025-12-31T21:02:02.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T21:02:02.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T21:02:02.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T21:02:02.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T21:02:02.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T21:02:02.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T21:01:27', tmtdew=7.38, humidity=61.9, cloud=0.0, wind=17.64, temperature=17.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T21:01:59', seeing=2.35, atlas_timestamp='2025-12-31T19:01:11.914', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T21:02:02.781 [DEBUG] [Thread-134582] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:02:02.855 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T21:02:02.867 [DEBUG] [Thread-134585] [transport.py] [_log()] starting thread (client mode): 0xb1767370
2025-12-31T21:02:02.867 [DEBUG] [Thread-134585] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:02:02.882 [DEBUG] [Thread-134585] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T21:02:02.882 [INFO] [Thread-134585] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T21:02:02.890 [DEBUG] [Thread-134585] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:02:02.890 [DEBUG] [Thread-134585] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T21:02:02.890 [DEBUG] [Thread-134585] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:02:02.890 [DEBUG] [Thread-134585] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:02:02.890 [DEBUG] [Thread-134585] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:02:02.890 [DEBUG] [Thread-134585] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:02:02.890 [DEBUG] [Thread-134585] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:02:02.890 [DEBUG] [Thread-134585] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:02:02.890 [DEBUG] [Thread-134585] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:02:02.890 [DEBUG] [Thread-134585] [transport.py] [_log()] client lang: <none>
2025-12-31T21:02:02.890 [DEBUG] [Thread-134585] [transport.py] [_log()] server lang: <none>
2025-12-31T21:02:02.890 [DEBUG] [Thread-134585] [transport.py] [_log()] kex follows: False
2025-12-31T21:02:02.890 [DEBUG] [Thread-134585] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:02:02.890 [DEBUG] [Thread-134585] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:02:02.890 [DEBUG] [Thread-134585] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:02:02.890 [DEBUG] [Thread-134585] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:02:02.890 [DEBUG] [Thread-134585] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:02:02.890 [DEBUG] [Thread-134585] [transport.py] [_log()] Compression: none
2025-12-31T21:02:02.890 [DEBUG] [Thread-134585] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:02:02.946 [DEBUG] [Thread-134585] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:02:02.946 [DEBUG] [Thread-134585] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:02:02.946 [DEBUG] [Thread-134585] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T21:02:02.946 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T21:02:02.946 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:02:03.003 [DEBUG] [Thread-134585] [transport.py] [_log()] userauth is OK
2025-12-31T21:02:03.003 [DEBUG] [Thread-134585] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:02:03.003 [DEBUG] [Thread-134585] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:02:03.003 [DEBUG] [Thread-134585] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T21:02:03.003 [DEBUG] [Thread-134585] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:02:03.025 [INFO] [Thread-134585] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:02:03.025 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T21:02:03.026 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:02:03.908 [DEBUG] [Thread-134585] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:02:03.908 [DEBUG] [Thread-134585] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:02:03.956 [DEBUG] [Thread-134585] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:02:03.956 [DEBUG] [Thread-134585] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:02:03.964 [DEBUG] [Thread-134585] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:02:03.973 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:02:03.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T21:02:03.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T21:02:03.989 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:02:03.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:02:03.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:02:03.996 [DEBUG] [Thread-134585] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:02:05.251 [DEBUG] [Thread-134587 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:02:20.287 [DEBUG] [Thread-134588 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:02:34.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T21:02:34.021 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T21:02:34.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-12-31T21:02:34.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 21, 1, 59), 7.37, 61.91, 0.0, 13.15, 17.42, 0, 0, 0, 2, 0, 0),)
2025-12-31T21:02:34.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 21:01:59
2025-12-31T21:02:35.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T21:02:35.264 [DEBUG] [Thread-134589] [transport.py] [_log()] starting thread (client mode): 0xb1784bb0
2025-12-31T21:02:35.265 [DEBUG] [Thread-134589] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:02:35.265 [DEBUG] [Thread-134589] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T21:02:35.265 [INFO] [Thread-134589] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T21:02:35.269 [DEBUG] [Thread-134589] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:02:35.269 [DEBUG] [Thread-134589] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T21:02:35.269 [DEBUG] [Thread-134589] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:02:35.269 [DEBUG] [Thread-134589] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:02:35.269 [DEBUG] [Thread-134589] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:02:35.269 [DEBUG] [Thread-134589] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:02:35.269 [DEBUG] [Thread-134589] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:02:35.269 [DEBUG] [Thread-134589] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:02:35.269 [DEBUG] [Thread-134589] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:02:35.270 [DEBUG] [Thread-134589] [transport.py] [_log()] client lang: <none>
2025-12-31T21:02:35.270 [DEBUG] [Thread-134589] [transport.py] [_log()] server lang: <none>
2025-12-31T21:02:35.270 [DEBUG] [Thread-134589] [transport.py] [_log()] kex follows: False
2025-12-31T21:02:35.270 [DEBUG] [Thread-134589] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:02:35.270 [DEBUG] [Thread-134589] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:02:35.270 [DEBUG] [Thread-134589] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:02:35.270 [DEBUG] [Thread-134589] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:02:35.270 [DEBUG] [Thread-134589] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:02:35.270 [DEBUG] [Thread-134589] [transport.py] [_log()] Compression: none
2025-12-31T21:02:35.270 [DEBUG] [Thread-134589] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:02:35.298 [DEBUG] [Thread-134589] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:02:35.301 [DEBUG] [Thread-134589] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:02:35.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T21:02:35.304 [DEBUG] [Thread-134589] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T21:02:35.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:02:35.306 [DEBUG] [Thread-134589] [transport.py] [_log()] userauth is OK
2025-12-31T21:02:35.306 [DEBUG] [Thread-134589] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:02:35.306 [DEBUG] [Thread-134589] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:02:35.306 [DEBUG] [Thread-134589] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T21:02:35.306 [DEBUG] [Thread-134589] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:02:35.312 [DEBUG] [Thread-134591 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:02:35.326 [INFO] [Thread-134589] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:02:35.329 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:02:36.106 [DEBUG] [Thread-134589] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:02:36.106 [DEBUG] [Thread-134589] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:02:36.107 [DEBUG] [Thread-134589] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T21:02:36.146 [DEBUG] [Thread-134589] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:02:36.146 [DEBUG] [Thread-134589] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:02:36.148 [DEBUG] [Thread-134589] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:02:36.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:02:36.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T21:02:36.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T21:02:36.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T21:02:36.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:02:36.160 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T21:02:36.160 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:02:36.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:02:36.161 [DEBUG] [Thread-134589] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:02:36.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T21:02:36.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.792846 -999.00  +17.60   6.11     65  +11.00 1 2 1 1 1     0    0 5.00 -60.99 ....W 8.9 6.1 206.1 17.6 18.6 -13.3 18.5 -14.0 18.3 -14.2 18.6 -13.7
2025-12-31T21:02:36.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T21:02:36.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T21:02:36.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.792846
2025-12-31T21:02:36.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T21:02:36.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T21:02:36.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T21:02:36.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T21:02:36.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T21:02:36.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T21:01:59', tmtdew=7.37, humidity=61.91, cloud=0.0, wind=13.15, temperature=17.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T21:02:32', seeing=2.35, atlas_timestamp='2025-12-31T19:01:41.894', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T21:02:36.255 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T21:02:36.266 [DEBUG] [Thread-134593] [transport.py] [_log()] starting thread (client mode): 0xb957bf40
2025-12-31T21:02:36.266 [DEBUG] [Thread-134593] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:02:36.281 [DEBUG] [Thread-134593] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T21:02:36.281 [INFO] [Thread-134593] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T21:02:36.289 [DEBUG] [Thread-134593] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:02:36.289 [DEBUG] [Thread-134593] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T21:02:36.289 [DEBUG] [Thread-134593] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:02:36.289 [DEBUG] [Thread-134593] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:02:36.289 [DEBUG] [Thread-134593] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:02:36.289 [DEBUG] [Thread-134593] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:02:36.289 [DEBUG] [Thread-134593] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:02:36.289 [DEBUG] [Thread-134593] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:02:36.289 [DEBUG] [Thread-134593] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:02:36.289 [DEBUG] [Thread-134593] [transport.py] [_log()] client lang: <none>
2025-12-31T21:02:36.289 [DEBUG] [Thread-134593] [transport.py] [_log()] server lang: <none>
2025-12-31T21:02:36.289 [DEBUG] [Thread-134593] [transport.py] [_log()] kex follows: False
2025-12-31T21:02:36.289 [DEBUG] [Thread-134593] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:02:36.289 [DEBUG] [Thread-134593] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:02:36.289 [DEBUG] [Thread-134593] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:02:36.289 [DEBUG] [Thread-134593] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:02:36.289 [DEBUG] [Thread-134593] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:02:36.289 [DEBUG] [Thread-134593] [transport.py] [_log()] Compression: none
2025-12-31T21:02:36.289 [DEBUG] [Thread-134593] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:02:36.346 [DEBUG] [Thread-134593] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:02:36.346 [DEBUG] [Thread-134593] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:02:36.346 [DEBUG] [Thread-134593] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T21:02:36.346 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T21:02:36.346 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:02:36.402 [DEBUG] [Thread-134593] [transport.py] [_log()] userauth is OK
2025-12-31T21:02:36.402 [DEBUG] [Thread-134593] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:02:36.402 [DEBUG] [Thread-134593] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:02:36.402 [DEBUG] [Thread-134593] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T21:02:36.402 [DEBUG] [Thread-134593] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:02:36.416 [INFO] [Thread-134593] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:02: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-12-31T21:02:36.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:02:37.242 [DEBUG] [Thread-134593] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:02:37.242 [DEBUG] [Thread-134593] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:02:37.290 [DEBUG] [Thread-134593] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:02:37.290 [DEBUG] [Thread-134593] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:02:37.299 [DEBUG] [Thread-134593] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:02:37.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:02:37.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T21:02:37.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T21:02:37.326 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:02:37.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:02:37.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:02:37.334 [DEBUG] [Thread-134593] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:02:41.516 [DEBUG] [Thread-134595 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:02:50.337 [DEBUG] [Thread-134596 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:02:56.679 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:02:56.681 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:03:05.423 [DEBUG] [Thread-134597 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:03:07.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T21:03:07.359 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T21:03:07.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T21:03:08.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 21, 2, 31), 7.34, 62.06, 0.0, 14.45, 17.42, 0, 0, 0, 2, 0, 0),)
2025-12-31T21:03:08.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 21:02:31
2025-12-31T21:03:08.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T21:03:08.573 [DEBUG] [Thread-134598] [transport.py] [_log()] starting thread (client mode): 0xb95782b0
2025-12-31T21:03:08.573 [DEBUG] [Thread-134598] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:03:08.585 [DEBUG] [Thread-134598] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T21:03:08.586 [INFO] [Thread-134598] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T21:03:08.590 [DEBUG] [Thread-134598] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:03:08.590 [DEBUG] [Thread-134598] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T21:03:08.591 [DEBUG] [Thread-134598] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:03:08.591 [DEBUG] [Thread-134598] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:03:08.591 [DEBUG] [Thread-134598] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:03:08.591 [DEBUG] [Thread-134598] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:03:08.591 [DEBUG] [Thread-134598] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:03:08.591 [DEBUG] [Thread-134598] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:03:08.591 [DEBUG] [Thread-134598] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:03:08.591 [DEBUG] [Thread-134598] [transport.py] [_log()] client lang: <none>
2025-12-31T21:03:08.591 [DEBUG] [Thread-134598] [transport.py] [_log()] server lang: <none>
2025-12-31T21:03:08.591 [DEBUG] [Thread-134598] [transport.py] [_log()] kex follows: False
2025-12-31T21:03:08.591 [DEBUG] [Thread-134598] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:03:08.592 [DEBUG] [Thread-134598] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:03:08.592 [DEBUG] [Thread-134598] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:03:08.592 [DEBUG] [Thread-134598] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:03:08.592 [DEBUG] [Thread-134598] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:03:08.592 [DEBUG] [Thread-134598] [transport.py] [_log()] Compression: none
2025-12-31T21:03:08.592 [DEBUG] [Thread-134598] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:03:08.628 [DEBUG] [Thread-134598] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:03:08.633 [DEBUG] [Thread-134598] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:03:08.634 [DEBUG] [Thread-134598] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T21:03:08.637 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T21:03:08.638 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:03:08.640 [DEBUG] [Thread-134598] [transport.py] [_log()] userauth is OK
2025-12-31T21:03:08.641 [DEBUG] [Thread-134598] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:03:08.641 [DEBUG] [Thread-134598] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:03:08.641 [DEBUG] [Thread-134598] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T21:03:08.641 [DEBUG] [Thread-134598] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:03:08.667 [INFO] [Thread-134598] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:03:08.672 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:03:09.302 [DEBUG] [Thread-134598] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:03:09.302 [DEBUG] [Thread-134598] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:03:09.306 [DEBUG] [Thread-134598] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T21:03:09.342 [DEBUG] [Thread-134598] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:03:09.342 [DEBUG] [Thread-134598] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:03:09.344 [DEBUG] [Thread-134598] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:03:09.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:03:09.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T21:03:09.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T21:03:09.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T21:03:09.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:03:09.360 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T21:03:09.360 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:03:09.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:03:09.362 [DEBUG] [Thread-134598] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:03:09.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T21:03:09.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.793194 -999.00  +17.60   5.33     65  +11.00 1 2 1 1 1     0    0 5.09 -56.90 ....W 7.3 5.3 327.9 19.0 18.6 -13.4 18.5 -14.4 18.3 -14.2 18.5 -13.5
2025-12-31T21:03:09.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T21:03:09.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T21:03:09.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.793194
2025-12-31T21:03:09.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T21:03:09.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T21:03:09.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T21:03:09.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T21:03:09.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T21:03:09.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T21:02:31', tmtdew=7.34, humidity=62.06, cloud=0.0, wind=14.45, temperature=17.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T21:02:32', seeing=2.35, atlas_timestamp='2025-12-31T19:02:11.962', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T21:03:09.465 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T21:03:09.477 [DEBUG] [Thread-134601] [transport.py] [_log()] starting thread (client mode): 0xb1787790
2025-12-31T21:03:09.477 [DEBUG] [Thread-134601] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:03:09.492 [DEBUG] [Thread-134601] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T21:03:09.492 [INFO] [Thread-134601] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T21:03:09.500 [DEBUG] [Thread-134601] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:03:09.500 [DEBUG] [Thread-134601] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T21:03:09.500 [DEBUG] [Thread-134601] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:03:09.501 [DEBUG] [Thread-134601] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:03:09.501 [DEBUG] [Thread-134601] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:03:09.501 [DEBUG] [Thread-134601] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:03:09.501 [DEBUG] [Thread-134601] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:03:09.501 [DEBUG] [Thread-134601] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:03:09.501 [DEBUG] [Thread-134601] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:03:09.501 [DEBUG] [Thread-134601] [transport.py] [_log()] client lang: <none>
2025-12-31T21:03:09.501 [DEBUG] [Thread-134601] [transport.py] [_log()] server lang: <none>
2025-12-31T21:03:09.501 [DEBUG] [Thread-134601] [transport.py] [_log()] kex follows: False
2025-12-31T21:03:09.501 [DEBUG] [Thread-134601] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:03:09.501 [DEBUG] [Thread-134601] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:03:09.501 [DEBUG] [Thread-134601] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:03:09.501 [DEBUG] [Thread-134601] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:03:09.501 [DEBUG] [Thread-134601] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:03:09.501 [DEBUG] [Thread-134601] [transport.py] [_log()] Compression: none
2025-12-31T21:03:09.501 [DEBUG] [Thread-134601] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:03:09.561 [DEBUG] [Thread-134601] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:03:09.562 [DEBUG] [Thread-134601] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:03:09.563 [DEBUG] [Thread-134601] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T21:03:09.563 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T21:03:09.564 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:03:09.619 [DEBUG] [Thread-134601] [transport.py] [_log()] userauth is OK
2025-12-31T21:03:09.619 [DEBUG] [Thread-134601] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:03:09.620 [DEBUG] [Thread-134601] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:03:09.620 [DEBUG] [Thread-134601] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T21:03:09.620 [DEBUG] [Thread-134601] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:03:09.638 [INFO] [Thread-134601] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:03:09.638 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T21:03:09.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:03:10.465 [DEBUG] [Thread-134601] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:03:10.465 [DEBUG] [Thread-134601] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:03:10.515 [DEBUG] [Thread-134601] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:03:10.515 [DEBUG] [Thread-134601] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:03:10.524 [DEBUG] [Thread-134601] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:03:10.532 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:03:10.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T21:03:10.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T21:03:10.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:03:10.554 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:03:10.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:03:10.562 [DEBUG] [Thread-134601] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:03:20.468 [DEBUG] [Thread-134603 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:03:35.520 [DEBUG] [Thread-134604 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:03:40.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T21:03:40.584 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T21:03:40.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T21:03:41.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 21, 3, 37), 7.29, 62.24, 0.0, 19.75, 17.42, 0, 0, 0, 2, 0, 0),)
2025-12-31T21:03:41.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 21:03:37
2025-12-31T21:03:41.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T21:03:41.594 [DEBUG] [Thread-134605] [transport.py] [_log()] starting thread (client mode): 0xb1786470
2025-12-31T21:03:41.594 [DEBUG] [Thread-134605] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:03:41.614 [DEBUG] [Thread-134605] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T21:03:41.615 [INFO] [Thread-134605] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T21:03:41.618 [DEBUG] [Thread-134605] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:03:41.618 [DEBUG] [Thread-134605] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T21:03:41.618 [DEBUG] [Thread-134605] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:03:41.618 [DEBUG] [Thread-134605] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:03:41.618 [DEBUG] [Thread-134605] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:03:41.618 [DEBUG] [Thread-134605] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:03:41.618 [DEBUG] [Thread-134605] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:03:41.618 [DEBUG] [Thread-134605] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:03:41.618 [DEBUG] [Thread-134605] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:03:41.618 [DEBUG] [Thread-134605] [transport.py] [_log()] client lang: <none>
2025-12-31T21:03:41.618 [DEBUG] [Thread-134605] [transport.py] [_log()] server lang: <none>
2025-12-31T21:03:41.618 [DEBUG] [Thread-134605] [transport.py] [_log()] kex follows: False
2025-12-31T21:03:41.618 [DEBUG] [Thread-134605] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:03:41.618 [DEBUG] [Thread-134605] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:03:41.618 [DEBUG] [Thread-134605] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:03:41.618 [DEBUG] [Thread-134605] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:03:41.618 [DEBUG] [Thread-134605] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:03:41.619 [DEBUG] [Thread-134605] [transport.py] [_log()] Compression: none
2025-12-31T21:03:41.619 [DEBUG] [Thread-134605] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:03:41.634 [DEBUG] [Thread-134605] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:03:41.634 [DEBUG] [Thread-134605] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:03:41.635 [DEBUG] [Thread-134605] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T21:03:41.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T21:03:41.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:03:41.635 [DEBUG] [Thread-134605] [transport.py] [_log()] userauth is OK
2025-12-31T21:03:41.635 [DEBUG] [Thread-134605] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:03:41.635 [DEBUG] [Thread-134605] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:03:41.635 [DEBUG] [Thread-134605] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T21:03:41.635 [DEBUG] [Thread-134605] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:03:41.644 [INFO] [Thread-134605] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:03:41.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:03:41.661 [DEBUG] [Thread-134607 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:03:42.418 [DEBUG] [Thread-134605] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:03:42.419 [DEBUG] [Thread-134605] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:03:42.419 [DEBUG] [Thread-134605] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T21:03:42.460 [DEBUG] [Thread-134605] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:03:42.460 [DEBUG] [Thread-134605] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:03:42.464 [DEBUG] [Thread-134605] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:03:42.477 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:03:42.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T21:03:42.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T21:03:42.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T21:03:42.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:03:42.490 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T21:03:42.490 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:03:42.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:03:42.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T21:03:42.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.793541 -999.00  +17.60   5.48     65  +11.00 1 2 1 1 1     0    0 5.21 -54.57 Z...w 5.2 5.5 209.3 14.1 18.6 -13.5 18.5 -14.3 18.3 -14.4 18.6 -13.6
2025-12-31T21:03:42.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T21:03:42.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T21:03:42.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.793541
2025-12-31T21:03:42.499 [DEBUG] [Thread-134605] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:03:42.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T21:03:42.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T21:03:42.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T21:03:42.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T21:03:42.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T21:03:42.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T21:03:37', tmtdew=7.29, humidity=62.24, cloud=0.0, wind=19.75, temperature=17.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T21:02:32', seeing=2.35, atlas_timestamp='2025-12-31T19:02:41.942', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T21:03:42.584 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T21:03:42.595 [DEBUG] [Thread-134609] [transport.py] [_log()] starting thread (client mode): 0xb17858a0
2025-12-31T21:03:42.596 [DEBUG] [Thread-134609] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:03:42.610 [DEBUG] [Thread-134609] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T21:03:42.610 [INFO] [Thread-134609] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T21:03:42.618 [DEBUG] [Thread-134609] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:03:42.618 [DEBUG] [Thread-134609] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T21:03:42.618 [DEBUG] [Thread-134609] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:03:42.618 [DEBUG] [Thread-134609] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:03:42.618 [DEBUG] [Thread-134609] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:03:42.618 [DEBUG] [Thread-134609] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:03:42.618 [DEBUG] [Thread-134609] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:03:42.618 [DEBUG] [Thread-134609] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:03:42.618 [DEBUG] [Thread-134609] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:03:42.618 [DEBUG] [Thread-134609] [transport.py] [_log()] client lang: <none>
2025-12-31T21:03:42.618 [DEBUG] [Thread-134609] [transport.py] [_log()] server lang: <none>
2025-12-31T21:03:42.618 [DEBUG] [Thread-134609] [transport.py] [_log()] kex follows: False
2025-12-31T21:03:42.618 [DEBUG] [Thread-134609] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:03:42.618 [DEBUG] [Thread-134609] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:03:42.619 [DEBUG] [Thread-134609] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:03:42.619 [DEBUG] [Thread-134609] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:03:42.619 [DEBUG] [Thread-134609] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:03:42.619 [DEBUG] [Thread-134609] [transport.py] [_log()] Compression: none
2025-12-31T21:03:42.619 [DEBUG] [Thread-134609] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:03:42.678 [DEBUG] [Thread-134609] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:03:42.678 [DEBUG] [Thread-134609] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:03:42.679 [DEBUG] [Thread-134609] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T21:03:42.679 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T21:03:42.680 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:03:42.733 [DEBUG] [Thread-134609] [transport.py] [_log()] userauth is OK
2025-12-31T21:03:42.734 [DEBUG] [Thread-134609] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:03:42.734 [DEBUG] [Thread-134609] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:03:42.734 [DEBUG] [Thread-134609] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T21:03:42.734 [DEBUG] [Thread-134609] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:03:42.754 [INFO] [Thread-134609] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:03:42.755 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T21:03:42.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:03:43.555 [DEBUG] [Thread-134609] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:03:43.556 [DEBUG] [Thread-134609] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:03:43.603 [DEBUG] [Thread-134609] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:03:43.603 [DEBUG] [Thread-134609] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:03:43.613 [DEBUG] [Thread-134609] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:03:43.622 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:03:43.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T21:03:43.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T21:03:43.640 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:03:43.640 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:03:43.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:03:43.649 [DEBUG] [Thread-134609] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:03:50.553 [DEBUG] [Thread-134611 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:03:56.881 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:03:56.882 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:04:05.611 [DEBUG] [Thread-134612 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:04:13.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T21:04:13.671 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T21:04:13.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T21:04:14.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 21, 4, 10), 7.29, 62.24, 0.0, 21.07, 17.37, 0, 0, 0, 2, 0, 0),)
2025-12-31T21:04:14.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 21:04:10
2025-12-31T21:04:14.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T21:04:14.719 [DEBUG] [Thread-134613] [transport.py] [_log()] starting thread (client mode): 0xb6bb9fc0
2025-12-31T21:04:14.719 [DEBUG] [Thread-134613] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:04:14.740 [DEBUG] [Thread-134613] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T21:04:14.740 [INFO] [Thread-134613] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T21:04:14.750 [DEBUG] [Thread-134613] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:04:14.750 [DEBUG] [Thread-134613] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T21:04:14.750 [DEBUG] [Thread-134613] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:04:14.750 [DEBUG] [Thread-134613] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:04:14.750 [DEBUG] [Thread-134613] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:04:14.750 [DEBUG] [Thread-134613] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:04:14.750 [DEBUG] [Thread-134613] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:04:14.750 [DEBUG] [Thread-134613] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:04:14.750 [DEBUG] [Thread-134613] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:04:14.750 [DEBUG] [Thread-134613] [transport.py] [_log()] client lang: <none>
2025-12-31T21:04:14.750 [DEBUG] [Thread-134613] [transport.py] [_log()] server lang: <none>
2025-12-31T21:04:14.750 [DEBUG] [Thread-134613] [transport.py] [_log()] kex follows: False
2025-12-31T21:04:14.750 [DEBUG] [Thread-134613] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:04:14.750 [DEBUG] [Thread-134613] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:04:14.750 [DEBUG] [Thread-134613] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:04:14.750 [DEBUG] [Thread-134613] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:04:14.750 [DEBUG] [Thread-134613] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:04:14.750 [DEBUG] [Thread-134613] [transport.py] [_log()] Compression: none
2025-12-31T21:04:14.750 [DEBUG] [Thread-134613] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:04:14.768 [DEBUG] [Thread-134613] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:04:14.768 [DEBUG] [Thread-134613] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:04:14.768 [DEBUG] [Thread-134613] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T21:04:14.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T21:04:14.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:04:14.769 [DEBUG] [Thread-134613] [transport.py] [_log()] userauth is OK
2025-12-31T21:04:14.769 [DEBUG] [Thread-134613] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:04:14.769 [DEBUG] [Thread-134613] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:04:14.769 [DEBUG] [Thread-134613] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T21:04:14.769 [DEBUG] [Thread-134613] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:04:14.784 [INFO] [Thread-134613] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:04:14.784 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:04:15.403 [DEBUG] [Thread-134613] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:04:15.403 [DEBUG] [Thread-134613] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:04:15.403 [DEBUG] [Thread-134613] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T21:04:15.444 [DEBUG] [Thread-134613] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:04:15.444 [DEBUG] [Thread-134613] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:04:15.447 [DEBUG] [Thread-134613] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:04:15.460 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:04:15.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T21:04:15.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T21:04:15.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T21:04:15.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:04:15.464 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T21:04:15.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:04:15.464 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:04:15.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T21:04:15.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.793888 -999.00  +17.60   9.17     65  +11.00 1 2 1 1 1     0    0 5.42 -47.89 Z...w 6.8 9.2 205.9 18.0 18.6 -13.7 18.5 -14.4 18.3 -14.4 18.6 -13.7
2025-12-31T21:04:15.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T21:04:15.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T21:04:15.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.793888
2025-12-31T21:04:15.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T21:04:15.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T21:04:15.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T21:04:15.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T21:04:15.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T21:04:15.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T21:04:10', tmtdew=7.29, humidity=62.24, cloud=0.0, wind=21.07, temperature=17.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T21:02:32', seeing=2.35, atlas_timestamp='2025-12-31T19:03:11.923', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T21:04:15.465 [DEBUG] [Thread-134613] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:04:15.539 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T21:04:15.554 [DEBUG] [Thread-134616] [transport.py] [_log()] starting thread (client mode): 0xb1747730
2025-12-31T21:04:15.554 [DEBUG] [Thread-134616] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:04:15.572 [DEBUG] [Thread-134616] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T21:04:15.572 [INFO] [Thread-134616] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T21:04:15.580 [DEBUG] [Thread-134616] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:04:15.580 [DEBUG] [Thread-134616] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T21:04:15.580 [DEBUG] [Thread-134616] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:04:15.580 [DEBUG] [Thread-134616] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:04:15.580 [DEBUG] [Thread-134616] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:04:15.580 [DEBUG] [Thread-134616] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:04:15.580 [DEBUG] [Thread-134616] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:04:15.580 [DEBUG] [Thread-134616] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:04:15.580 [DEBUG] [Thread-134616] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:04:15.580 [DEBUG] [Thread-134616] [transport.py] [_log()] client lang: <none>
2025-12-31T21:04:15.580 [DEBUG] [Thread-134616] [transport.py] [_log()] server lang: <none>
2025-12-31T21:04:15.580 [DEBUG] [Thread-134616] [transport.py] [_log()] kex follows: False
2025-12-31T21:04:15.580 [DEBUG] [Thread-134616] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:04:15.580 [DEBUG] [Thread-134616] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:04:15.580 [DEBUG] [Thread-134616] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:04:15.580 [DEBUG] [Thread-134616] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:04:15.580 [DEBUG] [Thread-134616] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:04:15.580 [DEBUG] [Thread-134616] [transport.py] [_log()] Compression: none
2025-12-31T21:04:15.580 [DEBUG] [Thread-134616] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:04:15.637 [DEBUG] [Thread-134616] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:04:15.637 [DEBUG] [Thread-134616] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:04:15.637 [DEBUG] [Thread-134616] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T21:04:15.637 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T21:04:15.637 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:04:15.692 [DEBUG] [Thread-134616] [transport.py] [_log()] userauth is OK
2025-12-31T21:04:15.693 [DEBUG] [Thread-134616] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:04:15.693 [DEBUG] [Thread-134616] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:04:15.693 [DEBUG] [Thread-134616] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T21:04:15.693 [DEBUG] [Thread-134616] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:04:15.709 [INFO] [Thread-134616] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:04:15.709 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T21:04:15.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:04:16.550 [DEBUG] [Thread-134616] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:04:16.550 [DEBUG] [Thread-134616] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:04:16.598 [DEBUG] [Thread-134616] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:04:16.598 [DEBUG] [Thread-134616] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:04:16.607 [DEBUG] [Thread-134616] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:04:16.615 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:04:16.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T21:04:16.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T21:04:16.632 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:04:16.632 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:04:16.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:04:16.640 [DEBUG] [Thread-134616] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:04:20.640 [DEBUG] [Thread-134618 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:04:35.699 [DEBUG] [Thread-134619 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:04:41.743 [DEBUG] [Thread-134620 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:04:46.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T21:04:46.663 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T21:04:46.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T21:04:47.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 21, 4, 42), 7.28, 62.29, 0.0, 19.39, 17.29, 0, 0, 0, 2, 0, 0),)
2025-12-31T21:04:47.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 21:04:42
2025-12-31T21:04:47.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T21:04:47.688 [DEBUG] [Thread-134621] [transport.py] [_log()] starting thread (client mode): 0xb6bb9d50
2025-12-31T21:04:47.688 [DEBUG] [Thread-134621] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:04:47.704 [DEBUG] [Thread-134621] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T21:04:47.704 [INFO] [Thread-134621] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T21:04:47.707 [DEBUG] [Thread-134621] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:04:47.707 [DEBUG] [Thread-134621] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T21:04:47.707 [DEBUG] [Thread-134621] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:04:47.707 [DEBUG] [Thread-134621] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:04:47.707 [DEBUG] [Thread-134621] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:04:47.707 [DEBUG] [Thread-134621] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:04:47.707 [DEBUG] [Thread-134621] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:04:47.707 [DEBUG] [Thread-134621] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:04:47.707 [DEBUG] [Thread-134621] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:04:47.707 [DEBUG] [Thread-134621] [transport.py] [_log()] client lang: <none>
2025-12-31T21:04:47.707 [DEBUG] [Thread-134621] [transport.py] [_log()] server lang: <none>
2025-12-31T21:04:47.707 [DEBUG] [Thread-134621] [transport.py] [_log()] kex follows: False
2025-12-31T21:04:47.707 [DEBUG] [Thread-134621] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:04:47.707 [DEBUG] [Thread-134621] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:04:47.707 [DEBUG] [Thread-134621] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:04:47.707 [DEBUG] [Thread-134621] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:04:47.707 [DEBUG] [Thread-134621] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:04:47.707 [DEBUG] [Thread-134621] [transport.py] [_log()] Compression: none
2025-12-31T21:04:47.707 [DEBUG] [Thread-134621] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:04:47.723 [DEBUG] [Thread-134621] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:04:47.724 [DEBUG] [Thread-134621] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:04:47.733 [DEBUG] [Thread-134621] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T21:04:47.733 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T21:04:47.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:04:47.735 [DEBUG] [Thread-134621] [transport.py] [_log()] userauth is OK
2025-12-31T21:04:47.735 [DEBUG] [Thread-134621] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:04:47.735 [DEBUG] [Thread-134621] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:04:47.735 [DEBUG] [Thread-134621] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T21:04:47.736 [DEBUG] [Thread-134621] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:04:47.758 [INFO] [Thread-134621] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:04:47.758 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:04:48.554 [DEBUG] [Thread-134621] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:04:48.554 [DEBUG] [Thread-134621] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:04:48.555 [DEBUG] [Thread-134621] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T21:04:48.595 [DEBUG] [Thread-134621] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:04:48.595 [DEBUG] [Thread-134621] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:04:48.598 [DEBUG] [Thread-134621] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:04:48.604 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:04:48.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T21:04:48.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T21:04:48.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T21:04:48.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:04:48.615 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T21:04:48.615 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:04:48.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:04:48.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T21:04:48.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.794582 -999.00  +17.60  10.87     65  +11.00 1 2 1 1 1     0    0 5.35 -50.70 Z.... 11.8 10.9 213.5 22.1 18.6 -13.8 18.5 -14.5 18.3 -14.3 18.6 -13.7
2025-12-31T21:04:48.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T21:04:48.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T21:04:48.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.794582
2025-12-31T21:04:48.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T21:04:48.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T21:04:48.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T21:04:48.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T21:04:48.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T21:04:48.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T21:04:42', tmtdew=7.28, humidity=62.29, cloud=0.0, wind=19.39, temperature=17.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T21:02:32', seeing=2.35, atlas_timestamp='2025-12-31T19:04:11.885', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T21:04:48.618 [DEBUG] [Thread-134621] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:04:48.701 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T21:04:48.713 [DEBUG] [Thread-134624] [transport.py] [_log()] starting thread (client mode): 0xb95799c0
2025-12-31T21:04:48.713 [DEBUG] [Thread-134624] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:04:48.727 [DEBUG] [Thread-134624] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T21:04:48.727 [INFO] [Thread-134624] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T21:04:48.735 [DEBUG] [Thread-134624] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:04:48.735 [DEBUG] [Thread-134624] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T21:04:48.735 [DEBUG] [Thread-134624] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:04:48.736 [DEBUG] [Thread-134624] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:04:48.736 [DEBUG] [Thread-134624] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:04:48.736 [DEBUG] [Thread-134624] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:04:48.736 [DEBUG] [Thread-134624] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:04:48.736 [DEBUG] [Thread-134624] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:04:48.736 [DEBUG] [Thread-134624] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:04:48.736 [DEBUG] [Thread-134624] [transport.py] [_log()] client lang: <none>
2025-12-31T21:04:48.736 [DEBUG] [Thread-134624] [transport.py] [_log()] server lang: <none>
2025-12-31T21:04:48.736 [DEBUG] [Thread-134624] [transport.py] [_log()] kex follows: False
2025-12-31T21:04:48.736 [DEBUG] [Thread-134624] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:04:48.736 [DEBUG] [Thread-134624] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:04:48.736 [DEBUG] [Thread-134624] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:04:48.736 [DEBUG] [Thread-134624] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:04:48.736 [DEBUG] [Thread-134624] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:04:48.736 [DEBUG] [Thread-134624] [transport.py] [_log()] Compression: none
2025-12-31T21:04:48.736 [DEBUG] [Thread-134624] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:04:48.797 [DEBUG] [Thread-134624] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:04:48.798 [DEBUG] [Thread-134624] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:04:48.798 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T21:04:48.799 [DEBUG] [Thread-134624] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T21:04:48.800 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:04:48.852 [DEBUG] [Thread-134624] [transport.py] [_log()] userauth is OK
2025-12-31T21:04:48.852 [DEBUG] [Thread-134624] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:04:48.853 [DEBUG] [Thread-134624] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:04:48.853 [DEBUG] [Thread-134624] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T21:04:48.853 [DEBUG] [Thread-134624] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:04:48.873 [INFO] [Thread-134624] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:04:48.873 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T21:04:48.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:04:49.734 [DEBUG] [Thread-134624] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:04:49.735 [DEBUG] [Thread-134624] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:04:49.783 [DEBUG] [Thread-134624] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:04:49.783 [DEBUG] [Thread-134624] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:04:49.792 [DEBUG] [Thread-134624] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:04:49.800 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:04:49.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T21:04:49.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-12-31T21:04:49.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:04:49.825 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:04:49.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:04:49.833 [DEBUG] [Thread-134624] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:04:50.746 [DEBUG] [Thread-134626 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:04:57.085 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:04:57.086 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:05:05.801 [DEBUG] [Thread-134627 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:05:19.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T21:05:19.856 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T21:05:19.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-12-31T21:05:20.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 21, 5, 14), 7.3, 62.23, 0.0, 19.07, 17.36, 0, 0, 0, 2, 0, 0),)
2025-12-31T21:05:20.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 21:05:14
2025-12-31T21:05:20.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T21:05:20.833 [DEBUG] [Thread-134628 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:05:20.868 [DEBUG] [Thread-134629] [transport.py] [_log()] starting thread (client mode): 0xb9590c70
2025-12-31T21:05:20.868 [DEBUG] [Thread-134629] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:05:20.887 [DEBUG] [Thread-134629] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T21:05:20.887 [INFO] [Thread-134629] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T21:05:20.889 [DEBUG] [Thread-134629] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:05:20.889 [DEBUG] [Thread-134629] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T21:05:20.889 [DEBUG] [Thread-134629] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:05:20.889 [DEBUG] [Thread-134629] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:05:20.889 [DEBUG] [Thread-134629] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:05:20.889 [DEBUG] [Thread-134629] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:05:20.889 [DEBUG] [Thread-134629] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:05:20.889 [DEBUG] [Thread-134629] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:05:20.889 [DEBUG] [Thread-134629] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:05:20.889 [DEBUG] [Thread-134629] [transport.py] [_log()] client lang: <none>
2025-12-31T21:05:20.889 [DEBUG] [Thread-134629] [transport.py] [_log()] server lang: <none>
2025-12-31T21:05:20.889 [DEBUG] [Thread-134629] [transport.py] [_log()] kex follows: False
2025-12-31T21:05:20.889 [DEBUG] [Thread-134629] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:05:20.889 [DEBUG] [Thread-134629] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:05:20.889 [DEBUG] [Thread-134629] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:05:20.889 [DEBUG] [Thread-134629] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:05:20.890 [DEBUG] [Thread-134629] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:05:20.890 [DEBUG] [Thread-134629] [transport.py] [_log()] Compression: none
2025-12-31T21:05:20.890 [DEBUG] [Thread-134629] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:05:20.903 [DEBUG] [Thread-134629] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:05:20.904 [DEBUG] [Thread-134629] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:05:20.905 [DEBUG] [Thread-134629] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T21:05:20.905 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T21:05:20.906 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:05:20.908 [DEBUG] [Thread-134629] [transport.py] [_log()] userauth is OK
2025-12-31T21:05:20.908 [DEBUG] [Thread-134629] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:05:20.908 [DEBUG] [Thread-134629] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:05:20.908 [DEBUG] [Thread-134629] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T21:05:20.908 [DEBUG] [Thread-134629] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:05:20.922 [INFO] [Thread-134629] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:05:20.923 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:05:26.006 [DEBUG] [Thread-134629] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:05:26.007 [DEBUG] [Thread-134629] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:05:26.008 [DEBUG] [Thread-134629] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T21:05:26.048 [DEBUG] [Thread-134629] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:05:26.048 [DEBUG] [Thread-134629] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:05:26.052 [DEBUG] [Thread-134629] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:05:26.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:05:26.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T21:05:26.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T21:05:26.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T21:05:26.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:05:26.077 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T21:05:26.077 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:05:26.077 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:05:26.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T21:05:26.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.794930 -999.00  +17.50  12.61     65  +10.90 1 2 1 1 1     0    0 5.20 -50.54 Z...w 8.8 12.6 205.1 19.8 18.6 -14.1 18.5 -14.5 18.2 -14.4 18.6 -13.7
2025-12-31T21:05:26.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T21:05:26.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T21:05:26.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.794930
2025-12-31T21:05:26.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T21:05:26.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T21:05:26.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T21:05:26.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T21:05:26.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T21:05:26.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T21:05:14', tmtdew=7.3, humidity=62.23, cloud=0.0, wind=19.07, temperature=17.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T21:02:32', seeing=2.35, atlas_timestamp='2025-12-31T19:04:41.952', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T21:05:26.080 [DEBUG] [Thread-134629] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:05:26.160 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T21:05:26.172 [DEBUG] [Thread-134632] [transport.py] [_log()] starting thread (client mode): 0xb9592a10
2025-12-31T21:05:26.172 [DEBUG] [Thread-134632] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:05:26.187 [DEBUG] [Thread-134632] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T21:05:26.187 [INFO] [Thread-134632] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T21:05:26.194 [DEBUG] [Thread-134632] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:05:26.195 [DEBUG] [Thread-134632] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T21:05:26.195 [DEBUG] [Thread-134632] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:05:26.195 [DEBUG] [Thread-134632] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:05:26.195 [DEBUG] [Thread-134632] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:05:26.195 [DEBUG] [Thread-134632] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:05:26.195 [DEBUG] [Thread-134632] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:05:26.195 [DEBUG] [Thread-134632] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:05:26.195 [DEBUG] [Thread-134632] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:05:26.195 [DEBUG] [Thread-134632] [transport.py] [_log()] client lang: <none>
2025-12-31T21:05:26.195 [DEBUG] [Thread-134632] [transport.py] [_log()] server lang: <none>
2025-12-31T21:05:26.195 [DEBUG] [Thread-134632] [transport.py] [_log()] kex follows: False
2025-12-31T21:05:26.195 [DEBUG] [Thread-134632] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:05:26.195 [DEBUG] [Thread-134632] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:05:26.195 [DEBUG] [Thread-134632] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:05:26.195 [DEBUG] [Thread-134632] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:05:26.195 [DEBUG] [Thread-134632] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:05:26.195 [DEBUG] [Thread-134632] [transport.py] [_log()] Compression: none
2025-12-31T21:05:26.195 [DEBUG] [Thread-134632] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:05:26.255 [DEBUG] [Thread-134632] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:05:26.256 [DEBUG] [Thread-134632] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:05:26.257 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T21:05:26.257 [DEBUG] [Thread-134632] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T21:05:26.258 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:05:26.317 [DEBUG] [Thread-134632] [transport.py] [_log()] userauth is OK
2025-12-31T21:05:26.318 [DEBUG] [Thread-134632] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:05:26.318 [DEBUG] [Thread-134632] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:05:26.318 [DEBUG] [Thread-134632] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T21:05:26.318 [DEBUG] [Thread-134632] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:05:26.343 [INFO] [Thread-134632] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:05:26.344 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T21:05:26.344 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:05:27.186 [DEBUG] [Thread-134632] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:05:27.186 [DEBUG] [Thread-134632] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:05:27.234 [DEBUG] [Thread-134632] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:05:27.234 [DEBUG] [Thread-134632] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:05:27.246 [DEBUG] [Thread-134632] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:05:27.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:05:27.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T21:05:27.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T21:05:27.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:05:27.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:05:27.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:05:27.289 [DEBUG] [Thread-134632] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:05:35.861 [DEBUG] [Thread-134634 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:05:41.831 [DEBUG] [Thread-134635 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:05:50.905 [DEBUG] [Thread-134636 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:05:57.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T21:05:57.284 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T21:05:57.285 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:05:57.296 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:05:57.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T21:05:58.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 21, 5, 46), 7.26, 62.69, 0.0, 16.55, 17.34, 0, 0, 0, 2, 0, 0),)
2025-12-31T21:05:58.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 21:05:46
2025-12-31T21:05:58.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T21:05:58.295 [DEBUG] [Thread-134637] [transport.py] [_log()] starting thread (client mode): 0xb1785570
2025-12-31T21:05:58.295 [DEBUG] [Thread-134637] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:05:58.317 [DEBUG] [Thread-134637] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T21:05:58.317 [INFO] [Thread-134637] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T21:05:58.320 [DEBUG] [Thread-134637] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:05:58.320 [DEBUG] [Thread-134637] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T21:05:58.321 [DEBUG] [Thread-134637] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:05:58.321 [DEBUG] [Thread-134637] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:05:58.321 [DEBUG] [Thread-134637] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:05:58.321 [DEBUG] [Thread-134637] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:05:58.321 [DEBUG] [Thread-134637] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:05:58.321 [DEBUG] [Thread-134637] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:05:58.321 [DEBUG] [Thread-134637] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:05:58.321 [DEBUG] [Thread-134637] [transport.py] [_log()] client lang: <none>
2025-12-31T21:05:58.321 [DEBUG] [Thread-134637] [transport.py] [_log()] server lang: <none>
2025-12-31T21:05:58.321 [DEBUG] [Thread-134637] [transport.py] [_log()] kex follows: False
2025-12-31T21:05:58.321 [DEBUG] [Thread-134637] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:05:58.321 [DEBUG] [Thread-134637] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:05:58.321 [DEBUG] [Thread-134637] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:05:58.321 [DEBUG] [Thread-134637] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:05:58.321 [DEBUG] [Thread-134637] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:05:58.321 [DEBUG] [Thread-134637] [transport.py] [_log()] Compression: none
2025-12-31T21:05:58.322 [DEBUG] [Thread-134637] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:05:58.342 [DEBUG] [Thread-134637] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:05:58.343 [DEBUG] [Thread-134637] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:05:58.343 [DEBUG] [Thread-134637] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T21:05:58.344 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T21:05:58.344 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:05:58.345 [DEBUG] [Thread-134637] [transport.py] [_log()] userauth is OK
2025-12-31T21:05:58.346 [DEBUG] [Thread-134637] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:05:58.346 [DEBUG] [Thread-134637] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:05:58.346 [DEBUG] [Thread-134637] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T21:05:58.346 [DEBUG] [Thread-134637] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:05:58.382 [INFO] [Thread-134637] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:05:58.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:05:59.002 [DEBUG] [Thread-134637] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:05:59.003 [DEBUG] [Thread-134637] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:05:59.003 [DEBUG] [Thread-134637] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T21:05:59.044 [DEBUG] [Thread-134637] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:05:59.044 [DEBUG] [Thread-134637] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:05:59.047 [DEBUG] [Thread-134637] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:05:59.058 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:05:59.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T21:05:59.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T21:05:59.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T21:05:59.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:05:59.069 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T21:05:59.069 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:05:59.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:05:59.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T21:05:59.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.795277 -999.00  +17.50   5.34     65  +10.90 1 2 1 1 1     0    0 5.32 -47.85 Z...w 12.1 5.3 208.8 14.0 18.6 -14.0 18.4 -14.4 18.2 -14.2 18.6 -13.8
2025-12-31T21:05:59.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T21:05:59.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T21:05:59.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.795277
2025-12-31T21:05:59.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T21:05:59.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T21:05:59.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T21:05:59.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T21:05:59.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T21:05:59.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T21:05:46', tmtdew=7.26, humidity=62.69, cloud=0.0, wind=16.55, temperature=17.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T21:05:46', seeing=2.17, atlas_timestamp='2025-12-31T19:05:11.933', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T21:05:59.072 [DEBUG] [Thread-134637] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:05:59.164 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T21:05:59.176 [DEBUG] [Thread-134640] [transport.py] [_log()] starting thread (client mode): 0xb1784520
2025-12-31T21:05:59.176 [DEBUG] [Thread-134640] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:05:59.192 [DEBUG] [Thread-134640] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T21:05:59.192 [INFO] [Thread-134640] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T21:05:59.200 [DEBUG] [Thread-134640] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:05:59.200 [DEBUG] [Thread-134640] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T21:05:59.200 [DEBUG] [Thread-134640] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:05:59.200 [DEBUG] [Thread-134640] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:05:59.200 [DEBUG] [Thread-134640] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:05:59.200 [DEBUG] [Thread-134640] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:05:59.201 [DEBUG] [Thread-134640] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:05:59.201 [DEBUG] [Thread-134640] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:05:59.201 [DEBUG] [Thread-134640] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:05:59.201 [DEBUG] [Thread-134640] [transport.py] [_log()] client lang: <none>
2025-12-31T21:05:59.201 [DEBUG] [Thread-134640] [transport.py] [_log()] server lang: <none>
2025-12-31T21:05:59.201 [DEBUG] [Thread-134640] [transport.py] [_log()] kex follows: False
2025-12-31T21:05:59.201 [DEBUG] [Thread-134640] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:05:59.201 [DEBUG] [Thread-134640] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:05:59.202 [DEBUG] [Thread-134640] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:05:59.202 [DEBUG] [Thread-134640] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:05:59.202 [DEBUG] [Thread-134640] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:05:59.202 [DEBUG] [Thread-134640] [transport.py] [_log()] Compression: none
2025-12-31T21:05:59.202 [DEBUG] [Thread-134640] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:05:59.259 [DEBUG] [Thread-134640] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:05:59.260 [DEBUG] [Thread-134640] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:05:59.260 [DEBUG] [Thread-134640] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T21:05:59.261 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T21:05:59.261 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:05:59.315 [DEBUG] [Thread-134640] [transport.py] [_log()] userauth is OK
2025-12-31T21:05:59.316 [DEBUG] [Thread-134640] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:05:59.316 [DEBUG] [Thread-134640] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:05:59.316 [DEBUG] [Thread-134640] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T21:05:59.317 [DEBUG] [Thread-134640] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:05:59.331 [INFO] [Thread-134640] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:05:59.332 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T21:05:59.333 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:06:00.159 [DEBUG] [Thread-134640] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:06:00.160 [DEBUG] [Thread-134640] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:06:00.207 [DEBUG] [Thread-134640] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:06:00.207 [DEBUG] [Thread-134640] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:06:00.217 [DEBUG] [Thread-134640] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:06:00.226 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:06:00.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T21:06:00.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T21:06:00.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:06:00.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:06:00.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:06:00.253 [DEBUG] [Thread-134640] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:06:05.939 [DEBUG] [Thread-134642 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:06:20.995 [DEBUG] [Thread-134643 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:06:30.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T21:06:30.276 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T21:06:30.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T21:06:31.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 21, 6, 18), 7.27, 62.63, 0.0, 19.57, 17.29, 0, 0, 0, 2, 0, 0),)
2025-12-31T21:06:31.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 21:06:18
2025-12-31T21:06:31.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T21:06:31.294 [DEBUG] [Thread-134644] [transport.py] [_log()] starting thread (client mode): 0xb6bbaad0
2025-12-31T21:06:31.294 [DEBUG] [Thread-134644] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:06:31.306 [DEBUG] [Thread-134644] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T21:06:31.306 [INFO] [Thread-134644] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T21:06:31.309 [DEBUG] [Thread-134644] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:06:31.309 [DEBUG] [Thread-134644] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T21:06:31.309 [DEBUG] [Thread-134644] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:06:31.309 [DEBUG] [Thread-134644] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:06:31.309 [DEBUG] [Thread-134644] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:06:31.310 [DEBUG] [Thread-134644] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:06:31.310 [DEBUG] [Thread-134644] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:06:31.310 [DEBUG] [Thread-134644] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:06:31.310 [DEBUG] [Thread-134644] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:06:31.310 [DEBUG] [Thread-134644] [transport.py] [_log()] client lang: <none>
2025-12-31T21:06:31.310 [DEBUG] [Thread-134644] [transport.py] [_log()] server lang: <none>
2025-12-31T21:06:31.310 [DEBUG] [Thread-134644] [transport.py] [_log()] kex follows: False
2025-12-31T21:06:31.310 [DEBUG] [Thread-134644] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:06:31.310 [DEBUG] [Thread-134644] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:06:31.310 [DEBUG] [Thread-134644] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:06:31.310 [DEBUG] [Thread-134644] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:06:31.310 [DEBUG] [Thread-134644] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:06:31.310 [DEBUG] [Thread-134644] [transport.py] [_log()] Compression: none
2025-12-31T21:06:31.310 [DEBUG] [Thread-134644] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:06:31.329 [DEBUG] [Thread-134644] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:06:31.330 [DEBUG] [Thread-134644] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:06:31.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T21:06:31.332 [DEBUG] [Thread-134644] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T21:06:31.333 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:06:31.334 [DEBUG] [Thread-134644] [transport.py] [_log()] userauth is OK
2025-12-31T21:06:31.334 [DEBUG] [Thread-134644] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:06:31.334 [DEBUG] [Thread-134644] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:06:31.334 [DEBUG] [Thread-134644] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T21:06:31.334 [DEBUG] [Thread-134644] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:06:31.356 [INFO] [Thread-134644] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:06:31.357 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:06:32.145 [DEBUG] [Thread-134644] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:06:32.145 [DEBUG] [Thread-134644] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:06:32.146 [DEBUG] [Thread-134644] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T21:06:32.186 [DEBUG] [Thread-134644] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:06:32.186 [DEBUG] [Thread-134644] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:06:32.190 [DEBUG] [Thread-134644] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:06:32.198 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:06:32.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T21:06:32.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T21:06:32.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T21:06:32.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:06:32.210 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T21:06:32.211 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:06:32.211 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:06:32.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T21:06:32.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.795624 -999.00  +17.50   7.60     65  +11.00 1 2 1 1 1     0    0 5.45 -44.52 Z.... 18.4 7.6 211.1 24.3 18.6 -13.6 18.4 -14.5 18.2 -14.0 18.6 -13.5
2025-12-31T21:06:32.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T21:06:32.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T21:06:32.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.795624
2025-12-31T21:06:32.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T21:06:32.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T21:06:32.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T21:06:32.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T21:06:32.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T21:06:32.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T21:06:18', tmtdew=7.27, humidity=62.63, cloud=0.0, wind=19.57, temperature=17.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T21:06:18', seeing=2.17, atlas_timestamp='2025-12-31T19:05:41.914', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T21:06:32.213 [DEBUG] [Thread-134644] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:06:32.296 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T21:06:32.310 [DEBUG] [Thread-134647] [transport.py] [_log()] starting thread (client mode): 0xb6bbaa70
2025-12-31T21:06:32.310 [DEBUG] [Thread-134647] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:06:32.324 [DEBUG] [Thread-134647] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T21:06:32.325 [INFO] [Thread-134647] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T21:06:32.333 [DEBUG] [Thread-134647] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:06:32.334 [DEBUG] [Thread-134647] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T21:06:32.334 [DEBUG] [Thread-134647] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:06:32.334 [DEBUG] [Thread-134647] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:06:32.334 [DEBUG] [Thread-134647] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:06:32.334 [DEBUG] [Thread-134647] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:06:32.334 [DEBUG] [Thread-134647] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:06:32.334 [DEBUG] [Thread-134647] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:06:32.334 [DEBUG] [Thread-134647] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:06:32.334 [DEBUG] [Thread-134647] [transport.py] [_log()] client lang: <none>
2025-12-31T21:06:32.334 [DEBUG] [Thread-134647] [transport.py] [_log()] server lang: <none>
2025-12-31T21:06:32.334 [DEBUG] [Thread-134647] [transport.py] [_log()] kex follows: False
2025-12-31T21:06:32.334 [DEBUG] [Thread-134647] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:06:32.334 [DEBUG] [Thread-134647] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:06:32.334 [DEBUG] [Thread-134647] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:06:32.334 [DEBUG] [Thread-134647] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:06:32.334 [DEBUG] [Thread-134647] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:06:32.334 [DEBUG] [Thread-134647] [transport.py] [_log()] Compression: none
2025-12-31T21:06:32.335 [DEBUG] [Thread-134647] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:06:32.395 [DEBUG] [Thread-134647] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:06:32.396 [DEBUG] [Thread-134647] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:06:32.397 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T21:06:32.397 [DEBUG] [Thread-134647] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T21:06:32.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:06:32.451 [DEBUG] [Thread-134647] [transport.py] [_log()] userauth is OK
2025-12-31T21:06:32.451 [DEBUG] [Thread-134647] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:06:32.452 [DEBUG] [Thread-134647] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:06:32.452 [DEBUG] [Thread-134647] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T21:06:32.452 [DEBUG] [Thread-134647] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:06:32.470 [INFO] [Thread-134647] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:06:32.471 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T21:06:32.471 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:06:33.295 [DEBUG] [Thread-134647] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:06:33.295 [DEBUG] [Thread-134647] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:06:33.344 [DEBUG] [Thread-134647] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:06:33.344 [DEBUG] [Thread-134647] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:06:33.353 [DEBUG] [Thread-134647] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:06:33.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:06:33.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T21:06:33.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T21:06:33.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:06:33.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:06:33.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:06:33.392 [DEBUG] [Thread-134647] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:06:36.031 [DEBUG] [Thread-134649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:06:41.918 [DEBUG] [Thread-134650 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:06:51.088 [DEBUG] [Thread-134651 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:06:57.499 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:06:57.500 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:07:03.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T21:07:03.414 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T21:07:03.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T21:07:04.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 21, 6, 50), 7.27, 62.11, 0.0, 17.12, 17.36, 0, 0, 0, 2, 0, 0),)
2025-12-31T21:07:04.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 21:06:50
2025-12-31T21:07:04.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T21:07:04.424 [DEBUG] [Thread-134652] [transport.py] [_log()] starting thread (client mode): 0xb95d5330
2025-12-31T21:07:04.424 [DEBUG] [Thread-134652] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:07:04.445 [DEBUG] [Thread-134652] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T21:07:04.445 [INFO] [Thread-134652] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T21:07:04.449 [DEBUG] [Thread-134652] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:07:04.449 [DEBUG] [Thread-134652] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T21:07:04.449 [DEBUG] [Thread-134652] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:07:04.449 [DEBUG] [Thread-134652] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:07:04.449 [DEBUG] [Thread-134652] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:07:04.449 [DEBUG] [Thread-134652] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:07:04.449 [DEBUG] [Thread-134652] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:07:04.449 [DEBUG] [Thread-134652] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:07:04.449 [DEBUG] [Thread-134652] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:07:04.449 [DEBUG] [Thread-134652] [transport.py] [_log()] client lang: <none>
2025-12-31T21:07:04.449 [DEBUG] [Thread-134652] [transport.py] [_log()] server lang: <none>
2025-12-31T21:07:04.449 [DEBUG] [Thread-134652] [transport.py] [_log()] kex follows: False
2025-12-31T21:07:04.449 [DEBUG] [Thread-134652] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:07:04.449 [DEBUG] [Thread-134652] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:07:04.449 [DEBUG] [Thread-134652] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:07:04.449 [DEBUG] [Thread-134652] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:07:04.449 [DEBUG] [Thread-134652] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:07:04.449 [DEBUG] [Thread-134652] [transport.py] [_log()] Compression: none
2025-12-31T21:07:04.449 [DEBUG] [Thread-134652] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:07:04.467 [DEBUG] [Thread-134652] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:07:04.467 [DEBUG] [Thread-134652] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:07:04.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T21:07:04.468 [DEBUG] [Thread-134652] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T21:07:04.469 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:07:04.470 [DEBUG] [Thread-134652] [transport.py] [_log()] userauth is OK
2025-12-31T21:07:04.470 [DEBUG] [Thread-134652] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:07:04.470 [DEBUG] [Thread-134652] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:07:04.470 [DEBUG] [Thread-134652] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T21:07:04.471 [DEBUG] [Thread-134652] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:07:04.494 [INFO] [Thread-134652] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:07:04.495 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:07:05.135 [DEBUG] [Thread-134652] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:07:05.136 [DEBUG] [Thread-134652] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:07:05.136 [DEBUG] [Thread-134652] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T21:07:05.177 [DEBUG] [Thread-134652] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:07:05.177 [DEBUG] [Thread-134652] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:07:05.180 [DEBUG] [Thread-134652] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:07:05.192 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:07:05.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T21:07:05.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T21:07:05.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T21:07:05.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:07:05.204 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T21:07:05.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:07:05.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:07:05.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T21:07:05.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.795971 -999.00  +17.50  13.13     65  +11.00 1 2 1 1 1     0    0 5.32 -47.44 Z.... 14.8 13.1 231.2 21.0 18.6 -13.7 18.4 -14.1 18.2 -14.0 18.6 -13.5
2025-12-31T21:07:05.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T21:07:05.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T21:07:05.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.795971
2025-12-31T21:07:05.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T21:07:05.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T21:07:05.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T21:07:05.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T21:07:05.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T21:07:05.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T21:06:50', tmtdew=7.27, humidity=62.11, cloud=0.0, wind=17.12, temperature=17.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T21:06:50', seeing=2.17, atlas_timestamp='2025-12-31T19:06:11.894', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T21:07:05.206 [DEBUG] [Thread-134652] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:07:05.297 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T21:07:05.308 [DEBUG] [Thread-134655] [transport.py] [_log()] starting thread (client mode): 0xb17860b0
2025-12-31T21:07:05.309 [DEBUG] [Thread-134655] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:07:05.323 [DEBUG] [Thread-134655] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T21:07:05.323 [INFO] [Thread-134655] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T21:07:05.331 [DEBUG] [Thread-134655] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:07:05.331 [DEBUG] [Thread-134655] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T21:07:05.331 [DEBUG] [Thread-134655] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:07:05.331 [DEBUG] [Thread-134655] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:07:05.331 [DEBUG] [Thread-134655] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:07:05.331 [DEBUG] [Thread-134655] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:07:05.331 [DEBUG] [Thread-134655] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:07:05.331 [DEBUG] [Thread-134655] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:07:05.331 [DEBUG] [Thread-134655] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:07:05.331 [DEBUG] [Thread-134655] [transport.py] [_log()] client lang: <none>
2025-12-31T21:07:05.331 [DEBUG] [Thread-134655] [transport.py] [_log()] server lang: <none>
2025-12-31T21:07:05.331 [DEBUG] [Thread-134655] [transport.py] [_log()] kex follows: False
2025-12-31T21:07:05.331 [DEBUG] [Thread-134655] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:07:05.331 [DEBUG] [Thread-134655] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:07:05.332 [DEBUG] [Thread-134655] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:07:05.332 [DEBUG] [Thread-134655] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:07:05.332 [DEBUG] [Thread-134655] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:07:05.332 [DEBUG] [Thread-134655] [transport.py] [_log()] Compression: none
2025-12-31T21:07:05.332 [DEBUG] [Thread-134655] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:07:05.390 [DEBUG] [Thread-134655] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:07:05.391 [DEBUG] [Thread-134655] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:07:05.392 [DEBUG] [Thread-134655] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T21:07:05.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T21:07:05.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:07:05.446 [DEBUG] [Thread-134655] [transport.py] [_log()] userauth is OK
2025-12-31T21:07:05.446 [DEBUG] [Thread-134655] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:07:05.446 [DEBUG] [Thread-134655] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:07:05.446 [DEBUG] [Thread-134655] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T21:07:05.446 [DEBUG] [Thread-134655] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:07:05.469 [INFO] [Thread-134655] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:07:05.470 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T21:07:05.470 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:07:06.118 [DEBUG] [Thread-134657 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:07:06.315 [DEBUG] [Thread-134655] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:07:06.315 [DEBUG] [Thread-134655] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:07:06.363 [DEBUG] [Thread-134655] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:07:06.363 [DEBUG] [Thread-134655] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:07:06.372 [DEBUG] [Thread-134655] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:07:06.382 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:07:06.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T21:07:06.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T21:07:06.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:07:06.400 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:07:06.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:07:06.409 [DEBUG] [Thread-134655] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:07:21.168 [DEBUG] [Thread-134658 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:07:36.200 [DEBUG] [Thread-134659 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:07:36.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T21:07:36.407 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T21:07:36.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T21:07:37.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 21, 7, 22), 7.26, 62.16, 0.0, 17.68, 17.34, 0, 0, 0, 2, 0, 0),)
2025-12-31T21:07:37.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 21:07:22
2025-12-31T21:07:37.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T21:07:37.414 [DEBUG] [Thread-134660] [transport.py] [_log()] starting thread (client mode): 0xb6bb9900
2025-12-31T21:07:37.414 [DEBUG] [Thread-134660] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:07:37.435 [DEBUG] [Thread-134660] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T21:07:37.435 [INFO] [Thread-134660] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T21:07:37.438 [DEBUG] [Thread-134660] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:07:37.438 [DEBUG] [Thread-134660] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T21:07:37.438 [DEBUG] [Thread-134660] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:07:37.438 [DEBUG] [Thread-134660] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:07:37.438 [DEBUG] [Thread-134660] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:07:37.438 [DEBUG] [Thread-134660] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:07:37.438 [DEBUG] [Thread-134660] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:07:37.438 [DEBUG] [Thread-134660] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:07:37.438 [DEBUG] [Thread-134660] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:07:37.438 [DEBUG] [Thread-134660] [transport.py] [_log()] client lang: <none>
2025-12-31T21:07:37.438 [DEBUG] [Thread-134660] [transport.py] [_log()] server lang: <none>
2025-12-31T21:07:37.438 [DEBUG] [Thread-134660] [transport.py] [_log()] kex follows: False
2025-12-31T21:07:37.438 [DEBUG] [Thread-134660] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:07:37.438 [DEBUG] [Thread-134660] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:07:37.438 [DEBUG] [Thread-134660] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:07:37.438 [DEBUG] [Thread-134660] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:07:37.439 [DEBUG] [Thread-134660] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:07:37.439 [DEBUG] [Thread-134660] [transport.py] [_log()] Compression: none
2025-12-31T21:07:37.439 [DEBUG] [Thread-134660] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:07:37.454 [DEBUG] [Thread-134660] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:07:37.454 [DEBUG] [Thread-134660] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:07:37.454 [DEBUG] [Thread-134660] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T21:07:37.454 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T21:07:37.455 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:07:37.456 [DEBUG] [Thread-134660] [transport.py] [_log()] userauth is OK
2025-12-31T21:07:37.456 [DEBUG] [Thread-134660] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:07:37.456 [DEBUG] [Thread-134660] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:07:37.456 [DEBUG] [Thread-134660] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T21:07:37.456 [DEBUG] [Thread-134660] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:07:37.469 [INFO] [Thread-134660] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:07:37.469 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:07:38.293 [DEBUG] [Thread-134660] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:07:38.293 [DEBUG] [Thread-134660] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:07:38.294 [DEBUG] [Thread-134660] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T21:07:38.334 [DEBUG] [Thread-134660] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:07:38.334 [DEBUG] [Thread-134660] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:07:38.338 [DEBUG] [Thread-134660] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:07:38.351 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:07:38.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T21:07:38.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T21:07:38.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T21:07:38.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:07:38.373 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T21:07:38.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:07:38.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:07:38.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T21:07:38.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.796318 -999.00  +17.50  14.56     65  +10.90 1 2 1 1 1     0    0 5.47 -43.85 Z...w 13.4 14.6 206.4 17.0 18.6 -13.6 18.4 -14.0 18.2 -13.9 18.6 -13.5
2025-12-31T21:07:38.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T21:07:38.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T21:07:38.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.796318
2025-12-31T21:07:38.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T21:07:38.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T21:07:38.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T21:07:38.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T21:07:38.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T21:07:38.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T21:07:22', tmtdew=7.26, humidity=62.16, cloud=0.0, wind=17.68, temperature=17.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T21:07:22', seeing=2.17, atlas_timestamp='2025-12-31T19:06:41.875', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T21:07:38.376 [DEBUG] [Thread-134660] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:07:38.460 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T21:07:38.472 [DEBUG] [Thread-134663] [transport.py] [_log()] starting thread (client mode): 0xb6bba140
2025-12-31T21:07:38.472 [DEBUG] [Thread-134663] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:07:38.486 [DEBUG] [Thread-134663] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T21:07:38.487 [INFO] [Thread-134663] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T21:07:38.497 [DEBUG] [Thread-134663] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:07:38.498 [DEBUG] [Thread-134663] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T21:07:38.498 [DEBUG] [Thread-134663] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:07:38.498 [DEBUG] [Thread-134663] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:07:38.498 [DEBUG] [Thread-134663] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:07:38.498 [DEBUG] [Thread-134663] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:07:38.498 [DEBUG] [Thread-134663] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:07:38.498 [DEBUG] [Thread-134663] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:07:38.499 [DEBUG] [Thread-134663] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:07:38.499 [DEBUG] [Thread-134663] [transport.py] [_log()] client lang: <none>
2025-12-31T21:07:38.499 [DEBUG] [Thread-134663] [transport.py] [_log()] server lang: <none>
2025-12-31T21:07:38.499 [DEBUG] [Thread-134663] [transport.py] [_log()] kex follows: False
2025-12-31T21:07:38.499 [DEBUG] [Thread-134663] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:07:38.499 [DEBUG] [Thread-134663] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:07:38.499 [DEBUG] [Thread-134663] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:07:38.499 [DEBUG] [Thread-134663] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:07:38.500 [DEBUG] [Thread-134663] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:07:38.500 [DEBUG] [Thread-134663] [transport.py] [_log()] Compression: none
2025-12-31T21:07:38.500 [DEBUG] [Thread-134663] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:07:38.567 [DEBUG] [Thread-134663] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:07:38.567 [DEBUG] [Thread-134663] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:07:38.568 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T21:07:38.568 [DEBUG] [Thread-134663] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T21:07:38.569 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:07:38.626 [DEBUG] [Thread-134663] [transport.py] [_log()] userauth is OK
2025-12-31T21:07:38.626 [DEBUG] [Thread-134663] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:07:38.627 [DEBUG] [Thread-134663] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:07:38.627 [DEBUG] [Thread-134663] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T21:07:38.627 [DEBUG] [Thread-134663] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:07:38.645 [INFO] [Thread-134663] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:07:38.646 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T21:07:38.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:07:39.519 [DEBUG] [Thread-134663] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:07:39.520 [DEBUG] [Thread-134663] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:07:39.568 [DEBUG] [Thread-134663] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:07:39.568 [DEBUG] [Thread-134663] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:07:39.577 [DEBUG] [Thread-134663] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:07:39.586 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:07: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-12-31T21:07:39.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T21:07:39.605 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:07:39.606 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:07:39.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:07:39.614 [DEBUG] [Thread-134663] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:07:42.011 [DEBUG] [Thread-134665 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:07:51.248 [DEBUG] [Thread-134666 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:07:57.701 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:07:57.703 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:08:06.312 [DEBUG] [Thread-134667 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:08:09.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T21:08:09.636 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T21:08:09.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T21:08:10.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 21, 7, 54), 7.3, 62.21, 0.0, 21.6, 17.34, 0, 0, 0, 2, 0, 0),)
2025-12-31T21:08:10.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 21:07:54
2025-12-31T21:08:10.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T21:08:10.682 [DEBUG] [Thread-134668] [transport.py] [_log()] starting thread (client mode): 0xb175bb20
2025-12-31T21:08:10.682 [DEBUG] [Thread-134668] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:08:10.702 [DEBUG] [Thread-134668] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T21:08:10.702 [INFO] [Thread-134668] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T21:08:10.705 [DEBUG] [Thread-134668] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:08:10.705 [DEBUG] [Thread-134668] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T21:08:10.705 [DEBUG] [Thread-134668] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:08:10.705 [DEBUG] [Thread-134668] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:08:10.705 [DEBUG] [Thread-134668] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:08:10.705 [DEBUG] [Thread-134668] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:08:10.705 [DEBUG] [Thread-134668] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:08:10.705 [DEBUG] [Thread-134668] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:08:10.705 [DEBUG] [Thread-134668] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:08:10.705 [DEBUG] [Thread-134668] [transport.py] [_log()] client lang: <none>
2025-12-31T21:08:10.705 [DEBUG] [Thread-134668] [transport.py] [_log()] server lang: <none>
2025-12-31T21:08:10.705 [DEBUG] [Thread-134668] [transport.py] [_log()] kex follows: False
2025-12-31T21:08:10.705 [DEBUG] [Thread-134668] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:08:10.705 [DEBUG] [Thread-134668] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:08:10.705 [DEBUG] [Thread-134668] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:08:10.705 [DEBUG] [Thread-134668] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:08:10.706 [DEBUG] [Thread-134668] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:08:10.706 [DEBUG] [Thread-134668] [transport.py] [_log()] Compression: none
2025-12-31T21:08:10.706 [DEBUG] [Thread-134668] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:08:10.721 [DEBUG] [Thread-134668] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:08:10.721 [DEBUG] [Thread-134668] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:08:10.721 [DEBUG] [Thread-134668] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T21:08:10.721 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T21:08:10.722 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:08:10.722 [DEBUG] [Thread-134668] [transport.py] [_log()] userauth is OK
2025-12-31T21:08:10.722 [DEBUG] [Thread-134668] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:08:10.722 [DEBUG] [Thread-134668] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:08:10.722 [DEBUG] [Thread-134668] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T21:08:10.722 [DEBUG] [Thread-134668] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:08:10.733 [INFO] [Thread-134668] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:08:10.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:08:11.390 [DEBUG] [Thread-134668] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:08:11.390 [DEBUG] [Thread-134668] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:08:11.390 [DEBUG] [Thread-134668] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T21:08:11.431 [DEBUG] [Thread-134668] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:08:11.431 [DEBUG] [Thread-134668] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:08:11.433 [DEBUG] [Thread-134668] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:08:11.445 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:08:11.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T21:08:11.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T21:08:11.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T21:08:11.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:08:11.450 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T21:08:11.450 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:08:11.450 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:08:11.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T21:08:11.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.796666 -999.00  +17.50  12.51     65  +10.90 1 2 1 1 1     0    0 5.30 -43.65 ....W 8.0 12.5 216.4 18.2 18.6 -13.6 18.4 -14.0 18.2 -14.0 18.6 -13.6
2025-12-31T21:08:11.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T21:08:11.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T21:08:11.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.796666
2025-12-31T21:08:11.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T21:08:11.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T21:08:11.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T21:08:11.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T21:08:11.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T21:08:11.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T21:07:54', tmtdew=7.3, humidity=62.21, cloud=0.0, wind=21.6, temperature=17.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T21:07:54', seeing=2.17, atlas_timestamp='2025-12-31T19:07:11.942', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T21:08:11.451 [DEBUG] [Thread-134668] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:08:11.525 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T21:08:11.537 [DEBUG] [Thread-134671] [transport.py] [_log()] starting thread (client mode): 0xb1759e70
2025-12-31T21:08:11.537 [DEBUG] [Thread-134671] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:08:11.552 [DEBUG] [Thread-134671] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T21:08:11.552 [INFO] [Thread-134671] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T21:08:11.559 [DEBUG] [Thread-134671] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:08:11.560 [DEBUG] [Thread-134671] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T21:08:11.560 [DEBUG] [Thread-134671] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:08:11.560 [DEBUG] [Thread-134671] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:08:11.560 [DEBUG] [Thread-134671] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:08:11.560 [DEBUG] [Thread-134671] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:08:11.560 [DEBUG] [Thread-134671] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:08:11.560 [DEBUG] [Thread-134671] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:08:11.560 [DEBUG] [Thread-134671] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:08:11.560 [DEBUG] [Thread-134671] [transport.py] [_log()] client lang: <none>
2025-12-31T21:08:11.560 [DEBUG] [Thread-134671] [transport.py] [_log()] server lang: <none>
2025-12-31T21:08:11.560 [DEBUG] [Thread-134671] [transport.py] [_log()] kex follows: False
2025-12-31T21:08:11.560 [DEBUG] [Thread-134671] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:08:11.560 [DEBUG] [Thread-134671] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:08:11.560 [DEBUG] [Thread-134671] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:08:11.560 [DEBUG] [Thread-134671] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:08:11.560 [DEBUG] [Thread-134671] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:08:11.560 [DEBUG] [Thread-134671] [transport.py] [_log()] Compression: none
2025-12-31T21:08:11.560 [DEBUG] [Thread-134671] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:08:11.615 [DEBUG] [Thread-134671] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:08:11.616 [DEBUG] [Thread-134671] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:08:11.616 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T21:08:11.616 [DEBUG] [Thread-134671] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T21:08:11.616 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:08:11.673 [DEBUG] [Thread-134671] [transport.py] [_log()] userauth is OK
2025-12-31T21:08:11.673 [DEBUG] [Thread-134671] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:08:11.673 [DEBUG] [Thread-134671] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:08:11.673 [DEBUG] [Thread-134671] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T21:08:11.673 [DEBUG] [Thread-134671] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:08:11.692 [INFO] [Thread-134671] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:08:11.692 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T21:08:11.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:08:12.542 [DEBUG] [Thread-134671] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:08:12.542 [DEBUG] [Thread-134671] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:08:12.590 [DEBUG] [Thread-134671] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:08:12.590 [DEBUG] [Thread-134671] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:08:12.598 [DEBUG] [Thread-134671] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:08:12.606 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:08:12.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T21:08:12.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T21:08:12.622 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:08:12.622 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:08:12.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:08:12.630 [DEBUG] [Thread-134671] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:08:21.348 [DEBUG] [Thread-134673 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:08:36.407 [DEBUG] [Thread-134674 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:08:42.098 [DEBUG] [Thread-134675 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:08:42.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T21:08:42.653 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T21:08:42.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T21:08:43.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 21, 8, 26), 7.28, 62.28, 0.0, 18.85, 17.29, 0, 0, 0, 2, 0, 0),)
2025-12-31T21:08:43.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 21:08:26
2025-12-31T21:08:43.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T21:08:43.671 [DEBUG] [Thread-134676] [transport.py] [_log()] starting thread (client mode): 0xb957a050
2025-12-31T21:08:43.671 [DEBUG] [Thread-134676] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:08:43.685 [DEBUG] [Thread-134676] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T21:08:43.685 [INFO] [Thread-134676] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T21:08:43.687 [DEBUG] [Thread-134676] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:08:43.688 [DEBUG] [Thread-134676] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T21:08:43.688 [DEBUG] [Thread-134676] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:08:43.688 [DEBUG] [Thread-134676] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:08:43.688 [DEBUG] [Thread-134676] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:08:43.688 [DEBUG] [Thread-134676] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:08:43.688 [DEBUG] [Thread-134676] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:08:43.688 [DEBUG] [Thread-134676] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:08:43.688 [DEBUG] [Thread-134676] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:08:43.688 [DEBUG] [Thread-134676] [transport.py] [_log()] client lang: <none>
2025-12-31T21:08:43.688 [DEBUG] [Thread-134676] [transport.py] [_log()] server lang: <none>
2025-12-31T21:08:43.688 [DEBUG] [Thread-134676] [transport.py] [_log()] kex follows: False
2025-12-31T21:08:43.688 [DEBUG] [Thread-134676] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:08:43.688 [DEBUG] [Thread-134676] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:08:43.688 [DEBUG] [Thread-134676] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:08:43.688 [DEBUG] [Thread-134676] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:08:43.688 [DEBUG] [Thread-134676] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:08:43.688 [DEBUG] [Thread-134676] [transport.py] [_log()] Compression: none
2025-12-31T21:08:43.688 [DEBUG] [Thread-134676] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:08:43.703 [DEBUG] [Thread-134676] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:08:43.703 [DEBUG] [Thread-134676] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:08:43.704 [DEBUG] [Thread-134676] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T21:08:43.704 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T21:08:43.704 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:08:43.707 [DEBUG] [Thread-134676] [transport.py] [_log()] userauth is OK
2025-12-31T21:08:43.707 [DEBUG] [Thread-134676] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:08:43.708 [DEBUG] [Thread-134676] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:08:43.708 [DEBUG] [Thread-134676] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T21:08:43.708 [DEBUG] [Thread-134676] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:08:43.727 [INFO] [Thread-134676] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:08:43.728 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:08:44.519 [DEBUG] [Thread-134676] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:08:44.519 [DEBUG] [Thread-134676] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:08:44.520 [DEBUG] [Thread-134676] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T21:08:44.560 [DEBUG] [Thread-134676] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:08:44.560 [DEBUG] [Thread-134676] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:08:44.563 [DEBUG] [Thread-134676] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:08:44.576 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:08:44.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T21:08:44.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T21:08:44.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T21:08:44.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:08:44.588 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T21:08:44.588 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:08:44.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:08:44.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T21:08:44.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.797013 -999.00  +17.50  15.13     65  +10.90 1 2 1 1 1     0    0 5.41 -41.15 ....W 16.4 15.1 203.6 21.5 18.6 -13.8 18.4 -14.4 18.2 -14.2 18.6 -13.6
2025-12-31T21:08:44.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T21:08:44.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T21:08:44.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.797013
2025-12-31T21:08:44.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T21:08:44.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T21:08:44.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T21:08:44.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T21:08:44.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T21:08:44.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T21:08:26', tmtdew=7.28, humidity=62.28, cloud=0.0, wind=18.85, temperature=17.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T21:08:27', seeing=2.17, atlas_timestamp='2025-12-31T19:07:41.923', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T21:08:44.591 [DEBUG] [Thread-134676] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:08:44.673 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T21:08:44.685 [DEBUG] [Thread-134679] [transport.py] [_log()] starting thread (client mode): 0xb9592b00
2025-12-31T21:08:44.685 [DEBUG] [Thread-134679] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:08:44.699 [DEBUG] [Thread-134679] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T21:08:44.700 [INFO] [Thread-134679] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T21:08:44.707 [DEBUG] [Thread-134679] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:08:44.707 [DEBUG] [Thread-134679] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T21:08:44.707 [DEBUG] [Thread-134679] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:08:44.707 [DEBUG] [Thread-134679] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:08:44.707 [DEBUG] [Thread-134679] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:08:44.707 [DEBUG] [Thread-134679] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:08:44.707 [DEBUG] [Thread-134679] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:08:44.707 [DEBUG] [Thread-134679] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:08:44.707 [DEBUG] [Thread-134679] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:08:44.707 [DEBUG] [Thread-134679] [transport.py] [_log()] client lang: <none>
2025-12-31T21:08:44.707 [DEBUG] [Thread-134679] [transport.py] [_log()] server lang: <none>
2025-12-31T21:08:44.707 [DEBUG] [Thread-134679] [transport.py] [_log()] kex follows: False
2025-12-31T21:08:44.707 [DEBUG] [Thread-134679] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:08:44.708 [DEBUG] [Thread-134679] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:08:44.708 [DEBUG] [Thread-134679] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:08:44.708 [DEBUG] [Thread-134679] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:08:44.708 [DEBUG] [Thread-134679] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:08:44.708 [DEBUG] [Thread-134679] [transport.py] [_log()] Compression: none
2025-12-31T21:08:44.708 [DEBUG] [Thread-134679] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:08:44.765 [DEBUG] [Thread-134679] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:08:44.766 [DEBUG] [Thread-134679] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:08:44.766 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T21:08:44.767 [DEBUG] [Thread-134679] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T21:08:44.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:08:44.821 [DEBUG] [Thread-134679] [transport.py] [_log()] userauth is OK
2025-12-31T21:08:44.821 [DEBUG] [Thread-134679] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:08:44.822 [DEBUG] [Thread-134679] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:08:44.822 [DEBUG] [Thread-134679] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T21:08:44.822 [DEBUG] [Thread-134679] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:08:44.840 [INFO] [Thread-134679] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:08:44.841 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T21:08:44.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:08:45.691 [DEBUG] [Thread-134679] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:08:45.691 [DEBUG] [Thread-134679] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:08:45.738 [DEBUG] [Thread-134679] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:08:45.738 [DEBUG] [Thread-134679] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:08:45.747 [DEBUG] [Thread-134679] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:08:45.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:08:45.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T21:08:45.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T21:08:45.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:08:45.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:08:45.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:08:45.780 [DEBUG] [Thread-134679] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:08:51.436 [DEBUG] [Thread-134681 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:08:57.907 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:08:57.908 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:09:06.488 [DEBUG] [Thread-134682 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:09:15.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T21:09:15.784 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T21:09:15.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T21:09:16.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 21, 8, 59), 7.22, 62.81, 0.0, 22.66, 17.19, 0, 0, 0, 2, 0, 0),)
2025-12-31T21:09:16.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 21:08:59
2025-12-31T21:09:16.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T21:09:16.795 [DEBUG] [Thread-134683] [transport.py] [_log()] starting thread (client mode): 0xb95d6b90
2025-12-31T21:09:16.795 [DEBUG] [Thread-134683] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:09:16.815 [DEBUG] [Thread-134683] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T21:09:16.815 [INFO] [Thread-134683] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T21:09:16.818 [DEBUG] [Thread-134683] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:09:16.818 [DEBUG] [Thread-134683] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T21:09:16.818 [DEBUG] [Thread-134683] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:09:16.818 [DEBUG] [Thread-134683] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:09:16.818 [DEBUG] [Thread-134683] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:09:16.818 [DEBUG] [Thread-134683] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:09:16.818 [DEBUG] [Thread-134683] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:09:16.818 [DEBUG] [Thread-134683] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:09:16.818 [DEBUG] [Thread-134683] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:09:16.818 [DEBUG] [Thread-134683] [transport.py] [_log()] client lang: <none>
2025-12-31T21:09:16.818 [DEBUG] [Thread-134683] [transport.py] [_log()] server lang: <none>
2025-12-31T21:09:16.818 [DEBUG] [Thread-134683] [transport.py] [_log()] kex follows: False
2025-12-31T21:09:16.818 [DEBUG] [Thread-134683] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:09:16.818 [DEBUG] [Thread-134683] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:09:16.818 [DEBUG] [Thread-134683] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:09:16.818 [DEBUG] [Thread-134683] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:09:16.818 [DEBUG] [Thread-134683] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:09:16.819 [DEBUG] [Thread-134683] [transport.py] [_log()] Compression: none
2025-12-31T21:09:16.819 [DEBUG] [Thread-134683] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:09:16.834 [DEBUG] [Thread-134683] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:09:16.835 [DEBUG] [Thread-134683] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:09:16.835 [DEBUG] [Thread-134683] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T21:09:16.836 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T21:09:16.836 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:09:16.838 [DEBUG] [Thread-134683] [transport.py] [_log()] userauth is OK
2025-12-31T21:09:16.838 [DEBUG] [Thread-134683] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:09:16.838 [DEBUG] [Thread-134683] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:09:16.838 [DEBUG] [Thread-134683] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T21:09:16.838 [DEBUG] [Thread-134683] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:09:16.862 [INFO] [Thread-134683] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:09:16.862 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:09:17.469 [DEBUG] [Thread-134683] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:09:17.470 [DEBUG] [Thread-134683] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:09:17.470 [DEBUG] [Thread-134683] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T21:09:17.511 [DEBUG] [Thread-134683] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:09:17.511 [DEBUG] [Thread-134683] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:09:17.515 [DEBUG] [Thread-134683] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:09:17.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:09:17.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T21:09:17.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T21:09:17.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T21:09:17.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:09:17.536 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T21:09:17.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:09:17.536 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:09:17.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T21:09:17.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.797707 -999.00  +17.50  16.86     65  +10.90 1 2 1 1 1     0    0 5.51 -38.11 ....W 22.1 16.9 190.0 27.3 18.6 -14.0 18.4 -14.8 18.2 -14.6 18.6 -14.1
2025-12-31T21:09:17.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T21:09:17.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T21:09:17.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.797707
2025-12-31T21:09:17.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T21:09:17.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T21:09:17.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T21:09:17.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T21:09:17.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T21:09:17.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T21:08:59', tmtdew=7.22, humidity=62.81, cloud=0.0, wind=22.66, temperature=17.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T21:08:59', seeing=2.17, atlas_timestamp='2025-12-31T19:08:41.885', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T21:09:17.537 [DEBUG] [Thread-134683] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:09:17.612 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T21:09:17.625 [DEBUG] [Thread-134686] [transport.py] [_log()] starting thread (client mode): 0xb6bbb880
2025-12-31T21:09:17.625 [DEBUG] [Thread-134686] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:09:17.642 [DEBUG] [Thread-134686] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T21:09:17.642 [INFO] [Thread-134686] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T21:09:17.649 [DEBUG] [Thread-134686] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:09:17.649 [DEBUG] [Thread-134686] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T21:09:17.649 [DEBUG] [Thread-134686] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:09:17.650 [DEBUG] [Thread-134686] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:09:17.650 [DEBUG] [Thread-134686] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:09:17.650 [DEBUG] [Thread-134686] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:09:17.650 [DEBUG] [Thread-134686] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:09:17.650 [DEBUG] [Thread-134686] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:09:17.650 [DEBUG] [Thread-134686] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:09:17.650 [DEBUG] [Thread-134686] [transport.py] [_log()] client lang: <none>
2025-12-31T21:09:17.650 [DEBUG] [Thread-134686] [transport.py] [_log()] server lang: <none>
2025-12-31T21:09:17.650 [DEBUG] [Thread-134686] [transport.py] [_log()] kex follows: False
2025-12-31T21:09:17.650 [DEBUG] [Thread-134686] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:09:17.650 [DEBUG] [Thread-134686] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:09:17.650 [DEBUG] [Thread-134686] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:09:17.650 [DEBUG] [Thread-134686] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:09:17.650 [DEBUG] [Thread-134686] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:09:17.650 [DEBUG] [Thread-134686] [transport.py] [_log()] Compression: none
2025-12-31T21:09:17.650 [DEBUG] [Thread-134686] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:09:17.709 [DEBUG] [Thread-134686] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:09:17.710 [DEBUG] [Thread-134686] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:09:17.711 [DEBUG] [Thread-134686] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T21:09:17.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T21:09:17.712 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:09:17.770 [DEBUG] [Thread-134686] [transport.py] [_log()] userauth is OK
2025-12-31T21:09:17.771 [DEBUG] [Thread-134686] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:09:17.771 [DEBUG] [Thread-134686] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:09:17.771 [DEBUG] [Thread-134686] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T21:09:17.771 [DEBUG] [Thread-134686] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:09:17.796 [INFO] [Thread-134686] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:09:17.797 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T21:09:17.797 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:09:18.639 [DEBUG] [Thread-134686] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:09:18.639 [DEBUG] [Thread-134686] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:09:18.687 [DEBUG] [Thread-134686] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:09:18.687 [DEBUG] [Thread-134686] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:09:18.697 [DEBUG] [Thread-134686] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:09:18.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:09:18.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T21:09:18.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T21:09:18.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:09:18.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:09:18.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:09:18.733 [DEBUG] [Thread-134686] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:09:21.528 [DEBUG] [Thread-134688 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:09:36.586 [DEBUG] [Thread-134689 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:09:42.202 [DEBUG] [Thread-134690 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:09:48.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T21:09:48.756 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T21:09:48.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T21:09:49.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 21, 9, 31), 7.24, 62.73, 0.0, 20.96, 17.21, 0, 0, 0, 2, 0, 0),)
2025-12-31T21:09:49.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 21:09:31
2025-12-31T21:09:49.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T21:09:49.788 [DEBUG] [Thread-134691] [transport.py] [_log()] starting thread (client mode): 0xb95d7c10
2025-12-31T21:09:49.788 [DEBUG] [Thread-134691] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:09:49.800 [DEBUG] [Thread-134691] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T21:09:49.800 [INFO] [Thread-134691] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T21:09:49.803 [DEBUG] [Thread-134691] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:09:49.804 [DEBUG] [Thread-134691] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T21:09:49.804 [DEBUG] [Thread-134691] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:09:49.804 [DEBUG] [Thread-134691] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:09:49.804 [DEBUG] [Thread-134691] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:09:49.804 [DEBUG] [Thread-134691] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:09:49.804 [DEBUG] [Thread-134691] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:09:49.804 [DEBUG] [Thread-134691] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:09:49.804 [DEBUG] [Thread-134691] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:09:49.804 [DEBUG] [Thread-134691] [transport.py] [_log()] client lang: <none>
2025-12-31T21:09:49.804 [DEBUG] [Thread-134691] [transport.py] [_log()] server lang: <none>
2025-12-31T21:09:49.804 [DEBUG] [Thread-134691] [transport.py] [_log()] kex follows: False
2025-12-31T21:09:49.804 [DEBUG] [Thread-134691] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:09:49.804 [DEBUG] [Thread-134691] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:09:49.804 [DEBUG] [Thread-134691] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:09:49.804 [DEBUG] [Thread-134691] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:09:49.804 [DEBUG] [Thread-134691] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:09:49.804 [DEBUG] [Thread-134691] [transport.py] [_log()] Compression: none
2025-12-31T21:09:49.804 [DEBUG] [Thread-134691] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:09:49.827 [DEBUG] [Thread-134691] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:09:49.828 [DEBUG] [Thread-134691] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:09:49.829 [DEBUG] [Thread-134691] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T21:09:49.829 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T21:09:49.830 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:09:49.873 [DEBUG] [Thread-134691] [transport.py] [_log()] userauth is OK
2025-12-31T21:09:49.873 [DEBUG] [Thread-134691] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:09:49.873 [DEBUG] [Thread-134691] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:09:49.874 [DEBUG] [Thread-134691] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T21:09:49.874 [DEBUG] [Thread-134691] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:09:49.911 [INFO] [Thread-134691] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:09:49.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:09:50.544 [DEBUG] [Thread-134691] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:09:50.545 [DEBUG] [Thread-134691] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:09:50.545 [DEBUG] [Thread-134691] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T21:09:50.586 [DEBUG] [Thread-134691] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:09:50.586 [DEBUG] [Thread-134691] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:09:50.590 [DEBUG] [Thread-134691] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:09:50.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:09:50.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T21:09:50.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T21:09:50.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T21:09:50.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:09:50.615 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T21:09:50.615 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:09:50.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:09:50.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T21:09:50.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.798055 -999.00  +17.40  14.62     65  +10.90 1 2 1 1 1     0    0 5.50 -36.64 ....W 5.5 14.6 205.2 19.0 18.5 -14.3 18.4 -15.0 18.2 -15.0 18.5 -14.5
2025-12-31T21:09:50.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T21:09:50.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T21:09:50.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.798055
2025-12-31T21:09:50.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T21:09:50.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T21:09:50.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T21:09:50.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T21:09:50.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T21:09:50.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T21:09:31', tmtdew=7.24, humidity=62.73, cloud=0.0, wind=20.96, temperature=17.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T21:09:31', seeing=2.17, atlas_timestamp='2025-12-31T19:09:11.952', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T21:09:50.618 [DEBUG] [Thread-134691] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:09:50.701 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T21:09:50.714 [DEBUG] [Thread-134694] [transport.py] [_log()] starting thread (client mode): 0xb1766290
2025-12-31T21:09:50.714 [DEBUG] [Thread-134694] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:09:50.730 [DEBUG] [Thread-134694] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T21:09:50.730 [INFO] [Thread-134694] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T21:09:50.737 [DEBUG] [Thread-134694] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:09:50.738 [DEBUG] [Thread-134694] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T21:09:50.738 [DEBUG] [Thread-134694] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:09:50.738 [DEBUG] [Thread-134694] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:09:50.738 [DEBUG] [Thread-134694] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:09:50.738 [DEBUG] [Thread-134694] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:09:50.738 [DEBUG] [Thread-134694] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:09:50.738 [DEBUG] [Thread-134694] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:09:50.738 [DEBUG] [Thread-134694] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:09:50.738 [DEBUG] [Thread-134694] [transport.py] [_log()] client lang: <none>
2025-12-31T21:09:50.738 [DEBUG] [Thread-134694] [transport.py] [_log()] server lang: <none>
2025-12-31T21:09:50.738 [DEBUG] [Thread-134694] [transport.py] [_log()] kex follows: False
2025-12-31T21:09:50.738 [DEBUG] [Thread-134694] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:09:50.738 [DEBUG] [Thread-134694] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:09:50.738 [DEBUG] [Thread-134694] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:09:50.738 [DEBUG] [Thread-134694] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:09:50.738 [DEBUG] [Thread-134694] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:09:50.738 [DEBUG] [Thread-134694] [transport.py] [_log()] Compression: none
2025-12-31T21:09:50.738 [DEBUG] [Thread-134694] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:09:50.797 [DEBUG] [Thread-134694] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:09:50.797 [DEBUG] [Thread-134694] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:09:50.798 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T21:09:50.799 [DEBUG] [Thread-134694] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T21:09:50.799 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:09:50.852 [DEBUG] [Thread-134694] [transport.py] [_log()] userauth is OK
2025-12-31T21:09:50.853 [DEBUG] [Thread-134694] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:09:50.853 [DEBUG] [Thread-134694] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:09:50.853 [DEBUG] [Thread-134694] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T21:09:50.853 [DEBUG] [Thread-134694] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:09:50.873 [INFO] [Thread-134694] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:09:50.873 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T21:09:50.874 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:09:51.624 [DEBUG] [Thread-134696 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:09:51.755 [DEBUG] [Thread-134694] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:09:51.755 [DEBUG] [Thread-134694] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:09:51.803 [DEBUG] [Thread-134694] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:09:51.803 [DEBUG] [Thread-134694] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:09:51.813 [DEBUG] [Thread-134694] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:09:51.822 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:09:51.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T21:09:51.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-12-31T21:09:51.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:09:51.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:09:51.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:09:51.850 [DEBUG] [Thread-134694] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:09:58.111 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:09:58.111 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:10:06.676 [DEBUG] [Thread-134697 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:10:21.703 [DEBUG] [Thread-134698 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:10:21.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T21:10:21.872 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T21:10:21.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T21:10:22.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 21, 10, 3), 7.22, 62.81, 0.0, 22.23, 17.24, 0, 0, 0, 2, 0, 0),)
2025-12-31T21:10:22.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 21:10:03
2025-12-31T21:10:22.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T21:10:22.892 [DEBUG] [Thread-134699] [transport.py] [_log()] starting thread (client mode): 0xb957af80
2025-12-31T21:10:22.892 [DEBUG] [Thread-134699] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:10:22.912 [DEBUG] [Thread-134699] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T21:10:22.912 [INFO] [Thread-134699] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T21:10:22.915 [DEBUG] [Thread-134699] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:10:22.915 [DEBUG] [Thread-134699] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T21:10:22.915 [DEBUG] [Thread-134699] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:10:22.915 [DEBUG] [Thread-134699] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:10:22.915 [DEBUG] [Thread-134699] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:10:22.915 [DEBUG] [Thread-134699] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:10:22.915 [DEBUG] [Thread-134699] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:10:22.915 [DEBUG] [Thread-134699] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:10:22.915 [DEBUG] [Thread-134699] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:10:22.915 [DEBUG] [Thread-134699] [transport.py] [_log()] client lang: <none>
2025-12-31T21:10:22.915 [DEBUG] [Thread-134699] [transport.py] [_log()] server lang: <none>
2025-12-31T21:10:22.915 [DEBUG] [Thread-134699] [transport.py] [_log()] kex follows: False
2025-12-31T21:10:22.915 [DEBUG] [Thread-134699] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:10:22.915 [DEBUG] [Thread-134699] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:10:22.915 [DEBUG] [Thread-134699] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:10:22.916 [DEBUG] [Thread-134699] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:10:22.916 [DEBUG] [Thread-134699] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:10:22.916 [DEBUG] [Thread-134699] [transport.py] [_log()] Compression: none
2025-12-31T21:10:22.916 [DEBUG] [Thread-134699] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:10:22.934 [DEBUG] [Thread-134699] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:10:22.935 [DEBUG] [Thread-134699] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:10:22.935 [DEBUG] [Thread-134699] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T21:10:22.936 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T21:10:22.936 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:10:22.937 [DEBUG] [Thread-134699] [transport.py] [_log()] userauth is OK
2025-12-31T21:10:22.937 [DEBUG] [Thread-134699] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:10:22.938 [DEBUG] [Thread-134699] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:10:22.938 [DEBUG] [Thread-134699] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T21:10:22.938 [DEBUG] [Thread-134699] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:10:22.973 [INFO] [Thread-134699] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:10:22.973 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:10:23.612 [DEBUG] [Thread-134699] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:10:23.612 [DEBUG] [Thread-134699] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:10:23.613 [DEBUG] [Thread-134699] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T21:10:23.653 [DEBUG] [Thread-134699] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:10:23.653 [DEBUG] [Thread-134699] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:10:23.656 [DEBUG] [Thread-134699] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:10:23.668 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:10:23.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T21:10:23.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T21:10:23.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T21:10:23.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:10:23.677 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T21:10:23.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:10:23.677 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:10:23.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T21:10:23.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.798402 -999.00  +17.50   8.02     65  +11.00 1 2 1 1 1     0    0 5.73 -33.87 ....W 11.8 8.0 177.2 20.4 18.6 -14.8 18.4 -15.7 18.2 -15.2 18.5 -14.6
2025-12-31T21:10:23.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T21:10:23.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T21:10:23.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.798402
2025-12-31T21:10:23.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T21:10:23.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T21:10:23.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T21:10:23.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T21:10:23.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T21:10:23.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T21:10:03', tmtdew=7.22, humidity=62.81, cloud=0.0, wind=22.23, temperature=17.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T21:09:31', seeing=2.17, atlas_timestamp='2025-12-31T19:09:41.933', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T21:10:23.680 [DEBUG] [Thread-134699] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:10:23.769 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T21:10:23.780 [DEBUG] [Thread-134702] [transport.py] [_log()] starting thread (client mode): 0xb95783d0
2025-12-31T21:10:23.780 [DEBUG] [Thread-134702] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:10:23.796 [DEBUG] [Thread-134702] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T21:10:23.796 [INFO] [Thread-134702] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T21:10:23.806 [DEBUG] [Thread-134702] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:10:23.806 [DEBUG] [Thread-134702] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T21:10:23.806 [DEBUG] [Thread-134702] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:10:23.806 [DEBUG] [Thread-134702] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:10:23.806 [DEBUG] [Thread-134702] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:10:23.806 [DEBUG] [Thread-134702] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:10:23.806 [DEBUG] [Thread-134702] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:10:23.806 [DEBUG] [Thread-134702] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:10:23.806 [DEBUG] [Thread-134702] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:10:23.807 [DEBUG] [Thread-134702] [transport.py] [_log()] client lang: <none>
2025-12-31T21:10:23.807 [DEBUG] [Thread-134702] [transport.py] [_log()] server lang: <none>
2025-12-31T21:10:23.807 [DEBUG] [Thread-134702] [transport.py] [_log()] kex follows: False
2025-12-31T21:10:23.807 [DEBUG] [Thread-134702] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:10:23.807 [DEBUG] [Thread-134702] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:10:23.807 [DEBUG] [Thread-134702] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:10:23.807 [DEBUG] [Thread-134702] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:10:23.807 [DEBUG] [Thread-134702] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:10:23.807 [DEBUG] [Thread-134702] [transport.py] [_log()] Compression: none
2025-12-31T21:10:23.807 [DEBUG] [Thread-134702] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:10:23.871 [DEBUG] [Thread-134702] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:10:23.871 [DEBUG] [Thread-134702] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:10:23.872 [DEBUG] [Thread-134702] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T21:10:23.872 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T21:10:23.873 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:10:23.927 [DEBUG] [Thread-134702] [transport.py] [_log()] userauth is OK
2025-12-31T21:10:23.928 [DEBUG] [Thread-134702] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:10:23.928 [DEBUG] [Thread-134702] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:10:23.928 [DEBUG] [Thread-134702] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T21:10:23.928 [DEBUG] [Thread-134702] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:10:23.947 [INFO] [Thread-134702] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:10:23.948 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T21:10:23.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:10:24.754 [DEBUG] [Thread-134702] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:10:24.755 [DEBUG] [Thread-134702] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:10:24.803 [DEBUG] [Thread-134702] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:10:24.803 [DEBUG] [Thread-134702] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:10:24.812 [DEBUG] [Thread-134702] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:10:24.829 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:10:24.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T21:10:24.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T21:10:24.847 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:10:24.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:10:24.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:10:24.856 [DEBUG] [Thread-134702] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:10:36.735 [DEBUG] [Thread-134704 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:10:42.281 [DEBUG] [Thread-134705 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:10:51.776 [DEBUG] [Thread-134706 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:10:54.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T21:10:54.879 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T21:10:54.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T21:10:55.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 21, 10, 35), 7.23, 62.29, 0.0, 22.57, 17.31, 0, 0, 0, 2, 0, 0),)
2025-12-31T21:10:55.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 21:10:35
2025-12-31T21:10:55.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T21:10:55.881 [DEBUG] [Thread-134707] [transport.py] [_log()] starting thread (client mode): 0xb6bb9780
2025-12-31T21:10:55.881 [DEBUG] [Thread-134707] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:10:55.902 [DEBUG] [Thread-134707] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T21:10:55.902 [INFO] [Thread-134707] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T21:10:55.905 [DEBUG] [Thread-134707] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:10:55.905 [DEBUG] [Thread-134707] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T21:10:55.905 [DEBUG] [Thread-134707] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:10:55.905 [DEBUG] [Thread-134707] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:10:55.905 [DEBUG] [Thread-134707] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:10:55.905 [DEBUG] [Thread-134707] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:10:55.905 [DEBUG] [Thread-134707] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:10:55.905 [DEBUG] [Thread-134707] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:10:55.905 [DEBUG] [Thread-134707] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:10:55.905 [DEBUG] [Thread-134707] [transport.py] [_log()] client lang: <none>
2025-12-31T21:10:55.905 [DEBUG] [Thread-134707] [transport.py] [_log()] server lang: <none>
2025-12-31T21:10:55.905 [DEBUG] [Thread-134707] [transport.py] [_log()] kex follows: False
2025-12-31T21:10:55.905 [DEBUG] [Thread-134707] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:10:55.906 [DEBUG] [Thread-134707] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:10:55.906 [DEBUG] [Thread-134707] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:10:55.906 [DEBUG] [Thread-134707] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:10:55.906 [DEBUG] [Thread-134707] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:10:55.906 [DEBUG] [Thread-134707] [transport.py] [_log()] Compression: none
2025-12-31T21:10:55.906 [DEBUG] [Thread-134707] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:10:55.915 [DEBUG] [Thread-134707] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:10:55.915 [DEBUG] [Thread-134707] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:10:55.916 [DEBUG] [Thread-134707] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T21:10:55.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T21:10:55.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:10:55.918 [DEBUG] [Thread-134707] [transport.py] [_log()] userauth is OK
2025-12-31T21:10:55.918 [DEBUG] [Thread-134707] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:10:55.919 [DEBUG] [Thread-134707] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:10:55.919 [DEBUG] [Thread-134707] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T21:10:55.919 [DEBUG] [Thread-134707] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:10:55.939 [INFO] [Thread-134707] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:10:55.940 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:10:56.578 [DEBUG] [Thread-134707] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:10:56.578 [DEBUG] [Thread-134707] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:10:56.579 [DEBUG] [Thread-134707] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T21:10:56.619 [DEBUG] [Thread-134707] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:10:56.619 [DEBUG] [Thread-134707] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:10:56.623 [DEBUG] [Thread-134707] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:10:56.634 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:10:56.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T21:10:56.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T21:10:56.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T21:10:56.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:10:56.650 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T21:10:56.650 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:10:56.650 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:10:56.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T21:10:56.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.798749 -999.00  +17.50  10.82     65  +11.00 1 2 1 1 1     0    0 5.76 -30.97 ...SW 8.0 10.8 247.3 20.5 18.5 -15.0 18.4 -15.9 18.2 -15.7 18.6 -15.0
2025-12-31T21:10:56.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T21:10:56.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T21:10:56.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.798749
2025-12-31T21:10:56.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T21:10:56.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T21:10:56.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T21:10:56.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T21:10:56.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T21:10:56.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T21:10:35', tmtdew=7.23, humidity=62.29, cloud=0.0, wind=22.57, temperature=17.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T21:09:31', seeing=2.17, atlas_timestamp='2025-12-31T19:10:11.914', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T21:10:56.652 [DEBUG] [Thread-134707] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:10:56.736 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T21:10:56.748 [DEBUG] [Thread-134710] [transport.py] [_log()] starting thread (client mode): 0xb6bbde10
2025-12-31T21:10:56.749 [DEBUG] [Thread-134710] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:10:56.763 [DEBUG] [Thread-134710] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T21:10:56.764 [INFO] [Thread-134710] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T21:10:56.771 [DEBUG] [Thread-134710] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:10:56.771 [DEBUG] [Thread-134710] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T21:10:56.772 [DEBUG] [Thread-134710] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:10:56.772 [DEBUG] [Thread-134710] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:10:56.772 [DEBUG] [Thread-134710] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:10:56.772 [DEBUG] [Thread-134710] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:10:56.772 [DEBUG] [Thread-134710] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:10:56.772 [DEBUG] [Thread-134710] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:10:56.772 [DEBUG] [Thread-134710] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:10:56.772 [DEBUG] [Thread-134710] [transport.py] [_log()] client lang: <none>
2025-12-31T21:10:56.773 [DEBUG] [Thread-134710] [transport.py] [_log()] server lang: <none>
2025-12-31T21:10:56.773 [DEBUG] [Thread-134710] [transport.py] [_log()] kex follows: False
2025-12-31T21:10:56.773 [DEBUG] [Thread-134710] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:10:56.773 [DEBUG] [Thread-134710] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:10:56.773 [DEBUG] [Thread-134710] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:10:56.773 [DEBUG] [Thread-134710] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:10:56.773 [DEBUG] [Thread-134710] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:10:56.774 [DEBUG] [Thread-134710] [transport.py] [_log()] Compression: none
2025-12-31T21:10:56.774 [DEBUG] [Thread-134710] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:10:56.832 [DEBUG] [Thread-134710] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:10:56.833 [DEBUG] [Thread-134710] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:10:56.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T21:10:56.834 [DEBUG] [Thread-134710] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T21:10:56.834 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:10:56.888 [DEBUG] [Thread-134710] [transport.py] [_log()] userauth is OK
2025-12-31T21:10:56.888 [DEBUG] [Thread-134710] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:10:56.888 [DEBUG] [Thread-134710] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:10:56.889 [DEBUG] [Thread-134710] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T21:10:56.889 [DEBUG] [Thread-134710] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:10:56.908 [INFO] [Thread-134710] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:10:56.908 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T21:10:56.909 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:10:57.722 [DEBUG] [Thread-134710] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:10:57.722 [DEBUG] [Thread-134710] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:10:57.770 [DEBUG] [Thread-134710] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:10:57.771 [DEBUG] [Thread-134710] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:10:57.780 [DEBUG] [Thread-134710] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:10:57.789 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:10: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-12-31T21:10: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-12-31T21:10:57.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:10:57.808 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:10:57.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:10:57.817 [DEBUG] [Thread-134710] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:10:58.318 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:10:58.319 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:11:06.813 [DEBUG] [Thread-134712 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:11:21.865 [DEBUG] [Thread-134713 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:11:27.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T21:11:27.839 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T21:11:27.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T21:11:28.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 21, 11, 7), 7.22, 62.33, 0.0, 24.17, 17.33, 0, 0, 0, 2, 0, 0),)
2025-12-31T21:11:28.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 21:11:07
2025-12-31T21:11:28.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T21:11:28.834 [DEBUG] [Thread-134714] [transport.py] [_log()] starting thread (client mode): 0xb6bbab60
2025-12-31T21:11:28.834 [DEBUG] [Thread-134714] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:11:28.853 [DEBUG] [Thread-134714] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T21:11:28.854 [INFO] [Thread-134714] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T21:11:28.857 [DEBUG] [Thread-134714] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:11:28.857 [DEBUG] [Thread-134714] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T21:11:28.857 [DEBUG] [Thread-134714] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:11:28.857 [DEBUG] [Thread-134714] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:11:28.857 [DEBUG] [Thread-134714] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:11:28.857 [DEBUG] [Thread-134714] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:11:28.857 [DEBUG] [Thread-134714] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:11:28.857 [DEBUG] [Thread-134714] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:11:28.857 [DEBUG] [Thread-134714] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:11:28.857 [DEBUG] [Thread-134714] [transport.py] [_log()] client lang: <none>
2025-12-31T21:11:28.857 [DEBUG] [Thread-134714] [transport.py] [_log()] server lang: <none>
2025-12-31T21:11:28.857 [DEBUG] [Thread-134714] [transport.py] [_log()] kex follows: False
2025-12-31T21:11:28.857 [DEBUG] [Thread-134714] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:11:28.858 [DEBUG] [Thread-134714] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:11:28.858 [DEBUG] [Thread-134714] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:11:28.858 [DEBUG] [Thread-134714] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:11:28.858 [DEBUG] [Thread-134714] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:11:28.858 [DEBUG] [Thread-134714] [transport.py] [_log()] Compression: none
2025-12-31T21:11:28.858 [DEBUG] [Thread-134714] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:11:28.875 [DEBUG] [Thread-134714] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:11:28.876 [DEBUG] [Thread-134714] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:11:28.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T21:11:28.878 [DEBUG] [Thread-134714] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T21:11:28.879 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:11:28.880 [DEBUG] [Thread-134714] [transport.py] [_log()] userauth is OK
2025-12-31T21:11:28.880 [DEBUG] [Thread-134714] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:11:28.880 [DEBUG] [Thread-134714] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:11:28.880 [DEBUG] [Thread-134714] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T21:11:28.881 [DEBUG] [Thread-134714] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:11:28.903 [INFO] [Thread-134714] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:11:28.904 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:11:29.528 [DEBUG] [Thread-134714] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:11:29.528 [DEBUG] [Thread-134714] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:11:29.529 [DEBUG] [Thread-134714] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T21:11:29.569 [DEBUG] [Thread-134714] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:11:29.569 [DEBUG] [Thread-134714] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:11:29.572 [DEBUG] [Thread-134714] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:11:29.583 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:11:29.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T21:11:29.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T21:11:29.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T21:11:29.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:11:29.592 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T21:11:29.592 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:11:29.593 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:11:29.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T21:11:29.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.799096 -999.00  +17.50  11.18     65  +10.90 1 2 1 1 1     0    0 5.88 -28.24 Z...W 10.9 11.2 227.4 17.9 18.6 -15.5 18.4 -16.2 18.2 -15.8 18.5 -15.1
2025-12-31T21:11:29.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T21:11:29.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T21:11:29.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.799096
2025-12-31T21:11:29.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T21:11:29.595 [DEBUG] [Thread-134714] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:11:29.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T21:11:29.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T21:11:29.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T21:11:29.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T21:11:29.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T21:11:07', tmtdew=7.22, humidity=62.33, cloud=0.0, wind=24.17, temperature=17.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T21:09:31', seeing=2.17, atlas_timestamp='2025-12-31T19:10:41.894', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T21:11:29.692 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T21:11:29.703 [DEBUG] [Thread-134717] [transport.py] [_log()] starting thread (client mode): 0xb17847c0
2025-12-31T21:11:29.704 [DEBUG] [Thread-134717] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:11:29.717 [DEBUG] [Thread-134717] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T21:11:29.718 [INFO] [Thread-134717] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T21:11:29.728 [DEBUG] [Thread-134717] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:11:29.728 [DEBUG] [Thread-134717] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T21:11:29.728 [DEBUG] [Thread-134717] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:11:29.728 [DEBUG] [Thread-134717] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:11:29.728 [DEBUG] [Thread-134717] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:11:29.728 [DEBUG] [Thread-134717] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:11:29.728 [DEBUG] [Thread-134717] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:11:29.728 [DEBUG] [Thread-134717] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:11:29.728 [DEBUG] [Thread-134717] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:11:29.728 [DEBUG] [Thread-134717] [transport.py] [_log()] client lang: <none>
2025-12-31T21:11:29.728 [DEBUG] [Thread-134717] [transport.py] [_log()] server lang: <none>
2025-12-31T21:11:29.728 [DEBUG] [Thread-134717] [transport.py] [_log()] kex follows: False
2025-12-31T21:11:29.728 [DEBUG] [Thread-134717] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:11:29.728 [DEBUG] [Thread-134717] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:11:29.728 [DEBUG] [Thread-134717] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:11:29.728 [DEBUG] [Thread-134717] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:11:29.729 [DEBUG] [Thread-134717] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:11:29.729 [DEBUG] [Thread-134717] [transport.py] [_log()] Compression: none
2025-12-31T21:11:29.729 [DEBUG] [Thread-134717] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:11:29.792 [DEBUG] [Thread-134717] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:11:29.793 [DEBUG] [Thread-134717] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:11:29.793 [DEBUG] [Thread-134717] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T21:11:29.794 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T21:11:29.794 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:11:29.851 [DEBUG] [Thread-134717] [transport.py] [_log()] userauth is OK
2025-12-31T21:11:29.851 [DEBUG] [Thread-134717] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:11:29.852 [DEBUG] [Thread-134717] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:11:29.852 [DEBUG] [Thread-134717] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T21:11:29.852 [DEBUG] [Thread-134717] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:11:29.870 [INFO] [Thread-134717] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:11:29.880 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T21:11:29.881 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:11:30.690 [DEBUG] [Thread-134717] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:11:30.690 [DEBUG] [Thread-134717] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:11:30.738 [DEBUG] [Thread-134717] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:11:30.738 [DEBUG] [Thread-134717] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:11:30.748 [DEBUG] [Thread-134717] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:11:30.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:11:30.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T21:11:30.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T21:11:30.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:11:30.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:11:30.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:11:30.784 [DEBUG] [Thread-134717] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:11:36.899 [DEBUG] [Thread-134719 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:11:42.373 [DEBUG] [Thread-134720 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:11:51.950 [DEBUG] [Thread-134721 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:11:58.520 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:11:58.521 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:12:00.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T21:12:00.807 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T21:12:00.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T21:12:01.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 21, 11, 39), 7.15, 62.89, 0.0, 19.71, 17.23, 0, 0, 0, 2, 0, 0),)
2025-12-31T21:12:01.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 21:11:39
2025-12-31T21:12:01.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T21:12:01.872 [DEBUG] [Thread-134722] [transport.py] [_log()] starting thread (client mode): 0xb6bb8c40
2025-12-31T21:12:01.872 [DEBUG] [Thread-134722] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:12:01.883 [DEBUG] [Thread-134722] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T21:12:01.883 [INFO] [Thread-134722] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T21:12:01.886 [DEBUG] [Thread-134722] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:12:01.886 [DEBUG] [Thread-134722] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T21:12:01.886 [DEBUG] [Thread-134722] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:12:01.886 [DEBUG] [Thread-134722] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:12:01.886 [DEBUG] [Thread-134722] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:12:01.886 [DEBUG] [Thread-134722] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:12:01.886 [DEBUG] [Thread-134722] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:12:01.886 [DEBUG] [Thread-134722] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:12:01.886 [DEBUG] [Thread-134722] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:12:01.886 [DEBUG] [Thread-134722] [transport.py] [_log()] client lang: <none>
2025-12-31T21:12:01.886 [DEBUG] [Thread-134722] [transport.py] [_log()] server lang: <none>
2025-12-31T21:12:01.886 [DEBUG] [Thread-134722] [transport.py] [_log()] kex follows: False
2025-12-31T21:12:01.886 [DEBUG] [Thread-134722] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:12:01.886 [DEBUG] [Thread-134722] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:12:01.886 [DEBUG] [Thread-134722] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:12:01.886 [DEBUG] [Thread-134722] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:12:01.886 [DEBUG] [Thread-134722] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:12:01.886 [DEBUG] [Thread-134722] [transport.py] [_log()] Compression: none
2025-12-31T21:12:01.886 [DEBUG] [Thread-134722] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:12:01.901 [DEBUG] [Thread-134722] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:12:01.901 [DEBUG] [Thread-134722] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:12:01.901 [DEBUG] [Thread-134722] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T21:12:01.902 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T21:12:01.902 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:12:01.902 [DEBUG] [Thread-134722] [transport.py] [_log()] userauth is OK
2025-12-31T21:12:01.902 [DEBUG] [Thread-134722] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:12:01.902 [DEBUG] [Thread-134722] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:12:01.902 [DEBUG] [Thread-134722] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T21:12:01.902 [DEBUG] [Thread-134722] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:12:01.921 [INFO] [Thread-134722] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:12:01.921 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:12:02.550 [DEBUG] [Thread-134722] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:12:02.550 [DEBUG] [Thread-134722] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:12:02.550 [DEBUG] [Thread-134722] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T21:12:02.591 [DEBUG] [Thread-134722] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:12:02.591 [DEBUG] [Thread-134722] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:12:02.593 [DEBUG] [Thread-134722] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:12:02.606 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:12:02.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T21:12:02.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T21:12:02.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T21:12:02.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:12:02.611 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T21:12:02.611 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:12:02.611 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:12:02.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T21:12:02.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.799443 -999.00  +17.60  15.79     65  +11.00 1 2 1 1 1     0    0 5.78 -26.62 Z...W 9.5 15.8 186.0 18.8 18.6 -15.8 18.4 -16.7 18.2 -15.9 18.5 -15.2
2025-12-31T21:12:02.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T21:12:02.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T21:12:02.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.799443
2025-12-31T21:12:02.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T21:12:02.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T21:12:02.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T21:12:02.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T21:12:02.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T21:12:02.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T21:11:39', tmtdew=7.15, humidity=62.89, cloud=0.0, wind=19.71, temperature=17.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T21:11:39', seeing=1.96, atlas_timestamp='2025-12-31T19:11:11.875', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T21:12:02.612 [DEBUG] [Thread-134722] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:12:02.686 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T21:12:02.698 [DEBUG] [Thread-134725] [transport.py] [_log()] starting thread (client mode): 0xb1785d80
2025-12-31T21:12:02.699 [DEBUG] [Thread-134725] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:12:02.713 [DEBUG] [Thread-134725] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T21:12:02.713 [INFO] [Thread-134725] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T21:12:02.720 [DEBUG] [Thread-134725] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:12:02.720 [DEBUG] [Thread-134725] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T21:12:02.720 [DEBUG] [Thread-134725] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:12:02.720 [DEBUG] [Thread-134725] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:12:02.720 [DEBUG] [Thread-134725] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:12:02.720 [DEBUG] [Thread-134725] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:12:02.720 [DEBUG] [Thread-134725] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:12:02.720 [DEBUG] [Thread-134725] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:12:02.720 [DEBUG] [Thread-134725] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:12:02.721 [DEBUG] [Thread-134725] [transport.py] [_log()] client lang: <none>
2025-12-31T21:12:02.721 [DEBUG] [Thread-134725] [transport.py] [_log()] server lang: <none>
2025-12-31T21:12:02.721 [DEBUG] [Thread-134725] [transport.py] [_log()] kex follows: False
2025-12-31T21:12:02.721 [DEBUG] [Thread-134725] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:12:02.721 [DEBUG] [Thread-134725] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:12:02.721 [DEBUG] [Thread-134725] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:12:02.721 [DEBUG] [Thread-134725] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:12:02.721 [DEBUG] [Thread-134725] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:12:02.721 [DEBUG] [Thread-134725] [transport.py] [_log()] Compression: none
2025-12-31T21:12:02.721 [DEBUG] [Thread-134725] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:12:02.777 [DEBUG] [Thread-134725] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:12:02.777 [DEBUG] [Thread-134725] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:12:02.777 [DEBUG] [Thread-134725] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T21:12:02.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T21:12:02.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:12:02.835 [DEBUG] [Thread-134725] [transport.py] [_log()] userauth is OK
2025-12-31T21:12:02.835 [DEBUG] [Thread-134725] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:12:02.835 [DEBUG] [Thread-134725] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:12:02.835 [DEBUG] [Thread-134725] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T21:12:02.835 [DEBUG] [Thread-134725] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:12:02.853 [INFO] [Thread-134725] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:12:02.853 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T21:12:02.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:12:03.634 [DEBUG] [Thread-134725] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:12:03.634 [DEBUG] [Thread-134725] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:12:03.681 [DEBUG] [Thread-134725] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:12:03.681 [DEBUG] [Thread-134725] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:12:03.690 [DEBUG] [Thread-134725] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:12:03.698 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:12:03.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T21:12:03.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T21:12:03.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:12:03.714 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:12:03.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:12:03.722 [DEBUG] [Thread-134725] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:12:06.979 [DEBUG] [Thread-134727 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:12:22.021 [DEBUG] [Thread-134728 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:12:33.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T21:12:33.745 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T21:12:33.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T21:12:34.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 21, 12, 11), 7.13, 62.98, 0.0, 18.25, 17.23, 0, 0, 0, 2, 0, 0),)
2025-12-31T21:12:34.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 21:12:11
2025-12-31T21:12:34.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T21:12:34.752 [DEBUG] [Thread-134729] [transport.py] [_log()] starting thread (client mode): 0xb17652a0
2025-12-31T21:12:34.753 [DEBUG] [Thread-134729] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:12:34.773 [DEBUG] [Thread-134729] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T21:12:34.773 [INFO] [Thread-134729] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T21:12:34.776 [DEBUG] [Thread-134729] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:12:34.776 [DEBUG] [Thread-134729] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T21:12:34.776 [DEBUG] [Thread-134729] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:12:34.776 [DEBUG] [Thread-134729] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:12:34.776 [DEBUG] [Thread-134729] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:12:34.776 [DEBUG] [Thread-134729] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:12:34.777 [DEBUG] [Thread-134729] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:12:34.777 [DEBUG] [Thread-134729] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:12:34.777 [DEBUG] [Thread-134729] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:12:34.777 [DEBUG] [Thread-134729] [transport.py] [_log()] client lang: <none>
2025-12-31T21:12:34.777 [DEBUG] [Thread-134729] [transport.py] [_log()] server lang: <none>
2025-12-31T21:12:34.777 [DEBUG] [Thread-134729] [transport.py] [_log()] kex follows: False
2025-12-31T21:12:34.777 [DEBUG] [Thread-134729] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:12:34.777 [DEBUG] [Thread-134729] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:12:34.777 [DEBUG] [Thread-134729] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:12:34.777 [DEBUG] [Thread-134729] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:12:34.777 [DEBUG] [Thread-134729] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:12:34.777 [DEBUG] [Thread-134729] [transport.py] [_log()] Compression: none
2025-12-31T21:12:34.777 [DEBUG] [Thread-134729] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:12:34.795 [DEBUG] [Thread-134729] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:12:34.796 [DEBUG] [Thread-134729] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:12:34.796 [DEBUG] [Thread-134729] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T21:12:34.796 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T21:12:34.797 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:12:34.798 [DEBUG] [Thread-134729] [transport.py] [_log()] userauth is OK
2025-12-31T21:12:34.798 [DEBUG] [Thread-134729] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:12:34.798 [DEBUG] [Thread-134729] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:12:34.798 [DEBUG] [Thread-134729] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T21:12:34.798 [DEBUG] [Thread-134729] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:12:34.817 [INFO] [Thread-134729] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:12:34.818 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:12:35.454 [DEBUG] [Thread-134729] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:12:35.455 [DEBUG] [Thread-134729] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:12:35.455 [DEBUG] [Thread-134729] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T21:12:35.496 [DEBUG] [Thread-134729] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:12:35.496 [DEBUG] [Thread-134729] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:12:35.499 [DEBUG] [Thread-134729] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:12:35.510 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:12:35.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T21:12:35.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T21:12:35.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T21:12:35.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:12:35.516 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T21:12:35.516 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:12:35.516 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:12:35.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T21:12:35.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.799791 -999.00  +17.50  20.85     65  +10.90 1 2 1 1 1     0    0 5.91 -25.20 Z...W 18.5 20.9 195.6 22.9 18.6 -16.1 18.4 -17.2 18.2 -16.0 18.5 -15.5
2025-12-31T21:12:35.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T21:12:35.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T21:12:35.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.799791
2025-12-31T21:12:35.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T21:12:35.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T21:12:35.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T21:12:35.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T21:12:35.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T21:12:35.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T21:12:11', tmtdew=7.13, humidity=62.98, cloud=0.0, wind=18.25, temperature=17.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T21:12:11', seeing=2.06, atlas_timestamp='2025-12-31T19:11:41.942', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T21:12:35.518 [DEBUG] [Thread-134729] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:12:35.606 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T21:12:35.617 [DEBUG] [Thread-134732] [transport.py] [_log()] starting thread (client mode): 0xb6bbed40
2025-12-31T21:12:35.617 [DEBUG] [Thread-134732] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:12:35.635 [DEBUG] [Thread-134732] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T21:12:35.635 [INFO] [Thread-134732] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T21:12:35.642 [DEBUG] [Thread-134732] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:12:35.643 [DEBUG] [Thread-134732] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T21:12:35.643 [DEBUG] [Thread-134732] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:12:35.643 [DEBUG] [Thread-134732] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:12:35.643 [DEBUG] [Thread-134732] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:12:35.643 [DEBUG] [Thread-134732] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:12:35.643 [DEBUG] [Thread-134732] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:12:35.643 [DEBUG] [Thread-134732] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:12:35.643 [DEBUG] [Thread-134732] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:12:35.643 [DEBUG] [Thread-134732] [transport.py] [_log()] client lang: <none>
2025-12-31T21:12:35.643 [DEBUG] [Thread-134732] [transport.py] [_log()] server lang: <none>
2025-12-31T21:12:35.643 [DEBUG] [Thread-134732] [transport.py] [_log()] kex follows: False
2025-12-31T21:12:35.643 [DEBUG] [Thread-134732] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:12:35.644 [DEBUG] [Thread-134732] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:12:35.644 [DEBUG] [Thread-134732] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:12:35.644 [DEBUG] [Thread-134732] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:12:35.644 [DEBUG] [Thread-134732] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:12:35.644 [DEBUG] [Thread-134732] [transport.py] [_log()] Compression: none
2025-12-31T21:12:35.644 [DEBUG] [Thread-134732] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:12:35.701 [DEBUG] [Thread-134732] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:12:35.702 [DEBUG] [Thread-134732] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:12:35.702 [DEBUG] [Thread-134732] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T21:12:35.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T21:12:35.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:12:35.758 [DEBUG] [Thread-134732] [transport.py] [_log()] userauth is OK
2025-12-31T21:12:35.759 [DEBUG] [Thread-134732] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:12:35.759 [DEBUG] [Thread-134732] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:12:35.759 [DEBUG] [Thread-134732] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T21:12:35.759 [DEBUG] [Thread-134732] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:12:35.779 [INFO] [Thread-134732] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:12:35.779 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T21:12:35.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:12:36.587 [DEBUG] [Thread-134732] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:12:36.588 [DEBUG] [Thread-134732] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:12:36.636 [DEBUG] [Thread-134732] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:12:36.636 [DEBUG] [Thread-134732] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:12:36.646 [DEBUG] [Thread-134732] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:12:36.656 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:12:36.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T21:12:36.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T21:12:36.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:12:36.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:12:36.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:12:36.684 [DEBUG] [Thread-134732] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:12:37.056 [DEBUG] [Thread-134734 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:12:42.451 [DEBUG] [Thread-134735 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:12:52.117 [DEBUG] [Thread-134736 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:12:58.729 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:12:58.730 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:13:06.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T21:13:06.707 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T21:13:06.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T21:13:07.152 [DEBUG] [Thread-134737 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:13:07.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 21, 12, 43), 7.19, 62.44, 0.0, 21.61, 17.26, 0, 0, 0, 2, 0, 0),)
2025-12-31T21:13:07.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 21:12:43
2025-12-31T21:13:07.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T21:13:07.704 [DEBUG] [Thread-134738] [transport.py] [_log()] starting thread (client mode): 0xb1759a20
2025-12-31T21:13:07.705 [DEBUG] [Thread-134738] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:13:07.726 [DEBUG] [Thread-134738] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T21:13:07.726 [INFO] [Thread-134738] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T21:13:07.729 [DEBUG] [Thread-134738] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:13:07.729 [DEBUG] [Thread-134738] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T21:13:07.729 [DEBUG] [Thread-134738] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:13:07.729 [DEBUG] [Thread-134738] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:13:07.729 [DEBUG] [Thread-134738] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:13:07.729 [DEBUG] [Thread-134738] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:13:07.730 [DEBUG] [Thread-134738] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:13:07.730 [DEBUG] [Thread-134738] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:13:07.730 [DEBUG] [Thread-134738] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:13:07.730 [DEBUG] [Thread-134738] [transport.py] [_log()] client lang: <none>
2025-12-31T21:13:07.730 [DEBUG] [Thread-134738] [transport.py] [_log()] server lang: <none>
2025-12-31T21:13:07.730 [DEBUG] [Thread-134738] [transport.py] [_log()] kex follows: False
2025-12-31T21:13:07.730 [DEBUG] [Thread-134738] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:13:07.730 [DEBUG] [Thread-134738] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:13:07.730 [DEBUG] [Thread-134738] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:13:07.730 [DEBUG] [Thread-134738] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:13:07.730 [DEBUG] [Thread-134738] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:13:07.730 [DEBUG] [Thread-134738] [transport.py] [_log()] Compression: none
2025-12-31T21:13:07.730 [DEBUG] [Thread-134738] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:13:07.747 [DEBUG] [Thread-134738] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:13:07.747 [DEBUG] [Thread-134738] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:13:07.748 [DEBUG] [Thread-134738] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T21:13:07.748 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T21:13:07.748 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:13:07.749 [DEBUG] [Thread-134738] [transport.py] [_log()] userauth is OK
2025-12-31T21:13:07.750 [DEBUG] [Thread-134738] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:13:07.750 [DEBUG] [Thread-134738] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:13:07.750 [DEBUG] [Thread-134738] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T21:13:07.750 [DEBUG] [Thread-134738] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:13:07.785 [INFO] [Thread-134738] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:13:07.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:13:08.581 [DEBUG] [Thread-134738] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:13:08.590 [DEBUG] [Thread-134738] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:13:08.591 [DEBUG] [Thread-134738] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T21:13:08.622 [DEBUG] [Thread-134738] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:13:08.622 [DEBUG] [Thread-134738] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:13:08.626 [DEBUG] [Thread-134738] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:13:08.638 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:13:08.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T21:13:08.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T21:13:08.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T21:13:08.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:13:08.651 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T21:13:08.651 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:13:08.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:13:08.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T21:13:08.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.800138 -999.00  +17.40  13.77     66  +11.00 1 2 1 1 1     0    0 5.90 -24.82 Z...W 14.9 13.8 195.8 22.6 18.5 -16.0 18.3 -17.7 18.2 -16.1 18.5 -15.6
2025-12-31T21:13:08.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T21:13:08.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T21:13:08.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.800138
2025-12-31T21:13:08.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T21:13:08.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T21:13:08.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T21:13:08.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T21:13:08.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T21:13:08.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T21:12:43', tmtdew=7.19, humidity=62.44, cloud=0.0, wind=21.61, temperature=17.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T21:12:43', seeing=2.06, atlas_timestamp='2025-12-31T19:12:11.923', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T21:13:08.654 [DEBUG] [Thread-134738] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:13:08.745 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T21:13:08.757 [DEBUG] [Thread-134741] [transport.py] [_log()] starting thread (client mode): 0xb6bb8af0
2025-12-31T21:13:08.757 [DEBUG] [Thread-134741] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:13:08.772 [DEBUG] [Thread-134741] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T21:13:08.772 [INFO] [Thread-134741] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T21:13:08.780 [DEBUG] [Thread-134741] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:13:08.780 [DEBUG] [Thread-134741] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T21:13:08.780 [DEBUG] [Thread-134741] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:13:08.780 [DEBUG] [Thread-134741] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:13:08.780 [DEBUG] [Thread-134741] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:13:08.780 [DEBUG] [Thread-134741] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:13:08.780 [DEBUG] [Thread-134741] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:13:08.780 [DEBUG] [Thread-134741] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:13:08.780 [DEBUG] [Thread-134741] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:13:08.780 [DEBUG] [Thread-134741] [transport.py] [_log()] client lang: <none>
2025-12-31T21:13:08.780 [DEBUG] [Thread-134741] [transport.py] [_log()] server lang: <none>
2025-12-31T21:13:08.780 [DEBUG] [Thread-134741] [transport.py] [_log()] kex follows: False
2025-12-31T21:13:08.780 [DEBUG] [Thread-134741] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:13:08.780 [DEBUG] [Thread-134741] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:13:08.781 [DEBUG] [Thread-134741] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:13:08.781 [DEBUG] [Thread-134741] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:13:08.781 [DEBUG] [Thread-134741] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:13:08.781 [DEBUG] [Thread-134741] [transport.py] [_log()] Compression: none
2025-12-31T21:13:08.781 [DEBUG] [Thread-134741] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:13:08.838 [DEBUG] [Thread-134741] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:13:08.839 [DEBUG] [Thread-134741] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:13:08.839 [DEBUG] [Thread-134741] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T21:13:08.840 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T21:13:08.840 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:13:08.894 [DEBUG] [Thread-134741] [transport.py] [_log()] userauth is OK
2025-12-31T21:13:08.895 [DEBUG] [Thread-134741] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:13:08.895 [DEBUG] [Thread-134741] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:13:08.895 [DEBUG] [Thread-134741] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T21:13:08.895 [DEBUG] [Thread-134741] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:13:08.914 [INFO] [Thread-134741] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:13:08.915 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T21:13:08.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:13:09.725 [DEBUG] [Thread-134741] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:13:09.726 [DEBUG] [Thread-134741] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:13:09.774 [DEBUG] [Thread-134741] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:13:09.774 [DEBUG] [Thread-134741] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:13:09.783 [DEBUG] [Thread-134741] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:13:09.793 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:13:09.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T21:13:09.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T21:13:09.811 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:13:09.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:13:09.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:13:09.820 [DEBUG] [Thread-134741] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:13:22.190 [DEBUG] [Thread-134743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:13:37.230 [DEBUG] [Thread-134744 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:13:39.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T21:13:39.830 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T21:13:39.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T21:13:40.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 21, 13, 15), 7.16, 62.53, 0.0, 21.6, 17.19, 0, 0, 0, 2, 0, 0),)
2025-12-31T21:13:40.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 21:13:15
2025-12-31T21:13:40.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T21:13:40.828 [DEBUG] [Thread-134745] [transport.py] [_log()] starting thread (client mode): 0xb1775750
2025-12-31T21:13:40.828 [DEBUG] [Thread-134745] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:13:40.847 [DEBUG] [Thread-134745] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T21:13:40.847 [INFO] [Thread-134745] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T21:13:40.850 [DEBUG] [Thread-134745] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:13:40.851 [DEBUG] [Thread-134745] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T21:13:40.851 [DEBUG] [Thread-134745] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:13:40.851 [DEBUG] [Thread-134745] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:13:40.851 [DEBUG] [Thread-134745] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:13:40.851 [DEBUG] [Thread-134745] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:13:40.851 [DEBUG] [Thread-134745] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:13:40.851 [DEBUG] [Thread-134745] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:13:40.851 [DEBUG] [Thread-134745] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:13:40.851 [DEBUG] [Thread-134745] [transport.py] [_log()] client lang: <none>
2025-12-31T21:13:40.851 [DEBUG] [Thread-134745] [transport.py] [_log()] server lang: <none>
2025-12-31T21:13:40.851 [DEBUG] [Thread-134745] [transport.py] [_log()] kex follows: False
2025-12-31T21:13:40.851 [DEBUG] [Thread-134745] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:13:40.851 [DEBUG] [Thread-134745] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:13:40.851 [DEBUG] [Thread-134745] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:13:40.851 [DEBUG] [Thread-134745] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:13:40.851 [DEBUG] [Thread-134745] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:13:40.851 [DEBUG] [Thread-134745] [transport.py] [_log()] Compression: none
2025-12-31T21:13:40.851 [DEBUG] [Thread-134745] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:13:40.869 [DEBUG] [Thread-134745] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:13:40.869 [DEBUG] [Thread-134745] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:13:40.870 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T21:13:40.870 [DEBUG] [Thread-134745] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T21:13:40.871 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:13:40.913 [DEBUG] [Thread-134745] [transport.py] [_log()] userauth is OK
2025-12-31T21:13:40.913 [DEBUG] [Thread-134745] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:13:40.913 [DEBUG] [Thread-134745] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:13:40.913 [DEBUG] [Thread-134745] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T21:13:40.914 [DEBUG] [Thread-134745] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:13:40.948 [INFO] [Thread-134745] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:13:40.949 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:13:41.595 [DEBUG] [Thread-134745] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:13:41.595 [DEBUG] [Thread-134745] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:13:41.596 [DEBUG] [Thread-134745] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T21:13:41.636 [DEBUG] [Thread-134745] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:13:41.637 [DEBUG] [Thread-134745] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:13:41.640 [DEBUG] [Thread-134745] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:13:41.654 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:13:41.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T21:13:41.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T21:13:41.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T21:13:41.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:13:41.667 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T21:13:41.667 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:13:41.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:13:41.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T21:13:41.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.800832 -999.00  +17.40  10.59     66  +10.90 1 2 1 1 1     0    0 5.97 -20.80 Z..SW 8.7 10.6 207.9 19.7 18.5 -16.1 18.4 -17.3 18.2 -16.1 18.5 -15.6
2025-12-31T21:13:41.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T21:13:41.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T21:13:41.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.800832
2025-12-31T21:13:41.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T21:13:41.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T21:13:41.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T21:13:41.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T21:13:41.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T21:13:41.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T21:13:15', tmtdew=7.16, humidity=62.53, cloud=0.0, wind=21.6, temperature=17.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T21:13:15', seeing=1.51, atlas_timestamp='2025-12-31T19:13:11.885', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T21:13:41.670 [DEBUG] [Thread-134745] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:13:41.752 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T21:13:41.764 [DEBUG] [Thread-134748] [transport.py] [_log()] starting thread (client mode): 0xb17777c0
2025-12-31T21:13:41.764 [DEBUG] [Thread-134748] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:13:41.779 [DEBUG] [Thread-134748] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T21:13:41.779 [INFO] [Thread-134748] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T21:13:41.786 [DEBUG] [Thread-134748] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:13:41.787 [DEBUG] [Thread-134748] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T21:13:41.787 [DEBUG] [Thread-134748] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:13:41.787 [DEBUG] [Thread-134748] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:13:41.787 [DEBUG] [Thread-134748] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:13:41.787 [DEBUG] [Thread-134748] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:13:41.787 [DEBUG] [Thread-134748] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:13:41.787 [DEBUG] [Thread-134748] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:13:41.787 [DEBUG] [Thread-134748] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:13:41.787 [DEBUG] [Thread-134748] [transport.py] [_log()] client lang: <none>
2025-12-31T21:13:41.787 [DEBUG] [Thread-134748] [transport.py] [_log()] server lang: <none>
2025-12-31T21:13:41.787 [DEBUG] [Thread-134748] [transport.py] [_log()] kex follows: False
2025-12-31T21:13:41.787 [DEBUG] [Thread-134748] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:13:41.787 [DEBUG] [Thread-134748] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:13:41.787 [DEBUG] [Thread-134748] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:13:41.787 [DEBUG] [Thread-134748] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:13:41.787 [DEBUG] [Thread-134748] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:13:41.787 [DEBUG] [Thread-134748] [transport.py] [_log()] Compression: none
2025-12-31T21:13:41.787 [DEBUG] [Thread-134748] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:13:41.845 [DEBUG] [Thread-134748] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:13:41.846 [DEBUG] [Thread-134748] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:13:41.847 [DEBUG] [Thread-134748] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T21:13:41.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T21:13:41.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:13:41.902 [DEBUG] [Thread-134748] [transport.py] [_log()] userauth is OK
2025-12-31T21:13:41.902 [DEBUG] [Thread-134748] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:13:41.902 [DEBUG] [Thread-134748] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:13:41.903 [DEBUG] [Thread-134748] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T21:13:41.903 [DEBUG] [Thread-134748] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:13:41.921 [INFO] [Thread-134748] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:13:41.921 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T21:13:41.922 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:13:42.522 [DEBUG] [Thread-134750 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:13:42.696 [DEBUG] [Thread-134748] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:13:42.697 [DEBUG] [Thread-134748] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:13:42.745 [DEBUG] [Thread-134748] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:13:42.745 [DEBUG] [Thread-134748] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:13:42.755 [DEBUG] [Thread-134748] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:13:42.764 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:13:42.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T21:13:42.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T21:13:42.782 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:13:42.783 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:13:42.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:13:42.791 [DEBUG] [Thread-134748] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:13:52.267 [DEBUG] [Thread-134751 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:13:58.935 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:13:58.936 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:14:07.315 [DEBUG] [Thread-134752 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:14:12.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T21:14:12.814 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T21:14:12.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T21:14:13.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 21, 13, 47), 7.09, 63.13, 0.0, 18.33, 17.18, 0, 0, 0, 2, 0, 0),)
2025-12-31T21:14:13.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 21:13:47
2025-12-31T21:14:13.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T21:14:13.811 [DEBUG] [Thread-134753] [transport.py] [_log()] starting thread (client mode): 0xb1775e70
2025-12-31T21:14:13.811 [DEBUG] [Thread-134753] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:14:13.831 [DEBUG] [Thread-134753] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T21:14:13.831 [INFO] [Thread-134753] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T21:14:13.835 [DEBUG] [Thread-134753] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:14:13.835 [DEBUG] [Thread-134753] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T21:14:13.835 [DEBUG] [Thread-134753] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:14:13.835 [DEBUG] [Thread-134753] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:14:13.835 [DEBUG] [Thread-134753] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:14:13.835 [DEBUG] [Thread-134753] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:14:13.835 [DEBUG] [Thread-134753] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:14:13.835 [DEBUG] [Thread-134753] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:14:13.835 [DEBUG] [Thread-134753] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:14:13.835 [DEBUG] [Thread-134753] [transport.py] [_log()] client lang: <none>
2025-12-31T21:14:13.835 [DEBUG] [Thread-134753] [transport.py] [_log()] server lang: <none>
2025-12-31T21:14:13.836 [DEBUG] [Thread-134753] [transport.py] [_log()] kex follows: False
2025-12-31T21:14:13.836 [DEBUG] [Thread-134753] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:14:13.836 [DEBUG] [Thread-134753] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:14:13.836 [DEBUG] [Thread-134753] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:14:13.836 [DEBUG] [Thread-134753] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:14:13.836 [DEBUG] [Thread-134753] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:14:13.836 [DEBUG] [Thread-134753] [transport.py] [_log()] Compression: none
2025-12-31T21:14:13.836 [DEBUG] [Thread-134753] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:14:13.854 [DEBUG] [Thread-134753] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:14:13.855 [DEBUG] [Thread-134753] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:14:13.856 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T21:14:13.857 [DEBUG] [Thread-134753] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T21:14:13.858 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:14:13.859 [DEBUG] [Thread-134753] [transport.py] [_log()] userauth is OK
2025-12-31T21:14:13.859 [DEBUG] [Thread-134753] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:14:13.859 [DEBUG] [Thread-134753] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:14:13.859 [DEBUG] [Thread-134753] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T21:14:13.860 [DEBUG] [Thread-134753] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:14:13.882 [INFO] [Thread-134753] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:14:13.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:14:14.679 [DEBUG] [Thread-134753] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:14:14.679 [DEBUG] [Thread-134753] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:14:14.680 [DEBUG] [Thread-134753] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T21:14:14.720 [DEBUG] [Thread-134753] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:14:14.720 [DEBUG] [Thread-134753] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:14:14.724 [DEBUG] [Thread-134753] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:14:14.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:14:14.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T21:14:14.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T21:14:14.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T21:14:14.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:14:14.747 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T21:14:14.748 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:14:14.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:14:14.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T21:14:14.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.801180 -999.00  +17.40   9.12     66  +11.00 1 2 1 1 1     0    0 5.97 -18.58 Z..SW 8.6 9.1 235.9 18.3 18.5 -16.2 18.4 -17.3 18.1 -16.1 18.5 -15.5
2025-12-31T21:14:14.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T21:14:14.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T21:14:14.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.801180
2025-12-31T21:14:14.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T21:14:14.749 [DEBUG] [Thread-134753] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:14:14.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T21:14:14.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T21:14:14.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T21:14:14.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T21:14:14.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T21:13:47', tmtdew=7.09, humidity=63.13, cloud=0.0, wind=18.33, temperature=17.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T21:13:48', seeing=1.7, atlas_timestamp='2025-12-31T19:13:41.952', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T02:43:00')
2025-12-31T21:14:14.834 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T21:14:14.846 [DEBUG] [Thread-134756] [transport.py] [_log()] starting thread (client mode): 0xb6bbd720
2025-12-31T21:14:14.846 [DEBUG] [Thread-134756] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:14:14.861 [DEBUG] [Thread-134756] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T21:14:14.861 [INFO] [Thread-134756] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T21:14:14.868 [DEBUG] [Thread-134756] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:14:14.869 [DEBUG] [Thread-134756] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T21:14:14.869 [DEBUG] [Thread-134756] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:14:14.869 [DEBUG] [Thread-134756] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:14:14.869 [DEBUG] [Thread-134756] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:14:14.869 [DEBUG] [Thread-134756] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:14:14.869 [DEBUG] [Thread-134756] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:14:14.869 [DEBUG] [Thread-134756] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:14:14.869 [DEBUG] [Thread-134756] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:14:14.869 [DEBUG] [Thread-134756] [transport.py] [_log()] client lang: <none>
2025-12-31T21:14:14.869 [DEBUG] [Thread-134756] [transport.py] [_log()] server lang: <none>
2025-12-31T21:14:14.869 [DEBUG] [Thread-134756] [transport.py] [_log()] kex follows: False
2025-12-31T21:14:14.869 [DEBUG] [Thread-134756] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:14:14.869 [DEBUG] [Thread-134756] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:14:14.869 [DEBUG] [Thread-134756] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:14:14.869 [DEBUG] [Thread-134756] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:14:14.869 [DEBUG] [Thread-134756] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:14:14.870 [DEBUG] [Thread-134756] [transport.py] [_log()] Compression: none
2025-12-31T21:14:14.870 [DEBUG] [Thread-134756] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:14:14.925 [DEBUG] [Thread-134756] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:14:14.926 [DEBUG] [Thread-134756] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:14:14.927 [DEBUG] [Thread-134756] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T21:14:14.927 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T21:14:14.928 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:14:14.985 [DEBUG] [Thread-134756] [transport.py] [_log()] userauth is OK
2025-12-31T21:14:14.985 [DEBUG] [Thread-134756] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:14:14.985 [DEBUG] [Thread-134756] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:14:14.985 [DEBUG] [Thread-134756] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T21:14:14.985 [DEBUG] [Thread-134756] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:14:15.004 [INFO] [Thread-134756] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:14:15.004 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T21:14:15.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:14:15.837 [DEBUG] [Thread-134756] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:14:15.837 [DEBUG] [Thread-134756] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:14:15.885 [DEBUG] [Thread-134756] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:14:15.885 [DEBUG] [Thread-134756] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:14:15.894 [DEBUG] [Thread-134756] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:14:15.902 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:14:15.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')
2025-12-31T21:14:15.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T21:14:15.919 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:14:15.920 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:14:15.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:14:15.928 [DEBUG] [Thread-134756] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:14:22.363 [DEBUG] [Thread-134758 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:14:37.427 [DEBUG] [Thread-134759 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:14:42.582 [DEBUG] [Thread-134760 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:14:45.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T21:14:45.925 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T21:14:45.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T21:14:46.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 21, 14, 20), 7.1, 63.08, 0.0, 17.8, 17.16, 0, 0, 0, 2, 0, 0),)
2025-12-31T21:14:46.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 21:14:20
2025-12-31T21:14:46.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T21:14:46.916 [DEBUG] [Thread-134761] [transport.py] [_log()] starting thread (client mode): 0xb9592d10
2025-12-31T21:14:46.916 [DEBUG] [Thread-134761] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:14:46.936 [DEBUG] [Thread-134761] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T21:14:46.937 [INFO] [Thread-134761] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T21:14:46.940 [DEBUG] [Thread-134761] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:14:46.940 [DEBUG] [Thread-134761] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T21:14:46.940 [DEBUG] [Thread-134761] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:14:46.940 [DEBUG] [Thread-134761] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:14:46.940 [DEBUG] [Thread-134761] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:14:46.940 [DEBUG] [Thread-134761] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:14:46.940 [DEBUG] [Thread-134761] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:14:46.941 [DEBUG] [Thread-134761] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:14:46.941 [DEBUG] [Thread-134761] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:14:46.941 [DEBUG] [Thread-134761] [transport.py] [_log()] client lang: <none>
2025-12-31T21:14:46.941 [DEBUG] [Thread-134761] [transport.py] [_log()] server lang: <none>
2025-12-31T21:14:46.941 [DEBUG] [Thread-134761] [transport.py] [_log()] kex follows: False
2025-12-31T21:14:46.941 [DEBUG] [Thread-134761] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:14:46.941 [DEBUG] [Thread-134761] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:14:46.941 [DEBUG] [Thread-134761] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:14:46.941 [DEBUG] [Thread-134761] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:14:46.941 [DEBUG] [Thread-134761] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:14:46.941 [DEBUG] [Thread-134761] [transport.py] [_log()] Compression: none
2025-12-31T21:14:46.941 [DEBUG] [Thread-134761] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:14:46.949 [DEBUG] [Thread-134761] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:14:46.949 [DEBUG] [Thread-134761] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:14:46.950 [DEBUG] [Thread-134761] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T21:14:46.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T21:14:46.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:14:46.952 [DEBUG] [Thread-134761] [transport.py] [_log()] userauth is OK
2025-12-31T21:14:46.952 [DEBUG] [Thread-134761] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:14:46.952 [DEBUG] [Thread-134761] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:14:46.952 [DEBUG] [Thread-134761] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T21:14:46.952 [DEBUG] [Thread-134761] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:14:46.974 [INFO] [Thread-134761] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:14:46.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:14:47.602 [DEBUG] [Thread-134761] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:14:47.603 [DEBUG] [Thread-134761] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:14:47.603 [DEBUG] [Thread-134761] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T21:14:47.643 [DEBUG] [Thread-134761] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:14:47.643 [DEBUG] [Thread-134761] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:14:47.646 [DEBUG] [Thread-134761] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:14:47.658 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:14:47.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T21:14:47.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T21:14:47.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T21:14:47.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:14:47.669 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T21:14:47.670 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:14:47.670 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:14:47.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T21:14:47.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.801527 -999.00  +17.40  13.16     66  +11.00 1 2 1 1 1     0    0 6.04 -18.03 Z.eSW 13.0 13.2 193.5 16.5 18.5 -16.3 18.3 -18.1 18.2 -16.3 18.5 -15.7
2025-12-31T21:14:47.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T21:14:47.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T21:14:47.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.801527
2025-12-31T21:14:47.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T21:14:47.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T21:14:47.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T21:14:47.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T21:14:47.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T21:14:47.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T21:14:20', tmtdew=7.1, humidity=63.08, cloud=0.0, wind=17.8, temperature=17.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T21:14:20', seeing=1.58, atlas_timestamp='2025-12-31T19:14:11.933', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T19:13:00')
2025-12-31T21:14:47.672 [DEBUG] [Thread-134761] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:14:47.768 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T21:14:47.778 [DEBUG] [Thread-134764] [transport.py] [_log()] starting thread (client mode): 0xb6bbea40
2025-12-31T21:14:47.779 [DEBUG] [Thread-134764] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:14:47.793 [DEBUG] [Thread-134764] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T21:14:47.793 [INFO] [Thread-134764] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T21:14:47.801 [DEBUG] [Thread-134764] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:14:47.801 [DEBUG] [Thread-134764] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T21:14:47.801 [DEBUG] [Thread-134764] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:14:47.801 [DEBUG] [Thread-134764] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:14:47.801 [DEBUG] [Thread-134764] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:14:47.801 [DEBUG] [Thread-134764] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:14:47.801 [DEBUG] [Thread-134764] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:14:47.801 [DEBUG] [Thread-134764] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:14:47.801 [DEBUG] [Thread-134764] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:14:47.801 [DEBUG] [Thread-134764] [transport.py] [_log()] client lang: <none>
2025-12-31T21:14:47.801 [DEBUG] [Thread-134764] [transport.py] [_log()] server lang: <none>
2025-12-31T21:14:47.801 [DEBUG] [Thread-134764] [transport.py] [_log()] kex follows: False
2025-12-31T21:14:47.801 [DEBUG] [Thread-134764] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:14:47.802 [DEBUG] [Thread-134764] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:14:47.802 [DEBUG] [Thread-134764] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:14:47.802 [DEBUG] [Thread-134764] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:14:47.802 [DEBUG] [Thread-134764] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:14:47.802 [DEBUG] [Thread-134764] [transport.py] [_log()] Compression: none
2025-12-31T21:14:47.802 [DEBUG] [Thread-134764] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:14:47.861 [DEBUG] [Thread-134764] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:14:47.861 [DEBUG] [Thread-134764] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:14:47.862 [DEBUG] [Thread-134764] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T21:14:47.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T21:14:47.863 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:14:47.917 [DEBUG] [Thread-134764] [transport.py] [_log()] userauth is OK
2025-12-31T21:14:47.918 [DEBUG] [Thread-134764] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:14:47.918 [DEBUG] [Thread-134764] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:14:47.918 [DEBUG] [Thread-134764] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T21:14:47.918 [DEBUG] [Thread-134764] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:14:47.936 [INFO] [Thread-134764] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:14:47.937 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T21:14:47.937 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:14:48.776 [DEBUG] [Thread-134764] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:14:48.776 [DEBUG] [Thread-134764] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:14:48.824 [DEBUG] [Thread-134764] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:14:48.824 [DEBUG] [Thread-134764] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:14:48.834 [DEBUG] [Thread-134764] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:14:48.843 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:14:48.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T21:14:48.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-12-31T21:14:48.862 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:14:48.862 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:14:48.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:14:48.871 [DEBUG] [Thread-134764] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:14:52.453 [DEBUG] [Thread-134766 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:14:59.139 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:14:59.141 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:15:07.494 [DEBUG] [Thread-134767 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:15:18.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T21:15:18.869 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T21:15:18.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T21:15:19.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 21, 14, 52), 7.09, 63.13, 0.0, 20.27, 17.14, 0, 0, 0, 2, 0, 0),)
2025-12-31T21:15:19.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 21:14:52
2025-12-31T21:15:19.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T21:15:19.916 [DEBUG] [Thread-134768] [transport.py] [_log()] starting thread (client mode): 0xb1775780
2025-12-31T21:15:19.916 [DEBUG] [Thread-134768] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:15:19.937 [DEBUG] [Thread-134768] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T21:15:19.937 [INFO] [Thread-134768] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T21:15:19.940 [DEBUG] [Thread-134768] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:15:19.940 [DEBUG] [Thread-134768] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T21:15:19.940 [DEBUG] [Thread-134768] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:15:19.940 [DEBUG] [Thread-134768] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:15:19.940 [DEBUG] [Thread-134768] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:15:19.940 [DEBUG] [Thread-134768] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:15:19.940 [DEBUG] [Thread-134768] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:15:19.940 [DEBUG] [Thread-134768] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:15:19.940 [DEBUG] [Thread-134768] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:15:19.940 [DEBUG] [Thread-134768] [transport.py] [_log()] client lang: <none>
2025-12-31T21:15:19.940 [DEBUG] [Thread-134768] [transport.py] [_log()] server lang: <none>
2025-12-31T21:15:19.940 [DEBUG] [Thread-134768] [transport.py] [_log()] kex follows: False
2025-12-31T21:15:19.940 [DEBUG] [Thread-134768] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:15:19.941 [DEBUG] [Thread-134768] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:15:19.941 [DEBUG] [Thread-134768] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:15:19.941 [DEBUG] [Thread-134768] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:15:19.941 [DEBUG] [Thread-134768] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:15:19.941 [DEBUG] [Thread-134768] [transport.py] [_log()] Compression: none
2025-12-31T21:15:19.941 [DEBUG] [Thread-134768] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:15:19.956 [DEBUG] [Thread-134768] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:15:19.956 [DEBUG] [Thread-134768] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:15:19.956 [DEBUG] [Thread-134768] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T21:15:19.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T21:15:19.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:15:19.957 [DEBUG] [Thread-134768] [transport.py] [_log()] userauth is OK
2025-12-31T21:15:19.958 [DEBUG] [Thread-134768] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:15:19.958 [DEBUG] [Thread-134768] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:15:19.958 [DEBUG] [Thread-134768] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T21:15:19.958 [DEBUG] [Thread-134768] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:15:19.974 [INFO] [Thread-134768] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:15:19.975 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:15:20.620 [DEBUG] [Thread-134768] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:15:20.620 [DEBUG] [Thread-134768] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:15:20.620 [DEBUG] [Thread-134768] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T21:15:20.660 [DEBUG] [Thread-134768] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:15:20.660 [DEBUG] [Thread-134768] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:15:20.663 [DEBUG] [Thread-134768] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:15:20.676 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:15:20.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T21:15:20.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T21:15:20.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T21:15:20.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:15:20.680 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T21:15:20.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:15:20.680 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:15:20.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T21:15:20.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.801874 -999.00  +17.40   7.22     65  +10.90 1 2 1 1 1     0    0 6.12 -15.51 Z.eSW 8.8 7.2 196.0 17.5 18.4 -16.6 18.3 -17.6 18.1 -16.3 18.5 -15.5
2025-12-31T21:15:20.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T21:15:20.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T21:15:20.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.801874
2025-12-31T21:15:20.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T21:15:20.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T21:15:20.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T21:15:20.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T21:15:20.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T21:15:20.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T21:14:52', tmtdew=7.09, humidity=63.13, cloud=0.0, wind=20.27, temperature=17.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T21:14:52', seeing=1.58, atlas_timestamp='2025-12-31T19:14:41.914', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T19:13:00')
2025-12-31T21:15:20.681 [DEBUG] [Thread-134768] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:15:20.755 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T21:15:20.771 [DEBUG] [Thread-134771] [transport.py] [_log()] starting thread (client mode): 0xb1766530
2025-12-31T21:15:20.771 [DEBUG] [Thread-134771] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:15:20.787 [DEBUG] [Thread-134771] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T21:15:20.788 [INFO] [Thread-134771] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T21:15:20.798 [DEBUG] [Thread-134771] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:15:20.798 [DEBUG] [Thread-134771] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T21:15:20.798 [DEBUG] [Thread-134771] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:15:20.799 [DEBUG] [Thread-134771] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:15:20.799 [DEBUG] [Thread-134771] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:15:20.799 [DEBUG] [Thread-134771] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:15:20.799 [DEBUG] [Thread-134771] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:15:20.799 [DEBUG] [Thread-134771] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:15:20.799 [DEBUG] [Thread-134771] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:15:20.799 [DEBUG] [Thread-134771] [transport.py] [_log()] client lang: <none>
2025-12-31T21:15:20.799 [DEBUG] [Thread-134771] [transport.py] [_log()] server lang: <none>
2025-12-31T21:15:20.799 [DEBUG] [Thread-134771] [transport.py] [_log()] kex follows: False
2025-12-31T21:15:20.799 [DEBUG] [Thread-134771] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:15:20.799 [DEBUG] [Thread-134771] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:15:20.799 [DEBUG] [Thread-134771] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:15:20.799 [DEBUG] [Thread-134771] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:15:20.799 [DEBUG] [Thread-134771] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:15:20.799 [DEBUG] [Thread-134771] [transport.py] [_log()] Compression: none
2025-12-31T21:15:20.799 [DEBUG] [Thread-134771] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:15:20.856 [DEBUG] [Thread-134771] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:15:20.856 [DEBUG] [Thread-134771] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:15:20.856 [DEBUG] [Thread-134771] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T21:15:20.856 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T21:15:20.856 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:15:20.918 [DEBUG] [Thread-134771] [transport.py] [_log()] userauth is OK
2025-12-31T21:15:20.918 [DEBUG] [Thread-134771] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:15:20.918 [DEBUG] [Thread-134771] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:15:20.918 [DEBUG] [Thread-134771] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T21:15:20.918 [DEBUG] [Thread-134771] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:15:20.932 [INFO] [Thread-134771] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:15:20.932 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T21:15:20.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:15:21.741 [DEBUG] [Thread-134771] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:15:21.741 [DEBUG] [Thread-134771] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:15:21.793 [DEBUG] [Thread-134771] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:15:21.793 [DEBUG] [Thread-134771] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:15:21.805 [DEBUG] [Thread-134771] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:15:21.814 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:15:21.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T21:15:21.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T21:15:21.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:15:21.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:15:21.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:15:21.847 [DEBUG] [Thread-134771] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:15:22.531 [DEBUG] [Thread-134773 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:15:37.583 [DEBUG] [Thread-134774 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:15:42.642 [DEBUG] [Thread-134775 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:15:51.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T21:15:51.866 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T21:15:51.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T21:15:52.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 21, 15, 24), 7.11, 63.04, 0.0, 20.1, 17.09, 0, 0, 0, 2, 0, 0),)
2025-12-31T21:15:52.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 21:15:24
2025-12-31T21:15:52.619 [DEBUG] [Thread-134776 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:15:52.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T21:15:52.871 [DEBUG] [Thread-134777] [transport.py] [_log()] starting thread (client mode): 0xb17646a0
2025-12-31T21:15:52.871 [DEBUG] [Thread-134777] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:15:52.886 [DEBUG] [Thread-134777] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T21:15:52.886 [INFO] [Thread-134777] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T21:15:52.890 [DEBUG] [Thread-134777] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:15:52.890 [DEBUG] [Thread-134777] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T21:15:52.890 [DEBUG] [Thread-134777] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:15:52.890 [DEBUG] [Thread-134777] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:15:52.890 [DEBUG] [Thread-134777] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:15:52.890 [DEBUG] [Thread-134777] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:15:52.890 [DEBUG] [Thread-134777] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:15:52.890 [DEBUG] [Thread-134777] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:15:52.890 [DEBUG] [Thread-134777] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:15:52.890 [DEBUG] [Thread-134777] [transport.py] [_log()] client lang: <none>
2025-12-31T21:15:52.890 [DEBUG] [Thread-134777] [transport.py] [_log()] server lang: <none>
2025-12-31T21:15:52.890 [DEBUG] [Thread-134777] [transport.py] [_log()] kex follows: False
2025-12-31T21:15:52.890 [DEBUG] [Thread-134777] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:15:52.890 [DEBUG] [Thread-134777] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:15:52.890 [DEBUG] [Thread-134777] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:15:52.890 [DEBUG] [Thread-134777] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:15:52.890 [DEBUG] [Thread-134777] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:15:52.890 [DEBUG] [Thread-134777] [transport.py] [_log()] Compression: none
2025-12-31T21:15:52.890 [DEBUG] [Thread-134777] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:15:52.908 [DEBUG] [Thread-134777] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:15:52.909 [DEBUG] [Thread-134777] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:15:52.909 [DEBUG] [Thread-134777] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T21:15:52.910 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T21:15:52.910 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:15:52.911 [DEBUG] [Thread-134777] [transport.py] [_log()] userauth is OK
2025-12-31T21:15:52.911 [DEBUG] [Thread-134777] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:15:52.912 [DEBUG] [Thread-134777] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:15:52.912 [DEBUG] [Thread-134777] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T21:15:52.912 [DEBUG] [Thread-134777] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:15:52.936 [INFO] [Thread-134777] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:15:52.936 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:15:54.557 [DEBUG] [Thread-134777] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:15:54.558 [DEBUG] [Thread-134777] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:15:54.558 [DEBUG] [Thread-134777] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T21:15:54.599 [DEBUG] [Thread-134777] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:15:54.599 [DEBUG] [Thread-134777] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:15:54.602 [DEBUG] [Thread-134777] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:15:54.608 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:15:54.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T21:15:54.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T21:15:54.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T21:15:54.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:15:54.617 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T21:15:54.617 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:15:54.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:15:54.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T21:15:54.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.802221 -999.00  +17.30  13.40     65  +10.90 1 2 1 1 1     0    0 6.28 -13.90 Z.eSW 9.7 13.4 209.6 21.4 18.5 -16.7 18.3 -17.8 18.1 -16.3 18.4 -15.6
2025-12-31T21:15:54.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T21:15:54.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T21:15:54.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.802221
2025-12-31T21:15:54.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T21:15:54.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T21:15:54.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T21:15:54.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T21:15:54.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T21:15:54.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T21:15:24', tmtdew=7.11, humidity=63.04, cloud=0.0, wind=20.1, temperature=17.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T21:15:24', seeing=1.87, atlas_timestamp='2025-12-31T19:15:11.894', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T19:13:00')
2025-12-31T21:15:54.620 [DEBUG] [Thread-134777] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:15:54.695 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T21:15:54.708 [DEBUG] [Thread-134780] [transport.py] [_log()] starting thread (client mode): 0xb9591c30
2025-12-31T21:15:54.708 [DEBUG] [Thread-134780] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:15:54.722 [DEBUG] [Thread-134780] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T21:15:54.722 [INFO] [Thread-134780] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T21:15:54.730 [DEBUG] [Thread-134780] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:15:54.730 [DEBUG] [Thread-134780] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T21:15:54.730 [DEBUG] [Thread-134780] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:15:54.730 [DEBUG] [Thread-134780] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:15:54.730 [DEBUG] [Thread-134780] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:15:54.730 [DEBUG] [Thread-134780] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:15:54.730 [DEBUG] [Thread-134780] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:15:54.730 [DEBUG] [Thread-134780] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:15:54.730 [DEBUG] [Thread-134780] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:15:54.730 [DEBUG] [Thread-134780] [transport.py] [_log()] client lang: <none>
2025-12-31T21:15:54.730 [DEBUG] [Thread-134780] [transport.py] [_log()] server lang: <none>
2025-12-31T21:15:54.730 [DEBUG] [Thread-134780] [transport.py] [_log()] kex follows: False
2025-12-31T21:15:54.730 [DEBUG] [Thread-134780] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:15:54.730 [DEBUG] [Thread-134780] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:15:54.730 [DEBUG] [Thread-134780] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:15:54.730 [DEBUG] [Thread-134780] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:15:54.730 [DEBUG] [Thread-134780] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:15:54.730 [DEBUG] [Thread-134780] [transport.py] [_log()] Compression: none
2025-12-31T21:15:54.730 [DEBUG] [Thread-134780] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:15:54.787 [DEBUG] [Thread-134780] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:15:54.787 [DEBUG] [Thread-134780] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:15:54.787 [DEBUG] [Thread-134780] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T21:15:54.787 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T21:15:54.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:15:54.844 [DEBUG] [Thread-134780] [transport.py] [_log()] userauth is OK
2025-12-31T21:15:54.844 [DEBUG] [Thread-134780] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:15:54.844 [DEBUG] [Thread-134780] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:15:54.844 [DEBUG] [Thread-134780] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T21:15:54.844 [DEBUG] [Thread-134780] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:15:54.858 [INFO] [Thread-134780] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:15:54.859 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T21:15:54.859 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:15:55.699 [DEBUG] [Thread-134780] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:15:55.699 [DEBUG] [Thread-134780] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:15:55.747 [DEBUG] [Thread-134780] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:15:55.747 [DEBUG] [Thread-134780] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:15:55.755 [DEBUG] [Thread-134780] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:15:55.763 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:15:55.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T21:15: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') -> 00000000
2025-12-31T21:15:55.779 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:15:55.779 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:15:55.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:15:55.787 [DEBUG] [Thread-134780] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:15:59.339 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:15:59.340 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:16:07.648 [DEBUG] [Thread-134782 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:16:22.711 [DEBUG] [Thread-134783 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:16:25.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T21:16:25.809 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T21:16:25.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T21:16:26.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 21, 15, 56), 7.05, 63.11, 0.0, 19.71, 17.09, 0, 0, 0, 2, 0, 0),)
2025-12-31T21:16:26.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 21:15:56
2025-12-31T21:16:26.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T21:16:26.806 [DEBUG] [Thread-134784] [transport.py] [_log()] starting thread (client mode): 0xb9591bd0
2025-12-31T21:16:26.807 [DEBUG] [Thread-134784] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:16:26.826 [DEBUG] [Thread-134784] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T21:16:26.826 [INFO] [Thread-134784] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T21:16:26.829 [DEBUG] [Thread-134784] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:16:26.829 [DEBUG] [Thread-134784] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T21:16:26.829 [DEBUG] [Thread-134784] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:16:26.829 [DEBUG] [Thread-134784] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:16:26.830 [DEBUG] [Thread-134784] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:16:26.830 [DEBUG] [Thread-134784] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:16:26.830 [DEBUG] [Thread-134784] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:16:26.830 [DEBUG] [Thread-134784] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:16:26.830 [DEBUG] [Thread-134784] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:16:26.830 [DEBUG] [Thread-134784] [transport.py] [_log()] client lang: <none>
2025-12-31T21:16:26.830 [DEBUG] [Thread-134784] [transport.py] [_log()] server lang: <none>
2025-12-31T21:16:26.830 [DEBUG] [Thread-134784] [transport.py] [_log()] kex follows: False
2025-12-31T21:16:26.830 [DEBUG] [Thread-134784] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:16:26.830 [DEBUG] [Thread-134784] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:16:26.830 [DEBUG] [Thread-134784] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:16:26.830 [DEBUG] [Thread-134784] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:16:26.830 [DEBUG] [Thread-134784] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:16:26.830 [DEBUG] [Thread-134784] [transport.py] [_log()] Compression: none
2025-12-31T21:16:26.830 [DEBUG] [Thread-134784] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:16:26.850 [DEBUG] [Thread-134784] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:16:26.851 [DEBUG] [Thread-134784] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:16:26.851 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T21:16:26.852 [DEBUG] [Thread-134784] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T21:16:26.853 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:16:26.855 [DEBUG] [Thread-134784] [transport.py] [_log()] userauth is OK
2025-12-31T21:16:26.855 [DEBUG] [Thread-134784] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:16:26.855 [DEBUG] [Thread-134784] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:16:26.855 [DEBUG] [Thread-134784] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T21:16:26.856 [DEBUG] [Thread-134784] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:16:26.870 [INFO] [Thread-134784] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:16:26.870 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:16:27.507 [DEBUG] [Thread-134784] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:16:27.507 [DEBUG] [Thread-134784] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:16:27.508 [DEBUG] [Thread-134784] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T21:16:27.548 [DEBUG] [Thread-134784] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:16:27.548 [DEBUG] [Thread-134784] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:16:27.551 [DEBUG] [Thread-134784] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:16:27.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:16:27.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T21:16:27.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T21:16:27.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T21:16:27.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:16:27.575 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T21:16:27.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:16:27.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:16:27.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T21:16:27.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.802568 -999.00  +17.30  13.00     66  +10.90 1 2 1 1 1     0    0 6.07 -14.82 Z.ESW 11.2 13.0 205.0 19.4 18.4 -16.9 18.3 -18.2 18.1 -16.7 18.4 -15.6
2025-12-31T21:16:27.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T21:16:27.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T21:16:27.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.802568
2025-12-31T21:16:27.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T21:16:27.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T21:16:27.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T21:16:27.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T21:16:27.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T21:16:27.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T21:15:56', tmtdew=7.05, humidity=63.11, cloud=0.0, wind=19.71, temperature=17.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T21:15:56', seeing=1.62, atlas_timestamp='2025-12-31T19:15:41.875', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T19:13:00')
2025-12-31T21:16:27.578 [DEBUG] [Thread-134784] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:16:27.661 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T21:16:27.679 [DEBUG] [Thread-134787] [transport.py] [_log()] starting thread (client mode): 0xb175a0e0
2025-12-31T21:16:27.679 [DEBUG] [Thread-134787] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:16:27.693 [DEBUG] [Thread-134787] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T21:16:27.694 [INFO] [Thread-134787] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T21:16:27.701 [DEBUG] [Thread-134787] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:16:27.701 [DEBUG] [Thread-134787] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T21:16:27.701 [DEBUG] [Thread-134787] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:16:27.702 [DEBUG] [Thread-134787] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:16:27.702 [DEBUG] [Thread-134787] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:16:27.702 [DEBUG] [Thread-134787] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:16:27.702 [DEBUG] [Thread-134787] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:16:27.702 [DEBUG] [Thread-134787] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:16:27.702 [DEBUG] [Thread-134787] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:16:27.702 [DEBUG] [Thread-134787] [transport.py] [_log()] client lang: <none>
2025-12-31T21:16:27.702 [DEBUG] [Thread-134787] [transport.py] [_log()] server lang: <none>
2025-12-31T21:16:27.702 [DEBUG] [Thread-134787] [transport.py] [_log()] kex follows: False
2025-12-31T21:16:27.702 [DEBUG] [Thread-134787] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:16:27.702 [DEBUG] [Thread-134787] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:16:27.702 [DEBUG] [Thread-134787] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:16:27.702 [DEBUG] [Thread-134787] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:16:27.702 [DEBUG] [Thread-134787] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:16:27.702 [DEBUG] [Thread-134787] [transport.py] [_log()] Compression: none
2025-12-31T21:16:27.703 [DEBUG] [Thread-134787] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:16:27.761 [DEBUG] [Thread-134787] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:16:27.761 [DEBUG] [Thread-134787] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:16:27.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T21:16:27.763 [DEBUG] [Thread-134787] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T21:16:27.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:16:27.820 [DEBUG] [Thread-134787] [transport.py] [_log()] userauth is OK
2025-12-31T21:16:27.821 [DEBUG] [Thread-134787] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:16:27.821 [DEBUG] [Thread-134787] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:16:27.821 [DEBUG] [Thread-134787] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T21:16:27.821 [DEBUG] [Thread-134787] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:16:27.839 [INFO] [Thread-134787] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:16:27.839 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T21:16:27.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:16:28.695 [DEBUG] [Thread-134787] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:16:28.696 [DEBUG] [Thread-134787] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:16:28.743 [DEBUG] [Thread-134787] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:16:28.743 [DEBUG] [Thread-134787] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:16:28.751 [DEBUG] [Thread-134787] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:16:28.759 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:16:28.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-12-31T21:16:28.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T21:16:28.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:16:28.775 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:16:28.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:16:28.782 [DEBUG] [Thread-134787] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:16:37.741 [DEBUG] [Thread-134789 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:16:42.713 [DEBUG] [Thread-134790 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:16:52.782 [DEBUG] [Thread-134791 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:16:58.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T21:16:58.805 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T21:16:58.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T21:16:59.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 21, 16, 28), 7.0, 63.29, 0.0, 19.27, 17.03, 0, 0, 0, 2, 0, 0),)
2025-12-31T21:16:59.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 21:16:28
2025-12-31T21:16:59.541 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:16:59.542 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:16:59.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T21:16:59.804 [DEBUG] [Thread-134792] [transport.py] [_log()] starting thread (client mode): 0xb1775510
2025-12-31T21:16:59.804 [DEBUG] [Thread-134792] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:16:59.825 [DEBUG] [Thread-134792] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T21:16:59.825 [INFO] [Thread-134792] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T21:16:59.829 [DEBUG] [Thread-134792] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:16:59.829 [DEBUG] [Thread-134792] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T21:16:59.829 [DEBUG] [Thread-134792] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:16:59.829 [DEBUG] [Thread-134792] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:16:59.829 [DEBUG] [Thread-134792] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:16:59.829 [DEBUG] [Thread-134792] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:16:59.829 [DEBUG] [Thread-134792] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:16:59.829 [DEBUG] [Thread-134792] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:16:59.829 [DEBUG] [Thread-134792] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:16:59.829 [DEBUG] [Thread-134792] [transport.py] [_log()] client lang: <none>
2025-12-31T21:16:59.830 [DEBUG] [Thread-134792] [transport.py] [_log()] server lang: <none>
2025-12-31T21:16:59.830 [DEBUG] [Thread-134792] [transport.py] [_log()] kex follows: False
2025-12-31T21:16:59.830 [DEBUG] [Thread-134792] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:16:59.830 [DEBUG] [Thread-134792] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:16:59.830 [DEBUG] [Thread-134792] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:16:59.830 [DEBUG] [Thread-134792] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:16:59.830 [DEBUG] [Thread-134792] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:16:59.830 [DEBUG] [Thread-134792] [transport.py] [_log()] Compression: none
2025-12-31T21:16:59.830 [DEBUG] [Thread-134792] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:16:59.849 [DEBUG] [Thread-134792] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:16:59.850 [DEBUG] [Thread-134792] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:16:59.850 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T21:16:59.851 [DEBUG] [Thread-134792] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T21:16:59.851 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:16:59.853 [DEBUG] [Thread-134792] [transport.py] [_log()] userauth is OK
2025-12-31T21:16:59.853 [DEBUG] [Thread-134792] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:16:59.853 [DEBUG] [Thread-134792] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:16:59.853 [DEBUG] [Thread-134792] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T21:16:59.853 [DEBUG] [Thread-134792] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:16:59.878 [INFO] [Thread-134792] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:16:59.879 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:17:00.672 [DEBUG] [Thread-134792] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:17:00.672 [DEBUG] [Thread-134792] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:17:00.672 [DEBUG] [Thread-134792] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T21:17:00.712 [DEBUG] [Thread-134792] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:17:00.713 [DEBUG] [Thread-134792] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:17:00.714 [DEBUG] [Thread-134792] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:17:00.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:17:00.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T21:17:00.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T21:17:00.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T21:17:00.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:17:00.734 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T21:17:00.734 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:17:00.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:17:00.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T21:17:00.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.803263 -999.00  +17.30   8.89     66  +10.90 1 2 1 1 1     0    0 6.12 -12.56 Z.ESW 10.7 8.9 212.8 14.5 18.4 -17.3 18.2 -18.5 18.1 -16.7 18.4 -16.0
2025-12-31T21:17:00.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T21:17:00.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T21:17:00.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.803263
2025-12-31T21:17:00.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T21:17:00.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T21:17:00.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T21:17:00.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T21:17:00.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T21:17:00.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T21:16:28', tmtdew=7.0, humidity=63.29, cloud=0.0, wind=19.27, temperature=17.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T21:16:28', seeing=1.64, atlas_timestamp='2025-12-31T19:16:41.923', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T19:13:00')
2025-12-31T21:17:00.736 [DEBUG] [Thread-134792] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:17:00.816 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T21:17:00.828 [DEBUG] [Thread-134795] [transport.py] [_log()] starting thread (client mode): 0xb9591990
2025-12-31T21:17:00.828 [DEBUG] [Thread-134795] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:17:00.842 [DEBUG] [Thread-134795] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T21:17:00.842 [INFO] [Thread-134795] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T21:17:00.850 [DEBUG] [Thread-134795] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:17:00.850 [DEBUG] [Thread-134795] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T21:17:00.850 [DEBUG] [Thread-134795] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:17:00.850 [DEBUG] [Thread-134795] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:17:00.850 [DEBUG] [Thread-134795] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:17:00.850 [DEBUG] [Thread-134795] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:17:00.850 [DEBUG] [Thread-134795] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:17:00.850 [DEBUG] [Thread-134795] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:17:00.850 [DEBUG] [Thread-134795] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:17:00.850 [DEBUG] [Thread-134795] [transport.py] [_log()] client lang: <none>
2025-12-31T21:17:00.850 [DEBUG] [Thread-134795] [transport.py] [_log()] server lang: <none>
2025-12-31T21:17:00.850 [DEBUG] [Thread-134795] [transport.py] [_log()] kex follows: False
2025-12-31T21:17:00.850 [DEBUG] [Thread-134795] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:17:00.850 [DEBUG] [Thread-134795] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:17:00.850 [DEBUG] [Thread-134795] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:17:00.850 [DEBUG] [Thread-134795] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:17:00.850 [DEBUG] [Thread-134795] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:17:00.850 [DEBUG] [Thread-134795] [transport.py] [_log()] Compression: none
2025-12-31T21:17:00.850 [DEBUG] [Thread-134795] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:17:00.906 [DEBUG] [Thread-134795] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:17:00.906 [DEBUG] [Thread-134795] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:17:00.906 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T21:17:00.906 [DEBUG] [Thread-134795] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T21:17:00.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:17:00.964 [DEBUG] [Thread-134795] [transport.py] [_log()] userauth is OK
2025-12-31T21:17:00.964 [DEBUG] [Thread-134795] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:17:00.964 [DEBUG] [Thread-134795] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:17:00.964 [DEBUG] [Thread-134795] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T21:17:00.964 [DEBUG] [Thread-134795] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:17:00.978 [INFO] [Thread-134795] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:17:00.978 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T21:17:00.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:17:01.807 [DEBUG] [Thread-134795] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:17:01.807 [DEBUG] [Thread-134795] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:17:01.855 [DEBUG] [Thread-134795] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:17:01.855 [DEBUG] [Thread-134795] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:17:01.863 [DEBUG] [Thread-134795] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:17:01.872 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:17:01.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T21:17:01.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T21:17:01.892 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:17:01.892 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:17:01.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:17:01.900 [DEBUG] [Thread-134795] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:17:07.820 [DEBUG] [Thread-134797 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:17:22.868 [DEBUG] [Thread-134798 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:17:31.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T21:17:31.922 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T21:17:31.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-12-31T21:17:32.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 21, 17), 6.94, 63.33, 0.0, 20.31, 17.03, 0, 0, 0, 2, 0, 0),)
2025-12-31T21:17:32.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 21:17:00
2025-12-31T21:17:32.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T21:17:32.926 [DEBUG] [Thread-134799] [transport.py] [_log()] starting thread (client mode): 0xb1765b40
2025-12-31T21:17:32.926 [DEBUG] [Thread-134799] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:17:32.945 [DEBUG] [Thread-134799] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T21:17:32.945 [INFO] [Thread-134799] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T21:17:32.948 [DEBUG] [Thread-134799] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:17:32.948 [DEBUG] [Thread-134799] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T21:17:32.948 [DEBUG] [Thread-134799] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:17:32.949 [DEBUG] [Thread-134799] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:17:32.949 [DEBUG] [Thread-134799] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:17:32.949 [DEBUG] [Thread-134799] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:17:32.949 [DEBUG] [Thread-134799] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:17:32.949 [DEBUG] [Thread-134799] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:17:32.949 [DEBUG] [Thread-134799] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:17:32.949 [DEBUG] [Thread-134799] [transport.py] [_log()] client lang: <none>
2025-12-31T21:17:32.949 [DEBUG] [Thread-134799] [transport.py] [_log()] server lang: <none>
2025-12-31T21:17:32.949 [DEBUG] [Thread-134799] [transport.py] [_log()] kex follows: False
2025-12-31T21:17:32.949 [DEBUG] [Thread-134799] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:17:32.949 [DEBUG] [Thread-134799] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:17:32.949 [DEBUG] [Thread-134799] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:17:32.949 [DEBUG] [Thread-134799] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:17:32.949 [DEBUG] [Thread-134799] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:17:32.949 [DEBUG] [Thread-134799] [transport.py] [_log()] Compression: none
2025-12-31T21:17:32.949 [DEBUG] [Thread-134799] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:17:32.963 [DEBUG] [Thread-134799] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:17:32.963 [DEBUG] [Thread-134799] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:17:32.964 [DEBUG] [Thread-134799] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T21:17:32.964 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T21:17:32.964 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:17:32.964 [DEBUG] [Thread-134799] [transport.py] [_log()] userauth is OK
2025-12-31T21:17:32.964 [DEBUG] [Thread-134799] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:17:32.964 [DEBUG] [Thread-134799] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:17:32.964 [DEBUG] [Thread-134799] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T21:17:32.964 [DEBUG] [Thread-134799] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:17:32.973 [INFO] [Thread-134799] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:17:32.973 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:17:33.615 [DEBUG] [Thread-134799] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:17:33.615 [DEBUG] [Thread-134799] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:17:33.615 [DEBUG] [Thread-134799] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T21:17:33.656 [DEBUG] [Thread-134799] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:17:33.657 [DEBUG] [Thread-134799] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:17:33.658 [DEBUG] [Thread-134799] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:17:33.672 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:17:33.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T21:17:33.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T21:17:33.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T21:17:33.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:17:33.677 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T21:17:33.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:17:33.677 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:17:33.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T21:17:33.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.803610 -999.00  +17.30  11.94     65  +10.90 1 2 1 1 1     0    0 6.21 -11.51 Z.ESW 5.9 11.9 195.9 15.5 18.5 -17.3 18.3 -18.4 18.1 -16.6 18.4 -16.0
2025-12-31T21:17:33.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T21:17:33.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T21:17:33.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.803610
2025-12-31T21:17:33.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T21:17:33.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T21:17:33.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T21:17:33.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T21:17:33.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T21:17:33.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T21:17:00', tmtdew=6.94, humidity=63.33, cloud=0.0, wind=20.31, temperature=17.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T21:17:00', seeing=1.44, atlas_timestamp='2025-12-31T19:17:11.904', atlas_cloud=2, atlas_rain=1, zp_data=[0.21225000000000094, 0.2032500000000006, -0.10975000000000001, 0.2884999999999991, 0.37049999999999983, 0.36325000000000074, 0.26099999999999923, 0.19125000000000014, 0.18649999999999878, 0.20199999999999996, 0.18024999999999913, 0.32649999999999935, 0.4369999999999994, 0.3992500000000003, 0.2029999999999994, 0.2029999999999994, 0.1697500000000005, 0.20350000000000001, 0.24299999999999855, 0.4367499999999982, 0.39649999999999963, 0.43874999999999886, 0.3772500000000001, 0.25975000000000037, 0.379999999999999, 0.2919999999999998, 0.3127500000000012, 0.5175000000000001, 0.38700000000000045, 0.41600000000000126, 0.34250000000000114, 0.31700000000000106, 0.4237499999999992], zp_timestamp='2025-12-31T19:13:00')
2025-12-31T21:17:33.678 [DEBUG] [Thread-134799] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:17:33.752 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T21:17:33.763 [DEBUG] [Thread-134802] [transport.py] [_log()] starting thread (client mode): 0xb1765ea0
2025-12-31T21:17:33.763 [DEBUG] [Thread-134802] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:17:33.778 [DEBUG] [Thread-134802] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T21:17:33.778 [INFO] [Thread-134802] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T21:17:33.786 [DEBUG] [Thread-134802] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:17:33.786 [DEBUG] [Thread-134802] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T21:17:33.786 [DEBUG] [Thread-134802] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:17:33.786 [DEBUG] [Thread-134802] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:17:33.786 [DEBUG] [Thread-134802] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:17:33.786 [DEBUG] [Thread-134802] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:17:33.786 [DEBUG] [Thread-134802] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:17:33.786 [DEBUG] [Thread-134802] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:17:33.786 [DEBUG] [Thread-134802] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:17:33.786 [DEBUG] [Thread-134802] [transport.py] [_log()] client lang: <none>
2025-12-31T21:17:33.786 [DEBUG] [Thread-134802] [transport.py] [_log()] server lang: <none>
2025-12-31T21:17:33.786 [DEBUG] [Thread-134802] [transport.py] [_log()] kex follows: False
2025-12-31T21:17:33.786 [DEBUG] [Thread-134802] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:17:33.786 [DEBUG] [Thread-134802] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:17:33.786 [DEBUG] [Thread-134802] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:17:33.786 [DEBUG] [Thread-134802] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:17:33.786 [DEBUG] [Thread-134802] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:17:33.787 [DEBUG] [Thread-134802] [transport.py] [_log()] Compression: none
2025-12-31T21:17:33.787 [DEBUG] [Thread-134802] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:17:33.843 [DEBUG] [Thread-134802] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:17:33.843 [DEBUG] [Thread-134802] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:17:33.843 [DEBUG] [Thread-134802] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T21:17:33.843 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T21:17:33.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:17:33.899 [DEBUG] [Thread-134802] [transport.py] [_log()] userauth is OK
2025-12-31T21:17:33.899 [DEBUG] [Thread-134802] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:17:33.900 [DEBUG] [Thread-134802] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:17:33.900 [DEBUG] [Thread-134802] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T21:17:33.900 [DEBUG] [Thread-134802] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:17:33.917 [INFO] [Thread-134802] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:17: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-12-31T21:17:33.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:17:34.725 [DEBUG] [Thread-134802] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:17:34.725 [DEBUG] [Thread-134802] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:17:34.774 [DEBUG] [Thread-134802] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:17:34.774 [DEBUG] [Thread-134802] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:17:34.783 [DEBUG] [Thread-134802] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:17:34.792 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:17:34.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-12-31T21:17:34.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T21:17:34.809 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:17:34.810 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:17:34.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:17:34.818 [DEBUG] [Thread-134802] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:17:37.902 [DEBUG] [Thread-134804 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:17:42.769 [DEBUG] [Thread-134805 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:17:52.952 [DEBUG] [Thread-134806 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:17:59.743 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:17:59.744 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:18:04.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T21:18:04.821 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T21:18:04.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T21:18:05.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 21, 17, 32), 6.94, 63.34, 0.0, 18.58, 17.04, 0, 0, 0, 2, 0, 0),)
2025-12-31T21:18:05.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 21:17:32
2025-12-31T21:18:05.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T21:18:05.877 [DEBUG] [Thread-134807] [transport.py] [_log()] starting thread (client mode): 0xb1764c10
2025-12-31T21:18:05.877 [DEBUG] [Thread-134807] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:18:05.897 [DEBUG] [Thread-134807] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T21:18:05.897 [INFO] [Thread-134807] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T21:18:05.900 [DEBUG] [Thread-134807] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:18:05.900 [DEBUG] [Thread-134807] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T21:18:05.900 [DEBUG] [Thread-134807] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:18:05.900 [DEBUG] [Thread-134807] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:18:05.900 [DEBUG] [Thread-134807] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:18:05.900 [DEBUG] [Thread-134807] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:18:05.900 [DEBUG] [Thread-134807] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:18:05.900 [DEBUG] [Thread-134807] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:18:05.900 [DEBUG] [Thread-134807] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:18:05.900 [DEBUG] [Thread-134807] [transport.py] [_log()] client lang: <none>
2025-12-31T21:18:05.900 [DEBUG] [Thread-134807] [transport.py] [_log()] server lang: <none>
2025-12-31T21:18:05.900 [DEBUG] [Thread-134807] [transport.py] [_log()] kex follows: False
2025-12-31T21:18:05.900 [DEBUG] [Thread-134807] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:18:05.900 [DEBUG] [Thread-134807] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:18:05.900 [DEBUG] [Thread-134807] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:18:05.900 [DEBUG] [Thread-134807] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:18:05.900 [DEBUG] [Thread-134807] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:18:05.900 [DEBUG] [Thread-134807] [transport.py] [_log()] Compression: none
2025-12-31T21:18:05.900 [DEBUG] [Thread-134807] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:18:05.915 [DEBUG] [Thread-134807] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:18:05.916 [DEBUG] [Thread-134807] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:18:05.916 [DEBUG] [Thread-134807] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T21:18:05.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T21:18:05.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:18:05.916 [DEBUG] [Thread-134807] [transport.py] [_log()] userauth is OK
2025-12-31T21:18:05.916 [DEBUG] [Thread-134807] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:18:05.916 [DEBUG] [Thread-134807] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:18:05.916 [DEBUG] [Thread-134807] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T21:18:05.916 [DEBUG] [Thread-134807] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:18:05.932 [INFO] [Thread-134807] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:18:05.933 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:18:06.575 [DEBUG] [Thread-134807] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:18:06.575 [DEBUG] [Thread-134807] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:18:06.575 [DEBUG] [Thread-134807] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T21:18:06.615 [DEBUG] [Thread-134807] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:18:06.615 [DEBUG] [Thread-134807] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:18:06.618 [DEBUG] [Thread-134807] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:18:06.629 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:18:06.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T21:18:06.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T21:18:06.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T21:18:06.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:18:06.634 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T21:18:06.634 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:18:06.634 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:18:06.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T21:18:06.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.803957 -999.00  +17.40   9.67     65  +10.90 1 2 1 1 1     0    0 6.22 -9.36 Z.ESW 8.5 9.7 211.4 13.9 18.4 -17.8 18.3 -18.7 18.1 -17.0 18.4 -16.4
2025-12-31T21:18:06.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T21:18:06.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T21:18:06.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.803957
2025-12-31T21:18:06.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T21:18:06.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T21:18:06.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T21:18:06.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T21:18:06.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T21:18:06.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T21:17:32', tmtdew=6.94, humidity=63.34, cloud=0.0, wind=18.58, temperature=17.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T21:18:04', seeing=1.71, atlas_timestamp='2025-12-31T19:17:41.885', atlas_cloud=2, atlas_rain=1, zp_data=[0.8687499999999995, 0.2682500000000001, 0.14475000000000016, 0.1169999999999991, 0.23550000000000004, nan, nan, nan, nan, 0.31400000000000006, 0.19324999999999903, 0.09600000000000009, 0.17050000000000054, 0.4192499999999999, nan, nan, 0.3592499999999994, 0.22999999999999865, 0.20999999999999908, 0.20624999999999893, 0.1664999999999992, 0.23774999999999835, nan, -0.9792500000000004, -0.5024999999999995, 0.3305000000000007, 0.9407500000000004, nan, 0.36100000000000154, 0.3080000000000007, -1.8789999999999996, -1.8329999999999984, -1.635250000000001], zp_timestamp='2025-12-31T19:16:00')
2025-12-31T21:18:06.636 [DEBUG] [Thread-134807] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:18:06.709 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T21:18:06.723 [DEBUG] [Thread-134810] [transport.py] [_log()] starting thread (client mode): 0xb6bba7a0
2025-12-31T21:18:06.723 [DEBUG] [Thread-134810] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:18:06.739 [DEBUG] [Thread-134810] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T21:18:06.739 [INFO] [Thread-134810] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T21:18:06.751 [DEBUG] [Thread-134810] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:18:06.751 [DEBUG] [Thread-134810] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T21:18:06.751 [DEBUG] [Thread-134810] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:18:06.751 [DEBUG] [Thread-134810] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:18:06.751 [DEBUG] [Thread-134810] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:18:06.751 [DEBUG] [Thread-134810] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:18:06.751 [DEBUG] [Thread-134810] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:18:06.751 [DEBUG] [Thread-134810] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:18:06.751 [DEBUG] [Thread-134810] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:18:06.751 [DEBUG] [Thread-134810] [transport.py] [_log()] client lang: <none>
2025-12-31T21:18:06.751 [DEBUG] [Thread-134810] [transport.py] [_log()] server lang: <none>
2025-12-31T21:18:06.751 [DEBUG] [Thread-134810] [transport.py] [_log()] kex follows: False
2025-12-31T21:18:06.751 [DEBUG] [Thread-134810] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:18:06.751 [DEBUG] [Thread-134810] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:18:06.751 [DEBUG] [Thread-134810] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:18:06.751 [DEBUG] [Thread-134810] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:18:06.751 [DEBUG] [Thread-134810] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:18:06.751 [DEBUG] [Thread-134810] [transport.py] [_log()] Compression: none
2025-12-31T21:18:06.751 [DEBUG] [Thread-134810] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:18:06.806 [DEBUG] [Thread-134810] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:18:06.806 [DEBUG] [Thread-134810] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:18:06.806 [DEBUG] [Thread-134810] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T21:18:06.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T21:18:06.807 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:18:06.864 [DEBUG] [Thread-134810] [transport.py] [_log()] userauth is OK
2025-12-31T21:18:06.864 [DEBUG] [Thread-134810] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:18:06.864 [DEBUG] [Thread-134810] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:18:06.865 [DEBUG] [Thread-134810] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T21:18:06.865 [DEBUG] [Thread-134810] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:18:06.892 [INFO] [Thread-134810] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:18:06.892 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T21:18:06.893 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:18:07.710 [DEBUG] [Thread-134810] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:18:07.711 [DEBUG] [Thread-134810] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:18:07.763 [DEBUG] [Thread-134810] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:18:07.763 [DEBUG] [Thread-134810] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:18:07.772 [DEBUG] [Thread-134810] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:18:07.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:18: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')
2025-12-31T21:18:07.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T21:18:07.805 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:18:07.806 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:18:07.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:18:07.814 [DEBUG] [Thread-134810] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:18:07.983 [DEBUG] [Thread-134812 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:18:23.047 [DEBUG] [Thread-134813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:18:37.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T21:18:37.836 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T21:18:37.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T21:18:38.076 [DEBUG] [Thread-134814 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:18:38.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 21, 18, 4), 6.93, 63.38, 0.0, 21.23, 17.04, 0, 0, 0, 2, 0, 0),)
2025-12-31T21:18:38.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 21:18:04
2025-12-31T21:18:38.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T21:18:38.903 [DEBUG] [Thread-134815] [transport.py] [_log()] starting thread (client mode): 0xb6bba800
2025-12-31T21:18:38.903 [DEBUG] [Thread-134815] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:18:38.924 [DEBUG] [Thread-134815] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T21:18:38.924 [INFO] [Thread-134815] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T21:18:38.926 [DEBUG] [Thread-134815] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:18:38.926 [DEBUG] [Thread-134815] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T21:18:38.926 [DEBUG] [Thread-134815] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:18:38.926 [DEBUG] [Thread-134815] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:18:38.926 [DEBUG] [Thread-134815] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:18:38.926 [DEBUG] [Thread-134815] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:18:38.926 [DEBUG] [Thread-134815] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:18:38.926 [DEBUG] [Thread-134815] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:18:38.926 [DEBUG] [Thread-134815] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:18:38.926 [DEBUG] [Thread-134815] [transport.py] [_log()] client lang: <none>
2025-12-31T21:18:38.926 [DEBUG] [Thread-134815] [transport.py] [_log()] server lang: <none>
2025-12-31T21:18:38.926 [DEBUG] [Thread-134815] [transport.py] [_log()] kex follows: False
2025-12-31T21:18:38.927 [DEBUG] [Thread-134815] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:18:38.927 [DEBUG] [Thread-134815] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:18:38.927 [DEBUG] [Thread-134815] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:18:38.927 [DEBUG] [Thread-134815] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:18:38.927 [DEBUG] [Thread-134815] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:18:38.927 [DEBUG] [Thread-134815] [transport.py] [_log()] Compression: none
2025-12-31T21:18:38.927 [DEBUG] [Thread-134815] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:18:38.943 [DEBUG] [Thread-134815] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:18:38.943 [DEBUG] [Thread-134815] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:18:38.943 [DEBUG] [Thread-134815] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T21:18:38.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T21:18:38.944 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:18:38.944 [DEBUG] [Thread-134815] [transport.py] [_log()] userauth is OK
2025-12-31T21:18:38.944 [DEBUG] [Thread-134815] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:18:38.944 [DEBUG] [Thread-134815] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:18:38.944 [DEBUG] [Thread-134815] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T21:18:38.944 [DEBUG] [Thread-134815] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:18:38.961 [INFO] [Thread-134815] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:18:38.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:18:39.588 [DEBUG] [Thread-134815] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:18:39.588 [DEBUG] [Thread-134815] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:18:39.588 [DEBUG] [Thread-134815] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T21:18:39.629 [DEBUG] [Thread-134815] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:18:39.629 [DEBUG] [Thread-134815] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:18:39.633 [DEBUG] [Thread-134815] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:18:39.644 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:18:39.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T21:18:39.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T21:18:39.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T21:18:39.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:18:39.657 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T21:18:39.657 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:18:39.657 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:18:39.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T21:18:39.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.804304 -999.00  +17.40   8.14     65  +10.90 1 2 1 1 1     0    0 6.27 -8.08 Z.ESW 10.7 8.1 243.0 22.0 18.4 -18.2 18.3 -19.0 18.1 -17.4 18.4 -16.8
2025-12-31T21:18:39.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T21:18:39.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T21:18:39.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.804304
2025-12-31T21:18:39.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T21:18:39.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T21:18:39.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T21:18:39.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T21:18:39.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T21:18:39.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T21:18:04', tmtdew=6.93, humidity=63.38, cloud=0.0, wind=21.23, temperature=17.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T21:18:36', seeing=1.4, atlas_timestamp='2025-12-31T19:18:11.866', atlas_cloud=2, atlas_rain=1, zp_data=[0.8687499999999995, 0.2682500000000001, 0.14475000000000016, 0.1169999999999991, 0.23550000000000004, nan, nan, nan, nan, 0.31400000000000006, 0.19324999999999903, 0.09600000000000009, 0.17050000000000054, 0.4192499999999999, nan, nan, 0.3592499999999994, 0.22999999999999865, 0.20999999999999908, 0.20624999999999893, 0.1664999999999992, 0.23774999999999835, nan, -0.9792500000000004, -0.5024999999999995, 0.3305000000000007, 0.9407500000000004, nan, 0.36100000000000154, 0.3080000000000007, -1.8789999999999996, -1.8329999999999984, -1.635250000000001], zp_timestamp='2025-12-31T19:16:00')
2025-12-31T21:18:39.660 [DEBUG] [Thread-134815] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:18:39.743 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T21:18:39.756 [DEBUG] [Thread-134818] [transport.py] [_log()] starting thread (client mode): 0xb9592080
2025-12-31T21:18:39.756 [DEBUG] [Thread-134818] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:18:39.771 [DEBUG] [Thread-134818] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T21:18:39.771 [INFO] [Thread-134818] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T21:18:39.778 [DEBUG] [Thread-134818] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:18:39.778 [DEBUG] [Thread-134818] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T21:18:39.779 [DEBUG] [Thread-134818] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:18:39.779 [DEBUG] [Thread-134818] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:18:39.779 [DEBUG] [Thread-134818] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:18:39.779 [DEBUG] [Thread-134818] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:18:39.779 [DEBUG] [Thread-134818] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:18:39.779 [DEBUG] [Thread-134818] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:18:39.779 [DEBUG] [Thread-134818] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:18:39.779 [DEBUG] [Thread-134818] [transport.py] [_log()] client lang: <none>
2025-12-31T21:18:39.779 [DEBUG] [Thread-134818] [transport.py] [_log()] server lang: <none>
2025-12-31T21:18:39.779 [DEBUG] [Thread-134818] [transport.py] [_log()] kex follows: False
2025-12-31T21:18:39.779 [DEBUG] [Thread-134818] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:18:39.779 [DEBUG] [Thread-134818] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:18:39.779 [DEBUG] [Thread-134818] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:18:39.779 [DEBUG] [Thread-134818] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:18:39.779 [DEBUG] [Thread-134818] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:18:39.779 [DEBUG] [Thread-134818] [transport.py] [_log()] Compression: none
2025-12-31T21:18:39.779 [DEBUG] [Thread-134818] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:18:39.835 [DEBUG] [Thread-134818] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:18:39.835 [DEBUG] [Thread-134818] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:18:39.836 [DEBUG] [Thread-134818] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T21:18:39.836 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T21:18:39.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:18:39.894 [DEBUG] [Thread-134818] [transport.py] [_log()] userauth is OK
2025-12-31T21:18:39.895 [DEBUG] [Thread-134818] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:18:39.895 [DEBUG] [Thread-134818] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:18:39.895 [DEBUG] [Thread-134818] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T21:18:39.895 [DEBUG] [Thread-134818] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:18:39.921 [INFO] [Thread-134818] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:18:39.922 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T21:18:39.922 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:18:40.730 [DEBUG] [Thread-134818] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:18:40.730 [DEBUG] [Thread-134818] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:18:40.778 [DEBUG] [Thread-134818] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:18:40.778 [DEBUG] [Thread-134818] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:18:40.788 [DEBUG] [Thread-134818] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:18:40.797 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:18:40.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T21:18:40.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T21:18:40.816 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:18:40.816 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:18:40.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:18:40.824 [DEBUG] [Thread-134818] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:18:42.835 [DEBUG] [Thread-134820 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:18:53.115 [DEBUG] [Thread-134821 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:18:59.954 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:18:59.956 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:19:08.164 [DEBUG] [Thread-134822 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:19:10.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T21:19:10.846 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T21:19:10.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T21:19:11.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 21, 18, 36), 7.02, 63.41, 0.0, 17.47, 17.06, 0, 0, 0, 2, 0, 0),)
2025-12-31T21:19:11.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 21:18:36
2025-12-31T21:19:11.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T21:19:11.892 [DEBUG] [Thread-134823] [transport.py] [_log()] starting thread (client mode): 0xb9591480
2025-12-31T21:19:11.892 [DEBUG] [Thread-134823] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:19:11.912 [DEBUG] [Thread-134823] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T21:19:11.913 [INFO] [Thread-134823] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T21:19:11.915 [DEBUG] [Thread-134823] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:19:11.915 [DEBUG] [Thread-134823] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T21:19:11.915 [DEBUG] [Thread-134823] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:19:11.915 [DEBUG] [Thread-134823] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:19:11.915 [DEBUG] [Thread-134823] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:19:11.915 [DEBUG] [Thread-134823] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:19:11.915 [DEBUG] [Thread-134823] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:19:11.915 [DEBUG] [Thread-134823] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:19:11.915 [DEBUG] [Thread-134823] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:19:11.915 [DEBUG] [Thread-134823] [transport.py] [_log()] client lang: <none>
2025-12-31T21:19:11.915 [DEBUG] [Thread-134823] [transport.py] [_log()] server lang: <none>
2025-12-31T21:19:11.915 [DEBUG] [Thread-134823] [transport.py] [_log()] kex follows: False
2025-12-31T21:19:11.915 [DEBUG] [Thread-134823] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:19:11.915 [DEBUG] [Thread-134823] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:19:11.915 [DEBUG] [Thread-134823] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:19:11.915 [DEBUG] [Thread-134823] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:19:11.915 [DEBUG] [Thread-134823] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:19:11.915 [DEBUG] [Thread-134823] [transport.py] [_log()] Compression: none
2025-12-31T21:19:11.915 [DEBUG] [Thread-134823] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:19:11.927 [DEBUG] [Thread-134823] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:19:11.927 [DEBUG] [Thread-134823] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:19:11.927 [DEBUG] [Thread-134823] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T21:19:11.927 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T21:19:11.927 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:19:11.928 [DEBUG] [Thread-134823] [transport.py] [_log()] userauth is OK
2025-12-31T21:19:11.928 [DEBUG] [Thread-134823] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:19:11.928 [DEBUG] [Thread-134823] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:19:11.928 [DEBUG] [Thread-134823] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T21:19:11.928 [DEBUG] [Thread-134823] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:19:11.958 [INFO] [Thread-134823] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:19:11.958 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:19:12.592 [DEBUG] [Thread-134823] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:19:12.592 [DEBUG] [Thread-134823] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:19:12.592 [DEBUG] [Thread-134823] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T21:19:12.633 [DEBUG] [Thread-134823] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:19:12.633 [DEBUG] [Thread-134823] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:19:12.636 [DEBUG] [Thread-134823] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:19:12.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:19:12.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T21:19:12.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T21:19:12.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T21:19:12.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:19:12.654 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T21:19:12.654 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:19:12.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:19:12.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T21:19:12.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.804652 -999.00  +17.30  14.74     66  +10.90 1 2 1 1 1     0    0 6.33 -7.64 Z.ESW 16.0 14.7 196.0 20.9 18.4 -18.6 18.2 -19.2 18.0 -17.5 18.4 -17.0
2025-12-31T21:19:12.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T21:19:12.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T21:19:12.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.804652
2025-12-31T21:19:12.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T21:19:12.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T21:19:12.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T21:19:12.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T21:19:12.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T21:19:12.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T21:18:36', tmtdew=7.02, humidity=63.41, cloud=0.0, wind=17.47, temperature=17.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T21:19:09', seeing=1.27, atlas_timestamp='2025-12-31T19:18:41.933', atlas_cloud=2, atlas_rain=1, zp_data=[0.8687499999999995, 0.2682500000000001, 0.14475000000000016, 0.1169999999999991, 0.23550000000000004, nan, nan, nan, nan, 0.31400000000000006, 0.19324999999999903, 0.09600000000000009, 0.17050000000000054, 0.4192499999999999, nan, nan, 0.3592499999999994, 0.22999999999999865, 0.20999999999999908, 0.20624999999999893, 0.1664999999999992, 0.23774999999999835, nan, -0.9792500000000004, -0.5024999999999995, 0.3305000000000007, 0.9407500000000004, nan, 0.36100000000000154, 0.3080000000000007, -1.8789999999999996, -1.8329999999999984, -1.635250000000001], zp_timestamp='2025-12-31T19:16:00')
2025-12-31T21:19:12.655 [DEBUG] [Thread-134823] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:19:12.730 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T21:19:12.742 [DEBUG] [Thread-134826] [transport.py] [_log()] starting thread (client mode): 0xb95911b0
2025-12-31T21:19:12.742 [DEBUG] [Thread-134826] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:19:12.757 [DEBUG] [Thread-134826] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T21:19:12.757 [INFO] [Thread-134826] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T21:19:12.765 [DEBUG] [Thread-134826] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:19:12.765 [DEBUG] [Thread-134826] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T21:19:12.765 [DEBUG] [Thread-134826] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:19:12.765 [DEBUG] [Thread-134826] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:19:12.765 [DEBUG] [Thread-134826] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:19:12.765 [DEBUG] [Thread-134826] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:19:12.765 [DEBUG] [Thread-134826] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:19:12.765 [DEBUG] [Thread-134826] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:19:12.765 [DEBUG] [Thread-134826] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:19:12.765 [DEBUG] [Thread-134826] [transport.py] [_log()] client lang: <none>
2025-12-31T21:19:12.765 [DEBUG] [Thread-134826] [transport.py] [_log()] server lang: <none>
2025-12-31T21:19:12.765 [DEBUG] [Thread-134826] [transport.py] [_log()] kex follows: False
2025-12-31T21:19:12.765 [DEBUG] [Thread-134826] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:19:12.765 [DEBUG] [Thread-134826] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:19:12.765 [DEBUG] [Thread-134826] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:19:12.765 [DEBUG] [Thread-134826] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:19:12.765 [DEBUG] [Thread-134826] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:19:12.765 [DEBUG] [Thread-134826] [transport.py] [_log()] Compression: none
2025-12-31T21:19:12.765 [DEBUG] [Thread-134826] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:19:12.821 [DEBUG] [Thread-134826] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:19:12.821 [DEBUG] [Thread-134826] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:19:12.821 [DEBUG] [Thread-134826] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T21:19:12.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T21:19:12.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:19:12.878 [DEBUG] [Thread-134826] [transport.py] [_log()] userauth is OK
2025-12-31T21:19:12.878 [DEBUG] [Thread-134826] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:19:12.878 [DEBUG] [Thread-134826] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:19:12.878 [DEBUG] [Thread-134826] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T21:19:12.878 [DEBUG] [Thread-134826] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:19:12.892 [INFO] [Thread-134826] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:19:12.893 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T21:19:12.893 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:19:13.712 [DEBUG] [Thread-134826] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:19:13.712 [DEBUG] [Thread-134826] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:19:13.760 [DEBUG] [Thread-134826] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:19:13.760 [DEBUG] [Thread-134826] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:19:13.768 [DEBUG] [Thread-134826] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:19:13.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:19:13.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T21:19:13.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T21:19:13.792 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:19:13.792 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:19:13.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:19:13.800 [DEBUG] [Thread-134826] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:19:23.196 [DEBUG] [Thread-134828 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:19:38.248 [DEBUG] [Thread-134829 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:19:42.915 [DEBUG] [Thread-134830 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:19:43.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T21:19:43.823 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T21:19:43.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T21:19:44.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 21, 19, 41), 6.95, 63.51, 0.0, 20.56, 16.96, 0, 0, 0, 2, 0, 0),)
2025-12-31T21:19:44.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 21:19:41
2025-12-31T21:19:44.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T21:19:44.839 [DEBUG] [Thread-134831] [transport.py] [_log()] starting thread (client mode): 0xb175bc10
2025-12-31T21:19:44.839 [DEBUG] [Thread-134831] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:19:44.860 [DEBUG] [Thread-134831] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T21:19:44.860 [INFO] [Thread-134831] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T21:19:44.864 [DEBUG] [Thread-134831] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:19:44.864 [DEBUG] [Thread-134831] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T21:19:44.864 [DEBUG] [Thread-134831] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:19:44.864 [DEBUG] [Thread-134831] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:19:44.864 [DEBUG] [Thread-134831] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:19:44.864 [DEBUG] [Thread-134831] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:19:44.865 [DEBUG] [Thread-134831] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:19:44.865 [DEBUG] [Thread-134831] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:19:44.865 [DEBUG] [Thread-134831] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:19:44.865 [DEBUG] [Thread-134831] [transport.py] [_log()] client lang: <none>
2025-12-31T21:19:44.865 [DEBUG] [Thread-134831] [transport.py] [_log()] server lang: <none>
2025-12-31T21:19:44.865 [DEBUG] [Thread-134831] [transport.py] [_log()] kex follows: False
2025-12-31T21:19:44.865 [DEBUG] [Thread-134831] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:19:44.865 [DEBUG] [Thread-134831] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:19:44.865 [DEBUG] [Thread-134831] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:19:44.865 [DEBUG] [Thread-134831] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:19:44.865 [DEBUG] [Thread-134831] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:19:44.865 [DEBUG] [Thread-134831] [transport.py] [_log()] Compression: none
2025-12-31T21:19:44.865 [DEBUG] [Thread-134831] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:19:44.883 [DEBUG] [Thread-134831] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:19:44.884 [DEBUG] [Thread-134831] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:19:44.885 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T21:19:44.886 [DEBUG] [Thread-134831] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T21:19:44.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:19:44.888 [DEBUG] [Thread-134831] [transport.py] [_log()] userauth is OK
2025-12-31T21:19:44.888 [DEBUG] [Thread-134831] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:19:44.888 [DEBUG] [Thread-134831] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:19:44.889 [DEBUG] [Thread-134831] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T21:19:44.889 [DEBUG] [Thread-134831] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:19:44.913 [INFO] [Thread-134831] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:19:44.914 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:19:45.573 [DEBUG] [Thread-134831] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:19:45.573 [DEBUG] [Thread-134831] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:19:45.573 [DEBUG] [Thread-134831] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T21:19:45.614 [DEBUG] [Thread-134831] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:19:45.614 [DEBUG] [Thread-134831] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:19:45.617 [DEBUG] [Thread-134831] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:19:45.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:19:45.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T21:19:45.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T21:19:45.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T21:19:45.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:19:45.639 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T21:19:45.640 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:19:45.640 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:19:45.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T21:19:45.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.804999 -999.00  +17.30   4.79     66  +10.90 1 2 1 1 1     0    0 6.30 -7.38 Z.ESW 10.3 4.8 37.7 18.8 18.4 -18.8 18.2 -19.6 18.0 -17.9 18.4 -17.2
2025-12-31T21:19:45.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T21:19:45.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T21:19:45.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.804999
2025-12-31T21:19:45.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T21:19:45.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T21:19:45.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T21:19:45.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T21:19:45.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T21:19:45.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T21:19:41', tmtdew=6.95, humidity=63.51, cloud=0.0, wind=20.56, temperature=16.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T21:19:41', seeing=1.6, atlas_timestamp='2025-12-31T19:19:11.914', atlas_cloud=2, atlas_rain=1, zp_data=[0.8687499999999995, 0.2682500000000001, 0.14475000000000016, 0.1169999999999991, 0.23550000000000004, nan, nan, nan, nan, 0.31400000000000006, 0.19324999999999903, 0.09600000000000009, 0.17050000000000054, 0.4192499999999999, nan, nan, 0.3592499999999994, 0.22999999999999865, 0.20999999999999908, 0.20624999999999893, 0.1664999999999992, 0.23774999999999835, nan, -0.9792500000000004, -0.5024999999999995, 0.3305000000000007, 0.9407500000000004, nan, 0.36100000000000154, 0.3080000000000007, -1.8789999999999996, -1.8329999999999984, -1.635250000000001], zp_timestamp='2025-12-31T19:16:00')
2025-12-31T21:19:45.641 [DEBUG] [Thread-134831] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:19:45.721 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T21:19:45.731 [DEBUG] [Thread-134834] [transport.py] [_log()] starting thread (client mode): 0xb1764bb0
2025-12-31T21:19:45.731 [DEBUG] [Thread-134834] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:19:45.745 [DEBUG] [Thread-134834] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T21:19:45.745 [INFO] [Thread-134834] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T21:19:45.752 [DEBUG] [Thread-134834] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:19:45.752 [DEBUG] [Thread-134834] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T21:19:45.752 [DEBUG] [Thread-134834] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:19:45.752 [DEBUG] [Thread-134834] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:19:45.752 [DEBUG] [Thread-134834] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:19:45.752 [DEBUG] [Thread-134834] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:19:45.752 [DEBUG] [Thread-134834] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:19:45.752 [DEBUG] [Thread-134834] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:19:45.752 [DEBUG] [Thread-134834] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:19:45.752 [DEBUG] [Thread-134834] [transport.py] [_log()] client lang: <none>
2025-12-31T21:19:45.752 [DEBUG] [Thread-134834] [transport.py] [_log()] server lang: <none>
2025-12-31T21:19:45.752 [DEBUG] [Thread-134834] [transport.py] [_log()] kex follows: False
2025-12-31T21:19:45.752 [DEBUG] [Thread-134834] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:19:45.752 [DEBUG] [Thread-134834] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:19:45.752 [DEBUG] [Thread-134834] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:19:45.753 [DEBUG] [Thread-134834] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:19:45.753 [DEBUG] [Thread-134834] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:19:45.753 [DEBUG] [Thread-134834] [transport.py] [_log()] Compression: none
2025-12-31T21:19:45.753 [DEBUG] [Thread-134834] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:19:45.811 [DEBUG] [Thread-134834] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:19:45.811 [DEBUG] [Thread-134834] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:19:45.812 [DEBUG] [Thread-134834] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T21:19:45.812 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T21:19:45.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:19:45.867 [DEBUG] [Thread-134834] [transport.py] [_log()] userauth is OK
2025-12-31T21:19:45.867 [DEBUG] [Thread-134834] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:19:45.868 [DEBUG] [Thread-134834] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:19:45.868 [DEBUG] [Thread-134834] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T21:19:45.868 [DEBUG] [Thread-134834] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:19:45.887 [INFO] [Thread-134834] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:19:45.887 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T21:19:45.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:19:46.742 [DEBUG] [Thread-134834] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:19:46.742 [DEBUG] [Thread-134834] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:19:46.790 [DEBUG] [Thread-134834] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:19:46.790 [DEBUG] [Thread-134834] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:19:46.799 [DEBUG] [Thread-134834] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:19:46.809 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:19:46.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-12-31T21:19:46.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-12-31T21:19:46.827 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:19:46.828 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:19:46.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:19:46.836 [DEBUG] [Thread-134834] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:19:53.281 [DEBUG] [Thread-134836 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:20:00.157 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:20:00.158 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:20:08.321 [DEBUG] [Thread-134837 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:20:16.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T21:20:16.859 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T21:20:16.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T21:20:17.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 21, 20, 13), 6.93, 63.57, 0.0, 21.37, 16.96, 0, 0, 0, 2, 0, 0),)
2025-12-31T21:20:17.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 21:20:13
2025-12-31T21:20:17.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T21:20:17.869 [DEBUG] [Thread-134838] [transport.py] [_log()] starting thread (client mode): 0xb95d6ce0
2025-12-31T21:20:17.869 [DEBUG] [Thread-134838] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:20:17.888 [DEBUG] [Thread-134838] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T21:20:17.888 [INFO] [Thread-134838] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T21:20:17.891 [DEBUG] [Thread-134838] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:20:17.891 [DEBUG] [Thread-134838] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T21:20:17.892 [DEBUG] [Thread-134838] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:20:17.892 [DEBUG] [Thread-134838] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:20:17.892 [DEBUG] [Thread-134838] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:20:17.892 [DEBUG] [Thread-134838] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:20:17.892 [DEBUG] [Thread-134838] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:20:17.892 [DEBUG] [Thread-134838] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:20:17.892 [DEBUG] [Thread-134838] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:20:17.892 [DEBUG] [Thread-134838] [transport.py] [_log()] client lang: <none>
2025-12-31T21:20:17.892 [DEBUG] [Thread-134838] [transport.py] [_log()] server lang: <none>
2025-12-31T21:20:17.892 [DEBUG] [Thread-134838] [transport.py] [_log()] kex follows: False
2025-12-31T21:20:17.892 [DEBUG] [Thread-134838] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:20:17.892 [DEBUG] [Thread-134838] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:20:17.892 [DEBUG] [Thread-134838] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:20:17.892 [DEBUG] [Thread-134838] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:20:17.893 [DEBUG] [Thread-134838] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:20:17.893 [DEBUG] [Thread-134838] [transport.py] [_log()] Compression: none
2025-12-31T21:20:17.893 [DEBUG] [Thread-134838] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:20:17.908 [DEBUG] [Thread-134838] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:20:17.908 [DEBUG] [Thread-134838] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:20:17.908 [DEBUG] [Thread-134838] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T21:20:17.909 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T21:20:17.909 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:20:17.910 [DEBUG] [Thread-134838] [transport.py] [_log()] userauth is OK
2025-12-31T21:20:17.911 [DEBUG] [Thread-134838] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:20:17.911 [DEBUG] [Thread-134838] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:20:17.911 [DEBUG] [Thread-134838] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T21:20:17.911 [DEBUG] [Thread-134838] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:20:17.935 [INFO] [Thread-134838] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:20:17.936 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:20:18.600 [DEBUG] [Thread-134838] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:20:18.600 [DEBUG] [Thread-134838] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:20:18.600 [DEBUG] [Thread-134838] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T21:20:18.640 [DEBUG] [Thread-134838] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:20:18.641 [DEBUG] [Thread-134838] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:20:18.643 [DEBUG] [Thread-134838] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:20:18.656 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:20:18.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T21:20:18.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T21:20:18.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T21:20:18.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:20:18.664 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T21:20:18.664 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:20:18.664 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:20:18.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T21:20:18.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.805346 -999.00  +17.20  15.07     66  +10.90 1 2 1 1 1     0    0 6.26 -8.06 Z.ESW 7.7 15.1 207.6 21.9 18.3 -19.2 18.2 -19.5 18.0 -17.8 18.3 -17.7
2025-12-31T21:20:18.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T21:20:18.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T21:20:18.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.805346
2025-12-31T21:20:18.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T21:20:18.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T21:20:18.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T21:20:18.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T21:20:18.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T21:20:18.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T21:20:13', tmtdew=6.93, humidity=63.57, cloud=0.0, wind=21.37, temperature=16.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T21:20:13', seeing=1.63, atlas_timestamp='2025-12-31T19:19:41.894', atlas_cloud=2, atlas_rain=1, zp_data=[0.8687499999999995, 0.2682500000000001, 0.14475000000000016, 0.1169999999999991, 0.23550000000000004, nan, nan, nan, nan, 0.31400000000000006, 0.19324999999999903, 0.09600000000000009, 0.17050000000000054, 0.4192499999999999, nan, nan, 0.3592499999999994, 0.22999999999999865, 0.20999999999999908, 0.20624999999999893, 0.1664999999999992, 0.23774999999999835, nan, -0.9792500000000004, -0.5024999999999995, 0.3305000000000007, 0.9407500000000004, nan, 0.36100000000000154, 0.3080000000000007, -1.8789999999999996, -1.8329999999999984, -1.635250000000001], zp_timestamp='2025-12-31T19:16:00')
2025-12-31T21:20:18.667 [DEBUG] [Thread-134838] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:20:18.750 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T21:20:18.762 [DEBUG] [Thread-134841] [transport.py] [_log()] starting thread (client mode): 0xb1764c70
2025-12-31T21:20:18.762 [DEBUG] [Thread-134841] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:20:18.777 [DEBUG] [Thread-134841] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T21:20:18.777 [INFO] [Thread-134841] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T21:20:18.785 [DEBUG] [Thread-134841] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:20:18.785 [DEBUG] [Thread-134841] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T21:20:18.785 [DEBUG] [Thread-134841] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:20:18.785 [DEBUG] [Thread-134841] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:20:18.785 [DEBUG] [Thread-134841] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:20:18.785 [DEBUG] [Thread-134841] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:20:18.785 [DEBUG] [Thread-134841] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:20:18.785 [DEBUG] [Thread-134841] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:20:18.785 [DEBUG] [Thread-134841] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:20:18.786 [DEBUG] [Thread-134841] [transport.py] [_log()] client lang: <none>
2025-12-31T21:20:18.786 [DEBUG] [Thread-134841] [transport.py] [_log()] server lang: <none>
2025-12-31T21:20:18.786 [DEBUG] [Thread-134841] [transport.py] [_log()] kex follows: False
2025-12-31T21:20:18.786 [DEBUG] [Thread-134841] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:20:18.786 [DEBUG] [Thread-134841] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:20:18.786 [DEBUG] [Thread-134841] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:20:18.786 [DEBUG] [Thread-134841] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:20:18.786 [DEBUG] [Thread-134841] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:20:18.786 [DEBUG] [Thread-134841] [transport.py] [_log()] Compression: none
2025-12-31T21:20:18.786 [DEBUG] [Thread-134841] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:20:18.841 [DEBUG] [Thread-134841] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:20:18.842 [DEBUG] [Thread-134841] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:20:18.842 [DEBUG] [Thread-134841] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T21:20:18.843 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T21:20:18.843 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:20:18.898 [DEBUG] [Thread-134841] [transport.py] [_log()] userauth is OK
2025-12-31T21:20:18.898 [DEBUG] [Thread-134841] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:20:18.898 [DEBUG] [Thread-134841] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:20:18.898 [DEBUG] [Thread-134841] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T21:20:18.898 [DEBUG] [Thread-134841] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:20:18.914 [INFO] [Thread-134841] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:20:18.914 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T21:20:18.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:20:19.807 [DEBUG] [Thread-134841] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:20:19.808 [DEBUG] [Thread-134841] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:20:19.856 [DEBUG] [Thread-134841] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:20:19.856 [DEBUG] [Thread-134841] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:20:19.865 [DEBUG] [Thread-134841] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:20:19.874 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:20:19.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-12-31T21:20:19.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T21:20:19.893 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:20:19.894 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:20:19.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:20:19.902 [DEBUG] [Thread-134841] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:20:23.359 [DEBUG] [Thread-134843 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:20:38.408 [DEBUG] [Thread-134844 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:20:43.000 [DEBUG] [Thread-134845 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:20:49.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T21:20:49.925 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T21:20:49.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T21:20:50.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 21, 20, 45), 6.87, 63.59, 0.0, 18.37, 16.88, 0, 0, 0, 2, 0, 0),)
2025-12-31T21:20:50.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 21:20:45
2025-12-31T21:20:50.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T21:20:50.924 [DEBUG] [Thread-134846] [transport.py] [_log()] starting thread (client mode): 0xb9591c60
2025-12-31T21:20:50.924 [DEBUG] [Thread-134846] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:20:50.944 [DEBUG] [Thread-134846] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T21:20:50.944 [INFO] [Thread-134846] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T21:20:50.945 [DEBUG] [Thread-134846] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:20:50.945 [DEBUG] [Thread-134846] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T21:20:50.945 [DEBUG] [Thread-134846] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:20:50.945 [DEBUG] [Thread-134846] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:20:50.945 [DEBUG] [Thread-134846] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:20:50.945 [DEBUG] [Thread-134846] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:20:50.946 [DEBUG] [Thread-134846] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:20:50.946 [DEBUG] [Thread-134846] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:20:50.946 [DEBUG] [Thread-134846] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:20:50.946 [DEBUG] [Thread-134846] [transport.py] [_log()] client lang: <none>
2025-12-31T21:20:50.946 [DEBUG] [Thread-134846] [transport.py] [_log()] server lang: <none>
2025-12-31T21:20:50.946 [DEBUG] [Thread-134846] [transport.py] [_log()] kex follows: False
2025-12-31T21:20:50.946 [DEBUG] [Thread-134846] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:20:50.946 [DEBUG] [Thread-134846] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:20:50.946 [DEBUG] [Thread-134846] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:20:50.946 [DEBUG] [Thread-134846] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:20:50.946 [DEBUG] [Thread-134846] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:20:50.946 [DEBUG] [Thread-134846] [transport.py] [_log()] Compression: none
2025-12-31T21:20:50.946 [DEBUG] [Thread-134846] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:20:50.955 [DEBUG] [Thread-134846] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:20:50.956 [DEBUG] [Thread-134846] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:20:50.956 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T21:20:50.957 [DEBUG] [Thread-134846] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T21:20:50.958 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:20:50.958 [DEBUG] [Thread-134846] [transport.py] [_log()] userauth is OK
2025-12-31T21:20:50.959 [DEBUG] [Thread-134846] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:20:50.959 [DEBUG] [Thread-134846] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:20:50.959 [DEBUG] [Thread-134846] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T21:20:50.959 [DEBUG] [Thread-134846] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:20:50.983 [INFO] [Thread-134846] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:20:50.984 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:20:51.581 [DEBUG] [Thread-134846] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:20:51.581 [DEBUG] [Thread-134846] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:20:51.582 [DEBUG] [Thread-134846] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T21:20:51.622 [DEBUG] [Thread-134846] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:20:51.622 [DEBUG] [Thread-134846] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:20:51.628 [DEBUG] [Thread-134846] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:20:51.641 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:20:51.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T21:20:51.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T21:20:51.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T21:20:51.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:20:51.652 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T21:20:51.652 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:20:51.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:20:51.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T21:20:51.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.806040 -999.00  +17.20   6.90     66  +10.90 1 2 1 1 1     0    0 6.26 -9.58 Z.ESW 8.2 6.9 226.8 14.9 18.3 -19.3 18.1 -19.4 17.9 -17.4 18.3 -17.5
2025-12-31T21:20:51.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T21:20:51.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T21:20:51.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.806040
2025-12-31T21:20:51.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T21:20:51.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T21:20:51.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T21:20:51.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T21:20:51.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T21:20:51.660 [DEBUG] [Thread-134846] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:20:51.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T21:20:45', tmtdew=6.87, humidity=63.59, cloud=0.0, wind=18.37, temperature=16.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T21:20:45', seeing=1.63, atlas_timestamp='2025-12-31T19:20:41.856', atlas_cloud=2, atlas_rain=1, zp_data=[0.13625000000000043, 0.16125000000000078, 0.12925000000000075, 0.13599999999999923, 0.17249999999999943, 0.3702500000000004, nan, nan, 0.28449999999999953, 0.12300000000000111, 0.17824999999999847, 0.16000000000000014, 0.20699999999999896, 0.24825000000000053, nan, nan, 0.2997499999999995, 0.22749999999999915, 0.21399999999999864, 0.5942499999999988, 0.36549999999999727, 0.2807499999999976, nan, -1.2372499999999995, 0.19899999999999984, 0.14649999999999963, 0.4002499999999998, nan, nan, 0.3260000000000014, -2.039999999999999, -1.7929999999999993, -1.2082500000000014], zp_timestamp='2025-12-31T19:19:00')
2025-12-31T21:20:51.746 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T21:20:51.758 [DEBUG] [Thread-134849] [transport.py] [_log()] starting thread (client mode): 0xb9590e80
2025-12-31T21:20:51.758 [DEBUG] [Thread-134849] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:20:51.774 [DEBUG] [Thread-134849] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T21:20:51.774 [INFO] [Thread-134849] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T21:20:51.782 [DEBUG] [Thread-134849] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:20:51.782 [DEBUG] [Thread-134849] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T21:20:51.782 [DEBUG] [Thread-134849] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:20:51.782 [DEBUG] [Thread-134849] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:20:51.782 [DEBUG] [Thread-134849] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:20:51.782 [DEBUG] [Thread-134849] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:20:51.782 [DEBUG] [Thread-134849] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:20:51.782 [DEBUG] [Thread-134849] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:20:51.783 [DEBUG] [Thread-134849] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:20:51.783 [DEBUG] [Thread-134849] [transport.py] [_log()] client lang: <none>
2025-12-31T21:20:51.783 [DEBUG] [Thread-134849] [transport.py] [_log()] server lang: <none>
2025-12-31T21:20:51.783 [DEBUG] [Thread-134849] [transport.py] [_log()] kex follows: False
2025-12-31T21:20:51.783 [DEBUG] [Thread-134849] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:20:51.783 [DEBUG] [Thread-134849] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:20:51.783 [DEBUG] [Thread-134849] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:20:51.783 [DEBUG] [Thread-134849] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:20:51.783 [DEBUG] [Thread-134849] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:20:51.783 [DEBUG] [Thread-134849] [transport.py] [_log()] Compression: none
2025-12-31T21:20:51.783 [DEBUG] [Thread-134849] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:20:51.843 [DEBUG] [Thread-134849] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:20:51.843 [DEBUG] [Thread-134849] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:20:51.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T21:20:51.844 [DEBUG] [Thread-134849] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T21:20:51.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:20:51.898 [DEBUG] [Thread-134849] [transport.py] [_log()] userauth is OK
2025-12-31T21:20:51.899 [DEBUG] [Thread-134849] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:20:51.899 [DEBUG] [Thread-134849] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:20:51.899 [DEBUG] [Thread-134849] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T21:20:51.899 [DEBUG] [Thread-134849] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:20:51.918 [INFO] [Thread-134849] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:20:51.919 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T21:20:51.919 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:20:52.755 [DEBUG] [Thread-134849] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:20:52.755 [DEBUG] [Thread-134849] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:20:52.803 [DEBUG] [Thread-134849] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:20:52.803 [DEBUG] [Thread-134849] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:20:52.812 [DEBUG] [Thread-134849] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:20:52.821 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:20: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-12-31T21:20: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-12-31T21:20:52.840 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:20:52.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:20:52.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:20:52.849 [DEBUG] [Thread-134849] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:20:53.443 [DEBUG] [Thread-134851 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:21:00.357 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:21:00.358 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:21:08.498 [DEBUG] [Thread-134852 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:21:22.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T21:21:22.860 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T21:21:22.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T21:21:23.524 [DEBUG] [Thread-134853 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:21:23.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 21, 21, 17), 6.86, 63.67, 0.0, 19.37, 16.9, 0, 0, 0, 2, 0, 0),)
2025-12-31T21:21:23.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 21:21:17
2025-12-31T21:21:23.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T21:21:23.848 [DEBUG] [Thread-134854] [transport.py] [_log()] starting thread (client mode): 0xb95910f0
2025-12-31T21:21:23.848 [DEBUG] [Thread-134854] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:21:23.867 [DEBUG] [Thread-134854] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T21:21:23.867 [INFO] [Thread-134854] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T21:21:23.870 [DEBUG] [Thread-134854] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:21:23.870 [DEBUG] [Thread-134854] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T21:21:23.870 [DEBUG] [Thread-134854] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:21:23.870 [DEBUG] [Thread-134854] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:21:23.870 [DEBUG] [Thread-134854] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:21:23.870 [DEBUG] [Thread-134854] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:21:23.870 [DEBUG] [Thread-134854] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:21:23.870 [DEBUG] [Thread-134854] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:21:23.870 [DEBUG] [Thread-134854] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:21:23.870 [DEBUG] [Thread-134854] [transport.py] [_log()] client lang: <none>
2025-12-31T21:21:23.870 [DEBUG] [Thread-134854] [transport.py] [_log()] server lang: <none>
2025-12-31T21:21:23.870 [DEBUG] [Thread-134854] [transport.py] [_log()] kex follows: False
2025-12-31T21:21:23.870 [DEBUG] [Thread-134854] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:21:23.870 [DEBUG] [Thread-134854] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:21:23.870 [DEBUG] [Thread-134854] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:21:23.870 [DEBUG] [Thread-134854] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:21:23.870 [DEBUG] [Thread-134854] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:21:23.870 [DEBUG] [Thread-134854] [transport.py] [_log()] Compression: none
2025-12-31T21:21:23.871 [DEBUG] [Thread-134854] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:21:23.887 [DEBUG] [Thread-134854] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:21:23.887 [DEBUG] [Thread-134854] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:21:23.888 [DEBUG] [Thread-134854] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T21:21:23.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T21:21:23.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:21:23.890 [DEBUG] [Thread-134854] [transport.py] [_log()] userauth is OK
2025-12-31T21:21:23.890 [DEBUG] [Thread-134854] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:21:23.890 [DEBUG] [Thread-134854] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:21:23.890 [DEBUG] [Thread-134854] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T21:21:23.890 [DEBUG] [Thread-134854] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:21:23.909 [INFO] [Thread-134854] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:21:23.910 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:21:24.506 [DEBUG] [Thread-134854] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:21:24.506 [DEBUG] [Thread-134854] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:21:24.506 [DEBUG] [Thread-134854] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T21:21:24.547 [DEBUG] [Thread-134854] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:21:24.547 [DEBUG] [Thread-134854] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:21:24.550 [DEBUG] [Thread-134854] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:21:24.558 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:21:24.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T21:21:24.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T21:21:24.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T21:21:24.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:21:24.569 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T21:21:24.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:21:24.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:21:24.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T21:21:24.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.806040 -999.00  +17.20   6.90     66  +10.90 1 2 1 1 1     0    0 6.26 -9.58 Z.ESW 8.2 6.9 226.8 14.9 18.3 -19.3 18.1 -19.4 17.9 -17.4 18.3 -17.5
2025-12-31T21:21:24.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T21:21:24.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T21:21:24.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.806040
2025-12-31T21:21:24.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T21:21:24.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T21:21:24.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T21:21:24.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T21:21:24.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T21:21:24.578 [DEBUG] [Thread-134854] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:21:24.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T21:21:17', tmtdew=6.86, humidity=63.67, cloud=0.0, wind=19.37, temperature=16.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T21:21:17', seeing=1.59, atlas_timestamp='2025-12-31T19:20:41.856', atlas_cloud=2, atlas_rain=1, zp_data=[0.13625000000000043, 0.16125000000000078, 0.12925000000000075, 0.13599999999999923, 0.17249999999999943, 0.3702500000000004, nan, nan, 0.28449999999999953, 0.12300000000000111, 0.17824999999999847, 0.16000000000000014, 0.20699999999999896, 0.24825000000000053, nan, nan, 0.2997499999999995, 0.22749999999999915, 0.21399999999999864, 0.5942499999999988, 0.36549999999999727, 0.2807499999999976, nan, -1.2372499999999995, 0.19899999999999984, 0.14649999999999963, 0.4002499999999998, nan, nan, 0.3260000000000014, -2.039999999999999, -1.7929999999999993, -1.2082500000000014], zp_timestamp='2025-12-31T19:19:00')
2025-12-31T21:21:24.665 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T21:21:24.676 [DEBUG] [Thread-134857] [transport.py] [_log()] starting thread (client mode): 0xb1747d00
2025-12-31T21:21:24.677 [DEBUG] [Thread-134857] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:21:24.694 [DEBUG] [Thread-134857] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T21:21:24.695 [INFO] [Thread-134857] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T21:21:24.703 [DEBUG] [Thread-134857] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:21:24.704 [DEBUG] [Thread-134857] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T21:21:24.704 [DEBUG] [Thread-134857] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:21:24.704 [DEBUG] [Thread-134857] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:21:24.704 [DEBUG] [Thread-134857] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:21:24.704 [DEBUG] [Thread-134857] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:21:24.704 [DEBUG] [Thread-134857] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:21:24.704 [DEBUG] [Thread-134857] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:21:24.705 [DEBUG] [Thread-134857] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:21:24.705 [DEBUG] [Thread-134857] [transport.py] [_log()] client lang: <none>
2025-12-31T21:21:24.705 [DEBUG] [Thread-134857] [transport.py] [_log()] server lang: <none>
2025-12-31T21:21:24.705 [DEBUG] [Thread-134857] [transport.py] [_log()] kex follows: False
2025-12-31T21:21:24.705 [DEBUG] [Thread-134857] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:21:24.705 [DEBUG] [Thread-134857] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:21:24.705 [DEBUG] [Thread-134857] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:21:24.705 [DEBUG] [Thread-134857] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:21:24.706 [DEBUG] [Thread-134857] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:21:24.706 [DEBUG] [Thread-134857] [transport.py] [_log()] Compression: none
2025-12-31T21:21:24.706 [DEBUG] [Thread-134857] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:21:24.762 [DEBUG] [Thread-134857] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:21:24.763 [DEBUG] [Thread-134857] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:21:24.764 [DEBUG] [Thread-134857] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T21:21:24.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T21:21:24.765 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:21:24.818 [DEBUG] [Thread-134857] [transport.py] [_log()] userauth is OK
2025-12-31T21:21:24.819 [DEBUG] [Thread-134857] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:21:24.819 [DEBUG] [Thread-134857] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:21:24.819 [DEBUG] [Thread-134857] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T21:21:24.819 [DEBUG] [Thread-134857] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:21:24.837 [INFO] [Thread-134857] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:21:24.838 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T21:21:24.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:21:25.695 [DEBUG] [Thread-134857] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:21:25.695 [DEBUG] [Thread-134857] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:21:25.745 [DEBUG] [Thread-134857] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:21:25.746 [DEBUG] [Thread-134857] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:21:25.755 [DEBUG] [Thread-134857] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:21:25.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:21:25.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T21:21: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') -> 00000000
2025-12-31T21:21:25.783 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:21:25.783 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:21:25.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:21:25.794 [DEBUG] [Thread-134857] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:21:38.558 [DEBUG] [Thread-134859 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:21:43.087 [DEBUG] [Thread-134860 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:21:53.614 [DEBUG] [Thread-134861 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:21:55.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T21:21:55.815 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T21:21:55.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-12-31T21:21:56.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 21, 21, 49), 6.78, 64.29, 0.0, 18.6, 16.81, 0, 0, 0, 2, 0, 0),)
2025-12-31T21:21:56.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 21:21:49
2025-12-31T21:21:56.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T21:21:56.827 [DEBUG] [Thread-134862] [transport.py] [_log()] starting thread (client mode): 0xb17841c0
2025-12-31T21:21:56.827 [DEBUG] [Thread-134862] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:21:56.847 [DEBUG] [Thread-134862] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T21:21:56.847 [INFO] [Thread-134862] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T21:21:56.856 [DEBUG] [Thread-134862] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:21:56.856 [DEBUG] [Thread-134862] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T21:21:56.856 [DEBUG] [Thread-134862] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:21:56.856 [DEBUG] [Thread-134862] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:21:56.857 [DEBUG] [Thread-134862] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:21:56.857 [DEBUG] [Thread-134862] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:21:56.857 [DEBUG] [Thread-134862] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:21:56.857 [DEBUG] [Thread-134862] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:21:56.857 [DEBUG] [Thread-134862] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:21:56.857 [DEBUG] [Thread-134862] [transport.py] [_log()] client lang: <none>
2025-12-31T21:21:56.857 [DEBUG] [Thread-134862] [transport.py] [_log()] server lang: <none>
2025-12-31T21:21:56.857 [DEBUG] [Thread-134862] [transport.py] [_log()] kex follows: False
2025-12-31T21:21:56.857 [DEBUG] [Thread-134862] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:21:56.857 [DEBUG] [Thread-134862] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:21:56.857 [DEBUG] [Thread-134862] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:21:56.857 [DEBUG] [Thread-134862] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:21:56.857 [DEBUG] [Thread-134862] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:21:56.857 [DEBUG] [Thread-134862] [transport.py] [_log()] Compression: none
2025-12-31T21:21:56.857 [DEBUG] [Thread-134862] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:21:56.875 [DEBUG] [Thread-134862] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:21:56.875 [DEBUG] [Thread-134862] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:21:56.876 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T21:21:56.876 [DEBUG] [Thread-134862] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T21:21:56.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:21:56.878 [DEBUG] [Thread-134862] [transport.py] [_log()] userauth is OK
2025-12-31T21:21:56.879 [DEBUG] [Thread-134862] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:21:56.879 [DEBUG] [Thread-134862] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:21:56.879 [DEBUG] [Thread-134862] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T21:21:56.879 [DEBUG] [Thread-134862] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:21:56.910 [INFO] [Thread-134862] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:21:56.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:21:57.534 [DEBUG] [Thread-134862] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:21:57.534 [DEBUG] [Thread-134862] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:21:57.534 [DEBUG] [Thread-134862] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T21:21:57.575 [DEBUG] [Thread-134862] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:21:57.575 [DEBUG] [Thread-134862] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:21:57.577 [DEBUG] [Thread-134862] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:21:57.588 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:21:57.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T21:21:57.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T21:21:57.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T21:21:57.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:21:57.598 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T21:21:57.598 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:21:57.598 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:21:57.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T21:21:57.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.806388 -999.00  +17.10  18.00     66  +10.90 1 2 1 1 1     0    0 6.21 -11.19 Z.ESW 21.6 18.0 203.4 23.2 18.2 -19.5 18.1 -20.3 17.9 -17.7 18.2 -17.5
2025-12-31T21:21:57.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T21:21:57.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T21:21:57.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.806388
2025-12-31T21:21:57.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T21:21:57.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T21:21:57.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T21:21:57.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T21:21:57.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T21:21:57.600 [DEBUG] [Thread-134862] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:21:57.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T21:21:49', tmtdew=6.78, humidity=64.29, cloud=0.0, wind=18.6, temperature=16.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T21:21:49', seeing=1.41, atlas_timestamp='2025-12-31T19:21:11.923', atlas_cloud=2, atlas_rain=1, zp_data=[0.13625000000000043, 0.16125000000000078, 0.12925000000000075, 0.13599999999999923, 0.17249999999999943, 0.3702500000000004, nan, nan, 0.28449999999999953, 0.12300000000000111, 0.17824999999999847, 0.16000000000000014, 0.20699999999999896, 0.24825000000000053, nan, nan, 0.2997499999999995, 0.22749999999999915, 0.21399999999999864, 0.5942499999999988, 0.36549999999999727, 0.2807499999999976, nan, -1.2372499999999995, 0.19899999999999984, 0.14649999999999963, 0.4002499999999998, nan, nan, 0.3260000000000014, -2.039999999999999, -1.7929999999999993, -1.2082500000000014], zp_timestamp='2025-12-31T19:19:00')
2025-12-31T21:21:57.684 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T21:21:57.699 [DEBUG] [Thread-134865] [transport.py] [_log()] starting thread (client mode): 0xb1764220
2025-12-31T21:21:57.699 [DEBUG] [Thread-134865] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:21:57.714 [DEBUG] [Thread-134865] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T21:21:57.714 [INFO] [Thread-134865] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T21:21:57.722 [DEBUG] [Thread-134865] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:21:57.722 [DEBUG] [Thread-134865] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T21:21:57.722 [DEBUG] [Thread-134865] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:21:57.722 [DEBUG] [Thread-134865] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:21:57.722 [DEBUG] [Thread-134865] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:21:57.722 [DEBUG] [Thread-134865] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:21:57.722 [DEBUG] [Thread-134865] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:21:57.722 [DEBUG] [Thread-134865] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:21:57.723 [DEBUG] [Thread-134865] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:21:57.723 [DEBUG] [Thread-134865] [transport.py] [_log()] client lang: <none>
2025-12-31T21:21:57.723 [DEBUG] [Thread-134865] [transport.py] [_log()] server lang: <none>
2025-12-31T21:21:57.723 [DEBUG] [Thread-134865] [transport.py] [_log()] kex follows: False
2025-12-31T21:21:57.723 [DEBUG] [Thread-134865] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:21:57.723 [DEBUG] [Thread-134865] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:21:57.723 [DEBUG] [Thread-134865] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:21:57.723 [DEBUG] [Thread-134865] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:21:57.723 [DEBUG] [Thread-134865] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:21:57.723 [DEBUG] [Thread-134865] [transport.py] [_log()] Compression: none
2025-12-31T21:21:57.723 [DEBUG] [Thread-134865] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:21:57.781 [DEBUG] [Thread-134865] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:21:57.782 [DEBUG] [Thread-134865] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:21:57.782 [DEBUG] [Thread-134865] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T21:21:57.782 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T21:21:57.783 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:21:57.838 [DEBUG] [Thread-134865] [transport.py] [_log()] userauth is OK
2025-12-31T21:21:57.838 [DEBUG] [Thread-134865] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:21:57.838 [DEBUG] [Thread-134865] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:21:57.838 [DEBUG] [Thread-134865] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T21:21:57.838 [DEBUG] [Thread-134865] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:21:57.856 [INFO] [Thread-134865] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:21:57.856 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T21:21:57.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:21:58.674 [DEBUG] [Thread-134865] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:21:58.674 [DEBUG] [Thread-134865] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:21:58.722 [DEBUG] [Thread-134865] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:21:58.722 [DEBUG] [Thread-134865] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:21:58.732 [DEBUG] [Thread-134865] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:21:58.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:21:58.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T21:21:58.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T21:21:58.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:21:58.760 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:21:58.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:21:58.769 [DEBUG] [Thread-134865] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:22:00.565 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:22:00.566 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:22:08.652 [DEBUG] [Thread-134867 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:22:23.705 [DEBUG] [Thread-134868 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:22:28.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T21:22:28.791 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T21:22:28.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T21:22:29.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 21, 22, 21), 6.76, 64.36, 0.0, 19.18, 16.81, 0, 0, 0, 2, 0, 0),)
2025-12-31T21:22:29.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 21:22:21
2025-12-31T21:22:29.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T21:22:29.829 [DEBUG] [Thread-134869] [transport.py] [_log()] starting thread (client mode): 0xb1776980
2025-12-31T21:22:29.830 [DEBUG] [Thread-134869] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:22:29.850 [DEBUG] [Thread-134869] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T21:22:29.850 [INFO] [Thread-134869] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T21:22:29.853 [DEBUG] [Thread-134869] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:22:29.853 [DEBUG] [Thread-134869] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T21:22:29.853 [DEBUG] [Thread-134869] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:22:29.853 [DEBUG] [Thread-134869] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:22:29.853 [DEBUG] [Thread-134869] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:22:29.853 [DEBUG] [Thread-134869] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:22:29.853 [DEBUG] [Thread-134869] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:22:29.853 [DEBUG] [Thread-134869] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:22:29.853 [DEBUG] [Thread-134869] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:22:29.853 [DEBUG] [Thread-134869] [transport.py] [_log()] client lang: <none>
2025-12-31T21:22:29.853 [DEBUG] [Thread-134869] [transport.py] [_log()] server lang: <none>
2025-12-31T21:22:29.853 [DEBUG] [Thread-134869] [transport.py] [_log()] kex follows: False
2025-12-31T21:22:29.853 [DEBUG] [Thread-134869] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:22:29.853 [DEBUG] [Thread-134869] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:22:29.853 [DEBUG] [Thread-134869] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:22:29.853 [DEBUG] [Thread-134869] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:22:29.853 [DEBUG] [Thread-134869] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:22:29.853 [DEBUG] [Thread-134869] [transport.py] [_log()] Compression: none
2025-12-31T21:22:29.853 [DEBUG] [Thread-134869] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:22:29.867 [DEBUG] [Thread-134869] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:22:29.867 [DEBUG] [Thread-134869] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:22:29.867 [DEBUG] [Thread-134869] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T21:22:29.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T21:22:29.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:22:29.870 [DEBUG] [Thread-134869] [transport.py] [_log()] userauth is OK
2025-12-31T21:22:29.870 [DEBUG] [Thread-134869] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:22:29.870 [DEBUG] [Thread-134869] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:22:29.870 [DEBUG] [Thread-134869] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T21:22:29.870 [DEBUG] [Thread-134869] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:22:29.879 [INFO] [Thread-134869] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:22:29.879 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:22:30.512 [DEBUG] [Thread-134869] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:22:30.512 [DEBUG] [Thread-134869] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:22:30.512 [DEBUG] [Thread-134869] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T21:22:30.554 [DEBUG] [Thread-134869] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:22:30.554 [DEBUG] [Thread-134869] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:22:30.556 [DEBUG] [Thread-134869] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:22:30.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:22:30.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T21:22:30.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T21:22:30.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T21:22:30.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:22:30.577 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T21:22:30.578 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:22:30.578 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:22:30.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T21:22:30.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.806735 -999.00  +17.00   8.91     67  +10.90 1 2 1 1 1     0    0 6.22 -13.07 Z.ESw 11.0 8.9 217.4 26.0 18.2 -19.2 18.1 -18.9 17.9 -17.1 18.2 -17.4
2025-12-31T21:22:30.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T21:22:30.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T21:22:30.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.806735
2025-12-31T21:22:30.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T21:22:30.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T21:22:30.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T21:22:30.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T21:22:30.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T21:22:30.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T21:22:21', tmtdew=6.76, humidity=64.36, cloud=0.0, wind=19.18, temperature=16.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T21:22:21', seeing=1.64, atlas_timestamp='2025-12-31T19:21:41.904', atlas_cloud=2, atlas_rain=1, zp_data=[0.13625000000000043, 0.16125000000000078, 0.12925000000000075, 0.13599999999999923, 0.17249999999999943, 0.3702500000000004, nan, nan, 0.28449999999999953, 0.12300000000000111, 0.17824999999999847, 0.16000000000000014, 0.20699999999999896, 0.24825000000000053, nan, nan, 0.2997499999999995, 0.22749999999999915, 0.21399999999999864, 0.5942499999999988, 0.36549999999999727, 0.2807499999999976, nan, -1.2372499999999995, 0.19899999999999984, 0.14649999999999963, 0.4002499999999998, nan, nan, 0.3260000000000014, -2.039999999999999, -1.7929999999999993, -1.2082500000000014], zp_timestamp='2025-12-31T19:19:00')
2025-12-31T21:22:30.580 [DEBUG] [Thread-134869] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:22:30.652 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T21:22:30.664 [DEBUG] [Thread-134872] [transport.py] [_log()] starting thread (client mode): 0xb17768c0
2025-12-31T21:22:30.664 [DEBUG] [Thread-134872] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:22:30.679 [DEBUG] [Thread-134872] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T21:22:30.679 [INFO] [Thread-134872] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T21:22:30.687 [DEBUG] [Thread-134872] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:22:30.687 [DEBUG] [Thread-134872] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T21:22:30.687 [DEBUG] [Thread-134872] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:22:30.687 [DEBUG] [Thread-134872] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:22:30.687 [DEBUG] [Thread-134872] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:22:30.687 [DEBUG] [Thread-134872] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:22:30.687 [DEBUG] [Thread-134872] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:22:30.687 [DEBUG] [Thread-134872] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:22:30.687 [DEBUG] [Thread-134872] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:22:30.687 [DEBUG] [Thread-134872] [transport.py] [_log()] client lang: <none>
2025-12-31T21:22:30.687 [DEBUG] [Thread-134872] [transport.py] [_log()] server lang: <none>
2025-12-31T21:22:30.687 [DEBUG] [Thread-134872] [transport.py] [_log()] kex follows: False
2025-12-31T21:22:30.687 [DEBUG] [Thread-134872] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:22:30.687 [DEBUG] [Thread-134872] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:22:30.687 [DEBUG] [Thread-134872] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:22:30.687 [DEBUG] [Thread-134872] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:22:30.687 [DEBUG] [Thread-134872] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:22:30.687 [DEBUG] [Thread-134872] [transport.py] [_log()] Compression: none
2025-12-31T21:22:30.687 [DEBUG] [Thread-134872] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:22:30.748 [DEBUG] [Thread-134872] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:22:30.749 [DEBUG] [Thread-134872] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:22:30.749 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T21:22:30.749 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:22:30.749 [DEBUG] [Thread-134872] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T21:22:30.805 [DEBUG] [Thread-134872] [transport.py] [_log()] userauth is OK
2025-12-31T21:22:30.805 [DEBUG] [Thread-134872] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:22:30.805 [DEBUG] [Thread-134872] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:22:30.805 [DEBUG] [Thread-134872] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T21:22:30.805 [DEBUG] [Thread-134872] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:22:30.819 [INFO] [Thread-134872] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:22:30.820 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T21:22:30.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:22:31.674 [DEBUG] [Thread-134872] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:22:31.675 [DEBUG] [Thread-134872] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:22:31.724 [DEBUG] [Thread-134872] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:22:31.725 [DEBUG] [Thread-134872] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:22:31.736 [DEBUG] [Thread-134872] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:22:31.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:22: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')
2025-12-31T21:22:31.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T21:22:31.763 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:22:31.764 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:22:31.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:22:31.772 [DEBUG] [Thread-134872] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:22:38.736 [DEBUG] [Thread-134874 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:22:43.178 [DEBUG] [Thread-134875 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:22:53.794 [DEBUG] [Thread-134876 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:23:00.766 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:23:00.767 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:23:01.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T21:23:01.774 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T21:23:01.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T21:23:02.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 21, 22, 53), 6.76, 64.32, 0.0, 22.14, 16.73, 0, 0, 0, 2, 0, 0),)
2025-12-31T21:23:02.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 21:22:53
2025-12-31T21:23:02.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T21:23:02.750 [DEBUG] [Thread-134877] [transport.py] [_log()] starting thread (client mode): 0xb1764ca0
2025-12-31T21:23:02.750 [DEBUG] [Thread-134877] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:23:02.771 [DEBUG] [Thread-134877] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T21:23:02.771 [INFO] [Thread-134877] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T21:23:02.773 [DEBUG] [Thread-134877] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:23:02.773 [DEBUG] [Thread-134877] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T21:23:02.773 [DEBUG] [Thread-134877] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:23:02.773 [DEBUG] [Thread-134877] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:23:02.773 [DEBUG] [Thread-134877] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:23:02.773 [DEBUG] [Thread-134877] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:23:02.773 [DEBUG] [Thread-134877] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:23:02.773 [DEBUG] [Thread-134877] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:23:02.773 [DEBUG] [Thread-134877] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:23:02.773 [DEBUG] [Thread-134877] [transport.py] [_log()] client lang: <none>
2025-12-31T21:23:02.773 [DEBUG] [Thread-134877] [transport.py] [_log()] server lang: <none>
2025-12-31T21:23:02.773 [DEBUG] [Thread-134877] [transport.py] [_log()] kex follows: False
2025-12-31T21:23:02.773 [DEBUG] [Thread-134877] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:23:02.773 [DEBUG] [Thread-134877] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:23:02.773 [DEBUG] [Thread-134877] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:23:02.773 [DEBUG] [Thread-134877] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:23:02.773 [DEBUG] [Thread-134877] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:23:02.773 [DEBUG] [Thread-134877] [transport.py] [_log()] Compression: none
2025-12-31T21:23:02.773 [DEBUG] [Thread-134877] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:23:02.785 [DEBUG] [Thread-134877] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:23:02.786 [DEBUG] [Thread-134877] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:23:02.795 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T21:23:02.796 [DEBUG] [Thread-134877] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T21:23:02.797 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:23:02.798 [DEBUG] [Thread-134877] [transport.py] [_log()] userauth is OK
2025-12-31T21:23:02.798 [DEBUG] [Thread-134877] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:23:02.798 [DEBUG] [Thread-134877] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:23:02.798 [DEBUG] [Thread-134877] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T21:23:02.799 [DEBUG] [Thread-134877] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:23:02.824 [INFO] [Thread-134877] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:23:02.824 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:23:03.510 [DEBUG] [Thread-134877] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:23:03.510 [DEBUG] [Thread-134877] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:23:03.510 [DEBUG] [Thread-134877] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T21:23:03.551 [DEBUG] [Thread-134877] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:23:03.551 [DEBUG] [Thread-134877] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:23:03.554 [DEBUG] [Thread-134877] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:23:03.565 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:23:03.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T21:23:03.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T21:23:03.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T21:23:03.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:23:03.574 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T21:23:03.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:23:03.574 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:23:03.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T21:23:03.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.807082 -999.00  +17.00  11.48     67  +10.90 1 2 1 1 1     0    0 5.95 -15.76 Z.ESw 20.0 11.5 208.4 21.1 18.2 -19.1 18.0 -18.8 17.9 -16.9 18.2 -16.9
2025-12-31T21:23:03.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T21:23:03.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T21:23:03.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.807082
2025-12-31T21:23:03.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T21:23:03.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T21:23:03.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T21:23:03.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T21:23:03.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T21:23:03.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T21:22:53', tmtdew=6.76, humidity=64.32, cloud=0.0, wind=22.14, temperature=16.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T21:22:53', seeing=1.75, atlas_timestamp='2025-12-31T19:22:11.885', atlas_cloud=2, atlas_rain=1, zp_data=[0.13625000000000043, 0.16125000000000078, 0.12925000000000075, 0.13599999999999923, 0.17249999999999943, 0.3702500000000004, nan, nan, 0.28449999999999953, 0.12300000000000111, 0.17824999999999847, 0.16000000000000014, 0.20699999999999896, 0.24825000000000053, nan, nan, 0.2997499999999995, 0.22749999999999915, 0.21399999999999864, 0.5942499999999988, 0.36549999999999727, 0.2807499999999976, nan, -1.2372499999999995, 0.19899999999999984, 0.14649999999999963, 0.4002499999999998, nan, nan, 0.3260000000000014, -2.039999999999999, -1.7929999999999993, -1.2082500000000014], zp_timestamp='2025-12-31T19:19:00')
2025-12-31T21:23:03.577 [DEBUG] [Thread-134877] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:23:03.664 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T21:23:03.676 [DEBUG] [Thread-134880] [transport.py] [_log()] starting thread (client mode): 0xb6bbad70
2025-12-31T21:23:03.676 [DEBUG] [Thread-134880] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:23:03.690 [DEBUG] [Thread-134880] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T21:23:03.690 [INFO] [Thread-134880] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T21:23:03.698 [DEBUG] [Thread-134880] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:23:03.698 [DEBUG] [Thread-134880] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T21:23:03.698 [DEBUG] [Thread-134880] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:23:03.698 [DEBUG] [Thread-134880] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:23:03.698 [DEBUG] [Thread-134880] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:23:03.698 [DEBUG] [Thread-134880] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:23:03.698 [DEBUG] [Thread-134880] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:23:03.699 [DEBUG] [Thread-134880] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:23:03.699 [DEBUG] [Thread-134880] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:23:03.699 [DEBUG] [Thread-134880] [transport.py] [_log()] client lang: <none>
2025-12-31T21:23:03.699 [DEBUG] [Thread-134880] [transport.py] [_log()] server lang: <none>
2025-12-31T21:23:03.699 [DEBUG] [Thread-134880] [transport.py] [_log()] kex follows: False
2025-12-31T21:23:03.699 [DEBUG] [Thread-134880] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:23:03.699 [DEBUG] [Thread-134880] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:23:03.699 [DEBUG] [Thread-134880] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:23:03.699 [DEBUG] [Thread-134880] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:23:03.699 [DEBUG] [Thread-134880] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:23:03.699 [DEBUG] [Thread-134880] [transport.py] [_log()] Compression: none
2025-12-31T21:23:03.699 [DEBUG] [Thread-134880] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:23:03.765 [DEBUG] [Thread-134880] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:23:03.765 [DEBUG] [Thread-134880] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:23:03.766 [DEBUG] [Thread-134880] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T21:23:03.766 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T21:23:03.766 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:23:03.825 [DEBUG] [Thread-134880] [transport.py] [_log()] userauth is OK
2025-12-31T21:23:03.825 [DEBUG] [Thread-134880] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:23:03.825 [DEBUG] [Thread-134880] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:23:03.826 [DEBUG] [Thread-134880] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T21:23:03.826 [DEBUG] [Thread-134880] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:23:03.846 [INFO] [Thread-134880] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:23:03.847 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T21:23:03.847 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:23:04.695 [DEBUG] [Thread-134880] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:23:04.696 [DEBUG] [Thread-134880] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:23:04.743 [DEBUG] [Thread-134880] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:23:04.743 [DEBUG] [Thread-134880] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:23:04.751 [DEBUG] [Thread-134880] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:23:04.759 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:23:04.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-12-31T21:23:04.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T21:23:04.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:23:04.775 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:23:04.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:23:04.782 [DEBUG] [Thread-134880] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:23:08.834 [DEBUG] [Thread-134882 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:23:23.876 [DEBUG] [Thread-134883 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:23:34.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T21:23:34.805 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T21:23:34.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T21:23:35.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 21, 23, 25), 6.75, 64.41, 0.0, 21.53, 16.8, 0, 0, 0, 2, 0, 0),)
2025-12-31T21:23:35.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 21:23:25
2025-12-31T21:23:35.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T21:23:35.790 [DEBUG] [Thread-134884] [transport.py] [_log()] starting thread (client mode): 0xb6bbb6d0
2025-12-31T21:23:35.790 [DEBUG] [Thread-134884] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:23:35.811 [DEBUG] [Thread-134884] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T21:23:35.811 [INFO] [Thread-134884] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T21:23:35.814 [DEBUG] [Thread-134884] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:23:35.814 [DEBUG] [Thread-134884] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T21:23:35.814 [DEBUG] [Thread-134884] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:23:35.814 [DEBUG] [Thread-134884] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:23:35.814 [DEBUG] [Thread-134884] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:23:35.814 [DEBUG] [Thread-134884] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:23:35.814 [DEBUG] [Thread-134884] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:23:35.814 [DEBUG] [Thread-134884] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:23:35.814 [DEBUG] [Thread-134884] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:23:35.814 [DEBUG] [Thread-134884] [transport.py] [_log()] client lang: <none>
2025-12-31T21:23:35.814 [DEBUG] [Thread-134884] [transport.py] [_log()] server lang: <none>
2025-12-31T21:23:35.814 [DEBUG] [Thread-134884] [transport.py] [_log()] kex follows: False
2025-12-31T21:23:35.814 [DEBUG] [Thread-134884] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:23:35.814 [DEBUG] [Thread-134884] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:23:35.814 [DEBUG] [Thread-134884] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:23:35.814 [DEBUG] [Thread-134884] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:23:35.814 [DEBUG] [Thread-134884] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:23:35.814 [DEBUG] [Thread-134884] [transport.py] [_log()] Compression: none
2025-12-31T21:23:35.814 [DEBUG] [Thread-134884] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:23:35.831 [DEBUG] [Thread-134884] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:23:35.831 [DEBUG] [Thread-134884] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:23:35.832 [DEBUG] [Thread-134884] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T21:23:35.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T21:23:35.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:23:35.834 [DEBUG] [Thread-134884] [transport.py] [_log()] userauth is OK
2025-12-31T21:23:35.834 [DEBUG] [Thread-134884] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:23:35.834 [DEBUG] [Thread-134884] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:23:35.834 [DEBUG] [Thread-134884] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T21:23:35.834 [DEBUG] [Thread-134884] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:23:35.848 [INFO] [Thread-134884] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:23:35.849 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:23:36.476 [DEBUG] [Thread-134884] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:23:36.477 [DEBUG] [Thread-134884] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:23:36.477 [DEBUG] [Thread-134884] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T21:23:36.517 [DEBUG] [Thread-134884] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:23:36.517 [DEBUG] [Thread-134884] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:23:36.521 [DEBUG] [Thread-134884] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:23:36.532 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:23:36.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T21:23:36.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T21:23:36.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T21:23:36.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:23:36.544 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T21:23:36.544 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:23:36.544 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:23:36.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T21:23:36.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.807429 -999.00  +17.00  14.26     67  +10.90 1 2 1 1 1     0    0 5.92 -16.38 Z.ES. 12.2 14.3 224.8 22.4 18.1 -18.8 18.0 -18.4 17.8 -16.5 18.2 -16.8
2025-12-31T21:23:36.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T21:23:36.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T21:23:36.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.807429
2025-12-31T21:23:36.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T21:23:36.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T21:23:36.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T21:23:36.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T21:23:36.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T21:23:36.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T21:23:25', tmtdew=6.75, humidity=64.41, cloud=0.0, wind=21.53, temperature=16.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T21:23:25', seeing=1.35, atlas_timestamp='2025-12-31T19:22:41.866', atlas_cloud=2, atlas_rain=1, zp_data=[0.13625000000000043, 0.16125000000000078, 0.12925000000000075, 0.13599999999999923, 0.17249999999999943, 0.3702500000000004, nan, nan, 0.28449999999999953, 0.12300000000000111, 0.17824999999999847, 0.16000000000000014, 0.20699999999999896, 0.24825000000000053, nan, nan, 0.2997499999999995, 0.22749999999999915, 0.21399999999999864, 0.5942499999999988, 0.36549999999999727, 0.2807499999999976, nan, -1.2372499999999995, 0.19899999999999984, 0.14649999999999963, 0.4002499999999998, nan, nan, 0.3260000000000014, -2.039999999999999, -1.7929999999999993, -1.2082500000000014], zp_timestamp='2025-12-31T19:19:00')
2025-12-31T21:23:36.547 [DEBUG] [Thread-134884] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:23:36.622 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T21:23:36.634 [DEBUG] [Thread-134887] [transport.py] [_log()] starting thread (client mode): 0xb1764220
2025-12-31T21:23:36.634 [DEBUG] [Thread-134887] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:23:36.649 [DEBUG] [Thread-134887] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T21:23:36.649 [INFO] [Thread-134887] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T21:23:36.657 [DEBUG] [Thread-134887] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:23:36.657 [DEBUG] [Thread-134887] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T21:23:36.657 [DEBUG] [Thread-134887] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:23:36.657 [DEBUG] [Thread-134887] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:23:36.657 [DEBUG] [Thread-134887] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:23:36.657 [DEBUG] [Thread-134887] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:23:36.657 [DEBUG] [Thread-134887] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:23:36.657 [DEBUG] [Thread-134887] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:23:36.657 [DEBUG] [Thread-134887] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:23:36.657 [DEBUG] [Thread-134887] [transport.py] [_log()] client lang: <none>
2025-12-31T21:23:36.658 [DEBUG] [Thread-134887] [transport.py] [_log()] server lang: <none>
2025-12-31T21:23:36.658 [DEBUG] [Thread-134887] [transport.py] [_log()] kex follows: False
2025-12-31T21:23:36.658 [DEBUG] [Thread-134887] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:23:36.658 [DEBUG] [Thread-134887] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:23:36.658 [DEBUG] [Thread-134887] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:23:36.658 [DEBUG] [Thread-134887] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:23:36.658 [DEBUG] [Thread-134887] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:23:36.658 [DEBUG] [Thread-134887] [transport.py] [_log()] Compression: none
2025-12-31T21:23:36.658 [DEBUG] [Thread-134887] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:23:36.713 [DEBUG] [Thread-134887] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:23:36.714 [DEBUG] [Thread-134887] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:23:36.715 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T21:23:36.715 [DEBUG] [Thread-134887] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T21:23:36.716 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:23:36.770 [DEBUG] [Thread-134887] [transport.py] [_log()] userauth is OK
2025-12-31T21:23:36.770 [DEBUG] [Thread-134887] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:23:36.770 [DEBUG] [Thread-134887] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:23:36.770 [DEBUG] [Thread-134887] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T21:23:36.770 [DEBUG] [Thread-134887] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:23:36.789 [INFO] [Thread-134887] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:23:36.789 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T21:23:36.790 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:23:37.626 [DEBUG] [Thread-134887] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:23:37.626 [DEBUG] [Thread-134887] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:23:37.674 [DEBUG] [Thread-134887] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:23:37.674 [DEBUG] [Thread-134887] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:23:37.682 [DEBUG] [Thread-134887] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:23:37.690 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:23:37.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T21:23:37.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T21:23:37.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:23:37.706 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:23:37.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:23:37.714 [DEBUG] [Thread-134887] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:23:38.909 [DEBUG] [Thread-134889 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:23:43.262 [DEBUG] [Thread-134890 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:23:53.955 [DEBUG] [Thread-134891 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:24:00.968 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:24:00.969 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:24:07.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T21:24:07.737 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T21:24:07.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T21:24:08.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 21, 23, 57), 6.75, 64.39, 0.0, 19.46, 16.78, 0, 0, 0, 2, 0, 0),)
2025-12-31T21:24:08.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 21:23:57
2025-12-31T21:24:08.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T21:24:08.727 [DEBUG] [Thread-134892] [transport.py] [_log()] starting thread (client mode): 0xb9593a30
2025-12-31T21:24:08.727 [DEBUG] [Thread-134892] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:24:08.742 [DEBUG] [Thread-134892] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T21:24:08.742 [INFO] [Thread-134892] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T21:24:08.745 [DEBUG] [Thread-134892] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:24:08.745 [DEBUG] [Thread-134892] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T21:24:08.745 [DEBUG] [Thread-134892] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:24:08.745 [DEBUG] [Thread-134892] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:24:08.745 [DEBUG] [Thread-134892] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:24:08.745 [DEBUG] [Thread-134892] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:24:08.745 [DEBUG] [Thread-134892] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:24:08.746 [DEBUG] [Thread-134892] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:24:08.746 [DEBUG] [Thread-134892] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:24:08.746 [DEBUG] [Thread-134892] [transport.py] [_log()] client lang: <none>
2025-12-31T21:24:08.746 [DEBUG] [Thread-134892] [transport.py] [_log()] server lang: <none>
2025-12-31T21:24:08.746 [DEBUG] [Thread-134892] [transport.py] [_log()] kex follows: False
2025-12-31T21:24:08.746 [DEBUG] [Thread-134892] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:24:08.746 [DEBUG] [Thread-134892] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:24:08.746 [DEBUG] [Thread-134892] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:24:08.746 [DEBUG] [Thread-134892] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:24:08.746 [DEBUG] [Thread-134892] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:24:08.746 [DEBUG] [Thread-134892] [transport.py] [_log()] Compression: none
2025-12-31T21:24:08.746 [DEBUG] [Thread-134892] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:24:08.765 [DEBUG] [Thread-134892] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:24:08.766 [DEBUG] [Thread-134892] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:24:08.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T21:24:08.767 [DEBUG] [Thread-134892] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T21:24:08.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:24:08.769 [DEBUG] [Thread-134892] [transport.py] [_log()] userauth is OK
2025-12-31T21:24:08.769 [DEBUG] [Thread-134892] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:24:08.769 [DEBUG] [Thread-134892] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:24:08.769 [DEBUG] [Thread-134892] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T21:24:08.769 [DEBUG] [Thread-134892] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:24:08.784 [INFO] [Thread-134892] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:24:08.785 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:24:08.993 [DEBUG] [Thread-134894 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:24:09.442 [DEBUG] [Thread-134892] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:24:09.443 [DEBUG] [Thread-134892] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:24:09.443 [DEBUG] [Thread-134892] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T21:24:09.484 [DEBUG] [Thread-134892] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:24:09.484 [DEBUG] [Thread-134892] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:24:09.487 [DEBUG] [Thread-134892] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:24:09.498 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:24:09.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T21:24:09.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T21:24:09.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T21:24:09.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:24:09.509 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T21:24:09.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:24:09.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:24:09.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T21:24:09.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.808124 -999.00  +17.00  12.89     67  +10.90 1 2 1 1 1     0    0 5.93 -18.42 Z.ES. 10.3 12.9 229.5 21.8 18.1 -18.1 18.0 -18.2 17.8 -16.0 18.2 -16.2
2025-12-31T21:24:09.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T21:24:09.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T21:24:09.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.808124
2025-12-31T21:24:09.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T21:24:09.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T21:24:09.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T21:24:09.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T21:24:09.511 [DEBUG] [Thread-134892] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:24:09.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T21:24:09.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T21:23:57', tmtdew=6.75, humidity=64.39, cloud=0.0, wind=19.46, temperature=16.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T21:23:58', seeing=1.35, atlas_timestamp='2025-12-31T19:23:41.914', atlas_cloud=2, atlas_rain=1, zp_data=[0.13625000000000043, 0.16125000000000078, 0.12925000000000075, 0.13599999999999923, 0.17249999999999943, 0.3702500000000004, nan, nan, 0.28449999999999953, 0.12300000000000111, 0.17824999999999847, 0.16000000000000014, 0.20699999999999896, 0.24825000000000053, nan, nan, 0.2997499999999995, 0.22749999999999915, 0.21399999999999864, 0.5942499999999988, 0.36549999999999727, 0.2807499999999976, nan, -1.2372499999999995, 0.19899999999999984, 0.14649999999999963, 0.4002499999999998, nan, nan, 0.3260000000000014, -2.039999999999999, -1.7929999999999993, -1.2082500000000014], zp_timestamp='2025-12-31T19:22:00')
2025-12-31T21:24:09.596 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T21:24:09.607 [DEBUG] [Thread-134896] [transport.py] [_log()] starting thread (client mode): 0xb6bb8310
2025-12-31T21:24:09.607 [DEBUG] [Thread-134896] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:24:09.622 [DEBUG] [Thread-134896] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T21:24:09.622 [INFO] [Thread-134896] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T21:24:09.630 [DEBUG] [Thread-134896] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:24:09.630 [DEBUG] [Thread-134896] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T21:24:09.631 [DEBUG] [Thread-134896] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:24:09.631 [DEBUG] [Thread-134896] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:24:09.631 [DEBUG] [Thread-134896] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:24:09.631 [DEBUG] [Thread-134896] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:24:09.631 [DEBUG] [Thread-134896] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:24:09.631 [DEBUG] [Thread-134896] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:24:09.631 [DEBUG] [Thread-134896] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:24:09.631 [DEBUG] [Thread-134896] [transport.py] [_log()] client lang: <none>
2025-12-31T21:24:09.631 [DEBUG] [Thread-134896] [transport.py] [_log()] server lang: <none>
2025-12-31T21:24:09.632 [DEBUG] [Thread-134896] [transport.py] [_log()] kex follows: False
2025-12-31T21:24:09.632 [DEBUG] [Thread-134896] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:24:09.632 [DEBUG] [Thread-134896] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:24:09.632 [DEBUG] [Thread-134896] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:24:09.632 [DEBUG] [Thread-134896] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:24:09.632 [DEBUG] [Thread-134896] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:24:09.632 [DEBUG] [Thread-134896] [transport.py] [_log()] Compression: none
2025-12-31T21:24:09.633 [DEBUG] [Thread-134896] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:24:09.690 [DEBUG] [Thread-134896] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:24:09.691 [DEBUG] [Thread-134896] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:24:09.692 [DEBUG] [Thread-134896] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T21:24:09.692 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T21:24:09.693 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:24:09.746 [DEBUG] [Thread-134896] [transport.py] [_log()] userauth is OK
2025-12-31T21:24:09.746 [DEBUG] [Thread-134896] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:24:09.747 [DEBUG] [Thread-134896] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:24:09.747 [DEBUG] [Thread-134896] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T21:24:09.747 [DEBUG] [Thread-134896] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:24:09.765 [INFO] [Thread-134896] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:24:09.775 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T21:24:09.775 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:24:10.595 [DEBUG] [Thread-134896] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:24:10.595 [DEBUG] [Thread-134896] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:24:10.643 [DEBUG] [Thread-134896] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:24:10.643 [DEBUG] [Thread-134896] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:24:10.653 [DEBUG] [Thread-134896] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:24:10.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:24:10.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T21:24:10.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T21:24:10.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:24:10.681 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:24:10.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:24:10.689 [DEBUG] [Thread-134896] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:24:24.037 [DEBUG] [Thread-134898 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:24:39.084 [DEBUG] [Thread-134899 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:24:40.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T21:24:40.683 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T21:24:40.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T21:24:41.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 21, 24, 30), 6.74, 64.42, 0.0, 21.12, 16.81, 0, 0, 0, 2, 0, 0),)
2025-12-31T21:24:41.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 21:24:30
2025-12-31T21:24:41.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T21:24:41.650 [DEBUG] [Thread-134900] [transport.py] [_log()] starting thread (client mode): 0xb957bd30
2025-12-31T21:24:41.650 [DEBUG] [Thread-134900] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:24:41.671 [DEBUG] [Thread-134900] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T21:24:41.671 [INFO] [Thread-134900] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T21:24:41.675 [DEBUG] [Thread-134900] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:24:41.675 [DEBUG] [Thread-134900] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T21:24:41.675 [DEBUG] [Thread-134900] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:24:41.675 [DEBUG] [Thread-134900] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:24:41.675 [DEBUG] [Thread-134900] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:24:41.675 [DEBUG] [Thread-134900] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:24:41.675 [DEBUG] [Thread-134900] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:24:41.675 [DEBUG] [Thread-134900] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:24:41.675 [DEBUG] [Thread-134900] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:24:41.675 [DEBUG] [Thread-134900] [transport.py] [_log()] client lang: <none>
2025-12-31T21:24:41.675 [DEBUG] [Thread-134900] [transport.py] [_log()] server lang: <none>
2025-12-31T21:24:41.675 [DEBUG] [Thread-134900] [transport.py] [_log()] kex follows: False
2025-12-31T21:24:41.675 [DEBUG] [Thread-134900] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:24:41.675 [DEBUG] [Thread-134900] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:24:41.675 [DEBUG] [Thread-134900] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:24:41.675 [DEBUG] [Thread-134900] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:24:41.675 [DEBUG] [Thread-134900] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:24:41.676 [DEBUG] [Thread-134900] [transport.py] [_log()] Compression: none
2025-12-31T21:24:41.676 [DEBUG] [Thread-134900] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:24:41.696 [DEBUG] [Thread-134900] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:24:41.697 [DEBUG] [Thread-134900] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:24:41.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T21:24:41.707 [DEBUG] [Thread-134900] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T21:24:41.708 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:24:41.710 [DEBUG] [Thread-134900] [transport.py] [_log()] userauth is OK
2025-12-31T21:24:41.710 [DEBUG] [Thread-134900] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:24:41.710 [DEBUG] [Thread-134900] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:24:41.710 [DEBUG] [Thread-134900] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T21:24:41.710 [DEBUG] [Thread-134900] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:24:41.747 [INFO] [Thread-134900] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:24:41.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:24:42.357 [DEBUG] [Thread-134900] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:24:42.357 [DEBUG] [Thread-134900] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:24:42.358 [DEBUG] [Thread-134900] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T21:24:42.398 [DEBUG] [Thread-134900] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:24:42.398 [DEBUG] [Thread-134900] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:24:42.402 [DEBUG] [Thread-134900] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:24:42.413 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:24:42.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T21:24:42.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T21:24:42.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T21:24:42.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:24:42.426 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T21:24:42.427 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:24:42.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:24:42.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T21:24:42.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.808471 -999.00  +17.00  11.25     67  +10.90 1 2 1 1 1     0    0 5.75 -22.28 Z.ES. 8.7 11.2 214.0 18.9 18.1 -17.9 18.0 -18.0 17.8 -16.0 18.1 -15.9
2025-12-31T21:24:42.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T21:24:42.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T21:24:42.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.808471
2025-12-31T21:24:42.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T21:24:42.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T21:24:42.430 [DEBUG] [Thread-134900] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:24:42.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T21:24:42.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T21:24:42.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T21:24:42.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T21:24:30', tmtdew=6.74, humidity=64.42, cloud=0.0, wind=21.12, temperature=16.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T21:24:30', seeing=1.51, atlas_timestamp='2025-12-31T19:24:11.894', atlas_cloud=2, atlas_rain=1, zp_data=[0.13625000000000043, 0.16125000000000078, 0.12925000000000075, 0.13599999999999923, 0.17249999999999943, 0.3702500000000004, nan, nan, 0.28449999999999953, 0.12300000000000111, 0.17824999999999847, 0.16000000000000014, 0.20699999999999896, 0.24825000000000053, nan, nan, 0.2997499999999995, 0.22749999999999915, 0.21399999999999864, 0.5942499999999988, 0.36549999999999727, 0.2807499999999976, nan, -1.2372499999999995, 0.19899999999999984, 0.14649999999999963, 0.4002499999999998, nan, nan, 0.3260000000000014, -2.039999999999999, -1.7929999999999993, -1.2082500000000014], zp_timestamp='2025-12-31T19:22:00')
2025-12-31T21:24:42.519 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T21:24:42.530 [DEBUG] [Thread-134903] [transport.py] [_log()] starting thread (client mode): 0xb1796860
2025-12-31T21:24:42.531 [DEBUG] [Thread-134903] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:24:42.546 [DEBUG] [Thread-134903] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T21:24:42.546 [INFO] [Thread-134903] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T21:24:42.554 [DEBUG] [Thread-134903] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:24:42.554 [DEBUG] [Thread-134903] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T21:24:42.555 [DEBUG] [Thread-134903] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:24:42.555 [DEBUG] [Thread-134903] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:24:42.555 [DEBUG] [Thread-134903] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:24:42.555 [DEBUG] [Thread-134903] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:24:42.555 [DEBUG] [Thread-134903] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:24:42.555 [DEBUG] [Thread-134903] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:24:42.555 [DEBUG] [Thread-134903] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:24:42.555 [DEBUG] [Thread-134903] [transport.py] [_log()] client lang: <none>
2025-12-31T21:24:42.556 [DEBUG] [Thread-134903] [transport.py] [_log()] server lang: <none>
2025-12-31T21:24:42.556 [DEBUG] [Thread-134903] [transport.py] [_log()] kex follows: False
2025-12-31T21:24:42.556 [DEBUG] [Thread-134903] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:24:42.556 [DEBUG] [Thread-134903] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:24:42.556 [DEBUG] [Thread-134903] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:24:42.556 [DEBUG] [Thread-134903] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:24:42.556 [DEBUG] [Thread-134903] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:24:42.557 [DEBUG] [Thread-134903] [transport.py] [_log()] Compression: none
2025-12-31T21:24:42.557 [DEBUG] [Thread-134903] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:24:42.614 [DEBUG] [Thread-134903] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:24:42.615 [DEBUG] [Thread-134903] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:24:42.616 [DEBUG] [Thread-134903] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T21:24:42.616 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T21:24:42.617 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:24:42.670 [DEBUG] [Thread-134903] [transport.py] [_log()] userauth is OK
2025-12-31T21:24:42.670 [DEBUG] [Thread-134903] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:24:42.671 [DEBUG] [Thread-134903] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:24:42.671 [DEBUG] [Thread-134903] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T21:24:42.671 [DEBUG] [Thread-134903] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:24:42.685 [INFO] [Thread-134903] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:24:42.685 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T21:24:42.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:24:43.349 [DEBUG] [Thread-134905 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:24:43.503 [DEBUG] [Thread-134903] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:24:43.503 [DEBUG] [Thread-134903] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:24:43.551 [DEBUG] [Thread-134903] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:24:43.551 [DEBUG] [Thread-134903] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:24:43.561 [DEBUG] [Thread-134903] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:24:43.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:24:43.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T21:24:43.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-12-31T21:24:43.588 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:24:43.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:24:43.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:24:43.597 [DEBUG] [Thread-134903] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:24:54.120 [DEBUG] [Thread-134906 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:25:01.170 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:25:01.171 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:25:09.166 [DEBUG] [Thread-134907 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:25:13.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T21:25:13.619 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T21:25:13.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-12-31T21:25:14.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 21, 25, 2), 6.74, 64.46, 0.0, 19.89, 16.78, 0, 0, 0, 2, 0, 0),)
2025-12-31T21:25:14.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 21:25:02
2025-12-31T21:25:14.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T21:25:14.592 [DEBUG] [Thread-134908] [transport.py] [_log()] starting thread (client mode): 0xb17948b0
2025-12-31T21:25:14.592 [DEBUG] [Thread-134908] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:25:14.612 [DEBUG] [Thread-134908] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T21:25:14.612 [INFO] [Thread-134908] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T21:25:14.615 [DEBUG] [Thread-134908] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:25:14.615 [DEBUG] [Thread-134908] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T21:25:14.615 [DEBUG] [Thread-134908] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:25:14.615 [DEBUG] [Thread-134908] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:25:14.615 [DEBUG] [Thread-134908] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:25:14.616 [DEBUG] [Thread-134908] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:25:14.616 [DEBUG] [Thread-134908] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:25:14.616 [DEBUG] [Thread-134908] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:25:14.616 [DEBUG] [Thread-134908] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:25:14.616 [DEBUG] [Thread-134908] [transport.py] [_log()] client lang: <none>
2025-12-31T21:25:14.616 [DEBUG] [Thread-134908] [transport.py] [_log()] server lang: <none>
2025-12-31T21:25:14.616 [DEBUG] [Thread-134908] [transport.py] [_log()] kex follows: False
2025-12-31T21:25:14.616 [DEBUG] [Thread-134908] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:25:14.616 [DEBUG] [Thread-134908] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:25:14.616 [DEBUG] [Thread-134908] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:25:14.616 [DEBUG] [Thread-134908] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:25:14.616 [DEBUG] [Thread-134908] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:25:14.616 [DEBUG] [Thread-134908] [transport.py] [_log()] Compression: none
2025-12-31T21:25:14.616 [DEBUG] [Thread-134908] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:25:14.632 [DEBUG] [Thread-134908] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:25:14.633 [DEBUG] [Thread-134908] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:25:14.633 [DEBUG] [Thread-134908] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T21:25:14.634 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T21:25:14.634 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:25:14.635 [DEBUG] [Thread-134908] [transport.py] [_log()] userauth is OK
2025-12-31T21:25:14.635 [DEBUG] [Thread-134908] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:25:14.635 [DEBUG] [Thread-134908] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:25:14.636 [DEBUG] [Thread-134908] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T21:25:14.636 [DEBUG] [Thread-134908] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:25:14.659 [INFO] [Thread-134908] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:25:14.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:25:15.715 [DEBUG] [Thread-134908] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:25:15.715 [DEBUG] [Thread-134908] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:25:15.716 [DEBUG] [Thread-134908] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T21:25:15.756 [DEBUG] [Thread-134908] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:25:15.756 [DEBUG] [Thread-134908] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:25:15.759 [DEBUG] [Thread-134908] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:25:15.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:25:15.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T21:25:15.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T21:25:15.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T21:25:15.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:25:15.780 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T21:25:15.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:25:15.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:25:15.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T21:25:15.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.808818 -999.00  +17.10  14.41     67  +10.90 1 2 1 1 1     0    0 5.69 -26.33 Z.ES. 12.3 14.4 215.9 17.6 18.1 -17.9 18.0 -17.9 17.8 -16.2 18.1 -15.9
2025-12-31T21:25:15.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T21:25:15.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T21:25:15.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.808818
2025-12-31T21:25:15.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T21:25:15.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T21:25:15.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T21:25:15.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T21:25:15.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T21:25:15.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T21:25:02', tmtdew=6.74, humidity=64.46, cloud=0.0, wind=19.89, temperature=16.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T21:25:02', seeing=1.51, atlas_timestamp='2025-12-31T19:24:41.875', atlas_cloud=2, atlas_rain=1, zp_data=[0.13625000000000043, 0.16125000000000078, 0.12925000000000075, 0.13599999999999923, 0.17249999999999943, 0.3702500000000004, nan, nan, 0.28449999999999953, 0.12300000000000111, 0.17824999999999847, 0.16000000000000014, 0.20699999999999896, 0.24825000000000053, nan, nan, 0.2997499999999995, 0.22749999999999915, 0.21399999999999864, 0.5942499999999988, 0.36549999999999727, 0.2807499999999976, nan, -1.2372499999999995, 0.19899999999999984, 0.14649999999999963, 0.4002499999999998, nan, nan, 0.3260000000000014, -2.039999999999999, -1.7929999999999993, -1.2082500000000014], zp_timestamp='2025-12-31T19:22:00')
2025-12-31T21:25:15.782 [DEBUG] [Thread-134908] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:25:15.859 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T21:25:15.871 [DEBUG] [Thread-134911] [transport.py] [_log()] starting thread (client mode): 0xb1795fc0
2025-12-31T21:25:15.871 [DEBUG] [Thread-134911] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:25:15.886 [DEBUG] [Thread-134911] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T21:25:15.886 [INFO] [Thread-134911] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T21:25:15.894 [DEBUG] [Thread-134911] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:25:15.894 [DEBUG] [Thread-134911] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T21:25:15.894 [DEBUG] [Thread-134911] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:25:15.894 [DEBUG] [Thread-134911] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:25:15.894 [DEBUG] [Thread-134911] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:25:15.894 [DEBUG] [Thread-134911] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:25:15.894 [DEBUG] [Thread-134911] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:25:15.895 [DEBUG] [Thread-134911] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:25:15.895 [DEBUG] [Thread-134911] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:25:15.895 [DEBUG] [Thread-134911] [transport.py] [_log()] client lang: <none>
2025-12-31T21:25:15.895 [DEBUG] [Thread-134911] [transport.py] [_log()] server lang: <none>
2025-12-31T21:25:15.895 [DEBUG] [Thread-134911] [transport.py] [_log()] kex follows: False
2025-12-31T21:25:15.895 [DEBUG] [Thread-134911] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:25:15.895 [DEBUG] [Thread-134911] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:25:15.895 [DEBUG] [Thread-134911] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:25:15.895 [DEBUG] [Thread-134911] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:25:15.895 [DEBUG] [Thread-134911] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:25:15.895 [DEBUG] [Thread-134911] [transport.py] [_log()] Compression: none
2025-12-31T21:25:15.895 [DEBUG] [Thread-134911] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:25:15.949 [DEBUG] [Thread-134911] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:25:15.950 [DEBUG] [Thread-134911] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:25:15.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T21:25:15.951 [DEBUG] [Thread-134911] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T21:25:15.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:25:16.006 [DEBUG] [Thread-134911] [transport.py] [_log()] userauth is OK
2025-12-31T21:25:16.006 [DEBUG] [Thread-134911] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:25:16.006 [DEBUG] [Thread-134911] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:25:16.006 [DEBUG] [Thread-134911] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T21:25:16.006 [DEBUG] [Thread-134911] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:25:16.025 [INFO] [Thread-134911] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:25:16.025 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T21:25:16.026 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:25:16.870 [DEBUG] [Thread-134911] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:25:16.870 [DEBUG] [Thread-134911] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:25:16.917 [DEBUG] [Thread-134911] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:25:16.918 [DEBUG] [Thread-134911] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:25:16.927 [DEBUG] [Thread-134911] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:25:16.935 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:25:16.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-12-31T21:25:16.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T21:25:16.952 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:25:16.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:25:16.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:25:16.960 [DEBUG] [Thread-134911] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:25:24.199 [DEBUG] [Thread-134913 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:25:39.259 [DEBUG] [Thread-134914 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:25:43.411 [DEBUG] [Thread-134915 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:25:46.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T21:25:46.984 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T21:25:46.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T21:25:47.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 21, 25, 34), 6.79, 64.42, 0.0, 15.86, 16.83, 0, 0, 0, 2, 0, 0),)
2025-12-31T21:25:47.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 21:25:34
2025-12-31T21:25:47.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T21:25:47.966 [DEBUG] [Thread-134916] [transport.py] [_log()] starting thread (client mode): 0xb17973a0
2025-12-31T21:25:47.966 [DEBUG] [Thread-134916] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:25:47.986 [DEBUG] [Thread-134916] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T21:25:47.987 [INFO] [Thread-134916] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T21:25:47.990 [DEBUG] [Thread-134916] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:25:47.990 [DEBUG] [Thread-134916] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T21:25:47.990 [DEBUG] [Thread-134916] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:25:47.990 [DEBUG] [Thread-134916] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:25:47.990 [DEBUG] [Thread-134916] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:25:47.990 [DEBUG] [Thread-134916] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:25:47.990 [DEBUG] [Thread-134916] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:25:47.990 [DEBUG] [Thread-134916] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:25:47.990 [DEBUG] [Thread-134916] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:25:47.990 [DEBUG] [Thread-134916] [transport.py] [_log()] client lang: <none>
2025-12-31T21:25:47.990 [DEBUG] [Thread-134916] [transport.py] [_log()] server lang: <none>
2025-12-31T21:25:47.990 [DEBUG] [Thread-134916] [transport.py] [_log()] kex follows: False
2025-12-31T21:25:47.990 [DEBUG] [Thread-134916] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:25:47.991 [DEBUG] [Thread-134916] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:25:47.991 [DEBUG] [Thread-134916] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:25:47.991 [DEBUG] [Thread-134916] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:25:47.991 [DEBUG] [Thread-134916] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:25:47.991 [DEBUG] [Thread-134916] [transport.py] [_log()] Compression: none
2025-12-31T21:25:47.991 [DEBUG] [Thread-134916] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:25:48.009 [DEBUG] [Thread-134916] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:25:48.010 [DEBUG] [Thread-134916] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:25:48.011 [DEBUG] [Thread-134916] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T21:25:48.011 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T21:25:48.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:25:48.014 [DEBUG] [Thread-134916] [transport.py] [_log()] userauth is OK
2025-12-31T21:25:48.014 [DEBUG] [Thread-134916] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:25:48.014 [DEBUG] [Thread-134916] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:25:48.014 [DEBUG] [Thread-134916] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T21:25:48.014 [DEBUG] [Thread-134916] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:25:48.038 [INFO] [Thread-134916] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:25:48.039 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:25:48.669 [DEBUG] [Thread-134916] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:25:48.670 [DEBUG] [Thread-134916] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:25:48.670 [DEBUG] [Thread-134916] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T21:25:48.711 [DEBUG] [Thread-134916] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:25:48.712 [DEBUG] [Thread-134916] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:25:48.715 [DEBUG] [Thread-134916] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:25:48.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:25:48.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T21:25:48.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T21:25:48.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T21:25:48.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:25:48.739 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T21:25:48.739 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:25:48.739 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:25:48.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T21:25:48.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.809165 -999.00  +17.10  12.08     66  +10.90 1 2 1 1 1     0    0 5.67 -26.00 Z.ES. 14.7 12.1 204.9 23.0 18.1 -17.7 18.0 -18.3 17.8 -16.1 18.1 -15.9
2025-12-31T21:25:48.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T21:25:48.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T21:25:48.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.809165
2025-12-31T21:25:48.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T21:25:48.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T21:25:48.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T21:25:48.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T21:25:48.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T21:25:48.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T21:25:34', tmtdew=6.79, humidity=64.42, cloud=0.0, wind=15.86, temperature=16.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T21:25:34', seeing=1.37, atlas_timestamp='2025-12-31T19:25:11.856', atlas_cloud=2, atlas_rain=1, zp_data=[0.13625000000000043, 0.16125000000000078, 0.12925000000000075, 0.13599999999999923, 0.17249999999999943, 0.3702500000000004, nan, nan, 0.28449999999999953, 0.12300000000000111, 0.17824999999999847, 0.16000000000000014, 0.20699999999999896, 0.24825000000000053, nan, nan, 0.2997499999999995, 0.22749999999999915, 0.21399999999999864, 0.5942499999999988, 0.36549999999999727, 0.2807499999999976, nan, -1.2372499999999995, 0.19899999999999984, 0.14649999999999963, 0.4002499999999998, nan, nan, 0.3260000000000014, -2.039999999999999, -1.7929999999999993, -1.2082500000000014], zp_timestamp='2025-12-31T19:22:00')
2025-12-31T21:25:48.742 [DEBUG] [Thread-134916] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:25:48.826 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T21:25:48.841 [DEBUG] [Thread-134919] [transport.py] [_log()] starting thread (client mode): 0xb1796d70
2025-12-31T21:25:48.841 [DEBUG] [Thread-134919] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:25:48.856 [DEBUG] [Thread-134919] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T21:25:48.856 [INFO] [Thread-134919] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T21:25:48.864 [DEBUG] [Thread-134919] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:25:48.864 [DEBUG] [Thread-134919] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T21:25:48.864 [DEBUG] [Thread-134919] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:25:48.864 [DEBUG] [Thread-134919] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:25:48.864 [DEBUG] [Thread-134919] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:25:48.864 [DEBUG] [Thread-134919] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:25:48.864 [DEBUG] [Thread-134919] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:25:48.864 [DEBUG] [Thread-134919] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:25:48.864 [DEBUG] [Thread-134919] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:25:48.864 [DEBUG] [Thread-134919] [transport.py] [_log()] client lang: <none>
2025-12-31T21:25:48.864 [DEBUG] [Thread-134919] [transport.py] [_log()] server lang: <none>
2025-12-31T21:25:48.864 [DEBUG] [Thread-134919] [transport.py] [_log()] kex follows: False
2025-12-31T21:25:48.864 [DEBUG] [Thread-134919] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:25:48.864 [DEBUG] [Thread-134919] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:25:48.864 [DEBUG] [Thread-134919] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:25:48.864 [DEBUG] [Thread-134919] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:25:48.864 [DEBUG] [Thread-134919] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:25:48.864 [DEBUG] [Thread-134919] [transport.py] [_log()] Compression: none
2025-12-31T21:25:48.864 [DEBUG] [Thread-134919] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:25:48.925 [DEBUG] [Thread-134919] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:25:48.926 [DEBUG] [Thread-134919] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:25:48.926 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T21:25:48.927 [DEBUG] [Thread-134919] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T21:25:48.928 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:25:48.983 [DEBUG] [Thread-134919] [transport.py] [_log()] userauth is OK
2025-12-31T21:25:48.983 [DEBUG] [Thread-134919] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:25:48.984 [DEBUG] [Thread-134919] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:25:48.984 [DEBUG] [Thread-134919] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T21:25:48.984 [DEBUG] [Thread-134919] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:25:49.002 [INFO] [Thread-134919] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:25:49.003 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T21:25:49.003 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:25:49.837 [DEBUG] [Thread-134919] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:25:49.837 [DEBUG] [Thread-134919] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:25:49.885 [DEBUG] [Thread-134919] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:25:49.885 [DEBUG] [Thread-134919] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:25:49.894 [DEBUG] [Thread-134919] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:25:49.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:25:49.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-12-31T21:25:49.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T21:25:49.922 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:25:49.923 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:25:49.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:25:49.931 [DEBUG] [Thread-134919] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:25:54.292 [DEBUG] [Thread-134921 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:26:01.371 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:26:01.372 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:26:09.344 [DEBUG] [Thread-134922 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:26:19.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T21:26:19.953 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T21:26:19.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T21:26:20.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 21, 26, 6), 6.8, 64.39, 0.0, 19.41, 16.83, 0, 0, 0, 2, 0, 0),)
2025-12-31T21:26:20.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 21:26:06
2025-12-31T21:26:20.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T21:26:20.981 [DEBUG] [Thread-134923] [transport.py] [_log()] starting thread (client mode): 0xb1795570
2025-12-31T21:26:20.981 [DEBUG] [Thread-134923] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:26:20.998 [DEBUG] [Thread-134923] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T21:26:20.998 [INFO] [Thread-134923] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T21:26:20.999 [DEBUG] [Thread-134923] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:26:20.999 [DEBUG] [Thread-134923] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T21:26:20.999 [DEBUG] [Thread-134923] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:26:20.999 [DEBUG] [Thread-134923] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:26:20.999 [DEBUG] [Thread-134923] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:26:20.999 [DEBUG] [Thread-134923] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:26:20.999 [DEBUG] [Thread-134923] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:26:20.999 [DEBUG] [Thread-134923] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:26:20.999 [DEBUG] [Thread-134923] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:26:20.999 [DEBUG] [Thread-134923] [transport.py] [_log()] client lang: <none>
2025-12-31T21:26:20.999 [DEBUG] [Thread-134923] [transport.py] [_log()] server lang: <none>
2025-12-31T21:26:20.999 [DEBUG] [Thread-134923] [transport.py] [_log()] kex follows: False
2025-12-31T21:26:20.999 [DEBUG] [Thread-134923] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:26:20.999 [DEBUG] [Thread-134923] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:26:21.000 [DEBUG] [Thread-134923] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:26:21.000 [DEBUG] [Thread-134923] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:26:21.000 [DEBUG] [Thread-134923] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:26:21.000 [DEBUG] [Thread-134923] [transport.py] [_log()] Compression: none
2025-12-31T21:26:21.000 [DEBUG] [Thread-134923] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:26:21.007 [DEBUG] [Thread-134923] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:26:21.007 [DEBUG] [Thread-134923] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:26:21.007 [DEBUG] [Thread-134923] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T21:26:21.007 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T21:26:21.007 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:26:21.008 [DEBUG] [Thread-134923] [transport.py] [_log()] userauth is OK
2025-12-31T21:26:21.008 [DEBUG] [Thread-134923] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:26:21.008 [DEBUG] [Thread-134923] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:26:21.008 [DEBUG] [Thread-134923] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T21:26:21.008 [DEBUG] [Thread-134923] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:26:21.034 [INFO] [Thread-134923] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:26:21.034 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:26:21.655 [DEBUG] [Thread-134923] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:26:21.655 [DEBUG] [Thread-134923] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:26:21.655 [DEBUG] [Thread-134923] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T21:26:21.696 [DEBUG] [Thread-134923] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:26:21.696 [DEBUG] [Thread-134923] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:26:21.698 [DEBUG] [Thread-134923] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:26:21.710 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:26:21.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T21:26:21.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T21:26:21.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T21:26:21.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:26:21.714 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T21:26:21.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:26:21.714 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:26:21.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T21:26:21.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.809513 -999.00  +17.10  14.53     66  +10.90 1 2 1 1 1     0    0 5.81 -26.30 Z.ES. 11.8 14.5 223.7 21.4 18.1 -17.8 17.9 -18.1 17.8 -16.3 18.1 -15.8
2025-12-31T21:26:21.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T21:26:21.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T21:26:21.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.809513
2025-12-31T21:26:21.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T21:26:21.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T21:26:21.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T21:26:21.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T21:26:21.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T21:26:21.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T21:26:06', tmtdew=6.8, humidity=64.39, cloud=0.0, wind=19.41, temperature=16.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T21:26:06', seeing=1.48, atlas_timestamp='2025-12-31T19:25:41.923', atlas_cloud=2, atlas_rain=1, zp_data=[0.13625000000000043, 0.16125000000000078, 0.12925000000000075, 0.13599999999999923, 0.17249999999999943, 0.3702500000000004, nan, nan, 0.28449999999999953, 0.12300000000000111, 0.17824999999999847, 0.16000000000000014, 0.20699999999999896, 0.24825000000000053, nan, nan, 0.2997499999999995, 0.22749999999999915, 0.21399999999999864, 0.5942499999999988, 0.36549999999999727, 0.2807499999999976, nan, -1.2372499999999995, 0.19899999999999984, 0.14649999999999963, 0.4002499999999998, nan, nan, 0.3260000000000014, -2.039999999999999, -1.7929999999999993, -1.2082500000000014], zp_timestamp='2025-12-31T19:22:00')
2025-12-31T21:26:21.716 [DEBUG] [Thread-134923] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:26:21.790 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T21:26:21.802 [DEBUG] [Thread-134926] [transport.py] [_log()] starting thread (client mode): 0xb1745960
2025-12-31T21:26:21.802 [DEBUG] [Thread-134926] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:26:21.816 [DEBUG] [Thread-134926] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T21:26:21.816 [INFO] [Thread-134926] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T21:26:21.823 [DEBUG] [Thread-134926] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:26:21.823 [DEBUG] [Thread-134926] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T21:26:21.823 [DEBUG] [Thread-134926] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:26:21.823 [DEBUG] [Thread-134926] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:26:21.823 [DEBUG] [Thread-134926] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:26:21.823 [DEBUG] [Thread-134926] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:26:21.823 [DEBUG] [Thread-134926] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:26:21.823 [DEBUG] [Thread-134926] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:26:21.824 [DEBUG] [Thread-134926] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:26:21.824 [DEBUG] [Thread-134926] [transport.py] [_log()] client lang: <none>
2025-12-31T21:26:21.824 [DEBUG] [Thread-134926] [transport.py] [_log()] server lang: <none>
2025-12-31T21:26:21.824 [DEBUG] [Thread-134926] [transport.py] [_log()] kex follows: False
2025-12-31T21:26:21.824 [DEBUG] [Thread-134926] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:26:21.824 [DEBUG] [Thread-134926] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:26:21.824 [DEBUG] [Thread-134926] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:26:21.824 [DEBUG] [Thread-134926] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:26:21.824 [DEBUG] [Thread-134926] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:26:21.824 [DEBUG] [Thread-134926] [transport.py] [_log()] Compression: none
2025-12-31T21:26:21.824 [DEBUG] [Thread-134926] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:26:21.882 [DEBUG] [Thread-134926] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:26:21.882 [DEBUG] [Thread-134926] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:26:21.883 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T21:26:21.883 [DEBUG] [Thread-134926] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T21:26:21.883 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:26:21.944 [DEBUG] [Thread-134926] [transport.py] [_log()] userauth is OK
2025-12-31T21:26:21.944 [DEBUG] [Thread-134926] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:26:21.944 [DEBUG] [Thread-134926] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:26:21.944 [DEBUG] [Thread-134926] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T21:26:21.944 [DEBUG] [Thread-134926] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:26:21.963 [INFO] [Thread-134926] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:26:21.963 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T21:26:21.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:26:22.788 [DEBUG] [Thread-134926] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:26:22.788 [DEBUG] [Thread-134926] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:26:22.836 [DEBUG] [Thread-134926] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:26:22.836 [DEBUG] [Thread-134926] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:26:22.845 [DEBUG] [Thread-134926] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:26:22.853 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:26:22.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T21:26:22.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T21:26:22.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:26:22.868 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:26:22.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:26:22.877 [DEBUG] [Thread-134926] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:26:24.379 [DEBUG] [Thread-134928 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:26:39.424 [DEBUG] [Thread-134929 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:26:43.482 [DEBUG] [Thread-134930 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:26:52.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T21:26:52.899 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T21:26:52.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T21:26:53.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 21, 26, 38), 6.76, 64.34, 0.0, 19.89, 16.8, 0, 0, 0, 2, 0, 0),)
2025-12-31T21:26:53.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 21:26:38
2025-12-31T21:26:53.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T21:26:53.880 [DEBUG] [Thread-134931] [transport.py] [_log()] starting thread (client mode): 0xb17968f0
2025-12-31T21:26:53.880 [DEBUG] [Thread-134931] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:26:53.901 [DEBUG] [Thread-134931] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T21:26:53.901 [INFO] [Thread-134931] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T21:26:53.904 [DEBUG] [Thread-134931] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:26:53.904 [DEBUG] [Thread-134931] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T21:26:53.904 [DEBUG] [Thread-134931] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:26:53.904 [DEBUG] [Thread-134931] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:26:53.904 [DEBUG] [Thread-134931] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:26:53.904 [DEBUG] [Thread-134931] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:26:53.904 [DEBUG] [Thread-134931] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:26:53.904 [DEBUG] [Thread-134931] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:26:53.904 [DEBUG] [Thread-134931] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:26:53.904 [DEBUG] [Thread-134931] [transport.py] [_log()] client lang: <none>
2025-12-31T21:26:53.904 [DEBUG] [Thread-134931] [transport.py] [_log()] server lang: <none>
2025-12-31T21:26:53.904 [DEBUG] [Thread-134931] [transport.py] [_log()] kex follows: False
2025-12-31T21:26:53.904 [DEBUG] [Thread-134931] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:26:53.904 [DEBUG] [Thread-134931] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:26:53.904 [DEBUG] [Thread-134931] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:26:53.904 [DEBUG] [Thread-134931] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:26:53.904 [DEBUG] [Thread-134931] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:26:53.905 [DEBUG] [Thread-134931] [transport.py] [_log()] Compression: none
2025-12-31T21:26:53.905 [DEBUG] [Thread-134931] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:26:53.921 [DEBUG] [Thread-134931] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:26:53.922 [DEBUG] [Thread-134931] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:26:53.923 [DEBUG] [Thread-134931] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T21:26:53.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T21:26:53.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:26:53.924 [DEBUG] [Thread-134931] [transport.py] [_log()] userauth is OK
2025-12-31T21:26:53.925 [DEBUG] [Thread-134931] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:26:53.925 [DEBUG] [Thread-134931] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:26:53.925 [DEBUG] [Thread-134931] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T21:26:53.925 [DEBUG] [Thread-134931] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:26:53.953 [INFO] [Thread-134931] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:26:53.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:26:54.456 [DEBUG] [Thread-134933 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:26:54.610 [DEBUG] [Thread-134931] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:26:54.610 [DEBUG] [Thread-134931] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:26:54.611 [DEBUG] [Thread-134931] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T21:26:54.651 [DEBUG] [Thread-134931] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:26:54.651 [DEBUG] [Thread-134931] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:26:54.655 [DEBUG] [Thread-134931] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:26:54.667 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:26:54.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T21:26:54.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T21:26:54.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T21:26:54.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:26:54.679 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T21:26:54.679 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:26:54.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:26:54.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T21:26:54.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.809860 -999.00  +17.00  17.56     67  +10.90 1 2 1 1 1     0    0 5.75 -27.40 z.ES. 8.6 17.6 203.1 24.9 18.1 -17.9 17.9 -18.0 17.8 -16.4 18.1 -16.0
2025-12-31T21:26:54.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T21:26:54.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T21:26:54.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.809860
2025-12-31T21:26:54.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T21:26:54.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T21:26:54.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T21:26:54.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T21:26:54.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T21:26:54.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T21:26:38', tmtdew=6.76, humidity=64.34, cloud=0.0, wind=19.89, temperature=16.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T21:26:38', seeing=1.35, atlas_timestamp='2025-12-31T19:26:11.904', atlas_cloud=2, atlas_rain=1, zp_data=[0.7407499999999994, 0.2817500000000006, 0.13475000000000215, 0.3744999999999994, 0.6269999999999998, nan, nan, nan, 0.4344999999999999, 0.09050000000000047, 0.3252500000000005, 0.33649999999999913, 0.8009999999999993, nan, nan, 0.0934999999999988, 0.06424999999999947, 0.1534999999999993, 0.4139999999999997, 1.2822499999999986, 1.585499999999998, nan, nan, -0.3047500000000003, 0.0389999999999997, 0.09149999999999991, 0.5287500000000005, nan, nan, 0.19650000000000034, -2.2204999999999995, -1.4059999999999988, -0.18625000000000114], zp_timestamp='2025-12-31T19:25:00')
2025-12-31T21:26:54.682 [DEBUG] [Thread-134931] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:26:54.765 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T21:26:54.777 [DEBUG] [Thread-134935] [transport.py] [_log()] starting thread (client mode): 0xb1796d70
2025-12-31T21:26:54.778 [DEBUG] [Thread-134935] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:26:54.792 [DEBUG] [Thread-134935] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T21:26:54.792 [INFO] [Thread-134935] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T21:26:54.799 [DEBUG] [Thread-134935] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:26:54.800 [DEBUG] [Thread-134935] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T21:26:54.800 [DEBUG] [Thread-134935] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:26:54.800 [DEBUG] [Thread-134935] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:26:54.800 [DEBUG] [Thread-134935] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:26:54.800 [DEBUG] [Thread-134935] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:26:54.800 [DEBUG] [Thread-134935] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:26:54.800 [DEBUG] [Thread-134935] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:26:54.800 [DEBUG] [Thread-134935] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:26:54.800 [DEBUG] [Thread-134935] [transport.py] [_log()] client lang: <none>
2025-12-31T21:26:54.800 [DEBUG] [Thread-134935] [transport.py] [_log()] server lang: <none>
2025-12-31T21:26:54.800 [DEBUG] [Thread-134935] [transport.py] [_log()] kex follows: False
2025-12-31T21:26:54.800 [DEBUG] [Thread-134935] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:26:54.800 [DEBUG] [Thread-134935] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:26:54.800 [DEBUG] [Thread-134935] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:26:54.800 [DEBUG] [Thread-134935] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:26:54.800 [DEBUG] [Thread-134935] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:26:54.801 [DEBUG] [Thread-134935] [transport.py] [_log()] Compression: none
2025-12-31T21:26:54.801 [DEBUG] [Thread-134935] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:26:54.860 [DEBUG] [Thread-134935] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:26:54.861 [DEBUG] [Thread-134935] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:26:54.861 [DEBUG] [Thread-134935] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T21:26:54.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T21:26:54.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:26:54.916 [DEBUG] [Thread-134935] [transport.py] [_log()] userauth is OK
2025-12-31T21:26:54.916 [DEBUG] [Thread-134935] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:26:54.916 [DEBUG] [Thread-134935] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:26:54.916 [DEBUG] [Thread-134935] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T21:26:54.917 [DEBUG] [Thread-134935] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:26:54.936 [INFO] [Thread-134935] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:26:54.936 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T21:26:54.937 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:26:55.742 [DEBUG] [Thread-134935] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:26:55.742 [DEBUG] [Thread-134935] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:26:55.790 [DEBUG] [Thread-134935] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:26:55.790 [DEBUG] [Thread-134935] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:26:55.798 [DEBUG] [Thread-134935] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:26:55.806 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:26:55.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T21:26:55.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T21:26:55.823 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:26:55.824 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:26:55.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:26:55.832 [DEBUG] [Thread-134935] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:27:01.570 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:27:01.571 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:27:09.489 [DEBUG] [Thread-134937 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:27:24.537 [DEBUG] [Thread-134938 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:27:25.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T21:27:25.827 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T21:27:25.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T21:27:26.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 21, 27, 10), 6.75, 64.41, 0.0, 23.48, 16.8, 0, 0, 0, 2, 0, 0),)
2025-12-31T21:27:26.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 21:27:10
2025-12-31T21:27:26.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T21:27:26.830 [DEBUG] [Thread-134939] [transport.py] [_log()] starting thread (client mode): 0xb1784700
2025-12-31T21:27:26.830 [DEBUG] [Thread-134939] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:27:26.849 [DEBUG] [Thread-134939] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T21:27:26.849 [INFO] [Thread-134939] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T21:27:26.852 [DEBUG] [Thread-134939] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:27:26.852 [DEBUG] [Thread-134939] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T21:27:26.852 [DEBUG] [Thread-134939] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:27:26.852 [DEBUG] [Thread-134939] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:27:26.852 [DEBUG] [Thread-134939] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:27:26.852 [DEBUG] [Thread-134939] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:27:26.852 [DEBUG] [Thread-134939] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:27:26.852 [DEBUG] [Thread-134939] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:27:26.852 [DEBUG] [Thread-134939] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:27:26.852 [DEBUG] [Thread-134939] [transport.py] [_log()] client lang: <none>
2025-12-31T21:27:26.852 [DEBUG] [Thread-134939] [transport.py] [_log()] server lang: <none>
2025-12-31T21:27:26.852 [DEBUG] [Thread-134939] [transport.py] [_log()] kex follows: False
2025-12-31T21:27:26.852 [DEBUG] [Thread-134939] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:27:26.852 [DEBUG] [Thread-134939] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:27:26.852 [DEBUG] [Thread-134939] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:27:26.852 [DEBUG] [Thread-134939] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:27:26.852 [DEBUG] [Thread-134939] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:27:26.852 [DEBUG] [Thread-134939] [transport.py] [_log()] Compression: none
2025-12-31T21:27:26.852 [DEBUG] [Thread-134939] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:27:26.869 [DEBUG] [Thread-134939] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:27:26.869 [DEBUG] [Thread-134939] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:27:26.870 [DEBUG] [Thread-134939] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T21:27:26.870 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T21:27:26.871 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:27:26.872 [DEBUG] [Thread-134939] [transport.py] [_log()] userauth is OK
2025-12-31T21:27:26.872 [DEBUG] [Thread-134939] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:27:26.872 [DEBUG] [Thread-134939] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:27:26.872 [DEBUG] [Thread-134939] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T21:27:26.872 [DEBUG] [Thread-134939] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:27:26.887 [INFO] [Thread-134939] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:27:26.887 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:27:27.516 [DEBUG] [Thread-134939] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:27:27.517 [DEBUG] [Thread-134939] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:27:27.517 [DEBUG] [Thread-134939] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T21:27:27.557 [DEBUG] [Thread-134939] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:27:27.557 [DEBUG] [Thread-134939] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:27:27.561 [DEBUG] [Thread-134939] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:27:27.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:27:27.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T21:27:27.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T21:27:27.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T21:27:27.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:27:27.585 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T21:27:27.585 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:27:27.586 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:27:27.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T21:27:27.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.810554 -999.00  +17.00  17.47     67  +10.90 1 2 1 1 1     0    0 5.45 -30.54 Z.ES. 9.3 17.5 214.5 25.6 18.1 -18.0 17.9 -18.1 17.8 -16.3 18.1 -16.2
2025-12-31T21:27:27.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T21:27:27.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T21:27:27.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.810554
2025-12-31T21:27:27.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T21:27:27.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T21:27:27.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T21:27:27.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T21:27:27.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T21:27:27.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T21:27:10', tmtdew=6.75, humidity=64.41, cloud=0.0, wind=23.48, temperature=16.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T21:27:10', seeing=1.35, atlas_timestamp='2025-12-31T19:27:11.866', atlas_cloud=2, atlas_rain=1, zp_data=[0.7407499999999994, 0.2817500000000006, 0.13475000000000215, 0.3744999999999994, 0.6269999999999998, nan, nan, nan, 0.4344999999999999, 0.09050000000000047, 0.3252500000000005, 0.33649999999999913, 0.8009999999999993, nan, nan, 0.0934999999999988, 0.06424999999999947, 0.1534999999999993, 0.4139999999999997, 1.2822499999999986, 1.585499999999998, nan, nan, -0.3047500000000003, 0.0389999999999997, 0.09149999999999991, 0.5287500000000005, nan, nan, 0.19650000000000034, -2.2204999999999995, -1.4059999999999988, -0.18625000000000114], zp_timestamp='2025-12-31T19:25:00')
2025-12-31T21:27:27.588 [DEBUG] [Thread-134939] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:27:27.671 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T21:27:27.684 [DEBUG] [Thread-134942] [transport.py] [_log()] starting thread (client mode): 0xb1786da0
2025-12-31T21:27:27.684 [DEBUG] [Thread-134942] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:27:27.699 [DEBUG] [Thread-134942] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T21:27:27.699 [INFO] [Thread-134942] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T21:27:27.707 [DEBUG] [Thread-134942] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:27:27.707 [DEBUG] [Thread-134942] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T21:27:27.707 [DEBUG] [Thread-134942] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:27:27.707 [DEBUG] [Thread-134942] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:27:27.707 [DEBUG] [Thread-134942] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:27:27.707 [DEBUG] [Thread-134942] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:27:27.707 [DEBUG] [Thread-134942] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:27:27.707 [DEBUG] [Thread-134942] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:27:27.707 [DEBUG] [Thread-134942] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:27:27.707 [DEBUG] [Thread-134942] [transport.py] [_log()] client lang: <none>
2025-12-31T21:27:27.707 [DEBUG] [Thread-134942] [transport.py] [_log()] server lang: <none>
2025-12-31T21:27:27.707 [DEBUG] [Thread-134942] [transport.py] [_log()] kex follows: False
2025-12-31T21:27:27.707 [DEBUG] [Thread-134942] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:27:27.708 [DEBUG] [Thread-134942] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:27:27.708 [DEBUG] [Thread-134942] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:27:27.708 [DEBUG] [Thread-134942] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:27:27.708 [DEBUG] [Thread-134942] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:27:27.708 [DEBUG] [Thread-134942] [transport.py] [_log()] Compression: none
2025-12-31T21:27:27.708 [DEBUG] [Thread-134942] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:27:27.769 [DEBUG] [Thread-134942] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:27:27.770 [DEBUG] [Thread-134942] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:27:27.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T21:27:27.772 [DEBUG] [Thread-134942] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T21:27:27.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:27:27.829 [DEBUG] [Thread-134942] [transport.py] [_log()] userauth is OK
2025-12-31T21:27:27.829 [DEBUG] [Thread-134942] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:27:27.829 [DEBUG] [Thread-134942] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:27:27.829 [DEBUG] [Thread-134942] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T21:27:27.830 [DEBUG] [Thread-134942] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:27:27.849 [INFO] [Thread-134942] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:27:27.850 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T21:27:27.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:27:28.712 [DEBUG] [Thread-134942] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:27:28.712 [DEBUG] [Thread-134942] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:27:28.759 [DEBUG] [Thread-134942] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:27:28.760 [DEBUG] [Thread-134942] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:27:28.768 [DEBUG] [Thread-134942] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:27:28.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:27:28.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T21:27:28.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T21:27:28.794 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:27:28.794 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:27:28.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:27:28.802 [DEBUG] [Thread-134942] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:27:39.568 [DEBUG] [Thread-134944 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:27:43.535 [DEBUG] [Thread-134945 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:27:50.077 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:27:53.227 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:27:54.612 [DEBUG] [Thread-134946 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:27:58.309 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:27:58.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T21:27:58.825 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T21:27:58.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T21:27:59.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 21, 27, 42), 6.69, 64.42, 0.0, 24.17, 16.75, 0, 0, 0, 2, 0, 0),)
2025-12-31T21:27:59.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 21:27:42
2025-12-31T21:27:59.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T21:27:59.810 [DEBUG] [Thread-134947] [transport.py] [_log()] starting thread (client mode): 0xb1796aa0
2025-12-31T21:27:59.810 [DEBUG] [Thread-134947] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:27:59.830 [DEBUG] [Thread-134947] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T21:27:59.831 [INFO] [Thread-134947] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T21:27:59.834 [DEBUG] [Thread-134947] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:27:59.834 [DEBUG] [Thread-134947] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T21:27:59.834 [DEBUG] [Thread-134947] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:27:59.834 [DEBUG] [Thread-134947] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:27:59.834 [DEBUG] [Thread-134947] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:27:59.834 [DEBUG] [Thread-134947] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:27:59.834 [DEBUG] [Thread-134947] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:27:59.834 [DEBUG] [Thread-134947] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:27:59.834 [DEBUG] [Thread-134947] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:27:59.834 [DEBUG] [Thread-134947] [transport.py] [_log()] client lang: <none>
2025-12-31T21:27:59.834 [DEBUG] [Thread-134947] [transport.py] [_log()] server lang: <none>
2025-12-31T21:27:59.834 [DEBUG] [Thread-134947] [transport.py] [_log()] kex follows: False
2025-12-31T21:27:59.834 [DEBUG] [Thread-134947] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:27:59.834 [DEBUG] [Thread-134947] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:27:59.834 [DEBUG] [Thread-134947] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:27:59.834 [DEBUG] [Thread-134947] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:27:59.834 [DEBUG] [Thread-134947] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:27:59.834 [DEBUG] [Thread-134947] [transport.py] [_log()] Compression: none
2025-12-31T21:27:59.834 [DEBUG] [Thread-134947] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:27:59.852 [DEBUG] [Thread-134947] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:27:59.853 [DEBUG] [Thread-134947] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:27:59.853 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T21:27:59.854 [DEBUG] [Thread-134947] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T21:27:59.855 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:27:59.856 [DEBUG] [Thread-134947] [transport.py] [_log()] userauth is OK
2025-12-31T21:27:59.856 [DEBUG] [Thread-134947] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:27:59.856 [DEBUG] [Thread-134947] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:27:59.856 [DEBUG] [Thread-134947] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T21:27:59.857 [DEBUG] [Thread-134947] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:27:59.880 [INFO] [Thread-134947] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:27:59.881 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:28:00.533 [DEBUG] [Thread-134947] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:28:00.533 [DEBUG] [Thread-134947] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:28:00.534 [DEBUG] [Thread-134947] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T21:28:00.574 [DEBUG] [Thread-134947] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:28:00.574 [DEBUG] [Thread-134947] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:28:00.578 [DEBUG] [Thread-134947] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:28:00.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:28:00.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T21:28:00.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T21:28:00.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T21:28:00.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:28:00.601 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T21:28:00.601 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:28:00.601 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:28:00.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T21:28:00.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.810902 -999.00  +17.00  15.42     67  +10.90 1 2 1 1 1     0    0 5.46 -33.22 Z.ES. 11.4 15.4 206.4 23.6 18.1 -18.0 17.9 -18.1 17.8 -16.2 18.1 -16.2
2025-12-31T21:28:00.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T21:28:00.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T21:28:00.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.810902
2025-12-31T21:28:00.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T21:28:00.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T21:28:00.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T21:28:00.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T21:28:00.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T21:28:00.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T21:27:42', tmtdew=6.69, humidity=64.42, cloud=0.0, wind=24.17, temperature=16.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T21:27:42', seeing=1.31, atlas_timestamp='2025-12-31T19:27:41.933', atlas_cloud=2, atlas_rain=1, zp_data=[0.7407499999999994, 0.2817500000000006, 0.13475000000000215, 0.3744999999999994, 0.6269999999999998, nan, nan, nan, 0.4344999999999999, 0.09050000000000047, 0.3252500000000005, 0.33649999999999913, 0.8009999999999993, nan, nan, 0.0934999999999988, 0.06424999999999947, 0.1534999999999993, 0.4139999999999997, 1.2822499999999986, 1.585499999999998, nan, nan, -0.3047500000000003, 0.0389999999999997, 0.09149999999999991, 0.5287500000000005, nan, nan, 0.19650000000000034, -2.2204999999999995, -1.4059999999999988, -0.18625000000000114], zp_timestamp='2025-12-31T19:25:00')
2025-12-31T21:28:00.604 [DEBUG] [Thread-134947] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:28:00.678 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T21:28:01.771 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:28:01.773 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:28:03.717 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:28:09.646 [DEBUG] [Thread-134950 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:28:23.091 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:28:24.680 [DEBUG] [Thread-134951 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:28:27.509 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:28:39.717 [DEBUG] [Thread-134952 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:28:43.610 [DEBUG] [Thread-134953 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:28:46.875 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:28:51.271 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:28:54.753 [DEBUG] [Thread-134954 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:28:58.055 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:29:01.974 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:29:01.975 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:29:02.421 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:29:09.783 [DEBUG] [Thread-134955 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:29:24.818 [DEBUG] [Thread-134956 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:29:39.849 [DEBUG] [Thread-134957 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:29:43.699 [DEBUG] [Thread-134958 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:29:54.882 [DEBUG] [Thread-134959 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:30:02.048 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:30:02.174 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:30:02.174 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:30:05.114 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:30:09.923 [DEBUG] [Thread-134960 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:30:12.575 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-12-31T21:30:24.954 [DEBUG] [Thread-134961 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:30:39.580 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:30:39.991 [DEBUG] [Thread-134962 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:30:42.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T21:30:42.606 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T21:30:42.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T21:30:43.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 21, 30, 22), 6.63, 64.71, 0.0, 19.71, 16.75, 0, 0, 0, 2, 0, 0),)
2025-12-31T21:30:43.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 21:30:22
2025-12-31T21:30:43.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T21:30:43.601 [DEBUG] [Thread-134963] [transport.py] [_log()] starting thread (client mode): 0xb1795ed0
2025-12-31T21:30:43.601 [DEBUG] [Thread-134963] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:30:43.620 [DEBUG] [Thread-134963] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T21:30:43.620 [INFO] [Thread-134963] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T21:30:43.624 [DEBUG] [Thread-134963] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:30:43.624 [DEBUG] [Thread-134963] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T21:30:43.624 [DEBUG] [Thread-134963] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:30:43.624 [DEBUG] [Thread-134963] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:30:43.624 [DEBUG] [Thread-134963] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:30:43.624 [DEBUG] [Thread-134963] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:30:43.624 [DEBUG] [Thread-134963] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:30:43.624 [DEBUG] [Thread-134963] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:30:43.624 [DEBUG] [Thread-134963] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:30:43.624 [DEBUG] [Thread-134963] [transport.py] [_log()] client lang: <none>
2025-12-31T21:30:43.624 [DEBUG] [Thread-134963] [transport.py] [_log()] server lang: <none>
2025-12-31T21:30:43.624 [DEBUG] [Thread-134963] [transport.py] [_log()] kex follows: False
2025-12-31T21:30:43.624 [DEBUG] [Thread-134963] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:30:43.625 [DEBUG] [Thread-134963] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:30:43.625 [DEBUG] [Thread-134963] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:30:43.625 [DEBUG] [Thread-134963] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:30:43.625 [DEBUG] [Thread-134963] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:30:43.625 [DEBUG] [Thread-134963] [transport.py] [_log()] Compression: none
2025-12-31T21:30:43.625 [DEBUG] [Thread-134963] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:30:43.642 [DEBUG] [Thread-134963] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:30:43.643 [DEBUG] [Thread-134963] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:30:43.644 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T21:30:43.644 [DEBUG] [Thread-134963] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T21:30:43.645 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:30:43.647 [DEBUG] [Thread-134963] [transport.py] [_log()] userauth is OK
2025-12-31T21:30:43.647 [DEBUG] [Thread-134963] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:30:43.647 [DEBUG] [Thread-134963] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:30:43.647 [DEBUG] [Thread-134963] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T21:30:43.647 [DEBUG] [Thread-134963] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:30:43.672 [INFO] [Thread-134963] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:30:43.672 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:30:43.785 [DEBUG] [Thread-134965 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:30:44.320 [DEBUG] [Thread-134963] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:30:44.320 [DEBUG] [Thread-134963] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:30:44.321 [DEBUG] [Thread-134963] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T21:30:44.361 [DEBUG] [Thread-134963] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:30:44.361 [DEBUG] [Thread-134963] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:30:44.363 [DEBUG] [Thread-134963] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:30:44.374 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:30:44.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T21:30:44.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T21:30:44.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T21:30:44.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:30:44.385 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T21:30:44.386 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:30:44.386 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:30:44.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T21:30:44.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.812290 -999.00  +17.00  14.92     67  +10.90 1 2 1 1 1     0    0 5.36 -33.45 Z.ES. 14.5 14.9 210.6 25.3 18.0 -17.5 17.9 -17.6 17.8 -15.4 18.1 -15.5
2025-12-31T21:30:44.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T21:30:44.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T21:30:44.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.812290
2025-12-31T21:30:44.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T21:30:44.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T21:30:44.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T21:30:44.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T21:30:44.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T21:30:44.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T21:30:22', tmtdew=6.63, humidity=64.71, cloud=0.0, wind=19.71, temperature=16.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T21:30:22', seeing=1.33, atlas_timestamp='2025-12-31T19:29:41.856', atlas_cloud=2, atlas_rain=1, zp_data=[0.7407499999999994, 0.2817500000000006, 0.13475000000000215, 0.3744999999999994, 0.6269999999999998, nan, nan, nan, 0.4344999999999999, 0.09050000000000047, 0.3252500000000005, 0.33649999999999913, 0.8009999999999993, nan, nan, 0.0934999999999988, 0.06424999999999947, 0.1534999999999993, 0.4139999999999997, 1.2822499999999986, 1.585499999999998, nan, nan, -0.3047500000000003, 0.0389999999999997, 0.09149999999999991, 0.5287500000000005, nan, nan, 0.19650000000000034, -2.2204999999999995, -1.4059999999999988, -0.18625000000000114], zp_timestamp='2025-12-31T19:28:00')
2025-12-31T21:30:44.388 [DEBUG] [Thread-134963] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:30:44.478 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T21:30:44.489 [DEBUG] [Thread-134967] [transport.py] [_log()] starting thread (client mode): 0xb1744910
2025-12-31T21:30:44.490 [DEBUG] [Thread-134967] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:30:44.504 [DEBUG] [Thread-134967] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T21:30:44.504 [INFO] [Thread-134967] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T21:30:44.512 [DEBUG] [Thread-134967] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:30:44.512 [DEBUG] [Thread-134967] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T21:30:44.512 [DEBUG] [Thread-134967] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:30:44.512 [DEBUG] [Thread-134967] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:30:44.512 [DEBUG] [Thread-134967] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:30:44.512 [DEBUG] [Thread-134967] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:30:44.512 [DEBUG] [Thread-134967] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:30:44.512 [DEBUG] [Thread-134967] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:30:44.512 [DEBUG] [Thread-134967] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:30:44.513 [DEBUG] [Thread-134967] [transport.py] [_log()] client lang: <none>
2025-12-31T21:30:44.513 [DEBUG] [Thread-134967] [transport.py] [_log()] server lang: <none>
2025-12-31T21:30:44.513 [DEBUG] [Thread-134967] [transport.py] [_log()] kex follows: False
2025-12-31T21:30:44.513 [DEBUG] [Thread-134967] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:30:44.513 [DEBUG] [Thread-134967] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:30:44.513 [DEBUG] [Thread-134967] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:30:44.513 [DEBUG] [Thread-134967] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:30:44.513 [DEBUG] [Thread-134967] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:30:44.513 [DEBUG] [Thread-134967] [transport.py] [_log()] Compression: none
2025-12-31T21:30:44.513 [DEBUG] [Thread-134967] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:30:44.571 [DEBUG] [Thread-134967] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:30:44.571 [DEBUG] [Thread-134967] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:30:44.572 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T21:30:44.572 [DEBUG] [Thread-134967] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T21:30:44.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:30:44.627 [DEBUG] [Thread-134967] [transport.py] [_log()] userauth is OK
2025-12-31T21:30:44.627 [DEBUG] [Thread-134967] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:30:44.627 [DEBUG] [Thread-134967] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:30:44.627 [DEBUG] [Thread-134967] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T21:30:44.627 [DEBUG] [Thread-134967] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:30:44.646 [INFO] [Thread-134967] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:30:44.646 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T21:30:44.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:30:45.439 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:30:45.452 [DEBUG] [Thread-134967] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:30:45.453 [DEBUG] [Thread-134967] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:30:45.500 [DEBUG] [Thread-134967] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:30:45.500 [DEBUG] [Thread-134967] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:30:45.509 [DEBUG] [Thread-134967] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:30:45.518 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:30:45.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T21:30:45.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T21:30:45.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:30:45.535 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:30:45.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:30:45.543 [DEBUG] [Thread-134967] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:30:48.484 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:30:54.845 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:30:55.024 [DEBUG] [Thread-134969 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:31:02.378 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:31:02.379 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:31:10.067 [DEBUG] [Thread-134970 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:31:15.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T21:31:15.562 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T21:31: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-12-31T21:31:16.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 21, 30, 54), 6.7, 64.59, 0.0, 20.98, 16.75, 0, 0, 0, 2, 0, 0),)
2025-12-31T21:31:16.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 21:30:54
2025-12-31T21:31:16.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T21:31:16.558 [DEBUG] [Thread-134971] [transport.py] [_log()] starting thread (client mode): 0xb1747700
2025-12-31T21:31:16.558 [DEBUG] [Thread-134971] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:31:16.577 [DEBUG] [Thread-134971] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T21:31:16.577 [INFO] [Thread-134971] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T21:31:16.579 [DEBUG] [Thread-134971] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:31:16.579 [DEBUG] [Thread-134971] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T21:31:16.579 [DEBUG] [Thread-134971] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:31:16.579 [DEBUG] [Thread-134971] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:31:16.579 [DEBUG] [Thread-134971] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:31:16.579 [DEBUG] [Thread-134971] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:31:16.579 [DEBUG] [Thread-134971] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:31:16.579 [DEBUG] [Thread-134971] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:31:16.579 [DEBUG] [Thread-134971] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:31:16.579 [DEBUG] [Thread-134971] [transport.py] [_log()] client lang: <none>
2025-12-31T21:31:16.579 [DEBUG] [Thread-134971] [transport.py] [_log()] server lang: <none>
2025-12-31T21:31:16.579 [DEBUG] [Thread-134971] [transport.py] [_log()] kex follows: False
2025-12-31T21:31:16.579 [DEBUG] [Thread-134971] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:31:16.579 [DEBUG] [Thread-134971] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:31:16.580 [DEBUG] [Thread-134971] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:31:16.580 [DEBUG] [Thread-134971] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:31:16.580 [DEBUG] [Thread-134971] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:31:16.580 [DEBUG] [Thread-134971] [transport.py] [_log()] Compression: none
2025-12-31T21:31:16.580 [DEBUG] [Thread-134971] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:31:16.588 [DEBUG] [Thread-134971] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:31:16.589 [DEBUG] [Thread-134971] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:31:16.589 [DEBUG] [Thread-134971] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T21:31:16.590 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T21:31:16.590 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:31:16.591 [DEBUG] [Thread-134971] [transport.py] [_log()] userauth is OK
2025-12-31T21:31:16.591 [DEBUG] [Thread-134971] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:31:16.591 [DEBUG] [Thread-134971] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:31:16.591 [DEBUG] [Thread-134971] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T21:31:16.592 [DEBUG] [Thread-134971] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:31:16.616 [INFO] [Thread-134971] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:31:16.617 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:31:17.274 [DEBUG] [Thread-134971] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:31:17.275 [DEBUG] [Thread-134971] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:31:17.275 [DEBUG] [Thread-134971] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T21:31:17.316 [DEBUG] [Thread-134971] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:31:17.316 [DEBUG] [Thread-134971] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:31:17.320 [DEBUG] [Thread-134971] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:31:17.333 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:31:17.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T21:31:17.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T21:31:17.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T21:31:17.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:31:17.345 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T21:31:17.345 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:31:17.345 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:31:17.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T21:31:17.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.812985 -999.00  +17.00  18.41     67  +10.90 1 2 1 1 1     0    0 5.31 -35.52 Z.ES. 16.7 18.4 199.1 28.0 18.1 -17.2 17.8 -17.3 17.7 -15.4 18.0 -15.3
2025-12-31T21:31:17.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T21:31:17.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T21:31:17.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.812985
2025-12-31T21:31:17.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T21:31:17.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T21:31:17.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T21:31:17.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T21:31:17.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T21:31:17.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T21:30:54', tmtdew=6.7, humidity=64.59, cloud=0.0, wind=20.98, temperature=16.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T21:30:54', seeing=1.58, atlas_timestamp='2025-12-31T19:30:41.904', atlas_cloud=2, atlas_rain=1, zp_data=[0.7407499999999994, 0.2817500000000006, 0.13475000000000215, 0.3744999999999994, 0.6269999999999998, nan, nan, nan, 0.4344999999999999, 0.09050000000000047, 0.3252500000000005, 0.33649999999999913, 0.8009999999999993, nan, nan, 0.0934999999999988, 0.06424999999999947, 0.1534999999999993, 0.4139999999999997, 1.2822499999999986, 1.585499999999998, nan, nan, -0.3047500000000003, 0.0389999999999997, 0.09149999999999991, 0.5287500000000005, nan, nan, 0.19650000000000034, -2.2204999999999995, -1.4059999999999988, -0.18625000000000114], zp_timestamp='2025-12-31T19:28:00')
2025-12-31T21:31:17.348 [DEBUG] [Thread-134971] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:31:17.432 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T21:31:17.444 [DEBUG] [Thread-134974] [transport.py] [_log()] starting thread (client mode): 0xb1797c10
2025-12-31T21:31:17.444 [DEBUG] [Thread-134974] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:31:17.459 [DEBUG] [Thread-134974] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T21:31:17.459 [INFO] [Thread-134974] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T21:31:17.467 [DEBUG] [Thread-134974] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:31:17.467 [DEBUG] [Thread-134974] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T21:31:17.467 [DEBUG] [Thread-134974] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:31:17.467 [DEBUG] [Thread-134974] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:31:17.467 [DEBUG] [Thread-134974] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:31:17.467 [DEBUG] [Thread-134974] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:31:17.467 [DEBUG] [Thread-134974] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:31:17.467 [DEBUG] [Thread-134974] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:31:17.467 [DEBUG] [Thread-134974] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:31:17.467 [DEBUG] [Thread-134974] [transport.py] [_log()] client lang: <none>
2025-12-31T21:31:17.467 [DEBUG] [Thread-134974] [transport.py] [_log()] server lang: <none>
2025-12-31T21:31:17.467 [DEBUG] [Thread-134974] [transport.py] [_log()] kex follows: False
2025-12-31T21:31:17.467 [DEBUG] [Thread-134974] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:31:17.467 [DEBUG] [Thread-134974] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:31:17.467 [DEBUG] [Thread-134974] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:31:17.467 [DEBUG] [Thread-134974] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:31:17.468 [DEBUG] [Thread-134974] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:31:17.468 [DEBUG] [Thread-134974] [transport.py] [_log()] Compression: none
2025-12-31T21:31:17.468 [DEBUG] [Thread-134974] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:31:17.527 [DEBUG] [Thread-134974] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:31:17.536 [DEBUG] [Thread-134974] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:31:17.537 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T21:31:17.538 [DEBUG] [Thread-134974] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T21:31:17.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:31:17.587 [DEBUG] [Thread-134974] [transport.py] [_log()] userauth is OK
2025-12-31T21:31:17.587 [DEBUG] [Thread-134974] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:31:17.588 [DEBUG] [Thread-134974] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:31:17.588 [DEBUG] [Thread-134974] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T21:31:17.588 [DEBUG] [Thread-134974] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:31:17.607 [INFO] [Thread-134974] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:31:17.607 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T21:31:17.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:31:18.436 [DEBUG] [Thread-134974] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:31:18.436 [DEBUG] [Thread-134974] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:31:18.484 [DEBUG] [Thread-134974] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:31:18.484 [DEBUG] [Thread-134974] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:31:18.494 [DEBUG] [Thread-134974] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:31:18.503 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:31:18.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T21:31:18.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T21:31:18.521 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:31:18.522 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:31:18.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:31:18.530 [DEBUG] [Thread-134974] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:31:25.107 [DEBUG] [Thread-134976 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:31:38.721 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:31:40.152 [DEBUG] [Thread-134977 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:31:41.880 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:31:43.862 [DEBUG] [Thread-134978 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:31:46.952 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:31:48.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T21:31:48.553 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T21:31:48.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T21:31:49.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 21, 31, 27), 6.71, 64.57, 0.0, 19.44, 16.73, 0, 0, 0, 2, 0, 0),)
2025-12-31T21:31:49.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 21:31:27
2025-12-31T21:31:49.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T21:31:49.533 [DEBUG] [Thread-134979] [transport.py] [_log()] starting thread (client mode): 0xb1795720
2025-12-31T21:31:49.533 [DEBUG] [Thread-134979] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:31:49.553 [DEBUG] [Thread-134979] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T21:31:49.554 [INFO] [Thread-134979] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T21:31:49.557 [DEBUG] [Thread-134979] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:31:49.557 [DEBUG] [Thread-134979] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T21:31:49.557 [DEBUG] [Thread-134979] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:31:49.557 [DEBUG] [Thread-134979] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:31:49.557 [DEBUG] [Thread-134979] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:31:49.557 [DEBUG] [Thread-134979] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:31:49.557 [DEBUG] [Thread-134979] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:31:49.557 [DEBUG] [Thread-134979] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:31:49.557 [DEBUG] [Thread-134979] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:31:49.558 [DEBUG] [Thread-134979] [transport.py] [_log()] client lang: <none>
2025-12-31T21:31:49.558 [DEBUG] [Thread-134979] [transport.py] [_log()] server lang: <none>
2025-12-31T21:31:49.558 [DEBUG] [Thread-134979] [transport.py] [_log()] kex follows: False
2025-12-31T21:31:49.558 [DEBUG] [Thread-134979] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:31:49.558 [DEBUG] [Thread-134979] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:31:49.558 [DEBUG] [Thread-134979] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:31:49.558 [DEBUG] [Thread-134979] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:31:49.558 [DEBUG] [Thread-134979] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:31:49.558 [DEBUG] [Thread-134979] [transport.py] [_log()] Compression: none
2025-12-31T21:31:49.558 [DEBUG] [Thread-134979] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:31:49.576 [DEBUG] [Thread-134979] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:31:49.577 [DEBUG] [Thread-134979] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:31:49.577 [DEBUG] [Thread-134979] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T21:31:49.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T21:31:49.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:31:49.580 [DEBUG] [Thread-134979] [transport.py] [_log()] userauth is OK
2025-12-31T21:31:49.580 [DEBUG] [Thread-134979] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:31:49.580 [DEBUG] [Thread-134979] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:31:49.580 [DEBUG] [Thread-134979] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T21:31:49.580 [DEBUG] [Thread-134979] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:31:49.605 [INFO] [Thread-134979] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:31:49.606 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:31:50.258 [DEBUG] [Thread-134979] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:31:50.258 [DEBUG] [Thread-134979] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:31:50.258 [DEBUG] [Thread-134979] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T21:31:50.299 [DEBUG] [Thread-134979] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:31:50.299 [DEBUG] [Thread-134979] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:31:50.303 [DEBUG] [Thread-134979] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:31:50.316 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:31:50.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T21:31:50.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T21:31:50.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T21:31:50.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:31:50.330 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T21:31:50.330 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:31:50.330 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:31:50.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T21:31:50.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.813332 -999.00  +16.90  14.97     67  +10.90 1 2 1 1 1     0    0 5.28 -34.66 z.ES. 11.1 15.0 203.4 23.3 18.0 -17.1 17.9 -17.0 17.7 -15.1 18.1 -15.1
2025-12-31T21:31:50.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T21:31:50.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T21:31:50.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.813332
2025-12-31T21:31:50.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T21:31:50.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T21:31:50.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T21:31:50.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T21:31:50.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T21:31:50.333 [DEBUG] [Thread-134979] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:31:50.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T21:31:27', tmtdew=6.71, humidity=64.57, cloud=0.0, wind=19.44, temperature=16.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T21:31:27', seeing=1.58, atlas_timestamp='2025-12-31T19:31:11.885', atlas_cloud=2, atlas_rain=1, zp_data=[0.7407499999999994, 0.2817500000000006, 0.13475000000000215, 0.3744999999999994, 0.6269999999999998, nan, nan, nan, 0.4344999999999999, 0.09050000000000047, 0.3252500000000005, 0.33649999999999913, 0.8009999999999993, nan, nan, 0.0934999999999988, 0.06424999999999947, 0.1534999999999993, 0.4139999999999997, 1.2822499999999986, 1.585499999999998, nan, nan, -0.3047500000000003, 0.0389999999999997, 0.09149999999999991, 0.5287500000000005, nan, nan, 0.19650000000000034, -2.2204999999999995, -1.4059999999999988, -0.18625000000000114], zp_timestamp='2025-12-31T19:28:00')
2025-12-31T21:31:50.418 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T21:31:50.430 [DEBUG] [Thread-134982] [transport.py] [_log()] starting thread (client mode): 0xb6bba560
2025-12-31T21:31:50.430 [DEBUG] [Thread-134982] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:31:50.445 [DEBUG] [Thread-134982] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T21:31:50.445 [INFO] [Thread-134982] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T21:31:50.452 [DEBUG] [Thread-134982] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:31:50.452 [DEBUG] [Thread-134982] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T21:31:50.452 [DEBUG] [Thread-134982] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:31:50.452 [DEBUG] [Thread-134982] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:31:50.453 [DEBUG] [Thread-134982] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:31:50.453 [DEBUG] [Thread-134982] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:31:50.453 [DEBUG] [Thread-134982] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:31:50.453 [DEBUG] [Thread-134982] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:31:50.453 [DEBUG] [Thread-134982] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:31:50.453 [DEBUG] [Thread-134982] [transport.py] [_log()] client lang: <none>
2025-12-31T21:31:50.453 [DEBUG] [Thread-134982] [transport.py] [_log()] server lang: <none>
2025-12-31T21:31:50.453 [DEBUG] [Thread-134982] [transport.py] [_log()] kex follows: False
2025-12-31T21:31:50.453 [DEBUG] [Thread-134982] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:31:50.453 [DEBUG] [Thread-134982] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:31:50.453 [DEBUG] [Thread-134982] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:31:50.453 [DEBUG] [Thread-134982] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:31:50.453 [DEBUG] [Thread-134982] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:31:50.453 [DEBUG] [Thread-134982] [transport.py] [_log()] Compression: none
2025-12-31T21:31:50.453 [DEBUG] [Thread-134982] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:31:50.511 [DEBUG] [Thread-134982] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:31:50.511 [DEBUG] [Thread-134982] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:31:50.512 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T21:31:50.512 [DEBUG] [Thread-134982] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T21:31:50.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:31:50.567 [DEBUG] [Thread-134982] [transport.py] [_log()] userauth is OK
2025-12-31T21:31:50.567 [DEBUG] [Thread-134982] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:31:50.567 [DEBUG] [Thread-134982] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:31:50.568 [DEBUG] [Thread-134982] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T21:31:50.568 [DEBUG] [Thread-134982] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:31:50.586 [INFO] [Thread-134982] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:31:50.586 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T21:31:50.587 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:31:51.383 [DEBUG] [Thread-134982] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:31:51.383 [DEBUG] [Thread-134982] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:31:51.431 [DEBUG] [Thread-134982] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:31:51.431 [DEBUG] [Thread-134982] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:31:51.440 [DEBUG] [Thread-134982] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:31:51.450 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:31:51.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T21:31:51.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T21:31:51.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:31:51.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:31:51.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:31:51.477 [DEBUG] [Thread-134982] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:31:52.328 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:31:55.186 [DEBUG] [Thread-134984 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:32:02.580 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:32:02.581 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:32:10.246 [DEBUG] [Thread-134985 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:32:11.754 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:32:16.147 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:32:21.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T21:32:21.500 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T21:32:21.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-12-31T21:32:22.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 21, 31, 59), 6.65, 64.61, 0.0, 18.56, 16.71, 0, 0, 0, 2, 0, 0),)
2025-12-31T21:32:22.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 21:31:59
2025-12-31T21:32:22.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T21:32:22.489 [DEBUG] [Thread-134986] [transport.py] [_log()] starting thread (client mode): 0xb6bb9510
2025-12-31T21:32:22.489 [DEBUG] [Thread-134986] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:32:22.511 [DEBUG] [Thread-134986] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T21:32:22.511 [INFO] [Thread-134986] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T21:32:22.513 [DEBUG] [Thread-134986] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:32:22.513 [DEBUG] [Thread-134986] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T21:32:22.513 [DEBUG] [Thread-134986] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:32:22.513 [DEBUG] [Thread-134986] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:32:22.513 [DEBUG] [Thread-134986] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:32:22.513 [DEBUG] [Thread-134986] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:32:22.513 [DEBUG] [Thread-134986] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:32:22.513 [DEBUG] [Thread-134986] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:32:22.513 [DEBUG] [Thread-134986] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:32:22.513 [DEBUG] [Thread-134986] [transport.py] [_log()] client lang: <none>
2025-12-31T21:32:22.513 [DEBUG] [Thread-134986] [transport.py] [_log()] server lang: <none>
2025-12-31T21:32:22.513 [DEBUG] [Thread-134986] [transport.py] [_log()] kex follows: False
2025-12-31T21:32:22.513 [DEBUG] [Thread-134986] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:32:22.513 [DEBUG] [Thread-134986] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:32:22.513 [DEBUG] [Thread-134986] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:32:22.513 [DEBUG] [Thread-134986] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:32:22.513 [DEBUG] [Thread-134986] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:32:22.513 [DEBUG] [Thread-134986] [transport.py] [_log()] Compression: none
2025-12-31T21:32:22.513 [DEBUG] [Thread-134986] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:32:22.531 [DEBUG] [Thread-134986] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:32:22.532 [DEBUG] [Thread-134986] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:32:22.532 [DEBUG] [Thread-134986] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T21:32:22.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T21:32:22.533 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:32:22.534 [DEBUG] [Thread-134986] [transport.py] [_log()] userauth is OK
2025-12-31T21:32:22.535 [DEBUG] [Thread-134986] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:32:22.535 [DEBUG] [Thread-134986] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:32:22.535 [DEBUG] [Thread-134986] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T21:32:22.535 [DEBUG] [Thread-134986] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:32:22.568 [INFO] [Thread-134986] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:32:22.568 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:32:23.211 [DEBUG] [Thread-134986] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:32:23.212 [DEBUG] [Thread-134986] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:32:23.212 [DEBUG] [Thread-134986] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T21:32:23.253 [DEBUG] [Thread-134986] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:32:23.253 [DEBUG] [Thread-134986] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:32:23.256 [DEBUG] [Thread-134986] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:32:23.270 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:32:23.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T21:32:23.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T21:32:23.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T21:32:23.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:32:23.282 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T21:32:23.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:32:23.283 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:32:23.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T21:32:23.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.813679 -999.00  +16.90  18.86     67  +10.90 1 2 1 1 1     0    0 5.29 -34.12 Z.ES. 13.3 18.9 214.2 22.2 18.0 -16.9 17.9 -17.1 17.7 -15.1 18.0 -15.1
2025-12-31T21:32:23.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T21:32:23.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T21:32:23.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.813679
2025-12-31T21:32:23.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T21:32:23.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T21:32:23.285 [DEBUG] [Thread-134986] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:32:23.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T21:32:23.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T21:32:23.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T21:32:23.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T21:31:59', tmtdew=6.65, humidity=64.61, cloud=0.0, wind=18.56, temperature=16.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T21:31:59', seeing=1.34, atlas_timestamp='2025-12-31T19:31:41.866', atlas_cloud=2, atlas_rain=1, zp_data=[0.7407499999999994, 0.2817500000000006, 0.13475000000000215, 0.3744999999999994, 0.6269999999999998, nan, nan, nan, 0.4344999999999999, 0.09050000000000047, 0.3252500000000005, 0.33649999999999913, 0.8009999999999993, nan, nan, 0.0934999999999988, 0.06424999999999947, 0.1534999999999993, 0.4139999999999997, 1.2822499999999986, 1.585499999999998, nan, nan, -0.3047500000000003, 0.0389999999999997, 0.09149999999999991, 0.5287500000000005, nan, nan, 0.19650000000000034, -2.2204999999999995, -1.4059999999999988, -0.18625000000000114], zp_timestamp='2025-12-31T19:28:00')
2025-12-31T21:32:23.369 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T21:32:23.380 [DEBUG] [Thread-134989] [transport.py] [_log()] starting thread (client mode): 0xb1795ae0
2025-12-31T21:32:23.380 [DEBUG] [Thread-134989] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:32:23.395 [DEBUG] [Thread-134989] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T21:32:23.395 [INFO] [Thread-134989] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T21:32:23.403 [DEBUG] [Thread-134989] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:32:23.403 [DEBUG] [Thread-134989] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T21:32:23.403 [DEBUG] [Thread-134989] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:32:23.403 [DEBUG] [Thread-134989] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:32:23.403 [DEBUG] [Thread-134989] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:32:23.403 [DEBUG] [Thread-134989] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:32:23.403 [DEBUG] [Thread-134989] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:32:23.403 [DEBUG] [Thread-134989] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:32:23.404 [DEBUG] [Thread-134989] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:32:23.404 [DEBUG] [Thread-134989] [transport.py] [_log()] client lang: <none>
2025-12-31T21:32:23.404 [DEBUG] [Thread-134989] [transport.py] [_log()] server lang: <none>
2025-12-31T21:32:23.404 [DEBUG] [Thread-134989] [transport.py] [_log()] kex follows: False
2025-12-31T21:32:23.404 [DEBUG] [Thread-134989] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:32:23.404 [DEBUG] [Thread-134989] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:32:23.404 [DEBUG] [Thread-134989] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:32:23.404 [DEBUG] [Thread-134989] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:32:23.404 [DEBUG] [Thread-134989] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:32:23.404 [DEBUG] [Thread-134989] [transport.py] [_log()] Compression: none
2025-12-31T21:32:23.404 [DEBUG] [Thread-134989] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:32:23.463 [DEBUG] [Thread-134989] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:32:23.464 [DEBUG] [Thread-134989] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:32:23.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T21:32:23.465 [DEBUG] [Thread-134989] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T21:32:23.466 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:32:23.523 [DEBUG] [Thread-134989] [transport.py] [_log()] userauth is OK
2025-12-31T21:32:23.523 [DEBUG] [Thread-134989] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:32:23.523 [DEBUG] [Thread-134989] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:32:23.524 [DEBUG] [Thread-134989] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T21:32:23.524 [DEBUG] [Thread-134989] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:32:23.542 [INFO] [Thread-134989] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:32:23.543 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T21:32:23.544 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:32:24.400 [DEBUG] [Thread-134989] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:32:24.401 [DEBUG] [Thread-134989] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:32:24.449 [DEBUG] [Thread-134989] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:32:24.449 [DEBUG] [Thread-134989] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:32:24.458 [DEBUG] [Thread-134989] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:32:24.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:32:24.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T21:32:24.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T21:32:24.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:32:24.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:32:24.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:32:24.495 [DEBUG] [Thread-134989] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:32:25.277 [DEBUG] [Thread-134991 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:32:25.531 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:32:29.916 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:32:36.645 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:32:40.330 [DEBUG] [Thread-134992 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:32:41.028 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:32:43.938 [DEBUG] [Thread-134993 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:32:54.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T21:32:54.517 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T21:32:54.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T21:32:55.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 21, 32, 31), 6.65, 64.62, 0.0, 20.98, 16.76, 0, 0, 0, 2, 0, 0),)
2025-12-31T21:32:55.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 21:32:31
2025-12-31T21:32:55.360 [DEBUG] [Thread-134994 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:32:55.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T21:32:55.552 [DEBUG] [Thread-134995] [transport.py] [_log()] starting thread (client mode): 0xb6ba2ce0
2025-12-31T21:32:55.552 [DEBUG] [Thread-134995] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:32:55.572 [DEBUG] [Thread-134995] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T21:32:55.572 [INFO] [Thread-134995] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T21:32:55.574 [DEBUG] [Thread-134995] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:32:55.574 [DEBUG] [Thread-134995] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T21:32:55.574 [DEBUG] [Thread-134995] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:32:55.574 [DEBUG] [Thread-134995] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:32:55.574 [DEBUG] [Thread-134995] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:32:55.574 [DEBUG] [Thread-134995] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:32:55.574 [DEBUG] [Thread-134995] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:32:55.574 [DEBUG] [Thread-134995] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:32:55.574 [DEBUG] [Thread-134995] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:32:55.574 [DEBUG] [Thread-134995] [transport.py] [_log()] client lang: <none>
2025-12-31T21:32:55.574 [DEBUG] [Thread-134995] [transport.py] [_log()] server lang: <none>
2025-12-31T21:32:55.574 [DEBUG] [Thread-134995] [transport.py] [_log()] kex follows: False
2025-12-31T21:32:55.574 [DEBUG] [Thread-134995] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:32:55.574 [DEBUG] [Thread-134995] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:32:55.574 [DEBUG] [Thread-134995] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:32:55.574 [DEBUG] [Thread-134995] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:32:55.574 [DEBUG] [Thread-134995] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:32:55.574 [DEBUG] [Thread-134995] [transport.py] [_log()] Compression: none
2025-12-31T21:32:55.574 [DEBUG] [Thread-134995] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:32:55.586 [DEBUG] [Thread-134995] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:32:55.586 [DEBUG] [Thread-134995] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:32:55.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T21:32:55.586 [DEBUG] [Thread-134995] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T21:32:55.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:32:55.587 [DEBUG] [Thread-134995] [transport.py] [_log()] userauth is OK
2025-12-31T21:32:55.587 [DEBUG] [Thread-134995] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:32:55.587 [DEBUG] [Thread-134995] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:32:55.587 [DEBUG] [Thread-134995] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T21:32:55.587 [DEBUG] [Thread-134995] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:32:55.601 [INFO] [Thread-134995] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:32:55.602 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:32:56.262 [DEBUG] [Thread-134995] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:32:56.262 [DEBUG] [Thread-134995] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:32:56.262 [DEBUG] [Thread-134995] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T21:32:56.304 [DEBUG] [Thread-134995] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:32:56.304 [DEBUG] [Thread-134995] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:32:56.306 [DEBUG] [Thread-134995] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:32:56.318 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:32:56.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T21:32:56.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T21:32:56.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T21:32:56.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:32:56.325 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T21:32:56.326 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:32:56.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:32:56.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T21:32:56.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.814026 -999.00  +17.00  12.93     67  +10.90 1 2 1 1 1     0    0 5.29 -34.13 Z.ES. 15.6 12.9 193.6 18.2 18.0 -16.8 17.9 -17.4 17.7 -14.9 18.1 -14.9
2025-12-31T21:32:56.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T21:32:56.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T21:32:56.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.814026
2025-12-31T21:32:56.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T21:32:56.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T21:32:56.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T21:32:56.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T21:32:56.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T21:32:56.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T21:32:31', tmtdew=6.65, humidity=64.62, cloud=0.0, wind=20.98, temperature=16.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T21:32:31', seeing=1.34, atlas_timestamp='2025-12-31T19:32:11.846', atlas_cloud=2, atlas_rain=1, zp_data=[0.7657499999999997, 0.23825000000000074, 0.25624999999999964, 0.5564999999999989, 0.7605000000000004, nan, 0.8069999999999995, 0.5292500000000002, 0.45149999999999935, 0.1460000000000008, 0.42774999999999963, 0.7315000000000005, 0.9589999999999996, nan, -1.1945000000000014, -1.0655000000000001, 0.08024999999999949, 0.31900000000000084, 0.5154999999999994, nan, nan, nan, -1.7197499999999994, -1.6602499999999996, 0.07399999999999984, 0.28250000000000064, 0.6057500000000005, nan, nan, -1.0749999999999993, nan, -1.1339999999999986, 0.05174999999999841], zp_timestamp='2025-12-31T19:31:00')
2025-12-31T21:32:56.327 [DEBUG] [Thread-134995] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:32:56.430 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T21:32:56.442 [DEBUG] [Thread-134998] [transport.py] [_log()] starting thread (client mode): 0xb1746f20
2025-12-31T21:32:56.442 [DEBUG] [Thread-134998] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:32:56.457 [DEBUG] [Thread-134998] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T21:32:56.457 [INFO] [Thread-134998] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T21:32:56.464 [DEBUG] [Thread-134998] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:32:56.465 [DEBUG] [Thread-134998] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T21:32:56.465 [DEBUG] [Thread-134998] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:32:56.465 [DEBUG] [Thread-134998] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:32:56.465 [DEBUG] [Thread-134998] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:32:56.465 [DEBUG] [Thread-134998] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:32:56.465 [DEBUG] [Thread-134998] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:32:56.465 [DEBUG] [Thread-134998] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:32:56.465 [DEBUG] [Thread-134998] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:32:56.465 [DEBUG] [Thread-134998] [transport.py] [_log()] client lang: <none>
2025-12-31T21:32:56.465 [DEBUG] [Thread-134998] [transport.py] [_log()] server lang: <none>
2025-12-31T21:32:56.465 [DEBUG] [Thread-134998] [transport.py] [_log()] kex follows: False
2025-12-31T21:32:56.465 [DEBUG] [Thread-134998] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:32:56.465 [DEBUG] [Thread-134998] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:32:56.465 [DEBUG] [Thread-134998] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:32:56.465 [DEBUG] [Thread-134998] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:32:56.465 [DEBUG] [Thread-134998] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:32:56.466 [DEBUG] [Thread-134998] [transport.py] [_log()] Compression: none
2025-12-31T21:32:56.466 [DEBUG] [Thread-134998] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:32:56.523 [DEBUG] [Thread-134998] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:32:56.524 [DEBUG] [Thread-134998] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:32:56.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T21:32:56.525 [DEBUG] [Thread-134998] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T21:32:56.526 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:32:56.580 [DEBUG] [Thread-134998] [transport.py] [_log()] userauth is OK
2025-12-31T21:32:56.580 [DEBUG] [Thread-134998] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:32:56.580 [DEBUG] [Thread-134998] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:32:56.580 [DEBUG] [Thread-134998] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T21:32:56.580 [DEBUG] [Thread-134998] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:32:56.598 [INFO] [Thread-134998] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:32:56.598 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T21:32:56.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:32:57.420 [DEBUG] [Thread-134998] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:32:57.421 [DEBUG] [Thread-134998] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:32:57.468 [DEBUG] [Thread-134998] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:32:57.468 [DEBUG] [Thread-134998] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:32:57.477 [DEBUG] [Thread-134998] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:32:57.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:32:57.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-12-31T21:32:57.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T21:32:57.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:32:57.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:32:57.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:32:57.511 [DEBUG] [Thread-134998] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:33:02.785 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:33:02.786 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:33:10.393 [DEBUG] [Thread-135000 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:33:25.445 [DEBUG] [Thread-135001 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:33:27.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T21:33:27.509 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T21:33:27.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T21:33:28.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 21, 33, 3), 6.64, 64.62, 0.0, 20.79, 16.71, 0, 0, 0, 2, 0, 0),)
2025-12-31T21:33:28.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 21:33:03
2025-12-31T21:33:28.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T21:33:28.520 [DEBUG] [Thread-135002] [transport.py] [_log()] starting thread (client mode): 0xb6bbbe20
2025-12-31T21:33:28.520 [DEBUG] [Thread-135002] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:33:28.540 [DEBUG] [Thread-135002] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T21:33:28.540 [INFO] [Thread-135002] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T21:33:28.543 [DEBUG] [Thread-135002] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:33:28.544 [DEBUG] [Thread-135002] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T21:33:28.544 [DEBUG] [Thread-135002] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:33:28.544 [DEBUG] [Thread-135002] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:33:28.544 [DEBUG] [Thread-135002] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:33:28.544 [DEBUG] [Thread-135002] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:33:28.544 [DEBUG] [Thread-135002] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:33:28.544 [DEBUG] [Thread-135002] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:33:28.544 [DEBUG] [Thread-135002] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:33:28.544 [DEBUG] [Thread-135002] [transport.py] [_log()] client lang: <none>
2025-12-31T21:33:28.544 [DEBUG] [Thread-135002] [transport.py] [_log()] server lang: <none>
2025-12-31T21:33:28.544 [DEBUG] [Thread-135002] [transport.py] [_log()] kex follows: False
2025-12-31T21:33:28.544 [DEBUG] [Thread-135002] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:33:28.544 [DEBUG] [Thread-135002] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:33:28.544 [DEBUG] [Thread-135002] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:33:28.544 [DEBUG] [Thread-135002] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:33:28.544 [DEBUG] [Thread-135002] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:33:28.544 [DEBUG] [Thread-135002] [transport.py] [_log()] Compression: none
2025-12-31T21:33:28.544 [DEBUG] [Thread-135002] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:33:28.562 [DEBUG] [Thread-135002] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:33:28.562 [DEBUG] [Thread-135002] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:33:28.563 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T21:33:28.563 [DEBUG] [Thread-135002] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T21:33:28.564 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:33:28.565 [DEBUG] [Thread-135002] [transport.py] [_log()] userauth is OK
2025-12-31T21:33:28.565 [DEBUG] [Thread-135002] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:33:28.565 [DEBUG] [Thread-135002] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:33:28.565 [DEBUG] [Thread-135002] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T21:33:28.565 [DEBUG] [Thread-135002] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:33:28.590 [INFO] [Thread-135002] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:33:28.591 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:33:29.200 [DEBUG] [Thread-135002] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:33:29.200 [DEBUG] [Thread-135002] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:33:29.201 [DEBUG] [Thread-135002] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T21:33:29.242 [DEBUG] [Thread-135002] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:33:29.242 [DEBUG] [Thread-135002] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:33:29.244 [DEBUG] [Thread-135002] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:33:29.256 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:33:29.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T21:33:29.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T21:33:29.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T21:33:29.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:33:29.262 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T21:33:29.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:33:29.262 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:33:29.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T21:33:29.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.814374 -999.00  +17.00   7.97     67  +10.90 1 2 1 1 1     0    0 5.40 -30.69 z.ES. 11.1 8.0 205.3 15.8 18.0 -16.8 17.9 -16.8 17.7 -15.0 18.0 -15.0
2025-12-31T21:33:29.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T21:33:29.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T21:33:29.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.814374
2025-12-31T21:33:29.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T21:33:29.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T21:33:29.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T21:33:29.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T21:33:29.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T21:33:29.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T21:33:03', tmtdew=6.64, humidity=64.62, cloud=0.0, wind=20.79, temperature=16.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T21:33:03', seeing=1.35, atlas_timestamp='2025-12-31T19:32:41.914', atlas_cloud=2, atlas_rain=1, zp_data=[0.7657499999999997, 0.23825000000000074, 0.25624999999999964, 0.5564999999999989, 0.7605000000000004, nan, 0.8069999999999995, 0.5292500000000002, 0.45149999999999935, 0.1460000000000008, 0.42774999999999963, 0.7315000000000005, 0.9589999999999996, nan, -1.1945000000000014, -1.0655000000000001, 0.08024999999999949, 0.31900000000000084, 0.5154999999999994, nan, nan, nan, -1.7197499999999994, -1.6602499999999996, 0.07399999999999984, 0.28250000000000064, 0.6057500000000005, nan, nan, -1.0749999999999993, nan, -1.1339999999999986, 0.05174999999999841], zp_timestamp='2025-12-31T19:31:00')
2025-12-31T21:33:29.264 [DEBUG] [Thread-135002] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:33:29.336 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T21:33:29.351 [DEBUG] [Thread-135005] [transport.py] [_log()] starting thread (client mode): 0xb1758df0
2025-12-31T21:33:29.351 [DEBUG] [Thread-135005] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:33:29.366 [DEBUG] [Thread-135005] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T21:33:29.366 [INFO] [Thread-135005] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T21:33:29.374 [DEBUG] [Thread-135005] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:33:29.374 [DEBUG] [Thread-135005] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T21:33:29.374 [DEBUG] [Thread-135005] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:33:29.374 [DEBUG] [Thread-135005] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:33:29.374 [DEBUG] [Thread-135005] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:33:29.374 [DEBUG] [Thread-135005] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:33:29.374 [DEBUG] [Thread-135005] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:33:29.374 [DEBUG] [Thread-135005] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:33:29.374 [DEBUG] [Thread-135005] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:33:29.374 [DEBUG] [Thread-135005] [transport.py] [_log()] client lang: <none>
2025-12-31T21:33:29.374 [DEBUG] [Thread-135005] [transport.py] [_log()] server lang: <none>
2025-12-31T21:33:29.374 [DEBUG] [Thread-135005] [transport.py] [_log()] kex follows: False
2025-12-31T21:33:29.374 [DEBUG] [Thread-135005] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:33:29.374 [DEBUG] [Thread-135005] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:33:29.374 [DEBUG] [Thread-135005] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:33:29.374 [DEBUG] [Thread-135005] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:33:29.374 [DEBUG] [Thread-135005] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:33:29.374 [DEBUG] [Thread-135005] [transport.py] [_log()] Compression: none
2025-12-31T21:33:29.374 [DEBUG] [Thread-135005] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:33:29.429 [DEBUG] [Thread-135005] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:33:29.429 [DEBUG] [Thread-135005] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:33:29.429 [DEBUG] [Thread-135005] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T21:33:29.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T21:33:29.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:33:29.489 [DEBUG] [Thread-135005] [transport.py] [_log()] userauth is OK
2025-12-31T21:33:29.489 [DEBUG] [Thread-135005] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:33:29.489 [DEBUG] [Thread-135005] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:33:29.489 [DEBUG] [Thread-135005] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T21:33:29.489 [DEBUG] [Thread-135005] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:33:29.502 [INFO] [Thread-135005] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:33:29.503 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T21:33:29.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:33:30.360 [DEBUG] [Thread-135005] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:33:30.360 [DEBUG] [Thread-135005] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:33:30.407 [DEBUG] [Thread-135005] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:33:30.407 [DEBUG] [Thread-135005] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:33:30.416 [DEBUG] [Thread-135005] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:33:30.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:33:30.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T21:33:30.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T21:33:30.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:33:30.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:33:30.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:33:30.448 [DEBUG] [Thread-135005] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:33:40.472 [DEBUG] [Thread-135007 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:33:40.850 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:33:43.958 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:33:44.007 [DEBUG] [Thread-135008 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:33:55.516 [DEBUG] [Thread-135009 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:34:00.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T21:34:00.448 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T21:34:00.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T21:34:01.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 21, 33, 35), 6.58, 65.19, 0.0, 24.53, 16.7, 0, 0, 0, 2, 0, 0),)
2025-12-31T21:34:01.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 21:33:35
2025-12-31T21:34:01.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T21:34:01.446 [DEBUG] [Thread-135010] [transport.py] [_log()] starting thread (client mode): 0xb1746620
2025-12-31T21:34:01.446 [DEBUG] [Thread-135010] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:34:01.466 [DEBUG] [Thread-135010] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T21:34:01.466 [INFO] [Thread-135010] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T21:34:01.469 [DEBUG] [Thread-135010] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:34:01.469 [DEBUG] [Thread-135010] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T21:34:01.469 [DEBUG] [Thread-135010] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:34:01.469 [DEBUG] [Thread-135010] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:34:01.469 [DEBUG] [Thread-135010] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:34:01.469 [DEBUG] [Thread-135010] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:34:01.469 [DEBUG] [Thread-135010] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:34:01.469 [DEBUG] [Thread-135010] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:34:01.469 [DEBUG] [Thread-135010] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:34:01.469 [DEBUG] [Thread-135010] [transport.py] [_log()] client lang: <none>
2025-12-31T21:34:01.469 [DEBUG] [Thread-135010] [transport.py] [_log()] server lang: <none>
2025-12-31T21:34:01.469 [DEBUG] [Thread-135010] [transport.py] [_log()] kex follows: False
2025-12-31T21:34:01.469 [DEBUG] [Thread-135010] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:34:01.469 [DEBUG] [Thread-135010] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:34:01.469 [DEBUG] [Thread-135010] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:34:01.470 [DEBUG] [Thread-135010] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:34:01.470 [DEBUG] [Thread-135010] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:34:01.470 [DEBUG] [Thread-135010] [transport.py] [_log()] Compression: none
2025-12-31T21:34:01.470 [DEBUG] [Thread-135010] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:34:01.486 [DEBUG] [Thread-135010] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:34:01.487 [DEBUG] [Thread-135010] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:34:01.487 [DEBUG] [Thread-135010] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T21:34:01.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T21:34:01.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:34:01.489 [DEBUG] [Thread-135010] [transport.py] [_log()] userauth is OK
2025-12-31T21:34:01.490 [DEBUG] [Thread-135010] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:34:01.490 [DEBUG] [Thread-135010] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:34:01.490 [DEBUG] [Thread-135010] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T21:34:01.490 [DEBUG] [Thread-135010] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:34:01.514 [INFO] [Thread-135010] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:34:01.515 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:34:02.165 [DEBUG] [Thread-135010] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:34:02.165 [DEBUG] [Thread-135010] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:34:02.165 [DEBUG] [Thread-135010] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T21:34:02.206 [DEBUG] [Thread-135010] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:34:02.206 [DEBUG] [Thread-135010] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:34:02.210 [DEBUG] [Thread-135010] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:34:02.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:34:02.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T21:34:02.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T21:34:02.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T21:34:02.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:34:02.235 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T21:34:02.235 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:34:02.236 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:34:02.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T21:34:02.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.815068 -999.00  +16.80  22.15     68  +10.90 1 2 1 1 1     0    0 5.51 -28.32 Z.ES. 13.5 22.1 195.4 27.4 18.0 -16.8 17.8 -16.8 17.7 -15.0 18.0 -15.4
2025-12-31T21:34:02.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T21:34:02.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T21:34:02.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.815068
2025-12-31T21:34:02.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T21:34:02.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T21:34:02.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T21:34:02.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T21:34:02.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T21:34:02.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T21:33:35', tmtdew=6.58, humidity=65.19, cloud=0.0, wind=24.53, temperature=16.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T21:33:35', seeing=1.74, atlas_timestamp='2025-12-31T19:33:41.875', atlas_cloud=2, atlas_rain=1, zp_data=[0.7657499999999997, 0.23825000000000074, 0.25624999999999964, 0.5564999999999989, 0.7605000000000004, nan, 0.8069999999999995, 0.5292500000000002, 0.45149999999999935, 0.1460000000000008, 0.42774999999999963, 0.7315000000000005, 0.9589999999999996, nan, -1.1945000000000014, -1.0655000000000001, 0.08024999999999949, 0.31900000000000084, 0.5154999999999994, nan, nan, nan, -1.7197499999999994, -1.6602499999999996, 0.07399999999999984, 0.28250000000000064, 0.6057500000000005, nan, nan, -1.0749999999999993, nan, -1.1339999999999986, 0.05174999999999841], zp_timestamp='2025-12-31T19:31:00')
2025-12-31T21:34:02.238 [DEBUG] [Thread-135010] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:34:02.316 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T21:34:02.328 [DEBUG] [Thread-135013] [transport.py] [_log()] starting thread (client mode): 0xb6bba7a0
2025-12-31T21:34:02.328 [DEBUG] [Thread-135013] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:34:02.342 [DEBUG] [Thread-135013] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T21:34:02.342 [INFO] [Thread-135013] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T21:34:02.350 [DEBUG] [Thread-135013] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:34:02.350 [DEBUG] [Thread-135013] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T21:34:02.350 [DEBUG] [Thread-135013] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:34:02.350 [DEBUG] [Thread-135013] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:34:02.350 [DEBUG] [Thread-135013] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:34:02.350 [DEBUG] [Thread-135013] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:34:02.350 [DEBUG] [Thread-135013] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:34:02.350 [DEBUG] [Thread-135013] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:34:02.350 [DEBUG] [Thread-135013] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:34:02.350 [DEBUG] [Thread-135013] [transport.py] [_log()] client lang: <none>
2025-12-31T21:34:02.350 [DEBUG] [Thread-135013] [transport.py] [_log()] server lang: <none>
2025-12-31T21:34:02.350 [DEBUG] [Thread-135013] [transport.py] [_log()] kex follows: False
2025-12-31T21:34:02.350 [DEBUG] [Thread-135013] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:34:02.350 [DEBUG] [Thread-135013] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:34:02.350 [DEBUG] [Thread-135013] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:34:02.351 [DEBUG] [Thread-135013] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:34:02.351 [DEBUG] [Thread-135013] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:34:02.351 [DEBUG] [Thread-135013] [transport.py] [_log()] Compression: none
2025-12-31T21:34:02.351 [DEBUG] [Thread-135013] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:34:02.407 [DEBUG] [Thread-135013] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:34:02.408 [DEBUG] [Thread-135013] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:34:02.408 [DEBUG] [Thread-135013] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T21:34:02.409 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T21:34:02.409 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:34:02.463 [DEBUG] [Thread-135013] [transport.py] [_log()] userauth is OK
2025-12-31T21:34:02.464 [DEBUG] [Thread-135013] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:34:02.464 [DEBUG] [Thread-135013] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:34:02.464 [DEBUG] [Thread-135013] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T21:34:02.464 [DEBUG] [Thread-135013] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:34:02.483 [INFO] [Thread-135013] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:34:02.483 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T21:34:02.484 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:34:02.997 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:34:02.998 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:34:03.295 [DEBUG] [Thread-135013] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:34:03.295 [DEBUG] [Thread-135013] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:34:03.343 [DEBUG] [Thread-135013] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:34:03.343 [DEBUG] [Thread-135013] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:34:03.352 [DEBUG] [Thread-135013] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:34:03.364 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:34:03.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T21:34:03.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T21:34:03.382 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:34:03.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:34:03.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:34:03.395 [DEBUG] [Thread-135013] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:34:10.546 [DEBUG] [Thread-135015 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:34:18.442 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:34:24.281 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:34:25.587 [DEBUG] [Thread-135016 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:34:27.355 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:34:33.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T21:34:33.414 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T21:34:33.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T21:34:33.755 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:34:34.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 21, 34, 7), 6.58, 65.21, 0.0, 24.21, 16.71, 0, 0, 0, 2, 0, 0),)
2025-12-31T21:34:34.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 21:34:07
2025-12-31T21:34:34.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T21:34:34.391 [DEBUG] [Thread-135017] [transport.py] [_log()] starting thread (client mode): 0xb1746ef0
2025-12-31T21:34:34.391 [DEBUG] [Thread-135017] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:34:34.411 [DEBUG] [Thread-135017] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T21:34:34.411 [INFO] [Thread-135017] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T21:34:34.414 [DEBUG] [Thread-135017] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:34:34.414 [DEBUG] [Thread-135017] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T21:34:34.414 [DEBUG] [Thread-135017] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:34:34.414 [DEBUG] [Thread-135017] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:34:34.414 [DEBUG] [Thread-135017] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:34:34.414 [DEBUG] [Thread-135017] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:34:34.414 [DEBUG] [Thread-135017] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:34:34.414 [DEBUG] [Thread-135017] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:34:34.414 [DEBUG] [Thread-135017] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:34:34.414 [DEBUG] [Thread-135017] [transport.py] [_log()] client lang: <none>
2025-12-31T21:34:34.414 [DEBUG] [Thread-135017] [transport.py] [_log()] server lang: <none>
2025-12-31T21:34:34.414 [DEBUG] [Thread-135017] [transport.py] [_log()] kex follows: False
2025-12-31T21:34:34.415 [DEBUG] [Thread-135017] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:34:34.415 [DEBUG] [Thread-135017] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:34:34.415 [DEBUG] [Thread-135017] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:34:34.415 [DEBUG] [Thread-135017] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:34:34.415 [DEBUG] [Thread-135017] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:34:34.415 [DEBUG] [Thread-135017] [transport.py] [_log()] Compression: none
2025-12-31T21:34:34.415 [DEBUG] [Thread-135017] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:34:34.433 [DEBUG] [Thread-135017] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:34:34.434 [DEBUG] [Thread-135017] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:34:34.435 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T21:34:34.435 [DEBUG] [Thread-135017] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T21:34:34.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:34:34.437 [DEBUG] [Thread-135017] [transport.py] [_log()] userauth is OK
2025-12-31T21:34:34.437 [DEBUG] [Thread-135017] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:34:34.437 [DEBUG] [Thread-135017] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:34:34.437 [DEBUG] [Thread-135017] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T21:34:34.437 [DEBUG] [Thread-135017] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:34:34.461 [INFO] [Thread-135017] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:34:34.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:34:35.113 [DEBUG] [Thread-135017] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:34:35.113 [DEBUG] [Thread-135017] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:34:35.113 [DEBUG] [Thread-135017] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T21:34:35.154 [DEBUG] [Thread-135017] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:34:35.154 [DEBUG] [Thread-135017] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:34:35.158 [DEBUG] [Thread-135017] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:34:35.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:34:35.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T21:34:35.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T21:34:35.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T21:34:35.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:34:35.182 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T21:34:35.182 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:34:35.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:34:35.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T21:34:35.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.815415 -999.00  +16.80  23.02     68  +10.90 1 2 1 1 1     0    0 5.48 -28.87 z.ES. 20.9 23.0 193.4 24.2 17.9 -16.6 17.8 -16.7 17.7 -14.9 17.9 -15.1
2025-12-31T21:34:35.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T21:34:35.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T21:34:35.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.815415
2025-12-31T21:34:35.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T21:34:35.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T21:34:35.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T21:34:35.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T21:34:35.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T21:34:35.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T21:34:07', tmtdew=6.58, humidity=65.21, cloud=0.0, wind=24.21, temperature=16.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T21:34:07', seeing=1.52, atlas_timestamp='2025-12-31T19:34:11.856', atlas_cloud=2, atlas_rain=1, zp_data=[0.7657499999999997, 0.23825000000000074, 0.25624999999999964, 0.5564999999999989, 0.7605000000000004, nan, 0.8069999999999995, 0.5292500000000002, 0.45149999999999935, 0.1460000000000008, 0.42774999999999963, 0.7315000000000005, 0.9589999999999996, nan, -1.1945000000000014, -1.0655000000000001, 0.08024999999999949, 0.31900000000000084, 0.5154999999999994, nan, nan, nan, -1.7197499999999994, -1.6602499999999996, 0.07399999999999984, 0.28250000000000064, 0.6057500000000005, nan, nan, -1.0749999999999993, nan, -1.1339999999999986, 0.05174999999999841], zp_timestamp='2025-12-31T19:31:00')
2025-12-31T21:34:35.185 [DEBUG] [Thread-135017] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:34:35.268 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T21:34:35.281 [DEBUG] [Thread-135020] [transport.py] [_log()] starting thread (client mode): 0xb17476a0
2025-12-31T21:34:35.281 [DEBUG] [Thread-135020] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:34:35.296 [DEBUG] [Thread-135020] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T21:34:35.296 [INFO] [Thread-135020] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T21:34:35.304 [DEBUG] [Thread-135020] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:34:35.304 [DEBUG] [Thread-135020] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T21:34:35.304 [DEBUG] [Thread-135020] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:34:35.304 [DEBUG] [Thread-135020] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:34:35.304 [DEBUG] [Thread-135020] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:34:35.304 [DEBUG] [Thread-135020] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:34:35.304 [DEBUG] [Thread-135020] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:34:35.304 [DEBUG] [Thread-135020] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:34:35.304 [DEBUG] [Thread-135020] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:34:35.304 [DEBUG] [Thread-135020] [transport.py] [_log()] client lang: <none>
2025-12-31T21:34:35.304 [DEBUG] [Thread-135020] [transport.py] [_log()] server lang: <none>
2025-12-31T21:34:35.304 [DEBUG] [Thread-135020] [transport.py] [_log()] kex follows: False
2025-12-31T21:34:35.304 [DEBUG] [Thread-135020] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:34:35.304 [DEBUG] [Thread-135020] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:34:35.305 [DEBUG] [Thread-135020] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:34:35.305 [DEBUG] [Thread-135020] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:34:35.305 [DEBUG] [Thread-135020] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:34:35.305 [DEBUG] [Thread-135020] [transport.py] [_log()] Compression: none
2025-12-31T21:34:35.305 [DEBUG] [Thread-135020] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:34:35.364 [DEBUG] [Thread-135020] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:34:35.364 [DEBUG] [Thread-135020] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:34:35.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T21:34:35.365 [DEBUG] [Thread-135020] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T21:34:35.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:34:35.420 [DEBUG] [Thread-135020] [transport.py] [_log()] userauth is OK
2025-12-31T21:34:35.420 [DEBUG] [Thread-135020] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:34:35.420 [DEBUG] [Thread-135020] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:34:35.420 [DEBUG] [Thread-135020] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T21:34:35.420 [DEBUG] [Thread-135020] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:34:35.438 [INFO] [Thread-135020] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:34:35.439 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T21:34:35.439 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:34:36.281 [DEBUG] [Thread-135020] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:34:36.282 [DEBUG] [Thread-135020] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:34:36.329 [DEBUG] [Thread-135020] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:34:36.330 [DEBUG] [Thread-135020] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:34:36.338 [DEBUG] [Thread-135020] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:34:36.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:34:36.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T21:34:36.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T21:34:36.364 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:34:36.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:34:36.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:34:36.372 [DEBUG] [Thread-135020] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:34:40.620 [DEBUG] [Thread-135022 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:34:44.057 [DEBUG] [Thread-135023 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:34:55.657 [DEBUG] [Thread-135024 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:35:03.199 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:35:03.201 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:35:06.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T21:35:06.390 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T21:35:06.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T21:35:07.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 21, 34, 39), 6.52, 65.22, 0.0, 25.21, 16.6, 0, 0, 0, 2, 0, 0),)
2025-12-31T21:35:07.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 21:34:39
2025-12-31T21:35:07.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T21:35:07.383 [DEBUG] [Thread-135025] [transport.py] [_log()] starting thread (client mode): 0xb95936a0
2025-12-31T21:35:07.383 [DEBUG] [Thread-135025] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:35:07.399 [DEBUG] [Thread-135025] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T21:35:07.399 [INFO] [Thread-135025] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T21:35:07.401 [DEBUG] [Thread-135025] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:35:07.401 [DEBUG] [Thread-135025] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T21:35:07.401 [DEBUG] [Thread-135025] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:35:07.401 [DEBUG] [Thread-135025] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:35:07.401 [DEBUG] [Thread-135025] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:35:07.401 [DEBUG] [Thread-135025] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:35:07.401 [DEBUG] [Thread-135025] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:35:07.401 [DEBUG] [Thread-135025] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:35:07.401 [DEBUG] [Thread-135025] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:35:07.401 [DEBUG] [Thread-135025] [transport.py] [_log()] client lang: <none>
2025-12-31T21:35:07.401 [DEBUG] [Thread-135025] [transport.py] [_log()] server lang: <none>
2025-12-31T21:35:07.401 [DEBUG] [Thread-135025] [transport.py] [_log()] kex follows: False
2025-12-31T21:35:07.401 [DEBUG] [Thread-135025] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:35:07.401 [DEBUG] [Thread-135025] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:35:07.401 [DEBUG] [Thread-135025] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:35:07.402 [DEBUG] [Thread-135025] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:35:07.402 [DEBUG] [Thread-135025] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:35:07.402 [DEBUG] [Thread-135025] [transport.py] [_log()] Compression: none
2025-12-31T21:35:07.402 [DEBUG] [Thread-135025] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:35:07.414 [DEBUG] [Thread-135025] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:35:07.415 [DEBUG] [Thread-135025] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:35:07.416 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T21:35:07.416 [DEBUG] [Thread-135025] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T21:35:07.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:35:07.418 [DEBUG] [Thread-135025] [transport.py] [_log()] userauth is OK
2025-12-31T21:35:07.419 [DEBUG] [Thread-135025] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:35:07.419 [DEBUG] [Thread-135025] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:35:07.419 [DEBUG] [Thread-135025] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T21:35:07.419 [DEBUG] [Thread-135025] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:35:07.436 [INFO] [Thread-135025] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:35:07.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:35:10.691 [DEBUG] [Thread-135027 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:35:15.509 [DEBUG] [Thread-135025] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:35:15.509 [DEBUG] [Thread-135025] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:35:15.509 [DEBUG] [Thread-135025] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T21:35:15.549 [DEBUG] [Thread-135025] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:35:15.550 [DEBUG] [Thread-135025] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:35:15.552 [DEBUG] [Thread-135025] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:35:15.676 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:35:15.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T21:35:15.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T21:35:15.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T21:35:15.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:35:15.759 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T21:35:15.759 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:35:15.759 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:35:15.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T21:35:15.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.815762 -999.00  +16.80  14.32     68  +10.90 1 2 1 1 1     0    0 5.42 -29.34 z.ES. 14.8 14.3 217.0 20.7 17.9 -16.6 17.8 -17.1 17.6 -14.7 18.0 -15.0
2025-12-31T21:35:15.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T21:35:15.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T21:35:15.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.815762
2025-12-31T21:35:15.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T21:35:15.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T21:35:15.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T21:35:15.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T21:35:15.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T21:35:15.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T21:34:39', tmtdew=6.52, humidity=65.22, cloud=0.0, wind=25.21, temperature=16.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T21:34:39', seeing=1.52, atlas_timestamp='2025-12-31T19:34:41.837', atlas_cloud=2, atlas_rain=1, zp_data=[0.7657499999999997, 0.23825000000000074, 0.25624999999999964, 0.5564999999999989, 0.7605000000000004, nan, 0.8069999999999995, 0.5292500000000002, 0.45149999999999935, 0.1460000000000008, 0.42774999999999963, 0.7315000000000005, 0.9589999999999996, nan, -1.1945000000000014, -1.0655000000000001, 0.08024999999999949, 0.31900000000000084, 0.5154999999999994, nan, nan, nan, -1.7197499999999994, -1.6602499999999996, 0.07399999999999984, 0.28250000000000064, 0.6057500000000005, nan, nan, -1.0749999999999993, nan, -1.1339999999999986, 0.05174999999999841], zp_timestamp='2025-12-31T19:31:00')
2025-12-31T21:35:15.760 [DEBUG] [Thread-135025] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:35:15.834 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T21:35:15.846 [DEBUG] [Thread-135029] [transport.py] [_log()] starting thread (client mode): 0xb1759db0
2025-12-31T21:35:15.846 [DEBUG] [Thread-135029] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:35:15.860 [DEBUG] [Thread-135029] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T21:35:15.861 [INFO] [Thread-135029] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T21:35:15.868 [DEBUG] [Thread-135029] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:35:15.868 [DEBUG] [Thread-135029] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T21:35:15.868 [DEBUG] [Thread-135029] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:35:15.868 [DEBUG] [Thread-135029] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:35:15.868 [DEBUG] [Thread-135029] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:35:15.868 [DEBUG] [Thread-135029] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:35:15.868 [DEBUG] [Thread-135029] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:35:15.869 [DEBUG] [Thread-135029] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:35:15.869 [DEBUG] [Thread-135029] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:35:15.869 [DEBUG] [Thread-135029] [transport.py] [_log()] client lang: <none>
2025-12-31T21:35:15.869 [DEBUG] [Thread-135029] [transport.py] [_log()] server lang: <none>
2025-12-31T21:35:15.869 [DEBUG] [Thread-135029] [transport.py] [_log()] kex follows: False
2025-12-31T21:35:15.869 [DEBUG] [Thread-135029] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:35:15.869 [DEBUG] [Thread-135029] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:35:15.869 [DEBUG] [Thread-135029] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:35:15.869 [DEBUG] [Thread-135029] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:35:15.869 [DEBUG] [Thread-135029] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:35:15.869 [DEBUG] [Thread-135029] [transport.py] [_log()] Compression: none
2025-12-31T21:35:15.869 [DEBUG] [Thread-135029] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:35:15.927 [DEBUG] [Thread-135029] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:35:15.928 [DEBUG] [Thread-135029] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:35:15.929 [DEBUG] [Thread-135029] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T21:35:15.929 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T21:35:15.930 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:35:15.984 [DEBUG] [Thread-135029] [transport.py] [_log()] userauth is OK
2025-12-31T21:35:15.984 [DEBUG] [Thread-135029] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:35:15.984 [DEBUG] [Thread-135029] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:35:15.984 [DEBUG] [Thread-135029] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T21:35:15.984 [DEBUG] [Thread-135029] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:35:16.008 [INFO] [Thread-135029] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:35:16.008 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T21:35:16.009 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:35:16.805 [DEBUG] [Thread-135029] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:35:16.805 [DEBUG] [Thread-135029] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:35:16.853 [DEBUG] [Thread-135029] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:35:16.854 [DEBUG] [Thread-135029] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:35:16.862 [DEBUG] [Thread-135029] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:35:16.870 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:35:16.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T21:35:16.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T21:35:16.888 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:35:16.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:35:16.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:35:16.896 [DEBUG] [Thread-135029] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:35:25.724 [DEBUG] [Thread-135031 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:35:40.759 [DEBUG] [Thread-135032 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:35:44.110 [DEBUG] [Thread-135033 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:35:46.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T21:35:46.919 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T21:35:46.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T21:35:47.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 21, 35, 43), 6.51, 65.26, 0.0, 26.71, 16.6, 0, 0, 0, 2, 0, 0),)
2025-12-31T21:35:47.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 21:35:43
2025-12-31T21:35:47.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T21:35:47.904 [DEBUG] [Thread-135034] [transport.py] [_log()] starting thread (client mode): 0xb1764c70
2025-12-31T21:35:47.904 [DEBUG] [Thread-135034] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:35:47.924 [DEBUG] [Thread-135034] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T21:35:47.924 [INFO] [Thread-135034] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T21:35:47.928 [DEBUG] [Thread-135034] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:35:47.928 [DEBUG] [Thread-135034] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T21:35:47.928 [DEBUG] [Thread-135034] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:35:47.928 [DEBUG] [Thread-135034] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:35:47.928 [DEBUG] [Thread-135034] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:35:47.928 [DEBUG] [Thread-135034] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:35:47.928 [DEBUG] [Thread-135034] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:35:47.928 [DEBUG] [Thread-135034] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:35:47.928 [DEBUG] [Thread-135034] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:35:47.928 [DEBUG] [Thread-135034] [transport.py] [_log()] client lang: <none>
2025-12-31T21:35:47.928 [DEBUG] [Thread-135034] [transport.py] [_log()] server lang: <none>
2025-12-31T21:35:47.928 [DEBUG] [Thread-135034] [transport.py] [_log()] kex follows: False
2025-12-31T21:35:47.928 [DEBUG] [Thread-135034] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:35:47.929 [DEBUG] [Thread-135034] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:35:47.929 [DEBUG] [Thread-135034] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:35:47.929 [DEBUG] [Thread-135034] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:35:47.929 [DEBUG] [Thread-135034] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:35:47.929 [DEBUG] [Thread-135034] [transport.py] [_log()] Compression: none
2025-12-31T21:35:47.929 [DEBUG] [Thread-135034] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:35:47.945 [DEBUG] [Thread-135034] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:35:47.946 [DEBUG] [Thread-135034] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:35:47.946 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T21:35:47.947 [DEBUG] [Thread-135034] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T21:35:47.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:35:47.949 [DEBUG] [Thread-135034] [transport.py] [_log()] userauth is OK
2025-12-31T21:35:47.949 [DEBUG] [Thread-135034] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:35:47.949 [DEBUG] [Thread-135034] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:35:47.949 [DEBUG] [Thread-135034] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T21:35:47.949 [DEBUG] [Thread-135034] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:35:47.973 [INFO] [Thread-135034] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:35:47.973 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:35:48.625 [DEBUG] [Thread-135034] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:35:48.625 [DEBUG] [Thread-135034] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:35:48.626 [DEBUG] [Thread-135034] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T21:35:48.666 [DEBUG] [Thread-135034] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:35:48.666 [DEBUG] [Thread-135034] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:35:48.669 [DEBUG] [Thread-135034] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:35:48.683 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:35:48.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T21:35:48.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T21:35:48.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T21:35:48.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:35:48.693 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T21:35:48.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:35:48.694 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:35:48.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T21:35:48.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.816110 -999.00  +16.80  13.80     68  +10.90 1 2 1 1 1     0    0 5.21 -30.82 z.ES. 13.0 13.8 218.2 24.4 17.9 -16.3 17.8 -16.2 17.6 -14.7 17.9 -14.8
2025-12-31T21:35:48.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T21:35:48.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T21:35:48.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.816110
2025-12-31T21:35:48.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T21:35:48.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T21:35:48.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T21:35:48.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T21:35:48.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T21:35:48.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T21:35:43', tmtdew=6.51, humidity=65.26, cloud=0.0, wind=26.71, temperature=16.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T21:35:43', seeing=1.37, atlas_timestamp='2025-12-31T19:35:11.904', atlas_cloud=2, atlas_rain=1, zp_data=[1.0797499999999998, 0.7387500000000005, 0.7432500000000006, nan, nan, nan, nan, nan, 0.8534999999999995, 0.3879999999999999, 0.48625000000000007, 1.3639999999999999, nan, nan, nan, -1.0380000000000003, 0.6852499999999999, 0.22399999999999842, 0.2795000000000005, nan, 1.275999999999999, 0.5062499999999988, -1.7647499999999994, -1.2217499999999983, 0.359, 0.4344999999999999, 0.5062499999999996, 0.543000000000001, 0.6355000000000004, 0.6180000000000012, nan, -1.772499999999999, -0.4922500000000021], zp_timestamp='2025-12-31T19:34:00')
2025-12-31T21:35:48.696 [DEBUG] [Thread-135034] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:35:48.786 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T21:35:48.796 [DEBUG] [Thread-135037] [transport.py] [_log()] starting thread (client mode): 0xb17650c0
2025-12-31T21:35:48.797 [DEBUG] [Thread-135037] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:35:48.813 [DEBUG] [Thread-135037] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T21:35:48.813 [INFO] [Thread-135037] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T21:35:48.820 [DEBUG] [Thread-135037] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:35:48.820 [DEBUG] [Thread-135037] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T21:35:48.820 [DEBUG] [Thread-135037] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:35:48.820 [DEBUG] [Thread-135037] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:35:48.820 [DEBUG] [Thread-135037] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:35:48.821 [DEBUG] [Thread-135037] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:35:48.821 [DEBUG] [Thread-135037] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:35:48.821 [DEBUG] [Thread-135037] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:35:48.821 [DEBUG] [Thread-135037] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:35:48.821 [DEBUG] [Thread-135037] [transport.py] [_log()] client lang: <none>
2025-12-31T21:35:48.821 [DEBUG] [Thread-135037] [transport.py] [_log()] server lang: <none>
2025-12-31T21:35:48.821 [DEBUG] [Thread-135037] [transport.py] [_log()] kex follows: False
2025-12-31T21:35:48.821 [DEBUG] [Thread-135037] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:35:48.821 [DEBUG] [Thread-135037] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:35:48.822 [DEBUG] [Thread-135037] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:35:48.822 [DEBUG] [Thread-135037] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:35:48.822 [DEBUG] [Thread-135037] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:35:48.822 [DEBUG] [Thread-135037] [transport.py] [_log()] Compression: none
2025-12-31T21:35:48.822 [DEBUG] [Thread-135037] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:35:48.879 [DEBUG] [Thread-135037] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:35:48.880 [DEBUG] [Thread-135037] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:35:48.881 [DEBUG] [Thread-135037] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T21:35:48.881 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T21:35:48.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:35:48.935 [DEBUG] [Thread-135037] [transport.py] [_log()] userauth is OK
2025-12-31T21:35:48.936 [DEBUG] [Thread-135037] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:35:48.936 [DEBUG] [Thread-135037] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:35:48.936 [DEBUG] [Thread-135037] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T21:35:48.936 [DEBUG] [Thread-135037] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:35:48.957 [INFO] [Thread-135037] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:35:48.957 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T21:35:48.958 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:35:49.790 [DEBUG] [Thread-135037] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:35:49.790 [DEBUG] [Thread-135037] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:35:49.840 [DEBUG] [Thread-135037] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:35:49.840 [DEBUG] [Thread-135037] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:35:49.848 [DEBUG] [Thread-135037] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:35:49.861 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:35:49.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T21:35:49.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T21:35:49.887 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:35:49.887 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:35:49.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:35:49.895 [DEBUG] [Thread-135037] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:35:55.793 [DEBUG] [Thread-135039 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:36:03.401 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:36:03.402 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:36:10.839 [DEBUG] [Thread-135040 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:36:19.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T21:36:19.918 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T21:36:19.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T21:36:20.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 21, 36, 15), 6.49, 65.34, 0.0, 24.97, 16.6, 0, 0, 0, 2, 0, 0),)
2025-12-31T21:36:20.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 21:36:15
2025-12-31T21:36:20.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T21:36:20.924 [DEBUG] [Thread-135041] [transport.py] [_log()] starting thread (client mode): 0xb17476a0
2025-12-31T21:36:20.924 [DEBUG] [Thread-135041] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:36:20.946 [DEBUG] [Thread-135041] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T21:36:20.946 [INFO] [Thread-135041] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T21:36:20.949 [DEBUG] [Thread-135041] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:36:20.949 [DEBUG] [Thread-135041] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T21:36:20.949 [DEBUG] [Thread-135041] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:36:20.949 [DEBUG] [Thread-135041] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:36:20.949 [DEBUG] [Thread-135041] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:36:20.949 [DEBUG] [Thread-135041] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:36:20.949 [DEBUG] [Thread-135041] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:36:20.949 [DEBUG] [Thread-135041] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:36:20.949 [DEBUG] [Thread-135041] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:36:20.949 [DEBUG] [Thread-135041] [transport.py] [_log()] client lang: <none>
2025-12-31T21:36:20.949 [DEBUG] [Thread-135041] [transport.py] [_log()] server lang: <none>
2025-12-31T21:36:20.949 [DEBUG] [Thread-135041] [transport.py] [_log()] kex follows: False
2025-12-31T21:36:20.949 [DEBUG] [Thread-135041] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:36:20.950 [DEBUG] [Thread-135041] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:36:20.950 [DEBUG] [Thread-135041] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:36:20.950 [DEBUG] [Thread-135041] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:36:20.950 [DEBUG] [Thread-135041] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:36:20.950 [DEBUG] [Thread-135041] [transport.py] [_log()] Compression: none
2025-12-31T21:36:20.950 [DEBUG] [Thread-135041] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:36:20.967 [DEBUG] [Thread-135041] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:36:20.967 [DEBUG] [Thread-135041] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:36:20.968 [DEBUG] [Thread-135041] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T21:36:20.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T21:36:20.969 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:36:20.970 [DEBUG] [Thread-135041] [transport.py] [_log()] userauth is OK
2025-12-31T21:36:20.970 [DEBUG] [Thread-135041] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:36:20.971 [DEBUG] [Thread-135041] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:36:20.971 [DEBUG] [Thread-135041] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T21:36:20.971 [DEBUG] [Thread-135041] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:36:21.010 [INFO] [Thread-135041] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:36:21.011 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:36:21.851 [DEBUG] [Thread-135041] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:36:21.851 [DEBUG] [Thread-135041] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:36:21.852 [DEBUG] [Thread-135041] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T21:36:21.892 [DEBUG] [Thread-135041] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:36:21.892 [DEBUG] [Thread-135041] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:36:21.896 [DEBUG] [Thread-135041] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:36:21.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:36:21.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T21:36:21.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T21:36:21.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T21:36:21.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:36:21.920 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T21:36:21.920 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:36:21.920 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:36:21.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T21:36:21.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.816457 -999.00  +16.80  17.95     68  +10.90 1 2 1 1 1     0    0 5.32 -31.39 Z.ES. 18.9 17.9 204.2 25.4 17.9 -16.5 17.7 -16.4 17.6 -14.8 17.9 -14.9
2025-12-31T21:36:21.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T21:36:21.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T21:36:21.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.816457
2025-12-31T21:36:21.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T21:36:21.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T21:36:21.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T21:36:21.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T21:36:21.922 [DEBUG] [Thread-135041] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:36:21.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T21:36:21.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T21:36:15', tmtdew=6.49, humidity=65.34, cloud=0.0, wind=24.97, temperature=16.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T21:36:15', seeing=1.51, atlas_timestamp='2025-12-31T19:35:41.885', atlas_cloud=2, atlas_rain=1, zp_data=[1.0797499999999998, 0.7387500000000005, 0.7432500000000006, nan, nan, nan, nan, nan, 0.8534999999999995, 0.3879999999999999, 0.48625000000000007, 1.3639999999999999, nan, nan, nan, -1.0380000000000003, 0.6852499999999999, 0.22399999999999842, 0.2795000000000005, nan, 1.275999999999999, 0.5062499999999988, -1.7647499999999994, -1.2217499999999983, 0.359, 0.4344999999999999, 0.5062499999999996, 0.543000000000001, 0.6355000000000004, 0.6180000000000012, nan, -1.772499999999999, -0.4922500000000021], zp_timestamp='2025-12-31T19:34:00')
2025-12-31T21:36:22.006 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T21:36:22.018 [DEBUG] [Thread-135044] [transport.py] [_log()] starting thread (client mode): 0xb1775cf0
2025-12-31T21:36:22.018 [DEBUG] [Thread-135044] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:36:22.034 [DEBUG] [Thread-135044] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T21:36:22.034 [INFO] [Thread-135044] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T21:36:22.041 [DEBUG] [Thread-135044] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:36:22.042 [DEBUG] [Thread-135044] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T21:36:22.042 [DEBUG] [Thread-135044] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:36:22.042 [DEBUG] [Thread-135044] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:36:22.042 [DEBUG] [Thread-135044] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:36:22.042 [DEBUG] [Thread-135044] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:36:22.042 [DEBUG] [Thread-135044] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:36:22.042 [DEBUG] [Thread-135044] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:36:22.042 [DEBUG] [Thread-135044] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:36:22.042 [DEBUG] [Thread-135044] [transport.py] [_log()] client lang: <none>
2025-12-31T21:36:22.043 [DEBUG] [Thread-135044] [transport.py] [_log()] server lang: <none>
2025-12-31T21:36:22.043 [DEBUG] [Thread-135044] [transport.py] [_log()] kex follows: False
2025-12-31T21:36:22.043 [DEBUG] [Thread-135044] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:36:22.043 [DEBUG] [Thread-135044] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:36:22.043 [DEBUG] [Thread-135044] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:36:22.043 [DEBUG] [Thread-135044] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:36:22.043 [DEBUG] [Thread-135044] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:36:22.044 [DEBUG] [Thread-135044] [transport.py] [_log()] Compression: none
2025-12-31T21:36:22.044 [DEBUG] [Thread-135044] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:36:22.101 [DEBUG] [Thread-135044] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:36:22.102 [DEBUG] [Thread-135044] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:36:22.103 [DEBUG] [Thread-135044] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T21:36:22.103 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T21:36:22.104 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:36:22.156 [DEBUG] [Thread-135044] [transport.py] [_log()] userauth is OK
2025-12-31T21:36:22.157 [DEBUG] [Thread-135044] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:36:22.157 [DEBUG] [Thread-135044] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:36:22.157 [DEBUG] [Thread-135044] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T21:36:22.157 [DEBUG] [Thread-135044] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:36:22.178 [INFO] [Thread-135044] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:36:22.178 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T21:36:22.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:36:23.017 [DEBUG] [Thread-135044] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:36:23.017 [DEBUG] [Thread-135044] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:36:23.065 [DEBUG] [Thread-135044] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:36:23.065 [DEBUG] [Thread-135044] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:36:23.074 [DEBUG] [Thread-135044] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:36:23.083 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:36:23.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T21:36:23.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-12-31T21:36:23.102 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:36:23.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:36:23.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:36:23.111 [DEBUG] [Thread-135044] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:36:25.874 [DEBUG] [Thread-135046 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:36:34.792 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:36:37.950 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:36:40.938 [DEBUG] [Thread-135047 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:36:42.975 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:36:44.181 [DEBUG] [Thread-135048 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:36:48.387 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:36:53.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T21:36:53.126 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T21:36:53.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T21:36:53.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 21, 36, 47), 6.48, 65.39, 0.0, 23.47, 16.58, 0, 0, 0, 2, 0, 0),)
2025-12-31T21:36:53.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 21:36:47
2025-12-31T21:36:53.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T21:36:54.115 [DEBUG] [Thread-135049] [transport.py] [_log()] starting thread (client mode): 0xb1765660
2025-12-31T21:36:54.116 [DEBUG] [Thread-135049] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:36:54.136 [DEBUG] [Thread-135049] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T21:36:54.136 [INFO] [Thread-135049] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T21:36:54.139 [DEBUG] [Thread-135049] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:36:54.139 [DEBUG] [Thread-135049] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T21:36:54.139 [DEBUG] [Thread-135049] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:36:54.139 [DEBUG] [Thread-135049] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:36:54.139 [DEBUG] [Thread-135049] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:36:54.139 [DEBUG] [Thread-135049] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:36:54.139 [DEBUG] [Thread-135049] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:36:54.139 [DEBUG] [Thread-135049] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:36:54.139 [DEBUG] [Thread-135049] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:36:54.139 [DEBUG] [Thread-135049] [transport.py] [_log()] client lang: <none>
2025-12-31T21:36:54.139 [DEBUG] [Thread-135049] [transport.py] [_log()] server lang: <none>
2025-12-31T21:36:54.139 [DEBUG] [Thread-135049] [transport.py] [_log()] kex follows: False
2025-12-31T21:36:54.139 [DEBUG] [Thread-135049] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:36:54.139 [DEBUG] [Thread-135049] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:36:54.139 [DEBUG] [Thread-135049] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:36:54.139 [DEBUG] [Thread-135049] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:36:54.139 [DEBUG] [Thread-135049] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:36:54.139 [DEBUG] [Thread-135049] [transport.py] [_log()] Compression: none
2025-12-31T21:36:54.139 [DEBUG] [Thread-135049] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:36:54.155 [DEBUG] [Thread-135049] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:36:54.155 [DEBUG] [Thread-135049] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:36:54.155 [DEBUG] [Thread-135049] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T21:36:54.156 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T21:36:54.156 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:36:54.156 [DEBUG] [Thread-135049] [transport.py] [_log()] userauth is OK
2025-12-31T21:36:54.156 [DEBUG] [Thread-135049] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:36:54.156 [DEBUG] [Thread-135049] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:36:54.156 [DEBUG] [Thread-135049] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T21:36:54.156 [DEBUG] [Thread-135049] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:36:54.166 [INFO] [Thread-135049] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:36:54.166 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:36:54.804 [DEBUG] [Thread-135049] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:36:54.804 [DEBUG] [Thread-135049] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:36:54.805 [DEBUG] [Thread-135049] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T21:36:54.845 [DEBUG] [Thread-135049] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:36:54.845 [DEBUG] [Thread-135049] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:36:54.848 [DEBUG] [Thread-135049] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:36:54.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:36:54.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T21:36:54.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T21:36:54.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T21:36:54.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:36:54.868 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T21:36:54.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:36:54.868 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:36:54.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T21:36:54.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.816804 -999.00  +16.70  21.79     68  +10.90 1 2 1 1 1     0    0 5.20 -32.68 Z.ES. 15.8 21.8 196.8 30.7 17.9 -16.2 17.7 -16.2 17.6 -14.7 17.9 -15.0
2025-12-31T21:36:54.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T21:36:54.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T21:36:54.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.816804
2025-12-31T21:36:54.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T21:36:54.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T21:36:54.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T21:36:54.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T21:36:54.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T21:36:54.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T21:36:47', tmtdew=6.48, humidity=65.39, cloud=0.0, wind=23.47, temperature=16.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T21:36:48', seeing=1.24, atlas_timestamp='2025-12-31T19:36:11.866', atlas_cloud=2, atlas_rain=1, zp_data=[1.0797499999999998, 0.7387500000000005, 0.7432500000000006, nan, nan, nan, nan, nan, 0.8534999999999995, 0.3879999999999999, 0.48625000000000007, 1.3639999999999999, nan, nan, nan, -1.0380000000000003, 0.6852499999999999, 0.22399999999999842, 0.2795000000000005, nan, 1.275999999999999, 0.5062499999999988, -1.7647499999999994, -1.2217499999999983, 0.359, 0.4344999999999999, 0.5062499999999996, 0.543000000000001, 0.6355000000000004, 0.6180000000000012, nan, -1.772499999999999, -0.4922500000000021], zp_timestamp='2025-12-31T19:34:00')
2025-12-31T21:36:54.872 [DEBUG] [Thread-135049] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:36:54.956 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T21:36:54.969 [DEBUG] [Thread-135052] [transport.py] [_log()] starting thread (client mode): 0xb6bbbfd0
2025-12-31T21:36:54.969 [DEBUG] [Thread-135052] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:36:54.984 [DEBUG] [Thread-135052] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T21:36:54.984 [INFO] [Thread-135052] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T21:36:54.992 [DEBUG] [Thread-135052] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:36:54.992 [DEBUG] [Thread-135052] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T21:36:54.992 [DEBUG] [Thread-135052] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:36:54.993 [DEBUG] [Thread-135052] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:36:54.993 [DEBUG] [Thread-135052] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:36:54.993 [DEBUG] [Thread-135052] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:36:54.993 [DEBUG] [Thread-135052] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:36:54.993 [DEBUG] [Thread-135052] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:36:54.993 [DEBUG] [Thread-135052] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:36:54.993 [DEBUG] [Thread-135052] [transport.py] [_log()] client lang: <none>
2025-12-31T21:36:54.993 [DEBUG] [Thread-135052] [transport.py] [_log()] server lang: <none>
2025-12-31T21:36:54.993 [DEBUG] [Thread-135052] [transport.py] [_log()] kex follows: False
2025-12-31T21:36:54.994 [DEBUG] [Thread-135052] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:36:54.994 [DEBUG] [Thread-135052] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:36:54.994 [DEBUG] [Thread-135052] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:36:54.994 [DEBUG] [Thread-135052] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:36:54.994 [DEBUG] [Thread-135052] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:36:54.994 [DEBUG] [Thread-135052] [transport.py] [_log()] Compression: none
2025-12-31T21:36:54.994 [DEBUG] [Thread-135052] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:36:55.053 [DEBUG] [Thread-135052] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:36:55.053 [DEBUG] [Thread-135052] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:36:55.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T21:36:55.055 [DEBUG] [Thread-135052] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T21:36:55.056 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:36:55.112 [DEBUG] [Thread-135052] [transport.py] [_log()] userauth is OK
2025-12-31T21:36:55.113 [DEBUG] [Thread-135052] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:36:55.113 [DEBUG] [Thread-135052] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:36:55.113 [DEBUG] [Thread-135052] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T21:36:55.113 [DEBUG] [Thread-135052] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:36:55.133 [INFO] [Thread-135052] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:36:55.133 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T21:36:55.134 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:36:55.963 [DEBUG] [Thread-135052] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:36:55.963 [DEBUG] [Thread-135052] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:36:55.969 [DEBUG] [Thread-135054 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:36:56.012 [DEBUG] [Thread-135052] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:36:56.012 [DEBUG] [Thread-135052] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:36:56.022 [DEBUG] [Thread-135052] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:36:56.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:36:56.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T21:36:56.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T21:36:56.051 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:36:56.051 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:36:56.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:36:56.059 [DEBUG] [Thread-135052] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:37:03.605 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:37:03.607 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:37:07.763 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:37:11.020 [DEBUG] [Thread-135055 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:37:12.236 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:37:26.050 [DEBUG] [Thread-135056 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:37:26.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T21:37:26.081 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T21:37:26.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T21:37:26.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 21, 37, 20), 6.48, 65.37, 0.0, 22.37, 16.58, 0, 0, 0, 2, 0, 0),)
2025-12-31T21:37:26.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 21:37:20
2025-12-31T21:37:26.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T21:37:27.091 [DEBUG] [Thread-135057] [transport.py] [_log()] starting thread (client mode): 0xb1765d80
2025-12-31T21:37:27.091 [DEBUG] [Thread-135057] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:37:27.110 [DEBUG] [Thread-135057] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T21:37:27.110 [INFO] [Thread-135057] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T21:37:27.112 [DEBUG] [Thread-135057] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:37:27.112 [DEBUG] [Thread-135057] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T21:37:27.112 [DEBUG] [Thread-135057] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:37:27.112 [DEBUG] [Thread-135057] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:37:27.112 [DEBUG] [Thread-135057] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:37:27.112 [DEBUG] [Thread-135057] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:37:27.112 [DEBUG] [Thread-135057] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:37:27.112 [DEBUG] [Thread-135057] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:37:27.112 [DEBUG] [Thread-135057] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:37:27.112 [DEBUG] [Thread-135057] [transport.py] [_log()] client lang: <none>
2025-12-31T21:37:27.112 [DEBUG] [Thread-135057] [transport.py] [_log()] server lang: <none>
2025-12-31T21:37:27.112 [DEBUG] [Thread-135057] [transport.py] [_log()] kex follows: False
2025-12-31T21:37:27.112 [DEBUG] [Thread-135057] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:37:27.112 [DEBUG] [Thread-135057] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:37:27.112 [DEBUG] [Thread-135057] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:37:27.112 [DEBUG] [Thread-135057] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:37:27.112 [DEBUG] [Thread-135057] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:37:27.112 [DEBUG] [Thread-135057] [transport.py] [_log()] Compression: none
2025-12-31T21:37:27.112 [DEBUG] [Thread-135057] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:37:27.123 [DEBUG] [Thread-135057] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:37:27.123 [DEBUG] [Thread-135057] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:37:27.124 [DEBUG] [Thread-135057] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T21:37:27.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T21:37:27.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:37:27.124 [DEBUG] [Thread-135057] [transport.py] [_log()] userauth is OK
2025-12-31T21:37:27.124 [DEBUG] [Thread-135057] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:37:27.124 [DEBUG] [Thread-135057] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:37:27.124 [DEBUG] [Thread-135057] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T21:37:27.124 [DEBUG] [Thread-135057] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:37:27.133 [INFO] [Thread-135057] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:37:27.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:37:27.710 [DEBUG] [Thread-135057] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:37:27.710 [DEBUG] [Thread-135057] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:37:27.710 [DEBUG] [Thread-135057] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T21:37:27.750 [DEBUG] [Thread-135057] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:37:27.750 [DEBUG] [Thread-135057] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:37:27.753 [DEBUG] [Thread-135057] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:37:27.764 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:37:27.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T21:37:27.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T21:37:27.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T21:37:27.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:37:27.769 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T21:37:27.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:37:27.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:37:27.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T21:37:27.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.817498 -999.00  +16.70  11.07     68  +10.90 1 2 1 1 1     0    0 5.24 -32.08 ..ES. 14.7 11.1 202.1 21.1 17.9 -16.3 17.7 -16.7 17.6 -15.3 17.9 -15.1
2025-12-31T21:37:27.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T21:37:27.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T21:37:27.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.817498
2025-12-31T21:37:27.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T21:37:27.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T21:37:27.778 [DEBUG] [Thread-135057] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:37:27.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T21:37:27.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T21:37:27.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T21:37:27.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T21:37:20', tmtdew=6.48, humidity=65.37, cloud=0.0, wind=22.37, temperature=16.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T21:37:20', seeing=1.45, atlas_timestamp='2025-12-31T19:37:11.827', atlas_cloud=2, atlas_rain=1, zp_data=[1.0797499999999998, 0.7387500000000005, 0.7432500000000006, nan, nan, nan, nan, nan, 0.8534999999999995, 0.3879999999999999, 0.48625000000000007, 1.3639999999999999, nan, nan, nan, -1.0380000000000003, 0.6852499999999999, 0.22399999999999842, 0.2795000000000005, nan, 1.275999999999999, 0.5062499999999988, -1.7647499999999994, -1.2217499999999983, 0.359, 0.4344999999999999, 0.5062499999999996, 0.543000000000001, 0.6355000000000004, 0.6180000000000012, nan, -1.772499999999999, -0.4922500000000021], zp_timestamp='2025-12-31T19:34:00')
2025-12-31T21:37:27.852 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T21:37:27.863 [DEBUG] [Thread-135060] [transport.py] [_log()] starting thread (client mode): 0xb6bbd1e0
2025-12-31T21:37:27.863 [DEBUG] [Thread-135060] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:37:27.878 [DEBUG] [Thread-135060] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T21:37:27.878 [INFO] [Thread-135060] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T21:37:27.885 [DEBUG] [Thread-135060] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:37:27.885 [DEBUG] [Thread-135060] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T21:37:27.885 [DEBUG] [Thread-135060] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:37:27.885 [DEBUG] [Thread-135060] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:37:27.885 [DEBUG] [Thread-135060] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:37:27.885 [DEBUG] [Thread-135060] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:37:27.885 [DEBUG] [Thread-135060] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:37:27.885 [DEBUG] [Thread-135060] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:37:27.885 [DEBUG] [Thread-135060] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:37:27.885 [DEBUG] [Thread-135060] [transport.py] [_log()] client lang: <none>
2025-12-31T21:37:27.885 [DEBUG] [Thread-135060] [transport.py] [_log()] server lang: <none>
2025-12-31T21:37:27.885 [DEBUG] [Thread-135060] [transport.py] [_log()] kex follows: False
2025-12-31T21:37:27.886 [DEBUG] [Thread-135060] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:37:27.886 [DEBUG] [Thread-135060] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:37:27.886 [DEBUG] [Thread-135060] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:37:27.886 [DEBUG] [Thread-135060] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:37:27.886 [DEBUG] [Thread-135060] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:37:27.886 [DEBUG] [Thread-135060] [transport.py] [_log()] Compression: none
2025-12-31T21:37:27.886 [DEBUG] [Thread-135060] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:37:27.943 [DEBUG] [Thread-135060] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:37:27.943 [DEBUG] [Thread-135060] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:37:27.943 [DEBUG] [Thread-135060] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T21:37:27.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T21:37:27.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:37:28.000 [DEBUG] [Thread-135060] [transport.py] [_log()] userauth is OK
2025-12-31T21:37:28.000 [DEBUG] [Thread-135060] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:37:28.000 [DEBUG] [Thread-135060] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:37:28.000 [DEBUG] [Thread-135060] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T21:37:28.000 [DEBUG] [Thread-135060] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:37:28.016 [INFO] [Thread-135060] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:37:28.016 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T21:37:28.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:37:28.881 [DEBUG] [Thread-135060] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:37:28.882 [DEBUG] [Thread-135060] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:37:28.930 [DEBUG] [Thread-135060] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:37:28.930 [DEBUG] [Thread-135060] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:37:28.940 [DEBUG] [Thread-135060] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:37:28.949 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:37:28.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T21:37:28.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T21:37:28.970 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:37:28.970 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:37:28.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:37:28.979 [DEBUG] [Thread-135060] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:37:31.562 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:37:36.037 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:37:41.081 [DEBUG] [Thread-135062 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:37:42.904 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:37:44.260 [DEBUG] [Thread-135063 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:37:47.333 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:37:56.133 [DEBUG] [Thread-135064 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:37:59.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T21:37:59.001 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T21:37:59.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T21:37:59.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 21, 37, 52), 6.48, 65.39, 0.0, 23.31, 16.52, 0, 0, 0, 2, 0, 0),)
2025-12-31T21:37:59.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 21:37:52
2025-12-31T21:37:59.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T21:37:59.987 [DEBUG] [Thread-135065] [transport.py] [_log()] starting thread (client mode): 0xb6bb9060
2025-12-31T21:37:59.987 [DEBUG] [Thread-135065] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:38:00.007 [DEBUG] [Thread-135065] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T21:38:00.007 [INFO] [Thread-135065] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T21:38:00.010 [DEBUG] [Thread-135065] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:38:00.010 [DEBUG] [Thread-135065] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T21:38:00.010 [DEBUG] [Thread-135065] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:38:00.010 [DEBUG] [Thread-135065] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:38:00.010 [DEBUG] [Thread-135065] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:38:00.010 [DEBUG] [Thread-135065] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:38:00.010 [DEBUG] [Thread-135065] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:38:00.010 [DEBUG] [Thread-135065] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:38:00.010 [DEBUG] [Thread-135065] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:38:00.010 [DEBUG] [Thread-135065] [transport.py] [_log()] client lang: <none>
2025-12-31T21:38:00.010 [DEBUG] [Thread-135065] [transport.py] [_log()] server lang: <none>
2025-12-31T21:38:00.010 [DEBUG] [Thread-135065] [transport.py] [_log()] kex follows: False
2025-12-31T21:38:00.010 [DEBUG] [Thread-135065] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:38:00.010 [DEBUG] [Thread-135065] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:38:00.010 [DEBUG] [Thread-135065] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:38:00.010 [DEBUG] [Thread-135065] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:38:00.010 [DEBUG] [Thread-135065] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:38:00.011 [DEBUG] [Thread-135065] [transport.py] [_log()] Compression: none
2025-12-31T21:38:00.011 [DEBUG] [Thread-135065] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:38:00.029 [DEBUG] [Thread-135065] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:38:00.029 [DEBUG] [Thread-135065] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:38:00.029 [DEBUG] [Thread-135065] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T21:38:00.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T21:38:00.030 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:38:00.030 [DEBUG] [Thread-135065] [transport.py] [_log()] userauth is OK
2025-12-31T21:38:00.030 [DEBUG] [Thread-135065] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:38:00.030 [DEBUG] [Thread-135065] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:38:00.030 [DEBUG] [Thread-135065] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T21:38:00.030 [DEBUG] [Thread-135065] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:38:00.047 [INFO] [Thread-135065] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:38:00.047 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:38:00.720 [DEBUG] [Thread-135065] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:38:00.720 [DEBUG] [Thread-135065] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:38:00.721 [DEBUG] [Thread-135065] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T21:38:00.762 [DEBUG] [Thread-135065] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:38:00.762 [DEBUG] [Thread-135065] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:38:00.765 [DEBUG] [Thread-135065] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:38:00.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:38:00.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T21:38:00.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T21:38:00.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T21:38:00.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:38:00.786 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T21:38:00.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:38:00.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:38:00.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T21:38:00.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.817846 -999.00  +16.80  11.89     68  +10.90 1 2 1 1 1     0    0 5.18 -34.15 ..ESw 20.8 11.9 204.4 20.0 17.9 -16.4 17.7 -17.0 17.6 -15.5 17.9 -15.2
2025-12-31T21:38:00.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T21:38:00.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T21:38:00.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.817846
2025-12-31T21:38:00.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T21:38:00.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T21:38:00.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T21:38:00.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T21:38:00.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T21:38:00.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T21:37:52', tmtdew=6.48, humidity=65.39, cloud=0.0, wind=23.31, temperature=16.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T21:37:52', seeing=1.45, atlas_timestamp='2025-12-31T19:37:41.894', atlas_cloud=2, atlas_rain=1, zp_data=[1.0797499999999998, 0.7387500000000005, 0.7432500000000006, nan, nan, nan, nan, nan, 0.8534999999999995, 0.3879999999999999, 0.48625000000000007, 1.3639999999999999, nan, nan, nan, -1.0380000000000003, 0.6852499999999999, 0.22399999999999842, 0.2795000000000005, nan, 1.275999999999999, 0.5062499999999988, -1.7647499999999994, -1.2217499999999983, 0.359, 0.4344999999999999, 0.5062499999999996, 0.543000000000001, 0.6355000000000004, 0.6180000000000012, nan, -1.772499999999999, -0.4922500000000021], zp_timestamp='2025-12-31T19:34:00')
2025-12-31T21:38:00.788 [DEBUG] [Thread-135065] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:38:00.874 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T21:38:00.886 [DEBUG] [Thread-135068] [transport.py] [_log()] starting thread (client mode): 0xb6bb9bd0
2025-12-31T21:38:00.886 [DEBUG] [Thread-135068] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:38:00.901 [DEBUG] [Thread-135068] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T21:38:00.901 [INFO] [Thread-135068] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T21:38:00.909 [DEBUG] [Thread-135068] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:38:00.909 [DEBUG] [Thread-135068] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T21:38:00.909 [DEBUG] [Thread-135068] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:38:00.909 [DEBUG] [Thread-135068] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:38:00.909 [DEBUG] [Thread-135068] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:38:00.909 [DEBUG] [Thread-135068] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:38:00.909 [DEBUG] [Thread-135068] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:38:00.909 [DEBUG] [Thread-135068] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:38:00.909 [DEBUG] [Thread-135068] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:38:00.909 [DEBUG] [Thread-135068] [transport.py] [_log()] client lang: <none>
2025-12-31T21:38:00.909 [DEBUG] [Thread-135068] [transport.py] [_log()] server lang: <none>
2025-12-31T21:38:00.909 [DEBUG] [Thread-135068] [transport.py] [_log()] kex follows: False
2025-12-31T21:38:00.909 [DEBUG] [Thread-135068] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:38:00.909 [DEBUG] [Thread-135068] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:38:00.909 [DEBUG] [Thread-135068] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:38:00.909 [DEBUG] [Thread-135068] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:38:00.909 [DEBUG] [Thread-135068] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:38:00.909 [DEBUG] [Thread-135068] [transport.py] [_log()] Compression: none
2025-12-31T21:38:00.909 [DEBUG] [Thread-135068] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:38:00.967 [DEBUG] [Thread-135068] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:38:00.967 [DEBUG] [Thread-135068] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:38:00.967 [DEBUG] [Thread-135068] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T21:38:00.967 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T21:38:00.967 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:38:01.024 [DEBUG] [Thread-135068] [transport.py] [_log()] userauth is OK
2025-12-31T21:38:01.024 [DEBUG] [Thread-135068] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:38:01.024 [DEBUG] [Thread-135068] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:38:01.024 [DEBUG] [Thread-135068] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T21:38:01.024 [DEBUG] [Thread-135068] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:38:01.042 [INFO] [Thread-135068] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:38:01.042 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T21:38:01.042 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:38:01.972 [DEBUG] [Thread-135068] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:38:01.972 [DEBUG] [Thread-135068] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:38:02.020 [DEBUG] [Thread-135068] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:38:02.020 [DEBUG] [Thread-135068] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:38:02.028 [DEBUG] [Thread-135068] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:38:02.036 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:38:02.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T21:38:02.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T21:38:02.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:38:02.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:38:02.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:38:02.060 [DEBUG] [Thread-135068] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:38:03.813 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:38:03.814 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:38:11.163 [DEBUG] [Thread-135070 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:38:26.223 [DEBUG] [Thread-135071 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:38:32.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T21:38:32.068 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T21:38:32.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T21:38:32.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 21, 38, 24), 6.47, 65.44, 0.0, 24.38, 16.57, 0, 0, 0, 2, 0, 0),)
2025-12-31T21:38:32.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 21:38:24
2025-12-31T21:38:32.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T21:38:33.034 [DEBUG] [Thread-135072] [transport.py] [_log()] starting thread (client mode): 0xb9592860
2025-12-31T21:38:33.034 [DEBUG] [Thread-135072] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:38:33.054 [DEBUG] [Thread-135072] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T21:38:33.054 [INFO] [Thread-135072] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T21:38:33.057 [DEBUG] [Thread-135072] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:38:33.057 [DEBUG] [Thread-135072] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T21:38:33.057 [DEBUG] [Thread-135072] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:38:33.057 [DEBUG] [Thread-135072] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:38:33.057 [DEBUG] [Thread-135072] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:38:33.057 [DEBUG] [Thread-135072] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:38:33.057 [DEBUG] [Thread-135072] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:38:33.057 [DEBUG] [Thread-135072] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:38:33.057 [DEBUG] [Thread-135072] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:38:33.057 [DEBUG] [Thread-135072] [transport.py] [_log()] client lang: <none>
2025-12-31T21:38:33.058 [DEBUG] [Thread-135072] [transport.py] [_log()] server lang: <none>
2025-12-31T21:38:33.058 [DEBUG] [Thread-135072] [transport.py] [_log()] kex follows: False
2025-12-31T21:38:33.058 [DEBUG] [Thread-135072] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:38:33.058 [DEBUG] [Thread-135072] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:38:33.058 [DEBUG] [Thread-135072] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:38:33.058 [DEBUG] [Thread-135072] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:38:33.058 [DEBUG] [Thread-135072] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:38:33.058 [DEBUG] [Thread-135072] [transport.py] [_log()] Compression: none
2025-12-31T21:38:33.058 [DEBUG] [Thread-135072] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:38:33.074 [DEBUG] [Thread-135072] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:38:33.075 [DEBUG] [Thread-135072] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:38:33.075 [DEBUG] [Thread-135072] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T21:38:33.076 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T21:38:33.076 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:38:33.078 [DEBUG] [Thread-135072] [transport.py] [_log()] userauth is OK
2025-12-31T21:38:33.078 [DEBUG] [Thread-135072] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:38:33.078 [DEBUG] [Thread-135072] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:38:33.078 [DEBUG] [Thread-135072] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T21:38:33.078 [DEBUG] [Thread-135072] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:38:33.114 [INFO] [Thread-135072] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:38:33.115 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:38:33.755 [DEBUG] [Thread-135072] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:38:33.756 [DEBUG] [Thread-135072] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:38:33.756 [DEBUG] [Thread-135072] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T21:38:33.797 [DEBUG] [Thread-135072] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:38:33.797 [DEBUG] [Thread-135072] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:38:33.800 [DEBUG] [Thread-135072] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:38:33.811 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:38:33.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T21:38:33.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T21:38:33.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T21:38:33.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:38:33.821 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T21:38:33.821 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:38:33.821 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:38:33.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T21:38:33.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.818193 -999.00  +16.70  15.49     68  +10.90 1 2 1 1 1     0    0 5.18 -34.09 ..ESW 14.8 15.5 199.8 24.9 17.9 -16.4 17.7 -16.8 17.5 -15.8 17.9 -15.8
2025-12-31T21:38:33.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T21:38:33.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T21:38:33.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.818193
2025-12-31T21:38:33.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T21:38:33.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T21:38:33.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T21:38:33.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T21:38:33.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T21:38:33.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T21:38:24', tmtdew=6.47, humidity=65.44, cloud=0.0, wind=24.38, temperature=16.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T21:38:24', seeing=1.45, atlas_timestamp='2025-12-31T19:38:11.875', atlas_cloud=2, atlas_rain=1, zp_data=[1.0797499999999998, 0.7387500000000005, 0.7432500000000006, nan, nan, nan, nan, nan, 0.8534999999999995, 0.3879999999999999, 0.48625000000000007, 1.3639999999999999, nan, nan, nan, -1.0380000000000003, 0.6852499999999999, 0.22399999999999842, 0.2795000000000005, nan, 1.275999999999999, 0.5062499999999988, -1.7647499999999994, -1.2217499999999983, 0.359, 0.4344999999999999, 0.5062499999999996, 0.543000000000001, 0.6355000000000004, 0.6180000000000012, nan, -1.772499999999999, -0.4922500000000021], zp_timestamp='2025-12-31T19:34:00')
2025-12-31T21:38:33.824 [DEBUG] [Thread-135072] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:38:33.907 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T21:38:33.918 [DEBUG] [Thread-135075] [transport.py] [_log()] starting thread (client mode): 0xb957bd30
2025-12-31T21:38:33.919 [DEBUG] [Thread-135075] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:38:33.933 [DEBUG] [Thread-135075] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T21:38:33.934 [INFO] [Thread-135075] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T21:38:33.941 [DEBUG] [Thread-135075] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:38:33.941 [DEBUG] [Thread-135075] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T21:38:33.941 [DEBUG] [Thread-135075] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:38:33.942 [DEBUG] [Thread-135075] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:38:33.942 [DEBUG] [Thread-135075] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:38:33.942 [DEBUG] [Thread-135075] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:38:33.942 [DEBUG] [Thread-135075] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:38:33.942 [DEBUG] [Thread-135075] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:38:33.942 [DEBUG] [Thread-135075] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:38:33.942 [DEBUG] [Thread-135075] [transport.py] [_log()] client lang: <none>
2025-12-31T21:38:33.942 [DEBUG] [Thread-135075] [transport.py] [_log()] server lang: <none>
2025-12-31T21:38:33.942 [DEBUG] [Thread-135075] [transport.py] [_log()] kex follows: False
2025-12-31T21:38:33.942 [DEBUG] [Thread-135075] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:38:33.942 [DEBUG] [Thread-135075] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:38:33.942 [DEBUG] [Thread-135075] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:38:33.943 [DEBUG] [Thread-135075] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:38:33.943 [DEBUG] [Thread-135075] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:38:33.943 [DEBUG] [Thread-135075] [transport.py] [_log()] Compression: none
2025-12-31T21:38:33.943 [DEBUG] [Thread-135075] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:38:33.999 [DEBUG] [Thread-135075] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:38:34.000 [DEBUG] [Thread-135075] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:38:34.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T21:38:34.001 [DEBUG] [Thread-135075] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T21:38:34.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:38:34.057 [DEBUG] [Thread-135075] [transport.py] [_log()] userauth is OK
2025-12-31T21:38:34.057 [DEBUG] [Thread-135075] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:38:34.057 [DEBUG] [Thread-135075] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:38:34.057 [DEBUG] [Thread-135075] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T21:38:34.057 [DEBUG] [Thread-135075] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:38:34.076 [INFO] [Thread-135075] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:38:34.076 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T21:38:34.077 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:38:34.887 [DEBUG] [Thread-135075] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:38:34.887 [DEBUG] [Thread-135075] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:38:34.935 [DEBUG] [Thread-135075] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:38:34.935 [DEBUG] [Thread-135075] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:38:34.944 [DEBUG] [Thread-135075] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:38:34.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:38:34.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T21:38:34.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T21:38:34.982 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:38:34.982 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:38:34.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:38:34.991 [DEBUG] [Thread-135075] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:38:41.251 [DEBUG] [Thread-135077 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:38:44.327 [DEBUG] [Thread-135078 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:38:46.923 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:38:49.998 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:38:56.289 [DEBUG] [Thread-135079 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:39:04.014 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:39:04.016 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:39:05.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T21:39:05.005 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T21:39:05.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T21:39:05.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 21, 38, 56), 6.45, 65.51, 0.0, 25.11, 16.58, 0, 0, 0, 2, 0, 0),)
2025-12-31T21:39:05.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 21:38:56
2025-12-31T21:39:05.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T21:39:05.985 [DEBUG] [Thread-135080] [transport.py] [_log()] starting thread (client mode): 0xb17467a0
2025-12-31T21:39:05.985 [DEBUG] [Thread-135080] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:39:06.009 [DEBUG] [Thread-135080] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T21:39:06.009 [INFO] [Thread-135080] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T21:39:06.013 [DEBUG] [Thread-135080] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:39:06.013 [DEBUG] [Thread-135080] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T21:39:06.013 [DEBUG] [Thread-135080] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:39:06.013 [DEBUG] [Thread-135080] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:39:06.013 [DEBUG] [Thread-135080] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:39:06.013 [DEBUG] [Thread-135080] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:39:06.013 [DEBUG] [Thread-135080] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:39:06.013 [DEBUG] [Thread-135080] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:39:06.013 [DEBUG] [Thread-135080] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:39:06.013 [DEBUG] [Thread-135080] [transport.py] [_log()] client lang: <none>
2025-12-31T21:39:06.013 [DEBUG] [Thread-135080] [transport.py] [_log()] server lang: <none>
2025-12-31T21:39:06.013 [DEBUG] [Thread-135080] [transport.py] [_log()] kex follows: False
2025-12-31T21:39:06.014 [DEBUG] [Thread-135080] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:39:06.014 [DEBUG] [Thread-135080] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:39:06.014 [DEBUG] [Thread-135080] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:39:06.014 [DEBUG] [Thread-135080] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:39:06.014 [DEBUG] [Thread-135080] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:39:06.014 [DEBUG] [Thread-135080] [transport.py] [_log()] Compression: none
2025-12-31T21:39:06.014 [DEBUG] [Thread-135080] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:39:06.025 [DEBUG] [Thread-135080] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:39:06.025 [DEBUG] [Thread-135080] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:39:06.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T21:39:06.026 [DEBUG] [Thread-135080] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T21:39:06.027 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:39:06.028 [DEBUG] [Thread-135080] [transport.py] [_log()] userauth is OK
2025-12-31T21:39:06.029 [DEBUG] [Thread-135080] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:39:06.029 [DEBUG] [Thread-135080] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:39:06.029 [DEBUG] [Thread-135080] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T21:39:06.029 [DEBUG] [Thread-135080] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:39:06.064 [INFO] [Thread-135080] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:39:06.066 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:39:06.682 [DEBUG] [Thread-135080] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:39:06.682 [DEBUG] [Thread-135080] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:39:06.683 [DEBUG] [Thread-135080] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T21:39:06.723 [DEBUG] [Thread-135080] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:39:06.723 [DEBUG] [Thread-135080] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:39:06.727 [DEBUG] [Thread-135080] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:39:06.733 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:39:06.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T21:39:06.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T21:39:06.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T21:39:06.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:39:06.745 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T21:39:06.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:39:06.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:39:06.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T21:39:06.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.818540 -999.00  +16.70  12.70     68  +11.00 1 2 1 1 1     0    0 5.31 -32.41 ..ESW 13.8 12.7 203.7 23.4 17.8 -16.7 17.7 -17.1 17.5 -16.2 17.8 -16.1
2025-12-31T21:39:06.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T21:39:06.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T21:39:06.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.818540
2025-12-31T21:39:06.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T21:39:06.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T21:39:06.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T21:39:06.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T21:39:06.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T21:39:06.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T21:38:56', tmtdew=6.45, humidity=65.51, cloud=0.0, wind=25.11, temperature=16.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T21:38:56', seeing=1.65, atlas_timestamp='2025-12-31T19:38:41.856', atlas_cloud=2, atlas_rain=1, zp_data=[1.0797499999999998, 0.7387500000000005, 0.7432500000000006, nan, nan, nan, nan, nan, 0.8534999999999995, 0.3879999999999999, 0.48625000000000007, 1.3639999999999999, nan, nan, nan, -1.0380000000000003, 0.6852499999999999, 0.22399999999999842, 0.2795000000000005, nan, 1.275999999999999, 0.5062499999999988, -1.7647499999999994, -1.2217499999999983, 0.359, 0.4344999999999999, 0.5062499999999996, 0.543000000000001, 0.6355000000000004, 0.6180000000000012, nan, -1.772499999999999, -0.4922500000000021], zp_timestamp='2025-12-31T19:38:00')
2025-12-31T21:39:06.748 [DEBUG] [Thread-135080] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:39:06.830 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T21:39:06.842 [DEBUG] [Thread-135083] [transport.py] [_log()] starting thread (client mode): 0xb17753c0
2025-12-31T21:39:06.843 [DEBUG] [Thread-135083] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:39:06.857 [DEBUG] [Thread-135083] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T21:39:06.857 [INFO] [Thread-135083] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T21:39:06.864 [DEBUG] [Thread-135083] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:39:06.865 [DEBUG] [Thread-135083] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T21:39:06.865 [DEBUG] [Thread-135083] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:39:06.865 [DEBUG] [Thread-135083] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:39:06.865 [DEBUG] [Thread-135083] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:39:06.865 [DEBUG] [Thread-135083] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:39:06.865 [DEBUG] [Thread-135083] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:39:06.865 [DEBUG] [Thread-135083] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:39:06.865 [DEBUG] [Thread-135083] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:39:06.865 [DEBUG] [Thread-135083] [transport.py] [_log()] client lang: <none>
2025-12-31T21:39:06.865 [DEBUG] [Thread-135083] [transport.py] [_log()] server lang: <none>
2025-12-31T21:39:06.865 [DEBUG] [Thread-135083] [transport.py] [_log()] kex follows: False
2025-12-31T21:39:06.865 [DEBUG] [Thread-135083] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:39:06.865 [DEBUG] [Thread-135083] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:39:06.865 [DEBUG] [Thread-135083] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:39:06.865 [DEBUG] [Thread-135083] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:39:06.865 [DEBUG] [Thread-135083] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:39:06.865 [DEBUG] [Thread-135083] [transport.py] [_log()] Compression: none
2025-12-31T21:39:06.866 [DEBUG] [Thread-135083] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:39:06.930 [DEBUG] [Thread-135083] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:39:06.930 [DEBUG] [Thread-135083] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:39:06.931 [DEBUG] [Thread-135083] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T21:39:06.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T21:39:06.932 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:39:06.993 [DEBUG] [Thread-135083] [transport.py] [_log()] userauth is OK
2025-12-31T21:39:06.993 [DEBUG] [Thread-135083] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:39:06.993 [DEBUG] [Thread-135083] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:39:06.993 [DEBUG] [Thread-135083] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T21:39:06.993 [DEBUG] [Thread-135083] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:39:07.012 [INFO] [Thread-135083] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:39:07.012 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T21:39:07.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:39:07.846 [DEBUG] [Thread-135083] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:39:07.846 [DEBUG] [Thread-135083] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:39:07.894 [DEBUG] [Thread-135083] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:39:07.894 [DEBUG] [Thread-135083] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:39:07.903 [DEBUG] [Thread-135083] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:39:07.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:39:07.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T21:39:07.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T21:39:07.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:39:07.931 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:39:07.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:39:07.940 [DEBUG] [Thread-135083] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:39:11.325 [DEBUG] [Thread-135085 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:39:24.519 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:39:26.375 [DEBUG] [Thread-135086 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:39:30.277 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:39:33.398 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:39:37.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T21:39:37.962 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T21:39:37.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T21:39:38.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 21, 39, 28), 6.46, 65.47, 0.0, 27.12, 16.52, 0, 0, 0, 2, 0, 0),)
2025-12-31T21:39:38.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 21:39:28
2025-12-31T21:39:38.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T21:39:38.944 [DEBUG] [Thread-135087] [transport.py] [_log()] starting thread (client mode): 0xb1775420
2025-12-31T21:39:38.944 [DEBUG] [Thread-135087] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:39:38.964 [DEBUG] [Thread-135087] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T21:39:38.964 [INFO] [Thread-135087] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T21:39:38.967 [DEBUG] [Thread-135087] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:39:38.967 [DEBUG] [Thread-135087] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T21:39:38.967 [DEBUG] [Thread-135087] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:39:38.967 [DEBUG] [Thread-135087] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:39:38.967 [DEBUG] [Thread-135087] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:39:38.967 [DEBUG] [Thread-135087] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:39:38.967 [DEBUG] [Thread-135087] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:39:38.967 [DEBUG] [Thread-135087] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:39:38.967 [DEBUG] [Thread-135087] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:39:38.967 [DEBUG] [Thread-135087] [transport.py] [_log()] client lang: <none>
2025-12-31T21:39:38.967 [DEBUG] [Thread-135087] [transport.py] [_log()] server lang: <none>
2025-12-31T21:39:38.968 [DEBUG] [Thread-135087] [transport.py] [_log()] kex follows: False
2025-12-31T21:39:38.968 [DEBUG] [Thread-135087] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:39:38.968 [DEBUG] [Thread-135087] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:39:38.968 [DEBUG] [Thread-135087] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:39:38.968 [DEBUG] [Thread-135087] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:39:38.968 [DEBUG] [Thread-135087] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:39:38.968 [DEBUG] [Thread-135087] [transport.py] [_log()] Compression: none
2025-12-31T21:39:38.968 [DEBUG] [Thread-135087] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:39:38.987 [DEBUG] [Thread-135087] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:39:38.988 [DEBUG] [Thread-135087] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:39:38.988 [DEBUG] [Thread-135087] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T21:39:38.989 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T21:39:38.989 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:39:39.029 [DEBUG] [Thread-135087] [transport.py] [_log()] userauth is OK
2025-12-31T21:39:39.029 [DEBUG] [Thread-135087] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:39:39.030 [DEBUG] [Thread-135087] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:39:39.030 [DEBUG] [Thread-135087] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T21:39:39.030 [DEBUG] [Thread-135087] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:39:39.062 [INFO] [Thread-135087] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:39:39.063 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:39:39.698 [DEBUG] [Thread-135087] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:39:39.699 [DEBUG] [Thread-135087] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:39:39.699 [DEBUG] [Thread-135087] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T21:39:39.740 [DEBUG] [Thread-135087] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:39:39.740 [DEBUG] [Thread-135087] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:39:39.744 [DEBUG] [Thread-135087] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:39:39.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:39:39.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T21:39:39.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T21:39:39.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T21:39:39.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:39:39.768 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T21:39:39.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:39:39.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:39:39.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T21:39:39.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.818887 -999.00  +16.70  14.62     68  +11.00 1 2 1 1 1     0    0 5.19 -32.13 .nESW 19.5 14.6 184.9 22.9 17.8 -17.1 17.6 -17.9 17.5 -16.6 17.8 -16.3
2025-12-31T21:39:39.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T21:39:39.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T21:39:39.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.818887
2025-12-31T21:39:39.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T21:39:39.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T21:39:39.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T21:39:39.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T21:39:39.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T21:39:39.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T21:39:28', tmtdew=6.46, humidity=65.47, cloud=0.0, wind=27.12, temperature=16.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T21:39:28', seeing=1.57, atlas_timestamp='2025-12-31T19:39:11.837', atlas_cloud=2, atlas_rain=1, zp_data=[1.0797499999999998, 0.7387500000000005, 0.7432500000000006, nan, nan, nan, nan, nan, 0.8534999999999995, 0.3879999999999999, 0.48625000000000007, 1.3639999999999999, nan, nan, nan, -1.0380000000000003, 0.6852499999999999, 0.22399999999999842, 0.2795000000000005, nan, 1.275999999999999, 0.5062499999999988, -1.7647499999999994, -1.2217499999999983, 0.359, 0.4344999999999999, 0.5062499999999996, 0.543000000000001, 0.6355000000000004, 0.6180000000000012, nan, -1.772499999999999, -0.4922500000000021], zp_timestamp='2025-12-31T19:38:00')
2025-12-31T21:39:39.771 [DEBUG] [Thread-135087] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:39:39.845 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:39:39.855 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T21:39:39.867 [DEBUG] [Thread-135090] [transport.py] [_log()] starting thread (client mode): 0xb1747640
2025-12-31T21:39:39.867 [DEBUG] [Thread-135090] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:39:39.882 [DEBUG] [Thread-135090] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T21:39:39.882 [INFO] [Thread-135090] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T21:39:39.890 [DEBUG] [Thread-135090] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:39:39.890 [DEBUG] [Thread-135090] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T21:39:39.890 [DEBUG] [Thread-135090] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:39:39.890 [DEBUG] [Thread-135090] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:39:39.890 [DEBUG] [Thread-135090] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:39:39.890 [DEBUG] [Thread-135090] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:39:39.890 [DEBUG] [Thread-135090] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:39:39.890 [DEBUG] [Thread-135090] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:39:39.890 [DEBUG] [Thread-135090] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:39:39.890 [DEBUG] [Thread-135090] [transport.py] [_log()] client lang: <none>
2025-12-31T21:39:39.890 [DEBUG] [Thread-135090] [transport.py] [_log()] server lang: <none>
2025-12-31T21:39:39.890 [DEBUG] [Thread-135090] [transport.py] [_log()] kex follows: False
2025-12-31T21:39:39.890 [DEBUG] [Thread-135090] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:39:39.890 [DEBUG] [Thread-135090] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:39:39.891 [DEBUG] [Thread-135090] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:39:39.891 [DEBUG] [Thread-135090] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:39:39.891 [DEBUG] [Thread-135090] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:39:39.891 [DEBUG] [Thread-135090] [transport.py] [_log()] Compression: none
2025-12-31T21:39:39.891 [DEBUG] [Thread-135090] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:39:39.949 [DEBUG] [Thread-135090] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:39:39.949 [DEBUG] [Thread-135090] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:39:39.950 [DEBUG] [Thread-135090] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T21:39:39.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T21:39:39.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:39:40.005 [DEBUG] [Thread-135090] [transport.py] [_log()] userauth is OK
2025-12-31T21:39:40.005 [DEBUG] [Thread-135090] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:39:40.005 [DEBUG] [Thread-135090] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:39:40.005 [DEBUG] [Thread-135090] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T21:39:40.005 [DEBUG] [Thread-135090] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:39:40.024 [INFO] [Thread-135090] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:39:40.025 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T21:39:40.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:39:40.867 [DEBUG] [Thread-135090] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:39:40.867 [DEBUG] [Thread-135090] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:39:40.918 [DEBUG] [Thread-135090] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:39:40.918 [DEBUG] [Thread-135090] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:39:40.930 [DEBUG] [Thread-135090] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:39:40.939 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:39:40.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T21:39:40.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T21:39:40.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:39:40.958 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:39:40.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:39:40.966 [DEBUG] [Thread-135090] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:39:41.410 [DEBUG] [Thread-135092 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:39:44.423 [DEBUG] [Thread-135093 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:39:56.458 [DEBUG] [Thread-135094 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:40:04.217 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:40:04.218 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:40:10.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T21:40:10.976 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T21:40:10.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T21:40:11.485 [DEBUG] [Thread-135095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:40:11.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 21, 40), 6.43, 65.59, 0.0, 22.43, 16.58, 0, 0, 0, 2, 0, 0),)
2025-12-31T21:40:11.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 21:40:00
2025-12-31T21:40:11.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T21:40:11.952 [DEBUG] [Thread-135096] [transport.py] [_log()] starting thread (client mode): 0xb957bbe0
2025-12-31T21:40:11.953 [DEBUG] [Thread-135096] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:40:11.972 [DEBUG] [Thread-135096] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T21:40:11.972 [INFO] [Thread-135096] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T21:40:11.975 [DEBUG] [Thread-135096] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:40:11.975 [DEBUG] [Thread-135096] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T21:40:11.975 [DEBUG] [Thread-135096] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:40:11.975 [DEBUG] [Thread-135096] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:40:11.975 [DEBUG] [Thread-135096] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:40:11.975 [DEBUG] [Thread-135096] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:40:11.975 [DEBUG] [Thread-135096] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:40:11.975 [DEBUG] [Thread-135096] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:40:11.975 [DEBUG] [Thread-135096] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:40:11.975 [DEBUG] [Thread-135096] [transport.py] [_log()] client lang: <none>
2025-12-31T21:40:11.975 [DEBUG] [Thread-135096] [transport.py] [_log()] server lang: <none>
2025-12-31T21:40:11.975 [DEBUG] [Thread-135096] [transport.py] [_log()] kex follows: False
2025-12-31T21:40:11.975 [DEBUG] [Thread-135096] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:40:11.975 [DEBUG] [Thread-135096] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:40:11.975 [DEBUG] [Thread-135096] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:40:11.975 [DEBUG] [Thread-135096] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:40:11.976 [DEBUG] [Thread-135096] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:40:11.976 [DEBUG] [Thread-135096] [transport.py] [_log()] Compression: none
2025-12-31T21:40:11.976 [DEBUG] [Thread-135096] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:40:11.993 [DEBUG] [Thread-135096] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:40:11.994 [DEBUG] [Thread-135096] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:40:11.994 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T21:40:11.995 [DEBUG] [Thread-135096] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T21:40:11.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:40:11.997 [DEBUG] [Thread-135096] [transport.py] [_log()] userauth is OK
2025-12-31T21:40:11.997 [DEBUG] [Thread-135096] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:40:11.997 [DEBUG] [Thread-135096] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:40:11.997 [DEBUG] [Thread-135096] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T21:40:11.997 [DEBUG] [Thread-135096] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:40:12.016 [INFO] [Thread-135096] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:40:12.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:40:18.126 [DEBUG] [Thread-135096] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:40:18.126 [DEBUG] [Thread-135096] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:40:18.126 [DEBUG] [Thread-135096] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T21:40:18.166 [DEBUG] [Thread-135096] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:40:18.167 [DEBUG] [Thread-135096] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:40:18.170 [DEBUG] [Thread-135096] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:40:18.322 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:40:18.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T21:40:18.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T21:40:18.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T21:40:18.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:40:18.348 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T21:40:18.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:40:18.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:40:18.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T21:40:18.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.818887 -999.00  +16.70  14.62     68  +11.00 1 2 1 1 1     0    0 5.19 -32.13 .nESW 19.5 14.6 184.9 22.9 17.8 -17.1 17.6 -17.9 17.5 -16.6 17.8 -16.3
2025-12-31T21:40:18.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T21:40:18.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T21:40:18.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.818887
2025-12-31T21:40:18.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T21:40:18.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T21:40:18.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T21:40:18.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T21:40:18.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T21:40:18.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T21:40:00', tmtdew=6.43, humidity=65.59, cloud=0.0, wind=22.43, temperature=16.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T21:40:01', seeing=1.51, atlas_timestamp='2025-12-31T19:39:11.837', atlas_cloud=2, atlas_rain=1, zp_data=[1.0797499999999998, 0.7387500000000005, 0.7432500000000006, nan, nan, nan, nan, nan, 0.8534999999999995, 0.3879999999999999, 0.48625000000000007, 1.3639999999999999, nan, nan, nan, -1.0380000000000003, 0.6852499999999999, 0.22399999999999842, 0.2795000000000005, nan, 1.275999999999999, 0.5062499999999988, -1.7647499999999994, -1.2217499999999983, 0.359, 0.4344999999999999, 0.5062499999999996, 0.543000000000001, 0.6355000000000004, 0.6180000000000012, nan, -1.772499999999999, -0.4922500000000021], zp_timestamp='2025-12-31T19:38:00')
2025-12-31T21:40:18.351 [DEBUG] [Thread-135096] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:40:18.425 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T21:40:18.438 [DEBUG] [Thread-135099] [transport.py] [_log()] starting thread (client mode): 0xb1746f80
2025-12-31T21:40:18.438 [DEBUG] [Thread-135099] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:40:18.453 [DEBUG] [Thread-135099] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T21:40:18.453 [INFO] [Thread-135099] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T21:40:18.461 [DEBUG] [Thread-135099] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:40:18.461 [DEBUG] [Thread-135099] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T21:40:18.461 [DEBUG] [Thread-135099] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:40:18.461 [DEBUG] [Thread-135099] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:40:18.461 [DEBUG] [Thread-135099] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:40:18.461 [DEBUG] [Thread-135099] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:40:18.461 [DEBUG] [Thread-135099] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:40:18.461 [DEBUG] [Thread-135099] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:40:18.461 [DEBUG] [Thread-135099] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:40:18.461 [DEBUG] [Thread-135099] [transport.py] [_log()] client lang: <none>
2025-12-31T21:40:18.461 [DEBUG] [Thread-135099] [transport.py] [_log()] server lang: <none>
2025-12-31T21:40:18.461 [DEBUG] [Thread-135099] [transport.py] [_log()] kex follows: False
2025-12-31T21:40:18.461 [DEBUG] [Thread-135099] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:40:18.461 [DEBUG] [Thread-135099] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:40:18.462 [DEBUG] [Thread-135099] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:40:18.462 [DEBUG] [Thread-135099] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:40:18.462 [DEBUG] [Thread-135099] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:40:18.462 [DEBUG] [Thread-135099] [transport.py] [_log()] Compression: none
2025-12-31T21:40:18.462 [DEBUG] [Thread-135099] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:40:18.520 [DEBUG] [Thread-135099] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:40:18.521 [DEBUG] [Thread-135099] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:40:18.522 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T21:40:18.522 [DEBUG] [Thread-135099] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T21:40:18.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:40:18.578 [DEBUG] [Thread-135099] [transport.py] [_log()] userauth is OK
2025-12-31T21:40:18.578 [DEBUG] [Thread-135099] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:40:18.579 [DEBUG] [Thread-135099] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:40:18.579 [DEBUG] [Thread-135099] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T21:40:18.579 [DEBUG] [Thread-135099] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:40:18.600 [INFO] [Thread-135099] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:40:18.601 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T21:40:18.601 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:40:19.393 [DEBUG] [Thread-135099] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:40:19.394 [DEBUG] [Thread-135099] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:40:19.442 [DEBUG] [Thread-135099] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:40:19.442 [DEBUG] [Thread-135099] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:40:19.452 [DEBUG] [Thread-135099] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:40:19.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:40:19.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-12-31T21:40:19.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-12-31T21:40:19.480 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:40:19.480 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:40:19.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:40:19.489 [DEBUG] [Thread-135099] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:40:26.528 [DEBUG] [Thread-135101 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:40:41.573 [DEBUG] [Thread-135102 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:40:44.495 [DEBUG] [Thread-135103 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:40:49.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T21:40:49.497 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T21:40:49.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T21:40:50.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 21, 40, 33), 6.42, 65.64, 0.0, 22.94, 16.53, 0, 0, 0, 2, 0, 0),)
2025-12-31T21:40:50.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 21:40:33
2025-12-31T21:40:50.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T21:40:50.486 [DEBUG] [Thread-135104] [transport.py] [_log()] starting thread (client mode): 0xb9590af0
2025-12-31T21:40:50.486 [DEBUG] [Thread-135104] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:40:50.506 [DEBUG] [Thread-135104] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T21:40:50.506 [INFO] [Thread-135104] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T21:40:50.509 [DEBUG] [Thread-135104] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:40:50.509 [DEBUG] [Thread-135104] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T21:40:50.509 [DEBUG] [Thread-135104] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:40:50.509 [DEBUG] [Thread-135104] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:40:50.509 [DEBUG] [Thread-135104] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:40:50.509 [DEBUG] [Thread-135104] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:40:50.509 [DEBUG] [Thread-135104] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:40:50.509 [DEBUG] [Thread-135104] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:40:50.509 [DEBUG] [Thread-135104] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:40:50.509 [DEBUG] [Thread-135104] [transport.py] [_log()] client lang: <none>
2025-12-31T21:40:50.509 [DEBUG] [Thread-135104] [transport.py] [_log()] server lang: <none>
2025-12-31T21:40:50.509 [DEBUG] [Thread-135104] [transport.py] [_log()] kex follows: False
2025-12-31T21:40:50.509 [DEBUG] [Thread-135104] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:40:50.509 [DEBUG] [Thread-135104] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:40:50.510 [DEBUG] [Thread-135104] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:40:50.510 [DEBUG] [Thread-135104] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:40:50.510 [DEBUG] [Thread-135104] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:40:50.510 [DEBUG] [Thread-135104] [transport.py] [_log()] Compression: none
2025-12-31T21:40:50.510 [DEBUG] [Thread-135104] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:40:50.527 [DEBUG] [Thread-135104] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:40:50.528 [DEBUG] [Thread-135104] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:40:50.528 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T21:40:50.529 [DEBUG] [Thread-135104] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T21:40:50.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:40:50.531 [DEBUG] [Thread-135104] [transport.py] [_log()] userauth is OK
2025-12-31T21:40:50.531 [DEBUG] [Thread-135104] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:40:50.531 [DEBUG] [Thread-135104] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:40:50.531 [DEBUG] [Thread-135104] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T21:40:50.531 [DEBUG] [Thread-135104] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:40:50.546 [INFO] [Thread-135104] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:40:50.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:40:51.199 [DEBUG] [Thread-135104] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:40:51.200 [DEBUG] [Thread-135104] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:40:51.200 [DEBUG] [Thread-135104] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T21:40:51.241 [DEBUG] [Thread-135104] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:40:51.241 [DEBUG] [Thread-135104] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:40:51.245 [DEBUG] [Thread-135104] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:40:51.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:40:51.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T21:40:51.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T21:40:51.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T21:40:51.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:40:51.270 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T21:40:51.270 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:40:51.270 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:40:51.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T21:40:51.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.819235 -999.00  +16.70  15.49     68  +11.00 1 2 1 1 1     0    0 5.12 -32.79 .nESW 17.4 15.5 202.0 20.6 17.8 -17.5 17.6 -17.7 17.5 -17.1 17.8 -16.7
2025-12-31T21:40:51.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T21:40:51.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T21:40:51.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.819235
2025-12-31T21:40:51.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T21:40:51.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T21:40:51.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T21:40:51.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T21:40:51.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T21:40:51.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T21:40:33', tmtdew=6.42, humidity=65.64, cloud=0.0, wind=22.94, temperature=16.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T21:40:33', seeing=1.51, atlas_timestamp='2025-12-31T19:39:41.904', atlas_cloud=2, atlas_rain=1, zp_data=[1.0797499999999998, 0.7387500000000005, 0.7432500000000006, nan, nan, nan, nan, nan, 0.8534999999999995, 0.3879999999999999, 0.48625000000000007, 1.3639999999999999, nan, nan, nan, -1.0380000000000003, 0.6852499999999999, 0.22399999999999842, 0.2795000000000005, nan, 1.275999999999999, 0.5062499999999988, -1.7647499999999994, -1.2217499999999983, 0.359, 0.4344999999999999, 0.5062499999999996, 0.543000000000001, 0.6355000000000004, 0.6180000000000012, nan, -1.772499999999999, -0.4922500000000021], zp_timestamp='2025-12-31T19:38:00')
2025-12-31T21:40:51.273 [DEBUG] [Thread-135104] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:40:51.357 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T21:40:51.369 [DEBUG] [Thread-135107] [transport.py] [_log()] starting thread (client mode): 0xb1775180
2025-12-31T21:40:51.369 [DEBUG] [Thread-135107] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:40:51.383 [DEBUG] [Thread-135107] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T21:40:51.383 [INFO] [Thread-135107] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T21:40:51.390 [DEBUG] [Thread-135107] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:40:51.391 [DEBUG] [Thread-135107] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T21:40:51.391 [DEBUG] [Thread-135107] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:40:51.391 [DEBUG] [Thread-135107] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:40:51.391 [DEBUG] [Thread-135107] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:40:51.391 [DEBUG] [Thread-135107] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:40:51.391 [DEBUG] [Thread-135107] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:40:51.391 [DEBUG] [Thread-135107] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:40:51.391 [DEBUG] [Thread-135107] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:40:51.391 [DEBUG] [Thread-135107] [transport.py] [_log()] client lang: <none>
2025-12-31T21:40:51.391 [DEBUG] [Thread-135107] [transport.py] [_log()] server lang: <none>
2025-12-31T21:40:51.391 [DEBUG] [Thread-135107] [transport.py] [_log()] kex follows: False
2025-12-31T21:40:51.391 [DEBUG] [Thread-135107] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:40:51.391 [DEBUG] [Thread-135107] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:40:51.391 [DEBUG] [Thread-135107] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:40:51.391 [DEBUG] [Thread-135107] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:40:51.391 [DEBUG] [Thread-135107] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:40:51.391 [DEBUG] [Thread-135107] [transport.py] [_log()] Compression: none
2025-12-31T21:40:51.391 [DEBUG] [Thread-135107] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:40:51.453 [DEBUG] [Thread-135107] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:40:51.453 [DEBUG] [Thread-135107] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:40:51.454 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T21:40:51.454 [DEBUG] [Thread-135107] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T21:40:51.455 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:40:51.509 [DEBUG] [Thread-135107] [transport.py] [_log()] userauth is OK
2025-12-31T21:40:51.509 [DEBUG] [Thread-135107] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:40:51.509 [DEBUG] [Thread-135107] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:40:51.509 [DEBUG] [Thread-135107] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T21:40:51.509 [DEBUG] [Thread-135107] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:40:51.528 [INFO] [Thread-135107] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:40:51.528 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T21:40:51.530 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:40:52.402 [DEBUG] [Thread-135107] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:40:52.403 [DEBUG] [Thread-135107] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:40:52.451 [DEBUG] [Thread-135107] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:40:52.451 [DEBUG] [Thread-135107] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:40:52.460 [DEBUG] [Thread-135107] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:40:52.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:40:52.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T21:40:52.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T21:40:52.488 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:40:52.489 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:40:52.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:40:52.497 [DEBUG] [Thread-135107] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:40:56.606 [DEBUG] [Thread-135109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:41:04.421 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:41:04.422 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:41:11.670 [DEBUG] [Thread-135110 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:41:22.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T21:41:22.520 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T21:41:22.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T21:41:23.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 21, 41, 5), 6.42, 65.62, 0.0, 20.5, 16.48, 0, 0, 0, 2, 0, 0),)
2025-12-31T21:41:23.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 21:41:05
2025-12-31T21:41:23.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T21:41:23.496 [DEBUG] [Thread-135111] [transport.py] [_log()] starting thread (client mode): 0xb9593130
2025-12-31T21:41:23.496 [DEBUG] [Thread-135111] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:41:23.516 [DEBUG] [Thread-135111] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T21:41:23.516 [INFO] [Thread-135111] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T21:41:23.519 [DEBUG] [Thread-135111] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:41:23.519 [DEBUG] [Thread-135111] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T21:41:23.519 [DEBUG] [Thread-135111] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:41:23.519 [DEBUG] [Thread-135111] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:41:23.519 [DEBUG] [Thread-135111] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:41:23.519 [DEBUG] [Thread-135111] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:41:23.519 [DEBUG] [Thread-135111] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:41:23.519 [DEBUG] [Thread-135111] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:41:23.519 [DEBUG] [Thread-135111] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:41:23.519 [DEBUG] [Thread-135111] [transport.py] [_log()] client lang: <none>
2025-12-31T21:41:23.520 [DEBUG] [Thread-135111] [transport.py] [_log()] server lang: <none>
2025-12-31T21:41:23.520 [DEBUG] [Thread-135111] [transport.py] [_log()] kex follows: False
2025-12-31T21:41:23.520 [DEBUG] [Thread-135111] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:41:23.520 [DEBUG] [Thread-135111] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:41:23.520 [DEBUG] [Thread-135111] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:41:23.520 [DEBUG] [Thread-135111] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:41:23.520 [DEBUG] [Thread-135111] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:41:23.520 [DEBUG] [Thread-135111] [transport.py] [_log()] Compression: none
2025-12-31T21:41:23.520 [DEBUG] [Thread-135111] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:41:23.536 [DEBUG] [Thread-135111] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:41:23.537 [DEBUG] [Thread-135111] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:41:23.537 [DEBUG] [Thread-135111] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T21:41:23.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T21:41:23.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:41:23.539 [DEBUG] [Thread-135111] [transport.py] [_log()] userauth is OK
2025-12-31T21:41:23.540 [DEBUG] [Thread-135111] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:41:23.540 [DEBUG] [Thread-135111] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:41:23.540 [DEBUG] [Thread-135111] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T21:41:23.540 [DEBUG] [Thread-135111] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:41:23.556 [INFO] [Thread-135111] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:41:23.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:41:24.325 [DEBUG] [Thread-135111] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:41:24.325 [DEBUG] [Thread-135111] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:41:24.325 [DEBUG] [Thread-135111] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T21:41:24.366 [DEBUG] [Thread-135111] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:41:24.366 [DEBUG] [Thread-135111] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:41:24.370 [DEBUG] [Thread-135111] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:41:24.382 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:41:24.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T21:41:24.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T21:41:24.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T21:41:24.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:41:24.393 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T21:41:24.394 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:41:24.394 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:41:24.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T21:41:24.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.819929 -999.00  +16.70  15.53     69  +10.90 1 2 1 1 1     0    0 5.02 -33.90 Z.ESW 16.5 15.5 201.4 19.3 17.8 -18.1 17.6 -18.3 17.5 -17.7 17.8 -17.7
2025-12-31T21:41:24.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T21:41:24.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T21:41:24.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.819929
2025-12-31T21:41:24.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T21:41:24.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T21:41:24.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T21:41:24.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T21:41:24.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T21:41:24.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T21:41:05', tmtdew=6.42, humidity=65.62, cloud=0.0, wind=20.5, temperature=16.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T21:41:05', seeing=1.51, atlas_timestamp='2025-12-31T19:40:41.866', atlas_cloud=2, atlas_rain=1, zp_data=[1.0797499999999998, 0.7387500000000005, 0.7432500000000006, nan, nan, nan, nan, nan, 0.8534999999999995, 0.3879999999999999, 0.48625000000000007, 1.3639999999999999, nan, nan, nan, -1.0380000000000003, 0.6852499999999999, 0.22399999999999842, 0.2795000000000005, nan, 1.275999999999999, 0.5062499999999988, -1.7647499999999994, -1.2217499999999983, 0.359, 0.4344999999999999, 0.5062499999999996, 0.543000000000001, 0.6355000000000004, 0.6180000000000012, nan, -1.772499999999999, -0.4922500000000021], zp_timestamp='2025-12-31T19:38:00')
2025-12-31T21:41:24.396 [DEBUG] [Thread-135111] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:41: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-12-31T21:41:24.491 [DEBUG] [Thread-135114] [transport.py] [_log()] starting thread (client mode): 0xb1776980
2025-12-31T21:41:24.491 [DEBUG] [Thread-135114] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:41:24.505 [DEBUG] [Thread-135114] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T21:41:24.506 [INFO] [Thread-135114] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T21:41:24.513 [DEBUG] [Thread-135114] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:41:24.513 [DEBUG] [Thread-135114] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T21:41:24.513 [DEBUG] [Thread-135114] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:41:24.513 [DEBUG] [Thread-135114] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:41:24.513 [DEBUG] [Thread-135114] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:41:24.513 [DEBUG] [Thread-135114] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:41:24.513 [DEBUG] [Thread-135114] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:41:24.514 [DEBUG] [Thread-135114] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:41:24.514 [DEBUG] [Thread-135114] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:41:24.514 [DEBUG] [Thread-135114] [transport.py] [_log()] client lang: <none>
2025-12-31T21:41:24.514 [DEBUG] [Thread-135114] [transport.py] [_log()] server lang: <none>
2025-12-31T21:41:24.514 [DEBUG] [Thread-135114] [transport.py] [_log()] kex follows: False
2025-12-31T21:41:24.514 [DEBUG] [Thread-135114] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:41:24.514 [DEBUG] [Thread-135114] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:41:24.514 [DEBUG] [Thread-135114] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:41:24.514 [DEBUG] [Thread-135114] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:41:24.514 [DEBUG] [Thread-135114] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:41:24.514 [DEBUG] [Thread-135114] [transport.py] [_log()] Compression: none
2025-12-31T21:41:24.514 [DEBUG] [Thread-135114] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:41:24.573 [DEBUG] [Thread-135114] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:41:24.573 [DEBUG] [Thread-135114] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:41:24.574 [DEBUG] [Thread-135114] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T21:41:24.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T21:41:24.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:41:24.629 [DEBUG] [Thread-135114] [transport.py] [_log()] userauth is OK
2025-12-31T21:41:24.629 [DEBUG] [Thread-135114] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:41:24.630 [DEBUG] [Thread-135114] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:41:24.630 [DEBUG] [Thread-135114] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T21:41:24.630 [DEBUG] [Thread-135114] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:41:24.650 [INFO] [Thread-135114] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:41: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-12-31T21:41:24.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:41:25.500 [DEBUG] [Thread-135114] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:41:25.500 [DEBUG] [Thread-135114] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:41:25.551 [DEBUG] [Thread-135114] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:41:25.552 [DEBUG] [Thread-135114] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:41:25.560 [DEBUG] [Thread-135114] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:41:25.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:41:25.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T21:41:25.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T21:41:25.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:41:25.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:41:25.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:41:25.601 [DEBUG] [Thread-135114] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:41:26.701 [DEBUG] [Thread-135116 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:41:41.749 [DEBUG] [Thread-135117 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:41:44.594 [DEBUG] [Thread-135118 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:41:55.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T21:41:55.591 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T21:41:55.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T21:41:56.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 21, 41, 37), 6.37, 66.12, 0.0, 22.16, 16.5, 0, 0, 0, 2, 0, 0),)
2025-12-31T21:41:56.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 21:41:37
2025-12-31T21:41:56.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T21:41:56.649 [DEBUG] [Thread-135119] [transport.py] [_log()] starting thread (client mode): 0xb1766170
2025-12-31T21:41:56.649 [DEBUG] [Thread-135119] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:41:56.668 [DEBUG] [Thread-135119] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T21:41:56.668 [INFO] [Thread-135119] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T21:41:56.672 [DEBUG] [Thread-135119] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:41:56.672 [DEBUG] [Thread-135119] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T21:41:56.672 [DEBUG] [Thread-135119] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:41:56.672 [DEBUG] [Thread-135119] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:41:56.672 [DEBUG] [Thread-135119] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:41:56.672 [DEBUG] [Thread-135119] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:41:56.672 [DEBUG] [Thread-135119] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:41:56.672 [DEBUG] [Thread-135119] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:41:56.672 [DEBUG] [Thread-135119] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:41:56.672 [DEBUG] [Thread-135119] [transport.py] [_log()] client lang: <none>
2025-12-31T21:41:56.672 [DEBUG] [Thread-135119] [transport.py] [_log()] server lang: <none>
2025-12-31T21:41:56.672 [DEBUG] [Thread-135119] [transport.py] [_log()] kex follows: False
2025-12-31T21:41:56.672 [DEBUG] [Thread-135119] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:41:56.672 [DEBUG] [Thread-135119] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:41:56.672 [DEBUG] [Thread-135119] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:41:56.672 [DEBUG] [Thread-135119] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:41:56.672 [DEBUG] [Thread-135119] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:41:56.672 [DEBUG] [Thread-135119] [transport.py] [_log()] Compression: none
2025-12-31T21:41:56.672 [DEBUG] [Thread-135119] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:41:56.686 [DEBUG] [Thread-135119] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:41:56.686 [DEBUG] [Thread-135119] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:41:56.686 [DEBUG] [Thread-135119] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T21:41:56.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T21:41:56.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:41:56.687 [DEBUG] [Thread-135119] [transport.py] [_log()] userauth is OK
2025-12-31T21:41:56.687 [DEBUG] [Thread-135119] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:41:56.687 [DEBUG] [Thread-135119] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:41:56.687 [DEBUG] [Thread-135119] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T21:41:56.687 [DEBUG] [Thread-135119] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:41:56.703 [INFO] [Thread-135119] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:41:56.703 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:41:56.778 [DEBUG] [Thread-135121 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:41:57.335 [DEBUG] [Thread-135119] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:41:57.335 [DEBUG] [Thread-135119] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:41:57.335 [DEBUG] [Thread-135119] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T21:41:57.376 [DEBUG] [Thread-135119] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:41:57.376 [DEBUG] [Thread-135119] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:41:57.378 [DEBUG] [Thread-135119] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:41:57.390 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:41:57.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T21:41:57.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T21:41:57.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T21:41:57.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:41:57.396 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T21:41:57.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:41:57.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:41:57.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T21:41:57.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.820276 -999.00  +16.70  14.93     69  +11.00 1 2 1 1 1     0    0 5.12 -34.85 Z.ESW 16.4 14.9 186.8 24.8 17.8 -18.6 17.6 -18.8 17.4 -18.1 17.8 -17.9
2025-12-31T21:41:57.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T21:41:57.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T21:41:57.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.820276
2025-12-31T21:41:57.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T21:41:57.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T21:41:57.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T21:41:57.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T21:41:57.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T21:41:57.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T21:41:37', tmtdew=6.37, humidity=66.12, cloud=0.0, wind=22.16, temperature=16.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T21:41:37', seeing=1.74, atlas_timestamp='2025-12-31T19:41:11.846', atlas_cloud=2, atlas_rain=1, zp_data=[1.1577499999999992, 1.0162500000000003, 1.3382500000000004, 0.9594999999999994, nan, nan, nan, nan, 0.6434999999999995, 1.3890000000000002, 1.0722499999999995, 0.9139999999999997, 1.0634999999999994, nan, -0.8480000000000008, -0.5780000000000012, 0.5262499999999992, 0.2505000000000006, 0.5579999999999998, 0.4627499999999998, 0.3644999999999996, 0.47474999999999845, -1.8477499999999996, -1.5672499999999996, 0.3274999999999988, 0.16949999999999932, 0.2682500000000001, 0.3620000000000001, 0.2110000000000003, 0.2240000000000002, -1.9269999999999996, -1.8549999999999986, 0.09074999999999989], zp_timestamp='2025-12-31T19:41:00')
2025-12-31T21:41:57.397 [DEBUG] [Thread-135119] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:41:57.471 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T21:41:57.485 [DEBUG] [Thread-135123] [transport.py] [_log()] starting thread (client mode): 0xb1758be0
2025-12-31T21:41:57.485 [DEBUG] [Thread-135123] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:41:57.499 [DEBUG] [Thread-135123] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T21:41:57.499 [INFO] [Thread-135123] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T21:41:57.507 [DEBUG] [Thread-135123] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:41:57.507 [DEBUG] [Thread-135123] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T21:41:57.507 [DEBUG] [Thread-135123] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:41:57.507 [DEBUG] [Thread-135123] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:41:57.507 [DEBUG] [Thread-135123] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:41:57.507 [DEBUG] [Thread-135123] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:41:57.507 [DEBUG] [Thread-135123] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:41:57.507 [DEBUG] [Thread-135123] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:41:57.507 [DEBUG] [Thread-135123] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:41:57.507 [DEBUG] [Thread-135123] [transport.py] [_log()] client lang: <none>
2025-12-31T21:41:57.507 [DEBUG] [Thread-135123] [transport.py] [_log()] server lang: <none>
2025-12-31T21:41:57.507 [DEBUG] [Thread-135123] [transport.py] [_log()] kex follows: False
2025-12-31T21:41:57.507 [DEBUG] [Thread-135123] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:41:57.507 [DEBUG] [Thread-135123] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:41:57.507 [DEBUG] [Thread-135123] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:41:57.507 [DEBUG] [Thread-135123] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:41:57.507 [DEBUG] [Thread-135123] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:41:57.507 [DEBUG] [Thread-135123] [transport.py] [_log()] Compression: none
2025-12-31T21:41:57.507 [DEBUG] [Thread-135123] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:41:57.564 [DEBUG] [Thread-135123] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:41:57.564 [DEBUG] [Thread-135123] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:41:57.564 [DEBUG] [Thread-135123] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T21:41:57.564 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T21:41:57.565 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:41:57.620 [DEBUG] [Thread-135123] [transport.py] [_log()] userauth is OK
2025-12-31T21:41:57.620 [DEBUG] [Thread-135123] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:41:57.620 [DEBUG] [Thread-135123] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:41:57.620 [DEBUG] [Thread-135123] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T21:41:57.620 [DEBUG] [Thread-135123] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:41:57.634 [INFO] [Thread-135123] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:41:57.634 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T21:41:57.634 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:41:58.412 [DEBUG] [Thread-135123] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:41:58.412 [DEBUG] [Thread-135123] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:41:58.459 [DEBUG] [Thread-135123] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:41:58.459 [DEBUG] [Thread-135123] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:41:58.468 [DEBUG] [Thread-135123] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:41:58.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:41:58.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T21:41:58.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T21:41:58.498 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:41:58.498 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:41:58.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:41:58.506 [DEBUG] [Thread-135123] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:42:04.636 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:42:04.638 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:42:11.808 [DEBUG] [Thread-135125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:42:26.859 [DEBUG] [Thread-135126 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:42:28.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T21:42:28.528 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T21:42:28.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T21:42:29.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 21, 42, 9), 6.39, 66.07, 0.0, 20.19, 16.48, 0, 0, 0, 2, 0, 0),)
2025-12-31T21:42:29.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 21:42:09
2025-12-31T21:42:29.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T21:42:29.508 [DEBUG] [Thread-135127] [transport.py] [_log()] starting thread (client mode): 0xb1777ee0
2025-12-31T21:42:29.509 [DEBUG] [Thread-135127] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:42:29.529 [DEBUG] [Thread-135127] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T21:42:29.529 [INFO] [Thread-135127] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T21:42:29.532 [DEBUG] [Thread-135127] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:42:29.532 [DEBUG] [Thread-135127] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T21:42:29.532 [DEBUG] [Thread-135127] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:42:29.532 [DEBUG] [Thread-135127] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:42:29.532 [DEBUG] [Thread-135127] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:42:29.532 [DEBUG] [Thread-135127] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:42:29.532 [DEBUG] [Thread-135127] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:42:29.532 [DEBUG] [Thread-135127] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:42:29.532 [DEBUG] [Thread-135127] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:42:29.532 [DEBUG] [Thread-135127] [transport.py] [_log()] client lang: <none>
2025-12-31T21:42:29.533 [DEBUG] [Thread-135127] [transport.py] [_log()] server lang: <none>
2025-12-31T21:42:29.533 [DEBUG] [Thread-135127] [transport.py] [_log()] kex follows: False
2025-12-31T21:42:29.533 [DEBUG] [Thread-135127] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:42:29.533 [DEBUG] [Thread-135127] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:42:29.533 [DEBUG] [Thread-135127] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:42:29.533 [DEBUG] [Thread-135127] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:42:29.533 [DEBUG] [Thread-135127] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:42:29.533 [DEBUG] [Thread-135127] [transport.py] [_log()] Compression: none
2025-12-31T21:42:29.533 [DEBUG] [Thread-135127] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:42:29.550 [DEBUG] [Thread-135127] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:42:29.551 [DEBUG] [Thread-135127] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:42:29.551 [DEBUG] [Thread-135127] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T21:42:29.552 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T21:42:29.552 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:42:29.553 [DEBUG] [Thread-135127] [transport.py] [_log()] userauth is OK
2025-12-31T21:42:29.553 [DEBUG] [Thread-135127] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:42:29.553 [DEBUG] [Thread-135127] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:42:29.554 [DEBUG] [Thread-135127] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T21:42:29.554 [DEBUG] [Thread-135127] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:42:29.571 [INFO] [Thread-135127] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:42:29.572 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:42:30.375 [DEBUG] [Thread-135127] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:42:30.375 [DEBUG] [Thread-135127] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:42:30.375 [DEBUG] [Thread-135127] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T21:42:30.416 [DEBUG] [Thread-135127] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:42:30.416 [DEBUG] [Thread-135127] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:42:30.420 [DEBUG] [Thread-135127] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:42:30.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:42:30.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T21:42:30.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T21:42:30.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T21:42:30.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:42:30.444 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T21:42:30.445 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:42:30.445 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:42:30.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T21:42:30.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.820623 -999.00  +16.60  13.86     69  +11.00 1 2 1 1 1     0    0 4.94 -33.54 Z.ESW 15.2 13.9 197.8 19.8 17.7 -18.8 17.6 -18.9 17.4 -18.1 17.7 -17.9
2025-12-31T21:42:30.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T21:42:30.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T21:42:30.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.820623
2025-12-31T21:42:30.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T21:42:30.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T21:42:30.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T21:42:30.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T21:42:30.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T21:42:30.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T21:42:09', tmtdew=6.39, humidity=66.07, cloud=0.0, wind=20.19, temperature=16.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T21:42:09', seeing=1.58, atlas_timestamp='2025-12-31T19:41:41.827', atlas_cloud=2, atlas_rain=1, zp_data=[1.1577499999999992, 1.0162500000000003, 1.3382500000000004, 0.9594999999999994, nan, nan, nan, nan, 0.6434999999999995, 1.3890000000000002, 1.0722499999999995, 0.9139999999999997, 1.0634999999999994, nan, -0.8480000000000008, -0.5780000000000012, 0.5262499999999992, 0.2505000000000006, 0.5579999999999998, 0.4627499999999998, 0.3644999999999996, 0.47474999999999845, -1.8477499999999996, -1.5672499999999996, 0.3274999999999988, 0.16949999999999932, 0.2682500000000001, 0.3620000000000001, 0.2110000000000003, 0.2240000000000002, -1.9269999999999996, -1.8549999999999986, 0.09074999999999989], zp_timestamp='2025-12-31T19:41:00')
2025-12-31T21:42:30.447 [DEBUG] [Thread-135127] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:42:30.530 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T21:42:30.541 [DEBUG] [Thread-135130] [transport.py] [_log()] starting thread (client mode): 0xb175be20
2025-12-31T21:42:30.542 [DEBUG] [Thread-135130] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:42:30.556 [DEBUG] [Thread-135130] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T21:42:30.557 [INFO] [Thread-135130] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T21:42:30.564 [DEBUG] [Thread-135130] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:42:30.564 [DEBUG] [Thread-135130] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T21:42:30.564 [DEBUG] [Thread-135130] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:42:30.564 [DEBUG] [Thread-135130] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:42:30.564 [DEBUG] [Thread-135130] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:42:30.564 [DEBUG] [Thread-135130] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:42:30.564 [DEBUG] [Thread-135130] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:42:30.564 [DEBUG] [Thread-135130] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:42:30.564 [DEBUG] [Thread-135130] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:42:30.564 [DEBUG] [Thread-135130] [transport.py] [_log()] client lang: <none>
2025-12-31T21:42:30.564 [DEBUG] [Thread-135130] [transport.py] [_log()] server lang: <none>
2025-12-31T21:42:30.564 [DEBUG] [Thread-135130] [transport.py] [_log()] kex follows: False
2025-12-31T21:42:30.564 [DEBUG] [Thread-135130] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:42:30.564 [DEBUG] [Thread-135130] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:42:30.564 [DEBUG] [Thread-135130] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:42:30.564 [DEBUG] [Thread-135130] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:42:30.564 [DEBUG] [Thread-135130] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:42:30.564 [DEBUG] [Thread-135130] [transport.py] [_log()] Compression: none
2025-12-31T21:42:30.564 [DEBUG] [Thread-135130] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:42:30.625 [DEBUG] [Thread-135130] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:42:30.626 [DEBUG] [Thread-135130] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:42:30.626 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T21:42:30.627 [DEBUG] [Thread-135130] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T21:42:30.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:42:30.681 [DEBUG] [Thread-135130] [transport.py] [_log()] userauth is OK
2025-12-31T21:42:30.681 [DEBUG] [Thread-135130] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:42:30.681 [DEBUG] [Thread-135130] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:42:30.681 [DEBUG] [Thread-135130] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T21:42:30.681 [DEBUG] [Thread-135130] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:42:30.700 [INFO] [Thread-135130] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:42:30.700 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T21:42:30.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:42:31.547 [DEBUG] [Thread-135130] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:42:31.548 [DEBUG] [Thread-135130] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:42:31.597 [DEBUG] [Thread-135130] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:42:31.597 [DEBUG] [Thread-135130] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:42:31.609 [DEBUG] [Thread-135130] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:42:31.621 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:42:31.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T21:42:31.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-12-31T21:42:31.644 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:42:31.645 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:42:31.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:42:31.656 [DEBUG] [Thread-135130] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:42:41.888 [DEBUG] [Thread-135132 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:42:44.666 [DEBUG] [Thread-135133 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:42:56.928 [DEBUG] [Thread-135134 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:43:01.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T21:43:01.676 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T21:43:01.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T21:43:02.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 21, 42, 41), 6.33, 66.1, 0.0, 21.33, 16.5, 0, 0, 0, 2, 0, 0),)
2025-12-31T21:43:02.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 21:42:41
2025-12-31T21:43:02.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T21:43:02.663 [DEBUG] [Thread-135135] [transport.py] [_log()] starting thread (client mode): 0xb17447f0
2025-12-31T21:43:02.663 [DEBUG] [Thread-135135] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:43:02.684 [DEBUG] [Thread-135135] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T21:43:02.684 [INFO] [Thread-135135] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T21:43:02.687 [DEBUG] [Thread-135135] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:43:02.687 [DEBUG] [Thread-135135] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T21:43:02.687 [DEBUG] [Thread-135135] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:43:02.687 [DEBUG] [Thread-135135] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:43:02.687 [DEBUG] [Thread-135135] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:43:02.687 [DEBUG] [Thread-135135] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:43:02.687 [DEBUG] [Thread-135135] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:43:02.687 [DEBUG] [Thread-135135] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:43:02.687 [DEBUG] [Thread-135135] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:43:02.687 [DEBUG] [Thread-135135] [transport.py] [_log()] client lang: <none>
2025-12-31T21:43:02.687 [DEBUG] [Thread-135135] [transport.py] [_log()] server lang: <none>
2025-12-31T21:43:02.687 [DEBUG] [Thread-135135] [transport.py] [_log()] kex follows: False
2025-12-31T21:43:02.687 [DEBUG] [Thread-135135] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:43:02.687 [DEBUG] [Thread-135135] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:43:02.688 [DEBUG] [Thread-135135] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:43:02.688 [DEBUG] [Thread-135135] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:43:02.688 [DEBUG] [Thread-135135] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:43:02.688 [DEBUG] [Thread-135135] [transport.py] [_log()] Compression: none
2025-12-31T21:43:02.688 [DEBUG] [Thread-135135] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:43:02.705 [DEBUG] [Thread-135135] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:43:02.706 [DEBUG] [Thread-135135] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:43:02.706 [DEBUG] [Thread-135135] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T21:43:02.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T21:43:02.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:43:02.708 [DEBUG] [Thread-135135] [transport.py] [_log()] userauth is OK
2025-12-31T21:43:02.709 [DEBUG] [Thread-135135] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:43:02.709 [DEBUG] [Thread-135135] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:43:02.709 [DEBUG] [Thread-135135] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T21:43:02.709 [DEBUG] [Thread-135135] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:43:02.743 [INFO] [Thread-135135] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:43:02.744 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:43:03.401 [DEBUG] [Thread-135135] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:43:03.401 [DEBUG] [Thread-135135] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:43:03.402 [DEBUG] [Thread-135135] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T21:43:03.442 [DEBUG] [Thread-135135] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:43:03.442 [DEBUG] [Thread-135135] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:43:03.445 [DEBUG] [Thread-135135] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:43:03.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:43:03.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T21:43:03.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T21:43:03.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T21:43:03.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:43:03.469 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T21:43:03.469 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:43:03.469 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:43:03.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T21:43:03.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.820971 -999.00  +16.60  14.83     69  +11.00 1 2 1 1 1     0    0 5.04 -32.77 Z.ESW 10.9 14.8 204.3 24.3 17.7 -19.0 17.6 -19.2 17.4 -18.3 17.7 -18.5
2025-12-31T21:43:03.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T21:43:03.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T21:43:03.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.820971
2025-12-31T21:43:03.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T21:43:03.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T21:43:03.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T21:43:03.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T21:43:03.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T21:43:03.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T21:42:41', tmtdew=6.33, humidity=66.1, cloud=0.0, wind=21.33, temperature=16.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T21:42:41', seeing=1.79, atlas_timestamp='2025-12-31T19:42:11.894', atlas_cloud=2, atlas_rain=1, zp_data=[1.1577499999999992, 1.0162500000000003, 1.3382500000000004, 0.9594999999999994, nan, nan, nan, nan, 0.6434999999999995, 1.3890000000000002, 1.0722499999999995, 0.9139999999999997, 1.0634999999999994, nan, -0.8480000000000008, -0.5780000000000012, 0.5262499999999992, 0.2505000000000006, 0.5579999999999998, 0.4627499999999998, 0.3644999999999996, 0.47474999999999845, -1.8477499999999996, -1.5672499999999996, 0.3274999999999988, 0.16949999999999932, 0.2682500000000001, 0.3620000000000001, 0.2110000000000003, 0.2240000000000002, -1.9269999999999996, -1.8549999999999986, 0.09074999999999989], zp_timestamp='2025-12-31T19:41:00')
2025-12-31T21:43:03.472 [DEBUG] [Thread-135135] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:43:03.568 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T21:43:03.580 [DEBUG] [Thread-135138] [transport.py] [_log()] starting thread (client mode): 0xb6bb8dc0
2025-12-31T21:43:03.581 [DEBUG] [Thread-135138] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:43:03.595 [DEBUG] [Thread-135138] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T21:43:03.595 [INFO] [Thread-135138] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T21:43:03.603 [DEBUG] [Thread-135138] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:43:03.603 [DEBUG] [Thread-135138] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T21:43:03.603 [DEBUG] [Thread-135138] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:43:03.603 [DEBUG] [Thread-135138] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:43:03.603 [DEBUG] [Thread-135138] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:43:03.603 [DEBUG] [Thread-135138] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:43:03.603 [DEBUG] [Thread-135138] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:43:03.603 [DEBUG] [Thread-135138] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:43:03.603 [DEBUG] [Thread-135138] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:43:03.603 [DEBUG] [Thread-135138] [transport.py] [_log()] client lang: <none>
2025-12-31T21:43:03.604 [DEBUG] [Thread-135138] [transport.py] [_log()] server lang: <none>
2025-12-31T21:43:03.604 [DEBUG] [Thread-135138] [transport.py] [_log()] kex follows: False
2025-12-31T21:43:03.604 [DEBUG] [Thread-135138] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:43:03.604 [DEBUG] [Thread-135138] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:43:03.604 [DEBUG] [Thread-135138] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:43:03.604 [DEBUG] [Thread-135138] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:43:03.604 [DEBUG] [Thread-135138] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:43:03.604 [DEBUG] [Thread-135138] [transport.py] [_log()] Compression: none
2025-12-31T21:43:03.604 [DEBUG] [Thread-135138] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:43:03.661 [DEBUG] [Thread-135138] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:43:03.661 [DEBUG] [Thread-135138] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:43:03.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T21:43:03.662 [DEBUG] [Thread-135138] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T21:43:03.663 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:43:03.717 [DEBUG] [Thread-135138] [transport.py] [_log()] userauth is OK
2025-12-31T21:43:03.717 [DEBUG] [Thread-135138] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:43:03.717 [DEBUG] [Thread-135138] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:43:03.717 [DEBUG] [Thread-135138] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T21:43:03.717 [DEBUG] [Thread-135138] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:43:03.732 [INFO] [Thread-135138] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:43:03.733 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T21:43:03.733 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:43:04.562 [DEBUG] [Thread-135138] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:43:04.563 [DEBUG] [Thread-135138] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:43:04.611 [DEBUG] [Thread-135138] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:43:04.611 [DEBUG] [Thread-135138] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:43:04.620 [DEBUG] [Thread-135138] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:43:04.630 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:43:04.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T21:43:04.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T21:43:04.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:43:04.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:43:04.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:43:04.658 [DEBUG] [Thread-135138] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:43:04.839 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:43:04.840 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:43:11.962 [DEBUG] [Thread-135140 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:43:27.011 [DEBUG] [Thread-135141 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:43:34.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T21:43:34.675 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T21:43:34.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-12-31T21:43:35.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 21, 43, 13), 6.3, 66.2, 0.0, 22.04, 16.48, 0, 0, 0, 2, 0, 0),)
2025-12-31T21:43:35.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 21:43:13
2025-12-31T21:43:35.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T21:43:35.639 [DEBUG] [Thread-135142] [transport.py] [_log()] starting thread (client mode): 0xb1764bb0
2025-12-31T21:43:35.640 [DEBUG] [Thread-135142] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:43:35.659 [DEBUG] [Thread-135142] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T21:43:35.659 [INFO] [Thread-135142] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T21:43:35.662 [DEBUG] [Thread-135142] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:43:35.662 [DEBUG] [Thread-135142] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T21:43:35.662 [DEBUG] [Thread-135142] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:43:35.662 [DEBUG] [Thread-135142] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:43:35.662 [DEBUG] [Thread-135142] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:43:35.662 [DEBUG] [Thread-135142] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:43:35.662 [DEBUG] [Thread-135142] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:43:35.662 [DEBUG] [Thread-135142] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:43:35.663 [DEBUG] [Thread-135142] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:43:35.663 [DEBUG] [Thread-135142] [transport.py] [_log()] client lang: <none>
2025-12-31T21:43:35.663 [DEBUG] [Thread-135142] [transport.py] [_log()] server lang: <none>
2025-12-31T21:43:35.663 [DEBUG] [Thread-135142] [transport.py] [_log()] kex follows: False
2025-12-31T21:43:35.663 [DEBUG] [Thread-135142] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:43:35.663 [DEBUG] [Thread-135142] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:43:35.663 [DEBUG] [Thread-135142] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:43:35.663 [DEBUG] [Thread-135142] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:43:35.663 [DEBUG] [Thread-135142] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:43:35.663 [DEBUG] [Thread-135142] [transport.py] [_log()] Compression: none
2025-12-31T21:43:35.663 [DEBUG] [Thread-135142] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:43:35.682 [DEBUG] [Thread-135142] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:43:35.683 [DEBUG] [Thread-135142] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:43:35.684 [DEBUG] [Thread-135142] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T21:43:35.684 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T21:43:35.685 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:43:35.686 [DEBUG] [Thread-135142] [transport.py] [_log()] userauth is OK
2025-12-31T21:43:35.687 [DEBUG] [Thread-135142] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:43:35.687 [DEBUG] [Thread-135142] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:43:35.687 [DEBUG] [Thread-135142] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T21:43:35.687 [DEBUG] [Thread-135142] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:43:35.708 [INFO] [Thread-135142] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:43:35.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:43:36.484 [DEBUG] [Thread-135142] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:43:36.485 [DEBUG] [Thread-135142] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:43:36.485 [DEBUG] [Thread-135142] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T21:43:36.526 [DEBUG] [Thread-135142] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:43:36.526 [DEBUG] [Thread-135142] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:43:36.528 [DEBUG] [Thread-135142] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:43:36.540 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:43:36.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T21:43:36.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T21:43:36.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T21:43:36.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:43:36.550 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T21:43:36.550 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:43:36.550 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:43:36.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T21:43:36.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.821665 -999.00  +16.60  19.09     69  +11.00 1 2 1 1 1     0    0 5.06 -35.23 Z.ESW 14.1 19.1 197.0 24.9 17.7 -19.6 17.6 -19.6 17.4 -18.6 17.7 -18.7
2025-12-31T21:43:36.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T21:43:36.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T21:43:36.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.821665
2025-12-31T21:43:36.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T21:43:36.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T21:43:36.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T21:43:36.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T21:43:36.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T21:43:36.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T21:43:13', tmtdew=6.3, humidity=66.2, cloud=0.0, wind=22.04, temperature=16.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T21:43:13', seeing=1.59, atlas_timestamp='2025-12-31T19:43:11.856', atlas_cloud=2, atlas_rain=1, zp_data=[1.1577499999999992, 1.0162500000000003, 1.3382500000000004, 0.9594999999999994, nan, nan, nan, nan, 0.6434999999999995, 1.3890000000000002, 1.0722499999999995, 0.9139999999999997, 1.0634999999999994, nan, -0.8480000000000008, -0.5780000000000012, 0.5262499999999992, 0.2505000000000006, 0.5579999999999998, 0.4627499999999998, 0.3644999999999996, 0.47474999999999845, -1.8477499999999996, -1.5672499999999996, 0.3274999999999988, 0.16949999999999932, 0.2682500000000001, 0.3620000000000001, 0.2110000000000003, 0.2240000000000002, -1.9269999999999996, -1.8549999999999986, 0.09074999999999989], zp_timestamp='2025-12-31T19:41:00')
2025-12-31T21:43:36.552 [DEBUG] [Thread-135142] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:43:36.632 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T21:43:36.645 [DEBUG] [Thread-135145] [transport.py] [_log()] starting thread (client mode): 0xb17657b0
2025-12-31T21:43:36.645 [DEBUG] [Thread-135145] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:43:36.660 [DEBUG] [Thread-135145] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T21:43:36.660 [INFO] [Thread-135145] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T21:43:36.667 [DEBUG] [Thread-135145] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:43:36.668 [DEBUG] [Thread-135145] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T21:43:36.668 [DEBUG] [Thread-135145] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:43:36.668 [DEBUG] [Thread-135145] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:43:36.668 [DEBUG] [Thread-135145] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:43:36.668 [DEBUG] [Thread-135145] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:43:36.668 [DEBUG] [Thread-135145] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:43:36.668 [DEBUG] [Thread-135145] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:43:36.669 [DEBUG] [Thread-135145] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:43:36.669 [DEBUG] [Thread-135145] [transport.py] [_log()] client lang: <none>
2025-12-31T21:43:36.669 [DEBUG] [Thread-135145] [transport.py] [_log()] server lang: <none>
2025-12-31T21:43:36.669 [DEBUG] [Thread-135145] [transport.py] [_log()] kex follows: False
2025-12-31T21:43:36.669 [DEBUG] [Thread-135145] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:43:36.669 [DEBUG] [Thread-135145] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:43:36.669 [DEBUG] [Thread-135145] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:43:36.669 [DEBUG] [Thread-135145] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:43:36.669 [DEBUG] [Thread-135145] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:43:36.670 [DEBUG] [Thread-135145] [transport.py] [_log()] Compression: none
2025-12-31T21:43:36.670 [DEBUG] [Thread-135145] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:43:36.725 [DEBUG] [Thread-135145] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:43:36.726 [DEBUG] [Thread-135145] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:43:36.726 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T21:43:36.727 [DEBUG] [Thread-135145] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T21:43:36.728 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:43:36.781 [DEBUG] [Thread-135145] [transport.py] [_log()] userauth is OK
2025-12-31T21:43:36.781 [DEBUG] [Thread-135145] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:43:36.781 [DEBUG] [Thread-135145] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:43:36.781 [DEBUG] [Thread-135145] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T21:43:36.782 [DEBUG] [Thread-135145] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:43:36.800 [INFO] [Thread-135145] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:43:36.801 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T21:43:36.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:43:37.622 [DEBUG] [Thread-135145] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:43:37.622 [DEBUG] [Thread-135145] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:43:37.675 [DEBUG] [Thread-135145] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:43:37.675 [DEBUG] [Thread-135145] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:43:37.685 [DEBUG] [Thread-135145] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:43:37.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:43:37.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T21:43:37.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T21:43:37.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:43:37.714 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:43:37.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:43:37.723 [DEBUG] [Thread-135145] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:43:42.046 [DEBUG] [Thread-135147 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:43:44.718 [DEBUG] [Thread-135148 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:43:57.093 [DEBUG] [Thread-135149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:44:05.040 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:44:05.042 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:44:07.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T21:44:07.744 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T21:44:07.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T21:44:08.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 21, 43, 45), 6.29, 66.29, 0.0, 19.83, 16.48, 0, 0, 0, 2, 0, 0),)
2025-12-31T21:44:08.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 21:43:45
2025-12-31T21:44:08.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T21:44:08.696 [DEBUG] [Thread-135150] [transport.py] [_log()] starting thread (client mode): 0xb1747f70
2025-12-31T21:44:08.696 [DEBUG] [Thread-135150] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:44:08.716 [DEBUG] [Thread-135150] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T21:44:08.716 [INFO] [Thread-135150] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T21:44:08.719 [DEBUG] [Thread-135150] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:44:08.720 [DEBUG] [Thread-135150] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T21:44:08.720 [DEBUG] [Thread-135150] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:44:08.720 [DEBUG] [Thread-135150] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:44:08.720 [DEBUG] [Thread-135150] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:44:08.720 [DEBUG] [Thread-135150] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:44:08.720 [DEBUG] [Thread-135150] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:44:08.720 [DEBUG] [Thread-135150] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:44:08.720 [DEBUG] [Thread-135150] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:44:08.720 [DEBUG] [Thread-135150] [transport.py] [_log()] client lang: <none>
2025-12-31T21:44:08.720 [DEBUG] [Thread-135150] [transport.py] [_log()] server lang: <none>
2025-12-31T21:44:08.720 [DEBUG] [Thread-135150] [transport.py] [_log()] kex follows: False
2025-12-31T21:44:08.720 [DEBUG] [Thread-135150] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:44:08.720 [DEBUG] [Thread-135150] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:44:08.720 [DEBUG] [Thread-135150] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:44:08.720 [DEBUG] [Thread-135150] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:44:08.720 [DEBUG] [Thread-135150] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:44:08.720 [DEBUG] [Thread-135150] [transport.py] [_log()] Compression: none
2025-12-31T21:44:08.720 [DEBUG] [Thread-135150] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:44:08.737 [DEBUG] [Thread-135150] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:44:08.738 [DEBUG] [Thread-135150] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:44:08.738 [DEBUG] [Thread-135150] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T21:44:08.739 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T21:44:08.739 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:44:08.740 [DEBUG] [Thread-135150] [transport.py] [_log()] userauth is OK
2025-12-31T21:44:08.741 [DEBUG] [Thread-135150] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:44:08.741 [DEBUG] [Thread-135150] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:44:08.741 [DEBUG] [Thread-135150] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T21:44:08.741 [DEBUG] [Thread-135150] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:44:08.764 [INFO] [Thread-135150] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:44:08.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:44:09.384 [DEBUG] [Thread-135150] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:44:09.384 [DEBUG] [Thread-135150] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:44:09.384 [DEBUG] [Thread-135150] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T21:44:09.425 [DEBUG] [Thread-135150] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:44:09.425 [DEBUG] [Thread-135150] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:44:09.428 [DEBUG] [Thread-135150] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:44:09.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:44:09.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T21:44:09.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T21:44:09.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T21:44:09.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:44:09.453 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T21:44:09.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:44:09.453 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:44:09.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T21:44:09.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.822012 -999.00  +16.60   9.62     69  +11.00 1 2 1 1 1     0    0 4.91 -36.88 Z.ESW 15.3 9.6 202.7 27.0 17.7 -19.9 17.5 -19.8 17.4 -18.9 17.6 -19.0
2025-12-31T21:44:09.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T21:44:09.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T21:44:09.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.822012
2025-12-31T21:44:09.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T21:44:09.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T21:44:09.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T21:44:09.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T21:44:09.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T21:44:09.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T21:43:45', tmtdew=6.29, humidity=66.29, cloud=0.0, wind=19.83, temperature=16.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T21:43:45', seeing=1.59, atlas_timestamp='2025-12-31T19:43:41.837', atlas_cloud=2, atlas_rain=1, zp_data=[1.1577499999999992, 1.0162500000000003, 1.3382500000000004, 0.9594999999999994, nan, nan, nan, nan, 0.6434999999999995, 1.3890000000000002, 1.0722499999999995, 0.9139999999999997, 1.0634999999999994, nan, -0.8480000000000008, -0.5780000000000012, 0.5262499999999992, 0.2505000000000006, 0.5579999999999998, 0.4627499999999998, 0.3644999999999996, 0.47474999999999845, -1.8477499999999996, -1.5672499999999996, 0.3274999999999988, 0.16949999999999932, 0.2682500000000001, 0.3620000000000001, 0.2110000000000003, 0.2240000000000002, -1.9269999999999996, -1.8549999999999986, 0.09074999999999989], zp_timestamp='2025-12-31T19:41:00')
2025-12-31T21:44:09.456 [DEBUG] [Thread-135150] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:44:09.540 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T21:44:09.552 [DEBUG] [Thread-135153] [transport.py] [_log()] starting thread (client mode): 0xb1758310
2025-12-31T21:44:09.552 [DEBUG] [Thread-135153] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:44:09.566 [DEBUG] [Thread-135153] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T21:44:09.566 [INFO] [Thread-135153] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T21:44:09.574 [DEBUG] [Thread-135153] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:44:09.574 [DEBUG] [Thread-135153] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T21:44:09.574 [DEBUG] [Thread-135153] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:44:09.574 [DEBUG] [Thread-135153] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:44:09.575 [DEBUG] [Thread-135153] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:44:09.575 [DEBUG] [Thread-135153] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:44:09.575 [DEBUG] [Thread-135153] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:44:09.575 [DEBUG] [Thread-135153] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:44:09.575 [DEBUG] [Thread-135153] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:44:09.575 [DEBUG] [Thread-135153] [transport.py] [_log()] client lang: <none>
2025-12-31T21:44:09.575 [DEBUG] [Thread-135153] [transport.py] [_log()] server lang: <none>
2025-12-31T21:44:09.575 [DEBUG] [Thread-135153] [transport.py] [_log()] kex follows: False
2025-12-31T21:44:09.575 [DEBUG] [Thread-135153] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:44:09.576 [DEBUG] [Thread-135153] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:44:09.576 [DEBUG] [Thread-135153] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:44:09.576 [DEBUG] [Thread-135153] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:44:09.576 [DEBUG] [Thread-135153] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:44:09.576 [DEBUG] [Thread-135153] [transport.py] [_log()] Compression: none
2025-12-31T21:44:09.576 [DEBUG] [Thread-135153] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:44:09.638 [DEBUG] [Thread-135153] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:44:09.638 [DEBUG] [Thread-135153] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:44:09.639 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T21:44:09.639 [DEBUG] [Thread-135153] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T21:44:09.640 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:44:09.693 [DEBUG] [Thread-135153] [transport.py] [_log()] userauth is OK
2025-12-31T21:44:09.693 [DEBUG] [Thread-135153] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:44:09.693 [DEBUG] [Thread-135153] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:44:09.693 [DEBUG] [Thread-135153] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T21:44:09.693 [DEBUG] [Thread-135153] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:44:09.713 [INFO] [Thread-135153] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:44:09.713 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T21:44:09.714 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:44:10.535 [DEBUG] [Thread-135153] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:44:10.536 [DEBUG] [Thread-135153] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:44:10.584 [DEBUG] [Thread-135153] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:44:10.584 [DEBUG] [Thread-135153] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:44:10.594 [DEBUG] [Thread-135153] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:44:10.603 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:44:10.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T21:44:10.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T21:44:10.622 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:44:10.622 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:44:10.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:44:10.631 [DEBUG] [Thread-135153] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:44:12.131 [DEBUG] [Thread-135155 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:44:27.182 [DEBUG] [Thread-135156 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:44:40.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T21:44:40.653 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T21:44:40.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T21:44:41.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 21, 44, 17), 6.25, 66.42, 0.0, 17.5, 16.45, 0, 0, 0, 2, 0, 0),)
2025-12-31T21:44:41.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 21:44:17
2025-12-31T21:44:41.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T21:44:41.621 [DEBUG] [Thread-135157] [transport.py] [_log()] starting thread (client mode): 0xb95d4f70
2025-12-31T21:44:41.621 [DEBUG] [Thread-135157] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:44:41.642 [DEBUG] [Thread-135157] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T21:44:41.642 [INFO] [Thread-135157] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T21:44:41.645 [DEBUG] [Thread-135157] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:44:41.645 [DEBUG] [Thread-135157] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T21:44:41.645 [DEBUG] [Thread-135157] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:44:41.645 [DEBUG] [Thread-135157] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:44:41.645 [DEBUG] [Thread-135157] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:44:41.645 [DEBUG] [Thread-135157] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:44:41.645 [DEBUG] [Thread-135157] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:44:41.645 [DEBUG] [Thread-135157] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:44:41.645 [DEBUG] [Thread-135157] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:44:41.645 [DEBUG] [Thread-135157] [transport.py] [_log()] client lang: <none>
2025-12-31T21:44:41.645 [DEBUG] [Thread-135157] [transport.py] [_log()] server lang: <none>
2025-12-31T21:44:41.645 [DEBUG] [Thread-135157] [transport.py] [_log()] kex follows: False
2025-12-31T21:44:41.645 [DEBUG] [Thread-135157] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:44:41.645 [DEBUG] [Thread-135157] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:44:41.645 [DEBUG] [Thread-135157] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:44:41.645 [DEBUG] [Thread-135157] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:44:41.645 [DEBUG] [Thread-135157] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:44:41.645 [DEBUG] [Thread-135157] [transport.py] [_log()] Compression: none
2025-12-31T21:44:41.645 [DEBUG] [Thread-135157] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:44:41.662 [DEBUG] [Thread-135157] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:44:41.662 [DEBUG] [Thread-135157] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:44:41.663 [DEBUG] [Thread-135157] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T21:44:41.663 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T21:44:41.664 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:44:41.665 [DEBUG] [Thread-135157] [transport.py] [_log()] userauth is OK
2025-12-31T21:44:41.665 [DEBUG] [Thread-135157] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:44:41.665 [DEBUG] [Thread-135157] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:44:41.665 [DEBUG] [Thread-135157] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T21:44:41.665 [DEBUG] [Thread-135157] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:44:41.689 [INFO] [Thread-135157] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:44:41.691 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:44:42.214 [DEBUG] [Thread-135159 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:44:42.296 [DEBUG] [Thread-135157] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:44:42.296 [DEBUG] [Thread-135157] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:44:42.296 [DEBUG] [Thread-135157] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T21:44:42.337 [DEBUG] [Thread-135157] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:44:42.337 [DEBUG] [Thread-135157] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:44:42.340 [DEBUG] [Thread-135157] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:44:42.354 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:44:42.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T21:44:42.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T21:44:42.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T21:44:42.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:44:42.364 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T21:44:42.364 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:44:42.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:44:42.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T21:44:42.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.822359 -999.00  +16.60  14.47     69  +11.00 1 2 1 1 1     0    0 4.80 -37.67 Z.ESW 17.4 14.5 202.4 22.9 17.7 -20.1 17.5 -20.0 17.3 -18.9 17.6 -19.1
2025-12-31T21:44:42.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T21:44:42.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T21:44:42.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.822359
2025-12-31T21:44:42.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T21:44:42.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T21:44:42.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T21:44:42.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T21:44:42.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T21:44:42.366 [DEBUG] [Thread-135157] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:44:42.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T21:44:17', tmtdew=6.25, humidity=66.42, cloud=0.0, wind=17.5, temperature=16.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T21:44:17', seeing=1.59, atlas_timestamp='2025-12-31T19:44:11.818', atlas_cloud=2, atlas_rain=1, zp_data=[1.1577499999999992, 1.0162500000000003, 1.3382500000000004, 0.9594999999999994, nan, nan, nan, nan, 0.6434999999999995, 1.3890000000000002, 1.0722499999999995, 0.9139999999999997, 1.0634999999999994, nan, -0.8480000000000008, -0.5780000000000012, 0.5262499999999992, 0.2505000000000006, 0.5579999999999998, 0.4627499999999998, 0.3644999999999996, 0.47474999999999845, -1.8477499999999996, -1.5672499999999996, 0.3274999999999988, 0.16949999999999932, 0.2682500000000001, 0.3620000000000001, 0.2110000000000003, 0.2240000000000002, -1.9269999999999996, -1.8549999999999986, 0.09074999999999989], zp_timestamp='2025-12-31T19:41:00')
2025-12-31T21:44:42.451 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T21:44:42.462 [DEBUG] [Thread-135161] [transport.py] [_log()] starting thread (client mode): 0xb9593b80
2025-12-31T21:44:42.462 [DEBUG] [Thread-135161] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:44:42.477 [DEBUG] [Thread-135161] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T21:44:42.477 [INFO] [Thread-135161] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T21:44:42.485 [DEBUG] [Thread-135161] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:44:42.485 [DEBUG] [Thread-135161] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T21:44:42.485 [DEBUG] [Thread-135161] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:44:42.485 [DEBUG] [Thread-135161] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:44:42.485 [DEBUG] [Thread-135161] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:44:42.485 [DEBUG] [Thread-135161] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:44:42.485 [DEBUG] [Thread-135161] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:44:42.485 [DEBUG] [Thread-135161] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:44:42.485 [DEBUG] [Thread-135161] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:44:42.485 [DEBUG] [Thread-135161] [transport.py] [_log()] client lang: <none>
2025-12-31T21:44:42.485 [DEBUG] [Thread-135161] [transport.py] [_log()] server lang: <none>
2025-12-31T21:44:42.486 [DEBUG] [Thread-135161] [transport.py] [_log()] kex follows: False
2025-12-31T21:44:42.486 [DEBUG] [Thread-135161] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:44:42.486 [DEBUG] [Thread-135161] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:44:42.486 [DEBUG] [Thread-135161] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:44:42.486 [DEBUG] [Thread-135161] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:44:42.486 [DEBUG] [Thread-135161] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:44:42.486 [DEBUG] [Thread-135161] [transport.py] [_log()] Compression: none
2025-12-31T21:44:42.486 [DEBUG] [Thread-135161] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:44:42.545 [DEBUG] [Thread-135161] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:44:42.545 [DEBUG] [Thread-135161] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:44:42.545 [DEBUG] [Thread-135161] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T21:44:42.545 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T21:44:42.545 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:44:42.601 [DEBUG] [Thread-135161] [transport.py] [_log()] userauth is OK
2025-12-31T21:44:42.601 [DEBUG] [Thread-135161] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:44:42.601 [DEBUG] [Thread-135161] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:44:42.601 [DEBUG] [Thread-135161] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T21:44:42.601 [DEBUG] [Thread-135161] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:44:42.616 [INFO] [Thread-135161] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:44:42.616 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T21:44:42.616 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:44:43.429 [DEBUG] [Thread-135161] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:44:43.430 [DEBUG] [Thread-135161] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:44:43.477 [DEBUG] [Thread-135161] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:44:43.478 [DEBUG] [Thread-135161] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:44:43.487 [DEBUG] [Thread-135161] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:44:43.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:44:43.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T21:44:43.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T21:44:43.515 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:44:43.515 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:44:43.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:44:43.525 [DEBUG] [Thread-135161] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:44:44.777 [DEBUG] [Thread-135163 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:44:57.250 [DEBUG] [Thread-135164 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:45:05.244 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:45:05.245 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:45:12.295 [DEBUG] [Thread-135165 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:45:13.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T21:45:13.546 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T21:45:13.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T21:45:14.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 21, 44, 49), 6.24, 66.45, 0.0, 20.45, 16.38, 0, 0, 0, 2, 0, 0),)
2025-12-31T21:45:14.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 21:44:49
2025-12-31T21:45:14.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T21:45:14.514 [DEBUG] [Thread-135166] [transport.py] [_log()] starting thread (client mode): 0xb957af80
2025-12-31T21:45:14.514 [DEBUG] [Thread-135166] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:45:14.536 [DEBUG] [Thread-135166] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T21:45:14.536 [INFO] [Thread-135166] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T21:45:14.539 [DEBUG] [Thread-135166] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:45:14.539 [DEBUG] [Thread-135166] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T21:45:14.539 [DEBUG] [Thread-135166] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:45:14.539 [DEBUG] [Thread-135166] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:45:14.539 [DEBUG] [Thread-135166] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:45:14.539 [DEBUG] [Thread-135166] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:45:14.539 [DEBUG] [Thread-135166] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:45:14.539 [DEBUG] [Thread-135166] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:45:14.540 [DEBUG] [Thread-135166] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:45:14.540 [DEBUG] [Thread-135166] [transport.py] [_log()] client lang: <none>
2025-12-31T21:45:14.540 [DEBUG] [Thread-135166] [transport.py] [_log()] server lang: <none>
2025-12-31T21:45:14.540 [DEBUG] [Thread-135166] [transport.py] [_log()] kex follows: False
2025-12-31T21:45:14.540 [DEBUG] [Thread-135166] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:45:14.540 [DEBUG] [Thread-135166] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:45:14.540 [DEBUG] [Thread-135166] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:45:14.540 [DEBUG] [Thread-135166] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:45:14.540 [DEBUG] [Thread-135166] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:45:14.540 [DEBUG] [Thread-135166] [transport.py] [_log()] Compression: none
2025-12-31T21:45:14.540 [DEBUG] [Thread-135166] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:45:14.557 [DEBUG] [Thread-135166] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:45:14.557 [DEBUG] [Thread-135166] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:45:14.558 [DEBUG] [Thread-135166] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T21:45:14.558 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T21:45:14.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:45:14.560 [DEBUG] [Thread-135166] [transport.py] [_log()] userauth is OK
2025-12-31T21:45:14.560 [DEBUG] [Thread-135166] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:45:14.560 [DEBUG] [Thread-135166] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:45:14.560 [DEBUG] [Thread-135166] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T21:45:14.560 [DEBUG] [Thread-135166] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:45:14.583 [INFO] [Thread-135166] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:45:14.584 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:45:20.241 [DEBUG] [Thread-135166] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:45:20.241 [DEBUG] [Thread-135166] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:45:20.241 [DEBUG] [Thread-135166] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T21:45:20.282 [DEBUG] [Thread-135166] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:45:20.282 [DEBUG] [Thread-135166] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:45:20.286 [DEBUG] [Thread-135166] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:45:20.351 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:45:20.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T21:45:20.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T21:45:20.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T21:45:20.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:45:20.369 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T21:45:20.369 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:45:20.369 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:45:20.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T21:45:20.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.822707 -999.00  +16.50  18.79     69  +11.00 1 2 1 1 1     0    0 4.84 -40.41 Z.ESW 15.3 18.8 213.2 24.3 17.6 -20.0 17.5 -19.9 17.3 -18.8 17.6 -19.2
2025-12-31T21:45:20.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T21:45:20.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T21:45:20.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.822707
2025-12-31T21:45:20.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T21:45:20.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T21:45:20.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T21:45:20.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T21:45:20.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T21:45:20.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T21:44:49', tmtdew=6.24, humidity=66.45, cloud=0.0, wind=20.45, temperature=16.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T21:44:50', seeing=1.59, atlas_timestamp='2025-12-31T19:44:41.885', atlas_cloud=2, atlas_rain=1, zp_data=[1.1577499999999992, 1.0162500000000003, 1.3382500000000004, 0.9594999999999994, nan, nan, nan, nan, 0.6434999999999995, 1.3890000000000002, 1.0722499999999995, 0.9139999999999997, 1.0634999999999994, nan, -0.8480000000000008, -0.5780000000000012, 0.5262499999999992, 0.2505000000000006, 0.5579999999999998, 0.4627499999999998, 0.3644999999999996, 0.47474999999999845, -1.8477499999999996, -1.5672499999999996, 0.3274999999999988, 0.16949999999999932, 0.2682500000000001, 0.3620000000000001, 0.2110000000000003, 0.2240000000000002, -1.9269999999999996, -1.8549999999999986, 0.09074999999999989], zp_timestamp='2025-12-31T19:43:00')
2025-12-31T21:45:20.372 [DEBUG] [Thread-135166] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:45: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-12-31T21:45:20.464 [DEBUG] [Thread-135169] [transport.py] [_log()] starting thread (client mode): 0xb175b6a0
2025-12-31T21:45:20.464 [DEBUG] [Thread-135169] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:45:20.479 [DEBUG] [Thread-135169] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T21:45:20.479 [INFO] [Thread-135169] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T21:45:20.487 [DEBUG] [Thread-135169] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:45:20.488 [DEBUG] [Thread-135169] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T21:45:20.488 [DEBUG] [Thread-135169] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:45:20.488 [DEBUG] [Thread-135169] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:45:20.488 [DEBUG] [Thread-135169] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:45:20.488 [DEBUG] [Thread-135169] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:45:20.488 [DEBUG] [Thread-135169] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:45:20.488 [DEBUG] [Thread-135169] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:45:20.488 [DEBUG] [Thread-135169] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:45:20.489 [DEBUG] [Thread-135169] [transport.py] [_log()] client lang: <none>
2025-12-31T21:45:20.489 [DEBUG] [Thread-135169] [transport.py] [_log()] server lang: <none>
2025-12-31T21:45:20.489 [DEBUG] [Thread-135169] [transport.py] [_log()] kex follows: False
2025-12-31T21:45:20.489 [DEBUG] [Thread-135169] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:45:20.489 [DEBUG] [Thread-135169] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:45:20.489 [DEBUG] [Thread-135169] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:45:20.489 [DEBUG] [Thread-135169] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:45:20.490 [DEBUG] [Thread-135169] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:45:20.490 [DEBUG] [Thread-135169] [transport.py] [_log()] Compression: none
2025-12-31T21:45:20.490 [DEBUG] [Thread-135169] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:45:20.545 [DEBUG] [Thread-135169] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:45:20.546 [DEBUG] [Thread-135169] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:45:20.546 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T21:45:20.547 [DEBUG] [Thread-135169] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T21:45:20.548 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:45:20.601 [DEBUG] [Thread-135169] [transport.py] [_log()] userauth is OK
2025-12-31T21:45:20.601 [DEBUG] [Thread-135169] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:45:20.602 [DEBUG] [Thread-135169] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:45:20.602 [DEBUG] [Thread-135169] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T21:45:20.602 [DEBUG] [Thread-135169] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:45:20.620 [INFO] [Thread-135169] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:45:20.621 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T21:45:20.621 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:45:21.431 [DEBUG] [Thread-135169] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:45:21.431 [DEBUG] [Thread-135169] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:45:21.479 [DEBUG] [Thread-135169] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:45:21.479 [DEBUG] [Thread-135169] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:45:21.489 [DEBUG] [Thread-135169] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:45:21.498 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:45:21.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T21:45:21.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T21:45:21.517 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:45:21.517 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:45:21.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:45:21.526 [DEBUG] [Thread-135169] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:45:27.325 [DEBUG] [Thread-135171 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:45:42.385 [DEBUG] [Thread-135172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:45:44.852 [DEBUG] [Thread-135173 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:45:51.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T21:45:51.548 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T21:45:51.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T21:45:52.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 21, 45, 22), 6.24, 66.47, 0.0, 19.37, 16.43, 0, 0, 0, 2, 0, 0),)
2025-12-31T21:45:52.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 21:45:22
2025-12-31T21:45:52.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T21:45:52.562 [DEBUG] [Thread-135174] [transport.py] [_log()] starting thread (client mode): 0xb1775090
2025-12-31T21:45:52.562 [DEBUG] [Thread-135174] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:45:52.581 [DEBUG] [Thread-135174] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T21:45:52.581 [INFO] [Thread-135174] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T21:45:52.584 [DEBUG] [Thread-135174] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:45:52.584 [DEBUG] [Thread-135174] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T21:45:52.584 [DEBUG] [Thread-135174] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:45:52.584 [DEBUG] [Thread-135174] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:45:52.584 [DEBUG] [Thread-135174] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:45:52.584 [DEBUG] [Thread-135174] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:45:52.584 [DEBUG] [Thread-135174] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:45:52.584 [DEBUG] [Thread-135174] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:45:52.584 [DEBUG] [Thread-135174] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:45:52.584 [DEBUG] [Thread-135174] [transport.py] [_log()] client lang: <none>
2025-12-31T21:45:52.584 [DEBUG] [Thread-135174] [transport.py] [_log()] server lang: <none>
2025-12-31T21:45:52.584 [DEBUG] [Thread-135174] [transport.py] [_log()] kex follows: False
2025-12-31T21:45:52.585 [DEBUG] [Thread-135174] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:45:52.585 [DEBUG] [Thread-135174] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:45:52.585 [DEBUG] [Thread-135174] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:45:52.585 [DEBUG] [Thread-135174] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:45:52.585 [DEBUG] [Thread-135174] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:45:52.585 [DEBUG] [Thread-135174] [transport.py] [_log()] Compression: none
2025-12-31T21:45:52.585 [DEBUG] [Thread-135174] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:45:52.599 [DEBUG] [Thread-135174] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:45:52.599 [DEBUG] [Thread-135174] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:45:52.600 [DEBUG] [Thread-135174] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T21:45:52.600 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T21:45:52.600 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:45:52.600 [DEBUG] [Thread-135174] [transport.py] [_log()] userauth is OK
2025-12-31T21:45:52.600 [DEBUG] [Thread-135174] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:45:52.600 [DEBUG] [Thread-135174] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:45:52.600 [DEBUG] [Thread-135174] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T21:45:52.600 [DEBUG] [Thread-135174] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:45:52.610 [INFO] [Thread-135174] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:45:52.610 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:45:53.239 [DEBUG] [Thread-135174] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:45:53.240 [DEBUG] [Thread-135174] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:45:53.240 [DEBUG] [Thread-135174] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T21:45:53.281 [DEBUG] [Thread-135174] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:45:53.282 [DEBUG] [Thread-135174] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:45:53.285 [DEBUG] [Thread-135174] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:45:53.298 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:45:53.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T21:45:53.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T21:45:53.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T21:45:53.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:45:53.310 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T21:45:53.310 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:45:53.310 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:45:53.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T21:45:53.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.823054 -999.00  +16.60  11.44     69  +11.00 1 2 1 1 1     0    0 4.72 -41.49 Z.ESW 10.2 11.4 202.1 18.9 17.6 -20.1 17.4 -20.1 17.3 -18.7 17.6 -19.1
2025-12-31T21:45:53.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T21:45:53.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T21:45:53.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.823054
2025-12-31T21:45:53.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T21:45:53.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T21:45:53.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T21:45:53.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T21:45:53.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T21:45:53.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T21:45:22', tmtdew=6.24, humidity=66.47, cloud=0.0, wind=19.37, temperature=16.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T21:45:22', seeing=1.61, atlas_timestamp='2025-12-31T19:45:11.866', atlas_cloud=2, atlas_rain=1, zp_data=[1.1577499999999992, 1.0162500000000003, 1.3382500000000004, 0.9594999999999994, nan, nan, nan, nan, 0.6434999999999995, 1.3890000000000002, 1.0722499999999995, 0.9139999999999997, 1.0634999999999994, nan, -0.8480000000000008, -0.5780000000000012, 0.5262499999999992, 0.2505000000000006, 0.5579999999999998, 0.4627499999999998, 0.3644999999999996, 0.47474999999999845, -1.8477499999999996, -1.5672499999999996, 0.3274999999999988, 0.16949999999999932, 0.2682500000000001, 0.3620000000000001, 0.2110000000000003, 0.2240000000000002, -1.9269999999999996, -1.8549999999999986, 0.09074999999999989], zp_timestamp='2025-12-31T19:43:00')
2025-12-31T21:45:53.313 [DEBUG] [Thread-135174] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:45:53.396 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T21:45:53.410 [DEBUG] [Thread-135177] [transport.py] [_log()] starting thread (client mode): 0xb175be50
2025-12-31T21:45:53.410 [DEBUG] [Thread-135177] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:45:53.425 [DEBUG] [Thread-135177] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T21:45:53.425 [INFO] [Thread-135177] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T21:45:53.433 [DEBUG] [Thread-135177] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:45:53.433 [DEBUG] [Thread-135177] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T21:45:53.433 [DEBUG] [Thread-135177] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:45:53.433 [DEBUG] [Thread-135177] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:45:53.433 [DEBUG] [Thread-135177] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:45:53.433 [DEBUG] [Thread-135177] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:45:53.433 [DEBUG] [Thread-135177] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:45:53.433 [DEBUG] [Thread-135177] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:45:53.433 [DEBUG] [Thread-135177] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:45:53.433 [DEBUG] [Thread-135177] [transport.py] [_log()] client lang: <none>
2025-12-31T21:45:53.433 [DEBUG] [Thread-135177] [transport.py] [_log()] server lang: <none>
2025-12-31T21:45:53.433 [DEBUG] [Thread-135177] [transport.py] [_log()] kex follows: False
2025-12-31T21:45:53.433 [DEBUG] [Thread-135177] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:45:53.433 [DEBUG] [Thread-135177] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:45:53.434 [DEBUG] [Thread-135177] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:45:53.434 [DEBUG] [Thread-135177] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:45:53.434 [DEBUG] [Thread-135177] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:45:53.434 [DEBUG] [Thread-135177] [transport.py] [_log()] Compression: none
2025-12-31T21:45:53.434 [DEBUG] [Thread-135177] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:45:53.493 [DEBUG] [Thread-135177] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:45:53.493 [DEBUG] [Thread-135177] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:45:53.494 [DEBUG] [Thread-135177] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T21:45:53.494 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T21:45:53.495 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:45:53.550 [DEBUG] [Thread-135177] [transport.py] [_log()] userauth is OK
2025-12-31T21:45:53.550 [DEBUG] [Thread-135177] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:45:53.550 [DEBUG] [Thread-135177] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:45:53.550 [DEBUG] [Thread-135177] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T21:45:53.550 [DEBUG] [Thread-135177] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:45:53.565 [INFO] [Thread-135177] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:45:53.565 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T21:45:53.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:45:54.404 [DEBUG] [Thread-135177] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:45:54.404 [DEBUG] [Thread-135177] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:45:54.452 [DEBUG] [Thread-135177] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:45:54.452 [DEBUG] [Thread-135177] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:45:54.461 [DEBUG] [Thread-135177] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:45:54.469 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:45:54.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T21:45:54.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T21:45:54.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:45:54.485 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:45:54.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:45:54.492 [DEBUG] [Thread-135177] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:45:57.420 [DEBUG] [Thread-135179 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:46:05.443 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:46:05.444 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:46:12.482 [DEBUG] [Thread-135180 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:46:24.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T21:46:24.512 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T21:46:24.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T21:46:25.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 21, 45, 54), 6.25, 66.44, 0.0, 22.46, 16.43, 0, 0, 0, 2, 0, 0),)
2025-12-31T21:46:25.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 21:45:54
2025-12-31T21:46:25.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T21:46:25.541 [DEBUG] [Thread-135181] [transport.py] [_log()] starting thread (client mode): 0xb1785000
2025-12-31T21:46:25.541 [DEBUG] [Thread-135181] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:46:25.561 [DEBUG] [Thread-135181] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T21:46:25.561 [INFO] [Thread-135181] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T21:46:25.563 [DEBUG] [Thread-135181] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:46:25.563 [DEBUG] [Thread-135181] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T21:46:25.563 [DEBUG] [Thread-135181] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:46:25.563 [DEBUG] [Thread-135181] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:46:25.563 [DEBUG] [Thread-135181] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:46:25.563 [DEBUG] [Thread-135181] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:46:25.563 [DEBUG] [Thread-135181] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:46:25.563 [DEBUG] [Thread-135181] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:46:25.563 [DEBUG] [Thread-135181] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:46:25.564 [DEBUG] [Thread-135181] [transport.py] [_log()] client lang: <none>
2025-12-31T21:46:25.564 [DEBUG] [Thread-135181] [transport.py] [_log()] server lang: <none>
2025-12-31T21:46:25.564 [DEBUG] [Thread-135181] [transport.py] [_log()] kex follows: False
2025-12-31T21:46:25.564 [DEBUG] [Thread-135181] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:46:25.564 [DEBUG] [Thread-135181] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:46:25.564 [DEBUG] [Thread-135181] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:46:25.564 [DEBUG] [Thread-135181] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:46:25.564 [DEBUG] [Thread-135181] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:46:25.564 [DEBUG] [Thread-135181] [transport.py] [_log()] Compression: none
2025-12-31T21:46:25.564 [DEBUG] [Thread-135181] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:46:25.571 [DEBUG] [Thread-135181] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:46:25.571 [DEBUG] [Thread-135181] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:46:25.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T21:46:25.571 [DEBUG] [Thread-135181] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T21:46:25.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:46:25.572 [DEBUG] [Thread-135181] [transport.py] [_log()] userauth is OK
2025-12-31T21:46:25.572 [DEBUG] [Thread-135181] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:46:25.572 [DEBUG] [Thread-135181] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:46:25.572 [DEBUG] [Thread-135181] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T21:46:25.572 [DEBUG] [Thread-135181] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:46:25.581 [INFO] [Thread-135181] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:46:25.581 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:46:26.199 [DEBUG] [Thread-135181] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:46:26.199 [DEBUG] [Thread-135181] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:46:26.199 [DEBUG] [Thread-135181] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T21:46:26.240 [DEBUG] [Thread-135181] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:46:26.240 [DEBUG] [Thread-135181] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:46:26.243 [DEBUG] [Thread-135181] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:46:26.255 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:46:26.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T21:46:26.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T21:46:26.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T21:46:26.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:46:26.259 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T21:46:26.259 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:46:26.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:46:26.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T21:46:26.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.823401 -999.00  +16.60   6.21     69  +11.00 1 2 1 1 1     0    0 4.54 -43.93 Z.ESW 9.3 6.2 222.9 18.0 17.6 -20.0 17.4 -20.0 17.3 -18.7 17.6 -19.0
2025-12-31T21:46:26.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T21:46:26.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T21:46:26.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.823401
2025-12-31T21:46:26.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T21:46:26.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T21:46:26.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T21:46:26.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T21:46:26.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T21:46:26.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T21:45:54', tmtdew=6.25, humidity=66.44, cloud=0.0, wind=22.46, temperature=16.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T21:45:54', seeing=1.66, atlas_timestamp='2025-12-31T19:45:41.846', atlas_cloud=2, atlas_rain=1, zp_data=[1.1577499999999992, 1.0162500000000003, 1.3382500000000004, 0.9594999999999994, nan, nan, nan, nan, 0.6434999999999995, 1.3890000000000002, 1.0722499999999995, 0.9139999999999997, 1.0634999999999994, nan, -0.8480000000000008, -0.5780000000000012, 0.5262499999999992, 0.2505000000000006, 0.5579999999999998, 0.4627499999999998, 0.3644999999999996, 0.47474999999999845, -1.8477499999999996, -1.5672499999999996, 0.3274999999999988, 0.16949999999999932, 0.2682500000000001, 0.3620000000000001, 0.2110000000000003, 0.2240000000000002, -1.9269999999999996, -1.8549999999999986, 0.09074999999999989], zp_timestamp='2025-12-31T19:43:00')
2025-12-31T21:46:26.260 [DEBUG] [Thread-135181] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:46:26.335 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T21:46:26.345 [DEBUG] [Thread-135184] [transport.py] [_log()] starting thread (client mode): 0xb6bbd240
2025-12-31T21:46:26.346 [DEBUG] [Thread-135184] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:46:26.360 [DEBUG] [Thread-135184] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T21:46:26.360 [INFO] [Thread-135184] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T21:46:26.367 [DEBUG] [Thread-135184] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:46:26.367 [DEBUG] [Thread-135184] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T21:46:26.368 [DEBUG] [Thread-135184] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:46:26.368 [DEBUG] [Thread-135184] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:46:26.368 [DEBUG] [Thread-135184] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:46:26.368 [DEBUG] [Thread-135184] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:46:26.368 [DEBUG] [Thread-135184] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:46:26.368 [DEBUG] [Thread-135184] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:46:26.368 [DEBUG] [Thread-135184] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:46:26.368 [DEBUG] [Thread-135184] [transport.py] [_log()] client lang: <none>
2025-12-31T21:46:26.368 [DEBUG] [Thread-135184] [transport.py] [_log()] server lang: <none>
2025-12-31T21:46:26.368 [DEBUG] [Thread-135184] [transport.py] [_log()] kex follows: False
2025-12-31T21:46:26.368 [DEBUG] [Thread-135184] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:46:26.368 [DEBUG] [Thread-135184] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:46:26.368 [DEBUG] [Thread-135184] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:46:26.368 [DEBUG] [Thread-135184] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:46:26.368 [DEBUG] [Thread-135184] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:46:26.368 [DEBUG] [Thread-135184] [transport.py] [_log()] Compression: none
2025-12-31T21:46:26.368 [DEBUG] [Thread-135184] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:46:26.424 [DEBUG] [Thread-135184] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:46:26.424 [DEBUG] [Thread-135184] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:46:26.424 [DEBUG] [Thread-135184] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T21:46:26.424 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T21:46:26.424 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:46:26.480 [DEBUG] [Thread-135184] [transport.py] [_log()] userauth is OK
2025-12-31T21:46:26.480 [DEBUG] [Thread-135184] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:46:26.480 [DEBUG] [Thread-135184] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:46:26.480 [DEBUG] [Thread-135184] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T21:46:26.480 [DEBUG] [Thread-135184] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:46:26.495 [INFO] [Thread-135184] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:46:26.495 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T21:46:26.495 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:46:27.336 [DEBUG] [Thread-135184] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:46:27.336 [DEBUG] [Thread-135184] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:46:27.384 [DEBUG] [Thread-135184] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:46:27.384 [DEBUG] [Thread-135184] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:46:27.392 [DEBUG] [Thread-135184] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:46:27.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:46:27.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T21:46:27.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T21:46:27.419 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:46:27.419 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:46:27.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:46:27.426 [DEBUG] [Thread-135184] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:46:27.517 [DEBUG] [Thread-135186 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:46:42.558 [DEBUG] [Thread-135187 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:46:44.936 [DEBUG] [Thread-135188 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:46:57.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T21:46:57.427 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T21:46:57.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T21:46:57.602 [DEBUG] [Thread-135189 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:46:58.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 21, 46, 26), 6.25, 66.42, 0.0, 23.56, 16.43, 0, 0, 0, 2, 0, 0),)
2025-12-31T21:46:58.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 21:46:26
2025-12-31T21:46:58.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T21:46:58.401 [DEBUG] [Thread-135190] [transport.py] [_log()] starting thread (client mode): 0xb6bbac50
2025-12-31T21:46:58.401 [DEBUG] [Thread-135190] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:46:58.422 [DEBUG] [Thread-135190] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T21:46:58.423 [INFO] [Thread-135190] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T21:46:58.426 [DEBUG] [Thread-135190] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:46:58.426 [DEBUG] [Thread-135190] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T21:46:58.426 [DEBUG] [Thread-135190] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:46:58.426 [DEBUG] [Thread-135190] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:46:58.426 [DEBUG] [Thread-135190] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:46:58.426 [DEBUG] [Thread-135190] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:46:58.426 [DEBUG] [Thread-135190] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:46:58.426 [DEBUG] [Thread-135190] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:46:58.426 [DEBUG] [Thread-135190] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:46:58.426 [DEBUG] [Thread-135190] [transport.py] [_log()] client lang: <none>
2025-12-31T21:46:58.426 [DEBUG] [Thread-135190] [transport.py] [_log()] server lang: <none>
2025-12-31T21:46:58.426 [DEBUG] [Thread-135190] [transport.py] [_log()] kex follows: False
2025-12-31T21:46:58.427 [DEBUG] [Thread-135190] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:46:58.427 [DEBUG] [Thread-135190] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:46:58.427 [DEBUG] [Thread-135190] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:46:58.427 [DEBUG] [Thread-135190] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:46:58.427 [DEBUG] [Thread-135190] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:46:58.427 [DEBUG] [Thread-135190] [transport.py] [_log()] Compression: none
2025-12-31T21:46:58.427 [DEBUG] [Thread-135190] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:46:58.445 [DEBUG] [Thread-135190] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:46:58.446 [DEBUG] [Thread-135190] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:46:58.447 [DEBUG] [Thread-135190] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T21:46:58.448 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T21:46:58.448 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:46:58.449 [DEBUG] [Thread-135190] [transport.py] [_log()] userauth is OK
2025-12-31T21:46:58.450 [DEBUG] [Thread-135190] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:46:58.450 [DEBUG] [Thread-135190] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:46:58.450 [DEBUG] [Thread-135190] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T21:46:58.450 [DEBUG] [Thread-135190] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:46:58.485 [INFO] [Thread-135190] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:46:58.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:46:59.139 [DEBUG] [Thread-135190] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:46:59.139 [DEBUG] [Thread-135190] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:46:59.140 [DEBUG] [Thread-135190] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T21:46:59.180 [DEBUG] [Thread-135190] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:46:59.180 [DEBUG] [Thread-135190] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:46:59.183 [DEBUG] [Thread-135190] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:46:59.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:46:59.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T21:46:59.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T21:46:59.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T21:46:59.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:46:59.200 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T21:46:59.200 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:46:59.200 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:46:59.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T21:46:59.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.824096 -999.00  +16.60  15.60     69  +11.10 1 2 1 1 1     0    0 4.71 -40.41 ZnESW 8.8 15.6 204.2 26.1 17.6 -20.4 17.4 -20.0 17.2 -18.9 17.6 -19.4
2025-12-31T21:46:59.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T21:46:59.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T21:46:59.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.824096
2025-12-31T21:46:59.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T21:46:59.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T21:46:59.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T21:46:59.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T21:46:59.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T21:46:59.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T21:46:26', tmtdew=6.25, humidity=66.42, cloud=0.0, wind=23.56, temperature=16.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T21:46:26', seeing=1.48, atlas_timestamp='2025-12-31T19:46:41.894', atlas_cloud=2, atlas_rain=1, zp_data=[1.1577499999999992, 1.0162500000000003, 1.3382500000000004, 0.9594999999999994, nan, nan, nan, nan, 0.6434999999999995, 1.3890000000000002, 1.0722499999999995, 0.9139999999999997, 1.0634999999999994, nan, -0.8480000000000008, -0.5780000000000012, 0.5262499999999992, 0.2505000000000006, 0.5579999999999998, 0.4627499999999998, 0.3644999999999996, 0.47474999999999845, -1.8477499999999996, -1.5672499999999996, 0.3274999999999988, 0.16949999999999932, 0.2682500000000001, 0.3620000000000001, 0.2110000000000003, 0.2240000000000002, -1.9269999999999996, -1.8549999999999986, 0.09074999999999989], zp_timestamp='2025-12-31T19:43:00')
2025-12-31T21:46:59.201 [DEBUG] [Thread-135190] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:46:59.275 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T21:46:59.287 [DEBUG] [Thread-135193] [transport.py] [_log()] starting thread (client mode): 0xb95d69b0
2025-12-31T21:46:59.287 [DEBUG] [Thread-135193] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:46:59.303 [DEBUG] [Thread-135193] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T21:46:59.303 [INFO] [Thread-135193] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T21:46:59.311 [DEBUG] [Thread-135193] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:46:59.311 [DEBUG] [Thread-135193] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T21:46:59.311 [DEBUG] [Thread-135193] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:46:59.311 [DEBUG] [Thread-135193] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:46:59.311 [DEBUG] [Thread-135193] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:46:59.311 [DEBUG] [Thread-135193] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:46:59.311 [DEBUG] [Thread-135193] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:46:59.311 [DEBUG] [Thread-135193] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:46:59.311 [DEBUG] [Thread-135193] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:46:59.311 [DEBUG] [Thread-135193] [transport.py] [_log()] client lang: <none>
2025-12-31T21:46:59.311 [DEBUG] [Thread-135193] [transport.py] [_log()] server lang: <none>
2025-12-31T21:46:59.311 [DEBUG] [Thread-135193] [transport.py] [_log()] kex follows: False
2025-12-31T21:46:59.311 [DEBUG] [Thread-135193] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:46:59.311 [DEBUG] [Thread-135193] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:46:59.311 [DEBUG] [Thread-135193] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:46:59.311 [DEBUG] [Thread-135193] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:46:59.311 [DEBUG] [Thread-135193] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:46:59.311 [DEBUG] [Thread-135193] [transport.py] [_log()] Compression: none
2025-12-31T21:46:59.311 [DEBUG] [Thread-135193] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:46:59.367 [DEBUG] [Thread-135193] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:46:59.368 [DEBUG] [Thread-135193] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:46:59.368 [DEBUG] [Thread-135193] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T21:46:59.368 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T21:46:59.368 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:46:59.424 [DEBUG] [Thread-135193] [transport.py] [_log()] userauth is OK
2025-12-31T21:46:59.424 [DEBUG] [Thread-135193] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:46:59.424 [DEBUG] [Thread-135193] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:46:59.424 [DEBUG] [Thread-135193] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T21:46:59.425 [DEBUG] [Thread-135193] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:46:59.440 [INFO] [Thread-135193] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:46:59.440 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T21:46:59.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:47:00.291 [DEBUG] [Thread-135193] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:47:00.291 [DEBUG] [Thread-135193] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:47:00.339 [DEBUG] [Thread-135193] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:47:00.340 [DEBUG] [Thread-135193] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:47:00.348 [DEBUG] [Thread-135193] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:47:00.356 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:47:00.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T21:47:00.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T21:47:00.372 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:47:00.372 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:47:00.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:47:00.380 [DEBUG] [Thread-135193] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:47:05.643 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:47:05.644 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:47:12.631 [DEBUG] [Thread-135195 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:47:27.694 [DEBUG] [Thread-135196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:47:30.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T21:47:30.390 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T21:47:30.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T21:47:31.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 21, 46, 58), 6.23, 66.5, 0.0, 19.92, 16.45, 0, 0, 0, 2, 0, 0),)
2025-12-31T21:47:31.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 21:46:58
2025-12-31T21:47:31.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T21:47:31.368 [DEBUG] [Thread-135197] [transport.py] [_log()] starting thread (client mode): 0xb1765ff0
2025-12-31T21:47:31.368 [DEBUG] [Thread-135197] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:47:31.388 [DEBUG] [Thread-135197] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T21:47:31.388 [INFO] [Thread-135197] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T21:47:31.392 [DEBUG] [Thread-135197] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:47:31.392 [DEBUG] [Thread-135197] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T21:47:31.392 [DEBUG] [Thread-135197] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:47:31.392 [DEBUG] [Thread-135197] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:47:31.392 [DEBUG] [Thread-135197] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:47:31.392 [DEBUG] [Thread-135197] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:47:31.392 [DEBUG] [Thread-135197] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:47:31.392 [DEBUG] [Thread-135197] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:47:31.392 [DEBUG] [Thread-135197] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:47:31.392 [DEBUG] [Thread-135197] [transport.py] [_log()] client lang: <none>
2025-12-31T21:47:31.392 [DEBUG] [Thread-135197] [transport.py] [_log()] server lang: <none>
2025-12-31T21:47:31.392 [DEBUG] [Thread-135197] [transport.py] [_log()] kex follows: False
2025-12-31T21:47:31.392 [DEBUG] [Thread-135197] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:47:31.392 [DEBUG] [Thread-135197] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:47:31.392 [DEBUG] [Thread-135197] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:47:31.392 [DEBUG] [Thread-135197] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:47:31.392 [DEBUG] [Thread-135197] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:47:31.392 [DEBUG] [Thread-135197] [transport.py] [_log()] Compression: none
2025-12-31T21:47:31.392 [DEBUG] [Thread-135197] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:47:31.407 [DEBUG] [Thread-135197] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:47:31.407 [DEBUG] [Thread-135197] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:47:31.407 [DEBUG] [Thread-135197] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T21:47:31.407 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T21:47:31.407 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:47:31.408 [DEBUG] [Thread-135197] [transport.py] [_log()] userauth is OK
2025-12-31T21:47:31.408 [DEBUG] [Thread-135197] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:47:31.408 [DEBUG] [Thread-135197] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:47:31.408 [DEBUG] [Thread-135197] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T21:47:31.408 [DEBUG] [Thread-135197] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:47:31.421 [INFO] [Thread-135197] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:47:31.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:47:32.058 [DEBUG] [Thread-135197] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:47:32.058 [DEBUG] [Thread-135197] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:47:32.058 [DEBUG] [Thread-135197] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T21:47:32.099 [DEBUG] [Thread-135197] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:47:32.100 [DEBUG] [Thread-135197] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:47:32.102 [DEBUG] [Thread-135197] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:47:32.115 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:47:32.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T21:47:32.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T21:47:32.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T21:47:32.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:47:32.121 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T21:47:32.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:47:32.121 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:47:32.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T21:47:32.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.824443 -999.00  +16.50  15.79     70  +11.00 1 1 1 1 1     0    0 4.68 -40.67 ZNESW 13.3 15.8 202.0 21.9 17.6 -20.3 17.4 -19.9 17.2 -18.7 17.6 -19.2
2025-12-31T21:47:32.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T21:47:32.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T21:47:32.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.824443
2025-12-31T21:47:32.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T21:47:32.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T21:47:32.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T21:47:32.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T21:47:32.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T21:47:32.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T21:46:58', tmtdew=6.23, humidity=66.5, cloud=0.0, wind=19.92, temperature=16.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T21:46:59', seeing=1.67, atlas_timestamp='2025-12-31T19:47:11.875', atlas_cloud=1, atlas_rain=1, zp_data=[1.1577499999999992, 1.0162500000000003, 1.3382500000000004, 0.9594999999999994, nan, nan, nan, nan, 0.6434999999999995, 1.3890000000000002, 1.0722499999999995, 0.9139999999999997, 1.0634999999999994, nan, -0.8480000000000008, -0.5780000000000012, 0.5262499999999992, 0.2505000000000006, 0.5579999999999998, 0.4627499999999998, 0.3644999999999996, 0.47474999999999845, -1.8477499999999996, -1.5672499999999996, 0.3274999999999988, 0.16949999999999932, 0.2682500000000001, 0.3620000000000001, 0.2110000000000003, 0.2240000000000002, -1.9269999999999996, -1.8549999999999986, 0.09074999999999989], zp_timestamp='2025-12-31T19:43:00')
2025-12-31T21:47:32.122 [DEBUG] [Thread-135197] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:47:32.196 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T21:47:32.207 [DEBUG] [Thread-135200] [transport.py] [_log()] starting thread (client mode): 0xb1794970
2025-12-31T21:47:32.207 [DEBUG] [Thread-135200] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:47:32.221 [DEBUG] [Thread-135200] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T21:47:32.222 [INFO] [Thread-135200] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T21:47:32.229 [DEBUG] [Thread-135200] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:47:32.229 [DEBUG] [Thread-135200] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T21:47:32.229 [DEBUG] [Thread-135200] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:47:32.229 [DEBUG] [Thread-135200] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:47:32.229 [DEBUG] [Thread-135200] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:47:32.229 [DEBUG] [Thread-135200] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:47:32.229 [DEBUG] [Thread-135200] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:47:32.229 [DEBUG] [Thread-135200] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:47:32.229 [DEBUG] [Thread-135200] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:47:32.229 [DEBUG] [Thread-135200] [transport.py] [_log()] client lang: <none>
2025-12-31T21:47:32.229 [DEBUG] [Thread-135200] [transport.py] [_log()] server lang: <none>
2025-12-31T21:47:32.229 [DEBUG] [Thread-135200] [transport.py] [_log()] kex follows: False
2025-12-31T21:47:32.229 [DEBUG] [Thread-135200] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:47:32.229 [DEBUG] [Thread-135200] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:47:32.229 [DEBUG] [Thread-135200] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:47:32.229 [DEBUG] [Thread-135200] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:47:32.229 [DEBUG] [Thread-135200] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:47:32.229 [DEBUG] [Thread-135200] [transport.py] [_log()] Compression: none
2025-12-31T21:47:32.229 [DEBUG] [Thread-135200] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:47:32.287 [DEBUG] [Thread-135200] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:47:32.287 [DEBUG] [Thread-135200] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:47:32.287 [DEBUG] [Thread-135200] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T21:47:32.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T21:47:32.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:47:32.344 [DEBUG] [Thread-135200] [transport.py] [_log()] userauth is OK
2025-12-31T21:47:32.344 [DEBUG] [Thread-135200] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:47:32.344 [DEBUG] [Thread-135200] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:47:32.345 [DEBUG] [Thread-135200] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T21:47:32.345 [DEBUG] [Thread-135200] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:47:32.358 [INFO] [Thread-135200] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:47:32.359 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T21:47:32.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:47:33.216 [DEBUG] [Thread-135200] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:47:33.216 [DEBUG] [Thread-135200] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:47:33.264 [DEBUG] [Thread-135200] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:47:33.264 [DEBUG] [Thread-135200] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:47:33.273 [DEBUG] [Thread-135200] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:47:33.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:47:33.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T21:47:33.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T21:47:33.300 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:47:33.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:47:33.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:47:33.309 [DEBUG] [Thread-135200] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:47:42.732 [DEBUG] [Thread-135202 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:47:45.004 [DEBUG] [Thread-135203 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:47:57.780 [DEBUG] [Thread-135204 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:48:03.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T21:48:03.331 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T21:48:03.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T21:48:04.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 21, 47, 30), 6.22, 66.57, 0.0, 18.9, 16.4, 0, 0, 0, 2, 0, 0),)
2025-12-31T21:48:04.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 21:47:30
2025-12-31T21:48:04.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T21:48:04.384 [DEBUG] [Thread-135205] [transport.py] [_log()] starting thread (client mode): 0xb17589a0
2025-12-31T21:48:04.384 [DEBUG] [Thread-135205] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:48:04.404 [DEBUG] [Thread-135205] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T21:48:04.405 [INFO] [Thread-135205] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T21:48:04.408 [DEBUG] [Thread-135205] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:48:04.408 [DEBUG] [Thread-135205] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T21:48:04.408 [DEBUG] [Thread-135205] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:48:04.408 [DEBUG] [Thread-135205] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:48:04.408 [DEBUG] [Thread-135205] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:48:04.408 [DEBUG] [Thread-135205] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:48:04.408 [DEBUG] [Thread-135205] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:48:04.408 [DEBUG] [Thread-135205] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:48:04.408 [DEBUG] [Thread-135205] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:48:04.408 [DEBUG] [Thread-135205] [transport.py] [_log()] client lang: <none>
2025-12-31T21:48:04.408 [DEBUG] [Thread-135205] [transport.py] [_log()] server lang: <none>
2025-12-31T21:48:04.408 [DEBUG] [Thread-135205] [transport.py] [_log()] kex follows: False
2025-12-31T21:48:04.408 [DEBUG] [Thread-135205] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:48:04.408 [DEBUG] [Thread-135205] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:48:04.408 [DEBUG] [Thread-135205] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:48:04.408 [DEBUG] [Thread-135205] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:48:04.408 [DEBUG] [Thread-135205] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:48:04.408 [DEBUG] [Thread-135205] [transport.py] [_log()] Compression: none
2025-12-31T21:48:04.408 [DEBUG] [Thread-135205] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:48:04.415 [DEBUG] [Thread-135205] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:48:04.415 [DEBUG] [Thread-135205] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:48:04.415 [DEBUG] [Thread-135205] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T21:48:04.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T21:48:04.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:48:04.416 [DEBUG] [Thread-135205] [transport.py] [_log()] userauth is OK
2025-12-31T21:48:04.416 [DEBUG] [Thread-135205] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:48:04.416 [DEBUG] [Thread-135205] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:48:04.416 [DEBUG] [Thread-135205] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T21:48:04.416 [DEBUG] [Thread-135205] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:48:04.442 [INFO] [Thread-135205] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:48:04.442 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:48:05.073 [DEBUG] [Thread-135205] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:48:05.073 [DEBUG] [Thread-135205] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:48:05.073 [DEBUG] [Thread-135205] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T21:48:05.113 [DEBUG] [Thread-135205] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:48:05.113 [DEBUG] [Thread-135205] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:48:05.116 [DEBUG] [Thread-135205] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:48:05.128 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:48:05.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T21:48:05.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T21:48:05.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T21:48:05.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:48:05.134 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T21:48:05.134 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:48:05.134 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:48:05.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T21:48:05.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.824790 -999.00  +16.50  16.86     70  +11.00 1 1 1 1 1     0    0 4.55 -44.52 ZNESW 14.0 16.9 203.6 18.2 -999.0 -999.0 17.4 -19.8 17.2 -18.6 17.5 -19.3
2025-12-31T21:48:05.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T21:48:05.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T21:48:05.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.824790
2025-12-31T21:48:05.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T21:48:05.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T21:48:05.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T21:48:05.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T21:48:05.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T21:48:05.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T21:47:30', tmtdew=6.22, humidity=66.57, cloud=0.0, wind=18.9, temperature=16.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T21:48:03', seeing=1.53, atlas_timestamp='2025-12-31T19:47:41.856', atlas_cloud=1, atlas_rain=1, zp_data=[0.03774999999999906, 0.17774999999999963, 0.19725000000000037, 0.09149999999999991, 0.08650000000000091, 0.08725000000000094, 0.16249999999999964, 0.23275000000000112, 0.16999999999999815, 0.24099999999999966, 0.15424999999999933, 0.022999999999999687, 0.09999999999999964, 0.11374999999999957, -0.2789999999999999, -0.3420000000000005, 0.395249999999999, 0.238999999999999, 0.1120000000000001, 0.03125, 0.11349999999999838, 0.0382499999999979, -1.3447499999999994, -1.4212500000000006, 0.03200000000000003, 0.27749999999999986, 0.19475000000000087, 0.24799999999999933, 0.30400000000000027, 0.16300000000000026, -1.8824999999999985, -1.9189999999999987, -0.41625000000000156], zp_timestamp='2025-12-31T19:46:00')
2025-12-31T21:48:05.135 [DEBUG] [Thread-135205] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:48:05.207 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T21:48:05.219 [DEBUG] [Thread-135208] [transport.py] [_log()] starting thread (client mode): 0xb1795930
2025-12-31T21:48:05.219 [DEBUG] [Thread-135208] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:48:05.236 [DEBUG] [Thread-135208] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T21:48:05.236 [INFO] [Thread-135208] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T21:48:05.243 [DEBUG] [Thread-135208] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:48:05.243 [DEBUG] [Thread-135208] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T21:48:05.243 [DEBUG] [Thread-135208] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:48:05.243 [DEBUG] [Thread-135208] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:48:05.243 [DEBUG] [Thread-135208] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:48:05.243 [DEBUG] [Thread-135208] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:48:05.243 [DEBUG] [Thread-135208] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:48:05.243 [DEBUG] [Thread-135208] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:48:05.243 [DEBUG] [Thread-135208] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:48:05.243 [DEBUG] [Thread-135208] [transport.py] [_log()] client lang: <none>
2025-12-31T21:48:05.243 [DEBUG] [Thread-135208] [transport.py] [_log()] server lang: <none>
2025-12-31T21:48:05.244 [DEBUG] [Thread-135208] [transport.py] [_log()] kex follows: False
2025-12-31T21:48:05.244 [DEBUG] [Thread-135208] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:48:05.244 [DEBUG] [Thread-135208] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:48:05.244 [DEBUG] [Thread-135208] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:48:05.244 [DEBUG] [Thread-135208] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:48:05.244 [DEBUG] [Thread-135208] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:48:05.244 [DEBUG] [Thread-135208] [transport.py] [_log()] Compression: none
2025-12-31T21:48:05.244 [DEBUG] [Thread-135208] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:48:05.305 [DEBUG] [Thread-135208] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:48:05.305 [DEBUG] [Thread-135208] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:48:05.306 [DEBUG] [Thread-135208] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T21:48:05.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T21:48:05.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:48:05.364 [DEBUG] [Thread-135208] [transport.py] [_log()] userauth is OK
2025-12-31T21:48:05.364 [DEBUG] [Thread-135208] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:48:05.364 [DEBUG] [Thread-135208] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:48:05.364 [DEBUG] [Thread-135208] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T21:48:05.364 [DEBUG] [Thread-135208] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:48:05.384 [INFO] [Thread-135208] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:48:05.385 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T21:48:05.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:48:05.845 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:48:05.846 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:48:06.257 [DEBUG] [Thread-135208] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:48:06.258 [DEBUG] [Thread-135208] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:48:06.306 [DEBUG] [Thread-135208] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:48:06.306 [DEBUG] [Thread-135208] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:48:06.315 [DEBUG] [Thread-135208] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:48:06.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:48:06.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T21:48:06.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T21:48:06.343 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:48:06.344 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:48:06.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:48:06.352 [DEBUG] [Thread-135208] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:48:12.818 [DEBUG] [Thread-135210 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:48:27.877 [DEBUG] [Thread-135211 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:48:36.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T21:48:36.374 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T21:48:36.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T21:48:37.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 21, 48, 2), 6.22, 66.57, 0.0, 23.13, 16.45, 0, 0, 0, 2, 0, 0),)
2025-12-31T21:48:37.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 21:48:02
2025-12-31T21:48:37.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T21:48:37.418 [DEBUG] [Thread-135212] [transport.py] [_log()] starting thread (client mode): 0xb6bbcd60
2025-12-31T21:48:37.418 [DEBUG] [Thread-135212] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:48:37.437 [DEBUG] [Thread-135212] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T21:48:37.437 [INFO] [Thread-135212] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T21:48:37.441 [DEBUG] [Thread-135212] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:48:37.441 [DEBUG] [Thread-135212] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T21:48:37.441 [DEBUG] [Thread-135212] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:48:37.441 [DEBUG] [Thread-135212] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:48:37.441 [DEBUG] [Thread-135212] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:48:37.441 [DEBUG] [Thread-135212] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:48:37.441 [DEBUG] [Thread-135212] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:48:37.441 [DEBUG] [Thread-135212] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:48:37.441 [DEBUG] [Thread-135212] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:48:37.441 [DEBUG] [Thread-135212] [transport.py] [_log()] client lang: <none>
2025-12-31T21:48:37.441 [DEBUG] [Thread-135212] [transport.py] [_log()] server lang: <none>
2025-12-31T21:48:37.441 [DEBUG] [Thread-135212] [transport.py] [_log()] kex follows: False
2025-12-31T21:48:37.441 [DEBUG] [Thread-135212] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:48:37.441 [DEBUG] [Thread-135212] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:48:37.441 [DEBUG] [Thread-135212] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:48:37.441 [DEBUG] [Thread-135212] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:48:37.441 [DEBUG] [Thread-135212] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:48:37.441 [DEBUG] [Thread-135212] [transport.py] [_log()] Compression: none
2025-12-31T21:48:37.441 [DEBUG] [Thread-135212] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:48:37.449 [DEBUG] [Thread-135212] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:48:37.449 [DEBUG] [Thread-135212] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:48:37.450 [DEBUG] [Thread-135212] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T21:48:37.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T21:48:37.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:48:37.451 [DEBUG] [Thread-135212] [transport.py] [_log()] userauth is OK
2025-12-31T21:48:37.451 [DEBUG] [Thread-135212] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:48:37.451 [DEBUG] [Thread-135212] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:48:37.451 [DEBUG] [Thread-135212] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T21:48:37.452 [DEBUG] [Thread-135212] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:48:37.468 [INFO] [Thread-135212] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:48:37.469 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:48:38.097 [DEBUG] [Thread-135212] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:48:38.097 [DEBUG] [Thread-135212] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:48:38.097 [DEBUG] [Thread-135212] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T21:48:38.137 [DEBUG] [Thread-135212] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:48:38.138 [DEBUG] [Thread-135212] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:48:38.140 [DEBUG] [Thread-135212] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:48:38.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:48:38.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T21:48:38.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T21:48:38.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T21:48:38.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:48:38.162 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T21:48:38.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:48:38.163 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:48:38.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T21:48:38.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.825137 -999.00  +16.60   8.68     69  +11.00 1 1 1 1 1     0    0 4.57 -44.50 ZNESW 7.6 8.7 201.0 14.2 17.5 -20.1 17.4 -19.8 17.2 -18.6 17.5 -18.9
2025-12-31T21:48:38.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T21:48:38.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T21:48:38.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.825137
2025-12-31T21:48:38.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T21:48:38.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T21:48:38.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T21:48:38.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T21:48:38.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T21:48:38.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T21:48:02', tmtdew=6.22, humidity=66.57, cloud=0.0, wind=23.13, temperature=16.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T21:48:35', seeing=1.46, atlas_timestamp='2025-12-31T19:48:11.837', atlas_cloud=1, atlas_rain=1, zp_data=[0.03774999999999906, 0.17774999999999963, 0.19725000000000037, 0.09149999999999991, 0.08650000000000091, 0.08725000000000094, 0.16249999999999964, 0.23275000000000112, 0.16999999999999815, 0.24099999999999966, 0.15424999999999933, 0.022999999999999687, 0.09999999999999964, 0.11374999999999957, -0.2789999999999999, -0.3420000000000005, 0.395249999999999, 0.238999999999999, 0.1120000000000001, 0.03125, 0.11349999999999838, 0.0382499999999979, -1.3447499999999994, -1.4212500000000006, 0.03200000000000003, 0.27749999999999986, 0.19475000000000087, 0.24799999999999933, 0.30400000000000027, 0.16300000000000026, -1.8824999999999985, -1.9189999999999987, -0.41625000000000156], zp_timestamp='2025-12-31T19:46:00')
2025-12-31T21:48:38.165 [DEBUG] [Thread-135212] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:48:38.256 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T21:48:38.266 [DEBUG] [Thread-135215] [transport.py] [_log()] starting thread (client mode): 0xb95d48b0
2025-12-31T21:48:38.267 [DEBUG] [Thread-135215] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:48:38.281 [DEBUG] [Thread-135215] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T21:48:38.282 [INFO] [Thread-135215] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T21:48:38.289 [DEBUG] [Thread-135215] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:48:38.289 [DEBUG] [Thread-135215] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T21:48:38.289 [DEBUG] [Thread-135215] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:48:38.289 [DEBUG] [Thread-135215] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:48:38.290 [DEBUG] [Thread-135215] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:48:38.290 [DEBUG] [Thread-135215] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:48:38.290 [DEBUG] [Thread-135215] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:48:38.290 [DEBUG] [Thread-135215] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:48:38.290 [DEBUG] [Thread-135215] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:48:38.290 [DEBUG] [Thread-135215] [transport.py] [_log()] client lang: <none>
2025-12-31T21:48:38.290 [DEBUG] [Thread-135215] [transport.py] [_log()] server lang: <none>
2025-12-31T21:48:38.290 [DEBUG] [Thread-135215] [transport.py] [_log()] kex follows: False
2025-12-31T21:48:38.290 [DEBUG] [Thread-135215] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:48:38.290 [DEBUG] [Thread-135215] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:48:38.290 [DEBUG] [Thread-135215] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:48:38.290 [DEBUG] [Thread-135215] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:48:38.290 [DEBUG] [Thread-135215] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:48:38.291 [DEBUG] [Thread-135215] [transport.py] [_log()] Compression: none
2025-12-31T21:48:38.291 [DEBUG] [Thread-135215] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:48:38.347 [DEBUG] [Thread-135215] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:48:38.348 [DEBUG] [Thread-135215] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:48:38.348 [DEBUG] [Thread-135215] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T21:48:38.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T21:48:38.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:48:38.404 [DEBUG] [Thread-135215] [transport.py] [_log()] userauth is OK
2025-12-31T21:48:38.405 [DEBUG] [Thread-135215] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:48:38.405 [DEBUG] [Thread-135215] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:48:38.405 [DEBUG] [Thread-135215] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T21:48:38.405 [DEBUG] [Thread-135215] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:48:38.426 [INFO] [Thread-135215] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:48:38.426 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T21:48:38.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:48:39.222 [DEBUG] [Thread-135215] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:48:39.223 [DEBUG] [Thread-135215] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:48:39.274 [DEBUG] [Thread-135215] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:48:39.274 [DEBUG] [Thread-135215] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:48:39.283 [DEBUG] [Thread-135215] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:48:39.292 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:48:39.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T21:48:39.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T21:48:39.309 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:48:39.309 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:48:39.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:48:39.317 [DEBUG] [Thread-135215] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:48:42.908 [DEBUG] [Thread-135217 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:48:45.081 [DEBUG] [Thread-135218 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:48:57.967 [DEBUG] [Thread-135219 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:49:06.046 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:49:06.047 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:49:09.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T21:49:09.340 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T21:49:09.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T21:49:10.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 21, 48, 34), 6.07, 67.27, 0.0, 20.71, 16.37, 0, 0, 0, 2, 0, 0),)
2025-12-31T21:49:10.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 21:48:34
2025-12-31T21:49:10.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T21:49:10.335 [DEBUG] [Thread-135220] [transport.py] [_log()] starting thread (client mode): 0xb1784370
2025-12-31T21:49:10.336 [DEBUG] [Thread-135220] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:49:10.356 [DEBUG] [Thread-135220] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T21:49:10.356 [INFO] [Thread-135220] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T21:49:10.357 [DEBUG] [Thread-135220] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:49:10.358 [DEBUG] [Thread-135220] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T21:49:10.358 [DEBUG] [Thread-135220] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:49:10.358 [DEBUG] [Thread-135220] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:49:10.358 [DEBUG] [Thread-135220] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:49:10.358 [DEBUG] [Thread-135220] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:49:10.358 [DEBUG] [Thread-135220] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:49:10.358 [DEBUG] [Thread-135220] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:49:10.358 [DEBUG] [Thread-135220] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:49:10.358 [DEBUG] [Thread-135220] [transport.py] [_log()] client lang: <none>
2025-12-31T21:49:10.358 [DEBUG] [Thread-135220] [transport.py] [_log()] server lang: <none>
2025-12-31T21:49:10.358 [DEBUG] [Thread-135220] [transport.py] [_log()] kex follows: False
2025-12-31T21:49:10.358 [DEBUG] [Thread-135220] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:49:10.358 [DEBUG] [Thread-135220] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:49:10.358 [DEBUG] [Thread-135220] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:49:10.358 [DEBUG] [Thread-135220] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:49:10.358 [DEBUG] [Thread-135220] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:49:10.358 [DEBUG] [Thread-135220] [transport.py] [_log()] Compression: none
2025-12-31T21:49:10.358 [DEBUG] [Thread-135220] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:49:10.367 [DEBUG] [Thread-135220] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:49:10.367 [DEBUG] [Thread-135220] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:49:10.367 [DEBUG] [Thread-135220] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T21:49:10.368 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T21:49:10.368 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:49:10.369 [DEBUG] [Thread-135220] [transport.py] [_log()] userauth is OK
2025-12-31T21:49:10.369 [DEBUG] [Thread-135220] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:49:10.369 [DEBUG] [Thread-135220] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:49:10.369 [DEBUG] [Thread-135220] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T21:49:10.369 [DEBUG] [Thread-135220] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:49:10.387 [INFO] [Thread-135220] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:49:10.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:49:10.969 [DEBUG] [Thread-135220] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:49:10.970 [DEBUG] [Thread-135220] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:49:10.970 [DEBUG] [Thread-135220] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T21:49:11.011 [DEBUG] [Thread-135220] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:49:11.011 [DEBUG] [Thread-135220] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:49:11.015 [DEBUG] [Thread-135220] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:49:11.024 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:49:11.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T21:49:11.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T21:49:11.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T21:49:11.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:49:11.038 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T21:49:11.038 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:49:11.038 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:49:11.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T21:49:11.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.825484 -999.00  +16.60  12.87     69  +11.10 1 2 1 1 1     0    0 4.33 -43.94 ZnESW 13.7 12.9 189.3 16.7 17.6 -20.1 17.4 -20.1 17.2 -18.6 17.6 -19.2
2025-12-31T21:49:11.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T21:49:11.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T21:49:11.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.825484
2025-12-31T21:49:11.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T21:49:11.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T21:49:11.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T21:49:11.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T21:49:11.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T21:49:11.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T21:48:34', tmtdew=6.07, humidity=67.27, cloud=0.0, wind=20.71, temperature=16.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T21:49:07', seeing=1.4, atlas_timestamp='2025-12-31T19:48:41.818', atlas_cloud=2, atlas_rain=1, zp_data=[0.03774999999999906, 0.17774999999999963, 0.19725000000000037, 0.09149999999999991, 0.08650000000000091, 0.08725000000000094, 0.16249999999999964, 0.23275000000000112, 0.16999999999999815, 0.24099999999999966, 0.15424999999999933, 0.022999999999999687, 0.09999999999999964, 0.11374999999999957, -0.2789999999999999, -0.3420000000000005, 0.395249999999999, 0.238999999999999, 0.1120000000000001, 0.03125, 0.11349999999999838, 0.0382499999999979, -1.3447499999999994, -1.4212500000000006, 0.03200000000000003, 0.27749999999999986, 0.19475000000000087, 0.24799999999999933, 0.30400000000000027, 0.16300000000000026, -1.8824999999999985, -1.9189999999999987, -0.41625000000000156], zp_timestamp='2025-12-31T19:46:00')
2025-12-31T21:49:11.040 [DEBUG] [Thread-135220] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:49:11.129 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T21:49:11.142 [DEBUG] [Thread-135223] [transport.py] [_log()] starting thread (client mode): 0xb1796ce0
2025-12-31T21:49:11.142 [DEBUG] [Thread-135223] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:49:11.162 [DEBUG] [Thread-135223] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T21:49:11.162 [INFO] [Thread-135223] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T21:49:11.170 [DEBUG] [Thread-135223] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:49:11.170 [DEBUG] [Thread-135223] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T21:49:11.170 [DEBUG] [Thread-135223] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:49:11.171 [DEBUG] [Thread-135223] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:49:11.171 [DEBUG] [Thread-135223] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:49:11.171 [DEBUG] [Thread-135223] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:49:11.171 [DEBUG] [Thread-135223] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:49:11.171 [DEBUG] [Thread-135223] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:49:11.171 [DEBUG] [Thread-135223] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:49:11.171 [DEBUG] [Thread-135223] [transport.py] [_log()] client lang: <none>
2025-12-31T21:49:11.171 [DEBUG] [Thread-135223] [transport.py] [_log()] server lang: <none>
2025-12-31T21:49:11.171 [DEBUG] [Thread-135223] [transport.py] [_log()] kex follows: False
2025-12-31T21:49:11.171 [DEBUG] [Thread-135223] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:49:11.171 [DEBUG] [Thread-135223] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:49:11.171 [DEBUG] [Thread-135223] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:49:11.171 [DEBUG] [Thread-135223] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:49:11.171 [DEBUG] [Thread-135223] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:49:11.172 [DEBUG] [Thread-135223] [transport.py] [_log()] Compression: none
2025-12-31T21:49:11.172 [DEBUG] [Thread-135223] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:49:11.229 [DEBUG] [Thread-135223] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:49:11.230 [DEBUG] [Thread-135223] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:49:11.231 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T21:49:11.231 [DEBUG] [Thread-135223] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T21:49:11.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:49:11.285 [DEBUG] [Thread-135223] [transport.py] [_log()] userauth is OK
2025-12-31T21:49:11.285 [DEBUG] [Thread-135223] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:49:11.285 [DEBUG] [Thread-135223] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:49:11.285 [DEBUG] [Thread-135223] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T21:49:11.286 [DEBUG] [Thread-135223] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:49:11.305 [INFO] [Thread-135223] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:49:11.305 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T21:49:11.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:49:12.129 [DEBUG] [Thread-135223] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:49:12.129 [DEBUG] [Thread-135223] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:49:12.177 [DEBUG] [Thread-135223] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:49:12.177 [DEBUG] [Thread-135223] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:49:12.186 [DEBUG] [Thread-135223] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:49:12.195 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:49:12.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T21:49:12.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T21:49:12.216 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:49:12.216 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:49:12.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:49:12.225 [DEBUG] [Thread-135223] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:49:12.997 [DEBUG] [Thread-135225 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:49:28.050 [DEBUG] [Thread-135226 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:49:42.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T21:49:42.247 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T21:49: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-12-31T21:49:42.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 21, 49, 38), 6.0, 67.58, 0.0, 21.31, 16.32, 0, 0, 0, 2, 0, 0),)
2025-12-31T21:49:42.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 21:49:38
2025-12-31T21:49:43.085 [DEBUG] [Thread-135227 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:49:43.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T21:49:43.289 [DEBUG] [Thread-135228] [transport.py] [_log()] starting thread (client mode): 0xb957af80
2025-12-31T21:49:43.289 [DEBUG] [Thread-135228] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:49:43.306 [DEBUG] [Thread-135228] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T21:49:43.306 [INFO] [Thread-135228] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T21:49:43.307 [DEBUG] [Thread-135228] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:49:43.307 [DEBUG] [Thread-135228] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T21:49:43.307 [DEBUG] [Thread-135228] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:49:43.307 [DEBUG] [Thread-135228] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:49:43.307 [DEBUG] [Thread-135228] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:49:43.307 [DEBUG] [Thread-135228] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:49:43.307 [DEBUG] [Thread-135228] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:49:43.307 [DEBUG] [Thread-135228] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:49:43.307 [DEBUG] [Thread-135228] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:49:43.307 [DEBUG] [Thread-135228] [transport.py] [_log()] client lang: <none>
2025-12-31T21:49:43.307 [DEBUG] [Thread-135228] [transport.py] [_log()] server lang: <none>
2025-12-31T21:49:43.307 [DEBUG] [Thread-135228] [transport.py] [_log()] kex follows: False
2025-12-31T21:49:43.307 [DEBUG] [Thread-135228] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:49:43.307 [DEBUG] [Thread-135228] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:49:43.307 [DEBUG] [Thread-135228] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:49:43.307 [DEBUG] [Thread-135228] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:49:43.307 [DEBUG] [Thread-135228] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:49:43.307 [DEBUG] [Thread-135228] [transport.py] [_log()] Compression: none
2025-12-31T21:49:43.307 [DEBUG] [Thread-135228] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:49:43.314 [DEBUG] [Thread-135228] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:49:43.314 [DEBUG] [Thread-135228] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:49:43.314 [DEBUG] [Thread-135228] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T21:49:43.315 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T21:49:43.315 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:49:43.315 [DEBUG] [Thread-135228] [transport.py] [_log()] userauth is OK
2025-12-31T21:49:43.315 [DEBUG] [Thread-135228] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:49:43.315 [DEBUG] [Thread-135228] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:49:43.315 [DEBUG] [Thread-135228] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T21:49:43.315 [DEBUG] [Thread-135228] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:49:43.325 [INFO] [Thread-135228] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:49:43.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:49:43.934 [DEBUG] [Thread-135228] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:49:43.934 [DEBUG] [Thread-135228] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:49:43.934 [DEBUG] [Thread-135228] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T21:49:43.976 [DEBUG] [Thread-135228] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:49:43.976 [DEBUG] [Thread-135228] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:49:43.978 [DEBUG] [Thread-135228] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:49:43.984 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:49:43.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T21:49:43.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T21:49:43.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T21:49:43.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:49:43.990 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T21:49:43.990 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:49:43.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:49:43.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T21:49:43.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.825832 -999.00  +16.50  11.77     70  +11.10 1 2 1 1 1     0    0 4.47 -44.74 ZnESW 18.5 11.8 194.7 24.8 17.5 -20.4 17.3 -20.5 17.2 -18.6 17.5 -19.3
2025-12-31T21:49:43.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T21:49:43.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T21:49:43.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.825832
2025-12-31T21:49:43.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T21:49:43.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T21:49:43.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T21:49:43.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T21:49:43.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T21:49:43.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T21:49:38', tmtdew=6.0, humidity=67.58, cloud=0.0, wind=21.31, temperature=16.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T21:49:39', seeing=1.37, atlas_timestamp='2025-12-31T19:49:11.885', atlas_cloud=2, atlas_rain=1, zp_data=[0.03774999999999906, 0.17774999999999963, 0.19725000000000037, 0.09149999999999991, 0.08650000000000091, 0.08725000000000094, 0.16249999999999964, 0.23275000000000112, 0.16999999999999815, 0.24099999999999966, 0.15424999999999933, 0.022999999999999687, 0.09999999999999964, 0.11374999999999957, -0.2789999999999999, -0.3420000000000005, 0.395249999999999, 0.238999999999999, 0.1120000000000001, 0.03125, 0.11349999999999838, 0.0382499999999979, -1.3447499999999994, -1.4212500000000006, 0.03200000000000003, 0.27749999999999986, 0.19475000000000087, 0.24799999999999933, 0.30400000000000027, 0.16300000000000026, -1.8824999999999985, -1.9189999999999987, -0.41625000000000156], zp_timestamp='2025-12-31T19:46:00')
2025-12-31T21:49:43.992 [DEBUG] [Thread-135228] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:49:44.066 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T21:49:44.076 [DEBUG] [Thread-135231] [transport.py] [_log()] starting thread (client mode): 0xb1797a90
2025-12-31T21:49:44.076 [DEBUG] [Thread-135231] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:49:44.091 [DEBUG] [Thread-135231] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T21:49:44.091 [INFO] [Thread-135231] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T21:49:44.098 [DEBUG] [Thread-135231] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:49:44.098 [DEBUG] [Thread-135231] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T21:49:44.098 [DEBUG] [Thread-135231] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:49:44.098 [DEBUG] [Thread-135231] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:49:44.098 [DEBUG] [Thread-135231] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:49:44.098 [DEBUG] [Thread-135231] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:49:44.099 [DEBUG] [Thread-135231] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:49:44.099 [DEBUG] [Thread-135231] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:49:44.099 [DEBUG] [Thread-135231] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:49:44.099 [DEBUG] [Thread-135231] [transport.py] [_log()] client lang: <none>
2025-12-31T21:49:44.099 [DEBUG] [Thread-135231] [transport.py] [_log()] server lang: <none>
2025-12-31T21:49:44.099 [DEBUG] [Thread-135231] [transport.py] [_log()] kex follows: False
2025-12-31T21:49:44.099 [DEBUG] [Thread-135231] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:49:44.099 [DEBUG] [Thread-135231] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:49:44.099 [DEBUG] [Thread-135231] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:49:44.099 [DEBUG] [Thread-135231] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:49:44.099 [DEBUG] [Thread-135231] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:49:44.099 [DEBUG] [Thread-135231] [transport.py] [_log()] Compression: none
2025-12-31T21:49:44.099 [DEBUG] [Thread-135231] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:49:44.155 [DEBUG] [Thread-135231] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:49:44.155 [DEBUG] [Thread-135231] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:49:44.156 [DEBUG] [Thread-135231] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T21:49:44.156 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T21:49:44.156 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:49:44.213 [DEBUG] [Thread-135231] [transport.py] [_log()] userauth is OK
2025-12-31T21:49:44.213 [DEBUG] [Thread-135231] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:49:44.213 [DEBUG] [Thread-135231] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:49:44.213 [DEBUG] [Thread-135231] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T21:49:44.213 [DEBUG] [Thread-135231] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:49:44.228 [INFO] [Thread-135231] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:49:44.228 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T21:49:44.228 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:49:45.028 [DEBUG] [Thread-135231] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:49:45.028 [DEBUG] [Thread-135231] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:49:45.076 [DEBUG] [Thread-135231] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:49:45.076 [DEBUG] [Thread-135231] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:49:45.084 [DEBUG] [Thread-135231] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:49:45.092 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:49: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-12-31T21:49: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-12-31T21:49:45.108 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:49:45.108 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:49:45.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:49:45.116 [DEBUG] [Thread-135231] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:49:45.156 [DEBUG] [Thread-135233 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:49:58.120 [DEBUG] [Thread-135234 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:50:06.253 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:50:06.254 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:50:13.166 [DEBUG] [Thread-135235 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:50:15.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T21:50:15.139 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T21:50:15.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T21:50:15.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 21, 50, 11), 6.0, 67.6, 0.0, 17.35, 16.3, 0, 0, 0, 2, 0, 0),)
2025-12-31T21:50:15.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 21:50:11
2025-12-31T21:50:15.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T21:50:16.147 [DEBUG] [Thread-135236] [transport.py] [_log()] starting thread (client mode): 0xb1797940
2025-12-31T21:50:16.147 [DEBUG] [Thread-135236] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:50:16.163 [DEBUG] [Thread-135236] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T21:50:16.163 [INFO] [Thread-135236] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T21:50:16.164 [DEBUG] [Thread-135236] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:50:16.164 [DEBUG] [Thread-135236] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T21:50:16.164 [DEBUG] [Thread-135236] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:50:16.164 [DEBUG] [Thread-135236] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:50:16.164 [DEBUG] [Thread-135236] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:50:16.164 [DEBUG] [Thread-135236] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:50:16.164 [DEBUG] [Thread-135236] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:50:16.164 [DEBUG] [Thread-135236] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:50:16.164 [DEBUG] [Thread-135236] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:50:16.164 [DEBUG] [Thread-135236] [transport.py] [_log()] client lang: <none>
2025-12-31T21:50:16.164 [DEBUG] [Thread-135236] [transport.py] [_log()] server lang: <none>
2025-12-31T21:50:16.164 [DEBUG] [Thread-135236] [transport.py] [_log()] kex follows: False
2025-12-31T21:50:16.164 [DEBUG] [Thread-135236] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:50:16.164 [DEBUG] [Thread-135236] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:50:16.164 [DEBUG] [Thread-135236] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:50:16.164 [DEBUG] [Thread-135236] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:50:16.165 [DEBUG] [Thread-135236] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:50:16.165 [DEBUG] [Thread-135236] [transport.py] [_log()] Compression: none
2025-12-31T21:50:16.165 [DEBUG] [Thread-135236] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:50:16.173 [DEBUG] [Thread-135236] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:50:16.173 [DEBUG] [Thread-135236] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:50:16.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T21:50:16.174 [DEBUG] [Thread-135236] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T21:50:16.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:50:16.175 [DEBUG] [Thread-135236] [transport.py] [_log()] userauth is OK
2025-12-31T21:50:16.176 [DEBUG] [Thread-135236] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:50:16.176 [DEBUG] [Thread-135236] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:50:16.176 [DEBUG] [Thread-135236] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T21:50:16.176 [DEBUG] [Thread-135236] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:50:16.201 [INFO] [Thread-135236] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:50:16.202 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:50:16.733 [DEBUG] [Thread-135236] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:50:16.733 [DEBUG] [Thread-135236] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:50:16.734 [DEBUG] [Thread-135236] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T21:50:16.773 [DEBUG] [Thread-135236] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:50:16.774 [DEBUG] [Thread-135236] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:50:16.777 [DEBUG] [Thread-135236] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:50:16.789 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:50:16.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T21:50:16.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T21:50:16.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T21:50:16.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:50:16.799 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T21:50:16.800 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:50:16.800 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:50:16.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T21:50:16.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.826526 -999.00  +16.40  18.99     71  +11.10 1 2 1 1 1     0    0 4.56 -46.04 ZNESw 21.4 19.0 198.6 24.9 17.4 -20.3 17.3 -20.5 17.1 -18.5 17.4 -19.3
2025-12-31T21:50:16.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T21:50:16.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T21:50:16.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.826526
2025-12-31T21:50:16.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T21:50:16.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T21:50:16.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T21:50:16.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T21:50:16.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T21:50:16.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T21:50:11', tmtdew=6.0, humidity=67.6, cloud=0.0, wind=17.35, temperature=16.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T21:50:11', seeing=1.37, atlas_timestamp='2025-12-31T19:50:11.846', atlas_cloud=2, atlas_rain=1, zp_data=[0.03774999999999906, 0.17774999999999963, 0.19725000000000037, 0.09149999999999991, 0.08650000000000091, 0.08725000000000094, 0.16249999999999964, 0.23275000000000112, 0.16999999999999815, 0.24099999999999966, 0.15424999999999933, 0.022999999999999687, 0.09999999999999964, 0.11374999999999957, -0.2789999999999999, -0.3420000000000005, 0.395249999999999, 0.238999999999999, 0.1120000000000001, 0.03125, 0.11349999999999838, 0.0382499999999979, -1.3447499999999994, -1.4212500000000006, 0.03200000000000003, 0.27749999999999986, 0.19475000000000087, 0.24799999999999933, 0.30400000000000027, 0.16300000000000026, -1.8824999999999985, -1.9189999999999987, -0.41625000000000156], zp_timestamp='2025-12-31T19:46:00')
2025-12-31T21:50:16.802 [DEBUG] [Thread-135236] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:50:16.884 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T21:50:16.895 [DEBUG] [Thread-135239] [transport.py] [_log()] starting thread (client mode): 0xb1785870
2025-12-31T21:50:16.895 [DEBUG] [Thread-135239] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:50:16.909 [DEBUG] [Thread-135239] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T21:50:16.910 [INFO] [Thread-135239] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T21:50:16.917 [DEBUG] [Thread-135239] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:50:16.917 [DEBUG] [Thread-135239] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T21:50:16.917 [DEBUG] [Thread-135239] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:50:16.917 [DEBUG] [Thread-135239] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:50:16.917 [DEBUG] [Thread-135239] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:50:16.917 [DEBUG] [Thread-135239] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:50:16.917 [DEBUG] [Thread-135239] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:50:16.918 [DEBUG] [Thread-135239] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:50:16.918 [DEBUG] [Thread-135239] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:50:16.918 [DEBUG] [Thread-135239] [transport.py] [_log()] client lang: <none>
2025-12-31T21:50:16.918 [DEBUG] [Thread-135239] [transport.py] [_log()] server lang: <none>
2025-12-31T21:50:16.918 [DEBUG] [Thread-135239] [transport.py] [_log()] kex follows: False
2025-12-31T21:50:16.918 [DEBUG] [Thread-135239] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:50:16.918 [DEBUG] [Thread-135239] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:50:16.918 [DEBUG] [Thread-135239] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:50:16.918 [DEBUG] [Thread-135239] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:50:16.919 [DEBUG] [Thread-135239] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:50:16.919 [DEBUG] [Thread-135239] [transport.py] [_log()] Compression: none
2025-12-31T21:50:16.919 [DEBUG] [Thread-135239] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:50:16.980 [DEBUG] [Thread-135239] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:50:16.981 [DEBUG] [Thread-135239] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:50:16.982 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T21:50:16.982 [DEBUG] [Thread-135239] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T21:50:16.983 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:50:17.041 [DEBUG] [Thread-135239] [transport.py] [_log()] userauth is OK
2025-12-31T21:50:17.041 [DEBUG] [Thread-135239] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:50:17.042 [DEBUG] [Thread-135239] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:50:17.042 [DEBUG] [Thread-135239] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T21:50:17.042 [DEBUG] [Thread-135239] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:50:17.060 [INFO] [Thread-135239] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:50:17.061 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T21:50:17.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:50:17.919 [DEBUG] [Thread-135239] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:50:17.920 [DEBUG] [Thread-135239] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:50:17.967 [DEBUG] [Thread-135239] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:50:17.968 [DEBUG] [Thread-135239] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:50:17.976 [DEBUG] [Thread-135239] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:50:17.987 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:50:17.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T21:50:17.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T21:50:18.010 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:50:18.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:50:18.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:50:18.020 [DEBUG] [Thread-135239] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:50:28.192 [DEBUG] [Thread-135241 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:50:43.247 [DEBUG] [Thread-135242 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:50:45.217 [DEBUG] [Thread-135243 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:50:48.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T21:50:48.021 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T21:50:48.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T21:50:48.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 21, 50, 43), 5.94, 68.15, 0.0, 20.1, 16.28, 0, 0, 0, 2, 0, 0),)
2025-12-31T21:50:48.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 21:50:43
2025-12-31T21:50:48.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T21:50:49.015 [DEBUG] [Thread-135244] [transport.py] [_log()] starting thread (client mode): 0xb1785b40
2025-12-31T21:50:49.016 [DEBUG] [Thread-135244] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:50:49.036 [DEBUG] [Thread-135244] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T21:50:49.037 [INFO] [Thread-135244] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T21:50:49.040 [DEBUG] [Thread-135244] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:50:49.040 [DEBUG] [Thread-135244] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T21:50:49.040 [DEBUG] [Thread-135244] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:50:49.040 [DEBUG] [Thread-135244] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:50:49.040 [DEBUG] [Thread-135244] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:50:49.040 [DEBUG] [Thread-135244] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:50:49.040 [DEBUG] [Thread-135244] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:50:49.040 [DEBUG] [Thread-135244] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:50:49.040 [DEBUG] [Thread-135244] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:50:49.040 [DEBUG] [Thread-135244] [transport.py] [_log()] client lang: <none>
2025-12-31T21:50:49.040 [DEBUG] [Thread-135244] [transport.py] [_log()] server lang: <none>
2025-12-31T21:50:49.040 [DEBUG] [Thread-135244] [transport.py] [_log()] kex follows: False
2025-12-31T21:50:49.041 [DEBUG] [Thread-135244] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:50:49.041 [DEBUG] [Thread-135244] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:50:49.041 [DEBUG] [Thread-135244] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:50:49.041 [DEBUG] [Thread-135244] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:50:49.041 [DEBUG] [Thread-135244] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:50:49.041 [DEBUG] [Thread-135244] [transport.py] [_log()] Compression: none
2025-12-31T21:50:49.041 [DEBUG] [Thread-135244] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:50:49.060 [DEBUG] [Thread-135244] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:50:49.060 [DEBUG] [Thread-135244] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:50:49.061 [DEBUG] [Thread-135244] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T21:50:49.061 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T21:50:49.062 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:50:49.063 [DEBUG] [Thread-135244] [transport.py] [_log()] userauth is OK
2025-12-31T21:50:49.063 [DEBUG] [Thread-135244] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:50:49.063 [DEBUG] [Thread-135244] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:50:49.063 [DEBUG] [Thread-135244] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T21:50:49.063 [DEBUG] [Thread-135244] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:50:49.081 [INFO] [Thread-135244] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:50:49.081 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:50:49.702 [DEBUG] [Thread-135244] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:50:49.702 [DEBUG] [Thread-135244] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:50:49.702 [DEBUG] [Thread-135244] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T21:50:49.743 [DEBUG] [Thread-135244] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:50:49.743 [DEBUG] [Thread-135244] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:50:49.747 [DEBUG] [Thread-135244] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:50:49.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:50:49.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T21:50:49.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T21:50:49.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T21:50:49.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:50:49.774 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T21:50:49.774 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:50:49.774 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:50:49.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T21:50:49.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.826526 -999.00  +16.40  18.99     71  +11.10 1 2 1 1 1     0    0 4.56 -46.04 ZNESw 21.4 19.0 198.6 24.9 17.4 -20.3 17.3 -20.5 17.1 -18.5 17.4 -19.3
2025-12-31T21:50:49.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T21:50:49.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T21:50:49.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.826526
2025-12-31T21:50:49.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T21:50:49.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T21:50:49.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T21:50:49.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T21:50:49.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T21:50:49.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T21:50:43', tmtdew=5.94, humidity=68.15, cloud=0.0, wind=20.1, temperature=16.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T21:50:43', seeing=1.66, atlas_timestamp='2025-12-31T19:50:11.846', atlas_cloud=2, atlas_rain=1, zp_data=[0.02925000000000111, 0.09675000000000011, 0.03974999999999973, 0.1454999999999984, 0.19849999999999923, 0.08025000000000126, 0.1379999999999999, 0.09825000000000017, 0.0389999999999997, 0.07000000000000028, 0.12824999999999953, 0.3260000000000005, 0.37899999999999956, 0.07824999999999882, -0.004999999999999005, 0.05799999999999983, 0.07975000000000065, 0.14550000000000018, 0.19649999999999856, 0.4052499999999988, 0.4184999999999981, 0.10224999999999795, -0.6167499999999997, -0.47325000000000017, 0.10099999999999909, 0.0965000000000007, 0.23525000000000063, -0.9484999999999992, 0.2699999999999996, 0.2635000000000014, -1.597999999999999, -1.5254999999999992, 0.13074999999999903], zp_timestamp='2025-12-31T19:49:00')
2025-12-31T21:50:49.776 [DEBUG] [Thread-135244] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:50:49.857 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T21:50:49.868 [DEBUG] [Thread-135247] [transport.py] [_log()] starting thread (client mode): 0xb17845e0
2025-12-31T21:50:49.869 [DEBUG] [Thread-135247] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:50:49.883 [DEBUG] [Thread-135247] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T21:50:49.883 [INFO] [Thread-135247] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T21:50:49.891 [DEBUG] [Thread-135247] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:50:49.891 [DEBUG] [Thread-135247] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T21:50:49.891 [DEBUG] [Thread-135247] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:50:49.891 [DEBUG] [Thread-135247] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:50:49.892 [DEBUG] [Thread-135247] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:50:49.892 [DEBUG] [Thread-135247] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:50:49.892 [DEBUG] [Thread-135247] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:50:49.892 [DEBUG] [Thread-135247] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:50:49.892 [DEBUG] [Thread-135247] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:50:49.892 [DEBUG] [Thread-135247] [transport.py] [_log()] client lang: <none>
2025-12-31T21:50:49.892 [DEBUG] [Thread-135247] [transport.py] [_log()] server lang: <none>
2025-12-31T21:50:49.892 [DEBUG] [Thread-135247] [transport.py] [_log()] kex follows: False
2025-12-31T21:50:49.892 [DEBUG] [Thread-135247] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:50:49.892 [DEBUG] [Thread-135247] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:50:49.893 [DEBUG] [Thread-135247] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:50:49.893 [DEBUG] [Thread-135247] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:50:49.893 [DEBUG] [Thread-135247] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:50:49.893 [DEBUG] [Thread-135247] [transport.py] [_log()] Compression: none
2025-12-31T21:50:49.893 [DEBUG] [Thread-135247] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:50:49.949 [DEBUG] [Thread-135247] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:50:49.950 [DEBUG] [Thread-135247] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:50:49.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T21:50:49.951 [DEBUG] [Thread-135247] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T21:50:49.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:50:50.005 [DEBUG] [Thread-135247] [transport.py] [_log()] userauth is OK
2025-12-31T21:50:50.006 [DEBUG] [Thread-135247] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:50:50.006 [DEBUG] [Thread-135247] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:50:50.006 [DEBUG] [Thread-135247] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T21:50:50.006 [DEBUG] [Thread-135247] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:50:50.025 [INFO] [Thread-135247] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:50: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-12-31T21:50:50.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:50:50.838 [DEBUG] [Thread-135247] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:50:50.838 [DEBUG] [Thread-135247] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:50:50.887 [DEBUG] [Thread-135247] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:50:50.887 [DEBUG] [Thread-135247] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:50:50.896 [DEBUG] [Thread-135247] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:50:50.905 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:50:50.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T21:50:50.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T21:50:50.924 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:50:50.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:50:50.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:50:50.933 [DEBUG] [Thread-135247] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:50:58.278 [DEBUG] [Thread-135249 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:51:06.456 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:51:06.457 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:51:13.327 [DEBUG] [Thread-135250 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:51:20.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T21:51:20.950 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T21:51:20.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T21:51:21.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 21, 51, 15), 5.92, 68.2, 0.0, 21.81, 16.25, 0, 0, 0, 2, 0, 0),)
2025-12-31T21:51:21.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 21:51:15
2025-12-31T21:51:21.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T21:51:21.944 [DEBUG] [Thread-135251] [transport.py] [_log()] starting thread (client mode): 0xb1795ea0
2025-12-31T21:51:21.944 [DEBUG] [Thread-135251] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:51:21.964 [DEBUG] [Thread-135251] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T21:51:21.964 [INFO] [Thread-135251] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T21:51:21.967 [DEBUG] [Thread-135251] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:51:21.967 [DEBUG] [Thread-135251] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T21:51:21.967 [DEBUG] [Thread-135251] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:51:21.967 [DEBUG] [Thread-135251] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:51:21.967 [DEBUG] [Thread-135251] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:51:21.967 [DEBUG] [Thread-135251] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:51:21.967 [DEBUG] [Thread-135251] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:51:21.967 [DEBUG] [Thread-135251] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:51:21.967 [DEBUG] [Thread-135251] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:51:21.967 [DEBUG] [Thread-135251] [transport.py] [_log()] client lang: <none>
2025-12-31T21:51:21.967 [DEBUG] [Thread-135251] [transport.py] [_log()] server lang: <none>
2025-12-31T21:51:21.967 [DEBUG] [Thread-135251] [transport.py] [_log()] kex follows: False
2025-12-31T21:51:21.967 [DEBUG] [Thread-135251] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:51:21.967 [DEBUG] [Thread-135251] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:51:21.967 [DEBUG] [Thread-135251] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:51:21.967 [DEBUG] [Thread-135251] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:51:21.967 [DEBUG] [Thread-135251] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:51:21.968 [DEBUG] [Thread-135251] [transport.py] [_log()] Compression: none
2025-12-31T21:51:21.968 [DEBUG] [Thread-135251] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:51:21.977 [DEBUG] [Thread-135251] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:51:21.978 [DEBUG] [Thread-135251] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:51:21.979 [DEBUG] [Thread-135251] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T21:51:21.979 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T21:51:21.979 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:51:22.021 [DEBUG] [Thread-135251] [transport.py] [_log()] userauth is OK
2025-12-31T21:51:22.021 [DEBUG] [Thread-135251] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:51:22.022 [DEBUG] [Thread-135251] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:51:22.022 [DEBUG] [Thread-135251] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T21:51:22.022 [DEBUG] [Thread-135251] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:51:22.042 [INFO] [Thread-135251] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:51:22.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:51:22.722 [DEBUG] [Thread-135251] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:51:22.723 [DEBUG] [Thread-135251] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:51:22.723 [DEBUG] [Thread-135251] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T21:51:22.765 [DEBUG] [Thread-135251] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:51:22.765 [DEBUG] [Thread-135251] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:51:22.769 [DEBUG] [Thread-135251] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:51:22.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:51:22.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T21:51:22.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T21:51:22.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T21:51:22.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:51:22.793 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T21:51:22.793 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:51:22.793 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:51:22.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T21:51:22.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.826873 -999.00  +16.30  10.34     71  +11.10 1 2 1 1 1     0    0 4.47 -46.40 ZNESw 10.0 10.3 210.5 24.8 17.5 -20.5 17.3 -19.7 17.1 -18.3 17.4 -19.3
2025-12-31T21:51:22.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T21:51:22.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T21:51:22.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.826873
2025-12-31T21:51:22.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T21:51:22.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T21:51:22.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T21:51:22.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T21:51:22.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T21:51:22.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T21:51:15', tmtdew=5.92, humidity=68.2, cloud=0.0, wind=21.81, temperature=16.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T21:51:15', seeing=1.41, atlas_timestamp='2025-12-31T19:50:41.827', atlas_cloud=2, atlas_rain=1, zp_data=[0.02925000000000111, 0.09675000000000011, 0.03974999999999973, 0.1454999999999984, 0.19849999999999923, 0.08025000000000126, 0.1379999999999999, 0.09825000000000017, 0.0389999999999997, 0.07000000000000028, 0.12824999999999953, 0.3260000000000005, 0.37899999999999956, 0.07824999999999882, -0.004999999999999005, 0.05799999999999983, 0.07975000000000065, 0.14550000000000018, 0.19649999999999856, 0.4052499999999988, 0.4184999999999981, 0.10224999999999795, -0.6167499999999997, -0.47325000000000017, 0.10099999999999909, 0.0965000000000007, 0.23525000000000063, -0.9484999999999992, 0.2699999999999996, 0.2635000000000014, -1.597999999999999, -1.5254999999999992, 0.13074999999999903], zp_timestamp='2025-12-31T19:49:00')
2025-12-31T21:51:22.796 [DEBUG] [Thread-135251] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:51:22.878 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T21:51:22.890 [DEBUG] [Thread-135254] [transport.py] [_log()] starting thread (client mode): 0xb6bbe6b0
2025-12-31T21:51:22.890 [DEBUG] [Thread-135254] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:51:22.905 [DEBUG] [Thread-135254] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T21:51:22.905 [INFO] [Thread-135254] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T21:51:22.913 [DEBUG] [Thread-135254] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:51:22.913 [DEBUG] [Thread-135254] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T21:51:22.913 [DEBUG] [Thread-135254] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:51:22.913 [DEBUG] [Thread-135254] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:51:22.913 [DEBUG] [Thread-135254] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:51:22.913 [DEBUG] [Thread-135254] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:51:22.913 [DEBUG] [Thread-135254] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:51:22.913 [DEBUG] [Thread-135254] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:51:22.913 [DEBUG] [Thread-135254] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:51:22.913 [DEBUG] [Thread-135254] [transport.py] [_log()] client lang: <none>
2025-12-31T21:51:22.913 [DEBUG] [Thread-135254] [transport.py] [_log()] server lang: <none>
2025-12-31T21:51:22.913 [DEBUG] [Thread-135254] [transport.py] [_log()] kex follows: False
2025-12-31T21:51:22.913 [DEBUG] [Thread-135254] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:51:22.913 [DEBUG] [Thread-135254] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:51:22.913 [DEBUG] [Thread-135254] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:51:22.914 [DEBUG] [Thread-135254] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:51:22.914 [DEBUG] [Thread-135254] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:51:22.914 [DEBUG] [Thread-135254] [transport.py] [_log()] Compression: none
2025-12-31T21:51:22.914 [DEBUG] [Thread-135254] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:51:22.973 [DEBUG] [Thread-135254] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:51:22.973 [DEBUG] [Thread-135254] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:51:22.974 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T21:51:22.975 [DEBUG] [Thread-135254] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T21:51:22.975 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:51:23.029 [DEBUG] [Thread-135254] [transport.py] [_log()] userauth is OK
2025-12-31T21:51:23.029 [DEBUG] [Thread-135254] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:51:23.030 [DEBUG] [Thread-135254] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:51:23.030 [DEBUG] [Thread-135254] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T21:51:23.030 [DEBUG] [Thread-135254] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:51:23.054 [INFO] [Thread-135254] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:51:23.055 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T21:51:23.055 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:51:23.908 [DEBUG] [Thread-135254] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:51:23.909 [DEBUG] [Thread-135254] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:51:23.957 [DEBUG] [Thread-135254] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:51:23.957 [DEBUG] [Thread-135254] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:51:23.966 [DEBUG] [Thread-135254] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:51:23.975 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:51:23.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T21:51:23.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T21:51:23.993 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:51:23.994 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:51:23.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:51:24.002 [DEBUG] [Thread-135254] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:51:28.363 [DEBUG] [Thread-135256 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:51:43.418 [DEBUG] [Thread-135257 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:51:45.276 [DEBUG] [Thread-135258 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:51:54.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T21:51:54.004 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T21:51:54.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T21:51:54.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 21, 51, 47), 5.8, 68.28, 0.0, 20.34, 16.17, 0, 0, 0, 2, 0, 0),)
2025-12-31T21:51:54.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 21:51:47
2025-12-31T21:51:54.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T21:51:54.992 [DEBUG] [Thread-135259] [transport.py] [_log()] starting thread (client mode): 0xb1796f50
2025-12-31T21:51:54.992 [DEBUG] [Thread-135259] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:51:55.013 [DEBUG] [Thread-135259] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T21:51:55.013 [INFO] [Thread-135259] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T21:51:55.014 [DEBUG] [Thread-135259] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:51:55.014 [DEBUG] [Thread-135259] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T21:51:55.014 [DEBUG] [Thread-135259] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:51:55.014 [DEBUG] [Thread-135259] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:51:55.014 [DEBUG] [Thread-135259] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:51:55.014 [DEBUG] [Thread-135259] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:51:55.014 [DEBUG] [Thread-135259] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:51:55.014 [DEBUG] [Thread-135259] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:51:55.014 [DEBUG] [Thread-135259] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:51:55.014 [DEBUG] [Thread-135259] [transport.py] [_log()] client lang: <none>
2025-12-31T21:51:55.014 [DEBUG] [Thread-135259] [transport.py] [_log()] server lang: <none>
2025-12-31T21:51:55.014 [DEBUG] [Thread-135259] [transport.py] [_log()] kex follows: False
2025-12-31T21:51:55.014 [DEBUG] [Thread-135259] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:51:55.014 [DEBUG] [Thread-135259] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:51:55.014 [DEBUG] [Thread-135259] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:51:55.014 [DEBUG] [Thread-135259] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:51:55.014 [DEBUG] [Thread-135259] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:51:55.014 [DEBUG] [Thread-135259] [transport.py] [_log()] Compression: none
2025-12-31T21:51:55.014 [DEBUG] [Thread-135259] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:51:55.033 [DEBUG] [Thread-135259] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:51:55.033 [DEBUG] [Thread-135259] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:51:55.034 [DEBUG] [Thread-135259] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T21:51:55.034 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T21:51:55.035 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:51:55.036 [DEBUG] [Thread-135259] [transport.py] [_log()] userauth is OK
2025-12-31T21:51:55.036 [DEBUG] [Thread-135259] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:51:55.036 [DEBUG] [Thread-135259] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:51:55.036 [DEBUG] [Thread-135259] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T21:51:55.037 [DEBUG] [Thread-135259] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:51:55.061 [INFO] [Thread-135259] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:51:55.062 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:51:55.674 [DEBUG] [Thread-135259] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:51:55.674 [DEBUG] [Thread-135259] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:51:55.674 [DEBUG] [Thread-135259] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T21:51:55.716 [DEBUG] [Thread-135259] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:51:55.716 [DEBUG] [Thread-135259] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:51:55.719 [DEBUG] [Thread-135259] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:51:55.728 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:51:55.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T21:51:55.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T21:51:55.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T21:51:55.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:51:55.741 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T21:51:55.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:51:55.741 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:51:55.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T21:51:55.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.827220 -999.00  +16.30  18.71     71  +11.10 1 2 1 1 1     0    0 4.26 -47.34 ZNESw 18.0 18.7 210.8 22.4 17.4 -20.2 17.2 -19.8 17.1 -18.4 17.4 -19.4
2025-12-31T21:51:55.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T21:51:55.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T21:51:55.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.827220
2025-12-31T21:51:55.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T21:51:55.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T21:51:55.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T21:51:55.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T21:51:55.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T21:51:55.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T21:51:47', tmtdew=5.8, humidity=68.28, cloud=0.0, wind=20.34, temperature=16.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T21:51:48', seeing=1.41, atlas_timestamp='2025-12-31T19:51:11.808', atlas_cloud=2, atlas_rain=1, zp_data=[0.02925000000000111, 0.09675000000000011, 0.03974999999999973, 0.1454999999999984, 0.19849999999999923, 0.08025000000000126, 0.1379999999999999, 0.09825000000000017, 0.0389999999999997, 0.07000000000000028, 0.12824999999999953, 0.3260000000000005, 0.37899999999999956, 0.07824999999999882, -0.004999999999999005, 0.05799999999999983, 0.07975000000000065, 0.14550000000000018, 0.19649999999999856, 0.4052499999999988, 0.4184999999999981, 0.10224999999999795, -0.6167499999999997, -0.47325000000000017, 0.10099999999999909, 0.0965000000000007, 0.23525000000000063, -0.9484999999999992, 0.2699999999999996, 0.2635000000000014, -1.597999999999999, -1.5254999999999992, 0.13074999999999903], zp_timestamp='2025-12-31T19:49:00')
2025-12-31T21:51:55.744 [DEBUG] [Thread-135259] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:51:55.828 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T21:51:55.840 [DEBUG] [Thread-135262] [transport.py] [_log()] starting thread (client mode): 0xb1795fc0
2025-12-31T21:51:55.840 [DEBUG] [Thread-135262] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:51:55.855 [DEBUG] [Thread-135262] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T21:51:55.855 [INFO] [Thread-135262] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T21:51:55.863 [DEBUG] [Thread-135262] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:51:55.863 [DEBUG] [Thread-135262] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T21:51:55.863 [DEBUG] [Thread-135262] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:51:55.863 [DEBUG] [Thread-135262] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:51:55.863 [DEBUG] [Thread-135262] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:51:55.863 [DEBUG] [Thread-135262] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:51:55.863 [DEBUG] [Thread-135262] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:51:55.864 [DEBUG] [Thread-135262] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:51:55.864 [DEBUG] [Thread-135262] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:51:55.864 [DEBUG] [Thread-135262] [transport.py] [_log()] client lang: <none>
2025-12-31T21:51:55.864 [DEBUG] [Thread-135262] [transport.py] [_log()] server lang: <none>
2025-12-31T21:51:55.864 [DEBUG] [Thread-135262] [transport.py] [_log()] kex follows: False
2025-12-31T21:51:55.864 [DEBUG] [Thread-135262] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:51:55.864 [DEBUG] [Thread-135262] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:51:55.864 [DEBUG] [Thread-135262] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:51:55.864 [DEBUG] [Thread-135262] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:51:55.864 [DEBUG] [Thread-135262] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:51:55.864 [DEBUG] [Thread-135262] [transport.py] [_log()] Compression: none
2025-12-31T21:51:55.864 [DEBUG] [Thread-135262] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:51:55.920 [DEBUG] [Thread-135262] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:51:55.921 [DEBUG] [Thread-135262] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:51:55.921 [DEBUG] [Thread-135262] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T21:51:55.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T21:51:55.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:51:55.977 [DEBUG] [Thread-135262] [transport.py] [_log()] userauth is OK
2025-12-31T21:51:55.977 [DEBUG] [Thread-135262] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:51:55.977 [DEBUG] [Thread-135262] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:51:55.977 [DEBUG] [Thread-135262] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T21:51:55.977 [DEBUG] [Thread-135262] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:51:55.996 [INFO] [Thread-135262] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:51:55.996 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T21:51:55.997 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:51:56.807 [DEBUG] [Thread-135262] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:51:56.807 [DEBUG] [Thread-135262] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:51:56.854 [DEBUG] [Thread-135262] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:51:56.855 [DEBUG] [Thread-135262] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:51:56.863 [DEBUG] [Thread-135262] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:51:56.872 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:51:56.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T21:51: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') -> 00000000
2025-12-31T21:51:56.889 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:51:56.889 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:51:56.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:51:56.898 [DEBUG] [Thread-135262] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:51:58.454 [DEBUG] [Thread-135264 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:52:06.655 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:52:06.656 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:52:13.505 [DEBUG] [Thread-135265 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:52:26.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T21:52:26.921 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T21:52:26.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T21:52:27.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 21, 52, 20), 5.79, 68.37, 0.0, 20.68, 16.17, 0, 0, 0, 2, 0, 0),)
2025-12-31T21:52:27.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 21:52:20
2025-12-31T21:52:27.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T21:52:27.904 [DEBUG] [Thread-135266] [transport.py] [_log()] starting thread (client mode): 0xb1785690
2025-12-31T21:52:27.904 [DEBUG] [Thread-135266] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:52:27.925 [DEBUG] [Thread-135266] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T21:52:27.926 [INFO] [Thread-135266] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T21:52:27.929 [DEBUG] [Thread-135266] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:52:27.929 [DEBUG] [Thread-135266] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T21:52:27.929 [DEBUG] [Thread-135266] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:52:27.929 [DEBUG] [Thread-135266] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:52:27.929 [DEBUG] [Thread-135266] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:52:27.929 [DEBUG] [Thread-135266] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:52:27.929 [DEBUG] [Thread-135266] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:52:27.929 [DEBUG] [Thread-135266] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:52:27.929 [DEBUG] [Thread-135266] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:52:27.929 [DEBUG] [Thread-135266] [transport.py] [_log()] client lang: <none>
2025-12-31T21:52:27.929 [DEBUG] [Thread-135266] [transport.py] [_log()] server lang: <none>
2025-12-31T21:52:27.929 [DEBUG] [Thread-135266] [transport.py] [_log()] kex follows: False
2025-12-31T21:52:27.929 [DEBUG] [Thread-135266] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:52:27.929 [DEBUG] [Thread-135266] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:52:27.929 [DEBUG] [Thread-135266] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:52:27.930 [DEBUG] [Thread-135266] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:52:27.930 [DEBUG] [Thread-135266] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:52:27.930 [DEBUG] [Thread-135266] [transport.py] [_log()] Compression: none
2025-12-31T21:52:27.930 [DEBUG] [Thread-135266] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:52:27.947 [DEBUG] [Thread-135266] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:52:27.948 [DEBUG] [Thread-135266] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:52:27.948 [DEBUG] [Thread-135266] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T21:52:27.949 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T21:52:27.949 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:52:27.951 [DEBUG] [Thread-135266] [transport.py] [_log()] userauth is OK
2025-12-31T21:52:27.951 [DEBUG] [Thread-135266] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:52:27.951 [DEBUG] [Thread-135266] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:52:27.951 [DEBUG] [Thread-135266] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T21:52:27.951 [DEBUG] [Thread-135266] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:52:27.987 [INFO] [Thread-135266] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:52:27.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:52:28.537 [DEBUG] [Thread-135268 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:52:28.747 [DEBUG] [Thread-135266] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:52:28.747 [DEBUG] [Thread-135266] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:52:28.747 [DEBUG] [Thread-135266] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T21:52:28.788 [DEBUG] [Thread-135266] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:52:28.788 [DEBUG] [Thread-135266] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:52:28.790 [DEBUG] [Thread-135266] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:52:28.804 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:52:28.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T21:52:28.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T21:52:28.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T21:52:28.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:52:28.813 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T21:52:28.814 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:52:28.814 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:52:28.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T21:52:28.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.827568 -999.00  +16.30  18.97     71  +11.10 1 1 1 1 1     0    0 4.33 -48.89 ZNESW 11.1 19.0 202.4 22.8 17.4 -20.1 17.2 -19.7 17.1 -18.2 17.4 -19.0
2025-12-31T21:52:28.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T21:52:28.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T21:52:28.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.827568
2025-12-31T21:52:28.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T21:52:28.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T21:52:28.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T21:52:28.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T21:52:28.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T21:52:28.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T21:52:20', tmtdew=5.79, humidity=68.37, cloud=0.0, wind=20.68, temperature=16.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T21:52:20', seeing=1.46, atlas_timestamp='2025-12-31T19:51:41.875', atlas_cloud=1, atlas_rain=1, zp_data=[0.02925000000000111, 0.09675000000000011, 0.03974999999999973, 0.1454999999999984, 0.19849999999999923, 0.08025000000000126, 0.1379999999999999, 0.09825000000000017, 0.0389999999999997, 0.07000000000000028, 0.12824999999999953, 0.3260000000000005, 0.37899999999999956, 0.07824999999999882, -0.004999999999999005, 0.05799999999999983, 0.07975000000000065, 0.14550000000000018, 0.19649999999999856, 0.4052499999999988, 0.4184999999999981, 0.10224999999999795, -0.6167499999999997, -0.47325000000000017, 0.10099999999999909, 0.0965000000000007, 0.23525000000000063, -0.9484999999999992, 0.2699999999999996, 0.2635000000000014, -1.597999999999999, -1.5254999999999992, 0.13074999999999903], zp_timestamp='2025-12-31T19:49:00')
2025-12-31T21:52:28.816 [DEBUG] [Thread-135266] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:52:28.897 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T21:52:28.908 [DEBUG] [Thread-135270] [transport.py] [_log()] starting thread (client mode): 0xb1795990
2025-12-31T21:52:28.908 [DEBUG] [Thread-135270] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:52:28.922 [DEBUG] [Thread-135270] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T21:52:28.922 [INFO] [Thread-135270] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T21:52:28.930 [DEBUG] [Thread-135270] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:52:28.930 [DEBUG] [Thread-135270] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T21:52:28.930 [DEBUG] [Thread-135270] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:52:28.930 [DEBUG] [Thread-135270] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:52:28.930 [DEBUG] [Thread-135270] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:52:28.931 [DEBUG] [Thread-135270] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:52:28.931 [DEBUG] [Thread-135270] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:52:28.931 [DEBUG] [Thread-135270] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:52:28.931 [DEBUG] [Thread-135270] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:52:28.931 [DEBUG] [Thread-135270] [transport.py] [_log()] client lang: <none>
2025-12-31T21:52:28.931 [DEBUG] [Thread-135270] [transport.py] [_log()] server lang: <none>
2025-12-31T21:52:28.931 [DEBUG] [Thread-135270] [transport.py] [_log()] kex follows: False
2025-12-31T21:52:28.931 [DEBUG] [Thread-135270] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:52:28.931 [DEBUG] [Thread-135270] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:52:28.931 [DEBUG] [Thread-135270] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:52:28.932 [DEBUG] [Thread-135270] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:52:28.932 [DEBUG] [Thread-135270] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:52:28.932 [DEBUG] [Thread-135270] [transport.py] [_log()] Compression: none
2025-12-31T21:52:28.932 [DEBUG] [Thread-135270] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:52:28.998 [DEBUG] [Thread-135270] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:52:28.999 [DEBUG] [Thread-135270] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:52:28.999 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T21:52:29.000 [DEBUG] [Thread-135270] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T21:52:29.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:52:29.057 [DEBUG] [Thread-135270] [transport.py] [_log()] userauth is OK
2025-12-31T21:52:29.057 [DEBUG] [Thread-135270] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:52:29.058 [DEBUG] [Thread-135270] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:52:29.058 [DEBUG] [Thread-135270] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T21:52:29.058 [DEBUG] [Thread-135270] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:52:29.077 [INFO] [Thread-135270] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:52:29.077 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T21:52:29.078 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:52:29.973 [DEBUG] [Thread-135270] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:52:29.974 [DEBUG] [Thread-135270] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:52:30.021 [DEBUG] [Thread-135270] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:52:30.021 [DEBUG] [Thread-135270] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:52:30.030 [DEBUG] [Thread-135270] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:52:30.040 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:52:30.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T21:52:30.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T21:52:30.058 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:52:30.059 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:52:30.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:52:30.067 [DEBUG] [Thread-135270] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:52:43.574 [DEBUG] [Thread-135272 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:52:45.345 [DEBUG] [Thread-135273 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:52:58.629 [DEBUG] [Thread-135274 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:53:00.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T21:53:00.090 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T21:53:00.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T21:53:00.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 21, 52, 52), 5.79, 68.33, 0.0, 21.07, 16.15, 0, 0, 0, 2, 0, 0),)
2025-12-31T21:53:00.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 21:52:52
2025-12-31T21:53:00.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T21:53:01.046 [DEBUG] [Thread-135275] [transport.py] [_log()] starting thread (client mode): 0xb95d4310
2025-12-31T21:53:01.046 [DEBUG] [Thread-135275] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:53:01.066 [DEBUG] [Thread-135275] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T21:53:01.066 [INFO] [Thread-135275] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T21:53:01.067 [DEBUG] [Thread-135275] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:53:01.067 [DEBUG] [Thread-135275] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T21:53:01.067 [DEBUG] [Thread-135275] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:53:01.067 [DEBUG] [Thread-135275] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:53:01.067 [DEBUG] [Thread-135275] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:53:01.067 [DEBUG] [Thread-135275] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:53:01.067 [DEBUG] [Thread-135275] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:53:01.067 [DEBUG] [Thread-135275] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:53:01.067 [DEBUG] [Thread-135275] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:53:01.067 [DEBUG] [Thread-135275] [transport.py] [_log()] client lang: <none>
2025-12-31T21:53:01.067 [DEBUG] [Thread-135275] [transport.py] [_log()] server lang: <none>
2025-12-31T21:53:01.067 [DEBUG] [Thread-135275] [transport.py] [_log()] kex follows: False
2025-12-31T21:53:01.067 [DEBUG] [Thread-135275] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:53:01.067 [DEBUG] [Thread-135275] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:53:01.067 [DEBUG] [Thread-135275] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:53:01.067 [DEBUG] [Thread-135275] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:53:01.067 [DEBUG] [Thread-135275] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:53:01.067 [DEBUG] [Thread-135275] [transport.py] [_log()] Compression: none
2025-12-31T21:53:01.067 [DEBUG] [Thread-135275] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:53:01.075 [DEBUG] [Thread-135275] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:53:01.075 [DEBUG] [Thread-135275] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:53:01.075 [DEBUG] [Thread-135275] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T21:53:01.075 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T21:53:01.076 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:53:01.077 [DEBUG] [Thread-135275] [transport.py] [_log()] userauth is OK
2025-12-31T21:53:01.077 [DEBUG] [Thread-135275] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:53:01.077 [DEBUG] [Thread-135275] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:53:01.077 [DEBUG] [Thread-135275] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T21:53:01.077 [DEBUG] [Thread-135275] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:53:01.098 [INFO] [Thread-135275] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:53:01.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:53:01.728 [DEBUG] [Thread-135275] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:53:01.728 [DEBUG] [Thread-135275] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:53:01.728 [DEBUG] [Thread-135275] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T21:53:01.769 [DEBUG] [Thread-135275] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:53:01.769 [DEBUG] [Thread-135275] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:53:01.773 [DEBUG] [Thread-135275] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:53:01.784 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:53:01.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T21:53:01.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T21:53:01.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T21:53:01.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:53:01.796 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T21:53:01.797 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:53:01.797 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:53:01.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T21:53:01.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.827915 -999.00  +16.30  14.39     71  +11.20 1 1 1 1 1     0    0 4.13 -54.39 ZNESW 18.9 14.4 200.8 20.2 17.4 -20.1 17.2 -19.6 17.1 -18.1 17.4 -19.0
2025-12-31T21:53:01.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T21:53:01.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T21:53:01.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.827915
2025-12-31T21:53:01.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T21:53:01.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T21:53:01.799 [DEBUG] [Thread-135275] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:53:01.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T21:53:01.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T21:53:01.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T21:53:01.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T21:52:52', tmtdew=5.79, humidity=68.33, cloud=0.0, wind=21.07, temperature=16.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T21:52:52', seeing=1.58, atlas_timestamp='2025-12-31T19:52:11.856', atlas_cloud=1, atlas_rain=1, zp_data=[0.02925000000000111, 0.09675000000000011, 0.03974999999999973, 0.1454999999999984, 0.19849999999999923, 0.08025000000000126, 0.1379999999999999, 0.09825000000000017, 0.0389999999999997, 0.07000000000000028, 0.12824999999999953, 0.3260000000000005, 0.37899999999999956, 0.07824999999999882, -0.004999999999999005, 0.05799999999999983, 0.07975000000000065, 0.14550000000000018, 0.19649999999999856, 0.4052499999999988, 0.4184999999999981, 0.10224999999999795, -0.6167499999999997, -0.47325000000000017, 0.10099999999999909, 0.0965000000000007, 0.23525000000000063, -0.9484999999999992, 0.2699999999999996, 0.2635000000000014, -1.597999999999999, -1.5254999999999992, 0.13074999999999903], zp_timestamp='2025-12-31T19:49:00')
2025-12-31T21:53:01.882 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T21:53:01.894 [DEBUG] [Thread-135278] [transport.py] [_log()] starting thread (client mode): 0xb6bb8dc0
2025-12-31T21:53:01.894 [DEBUG] [Thread-135278] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:53:01.909 [DEBUG] [Thread-135278] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T21:53:01.909 [INFO] [Thread-135278] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T21:53:01.917 [DEBUG] [Thread-135278] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:53:01.917 [DEBUG] [Thread-135278] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T21:53:01.917 [DEBUG] [Thread-135278] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:53:01.917 [DEBUG] [Thread-135278] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:53:01.917 [DEBUG] [Thread-135278] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:53:01.917 [DEBUG] [Thread-135278] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:53:01.917 [DEBUG] [Thread-135278] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:53:01.917 [DEBUG] [Thread-135278] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:53:01.917 [DEBUG] [Thread-135278] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:53:01.917 [DEBUG] [Thread-135278] [transport.py] [_log()] client lang: <none>
2025-12-31T21:53:01.917 [DEBUG] [Thread-135278] [transport.py] [_log()] server lang: <none>
2025-12-31T21:53:01.917 [DEBUG] [Thread-135278] [transport.py] [_log()] kex follows: False
2025-12-31T21:53:01.917 [DEBUG] [Thread-135278] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:53:01.918 [DEBUG] [Thread-135278] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:53:01.918 [DEBUG] [Thread-135278] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:53:01.918 [DEBUG] [Thread-135278] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:53:01.918 [DEBUG] [Thread-135278] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:53:01.918 [DEBUG] [Thread-135278] [transport.py] [_log()] Compression: none
2025-12-31T21:53:01.918 [DEBUG] [Thread-135278] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:53:01.976 [DEBUG] [Thread-135278] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:53:01.977 [DEBUG] [Thread-135278] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:53:01.977 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T21:53:01.978 [DEBUG] [Thread-135278] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T21:53:01.979 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:53:02.033 [DEBUG] [Thread-135278] [transport.py] [_log()] userauth is OK
2025-12-31T21:53:02.033 [DEBUG] [Thread-135278] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:53:02.033 [DEBUG] [Thread-135278] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:53:02.033 [DEBUG] [Thread-135278] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T21:53:02.034 [DEBUG] [Thread-135278] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:53:02.058 [INFO] [Thread-135278] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:53:02.059 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T21:53:02.059 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:53:02.857 [DEBUG] [Thread-135278] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:53:02.857 [DEBUG] [Thread-135278] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:53:02.905 [DEBUG] [Thread-135278] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:53:02.905 [DEBUG] [Thread-135278] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:53:02.914 [DEBUG] [Thread-135278] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:53:02.924 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:53:02.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T21:53:02.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T21:53:02.942 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:53:02.943 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:53:02.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:53:02.951 [DEBUG] [Thread-135278] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:53:06.856 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:53:06.857 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:53:13.665 [DEBUG] [Thread-135280 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:53:28.714 [DEBUG] [Thread-135281 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:53:32.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T21:53:32.974 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T21:53:32.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T21:53:33.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 21, 53, 24), 5.79, 68.35, 0.0, 21.47, 16.2, 0, 0, 0, 2, 0, 0),)
2025-12-31T21:53:33.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 21:53:24
2025-12-31T21:53:33.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T21:53:34.004 [DEBUG] [Thread-135282] [transport.py] [_log()] starting thread (client mode): 0xb1785e10
2025-12-31T21:53:34.004 [DEBUG] [Thread-135282] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:53:34.023 [DEBUG] [Thread-135282] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T21:53:34.023 [INFO] [Thread-135282] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T21:53:34.024 [DEBUG] [Thread-135282] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:53:34.025 [DEBUG] [Thread-135282] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T21:53:34.025 [DEBUG] [Thread-135282] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:53:34.025 [DEBUG] [Thread-135282] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:53:34.025 [DEBUG] [Thread-135282] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:53:34.025 [DEBUG] [Thread-135282] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:53:34.025 [DEBUG] [Thread-135282] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:53:34.025 [DEBUG] [Thread-135282] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:53:34.025 [DEBUG] [Thread-135282] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:53:34.025 [DEBUG] [Thread-135282] [transport.py] [_log()] client lang: <none>
2025-12-31T21:53:34.025 [DEBUG] [Thread-135282] [transport.py] [_log()] server lang: <none>
2025-12-31T21:53:34.025 [DEBUG] [Thread-135282] [transport.py] [_log()] kex follows: False
2025-12-31T21:53:34.025 [DEBUG] [Thread-135282] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:53:34.025 [DEBUG] [Thread-135282] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:53:34.025 [DEBUG] [Thread-135282] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:53:34.025 [DEBUG] [Thread-135282] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:53:34.025 [DEBUG] [Thread-135282] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:53:34.025 [DEBUG] [Thread-135282] [transport.py] [_log()] Compression: none
2025-12-31T21:53:34.025 [DEBUG] [Thread-135282] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:53:34.040 [DEBUG] [Thread-135282] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:53:34.040 [DEBUG] [Thread-135282] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:53:34.040 [DEBUG] [Thread-135282] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T21:53:34.040 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T21:53:34.040 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:53:34.041 [DEBUG] [Thread-135282] [transport.py] [_log()] userauth is OK
2025-12-31T21:53:34.041 [DEBUG] [Thread-135282] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:53:34.041 [DEBUG] [Thread-135282] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:53:34.041 [DEBUG] [Thread-135282] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T21:53:34.041 [DEBUG] [Thread-135282] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:53:34.050 [INFO] [Thread-135282] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:53:34.050 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:53:34.787 [DEBUG] [Thread-135282] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:53:34.787 [DEBUG] [Thread-135282] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:53:34.787 [DEBUG] [Thread-135282] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T21:53:34.829 [DEBUG] [Thread-135282] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:53:34.829 [DEBUG] [Thread-135282] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:53:34.831 [DEBUG] [Thread-135282] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:53:34.838 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:53:34.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T21:53:34.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T21:53:34.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T21:53:34.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:53:34.844 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T21:53:34.844 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:53:34.844 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:53:34.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T21:53:34.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.828262 -999.00  +16.40  14.15     71  +11.10 1 1 1 1 1     0    0 3.93 -56.98 ZNESW 12.4 14.2 196.2 16.6 17.4 -20.0 17.2 -19.6 17.1 -18.1 17.4 -18.9
2025-12-31T21:53:34.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T21:53:34.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T21:53:34.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.828262
2025-12-31T21:53:34.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T21:53:34.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T21:53:34.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T21:53:34.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T21:53:34.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T21:53:34.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T21:53:24', tmtdew=5.79, humidity=68.35, cloud=0.0, wind=21.47, temperature=16.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T21:53:24', seeing=1.59, atlas_timestamp='2025-12-31T19:52:41.837', atlas_cloud=1, atlas_rain=1, zp_data=[0.02925000000000111, 0.09675000000000011, 0.03974999999999973, 0.1454999999999984, 0.19849999999999923, 0.08025000000000126, 0.1379999999999999, 0.09825000000000017, 0.0389999999999997, 0.07000000000000028, 0.12824999999999953, 0.3260000000000005, 0.37899999999999956, 0.07824999999999882, -0.004999999999999005, 0.05799999999999983, 0.07975000000000065, 0.14550000000000018, 0.19649999999999856, 0.4052499999999988, 0.4184999999999981, 0.10224999999999795, -0.6167499999999997, -0.47325000000000017, 0.10099999999999909, 0.0965000000000007, 0.23525000000000063, -0.9484999999999992, 0.2699999999999996, 0.2635000000000014, -1.597999999999999, -1.5254999999999992, 0.13074999999999903], zp_timestamp='2025-12-31T19:49:00')
2025-12-31T21:53:34.845 [DEBUG] [Thread-135282] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:53:34.919 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T21:53:34.930 [DEBUG] [Thread-135285] [transport.py] [_log()] starting thread (client mode): 0xb1784220
2025-12-31T21:53:34.930 [DEBUG] [Thread-135285] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:53:34.945 [DEBUG] [Thread-135285] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T21:53:34.945 [INFO] [Thread-135285] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T21:53:34.952 [DEBUG] [Thread-135285] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:53:34.952 [DEBUG] [Thread-135285] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T21:53:34.952 [DEBUG] [Thread-135285] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:53:34.952 [DEBUG] [Thread-135285] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:53:34.952 [DEBUG] [Thread-135285] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:53:34.952 [DEBUG] [Thread-135285] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:53:34.952 [DEBUG] [Thread-135285] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:53:34.953 [DEBUG] [Thread-135285] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:53:34.953 [DEBUG] [Thread-135285] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:53:34.953 [DEBUG] [Thread-135285] [transport.py] [_log()] client lang: <none>
2025-12-31T21:53:34.953 [DEBUG] [Thread-135285] [transport.py] [_log()] server lang: <none>
2025-12-31T21:53:34.953 [DEBUG] [Thread-135285] [transport.py] [_log()] kex follows: False
2025-12-31T21:53:34.953 [DEBUG] [Thread-135285] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:53:34.953 [DEBUG] [Thread-135285] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:53:34.953 [DEBUG] [Thread-135285] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:53:34.953 [DEBUG] [Thread-135285] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:53:34.953 [DEBUG] [Thread-135285] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:53:34.953 [DEBUG] [Thread-135285] [transport.py] [_log()] Compression: none
2025-12-31T21:53:34.953 [DEBUG] [Thread-135285] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:53:35.011 [DEBUG] [Thread-135285] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:53:35.011 [DEBUG] [Thread-135285] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:53:35.011 [DEBUG] [Thread-135285] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T21:53:35.011 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T21:53:35.011 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:53:35.068 [DEBUG] [Thread-135285] [transport.py] [_log()] userauth is OK
2025-12-31T21:53:35.068 [DEBUG] [Thread-135285] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:53:35.068 [DEBUG] [Thread-135285] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:53:35.068 [DEBUG] [Thread-135285] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T21:53:35.068 [DEBUG] [Thread-135285] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:53:35.082 [INFO] [Thread-135285] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:53:35.082 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T21:53:35.083 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:53:35.883 [DEBUG] [Thread-135285] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:53:35.884 [DEBUG] [Thread-135285] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:53:35.932 [DEBUG] [Thread-135285] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:53:35.932 [DEBUG] [Thread-135285] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:53:35.940 [DEBUG] [Thread-135285] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:53:35.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:53:35.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T21:53:35.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T21:53:35.964 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:53:35.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:53:35.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:53:35.972 [DEBUG] [Thread-135285] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:53:43.751 [DEBUG] [Thread-135287 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:53:45.420 [DEBUG] [Thread-135288 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:53:58.800 [DEBUG] [Thread-135289 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:54:05.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T21:54:05.995 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T21:54:05.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T21:54:06.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 21, 53, 56), 5.78, 68.37, 0.0, 19.36, 16.15, 0, 0, 0, 2, 0, 0),)
2025-12-31T21:54:06.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 21:53:56
2025-12-31T21:54:06.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T21:54:06.981 [DEBUG] [Thread-135290] [transport.py] [_log()] starting thread (client mode): 0xb957bbe0
2025-12-31T21:54:06.981 [DEBUG] [Thread-135290] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:54:07.002 [DEBUG] [Thread-135290] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T21:54:07.002 [INFO] [Thread-135290] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T21:54:07.005 [DEBUG] [Thread-135290] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:54:07.005 [DEBUG] [Thread-135290] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T21:54:07.005 [DEBUG] [Thread-135290] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:54:07.005 [DEBUG] [Thread-135290] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:54:07.005 [DEBUG] [Thread-135290] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:54:07.005 [DEBUG] [Thread-135290] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:54:07.006 [DEBUG] [Thread-135290] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:54:07.006 [DEBUG] [Thread-135290] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:54:07.006 [DEBUG] [Thread-135290] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:54:07.006 [DEBUG] [Thread-135290] [transport.py] [_log()] client lang: <none>
2025-12-31T21:54:07.006 [DEBUG] [Thread-135290] [transport.py] [_log()] server lang: <none>
2025-12-31T21:54:07.006 [DEBUG] [Thread-135290] [transport.py] [_log()] kex follows: False
2025-12-31T21:54:07.006 [DEBUG] [Thread-135290] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:54:07.006 [DEBUG] [Thread-135290] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:54:07.006 [DEBUG] [Thread-135290] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:54:07.006 [DEBUG] [Thread-135290] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:54:07.006 [DEBUG] [Thread-135290] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:54:07.006 [DEBUG] [Thread-135290] [transport.py] [_log()] Compression: none
2025-12-31T21:54:07.006 [DEBUG] [Thread-135290] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:54:07.023 [DEBUG] [Thread-135290] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:54:07.024 [DEBUG] [Thread-135290] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:54:07.024 [DEBUG] [Thread-135290] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T21:54:07.024 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T21:54:07.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:54:07.026 [DEBUG] [Thread-135290] [transport.py] [_log()] userauth is OK
2025-12-31T21:54:07.026 [DEBUG] [Thread-135290] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:54:07.026 [DEBUG] [Thread-135290] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:54:07.027 [DEBUG] [Thread-135290] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T21:54:07.027 [DEBUG] [Thread-135290] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:54:07.052 [INFO] [Thread-135290] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:54:07.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:54:07.056 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:54:07.057 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:54:07.652 [DEBUG] [Thread-135290] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:54:07.652 [DEBUG] [Thread-135290] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:54:07.653 [DEBUG] [Thread-135290] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T21:54:07.693 [DEBUG] [Thread-135290] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:54:07.693 [DEBUG] [Thread-135290] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:54:07.696 [DEBUG] [Thread-135290] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:54:07.710 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:54:07.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T21:54:07.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T21:54:07.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T21:54:07.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:54:07.720 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T21:54:07.720 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:54:07.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:54:07.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T21:54:07.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.828957 -999.00  +16.30  10.26     71  +11.20 1 1 1 1 1     0    0 3.94 -55.04 ZNESW 10.6 10.3 199.0 18.1 17.3 -19.9 17.2 -19.0 17.1 -17.9 17.4 -19.0
2025-12-31T21:54:07.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T21:54:07.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T21:54:07.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.828957
2025-12-31T21:54:07.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T21:54:07.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T21:54:07.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T21:54:07.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T21:54:07.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T21:54:07.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T21:53:56', tmtdew=5.78, humidity=68.37, cloud=0.0, wind=19.36, temperature=16.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T21:53:56', seeing=1.44, atlas_timestamp='2025-12-31T19:53:41.885', atlas_cloud=1, atlas_rain=1, zp_data=[0.02925000000000111, 0.09675000000000011, 0.03974999999999973, 0.1454999999999984, 0.19849999999999923, 0.08025000000000126, 0.1379999999999999, 0.09825000000000017, 0.0389999999999997, 0.07000000000000028, 0.12824999999999953, 0.3260000000000005, 0.37899999999999956, 0.07824999999999882, -0.004999999999999005, 0.05799999999999983, 0.07975000000000065, 0.14550000000000018, 0.19649999999999856, 0.4052499999999988, 0.4184999999999981, 0.10224999999999795, -0.6167499999999997, -0.47325000000000017, 0.10099999999999909, 0.0965000000000007, 0.23525000000000063, -0.9484999999999992, 0.2699999999999996, 0.2635000000000014, -1.597999999999999, -1.5254999999999992, 0.13074999999999903], zp_timestamp='2025-12-31T19:52:00')
2025-12-31T21:54:07.723 [DEBUG] [Thread-135290] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:54:07.815 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T21:54:07.827 [DEBUG] [Thread-135293] [transport.py] [_log()] starting thread (client mode): 0xb17599f0
2025-12-31T21:54:07.828 [DEBUG] [Thread-135293] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:54:07.842 [DEBUG] [Thread-135293] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T21:54:07.842 [INFO] [Thread-135293] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T21:54:07.852 [DEBUG] [Thread-135293] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:54:07.852 [DEBUG] [Thread-135293] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T21:54:07.852 [DEBUG] [Thread-135293] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:54:07.852 [DEBUG] [Thread-135293] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:54:07.852 [DEBUG] [Thread-135293] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:54:07.852 [DEBUG] [Thread-135293] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:54:07.852 [DEBUG] [Thread-135293] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:54:07.852 [DEBUG] [Thread-135293] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:54:07.853 [DEBUG] [Thread-135293] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:54:07.853 [DEBUG] [Thread-135293] [transport.py] [_log()] client lang: <none>
2025-12-31T21:54:07.853 [DEBUG] [Thread-135293] [transport.py] [_log()] server lang: <none>
2025-12-31T21:54:07.853 [DEBUG] [Thread-135293] [transport.py] [_log()] kex follows: False
2025-12-31T21:54:07.853 [DEBUG] [Thread-135293] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:54:07.853 [DEBUG] [Thread-135293] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:54:07.853 [DEBUG] [Thread-135293] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:54:07.853 [DEBUG] [Thread-135293] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:54:07.853 [DEBUG] [Thread-135293] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:54:07.853 [DEBUG] [Thread-135293] [transport.py] [_log()] Compression: none
2025-12-31T21:54:07.853 [DEBUG] [Thread-135293] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:54:07.913 [DEBUG] [Thread-135293] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:54:07.914 [DEBUG] [Thread-135293] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:54:07.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T21:54:07.916 [DEBUG] [Thread-135293] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T21:54:07.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:54:07.976 [DEBUG] [Thread-135293] [transport.py] [_log()] userauth is OK
2025-12-31T21:54:07.977 [DEBUG] [Thread-135293] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:54:07.977 [DEBUG] [Thread-135293] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:54:07.977 [DEBUG] [Thread-135293] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T21:54:07.977 [DEBUG] [Thread-135293] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:54:07.992 [INFO] [Thread-135293] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:54:07.992 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T21:54:07.993 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:54:08.832 [DEBUG] [Thread-135293] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:54:08.833 [DEBUG] [Thread-135293] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:54:08.880 [DEBUG] [Thread-135293] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:54:08.880 [DEBUG] [Thread-135293] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:54:08.890 [DEBUG] [Thread-135293] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:54:08.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:54:08.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T21:54:08.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T21:54:08.917 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:54:08.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:54:08.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:54:08.926 [DEBUG] [Thread-135293] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:54:13.831 [DEBUG] [Thread-135295 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:54:28.873 [DEBUG] [Thread-135296 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:54:38.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T21:54:38.933 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T21:54:38.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-12-31T21:54:39.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 21, 54, 28), 5.79, 68.33, 0.0, 18.05, 16.17, 0, 0, 0, 2, 0, 0),)
2025-12-31T21:54:39.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 21:54:28
2025-12-31T21:54:39.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T21:54:39.907 [DEBUG] [Thread-135297] [transport.py] [_log()] starting thread (client mode): 0xb17970a0
2025-12-31T21:54:39.907 [DEBUG] [Thread-135297] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:54:39.926 [DEBUG] [Thread-135297] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T21:54:39.927 [INFO] [Thread-135297] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T21:54:39.929 [DEBUG] [Thread-135297] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:54:39.929 [DEBUG] [Thread-135297] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T21:54:39.929 [DEBUG] [Thread-135297] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:54:39.929 [DEBUG] [Thread-135297] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:54:39.929 [DEBUG] [Thread-135297] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:54:39.930 [DEBUG] [Thread-135297] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:54:39.930 [DEBUG] [Thread-135297] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:54:39.930 [DEBUG] [Thread-135297] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:54:39.930 [DEBUG] [Thread-135297] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:54:39.930 [DEBUG] [Thread-135297] [transport.py] [_log()] client lang: <none>
2025-12-31T21:54:39.930 [DEBUG] [Thread-135297] [transport.py] [_log()] server lang: <none>
2025-12-31T21:54:39.930 [DEBUG] [Thread-135297] [transport.py] [_log()] kex follows: False
2025-12-31T21:54:39.930 [DEBUG] [Thread-135297] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:54:39.930 [DEBUG] [Thread-135297] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:54:39.930 [DEBUG] [Thread-135297] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:54:39.930 [DEBUG] [Thread-135297] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:54:39.930 [DEBUG] [Thread-135297] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:54:39.930 [DEBUG] [Thread-135297] [transport.py] [_log()] Compression: none
2025-12-31T21:54:39.930 [DEBUG] [Thread-135297] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:54:39.947 [DEBUG] [Thread-135297] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:54:39.947 [DEBUG] [Thread-135297] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:54:39.948 [DEBUG] [Thread-135297] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T21:54:39.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T21:54:39.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:54:39.949 [DEBUG] [Thread-135297] [transport.py] [_log()] userauth is OK
2025-12-31T21:54:39.949 [DEBUG] [Thread-135297] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:54:39.950 [DEBUG] [Thread-135297] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:54:39.950 [DEBUG] [Thread-135297] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T21:54:39.950 [DEBUG] [Thread-135297] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:54:39.982 [INFO] [Thread-135297] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:54:39.982 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:54:40.744 [DEBUG] [Thread-135297] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:54:40.745 [DEBUG] [Thread-135297] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:54:40.745 [DEBUG] [Thread-135297] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T21:54:40.786 [DEBUG] [Thread-135297] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:54:40.786 [DEBUG] [Thread-135297] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:54:40.789 [DEBUG] [Thread-135297] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:54:40.802 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:54:40.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T21:54:40.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T21:54:40.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T21:54:40.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:54:40.813 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T21:54:40.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:54:40.814 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:54:40.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T21:54:40.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.829304 -999.00  +16.30  16.50     71  +11.20 1 1 1 1 1     0    0 4.00 -52.03 ZNESW 19.6 16.5 198.4 21.2 17.4 -19.8 17.2 -19.1 17.1 -18.0 17.4 -19.1
2025-12-31T21:54:40.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T21:54:40.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T21:54:40.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.829304
2025-12-31T21:54:40.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T21:54:40.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T21:54:40.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T21:54:40.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T21:54:40.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T21:54:40.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T21:54:28', tmtdew=5.79, humidity=68.33, cloud=0.0, wind=18.05, temperature=16.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T21:54:28', seeing=1.35, atlas_timestamp='2025-12-31T19:54:11.866', atlas_cloud=1, atlas_rain=1, zp_data=[0.02925000000000111, 0.09675000000000011, 0.03974999999999973, 0.1454999999999984, 0.19849999999999923, 0.08025000000000126, 0.1379999999999999, 0.09825000000000017, 0.0389999999999997, 0.07000000000000028, 0.12824999999999953, 0.3260000000000005, 0.37899999999999956, 0.07824999999999882, -0.004999999999999005, 0.05799999999999983, 0.07975000000000065, 0.14550000000000018, 0.19649999999999856, 0.4052499999999988, 0.4184999999999981, 0.10224999999999795, -0.6167499999999997, -0.47325000000000017, 0.10099999999999909, 0.0965000000000007, 0.23525000000000063, -0.9484999999999992, 0.2699999999999996, 0.2635000000000014, -1.597999999999999, -1.5254999999999992, 0.13074999999999903], zp_timestamp='2025-12-31T19:52:00')
2025-12-31T21:54:40.816 [DEBUG] [Thread-135297] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:54: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-12-31T21:54:40.913 [DEBUG] [Thread-135300] [transport.py] [_log()] starting thread (client mode): 0xb6bbcd90
2025-12-31T21:54:40.913 [DEBUG] [Thread-135300] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:54:40.928 [DEBUG] [Thread-135300] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T21:54:40.928 [INFO] [Thread-135300] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T21:54:40.935 [DEBUG] [Thread-135300] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:54:40.936 [DEBUG] [Thread-135300] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T21:54:40.936 [DEBUG] [Thread-135300] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:54:40.936 [DEBUG] [Thread-135300] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:54:40.936 [DEBUG] [Thread-135300] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:54:40.936 [DEBUG] [Thread-135300] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:54:40.936 [DEBUG] [Thread-135300] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:54:40.936 [DEBUG] [Thread-135300] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:54:40.936 [DEBUG] [Thread-135300] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:54:40.936 [DEBUG] [Thread-135300] [transport.py] [_log()] client lang: <none>
2025-12-31T21:54:40.936 [DEBUG] [Thread-135300] [transport.py] [_log()] server lang: <none>
2025-12-31T21:54:40.936 [DEBUG] [Thread-135300] [transport.py] [_log()] kex follows: False
2025-12-31T21:54:40.936 [DEBUG] [Thread-135300] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:54:40.936 [DEBUG] [Thread-135300] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:54:40.936 [DEBUG] [Thread-135300] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:54:40.937 [DEBUG] [Thread-135300] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:54:40.937 [DEBUG] [Thread-135300] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:54:40.937 [DEBUG] [Thread-135300] [transport.py] [_log()] Compression: none
2025-12-31T21:54:40.937 [DEBUG] [Thread-135300] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:54:40.993 [DEBUG] [Thread-135300] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:54:40.993 [DEBUG] [Thread-135300] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:54:40.994 [DEBUG] [Thread-135300] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T21:54:40.994 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T21:54:40.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:54:41.049 [DEBUG] [Thread-135300] [transport.py] [_log()] userauth is OK
2025-12-31T21:54:41.049 [DEBUG] [Thread-135300] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:54:41.049 [DEBUG] [Thread-135300] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:54:41.049 [DEBUG] [Thread-135300] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T21:54:41.049 [DEBUG] [Thread-135300] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:54:41.068 [INFO] [Thread-135300] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:54:41.069 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T21:54:41.070 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:54:41.871 [DEBUG] [Thread-135300] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:54:41.872 [DEBUG] [Thread-135300] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:54:41.919 [DEBUG] [Thread-135300] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:54:41.919 [DEBUG] [Thread-135300] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:54:41.928 [DEBUG] [Thread-135300] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:54:41.938 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:54:41.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T21:54:41.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T21:54:41.956 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:54:41.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:54:41.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:54:41.965 [DEBUG] [Thread-135300] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:54:43.905 [DEBUG] [Thread-135302 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:54:45.501 [DEBUG] [Thread-135303 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:54:58.950 [DEBUG] [Thread-135304 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:55:07.256 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:55:07.257 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:55:11.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T21:55:11.978 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T21:55:11.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T21:55:12.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 21, 54, 28), 5.79, 68.83, 0.0, 16.25, 16.17, 0, 0, 0, 2, 0, 0),)
2025-12-31T21:55:12.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 21:54:28
2025-12-31T21:55:12.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T21:55:12.977 [DEBUG] [Thread-135305] [transport.py] [_log()] starting thread (client mode): 0xb957af80
2025-12-31T21:55:12.977 [DEBUG] [Thread-135305] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:55:12.998 [DEBUG] [Thread-135305] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T21:55:12.999 [INFO] [Thread-135305] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T21:55:13.001 [DEBUG] [Thread-135305] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:55:13.001 [DEBUG] [Thread-135305] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T21:55:13.001 [DEBUG] [Thread-135305] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:55:13.001 [DEBUG] [Thread-135305] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:55:13.001 [DEBUG] [Thread-135305] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:55:13.001 [DEBUG] [Thread-135305] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:55:13.001 [DEBUG] [Thread-135305] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:55:13.001 [DEBUG] [Thread-135305] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:55:13.001 [DEBUG] [Thread-135305] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:55:13.001 [DEBUG] [Thread-135305] [transport.py] [_log()] client lang: <none>
2025-12-31T21:55:13.002 [DEBUG] [Thread-135305] [transport.py] [_log()] server lang: <none>
2025-12-31T21:55:13.002 [DEBUG] [Thread-135305] [transport.py] [_log()] kex follows: False
2025-12-31T21:55:13.002 [DEBUG] [Thread-135305] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:55:13.002 [DEBUG] [Thread-135305] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:55:13.002 [DEBUG] [Thread-135305] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:55:13.002 [DEBUG] [Thread-135305] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:55:13.002 [DEBUG] [Thread-135305] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:55:13.002 [DEBUG] [Thread-135305] [transport.py] [_log()] Compression: none
2025-12-31T21:55:13.002 [DEBUG] [Thread-135305] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:55:13.020 [DEBUG] [Thread-135305] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:55:13.020 [DEBUG] [Thread-135305] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:55:13.021 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T21:55:13.021 [DEBUG] [Thread-135305] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T21:55:13.022 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:55:13.024 [DEBUG] [Thread-135305] [transport.py] [_log()] userauth is OK
2025-12-31T21:55:13.024 [DEBUG] [Thread-135305] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:55:13.025 [DEBUG] [Thread-135305] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:55:13.025 [DEBUG] [Thread-135305] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T21:55:13.025 [DEBUG] [Thread-135305] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:55:13.050 [INFO] [Thread-135305] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:55:13.050 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:55:13.693 [DEBUG] [Thread-135305] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:55:13.693 [DEBUG] [Thread-135305] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:55:13.694 [DEBUG] [Thread-135305] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T21:55:13.735 [DEBUG] [Thread-135305] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:55:13.735 [DEBUG] [Thread-135305] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:55:13.739 [DEBUG] [Thread-135305] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:55:13.750 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:55:13.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T21:55:13.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T21:55:13.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T21:55:13.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:55:13.763 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T21:55:13.763 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:55:13.763 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:55:13.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T21:55:13.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.829651 -999.00  +16.30  12.36     71  +11.20 1 2 1 1 1     0    0 4.02 -53.81 ZNEsW 9.2 12.4 213.4 22.0 17.3 -19.8 17.2 -19.0 17.0 -17.8 17.3 -18.8
2025-12-31T21:55:13.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T21:55:13.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T21:55:13.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.829651
2025-12-31T21:55:13.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T21:55:13.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T21:55:13.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T21:55:13.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T21:55:13.766 [DEBUG] [Thread-135305] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:55:13.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T21:55:13.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T21:54:28', tmtdew=5.79, humidity=68.83, cloud=0.0, wind=16.25, temperature=16.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T21:55:00', seeing=1.35, atlas_timestamp='2025-12-31T19:54:41.846', atlas_cloud=2, atlas_rain=1, zp_data=[0.02925000000000111, 0.09675000000000011, 0.03974999999999973, 0.1454999999999984, 0.19849999999999923, 0.08025000000000126, 0.1379999999999999, 0.09825000000000017, 0.0389999999999997, 0.07000000000000028, 0.12824999999999953, 0.3260000000000005, 0.37899999999999956, 0.07824999999999882, -0.004999999999999005, 0.05799999999999983, 0.07975000000000065, 0.14550000000000018, 0.19649999999999856, 0.4052499999999988, 0.4184999999999981, 0.10224999999999795, -0.6167499999999997, -0.47325000000000017, 0.10099999999999909, 0.0965000000000007, 0.23525000000000063, -0.9484999999999992, 0.2699999999999996, 0.2635000000000014, -1.597999999999999, -1.5254999999999992, 0.13074999999999903], zp_timestamp='2025-12-31T19:52:00')
2025-12-31T21:55:13.850 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T21:55:13.862 [DEBUG] [Thread-135308] [transport.py] [_log()] starting thread (client mode): 0xb1786b30
2025-12-31T21:55:13.862 [DEBUG] [Thread-135308] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:55:13.877 [DEBUG] [Thread-135308] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T21:55:13.877 [INFO] [Thread-135308] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T21:55:13.884 [DEBUG] [Thread-135308] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:55:13.885 [DEBUG] [Thread-135308] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T21:55:13.885 [DEBUG] [Thread-135308] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:55:13.885 [DEBUG] [Thread-135308] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:55:13.885 [DEBUG] [Thread-135308] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:55:13.885 [DEBUG] [Thread-135308] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:55:13.885 [DEBUG] [Thread-135308] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:55:13.885 [DEBUG] [Thread-135308] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:55:13.885 [DEBUG] [Thread-135308] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:55:13.885 [DEBUG] [Thread-135308] [transport.py] [_log()] client lang: <none>
2025-12-31T21:55:13.885 [DEBUG] [Thread-135308] [transport.py] [_log()] server lang: <none>
2025-12-31T21:55:13.885 [DEBUG] [Thread-135308] [transport.py] [_log()] kex follows: False
2025-12-31T21:55:13.885 [DEBUG] [Thread-135308] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:55:13.885 [DEBUG] [Thread-135308] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:55:13.885 [DEBUG] [Thread-135308] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:55:13.885 [DEBUG] [Thread-135308] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:55:13.885 [DEBUG] [Thread-135308] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:55:13.885 [DEBUG] [Thread-135308] [transport.py] [_log()] Compression: none
2025-12-31T21:55:13.885 [DEBUG] [Thread-135308] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:55:13.945 [DEBUG] [Thread-135308] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:55:13.945 [DEBUG] [Thread-135308] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:55:13.946 [DEBUG] [Thread-135308] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T21:55:13.946 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T21:55:13.947 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:55:13.984 [DEBUG] [Thread-135310 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:55:14.000 [DEBUG] [Thread-135308] [transport.py] [_log()] userauth is OK
2025-12-31T21:55:14.000 [DEBUG] [Thread-135308] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:55:14.000 [DEBUG] [Thread-135308] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:55:14.001 [DEBUG] [Thread-135308] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T21:55:14.001 [DEBUG] [Thread-135308] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:55:14.019 [INFO] [Thread-135308] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:55:14.019 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T21:55:14.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:55:14.807 [DEBUG] [Thread-135308] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:55:14.807 [DEBUG] [Thread-135308] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:55:14.855 [DEBUG] [Thread-135308] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:55:14.855 [DEBUG] [Thread-135308] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:55:14.864 [DEBUG] [Thread-135308] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:55:14.874 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:55:14.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T21:55:14.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T21:55:14.892 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:55:14.893 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:55:14.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:55:14.901 [DEBUG] [Thread-135308] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:55:29.036 [DEBUG] [Thread-135311 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:55:44.069 [DEBUG] [Thread-135312 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:55:44.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T21:55:44.925 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T21:55:44.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T21:55:45.573 [DEBUG] [Thread-135313 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:55:45.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 21, 55, 32), 5.78, 68.9, 0.0, 22.41, 16.15, 0, 0, 0, 2, 0, 0),)
2025-12-31T21:55:45.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 21:55:32
2025-12-31T21:55:45.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T21:55:45.915 [DEBUG] [Thread-135314] [transport.py] [_log()] starting thread (client mode): 0xb1759990
2025-12-31T21:55:45.915 [DEBUG] [Thread-135314] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:55:45.937 [DEBUG] [Thread-135314] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T21:55:45.937 [INFO] [Thread-135314] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T21:55:45.941 [DEBUG] [Thread-135314] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:55:45.941 [DEBUG] [Thread-135314] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T21:55:45.941 [DEBUG] [Thread-135314] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:55:45.941 [DEBUG] [Thread-135314] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:55:45.941 [DEBUG] [Thread-135314] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:55:45.941 [DEBUG] [Thread-135314] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:55:45.941 [DEBUG] [Thread-135314] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:55:45.941 [DEBUG] [Thread-135314] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:55:45.941 [DEBUG] [Thread-135314] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:55:45.941 [DEBUG] [Thread-135314] [transport.py] [_log()] client lang: <none>
2025-12-31T21:55:45.941 [DEBUG] [Thread-135314] [transport.py] [_log()] server lang: <none>
2025-12-31T21:55:45.941 [DEBUG] [Thread-135314] [transport.py] [_log()] kex follows: False
2025-12-31T21:55:45.941 [DEBUG] [Thread-135314] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:55:45.941 [DEBUG] [Thread-135314] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:55:45.942 [DEBUG] [Thread-135314] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:55:45.942 [DEBUG] [Thread-135314] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:55:45.942 [DEBUG] [Thread-135314] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:55:45.942 [DEBUG] [Thread-135314] [transport.py] [_log()] Compression: none
2025-12-31T21:55:45.942 [DEBUG] [Thread-135314] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:55:45.960 [DEBUG] [Thread-135314] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:55:45.961 [DEBUG] [Thread-135314] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:55:45.961 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T21:55:45.962 [DEBUG] [Thread-135314] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T21:55:45.963 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:55:45.964 [DEBUG] [Thread-135314] [transport.py] [_log()] userauth is OK
2025-12-31T21:55:45.964 [DEBUG] [Thread-135314] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:55:45.965 [DEBUG] [Thread-135314] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:55:45.965 [DEBUG] [Thread-135314] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T21:55:45.965 [DEBUG] [Thread-135314] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:55:45.989 [INFO] [Thread-135314] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:55:45.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:55:46.624 [DEBUG] [Thread-135314] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:55:46.624 [DEBUG] [Thread-135314] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:55:46.625 [DEBUG] [Thread-135314] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T21:55:46.665 [DEBUG] [Thread-135314] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:55:46.665 [DEBUG] [Thread-135314] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:55:46.669 [DEBUG] [Thread-135314] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:55:46.681 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:55:46.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T21:55:46.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T21:55:46.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T21:55:46.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:55:46.692 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T21:55:46.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:55:46.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:55:46.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T21:55:46.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.829998 -999.00  +16.30   7.21     71  +11.20 1 2 1 1 1     0    0 4.13 -52.27 ZNEsW 13.8 7.2 191.6 17.3 17.3 -19.6 17.1 -19.1 17.0 -17.6 17.3 -18.6
2025-12-31T21:55:46.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T21:55:46.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T21:55:46.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.829998
2025-12-31T21:55:46.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T21:55:46.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T21:55:46.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T21:55:46.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T21:55:46.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T21:55:46.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T21:55:32', tmtdew=5.78, humidity=68.9, cloud=0.0, wind=22.41, temperature=16.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T21:55:32', seeing=1.09, atlas_timestamp='2025-12-31T19:55:11.827', atlas_cloud=2, atlas_rain=1, zp_data=[0.02925000000000111, 0.09675000000000011, 0.03974999999999973, 0.1454999999999984, 0.19849999999999923, 0.08025000000000126, 0.1379999999999999, 0.09825000000000017, 0.0389999999999997, 0.07000000000000028, 0.12824999999999953, 0.3260000000000005, 0.37899999999999956, 0.07824999999999882, -0.004999999999999005, 0.05799999999999983, 0.07975000000000065, 0.14550000000000018, 0.19649999999999856, 0.4052499999999988, 0.4184999999999981, 0.10224999999999795, -0.6167499999999997, -0.47325000000000017, 0.10099999999999909, 0.0965000000000007, 0.23525000000000063, -0.9484999999999992, 0.2699999999999996, 0.2635000000000014, -1.597999999999999, -1.5254999999999992, 0.13074999999999903], zp_timestamp='2025-12-31T19:52:00')
2025-12-31T21:55:46.695 [DEBUG] [Thread-135314] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:55:46.778 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T21:55:46.789 [DEBUG] [Thread-135317] [transport.py] [_log()] starting thread (client mode): 0xb1747f70
2025-12-31T21:55:46.789 [DEBUG] [Thread-135317] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:55:46.804 [DEBUG] [Thread-135317] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T21:55:46.804 [INFO] [Thread-135317] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T21:55:46.812 [DEBUG] [Thread-135317] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:55:46.812 [DEBUG] [Thread-135317] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T21:55:46.812 [DEBUG] [Thread-135317] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:55:46.812 [DEBUG] [Thread-135317] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:55:46.812 [DEBUG] [Thread-135317] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:55:46.812 [DEBUG] [Thread-135317] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:55:46.812 [DEBUG] [Thread-135317] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:55:46.813 [DEBUG] [Thread-135317] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:55:46.813 [DEBUG] [Thread-135317] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:55:46.813 [DEBUG] [Thread-135317] [transport.py] [_log()] client lang: <none>
2025-12-31T21:55:46.813 [DEBUG] [Thread-135317] [transport.py] [_log()] server lang: <none>
2025-12-31T21:55:46.813 [DEBUG] [Thread-135317] [transport.py] [_log()] kex follows: False
2025-12-31T21:55:46.813 [DEBUG] [Thread-135317] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:55:46.813 [DEBUG] [Thread-135317] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:55:46.813 [DEBUG] [Thread-135317] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:55:46.813 [DEBUG] [Thread-135317] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:55:46.813 [DEBUG] [Thread-135317] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:55:46.813 [DEBUG] [Thread-135317] [transport.py] [_log()] Compression: none
2025-12-31T21:55:46.813 [DEBUG] [Thread-135317] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:55:46.869 [DEBUG] [Thread-135317] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:55:46.870 [DEBUG] [Thread-135317] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:55:46.870 [DEBUG] [Thread-135317] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T21:55:46.871 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T21:55:46.871 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:55:46.925 [DEBUG] [Thread-135317] [transport.py] [_log()] userauth is OK
2025-12-31T21:55:46.925 [DEBUG] [Thread-135317] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:55:46.925 [DEBUG] [Thread-135317] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:55:46.925 [DEBUG] [Thread-135317] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T21:55:46.925 [DEBUG] [Thread-135317] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:55:46.944 [INFO] [Thread-135317] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:55:46.944 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T21:55:46.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:55:47.832 [DEBUG] [Thread-135317] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:55:47.832 [DEBUG] [Thread-135317] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:55:47.880 [DEBUG] [Thread-135317] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:55:47.880 [DEBUG] [Thread-135317] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:55:47.889 [DEBUG] [Thread-135317] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:55:47.898 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:55: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')
2025-12-31T21:55:47.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T21:55:47.916 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:55:47.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:55:47.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:55:47.925 [DEBUG] [Thread-135317] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:55:59.106 [DEBUG] [Thread-135319 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:56:07.457 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:56:07.458 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:56:14.151 [DEBUG] [Thread-135320 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:56:17.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T21:56:17.925 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T21:56:17.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T21:56:18.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 21, 56, 4), 5.76, 69.0, 0.0, 20.93, 16.17, 0, 0, 0, 2, 0, 0),)
2025-12-31T21:56:18.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 21:56:04
2025-12-31T21:56:18.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T21:56:18.917 [DEBUG] [Thread-135321] [transport.py] [_log()] starting thread (client mode): 0xb1758730
2025-12-31T21:56:18.917 [DEBUG] [Thread-135321] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:56:18.936 [DEBUG] [Thread-135321] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T21:56:18.936 [INFO] [Thread-135321] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T21:56:18.938 [DEBUG] [Thread-135321] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:56:18.938 [DEBUG] [Thread-135321] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T21:56:18.938 [DEBUG] [Thread-135321] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:56:18.938 [DEBUG] [Thread-135321] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:56:18.938 [DEBUG] [Thread-135321] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:56:18.938 [DEBUG] [Thread-135321] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:56:18.938 [DEBUG] [Thread-135321] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:56:18.938 [DEBUG] [Thread-135321] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:56:18.938 [DEBUG] [Thread-135321] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:56:18.938 [DEBUG] [Thread-135321] [transport.py] [_log()] client lang: <none>
2025-12-31T21:56:18.938 [DEBUG] [Thread-135321] [transport.py] [_log()] server lang: <none>
2025-12-31T21:56:18.938 [DEBUG] [Thread-135321] [transport.py] [_log()] kex follows: False
2025-12-31T21:56:18.938 [DEBUG] [Thread-135321] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:56:18.938 [DEBUG] [Thread-135321] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:56:18.938 [DEBUG] [Thread-135321] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:56:18.938 [DEBUG] [Thread-135321] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:56:18.938 [DEBUG] [Thread-135321] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:56:18.938 [DEBUG] [Thread-135321] [transport.py] [_log()] Compression: none
2025-12-31T21:56:18.938 [DEBUG] [Thread-135321] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:56:18.951 [DEBUG] [Thread-135321] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:56:18.951 [DEBUG] [Thread-135321] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:56:18.952 [DEBUG] [Thread-135321] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T21:56:18.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T21:56:18.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:56:18.953 [DEBUG] [Thread-135321] [transport.py] [_log()] userauth is OK
2025-12-31T21:56:18.954 [DEBUG] [Thread-135321] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:56:18.954 [DEBUG] [Thread-135321] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:56:18.954 [DEBUG] [Thread-135321] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T21:56:18.954 [DEBUG] [Thread-135321] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:56:18.978 [INFO] [Thread-135321] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:56:18.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:56:19.636 [DEBUG] [Thread-135321] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:56:19.637 [DEBUG] [Thread-135321] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:56:19.637 [DEBUG] [Thread-135321] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T21:56:19.678 [DEBUG] [Thread-135321] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:56:19.678 [DEBUG] [Thread-135321] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:56:19.682 [DEBUG] [Thread-135321] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:56:19.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:56:19.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T21:56:19.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T21:56:19.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T21:56:19.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:56:19.706 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T21:56:19.707 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:56:19.707 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:56:19.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T21:56:19.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.830345 -999.00  +16.30  11.09     71  +11.20 1 2 1 1 1     0    0 4.23 -49.45 ZNEsw 13.3 11.1 188.6 18.9 17.3 -19.5 17.2 -18.8 17.0 -17.6 17.3 -18.7
2025-12-31T21:56:19.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T21:56:19.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T21:56:19.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.830345
2025-12-31T21:56:19.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T21:56:19.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T21:56:19.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T21:56:19.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T21:56:19.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T21:56:19.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T21:56:04', tmtdew=5.76, humidity=69.0, cloud=0.0, wind=20.93, temperature=16.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T21:56:04', seeing=1.1, atlas_timestamp='2025-12-31T19:55:41.808', atlas_cloud=2, atlas_rain=1, zp_data=[0.02925000000000111, 0.09675000000000011, 0.03974999999999973, 0.1454999999999984, 0.19849999999999923, 0.08025000000000126, 0.1379999999999999, 0.09825000000000017, 0.0389999999999997, 0.07000000000000028, 0.12824999999999953, 0.3260000000000005, 0.37899999999999956, 0.07824999999999882, -0.004999999999999005, 0.05799999999999983, 0.07975000000000065, 0.14550000000000018, 0.19649999999999856, 0.4052499999999988, 0.4184999999999981, 0.10224999999999795, -0.6167499999999997, -0.47325000000000017, 0.10099999999999909, 0.0965000000000007, 0.23525000000000063, -0.9484999999999992, 0.2699999999999996, 0.2635000000000014, -1.597999999999999, -1.5254999999999992, 0.13074999999999903], zp_timestamp='2025-12-31T19:52:00')
2025-12-31T21:56:19.709 [DEBUG] [Thread-135321] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:56:19.792 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T21:56:19.805 [DEBUG] [Thread-135324] [transport.py] [_log()] starting thread (client mode): 0xb9593670
2025-12-31T21:56:19.805 [DEBUG] [Thread-135324] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:56:19.820 [DEBUG] [Thread-135324] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T21:56:19.820 [INFO] [Thread-135324] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T21:56:19.827 [DEBUG] [Thread-135324] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:56:19.827 [DEBUG] [Thread-135324] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T21:56:19.828 [DEBUG] [Thread-135324] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:56:19.828 [DEBUG] [Thread-135324] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:56:19.828 [DEBUG] [Thread-135324] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:56:19.828 [DEBUG] [Thread-135324] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:56:19.828 [DEBUG] [Thread-135324] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:56:19.828 [DEBUG] [Thread-135324] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:56:19.828 [DEBUG] [Thread-135324] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:56:19.828 [DEBUG] [Thread-135324] [transport.py] [_log()] client lang: <none>
2025-12-31T21:56:19.828 [DEBUG] [Thread-135324] [transport.py] [_log()] server lang: <none>
2025-12-31T21:56:19.828 [DEBUG] [Thread-135324] [transport.py] [_log()] kex follows: False
2025-12-31T21:56:19.828 [DEBUG] [Thread-135324] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:56:19.828 [DEBUG] [Thread-135324] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:56:19.828 [DEBUG] [Thread-135324] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:56:19.828 [DEBUG] [Thread-135324] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:56:19.828 [DEBUG] [Thread-135324] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:56:19.828 [DEBUG] [Thread-135324] [transport.py] [_log()] Compression: none
2025-12-31T21:56:19.828 [DEBUG] [Thread-135324] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:56:19.883 [DEBUG] [Thread-135324] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:56:19.884 [DEBUG] [Thread-135324] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:56:19.885 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T21:56:19.885 [DEBUG] [Thread-135324] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T21:56:19.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:56:19.941 [DEBUG] [Thread-135324] [transport.py] [_log()] userauth is OK
2025-12-31T21:56:19.941 [DEBUG] [Thread-135324] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:56:19.941 [DEBUG] [Thread-135324] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:56:19.941 [DEBUG] [Thread-135324] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T21:56:19.941 [DEBUG] [Thread-135324] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:56:19.961 [INFO] [Thread-135324] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:56:19.961 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T21:56:19.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:56:20.775 [DEBUG] [Thread-135324] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:56:20.775 [DEBUG] [Thread-135324] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:56:20.823 [DEBUG] [Thread-135324] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:56:20.823 [DEBUG] [Thread-135324] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:56:20.833 [DEBUG] [Thread-135324] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:56:20.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:56:20.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-12-31T21:56:20.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-12-31T21:56:20.861 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:56:20.862 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:56:20.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:56:20.870 [DEBUG] [Thread-135324] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:56:29.182 [DEBUG] [Thread-135326 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:56:44.226 [DEBUG] [Thread-135327 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:56:45.657 [DEBUG] [Thread-135328 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:56:50.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T21:56:50.893 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T21:56:50.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T21:56:51.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 21, 56, 36), 5.67, 69.15, 0.0, 20.71, 16.14, 0, 0, 0, 2, 0, 0),)
2025-12-31T21:56:51.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 21:56:36
2025-12-31T21:56:51.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T21:56:51.935 [DEBUG] [Thread-135329] [transport.py] [_log()] starting thread (client mode): 0xb1786770
2025-12-31T21:56:51.935 [DEBUG] [Thread-135329] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:56:51.956 [DEBUG] [Thread-135329] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T21:56:51.957 [INFO] [Thread-135329] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T21:56:51.960 [DEBUG] [Thread-135329] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:56:51.960 [DEBUG] [Thread-135329] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T21:56:51.960 [DEBUG] [Thread-135329] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:56:51.960 [DEBUG] [Thread-135329] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:56:51.960 [DEBUG] [Thread-135329] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:56:51.960 [DEBUG] [Thread-135329] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:56:51.960 [DEBUG] [Thread-135329] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:56:51.960 [DEBUG] [Thread-135329] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:56:51.960 [DEBUG] [Thread-135329] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:56:51.960 [DEBUG] [Thread-135329] [transport.py] [_log()] client lang: <none>
2025-12-31T21:56:51.960 [DEBUG] [Thread-135329] [transport.py] [_log()] server lang: <none>
2025-12-31T21:56:51.960 [DEBUG] [Thread-135329] [transport.py] [_log()] kex follows: False
2025-12-31T21:56:51.960 [DEBUG] [Thread-135329] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:56:51.960 [DEBUG] [Thread-135329] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:56:51.960 [DEBUG] [Thread-135329] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:56:51.960 [DEBUG] [Thread-135329] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:56:51.960 [DEBUG] [Thread-135329] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:56:51.960 [DEBUG] [Thread-135329] [transport.py] [_log()] Compression: none
2025-12-31T21:56:51.960 [DEBUG] [Thread-135329] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:56:51.975 [DEBUG] [Thread-135329] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:56:51.975 [DEBUG] [Thread-135329] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:56:51.976 [DEBUG] [Thread-135329] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T21:56:51.976 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T21:56:51.976 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:56:51.976 [DEBUG] [Thread-135329] [transport.py] [_log()] userauth is OK
2025-12-31T21:56:51.976 [DEBUG] [Thread-135329] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:56:51.977 [DEBUG] [Thread-135329] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:56:51.977 [DEBUG] [Thread-135329] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T21:56:51.977 [DEBUG] [Thread-135329] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:56:51.993 [INFO] [Thread-135329] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:56:51.993 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:56:52.641 [DEBUG] [Thread-135329] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:56:52.641 [DEBUG] [Thread-135329] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:56:52.641 [DEBUG] [Thread-135329] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T21:56:52.682 [DEBUG] [Thread-135329] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:56:52.682 [DEBUG] [Thread-135329] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:56:52.684 [DEBUG] [Thread-135329] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:56:52.697 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:56:52.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T21:56:52.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T21:56:52.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T21:56:52.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:56:52.704 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T21:56:52.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:56:52.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:56:52.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T21:56:52.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.830693 -999.00  +16.30  17.03     72  +11.20 1 2 1 1 1     0    0 4.21 -46.27 ZNEsw 12.5 17.0 198.0 23.3 17.3 -19.5 17.2 -18.8 17.1 -17.5 17.3 -18.6
2025-12-31T21:56:52.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T21:56:52.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T21:56:52.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.830693
2025-12-31T21:56:52.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T21:56:52.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T21:56:52.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T21:56:52.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T21:56:52.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T21:56:52.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T21:56:36', tmtdew=5.67, humidity=69.15, cloud=0.0, wind=20.71, temperature=16.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T21:56:36', seeing=1.32, atlas_timestamp='2025-12-31T19:56:11.875', atlas_cloud=2, atlas_rain=1, zp_data=[0.2517499999999995, 0.2242500000000014, 0.18925000000000125, 0.40499999999999936, 0.41549999999999976, 0.32425000000000104, 0.34949999999999903, 0.3072499999999998, 0.37049999999999983, 0.32699999999999996, 0.6187499999999995, 0.8259999999999996, 0.504999999999999, 0.21325000000000038, 0.37899999999999956, 0.125, 0.13724999999999987, 0.41549999999999976, 0.8059999999999992, 1.396749999999999, 0.4739999999999984, 0.16574999999999918, -0.3667499999999997, -0.20124999999999993, 0.05099999999999838, 0.2270000000000003, 0.7767499999999998, -0.785499999999999, 0.2965, 0.005000000000000782, -1.1879999999999988, -1.4689999999999994, 0.13624999999999865], zp_timestamp='2025-12-31T19:56:00')
2025-12-31T21:56:52.705 [DEBUG] [Thread-135329] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:56:52.778 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T21:56:52.790 [DEBUG] [Thread-135332] [transport.py] [_log()] starting thread (client mode): 0xb17862f0
2025-12-31T21:56:52.790 [DEBUG] [Thread-135332] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:56:52.805 [DEBUG] [Thread-135332] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T21:56:52.805 [INFO] [Thread-135332] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T21:56:52.813 [DEBUG] [Thread-135332] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:56:52.813 [DEBUG] [Thread-135332] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T21:56:52.813 [DEBUG] [Thread-135332] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:56:52.813 [DEBUG] [Thread-135332] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:56:52.813 [DEBUG] [Thread-135332] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:56:52.813 [DEBUG] [Thread-135332] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:56:52.813 [DEBUG] [Thread-135332] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:56:52.813 [DEBUG] [Thread-135332] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:56:52.813 [DEBUG] [Thread-135332] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:56:52.813 [DEBUG] [Thread-135332] [transport.py] [_log()] client lang: <none>
2025-12-31T21:56:52.813 [DEBUG] [Thread-135332] [transport.py] [_log()] server lang: <none>
2025-12-31T21:56:52.813 [DEBUG] [Thread-135332] [transport.py] [_log()] kex follows: False
2025-12-31T21:56:52.813 [DEBUG] [Thread-135332] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:56:52.813 [DEBUG] [Thread-135332] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:56:52.813 [DEBUG] [Thread-135332] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:56:52.813 [DEBUG] [Thread-135332] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:56:52.813 [DEBUG] [Thread-135332] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:56:52.813 [DEBUG] [Thread-135332] [transport.py] [_log()] Compression: none
2025-12-31T21:56:52.813 [DEBUG] [Thread-135332] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:56:52.871 [DEBUG] [Thread-135332] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:56:52.871 [DEBUG] [Thread-135332] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:56:52.871 [DEBUG] [Thread-135332] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T21:56:52.871 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T21:56:52.871 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:56:52.928 [DEBUG] [Thread-135332] [transport.py] [_log()] userauth is OK
2025-12-31T21:56:52.934 [DEBUG] [Thread-135332] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:56:52.934 [DEBUG] [Thread-135332] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:56:52.934 [DEBUG] [Thread-135332] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T21:56:52.934 [DEBUG] [Thread-135332] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:56:52.948 [INFO] [Thread-135332] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:56:52.948 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T21:56:52.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:56:53.796 [DEBUG] [Thread-135332] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:56:53.796 [DEBUG] [Thread-135332] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:56:53.844 [DEBUG] [Thread-135332] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:56:53.844 [DEBUG] [Thread-135332] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:56:53.852 [DEBUG] [Thread-135332] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:56:53.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:56:53.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T21:56:53.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T21:56:53.876 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:56:53.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:56:53.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:56:53.884 [DEBUG] [Thread-135332] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:56:59.263 [DEBUG] [Thread-135334 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:57:07.659 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:57:07.660 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:57:14.311 [DEBUG] [Thread-135335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:57:23.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T21:57:23.899 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T21:57:23.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T21:57:24.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 21, 57, 8), 5.65, 69.23, 0.0, 18.56, 16.17, 0, 0, 0, 2, 0, 0),)
2025-12-31T21:57:24.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 21:57:08
2025-12-31T21:57:24.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T21:57:24.904 [DEBUG] [Thread-135336] [transport.py] [_log()] starting thread (client mode): 0xb95d5cf0
2025-12-31T21:57:24.904 [DEBUG] [Thread-135336] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:57:24.924 [DEBUG] [Thread-135336] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T21:57:24.924 [INFO] [Thread-135336] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T21:57:24.927 [DEBUG] [Thread-135336] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:57:24.927 [DEBUG] [Thread-135336] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T21:57:24.927 [DEBUG] [Thread-135336] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:57:24.928 [DEBUG] [Thread-135336] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:57:24.928 [DEBUG] [Thread-135336] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:57:24.928 [DEBUG] [Thread-135336] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:57:24.928 [DEBUG] [Thread-135336] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:57:24.928 [DEBUG] [Thread-135336] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:57:24.928 [DEBUG] [Thread-135336] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:57:24.928 [DEBUG] [Thread-135336] [transport.py] [_log()] client lang: <none>
2025-12-31T21:57:24.928 [DEBUG] [Thread-135336] [transport.py] [_log()] server lang: <none>
2025-12-31T21:57:24.928 [DEBUG] [Thread-135336] [transport.py] [_log()] kex follows: False
2025-12-31T21:57:24.928 [DEBUG] [Thread-135336] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:57:24.928 [DEBUG] [Thread-135336] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:57:24.928 [DEBUG] [Thread-135336] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:57:24.928 [DEBUG] [Thread-135336] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:57:24.929 [DEBUG] [Thread-135336] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:57:24.929 [DEBUG] [Thread-135336] [transport.py] [_log()] Compression: none
2025-12-31T21:57:24.929 [DEBUG] [Thread-135336] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:57:24.938 [DEBUG] [Thread-135336] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:57:24.938 [DEBUG] [Thread-135336] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:57:24.939 [DEBUG] [Thread-135336] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T21:57:24.939 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T21:57:24.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:57:24.981 [DEBUG] [Thread-135336] [transport.py] [_log()] userauth is OK
2025-12-31T21:57:24.982 [DEBUG] [Thread-135336] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:57:24.982 [DEBUG] [Thread-135336] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:57:24.982 [DEBUG] [Thread-135336] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T21:57:24.982 [DEBUG] [Thread-135336] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:57:25.016 [INFO] [Thread-135336] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:57:25.017 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:57:25.681 [DEBUG] [Thread-135336] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:57:25.681 [DEBUG] [Thread-135336] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:57:25.682 [DEBUG] [Thread-135336] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T21:57:25.723 [DEBUG] [Thread-135336] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:57:25.723 [DEBUG] [Thread-135336] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:57:25.726 [DEBUG] [Thread-135336] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:57:25.734 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:57:25.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T21:57:25.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T21:57:25.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T21:57:25.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:57:25.744 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T21:57:25.744 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:57:25.744 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:57:25.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T21:57:25.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.831387 -999.00  +16.30  15.94     72  +11.30 1 2 1 1 1     0    0 4.22 -45.50 ZNE.w 13.8 15.9 191.4 23.7 17.3 -19.3 17.1 -18.3 17.0 -17.3 17.2 -18.4
2025-12-31T21:57:25.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T21:57:25.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T21:57:25.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.831387
2025-12-31T21:57:25.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T21:57:25.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T21:57:25.746 [DEBUG] [Thread-135336] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:57:25.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T21:57:25.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T21:57:25.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T21:57:25.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T21:57:08', tmtdew=5.65, humidity=69.23, cloud=0.0, wind=18.56, temperature=16.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T21:57:08', seeing=1.32, atlas_timestamp='2025-12-31T19:57:11.837', atlas_cloud=2, atlas_rain=1, zp_data=[0.2517499999999995, 0.2242500000000014, 0.18925000000000125, 0.40499999999999936, 0.41549999999999976, 0.32425000000000104, 0.34949999999999903, 0.3072499999999998, 0.37049999999999983, 0.32699999999999996, 0.6187499999999995, 0.8259999999999996, 0.504999999999999, 0.21325000000000038, 0.37899999999999956, 0.125, 0.13724999999999987, 0.41549999999999976, 0.8059999999999992, 1.396749999999999, 0.4739999999999984, 0.16574999999999918, -0.3667499999999997, -0.20124999999999993, 0.05099999999999838, 0.2270000000000003, 0.7767499999999998, -0.785499999999999, 0.2965, 0.005000000000000782, -1.1879999999999988, -1.4689999999999994, 0.13624999999999865], zp_timestamp='2025-12-31T19:56:00')
2025-12-31T21:57:25.834 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T21:57:25.846 [DEBUG] [Thread-135339] [transport.py] [_log()] starting thread (client mode): 0xb1796fb0
2025-12-31T21:57:25.846 [DEBUG] [Thread-135339] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:57:25.860 [DEBUG] [Thread-135339] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T21:57:25.860 [INFO] [Thread-135339] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T21:57:25.868 [DEBUG] [Thread-135339] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:57:25.868 [DEBUG] [Thread-135339] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T21:57:25.868 [DEBUG] [Thread-135339] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:57:25.868 [DEBUG] [Thread-135339] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:57:25.868 [DEBUG] [Thread-135339] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:57:25.868 [DEBUG] [Thread-135339] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:57:25.868 [DEBUG] [Thread-135339] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:57:25.868 [DEBUG] [Thread-135339] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:57:25.869 [DEBUG] [Thread-135339] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:57:25.869 [DEBUG] [Thread-135339] [transport.py] [_log()] client lang: <none>
2025-12-31T21:57:25.869 [DEBUG] [Thread-135339] [transport.py] [_log()] server lang: <none>
2025-12-31T21:57:25.869 [DEBUG] [Thread-135339] [transport.py] [_log()] kex follows: False
2025-12-31T21:57:25.869 [DEBUG] [Thread-135339] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:57:25.869 [DEBUG] [Thread-135339] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:57:25.869 [DEBUG] [Thread-135339] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:57:25.869 [DEBUG] [Thread-135339] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:57:25.869 [DEBUG] [Thread-135339] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:57:25.869 [DEBUG] [Thread-135339] [transport.py] [_log()] Compression: none
2025-12-31T21:57:25.869 [DEBUG] [Thread-135339] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:57:25.927 [DEBUG] [Thread-135339] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:57:25.928 [DEBUG] [Thread-135339] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:57:25.928 [DEBUG] [Thread-135339] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T21:57:25.928 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T21:57:25.929 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:57:25.988 [DEBUG] [Thread-135339] [transport.py] [_log()] userauth is OK
2025-12-31T21:57:25.989 [DEBUG] [Thread-135339] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:57:25.989 [DEBUG] [Thread-135339] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:57:25.989 [DEBUG] [Thread-135339] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T21:57:25.989 [DEBUG] [Thread-135339] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:57:26.007 [INFO] [Thread-135339] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:57:26.008 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T21:57:26.009 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:57:26.835 [DEBUG] [Thread-135339] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:57:26.836 [DEBUG] [Thread-135339] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:57:26.885 [DEBUG] [Thread-135339] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:57:26.885 [DEBUG] [Thread-135339] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:57:26.894 [DEBUG] [Thread-135339] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:57:26.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:57:26.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T21:57:26.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T21:57:26.921 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:57:26.921 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:57:26.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:57:26.929 [DEBUG] [Thread-135339] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:57:29.345 [DEBUG] [Thread-135341 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:57:44.386 [DEBUG] [Thread-135342 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:57:45.718 [DEBUG] [Thread-135343 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:57:56.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T21:57:56.949 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T21:57:56.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T21:57:57.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 21, 57, 40), 5.65, 69.26, 0.0, 18.44, 16.14, 0, 0, 0, 2, 0, 0),)
2025-12-31T21:57:57.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 21:57:40
2025-12-31T21:57:57.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T21:57:57.942 [DEBUG] [Thread-135344] [transport.py] [_log()] starting thread (client mode): 0xb1785810
2025-12-31T21:57:57.942 [DEBUG] [Thread-135344] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:57:57.962 [DEBUG] [Thread-135344] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T21:57:57.963 [INFO] [Thread-135344] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T21:57:57.966 [DEBUG] [Thread-135344] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:57:57.966 [DEBUG] [Thread-135344] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T21:57:57.966 [DEBUG] [Thread-135344] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:57:57.967 [DEBUG] [Thread-135344] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:57:57.967 [DEBUG] [Thread-135344] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:57:57.967 [DEBUG] [Thread-135344] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:57:57.967 [DEBUG] [Thread-135344] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:57:57.967 [DEBUG] [Thread-135344] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:57:57.967 [DEBUG] [Thread-135344] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:57:57.967 [DEBUG] [Thread-135344] [transport.py] [_log()] client lang: <none>
2025-12-31T21:57:57.967 [DEBUG] [Thread-135344] [transport.py] [_log()] server lang: <none>
2025-12-31T21:57:57.967 [DEBUG] [Thread-135344] [transport.py] [_log()] kex follows: False
2025-12-31T21:57:57.968 [DEBUG] [Thread-135344] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:57:57.968 [DEBUG] [Thread-135344] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:57:57.968 [DEBUG] [Thread-135344] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:57:57.968 [DEBUG] [Thread-135344] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:57:57.968 [DEBUG] [Thread-135344] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:57:57.968 [DEBUG] [Thread-135344] [transport.py] [_log()] Compression: none
2025-12-31T21:57:57.968 [DEBUG] [Thread-135344] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:57:57.987 [DEBUG] [Thread-135344] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:57:57.988 [DEBUG] [Thread-135344] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:57:57.989 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T21:57:57.989 [DEBUG] [Thread-135344] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T21:57:57.990 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:57:57.991 [DEBUG] [Thread-135344] [transport.py] [_log()] userauth is OK
2025-12-31T21:57:57.991 [DEBUG] [Thread-135344] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:57:57.991 [DEBUG] [Thread-135344] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:57:57.992 [DEBUG] [Thread-135344] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T21:57:57.992 [DEBUG] [Thread-135344] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:57:58.016 [INFO] [Thread-135344] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:57:58.017 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:57:58.660 [DEBUG] [Thread-135344] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:57:58.661 [DEBUG] [Thread-135344] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:57:58.661 [DEBUG] [Thread-135344] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T21:57:58.701 [DEBUG] [Thread-135344] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:57:58.701 [DEBUG] [Thread-135344] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:57:58.704 [DEBUG] [Thread-135344] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:57:58.718 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:57:58.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T21:57:58.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T21:57:58.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T21:57:58.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:57:58.731 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T21:57:58.732 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:57:58.732 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:57:58.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T21:57:58.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.831734 -999.00  +16.30  19.35     72  +11.30 1 2 1 1 1     0    0 4.28 -43.16 ZNEsW 14.1 19.4 206.8 21.5 17.3 -19.0 17.1 -18.3 16.9 -17.3 17.2 -18.3
2025-12-31T21:57:58.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T21:57:58.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T21:57:58.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.831734
2025-12-31T21:57:58.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T21:57:58.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T21:57:58.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T21:57:58.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T21:57:58.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T21:57:58.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T21:57:40', tmtdew=5.65, humidity=69.26, cloud=0.0, wind=18.44, temperature=16.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T21:57:41', seeing=1.34, atlas_timestamp='2025-12-31T19:57:41.818', atlas_cloud=2, atlas_rain=1, zp_data=[0.2517499999999995, 0.2242500000000014, 0.18925000000000125, 0.40499999999999936, 0.41549999999999976, 0.32425000000000104, 0.34949999999999903, 0.3072499999999998, 0.37049999999999983, 0.32699999999999996, 0.6187499999999995, 0.8259999999999996, 0.504999999999999, 0.21325000000000038, 0.37899999999999956, 0.125, 0.13724999999999987, 0.41549999999999976, 0.8059999999999992, 1.396749999999999, 0.4739999999999984, 0.16574999999999918, -0.3667499999999997, -0.20124999999999993, 0.05099999999999838, 0.2270000000000003, 0.7767499999999998, -0.785499999999999, 0.2965, 0.005000000000000782, -1.1879999999999988, -1.4689999999999994, 0.13624999999999865], zp_timestamp='2025-12-31T19:56:00')
2025-12-31T21:57:58.734 [DEBUG] [Thread-135344] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:57: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-12-31T21:57:58.830 [DEBUG] [Thread-135347] [transport.py] [_log()] starting thread (client mode): 0xb1747880
2025-12-31T21:57:58.830 [DEBUG] [Thread-135347] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:57:58.844 [DEBUG] [Thread-135347] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T21:57:58.844 [INFO] [Thread-135347] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T21:57:58.855 [DEBUG] [Thread-135347] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:57:58.856 [DEBUG] [Thread-135347] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T21:57:58.856 [DEBUG] [Thread-135347] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:57:58.856 [DEBUG] [Thread-135347] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:57:58.856 [DEBUG] [Thread-135347] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:57:58.856 [DEBUG] [Thread-135347] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:57:58.856 [DEBUG] [Thread-135347] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:57:58.856 [DEBUG] [Thread-135347] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:57:58.856 [DEBUG] [Thread-135347] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:57:58.856 [DEBUG] [Thread-135347] [transport.py] [_log()] client lang: <none>
2025-12-31T21:57:58.856 [DEBUG] [Thread-135347] [transport.py] [_log()] server lang: <none>
2025-12-31T21:57:58.856 [DEBUG] [Thread-135347] [transport.py] [_log()] kex follows: False
2025-12-31T21:57:58.856 [DEBUG] [Thread-135347] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:57:58.856 [DEBUG] [Thread-135347] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:57:58.857 [DEBUG] [Thread-135347] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:57:58.857 [DEBUG] [Thread-135347] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:57:58.857 [DEBUG] [Thread-135347] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:57:58.857 [DEBUG] [Thread-135347] [transport.py] [_log()] Compression: none
2025-12-31T21:57:58.857 [DEBUG] [Thread-135347] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:57:58.911 [DEBUG] [Thread-135347] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:57:58.912 [DEBUG] [Thread-135347] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:57:58.912 [DEBUG] [Thread-135347] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T21:57:58.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T21:57:58.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:57:58.972 [DEBUG] [Thread-135347] [transport.py] [_log()] userauth is OK
2025-12-31T21:57:58.972 [DEBUG] [Thread-135347] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:57:58.972 [DEBUG] [Thread-135347] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:57:58.973 [DEBUG] [Thread-135347] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T21:57:58.973 [DEBUG] [Thread-135347] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:57:58.994 [INFO] [Thread-135347] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:57: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-12-31T21:57:58.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:57:59.422 [DEBUG] [Thread-135349 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:57:59.812 [DEBUG] [Thread-135347] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:57:59.812 [DEBUG] [Thread-135347] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:57:59.860 [DEBUG] [Thread-135347] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:57:59.860 [DEBUG] [Thread-135347] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:57:59.870 [DEBUG] [Thread-135347] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:57:59.879 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:57:59.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T21:57:59.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-12-31T21:57:59.898 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:57:59.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:57:59.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:57:59.907 [DEBUG] [Thread-135347] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:58:07.862 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:58:07.862 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:58:14.470 [DEBUG] [Thread-135350 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:58:29.506 [DEBUG] [Thread-135351 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:58:29.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T21:58:29.929 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T21:58:29.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-12-31T21:58:30.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 21, 58, 13), 5.64, 69.3, 0.0, 21.4, 16.09, 0, 0, 0, 2, 0, 0),)
2025-12-31T21:58:30.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 21:58:13
2025-12-31T21:58:30.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T21:58:30.900 [DEBUG] [Thread-135352] [transport.py] [_log()] starting thread (client mode): 0xb95d6680
2025-12-31T21:58:30.900 [DEBUG] [Thread-135352] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:58:30.921 [DEBUG] [Thread-135352] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T21:58:30.921 [INFO] [Thread-135352] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T21:58:30.924 [DEBUG] [Thread-135352] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:58:30.924 [DEBUG] [Thread-135352] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T21:58:30.924 [DEBUG] [Thread-135352] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:58:30.924 [DEBUG] [Thread-135352] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:58:30.924 [DEBUG] [Thread-135352] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:58:30.925 [DEBUG] [Thread-135352] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:58:30.925 [DEBUG] [Thread-135352] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:58:30.925 [DEBUG] [Thread-135352] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:58:30.925 [DEBUG] [Thread-135352] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:58:30.925 [DEBUG] [Thread-135352] [transport.py] [_log()] client lang: <none>
2025-12-31T21:58:30.925 [DEBUG] [Thread-135352] [transport.py] [_log()] server lang: <none>
2025-12-31T21:58:30.925 [DEBUG] [Thread-135352] [transport.py] [_log()] kex follows: False
2025-12-31T21:58:30.925 [DEBUG] [Thread-135352] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:58:30.925 [DEBUG] [Thread-135352] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:58:30.925 [DEBUG] [Thread-135352] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:58:30.925 [DEBUG] [Thread-135352] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:58:30.925 [DEBUG] [Thread-135352] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:58:30.925 [DEBUG] [Thread-135352] [transport.py] [_log()] Compression: none
2025-12-31T21:58:30.925 [DEBUG] [Thread-135352] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:58:30.943 [DEBUG] [Thread-135352] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:58:30.943 [DEBUG] [Thread-135352] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:58:30.944 [DEBUG] [Thread-135352] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T21:58:30.944 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T21:58:30.945 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:58:30.946 [DEBUG] [Thread-135352] [transport.py] [_log()] userauth is OK
2025-12-31T21:58:30.946 [DEBUG] [Thread-135352] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:58:30.947 [DEBUG] [Thread-135352] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:58:30.947 [DEBUG] [Thread-135352] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T21:58:30.947 [DEBUG] [Thread-135352] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:58:30.963 [INFO] [Thread-135352] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:58:30.965 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:58:31.604 [DEBUG] [Thread-135352] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:58:31.604 [DEBUG] [Thread-135352] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:58:31.605 [DEBUG] [Thread-135352] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T21:58:31.645 [DEBUG] [Thread-135352] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:58:31.646 [DEBUG] [Thread-135352] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:58:31.648 [DEBUG] [Thread-135352] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:58:31.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:58:31.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T21:58:31.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T21:58:31.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T21:58:31.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:58:31.672 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T21:58:31.673 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:58:31.673 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:58:31.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T21:58:31.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.832081 -999.00  +16.30   9.14     72  +11.30 1 1 1 1 1     0    0 4.38 -41.02 ZNESW 7.4 9.1 198.2 17.5 17.2 -19.0 17.1 -18.2 17.0 -17.3 17.2 -18.3
2025-12-31T21:58:31.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T21:58:31.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T21:58:31.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.832081
2025-12-31T21:58:31.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T21:58:31.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T21:58:31.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T21:58:31.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T21:58:31.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T21:58:31.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T21:58:13', tmtdew=5.64, humidity=69.3, cloud=0.0, wind=21.4, temperature=16.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T21:58:13', seeing=1.59, atlas_timestamp='2025-12-31T19:58:11.798', atlas_cloud=1, atlas_rain=1, zp_data=[0.2517499999999995, 0.2242500000000014, 0.18925000000000125, 0.40499999999999936, 0.41549999999999976, 0.32425000000000104, 0.34949999999999903, 0.3072499999999998, 0.37049999999999983, 0.32699999999999996, 0.6187499999999995, 0.8259999999999996, 0.504999999999999, 0.21325000000000038, 0.37899999999999956, 0.125, 0.13724999999999987, 0.41549999999999976, 0.8059999999999992, 1.396749999999999, 0.4739999999999984, 0.16574999999999918, -0.3667499999999997, -0.20124999999999993, 0.05099999999999838, 0.2270000000000003, 0.7767499999999998, -0.785499999999999, 0.2965, 0.005000000000000782, -1.1879999999999988, -1.4689999999999994, 0.13624999999999865], zp_timestamp='2025-12-31T19:56:00')
2025-12-31T21:58:31.676 [DEBUG] [Thread-135352] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:58:31.759 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T21:58:31.771 [DEBUG] [Thread-135355] [transport.py] [_log()] starting thread (client mode): 0xb17777f0
2025-12-31T21:58:31.771 [DEBUG] [Thread-135355] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:58:31.786 [DEBUG] [Thread-135355] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T21:58:31.786 [INFO] [Thread-135355] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T21:58:31.793 [DEBUG] [Thread-135355] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:58:31.794 [DEBUG] [Thread-135355] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T21:58:31.794 [DEBUG] [Thread-135355] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:58:31.794 [DEBUG] [Thread-135355] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:58:31.794 [DEBUG] [Thread-135355] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:58:31.794 [DEBUG] [Thread-135355] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:58:31.794 [DEBUG] [Thread-135355] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:58:31.795 [DEBUG] [Thread-135355] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:58:31.795 [DEBUG] [Thread-135355] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:58:31.795 [DEBUG] [Thread-135355] [transport.py] [_log()] client lang: <none>
2025-12-31T21:58:31.795 [DEBUG] [Thread-135355] [transport.py] [_log()] server lang: <none>
2025-12-31T21:58:31.795 [DEBUG] [Thread-135355] [transport.py] [_log()] kex follows: False
2025-12-31T21:58:31.795 [DEBUG] [Thread-135355] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:58:31.795 [DEBUG] [Thread-135355] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:58:31.795 [DEBUG] [Thread-135355] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:58:31.795 [DEBUG] [Thread-135355] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:58:31.795 [DEBUG] [Thread-135355] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:58:31.795 [DEBUG] [Thread-135355] [transport.py] [_log()] Compression: none
2025-12-31T21:58:31.795 [DEBUG] [Thread-135355] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:58:31.853 [DEBUG] [Thread-135355] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:58:31.853 [DEBUG] [Thread-135355] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:58:31.854 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T21:58:31.855 [DEBUG] [Thread-135355] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T21:58:31.855 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:58:31.909 [DEBUG] [Thread-135355] [transport.py] [_log()] userauth is OK
2025-12-31T21:58:31.909 [DEBUG] [Thread-135355] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:58:31.909 [DEBUG] [Thread-135355] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:58:31.909 [DEBUG] [Thread-135355] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T21:58:31.909 [DEBUG] [Thread-135355] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:58:31.928 [INFO] [Thread-135355] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:58:31.929 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T21:58:31.929 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:58:32.759 [DEBUG] [Thread-135355] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:58:32.759 [DEBUG] [Thread-135355] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:58:32.807 [DEBUG] [Thread-135355] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:58:32.807 [DEBUG] [Thread-135355] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:58:32.816 [DEBUG] [Thread-135355] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:58:32.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:58:32.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T21:58:32.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T21:58:32.844 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:58:32.844 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:58:32.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:58:32.853 [DEBUG] [Thread-135355] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:58:44.541 [DEBUG] [Thread-135357 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:58:45.774 [DEBUG] [Thread-135358 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:58:59.589 [DEBUG] [Thread-135359 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:59:02.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T21:59:02.849 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T21:59:02.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T21:59:03.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 21, 58, 45), 5.63, 69.35, 0.0, 23.89, 16.1, 0, 0, 0, 2, 0, 0),)
2025-12-31T21:59:03.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 21:58:45
2025-12-31T21:59:03.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T21:59:03.815 [DEBUG] [Thread-135360] [transport.py] [_log()] starting thread (client mode): 0xb95d71f0
2025-12-31T21:59:03.815 [DEBUG] [Thread-135360] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:59:03.835 [DEBUG] [Thread-135360] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T21:59:03.835 [INFO] [Thread-135360] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T21:59:03.836 [DEBUG] [Thread-135360] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:59:03.836 [DEBUG] [Thread-135360] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T21:59:03.836 [DEBUG] [Thread-135360] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:59:03.836 [DEBUG] [Thread-135360] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:59:03.836 [DEBUG] [Thread-135360] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:59:03.836 [DEBUG] [Thread-135360] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:59:03.836 [DEBUG] [Thread-135360] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:59:03.836 [DEBUG] [Thread-135360] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:59:03.836 [DEBUG] [Thread-135360] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:59:03.836 [DEBUG] [Thread-135360] [transport.py] [_log()] client lang: <none>
2025-12-31T21:59:03.836 [DEBUG] [Thread-135360] [transport.py] [_log()] server lang: <none>
2025-12-31T21:59:03.836 [DEBUG] [Thread-135360] [transport.py] [_log()] kex follows: False
2025-12-31T21:59:03.836 [DEBUG] [Thread-135360] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:59:03.836 [DEBUG] [Thread-135360] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:59:03.836 [DEBUG] [Thread-135360] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:59:03.836 [DEBUG] [Thread-135360] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:59:03.836 [DEBUG] [Thread-135360] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:59:03.836 [DEBUG] [Thread-135360] [transport.py] [_log()] Compression: none
2025-12-31T21:59:03.836 [DEBUG] [Thread-135360] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:59:03.845 [DEBUG] [Thread-135360] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:59:03.846 [DEBUG] [Thread-135360] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:59:03.846 [DEBUG] [Thread-135360] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T21:59:03.846 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T21:59:03.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:59:03.848 [DEBUG] [Thread-135360] [transport.py] [_log()] userauth is OK
2025-12-31T21:59:03.848 [DEBUG] [Thread-135360] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:59:03.848 [DEBUG] [Thread-135360] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:59:03.848 [DEBUG] [Thread-135360] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T21:59:03.848 [DEBUG] [Thread-135360] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:59:03.865 [INFO] [Thread-135360] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:59:03.865 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:59:04.514 [DEBUG] [Thread-135360] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:59:04.514 [DEBUG] [Thread-135360] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:59:04.515 [DEBUG] [Thread-135360] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T21:59:04.555 [DEBUG] [Thread-135360] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:59:04.555 [DEBUG] [Thread-135360] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:59:04.559 [DEBUG] [Thread-135360] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:59:04.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:59:04.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T21:59:04.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T21:59:04.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T21:59:04.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:59:04.585 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T21:59:04.585 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:59:04.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:59:04.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T21:59:04.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.832429 -999.00  +16.30  11.85     72  +11.30 1 1 1 1 1     0    0 4.38 -39.36 ZNESW 12.8 11.8 201.2 23.1 17.2 -18.9 17.1 -18.1 17.0 -17.2 17.3 -18.1
2025-12-31T21:59:04.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T21:59:04.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T21:59:04.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.832429
2025-12-31T21:59:04.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T21:59:04.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T21:59:04.588 [DEBUG] [Thread-135360] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:59:04.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T21:59:04.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T21:59:04.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T21:59:04.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T21:58:45', tmtdew=5.63, humidity=69.35, cloud=0.0, wind=23.89, temperature=16.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T21:58:45', seeing=1.62, atlas_timestamp='2025-12-31T19:58:41.866', atlas_cloud=1, atlas_rain=1, zp_data=[0.2517499999999995, 0.2242500000000014, 0.18925000000000125, 0.40499999999999936, 0.41549999999999976, 0.32425000000000104, 0.34949999999999903, 0.3072499999999998, 0.37049999999999983, 0.32699999999999996, 0.6187499999999995, 0.8259999999999996, 0.504999999999999, 0.21325000000000038, 0.37899999999999956, 0.125, 0.13724999999999987, 0.41549999999999976, 0.8059999999999992, 1.396749999999999, 0.4739999999999984, 0.16574999999999918, -0.3667499999999997, -0.20124999999999993, 0.05099999999999838, 0.2270000000000003, 0.7767499999999998, -0.785499999999999, 0.2965, 0.005000000000000782, -1.1879999999999988, -1.4689999999999994, 0.13624999999999865], zp_timestamp='2025-12-31T19:56:00')
2025-12-31T21:59:04.672 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T21:59:04.684 [DEBUG] [Thread-135363] [transport.py] [_log()] starting thread (client mode): 0xb17753f0
2025-12-31T21:59:04.684 [DEBUG] [Thread-135363] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:59:04.699 [DEBUG] [Thread-135363] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T21:59:04.700 [INFO] [Thread-135363] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T21:59:04.707 [DEBUG] [Thread-135363] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:59:04.707 [DEBUG] [Thread-135363] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T21:59:04.707 [DEBUG] [Thread-135363] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:59:04.707 [DEBUG] [Thread-135363] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:59:04.708 [DEBUG] [Thread-135363] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:59:04.708 [DEBUG] [Thread-135363] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:59:04.708 [DEBUG] [Thread-135363] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:59:04.708 [DEBUG] [Thread-135363] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:59:04.708 [DEBUG] [Thread-135363] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:59:04.708 [DEBUG] [Thread-135363] [transport.py] [_log()] client lang: <none>
2025-12-31T21:59:04.708 [DEBUG] [Thread-135363] [transport.py] [_log()] server lang: <none>
2025-12-31T21:59:04.708 [DEBUG] [Thread-135363] [transport.py] [_log()] kex follows: False
2025-12-31T21:59:04.708 [DEBUG] [Thread-135363] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:59:04.708 [DEBUG] [Thread-135363] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:59:04.708 [DEBUG] [Thread-135363] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:59:04.708 [DEBUG] [Thread-135363] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:59:04.708 [DEBUG] [Thread-135363] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:59:04.708 [DEBUG] [Thread-135363] [transport.py] [_log()] Compression: none
2025-12-31T21:59:04.708 [DEBUG] [Thread-135363] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:59:04.765 [DEBUG] [Thread-135363] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:59:04.766 [DEBUG] [Thread-135363] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:59:04.766 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T21:59:04.767 [DEBUG] [Thread-135363] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T21:59:04.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:59:04.826 [DEBUG] [Thread-135363] [transport.py] [_log()] userauth is OK
2025-12-31T21:59:04.826 [DEBUG] [Thread-135363] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:59:04.827 [DEBUG] [Thread-135363] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:59:04.827 [DEBUG] [Thread-135363] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T21:59:04.827 [DEBUG] [Thread-135363] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:59:04.844 [INFO] [Thread-135363] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:59:04.853 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T21:59:04.854 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:59:05.712 [DEBUG] [Thread-135363] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:59:05.712 [DEBUG] [Thread-135363] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:59:05.759 [DEBUG] [Thread-135363] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:59:05.759 [DEBUG] [Thread-135363] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:59:05.768 [DEBUG] [Thread-135363] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:59:05.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:59:05.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T21:59:05.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T21:59:05.793 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:59:05.793 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:59:05.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:59:05.801 [DEBUG] [Thread-135363] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:59:08.062 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:59:08.063 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:59:14.625 [DEBUG] [Thread-135365 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:59:29.670 [DEBUG] [Thread-135366 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:59:35.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T21:59:35.823 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T21:59:35.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T21:59:36.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 21, 59, 17), 5.6, 69.46, 0.0, 24.23, 16.12, 0, 0, 0, 2, 0, 0),)
2025-12-31T21:59:36.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 21:59:17
2025-12-31T21:59:36.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T21:59:36.802 [DEBUG] [Thread-135367] [transport.py] [_log()] starting thread (client mode): 0xb175b9a0
2025-12-31T21:59:36.802 [DEBUG] [Thread-135367] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:59:36.815 [DEBUG] [Thread-135367] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T21:59:36.815 [INFO] [Thread-135367] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T21:59:36.818 [DEBUG] [Thread-135367] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:59:36.819 [DEBUG] [Thread-135367] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T21:59:36.819 [DEBUG] [Thread-135367] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:59:36.819 [DEBUG] [Thread-135367] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:59:36.819 [DEBUG] [Thread-135367] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:59:36.819 [DEBUG] [Thread-135367] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:59:36.819 [DEBUG] [Thread-135367] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:59:36.819 [DEBUG] [Thread-135367] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:59:36.819 [DEBUG] [Thread-135367] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:59:36.819 [DEBUG] [Thread-135367] [transport.py] [_log()] client lang: <none>
2025-12-31T21:59:36.819 [DEBUG] [Thread-135367] [transport.py] [_log()] server lang: <none>
2025-12-31T21:59:36.819 [DEBUG] [Thread-135367] [transport.py] [_log()] kex follows: False
2025-12-31T21:59:36.819 [DEBUG] [Thread-135367] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:59:36.819 [DEBUG] [Thread-135367] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:59:36.819 [DEBUG] [Thread-135367] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:59:36.819 [DEBUG] [Thread-135367] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:59:36.819 [DEBUG] [Thread-135367] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:59:36.819 [DEBUG] [Thread-135367] [transport.py] [_log()] Compression: none
2025-12-31T21:59:36.819 [DEBUG] [Thread-135367] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:59:36.827 [DEBUG] [Thread-135367] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:59:36.827 [DEBUG] [Thread-135367] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:59:36.827 [DEBUG] [Thread-135367] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T21:59:36.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T21:59:36.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:59:36.829 [DEBUG] [Thread-135367] [transport.py] [_log()] userauth is OK
2025-12-31T21:59:36.829 [DEBUG] [Thread-135367] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:59:36.829 [DEBUG] [Thread-135367] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:59:36.829 [DEBUG] [Thread-135367] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T21:59:36.829 [DEBUG] [Thread-135367] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:59:36.843 [INFO] [Thread-135367] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:59:36.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:59:37.435 [DEBUG] [Thread-135367] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:59:37.435 [DEBUG] [Thread-135367] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:59:37.436 [DEBUG] [Thread-135367] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T21:59:37.476 [DEBUG] [Thread-135367] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:59:37.476 [DEBUG] [Thread-135367] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:59:37.479 [DEBUG] [Thread-135367] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:59:37.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:59:37.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T21:59:37.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T21:59:37.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T21:59:37.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:59:37.505 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T21:59:37.506 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:59:37.506 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:59:37.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T21:59:37.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.832776 -999.00  +16.30  12.95     72  +11.30 1 2 1 1 1     0    0 4.37 -38.74 ZNEsW 8.0 12.9 211.6 17.3 17.3 -18.9 17.1 -17.9 17.0 -17.1 17.3 -18.0
2025-12-31T21:59:37.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T21:59:37.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T21:59:37.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.832776
2025-12-31T21:59:37.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T21:59:37.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T21:59:37.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T21:59:37.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T21:59:37.508 [DEBUG] [Thread-135367] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:59:37.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T21:59:37.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T21:59:17', tmtdew=5.6, humidity=69.46, cloud=0.0, wind=24.23, temperature=16.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T21:59:17', seeing=1.29, atlas_timestamp='2025-12-31T19:59:11.846', atlas_cloud=2, atlas_rain=1, zp_data=[0.2517499999999995, 0.2242500000000014, 0.18925000000000125, 0.40499999999999936, 0.41549999999999976, 0.32425000000000104, 0.34949999999999903, 0.3072499999999998, 0.37049999999999983, 0.32699999999999996, 0.6187499999999995, 0.8259999999999996, 0.504999999999999, 0.21325000000000038, 0.37899999999999956, 0.125, 0.13724999999999987, 0.41549999999999976, 0.8059999999999992, 1.396749999999999, 0.4739999999999984, 0.16574999999999918, -0.3667499999999997, -0.20124999999999993, 0.05099999999999838, 0.2270000000000003, 0.7767499999999998, -0.785499999999999, 0.2965, 0.005000000000000782, -1.1879999999999988, -1.4689999999999994, 0.13624999999999865], zp_timestamp='2025-12-31T19:56:00')
2025-12-31T21:59:37.592 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T21:59:37.605 [DEBUG] [Thread-135370] [transport.py] [_log()] starting thread (client mode): 0xb95d5360
2025-12-31T21:59:37.605 [DEBUG] [Thread-135370] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T21:59:37.620 [DEBUG] [Thread-135370] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T21:59:37.620 [INFO] [Thread-135370] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T21:59:37.628 [DEBUG] [Thread-135370] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T21:59:37.628 [DEBUG] [Thread-135370] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T21:59:37.628 [DEBUG] [Thread-135370] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T21:59:37.629 [DEBUG] [Thread-135370] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:59:37.629 [DEBUG] [Thread-135370] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T21:59:37.629 [DEBUG] [Thread-135370] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:59:37.629 [DEBUG] [Thread-135370] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T21:59:37.629 [DEBUG] [Thread-135370] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T21:59:37.629 [DEBUG] [Thread-135370] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T21:59:37.629 [DEBUG] [Thread-135370] [transport.py] [_log()] client lang: <none>
2025-12-31T21:59:37.629 [DEBUG] [Thread-135370] [transport.py] [_log()] server lang: <none>
2025-12-31T21:59:37.630 [DEBUG] [Thread-135370] [transport.py] [_log()] kex follows: False
2025-12-31T21:59:37.630 [DEBUG] [Thread-135370] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T21:59:37.630 [DEBUG] [Thread-135370] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T21:59:37.630 [DEBUG] [Thread-135370] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T21:59:37.630 [DEBUG] [Thread-135370] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T21:59:37.631 [DEBUG] [Thread-135370] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T21:59:37.631 [DEBUG] [Thread-135370] [transport.py] [_log()] Compression: none
2025-12-31T21:59:37.631 [DEBUG] [Thread-135370] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T21:59:37.685 [DEBUG] [Thread-135370] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T21:59:37.686 [DEBUG] [Thread-135370] [transport.py] [_log()] Switch to new keys ...
2025-12-31T21:59:37.686 [DEBUG] [Thread-135370] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T21:59:37.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T21:59:37.687 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T21:59:37.742 [DEBUG] [Thread-135370] [transport.py] [_log()] userauth is OK
2025-12-31T21:59:37.742 [DEBUG] [Thread-135370] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T21:59:37.742 [DEBUG] [Thread-135370] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T21:59:37.742 [DEBUG] [Thread-135370] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T21:59:37.743 [DEBUG] [Thread-135370] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T21:59:37.761 [INFO] [Thread-135370] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T21:59:37.762 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T21:59:37.762 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T21:59:38.573 [DEBUG] [Thread-135370] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T21:59:38.574 [DEBUG] [Thread-135370] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T21:59:38.622 [DEBUG] [Thread-135370] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T21:59:38.622 [DEBUG] [Thread-135370] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T21:59:38.632 [DEBUG] [Thread-135370] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T21:59:38.641 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T21:59:38.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T21:59:38.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T21:59:38.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T21:59:38.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T21:59:38.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T21:59:38.668 [DEBUG] [Thread-135370] [transport.py] [_log()] EOF in transport thread
2025-12-31T21:59:44.704 [DEBUG] [Thread-135372 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:59:45.846 [DEBUG] [Thread-135373 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T21:59:59.765 [DEBUG] [Thread-135374 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:00:08.262 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:00:08.263 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:00:08.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T22:00:08.690 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T22:00:08.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T22:00:09.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 21, 59, 49), 5.55, 69.46, 0.0, 21.32, 16.09, 0, 0, 0, 2, 0, 0),)
2025-12-31T22:00:09.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 21:59:49
2025-12-31T22:00:09.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T22:00:09.666 [DEBUG] [Thread-135375] [transport.py] [_log()] starting thread (client mode): 0xb17978b0
2025-12-31T22:00:09.666 [DEBUG] [Thread-135375] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:00:09.685 [DEBUG] [Thread-135375] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T22:00:09.685 [INFO] [Thread-135375] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T22:00:09.688 [DEBUG] [Thread-135375] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:00:09.688 [DEBUG] [Thread-135375] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T22:00:09.688 [DEBUG] [Thread-135375] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:00:09.688 [DEBUG] [Thread-135375] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:00:09.688 [DEBUG] [Thread-135375] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:00:09.688 [DEBUG] [Thread-135375] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:00:09.688 [DEBUG] [Thread-135375] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:00:09.688 [DEBUG] [Thread-135375] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:00:09.688 [DEBUG] [Thread-135375] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:00:09.688 [DEBUG] [Thread-135375] [transport.py] [_log()] client lang: <none>
2025-12-31T22:00:09.688 [DEBUG] [Thread-135375] [transport.py] [_log()] server lang: <none>
2025-12-31T22:00:09.688 [DEBUG] [Thread-135375] [transport.py] [_log()] kex follows: False
2025-12-31T22:00:09.688 [DEBUG] [Thread-135375] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:00:09.688 [DEBUG] [Thread-135375] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:00:09.689 [DEBUG] [Thread-135375] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:00:09.689 [DEBUG] [Thread-135375] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:00:09.689 [DEBUG] [Thread-135375] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:00:09.689 [DEBUG] [Thread-135375] [transport.py] [_log()] Compression: none
2025-12-31T22:00:09.689 [DEBUG] [Thread-135375] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:00:09.708 [DEBUG] [Thread-135375] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:00:09.709 [DEBUG] [Thread-135375] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:00:09.709 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T22:00:09.710 [DEBUG] [Thread-135375] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T22:00:09.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:00:09.712 [DEBUG] [Thread-135375] [transport.py] [_log()] userauth is OK
2025-12-31T22:00:09.713 [DEBUG] [Thread-135375] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:00:09.713 [DEBUG] [Thread-135375] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:00:09.713 [DEBUG] [Thread-135375] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T22:00:09.713 [DEBUG] [Thread-135375] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:00:09.748 [INFO] [Thread-135375] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:00:09.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:00:14.798 [DEBUG] [Thread-135377 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:00:15.115 [DEBUG] [Thread-135375] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:00:15.115 [DEBUG] [Thread-135375] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:00:15.116 [DEBUG] [Thread-135375] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T22:00:15.156 [DEBUG] [Thread-135375] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:00:15.157 [DEBUG] [Thread-135375] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:00:15.160 [DEBUG] [Thread-135375] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:00:15.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:00:15.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T22:00:15.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T22:00:15.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T22:00:15.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:00:15.184 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T22:00:15.184 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:00:15.184 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:00:15.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T22:00:15.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.832776 -999.00  +16.30  12.95     72  +11.30 1 2 1 1 1     0    0 4.37 -38.74 ZNEsW 8.0 12.9 211.6 17.3 17.3 -18.9 17.1 -17.9 17.0 -17.1 17.3 -18.0
2025-12-31T22:00:15.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T22:00:15.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T22:00:15.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.832776
2025-12-31T22:00:15.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T22:00:15.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T22:00:15.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T22:00:15.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T22:00:15.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T22:00:15.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T21:59:49', tmtdew=5.55, humidity=69.46, cloud=0.0, wind=21.32, temperature=16.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T21:59:49', seeing=1.35, atlas_timestamp='2025-12-31T19:59:11.846', atlas_cloud=2, atlas_rain=1, zp_data=[0.2517499999999995, 0.2242500000000014, 0.18925000000000125, 0.40499999999999936, 0.41549999999999976, 0.32425000000000104, 0.34949999999999903, 0.3072499999999998, 0.37049999999999983, 0.32699999999999996, 0.6187499999999995, 0.8259999999999996, 0.504999999999999, 0.21325000000000038, 0.37899999999999956, 0.125, 0.13724999999999987, 0.41549999999999976, 0.8059999999999992, 1.396749999999999, 0.4739999999999984, 0.16574999999999918, -0.3667499999999997, -0.20124999999999993, 0.05099999999999838, 0.2270000000000003, 0.7767499999999998, -0.785499999999999, 0.2965, 0.005000000000000782, -1.1879999999999988, -1.4689999999999994, 0.13624999999999865], zp_timestamp='2025-12-31T19:58:00')
2025-12-31T22:00:15.187 [DEBUG] [Thread-135375] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:00:15.270 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T22:00:15.283 [DEBUG] [Thread-135379] [transport.py] [_log()] starting thread (client mode): 0xb17961a0
2025-12-31T22:00:15.283 [DEBUG] [Thread-135379] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:00:15.298 [DEBUG] [Thread-135379] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T22:00:15.299 [INFO] [Thread-135379] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T22:00:15.306 [DEBUG] [Thread-135379] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:00:15.307 [DEBUG] [Thread-135379] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T22:00:15.307 [DEBUG] [Thread-135379] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:00:15.307 [DEBUG] [Thread-135379] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:00:15.307 [DEBUG] [Thread-135379] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:00:15.307 [DEBUG] [Thread-135379] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:00:15.307 [DEBUG] [Thread-135379] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:00:15.307 [DEBUG] [Thread-135379] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:00:15.308 [DEBUG] [Thread-135379] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:00:15.308 [DEBUG] [Thread-135379] [transport.py] [_log()] client lang: <none>
2025-12-31T22:00:15.308 [DEBUG] [Thread-135379] [transport.py] [_log()] server lang: <none>
2025-12-31T22:00:15.308 [DEBUG] [Thread-135379] [transport.py] [_log()] kex follows: False
2025-12-31T22:00:15.308 [DEBUG] [Thread-135379] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:00:15.308 [DEBUG] [Thread-135379] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:00:15.308 [DEBUG] [Thread-135379] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:00:15.308 [DEBUG] [Thread-135379] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:00:15.309 [DEBUG] [Thread-135379] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:00:15.309 [DEBUG] [Thread-135379] [transport.py] [_log()] Compression: none
2025-12-31T22:00:15.309 [DEBUG] [Thread-135379] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:00:15.365 [DEBUG] [Thread-135379] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:00:15.366 [DEBUG] [Thread-135379] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:00:15.367 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T22:00:15.367 [DEBUG] [Thread-135379] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T22:00:15.368 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:00:15.421 [DEBUG] [Thread-135379] [transport.py] [_log()] userauth is OK
2025-12-31T22:00:15.422 [DEBUG] [Thread-135379] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:00:15.422 [DEBUG] [Thread-135379] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:00:15.422 [DEBUG] [Thread-135379] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T22:00:15.422 [DEBUG] [Thread-135379] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:00:15.447 [INFO] [Thread-135379] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:00:15.448 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T22:00:15.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:00:16.261 [DEBUG] [Thread-135379] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:00:16.262 [DEBUG] [Thread-135379] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:00:16.308 [DEBUG] [Thread-135379] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:00:16.309 [DEBUG] [Thread-135379] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:00:16.317 [DEBUG] [Thread-135379] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:00:16.326 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:00:16.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T22:00:16.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T22:00:16.343 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:00:16.343 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:00:16.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:00:16.351 [DEBUG] [Thread-135379] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:00:29.832 [DEBUG] [Thread-135381 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:00:44.880 [DEBUG] [Thread-135382 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:00:45.926 [DEBUG] [Thread-135383 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:00:46.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T22:00:46.348 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T22:00:46.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T22:00:47.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 22, 0, 21), 5.56, 69.45, 0.0, 19.39, 16.09, 0, 0, 0, 2, 0, 0),)
2025-12-31T22:00:47.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 22:00:21
2025-12-31T22:00:47.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T22:00:47.378 [DEBUG] [Thread-135384] [transport.py] [_log()] starting thread (client mode): 0xb1775b70
2025-12-31T22:00:47.378 [DEBUG] [Thread-135384] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:00:47.399 [DEBUG] [Thread-135384] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T22:00:47.399 [INFO] [Thread-135384] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T22:00:47.402 [DEBUG] [Thread-135384] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:00:47.402 [DEBUG] [Thread-135384] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T22:00:47.402 [DEBUG] [Thread-135384] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:00:47.402 [DEBUG] [Thread-135384] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:00:47.402 [DEBUG] [Thread-135384] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:00:47.402 [DEBUG] [Thread-135384] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:00:47.402 [DEBUG] [Thread-135384] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:00:47.402 [DEBUG] [Thread-135384] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:00:47.402 [DEBUG] [Thread-135384] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:00:47.402 [DEBUG] [Thread-135384] [transport.py] [_log()] client lang: <none>
2025-12-31T22:00:47.402 [DEBUG] [Thread-135384] [transport.py] [_log()] server lang: <none>
2025-12-31T22:00:47.402 [DEBUG] [Thread-135384] [transport.py] [_log()] kex follows: False
2025-12-31T22:00:47.402 [DEBUG] [Thread-135384] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:00:47.402 [DEBUG] [Thread-135384] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:00:47.402 [DEBUG] [Thread-135384] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:00:47.402 [DEBUG] [Thread-135384] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:00:47.402 [DEBUG] [Thread-135384] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:00:47.402 [DEBUG] [Thread-135384] [transport.py] [_log()] Compression: none
2025-12-31T22:00:47.402 [DEBUG] [Thread-135384] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:00:47.418 [DEBUG] [Thread-135384] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:00:47.418 [DEBUG] [Thread-135384] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:00:47.418 [DEBUG] [Thread-135384] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T22:00:47.418 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T22:00:47.418 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:00:47.419 [DEBUG] [Thread-135384] [transport.py] [_log()] userauth is OK
2025-12-31T22:00:47.419 [DEBUG] [Thread-135384] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:00:47.419 [DEBUG] [Thread-135384] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:00:47.419 [DEBUG] [Thread-135384] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T22:00:47.419 [DEBUG] [Thread-135384] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:00:47.428 [INFO] [Thread-135384] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:00:47.428 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:00:48.061 [DEBUG] [Thread-135384] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:00:48.061 [DEBUG] [Thread-135384] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:00:48.061 [DEBUG] [Thread-135384] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T22:00:48.102 [DEBUG] [Thread-135384] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:00:48.102 [DEBUG] [Thread-135384] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:00:48.105 [DEBUG] [Thread-135384] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:00:48.119 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:00:48.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T22:00:48.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T22:00:48.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T22:00:48.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:00:48.130 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T22:00:48.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:00:48.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:00:48.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T22:00:48.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.833123 -999.00  +16.30  12.69     72  +11.30 1 2 1 1 1     0    0 4.33 -41.32 ZNEsW 8.4 12.7 228.0 22.9 17.2 -18.9 17.2 -17.9 17.0 -17.1 17.2 -17.9
2025-12-31T22:00:48.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T22:00:48.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T22:00:48.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.833123
2025-12-31T22:00:48.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T22:00:48.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T22:00:48.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T22:00:48.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T22:00:48.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T22:00:48.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T22:00:21', tmtdew=5.56, humidity=69.45, cloud=0.0, wind=19.39, temperature=16.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T22:00:21', seeing=1.35, atlas_timestamp='2025-12-31T19:59:41.827', atlas_cloud=2, atlas_rain=1, zp_data=[0.2517499999999995, 0.2242500000000014, 0.18925000000000125, 0.40499999999999936, 0.41549999999999976, 0.32425000000000104, 0.34949999999999903, 0.3072499999999998, 0.37049999999999983, 0.32699999999999996, 0.6187499999999995, 0.8259999999999996, 0.504999999999999, 0.21325000000000038, 0.37899999999999956, 0.125, 0.13724999999999987, 0.41549999999999976, 0.8059999999999992, 1.396749999999999, 0.4739999999999984, 0.16574999999999918, -0.3667499999999997, -0.20124999999999993, 0.05099999999999838, 0.2270000000000003, 0.7767499999999998, -0.785499999999999, 0.2965, 0.005000000000000782, -1.1879999999999988, -1.4689999999999994, 0.13624999999999865], zp_timestamp='2025-12-31T19:58:00')
2025-12-31T22:00:48.132 [DEBUG] [Thread-135384] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:00:48.228 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T22:00:48.239 [DEBUG] [Thread-135387] [transport.py] [_log()] starting thread (client mode): 0xb1777610
2025-12-31T22:00:48.239 [DEBUG] [Thread-135387] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:00:48.253 [DEBUG] [Thread-135387] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T22:00:48.253 [INFO] [Thread-135387] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T22:00:48.261 [DEBUG] [Thread-135387] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:00:48.261 [DEBUG] [Thread-135387] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T22:00:48.261 [DEBUG] [Thread-135387] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:00:48.261 [DEBUG] [Thread-135387] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:00:48.261 [DEBUG] [Thread-135387] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:00:48.261 [DEBUG] [Thread-135387] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:00:48.262 [DEBUG] [Thread-135387] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:00:48.262 [DEBUG] [Thread-135387] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:00:48.262 [DEBUG] [Thread-135387] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:00:48.262 [DEBUG] [Thread-135387] [transport.py] [_log()] client lang: <none>
2025-12-31T22:00:48.262 [DEBUG] [Thread-135387] [transport.py] [_log()] server lang: <none>
2025-12-31T22:00:48.262 [DEBUG] [Thread-135387] [transport.py] [_log()] kex follows: False
2025-12-31T22:00:48.262 [DEBUG] [Thread-135387] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:00:48.262 [DEBUG] [Thread-135387] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:00:48.262 [DEBUG] [Thread-135387] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:00:48.262 [DEBUG] [Thread-135387] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:00:48.262 [DEBUG] [Thread-135387] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:00:48.262 [DEBUG] [Thread-135387] [transport.py] [_log()] Compression: none
2025-12-31T22:00:48.262 [DEBUG] [Thread-135387] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:00:48.327 [DEBUG] [Thread-135387] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:00:48.327 [DEBUG] [Thread-135387] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:00:48.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T22:00:48.329 [DEBUG] [Thread-135387] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T22:00:48.330 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:00:48.385 [DEBUG] [Thread-135387] [transport.py] [_log()] userauth is OK
2025-12-31T22:00:48.386 [DEBUG] [Thread-135387] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:00:48.386 [DEBUG] [Thread-135387] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:00:48.386 [DEBUG] [Thread-135387] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T22:00:48.386 [DEBUG] [Thread-135387] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:00:48.408 [INFO] [Thread-135387] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:00:48.409 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T22:00:48.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:00:49.253 [DEBUG] [Thread-135387] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:00:49.253 [DEBUG] [Thread-135387] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:00:49.301 [DEBUG] [Thread-135387] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:00:49.301 [DEBUG] [Thread-135387] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:00:49.311 [DEBUG] [Thread-135387] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:00:49.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:00:49.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T22:00:49.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T22:00:49.338 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:00:49.339 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:00:49.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:00:49.348 [DEBUG] [Thread-135387] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:00:59.913 [DEBUG] [Thread-135389 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:01:08.463 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:01:08.464 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:01:14.965 [DEBUG] [Thread-135390 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:01:19.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T22:01:19.370 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T22:01:19.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T22:01:20.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 22, 0, 53), 5.56, 69.93, 0.0, 21.7, 16.09, 0, 0, 0, 2, 0, 0),)
2025-12-31T22:01:20.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 22:00:53
2025-12-31T22:01:20.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T22:01:20.372 [DEBUG] [Thread-135391] [transport.py] [_log()] starting thread (client mode): 0xb1745870
2025-12-31T22:01:20.372 [DEBUG] [Thread-135391] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:01:20.392 [DEBUG] [Thread-135391] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T22:01:20.392 [INFO] [Thread-135391] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T22:01:20.395 [DEBUG] [Thread-135391] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:01:20.395 [DEBUG] [Thread-135391] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T22:01:20.395 [DEBUG] [Thread-135391] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:01:20.396 [DEBUG] [Thread-135391] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:01:20.396 [DEBUG] [Thread-135391] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:01:20.396 [DEBUG] [Thread-135391] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:01:20.396 [DEBUG] [Thread-135391] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:01:20.396 [DEBUG] [Thread-135391] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:01:20.396 [DEBUG] [Thread-135391] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:01:20.396 [DEBUG] [Thread-135391] [transport.py] [_log()] client lang: <none>
2025-12-31T22:01:20.396 [DEBUG] [Thread-135391] [transport.py] [_log()] server lang: <none>
2025-12-31T22:01:20.396 [DEBUG] [Thread-135391] [transport.py] [_log()] kex follows: False
2025-12-31T22:01:20.396 [DEBUG] [Thread-135391] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:01:20.396 [DEBUG] [Thread-135391] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:01:20.396 [DEBUG] [Thread-135391] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:01:20.396 [DEBUG] [Thread-135391] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:01:20.396 [DEBUG] [Thread-135391] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:01:20.396 [DEBUG] [Thread-135391] [transport.py] [_log()] Compression: none
2025-12-31T22:01:20.396 [DEBUG] [Thread-135391] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:01:20.414 [DEBUG] [Thread-135391] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:01:20.415 [DEBUG] [Thread-135391] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:01:20.415 [DEBUG] [Thread-135391] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T22:01:20.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T22:01:20.416 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:01:20.417 [DEBUG] [Thread-135391] [transport.py] [_log()] userauth is OK
2025-12-31T22:01:20.417 [DEBUG] [Thread-135391] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:01:20.417 [DEBUG] [Thread-135391] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:01:20.417 [DEBUG] [Thread-135391] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T22:01:20.417 [DEBUG] [Thread-135391] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:01:20.440 [INFO] [Thread-135391] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:01:20.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:01:21.201 [DEBUG] [Thread-135391] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:01:21.201 [DEBUG] [Thread-135391] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:01:21.201 [DEBUG] [Thread-135391] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T22:01:21.242 [DEBUG] [Thread-135391] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:01:21.243 [DEBUG] [Thread-135391] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:01:21.245 [DEBUG] [Thread-135391] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:01:21.256 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:01:21.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T22:01:21.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T22:01:21.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T22:01:21.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:01:21.261 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T22:01:21.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:01:21.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:01:21.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T22:01:21.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.833818 -999.00  +16.30  12.14     72  +11.30 1 1 1 1 1     0    0 4.35 -38.41 ZNESW 8.2 12.1 203.5 20.4 17.3 -18.7 17.1 -18.0 17.0 -17.0 17.2 -17.7
2025-12-31T22:01:21.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T22:01:21.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T22:01:21.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.833818
2025-12-31T22:01:21.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T22:01:21.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T22:01:21.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T22:01:21.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T22:01:21.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T22:01:21.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T22:00:53', tmtdew=5.56, humidity=69.93, cloud=0.0, wind=21.7, temperature=16.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T22:00:53', seeing=1.31, atlas_timestamp='2025-12-31T20:00:41.875', atlas_cloud=1, atlas_rain=1, zp_data=[0.2517499999999995, 0.2242500000000014, 0.18925000000000125, 0.40499999999999936, 0.41549999999999976, 0.32425000000000104, 0.34949999999999903, 0.3072499999999998, 0.37049999999999983, 0.32699999999999996, 0.6187499999999995, 0.8259999999999996, 0.504999999999999, 0.21325000000000038, 0.37899999999999956, 0.125, 0.13724999999999987, 0.41549999999999976, 0.8059999999999992, 1.396749999999999, 0.4739999999999984, 0.16574999999999918, -0.3667499999999997, -0.20124999999999993, 0.05099999999999838, 0.2270000000000003, 0.7767499999999998, -0.785499999999999, 0.2965, 0.005000000000000782, -1.1879999999999988, -1.4689999999999994, 0.13624999999999865], zp_timestamp='2025-12-31T19:58:00')
2025-12-31T22:01:21.262 [DEBUG] [Thread-135391] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:01:21.336 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T22:01:21.352 [DEBUG] [Thread-135394] [transport.py] [_log()] starting thread (client mode): 0xb17479d0
2025-12-31T22:01:21.352 [DEBUG] [Thread-135394] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:01:21.369 [DEBUG] [Thread-135394] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T22:01:21.369 [INFO] [Thread-135394] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T22:01:21.378 [DEBUG] [Thread-135394] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:01:21.378 [DEBUG] [Thread-135394] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T22:01:21.378 [DEBUG] [Thread-135394] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:01:21.378 [DEBUG] [Thread-135394] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:01:21.378 [DEBUG] [Thread-135394] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:01:21.378 [DEBUG] [Thread-135394] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:01:21.378 [DEBUG] [Thread-135394] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:01:21.378 [DEBUG] [Thread-135394] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:01:21.378 [DEBUG] [Thread-135394] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:01:21.378 [DEBUG] [Thread-135394] [transport.py] [_log()] client lang: <none>
2025-12-31T22:01:21.378 [DEBUG] [Thread-135394] [transport.py] [_log()] server lang: <none>
2025-12-31T22:01:21.378 [DEBUG] [Thread-135394] [transport.py] [_log()] kex follows: False
2025-12-31T22:01:21.378 [DEBUG] [Thread-135394] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:01:21.378 [DEBUG] [Thread-135394] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:01:21.378 [DEBUG] [Thread-135394] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:01:21.378 [DEBUG] [Thread-135394] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:01:21.378 [DEBUG] [Thread-135394] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:01:21.378 [DEBUG] [Thread-135394] [transport.py] [_log()] Compression: none
2025-12-31T22:01:21.378 [DEBUG] [Thread-135394] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:01:21.445 [DEBUG] [Thread-135394] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:01:21.445 [DEBUG] [Thread-135394] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:01:21.445 [DEBUG] [Thread-135394] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T22:01:21.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T22:01:21.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:01:21.505 [DEBUG] [Thread-135394] [transport.py] [_log()] userauth is OK
2025-12-31T22:01:21.505 [DEBUG] [Thread-135394] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:01:21.505 [DEBUG] [Thread-135394] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:01:21.505 [DEBUG] [Thread-135394] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T22:01:21.505 [DEBUG] [Thread-135394] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:01:21.519 [INFO] [Thread-135394] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:01:21.519 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T22:01:21.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:01:22.323 [DEBUG] [Thread-135394] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:01:22.323 [DEBUG] [Thread-135394] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:01:22.371 [DEBUG] [Thread-135394] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:01:22.371 [DEBUG] [Thread-135394] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:01:22.379 [DEBUG] [Thread-135394] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:01:22.386 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:01: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-12-31T22:01:22.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T22:01:22.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:01:22.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:01:22.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:01:22.409 [DEBUG] [Thread-135394] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:01:29.995 [DEBUG] [Thread-135396 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:01:45.055 [DEBUG] [Thread-135397 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:01:46.014 [DEBUG] [Thread-135398 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:01:52.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T22:01:52.430 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T22:01:52.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-12-31T22:01:53.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 22, 1, 25), 5.56, 69.91, 0.0, 21.0, 16.04, 0, 0, 0, 2, 0, 0),)
2025-12-31T22:01:53.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 22:01:25
2025-12-31T22:01:53.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T22:01:53.433 [DEBUG] [Thread-135399] [transport.py] [_log()] starting thread (client mode): 0xb1776620
2025-12-31T22:01:53.433 [DEBUG] [Thread-135399] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:01:53.453 [DEBUG] [Thread-135399] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T22:01:53.453 [INFO] [Thread-135399] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T22:01:53.457 [DEBUG] [Thread-135399] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:01:53.457 [DEBUG] [Thread-135399] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T22:01:53.457 [DEBUG] [Thread-135399] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:01:53.457 [DEBUG] [Thread-135399] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:01:53.457 [DEBUG] [Thread-135399] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:01:53.457 [DEBUG] [Thread-135399] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:01:53.457 [DEBUG] [Thread-135399] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:01:53.457 [DEBUG] [Thread-135399] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:01:53.457 [DEBUG] [Thread-135399] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:01:53.457 [DEBUG] [Thread-135399] [transport.py] [_log()] client lang: <none>
2025-12-31T22:01:53.458 [DEBUG] [Thread-135399] [transport.py] [_log()] server lang: <none>
2025-12-31T22:01:53.458 [DEBUG] [Thread-135399] [transport.py] [_log()] kex follows: False
2025-12-31T22:01:53.458 [DEBUG] [Thread-135399] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:01:53.458 [DEBUG] [Thread-135399] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:01:53.458 [DEBUG] [Thread-135399] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:01:53.458 [DEBUG] [Thread-135399] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:01:53.458 [DEBUG] [Thread-135399] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:01:53.458 [DEBUG] [Thread-135399] [transport.py] [_log()] Compression: none
2025-12-31T22:01:53.458 [DEBUG] [Thread-135399] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:01:53.477 [DEBUG] [Thread-135399] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:01:53.477 [DEBUG] [Thread-135399] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:01:53.478 [DEBUG] [Thread-135399] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T22:01:53.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T22:01:53.479 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:01:53.480 [DEBUG] [Thread-135399] [transport.py] [_log()] userauth is OK
2025-12-31T22:01:53.480 [DEBUG] [Thread-135399] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:01:53.480 [DEBUG] [Thread-135399] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:01:53.480 [DEBUG] [Thread-135399] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T22:01:53.480 [DEBUG] [Thread-135399] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:01:53.505 [INFO] [Thread-135399] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:01:53.506 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:01:54.150 [DEBUG] [Thread-135399] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:01:54.150 [DEBUG] [Thread-135399] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:01:54.150 [DEBUG] [Thread-135399] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T22:01:54.191 [DEBUG] [Thread-135399] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:01:54.191 [DEBUG] [Thread-135399] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:01:54.195 [DEBUG] [Thread-135399] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:01:54.209 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:01:54.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T22:01:54.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T22:01:54.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T22:01:54.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:01:54.220 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T22:01:54.221 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:01:54.221 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:01:54.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T22:01:54.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.834164 -999.00  +16.20  21.66     72  +11.30 1 1 1 1 1     0    0 4.18 -42.03 ZNESW 18.1 21.7 203.2 27.4 17.2 -18.7 17.1 -18.1 17.0 -17.0 17.2 -17.9
2025-12-31T22:01:54.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T22:01:54.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T22:01:54.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.834164
2025-12-31T22:01:54.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T22:01:54.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T22:01:54.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T22:01:54.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T22:01:54.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T22:01:54.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T22:01:25', tmtdew=5.56, humidity=69.91, cloud=0.0, wind=21.0, temperature=16.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T22:01:25', seeing=1.31, atlas_timestamp='2025-12-31T20:01:11.770', atlas_cloud=1, atlas_rain=1, zp_data=[0.2517499999999995, 0.2242500000000014, 0.18925000000000125, 0.40499999999999936, 0.41549999999999976, 0.32425000000000104, 0.34949999999999903, 0.3072499999999998, 0.37049999999999983, 0.32699999999999996, 0.6187499999999995, 0.8259999999999996, 0.504999999999999, 0.21325000000000038, 0.37899999999999956, 0.125, 0.13724999999999987, 0.41549999999999976, 0.8059999999999992, 1.396749999999999, 0.4739999999999984, 0.16574999999999918, -0.3667499999999997, -0.20124999999999993, 0.05099999999999838, 0.2270000000000003, 0.7767499999999998, -0.785499999999999, 0.2965, 0.005000000000000782, -1.1879999999999988, -1.4689999999999994, 0.13624999999999865], zp_timestamp='2025-12-31T19:58:00')
2025-12-31T22:01:54.224 [DEBUG] [Thread-135399] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:01:54.307 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T22:01:54.318 [DEBUG] [Thread-135402] [transport.py] [_log()] starting thread (client mode): 0xb1776890
2025-12-31T22:01:54.319 [DEBUG] [Thread-135402] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:01:54.333 [DEBUG] [Thread-135402] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T22:01:54.333 [INFO] [Thread-135402] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T22:01:54.341 [DEBUG] [Thread-135402] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:01:54.341 [DEBUG] [Thread-135402] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T22:01:54.341 [DEBUG] [Thread-135402] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:01:54.342 [DEBUG] [Thread-135402] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:01:54.342 [DEBUG] [Thread-135402] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:01:54.342 [DEBUG] [Thread-135402] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:01:54.342 [DEBUG] [Thread-135402] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:01:54.342 [DEBUG] [Thread-135402] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:01:54.342 [DEBUG] [Thread-135402] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:01:54.342 [DEBUG] [Thread-135402] [transport.py] [_log()] client lang: <none>
2025-12-31T22:01:54.342 [DEBUG] [Thread-135402] [transport.py] [_log()] server lang: <none>
2025-12-31T22:01:54.342 [DEBUG] [Thread-135402] [transport.py] [_log()] kex follows: False
2025-12-31T22:01:54.343 [DEBUG] [Thread-135402] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:01:54.343 [DEBUG] [Thread-135402] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:01:54.343 [DEBUG] [Thread-135402] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:01:54.343 [DEBUG] [Thread-135402] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:01:54.343 [DEBUG] [Thread-135402] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:01:54.343 [DEBUG] [Thread-135402] [transport.py] [_log()] Compression: none
2025-12-31T22:01:54.343 [DEBUG] [Thread-135402] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:01:54.401 [DEBUG] [Thread-135402] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:01:54.402 [DEBUG] [Thread-135402] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:01:54.403 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T22:01:54.403 [DEBUG] [Thread-135402] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T22:01:54.404 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:01:54.457 [DEBUG] [Thread-135402] [transport.py] [_log()] userauth is OK
2025-12-31T22:01:54.457 [DEBUG] [Thread-135402] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:01:54.457 [DEBUG] [Thread-135402] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:01:54.458 [DEBUG] [Thread-135402] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T22:01:54.458 [DEBUG] [Thread-135402] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:01:54.480 [INFO] [Thread-135402] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:01:54.481 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T22:01:54.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:01:55.288 [DEBUG] [Thread-135402] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:01:55.288 [DEBUG] [Thread-135402] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:01:55.336 [DEBUG] [Thread-135402] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:01:55.336 [DEBUG] [Thread-135402] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:01:55.346 [DEBUG] [Thread-135402] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:01:55.355 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:01:55.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T22:01:55.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T22:01:55.374 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:01:55.374 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:01:55.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:01:55.383 [DEBUG] [Thread-135402] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:02:00.088 [DEBUG] [Thread-135404 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:02:08.682 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:02:08.683 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:02:15.125 [DEBUG] [Thread-135405 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:02:25.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T22:02:25.405 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T22:02:25.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T22:02:26.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 22, 1, 57), 5.5, 69.96, 0.0, 19.14, 16.07, 0, 0, 0, 2, 0, 0),)
2025-12-31T22:02:26.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 22:01:57
2025-12-31T22:02:26.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T22:02:26.396 [DEBUG] [Thread-135406] [transport.py] [_log()] starting thread (client mode): 0xb1764be0
2025-12-31T22:02:26.396 [DEBUG] [Thread-135406] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:02:26.416 [DEBUG] [Thread-135406] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T22:02:26.416 [INFO] [Thread-135406] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T22:02:26.419 [DEBUG] [Thread-135406] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:02:26.419 [DEBUG] [Thread-135406] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T22:02:26.419 [DEBUG] [Thread-135406] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:02:26.419 [DEBUG] [Thread-135406] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:02:26.419 [DEBUG] [Thread-135406] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:02:26.419 [DEBUG] [Thread-135406] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:02:26.419 [DEBUG] [Thread-135406] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:02:26.420 [DEBUG] [Thread-135406] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:02:26.420 [DEBUG] [Thread-135406] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:02:26.420 [DEBUG] [Thread-135406] [transport.py] [_log()] client lang: <none>
2025-12-31T22:02:26.420 [DEBUG] [Thread-135406] [transport.py] [_log()] server lang: <none>
2025-12-31T22:02:26.420 [DEBUG] [Thread-135406] [transport.py] [_log()] kex follows: False
2025-12-31T22:02:26.420 [DEBUG] [Thread-135406] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:02:26.420 [DEBUG] [Thread-135406] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:02:26.420 [DEBUG] [Thread-135406] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:02:26.420 [DEBUG] [Thread-135406] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:02:26.420 [DEBUG] [Thread-135406] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:02:26.420 [DEBUG] [Thread-135406] [transport.py] [_log()] Compression: none
2025-12-31T22:02:26.420 [DEBUG] [Thread-135406] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:02:26.436 [DEBUG] [Thread-135406] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:02:26.437 [DEBUG] [Thread-135406] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:02:26.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T22:02:26.437 [DEBUG] [Thread-135406] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T22:02:26.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:02:26.481 [DEBUG] [Thread-135406] [transport.py] [_log()] userauth is OK
2025-12-31T22:02:26.482 [DEBUG] [Thread-135406] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:02:26.482 [DEBUG] [Thread-135406] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:02:26.482 [DEBUG] [Thread-135406] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T22:02:26.482 [DEBUG] [Thread-135406] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:02:26.503 [INFO] [Thread-135406] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:02:26.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:02:27.332 [DEBUG] [Thread-135406] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:02:27.332 [DEBUG] [Thread-135406] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:02:27.332 [DEBUG] [Thread-135406] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T22:02:27.373 [DEBUG] [Thread-135406] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:02:27.373 [DEBUG] [Thread-135406] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:02:27.377 [DEBUG] [Thread-135406] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:02:27.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:02:27.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T22:02:27.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T22:02:27.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T22:02:27.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:02:27.400 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T22:02:27.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:02:27.400 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:02:27.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T22:02:27.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.834512 -999.00  +16.20  15.89     72  +11.30 1 2 1 1 1     0    0 4.13 -44.01 ZNesW 13.5 15.9 202.6 21.0 17.2 -18.5 17.1 -17.7 16.9 -17.1 17.2 -17.6
2025-12-31T22:02:27.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T22:02:27.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T22:02:27.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.834512
2025-12-31T22:02:27.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T22:02:27.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T22:02:27.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T22:02:27.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T22:02:27.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T22:02:27.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T22:01:57', tmtdew=5.5, humidity=69.96, cloud=0.0, wind=19.14, temperature=16.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T22:01:57', seeing=1.18, atlas_timestamp='2025-12-31T20:01:41.837', atlas_cloud=2, atlas_rain=1, zp_data=[0.2517499999999995, 0.2242500000000014, 0.18925000000000125, 0.40499999999999936, 0.41549999999999976, 0.32425000000000104, 0.34949999999999903, 0.3072499999999998, 0.37049999999999983, 0.32699999999999996, 0.6187499999999995, 0.8259999999999996, 0.504999999999999, 0.21325000000000038, 0.37899999999999956, 0.125, 0.13724999999999987, 0.41549999999999976, 0.8059999999999992, 1.396749999999999, 0.4739999999999984, 0.16574999999999918, -0.3667499999999997, -0.20124999999999993, 0.05099999999999838, 0.2270000000000003, 0.7767499999999998, -0.785499999999999, 0.2965, 0.005000000000000782, -1.1879999999999988, -1.4689999999999994, 0.13624999999999865], zp_timestamp='2025-12-31T19:58:00')
2025-12-31T22:02:27.403 [DEBUG] [Thread-135406] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:02:27.486 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T22:02:27.502 [DEBUG] [Thread-135409] [transport.py] [_log()] starting thread (client mode): 0xb1758be0
2025-12-31T22:02:27.502 [DEBUG] [Thread-135409] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:02:27.520 [DEBUG] [Thread-135409] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T22:02:27.520 [INFO] [Thread-135409] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T22:02:27.530 [DEBUG] [Thread-135409] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:02:27.531 [DEBUG] [Thread-135409] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T22:02:27.531 [DEBUG] [Thread-135409] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:02:27.531 [DEBUG] [Thread-135409] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:02:27.531 [DEBUG] [Thread-135409] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:02:27.531 [DEBUG] [Thread-135409] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:02:27.531 [DEBUG] [Thread-135409] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:02:27.532 [DEBUG] [Thread-135409] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:02:27.532 [DEBUG] [Thread-135409] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:02:27.532 [DEBUG] [Thread-135409] [transport.py] [_log()] client lang: <none>
2025-12-31T22:02:27.532 [DEBUG] [Thread-135409] [transport.py] [_log()] server lang: <none>
2025-12-31T22:02:27.532 [DEBUG] [Thread-135409] [transport.py] [_log()] kex follows: False
2025-12-31T22:02:27.532 [DEBUG] [Thread-135409] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:02:27.532 [DEBUG] [Thread-135409] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:02:27.532 [DEBUG] [Thread-135409] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:02:27.533 [DEBUG] [Thread-135409] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:02:27.533 [DEBUG] [Thread-135409] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:02:27.533 [DEBUG] [Thread-135409] [transport.py] [_log()] Compression: none
2025-12-31T22:02:27.533 [DEBUG] [Thread-135409] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:02:27.586 [DEBUG] [Thread-135409] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:02:27.586 [DEBUG] [Thread-135409] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:02:27.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T22:02:27.588 [DEBUG] [Thread-135409] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T22:02:27.589 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:02:27.642 [DEBUG] [Thread-135409] [transport.py] [_log()] userauth is OK
2025-12-31T22:02:27.642 [DEBUG] [Thread-135409] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:02:27.642 [DEBUG] [Thread-135409] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:02:27.643 [DEBUG] [Thread-135409] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T22:02:27.643 [DEBUG] [Thread-135409] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:02:27.661 [INFO] [Thread-135409] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:02:27.662 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T22:02:27.662 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:02:28.566 [DEBUG] [Thread-135409] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:02:28.566 [DEBUG] [Thread-135409] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:02:28.613 [DEBUG] [Thread-135409] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:02:28.614 [DEBUG] [Thread-135409] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:02:28.622 [DEBUG] [Thread-135409] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:02:28.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:02: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')
2025-12-31T22:02:28.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T22:02:28.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:02:28.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:02:28.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:02:28.656 [DEBUG] [Thread-135409] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:02:30.159 [DEBUG] [Thread-135411 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:02:45.196 [DEBUG] [Thread-135412 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:02:46.086 [DEBUG] [Thread-135413 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:02:58.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T22:02:58.679 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T22:02:58.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T22:02:59.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 22, 2, 29), 5.49, 70.0, 0.0, 18.93, 16.07, 0, 0, 0, 2, 0, 0),)
2025-12-31T22:02:59.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 22:02:29
2025-12-31T22:02:59.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T22:02:59.680 [DEBUG] [Thread-135414] [transport.py] [_log()] starting thread (client mode): 0xb17644f0
2025-12-31T22:02:59.680 [DEBUG] [Thread-135414] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:02:59.701 [DEBUG] [Thread-135414] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T22:02:59.701 [INFO] [Thread-135414] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T22:02:59.704 [DEBUG] [Thread-135414] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:02:59.705 [DEBUG] [Thread-135414] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T22:02:59.705 [DEBUG] [Thread-135414] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:02:59.705 [DEBUG] [Thread-135414] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:02:59.705 [DEBUG] [Thread-135414] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:02:59.705 [DEBUG] [Thread-135414] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:02:59.705 [DEBUG] [Thread-135414] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:02:59.705 [DEBUG] [Thread-135414] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:02:59.705 [DEBUG] [Thread-135414] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:02:59.705 [DEBUG] [Thread-135414] [transport.py] [_log()] client lang: <none>
2025-12-31T22:02:59.705 [DEBUG] [Thread-135414] [transport.py] [_log()] server lang: <none>
2025-12-31T22:02:59.705 [DEBUG] [Thread-135414] [transport.py] [_log()] kex follows: False
2025-12-31T22:02:59.705 [DEBUG] [Thread-135414] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:02:59.705 [DEBUG] [Thread-135414] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:02:59.706 [DEBUG] [Thread-135414] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:02:59.706 [DEBUG] [Thread-135414] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:02:59.706 [DEBUG] [Thread-135414] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:02:59.706 [DEBUG] [Thread-135414] [transport.py] [_log()] Compression: none
2025-12-31T22:02:59.706 [DEBUG] [Thread-135414] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:02:59.727 [DEBUG] [Thread-135414] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:02:59.727 [DEBUG] [Thread-135414] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:02:59.728 [DEBUG] [Thread-135414] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T22:02:59.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T22:02:59.730 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:02:59.731 [DEBUG] [Thread-135414] [transport.py] [_log()] userauth is OK
2025-12-31T22:02:59.731 [DEBUG] [Thread-135414] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:02:59.731 [DEBUG] [Thread-135414] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:02:59.731 [DEBUG] [Thread-135414] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T22:02:59.731 [DEBUG] [Thread-135414] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:02:59.756 [INFO] [Thread-135414] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:02:59.757 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:03:00.227 [DEBUG] [Thread-135416 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:03:00.389 [DEBUG] [Thread-135414] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:03:00.390 [DEBUG] [Thread-135414] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:03:00.390 [DEBUG] [Thread-135414] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T22:03:00.431 [DEBUG] [Thread-135414] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:03:00.431 [DEBUG] [Thread-135414] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:03:00.434 [DEBUG] [Thread-135414] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:03:00.448 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:03:00.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T22:03:00.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T22:03:00.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T22:03:00.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:03:00.458 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T22:03:00.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:03:00.458 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:03:00.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T22:03:00.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.834859 -999.00  +16.20  13.72     72  +11.30 1 2 1 1 1     0    0 4.06 -43.60 ZNesW 13.1 13.7 205.0 25.3 17.2 -18.5 17.1 -17.8 16.9 -16.9 17.2 -17.6
2025-12-31T22:03:00.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T22:03:00.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T22:03:00.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.834859
2025-12-31T22:03:00.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T22:03:00.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T22:03:00.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T22:03:00.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T22:03:00.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T22:03:00.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T22:02:29', tmtdew=5.49, humidity=70.0, cloud=0.0, wind=18.93, temperature=16.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T22:02:29', seeing=1.21, atlas_timestamp='2025-12-31T20:02:11.818', atlas_cloud=2, atlas_rain=1, zp_data=[0.6812499999999995, 0.9337499999999999, 0.9102500000000004, nan, 0.6630000000000003, 0.5157500000000006, 0.15700000000000003, 0.5732500000000007, 0.5869999999999997, 0.9390000000000001, 1.1622499999999993, 1.0220000000000002, 0.8825000000000003, 0.4392499999999995, 0.14300000000000068, 0.31899999999999906, 0.5177499999999995, 1.0995, 1.4499999999999993, nan, 1.097999999999999, 0.35974999999999824, 0.009250000000001535, -0.08175000000000132, 0.2939999999999987, 0.6795, 0.4007500000000004, -0.13899999999999935, 0.49650000000000016, -0.8359999999999985, -1.2434999999999992, 0.04650000000000176, 0.2207499999999989], zp_timestamp='2025-12-31T20:02:00')
2025-12-31T22:03:00.461 [DEBUG] [Thread-135414] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:03:00.545 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T22:03:00.557 [DEBUG] [Thread-135418] [transport.py] [_log()] starting thread (client mode): 0xb9591bd0
2025-12-31T22:03:00.557 [DEBUG] [Thread-135418] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:03:00.572 [DEBUG] [Thread-135418] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T22:03:00.572 [INFO] [Thread-135418] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T22:03:00.579 [DEBUG] [Thread-135418] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:03:00.580 [DEBUG] [Thread-135418] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T22:03:00.580 [DEBUG] [Thread-135418] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:03:00.580 [DEBUG] [Thread-135418] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:03:00.580 [DEBUG] [Thread-135418] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:03:00.580 [DEBUG] [Thread-135418] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:03:00.580 [DEBUG] [Thread-135418] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:03:00.580 [DEBUG] [Thread-135418] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:03:00.580 [DEBUG] [Thread-135418] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:03:00.580 [DEBUG] [Thread-135418] [transport.py] [_log()] client lang: <none>
2025-12-31T22:03:00.580 [DEBUG] [Thread-135418] [transport.py] [_log()] server lang: <none>
2025-12-31T22:03:00.581 [DEBUG] [Thread-135418] [transport.py] [_log()] kex follows: False
2025-12-31T22:03:00.581 [DEBUG] [Thread-135418] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:03:00.581 [DEBUG] [Thread-135418] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:03:00.581 [DEBUG] [Thread-135418] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:03:00.581 [DEBUG] [Thread-135418] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:03:00.581 [DEBUG] [Thread-135418] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:03:00.581 [DEBUG] [Thread-135418] [transport.py] [_log()] Compression: none
2025-12-31T22:03:00.581 [DEBUG] [Thread-135418] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:03:00.638 [DEBUG] [Thread-135418] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:03:00.638 [DEBUG] [Thread-135418] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:03:00.639 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T22:03:00.639 [DEBUG] [Thread-135418] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T22:03:00.640 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:03:00.694 [DEBUG] [Thread-135418] [transport.py] [_log()] userauth is OK
2025-12-31T22:03:00.694 [DEBUG] [Thread-135418] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:03:00.694 [DEBUG] [Thread-135418] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:03:00.694 [DEBUG] [Thread-135418] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T22:03:00.694 [DEBUG] [Thread-135418] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:03:00.713 [INFO] [Thread-135418] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:03:00.713 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T22:03:00.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:03:01.565 [DEBUG] [Thread-135418] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:03:01.565 [DEBUG] [Thread-135418] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:03:01.612 [DEBUG] [Thread-135418] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:03:01.612 [DEBUG] [Thread-135418] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:03:01.621 [DEBUG] [Thread-135418] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:03:01.628 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:03:01.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T22:03:01.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T22:03:01.646 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:03:01.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:03:01.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:03:01.659 [DEBUG] [Thread-135418] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:03:08.884 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:03:08.885 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:03:15.263 [DEBUG] [Thread-135420 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:03:30.317 [DEBUG] [Thread-135421 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:03:31.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T22:03:31.677 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T22:03:31.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T22:03:32.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 22, 3, 1), 5.5, 69.96, 0.0, 21.07, 16.05, 0, 0, 0, 2, 0, 0),)
2025-12-31T22:03:32.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 22:03:01
2025-12-31T22:03:32.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T22:03:32.686 [DEBUG] [Thread-135422] [transport.py] [_log()] starting thread (client mode): 0xb17475b0
2025-12-31T22:03:32.686 [DEBUG] [Thread-135422] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:03:32.706 [DEBUG] [Thread-135422] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T22:03:32.707 [INFO] [Thread-135422] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T22:03:32.708 [DEBUG] [Thread-135422] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:03:32.708 [DEBUG] [Thread-135422] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T22:03:32.708 [DEBUG] [Thread-135422] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:03:32.708 [DEBUG] [Thread-135422] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:03:32.708 [DEBUG] [Thread-135422] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:03:32.708 [DEBUG] [Thread-135422] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:03:32.708 [DEBUG] [Thread-135422] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:03:32.708 [DEBUG] [Thread-135422] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:03:32.708 [DEBUG] [Thread-135422] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:03:32.708 [DEBUG] [Thread-135422] [transport.py] [_log()] client lang: <none>
2025-12-31T22:03:32.708 [DEBUG] [Thread-135422] [transport.py] [_log()] server lang: <none>
2025-12-31T22:03:32.708 [DEBUG] [Thread-135422] [transport.py] [_log()] kex follows: False
2025-12-31T22:03:32.708 [DEBUG] [Thread-135422] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:03:32.708 [DEBUG] [Thread-135422] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:03:32.708 [DEBUG] [Thread-135422] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:03:32.708 [DEBUG] [Thread-135422] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:03:32.708 [DEBUG] [Thread-135422] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:03:32.708 [DEBUG] [Thread-135422] [transport.py] [_log()] Compression: none
2025-12-31T22:03:32.708 [DEBUG] [Thread-135422] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:03:32.721 [DEBUG] [Thread-135422] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:03:32.722 [DEBUG] [Thread-135422] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:03:32.723 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T22:03:32.723 [DEBUG] [Thread-135422] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T22:03:32.724 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:03:32.725 [DEBUG] [Thread-135422] [transport.py] [_log()] userauth is OK
2025-12-31T22:03:32.725 [DEBUG] [Thread-135422] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:03:32.725 [DEBUG] [Thread-135422] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:03:32.725 [DEBUG] [Thread-135422] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T22:03:32.725 [DEBUG] [Thread-135422] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:03:32.743 [INFO] [Thread-135422] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:03:32.744 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:03:33.532 [DEBUG] [Thread-135422] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:03:33.532 [DEBUG] [Thread-135422] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:03:33.532 [DEBUG] [Thread-135422] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T22:03:33.573 [DEBUG] [Thread-135422] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:03:33.573 [DEBUG] [Thread-135422] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:03:33.577 [DEBUG] [Thread-135422] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:03:33.588 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:03:33.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T22:03:33.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T22:03:33.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T22:03:33.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:03:33.600 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T22:03:33.601 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:03:33.601 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:03:33.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T22:03:33.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.835206 -999.00  +16.20  11.42     72  +11.30 1 2 1 1 1     0    0 4.13 -44.03 ZNeSW 10.7 11.4 216.3 19.8 17.2 -18.3 17.1 -18.1 16.9 -16.9 17.2 -17.8
2025-12-31T22:03:33.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T22:03:33.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T22:03:33.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.835206
2025-12-31T22:03:33.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T22:03:33.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T22:03:33.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T22:03:33.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T22:03:33.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T22:03:33.603 [DEBUG] [Thread-135422] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:03:33.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T22:03:01', tmtdew=5.5, humidity=69.96, cloud=0.0, wind=21.07, temperature=16.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T22:03:01', seeing=1.12, atlas_timestamp='2025-12-31T20:02:41.798', atlas_cloud=2, atlas_rain=1, zp_data=[0.6812499999999995, 0.9337499999999999, 0.9102500000000004, nan, 0.6630000000000003, 0.5157500000000006, 0.15700000000000003, 0.5732500000000007, 0.5869999999999997, 0.9390000000000001, 1.1622499999999993, 1.0220000000000002, 0.8825000000000003, 0.4392499999999995, 0.14300000000000068, 0.31899999999999906, 0.5177499999999995, 1.0995, 1.4499999999999993, nan, 1.097999999999999, 0.35974999999999824, 0.009250000000001535, -0.08175000000000132, 0.2939999999999987, 0.6795, 0.4007500000000004, -0.13899999999999935, 0.49650000000000016, -0.8359999999999985, -1.2434999999999992, 0.04650000000000176, 0.2207499999999989], zp_timestamp='2025-12-31T20:02:00')
2025-12-31T22:03: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-12-31T22:03:33.700 [DEBUG] [Thread-135425] [transport.py] [_log()] starting thread (client mode): 0xb1777820
2025-12-31T22:03:33.701 [DEBUG] [Thread-135425] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:03:33.715 [DEBUG] [Thread-135425] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T22:03:33.715 [INFO] [Thread-135425] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T22:03:33.723 [DEBUG] [Thread-135425] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:03:33.723 [DEBUG] [Thread-135425] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T22:03:33.723 [DEBUG] [Thread-135425] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:03:33.723 [DEBUG] [Thread-135425] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:03:33.723 [DEBUG] [Thread-135425] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:03:33.724 [DEBUG] [Thread-135425] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:03:33.724 [DEBUG] [Thread-135425] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:03:33.724 [DEBUG] [Thread-135425] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:03:33.724 [DEBUG] [Thread-135425] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:03:33.724 [DEBUG] [Thread-135425] [transport.py] [_log()] client lang: <none>
2025-12-31T22:03:33.724 [DEBUG] [Thread-135425] [transport.py] [_log()] server lang: <none>
2025-12-31T22:03:33.724 [DEBUG] [Thread-135425] [transport.py] [_log()] kex follows: False
2025-12-31T22:03:33.724 [DEBUG] [Thread-135425] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:03:33.724 [DEBUG] [Thread-135425] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:03:33.724 [DEBUG] [Thread-135425] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:03:33.724 [DEBUG] [Thread-135425] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:03:33.724 [DEBUG] [Thread-135425] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:03:33.724 [DEBUG] [Thread-135425] [transport.py] [_log()] Compression: none
2025-12-31T22:03:33.724 [DEBUG] [Thread-135425] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:03:33.782 [DEBUG] [Thread-135425] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:03:33.782 [DEBUG] [Thread-135425] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:03:33.783 [DEBUG] [Thread-135425] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T22:03:33.783 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T22:03:33.784 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:03:33.837 [DEBUG] [Thread-135425] [transport.py] [_log()] userauth is OK
2025-12-31T22:03:33.837 [DEBUG] [Thread-135425] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:03:33.837 [DEBUG] [Thread-135425] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:03:33.838 [DEBUG] [Thread-135425] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T22:03:33.838 [DEBUG] [Thread-135425] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:03:33.855 [INFO] [Thread-135425] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:03: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-12-31T22:03:33.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:03:34.668 [DEBUG] [Thread-135425] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:03:34.668 [DEBUG] [Thread-135425] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:03:34.716 [DEBUG] [Thread-135425] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:03:34.716 [DEBUG] [Thread-135425] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:03:34.725 [DEBUG] [Thread-135425] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:03:34.732 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:03:34.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T22:03:34.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-12-31T22:03:34.748 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:03:34.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:03:34.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:03:34.756 [DEBUG] [Thread-135425] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:03:45.350 [DEBUG] [Thread-135427 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:03:46.161 [DEBUG] [Thread-135428 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:04:00.405 [DEBUG] [Thread-135429 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:04:04.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T22:04:04.775 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T22:04:04.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T22:04:05.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 22, 3, 33), 5.49, 70.03, 0.0, 23.38, 16.09, 0, 0, 0, 2, 0, 0),)
2025-12-31T22:04:05.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 22:03:33
2025-12-31T22:04:05.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T22:04:05.775 [DEBUG] [Thread-135430] [transport.py] [_log()] starting thread (client mode): 0xb1744640
2025-12-31T22:04:05.775 [DEBUG] [Thread-135430] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:04:05.797 [DEBUG] [Thread-135430] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T22:04:05.797 [INFO] [Thread-135430] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T22:04:05.801 [DEBUG] [Thread-135430] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:04:05.801 [DEBUG] [Thread-135430] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T22:04:05.801 [DEBUG] [Thread-135430] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:04:05.801 [DEBUG] [Thread-135430] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:04:05.801 [DEBUG] [Thread-135430] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:04:05.801 [DEBUG] [Thread-135430] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:04:05.801 [DEBUG] [Thread-135430] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:04:05.801 [DEBUG] [Thread-135430] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:04:05.801 [DEBUG] [Thread-135430] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:04:05.801 [DEBUG] [Thread-135430] [transport.py] [_log()] client lang: <none>
2025-12-31T22:04:05.801 [DEBUG] [Thread-135430] [transport.py] [_log()] server lang: <none>
2025-12-31T22:04:05.801 [DEBUG] [Thread-135430] [transport.py] [_log()] kex follows: False
2025-12-31T22:04:05.802 [DEBUG] [Thread-135430] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:04:05.802 [DEBUG] [Thread-135430] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:04:05.802 [DEBUG] [Thread-135430] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:04:05.802 [DEBUG] [Thread-135430] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:04:05.802 [DEBUG] [Thread-135430] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:04:05.802 [DEBUG] [Thread-135430] [transport.py] [_log()] Compression: none
2025-12-31T22:04:05.802 [DEBUG] [Thread-135430] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:04:05.819 [DEBUG] [Thread-135430] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:04:05.820 [DEBUG] [Thread-135430] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:04:05.820 [DEBUG] [Thread-135430] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T22:04:05.820 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T22:04:05.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:04:05.822 [DEBUG] [Thread-135430] [transport.py] [_log()] userauth is OK
2025-12-31T22:04:05.823 [DEBUG] [Thread-135430] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:04:05.823 [DEBUG] [Thread-135430] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:04:05.823 [DEBUG] [Thread-135430] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T22:04:05.823 [DEBUG] [Thread-135430] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:04:05.844 [INFO] [Thread-135430] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:04:05.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:04:06.491 [DEBUG] [Thread-135430] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:04:06.491 [DEBUG] [Thread-135430] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:04:06.491 [DEBUG] [Thread-135430] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T22:04:06.532 [DEBUG] [Thread-135430] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:04:06.532 [DEBUG] [Thread-135430] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:04:06.535 [DEBUG] [Thread-135430] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:04:06.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:04:06.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T22:04:06.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T22:04:06.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T22:04:06.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:04:06.552 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T22:04:06.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:04:06.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:04:06.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T22:04:06.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.835901 -999.00  +16.20  14.37     72  +11.40 1 2 1 1 1     0    0 3.94 -45.81 ZNesW 10.0 14.4 190.2 22.7 17.2 -18.2 17.1 -17.9 16.9 -16.9 17.2 -17.7
2025-12-31T22:04:06.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T22:04:06.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T22:04:06.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.835901
2025-12-31T22:04:06.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T22:04:06.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T22:04:06.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T22:04:06.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T22:04:06.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T22:04:06.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T22:03:33', tmtdew=5.49, humidity=70.03, cloud=0.0, wind=23.38, temperature=16.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T22:03:33', seeing=1.24, atlas_timestamp='2025-12-31T20:03:41.846', atlas_cloud=2, atlas_rain=1, zp_data=[0.6812499999999995, 0.9337499999999999, 0.9102500000000004, nan, 0.6630000000000003, 0.5157500000000006, 0.15700000000000003, 0.5732500000000007, 0.5869999999999997, 0.9390000000000001, 1.1622499999999993, 1.0220000000000002, 0.8825000000000003, 0.4392499999999995, 0.14300000000000068, 0.31899999999999906, 0.5177499999999995, 1.0995, 1.4499999999999993, nan, 1.097999999999999, 0.35974999999999824, 0.009250000000001535, -0.08175000000000132, 0.2939999999999987, 0.6795, 0.4007500000000004, -0.13899999999999935, 0.49650000000000016, -0.8359999999999985, -1.2434999999999992, 0.04650000000000176, 0.2207499999999989], zp_timestamp='2025-12-31T20:02:00')
2025-12-31T22:04:06.553 [DEBUG] [Thread-135430] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:04:06.627 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T22:04:06.639 [DEBUG] [Thread-135433] [transport.py] [_log()] starting thread (client mode): 0xb6bba410
2025-12-31T22:04:06.639 [DEBUG] [Thread-135433] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:04:06.655 [DEBUG] [Thread-135433] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T22:04:06.655 [INFO] [Thread-135433] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T22:04:06.663 [DEBUG] [Thread-135433] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:04:06.663 [DEBUG] [Thread-135433] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T22:04:06.663 [DEBUG] [Thread-135433] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:04:06.663 [DEBUG] [Thread-135433] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:04:06.663 [DEBUG] [Thread-135433] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:04:06.663 [DEBUG] [Thread-135433] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:04:06.663 [DEBUG] [Thread-135433] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:04:06.663 [DEBUG] [Thread-135433] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:04:06.663 [DEBUG] [Thread-135433] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:04:06.663 [DEBUG] [Thread-135433] [transport.py] [_log()] client lang: <none>
2025-12-31T22:04:06.663 [DEBUG] [Thread-135433] [transport.py] [_log()] server lang: <none>
2025-12-31T22:04:06.663 [DEBUG] [Thread-135433] [transport.py] [_log()] kex follows: False
2025-12-31T22:04:06.663 [DEBUG] [Thread-135433] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:04:06.663 [DEBUG] [Thread-135433] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:04:06.663 [DEBUG] [Thread-135433] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:04:06.663 [DEBUG] [Thread-135433] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:04:06.663 [DEBUG] [Thread-135433] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:04:06.663 [DEBUG] [Thread-135433] [transport.py] [_log()] Compression: none
2025-12-31T22:04:06.663 [DEBUG] [Thread-135433] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:04:06.722 [DEBUG] [Thread-135433] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:04:06.722 [DEBUG] [Thread-135433] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:04:06.722 [DEBUG] [Thread-135433] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T22:04:06.722 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T22:04:06.722 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:04:06.785 [DEBUG] [Thread-135433] [transport.py] [_log()] userauth is OK
2025-12-31T22:04:06.785 [DEBUG] [Thread-135433] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:04:06.785 [DEBUG] [Thread-135433] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:04:06.785 [DEBUG] [Thread-135433] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T22:04:06.785 [DEBUG] [Thread-135433] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:04:06.801 [INFO] [Thread-135433] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:04:06.801 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T22:04:06.801 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:04:07.653 [DEBUG] [Thread-135433] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:04:07.653 [DEBUG] [Thread-135433] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:04:07.700 [DEBUG] [Thread-135433] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:04:07.700 [DEBUG] [Thread-135433] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:04:07.708 [DEBUG] [Thread-135433] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:04:07.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:04:07.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T22:04:07.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T22:04:07.733 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:04:07.733 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:04:07.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:04:07.743 [DEBUG] [Thread-135433] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:04:09.084 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:04:09.085 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:04:15.434 [DEBUG] [Thread-135435 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:04:30.481 [DEBUG] [Thread-135436 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:04:37.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T22:04:37.750 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T22:04:37.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T22:04:38.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 22, 4, 5), 5.48, 70.05, 0.0, 20.01, 16.05, 0, 0, 0, 2, 0, 0),)
2025-12-31T22:04:38.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 22:04:05
2025-12-31T22:04:38.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T22:04:38.821 [DEBUG] [Thread-135437] [transport.py] [_log()] starting thread (client mode): 0xb1747ac0
2025-12-31T22:04:38.821 [DEBUG] [Thread-135437] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:04:38.842 [DEBUG] [Thread-135437] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T22:04:38.842 [INFO] [Thread-135437] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T22:04:38.845 [DEBUG] [Thread-135437] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:04:38.845 [DEBUG] [Thread-135437] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T22:04:38.845 [DEBUG] [Thread-135437] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:04:38.845 [DEBUG] [Thread-135437] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:04:38.845 [DEBUG] [Thread-135437] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:04:38.845 [DEBUG] [Thread-135437] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:04:38.845 [DEBUG] [Thread-135437] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:04:38.845 [DEBUG] [Thread-135437] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:04:38.845 [DEBUG] [Thread-135437] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:04:38.845 [DEBUG] [Thread-135437] [transport.py] [_log()] client lang: <none>
2025-12-31T22:04:38.846 [DEBUG] [Thread-135437] [transport.py] [_log()] server lang: <none>
2025-12-31T22:04:38.846 [DEBUG] [Thread-135437] [transport.py] [_log()] kex follows: False
2025-12-31T22:04:38.846 [DEBUG] [Thread-135437] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:04:38.846 [DEBUG] [Thread-135437] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:04:38.846 [DEBUG] [Thread-135437] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:04:38.846 [DEBUG] [Thread-135437] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:04:38.846 [DEBUG] [Thread-135437] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:04:38.846 [DEBUG] [Thread-135437] [transport.py] [_log()] Compression: none
2025-12-31T22:04:38.846 [DEBUG] [Thread-135437] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:04:38.862 [DEBUG] [Thread-135437] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:04:38.863 [DEBUG] [Thread-135437] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:04:38.863 [DEBUG] [Thread-135437] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T22:04:38.863 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T22:04:38.863 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:04:38.864 [DEBUG] [Thread-135437] [transport.py] [_log()] userauth is OK
2025-12-31T22:04:38.864 [DEBUG] [Thread-135437] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:04:38.864 [DEBUG] [Thread-135437] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:04:38.864 [DEBUG] [Thread-135437] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T22:04:38.864 [DEBUG] [Thread-135437] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:04:38.873 [INFO] [Thread-135437] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:04:38.874 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:04:39.654 [DEBUG] [Thread-135437] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:04:39.654 [DEBUG] [Thread-135437] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:04:39.654 [DEBUG] [Thread-135437] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T22:04:39.694 [DEBUG] [Thread-135437] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:04:39.694 [DEBUG] [Thread-135437] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:04:39.697 [DEBUG] [Thread-135437] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:04:39.710 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:04:39.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T22:04:39.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T22:04:39.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T22:04:39.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:04:39.714 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T22:04:39.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:04:39.714 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:04:39.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T22:04:39.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.836248 -999.00  +16.20  13.77     72  +11.30 1 2 1 1 1     0    0 4.11 -43.39 zN.SW 7.0 13.8 203.8 21.6 17.2 -18.3 17.1 -17.9 16.9 -17.1 17.2 -17.5
2025-12-31T22:04:39.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T22:04:39.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T22:04:39.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.836248
2025-12-31T22:04:39.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T22:04:39.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T22:04:39.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T22:04:39.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T22:04:39.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T22:04:39.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T22:04:05', tmtdew=5.48, humidity=70.05, cloud=0.0, wind=20.01, temperature=16.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T22:04:05', seeing=1.5, atlas_timestamp='2025-12-31T20:04:11.827', atlas_cloud=2, atlas_rain=1, zp_data=[0.6812499999999995, 0.9337499999999999, 0.9102500000000004, nan, 0.6630000000000003, 0.5157500000000006, 0.15700000000000003, 0.5732500000000007, 0.5869999999999997, 0.9390000000000001, 1.1622499999999993, 1.0220000000000002, 0.8825000000000003, 0.4392499999999995, 0.14300000000000068, 0.31899999999999906, 0.5177499999999995, 1.0995, 1.4499999999999993, nan, 1.097999999999999, 0.35974999999999824, 0.009250000000001535, -0.08175000000000132, 0.2939999999999987, 0.6795, 0.4007500000000004, -0.13899999999999935, 0.49650000000000016, -0.8359999999999985, -1.2434999999999992, 0.04650000000000176, 0.2207499999999989], zp_timestamp='2025-12-31T20:02:00')
2025-12-31T22:04:39.715 [DEBUG] [Thread-135437] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:04:39.790 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T22:04:39.802 [DEBUG] [Thread-135440] [transport.py] [_log()] starting thread (client mode): 0xb1747880
2025-12-31T22:04:39.802 [DEBUG] [Thread-135440] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:04:39.817 [DEBUG] [Thread-135440] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T22:04:39.817 [INFO] [Thread-135440] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T22:04:39.824 [DEBUG] [Thread-135440] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:04:39.824 [DEBUG] [Thread-135440] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T22:04:39.824 [DEBUG] [Thread-135440] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:04:39.824 [DEBUG] [Thread-135440] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:04:39.824 [DEBUG] [Thread-135440] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:04:39.824 [DEBUG] [Thread-135440] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:04:39.824 [DEBUG] [Thread-135440] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:04:39.824 [DEBUG] [Thread-135440] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:04:39.824 [DEBUG] [Thread-135440] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:04:39.824 [DEBUG] [Thread-135440] [transport.py] [_log()] client lang: <none>
2025-12-31T22:04:39.824 [DEBUG] [Thread-135440] [transport.py] [_log()] server lang: <none>
2025-12-31T22:04:39.824 [DEBUG] [Thread-135440] [transport.py] [_log()] kex follows: False
2025-12-31T22:04:39.824 [DEBUG] [Thread-135440] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:04:39.824 [DEBUG] [Thread-135440] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:04:39.824 [DEBUG] [Thread-135440] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:04:39.824 [DEBUG] [Thread-135440] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:04:39.824 [DEBUG] [Thread-135440] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:04:39.824 [DEBUG] [Thread-135440] [transport.py] [_log()] Compression: none
2025-12-31T22:04:39.824 [DEBUG] [Thread-135440] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:04:39.882 [DEBUG] [Thread-135440] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:04:39.882 [DEBUG] [Thread-135440] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:04:39.882 [DEBUG] [Thread-135440] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T22:04:39.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T22:04:39.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:04:39.937 [DEBUG] [Thread-135440] [transport.py] [_log()] userauth is OK
2025-12-31T22:04:39.938 [DEBUG] [Thread-135440] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:04:39.938 [DEBUG] [Thread-135440] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:04:39.938 [DEBUG] [Thread-135440] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T22:04:39.938 [DEBUG] [Thread-135440] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:04:39.952 [INFO] [Thread-135440] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:04:39.952 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T22:04:39.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:04:40.859 [DEBUG] [Thread-135440] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:04:40.859 [DEBUG] [Thread-135440] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:04:40.909 [DEBUG] [Thread-135440] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:04:40.909 [DEBUG] [Thread-135440] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:04:40.917 [DEBUG] [Thread-135440] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:04:40.925 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:04:40.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T22:04:40.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T22:04:40.942 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:04:40.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:04:40.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:04:40.950 [DEBUG] [Thread-135440] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:04:45.515 [DEBUG] [Thread-135442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:04:46.242 [DEBUG] [Thread-135443 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:05:00.573 [DEBUG] [Thread-135444 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:05:09.286 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:05:09.287 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:05:10.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T22:05:10.955 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T22:05:10.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T22:05:11.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 22, 4, 37), 5.41, 70.15, 0.0, 20.8, 15.99, 0, 0, 0, 2, 0, 0),)
2025-12-31T22:05:11.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 22:04:37
2025-12-31T22:05:11.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T22:05:11.995 [DEBUG] [Thread-135445] [transport.py] [_log()] starting thread (client mode): 0xb1746a10
2025-12-31T22:05:11.995 [DEBUG] [Thread-135445] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:05:12.018 [DEBUG] [Thread-135445] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T22:05:12.018 [INFO] [Thread-135445] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T22:05:12.021 [DEBUG] [Thread-135445] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:05:12.021 [DEBUG] [Thread-135445] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T22:05:12.021 [DEBUG] [Thread-135445] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:05:12.021 [DEBUG] [Thread-135445] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:05:12.021 [DEBUG] [Thread-135445] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:05:12.021 [DEBUG] [Thread-135445] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:05:12.021 [DEBUG] [Thread-135445] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:05:12.021 [DEBUG] [Thread-135445] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:05:12.021 [DEBUG] [Thread-135445] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:05:12.021 [DEBUG] [Thread-135445] [transport.py] [_log()] client lang: <none>
2025-12-31T22:05:12.021 [DEBUG] [Thread-135445] [transport.py] [_log()] server lang: <none>
2025-12-31T22:05:12.021 [DEBUG] [Thread-135445] [transport.py] [_log()] kex follows: False
2025-12-31T22:05:12.021 [DEBUG] [Thread-135445] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:05:12.021 [DEBUG] [Thread-135445] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:05:12.021 [DEBUG] [Thread-135445] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:05:12.021 [DEBUG] [Thread-135445] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:05:12.021 [DEBUG] [Thread-135445] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:05:12.021 [DEBUG] [Thread-135445] [transport.py] [_log()] Compression: none
2025-12-31T22:05:12.021 [DEBUG] [Thread-135445] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:05:12.036 [DEBUG] [Thread-135445] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:05:12.036 [DEBUG] [Thread-135445] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:05:12.036 [DEBUG] [Thread-135445] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T22:05:12.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T22:05:12.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:05:12.037 [DEBUG] [Thread-135445] [transport.py] [_log()] userauth is OK
2025-12-31T22:05:12.037 [DEBUG] [Thread-135445] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:05:12.037 [DEBUG] [Thread-135445] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:05:12.037 [DEBUG] [Thread-135445] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T22:05:12.037 [DEBUG] [Thread-135445] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:05:12.052 [INFO] [Thread-135445] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:05:12.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:05:15.605 [DEBUG] [Thread-135447 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:05:18.808 [DEBUG] [Thread-135445] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:05:18.809 [DEBUG] [Thread-135445] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:05:18.809 [DEBUG] [Thread-135445] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T22:05:18.850 [DEBUG] [Thread-135445] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:05:18.850 [DEBUG] [Thread-135445] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:05:18.852 [DEBUG] [Thread-135445] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:05:18.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:05:18.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T22:05:18.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T22:05:18.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T22:05:18.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:05:18.871 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T22:05:18.871 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:05:18.871 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:05:18.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T22:05:18.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.836595 -999.00  +16.20  11.67     72  +11.30 1 2 1 1 1     0    0 3.94 -42.22 zN.SW 13.5 11.7 190.5 19.8 17.2 -18.2 17.1 -18.3 16.9 -17.2 17.2 -17.9
2025-12-31T22:05:18.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T22:05:18.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T22:05:18.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.836595
2025-12-31T22:05:18.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T22:05:18.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T22:05:18.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T22:05:18.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T22:05:18.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T22:05:18.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T22:04:37', tmtdew=5.41, humidity=70.15, cloud=0.0, wind=20.8, temperature=15.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T22:05:10', seeing=1.58, atlas_timestamp='2025-12-31T20:04:41.808', atlas_cloud=2, atlas_rain=1, zp_data=[0.6812499999999995, 0.9337499999999999, 0.9102500000000004, nan, 0.6630000000000003, 0.5157500000000006, 0.15700000000000003, 0.5732500000000007, 0.5869999999999997, 0.9390000000000001, 1.1622499999999993, 1.0220000000000002, 0.8825000000000003, 0.4392499999999995, 0.14300000000000068, 0.31899999999999906, 0.5177499999999995, 1.0995, 1.4499999999999993, nan, 1.097999999999999, 0.35974999999999824, 0.009250000000001535, -0.08175000000000132, 0.2939999999999987, 0.6795, 0.4007500000000004, -0.13899999999999935, 0.49650000000000016, -0.8359999999999985, -1.2434999999999992, 0.04650000000000176, 0.2207499999999989], zp_timestamp='2025-12-31T20:02:00')
2025-12-31T22:05:18.872 [DEBUG] [Thread-135445] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:05:18.946 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T22:05:18.960 [DEBUG] [Thread-135449] [transport.py] [_log()] starting thread (client mode): 0xb1774eb0
2025-12-31T22:05:18.960 [DEBUG] [Thread-135449] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:05:18.981 [DEBUG] [Thread-135449] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T22:05:18.981 [INFO] [Thread-135449] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T22:05:18.989 [DEBUG] [Thread-135449] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:05:18.989 [DEBUG] [Thread-135449] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T22:05:18.989 [DEBUG] [Thread-135449] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:05:18.989 [DEBUG] [Thread-135449] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:05:18.989 [DEBUG] [Thread-135449] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:05:18.989 [DEBUG] [Thread-135449] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:05:18.989 [DEBUG] [Thread-135449] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:05:18.989 [DEBUG] [Thread-135449] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:05:18.989 [DEBUG] [Thread-135449] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:05:18.989 [DEBUG] [Thread-135449] [transport.py] [_log()] client lang: <none>
2025-12-31T22:05:18.989 [DEBUG] [Thread-135449] [transport.py] [_log()] server lang: <none>
2025-12-31T22:05:18.989 [DEBUG] [Thread-135449] [transport.py] [_log()] kex follows: False
2025-12-31T22:05:18.989 [DEBUG] [Thread-135449] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:05:18.989 [DEBUG] [Thread-135449] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:05:18.989 [DEBUG] [Thread-135449] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:05:18.989 [DEBUG] [Thread-135449] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:05:18.989 [DEBUG] [Thread-135449] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:05:18.989 [DEBUG] [Thread-135449] [transport.py] [_log()] Compression: none
2025-12-31T22:05:18.989 [DEBUG] [Thread-135449] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:05:19.044 [DEBUG] [Thread-135449] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:05:19.044 [DEBUG] [Thread-135449] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:05:19.044 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T22:05:19.044 [DEBUG] [Thread-135449] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T22:05:19.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:05:19.101 [DEBUG] [Thread-135449] [transport.py] [_log()] userauth is OK
2025-12-31T22:05:19.101 [DEBUG] [Thread-135449] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:05:19.101 [DEBUG] [Thread-135449] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:05:19.101 [DEBUG] [Thread-135449] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T22:05:19.102 [DEBUG] [Thread-135449] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:05:19.116 [INFO] [Thread-135449] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:05:19.116 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T22:05:19.116 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:05:19.930 [DEBUG] [Thread-135449] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:05:19.930 [DEBUG] [Thread-135449] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:05:19.977 [DEBUG] [Thread-135449] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:05:19.977 [DEBUG] [Thread-135449] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:05:19.986 [DEBUG] [Thread-135449] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:05:19.994 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:05:19.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T22:05: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') -> 00000000
2025-12-31T22:05:20.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:05:20.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:05:20.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:05:20.022 [DEBUG] [Thread-135449] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:05:30.635 [DEBUG] [Thread-135451 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:05:45.683 [DEBUG] [Thread-135452 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:05:46.298 [DEBUG] [Thread-135453 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:05:50.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T22:05:50.018 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T22:05:50.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T22:05:50.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 22, 5, 42), 5.4, 70.2, 0.0, 20.66, 15.97, 0, 0, 0, 2, 0, 0),)
2025-12-31T22:05:50.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 22:05:42
2025-12-31T22:05:50.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T22:05:51.021 [DEBUG] [Thread-135454] [transport.py] [_log()] starting thread (client mode): 0xb1765690
2025-12-31T22:05:51.021 [DEBUG] [Thread-135454] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:05:51.042 [DEBUG] [Thread-135454] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T22:05:51.042 [INFO] [Thread-135454] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T22:05:51.045 [DEBUG] [Thread-135454] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:05:51.045 [DEBUG] [Thread-135454] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T22:05:51.045 [DEBUG] [Thread-135454] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:05:51.045 [DEBUG] [Thread-135454] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:05:51.045 [DEBUG] [Thread-135454] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:05:51.045 [DEBUG] [Thread-135454] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:05:51.046 [DEBUG] [Thread-135454] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:05:51.046 [DEBUG] [Thread-135454] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:05:51.046 [DEBUG] [Thread-135454] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:05:51.046 [DEBUG] [Thread-135454] [transport.py] [_log()] client lang: <none>
2025-12-31T22:05:51.046 [DEBUG] [Thread-135454] [transport.py] [_log()] server lang: <none>
2025-12-31T22:05:51.046 [DEBUG] [Thread-135454] [transport.py] [_log()] kex follows: False
2025-12-31T22:05:51.046 [DEBUG] [Thread-135454] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:05:51.046 [DEBUG] [Thread-135454] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:05:51.046 [DEBUG] [Thread-135454] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:05:51.046 [DEBUG] [Thread-135454] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:05:51.046 [DEBUG] [Thread-135454] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:05:51.046 [DEBUG] [Thread-135454] [transport.py] [_log()] Compression: none
2025-12-31T22:05:51.046 [DEBUG] [Thread-135454] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:05:51.064 [DEBUG] [Thread-135454] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:05:51.065 [DEBUG] [Thread-135454] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:05:51.065 [DEBUG] [Thread-135454] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T22:05:51.066 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T22:05:51.066 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:05:51.068 [DEBUG] [Thread-135454] [transport.py] [_log()] userauth is OK
2025-12-31T22:05:51.068 [DEBUG] [Thread-135454] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:05:51.068 [DEBUG] [Thread-135454] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:05:51.068 [DEBUG] [Thread-135454] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T22:05:51.068 [DEBUG] [Thread-135454] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:05:51.093 [INFO] [Thread-135454] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:05:51.093 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:05:51.700 [DEBUG] [Thread-135454] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:05:51.700 [DEBUG] [Thread-135454] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:05:51.700 [DEBUG] [Thread-135454] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T22:05:51.742 [DEBUG] [Thread-135454] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:05:51.742 [DEBUG] [Thread-135454] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:05:51.745 [DEBUG] [Thread-135454] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:05:51.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:05:51.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T22:05:51.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T22:05:51.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T22:05:51.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:05:51.770 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T22:05:51.770 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:05:51.771 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:05:51.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T22:05:51.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.836942 -999.00  +16.20  12.72     72  +11.30 1 2 1 1 1     0    0 4.04 -45.59 ZN.Sw 13.0 12.7 200.2 19.2 17.1 -18.4 17.1 -18.0 16.9 -17.2 17.2 -17.7
2025-12-31T22:05:51.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T22:05:51.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T22:05:51.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.836942
2025-12-31T22:05:51.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T22:05:51.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T22:05:51.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T22:05:51.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T22:05:51.773 [DEBUG] [Thread-135454] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:05:51.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T22:05:51.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T22:05:42', tmtdew=5.4, humidity=70.2, cloud=0.0, wind=20.66, temperature=15.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T22:05:42', seeing=1.54, atlas_timestamp='2025-12-31T20:05:11.789', atlas_cloud=2, atlas_rain=1, zp_data=[0.8907499999999997, 1.277750000000001, 0.8637500000000005, nan, 0.7550000000000008, nan, 0.7839999999999989, 0.8997500000000009, 0.9394999999999989, 1.4565000000000001, 0.8872499999999999, 0.6109999999999998, 0.5860000000000003, 0.5162499999999994, 0.41600000000000037, 0.5299999999999994, 1.35025, 1.7649999999999997, 1.147499999999999, 0.481749999999999, 0.4449999999999985, 0.465749999999999, -0.8027499999999996, 0.6047500000000001, 1.275999999999999, 0.29850000000000065, 0.29625000000000057, 0.33500000000000085, 0.42100000000000026, -0.13299999999999912, -1.491999999999999, -1.4189999999999987, 0.7427499999999991], zp_timestamp='2025-12-31T20:05:00')
2025-12-31T22:05:51.852 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T22:05:51.864 [DEBUG] [Thread-135457] [transport.py] [_log()] starting thread (client mode): 0xb175bcd0
2025-12-31T22:05:51.865 [DEBUG] [Thread-135457] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:05:51.879 [DEBUG] [Thread-135457] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T22:05:51.880 [INFO] [Thread-135457] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T22:05:51.888 [DEBUG] [Thread-135457] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:05:51.889 [DEBUG] [Thread-135457] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T22:05:51.889 [DEBUG] [Thread-135457] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:05:51.889 [DEBUG] [Thread-135457] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:05:51.889 [DEBUG] [Thread-135457] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:05:51.889 [DEBUG] [Thread-135457] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:05:51.889 [DEBUG] [Thread-135457] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:05:51.889 [DEBUG] [Thread-135457] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:05:51.889 [DEBUG] [Thread-135457] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:05:51.889 [DEBUG] [Thread-135457] [transport.py] [_log()] client lang: <none>
2025-12-31T22:05:51.890 [DEBUG] [Thread-135457] [transport.py] [_log()] server lang: <none>
2025-12-31T22:05:51.890 [DEBUG] [Thread-135457] [transport.py] [_log()] kex follows: False
2025-12-31T22:05:51.890 [DEBUG] [Thread-135457] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:05:51.890 [DEBUG] [Thread-135457] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:05:51.890 [DEBUG] [Thread-135457] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:05:51.890 [DEBUG] [Thread-135457] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:05:51.890 [DEBUG] [Thread-135457] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:05:51.891 [DEBUG] [Thread-135457] [transport.py] [_log()] Compression: none
2025-12-31T22:05:51.891 [DEBUG] [Thread-135457] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:05:51.948 [DEBUG] [Thread-135457] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:05:51.948 [DEBUG] [Thread-135457] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:05:51.949 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T22:05:51.950 [DEBUG] [Thread-135457] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T22:05:51.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:05:52.006 [DEBUG] [Thread-135457] [transport.py] [_log()] userauth is OK
2025-12-31T22:05:52.006 [DEBUG] [Thread-135457] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:05:52.006 [DEBUG] [Thread-135457] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:05:52.006 [DEBUG] [Thread-135457] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T22:05:52.007 [DEBUG] [Thread-135457] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:05:52.026 [INFO] [Thread-135457] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:05:52.026 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T22:05:52.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:05:52.838 [DEBUG] [Thread-135457] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:05:52.838 [DEBUG] [Thread-135457] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:05:52.886 [DEBUG] [Thread-135457] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:05:52.886 [DEBUG] [Thread-135457] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:05:52.895 [DEBUG] [Thread-135457] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:05:52.904 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:05:52.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T22:05:52.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T22:05:52.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:05:52.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:05:52.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:05:52.932 [DEBUG] [Thread-135457] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:06:00.714 [DEBUG] [Thread-135459 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:06:09.487 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:06:09.488 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:06:15.775 [DEBUG] [Thread-135460 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:06:22.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T22:06:22.955 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T22:06:22.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T22:06:23.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 22, 6, 14), 5.41, 70.16, 0.0, 20.84, 15.94, 0, 0, 0, 2, 0, 0),)
2025-12-31T22:06:23.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 22:06:14
2025-12-31T22:06:23.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T22:06:23.956 [DEBUG] [Thread-135461] [transport.py] [_log()] starting thread (client mode): 0xb9591b40
2025-12-31T22:06:23.956 [DEBUG] [Thread-135461] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:06:23.977 [DEBUG] [Thread-135461] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T22:06:23.977 [INFO] [Thread-135461] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T22:06:23.980 [DEBUG] [Thread-135461] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:06:23.980 [DEBUG] [Thread-135461] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T22:06:23.980 [DEBUG] [Thread-135461] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:06:23.980 [DEBUG] [Thread-135461] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:06:23.980 [DEBUG] [Thread-135461] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:06:23.980 [DEBUG] [Thread-135461] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:06:23.980 [DEBUG] [Thread-135461] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:06:23.980 [DEBUG] [Thread-135461] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:06:23.980 [DEBUG] [Thread-135461] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:06:23.980 [DEBUG] [Thread-135461] [transport.py] [_log()] client lang: <none>
2025-12-31T22:06:23.980 [DEBUG] [Thread-135461] [transport.py] [_log()] server lang: <none>
2025-12-31T22:06:23.980 [DEBUG] [Thread-135461] [transport.py] [_log()] kex follows: False
2025-12-31T22:06:23.980 [DEBUG] [Thread-135461] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:06:23.980 [DEBUG] [Thread-135461] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:06:23.980 [DEBUG] [Thread-135461] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:06:23.981 [DEBUG] [Thread-135461] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:06:23.981 [DEBUG] [Thread-135461] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:06:23.981 [DEBUG] [Thread-135461] [transport.py] [_log()] Compression: none
2025-12-31T22:06:23.981 [DEBUG] [Thread-135461] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:06:23.997 [DEBUG] [Thread-135461] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:06:23.998 [DEBUG] [Thread-135461] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:06:23.998 [DEBUG] [Thread-135461] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T22:06:23.999 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T22:06:23.999 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:06:24.000 [DEBUG] [Thread-135461] [transport.py] [_log()] userauth is OK
2025-12-31T22:06:24.000 [DEBUG] [Thread-135461] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:06:24.001 [DEBUG] [Thread-135461] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:06:24.001 [DEBUG] [Thread-135461] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T22:06:24.001 [DEBUG] [Thread-135461] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:06:24.024 [INFO] [Thread-135461] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:06:24.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:06:24.793 [DEBUG] [Thread-135461] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:06:24.793 [DEBUG] [Thread-135461] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:06:24.794 [DEBUG] [Thread-135461] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T22:06:24.834 [DEBUG] [Thread-135461] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:06:24.834 [DEBUG] [Thread-135461] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:06:24.838 [DEBUG] [Thread-135461] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:06:24.849 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:06:24.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T22:06:24.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T22:06:24.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T22:06:24.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:06:24.859 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T22:06:24.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:06:24.859 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:06:24.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T22:06:24.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.837290 -999.00  +16.20  13.81     72  +11.30 1 2 1 1 1     0    0 3.82 -46.07 .N.Sw 13.7 13.8 189.8 17.0 17.2 -18.2 17.1 -18.0 16.9 -17.2 17.1 -17.6
2025-12-31T22:06:24.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T22:06:24.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T22:06:24.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.837290
2025-12-31T22:06:24.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T22:06:24.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T22:06:24.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T22:06:24.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T22:06:24.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T22:06:24.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T22:06:14', tmtdew=5.41, humidity=70.16, cloud=0.0, wind=20.84, temperature=15.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T22:06:14', seeing=1.29, atlas_timestamp='2025-12-31T20:05:41.856', atlas_cloud=2, atlas_rain=1, zp_data=[0.8907499999999997, 1.277750000000001, 0.8637500000000005, nan, 0.7550000000000008, nan, 0.7839999999999989, 0.8997500000000009, 0.9394999999999989, 1.4565000000000001, 0.8872499999999999, 0.6109999999999998, 0.5860000000000003, 0.5162499999999994, 0.41600000000000037, 0.5299999999999994, 1.35025, 1.7649999999999997, 1.147499999999999, 0.481749999999999, 0.4449999999999985, 0.465749999999999, -0.8027499999999996, 0.6047500000000001, 1.275999999999999, 0.29850000000000065, 0.29625000000000057, 0.33500000000000085, 0.42100000000000026, -0.13299999999999912, -1.491999999999999, -1.4189999999999987, 0.7427499999999991], zp_timestamp='2025-12-31T20:05:00')
2025-12-31T22:06:24.860 [DEBUG] [Thread-135461] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:06:24.933 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T22:06:24.945 [DEBUG] [Thread-135464] [transport.py] [_log()] starting thread (client mode): 0xb17650c0
2025-12-31T22:06:24.945 [DEBUG] [Thread-135464] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:06:24.960 [DEBUG] [Thread-135464] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T22:06:24.960 [INFO] [Thread-135464] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T22:06:24.968 [DEBUG] [Thread-135464] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:06:24.968 [DEBUG] [Thread-135464] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T22:06:24.968 [DEBUG] [Thread-135464] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:06:24.968 [DEBUG] [Thread-135464] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:06:24.968 [DEBUG] [Thread-135464] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:06:24.968 [DEBUG] [Thread-135464] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:06:24.968 [DEBUG] [Thread-135464] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:06:24.968 [DEBUG] [Thread-135464] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:06:24.968 [DEBUG] [Thread-135464] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:06:24.968 [DEBUG] [Thread-135464] [transport.py] [_log()] client lang: <none>
2025-12-31T22:06:24.968 [DEBUG] [Thread-135464] [transport.py] [_log()] server lang: <none>
2025-12-31T22:06:24.968 [DEBUG] [Thread-135464] [transport.py] [_log()] kex follows: False
2025-12-31T22:06:24.968 [DEBUG] [Thread-135464] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:06:24.968 [DEBUG] [Thread-135464] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:06:24.969 [DEBUG] [Thread-135464] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:06:24.969 [DEBUG] [Thread-135464] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:06:24.969 [DEBUG] [Thread-135464] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:06:24.969 [DEBUG] [Thread-135464] [transport.py] [_log()] Compression: none
2025-12-31T22:06:24.969 [DEBUG] [Thread-135464] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:06:25.030 [DEBUG] [Thread-135464] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:06:25.031 [DEBUG] [Thread-135464] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:06:25.031 [DEBUG] [Thread-135464] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T22:06:25.032 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T22:06:25.032 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:06:25.086 [DEBUG] [Thread-135464] [transport.py] [_log()] userauth is OK
2025-12-31T22:06:25.087 [DEBUG] [Thread-135464] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:06:25.087 [DEBUG] [Thread-135464] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:06:25.087 [DEBUG] [Thread-135464] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T22:06:25.087 [DEBUG] [Thread-135464] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:06:25.107 [INFO] [Thread-135464] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:06:25.107 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T22:06:25.108 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:06:25.956 [DEBUG] [Thread-135464] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:06:25.957 [DEBUG] [Thread-135464] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:06:26.005 [DEBUG] [Thread-135464] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:06:26.005 [DEBUG] [Thread-135464] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:06:26.015 [DEBUG] [Thread-135464] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:06:26.024 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:06:26.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T22:06:26.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T22:06:26.042 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:06:26.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:06:26.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:06:26.051 [DEBUG] [Thread-135464] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:06:30.805 [DEBUG] [Thread-135466 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:06:45.844 [DEBUG] [Thread-135467 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:06:46.366 [DEBUG] [Thread-135468 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:06:56.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T22:06:56.072 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T22:06:56.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T22:06:56.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 22, 6, 46), 5.4, 70.2, 0.0, 20.7, 16.04, 0, 0, 0, 2, 0, 0),)
2025-12-31T22:06:56.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 22:06:46
2025-12-31T22:06:56.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T22:06:57.091 [DEBUG] [Thread-135469] [transport.py] [_log()] starting thread (client mode): 0xb95d54e0
2025-12-31T22:06:57.092 [DEBUG] [Thread-135469] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:06:57.111 [DEBUG] [Thread-135469] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T22:06:57.111 [INFO] [Thread-135469] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T22:06:57.115 [DEBUG] [Thread-135469] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:06:57.115 [DEBUG] [Thread-135469] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T22:06:57.115 [DEBUG] [Thread-135469] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:06:57.115 [DEBUG] [Thread-135469] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:06:57.115 [DEBUG] [Thread-135469] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:06:57.115 [DEBUG] [Thread-135469] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:06:57.115 [DEBUG] [Thread-135469] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:06:57.115 [DEBUG] [Thread-135469] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:06:57.115 [DEBUG] [Thread-135469] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:06:57.115 [DEBUG] [Thread-135469] [transport.py] [_log()] client lang: <none>
2025-12-31T22:06:57.115 [DEBUG] [Thread-135469] [transport.py] [_log()] server lang: <none>
2025-12-31T22:06:57.115 [DEBUG] [Thread-135469] [transport.py] [_log()] kex follows: False
2025-12-31T22:06:57.115 [DEBUG] [Thread-135469] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:06:57.115 [DEBUG] [Thread-135469] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:06:57.115 [DEBUG] [Thread-135469] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:06:57.115 [DEBUG] [Thread-135469] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:06:57.115 [DEBUG] [Thread-135469] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:06:57.115 [DEBUG] [Thread-135469] [transport.py] [_log()] Compression: none
2025-12-31T22:06:57.115 [DEBUG] [Thread-135469] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:06:57.131 [DEBUG] [Thread-135469] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:06:57.131 [DEBUG] [Thread-135469] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:06:57.132 [DEBUG] [Thread-135469] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T22:06:57.132 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T22:06:57.133 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:06:57.134 [DEBUG] [Thread-135469] [transport.py] [_log()] userauth is OK
2025-12-31T22:06:57.134 [DEBUG] [Thread-135469] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:06:57.134 [DEBUG] [Thread-135469] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:06:57.134 [DEBUG] [Thread-135469] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T22:06:57.134 [DEBUG] [Thread-135469] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:06:57.170 [INFO] [Thread-135469] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:06:57.171 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:06:57.810 [DEBUG] [Thread-135469] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:06:57.810 [DEBUG] [Thread-135469] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:06:57.811 [DEBUG] [Thread-135469] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T22:06:57.852 [DEBUG] [Thread-135469] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:06:57.852 [DEBUG] [Thread-135469] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:06:57.855 [DEBUG] [Thread-135469] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:06:57.867 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:06:57.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T22:06:57.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T22:06:57.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T22:06:57.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:06:57.878 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T22:06:57.878 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:06:57.878 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:06:57.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T22:06:57.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.837637 -999.00  +16.20  14.57     72  +11.30 1 2 1 1 1     0    0 3.77 -48.94 .N.Sw 18.6 14.6 206.8 21.1 17.2 -18.5 17.0 -17.9 16.9 -16.9 17.1 -17.8
2025-12-31T22:06:57.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T22:06:57.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T22:06:57.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.837637
2025-12-31T22:06:57.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T22:06:57.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T22:06:57.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T22:06:57.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T22:06:57.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T22:06:57.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T22:06:46', tmtdew=5.4, humidity=70.2, cloud=0.0, wind=20.7, temperature=16.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T22:06:46', seeing=1.37, atlas_timestamp='2025-12-31T20:06:11.837', atlas_cloud=2, atlas_rain=1, zp_data=[0.8907499999999997, 1.277750000000001, 0.8637500000000005, nan, 0.7550000000000008, nan, 0.7839999999999989, 0.8997500000000009, 0.9394999999999989, 1.4565000000000001, 0.8872499999999999, 0.6109999999999998, 0.5860000000000003, 0.5162499999999994, 0.41600000000000037, 0.5299999999999994, 1.35025, 1.7649999999999997, 1.147499999999999, 0.481749999999999, 0.4449999999999985, 0.465749999999999, -0.8027499999999996, 0.6047500000000001, 1.275999999999999, 0.29850000000000065, 0.29625000000000057, 0.33500000000000085, 0.42100000000000026, -0.13299999999999912, -1.491999999999999, -1.4189999999999987, 0.7427499999999991], zp_timestamp='2025-12-31T20:05:00')
2025-12-31T22:06:57.880 [DEBUG] [Thread-135469] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:06:57.963 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T22:06:57.976 [DEBUG] [Thread-135472] [transport.py] [_log()] starting thread (client mode): 0xb6bbd720
2025-12-31T22:06:57.976 [DEBUG] [Thread-135472] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:06:57.991 [DEBUG] [Thread-135472] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T22:06:57.991 [INFO] [Thread-135472] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T22:06:57.998 [DEBUG] [Thread-135472] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:06:57.998 [DEBUG] [Thread-135472] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T22:06:57.998 [DEBUG] [Thread-135472] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:06:57.998 [DEBUG] [Thread-135472] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:06:57.998 [DEBUG] [Thread-135472] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:06:57.998 [DEBUG] [Thread-135472] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:06:57.998 [DEBUG] [Thread-135472] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:06:57.998 [DEBUG] [Thread-135472] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:06:57.999 [DEBUG] [Thread-135472] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:06:57.999 [DEBUG] [Thread-135472] [transport.py] [_log()] client lang: <none>
2025-12-31T22:06:57.999 [DEBUG] [Thread-135472] [transport.py] [_log()] server lang: <none>
2025-12-31T22:06:57.999 [DEBUG] [Thread-135472] [transport.py] [_log()] kex follows: False
2025-12-31T22:06:57.999 [DEBUG] [Thread-135472] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:06:57.999 [DEBUG] [Thread-135472] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:06:57.999 [DEBUG] [Thread-135472] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:06:57.999 [DEBUG] [Thread-135472] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:06:57.999 [DEBUG] [Thread-135472] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:06:57.999 [DEBUG] [Thread-135472] [transport.py] [_log()] Compression: none
2025-12-31T22:06:57.999 [DEBUG] [Thread-135472] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:06:58.057 [DEBUG] [Thread-135472] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:06:58.058 [DEBUG] [Thread-135472] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:06:58.058 [DEBUG] [Thread-135472] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T22:06:58.059 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T22:06:58.059 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:06:58.114 [DEBUG] [Thread-135472] [transport.py] [_log()] userauth is OK
2025-12-31T22:06:58.114 [DEBUG] [Thread-135472] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:06:58.114 [DEBUG] [Thread-135472] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:06:58.114 [DEBUG] [Thread-135472] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T22:06:58.114 [DEBUG] [Thread-135472] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:06:58.132 [INFO] [Thread-135472] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:06:58.132 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T22:06:58.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:06:58.937 [DEBUG] [Thread-135472] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:06:58.937 [DEBUG] [Thread-135472] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:06:58.989 [DEBUG] [Thread-135472] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:06:58.989 [DEBUG] [Thread-135472] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:06:58.998 [DEBUG] [Thread-135472] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:06:59.007 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:06:59.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T22:06:59.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T22:06:59.026 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:06:59.026 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:06:59.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:06:59.035 [DEBUG] [Thread-135472] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:07:00.877 [DEBUG] [Thread-135474 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:07:09.689 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:07:09.690 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:07:15.925 [DEBUG] [Thread-135475 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:07:29.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T22:07:29.045 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T22:07:29.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T22:07:29.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 22, 7, 18), 5.4, 70.18, 0.0, 21.4, 16.02, 0, 0, 0, 2, 0, 0),)
2025-12-31T22:07:29.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 22:07:18
2025-12-31T22:07:29.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T22:07:30.037 [DEBUG] [Thread-135476] [transport.py] [_log()] starting thread (client mode): 0xb17478b0
2025-12-31T22:07:30.037 [DEBUG] [Thread-135476] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:07:30.057 [DEBUG] [Thread-135476] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T22:07:30.057 [INFO] [Thread-135476] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T22:07:30.061 [DEBUG] [Thread-135476] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:07:30.061 [DEBUG] [Thread-135476] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T22:07:30.061 [DEBUG] [Thread-135476] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:07:30.061 [DEBUG] [Thread-135476] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:07:30.061 [DEBUG] [Thread-135476] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:07:30.061 [DEBUG] [Thread-135476] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:07:30.061 [DEBUG] [Thread-135476] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:07:30.061 [DEBUG] [Thread-135476] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:07:30.061 [DEBUG] [Thread-135476] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:07:30.061 [DEBUG] [Thread-135476] [transport.py] [_log()] client lang: <none>
2025-12-31T22:07:30.061 [DEBUG] [Thread-135476] [transport.py] [_log()] server lang: <none>
2025-12-31T22:07:30.061 [DEBUG] [Thread-135476] [transport.py] [_log()] kex follows: False
2025-12-31T22:07:30.061 [DEBUG] [Thread-135476] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:07:30.061 [DEBUG] [Thread-135476] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:07:30.061 [DEBUG] [Thread-135476] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:07:30.061 [DEBUG] [Thread-135476] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:07:30.061 [DEBUG] [Thread-135476] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:07:30.061 [DEBUG] [Thread-135476] [transport.py] [_log()] Compression: none
2025-12-31T22:07:30.062 [DEBUG] [Thread-135476] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:07:30.078 [DEBUG] [Thread-135476] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:07:30.078 [DEBUG] [Thread-135476] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:07:30.079 [DEBUG] [Thread-135476] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T22:07:30.079 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T22:07:30.080 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:07:30.081 [DEBUG] [Thread-135476] [transport.py] [_log()] userauth is OK
2025-12-31T22:07:30.081 [DEBUG] [Thread-135476] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:07:30.081 [DEBUG] [Thread-135476] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:07:30.081 [DEBUG] [Thread-135476] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T22:07:30.081 [DEBUG] [Thread-135476] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:07:30.096 [INFO] [Thread-135476] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:07:30.097 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:07:30.704 [DEBUG] [Thread-135476] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:07:30.705 [DEBUG] [Thread-135476] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:07:30.705 [DEBUG] [Thread-135476] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T22:07:30.745 [DEBUG] [Thread-135476] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:07:30.746 [DEBUG] [Thread-135476] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:07:30.749 [DEBUG] [Thread-135476] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:07:30.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:07:30.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T22:07:30.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T22:07:30.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T22:07:30.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:07:30.775 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T22:07:30.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:07:30.775 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:07:30.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T22:07:30.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.838331 -999.00  +16.20  15.12     72  +11.30 1 2 1 1 1     0    0 3.85 -48.50 ZN.SW 14.2 15.1 199.2 22.8 17.1 -18.6 17.0 -18.4 16.9 -17.2 17.1 -17.8
2025-12-31T22:07:30.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T22:07:30.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T22:07:30.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.838331
2025-12-31T22:07:30.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T22:07:30.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T22:07:30.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T22:07:30.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T22:07:30.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T22:07:30.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T22:07:18', tmtdew=5.4, humidity=70.18, cloud=0.0, wind=21.4, temperature=16.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T22:07:18', seeing=1.57, atlas_timestamp='2025-12-31T20:07:11.798', atlas_cloud=2, atlas_rain=1, zp_data=[0.8907499999999997, 1.277750000000001, 0.8637500000000005, nan, 0.7550000000000008, nan, 0.7839999999999989, 0.8997500000000009, 0.9394999999999989, 1.4565000000000001, 0.8872499999999999, 0.6109999999999998, 0.5860000000000003, 0.5162499999999994, 0.41600000000000037, 0.5299999999999994, 1.35025, 1.7649999999999997, 1.147499999999999, 0.481749999999999, 0.4449999999999985, 0.465749999999999, -0.8027499999999996, 0.6047500000000001, 1.275999999999999, 0.29850000000000065, 0.29625000000000057, 0.33500000000000085, 0.42100000000000026, -0.13299999999999912, -1.491999999999999, -1.4189999999999987, 0.7427499999999991], zp_timestamp='2025-12-31T20:05:00')
2025-12-31T22:07:30.778 [DEBUG] [Thread-135476] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:07:30.862 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T22:07:30.875 [DEBUG] [Thread-135479] [transport.py] [_log()] starting thread (client mode): 0xb1758ca0
2025-12-31T22:07:30.875 [DEBUG] [Thread-135479] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:07:30.889 [DEBUG] [Thread-135479] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T22:07:30.889 [INFO] [Thread-135479] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T22:07:30.897 [DEBUG] [Thread-135479] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:07:30.897 [DEBUG] [Thread-135479] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T22:07:30.897 [DEBUG] [Thread-135479] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:07:30.897 [DEBUG] [Thread-135479] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:07:30.897 [DEBUG] [Thread-135479] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:07:30.897 [DEBUG] [Thread-135479] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:07:30.897 [DEBUG] [Thread-135479] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:07:30.897 [DEBUG] [Thread-135479] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:07:30.897 [DEBUG] [Thread-135479] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:07:30.897 [DEBUG] [Thread-135479] [transport.py] [_log()] client lang: <none>
2025-12-31T22:07:30.897 [DEBUG] [Thread-135479] [transport.py] [_log()] server lang: <none>
2025-12-31T22:07:30.897 [DEBUG] [Thread-135479] [transport.py] [_log()] kex follows: False
2025-12-31T22:07:30.898 [DEBUG] [Thread-135479] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:07:30.898 [DEBUG] [Thread-135479] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:07:30.898 [DEBUG] [Thread-135479] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:07:30.898 [DEBUG] [Thread-135479] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:07:30.898 [DEBUG] [Thread-135479] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:07:30.898 [DEBUG] [Thread-135479] [transport.py] [_log()] Compression: none
2025-12-31T22:07:30.898 [DEBUG] [Thread-135479] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:07:30.964 [DEBUG] [Thread-135481 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:07:30.967 [DEBUG] [Thread-135479] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:07:30.968 [DEBUG] [Thread-135479] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:07:30.969 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T22:07:30.969 [DEBUG] [Thread-135479] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T22:07:30.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:07:31.031 [DEBUG] [Thread-135479] [transport.py] [_log()] userauth is OK
2025-12-31T22:07:31.032 [DEBUG] [Thread-135479] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:07:31.032 [DEBUG] [Thread-135479] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:07:31.032 [DEBUG] [Thread-135479] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T22:07:31.032 [DEBUG] [Thread-135479] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:07:31.063 [INFO] [Thread-135479] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:07:31.063 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T22:07:31.063 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:07:31.902 [DEBUG] [Thread-135479] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:07:31.902 [DEBUG] [Thread-135479] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:07:31.950 [DEBUG] [Thread-135479] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:07:31.950 [DEBUG] [Thread-135479] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:07:31.959 [DEBUG] [Thread-135479] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:07:31.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:07:31.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T22:07:31.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T22:07:31.987 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:07:31.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:07:31.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:07:31.997 [DEBUG] [Thread-135479] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:07:46.014 [DEBUG] [Thread-135482 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:07:46.438 [DEBUG] [Thread-135483 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:08:01.047 [DEBUG] [Thread-135484 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:08:02.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T22:08:02.018 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T22:08:02.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T22:08:02.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 22, 7, 50), 5.41, 70.16, 0.0, 20.66, 16.0, 0, 0, 0, 2, 0, 0),)
2025-12-31T22:08:02.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 22:07:50
2025-12-31T22:08:02.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T22:08:02.989 [DEBUG] [Thread-135485] [transport.py] [_log()] starting thread (client mode): 0xb1747820
2025-12-31T22:08:02.989 [DEBUG] [Thread-135485] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:08:03.009 [DEBUG] [Thread-135485] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T22:08:03.009 [INFO] [Thread-135485] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T22:08:03.012 [DEBUG] [Thread-135485] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:08:03.012 [DEBUG] [Thread-135485] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T22:08:03.012 [DEBUG] [Thread-135485] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:08:03.012 [DEBUG] [Thread-135485] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:08:03.012 [DEBUG] [Thread-135485] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:08:03.012 [DEBUG] [Thread-135485] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:08:03.012 [DEBUG] [Thread-135485] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:08:03.013 [DEBUG] [Thread-135485] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:08:03.013 [DEBUG] [Thread-135485] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:08:03.013 [DEBUG] [Thread-135485] [transport.py] [_log()] client lang: <none>
2025-12-31T22:08:03.013 [DEBUG] [Thread-135485] [transport.py] [_log()] server lang: <none>
2025-12-31T22:08:03.013 [DEBUG] [Thread-135485] [transport.py] [_log()] kex follows: False
2025-12-31T22:08:03.013 [DEBUG] [Thread-135485] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:08:03.013 [DEBUG] [Thread-135485] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:08:03.013 [DEBUG] [Thread-135485] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:08:03.013 [DEBUG] [Thread-135485] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:08:03.013 [DEBUG] [Thread-135485] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:08:03.013 [DEBUG] [Thread-135485] [transport.py] [_log()] Compression: none
2025-12-31T22:08:03.013 [DEBUG] [Thread-135485] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:08:03.031 [DEBUG] [Thread-135485] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:08:03.032 [DEBUG] [Thread-135485] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:08:03.032 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T22:08:03.033 [DEBUG] [Thread-135485] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T22:08:03.034 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:08:03.035 [DEBUG] [Thread-135485] [transport.py] [_log()] userauth is OK
2025-12-31T22:08:03.035 [DEBUG] [Thread-135485] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:08:03.035 [DEBUG] [Thread-135485] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:08:03.036 [DEBUG] [Thread-135485] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T22:08:03.036 [DEBUG] [Thread-135485] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:08:03.070 [INFO] [Thread-135485] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:08:03.071 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:08:03.706 [DEBUG] [Thread-135485] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:08:03.706 [DEBUG] [Thread-135485] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:08:03.707 [DEBUG] [Thread-135485] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T22:08:03.748 [DEBUG] [Thread-135485] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:08:03.748 [DEBUG] [Thread-135485] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:08:03.750 [DEBUG] [Thread-135485] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:08:03.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:08:03.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T22:08:03.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T22:08:03.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T22:08:03.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:08:03.771 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T22:08:03.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:08:03.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:08:03.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T22:08:03.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.838678 -999.00  +16.20  17.83     72  +11.30 1 2 1 1 1     0    0 3.67 -48.30 ZN.SW 16.1 17.8 199.8 19.9 17.1 -18.5 17.0 -17.9 16.9 -17.2 17.1 -17.7
2025-12-31T22:08:03.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T22:08:03.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T22:08:03.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.838678
2025-12-31T22:08:03.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T22:08:03.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T22:08:03.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T22:08:03.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T22:08:03.774 [DEBUG] [Thread-135485] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:08:03.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T22:08:03.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T22:07:50', tmtdew=5.41, humidity=70.16, cloud=0.0, wind=20.66, temperature=16.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T22:07:50', seeing=1.44, atlas_timestamp='2025-12-31T20:07:41.779', atlas_cloud=2, atlas_rain=1, zp_data=[0.8907499999999997, 1.277750000000001, 0.8637500000000005, nan, 0.7550000000000008, nan, 0.7839999999999989, 0.8997500000000009, 0.9394999999999989, 1.4565000000000001, 0.8872499999999999, 0.6109999999999998, 0.5860000000000003, 0.5162499999999994, 0.41600000000000037, 0.5299999999999994, 1.35025, 1.7649999999999997, 1.147499999999999, 0.481749999999999, 0.4449999999999985, 0.465749999999999, -0.8027499999999996, 0.6047500000000001, 1.275999999999999, 0.29850000000000065, 0.29625000000000057, 0.33500000000000085, 0.42100000000000026, -0.13299999999999912, -1.491999999999999, -1.4189999999999987, 0.7427499999999991], zp_timestamp='2025-12-31T20:05:00')
2025-12-31T22:08:03.857 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T22:08:03.870 [DEBUG] [Thread-135488] [transport.py] [_log()] starting thread (client mode): 0xb1746f80
2025-12-31T22:08:03.870 [DEBUG] [Thread-135488] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:08:03.884 [DEBUG] [Thread-135488] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T22:08:03.884 [INFO] [Thread-135488] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T22:08:03.892 [DEBUG] [Thread-135488] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:08:03.892 [DEBUG] [Thread-135488] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T22:08:03.892 [DEBUG] [Thread-135488] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:08:03.893 [DEBUG] [Thread-135488] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:08:03.893 [DEBUG] [Thread-135488] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:08:03.893 [DEBUG] [Thread-135488] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:08:03.893 [DEBUG] [Thread-135488] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:08:03.893 [DEBUG] [Thread-135488] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:08:03.893 [DEBUG] [Thread-135488] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:08:03.893 [DEBUG] [Thread-135488] [transport.py] [_log()] client lang: <none>
2025-12-31T22:08:03.893 [DEBUG] [Thread-135488] [transport.py] [_log()] server lang: <none>
2025-12-31T22:08:03.893 [DEBUG] [Thread-135488] [transport.py] [_log()] kex follows: False
2025-12-31T22:08:03.893 [DEBUG] [Thread-135488] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:08:03.893 [DEBUG] [Thread-135488] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:08:03.893 [DEBUG] [Thread-135488] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:08:03.893 [DEBUG] [Thread-135488] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:08:03.893 [DEBUG] [Thread-135488] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:08:03.893 [DEBUG] [Thread-135488] [transport.py] [_log()] Compression: none
2025-12-31T22:08:03.893 [DEBUG] [Thread-135488] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:08:03.952 [DEBUG] [Thread-135488] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:08:03.953 [DEBUG] [Thread-135488] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:08:03.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T22:08:03.954 [DEBUG] [Thread-135488] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T22:08:03.955 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:08:04.010 [DEBUG] [Thread-135488] [transport.py] [_log()] userauth is OK
2025-12-31T22:08:04.010 [DEBUG] [Thread-135488] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:08:04.010 [DEBUG] [Thread-135488] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:08:04.010 [DEBUG] [Thread-135488] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T22:08:04.011 [DEBUG] [Thread-135488] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:08:04.029 [INFO] [Thread-135488] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:08:04.030 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T22:08:04.030 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:08:04.852 [DEBUG] [Thread-135488] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:08:04.852 [DEBUG] [Thread-135488] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:08:04.900 [DEBUG] [Thread-135488] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:08:04.900 [DEBUG] [Thread-135488] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:08:04.914 [DEBUG] [Thread-135488] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:08:04.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:08:04.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T22:08:04.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T22:08:04.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:08:04.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:08:04.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:08:04.950 [DEBUG] [Thread-135488] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:08:09.891 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:08:09.892 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:08:16.085 [DEBUG] [Thread-135490 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:08:31.144 [DEBUG] [Thread-135491 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:08:34.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T22:08:34.944 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T22:08:34.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T22:08:35.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 22, 8, 22), 5.41, 70.16, 0.0, 20.52, 15.99, 0, 0, 0, 2, 0, 0),)
2025-12-31T22:08:35.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 22:08:22
2025-12-31T22:08:35.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T22:08:35.989 [DEBUG] [Thread-135492] [transport.py] [_log()] starting thread (client mode): 0xb17953c0
2025-12-31T22:08:35.989 [DEBUG] [Thread-135492] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:08:36.010 [DEBUG] [Thread-135492] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T22:08:36.010 [INFO] [Thread-135492] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T22:08:36.013 [DEBUG] [Thread-135492] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:08:36.013 [DEBUG] [Thread-135492] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T22:08:36.013 [DEBUG] [Thread-135492] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:08:36.013 [DEBUG] [Thread-135492] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:08:36.013 [DEBUG] [Thread-135492] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:08:36.013 [DEBUG] [Thread-135492] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:08:36.013 [DEBUG] [Thread-135492] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:08:36.013 [DEBUG] [Thread-135492] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:08:36.013 [DEBUG] [Thread-135492] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:08:36.013 [DEBUG] [Thread-135492] [transport.py] [_log()] client lang: <none>
2025-12-31T22:08:36.013 [DEBUG] [Thread-135492] [transport.py] [_log()] server lang: <none>
2025-12-31T22:08:36.013 [DEBUG] [Thread-135492] [transport.py] [_log()] kex follows: False
2025-12-31T22:08:36.013 [DEBUG] [Thread-135492] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:08:36.013 [DEBUG] [Thread-135492] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:08:36.013 [DEBUG] [Thread-135492] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:08:36.013 [DEBUG] [Thread-135492] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:08:36.013 [DEBUG] [Thread-135492] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:08:36.013 [DEBUG] [Thread-135492] [transport.py] [_log()] Compression: none
2025-12-31T22:08:36.013 [DEBUG] [Thread-135492] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:08:36.027 [DEBUG] [Thread-135492] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:08:36.027 [DEBUG] [Thread-135492] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:08:36.028 [DEBUG] [Thread-135492] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T22:08:36.028 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T22:08:36.028 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:08:36.029 [DEBUG] [Thread-135492] [transport.py] [_log()] userauth is OK
2025-12-31T22:08:36.029 [DEBUG] [Thread-135492] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:08:36.029 [DEBUG] [Thread-135492] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:08:36.029 [DEBUG] [Thread-135492] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T22:08:36.029 [DEBUG] [Thread-135492] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:08:36.038 [INFO] [Thread-135492] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:08:36.038 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:08:36.640 [DEBUG] [Thread-135492] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:08:36.640 [DEBUG] [Thread-135492] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:08:36.641 [DEBUG] [Thread-135492] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T22:08:36.681 [DEBUG] [Thread-135492] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:08:36.681 [DEBUG] [Thread-135492] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:08:36.683 [DEBUG] [Thread-135492] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:08:36.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:08:36.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T22:08:36.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T22:08:36.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T22:08:36.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:08:36.703 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T22:08:36.703 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:08:36.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:08:36.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T22:08:36.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.839026 -999.00  +16.20  13.92     72  +11.30 1 2 1 1 1     0    0 3.77 -45.69 ZNeSw 10.9 13.9 221.8 18.8 17.1 -18.5 17.0 -18.2 16.9 -17.0 17.1 -17.9
2025-12-31T22:08:36.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T22:08:36.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T22:08:36.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.839026
2025-12-31T22:08:36.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T22:08:36.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T22:08:36.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T22:08:36.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T22:08:36.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T22:08:36.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T22:08:22', tmtdew=5.41, humidity=70.16, cloud=0.0, wind=20.52, temperature=15.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T22:08:22', seeing=1.44, atlas_timestamp='2025-12-31T20:08:11.846', atlas_cloud=2, atlas_rain=1, zp_data=[0.8907499999999997, 1.277750000000001, 0.8637500000000005, nan, 0.7550000000000008, nan, 0.7839999999999989, 0.8997500000000009, 0.9394999999999989, 1.4565000000000001, 0.8872499999999999, 0.6109999999999998, 0.5860000000000003, 0.5162499999999994, 0.41600000000000037, 0.5299999999999994, 1.35025, 1.7649999999999997, 1.147499999999999, 0.481749999999999, 0.4449999999999985, 0.465749999999999, -0.8027499999999996, 0.6047500000000001, 1.275999999999999, 0.29850000000000065, 0.29625000000000057, 0.33500000000000085, 0.42100000000000026, -0.13299999999999912, -1.491999999999999, -1.4189999999999987, 0.7427499999999991], zp_timestamp='2025-12-31T20:05:00')
2025-12-31T22:08:36.706 [DEBUG] [Thread-135492] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:08:36.790 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T22:08:36.800 [DEBUG] [Thread-135495] [transport.py] [_log()] starting thread (client mode): 0xb95d7e80
2025-12-31T22:08:36.801 [DEBUG] [Thread-135495] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:08:36.815 [DEBUG] [Thread-135495] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T22:08:36.816 [INFO] [Thread-135495] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T22:08:36.823 [DEBUG] [Thread-135495] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:08:36.823 [DEBUG] [Thread-135495] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T22:08:36.823 [DEBUG] [Thread-135495] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:08:36.823 [DEBUG] [Thread-135495] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:08:36.824 [DEBUG] [Thread-135495] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:08:36.824 [DEBUG] [Thread-135495] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:08:36.824 [DEBUG] [Thread-135495] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:08:36.824 [DEBUG] [Thread-135495] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:08:36.824 [DEBUG] [Thread-135495] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:08:36.824 [DEBUG] [Thread-135495] [transport.py] [_log()] client lang: <none>
2025-12-31T22:08:36.824 [DEBUG] [Thread-135495] [transport.py] [_log()] server lang: <none>
2025-12-31T22:08:36.824 [DEBUG] [Thread-135495] [transport.py] [_log()] kex follows: False
2025-12-31T22:08:36.824 [DEBUG] [Thread-135495] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:08:36.824 [DEBUG] [Thread-135495] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:08:36.825 [DEBUG] [Thread-135495] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:08:36.825 [DEBUG] [Thread-135495] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:08:36.825 [DEBUG] [Thread-135495] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:08:36.825 [DEBUG] [Thread-135495] [transport.py] [_log()] Compression: none
2025-12-31T22:08:36.825 [DEBUG] [Thread-135495] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:08:36.885 [DEBUG] [Thread-135495] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:08:36.886 [DEBUG] [Thread-135495] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:08:36.886 [DEBUG] [Thread-135495] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T22:08:36.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T22:08:36.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:08:36.949 [DEBUG] [Thread-135495] [transport.py] [_log()] userauth is OK
2025-12-31T22:08:36.949 [DEBUG] [Thread-135495] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:08:36.949 [DEBUG] [Thread-135495] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:08:36.949 [DEBUG] [Thread-135495] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T22:08:36.949 [DEBUG] [Thread-135495] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:08:36.970 [INFO] [Thread-135495] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:08:36.971 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T22:08:36.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:08:37.777 [DEBUG] [Thread-135495] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:08:37.778 [DEBUG] [Thread-135495] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:08:37.825 [DEBUG] [Thread-135495] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:08:37.826 [DEBUG] [Thread-135495] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:08:37.834 [DEBUG] [Thread-135495] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:08:37.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:08:37.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T22:08:37.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T22:08:37.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:08:37.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:08:37.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:08:37.868 [DEBUG] [Thread-135495] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:08:46.172 [DEBUG] [Thread-135497 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:08:46.514 [DEBUG] [Thread-135498 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:09:01.231 [DEBUG] [Thread-135499 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:09:07.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T22:09:07.891 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T22:09:07.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T22:09:08.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 22, 8, 54), 5.4, 70.2, 0.0, 22.48, 15.99, 0, 0, 0, 2, 0, 0),)
2025-12-31T22:09:08.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 22:08:54
2025-12-31T22:09:08.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T22:09:08.877 [DEBUG] [Thread-135500] [transport.py] [_log()] starting thread (client mode): 0xb1764dc0
2025-12-31T22:09:08.877 [DEBUG] [Thread-135500] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:09:08.901 [DEBUG] [Thread-135500] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T22:09:08.901 [INFO] [Thread-135500] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T22:09:08.904 [DEBUG] [Thread-135500] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:09:08.905 [DEBUG] [Thread-135500] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T22:09:08.905 [DEBUG] [Thread-135500] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:09:08.905 [DEBUG] [Thread-135500] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:09:08.905 [DEBUG] [Thread-135500] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:09:08.905 [DEBUG] [Thread-135500] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:09:08.905 [DEBUG] [Thread-135500] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:09:08.905 [DEBUG] [Thread-135500] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:09:08.905 [DEBUG] [Thread-135500] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:09:08.905 [DEBUG] [Thread-135500] [transport.py] [_log()] client lang: <none>
2025-12-31T22:09:08.905 [DEBUG] [Thread-135500] [transport.py] [_log()] server lang: <none>
2025-12-31T22:09:08.905 [DEBUG] [Thread-135500] [transport.py] [_log()] kex follows: False
2025-12-31T22:09:08.905 [DEBUG] [Thread-135500] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:09:08.905 [DEBUG] [Thread-135500] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:09:08.905 [DEBUG] [Thread-135500] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:09:08.905 [DEBUG] [Thread-135500] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:09:08.905 [DEBUG] [Thread-135500] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:09:08.905 [DEBUG] [Thread-135500] [transport.py] [_log()] Compression: none
2025-12-31T22:09:08.905 [DEBUG] [Thread-135500] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:09:08.923 [DEBUG] [Thread-135500] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:09:08.924 [DEBUG] [Thread-135500] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:09:08.924 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T22:09:08.925 [DEBUG] [Thread-135500] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T22:09:08.926 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:09:08.926 [DEBUG] [Thread-135500] [transport.py] [_log()] userauth is OK
2025-12-31T22:09:08.927 [DEBUG] [Thread-135500] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:09:08.927 [DEBUG] [Thread-135500] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:09:08.927 [DEBUG] [Thread-135500] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T22:09:08.927 [DEBUG] [Thread-135500] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:09:08.965 [INFO] [Thread-135500] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:09:08.966 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:09:09.636 [DEBUG] [Thread-135500] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:09:09.636 [DEBUG] [Thread-135500] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:09:09.636 [DEBUG] [Thread-135500] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T22:09:09.676 [DEBUG] [Thread-135500] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:09:09.676 [DEBUG] [Thread-135500] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:09:09.678 [DEBUG] [Thread-135500] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:09:09.690 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:09:09.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T22:09:09.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T22:09:09.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T22:09:09.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:09:09.695 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T22:09:09.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:09:09.695 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:09:09.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T22:09:09.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.839373 -999.00  +16.20  11.93     72  +11.30 1 2 1 1 1     0    0 3.86 -47.00 ZnESW 18.2 11.9 205.0 16.1 17.1 -18.4 17.0 -18.1 16.8 -16.9 17.1 -17.9
2025-12-31T22:09:09.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T22:09:09.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T22:09:09.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.839373
2025-12-31T22:09:09.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T22:09:09.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T22:09:09.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T22:09:09.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T22:09:09.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T22:09:09.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T22:08:54', tmtdew=5.4, humidity=70.2, cloud=0.0, wind=22.48, temperature=15.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T22:08:54', seeing=1.55, atlas_timestamp='2025-12-31T20:08:41.827', atlas_cloud=2, atlas_rain=1, zp_data=[0.8907499999999997, 1.277750000000001, 0.8637500000000005, nan, 0.7550000000000008, nan, 0.7839999999999989, 0.8997500000000009, 0.9394999999999989, 1.4565000000000001, 0.8872499999999999, 0.6109999999999998, 0.5860000000000003, 0.5162499999999994, 0.41600000000000037, 0.5299999999999994, 1.35025, 1.7649999999999997, 1.147499999999999, 0.481749999999999, 0.4449999999999985, 0.465749999999999, -0.8027499999999996, 0.6047500000000001, 1.275999999999999, 0.29850000000000065, 0.29625000000000057, 0.33500000000000085, 0.42100000000000026, -0.13299999999999912, -1.491999999999999, -1.4189999999999987, 0.7427499999999991], zp_timestamp='2025-12-31T20:07:00')
2025-12-31T22:09:09.696 [DEBUG] [Thread-135500] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:09:09.773 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T22:09:09.785 [DEBUG] [Thread-135503] [transport.py] [_log()] starting thread (client mode): 0xb175bfd0
2025-12-31T22:09:09.785 [DEBUG] [Thread-135503] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:09:09.799 [DEBUG] [Thread-135503] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T22:09:09.799 [INFO] [Thread-135503] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T22:09:09.811 [DEBUG] [Thread-135503] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:09:09.812 [DEBUG] [Thread-135503] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T22:09:09.812 [DEBUG] [Thread-135503] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:09:09.812 [DEBUG] [Thread-135503] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:09:09.812 [DEBUG] [Thread-135503] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:09:09.812 [DEBUG] [Thread-135503] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:09:09.812 [DEBUG] [Thread-135503] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:09:09.812 [DEBUG] [Thread-135503] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:09:09.812 [DEBUG] [Thread-135503] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:09:09.812 [DEBUG] [Thread-135503] [transport.py] [_log()] client lang: <none>
2025-12-31T22:09:09.812 [DEBUG] [Thread-135503] [transport.py] [_log()] server lang: <none>
2025-12-31T22:09:09.812 [DEBUG] [Thread-135503] [transport.py] [_log()] kex follows: False
2025-12-31T22:09:09.812 [DEBUG] [Thread-135503] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:09:09.812 [DEBUG] [Thread-135503] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:09:09.812 [DEBUG] [Thread-135503] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:09:09.812 [DEBUG] [Thread-135503] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:09:09.812 [DEBUG] [Thread-135503] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:09:09.812 [DEBUG] [Thread-135503] [transport.py] [_log()] Compression: none
2025-12-31T22:09:09.812 [DEBUG] [Thread-135503] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:09:09.865 [DEBUG] [Thread-135503] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:09:09.865 [DEBUG] [Thread-135503] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:09:09.865 [DEBUG] [Thread-135503] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T22:09:09.865 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T22:09:09.865 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:09:09.922 [DEBUG] [Thread-135503] [transport.py] [_log()] userauth is OK
2025-12-31T22:09:09.922 [DEBUG] [Thread-135503] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:09:09.922 [DEBUG] [Thread-135503] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:09:09.922 [DEBUG] [Thread-135503] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T22:09:09.922 [DEBUG] [Thread-135503] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:09:09.938 [INFO] [Thread-135503] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:09:09.938 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T22:09:09.939 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:09:10.090 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:09:10.091 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:09:10.774 [DEBUG] [Thread-135503] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:09:10.774 [DEBUG] [Thread-135503] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:09:10.823 [DEBUG] [Thread-135503] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:09:10.823 [DEBUG] [Thread-135503] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:09:10.832 [DEBUG] [Thread-135503] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:09:10.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:09:10.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T22:09:10.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T22:09:10.867 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:09:10.867 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:09:10.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:09:10.875 [DEBUG] [Thread-135503] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:09:16.264 [DEBUG] [Thread-135505 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:09:31.326 [DEBUG] [Thread-135506 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:09:40.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T22:09:40.898 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T22:09:40.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T22:09:41.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 22, 9, 26), 5.4, 70.21, 0.0, 19.69, 15.97, 0, 0, 0, 2, 0, 0),)
2025-12-31T22:09:41.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 22:09:26
2025-12-31T22:09:41.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T22:09:41.877 [DEBUG] [Thread-135507] [transport.py] [_log()] starting thread (client mode): 0xb1746d10
2025-12-31T22:09:41.877 [DEBUG] [Thread-135507] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:09:41.897 [DEBUG] [Thread-135507] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T22:09:41.897 [INFO] [Thread-135507] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T22:09:41.900 [DEBUG] [Thread-135507] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:09:41.900 [DEBUG] [Thread-135507] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T22:09:41.900 [DEBUG] [Thread-135507] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:09:41.900 [DEBUG] [Thread-135507] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:09:41.900 [DEBUG] [Thread-135507] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:09:41.900 [DEBUG] [Thread-135507] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:09:41.900 [DEBUG] [Thread-135507] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:09:41.900 [DEBUG] [Thread-135507] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:09:41.900 [DEBUG] [Thread-135507] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:09:41.900 [DEBUG] [Thread-135507] [transport.py] [_log()] client lang: <none>
2025-12-31T22:09:41.900 [DEBUG] [Thread-135507] [transport.py] [_log()] server lang: <none>
2025-12-31T22:09:41.900 [DEBUG] [Thread-135507] [transport.py] [_log()] kex follows: False
2025-12-31T22:09:41.900 [DEBUG] [Thread-135507] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:09:41.900 [DEBUG] [Thread-135507] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:09:41.900 [DEBUG] [Thread-135507] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:09:41.900 [DEBUG] [Thread-135507] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:09:41.900 [DEBUG] [Thread-135507] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:09:41.900 [DEBUG] [Thread-135507] [transport.py] [_log()] Compression: none
2025-12-31T22:09:41.900 [DEBUG] [Thread-135507] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:09:41.917 [DEBUG] [Thread-135507] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:09:41.917 [DEBUG] [Thread-135507] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:09:41.918 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T22:09:41.918 [DEBUG] [Thread-135507] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T22:09:41.919 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:09:41.921 [DEBUG] [Thread-135507] [transport.py] [_log()] userauth is OK
2025-12-31T22:09:41.921 [DEBUG] [Thread-135507] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:09:41.921 [DEBUG] [Thread-135507] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:09:41.921 [DEBUG] [Thread-135507] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T22:09:41.921 [DEBUG] [Thread-135507] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:09:41.956 [INFO] [Thread-135507] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:09:41.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:09:42.602 [DEBUG] [Thread-135507] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:09:42.602 [DEBUG] [Thread-135507] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:09:42.603 [DEBUG] [Thread-135507] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T22:09:42.643 [DEBUG] [Thread-135507] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:09:42.643 [DEBUG] [Thread-135507] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:09:42.647 [DEBUG] [Thread-135507] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:09:42.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:09:42.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T22:09:42.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T22:09:42.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T22:09:42.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:09:42.671 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T22:09:42.671 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:09:42.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:09:42.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T22:09:42.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.839720 -999.00  +16.20   9.85     72  +11.30 1 2 1 1 1     0    0 3.84 -45.15 ZnESW 9.9 9.8 194.7 25.7 17.1 -18.5 17.0 -17.8 16.9 -17.1 17.1 -17.8
2025-12-31T22:09:42.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T22:09:42.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T22:09:42.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.839720
2025-12-31T22:09:42.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T22:09:42.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T22:09:42.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T22:09:42.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T22:09:42.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T22:09:42.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T22:09:26', tmtdew=5.4, humidity=70.21, cloud=0.0, wind=19.69, temperature=15.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T22:09:26', seeing=1.55, atlas_timestamp='2025-12-31T20:09:11.808', atlas_cloud=2, atlas_rain=1, zp_data=[0.8907499999999997, 1.277750000000001, 0.8637500000000005, nan, 0.7550000000000008, nan, 0.7839999999999989, 0.8997500000000009, 0.9394999999999989, 1.4565000000000001, 0.8872499999999999, 0.6109999999999998, 0.5860000000000003, 0.5162499999999994, 0.41600000000000037, 0.5299999999999994, 1.35025, 1.7649999999999997, 1.147499999999999, 0.481749999999999, 0.4449999999999985, 0.465749999999999, -0.8027499999999996, 0.6047500000000001, 1.275999999999999, 0.29850000000000065, 0.29625000000000057, 0.33500000000000085, 0.42100000000000026, -0.13299999999999912, -1.491999999999999, -1.4189999999999987, 0.7427499999999991], zp_timestamp='2025-12-31T20:07:00')
2025-12-31T22:09:42.674 [DEBUG] [Thread-135507] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:09:42.752 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T22:09:42.765 [DEBUG] [Thread-135510] [transport.py] [_log()] starting thread (client mode): 0xb175b7f0
2025-12-31T22:09:42.765 [DEBUG] [Thread-135510] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:09:42.780 [DEBUG] [Thread-135510] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T22:09:42.780 [INFO] [Thread-135510] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T22:09:42.788 [DEBUG] [Thread-135510] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:09:42.788 [DEBUG] [Thread-135510] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T22:09:42.788 [DEBUG] [Thread-135510] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:09:42.788 [DEBUG] [Thread-135510] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:09:42.788 [DEBUG] [Thread-135510] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:09:42.788 [DEBUG] [Thread-135510] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:09:42.788 [DEBUG] [Thread-135510] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:09:42.788 [DEBUG] [Thread-135510] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:09:42.788 [DEBUG] [Thread-135510] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:09:42.788 [DEBUG] [Thread-135510] [transport.py] [_log()] client lang: <none>
2025-12-31T22:09:42.788 [DEBUG] [Thread-135510] [transport.py] [_log()] server lang: <none>
2025-12-31T22:09:42.788 [DEBUG] [Thread-135510] [transport.py] [_log()] kex follows: False
2025-12-31T22:09:42.788 [DEBUG] [Thread-135510] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:09:42.789 [DEBUG] [Thread-135510] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:09:42.789 [DEBUG] [Thread-135510] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:09:42.789 [DEBUG] [Thread-135510] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:09:42.789 [DEBUG] [Thread-135510] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:09:42.789 [DEBUG] [Thread-135510] [transport.py] [_log()] Compression: none
2025-12-31T22:09:42.789 [DEBUG] [Thread-135510] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:09:42.847 [DEBUG] [Thread-135510] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:09:42.848 [DEBUG] [Thread-135510] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:09:42.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T22:09:42.849 [DEBUG] [Thread-135510] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T22:09:42.850 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:09:42.907 [DEBUG] [Thread-135510] [transport.py] [_log()] userauth is OK
2025-12-31T22:09:42.907 [DEBUG] [Thread-135510] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:09:42.907 [DEBUG] [Thread-135510] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:09:42.907 [DEBUG] [Thread-135510] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T22:09:42.907 [DEBUG] [Thread-135510] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:09:42.926 [INFO] [Thread-135510] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:09:42.926 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T22:09:42.927 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:09:43.758 [DEBUG] [Thread-135510] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:09:43.758 [DEBUG] [Thread-135510] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:09:43.806 [DEBUG] [Thread-135510] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:09:43.806 [DEBUG] [Thread-135510] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:09:43.816 [DEBUG] [Thread-135510] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:09:43.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:09: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')
2025-12-31T22:09:43.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T22:09:43.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:09:43.846 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:09:43.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:09:43.855 [DEBUG] [Thread-135510] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:09:46.363 [DEBUG] [Thread-135512 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:09:46.589 [DEBUG] [Thread-135513 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:10:01.408 [DEBUG] [Thread-135514 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:10:10.289 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:10:10.290 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:10:13.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T22:10:13.877 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T22:10:13.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T22:10:14.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 22, 9, 58), 5.4, 70.16, 0.0, 20.24, 15.92, 0, 0, 0, 2, 0, 0),)
2025-12-31T22:10:14.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 22:09:58
2025-12-31T22:10:14.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T22:10:14.862 [DEBUG] [Thread-135515] [transport.py] [_log()] starting thread (client mode): 0xb95d4850
2025-12-31T22:10:14.862 [DEBUG] [Thread-135515] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:10:14.883 [DEBUG] [Thread-135515] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T22:10:14.883 [INFO] [Thread-135515] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T22:10:14.886 [DEBUG] [Thread-135515] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:10:14.886 [DEBUG] [Thread-135515] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T22:10:14.886 [DEBUG] [Thread-135515] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:10:14.886 [DEBUG] [Thread-135515] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:10:14.886 [DEBUG] [Thread-135515] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:10:14.886 [DEBUG] [Thread-135515] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:10:14.886 [DEBUG] [Thread-135515] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:10:14.886 [DEBUG] [Thread-135515] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:10:14.886 [DEBUG] [Thread-135515] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:10:14.886 [DEBUG] [Thread-135515] [transport.py] [_log()] client lang: <none>
2025-12-31T22:10:14.886 [DEBUG] [Thread-135515] [transport.py] [_log()] server lang: <none>
2025-12-31T22:10:14.886 [DEBUG] [Thread-135515] [transport.py] [_log()] kex follows: False
2025-12-31T22:10:14.886 [DEBUG] [Thread-135515] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:10:14.886 [DEBUG] [Thread-135515] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:10:14.886 [DEBUG] [Thread-135515] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:10:14.886 [DEBUG] [Thread-135515] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:10:14.886 [DEBUG] [Thread-135515] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:10:14.886 [DEBUG] [Thread-135515] [transport.py] [_log()] Compression: none
2025-12-31T22:10:14.886 [DEBUG] [Thread-135515] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:10:14.903 [DEBUG] [Thread-135515] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:10:14.903 [DEBUG] [Thread-135515] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:10:14.904 [DEBUG] [Thread-135515] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T22:10:14.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T22:10:14.905 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:10:14.906 [DEBUG] [Thread-135515] [transport.py] [_log()] userauth is OK
2025-12-31T22:10:14.906 [DEBUG] [Thread-135515] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:10:14.906 [DEBUG] [Thread-135515] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:10:14.906 [DEBUG] [Thread-135515] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T22:10:14.906 [DEBUG] [Thread-135515] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:10:14.931 [INFO] [Thread-135515] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:10:14.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:10:16.446 [DEBUG] [Thread-135517 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:10:19.582 [DEBUG] [Thread-135515] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:10:19.582 [DEBUG] [Thread-135515] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:10:19.583 [DEBUG] [Thread-135515] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T22:10:19.623 [DEBUG] [Thread-135515] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:10:19.623 [DEBUG] [Thread-135515] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:10:19.628 [DEBUG] [Thread-135515] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:10:19.875 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:10:19.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T22:10:19.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T22:10:19.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T22:10:19.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:10:19.926 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T22:10:19.927 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:10:19.927 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:10:19.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T22:10:19.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.839720 -999.00  +16.20   9.85     72  +11.30 1 2 1 1 1     0    0 3.84 -45.15 ZnESW 9.9 9.8 194.7 25.7 17.1 -18.5 17.0 -17.8 16.9 -17.1 17.1 -17.8
2025-12-31T22:10:19.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T22:10:19.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T22:10:19.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.839720
2025-12-31T22:10:19.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T22:10:19.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T22:10:19.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T22:10:19.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T22:10:19.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T22:10:19.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T22:09:58', tmtdew=5.4, humidity=70.16, cloud=0.0, wind=20.24, temperature=15.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T22:09:58', seeing=1.49, atlas_timestamp='2025-12-31T20:09:11.808', atlas_cloud=2, atlas_rain=1, zp_data=[0.8907499999999997, 1.277750000000001, 0.8637500000000005, nan, 0.7550000000000008, nan, 0.7839999999999989, 0.8997500000000009, 0.9394999999999989, 1.4565000000000001, 0.8872499999999999, 0.6109999999999998, 0.5860000000000003, 0.5162499999999994, 0.41600000000000037, 0.5299999999999994, 1.35025, 1.7649999999999997, 1.147499999999999, 0.481749999999999, 0.4449999999999985, 0.465749999999999, -0.8027499999999996, 0.6047500000000001, 1.275999999999999, 0.29850000000000065, 0.29625000000000057, 0.33500000000000085, 0.42100000000000026, -0.13299999999999912, -1.491999999999999, -1.4189999999999987, 0.7427499999999991], zp_timestamp='2025-12-31T20:07:00')
2025-12-31T22:10:19.930 [DEBUG] [Thread-135515] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:10:20.014 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T22:10:20.027 [DEBUG] [Thread-135519] [transport.py] [_log()] starting thread (client mode): 0xb6bbccd0
2025-12-31T22:10:20.028 [DEBUG] [Thread-135519] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:10:20.043 [DEBUG] [Thread-135519] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T22:10:20.043 [INFO] [Thread-135519] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T22:10:20.050 [DEBUG] [Thread-135519] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:10:20.051 [DEBUG] [Thread-135519] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T22:10:20.051 [DEBUG] [Thread-135519] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:10:20.051 [DEBUG] [Thread-135519] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:10:20.051 [DEBUG] [Thread-135519] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:10:20.051 [DEBUG] [Thread-135519] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:10:20.051 [DEBUG] [Thread-135519] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:10:20.051 [DEBUG] [Thread-135519] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:10:20.051 [DEBUG] [Thread-135519] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:10:20.051 [DEBUG] [Thread-135519] [transport.py] [_log()] client lang: <none>
2025-12-31T22:10:20.051 [DEBUG] [Thread-135519] [transport.py] [_log()] server lang: <none>
2025-12-31T22:10:20.051 [DEBUG] [Thread-135519] [transport.py] [_log()] kex follows: False
2025-12-31T22:10:20.051 [DEBUG] [Thread-135519] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:10:20.051 [DEBUG] [Thread-135519] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:10:20.051 [DEBUG] [Thread-135519] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:10:20.051 [DEBUG] [Thread-135519] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:10:20.051 [DEBUG] [Thread-135519] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:10:20.051 [DEBUG] [Thread-135519] [transport.py] [_log()] Compression: none
2025-12-31T22:10:20.052 [DEBUG] [Thread-135519] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:10:20.115 [DEBUG] [Thread-135519] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:10:20.116 [DEBUG] [Thread-135519] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:10:20.116 [DEBUG] [Thread-135519] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T22:10:20.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T22:10:20.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:10:20.175 [DEBUG] [Thread-135519] [transport.py] [_log()] userauth is OK
2025-12-31T22:10:20.175 [DEBUG] [Thread-135519] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:10:20.176 [DEBUG] [Thread-135519] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:10:20.176 [DEBUG] [Thread-135519] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T22:10:20.176 [DEBUG] [Thread-135519] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:10:20.195 [INFO] [Thread-135519] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:10:20.195 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T22:10:20.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:10:21.056 [DEBUG] [Thread-135519] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:10:21.056 [DEBUG] [Thread-135519] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:10:21.104 [DEBUG] [Thread-135519] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:10:21.104 [DEBUG] [Thread-135519] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:10:21.113 [DEBUG] [Thread-135519] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:10:21.122 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:10:21.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T22:10:21.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T22:10:21.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:10:21.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:10:21.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:10:21.150 [DEBUG] [Thread-135519] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:10:31.478 [DEBUG] [Thread-135521 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:10:46.518 [DEBUG] [Thread-135522 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:10:46.664 [DEBUG] [Thread-135523 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:10:51.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T22:10:51.172 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T22:10:51.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T22:10:51.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 22, 10, 30), 5.38, 70.3, 0.0, 18.62, 16.0, 0, 0, 0, 2, 0, 0),)
2025-12-31T22:10:51.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 22:10:30
2025-12-31T22:10:52.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T22:10:52.172 [DEBUG] [Thread-135524] [transport.py] [_log()] starting thread (client mode): 0xb17af790
2025-12-31T22:10:52.172 [DEBUG] [Thread-135524] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:10:52.194 [DEBUG] [Thread-135524] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T22:10:52.194 [INFO] [Thread-135524] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T22:10:52.197 [DEBUG] [Thread-135524] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:10:52.197 [DEBUG] [Thread-135524] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T22:10:52.197 [DEBUG] [Thread-135524] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:10:52.197 [DEBUG] [Thread-135524] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:10:52.197 [DEBUG] [Thread-135524] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:10:52.197 [DEBUG] [Thread-135524] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:10:52.197 [DEBUG] [Thread-135524] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:10:52.197 [DEBUG] [Thread-135524] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:10:52.197 [DEBUG] [Thread-135524] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:10:52.197 [DEBUG] [Thread-135524] [transport.py] [_log()] client lang: <none>
2025-12-31T22:10:52.197 [DEBUG] [Thread-135524] [transport.py] [_log()] server lang: <none>
2025-12-31T22:10:52.197 [DEBUG] [Thread-135524] [transport.py] [_log()] kex follows: False
2025-12-31T22:10:52.197 [DEBUG] [Thread-135524] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:10:52.197 [DEBUG] [Thread-135524] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:10:52.197 [DEBUG] [Thread-135524] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:10:52.198 [DEBUG] [Thread-135524] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:10:52.198 [DEBUG] [Thread-135524] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:10:52.198 [DEBUG] [Thread-135524] [transport.py] [_log()] Compression: none
2025-12-31T22:10:52.198 [DEBUG] [Thread-135524] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:10:52.217 [DEBUG] [Thread-135524] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:10:52.217 [DEBUG] [Thread-135524] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:10:52.218 [DEBUG] [Thread-135524] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T22:10:52.218 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T22:10:52.219 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:10:52.220 [DEBUG] [Thread-135524] [transport.py] [_log()] userauth is OK
2025-12-31T22:10:52.220 [DEBUG] [Thread-135524] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:10:52.220 [DEBUG] [Thread-135524] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:10:52.221 [DEBUG] [Thread-135524] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T22:10:52.221 [DEBUG] [Thread-135524] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:10:52.257 [INFO] [Thread-135524] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:10:52.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:10:52.876 [DEBUG] [Thread-135524] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:10:52.877 [DEBUG] [Thread-135524] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:10:52.877 [DEBUG] [Thread-135524] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T22:10:52.918 [DEBUG] [Thread-135524] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:10:52.918 [DEBUG] [Thread-135524] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:10:52.922 [DEBUG] [Thread-135524] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:10:52.933 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:10:52.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T22:10:52.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T22:10:52.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T22:10:52.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:10:52.946 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T22:10:52.946 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:10:52.946 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:10:52.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T22:10:52.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.840067 -999.00  +16.20  15.43     72  +11.30 1 2 1 1 1     0    0 3.61 -49.97 ZneSw 20.1 15.4 215.0 16.7 -999.0 -999.0 17.0 -18.5 16.9 -17.1 17.1 -17.9
2025-12-31T22:10:52.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T22:10:52.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T22:10:52.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.840067
2025-12-31T22:10:52.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T22:10:52.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T22:10:52.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T22:10:52.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T22:10:52.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T22:10:52.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T22:10:30', tmtdew=5.38, humidity=70.3, cloud=0.0, wind=18.62, temperature=16.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T22:10:31', seeing=1.19, atlas_timestamp='2025-12-31T20:09:41.789', atlas_cloud=2, atlas_rain=1, zp_data=[0.8907499999999997, 1.277750000000001, 0.8637500000000005, nan, 0.7550000000000008, nan, 0.7839999999999989, 0.8997500000000009, 0.9394999999999989, 1.4565000000000001, 0.8872499999999999, 0.6109999999999998, 0.5860000000000003, 0.5162499999999994, 0.41600000000000037, 0.5299999999999994, 1.35025, 1.7649999999999997, 1.147499999999999, 0.481749999999999, 0.4449999999999985, 0.465749999999999, -0.8027499999999996, 0.6047500000000001, 1.275999999999999, 0.29850000000000065, 0.29625000000000057, 0.33500000000000085, 0.42100000000000026, -0.13299999999999912, -1.491999999999999, -1.4189999999999987, 0.7427499999999991], zp_timestamp='2025-12-31T20:07:00')
2025-12-31T22:10:52.949 [DEBUG] [Thread-135524] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:10:53.032 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T22:10:53.045 [DEBUG] [Thread-135527] [transport.py] [_log()] starting thread (client mode): 0xb1786d70
2025-12-31T22:10:53.045 [DEBUG] [Thread-135527] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:10:53.059 [DEBUG] [Thread-135527] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T22:10:53.059 [INFO] [Thread-135527] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T22:10:53.067 [DEBUG] [Thread-135527] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:10:53.068 [DEBUG] [Thread-135527] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T22:10:53.068 [DEBUG] [Thread-135527] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:10:53.068 [DEBUG] [Thread-135527] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:10:53.068 [DEBUG] [Thread-135527] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:10:53.068 [DEBUG] [Thread-135527] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:10:53.068 [DEBUG] [Thread-135527] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:10:53.068 [DEBUG] [Thread-135527] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:10:53.068 [DEBUG] [Thread-135527] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:10:53.069 [DEBUG] [Thread-135527] [transport.py] [_log()] client lang: <none>
2025-12-31T22:10:53.069 [DEBUG] [Thread-135527] [transport.py] [_log()] server lang: <none>
2025-12-31T22:10:53.069 [DEBUG] [Thread-135527] [transport.py] [_log()] kex follows: False
2025-12-31T22:10:53.069 [DEBUG] [Thread-135527] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:10:53.069 [DEBUG] [Thread-135527] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:10:53.069 [DEBUG] [Thread-135527] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:10:53.070 [DEBUG] [Thread-135527] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:10:53.070 [DEBUG] [Thread-135527] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:10:53.070 [DEBUG] [Thread-135527] [transport.py] [_log()] Compression: none
2025-12-31T22:10:53.070 [DEBUG] [Thread-135527] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:10:53.126 [DEBUG] [Thread-135527] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:10:53.127 [DEBUG] [Thread-135527] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:10:53.128 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T22:10:53.128 [DEBUG] [Thread-135527] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T22:10:53.129 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:10:53.182 [DEBUG] [Thread-135527] [transport.py] [_log()] userauth is OK
2025-12-31T22:10:53.182 [DEBUG] [Thread-135527] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:10:53.182 [DEBUG] [Thread-135527] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:10:53.183 [DEBUG] [Thread-135527] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T22:10:53.183 [DEBUG] [Thread-135527] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:10:53.206 [INFO] [Thread-135527] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:10:53.206 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T22:10:53.207 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:10:54.127 [DEBUG] [Thread-135527] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:10:54.127 [DEBUG] [Thread-135527] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:10:54.175 [DEBUG] [Thread-135527] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:10:54.175 [DEBUG] [Thread-135527] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:10:54.185 [DEBUG] [Thread-135527] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:10:54.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:10:54.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T22:10: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') -> 00000000
2025-12-31T22:10:54.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:10:54.213 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:10:54.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:10:54.222 [DEBUG] [Thread-135527] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:11:01.556 [DEBUG] [Thread-135529 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:11:10.487 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:11:10.488 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:11:16.597 [DEBUG] [Thread-135530 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:11:24.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T22:11:24.228 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T22:11:24.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T22:11:24.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 22, 11, 3), 5.37, 70.35, 0.0, 19.43, 15.94, 0, 0, 0, 2, 0, 0),)
2025-12-31T22:11:24.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 22:11:03
2025-12-31T22:11:25.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T22:11:25.211 [DEBUG] [Thread-135531] [transport.py] [_log()] starting thread (client mode): 0xb95d79a0
2025-12-31T22:11:25.211 [DEBUG] [Thread-135531] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:11:25.226 [DEBUG] [Thread-135531] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T22:11:25.226 [INFO] [Thread-135531] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T22:11:25.230 [DEBUG] [Thread-135531] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:11:25.230 [DEBUG] [Thread-135531] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T22:11:25.230 [DEBUG] [Thread-135531] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:11:25.230 [DEBUG] [Thread-135531] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:11:25.230 [DEBUG] [Thread-135531] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:11:25.230 [DEBUG] [Thread-135531] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:11:25.230 [DEBUG] [Thread-135531] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:11:25.230 [DEBUG] [Thread-135531] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:11:25.230 [DEBUG] [Thread-135531] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:11:25.230 [DEBUG] [Thread-135531] [transport.py] [_log()] client lang: <none>
2025-12-31T22:11:25.230 [DEBUG] [Thread-135531] [transport.py] [_log()] server lang: <none>
2025-12-31T22:11:25.230 [DEBUG] [Thread-135531] [transport.py] [_log()] kex follows: False
2025-12-31T22:11:25.230 [DEBUG] [Thread-135531] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:11:25.230 [DEBUG] [Thread-135531] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:11:25.230 [DEBUG] [Thread-135531] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:11:25.230 [DEBUG] [Thread-135531] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:11:25.230 [DEBUG] [Thread-135531] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:11:25.230 [DEBUG] [Thread-135531] [transport.py] [_log()] Compression: none
2025-12-31T22:11:25.230 [DEBUG] [Thread-135531] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:11:25.249 [DEBUG] [Thread-135531] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:11:25.250 [DEBUG] [Thread-135531] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:11:25.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T22:11:25.251 [DEBUG] [Thread-135531] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T22:11:25.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:11:25.253 [DEBUG] [Thread-135531] [transport.py] [_log()] userauth is OK
2025-12-31T22:11:25.253 [DEBUG] [Thread-135531] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:11:25.253 [DEBUG] [Thread-135531] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:11:25.253 [DEBUG] [Thread-135531] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T22:11:25.253 [DEBUG] [Thread-135531] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:11:25.272 [INFO] [Thread-135531] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:11:25.273 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:11:26.033 [DEBUG] [Thread-135531] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:11:26.033 [DEBUG] [Thread-135531] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:11:26.034 [DEBUG] [Thread-135531] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T22:11:26.074 [DEBUG] [Thread-135531] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:11:26.074 [DEBUG] [Thread-135531] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:11:26.077 [DEBUG] [Thread-135531] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:11:26.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:11:26.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T22:11:26.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T22:11:26.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T22:11:26.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:11:26.098 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T22:11:26.098 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:11:26.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:11:26.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T22:11:26.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.840762 -999.00  +16.10  19.06     73  +11.30 1 2 1 1 1     0    0 3.57 -50.10 znESW 14.6 19.1 206.0 25.6 17.1 -18.5 17.0 -18.1 16.8 -17.2 17.1 -18.0
2025-12-31T22:11:26.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T22:11:26.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T22:11:26.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.840762
2025-12-31T22:11:26.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T22:11:26.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T22:11:26.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T22:11:26.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T22:11:26.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T22:11:26.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T22:11:03', tmtdew=5.37, humidity=70.35, cloud=0.0, wind=19.43, temperature=15.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T22:11:03', seeing=1.39, atlas_timestamp='2025-12-31T20:10:41.837', atlas_cloud=2, atlas_rain=1, zp_data=[0.8907499999999997, 1.277750000000001, 0.8637500000000005, nan, 0.7550000000000008, nan, 0.7839999999999989, 0.8997500000000009, 0.9394999999999989, 1.4565000000000001, 0.8872499999999999, 0.6109999999999998, 0.5860000000000003, 0.5162499999999994, 0.41600000000000037, 0.5299999999999994, 1.35025, 1.7649999999999997, 1.147499999999999, 0.481749999999999, 0.4449999999999985, 0.465749999999999, -0.8027499999999996, 0.6047500000000001, 1.275999999999999, 0.29850000000000065, 0.29625000000000057, 0.33500000000000085, 0.42100000000000026, -0.13299999999999912, -1.491999999999999, -1.4189999999999987, 0.7427499999999991], zp_timestamp='2025-12-31T20:07:00')
2025-12-31T22:11:26.101 [DEBUG] [Thread-135531] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:11:26.184 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T22:11:26.196 [DEBUG] [Thread-135534] [transport.py] [_log()] starting thread (client mode): 0xb95d6260
2025-12-31T22:11:26.196 [DEBUG] [Thread-135534] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:11:26.210 [DEBUG] [Thread-135534] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T22:11:26.210 [INFO] [Thread-135534] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T22:11:26.218 [DEBUG] [Thread-135534] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:11:26.218 [DEBUG] [Thread-135534] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T22:11:26.218 [DEBUG] [Thread-135534] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:11:26.219 [DEBUG] [Thread-135534] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:11:26.219 [DEBUG] [Thread-135534] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:11:26.219 [DEBUG] [Thread-135534] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:11:26.219 [DEBUG] [Thread-135534] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:11:26.219 [DEBUG] [Thread-135534] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:11:26.219 [DEBUG] [Thread-135534] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:11:26.219 [DEBUG] [Thread-135534] [transport.py] [_log()] client lang: <none>
2025-12-31T22:11:26.219 [DEBUG] [Thread-135534] [transport.py] [_log()] server lang: <none>
2025-12-31T22:11:26.219 [DEBUG] [Thread-135534] [transport.py] [_log()] kex follows: False
2025-12-31T22:11:26.220 [DEBUG] [Thread-135534] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:11:26.220 [DEBUG] [Thread-135534] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:11:26.220 [DEBUG] [Thread-135534] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:11:26.220 [DEBUG] [Thread-135534] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:11:26.220 [DEBUG] [Thread-135534] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:11:26.220 [DEBUG] [Thread-135534] [transport.py] [_log()] Compression: none
2025-12-31T22:11:26.220 [DEBUG] [Thread-135534] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:11:26.284 [DEBUG] [Thread-135534] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:11:26.285 [DEBUG] [Thread-135534] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:11:26.285 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T22:11:26.286 [DEBUG] [Thread-135534] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T22:11:26.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:11:26.342 [DEBUG] [Thread-135534] [transport.py] [_log()] userauth is OK
2025-12-31T22:11:26.343 [DEBUG] [Thread-135534] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:11:26.343 [DEBUG] [Thread-135534] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:11:26.343 [DEBUG] [Thread-135534] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T22:11:26.343 [DEBUG] [Thread-135534] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:11:26.361 [INFO] [Thread-135534] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:11:26.362 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T22:11:26.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:11:27.169 [DEBUG] [Thread-135534] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:11:27.170 [DEBUG] [Thread-135534] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:11:27.218 [DEBUG] [Thread-135534] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:11:27.218 [DEBUG] [Thread-135534] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:11:27.228 [DEBUG] [Thread-135534] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:11:27.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:11:27.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T22:11:27.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T22:11:27.255 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:11:27.256 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:11:27.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:11:27.264 [DEBUG] [Thread-135534] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:11:31.633 [DEBUG] [Thread-135536 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:11:46.679 [DEBUG] [Thread-135537 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:11:46.746 [DEBUG] [Thread-135538 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:11:57.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T22:11:57.286 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T22:11:57.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T22:11:57.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 22, 11, 35), 5.41, 70.38, 0.0, 18.63, 15.92, 0, 0, 0, 2, 0, 0),)
2025-12-31T22:11:57.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 22:11:35
2025-12-31T22:11:58.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T22:11:58.269 [DEBUG] [Thread-135539] [transport.py] [_log()] starting thread (client mode): 0xb95d70d0
2025-12-31T22:11:58.269 [DEBUG] [Thread-135539] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:11:58.289 [DEBUG] [Thread-135539] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T22:11:58.290 [INFO] [Thread-135539] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T22:11:58.293 [DEBUG] [Thread-135539] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:11:58.293 [DEBUG] [Thread-135539] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T22:11:58.293 [DEBUG] [Thread-135539] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:11:58.293 [DEBUG] [Thread-135539] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:11:58.293 [DEBUG] [Thread-135539] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:11:58.293 [DEBUG] [Thread-135539] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:11:58.293 [DEBUG] [Thread-135539] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:11:58.293 [DEBUG] [Thread-135539] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:11:58.293 [DEBUG] [Thread-135539] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:11:58.293 [DEBUG] [Thread-135539] [transport.py] [_log()] client lang: <none>
2025-12-31T22:11:58.293 [DEBUG] [Thread-135539] [transport.py] [_log()] server lang: <none>
2025-12-31T22:11:58.293 [DEBUG] [Thread-135539] [transport.py] [_log()] kex follows: False
2025-12-31T22:11:58.293 [DEBUG] [Thread-135539] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:11:58.293 [DEBUG] [Thread-135539] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:11:58.294 [DEBUG] [Thread-135539] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:11:58.294 [DEBUG] [Thread-135539] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:11:58.294 [DEBUG] [Thread-135539] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:11:58.294 [DEBUG] [Thread-135539] [transport.py] [_log()] Compression: none
2025-12-31T22:11:58.294 [DEBUG] [Thread-135539] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:11:58.312 [DEBUG] [Thread-135539] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:11:58.313 [DEBUG] [Thread-135539] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:11:58.313 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T22:11:58.314 [DEBUG] [Thread-135539] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T22:11:58.315 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:11:58.316 [DEBUG] [Thread-135539] [transport.py] [_log()] userauth is OK
2025-12-31T22:11:58.316 [DEBUG] [Thread-135539] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:11:58.316 [DEBUG] [Thread-135539] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:11:58.316 [DEBUG] [Thread-135539] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T22:11:58.316 [DEBUG] [Thread-135539] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:11:58.340 [INFO] [Thread-135539] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:11:58.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:11:58.986 [DEBUG] [Thread-135539] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:11:58.986 [DEBUG] [Thread-135539] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:11:58.986 [DEBUG] [Thread-135539] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T22:11:59.027 [DEBUG] [Thread-135539] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:11:59.027 [DEBUG] [Thread-135539] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:11:59.030 [DEBUG] [Thread-135539] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:11:59.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:11:59.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T22:11:59.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T22:11:59.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T22:11:59.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:11:59.054 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T22:11:59.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:11:59.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:11:59.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T22:11:59.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.841109 -999.00  +16.20  11.32     73  +11.30 1 2 1 1 1     0    0 3.59 -48.26 .NESw 10.2 11.3 198.2 18.5 17.1 -18.5 17.0 -17.9 16.8 -17.2 17.1 -17.9
2025-12-31T22:11:59.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T22:11:59.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T22:11:59.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.841109
2025-12-31T22:11:59.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T22:11:59.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T22:11:59.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T22:11:59.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T22:11:59.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T22:11:59.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T22:11:35', tmtdew=5.41, humidity=70.38, cloud=0.0, wind=18.63, temperature=15.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T22:11:35', seeing=1.39, atlas_timestamp='2025-12-31T20:11:11.818', atlas_cloud=2, atlas_rain=1, zp_data=[0.71875, 0.7212500000000004, 1.0607500000000005, nan, 0.6925000000000008, 0.8397500000000004, 0.5669999999999993, 0.7622500000000008, 0.6064999999999996, 0.7949999999999999, 0.9022499999999996, 0.8354999999999997, 0.827, 0.27924999999999933, 0.24099999999999966, 0.7279999999999998, 1.1102499999999997, 1.1235, 0.4469999999999992, 0.39624999999999844, 0.5599999999999987, 0.364749999999999, 0.4892500000000011, -0.18024999999999913, nan, 0.6165000000000003, 0.6277500000000007, 0.09450000000000003, 0.20800000000000018, -0.019499999999998963, -1.6249999999999982, -0.8324999999999996, nan], zp_timestamp='2025-12-31T20:10:00')
2025-12-31T22:11:59.057 [DEBUG] [Thread-135539] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:11:59.141 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T22:11:59.153 [DEBUG] [Thread-135542] [transport.py] [_log()] starting thread (client mode): 0xb95d7f10
2025-12-31T22:11:59.153 [DEBUG] [Thread-135542] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:11:59.167 [DEBUG] [Thread-135542] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T22:11:59.167 [INFO] [Thread-135542] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T22:11:59.175 [DEBUG] [Thread-135542] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:11:59.175 [DEBUG] [Thread-135542] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T22:11:59.176 [DEBUG] [Thread-135542] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:11:59.176 [DEBUG] [Thread-135542] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:11:59.176 [DEBUG] [Thread-135542] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:11:59.176 [DEBUG] [Thread-135542] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:11:59.176 [DEBUG] [Thread-135542] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:11:59.176 [DEBUG] [Thread-135542] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:11:59.176 [DEBUG] [Thread-135542] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:11:59.176 [DEBUG] [Thread-135542] [transport.py] [_log()] client lang: <none>
2025-12-31T22:11:59.176 [DEBUG] [Thread-135542] [transport.py] [_log()] server lang: <none>
2025-12-31T22:11:59.176 [DEBUG] [Thread-135542] [transport.py] [_log()] kex follows: False
2025-12-31T22:11:59.177 [DEBUG] [Thread-135542] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:11:59.177 [DEBUG] [Thread-135542] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:11:59.177 [DEBUG] [Thread-135542] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:11:59.177 [DEBUG] [Thread-135542] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:11:59.177 [DEBUG] [Thread-135542] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:11:59.177 [DEBUG] [Thread-135542] [transport.py] [_log()] Compression: none
2025-12-31T22:11:59.177 [DEBUG] [Thread-135542] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:11:59.233 [DEBUG] [Thread-135542] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:11:59.234 [DEBUG] [Thread-135542] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:11:59.234 [DEBUG] [Thread-135542] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T22:11:59.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T22:11:59.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:11:59.290 [DEBUG] [Thread-135542] [transport.py] [_log()] userauth is OK
2025-12-31T22:11:59.290 [DEBUG] [Thread-135542] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:11:59.290 [DEBUG] [Thread-135542] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:11:59.290 [DEBUG] [Thread-135542] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T22:11:59.291 [DEBUG] [Thread-135542] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:11:59.309 [INFO] [Thread-135542] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:11:59.309 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T22:11:59.309 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:12:00.140 [DEBUG] [Thread-135542] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:12:00.140 [DEBUG] [Thread-135542] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:12:00.187 [DEBUG] [Thread-135542] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:12:00.188 [DEBUG] [Thread-135542] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:12:00.196 [DEBUG] [Thread-135542] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:12:00.205 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:12:00.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-12-31T22:12:00.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T22:12:00.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:12:00.223 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:12:00.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:12:00.231 [DEBUG] [Thread-135542] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:12:01.708 [DEBUG] [Thread-135544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:12:10.689 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:12:10.690 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:12:16.758 [DEBUG] [Thread-135545 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:12:30.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T22:12:30.253 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T22:12:30.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-12-31T22:12:30.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 22, 12, 7), 5.39, 70.44, 0.0, 19.25, 15.96, 0, 0, 0, 2, 0, 0),)
2025-12-31T22:12:30.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 22:12:07
2025-12-31T22:12:31.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T22:12:31.249 [DEBUG] [Thread-135546] [transport.py] [_log()] starting thread (client mode): 0xb95d5900
2025-12-31T22:12:31.249 [DEBUG] [Thread-135546] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:12:31.270 [DEBUG] [Thread-135546] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T22:12:31.271 [INFO] [Thread-135546] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T22:12:31.273 [DEBUG] [Thread-135546] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:12:31.274 [DEBUG] [Thread-135546] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T22:12:31.274 [DEBUG] [Thread-135546] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:12:31.274 [DEBUG] [Thread-135546] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:12:31.274 [DEBUG] [Thread-135546] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:12:31.274 [DEBUG] [Thread-135546] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:12:31.274 [DEBUG] [Thread-135546] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:12:31.274 [DEBUG] [Thread-135546] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:12:31.274 [DEBUG] [Thread-135546] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:12:31.274 [DEBUG] [Thread-135546] [transport.py] [_log()] client lang: <none>
2025-12-31T22:12:31.274 [DEBUG] [Thread-135546] [transport.py] [_log()] server lang: <none>
2025-12-31T22:12:31.274 [DEBUG] [Thread-135546] [transport.py] [_log()] kex follows: False
2025-12-31T22:12:31.274 [DEBUG] [Thread-135546] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:12:31.274 [DEBUG] [Thread-135546] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:12:31.274 [DEBUG] [Thread-135546] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:12:31.274 [DEBUG] [Thread-135546] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:12:31.275 [DEBUG] [Thread-135546] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:12:31.275 [DEBUG] [Thread-135546] [transport.py] [_log()] Compression: none
2025-12-31T22:12:31.275 [DEBUG] [Thread-135546] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:12:31.292 [DEBUG] [Thread-135546] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:12:31.293 [DEBUG] [Thread-135546] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:12:31.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T22:12:31.294 [DEBUG] [Thread-135546] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T22:12:31.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:12:31.296 [DEBUG] [Thread-135546] [transport.py] [_log()] userauth is OK
2025-12-31T22:12:31.296 [DEBUG] [Thread-135546] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:12:31.296 [DEBUG] [Thread-135546] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:12:31.296 [DEBUG] [Thread-135546] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T22:12:31.296 [DEBUG] [Thread-135546] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:12:31.311 [INFO] [Thread-135546] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:12:31.312 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:12:31.801 [DEBUG] [Thread-135548 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:12:32.124 [DEBUG] [Thread-135546] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:12:32.125 [DEBUG] [Thread-135546] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:12:32.125 [DEBUG] [Thread-135546] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T22:12:32.166 [DEBUG] [Thread-135546] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:12:32.166 [DEBUG] [Thread-135546] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:12:32.169 [DEBUG] [Thread-135546] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:12:32.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:12:32.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T22:12:32.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T22:12:32.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T22:12:32.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:12:32.191 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T22:12:32.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:12:32.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:12:32.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T22:12:32.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.841456 -999.00  +16.10  15.00     73  +11.30 1 2 1 1 1     0    0 3.44 -51.56 .NESW 17.0 15.0 196.8 22.8 17.1 -18.5 17.0 -18.0 16.8 -17.2 17.1 -18.0
2025-12-31T22:12:32.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T22:12:32.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T22:12:32.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.841456
2025-12-31T22:12:32.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T22:12:32.192 [DEBUG] [Thread-135546] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:12:32.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T22:12:32.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T22:12:32.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T22:12:32.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T22:12:32.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T22:12:07', tmtdew=5.39, humidity=70.44, cloud=0.0, wind=19.25, temperature=15.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T22:12:07', seeing=1.35, atlas_timestamp='2025-12-31T20:11:41.798', atlas_cloud=2, atlas_rain=1, zp_data=[0.71875, 0.7212500000000004, 1.0607500000000005, nan, 0.6925000000000008, 0.8397500000000004, 0.5669999999999993, 0.7622500000000008, 0.6064999999999996, 0.7949999999999999, 0.9022499999999996, 0.8354999999999997, 0.827, 0.27924999999999933, 0.24099999999999966, 0.7279999999999998, 1.1102499999999997, 1.1235, 0.4469999999999992, 0.39624999999999844, 0.5599999999999987, 0.364749999999999, 0.4892500000000011, -0.18024999999999913, nan, 0.6165000000000003, 0.6277500000000007, 0.09450000000000003, 0.20800000000000018, -0.019499999999998963, -1.6249999999999982, -0.8324999999999996, nan], zp_timestamp='2025-12-31T20:10:00')
2025-12-31T22:12:32.282 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T22:12:32.294 [DEBUG] [Thread-135550] [transport.py] [_log()] starting thread (client mode): 0xb17478b0
2025-12-31T22:12:32.295 [DEBUG] [Thread-135550] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:12:32.310 [DEBUG] [Thread-135550] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T22:12:32.310 [INFO] [Thread-135550] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T22:12:32.318 [DEBUG] [Thread-135550] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:12:32.318 [DEBUG] [Thread-135550] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T22:12:32.318 [DEBUG] [Thread-135550] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:12:32.318 [DEBUG] [Thread-135550] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:12:32.318 [DEBUG] [Thread-135550] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:12:32.319 [DEBUG] [Thread-135550] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:12:32.319 [DEBUG] [Thread-135550] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:12:32.319 [DEBUG] [Thread-135550] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:12:32.319 [DEBUG] [Thread-135550] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:12:32.319 [DEBUG] [Thread-135550] [transport.py] [_log()] client lang: <none>
2025-12-31T22:12:32.319 [DEBUG] [Thread-135550] [transport.py] [_log()] server lang: <none>
2025-12-31T22:12:32.319 [DEBUG] [Thread-135550] [transport.py] [_log()] kex follows: False
2025-12-31T22:12:32.319 [DEBUG] [Thread-135550] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:12:32.319 [DEBUG] [Thread-135550] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:12:32.320 [DEBUG] [Thread-135550] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:12:32.320 [DEBUG] [Thread-135550] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:12:32.320 [DEBUG] [Thread-135550] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:12:32.320 [DEBUG] [Thread-135550] [transport.py] [_log()] Compression: none
2025-12-31T22:12:32.320 [DEBUG] [Thread-135550] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:12:32.379 [DEBUG] [Thread-135550] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:12:32.379 [DEBUG] [Thread-135550] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:12:32.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T22:12:32.381 [DEBUG] [Thread-135550] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T22:12:32.381 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:12:32.435 [DEBUG] [Thread-135550] [transport.py] [_log()] userauth is OK
2025-12-31T22:12:32.435 [DEBUG] [Thread-135550] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:12:32.435 [DEBUG] [Thread-135550] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:12:32.435 [DEBUG] [Thread-135550] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T22:12:32.435 [DEBUG] [Thread-135550] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:12:32.454 [INFO] [Thread-135550] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:12:32.454 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T22:12:32.455 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:12:33.254 [DEBUG] [Thread-135550] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:12:33.254 [DEBUG] [Thread-135550] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:12:33.302 [DEBUG] [Thread-135550] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:12:33.302 [DEBUG] [Thread-135550] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:12:33.311 [DEBUG] [Thread-135550] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:12:33.321 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:12:33.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T22:12:33.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T22:12:33.350 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:12:33.350 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:12:33.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:12:33.359 [DEBUG] [Thread-135550] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:12:46.814 [DEBUG] [Thread-135552 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:12:46.837 [DEBUG] [Thread-135553 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:13:01.887 [DEBUG] [Thread-135554 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:13:03.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T22:13:03.381 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T22:13:03.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T22:13:04.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 22, 12, 39), 5.35, 70.41, 0.0, 24.65, 15.91, 0, 0, 0, 2, 0, 0),)
2025-12-31T22:13:04.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 22:12:39
2025-12-31T22:13:04.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T22:13:04.439 [DEBUG] [Thread-135555] [transport.py] [_log()] starting thread (client mode): 0xb1747970
2025-12-31T22:13:04.440 [DEBUG] [Thread-135555] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:13:04.459 [DEBUG] [Thread-135555] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T22:13:04.460 [INFO] [Thread-135555] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T22:13:04.463 [DEBUG] [Thread-135555] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:13:04.463 [DEBUG] [Thread-135555] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T22:13:04.463 [DEBUG] [Thread-135555] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:13:04.463 [DEBUG] [Thread-135555] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:13:04.463 [DEBUG] [Thread-135555] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:13:04.463 [DEBUG] [Thread-135555] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:13:04.463 [DEBUG] [Thread-135555] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:13:04.463 [DEBUG] [Thread-135555] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:13:04.463 [DEBUG] [Thread-135555] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:13:04.463 [DEBUG] [Thread-135555] [transport.py] [_log()] client lang: <none>
2025-12-31T22:13:04.463 [DEBUG] [Thread-135555] [transport.py] [_log()] server lang: <none>
2025-12-31T22:13:04.463 [DEBUG] [Thread-135555] [transport.py] [_log()] kex follows: False
2025-12-31T22:13:04.463 [DEBUG] [Thread-135555] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:13:04.463 [DEBUG] [Thread-135555] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:13:04.463 [DEBUG] [Thread-135555] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:13:04.463 [DEBUG] [Thread-135555] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:13:04.463 [DEBUG] [Thread-135555] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:13:04.463 [DEBUG] [Thread-135555] [transport.py] [_log()] Compression: none
2025-12-31T22:13:04.463 [DEBUG] [Thread-135555] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:13:04.481 [DEBUG] [Thread-135555] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:13:04.481 [DEBUG] [Thread-135555] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:13:04.481 [DEBUG] [Thread-135555] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T22:13:04.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T22:13:04.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:13:04.525 [DEBUG] [Thread-135555] [transport.py] [_log()] userauth is OK
2025-12-31T22:13:04.525 [DEBUG] [Thread-135555] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:13:04.525 [DEBUG] [Thread-135555] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:13:04.525 [DEBUG] [Thread-135555] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T22:13:04.525 [DEBUG] [Thread-135555] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:13:04.544 [INFO] [Thread-135555] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:13:04.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:13:05.196 [DEBUG] [Thread-135555] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:13:05.197 [DEBUG] [Thread-135555] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:13:05.197 [DEBUG] [Thread-135555] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T22:13:05.238 [DEBUG] [Thread-135555] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:13:05.238 [DEBUG] [Thread-135555] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:13:05.240 [DEBUG] [Thread-135555] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:13:05.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:13:05.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T22:13:05.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T22:13:05.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T22:13:05.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:13:05.260 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T22:13:05.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:13:05.260 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:13:05.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T22:13:05.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.841803 -999.00  +16.10  11.33     73  +11.30 1 2 1 1 1     0    0 3.41 -53.21 .NESW 7.9 11.3 198.1 23.0 17.1 -18.5 17.0 -17.9 16.8 -17.4 17.1 -18.0
2025-12-31T22:13:05.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T22:13:05.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T22:13:05.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.841803
2025-12-31T22:13:05.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T22:13:05.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T22:13:05.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T22:13:05.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T22:13:05.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T22:13:05.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T22:12:39', tmtdew=5.35, humidity=70.41, cloud=0.0, wind=24.65, temperature=15.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T22:12:39', seeing=1.28, atlas_timestamp='2025-12-31T20:12:11.779', atlas_cloud=2, atlas_rain=1, zp_data=[0.71875, 0.7212500000000004, 1.0607500000000005, nan, 0.6925000000000008, 0.8397500000000004, 0.5669999999999993, 0.7622500000000008, 0.6064999999999996, 0.7949999999999999, 0.9022499999999996, 0.8354999999999997, 0.827, 0.27924999999999933, 0.24099999999999966, 0.7279999999999998, 1.1102499999999997, 1.1235, 0.4469999999999992, 0.39624999999999844, 0.5599999999999987, 0.364749999999999, 0.4892500000000011, -0.18024999999999913, nan, 0.6165000000000003, 0.6277500000000007, 0.09450000000000003, 0.20800000000000018, -0.019499999999998963, -1.6249999999999982, -0.8324999999999996, nan], zp_timestamp='2025-12-31T20:10:00')
2025-12-31T22:13:05.262 [DEBUG] [Thread-135555] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:13:05.335 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T22:13:05.347 [DEBUG] [Thread-135558] [transport.py] [_log()] starting thread (client mode): 0xb95d4b20
2025-12-31T22:13:05.347 [DEBUG] [Thread-135558] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:13:05.365 [DEBUG] [Thread-135558] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T22:13:05.365 [INFO] [Thread-135558] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T22:13:05.373 [DEBUG] [Thread-135558] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:13:05.373 [DEBUG] [Thread-135558] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T22:13:05.373 [DEBUG] [Thread-135558] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:13:05.373 [DEBUG] [Thread-135558] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:13:05.373 [DEBUG] [Thread-135558] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:13:05.373 [DEBUG] [Thread-135558] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:13:05.373 [DEBUG] [Thread-135558] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:13:05.373 [DEBUG] [Thread-135558] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:13:05.373 [DEBUG] [Thread-135558] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:13:05.373 [DEBUG] [Thread-135558] [transport.py] [_log()] client lang: <none>
2025-12-31T22:13:05.373 [DEBUG] [Thread-135558] [transport.py] [_log()] server lang: <none>
2025-12-31T22:13:05.373 [DEBUG] [Thread-135558] [transport.py] [_log()] kex follows: False
2025-12-31T22:13:05.373 [DEBUG] [Thread-135558] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:13:05.373 [DEBUG] [Thread-135558] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:13:05.373 [DEBUG] [Thread-135558] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:13:05.373 [DEBUG] [Thread-135558] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:13:05.373 [DEBUG] [Thread-135558] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:13:05.373 [DEBUG] [Thread-135558] [transport.py] [_log()] Compression: none
2025-12-31T22:13:05.373 [DEBUG] [Thread-135558] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:13:05.429 [DEBUG] [Thread-135558] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:13:05.429 [DEBUG] [Thread-135558] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:13:05.429 [DEBUG] [Thread-135558] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T22:13:05.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T22:13:05.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:13:05.486 [DEBUG] [Thread-135558] [transport.py] [_log()] userauth is OK
2025-12-31T22:13:05.486 [DEBUG] [Thread-135558] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:13:05.486 [DEBUG] [Thread-135558] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:13:05.487 [DEBUG] [Thread-135558] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T22:13:05.487 [DEBUG] [Thread-135558] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:13:05.503 [INFO] [Thread-135558] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:13:05.503 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T22:13:05.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:13:06.360 [DEBUG] [Thread-135558] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:13:06.360 [DEBUG] [Thread-135558] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:13:06.408 [DEBUG] [Thread-135558] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:13:06.408 [DEBUG] [Thread-135558] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:13:06.417 [DEBUG] [Thread-135558] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:13:06.428 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:13:06.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T22:13:06.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T22:13:06.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:13:06.446 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:13:06.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:13:06.454 [DEBUG] [Thread-135558] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:13:10.891 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:13:10.892 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:13:16.920 [DEBUG] [Thread-135560 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:13:31.973 [DEBUG] [Thread-135561 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:13:36.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T22:13:36.453 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T22:13:36.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T22:13:37.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 22, 13, 11), 5.33, 70.49, 0.0, 22.06, 15.92, 0, 0, 0, 2, 0, 0),)
2025-12-31T22:13:37.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 22:13:11
2025-12-31T22:13:37.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T22:13:37.459 [DEBUG] [Thread-135562] [transport.py] [_log()] starting thread (client mode): 0xb6bbd000
2025-12-31T22:13:37.459 [DEBUG] [Thread-135562] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:13:37.479 [DEBUG] [Thread-135562] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T22:13:37.479 [INFO] [Thread-135562] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T22:13:37.482 [DEBUG] [Thread-135562] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:13:37.482 [DEBUG] [Thread-135562] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T22:13:37.482 [DEBUG] [Thread-135562] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:13:37.482 [DEBUG] [Thread-135562] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:13:37.482 [DEBUG] [Thread-135562] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:13:37.482 [DEBUG] [Thread-135562] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:13:37.482 [DEBUG] [Thread-135562] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:13:37.482 [DEBUG] [Thread-135562] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:13:37.482 [DEBUG] [Thread-135562] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:13:37.483 [DEBUG] [Thread-135562] [transport.py] [_log()] client lang: <none>
2025-12-31T22:13:37.483 [DEBUG] [Thread-135562] [transport.py] [_log()] server lang: <none>
2025-12-31T22:13:37.483 [DEBUG] [Thread-135562] [transport.py] [_log()] kex follows: False
2025-12-31T22:13:37.483 [DEBUG] [Thread-135562] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:13:37.483 [DEBUG] [Thread-135562] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:13:37.483 [DEBUG] [Thread-135562] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:13:37.483 [DEBUG] [Thread-135562] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:13:37.483 [DEBUG] [Thread-135562] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:13:37.483 [DEBUG] [Thread-135562] [transport.py] [_log()] Compression: none
2025-12-31T22:13:37.483 [DEBUG] [Thread-135562] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:13:37.500 [DEBUG] [Thread-135562] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:13:37.501 [DEBUG] [Thread-135562] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:13:37.502 [DEBUG] [Thread-135562] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T22:13:37.502 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T22:13:37.503 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:13:37.504 [DEBUG] [Thread-135562] [transport.py] [_log()] userauth is OK
2025-12-31T22:13:37.504 [DEBUG] [Thread-135562] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:13:37.505 [DEBUG] [Thread-135562] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:13:37.505 [DEBUG] [Thread-135562] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T22:13:37.505 [DEBUG] [Thread-135562] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:13:37.518 [INFO] [Thread-135562] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:13:37.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:13:38.325 [DEBUG] [Thread-135562] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:13:38.325 [DEBUG] [Thread-135562] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:13:38.326 [DEBUG] [Thread-135562] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T22:13:38.366 [DEBUG] [Thread-135562] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:13:38.366 [DEBUG] [Thread-135562] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:13:38.369 [DEBUG] [Thread-135562] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:13:38.381 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:13:38.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T22:13:38.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T22:13:38.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T22:13:38.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:13:38.392 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T22:13:38.393 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:13:38.393 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:13:38.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T22:13:38.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.842498 -999.00  +16.20  14.07     72  +11.30 1 1 1 1 1     0    0 3.63 -47.85 ZNESW 11.4 14.1 221.3 19.4 17.1 -18.6 17.0 -18.2 16.8 -17.3 17.1 -18.2
2025-12-31T22:13:38.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T22:13:38.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T22:13:38.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.842498
2025-12-31T22:13:38.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T22:13:38.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T22:13:38.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T22:13:38.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T22:13:38.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T22:13:38.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T22:13:11', tmtdew=5.33, humidity=70.49, cloud=0.0, wind=22.06, temperature=15.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T22:13:11', seeing=1.52, atlas_timestamp='2025-12-31T20:13:11.827', atlas_cloud=1, atlas_rain=1, zp_data=[0.71875, 0.7212500000000004, 1.0607500000000005, nan, 0.6925000000000008, 0.8397500000000004, 0.5669999999999993, 0.7622500000000008, 0.6064999999999996, 0.7949999999999999, 0.9022499999999996, 0.8354999999999997, 0.827, 0.27924999999999933, 0.24099999999999966, 0.7279999999999998, 1.1102499999999997, 1.1235, 0.4469999999999992, 0.39624999999999844, 0.5599999999999987, 0.364749999999999, 0.4892500000000011, -0.18024999999999913, nan, 0.6165000000000003, 0.6277500000000007, 0.09450000000000003, 0.20800000000000018, -0.019499999999998963, -1.6249999999999982, -0.8324999999999996, nan], zp_timestamp='2025-12-31T20:10:00')
2025-12-31T22:13:38.395 [DEBUG] [Thread-135562] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:13:38.478 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T22:13:38.491 [DEBUG] [Thread-135565] [transport.py] [_log()] starting thread (client mode): 0xb6bbdbd0
2025-12-31T22:13:38.491 [DEBUG] [Thread-135565] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:13:38.506 [DEBUG] [Thread-135565] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T22:13:38.507 [INFO] [Thread-135565] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T22:13:38.514 [DEBUG] [Thread-135565] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:13:38.514 [DEBUG] [Thread-135565] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T22:13:38.514 [DEBUG] [Thread-135565] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:13:38.514 [DEBUG] [Thread-135565] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:13:38.514 [DEBUG] [Thread-135565] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:13:38.515 [DEBUG] [Thread-135565] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:13:38.515 [DEBUG] [Thread-135565] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:13:38.515 [DEBUG] [Thread-135565] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:13:38.515 [DEBUG] [Thread-135565] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:13:38.515 [DEBUG] [Thread-135565] [transport.py] [_log()] client lang: <none>
2025-12-31T22:13:38.515 [DEBUG] [Thread-135565] [transport.py] [_log()] server lang: <none>
2025-12-31T22:13:38.515 [DEBUG] [Thread-135565] [transport.py] [_log()] kex follows: False
2025-12-31T22:13:38.515 [DEBUG] [Thread-135565] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:13:38.515 [DEBUG] [Thread-135565] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:13:38.515 [DEBUG] [Thread-135565] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:13:38.515 [DEBUG] [Thread-135565] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:13:38.515 [DEBUG] [Thread-135565] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:13:38.515 [DEBUG] [Thread-135565] [transport.py] [_log()] Compression: none
2025-12-31T22:13:38.516 [DEBUG] [Thread-135565] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:13:38.577 [DEBUG] [Thread-135565] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:13:38.577 [DEBUG] [Thread-135565] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:13:38.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T22:13:38.579 [DEBUG] [Thread-135565] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T22:13:38.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:13:38.638 [DEBUG] [Thread-135565] [transport.py] [_log()] userauth is OK
2025-12-31T22:13:38.638 [DEBUG] [Thread-135565] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:13:38.639 [DEBUG] [Thread-135565] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:13:38.639 [DEBUG] [Thread-135565] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T22:13:38.639 [DEBUG] [Thread-135565] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:13:38.654 [INFO] [Thread-135565] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:13:38.654 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T22:13:38.655 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:13:39.537 [DEBUG] [Thread-135565] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:13:39.537 [DEBUG] [Thread-135565] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:13:39.585 [DEBUG] [Thread-135565] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:13:39.585 [DEBUG] [Thread-135565] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:13:39.593 [DEBUG] [Thread-135565] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:13:39.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:13:39.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T22:13:39.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-12-31T22:13:39.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:13:39.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:13:39.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:13:39.628 [DEBUG] [Thread-135565] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:13:46.873 [DEBUG] [Thread-135567 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:13:47.004 [DEBUG] [Thread-135568 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:14:02.051 [DEBUG] [Thread-135569 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:14:09.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T22:14:09.623 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T22:14:09.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T22:14:10.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 22, 13, 43), 5.34, 70.44, 0.0, 19.04, 15.89, 0, 0, 0, 2, 0, 0),)
2025-12-31T22:14:10.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 22:13:43
2025-12-31T22:14:10.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T22:14:10.625 [DEBUG] [Thread-135570] [transport.py] [_log()] starting thread (client mode): 0xb17857b0
2025-12-31T22:14:10.625 [DEBUG] [Thread-135570] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:14:10.645 [DEBUG] [Thread-135570] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T22:14:10.645 [INFO] [Thread-135570] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T22:14:10.648 [DEBUG] [Thread-135570] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:14:10.648 [DEBUG] [Thread-135570] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T22:14:10.648 [DEBUG] [Thread-135570] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:14:10.648 [DEBUG] [Thread-135570] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:14:10.648 [DEBUG] [Thread-135570] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:14:10.648 [DEBUG] [Thread-135570] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:14:10.648 [DEBUG] [Thread-135570] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:14:10.648 [DEBUG] [Thread-135570] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:14:10.648 [DEBUG] [Thread-135570] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:14:10.648 [DEBUG] [Thread-135570] [transport.py] [_log()] client lang: <none>
2025-12-31T22:14:10.648 [DEBUG] [Thread-135570] [transport.py] [_log()] server lang: <none>
2025-12-31T22:14:10.648 [DEBUG] [Thread-135570] [transport.py] [_log()] kex follows: False
2025-12-31T22:14:10.648 [DEBUG] [Thread-135570] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:14:10.648 [DEBUG] [Thread-135570] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:14:10.648 [DEBUG] [Thread-135570] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:14:10.648 [DEBUG] [Thread-135570] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:14:10.648 [DEBUG] [Thread-135570] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:14:10.649 [DEBUG] [Thread-135570] [transport.py] [_log()] Compression: none
2025-12-31T22:14:10.649 [DEBUG] [Thread-135570] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:14:10.665 [DEBUG] [Thread-135570] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:14:10.665 [DEBUG] [Thread-135570] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:14:10.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T22:14:10.666 [DEBUG] [Thread-135570] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T22:14:10.667 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:14:10.668 [DEBUG] [Thread-135570] [transport.py] [_log()] userauth is OK
2025-12-31T22:14:10.668 [DEBUG] [Thread-135570] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:14:10.668 [DEBUG] [Thread-135570] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:14:10.669 [DEBUG] [Thread-135570] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T22:14:10.669 [DEBUG] [Thread-135570] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:14:10.693 [INFO] [Thread-135570] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:14:10.694 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:14:11.108 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:14:11.109 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:14:11.344 [DEBUG] [Thread-135570] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:14:11.344 [DEBUG] [Thread-135570] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:14:11.344 [DEBUG] [Thread-135570] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T22:14:11.385 [DEBUG] [Thread-135570] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:14:11.385 [DEBUG] [Thread-135570] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:14:11.388 [DEBUG] [Thread-135570] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:14:11.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:14:11.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T22:14:11.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T22:14:11.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T22:14:11.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:14:11.415 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T22:14:11.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:14:11.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:14:11.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T22:14:11.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.842845 -999.00  +16.20  10.22     72  +11.30 1 1 1 1 1     0    0 3.72 -46.85 ZNESW 10.4 10.2 202.5 17.2 17.1 -18.6 17.0 -17.8 16.8 -17.2 17.1 -18.2
2025-12-31T22:14:11.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T22:14:11.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T22:14:11.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.842845
2025-12-31T22:14:11.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T22:14:11.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T22:14:11.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T22:14:11.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T22:14:11.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T22:14:11.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T22:13:43', tmtdew=5.34, humidity=70.44, cloud=0.0, wind=19.04, temperature=15.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T22:13:43', seeing=1.24, atlas_timestamp='2025-12-31T20:13:41.808', atlas_cloud=1, atlas_rain=1, zp_data=[0.71875, 0.7212500000000004, 1.0607500000000005, nan, 0.6925000000000008, 0.8397500000000004, 0.5669999999999993, 0.7622500000000008, 0.6064999999999996, 0.7949999999999999, 0.9022499999999996, 0.8354999999999997, 0.827, 0.27924999999999933, 0.24099999999999966, 0.7279999999999998, 1.1102499999999997, 1.1235, 0.4469999999999992, 0.39624999999999844, 0.5599999999999987, 0.364749999999999, 0.4892500000000011, -0.18024999999999913, nan, 0.6165000000000003, 0.6277500000000007, 0.09450000000000003, 0.20800000000000018, -0.019499999999998963, -1.6249999999999982, -0.8324999999999996, nan], zp_timestamp='2025-12-31T20:10:00')
2025-12-31T22:14:11.417 [DEBUG] [Thread-135570] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:14:11.501 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T22:14:11.515 [DEBUG] [Thread-135573] [transport.py] [_log()] starting thread (client mode): 0xb95d69b0
2025-12-31T22:14:11.515 [DEBUG] [Thread-135573] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:14:11.530 [DEBUG] [Thread-135573] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T22:14:11.530 [INFO] [Thread-135573] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T22:14:11.537 [DEBUG] [Thread-135573] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:14:11.538 [DEBUG] [Thread-135573] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T22:14:11.538 [DEBUG] [Thread-135573] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:14:11.538 [DEBUG] [Thread-135573] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:14:11.538 [DEBUG] [Thread-135573] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:14:11.538 [DEBUG] [Thread-135573] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:14:11.538 [DEBUG] [Thread-135573] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:14:11.538 [DEBUG] [Thread-135573] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:14:11.538 [DEBUG] [Thread-135573] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:14:11.538 [DEBUG] [Thread-135573] [transport.py] [_log()] client lang: <none>
2025-12-31T22:14:11.538 [DEBUG] [Thread-135573] [transport.py] [_log()] server lang: <none>
2025-12-31T22:14:11.538 [DEBUG] [Thread-135573] [transport.py] [_log()] kex follows: False
2025-12-31T22:14:11.538 [DEBUG] [Thread-135573] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:14:11.538 [DEBUG] [Thread-135573] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:14:11.538 [DEBUG] [Thread-135573] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:14:11.538 [DEBUG] [Thread-135573] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:14:11.538 [DEBUG] [Thread-135573] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:14:11.539 [DEBUG] [Thread-135573] [transport.py] [_log()] Compression: none
2025-12-31T22:14:11.539 [DEBUG] [Thread-135573] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:14:11.598 [DEBUG] [Thread-135573] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:14:11.599 [DEBUG] [Thread-135573] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:14:11.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T22:14:11.600 [DEBUG] [Thread-135573] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T22:14:11.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:14:11.654 [DEBUG] [Thread-135573] [transport.py] [_log()] userauth is OK
2025-12-31T22:14:11.655 [DEBUG] [Thread-135573] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:14:11.655 [DEBUG] [Thread-135573] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:14:11.655 [DEBUG] [Thread-135573] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T22:14:11.655 [DEBUG] [Thread-135573] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:14:11.675 [INFO] [Thread-135573] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:14:11.675 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T22:14:11.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:14:12.527 [DEBUG] [Thread-135573] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:14:12.528 [DEBUG] [Thread-135573] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:14:12.576 [DEBUG] [Thread-135573] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:14:12.577 [DEBUG] [Thread-135573] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:14:12.586 [DEBUG] [Thread-135573] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:14:12.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:14:12.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T22:14:12.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T22:14:12.614 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:14:12.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:14:12.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:14:12.624 [DEBUG] [Thread-135573] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:14:17.084 [DEBUG] [Thread-135575 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:14:32.129 [DEBUG] [Thread-135576 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:14:42.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T22:14:42.646 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T22:14:42.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T22:14:43.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 22, 14, 15), 5.33, 70.49, 0.0, 19.06, 15.96, 0, 0, 0, 2, 0, 0),)
2025-12-31T22:14:43.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 22:14:15
2025-12-31T22:14:43.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T22:14:43.634 [DEBUG] [Thread-135577] [transport.py] [_log()] starting thread (client mode): 0xb1747cd0
2025-12-31T22:14:43.635 [DEBUG] [Thread-135577] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:14:43.658 [DEBUG] [Thread-135577] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T22:14:43.658 [INFO] [Thread-135577] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T22:14:43.659 [DEBUG] [Thread-135577] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:14:43.659 [DEBUG] [Thread-135577] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T22:14:43.659 [DEBUG] [Thread-135577] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:14:43.659 [DEBUG] [Thread-135577] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:14:43.659 [DEBUG] [Thread-135577] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:14:43.659 [DEBUG] [Thread-135577] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:14:43.659 [DEBUG] [Thread-135577] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:14:43.660 [DEBUG] [Thread-135577] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:14:43.660 [DEBUG] [Thread-135577] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:14:43.660 [DEBUG] [Thread-135577] [transport.py] [_log()] client lang: <none>
2025-12-31T22:14:43.660 [DEBUG] [Thread-135577] [transport.py] [_log()] server lang: <none>
2025-12-31T22:14:43.660 [DEBUG] [Thread-135577] [transport.py] [_log()] kex follows: False
2025-12-31T22:14:43.660 [DEBUG] [Thread-135577] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:14:43.660 [DEBUG] [Thread-135577] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:14:43.660 [DEBUG] [Thread-135577] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:14:43.660 [DEBUG] [Thread-135577] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:14:43.660 [DEBUG] [Thread-135577] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:14:43.660 [DEBUG] [Thread-135577] [transport.py] [_log()] Compression: none
2025-12-31T22:14:43.660 [DEBUG] [Thread-135577] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:14:43.668 [DEBUG] [Thread-135577] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:14:43.668 [DEBUG] [Thread-135577] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:14:43.669 [DEBUG] [Thread-135577] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T22:14:43.669 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T22:14:43.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:14:43.671 [DEBUG] [Thread-135577] [transport.py] [_log()] userauth is OK
2025-12-31T22:14:43.671 [DEBUG] [Thread-135577] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:14:43.671 [DEBUG] [Thread-135577] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:14:43.671 [DEBUG] [Thread-135577] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T22:14:43.671 [DEBUG] [Thread-135577] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:14:43.695 [INFO] [Thread-135577] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:14:43.695 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:14:44.494 [DEBUG] [Thread-135577] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:14:44.494 [DEBUG] [Thread-135577] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:14:44.494 [DEBUG] [Thread-135577] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T22:14:44.535 [DEBUG] [Thread-135577] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:14:44.535 [DEBUG] [Thread-135577] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:14:44.539 [DEBUG] [Thread-135577] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:14:44.551 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:14:44.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T22:14:44.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T22:14:44.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T22:14:44.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:14:44.563 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T22:14:44.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:14:44.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:14:44.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T22:14:44.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.843192 -999.00  +16.20  12.05     72  +11.30 1 1 1 1 1     0    0 3.91 -40.90 ZNESW 16.0 12.1 206.9 19.8 17.1 -18.5 17.0 -17.4 16.8 -17.2 17.1 -17.9
2025-12-31T22:14:44.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T22:14:44.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T22:14:44.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.843192
2025-12-31T22:14:44.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T22:14:44.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T22:14:44.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T22:14:44.565 [DEBUG] [Thread-135577] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:14:44.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T22:14:44.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T22:14:44.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T22:14:15', tmtdew=5.33, humidity=70.49, cloud=0.0, wind=19.06, temperature=15.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T22:14:16', seeing=1.67, atlas_timestamp='2025-12-31T20:14:11.789', atlas_cloud=1, atlas_rain=1, zp_data=[0.71875, 0.7212500000000004, 1.0607500000000005, nan, 0.6925000000000008, 0.8397500000000004, 0.5669999999999993, 0.7622500000000008, 0.6064999999999996, 0.7949999999999999, 0.9022499999999996, 0.8354999999999997, 0.827, 0.27924999999999933, 0.24099999999999966, 0.7279999999999998, 1.1102499999999997, 1.1235, 0.4469999999999992, 0.39624999999999844, 0.5599999999999987, 0.364749999999999, 0.4892500000000011, -0.18024999999999913, nan, 0.6165000000000003, 0.6277500000000007, 0.09450000000000003, 0.20800000000000018, -0.019499999999998963, -1.6249999999999982, -0.8324999999999996, nan], zp_timestamp='2025-12-31T20:10:00')
2025-12-31T22:14:44.650 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T22:14:44.663 [DEBUG] [Thread-135580] [transport.py] [_log()] starting thread (client mode): 0xb95d6e30
2025-12-31T22:14:44.664 [DEBUG] [Thread-135580] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:14:44.679 [DEBUG] [Thread-135580] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T22:14:44.679 [INFO] [Thread-135580] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T22:14:44.686 [DEBUG] [Thread-135580] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:14:44.687 [DEBUG] [Thread-135580] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T22:14:44.687 [DEBUG] [Thread-135580] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:14:44.687 [DEBUG] [Thread-135580] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:14:44.687 [DEBUG] [Thread-135580] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:14:44.687 [DEBUG] [Thread-135580] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:14:44.687 [DEBUG] [Thread-135580] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:14:44.687 [DEBUG] [Thread-135580] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:14:44.687 [DEBUG] [Thread-135580] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:14:44.687 [DEBUG] [Thread-135580] [transport.py] [_log()] client lang: <none>
2025-12-31T22:14:44.687 [DEBUG] [Thread-135580] [transport.py] [_log()] server lang: <none>
2025-12-31T22:14:44.687 [DEBUG] [Thread-135580] [transport.py] [_log()] kex follows: False
2025-12-31T22:14:44.687 [DEBUG] [Thread-135580] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:14:44.687 [DEBUG] [Thread-135580] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:14:44.687 [DEBUG] [Thread-135580] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:14:44.687 [DEBUG] [Thread-135580] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:14:44.687 [DEBUG] [Thread-135580] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:14:44.688 [DEBUG] [Thread-135580] [transport.py] [_log()] Compression: none
2025-12-31T22:14:44.688 [DEBUG] [Thread-135580] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:14:44.745 [DEBUG] [Thread-135580] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:14:44.746 [DEBUG] [Thread-135580] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:14:44.746 [DEBUG] [Thread-135580] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T22:14:44.747 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T22:14:44.747 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:14:44.802 [DEBUG] [Thread-135580] [transport.py] [_log()] userauth is OK
2025-12-31T22:14:44.803 [DEBUG] [Thread-135580] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:14:44.803 [DEBUG] [Thread-135580] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:14:44.803 [DEBUG] [Thread-135580] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T22:14:44.803 [DEBUG] [Thread-135580] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:14:44.822 [INFO] [Thread-135580] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:14:44.822 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T22:14:44.823 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:14:45.725 [DEBUG] [Thread-135580] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:14:45.726 [DEBUG] [Thread-135580] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:14:45.773 [DEBUG] [Thread-135580] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:14:45.773 [DEBUG] [Thread-135580] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:14:45.781 [DEBUG] [Thread-135580] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:14:45.791 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:14:45.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-12-31T22:14:45.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T22:14:45.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:14:45.809 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:14:45.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:14:45.817 [DEBUG] [Thread-135580] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:14:46.932 [DEBUG] [Thread-135582 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:14:47.165 [DEBUG] [Thread-135583 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:15:02.222 [DEBUG] [Thread-135584 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:15:11.310 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:15:11.311 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:15:15.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T22:15:15.833 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T22:15:15.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T22:15:16.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 22, 14, 48), 5.33, 70.51, 0.0, 22.37, 15.94, 0, 0, 0, 2, 0, 0),)
2025-12-31T22:15:16.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 22:14:48
2025-12-31T22:15:16.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T22:15:16.813 [DEBUG] [Thread-135585] [transport.py] [_log()] starting thread (client mode): 0xb1784850
2025-12-31T22:15:16.813 [DEBUG] [Thread-135585] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:15:16.832 [DEBUG] [Thread-135585] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T22:15:16.833 [INFO] [Thread-135585] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T22:15:16.836 [DEBUG] [Thread-135585] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:15:16.836 [DEBUG] [Thread-135585] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T22:15:16.836 [DEBUG] [Thread-135585] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:15:16.836 [DEBUG] [Thread-135585] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:15:16.836 [DEBUG] [Thread-135585] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:15:16.836 [DEBUG] [Thread-135585] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:15:16.836 [DEBUG] [Thread-135585] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:15:16.836 [DEBUG] [Thread-135585] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:15:16.836 [DEBUG] [Thread-135585] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:15:16.836 [DEBUG] [Thread-135585] [transport.py] [_log()] client lang: <none>
2025-12-31T22:15:16.836 [DEBUG] [Thread-135585] [transport.py] [_log()] server lang: <none>
2025-12-31T22:15:16.836 [DEBUG] [Thread-135585] [transport.py] [_log()] kex follows: False
2025-12-31T22:15:16.836 [DEBUG] [Thread-135585] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:15:16.837 [DEBUG] [Thread-135585] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:15:16.837 [DEBUG] [Thread-135585] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:15:16.837 [DEBUG] [Thread-135585] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:15:16.837 [DEBUG] [Thread-135585] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:15:16.837 [DEBUG] [Thread-135585] [transport.py] [_log()] Compression: none
2025-12-31T22:15:16.837 [DEBUG] [Thread-135585] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:15:16.853 [DEBUG] [Thread-135585] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:15:16.854 [DEBUG] [Thread-135585] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:15:16.854 [DEBUG] [Thread-135585] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T22:15:16.854 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T22:15:16.855 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:15:16.856 [DEBUG] [Thread-135585] [transport.py] [_log()] userauth is OK
2025-12-31T22:15:16.856 [DEBUG] [Thread-135585] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:15:16.856 [DEBUG] [Thread-135585] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:15:16.856 [DEBUG] [Thread-135585] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T22:15:16.856 [DEBUG] [Thread-135585] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:15:16.874 [INFO] [Thread-135585] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:15:16.875 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:15:17.253 [DEBUG] [Thread-135587 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:15:17.476 [DEBUG] [Thread-135585] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:15:17.476 [DEBUG] [Thread-135585] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:15:17.476 [DEBUG] [Thread-135585] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T22:15:17.517 [DEBUG] [Thread-135585] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:15:17.517 [DEBUG] [Thread-135585] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:15:17.520 [DEBUG] [Thread-135585] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:15:17.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:15:17.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T22:15:17.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T22:15:17.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T22:15:17.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:15:17.542 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T22:15:17.542 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:15:17.543 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:15:17.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T22:15:17.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.843540 -999.00  +16.20  12.74     73  +11.30 1 1 1 1 1     0    0 3.89 -38.16 ZNESW 10.3 12.7 187.8 18.3 17.1 -18.4 17.0 -17.3 16.8 -17.1 17.1 -18.1
2025-12-31T22:15:17.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T22:15:17.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T22:15:17.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.843540
2025-12-31T22:15:17.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T22:15:17.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T22:15:17.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T22:15:17.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T22:15:17.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T22:15:17.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T22:14:48', tmtdew=5.33, humidity=70.51, cloud=0.0, wind=22.37, temperature=15.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T22:14:48', seeing=1.41, atlas_timestamp='2025-12-31T20:14:41.856', atlas_cloud=1, atlas_rain=1, zp_data=[0.71875, 0.7212500000000004, 1.0607500000000005, nan, 0.6925000000000008, 0.8397500000000004, 0.5669999999999993, 0.7622500000000008, 0.6064999999999996, 0.7949999999999999, 0.9022499999999996, 0.8354999999999997, 0.827, 0.27924999999999933, 0.24099999999999966, 0.7279999999999998, 1.1102499999999997, 1.1235, 0.4469999999999992, 0.39624999999999844, 0.5599999999999987, 0.364749999999999, 0.4892500000000011, -0.18024999999999913, nan, 0.6165000000000003, 0.6277500000000007, 0.09450000000000003, 0.20800000000000018, -0.019499999999998963, -1.6249999999999982, -0.8324999999999996, nan], zp_timestamp='2025-12-31T20:14:00')
2025-12-31T22:15:17.545 [DEBUG] [Thread-135585] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:15:17.640 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T22:15:17.654 [DEBUG] [Thread-135589] [transport.py] [_log()] starting thread (client mode): 0xb1775f30
2025-12-31T22:15:17.654 [DEBUG] [Thread-135589] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:15:17.670 [DEBUG] [Thread-135589] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T22:15:17.670 [INFO] [Thread-135589] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T22:15:17.680 [DEBUG] [Thread-135589] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:15:17.681 [DEBUG] [Thread-135589] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T22:15:17.681 [DEBUG] [Thread-135589] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:15:17.681 [DEBUG] [Thread-135589] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:15:17.681 [DEBUG] [Thread-135589] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:15:17.681 [DEBUG] [Thread-135589] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:15:17.681 [DEBUG] [Thread-135589] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:15:17.681 [DEBUG] [Thread-135589] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:15:17.681 [DEBUG] [Thread-135589] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:15:17.681 [DEBUG] [Thread-135589] [transport.py] [_log()] client lang: <none>
2025-12-31T22:15:17.682 [DEBUG] [Thread-135589] [transport.py] [_log()] server lang: <none>
2025-12-31T22:15:17.682 [DEBUG] [Thread-135589] [transport.py] [_log()] kex follows: False
2025-12-31T22:15:17.682 [DEBUG] [Thread-135589] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:15:17.682 [DEBUG] [Thread-135589] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:15:17.682 [DEBUG] [Thread-135589] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:15:17.682 [DEBUG] [Thread-135589] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:15:17.682 [DEBUG] [Thread-135589] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:15:17.682 [DEBUG] [Thread-135589] [transport.py] [_log()] Compression: none
2025-12-31T22:15:17.683 [DEBUG] [Thread-135589] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:15:17.743 [DEBUG] [Thread-135589] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:15:17.744 [DEBUG] [Thread-135589] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:15:17.753 [DEBUG] [Thread-135589] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T22:15:17.754 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T22:15:17.754 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:15:17.802 [DEBUG] [Thread-135589] [transport.py] [_log()] userauth is OK
2025-12-31T22:15:17.803 [DEBUG] [Thread-135589] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:15:17.803 [DEBUG] [Thread-135589] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:15:17.803 [DEBUG] [Thread-135589] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T22:15:17.803 [DEBUG] [Thread-135589] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:15:17.823 [INFO] [Thread-135589] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:15:17.823 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T22:15:17.823 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:15:18.683 [DEBUG] [Thread-135589] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:15:18.683 [DEBUG] [Thread-135589] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:15:18.731 [DEBUG] [Thread-135589] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:15:18.731 [DEBUG] [Thread-135589] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:15:18.740 [DEBUG] [Thread-135589] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:15:18.750 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:15:18.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T22:15:18.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T22:15:18.767 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:15:18.767 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:15:18.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:15:18.775 [DEBUG] [Thread-135589] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:15:32.290 [DEBUG] [Thread-135591 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:15:47.010 [DEBUG] [Thread-135592 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:15:47.339 [DEBUG] [Thread-135593 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:15:48.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T22:15:48.798 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T22:15:48.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T22:15:49.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 22, 15, 20), 5.32, 70.56, 0.0, 21.23, 15.92, 0, 0, 0, 2, 0, 0),)
2025-12-31T22:15:49.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 22:15:20
2025-12-31T22:15:49.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T22:15:49.801 [DEBUG] [Thread-135594] [transport.py] [_log()] starting thread (client mode): 0xb6bbf430
2025-12-31T22:15:49.801 [DEBUG] [Thread-135594] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:15:49.821 [DEBUG] [Thread-135594] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T22:15:49.822 [INFO] [Thread-135594] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T22:15:49.825 [DEBUG] [Thread-135594] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:15:49.825 [DEBUG] [Thread-135594] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T22:15:49.825 [DEBUG] [Thread-135594] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:15:49.825 [DEBUG] [Thread-135594] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:15:49.825 [DEBUG] [Thread-135594] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:15:49.825 [DEBUG] [Thread-135594] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:15:49.825 [DEBUG] [Thread-135594] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:15:49.825 [DEBUG] [Thread-135594] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:15:49.825 [DEBUG] [Thread-135594] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:15:49.825 [DEBUG] [Thread-135594] [transport.py] [_log()] client lang: <none>
2025-12-31T22:15:49.826 [DEBUG] [Thread-135594] [transport.py] [_log()] server lang: <none>
2025-12-31T22:15:49.826 [DEBUG] [Thread-135594] [transport.py] [_log()] kex follows: False
2025-12-31T22:15:49.826 [DEBUG] [Thread-135594] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:15:49.826 [DEBUG] [Thread-135594] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:15:49.826 [DEBUG] [Thread-135594] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:15:49.826 [DEBUG] [Thread-135594] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:15:49.826 [DEBUG] [Thread-135594] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:15:49.826 [DEBUG] [Thread-135594] [transport.py] [_log()] Compression: none
2025-12-31T22:15:49.826 [DEBUG] [Thread-135594] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:15:49.845 [DEBUG] [Thread-135594] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:15:49.845 [DEBUG] [Thread-135594] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:15:49.846 [DEBUG] [Thread-135594] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T22:15:49.846 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T22:15:49.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:15:49.848 [DEBUG] [Thread-135594] [transport.py] [_log()] userauth is OK
2025-12-31T22:15:49.848 [DEBUG] [Thread-135594] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:15:49.849 [DEBUG] [Thread-135594] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:15:49.849 [DEBUG] [Thread-135594] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T22:15:49.849 [DEBUG] [Thread-135594] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:15:49.884 [INFO] [Thread-135594] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:15:49.885 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:15:50.477 [DEBUG] [Thread-135594] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:15:50.477 [DEBUG] [Thread-135594] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:15:50.478 [DEBUG] [Thread-135594] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T22:15:50.518 [DEBUG] [Thread-135594] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:15:50.518 [DEBUG] [Thread-135594] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:15:50.522 [DEBUG] [Thread-135594] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:15:50.534 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:15:50.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T22:15:50.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T22:15:50.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T22:15:50.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:15:50.546 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T22:15:50.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:15:50.547 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:15:50.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T22:15:50.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.843887 -999.00  +16.10  16.07     73  +11.30 1 2 1 1 1     0    0 3.89 -39.71 ZnESW 15.0 16.1 211.6 17.9 17.1 -18.3 17.0 -17.0 16.8 -17.0 17.0 -18.0
2025-12-31T22:15:50.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T22:15:50.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T22:15:50.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.843887
2025-12-31T22:15:50.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T22:15:50.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T22:15:50.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T22:15:50.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T22:15:50.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T22:15:50.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T22:15:20', tmtdew=5.32, humidity=70.56, cloud=0.0, wind=21.23, temperature=15.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T22:15:20', seeing=1.41, atlas_timestamp='2025-12-31T20:15:11.837', atlas_cloud=2, atlas_rain=1, zp_data=[0.71875, 0.7212500000000004, 1.0607500000000005, nan, 0.6925000000000008, 0.8397500000000004, 0.5669999999999993, 0.7622500000000008, 0.6064999999999996, 0.7949999999999999, 0.9022499999999996, 0.8354999999999997, 0.827, 0.27924999999999933, 0.24099999999999966, 0.7279999999999998, 1.1102499999999997, 1.1235, 0.4469999999999992, 0.39624999999999844, 0.5599999999999987, 0.364749999999999, 0.4892500000000011, -0.18024999999999913, nan, 0.6165000000000003, 0.6277500000000007, 0.09450000000000003, 0.20800000000000018, -0.019499999999998963, -1.6249999999999982, -0.8324999999999996, nan], zp_timestamp='2025-12-31T20:14:00')
2025-12-31T22:15:50.549 [DEBUG] [Thread-135594] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:15:50.635 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T22:15:50.646 [DEBUG] [Thread-135597] [transport.py] [_log()] starting thread (client mode): 0xb95d7a60
2025-12-31T22:15:50.646 [DEBUG] [Thread-135597] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:15:50.661 [DEBUG] [Thread-135597] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T22:15:50.661 [INFO] [Thread-135597] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T22:15:50.669 [DEBUG] [Thread-135597] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:15:50.669 [DEBUG] [Thread-135597] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T22:15:50.669 [DEBUG] [Thread-135597] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:15:50.669 [DEBUG] [Thread-135597] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:15:50.669 [DEBUG] [Thread-135597] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:15:50.669 [DEBUG] [Thread-135597] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:15:50.669 [DEBUG] [Thread-135597] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:15:50.669 [DEBUG] [Thread-135597] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:15:50.669 [DEBUG] [Thread-135597] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:15:50.669 [DEBUG] [Thread-135597] [transport.py] [_log()] client lang: <none>
2025-12-31T22:15:50.669 [DEBUG] [Thread-135597] [transport.py] [_log()] server lang: <none>
2025-12-31T22:15:50.669 [DEBUG] [Thread-135597] [transport.py] [_log()] kex follows: False
2025-12-31T22:15:50.669 [DEBUG] [Thread-135597] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:15:50.669 [DEBUG] [Thread-135597] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:15:50.669 [DEBUG] [Thread-135597] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:15:50.669 [DEBUG] [Thread-135597] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:15:50.670 [DEBUG] [Thread-135597] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:15:50.670 [DEBUG] [Thread-135597] [transport.py] [_log()] Compression: none
2025-12-31T22:15:50.670 [DEBUG] [Thread-135597] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:15:50.731 [DEBUG] [Thread-135597] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:15:50.731 [DEBUG] [Thread-135597] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:15:50.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T22:15:50.732 [DEBUG] [Thread-135597] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T22:15:50.733 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:15:50.786 [DEBUG] [Thread-135597] [transport.py] [_log()] userauth is OK
2025-12-31T22:15:50.787 [DEBUG] [Thread-135597] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:15:50.787 [DEBUG] [Thread-135597] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:15:50.787 [DEBUG] [Thread-135597] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T22:15:50.787 [DEBUG] [Thread-135597] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:15:50.807 [INFO] [Thread-135597] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:15:50.807 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T22:15:50.808 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:15:51.637 [DEBUG] [Thread-135597] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:15:51.637 [DEBUG] [Thread-135597] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:15:51.685 [DEBUG] [Thread-135597] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:15:51.685 [DEBUG] [Thread-135597] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:15:51.695 [DEBUG] [Thread-135597] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:15:51.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:15:51.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T22:15:51.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-12-31T22:15:51.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:15:51.723 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:15:51.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:15:51.732 [DEBUG] [Thread-135597] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:16:02.378 [DEBUG] [Thread-135599 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:16:11.508 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:16:11.509 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:16:17.428 [DEBUG] [Thread-135600 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:16:21.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T22:16:21.754 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T22:16:21.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T22:16:22.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 22, 15, 52), 5.3, 70.64, 0.0, 22.96, 15.91, 0, 0, 0, 2, 0, 0),)
2025-12-31T22:16:22.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 22:15:52
2025-12-31T22:16:22.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T22:16:22.795 [DEBUG] [Thread-135601] [transport.py] [_log()] starting thread (client mode): 0xb95d54e0
2025-12-31T22:16:22.795 [DEBUG] [Thread-135601] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:16:22.810 [DEBUG] [Thread-135601] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T22:16:22.810 [INFO] [Thread-135601] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T22:16:22.813 [DEBUG] [Thread-135601] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:16:22.813 [DEBUG] [Thread-135601] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T22:16:22.813 [DEBUG] [Thread-135601] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:16:22.813 [DEBUG] [Thread-135601] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:16:22.813 [DEBUG] [Thread-135601] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:16:22.813 [DEBUG] [Thread-135601] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:16:22.813 [DEBUG] [Thread-135601] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:16:22.813 [DEBUG] [Thread-135601] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:16:22.813 [DEBUG] [Thread-135601] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:16:22.813 [DEBUG] [Thread-135601] [transport.py] [_log()] client lang: <none>
2025-12-31T22:16:22.813 [DEBUG] [Thread-135601] [transport.py] [_log()] server lang: <none>
2025-12-31T22:16:22.813 [DEBUG] [Thread-135601] [transport.py] [_log()] kex follows: False
2025-12-31T22:16:22.814 [DEBUG] [Thread-135601] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:16:22.814 [DEBUG] [Thread-135601] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:16:22.814 [DEBUG] [Thread-135601] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:16:22.814 [DEBUG] [Thread-135601] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:16:22.814 [DEBUG] [Thread-135601] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:16:22.814 [DEBUG] [Thread-135601] [transport.py] [_log()] Compression: none
2025-12-31T22:16:22.814 [DEBUG] [Thread-135601] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:16:22.828 [DEBUG] [Thread-135601] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:16:22.828 [DEBUG] [Thread-135601] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:16:22.828 [DEBUG] [Thread-135601] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T22:16:22.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T22:16:22.829 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:16:22.829 [DEBUG] [Thread-135601] [transport.py] [_log()] userauth is OK
2025-12-31T22:16:22.829 [DEBUG] [Thread-135601] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:16:22.829 [DEBUG] [Thread-135601] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:16:22.829 [DEBUG] [Thread-135601] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T22:16:22.829 [DEBUG] [Thread-135601] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:16:22.839 [INFO] [Thread-135601] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:16:22.839 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:16:23.481 [DEBUG] [Thread-135601] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:16:23.481 [DEBUG] [Thread-135601] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:16:23.481 [DEBUG] [Thread-135601] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T22:16:23.521 [DEBUG] [Thread-135601] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:16:23.521 [DEBUG] [Thread-135601] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:16:23.523 [DEBUG] [Thread-135601] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:16:23.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:16:23.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T22:16:23.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T22:16:23.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T22:16:23.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:16:23.541 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T22:16:23.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:16:23.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:16:23.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T22:16:23.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.844581 -999.00  +16.10  12.19     73  +11.30 1 2 1 1 1     0    0 3.89 -34.60 Z.eSW 11.6 12.2 203.9 19.7 17.1 -17.8 17.0 -16.2 16.8 -16.4 17.0 -17.5
2025-12-31T22:16:23.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T22:16:23.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T22:16:23.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.844581
2025-12-31T22:16:23.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T22:16:23.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T22:16:23.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T22:16:23.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T22:16:23.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T22:16:23.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T22:15:52', tmtdew=5.3, humidity=70.64, cloud=0.0, wind=22.96, temperature=15.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T22:15:52', seeing=1.42, atlas_timestamp='2025-12-31T20:16:11.798', atlas_cloud=2, atlas_rain=1, zp_data=[0.71875, 0.7212500000000004, 1.0607500000000005, nan, 0.6925000000000008, 0.8397500000000004, 0.5669999999999993, 0.7622500000000008, 0.6064999999999996, 0.7949999999999999, 0.9022499999999996, 0.8354999999999997, 0.827, 0.27924999999999933, 0.24099999999999966, 0.7279999999999998, 1.1102499999999997, 1.1235, 0.4469999999999992, 0.39624999999999844, 0.5599999999999987, 0.364749999999999, 0.4892500000000011, -0.18024999999999913, nan, 0.6165000000000003, 0.6277500000000007, 0.09450000000000003, 0.20800000000000018, -0.019499999999998963, -1.6249999999999982, -0.8324999999999996, nan], zp_timestamp='2025-12-31T20:14:00')
2025-12-31T22:16:23.541 [DEBUG] [Thread-135601] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:16:23.616 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T22:16:23.630 [DEBUG] [Thread-135604] [transport.py] [_log()] starting thread (client mode): 0xb95d5840
2025-12-31T22:16:23.630 [DEBUG] [Thread-135604] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:16:23.644 [DEBUG] [Thread-135604] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T22:16:23.644 [INFO] [Thread-135604] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T22:16:23.652 [DEBUG] [Thread-135604] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:16:23.652 [DEBUG] [Thread-135604] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T22:16:23.652 [DEBUG] [Thread-135604] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:16:23.652 [DEBUG] [Thread-135604] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:16:23.652 [DEBUG] [Thread-135604] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:16:23.652 [DEBUG] [Thread-135604] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:16:23.652 [DEBUG] [Thread-135604] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:16:23.652 [DEBUG] [Thread-135604] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:16:23.652 [DEBUG] [Thread-135604] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:16:23.652 [DEBUG] [Thread-135604] [transport.py] [_log()] client lang: <none>
2025-12-31T22:16:23.652 [DEBUG] [Thread-135604] [transport.py] [_log()] server lang: <none>
2025-12-31T22:16:23.652 [DEBUG] [Thread-135604] [transport.py] [_log()] kex follows: False
2025-12-31T22:16:23.652 [DEBUG] [Thread-135604] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:16:23.652 [DEBUG] [Thread-135604] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:16:23.652 [DEBUG] [Thread-135604] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:16:23.652 [DEBUG] [Thread-135604] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:16:23.652 [DEBUG] [Thread-135604] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:16:23.652 [DEBUG] [Thread-135604] [transport.py] [_log()] Compression: none
2025-12-31T22:16:23.652 [DEBUG] [Thread-135604] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:16:23.712 [DEBUG] [Thread-135604] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:16:23.713 [DEBUG] [Thread-135604] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:16:23.713 [DEBUG] [Thread-135604] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T22:16:23.713 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T22:16:23.713 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:16:23.774 [DEBUG] [Thread-135604] [transport.py] [_log()] userauth is OK
2025-12-31T22:16:23.774 [DEBUG] [Thread-135604] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:16:23.774 [DEBUG] [Thread-135604] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:16:23.774 [DEBUG] [Thread-135604] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T22:16:23.774 [DEBUG] [Thread-135604] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:16:23.790 [INFO] [Thread-135604] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:16:23.791 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T22:16:23.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:16:24.618 [DEBUG] [Thread-135604] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:16:24.619 [DEBUG] [Thread-135604] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:16:24.666 [DEBUG] [Thread-135604] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:16:24.666 [DEBUG] [Thread-135604] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:16:24.675 [DEBUG] [Thread-135604] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:16:24.683 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:16:24.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T22:16:24.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T22:16:24.699 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:16:24.699 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:16:24.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:16:24.707 [DEBUG] [Thread-135604] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:16:32.460 [DEBUG] [Thread-135606 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:16:47.083 [DEBUG] [Thread-135607 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:16:47.522 [DEBUG] [Thread-135608 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:16:54.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T22:16:54.729 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T22:16:54.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T22:16:55.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 22, 16, 24), 5.29, 70.69, 0.0, 20.24, 15.92, 0, 0, 0, 2, 0, 0),)
2025-12-31T22:16:55.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 22:16:24
2025-12-31T22:16:55.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T22:16:55.723 [DEBUG] [Thread-135609] [transport.py] [_log()] starting thread (client mode): 0xb1796140
2025-12-31T22:16:55.723 [DEBUG] [Thread-135609] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:16:55.742 [DEBUG] [Thread-135609] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T22:16:55.743 [INFO] [Thread-135609] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T22:16:55.745 [DEBUG] [Thread-135609] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:16:55.746 [DEBUG] [Thread-135609] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T22:16:55.746 [DEBUG] [Thread-135609] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:16:55.746 [DEBUG] [Thread-135609] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:16:55.746 [DEBUG] [Thread-135609] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:16:55.746 [DEBUG] [Thread-135609] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:16:55.746 [DEBUG] [Thread-135609] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:16:55.746 [DEBUG] [Thread-135609] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:16:55.746 [DEBUG] [Thread-135609] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:16:55.746 [DEBUG] [Thread-135609] [transport.py] [_log()] client lang: <none>
2025-12-31T22:16:55.746 [DEBUG] [Thread-135609] [transport.py] [_log()] server lang: <none>
2025-12-31T22:16:55.746 [DEBUG] [Thread-135609] [transport.py] [_log()] kex follows: False
2025-12-31T22:16:55.746 [DEBUG] [Thread-135609] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:16:55.746 [DEBUG] [Thread-135609] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:16:55.746 [DEBUG] [Thread-135609] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:16:55.747 [DEBUG] [Thread-135609] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:16:55.747 [DEBUG] [Thread-135609] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:16:55.747 [DEBUG] [Thread-135609] [transport.py] [_log()] Compression: none
2025-12-31T22:16:55.747 [DEBUG] [Thread-135609] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:16:55.766 [DEBUG] [Thread-135609] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:16:55.767 [DEBUG] [Thread-135609] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:16:55.767 [DEBUG] [Thread-135609] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T22:16:55.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T22:16:55.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:16:55.767 [DEBUG] [Thread-135609] [transport.py] [_log()] userauth is OK
2025-12-31T22:16:55.767 [DEBUG] [Thread-135609] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:16:55.768 [DEBUG] [Thread-135609] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:16:55.768 [DEBUG] [Thread-135609] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T22:16:55.768 [DEBUG] [Thread-135609] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:16:55.776 [INFO] [Thread-135609] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:16:55.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:16:56.449 [DEBUG] [Thread-135609] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:16:56.449 [DEBUG] [Thread-135609] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:16:56.449 [DEBUG] [Thread-135609] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T22:16:56.489 [DEBUG] [Thread-135609] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:16:56.489 [DEBUG] [Thread-135609] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:16:56.491 [DEBUG] [Thread-135609] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:16:56.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:16:56.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T22:16:56.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T22:16:56.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T22:16:56.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:16:56.507 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T22:16:56.507 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:16:56.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:16:56.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T22:16:56.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.844928 -999.00  +16.10  15.41     73  +11.30 1 2 1 1 1     0    0 4.04 -33.81 zN..W 15.2 15.4 202.8 25.1 17.1 -17.4 17.0 -16.1 16.8 -16.2 17.0 -17.5
2025-12-31T22:16:56.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T22:16:56.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T22:16:56.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.844928
2025-12-31T22:16:56.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T22:16:56.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T22:16:56.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T22:16:56.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T22:16:56.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T22:16:56.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T22:16:24', tmtdew=5.29, humidity=70.69, cloud=0.0, wind=20.24, temperature=15.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T22:16:24', seeing=1.49, atlas_timestamp='2025-12-31T20:16:41.779', atlas_cloud=2, atlas_rain=1, zp_data=[0.71875, 0.7212500000000004, 1.0607500000000005, nan, 0.6925000000000008, 0.8397500000000004, 0.5669999999999993, 0.7622500000000008, 0.6064999999999996, 0.7949999999999999, 0.9022499999999996, 0.8354999999999997, 0.827, 0.27924999999999933, 0.24099999999999966, 0.7279999999999998, 1.1102499999999997, 1.1235, 0.4469999999999992, 0.39624999999999844, 0.5599999999999987, 0.364749999999999, 0.4892500000000011, -0.18024999999999913, nan, 0.6165000000000003, 0.6277500000000007, 0.09450000000000003, 0.20800000000000018, -0.019499999999998963, -1.6249999999999982, -0.8324999999999996, nan], zp_timestamp='2025-12-31T20:14:00')
2025-12-31T22:16:56.507 [DEBUG] [Thread-135609] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:16:56.582 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T22:16:56.594 [DEBUG] [Thread-135612] [transport.py] [_log()] starting thread (client mode): 0xb1744910
2025-12-31T22:16:56.594 [DEBUG] [Thread-135612] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:16:56.608 [DEBUG] [Thread-135612] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T22:16:56.608 [INFO] [Thread-135612] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T22:16:56.616 [DEBUG] [Thread-135612] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:16:56.616 [DEBUG] [Thread-135612] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T22:16:56.616 [DEBUG] [Thread-135612] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:16:56.616 [DEBUG] [Thread-135612] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:16:56.616 [DEBUG] [Thread-135612] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:16:56.616 [DEBUG] [Thread-135612] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:16:56.616 [DEBUG] [Thread-135612] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:16:56.616 [DEBUG] [Thread-135612] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:16:56.616 [DEBUG] [Thread-135612] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:16:56.616 [DEBUG] [Thread-135612] [transport.py] [_log()] client lang: <none>
2025-12-31T22:16:56.616 [DEBUG] [Thread-135612] [transport.py] [_log()] server lang: <none>
2025-12-31T22:16:56.616 [DEBUG] [Thread-135612] [transport.py] [_log()] kex follows: False
2025-12-31T22:16:56.616 [DEBUG] [Thread-135612] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:16:56.616 [DEBUG] [Thread-135612] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:16:56.616 [DEBUG] [Thread-135612] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:16:56.616 [DEBUG] [Thread-135612] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:16:56.616 [DEBUG] [Thread-135612] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:16:56.616 [DEBUG] [Thread-135612] [transport.py] [_log()] Compression: none
2025-12-31T22:16:56.616 [DEBUG] [Thread-135612] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:16:56.672 [DEBUG] [Thread-135612] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:16:56.672 [DEBUG] [Thread-135612] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:16:56.672 [DEBUG] [Thread-135612] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T22:16:56.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T22:16:56.673 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:16:56.730 [DEBUG] [Thread-135612] [transport.py] [_log()] userauth is OK
2025-12-31T22:16:56.730 [DEBUG] [Thread-135612] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:16:56.730 [DEBUG] [Thread-135612] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:16:56.730 [DEBUG] [Thread-135612] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T22:16:56.730 [DEBUG] [Thread-135612] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:16:56.743 [INFO] [Thread-135612] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:16:56.743 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T22:16:56.744 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:16:57.557 [DEBUG] [Thread-135612] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:16:57.557 [DEBUG] [Thread-135612] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:16:57.605 [DEBUG] [Thread-135612] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:16:57.605 [DEBUG] [Thread-135612] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:16:57.614 [DEBUG] [Thread-135612] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:16:57.621 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:16:57.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T22:16:57.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T22:16:57.637 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:16:57.637 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:16:57.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:16:57.645 [DEBUG] [Thread-135612] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:17:02.553 [DEBUG] [Thread-135614 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:17:11.708 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:17:11.709 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:17:17.593 [DEBUG] [Thread-135615 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:17:27.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T22:17:27.668 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T22:17:27.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T22:17:28.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 22, 16, 56), 5.29, 70.71, 0.0, 22.57, 15.94, 0, 0, 0, 2, 0, 0),)
2025-12-31T22:17:28.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 22:16:56
2025-12-31T22:17:28.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T22:17:28.666 [DEBUG] [Thread-135616] [transport.py] [_log()] starting thread (client mode): 0xb95d57b0
2025-12-31T22:17:28.666 [DEBUG] [Thread-135616] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:17:28.687 [DEBUG] [Thread-135616] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T22:17:28.687 [INFO] [Thread-135616] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T22:17:28.689 [DEBUG] [Thread-135616] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:17:28.689 [DEBUG] [Thread-135616] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T22:17:28.689 [DEBUG] [Thread-135616] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:17:28.689 [DEBUG] [Thread-135616] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:17:28.689 [DEBUG] [Thread-135616] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:17:28.689 [DEBUG] [Thread-135616] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:17:28.689 [DEBUG] [Thread-135616] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:17:28.689 [DEBUG] [Thread-135616] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:17:28.689 [DEBUG] [Thread-135616] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:17:28.689 [DEBUG] [Thread-135616] [transport.py] [_log()] client lang: <none>
2025-12-31T22:17:28.689 [DEBUG] [Thread-135616] [transport.py] [_log()] server lang: <none>
2025-12-31T22:17:28.689 [DEBUG] [Thread-135616] [transport.py] [_log()] kex follows: False
2025-12-31T22:17:28.690 [DEBUG] [Thread-135616] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:17:28.690 [DEBUG] [Thread-135616] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:17:28.690 [DEBUG] [Thread-135616] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:17:28.690 [DEBUG] [Thread-135616] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:17:28.690 [DEBUG] [Thread-135616] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:17:28.690 [DEBUG] [Thread-135616] [transport.py] [_log()] Compression: none
2025-12-31T22:17:28.690 [DEBUG] [Thread-135616] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:17:28.703 [DEBUG] [Thread-135616] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:17:28.703 [DEBUG] [Thread-135616] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:17:28.703 [DEBUG] [Thread-135616] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T22:17:28.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T22:17:28.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:17:28.704 [DEBUG] [Thread-135616] [transport.py] [_log()] userauth is OK
2025-12-31T22:17:28.704 [DEBUG] [Thread-135616] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:17:28.704 [DEBUG] [Thread-135616] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:17:28.704 [DEBUG] [Thread-135616] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T22:17:28.704 [DEBUG] [Thread-135616] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:17:28.720 [INFO] [Thread-135616] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:17:28.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:17:29.338 [DEBUG] [Thread-135616] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:17:29.338 [DEBUG] [Thread-135616] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:17:29.338 [DEBUG] [Thread-135616] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T22:17:29.378 [DEBUG] [Thread-135616] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:17:29.378 [DEBUG] [Thread-135616] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:17:29.381 [DEBUG] [Thread-135616] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:17:29.386 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:17:29.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T22:17:29.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T22:17:29.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T22:17:29.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:17:29.393 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T22:17:29.393 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:17:29.393 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:17:29.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T22:17:29.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.845276 -999.00  +16.10  16.95     73  +11.40 1 2 1 1 1     0    0 4.24 -28.92 zN..W 13.2 16.9 201.8 18.7 17.1 -17.1 16.9 -15.7 16.8 -16.1 17.0 -17.5
2025-12-31T22:17:29.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T22:17:29.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T22:17:29.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.845276
2025-12-31T22:17:29.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T22:17:29.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T22:17:29.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T22:17:29.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T22:17:29.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T22:17:29.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T22:16:56', tmtdew=5.29, humidity=70.71, cloud=0.0, wind=22.57, temperature=15.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T22:16:56', seeing=1.27, atlas_timestamp='2025-12-31T20:17:11.846', atlas_cloud=2, atlas_rain=1, zp_data=[0.71875, 0.7212500000000004, 1.0607500000000005, nan, 0.6925000000000008, 0.8397500000000004, 0.5669999999999993, 0.7622500000000008, 0.6064999999999996, 0.7949999999999999, 0.9022499999999996, 0.8354999999999997, 0.827, 0.27924999999999933, 0.24099999999999966, 0.7279999999999998, 1.1102499999999997, 1.1235, 0.4469999999999992, 0.39624999999999844, 0.5599999999999987, 0.364749999999999, 0.4892500000000011, -0.18024999999999913, nan, 0.6165000000000003, 0.6277500000000007, 0.09450000000000003, 0.20800000000000018, -0.019499999999998963, -1.6249999999999982, -0.8324999999999996, nan], zp_timestamp='2025-12-31T20:14:00')
2025-12-31T22:17:29.394 [DEBUG] [Thread-135616] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:17:29.467 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T22:17:29.479 [DEBUG] [Thread-135619] [transport.py] [_log()] starting thread (client mode): 0xb1776980
2025-12-31T22:17:29.479 [DEBUG] [Thread-135619] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:17:29.494 [DEBUG] [Thread-135619] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T22:17:29.494 [INFO] [Thread-135619] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T22:17:29.502 [DEBUG] [Thread-135619] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:17:29.502 [DEBUG] [Thread-135619] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T22:17:29.502 [DEBUG] [Thread-135619] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:17:29.502 [DEBUG] [Thread-135619] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:17:29.502 [DEBUG] [Thread-135619] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:17:29.502 [DEBUG] [Thread-135619] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:17:29.502 [DEBUG] [Thread-135619] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:17:29.502 [DEBUG] [Thread-135619] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:17:29.502 [DEBUG] [Thread-135619] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:17:29.502 [DEBUG] [Thread-135619] [transport.py] [_log()] client lang: <none>
2025-12-31T22:17:29.502 [DEBUG] [Thread-135619] [transport.py] [_log()] server lang: <none>
2025-12-31T22:17:29.502 [DEBUG] [Thread-135619] [transport.py] [_log()] kex follows: False
2025-12-31T22:17:29.502 [DEBUG] [Thread-135619] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:17:29.502 [DEBUG] [Thread-135619] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:17:29.502 [DEBUG] [Thread-135619] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:17:29.502 [DEBUG] [Thread-135619] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:17:29.502 [DEBUG] [Thread-135619] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:17:29.502 [DEBUG] [Thread-135619] [transport.py] [_log()] Compression: none
2025-12-31T22:17:29.502 [DEBUG] [Thread-135619] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:17:29.561 [DEBUG] [Thread-135619] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:17:29.561 [DEBUG] [Thread-135619] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:17:29.561 [DEBUG] [Thread-135619] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T22:17:29.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T22:17:29.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:17:29.627 [DEBUG] [Thread-135619] [transport.py] [_log()] userauth is OK
2025-12-31T22:17:29.627 [DEBUG] [Thread-135619] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:17:29.627 [DEBUG] [Thread-135619] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:17:29.627 [DEBUG] [Thread-135619] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T22:17:29.627 [DEBUG] [Thread-135619] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:17:29.645 [INFO] [Thread-135619] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:17:29.645 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T22:17:29.645 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:17:30.507 [DEBUG] [Thread-135619] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:17:30.507 [DEBUG] [Thread-135619] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:17:30.555 [DEBUG] [Thread-135619] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:17:30.556 [DEBUG] [Thread-135619] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:17:30.565 [DEBUG] [Thread-135619] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:17:30.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:17:30.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T22:17:30.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T22:17:30.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:17:30.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:17:30.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:17:30.603 [DEBUG] [Thread-135619] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:17:32.630 [DEBUG] [Thread-135621 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:17:47.169 [DEBUG] [Thread-135622 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:17:47.682 [DEBUG] [Thread-135623 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:18:00.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T22:18:00.615 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T22:18:00.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T22:18:01.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 22, 17, 28), 5.27, 70.78, 0.0, 22.53, 15.91, 0, 0, 0, 2, 0, 0),)
2025-12-31T22:18:01.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 22:17:28
2025-12-31T22:18:01.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T22:18:01.668 [DEBUG] [Thread-135624] [transport.py] [_log()] starting thread (client mode): 0xb17849d0
2025-12-31T22:18:01.668 [DEBUG] [Thread-135624] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:18:01.682 [DEBUG] [Thread-135624] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T22:18:01.682 [INFO] [Thread-135624] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T22:18:01.685 [DEBUG] [Thread-135624] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:18:01.685 [DEBUG] [Thread-135624] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T22:18:01.685 [DEBUG] [Thread-135624] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:18:01.685 [DEBUG] [Thread-135624] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:18:01.685 [DEBUG] [Thread-135624] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:18:01.685 [DEBUG] [Thread-135624] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:18:01.686 [DEBUG] [Thread-135624] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:18:01.686 [DEBUG] [Thread-135624] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:18:01.686 [DEBUG] [Thread-135624] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:18:01.686 [DEBUG] [Thread-135624] [transport.py] [_log()] client lang: <none>
2025-12-31T22:18:01.686 [DEBUG] [Thread-135624] [transport.py] [_log()] server lang: <none>
2025-12-31T22:18:01.686 [DEBUG] [Thread-135624] [transport.py] [_log()] kex follows: False
2025-12-31T22:18:01.686 [DEBUG] [Thread-135624] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:18:01.686 [DEBUG] [Thread-135624] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:18:01.686 [DEBUG] [Thread-135624] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:18:01.686 [DEBUG] [Thread-135624] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:18:01.686 [DEBUG] [Thread-135624] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:18:01.686 [DEBUG] [Thread-135624] [transport.py] [_log()] Compression: none
2025-12-31T22:18:01.686 [DEBUG] [Thread-135624] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:18:01.703 [DEBUG] [Thread-135624] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:18:01.703 [DEBUG] [Thread-135624] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:18:01.703 [DEBUG] [Thread-135624] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T22:18:01.704 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T22:18:01.704 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:18:01.704 [DEBUG] [Thread-135624] [transport.py] [_log()] userauth is OK
2025-12-31T22:18:01.704 [DEBUG] [Thread-135624] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:18:01.704 [DEBUG] [Thread-135624] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:18:01.704 [DEBUG] [Thread-135624] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T22:18:01.704 [DEBUG] [Thread-135624] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:18:01.731 [INFO] [Thread-135624] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:18:01.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:18:02.357 [DEBUG] [Thread-135624] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:18:02.357 [DEBUG] [Thread-135624] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:18:02.357 [DEBUG] [Thread-135624] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T22:18:02.398 [DEBUG] [Thread-135624] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:18:02.398 [DEBUG] [Thread-135624] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:18:02.401 [DEBUG] [Thread-135624] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:18:02.413 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:18:02.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T22:18:02.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T22:18:02.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T22:18:02.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:18:02.418 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T22:18:02.418 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:18:02.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:18:02.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T22:18:02.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.845623 -999.00  +16.00   8.63     74  +11.40 1 2 1 1 1     0    0 4.02 -26.48 ZN..W 9.5 8.6 201.9 24.7 17.1 -16.9 16.9 -15.8 16.8 -16.1 17.0 -17.3
2025-12-31T22:18:02.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T22:18:02.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T22:18:02.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.845623
2025-12-31T22:18:02.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T22:18:02.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T22:18:02.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T22:18:02.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T22:18:02.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T22:18:02.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T22:17:28', tmtdew=5.27, humidity=70.78, cloud=0.0, wind=22.53, temperature=15.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T22:18:00', seeing=1.3, atlas_timestamp='2025-12-31T20:17:41.827', atlas_cloud=2, atlas_rain=1, zp_data=[0.2602499999999992, 0.44475000000000087, 0.7302500000000007, 0.22100000000000009, 0.665, 0.8302500000000013, 0.5669999999999993, 0.4302500000000009, 0.39949999999999974, 0.4095000000000013, 0.8602499999999988, 0.41999999999999993, 0.3490000000000002, 0.4262499999999996, 0.5399999999999991, 0.019000000000000128, 0.8522499999999997, 0.4294999999999991, 0.9249999999999989, 0.5342499999999992, 0.34750000000000014, 0.24074999999999847, -0.13574999999999982, -0.4472499999999986, 0.6789999999999994, nan, 1.1087499999999997, -0.8900000000000006, 0.2450000000000001, -0.4939999999999998, -1.2979999999999983, -1.4959999999999987, -0.4202500000000011], zp_timestamp='2025-12-31T20:15:00')
2025-12-31T22:18:02.420 [DEBUG] [Thread-135624] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:18:02.493 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T22:18:02.505 [DEBUG] [Thread-135627] [transport.py] [_log()] starting thread (client mode): 0xb6bb8dc0
2025-12-31T22:18:02.505 [DEBUG] [Thread-135627] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:18:02.520 [DEBUG] [Thread-135627] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T22:18:02.520 [INFO] [Thread-135627] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T22:18:02.527 [DEBUG] [Thread-135627] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:18:02.527 [DEBUG] [Thread-135627] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T22:18:02.527 [DEBUG] [Thread-135627] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:18:02.527 [DEBUG] [Thread-135627] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:18:02.527 [DEBUG] [Thread-135627] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:18:02.527 [DEBUG] [Thread-135627] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:18:02.527 [DEBUG] [Thread-135627] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:18:02.527 [DEBUG] [Thread-135627] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:18:02.527 [DEBUG] [Thread-135627] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:18:02.527 [DEBUG] [Thread-135627] [transport.py] [_log()] client lang: <none>
2025-12-31T22:18:02.527 [DEBUG] [Thread-135627] [transport.py] [_log()] server lang: <none>
2025-12-31T22:18:02.527 [DEBUG] [Thread-135627] [transport.py] [_log()] kex follows: False
2025-12-31T22:18:02.527 [DEBUG] [Thread-135627] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:18:02.527 [DEBUG] [Thread-135627] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:18:02.527 [DEBUG] [Thread-135627] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:18:02.527 [DEBUG] [Thread-135627] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:18:02.527 [DEBUG] [Thread-135627] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:18:02.528 [DEBUG] [Thread-135627] [transport.py] [_log()] Compression: none
2025-12-31T22:18:02.528 [DEBUG] [Thread-135627] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:18:02.588 [DEBUG] [Thread-135627] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:18:02.588 [DEBUG] [Thread-135627] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:18:02.589 [DEBUG] [Thread-135627] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T22:18:02.589 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T22:18:02.589 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:18:02.646 [DEBUG] [Thread-135627] [transport.py] [_log()] userauth is OK
2025-12-31T22:18:02.646 [DEBUG] [Thread-135627] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:18:02.646 [DEBUG] [Thread-135627] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:18:02.646 [DEBUG] [Thread-135627] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T22:18:02.646 [DEBUG] [Thread-135627] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:18:02.664 [INFO] [Thread-135627] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:18:02.664 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T22:18:02.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:18:02.720 [DEBUG] [Thread-135629 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:18:03.503 [DEBUG] [Thread-135627] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:18:03.503 [DEBUG] [Thread-135627] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:18:03.551 [DEBUG] [Thread-135627] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:18:03.551 [DEBUG] [Thread-135627] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:18:03.560 [DEBUG] [Thread-135627] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:18:03.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:18:03.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T22:18:03.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T22:18:03.587 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:18:03.587 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:18:03.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:18:03.596 [DEBUG] [Thread-135627] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:18:11.908 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:18:11.909 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:18:17.774 [DEBUG] [Thread-135630 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:18:32.802 [DEBUG] [Thread-135631 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:18:33.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T22:18:33.595 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T22:18:33.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T22:18:34.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 22, 17, 28), 5.22, 71.28, 0.0, 20.73, 15.86, 0, 0, 0, 2, 0, 0),)
2025-12-31T22:18:34.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 22:17:28
2025-12-31T22:18:34.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T22:18:34.655 [DEBUG] [Thread-135632] [transport.py] [_log()] starting thread (client mode): 0xb1764d30
2025-12-31T22:18:34.655 [DEBUG] [Thread-135632] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:18:34.673 [DEBUG] [Thread-135632] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T22:18:34.673 [INFO] [Thread-135632] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T22:18:34.674 [DEBUG] [Thread-135632] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:18:34.674 [DEBUG] [Thread-135632] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T22:18:34.674 [DEBUG] [Thread-135632] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:18:34.674 [DEBUG] [Thread-135632] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:18:34.674 [DEBUG] [Thread-135632] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:18:34.674 [DEBUG] [Thread-135632] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:18:34.675 [DEBUG] [Thread-135632] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:18:34.675 [DEBUG] [Thread-135632] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:18:34.675 [DEBUG] [Thread-135632] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:18:34.675 [DEBUG] [Thread-135632] [transport.py] [_log()] client lang: <none>
2025-12-31T22:18:34.675 [DEBUG] [Thread-135632] [transport.py] [_log()] server lang: <none>
2025-12-31T22:18:34.675 [DEBUG] [Thread-135632] [transport.py] [_log()] kex follows: False
2025-12-31T22:18:34.675 [DEBUG] [Thread-135632] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:18:34.675 [DEBUG] [Thread-135632] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:18:34.675 [DEBUG] [Thread-135632] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:18:34.675 [DEBUG] [Thread-135632] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:18:34.675 [DEBUG] [Thread-135632] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:18:34.675 [DEBUG] [Thread-135632] [transport.py] [_log()] Compression: none
2025-12-31T22:18:34.675 [DEBUG] [Thread-135632] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:18:34.682 [DEBUG] [Thread-135632] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:18:34.682 [DEBUG] [Thread-135632] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:18:34.682 [DEBUG] [Thread-135632] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T22:18:34.682 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T22:18:34.682 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:18:34.683 [DEBUG] [Thread-135632] [transport.py] [_log()] userauth is OK
2025-12-31T22:18:34.683 [DEBUG] [Thread-135632] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:18:34.683 [DEBUG] [Thread-135632] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:18:34.683 [DEBUG] [Thread-135632] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T22:18:34.683 [DEBUG] [Thread-135632] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:18:34.692 [INFO] [Thread-135632] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:18:34.692 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:18:35.276 [DEBUG] [Thread-135632] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:18:35.276 [DEBUG] [Thread-135632] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:18:35.277 [DEBUG] [Thread-135632] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T22:18:35.317 [DEBUG] [Thread-135632] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:18:35.317 [DEBUG] [Thread-135632] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:18:35.320 [DEBUG] [Thread-135632] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:18:35.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:18:35.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T22:18:35.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T22:18:35.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T22:18:35.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:18:35.343 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T22:18:35.343 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:18:35.343 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:18:35.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T22:18:35.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.845970 -999.00  +16.10   9.71     73  +11.40 1 2 1 1 1     0    0 4.23 -25.98 .N..W 10.4 9.7 229.9 17.4 17.1 -16.6 16.9 -15.3 16.8 -16.1 17.0 -17.2
2025-12-31T22:18:35.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T22:18:35.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T22:18:35.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.845970
2025-12-31T22:18:35.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T22:18:35.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T22:18:35.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T22:18:35.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T22:18:35.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T22:18:35.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T22:17:28', tmtdew=5.22, humidity=71.28, cloud=0.0, wind=20.73, temperature=15.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T22:18:32', seeing=1.3, atlas_timestamp='2025-12-31T20:18:11.808', atlas_cloud=2, atlas_rain=1, zp_data=[0.2602499999999992, 0.44475000000000087, 0.7302500000000007, 0.22100000000000009, 0.665, 0.8302500000000013, 0.5669999999999993, 0.4302500000000009, 0.39949999999999974, 0.4095000000000013, 0.8602499999999988, 0.41999999999999993, 0.3490000000000002, 0.4262499999999996, 0.5399999999999991, 0.019000000000000128, 0.8522499999999997, 0.4294999999999991, 0.9249999999999989, 0.5342499999999992, 0.34750000000000014, 0.24074999999999847, -0.13574999999999982, -0.4472499999999986, 0.6789999999999994, nan, 1.1087499999999997, -0.8900000000000006, 0.2450000000000001, -0.4939999999999998, -1.2979999999999983, -1.4959999999999987, -0.4202500000000011], zp_timestamp='2025-12-31T20:15:00')
2025-12-31T22:18:35.346 [DEBUG] [Thread-135632] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:18:35.426 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T22:18:35.436 [DEBUG] [Thread-135635] [transport.py] [_log()] starting thread (client mode): 0xb1765840
2025-12-31T22:18:35.437 [DEBUG] [Thread-135635] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:18:35.451 [DEBUG] [Thread-135635] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T22:18:35.451 [INFO] [Thread-135635] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T22:18:35.460 [DEBUG] [Thread-135635] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:18:35.460 [DEBUG] [Thread-135635] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T22:18:35.460 [DEBUG] [Thread-135635] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:18:35.461 [DEBUG] [Thread-135635] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:18:35.461 [DEBUG] [Thread-135635] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:18:35.461 [DEBUG] [Thread-135635] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:18:35.461 [DEBUG] [Thread-135635] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:18:35.461 [DEBUG] [Thread-135635] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:18:35.461 [DEBUG] [Thread-135635] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:18:35.461 [DEBUG] [Thread-135635] [transport.py] [_log()] client lang: <none>
2025-12-31T22:18:35.461 [DEBUG] [Thread-135635] [transport.py] [_log()] server lang: <none>
2025-12-31T22:18:35.461 [DEBUG] [Thread-135635] [transport.py] [_log()] kex follows: False
2025-12-31T22:18:35.461 [DEBUG] [Thread-135635] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:18:35.462 [DEBUG] [Thread-135635] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:18:35.462 [DEBUG] [Thread-135635] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:18:35.462 [DEBUG] [Thread-135635] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:18:35.462 [DEBUG] [Thread-135635] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:18:35.462 [DEBUG] [Thread-135635] [transport.py] [_log()] Compression: none
2025-12-31T22:18:35.462 [DEBUG] [Thread-135635] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:18:35.519 [DEBUG] [Thread-135635] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:18:35.520 [DEBUG] [Thread-135635] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:18:35.520 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T22:18:35.521 [DEBUG] [Thread-135635] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T22:18:35.522 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:18:35.578 [DEBUG] [Thread-135635] [transport.py] [_log()] userauth is OK
2025-12-31T22:18:35.579 [DEBUG] [Thread-135635] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:18:35.579 [DEBUG] [Thread-135635] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:18:35.579 [DEBUG] [Thread-135635] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T22:18:35.579 [DEBUG] [Thread-135635] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:18:35.604 [INFO] [Thread-135635] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:18:35.605 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T22:18:35.605 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:18:36.466 [DEBUG] [Thread-135635] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:18:36.466 [DEBUG] [Thread-135635] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:18:36.513 [DEBUG] [Thread-135635] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:18:36.514 [DEBUG] [Thread-135635] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:18:36.522 [DEBUG] [Thread-135635] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:18:36.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:18: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')
2025-12-31T22:18:36.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T22:18:36.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:18:36.553 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:18:36.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:18:36.561 [DEBUG] [Thread-135635] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:18:47.251 [DEBUG] [Thread-135637 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:18:47.836 [DEBUG] [Thread-135638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:19:02.886 [DEBUG] [Thread-135639 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:19:06.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T22:19:06.583 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T22:19:06.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T22:19:07.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 22, 18, 32), 5.19, 71.43, 0.0, 21.74, 15.84, 0, 0, 0, 2, 0, 0),)
2025-12-31T22:19:07.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 22:18:32
2025-12-31T22:19:07.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T22:19:07.595 [DEBUG] [Thread-135640] [transport.py] [_log()] starting thread (client mode): 0xb17598d0
2025-12-31T22:19:07.596 [DEBUG] [Thread-135640] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:19:07.616 [DEBUG] [Thread-135640] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T22:19:07.616 [INFO] [Thread-135640] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T22:19:07.619 [DEBUG] [Thread-135640] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:19:07.619 [DEBUG] [Thread-135640] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T22:19:07.619 [DEBUG] [Thread-135640] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:19:07.619 [DEBUG] [Thread-135640] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:19:07.619 [DEBUG] [Thread-135640] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:19:07.619 [DEBUG] [Thread-135640] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:19:07.619 [DEBUG] [Thread-135640] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:19:07.619 [DEBUG] [Thread-135640] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:19:07.619 [DEBUG] [Thread-135640] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:19:07.619 [DEBUG] [Thread-135640] [transport.py] [_log()] client lang: <none>
2025-12-31T22:19:07.619 [DEBUG] [Thread-135640] [transport.py] [_log()] server lang: <none>
2025-12-31T22:19:07.619 [DEBUG] [Thread-135640] [transport.py] [_log()] kex follows: False
2025-12-31T22:19:07.619 [DEBUG] [Thread-135640] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:19:07.619 [DEBUG] [Thread-135640] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:19:07.619 [DEBUG] [Thread-135640] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:19:07.619 [DEBUG] [Thread-135640] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:19:07.619 [DEBUG] [Thread-135640] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:19:07.619 [DEBUG] [Thread-135640] [transport.py] [_log()] Compression: none
2025-12-31T22:19:07.619 [DEBUG] [Thread-135640] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:19:07.639 [DEBUG] [Thread-135640] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:19:07.639 [DEBUG] [Thread-135640] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:19:07.640 [DEBUG] [Thread-135640] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T22:19:07.640 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T22:19:07.641 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:19:07.682 [DEBUG] [Thread-135640] [transport.py] [_log()] userauth is OK
2025-12-31T22:19:07.682 [DEBUG] [Thread-135640] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:19:07.682 [DEBUG] [Thread-135640] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:19:07.682 [DEBUG] [Thread-135640] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T22:19:07.682 [DEBUG] [Thread-135640] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:19:07.714 [INFO] [Thread-135640] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:19:07.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:19:08.299 [DEBUG] [Thread-135640] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:19:08.300 [DEBUG] [Thread-135640] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:19:08.300 [DEBUG] [Thread-135640] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T22:19:08.341 [DEBUG] [Thread-135640] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:19:08.341 [DEBUG] [Thread-135640] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:19:08.344 [DEBUG] [Thread-135640] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:19:08.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:19:08.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T22:19:08.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T22:19:08.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T22:19:08.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:19:08.373 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T22:19:08.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:19:08.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:19:08.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T22:19:08.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.845970 -999.00  +16.10   9.71     73  +11.40 1 2 1 1 1     0    0 4.23 -25.98 .N..W 10.4 9.7 229.9 17.4 17.1 -16.6 16.9 -15.3 16.8 -16.1 17.0 -17.2
2025-12-31T22:19:08.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T22:19:08.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T22:19:08.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.845970
2025-12-31T22:19:08.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T22:19:08.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T22:19:08.375 [DEBUG] [Thread-135640] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:19:08.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T22:19:08.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T22:19:08.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T22:19:08.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T22:18:32', tmtdew=5.19, humidity=71.43, cloud=0.0, wind=21.74, temperature=15.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T22:19:05', seeing=1.62, atlas_timestamp='2025-12-31T20:18:11.808', atlas_cloud=2, atlas_rain=1, zp_data=[0.2602499999999992, 0.44475000000000087, 0.7302500000000007, 0.22100000000000009, 0.665, 0.8302500000000013, 0.5669999999999993, 0.4302500000000009, 0.39949999999999974, 0.4095000000000013, 0.8602499999999988, 0.41999999999999993, 0.3490000000000002, 0.4262499999999996, 0.5399999999999991, 0.019000000000000128, 0.8522499999999997, 0.4294999999999991, 0.9249999999999989, 0.5342499999999992, 0.34750000000000014, 0.24074999999999847, -0.13574999999999982, -0.4472499999999986, 0.6789999999999994, nan, 1.1087499999999997, -0.8900000000000006, 0.2450000000000001, -0.4939999999999998, -1.2979999999999983, -1.4959999999999987, -0.4202500000000011], zp_timestamp='2025-12-31T20:15:00')
2025-12-31T22:19:08.471 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T22:19:08.484 [DEBUG] [Thread-135643] [transport.py] [_log()] starting thread (client mode): 0xb9591b40
2025-12-31T22:19:08.484 [DEBUG] [Thread-135643] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:19:08.498 [DEBUG] [Thread-135643] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T22:19:08.498 [INFO] [Thread-135643] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T22:19:08.506 [DEBUG] [Thread-135643] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:19:08.506 [DEBUG] [Thread-135643] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T22:19:08.506 [DEBUG] [Thread-135643] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:19:08.506 [DEBUG] [Thread-135643] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:19:08.507 [DEBUG] [Thread-135643] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:19:08.507 [DEBUG] [Thread-135643] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:19:08.507 [DEBUG] [Thread-135643] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:19:08.507 [DEBUG] [Thread-135643] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:19:08.507 [DEBUG] [Thread-135643] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:19:08.507 [DEBUG] [Thread-135643] [transport.py] [_log()] client lang: <none>
2025-12-31T22:19:08.507 [DEBUG] [Thread-135643] [transport.py] [_log()] server lang: <none>
2025-12-31T22:19:08.507 [DEBUG] [Thread-135643] [transport.py] [_log()] kex follows: False
2025-12-31T22:19:08.507 [DEBUG] [Thread-135643] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:19:08.508 [DEBUG] [Thread-135643] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:19:08.508 [DEBUG] [Thread-135643] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:19:08.508 [DEBUG] [Thread-135643] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:19:08.508 [DEBUG] [Thread-135643] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:19:08.508 [DEBUG] [Thread-135643] [transport.py] [_log()] Compression: none
2025-12-31T22:19:08.508 [DEBUG] [Thread-135643] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:19:08.565 [DEBUG] [Thread-135643] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:19:08.566 [DEBUG] [Thread-135643] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:19:08.566 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T22:19:08.567 [DEBUG] [Thread-135643] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T22:19:08.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:19:08.622 [DEBUG] [Thread-135643] [transport.py] [_log()] userauth is OK
2025-12-31T22:19:08.622 [DEBUG] [Thread-135643] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:19:08.622 [DEBUG] [Thread-135643] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:19:08.622 [DEBUG] [Thread-135643] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T22:19:08.622 [DEBUG] [Thread-135643] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:19:08.643 [INFO] [Thread-135643] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:19:08.644 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T22:19:08.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:19:09.478 [DEBUG] [Thread-135643] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:19:09.479 [DEBUG] [Thread-135643] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:19:09.527 [DEBUG] [Thread-135643] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:19:09.527 [DEBUG] [Thread-135643] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:19:09.536 [DEBUG] [Thread-135643] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:19:09.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:19:09.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T22:19:09.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T22:19:09.564 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:19:09.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:19:09.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:19:09.573 [DEBUG] [Thread-135643] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:19:12.109 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:19:12.110 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:19:17.921 [DEBUG] [Thread-135645 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:19:32.976 [DEBUG] [Thread-135646 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:19:39.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T22:19:39.596 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T22:19:39.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T22:19:40.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 22, 19, 37), 5.1, 71.62, 0.0, 21.58, 15.82, 0, 0, 0, 2, 0, 0),)
2025-12-31T22:19:40.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 22:19:37
2025-12-31T22:19:40.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T22:19:40.584 [DEBUG] [Thread-135647] [transport.py] [_log()] starting thread (client mode): 0xb1784fa0
2025-12-31T22:19:40.584 [DEBUG] [Thread-135647] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:19:40.604 [DEBUG] [Thread-135647] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T22:19:40.605 [INFO] [Thread-135647] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T22:19:40.607 [DEBUG] [Thread-135647] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:19:40.608 [DEBUG] [Thread-135647] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T22:19:40.608 [DEBUG] [Thread-135647] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:19:40.608 [DEBUG] [Thread-135647] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:19:40.608 [DEBUG] [Thread-135647] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:19:40.608 [DEBUG] [Thread-135647] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:19:40.608 [DEBUG] [Thread-135647] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:19:40.608 [DEBUG] [Thread-135647] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:19:40.608 [DEBUG] [Thread-135647] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:19:40.608 [DEBUG] [Thread-135647] [transport.py] [_log()] client lang: <none>
2025-12-31T22:19:40.608 [DEBUG] [Thread-135647] [transport.py] [_log()] server lang: <none>
2025-12-31T22:19:40.608 [DEBUG] [Thread-135647] [transport.py] [_log()] kex follows: False
2025-12-31T22:19:40.608 [DEBUG] [Thread-135647] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:19:40.608 [DEBUG] [Thread-135647] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:19:40.608 [DEBUG] [Thread-135647] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:19:40.608 [DEBUG] [Thread-135647] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:19:40.608 [DEBUG] [Thread-135647] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:19:40.608 [DEBUG] [Thread-135647] [transport.py] [_log()] Compression: none
2025-12-31T22:19:40.608 [DEBUG] [Thread-135647] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:19:40.626 [DEBUG] [Thread-135647] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:19:40.626 [DEBUG] [Thread-135647] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:19:40.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T22:19:40.627 [DEBUG] [Thread-135647] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T22:19:40.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:19:40.629 [DEBUG] [Thread-135647] [transport.py] [_log()] userauth is OK
2025-12-31T22:19:40.629 [DEBUG] [Thread-135647] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:19:40.629 [DEBUG] [Thread-135647] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:19:40.629 [DEBUG] [Thread-135647] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T22:19:40.630 [DEBUG] [Thread-135647] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:19:40.654 [INFO] [Thread-135647] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:19:40.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:19:41.276 [DEBUG] [Thread-135647] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:19:41.276 [DEBUG] [Thread-135647] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:19:41.277 [DEBUG] [Thread-135647] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T22:19:41.317 [DEBUG] [Thread-135647] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:19:41.317 [DEBUG] [Thread-135647] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:19:41.321 [DEBUG] [Thread-135647] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:19:41.334 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:19:41.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T22:19:41.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T22:19:41.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T22:19:41.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:19:41.347 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T22:19:41.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:19:41.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:19:41.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T22:19:41.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.846317 -999.00  +16.10  17.18     73  +11.40 1 2 1 1 1     0    0 4.31 -22.67 .N..W 15.4 17.2 207.4 19.7 17.1 -16.4 17.0 -15.4 16.8 -15.8 17.1 -17.2
2025-12-31T22:19:41.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T22:19:41.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T22:19:41.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.846317
2025-12-31T22:19:41.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T22:19:41.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T22:19:41.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T22:19:41.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T22:19:41.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T22:19:41.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T22:19:37', tmtdew=5.1, humidity=71.62, cloud=0.0, wind=21.58, temperature=15.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T22:19:37', seeing=1.62, atlas_timestamp='2025-12-31T20:18:41.789', atlas_cloud=2, atlas_rain=1, zp_data=[0.2602499999999992, 0.44475000000000087, 0.7302500000000007, 0.22100000000000009, 0.665, 0.8302500000000013, 0.5669999999999993, 0.4302500000000009, 0.39949999999999974, 0.4095000000000013, 0.8602499999999988, 0.41999999999999993, 0.3490000000000002, 0.4262499999999996, 0.5399999999999991, 0.019000000000000128, 0.8522499999999997, 0.4294999999999991, 0.9249999999999989, 0.5342499999999992, 0.34750000000000014, 0.24074999999999847, -0.13574999999999982, -0.4472499999999986, 0.6789999999999994, nan, 1.1087499999999997, -0.8900000000000006, 0.2450000000000001, -0.4939999999999998, -1.2979999999999983, -1.4959999999999987, -0.4202500000000011], zp_timestamp='2025-12-31T20:15:00')
2025-12-31T22:19:41.350 [DEBUG] [Thread-135647] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:19:41.433 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T22:19:41.445 [DEBUG] [Thread-135650] [transport.py] [_log()] starting thread (client mode): 0xb1785870
2025-12-31T22:19:41.445 [DEBUG] [Thread-135650] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:19:41.459 [DEBUG] [Thread-135650] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T22:19:41.459 [INFO] [Thread-135650] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T22:19:41.467 [DEBUG] [Thread-135650] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:19:41.467 [DEBUG] [Thread-135650] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T22:19:41.467 [DEBUG] [Thread-135650] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:19:41.467 [DEBUG] [Thread-135650] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:19:41.467 [DEBUG] [Thread-135650] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:19:41.467 [DEBUG] [Thread-135650] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:19:41.467 [DEBUG] [Thread-135650] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:19:41.467 [DEBUG] [Thread-135650] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:19:41.467 [DEBUG] [Thread-135650] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:19:41.467 [DEBUG] [Thread-135650] [transport.py] [_log()] client lang: <none>
2025-12-31T22:19:41.467 [DEBUG] [Thread-135650] [transport.py] [_log()] server lang: <none>
2025-12-31T22:19:41.467 [DEBUG] [Thread-135650] [transport.py] [_log()] kex follows: False
2025-12-31T22:19:41.467 [DEBUG] [Thread-135650] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:19:41.467 [DEBUG] [Thread-135650] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:19:41.468 [DEBUG] [Thread-135650] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:19:41.468 [DEBUG] [Thread-135650] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:19:41.468 [DEBUG] [Thread-135650] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:19:41.468 [DEBUG] [Thread-135650] [transport.py] [_log()] Compression: none
2025-12-31T22:19:41.468 [DEBUG] [Thread-135650] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:19:41.526 [DEBUG] [Thread-135650] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:19:41.527 [DEBUG] [Thread-135650] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:19:41.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T22:19:41.528 [DEBUG] [Thread-135650] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T22:19:41.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:19:41.582 [DEBUG] [Thread-135650] [transport.py] [_log()] userauth is OK
2025-12-31T22:19:41.583 [DEBUG] [Thread-135650] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:19:41.583 [DEBUG] [Thread-135650] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:19:41.583 [DEBUG] [Thread-135650] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T22:19:41.583 [DEBUG] [Thread-135650] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:19:41.602 [INFO] [Thread-135650] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:19:41.602 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T22:19:41.603 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:19:42.454 [DEBUG] [Thread-135650] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:19:42.454 [DEBUG] [Thread-135650] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:19:42.502 [DEBUG] [Thread-135650] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:19:42.502 [DEBUG] [Thread-135650] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:19:42.511 [DEBUG] [Thread-135650] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:19:42.521 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:19:42.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T22:19:42.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T22:19:42.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:19:42.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:19:42.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:19:42.555 [DEBUG] [Thread-135650] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:19:47.308 [DEBUG] [Thread-135652 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:19:48.007 [DEBUG] [Thread-135653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:20:03.061 [DEBUG] [Thread-135654 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:20:12.309 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:20:12.310 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:20:12.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T22:20:12.577 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T22:20:12.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T22:20:13.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 22, 20, 9), 5.08, 71.71, 0.0, 21.23, 15.82, 0, 0, 0, 2, 0, 0),)
2025-12-31T22:20:13.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 22:20:09
2025-12-31T22:20:13.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T22:20:13.564 [DEBUG] [Thread-135655] [transport.py] [_log()] starting thread (client mode): 0xb17851b0
2025-12-31T22:20:13.565 [DEBUG] [Thread-135655] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:20:13.585 [DEBUG] [Thread-135655] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T22:20:13.585 [INFO] [Thread-135655] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T22:20:13.587 [DEBUG] [Thread-135655] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:20:13.588 [DEBUG] [Thread-135655] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T22:20:13.588 [DEBUG] [Thread-135655] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:20:13.588 [DEBUG] [Thread-135655] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:20:13.588 [DEBUG] [Thread-135655] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:20:13.588 [DEBUG] [Thread-135655] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:20:13.588 [DEBUG] [Thread-135655] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:20:13.588 [DEBUG] [Thread-135655] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:20:13.588 [DEBUG] [Thread-135655] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:20:13.588 [DEBUG] [Thread-135655] [transport.py] [_log()] client lang: <none>
2025-12-31T22:20:13.588 [DEBUG] [Thread-135655] [transport.py] [_log()] server lang: <none>
2025-12-31T22:20:13.588 [DEBUG] [Thread-135655] [transport.py] [_log()] kex follows: False
2025-12-31T22:20:13.588 [DEBUG] [Thread-135655] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:20:13.588 [DEBUG] [Thread-135655] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:20:13.588 [DEBUG] [Thread-135655] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:20:13.588 [DEBUG] [Thread-135655] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:20:13.588 [DEBUG] [Thread-135655] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:20:13.588 [DEBUG] [Thread-135655] [transport.py] [_log()] Compression: none
2025-12-31T22:20:13.588 [DEBUG] [Thread-135655] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:20:13.600 [DEBUG] [Thread-135655] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:20:13.600 [DEBUG] [Thread-135655] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:20:13.601 [DEBUG] [Thread-135655] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T22:20:13.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T22:20:13.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:20:13.601 [DEBUG] [Thread-135655] [transport.py] [_log()] userauth is OK
2025-12-31T22:20:13.601 [DEBUG] [Thread-135655] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:20:13.601 [DEBUG] [Thread-135655] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:20:13.601 [DEBUG] [Thread-135655] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T22:20:13.601 [DEBUG] [Thread-135655] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:20:13.611 [INFO] [Thread-135655] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:20:13.611 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:20:18.090 [DEBUG] [Thread-135657 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:20:21.076 [DEBUG] [Thread-135655] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:20:21.077 [DEBUG] [Thread-135655] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:20:21.077 [DEBUG] [Thread-135655] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T22:20:21.118 [DEBUG] [Thread-135655] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:20:21.118 [DEBUG] [Thread-135655] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:20:21.122 [DEBUG] [Thread-135655] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:20:21.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:20:21.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T22:20:21.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T22:20:21.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T22:20:21.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:20:21.154 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T22:20:21.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:20:21.155 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:20:21.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T22:20:21.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.846664 -999.00  +16.10   9.31     74  +11.50 1 2 1 1 1     0    0 4.18 -22.14 .N..W 14.9 9.3 200.3 20.8 17.1 -16.2 17.0 -15.1 16.7 -15.6 17.0 -16.9
2025-12-31T22:20:21.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T22:20:21.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T22:20:21.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.846664
2025-12-31T22:20:21.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T22:20:21.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T22:20:21.157 [DEBUG] [Thread-135655] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:20:21.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T22:20:21.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T22:20:21.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T22:20:21.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T22:20:09', tmtdew=5.08, humidity=71.71, cloud=0.0, wind=21.23, temperature=15.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T22:20:09', seeing=1.62, atlas_timestamp='2025-12-31T20:19:11.770', atlas_cloud=2, atlas_rain=1, zp_data=[0.2602499999999992, 0.44475000000000087, 0.7302500000000007, 0.22100000000000009, 0.665, 0.8302500000000013, 0.5669999999999993, 0.4302500000000009, 0.39949999999999974, 0.4095000000000013, 0.8602499999999988, 0.41999999999999993, 0.3490000000000002, 0.4262499999999996, 0.5399999999999991, 0.019000000000000128, 0.8522499999999997, 0.4294999999999991, 0.9249999999999989, 0.5342499999999992, 0.34750000000000014, 0.24074999999999847, -0.13574999999999982, -0.4472499999999986, 0.6789999999999994, nan, 1.1087499999999997, -0.8900000000000006, 0.2450000000000001, -0.4939999999999998, -1.2979999999999983, -1.4959999999999987, -0.4202500000000011], zp_timestamp='2025-12-31T20:15:00')
2025-12-31T22:20:21.242 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T22:20:21.258 [DEBUG] [Thread-135659] [transport.py] [_log()] starting thread (client mode): 0xb1784580
2025-12-31T22:20:21.258 [DEBUG] [Thread-135659] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:20:21.274 [DEBUG] [Thread-135659] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T22:20:21.274 [INFO] [Thread-135659] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T22:20:21.282 [DEBUG] [Thread-135659] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:20:21.282 [DEBUG] [Thread-135659] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T22:20:21.282 [DEBUG] [Thread-135659] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:20:21.282 [DEBUG] [Thread-135659] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:20:21.283 [DEBUG] [Thread-135659] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:20:21.283 [DEBUG] [Thread-135659] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:20:21.283 [DEBUG] [Thread-135659] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:20:21.283 [DEBUG] [Thread-135659] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:20:21.283 [DEBUG] [Thread-135659] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:20:21.283 [DEBUG] [Thread-135659] [transport.py] [_log()] client lang: <none>
2025-12-31T22:20:21.283 [DEBUG] [Thread-135659] [transport.py] [_log()] server lang: <none>
2025-12-31T22:20:21.283 [DEBUG] [Thread-135659] [transport.py] [_log()] kex follows: False
2025-12-31T22:20:21.283 [DEBUG] [Thread-135659] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:20:21.283 [DEBUG] [Thread-135659] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:20:21.283 [DEBUG] [Thread-135659] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:20:21.283 [DEBUG] [Thread-135659] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:20:21.283 [DEBUG] [Thread-135659] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:20:21.283 [DEBUG] [Thread-135659] [transport.py] [_log()] Compression: none
2025-12-31T22:20:21.283 [DEBUG] [Thread-135659] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:20:21.342 [DEBUG] [Thread-135659] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:20:21.343 [DEBUG] [Thread-135659] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:20:21.344 [DEBUG] [Thread-135659] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T22:20:21.344 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T22:20:21.345 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:20:21.402 [DEBUG] [Thread-135659] [transport.py] [_log()] userauth is OK
2025-12-31T22:20:21.402 [DEBUG] [Thread-135659] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:20:21.402 [DEBUG] [Thread-135659] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:20:21.403 [DEBUG] [Thread-135659] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T22:20:21.403 [DEBUG] [Thread-135659] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:20:21.422 [INFO] [Thread-135659] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:20:21.422 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T22:20:21.423 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:20:22.269 [DEBUG] [Thread-135659] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:20:22.269 [DEBUG] [Thread-135659] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:20:22.317 [DEBUG] [Thread-135659] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:20:22.317 [DEBUG] [Thread-135659] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:20:22.326 [DEBUG] [Thread-135659] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:20:22.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:20:22.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T22:20:22.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T22:20:22.355 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:20:22.355 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:20:22.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:20:22.364 [DEBUG] [Thread-135659] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:20:33.122 [DEBUG] [Thread-135661 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:20:47.364 [DEBUG] [Thread-135662 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:20:48.176 [DEBUG] [Thread-135663 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:20:52.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T22:20:52.386 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T22:20:52.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T22:20:53.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 22, 20, 41), 5.02, 71.76, 0.0, 20.06, 15.82, 0, 0, 0, 2, 0, 0),)
2025-12-31T22:20:53.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 22:20:41
2025-12-31T22:20:53.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T22:20:53.436 [DEBUG] [Thread-135664] [transport.py] [_log()] starting thread (client mode): 0xb9592080
2025-12-31T22:20:53.436 [DEBUG] [Thread-135664] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:20:53.457 [DEBUG] [Thread-135664] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T22:20:53.457 [INFO] [Thread-135664] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T22:20:53.460 [DEBUG] [Thread-135664] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:20:53.460 [DEBUG] [Thread-135664] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T22:20:53.460 [DEBUG] [Thread-135664] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:20:53.460 [DEBUG] [Thread-135664] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:20:53.460 [DEBUG] [Thread-135664] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:20:53.460 [DEBUG] [Thread-135664] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:20:53.460 [DEBUG] [Thread-135664] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:20:53.460 [DEBUG] [Thread-135664] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:20:53.460 [DEBUG] [Thread-135664] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:20:53.460 [DEBUG] [Thread-135664] [transport.py] [_log()] client lang: <none>
2025-12-31T22:20:53.460 [DEBUG] [Thread-135664] [transport.py] [_log()] server lang: <none>
2025-12-31T22:20:53.461 [DEBUG] [Thread-135664] [transport.py] [_log()] kex follows: False
2025-12-31T22:20:53.461 [DEBUG] [Thread-135664] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:20:53.461 [DEBUG] [Thread-135664] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:20:53.461 [DEBUG] [Thread-135664] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:20:53.461 [DEBUG] [Thread-135664] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:20:53.461 [DEBUG] [Thread-135664] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:20:53.461 [DEBUG] [Thread-135664] [transport.py] [_log()] Compression: none
2025-12-31T22:20:53.461 [DEBUG] [Thread-135664] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:20:53.476 [DEBUG] [Thread-135664] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:20:53.476 [DEBUG] [Thread-135664] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:20:53.476 [DEBUG] [Thread-135664] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T22:20:53.476 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T22:20:53.477 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:20:53.477 [DEBUG] [Thread-135664] [transport.py] [_log()] userauth is OK
2025-12-31T22:20:53.477 [DEBUG] [Thread-135664] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:20:53.477 [DEBUG] [Thread-135664] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:20:53.477 [DEBUG] [Thread-135664] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T22:20:53.477 [DEBUG] [Thread-135664] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:20:53.489 [INFO] [Thread-135664] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:20:53.489 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:20:54.114 [DEBUG] [Thread-135664] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:20:54.114 [DEBUG] [Thread-135664] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:20:54.114 [DEBUG] [Thread-135664] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T22:20:54.156 [DEBUG] [Thread-135664] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:20:54.156 [DEBUG] [Thread-135664] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:20:54.158 [DEBUG] [Thread-135664] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:20:54.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:20:54.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T22:20:54.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T22:20:54.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T22:20:54.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:20:54.175 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T22:20:54.175 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:20:54.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:20:54.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T22:20:54.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.847359 -999.00  +16.00  15.53     74  +11.50 1 2 1 1 1     0    0 4.32 -22.20 Z...W 12.1 15.5 205.2 20.4 17.1 -15.9 16.9 -14.5 16.7 -15.1 17.0 -16.6
2025-12-31T22:20:54.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T22:20:54.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T22:20:54.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.847359
2025-12-31T22:20:54.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T22:20:54.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T22:20:54.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T22:20:54.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T22:20:54.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T22:20:54.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T22:20:41', tmtdew=5.02, humidity=71.76, cloud=0.0, wind=20.06, temperature=15.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T22:20:41', seeing=1.62, atlas_timestamp='2025-12-31T20:20:11.818', atlas_cloud=2, atlas_rain=1, zp_data=[0.2602499999999992, 0.44475000000000087, 0.7302500000000007, 0.22100000000000009, 0.665, 0.8302500000000013, 0.5669999999999993, 0.4302500000000009, 0.39949999999999974, 0.4095000000000013, 0.8602499999999988, 0.41999999999999993, 0.3490000000000002, 0.4262499999999996, 0.5399999999999991, 0.019000000000000128, 0.8522499999999997, 0.4294999999999991, 0.9249999999999989, 0.5342499999999992, 0.34750000000000014, 0.24074999999999847, -0.13574999999999982, -0.4472499999999986, 0.6789999999999994, nan, 1.1087499999999997, -0.8900000000000006, 0.2450000000000001, -0.4939999999999998, -1.2979999999999983, -1.4959999999999987, -0.4202500000000011], zp_timestamp='2025-12-31T20:15:00')
2025-12-31T22:20:54.176 [DEBUG] [Thread-135664] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:20:54.250 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T22:20:54.260 [DEBUG] [Thread-135667] [transport.py] [_log()] starting thread (client mode): 0xb17587c0
2025-12-31T22:20:54.261 [DEBUG] [Thread-135667] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:20:54.275 [DEBUG] [Thread-135667] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T22:20:54.275 [INFO] [Thread-135667] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T22:20:54.283 [DEBUG] [Thread-135667] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:20:54.283 [DEBUG] [Thread-135667] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T22:20:54.283 [DEBUG] [Thread-135667] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:20:54.283 [DEBUG] [Thread-135667] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:20:54.283 [DEBUG] [Thread-135667] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:20:54.283 [DEBUG] [Thread-135667] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:20:54.283 [DEBUG] [Thread-135667] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:20:54.283 [DEBUG] [Thread-135667] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:20:54.283 [DEBUG] [Thread-135667] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:20:54.283 [DEBUG] [Thread-135667] [transport.py] [_log()] client lang: <none>
2025-12-31T22:20:54.283 [DEBUG] [Thread-135667] [transport.py] [_log()] server lang: <none>
2025-12-31T22:20:54.283 [DEBUG] [Thread-135667] [transport.py] [_log()] kex follows: False
2025-12-31T22:20:54.283 [DEBUG] [Thread-135667] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:20:54.283 [DEBUG] [Thread-135667] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:20:54.283 [DEBUG] [Thread-135667] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:20:54.283 [DEBUG] [Thread-135667] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:20:54.283 [DEBUG] [Thread-135667] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:20:54.283 [DEBUG] [Thread-135667] [transport.py] [_log()] Compression: none
2025-12-31T22:20:54.283 [DEBUG] [Thread-135667] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:20:54.341 [DEBUG] [Thread-135667] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:20:54.341 [DEBUG] [Thread-135667] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:20:54.341 [DEBUG] [Thread-135667] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T22:20:54.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T22:20:54.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:20:54.397 [DEBUG] [Thread-135667] [transport.py] [_log()] userauth is OK
2025-12-31T22:20:54.398 [DEBUG] [Thread-135667] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:20:54.398 [DEBUG] [Thread-135667] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:20:54.398 [DEBUG] [Thread-135667] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T22:20:54.398 [DEBUG] [Thread-135667] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:20:54.415 [INFO] [Thread-135667] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:20:54.415 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T22:20:54.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:20:55.235 [DEBUG] [Thread-135667] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:20:55.235 [DEBUG] [Thread-135667] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:20:55.282 [DEBUG] [Thread-135667] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:20:55.282 [DEBUG] [Thread-135667] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:20:55.291 [DEBUG] [Thread-135667] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:20:55.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:20:55.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T22:20:55.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T22:20:55.314 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:20:55.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:20:55.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:20:55.322 [DEBUG] [Thread-135667] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:21:03.209 [DEBUG] [Thread-135669 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:21:12.509 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:21:12.510 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:21:18.264 [DEBUG] [Thread-135670 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:21:25.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T22:21:25.345 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T22:21:25.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T22:21:26.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 22, 21, 13), 5.02, 71.72, 0.0, 21.01, 15.81, 0, 0, 0, 2, 0, 0),)
2025-12-31T22:21:26.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 22:21:13
2025-12-31T22:21:26.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T22:21:26.334 [DEBUG] [Thread-135671] [transport.py] [_log()] starting thread (client mode): 0xb9590550
2025-12-31T22:21:26.334 [DEBUG] [Thread-135671] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:21:26.354 [DEBUG] [Thread-135671] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T22:21:26.354 [INFO] [Thread-135671] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T22:21:26.357 [DEBUG] [Thread-135671] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:21:26.358 [DEBUG] [Thread-135671] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T22:21:26.358 [DEBUG] [Thread-135671] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:21:26.358 [DEBUG] [Thread-135671] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:21:26.358 [DEBUG] [Thread-135671] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:21:26.358 [DEBUG] [Thread-135671] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:21:26.358 [DEBUG] [Thread-135671] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:21:26.358 [DEBUG] [Thread-135671] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:21:26.358 [DEBUG] [Thread-135671] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:21:26.358 [DEBUG] [Thread-135671] [transport.py] [_log()] client lang: <none>
2025-12-31T22:21:26.358 [DEBUG] [Thread-135671] [transport.py] [_log()] server lang: <none>
2025-12-31T22:21:26.358 [DEBUG] [Thread-135671] [transport.py] [_log()] kex follows: False
2025-12-31T22:21:26.358 [DEBUG] [Thread-135671] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:21:26.358 [DEBUG] [Thread-135671] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:21:26.358 [DEBUG] [Thread-135671] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:21:26.358 [DEBUG] [Thread-135671] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:21:26.358 [DEBUG] [Thread-135671] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:21:26.358 [DEBUG] [Thread-135671] [transport.py] [_log()] Compression: none
2025-12-31T22:21:26.358 [DEBUG] [Thread-135671] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:21:26.375 [DEBUG] [Thread-135671] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:21:26.375 [DEBUG] [Thread-135671] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:21:26.376 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T22:21:26.376 [DEBUG] [Thread-135671] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T22:21:26.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:21:26.378 [DEBUG] [Thread-135671] [transport.py] [_log()] userauth is OK
2025-12-31T22:21:26.378 [DEBUG] [Thread-135671] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:21:26.379 [DEBUG] [Thread-135671] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:21:26.379 [DEBUG] [Thread-135671] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T22:21:26.379 [DEBUG] [Thread-135671] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:21:26.400 [INFO] [Thread-135671] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:21:26.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:21:27.165 [DEBUG] [Thread-135671] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:21:27.165 [DEBUG] [Thread-135671] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:21:27.166 [DEBUG] [Thread-135671] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T22:21:27.206 [DEBUG] [Thread-135671] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:21:27.206 [DEBUG] [Thread-135671] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:21:27.210 [DEBUG] [Thread-135671] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:21:27.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:21:27.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T22:21:27.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T22:21:27.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T22:21:27.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:21:27.234 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T22:21:27.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:21:27.234 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:21:27.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T22:21:27.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.847706 -999.00  +16.00  17.06     74  +11.50 1 2 1 1 1     0    0 4.17 -23.81 .N..W 15.1 17.1 208.8 21.1 17.1 -15.5 16.9 -14.4 16.7 -14.9 17.0 -16.1
2025-12-31T22:21:27.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T22:21:27.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T22:21:27.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.847706
2025-12-31T22:21:27.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T22:21:27.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T22:21:27.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T22:21:27.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T22:21:27.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T22:21:27.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T22:21:13', tmtdew=5.02, humidity=71.72, cloud=0.0, wind=21.01, temperature=15.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T22:21:13', seeing=1.62, atlas_timestamp='2025-12-31T20:20:41.798', atlas_cloud=2, atlas_rain=1, zp_data=[0.2602499999999992, 0.44475000000000087, 0.7302500000000007, 0.22100000000000009, 0.665, 0.8302500000000013, 0.5669999999999993, 0.4302500000000009, 0.39949999999999974, 0.4095000000000013, 0.8602499999999988, 0.41999999999999993, 0.3490000000000002, 0.4262499999999996, 0.5399999999999991, 0.019000000000000128, 0.8522499999999997, 0.4294999999999991, 0.9249999999999989, 0.5342499999999992, 0.34750000000000014, 0.24074999999999847, -0.13574999999999982, -0.4472499999999986, 0.6789999999999994, nan, 1.1087499999999997, -0.8900000000000006, 0.2450000000000001, -0.4939999999999998, -1.2979999999999983, -1.4959999999999987, -0.4202500000000011], zp_timestamp='2025-12-31T20:15:00')
2025-12-31T22:21:27.237 [DEBUG] [Thread-135671] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:21:27.324 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T22:21:27.335 [DEBUG] [Thread-135674] [transport.py] [_log()] starting thread (client mode): 0xb9591480
2025-12-31T22:21:27.335 [DEBUG] [Thread-135674] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:21:27.350 [DEBUG] [Thread-135674] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T22:21:27.350 [INFO] [Thread-135674] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T22:21:27.357 [DEBUG] [Thread-135674] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:21:27.358 [DEBUG] [Thread-135674] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T22:21:27.358 [DEBUG] [Thread-135674] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:21:27.358 [DEBUG] [Thread-135674] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:21:27.358 [DEBUG] [Thread-135674] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:21:27.358 [DEBUG] [Thread-135674] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:21:27.358 [DEBUG] [Thread-135674] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:21:27.358 [DEBUG] [Thread-135674] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:21:27.358 [DEBUG] [Thread-135674] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:21:27.358 [DEBUG] [Thread-135674] [transport.py] [_log()] client lang: <none>
2025-12-31T22:21:27.358 [DEBUG] [Thread-135674] [transport.py] [_log()] server lang: <none>
2025-12-31T22:21:27.358 [DEBUG] [Thread-135674] [transport.py] [_log()] kex follows: False
2025-12-31T22:21:27.358 [DEBUG] [Thread-135674] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:21:27.358 [DEBUG] [Thread-135674] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:21:27.358 [DEBUG] [Thread-135674] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:21:27.358 [DEBUG] [Thread-135674] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:21:27.358 [DEBUG] [Thread-135674] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:21:27.358 [DEBUG] [Thread-135674] [transport.py] [_log()] Compression: none
2025-12-31T22:21:27.358 [DEBUG] [Thread-135674] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:21:27.413 [DEBUG] [Thread-135674] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:21:27.414 [DEBUG] [Thread-135674] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:21:27.414 [DEBUG] [Thread-135674] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T22:21:27.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T22:21:27.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:21:27.470 [DEBUG] [Thread-135674] [transport.py] [_log()] userauth is OK
2025-12-31T22:21:27.470 [DEBUG] [Thread-135674] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:21:27.471 [DEBUG] [Thread-135674] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:21:27.471 [DEBUG] [Thread-135674] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T22:21:27.471 [DEBUG] [Thread-135674] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:21:27.490 [INFO] [Thread-135674] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:21:27.492 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T22:21:27.492 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:21:28.353 [DEBUG] [Thread-135674] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:21:28.353 [DEBUG] [Thread-135674] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:21:28.403 [DEBUG] [Thread-135674] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:21:28.403 [DEBUG] [Thread-135674] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:21:28.412 [DEBUG] [Thread-135674] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:21:28.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:21:28.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T22:21:28.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T22:21:28.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:21:28.443 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:21:28.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:21:28.454 [DEBUG] [Thread-135674] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:21:33.295 [DEBUG] [Thread-135676 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:21:47.416 [DEBUG] [Thread-135677 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:21:48.342 [DEBUG] [Thread-135678 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:21:58.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T22:21:58.453 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T22:21:58.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T22:21:59.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 22, 21, 45), 5.03, 71.72, 0.0, 16.41, 15.84, 0, 0, 0, 2, 0, 0),)
2025-12-31T22:21:59.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 22:21:45
2025-12-31T22:21:59.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T22:21:59.443 [DEBUG] [Thread-135679] [transport.py] [_log()] starting thread (client mode): 0xb1759240
2025-12-31T22:21:59.443 [DEBUG] [Thread-135679] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:21:59.464 [DEBUG] [Thread-135679] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T22:21:59.464 [INFO] [Thread-135679] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T22:21:59.467 [DEBUG] [Thread-135679] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:21:59.467 [DEBUG] [Thread-135679] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T22:21:59.467 [DEBUG] [Thread-135679] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:21:59.467 [DEBUG] [Thread-135679] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:21:59.467 [DEBUG] [Thread-135679] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:21:59.467 [DEBUG] [Thread-135679] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:21:59.467 [DEBUG] [Thread-135679] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:21:59.467 [DEBUG] [Thread-135679] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:21:59.467 [DEBUG] [Thread-135679] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:21:59.467 [DEBUG] [Thread-135679] [transport.py] [_log()] client lang: <none>
2025-12-31T22:21:59.467 [DEBUG] [Thread-135679] [transport.py] [_log()] server lang: <none>
2025-12-31T22:21:59.467 [DEBUG] [Thread-135679] [transport.py] [_log()] kex follows: False
2025-12-31T22:21:59.467 [DEBUG] [Thread-135679] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:21:59.467 [DEBUG] [Thread-135679] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:21:59.467 [DEBUG] [Thread-135679] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:21:59.468 [DEBUG] [Thread-135679] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:21:59.468 [DEBUG] [Thread-135679] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:21:59.468 [DEBUG] [Thread-135679] [transport.py] [_log()] Compression: none
2025-12-31T22:21:59.468 [DEBUG] [Thread-135679] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:21:59.484 [DEBUG] [Thread-135679] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:21:59.485 [DEBUG] [Thread-135679] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:21:59.485 [DEBUG] [Thread-135679] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T22:21:59.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T22:21:59.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:21:59.488 [DEBUG] [Thread-135679] [transport.py] [_log()] userauth is OK
2025-12-31T22:21:59.488 [DEBUG] [Thread-135679] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:21:59.488 [DEBUG] [Thread-135679] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:21:59.488 [DEBUG] [Thread-135679] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T22:21:59.488 [DEBUG] [Thread-135679] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:21:59.506 [INFO] [Thread-135679] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:21:59.506 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:22:00.145 [DEBUG] [Thread-135679] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:22:00.146 [DEBUG] [Thread-135679] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:22:00.146 [DEBUG] [Thread-135679] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T22:22:00.187 [DEBUG] [Thread-135679] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:22:00.187 [DEBUG] [Thread-135679] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:22:00.191 [DEBUG] [Thread-135679] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:22:00.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:22:00.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T22:22:00.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T22:22:00.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T22:22:00.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:22:00.216 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T22:22:00.217 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:22:00.217 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:22:00.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T22:22:00.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.848053 -999.00  +16.10   3.91     74  +11.50 1 2 1 1 1     0    0 4.13 -24.82 .N..W 9.7 3.9 194.7 17.7 17.1 -15.3 17.0 -14.3 16.7 -14.6 17.0 -15.9
2025-12-31T22:22:00.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T22:22:00.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T22:22:00.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.848053
2025-12-31T22:22:00.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T22:22:00.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T22:22:00.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T22:22:00.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T22:22:00.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T22:22:00.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T22:21:45', tmtdew=5.03, humidity=71.72, cloud=0.0, wind=16.41, temperature=15.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T22:21:46', seeing=1.62, atlas_timestamp='2025-12-31T20:21:11.779', atlas_cloud=2, atlas_rain=1, zp_data=[0.2602499999999992, 0.44475000000000087, 0.7302500000000007, 0.22100000000000009, 0.665, 0.8302500000000013, 0.5669999999999993, 0.4302500000000009, 0.39949999999999974, 0.4095000000000013, 0.8602499999999988, 0.41999999999999993, 0.3490000000000002, 0.4262499999999996, 0.5399999999999991, 0.019000000000000128, 0.8522499999999997, 0.4294999999999991, 0.9249999999999989, 0.5342499999999992, 0.34750000000000014, 0.24074999999999847, -0.13574999999999982, -0.4472499999999986, 0.6789999999999994, nan, 1.1087499999999997, -0.8900000000000006, 0.2450000000000001, -0.4939999999999998, -1.2979999999999983, -1.4959999999999987, -0.4202500000000011], zp_timestamp='2025-12-31T20:15:00')
2025-12-31T22:22:00.219 [DEBUG] [Thread-135679] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:22:00.302 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T22:22:00.315 [DEBUG] [Thread-135682] [transport.py] [_log()] starting thread (client mode): 0xb17671f0
2025-12-31T22:22:00.315 [DEBUG] [Thread-135682] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:22:00.330 [DEBUG] [Thread-135682] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T22:22:00.330 [INFO] [Thread-135682] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T22:22:00.338 [DEBUG] [Thread-135682] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:22:00.338 [DEBUG] [Thread-135682] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T22:22:00.338 [DEBUG] [Thread-135682] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:22:00.338 [DEBUG] [Thread-135682] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:22:00.339 [DEBUG] [Thread-135682] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:22:00.339 [DEBUG] [Thread-135682] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:22:00.339 [DEBUG] [Thread-135682] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:22:00.339 [DEBUG] [Thread-135682] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:22:00.339 [DEBUG] [Thread-135682] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:22:00.339 [DEBUG] [Thread-135682] [transport.py] [_log()] client lang: <none>
2025-12-31T22:22:00.339 [DEBUG] [Thread-135682] [transport.py] [_log()] server lang: <none>
2025-12-31T22:22:00.339 [DEBUG] [Thread-135682] [transport.py] [_log()] kex follows: False
2025-12-31T22:22:00.339 [DEBUG] [Thread-135682] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:22:00.340 [DEBUG] [Thread-135682] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:22:00.340 [DEBUG] [Thread-135682] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:22:00.340 [DEBUG] [Thread-135682] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:22:00.340 [DEBUG] [Thread-135682] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:22:00.340 [DEBUG] [Thread-135682] [transport.py] [_log()] Compression: none
2025-12-31T22:22:00.340 [DEBUG] [Thread-135682] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:22:00.399 [DEBUG] [Thread-135682] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:22:00.400 [DEBUG] [Thread-135682] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:22:00.401 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T22:22:00.402 [DEBUG] [Thread-135682] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T22:22:00.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:22:00.458 [DEBUG] [Thread-135682] [transport.py] [_log()] userauth is OK
2025-12-31T22:22:00.459 [DEBUG] [Thread-135682] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:22:00.459 [DEBUG] [Thread-135682] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:22:00.460 [DEBUG] [Thread-135682] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T22:22:00.460 [DEBUG] [Thread-135682] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:22:00.480 [INFO] [Thread-135682] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:22:00.480 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T22:22:00.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:22:01.356 [DEBUG] [Thread-135682] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:22:01.356 [DEBUG] [Thread-135682] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:22:01.404 [DEBUG] [Thread-135682] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:22:01.404 [DEBUG] [Thread-135682] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:22:01.413 [DEBUG] [Thread-135682] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:22:01.423 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:22:01.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T22:22:01.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T22:22:01.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:22:01.442 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:22:01.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:22:01.451 [DEBUG] [Thread-135682] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:22:03.375 [DEBUG] [Thread-135684 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:22:12.709 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:22:12.710 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:22:18.423 [DEBUG] [Thread-135685 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:22:31.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T22:22:31.459 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T22:22:31.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-12-31T22:22:32.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 22, 22, 18), 5.02, 71.74, 0.0, 16.64, 15.81, 0, 0, 0, 2, 0, 0),)
2025-12-31T22:22:32.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 22:22:18
2025-12-31T22:22:32.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T22:22:32.431 [DEBUG] [Thread-135686] [transport.py] [_log()] starting thread (client mode): 0xb6bbafb0
2025-12-31T22:22:32.431 [DEBUG] [Thread-135686] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:22:32.451 [DEBUG] [Thread-135686] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T22:22:32.451 [INFO] [Thread-135686] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T22:22:32.453 [DEBUG] [Thread-135686] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:22:32.453 [DEBUG] [Thread-135686] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T22:22:32.453 [DEBUG] [Thread-135686] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:22:32.453 [DEBUG] [Thread-135686] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:22:32.453 [DEBUG] [Thread-135686] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:22:32.453 [DEBUG] [Thread-135686] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:22:32.453 [DEBUG] [Thread-135686] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:22:32.453 [DEBUG] [Thread-135686] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:22:32.454 [DEBUG] [Thread-135686] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:22:32.454 [DEBUG] [Thread-135686] [transport.py] [_log()] client lang: <none>
2025-12-31T22:22:32.454 [DEBUG] [Thread-135686] [transport.py] [_log()] server lang: <none>
2025-12-31T22:22:32.454 [DEBUG] [Thread-135686] [transport.py] [_log()] kex follows: False
2025-12-31T22:22:32.454 [DEBUG] [Thread-135686] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:22:32.454 [DEBUG] [Thread-135686] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:22:32.454 [DEBUG] [Thread-135686] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:22:32.454 [DEBUG] [Thread-135686] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:22:32.454 [DEBUG] [Thread-135686] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:22:32.454 [DEBUG] [Thread-135686] [transport.py] [_log()] Compression: none
2025-12-31T22:22:32.454 [DEBUG] [Thread-135686] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:22:32.471 [DEBUG] [Thread-135686] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:22:32.471 [DEBUG] [Thread-135686] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:22:32.471 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T22:22:32.472 [DEBUG] [Thread-135686] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T22:22:32.472 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:22:32.473 [DEBUG] [Thread-135686] [transport.py] [_log()] userauth is OK
2025-12-31T22:22:32.473 [DEBUG] [Thread-135686] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:22:32.473 [DEBUG] [Thread-135686] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:22:32.473 [DEBUG] [Thread-135686] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T22:22:32.473 [DEBUG] [Thread-135686] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:22:32.490 [INFO] [Thread-135686] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:22:32.491 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:22:33.295 [DEBUG] [Thread-135686] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:22:33.295 [DEBUG] [Thread-135686] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:22:33.296 [DEBUG] [Thread-135686] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T22:22:33.336 [DEBUG] [Thread-135686] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:22:33.336 [DEBUG] [Thread-135686] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:22:33.339 [DEBUG] [Thread-135686] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:22:33.350 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:22:33.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T22:22:33.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T22:22:33.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T22:22:33.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:22:33.361 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T22:22:33.361 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:22:33.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:22:33.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T22:22:33.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.848400 -999.00  +16.10  10.71     74  +11.50 1 2 1 1 1     0    0 4.26 -23.99 .N..W 9.3 10.7 183.0 18.4 17.1 -14.9 16.9 -13.7 16.8 -14.1 17.0 -15.4
2025-12-31T22:22:33.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T22:22:33.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T22:22:33.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.848400
2025-12-31T22:22:33.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T22:22:33.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T22:22:33.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T22:22:33.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T22:22:33.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T22:22:33.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T22:22:18', tmtdew=5.02, humidity=71.74, cloud=0.0, wind=16.64, temperature=15.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T22:22:18', seeing=1.62, atlas_timestamp='2025-12-31T20:21:41.760', atlas_cloud=2, atlas_rain=1, zp_data=[0.2602499999999992, 0.44475000000000087, 0.7302500000000007, 0.22100000000000009, 0.665, 0.8302500000000013, 0.5669999999999993, 0.4302500000000009, 0.39949999999999974, 0.4095000000000013, 0.8602499999999988, 0.41999999999999993, 0.3490000000000002, 0.4262499999999996, 0.5399999999999991, 0.019000000000000128, 0.8522499999999997, 0.4294999999999991, 0.9249999999999989, 0.5342499999999992, 0.34750000000000014, 0.24074999999999847, -0.13574999999999982, -0.4472499999999986, 0.6789999999999994, nan, 1.1087499999999997, -0.8900000000000006, 0.2450000000000001, -0.4939999999999998, -1.2979999999999983, -1.4959999999999987, -0.4202500000000011], zp_timestamp='2025-12-31T20:15:00')
2025-12-31T22:22:33.364 [DEBUG] [Thread-135686] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:22:33.452 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T22:22:33.453 [DEBUG] [Thread-135689 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:22:33.463 [DEBUG] [Thread-135690] [transport.py] [_log()] starting thread (client mode): 0xb1784340
2025-12-31T22:22:33.463 [DEBUG] [Thread-135690] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:22:33.477 [DEBUG] [Thread-135690] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T22:22:33.477 [INFO] [Thread-135690] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T22:22:33.485 [DEBUG] [Thread-135690] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:22:33.485 [DEBUG] [Thread-135690] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T22:22:33.485 [DEBUG] [Thread-135690] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:22:33.485 [DEBUG] [Thread-135690] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:22:33.485 [DEBUG] [Thread-135690] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:22:33.485 [DEBUG] [Thread-135690] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:22:33.485 [DEBUG] [Thread-135690] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:22:33.485 [DEBUG] [Thread-135690] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:22:33.485 [DEBUG] [Thread-135690] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:22:33.485 [DEBUG] [Thread-135690] [transport.py] [_log()] client lang: <none>
2025-12-31T22:22:33.485 [DEBUG] [Thread-135690] [transport.py] [_log()] server lang: <none>
2025-12-31T22:22:33.485 [DEBUG] [Thread-135690] [transport.py] [_log()] kex follows: False
2025-12-31T22:22:33.485 [DEBUG] [Thread-135690] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:22:33.485 [DEBUG] [Thread-135690] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:22:33.485 [DEBUG] [Thread-135690] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:22:33.485 [DEBUG] [Thread-135690] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:22:33.486 [DEBUG] [Thread-135690] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:22:33.486 [DEBUG] [Thread-135690] [transport.py] [_log()] Compression: none
2025-12-31T22:22:33.486 [DEBUG] [Thread-135690] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:22:33.541 [DEBUG] [Thread-135690] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:22:33.541 [DEBUG] [Thread-135690] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:22:33.542 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T22:22:33.542 [DEBUG] [Thread-135690] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T22:22:33.543 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:22:33.597 [DEBUG] [Thread-135690] [transport.py] [_log()] userauth is OK
2025-12-31T22:22:33.598 [DEBUG] [Thread-135690] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:22:33.598 [DEBUG] [Thread-135690] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:22:33.598 [DEBUG] [Thread-135690] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T22:22:33.598 [DEBUG] [Thread-135690] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:22:33.619 [INFO] [Thread-135690] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:22:33.620 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T22:22:33.622 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:22:34.442 [DEBUG] [Thread-135690] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:22:34.443 [DEBUG] [Thread-135690] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:22:34.490 [DEBUG] [Thread-135690] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:22:34.491 [DEBUG] [Thread-135690] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:22:34.499 [DEBUG] [Thread-135690] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:22:34.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:22:34.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T22:22:34.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T22:22:34.525 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:22:34.525 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:22:34.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:22:34.533 [DEBUG] [Thread-135690] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:22:47.490 [DEBUG] [Thread-135692 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:22:48.494 [DEBUG] [Thread-135693 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:23:03.526 [DEBUG] [Thread-135694 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:23:04.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T22:23:04.533 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T22:23: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-12-31T22:23:05.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 22, 22, 50), 5.07, 71.76, 0.0, 19.52, 15.87, 0, 0, 0, 2, 0, 0),)
2025-12-31T22:23:05.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 22:22:50
2025-12-31T22:23:05.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T22:23:05.538 [DEBUG] [Thread-135695] [transport.py] [_log()] starting thread (client mode): 0xb6bbb730
2025-12-31T22:23:05.538 [DEBUG] [Thread-135695] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:23:05.559 [DEBUG] [Thread-135695] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T22:23:05.560 [INFO] [Thread-135695] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T22:23:05.561 [DEBUG] [Thread-135695] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:23:05.561 [DEBUG] [Thread-135695] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T22:23:05.561 [DEBUG] [Thread-135695] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:23:05.561 [DEBUG] [Thread-135695] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:23:05.561 [DEBUG] [Thread-135695] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:23:05.561 [DEBUG] [Thread-135695] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:23:05.561 [DEBUG] [Thread-135695] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:23:05.561 [DEBUG] [Thread-135695] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:23:05.561 [DEBUG] [Thread-135695] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:23:05.561 [DEBUG] [Thread-135695] [transport.py] [_log()] client lang: <none>
2025-12-31T22:23:05.562 [DEBUG] [Thread-135695] [transport.py] [_log()] server lang: <none>
2025-12-31T22:23:05.562 [DEBUG] [Thread-135695] [transport.py] [_log()] kex follows: False
2025-12-31T22:23:05.562 [DEBUG] [Thread-135695] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:23:05.562 [DEBUG] [Thread-135695] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:23:05.562 [DEBUG] [Thread-135695] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:23:05.562 [DEBUG] [Thread-135695] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:23:05.562 [DEBUG] [Thread-135695] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:23:05.562 [DEBUG] [Thread-135695] [transport.py] [_log()] Compression: none
2025-12-31T22:23:05.562 [DEBUG] [Thread-135695] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:23:05.574 [DEBUG] [Thread-135695] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:23:05.575 [DEBUG] [Thread-135695] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:23:05.575 [DEBUG] [Thread-135695] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T22:23:05.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T22:23:05.576 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:23:05.576 [DEBUG] [Thread-135695] [transport.py] [_log()] userauth is OK
2025-12-31T22:23:05.577 [DEBUG] [Thread-135695] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:23:05.577 [DEBUG] [Thread-135695] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:23:05.577 [DEBUG] [Thread-135695] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T22:23:05.577 [DEBUG] [Thread-135695] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:23:05.594 [INFO] [Thread-135695] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:23:05.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:23:06.181 [DEBUG] [Thread-135695] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:23:06.182 [DEBUG] [Thread-135695] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:23:06.182 [DEBUG] [Thread-135695] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T22:23:06.222 [DEBUG] [Thread-135695] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:23:06.222 [DEBUG] [Thread-135695] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:23:06.225 [DEBUG] [Thread-135695] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:23:06.239 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:23:06.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T22:23:06.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T22:23:06.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T22:23:06.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:23:06.251 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T22:23:06.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:23:06.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:23:06.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T22:23:06.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.848748 -999.00  +16.10  19.67     74  +11.50 1 2 1 1 1     0    0 4.14 -23.28 .N... 15.2 19.7 207.4 22.8 17.1 -14.6 16.9 -13.4 16.8 -13.8 17.0 -15.0
2025-12-31T22:23:06.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T22:23:06.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T22:23:06.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.848748
2025-12-31T22:23:06.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T22:23:06.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T22:23:06.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T22:23:06.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T22:23:06.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T22:23:06.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T22:22:50', tmtdew=5.07, humidity=71.76, cloud=0.0, wind=19.52, temperature=15.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T22:22:50', seeing=1.62, atlas_timestamp='2025-12-31T20:22:11.827', atlas_cloud=2, atlas_rain=1, zp_data=[0.2602499999999992, 0.44475000000000087, 0.7302500000000007, 0.22100000000000009, 0.665, 0.8302500000000013, 0.5669999999999993, 0.4302500000000009, 0.39949999999999974, 0.4095000000000013, 0.8602499999999988, 0.41999999999999993, 0.3490000000000002, 0.4262499999999996, 0.5399999999999991, 0.019000000000000128, 0.8522499999999997, 0.4294999999999991, 0.9249999999999989, 0.5342499999999992, 0.34750000000000014, 0.24074999999999847, -0.13574999999999982, -0.4472499999999986, 0.6789999999999994, nan, 1.1087499999999997, -0.8900000000000006, 0.2450000000000001, -0.4939999999999998, -1.2979999999999983, -1.4959999999999987, -0.4202500000000011], zp_timestamp='2025-12-31T20:15:00')
2025-12-31T22:23:06.253 [DEBUG] [Thread-135695] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:23:06.336 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T22:23:06.349 [DEBUG] [Thread-135698] [transport.py] [_log()] starting thread (client mode): 0xb9592950
2025-12-31T22:23:06.349 [DEBUG] [Thread-135698] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:23:06.364 [DEBUG] [Thread-135698] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T22:23:06.364 [INFO] [Thread-135698] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T22:23:06.371 [DEBUG] [Thread-135698] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:23:06.372 [DEBUG] [Thread-135698] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T22:23:06.372 [DEBUG] [Thread-135698] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:23:06.372 [DEBUG] [Thread-135698] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:23:06.372 [DEBUG] [Thread-135698] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:23:06.372 [DEBUG] [Thread-135698] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:23:06.372 [DEBUG] [Thread-135698] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:23:06.372 [DEBUG] [Thread-135698] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:23:06.373 [DEBUG] [Thread-135698] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:23:06.373 [DEBUG] [Thread-135698] [transport.py] [_log()] client lang: <none>
2025-12-31T22:23:06.373 [DEBUG] [Thread-135698] [transport.py] [_log()] server lang: <none>
2025-12-31T22:23:06.373 [DEBUG] [Thread-135698] [transport.py] [_log()] kex follows: False
2025-12-31T22:23:06.373 [DEBUG] [Thread-135698] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:23:06.373 [DEBUG] [Thread-135698] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:23:06.373 [DEBUG] [Thread-135698] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:23:06.373 [DEBUG] [Thread-135698] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:23:06.373 [DEBUG] [Thread-135698] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:23:06.373 [DEBUG] [Thread-135698] [transport.py] [_log()] Compression: none
2025-12-31T22:23:06.373 [DEBUG] [Thread-135698] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:23:06.430 [DEBUG] [Thread-135698] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:23:06.431 [DEBUG] [Thread-135698] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:23:06.431 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T22:23:06.432 [DEBUG] [Thread-135698] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T22:23:06.433 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:23:06.486 [DEBUG] [Thread-135698] [transport.py] [_log()] userauth is OK
2025-12-31T22:23:06.486 [DEBUG] [Thread-135698] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:23:06.487 [DEBUG] [Thread-135698] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:23:06.487 [DEBUG] [Thread-135698] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T22:23:06.487 [DEBUG] [Thread-135698] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:23:06.506 [INFO] [Thread-135698] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:23:06.506 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T22:23:06.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:23:07.361 [DEBUG] [Thread-135698] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:23:07.361 [DEBUG] [Thread-135698] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:23:07.409 [DEBUG] [Thread-135698] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:23:07.409 [DEBUG] [Thread-135698] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:23:07.428 [DEBUG] [Thread-135698] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:23:07.437 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:23:07.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T22:23:07.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T22:23:07.456 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:23:07.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:23:07.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:23:07.465 [DEBUG] [Thread-135698] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:23:12.911 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:23:12.913 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:23:18.563 [DEBUG] [Thread-135700 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:23:33.618 [DEBUG] [Thread-135701 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:23:37.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T22:23:37.484 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T22:23:37.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T22:23:38.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 22, 23, 22), 5.06, 71.77, 0.0, 17.93, 15.87, 0, 0, 0, 2, 0, 0),)
2025-12-31T22:23:38.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 22:23:22
2025-12-31T22:23:38.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T22:23:38.472 [DEBUG] [Thread-135702] [transport.py] [_log()] starting thread (client mode): 0xb95915a0
2025-12-31T22:23:38.473 [DEBUG] [Thread-135702] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:23:38.493 [DEBUG] [Thread-135702] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T22:23:38.493 [INFO] [Thread-135702] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T22:23:38.496 [DEBUG] [Thread-135702] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:23:38.496 [DEBUG] [Thread-135702] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T22:23:38.496 [DEBUG] [Thread-135702] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:23:38.496 [DEBUG] [Thread-135702] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:23:38.496 [DEBUG] [Thread-135702] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:23:38.496 [DEBUG] [Thread-135702] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:23:38.496 [DEBUG] [Thread-135702] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:23:38.496 [DEBUG] [Thread-135702] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:23:38.496 [DEBUG] [Thread-135702] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:23:38.496 [DEBUG] [Thread-135702] [transport.py] [_log()] client lang: <none>
2025-12-31T22:23:38.496 [DEBUG] [Thread-135702] [transport.py] [_log()] server lang: <none>
2025-12-31T22:23:38.496 [DEBUG] [Thread-135702] [transport.py] [_log()] kex follows: False
2025-12-31T22:23:38.496 [DEBUG] [Thread-135702] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:23:38.496 [DEBUG] [Thread-135702] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:23:38.496 [DEBUG] [Thread-135702] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:23:38.496 [DEBUG] [Thread-135702] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:23:38.496 [DEBUG] [Thread-135702] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:23:38.496 [DEBUG] [Thread-135702] [transport.py] [_log()] Compression: none
2025-12-31T22:23:38.496 [DEBUG] [Thread-135702] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:23:38.512 [DEBUG] [Thread-135702] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:23:38.513 [DEBUG] [Thread-135702] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:23:38.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T22:23:38.513 [DEBUG] [Thread-135702] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T22:23:38.514 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:23:38.515 [DEBUG] [Thread-135702] [transport.py] [_log()] userauth is OK
2025-12-31T22:23:38.515 [DEBUG] [Thread-135702] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:23:38.516 [DEBUG] [Thread-135702] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:23:38.516 [DEBUG] [Thread-135702] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T22:23:38.516 [DEBUG] [Thread-135702] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:23:38.539 [INFO] [Thread-135702] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:23:38.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:23:39.340 [DEBUG] [Thread-135702] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:23:39.340 [DEBUG] [Thread-135702] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:23:39.341 [DEBUG] [Thread-135702] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T22:23:39.381 [DEBUG] [Thread-135702] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:23:39.381 [DEBUG] [Thread-135702] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:23:39.383 [DEBUG] [Thread-135702] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:23:39.395 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:23:39.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T22:23:39.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T22:23:39.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T22:23:39.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:23:39.405 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T22:23:39.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:23:39.405 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:23:39.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T22:23:39.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.849095 -999.00  +16.00   7.32     74  +11.50 1 2 1 1 1     0    0 4.10 -25.52 ..... 10.9 7.3 208.0 18.5 17.1 -14.1 17.0 -13.0 16.8 -13.3 17.0 -14.5
2025-12-31T22:23:39.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T22:23:39.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T22:23:39.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.849095
2025-12-31T22:23:39.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T22:23:39.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T22:23:39.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T22:23:39.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T22:23:39.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T22:23:39.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T22:23:22', tmtdew=5.06, humidity=71.77, cloud=0.0, wind=17.93, temperature=15.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T22:22:50', seeing=1.62, atlas_timestamp='2025-12-31T20:22:41.808', atlas_cloud=2, atlas_rain=1, zp_data=[0.2602499999999992, 0.44475000000000087, 0.7302500000000007, 0.22100000000000009, 0.665, 0.8302500000000013, 0.5669999999999993, 0.4302500000000009, 0.39949999999999974, 0.4095000000000013, 0.8602499999999988, 0.41999999999999993, 0.3490000000000002, 0.4262499999999996, 0.5399999999999991, 0.019000000000000128, 0.8522499999999997, 0.4294999999999991, 0.9249999999999989, 0.5342499999999992, 0.34750000000000014, 0.24074999999999847, -0.13574999999999982, -0.4472499999999986, 0.6789999999999994, nan, 1.1087499999999997, -0.8900000000000006, 0.2450000000000001, -0.4939999999999998, -1.2979999999999983, -1.4959999999999987, -0.4202500000000011], zp_timestamp='2025-12-31T20:15:00')
2025-12-31T22:23:39.407 [DEBUG] [Thread-135702] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:23:39.490 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T22:23:39.501 [DEBUG] [Thread-135705] [transport.py] [_log()] starting thread (client mode): 0xb6bbb6d0
2025-12-31T22:23:39.502 [DEBUG] [Thread-135705] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:23:39.515 [DEBUG] [Thread-135705] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T22:23:39.515 [INFO] [Thread-135705] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T22:23:39.523 [DEBUG] [Thread-135705] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:23:39.523 [DEBUG] [Thread-135705] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T22:23:39.523 [DEBUG] [Thread-135705] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:23:39.523 [DEBUG] [Thread-135705] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:23:39.523 [DEBUG] [Thread-135705] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:23:39.523 [DEBUG] [Thread-135705] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:23:39.524 [DEBUG] [Thread-135705] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:23:39.524 [DEBUG] [Thread-135705] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:23:39.524 [DEBUG] [Thread-135705] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:23:39.524 [DEBUG] [Thread-135705] [transport.py] [_log()] client lang: <none>
2025-12-31T22:23:39.524 [DEBUG] [Thread-135705] [transport.py] [_log()] server lang: <none>
2025-12-31T22:23:39.524 [DEBUG] [Thread-135705] [transport.py] [_log()] kex follows: False
2025-12-31T22:23:39.524 [DEBUG] [Thread-135705] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:23:39.524 [DEBUG] [Thread-135705] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:23:39.524 [DEBUG] [Thread-135705] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:23:39.525 [DEBUG] [Thread-135705] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:23:39.525 [DEBUG] [Thread-135705] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:23:39.525 [DEBUG] [Thread-135705] [transport.py] [_log()] Compression: none
2025-12-31T22:23:39.525 [DEBUG] [Thread-135705] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:23:39.581 [DEBUG] [Thread-135705] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:23:39.581 [DEBUG] [Thread-135705] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:23:39.582 [DEBUG] [Thread-135705] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T22:23:39.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T22:23:39.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:23:39.637 [DEBUG] [Thread-135705] [transport.py] [_log()] userauth is OK
2025-12-31T22:23:39.638 [DEBUG] [Thread-135705] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:23:39.638 [DEBUG] [Thread-135705] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:23:39.638 [DEBUG] [Thread-135705] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T22:23:39.638 [DEBUG] [Thread-135705] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:23:39.656 [INFO] [Thread-135705] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:23:39.657 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T22:23:39.657 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:23:40.456 [DEBUG] [Thread-135705] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:23:40.457 [DEBUG] [Thread-135705] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:23:40.505 [DEBUG] [Thread-135705] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:23:40.505 [DEBUG] [Thread-135705] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:23:40.514 [DEBUG] [Thread-135705] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:23:40.522 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:23:40.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T22:23:40.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T22:23:40.539 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:23:40.539 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:23:40.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:23:40.547 [DEBUG] [Thread-135705] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:23:47.566 [DEBUG] [Thread-135707 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:23:48.652 [DEBUG] [Thread-135708 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:24:03.701 [DEBUG] [Thread-135709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:24:10.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T22:24:10.570 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T22:24:10.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T22:24:11.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 22, 23, 54), 5.02, 71.77, 0.0, 17.7, 15.84, 0, 0, 0, 2, 0, 0),)
2025-12-31T22:24:11.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 22:23:54
2025-12-31T22:24:11.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T22:24:11.544 [DEBUG] [Thread-135710] [transport.py] [_log()] starting thread (client mode): 0xb6bba380
2025-12-31T22:24:11.544 [DEBUG] [Thread-135710] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:24:11.562 [DEBUG] [Thread-135710] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T22:24:11.562 [INFO] [Thread-135710] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T22:24:11.564 [DEBUG] [Thread-135710] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:24:11.564 [DEBUG] [Thread-135710] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T22:24:11.564 [DEBUG] [Thread-135710] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:24:11.564 [DEBUG] [Thread-135710] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:24:11.564 [DEBUG] [Thread-135710] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:24:11.564 [DEBUG] [Thread-135710] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:24:11.564 [DEBUG] [Thread-135710] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:24:11.564 [DEBUG] [Thread-135710] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:24:11.564 [DEBUG] [Thread-135710] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:24:11.564 [DEBUG] [Thread-135710] [transport.py] [_log()] client lang: <none>
2025-12-31T22:24:11.564 [DEBUG] [Thread-135710] [transport.py] [_log()] server lang: <none>
2025-12-31T22:24:11.565 [DEBUG] [Thread-135710] [transport.py] [_log()] kex follows: False
2025-12-31T22:24:11.565 [DEBUG] [Thread-135710] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:24:11.565 [DEBUG] [Thread-135710] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:24:11.565 [DEBUG] [Thread-135710] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:24:11.565 [DEBUG] [Thread-135710] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:24:11.565 [DEBUG] [Thread-135710] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:24:11.565 [DEBUG] [Thread-135710] [transport.py] [_log()] Compression: none
2025-12-31T22:24:11.565 [DEBUG] [Thread-135710] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:24:11.580 [DEBUG] [Thread-135710] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:24:11.580 [DEBUG] [Thread-135710] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:24:11.581 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T22:24:11.581 [DEBUG] [Thread-135710] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T22:24:11.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:24:11.583 [DEBUG] [Thread-135710] [transport.py] [_log()] userauth is OK
2025-12-31T22:24:11.583 [DEBUG] [Thread-135710] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:24:11.583 [DEBUG] [Thread-135710] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:24:11.584 [DEBUG] [Thread-135710] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T22:24:11.584 [DEBUG] [Thread-135710] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:24:11.599 [INFO] [Thread-135710] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:24:11.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:24:12.256 [DEBUG] [Thread-135710] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:24:12.256 [DEBUG] [Thread-135710] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:24:12.256 [DEBUG] [Thread-135710] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T22:24:12.297 [DEBUG] [Thread-135710] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:24:12.297 [DEBUG] [Thread-135710] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:24:12.301 [DEBUG] [Thread-135710] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:24:12.314 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:24:12.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T22:24:12.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T22:24:12.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T22:24:12.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:24:12.325 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T22:24:12.326 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:24:12.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:24:12.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T22:24:12.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.849789 -999.00  +16.00  12.88     74  +11.50 1 2 1 1 1     0    0 4.22 -23.79 .N... 12.9 12.9 196.2 18.5 17.1 -13.2 17.0 -12.3 16.8 -12.5 17.0 -13.5
2025-12-31T22:24:12.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T22:24:12.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T22:24:12.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.849789
2025-12-31T22:24:12.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T22:24:12.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T22:24:12.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T22:24:12.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T22:24:12.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T22:24:12.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T22:23:54', tmtdew=5.02, humidity=71.77, cloud=0.0, wind=17.7, temperature=15.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T22:22:50', seeing=1.62, atlas_timestamp='2025-12-31T20:23:41.770', atlas_cloud=2, atlas_rain=1, zp_data=[0.2602499999999992, 0.44475000000000087, 0.7302500000000007, 0.22100000000000009, 0.665, 0.8302500000000013, 0.5669999999999993, 0.4302500000000009, 0.39949999999999974, 0.4095000000000013, 0.8602499999999988, 0.41999999999999993, 0.3490000000000002, 0.4262499999999996, 0.5399999999999991, 0.019000000000000128, 0.8522499999999997, 0.4294999999999991, 0.9249999999999989, 0.5342499999999992, 0.34750000000000014, 0.24074999999999847, -0.13574999999999982, -0.4472499999999986, 0.6789999999999994, nan, 1.1087499999999997, -0.8900000000000006, 0.2450000000000001, -0.4939999999999998, -1.2979999999999983, -1.4959999999999987, -0.4202500000000011], zp_timestamp='2025-12-31T20:15:00')
2025-12-31T22:24:12.329 [DEBUG] [Thread-135710] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:24:12.412 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T22:24:12.425 [DEBUG] [Thread-135713] [transport.py] [_log()] starting thread (client mode): 0xb6bba020
2025-12-31T22:24:12.425 [DEBUG] [Thread-135713] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:24:12.441 [DEBUG] [Thread-135713] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T22:24:12.441 [INFO] [Thread-135713] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T22:24:12.448 [DEBUG] [Thread-135713] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:24:12.449 [DEBUG] [Thread-135713] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T22:24:12.449 [DEBUG] [Thread-135713] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:24:12.449 [DEBUG] [Thread-135713] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:24:12.449 [DEBUG] [Thread-135713] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:24:12.449 [DEBUG] [Thread-135713] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:24:12.449 [DEBUG] [Thread-135713] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:24:12.449 [DEBUG] [Thread-135713] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:24:12.449 [DEBUG] [Thread-135713] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:24:12.449 [DEBUG] [Thread-135713] [transport.py] [_log()] client lang: <none>
2025-12-31T22:24:12.449 [DEBUG] [Thread-135713] [transport.py] [_log()] server lang: <none>
2025-12-31T22:24:12.449 [DEBUG] [Thread-135713] [transport.py] [_log()] kex follows: False
2025-12-31T22:24:12.449 [DEBUG] [Thread-135713] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:24:12.449 [DEBUG] [Thread-135713] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:24:12.449 [DEBUG] [Thread-135713] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:24:12.449 [DEBUG] [Thread-135713] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:24:12.449 [DEBUG] [Thread-135713] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:24:12.449 [DEBUG] [Thread-135713] [transport.py] [_log()] Compression: none
2025-12-31T22:24:12.450 [DEBUG] [Thread-135713] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:24:12.506 [DEBUG] [Thread-135713] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:24:12.506 [DEBUG] [Thread-135713] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:24:12.507 [DEBUG] [Thread-135713] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T22:24:12.507 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T22:24:12.508 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:24:12.561 [DEBUG] [Thread-135713] [transport.py] [_log()] userauth is OK
2025-12-31T22:24:12.561 [DEBUG] [Thread-135713] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:24:12.561 [DEBUG] [Thread-135713] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:24:12.561 [DEBUG] [Thread-135713] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T22:24:12.561 [DEBUG] [Thread-135713] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:24:12.576 [INFO] [Thread-135713] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:24:12.576 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T22:24:12.577 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:24:13.112 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:24:13.113 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:24:13.396 [DEBUG] [Thread-135713] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:24:13.396 [DEBUG] [Thread-135713] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:24:13.444 [DEBUG] [Thread-135713] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:24:13.444 [DEBUG] [Thread-135713] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:24:13.453 [DEBUG] [Thread-135713] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:24:13.462 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:24:13.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T22:24:13.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T22:24:13.480 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:24:13.480 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:24:13.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:24:13.488 [DEBUG] [Thread-135713] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:24:18.733 [DEBUG] [Thread-135715 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:24:33.785 [DEBUG] [Thread-135716 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:24:43.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T22:24:43.511 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T22:24:43.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-12-31T22:24:44.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 22, 24, 26), 5.01, 71.79, 0.0, 18.74, 15.76, 0, 0, 0, 2, 0, 0),)
2025-12-31T22:24:44.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 22:24:26
2025-12-31T22:24:44.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T22:24:44.553 [DEBUG] [Thread-135717] [transport.py] [_log()] starting thread (client mode): 0xb1758c40
2025-12-31T22:24:44.553 [DEBUG] [Thread-135717] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:24:44.572 [DEBUG] [Thread-135717] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T22:24:44.572 [INFO] [Thread-135717] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T22:24:44.586 [DEBUG] [Thread-135717] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:24:44.586 [DEBUG] [Thread-135717] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T22:24:44.586 [DEBUG] [Thread-135717] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:24:44.586 [DEBUG] [Thread-135717] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:24:44.586 [DEBUG] [Thread-135717] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:24:44.586 [DEBUG] [Thread-135717] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:24:44.586 [DEBUG] [Thread-135717] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:24:44.586 [DEBUG] [Thread-135717] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:24:44.586 [DEBUG] [Thread-135717] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:24:44.586 [DEBUG] [Thread-135717] [transport.py] [_log()] client lang: <none>
2025-12-31T22:24:44.586 [DEBUG] [Thread-135717] [transport.py] [_log()] server lang: <none>
2025-12-31T22:24:44.586 [DEBUG] [Thread-135717] [transport.py] [_log()] kex follows: False
2025-12-31T22:24:44.586 [DEBUG] [Thread-135717] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:24:44.586 [DEBUG] [Thread-135717] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:24:44.586 [DEBUG] [Thread-135717] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:24:44.586 [DEBUG] [Thread-135717] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:24:44.586 [DEBUG] [Thread-135717] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:24:44.586 [DEBUG] [Thread-135717] [transport.py] [_log()] Compression: none
2025-12-31T22:24:44.586 [DEBUG] [Thread-135717] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:24:44.604 [DEBUG] [Thread-135717] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:24:44.604 [DEBUG] [Thread-135717] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:24:44.604 [DEBUG] [Thread-135717] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T22:24:44.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T22:24:44.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:24:44.605 [DEBUG] [Thread-135717] [transport.py] [_log()] userauth is OK
2025-12-31T22:24:44.605 [DEBUG] [Thread-135717] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:24:44.605 [DEBUG] [Thread-135717] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:24:44.605 [DEBUG] [Thread-135717] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T22:24:44.605 [DEBUG] [Thread-135717] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:24:44.615 [INFO] [Thread-135717] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:24:44.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:24:45.438 [DEBUG] [Thread-135717] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:24:45.438 [DEBUG] [Thread-135717] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:24:45.439 [DEBUG] [Thread-135717] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T22:24:45.479 [DEBUG] [Thread-135717] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:24:45.479 [DEBUG] [Thread-135717] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:24:45.482 [DEBUG] [Thread-135717] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:24:45.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:24:45.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T22:24:45.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T22:24:45.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T22:24:45.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:24:45.499 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T22:24:45.499 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:24:45.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:24:45.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T22:24:45.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.850136 -999.00  +16.10  10.20     74  +11.50 1 2 1 1 1     0    0 4.15 -24.82 .N... 14.1 10.2 225.2 17.6 17.1 -12.8 17.0 -12.3 16.8 -12.2 17.1 -12.8
2025-12-31T22:24:45.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T22:24:45.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T22:24:45.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.850136
2025-12-31T22:24:45.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T22:24:45.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T22:24:45.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T22:24:45.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T22:24:45.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T22:24:45.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T22:24:26', tmtdew=5.01, humidity=71.79, cloud=0.0, wind=18.74, temperature=15.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T22:22:50', seeing=1.62, atlas_timestamp='2025-12-31T20:24:11.750', atlas_cloud=2, atlas_rain=1, zp_data=[0.2602499999999992, 0.44475000000000087, 0.7302500000000007, 0.22100000000000009, 0.665, 0.8302500000000013, 0.5669999999999993, 0.4302500000000009, 0.39949999999999974, 0.4095000000000013, 0.8602499999999988, 0.41999999999999993, 0.3490000000000002, 0.4262499999999996, 0.5399999999999991, 0.019000000000000128, 0.8522499999999997, 0.4294999999999991, 0.9249999999999989, 0.5342499999999992, 0.34750000000000014, 0.24074999999999847, -0.13574999999999982, -0.4472499999999986, 0.6789999999999994, nan, 1.1087499999999997, -0.8900000000000006, 0.2450000000000001, -0.4939999999999998, -1.2979999999999983, -1.4959999999999987, -0.4202500000000011], zp_timestamp='2025-12-31T20:15:00')
2025-12-31T22:24:45.500 [DEBUG] [Thread-135717] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:24:45.575 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T22:24:45.585 [DEBUG] [Thread-135720] [transport.py] [_log()] starting thread (client mode): 0xb1758ca0
2025-12-31T22:24:45.585 [DEBUG] [Thread-135720] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:24:45.599 [DEBUG] [Thread-135720] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T22:24:45.599 [INFO] [Thread-135720] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T22:24:45.606 [DEBUG] [Thread-135720] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:24:45.606 [DEBUG] [Thread-135720] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T22:24:45.606 [DEBUG] [Thread-135720] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:24:45.606 [DEBUG] [Thread-135720] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:24:45.606 [DEBUG] [Thread-135720] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:24:45.607 [DEBUG] [Thread-135720] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:24:45.607 [DEBUG] [Thread-135720] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:24:45.607 [DEBUG] [Thread-135720] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:24:45.607 [DEBUG] [Thread-135720] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:24:45.607 [DEBUG] [Thread-135720] [transport.py] [_log()] client lang: <none>
2025-12-31T22:24:45.607 [DEBUG] [Thread-135720] [transport.py] [_log()] server lang: <none>
2025-12-31T22:24:45.607 [DEBUG] [Thread-135720] [transport.py] [_log()] kex follows: False
2025-12-31T22:24:45.607 [DEBUG] [Thread-135720] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:24:45.607 [DEBUG] [Thread-135720] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:24:45.607 [DEBUG] [Thread-135720] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:24:45.607 [DEBUG] [Thread-135720] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:24:45.607 [DEBUG] [Thread-135720] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:24:45.607 [DEBUG] [Thread-135720] [transport.py] [_log()] Compression: none
2025-12-31T22:24:45.607 [DEBUG] [Thread-135720] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:24:45.664 [DEBUG] [Thread-135720] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:24:45.664 [DEBUG] [Thread-135720] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:24:45.664 [DEBUG] [Thread-135720] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T22:24:45.664 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T22:24:45.664 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:24:45.721 [DEBUG] [Thread-135720] [transport.py] [_log()] userauth is OK
2025-12-31T22:24:45.721 [DEBUG] [Thread-135720] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:24:45.721 [DEBUG] [Thread-135720] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:24:45.721 [DEBUG] [Thread-135720] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T22:24:45.721 [DEBUG] [Thread-135720] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:24:45.734 [INFO] [Thread-135720] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:24:45.735 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T22:24:45.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:24:46.599 [DEBUG] [Thread-135720] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:24:46.599 [DEBUG] [Thread-135720] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:24:46.646 [DEBUG] [Thread-135720] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:24:46.646 [DEBUG] [Thread-135720] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:24:46.654 [DEBUG] [Thread-135720] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:24:46.662 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:24: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-12-31T22:24:46.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T22:24:46.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:24:46.677 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:24:46.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:24:46.685 [DEBUG] [Thread-135720] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:24:47.641 [DEBUG] [Thread-135722 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:24:48.813 [DEBUG] [Thread-135723 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:25:03.862 [DEBUG] [Thread-135724 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:25:13.314 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:25:13.315 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:25:16.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T22:25:16.685 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T22:25:16.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T22:25:17.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 22, 24, 58), 5.0, 72.32, 0.0, 21.03, 15.81, 0, 0, 0, 2, 0, 0),)
2025-12-31T22:25:17.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 22:24:58
2025-12-31T22:25:17.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T22:25:17.689 [DEBUG] [Thread-135725] [transport.py] [_log()] starting thread (client mode): 0xb17ac190
2025-12-31T22:25:17.689 [DEBUG] [Thread-135725] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:25:17.710 [DEBUG] [Thread-135725] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T22:25:17.710 [INFO] [Thread-135725] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T22:25:17.713 [DEBUG] [Thread-135725] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:25:17.713 [DEBUG] [Thread-135725] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T22:25:17.713 [DEBUG] [Thread-135725] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:25:17.714 [DEBUG] [Thread-135725] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:25:17.714 [DEBUG] [Thread-135725] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:25:17.714 [DEBUG] [Thread-135725] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:25:17.714 [DEBUG] [Thread-135725] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:25:17.714 [DEBUG] [Thread-135725] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:25:17.714 [DEBUG] [Thread-135725] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:25:17.714 [DEBUG] [Thread-135725] [transport.py] [_log()] client lang: <none>
2025-12-31T22:25:17.714 [DEBUG] [Thread-135725] [transport.py] [_log()] server lang: <none>
2025-12-31T22:25:17.714 [DEBUG] [Thread-135725] [transport.py] [_log()] kex follows: False
2025-12-31T22:25:17.714 [DEBUG] [Thread-135725] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:25:17.714 [DEBUG] [Thread-135725] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:25:17.714 [DEBUG] [Thread-135725] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:25:17.714 [DEBUG] [Thread-135725] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:25:17.714 [DEBUG] [Thread-135725] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:25:17.714 [DEBUG] [Thread-135725] [transport.py] [_log()] Compression: none
2025-12-31T22:25:17.714 [DEBUG] [Thread-135725] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:25:17.732 [DEBUG] [Thread-135725] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:25:17.733 [DEBUG] [Thread-135725] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:25:17.733 [DEBUG] [Thread-135725] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T22:25:17.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T22:25:17.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:25:17.735 [DEBUG] [Thread-135725] [transport.py] [_log()] userauth is OK
2025-12-31T22:25:17.736 [DEBUG] [Thread-135725] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:25:17.736 [DEBUG] [Thread-135725] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:25:17.736 [DEBUG] [Thread-135725] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T22:25:17.736 [DEBUG] [Thread-135725] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:25:17.771 [INFO] [Thread-135725] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:25:17.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:25:18.897 [DEBUG] [Thread-135727 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:25:21.984 [DEBUG] [Thread-135725] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:25:21.984 [DEBUG] [Thread-135725] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:25:21.984 [DEBUG] [Thread-135725] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T22:25:22.025 [DEBUG] [Thread-135725] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:25:22.025 [DEBUG] [Thread-135725] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:25:22.028 [DEBUG] [Thread-135725] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:25:22.039 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:25:22.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T22:25:22.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T22:25:22.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T22:25:22.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:25:22.062 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T22:25:22.062 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:25:22.062 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:25:22.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T22:25:22.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.850484 -999.00  +16.00  13.87     74  +11.50 1 2 1 1 1     0    0 4.16 -25.00 ..... 10.5 13.9 221.3 18.4 17.1 -12.5 17.0 -11.9 16.8 -12.0 17.1 -12.6
2025-12-31T22:25:22.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T22:25:22.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T22:25:22.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.850484
2025-12-31T22:25:22.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T22:25:22.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T22:25:22.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T22:25:22.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T22:25:22.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T22:25:22.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T22:24:58', tmtdew=5.0, humidity=72.32, cloud=0.0, wind=21.03, temperature=15.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T22:22:50', seeing=1.62, atlas_timestamp='2025-12-31T20:24:41.818', atlas_cloud=2, atlas_rain=1, zp_data=[0.2602499999999992, 0.44475000000000087, 0.7302500000000007, 0.22100000000000009, 0.665, 0.8302500000000013, 0.5669999999999993, 0.4302500000000009, 0.39949999999999974, 0.4095000000000013, 0.8602499999999988, 0.41999999999999993, 0.3490000000000002, 0.4262499999999996, 0.5399999999999991, 0.019000000000000128, 0.8522499999999997, 0.4294999999999991, 0.9249999999999989, 0.5342499999999992, 0.34750000000000014, 0.24074999999999847, -0.13574999999999982, -0.4472499999999986, 0.6789999999999994, nan, 1.1087499999999997, -0.8900000000000006, 0.2450000000000001, -0.4939999999999998, -1.2979999999999983, -1.4959999999999987, -0.4202500000000011], zp_timestamp='2025-12-31T20:15:00')
2025-12-31T22:25:22.064 [DEBUG] [Thread-135725] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:25:22.152 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T22:25:22.165 [DEBUG] [Thread-135729] [transport.py] [_log()] starting thread (client mode): 0xb9591c00
2025-12-31T22:25:22.165 [DEBUG] [Thread-135729] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:25:22.179 [DEBUG] [Thread-135729] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T22:25:22.179 [INFO] [Thread-135729] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T22:25:22.187 [DEBUG] [Thread-135729] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:25:22.187 [DEBUG] [Thread-135729] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T22:25:22.187 [DEBUG] [Thread-135729] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:25:22.187 [DEBUG] [Thread-135729] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:25:22.187 [DEBUG] [Thread-135729] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:25:22.187 [DEBUG] [Thread-135729] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:25:22.187 [DEBUG] [Thread-135729] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:25:22.187 [DEBUG] [Thread-135729] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:25:22.187 [DEBUG] [Thread-135729] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:25:22.187 [DEBUG] [Thread-135729] [transport.py] [_log()] client lang: <none>
2025-12-31T22:25:22.187 [DEBUG] [Thread-135729] [transport.py] [_log()] server lang: <none>
2025-12-31T22:25:22.187 [DEBUG] [Thread-135729] [transport.py] [_log()] kex follows: False
2025-12-31T22:25:22.187 [DEBUG] [Thread-135729] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:25:22.187 [DEBUG] [Thread-135729] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:25:22.187 [DEBUG] [Thread-135729] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:25:22.187 [DEBUG] [Thread-135729] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:25:22.187 [DEBUG] [Thread-135729] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:25:22.187 [DEBUG] [Thread-135729] [transport.py] [_log()] Compression: none
2025-12-31T22:25:22.187 [DEBUG] [Thread-135729] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:25:22.243 [DEBUG] [Thread-135729] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:25:22.243 [DEBUG] [Thread-135729] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:25:22.243 [DEBUG] [Thread-135729] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T22:25:22.243 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T22:25:22.243 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:25:22.301 [DEBUG] [Thread-135729] [transport.py] [_log()] userauth is OK
2025-12-31T22:25:22.301 [DEBUG] [Thread-135729] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:25:22.301 [DEBUG] [Thread-135729] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:25:22.301 [DEBUG] [Thread-135729] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T22:25:22.301 [DEBUG] [Thread-135729] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:25:22.315 [INFO] [Thread-135729] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:25:22.316 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T22:25:22.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:25:23.177 [DEBUG] [Thread-135729] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:25:23.177 [DEBUG] [Thread-135729] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:25:23.225 [DEBUG] [Thread-135729] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:25:23.225 [DEBUG] [Thread-135729] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:25:23.233 [DEBUG] [Thread-135729] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:25:23.241 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:25:23.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T22:25:23.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T22:25:23.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:25:23.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:25:23.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:25:23.266 [DEBUG] [Thread-135729] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:25:33.930 [DEBUG] [Thread-135731 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:25:47.732 [DEBUG] [Thread-135732 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:25:48.991 [DEBUG] [Thread-135733 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:25:53.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T22:25:53.289 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T22:25:53.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T22:25:54.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 22, 25, 30), 5.0, 72.32, 0.0, 19.07, 15.81, 0, 0, 0, 2, 0, 0),)
2025-12-31T22:25:54.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 22:25:30
2025-12-31T22:25:54.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T22:25:54.291 [DEBUG] [Thread-135734] [transport.py] [_log()] starting thread (client mode): 0xb1758ca0
2025-12-31T22:25:54.291 [DEBUG] [Thread-135734] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:25:54.311 [DEBUG] [Thread-135734] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T22:25:54.311 [INFO] [Thread-135734] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T22:25:54.314 [DEBUG] [Thread-135734] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:25:54.314 [DEBUG] [Thread-135734] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T22:25:54.314 [DEBUG] [Thread-135734] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:25:54.314 [DEBUG] [Thread-135734] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:25:54.314 [DEBUG] [Thread-135734] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:25:54.314 [DEBUG] [Thread-135734] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:25:54.314 [DEBUG] [Thread-135734] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:25:54.314 [DEBUG] [Thread-135734] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:25:54.314 [DEBUG] [Thread-135734] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:25:54.314 [DEBUG] [Thread-135734] [transport.py] [_log()] client lang: <none>
2025-12-31T22:25:54.314 [DEBUG] [Thread-135734] [transport.py] [_log()] server lang: <none>
2025-12-31T22:25:54.314 [DEBUG] [Thread-135734] [transport.py] [_log()] kex follows: False
2025-12-31T22:25:54.315 [DEBUG] [Thread-135734] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:25:54.315 [DEBUG] [Thread-135734] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:25:54.315 [DEBUG] [Thread-135734] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:25:54.315 [DEBUG] [Thread-135734] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:25:54.315 [DEBUG] [Thread-135734] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:25:54.315 [DEBUG] [Thread-135734] [transport.py] [_log()] Compression: none
2025-12-31T22:25:54.315 [DEBUG] [Thread-135734] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:25:54.334 [DEBUG] [Thread-135734] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:25:54.334 [DEBUG] [Thread-135734] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:25:54.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T22:25:54.335 [DEBUG] [Thread-135734] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T22:25:54.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:25:54.337 [DEBUG] [Thread-135734] [transport.py] [_log()] userauth is OK
2025-12-31T22:25:54.338 [DEBUG] [Thread-135734] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:25:54.338 [DEBUG] [Thread-135734] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:25:54.338 [DEBUG] [Thread-135734] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T22:25:54.338 [DEBUG] [Thread-135734] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:25:54.374 [INFO] [Thread-135734] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:25:54.374 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:25:55.015 [DEBUG] [Thread-135734] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:25:55.015 [DEBUG] [Thread-135734] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:25:55.016 [DEBUG] [Thread-135734] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T22:25:55.056 [DEBUG] [Thread-135734] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:25:55.056 [DEBUG] [Thread-135734] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:25:55.059 [DEBUG] [Thread-135734] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:25:55.070 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:25:55.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T22:25:55.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T22:25:55.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T22:25:55.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:25:55.082 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T22:25:55.083 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:25:55.083 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:25:55.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T22:25:55.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.850831 -999.00  +16.10  12.74     74  +11.50 1 2 1 1 1     0    0 3.99 -25.60 .N.S. 11.8 12.7 219.7 21.3 17.1 -12.2 17.0 -11.7 16.8 -11.5 17.1 -12.1
2025-12-31T22:25:55.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T22:25:55.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T22:25:55.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.850831
2025-12-31T22:25:55.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T22:25:55.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T22:25:55.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T22:25:55.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T22:25:55.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T22:25:55.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T22:25:30', tmtdew=5.0, humidity=72.32, cloud=0.0, wind=19.07, temperature=15.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T22:22:50', seeing=1.62, atlas_timestamp='2025-12-31T20:25:11.798', atlas_cloud=2, atlas_rain=1, zp_data=[0.2602499999999992, 0.44475000000000087, 0.7302500000000007, 0.22100000000000009, 0.665, 0.8302500000000013, 0.5669999999999993, 0.4302500000000009, 0.39949999999999974, 0.4095000000000013, 0.8602499999999988, 0.41999999999999993, 0.3490000000000002, 0.4262499999999996, 0.5399999999999991, 0.019000000000000128, 0.8522499999999997, 0.4294999999999991, 0.9249999999999989, 0.5342499999999992, 0.34750000000000014, 0.24074999999999847, -0.13574999999999982, -0.4472499999999986, 0.6789999999999994, nan, 1.1087499999999997, -0.8900000000000006, 0.2450000000000001, -0.4939999999999998, -1.2979999999999983, -1.4959999999999987, -0.4202500000000011], zp_timestamp='2025-12-31T20:15:00')
2025-12-31T22:25:55.085 [DEBUG] [Thread-135734] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:25:55.168 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T22:25:55.182 [DEBUG] [Thread-135737] [transport.py] [_log()] starting thread (client mode): 0xb9591480
2025-12-31T22:25:55.182 [DEBUG] [Thread-135737] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:25:55.197 [DEBUG] [Thread-135737] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T22:25:55.197 [INFO] [Thread-135737] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T22:25:55.205 [DEBUG] [Thread-135737] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:25:55.205 [DEBUG] [Thread-135737] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T22:25:55.205 [DEBUG] [Thread-135737] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:25:55.205 [DEBUG] [Thread-135737] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:25:55.206 [DEBUG] [Thread-135737] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:25:55.206 [DEBUG] [Thread-135737] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:25:55.206 [DEBUG] [Thread-135737] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:25:55.206 [DEBUG] [Thread-135737] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:25:55.206 [DEBUG] [Thread-135737] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:25:55.206 [DEBUG] [Thread-135737] [transport.py] [_log()] client lang: <none>
2025-12-31T22:25:55.206 [DEBUG] [Thread-135737] [transport.py] [_log()] server lang: <none>
2025-12-31T22:25:55.206 [DEBUG] [Thread-135737] [transport.py] [_log()] kex follows: False
2025-12-31T22:25:55.206 [DEBUG] [Thread-135737] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:25:55.206 [DEBUG] [Thread-135737] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:25:55.206 [DEBUG] [Thread-135737] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:25:55.206 [DEBUG] [Thread-135737] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:25:55.206 [DEBUG] [Thread-135737] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:25:55.206 [DEBUG] [Thread-135737] [transport.py] [_log()] Compression: none
2025-12-31T22:25:55.206 [DEBUG] [Thread-135737] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:25:55.265 [DEBUG] [Thread-135737] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:25:55.266 [DEBUG] [Thread-135737] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:25:55.266 [DEBUG] [Thread-135737] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T22:25:55.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T22:25:55.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:25:55.322 [DEBUG] [Thread-135737] [transport.py] [_log()] userauth is OK
2025-12-31T22:25:55.322 [DEBUG] [Thread-135737] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:25:55.322 [DEBUG] [Thread-135737] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:25:55.323 [DEBUG] [Thread-135737] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T22:25:55.323 [DEBUG] [Thread-135737] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:25:55.341 [INFO] [Thread-135737] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:25:55.342 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T22:25:55.342 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:25:56.227 [DEBUG] [Thread-135737] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:25:56.228 [DEBUG] [Thread-135737] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:25:56.276 [DEBUG] [Thread-135737] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:25:56.276 [DEBUG] [Thread-135737] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:25:56.285 [DEBUG] [Thread-135737] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:25:56.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:25:56.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T22:25:56.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-12-31T22:25:56.311 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:25:56.312 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:25:56.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:25:56.320 [DEBUG] [Thread-135737] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:26:04.023 [DEBUG] [Thread-135739 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:26:13.524 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:26:13.525 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:26:19.061 [DEBUG] [Thread-135740 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:26:26.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T22:26:26.343 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T22:26:26.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T22:26:27.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 22, 26, 2), 4.99, 72.37, 0.0, 17.95, 15.82, 0, 0, 0, 2, 0, 0),)
2025-12-31T22:26:27.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 22:26:02
2025-12-31T22:26:27.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T22:26:27.320 [DEBUG] [Thread-135741] [transport.py] [_log()] starting thread (client mode): 0xb9590940
2025-12-31T22:26:27.320 [DEBUG] [Thread-135741] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:26:27.340 [DEBUG] [Thread-135741] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T22:26:27.340 [INFO] [Thread-135741] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T22:26:27.343 [DEBUG] [Thread-135741] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:26:27.343 [DEBUG] [Thread-135741] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T22:26:27.343 [DEBUG] [Thread-135741] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:26:27.343 [DEBUG] [Thread-135741] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:26:27.343 [DEBUG] [Thread-135741] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:26:27.343 [DEBUG] [Thread-135741] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:26:27.343 [DEBUG] [Thread-135741] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:26:27.343 [DEBUG] [Thread-135741] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:26:27.343 [DEBUG] [Thread-135741] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:26:27.343 [DEBUG] [Thread-135741] [transport.py] [_log()] client lang: <none>
2025-12-31T22:26:27.343 [DEBUG] [Thread-135741] [transport.py] [_log()] server lang: <none>
2025-12-31T22:26:27.343 [DEBUG] [Thread-135741] [transport.py] [_log()] kex follows: False
2025-12-31T22:26:27.343 [DEBUG] [Thread-135741] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:26:27.344 [DEBUG] [Thread-135741] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:26:27.344 [DEBUG] [Thread-135741] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:26:27.344 [DEBUG] [Thread-135741] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:26:27.344 [DEBUG] [Thread-135741] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:26:27.344 [DEBUG] [Thread-135741] [transport.py] [_log()] Compression: none
2025-12-31T22:26:27.344 [DEBUG] [Thread-135741] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:26:27.360 [DEBUG] [Thread-135741] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:26:27.361 [DEBUG] [Thread-135741] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:26:27.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T22:26:27.362 [DEBUG] [Thread-135741] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T22:26:27.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:26:27.364 [DEBUG] [Thread-135741] [transport.py] [_log()] userauth is OK
2025-12-31T22:26:27.364 [DEBUG] [Thread-135741] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:26:27.364 [DEBUG] [Thread-135741] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:26:27.364 [DEBUG] [Thread-135741] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T22:26:27.364 [DEBUG] [Thread-135741] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:26:27.388 [INFO] [Thread-135741] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:26:27.390 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:26:28.104 [DEBUG] [Thread-135741] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:26:28.104 [DEBUG] [Thread-135741] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:26:28.104 [DEBUG] [Thread-135741] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T22:26:28.145 [DEBUG] [Thread-135741] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:26:28.145 [DEBUG] [Thread-135741] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:26:28.148 [DEBUG] [Thread-135741] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:26:28.161 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:26:28.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T22:26:28.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T22:26:28.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T22:26:28.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:26:28.172 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T22:26:28.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:26:28.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:26:28.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T22:26:28.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.851178 -999.00  +16.00  14.01     74  +11.50 1 2 1 1 1     0    0 4.05 -24.18 .N.S. 11.1 14.0 209.8 18.2 17.1 -11.8 17.0 -11.4 16.8 -11.2 17.1 -11.9
2025-12-31T22:26:28.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T22:26:28.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T22:26:28.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.851178
2025-12-31T22:26:28.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T22:26:28.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T22:26:28.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T22:26:28.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T22:26:28.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T22:26:28.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T22:26:02', tmtdew=4.99, humidity=72.37, cloud=0.0, wind=17.95, temperature=15.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T22:22:50', seeing=1.62, atlas_timestamp='2025-12-31T20:25:41.779', atlas_cloud=2, atlas_rain=1, zp_data=[0.2602499999999992, 0.44475000000000087, 0.7302500000000007, 0.22100000000000009, 0.665, 0.8302500000000013, 0.5669999999999993, 0.4302500000000009, 0.39949999999999974, 0.4095000000000013, 0.8602499999999988, 0.41999999999999993, 0.3490000000000002, 0.4262499999999996, 0.5399999999999991, 0.019000000000000128, 0.8522499999999997, 0.4294999999999991, 0.9249999999999989, 0.5342499999999992, 0.34750000000000014, 0.24074999999999847, -0.13574999999999982, -0.4472499999999986, 0.6789999999999994, nan, 1.1087499999999997, -0.8900000000000006, 0.2450000000000001, -0.4939999999999998, -1.2979999999999983, -1.4959999999999987, -0.4202500000000011], zp_timestamp='2025-12-31T20:15:00')
2025-12-31T22:26:28.176 [DEBUG] [Thread-135741] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:26:28.258 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T22:26:28.270 [DEBUG] [Thread-135744] [transport.py] [_log()] starting thread (client mode): 0xb1775120
2025-12-31T22:26:28.270 [DEBUG] [Thread-135744] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:26:28.289 [DEBUG] [Thread-135744] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T22:26:28.289 [INFO] [Thread-135744] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T22:26:28.299 [DEBUG] [Thread-135744] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:26:28.299 [DEBUG] [Thread-135744] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T22:26:28.299 [DEBUG] [Thread-135744] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:26:28.299 [DEBUG] [Thread-135744] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:26:28.299 [DEBUG] [Thread-135744] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:26:28.299 [DEBUG] [Thread-135744] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:26:28.299 [DEBUG] [Thread-135744] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:26:28.299 [DEBUG] [Thread-135744] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:26:28.299 [DEBUG] [Thread-135744] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:26:28.299 [DEBUG] [Thread-135744] [transport.py] [_log()] client lang: <none>
2025-12-31T22:26:28.299 [DEBUG] [Thread-135744] [transport.py] [_log()] server lang: <none>
2025-12-31T22:26:28.299 [DEBUG] [Thread-135744] [transport.py] [_log()] kex follows: False
2025-12-31T22:26:28.299 [DEBUG] [Thread-135744] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:26:28.299 [DEBUG] [Thread-135744] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:26:28.300 [DEBUG] [Thread-135744] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:26:28.300 [DEBUG] [Thread-135744] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:26:28.300 [DEBUG] [Thread-135744] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:26:28.300 [DEBUG] [Thread-135744] [transport.py] [_log()] Compression: none
2025-12-31T22:26:28.300 [DEBUG] [Thread-135744] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:26:28.365 [DEBUG] [Thread-135744] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:26:28.366 [DEBUG] [Thread-135744] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:26:28.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T22:26:28.366 [DEBUG] [Thread-135744] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T22:26:28.367 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:26:28.422 [DEBUG] [Thread-135744] [transport.py] [_log()] userauth is OK
2025-12-31T22:26:28.422 [DEBUG] [Thread-135744] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:26:28.422 [DEBUG] [Thread-135744] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:26:28.422 [DEBUG] [Thread-135744] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T22:26:28.422 [DEBUG] [Thread-135744] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:26:28.442 [INFO] [Thread-135744] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:26:28.442 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T22:26:28.442 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:26:29.289 [DEBUG] [Thread-135744] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:26:29.289 [DEBUG] [Thread-135744] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:26:29.339 [DEBUG] [Thread-135744] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:26:29.339 [DEBUG] [Thread-135744] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:26:29.354 [DEBUG] [Thread-135744] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:26:29.364 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:26:29.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T22:26:29.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T22:26:29.381 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:26:29.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:26:29.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:26:29.390 [DEBUG] [Thread-135744] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:26:34.107 [DEBUG] [Thread-135746 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:26:47.811 [DEBUG] [Thread-135747 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:26:49.154 [DEBUG] [Thread-135748 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:26:59.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T22:26:59.389 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T22:26:59.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T22:27:00.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 22, 26, 35), 4.96, 72.29, 0.0, 17.33, 15.81, 0, 0, 0, 2, 0, 0),)
2025-12-31T22:27:00.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 22:26:35
2025-12-31T22:27:00.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T22:27:00.366 [DEBUG] [Thread-135749] [transport.py] [_log()] starting thread (client mode): 0xb1767100
2025-12-31T22:27:00.366 [DEBUG] [Thread-135749] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:27:00.386 [DEBUG] [Thread-135749] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T22:27:00.386 [INFO] [Thread-135749] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T22:27:00.389 [DEBUG] [Thread-135749] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:27:00.389 [DEBUG] [Thread-135749] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T22:27:00.389 [DEBUG] [Thread-135749] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:27:00.389 [DEBUG] [Thread-135749] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:27:00.389 [DEBUG] [Thread-135749] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:27:00.389 [DEBUG] [Thread-135749] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:27:00.389 [DEBUG] [Thread-135749] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:27:00.389 [DEBUG] [Thread-135749] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:27:00.389 [DEBUG] [Thread-135749] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:27:00.389 [DEBUG] [Thread-135749] [transport.py] [_log()] client lang: <none>
2025-12-31T22:27:00.389 [DEBUG] [Thread-135749] [transport.py] [_log()] server lang: <none>
2025-12-31T22:27:00.389 [DEBUG] [Thread-135749] [transport.py] [_log()] kex follows: False
2025-12-31T22:27:00.389 [DEBUG] [Thread-135749] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:27:00.389 [DEBUG] [Thread-135749] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:27:00.390 [DEBUG] [Thread-135749] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:27:00.390 [DEBUG] [Thread-135749] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:27:00.390 [DEBUG] [Thread-135749] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:27:00.390 [DEBUG] [Thread-135749] [transport.py] [_log()] Compression: none
2025-12-31T22:27:00.390 [DEBUG] [Thread-135749] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:27:00.407 [DEBUG] [Thread-135749] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:27:00.407 [DEBUG] [Thread-135749] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:27:00.408 [DEBUG] [Thread-135749] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T22:27:00.408 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T22:27:00.408 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:27:00.409 [DEBUG] [Thread-135749] [transport.py] [_log()] userauth is OK
2025-12-31T22:27:00.410 [DEBUG] [Thread-135749] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:27:00.410 [DEBUG] [Thread-135749] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:27:00.410 [DEBUG] [Thread-135749] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T22:27:00.410 [DEBUG] [Thread-135749] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:27:00.427 [INFO] [Thread-135749] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:27:00.428 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:27:01.088 [DEBUG] [Thread-135749] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:27:01.088 [DEBUG] [Thread-135749] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:27:01.088 [DEBUG] [Thread-135749] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T22:27:01.129 [DEBUG] [Thread-135749] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:27:01.129 [DEBUG] [Thread-135749] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:27:01.131 [DEBUG] [Thread-135749] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:27:01.145 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:27:01.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T22:27:01.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T22:27:01.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T22:27:01.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:27:01.156 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T22:27:01.156 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:27:01.156 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:27:01.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T22:27:01.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.851525 -999.00  +16.00  14.13     74  +11.50 1 2 1 1 1     0    0 3.99 -24.88 ..... 10.2 14.1 193.6 19.1 17.1 -11.6 17.0 -11.3 16.8 -11.0 17.1 -11.5
2025-12-31T22:27:01.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T22:27:01.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T22:27:01.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.851525
2025-12-31T22:27:01.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T22:27:01.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T22:27:01.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T22:27:01.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T22:27:01.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T22:27:01.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T22:26:35', tmtdew=4.96, humidity=72.29, cloud=0.0, wind=17.33, temperature=15.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T22:22:50', seeing=1.62, atlas_timestamp='2025-12-31T20:26:11.760', atlas_cloud=2, atlas_rain=1, zp_data=[0.2602499999999992, 0.44475000000000087, 0.7302500000000007, 0.22100000000000009, 0.665, 0.8302500000000013, 0.5669999999999993, 0.4302500000000009, 0.39949999999999974, 0.4095000000000013, 0.8602499999999988, 0.41999999999999993, 0.3490000000000002, 0.4262499999999996, 0.5399999999999991, 0.019000000000000128, 0.8522499999999997, 0.4294999999999991, 0.9249999999999989, 0.5342499999999992, 0.34750000000000014, 0.24074999999999847, -0.13574999999999982, -0.4472499999999986, 0.6789999999999994, nan, 1.1087499999999997, -0.8900000000000006, 0.2450000000000001, -0.4939999999999998, -1.2979999999999983, -1.4959999999999987, -0.4202500000000011], zp_timestamp='2025-12-31T20:15:00')
2025-12-31T22:27:01.159 [DEBUG] [Thread-135749] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:27:01.244 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T22:27:01.256 [DEBUG] [Thread-135752] [transport.py] [_log()] starting thread (client mode): 0xb1765540
2025-12-31T22:27:01.256 [DEBUG] [Thread-135752] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:27:01.275 [DEBUG] [Thread-135752] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T22:27:01.275 [INFO] [Thread-135752] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T22:27:01.282 [DEBUG] [Thread-135752] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:27:01.283 [DEBUG] [Thread-135752] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T22:27:01.283 [DEBUG] [Thread-135752] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:27:01.283 [DEBUG] [Thread-135752] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:27:01.283 [DEBUG] [Thread-135752] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:27:01.283 [DEBUG] [Thread-135752] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:27:01.283 [DEBUG] [Thread-135752] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:27:01.283 [DEBUG] [Thread-135752] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:27:01.283 [DEBUG] [Thread-135752] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:27:01.283 [DEBUG] [Thread-135752] [transport.py] [_log()] client lang: <none>
2025-12-31T22:27:01.284 [DEBUG] [Thread-135752] [transport.py] [_log()] server lang: <none>
2025-12-31T22:27:01.284 [DEBUG] [Thread-135752] [transport.py] [_log()] kex follows: False
2025-12-31T22:27:01.284 [DEBUG] [Thread-135752] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:27:01.284 [DEBUG] [Thread-135752] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:27:01.284 [DEBUG] [Thread-135752] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:27:01.284 [DEBUG] [Thread-135752] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:27:01.284 [DEBUG] [Thread-135752] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:27:01.284 [DEBUG] [Thread-135752] [transport.py] [_log()] Compression: none
2025-12-31T22:27:01.284 [DEBUG] [Thread-135752] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:27:01.345 [DEBUG] [Thread-135752] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:27:01.346 [DEBUG] [Thread-135752] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:27:01.347 [DEBUG] [Thread-135752] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T22:27:01.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T22:27:01.348 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:27:01.401 [DEBUG] [Thread-135752] [transport.py] [_log()] userauth is OK
2025-12-31T22:27:01.402 [DEBUG] [Thread-135752] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:27:01.402 [DEBUG] [Thread-135752] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:27:01.402 [DEBUG] [Thread-135752] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T22:27:01.402 [DEBUG] [Thread-135752] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:27:01.421 [INFO] [Thread-135752] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:27:01.422 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T22:27:01.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:27:02.256 [DEBUG] [Thread-135752] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:27:02.256 [DEBUG] [Thread-135752] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:27:02.304 [DEBUG] [Thread-135752] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:27:02.304 [DEBUG] [Thread-135752] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:27:02.312 [DEBUG] [Thread-135752] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:27:02.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:27:02.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T22:27:02.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T22:27:02.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:27:02.336 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:27:02.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:27:02.344 [DEBUG] [Thread-135752] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:27:04.189 [DEBUG] [Thread-135754 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:27:13.727 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:27:13.728 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:27:19.247 [DEBUG] [Thread-135755 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:27:32.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T22:27:32.367 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T22:27:32.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T22:27:33.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 22, 27, 7), 4.96, 72.28, 0.0, 18.32, 15.79, 0, 0, 0, 2, 0, 0),)
2025-12-31T22:27:33.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 22:27:07
2025-12-31T22:27:33.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T22:27:33.345 [DEBUG] [Thread-135756] [transport.py] [_log()] starting thread (client mode): 0xb95d7430
2025-12-31T22:27:33.345 [DEBUG] [Thread-135756] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:27:33.365 [DEBUG] [Thread-135756] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T22:27:33.365 [INFO] [Thread-135756] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T22:27:33.368 [DEBUG] [Thread-135756] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:27:33.369 [DEBUG] [Thread-135756] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T22:27:33.369 [DEBUG] [Thread-135756] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:27:33.369 [DEBUG] [Thread-135756] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:27:33.369 [DEBUG] [Thread-135756] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:27:33.369 [DEBUG] [Thread-135756] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:27:33.369 [DEBUG] [Thread-135756] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:27:33.369 [DEBUG] [Thread-135756] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:27:33.369 [DEBUG] [Thread-135756] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:27:33.369 [DEBUG] [Thread-135756] [transport.py] [_log()] client lang: <none>
2025-12-31T22:27:33.369 [DEBUG] [Thread-135756] [transport.py] [_log()] server lang: <none>
2025-12-31T22:27:33.369 [DEBUG] [Thread-135756] [transport.py] [_log()] kex follows: False
2025-12-31T22:27:33.369 [DEBUG] [Thread-135756] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:27:33.369 [DEBUG] [Thread-135756] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:27:33.369 [DEBUG] [Thread-135756] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:27:33.369 [DEBUG] [Thread-135756] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:27:33.369 [DEBUG] [Thread-135756] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:27:33.369 [DEBUG] [Thread-135756] [transport.py] [_log()] Compression: none
2025-12-31T22:27:33.370 [DEBUG] [Thread-135756] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:27:33.387 [DEBUG] [Thread-135756] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:27:33.388 [DEBUG] [Thread-135756] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:27:33.388 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T22:27:33.389 [DEBUG] [Thread-135756] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T22:27:33.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:27:33.391 [DEBUG] [Thread-135756] [transport.py] [_log()] userauth is OK
2025-12-31T22:27:33.391 [DEBUG] [Thread-135756] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:27:33.391 [DEBUG] [Thread-135756] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:27:33.391 [DEBUG] [Thread-135756] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T22:27:33.391 [DEBUG] [Thread-135756] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:27:33.415 [INFO] [Thread-135756] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:27:33.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:27:34.157 [DEBUG] [Thread-135756] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:27:34.158 [DEBUG] [Thread-135756] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:27:34.158 [DEBUG] [Thread-135756] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T22:27:34.199 [DEBUG] [Thread-135756] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:27:34.199 [DEBUG] [Thread-135756] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:27:34.203 [DEBUG] [Thread-135756] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:27:34.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:27:34.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T22:27:34.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T22:27:34.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T22:27:34.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:27:34.227 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T22:27:34.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:27:34.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:27:34.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T22:27:34.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.851873 -999.00  +16.10   8.17     74  +11.50 1 2 1 1 1     0    0 3.98 -23.59 ..... 9.8 8.2 208.4 14.8 17.1 -11.4 17.0 -11.6 16.8 -10.8 17.1 -11.2
2025-12-31T22:27:34.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T22:27:34.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T22:27:34.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.851873
2025-12-31T22:27:34.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T22:27:34.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T22:27:34.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T22:27:34.229 [DEBUG] [Thread-135756] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:27:34.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T22:27:34.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T22:27:34.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T22:27:07', tmtdew=4.96, humidity=72.28, cloud=0.0, wind=18.32, temperature=15.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T22:22:50', seeing=1.62, atlas_timestamp='2025-12-31T20:26:41.827', atlas_cloud=2, atlas_rain=1, zp_data=[0.2602499999999992, 0.44475000000000087, 0.7302500000000007, 0.22100000000000009, 0.665, 0.8302500000000013, 0.5669999999999993, 0.4302500000000009, 0.39949999999999974, 0.4095000000000013, 0.8602499999999988, 0.41999999999999993, 0.3490000000000002, 0.4262499999999996, 0.5399999999999991, 0.019000000000000128, 0.8522499999999997, 0.4294999999999991, 0.9249999999999989, 0.5342499999999992, 0.34750000000000014, 0.24074999999999847, -0.13574999999999982, -0.4472499999999986, 0.6789999999999994, nan, 1.1087499999999997, -0.8900000000000006, 0.2450000000000001, -0.4939999999999998, -1.2979999999999983, -1.4959999999999987, -0.4202500000000011], zp_timestamp='2025-12-31T20:15:00')
2025-12-31T22:27:34.277 [DEBUG] [Thread-135759 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:27:34.313 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T22:27:34.325 [DEBUG] [Thread-135760] [transport.py] [_log()] starting thread (client mode): 0xb175ba60
2025-12-31T22:27:34.325 [DEBUG] [Thread-135760] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:27:34.340 [DEBUG] [Thread-135760] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T22:27:34.340 [INFO] [Thread-135760] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T22:27:34.348 [DEBUG] [Thread-135760] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:27:34.348 [DEBUG] [Thread-135760] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T22:27:34.348 [DEBUG] [Thread-135760] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:27:34.349 [DEBUG] [Thread-135760] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:27:34.349 [DEBUG] [Thread-135760] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:27:34.349 [DEBUG] [Thread-135760] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:27:34.349 [DEBUG] [Thread-135760] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:27:34.349 [DEBUG] [Thread-135760] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:27:34.349 [DEBUG] [Thread-135760] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:27:34.349 [DEBUG] [Thread-135760] [transport.py] [_log()] client lang: <none>
2025-12-31T22:27:34.349 [DEBUG] [Thread-135760] [transport.py] [_log()] server lang: <none>
2025-12-31T22:27:34.349 [DEBUG] [Thread-135760] [transport.py] [_log()] kex follows: False
2025-12-31T22:27:34.350 [DEBUG] [Thread-135760] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:27:34.350 [DEBUG] [Thread-135760] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:27:34.350 [DEBUG] [Thread-135760] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:27:34.350 [DEBUG] [Thread-135760] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:27:34.350 [DEBUG] [Thread-135760] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:27:34.350 [DEBUG] [Thread-135760] [transport.py] [_log()] Compression: none
2025-12-31T22:27:34.350 [DEBUG] [Thread-135760] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:27:34.406 [DEBUG] [Thread-135760] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:27:34.407 [DEBUG] [Thread-135760] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:27:34.408 [DEBUG] [Thread-135760] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T22:27:34.408 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T22:27:34.409 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:27:34.466 [DEBUG] [Thread-135760] [transport.py] [_log()] userauth is OK
2025-12-31T22:27:34.466 [DEBUG] [Thread-135760] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:27:34.466 [DEBUG] [Thread-135760] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:27:34.466 [DEBUG] [Thread-135760] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T22:27:34.466 [DEBUG] [Thread-135760] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:27:34.485 [INFO] [Thread-135760] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:27:34.485 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T22:27:34.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:27:35.311 [DEBUG] [Thread-135760] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:27:35.311 [DEBUG] [Thread-135760] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:27:35.359 [DEBUG] [Thread-135760] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:27:35.360 [DEBUG] [Thread-135760] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:27:35.369 [DEBUG] [Thread-135760] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:27:35.379 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:27:35.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T22:27: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') -> 00000000
2025-12-31T22:27:35.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:27:35.398 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:27:35.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:27:35.406 [DEBUG] [Thread-135760] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:27:47.879 [DEBUG] [Thread-135762 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:27:49.318 [DEBUG] [Thread-135763 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:28:04.352 [DEBUG] [Thread-135764 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:28:05.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T22:28:05.429 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T22:28:05.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T22:28:06.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 22, 27, 39), 4.99, 72.37, 0.0, 16.99, 15.81, 0, 0, 0, 2, 0, 0),)
2025-12-31T22:28:06.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 22:27:39
2025-12-31T22:28:06.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T22:28:06.413 [DEBUG] [Thread-135765] [transport.py] [_log()] starting thread (client mode): 0xb175bbe0
2025-12-31T22:28:06.413 [DEBUG] [Thread-135765] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:28:06.435 [DEBUG] [Thread-135765] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T22:28:06.435 [INFO] [Thread-135765] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T22:28:06.438 [DEBUG] [Thread-135765] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:28:06.439 [DEBUG] [Thread-135765] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T22:28:06.439 [DEBUG] [Thread-135765] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:28:06.439 [DEBUG] [Thread-135765] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:28:06.439 [DEBUG] [Thread-135765] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:28:06.439 [DEBUG] [Thread-135765] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:28:06.439 [DEBUG] [Thread-135765] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:28:06.439 [DEBUG] [Thread-135765] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:28:06.439 [DEBUG] [Thread-135765] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:28:06.439 [DEBUG] [Thread-135765] [transport.py] [_log()] client lang: <none>
2025-12-31T22:28:06.439 [DEBUG] [Thread-135765] [transport.py] [_log()] server lang: <none>
2025-12-31T22:28:06.439 [DEBUG] [Thread-135765] [transport.py] [_log()] kex follows: False
2025-12-31T22:28:06.439 [DEBUG] [Thread-135765] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:28:06.439 [DEBUG] [Thread-135765] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:28:06.439 [DEBUG] [Thread-135765] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:28:06.439 [DEBUG] [Thread-135765] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:28:06.439 [DEBUG] [Thread-135765] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:28:06.439 [DEBUG] [Thread-135765] [transport.py] [_log()] Compression: none
2025-12-31T22:28:06.439 [DEBUG] [Thread-135765] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:28:06.457 [DEBUG] [Thread-135765] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:28:06.457 [DEBUG] [Thread-135765] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:28:06.458 [DEBUG] [Thread-135765] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T22:28:06.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T22:28:06.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:28:06.460 [DEBUG] [Thread-135765] [transport.py] [_log()] userauth is OK
2025-12-31T22:28:06.460 [DEBUG] [Thread-135765] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:28:06.460 [DEBUG] [Thread-135765] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:28:06.460 [DEBUG] [Thread-135765] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T22:28:06.460 [DEBUG] [Thread-135765] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:28:06.476 [INFO] [Thread-135765] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:28:06.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:28:07.109 [DEBUG] [Thread-135765] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:28:07.109 [DEBUG] [Thread-135765] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:28:07.110 [DEBUG] [Thread-135765] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T22:28:07.150 [DEBUG] [Thread-135765] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:28:07.150 [DEBUG] [Thread-135765] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:28:07.154 [DEBUG] [Thread-135765] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:28:07.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:28:07.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T22:28:07.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T22:28:07.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T22:28:07.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:28:07.178 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T22:28:07.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:28:07.178 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:28:07.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T22:28:07.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.852567 -999.00  +16.00  10.98     74  +11.50 1 3 1 1 1     0    0 3.89 -23.53 ----- 11.4 11.0 208.3 22.0 17.1 -11.2 17.0 -11.0 16.8 -10.7 17.1 -10.8
2025-12-31T22:28:07.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T22:28:07.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T22:28:07.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.852567
2025-12-31T22:28:07.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T22:28:07.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T22:28:07.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T22:28:07.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T22:28:07.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-31T22:28:07.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T22:27:39', tmtdew=4.99, humidity=72.37, cloud=0.0, wind=16.99, temperature=15.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T22:22:50', seeing=1.62, atlas_timestamp='2025-12-31T20:27:41.789', atlas_cloud=3, atlas_rain=1, zp_data=[0.2602499999999992, 0.44475000000000087, 0.7302500000000007, 0.22100000000000009, 0.665, 0.8302500000000013, 0.5669999999999993, 0.4302500000000009, 0.39949999999999974, 0.4095000000000013, 0.8602499999999988, 0.41999999999999993, 0.3490000000000002, 0.4262499999999996, 0.5399999999999991, 0.019000000000000128, 0.8522499999999997, 0.4294999999999991, 0.9249999999999989, 0.5342499999999992, 0.34750000000000014, 0.24074999999999847, -0.13574999999999982, -0.4472499999999986, 0.6789999999999994, nan, 1.1087499999999997, -0.8900000000000006, 0.2450000000000001, -0.4939999999999998, -1.2979999999999983, -1.4959999999999987, -0.4202500000000011], zp_timestamp='2025-12-31T20:15:00')
2025-12-31T22:28:07.181 [DEBUG] [Thread-135765] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:28:07.264 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T22:28:07.278 [DEBUG] [Thread-135768] [transport.py] [_log()] starting thread (client mode): 0xb1764520
2025-12-31T22:28:07.278 [DEBUG] [Thread-135768] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:28:07.293 [DEBUG] [Thread-135768] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T22:28:07.293 [INFO] [Thread-135768] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T22:28:07.301 [DEBUG] [Thread-135768] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:28:07.301 [DEBUG] [Thread-135768] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T22:28:07.301 [DEBUG] [Thread-135768] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:28:07.301 [DEBUG] [Thread-135768] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:28:07.301 [DEBUG] [Thread-135768] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:28:07.301 [DEBUG] [Thread-135768] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:28:07.301 [DEBUG] [Thread-135768] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:28:07.301 [DEBUG] [Thread-135768] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:28:07.302 [DEBUG] [Thread-135768] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:28:07.302 [DEBUG] [Thread-135768] [transport.py] [_log()] client lang: <none>
2025-12-31T22:28:07.302 [DEBUG] [Thread-135768] [transport.py] [_log()] server lang: <none>
2025-12-31T22:28:07.302 [DEBUG] [Thread-135768] [transport.py] [_log()] kex follows: False
2025-12-31T22:28:07.302 [DEBUG] [Thread-135768] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:28:07.302 [DEBUG] [Thread-135768] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:28:07.302 [DEBUG] [Thread-135768] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:28:07.302 [DEBUG] [Thread-135768] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:28:07.302 [DEBUG] [Thread-135768] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:28:07.302 [DEBUG] [Thread-135768] [transport.py] [_log()] Compression: none
2025-12-31T22:28:07.302 [DEBUG] [Thread-135768] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:28:07.357 [DEBUG] [Thread-135768] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:28:07.358 [DEBUG] [Thread-135768] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:28:07.358 [DEBUG] [Thread-135768] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T22:28:07.358 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T22:28:07.359 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:28:07.414 [DEBUG] [Thread-135768] [transport.py] [_log()] userauth is OK
2025-12-31T22:28:07.414 [DEBUG] [Thread-135768] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:28:07.414 [DEBUG] [Thread-135768] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:28:07.414 [DEBUG] [Thread-135768] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T22:28:07.414 [DEBUG] [Thread-135768] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:28:07.433 [INFO] [Thread-135768] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:28:07.433 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T22:28:07.434 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:28:08.277 [DEBUG] [Thread-135768] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:28:08.277 [DEBUG] [Thread-135768] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:28:08.325 [DEBUG] [Thread-135768] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:28:08.325 [DEBUG] [Thread-135768] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:28:08.335 [DEBUG] [Thread-135768] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:28:08.344 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:28:08.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T22:28:08.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T22:28:08.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:28:08.363 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:28:08.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:28:08.372 [DEBUG] [Thread-135768] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:28:13.931 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:28:13.932 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:28:19.388 [DEBUG] [Thread-135770 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:28:34.441 [DEBUG] [Thread-135771 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:28:38.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T22:28:38.369 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T22:28:38.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T22:28:39.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 22, 28, 11), 5.0, 72.36, 0.0, 17.26, 15.82, 0, 0, 0, 2, 0, 0),)
2025-12-31T22:28:39.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 22:28:11
2025-12-31T22:28:39.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T22:28:39.423 [DEBUG] [Thread-135772] [transport.py] [_log()] starting thread (client mode): 0xb95d6aa0
2025-12-31T22:28:39.423 [DEBUG] [Thread-135772] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:28:39.443 [DEBUG] [Thread-135772] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T22:28:39.443 [INFO] [Thread-135772] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T22:28:39.446 [DEBUG] [Thread-135772] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:28:39.446 [DEBUG] [Thread-135772] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T22:28:39.446 [DEBUG] [Thread-135772] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:28:39.446 [DEBUG] [Thread-135772] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:28:39.446 [DEBUG] [Thread-135772] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:28:39.446 [DEBUG] [Thread-135772] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:28:39.446 [DEBUG] [Thread-135772] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:28:39.446 [DEBUG] [Thread-135772] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:28:39.446 [DEBUG] [Thread-135772] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:28:39.446 [DEBUG] [Thread-135772] [transport.py] [_log()] client lang: <none>
2025-12-31T22:28:39.446 [DEBUG] [Thread-135772] [transport.py] [_log()] server lang: <none>
2025-12-31T22:28:39.446 [DEBUG] [Thread-135772] [transport.py] [_log()] kex follows: False
2025-12-31T22:28:39.446 [DEBUG] [Thread-135772] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:28:39.446 [DEBUG] [Thread-135772] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:28:39.446 [DEBUG] [Thread-135772] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:28:39.446 [DEBUG] [Thread-135772] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:28:39.447 [DEBUG] [Thread-135772] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:28:39.447 [DEBUG] [Thread-135772] [transport.py] [_log()] Compression: none
2025-12-31T22:28:39.447 [DEBUG] [Thread-135772] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:28:39.461 [DEBUG] [Thread-135772] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:28:39.461 [DEBUG] [Thread-135772] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:28:39.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T22:28:39.461 [DEBUG] [Thread-135772] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T22:28:39.462 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:28:39.462 [DEBUG] [Thread-135772] [transport.py] [_log()] userauth is OK
2025-12-31T22:28:39.462 [DEBUG] [Thread-135772] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:28:39.462 [DEBUG] [Thread-135772] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:28:39.462 [DEBUG] [Thread-135772] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T22:28:39.462 [DEBUG] [Thread-135772] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:28:39.478 [INFO] [Thread-135772] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:28:39.478 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:28:40.200 [DEBUG] [Thread-135772] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:28:40.200 [DEBUG] [Thread-135772] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:28:40.200 [DEBUG] [Thread-135772] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T22:28:40.242 [DEBUG] [Thread-135772] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:28:40.242 [DEBUG] [Thread-135772] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:28:40.244 [DEBUG] [Thread-135772] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:28:40.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:28:40.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T22:28:40.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T22:28:40.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T22:28:40.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:28:40.265 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T22:28:40.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:28:40.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:28:40.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T22:28:40.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.852914 -999.00  +16.00  12.14     74  +11.50 1 2 1 1 1     0    0 3.94 -25.22 ..E.. 18.9 12.1 207.4 17.5 17.1 -11.0 17.0 -11.2 16.9 -10.5 17.1 -10.6
2025-12-31T22:28:40.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T22:28:40.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T22:28:40.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.852914
2025-12-31T22:28:40.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T22:28:40.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T22:28:40.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T22:28:40.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T22:28:40.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T22:28:40.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T22:28:11', tmtdew=5.0, humidity=72.36, cloud=0.0, wind=17.26, temperature=15.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T22:22:50', seeing=1.62, atlas_timestamp='2025-12-31T20:28:11.770', atlas_cloud=2, atlas_rain=1, zp_data=[0.2602499999999992, 0.44475000000000087, 0.7302500000000007, 0.22100000000000009, 0.665, 0.8302500000000013, 0.5669999999999993, 0.4302500000000009, 0.39949999999999974, 0.4095000000000013, 0.8602499999999988, 0.41999999999999993, 0.3490000000000002, 0.4262499999999996, 0.5399999999999991, 0.019000000000000128, 0.8522499999999997, 0.4294999999999991, 0.9249999999999989, 0.5342499999999992, 0.34750000000000014, 0.24074999999999847, -0.13574999999999982, -0.4472499999999986, 0.6789999999999994, nan, 1.1087499999999997, -0.8900000000000006, 0.2450000000000001, -0.4939999999999998, -1.2979999999999983, -1.4959999999999987, -0.4202500000000011], zp_timestamp='2025-12-31T20:15:00')
2025-12-31T22:28:40.266 [DEBUG] [Thread-135772] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:28:40.340 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T22:28:40.351 [DEBUG] [Thread-135775] [transport.py] [_log()] starting thread (client mode): 0xb1777640
2025-12-31T22:28:40.351 [DEBUG] [Thread-135775] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:28:40.365 [DEBUG] [Thread-135775] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T22:28:40.365 [INFO] [Thread-135775] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T22:28:40.374 [DEBUG] [Thread-135775] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:28:40.374 [DEBUG] [Thread-135775] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T22:28:40.374 [DEBUG] [Thread-135775] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:28:40.374 [DEBUG] [Thread-135775] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:28:40.374 [DEBUG] [Thread-135775] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:28:40.374 [DEBUG] [Thread-135775] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:28:40.374 [DEBUG] [Thread-135775] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:28:40.374 [DEBUG] [Thread-135775] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:28:40.374 [DEBUG] [Thread-135775] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:28:40.374 [DEBUG] [Thread-135775] [transport.py] [_log()] client lang: <none>
2025-12-31T22:28:40.374 [DEBUG] [Thread-135775] [transport.py] [_log()] server lang: <none>
2025-12-31T22:28:40.374 [DEBUG] [Thread-135775] [transport.py] [_log()] kex follows: False
2025-12-31T22:28:40.374 [DEBUG] [Thread-135775] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:28:40.374 [DEBUG] [Thread-135775] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:28:40.374 [DEBUG] [Thread-135775] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:28:40.374 [DEBUG] [Thread-135775] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:28:40.374 [DEBUG] [Thread-135775] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:28:40.374 [DEBUG] [Thread-135775] [transport.py] [_log()] Compression: none
2025-12-31T22:28:40.374 [DEBUG] [Thread-135775] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:28:40.428 [DEBUG] [Thread-135775] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:28:40.428 [DEBUG] [Thread-135775] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:28:40.428 [DEBUG] [Thread-135775] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T22:28:40.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T22:28:40.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:28:40.485 [DEBUG] [Thread-135775] [transport.py] [_log()] userauth is OK
2025-12-31T22:28:40.485 [DEBUG] [Thread-135775] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:28:40.485 [DEBUG] [Thread-135775] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:28:40.485 [DEBUG] [Thread-135775] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T22:28:40.485 [DEBUG] [Thread-135775] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:28:40.498 [INFO] [Thread-135775] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:28:40.498 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T22:28:40.498 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:28:41.292 [DEBUG] [Thread-135775] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:28:41.292 [DEBUG] [Thread-135775] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:28:41.339 [DEBUG] [Thread-135775] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:28:41.339 [DEBUG] [Thread-135775] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:28:41.347 [DEBUG] [Thread-135775] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:28:41.355 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:28:41.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T22:28:41.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T22:28:41.370 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:28:41.370 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:28:41.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:28:41.378 [DEBUG] [Thread-135775] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:28:47.935 [DEBUG] [Thread-135777 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:28:49.471 [DEBUG] [Thread-135778 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:29:04.522 [DEBUG] [Thread-135779 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:29:11.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T22:29:11.398 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T22:29:11.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T22:29:12.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 22, 28, 43), 4.95, 72.34, 0.0, 16.76, 15.81, 0, 0, 0, 2, 0, 0),)
2025-12-31T22:29:12.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 22:28:43
2025-12-31T22:29:12.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T22:29:12.399 [DEBUG] [Thread-135780] [transport.py] [_log()] starting thread (client mode): 0xb1764d30
2025-12-31T22:29:12.399 [DEBUG] [Thread-135780] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:29:12.420 [DEBUG] [Thread-135780] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T22:29:12.420 [INFO] [Thread-135780] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T22:29:12.421 [DEBUG] [Thread-135780] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:29:12.421 [DEBUG] [Thread-135780] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T22:29:12.421 [DEBUG] [Thread-135780] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:29:12.421 [DEBUG] [Thread-135780] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:29:12.421 [DEBUG] [Thread-135780] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:29:12.421 [DEBUG] [Thread-135780] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:29:12.421 [DEBUG] [Thread-135780] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:29:12.421 [DEBUG] [Thread-135780] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:29:12.421 [DEBUG] [Thread-135780] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:29:12.421 [DEBUG] [Thread-135780] [transport.py] [_log()] client lang: <none>
2025-12-31T22:29:12.421 [DEBUG] [Thread-135780] [transport.py] [_log()] server lang: <none>
2025-12-31T22:29:12.421 [DEBUG] [Thread-135780] [transport.py] [_log()] kex follows: False
2025-12-31T22:29:12.421 [DEBUG] [Thread-135780] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:29:12.421 [DEBUG] [Thread-135780] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:29:12.421 [DEBUG] [Thread-135780] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:29:12.421 [DEBUG] [Thread-135780] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:29:12.421 [DEBUG] [Thread-135780] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:29:12.421 [DEBUG] [Thread-135780] [transport.py] [_log()] Compression: none
2025-12-31T22:29:12.421 [DEBUG] [Thread-135780] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:29:12.428 [DEBUG] [Thread-135780] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:29:12.428 [DEBUG] [Thread-135780] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:29:12.428 [DEBUG] [Thread-135780] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T22:29:12.428 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T22:29:12.428 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:29:12.429 [DEBUG] [Thread-135780] [transport.py] [_log()] userauth is OK
2025-12-31T22:29:12.429 [DEBUG] [Thread-135780] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:29:12.429 [DEBUG] [Thread-135780] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:29:12.429 [DEBUG] [Thread-135780] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T22:29:12.429 [DEBUG] [Thread-135780] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:29:12.438 [INFO] [Thread-135780] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:29:12.439 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:29:13.034 [DEBUG] [Thread-135780] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:29:13.034 [DEBUG] [Thread-135780] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:29:13.035 [DEBUG] [Thread-135780] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T22:29:13.074 [DEBUG] [Thread-135780] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:29:13.075 [DEBUG] [Thread-135780] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:29:13.077 [DEBUG] [Thread-135780] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:29:13.088 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:29:13.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T22:29:13.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T22:29:13.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T22:29:13.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:29:13.093 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T22:29:13.093 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:29:13.093 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:29:13.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T22:29:13.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.853261 -999.00  +16.00  13.64     74  +11.50 1 3 1 1 1     0    0 3.79 -27.20 ----- 17.2 13.6 205.8 20.5 17.1 -10.9 17.0 -11.3 16.8 -10.5 17.1 -10.7
2025-12-31T22:29:13.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T22:29:13.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T22:29:13.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.853261
2025-12-31T22:29:13.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T22:29:13.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T22:29:13.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T22:29:13.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T22:29:13.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-31T22:29:13.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T22:28:43', tmtdew=4.95, humidity=72.34, cloud=0.0, wind=16.76, temperature=15.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T22:22:50', seeing=1.62, atlas_timestamp='2025-12-31T20:28:41.750', atlas_cloud=3, atlas_rain=1, zp_data=[0.2602499999999992, 0.44475000000000087, 0.7302500000000007, 0.22100000000000009, 0.665, 0.8302500000000013, 0.5669999999999993, 0.4302500000000009, 0.39949999999999974, 0.4095000000000013, 0.8602499999999988, 0.41999999999999993, 0.3490000000000002, 0.4262499999999996, 0.5399999999999991, 0.019000000000000128, 0.8522499999999997, 0.4294999999999991, 0.9249999999999989, 0.5342499999999992, 0.34750000000000014, 0.24074999999999847, -0.13574999999999982, -0.4472499999999986, 0.6789999999999994, nan, 1.1087499999999997, -0.8900000000000006, 0.2450000000000001, -0.4939999999999998, -1.2979999999999983, -1.4959999999999987, -0.4202500000000011], zp_timestamp='2025-12-31T20:15:00')
2025-12-31T22:29:13.094 [DEBUG] [Thread-135780] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:29:13.168 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T22:29:13.181 [DEBUG] [Thread-135783] [transport.py] [_log()] starting thread (client mode): 0xb1786740
2025-12-31T22:29:13.181 [DEBUG] [Thread-135783] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:29:13.196 [DEBUG] [Thread-135783] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T22:29:13.196 [INFO] [Thread-135783] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T22:29:13.204 [DEBUG] [Thread-135783] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:29:13.204 [DEBUG] [Thread-135783] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T22:29:13.204 [DEBUG] [Thread-135783] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:29:13.204 [DEBUG] [Thread-135783] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:29:13.204 [DEBUG] [Thread-135783] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:29:13.204 [DEBUG] [Thread-135783] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:29:13.204 [DEBUG] [Thread-135783] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:29:13.205 [DEBUG] [Thread-135783] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:29:13.205 [DEBUG] [Thread-135783] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:29:13.205 [DEBUG] [Thread-135783] [transport.py] [_log()] client lang: <none>
2025-12-31T22:29:13.205 [DEBUG] [Thread-135783] [transport.py] [_log()] server lang: <none>
2025-12-31T22:29:13.205 [DEBUG] [Thread-135783] [transport.py] [_log()] kex follows: False
2025-12-31T22:29:13.205 [DEBUG] [Thread-135783] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:29:13.205 [DEBUG] [Thread-135783] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:29:13.205 [DEBUG] [Thread-135783] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:29:13.205 [DEBUG] [Thread-135783] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:29:13.205 [DEBUG] [Thread-135783] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:29:13.205 [DEBUG] [Thread-135783] [transport.py] [_log()] Compression: none
2025-12-31T22:29:13.205 [DEBUG] [Thread-135783] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:29:13.261 [DEBUG] [Thread-135783] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:29:13.262 [DEBUG] [Thread-135783] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:29:13.263 [DEBUG] [Thread-135783] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T22:29:13.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T22:29:13.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:29:13.318 [DEBUG] [Thread-135783] [transport.py] [_log()] userauth is OK
2025-12-31T22:29:13.318 [DEBUG] [Thread-135783] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:29:13.318 [DEBUG] [Thread-135783] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:29:13.318 [DEBUG] [Thread-135783] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T22:29:13.319 [DEBUG] [Thread-135783] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:29:13.337 [INFO] [Thread-135783] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:29:13.337 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T22:29:13.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:29:14.133 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:29:14.134 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:29:14.156 [DEBUG] [Thread-135783] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:29:14.156 [DEBUG] [Thread-135783] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:29:14.204 [DEBUG] [Thread-135783] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:29:14.204 [DEBUG] [Thread-135783] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:29:14.214 [DEBUG] [Thread-135783] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:29:14.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:29:14.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T22:29:14.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T22:29:14.238 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:29:14.238 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:29:14.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:29:14.246 [DEBUG] [Thread-135783] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:29:19.554 [DEBUG] [Thread-135785 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:29:34.595 [DEBUG] [Thread-135786 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:29:44.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T22:29:44.267 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T22:29:44.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T22:29:44.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 22, 29, 15), 4.96, 72.28, 0.0, 17.61, 15.82, 0, 0, 0, 2, 0, 0),)
2025-12-31T22:29:44.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 22:29:15
2025-12-31T22:29:45.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T22:29:45.248 [DEBUG] [Thread-135787] [transport.py] [_log()] starting thread (client mode): 0xb95d4850
2025-12-31T22:29:45.248 [DEBUG] [Thread-135787] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:29:45.269 [DEBUG] [Thread-135787] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T22:29:45.270 [INFO] [Thread-135787] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T22:29:45.273 [DEBUG] [Thread-135787] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:29:45.273 [DEBUG] [Thread-135787] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T22:29:45.273 [DEBUG] [Thread-135787] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:29:45.273 [DEBUG] [Thread-135787] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:29:45.273 [DEBUG] [Thread-135787] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:29:45.273 [DEBUG] [Thread-135787] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:29:45.273 [DEBUG] [Thread-135787] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:29:45.273 [DEBUG] [Thread-135787] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:29:45.273 [DEBUG] [Thread-135787] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:29:45.273 [DEBUG] [Thread-135787] [transport.py] [_log()] client lang: <none>
2025-12-31T22:29:45.273 [DEBUG] [Thread-135787] [transport.py] [_log()] server lang: <none>
2025-12-31T22:29:45.273 [DEBUG] [Thread-135787] [transport.py] [_log()] kex follows: False
2025-12-31T22:29:45.273 [DEBUG] [Thread-135787] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:29:45.273 [DEBUG] [Thread-135787] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:29:45.273 [DEBUG] [Thread-135787] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:29:45.273 [DEBUG] [Thread-135787] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:29:45.273 [DEBUG] [Thread-135787] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:29:45.273 [DEBUG] [Thread-135787] [transport.py] [_log()] Compression: none
2025-12-31T22:29:45.273 [DEBUG] [Thread-135787] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:29:45.282 [DEBUG] [Thread-135787] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:29:45.282 [DEBUG] [Thread-135787] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:29:45.283 [DEBUG] [Thread-135787] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T22:29:45.283 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T22:29:45.283 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:29:45.284 [DEBUG] [Thread-135787] [transport.py] [_log()] userauth is OK
2025-12-31T22:29:45.285 [DEBUG] [Thread-135787] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:29:45.285 [DEBUG] [Thread-135787] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:29:45.285 [DEBUG] [Thread-135787] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T22:29:45.285 [DEBUG] [Thread-135787] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:29:45.303 [INFO] [Thread-135787] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:29:45.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:29:46.044 [DEBUG] [Thread-135787] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:29:46.044 [DEBUG] [Thread-135787] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:29:46.045 [DEBUG] [Thread-135787] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T22:29:46.085 [DEBUG] [Thread-135787] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:29:46.085 [DEBUG] [Thread-135787] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:29:46.088 [DEBUG] [Thread-135787] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:29:46.100 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:29:46.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T22:29:46.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T22:29:46.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T22:29:46.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:29:46.114 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T22:29:46.114 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:29:46.114 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:29:46.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T22:29:46.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.853609 -999.00  +16.00  13.11     74  +11.50 1 3 1 1 1     0    0 3.78 -28.14 ----- 7.1 13.1 224.7 22.1 17.1 -11.0 17.1 -11.0 16.9 -10.5 17.2 -10.6
2025-12-31T22:29:46.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T22:29:46.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T22:29:46.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.853609
2025-12-31T22:29:46.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T22:29:46.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T22:29:46.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T22:29:46.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T22:29:46.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-31T22:29:46.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T22:29:15', tmtdew=4.96, humidity=72.28, cloud=0.0, wind=17.61, temperature=15.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T22:22:50', seeing=1.62, atlas_timestamp='2025-12-31T20:29:11.818', atlas_cloud=3, atlas_rain=1, zp_data=[0.2602499999999992, 0.44475000000000087, 0.7302500000000007, 0.22100000000000009, 0.665, 0.8302500000000013, 0.5669999999999993, 0.4302500000000009, 0.39949999999999974, 0.4095000000000013, 0.8602499999999988, 0.41999999999999993, 0.3490000000000002, 0.4262499999999996, 0.5399999999999991, 0.019000000000000128, 0.8522499999999997, 0.4294999999999991, 0.9249999999999989, 0.5342499999999992, 0.34750000000000014, 0.24074999999999847, -0.13574999999999982, -0.4472499999999986, 0.6789999999999994, nan, 1.1087499999999997, -0.8900000000000006, 0.2450000000000001, -0.4939999999999998, -1.2979999999999983, -1.4959999999999987, -0.4202500000000011], zp_timestamp='2025-12-31T20:15:00')
2025-12-31T22:29:46.117 [DEBUG] [Thread-135787] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:29:46.196 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T22:29:46.207 [DEBUG] [Thread-135790] [transport.py] [_log()] starting thread (client mode): 0xb6bbafb0
2025-12-31T22:29:46.207 [DEBUG] [Thread-135790] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:29:46.222 [DEBUG] [Thread-135790] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T22:29:46.222 [INFO] [Thread-135790] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T22:29:46.230 [DEBUG] [Thread-135790] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:29:46.230 [DEBUG] [Thread-135790] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T22:29:46.230 [DEBUG] [Thread-135790] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:29:46.230 [DEBUG] [Thread-135790] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:29:46.231 [DEBUG] [Thread-135790] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:29:46.231 [DEBUG] [Thread-135790] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:29:46.231 [DEBUG] [Thread-135790] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:29:46.231 [DEBUG] [Thread-135790] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:29:46.231 [DEBUG] [Thread-135790] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:29:46.231 [DEBUG] [Thread-135790] [transport.py] [_log()] client lang: <none>
2025-12-31T22:29:46.231 [DEBUG] [Thread-135790] [transport.py] [_log()] server lang: <none>
2025-12-31T22:29:46.231 [DEBUG] [Thread-135790] [transport.py] [_log()] kex follows: False
2025-12-31T22:29:46.232 [DEBUG] [Thread-135790] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:29:46.232 [DEBUG] [Thread-135790] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:29:46.232 [DEBUG] [Thread-135790] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:29:46.232 [DEBUG] [Thread-135790] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:29:46.232 [DEBUG] [Thread-135790] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:29:46.232 [DEBUG] [Thread-135790] [transport.py] [_log()] Compression: none
2025-12-31T22:29:46.232 [DEBUG] [Thread-135790] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:29:46.290 [DEBUG] [Thread-135790] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:29:46.291 [DEBUG] [Thread-135790] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:29:46.292 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T22:29:46.293 [DEBUG] [Thread-135790] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T22:29:46.294 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:29:46.346 [DEBUG] [Thread-135790] [transport.py] [_log()] userauth is OK
2025-12-31T22:29:46.346 [DEBUG] [Thread-135790] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:29:46.347 [DEBUG] [Thread-135790] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:29:46.347 [DEBUG] [Thread-135790] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T22:29:46.347 [DEBUG] [Thread-135790] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:29:46.366 [INFO] [Thread-135790] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:29:46.366 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T22:29:46.367 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:29:47.222 [DEBUG] [Thread-135790] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:29:47.223 [DEBUG] [Thread-135790] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:29:47.271 [DEBUG] [Thread-135790] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:29:47.271 [DEBUG] [Thread-135790] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:29:47.280 [DEBUG] [Thread-135790] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:29:47.289 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:29:47.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T22:29:47.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T22:29:47.308 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:29:47.308 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:29:47.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:29:47.317 [DEBUG] [Thread-135790] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:29:48.015 [DEBUG] [Thread-135792 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:29:49.631 [DEBUG] [Thread-135793 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:30:04.679 [DEBUG] [Thread-135794 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:30:14.342 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:30:14.343 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:30:17.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T22:30:17.340 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T22:30:17.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T22:30:18.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 22, 29, 47), 5.02, 71.76, 0.0, 16.96, 15.82, 0, 0, 0, 2, 0, 0),)
2025-12-31T22:30:18.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 22:29:47
2025-12-31T22:30:18.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T22:30:18.351 [DEBUG] [Thread-135795] [transport.py] [_log()] starting thread (client mode): 0xb17acb50
2025-12-31T22:30:18.351 [DEBUG] [Thread-135795] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:30:18.370 [DEBUG] [Thread-135795] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T22:30:18.370 [INFO] [Thread-135795] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T22:30:18.373 [DEBUG] [Thread-135795] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:30:18.373 [DEBUG] [Thread-135795] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T22:30:18.373 [DEBUG] [Thread-135795] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:30:18.373 [DEBUG] [Thread-135795] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:30:18.373 [DEBUG] [Thread-135795] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:30:18.374 [DEBUG] [Thread-135795] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:30:18.374 [DEBUG] [Thread-135795] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:30:18.374 [DEBUG] [Thread-135795] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:30:18.374 [DEBUG] [Thread-135795] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:30:18.374 [DEBUG] [Thread-135795] [transport.py] [_log()] client lang: <none>
2025-12-31T22:30:18.374 [DEBUG] [Thread-135795] [transport.py] [_log()] server lang: <none>
2025-12-31T22:30:18.374 [DEBUG] [Thread-135795] [transport.py] [_log()] kex follows: False
2025-12-31T22:30:18.374 [DEBUG] [Thread-135795] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:30:18.374 [DEBUG] [Thread-135795] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:30:18.374 [DEBUG] [Thread-135795] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:30:18.374 [DEBUG] [Thread-135795] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:30:18.374 [DEBUG] [Thread-135795] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:30:18.374 [DEBUG] [Thread-135795] [transport.py] [_log()] Compression: none
2025-12-31T22:30:18.375 [DEBUG] [Thread-135795] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:30:18.392 [DEBUG] [Thread-135795] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:30:18.393 [DEBUG] [Thread-135795] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:30:18.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T22:30:18.394 [DEBUG] [Thread-135795] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T22:30:18.395 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:30:18.396 [DEBUG] [Thread-135795] [transport.py] [_log()] userauth is OK
2025-12-31T22:30:18.396 [DEBUG] [Thread-135795] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:30:18.396 [DEBUG] [Thread-135795] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:30:18.396 [DEBUG] [Thread-135795] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T22:30:18.396 [DEBUG] [Thread-135795] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:30:18.413 [INFO] [Thread-135795] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:30:18.413 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:30:19.044 [DEBUG] [Thread-135795] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:30:19.044 [DEBUG] [Thread-135795] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:30:19.045 [DEBUG] [Thread-135795] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T22:30:19.085 [DEBUG] [Thread-135795] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:30:19.085 [DEBUG] [Thread-135795] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:30:19.087 [DEBUG] [Thread-135795] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:30:19.100 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:30:19.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T22:30:19.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T22:30:19.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T22:30:19.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:30:19.109 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T22:30:19.110 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:30:19.110 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:30:19.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T22:30:19.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.853956 -999.00  +16.00  11.89     74  +11.50 1 3 1 1 1     0    0 3.78 -27.37 ----- 11.5 11.9 186.6 15.9 17.2 -10.8 17.1 -10.7 16.9 -10.3 17.2 -10.2
2025-12-31T22:30:19.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T22:30:19.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T22:30:19.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.853956
2025-12-31T22:30:19.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T22:30:19.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T22:30:19.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T22:30:19.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T22:30:19.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-31T22:30:19.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T22:29:47', tmtdew=5.02, humidity=71.76, cloud=0.0, wind=16.96, temperature=15.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T22:22:50', seeing=1.62, atlas_timestamp='2025-12-31T20:29:41.798', atlas_cloud=3, atlas_rain=1, zp_data=[0.2602499999999992, 0.44475000000000087, 0.7302500000000007, 0.22100000000000009, 0.665, 0.8302500000000013, 0.5669999999999993, 0.4302500000000009, 0.39949999999999974, 0.4095000000000013, 0.8602499999999988, 0.41999999999999993, 0.3490000000000002, 0.4262499999999996, 0.5399999999999991, 0.019000000000000128, 0.8522499999999997, 0.4294999999999991, 0.9249999999999989, 0.5342499999999992, 0.34750000000000014, 0.24074999999999847, -0.13574999999999982, -0.4472499999999986, 0.6789999999999994, nan, 1.1087499999999997, -0.8900000000000006, 0.2450000000000001, -0.4939999999999998, -1.2979999999999983, -1.4959999999999987, -0.4202500000000011], zp_timestamp='2025-12-31T20:15:00')
2025-12-31T22:30:19.112 [DEBUG] [Thread-135795] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:30:19.195 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T22:30:19.209 [DEBUG] [Thread-135798] [transport.py] [_log()] starting thread (client mode): 0xb17969e0
2025-12-31T22:30:19.210 [DEBUG] [Thread-135798] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:30:19.224 [DEBUG] [Thread-135798] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T22:30:19.224 [INFO] [Thread-135798] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T22:30:19.232 [DEBUG] [Thread-135798] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:30:19.232 [DEBUG] [Thread-135798] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T22:30:19.232 [DEBUG] [Thread-135798] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:30:19.232 [DEBUG] [Thread-135798] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:30:19.232 [DEBUG] [Thread-135798] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:30:19.232 [DEBUG] [Thread-135798] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:30:19.232 [DEBUG] [Thread-135798] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:30:19.232 [DEBUG] [Thread-135798] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:30:19.232 [DEBUG] [Thread-135798] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:30:19.232 [DEBUG] [Thread-135798] [transport.py] [_log()] client lang: <none>
2025-12-31T22:30:19.232 [DEBUG] [Thread-135798] [transport.py] [_log()] server lang: <none>
2025-12-31T22:30:19.232 [DEBUG] [Thread-135798] [transport.py] [_log()] kex follows: False
2025-12-31T22:30:19.232 [DEBUG] [Thread-135798] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:30:19.233 [DEBUG] [Thread-135798] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:30:19.233 [DEBUG] [Thread-135798] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:30:19.233 [DEBUG] [Thread-135798] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:30:19.233 [DEBUG] [Thread-135798] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:30:19.233 [DEBUG] [Thread-135798] [transport.py] [_log()] Compression: none
2025-12-31T22:30:19.233 [DEBUG] [Thread-135798] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:30:19.290 [DEBUG] [Thread-135798] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:30:19.290 [DEBUG] [Thread-135798] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:30:19.291 [DEBUG] [Thread-135798] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T22:30:19.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T22:30:19.292 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:30:19.346 [DEBUG] [Thread-135798] [transport.py] [_log()] userauth is OK
2025-12-31T22:30:19.346 [DEBUG] [Thread-135798] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:30:19.347 [DEBUG] [Thread-135798] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:30:19.347 [DEBUG] [Thread-135798] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T22:30:19.347 [DEBUG] [Thread-135798] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:30:19.366 [INFO] [Thread-135798] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:30:19.366 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T22:30:19.367 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:30:19.714 [DEBUG] [Thread-135800 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:30:20.199 [DEBUG] [Thread-135798] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:30:20.199 [DEBUG] [Thread-135798] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:30:20.246 [DEBUG] [Thread-135798] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:30:20.246 [DEBUG] [Thread-135798] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:30:20.254 [DEBUG] [Thread-135798] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:30:20.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:30:20.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T22:30:20.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T22:30:20.278 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:30:20.278 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:30:20.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:30:20.286 [DEBUG] [Thread-135798] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:30:34.750 [DEBUG] [Thread-135801 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:30:48.092 [DEBUG] [Thread-135802 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:30:49.784 [DEBUG] [Thread-135803 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:30:50.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T22:30:50.301 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T22:30:50.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T22:30:51.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 22, 30, 19), 5.03, 71.71, 0.0, 19.11, 15.82, 0, 0, 0, 2, 0, 0),)
2025-12-31T22:30:51.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 22:30:19
2025-12-31T22:30:51.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T22:30:51.300 [DEBUG] [Thread-135804] [transport.py] [_log()] starting thread (client mode): 0xb17afcd0
2025-12-31T22:30:51.300 [DEBUG] [Thread-135804] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:30:51.320 [DEBUG] [Thread-135804] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T22:30:51.321 [INFO] [Thread-135804] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T22:30:51.324 [DEBUG] [Thread-135804] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:30:51.325 [DEBUG] [Thread-135804] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T22:30:51.325 [DEBUG] [Thread-135804] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:30:51.325 [DEBUG] [Thread-135804] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:30:51.325 [DEBUG] [Thread-135804] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:30:51.325 [DEBUG] [Thread-135804] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:30:51.325 [DEBUG] [Thread-135804] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:30:51.325 [DEBUG] [Thread-135804] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:30:51.325 [DEBUG] [Thread-135804] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:30:51.325 [DEBUG] [Thread-135804] [transport.py] [_log()] client lang: <none>
2025-12-31T22:30:51.325 [DEBUG] [Thread-135804] [transport.py] [_log()] server lang: <none>
2025-12-31T22:30:51.325 [DEBUG] [Thread-135804] [transport.py] [_log()] kex follows: False
2025-12-31T22:30:51.325 [DEBUG] [Thread-135804] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:30:51.326 [DEBUG] [Thread-135804] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:30:51.326 [DEBUG] [Thread-135804] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:30:51.326 [DEBUG] [Thread-135804] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:30:51.326 [DEBUG] [Thread-135804] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:30:51.326 [DEBUG] [Thread-135804] [transport.py] [_log()] Compression: none
2025-12-31T22:30:51.326 [DEBUG] [Thread-135804] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:30:51.344 [DEBUG] [Thread-135804] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:30:51.345 [DEBUG] [Thread-135804] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:30:51.346 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T22:30:51.346 [DEBUG] [Thread-135804] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T22:30:51.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:30:51.348 [DEBUG] [Thread-135804] [transport.py] [_log()] userauth is OK
2025-12-31T22:30:51.348 [DEBUG] [Thread-135804] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:30:51.349 [DEBUG] [Thread-135804] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:30:51.349 [DEBUG] [Thread-135804] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T22:30:51.349 [DEBUG] [Thread-135804] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:30:51.373 [INFO] [Thread-135804] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:30:51.374 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:30:52.042 [DEBUG] [Thread-135804] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:30:52.042 [DEBUG] [Thread-135804] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:30:52.042 [DEBUG] [Thread-135804] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T22:30:52.083 [DEBUG] [Thread-135804] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:30:52.083 [DEBUG] [Thread-135804] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:30:52.085 [DEBUG] [Thread-135804] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:30:52.097 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:30:52.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T22:30:52.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T22:30:52.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T22:30:52.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:30:52.103 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T22:30:52.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:30:52.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:30:52.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T22:30:52.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.854303 -999.00  +16.10  14.07     74  +11.50 1 3 1 1 1     0    0 3.90 -26.52 ----- 14.9 14.1 196.8 17.7 17.2 -10.7 17.0 -11.1 16.9 -10.2 17.2 -10.2
2025-12-31T22:30:52.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T22:30:52.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T22:30:52.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.854303
2025-12-31T22:30:52.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T22:30:52.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T22:30:52.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T22:30:52.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T22:30:52.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-31T22:30:52.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T22:30:19', tmtdew=5.03, humidity=71.71, cloud=0.0, wind=19.11, temperature=15.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T22:22:50', seeing=1.62, atlas_timestamp='2025-12-31T20:30:11.779', atlas_cloud=3, atlas_rain=1, zp_data=[0.2602499999999992, 0.44475000000000087, 0.7302500000000007, 0.22100000000000009, 0.665, 0.8302500000000013, 0.5669999999999993, 0.4302500000000009, 0.39949999999999974, 0.4095000000000013, 0.8602499999999988, 0.41999999999999993, 0.3490000000000002, 0.4262499999999996, 0.5399999999999991, 0.019000000000000128, 0.8522499999999997, 0.4294999999999991, 0.9249999999999989, 0.5342499999999992, 0.34750000000000014, 0.24074999999999847, -0.13574999999999982, -0.4472499999999986, 0.6789999999999994, nan, 1.1087499999999997, -0.8900000000000006, 0.2450000000000001, -0.4939999999999998, -1.2979999999999983, -1.4959999999999987, -0.4202500000000011], zp_timestamp='2025-12-31T20:15:00')
2025-12-31T22:30:52.104 [DEBUG] [Thread-135804] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:30:52.178 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T22:30:52.189 [DEBUG] [Thread-135807] [transport.py] [_log()] starting thread (client mode): 0xb17af4c0
2025-12-31T22:30:52.190 [DEBUG] [Thread-135807] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:30:52.205 [DEBUG] [Thread-135807] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T22:30:52.205 [INFO] [Thread-135807] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T22:30:52.212 [DEBUG] [Thread-135807] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:30:52.212 [DEBUG] [Thread-135807] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T22:30:52.212 [DEBUG] [Thread-135807] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:30:52.212 [DEBUG] [Thread-135807] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:30:52.212 [DEBUG] [Thread-135807] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:30:52.212 [DEBUG] [Thread-135807] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:30:52.212 [DEBUG] [Thread-135807] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:30:52.212 [DEBUG] [Thread-135807] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:30:52.212 [DEBUG] [Thread-135807] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:30:52.212 [DEBUG] [Thread-135807] [transport.py] [_log()] client lang: <none>
2025-12-31T22:30:52.212 [DEBUG] [Thread-135807] [transport.py] [_log()] server lang: <none>
2025-12-31T22:30:52.212 [DEBUG] [Thread-135807] [transport.py] [_log()] kex follows: False
2025-12-31T22:30:52.212 [DEBUG] [Thread-135807] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:30:52.212 [DEBUG] [Thread-135807] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:30:52.213 [DEBUG] [Thread-135807] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:30:52.213 [DEBUG] [Thread-135807] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:30:52.213 [DEBUG] [Thread-135807] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:30:52.213 [DEBUG] [Thread-135807] [transport.py] [_log()] Compression: none
2025-12-31T22:30:52.213 [DEBUG] [Thread-135807] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:30:52.272 [DEBUG] [Thread-135807] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:30:52.272 [DEBUG] [Thread-135807] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:30:52.272 [DEBUG] [Thread-135807] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T22:30:52.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T22:30:52.273 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:30:52.329 [DEBUG] [Thread-135807] [transport.py] [_log()] userauth is OK
2025-12-31T22:30:52.329 [DEBUG] [Thread-135807] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:30:52.329 [DEBUG] [Thread-135807] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:30:52.329 [DEBUG] [Thread-135807] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T22:30:52.329 [DEBUG] [Thread-135807] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:30:52.347 [INFO] [Thread-135807] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:30:52.347 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T22:30:52.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:30:53.196 [DEBUG] [Thread-135807] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:30:53.196 [DEBUG] [Thread-135807] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:30:53.244 [DEBUG] [Thread-135807] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:30:53.245 [DEBUG] [Thread-135807] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:30:53.253 [DEBUG] [Thread-135807] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:30:53.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:30:53.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T22:30:53.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T22:30:53.277 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:30:53.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:30:53.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:30:53.285 [DEBUG] [Thread-135807] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:31:04.816 [DEBUG] [Thread-135809 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:31:14.565 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:31:14.566 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:31:19.869 [DEBUG] [Thread-135810 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:31:23.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T22:31:23.307 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T22:31:23.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T22:31:24.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 22, 30, 51), 5.03, 71.71, 0.0, 18.07, 15.79, 0, 0, 0, 2, 0, 0),)
2025-12-31T22:31:24.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 22:30:51
2025-12-31T22:31:24.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T22:31:24.333 [DEBUG] [Thread-135811] [transport.py] [_log()] starting thread (client mode): 0xb17ae2c0
2025-12-31T22:31:24.333 [DEBUG] [Thread-135811] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:31:24.354 [DEBUG] [Thread-135811] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T22:31:24.354 [INFO] [Thread-135811] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T22:31:24.357 [DEBUG] [Thread-135811] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:31:24.357 [DEBUG] [Thread-135811] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T22:31:24.358 [DEBUG] [Thread-135811] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:31:24.358 [DEBUG] [Thread-135811] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:31:24.358 [DEBUG] [Thread-135811] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:31:24.358 [DEBUG] [Thread-135811] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:31:24.358 [DEBUG] [Thread-135811] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:31:24.358 [DEBUG] [Thread-135811] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:31:24.358 [DEBUG] [Thread-135811] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:31:24.358 [DEBUG] [Thread-135811] [transport.py] [_log()] client lang: <none>
2025-12-31T22:31:24.358 [DEBUG] [Thread-135811] [transport.py] [_log()] server lang: <none>
2025-12-31T22:31:24.358 [DEBUG] [Thread-135811] [transport.py] [_log()] kex follows: False
2025-12-31T22:31:24.358 [DEBUG] [Thread-135811] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:31:24.358 [DEBUG] [Thread-135811] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:31:24.358 [DEBUG] [Thread-135811] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:31:24.358 [DEBUG] [Thread-135811] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:31:24.358 [DEBUG] [Thread-135811] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:31:24.358 [DEBUG] [Thread-135811] [transport.py] [_log()] Compression: none
2025-12-31T22:31:24.358 [DEBUG] [Thread-135811] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:31:24.373 [DEBUG] [Thread-135811] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:31:24.374 [DEBUG] [Thread-135811] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:31:24.374 [DEBUG] [Thread-135811] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T22:31:24.374 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T22:31:24.374 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:31:24.375 [DEBUG] [Thread-135811] [transport.py] [_log()] userauth is OK
2025-12-31T22:31:24.375 [DEBUG] [Thread-135811] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:31:24.375 [DEBUG] [Thread-135811] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:31:24.375 [DEBUG] [Thread-135811] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T22:31:24.375 [DEBUG] [Thread-135811] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:31:24.404 [INFO] [Thread-135811] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:31:24.404 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:31:24.999 [DEBUG] [Thread-135811] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:31:24.999 [DEBUG] [Thread-135811] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:31:24.999 [DEBUG] [Thread-135811] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T22:31:25.039 [DEBUG] [Thread-135811] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:31:25.040 [DEBUG] [Thread-135811] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:31:25.042 [DEBUG] [Thread-135811] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:31:25.055 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:31:25.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T22:31:25.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T22:31:25.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T22:31:25.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:31:25.061 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T22:31:25.061 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:31:25.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:31:25.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T22:31:25.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.854997 -999.00  +16.10  17.60     74  +11.50 1 3 1 1 1     0    0 4.01 -23.61 ----- 12.0 17.6 194.4 19.3 17.2 -10.6 17.1 -10.7 16.9 -10.1 17.2 -10.3
2025-12-31T22:31:25.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T22:31:25.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T22:31:25.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.854997
2025-12-31T22:31:25.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T22:31:25.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T22:31:25.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T22:31:25.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T22:31:25.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-31T22:31:25.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T22:30:51', tmtdew=5.03, humidity=71.71, cloud=0.0, wind=18.07, temperature=15.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T22:22:50', seeing=1.62, atlas_timestamp='2025-12-31T20:31:11.741', atlas_cloud=3, atlas_rain=1, zp_data=[0.2602499999999992, 0.44475000000000087, 0.7302500000000007, 0.22100000000000009, 0.665, 0.8302500000000013, 0.5669999999999993, 0.4302500000000009, 0.39949999999999974, 0.4095000000000013, 0.8602499999999988, 0.41999999999999993, 0.3490000000000002, 0.4262499999999996, 0.5399999999999991, 0.019000000000000128, 0.8522499999999997, 0.4294999999999991, 0.9249999999999989, 0.5342499999999992, 0.34750000000000014, 0.24074999999999847, -0.13574999999999982, -0.4472499999999986, 0.6789999999999994, nan, 1.1087499999999997, -0.8900000000000006, 0.2450000000000001, -0.4939999999999998, -1.2979999999999983, -1.4959999999999987, -0.4202500000000011], zp_timestamp='2025-12-31T20:15:00')
2025-12-31T22:31:25.062 [DEBUG] [Thread-135811] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:31:25.136 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T22:31:25.148 [DEBUG] [Thread-135814] [transport.py] [_log()] starting thread (client mode): 0xb1759d50
2025-12-31T22:31:25.148 [DEBUG] [Thread-135814] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:31:25.168 [DEBUG] [Thread-135814] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T22:31:25.168 [INFO] [Thread-135814] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T22:31:25.176 [DEBUG] [Thread-135814] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:31:25.176 [DEBUG] [Thread-135814] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T22:31:25.176 [DEBUG] [Thread-135814] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:31:25.176 [DEBUG] [Thread-135814] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:31:25.176 [DEBUG] [Thread-135814] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:31:25.176 [DEBUG] [Thread-135814] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:31:25.176 [DEBUG] [Thread-135814] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:31:25.176 [DEBUG] [Thread-135814] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:31:25.176 [DEBUG] [Thread-135814] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:31:25.176 [DEBUG] [Thread-135814] [transport.py] [_log()] client lang: <none>
2025-12-31T22:31:25.176 [DEBUG] [Thread-135814] [transport.py] [_log()] server lang: <none>
2025-12-31T22:31:25.176 [DEBUG] [Thread-135814] [transport.py] [_log()] kex follows: False
2025-12-31T22:31:25.176 [DEBUG] [Thread-135814] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:31:25.176 [DEBUG] [Thread-135814] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:31:25.176 [DEBUG] [Thread-135814] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:31:25.176 [DEBUG] [Thread-135814] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:31:25.176 [DEBUG] [Thread-135814] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:31:25.176 [DEBUG] [Thread-135814] [transport.py] [_log()] Compression: none
2025-12-31T22:31:25.176 [DEBUG] [Thread-135814] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:31:25.237 [DEBUG] [Thread-135814] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:31:25.237 [DEBUG] [Thread-135814] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:31:25.237 [DEBUG] [Thread-135814] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T22:31:25.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T22:31:25.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:31:25.297 [DEBUG] [Thread-135814] [transport.py] [_log()] userauth is OK
2025-12-31T22:31:25.297 [DEBUG] [Thread-135814] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:31:25.297 [DEBUG] [Thread-135814] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:31:25.297 [DEBUG] [Thread-135814] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T22:31:25.297 [DEBUG] [Thread-135814] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:31:25.311 [INFO] [Thread-135814] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:31:25.311 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T22:31:25.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:31:26.150 [DEBUG] [Thread-135814] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:31:26.150 [DEBUG] [Thread-135814] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:31:26.198 [DEBUG] [Thread-135814] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:31:26.198 [DEBUG] [Thread-135814] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:31:26.207 [DEBUG] [Thread-135814] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:31:26.216 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:31:26.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T22:31:26.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T22:31:26.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:31:26.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:31:26.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:31:26.243 [DEBUG] [Thread-135814] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:31:34.907 [DEBUG] [Thread-135816 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:31:48.188 [DEBUG] [Thread-135817 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:31:49.958 [DEBUG] [Thread-135818 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:31:56.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T22:31:56.245 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T22:31:56.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T22:31:57.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 22, 31, 23), 5.03, 71.69, 0.0, 19.97, 15.82, 0, 0, 0, 2, 0, 0),)
2025-12-31T22:31:57.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 22:31:23
2025-12-31T22:31:57.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T22:31:57.332 [DEBUG] [Thread-135819] [transport.py] [_log()] starting thread (client mode): 0xb1797ee0
2025-12-31T22:31:57.332 [DEBUG] [Thread-135819] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:31:57.352 [DEBUG] [Thread-135819] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T22:31:57.352 [INFO] [Thread-135819] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T22:31:57.355 [DEBUG] [Thread-135819] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:31:57.355 [DEBUG] [Thread-135819] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T22:31:57.355 [DEBUG] [Thread-135819] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:31:57.355 [DEBUG] [Thread-135819] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:31:57.355 [DEBUG] [Thread-135819] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:31:57.355 [DEBUG] [Thread-135819] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:31:57.355 [DEBUG] [Thread-135819] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:31:57.355 [DEBUG] [Thread-135819] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:31:57.355 [DEBUG] [Thread-135819] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:31:57.355 [DEBUG] [Thread-135819] [transport.py] [_log()] client lang: <none>
2025-12-31T22:31:57.355 [DEBUG] [Thread-135819] [transport.py] [_log()] server lang: <none>
2025-12-31T22:31:57.355 [DEBUG] [Thread-135819] [transport.py] [_log()] kex follows: False
2025-12-31T22:31:57.355 [DEBUG] [Thread-135819] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:31:57.355 [DEBUG] [Thread-135819] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:31:57.355 [DEBUG] [Thread-135819] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:31:57.355 [DEBUG] [Thread-135819] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:31:57.355 [DEBUG] [Thread-135819] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:31:57.355 [DEBUG] [Thread-135819] [transport.py] [_log()] Compression: none
2025-12-31T22:31:57.355 [DEBUG] [Thread-135819] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:31:57.370 [DEBUG] [Thread-135819] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:31:57.371 [DEBUG] [Thread-135819] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:31:57.371 [DEBUG] [Thread-135819] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T22:31:57.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T22:31:57.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:31:57.412 [DEBUG] [Thread-135819] [transport.py] [_log()] userauth is OK
2025-12-31T22:31:57.412 [DEBUG] [Thread-135819] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:31:57.412 [DEBUG] [Thread-135819] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:31:57.412 [DEBUG] [Thread-135819] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T22:31:57.413 [DEBUG] [Thread-135819] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:31:57.428 [INFO] [Thread-135819] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:31:57.428 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:31:58.069 [DEBUG] [Thread-135819] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:31:58.069 [DEBUG] [Thread-135819] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:31:58.070 [DEBUG] [Thread-135819] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T22:31:58.110 [DEBUG] [Thread-135819] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:31:58.110 [DEBUG] [Thread-135819] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:31:58.112 [DEBUG] [Thread-135819] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:31:58.124 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:31:58.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T22:31:58.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T22:31:58.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T22:31:58.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:31:58.134 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T22:31:58.134 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:31:58.134 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:31:58.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T22:31:58.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.855345 -999.00  +16.10   7.65     74  +11.50 1 3 1 1 1     0    0 3.83 -24.61 ----- 9.5 7.7 206.3 16.8 17.2 -10.5 17.1 -10.7 16.9 -10.2 17.2 -10.1
2025-12-31T22:31:58.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T22:31:58.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T22:31:58.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.855345
2025-12-31T22:31:58.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T22:31:58.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T22:31:58.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T22:31:58.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T22:31:58.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-31T22:31:58.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T22:31:23', tmtdew=5.03, humidity=71.69, cloud=0.0, wind=19.97, temperature=15.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T22:22:50', seeing=1.62, atlas_timestamp='2025-12-31T20:31:41.808', atlas_cloud=3, atlas_rain=1, zp_data=[0.2602499999999992, 0.44475000000000087, 0.7302500000000007, 0.22100000000000009, 0.665, 0.8302500000000013, 0.5669999999999993, 0.4302500000000009, 0.39949999999999974, 0.4095000000000013, 0.8602499999999988, 0.41999999999999993, 0.3490000000000002, 0.4262499999999996, 0.5399999999999991, 0.019000000000000128, 0.8522499999999997, 0.4294999999999991, 0.9249999999999989, 0.5342499999999992, 0.34750000000000014, 0.24074999999999847, -0.13574999999999982, -0.4472499999999986, 0.6789999999999994, nan, 1.1087499999999997, -0.8900000000000006, 0.2450000000000001, -0.4939999999999998, -1.2979999999999983, -1.4959999999999987, -0.4202500000000011], zp_timestamp='2025-12-31T20:15:00')
2025-12-31T22:31:58.136 [DEBUG] [Thread-135819] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:31:58.219 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T22:31:58.231 [DEBUG] [Thread-135822] [transport.py] [_log()] starting thread (client mode): 0xb6bbfb50
2025-12-31T22:31:58.231 [DEBUG] [Thread-135822] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:31:58.248 [DEBUG] [Thread-135822] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T22:31:58.249 [INFO] [Thread-135822] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T22:31:58.257 [DEBUG] [Thread-135822] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:31:58.257 [DEBUG] [Thread-135822] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T22:31:58.257 [DEBUG] [Thread-135822] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:31:58.257 [DEBUG] [Thread-135822] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:31:58.257 [DEBUG] [Thread-135822] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:31:58.257 [DEBUG] [Thread-135822] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:31:58.258 [DEBUG] [Thread-135822] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:31:58.258 [DEBUG] [Thread-135822] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:31:58.258 [DEBUG] [Thread-135822] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:31:58.258 [DEBUG] [Thread-135822] [transport.py] [_log()] client lang: <none>
2025-12-31T22:31:58.258 [DEBUG] [Thread-135822] [transport.py] [_log()] server lang: <none>
2025-12-31T22:31:58.258 [DEBUG] [Thread-135822] [transport.py] [_log()] kex follows: False
2025-12-31T22:31:58.258 [DEBUG] [Thread-135822] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:31:58.258 [DEBUG] [Thread-135822] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:31:58.259 [DEBUG] [Thread-135822] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:31:58.259 [DEBUG] [Thread-135822] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:31:58.259 [DEBUG] [Thread-135822] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:31:58.259 [DEBUG] [Thread-135822] [transport.py] [_log()] Compression: none
2025-12-31T22:31:58.260 [DEBUG] [Thread-135822] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:31:58.317 [DEBUG] [Thread-135822] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:31:58.317 [DEBUG] [Thread-135822] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:31:58.318 [DEBUG] [Thread-135822] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T22:31:58.318 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T22:31:58.319 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:31:58.376 [DEBUG] [Thread-135822] [transport.py] [_log()] userauth is OK
2025-12-31T22:31:58.376 [DEBUG] [Thread-135822] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:31:58.376 [DEBUG] [Thread-135822] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:31:58.376 [DEBUG] [Thread-135822] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T22:31:58.377 [DEBUG] [Thread-135822] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:31:58.396 [INFO] [Thread-135822] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:31:58.396 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T22:31:58.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:31:59.296 [DEBUG] [Thread-135822] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:31:59.297 [DEBUG] [Thread-135822] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:31:59.345 [DEBUG] [Thread-135822] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:31:59.345 [DEBUG] [Thread-135822] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:31:59.355 [DEBUG] [Thread-135822] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:31:59.364 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:31:59.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T22:31:59.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T22:31:59.384 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:31:59.384 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:31:59.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:31:59.393 [DEBUG] [Thread-135822] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:32:04.990 [DEBUG] [Thread-135824 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:32:14.767 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:32:14.768 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:32:20.047 [DEBUG] [Thread-135825 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:32:29.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T22:32:29.415 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T22:32:29.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T22:32:30.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 22, 31, 55), 5.02, 71.74, 0.0, 19.34, 15.77, 0, 0, 0, 2, 0, 0),)
2025-12-31T22:32:30.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 22:31:55
2025-12-31T22:32:30.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T22:32:30.451 [DEBUG] [Thread-135826] [transport.py] [_log()] starting thread (client mode): 0xb17ad960
2025-12-31T22:32:30.451 [DEBUG] [Thread-135826] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:32:30.471 [DEBUG] [Thread-135826] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T22:32:30.471 [INFO] [Thread-135826] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T22:32:30.475 [DEBUG] [Thread-135826] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:32:30.475 [DEBUG] [Thread-135826] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T22:32:30.475 [DEBUG] [Thread-135826] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:32:30.475 [DEBUG] [Thread-135826] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:32:30.475 [DEBUG] [Thread-135826] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:32:30.475 [DEBUG] [Thread-135826] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:32:30.475 [DEBUG] [Thread-135826] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:32:30.475 [DEBUG] [Thread-135826] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:32:30.475 [DEBUG] [Thread-135826] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:32:30.475 [DEBUG] [Thread-135826] [transport.py] [_log()] client lang: <none>
2025-12-31T22:32:30.475 [DEBUG] [Thread-135826] [transport.py] [_log()] server lang: <none>
2025-12-31T22:32:30.475 [DEBUG] [Thread-135826] [transport.py] [_log()] kex follows: False
2025-12-31T22:32:30.475 [DEBUG] [Thread-135826] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:32:30.475 [DEBUG] [Thread-135826] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:32:30.475 [DEBUG] [Thread-135826] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:32:30.475 [DEBUG] [Thread-135826] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:32:30.475 [DEBUG] [Thread-135826] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:32:30.475 [DEBUG] [Thread-135826] [transport.py] [_log()] Compression: none
2025-12-31T22:32:30.475 [DEBUG] [Thread-135826] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:32:30.492 [DEBUG] [Thread-135826] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:32:30.492 [DEBUG] [Thread-135826] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:32:30.492 [DEBUG] [Thread-135826] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T22:32:30.492 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T22:32:30.492 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:32:30.494 [DEBUG] [Thread-135826] [transport.py] [_log()] userauth is OK
2025-12-31T22:32:30.494 [DEBUG] [Thread-135826] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:32:30.494 [DEBUG] [Thread-135826] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:32:30.494 [DEBUG] [Thread-135826] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T22:32:30.494 [DEBUG] [Thread-135826] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:32:30.503 [INFO] [Thread-135826] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:32:30.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:32:31.171 [DEBUG] [Thread-135826] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:32:31.171 [DEBUG] [Thread-135826] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:32:31.171 [DEBUG] [Thread-135826] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T22:32:31.218 [DEBUG] [Thread-135826] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:32:31.218 [DEBUG] [Thread-135826] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:32:31.220 [DEBUG] [Thread-135826] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:32:31.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:32:31.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T22:32:31.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T22:32:31.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T22:32:31.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:32:31.238 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T22:32:31.238 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:32:31.238 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:32:31.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T22:32:31.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.855692 -999.00  +16.00  21.61     74  +11.40 1 3 1 1 1     0    0 4.07 -22.16 ----- 13.9 21.6 207.6 27.9 17.2 -10.6 17.1 -10.9 16.9 -10.3 17.2 -10.3
2025-12-31T22:32:31.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T22:32:31.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T22:32:31.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.855692
2025-12-31T22:32:31.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T22:32:31.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T22:32:31.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T22:32:31.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T22:32:31.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-31T22:32:31.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T22:31:55', tmtdew=5.02, humidity=71.74, cloud=0.0, wind=19.34, temperature=15.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T22:22:50', seeing=1.62, atlas_timestamp='2025-12-31T20:32:11.789', atlas_cloud=3, atlas_rain=1, zp_data=[0.2602499999999992, 0.44475000000000087, 0.7302500000000007, 0.22100000000000009, 0.665, 0.8302500000000013, 0.5669999999999993, 0.4302500000000009, 0.39949999999999974, 0.4095000000000013, 0.8602499999999988, 0.41999999999999993, 0.3490000000000002, 0.4262499999999996, 0.5399999999999991, 0.019000000000000128, 0.8522499999999997, 0.4294999999999991, 0.9249999999999989, 0.5342499999999992, 0.34750000000000014, 0.24074999999999847, -0.13574999999999982, -0.4472499999999986, 0.6789999999999994, nan, 1.1087499999999997, -0.8900000000000006, 0.2450000000000001, -0.4939999999999998, -1.2979999999999983, -1.4959999999999987, -0.4202500000000011], zp_timestamp='2025-12-31T20:15:00')
2025-12-31T22:32:31.239 [DEBUG] [Thread-135826] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:32:31.313 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T22:32:31.324 [DEBUG] [Thread-135829] [transport.py] [_log()] starting thread (client mode): 0xb6bbb730
2025-12-31T22:32:31.324 [DEBUG] [Thread-135829] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:32:31.339 [DEBUG] [Thread-135829] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T22:32:31.339 [INFO] [Thread-135829] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T22:32:31.347 [DEBUG] [Thread-135829] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:32:31.347 [DEBUG] [Thread-135829] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T22:32:31.347 [DEBUG] [Thread-135829] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:32:31.347 [DEBUG] [Thread-135829] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:32:31.347 [DEBUG] [Thread-135829] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:32:31.347 [DEBUG] [Thread-135829] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:32:31.347 [DEBUG] [Thread-135829] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:32:31.347 [DEBUG] [Thread-135829] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:32:31.347 [DEBUG] [Thread-135829] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:32:31.347 [DEBUG] [Thread-135829] [transport.py] [_log()] client lang: <none>
2025-12-31T22:32:31.347 [DEBUG] [Thread-135829] [transport.py] [_log()] server lang: <none>
2025-12-31T22:32:31.347 [DEBUG] [Thread-135829] [transport.py] [_log()] kex follows: False
2025-12-31T22:32:31.347 [DEBUG] [Thread-135829] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:32:31.347 [DEBUG] [Thread-135829] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:32:31.347 [DEBUG] [Thread-135829] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:32:31.347 [DEBUG] [Thread-135829] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:32:31.347 [DEBUG] [Thread-135829] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:32:31.347 [DEBUG] [Thread-135829] [transport.py] [_log()] Compression: none
2025-12-31T22:32:31.347 [DEBUG] [Thread-135829] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:32:31.407 [DEBUG] [Thread-135829] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:32:31.407 [DEBUG] [Thread-135829] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:32:31.407 [DEBUG] [Thread-135829] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T22:32:31.407 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T22:32:31.407 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:32:31.472 [DEBUG] [Thread-135829] [transport.py] [_log()] userauth is OK
2025-12-31T22:32:31.472 [DEBUG] [Thread-135829] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:32:31.472 [DEBUG] [Thread-135829] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:32:31.472 [DEBUG] [Thread-135829] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T22:32:31.472 [DEBUG] [Thread-135829] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:32:31.486 [INFO] [Thread-135829] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:32:31.486 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T22:32:31.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:32:32.376 [DEBUG] [Thread-135829] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:32:32.376 [DEBUG] [Thread-135829] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:32:32.424 [DEBUG] [Thread-135829] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:32:32.424 [DEBUG] [Thread-135829] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:32:32.433 [DEBUG] [Thread-135829] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:32:32.441 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:32: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')
2025-12-31T22:32:32.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T22:32:32.457 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:32:32.457 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:32:32.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:32:32.465 [DEBUG] [Thread-135829] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:32:35.079 [DEBUG] [Thread-135831 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:32:48.258 [DEBUG] [Thread-135832 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:32:50.135 [DEBUG] [Thread-135833 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:33:02.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T22:33:02.487 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T22:33:02.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T22:33:03.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 22, 32, 59), 5.1, 71.59, 0.0, 17.93, 15.81, 0, 0, 0, 2, 0, 0),)
2025-12-31T22:33:03.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 22:32:59
2025-12-31T22:33:03.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T22:33:03.478 [DEBUG] [Thread-135834] [transport.py] [_log()] starting thread (client mode): 0xb1764b20
2025-12-31T22:33:03.478 [DEBUG] [Thread-135834] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:33:03.499 [DEBUG] [Thread-135834] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T22:33:03.500 [INFO] [Thread-135834] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T22:33:03.503 [DEBUG] [Thread-135834] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:33:03.503 [DEBUG] [Thread-135834] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T22:33:03.503 [DEBUG] [Thread-135834] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:33:03.503 [DEBUG] [Thread-135834] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:33:03.503 [DEBUG] [Thread-135834] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:33:03.503 [DEBUG] [Thread-135834] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:33:03.503 [DEBUG] [Thread-135834] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:33:03.503 [DEBUG] [Thread-135834] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:33:03.503 [DEBUG] [Thread-135834] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:33:03.503 [DEBUG] [Thread-135834] [transport.py] [_log()] client lang: <none>
2025-12-31T22:33:03.503 [DEBUG] [Thread-135834] [transport.py] [_log()] server lang: <none>
2025-12-31T22:33:03.503 [DEBUG] [Thread-135834] [transport.py] [_log()] kex follows: False
2025-12-31T22:33:03.503 [DEBUG] [Thread-135834] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:33:03.503 [DEBUG] [Thread-135834] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:33:03.503 [DEBUG] [Thread-135834] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:33:03.503 [DEBUG] [Thread-135834] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:33:03.503 [DEBUG] [Thread-135834] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:33:03.503 [DEBUG] [Thread-135834] [transport.py] [_log()] Compression: none
2025-12-31T22:33:03.503 [DEBUG] [Thread-135834] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:33:03.521 [DEBUG] [Thread-135834] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:33:03.521 [DEBUG] [Thread-135834] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:33:03.522 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T22:33:03.522 [DEBUG] [Thread-135834] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T22:33:03.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:33:03.524 [DEBUG] [Thread-135834] [transport.py] [_log()] userauth is OK
2025-12-31T22:33:03.524 [DEBUG] [Thread-135834] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:33:03.525 [DEBUG] [Thread-135834] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:33:03.525 [DEBUG] [Thread-135834] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T22:33:03.525 [DEBUG] [Thread-135834] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:33:03.548 [INFO] [Thread-135834] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:33:03.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:33:04.198 [DEBUG] [Thread-135834] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:33:04.199 [DEBUG] [Thread-135834] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:33:04.199 [DEBUG] [Thread-135834] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T22:33:04.240 [DEBUG] [Thread-135834] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:33:04.240 [DEBUG] [Thread-135834] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:33:04.243 [DEBUG] [Thread-135834] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:33:04.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:33:04.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T22:33:04.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T22:33:04.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T22:33:04.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:33:04.267 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T22:33:04.268 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:33:04.268 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:33:04.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T22:33:04.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.856039 -999.00  +16.00  13.79     74  +11.40 1 3 1 1 1     0    0 3.96 -22.67 ----- 12.5 13.8 225.8 21.4 17.2 -10.6 17.1 -11.2 16.9 -10.3 17.2 -10.3
2025-12-31T22:33:04.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T22:33:04.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T22:33:04.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.856039
2025-12-31T22:33:04.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T22:33:04.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T22:33:04.270 [DEBUG] [Thread-135834] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:33:04.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T22:33:04.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T22:33:04.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-31T22:33:04.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T22:32:59', tmtdew=5.1, humidity=71.59, cloud=0.0, wind=17.93, temperature=15.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T22:22:50', seeing=1.62, atlas_timestamp='2025-12-31T20:32:41.770', atlas_cloud=3, atlas_rain=1, zp_data=[0.2602499999999992, 0.44475000000000087, 0.7302500000000007, 0.22100000000000009, 0.665, 0.8302500000000013, 0.5669999999999993, 0.4302500000000009, 0.39949999999999974, 0.4095000000000013, 0.8602499999999988, 0.41999999999999993, 0.3490000000000002, 0.4262499999999996, 0.5399999999999991, 0.019000000000000128, 0.8522499999999997, 0.4294999999999991, 0.9249999999999989, 0.5342499999999992, 0.34750000000000014, 0.24074999999999847, -0.13574999999999982, -0.4472499999999986, 0.6789999999999994, nan, 1.1087499999999997, -0.8900000000000006, 0.2450000000000001, -0.4939999999999998, -1.2979999999999983, -1.4959999999999987, -0.4202500000000011], zp_timestamp='2025-12-31T20:15:00')
2025-12-31T22:33:04.354 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T22:33:04.367 [DEBUG] [Thread-135837] [transport.py] [_log()] starting thread (client mode): 0xb1785240
2025-12-31T22:33:04.367 [DEBUG] [Thread-135837] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:33:04.383 [DEBUG] [Thread-135837] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T22:33:04.383 [INFO] [Thread-135837] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T22:33:04.390 [DEBUG] [Thread-135837] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:33:04.391 [DEBUG] [Thread-135837] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T22:33:04.391 [DEBUG] [Thread-135837] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:33:04.391 [DEBUG] [Thread-135837] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:33:04.391 [DEBUG] [Thread-135837] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:33:04.391 [DEBUG] [Thread-135837] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:33:04.391 [DEBUG] [Thread-135837] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:33:04.391 [DEBUG] [Thread-135837] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:33:04.391 [DEBUG] [Thread-135837] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:33:04.391 [DEBUG] [Thread-135837] [transport.py] [_log()] client lang: <none>
2025-12-31T22:33:04.392 [DEBUG] [Thread-135837] [transport.py] [_log()] server lang: <none>
2025-12-31T22:33:04.392 [DEBUG] [Thread-135837] [transport.py] [_log()] kex follows: False
2025-12-31T22:33:04.392 [DEBUG] [Thread-135837] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:33:04.392 [DEBUG] [Thread-135837] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:33:04.392 [DEBUG] [Thread-135837] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:33:04.392 [DEBUG] [Thread-135837] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:33:04.392 [DEBUG] [Thread-135837] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:33:04.393 [DEBUG] [Thread-135837] [transport.py] [_log()] Compression: none
2025-12-31T22:33:04.393 [DEBUG] [Thread-135837] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:33:04.455 [DEBUG] [Thread-135837] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:33:04.455 [DEBUG] [Thread-135837] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:33:04.456 [DEBUG] [Thread-135837] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T22:33:04.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T22:33:04.457 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:33:04.514 [DEBUG] [Thread-135837] [transport.py] [_log()] userauth is OK
2025-12-31T22:33:04.515 [DEBUG] [Thread-135837] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:33:04.515 [DEBUG] [Thread-135837] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:33:04.515 [DEBUG] [Thread-135837] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T22:33:04.515 [DEBUG] [Thread-135837] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:33:04.540 [INFO] [Thread-135837] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:33:04.541 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T22:33:04.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:33:05.169 [DEBUG] [Thread-135839 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:33:05.396 [DEBUG] [Thread-135837] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:33:05.397 [DEBUG] [Thread-135837] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:33:05.445 [DEBUG] [Thread-135837] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:33:05.446 [DEBUG] [Thread-135837] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:33:05.455 [DEBUG] [Thread-135837] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:33:05.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:33:05.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T22:33:05.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T22:33:05.480 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:33:05.480 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:33:05.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:33:05.488 [DEBUG] [Thread-135837] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:33:14.969 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:33:14.970 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:33:20.212 [DEBUG] [Thread-135840 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:33:35.248 [DEBUG] [Thread-135841 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:33:35.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T22:33:35.510 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T22:33:35.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T22:33:36.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 22, 33, 31), 5.12, 71.53, 0.0, 17.87, 15.79, 0, 0, 0, 2, 0, 0),)
2025-12-31T22:33:36.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 22:33:31
2025-12-31T22:33:36.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T22:33:36.504 [DEBUG] [Thread-135842] [transport.py] [_log()] starting thread (client mode): 0xb17864d0
2025-12-31T22:33:36.505 [DEBUG] [Thread-135842] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:33:36.527 [DEBUG] [Thread-135842] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T22:33:36.527 [INFO] [Thread-135842] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T22:33:36.530 [DEBUG] [Thread-135842] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:33:36.530 [DEBUG] [Thread-135842] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T22:33:36.530 [DEBUG] [Thread-135842] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:33:36.530 [DEBUG] [Thread-135842] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:33:36.530 [DEBUG] [Thread-135842] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:33:36.530 [DEBUG] [Thread-135842] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:33:36.531 [DEBUG] [Thread-135842] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:33:36.531 [DEBUG] [Thread-135842] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:33:36.531 [DEBUG] [Thread-135842] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:33:36.531 [DEBUG] [Thread-135842] [transport.py] [_log()] client lang: <none>
2025-12-31T22:33:36.531 [DEBUG] [Thread-135842] [transport.py] [_log()] server lang: <none>
2025-12-31T22:33:36.531 [DEBUG] [Thread-135842] [transport.py] [_log()] kex follows: False
2025-12-31T22:33:36.531 [DEBUG] [Thread-135842] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:33:36.531 [DEBUG] [Thread-135842] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:33:36.531 [DEBUG] [Thread-135842] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:33:36.531 [DEBUG] [Thread-135842] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:33:36.531 [DEBUG] [Thread-135842] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:33:36.531 [DEBUG] [Thread-135842] [transport.py] [_log()] Compression: none
2025-12-31T22:33:36.531 [DEBUG] [Thread-135842] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:33:36.548 [DEBUG] [Thread-135842] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:33:36.549 [DEBUG] [Thread-135842] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:33:36.549 [DEBUG] [Thread-135842] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T22:33:36.550 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T22:33:36.550 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:33:36.551 [DEBUG] [Thread-135842] [transport.py] [_log()] userauth is OK
2025-12-31T22:33:36.551 [DEBUG] [Thread-135842] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:33:36.552 [DEBUG] [Thread-135842] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:33:36.552 [DEBUG] [Thread-135842] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T22:33:36.552 [DEBUG] [Thread-135842] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:33:36.574 [INFO] [Thread-135842] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:33:36.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:33:37.227 [DEBUG] [Thread-135842] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:33:37.227 [DEBUG] [Thread-135842] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:33:37.228 [DEBUG] [Thread-135842] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T22:33:37.269 [DEBUG] [Thread-135842] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:33:37.269 [DEBUG] [Thread-135842] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:33:37.272 [DEBUG] [Thread-135842] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:33:37.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:33:37.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T22:33:37.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T22:33:37.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T22:33:37.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:33:37.293 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T22:33:37.293 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:33:37.293 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:33:37.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T22:33:37.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.856386 -999.00  +16.00  11.35     74  +11.40 1 3 1 1 1     0    0 3.89 -24.13 ----- 14.8 11.3 187.2 16.5 17.2 -10.5 17.1 -10.8 16.9 -10.5 17.2 -10.2
2025-12-31T22:33:37.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T22:33:37.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T22:33:37.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.856386
2025-12-31T22:33:37.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T22:33:37.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T22:33:37.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T22:33:37.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T22:33:37.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-31T22:33:37.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T22:33:31', tmtdew=5.12, humidity=71.53, cloud=0.0, wind=17.87, temperature=15.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T22:22:50', seeing=1.62, atlas_timestamp='2025-12-31T20:33:11.750', atlas_cloud=3, atlas_rain=1, zp_data=[0.2602499999999992, 0.44475000000000087, 0.7302500000000007, 0.22100000000000009, 0.665, 0.8302500000000013, 0.5669999999999993, 0.4302500000000009, 0.39949999999999974, 0.4095000000000013, 0.8602499999999988, 0.41999999999999993, 0.3490000000000002, 0.4262499999999996, 0.5399999999999991, 0.019000000000000128, 0.8522499999999997, 0.4294999999999991, 0.9249999999999989, 0.5342499999999992, 0.34750000000000014, 0.24074999999999847, -0.13574999999999982, -0.4472499999999986, 0.6789999999999994, nan, 1.1087499999999997, -0.8900000000000006, 0.2450000000000001, -0.4939999999999998, -1.2979999999999983, -1.4959999999999987, -0.4202500000000011], zp_timestamp='2025-12-31T20:15:00')
2025-12-31T22:33:37.296 [DEBUG] [Thread-135842] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:33:37.369 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T22:33:37.381 [DEBUG] [Thread-135845] [transport.py] [_log()] starting thread (client mode): 0xb1764b80
2025-12-31T22:33:37.381 [DEBUG] [Thread-135845] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:33:37.396 [DEBUG] [Thread-135845] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T22:33:37.396 [INFO] [Thread-135845] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T22:33:37.404 [DEBUG] [Thread-135845] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:33:37.404 [DEBUG] [Thread-135845] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T22:33:37.404 [DEBUG] [Thread-135845] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:33:37.404 [DEBUG] [Thread-135845] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:33:37.404 [DEBUG] [Thread-135845] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:33:37.404 [DEBUG] [Thread-135845] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:33:37.404 [DEBUG] [Thread-135845] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:33:37.404 [DEBUG] [Thread-135845] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:33:37.404 [DEBUG] [Thread-135845] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:33:37.404 [DEBUG] [Thread-135845] [transport.py] [_log()] client lang: <none>
2025-12-31T22:33:37.404 [DEBUG] [Thread-135845] [transport.py] [_log()] server lang: <none>
2025-12-31T22:33:37.404 [DEBUG] [Thread-135845] [transport.py] [_log()] kex follows: False
2025-12-31T22:33:37.404 [DEBUG] [Thread-135845] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:33:37.405 [DEBUG] [Thread-135845] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:33:37.405 [DEBUG] [Thread-135845] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:33:37.405 [DEBUG] [Thread-135845] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:33:37.405 [DEBUG] [Thread-135845] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:33:37.405 [DEBUG] [Thread-135845] [transport.py] [_log()] Compression: none
2025-12-31T22:33:37.405 [DEBUG] [Thread-135845] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:33:37.461 [DEBUG] [Thread-135845] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:33:37.461 [DEBUG] [Thread-135845] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:33:37.461 [DEBUG] [Thread-135845] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T22:33:37.462 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T22:33:37.462 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:33:37.517 [DEBUG] [Thread-135845] [transport.py] [_log()] userauth is OK
2025-12-31T22:33:37.518 [DEBUG] [Thread-135845] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:33:37.518 [DEBUG] [Thread-135845] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:33:37.518 [DEBUG] [Thread-135845] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T22:33:37.518 [DEBUG] [Thread-135845] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:33:37.546 [INFO] [Thread-135845] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:33:37.546 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T22:33:37.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:33:38.399 [DEBUG] [Thread-135845] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:33:38.400 [DEBUG] [Thread-135845] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:33:38.447 [DEBUG] [Thread-135845] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:33:38.448 [DEBUG] [Thread-135845] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:33:38.456 [DEBUG] [Thread-135845] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:33:38.465 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:33:38.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T22:33:38.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T22:33:38.484 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:33:38.484 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:33:38.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:33:38.493 [DEBUG] [Thread-135845] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:33:48.329 [DEBUG] [Thread-135847 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:33:50.285 [DEBUG] [Thread-135848 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:34:05.324 [DEBUG] [Thread-135849 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:34:08.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T22:34:08.516 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T22:34:08.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T22:34:09.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 22, 34, 3), 5.12, 71.53, 0.0, 18.17, 15.83, 0, 0, 0, 2, 0, 0),)
2025-12-31T22:34:09.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 22:34:03
2025-12-31T22:34:09.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T22:34:09.502 [DEBUG] [Thread-135850] [transport.py] [_log()] starting thread (client mode): 0xb17473a0
2025-12-31T22:34:09.502 [DEBUG] [Thread-135850] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:34:09.523 [DEBUG] [Thread-135850] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T22:34:09.523 [INFO] [Thread-135850] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T22:34:09.526 [DEBUG] [Thread-135850] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:34:09.526 [DEBUG] [Thread-135850] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T22:34:09.526 [DEBUG] [Thread-135850] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:34:09.527 [DEBUG] [Thread-135850] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:34:09.527 [DEBUG] [Thread-135850] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:34:09.527 [DEBUG] [Thread-135850] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:34:09.527 [DEBUG] [Thread-135850] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:34:09.527 [DEBUG] [Thread-135850] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:34:09.527 [DEBUG] [Thread-135850] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:34:09.527 [DEBUG] [Thread-135850] [transport.py] [_log()] client lang: <none>
2025-12-31T22:34:09.527 [DEBUG] [Thread-135850] [transport.py] [_log()] server lang: <none>
2025-12-31T22:34:09.527 [DEBUG] [Thread-135850] [transport.py] [_log()] kex follows: False
2025-12-31T22:34:09.527 [DEBUG] [Thread-135850] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:34:09.527 [DEBUG] [Thread-135850] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:34:09.527 [DEBUG] [Thread-135850] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:34:09.527 [DEBUG] [Thread-135850] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:34:09.527 [DEBUG] [Thread-135850] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:34:09.528 [DEBUG] [Thread-135850] [transport.py] [_log()] Compression: none
2025-12-31T22:34:09.528 [DEBUG] [Thread-135850] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:34:09.546 [DEBUG] [Thread-135850] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:34:09.547 [DEBUG] [Thread-135850] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:34:09.548 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T22:34:09.548 [DEBUG] [Thread-135850] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T22:34:09.550 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:34:09.551 [DEBUG] [Thread-135850] [transport.py] [_log()] userauth is OK
2025-12-31T22:34:09.551 [DEBUG] [Thread-135850] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:34:09.551 [DEBUG] [Thread-135850] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:34:09.551 [DEBUG] [Thread-135850] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T22:34:09.552 [DEBUG] [Thread-135850] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:34:09.567 [INFO] [Thread-135850] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:34:09.568 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:34:10.219 [DEBUG] [Thread-135850] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:34:10.220 [DEBUG] [Thread-135850] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:34:10.220 [DEBUG] [Thread-135850] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T22:34:10.261 [DEBUG] [Thread-135850] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:34:10.261 [DEBUG] [Thread-135850] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:34:10.265 [DEBUG] [Thread-135850] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:34:10.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:34:10.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T22:34:10.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T22:34:10.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T22:34:10.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:34:10.287 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T22:34:10.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:34:10.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:34:10.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T22:34:10.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.856734 -999.00  +16.00  10.03     74  +11.50 1 3 1 1 1     0    0 3.93 -22.57 ----- 6.2 10.0 211.4 15.9 17.2 -10.6 17.1 -10.9 16.9 -10.5 17.2 -10.2
2025-12-31T22:34:10.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T22:34:10.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T22:34:10.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.856734
2025-12-31T22:34:10.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T22:34:10.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T22:34:10.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T22:34:10.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T22:34:10.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-31T22:34:10.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T22:34:03', tmtdew=5.12, humidity=71.53, cloud=0.0, wind=18.17, temperature=15.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T22:22:50', seeing=1.62, atlas_timestamp='2025-12-31T20:33:41.818', atlas_cloud=3, atlas_rain=1, zp_data=[0.2602499999999992, 0.44475000000000087, 0.7302500000000007, 0.22100000000000009, 0.665, 0.8302500000000013, 0.5669999999999993, 0.4302500000000009, 0.39949999999999974, 0.4095000000000013, 0.8602499999999988, 0.41999999999999993, 0.3490000000000002, 0.4262499999999996, 0.5399999999999991, 0.019000000000000128, 0.8522499999999997, 0.4294999999999991, 0.9249999999999989, 0.5342499999999992, 0.34750000000000014, 0.24074999999999847, -0.13574999999999982, -0.4472499999999986, 0.6789999999999994, nan, 1.1087499999999997, -0.8900000000000006, 0.2450000000000001, -0.4939999999999998, -1.2979999999999983, -1.4959999999999987, -0.4202500000000011], zp_timestamp='2025-12-31T20:15:00')
2025-12-31T22:34:10.290 [DEBUG] [Thread-135850] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:34: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-12-31T22:34:10.386 [DEBUG] [Thread-135853] [transport.py] [_log()] starting thread (client mode): 0xb6bbb6d0
2025-12-31T22:34:10.386 [DEBUG] [Thread-135853] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:34:10.401 [DEBUG] [Thread-135853] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T22:34:10.401 [INFO] [Thread-135853] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T22:34:10.409 [DEBUG] [Thread-135853] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:34:10.409 [DEBUG] [Thread-135853] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T22:34:10.409 [DEBUG] [Thread-135853] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:34:10.410 [DEBUG] [Thread-135853] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:34:10.410 [DEBUG] [Thread-135853] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:34:10.410 [DEBUG] [Thread-135853] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:34:10.410 [DEBUG] [Thread-135853] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:34:10.410 [DEBUG] [Thread-135853] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:34:10.410 [DEBUG] [Thread-135853] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:34:10.410 [DEBUG] [Thread-135853] [transport.py] [_log()] client lang: <none>
2025-12-31T22:34:10.410 [DEBUG] [Thread-135853] [transport.py] [_log()] server lang: <none>
2025-12-31T22:34:10.410 [DEBUG] [Thread-135853] [transport.py] [_log()] kex follows: False
2025-12-31T22:34:10.411 [DEBUG] [Thread-135853] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:34:10.411 [DEBUG] [Thread-135853] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:34:10.411 [DEBUG] [Thread-135853] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:34:10.411 [DEBUG] [Thread-135853] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:34:10.411 [DEBUG] [Thread-135853] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:34:10.411 [DEBUG] [Thread-135853] [transport.py] [_log()] Compression: none
2025-12-31T22:34:10.411 [DEBUG] [Thread-135853] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:34:10.468 [DEBUG] [Thread-135853] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:34:10.468 [DEBUG] [Thread-135853] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:34:10.469 [DEBUG] [Thread-135853] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T22:34:10.469 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T22:34:10.470 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:34:10.525 [DEBUG] [Thread-135853] [transport.py] [_log()] userauth is OK
2025-12-31T22:34:10.526 [DEBUG] [Thread-135853] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:34:10.526 [DEBUG] [Thread-135853] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:34:10.526 [DEBUG] [Thread-135853] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T22:34:10.526 [DEBUG] [Thread-135853] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:34:10.549 [INFO] [Thread-135853] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:34:10.549 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T22:34:10.550 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:34:11.381 [DEBUG] [Thread-135853] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:34:11.382 [DEBUG] [Thread-135853] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:34:11.430 [DEBUG] [Thread-135853] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:34:11.430 [DEBUG] [Thread-135853] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:34:11.439 [DEBUG] [Thread-135853] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:34:11.448 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:34:11.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T22:34:11.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T22:34:11.473 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:34:11.473 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:34:11.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:34:11.482 [DEBUG] [Thread-135853] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:34:15.172 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:34:15.173 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:34:20.356 [DEBUG] [Thread-135855 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:34:35.400 [DEBUG] [Thread-135856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:34:41.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T22:34:41.505 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T22:34:41.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T22:34:42.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 22, 34, 36), 5.09, 71.94, 0.0, 20.72, 15.81, 0, 0, 0, 2, 0, 0),)
2025-12-31T22:34:42.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 22:34:36
2025-12-31T22:34:42.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T22:34:42.493 [DEBUG] [Thread-135857] [transport.py] [_log()] starting thread (client mode): 0xb6bbb8e0
2025-12-31T22:34:42.493 [DEBUG] [Thread-135857] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:34:42.513 [DEBUG] [Thread-135857] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T22:34:42.513 [INFO] [Thread-135857] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T22:34:42.515 [DEBUG] [Thread-135857] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:34:42.515 [DEBUG] [Thread-135857] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T22:34:42.515 [DEBUG] [Thread-135857] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:34:42.515 [DEBUG] [Thread-135857] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:34:42.515 [DEBUG] [Thread-135857] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:34:42.515 [DEBUG] [Thread-135857] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:34:42.515 [DEBUG] [Thread-135857] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:34:42.515 [DEBUG] [Thread-135857] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:34:42.515 [DEBUG] [Thread-135857] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:34:42.515 [DEBUG] [Thread-135857] [transport.py] [_log()] client lang: <none>
2025-12-31T22:34:42.515 [DEBUG] [Thread-135857] [transport.py] [_log()] server lang: <none>
2025-12-31T22:34:42.515 [DEBUG] [Thread-135857] [transport.py] [_log()] kex follows: False
2025-12-31T22:34:42.515 [DEBUG] [Thread-135857] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:34:42.515 [DEBUG] [Thread-135857] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:34:42.515 [DEBUG] [Thread-135857] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:34:42.515 [DEBUG] [Thread-135857] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:34:42.516 [DEBUG] [Thread-135857] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:34:42.516 [DEBUG] [Thread-135857] [transport.py] [_log()] Compression: none
2025-12-31T22:34:42.516 [DEBUG] [Thread-135857] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:34:42.530 [DEBUG] [Thread-135857] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:34:42.530 [DEBUG] [Thread-135857] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:34:42.531 [DEBUG] [Thread-135857] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T22:34:42.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T22:34:42.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:34:42.532 [DEBUG] [Thread-135857] [transport.py] [_log()] userauth is OK
2025-12-31T22:34:42.532 [DEBUG] [Thread-135857] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:34:42.532 [DEBUG] [Thread-135857] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:34:42.532 [DEBUG] [Thread-135857] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T22:34:42.533 [DEBUG] [Thread-135857] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:34:42.555 [INFO] [Thread-135857] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:34:42.811 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:34:43.174 [DEBUG] [Thread-135857] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:34:43.175 [DEBUG] [Thread-135857] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:34:43.175 [DEBUG] [Thread-135857] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T22:34:43.175 [DEBUG] [Thread-135857] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:34:43.175 [DEBUG] [Thread-135857] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:34:43.178 [DEBUG] [Thread-135857] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:34:43.185 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:34:43.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T22:34:43.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T22:34:43.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T22:34:43.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:34:43.196 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T22:34:43.196 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:34:43.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:34:43.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T22:34:43.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.857081 -999.00  +16.00  11.10     74  +11.40 1 3 1 1 1     0    0 3.99 -22.39 ----- 13.6 11.1 206.1 21.1 17.2 -10.7 17.1 -11.3 16.9 -10.7 17.2 -10.4
2025-12-31T22:34:43.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T22:34:43.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T22:34:43.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.857081
2025-12-31T22:34:43.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T22:34:43.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T22:34:43.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T22:34:43.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T22:34:43.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-31T22:34:43.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T22:34:36', tmtdew=5.09, humidity=71.94, cloud=0.0, wind=20.72, temperature=15.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T22:22:50', seeing=1.62, atlas_timestamp='2025-12-31T20:34:11.798', atlas_cloud=3, atlas_rain=1, zp_data=[0.2602499999999992, 0.44475000000000087, 0.7302500000000007, 0.22100000000000009, 0.665, 0.8302500000000013, 0.5669999999999993, 0.4302500000000009, 0.39949999999999974, 0.4095000000000013, 0.8602499999999988, 0.41999999999999993, 0.3490000000000002, 0.4262499999999996, 0.5399999999999991, 0.019000000000000128, 0.8522499999999997, 0.4294999999999991, 0.9249999999999989, 0.5342499999999992, 0.34750000000000014, 0.24074999999999847, -0.13574999999999982, -0.4472499999999986, 0.6789999999999994, nan, 1.1087499999999997, -0.8900000000000006, 0.2450000000000001, -0.4939999999999998, -1.2979999999999983, -1.4959999999999987, -0.4202500000000011], zp_timestamp='2025-12-31T20:15:00')
2025-12-31T22:34:43.199 [DEBUG] [Thread-135857] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:34:43.282 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T22:34:43.293 [DEBUG] [Thread-135860] [transport.py] [_log()] starting thread (client mode): 0xb1797250
2025-12-31T22:34:43.293 [DEBUG] [Thread-135860] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:34:43.307 [DEBUG] [Thread-135860] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T22:34:43.308 [INFO] [Thread-135860] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T22:34:43.316 [DEBUG] [Thread-135860] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:34:43.316 [DEBUG] [Thread-135860] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T22:34:43.316 [DEBUG] [Thread-135860] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:34:43.316 [DEBUG] [Thread-135860] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:34:43.316 [DEBUG] [Thread-135860] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:34:43.316 [DEBUG] [Thread-135860] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:34:43.316 [DEBUG] [Thread-135860] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:34:43.316 [DEBUG] [Thread-135860] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:34:43.316 [DEBUG] [Thread-135860] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:34:43.316 [DEBUG] [Thread-135860] [transport.py] [_log()] client lang: <none>
2025-12-31T22:34:43.316 [DEBUG] [Thread-135860] [transport.py] [_log()] server lang: <none>
2025-12-31T22:34:43.316 [DEBUG] [Thread-135860] [transport.py] [_log()] kex follows: False
2025-12-31T22:34:43.316 [DEBUG] [Thread-135860] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:34:43.316 [DEBUG] [Thread-135860] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:34:43.317 [DEBUG] [Thread-135860] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:34:43.317 [DEBUG] [Thread-135860] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:34:43.317 [DEBUG] [Thread-135860] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:34:43.317 [DEBUG] [Thread-135860] [transport.py] [_log()] Compression: none
2025-12-31T22:34:43.317 [DEBUG] [Thread-135860] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:34:43.374 [DEBUG] [Thread-135860] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:34:43.375 [DEBUG] [Thread-135860] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:34:43.376 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T22:34:43.376 [DEBUG] [Thread-135860] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T22:34:43.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:34:43.430 [DEBUG] [Thread-135860] [transport.py] [_log()] userauth is OK
2025-12-31T22:34:43.430 [DEBUG] [Thread-135860] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:34:43.431 [DEBUG] [Thread-135860] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:34:43.431 [DEBUG] [Thread-135860] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T22:34:43.431 [DEBUG] [Thread-135860] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:34:43.450 [INFO] [Thread-135860] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:34:43.450 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T22:34:43.451 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:34:44.293 [DEBUG] [Thread-135860] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:34:44.293 [DEBUG] [Thread-135860] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:34:44.341 [DEBUG] [Thread-135860] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:34:44.341 [DEBUG] [Thread-135860] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:34:44.353 [DEBUG] [Thread-135860] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:34:44.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:34:44.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-12-31T22:34:44.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T22:34:44.379 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:34:44.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:34:44.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:34:44.387 [DEBUG] [Thread-135860] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:34:48.386 [DEBUG] [Thread-135862 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:34:50.434 [DEBUG] [Thread-135863 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:35:05.480 [DEBUG] [Thread-135864 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:35:14.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T22:35:14.410 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T22:35:14.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T22:35:15.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 22, 35, 8), 5.09, 71.91, 0.0, 20.87, 15.79, 0, 0, 0, 2, 0, 0),)
2025-12-31T22:35:15.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 22:35:08
2025-12-31T22:35:15.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T22:35:15.375 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:35:15.375 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:35:15.408 [DEBUG] [Thread-135865] [transport.py] [_log()] starting thread (client mode): 0xb1795de0
2025-12-31T22:35:15.408 [DEBUG] [Thread-135865] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:35:15.429 [DEBUG] [Thread-135865] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T22:35:15.429 [INFO] [Thread-135865] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T22:35:15.432 [DEBUG] [Thread-135865] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:35:15.432 [DEBUG] [Thread-135865] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T22:35:15.432 [DEBUG] [Thread-135865] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:35:15.432 [DEBUG] [Thread-135865] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:35:15.432 [DEBUG] [Thread-135865] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:35:15.432 [DEBUG] [Thread-135865] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:35:15.432 [DEBUG] [Thread-135865] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:35:15.432 [DEBUG] [Thread-135865] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:35:15.432 [DEBUG] [Thread-135865] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:35:15.432 [DEBUG] [Thread-135865] [transport.py] [_log()] client lang: <none>
2025-12-31T22:35:15.432 [DEBUG] [Thread-135865] [transport.py] [_log()] server lang: <none>
2025-12-31T22:35:15.432 [DEBUG] [Thread-135865] [transport.py] [_log()] kex follows: False
2025-12-31T22:35:15.432 [DEBUG] [Thread-135865] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:35:15.432 [DEBUG] [Thread-135865] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:35:15.432 [DEBUG] [Thread-135865] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:35:15.432 [DEBUG] [Thread-135865] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:35:15.432 [DEBUG] [Thread-135865] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:35:15.432 [DEBUG] [Thread-135865] [transport.py] [_log()] Compression: none
2025-12-31T22:35:15.432 [DEBUG] [Thread-135865] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:35:15.448 [DEBUG] [Thread-135865] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:35:15.448 [DEBUG] [Thread-135865] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:35:15.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T22:35:15.449 [DEBUG] [Thread-135865] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T22:35:15.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:35:15.452 [DEBUG] [Thread-135865] [transport.py] [_log()] userauth is OK
2025-12-31T22:35:15.452 [DEBUG] [Thread-135865] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:35:15.452 [DEBUG] [Thread-135865] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:35:15.452 [DEBUG] [Thread-135865] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T22:35:15.452 [DEBUG] [Thread-135865] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:35:15.467 [INFO] [Thread-135865] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:35:15.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:35:16.054 [DEBUG] [Thread-135865] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:35:16.054 [DEBUG] [Thread-135865] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:35:16.055 [DEBUG] [Thread-135865] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T22:35:16.094 [DEBUG] [Thread-135865] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:35:16.095 [DEBUG] [Thread-135865] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:35:16.097 [DEBUG] [Thread-135865] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:35:16.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:35:16.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T22:35:16.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T22:35:16.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T22:35:16.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:35:16.119 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T22:35:16.119 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:35:16.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:35:16.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T22:35:16.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.857775 -999.00  +16.00  16.60     74  +11.40 1 2 1 1 1     0    0 3.98 -20.85 ..... 15.1 16.6 205.4 18.8 17.2 -10.9 17.1 -11.2 16.9 -11.0 17.2 -10.6
2025-12-31T22:35:16.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T22:35:16.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T22:35:16.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.857775
2025-12-31T22:35:16.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T22:35:16.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T22:35:16.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T22:35:16.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T22:35:16.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T22:35:16.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T22:35:08', tmtdew=5.09, humidity=71.91, cloud=0.0, wind=20.87, temperature=15.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T22:22:50', seeing=1.62, atlas_timestamp='2025-12-31T20:35:11.760', atlas_cloud=2, atlas_rain=1, zp_data=[0.2602499999999992, 0.44475000000000087, 0.7302500000000007, 0.22100000000000009, 0.665, 0.8302500000000013, 0.5669999999999993, 0.4302500000000009, 0.39949999999999974, 0.4095000000000013, 0.8602499999999988, 0.41999999999999993, 0.3490000000000002, 0.4262499999999996, 0.5399999999999991, 0.019000000000000128, 0.8522499999999997, 0.4294999999999991, 0.9249999999999989, 0.5342499999999992, 0.34750000000000014, 0.24074999999999847, -0.13574999999999982, -0.4472499999999986, 0.6789999999999994, nan, 1.1087499999999997, -0.8900000000000006, 0.2450000000000001, -0.4939999999999998, -1.2979999999999983, -1.4959999999999987, -0.4202500000000011], zp_timestamp='2025-12-31T20:15:00')
2025-12-31T22:35:16.121 [DEBUG] [Thread-135865] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:35:16.196 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T22:35:16.207 [DEBUG] [Thread-135868] [transport.py] [_log()] starting thread (client mode): 0xb1794790
2025-12-31T22:35:16.208 [DEBUG] [Thread-135868] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:35:16.225 [DEBUG] [Thread-135868] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T22:35:16.225 [INFO] [Thread-135868] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T22:35:16.232 [DEBUG] [Thread-135868] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:35:16.232 [DEBUG] [Thread-135868] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T22:35:16.232 [DEBUG] [Thread-135868] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:35:16.232 [DEBUG] [Thread-135868] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:35:16.232 [DEBUG] [Thread-135868] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:35:16.232 [DEBUG] [Thread-135868] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:35:16.233 [DEBUG] [Thread-135868] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:35:16.233 [DEBUG] [Thread-135868] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:35:16.233 [DEBUG] [Thread-135868] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:35:16.233 [DEBUG] [Thread-135868] [transport.py] [_log()] client lang: <none>
2025-12-31T22:35:16.233 [DEBUG] [Thread-135868] [transport.py] [_log()] server lang: <none>
2025-12-31T22:35:16.233 [DEBUG] [Thread-135868] [transport.py] [_log()] kex follows: False
2025-12-31T22:35:16.233 [DEBUG] [Thread-135868] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:35:16.233 [DEBUG] [Thread-135868] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:35:16.233 [DEBUG] [Thread-135868] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:35:16.233 [DEBUG] [Thread-135868] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:35:16.233 [DEBUG] [Thread-135868] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:35:16.233 [DEBUG] [Thread-135868] [transport.py] [_log()] Compression: none
2025-12-31T22:35:16.233 [DEBUG] [Thread-135868] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:35:16.289 [DEBUG] [Thread-135868] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:35:16.289 [DEBUG] [Thread-135868] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:35:16.290 [DEBUG] [Thread-135868] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T22:35:16.290 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T22:35:16.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:35:16.346 [DEBUG] [Thread-135868] [transport.py] [_log()] userauth is OK
2025-12-31T22:35:16.346 [DEBUG] [Thread-135868] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:35:16.346 [DEBUG] [Thread-135868] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:35:16.346 [DEBUG] [Thread-135868] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T22:35:16.346 [DEBUG] [Thread-135868] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:35:16.366 [INFO] [Thread-135868] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:35:16.366 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T22:35:16.366 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:35:17.186 [DEBUG] [Thread-135868] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:35:17.186 [DEBUG] [Thread-135868] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:35:17.233 [DEBUG] [Thread-135868] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:35:17.234 [DEBUG] [Thread-135868] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:35:17.242 [DEBUG] [Thread-135868] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:35:17.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:35: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-12-31T22:35:17.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T22:35:17.268 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:35:17.268 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:35:17.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:35:17.276 [DEBUG] [Thread-135868] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:35:20.509 [DEBUG] [Thread-135870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:35:35.564 [DEBUG] [Thread-135871 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:35:47.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T22:35:47.298 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T22:35:47.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T22:35:48.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 22, 35, 40), 5.03, 71.98, 0.0, 20.1, 15.74, 0, 0, 0, 2, 0, 0),)
2025-12-31T22:35:48.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 22:35:40
2025-12-31T22:35:48.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T22:35:48.313 [DEBUG] [Thread-135872] [transport.py] [_log()] starting thread (client mode): 0xb1797cd0
2025-12-31T22:35:48.313 [DEBUG] [Thread-135872] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:35:48.324 [DEBUG] [Thread-135872] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T22:35:48.324 [INFO] [Thread-135872] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T22:35:48.326 [DEBUG] [Thread-135872] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:35:48.326 [DEBUG] [Thread-135872] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T22:35:48.326 [DEBUG] [Thread-135872] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:35:48.326 [DEBUG] [Thread-135872] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:35:48.326 [DEBUG] [Thread-135872] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:35:48.326 [DEBUG] [Thread-135872] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:35:48.327 [DEBUG] [Thread-135872] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:35:48.327 [DEBUG] [Thread-135872] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:35:48.327 [DEBUG] [Thread-135872] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:35:48.327 [DEBUG] [Thread-135872] [transport.py] [_log()] client lang: <none>
2025-12-31T22:35:48.327 [DEBUG] [Thread-135872] [transport.py] [_log()] server lang: <none>
2025-12-31T22:35:48.327 [DEBUG] [Thread-135872] [transport.py] [_log()] kex follows: False
2025-12-31T22:35:48.327 [DEBUG] [Thread-135872] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:35:48.327 [DEBUG] [Thread-135872] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:35:48.327 [DEBUG] [Thread-135872] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:35:48.327 [DEBUG] [Thread-135872] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:35:48.327 [DEBUG] [Thread-135872] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:35:48.327 [DEBUG] [Thread-135872] [transport.py] [_log()] Compression: none
2025-12-31T22:35:48.327 [DEBUG] [Thread-135872] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:35:48.341 [DEBUG] [Thread-135872] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:35:48.342 [DEBUG] [Thread-135872] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:35:48.342 [DEBUG] [Thread-135872] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T22:35:48.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T22:35:48.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:35:48.342 [DEBUG] [Thread-135872] [transport.py] [_log()] userauth is OK
2025-12-31T22:35:48.343 [DEBUG] [Thread-135872] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:35:48.343 [DEBUG] [Thread-135872] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:35:48.343 [DEBUG] [Thread-135872] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T22:35:48.343 [DEBUG] [Thread-135872] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:35:48.352 [INFO] [Thread-135872] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:35:48.352 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:35:48.438 [DEBUG] [Thread-135874 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:35:48.951 [DEBUG] [Thread-135872] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:35:48.951 [DEBUG] [Thread-135872] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:35:48.951 [DEBUG] [Thread-135872] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T22:35:48.991 [DEBUG] [Thread-135872] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:35:48.992 [DEBUG] [Thread-135872] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:35:48.994 [DEBUG] [Thread-135872] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:35:49.002 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:35:49.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T22:35:49.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T22:35:49.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T22:35:49.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:35:49.007 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T22:35:49.007 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:35:49.007 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:35:49.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T22:35:49.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.858122 -999.00  +15.90  13.52     74  +11.40 1 2 1 1 1     0    0 4.16 -19.44 ..... 15.1 13.5 190.2 25.6 17.2 -11.0 17.0 -11.6 16.9 -11.2 17.2 -10.7
2025-12-31T22:35:49.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T22:35:49.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T22:35:49.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.858122
2025-12-31T22:35:49.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T22:35:49.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T22:35:49.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T22:35:49.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T22:35:49.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T22:35:49.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T22:35:40', tmtdew=5.03, humidity=71.98, cloud=0.0, wind=20.1, temperature=15.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T22:22:50', seeing=1.62, atlas_timestamp='2025-12-31T20:35:41.741', atlas_cloud=2, atlas_rain=1, zp_data=[0.2602499999999992, 0.44475000000000087, 0.7302500000000007, 0.22100000000000009, 0.665, 0.8302500000000013, 0.5669999999999993, 0.4302500000000009, 0.39949999999999974, 0.4095000000000013, 0.8602499999999988, 0.41999999999999993, 0.3490000000000002, 0.4262499999999996, 0.5399999999999991, 0.019000000000000128, 0.8522499999999997, 0.4294999999999991, 0.9249999999999989, 0.5342499999999992, 0.34750000000000014, 0.24074999999999847, -0.13574999999999982, -0.4472499999999986, 0.6789999999999994, nan, 1.1087499999999997, -0.8900000000000006, 0.2450000000000001, -0.4939999999999998, -1.2979999999999983, -1.4959999999999987, -0.4202500000000011], zp_timestamp='2025-12-31T20:15:00')
2025-12-31T22:35:49.008 [DEBUG] [Thread-135872] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:35:49.081 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T22:35:49.092 [DEBUG] [Thread-135876] [transport.py] [_log()] starting thread (client mode): 0xb1796c20
2025-12-31T22:35:49.092 [DEBUG] [Thread-135876] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:35:49.107 [DEBUG] [Thread-135876] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T22:35:49.107 [INFO] [Thread-135876] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T22:35:49.114 [DEBUG] [Thread-135876] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:35:49.114 [DEBUG] [Thread-135876] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T22:35:49.114 [DEBUG] [Thread-135876] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:35:49.114 [DEBUG] [Thread-135876] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:35:49.114 [DEBUG] [Thread-135876] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:35:49.115 [DEBUG] [Thread-135876] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:35:49.115 [DEBUG] [Thread-135876] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:35:49.115 [DEBUG] [Thread-135876] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:35:49.115 [DEBUG] [Thread-135876] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:35:49.115 [DEBUG] [Thread-135876] [transport.py] [_log()] client lang: <none>
2025-12-31T22:35:49.115 [DEBUG] [Thread-135876] [transport.py] [_log()] server lang: <none>
2025-12-31T22:35:49.115 [DEBUG] [Thread-135876] [transport.py] [_log()] kex follows: False
2025-12-31T22:35:49.115 [DEBUG] [Thread-135876] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:35:49.115 [DEBUG] [Thread-135876] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:35:49.115 [DEBUG] [Thread-135876] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:35:49.115 [DEBUG] [Thread-135876] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:35:49.115 [DEBUG] [Thread-135876] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:35:49.115 [DEBUG] [Thread-135876] [transport.py] [_log()] Compression: none
2025-12-31T22:35:49.115 [DEBUG] [Thread-135876] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:35:49.173 [DEBUG] [Thread-135876] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:35:49.173 [DEBUG] [Thread-135876] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:35:49.173 [DEBUG] [Thread-135876] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T22:35:49.173 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T22:35:49.173 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:35:49.230 [DEBUG] [Thread-135876] [transport.py] [_log()] userauth is OK
2025-12-31T22:35:49.230 [DEBUG] [Thread-135876] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:35:49.230 [DEBUG] [Thread-135876] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:35:49.230 [DEBUG] [Thread-135876] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T22:35:49.230 [DEBUG] [Thread-135876] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:35:49.247 [INFO] [Thread-135876] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:35:49.247 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T22:35:49.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:35:50.101 [DEBUG] [Thread-135876] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:35:50.101 [DEBUG] [Thread-135876] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:35:50.149 [DEBUG] [Thread-135876] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:35:50.149 [DEBUG] [Thread-135876] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:35:50.159 [DEBUG] [Thread-135876] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:35:50.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:35:50.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T22:35:50.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T22:35:50.186 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:35:50.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:35:50.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:35:50.195 [DEBUG] [Thread-135876] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:35:50.598 [DEBUG] [Thread-135878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:36:05.655 [DEBUG] [Thread-135879 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:36:15.577 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:36:15.578 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:36:20.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T22:36:20.205 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T22:36:20.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-12-31T22:36:20.687 [DEBUG] [Thread-135880 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:36:20.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 22, 36, 12), 5.02, 71.99, 0.0, 20.86, 15.74, 0, 0, 0, 2, 0, 0),)
2025-12-31T22:36:20.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 22:36:12
2025-12-31T22:36:21.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T22:36:21.196 [DEBUG] [Thread-135881] [transport.py] [_log()] starting thread (client mode): 0xb1794370
2025-12-31T22:36:21.196 [DEBUG] [Thread-135881] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:36:21.216 [DEBUG] [Thread-135881] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T22:36:21.216 [INFO] [Thread-135881] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T22:36:21.219 [DEBUG] [Thread-135881] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:36:21.220 [DEBUG] [Thread-135881] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T22:36:21.220 [DEBUG] [Thread-135881] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:36:21.220 [DEBUG] [Thread-135881] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:36:21.220 [DEBUG] [Thread-135881] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:36:21.220 [DEBUG] [Thread-135881] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:36:21.220 [DEBUG] [Thread-135881] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:36:21.220 [DEBUG] [Thread-135881] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:36:21.220 [DEBUG] [Thread-135881] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:36:21.220 [DEBUG] [Thread-135881] [transport.py] [_log()] client lang: <none>
2025-12-31T22:36:21.220 [DEBUG] [Thread-135881] [transport.py] [_log()] server lang: <none>
2025-12-31T22:36:21.220 [DEBUG] [Thread-135881] [transport.py] [_log()] kex follows: False
2025-12-31T22:36:21.220 [DEBUG] [Thread-135881] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:36:21.220 [DEBUG] [Thread-135881] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:36:21.220 [DEBUG] [Thread-135881] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:36:21.220 [DEBUG] [Thread-135881] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:36:21.221 [DEBUG] [Thread-135881] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:36:21.221 [DEBUG] [Thread-135881] [transport.py] [_log()] Compression: none
2025-12-31T22:36:21.221 [DEBUG] [Thread-135881] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:36:21.238 [DEBUG] [Thread-135881] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:36:21.239 [DEBUG] [Thread-135881] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:36:21.239 [DEBUG] [Thread-135881] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T22:36:21.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T22:36:21.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:36:21.241 [DEBUG] [Thread-135881] [transport.py] [_log()] userauth is OK
2025-12-31T22:36:21.241 [DEBUG] [Thread-135881] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:36:21.241 [DEBUG] [Thread-135881] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:36:21.241 [DEBUG] [Thread-135881] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T22:36:21.241 [DEBUG] [Thread-135881] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:36:21.264 [INFO] [Thread-135881] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:36:21.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:36:21.898 [DEBUG] [Thread-135881] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:36:21.898 [DEBUG] [Thread-135881] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:36:21.898 [DEBUG] [Thread-135881] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T22:36:21.939 [DEBUG] [Thread-135881] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:36:21.939 [DEBUG] [Thread-135881] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:36:21.942 [DEBUG] [Thread-135881] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:36:21.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:36:21.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T22:36:21.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T22:36:21.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T22:36:21.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:36:21.960 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T22:36:21.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:36:21.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:36:21.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T22:36:21.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.858122 -999.00  +15.90  13.52     74  +11.40 1 2 1 1 1     0    0 4.16 -19.44 ..... 15.1 13.5 190.2 25.6 17.2 -11.0 17.0 -11.6 16.9 -11.2 17.2 -10.7
2025-12-31T22:36:21.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T22:36:21.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T22:36:21.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.858122
2025-12-31T22:36:21.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T22:36:21.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T22:36:21.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T22:36:21.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T22:36:21.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T22:36:21.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T22:36:12', tmtdew=5.02, humidity=71.99, cloud=0.0, wind=20.86, temperature=15.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T22:22:50', seeing=1.62, atlas_timestamp='2025-12-31T20:35:41.741', atlas_cloud=2, atlas_rain=1, zp_data=[0.2602499999999992, 0.44475000000000087, 0.7302500000000007, 0.22100000000000009, 0.665, 0.8302500000000013, 0.5669999999999993, 0.4302500000000009, 0.39949999999999974, 0.4095000000000013, 0.8602499999999988, 0.41999999999999993, 0.3490000000000002, 0.4262499999999996, 0.5399999999999991, 0.019000000000000128, 0.8522499999999997, 0.4294999999999991, 0.9249999999999989, 0.5342499999999992, 0.34750000000000014, 0.24074999999999847, -0.13574999999999982, -0.4472499999999986, 0.6789999999999994, nan, 1.1087499999999997, -0.8900000000000006, 0.2450000000000001, -0.4939999999999998, -1.2979999999999983, -1.4959999999999987, -0.4202500000000011], zp_timestamp='2025-12-31T20:15:00')
2025-12-31T22:36:21.961 [DEBUG] [Thread-135881] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:36:22.034 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T22:36:22.047 [DEBUG] [Thread-135884] [transport.py] [_log()] starting thread (client mode): 0xb1794c70
2025-12-31T22:36:22.047 [DEBUG] [Thread-135884] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:36:22.062 [DEBUG] [Thread-135884] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T22:36:22.063 [INFO] [Thread-135884] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T22:36:22.070 [DEBUG] [Thread-135884] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:36:22.070 [DEBUG] [Thread-135884] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T22:36:22.070 [DEBUG] [Thread-135884] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:36:22.070 [DEBUG] [Thread-135884] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:36:22.070 [DEBUG] [Thread-135884] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:36:22.070 [DEBUG] [Thread-135884] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:36:22.070 [DEBUG] [Thread-135884] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:36:22.070 [DEBUG] [Thread-135884] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:36:22.070 [DEBUG] [Thread-135884] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:36:22.070 [DEBUG] [Thread-135884] [transport.py] [_log()] client lang: <none>
2025-12-31T22:36:22.070 [DEBUG] [Thread-135884] [transport.py] [_log()] server lang: <none>
2025-12-31T22:36:22.070 [DEBUG] [Thread-135884] [transport.py] [_log()] kex follows: False
2025-12-31T22:36:22.070 [DEBUG] [Thread-135884] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:36:22.070 [DEBUG] [Thread-135884] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:36:22.070 [DEBUG] [Thread-135884] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:36:22.070 [DEBUG] [Thread-135884] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:36:22.070 [DEBUG] [Thread-135884] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:36:22.071 [DEBUG] [Thread-135884] [transport.py] [_log()] Compression: none
2025-12-31T22:36:22.071 [DEBUG] [Thread-135884] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:36:22.129 [DEBUG] [Thread-135884] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:36:22.129 [DEBUG] [Thread-135884] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:36:22.129 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T22:36:22.129 [DEBUG] [Thread-135884] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T22:36:22.129 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:36:22.186 [DEBUG] [Thread-135884] [transport.py] [_log()] userauth is OK
2025-12-31T22:36:22.186 [DEBUG] [Thread-135884] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:36:22.186 [DEBUG] [Thread-135884] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:36:22.186 [DEBUG] [Thread-135884] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T22:36:22.186 [DEBUG] [Thread-135884] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:36:22.200 [INFO] [Thread-135884] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:36:22.200 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T22:36:22.200 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:36:23.019 [DEBUG] [Thread-135884] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:36:23.019 [DEBUG] [Thread-135884] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:36:23.067 [DEBUG] [Thread-135884] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:36:23.067 [DEBUG] [Thread-135884] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:36:23.076 [DEBUG] [Thread-135884] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:36:23.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:36:23.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T22:36:23.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T22:36:23.100 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:36:23.100 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:36:23.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:36:23.108 [DEBUG] [Thread-135884] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:36:35.717 [DEBUG] [Thread-135886 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:36:48.494 [DEBUG] [Thread-135887 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:36:50.780 [DEBUG] [Thread-135888 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:36:53.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T22:36:53.115 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T22:36:53.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T22:36:53.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 22, 36, 44), 5.03, 71.98, 0.0, 19.16, 15.71, 0, 0, 0, 2, 0, 0),)
2025-12-31T22:36:53.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 22:36:44
2025-12-31T22:36:53.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T22:36:54.098 [DEBUG] [Thread-135889] [transport.py] [_log()] starting thread (client mode): 0xb1797d30
2025-12-31T22:36:54.098 [DEBUG] [Thread-135889] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:36:54.118 [DEBUG] [Thread-135889] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T22:36:54.118 [INFO] [Thread-135889] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T22:36:54.121 [DEBUG] [Thread-135889] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:36:54.122 [DEBUG] [Thread-135889] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T22:36:54.122 [DEBUG] [Thread-135889] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:36:54.122 [DEBUG] [Thread-135889] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:36:54.122 [DEBUG] [Thread-135889] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:36:54.122 [DEBUG] [Thread-135889] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:36:54.122 [DEBUG] [Thread-135889] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:36:54.122 [DEBUG] [Thread-135889] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:36:54.122 [DEBUG] [Thread-135889] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:36:54.122 [DEBUG] [Thread-135889] [transport.py] [_log()] client lang: <none>
2025-12-31T22:36:54.122 [DEBUG] [Thread-135889] [transport.py] [_log()] server lang: <none>
2025-12-31T22:36:54.122 [DEBUG] [Thread-135889] [transport.py] [_log()] kex follows: False
2025-12-31T22:36:54.122 [DEBUG] [Thread-135889] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:36:54.123 [DEBUG] [Thread-135889] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:36:54.123 [DEBUG] [Thread-135889] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:36:54.123 [DEBUG] [Thread-135889] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:36:54.123 [DEBUG] [Thread-135889] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:36:54.123 [DEBUG] [Thread-135889] [transport.py] [_log()] Compression: none
2025-12-31T22:36:54.123 [DEBUG] [Thread-135889] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:36:54.141 [DEBUG] [Thread-135889] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:36:54.142 [DEBUG] [Thread-135889] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:36:54.143 [DEBUG] [Thread-135889] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T22:36:54.143 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T22:36:54.143 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:36:54.145 [DEBUG] [Thread-135889] [transport.py] [_log()] userauth is OK
2025-12-31T22:36:54.145 [DEBUG] [Thread-135889] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:36:54.145 [DEBUG] [Thread-135889] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:36:54.145 [DEBUG] [Thread-135889] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T22:36:54.145 [DEBUG] [Thread-135889] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:36:54.181 [INFO] [Thread-135889] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:36:54.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:36:54.822 [DEBUG] [Thread-135889] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:36:54.822 [DEBUG] [Thread-135889] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:36:54.823 [DEBUG] [Thread-135889] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T22:36:54.863 [DEBUG] [Thread-135889] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:36:54.863 [DEBUG] [Thread-135889] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:36:54.867 [DEBUG] [Thread-135889] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:36:54.879 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:36:54.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T22:36:54.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T22:36:54.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T22:36:54.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:36:54.890 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T22:36:54.890 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:36:54.890 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:36:54.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T22:36:54.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.858470 -999.00  +15.90  15.68     74  +11.40 1 3 1 1 1     0    0 4.11 -17.40 ----- 15.7 15.7 205.4 18.9 17.2 -10.9 17.0 -11.5 16.9 -11.3 17.2 -10.7
2025-12-31T22:36:54.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T22:36:54.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T22:36:54.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.858470
2025-12-31T22:36:54.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T22:36:54.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T22:36:54.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T22:36:54.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T22:36:54.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-31T22:36:54.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T22:36:44', tmtdew=5.03, humidity=71.98, cloud=0.0, wind=19.16, temperature=15.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T22:22:50', seeing=1.62, atlas_timestamp='2025-12-31T20:36:11.808', atlas_cloud=3, atlas_rain=1, zp_data=[0.2602499999999992, 0.44475000000000087, 0.7302500000000007, 0.22100000000000009, 0.665, 0.8302500000000013, 0.5669999999999993, 0.4302500000000009, 0.39949999999999974, 0.4095000000000013, 0.8602499999999988, 0.41999999999999993, 0.3490000000000002, 0.4262499999999996, 0.5399999999999991, 0.019000000000000128, 0.8522499999999997, 0.4294999999999991, 0.9249999999999989, 0.5342499999999992, 0.34750000000000014, 0.24074999999999847, -0.13574999999999982, -0.4472499999999986, 0.6789999999999994, nan, 1.1087499999999997, -0.8900000000000006, 0.2450000000000001, -0.4939999999999998, -1.2979999999999983, -1.4959999999999987, -0.4202500000000011], zp_timestamp='2025-12-31T20:15:00')
2025-12-31T22:36:54.893 [DEBUG] [Thread-135889] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:36:54.976 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T22:36:54.987 [DEBUG] [Thread-135892] [transport.py] [_log()] starting thread (client mode): 0xb1797850
2025-12-31T22:36:54.987 [DEBUG] [Thread-135892] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:36:55.003 [DEBUG] [Thread-135892] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T22:36:55.003 [INFO] [Thread-135892] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T22:36:55.010 [DEBUG] [Thread-135892] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:36:55.010 [DEBUG] [Thread-135892] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T22:36:55.010 [DEBUG] [Thread-135892] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:36:55.010 [DEBUG] [Thread-135892] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:36:55.010 [DEBUG] [Thread-135892] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:36:55.011 [DEBUG] [Thread-135892] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:36:55.011 [DEBUG] [Thread-135892] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:36:55.011 [DEBUG] [Thread-135892] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:36:55.011 [DEBUG] [Thread-135892] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:36:55.011 [DEBUG] [Thread-135892] [transport.py] [_log()] client lang: <none>
2025-12-31T22:36:55.011 [DEBUG] [Thread-135892] [transport.py] [_log()] server lang: <none>
2025-12-31T22:36:55.011 [DEBUG] [Thread-135892] [transport.py] [_log()] kex follows: False
2025-12-31T22:36:55.011 [DEBUG] [Thread-135892] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:36:55.011 [DEBUG] [Thread-135892] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:36:55.011 [DEBUG] [Thread-135892] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:36:55.011 [DEBUG] [Thread-135892] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:36:55.011 [DEBUG] [Thread-135892] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:36:55.011 [DEBUG] [Thread-135892] [transport.py] [_log()] Compression: none
2025-12-31T22:36:55.011 [DEBUG] [Thread-135892] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:36:55.075 [DEBUG] [Thread-135892] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:36:55.075 [DEBUG] [Thread-135892] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:36:55.076 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T22:36:55.076 [DEBUG] [Thread-135892] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T22:36:55.077 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:36:55.131 [DEBUG] [Thread-135892] [transport.py] [_log()] userauth is OK
2025-12-31T22:36:55.131 [DEBUG] [Thread-135892] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:36:55.131 [DEBUG] [Thread-135892] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:36:55.131 [DEBUG] [Thread-135892] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T22:36:55.131 [DEBUG] [Thread-135892] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:36:55.150 [INFO] [Thread-135892] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:36:55.150 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T22:36:55.150 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:36:56.039 [DEBUG] [Thread-135892] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:36:56.039 [DEBUG] [Thread-135892] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:36:56.086 [DEBUG] [Thread-135892] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:36:56.087 [DEBUG] [Thread-135892] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:36:56.095 [DEBUG] [Thread-135892] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:36:56.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:36:56.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T22:36:56.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-12-31T22:36:56.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:36:56.121 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:36:56.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:36:56.129 [DEBUG] [Thread-135892] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:37:05.813 [DEBUG] [Thread-135894 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:37:15.782 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:37:15.783 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:37:20.854 [DEBUG] [Thread-135895 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:37:26.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T22:37:26.126 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T22:37:26.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T22:37:26.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 22, 37, 16), 5.03, 71.98, 0.0, 22.43, 15.73, 0, 0, 0, 2, 0, 0),)
2025-12-31T22:37:26.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 22:37:16
2025-12-31T22:37:26.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T22:37:27.133 [DEBUG] [Thread-135896] [transport.py] [_log()] starting thread (client mode): 0xb1796410
2025-12-31T22:37:27.133 [DEBUG] [Thread-135896] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:37:27.145 [DEBUG] [Thread-135896] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T22:37:27.145 [INFO] [Thread-135896] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T22:37:27.147 [DEBUG] [Thread-135896] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:37:27.147 [DEBUG] [Thread-135896] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T22:37:27.147 [DEBUG] [Thread-135896] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:37:27.147 [DEBUG] [Thread-135896] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:37:27.147 [DEBUG] [Thread-135896] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:37:27.147 [DEBUG] [Thread-135896] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:37:27.147 [DEBUG] [Thread-135896] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:37:27.147 [DEBUG] [Thread-135896] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:37:27.147 [DEBUG] [Thread-135896] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:37:27.147 [DEBUG] [Thread-135896] [transport.py] [_log()] client lang: <none>
2025-12-31T22:37:27.147 [DEBUG] [Thread-135896] [transport.py] [_log()] server lang: <none>
2025-12-31T22:37:27.147 [DEBUG] [Thread-135896] [transport.py] [_log()] kex follows: False
2025-12-31T22:37:27.148 [DEBUG] [Thread-135896] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:37:27.148 [DEBUG] [Thread-135896] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:37:27.148 [DEBUG] [Thread-135896] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:37:27.148 [DEBUG] [Thread-135896] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:37:27.148 [DEBUG] [Thread-135896] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:37:27.148 [DEBUG] [Thread-135896] [transport.py] [_log()] Compression: none
2025-12-31T22:37:27.148 [DEBUG] [Thread-135896] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:37:27.155 [DEBUG] [Thread-135896] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:37:27.156 [DEBUG] [Thread-135896] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:37:27.156 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T22:37:27.156 [DEBUG] [Thread-135896] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T22:37:27.156 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:37:27.157 [DEBUG] [Thread-135896] [transport.py] [_log()] userauth is OK
2025-12-31T22:37:27.157 [DEBUG] [Thread-135896] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:37:27.157 [DEBUG] [Thread-135896] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:37:27.157 [DEBUG] [Thread-135896] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T22:37:27.157 [DEBUG] [Thread-135896] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:37:27.177 [INFO] [Thread-135896] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:37:27.177 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:37:27.826 [DEBUG] [Thread-135896] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:37:27.826 [DEBUG] [Thread-135896] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:37:27.826 [DEBUG] [Thread-135896] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T22:37:27.867 [DEBUG] [Thread-135896] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:37:27.867 [DEBUG] [Thread-135896] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:37:27.870 [DEBUG] [Thread-135896] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:37:27.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:37:27.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T22:37:27.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T22:37:27.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T22:37:27.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:37:27.894 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T22:37:27.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:37:27.894 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:37:27.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T22:37:27.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.858817 -999.00  +15.90  18.65     75  +11.40 1 2 1 1 1     0    0 4.10 -17.28 ...s. 17.9 18.6 195.0 22.7 17.2 -11.2 17.0 -11.8 16.8 -11.5 17.1 -10.9
2025-12-31T22:37:27.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T22:37:27.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T22:37:27.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.858817
2025-12-31T22:37:27.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T22:37:27.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T22:37:27.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T22:37:27.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T22:37:27.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T22:37:27.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T22:37:16', tmtdew=5.03, humidity=71.98, cloud=0.0, wind=22.43, temperature=15.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T22:22:50', seeing=1.62, atlas_timestamp='2025-12-31T20:36:41.789', atlas_cloud=2, atlas_rain=1, zp_data=[0.2602499999999992, 0.44475000000000087, 0.7302500000000007, 0.22100000000000009, 0.665, 0.8302500000000013, 0.5669999999999993, 0.4302500000000009, 0.39949999999999974, 0.4095000000000013, 0.8602499999999988, 0.41999999999999993, 0.3490000000000002, 0.4262499999999996, 0.5399999999999991, 0.019000000000000128, 0.8522499999999997, 0.4294999999999991, 0.9249999999999989, 0.5342499999999992, 0.34750000000000014, 0.24074999999999847, -0.13574999999999982, -0.4472499999999986, 0.6789999999999994, nan, 1.1087499999999997, -0.8900000000000006, 0.2450000000000001, -0.4939999999999998, -1.2979999999999983, -1.4959999999999987, -0.4202500000000011], zp_timestamp='2025-12-31T20:15:00')
2025-12-31T22:37:27.897 [DEBUG] [Thread-135896] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:37:27.980 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T22:37:35.887 [DEBUG] [Thread-135899 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:37:48.566 [DEBUG] [Thread-135900 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:37:50.931 [DEBUG] [Thread-135901 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:38:02.974 [DEBUG] [Thread-135902] [transport.py] [_log()] starting thread (client mode): 0xb17971f0
2025-12-31T22:38:02.975 [DEBUG] [Thread-135902] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:38:02.990 [DEBUG] [Thread-135902] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T22:38:02.990 [INFO] [Thread-135902] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T22:38:02.998 [DEBUG] [Thread-135902] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:38:02.998 [DEBUG] [Thread-135902] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T22:38:02.998 [DEBUG] [Thread-135902] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:38:02.998 [DEBUG] [Thread-135902] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:38:02.998 [DEBUG] [Thread-135902] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:38:02.999 [DEBUG] [Thread-135902] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:38:02.999 [DEBUG] [Thread-135902] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:38:02.999 [DEBUG] [Thread-135902] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:38:02.999 [DEBUG] [Thread-135902] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:38:02.999 [DEBUG] [Thread-135902] [transport.py] [_log()] client lang: <none>
2025-12-31T22:38:02.999 [DEBUG] [Thread-135902] [transport.py] [_log()] server lang: <none>
2025-12-31T22:38:02.999 [DEBUG] [Thread-135902] [transport.py] [_log()] kex follows: False
2025-12-31T22:38:02.999 [DEBUG] [Thread-135902] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:38:02.999 [DEBUG] [Thread-135902] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:38:02.999 [DEBUG] [Thread-135902] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:38:02.999 [DEBUG] [Thread-135902] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:38:02.999 [DEBUG] [Thread-135902] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:38:02.999 [DEBUG] [Thread-135902] [transport.py] [_log()] Compression: none
2025-12-31T22:38:03.000 [DEBUG] [Thread-135902] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:38:03.063 [DEBUG] [Thread-135902] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:38:03.064 [DEBUG] [Thread-135902] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:38:03.073 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T22:38:03.074 [DEBUG] [Thread-135902] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T22:38:03.075 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:38:03.128 [DEBUG] [Thread-135902] [transport.py] [_log()] userauth is OK
2025-12-31T22:38:03.128 [DEBUG] [Thread-135902] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:38:03.128 [DEBUG] [Thread-135902] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:38:03.128 [DEBUG] [Thread-135902] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T22:38:03.128 [DEBUG] [Thread-135902] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:38:03.149 [INFO] [Thread-135902] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:38:03.150 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T22:38:03.150 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:38:04.024 [DEBUG] [Thread-135902] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:38:04.024 [DEBUG] [Thread-135902] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:38:04.072 [DEBUG] [Thread-135902] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:38:04.072 [DEBUG] [Thread-135902] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:38:04.081 [DEBUG] [Thread-135902] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:38:04.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:38:04.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T22:38:04.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T22:38:04.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:38:04.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:38:04.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:38:04.119 [DEBUG] [Thread-135902] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:38:05.967 [DEBUG] [Thread-135904 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:38:15.985 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:38:15.986 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:38:20.999 [DEBUG] [Thread-135905 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:38:34.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T22:38:34.133 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T22:38:34.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T22:38:34.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 22, 38, 20), 4.95, 72.09, 0.0, 18.7, 15.71, 0, 0, 0, 2, 0, 0),)
2025-12-31T22:38:34.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 22:38:20
2025-12-31T22:38:34.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T22:38:35.118 [DEBUG] [Thread-135906] [transport.py] [_log()] starting thread (client mode): 0xb1794220
2025-12-31T22:38:35.118 [DEBUG] [Thread-135906] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:38:35.137 [DEBUG] [Thread-135906] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T22:38:35.137 [INFO] [Thread-135906] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T22:38:35.140 [DEBUG] [Thread-135906] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:38:35.140 [DEBUG] [Thread-135906] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T22:38:35.140 [DEBUG] [Thread-135906] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:38:35.140 [DEBUG] [Thread-135906] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:38:35.140 [DEBUG] [Thread-135906] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:38:35.140 [DEBUG] [Thread-135906] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:38:35.140 [DEBUG] [Thread-135906] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:38:35.140 [DEBUG] [Thread-135906] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:38:35.140 [DEBUG] [Thread-135906] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:38:35.140 [DEBUG] [Thread-135906] [transport.py] [_log()] client lang: <none>
2025-12-31T22:38:35.141 [DEBUG] [Thread-135906] [transport.py] [_log()] server lang: <none>
2025-12-31T22:38:35.141 [DEBUG] [Thread-135906] [transport.py] [_log()] kex follows: False
2025-12-31T22:38:35.141 [DEBUG] [Thread-135906] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:38:35.141 [DEBUG] [Thread-135906] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:38:35.141 [DEBUG] [Thread-135906] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:38:35.141 [DEBUG] [Thread-135906] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:38:35.141 [DEBUG] [Thread-135906] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:38:35.141 [DEBUG] [Thread-135906] [transport.py] [_log()] Compression: none
2025-12-31T22:38:35.141 [DEBUG] [Thread-135906] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:38:35.158 [DEBUG] [Thread-135906] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:38:35.158 [DEBUG] [Thread-135906] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:38:35.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T22:38:35.159 [DEBUG] [Thread-135906] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T22:38:35.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:38:35.161 [DEBUG] [Thread-135906] [transport.py] [_log()] userauth is OK
2025-12-31T22:38:35.162 [DEBUG] [Thread-135906] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:38:35.162 [DEBUG] [Thread-135906] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:38:35.162 [DEBUG] [Thread-135906] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T22:38:35.162 [DEBUG] [Thread-135906] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:38:35.186 [INFO] [Thread-135906] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:38:35.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:38:35.826 [DEBUG] [Thread-135906] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:38:35.826 [DEBUG] [Thread-135906] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:38:35.826 [DEBUG] [Thread-135906] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T22:38:35.868 [DEBUG] [Thread-135906] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:38:35.868 [DEBUG] [Thread-135906] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:38:35.871 [DEBUG] [Thread-135906] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:38:35.884 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:38:35.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T22:38:35.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T22:38:35.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T22:38:35.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:38:35.896 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T22:38:35.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:38:35.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:38:35.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T22:38:35.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.859511 -999.00  +15.80  13.43     75  +11.50 1 2 1 1 1     0    0 4.10 -18.26 ..... 16.5 13.4 202.0 18.8 17.1 -11.1 16.9 -12.2 16.8 -11.5 17.1 -11.2
2025-12-31T22:38:35.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T22:38:35.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T22:38:35.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.859511
2025-12-31T22:38:35.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T22:38:35.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T22:38:35.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T22:38:35.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T22:38:35.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T22:38:35.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T22:38:20', tmtdew=4.95, humidity=72.09, cloud=0.0, wind=18.7, temperature=15.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T22:22:50', seeing=1.62, atlas_timestamp='2025-12-31T20:37:41.750', atlas_cloud=2, atlas_rain=1, zp_data=[0.2602499999999992, 0.44475000000000087, 0.7302500000000007, 0.22100000000000009, 0.665, 0.8302500000000013, 0.5669999999999993, 0.4302500000000009, 0.39949999999999974, 0.4095000000000013, 0.8602499999999988, 0.41999999999999993, 0.3490000000000002, 0.4262499999999996, 0.5399999999999991, 0.019000000000000128, 0.8522499999999997, 0.4294999999999991, 0.9249999999999989, 0.5342499999999992, 0.34750000000000014, 0.24074999999999847, -0.13574999999999982, -0.4472499999999986, 0.6789999999999994, nan, 1.1087499999999997, -0.8900000000000006, 0.2450000000000001, -0.4939999999999998, -1.2979999999999983, -1.4959999999999987, -0.4202500000000011], zp_timestamp='2025-12-31T20:15:00')
2025-12-31T22:38:35.899 [DEBUG] [Thread-135906] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:38:35.983 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T22:38:35.995 [DEBUG] [Thread-135909] [transport.py] [_log()] starting thread (client mode): 0xb1794310
2025-12-31T22:38:35.995 [DEBUG] [Thread-135909] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:38:36.012 [DEBUG] [Thread-135909] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T22:38:36.012 [INFO] [Thread-135909] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T22:38:36.019 [DEBUG] [Thread-135909] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:38:36.019 [DEBUG] [Thread-135909] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T22:38:36.019 [DEBUG] [Thread-135909] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:38:36.019 [DEBUG] [Thread-135909] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:38:36.019 [DEBUG] [Thread-135909] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:38:36.020 [DEBUG] [Thread-135909] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:38:36.020 [DEBUG] [Thread-135909] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:38:36.020 [DEBUG] [Thread-135909] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:38:36.020 [DEBUG] [Thread-135909] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:38:36.020 [DEBUG] [Thread-135909] [transport.py] [_log()] client lang: <none>
2025-12-31T22:38:36.020 [DEBUG] [Thread-135909] [transport.py] [_log()] server lang: <none>
2025-12-31T22:38:36.020 [DEBUG] [Thread-135909] [transport.py] [_log()] kex follows: False
2025-12-31T22:38:36.020 [DEBUG] [Thread-135909] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:38:36.020 [DEBUG] [Thread-135909] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:38:36.020 [DEBUG] [Thread-135909] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:38:36.020 [DEBUG] [Thread-135909] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:38:36.020 [DEBUG] [Thread-135909] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:38:36.020 [DEBUG] [Thread-135909] [transport.py] [_log()] Compression: none
2025-12-31T22:38:36.020 [DEBUG] [Thread-135909] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:38:36.027 [DEBUG] [Thread-135911 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:38:36.078 [DEBUG] [Thread-135909] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:38:36.078 [DEBUG] [Thread-135909] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:38:36.079 [DEBUG] [Thread-135909] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T22:38:36.079 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T22:38:36.079 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:38:36.134 [DEBUG] [Thread-135909] [transport.py] [_log()] userauth is OK
2025-12-31T22:38:36.134 [DEBUG] [Thread-135909] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:38:36.134 [DEBUG] [Thread-135909] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:38:36.134 [DEBUG] [Thread-135909] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T22:38:36.134 [DEBUG] [Thread-135909] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:38:36.154 [INFO] [Thread-135909] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:38: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-12-31T22:38:36.154 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:38:37.021 [DEBUG] [Thread-135909] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:38:37.022 [DEBUG] [Thread-135909] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:38:37.070 [DEBUG] [Thread-135909] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:38:37.070 [DEBUG] [Thread-135909] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:38:37.079 [DEBUG] [Thread-135909] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:38:37.088 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:38:37.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T22:38:37.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T22:38:37.105 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:38:37.105 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:38:37.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:38:37.113 [DEBUG] [Thread-135909] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:38:48.643 [DEBUG] [Thread-135912 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:38:51.089 [DEBUG] [Thread-135913 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:39:06.121 [DEBUG] [Thread-135914 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:39:07.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T22:39:07.137 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T22:39:07.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-12-31T22:39:07.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 22, 38, 52), 5.0, 72.13, 0.0, 20.31, 15.74, 0, 0, 0, 2, 0, 0),)
2025-12-31T22:39:07.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 22:38:52
2025-12-31T22:39:07.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T22:39:08.115 [DEBUG] [Thread-135915] [transport.py] [_log()] starting thread (client mode): 0xb1794b20
2025-12-31T22:39:08.115 [DEBUG] [Thread-135915] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:39:08.135 [DEBUG] [Thread-135915] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T22:39:08.135 [INFO] [Thread-135915] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T22:39:08.138 [DEBUG] [Thread-135915] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:39:08.138 [DEBUG] [Thread-135915] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T22:39:08.138 [DEBUG] [Thread-135915] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:39:08.138 [DEBUG] [Thread-135915] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:39:08.139 [DEBUG] [Thread-135915] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:39:08.139 [DEBUG] [Thread-135915] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:39:08.139 [DEBUG] [Thread-135915] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:39:08.139 [DEBUG] [Thread-135915] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:39:08.139 [DEBUG] [Thread-135915] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:39:08.139 [DEBUG] [Thread-135915] [transport.py] [_log()] client lang: <none>
2025-12-31T22:39:08.139 [DEBUG] [Thread-135915] [transport.py] [_log()] server lang: <none>
2025-12-31T22:39:08.139 [DEBUG] [Thread-135915] [transport.py] [_log()] kex follows: False
2025-12-31T22:39:08.139 [DEBUG] [Thread-135915] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:39:08.139 [DEBUG] [Thread-135915] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:39:08.139 [DEBUG] [Thread-135915] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:39:08.139 [DEBUG] [Thread-135915] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:39:08.139 [DEBUG] [Thread-135915] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:39:08.139 [DEBUG] [Thread-135915] [transport.py] [_log()] Compression: none
2025-12-31T22:39:08.139 [DEBUG] [Thread-135915] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:39:08.157 [DEBUG] [Thread-135915] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:39:08.157 [DEBUG] [Thread-135915] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:39:08.158 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T22:39:08.158 [DEBUG] [Thread-135915] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T22:39:08.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:39:08.201 [DEBUG] [Thread-135915] [transport.py] [_log()] userauth is OK
2025-12-31T22:39:08.201 [DEBUG] [Thread-135915] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:39:08.201 [DEBUG] [Thread-135915] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:39:08.201 [DEBUG] [Thread-135915] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T22:39:08.201 [DEBUG] [Thread-135915] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:39:08.235 [INFO] [Thread-135915] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:39:08.236 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:39:08.898 [DEBUG] [Thread-135915] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:39:08.899 [DEBUG] [Thread-135915] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:39:08.899 [DEBUG] [Thread-135915] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T22:39:08.940 [DEBUG] [Thread-135915] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:39:08.940 [DEBUG] [Thread-135915] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:39:08.944 [DEBUG] [Thread-135915] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:39:08.956 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:39:08.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T22:39:08.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T22:39:08.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T22:39:08.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:39:08.969 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T22:39:08.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:39:08.969 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:39:08.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T22:39:08.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.859858 -999.00  +15.80  13.38     75  +11.40 1 2 1 1 1     0    0 4.10 -18.32 ..... 10.3 13.4 206.9 22.9 17.1 -11.4 17.0 -12.6 16.8 -12.0 17.1 -11.3
2025-12-31T22:39:08.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T22:39:08.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T22:39:08.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.859858
2025-12-31T22:39:08.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T22:39:08.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T22:39:08.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T22:39:08.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T22:39:08.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T22:39:08.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T22:38:52', tmtdew=5.0, humidity=72.13, cloud=0.0, wind=20.31, temperature=15.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T22:22:50', seeing=1.62, atlas_timestamp='2025-12-31T20:38:11.731', atlas_cloud=2, atlas_rain=1, zp_data=[0.2602499999999992, 0.44475000000000087, 0.7302500000000007, 0.22100000000000009, 0.665, 0.8302500000000013, 0.5669999999999993, 0.4302500000000009, 0.39949999999999974, 0.4095000000000013, 0.8602499999999988, 0.41999999999999993, 0.3490000000000002, 0.4262499999999996, 0.5399999999999991, 0.019000000000000128, 0.8522499999999997, 0.4294999999999991, 0.9249999999999989, 0.5342499999999992, 0.34750000000000014, 0.24074999999999847, -0.13574999999999982, -0.4472499999999986, 0.6789999999999994, nan, 1.1087499999999997, -0.8900000000000006, 0.2450000000000001, -0.4939999999999998, -1.2979999999999983, -1.4959999999999987, -0.4202500000000011], zp_timestamp='2025-12-31T20:15:00')
2025-12-31T22:39:08.972 [DEBUG] [Thread-135915] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:39:09.054 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T22:39:09.066 [DEBUG] [Thread-135918] [transport.py] [_log()] starting thread (client mode): 0xb1797040
2025-12-31T22:39:09.066 [DEBUG] [Thread-135918] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:39:09.081 [DEBUG] [Thread-135918] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T22:39:09.081 [INFO] [Thread-135918] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T22:39:09.088 [DEBUG] [Thread-135918] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:39:09.088 [DEBUG] [Thread-135918] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T22:39:09.089 [DEBUG] [Thread-135918] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:39:09.089 [DEBUG] [Thread-135918] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:39:09.089 [DEBUG] [Thread-135918] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:39:09.089 [DEBUG] [Thread-135918] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:39:09.089 [DEBUG] [Thread-135918] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:39:09.089 [DEBUG] [Thread-135918] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:39:09.089 [DEBUG] [Thread-135918] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:39:09.089 [DEBUG] [Thread-135918] [transport.py] [_log()] client lang: <none>
2025-12-31T22:39:09.089 [DEBUG] [Thread-135918] [transport.py] [_log()] server lang: <none>
2025-12-31T22:39:09.089 [DEBUG] [Thread-135918] [transport.py] [_log()] kex follows: False
2025-12-31T22:39:09.089 [DEBUG] [Thread-135918] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:39:09.089 [DEBUG] [Thread-135918] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:39:09.089 [DEBUG] [Thread-135918] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:39:09.089 [DEBUG] [Thread-135918] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:39:09.089 [DEBUG] [Thread-135918] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:39:09.089 [DEBUG] [Thread-135918] [transport.py] [_log()] Compression: none
2025-12-31T22:39:09.089 [DEBUG] [Thread-135918] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:39:09.147 [DEBUG] [Thread-135918] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:39:09.147 [DEBUG] [Thread-135918] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:39:09.148 [DEBUG] [Thread-135918] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T22:39:09.148 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T22:39:09.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:39:09.203 [DEBUG] [Thread-135918] [transport.py] [_log()] userauth is OK
2025-12-31T22:39:09.204 [DEBUG] [Thread-135918] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:39:09.204 [DEBUG] [Thread-135918] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:39:09.204 [DEBUG] [Thread-135918] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T22:39:09.204 [DEBUG] [Thread-135918] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:39:09.222 [INFO] [Thread-135918] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:39:09.223 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T22:39:09.223 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:39:10.049 [DEBUG] [Thread-135918] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:39:10.049 [DEBUG] [Thread-135918] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:39:10.096 [DEBUG] [Thread-135918] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:39:10.097 [DEBUG] [Thread-135918] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:39:10.105 [DEBUG] [Thread-135918] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:39:10.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:39:10.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T22:39:10.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-12-31T22:39:10.131 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:39:10.131 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:39:10.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:39:10.139 [DEBUG] [Thread-135918] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:39:16.192 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:39:16.193 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:39:21.157 [DEBUG] [Thread-135920 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:39:36.210 [DEBUG] [Thread-135921 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:39:40.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T22:39:40.161 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T22:39:40.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T22:39:40.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 22, 39, 24), 4.99, 72.13, 0.0, 19.53, 15.68, 0, 0, 0, 2, 0, 0),)
2025-12-31T22:39:40.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 22:39:24
2025-12-31T22:39:41.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T22:39:41.193 [DEBUG] [Thread-135922] [transport.py] [_log()] starting thread (client mode): 0xb1747070
2025-12-31T22:39:41.194 [DEBUG] [Thread-135922] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:39:41.213 [DEBUG] [Thread-135922] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T22:39:41.214 [INFO] [Thread-135922] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T22:39:41.217 [DEBUG] [Thread-135922] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:39:41.217 [DEBUG] [Thread-135922] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T22:39:41.217 [DEBUG] [Thread-135922] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:39:41.217 [DEBUG] [Thread-135922] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:39:41.217 [DEBUG] [Thread-135922] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:39:41.217 [DEBUG] [Thread-135922] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:39:41.217 [DEBUG] [Thread-135922] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:39:41.217 [DEBUG] [Thread-135922] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:39:41.217 [DEBUG] [Thread-135922] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:39:41.217 [DEBUG] [Thread-135922] [transport.py] [_log()] client lang: <none>
2025-12-31T22:39:41.217 [DEBUG] [Thread-135922] [transport.py] [_log()] server lang: <none>
2025-12-31T22:39:41.217 [DEBUG] [Thread-135922] [transport.py] [_log()] kex follows: False
2025-12-31T22:39:41.217 [DEBUG] [Thread-135922] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:39:41.217 [DEBUG] [Thread-135922] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:39:41.217 [DEBUG] [Thread-135922] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:39:41.217 [DEBUG] [Thread-135922] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:39:41.217 [DEBUG] [Thread-135922] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:39:41.217 [DEBUG] [Thread-135922] [transport.py] [_log()] Compression: none
2025-12-31T22:39:41.217 [DEBUG] [Thread-135922] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:39:41.230 [DEBUG] [Thread-135922] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:39:41.230 [DEBUG] [Thread-135922] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:39:41.230 [DEBUG] [Thread-135922] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T22:39:41.230 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T22:39:41.230 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:39:41.231 [DEBUG] [Thread-135922] [transport.py] [_log()] userauth is OK
2025-12-31T22:39:41.231 [DEBUG] [Thread-135922] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:39:41.231 [DEBUG] [Thread-135922] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:39:41.231 [DEBUG] [Thread-135922] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T22:39:41.231 [DEBUG] [Thread-135922] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:39:41.244 [INFO] [Thread-135922] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:39:41.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:39:41.861 [DEBUG] [Thread-135922] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:39:41.861 [DEBUG] [Thread-135922] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:39:41.861 [DEBUG] [Thread-135922] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T22:39:41.901 [DEBUG] [Thread-135922] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:39:41.902 [DEBUG] [Thread-135922] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:39:41.904 [DEBUG] [Thread-135922] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:39:41.917 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:39:41.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T22:39:41.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T22:39:41.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T22:39:41.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:39:41.925 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T22:39:41.925 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:39:41.925 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:39:41.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T22:39:41.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.860206 -999.00  +15.90  18.76     75  +11.40 1 2 1 1 1     0    0 4.10 -18.10 ..... 18.1 18.8 199.8 23.3 17.1 -11.5 17.0 -12.3 16.8 -12.0 17.2 -11.4
2025-12-31T22:39:41.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T22:39:41.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T22:39:41.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.860206
2025-12-31T22:39:41.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T22:39:41.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T22:39:41.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T22:39:41.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T22:39:41.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T22:39:41.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T22:39:24', tmtdew=4.99, humidity=72.13, cloud=0.0, wind=19.53, temperature=15.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T22:22:50', seeing=1.62, atlas_timestamp='2025-12-31T20:38:41.798', atlas_cloud=2, atlas_rain=1, zp_data=[0.2602499999999992, 0.44475000000000087, 0.7302500000000007, 0.22100000000000009, 0.665, 0.8302500000000013, 0.5669999999999993, 0.4302500000000009, 0.39949999999999974, 0.4095000000000013, 0.8602499999999988, 0.41999999999999993, 0.3490000000000002, 0.4262499999999996, 0.5399999999999991, 0.019000000000000128, 0.8522499999999997, 0.4294999999999991, 0.9249999999999989, 0.5342499999999992, 0.34750000000000014, 0.24074999999999847, -0.13574999999999982, -0.4472499999999986, 0.6789999999999994, nan, 1.1087499999999997, -0.8900000000000006, 0.2450000000000001, -0.4939999999999998, -1.2979999999999983, -1.4959999999999987, -0.4202500000000011], zp_timestamp='2025-12-31T20:15:00')
2025-12-31T22:39:41.926 [DEBUG] [Thread-135922] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:39:41.998 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T22:39:42.009 [DEBUG] [Thread-135925] [transport.py] [_log()] starting thread (client mode): 0xb1745060
2025-12-31T22:39:42.009 [DEBUG] [Thread-135925] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:39:42.023 [DEBUG] [Thread-135925] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T22:39:42.023 [INFO] [Thread-135925] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T22:39:42.031 [DEBUG] [Thread-135925] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:39:42.031 [DEBUG] [Thread-135925] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T22:39:42.031 [DEBUG] [Thread-135925] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:39:42.031 [DEBUG] [Thread-135925] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:39:42.031 [DEBUG] [Thread-135925] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:39:42.031 [DEBUG] [Thread-135925] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:39:42.031 [DEBUG] [Thread-135925] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:39:42.031 [DEBUG] [Thread-135925] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:39:42.031 [DEBUG] [Thread-135925] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:39:42.031 [DEBUG] [Thread-135925] [transport.py] [_log()] client lang: <none>
2025-12-31T22:39:42.031 [DEBUG] [Thread-135925] [transport.py] [_log()] server lang: <none>
2025-12-31T22:39:42.031 [DEBUG] [Thread-135925] [transport.py] [_log()] kex follows: False
2025-12-31T22:39:42.031 [DEBUG] [Thread-135925] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:39:42.031 [DEBUG] [Thread-135925] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:39:42.031 [DEBUG] [Thread-135925] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:39:42.031 [DEBUG] [Thread-135925] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:39:42.031 [DEBUG] [Thread-135925] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:39:42.031 [DEBUG] [Thread-135925] [transport.py] [_log()] Compression: none
2025-12-31T22:39:42.031 [DEBUG] [Thread-135925] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:39:42.089 [DEBUG] [Thread-135925] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:39:42.089 [DEBUG] [Thread-135925] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:39:42.089 [DEBUG] [Thread-135925] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T22:39:42.089 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T22:39:42.089 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:39:42.146 [DEBUG] [Thread-135925] [transport.py] [_log()] userauth is OK
2025-12-31T22:39:42.146 [DEBUG] [Thread-135925] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:39:42.146 [DEBUG] [Thread-135925] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:39:42.146 [DEBUG] [Thread-135925] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T22:39:42.146 [DEBUG] [Thread-135925] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:39:42.164 [INFO] [Thread-135925] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:39:42.164 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T22:39:42.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:39:42.991 [DEBUG] [Thread-135925] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:39:42.991 [DEBUG] [Thread-135925] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:39:43.039 [DEBUG] [Thread-135925] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:39:43.039 [DEBUG] [Thread-135925] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:39:43.049 [DEBUG] [Thread-135925] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:39:43.058 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:39:43.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T22:39:43.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T22:39:43.077 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:39:43.077 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:39:43.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:39:43.085 [DEBUG] [Thread-135925] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:39:48.716 [DEBUG] [Thread-135927 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:39:51.246 [DEBUG] [Thread-135928 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:40:06.297 [DEBUG] [Thread-135929 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:40:13.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T22:40:13.095 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T22:40:13.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T22:40:13.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 22, 39, 56), 4.93, 72.19, 0.0, 17.77, 15.69, 0, 0, 0, 2, 0, 0),)
2025-12-31T22:40:13.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 22:39:56
2025-12-31T22:40:13.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T22:40:14.089 [DEBUG] [Thread-135930] [transport.py] [_log()] starting thread (client mode): 0xb1797a90
2025-12-31T22:40:14.089 [DEBUG] [Thread-135930] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:40:14.110 [DEBUG] [Thread-135930] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T22:40:14.110 [INFO] [Thread-135930] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T22:40:14.111 [DEBUG] [Thread-135930] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:40:14.112 [DEBUG] [Thread-135930] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T22:40:14.112 [DEBUG] [Thread-135930] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:40:14.112 [DEBUG] [Thread-135930] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:40:14.112 [DEBUG] [Thread-135930] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:40:14.112 [DEBUG] [Thread-135930] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:40:14.112 [DEBUG] [Thread-135930] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:40:14.112 [DEBUG] [Thread-135930] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:40:14.112 [DEBUG] [Thread-135930] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:40:14.112 [DEBUG] [Thread-135930] [transport.py] [_log()] client lang: <none>
2025-12-31T22:40:14.112 [DEBUG] [Thread-135930] [transport.py] [_log()] server lang: <none>
2025-12-31T22:40:14.112 [DEBUG] [Thread-135930] [transport.py] [_log()] kex follows: False
2025-12-31T22:40:14.112 [DEBUG] [Thread-135930] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:40:14.113 [DEBUG] [Thread-135930] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:40:14.113 [DEBUG] [Thread-135930] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:40:14.113 [DEBUG] [Thread-135930] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:40:14.113 [DEBUG] [Thread-135930] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:40:14.113 [DEBUG] [Thread-135930] [transport.py] [_log()] Compression: none
2025-12-31T22:40:14.113 [DEBUG] [Thread-135930] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:40:14.123 [DEBUG] [Thread-135930] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:40:14.123 [DEBUG] [Thread-135930] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:40:14.124 [DEBUG] [Thread-135930] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T22:40:14.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T22:40:14.125 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:40:14.126 [DEBUG] [Thread-135930] [transport.py] [_log()] userauth is OK
2025-12-31T22:40:14.126 [DEBUG] [Thread-135930] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:40:14.126 [DEBUG] [Thread-135930] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:40:14.126 [DEBUG] [Thread-135930] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T22:40:14.127 [DEBUG] [Thread-135930] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:40:14.150 [INFO] [Thread-135930] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:40:14.150 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:40:15.882 [DEBUG] [Thread-135930] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:40:15.882 [DEBUG] [Thread-135930] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:40:15.882 [DEBUG] [Thread-135930] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T22:40:15.922 [DEBUG] [Thread-135930] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:40:15.922 [DEBUG] [Thread-135930] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:40:15.925 [DEBUG] [Thread-135930] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:40:15.937 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:40:15.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T22:40:15.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T22:40:15.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T22:40:15.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:40:15.943 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T22:40:15.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:40:15.943 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:40:15.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T22:40:15.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.860900 -999.00  +15.90   6.49     75  +11.50 1 2 1 1 1     0    0 4.05 -18.42 ...s. 11.7 6.5 210.8 18.3 17.1 -11.7 17.0 -12.7 16.9 -12.2 17.1 -11.5
2025-12-31T22:40:15.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T22:40:15.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T22:40:15.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.860900
2025-12-31T22:40:15.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T22:40:15.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T22:40:15.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T22:40:15.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T22:40:15.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T22:40:15.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T22:39:56', tmtdew=4.93, humidity=72.19, cloud=0.0, wind=17.77, temperature=15.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T22:22:50', seeing=1.62, atlas_timestamp='2025-12-31T20:39:41.760', atlas_cloud=2, atlas_rain=1, zp_data=[0.2602499999999992, 0.44475000000000087, 0.7302500000000007, 0.22100000000000009, 0.665, 0.8302500000000013, 0.5669999999999993, 0.4302500000000009, 0.39949999999999974, 0.4095000000000013, 0.8602499999999988, 0.41999999999999993, 0.3490000000000002, 0.4262499999999996, 0.5399999999999991, 0.019000000000000128, 0.8522499999999997, 0.4294999999999991, 0.9249999999999989, 0.5342499999999992, 0.34750000000000014, 0.24074999999999847, -0.13574999999999982, -0.4472499999999986, 0.6789999999999994, nan, 1.1087499999999997, -0.8900000000000006, 0.2450000000000001, -0.4939999999999998, -1.2979999999999983, -1.4959999999999987, -0.4202500000000011], zp_timestamp='2025-12-31T20:15:00')
2025-12-31T22:40:15.944 [DEBUG] [Thread-135930] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:40:16.018 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T22:40:16.031 [DEBUG] [Thread-135933] [transport.py] [_log()] starting thread (client mode): 0xb1796fb0
2025-12-31T22:40:16.031 [DEBUG] [Thread-135933] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:40:16.046 [DEBUG] [Thread-135933] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T22:40:16.046 [INFO] [Thread-135933] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T22:40:16.053 [DEBUG] [Thread-135933] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:40:16.053 [DEBUG] [Thread-135933] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T22:40:16.053 [DEBUG] [Thread-135933] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:40:16.053 [DEBUG] [Thread-135933] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:40:16.053 [DEBUG] [Thread-135933] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:40:16.053 [DEBUG] [Thread-135933] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:40:16.053 [DEBUG] [Thread-135933] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:40:16.053 [DEBUG] [Thread-135933] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:40:16.053 [DEBUG] [Thread-135933] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:40:16.053 [DEBUG] [Thread-135933] [transport.py] [_log()] client lang: <none>
2025-12-31T22:40:16.053 [DEBUG] [Thread-135933] [transport.py] [_log()] server lang: <none>
2025-12-31T22:40:16.053 [DEBUG] [Thread-135933] [transport.py] [_log()] kex follows: False
2025-12-31T22:40:16.053 [DEBUG] [Thread-135933] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:40:16.053 [DEBUG] [Thread-135933] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:40:16.053 [DEBUG] [Thread-135933] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:40:16.053 [DEBUG] [Thread-135933] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:40:16.053 [DEBUG] [Thread-135933] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:40:16.053 [DEBUG] [Thread-135933] [transport.py] [_log()] Compression: none
2025-12-31T22:40:16.054 [DEBUG] [Thread-135933] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:40:16.109 [DEBUG] [Thread-135933] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:40:16.109 [DEBUG] [Thread-135933] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:40:16.109 [DEBUG] [Thread-135933] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T22:40:16.109 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T22:40:16.110 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:40:16.166 [DEBUG] [Thread-135933] [transport.py] [_log()] userauth is OK
2025-12-31T22:40:16.166 [DEBUG] [Thread-135933] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:40:16.166 [DEBUG] [Thread-135933] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:40:16.166 [DEBUG] [Thread-135933] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T22:40:16.166 [DEBUG] [Thread-135933] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:40:16.180 [INFO] [Thread-135933] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:40:16.180 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T22:40:16.180 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:40:16.394 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:40:16.395 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:40:17.034 [DEBUG] [Thread-135933] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:40:17.034 [DEBUG] [Thread-135933] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:40:17.082 [DEBUG] [Thread-135933] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:40:17.082 [DEBUG] [Thread-135933] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:40:17.090 [DEBUG] [Thread-135933] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:40:17.098 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:40:17.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T22:40:17.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T22:40:17.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:40:17.113 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:40:17.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:40:17.121 [DEBUG] [Thread-135933] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:40:21.331 [DEBUG] [Thread-135935 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:40:36.393 [DEBUG] [Thread-135936 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:40:47.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T22:40:47.121 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T22:40:47.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T22:40:47.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 22, 40, 28), 4.94, 72.13, 0.0, 18.05, 15.66, 0, 0, 0, 2, 0, 0),)
2025-12-31T22:40:47.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 22:40:28
2025-12-31T22:40:47.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T22:40:48.115 [DEBUG] [Thread-135937] [transport.py] [_log()] starting thread (client mode): 0xb1747100
2025-12-31T22:40:48.115 [DEBUG] [Thread-135937] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:40:48.136 [DEBUG] [Thread-135937] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T22:40:48.136 [INFO] [Thread-135937] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T22:40:48.139 [DEBUG] [Thread-135937] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:40:48.139 [DEBUG] [Thread-135937] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T22:40:48.139 [DEBUG] [Thread-135937] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:40:48.139 [DEBUG] [Thread-135937] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:40:48.139 [DEBUG] [Thread-135937] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:40:48.139 [DEBUG] [Thread-135937] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:40:48.139 [DEBUG] [Thread-135937] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:40:48.139 [DEBUG] [Thread-135937] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:40:48.139 [DEBUG] [Thread-135937] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:40:48.139 [DEBUG] [Thread-135937] [transport.py] [_log()] client lang: <none>
2025-12-31T22:40:48.139 [DEBUG] [Thread-135937] [transport.py] [_log()] server lang: <none>
2025-12-31T22:40:48.139 [DEBUG] [Thread-135937] [transport.py] [_log()] kex follows: False
2025-12-31T22:40:48.139 [DEBUG] [Thread-135937] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:40:48.139 [DEBUG] [Thread-135937] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:40:48.139 [DEBUG] [Thread-135937] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:40:48.139 [DEBUG] [Thread-135937] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:40:48.139 [DEBUG] [Thread-135937] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:40:48.139 [DEBUG] [Thread-135937] [transport.py] [_log()] Compression: none
2025-12-31T22:40:48.139 [DEBUG] [Thread-135937] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:40:48.157 [DEBUG] [Thread-135937] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:40:48.157 [DEBUG] [Thread-135937] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:40:48.158 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T22:40:48.158 [DEBUG] [Thread-135937] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T22:40:48.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:40:48.160 [DEBUG] [Thread-135937] [transport.py] [_log()] userauth is OK
2025-12-31T22:40:48.161 [DEBUG] [Thread-135937] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:40:48.161 [DEBUG] [Thread-135937] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:40:48.161 [DEBUG] [Thread-135937] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T22:40:48.161 [DEBUG] [Thread-135937] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:40:48.178 [INFO] [Thread-135937] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:40:48.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:40:48.793 [DEBUG] [Thread-135937] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:40:48.793 [DEBUG] [Thread-135937] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:40:48.793 [DEBUG] [Thread-135937] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T22:40:48.802 [DEBUG] [Thread-135939 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:40:48.834 [DEBUG] [Thread-135937] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:40:48.834 [DEBUG] [Thread-135937] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:40:48.838 [DEBUG] [Thread-135937] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:40:48.849 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:40:48.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T22:40:48.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T22:40:48.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T22:40:48.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:40:48.861 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T22:40:48.861 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:40:48.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:40:48.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T22:40:48.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.861247 -999.00  +15.90  11.76     74  +11.40 1 2 1 1 1     0    0 3.97 -18.50 ...S. 13.3 11.8 202.2 20.2 17.1 -11.7 17.0 -12.9 16.8 -12.1 17.1 -11.5
2025-12-31T22:40:48.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T22:40:48.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T22:40:48.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.861247
2025-12-31T22:40:48.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T22:40:48.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T22:40:48.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T22:40:48.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T22:40:48.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T22:40:48.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T22:40:28', tmtdew=4.94, humidity=72.13, cloud=0.0, wind=18.05, temperature=15.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T22:22:50', seeing=1.62, atlas_timestamp='2025-12-31T20:40:11.741', atlas_cloud=2, atlas_rain=1, zp_data=[0.2602499999999992, 0.44475000000000087, 0.7302500000000007, 0.22100000000000009, 0.665, 0.8302500000000013, 0.5669999999999993, 0.4302500000000009, 0.39949999999999974, 0.4095000000000013, 0.8602499999999988, 0.41999999999999993, 0.3490000000000002, 0.4262499999999996, 0.5399999999999991, 0.019000000000000128, 0.8522499999999997, 0.4294999999999991, 0.9249999999999989, 0.5342499999999992, 0.34750000000000014, 0.24074999999999847, -0.13574999999999982, -0.4472499999999986, 0.6789999999999994, nan, 1.1087499999999997, -0.8900000000000006, 0.2450000000000001, -0.4939999999999998, -1.2979999999999983, -1.4959999999999987, -0.4202500000000011], zp_timestamp='2025-12-31T20:15:00')
2025-12-31T22:40:48.864 [DEBUG] [Thread-135937] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:40:48.944 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T22:40:48.954 [DEBUG] [Thread-135941] [transport.py] [_log()] starting thread (client mode): 0xb1746d10
2025-12-31T22:40:48.954 [DEBUG] [Thread-135941] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:40:48.969 [DEBUG] [Thread-135941] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T22:40:48.970 [INFO] [Thread-135941] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T22:40:48.977 [DEBUG] [Thread-135941] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:40:48.977 [DEBUG] [Thread-135941] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T22:40:48.978 [DEBUG] [Thread-135941] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:40:48.978 [DEBUG] [Thread-135941] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:40:48.978 [DEBUG] [Thread-135941] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:40:48.978 [DEBUG] [Thread-135941] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:40:48.978 [DEBUG] [Thread-135941] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:40:48.978 [DEBUG] [Thread-135941] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:40:48.978 [DEBUG] [Thread-135941] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:40:48.978 [DEBUG] [Thread-135941] [transport.py] [_log()] client lang: <none>
2025-12-31T22:40:48.978 [DEBUG] [Thread-135941] [transport.py] [_log()] server lang: <none>
2025-12-31T22:40:48.978 [DEBUG] [Thread-135941] [transport.py] [_log()] kex follows: False
2025-12-31T22:40:48.978 [DEBUG] [Thread-135941] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:40:48.978 [DEBUG] [Thread-135941] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:40:48.978 [DEBUG] [Thread-135941] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:40:48.978 [DEBUG] [Thread-135941] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:40:48.978 [DEBUG] [Thread-135941] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:40:48.978 [DEBUG] [Thread-135941] [transport.py] [_log()] Compression: none
2025-12-31T22:40:48.978 [DEBUG] [Thread-135941] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:40:49.034 [DEBUG] [Thread-135941] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:40:49.034 [DEBUG] [Thread-135941] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:40:49.035 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T22:40:49.035 [DEBUG] [Thread-135941] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T22:40:49.036 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:40:49.092 [DEBUG] [Thread-135941] [transport.py] [_log()] userauth is OK
2025-12-31T22:40:49.092 [DEBUG] [Thread-135941] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:40:49.092 [DEBUG] [Thread-135941] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:40:49.092 [DEBUG] [Thread-135941] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T22:40:49.093 [DEBUG] [Thread-135941] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:40:49.112 [INFO] [Thread-135941] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:40:49.112 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T22:40:49.113 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:40:49.948 [DEBUG] [Thread-135941] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:40:49.948 [DEBUG] [Thread-135941] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:40:49.996 [DEBUG] [Thread-135941] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:40:49.997 [DEBUG] [Thread-135941] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:40:50.006 [DEBUG] [Thread-135941] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:40:50.015 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:40:50.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T22:40:50.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T22:40:50.034 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:40:50.034 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:40:50.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:40:50.043 [DEBUG] [Thread-135941] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:40:51.435 [DEBUG] [Thread-135943 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:41:06.493 [DEBUG] [Thread-135944 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:41:16.597 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:41:16.598 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:41:20.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T22:41:20.065 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T22:41:20.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T22:41:20.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 22, 41), 4.98, 72.18, 0.0, 21.03, 15.68, 0, 0, 0, 2, 0, 0),)
2025-12-31T22:41:20.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 22:41:00
2025-12-31T22:41:20.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T22:41:21.041 [DEBUG] [Thread-135945] [transport.py] [_log()] starting thread (client mode): 0xb1795300
2025-12-31T22:41:21.042 [DEBUG] [Thread-135945] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:41:21.061 [DEBUG] [Thread-135945] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T22:41:21.062 [INFO] [Thread-135945] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T22:41:21.063 [DEBUG] [Thread-135945] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:41:21.063 [DEBUG] [Thread-135945] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T22:41:21.063 [DEBUG] [Thread-135945] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:41:21.063 [DEBUG] [Thread-135945] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:41:21.063 [DEBUG] [Thread-135945] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:41:21.063 [DEBUG] [Thread-135945] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:41:21.063 [DEBUG] [Thread-135945] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:41:21.063 [DEBUG] [Thread-135945] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:41:21.063 [DEBUG] [Thread-135945] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:41:21.063 [DEBUG] [Thread-135945] [transport.py] [_log()] client lang: <none>
2025-12-31T22:41:21.063 [DEBUG] [Thread-135945] [transport.py] [_log()] server lang: <none>
2025-12-31T22:41:21.063 [DEBUG] [Thread-135945] [transport.py] [_log()] kex follows: False
2025-12-31T22:41:21.063 [DEBUG] [Thread-135945] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:41:21.063 [DEBUG] [Thread-135945] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:41:21.063 [DEBUG] [Thread-135945] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:41:21.063 [DEBUG] [Thread-135945] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:41:21.063 [DEBUG] [Thread-135945] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:41:21.064 [DEBUG] [Thread-135945] [transport.py] [_log()] Compression: none
2025-12-31T22:41:21.064 [DEBUG] [Thread-135945] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:41:21.081 [DEBUG] [Thread-135945] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:41:21.082 [DEBUG] [Thread-135945] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:41:21.082 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T22:41:21.083 [DEBUG] [Thread-135945] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T22:41:21.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:41:21.085 [DEBUG] [Thread-135945] [transport.py] [_log()] userauth is OK
2025-12-31T22:41:21.085 [DEBUG] [Thread-135945] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:41:21.085 [DEBUG] [Thread-135945] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:41:21.085 [DEBUG] [Thread-135945] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T22:41:21.085 [DEBUG] [Thread-135945] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:41:21.110 [INFO] [Thread-135945] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:41:21.111 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:41:21.533 [DEBUG] [Thread-135947 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:41:21.765 [DEBUG] [Thread-135945] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:41:21.765 [DEBUG] [Thread-135945] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:41:21.766 [DEBUG] [Thread-135945] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T22:41:21.806 [DEBUG] [Thread-135945] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:41:21.806 [DEBUG] [Thread-135945] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:41:21.809 [DEBUG] [Thread-135945] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:41:21.821 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:41:21.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T22:41:21.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T22:41:21.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T22:41:21.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:41:21.834 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T22:41:21.834 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:41:21.834 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:41:21.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T22:41:21.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.861595 -999.00  +15.90  11.82     74  +11.40 1 2 1 1 1     0    0 3.98 -19.75 ...S. 15.3 11.8 200.4 16.3 17.1 -11.7 17.0 -12.6 16.8 -12.1 17.1 -11.4
2025-12-31T22:41:21.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T22:41:21.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T22:41:21.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.861595
2025-12-31T22:41:21.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T22:41:21.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T22:41:21.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T22:41:21.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T22:41:21.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T22:41:21.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T22:41:00', tmtdew=4.98, humidity=72.18, cloud=0.0, wind=21.03, temperature=15.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T22:22:50', seeing=1.62, atlas_timestamp='2025-12-31T20:40:41.808', atlas_cloud=2, atlas_rain=1, zp_data=[0.2602499999999992, 0.44475000000000087, 0.7302500000000007, 0.22100000000000009, 0.665, 0.8302500000000013, 0.5669999999999993, 0.4302500000000009, 0.39949999999999974, 0.4095000000000013, 0.8602499999999988, 0.41999999999999993, 0.3490000000000002, 0.4262499999999996, 0.5399999999999991, 0.019000000000000128, 0.8522499999999997, 0.4294999999999991, 0.9249999999999989, 0.5342499999999992, 0.34750000000000014, 0.24074999999999847, -0.13574999999999982, -0.4472499999999986, 0.6789999999999994, nan, 1.1087499999999997, -0.8900000000000006, 0.2450000000000001, -0.4939999999999998, -1.2979999999999983, -1.4959999999999987, -0.4202500000000011], zp_timestamp='2025-12-31T20:15:00')
2025-12-31T22:41:21.837 [DEBUG] [Thread-135945] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:41:21.920 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T22:41:21.931 [DEBUG] [Thread-135949] [transport.py] [_log()] starting thread (client mode): 0xb1797730
2025-12-31T22:41:21.932 [DEBUG] [Thread-135949] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:41:21.947 [DEBUG] [Thread-135949] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T22:41:21.947 [INFO] [Thread-135949] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T22:41:21.954 [DEBUG] [Thread-135949] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:41:21.954 [DEBUG] [Thread-135949] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T22:41:21.955 [DEBUG] [Thread-135949] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:41:21.955 [DEBUG] [Thread-135949] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:41:21.955 [DEBUG] [Thread-135949] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:41:21.955 [DEBUG] [Thread-135949] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:41:21.955 [DEBUG] [Thread-135949] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:41:21.955 [DEBUG] [Thread-135949] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:41:21.955 [DEBUG] [Thread-135949] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:41:21.956 [DEBUG] [Thread-135949] [transport.py] [_log()] client lang: <none>
2025-12-31T22:41:21.956 [DEBUG] [Thread-135949] [transport.py] [_log()] server lang: <none>
2025-12-31T22:41:21.956 [DEBUG] [Thread-135949] [transport.py] [_log()] kex follows: False
2025-12-31T22:41:21.956 [DEBUG] [Thread-135949] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:41:21.956 [DEBUG] [Thread-135949] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:41:21.956 [DEBUG] [Thread-135949] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:41:21.956 [DEBUG] [Thread-135949] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:41:21.956 [DEBUG] [Thread-135949] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:41:21.956 [DEBUG] [Thread-135949] [transport.py] [_log()] Compression: none
2025-12-31T22:41:21.956 [DEBUG] [Thread-135949] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:41:22.015 [DEBUG] [Thread-135949] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:41:22.015 [DEBUG] [Thread-135949] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:41:22.016 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T22:41:22.016 [DEBUG] [Thread-135949] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T22:41:22.017 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:41:22.071 [DEBUG] [Thread-135949] [transport.py] [_log()] userauth is OK
2025-12-31T22:41:22.071 [DEBUG] [Thread-135949] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:41:22.071 [DEBUG] [Thread-135949] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:41:22.071 [DEBUG] [Thread-135949] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T22:41:22.072 [DEBUG] [Thread-135949] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:41:22.091 [INFO] [Thread-135949] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:41:22.091 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T22:41:22.092 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:41:22.922 [DEBUG] [Thread-135949] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:41:22.923 [DEBUG] [Thread-135949] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:41:22.971 [DEBUG] [Thread-135949] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:41:22.971 [DEBUG] [Thread-135949] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:41:22.980 [DEBUG] [Thread-135949] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:41:22.990 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:41:22.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T22:41:22.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T22:41:23.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:41:23.009 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:41:23.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:41:23.017 [DEBUG] [Thread-135949] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:41:36.568 [DEBUG] [Thread-135951 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:41:48.861 [DEBUG] [Thread-135952 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:41:51.609 [DEBUG] [Thread-135953 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:41:53.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T22:41:53.040 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T22:41:53.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-12-31T22:41:53.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 22, 41, 32), 4.97, 72.23, 0.0, 17.82, 15.69, 0, 0, 0, 2, 0, 0),)
2025-12-31T22:41:53.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 22:41:32
2025-12-31T22:41:53.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T22:41:54.006 [DEBUG] [Thread-135954] [transport.py] [_log()] starting thread (client mode): 0xb1745270
2025-12-31T22:41:54.006 [DEBUG] [Thread-135954] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:41:54.026 [DEBUG] [Thread-135954] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T22:41:54.026 [INFO] [Thread-135954] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T22:41:54.029 [DEBUG] [Thread-135954] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:41:54.029 [DEBUG] [Thread-135954] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T22:41:54.029 [DEBUG] [Thread-135954] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:41:54.029 [DEBUG] [Thread-135954] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:41:54.029 [DEBUG] [Thread-135954] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:41:54.029 [DEBUG] [Thread-135954] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:41:54.029 [DEBUG] [Thread-135954] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:41:54.029 [DEBUG] [Thread-135954] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:41:54.029 [DEBUG] [Thread-135954] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:41:54.029 [DEBUG] [Thread-135954] [transport.py] [_log()] client lang: <none>
2025-12-31T22:41:54.029 [DEBUG] [Thread-135954] [transport.py] [_log()] server lang: <none>
2025-12-31T22:41:54.029 [DEBUG] [Thread-135954] [transport.py] [_log()] kex follows: False
2025-12-31T22:41:54.029 [DEBUG] [Thread-135954] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:41:54.029 [DEBUG] [Thread-135954] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:41:54.029 [DEBUG] [Thread-135954] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:41:54.030 [DEBUG] [Thread-135954] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:41:54.030 [DEBUG] [Thread-135954] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:41:54.030 [DEBUG] [Thread-135954] [transport.py] [_log()] Compression: none
2025-12-31T22:41:54.030 [DEBUG] [Thread-135954] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:41:54.046 [DEBUG] [Thread-135954] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:41:54.047 [DEBUG] [Thread-135954] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:41:54.047 [DEBUG] [Thread-135954] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T22:41:54.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T22:41:54.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:41:54.049 [DEBUG] [Thread-135954] [transport.py] [_log()] userauth is OK
2025-12-31T22:41:54.049 [DEBUG] [Thread-135954] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:41:54.049 [DEBUG] [Thread-135954] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:41:54.049 [DEBUG] [Thread-135954] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T22:41:54.049 [DEBUG] [Thread-135954] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:41:54.065 [INFO] [Thread-135954] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:41:54.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:41:54.730 [DEBUG] [Thread-135954] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:41:54.731 [DEBUG] [Thread-135954] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:41:54.731 [DEBUG] [Thread-135954] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T22:41:54.771 [DEBUG] [Thread-135954] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:41:54.771 [DEBUG] [Thread-135954] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:41:54.775 [DEBUG] [Thread-135954] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:41:54.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:41:54.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T22:41:54.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T22:41:54.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T22:41:54.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:41:54.797 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T22:41:54.797 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:41:54.797 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:41:54.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T22:41:54.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.861942 -999.00  +15.90  13.32     75  +11.40 1 2 1 1 1     0    0 4.01 -18.59 ...S. 12.7 13.3 197.2 17.5 17.1 -11.9 17.0 -12.7 16.9 -12.1 17.1 -11.6
2025-12-31T22:41:54.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T22:41:54.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T22:41:54.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.861942
2025-12-31T22:41:54.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T22:41:54.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T22:41:54.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T22:41:54.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T22:41:54.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T22:41:54.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T22:41:32', tmtdew=4.97, humidity=72.23, cloud=0.0, wind=17.82, temperature=15.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T22:22:50', seeing=1.62, atlas_timestamp='2025-12-31T20:41:11.789', atlas_cloud=2, atlas_rain=1, zp_data=[0.2602499999999992, 0.44475000000000087, 0.7302500000000007, 0.22100000000000009, 0.665, 0.8302500000000013, 0.5669999999999993, 0.4302500000000009, 0.39949999999999974, 0.4095000000000013, 0.8602499999999988, 0.41999999999999993, 0.3490000000000002, 0.4262499999999996, 0.5399999999999991, 0.019000000000000128, 0.8522499999999997, 0.4294999999999991, 0.9249999999999989, 0.5342499999999992, 0.34750000000000014, 0.24074999999999847, -0.13574999999999982, -0.4472499999999986, 0.6789999999999994, nan, 1.1087499999999997, -0.8900000000000006, 0.2450000000000001, -0.4939999999999998, -1.2979999999999983, -1.4959999999999987, -0.4202500000000011], zp_timestamp='2025-12-31T20:15:00')
2025-12-31T22:41:54.800 [DEBUG] [Thread-135954] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:41:54.882 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T22:41:54.895 [DEBUG] [Thread-135957] [transport.py] [_log()] starting thread (client mode): 0xb1746020
2025-12-31T22:41:54.895 [DEBUG] [Thread-135957] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:41:54.912 [DEBUG] [Thread-135957] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T22:41:54.913 [INFO] [Thread-135957] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T22:41:54.920 [DEBUG] [Thread-135957] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:41:54.920 [DEBUG] [Thread-135957] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T22:41:54.920 [DEBUG] [Thread-135957] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:41:54.920 [DEBUG] [Thread-135957] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:41:54.921 [DEBUG] [Thread-135957] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:41:54.921 [DEBUG] [Thread-135957] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:41:54.921 [DEBUG] [Thread-135957] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:41:54.921 [DEBUG] [Thread-135957] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:41:54.921 [DEBUG] [Thread-135957] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:41:54.921 [DEBUG] [Thread-135957] [transport.py] [_log()] client lang: <none>
2025-12-31T22:41:54.921 [DEBUG] [Thread-135957] [transport.py] [_log()] server lang: <none>
2025-12-31T22:41:54.921 [DEBUG] [Thread-135957] [transport.py] [_log()] kex follows: False
2025-12-31T22:41:54.921 [DEBUG] [Thread-135957] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:41:54.921 [DEBUG] [Thread-135957] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:41:54.921 [DEBUG] [Thread-135957] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:41:54.921 [DEBUG] [Thread-135957] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:41:54.921 [DEBUG] [Thread-135957] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:41:54.921 [DEBUG] [Thread-135957] [transport.py] [_log()] Compression: none
2025-12-31T22:41:54.921 [DEBUG] [Thread-135957] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:41:54.979 [DEBUG] [Thread-135957] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:41:54.980 [DEBUG] [Thread-135957] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:41:54.980 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T22:41:54.981 [DEBUG] [Thread-135957] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T22:41:54.982 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:41:55.035 [DEBUG] [Thread-135957] [transport.py] [_log()] userauth is OK
2025-12-31T22:41:55.036 [DEBUG] [Thread-135957] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:41:55.036 [DEBUG] [Thread-135957] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:41:55.036 [DEBUG] [Thread-135957] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T22:41:55.036 [DEBUG] [Thread-135957] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:41:55.061 [INFO] [Thread-135957] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:41:55.062 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T22:41:55.062 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:41:55.881 [DEBUG] [Thread-135957] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:41:55.881 [DEBUG] [Thread-135957] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:41:55.928 [DEBUG] [Thread-135957] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:41:55.929 [DEBUG] [Thread-135957] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:41:55.938 [DEBUG] [Thread-135957] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:41:55.946 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:41:55.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-12-31T22:41:55.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-12-31T22:41:55.964 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:41:55.965 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:41:55.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:41:55.973 [DEBUG] [Thread-135957] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:42:06.641 [DEBUG] [Thread-135959 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:42:16.801 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:42:16.802 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:42:21.678 [DEBUG] [Thread-135960 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:42:25.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T22:42:25.995 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T22:42:25.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T22:42:26.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 22, 42, 4), 4.99, 72.16, 0.0, 18.28, 15.63, 0, 0, 0, 2, 0, 0),)
2025-12-31T22:42:26.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 22:42:04
2025-12-31T22:42:26.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T22:42:26.993 [DEBUG] [Thread-135961] [transport.py] [_log()] starting thread (client mode): 0xb1746140
2025-12-31T22:42:26.993 [DEBUG] [Thread-135961] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:42:27.013 [DEBUG] [Thread-135961] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T22:42:27.013 [INFO] [Thread-135961] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T22:42:27.016 [DEBUG] [Thread-135961] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:42:27.016 [DEBUG] [Thread-135961] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T22:42:27.016 [DEBUG] [Thread-135961] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:42:27.016 [DEBUG] [Thread-135961] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:42:27.016 [DEBUG] [Thread-135961] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:42:27.016 [DEBUG] [Thread-135961] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:42:27.016 [DEBUG] [Thread-135961] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:42:27.016 [DEBUG] [Thread-135961] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:42:27.016 [DEBUG] [Thread-135961] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:42:27.016 [DEBUG] [Thread-135961] [transport.py] [_log()] client lang: <none>
2025-12-31T22:42:27.016 [DEBUG] [Thread-135961] [transport.py] [_log()] server lang: <none>
2025-12-31T22:42:27.016 [DEBUG] [Thread-135961] [transport.py] [_log()] kex follows: False
2025-12-31T22:42:27.016 [DEBUG] [Thread-135961] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:42:27.016 [DEBUG] [Thread-135961] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:42:27.016 [DEBUG] [Thread-135961] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:42:27.016 [DEBUG] [Thread-135961] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:42:27.016 [DEBUG] [Thread-135961] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:42:27.016 [DEBUG] [Thread-135961] [transport.py] [_log()] Compression: none
2025-12-31T22:42:27.016 [DEBUG] [Thread-135961] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:42:27.031 [DEBUG] [Thread-135961] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:42:27.032 [DEBUG] [Thread-135961] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:42:27.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T22:42:27.033 [DEBUG] [Thread-135961] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T22:42:27.034 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:42:27.035 [DEBUG] [Thread-135961] [transport.py] [_log()] userauth is OK
2025-12-31T22:42:27.035 [DEBUG] [Thread-135961] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:42:27.036 [DEBUG] [Thread-135961] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:42:27.036 [DEBUG] [Thread-135961] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T22:42:27.036 [DEBUG] [Thread-135961] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:42:27.060 [INFO] [Thread-135961] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:42:27.060 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:42:27.695 [DEBUG] [Thread-135961] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:42:27.695 [DEBUG] [Thread-135961] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:42:27.696 [DEBUG] [Thread-135961] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T22:42:27.736 [DEBUG] [Thread-135961] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:42:27.736 [DEBUG] [Thread-135961] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:42:27.740 [DEBUG] [Thread-135961] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:42:27.752 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:42:27.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T22:42:27.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T22:42:27.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T22:42:27.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:42:27.766 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T22:42:27.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:42:27.766 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:42:27.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T22:42:27.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.862289 -999.00  +15.80  20.04     75  +11.50 1 2 1 1 1     0    0 3.94 -18.81 ...S. 17.0 20.0 192.6 22.4 17.1 -11.9 16.9 -13.4 16.8 -12.1 17.1 -11.5
2025-12-31T22:42:27.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T22:42:27.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T22:42:27.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.862289
2025-12-31T22:42:27.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T22:42:27.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T22:42:27.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T22:42:27.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T22:42:27.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T22:42:27.768 [DEBUG] [Thread-135961] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:42:27.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T22:42:04', tmtdew=4.99, humidity=72.16, cloud=0.0, wind=18.28, temperature=15.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T22:22:50', seeing=1.62, atlas_timestamp='2025-12-31T20:41:41.770', atlas_cloud=2, atlas_rain=1, zp_data=[0.2602499999999992, 0.44475000000000087, 0.7302500000000007, 0.22100000000000009, 0.665, 0.8302500000000013, 0.5669999999999993, 0.4302500000000009, 0.39949999999999974, 0.4095000000000013, 0.8602499999999988, 0.41999999999999993, 0.3490000000000002, 0.4262499999999996, 0.5399999999999991, 0.019000000000000128, 0.8522499999999997, 0.4294999999999991, 0.9249999999999989, 0.5342499999999992, 0.34750000000000014, 0.24074999999999847, -0.13574999999999982, -0.4472499999999986, 0.6789999999999994, nan, 1.1087499999999997, -0.8900000000000006, 0.2450000000000001, -0.4939999999999998, -1.2979999999999983, -1.4959999999999987, -0.4202500000000011], zp_timestamp='2025-12-31T20:15:00')
2025-12-31T22:42:27.852 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T22:42:27.864 [DEBUG] [Thread-135964] [transport.py] [_log()] starting thread (client mode): 0xb1795360
2025-12-31T22:42:27.864 [DEBUG] [Thread-135964] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:42:27.878 [DEBUG] [Thread-135964] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T22:42:27.878 [INFO] [Thread-135964] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T22:42:27.886 [DEBUG] [Thread-135964] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:42:27.887 [DEBUG] [Thread-135964] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T22:42:27.887 [DEBUG] [Thread-135964] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:42:27.887 [DEBUG] [Thread-135964] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:42:27.887 [DEBUG] [Thread-135964] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:42:27.887 [DEBUG] [Thread-135964] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:42:27.888 [DEBUG] [Thread-135964] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:42:27.888 [DEBUG] [Thread-135964] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:42:27.888 [DEBUG] [Thread-135964] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:42:27.888 [DEBUG] [Thread-135964] [transport.py] [_log()] client lang: <none>
2025-12-31T22:42:27.888 [DEBUG] [Thread-135964] [transport.py] [_log()] server lang: <none>
2025-12-31T22:42:27.888 [DEBUG] [Thread-135964] [transport.py] [_log()] kex follows: False
2025-12-31T22:42:27.888 [DEBUG] [Thread-135964] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:42:27.888 [DEBUG] [Thread-135964] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:42:27.888 [DEBUG] [Thread-135964] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:42:27.888 [DEBUG] [Thread-135964] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:42:27.888 [DEBUG] [Thread-135964] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:42:27.888 [DEBUG] [Thread-135964] [transport.py] [_log()] Compression: none
2025-12-31T22:42:27.888 [DEBUG] [Thread-135964] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:42:27.949 [DEBUG] [Thread-135964] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:42:27.950 [DEBUG] [Thread-135964] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:42:27.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T22:42:27.951 [DEBUG] [Thread-135964] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T22:42:27.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:42:28.016 [DEBUG] [Thread-135964] [transport.py] [_log()] userauth is OK
2025-12-31T22:42:28.016 [DEBUG] [Thread-135964] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:42:28.017 [DEBUG] [Thread-135964] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:42:28.017 [DEBUG] [Thread-135964] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T22:42:28.017 [DEBUG] [Thread-135964] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:42:28.035 [INFO] [Thread-135964] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:42:28.036 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T22:42:28.036 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:42:28.860 [DEBUG] [Thread-135964] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:42:28.860 [DEBUG] [Thread-135964] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:42:28.908 [DEBUG] [Thread-135964] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:42:28.908 [DEBUG] [Thread-135964] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:42:28.920 [DEBUG] [Thread-135964] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:42:28.932 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:42:28.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-12-31T22:42:28.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T22:42:28.952 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:42:28.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:42:28.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:42:28.961 [DEBUG] [Thread-135964] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:42:36.712 [DEBUG] [Thread-135966 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:42:48.922 [DEBUG] [Thread-135967 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:42:51.761 [DEBUG] [Thread-135968 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:42:58.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T22:42:58.965 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T22:42:58.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T22:42:59.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 22, 42, 37), 5.02, 72.24, 0.0, 22.67, 15.74, 0, 0, 0, 2, 0, 0),)
2025-12-31T22:42:59.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 22:42:37
2025-12-31T22:42:59.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T22:42:59.975 [DEBUG] [Thread-135969] [transport.py] [_log()] starting thread (client mode): 0xb17962f0
2025-12-31T22:42:59.975 [DEBUG] [Thread-135969] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:42:59.996 [DEBUG] [Thread-135969] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T22:42:59.997 [INFO] [Thread-135969] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T22:43:00.000 [DEBUG] [Thread-135969] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:43:00.000 [DEBUG] [Thread-135969] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T22:43:00.000 [DEBUG] [Thread-135969] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:43:00.000 [DEBUG] [Thread-135969] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:43:00.000 [DEBUG] [Thread-135969] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:43:00.000 [DEBUG] [Thread-135969] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:43:00.000 [DEBUG] [Thread-135969] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:43:00.001 [DEBUG] [Thread-135969] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:43:00.001 [DEBUG] [Thread-135969] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:43:00.001 [DEBUG] [Thread-135969] [transport.py] [_log()] client lang: <none>
2025-12-31T22:43:00.001 [DEBUG] [Thread-135969] [transport.py] [_log()] server lang: <none>
2025-12-31T22:43:00.001 [DEBUG] [Thread-135969] [transport.py] [_log()] kex follows: False
2025-12-31T22:43:00.001 [DEBUG] [Thread-135969] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:43:00.001 [DEBUG] [Thread-135969] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:43:00.001 [DEBUG] [Thread-135969] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:43:00.001 [DEBUG] [Thread-135969] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:43:00.001 [DEBUG] [Thread-135969] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:43:00.001 [DEBUG] [Thread-135969] [transport.py] [_log()] Compression: none
2025-12-31T22:43:00.002 [DEBUG] [Thread-135969] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:43:00.012 [DEBUG] [Thread-135969] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:43:00.012 [DEBUG] [Thread-135969] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:43:00.013 [DEBUG] [Thread-135969] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T22:43:00.014 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T22:43:00.015 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:43:00.016 [DEBUG] [Thread-135969] [transport.py] [_log()] userauth is OK
2025-12-31T22:43:00.016 [DEBUG] [Thread-135969] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:43:00.016 [DEBUG] [Thread-135969] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:43:00.016 [DEBUG] [Thread-135969] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T22:43:00.016 [DEBUG] [Thread-135969] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:43:00.053 [INFO] [Thread-135969] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:43:00.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:43:00.707 [DEBUG] [Thread-135969] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:43:00.708 [DEBUG] [Thread-135969] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:43:00.708 [DEBUG] [Thread-135969] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T22:43:00.749 [DEBUG] [Thread-135969] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:43:00.749 [DEBUG] [Thread-135969] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:43:00.752 [DEBUG] [Thread-135969] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:43:00.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:43:00.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T22:43:00.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T22:43:00.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T22:43:00.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:43:00.776 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T22:43:00.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:43:00.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:43:00.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T22:43:00.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.862636 -999.00  +15.80  16.68     75  +11.40 1 2 1 1 1     0    0 3.89 -22.27 ...S. 13.7 16.7 193.2 17.6 17.1 -11.8 16.9 -13.4 16.8 -12.1 17.1 -11.5
2025-12-31T22:43:00.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T22:43:00.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T22:43:00.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.862636
2025-12-31T22:43:00.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T22:43:00.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T22:43:00.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T22:43:00.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T22:43:00.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T22:43:00.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T22:42:37', tmtdew=5.02, humidity=72.24, cloud=0.0, wind=22.67, temperature=15.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T22:22:50', seeing=1.62, atlas_timestamp='2025-12-31T20:42:11.750', atlas_cloud=2, atlas_rain=1, zp_data=[0.2602499999999992, 0.44475000000000087, 0.7302500000000007, 0.22100000000000009, 0.665, 0.8302500000000013, 0.5669999999999993, 0.4302500000000009, 0.39949999999999974, 0.4095000000000013, 0.8602499999999988, 0.41999999999999993, 0.3490000000000002, 0.4262499999999996, 0.5399999999999991, 0.019000000000000128, 0.8522499999999997, 0.4294999999999991, 0.9249999999999989, 0.5342499999999992, 0.34750000000000014, 0.24074999999999847, -0.13574999999999982, -0.4472499999999986, 0.6789999999999994, nan, 1.1087499999999997, -0.8900000000000006, 0.2450000000000001, -0.4939999999999998, -1.2979999999999983, -1.4959999999999987, -0.4202500000000011], zp_timestamp='2025-12-31T20:15:00')
2025-12-31T22:43:00.779 [DEBUG] [Thread-135969] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:43:00.862 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T22:43:00.875 [DEBUG] [Thread-135972] [transport.py] [_log()] starting thread (client mode): 0xb17460e0
2025-12-31T22:43:00.875 [DEBUG] [Thread-135972] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:43:00.890 [DEBUG] [Thread-135972] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T22:43:00.890 [INFO] [Thread-135972] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T22:43:00.897 [DEBUG] [Thread-135972] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:43:00.898 [DEBUG] [Thread-135972] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T22:43:00.898 [DEBUG] [Thread-135972] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:43:00.898 [DEBUG] [Thread-135972] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:43:00.898 [DEBUG] [Thread-135972] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:43:00.898 [DEBUG] [Thread-135972] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:43:00.898 [DEBUG] [Thread-135972] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:43:00.898 [DEBUG] [Thread-135972] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:43:00.898 [DEBUG] [Thread-135972] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:43:00.898 [DEBUG] [Thread-135972] [transport.py] [_log()] client lang: <none>
2025-12-31T22:43:00.898 [DEBUG] [Thread-135972] [transport.py] [_log()] server lang: <none>
2025-12-31T22:43:00.898 [DEBUG] [Thread-135972] [transport.py] [_log()] kex follows: False
2025-12-31T22:43:00.898 [DEBUG] [Thread-135972] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:43:00.898 [DEBUG] [Thread-135972] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:43:00.898 [DEBUG] [Thread-135972] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:43:00.898 [DEBUG] [Thread-135972] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:43:00.898 [DEBUG] [Thread-135972] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:43:00.899 [DEBUG] [Thread-135972] [transport.py] [_log()] Compression: none
2025-12-31T22:43:00.899 [DEBUG] [Thread-135972] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:43:00.953 [DEBUG] [Thread-135972] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:43:00.954 [DEBUG] [Thread-135972] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:43:00.954 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T22:43:00.955 [DEBUG] [Thread-135972] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T22:43:00.956 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:43:01.010 [DEBUG] [Thread-135972] [transport.py] [_log()] userauth is OK
2025-12-31T22:43:01.011 [DEBUG] [Thread-135972] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:43:01.011 [DEBUG] [Thread-135972] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:43:01.011 [DEBUG] [Thread-135972] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T22:43:01.011 [DEBUG] [Thread-135972] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:43:01.033 [INFO] [Thread-135972] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:43:01.034 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T22:43:01.034 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:43:01.901 [DEBUG] [Thread-135972] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:43:01.901 [DEBUG] [Thread-135972] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:43:01.949 [DEBUG] [Thread-135972] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:43:01.949 [DEBUG] [Thread-135972] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:43:01.958 [DEBUG] [Thread-135972] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:43:01.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:43:01.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T22:43:01.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T22:43:01.986 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:43:01.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:43:01.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:43:01.995 [DEBUG] [Thread-135972] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:43:06.793 [DEBUG] [Thread-135974 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:43:17.006 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:43:17.007 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:43:21.848 [DEBUG] [Thread-135975 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:43:32.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T22:43:32.017 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T22:43:32.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T22:43:32.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 22, 43, 9), 4.97, 72.48, 0.0, 21.37, 15.73, 0, 0, 0, 2, 0, 0),)
2025-12-31T22:43:32.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 22:43:09
2025-12-31T22:43:32.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T22:43:33.054 [DEBUG] [Thread-135976] [transport.py] [_log()] starting thread (client mode): 0xb95793c0
2025-12-31T22:43:33.055 [DEBUG] [Thread-135976] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:43:33.075 [DEBUG] [Thread-135976] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T22:43:33.075 [INFO] [Thread-135976] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T22:43:33.078 [DEBUG] [Thread-135976] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:43:33.078 [DEBUG] [Thread-135976] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T22:43:33.078 [DEBUG] [Thread-135976] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:43:33.078 [DEBUG] [Thread-135976] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:43:33.078 [DEBUG] [Thread-135976] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:43:33.078 [DEBUG] [Thread-135976] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:43:33.078 [DEBUG] [Thread-135976] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:43:33.078 [DEBUG] [Thread-135976] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:43:33.078 [DEBUG] [Thread-135976] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:43:33.078 [DEBUG] [Thread-135976] [transport.py] [_log()] client lang: <none>
2025-12-31T22:43:33.078 [DEBUG] [Thread-135976] [transport.py] [_log()] server lang: <none>
2025-12-31T22:43:33.078 [DEBUG] [Thread-135976] [transport.py] [_log()] kex follows: False
2025-12-31T22:43:33.078 [DEBUG] [Thread-135976] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:43:33.078 [DEBUG] [Thread-135976] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:43:33.078 [DEBUG] [Thread-135976] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:43:33.078 [DEBUG] [Thread-135976] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:43:33.078 [DEBUG] [Thread-135976] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:43:33.078 [DEBUG] [Thread-135976] [transport.py] [_log()] Compression: none
2025-12-31T22:43:33.079 [DEBUG] [Thread-135976] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:43:33.093 [DEBUG] [Thread-135976] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:43:33.093 [DEBUG] [Thread-135976] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:43:33.093 [DEBUG] [Thread-135976] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T22:43:33.093 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T22:43:33.094 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:43:33.094 [DEBUG] [Thread-135976] [transport.py] [_log()] userauth is OK
2025-12-31T22:43:33.094 [DEBUG] [Thread-135976] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:43:33.094 [DEBUG] [Thread-135976] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:43:33.094 [DEBUG] [Thread-135976] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T22:43:33.094 [DEBUG] [Thread-135976] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:43:33.103 [INFO] [Thread-135976] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:43:33.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:43:33.764 [DEBUG] [Thread-135976] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:43:33.765 [DEBUG] [Thread-135976] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:43:33.765 [DEBUG] [Thread-135976] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T22:43:33.805 [DEBUG] [Thread-135976] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:43:33.805 [DEBUG] [Thread-135976] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:43:33.808 [DEBUG] [Thread-135976] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:43:33.820 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:43:33.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T22:43:33.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T22:43:33.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T22:43:33.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:43:33.825 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T22:43:33.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:43:33.825 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:43:33.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T22:43:33.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.862983 -999.00  +15.90  10.66     75  +11.50 1 2 1 1 1     0    0 4.04 -20.71 ...S. 10.7 10.7 191.4 16.4 17.1 -11.9 16.9 -12.8 16.8 -12.2 17.1 -11.5
2025-12-31T22:43:33.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T22:43:33.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T22:43:33.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.862983
2025-12-31T22:43:33.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T22:43:33.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T22:43:33.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T22:43:33.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T22:43:33.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T22:43:33.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T22:43:09', tmtdew=4.97, humidity=72.48, cloud=0.0, wind=21.37, temperature=15.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T22:22:50', seeing=1.62, atlas_timestamp='2025-12-31T20:42:41.731', atlas_cloud=2, atlas_rain=1, zp_data=[0.2602499999999992, 0.44475000000000087, 0.7302500000000007, 0.22100000000000009, 0.665, 0.8302500000000013, 0.5669999999999993, 0.4302500000000009, 0.39949999999999974, 0.4095000000000013, 0.8602499999999988, 0.41999999999999993, 0.3490000000000002, 0.4262499999999996, 0.5399999999999991, 0.019000000000000128, 0.8522499999999997, 0.4294999999999991, 0.9249999999999989, 0.5342499999999992, 0.34750000000000014, 0.24074999999999847, -0.13574999999999982, -0.4472499999999986, 0.6789999999999994, nan, 1.1087499999999997, -0.8900000000000006, 0.2450000000000001, -0.4939999999999998, -1.2979999999999983, -1.4959999999999987, -0.4202500000000011], zp_timestamp='2025-12-31T20:15:00')
2025-12-31T22:43:33.826 [DEBUG] [Thread-135976] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:43:33.900 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T22:43:33.912 [DEBUG] [Thread-135979] [transport.py] [_log()] starting thread (client mode): 0xb9579ed0
2025-12-31T22:43:33.912 [DEBUG] [Thread-135979] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:43:33.926 [DEBUG] [Thread-135979] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T22:43:33.926 [INFO] [Thread-135979] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T22:43:33.934 [DEBUG] [Thread-135979] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:43:33.934 [DEBUG] [Thread-135979] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T22:43:33.934 [DEBUG] [Thread-135979] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:43:33.934 [DEBUG] [Thread-135979] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:43:33.934 [DEBUG] [Thread-135979] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:43:33.934 [DEBUG] [Thread-135979] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:43:33.935 [DEBUG] [Thread-135979] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:43:33.935 [DEBUG] [Thread-135979] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:43:33.935 [DEBUG] [Thread-135979] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:43:33.935 [DEBUG] [Thread-135979] [transport.py] [_log()] client lang: <none>
2025-12-31T22:43:33.935 [DEBUG] [Thread-135979] [transport.py] [_log()] server lang: <none>
2025-12-31T22:43:33.935 [DEBUG] [Thread-135979] [transport.py] [_log()] kex follows: False
2025-12-31T22:43:33.935 [DEBUG] [Thread-135979] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:43:33.935 [DEBUG] [Thread-135979] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:43:33.935 [DEBUG] [Thread-135979] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:43:33.935 [DEBUG] [Thread-135979] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:43:33.935 [DEBUG] [Thread-135979] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:43:33.935 [DEBUG] [Thread-135979] [transport.py] [_log()] Compression: none
2025-12-31T22:43:33.935 [DEBUG] [Thread-135979] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:43:33.989 [DEBUG] [Thread-135979] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:43:33.989 [DEBUG] [Thread-135979] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:43:33.989 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T22:43:33.989 [DEBUG] [Thread-135979] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T22:43:33.990 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:43:34.046 [DEBUG] [Thread-135979] [transport.py] [_log()] userauth is OK
2025-12-31T22:43:34.046 [DEBUG] [Thread-135979] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:43:34.046 [DEBUG] [Thread-135979] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:43:34.047 [DEBUG] [Thread-135979] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T22:43:34.047 [DEBUG] [Thread-135979] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:43:34.061 [INFO] [Thread-135979] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:43:34.061 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T22:43:34.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:43:34.913 [DEBUG] [Thread-135979] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:43:34.914 [DEBUG] [Thread-135979] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:43:34.962 [DEBUG] [Thread-135979] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:43:34.962 [DEBUG] [Thread-135979] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:43:34.972 [DEBUG] [Thread-135979] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:43:34.981 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:43:34.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T22:43:34.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-12-31T22:43:35.000 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:43:35.000 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:43:35.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:43:35.011 [DEBUG] [Thread-135979] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:43:36.881 [DEBUG] [Thread-135981 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:43:48.982 [DEBUG] [Thread-135982 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:43:51.936 [DEBUG] [Thread-135983 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:44:05.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T22:44:05.011 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T22:44:05.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T22:44:05.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 22, 43, 41), 4.95, 72.34, 0.0, 18.33, 15.66, 0, 0, 0, 2, 0, 0),)
2025-12-31T22:44:05.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 22:43:41
2025-12-31T22:44:05.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T22:44:06.006 [DEBUG] [Thread-135984] [transport.py] [_log()] starting thread (client mode): 0xb17977c0
2025-12-31T22:44:06.006 [DEBUG] [Thread-135984] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:44:06.027 [DEBUG] [Thread-135984] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T22:44:06.028 [INFO] [Thread-135984] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T22:44:06.031 [DEBUG] [Thread-135984] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:44:06.031 [DEBUG] [Thread-135984] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T22:44:06.031 [DEBUG] [Thread-135984] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:44:06.031 [DEBUG] [Thread-135984] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:44:06.031 [DEBUG] [Thread-135984] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:44:06.031 [DEBUG] [Thread-135984] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:44:06.031 [DEBUG] [Thread-135984] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:44:06.031 [DEBUG] [Thread-135984] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:44:06.031 [DEBUG] [Thread-135984] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:44:06.031 [DEBUG] [Thread-135984] [transport.py] [_log()] client lang: <none>
2025-12-31T22:44:06.031 [DEBUG] [Thread-135984] [transport.py] [_log()] server lang: <none>
2025-12-31T22:44:06.031 [DEBUG] [Thread-135984] [transport.py] [_log()] kex follows: False
2025-12-31T22:44:06.031 [DEBUG] [Thread-135984] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:44:06.031 [DEBUG] [Thread-135984] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:44:06.031 [DEBUG] [Thread-135984] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:44:06.032 [DEBUG] [Thread-135984] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:44:06.032 [DEBUG] [Thread-135984] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:44:06.032 [DEBUG] [Thread-135984] [transport.py] [_log()] Compression: none
2025-12-31T22:44:06.032 [DEBUG] [Thread-135984] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:44:06.049 [DEBUG] [Thread-135984] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:44:06.049 [DEBUG] [Thread-135984] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:44:06.050 [DEBUG] [Thread-135984] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T22:44:06.050 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T22:44:06.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:44:06.052 [DEBUG] [Thread-135984] [transport.py] [_log()] userauth is OK
2025-12-31T22:44:06.052 [DEBUG] [Thread-135984] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:44:06.052 [DEBUG] [Thread-135984] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:44:06.052 [DEBUG] [Thread-135984] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T22:44:06.052 [DEBUG] [Thread-135984] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:44:06.088 [INFO] [Thread-135984] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:44:06.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:44:06.745 [DEBUG] [Thread-135984] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:44:06.746 [DEBUG] [Thread-135984] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:44:06.746 [DEBUG] [Thread-135984] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T22:44:06.787 [DEBUG] [Thread-135984] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:44:06.788 [DEBUG] [Thread-135984] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:44:06.791 [DEBUG] [Thread-135984] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:44:06.804 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:44:06.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T22:44:06.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T22:44:06.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T22:44:06.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:44:06.811 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T22:44:06.811 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:44:06.811 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:44:06.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T22:44:06.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.863678 -999.00  +15.90  12.49     75  +11.40 1 2 1 1 1     0    0 3.92 -21.02 ...s. 13.2 12.5 205.2 18.2 17.1 -12.0 16.9 -13.6 16.8 -12.1 17.1 -11.8
2025-12-31T22:44:06.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T22:44:06.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T22:44:06.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.863678
2025-12-31T22:44:06.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T22:44:06.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T22:44:06.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T22:44:06.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T22:44:06.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T22:44:06.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T22:43:41', tmtdew=4.95, humidity=72.34, cloud=0.0, wind=18.33, temperature=15.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T22:22:50', seeing=1.62, atlas_timestamp='2025-12-31T20:43:41.779', atlas_cloud=2, atlas_rain=1, zp_data=[0.2602499999999992, 0.44475000000000087, 0.7302500000000007, 0.22100000000000009, 0.665, 0.8302500000000013, 0.5669999999999993, 0.4302500000000009, 0.39949999999999974, 0.4095000000000013, 0.8602499999999988, 0.41999999999999993, 0.3490000000000002, 0.4262499999999996, 0.5399999999999991, 0.019000000000000128, 0.8522499999999997, 0.4294999999999991, 0.9249999999999989, 0.5342499999999992, 0.34750000000000014, 0.24074999999999847, -0.13574999999999982, -0.4472499999999986, 0.6789999999999994, nan, 1.1087499999999997, -0.8900000000000006, 0.2450000000000001, -0.4939999999999998, -1.2979999999999983, -1.4959999999999987, -0.4202500000000011], zp_timestamp='2025-12-31T20:15:00')
2025-12-31T22:44:06.812 [DEBUG] [Thread-135984] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:44:06.882 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T22:44:06.895 [DEBUG] [Thread-135987] [transport.py] [_log()] starting thread (client mode): 0xb1794160
2025-12-31T22:44:06.895 [DEBUG] [Thread-135987] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:44:06.909 [DEBUG] [Thread-135987] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T22:44:06.909 [INFO] [Thread-135987] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T22:44:06.917 [DEBUG] [Thread-135987] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:44:06.917 [DEBUG] [Thread-135987] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T22:44:06.917 [DEBUG] [Thread-135987] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:44:06.917 [DEBUG] [Thread-135987] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:44:06.917 [DEBUG] [Thread-135987] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:44:06.917 [DEBUG] [Thread-135987] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:44:06.917 [DEBUG] [Thread-135987] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:44:06.917 [DEBUG] [Thread-135987] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:44:06.917 [DEBUG] [Thread-135987] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:44:06.917 [DEBUG] [Thread-135987] [transport.py] [_log()] client lang: <none>
2025-12-31T22:44:06.917 [DEBUG] [Thread-135987] [transport.py] [_log()] server lang: <none>
2025-12-31T22:44:06.917 [DEBUG] [Thread-135987] [transport.py] [_log()] kex follows: False
2025-12-31T22:44:06.917 [DEBUG] [Thread-135987] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:44:06.917 [DEBUG] [Thread-135987] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:44:06.918 [DEBUG] [Thread-135987] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:44:06.918 [DEBUG] [Thread-135987] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:44:06.918 [DEBUG] [Thread-135987] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:44:06.918 [DEBUG] [Thread-135987] [transport.py] [_log()] Compression: none
2025-12-31T22:44:06.918 [DEBUG] [Thread-135987] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:44:06.970 [DEBUG] [Thread-135989 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:44:06.982 [DEBUG] [Thread-135987] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:44:06.982 [DEBUG] [Thread-135987] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:44:06.983 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T22:44:06.983 [DEBUG] [Thread-135987] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T22:44:06.984 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:44:07.039 [DEBUG] [Thread-135987] [transport.py] [_log()] userauth is OK
2025-12-31T22:44:07.039 [DEBUG] [Thread-135987] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:44:07.039 [DEBUG] [Thread-135987] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:44:07.039 [DEBUG] [Thread-135987] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T22:44:07.039 [DEBUG] [Thread-135987] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:44:07.064 [INFO] [Thread-135987] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:44:07.064 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T22:44:07.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:44:07.905 [DEBUG] [Thread-135987] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:44:07.905 [DEBUG] [Thread-135987] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:44:07.952 [DEBUG] [Thread-135987] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:44:07.952 [DEBUG] [Thread-135987] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:44:07.960 [DEBUG] [Thread-135987] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:44:07.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:44:07.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T22:44:07.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T22:44:07.984 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:44:07.984 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:44:07.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:44:07.992 [DEBUG] [Thread-135987] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:44:17.208 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:44:17.210 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:44:22.025 [DEBUG] [Thread-135990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:44:37.062 [DEBUG] [Thread-135991 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:44:38.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T22:44:38.009 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T22:44:38.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T22:44:38.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 22, 44, 13), 4.96, 72.29, 0.0, 20.52, 15.68, 0, 0, 0, 2, 0, 0),)
2025-12-31T22:44:38.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 22:44:13
2025-12-31T22:44:38.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T22:44:38.988 [DEBUG] [Thread-135992] [transport.py] [_log()] starting thread (client mode): 0xb95782e0
2025-12-31T22:44:38.988 [DEBUG] [Thread-135992] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:44:39.007 [DEBUG] [Thread-135992] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T22:44:39.007 [INFO] [Thread-135992] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T22:44:39.009 [DEBUG] [Thread-135992] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:44:39.010 [DEBUG] [Thread-135992] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T22:44:39.010 [DEBUG] [Thread-135992] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:44:39.010 [DEBUG] [Thread-135992] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:44:39.010 [DEBUG] [Thread-135992] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:44:39.010 [DEBUG] [Thread-135992] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:44:39.010 [DEBUG] [Thread-135992] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:44:39.010 [DEBUG] [Thread-135992] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:44:39.010 [DEBUG] [Thread-135992] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:44:39.010 [DEBUG] [Thread-135992] [transport.py] [_log()] client lang: <none>
2025-12-31T22:44:39.010 [DEBUG] [Thread-135992] [transport.py] [_log()] server lang: <none>
2025-12-31T22:44:39.010 [DEBUG] [Thread-135992] [transport.py] [_log()] kex follows: False
2025-12-31T22:44:39.010 [DEBUG] [Thread-135992] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:44:39.010 [DEBUG] [Thread-135992] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:44:39.010 [DEBUG] [Thread-135992] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:44:39.010 [DEBUG] [Thread-135992] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:44:39.010 [DEBUG] [Thread-135992] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:44:39.010 [DEBUG] [Thread-135992] [transport.py] [_log()] Compression: none
2025-12-31T22:44:39.010 [DEBUG] [Thread-135992] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:44:39.027 [DEBUG] [Thread-135992] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:44:39.028 [DEBUG] [Thread-135992] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:44:39.028 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T22:44:39.029 [DEBUG] [Thread-135992] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T22:44:39.030 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:44:39.031 [DEBUG] [Thread-135992] [transport.py] [_log()] userauth is OK
2025-12-31T22:44:39.031 [DEBUG] [Thread-135992] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:44:39.031 [DEBUG] [Thread-135992] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:44:39.031 [DEBUG] [Thread-135992] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T22:44:39.032 [DEBUG] [Thread-135992] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:44:39.050 [INFO] [Thread-135992] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:44:39.051 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:44:39.701 [DEBUG] [Thread-135992] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:44:39.701 [DEBUG] [Thread-135992] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:44:39.702 [DEBUG] [Thread-135992] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T22:44:39.742 [DEBUG] [Thread-135992] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:44:39.742 [DEBUG] [Thread-135992] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:44:39.745 [DEBUG] [Thread-135992] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:44:39.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:44:39.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T22:44:39.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T22:44:39.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T22:44:39.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:44:39.765 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T22:44:39.765 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:44:39.766 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:44:39.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T22:44:39.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.864025 -999.00  +15.80  16.65     75  +11.40 1 2 1 1 1     0    0 3.99 -20.02 ...s. 15.5 16.6 203.8 21.0 17.1 -12.1 17.0 -13.0 16.8 -12.4 17.1 -11.8
2025-12-31T22:44:39.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T22:44:39.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T22:44:39.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.864025
2025-12-31T22:44:39.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T22:44:39.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T22:44:39.768 [DEBUG] [Thread-135992] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:44:39.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T22:44:39.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T22:44:39.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T22:44:39.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T22:44:13', tmtdew=4.96, humidity=72.29, cloud=0.0, wind=20.52, temperature=15.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T22:22:50', seeing=1.62, atlas_timestamp='2025-12-31T20:44:11.760', atlas_cloud=2, atlas_rain=1, zp_data=[0.2602499999999992, 0.44475000000000087, 0.7302500000000007, 0.22100000000000009, 0.665, 0.8302500000000013, 0.5669999999999993, 0.4302500000000009, 0.39949999999999974, 0.4095000000000013, 0.8602499999999988, 0.41999999999999993, 0.3490000000000002, 0.4262499999999996, 0.5399999999999991, 0.019000000000000128, 0.8522499999999997, 0.4294999999999991, 0.9249999999999989, 0.5342499999999992, 0.34750000000000014, 0.24074999999999847, -0.13574999999999982, -0.4472499999999986, 0.6789999999999994, nan, 1.1087499999999997, -0.8900000000000006, 0.2450000000000001, -0.4939999999999998, -1.2979999999999983, -1.4959999999999987, -0.4202500000000011], zp_timestamp='2025-12-31T20:15:00')
2025-12-31T22:44:39.859 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T22:44:39.870 [DEBUG] [Thread-135995] [transport.py] [_log()] starting thread (client mode): 0xb1745150
2025-12-31T22:44:39.870 [DEBUG] [Thread-135995] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:44:39.889 [DEBUG] [Thread-135995] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T22:44:39.890 [INFO] [Thread-135995] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T22:44:39.897 [DEBUG] [Thread-135995] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:44:39.897 [DEBUG] [Thread-135995] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T22:44:39.897 [DEBUG] [Thread-135995] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:44:39.897 [DEBUG] [Thread-135995] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:44:39.898 [DEBUG] [Thread-135995] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:44:39.898 [DEBUG] [Thread-135995] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:44:39.898 [DEBUG] [Thread-135995] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:44:39.898 [DEBUG] [Thread-135995] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:44:39.898 [DEBUG] [Thread-135995] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:44:39.898 [DEBUG] [Thread-135995] [transport.py] [_log()] client lang: <none>
2025-12-31T22:44:39.898 [DEBUG] [Thread-135995] [transport.py] [_log()] server lang: <none>
2025-12-31T22:44:39.898 [DEBUG] [Thread-135995] [transport.py] [_log()] kex follows: False
2025-12-31T22:44:39.898 [DEBUG] [Thread-135995] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:44:39.898 [DEBUG] [Thread-135995] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:44:39.898 [DEBUG] [Thread-135995] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:44:39.898 [DEBUG] [Thread-135995] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:44:39.898 [DEBUG] [Thread-135995] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:44:39.898 [DEBUG] [Thread-135995] [transport.py] [_log()] Compression: none
2025-12-31T22:44:39.899 [DEBUG] [Thread-135995] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:44:39.955 [DEBUG] [Thread-135995] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:44:39.956 [DEBUG] [Thread-135995] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:44:39.956 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T22:44:39.957 [DEBUG] [Thread-135995] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T22:44:39.958 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:44:40.011 [DEBUG] [Thread-135995] [transport.py] [_log()] userauth is OK
2025-12-31T22:44:40.011 [DEBUG] [Thread-135995] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:44:40.012 [DEBUG] [Thread-135995] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:44:40.012 [DEBUG] [Thread-135995] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T22:44:40.012 [DEBUG] [Thread-135995] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:44:40.032 [INFO] [Thread-135995] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:44:40.032 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T22:44:40.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:44:40.837 [DEBUG] [Thread-135995] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:44:40.837 [DEBUG] [Thread-135995] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:44:40.888 [DEBUG] [Thread-135995] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:44:40.888 [DEBUG] [Thread-135995] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:44:40.900 [DEBUG] [Thread-135995] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:44:40.912 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:44:40.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T22:44:40.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T22:44:40.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:44:40.934 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:44:40.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:44:40.943 [DEBUG] [Thread-135995] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:44:49.051 [DEBUG] [Thread-135997 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:44:52.090 [DEBUG] [Thread-135998 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:45:07.141 [DEBUG] [Thread-135999 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:45:10.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T22:45:10.962 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T22:45:10.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-12-31T22:45:11.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 22, 44, 45), 4.95, 72.33, 0.0, 20.41, 15.68, 0, 0, 0, 2, 0, 0),)
2025-12-31T22:45:11.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 22:44:45
2025-12-31T22:45:11.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T22:45:11.939 [DEBUG] [Thread-136000] [transport.py] [_log()] starting thread (client mode): 0xb9578f40
2025-12-31T22:45:11.939 [DEBUG] [Thread-136000] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:45:11.958 [DEBUG] [Thread-136000] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T22:45:11.958 [INFO] [Thread-136000] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T22:45:11.961 [DEBUG] [Thread-136000] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:45:11.961 [DEBUG] [Thread-136000] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T22:45:11.961 [DEBUG] [Thread-136000] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:45:11.961 [DEBUG] [Thread-136000] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:45:11.961 [DEBUG] [Thread-136000] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:45:11.961 [DEBUG] [Thread-136000] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:45:11.961 [DEBUG] [Thread-136000] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:45:11.961 [DEBUG] [Thread-136000] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:45:11.961 [DEBUG] [Thread-136000] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:45:11.961 [DEBUG] [Thread-136000] [transport.py] [_log()] client lang: <none>
2025-12-31T22:45:11.961 [DEBUG] [Thread-136000] [transport.py] [_log()] server lang: <none>
2025-12-31T22:45:11.961 [DEBUG] [Thread-136000] [transport.py] [_log()] kex follows: False
2025-12-31T22:45:11.961 [DEBUG] [Thread-136000] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:45:11.961 [DEBUG] [Thread-136000] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:45:11.961 [DEBUG] [Thread-136000] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:45:11.961 [DEBUG] [Thread-136000] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:45:11.961 [DEBUG] [Thread-136000] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:45:11.961 [DEBUG] [Thread-136000] [transport.py] [_log()] Compression: none
2025-12-31T22:45:11.961 [DEBUG] [Thread-136000] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:45:11.978 [DEBUG] [Thread-136000] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:45:11.979 [DEBUG] [Thread-136000] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:45:11.979 [DEBUG] [Thread-136000] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T22:45:11.979 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T22:45:11.980 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:45:11.981 [DEBUG] [Thread-136000] [transport.py] [_log()] userauth is OK
2025-12-31T22:45:11.981 [DEBUG] [Thread-136000] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:45:11.981 [DEBUG] [Thread-136000] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:45:11.982 [DEBUG] [Thread-136000] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T22:45:11.982 [DEBUG] [Thread-136000] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:45:12.006 [INFO] [Thread-136000] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:45:12.007 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:45:16.151 [DEBUG] [Thread-136000] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:45:16.151 [DEBUG] [Thread-136000] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:45:16.152 [DEBUG] [Thread-136000] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T22:45:16.192 [DEBUG] [Thread-136000] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:45:16.192 [DEBUG] [Thread-136000] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:45:16.195 [DEBUG] [Thread-136000] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:45:16.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:45:16.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T22:45:16.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T22:45:16.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T22:45:16.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:45:16.308 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T22:45:16.308 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:45:16.308 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:45:16.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T22:45:16.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.864372 -999.00  +15.80  10.03     75  +11.40 1 2 1 1 1     0    0 4.11 -16.62 ..... 13.7 10.0 203.8 17.7 17.1 -12.2 16.9 -13.3 16.8 -12.3 17.1 -11.7
2025-12-31T22:45:16.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T22:45:16.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T22:45:16.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.864372
2025-12-31T22:45:16.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T22:45:16.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T22:45:16.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T22:45:16.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T22:45:16.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T22:45:16.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T22:44:45', tmtdew=4.95, humidity=72.33, cloud=0.0, wind=20.41, temperature=15.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T22:22:50', seeing=1.62, atlas_timestamp='2025-12-31T20:44:41.741', atlas_cloud=2, atlas_rain=1, zp_data=[0.2602499999999992, 0.44475000000000087, 0.7302500000000007, 0.22100000000000009, 0.665, 0.8302500000000013, 0.5669999999999993, 0.4302500000000009, 0.39949999999999974, 0.4095000000000013, 0.8602499999999988, 0.41999999999999993, 0.3490000000000002, 0.4262499999999996, 0.5399999999999991, 0.019000000000000128, 0.8522499999999997, 0.4294999999999991, 0.9249999999999989, 0.5342499999999992, 0.34750000000000014, 0.24074999999999847, -0.13574999999999982, -0.4472499999999986, 0.6789999999999994, nan, 1.1087499999999997, -0.8900000000000006, 0.2450000000000001, -0.4939999999999998, -1.2979999999999983, -1.4959999999999987, -0.4202500000000011], zp_timestamp='2025-12-31T20:15:00')
2025-12-31T22:45:16.310 [DEBUG] [Thread-136000] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:45:16.388 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T22:45:16.400 [DEBUG] [Thread-136003] [transport.py] [_log()] starting thread (client mode): 0xb957a1d0
2025-12-31T22:45:16.400 [DEBUG] [Thread-136003] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:45:16.415 [DEBUG] [Thread-136003] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T22:45:16.415 [INFO] [Thread-136003] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T22:45:16.423 [DEBUG] [Thread-136003] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:45:16.423 [DEBUG] [Thread-136003] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T22:45:16.423 [DEBUG] [Thread-136003] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:45:16.423 [DEBUG] [Thread-136003] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:45:16.423 [DEBUG] [Thread-136003] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:45:16.423 [DEBUG] [Thread-136003] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:45:16.423 [DEBUG] [Thread-136003] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:45:16.423 [DEBUG] [Thread-136003] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:45:16.423 [DEBUG] [Thread-136003] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:45:16.423 [DEBUG] [Thread-136003] [transport.py] [_log()] client lang: <none>
2025-12-31T22:45:16.423 [DEBUG] [Thread-136003] [transport.py] [_log()] server lang: <none>
2025-12-31T22:45:16.423 [DEBUG] [Thread-136003] [transport.py] [_log()] kex follows: False
2025-12-31T22:45:16.424 [DEBUG] [Thread-136003] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:45:16.424 [DEBUG] [Thread-136003] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:45:16.424 [DEBUG] [Thread-136003] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:45:16.424 [DEBUG] [Thread-136003] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:45:16.424 [DEBUG] [Thread-136003] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:45:16.424 [DEBUG] [Thread-136003] [transport.py] [_log()] Compression: none
2025-12-31T22:45:16.424 [DEBUG] [Thread-136003] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:45:16.482 [DEBUG] [Thread-136003] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:45:16.483 [DEBUG] [Thread-136003] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:45:16.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T22:45:16.483 [DEBUG] [Thread-136003] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T22:45:16.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:45:16.538 [DEBUG] [Thread-136003] [transport.py] [_log()] userauth is OK
2025-12-31T22:45:16.538 [DEBUG] [Thread-136003] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:45:16.538 [DEBUG] [Thread-136003] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:45:16.539 [DEBUG] [Thread-136003] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T22:45:16.539 [DEBUG] [Thread-136003] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:45:16.557 [INFO] [Thread-136003] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:45:16.557 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T22:45:16.558 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:45:17.412 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:45:17.413 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:45:17.451 [DEBUG] [Thread-136003] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:45:17.451 [DEBUG] [Thread-136003] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:45:17.499 [DEBUG] [Thread-136003] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:45:17.499 [DEBUG] [Thread-136003] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:45:17.508 [DEBUG] [Thread-136003] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:45:17.515 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:45:17.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T22:45:17.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T22:45:17.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:45:17.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:45:17.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:45:17.538 [DEBUG] [Thread-136003] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:45:22.174 [DEBUG] [Thread-136005 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:45:37.222 [DEBUG] [Thread-136006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:45:47.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T22:45:47.541 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T22:45:47.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T22:45:48.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 22, 45, 17), 4.98, 72.19, 0.0, 18.0, 15.66, 0, 0, 0, 2, 0, 0),)
2025-12-31T22:45:48.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 22:45:17
2025-12-31T22:45:48.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T22:45:48.535 [DEBUG] [Thread-136007] [transport.py] [_log()] starting thread (client mode): 0xb9579120
2025-12-31T22:45:48.535 [DEBUG] [Thread-136007] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:45:48.555 [DEBUG] [Thread-136007] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T22:45:48.555 [INFO] [Thread-136007] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T22:45:48.558 [DEBUG] [Thread-136007] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:45:48.558 [DEBUG] [Thread-136007] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T22:45:48.558 [DEBUG] [Thread-136007] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:45:48.558 [DEBUG] [Thread-136007] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:45:48.558 [DEBUG] [Thread-136007] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:45:48.558 [DEBUG] [Thread-136007] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:45:48.558 [DEBUG] [Thread-136007] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:45:48.558 [DEBUG] [Thread-136007] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:45:48.558 [DEBUG] [Thread-136007] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:45:48.558 [DEBUG] [Thread-136007] [transport.py] [_log()] client lang: <none>
2025-12-31T22:45:48.558 [DEBUG] [Thread-136007] [transport.py] [_log()] server lang: <none>
2025-12-31T22:45:48.558 [DEBUG] [Thread-136007] [transport.py] [_log()] kex follows: False
2025-12-31T22:45:48.558 [DEBUG] [Thread-136007] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:45:48.558 [DEBUG] [Thread-136007] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:45:48.558 [DEBUG] [Thread-136007] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:45:48.558 [DEBUG] [Thread-136007] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:45:48.558 [DEBUG] [Thread-136007] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:45:48.558 [DEBUG] [Thread-136007] [transport.py] [_log()] Compression: none
2025-12-31T22:45:48.559 [DEBUG] [Thread-136007] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:45:48.574 [DEBUG] [Thread-136007] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:45:48.575 [DEBUG] [Thread-136007] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:45:48.575 [DEBUG] [Thread-136007] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T22:45:48.576 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T22:45:48.576 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:45:48.578 [DEBUG] [Thread-136007] [transport.py] [_log()] userauth is OK
2025-12-31T22:45:48.578 [DEBUG] [Thread-136007] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:45:48.578 [DEBUG] [Thread-136007] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:45:48.578 [DEBUG] [Thread-136007] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T22:45:48.578 [DEBUG] [Thread-136007] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:45:48.602 [INFO] [Thread-136007] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:45:48.603 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:45:49.123 [DEBUG] [Thread-136009 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:45:49.204 [DEBUG] [Thread-136007] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:45:49.205 [DEBUG] [Thread-136007] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:45:49.205 [DEBUG] [Thread-136007] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T22:45:49.245 [DEBUG] [Thread-136007] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:45:49.245 [DEBUG] [Thread-136007] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:45:49.248 [DEBUG] [Thread-136007] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:45:49.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:45:49.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T22:45:49.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T22:45:49.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T22:45:49.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:45:49.274 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T22:45:49.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:45:49.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:45:49.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T22:45:49.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.864719 -999.00  +15.80  14.43     75  +11.40 1 2 1 1 1     0    0 3.98 -15.67 ...s. 14.7 14.4 199.9 20.5 17.1 -12.3 16.9 -13.0 16.8 -12.5 17.1 -11.8
2025-12-31T22:45:49.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T22:45:49.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T22:45:49.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.864719
2025-12-31T22:45:49.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T22:45:49.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T22:45:49.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T22:45:49.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T22:45:49.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T22:45:49.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T22:45:17', tmtdew=4.98, humidity=72.19, cloud=0.0, wind=18.0, temperature=15.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T22:22:50', seeing=1.62, atlas_timestamp='2025-12-31T20:45:11.722', atlas_cloud=2, atlas_rain=1, zp_data=[0.2602499999999992, 0.44475000000000087, 0.7302500000000007, 0.22100000000000009, 0.665, 0.8302500000000013, 0.5669999999999993, 0.4302500000000009, 0.39949999999999974, 0.4095000000000013, 0.8602499999999988, 0.41999999999999993, 0.3490000000000002, 0.4262499999999996, 0.5399999999999991, 0.019000000000000128, 0.8522499999999997, 0.4294999999999991, 0.9249999999999989, 0.5342499999999992, 0.34750000000000014, 0.24074999999999847, -0.13574999999999982, -0.4472499999999986, 0.6789999999999994, nan, 1.1087499999999997, -0.8900000000000006, 0.2450000000000001, -0.4939999999999998, -1.2979999999999983, -1.4959999999999987, -0.4202500000000011], zp_timestamp='2025-12-31T20:15:00')
2025-12-31T22:45:49.277 [DEBUG] [Thread-136007] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:45:49.361 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T22:45:49.373 [DEBUG] [Thread-136011] [transport.py] [_log()] starting thread (client mode): 0xb957bfa0
2025-12-31T22:45:49.373 [DEBUG] [Thread-136011] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:45:49.389 [DEBUG] [Thread-136011] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T22:45:49.389 [INFO] [Thread-136011] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T22:45:49.396 [DEBUG] [Thread-136011] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:45:49.396 [DEBUG] [Thread-136011] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T22:45:49.396 [DEBUG] [Thread-136011] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:45:49.396 [DEBUG] [Thread-136011] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:45:49.396 [DEBUG] [Thread-136011] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:45:49.397 [DEBUG] [Thread-136011] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:45:49.397 [DEBUG] [Thread-136011] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:45:49.397 [DEBUG] [Thread-136011] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:45:49.397 [DEBUG] [Thread-136011] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:45:49.397 [DEBUG] [Thread-136011] [transport.py] [_log()] client lang: <none>
2025-12-31T22:45:49.397 [DEBUG] [Thread-136011] [transport.py] [_log()] server lang: <none>
2025-12-31T22:45:49.397 [DEBUG] [Thread-136011] [transport.py] [_log()] kex follows: False
2025-12-31T22:45:49.397 [DEBUG] [Thread-136011] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:45:49.397 [DEBUG] [Thread-136011] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:45:49.397 [DEBUG] [Thread-136011] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:45:49.397 [DEBUG] [Thread-136011] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:45:49.397 [DEBUG] [Thread-136011] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:45:49.398 [DEBUG] [Thread-136011] [transport.py] [_log()] Compression: none
2025-12-31T22:45:49.398 [DEBUG] [Thread-136011] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:45:49.452 [DEBUG] [Thread-136011] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:45:49.453 [DEBUG] [Thread-136011] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:45:49.453 [DEBUG] [Thread-136011] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T22:45:49.453 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T22:45:49.453 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:45:49.512 [DEBUG] [Thread-136011] [transport.py] [_log()] userauth is OK
2025-12-31T22:45:49.512 [DEBUG] [Thread-136011] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:45:49.512 [DEBUG] [Thread-136011] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:45:49.512 [DEBUG] [Thread-136011] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T22:45:49.512 [DEBUG] [Thread-136011] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:45:49.526 [INFO] [Thread-136011] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:45:49.526 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T22:45:49.526 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:45:50.351 [DEBUG] [Thread-136011] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:45:50.351 [DEBUG] [Thread-136011] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:45:50.399 [DEBUG] [Thread-136011] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:45:50.399 [DEBUG] [Thread-136011] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:45:50.407 [DEBUG] [Thread-136011] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:45:50.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:45:50.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T22:45:50.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-12-31T22:45:50.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:45:50.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:45:50.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:45:50.440 [DEBUG] [Thread-136011] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:45:52.257 [DEBUG] [Thread-136013 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:46:07.311 [DEBUG] [Thread-136014 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:46:17.617 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:46:17.618 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:46:20.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T22:46:20.437 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T22:46:20.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T22:46:21.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 22, 45, 49), 4.98, 72.18, 0.0, 17.19, 15.61, 0, 0, 0, 2, 0, 0),)
2025-12-31T22:46:21.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 22:45:49
2025-12-31T22:46:21.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T22:46:21.438 [DEBUG] [Thread-136015] [transport.py] [_log()] starting thread (client mode): 0xb957b550
2025-12-31T22:46:21.439 [DEBUG] [Thread-136015] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:46:21.458 [DEBUG] [Thread-136015] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T22:46:21.458 [INFO] [Thread-136015] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T22:46:21.461 [DEBUG] [Thread-136015] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:46:21.461 [DEBUG] [Thread-136015] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T22:46:21.461 [DEBUG] [Thread-136015] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:46:21.461 [DEBUG] [Thread-136015] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:46:21.461 [DEBUG] [Thread-136015] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:46:21.461 [DEBUG] [Thread-136015] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:46:21.461 [DEBUG] [Thread-136015] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:46:21.461 [DEBUG] [Thread-136015] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:46:21.461 [DEBUG] [Thread-136015] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:46:21.462 [DEBUG] [Thread-136015] [transport.py] [_log()] client lang: <none>
2025-12-31T22:46:21.462 [DEBUG] [Thread-136015] [transport.py] [_log()] server lang: <none>
2025-12-31T22:46:21.462 [DEBUG] [Thread-136015] [transport.py] [_log()] kex follows: False
2025-12-31T22:46:21.462 [DEBUG] [Thread-136015] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:46:21.462 [DEBUG] [Thread-136015] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:46:21.462 [DEBUG] [Thread-136015] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:46:21.462 [DEBUG] [Thread-136015] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:46:21.462 [DEBUG] [Thread-136015] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:46:21.462 [DEBUG] [Thread-136015] [transport.py] [_log()] Compression: none
2025-12-31T22:46:21.462 [DEBUG] [Thread-136015] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:46:21.477 [DEBUG] [Thread-136015] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:46:21.477 [DEBUG] [Thread-136015] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:46:21.477 [DEBUG] [Thread-136015] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T22:46:21.477 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T22:46:21.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:46:21.478 [DEBUG] [Thread-136015] [transport.py] [_log()] userauth is OK
2025-12-31T22:46:21.478 [DEBUG] [Thread-136015] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:46:21.478 [DEBUG] [Thread-136015] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:46:21.478 [DEBUG] [Thread-136015] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T22:46:21.478 [DEBUG] [Thread-136015] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:46:21.495 [INFO] [Thread-136015] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:46:21.495 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:46:22.267 [DEBUG] [Thread-136015] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:46:22.267 [DEBUG] [Thread-136015] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:46:22.267 [DEBUG] [Thread-136015] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T22:46:22.308 [DEBUG] [Thread-136015] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:46:22.308 [DEBUG] [Thread-136015] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:46:22.310 [DEBUG] [Thread-136015] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:46:22.321 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:46:22.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T22:46:22.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T22:46:22.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T22:46:22.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:46:22.326 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T22:46:22.326 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:46:22.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:46:22.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T22:46:22.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.865067 -999.00  +15.80  15.32     75  +11.40 1 2 1 1 1     0    0 4.11 -14.49 ...s. 17.0 15.3 199.2 20.6 17.1 -12.3 17.0 -13.4 16.8 -12.4 17.1 -11.8
2025-12-31T22:46:22.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T22:46:22.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T22:46:22.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.865067
2025-12-31T22:46:22.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T22:46:22.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T22:46:22.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T22:46:22.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T22:46:22.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T22:46:22.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T22:45:49', tmtdew=4.98, humidity=72.18, cloud=0.0, wind=17.19, temperature=15.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T22:22:50', seeing=1.62, atlas_timestamp='2025-12-31T20:45:41.789', atlas_cloud=2, atlas_rain=1, zp_data=[0.2602499999999992, 0.44475000000000087, 0.7302500000000007, 0.22100000000000009, 0.665, 0.8302500000000013, 0.5669999999999993, 0.4302500000000009, 0.39949999999999974, 0.4095000000000013, 0.8602499999999988, 0.41999999999999993, 0.3490000000000002, 0.4262499999999996, 0.5399999999999991, 0.019000000000000128, 0.8522499999999997, 0.4294999999999991, 0.9249999999999989, 0.5342499999999992, 0.34750000000000014, 0.24074999999999847, -0.13574999999999982, -0.4472499999999986, 0.6789999999999994, nan, 1.1087499999999997, -0.8900000000000006, 0.2450000000000001, -0.4939999999999998, -1.2979999999999983, -1.4959999999999987, -0.4202500000000011], zp_timestamp='2025-12-31T20:15:00')
2025-12-31T22:46:22.327 [DEBUG] [Thread-136015] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:46:22.339 [DEBUG] [Thread-136018 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:46:22.401 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T22:46:22.412 [DEBUG] [Thread-136019] [transport.py] [_log()] starting thread (client mode): 0xb95795a0
2025-12-31T22:46:22.412 [DEBUG] [Thread-136019] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:46:22.427 [DEBUG] [Thread-136019] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T22:46:22.427 [INFO] [Thread-136019] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T22:46:22.434 [DEBUG] [Thread-136019] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:46:22.434 [DEBUG] [Thread-136019] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T22:46:22.434 [DEBUG] [Thread-136019] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:46:22.434 [DEBUG] [Thread-136019] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:46:22.434 [DEBUG] [Thread-136019] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:46:22.435 [DEBUG] [Thread-136019] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:46:22.435 [DEBUG] [Thread-136019] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:46:22.435 [DEBUG] [Thread-136019] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:46:22.435 [DEBUG] [Thread-136019] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:46:22.435 [DEBUG] [Thread-136019] [transport.py] [_log()] client lang: <none>
2025-12-31T22:46:22.435 [DEBUG] [Thread-136019] [transport.py] [_log()] server lang: <none>
2025-12-31T22:46:22.435 [DEBUG] [Thread-136019] [transport.py] [_log()] kex follows: False
2025-12-31T22:46:22.435 [DEBUG] [Thread-136019] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:46:22.435 [DEBUG] [Thread-136019] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:46:22.435 [DEBUG] [Thread-136019] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:46:22.435 [DEBUG] [Thread-136019] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:46:22.435 [DEBUG] [Thread-136019] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:46:22.435 [DEBUG] [Thread-136019] [transport.py] [_log()] Compression: none
2025-12-31T22:46:22.435 [DEBUG] [Thread-136019] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:46:22.489 [DEBUG] [Thread-136019] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:46:22.489 [DEBUG] [Thread-136019] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:46:22.489 [DEBUG] [Thread-136019] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T22:46:22.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T22:46:22.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:46:22.547 [DEBUG] [Thread-136019] [transport.py] [_log()] userauth is OK
2025-12-31T22:46:22.547 [DEBUG] [Thread-136019] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:46:22.547 [DEBUG] [Thread-136019] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:46:22.547 [DEBUG] [Thread-136019] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T22:46:22.547 [DEBUG] [Thread-136019] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:46:22.561 [INFO] [Thread-136019] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:46:22.561 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T22:46:22.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:46:23.371 [DEBUG] [Thread-136019] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:46:23.371 [DEBUG] [Thread-136019] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:46:23.419 [DEBUG] [Thread-136019] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:46:23.420 [DEBUG] [Thread-136019] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:46:23.428 [DEBUG] [Thread-136019] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:46:23.437 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:46:23.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-12-31T22:46:23.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-12-31T22:46:23.460 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:46:23.460 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:46:23.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:46:23.472 [DEBUG] [Thread-136019] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:46:37.380 [DEBUG] [Thread-136021 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:46:49.211 [DEBUG] [Thread-136022 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:46:52.416 [DEBUG] [Thread-136023 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:46:53.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T22:46:53.490 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T22:46:53.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T22:46:54.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 22, 46, 21), 4.97, 72.24, 0.0, 16.87, 15.66, 0, 0, 0, 2, 0, 0),)
2025-12-31T22:46:54.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 22:46:21
2025-12-31T22:46:54.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T22:46:54.545 [DEBUG] [Thread-136024] [transport.py] [_log()] starting thread (client mode): 0xb957ab00
2025-12-31T22:46:54.545 [DEBUG] [Thread-136024] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:46:54.564 [DEBUG] [Thread-136024] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T22:46:54.564 [INFO] [Thread-136024] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T22:46:54.566 [DEBUG] [Thread-136024] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:46:54.566 [DEBUG] [Thread-136024] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T22:46:54.566 [DEBUG] [Thread-136024] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:46:54.566 [DEBUG] [Thread-136024] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:46:54.566 [DEBUG] [Thread-136024] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:46:54.566 [DEBUG] [Thread-136024] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:46:54.566 [DEBUG] [Thread-136024] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:46:54.566 [DEBUG] [Thread-136024] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:46:54.566 [DEBUG] [Thread-136024] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:46:54.566 [DEBUG] [Thread-136024] [transport.py] [_log()] client lang: <none>
2025-12-31T22:46:54.566 [DEBUG] [Thread-136024] [transport.py] [_log()] server lang: <none>
2025-12-31T22:46:54.566 [DEBUG] [Thread-136024] [transport.py] [_log()] kex follows: False
2025-12-31T22:46:54.566 [DEBUG] [Thread-136024] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:46:54.566 [DEBUG] [Thread-136024] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:46:54.566 [DEBUG] [Thread-136024] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:46:54.566 [DEBUG] [Thread-136024] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:46:54.566 [DEBUG] [Thread-136024] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:46:54.566 [DEBUG] [Thread-136024] [transport.py] [_log()] Compression: none
2025-12-31T22:46:54.566 [DEBUG] [Thread-136024] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:46:54.576 [DEBUG] [Thread-136024] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:46:54.576 [DEBUG] [Thread-136024] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:46:54.576 [DEBUG] [Thread-136024] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T22:46:54.576 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T22:46:54.576 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:46:54.577 [DEBUG] [Thread-136024] [transport.py] [_log()] userauth is OK
2025-12-31T22:46:54.577 [DEBUG] [Thread-136024] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:46:54.577 [DEBUG] [Thread-136024] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:46:54.577 [DEBUG] [Thread-136024] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T22:46:54.577 [DEBUG] [Thread-136024] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:46:54.586 [INFO] [Thread-136024] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:46:54.586 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:46:55.219 [DEBUG] [Thread-136024] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:46:55.219 [DEBUG] [Thread-136024] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:46:55.220 [DEBUG] [Thread-136024] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T22:46:55.260 [DEBUG] [Thread-136024] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:46:55.260 [DEBUG] [Thread-136024] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:46:55.262 [DEBUG] [Thread-136024] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:46:55.274 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:46:55.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T22:46:55.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T22:46:55.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T22:46:55.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:46:55.279 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T22:46:55.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:46:55.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:46:55.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T22:46:55.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.865414 -999.00  +15.70  17.45     75  +11.40 1 2 1 1 1     0    0 4.07 -15.64 ...S. 10.9 17.4 194.4 22.6 17.1 -12.5 16.9 -13.0 16.8 -12.4 17.1 -11.9
2025-12-31T22:46:55.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T22:46:55.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T22:46:55.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.865414
2025-12-31T22:46:55.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T22:46:55.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T22:46:55.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T22:46:55.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T22:46:55.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T22:46:55.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T22:46:21', tmtdew=4.97, humidity=72.24, cloud=0.0, wind=16.87, temperature=15.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T22:22:50', seeing=1.62, atlas_timestamp='2025-12-31T20:46:11.770', atlas_cloud=2, atlas_rain=1, zp_data=[0.2602499999999992, 0.44475000000000087, 0.7302500000000007, 0.22100000000000009, 0.665, 0.8302500000000013, 0.5669999999999993, 0.4302500000000009, 0.39949999999999974, 0.4095000000000013, 0.8602499999999988, 0.41999999999999993, 0.3490000000000002, 0.4262499999999996, 0.5399999999999991, 0.019000000000000128, 0.8522499999999997, 0.4294999999999991, 0.9249999999999989, 0.5342499999999992, 0.34750000000000014, 0.24074999999999847, -0.13574999999999982, -0.4472499999999986, 0.6789999999999994, nan, 1.1087499999999997, -0.8900000000000006, 0.2450000000000001, -0.4939999999999998, -1.2979999999999983, -1.4959999999999987, -0.4202500000000011], zp_timestamp='2025-12-31T20:15:00')
2025-12-31T22:46:55.280 [DEBUG] [Thread-136024] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:46:55.352 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T22:46:55.364 [DEBUG] [Thread-136027] [transport.py] [_log()] starting thread (client mode): 0xb9579150
2025-12-31T22:46:55.364 [DEBUG] [Thread-136027] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:46:55.378 [DEBUG] [Thread-136027] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T22:46:55.378 [INFO] [Thread-136027] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T22:46:55.386 [DEBUG] [Thread-136027] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:46:55.386 [DEBUG] [Thread-136027] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T22:46:55.386 [DEBUG] [Thread-136027] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:46:55.386 [DEBUG] [Thread-136027] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:46:55.386 [DEBUG] [Thread-136027] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:46:55.386 [DEBUG] [Thread-136027] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:46:55.386 [DEBUG] [Thread-136027] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:46:55.386 [DEBUG] [Thread-136027] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:46:55.386 [DEBUG] [Thread-136027] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:46:55.386 [DEBUG] [Thread-136027] [transport.py] [_log()] client lang: <none>
2025-12-31T22:46:55.386 [DEBUG] [Thread-136027] [transport.py] [_log()] server lang: <none>
2025-12-31T22:46:55.386 [DEBUG] [Thread-136027] [transport.py] [_log()] kex follows: False
2025-12-31T22:46:55.386 [DEBUG] [Thread-136027] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:46:55.386 [DEBUG] [Thread-136027] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:46:55.386 [DEBUG] [Thread-136027] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:46:55.386 [DEBUG] [Thread-136027] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:46:55.386 [DEBUG] [Thread-136027] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:46:55.386 [DEBUG] [Thread-136027] [transport.py] [_log()] Compression: none
2025-12-31T22:46:55.386 [DEBUG] [Thread-136027] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:46:55.441 [DEBUG] [Thread-136027] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:46:55.441 [DEBUG] [Thread-136027] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:46:55.441 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T22:46:55.442 [DEBUG] [Thread-136027] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T22:46:55.442 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:46:55.498 [DEBUG] [Thread-136027] [transport.py] [_log()] userauth is OK
2025-12-31T22:46:55.498 [DEBUG] [Thread-136027] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:46:55.498 [DEBUG] [Thread-136027] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:46:55.498 [DEBUG] [Thread-136027] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T22:46:55.498 [DEBUG] [Thread-136027] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:46:55.516 [INFO] [Thread-136027] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:46:55.516 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T22:46:55.516 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:46:56.346 [DEBUG] [Thread-136027] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:46:56.347 [DEBUG] [Thread-136027] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:46:56.394 [DEBUG] [Thread-136027] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:46:56.395 [DEBUG] [Thread-136027] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:46:56.403 [DEBUG] [Thread-136027] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:46:56.411 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:46:56.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-12-31T22:46:56.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T22:46:56.428 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:46:56.428 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:46:56.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:46:56.436 [DEBUG] [Thread-136027] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:47:07.450 [DEBUG] [Thread-136029 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:47:17.820 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:47:17.822 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:47:22.504 [DEBUG] [Thread-136030 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:47:26.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T22:47:26.458 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T22:47:26.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T22:47:27.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 22, 46, 53), 4.97, 72.26, 0.0, 12.99, 15.68, 0, 0, 0, 2, 0, 0),)
2025-12-31T22:47:27.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 22:46:53
2025-12-31T22:47:27.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T22:47:27.504 [DEBUG] [Thread-136031] [transport.py] [_log()] starting thread (client mode): 0xb957bb50
2025-12-31T22:47:27.504 [DEBUG] [Thread-136031] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:47:27.525 [DEBUG] [Thread-136031] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T22:47:27.525 [INFO] [Thread-136031] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T22:47:27.528 [DEBUG] [Thread-136031] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:47:27.528 [DEBUG] [Thread-136031] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T22:47:27.528 [DEBUG] [Thread-136031] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:47:27.528 [DEBUG] [Thread-136031] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:47:27.528 [DEBUG] [Thread-136031] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:47:27.528 [DEBUG] [Thread-136031] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:47:27.528 [DEBUG] [Thread-136031] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:47:27.528 [DEBUG] [Thread-136031] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:47:27.528 [DEBUG] [Thread-136031] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:47:27.528 [DEBUG] [Thread-136031] [transport.py] [_log()] client lang: <none>
2025-12-31T22:47:27.529 [DEBUG] [Thread-136031] [transport.py] [_log()] server lang: <none>
2025-12-31T22:47:27.529 [DEBUG] [Thread-136031] [transport.py] [_log()] kex follows: False
2025-12-31T22:47:27.529 [DEBUG] [Thread-136031] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:47:27.529 [DEBUG] [Thread-136031] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:47:27.529 [DEBUG] [Thread-136031] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:47:27.529 [DEBUG] [Thread-136031] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:47:27.529 [DEBUG] [Thread-136031] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:47:27.529 [DEBUG] [Thread-136031] [transport.py] [_log()] Compression: none
2025-12-31T22:47:27.529 [DEBUG] [Thread-136031] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:47:27.545 [DEBUG] [Thread-136031] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:47:27.545 [DEBUG] [Thread-136031] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:47:27.545 [DEBUG] [Thread-136031] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T22:47:27.545 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T22:47:27.546 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:47:27.546 [DEBUG] [Thread-136031] [transport.py] [_log()] userauth is OK
2025-12-31T22:47:27.546 [DEBUG] [Thread-136031] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:47:27.546 [DEBUG] [Thread-136031] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:47:27.546 [DEBUG] [Thread-136031] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T22:47:27.546 [DEBUG] [Thread-136031] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:47:27.563 [INFO] [Thread-136031] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:47:27.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:47:28.323 [DEBUG] [Thread-136031] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:47:28.323 [DEBUG] [Thread-136031] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:47:28.324 [DEBUG] [Thread-136031] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T22:47:28.364 [DEBUG] [Thread-136031] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:47:28.364 [DEBUG] [Thread-136031] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:47:28.368 [DEBUG] [Thread-136031] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:47:28.381 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:47:28.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T22:47:28.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T22:47:28.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T22:47:28.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:47:28.391 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T22:47:28.391 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:47:28.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:47:28.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T22:47:28.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.865761 -999.00  +15.70  10.34     75  +11.40 1 2 1 1 1     0    0 4.13 -13.38 ...S. 14.0 10.3 198.9 18.3 17.1 -12.3 16.8 -13.0 16.8 -12.5 17.0 -11.9
2025-12-31T22:47:28.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T22:47:28.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T22:47:28.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.865761
2025-12-31T22:47:28.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T22:47:28.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T22:47:28.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T22:47:28.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T22:47:28.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T22:47:28.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T22:46:53', tmtdew=4.97, humidity=72.26, cloud=0.0, wind=12.99, temperature=15.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T22:22:50', seeing=1.62, atlas_timestamp='2025-12-31T20:46:41.750', atlas_cloud=2, atlas_rain=1, zp_data=[0.2602499999999992, 0.44475000000000087, 0.7302500000000007, 0.22100000000000009, 0.665, 0.8302500000000013, 0.5669999999999993, 0.4302500000000009, 0.39949999999999974, 0.4095000000000013, 0.8602499999999988, 0.41999999999999993, 0.3490000000000002, 0.4262499999999996, 0.5399999999999991, 0.019000000000000128, 0.8522499999999997, 0.4294999999999991, 0.9249999999999989, 0.5342499999999992, 0.34750000000000014, 0.24074999999999847, -0.13574999999999982, -0.4472499999999986, 0.6789999999999994, nan, 1.1087499999999997, -0.8900000000000006, 0.2450000000000001, -0.4939999999999998, -1.2979999999999983, -1.4959999999999987, -0.4202500000000011], zp_timestamp='2025-12-31T20:15:00')
2025-12-31T22:47:28.393 [DEBUG] [Thread-136031] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:47:28.477 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T22:47:28.494 [DEBUG] [Thread-136034] [transport.py] [_log()] starting thread (client mode): 0xb957ae60
2025-12-31T22:47:28.494 [DEBUG] [Thread-136034] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:47:28.509 [DEBUG] [Thread-136034] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T22:47:28.509 [INFO] [Thread-136034] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T22:47:28.516 [DEBUG] [Thread-136034] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:47:28.517 [DEBUG] [Thread-136034] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T22:47:28.517 [DEBUG] [Thread-136034] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:47:28.517 [DEBUG] [Thread-136034] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:47:28.517 [DEBUG] [Thread-136034] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:47:28.517 [DEBUG] [Thread-136034] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:47:28.517 [DEBUG] [Thread-136034] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:47:28.517 [DEBUG] [Thread-136034] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:47:28.517 [DEBUG] [Thread-136034] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:47:28.517 [DEBUG] [Thread-136034] [transport.py] [_log()] client lang: <none>
2025-12-31T22:47:28.517 [DEBUG] [Thread-136034] [transport.py] [_log()] server lang: <none>
2025-12-31T22:47:28.517 [DEBUG] [Thread-136034] [transport.py] [_log()] kex follows: False
2025-12-31T22:47:28.517 [DEBUG] [Thread-136034] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:47:28.518 [DEBUG] [Thread-136034] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:47:28.518 [DEBUG] [Thread-136034] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:47:28.518 [DEBUG] [Thread-136034] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:47:28.518 [DEBUG] [Thread-136034] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:47:28.518 [DEBUG] [Thread-136034] [transport.py] [_log()] Compression: none
2025-12-31T22:47:28.518 [DEBUG] [Thread-136034] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:47:28.576 [DEBUG] [Thread-136034] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:47:28.576 [DEBUG] [Thread-136034] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:47:28.577 [DEBUG] [Thread-136034] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T22:47:28.577 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T22:47:28.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:47:28.635 [DEBUG] [Thread-136034] [transport.py] [_log()] userauth is OK
2025-12-31T22:47:28.635 [DEBUG] [Thread-136034] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:47:28.635 [DEBUG] [Thread-136034] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:47:28.635 [DEBUG] [Thread-136034] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T22:47:28.635 [DEBUG] [Thread-136034] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:47:28.655 [INFO] [Thread-136034] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:47:28.655 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T22:47:28.656 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:47:29.525 [DEBUG] [Thread-136034] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:47:29.526 [DEBUG] [Thread-136034] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:47:29.573 [DEBUG] [Thread-136034] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:47:29.574 [DEBUG] [Thread-136034] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:47:29.583 [DEBUG] [Thread-136034] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:47:29.591 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:47:29.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T22:47:29.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T22:47:29.608 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:47:29.609 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:47:29.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:47:29.617 [DEBUG] [Thread-136034] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:47:37.537 [DEBUG] [Thread-136036 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:47:49.292 [DEBUG] [Thread-136037 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:47:52.592 [DEBUG] [Thread-136038 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:47:59.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T22:47:59.611 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T22:47:59.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T22:48:00.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 22, 47, 25), 4.98, 72.21, 0.0, 11.21, 15.68, 0, 0, 0, 2, 0, 0),)
2025-12-31T22:48:00.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 22:47:25
2025-12-31T22:48:00.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T22:48:00.633 [DEBUG] [Thread-136039] [transport.py] [_log()] starting thread (client mode): 0xb9579300
2025-12-31T22:48:00.633 [DEBUG] [Thread-136039] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:48:00.654 [DEBUG] [Thread-136039] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T22:48:00.654 [INFO] [Thread-136039] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T22:48:00.657 [DEBUG] [Thread-136039] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:48:00.657 [DEBUG] [Thread-136039] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T22:48:00.657 [DEBUG] [Thread-136039] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:48:00.657 [DEBUG] [Thread-136039] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:48:00.657 [DEBUG] [Thread-136039] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:48:00.657 [DEBUG] [Thread-136039] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:48:00.657 [DEBUG] [Thread-136039] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:48:00.657 [DEBUG] [Thread-136039] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:48:00.657 [DEBUG] [Thread-136039] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:48:00.657 [DEBUG] [Thread-136039] [transport.py] [_log()] client lang: <none>
2025-12-31T22:48:00.657 [DEBUG] [Thread-136039] [transport.py] [_log()] server lang: <none>
2025-12-31T22:48:00.657 [DEBUG] [Thread-136039] [transport.py] [_log()] kex follows: False
2025-12-31T22:48:00.657 [DEBUG] [Thread-136039] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:48:00.657 [DEBUG] [Thread-136039] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:48:00.657 [DEBUG] [Thread-136039] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:48:00.657 [DEBUG] [Thread-136039] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:48:00.657 [DEBUG] [Thread-136039] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:48:00.657 [DEBUG] [Thread-136039] [transport.py] [_log()] Compression: none
2025-12-31T22:48:00.657 [DEBUG] [Thread-136039] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:48:00.675 [DEBUG] [Thread-136039] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:48:00.675 [DEBUG] [Thread-136039] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:48:00.676 [DEBUG] [Thread-136039] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T22:48:00.676 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T22:48:00.676 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:48:00.676 [DEBUG] [Thread-136039] [transport.py] [_log()] userauth is OK
2025-12-31T22:48:00.676 [DEBUG] [Thread-136039] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:48:00.677 [DEBUG] [Thread-136039] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:48:00.677 [DEBUG] [Thread-136039] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T22:48:00.677 [DEBUG] [Thread-136039] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:48:00.687 [INFO] [Thread-136039] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:48:00.688 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:48:01.330 [DEBUG] [Thread-136039] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:48:01.330 [DEBUG] [Thread-136039] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:48:01.330 [DEBUG] [Thread-136039] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T22:48:01.372 [DEBUG] [Thread-136039] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:48:01.372 [DEBUG] [Thread-136039] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:48:01.375 [DEBUG] [Thread-136039] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:48:01.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:48:01.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T22:48:01.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T22:48:01.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T22:48:01.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:48:01.395 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T22:48:01.395 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:48:01.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:48:01.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T22:48:01.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.866455 -999.00  +15.80  12.11     75  +11.40 1 2 1 1 1     0    0 4.20 -11.79 ...s. 13.1 12.1 191.8 17.6 17.1 -12.5 16.9 -13.6 16.7 -12.7 17.1 -12.1
2025-12-31T22:48:01.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T22:48:01.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T22:48:01.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.866455
2025-12-31T22:48:01.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T22:48:01.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T22:48:01.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T22:48:01.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T22:48:01.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T22:48:01.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T22:47:25', tmtdew=4.98, humidity=72.21, cloud=0.0, wind=11.21, temperature=15.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T22:22:50', seeing=1.62, atlas_timestamp='2025-12-31T20:47:41.712', atlas_cloud=2, atlas_rain=1, zp_data=[0.2602499999999992, 0.44475000000000087, 0.7302500000000007, 0.22100000000000009, 0.665, 0.8302500000000013, 0.5669999999999993, 0.4302500000000009, 0.39949999999999974, 0.4095000000000013, 0.8602499999999988, 0.41999999999999993, 0.3490000000000002, 0.4262499999999996, 0.5399999999999991, 0.019000000000000128, 0.8522499999999997, 0.4294999999999991, 0.9249999999999989, 0.5342499999999992, 0.34750000000000014, 0.24074999999999847, -0.13574999999999982, -0.4472499999999986, 0.6789999999999994, nan, 1.1087499999999997, -0.8900000000000006, 0.2450000000000001, -0.4939999999999998, -1.2979999999999983, -1.4959999999999987, -0.4202500000000011], zp_timestamp='2025-12-31T20:15:00')
2025-12-31T22:48:01.396 [DEBUG] [Thread-136039] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:48:01.470 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T22:48:01.481 [DEBUG] [Thread-136042] [transport.py] [_log()] starting thread (client mode): 0xb95798d0
2025-12-31T22:48:01.481 [DEBUG] [Thread-136042] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:48:01.496 [DEBUG] [Thread-136042] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T22:48:01.496 [INFO] [Thread-136042] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T22:48:01.504 [DEBUG] [Thread-136042] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:48:01.504 [DEBUG] [Thread-136042] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T22:48:01.504 [DEBUG] [Thread-136042] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:48:01.504 [DEBUG] [Thread-136042] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:48:01.504 [DEBUG] [Thread-136042] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:48:01.504 [DEBUG] [Thread-136042] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:48:01.504 [DEBUG] [Thread-136042] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:48:01.504 [DEBUG] [Thread-136042] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:48:01.504 [DEBUG] [Thread-136042] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:48:01.504 [DEBUG] [Thread-136042] [transport.py] [_log()] client lang: <none>
2025-12-31T22:48:01.504 [DEBUG] [Thread-136042] [transport.py] [_log()] server lang: <none>
2025-12-31T22:48:01.504 [DEBUG] [Thread-136042] [transport.py] [_log()] kex follows: False
2025-12-31T22:48:01.504 [DEBUG] [Thread-136042] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:48:01.504 [DEBUG] [Thread-136042] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:48:01.504 [DEBUG] [Thread-136042] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:48:01.504 [DEBUG] [Thread-136042] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:48:01.504 [DEBUG] [Thread-136042] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:48:01.504 [DEBUG] [Thread-136042] [transport.py] [_log()] Compression: none
2025-12-31T22:48:01.504 [DEBUG] [Thread-136042] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:48:01.566 [DEBUG] [Thread-136042] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:48:01.567 [DEBUG] [Thread-136042] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:48:01.567 [DEBUG] [Thread-136042] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T22:48:01.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T22:48:01.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:48:01.622 [DEBUG] [Thread-136042] [transport.py] [_log()] userauth is OK
2025-12-31T22:48:01.622 [DEBUG] [Thread-136042] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:48:01.622 [DEBUG] [Thread-136042] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:48:01.623 [DEBUG] [Thread-136042] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T22:48:01.623 [DEBUG] [Thread-136042] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:48:01.636 [INFO] [Thread-136042] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:48:01.636 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T22:48:01.637 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:48:02.506 [DEBUG] [Thread-136042] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:48:02.506 [DEBUG] [Thread-136042] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:48:02.554 [DEBUG] [Thread-136042] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:48:02.554 [DEBUG] [Thread-136042] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:48:02.562 [DEBUG] [Thread-136042] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:48:02.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:48:02.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T22:48:02.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T22:48:02.586 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:48:02.586 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:48:02.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:48:02.594 [DEBUG] [Thread-136042] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:48:07.625 [DEBUG] [Thread-136044 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:48:18.022 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:48:18.023 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:48:22.676 [DEBUG] [Thread-136045 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:48:32.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T22:48:32.605 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T22:48:32.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T22:48:33.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 22, 48, 29), 5.05, 72.08, 0.0, 18.35, 15.71, 0, 0, 0, 2, 0, 0),)
2025-12-31T22:48:33.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 22:48:29
2025-12-31T22:48:33.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T22:48:33.591 [DEBUG] [Thread-136046] [transport.py] [_log()] starting thread (client mode): 0xb957ac50
2025-12-31T22:48:33.591 [DEBUG] [Thread-136046] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:48:33.606 [DEBUG] [Thread-136046] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T22:48:33.606 [INFO] [Thread-136046] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T22:48:33.609 [DEBUG] [Thread-136046] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:48:33.609 [DEBUG] [Thread-136046] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T22:48:33.609 [DEBUG] [Thread-136046] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:48:33.609 [DEBUG] [Thread-136046] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:48:33.609 [DEBUG] [Thread-136046] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:48:33.609 [DEBUG] [Thread-136046] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:48:33.609 [DEBUG] [Thread-136046] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:48:33.609 [DEBUG] [Thread-136046] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:48:33.609 [DEBUG] [Thread-136046] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:48:33.609 [DEBUG] [Thread-136046] [transport.py] [_log()] client lang: <none>
2025-12-31T22:48:33.609 [DEBUG] [Thread-136046] [transport.py] [_log()] server lang: <none>
2025-12-31T22:48:33.609 [DEBUG] [Thread-136046] [transport.py] [_log()] kex follows: False
2025-12-31T22:48:33.609 [DEBUG] [Thread-136046] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:48:33.609 [DEBUG] [Thread-136046] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:48:33.609 [DEBUG] [Thread-136046] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:48:33.609 [DEBUG] [Thread-136046] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:48:33.609 [DEBUG] [Thread-136046] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:48:33.609 [DEBUG] [Thread-136046] [transport.py] [_log()] Compression: none
2025-12-31T22:48:33.609 [DEBUG] [Thread-136046] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:48:33.625 [DEBUG] [Thread-136046] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:48:33.625 [DEBUG] [Thread-136046] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:48:33.626 [DEBUG] [Thread-136046] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T22:48:33.626 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T22:48:33.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:48:33.628 [DEBUG] [Thread-136046] [transport.py] [_log()] userauth is OK
2025-12-31T22:48:33.628 [DEBUG] [Thread-136046] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:48:33.628 [DEBUG] [Thread-136046] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:48:33.628 [DEBUG] [Thread-136046] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T22:48:33.628 [DEBUG] [Thread-136046] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:48:33.653 [INFO] [Thread-136046] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:48:33.653 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:48:34.449 [DEBUG] [Thread-136046] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:48:34.449 [DEBUG] [Thread-136046] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:48:34.449 [DEBUG] [Thread-136046] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T22:48:34.490 [DEBUG] [Thread-136046] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:48:34.490 [DEBUG] [Thread-136046] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:48:34.493 [DEBUG] [Thread-136046] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:48:34.503 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:48:34.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T22:48:34.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T22:48:34.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T22:48:34.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:48:34.513 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T22:48:34.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:48:34.513 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:48:34.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T22:48:34.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.866803 -999.00  +15.80  13.35     75  +11.40 1 2 1 1 1     0    0 4.14 -11.04 ...s. 15.8 13.3 197.0 18.7 17.1 -12.6 16.9 -13.9 16.8 -12.9 17.1 -12.3
2025-12-31T22:48:34.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T22:48:34.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T22:48:34.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.866803
2025-12-31T22:48:34.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T22:48:34.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T22:48:34.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T22:48:34.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T22:48:34.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T22:48:34.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T22:48:29', tmtdew=5.05, humidity=72.08, cloud=0.0, wind=18.35, temperature=15.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T22:22:50', seeing=1.62, atlas_timestamp='2025-12-31T20:48:11.779', atlas_cloud=2, atlas_rain=1, zp_data=[0.2602499999999992, 0.44475000000000087, 0.7302500000000007, 0.22100000000000009, 0.665, 0.8302500000000013, 0.5669999999999993, 0.4302500000000009, 0.39949999999999974, 0.4095000000000013, 0.8602499999999988, 0.41999999999999993, 0.3490000000000002, 0.4262499999999996, 0.5399999999999991, 0.019000000000000128, 0.8522499999999997, 0.4294999999999991, 0.9249999999999989, 0.5342499999999992, 0.34750000000000014, 0.24074999999999847, -0.13574999999999982, -0.4472499999999986, 0.6789999999999994, nan, 1.1087499999999997, -0.8900000000000006, 0.2450000000000001, -0.4939999999999998, -1.2979999999999983, -1.4959999999999987, -0.4202500000000011], zp_timestamp='2025-12-31T20:15:00')
2025-12-31T22:48:34.516 [DEBUG] [Thread-136046] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:48:34.597 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T22:48:34.608 [DEBUG] [Thread-136049] [transport.py] [_log()] starting thread (client mode): 0xb9578490
2025-12-31T22:48:34.608 [DEBUG] [Thread-136049] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:48:34.628 [DEBUG] [Thread-136049] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T22:48:34.628 [INFO] [Thread-136049] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T22:48:34.636 [DEBUG] [Thread-136049] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:48:34.636 [DEBUG] [Thread-136049] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T22:48:34.636 [DEBUG] [Thread-136049] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:48:34.636 [DEBUG] [Thread-136049] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:48:34.636 [DEBUG] [Thread-136049] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:48:34.636 [DEBUG] [Thread-136049] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:48:34.636 [DEBUG] [Thread-136049] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:48:34.636 [DEBUG] [Thread-136049] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:48:34.636 [DEBUG] [Thread-136049] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:48:34.637 [DEBUG] [Thread-136049] [transport.py] [_log()] client lang: <none>
2025-12-31T22:48:34.637 [DEBUG] [Thread-136049] [transport.py] [_log()] server lang: <none>
2025-12-31T22:48:34.637 [DEBUG] [Thread-136049] [transport.py] [_log()] kex follows: False
2025-12-31T22:48:34.637 [DEBUG] [Thread-136049] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:48:34.637 [DEBUG] [Thread-136049] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:48:34.637 [DEBUG] [Thread-136049] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:48:34.637 [DEBUG] [Thread-136049] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:48:34.637 [DEBUG] [Thread-136049] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:48:34.637 [DEBUG] [Thread-136049] [transport.py] [_log()] Compression: none
2025-12-31T22:48:34.637 [DEBUG] [Thread-136049] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:48:34.695 [DEBUG] [Thread-136049] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:48:34.696 [DEBUG] [Thread-136049] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:48:34.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T22:48:34.697 [DEBUG] [Thread-136049] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T22:48:34.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:48:34.751 [DEBUG] [Thread-136049] [transport.py] [_log()] userauth is OK
2025-12-31T22:48:34.751 [DEBUG] [Thread-136049] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:48:34.752 [DEBUG] [Thread-136049] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:48:34.752 [DEBUG] [Thread-136049] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T22:48:34.752 [DEBUG] [Thread-136049] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:48:34.770 [INFO] [Thread-136049] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:48:34.770 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T22:48:34.771 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:48:35.593 [DEBUG] [Thread-136049] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:48:35.593 [DEBUG] [Thread-136049] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:48:35.641 [DEBUG] [Thread-136049] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:48:35.641 [DEBUG] [Thread-136049] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:48:35.650 [DEBUG] [Thread-136049] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:48:35.658 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:48:35.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T22:48:35.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T22:48:35.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:48:35.677 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:48:35.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:48:35.685 [DEBUG] [Thread-136049] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:48:37.710 [DEBUG] [Thread-136051 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:48:49.372 [DEBUG] [Thread-136052 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:48:52.758 [DEBUG] [Thread-136053 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:49:05.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T22:49:05.707 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T22:49:05.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T22:49:06.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 22, 49, 1), 4.98, 72.21, 0.0, 18.21, 15.69, 0, 0, 0, 2, 0, 0),)
2025-12-31T22:49:06.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 22:49:01
2025-12-31T22:49:06.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T22:49:06.699 [DEBUG] [Thread-136054] [transport.py] [_log()] starting thread (client mode): 0xb957aaa0
2025-12-31T22:49:06.699 [DEBUG] [Thread-136054] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:49:06.716 [DEBUG] [Thread-136054] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T22:49:06.716 [INFO] [Thread-136054] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T22:49:06.719 [DEBUG] [Thread-136054] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:49:06.720 [DEBUG] [Thread-136054] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T22:49:06.720 [DEBUG] [Thread-136054] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:49:06.720 [DEBUG] [Thread-136054] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:49:06.720 [DEBUG] [Thread-136054] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:49:06.720 [DEBUG] [Thread-136054] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:49:06.720 [DEBUG] [Thread-136054] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:49:06.720 [DEBUG] [Thread-136054] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:49:06.720 [DEBUG] [Thread-136054] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:49:06.720 [DEBUG] [Thread-136054] [transport.py] [_log()] client lang: <none>
2025-12-31T22:49:06.720 [DEBUG] [Thread-136054] [transport.py] [_log()] server lang: <none>
2025-12-31T22:49:06.720 [DEBUG] [Thread-136054] [transport.py] [_log()] kex follows: False
2025-12-31T22:49:06.720 [DEBUG] [Thread-136054] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:49:06.720 [DEBUG] [Thread-136054] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:49:06.720 [DEBUG] [Thread-136054] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:49:06.720 [DEBUG] [Thread-136054] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:49:06.720 [DEBUG] [Thread-136054] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:49:06.721 [DEBUG] [Thread-136054] [transport.py] [_log()] Compression: none
2025-12-31T22:49:06.721 [DEBUG] [Thread-136054] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:49:06.738 [DEBUG] [Thread-136054] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:49:06.739 [DEBUG] [Thread-136054] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:49:06.740 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T22:49:06.740 [DEBUG] [Thread-136054] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T22:49:06.741 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:49:06.742 [DEBUG] [Thread-136054] [transport.py] [_log()] userauth is OK
2025-12-31T22:49:06.742 [DEBUG] [Thread-136054] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:49:06.742 [DEBUG] [Thread-136054] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:49:06.742 [DEBUG] [Thread-136054] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T22:49:06.742 [DEBUG] [Thread-136054] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:49:06.757 [INFO] [Thread-136054] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:49:06.758 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:49:07.416 [DEBUG] [Thread-136054] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:49:07.416 [DEBUG] [Thread-136054] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:49:07.417 [DEBUG] [Thread-136054] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T22:49:07.457 [DEBUG] [Thread-136054] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:49:07.457 [DEBUG] [Thread-136054] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:49:07.461 [DEBUG] [Thread-136054] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:49:07.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:49:07.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T22:49:07.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T22:49:07.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T22:49:07.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:49:07.485 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T22:49:07.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:49:07.485 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:49:07.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T22:49:07.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.867150 -999.00  +15.80  10.94     75  +11.40 1 2 1 1 1     0    0 4.11 -10.04 ..... 6.8 10.9 209.0 15.9 17.1 -12.9 16.9 -13.6 16.7 -13.3 17.1 -12.6
2025-12-31T22:49:07.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T22:49:07.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T22:49:07.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.867150
2025-12-31T22:49:07.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T22:49:07.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T22:49:07.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T22:49:07.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T22:49:07.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T22:49:07.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T22:49:01', tmtdew=4.98, humidity=72.21, cloud=0.0, wind=18.21, temperature=15.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T22:22:50', seeing=1.62, atlas_timestamp='2025-12-31T20:48:41.760', atlas_cloud=2, atlas_rain=1, zp_data=[0.2602499999999992, 0.44475000000000087, 0.7302500000000007, 0.22100000000000009, 0.665, 0.8302500000000013, 0.5669999999999993, 0.4302500000000009, 0.39949999999999974, 0.4095000000000013, 0.8602499999999988, 0.41999999999999993, 0.3490000000000002, 0.4262499999999996, 0.5399999999999991, 0.019000000000000128, 0.8522499999999997, 0.4294999999999991, 0.9249999999999989, 0.5342499999999992, 0.34750000000000014, 0.24074999999999847, -0.13574999999999982, -0.4472499999999986, 0.6789999999999994, nan, 1.1087499999999997, -0.8900000000000006, 0.2450000000000001, -0.4939999999999998, -1.2979999999999983, -1.4959999999999987, -0.4202500000000011], zp_timestamp='2025-12-31T20:15:00')
2025-12-31T22:49:07.488 [DEBUG] [Thread-136054] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:49:07.571 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T22:49:07.583 [DEBUG] [Thread-136057] [transport.py] [_log()] starting thread (client mode): 0xb17443a0
2025-12-31T22:49:07.583 [DEBUG] [Thread-136057] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:49:07.597 [DEBUG] [Thread-136057] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T22:49:07.597 [INFO] [Thread-136057] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T22:49:07.605 [DEBUG] [Thread-136057] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:49:07.605 [DEBUG] [Thread-136057] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T22:49:07.605 [DEBUG] [Thread-136057] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:49:07.606 [DEBUG] [Thread-136057] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:49:07.606 [DEBUG] [Thread-136057] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:49:07.606 [DEBUG] [Thread-136057] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:49:07.606 [DEBUG] [Thread-136057] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:49:07.606 [DEBUG] [Thread-136057] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:49:07.606 [DEBUG] [Thread-136057] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:49:07.606 [DEBUG] [Thread-136057] [transport.py] [_log()] client lang: <none>
2025-12-31T22:49:07.606 [DEBUG] [Thread-136057] [transport.py] [_log()] server lang: <none>
2025-12-31T22:49:07.606 [DEBUG] [Thread-136057] [transport.py] [_log()] kex follows: False
2025-12-31T22:49:07.607 [DEBUG] [Thread-136057] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:49:07.607 [DEBUG] [Thread-136057] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:49:07.607 [DEBUG] [Thread-136057] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:49:07.607 [DEBUG] [Thread-136057] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:49:07.607 [DEBUG] [Thread-136057] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:49:07.607 [DEBUG] [Thread-136057] [transport.py] [_log()] Compression: none
2025-12-31T22:49:07.607 [DEBUG] [Thread-136057] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:49:07.668 [DEBUG] [Thread-136057] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:49:07.668 [DEBUG] [Thread-136057] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:49:07.669 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T22:49:07.670 [DEBUG] [Thread-136057] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T22:49:07.671 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:49:07.727 [DEBUG] [Thread-136057] [transport.py] [_log()] userauth is OK
2025-12-31T22:49:07.728 [DEBUG] [Thread-136057] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:49:07.728 [DEBUG] [Thread-136057] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:49:07.728 [DEBUG] [Thread-136057] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T22:49:07.728 [DEBUG] [Thread-136057] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:49:07.749 [INFO] [Thread-136057] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:49:07.750 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T22:49:07.750 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:49:07.790 [DEBUG] [Thread-136059 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:49:08.588 [DEBUG] [Thread-136057] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:49:08.588 [DEBUG] [Thread-136057] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:49:08.639 [DEBUG] [Thread-136057] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:49:08.639 [DEBUG] [Thread-136057] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:49:08.649 [DEBUG] [Thread-136057] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:49:08.658 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:49:08.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T22:49:08.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T22:49:08.676 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:49:08.677 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:49:08.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:49:08.686 [DEBUG] [Thread-136057] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:49:18.228 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:49:18.229 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:49:22.848 [DEBUG] [Thread-136060 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:49:37.881 [DEBUG] [Thread-136061 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:49:38.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T22:49:38.708 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T22:49:38.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T22:49:39.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 22, 49, 33), 4.96, 72.29, 0.0, 17.19, 15.69, 0, 0, 0, 2, 0, 0),)
2025-12-31T22:49:39.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 22:49:33
2025-12-31T22:49:39.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T22:49:39.703 [DEBUG] [Thread-136062] [transport.py] [_log()] starting thread (client mode): 0xb17466e0
2025-12-31T22:49:39.703 [DEBUG] [Thread-136062] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:49:39.724 [DEBUG] [Thread-136062] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T22:49:39.724 [INFO] [Thread-136062] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T22:49:39.725 [DEBUG] [Thread-136062] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:49:39.725 [DEBUG] [Thread-136062] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T22:49:39.725 [DEBUG] [Thread-136062] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:49:39.725 [DEBUG] [Thread-136062] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:49:39.725 [DEBUG] [Thread-136062] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:49:39.725 [DEBUG] [Thread-136062] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:49:39.725 [DEBUG] [Thread-136062] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:49:39.725 [DEBUG] [Thread-136062] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:49:39.725 [DEBUG] [Thread-136062] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:49:39.725 [DEBUG] [Thread-136062] [transport.py] [_log()] client lang: <none>
2025-12-31T22:49:39.725 [DEBUG] [Thread-136062] [transport.py] [_log()] server lang: <none>
2025-12-31T22:49:39.725 [DEBUG] [Thread-136062] [transport.py] [_log()] kex follows: False
2025-12-31T22:49:39.725 [DEBUG] [Thread-136062] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:49:39.725 [DEBUG] [Thread-136062] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:49:39.725 [DEBUG] [Thread-136062] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:49:39.725 [DEBUG] [Thread-136062] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:49:39.725 [DEBUG] [Thread-136062] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:49:39.725 [DEBUG] [Thread-136062] [transport.py] [_log()] Compression: none
2025-12-31T22:49:39.726 [DEBUG] [Thread-136062] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:49:39.737 [DEBUG] [Thread-136062] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:49:39.738 [DEBUG] [Thread-136062] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:49:39.738 [DEBUG] [Thread-136062] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T22:49:39.738 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T22:49:39.739 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:49:39.740 [DEBUG] [Thread-136062] [transport.py] [_log()] userauth is OK
2025-12-31T22:49:39.740 [DEBUG] [Thread-136062] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:49:39.740 [DEBUG] [Thread-136062] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:49:39.740 [DEBUG] [Thread-136062] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T22:49:39.740 [DEBUG] [Thread-136062] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:49:39.764 [INFO] [Thread-136062] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:49:39.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:49:40.348 [DEBUG] [Thread-136062] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:49:40.348 [DEBUG] [Thread-136062] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:49:40.349 [DEBUG] [Thread-136062] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T22:49:40.389 [DEBUG] [Thread-136062] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:49:40.389 [DEBUG] [Thread-136062] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:49:40.393 [DEBUG] [Thread-136062] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:49:40.404 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:49:40.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T22:49:40.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T22:49:40.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T22:49:40.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:49:40.414 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T22:49:40.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:49:40.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:49:40.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T22:49:40.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.867497 -999.00  +15.80   7.57     75  +11.40 1 2 1 1 1     0    0 4.27 -9.65 ..... 9.3 7.6 206.7 17.3 17.1 -13.2 16.9 -14.0 16.7 -13.6 17.1 -12.9
2025-12-31T22:49:40.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T22:49:40.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T22:49:40.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.867497
2025-12-31T22:49:40.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T22:49:40.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T22:49:40.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T22:49:40.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T22:49:40.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T22:49:40.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T22:49:33', tmtdew=4.96, humidity=72.29, cloud=0.0, wind=17.19, temperature=15.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T22:22:50', seeing=1.62, atlas_timestamp='2025-12-31T20:49:11.741', atlas_cloud=2, atlas_rain=1, zp_data=[0.2602499999999992, 0.44475000000000087, 0.7302500000000007, 0.22100000000000009, 0.665, 0.8302500000000013, 0.5669999999999993, 0.4302500000000009, 0.39949999999999974, 0.4095000000000013, 0.8602499999999988, 0.41999999999999993, 0.3490000000000002, 0.4262499999999996, 0.5399999999999991, 0.019000000000000128, 0.8522499999999997, 0.4294999999999991, 0.9249999999999989, 0.5342499999999992, 0.34750000000000014, 0.24074999999999847, -0.13574999999999982, -0.4472499999999986, 0.6789999999999994, nan, 1.1087499999999997, -0.8900000000000006, 0.2450000000000001, -0.4939999999999998, -1.2979999999999983, -1.4959999999999987, -0.4202500000000011], zp_timestamp='2025-12-31T20:15:00')
2025-12-31T22:49:40.417 [DEBUG] [Thread-136062] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:49: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-12-31T22:49:40.511 [DEBUG] [Thread-136065] [transport.py] [_log()] starting thread (client mode): 0xb17456f0
2025-12-31T22:49:40.511 [DEBUG] [Thread-136065] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:49:40.527 [DEBUG] [Thread-136065] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T22:49:40.527 [INFO] [Thread-136065] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T22:49:40.535 [DEBUG] [Thread-136065] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:49:40.535 [DEBUG] [Thread-136065] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T22:49:40.535 [DEBUG] [Thread-136065] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:49:40.535 [DEBUG] [Thread-136065] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:49:40.535 [DEBUG] [Thread-136065] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:49:40.536 [DEBUG] [Thread-136065] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:49:40.536 [DEBUG] [Thread-136065] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:49:40.536 [DEBUG] [Thread-136065] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:49:40.536 [DEBUG] [Thread-136065] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:49:40.536 [DEBUG] [Thread-136065] [transport.py] [_log()] client lang: <none>
2025-12-31T22:49:40.536 [DEBUG] [Thread-136065] [transport.py] [_log()] server lang: <none>
2025-12-31T22:49:40.536 [DEBUG] [Thread-136065] [transport.py] [_log()] kex follows: False
2025-12-31T22:49:40.536 [DEBUG] [Thread-136065] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:49:40.536 [DEBUG] [Thread-136065] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:49:40.536 [DEBUG] [Thread-136065] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:49:40.536 [DEBUG] [Thread-136065] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:49:40.536 [DEBUG] [Thread-136065] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:49:40.536 [DEBUG] [Thread-136065] [transport.py] [_log()] Compression: none
2025-12-31T22:49:40.536 [DEBUG] [Thread-136065] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:49:40.596 [DEBUG] [Thread-136065] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:49:40.596 [DEBUG] [Thread-136065] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:49:40.597 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T22:49:40.598 [DEBUG] [Thread-136065] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T22:49:40.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:49:40.655 [DEBUG] [Thread-136065] [transport.py] [_log()] userauth is OK
2025-12-31T22:49:40.656 [DEBUG] [Thread-136065] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:49:40.656 [DEBUG] [Thread-136065] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:49:40.656 [DEBUG] [Thread-136065] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T22:49:40.656 [DEBUG] [Thread-136065] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:49:40.676 [INFO] [Thread-136065] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:49:40.677 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T22:49:40.677 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:49:41.486 [DEBUG] [Thread-136065] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:49:41.487 [DEBUG] [Thread-136065] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:49:41.538 [DEBUG] [Thread-136065] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:49:41.538 [DEBUG] [Thread-136065] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:49:41.548 [DEBUG] [Thread-136065] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:49:41.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:49:41.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T22:49: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') -> 00000000
2025-12-31T22:49:41.583 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:49:41.583 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:49:41.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:49:41.594 [DEBUG] [Thread-136065] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:49:49.437 [DEBUG] [Thread-136067 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:49:52.916 [DEBUG] [Thread-136068 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:50:07.959 [DEBUG] [Thread-136069 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:50:11.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T22:50:11.597 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T22:50:11.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T22:50:12.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 22, 50, 5), 4.95, 72.33, 0.0, 17.47, 15.66, 0, 0, 0, 2, 0, 0),)
2025-12-31T22:50:12.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 22:50:05
2025-12-31T22:50:12.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T22:50:12.580 [DEBUG] [Thread-136070] [transport.py] [_log()] starting thread (client mode): 0xb17440d0
2025-12-31T22:50:12.580 [DEBUG] [Thread-136070] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:50:12.601 [DEBUG] [Thread-136070] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T22:50:12.601 [INFO] [Thread-136070] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T22:50:12.604 [DEBUG] [Thread-136070] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:50:12.604 [DEBUG] [Thread-136070] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T22:50:12.605 [DEBUG] [Thread-136070] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:50:12.605 [DEBUG] [Thread-136070] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:50:12.605 [DEBUG] [Thread-136070] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:50:12.605 [DEBUG] [Thread-136070] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:50:12.605 [DEBUG] [Thread-136070] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:50:12.605 [DEBUG] [Thread-136070] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:50:12.605 [DEBUG] [Thread-136070] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:50:12.605 [DEBUG] [Thread-136070] [transport.py] [_log()] client lang: <none>
2025-12-31T22:50:12.605 [DEBUG] [Thread-136070] [transport.py] [_log()] server lang: <none>
2025-12-31T22:50:12.605 [DEBUG] [Thread-136070] [transport.py] [_log()] kex follows: False
2025-12-31T22:50:12.605 [DEBUG] [Thread-136070] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:50:12.605 [DEBUG] [Thread-136070] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:50:12.605 [DEBUG] [Thread-136070] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:50:12.605 [DEBUG] [Thread-136070] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:50:12.605 [DEBUG] [Thread-136070] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:50:12.605 [DEBUG] [Thread-136070] [transport.py] [_log()] Compression: none
2025-12-31T22:50:12.605 [DEBUG] [Thread-136070] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:50:12.622 [DEBUG] [Thread-136070] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:50:12.622 [DEBUG] [Thread-136070] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:50:12.623 [DEBUG] [Thread-136070] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T22:50:12.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T22:50:12.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:50:12.624 [DEBUG] [Thread-136070] [transport.py] [_log()] userauth is OK
2025-12-31T22:50:12.624 [DEBUG] [Thread-136070] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:50:12.625 [DEBUG] [Thread-136070] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:50:12.625 [DEBUG] [Thread-136070] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T22:50:12.625 [DEBUG] [Thread-136070] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:50:12.642 [INFO] [Thread-136070] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:50:12.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:50:14.395 [DEBUG] [Thread-136070] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:50:14.395 [DEBUG] [Thread-136070] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:50:14.395 [DEBUG] [Thread-136070] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T22:50:14.436 [DEBUG] [Thread-136070] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:50:14.437 [DEBUG] [Thread-136070] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:50:14.439 [DEBUG] [Thread-136070] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:50:14.450 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:50:14.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T22:50:14.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T22:50:14.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T22:50:14.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:50:14.460 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T22:50:14.460 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:50:14.460 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:50:14.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T22:50:14.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.867844 -999.00  +15.90   9.73     74  +11.40 1 2 1 1 1     0    0 4.14 -9.07 ..... 13.7 9.7 186.2 14.4 17.1 -13.6 16.9 -14.3 16.7 -13.8 17.1 -13.1
2025-12-31T22:50:14.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T22:50:14.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T22:50:14.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.867844
2025-12-31T22:50:14.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T22:50:14.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T22:50:14.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T22:50:14.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T22:50:14.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T22:50:14.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T22:50:05', tmtdew=4.95, humidity=72.33, cloud=0.0, wind=17.47, temperature=15.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T22:22:50', seeing=1.62, atlas_timestamp='2025-12-31T20:49:41.722', atlas_cloud=2, atlas_rain=1, zp_data=[0.2602499999999992, 0.44475000000000087, 0.7302500000000007, 0.22100000000000009, 0.665, 0.8302500000000013, 0.5669999999999993, 0.4302500000000009, 0.39949999999999974, 0.4095000000000013, 0.8602499999999988, 0.41999999999999993, 0.3490000000000002, 0.4262499999999996, 0.5399999999999991, 0.019000000000000128, 0.8522499999999997, 0.4294999999999991, 0.9249999999999989, 0.5342499999999992, 0.34750000000000014, 0.24074999999999847, -0.13574999999999982, -0.4472499999999986, 0.6789999999999994, nan, 1.1087499999999997, -0.8900000000000006, 0.2450000000000001, -0.4939999999999998, -1.2979999999999983, -1.4959999999999987, -0.4202500000000011], zp_timestamp='2025-12-31T20:15:00')
2025-12-31T22:50:14.462 [DEBUG] [Thread-136070] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:50:14.544 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T22:50:14.556 [DEBUG] [Thread-136073] [transport.py] [_log()] starting thread (client mode): 0xb9579510
2025-12-31T22:50:14.556 [DEBUG] [Thread-136073] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:50:14.571 [DEBUG] [Thread-136073] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T22:50:14.571 [INFO] [Thread-136073] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T22:50:14.578 [DEBUG] [Thread-136073] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:50:14.578 [DEBUG] [Thread-136073] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T22:50:14.578 [DEBUG] [Thread-136073] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:50:14.578 [DEBUG] [Thread-136073] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:50:14.578 [DEBUG] [Thread-136073] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:50:14.578 [DEBUG] [Thread-136073] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:50:14.578 [DEBUG] [Thread-136073] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:50:14.578 [DEBUG] [Thread-136073] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:50:14.579 [DEBUG] [Thread-136073] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:50:14.579 [DEBUG] [Thread-136073] [transport.py] [_log()] client lang: <none>
2025-12-31T22:50:14.579 [DEBUG] [Thread-136073] [transport.py] [_log()] server lang: <none>
2025-12-31T22:50:14.579 [DEBUG] [Thread-136073] [transport.py] [_log()] kex follows: False
2025-12-31T22:50:14.579 [DEBUG] [Thread-136073] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:50:14.579 [DEBUG] [Thread-136073] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:50:14.579 [DEBUG] [Thread-136073] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:50:14.579 [DEBUG] [Thread-136073] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:50:14.579 [DEBUG] [Thread-136073] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:50:14.579 [DEBUG] [Thread-136073] [transport.py] [_log()] Compression: none
2025-12-31T22:50:14.579 [DEBUG] [Thread-136073] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:50:14.634 [DEBUG] [Thread-136073] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:50:14.634 [DEBUG] [Thread-136073] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:50:14.635 [DEBUG] [Thread-136073] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T22:50:14.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T22:50:14.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:50:14.690 [DEBUG] [Thread-136073] [transport.py] [_log()] userauth is OK
2025-12-31T22:50:14.691 [DEBUG] [Thread-136073] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:50:14.691 [DEBUG] [Thread-136073] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:50:14.691 [DEBUG] [Thread-136073] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T22:50:14.691 [DEBUG] [Thread-136073] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:50:14.713 [INFO] [Thread-136073] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:50:14.713 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T22:50:14.714 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:50:15.531 [DEBUG] [Thread-136073] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:50:15.531 [DEBUG] [Thread-136073] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:50:15.578 [DEBUG] [Thread-136073] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:50:15.579 [DEBUG] [Thread-136073] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:50:15.588 [DEBUG] [Thread-136073] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:50:15.596 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:50:15.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T22:50:15.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T22:50:15.613 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:50:15.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:50:15.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:50:15.621 [DEBUG] [Thread-136073] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:50:18.432 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:50:18.433 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:50:22.996 [DEBUG] [Thread-136075 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:50:38.042 [DEBUG] [Thread-136076 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:50:45.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T22:50:45.643 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T22:50:45.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T22:50:46.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 22, 50, 37), 4.93, 72.41, 0.0, 16.57, 15.66, 0, 0, 0, 2, 0, 0),)
2025-12-31T22:50:46.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 22:50:37
2025-12-31T22:50:46.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T22:50:46.636 [DEBUG] [Thread-136077] [transport.py] [_log()] starting thread (client mode): 0xb1745690
2025-12-31T22:50:46.636 [DEBUG] [Thread-136077] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:50:46.656 [DEBUG] [Thread-136077] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T22:50:46.656 [INFO] [Thread-136077] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T22:50:46.659 [DEBUG] [Thread-136077] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:50:46.659 [DEBUG] [Thread-136077] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T22:50:46.659 [DEBUG] [Thread-136077] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:50:46.659 [DEBUG] [Thread-136077] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:50:46.659 [DEBUG] [Thread-136077] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:50:46.659 [DEBUG] [Thread-136077] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:50:46.659 [DEBUG] [Thread-136077] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:50:46.659 [DEBUG] [Thread-136077] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:50:46.659 [DEBUG] [Thread-136077] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:50:46.659 [DEBUG] [Thread-136077] [transport.py] [_log()] client lang: <none>
2025-12-31T22:50:46.659 [DEBUG] [Thread-136077] [transport.py] [_log()] server lang: <none>
2025-12-31T22:50:46.660 [DEBUG] [Thread-136077] [transport.py] [_log()] kex follows: False
2025-12-31T22:50:46.660 [DEBUG] [Thread-136077] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:50:46.660 [DEBUG] [Thread-136077] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:50:46.660 [DEBUG] [Thread-136077] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:50:46.660 [DEBUG] [Thread-136077] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:50:46.660 [DEBUG] [Thread-136077] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:50:46.660 [DEBUG] [Thread-136077] [transport.py] [_log()] Compression: none
2025-12-31T22:50:46.660 [DEBUG] [Thread-136077] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:50:46.677 [DEBUG] [Thread-136077] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:50:46.677 [DEBUG] [Thread-136077] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:50:46.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T22:50:46.678 [DEBUG] [Thread-136077] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T22:50:46.679 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:50:46.681 [DEBUG] [Thread-136077] [transport.py] [_log()] userauth is OK
2025-12-31T22:50:46.681 [DEBUG] [Thread-136077] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:50:46.681 [DEBUG] [Thread-136077] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:50:46.681 [DEBUG] [Thread-136077] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T22:50:46.681 [DEBUG] [Thread-136077] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:50:46.705 [INFO] [Thread-136077] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:50:46.706 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:50:47.332 [DEBUG] [Thread-136077] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:50:47.332 [DEBUG] [Thread-136077] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:50:47.333 [DEBUG] [Thread-136077] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T22:50:47.373 [DEBUG] [Thread-136077] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:50:47.373 [DEBUG] [Thread-136077] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:50:47.377 [DEBUG] [Thread-136077] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:50:47.390 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:50:47.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T22:50:47.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T22:50:47.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T22:50:47.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:50:47.402 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T22:50:47.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:50:47.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:50:47.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T22:50:47.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.868191 -999.00  +15.90  12.23     75  +11.50 1 2 1 1 1     0    0 4.17 -9.57 ...s. 10.6 12.2 198.4 15.6 17.1 -13.8 16.9 -14.9 16.7 -14.3 17.1 -13.3
2025-12-31T22:50:47.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T22:50:47.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T22:50:47.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.868191
2025-12-31T22:50:47.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T22:50:47.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T22:50:47.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T22:50:47.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T22:50:47.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T22:50:47.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T22:50:37', tmtdew=4.93, humidity=72.41, cloud=0.0, wind=16.57, temperature=15.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T22:22:50', seeing=1.62, atlas_timestamp='2025-12-31T20:50:11.702', atlas_cloud=2, atlas_rain=1, zp_data=[0.2602499999999992, 0.44475000000000087, 0.7302500000000007, 0.22100000000000009, 0.665, 0.8302500000000013, 0.5669999999999993, 0.4302500000000009, 0.39949999999999974, 0.4095000000000013, 0.8602499999999988, 0.41999999999999993, 0.3490000000000002, 0.4262499999999996, 0.5399999999999991, 0.019000000000000128, 0.8522499999999997, 0.4294999999999991, 0.9249999999999989, 0.5342499999999992, 0.34750000000000014, 0.24074999999999847, -0.13574999999999982, -0.4472499999999986, 0.6789999999999994, nan, 1.1087499999999997, -0.8900000000000006, 0.2450000000000001, -0.4939999999999998, -1.2979999999999983, -1.4959999999999987, -0.4202500000000011], zp_timestamp='2025-12-31T20:15:00')
2025-12-31T22:50:47.405 [DEBUG] [Thread-136077] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:50:47.489 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T22:50:47.500 [DEBUG] [Thread-136080] [transport.py] [_log()] starting thread (client mode): 0xb1745d50
2025-12-31T22:50:47.500 [DEBUG] [Thread-136080] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:50:47.516 [DEBUG] [Thread-136080] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T22:50:47.516 [INFO] [Thread-136080] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T22:50:47.523 [DEBUG] [Thread-136080] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:50:47.523 [DEBUG] [Thread-136080] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T22:50:47.524 [DEBUG] [Thread-136080] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:50:47.524 [DEBUG] [Thread-136080] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:50:47.524 [DEBUG] [Thread-136080] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:50:47.524 [DEBUG] [Thread-136080] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:50:47.524 [DEBUG] [Thread-136080] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:50:47.524 [DEBUG] [Thread-136080] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:50:47.524 [DEBUG] [Thread-136080] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:50:47.524 [DEBUG] [Thread-136080] [transport.py] [_log()] client lang: <none>
2025-12-31T22:50:47.524 [DEBUG] [Thread-136080] [transport.py] [_log()] server lang: <none>
2025-12-31T22:50:47.524 [DEBUG] [Thread-136080] [transport.py] [_log()] kex follows: False
2025-12-31T22:50:47.524 [DEBUG] [Thread-136080] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:50:47.524 [DEBUG] [Thread-136080] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:50:47.524 [DEBUG] [Thread-136080] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:50:47.524 [DEBUG] [Thread-136080] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:50:47.524 [DEBUG] [Thread-136080] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:50:47.524 [DEBUG] [Thread-136080] [transport.py] [_log()] Compression: none
2025-12-31T22:50:47.524 [DEBUG] [Thread-136080] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:50:47.589 [DEBUG] [Thread-136080] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:50:47.590 [DEBUG] [Thread-136080] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:50:47.590 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T22:50:47.591 [DEBUG] [Thread-136080] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T22:50:47.592 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:50:47.647 [DEBUG] [Thread-136080] [transport.py] [_log()] userauth is OK
2025-12-31T22:50:47.647 [DEBUG] [Thread-136080] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:50:47.648 [DEBUG] [Thread-136080] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:50:47.648 [DEBUG] [Thread-136080] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T22:50:47.648 [DEBUG] [Thread-136080] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:50:47.666 [INFO] [Thread-136080] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:50:47.667 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T22:50:47.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:50:48.540 [DEBUG] [Thread-136080] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:50:48.540 [DEBUG] [Thread-136080] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:50:48.588 [DEBUG] [Thread-136080] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:50:48.589 [DEBUG] [Thread-136080] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:50:48.598 [DEBUG] [Thread-136080] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:50:48.607 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:50:48.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-12-31T22:50:48.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T22:50:48.625 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:50:48.625 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:50:48.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:50:48.634 [DEBUG] [Thread-136080] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:50:49.499 [DEBUG] [Thread-136082 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:50:53.074 [DEBUG] [Thread-136083 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:51:08.126 [DEBUG] [Thread-136084 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:51:18.638 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:51:18.639 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:51:18.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T22:51:18.656 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T22:51:18.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T22:51:19.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 22, 51, 10), 4.92, 72.48, 0.0, 17.73, 15.64, 0, 0, 0, 2, 0, 0),)
2025-12-31T22:51:19.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 22:51:10
2025-12-31T22:51:19.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T22:51:19.697 [DEBUG] [Thread-136085] [transport.py] [_log()] starting thread (client mode): 0xb17470d0
2025-12-31T22:51:19.697 [DEBUG] [Thread-136085] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:51:19.712 [DEBUG] [Thread-136085] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T22:51:19.712 [INFO] [Thread-136085] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T22:51:19.715 [DEBUG] [Thread-136085] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:51:19.715 [DEBUG] [Thread-136085] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T22:51:19.715 [DEBUG] [Thread-136085] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:51:19.715 [DEBUG] [Thread-136085] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:51:19.715 [DEBUG] [Thread-136085] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:51:19.715 [DEBUG] [Thread-136085] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:51:19.715 [DEBUG] [Thread-136085] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:51:19.715 [DEBUG] [Thread-136085] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:51:19.715 [DEBUG] [Thread-136085] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:51:19.715 [DEBUG] [Thread-136085] [transport.py] [_log()] client lang: <none>
2025-12-31T22:51:19.715 [DEBUG] [Thread-136085] [transport.py] [_log()] server lang: <none>
2025-12-31T22:51:19.715 [DEBUG] [Thread-136085] [transport.py] [_log()] kex follows: False
2025-12-31T22:51:19.715 [DEBUG] [Thread-136085] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:51:19.715 [DEBUG] [Thread-136085] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:51:19.715 [DEBUG] [Thread-136085] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:51:19.715 [DEBUG] [Thread-136085] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:51:19.715 [DEBUG] [Thread-136085] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:51:19.715 [DEBUG] [Thread-136085] [transport.py] [_log()] Compression: none
2025-12-31T22:51:19.715 [DEBUG] [Thread-136085] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:51:19.731 [DEBUG] [Thread-136085] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:51:19.731 [DEBUG] [Thread-136085] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:51:19.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T22:51:19.731 [DEBUG] [Thread-136085] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T22:51:19.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:51:19.732 [DEBUG] [Thread-136085] [transport.py] [_log()] userauth is OK
2025-12-31T22:51:19.732 [DEBUG] [Thread-136085] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:51:19.732 [DEBUG] [Thread-136085] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:51:19.732 [DEBUG] [Thread-136085] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T22:51:19.732 [DEBUG] [Thread-136085] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:51:19.741 [INFO] [Thread-136085] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:51:19.741 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:51:20.380 [DEBUG] [Thread-136085] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:51:20.381 [DEBUG] [Thread-136085] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:51:20.381 [DEBUG] [Thread-136085] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T22:51:20.422 [DEBUG] [Thread-136085] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:51:20.422 [DEBUG] [Thread-136085] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:51:20.426 [DEBUG] [Thread-136085] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:51:20.438 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:51:20.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T22:51:20.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T22:51:20.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T22:51:20.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:51:20.449 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T22:51:20.449 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:51:20.450 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:51:20.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T22:51:20.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.868886 -999.00  +15.80  12.01     75  +11.50 1 2 1 1 1     0    0 4.09 -10.68 ...S. 13.4 12.0 210.7 17.3 17.0 -14.5 16.8 -15.4 16.7 -14.7 17.0 -13.9
2025-12-31T22:51:20.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T22:51:20.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T22:51:20.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.868886
2025-12-31T22:51:20.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T22:51:20.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T22:51:20.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T22:51:20.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T22:51:20.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T22:51:20.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T22:51:10', tmtdew=4.92, humidity=72.48, cloud=0.0, wind=17.73, temperature=15.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T22:22:50', seeing=1.62, atlas_timestamp='2025-12-31T20:51:11.750', atlas_cloud=2, atlas_rain=1, zp_data=[0.2602499999999992, 0.44475000000000087, 0.7302500000000007, 0.22100000000000009, 0.665, 0.8302500000000013, 0.5669999999999993, 0.4302500000000009, 0.39949999999999974, 0.4095000000000013, 0.8602499999999988, 0.41999999999999993, 0.3490000000000002, 0.4262499999999996, 0.5399999999999991, 0.019000000000000128, 0.8522499999999997, 0.4294999999999991, 0.9249999999999989, 0.5342499999999992, 0.34750000000000014, 0.24074999999999847, -0.13574999999999982, -0.4472499999999986, 0.6789999999999994, nan, 1.1087499999999997, -0.8900000000000006, 0.2450000000000001, -0.4939999999999998, -1.2979999999999983, -1.4959999999999987, -0.4202500000000011], zp_timestamp='2025-12-31T20:15:00')
2025-12-31T22:51:20.452 [DEBUG] [Thread-136085] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:51:20.536 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T22:51:20.547 [DEBUG] [Thread-136088] [transport.py] [_log()] starting thread (client mode): 0xb1746dd0
2025-12-31T22:51:20.547 [DEBUG] [Thread-136088] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:51:20.563 [DEBUG] [Thread-136088] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T22:51:20.563 [INFO] [Thread-136088] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T22:51:20.570 [DEBUG] [Thread-136088] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:51:20.570 [DEBUG] [Thread-136088] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T22:51:20.570 [DEBUG] [Thread-136088] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:51:20.571 [DEBUG] [Thread-136088] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:51:20.571 [DEBUG] [Thread-136088] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:51:20.571 [DEBUG] [Thread-136088] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:51:20.571 [DEBUG] [Thread-136088] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:51:20.571 [DEBUG] [Thread-136088] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:51:20.571 [DEBUG] [Thread-136088] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:51:20.571 [DEBUG] [Thread-136088] [transport.py] [_log()] client lang: <none>
2025-12-31T22:51:20.571 [DEBUG] [Thread-136088] [transport.py] [_log()] server lang: <none>
2025-12-31T22:51:20.571 [DEBUG] [Thread-136088] [transport.py] [_log()] kex follows: False
2025-12-31T22:51:20.571 [DEBUG] [Thread-136088] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:51:20.571 [DEBUG] [Thread-136088] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:51:20.571 [DEBUG] [Thread-136088] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:51:20.571 [DEBUG] [Thread-136088] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:51:20.572 [DEBUG] [Thread-136088] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:51:20.572 [DEBUG] [Thread-136088] [transport.py] [_log()] Compression: none
2025-12-31T22:51:20.572 [DEBUG] [Thread-136088] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:51:20.631 [DEBUG] [Thread-136088] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:51:20.631 [DEBUG] [Thread-136088] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:51:20.632 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T22:51:20.632 [DEBUG] [Thread-136088] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T22:51:20.633 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:51:20.693 [DEBUG] [Thread-136088] [transport.py] [_log()] userauth is OK
2025-12-31T22:51:20.693 [DEBUG] [Thread-136088] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:51:20.694 [DEBUG] [Thread-136088] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:51:20.694 [DEBUG] [Thread-136088] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T22:51:20.694 [DEBUG] [Thread-136088] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:51:20.713 [INFO] [Thread-136088] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:51:20.713 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T22:51:20.714 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:51:21.573 [DEBUG] [Thread-136088] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:51:21.573 [DEBUG] [Thread-136088] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:51:21.624 [DEBUG] [Thread-136088] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:51:21.624 [DEBUG] [Thread-136088] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:51:21.634 [DEBUG] [Thread-136088] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:51:21.643 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:51:21.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-12-31T22:51:21.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T22:51:21.662 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:51:21.662 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:51:21.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:51:21.671 [DEBUG] [Thread-136088] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:51:23.157 [DEBUG] [Thread-136090 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:51:38.207 [DEBUG] [Thread-136091 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:51:49.576 [DEBUG] [Thread-136092 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:51:51.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T22:51:51.673 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T22:51:51.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T22:51:52.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 22, 51, 42), 4.92, 72.49, 0.0, 17.68, 15.64, 0, 0, 0, 2, 0, 0),)
2025-12-31T22:51:52.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 22:51:42
2025-12-31T22:51:52.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T22:51:52.686 [DEBUG] [Thread-136093] [transport.py] [_log()] starting thread (client mode): 0xb17477f0
2025-12-31T22:51:52.686 [DEBUG] [Thread-136093] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:51:52.707 [DEBUG] [Thread-136093] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T22:51:52.707 [INFO] [Thread-136093] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T22:51:52.710 [DEBUG] [Thread-136093] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:51:52.711 [DEBUG] [Thread-136093] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T22:51:52.711 [DEBUG] [Thread-136093] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:51:52.711 [DEBUG] [Thread-136093] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:51:52.711 [DEBUG] [Thread-136093] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:51:52.711 [DEBUG] [Thread-136093] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:51:52.711 [DEBUG] [Thread-136093] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:51:52.711 [DEBUG] [Thread-136093] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:51:52.711 [DEBUG] [Thread-136093] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:51:52.711 [DEBUG] [Thread-136093] [transport.py] [_log()] client lang: <none>
2025-12-31T22:51:52.711 [DEBUG] [Thread-136093] [transport.py] [_log()] server lang: <none>
2025-12-31T22:51:52.711 [DEBUG] [Thread-136093] [transport.py] [_log()] kex follows: False
2025-12-31T22:51:52.711 [DEBUG] [Thread-136093] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:51:52.711 [DEBUG] [Thread-136093] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:51:52.711 [DEBUG] [Thread-136093] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:51:52.711 [DEBUG] [Thread-136093] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:51:52.711 [DEBUG] [Thread-136093] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:51:52.711 [DEBUG] [Thread-136093] [transport.py] [_log()] Compression: none
2025-12-31T22:51:52.711 [DEBUG] [Thread-136093] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:51:52.727 [DEBUG] [Thread-136093] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:51:52.727 [DEBUG] [Thread-136093] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:51:52.727 [DEBUG] [Thread-136093] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T22:51:52.727 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T22:51:52.727 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:51:52.728 [DEBUG] [Thread-136093] [transport.py] [_log()] userauth is OK
2025-12-31T22:51:52.728 [DEBUG] [Thread-136093] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:51:52.728 [DEBUG] [Thread-136093] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:51:52.728 [DEBUG] [Thread-136093] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T22:51:52.728 [DEBUG] [Thread-136093] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:51:52.743 [INFO] [Thread-136093] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:51:52.743 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:51:53.240 [DEBUG] [Thread-136095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:51:53.328 [DEBUG] [Thread-136093] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:51:53.328 [DEBUG] [Thread-136093] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:51:53.328 [DEBUG] [Thread-136093] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T22:51:53.370 [DEBUG] [Thread-136093] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:51:53.370 [DEBUG] [Thread-136093] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:51:53.372 [DEBUG] [Thread-136093] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:51:53.386 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:51:53.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T22:51:53.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T22:51:53.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T22:51:53.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:51:53.391 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T22:51:53.391 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:51:53.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:51:53.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T22:51:53.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.869233 -999.00  +15.70  13.93     76  +11.50 1 2 1 1 1     0    0 4.10 -11.40 ...S. 16.1 13.9 187.6 18.9 17.0 -14.8 16.8 -15.5 16.7 -14.8 17.0 -14.3
2025-12-31T22:51:53.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T22:51:53.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T22:51:53.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.869233
2025-12-31T22:51:53.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T22:51:53.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T22:51:53.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T22:51:53.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T22:51:53.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T22:51:53.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T22:51:42', tmtdew=4.92, humidity=72.49, cloud=0.0, wind=17.68, temperature=15.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T22:22:50', seeing=1.62, atlas_timestamp='2025-12-31T20:51:41.731', atlas_cloud=2, atlas_rain=1, zp_data=[0.2602499999999992, 0.44475000000000087, 0.7302500000000007, 0.22100000000000009, 0.665, 0.8302500000000013, 0.5669999999999993, 0.4302500000000009, 0.39949999999999974, 0.4095000000000013, 0.8602499999999988, 0.41999999999999993, 0.3490000000000002, 0.4262499999999996, 0.5399999999999991, 0.019000000000000128, 0.8522499999999997, 0.4294999999999991, 0.9249999999999989, 0.5342499999999992, 0.34750000000000014, 0.24074999999999847, -0.13574999999999982, -0.4472499999999986, 0.6789999999999994, nan, 1.1087499999999997, -0.8900000000000006, 0.2450000000000001, -0.4939999999999998, -1.2979999999999983, -1.4959999999999987, -0.4202500000000011], zp_timestamp='2025-12-31T20:15:00')
2025-12-31T22:51:53.392 [DEBUG] [Thread-136093] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:51:53.466 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T22:51:53.478 [DEBUG] [Thread-136097] [transport.py] [_log()] starting thread (client mode): 0xb1796a40
2025-12-31T22:51:53.478 [DEBUG] [Thread-136097] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:51:53.494 [DEBUG] [Thread-136097] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T22:51:53.494 [INFO] [Thread-136097] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T22:51:53.501 [DEBUG] [Thread-136097] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:51:53.501 [DEBUG] [Thread-136097] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T22:51:53.501 [DEBUG] [Thread-136097] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:51:53.501 [DEBUG] [Thread-136097] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:51:53.501 [DEBUG] [Thread-136097] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:51:53.501 [DEBUG] [Thread-136097] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:51:53.501 [DEBUG] [Thread-136097] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:51:53.501 [DEBUG] [Thread-136097] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:51:53.502 [DEBUG] [Thread-136097] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:51:53.502 [DEBUG] [Thread-136097] [transport.py] [_log()] client lang: <none>
2025-12-31T22:51:53.502 [DEBUG] [Thread-136097] [transport.py] [_log()] server lang: <none>
2025-12-31T22:51:53.502 [DEBUG] [Thread-136097] [transport.py] [_log()] kex follows: False
2025-12-31T22:51:53.502 [DEBUG] [Thread-136097] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:51:53.502 [DEBUG] [Thread-136097] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:51:53.502 [DEBUG] [Thread-136097] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:51:53.502 [DEBUG] [Thread-136097] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:51:53.502 [DEBUG] [Thread-136097] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:51:53.502 [DEBUG] [Thread-136097] [transport.py] [_log()] Compression: none
2025-12-31T22:51:53.502 [DEBUG] [Thread-136097] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:51:53.557 [DEBUG] [Thread-136097] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:51:53.557 [DEBUG] [Thread-136097] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:51:53.557 [DEBUG] [Thread-136097] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T22:51:53.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T22:51:53.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:51:53.614 [DEBUG] [Thread-136097] [transport.py] [_log()] userauth is OK
2025-12-31T22:51:53.614 [DEBUG] [Thread-136097] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:51:53.614 [DEBUG] [Thread-136097] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:51:53.614 [DEBUG] [Thread-136097] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T22:51:53.614 [DEBUG] [Thread-136097] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:51:53.628 [INFO] [Thread-136097] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:51:53.628 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T22:51:53.629 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:51:54.501 [DEBUG] [Thread-136097] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:51:54.501 [DEBUG] [Thread-136097] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:51:54.549 [DEBUG] [Thread-136097] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:51:54.549 [DEBUG] [Thread-136097] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:51:54.558 [DEBUG] [Thread-136097] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:51:54.565 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:51:54.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T22:51:54.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T22:51:54.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:51:54.581 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:51:54.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:51:54.589 [DEBUG] [Thread-136097] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:52:08.271 [DEBUG] [Thread-136099 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:52:18.840 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:52:18.841 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:52:23.320 [DEBUG] [Thread-136100 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:52:24.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T22:52:24.601 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T22:52: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-12-31T22:52:25.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 22, 52, 14), 4.89, 72.62, 0.0, 16.92, 15.66, 0, 0, 0, 2, 0, 0),)
2025-12-31T22:52:25.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 22:52:14
2025-12-31T22:52:25.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T22:52:25.608 [DEBUG] [Thread-136101] [transport.py] [_log()] starting thread (client mode): 0xb1795d80
2025-12-31T22:52:25.608 [DEBUG] [Thread-136101] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:52:25.626 [DEBUG] [Thread-136101] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T22:52:25.626 [INFO] [Thread-136101] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T22:52:25.627 [DEBUG] [Thread-136101] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:52:25.627 [DEBUG] [Thread-136101] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T22:52:25.627 [DEBUG] [Thread-136101] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:52:25.628 [DEBUG] [Thread-136101] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:52:25.628 [DEBUG] [Thread-136101] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:52:25.628 [DEBUG] [Thread-136101] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:52:25.628 [DEBUG] [Thread-136101] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:52:25.628 [DEBUG] [Thread-136101] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:52:25.628 [DEBUG] [Thread-136101] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:52:25.628 [DEBUG] [Thread-136101] [transport.py] [_log()] client lang: <none>
2025-12-31T22:52:25.628 [DEBUG] [Thread-136101] [transport.py] [_log()] server lang: <none>
2025-12-31T22:52:25.628 [DEBUG] [Thread-136101] [transport.py] [_log()] kex follows: False
2025-12-31T22:52:25.628 [DEBUG] [Thread-136101] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:52:25.628 [DEBUG] [Thread-136101] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:52:25.628 [DEBUG] [Thread-136101] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:52:25.628 [DEBUG] [Thread-136101] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:52:25.628 [DEBUG] [Thread-136101] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:52:25.628 [DEBUG] [Thread-136101] [transport.py] [_log()] Compression: none
2025-12-31T22:52:25.628 [DEBUG] [Thread-136101] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:52:25.638 [DEBUG] [Thread-136101] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:52:25.638 [DEBUG] [Thread-136101] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:52:25.638 [DEBUG] [Thread-136101] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T22:52:25.638 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T22:52:25.639 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:52:25.639 [DEBUG] [Thread-136101] [transport.py] [_log()] userauth is OK
2025-12-31T22:52:25.639 [DEBUG] [Thread-136101] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:52:25.639 [DEBUG] [Thread-136101] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:52:25.640 [DEBUG] [Thread-136101] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T22:52:25.640 [DEBUG] [Thread-136101] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:52:25.660 [INFO] [Thread-136101] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:52:25.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:52:26.280 [DEBUG] [Thread-136101] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:52:26.280 [DEBUG] [Thread-136101] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:52:26.281 [DEBUG] [Thread-136101] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T22:52:26.322 [DEBUG] [Thread-136101] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:52:26.322 [DEBUG] [Thread-136101] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:52:26.325 [DEBUG] [Thread-136101] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:52:26.334 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:52:26.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T22:52:26.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T22:52:26.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T22:52:26.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:52:26.344 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T22:52:26.344 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:52:26.344 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:52:26.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T22:52:26.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.869580 -999.00  +15.70  13.56     76  +11.50 1 2 1 1 1     0    0 3.99 -12.69 z.... 8.8 13.6 197.6 19.9 17.0 -14.7 16.8 -15.8 16.6 -14.8 17.0 -14.2
2025-12-31T22:52:26.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T22:52:26.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T22:52:26.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.869580
2025-12-31T22:52:26.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T22:52:26.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T22:52:26.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T22:52:26.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T22:52:26.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T22:52:26.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T22:52:14', tmtdew=4.89, humidity=72.62, cloud=0.0, wind=16.92, temperature=15.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T22:22:50', seeing=1.62, atlas_timestamp='2025-12-31T20:52:11.712', atlas_cloud=2, atlas_rain=1, zp_data=[0.2602499999999992, 0.44475000000000087, 0.7302500000000007, 0.22100000000000009, 0.665, 0.8302500000000013, 0.5669999999999993, 0.4302500000000009, 0.39949999999999974, 0.4095000000000013, 0.8602499999999988, 0.41999999999999993, 0.3490000000000002, 0.4262499999999996, 0.5399999999999991, 0.019000000000000128, 0.8522499999999997, 0.4294999999999991, 0.9249999999999989, 0.5342499999999992, 0.34750000000000014, 0.24074999999999847, -0.13574999999999982, -0.4472499999999986, 0.6789999999999994, nan, 1.1087499999999997, -0.8900000000000006, 0.2450000000000001, -0.4939999999999998, -1.2979999999999983, -1.4959999999999987, -0.4202500000000011], zp_timestamp='2025-12-31T20:15:00')
2025-12-31T22:52:26.347 [DEBUG] [Thread-136101] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:52:26.433 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T22:52:26.444 [DEBUG] [Thread-136104] [transport.py] [_log()] starting thread (client mode): 0xb1797010
2025-12-31T22:52:26.444 [DEBUG] [Thread-136104] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:52:26.459 [DEBUG] [Thread-136104] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T22:52:26.459 [INFO] [Thread-136104] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T22:52:26.466 [DEBUG] [Thread-136104] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:52:26.466 [DEBUG] [Thread-136104] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T22:52:26.467 [DEBUG] [Thread-136104] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:52:26.467 [DEBUG] [Thread-136104] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:52:26.467 [DEBUG] [Thread-136104] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:52:26.467 [DEBUG] [Thread-136104] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:52:26.467 [DEBUG] [Thread-136104] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:52:26.467 [DEBUG] [Thread-136104] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:52:26.467 [DEBUG] [Thread-136104] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:52:26.467 [DEBUG] [Thread-136104] [transport.py] [_log()] client lang: <none>
2025-12-31T22:52:26.467 [DEBUG] [Thread-136104] [transport.py] [_log()] server lang: <none>
2025-12-31T22:52:26.467 [DEBUG] [Thread-136104] [transport.py] [_log()] kex follows: False
2025-12-31T22:52:26.467 [DEBUG] [Thread-136104] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:52:26.467 [DEBUG] [Thread-136104] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:52:26.467 [DEBUG] [Thread-136104] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:52:26.467 [DEBUG] [Thread-136104] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:52:26.467 [DEBUG] [Thread-136104] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:52:26.467 [DEBUG] [Thread-136104] [transport.py] [_log()] Compression: none
2025-12-31T22:52:26.467 [DEBUG] [Thread-136104] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:52:26.527 [DEBUG] [Thread-136104] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:52:26.527 [DEBUG] [Thread-136104] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:52:26.528 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T22:52:26.528 [DEBUG] [Thread-136104] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T22:52:26.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:52:26.583 [DEBUG] [Thread-136104] [transport.py] [_log()] userauth is OK
2025-12-31T22:52:26.583 [DEBUG] [Thread-136104] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:52:26.583 [DEBUG] [Thread-136104] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:52:26.583 [DEBUG] [Thread-136104] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T22:52:26.583 [DEBUG] [Thread-136104] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:52:26.605 [INFO] [Thread-136104] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:52:26.606 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T22:52:26.606 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:52:27.445 [DEBUG] [Thread-136104] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:52:27.445 [DEBUG] [Thread-136104] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:52:27.493 [DEBUG] [Thread-136104] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:52:27.493 [DEBUG] [Thread-136104] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:52:27.502 [DEBUG] [Thread-136104] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:52:27.511 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:52:27.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-12-31T22:52:27.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T22:52:27.530 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:52:27.530 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:52:27.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:52:27.539 [DEBUG] [Thread-136104] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:52:38.353 [DEBUG] [Thread-136106 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:52:49.650 [DEBUG] [Thread-136107 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:52:53.405 [DEBUG] [Thread-136108 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:52:57.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T22:52:57.562 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T22:52:57.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T22:52:58.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 22, 52, 46), 4.83, 73.16, 0.0, 17.04, 15.56, 0, 0, 0, 2, 0, 0),)
2025-12-31T22:52:58.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 22:52:46
2025-12-31T22:52:58.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T22:52:58.550 [DEBUG] [Thread-136109] [transport.py] [_log()] starting thread (client mode): 0xb957b520
2025-12-31T22:52:58.550 [DEBUG] [Thread-136109] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:52:58.561 [DEBUG] [Thread-136109] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T22:52:58.561 [INFO] [Thread-136109] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T22:52:58.564 [DEBUG] [Thread-136109] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:52:58.564 [DEBUG] [Thread-136109] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T22:52:58.564 [DEBUG] [Thread-136109] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:52:58.564 [DEBUG] [Thread-136109] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:52:58.564 [DEBUG] [Thread-136109] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:52:58.564 [DEBUG] [Thread-136109] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:52:58.564 [DEBUG] [Thread-136109] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:52:58.564 [DEBUG] [Thread-136109] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:52:58.564 [DEBUG] [Thread-136109] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:52:58.564 [DEBUG] [Thread-136109] [transport.py] [_log()] client lang: <none>
2025-12-31T22:52:58.564 [DEBUG] [Thread-136109] [transport.py] [_log()] server lang: <none>
2025-12-31T22:52:58.564 [DEBUG] [Thread-136109] [transport.py] [_log()] kex follows: False
2025-12-31T22:52:58.564 [DEBUG] [Thread-136109] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:52:58.564 [DEBUG] [Thread-136109] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:52:58.565 [DEBUG] [Thread-136109] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:52:58.565 [DEBUG] [Thread-136109] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:52:58.565 [DEBUG] [Thread-136109] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:52:58.565 [DEBUG] [Thread-136109] [transport.py] [_log()] Compression: none
2025-12-31T22:52:58.565 [DEBUG] [Thread-136109] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:52:58.578 [DEBUG] [Thread-136109] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:52:58.578 [DEBUG] [Thread-136109] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:52:58.579 [DEBUG] [Thread-136109] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T22:52:58.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T22:52:58.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:52:58.580 [DEBUG] [Thread-136109] [transport.py] [_log()] userauth is OK
2025-12-31T22:52:58.580 [DEBUG] [Thread-136109] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:52:58.580 [DEBUG] [Thread-136109] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:52:58.580 [DEBUG] [Thread-136109] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T22:52:58.580 [DEBUG] [Thread-136109] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:52:58.596 [INFO] [Thread-136109] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:52:58.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:52:59.215 [DEBUG] [Thread-136109] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:52:59.215 [DEBUG] [Thread-136109] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:52:59.216 [DEBUG] [Thread-136109] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T22:52:59.256 [DEBUG] [Thread-136109] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:52:59.256 [DEBUG] [Thread-136109] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:52:59.260 [DEBUG] [Thread-136109] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:52:59.271 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:52:59.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T22:52:59.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T22:52:59.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T22:52:59.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:52:59.283 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T22:52:59.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:52:59.283 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:52:59.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T22:52:59.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.869928 -999.00  +15.70  12.48     76  +11.50 1 2 1 1 1     0    0 4.02 -12.67 z.... 11.9 12.5 187.6 14.1 17.0 -14.9 16.8 -15.6 16.6 -14.8 17.0 -14.1
2025-12-31T22:52:59.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T22:52:59.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T22:52:59.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.869928
2025-12-31T22:52:59.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T22:52:59.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T22:52:59.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T22:52:59.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T22:52:59.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T22:52:59.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T22:52:46', tmtdew=4.83, humidity=73.16, cloud=0.0, wind=17.04, temperature=15.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T22:22:50', seeing=1.62, atlas_timestamp='2025-12-31T20:52:41.779', atlas_cloud=2, atlas_rain=1, zp_data=[0.2602499999999992, 0.44475000000000087, 0.7302500000000007, 0.22100000000000009, 0.665, 0.8302500000000013, 0.5669999999999993, 0.4302500000000009, 0.39949999999999974, 0.4095000000000013, 0.8602499999999988, 0.41999999999999993, 0.3490000000000002, 0.4262499999999996, 0.5399999999999991, 0.019000000000000128, 0.8522499999999997, 0.4294999999999991, 0.9249999999999989, 0.5342499999999992, 0.34750000000000014, 0.24074999999999847, -0.13574999999999982, -0.4472499999999986, 0.6789999999999994, nan, 1.1087499999999997, -0.8900000000000006, 0.2450000000000001, -0.4939999999999998, -1.2979999999999983, -1.4959999999999987, -0.4202500000000011], zp_timestamp='2025-12-31T20:15:00')
2025-12-31T22:52:59.285 [DEBUG] [Thread-136109] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:52:59.374 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T22:52:59.387 [DEBUG] [Thread-136112] [transport.py] [_log()] starting thread (client mode): 0xb1797b80
2025-12-31T22:52:59.387 [DEBUG] [Thread-136112] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:52:59.401 [DEBUG] [Thread-136112] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T22:52:59.402 [INFO] [Thread-136112] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T22:52:59.409 [DEBUG] [Thread-136112] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:52:59.409 [DEBUG] [Thread-136112] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T22:52:59.409 [DEBUG] [Thread-136112] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:52:59.410 [DEBUG] [Thread-136112] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:52:59.410 [DEBUG] [Thread-136112] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:52:59.410 [DEBUG] [Thread-136112] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:52:59.410 [DEBUG] [Thread-136112] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:52:59.410 [DEBUG] [Thread-136112] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:52:59.410 [DEBUG] [Thread-136112] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:52:59.410 [DEBUG] [Thread-136112] [transport.py] [_log()] client lang: <none>
2025-12-31T22:52:59.410 [DEBUG] [Thread-136112] [transport.py] [_log()] server lang: <none>
2025-12-31T22:52:59.410 [DEBUG] [Thread-136112] [transport.py] [_log()] kex follows: False
2025-12-31T22:52:59.410 [DEBUG] [Thread-136112] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:52:59.410 [DEBUG] [Thread-136112] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:52:59.410 [DEBUG] [Thread-136112] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:52:59.410 [DEBUG] [Thread-136112] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:52:59.410 [DEBUG] [Thread-136112] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:52:59.410 [DEBUG] [Thread-136112] [transport.py] [_log()] Compression: none
2025-12-31T22:52:59.410 [DEBUG] [Thread-136112] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:52:59.466 [DEBUG] [Thread-136112] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:52:59.467 [DEBUG] [Thread-136112] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:52:59.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T22:52:59.468 [DEBUG] [Thread-136112] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T22:52:59.469 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:52:59.523 [DEBUG] [Thread-136112] [transport.py] [_log()] userauth is OK
2025-12-31T22:52:59.524 [DEBUG] [Thread-136112] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:52:59.524 [DEBUG] [Thread-136112] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:52:59.524 [DEBUG] [Thread-136112] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T22:52:59.524 [DEBUG] [Thread-136112] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:52:59.544 [INFO] [Thread-136112] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:52:59.545 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T22:52:59.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:53:00.385 [DEBUG] [Thread-136112] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:53:00.385 [DEBUG] [Thread-136112] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:53:00.433 [DEBUG] [Thread-136112] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:53:00.433 [DEBUG] [Thread-136112] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:53:00.442 [DEBUG] [Thread-136112] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:53:00.451 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:53:00.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T22:53:00.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T22:53:00.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:53:00.471 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:53:00.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:53:00.479 [DEBUG] [Thread-136112] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:53:08.439 [DEBUG] [Thread-136114 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:53:19.045 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:53:19.046 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:53:23.489 [DEBUG] [Thread-136115 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:53:30.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T22:53:30.502 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T22:53:30.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T22:53:31.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 22, 53, 18), 4.82, 73.22, 0.0, 16.85, 15.56, 0, 0, 0, 2, 0, 0),)
2025-12-31T22:53:31.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 22:53:18
2025-12-31T22:53:31.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T22:53:31.493 [DEBUG] [Thread-136116] [transport.py] [_log()] starting thread (client mode): 0xb1746c50
2025-12-31T22:53:31.494 [DEBUG] [Thread-136116] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:53:31.508 [DEBUG] [Thread-136116] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T22:53:31.508 [INFO] [Thread-136116] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T22:53:31.510 [DEBUG] [Thread-136116] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:53:31.510 [DEBUG] [Thread-136116] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T22:53:31.510 [DEBUG] [Thread-136116] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:53:31.510 [DEBUG] [Thread-136116] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:53:31.510 [DEBUG] [Thread-136116] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:53:31.510 [DEBUG] [Thread-136116] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:53:31.510 [DEBUG] [Thread-136116] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:53:31.510 [DEBUG] [Thread-136116] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:53:31.510 [DEBUG] [Thread-136116] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:53:31.510 [DEBUG] [Thread-136116] [transport.py] [_log()] client lang: <none>
2025-12-31T22:53:31.510 [DEBUG] [Thread-136116] [transport.py] [_log()] server lang: <none>
2025-12-31T22:53:31.510 [DEBUG] [Thread-136116] [transport.py] [_log()] kex follows: False
2025-12-31T22:53:31.510 [DEBUG] [Thread-136116] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:53:31.510 [DEBUG] [Thread-136116] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:53:31.510 [DEBUG] [Thread-136116] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:53:31.510 [DEBUG] [Thread-136116] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:53:31.510 [DEBUG] [Thread-136116] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:53:31.510 [DEBUG] [Thread-136116] [transport.py] [_log()] Compression: none
2025-12-31T22:53:31.510 [DEBUG] [Thread-136116] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:53:31.518 [DEBUG] [Thread-136116] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:53:31.519 [DEBUG] [Thread-136116] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:53:31.519 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T22:53:31.519 [DEBUG] [Thread-136116] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T22:53:31.520 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:53:31.521 [DEBUG] [Thread-136116] [transport.py] [_log()] userauth is OK
2025-12-31T22:53:31.521 [DEBUG] [Thread-136116] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:53:31.521 [DEBUG] [Thread-136116] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:53:31.521 [DEBUG] [Thread-136116] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T22:53:31.521 [DEBUG] [Thread-136116] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:53:31.541 [INFO] [Thread-136116] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:53:31.542 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:53:32.127 [DEBUG] [Thread-136116] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:53:32.127 [DEBUG] [Thread-136116] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:53:32.128 [DEBUG] [Thread-136116] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T22:53:32.168 [DEBUG] [Thread-136116] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:53:32.168 [DEBUG] [Thread-136116] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:53:32.170 [DEBUG] [Thread-136116] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:53:32.183 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:53:32.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T22:53:32.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T22:53:32.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T22:53:32.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:53:32.193 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T22:53:32.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:53:32.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:53:32.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T22:53:32.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.869928 -999.00  +15.70  12.48     76  +11.50 1 2 1 1 1     0    0 4.02 -12.67 z.... 11.9 12.5 187.6 14.1 17.0 -14.9 16.8 -15.6 16.6 -14.8 17.0 -14.1
2025-12-31T22:53:32.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T22:53:32.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T22:53:32.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.869928
2025-12-31T22:53:32.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T22:53:32.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T22:53:32.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T22:53:32.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T22:53:32.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T22:53:32.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T22:53:18', tmtdew=4.82, humidity=73.22, cloud=0.0, wind=16.85, temperature=15.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T22:22:50', seeing=1.62, atlas_timestamp='2025-12-31T20:52:41.779', atlas_cloud=2, atlas_rain=1, zp_data=[0.2602499999999992, 0.44475000000000087, 0.7302500000000007, 0.22100000000000009, 0.665, 0.8302500000000013, 0.5669999999999993, 0.4302500000000009, 0.39949999999999974, 0.4095000000000013, 0.8602499999999988, 0.41999999999999993, 0.3490000000000002, 0.4262499999999996, 0.5399999999999991, 0.019000000000000128, 0.8522499999999997, 0.4294999999999991, 0.9249999999999989, 0.5342499999999992, 0.34750000000000014, 0.24074999999999847, -0.13574999999999982, -0.4472499999999986, 0.6789999999999994, nan, 1.1087499999999997, -0.8900000000000006, 0.2450000000000001, -0.4939999999999998, -1.2979999999999983, -1.4959999999999987, -0.4202500000000011], zp_timestamp='2025-12-31T20:15:00')
2025-12-31T22:53:32.196 [DEBUG] [Thread-136116] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:53:32.279 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T22:53:32.294 [DEBUG] [Thread-136119] [transport.py] [_log()] starting thread (client mode): 0xb957a380
2025-12-31T22:53:32.294 [DEBUG] [Thread-136119] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:53:32.308 [DEBUG] [Thread-136119] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T22:53:32.308 [INFO] [Thread-136119] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T22:53:32.316 [DEBUG] [Thread-136119] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:53:32.316 [DEBUG] [Thread-136119] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T22:53:32.316 [DEBUG] [Thread-136119] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:53:32.316 [DEBUG] [Thread-136119] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:53:32.316 [DEBUG] [Thread-136119] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:53:32.316 [DEBUG] [Thread-136119] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:53:32.316 [DEBUG] [Thread-136119] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:53:32.316 [DEBUG] [Thread-136119] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:53:32.316 [DEBUG] [Thread-136119] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:53:32.316 [DEBUG] [Thread-136119] [transport.py] [_log()] client lang: <none>
2025-12-31T22:53:32.316 [DEBUG] [Thread-136119] [transport.py] [_log()] server lang: <none>
2025-12-31T22:53:32.316 [DEBUG] [Thread-136119] [transport.py] [_log()] kex follows: False
2025-12-31T22:53:32.316 [DEBUG] [Thread-136119] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:53:32.316 [DEBUG] [Thread-136119] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:53:32.316 [DEBUG] [Thread-136119] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:53:32.316 [DEBUG] [Thread-136119] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:53:32.316 [DEBUG] [Thread-136119] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:53:32.317 [DEBUG] [Thread-136119] [transport.py] [_log()] Compression: none
2025-12-31T22:53:32.317 [DEBUG] [Thread-136119] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:53:32.375 [DEBUG] [Thread-136119] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:53:32.376 [DEBUG] [Thread-136119] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:53:32.376 [DEBUG] [Thread-136119] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T22:53:32.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T22:53:32.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:53:32.442 [DEBUG] [Thread-136119] [transport.py] [_log()] userauth is OK
2025-12-31T22:53:32.442 [DEBUG] [Thread-136119] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:53:32.442 [DEBUG] [Thread-136119] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:53:32.442 [DEBUG] [Thread-136119] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T22:53:32.442 [DEBUG] [Thread-136119] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:53:32.461 [INFO] [Thread-136119] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:53:32.462 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T22:53:32.462 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:53:33.300 [DEBUG] [Thread-136119] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:53:33.300 [DEBUG] [Thread-136119] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:53:33.348 [DEBUG] [Thread-136119] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:53:33.348 [DEBUG] [Thread-136119] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:53:33.357 [DEBUG] [Thread-136119] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:53:33.366 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:53:33.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T22:53:33.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-12-31T22:53:33.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:53:33.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:53:33.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:53:33.394 [DEBUG] [Thread-136119] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:53:38.523 [DEBUG] [Thread-136121 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:53:49.736 [DEBUG] [Thread-136122 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:53:53.569 [DEBUG] [Thread-136123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:54:03.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T22:54:03.402 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T22:54:03.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T22:54:04.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 22, 53, 50), 4.81, 73.26, 0.0, 18.67, 15.58, 0, 0, 0, 2, 0, 0),)
2025-12-31T22:54:04.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 22:53:50
2025-12-31T22:54:04.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T22:54:04.390 [DEBUG] [Thread-136124] [transport.py] [_log()] starting thread (client mode): 0xb9579870
2025-12-31T22:54:04.390 [DEBUG] [Thread-136124] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:54:04.411 [DEBUG] [Thread-136124] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T22:54:04.411 [INFO] [Thread-136124] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T22:54:04.413 [DEBUG] [Thread-136124] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:54:04.413 [DEBUG] [Thread-136124] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T22:54:04.413 [DEBUG] [Thread-136124] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:54:04.413 [DEBUG] [Thread-136124] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:54:04.413 [DEBUG] [Thread-136124] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:54:04.413 [DEBUG] [Thread-136124] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:54:04.413 [DEBUG] [Thread-136124] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:54:04.413 [DEBUG] [Thread-136124] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:54:04.413 [DEBUG] [Thread-136124] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:54:04.414 [DEBUG] [Thread-136124] [transport.py] [_log()] client lang: <none>
2025-12-31T22:54:04.414 [DEBUG] [Thread-136124] [transport.py] [_log()] server lang: <none>
2025-12-31T22:54:04.414 [DEBUG] [Thread-136124] [transport.py] [_log()] kex follows: False
2025-12-31T22:54:04.414 [DEBUG] [Thread-136124] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:54:04.414 [DEBUG] [Thread-136124] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:54:04.414 [DEBUG] [Thread-136124] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:54:04.414 [DEBUG] [Thread-136124] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:54:04.414 [DEBUG] [Thread-136124] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:54:04.414 [DEBUG] [Thread-136124] [transport.py] [_log()] Compression: none
2025-12-31T22:54:04.414 [DEBUG] [Thread-136124] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:54:04.425 [DEBUG] [Thread-136124] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:54:04.426 [DEBUG] [Thread-136124] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:54:04.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T22:54:04.427 [DEBUG] [Thread-136124] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T22:54:04.428 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:54:04.429 [DEBUG] [Thread-136124] [transport.py] [_log()] userauth is OK
2025-12-31T22:54:04.429 [DEBUG] [Thread-136124] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:54:04.429 [DEBUG] [Thread-136124] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:54:04.429 [DEBUG] [Thread-136124] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T22:54:04.429 [DEBUG] [Thread-136124] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:54:04.468 [INFO] [Thread-136124] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:54:04.469 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:54:05.122 [DEBUG] [Thread-136124] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:54:05.122 [DEBUG] [Thread-136124] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:54:05.123 [DEBUG] [Thread-136124] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T22:54:05.163 [DEBUG] [Thread-136124] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:54:05.163 [DEBUG] [Thread-136124] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:54:05.166 [DEBUG] [Thread-136124] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:54:05.177 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:54:05.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T22:54:05.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T22:54:05.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T22:54:05.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:54:05.189 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T22:54:05.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:54:05.190 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:54:05.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T22:54:05.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.870275 -999.00  +15.70  13.77     76  +11.50 1 2 1 1 1     0    0 3.93 -14.38 z.eS. 14.5 13.8 189.2 21.3 17.0 -15.0 16.8 -15.8 16.6 -14.9 17.0 -14.4
2025-12-31T22:54:05.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T22:54:05.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T22:54:05.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.870275
2025-12-31T22:54:05.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T22:54:05.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T22:54:05.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T22:54:05.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T22:54:05.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T22:54:05.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T22:53:50', tmtdew=4.81, humidity=73.26, cloud=0.0, wind=18.67, temperature=15.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T22:22:50', seeing=1.62, atlas_timestamp='2025-12-31T20:53:11.760', atlas_cloud=2, atlas_rain=1, zp_data=[0.2602499999999992, 0.44475000000000087, 0.7302500000000007, 0.22100000000000009, 0.665, 0.8302500000000013, 0.5669999999999993, 0.4302500000000009, 0.39949999999999974, 0.4095000000000013, 0.8602499999999988, 0.41999999999999993, 0.3490000000000002, 0.4262499999999996, 0.5399999999999991, 0.019000000000000128, 0.8522499999999997, 0.4294999999999991, 0.9249999999999989, 0.5342499999999992, 0.34750000000000014, 0.24074999999999847, -0.13574999999999982, -0.4472499999999986, 0.6789999999999994, nan, 1.1087499999999997, -0.8900000000000006, 0.2450000000000001, -0.4939999999999998, -1.2979999999999983, -1.4959999999999987, -0.4202500000000011], zp_timestamp='2025-12-31T20:15:00')
2025-12-31T22:54:05.192 [DEBUG] [Thread-136124] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:54:05.283 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T22:54:05.295 [DEBUG] [Thread-136127] [transport.py] [_log()] starting thread (client mode): 0xb9578490
2025-12-31T22:54:05.296 [DEBUG] [Thread-136127] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:54:05.311 [DEBUG] [Thread-136127] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T22:54:05.312 [INFO] [Thread-136127] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T22:54:05.320 [DEBUG] [Thread-136127] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:54:05.320 [DEBUG] [Thread-136127] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T22:54:05.320 [DEBUG] [Thread-136127] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:54:05.320 [DEBUG] [Thread-136127] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:54:05.320 [DEBUG] [Thread-136127] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:54:05.320 [DEBUG] [Thread-136127] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:54:05.321 [DEBUG] [Thread-136127] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:54:05.321 [DEBUG] [Thread-136127] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:54:05.321 [DEBUG] [Thread-136127] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:54:05.321 [DEBUG] [Thread-136127] [transport.py] [_log()] client lang: <none>
2025-12-31T22:54:05.321 [DEBUG] [Thread-136127] [transport.py] [_log()] server lang: <none>
2025-12-31T22:54:05.321 [DEBUG] [Thread-136127] [transport.py] [_log()] kex follows: False
2025-12-31T22:54:05.321 [DEBUG] [Thread-136127] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:54:05.321 [DEBUG] [Thread-136127] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:54:05.322 [DEBUG] [Thread-136127] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:54:05.322 [DEBUG] [Thread-136127] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:54:05.322 [DEBUG] [Thread-136127] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:54:05.322 [DEBUG] [Thread-136127] [transport.py] [_log()] Compression: none
2025-12-31T22:54:05.322 [DEBUG] [Thread-136127] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:54:05.380 [DEBUG] [Thread-136127] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:54:05.381 [DEBUG] [Thread-136127] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:54:05.391 [DEBUG] [Thread-136127] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T22:54:05.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T22:54:05.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:54:05.438 [DEBUG] [Thread-136127] [transport.py] [_log()] userauth is OK
2025-12-31T22:54:05.439 [DEBUG] [Thread-136127] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:54:05.439 [DEBUG] [Thread-136127] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:54:05.439 [DEBUG] [Thread-136127] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T22:54:05.439 [DEBUG] [Thread-136127] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:54:05.460 [INFO] [Thread-136127] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:54:05.460 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T22:54:05.460 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:54:06.292 [DEBUG] [Thread-136127] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:54:06.292 [DEBUG] [Thread-136127] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:54:06.341 [DEBUG] [Thread-136127] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:54:06.342 [DEBUG] [Thread-136127] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:54:06.353 [DEBUG] [Thread-136127] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:54:06.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:54:06.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T22:54:06.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T22:54:06.384 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:54:06.384 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:54:06.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:54:06.393 [DEBUG] [Thread-136127] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:54:08.602 [DEBUG] [Thread-136129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:54:19.248 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:54:19.250 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:54:23.651 [DEBUG] [Thread-136130 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:54:36.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T22:54:36.415 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T22:54:36.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T22:54:37.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 22, 54, 22), 4.79, 73.32, 0.0, 18.53, 15.58, 0, 0, 0, 2, 0, 0),)
2025-12-31T22:54:37.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 22:54:22
2025-12-31T22:54:37.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T22:54:37.382 [DEBUG] [Thread-136131] [transport.py] [_log()] starting thread (client mode): 0xb957a230
2025-12-31T22:54:37.382 [DEBUG] [Thread-136131] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:54:37.402 [DEBUG] [Thread-136131] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T22:54:37.403 [INFO] [Thread-136131] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T22:54:37.406 [DEBUG] [Thread-136131] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:54:37.407 [DEBUG] [Thread-136131] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T22:54:37.407 [DEBUG] [Thread-136131] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:54:37.407 [DEBUG] [Thread-136131] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:54:37.407 [DEBUG] [Thread-136131] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:54:37.407 [DEBUG] [Thread-136131] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:54:37.407 [DEBUG] [Thread-136131] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:54:37.407 [DEBUG] [Thread-136131] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:54:37.407 [DEBUG] [Thread-136131] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:54:37.407 [DEBUG] [Thread-136131] [transport.py] [_log()] client lang: <none>
2025-12-31T22:54:37.407 [DEBUG] [Thread-136131] [transport.py] [_log()] server lang: <none>
2025-12-31T22:54:37.407 [DEBUG] [Thread-136131] [transport.py] [_log()] kex follows: False
2025-12-31T22:54:37.407 [DEBUG] [Thread-136131] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:54:37.407 [DEBUG] [Thread-136131] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:54:37.407 [DEBUG] [Thread-136131] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:54:37.407 [DEBUG] [Thread-136131] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:54:37.407 [DEBUG] [Thread-136131] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:54:37.407 [DEBUG] [Thread-136131] [transport.py] [_log()] Compression: none
2025-12-31T22:54:37.407 [DEBUG] [Thread-136131] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:54:37.423 [DEBUG] [Thread-136131] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:54:37.424 [DEBUG] [Thread-136131] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:54:37.425 [DEBUG] [Thread-136131] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T22:54:37.425 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T22:54:37.425 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:54:37.426 [DEBUG] [Thread-136131] [transport.py] [_log()] userauth is OK
2025-12-31T22:54:37.427 [DEBUG] [Thread-136131] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:54:37.427 [DEBUG] [Thread-136131] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:54:37.427 [DEBUG] [Thread-136131] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T22:54:37.427 [DEBUG] [Thread-136131] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:54:37.446 [INFO] [Thread-136131] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:54:37.447 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:54:38.080 [DEBUG] [Thread-136131] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:54:38.080 [DEBUG] [Thread-136131] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:54:38.081 [DEBUG] [Thread-136131] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T22:54:38.121 [DEBUG] [Thread-136131] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:54:38.121 [DEBUG] [Thread-136131] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:54:38.125 [DEBUG] [Thread-136131] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:54:38.138 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:54:38.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T22:54:38.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T22:54:38.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T22:54:38.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:54:38.150 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T22:54:38.150 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:54:38.150 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:54:38.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T22:54:38.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.870622 -999.00  +15.70  16.24     76  +11.50 1 2 1 1 1     0    0 4.07 -16.47 z.eS. 14.9 16.2 191.2 22.4 17.0 -15.2 16.8 -15.9 16.6 -15.2 16.9 -14.6
2025-12-31T22:54:38.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T22:54:38.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T22:54:38.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.870622
2025-12-31T22:54:38.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T22:54:38.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T22:54:38.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T22:54:38.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T22:54:38.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T22:54:38.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T22:54:22', tmtdew=4.79, humidity=73.32, cloud=0.0, wind=18.53, temperature=15.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T22:22:50', seeing=1.62, atlas_timestamp='2025-12-31T20:53:41.741', atlas_cloud=2, atlas_rain=1, zp_data=[0.2602499999999992, 0.44475000000000087, 0.7302500000000007, 0.22100000000000009, 0.665, 0.8302500000000013, 0.5669999999999993, 0.4302500000000009, 0.39949999999999974, 0.4095000000000013, 0.8602499999999988, 0.41999999999999993, 0.3490000000000002, 0.4262499999999996, 0.5399999999999991, 0.019000000000000128, 0.8522499999999997, 0.4294999999999991, 0.9249999999999989, 0.5342499999999992, 0.34750000000000014, 0.24074999999999847, -0.13574999999999982, -0.4472499999999986, 0.6789999999999994, nan, 1.1087499999999997, -0.8900000000000006, 0.2450000000000001, -0.4939999999999998, -1.2979999999999983, -1.4959999999999987, -0.4202500000000011], zp_timestamp='2025-12-31T20:15:00')
2025-12-31T22:54:38.152 [DEBUG] [Thread-136131] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:54:38.236 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T22:54:38.248 [DEBUG] [Thread-136134] [transport.py] [_log()] starting thread (client mode): 0xb9578a90
2025-12-31T22:54:38.248 [DEBUG] [Thread-136134] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:54:38.262 [DEBUG] [Thread-136134] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T22:54:38.263 [INFO] [Thread-136134] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T22:54:38.270 [DEBUG] [Thread-136134] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:54:38.270 [DEBUG] [Thread-136134] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T22:54:38.270 [DEBUG] [Thread-136134] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:54:38.270 [DEBUG] [Thread-136134] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:54:38.270 [DEBUG] [Thread-136134] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:54:38.270 [DEBUG] [Thread-136134] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:54:38.270 [DEBUG] [Thread-136134] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:54:38.270 [DEBUG] [Thread-136134] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:54:38.270 [DEBUG] [Thread-136134] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:54:38.270 [DEBUG] [Thread-136134] [transport.py] [_log()] client lang: <none>
2025-12-31T22:54:38.270 [DEBUG] [Thread-136134] [transport.py] [_log()] server lang: <none>
2025-12-31T22:54:38.270 [DEBUG] [Thread-136134] [transport.py] [_log()] kex follows: False
2025-12-31T22:54:38.270 [DEBUG] [Thread-136134] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:54:38.270 [DEBUG] [Thread-136134] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:54:38.271 [DEBUG] [Thread-136134] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:54:38.271 [DEBUG] [Thread-136134] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:54:38.271 [DEBUG] [Thread-136134] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:54:38.271 [DEBUG] [Thread-136134] [transport.py] [_log()] Compression: none
2025-12-31T22:54:38.271 [DEBUG] [Thread-136134] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:54:38.330 [DEBUG] [Thread-136134] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:54:38.331 [DEBUG] [Thread-136134] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:54:38.331 [DEBUG] [Thread-136134] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T22:54:38.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T22:54:38.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:54:38.387 [DEBUG] [Thread-136134] [transport.py] [_log()] userauth is OK
2025-12-31T22:54:38.387 [DEBUG] [Thread-136134] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:54:38.388 [DEBUG] [Thread-136134] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:54:38.388 [DEBUG] [Thread-136134] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T22:54:38.388 [DEBUG] [Thread-136134] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:54:38.406 [INFO] [Thread-136134] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:54:38.406 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T22:54:38.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:54:38.680 [DEBUG] [Thread-136136 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:54:39.197 [DEBUG] [Thread-136134] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:54:39.197 [DEBUG] [Thread-136134] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:54:39.245 [DEBUG] [Thread-136134] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:54:39.245 [DEBUG] [Thread-136134] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:54:39.254 [DEBUG] [Thread-136134] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:54:39.264 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:54:39.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T22:54:39.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T22:54:39.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:54:39.283 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:54:39.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:54:39.291 [DEBUG] [Thread-136134] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:54:49.810 [DEBUG] [Thread-136137 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:54:53.733 [DEBUG] [Thread-136138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:55:08.768 [DEBUG] [Thread-136139 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:55:09.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T22:55:09.313 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T22:55:09.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T22:55:10.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 22, 54, 54), 4.75, 73.31, 0.0, 17.1, 15.58, 0, 0, 0, 2, 0, 0),)
2025-12-31T22:55:10.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 22:54:54
2025-12-31T22:55:10.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T22:55:10.339 [DEBUG] [Thread-136140] [transport.py] [_log()] starting thread (client mode): 0xb17458d0
2025-12-31T22:55:10.339 [DEBUG] [Thread-136140] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:55:10.359 [DEBUG] [Thread-136140] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T22:55:10.359 [INFO] [Thread-136140] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T22:55:10.362 [DEBUG] [Thread-136140] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:55:10.362 [DEBUG] [Thread-136140] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T22:55:10.362 [DEBUG] [Thread-136140] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:55:10.362 [DEBUG] [Thread-136140] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:55:10.362 [DEBUG] [Thread-136140] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:55:10.362 [DEBUG] [Thread-136140] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:55:10.362 [DEBUG] [Thread-136140] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:55:10.362 [DEBUG] [Thread-136140] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:55:10.362 [DEBUG] [Thread-136140] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:55:10.363 [DEBUG] [Thread-136140] [transport.py] [_log()] client lang: <none>
2025-12-31T22:55:10.363 [DEBUG] [Thread-136140] [transport.py] [_log()] server lang: <none>
2025-12-31T22:55:10.363 [DEBUG] [Thread-136140] [transport.py] [_log()] kex follows: False
2025-12-31T22:55:10.363 [DEBUG] [Thread-136140] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:55:10.363 [DEBUG] [Thread-136140] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:55:10.363 [DEBUG] [Thread-136140] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:55:10.363 [DEBUG] [Thread-136140] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:55:10.363 [DEBUG] [Thread-136140] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:55:10.363 [DEBUG] [Thread-136140] [transport.py] [_log()] Compression: none
2025-12-31T22:55:10.363 [DEBUG] [Thread-136140] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:55:10.381 [DEBUG] [Thread-136140] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:55:10.381 [DEBUG] [Thread-136140] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:55:10.381 [DEBUG] [Thread-136140] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T22:55:10.381 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T22:55:10.381 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:55:10.424 [DEBUG] [Thread-136140] [transport.py] [_log()] userauth is OK
2025-12-31T22:55:10.425 [DEBUG] [Thread-136140] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:55:10.425 [DEBUG] [Thread-136140] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:55:10.425 [DEBUG] [Thread-136140] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T22:55:10.425 [DEBUG] [Thread-136140] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:55:10.455 [INFO] [Thread-136140] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:55:10.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:55:12.661 [DEBUG] [Thread-136140] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:55:12.661 [DEBUG] [Thread-136140] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:55:12.661 [DEBUG] [Thread-136140] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T22:55:12.703 [DEBUG] [Thread-136140] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:55:12.704 [DEBUG] [Thread-136140] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:55:12.706 [DEBUG] [Thread-136140] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:55:12.718 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:55:12.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T22:55:12.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T22:55:12.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T22:55:12.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:55:12.724 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T22:55:12.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:55:12.724 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:55:12.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T22:55:12.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.870969 -999.00  +15.60  15.57     76  +11.50 1 2 1 1 1     0    0 3.66 -19.86 Z.ES. 9.0 15.6 197.4 20.2 16.9 -15.3 16.7 -16.2 16.6 -15.3 16.9 -14.7
2025-12-31T22:55:12.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T22:55:12.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T22:55:12.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.870969
2025-12-31T22:55:12.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T22:55:12.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T22:55:12.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T22:55:12.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T22:55:12.725 [DEBUG] [Thread-136140] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:55:12.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T22:55:12.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T22:54:54', tmtdew=4.75, humidity=73.31, cloud=0.0, wind=17.1, temperature=15.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T22:54:54', seeing=1.21, atlas_timestamp='2025-12-31T20:54:11.722', atlas_cloud=2, atlas_rain=1, zp_data=[0.2602499999999992, 0.44475000000000087, 0.7302500000000007, 0.22100000000000009, 0.665, 0.8302500000000013, 0.5669999999999993, 0.4302500000000009, 0.39949999999999974, 0.4095000000000013, 0.8602499999999988, 0.41999999999999993, 0.3490000000000002, 0.4262499999999996, 0.5399999999999991, 0.019000000000000128, 0.8522499999999997, 0.4294999999999991, 0.9249999999999989, 0.5342499999999992, 0.34750000000000014, 0.24074999999999847, -0.13574999999999982, -0.4472499999999986, 0.6789999999999994, nan, 1.1087499999999997, -0.8900000000000006, 0.2450000000000001, -0.4939999999999998, -1.2979999999999983, -1.4959999999999987, -0.4202500000000011], zp_timestamp='2025-12-31T20:15:00')
2025-12-31T22:55:12.808 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T22:55:12.822 [DEBUG] [Thread-136143] [transport.py] [_log()] starting thread (client mode): 0xb9578490
2025-12-31T22:55:12.822 [DEBUG] [Thread-136143] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:55:12.836 [DEBUG] [Thread-136143] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T22:55:12.836 [INFO] [Thread-136143] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T22:55:12.843 [DEBUG] [Thread-136143] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:55:12.843 [DEBUG] [Thread-136143] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T22:55:12.844 [DEBUG] [Thread-136143] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:55:12.844 [DEBUG] [Thread-136143] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:55:12.844 [DEBUG] [Thread-136143] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:55:12.844 [DEBUG] [Thread-136143] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:55:12.844 [DEBUG] [Thread-136143] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:55:12.844 [DEBUG] [Thread-136143] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:55:12.844 [DEBUG] [Thread-136143] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:55:12.844 [DEBUG] [Thread-136143] [transport.py] [_log()] client lang: <none>
2025-12-31T22:55:12.844 [DEBUG] [Thread-136143] [transport.py] [_log()] server lang: <none>
2025-12-31T22:55:12.844 [DEBUG] [Thread-136143] [transport.py] [_log()] kex follows: False
2025-12-31T22:55:12.844 [DEBUG] [Thread-136143] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:55:12.844 [DEBUG] [Thread-136143] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:55:12.844 [DEBUG] [Thread-136143] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:55:12.844 [DEBUG] [Thread-136143] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:55:12.844 [DEBUG] [Thread-136143] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:55:12.844 [DEBUG] [Thread-136143] [transport.py] [_log()] Compression: none
2025-12-31T22:55:12.844 [DEBUG] [Thread-136143] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:55:12.903 [DEBUG] [Thread-136143] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:55:12.903 [DEBUG] [Thread-136143] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:55:12.903 [DEBUG] [Thread-136143] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T22:55:12.903 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T22:55:12.903 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:55:12.960 [DEBUG] [Thread-136143] [transport.py] [_log()] userauth is OK
2025-12-31T22:55:12.960 [DEBUG] [Thread-136143] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:55:12.960 [DEBUG] [Thread-136143] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:55:12.960 [DEBUG] [Thread-136143] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T22:55:12.960 [DEBUG] [Thread-136143] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:55:12.974 [INFO] [Thread-136143] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:55:12.974 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T22:55:12.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:55:13.819 [DEBUG] [Thread-136143] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:55:13.819 [DEBUG] [Thread-136143] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:55:13.867 [DEBUG] [Thread-136143] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:55:13.867 [DEBUG] [Thread-136143] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:55:13.876 [DEBUG] [Thread-136143] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:55:13.885 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:55:13.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T22:55:13.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T22:55:13.905 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:55:13.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:55:13.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:55:13.914 [DEBUG] [Thread-136143] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:55:19.455 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:55:19.456 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:55:23.799 [DEBUG] [Thread-136145 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:55:38.853 [DEBUG] [Thread-136146 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:55:43.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T22:55:43.936 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T22:55:43.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T22:55:44.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 22, 55, 26), 4.74, 73.37, 0.0, 17.4, 15.59, 0, 0, 0, 2, 0, 0),)
2025-12-31T22:55:44.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 22:55:26
2025-12-31T22:55:44.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T22:55:44.927 [DEBUG] [Thread-136147] [transport.py] [_log()] starting thread (client mode): 0xb957a590
2025-12-31T22:55:44.927 [DEBUG] [Thread-136147] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:55:44.947 [DEBUG] [Thread-136147] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T22:55:44.948 [INFO] [Thread-136147] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T22:55:44.951 [DEBUG] [Thread-136147] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:55:44.951 [DEBUG] [Thread-136147] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T22:55:44.951 [DEBUG] [Thread-136147] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:55:44.951 [DEBUG] [Thread-136147] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:55:44.951 [DEBUG] [Thread-136147] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:55:44.951 [DEBUG] [Thread-136147] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:55:44.951 [DEBUG] [Thread-136147] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:55:44.951 [DEBUG] [Thread-136147] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:55:44.952 [DEBUG] [Thread-136147] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:55:44.952 [DEBUG] [Thread-136147] [transport.py] [_log()] client lang: <none>
2025-12-31T22:55:44.952 [DEBUG] [Thread-136147] [transport.py] [_log()] server lang: <none>
2025-12-31T22:55:44.952 [DEBUG] [Thread-136147] [transport.py] [_log()] kex follows: False
2025-12-31T22:55:44.952 [DEBUG] [Thread-136147] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:55:44.952 [DEBUG] [Thread-136147] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:55:44.952 [DEBUG] [Thread-136147] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:55:44.952 [DEBUG] [Thread-136147] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:55:44.952 [DEBUG] [Thread-136147] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:55:44.952 [DEBUG] [Thread-136147] [transport.py] [_log()] Compression: none
2025-12-31T22:55:44.952 [DEBUG] [Thread-136147] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:55:44.966 [DEBUG] [Thread-136147] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:55:44.966 [DEBUG] [Thread-136147] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:55:44.967 [DEBUG] [Thread-136147] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T22:55:44.967 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T22:55:44.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:55:44.969 [DEBUG] [Thread-136147] [transport.py] [_log()] userauth is OK
2025-12-31T22:55:44.969 [DEBUG] [Thread-136147] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:55:44.969 [DEBUG] [Thread-136147] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:55:44.969 [DEBUG] [Thread-136147] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T22:55:44.969 [DEBUG] [Thread-136147] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:55:44.994 [INFO] [Thread-136147] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:55:44.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:55:45.809 [DEBUG] [Thread-136147] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:55:45.809 [DEBUG] [Thread-136147] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:55:45.809 [DEBUG] [Thread-136147] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T22:55:45.850 [DEBUG] [Thread-136147] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:55:45.850 [DEBUG] [Thread-136147] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:55:45.852 [DEBUG] [Thread-136147] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:55:45.866 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:55:45.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T22:55:45.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T22:55:45.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T22:55:45.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:55:45.871 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T22:55:45.871 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:55:45.871 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:55:45.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T22:55:45.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.871664 -999.00  +15.70  13.67     76  +11.50 1 2 1 1 1     0    0 3.79 -23.38 z.ES. 8.9 13.7 182.4 16.7 16.9 -15.5 16.7 -16.0 16.6 -15.2 16.9 -14.8
2025-12-31T22:55:45.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T22:55:45.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T22:55:45.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.871664
2025-12-31T22:55:45.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T22:55:45.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T22:55:45.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T22:55:45.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T22:55:45.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T22:55:45.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T22:55:26', tmtdew=4.74, humidity=73.37, cloud=0.0, wind=17.4, temperature=15.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T22:55:26', seeing=1.13, atlas_timestamp='2025-12-31T20:55:11.770', atlas_cloud=2, atlas_rain=1, zp_data=[0.2602499999999992, 0.44475000000000087, 0.7302500000000007, 0.22100000000000009, 0.665, 0.8302500000000013, 0.5669999999999993, 0.4302500000000009, 0.39949999999999974, 0.4095000000000013, 0.8602499999999988, 0.41999999999999993, 0.3490000000000002, 0.4262499999999996, 0.5399999999999991, 0.019000000000000128, 0.8522499999999997, 0.4294999999999991, 0.9249999999999989, 0.5342499999999992, 0.34750000000000014, 0.24074999999999847, -0.13574999999999982, -0.4472499999999986, 0.6789999999999994, nan, 1.1087499999999997, -0.8900000000000006, 0.2450000000000001, -0.4939999999999998, -1.2979999999999983, -1.4959999999999987, -0.4202500000000011], zp_timestamp='2025-12-31T20:15:00')
2025-12-31T22:55:45.872 [DEBUG] [Thread-136147] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:55:45.947 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T22:55:45.960 [DEBUG] [Thread-136150] [transport.py] [_log()] starting thread (client mode): 0xb17474c0
2025-12-31T22:55:45.961 [DEBUG] [Thread-136150] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:55:45.976 [DEBUG] [Thread-136150] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T22:55:45.976 [INFO] [Thread-136150] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T22:55:45.983 [DEBUG] [Thread-136150] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:55:45.983 [DEBUG] [Thread-136150] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T22:55:45.983 [DEBUG] [Thread-136150] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:55:45.983 [DEBUG] [Thread-136150] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:55:45.983 [DEBUG] [Thread-136150] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:55:45.983 [DEBUG] [Thread-136150] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:55:45.983 [DEBUG] [Thread-136150] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:55:45.983 [DEBUG] [Thread-136150] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:55:45.983 [DEBUG] [Thread-136150] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:55:45.983 [DEBUG] [Thread-136150] [transport.py] [_log()] client lang: <none>
2025-12-31T22:55:45.983 [DEBUG] [Thread-136150] [transport.py] [_log()] server lang: <none>
2025-12-31T22:55:45.983 [DEBUG] [Thread-136150] [transport.py] [_log()] kex follows: False
2025-12-31T22:55:45.983 [DEBUG] [Thread-136150] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:55:45.983 [DEBUG] [Thread-136150] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:55:45.984 [DEBUG] [Thread-136150] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:55:45.984 [DEBUG] [Thread-136150] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:55:45.984 [DEBUG] [Thread-136150] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:55:45.984 [DEBUG] [Thread-136150] [transport.py] [_log()] Compression: none
2025-12-31T22:55:45.984 [DEBUG] [Thread-136150] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:55:46.041 [DEBUG] [Thread-136150] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:55:46.041 [DEBUG] [Thread-136150] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:55:46.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T22:55:46.042 [DEBUG] [Thread-136150] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T22:55:46.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:55:46.098 [DEBUG] [Thread-136150] [transport.py] [_log()] userauth is OK
2025-12-31T22:55:46.098 [DEBUG] [Thread-136150] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:55:46.099 [DEBUG] [Thread-136150] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:55:46.099 [DEBUG] [Thread-136150] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T22:55:46.099 [DEBUG] [Thread-136150] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:55:46.116 [INFO] [Thread-136150] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:55:46.116 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T22:55:46.116 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:55:46.946 [DEBUG] [Thread-136150] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:55:46.946 [DEBUG] [Thread-136150] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:55:46.994 [DEBUG] [Thread-136150] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:55:46.994 [DEBUG] [Thread-136150] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:55:47.003 [DEBUG] [Thread-136150] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:55:47.010 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:55: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-12-31T22:55:47.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T22:55:47.026 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:55:47.026 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:55:47.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:55:47.034 [DEBUG] [Thread-136150] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:55:49.887 [DEBUG] [Thread-136152 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:55:53.886 [DEBUG] [Thread-136153 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:56:08.932 [DEBUG] [Thread-136154 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:56:17.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T22:56:17.057 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T22:56:17.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T22:56:17.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 22, 55, 58), 4.68, 73.41, 0.0, 17.59, 15.49, 0, 0, 0, 2, 0, 0),)
2025-12-31T22:56:17.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 22:55:58
2025-12-31T22:56:17.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T22:56:18.047 [DEBUG] [Thread-136155] [transport.py] [_log()] starting thread (client mode): 0xb95f34c0
2025-12-31T22:56:18.047 [DEBUG] [Thread-136155] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:56:18.069 [DEBUG] [Thread-136155] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T22:56:18.070 [INFO] [Thread-136155] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T22:56:18.071 [DEBUG] [Thread-136155] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:56:18.071 [DEBUG] [Thread-136155] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T22:56:18.071 [DEBUG] [Thread-136155] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:56:18.071 [DEBUG] [Thread-136155] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:56:18.071 [DEBUG] [Thread-136155] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:56:18.071 [DEBUG] [Thread-136155] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:56:18.071 [DEBUG] [Thread-136155] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:56:18.071 [DEBUG] [Thread-136155] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:56:18.071 [DEBUG] [Thread-136155] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:56:18.071 [DEBUG] [Thread-136155] [transport.py] [_log()] client lang: <none>
2025-12-31T22:56:18.071 [DEBUG] [Thread-136155] [transport.py] [_log()] server lang: <none>
2025-12-31T22:56:18.071 [DEBUG] [Thread-136155] [transport.py] [_log()] kex follows: False
2025-12-31T22:56:18.071 [DEBUG] [Thread-136155] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:56:18.071 [DEBUG] [Thread-136155] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:56:18.071 [DEBUG] [Thread-136155] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:56:18.071 [DEBUG] [Thread-136155] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:56:18.071 [DEBUG] [Thread-136155] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:56:18.071 [DEBUG] [Thread-136155] [transport.py] [_log()] Compression: none
2025-12-31T22:56:18.071 [DEBUG] [Thread-136155] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:56:18.088 [DEBUG] [Thread-136155] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:56:18.089 [DEBUG] [Thread-136155] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:56:18.089 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T22:56:18.089 [DEBUG] [Thread-136155] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T22:56:18.090 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:56:18.091 [DEBUG] [Thread-136155] [transport.py] [_log()] userauth is OK
2025-12-31T22:56:18.091 [DEBUG] [Thread-136155] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:56:18.091 [DEBUG] [Thread-136155] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:56:18.091 [DEBUG] [Thread-136155] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T22:56:18.091 [DEBUG] [Thread-136155] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:56:18.108 [INFO] [Thread-136155] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:56:18.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:56:18.730 [DEBUG] [Thread-136155] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:56:18.730 [DEBUG] [Thread-136155] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:56:18.730 [DEBUG] [Thread-136155] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T22:56:18.771 [DEBUG] [Thread-136155] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:56:18.771 [DEBUG] [Thread-136155] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:56:18.775 [DEBUG] [Thread-136155] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:56:18.788 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:56:18.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T22:56:18.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T22:56:18.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T22:56:18.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:56:18.800 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T22:56:18.800 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:56:18.800 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:56:18.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T22:56:18.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.872011 -999.00  +15.60  13.67     76  +11.50 1 2 1 1 1     0    0 3.56 -25.86 z.ES. 12.4 13.7 196.2 17.6 16.9 -15.8 16.7 -16.3 16.6 -15.5 16.9 -15.3
2025-12-31T22:56:18.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T22:56:18.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T22:56:18.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.872011
2025-12-31T22:56:18.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T22:56:18.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T22:56:18.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T22:56:18.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T22:56:18.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T22:56:18.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T22:55:58', tmtdew=4.68, humidity=73.41, cloud=0.0, wind=17.59, temperature=15.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T22:55:58', seeing=1.18, atlas_timestamp='2025-12-31T20:55:41.750', atlas_cloud=2, atlas_rain=1, zp_data=[0.2602499999999992, 0.44475000000000087, 0.7302500000000007, 0.22100000000000009, 0.665, 0.8302500000000013, 0.5669999999999993, 0.4302500000000009, 0.39949999999999974, 0.4095000000000013, 0.8602499999999988, 0.41999999999999993, 0.3490000000000002, 0.4262499999999996, 0.5399999999999991, 0.019000000000000128, 0.8522499999999997, 0.4294999999999991, 0.9249999999999989, 0.5342499999999992, 0.34750000000000014, 0.24074999999999847, -0.13574999999999982, -0.4472499999999986, 0.6789999999999994, nan, 1.1087499999999997, -0.8900000000000006, 0.2450000000000001, -0.4939999999999998, -1.2979999999999983, -1.4959999999999987, -0.4202500000000011], zp_timestamp='2025-12-31T20:15:00')
2025-12-31T22:56:18.803 [DEBUG] [Thread-136155] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:56:18.887 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T22:56:18.899 [DEBUG] [Thread-136158] [transport.py] [_log()] starting thread (client mode): 0xb95f3250
2025-12-31T22:56:18.900 [DEBUG] [Thread-136158] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:56:18.914 [DEBUG] [Thread-136158] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T22:56:18.915 [INFO] [Thread-136158] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T22:56:18.922 [DEBUG] [Thread-136158] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:56:18.923 [DEBUG] [Thread-136158] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T22:56:18.923 [DEBUG] [Thread-136158] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:56:18.923 [DEBUG] [Thread-136158] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:56:18.923 [DEBUG] [Thread-136158] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:56:18.923 [DEBUG] [Thread-136158] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:56:18.923 [DEBUG] [Thread-136158] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:56:18.923 [DEBUG] [Thread-136158] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:56:18.924 [DEBUG] [Thread-136158] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:56:18.924 [DEBUG] [Thread-136158] [transport.py] [_log()] client lang: <none>
2025-12-31T22:56:18.924 [DEBUG] [Thread-136158] [transport.py] [_log()] server lang: <none>
2025-12-31T22:56:18.924 [DEBUG] [Thread-136158] [transport.py] [_log()] kex follows: False
2025-12-31T22:56:18.924 [DEBUG] [Thread-136158] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:56:18.924 [DEBUG] [Thread-136158] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:56:18.924 [DEBUG] [Thread-136158] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:56:18.924 [DEBUG] [Thread-136158] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:56:18.924 [DEBUG] [Thread-136158] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:56:18.924 [DEBUG] [Thread-136158] [transport.py] [_log()] Compression: none
2025-12-31T22:56:18.924 [DEBUG] [Thread-136158] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:56:18.983 [DEBUG] [Thread-136158] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:56:18.984 [DEBUG] [Thread-136158] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:56:18.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T22:56:18.985 [DEBUG] [Thread-136158] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T22:56:18.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:56:19.039 [DEBUG] [Thread-136158] [transport.py] [_log()] userauth is OK
2025-12-31T22:56:19.039 [DEBUG] [Thread-136158] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:56:19.039 [DEBUG] [Thread-136158] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:56:19.040 [DEBUG] [Thread-136158] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T22:56:19.040 [DEBUG] [Thread-136158] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:56:19.058 [INFO] [Thread-136158] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:56:19.058 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T22:56:19.059 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:56:19.657 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:56:19.658 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:56:19.877 [DEBUG] [Thread-136158] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:56:19.877 [DEBUG] [Thread-136158] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:56:19.925 [DEBUG] [Thread-136158] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:56:19.925 [DEBUG] [Thread-136158] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:56:19.934 [DEBUG] [Thread-136158] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:56:19.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:56:19.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T22:56:19.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-12-31T22:56:19.962 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:56:19.962 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:56:19.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:56:19.971 [DEBUG] [Thread-136158] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:56:23.970 [DEBUG] [Thread-136160 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:56:39.011 [DEBUG] [Thread-136161 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:56:49.945 [DEBUG] [Thread-136162 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:56:49.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T22:56:49.994 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T22:56:49.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T22:56:50.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 22, 56, 30), 4.66, 73.47, 0.0, 21.12, 15.46, 0, 0, 0, 2, 0, 0),)
2025-12-31T22:56:50.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 22:56:30
2025-12-31T22:56:50.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T22:56:50.981 [DEBUG] [Thread-136163] [transport.py] [_log()] starting thread (client mode): 0xb95f0370
2025-12-31T22:56:50.981 [DEBUG] [Thread-136163] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:56:51.000 [DEBUG] [Thread-136163] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T22:56:51.000 [INFO] [Thread-136163] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T22:56:51.004 [DEBUG] [Thread-136163] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:56:51.004 [DEBUG] [Thread-136163] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T22:56:51.004 [DEBUG] [Thread-136163] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:56:51.004 [DEBUG] [Thread-136163] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:56:51.004 [DEBUG] [Thread-136163] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:56:51.004 [DEBUG] [Thread-136163] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:56:51.004 [DEBUG] [Thread-136163] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:56:51.004 [DEBUG] [Thread-136163] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:56:51.004 [DEBUG] [Thread-136163] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:56:51.004 [DEBUG] [Thread-136163] [transport.py] [_log()] client lang: <none>
2025-12-31T22:56:51.004 [DEBUG] [Thread-136163] [transport.py] [_log()] server lang: <none>
2025-12-31T22:56:51.004 [DEBUG] [Thread-136163] [transport.py] [_log()] kex follows: False
2025-12-31T22:56:51.004 [DEBUG] [Thread-136163] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:56:51.004 [DEBUG] [Thread-136163] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:56:51.004 [DEBUG] [Thread-136163] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:56:51.004 [DEBUG] [Thread-136163] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:56:51.004 [DEBUG] [Thread-136163] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:56:51.004 [DEBUG] [Thread-136163] [transport.py] [_log()] Compression: none
2025-12-31T22:56:51.004 [DEBUG] [Thread-136163] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:56:51.013 [DEBUG] [Thread-136163] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:56:51.013 [DEBUG] [Thread-136163] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:56:51.013 [DEBUG] [Thread-136163] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T22:56:51.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T22:56:51.014 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:56:51.014 [DEBUG] [Thread-136163] [transport.py] [_log()] userauth is OK
2025-12-31T22:56:51.014 [DEBUG] [Thread-136163] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:56:51.015 [DEBUG] [Thread-136163] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:56:51.015 [DEBUG] [Thread-136163] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T22:56:51.015 [DEBUG] [Thread-136163] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:56:51.027 [INFO] [Thread-136163] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:56:51.028 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:56:51.813 [DEBUG] [Thread-136163] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:56:51.813 [DEBUG] [Thread-136163] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:56:51.813 [DEBUG] [Thread-136163] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T22:56:51.854 [DEBUG] [Thread-136163] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:56:51.854 [DEBUG] [Thread-136163] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:56:51.858 [DEBUG] [Thread-136163] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:56:51.871 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:56:51.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T22:56:51.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T22:56:51.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T22:56:51.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:56:51.882 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T22:56:51.882 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:56:51.882 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:56:51.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T22:56:51.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.872358 -999.00  +15.60  13.72     76  +11.60 1 2 1 1 1     0    0 3.48 -28.05 Z.ES. 10.5 13.7 199.0 17.2 16.9 -16.0 16.7 -16.6 16.6 -15.6 16.9 -15.3
2025-12-31T22:56:51.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T22:56:51.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T22:56:51.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.872358
2025-12-31T22:56:51.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T22:56:51.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T22:56:51.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T22:56:51.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T22:56:51.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T22:56:51.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T22:56:30', tmtdew=4.66, humidity=73.47, cloud=0.0, wind=21.12, temperature=15.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T22:56:30', seeing=1.23, atlas_timestamp='2025-12-31T20:56:11.731', atlas_cloud=2, atlas_rain=1, zp_data=[0.2602499999999992, 0.44475000000000087, 0.7302500000000007, 0.22100000000000009, 0.665, 0.8302500000000013, 0.5669999999999993, 0.4302500000000009, 0.39949999999999974, 0.4095000000000013, 0.8602499999999988, 0.41999999999999993, 0.3490000000000002, 0.4262499999999996, 0.5399999999999991, 0.019000000000000128, 0.8522499999999997, 0.4294999999999991, 0.9249999999999989, 0.5342499999999992, 0.34750000000000014, 0.24074999999999847, -0.13574999999999982, -0.4472499999999986, 0.6789999999999994, nan, 1.1087499999999997, -0.8900000000000006, 0.2450000000000001, -0.4939999999999998, -1.2979999999999983, -1.4959999999999987, -0.4202500000000011], zp_timestamp='2025-12-31T20:15:00')
2025-12-31T22:56:51.885 [DEBUG] [Thread-136163] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:56:51.970 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T22:56:51.983 [DEBUG] [Thread-136166] [transport.py] [_log()] starting thread (client mode): 0xb95f1510
2025-12-31T22:56:51.983 [DEBUG] [Thread-136166] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:56:51.998 [DEBUG] [Thread-136166] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T22:56:51.998 [INFO] [Thread-136166] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T22:56:52.005 [DEBUG] [Thread-136166] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:56:52.006 [DEBUG] [Thread-136166] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T22:56:52.006 [DEBUG] [Thread-136166] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:56:52.006 [DEBUG] [Thread-136166] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:56:52.006 [DEBUG] [Thread-136166] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:56:52.006 [DEBUG] [Thread-136166] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:56:52.006 [DEBUG] [Thread-136166] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:56:52.006 [DEBUG] [Thread-136166] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:56:52.006 [DEBUG] [Thread-136166] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:56:52.006 [DEBUG] [Thread-136166] [transport.py] [_log()] client lang: <none>
2025-12-31T22:56:52.006 [DEBUG] [Thread-136166] [transport.py] [_log()] server lang: <none>
2025-12-31T22:56:52.006 [DEBUG] [Thread-136166] [transport.py] [_log()] kex follows: False
2025-12-31T22:56:52.006 [DEBUG] [Thread-136166] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:56:52.006 [DEBUG] [Thread-136166] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:56:52.006 [DEBUG] [Thread-136166] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:56:52.006 [DEBUG] [Thread-136166] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:56:52.007 [DEBUG] [Thread-136166] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:56:52.007 [DEBUG] [Thread-136166] [transport.py] [_log()] Compression: none
2025-12-31T22:56:52.007 [DEBUG] [Thread-136166] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:56:52.063 [DEBUG] [Thread-136166] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:56:52.063 [DEBUG] [Thread-136166] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:56:52.064 [DEBUG] [Thread-136166] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T22:56:52.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T22:56:52.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:56:52.119 [DEBUG] [Thread-136166] [transport.py] [_log()] userauth is OK
2025-12-31T22:56:52.120 [DEBUG] [Thread-136166] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:56:52.120 [DEBUG] [Thread-136166] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:56:52.120 [DEBUG] [Thread-136166] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T22:56:52.120 [DEBUG] [Thread-136166] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:56:52.139 [INFO] [Thread-136166] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:56:52.139 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T22:56:52.140 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:56:52.932 [DEBUG] [Thread-136166] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:56:52.932 [DEBUG] [Thread-136166] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:56:52.979 [DEBUG] [Thread-136166] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:56:52.980 [DEBUG] [Thread-136166] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:56:52.989 [DEBUG] [Thread-136166] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:56:52.997 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:56:52.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T22:56:53.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T22:56:53.015 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:56:53.015 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:56:53.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:56:53.023 [DEBUG] [Thread-136166] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:56:54.046 [DEBUG] [Thread-136168 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:57:09.091 [DEBUG] [Thread-136169 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:57:19.861 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:57:19.863 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:57:23.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T22:57:23.037 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T22:57:23.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T22:57:23.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 22, 57, 2), 4.64, 73.61, 0.0, 20.31, 15.44, 0, 0, 0, 2, 0, 0),)
2025-12-31T22:57:23.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 22:57:02
2025-12-31T22:57:23.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T22:57:24.014 [DEBUG] [Thread-136170] [transport.py] [_log()] starting thread (client mode): 0xb95f0e50
2025-12-31T22:57:24.014 [DEBUG] [Thread-136170] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:57:24.033 [DEBUG] [Thread-136170] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T22:57:24.034 [INFO] [Thread-136170] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T22:57:24.035 [DEBUG] [Thread-136170] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:57:24.035 [DEBUG] [Thread-136170] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T22:57:24.035 [DEBUG] [Thread-136170] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:57:24.035 [DEBUG] [Thread-136170] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:57:24.035 [DEBUG] [Thread-136170] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:57:24.035 [DEBUG] [Thread-136170] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:57:24.035 [DEBUG] [Thread-136170] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:57:24.035 [DEBUG] [Thread-136170] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:57:24.035 [DEBUG] [Thread-136170] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:57:24.035 [DEBUG] [Thread-136170] [transport.py] [_log()] client lang: <none>
2025-12-31T22:57:24.035 [DEBUG] [Thread-136170] [transport.py] [_log()] server lang: <none>
2025-12-31T22:57:24.035 [DEBUG] [Thread-136170] [transport.py] [_log()] kex follows: False
2025-12-31T22:57:24.035 [DEBUG] [Thread-136170] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:57:24.035 [DEBUG] [Thread-136170] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:57:24.035 [DEBUG] [Thread-136170] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:57:24.035 [DEBUG] [Thread-136170] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:57:24.035 [DEBUG] [Thread-136170] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:57:24.035 [DEBUG] [Thread-136170] [transport.py] [_log()] Compression: none
2025-12-31T22:57:24.035 [DEBUG] [Thread-136170] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:57:24.054 [DEBUG] [Thread-136170] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:57:24.054 [DEBUG] [Thread-136170] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:57:24.055 [DEBUG] [Thread-136170] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T22:57:24.055 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T22:57:24.056 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:57:24.056 [DEBUG] [Thread-136170] [transport.py] [_log()] userauth is OK
2025-12-31T22:57:24.057 [DEBUG] [Thread-136170] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:57:24.057 [DEBUG] [Thread-136170] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:57:24.057 [DEBUG] [Thread-136170] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T22:57:24.057 [DEBUG] [Thread-136170] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:57:24.075 [INFO] [Thread-136170] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:57:24.076 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:57:24.126 [DEBUG] [Thread-136172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:57:24.734 [DEBUG] [Thread-136170] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:57:24.734 [DEBUG] [Thread-136170] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:57:24.734 [DEBUG] [Thread-136170] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T22:57:24.775 [DEBUG] [Thread-136170] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:57:24.775 [DEBUG] [Thread-136170] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:57:24.779 [DEBUG] [Thread-136170] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:57:24.790 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:57:24.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T22:57:24.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T22:57:24.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T22:57:24.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:57:24.803 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T22:57:24.803 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:57:24.803 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:57:24.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T22:57:24.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.872705 -999.00  +15.60  16.70     76  +11.50 1 2 1 1 1     0    0 3.53 -28.87 ..E.. 16.5 16.7 194.8 21.0 16.9 -16.2 16.6 -17.2 16.6 -15.7 16.9 -15.8
2025-12-31T22:57:24.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T22:57:24.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T22:57:24.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.872705
2025-12-31T22:57:24.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T22:57:24.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T22:57:24.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T22:57:24.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T22:57:24.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T22:57:24.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T22:57:02', tmtdew=4.64, humidity=73.61, cloud=0.0, wind=20.31, temperature=15.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T22:57:02', seeing=1.01, atlas_timestamp='2025-12-31T20:56:41.712', atlas_cloud=2, atlas_rain=1, zp_data=[0.2602499999999992, 0.44475000000000087, 0.7302500000000007, 0.22100000000000009, 0.665, 0.8302500000000013, 0.5669999999999993, 0.4302500000000009, 0.39949999999999974, 0.4095000000000013, 0.8602499999999988, 0.41999999999999993, 0.3490000000000002, 0.4262499999999996, 0.5399999999999991, 0.019000000000000128, 0.8522499999999997, 0.4294999999999991, 0.9249999999999989, 0.5342499999999992, 0.34750000000000014, 0.24074999999999847, -0.13574999999999982, -0.4472499999999986, 0.6789999999999994, nan, 1.1087499999999997, -0.8900000000000006, 0.2450000000000001, -0.4939999999999998, -1.2979999999999983, -1.4959999999999987, -0.4202500000000011], zp_timestamp='2025-12-31T20:15:00')
2025-12-31T22:57:24.806 [DEBUG] [Thread-136170] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:57:24.889 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T22:57:24.901 [DEBUG] [Thread-136174] [transport.py] [_log()] starting thread (client mode): 0xb95f2c80
2025-12-31T22:57:24.901 [DEBUG] [Thread-136174] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:57:24.916 [DEBUG] [Thread-136174] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T22:57:24.916 [INFO] [Thread-136174] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T22:57:24.923 [DEBUG] [Thread-136174] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:57:24.923 [DEBUG] [Thread-136174] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T22:57:24.923 [DEBUG] [Thread-136174] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:57:24.924 [DEBUG] [Thread-136174] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:57:24.924 [DEBUG] [Thread-136174] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:57:24.924 [DEBUG] [Thread-136174] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:57:24.924 [DEBUG] [Thread-136174] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:57:24.924 [DEBUG] [Thread-136174] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:57:24.924 [DEBUG] [Thread-136174] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:57:24.924 [DEBUG] [Thread-136174] [transport.py] [_log()] client lang: <none>
2025-12-31T22:57:24.924 [DEBUG] [Thread-136174] [transport.py] [_log()] server lang: <none>
2025-12-31T22:57:24.924 [DEBUG] [Thread-136174] [transport.py] [_log()] kex follows: False
2025-12-31T22:57:24.924 [DEBUG] [Thread-136174] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:57:24.924 [DEBUG] [Thread-136174] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:57:24.924 [DEBUG] [Thread-136174] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:57:24.924 [DEBUG] [Thread-136174] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:57:24.924 [DEBUG] [Thread-136174] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:57:24.924 [DEBUG] [Thread-136174] [transport.py] [_log()] Compression: none
2025-12-31T22:57:24.924 [DEBUG] [Thread-136174] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:57:24.987 [DEBUG] [Thread-136174] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:57:24.988 [DEBUG] [Thread-136174] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:57:24.989 [DEBUG] [Thread-136174] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T22:57:24.989 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T22:57:24.989 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:57:25.047 [DEBUG] [Thread-136174] [transport.py] [_log()] userauth is OK
2025-12-31T22:57:25.048 [DEBUG] [Thread-136174] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:57:25.048 [DEBUG] [Thread-136174] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:57:25.048 [DEBUG] [Thread-136174] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T22:57:25.048 [DEBUG] [Thread-136174] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:57:25.066 [INFO] [Thread-136174] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:57:25.067 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T22:57:25.067 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:57:25.897 [DEBUG] [Thread-136174] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:57:25.897 [DEBUG] [Thread-136174] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:57:25.944 [DEBUG] [Thread-136174] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:57:25.945 [DEBUG] [Thread-136174] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:57:25.954 [DEBUG] [Thread-136174] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:57:25.962 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:57:25.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T22:57:25.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T22:57:25.981 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:57:25.981 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:57:25.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:57:25.989 [DEBUG] [Thread-136174] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:57:39.161 [DEBUG] [Thread-136176 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:57:50.012 [DEBUG] [Thread-136177 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:57:54.212 [DEBUG] [Thread-136178 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:57:55.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T22:57:55.996 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T22:57:55.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T22:57:56.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 22, 57, 35), 4.59, 74.11, 0.0, 19.46, 15.46, 0, 0, 0, 2, 0, 0),)
2025-12-31T22:57:56.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 22:57:35
2025-12-31T22:57:56.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T22:57:56.995 [DEBUG] [Thread-136179] [transport.py] [_log()] starting thread (client mode): 0xb95f3ca0
2025-12-31T22:57:56.995 [DEBUG] [Thread-136179] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:57:57.013 [DEBUG] [Thread-136179] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T22:57:57.013 [INFO] [Thread-136179] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T22:57:57.015 [DEBUG] [Thread-136179] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:57:57.015 [DEBUG] [Thread-136179] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T22:57:57.015 [DEBUG] [Thread-136179] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:57:57.015 [DEBUG] [Thread-136179] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:57:57.015 [DEBUG] [Thread-136179] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:57:57.015 [DEBUG] [Thread-136179] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:57:57.015 [DEBUG] [Thread-136179] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:57:57.015 [DEBUG] [Thread-136179] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:57:57.015 [DEBUG] [Thread-136179] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:57:57.015 [DEBUG] [Thread-136179] [transport.py] [_log()] client lang: <none>
2025-12-31T22:57:57.015 [DEBUG] [Thread-136179] [transport.py] [_log()] server lang: <none>
2025-12-31T22:57:57.015 [DEBUG] [Thread-136179] [transport.py] [_log()] kex follows: False
2025-12-31T22:57:57.015 [DEBUG] [Thread-136179] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:57:57.015 [DEBUG] [Thread-136179] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:57:57.015 [DEBUG] [Thread-136179] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:57:57.015 [DEBUG] [Thread-136179] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:57:57.015 [DEBUG] [Thread-136179] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:57:57.015 [DEBUG] [Thread-136179] [transport.py] [_log()] Compression: none
2025-12-31T22:57:57.015 [DEBUG] [Thread-136179] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:57:57.031 [DEBUG] [Thread-136179] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:57:57.031 [DEBUG] [Thread-136179] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:57:57.032 [DEBUG] [Thread-136179] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T22:57:57.032 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T22:57:57.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:57:57.034 [DEBUG] [Thread-136179] [transport.py] [_log()] userauth is OK
2025-12-31T22:57:57.034 [DEBUG] [Thread-136179] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:57:57.034 [DEBUG] [Thread-136179] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:57:57.034 [DEBUG] [Thread-136179] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T22:57:57.034 [DEBUG] [Thread-136179] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:57:57.058 [INFO] [Thread-136179] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:57:57.059 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:57:57.710 [DEBUG] [Thread-136179] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:57:57.710 [DEBUG] [Thread-136179] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:57:57.711 [DEBUG] [Thread-136179] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T22:57:57.751 [DEBUG] [Thread-136179] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:57:57.751 [DEBUG] [Thread-136179] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:57:57.755 [DEBUG] [Thread-136179] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:57:57.768 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:57:57.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T22:57:57.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T22:57:57.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T22:57:57.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:57:57.779 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T22:57:57.779 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:57:57.779 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:57:57.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T22:57:57.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.873052 -999.00  +15.60  14.01     76  +11.50 1 2 1 1 1     0    0 3.40 -29.01 ..E.. 14.5 14.0 188.0 24.4 16.8 -16.4 16.6 -17.5 16.5 -15.8 16.8 -15.8
2025-12-31T22:57:57.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T22:57:57.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T22:57:57.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.873052
2025-12-31T22:57:57.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T22:57:57.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T22:57:57.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T22:57:57.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T22:57:57.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T22:57:57.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T22:57:35', tmtdew=4.59, humidity=74.11, cloud=0.0, wind=19.46, temperature=15.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T22:57:35', seeing=1.01, atlas_timestamp='2025-12-31T20:57:11.693', atlas_cloud=2, atlas_rain=1, zp_data=[0.2602499999999992, 0.44475000000000087, 0.7302500000000007, 0.22100000000000009, 0.665, 0.8302500000000013, 0.5669999999999993, 0.4302500000000009, 0.39949999999999974, 0.4095000000000013, 0.8602499999999988, 0.41999999999999993, 0.3490000000000002, 0.4262499999999996, 0.5399999999999991, 0.019000000000000128, 0.8522499999999997, 0.4294999999999991, 0.9249999999999989, 0.5342499999999992, 0.34750000000000014, 0.24074999999999847, -0.13574999999999982, -0.4472499999999986, 0.6789999999999994, nan, 1.1087499999999997, -0.8900000000000006, 0.2450000000000001, -0.4939999999999998, -1.2979999999999983, -1.4959999999999987, -0.4202500000000011], zp_timestamp='2025-12-31T20:15:00')
2025-12-31T22:57:57.782 [DEBUG] [Thread-136179] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:57:57.865 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T22:57:57.878 [DEBUG] [Thread-136182] [transport.py] [_log()] starting thread (client mode): 0xb95f1fc0
2025-12-31T22:57:57.878 [DEBUG] [Thread-136182] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:57:57.893 [DEBUG] [Thread-136182] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T22:57:57.893 [INFO] [Thread-136182] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T22:57:57.901 [DEBUG] [Thread-136182] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:57:57.901 [DEBUG] [Thread-136182] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T22:57:57.901 [DEBUG] [Thread-136182] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:57:57.901 [DEBUG] [Thread-136182] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:57:57.901 [DEBUG] [Thread-136182] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:57:57.901 [DEBUG] [Thread-136182] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:57:57.901 [DEBUG] [Thread-136182] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:57:57.901 [DEBUG] [Thread-136182] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:57:57.901 [DEBUG] [Thread-136182] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:57:57.901 [DEBUG] [Thread-136182] [transport.py] [_log()] client lang: <none>
2025-12-31T22:57:57.901 [DEBUG] [Thread-136182] [transport.py] [_log()] server lang: <none>
2025-12-31T22:57:57.901 [DEBUG] [Thread-136182] [transport.py] [_log()] kex follows: False
2025-12-31T22:57:57.901 [DEBUG] [Thread-136182] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:57:57.901 [DEBUG] [Thread-136182] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:57:57.902 [DEBUG] [Thread-136182] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:57:57.902 [DEBUG] [Thread-136182] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:57:57.902 [DEBUG] [Thread-136182] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:57:57.902 [DEBUG] [Thread-136182] [transport.py] [_log()] Compression: none
2025-12-31T22:57:57.902 [DEBUG] [Thread-136182] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:57:57.959 [DEBUG] [Thread-136182] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:57:57.960 [DEBUG] [Thread-136182] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:57:57.960 [DEBUG] [Thread-136182] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T22:57:57.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T22:57:57.961 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:57:58.015 [DEBUG] [Thread-136182] [transport.py] [_log()] userauth is OK
2025-12-31T22:57:58.016 [DEBUG] [Thread-136182] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:57:58.016 [DEBUG] [Thread-136182] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:57:58.016 [DEBUG] [Thread-136182] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T22:57:58.016 [DEBUG] [Thread-136182] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:57:58.041 [INFO] [Thread-136182] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:57:58.041 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T22:57:58.042 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:57:58.844 [DEBUG] [Thread-136182] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:57:58.844 [DEBUG] [Thread-136182] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:57:58.892 [DEBUG] [Thread-136182] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:57:58.892 [DEBUG] [Thread-136182] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:57:58.902 [DEBUG] [Thread-136182] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:57:58.911 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:57:58.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T22:57:58.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T22:57:58.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:57:58.931 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:57:58.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:57:58.940 [DEBUG] [Thread-136182] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:58:09.247 [DEBUG] [Thread-136184 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:58:20.064 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:58:20.065 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:58:24.295 [DEBUG] [Thread-136185 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:58:28.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T22:58:28.962 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T22:58:28.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-12-31T22:58:29.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 22, 58, 7), 4.57, 74.16, 0.0, 18.02, 15.44, 0, 0, 0, 2, 0, 0),)
2025-12-31T22:58:29.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 22:58:07
2025-12-31T22:58:29.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T22:58:29.934 [DEBUG] [Thread-136186] [transport.py] [_log()] starting thread (client mode): 0xb95f31c0
2025-12-31T22:58:29.934 [DEBUG] [Thread-136186] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:58:29.954 [DEBUG] [Thread-136186] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T22:58:29.954 [INFO] [Thread-136186] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T22:58:29.957 [DEBUG] [Thread-136186] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:58:29.957 [DEBUG] [Thread-136186] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T22:58:29.957 [DEBUG] [Thread-136186] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:58:29.957 [DEBUG] [Thread-136186] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:58:29.957 [DEBUG] [Thread-136186] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:58:29.957 [DEBUG] [Thread-136186] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:58:29.957 [DEBUG] [Thread-136186] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:58:29.957 [DEBUG] [Thread-136186] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:58:29.957 [DEBUG] [Thread-136186] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:58:29.957 [DEBUG] [Thread-136186] [transport.py] [_log()] client lang: <none>
2025-12-31T22:58:29.957 [DEBUG] [Thread-136186] [transport.py] [_log()] server lang: <none>
2025-12-31T22:58:29.957 [DEBUG] [Thread-136186] [transport.py] [_log()] kex follows: False
2025-12-31T22:58:29.958 [DEBUG] [Thread-136186] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:58:29.958 [DEBUG] [Thread-136186] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:58:29.958 [DEBUG] [Thread-136186] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:58:29.958 [DEBUG] [Thread-136186] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:58:29.958 [DEBUG] [Thread-136186] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:58:29.958 [DEBUG] [Thread-136186] [transport.py] [_log()] Compression: none
2025-12-31T22:58:29.958 [DEBUG] [Thread-136186] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:58:29.973 [DEBUG] [Thread-136186] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:58:29.973 [DEBUG] [Thread-136186] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:58:29.974 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T22:58:29.974 [DEBUG] [Thread-136186] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T22:58:29.975 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:58:29.976 [DEBUG] [Thread-136186] [transport.py] [_log()] userauth is OK
2025-12-31T22:58:29.977 [DEBUG] [Thread-136186] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:58:29.977 [DEBUG] [Thread-136186] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:58:29.977 [DEBUG] [Thread-136186] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T22:58:29.977 [DEBUG] [Thread-136186] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:58:30.002 [INFO] [Thread-136186] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:58:30.002 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:58:30.643 [DEBUG] [Thread-136186] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:58:30.643 [DEBUG] [Thread-136186] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:58:30.643 [DEBUG] [Thread-136186] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T22:58:30.684 [DEBUG] [Thread-136186] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:58:30.684 [DEBUG] [Thread-136186] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:58:30.688 [DEBUG] [Thread-136186] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:58:30.701 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:58:30.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T22:58:30.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T22:58:30.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T22:58:30.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:58:30.715 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T22:58:30.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:58:30.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:58:30.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T22:58:30.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.873400 -999.00  +15.60  16.31     76  +11.50 1 2 1 1 1     0    0 3.54 -28.74 ..E.. 20.4 16.3 190.6 21.5 16.8 -16.6 16.6 -16.9 16.4 -16.0 -999.0 -999.0
2025-12-31T22:58:30.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T22:58:30.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T22:58:30.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.873400
2025-12-31T22:58:30.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T22:58:30.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T22:58:30.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T22:58:30.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T22:58:30.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T22:58:30.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T22:58:07', tmtdew=4.57, humidity=74.16, cloud=0.0, wind=18.02, temperature=15.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T22:58:07', seeing=1.01, atlas_timestamp='2025-12-31T20:57:41.760', atlas_cloud=2, atlas_rain=1, zp_data=[0.2602499999999992, 0.44475000000000087, 0.7302500000000007, 0.22100000000000009, 0.665, 0.8302500000000013, 0.5669999999999993, 0.4302500000000009, 0.39949999999999974, 0.4095000000000013, 0.8602499999999988, 0.41999999999999993, 0.3490000000000002, 0.4262499999999996, 0.5399999999999991, 0.019000000000000128, 0.8522499999999997, 0.4294999999999991, 0.9249999999999989, 0.5342499999999992, 0.34750000000000014, 0.24074999999999847, -0.13574999999999982, -0.4472499999999986, 0.6789999999999994, nan, 1.1087499999999997, -0.8900000000000006, 0.2450000000000001, -0.4939999999999998, -1.2979999999999983, -1.4959999999999987, -0.4202500000000011], zp_timestamp='2025-12-31T20:15:00')
2025-12-31T22:58:30.718 [DEBUG] [Thread-136186] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:58:30.801 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T22:58:30.812 [DEBUG] [Thread-136189] [transport.py] [_log()] starting thread (client mode): 0xb95f33d0
2025-12-31T22:58:30.813 [DEBUG] [Thread-136189] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:58:30.828 [DEBUG] [Thread-136189] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T22:58:30.828 [INFO] [Thread-136189] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T22:58:30.835 [DEBUG] [Thread-136189] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:58:30.835 [DEBUG] [Thread-136189] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T22:58:30.836 [DEBUG] [Thread-136189] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:58:30.836 [DEBUG] [Thread-136189] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:58:30.836 [DEBUG] [Thread-136189] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:58:30.836 [DEBUG] [Thread-136189] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:58:30.836 [DEBUG] [Thread-136189] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:58:30.836 [DEBUG] [Thread-136189] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:58:30.836 [DEBUG] [Thread-136189] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:58:30.836 [DEBUG] [Thread-136189] [transport.py] [_log()] client lang: <none>
2025-12-31T22:58:30.836 [DEBUG] [Thread-136189] [transport.py] [_log()] server lang: <none>
2025-12-31T22:58:30.836 [DEBUG] [Thread-136189] [transport.py] [_log()] kex follows: False
2025-12-31T22:58:30.836 [DEBUG] [Thread-136189] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:58:30.836 [DEBUG] [Thread-136189] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:58:30.836 [DEBUG] [Thread-136189] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:58:30.836 [DEBUG] [Thread-136189] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:58:30.836 [DEBUG] [Thread-136189] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:58:30.836 [DEBUG] [Thread-136189] [transport.py] [_log()] Compression: none
2025-12-31T22:58:30.836 [DEBUG] [Thread-136189] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:58:30.900 [DEBUG] [Thread-136189] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:58:30.900 [DEBUG] [Thread-136189] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:58:30.901 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T22:58:30.901 [DEBUG] [Thread-136189] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T22:58:30.902 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:58:30.959 [DEBUG] [Thread-136189] [transport.py] [_log()] userauth is OK
2025-12-31T22:58:30.959 [DEBUG] [Thread-136189] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:58:30.960 [DEBUG] [Thread-136189] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:58:30.960 [DEBUG] [Thread-136189] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T22:58:30.960 [DEBUG] [Thread-136189] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:58:30.978 [INFO] [Thread-136189] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:58:30.979 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T22:58:30.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:58:31.829 [DEBUG] [Thread-136189] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:58:31.830 [DEBUG] [Thread-136189] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:58:31.878 [DEBUG] [Thread-136189] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:58:31.878 [DEBUG] [Thread-136189] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:58:31.887 [DEBUG] [Thread-136189] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:58:31.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:58:31.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T22:58:31.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T22:58:31.915 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:58:31.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:58:31.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:58:31.924 [DEBUG] [Thread-136189] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:58:39.326 [DEBUG] [Thread-136191 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:58:50.081 [DEBUG] [Thread-136192 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:58:54.363 [DEBUG] [Thread-136193 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:59:01.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T22:59:01.946 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T22:59:01.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T22:59:02.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 22, 58, 39), 4.57, 74.16, 0.0, 18.58, 15.43, 0, 0, 0, 2, 0, 0),)
2025-12-31T22:59:02.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 22:58:39
2025-12-31T22:59:02.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T22:59:02.973 [DEBUG] [Thread-136194] [transport.py] [_log()] starting thread (client mode): 0xb95f3370
2025-12-31T22:59:02.973 [DEBUG] [Thread-136194] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:59:02.995 [DEBUG] [Thread-136194] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T22:59:02.995 [INFO] [Thread-136194] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T22:59:02.998 [DEBUG] [Thread-136194] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:59:02.998 [DEBUG] [Thread-136194] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T22:59:02.998 [DEBUG] [Thread-136194] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:59:02.998 [DEBUG] [Thread-136194] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:59:02.998 [DEBUG] [Thread-136194] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:59:02.998 [DEBUG] [Thread-136194] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:59:02.998 [DEBUG] [Thread-136194] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:59:02.998 [DEBUG] [Thread-136194] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:59:02.998 [DEBUG] [Thread-136194] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:59:02.998 [DEBUG] [Thread-136194] [transport.py] [_log()] client lang: <none>
2025-12-31T22:59:02.998 [DEBUG] [Thread-136194] [transport.py] [_log()] server lang: <none>
2025-12-31T22:59:02.998 [DEBUG] [Thread-136194] [transport.py] [_log()] kex follows: False
2025-12-31T22:59:02.998 [DEBUG] [Thread-136194] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:59:02.998 [DEBUG] [Thread-136194] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:59:02.998 [DEBUG] [Thread-136194] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:59:02.998 [DEBUG] [Thread-136194] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:59:02.998 [DEBUG] [Thread-136194] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:59:02.998 [DEBUG] [Thread-136194] [transport.py] [_log()] Compression: none
2025-12-31T22:59:02.998 [DEBUG] [Thread-136194] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:59:03.014 [DEBUG] [Thread-136194] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:59:03.014 [DEBUG] [Thread-136194] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:59:03.014 [DEBUG] [Thread-136194] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T22:59:03.014 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T22:59:03.014 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:59:03.014 [DEBUG] [Thread-136194] [transport.py] [_log()] userauth is OK
2025-12-31T22:59:03.015 [DEBUG] [Thread-136194] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:59:03.015 [DEBUG] [Thread-136194] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:59:03.015 [DEBUG] [Thread-136194] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T22:59:03.015 [DEBUG] [Thread-136194] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:59:03.025 [INFO] [Thread-136194] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:59:03.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:59:03.662 [DEBUG] [Thread-136194] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:59:03.662 [DEBUG] [Thread-136194] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:59:03.662 [DEBUG] [Thread-136194] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T22:59:03.703 [DEBUG] [Thread-136194] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:59:03.704 [DEBUG] [Thread-136194] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:59:03.706 [DEBUG] [Thread-136194] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:59:03.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:59:03.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T22:59:03.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T22:59:03.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T22:59:03.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:59:03.723 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T22:59:03.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:59:03.723 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:59:03.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T22:59:03.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.873747 -999.00  +15.50  11.24     76  +11.50 1 2 1 1 1     0    0 3.36 -31.68 Z.ES. 11.0 11.2 198.2 16.7 16.8 -16.9 16.6 -17.3 16.5 -16.2 16.8 -16.0
2025-12-31T22:59:03.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T22:59:03.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T22:59:03.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.873747
2025-12-31T22:59:03.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T22:59:03.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T22:59:03.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T22:59:03.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T22:59:03.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T22:59:03.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T22:58:39', tmtdew=4.57, humidity=74.16, cloud=0.0, wind=18.58, temperature=15.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T22:58:39', seeing=1.04, atlas_timestamp='2025-12-31T20:58:11.741', atlas_cloud=2, atlas_rain=1, zp_data=[0.2602499999999992, 0.44475000000000087, 0.7302500000000007, 0.22100000000000009, 0.665, 0.8302500000000013, 0.5669999999999993, 0.4302500000000009, 0.39949999999999974, 0.4095000000000013, 0.8602499999999988, 0.41999999999999993, 0.3490000000000002, 0.4262499999999996, 0.5399999999999991, 0.019000000000000128, 0.8522499999999997, 0.4294999999999991, 0.9249999999999989, 0.5342499999999992, 0.34750000000000014, 0.24074999999999847, -0.13574999999999982, -0.4472499999999986, 0.6789999999999994, nan, 1.1087499999999997, -0.8900000000000006, 0.2450000000000001, -0.4939999999999998, -1.2979999999999983, -1.4959999999999987, -0.4202500000000011], zp_timestamp='2025-12-31T20:15:00')
2025-12-31T22:59:03.724 [DEBUG] [Thread-136194] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:59:03.798 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T22:59:03.810 [DEBUG] [Thread-136197] [transport.py] [_log()] starting thread (client mode): 0xb95f3550
2025-12-31T22:59:03.810 [DEBUG] [Thread-136197] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:59:03.825 [DEBUG] [Thread-136197] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T22:59:03.825 [INFO] [Thread-136197] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T22:59:03.832 [DEBUG] [Thread-136197] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:59:03.832 [DEBUG] [Thread-136197] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T22:59:03.832 [DEBUG] [Thread-136197] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:59:03.832 [DEBUG] [Thread-136197] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:59:03.832 [DEBUG] [Thread-136197] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:59:03.832 [DEBUG] [Thread-136197] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:59:03.832 [DEBUG] [Thread-136197] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:59:03.832 [DEBUG] [Thread-136197] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:59:03.832 [DEBUG] [Thread-136197] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:59:03.832 [DEBUG] [Thread-136197] [transport.py] [_log()] client lang: <none>
2025-12-31T22:59:03.832 [DEBUG] [Thread-136197] [transport.py] [_log()] server lang: <none>
2025-12-31T22:59:03.832 [DEBUG] [Thread-136197] [transport.py] [_log()] kex follows: False
2025-12-31T22:59:03.832 [DEBUG] [Thread-136197] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:59:03.832 [DEBUG] [Thread-136197] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:59:03.832 [DEBUG] [Thread-136197] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:59:03.832 [DEBUG] [Thread-136197] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:59:03.832 [DEBUG] [Thread-136197] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:59:03.832 [DEBUG] [Thread-136197] [transport.py] [_log()] Compression: none
2025-12-31T22:59:03.832 [DEBUG] [Thread-136197] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:59:03.890 [DEBUG] [Thread-136197] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:59:03.890 [DEBUG] [Thread-136197] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:59:03.890 [DEBUG] [Thread-136197] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T22:59:03.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T22:59:03.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:59:03.946 [DEBUG] [Thread-136197] [transport.py] [_log()] userauth is OK
2025-12-31T22:59:03.946 [DEBUG] [Thread-136197] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:59:03.946 [DEBUG] [Thread-136197] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:59:03.947 [DEBUG] [Thread-136197] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T22:59:03.947 [DEBUG] [Thread-136197] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:59:03.960 [INFO] [Thread-136197] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:59:03.960 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T22:59:03.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:59:04.792 [DEBUG] [Thread-136197] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:59:04.792 [DEBUG] [Thread-136197] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:59:04.840 [DEBUG] [Thread-136197] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:59:04.840 [DEBUG] [Thread-136197] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:59:04.849 [DEBUG] [Thread-136197] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:59:04.857 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:59:04.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T22:59:04.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-12-31T22:59:04.878 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:59:04.878 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:59:04.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:59:04.885 [DEBUG] [Thread-136197] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:59:09.398 [DEBUG] [Thread-136199 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:59:20.272 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:59:20.273 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:59:24.458 [DEBUG] [Thread-136200 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:59:34.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T22:59:34.909 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T22:59:34.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T22:59:35.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 22, 59, 11), 4.57, 74.16, 0.0, 20.22, 15.43, 0, 0, 0, 2, 0, 0),)
2025-12-31T22:59:35.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 22:59:11
2025-12-31T22:59:35.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T22:59:35.880 [DEBUG] [Thread-136201] [transport.py] [_log()] starting thread (client mode): 0xb95f21d0
2025-12-31T22:59:35.880 [DEBUG] [Thread-136201] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:59:35.900 [DEBUG] [Thread-136201] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T22:59:35.900 [INFO] [Thread-136201] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T22:59:35.904 [DEBUG] [Thread-136201] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:59:35.904 [DEBUG] [Thread-136201] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T22:59:35.904 [DEBUG] [Thread-136201] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:59:35.904 [DEBUG] [Thread-136201] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:59:35.904 [DEBUG] [Thread-136201] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:59:35.904 [DEBUG] [Thread-136201] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:59:35.904 [DEBUG] [Thread-136201] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:59:35.904 [DEBUG] [Thread-136201] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:59:35.904 [DEBUG] [Thread-136201] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:59:35.904 [DEBUG] [Thread-136201] [transport.py] [_log()] client lang: <none>
2025-12-31T22:59:35.904 [DEBUG] [Thread-136201] [transport.py] [_log()] server lang: <none>
2025-12-31T22:59:35.904 [DEBUG] [Thread-136201] [transport.py] [_log()] kex follows: False
2025-12-31T22:59:35.904 [DEBUG] [Thread-136201] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:59:35.904 [DEBUG] [Thread-136201] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:59:35.904 [DEBUG] [Thread-136201] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:59:35.905 [DEBUG] [Thread-136201] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:59:35.905 [DEBUG] [Thread-136201] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:59:35.905 [DEBUG] [Thread-136201] [transport.py] [_log()] Compression: none
2025-12-31T22:59:35.905 [DEBUG] [Thread-136201] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:59:35.920 [DEBUG] [Thread-136201] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:59:35.920 [DEBUG] [Thread-136201] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:59:35.921 [DEBUG] [Thread-136201] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T22:59:35.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T22:59:35.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:59:35.923 [DEBUG] [Thread-136201] [transport.py] [_log()] userauth is OK
2025-12-31T22:59:35.923 [DEBUG] [Thread-136201] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:59:35.923 [DEBUG] [Thread-136201] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:59:35.923 [DEBUG] [Thread-136201] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T22:59:35.923 [DEBUG] [Thread-136201] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:59:35.947 [INFO] [Thread-136201] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:59:35.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:59:36.558 [DEBUG] [Thread-136201] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:59:36.558 [DEBUG] [Thread-136201] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:59:36.558 [DEBUG] [Thread-136201] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T22:59:36.599 [DEBUG] [Thread-136201] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:59:36.599 [DEBUG] [Thread-136201] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:59:36.602 [DEBUG] [Thread-136201] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:59:36.616 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:59:36.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T22:59:36.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T22:59:36.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T22:59:36.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:59:36.628 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T22:59:36.628 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:59:36.628 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:59:36.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T22:59:36.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.874441 -999.00  +15.60  11.51     76  +11.50 1 2 1 1 1     0    0 3.22 -33.58 z..S. 10.5 11.5 197.8 17.4 16.8 -17.1 16.6 -17.0 16.4 -16.0 16.8 -16.3
2025-12-31T22:59:36.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T22:59:36.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T22:59:36.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.874441
2025-12-31T22:59:36.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T22:59:36.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T22:59:36.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T22:59:36.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T22:59:36.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T22:59:36.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T22:59:11', tmtdew=4.57, humidity=74.16, cloud=0.0, wind=20.22, temperature=15.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T22:59:11', seeing=1.06, atlas_timestamp='2025-12-31T20:59:11.702', atlas_cloud=2, atlas_rain=1, zp_data=[0.2602499999999992, 0.44475000000000087, 0.7302500000000007, 0.22100000000000009, 0.665, 0.8302500000000013, 0.5669999999999993, 0.4302500000000009, 0.39949999999999974, 0.4095000000000013, 0.8602499999999988, 0.41999999999999993, 0.3490000000000002, 0.4262499999999996, 0.5399999999999991, 0.019000000000000128, 0.8522499999999997, 0.4294999999999991, 0.9249999999999989, 0.5342499999999992, 0.34750000000000014, 0.24074999999999847, -0.13574999999999982, -0.4472499999999986, 0.6789999999999994, nan, 1.1087499999999997, -0.8900000000000006, 0.2450000000000001, -0.4939999999999998, -1.2979999999999983, -1.4959999999999987, -0.4202500000000011], zp_timestamp='2025-12-31T20:15:00')
2025-12-31T22:59:36.630 [DEBUG] [Thread-136201] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:59:36.713 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T22:59:36.726 [DEBUG] [Thread-136204] [transport.py] [_log()] starting thread (client mode): 0xb95f1510
2025-12-31T22:59:36.726 [DEBUG] [Thread-136204] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T22:59:36.741 [DEBUG] [Thread-136204] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T22:59:36.741 [INFO] [Thread-136204] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T22:59:36.748 [DEBUG] [Thread-136204] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T22:59:36.749 [DEBUG] [Thread-136204] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T22:59:36.749 [DEBUG] [Thread-136204] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T22:59:36.749 [DEBUG] [Thread-136204] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:59:36.749 [DEBUG] [Thread-136204] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T22:59:36.749 [DEBUG] [Thread-136204] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:59:36.750 [DEBUG] [Thread-136204] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T22:59:36.750 [DEBUG] [Thread-136204] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T22:59:36.750 [DEBUG] [Thread-136204] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T22:59:36.750 [DEBUG] [Thread-136204] [transport.py] [_log()] client lang: <none>
2025-12-31T22:59:36.750 [DEBUG] [Thread-136204] [transport.py] [_log()] server lang: <none>
2025-12-31T22:59:36.750 [DEBUG] [Thread-136204] [transport.py] [_log()] kex follows: False
2025-12-31T22:59:36.750 [DEBUG] [Thread-136204] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T22:59:36.750 [DEBUG] [Thread-136204] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T22:59:36.750 [DEBUG] [Thread-136204] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T22:59:36.750 [DEBUG] [Thread-136204] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T22:59:36.750 [DEBUG] [Thread-136204] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T22:59:36.750 [DEBUG] [Thread-136204] [transport.py] [_log()] Compression: none
2025-12-31T22:59:36.750 [DEBUG] [Thread-136204] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T22:59:36.807 [DEBUG] [Thread-136204] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T22:59:36.808 [DEBUG] [Thread-136204] [transport.py] [_log()] Switch to new keys ...
2025-12-31T22:59:36.808 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T22:59:36.809 [DEBUG] [Thread-136204] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T22:59:36.810 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T22:59:36.863 [DEBUG] [Thread-136204] [transport.py] [_log()] userauth is OK
2025-12-31T22:59:36.863 [DEBUG] [Thread-136204] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T22:59:36.863 [DEBUG] [Thread-136204] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T22:59:36.863 [DEBUG] [Thread-136204] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T22:59:36.864 [DEBUG] [Thread-136204] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T22:59:36.882 [INFO] [Thread-136204] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T22:59:36.883 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T22:59:36.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T22:59:37.716 [DEBUG] [Thread-136204] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T22:59:37.717 [DEBUG] [Thread-136204] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T22:59:37.765 [DEBUG] [Thread-136204] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T22:59:37.765 [DEBUG] [Thread-136204] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T22:59:37.774 [DEBUG] [Thread-136204] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T22:59:37.783 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T22:59:37.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-12-31T22:59:37.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-12-31T22:59:37.802 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T22:59:37.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T22:59:37.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T22:59:37.811 [DEBUG] [Thread-136204] [transport.py] [_log()] EOF in transport thread
2025-12-31T22:59:39.494 [DEBUG] [Thread-136206 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:59:50.171 [DEBUG] [Thread-136207 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T22:59:54.537 [DEBUG] [Thread-136208 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:00:07.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T23:00:07.834 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T23:00:07.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T23:00:08.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 22, 59, 43), 4.62, 74.16, 0.0, 19.66, 15.41, 0, 0, 0, 2, 0, 0),)
2025-12-31T23:00:08.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 22:59:43
2025-12-31T23:00:08.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T23:00:08.807 [DEBUG] [Thread-136209] [transport.py] [_log()] starting thread (client mode): 0xb95f0f40
2025-12-31T23:00:08.808 [DEBUG] [Thread-136209] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:00:08.828 [DEBUG] [Thread-136209] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T23:00:08.828 [INFO] [Thread-136209] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T23:00:08.831 [DEBUG] [Thread-136209] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:00:08.831 [DEBUG] [Thread-136209] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T23:00:08.831 [DEBUG] [Thread-136209] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:00:08.831 [DEBUG] [Thread-136209] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:00:08.831 [DEBUG] [Thread-136209] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:00:08.831 [DEBUG] [Thread-136209] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:00:08.831 [DEBUG] [Thread-136209] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:00:08.831 [DEBUG] [Thread-136209] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:00:08.831 [DEBUG] [Thread-136209] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:00:08.831 [DEBUG] [Thread-136209] [transport.py] [_log()] client lang: <none>
2025-12-31T23:00:08.831 [DEBUG] [Thread-136209] [transport.py] [_log()] server lang: <none>
2025-12-31T23:00:08.831 [DEBUG] [Thread-136209] [transport.py] [_log()] kex follows: False
2025-12-31T23:00:08.831 [DEBUG] [Thread-136209] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:00:08.831 [DEBUG] [Thread-136209] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:00:08.832 [DEBUG] [Thread-136209] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:00:08.832 [DEBUG] [Thread-136209] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:00:08.832 [DEBUG] [Thread-136209] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:00:08.832 [DEBUG] [Thread-136209] [transport.py] [_log()] Compression: none
2025-12-31T23:00:08.832 [DEBUG] [Thread-136209] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:00:08.840 [DEBUG] [Thread-136209] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:00:08.840 [DEBUG] [Thread-136209] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:00:08.841 [DEBUG] [Thread-136209] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T23:00:08.841 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T23:00:08.842 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:00:08.885 [DEBUG] [Thread-136209] [transport.py] [_log()] userauth is OK
2025-12-31T23:00:08.885 [DEBUG] [Thread-136209] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:00:08.885 [DEBUG] [Thread-136209] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:00:08.886 [DEBUG] [Thread-136209] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T23:00:08.886 [DEBUG] [Thread-136209] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:00:08.917 [INFO] [Thread-136209] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:00:08.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:00:09.572 [DEBUG] [Thread-136211 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:00:17.671 [DEBUG] [Thread-136209] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:00:17.671 [DEBUG] [Thread-136209] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:00:17.672 [DEBUG] [Thread-136209] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T23:00:17.712 [DEBUG] [Thread-136209] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:00:17.712 [DEBUG] [Thread-136209] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:00:17.714 [DEBUG] [Thread-136209] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:00:17.804 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:00:17.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T23:00:17.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T23:00:17.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T23:00:17.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:00:17.822 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T23:00:17.822 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:00:17.823 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:00:17.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T23:00:17.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.874789 -999.00  +15.60  13.19     76  +11.50 1 2 1 1 1     0    0 3.35 -33.23 z..S. 13.3 13.2 192.8 21.6 16.8 -17.2 16.6 -17.0 16.4 -16.0 16.8 -16.6
2025-12-31T23:00:17.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T23:00:17.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T23:00:17.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.874789
2025-12-31T23:00:17.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T23:00:17.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T23:00:17.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T23:00:17.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T23:00:17.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T23:00:17.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T22:59:43', tmtdew=4.62, humidity=74.16, cloud=0.0, wind=19.66, temperature=15.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T22:59:43', seeing=0.99, atlas_timestamp='2025-12-31T20:59:41.770', atlas_cloud=2, atlas_rain=1, zp_data=[0.2602499999999992, 0.44475000000000087, 0.7302500000000007, 0.22100000000000009, 0.665, 0.8302500000000013, 0.5669999999999993, 0.4302500000000009, 0.39949999999999974, 0.4095000000000013, 0.8602499999999988, 0.41999999999999993, 0.3490000000000002, 0.4262499999999996, 0.5399999999999991, 0.019000000000000128, 0.8522499999999997, 0.4294999999999991, 0.9249999999999989, 0.5342499999999992, 0.34750000000000014, 0.24074999999999847, -0.13574999999999982, -0.4472499999999986, 0.6789999999999994, nan, 1.1087499999999997, -0.8900000000000006, 0.2450000000000001, -0.4939999999999998, -1.2979999999999983, -1.4959999999999987, -0.4202500000000011], zp_timestamp='2025-12-31T20:15:00')
2025-12-31T23:00:17.824 [DEBUG] [Thread-136209] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:00:17.898 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T23:00:17.909 [DEBUG] [Thread-136213] [transport.py] [_log()] starting thread (client mode): 0xb1794eb0
2025-12-31T23:00:17.910 [DEBUG] [Thread-136213] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:00:17.924 [DEBUG] [Thread-136213] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T23:00:17.924 [INFO] [Thread-136213] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T23:00:17.932 [DEBUG] [Thread-136213] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:00:17.933 [DEBUG] [Thread-136213] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T23:00:17.933 [DEBUG] [Thread-136213] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:00:17.933 [DEBUG] [Thread-136213] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:00:17.933 [DEBUG] [Thread-136213] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:00:17.933 [DEBUG] [Thread-136213] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:00:17.933 [DEBUG] [Thread-136213] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:00:17.933 [DEBUG] [Thread-136213] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:00:17.933 [DEBUG] [Thread-136213] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:00:17.933 [DEBUG] [Thread-136213] [transport.py] [_log()] client lang: <none>
2025-12-31T23:00:17.933 [DEBUG] [Thread-136213] [transport.py] [_log()] server lang: <none>
2025-12-31T23:00:17.933 [DEBUG] [Thread-136213] [transport.py] [_log()] kex follows: False
2025-12-31T23:00:17.933 [DEBUG] [Thread-136213] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:00:17.933 [DEBUG] [Thread-136213] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:00:17.933 [DEBUG] [Thread-136213] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:00:17.933 [DEBUG] [Thread-136213] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:00:17.933 [DEBUG] [Thread-136213] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:00:17.933 [DEBUG] [Thread-136213] [transport.py] [_log()] Compression: none
2025-12-31T23:00:17.933 [DEBUG] [Thread-136213] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:00:17.989 [DEBUG] [Thread-136213] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:00:17.989 [DEBUG] [Thread-136213] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:00:17.989 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T23:00:17.989 [DEBUG] [Thread-136213] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T23:00:17.989 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:00:18.050 [DEBUG] [Thread-136213] [transport.py] [_log()] userauth is OK
2025-12-31T23:00:18.050 [DEBUG] [Thread-136213] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:00:18.050 [DEBUG] [Thread-136213] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:00:18.050 [DEBUG] [Thread-136213] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T23:00:18.050 [DEBUG] [Thread-136213] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:00:18.063 [INFO] [Thread-136213] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:00:18.063 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T23:00:18.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:00:18.867 [DEBUG] [Thread-136213] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:00:18.867 [DEBUG] [Thread-136213] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:00:18.915 [DEBUG] [Thread-136213] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:00:18.915 [DEBUG] [Thread-136213] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:00:18.924 [DEBUG] [Thread-136213] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:00:18.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:00:18.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-12-31T23:00:18.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T23:00:18.947 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:00:18.947 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:00:18.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:00:18.955 [DEBUG] [Thread-136213] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:00:20.476 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:00:20.477 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:00:24.607 [DEBUG] [Thread-136215 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:00:39.667 [DEBUG] [Thread-136216 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:00:48.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T23:00:48.977 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T23:00:48.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T23:00:49.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 23, 0, 15), 4.62, 74.19, 0.0, 18.3, 15.43, 0, 0, 0, 2, 0, 0),)
2025-12-31T23:00:49.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 23:00:15
2025-12-31T23:00:49.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T23:00:50.008 [DEBUG] [Thread-136217] [transport.py] [_log()] starting thread (client mode): 0xb1796f20
2025-12-31T23:00:50.008 [DEBUG] [Thread-136217] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:00:50.029 [DEBUG] [Thread-136217] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T23:00:50.029 [INFO] [Thread-136217] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T23:00:50.032 [DEBUG] [Thread-136217] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:00:50.032 [DEBUG] [Thread-136217] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T23:00:50.033 [DEBUG] [Thread-136217] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:00:50.033 [DEBUG] [Thread-136217] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:00:50.033 [DEBUG] [Thread-136217] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:00:50.033 [DEBUG] [Thread-136217] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:00:50.033 [DEBUG] [Thread-136217] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:00:50.033 [DEBUG] [Thread-136217] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:00:50.033 [DEBUG] [Thread-136217] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:00:50.033 [DEBUG] [Thread-136217] [transport.py] [_log()] client lang: <none>
2025-12-31T23:00:50.033 [DEBUG] [Thread-136217] [transport.py] [_log()] server lang: <none>
2025-12-31T23:00:50.033 [DEBUG] [Thread-136217] [transport.py] [_log()] kex follows: False
2025-12-31T23:00:50.033 [DEBUG] [Thread-136217] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:00:50.033 [DEBUG] [Thread-136217] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:00:50.033 [DEBUG] [Thread-136217] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:00:50.033 [DEBUG] [Thread-136217] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:00:50.033 [DEBUG] [Thread-136217] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:00:50.033 [DEBUG] [Thread-136217] [transport.py] [_log()] Compression: none
2025-12-31T23:00:50.033 [DEBUG] [Thread-136217] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:00:50.052 [DEBUG] [Thread-136217] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:00:50.053 [DEBUG] [Thread-136217] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:00:50.053 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T23:00:50.053 [DEBUG] [Thread-136217] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T23:00:50.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:00:50.055 [DEBUG] [Thread-136217] [transport.py] [_log()] userauth is OK
2025-12-31T23:00:50.055 [DEBUG] [Thread-136217] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:00:50.056 [DEBUG] [Thread-136217] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:00:50.056 [DEBUG] [Thread-136217] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T23:00:50.056 [DEBUG] [Thread-136217] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:00:50.079 [INFO] [Thread-136217] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:00:50.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:00:50.248 [DEBUG] [Thread-136219 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:00:50.713 [DEBUG] [Thread-136217] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:00:50.714 [DEBUG] [Thread-136217] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:00:50.714 [DEBUG] [Thread-136217] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T23:00:50.755 [DEBUG] [Thread-136217] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:00:50.755 [DEBUG] [Thread-136217] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:00:50.759 [DEBUG] [Thread-136217] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:00:50.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:00:50.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T23:00:50.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T23:00:50.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T23:00:50.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:00:50.781 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T23:00:50.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:00:50.781 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:00:50.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T23:00:50.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.875136 -999.00  +15.60   9.12     76  +11.50 1 2 1 1 1     0    0 3.30 -32.81 z..S. 14.2 9.1 185.0 16.7 16.8 -17.2 16.6 -17.2 16.4 -15.8 16.7 -16.3
2025-12-31T23:00:50.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T23:00:50.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T23:00:50.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.875136
2025-12-31T23:00:50.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T23:00:50.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T23:00:50.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T23:00:50.783 [DEBUG] [Thread-136217] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:00:50.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T23:00:50.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T23:00:50.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T23:00:15', tmtdew=4.62, humidity=74.19, cloud=0.0, wind=18.3, temperature=15.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T23:00:47', seeing=0.96, atlas_timestamp='2025-12-31T21:00:11.750', atlas_cloud=2, atlas_rain=1, zp_data=[0.2602499999999992, 0.44475000000000087, 0.7302500000000007, 0.22100000000000009, 0.665, 0.8302500000000013, 0.5669999999999993, 0.4302500000000009, 0.39949999999999974, 0.4095000000000013, 0.8602499999999988, 0.41999999999999993, 0.3490000000000002, 0.4262499999999996, 0.5399999999999991, 0.019000000000000128, 0.8522499999999997, 0.4294999999999991, 0.9249999999999989, 0.5342499999999992, 0.34750000000000014, 0.24074999999999847, -0.13574999999999982, -0.4472499999999986, 0.6789999999999994, nan, 1.1087499999999997, -0.8900000000000006, 0.2450000000000001, -0.4939999999999998, -1.2979999999999983, -1.4959999999999987, -0.4202500000000011], zp_timestamp='2025-12-31T20:15:00')
2025-12-31T23:00:50.865 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T23:00:50.877 [DEBUG] [Thread-136221] [transport.py] [_log()] starting thread (client mode): 0xb1797b50
2025-12-31T23:00:50.877 [DEBUG] [Thread-136221] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:00:50.892 [DEBUG] [Thread-136221] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T23:00:50.892 [INFO] [Thread-136221] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T23:00:50.900 [DEBUG] [Thread-136221] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:00:50.900 [DEBUG] [Thread-136221] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T23:00:50.900 [DEBUG] [Thread-136221] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:00:50.900 [DEBUG] [Thread-136221] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:00:50.900 [DEBUG] [Thread-136221] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:00:50.900 [DEBUG] [Thread-136221] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:00:50.900 [DEBUG] [Thread-136221] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:00:50.900 [DEBUG] [Thread-136221] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:00:50.900 [DEBUG] [Thread-136221] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:00:50.900 [DEBUG] [Thread-136221] [transport.py] [_log()] client lang: <none>
2025-12-31T23:00:50.900 [DEBUG] [Thread-136221] [transport.py] [_log()] server lang: <none>
2025-12-31T23:00:50.900 [DEBUG] [Thread-136221] [transport.py] [_log()] kex follows: False
2025-12-31T23:00:50.900 [DEBUG] [Thread-136221] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:00:50.900 [DEBUG] [Thread-136221] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:00:50.900 [DEBUG] [Thread-136221] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:00:50.901 [DEBUG] [Thread-136221] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:00:50.901 [DEBUG] [Thread-136221] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:00:50.901 [DEBUG] [Thread-136221] [transport.py] [_log()] Compression: none
2025-12-31T23:00:50.901 [DEBUG] [Thread-136221] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:00:50.958 [DEBUG] [Thread-136221] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:00:50.958 [DEBUG] [Thread-136221] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:00:50.958 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T23:00:50.959 [DEBUG] [Thread-136221] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T23:00:50.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:00:51.018 [DEBUG] [Thread-136221] [transport.py] [_log()] userauth is OK
2025-12-31T23:00:51.019 [DEBUG] [Thread-136221] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:00:51.019 [DEBUG] [Thread-136221] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:00:51.019 [DEBUG] [Thread-136221] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T23:00:51.019 [DEBUG] [Thread-136221] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:00:51.041 [INFO] [Thread-136221] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:00:51.041 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T23:00:51.042 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:00:51.879 [DEBUG] [Thread-136221] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:00:51.879 [DEBUG] [Thread-136221] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:00:51.926 [DEBUG] [Thread-136221] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:00:51.927 [DEBUG] [Thread-136221] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:00:51.935 [DEBUG] [Thread-136221] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:00:51.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:00:51.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T23:00:51.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T23:00:51.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:00:51.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:00:51.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:00:51.969 [DEBUG] [Thread-136221] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:00:54.699 [DEBUG] [Thread-136223 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:01:09.745 [DEBUG] [Thread-136224 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:01:20.682 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:01:20.683 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:01:21.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T23:01:21.992 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T23:01:21.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T23:01:22.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 23, 1, 19), 4.58, 74.14, 0.0, 14.58, 15.46, 0, 0, 0, 2, 0, 0),)
2025-12-31T23:01:22.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 23:01:19
2025-12-31T23:01:22.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T23:01:22.998 [DEBUG] [Thread-136225] [transport.py] [_log()] starting thread (client mode): 0xb95f17b0
2025-12-31T23:01:22.998 [DEBUG] [Thread-136225] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:01:23.017 [DEBUG] [Thread-136225] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T23:01:23.017 [INFO] [Thread-136225] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T23:01:23.020 [DEBUG] [Thread-136225] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:01:23.021 [DEBUG] [Thread-136225] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T23:01:23.021 [DEBUG] [Thread-136225] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:01:23.021 [DEBUG] [Thread-136225] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:01:23.021 [DEBUG] [Thread-136225] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:01:23.021 [DEBUG] [Thread-136225] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:01:23.021 [DEBUG] [Thread-136225] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:01:23.021 [DEBUG] [Thread-136225] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:01:23.021 [DEBUG] [Thread-136225] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:01:23.021 [DEBUG] [Thread-136225] [transport.py] [_log()] client lang: <none>
2025-12-31T23:01:23.021 [DEBUG] [Thread-136225] [transport.py] [_log()] server lang: <none>
2025-12-31T23:01:23.021 [DEBUG] [Thread-136225] [transport.py] [_log()] kex follows: False
2025-12-31T23:01:23.021 [DEBUG] [Thread-136225] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:01:23.021 [DEBUG] [Thread-136225] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:01:23.021 [DEBUG] [Thread-136225] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:01:23.021 [DEBUG] [Thread-136225] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:01:23.021 [DEBUG] [Thread-136225] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:01:23.021 [DEBUG] [Thread-136225] [transport.py] [_log()] Compression: none
2025-12-31T23:01:23.021 [DEBUG] [Thread-136225] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:01:23.038 [DEBUG] [Thread-136225] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:01:23.039 [DEBUG] [Thread-136225] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:01:23.039 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T23:01:23.040 [DEBUG] [Thread-136225] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T23:01:23.040 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:01:23.042 [DEBUG] [Thread-136225] [transport.py] [_log()] userauth is OK
2025-12-31T23:01:23.042 [DEBUG] [Thread-136225] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:01:23.042 [DEBUG] [Thread-136225] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:01:23.042 [DEBUG] [Thread-136225] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T23:01:23.043 [DEBUG] [Thread-136225] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:01:23.065 [INFO] [Thread-136225] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:01:23.066 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:01:23.860 [DEBUG] [Thread-136225] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:01:23.860 [DEBUG] [Thread-136225] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:01:23.861 [DEBUG] [Thread-136225] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T23:01:23.901 [DEBUG] [Thread-136225] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:01:23.901 [DEBUG] [Thread-136225] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:01:23.905 [DEBUG] [Thread-136225] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:01:23.916 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:01:23.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T23:01:23.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T23:01:23.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T23:01:23.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:01:23.928 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T23:01:23.928 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:01:23.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:01:23.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T23:01:23.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.875483 -999.00  +15.50   8.15     76  +11.50 1 2 1 1 1     0    0 3.34 -32.55 Z.ES. 12.1 8.2 192.8 19.1 16.7 -17.3 16.6 -17.6 16.4 -16.0 16.7 -16.5
2025-12-31T23:01:23.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T23:01:23.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T23:01:23.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.875483
2025-12-31T23:01:23.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T23:01:23.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T23:01:23.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T23:01:23.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T23:01:23.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T23:01:23.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T23:01:19', tmtdew=4.58, humidity=74.14, cloud=0.0, wind=14.58, temperature=15.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T23:01:19', seeing=0.96, atlas_timestamp='2025-12-31T21:00:41.731', atlas_cloud=2, atlas_rain=1, zp_data=[0.2602499999999992, 0.44475000000000087, 0.7302500000000007, 0.22100000000000009, 0.665, 0.8302500000000013, 0.5669999999999993, 0.4302500000000009, 0.39949999999999974, 0.4095000000000013, 0.8602499999999988, 0.41999999999999993, 0.3490000000000002, 0.4262499999999996, 0.5399999999999991, 0.019000000000000128, 0.8522499999999997, 0.4294999999999991, 0.9249999999999989, 0.5342499999999992, 0.34750000000000014, 0.24074999999999847, -0.13574999999999982, -0.4472499999999986, 0.6789999999999994, nan, 1.1087499999999997, -0.8900000000000006, 0.2450000000000001, -0.4939999999999998, -1.2979999999999983, -1.4959999999999987, -0.4202500000000011], zp_timestamp='2025-12-31T20:15:00')
2025-12-31T23:01:23.931 [DEBUG] [Thread-136225] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:01:24.014 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T23:01:24.025 [DEBUG] [Thread-136228] [transport.py] [_log()] starting thread (client mode): 0xb95f3490
2025-12-31T23:01:24.025 [DEBUG] [Thread-136228] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:01:24.039 [DEBUG] [Thread-136228] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T23:01:24.040 [INFO] [Thread-136228] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T23:01:24.047 [DEBUG] [Thread-136228] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:01:24.047 [DEBUG] [Thread-136228] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T23:01:24.047 [DEBUG] [Thread-136228] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:01:24.047 [DEBUG] [Thread-136228] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:01:24.047 [DEBUG] [Thread-136228] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:01:24.048 [DEBUG] [Thread-136228] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:01:24.048 [DEBUG] [Thread-136228] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:01:24.048 [DEBUG] [Thread-136228] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:01:24.048 [DEBUG] [Thread-136228] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:01:24.048 [DEBUG] [Thread-136228] [transport.py] [_log()] client lang: <none>
2025-12-31T23:01:24.048 [DEBUG] [Thread-136228] [transport.py] [_log()] server lang: <none>
2025-12-31T23:01:24.048 [DEBUG] [Thread-136228] [transport.py] [_log()] kex follows: False
2025-12-31T23:01:24.048 [DEBUG] [Thread-136228] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:01:24.048 [DEBUG] [Thread-136228] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:01:24.048 [DEBUG] [Thread-136228] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:01:24.049 [DEBUG] [Thread-136228] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:01:24.049 [DEBUG] [Thread-136228] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:01:24.049 [DEBUG] [Thread-136228] [transport.py] [_log()] Compression: none
2025-12-31T23:01:24.049 [DEBUG] [Thread-136228] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:01:24.107 [DEBUG] [Thread-136228] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:01:24.108 [DEBUG] [Thread-136228] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:01:24.108 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T23:01:24.109 [DEBUG] [Thread-136228] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T23:01:24.109 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:01:24.167 [DEBUG] [Thread-136228] [transport.py] [_log()] userauth is OK
2025-12-31T23:01:24.167 [DEBUG] [Thread-136228] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:01:24.168 [DEBUG] [Thread-136228] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:01:24.168 [DEBUG] [Thread-136228] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T23:01:24.168 [DEBUG] [Thread-136228] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:01:24.188 [INFO] [Thread-136228] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:01:24.188 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T23:01:24.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:01:24.780 [DEBUG] [Thread-136230 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:01:25.013 [DEBUG] [Thread-136228] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:01:25.014 [DEBUG] [Thread-136228] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:01:25.062 [DEBUG] [Thread-136228] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:01:25.062 [DEBUG] [Thread-136228] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:01:25.071 [DEBUG] [Thread-136228] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:01:25.080 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:01:25.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T23:01:25.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T23:01:25.099 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:01:25.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:01:25.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:01:25.108 [DEBUG] [Thread-136228] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:01:39.824 [DEBUG] [Thread-136231 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:01:50.323 [DEBUG] [Thread-136232 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:01:54.855 [DEBUG] [Thread-136233 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:01:55.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T23:01:55.131 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T23:01:55.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T23:01:55.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 23, 1, 51), 4.59, 74.09, 0.0, 17.57, 15.39, 0, 0, 0, 2, 0, 0),)
2025-12-31T23:01:55.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 23:01:51
2025-12-31T23:01:55.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T23:01:56.126 [DEBUG] [Thread-136234] [transport.py] [_log()] starting thread (client mode): 0xb1745ff0
2025-12-31T23:01:56.126 [DEBUG] [Thread-136234] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:01:56.141 [DEBUG] [Thread-136234] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T23:01:56.141 [INFO] [Thread-136234] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T23:01:56.144 [DEBUG] [Thread-136234] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:01:56.144 [DEBUG] [Thread-136234] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T23:01:56.144 [DEBUG] [Thread-136234] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:01:56.144 [DEBUG] [Thread-136234] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:01:56.144 [DEBUG] [Thread-136234] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:01:56.144 [DEBUG] [Thread-136234] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:01:56.144 [DEBUG] [Thread-136234] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:01:56.144 [DEBUG] [Thread-136234] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:01:56.144 [DEBUG] [Thread-136234] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:01:56.144 [DEBUG] [Thread-136234] [transport.py] [_log()] client lang: <none>
2025-12-31T23:01:56.144 [DEBUG] [Thread-136234] [transport.py] [_log()] server lang: <none>
2025-12-31T23:01:56.144 [DEBUG] [Thread-136234] [transport.py] [_log()] kex follows: False
2025-12-31T23:01:56.145 [DEBUG] [Thread-136234] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:01:56.145 [DEBUG] [Thread-136234] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:01:56.145 [DEBUG] [Thread-136234] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:01:56.145 [DEBUG] [Thread-136234] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:01:56.145 [DEBUG] [Thread-136234] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:01:56.145 [DEBUG] [Thread-136234] [transport.py] [_log()] Compression: none
2025-12-31T23:01:56.145 [DEBUG] [Thread-136234] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:01:56.162 [DEBUG] [Thread-136234] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:01:56.163 [DEBUG] [Thread-136234] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:01:56.163 [DEBUG] [Thread-136234] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T23:01:56.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T23:01:56.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:01:56.165 [DEBUG] [Thread-136234] [transport.py] [_log()] userauth is OK
2025-12-31T23:01:56.165 [DEBUG] [Thread-136234] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:01:56.165 [DEBUG] [Thread-136234] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:01:56.166 [DEBUG] [Thread-136234] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T23:01:56.166 [DEBUG] [Thread-136234] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:01:56.182 [INFO] [Thread-136234] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:01:56.183 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:01:56.833 [DEBUG] [Thread-136234] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:01:56.833 [DEBUG] [Thread-136234] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:01:56.833 [DEBUG] [Thread-136234] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T23:01:56.874 [DEBUG] [Thread-136234] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:01:56.874 [DEBUG] [Thread-136234] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:01:56.877 [DEBUG] [Thread-136234] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:01:56.888 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:01:56.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T23:01:56.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T23:01:56.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T23:01:56.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:01:56.897 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T23:01:56.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:01:56.897 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:01:56.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T23:01:56.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.875830 -999.00  +15.50  14.13     77  +11.50 1 2 1 1 1     0    0 3.41 -30.98 ZNES. 12.2 14.1 194.8 17.7 16.7 -17.1 16.5 -17.4 16.4 -15.7 16.7 -16.3
2025-12-31T23:01:56.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T23:01:56.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T23:01:56.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.875830
2025-12-31T23:01:56.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T23:01:56.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T23:01:56.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T23:01:56.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T23:01:56.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T23:01:56.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T23:01:51', tmtdew=4.59, humidity=74.09, cloud=0.0, wind=17.57, temperature=15.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T23:01:51', seeing=0.83, atlas_timestamp='2025-12-31T21:01:11.712', atlas_cloud=2, atlas_rain=1, zp_data=[0.2602499999999992, 0.44475000000000087, 0.7302500000000007, 0.22100000000000009, 0.665, 0.8302500000000013, 0.5669999999999993, 0.4302500000000009, 0.39949999999999974, 0.4095000000000013, 0.8602499999999988, 0.41999999999999993, 0.3490000000000002, 0.4262499999999996, 0.5399999999999991, 0.019000000000000128, 0.8522499999999997, 0.4294999999999991, 0.9249999999999989, 0.5342499999999992, 0.34750000000000014, 0.24074999999999847, -0.13574999999999982, -0.4472499999999986, 0.6789999999999994, nan, 1.1087499999999997, -0.8900000000000006, 0.2450000000000001, -0.4939999999999998, -1.2979999999999983, -1.4959999999999987, -0.4202500000000011], zp_timestamp='2025-12-31T20:15:00')
2025-12-31T23:01:56.899 [DEBUG] [Thread-136234] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:01:56.980 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T23:01:56.992 [DEBUG] [Thread-136237] [transport.py] [_log()] starting thread (client mode): 0xb1745990
2025-12-31T23:01:56.992 [DEBUG] [Thread-136237] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:01:57.006 [DEBUG] [Thread-136237] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T23:01:57.006 [INFO] [Thread-136237] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T23:01:57.013 [DEBUG] [Thread-136237] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:01:57.014 [DEBUG] [Thread-136237] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T23:01:57.014 [DEBUG] [Thread-136237] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:01:57.014 [DEBUG] [Thread-136237] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:01:57.014 [DEBUG] [Thread-136237] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:01:57.014 [DEBUG] [Thread-136237] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:01:57.014 [DEBUG] [Thread-136237] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:01:57.014 [DEBUG] [Thread-136237] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:01:57.015 [DEBUG] [Thread-136237] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:01:57.015 [DEBUG] [Thread-136237] [transport.py] [_log()] client lang: <none>
2025-12-31T23:01:57.015 [DEBUG] [Thread-136237] [transport.py] [_log()] server lang: <none>
2025-12-31T23:01:57.015 [DEBUG] [Thread-136237] [transport.py] [_log()] kex follows: False
2025-12-31T23:01:57.015 [DEBUG] [Thread-136237] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:01:57.015 [DEBUG] [Thread-136237] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:01:57.015 [DEBUG] [Thread-136237] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:01:57.015 [DEBUG] [Thread-136237] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:01:57.015 [DEBUG] [Thread-136237] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:01:57.016 [DEBUG] [Thread-136237] [transport.py] [_log()] Compression: none
2025-12-31T23:01:57.016 [DEBUG] [Thread-136237] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:01:57.071 [DEBUG] [Thread-136237] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:01:57.071 [DEBUG] [Thread-136237] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:01:57.072 [DEBUG] [Thread-136237] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T23:01:57.072 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T23:01:57.073 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:01:57.126 [DEBUG] [Thread-136237] [transport.py] [_log()] userauth is OK
2025-12-31T23:01:57.127 [DEBUG] [Thread-136237] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:01:57.127 [DEBUG] [Thread-136237] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:01:57.127 [DEBUG] [Thread-136237] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T23:01:57.127 [DEBUG] [Thread-136237] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:01:57.146 [INFO] [Thread-136237] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:01:57.147 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T23:01:57.147 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:01:57.945 [DEBUG] [Thread-136237] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:01:57.945 [DEBUG] [Thread-136237] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:01:57.992 [DEBUG] [Thread-136237] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:01:57.993 [DEBUG] [Thread-136237] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:01:58.001 [DEBUG] [Thread-136237] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:01:58.010 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:01:58.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-12-31T23:01:58.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T23:01:58.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:01:58.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:01:58.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:01:58.035 [DEBUG] [Thread-136237] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:02:09.891 [DEBUG] [Thread-136239 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:02:20.886 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:02:20.887 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:02:24.946 [DEBUG] [Thread-136240 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:02:28.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T23:02:28.058 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T23:02:28.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T23:02:28.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 23, 2, 23), 4.59, 74.11, 0.0, 17.04, 15.41, 0, 0, 0, 2, 0, 0),)
2025-12-31T23:02:28.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 23:02:23
2025-12-31T23:02:28.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T23:02:29.043 [DEBUG] [Thread-136241] [transport.py] [_log()] starting thread (client mode): 0xb17956c0
2025-12-31T23:02:29.043 [DEBUG] [Thread-136241] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:02:29.064 [DEBUG] [Thread-136241] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T23:02:29.064 [INFO] [Thread-136241] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T23:02:29.067 [DEBUG] [Thread-136241] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:02:29.067 [DEBUG] [Thread-136241] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T23:02:29.067 [DEBUG] [Thread-136241] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:02:29.067 [DEBUG] [Thread-136241] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:02:29.067 [DEBUG] [Thread-136241] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:02:29.067 [DEBUG] [Thread-136241] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:02:29.067 [DEBUG] [Thread-136241] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:02:29.067 [DEBUG] [Thread-136241] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:02:29.067 [DEBUG] [Thread-136241] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:02:29.067 [DEBUG] [Thread-136241] [transport.py] [_log()] client lang: <none>
2025-12-31T23:02:29.067 [DEBUG] [Thread-136241] [transport.py] [_log()] server lang: <none>
2025-12-31T23:02:29.067 [DEBUG] [Thread-136241] [transport.py] [_log()] kex follows: False
2025-12-31T23:02:29.067 [DEBUG] [Thread-136241] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:02:29.067 [DEBUG] [Thread-136241] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:02:29.067 [DEBUG] [Thread-136241] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:02:29.067 [DEBUG] [Thread-136241] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:02:29.067 [DEBUG] [Thread-136241] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:02:29.068 [DEBUG] [Thread-136241] [transport.py] [_log()] Compression: none
2025-12-31T23:02:29.068 [DEBUG] [Thread-136241] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:02:29.085 [DEBUG] [Thread-136241] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:02:29.085 [DEBUG] [Thread-136241] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:02:29.086 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T23:02:29.086 [DEBUG] [Thread-136241] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T23:02:29.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:02:29.088 [DEBUG] [Thread-136241] [transport.py] [_log()] userauth is OK
2025-12-31T23:02:29.089 [DEBUG] [Thread-136241] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:02:29.089 [DEBUG] [Thread-136241] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:02:29.089 [DEBUG] [Thread-136241] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T23:02:29.089 [DEBUG] [Thread-136241] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:02:29.113 [INFO] [Thread-136241] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:02:29.113 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:02:29.797 [DEBUG] [Thread-136241] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:02:29.797 [DEBUG] [Thread-136241] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:02:29.798 [DEBUG] [Thread-136241] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T23:02:29.838 [DEBUG] [Thread-136241] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:02:29.838 [DEBUG] [Thread-136241] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:02:29.842 [DEBUG] [Thread-136241] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:02:29.854 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:02:29.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T23:02:29.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T23:02:29.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T23:02:29.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:02:29.864 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T23:02:29.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:02:29.865 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:02:29.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T23:02:29.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.876177 -999.00  +15.50  10.23     77  +11.50 1 2 1 1 1     0    0 3.35 -31.30 ZNES. 12.2 10.2 195.4 15.1 16.7 -17.3 16.5 -17.0 16.4 -15.6 16.8 -16.3
2025-12-31T23:02:29.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T23:02:29.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T23:02:29.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.876177
2025-12-31T23:02:29.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T23:02:29.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T23:02:29.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T23:02:29.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T23:02:29.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T23:02:29.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T23:02:23', tmtdew=4.59, humidity=74.11, cloud=0.0, wind=17.04, temperature=15.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T23:02:23', seeing=1.03, atlas_timestamp='2025-12-31T21:01:41.693', atlas_cloud=2, atlas_rain=1, zp_data=[0.2602499999999992, 0.44475000000000087, 0.7302500000000007, 0.22100000000000009, 0.665, 0.8302500000000013, 0.5669999999999993, 0.4302500000000009, 0.39949999999999974, 0.4095000000000013, 0.8602499999999988, 0.41999999999999993, 0.3490000000000002, 0.4262499999999996, 0.5399999999999991, 0.019000000000000128, 0.8522499999999997, 0.4294999999999991, 0.9249999999999989, 0.5342499999999992, 0.34750000000000014, 0.24074999999999847, -0.13574999999999982, -0.4472499999999986, 0.6789999999999994, nan, 1.1087499999999997, -0.8900000000000006, 0.2450000000000001, -0.4939999999999998, -1.2979999999999983, -1.4959999999999987, -0.4202500000000011], zp_timestamp='2025-12-31T20:15:00')
2025-12-31T23:02:29.867 [DEBUG] [Thread-136241] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:02:29.951 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T23:02:29.963 [DEBUG] [Thread-136244] [transport.py] [_log()] starting thread (client mode): 0xb95f3d30
2025-12-31T23:02:29.963 [DEBUG] [Thread-136244] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:02:29.978 [DEBUG] [Thread-136244] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T23:02:29.979 [INFO] [Thread-136244] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T23:02:29.986 [DEBUG] [Thread-136244] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:02:29.986 [DEBUG] [Thread-136244] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T23:02:29.986 [DEBUG] [Thread-136244] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:02:29.986 [DEBUG] [Thread-136244] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:02:29.987 [DEBUG] [Thread-136244] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:02:29.987 [DEBUG] [Thread-136244] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:02:29.987 [DEBUG] [Thread-136244] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:02:29.987 [DEBUG] [Thread-136244] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:02:29.987 [DEBUG] [Thread-136244] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:02:29.987 [DEBUG] [Thread-136244] [transport.py] [_log()] client lang: <none>
2025-12-31T23:02:29.987 [DEBUG] [Thread-136244] [transport.py] [_log()] server lang: <none>
2025-12-31T23:02:29.987 [DEBUG] [Thread-136244] [transport.py] [_log()] kex follows: False
2025-12-31T23:02:29.987 [DEBUG] [Thread-136244] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:02:29.987 [DEBUG] [Thread-136244] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:02:29.987 [DEBUG] [Thread-136244] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:02:29.987 [DEBUG] [Thread-136244] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:02:29.987 [DEBUG] [Thread-136244] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:02:29.987 [DEBUG] [Thread-136244] [transport.py] [_log()] Compression: none
2025-12-31T23:02:29.988 [DEBUG] [Thread-136244] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:02:30.044 [DEBUG] [Thread-136244] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:02:30.044 [DEBUG] [Thread-136244] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:02:30.045 [DEBUG] [Thread-136244] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T23:02:30.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T23:02:30.046 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:02:30.103 [DEBUG] [Thread-136244] [transport.py] [_log()] userauth is OK
2025-12-31T23:02:30.103 [DEBUG] [Thread-136244] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:02:30.103 [DEBUG] [Thread-136244] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:02:30.103 [DEBUG] [Thread-136244] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T23:02:30.104 [DEBUG] [Thread-136244] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:02:30.128 [INFO] [Thread-136244] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:02:30.129 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T23:02:30.129 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:02:30.985 [DEBUG] [Thread-136244] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:02:30.986 [DEBUG] [Thread-136244] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:02:31.034 [DEBUG] [Thread-136244] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:02:31.034 [DEBUG] [Thread-136244] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:02:31.043 [DEBUG] [Thread-136244] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:02:31.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:02:31.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T23:02:31.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T23:02:31.072 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:02:31.072 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:02:31.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:02:31.081 [DEBUG] [Thread-136244] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:02:39.982 [DEBUG] [Thread-136246 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:02:50.401 [DEBUG] [Thread-136247 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:02:55.032 [DEBUG] [Thread-136248 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:03:01.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T23:03:01.103 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T23:03:01.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T23:03:01.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 23, 2, 55), 4.52, 74.17, 0.0, 15.53, 15.39, 0, 0, 0, 2, 0, 0),)
2025-12-31T23:03:01.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 23:02:55
2025-12-31T23:03:01.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T23:03:02.108 [DEBUG] [Thread-136249] [transport.py] [_log()] starting thread (client mode): 0xb17959c0
2025-12-31T23:03:02.108 [DEBUG] [Thread-136249] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:03:02.128 [DEBUG] [Thread-136249] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T23:03:02.129 [INFO] [Thread-136249] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T23:03:02.132 [DEBUG] [Thread-136249] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:03:02.132 [DEBUG] [Thread-136249] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T23:03:02.132 [DEBUG] [Thread-136249] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:03:02.132 [DEBUG] [Thread-136249] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:03:02.132 [DEBUG] [Thread-136249] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:03:02.132 [DEBUG] [Thread-136249] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:03:02.132 [DEBUG] [Thread-136249] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:03:02.132 [DEBUG] [Thread-136249] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:03:02.132 [DEBUG] [Thread-136249] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:03:02.132 [DEBUG] [Thread-136249] [transport.py] [_log()] client lang: <none>
2025-12-31T23:03:02.132 [DEBUG] [Thread-136249] [transport.py] [_log()] server lang: <none>
2025-12-31T23:03:02.132 [DEBUG] [Thread-136249] [transport.py] [_log()] kex follows: False
2025-12-31T23:03:02.133 [DEBUG] [Thread-136249] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:03:02.133 [DEBUG] [Thread-136249] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:03:02.133 [DEBUG] [Thread-136249] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:03:02.133 [DEBUG] [Thread-136249] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:03:02.133 [DEBUG] [Thread-136249] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:03:02.133 [DEBUG] [Thread-136249] [transport.py] [_log()] Compression: none
2025-12-31T23:03:02.133 [DEBUG] [Thread-136249] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:03:02.150 [DEBUG] [Thread-136249] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:03:02.151 [DEBUG] [Thread-136249] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:03:02.152 [DEBUG] [Thread-136249] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T23:03:02.152 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T23:03:02.153 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:03:02.154 [DEBUG] [Thread-136249] [transport.py] [_log()] userauth is OK
2025-12-31T23:03:02.154 [DEBUG] [Thread-136249] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:03:02.155 [DEBUG] [Thread-136249] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:03:02.155 [DEBUG] [Thread-136249] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T23:03:02.155 [DEBUG] [Thread-136249] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:03:02.189 [INFO] [Thread-136249] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:03:02.190 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:03:02.827 [DEBUG] [Thread-136249] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:03:02.827 [DEBUG] [Thread-136249] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:03:02.828 [DEBUG] [Thread-136249] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T23:03:02.867 [DEBUG] [Thread-136249] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:03:02.868 [DEBUG] [Thread-136249] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:03:02.871 [DEBUG] [Thread-136249] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:03:02.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:03:02.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T23:03:02.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T23:03:02.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T23:03:02.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:03:02.891 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T23:03:02.892 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:03:02.892 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:03:02.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T23:03:02.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.876525 -999.00  +15.50  11.80     77  +11.50 1 2 1 1 1     0    0 3.34 -30.02 ZNES. 11.1 11.8 198.2 15.6 16.7 -17.0 16.6 -17.1 16.4 -15.6 16.7 -16.2
2025-12-31T23:03:02.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T23:03:02.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T23:03:02.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.876525
2025-12-31T23:03:02.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T23:03:02.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T23:03:02.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T23:03:02.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T23:03:02.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T23:03:02.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T23:02:55', tmtdew=4.52, humidity=74.17, cloud=0.0, wind=15.53, temperature=15.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T23:02:56', seeing=1.05, atlas_timestamp='2025-12-31T21:02:11.760', atlas_cloud=2, atlas_rain=1, zp_data=[0.2602499999999992, 0.44475000000000087, 0.7302500000000007, 0.22100000000000009, 0.665, 0.8302500000000013, 0.5669999999999993, 0.4302500000000009, 0.39949999999999974, 0.4095000000000013, 0.8602499999999988, 0.41999999999999993, 0.3490000000000002, 0.4262499999999996, 0.5399999999999991, 0.019000000000000128, 0.8522499999999997, 0.4294999999999991, 0.9249999999999989, 0.5342499999999992, 0.34750000000000014, 0.24074999999999847, -0.13574999999999982, -0.4472499999999986, 0.6789999999999994, nan, 1.1087499999999997, -0.8900000000000006, 0.2450000000000001, -0.4939999999999998, -1.2979999999999983, -1.4959999999999987, -0.4202500000000011], zp_timestamp='2025-12-31T20:15:00')
2025-12-31T23:03:02.894 [DEBUG] [Thread-136249] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:03:02.979 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T23:03:02.990 [DEBUG] [Thread-136252] [transport.py] [_log()] starting thread (client mode): 0xb1746dd0
2025-12-31T23:03:02.991 [DEBUG] [Thread-136252] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:03:03.004 [DEBUG] [Thread-136252] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T23:03:03.005 [INFO] [Thread-136252] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T23:03:03.012 [DEBUG] [Thread-136252] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:03:03.012 [DEBUG] [Thread-136252] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T23:03:03.012 [DEBUG] [Thread-136252] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:03:03.012 [DEBUG] [Thread-136252] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:03:03.012 [DEBUG] [Thread-136252] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:03:03.012 [DEBUG] [Thread-136252] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:03:03.012 [DEBUG] [Thread-136252] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:03:03.012 [DEBUG] [Thread-136252] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:03:03.012 [DEBUG] [Thread-136252] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:03:03.012 [DEBUG] [Thread-136252] [transport.py] [_log()] client lang: <none>
2025-12-31T23:03:03.012 [DEBUG] [Thread-136252] [transport.py] [_log()] server lang: <none>
2025-12-31T23:03:03.012 [DEBUG] [Thread-136252] [transport.py] [_log()] kex follows: False
2025-12-31T23:03:03.012 [DEBUG] [Thread-136252] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:03:03.013 [DEBUG] [Thread-136252] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:03:03.013 [DEBUG] [Thread-136252] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:03:03.013 [DEBUG] [Thread-136252] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:03:03.013 [DEBUG] [Thread-136252] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:03:03.013 [DEBUG] [Thread-136252] [transport.py] [_log()] Compression: none
2025-12-31T23:03:03.013 [DEBUG] [Thread-136252] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:03:03.070 [DEBUG] [Thread-136252] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:03:03.071 [DEBUG] [Thread-136252] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:03:03.071 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T23:03:03.072 [DEBUG] [Thread-136252] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T23:03:03.072 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:03:03.126 [DEBUG] [Thread-136252] [transport.py] [_log()] userauth is OK
2025-12-31T23:03:03.127 [DEBUG] [Thread-136252] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:03:03.127 [DEBUG] [Thread-136252] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:03:03.127 [DEBUG] [Thread-136252] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T23:03:03.127 [DEBUG] [Thread-136252] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:03:03.145 [INFO] [Thread-136252] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:03:03.146 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T23:03:03.146 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:03:03.991 [DEBUG] [Thread-136252] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:03:03.992 [DEBUG] [Thread-136252] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:03:04.040 [DEBUG] [Thread-136252] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:03:04.040 [DEBUG] [Thread-136252] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:03:04.049 [DEBUG] [Thread-136252] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:03:04.059 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:03:04.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T23:03:04.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T23:03:04.077 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:03:04.077 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:03:04.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:03:04.086 [DEBUG] [Thread-136252] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:03:10.060 [DEBUG] [Thread-136254 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:03:21.091 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:03:21.092 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:03:25.115 [DEBUG] [Thread-136255 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:03:34.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T23:03:34.108 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T23:03:34.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T23:03:34.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 23, 3, 28), 4.52, 74.17, 0.0, 17.63, 15.39, 0, 0, 0, 2, 0, 0),)
2025-12-31T23:03:34.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 23:03:28
2025-12-31T23:03:34.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T23:03:35.141 [DEBUG] [Thread-136256] [transport.py] [_log()] starting thread (client mode): 0xb1794be0
2025-12-31T23:03:35.141 [DEBUG] [Thread-136256] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:03:35.160 [DEBUG] [Thread-136256] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T23:03:35.160 [INFO] [Thread-136256] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T23:03:35.164 [DEBUG] [Thread-136256] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:03:35.164 [DEBUG] [Thread-136256] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T23:03:35.164 [DEBUG] [Thread-136256] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:03:35.164 [DEBUG] [Thread-136256] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:03:35.164 [DEBUG] [Thread-136256] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:03:35.164 [DEBUG] [Thread-136256] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:03:35.164 [DEBUG] [Thread-136256] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:03:35.164 [DEBUG] [Thread-136256] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:03:35.164 [DEBUG] [Thread-136256] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:03:35.164 [DEBUG] [Thread-136256] [transport.py] [_log()] client lang: <none>
2025-12-31T23:03:35.164 [DEBUG] [Thread-136256] [transport.py] [_log()] server lang: <none>
2025-12-31T23:03:35.164 [DEBUG] [Thread-136256] [transport.py] [_log()] kex follows: False
2025-12-31T23:03:35.164 [DEBUG] [Thread-136256] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:03:35.164 [DEBUG] [Thread-136256] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:03:35.164 [DEBUG] [Thread-136256] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:03:35.164 [DEBUG] [Thread-136256] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:03:35.164 [DEBUG] [Thread-136256] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:03:35.164 [DEBUG] [Thread-136256] [transport.py] [_log()] Compression: none
2025-12-31T23:03:35.164 [DEBUG] [Thread-136256] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:03:35.179 [DEBUG] [Thread-136256] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:03:35.179 [DEBUG] [Thread-136256] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:03:35.179 [DEBUG] [Thread-136256] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T23:03:35.179 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T23:03:35.179 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:03:35.180 [DEBUG] [Thread-136256] [transport.py] [_log()] userauth is OK
2025-12-31T23:03:35.180 [DEBUG] [Thread-136256] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:03:35.180 [DEBUG] [Thread-136256] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:03:35.180 [DEBUG] [Thread-136256] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T23:03:35.180 [DEBUG] [Thread-136256] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:03:35.195 [INFO] [Thread-136256] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:03:35.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:03:35.881 [DEBUG] [Thread-136256] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:03:35.881 [DEBUG] [Thread-136256] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:03:35.881 [DEBUG] [Thread-136256] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T23:03:35.922 [DEBUG] [Thread-136256] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:03:35.922 [DEBUG] [Thread-136256] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:03:35.924 [DEBUG] [Thread-136256] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:03:35.937 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:03:35.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T23:03:35.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T23:03:35.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T23:03:35.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:03:35.943 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T23:03:35.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:03:35.943 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:03:35.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T23:03:35.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.876872 -999.00  +15.50  14.23     77  +11.50 1 2 1 1 1     0    0 3.33 -30.56 ZNES. 9.6 14.2 208.3 19.1 16.7 -17.0 16.6 -16.7 16.4 -15.7 16.7 -16.4
2025-12-31T23:03:35.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T23:03:35.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T23:03:35.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.876872
2025-12-31T23:03:35.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T23:03:35.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T23:03:35.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T23:03:35.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T23:03:35.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T23:03:35.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T23:03:28', tmtdew=4.52, humidity=74.17, cloud=0.0, wind=17.63, temperature=15.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T23:03:28', seeing=0.92, atlas_timestamp='2025-12-31T21:02:41.741', atlas_cloud=2, atlas_rain=1, zp_data=[0.2602499999999992, 0.44475000000000087, 0.7302500000000007, 0.22100000000000009, 0.665, 0.8302500000000013, 0.5669999999999993, 0.4302500000000009, 0.39949999999999974, 0.4095000000000013, 0.8602499999999988, 0.41999999999999993, 0.3490000000000002, 0.4262499999999996, 0.5399999999999991, 0.019000000000000128, 0.8522499999999997, 0.4294999999999991, 0.9249999999999989, 0.5342499999999992, 0.34750000000000014, 0.24074999999999847, -0.13574999999999982, -0.4472499999999986, 0.6789999999999994, nan, 1.1087499999999997, -0.8900000000000006, 0.2450000000000001, -0.4939999999999998, -1.2979999999999983, -1.4959999999999987, -0.4202500000000011], zp_timestamp='2025-12-31T20:15:00')
2025-12-31T23:03:35.944 [DEBUG] [Thread-136256] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:03:36.018 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T23:03:36.029 [DEBUG] [Thread-136259] [transport.py] [_log()] starting thread (client mode): 0xb95f3c70
2025-12-31T23:03:36.029 [DEBUG] [Thread-136259] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:03:36.043 [DEBUG] [Thread-136259] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T23:03:36.043 [INFO] [Thread-136259] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T23:03:36.050 [DEBUG] [Thread-136259] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:03:36.050 [DEBUG] [Thread-136259] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T23:03:36.050 [DEBUG] [Thread-136259] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:03:36.050 [DEBUG] [Thread-136259] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:03:36.050 [DEBUG] [Thread-136259] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:03:36.050 [DEBUG] [Thread-136259] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:03:36.050 [DEBUG] [Thread-136259] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:03:36.050 [DEBUG] [Thread-136259] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:03:36.050 [DEBUG] [Thread-136259] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:03:36.050 [DEBUG] [Thread-136259] [transport.py] [_log()] client lang: <none>
2025-12-31T23:03:36.050 [DEBUG] [Thread-136259] [transport.py] [_log()] server lang: <none>
2025-12-31T23:03:36.050 [DEBUG] [Thread-136259] [transport.py] [_log()] kex follows: False
2025-12-31T23:03:36.050 [DEBUG] [Thread-136259] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:03:36.050 [DEBUG] [Thread-136259] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:03:36.050 [DEBUG] [Thread-136259] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:03:36.050 [DEBUG] [Thread-136259] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:03:36.050 [DEBUG] [Thread-136259] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:03:36.051 [DEBUG] [Thread-136259] [transport.py] [_log()] Compression: none
2025-12-31T23:03:36.051 [DEBUG] [Thread-136259] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:03:36.104 [DEBUG] [Thread-136259] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:03:36.104 [DEBUG] [Thread-136259] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:03:36.104 [DEBUG] [Thread-136259] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T23:03:36.104 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T23:03:36.104 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:03:36.162 [DEBUG] [Thread-136259] [transport.py] [_log()] userauth is OK
2025-12-31T23:03:36.162 [DEBUG] [Thread-136259] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:03:36.162 [DEBUG] [Thread-136259] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:03:36.162 [DEBUG] [Thread-136259] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T23:03:36.162 [DEBUG] [Thread-136259] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:03:36.175 [INFO] [Thread-136259] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:03:36.175 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T23:03:36.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:03:37.012 [DEBUG] [Thread-136259] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:03:37.012 [DEBUG] [Thread-136259] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:03:37.060 [DEBUG] [Thread-136259] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:03:37.060 [DEBUG] [Thread-136259] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:03:37.068 [DEBUG] [Thread-136259] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:03:37.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:03:37.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-12-31T23:03:37.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T23:03:37.092 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:03:37.092 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:03:37.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:03:37.100 [DEBUG] [Thread-136259] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:03:40.149 [DEBUG] [Thread-136261 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:03:50.470 [DEBUG] [Thread-136262 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:03:55.202 [DEBUG] [Thread-136263 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:04:07.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T23:04:07.123 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T23:04:07.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T23:04:07.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 23, 3, 28), 4.52, 74.17, 0.0, 17.63, 15.39, 0, 0, 0, 2, 0, 0),)
2025-12-31T23:04:07.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 23:03:28
2025-12-31T23:04:07.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T23:04:08.108 [DEBUG] [Thread-136264] [transport.py] [_log()] starting thread (client mode): 0xb1796aa0
2025-12-31T23:04:08.108 [DEBUG] [Thread-136264] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:04:08.126 [DEBUG] [Thread-136264] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T23:04:08.126 [INFO] [Thread-136264] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T23:04:08.129 [DEBUG] [Thread-136264] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:04:08.129 [DEBUG] [Thread-136264] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T23:04:08.130 [DEBUG] [Thread-136264] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:04:08.130 [DEBUG] [Thread-136264] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:04:08.130 [DEBUG] [Thread-136264] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:04:08.130 [DEBUG] [Thread-136264] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:04:08.130 [DEBUG] [Thread-136264] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:04:08.130 [DEBUG] [Thread-136264] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:04:08.130 [DEBUG] [Thread-136264] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:04:08.130 [DEBUG] [Thread-136264] [transport.py] [_log()] client lang: <none>
2025-12-31T23:04:08.130 [DEBUG] [Thread-136264] [transport.py] [_log()] server lang: <none>
2025-12-31T23:04:08.130 [DEBUG] [Thread-136264] [transport.py] [_log()] kex follows: False
2025-12-31T23:04:08.130 [DEBUG] [Thread-136264] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:04:08.130 [DEBUG] [Thread-136264] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:04:08.130 [DEBUG] [Thread-136264] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:04:08.130 [DEBUG] [Thread-136264] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:04:08.130 [DEBUG] [Thread-136264] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:04:08.130 [DEBUG] [Thread-136264] [transport.py] [_log()] Compression: none
2025-12-31T23:04:08.131 [DEBUG] [Thread-136264] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:04:08.139 [DEBUG] [Thread-136264] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:04:08.140 [DEBUG] [Thread-136264] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:04:08.141 [DEBUG] [Thread-136264] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T23:04:08.141 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T23:04:08.142 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:04:08.143 [DEBUG] [Thread-136264] [transport.py] [_log()] userauth is OK
2025-12-31T23:04:08.144 [DEBUG] [Thread-136264] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:04:08.144 [DEBUG] [Thread-136264] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:04:08.144 [DEBUG] [Thread-136264] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T23:04:08.144 [DEBUG] [Thread-136264] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:04:08.160 [INFO] [Thread-136264] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:04:08.161 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:04:08.828 [DEBUG] [Thread-136264] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:04:08.828 [DEBUG] [Thread-136264] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:04:08.829 [DEBUG] [Thread-136264] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T23:04:08.869 [DEBUG] [Thread-136264] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:04:08.869 [DEBUG] [Thread-136264] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:04:08.873 [DEBUG] [Thread-136264] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:04:08.885 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:04:08.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T23:04:08.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T23:04:08.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T23:04:08.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:04:08.897 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T23:04:08.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:04:08.897 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:04:08.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T23:04:08.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.877566 -999.00  +15.60   9.20     76  +11.50 1 2 1 1 1     0    0 3.40 -25.90 zNEs. 6.8 9.2 195.3 14.5 16.7 -16.8 16.6 -16.6 16.4 -15.6 16.7 -16.1
2025-12-31T23:04:08.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T23:04:08.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T23:04:08.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.877566
2025-12-31T23:04:08.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T23:04:08.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T23:04:08.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T23:04:08.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T23:04:08.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T23:04:08.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T23:03:28', tmtdew=4.52, humidity=74.17, cloud=0.0, wind=17.63, temperature=15.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T23:04:00', seeing=0.88, atlas_timestamp='2025-12-31T21:03:41.702', atlas_cloud=2, atlas_rain=1, zp_data=[0.2602499999999992, 0.44475000000000087, 0.7302500000000007, 0.22100000000000009, 0.665, 0.8302500000000013, 0.5669999999999993, 0.4302500000000009, 0.39949999999999974, 0.4095000000000013, 0.8602499999999988, 0.41999999999999993, 0.3490000000000002, 0.4262499999999996, 0.5399999999999991, 0.019000000000000128, 0.8522499999999997, 0.4294999999999991, 0.9249999999999989, 0.5342499999999992, 0.34750000000000014, 0.24074999999999847, -0.13574999999999982, -0.4472499999999986, 0.6789999999999994, nan, 1.1087499999999997, -0.8900000000000006, 0.2450000000000001, -0.4939999999999998, -1.2979999999999983, -1.4959999999999987, -0.4202500000000011], zp_timestamp='2025-12-31T20:15:00')
2025-12-31T23:04:08.900 [DEBUG] [Thread-136264] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:04:08.995 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T23:04:09.008 [DEBUG] [Thread-136267] [transport.py] [_log()] starting thread (client mode): 0xb95f0430
2025-12-31T23:04:09.008 [DEBUG] [Thread-136267] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:04:09.023 [DEBUG] [Thread-136267] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T23:04:09.023 [INFO] [Thread-136267] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T23:04:09.031 [DEBUG] [Thread-136267] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:04:09.031 [DEBUG] [Thread-136267] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T23:04:09.031 [DEBUG] [Thread-136267] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:04:09.031 [DEBUG] [Thread-136267] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:04:09.031 [DEBUG] [Thread-136267] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:04:09.031 [DEBUG] [Thread-136267] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:04:09.031 [DEBUG] [Thread-136267] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:04:09.031 [DEBUG] [Thread-136267] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:04:09.031 [DEBUG] [Thread-136267] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:04:09.031 [DEBUG] [Thread-136267] [transport.py] [_log()] client lang: <none>
2025-12-31T23:04:09.031 [DEBUG] [Thread-136267] [transport.py] [_log()] server lang: <none>
2025-12-31T23:04:09.031 [DEBUG] [Thread-136267] [transport.py] [_log()] kex follows: False
2025-12-31T23:04:09.031 [DEBUG] [Thread-136267] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:04:09.031 [DEBUG] [Thread-136267] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:04:09.032 [DEBUG] [Thread-136267] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:04:09.032 [DEBUG] [Thread-136267] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:04:09.032 [DEBUG] [Thread-136267] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:04:09.032 [DEBUG] [Thread-136267] [transport.py] [_log()] Compression: none
2025-12-31T23:04:09.032 [DEBUG] [Thread-136267] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:04:09.091 [DEBUG] [Thread-136267] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:04:09.091 [DEBUG] [Thread-136267] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:04:09.092 [DEBUG] [Thread-136267] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T23:04:09.092 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T23:04:09.093 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:04:09.147 [DEBUG] [Thread-136267] [transport.py] [_log()] userauth is OK
2025-12-31T23:04:09.148 [DEBUG] [Thread-136267] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:04:09.148 [DEBUG] [Thread-136267] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:04:09.148 [DEBUG] [Thread-136267] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T23:04:09.148 [DEBUG] [Thread-136267] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:04:09.167 [INFO] [Thread-136267] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:04:09.167 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T23:04:09.168 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:04:10.000 [DEBUG] [Thread-136267] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:04:10.000 [DEBUG] [Thread-136267] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:04:10.048 [DEBUG] [Thread-136267] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:04:10.048 [DEBUG] [Thread-136267] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:04:10.058 [DEBUG] [Thread-136267] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:04:10.067 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:04:10.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T23:04:10.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T23:04:10.086 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:04:10.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:04:10.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:04:10.095 [DEBUG] [Thread-136267] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:04:10.235 [DEBUG] [Thread-136269 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:04:21.295 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:04:21.296 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:04:25.275 [DEBUG] [Thread-136270 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:04:40.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T23:04:40.098 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T23:04:40.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T23:04:40.310 [DEBUG] [Thread-136271 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:04:40.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 23, 4, 32), 4.56, 74.22, 0.0, 17.57, 15.36, 0, 0, 0, 2, 0, 0),)
2025-12-31T23:04:40.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 23:04:32
2025-12-31T23:04:40.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T23:04:41.084 [DEBUG] [Thread-136272] [transport.py] [_log()] starting thread (client mode): 0xb95f2230
2025-12-31T23:04:41.085 [DEBUG] [Thread-136272] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:04:41.106 [DEBUG] [Thread-136272] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T23:04:41.107 [INFO] [Thread-136272] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T23:04:41.109 [DEBUG] [Thread-136272] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:04:41.110 [DEBUG] [Thread-136272] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T23:04:41.110 [DEBUG] [Thread-136272] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:04:41.110 [DEBUG] [Thread-136272] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:04:41.110 [DEBUG] [Thread-136272] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:04:41.110 [DEBUG] [Thread-136272] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:04:41.110 [DEBUG] [Thread-136272] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:04:41.110 [DEBUG] [Thread-136272] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:04:41.110 [DEBUG] [Thread-136272] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:04:41.110 [DEBUG] [Thread-136272] [transport.py] [_log()] client lang: <none>
2025-12-31T23:04:41.110 [DEBUG] [Thread-136272] [transport.py] [_log()] server lang: <none>
2025-12-31T23:04:41.110 [DEBUG] [Thread-136272] [transport.py] [_log()] kex follows: False
2025-12-31T23:04:41.110 [DEBUG] [Thread-136272] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:04:41.111 [DEBUG] [Thread-136272] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:04:41.111 [DEBUG] [Thread-136272] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:04:41.111 [DEBUG] [Thread-136272] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:04:41.111 [DEBUG] [Thread-136272] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:04:41.111 [DEBUG] [Thread-136272] [transport.py] [_log()] Compression: none
2025-12-31T23:04:41.111 [DEBUG] [Thread-136272] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:04:41.119 [DEBUG] [Thread-136272] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:04:41.120 [DEBUG] [Thread-136272] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:04:41.120 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T23:04:41.121 [DEBUG] [Thread-136272] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T23:04:41.122 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:04:41.123 [DEBUG] [Thread-136272] [transport.py] [_log()] userauth is OK
2025-12-31T23:04:41.123 [DEBUG] [Thread-136272] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:04:41.123 [DEBUG] [Thread-136272] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:04:41.123 [DEBUG] [Thread-136272] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T23:04:41.123 [DEBUG] [Thread-136272] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:04:41.142 [INFO] [Thread-136272] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:04:41.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:04:41.749 [DEBUG] [Thread-136272] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:04:41.749 [DEBUG] [Thread-136272] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:04:41.750 [DEBUG] [Thread-136272] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T23:04:41.791 [DEBUG] [Thread-136272] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:04:41.791 [DEBUG] [Thread-136272] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:04:41.794 [DEBUG] [Thread-136272] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:04:41.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:04:41.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T23:04:41.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T23:04:41.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T23:04:41.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:04:41.822 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T23:04:41.822 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:04:41.822 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:04:41.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T23:04:41.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.877913 -999.00  +15.60  10.25     76  +11.50 1 2 1 1 1     0    0 3.56 -23.88 Z.eS. 9.2 10.2 204.0 17.1 16.8 -16.8 16.6 -16.5 16.4 -15.8 16.7 -16.1
2025-12-31T23:04:41.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T23:04:41.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T23:04:41.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.877913
2025-12-31T23:04:41.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T23:04:41.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T23:04:41.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T23:04:41.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T23:04:41.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T23:04:41.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T23:04:32', tmtdew=4.56, humidity=74.22, cloud=0.0, wind=17.57, temperature=15.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T23:04:32', seeing=0.88, atlas_timestamp='2025-12-31T21:04:11.683', atlas_cloud=2, atlas_rain=1, zp_data=[0.2602499999999992, 0.44475000000000087, 0.7302500000000007, 0.22100000000000009, 0.665, 0.8302500000000013, 0.5669999999999993, 0.4302500000000009, 0.39949999999999974, 0.4095000000000013, 0.8602499999999988, 0.41999999999999993, 0.3490000000000002, 0.4262499999999996, 0.5399999999999991, 0.019000000000000128, 0.8522499999999997, 0.4294999999999991, 0.9249999999999989, 0.5342499999999992, 0.34750000000000014, 0.24074999999999847, -0.13574999999999982, -0.4472499999999986, 0.6789999999999994, nan, 1.1087499999999997, -0.8900000000000006, 0.2450000000000001, -0.4939999999999998, -1.2979999999999983, -1.4959999999999987, -0.4202500000000011], zp_timestamp='2025-12-31T20:15:00')
2025-12-31T23:04:41.825 [DEBUG] [Thread-136272] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:04:41.908 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T23:04:41.919 [DEBUG] [Thread-136275] [transport.py] [_log()] starting thread (client mode): 0xb17446a0
2025-12-31T23:04:41.919 [DEBUG] [Thread-136275] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:04:41.935 [DEBUG] [Thread-136275] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T23:04:41.935 [INFO] [Thread-136275] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T23:04:41.944 [DEBUG] [Thread-136275] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:04:41.945 [DEBUG] [Thread-136275] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T23:04:41.945 [DEBUG] [Thread-136275] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:04:41.945 [DEBUG] [Thread-136275] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:04:41.945 [DEBUG] [Thread-136275] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:04:41.945 [DEBUG] [Thread-136275] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:04:41.945 [DEBUG] [Thread-136275] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:04:41.945 [DEBUG] [Thread-136275] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:04:41.945 [DEBUG] [Thread-136275] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:04:41.945 [DEBUG] [Thread-136275] [transport.py] [_log()] client lang: <none>
2025-12-31T23:04:41.946 [DEBUG] [Thread-136275] [transport.py] [_log()] server lang: <none>
2025-12-31T23:04:41.946 [DEBUG] [Thread-136275] [transport.py] [_log()] kex follows: False
2025-12-31T23:04:41.946 [DEBUG] [Thread-136275] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:04:41.946 [DEBUG] [Thread-136275] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:04:41.946 [DEBUG] [Thread-136275] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:04:41.946 [DEBUG] [Thread-136275] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:04:41.946 [DEBUG] [Thread-136275] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:04:41.947 [DEBUG] [Thread-136275] [transport.py] [_log()] Compression: none
2025-12-31T23:04:41.947 [DEBUG] [Thread-136275] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:04:42.004 [DEBUG] [Thread-136275] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:04:42.004 [DEBUG] [Thread-136275] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:04:42.005 [DEBUG] [Thread-136275] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T23:04:42.005 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T23:04:42.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:04:42.064 [DEBUG] [Thread-136275] [transport.py] [_log()] userauth is OK
2025-12-31T23:04:42.065 [DEBUG] [Thread-136275] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:04:42.065 [DEBUG] [Thread-136275] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:04:42.065 [DEBUG] [Thread-136275] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T23:04:42.065 [DEBUG] [Thread-136275] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:04:42.085 [INFO] [Thread-136275] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:04:42.085 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T23:04:42.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:04:42.902 [DEBUG] [Thread-136275] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:04:42.902 [DEBUG] [Thread-136275] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:04:42.950 [DEBUG] [Thread-136275] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:04:42.950 [DEBUG] [Thread-136275] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:04:42.960 [DEBUG] [Thread-136275] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:04:42.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:04:42.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T23:04:42.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T23:04:42.987 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:04:42.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:04:42.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:04:42.996 [DEBUG] [Thread-136275] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:04:50.521 [DEBUG] [Thread-136277 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:04:55.340 [DEBUG] [Thread-136278 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:05:10.397 [DEBUG] [Thread-136279 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:05:13.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T23:05:13.019 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T23:05:13.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T23:05:13.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 23, 5, 4), 4.56, 74.21, 0.0, 16.66, 15.39, 0, 0, 0, 2, 0, 0),)
2025-12-31T23:05:13.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 23:05:04
2025-12-31T23:05:13.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T23:05:14.006 [DEBUG] [Thread-136280] [transport.py] [_log()] starting thread (client mode): 0xb1746e00
2025-12-31T23:05:14.006 [DEBUG] [Thread-136280] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:05:14.025 [DEBUG] [Thread-136280] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T23:05:14.026 [INFO] [Thread-136280] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T23:05:14.028 [DEBUG] [Thread-136280] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:05:14.029 [DEBUG] [Thread-136280] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T23:05:14.029 [DEBUG] [Thread-136280] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:05:14.029 [DEBUG] [Thread-136280] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:05:14.029 [DEBUG] [Thread-136280] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:05:14.029 [DEBUG] [Thread-136280] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:05:14.029 [DEBUG] [Thread-136280] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:05:14.029 [DEBUG] [Thread-136280] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:05:14.029 [DEBUG] [Thread-136280] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:05:14.029 [DEBUG] [Thread-136280] [transport.py] [_log()] client lang: <none>
2025-12-31T23:05:14.029 [DEBUG] [Thread-136280] [transport.py] [_log()] server lang: <none>
2025-12-31T23:05:14.029 [DEBUG] [Thread-136280] [transport.py] [_log()] kex follows: False
2025-12-31T23:05:14.029 [DEBUG] [Thread-136280] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:05:14.029 [DEBUG] [Thread-136280] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:05:14.029 [DEBUG] [Thread-136280] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:05:14.029 [DEBUG] [Thread-136280] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:05:14.029 [DEBUG] [Thread-136280] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:05:14.029 [DEBUG] [Thread-136280] [transport.py] [_log()] Compression: none
2025-12-31T23:05:14.029 [DEBUG] [Thread-136280] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:05:14.048 [DEBUG] [Thread-136280] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:05:14.049 [DEBUG] [Thread-136280] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:05:14.050 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T23:05:14.050 [DEBUG] [Thread-136280] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T23:05:14.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:05:14.052 [DEBUG] [Thread-136280] [transport.py] [_log()] userauth is OK
2025-12-31T23:05:14.053 [DEBUG] [Thread-136280] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:05:14.053 [DEBUG] [Thread-136280] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:05:14.053 [DEBUG] [Thread-136280] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T23:05:14.053 [DEBUG] [Thread-136280] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:05:14.077 [INFO] [Thread-136280] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:05:14.078 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:05:21.497 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:05:21.498 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:05:23.206 [DEBUG] [Thread-136280] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:05:23.207 [DEBUG] [Thread-136280] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:05:23.207 [DEBUG] [Thread-136280] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T23:05:23.247 [DEBUG] [Thread-136280] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:05:23.247 [DEBUG] [Thread-136280] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:05:23.251 [DEBUG] [Thread-136280] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:05:23.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:05:23.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T23:05:23.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T23:05:23.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T23:05:23.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:05:23.279 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T23:05:23.280 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:05:23.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:05:23.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T23:05:23.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.878261 -999.00  +15.60  12.37     76  +11.50 1 2 1 1 1     0    0 3.52 -23.64 Z.eS. 12.9 12.4 206.3 15.4 16.7 -16.7 16.6 -16.6 16.4 -15.7 16.7 -16.1
2025-12-31T23:05:23.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T23:05:23.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T23:05:23.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.878261
2025-12-31T23:05:23.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T23:05:23.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T23:05:23.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T23:05:23.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T23:05:23.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T23:05:23.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T23:05:04', tmtdew=4.56, humidity=74.21, cloud=0.0, wind=16.66, temperature=15.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T23:05:04', seeing=0.88, atlas_timestamp='2025-12-31T21:04:41.750', atlas_cloud=2, atlas_rain=1, zp_data=[0.2602499999999992, 0.44475000000000087, 0.7302500000000007, 0.22100000000000009, 0.665, 0.8302500000000013, 0.5669999999999993, 0.4302500000000009, 0.39949999999999974, 0.4095000000000013, 0.8602499999999988, 0.41999999999999993, 0.3490000000000002, 0.4262499999999996, 0.5399999999999991, 0.019000000000000128, 0.8522499999999997, 0.4294999999999991, 0.9249999999999989, 0.5342499999999992, 0.34750000000000014, 0.24074999999999847, -0.13574999999999982, -0.4472499999999986, 0.6789999999999994, nan, 1.1087499999999997, -0.8900000000000006, 0.2450000000000001, -0.4939999999999998, -1.2979999999999983, -1.4959999999999987, -0.4202500000000011], zp_timestamp='2025-12-31T20:15:00')
2025-12-31T23:05:23.282 [DEBUG] [Thread-136280] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:05:23.366 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T23:05:23.379 [DEBUG] [Thread-136283] [transport.py] [_log()] starting thread (client mode): 0xb95f1510
2025-12-31T23:05:23.379 [DEBUG] [Thread-136283] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:05:23.393 [DEBUG] [Thread-136283] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T23:05:23.393 [INFO] [Thread-136283] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T23:05:23.401 [DEBUG] [Thread-136283] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:05:23.401 [DEBUG] [Thread-136283] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T23:05:23.401 [DEBUG] [Thread-136283] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:05:23.402 [DEBUG] [Thread-136283] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:05:23.402 [DEBUG] [Thread-136283] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:05:23.402 [DEBUG] [Thread-136283] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:05:23.402 [DEBUG] [Thread-136283] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:05:23.402 [DEBUG] [Thread-136283] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:05:23.402 [DEBUG] [Thread-136283] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:05:23.402 [DEBUG] [Thread-136283] [transport.py] [_log()] client lang: <none>
2025-12-31T23:05:23.402 [DEBUG] [Thread-136283] [transport.py] [_log()] server lang: <none>
2025-12-31T23:05:23.402 [DEBUG] [Thread-136283] [transport.py] [_log()] kex follows: False
2025-12-31T23:05:23.403 [DEBUG] [Thread-136283] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:05:23.403 [DEBUG] [Thread-136283] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:05:23.403 [DEBUG] [Thread-136283] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:05:23.403 [DEBUG] [Thread-136283] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:05:23.403 [DEBUG] [Thread-136283] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:05:23.404 [DEBUG] [Thread-136283] [transport.py] [_log()] Compression: none
2025-12-31T23:05:23.404 [DEBUG] [Thread-136283] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:05:23.459 [DEBUG] [Thread-136283] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:05:23.460 [DEBUG] [Thread-136283] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:05:23.460 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T23:05:23.461 [DEBUG] [Thread-136283] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T23:05:23.462 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:05:23.515 [DEBUG] [Thread-136283] [transport.py] [_log()] userauth is OK
2025-12-31T23:05:23.515 [DEBUG] [Thread-136283] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:05:23.516 [DEBUG] [Thread-136283] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:05:23.516 [DEBUG] [Thread-136283] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T23:05:23.516 [DEBUG] [Thread-136283] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:05:23.535 [INFO] [Thread-136283] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:05:23.535 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T23:05:23.535 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:05:24.369 [DEBUG] [Thread-136283] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:05:24.369 [DEBUG] [Thread-136283] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:05:24.417 [DEBUG] [Thread-136283] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:05:24.417 [DEBUG] [Thread-136283] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:05:24.426 [DEBUG] [Thread-136283] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:05:24.435 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:05:24.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T23:05:24.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T23:05:24.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:05:24.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:05:24.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:05:24.463 [DEBUG] [Thread-136283] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:05:25.434 [DEBUG] [Thread-136285 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:05:40.474 [DEBUG] [Thread-136286 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:05:50.599 [DEBUG] [Thread-136287 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:05:54.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T23:05:54.474 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T23:05:54.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-12-31T23:05:55.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 23, 5, 36), 4.52, 74.16, 0.0, 15.79, 15.39, 0, 0, 0, 2, 0, 0),)
2025-12-31T23:05:55.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 23:05:36
2025-12-31T23:05:55.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T23:05:55.472 [DEBUG] [Thread-136288] [transport.py] [_log()] starting thread (client mode): 0xb1745450
2025-12-31T23:05:55.472 [DEBUG] [Thread-136288] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:05:55.492 [DEBUG] [Thread-136288] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T23:05:55.492 [INFO] [Thread-136288] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T23:05:55.496 [DEBUG] [Thread-136288] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:05:55.496 [DEBUG] [Thread-136288] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T23:05:55.496 [DEBUG] [Thread-136288] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:05:55.496 [DEBUG] [Thread-136288] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:05:55.496 [DEBUG] [Thread-136288] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:05:55.496 [DEBUG] [Thread-136288] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:05:55.496 [DEBUG] [Thread-136288] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:05:55.496 [DEBUG] [Thread-136288] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:05:55.496 [DEBUG] [Thread-136288] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:05:55.496 [DEBUG] [Thread-136288] [transport.py] [_log()] client lang: <none>
2025-12-31T23:05:55.496 [DEBUG] [Thread-136288] [transport.py] [_log()] server lang: <none>
2025-12-31T23:05:55.496 [DEBUG] [Thread-136288] [transport.py] [_log()] kex follows: False
2025-12-31T23:05:55.496 [DEBUG] [Thread-136288] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:05:55.496 [DEBUG] [Thread-136288] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:05:55.496 [DEBUG] [Thread-136288] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:05:55.496 [DEBUG] [Thread-136288] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:05:55.496 [DEBUG] [Thread-136288] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:05:55.496 [DEBUG] [Thread-136288] [transport.py] [_log()] Compression: none
2025-12-31T23:05:55.496 [DEBUG] [Thread-136288] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:05:55.509 [DEBUG] [Thread-136290 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:05:55.513 [DEBUG] [Thread-136288] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:05:55.513 [DEBUG] [Thread-136288] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:05:55.514 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T23:05:55.514 [DEBUG] [Thread-136288] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T23:05:55.515 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:05:55.516 [DEBUG] [Thread-136288] [transport.py] [_log()] userauth is OK
2025-12-31T23:05:55.516 [DEBUG] [Thread-136288] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:05:55.516 [DEBUG] [Thread-136288] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:05:55.517 [DEBUG] [Thread-136288] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T23:05:55.517 [DEBUG] [Thread-136288] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:05:55.539 [INFO] [Thread-136288] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:05:55.539 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:05:56.204 [DEBUG] [Thread-136288] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:05:56.204 [DEBUG] [Thread-136288] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:05:56.204 [DEBUG] [Thread-136288] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T23:05:56.245 [DEBUG] [Thread-136288] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:05:56.245 [DEBUG] [Thread-136288] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:05:56.249 [DEBUG] [Thread-136288] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:05:56.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:05:56.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T23:05:56.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T23:05:56.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T23:05:56.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:05:56.273 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T23:05:56.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:05:56.274 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:05:56.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T23:05:56.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.878608 -999.00  +15.60  10.33     77  +11.50 1 2 1 1 1     0    0 3.61 -21.33 Z.eS. 17.4 10.3 202.9 18.8 16.7 -17.0 16.6 -16.6 16.4 -15.8 16.7 -16.4
2025-12-31T23:05:56.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T23:05:56.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T23:05:56.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.878608
2025-12-31T23:05:56.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T23:05:56.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T23:05:56.276 [DEBUG] [Thread-136288] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:05:56.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T23:05:56.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T23:05:56.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T23:05:56.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T23:05:36', tmtdew=4.52, humidity=74.16, cloud=0.0, wind=15.79, temperature=15.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T23:05:36', seeing=0.93, atlas_timestamp='2025-12-31T21:05:11.731', atlas_cloud=2, atlas_rain=1, zp_data=[0.2602499999999992, 0.44475000000000087, 0.7302500000000007, 0.22100000000000009, 0.665, 0.8302500000000013, 0.5669999999999993, 0.4302500000000009, 0.39949999999999974, 0.4095000000000013, 0.8602499999999988, 0.41999999999999993, 0.3490000000000002, 0.4262499999999996, 0.5399999999999991, 0.019000000000000128, 0.8522499999999997, 0.4294999999999991, 0.9249999999999989, 0.5342499999999992, 0.34750000000000014, 0.24074999999999847, -0.13574999999999982, -0.4472499999999986, 0.6789999999999994, nan, 1.1087499999999997, -0.8900000000000006, 0.2450000000000001, -0.4939999999999998, -1.2979999999999983, -1.4959999999999987, -0.4202500000000011], zp_timestamp='2025-12-31T20:15:00')
2025-12-31T23:05:56.366 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T23:05:56.383 [DEBUG] [Thread-136292] [transport.py] [_log()] starting thread (client mode): 0xb17449a0
2025-12-31T23:05:56.384 [DEBUG] [Thread-136292] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:05:56.398 [DEBUG] [Thread-136292] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T23:05:56.398 [INFO] [Thread-136292] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T23:05:56.406 [DEBUG] [Thread-136292] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:05:56.406 [DEBUG] [Thread-136292] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T23:05:56.406 [DEBUG] [Thread-136292] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:05:56.406 [DEBUG] [Thread-136292] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:05:56.406 [DEBUG] [Thread-136292] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:05:56.406 [DEBUG] [Thread-136292] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:05:56.406 [DEBUG] [Thread-136292] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:05:56.407 [DEBUG] [Thread-136292] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:05:56.407 [DEBUG] [Thread-136292] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:05:56.407 [DEBUG] [Thread-136292] [transport.py] [_log()] client lang: <none>
2025-12-31T23:05:56.407 [DEBUG] [Thread-136292] [transport.py] [_log()] server lang: <none>
2025-12-31T23:05:56.407 [DEBUG] [Thread-136292] [transport.py] [_log()] kex follows: False
2025-12-31T23:05:56.407 [DEBUG] [Thread-136292] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:05:56.407 [DEBUG] [Thread-136292] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:05:56.407 [DEBUG] [Thread-136292] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:05:56.407 [DEBUG] [Thread-136292] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:05:56.407 [DEBUG] [Thread-136292] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:05:56.407 [DEBUG] [Thread-136292] [transport.py] [_log()] Compression: none
2025-12-31T23:05:56.407 [DEBUG] [Thread-136292] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:05:56.462 [DEBUG] [Thread-136292] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:05:56.462 [DEBUG] [Thread-136292] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:05:56.463 [DEBUG] [Thread-136292] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T23:05:56.463 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T23:05:56.463 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:05:56.519 [DEBUG] [Thread-136292] [transport.py] [_log()] userauth is OK
2025-12-31T23:05:56.519 [DEBUG] [Thread-136292] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:05:56.519 [DEBUG] [Thread-136292] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:05:56.519 [DEBUG] [Thread-136292] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T23:05:56.520 [DEBUG] [Thread-136292] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:05:56.538 [INFO] [Thread-136292] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:05:56.539 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T23:05:56.539 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:05:57.368 [DEBUG] [Thread-136292] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:05:57.368 [DEBUG] [Thread-136292] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:05:57.416 [DEBUG] [Thread-136292] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:05:57.416 [DEBUG] [Thread-136292] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:05:57.426 [DEBUG] [Thread-136292] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:05:57.437 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:05:57.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-12-31T23:05:57.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T23:05:57.456 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:05:57.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:05:57.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:05:57.464 [DEBUG] [Thread-136292] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:06:10.542 [DEBUG] [Thread-136294 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:06:21.702 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:06:21.703 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:06:25.590 [DEBUG] [Thread-136295 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:06:27.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T23:06:27.462 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T23:06:27.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T23:06:28.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 23, 6, 8), 4.52, 74.17, 0.0, 17.52, 15.39, 0, 0, 0, 2, 0, 0),)
2025-12-31T23:06:28.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 23:06:08
2025-12-31T23:06:28.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T23:06:28.445 [DEBUG] [Thread-136296] [transport.py] [_log()] starting thread (client mode): 0xb1747d00
2025-12-31T23:06:28.445 [DEBUG] [Thread-136296] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:06:28.465 [DEBUG] [Thread-136296] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T23:06:28.465 [INFO] [Thread-136296] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T23:06:28.469 [DEBUG] [Thread-136296] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:06:28.469 [DEBUG] [Thread-136296] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T23:06:28.469 [DEBUG] [Thread-136296] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:06:28.469 [DEBUG] [Thread-136296] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:06:28.469 [DEBUG] [Thread-136296] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:06:28.469 [DEBUG] [Thread-136296] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:06:28.469 [DEBUG] [Thread-136296] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:06:28.469 [DEBUG] [Thread-136296] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:06:28.469 [DEBUG] [Thread-136296] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:06:28.469 [DEBUG] [Thread-136296] [transport.py] [_log()] client lang: <none>
2025-12-31T23:06:28.469 [DEBUG] [Thread-136296] [transport.py] [_log()] server lang: <none>
2025-12-31T23:06:28.469 [DEBUG] [Thread-136296] [transport.py] [_log()] kex follows: False
2025-12-31T23:06:28.469 [DEBUG] [Thread-136296] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:06:28.469 [DEBUG] [Thread-136296] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:06:28.469 [DEBUG] [Thread-136296] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:06:28.469 [DEBUG] [Thread-136296] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:06:28.469 [DEBUG] [Thread-136296] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:06:28.470 [DEBUG] [Thread-136296] [transport.py] [_log()] Compression: none
2025-12-31T23:06:28.470 [DEBUG] [Thread-136296] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:06:28.485 [DEBUG] [Thread-136296] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:06:28.485 [DEBUG] [Thread-136296] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:06:28.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T23:06:28.486 [DEBUG] [Thread-136296] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T23:06:28.487 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:06:28.488 [DEBUG] [Thread-136296] [transport.py] [_log()] userauth is OK
2025-12-31T23:06:28.488 [DEBUG] [Thread-136296] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:06:28.488 [DEBUG] [Thread-136296] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:06:28.488 [DEBUG] [Thread-136296] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T23:06:28.488 [DEBUG] [Thread-136296] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:06:28.508 [INFO] [Thread-136296] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:06:28.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:06:29.266 [DEBUG] [Thread-136296] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:06:29.266 [DEBUG] [Thread-136296] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:06:29.266 [DEBUG] [Thread-136296] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T23:06:29.306 [DEBUG] [Thread-136296] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:06:29.306 [DEBUG] [Thread-136296] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:06:29.309 [DEBUG] [Thread-136296] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:06:29.322 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:06:29.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T23:06:29.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T23:06:29.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T23:06:29.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:06:29.327 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T23:06:29.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:06:29.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:06:29.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T23:06:29.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.878955 -999.00  +15.50  12.02     77  +11.50 1 2 1 1 1     0    0 3.60 -21.08 Z.eS. 12.4 12.0 196.2 18.2 16.7 -16.9 16.6 -16.7 16.4 -16.0 16.6 -16.5
2025-12-31T23:06:29.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T23:06:29.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T23:06:29.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.878955
2025-12-31T23:06:29.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T23:06:29.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T23:06:29.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T23:06:29.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T23:06:29.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T23:06:29.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T23:06:08', tmtdew=4.52, humidity=74.17, cloud=0.0, wind=17.52, temperature=15.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T23:06:08', seeing=0.96, atlas_timestamp='2025-12-31T21:05:41.712', atlas_cloud=2, atlas_rain=1, zp_data=[0.2602499999999992, 0.44475000000000087, 0.7302500000000007, 0.22100000000000009, 0.665, 0.8302500000000013, 0.5669999999999993, 0.4302500000000009, 0.39949999999999974, 0.4095000000000013, 0.8602499999999988, 0.41999999999999993, 0.3490000000000002, 0.4262499999999996, 0.5399999999999991, 0.019000000000000128, 0.8522499999999997, 0.4294999999999991, 0.9249999999999989, 0.5342499999999992, 0.34750000000000014, 0.24074999999999847, -0.13574999999999982, -0.4472499999999986, 0.6789999999999994, nan, 1.1087499999999997, -0.8900000000000006, 0.2450000000000001, -0.4939999999999998, -1.2979999999999983, -1.4959999999999987, -0.4202500000000011], zp_timestamp='2025-12-31T20:15:00')
2025-12-31T23:06:29.328 [DEBUG] [Thread-136296] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:06:29.401 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T23:06:29.413 [DEBUG] [Thread-136299] [transport.py] [_log()] starting thread (client mode): 0xb95f3d30
2025-12-31T23:06:29.413 [DEBUG] [Thread-136299] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:06:29.430 [DEBUG] [Thread-136299] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T23:06:29.430 [INFO] [Thread-136299] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T23:06:29.439 [DEBUG] [Thread-136299] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:06:29.439 [DEBUG] [Thread-136299] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T23:06:29.439 [DEBUG] [Thread-136299] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:06:29.439 [DEBUG] [Thread-136299] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:06:29.440 [DEBUG] [Thread-136299] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:06:29.440 [DEBUG] [Thread-136299] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:06:29.440 [DEBUG] [Thread-136299] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:06:29.440 [DEBUG] [Thread-136299] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:06:29.440 [DEBUG] [Thread-136299] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:06:29.440 [DEBUG] [Thread-136299] [transport.py] [_log()] client lang: <none>
2025-12-31T23:06:29.440 [DEBUG] [Thread-136299] [transport.py] [_log()] server lang: <none>
2025-12-31T23:06:29.440 [DEBUG] [Thread-136299] [transport.py] [_log()] kex follows: False
2025-12-31T23:06:29.440 [DEBUG] [Thread-136299] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:06:29.440 [DEBUG] [Thread-136299] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:06:29.441 [DEBUG] [Thread-136299] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:06:29.441 [DEBUG] [Thread-136299] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:06:29.441 [DEBUG] [Thread-136299] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:06:29.441 [DEBUG] [Thread-136299] [transport.py] [_log()] Compression: none
2025-12-31T23:06:29.441 [DEBUG] [Thread-136299] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:06:29.508 [DEBUG] [Thread-136299] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:06:29.508 [DEBUG] [Thread-136299] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:06:29.509 [DEBUG] [Thread-136299] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T23:06:29.509 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T23:06:29.510 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:06:29.576 [DEBUG] [Thread-136299] [transport.py] [_log()] userauth is OK
2025-12-31T23:06:29.576 [DEBUG] [Thread-136299] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:06:29.576 [DEBUG] [Thread-136299] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:06:29.576 [DEBUG] [Thread-136299] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T23:06:29.576 [DEBUG] [Thread-136299] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:06:29.599 [INFO] [Thread-136299] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:06:29.600 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T23:06:29.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:06:30.470 [DEBUG] [Thread-136299] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:06:30.470 [DEBUG] [Thread-136299] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:06:30.518 [DEBUG] [Thread-136299] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:06:30.518 [DEBUG] [Thread-136299] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:06:30.528 [DEBUG] [Thread-136299] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:06:30.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:06:30.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T23:06:30.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T23:06:30.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:06:30.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:06:30.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:06:30.564 [DEBUG] [Thread-136299] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:06:40.629 [DEBUG] [Thread-136301 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:06:50.651 [DEBUG] [Thread-136302 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:06:55.673 [DEBUG] [Thread-136303 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:07:00.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T23:07:00.565 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T23:07: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-12-31T23:07:01.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 23, 6, 40), 4.52, 74.17, 0.0, 16.0, 15.35, 0, 0, 0, 2, 0, 0),)
2025-12-31T23:07:01.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 23:06:40
2025-12-31T23:07:01.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T23:07:01.557 [DEBUG] [Thread-136304] [transport.py] [_log()] starting thread (client mode): 0xb95f3f70
2025-12-31T23:07:01.557 [DEBUG] [Thread-136304] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:07:01.578 [DEBUG] [Thread-136304] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T23:07:01.578 [INFO] [Thread-136304] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T23:07:01.582 [DEBUG] [Thread-136304] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:07:01.582 [DEBUG] [Thread-136304] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T23:07:01.583 [DEBUG] [Thread-136304] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:07:01.583 [DEBUG] [Thread-136304] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:07:01.583 [DEBUG] [Thread-136304] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:07:01.583 [DEBUG] [Thread-136304] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:07:01.583 [DEBUG] [Thread-136304] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:07:01.583 [DEBUG] [Thread-136304] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:07:01.583 [DEBUG] [Thread-136304] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:07:01.583 [DEBUG] [Thread-136304] [transport.py] [_log()] client lang: <none>
2025-12-31T23:07:01.583 [DEBUG] [Thread-136304] [transport.py] [_log()] server lang: <none>
2025-12-31T23:07:01.583 [DEBUG] [Thread-136304] [transport.py] [_log()] kex follows: False
2025-12-31T23:07:01.583 [DEBUG] [Thread-136304] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:07:01.583 [DEBUG] [Thread-136304] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:07:01.583 [DEBUG] [Thread-136304] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:07:01.584 [DEBUG] [Thread-136304] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:07:01.584 [DEBUG] [Thread-136304] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:07:01.584 [DEBUG] [Thread-136304] [transport.py] [_log()] Compression: none
2025-12-31T23:07:01.584 [DEBUG] [Thread-136304] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:07:01.601 [DEBUG] [Thread-136304] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:07:01.602 [DEBUG] [Thread-136304] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:07:01.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T23:07:01.603 [DEBUG] [Thread-136304] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T23:07:01.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:07:01.606 [DEBUG] [Thread-136304] [transport.py] [_log()] userauth is OK
2025-12-31T23:07:01.606 [DEBUG] [Thread-136304] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:07:01.606 [DEBUG] [Thread-136304] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:07:01.606 [DEBUG] [Thread-136304] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T23:07:01.606 [DEBUG] [Thread-136304] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:07:01.630 [INFO] [Thread-136304] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:07:01.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:07:02.267 [DEBUG] [Thread-136304] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:07:02.267 [DEBUG] [Thread-136304] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:07:02.268 [DEBUG] [Thread-136304] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T23:07:02.309 [DEBUG] [Thread-136304] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:07:02.309 [DEBUG] [Thread-136304] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:07:02.311 [DEBUG] [Thread-136304] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:07:02.324 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:07:02.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T23:07:02.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T23:07:02.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T23:07:02.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:07:02.337 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T23:07:02.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:07:02.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:07:02.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T23:07:02.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.879302 -999.00  +15.50   7.57     77  +11.50 1 2 1 1 1     0    0 3.53 -22.13 Z..SW 9.5 7.6 206.1 16.6 16.6 -17.0 16.6 -17.3 16.4 -16.2 16.7 -16.4
2025-12-31T23:07:02.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T23:07:02.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T23:07:02.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.879302
2025-12-31T23:07:02.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T23:07:02.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T23:07:02.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T23:07:02.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T23:07:02.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T23:07:02.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T23:06:40', tmtdew=4.52, humidity=74.17, cloud=0.0, wind=16.0, temperature=15.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T23:06:42', seeing=1.01, atlas_timestamp='2025-12-31T21:06:11.693', atlas_cloud=2, atlas_rain=1, zp_data=[0.2602499999999992, 0.44475000000000087, 0.7302500000000007, 0.22100000000000009, 0.665, 0.8302500000000013, 0.5669999999999993, 0.4302500000000009, 0.39949999999999974, 0.4095000000000013, 0.8602499999999988, 0.41999999999999993, 0.3490000000000002, 0.4262499999999996, 0.5399999999999991, 0.019000000000000128, 0.8522499999999997, 0.4294999999999991, 0.9249999999999989, 0.5342499999999992, 0.34750000000000014, 0.24074999999999847, -0.13574999999999982, -0.4472499999999986, 0.6789999999999994, nan, 1.1087499999999997, -0.8900000000000006, 0.2450000000000001, -0.4939999999999998, -1.2979999999999983, -1.4959999999999987, -0.4202500000000011], zp_timestamp='2025-12-31T20:15:00')
2025-12-31T23:07:02.339 [DEBUG] [Thread-136304] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:07:02.422 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T23:07:02.435 [DEBUG] [Thread-136307] [transport.py] [_log()] starting thread (client mode): 0xb95f3130
2025-12-31T23:07:02.435 [DEBUG] [Thread-136307] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:07:02.450 [DEBUG] [Thread-136307] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T23:07:02.450 [INFO] [Thread-136307] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T23:07:02.461 [DEBUG] [Thread-136307] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:07:02.461 [DEBUG] [Thread-136307] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T23:07:02.461 [DEBUG] [Thread-136307] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:07:02.462 [DEBUG] [Thread-136307] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:07:02.462 [DEBUG] [Thread-136307] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:07:02.462 [DEBUG] [Thread-136307] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:07:02.462 [DEBUG] [Thread-136307] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:07:02.462 [DEBUG] [Thread-136307] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:07:02.462 [DEBUG] [Thread-136307] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:07:02.462 [DEBUG] [Thread-136307] [transport.py] [_log()] client lang: <none>
2025-12-31T23:07:02.462 [DEBUG] [Thread-136307] [transport.py] [_log()] server lang: <none>
2025-12-31T23:07:02.462 [DEBUG] [Thread-136307] [transport.py] [_log()] kex follows: False
2025-12-31T23:07:02.462 [DEBUG] [Thread-136307] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:07:02.463 [DEBUG] [Thread-136307] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:07:02.463 [DEBUG] [Thread-136307] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:07:02.463 [DEBUG] [Thread-136307] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:07:02.463 [DEBUG] [Thread-136307] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:07:02.463 [DEBUG] [Thread-136307] [transport.py] [_log()] Compression: none
2025-12-31T23:07:02.463 [DEBUG] [Thread-136307] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:07:02.518 [DEBUG] [Thread-136307] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:07:02.518 [DEBUG] [Thread-136307] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:07:02.518 [DEBUG] [Thread-136307] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T23:07:02.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T23:07:02.519 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:07:02.575 [DEBUG] [Thread-136307] [transport.py] [_log()] userauth is OK
2025-12-31T23:07:02.576 [DEBUG] [Thread-136307] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:07:02.576 [DEBUG] [Thread-136307] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:07:02.576 [DEBUG] [Thread-136307] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T23:07:02.576 [DEBUG] [Thread-136307] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:07:02.595 [INFO] [Thread-136307] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:07:02.596 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T23:07:02.596 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:07:03.418 [DEBUG] [Thread-136307] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:07:03.418 [DEBUG] [Thread-136307] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:07:03.466 [DEBUG] [Thread-136307] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:07:03.466 [DEBUG] [Thread-136307] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:07:03.476 [DEBUG] [Thread-136307] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:07:03.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:07:03.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T23:07:03.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T23:07:03.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:07:03.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:07:03.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:07:03.514 [DEBUG] [Thread-136307] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:07:10.708 [DEBUG] [Thread-136309 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:07:21.908 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:07:21.910 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:07:25.753 [DEBUG] [Thread-136310 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:07:33.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T23:07:33.536 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T23:07:33.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T23:07:34.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 23, 7, 14), 4.5, 74.26, 0.0, 17.45, 15.38, 0, 0, 0, 2, 0, 0),)
2025-12-31T23:07:34.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 23:07:14
2025-12-31T23:07:34.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T23:07:34.530 [DEBUG] [Thread-136311] [transport.py] [_log()] starting thread (client mode): 0xb95f3ca0
2025-12-31T23:07:34.530 [DEBUG] [Thread-136311] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:07:34.551 [DEBUG] [Thread-136311] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T23:07:34.551 [INFO] [Thread-136311] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T23:07:34.554 [DEBUG] [Thread-136311] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:07:34.554 [DEBUG] [Thread-136311] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T23:07:34.554 [DEBUG] [Thread-136311] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:07:34.554 [DEBUG] [Thread-136311] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:07:34.554 [DEBUG] [Thread-136311] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:07:34.554 [DEBUG] [Thread-136311] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:07:34.554 [DEBUG] [Thread-136311] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:07:34.554 [DEBUG] [Thread-136311] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:07:34.555 [DEBUG] [Thread-136311] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:07:34.555 [DEBUG] [Thread-136311] [transport.py] [_log()] client lang: <none>
2025-12-31T23:07:34.555 [DEBUG] [Thread-136311] [transport.py] [_log()] server lang: <none>
2025-12-31T23:07:34.555 [DEBUG] [Thread-136311] [transport.py] [_log()] kex follows: False
2025-12-31T23:07:34.555 [DEBUG] [Thread-136311] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:07:34.555 [DEBUG] [Thread-136311] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:07:34.555 [DEBUG] [Thread-136311] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:07:34.555 [DEBUG] [Thread-136311] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:07:34.555 [DEBUG] [Thread-136311] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:07:34.555 [DEBUG] [Thread-136311] [transport.py] [_log()] Compression: none
2025-12-31T23:07:34.555 [DEBUG] [Thread-136311] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:07:34.572 [DEBUG] [Thread-136311] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:07:34.572 [DEBUG] [Thread-136311] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:07:34.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T23:07:34.573 [DEBUG] [Thread-136311] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T23:07:34.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:07:34.575 [DEBUG] [Thread-136311] [transport.py] [_log()] userauth is OK
2025-12-31T23:07:34.576 [DEBUG] [Thread-136311] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:07:34.576 [DEBUG] [Thread-136311] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:07:34.576 [DEBUG] [Thread-136311] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T23:07:34.576 [DEBUG] [Thread-136311] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:07:34.600 [INFO] [Thread-136311] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:07:34.601 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:07:35.378 [DEBUG] [Thread-136311] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:07:35.379 [DEBUG] [Thread-136311] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:07:35.379 [DEBUG] [Thread-136311] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T23:07:35.421 [DEBUG] [Thread-136311] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:07:35.421 [DEBUG] [Thread-136311] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:07:35.423 [DEBUG] [Thread-136311] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:07:35.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:07:35.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T23:07:35.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T23:07:35.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T23:07:35.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:07:35.444 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T23:07:35.444 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:07:35.444 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:07:35.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T23:07:35.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.879650 -999.00  +15.60  10.12     76  +11.50 1 2 1 1 1     0    0 3.58 -21.94 zN.SW 10.1 10.1 198.2 15.4 16.7 -17.0 16.5 -17.0 16.3 -16.2 16.7 -16.5
2025-12-31T23:07:35.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T23:07:35.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T23:07:35.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.879650
2025-12-31T23:07:35.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T23:07:35.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T23:07:35.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T23:07:35.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T23:07:35.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T23:07:35.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T23:07:14', tmtdew=4.5, humidity=74.26, cloud=0.0, wind=17.45, temperature=15.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T23:07:14', seeing=1.01, atlas_timestamp='2025-12-31T21:06:41.760', atlas_cloud=2, atlas_rain=1, zp_data=[0.2602499999999992, 0.44475000000000087, 0.7302500000000007, 0.22100000000000009, 0.665, 0.8302500000000013, 0.5669999999999993, 0.4302500000000009, 0.39949999999999974, 0.4095000000000013, 0.8602499999999988, 0.41999999999999993, 0.3490000000000002, 0.4262499999999996, 0.5399999999999991, 0.019000000000000128, 0.8522499999999997, 0.4294999999999991, 0.9249999999999989, 0.5342499999999992, 0.34750000000000014, 0.24074999999999847, -0.13574999999999982, -0.4472499999999986, 0.6789999999999994, nan, 1.1087499999999997, -0.8900000000000006, 0.2450000000000001, -0.4939999999999998, -1.2979999999999983, -1.4959999999999987, -0.4202500000000011], zp_timestamp='2025-12-31T20:15:00')
2025-12-31T23:07:35.447 [DEBUG] [Thread-136311] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:07:35.536 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T23:07:35.547 [DEBUG] [Thread-136314] [transport.py] [_log()] starting thread (client mode): 0xb95f2440
2025-12-31T23:07:35.547 [DEBUG] [Thread-136314] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:07:35.561 [DEBUG] [Thread-136314] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T23:07:35.561 [INFO] [Thread-136314] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T23:07:35.568 [DEBUG] [Thread-136314] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:07:35.568 [DEBUG] [Thread-136314] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T23:07:35.568 [DEBUG] [Thread-136314] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:07:35.568 [DEBUG] [Thread-136314] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:07:35.568 [DEBUG] [Thread-136314] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:07:35.568 [DEBUG] [Thread-136314] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:07:35.568 [DEBUG] [Thread-136314] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:07:35.568 [DEBUG] [Thread-136314] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:07:35.568 [DEBUG] [Thread-136314] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:07:35.568 [DEBUG] [Thread-136314] [transport.py] [_log()] client lang: <none>
2025-12-31T23:07:35.568 [DEBUG] [Thread-136314] [transport.py] [_log()] server lang: <none>
2025-12-31T23:07:35.568 [DEBUG] [Thread-136314] [transport.py] [_log()] kex follows: False
2025-12-31T23:07:35.568 [DEBUG] [Thread-136314] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:07:35.568 [DEBUG] [Thread-136314] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:07:35.568 [DEBUG] [Thread-136314] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:07:35.569 [DEBUG] [Thread-136314] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:07:35.569 [DEBUG] [Thread-136314] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:07:35.569 [DEBUG] [Thread-136314] [transport.py] [_log()] Compression: none
2025-12-31T23:07:35.569 [DEBUG] [Thread-136314] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:07:35.626 [DEBUG] [Thread-136314] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:07:35.627 [DEBUG] [Thread-136314] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:07:35.627 [DEBUG] [Thread-136314] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T23:07:35.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T23:07:35.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:07:35.682 [DEBUG] [Thread-136314] [transport.py] [_log()] userauth is OK
2025-12-31T23:07:35.683 [DEBUG] [Thread-136314] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:07:35.683 [DEBUG] [Thread-136314] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:07:35.683 [DEBUG] [Thread-136314] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T23:07:35.683 [DEBUG] [Thread-136314] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:07:35.705 [INFO] [Thread-136314] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:07:35.706 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T23:07:35.706 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:07:36.542 [DEBUG] [Thread-136314] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:07:36.543 [DEBUG] [Thread-136314] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:07:36.590 [DEBUG] [Thread-136314] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:07:36.591 [DEBUG] [Thread-136314] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:07:36.601 [DEBUG] [Thread-136314] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:07:36.611 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:07:36.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T23:07:36.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T23:07:36.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:07:36.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:07:36.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:07:36.640 [DEBUG] [Thread-136314] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:07:40.785 [DEBUG] [Thread-136316 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:07:50.724 [DEBUG] [Thread-136317 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:07:55.847 [DEBUG] [Thread-136318 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:08:06.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T23:08:06.662 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T23:08:06.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T23:08:07.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 23, 7, 46), 4.52, 74.16, 0.0, 20.34, 15.31, 0, 0, 0, 2, 0, 0),)
2025-12-31T23:08:07.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 23:07:46
2025-12-31T23:08:07.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T23:08:07.679 [DEBUG] [Thread-136319] [transport.py] [_log()] starting thread (client mode): 0xb9579810
2025-12-31T23:08:07.679 [DEBUG] [Thread-136319] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:08:07.699 [DEBUG] [Thread-136319] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T23:08:07.699 [INFO] [Thread-136319] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T23:08:07.702 [DEBUG] [Thread-136319] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:08:07.702 [DEBUG] [Thread-136319] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T23:08:07.702 [DEBUG] [Thread-136319] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:08:07.702 [DEBUG] [Thread-136319] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:08:07.702 [DEBUG] [Thread-136319] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:08:07.702 [DEBUG] [Thread-136319] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:08:07.703 [DEBUG] [Thread-136319] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:08:07.703 [DEBUG] [Thread-136319] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:08:07.703 [DEBUG] [Thread-136319] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:08:07.703 [DEBUG] [Thread-136319] [transport.py] [_log()] client lang: <none>
2025-12-31T23:08:07.703 [DEBUG] [Thread-136319] [transport.py] [_log()] server lang: <none>
2025-12-31T23:08:07.703 [DEBUG] [Thread-136319] [transport.py] [_log()] kex follows: False
2025-12-31T23:08:07.703 [DEBUG] [Thread-136319] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:08:07.703 [DEBUG] [Thread-136319] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:08:07.703 [DEBUG] [Thread-136319] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:08:07.703 [DEBUG] [Thread-136319] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:08:07.703 [DEBUG] [Thread-136319] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:08:07.703 [DEBUG] [Thread-136319] [transport.py] [_log()] Compression: none
2025-12-31T23:08:07.703 [DEBUG] [Thread-136319] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:08:07.718 [DEBUG] [Thread-136319] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:08:07.719 [DEBUG] [Thread-136319] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:08:07.719 [DEBUG] [Thread-136319] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T23:08:07.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T23:08:07.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:08:07.760 [DEBUG] [Thread-136319] [transport.py] [_log()] userauth is OK
2025-12-31T23:08:07.760 [DEBUG] [Thread-136319] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:08:07.760 [DEBUG] [Thread-136319] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:08:07.760 [DEBUG] [Thread-136319] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T23:08:07.760 [DEBUG] [Thread-136319] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:08:07.775 [INFO] [Thread-136319] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:08:07.775 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:08:08.424 [DEBUG] [Thread-136319] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:08:08.424 [DEBUG] [Thread-136319] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:08:08.424 [DEBUG] [Thread-136319] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T23:08:08.464 [DEBUG] [Thread-136319] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:08:08.464 [DEBUG] [Thread-136319] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:08:08.468 [DEBUG] [Thread-136319] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:08:08.478 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:08:08.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T23:08:08.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T23:08:08.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T23:08:08.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:08:08.484 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T23:08:08.484 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:08:08.484 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:08:08.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T23:08:08.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.880344 -999.00  +15.50   9.96     76  +11.50 1 2 1 1 1     0    0 3.39 -25.36 zN.SW 12.8 10.0 209.2 18.2 16.6 -17.4 16.5 -17.3 16.3 -16.7 16.6 -16.9
2025-12-31T23:08:08.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T23:08:08.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T23:08:08.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.880344
2025-12-31T23:08:08.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T23:08:08.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T23:08:08.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T23:08:08.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T23:08:08.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T23:08:08.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T23:07:46', tmtdew=4.52, humidity=74.16, cloud=0.0, wind=20.34, temperature=15.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T23:07:46', seeing=1.01, atlas_timestamp='2025-12-31T21:07:41.722', atlas_cloud=2, atlas_rain=1, zp_data=[0.2602499999999992, 0.44475000000000087, 0.7302500000000007, 0.22100000000000009, 0.665, 0.8302500000000013, 0.5669999999999993, 0.4302500000000009, 0.39949999999999974, 0.4095000000000013, 0.8602499999999988, 0.41999999999999993, 0.3490000000000002, 0.4262499999999996, 0.5399999999999991, 0.019000000000000128, 0.8522499999999997, 0.4294999999999991, 0.9249999999999989, 0.5342499999999992, 0.34750000000000014, 0.24074999999999847, -0.13574999999999982, -0.4472499999999986, 0.6789999999999994, nan, 1.1087499999999997, -0.8900000000000006, 0.2450000000000001, -0.4939999999999998, -1.2979999999999983, -1.4959999999999987, -0.4202500000000011], zp_timestamp='2025-12-31T20:15:00')
2025-12-31T23:08:08.485 [DEBUG] [Thread-136319] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:08:08.559 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T23:08:08.571 [DEBUG] [Thread-136322] [transport.py] [_log()] starting thread (client mode): 0xb9579b40
2025-12-31T23:08:08.571 [DEBUG] [Thread-136322] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:08:08.585 [DEBUG] [Thread-136322] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T23:08:08.585 [INFO] [Thread-136322] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T23:08:08.593 [DEBUG] [Thread-136322] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:08:08.593 [DEBUG] [Thread-136322] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T23:08:08.593 [DEBUG] [Thread-136322] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:08:08.593 [DEBUG] [Thread-136322] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:08:08.593 [DEBUG] [Thread-136322] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:08:08.593 [DEBUG] [Thread-136322] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:08:08.593 [DEBUG] [Thread-136322] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:08:08.593 [DEBUG] [Thread-136322] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:08:08.593 [DEBUG] [Thread-136322] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:08:08.593 [DEBUG] [Thread-136322] [transport.py] [_log()] client lang: <none>
2025-12-31T23:08:08.593 [DEBUG] [Thread-136322] [transport.py] [_log()] server lang: <none>
2025-12-31T23:08:08.593 [DEBUG] [Thread-136322] [transport.py] [_log()] kex follows: False
2025-12-31T23:08:08.593 [DEBUG] [Thread-136322] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:08:08.593 [DEBUG] [Thread-136322] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:08:08.593 [DEBUG] [Thread-136322] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:08:08.593 [DEBUG] [Thread-136322] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:08:08.593 [DEBUG] [Thread-136322] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:08:08.593 [DEBUG] [Thread-136322] [transport.py] [_log()] Compression: none
2025-12-31T23:08:08.593 [DEBUG] [Thread-136322] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:08:08.650 [DEBUG] [Thread-136322] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:08:08.651 [DEBUG] [Thread-136322] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:08:08.651 [DEBUG] [Thread-136322] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T23:08:08.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T23:08:08.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:08:08.707 [DEBUG] [Thread-136322] [transport.py] [_log()] userauth is OK
2025-12-31T23:08:08.707 [DEBUG] [Thread-136322] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:08:08.707 [DEBUG] [Thread-136322] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:08:08.707 [DEBUG] [Thread-136322] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T23:08:08.707 [DEBUG] [Thread-136322] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:08:08.722 [INFO] [Thread-136322] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:08:08.722 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T23:08:08.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:08:09.554 [DEBUG] [Thread-136322] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:08:09.554 [DEBUG] [Thread-136322] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:08:09.602 [DEBUG] [Thread-136322] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:08:09.602 [DEBUG] [Thread-136322] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:08:09.611 [DEBUG] [Thread-136322] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:08:09.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:08: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-12-31T23:08:09.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T23:08:09.637 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:08:09.637 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:08:09.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:08:09.645 [DEBUG] [Thread-136322] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:08:10.880 [DEBUG] [Thread-136324 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:08:22.119 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:08:22.121 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:08:25.932 [DEBUG] [Thread-136325 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:08:39.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T23:08:39.644 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T23:08:39.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T23:08:40.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 23, 8, 18), 4.51, 74.24, 0.0, 18.25, 15.36, 0, 0, 0, 2, 0, 0),)
2025-12-31T23:08:40.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 23:08:18
2025-12-31T23:08:40.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T23:08:40.649 [DEBUG] [Thread-136326] [transport.py] [_log()] starting thread (client mode): 0xb9579f00
2025-12-31T23:08:40.649 [DEBUG] [Thread-136326] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:08:40.670 [DEBUG] [Thread-136326] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T23:08:40.670 [INFO] [Thread-136326] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T23:08:40.674 [DEBUG] [Thread-136326] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:08:40.674 [DEBUG] [Thread-136326] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T23:08:40.674 [DEBUG] [Thread-136326] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:08:40.674 [DEBUG] [Thread-136326] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:08:40.674 [DEBUG] [Thread-136326] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:08:40.674 [DEBUG] [Thread-136326] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:08:40.674 [DEBUG] [Thread-136326] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:08:40.674 [DEBUG] [Thread-136326] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:08:40.674 [DEBUG] [Thread-136326] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:08:40.674 [DEBUG] [Thread-136326] [transport.py] [_log()] client lang: <none>
2025-12-31T23:08:40.674 [DEBUG] [Thread-136326] [transport.py] [_log()] server lang: <none>
2025-12-31T23:08:40.674 [DEBUG] [Thread-136326] [transport.py] [_log()] kex follows: False
2025-12-31T23:08:40.674 [DEBUG] [Thread-136326] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:08:40.674 [DEBUG] [Thread-136326] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:08:40.674 [DEBUG] [Thread-136326] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:08:40.674 [DEBUG] [Thread-136326] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:08:40.674 [DEBUG] [Thread-136326] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:08:40.674 [DEBUG] [Thread-136326] [transport.py] [_log()] Compression: none
2025-12-31T23:08:40.674 [DEBUG] [Thread-136326] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:08:40.693 [DEBUG] [Thread-136326] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:08:40.693 [DEBUG] [Thread-136326] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:08:40.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T23:08:40.694 [DEBUG] [Thread-136326] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T23:08:40.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:08:40.696 [DEBUG] [Thread-136326] [transport.py] [_log()] userauth is OK
2025-12-31T23:08:40.696 [DEBUG] [Thread-136326] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:08:40.696 [DEBUG] [Thread-136326] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:08:40.696 [DEBUG] [Thread-136326] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T23:08:40.697 [DEBUG] [Thread-136326] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:08:40.711 [INFO] [Thread-136326] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:08:40.711 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:08:40.969 [DEBUG] [Thread-136328 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:08:41.522 [DEBUG] [Thread-136326] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:08:41.522 [DEBUG] [Thread-136326] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:08:41.522 [DEBUG] [Thread-136326] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T23:08:41.563 [DEBUG] [Thread-136326] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:08:41.563 [DEBUG] [Thread-136326] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:08:41.565 [DEBUG] [Thread-136326] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:08:41.578 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:08:41.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T23:08:41.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T23:08:41.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T23:08:41.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:08:41.588 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T23:08:41.588 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:08:41.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:08:41.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T23:08:41.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.880691 -999.00  +15.50   9.48     76  +11.50 1 2 1 1 1     0    0 3.41 -25.40 ...SW 9.7 9.5 191.7 16.4 16.6 -17.6 16.4 -17.7 16.3 -16.8 16.6 -16.9
2025-12-31T23:08:41.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T23:08:41.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T23:08:41.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.880691
2025-12-31T23:08:41.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T23:08:41.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T23:08:41.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T23:08:41.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T23:08:41.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T23:08:41.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T23:08:18', tmtdew=4.51, humidity=74.24, cloud=0.0, wind=18.25, temperature=15.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T23:08:18', seeing=1.18, atlas_timestamp='2025-12-31T21:08:11.702', atlas_cloud=2, atlas_rain=1, zp_data=[0.2602499999999992, 0.44475000000000087, 0.7302500000000007, 0.22100000000000009, 0.665, 0.8302500000000013, 0.5669999999999993, 0.4302500000000009, 0.39949999999999974, 0.4095000000000013, 0.8602499999999988, 0.41999999999999993, 0.3490000000000002, 0.4262499999999996, 0.5399999999999991, 0.019000000000000128, 0.8522499999999997, 0.4294999999999991, 0.9249999999999989, 0.5342499999999992, 0.34750000000000014, 0.24074999999999847, -0.13574999999999982, -0.4472499999999986, 0.6789999999999994, nan, 1.1087499999999997, -0.8900000000000006, 0.2450000000000001, -0.4939999999999998, -1.2979999999999983, -1.4959999999999987, -0.4202500000000011], zp_timestamp='2025-12-31T20:15:00')
2025-12-31T23:08:41.591 [DEBUG] [Thread-136326] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:08:41.673 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T23:08:41.689 [DEBUG] [Thread-136330] [transport.py] [_log()] starting thread (client mode): 0xb17450f0
2025-12-31T23:08:41.689 [DEBUG] [Thread-136330] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:08:41.707 [DEBUG] [Thread-136330] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T23:08:41.707 [INFO] [Thread-136330] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T23:08:41.715 [DEBUG] [Thread-136330] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:08:41.715 [DEBUG] [Thread-136330] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T23:08:41.715 [DEBUG] [Thread-136330] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:08:41.715 [DEBUG] [Thread-136330] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:08:41.716 [DEBUG] [Thread-136330] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:08:41.716 [DEBUG] [Thread-136330] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:08:41.716 [DEBUG] [Thread-136330] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:08:41.716 [DEBUG] [Thread-136330] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:08:41.716 [DEBUG] [Thread-136330] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:08:41.716 [DEBUG] [Thread-136330] [transport.py] [_log()] client lang: <none>
2025-12-31T23:08:41.716 [DEBUG] [Thread-136330] [transport.py] [_log()] server lang: <none>
2025-12-31T23:08:41.716 [DEBUG] [Thread-136330] [transport.py] [_log()] kex follows: False
2025-12-31T23:08:41.716 [DEBUG] [Thread-136330] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:08:41.716 [DEBUG] [Thread-136330] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:08:41.716 [DEBUG] [Thread-136330] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:08:41.716 [DEBUG] [Thread-136330] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:08:41.716 [DEBUG] [Thread-136330] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:08:41.716 [DEBUG] [Thread-136330] [transport.py] [_log()] Compression: none
2025-12-31T23:08:41.716 [DEBUG] [Thread-136330] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:08:41.779 [DEBUG] [Thread-136330] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:08:41.779 [DEBUG] [Thread-136330] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:08:41.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T23:08:41.780 [DEBUG] [Thread-136330] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T23:08:41.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:08:41.842 [DEBUG] [Thread-136330] [transport.py] [_log()] userauth is OK
2025-12-31T23:08:41.842 [DEBUG] [Thread-136330] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:08:41.842 [DEBUG] [Thread-136330] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:08:41.842 [DEBUG] [Thread-136330] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T23:08:41.843 [DEBUG] [Thread-136330] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:08:41.861 [INFO] [Thread-136330] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:08:41.862 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T23:08:41.862 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:08:42.709 [DEBUG] [Thread-136330] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:08:42.709 [DEBUG] [Thread-136330] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:08:42.759 [DEBUG] [Thread-136330] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:08:42.759 [DEBUG] [Thread-136330] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:08:42.767 [DEBUG] [Thread-136330] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:08:42.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:08:42.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T23:08:42.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T23:08:42.792 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:08:42.793 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:08:42.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:08:42.801 [DEBUG] [Thread-136330] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:08:50.806 [DEBUG] [Thread-136332 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:08:56.000 [DEBUG] [Thread-136333 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:09:11.063 [DEBUG] [Thread-136334 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:09:12.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T23:09:12.812 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T23:09:12.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T23:09:13.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 23, 8, 50), 4.5, 74.27, 0.0, 18.6, 15.36, 0, 0, 0, 2, 0, 0),)
2025-12-31T23:09:13.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 23:08:50
2025-12-31T23:09:13.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T23:09:13.808 [DEBUG] [Thread-136335] [transport.py] [_log()] starting thread (client mode): 0xb1744070
2025-12-31T23:09:13.808 [DEBUG] [Thread-136335] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:09:13.828 [DEBUG] [Thread-136335] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T23:09:13.828 [INFO] [Thread-136335] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T23:09:13.831 [DEBUG] [Thread-136335] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:09:13.831 [DEBUG] [Thread-136335] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T23:09:13.831 [DEBUG] [Thread-136335] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:09:13.831 [DEBUG] [Thread-136335] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:09:13.831 [DEBUG] [Thread-136335] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:09:13.831 [DEBUG] [Thread-136335] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:09:13.831 [DEBUG] [Thread-136335] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:09:13.831 [DEBUG] [Thread-136335] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:09:13.832 [DEBUG] [Thread-136335] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:09:13.832 [DEBUG] [Thread-136335] [transport.py] [_log()] client lang: <none>
2025-12-31T23:09:13.832 [DEBUG] [Thread-136335] [transport.py] [_log()] server lang: <none>
2025-12-31T23:09:13.832 [DEBUG] [Thread-136335] [transport.py] [_log()] kex follows: False
2025-12-31T23:09:13.832 [DEBUG] [Thread-136335] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:09:13.832 [DEBUG] [Thread-136335] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:09:13.832 [DEBUG] [Thread-136335] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:09:13.832 [DEBUG] [Thread-136335] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:09:13.832 [DEBUG] [Thread-136335] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:09:13.832 [DEBUG] [Thread-136335] [transport.py] [_log()] Compression: none
2025-12-31T23:09:13.832 [DEBUG] [Thread-136335] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:09:13.850 [DEBUG] [Thread-136335] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:09:13.851 [DEBUG] [Thread-136335] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:09:13.852 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T23:09:13.852 [DEBUG] [Thread-136335] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T23:09:13.853 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:09:13.893 [DEBUG] [Thread-136335] [transport.py] [_log()] userauth is OK
2025-12-31T23:09:13.893 [DEBUG] [Thread-136335] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:09:13.894 [DEBUG] [Thread-136335] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:09:13.894 [DEBUG] [Thread-136335] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T23:09:13.894 [DEBUG] [Thread-136335] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:09:13.925 [INFO] [Thread-136335] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:09:13.926 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:09:14.576 [DEBUG] [Thread-136335] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:09:14.576 [DEBUG] [Thread-136335] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:09:14.577 [DEBUG] [Thread-136335] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T23:09:14.617 [DEBUG] [Thread-136335] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:09:14.617 [DEBUG] [Thread-136335] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:09:14.621 [DEBUG] [Thread-136335] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:09:14.634 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:09:14.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T23:09:14.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T23:09:14.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T23:09:14.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:09:14.646 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T23:09:14.647 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:09:14.647 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:09:14.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T23:09:14.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.881038 -999.00  +15.60   6.39     76  +11.50 1 2 1 1 1     0    0 3.34 -26.44 ...SW 12.0 6.4 218.0 15.1 16.6 -17.6 16.5 -17.8 16.3 -17.1 16.6 -17.3
2025-12-31T23:09:14.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T23:09:14.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T23:09:14.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.881038
2025-12-31T23:09:14.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T23:09:14.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T23:09:14.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T23:09:14.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T23:09:14.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T23:09:14.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T23:08:50', tmtdew=4.5, humidity=74.27, cloud=0.0, wind=18.6, temperature=15.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T23:08:50', seeing=1.3, atlas_timestamp='2025-12-31T21:08:41.683', atlas_cloud=2, atlas_rain=1, zp_data=[0.4972499999999993, 0.42074999999999996, 0.9802500000000007, 0.660499999999999, 0.15850000000000009, 0.3312500000000007, 0.5664999999999996, 0.5042500000000008, 0.18599999999999994, 0.8385000000000007, 1.1262499999999998, 0.6594999999999995, 0.28800000000000026, 0.17525000000000013, 0.2619999999999987, 0.10899999999999999, 0.6292499999999999, 0.9464999999999995, 1.2969999999999997, nan, 0.2579999999999991, 0.10474999999999923, -0.039749999999997954, -0.5052500000000002, 0.9089999999999989, nan, 1.3137499999999998, -0.8740000000000006, -0.09550000000000125, -0.5449999999999982, -1.584999999999999, -1.3089999999999993, 0.36874999999999947], zp_timestamp='2025-12-31T21:08:00')
2025-12-31T23:09:14.650 [DEBUG] [Thread-136335] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:09:14.732 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T23:09:14.744 [DEBUG] [Thread-136338] [transport.py] [_log()] starting thread (client mode): 0xb957a380
2025-12-31T23:09:14.744 [DEBUG] [Thread-136338] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:09:14.759 [DEBUG] [Thread-136338] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T23:09:14.760 [INFO] [Thread-136338] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T23:09:14.767 [DEBUG] [Thread-136338] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:09:14.768 [DEBUG] [Thread-136338] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T23:09:14.768 [DEBUG] [Thread-136338] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:09:14.768 [DEBUG] [Thread-136338] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:09:14.768 [DEBUG] [Thread-136338] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:09:14.768 [DEBUG] [Thread-136338] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:09:14.768 [DEBUG] [Thread-136338] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:09:14.768 [DEBUG] [Thread-136338] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:09:14.768 [DEBUG] [Thread-136338] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:09:14.769 [DEBUG] [Thread-136338] [transport.py] [_log()] client lang: <none>
2025-12-31T23:09:14.769 [DEBUG] [Thread-136338] [transport.py] [_log()] server lang: <none>
2025-12-31T23:09:14.769 [DEBUG] [Thread-136338] [transport.py] [_log()] kex follows: False
2025-12-31T23:09:14.769 [DEBUG] [Thread-136338] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:09:14.769 [DEBUG] [Thread-136338] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:09:14.769 [DEBUG] [Thread-136338] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:09:14.769 [DEBUG] [Thread-136338] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:09:14.769 [DEBUG] [Thread-136338] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:09:14.770 [DEBUG] [Thread-136338] [transport.py] [_log()] Compression: none
2025-12-31T23:09:14.770 [DEBUG] [Thread-136338] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:09:14.829 [DEBUG] [Thread-136338] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:09:14.829 [DEBUG] [Thread-136338] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:09:14.830 [DEBUG] [Thread-136338] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T23:09:14.830 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T23:09:14.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:09:14.888 [DEBUG] [Thread-136338] [transport.py] [_log()] userauth is OK
2025-12-31T23:09:14.888 [DEBUG] [Thread-136338] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:09:14.888 [DEBUG] [Thread-136338] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:09:14.889 [DEBUG] [Thread-136338] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T23:09:14.889 [DEBUG] [Thread-136338] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:09:14.907 [INFO] [Thread-136338] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:09:14.908 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T23:09:14.908 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:09:15.742 [DEBUG] [Thread-136338] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:09:15.743 [DEBUG] [Thread-136338] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:09:15.792 [DEBUG] [Thread-136338] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:09:15.792 [DEBUG] [Thread-136338] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:09:15.801 [DEBUG] [Thread-136338] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:09:15.810 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:09:15.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T23:09:15.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T23:09:15.828 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:09:15.828 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:09:15.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:09:15.836 [DEBUG] [Thread-136338] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:09:22.325 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:09:22.326 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:09:26.093 [DEBUG] [Thread-136340 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:09:41.137 [DEBUG] [Thread-136341 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:09:45.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T23:09:45.858 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T23:09:45.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-12-31T23:09:46.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 23, 9, 22), 4.5, 74.26, 0.0, 18.6, 15.31, 0, 0, 0, 2, 0, 0),)
2025-12-31T23:09:46.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 23:09:22
2025-12-31T23:09:46.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T23:09:46.838 [DEBUG] [Thread-136342] [transport.py] [_log()] starting thread (client mode): 0xb957b4c0
2025-12-31T23:09:46.838 [DEBUG] [Thread-136342] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:09:46.859 [DEBUG] [Thread-136342] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T23:09:46.860 [INFO] [Thread-136342] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T23:09:46.863 [DEBUG] [Thread-136342] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:09:46.863 [DEBUG] [Thread-136342] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T23:09:46.863 [DEBUG] [Thread-136342] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:09:46.863 [DEBUG] [Thread-136342] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:09:46.863 [DEBUG] [Thread-136342] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:09:46.863 [DEBUG] [Thread-136342] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:09:46.863 [DEBUG] [Thread-136342] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:09:46.863 [DEBUG] [Thread-136342] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:09:46.863 [DEBUG] [Thread-136342] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:09:46.863 [DEBUG] [Thread-136342] [transport.py] [_log()] client lang: <none>
2025-12-31T23:09:46.864 [DEBUG] [Thread-136342] [transport.py] [_log()] server lang: <none>
2025-12-31T23:09:46.864 [DEBUG] [Thread-136342] [transport.py] [_log()] kex follows: False
2025-12-31T23:09:46.864 [DEBUG] [Thread-136342] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:09:46.864 [DEBUG] [Thread-136342] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:09:46.864 [DEBUG] [Thread-136342] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:09:46.864 [DEBUG] [Thread-136342] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:09:46.864 [DEBUG] [Thread-136342] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:09:46.864 [DEBUG] [Thread-136342] [transport.py] [_log()] Compression: none
2025-12-31T23:09:46.864 [DEBUG] [Thread-136342] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:09:46.882 [DEBUG] [Thread-136342] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:09:46.883 [DEBUG] [Thread-136342] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:09:46.884 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T23:09:46.884 [DEBUG] [Thread-136342] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T23:09:46.885 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:09:46.887 [DEBUG] [Thread-136342] [transport.py] [_log()] userauth is OK
2025-12-31T23:09:46.887 [DEBUG] [Thread-136342] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:09:46.887 [DEBUG] [Thread-136342] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:09:46.887 [DEBUG] [Thread-136342] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T23:09:46.887 [DEBUG] [Thread-136342] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:09:46.911 [INFO] [Thread-136342] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:09:46.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:09:47.708 [DEBUG] [Thread-136342] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:09:47.708 [DEBUG] [Thread-136342] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:09:47.708 [DEBUG] [Thread-136342] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T23:09:47.750 [DEBUG] [Thread-136342] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:09:47.750 [DEBUG] [Thread-136342] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:09:47.753 [DEBUG] [Thread-136342] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:09:47.764 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:09:47.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T23:09:47.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T23:09:47.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T23:09:47.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:09:47.776 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T23:09:47.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:09:47.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:09:47.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T23:09:47.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.881386 -999.00  +15.50  11.77     76  +11.50 1 2 1 1 1     0    0 3.43 -25.33 ...SW 11.1 11.8 205.0 17.7 16.6 -18.0 16.5 -18.1 16.3 -17.5 16.6 -17.7
2025-12-31T23:09:47.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T23:09:47.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T23:09:47.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.881386
2025-12-31T23:09:47.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T23:09:47.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T23:09:47.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T23:09:47.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T23:09:47.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T23:09:47.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T23:09:22', tmtdew=4.5, humidity=74.26, cloud=0.0, wind=18.6, temperature=15.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T23:09:22', seeing=1.4, atlas_timestamp='2025-12-31T21:09:11.750', atlas_cloud=2, atlas_rain=1, zp_data=[0.4972499999999993, 0.42074999999999996, 0.9802500000000007, 0.660499999999999, 0.15850000000000009, 0.3312500000000007, 0.5664999999999996, 0.5042500000000008, 0.18599999999999994, 0.8385000000000007, 1.1262499999999998, 0.6594999999999995, 0.28800000000000026, 0.17525000000000013, 0.2619999999999987, 0.10899999999999999, 0.6292499999999999, 0.9464999999999995, 1.2969999999999997, nan, 0.2579999999999991, 0.10474999999999923, -0.039749999999997954, -0.5052500000000002, 0.9089999999999989, nan, 1.3137499999999998, -0.8740000000000006, -0.09550000000000125, -0.5449999999999982, -1.584999999999999, -1.3089999999999993, 0.36874999999999947], zp_timestamp='2025-12-31T21:08:00')
2025-12-31T23:09:47.779 [DEBUG] [Thread-136342] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:09:47.862 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T23:09:47.873 [DEBUG] [Thread-136345] [transport.py] [_log()] starting thread (client mode): 0xb9578b50
2025-12-31T23:09:47.874 [DEBUG] [Thread-136345] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:09:47.888 [DEBUG] [Thread-136345] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T23:09:47.888 [INFO] [Thread-136345] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T23:09:47.896 [DEBUG] [Thread-136345] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:09:47.896 [DEBUG] [Thread-136345] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T23:09:47.897 [DEBUG] [Thread-136345] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:09:47.897 [DEBUG] [Thread-136345] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:09:47.897 [DEBUG] [Thread-136345] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:09:47.897 [DEBUG] [Thread-136345] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:09:47.897 [DEBUG] [Thread-136345] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:09:47.897 [DEBUG] [Thread-136345] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:09:47.897 [DEBUG] [Thread-136345] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:09:47.897 [DEBUG] [Thread-136345] [transport.py] [_log()] client lang: <none>
2025-12-31T23:09:47.897 [DEBUG] [Thread-136345] [transport.py] [_log()] server lang: <none>
2025-12-31T23:09:47.898 [DEBUG] [Thread-136345] [transport.py] [_log()] kex follows: False
2025-12-31T23:09:47.898 [DEBUG] [Thread-136345] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:09:47.898 [DEBUG] [Thread-136345] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:09:47.898 [DEBUG] [Thread-136345] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:09:47.898 [DEBUG] [Thread-136345] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:09:47.898 [DEBUG] [Thread-136345] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:09:47.898 [DEBUG] [Thread-136345] [transport.py] [_log()] Compression: none
2025-12-31T23:09:47.899 [DEBUG] [Thread-136345] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:09:47.964 [DEBUG] [Thread-136345] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:09:47.964 [DEBUG] [Thread-136345] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:09:47.965 [DEBUG] [Thread-136345] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T23:09:47.965 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T23:09:47.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:09:48.019 [DEBUG] [Thread-136345] [transport.py] [_log()] userauth is OK
2025-12-31T23:09:48.020 [DEBUG] [Thread-136345] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:09:48.020 [DEBUG] [Thread-136345] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:09:48.020 [DEBUG] [Thread-136345] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T23:09:48.020 [DEBUG] [Thread-136345] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:09:48.038 [INFO] [Thread-136345] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:09:48.039 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T23:09:48.040 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:09:48.886 [DEBUG] [Thread-136345] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:09:48.887 [DEBUG] [Thread-136345] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:09:48.934 [DEBUG] [Thread-136345] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:09:48.934 [DEBUG] [Thread-136345] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:09:48.951 [DEBUG] [Thread-136345] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:09:48.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:09:48.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T23:09:48.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T23:09:48.979 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:09:48.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:09:48.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:09:48.988 [DEBUG] [Thread-136345] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:09:50.890 [DEBUG] [Thread-136347 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:09:56.171 [DEBUG] [Thread-136348 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:10:11.213 [DEBUG] [Thread-136349 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:10:18.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T23:10:18.983 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T23:10:18.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T23:10:19.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 23, 9, 54), 4.5, 74.29, 0.0, 21.4, 15.33, 0, 0, 0, 2, 0, 0),)
2025-12-31T23:10:19.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 23:09:54
2025-12-31T23:10:19.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T23:10:19.967 [DEBUG] [Thread-136350] [transport.py] [_log()] starting thread (client mode): 0xb1745150
2025-12-31T23:10:19.967 [DEBUG] [Thread-136350] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:10:19.987 [DEBUG] [Thread-136350] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T23:10:19.987 [INFO] [Thread-136350] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T23:10:19.990 [DEBUG] [Thread-136350] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:10:19.990 [DEBUG] [Thread-136350] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T23:10:19.990 [DEBUG] [Thread-136350] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:10:19.990 [DEBUG] [Thread-136350] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:10:19.990 [DEBUG] [Thread-136350] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:10:19.990 [DEBUG] [Thread-136350] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:10:19.990 [DEBUG] [Thread-136350] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:10:19.990 [DEBUG] [Thread-136350] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:10:19.990 [DEBUG] [Thread-136350] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:10:19.990 [DEBUG] [Thread-136350] [transport.py] [_log()] client lang: <none>
2025-12-31T23:10:19.990 [DEBUG] [Thread-136350] [transport.py] [_log()] server lang: <none>
2025-12-31T23:10:19.990 [DEBUG] [Thread-136350] [transport.py] [_log()] kex follows: False
2025-12-31T23:10:19.990 [DEBUG] [Thread-136350] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:10:19.990 [DEBUG] [Thread-136350] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:10:19.990 [DEBUG] [Thread-136350] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:10:19.990 [DEBUG] [Thread-136350] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:10:19.990 [DEBUG] [Thread-136350] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:10:19.990 [DEBUG] [Thread-136350] [transport.py] [_log()] Compression: none
2025-12-31T23:10:19.990 [DEBUG] [Thread-136350] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:10:20.006 [DEBUG] [Thread-136350] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:10:20.006 [DEBUG] [Thread-136350] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:10:20.007 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T23:10:20.008 [DEBUG] [Thread-136350] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T23:10:20.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:10:20.009 [DEBUG] [Thread-136350] [transport.py] [_log()] userauth is OK
2025-12-31T23:10:20.010 [DEBUG] [Thread-136350] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:10:20.010 [DEBUG] [Thread-136350] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:10:20.010 [DEBUG] [Thread-136350] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T23:10:20.010 [DEBUG] [Thread-136350] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:10:20.034 [INFO] [Thread-136350] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:10:20.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:10:20.705 [DEBUG] [Thread-136350] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:10:20.705 [DEBUG] [Thread-136350] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:10:20.706 [DEBUG] [Thread-136350] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T23:10:20.746 [DEBUG] [Thread-136350] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:10:20.746 [DEBUG] [Thread-136350] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:10:20.749 [DEBUG] [Thread-136350] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:10:20.763 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:10:20.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T23:10:20.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T23:10:20.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T23:10:20.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:10:20.777 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T23:10:20.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:10:20.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:10:20.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T23:10:20.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.881733 -999.00  +15.50  10.61     76  +11.50 1 2 1 1 1     0    0 3.32 -26.42 ...SW 10.1 10.6 187.4 16.3 16.6 -18.2 16.4 -18.2 16.2 -17.5 16.6 -17.6
2025-12-31T23:10:20.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T23:10:20.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T23:10:20.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.881733
2025-12-31T23:10:20.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T23:10:20.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T23:10:20.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T23:10:20.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T23:10:20.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T23:10:20.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T23:09:54', tmtdew=4.5, humidity=74.29, cloud=0.0, wind=21.4, temperature=15.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T23:09:54', seeing=0.91, atlas_timestamp='2025-12-31T21:09:41.731', atlas_cloud=2, atlas_rain=1, zp_data=[0.4972499999999993, 0.42074999999999996, 0.9802500000000007, 0.660499999999999, 0.15850000000000009, 0.3312500000000007, 0.5664999999999996, 0.5042500000000008, 0.18599999999999994, 0.8385000000000007, 1.1262499999999998, 0.6594999999999995, 0.28800000000000026, 0.17525000000000013, 0.2619999999999987, 0.10899999999999999, 0.6292499999999999, 0.9464999999999995, 1.2969999999999997, nan, 0.2579999999999991, 0.10474999999999923, -0.039749999999997954, -0.5052500000000002, 0.9089999999999989, nan, 1.3137499999999998, -0.8740000000000006, -0.09550000000000125, -0.5449999999999982, -1.584999999999999, -1.3089999999999993, 0.36874999999999947], zp_timestamp='2025-12-31T21:08:00')
2025-12-31T23:10:20.780 [DEBUG] [Thread-136350] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:10: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-12-31T23:10:20.876 [DEBUG] [Thread-136353] [transport.py] [_log()] starting thread (client mode): 0xb17456f0
2025-12-31T23:10:20.876 [DEBUG] [Thread-136353] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:10:20.892 [DEBUG] [Thread-136353] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T23:10:20.892 [INFO] [Thread-136353] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T23:10:20.900 [DEBUG] [Thread-136353] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:10:20.900 [DEBUG] [Thread-136353] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T23:10:20.900 [DEBUG] [Thread-136353] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:10:20.900 [DEBUG] [Thread-136353] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:10:20.900 [DEBUG] [Thread-136353] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:10:20.900 [DEBUG] [Thread-136353] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:10:20.900 [DEBUG] [Thread-136353] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:10:20.900 [DEBUG] [Thread-136353] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:10:20.900 [DEBUG] [Thread-136353] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:10:20.900 [DEBUG] [Thread-136353] [transport.py] [_log()] client lang: <none>
2025-12-31T23:10:20.900 [DEBUG] [Thread-136353] [transport.py] [_log()] server lang: <none>
2025-12-31T23:10:20.900 [DEBUG] [Thread-136353] [transport.py] [_log()] kex follows: False
2025-12-31T23:10:20.900 [DEBUG] [Thread-136353] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:10:20.900 [DEBUG] [Thread-136353] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:10:20.901 [DEBUG] [Thread-136353] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:10:20.901 [DEBUG] [Thread-136353] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:10:20.901 [DEBUG] [Thread-136353] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:10:20.901 [DEBUG] [Thread-136353] [transport.py] [_log()] Compression: none
2025-12-31T23:10:20.901 [DEBUG] [Thread-136353] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:10:20.959 [DEBUG] [Thread-136353] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:10:20.960 [DEBUG] [Thread-136353] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:10:20.960 [DEBUG] [Thread-136353] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T23:10:20.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T23:10:20.961 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:10:21.016 [DEBUG] [Thread-136353] [transport.py] [_log()] userauth is OK
2025-12-31T23:10:21.017 [DEBUG] [Thread-136353] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:10:21.017 [DEBUG] [Thread-136353] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:10:21.017 [DEBUG] [Thread-136353] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T23:10:21.017 [DEBUG] [Thread-136353] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:10:21.035 [INFO] [Thread-136353] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:10:21.036 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T23:10:21.036 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:10:21.860 [DEBUG] [Thread-136353] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:10:21.860 [DEBUG] [Thread-136353] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:10:21.908 [DEBUG] [Thread-136353] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:10:21.908 [DEBUG] [Thread-136353] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:10:21.918 [DEBUG] [Thread-136353] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:10:21.927 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:10:21.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T23:10:21.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T23:10:21.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:10:21.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:10:21.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:10:21.957 [DEBUG] [Thread-136353] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:10:22.525 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:10:22.527 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:10:26.250 [DEBUG] [Thread-136355 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:10:41.298 [DEBUG] [Thread-136356 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:10:50.965 [DEBUG] [Thread-136357 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:10:51.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T23:10:51.975 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T23:10:51.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T23:10:52.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 23, 10, 26), 4.5, 74.24, 0.0, 20.63, 15.3, 0, 0, 0, 2, 0, 0),)
2025-12-31T23:10:52.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 23:10:26
2025-12-31T23:10:52.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T23:10:52.974 [DEBUG] [Thread-136358] [transport.py] [_log()] starting thread (client mode): 0xb1747160
2025-12-31T23:10:52.974 [DEBUG] [Thread-136358] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:10:52.993 [DEBUG] [Thread-136358] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T23:10:52.994 [INFO] [Thread-136358] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T23:10:52.995 [DEBUG] [Thread-136358] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:10:52.995 [DEBUG] [Thread-136358] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T23:10:52.995 [DEBUG] [Thread-136358] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:10:52.995 [DEBUG] [Thread-136358] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:10:52.995 [DEBUG] [Thread-136358] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:10:52.995 [DEBUG] [Thread-136358] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:10:52.995 [DEBUG] [Thread-136358] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:10:52.995 [DEBUG] [Thread-136358] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:10:52.995 [DEBUG] [Thread-136358] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:10:52.995 [DEBUG] [Thread-136358] [transport.py] [_log()] client lang: <none>
2025-12-31T23:10:52.995 [DEBUG] [Thread-136358] [transport.py] [_log()] server lang: <none>
2025-12-31T23:10:52.995 [DEBUG] [Thread-136358] [transport.py] [_log()] kex follows: False
2025-12-31T23:10:52.995 [DEBUG] [Thread-136358] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:10:52.995 [DEBUG] [Thread-136358] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:10:52.995 [DEBUG] [Thread-136358] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:10:52.995 [DEBUG] [Thread-136358] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:10:52.995 [DEBUG] [Thread-136358] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:10:52.995 [DEBUG] [Thread-136358] [transport.py] [_log()] Compression: none
2025-12-31T23:10:52.995 [DEBUG] [Thread-136358] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:10:53.008 [DEBUG] [Thread-136358] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:10:53.008 [DEBUG] [Thread-136358] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:10:53.009 [DEBUG] [Thread-136358] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T23:10:53.009 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T23:10:53.009 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:10:53.011 [DEBUG] [Thread-136358] [transport.py] [_log()] userauth is OK
2025-12-31T23:10:53.011 [DEBUG] [Thread-136358] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:10:53.011 [DEBUG] [Thread-136358] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:10:53.011 [DEBUG] [Thread-136358] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T23:10:53.011 [DEBUG] [Thread-136358] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:10:53.031 [INFO] [Thread-136358] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:10:53.031 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:10:53.682 [DEBUG] [Thread-136358] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:10:53.683 [DEBUG] [Thread-136358] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:10:53.683 [DEBUG] [Thread-136358] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T23:10:53.723 [DEBUG] [Thread-136358] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:10:53.723 [DEBUG] [Thread-136358] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:10:53.726 [DEBUG] [Thread-136358] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:10:53.740 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:10:53.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T23:10:53.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T23:10:53.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T23:10:53.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:10:53.753 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T23:10:53.753 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:10:53.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:10:53.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T23:10:53.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.882427 -999.00  +15.60   7.29     76  +11.50 1 2 1 1 1     0    0 3.33 -28.52 Z.ESW 11.4 7.3 192.5 11.7 16.6 -18.7 16.4 -18.6 16.2 -17.9 16.5 -18.1
2025-12-31T23:10:53.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T23:10:53.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T23:10:53.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.882427
2025-12-31T23:10:53.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T23:10:53.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T23:10:53.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T23:10:53.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T23:10:53.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T23:10:53.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T23:10:26', tmtdew=4.5, humidity=74.24, cloud=0.0, wind=20.63, temperature=15.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T23:10:26', seeing=1.01, atlas_timestamp='2025-12-31T21:10:41.693', atlas_cloud=2, atlas_rain=1, zp_data=[0.4972499999999993, 0.42074999999999996, 0.9802500000000007, 0.660499999999999, 0.15850000000000009, 0.3312500000000007, 0.5664999999999996, 0.5042500000000008, 0.18599999999999994, 0.8385000000000007, 1.1262499999999998, 0.6594999999999995, 0.28800000000000026, 0.17525000000000013, 0.2619999999999987, 0.10899999999999999, 0.6292499999999999, 0.9464999999999995, 1.2969999999999997, nan, 0.2579999999999991, 0.10474999999999923, -0.039749999999997954, -0.5052500000000002, 0.9089999999999989, nan, 1.3137499999999998, -0.8740000000000006, -0.09550000000000125, -0.5449999999999982, -1.584999999999999, -1.3089999999999993, 0.36874999999999947], zp_timestamp='2025-12-31T21:08:00')
2025-12-31T23:10:53.756 [DEBUG] [Thread-136358] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:10:53.839 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T23:10:53.855 [DEBUG] [Thread-136361] [transport.py] [_log()] starting thread (client mode): 0xb95783a0
2025-12-31T23:10:53.855 [DEBUG] [Thread-136361] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:10:53.871 [DEBUG] [Thread-136361] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T23:10:53.871 [INFO] [Thread-136361] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T23:10:53.879 [DEBUG] [Thread-136361] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:10:53.879 [DEBUG] [Thread-136361] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T23:10:53.879 [DEBUG] [Thread-136361] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:10:53.879 [DEBUG] [Thread-136361] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:10:53.879 [DEBUG] [Thread-136361] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:10:53.879 [DEBUG] [Thread-136361] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:10:53.879 [DEBUG] [Thread-136361] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:10:53.879 [DEBUG] [Thread-136361] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:10:53.879 [DEBUG] [Thread-136361] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:10:53.879 [DEBUG] [Thread-136361] [transport.py] [_log()] client lang: <none>
2025-12-31T23:10:53.879 [DEBUG] [Thread-136361] [transport.py] [_log()] server lang: <none>
2025-12-31T23:10:53.879 [DEBUG] [Thread-136361] [transport.py] [_log()] kex follows: False
2025-12-31T23:10:53.879 [DEBUG] [Thread-136361] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:10:53.880 [DEBUG] [Thread-136361] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:10:53.880 [DEBUG] [Thread-136361] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:10:53.880 [DEBUG] [Thread-136361] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:10:53.880 [DEBUG] [Thread-136361] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:10:53.880 [DEBUG] [Thread-136361] [transport.py] [_log()] Compression: none
2025-12-31T23:10:53.880 [DEBUG] [Thread-136361] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:10:53.939 [DEBUG] [Thread-136361] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:10:53.939 [DEBUG] [Thread-136361] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:10:53.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T23:10:53.940 [DEBUG] [Thread-136361] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T23:10:53.941 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:10:53.995 [DEBUG] [Thread-136361] [transport.py] [_log()] userauth is OK
2025-12-31T23:10:53.995 [DEBUG] [Thread-136361] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:10:53.995 [DEBUG] [Thread-136361] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:10:53.996 [DEBUG] [Thread-136361] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T23:10:53.996 [DEBUG] [Thread-136361] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:10:54.017 [INFO] [Thread-136361] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:10:54.018 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T23:10:54.018 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:10:54.841 [DEBUG] [Thread-136361] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:10:54.841 [DEBUG] [Thread-136361] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:10:54.889 [DEBUG] [Thread-136361] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:10:54.889 [DEBUG] [Thread-136361] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:10:54.899 [DEBUG] [Thread-136361] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:10:54.911 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:10:54.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T23:10:54.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T23:10:54.930 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:10:54.931 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:10:54.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:10:54.939 [DEBUG] [Thread-136361] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:10:56.327 [DEBUG] [Thread-136363 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:11:11.376 [DEBUG] [Thread-136364 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:11:22.728 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:11:22.728 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:11:24.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T23:11:24.949 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T23:11:24.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-12-31T23:11:25.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 23, 10, 58), 4.55, 74.29, 0.0, 18.49, 15.33, 0, 0, 0, 2, 0, 0),)
2025-12-31T23:11:25.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 23:10:58
2025-12-31T23:11:25.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T23:11:25.956 [DEBUG] [Thread-136365] [transport.py] [_log()] starting thread (client mode): 0xb9578c40
2025-12-31T23:11:25.956 [DEBUG] [Thread-136365] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:11:25.975 [DEBUG] [Thread-136365] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T23:11:25.975 [INFO] [Thread-136365] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T23:11:25.977 [DEBUG] [Thread-136365] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:11:25.977 [DEBUG] [Thread-136365] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T23:11:25.977 [DEBUG] [Thread-136365] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:11:25.977 [DEBUG] [Thread-136365] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:11:25.977 [DEBUG] [Thread-136365] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:11:25.977 [DEBUG] [Thread-136365] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:11:25.977 [DEBUG] [Thread-136365] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:11:25.977 [DEBUG] [Thread-136365] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:11:25.977 [DEBUG] [Thread-136365] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:11:25.977 [DEBUG] [Thread-136365] [transport.py] [_log()] client lang: <none>
2025-12-31T23:11:25.977 [DEBUG] [Thread-136365] [transport.py] [_log()] server lang: <none>
2025-12-31T23:11:25.977 [DEBUG] [Thread-136365] [transport.py] [_log()] kex follows: False
2025-12-31T23:11:25.977 [DEBUG] [Thread-136365] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:11:25.977 [DEBUG] [Thread-136365] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:11:25.977 [DEBUG] [Thread-136365] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:11:25.977 [DEBUG] [Thread-136365] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:11:25.977 [DEBUG] [Thread-136365] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:11:25.977 [DEBUG] [Thread-136365] [transport.py] [_log()] Compression: none
2025-12-31T23:11:25.977 [DEBUG] [Thread-136365] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:11:25.989 [DEBUG] [Thread-136365] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:11:25.990 [DEBUG] [Thread-136365] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:11:25.990 [DEBUG] [Thread-136365] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T23:11:25.990 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T23:11:25.991 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:11:25.992 [DEBUG] [Thread-136365] [transport.py] [_log()] userauth is OK
2025-12-31T23:11:25.992 [DEBUG] [Thread-136365] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:11:25.992 [DEBUG] [Thread-136365] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:11:25.992 [DEBUG] [Thread-136365] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T23:11:25.992 [DEBUG] [Thread-136365] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:11:26.009 [INFO] [Thread-136365] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:11:26.009 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:11:26.408 [DEBUG] [Thread-136367 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:11:26.625 [DEBUG] [Thread-136365] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:11:26.625 [DEBUG] [Thread-136365] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:11:26.625 [DEBUG] [Thread-136365] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T23:11:26.666 [DEBUG] [Thread-136365] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:11:26.666 [DEBUG] [Thread-136365] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:11:26.669 [DEBUG] [Thread-136365] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:11:26.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:11:26.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T23:11:26.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T23:11:26.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T23:11:26.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:11:26.691 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T23:11:26.691 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:11:26.691 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:11:26.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T23:11:26.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.882774 -999.00  +15.60   9.08     76  +11.50 1 2 1 1 1     0    0 3.30 -27.77 Z.ESW 9.8 9.1 199.0 13.9 16.6 -18.9 16.5 -18.8 16.3 -17.9 16.6 -18.3
2025-12-31T23:11:26.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T23:11:26.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T23:11:26.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.882774
2025-12-31T23:11:26.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T23:11:26.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T23:11:26.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T23:11:26.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T23:11:26.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T23:11:26.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T23:10:58', tmtdew=4.55, humidity=74.29, cloud=0.0, wind=18.49, temperature=15.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T23:10:58', seeing=1.15, atlas_timestamp='2025-12-31T21:11:11.674', atlas_cloud=2, atlas_rain=1, zp_data=[0.4972499999999993, 0.42074999999999996, 0.9802500000000007, 0.660499999999999, 0.15850000000000009, 0.3312500000000007, 0.5664999999999996, 0.5042500000000008, 0.18599999999999994, 0.8385000000000007, 1.1262499999999998, 0.6594999999999995, 0.28800000000000026, 0.17525000000000013, 0.2619999999999987, 0.10899999999999999, 0.6292499999999999, 0.9464999999999995, 1.2969999999999997, nan, 0.2579999999999991, 0.10474999999999923, -0.039749999999997954, -0.5052500000000002, 0.9089999999999989, nan, 1.3137499999999998, -0.8740000000000006, -0.09550000000000125, -0.5449999999999982, -1.584999999999999, -1.3089999999999993, 0.36874999999999947], zp_timestamp='2025-12-31T21:08:00')
2025-12-31T23:11:26.693 [DEBUG] [Thread-136365] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:11:26.778 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T23:11:26.790 [DEBUG] [Thread-136369] [transport.py] [_log()] starting thread (client mode): 0xb17440d0
2025-12-31T23:11:26.790 [DEBUG] [Thread-136369] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:11:26.808 [DEBUG] [Thread-136369] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T23:11:26.809 [INFO] [Thread-136369] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T23:11:26.816 [DEBUG] [Thread-136369] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:11:26.816 [DEBUG] [Thread-136369] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T23:11:26.816 [DEBUG] [Thread-136369] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:11:26.816 [DEBUG] [Thread-136369] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:11:26.817 [DEBUG] [Thread-136369] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:11:26.817 [DEBUG] [Thread-136369] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:11:26.817 [DEBUG] [Thread-136369] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:11:26.817 [DEBUG] [Thread-136369] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:11:26.817 [DEBUG] [Thread-136369] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:11:26.817 [DEBUG] [Thread-136369] [transport.py] [_log()] client lang: <none>
2025-12-31T23:11:26.817 [DEBUG] [Thread-136369] [transport.py] [_log()] server lang: <none>
2025-12-31T23:11:26.817 [DEBUG] [Thread-136369] [transport.py] [_log()] kex follows: False
2025-12-31T23:11:26.817 [DEBUG] [Thread-136369] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:11:26.818 [DEBUG] [Thread-136369] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:11:26.818 [DEBUG] [Thread-136369] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:11:26.818 [DEBUG] [Thread-136369] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:11:26.818 [DEBUG] [Thread-136369] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:11:26.818 [DEBUG] [Thread-136369] [transport.py] [_log()] Compression: none
2025-12-31T23:11:26.818 [DEBUG] [Thread-136369] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:11:26.876 [DEBUG] [Thread-136369] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:11:26.876 [DEBUG] [Thread-136369] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:11:26.877 [DEBUG] [Thread-136369] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T23:11:26.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T23:11:26.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:11:26.935 [DEBUG] [Thread-136369] [transport.py] [_log()] userauth is OK
2025-12-31T23:11:26.935 [DEBUG] [Thread-136369] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:11:26.935 [DEBUG] [Thread-136369] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:11:26.935 [DEBUG] [Thread-136369] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T23:11:26.935 [DEBUG] [Thread-136369] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:11:26.956 [INFO] [Thread-136369] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:11:26.956 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T23:11:26.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:11:27.825 [DEBUG] [Thread-136369] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:11:27.826 [DEBUG] [Thread-136369] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:11:27.874 [DEBUG] [Thread-136369] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:11:27.874 [DEBUG] [Thread-136369] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:11:27.882 [DEBUG] [Thread-136369] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:11:27.890 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:11:27.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T23:11:27.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T23:11:27.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:11:27.907 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:11:27.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:11:27.915 [DEBUG] [Thread-136369] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:11:41.443 [DEBUG] [Thread-136371 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:11:51.050 [DEBUG] [Thread-136372 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:11:56.506 [DEBUG] [Thread-136373 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:11:57.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T23:11:57.937 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T23:11:57.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T23:11:58.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 23, 11, 30), 4.52, 74.44, 0.0, 18.0, 15.35, 0, 0, 0, 2, 0, 0),)
2025-12-31T23:11:58.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 23:11:30
2025-12-31T23:11:58.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T23:11:58.987 [DEBUG] [Thread-136374] [transport.py] [_log()] starting thread (client mode): 0xb95f0130
2025-12-31T23:11:58.987 [DEBUG] [Thread-136374] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:11:59.006 [DEBUG] [Thread-136374] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T23:11:59.007 [INFO] [Thread-136374] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T23:11:59.009 [DEBUG] [Thread-136374] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:11:59.009 [DEBUG] [Thread-136374] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T23:11:59.009 [DEBUG] [Thread-136374] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:11:59.009 [DEBUG] [Thread-136374] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:11:59.009 [DEBUG] [Thread-136374] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:11:59.009 [DEBUG] [Thread-136374] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:11:59.009 [DEBUG] [Thread-136374] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:11:59.009 [DEBUG] [Thread-136374] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:11:59.009 [DEBUG] [Thread-136374] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:11:59.009 [DEBUG] [Thread-136374] [transport.py] [_log()] client lang: <none>
2025-12-31T23:11:59.009 [DEBUG] [Thread-136374] [transport.py] [_log()] server lang: <none>
2025-12-31T23:11:59.009 [DEBUG] [Thread-136374] [transport.py] [_log()] kex follows: False
2025-12-31T23:11:59.009 [DEBUG] [Thread-136374] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:11:59.009 [DEBUG] [Thread-136374] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:11:59.009 [DEBUG] [Thread-136374] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:11:59.009 [DEBUG] [Thread-136374] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:11:59.009 [DEBUG] [Thread-136374] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:11:59.009 [DEBUG] [Thread-136374] [transport.py] [_log()] Compression: none
2025-12-31T23:11:59.009 [DEBUG] [Thread-136374] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:11:59.019 [DEBUG] [Thread-136374] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:11:59.019 [DEBUG] [Thread-136374] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:11:59.020 [DEBUG] [Thread-136374] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T23:11:59.020 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T23:11:59.020 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:11:59.021 [DEBUG] [Thread-136374] [transport.py] [_log()] userauth is OK
2025-12-31T23:11:59.021 [DEBUG] [Thread-136374] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:11:59.021 [DEBUG] [Thread-136374] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:11:59.021 [DEBUG] [Thread-136374] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T23:11:59.021 [DEBUG] [Thread-136374] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:11:59.032 [INFO] [Thread-136374] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:11:59.032 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:11:59.596 [DEBUG] [Thread-136374] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:11:59.596 [DEBUG] [Thread-136374] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:11:59.596 [DEBUG] [Thread-136374] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T23:11:59.636 [DEBUG] [Thread-136374] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:11:59.636 [DEBUG] [Thread-136374] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:11:59.639 [DEBUG] [Thread-136374] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:11:59.652 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:11:59.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T23:11:59.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T23:11:59.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T23:11:59.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:11:59.656 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T23:11:59.656 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:11:59.656 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:11:59.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T23:11:59.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.883122 -999.00  +15.50  10.77     77  +11.50 1 2 1 1 1     0    0 3.39 -24.78 Z.ESW 14.8 10.8 200.4 18.3 16.6 -19.3 16.4 -19.3 16.2 -18.3 16.5 -18.6
2025-12-31T23:11:59.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T23:11:59.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T23:11:59.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.883122
2025-12-31T23:11:59.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T23:11:59.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T23:11:59.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T23:11:59.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T23:11:59.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T23:11:59.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T23:11:30', tmtdew=4.52, humidity=74.44, cloud=0.0, wind=18.0, temperature=15.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T23:11:31', seeing=1.15, atlas_timestamp='2025-12-31T21:11:41.741', atlas_cloud=2, atlas_rain=1, zp_data=[0.4972499999999993, 0.42074999999999996, 0.9802500000000007, 0.660499999999999, 0.15850000000000009, 0.3312500000000007, 0.5664999999999996, 0.5042500000000008, 0.18599999999999994, 0.8385000000000007, 1.1262499999999998, 0.6594999999999995, 0.28800000000000026, 0.17525000000000013, 0.2619999999999987, 0.10899999999999999, 0.6292499999999999, 0.9464999999999995, 1.2969999999999997, nan, 0.2579999999999991, 0.10474999999999923, -0.039749999999997954, -0.5052500000000002, 0.9089999999999989, nan, 1.3137499999999998, -0.8740000000000006, -0.09550000000000125, -0.5449999999999982, -1.584999999999999, -1.3089999999999993, 0.36874999999999947], zp_timestamp='2025-12-31T21:08:00')
2025-12-31T23:11:59.656 [DEBUG] [Thread-136374] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:11:59.731 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T23:11:59.743 [DEBUG] [Thread-136377] [transport.py] [_log()] starting thread (client mode): 0xb957acb0
2025-12-31T23:11:59.743 [DEBUG] [Thread-136377] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:11:59.758 [DEBUG] [Thread-136377] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T23:11:59.758 [INFO] [Thread-136377] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T23:11:59.765 [DEBUG] [Thread-136377] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:11:59.765 [DEBUG] [Thread-136377] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T23:11:59.765 [DEBUG] [Thread-136377] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:11:59.765 [DEBUG] [Thread-136377] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:11:59.765 [DEBUG] [Thread-136377] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:11:59.765 [DEBUG] [Thread-136377] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:11:59.765 [DEBUG] [Thread-136377] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:11:59.765 [DEBUG] [Thread-136377] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:11:59.765 [DEBUG] [Thread-136377] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:11:59.765 [DEBUG] [Thread-136377] [transport.py] [_log()] client lang: <none>
2025-12-31T23:11:59.765 [DEBUG] [Thread-136377] [transport.py] [_log()] server lang: <none>
2025-12-31T23:11:59.765 [DEBUG] [Thread-136377] [transport.py] [_log()] kex follows: False
2025-12-31T23:11:59.765 [DEBUG] [Thread-136377] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:11:59.765 [DEBUG] [Thread-136377] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:11:59.765 [DEBUG] [Thread-136377] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:11:59.765 [DEBUG] [Thread-136377] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:11:59.765 [DEBUG] [Thread-136377] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:11:59.766 [DEBUG] [Thread-136377] [transport.py] [_log()] Compression: none
2025-12-31T23:11:59.766 [DEBUG] [Thread-136377] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:11:59.822 [DEBUG] [Thread-136377] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:11:59.822 [DEBUG] [Thread-136377] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:11:59.822 [DEBUG] [Thread-136377] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T23:11:59.822 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T23:11:59.822 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:11:59.879 [DEBUG] [Thread-136377] [transport.py] [_log()] userauth is OK
2025-12-31T23:11:59.879 [DEBUG] [Thread-136377] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:11:59.879 [DEBUG] [Thread-136377] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:11:59.879 [DEBUG] [Thread-136377] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T23:11:59.879 [DEBUG] [Thread-136377] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:11:59.892 [INFO] [Thread-136377] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:11:59.893 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T23:11:59.893 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:12:00.726 [DEBUG] [Thread-136377] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:12:00.726 [DEBUG] [Thread-136377] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:12:00.773 [DEBUG] [Thread-136377] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:12:00.774 [DEBUG] [Thread-136377] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:12:00.782 [DEBUG] [Thread-136377] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:12:00.790 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:12:00.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T23:12:00.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T23:12:00.805 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:12:00.806 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:12:00.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:12:00.813 [DEBUG] [Thread-136377] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:12:11.538 [DEBUG] [Thread-136379 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:12:22.927 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:12:22.928 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:12:26.602 [DEBUG] [Thread-136380 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:12:30.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T23:12:30.816 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T23:12:30.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-12-31T23:12:31.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 23, 12, 3), 4.51, 74.44, 0.0, 18.65, 15.28, 0, 0, 0, 2, 0, 0),)
2025-12-31T23:12:31.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 23:12:03
2025-12-31T23:12:31.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T23:12:31.810 [DEBUG] [Thread-136381] [transport.py] [_log()] starting thread (client mode): 0xb9579390
2025-12-31T23:12:31.811 [DEBUG] [Thread-136381] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:12:31.832 [DEBUG] [Thread-136381] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T23:12:31.833 [INFO] [Thread-136381] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T23:12:31.834 [DEBUG] [Thread-136381] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:12:31.834 [DEBUG] [Thread-136381] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T23:12:31.834 [DEBUG] [Thread-136381] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:12:31.834 [DEBUG] [Thread-136381] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:12:31.834 [DEBUG] [Thread-136381] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:12:31.834 [DEBUG] [Thread-136381] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:12:31.834 [DEBUG] [Thread-136381] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:12:31.835 [DEBUG] [Thread-136381] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:12:31.835 [DEBUG] [Thread-136381] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:12:31.835 [DEBUG] [Thread-136381] [transport.py] [_log()] client lang: <none>
2025-12-31T23:12:31.835 [DEBUG] [Thread-136381] [transport.py] [_log()] server lang: <none>
2025-12-31T23:12:31.835 [DEBUG] [Thread-136381] [transport.py] [_log()] kex follows: False
2025-12-31T23:12:31.835 [DEBUG] [Thread-136381] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:12:31.835 [DEBUG] [Thread-136381] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:12:31.835 [DEBUG] [Thread-136381] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:12:31.835 [DEBUG] [Thread-136381] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:12:31.835 [DEBUG] [Thread-136381] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:12:31.835 [DEBUG] [Thread-136381] [transport.py] [_log()] Compression: none
2025-12-31T23:12:31.835 [DEBUG] [Thread-136381] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:12:31.850 [DEBUG] [Thread-136381] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:12:31.851 [DEBUG] [Thread-136381] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:12:31.851 [DEBUG] [Thread-136381] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T23:12:31.852 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T23:12:31.853 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:12:31.854 [DEBUG] [Thread-136381] [transport.py] [_log()] userauth is OK
2025-12-31T23:12:31.854 [DEBUG] [Thread-136381] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:12:31.854 [DEBUG] [Thread-136381] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:12:31.854 [DEBUG] [Thread-136381] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T23:12:31.855 [DEBUG] [Thread-136381] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:12:31.877 [INFO] [Thread-136381] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:12:31.878 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:12:32.442 [DEBUG] [Thread-136381] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:12:32.442 [DEBUG] [Thread-136381] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:12:32.443 [DEBUG] [Thread-136381] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T23:12:32.483 [DEBUG] [Thread-136381] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:12:32.483 [DEBUG] [Thread-136381] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:12:32.486 [DEBUG] [Thread-136381] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:12:32.497 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:12:32.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T23:12:32.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T23:12:32.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T23:12:32.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:12:32.511 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T23:12:32.511 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:12:32.511 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:12:32.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T23:12:32.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.883122 -999.00  +15.50  10.77     77  +11.50 1 2 1 1 1     0    0 3.39 -24.78 Z.ESW 14.8 10.8 200.4 18.3 16.6 -19.3 16.4 -19.3 16.2 -18.3 16.5 -18.6
2025-12-31T23:12:32.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T23:12:32.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T23:12:32.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.883122
2025-12-31T23:12:32.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T23:12:32.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T23:12:32.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T23:12:32.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T23:12:32.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T23:12:32.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T23:12:03', tmtdew=4.51, humidity=74.44, cloud=0.0, wind=18.65, temperature=15.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T23:12:03', seeing=0.9, atlas_timestamp='2025-12-31T21:11:41.741', atlas_cloud=2, atlas_rain=1, zp_data=[0.4167500000000004, 1.11125, 0.6047500000000019, 0.08449999999999847, 0.0860000000000003, 0.800250000000001, 0.3179999999999996, 0.8202500000000006, 1.7594999999999992, 0.41800000000000104, 0.15124999999999922, 0.07099999999999973, 0.13100000000000023, 0.8032499999999994, 0.49599999999999866, -0.06300000000000061, 1.4402499999999998, 0.5659999999999998, 0.12599999999999945, 0.11824999999999974, 0.0649999999999995, 0.3227499999999992, -1.0177499999999995, 0.8067500000000001, nan, 0.27800000000000047, 0.14424999999999955, 0.18200000000000038, 0.27000000000000046, 0.045000000000001705, -1.5234999999999985, -1.741999999999999, 0.6022500000000006], zp_timestamp='2025-12-31T21:11:00')
2025-12-31T23:12:32.514 [DEBUG] [Thread-136381] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:12:32.596 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T23:12:32.608 [DEBUG] [Thread-136384] [transport.py] [_log()] starting thread (client mode): 0xb95783a0
2025-12-31T23:12:32.608 [DEBUG] [Thread-136384] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:12:32.626 [DEBUG] [Thread-136384] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T23:12:32.626 [INFO] [Thread-136384] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T23:12:32.633 [DEBUG] [Thread-136384] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:12:32.634 [DEBUG] [Thread-136384] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T23:12:32.634 [DEBUG] [Thread-136384] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:12:32.634 [DEBUG] [Thread-136384] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:12:32.634 [DEBUG] [Thread-136384] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:12:32.634 [DEBUG] [Thread-136384] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:12:32.634 [DEBUG] [Thread-136384] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:12:32.634 [DEBUG] [Thread-136384] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:12:32.634 [DEBUG] [Thread-136384] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:12:32.634 [DEBUG] [Thread-136384] [transport.py] [_log()] client lang: <none>
2025-12-31T23:12:32.634 [DEBUG] [Thread-136384] [transport.py] [_log()] server lang: <none>
2025-12-31T23:12:32.634 [DEBUG] [Thread-136384] [transport.py] [_log()] kex follows: False
2025-12-31T23:12:32.634 [DEBUG] [Thread-136384] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:12:32.634 [DEBUG] [Thread-136384] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:12:32.634 [DEBUG] [Thread-136384] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:12:32.634 [DEBUG] [Thread-136384] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:12:32.635 [DEBUG] [Thread-136384] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:12:32.635 [DEBUG] [Thread-136384] [transport.py] [_log()] Compression: none
2025-12-31T23:12:32.635 [DEBUG] [Thread-136384] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:12:32.691 [DEBUG] [Thread-136384] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:12:32.691 [DEBUG] [Thread-136384] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:12:32.692 [DEBUG] [Thread-136384] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T23:12:32.692 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T23:12:32.693 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:12:32.748 [DEBUG] [Thread-136384] [transport.py] [_log()] userauth is OK
2025-12-31T23:12:32.748 [DEBUG] [Thread-136384] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:12:32.748 [DEBUG] [Thread-136384] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:12:32.748 [DEBUG] [Thread-136384] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T23:12:32.749 [DEBUG] [Thread-136384] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:12:32.768 [INFO] [Thread-136384] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:12:32.769 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T23:12:32.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:12:33.627 [DEBUG] [Thread-136384] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:12:33.627 [DEBUG] [Thread-136384] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:12:33.675 [DEBUG] [Thread-136384] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:12:33.675 [DEBUG] [Thread-136384] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:12:33.685 [DEBUG] [Thread-136384] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:12:33.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:12:33.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T23:12:33.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T23:12:33.712 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:12:33.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:12:33.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:12:33.722 [DEBUG] [Thread-136384] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:12:41.632 [DEBUG] [Thread-136386 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:12:51.119 [DEBUG] [Thread-136387 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:12:56.676 [DEBUG] [Thread-136388 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:13:03.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T23:13:03.744 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T23:13:03.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T23:13:04.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 23, 12, 35), 4.48, 74.59, 0.0, 17.49, 15.31, 0, 0, 0, 2, 0, 0),)
2025-12-31T23:13:04.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 23:12:35
2025-12-31T23:13:04.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T23:13:04.729 [DEBUG] [Thread-136389] [transport.py] [_log()] starting thread (client mode): 0xb1747430
2025-12-31T23:13:04.729 [DEBUG] [Thread-136389] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:13:04.750 [DEBUG] [Thread-136389] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T23:13:04.750 [INFO] [Thread-136389] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T23:13:04.754 [DEBUG] [Thread-136389] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:13:04.754 [DEBUG] [Thread-136389] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T23:13:04.754 [DEBUG] [Thread-136389] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:13:04.754 [DEBUG] [Thread-136389] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:13:04.754 [DEBUG] [Thread-136389] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:13:04.754 [DEBUG] [Thread-136389] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:13:04.754 [DEBUG] [Thread-136389] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:13:04.754 [DEBUG] [Thread-136389] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:13:04.754 [DEBUG] [Thread-136389] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:13:04.754 [DEBUG] [Thread-136389] [transport.py] [_log()] client lang: <none>
2025-12-31T23:13:04.754 [DEBUG] [Thread-136389] [transport.py] [_log()] server lang: <none>
2025-12-31T23:13:04.754 [DEBUG] [Thread-136389] [transport.py] [_log()] kex follows: False
2025-12-31T23:13:04.754 [DEBUG] [Thread-136389] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:13:04.754 [DEBUG] [Thread-136389] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:13:04.754 [DEBUG] [Thread-136389] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:13:04.754 [DEBUG] [Thread-136389] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:13:04.754 [DEBUG] [Thread-136389] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:13:04.754 [DEBUG] [Thread-136389] [transport.py] [_log()] Compression: none
2025-12-31T23:13:04.754 [DEBUG] [Thread-136389] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:13:04.772 [DEBUG] [Thread-136389] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:13:04.772 [DEBUG] [Thread-136389] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:13:04.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T23:13:04.773 [DEBUG] [Thread-136389] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T23:13:04.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:13:04.775 [DEBUG] [Thread-136389] [transport.py] [_log()] userauth is OK
2025-12-31T23:13:04.776 [DEBUG] [Thread-136389] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:13:04.776 [DEBUG] [Thread-136389] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:13:04.776 [DEBUG] [Thread-136389] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T23:13:04.776 [DEBUG] [Thread-136389] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:13:04.800 [INFO] [Thread-136389] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:13:04.801 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:13:05.437 [DEBUG] [Thread-136389] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:13:05.437 [DEBUG] [Thread-136389] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:13:05.437 [DEBUG] [Thread-136389] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T23:13:05.478 [DEBUG] [Thread-136389] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:13:05.479 [DEBUG] [Thread-136389] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:13:05.481 [DEBUG] [Thread-136389] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:13:05.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:13:05.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T23:13:05.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T23:13:05.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T23:13:05.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:13:05.502 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T23:13:05.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:13:05.502 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:13:05.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T23:13:05.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.883469 -999.00  +15.50  15.70     77  +11.50 1 2 1 1 1     0    0 3.23 -27.91 ZnESW 10.2 15.7 200.0 18.6 16.5 -19.3 16.4 -19.3 16.2 -18.3 16.5 -18.6
2025-12-31T23:13:05.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T23:13:05.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T23:13:05.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.883469
2025-12-31T23:13:05.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T23:13:05.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T23:13:05.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T23:13:05.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T23:13:05.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T23:13:05.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T23:12:35', tmtdew=4.48, humidity=74.59, cloud=0.0, wind=17.49, temperature=15.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T23:12:35', seeing=0.95, atlas_timestamp='2025-12-31T21:12:11.722', atlas_cloud=2, atlas_rain=1, zp_data=[0.4167500000000004, 1.11125, 0.6047500000000019, 0.08449999999999847, 0.0860000000000003, 0.800250000000001, 0.3179999999999996, 0.8202500000000006, 1.7594999999999992, 0.41800000000000104, 0.15124999999999922, 0.07099999999999973, 0.13100000000000023, 0.8032499999999994, 0.49599999999999866, -0.06300000000000061, 1.4402499999999998, 0.5659999999999998, 0.12599999999999945, 0.11824999999999974, 0.0649999999999995, 0.3227499999999992, -1.0177499999999995, 0.8067500000000001, nan, 0.27800000000000047, 0.14424999999999955, 0.18200000000000038, 0.27000000000000046, 0.045000000000001705, -1.5234999999999985, -1.741999999999999, 0.6022500000000006], zp_timestamp='2025-12-31T21:11:00')
2025-12-31T23:13:05.504 [DEBUG] [Thread-136389] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:13:05.585 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T23:13:05.598 [DEBUG] [Thread-136392] [transport.py] [_log()] starting thread (client mode): 0xb1744a60
2025-12-31T23:13:05.598 [DEBUG] [Thread-136392] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:13:05.613 [DEBUG] [Thread-136392] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T23:13:05.613 [INFO] [Thread-136392] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T23:13:05.620 [DEBUG] [Thread-136392] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:13:05.620 [DEBUG] [Thread-136392] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T23:13:05.620 [DEBUG] [Thread-136392] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:13:05.620 [DEBUG] [Thread-136392] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:13:05.621 [DEBUG] [Thread-136392] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:13:05.621 [DEBUG] [Thread-136392] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:13:05.621 [DEBUG] [Thread-136392] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:13:05.621 [DEBUG] [Thread-136392] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:13:05.621 [DEBUG] [Thread-136392] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:13:05.621 [DEBUG] [Thread-136392] [transport.py] [_log()] client lang: <none>
2025-12-31T23:13:05.621 [DEBUG] [Thread-136392] [transport.py] [_log()] server lang: <none>
2025-12-31T23:13:05.621 [DEBUG] [Thread-136392] [transport.py] [_log()] kex follows: False
2025-12-31T23:13:05.621 [DEBUG] [Thread-136392] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:13:05.621 [DEBUG] [Thread-136392] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:13:05.621 [DEBUG] [Thread-136392] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:13:05.621 [DEBUG] [Thread-136392] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:13:05.622 [DEBUG] [Thread-136392] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:13:05.622 [DEBUG] [Thread-136392] [transport.py] [_log()] Compression: none
2025-12-31T23:13:05.622 [DEBUG] [Thread-136392] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:13:05.679 [DEBUG] [Thread-136392] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:13:05.680 [DEBUG] [Thread-136392] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:13:05.680 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T23:13:05.681 [DEBUG] [Thread-136392] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T23:13:05.681 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:13:05.736 [DEBUG] [Thread-136392] [transport.py] [_log()] userauth is OK
2025-12-31T23:13:05.736 [DEBUG] [Thread-136392] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:13:05.736 [DEBUG] [Thread-136392] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:13:05.737 [DEBUG] [Thread-136392] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T23:13:05.737 [DEBUG] [Thread-136392] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:13:05.756 [INFO] [Thread-136392] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:13:05.756 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T23:13:05.757 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:13:06.571 [DEBUG] [Thread-136392] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:13:06.571 [DEBUG] [Thread-136392] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:13:06.619 [DEBUG] [Thread-136392] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:13:06.620 [DEBUG] [Thread-136392] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:13:06.629 [DEBUG] [Thread-136392] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:13:06.638 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:13:06.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T23:13:06.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T23:13:06.657 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:13:06.657 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:13:06.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:13:06.666 [DEBUG] [Thread-136392] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:13:11.712 [DEBUG] [Thread-136394 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:13:23.152 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:13:23.153 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:13:26.759 [DEBUG] [Thread-136395 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:13:36.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T23:13:36.688 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T23:13:36.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T23:13:37.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 23, 13, 7), 4.48, 74.62, 0.0, 16.92, 15.33, 0, 0, 0, 2, 0, 0),)
2025-12-31T23:13:37.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 23:13:07
2025-12-31T23:13:37.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T23:13:37.695 [DEBUG] [Thread-136396] [transport.py] [_log()] starting thread (client mode): 0xb95f3be0
2025-12-31T23:13:37.695 [DEBUG] [Thread-136396] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:13:37.717 [DEBUG] [Thread-136396] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T23:13:37.717 [INFO] [Thread-136396] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T23:13:37.720 [DEBUG] [Thread-136396] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:13:37.721 [DEBUG] [Thread-136396] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T23:13:37.721 [DEBUG] [Thread-136396] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:13:37.721 [DEBUG] [Thread-136396] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:13:37.721 [DEBUG] [Thread-136396] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:13:37.721 [DEBUG] [Thread-136396] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:13:37.721 [DEBUG] [Thread-136396] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:13:37.721 [DEBUG] [Thread-136396] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:13:37.721 [DEBUG] [Thread-136396] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:13:37.721 [DEBUG] [Thread-136396] [transport.py] [_log()] client lang: <none>
2025-12-31T23:13:37.721 [DEBUG] [Thread-136396] [transport.py] [_log()] server lang: <none>
2025-12-31T23:13:37.721 [DEBUG] [Thread-136396] [transport.py] [_log()] kex follows: False
2025-12-31T23:13:37.721 [DEBUG] [Thread-136396] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:13:37.721 [DEBUG] [Thread-136396] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:13:37.721 [DEBUG] [Thread-136396] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:13:37.721 [DEBUG] [Thread-136396] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:13:37.721 [DEBUG] [Thread-136396] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:13:37.721 [DEBUG] [Thread-136396] [transport.py] [_log()] Compression: none
2025-12-31T23:13:37.721 [DEBUG] [Thread-136396] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:13:37.739 [DEBUG] [Thread-136396] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:13:37.739 [DEBUG] [Thread-136396] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:13:37.740 [DEBUG] [Thread-136396] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T23:13:37.740 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T23:13:37.741 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:13:37.742 [DEBUG] [Thread-136396] [transport.py] [_log()] userauth is OK
2025-12-31T23:13:37.742 [DEBUG] [Thread-136396] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:13:37.742 [DEBUG] [Thread-136396] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:13:37.742 [DEBUG] [Thread-136396] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T23:13:37.742 [DEBUG] [Thread-136396] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:13:37.765 [INFO] [Thread-136396] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:13:37.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:13:38.415 [DEBUG] [Thread-136396] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:13:38.415 [DEBUG] [Thread-136396] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:13:38.416 [DEBUG] [Thread-136396] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T23:13:38.456 [DEBUG] [Thread-136396] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:13:38.457 [DEBUG] [Thread-136396] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:13:38.460 [DEBUG] [Thread-136396] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:13:38.471 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:13:38.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T23:13:38.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T23:13:38.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T23:13:38.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:13:38.482 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T23:13:38.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:13:38.482 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:13:38.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T23:13:38.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.883816 -999.00  +15.50  13.33     77  +11.50 1 2 1 1 1     0    0 3.25 -29.01 ZnESW 15.6 13.3 203.2 18.4 16.5 -19.5 16.4 -19.4 16.2 -18.4 16.5 -18.9
2025-12-31T23:13:38.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T23:13:38.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T23:13:38.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.883816
2025-12-31T23:13:38.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T23:13:38.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T23:13:38.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T23:13:38.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T23:13:38.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T23:13:38.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T23:13:07', tmtdew=4.48, humidity=74.62, cloud=0.0, wind=16.92, temperature=15.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T23:13:07', seeing=1.14, atlas_timestamp='2025-12-31T21:12:41.702', atlas_cloud=2, atlas_rain=1, zp_data=[0.4167500000000004, 1.11125, 0.6047500000000019, 0.08449999999999847, 0.0860000000000003, 0.800250000000001, 0.3179999999999996, 0.8202500000000006, 1.7594999999999992, 0.41800000000000104, 0.15124999999999922, 0.07099999999999973, 0.13100000000000023, 0.8032499999999994, 0.49599999999999866, -0.06300000000000061, 1.4402499999999998, 0.5659999999999998, 0.12599999999999945, 0.11824999999999974, 0.0649999999999995, 0.3227499999999992, -1.0177499999999995, 0.8067500000000001, nan, 0.27800000000000047, 0.14424999999999955, 0.18200000000000038, 0.27000000000000046, 0.045000000000001705, -1.5234999999999985, -1.741999999999999, 0.6022500000000006], zp_timestamp='2025-12-31T21:11:00')
2025-12-31T23:13:38.484 [DEBUG] [Thread-136396] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:13: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-12-31T23:13:38.593 [DEBUG] [Thread-136399] [transport.py] [_log()] starting thread (client mode): 0xb9578250
2025-12-31T23:13:38.593 [DEBUG] [Thread-136399] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:13:38.608 [DEBUG] [Thread-136399] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T23:13:38.608 [INFO] [Thread-136399] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T23:13:38.615 [DEBUG] [Thread-136399] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:13:38.616 [DEBUG] [Thread-136399] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T23:13:38.616 [DEBUG] [Thread-136399] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:13:38.616 [DEBUG] [Thread-136399] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:13:38.616 [DEBUG] [Thread-136399] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:13:38.616 [DEBUG] [Thread-136399] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:13:38.616 [DEBUG] [Thread-136399] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:13:38.616 [DEBUG] [Thread-136399] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:13:38.616 [DEBUG] [Thread-136399] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:13:38.616 [DEBUG] [Thread-136399] [transport.py] [_log()] client lang: <none>
2025-12-31T23:13:38.616 [DEBUG] [Thread-136399] [transport.py] [_log()] server lang: <none>
2025-12-31T23:13:38.616 [DEBUG] [Thread-136399] [transport.py] [_log()] kex follows: False
2025-12-31T23:13:38.616 [DEBUG] [Thread-136399] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:13:38.616 [DEBUG] [Thread-136399] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:13:38.616 [DEBUG] [Thread-136399] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:13:38.616 [DEBUG] [Thread-136399] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:13:38.616 [DEBUG] [Thread-136399] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:13:38.616 [DEBUG] [Thread-136399] [transport.py] [_log()] Compression: none
2025-12-31T23:13:38.617 [DEBUG] [Thread-136399] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:13:38.678 [DEBUG] [Thread-136399] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:13:38.678 [DEBUG] [Thread-136399] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:13:38.679 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T23:13:38.679 [DEBUG] [Thread-136399] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T23:13:38.680 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:13:38.735 [DEBUG] [Thread-136399] [transport.py] [_log()] userauth is OK
2025-12-31T23:13:38.735 [DEBUG] [Thread-136399] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:13:38.735 [DEBUG] [Thread-136399] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:13:38.736 [DEBUG] [Thread-136399] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T23:13:38.736 [DEBUG] [Thread-136399] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:13:38.754 [INFO] [Thread-136399] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:13:38.754 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T23:13:38.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:13:39.591 [DEBUG] [Thread-136399] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:13:39.592 [DEBUG] [Thread-136399] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:13:39.640 [DEBUG] [Thread-136399] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:13:39.640 [DEBUG] [Thread-136399] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:13:39.648 [DEBUG] [Thread-136399] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:13:39.656 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:13:39.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T23:13:39.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-12-31T23:13:39.672 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:13:39.672 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:13:39.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:13:39.680 [DEBUG] [Thread-136399] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:13:41.793 [DEBUG] [Thread-136401 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:13:51.189 [DEBUG] [Thread-136402 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:13:56.845 [DEBUG] [Thread-136403 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:14:09.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T23:14:09.702 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T23:14:09.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T23:14:10.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 23, 13, 39), 4.43, 74.6, 0.0, 18.35, 15.25, 0, 0, 0, 2, 0, 0),)
2025-12-31T23:14:10.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 23:13:39
2025-12-31T23:14:10.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T23:14:10.708 [DEBUG] [Thread-136404] [transport.py] [_log()] starting thread (client mode): 0xb957ba90
2025-12-31T23:14:10.708 [DEBUG] [Thread-136404] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:14:10.728 [DEBUG] [Thread-136404] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T23:14:10.728 [INFO] [Thread-136404] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T23:14:10.729 [DEBUG] [Thread-136404] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:14:10.730 [DEBUG] [Thread-136404] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T23:14:10.730 [DEBUG] [Thread-136404] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:14:10.730 [DEBUG] [Thread-136404] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:14:10.730 [DEBUG] [Thread-136404] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:14:10.730 [DEBUG] [Thread-136404] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:14:10.730 [DEBUG] [Thread-136404] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:14:10.730 [DEBUG] [Thread-136404] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:14:10.730 [DEBUG] [Thread-136404] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:14:10.730 [DEBUG] [Thread-136404] [transport.py] [_log()] client lang: <none>
2025-12-31T23:14:10.730 [DEBUG] [Thread-136404] [transport.py] [_log()] server lang: <none>
2025-12-31T23:14:10.730 [DEBUG] [Thread-136404] [transport.py] [_log()] kex follows: False
2025-12-31T23:14:10.730 [DEBUG] [Thread-136404] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:14:10.730 [DEBUG] [Thread-136404] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:14:10.730 [DEBUG] [Thread-136404] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:14:10.730 [DEBUG] [Thread-136404] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:14:10.730 [DEBUG] [Thread-136404] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:14:10.730 [DEBUG] [Thread-136404] [transport.py] [_log()] Compression: none
2025-12-31T23:14:10.730 [DEBUG] [Thread-136404] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:14:10.744 [DEBUG] [Thread-136404] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:14:10.745 [DEBUG] [Thread-136404] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:14:10.746 [DEBUG] [Thread-136404] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T23:14:10.746 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T23:14:10.746 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:14:10.747 [DEBUG] [Thread-136404] [transport.py] [_log()] userauth is OK
2025-12-31T23:14:10.748 [DEBUG] [Thread-136404] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:14:10.748 [DEBUG] [Thread-136404] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:14:10.748 [DEBUG] [Thread-136404] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T23:14:10.748 [DEBUG] [Thread-136404] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:14:10.766 [INFO] [Thread-136404] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:14:10.767 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:14:11.423 [DEBUG] [Thread-136404] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:14:11.423 [DEBUG] [Thread-136404] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:14:11.423 [DEBUG] [Thread-136404] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T23:14:11.463 [DEBUG] [Thread-136404] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:14:11.464 [DEBUG] [Thread-136404] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:14:11.467 [DEBUG] [Thread-136404] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:14:11.480 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:14:11.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T23:14:11.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T23:14:11.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T23:14:11.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:14:11.489 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T23:14:11.489 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:14:11.489 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:14:11.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T23:14:11.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.884163 -999.00  +15.40   9.13     77  +11.50 1 2 1 1 1     0    0 3.24 -27.74 Z.ESW 15.9 9.1 207.9 22.1 16.5 -19.6 16.4 -19.9 16.2 -18.5 16.5 -18.9
2025-12-31T23:14:11.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T23:14:11.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T23:14:11.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.884163
2025-12-31T23:14:11.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T23:14:11.491 [DEBUG] [Thread-136404] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:14:11.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T23:14:11.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T23:14:11.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T23:14:11.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T23:14:11.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T23:13:39', tmtdew=4.43, humidity=74.6, cloud=0.0, wind=18.35, temperature=15.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T23:13:39', seeing=1.17, atlas_timestamp='2025-12-31T21:13:11.683', atlas_cloud=2, atlas_rain=1, zp_data=[0.4167500000000004, 1.11125, 0.6047500000000019, 0.08449999999999847, 0.0860000000000003, 0.800250000000001, 0.3179999999999996, 0.8202500000000006, 1.7594999999999992, 0.41800000000000104, 0.15124999999999922, 0.07099999999999973, 0.13100000000000023, 0.8032499999999994, 0.49599999999999866, -0.06300000000000061, 1.4402499999999998, 0.5659999999999998, 0.12599999999999945, 0.11824999999999974, 0.0649999999999995, 0.3227499999999992, -1.0177499999999995, 0.8067500000000001, nan, 0.27800000000000047, 0.14424999999999955, 0.18200000000000038, 0.27000000000000046, 0.045000000000001705, -1.5234999999999985, -1.741999999999999, 0.6022500000000006], zp_timestamp='2025-12-31T21:11:00')
2025-12-31T23:14:11.575 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T23:14:11.588 [DEBUG] [Thread-136407] [transport.py] [_log()] starting thread (client mode): 0xb95f1300
2025-12-31T23:14:11.588 [DEBUG] [Thread-136407] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:14:11.603 [DEBUG] [Thread-136407] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T23:14:11.603 [INFO] [Thread-136407] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T23:14:11.610 [DEBUG] [Thread-136407] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:14:11.610 [DEBUG] [Thread-136407] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T23:14:11.610 [DEBUG] [Thread-136407] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:14:11.610 [DEBUG] [Thread-136407] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:14:11.610 [DEBUG] [Thread-136407] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:14:11.610 [DEBUG] [Thread-136407] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:14:11.610 [DEBUG] [Thread-136407] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:14:11.610 [DEBUG] [Thread-136407] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:14:11.610 [DEBUG] [Thread-136407] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:14:11.610 [DEBUG] [Thread-136407] [transport.py] [_log()] client lang: <none>
2025-12-31T23:14:11.610 [DEBUG] [Thread-136407] [transport.py] [_log()] server lang: <none>
2025-12-31T23:14:11.610 [DEBUG] [Thread-136407] [transport.py] [_log()] kex follows: False
2025-12-31T23:14:11.610 [DEBUG] [Thread-136407] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:14:11.610 [DEBUG] [Thread-136407] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:14:11.610 [DEBUG] [Thread-136407] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:14:11.610 [DEBUG] [Thread-136407] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:14:11.611 [DEBUG] [Thread-136407] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:14:11.611 [DEBUG] [Thread-136407] [transport.py] [_log()] Compression: none
2025-12-31T23:14:11.611 [DEBUG] [Thread-136407] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:14:11.666 [DEBUG] [Thread-136407] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:14:11.667 [DEBUG] [Thread-136407] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:14:11.667 [DEBUG] [Thread-136407] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T23:14:11.667 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T23:14:11.667 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:14:11.724 [DEBUG] [Thread-136407] [transport.py] [_log()] userauth is OK
2025-12-31T23:14:11.724 [DEBUG] [Thread-136407] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:14:11.724 [DEBUG] [Thread-136407] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:14:11.724 [DEBUG] [Thread-136407] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T23:14:11.724 [DEBUG] [Thread-136407] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:14:11.741 [INFO] [Thread-136407] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:14:11.742 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T23:14:11.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:14:11.876 [DEBUG] [Thread-136409 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:14:12.567 [DEBUG] [Thread-136407] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:14:12.567 [DEBUG] [Thread-136407] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:14:12.617 [DEBUG] [Thread-136407] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:14:12.617 [DEBUG] [Thread-136407] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:14:12.628 [DEBUG] [Thread-136407] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:14:12.638 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:14:12.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T23:14:12.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T23:14:12.658 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:14:12.658 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:14:12.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:14:12.667 [DEBUG] [Thread-136407] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:14:23.357 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:14:23.358 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:14:26.925 [DEBUG] [Thread-136410 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:14:41.958 [DEBUG] [Thread-136411 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:14:42.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T23:14:42.689 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T23:14:42.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T23:14:43.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 23, 14, 11), 4.44, 74.57, 0.0, 19.94, 15.23, 0, 0, 0, 2, 0, 0),)
2025-12-31T23:14:43.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 23:14:11
2025-12-31T23:14:43.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T23:14:43.683 [DEBUG] [Thread-136412] [transport.py] [_log()] starting thread (client mode): 0xb95f1930
2025-12-31T23:14:43.683 [DEBUG] [Thread-136412] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:14:43.703 [DEBUG] [Thread-136412] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T23:14:43.703 [INFO] [Thread-136412] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T23:14:43.706 [DEBUG] [Thread-136412] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:14:43.706 [DEBUG] [Thread-136412] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T23:14:43.706 [DEBUG] [Thread-136412] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:14:43.706 [DEBUG] [Thread-136412] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:14:43.706 [DEBUG] [Thread-136412] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:14:43.706 [DEBUG] [Thread-136412] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:14:43.706 [DEBUG] [Thread-136412] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:14:43.706 [DEBUG] [Thread-136412] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:14:43.706 [DEBUG] [Thread-136412] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:14:43.706 [DEBUG] [Thread-136412] [transport.py] [_log()] client lang: <none>
2025-12-31T23:14:43.706 [DEBUG] [Thread-136412] [transport.py] [_log()] server lang: <none>
2025-12-31T23:14:43.706 [DEBUG] [Thread-136412] [transport.py] [_log()] kex follows: False
2025-12-31T23:14:43.706 [DEBUG] [Thread-136412] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:14:43.706 [DEBUG] [Thread-136412] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:14:43.706 [DEBUG] [Thread-136412] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:14:43.706 [DEBUG] [Thread-136412] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:14:43.706 [DEBUG] [Thread-136412] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:14:43.706 [DEBUG] [Thread-136412] [transport.py] [_log()] Compression: none
2025-12-31T23:14:43.707 [DEBUG] [Thread-136412] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:14:43.722 [DEBUG] [Thread-136412] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:14:43.722 [DEBUG] [Thread-136412] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:14:43.722 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T23:14:43.722 [DEBUG] [Thread-136412] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T23:14:43.723 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:14:43.723 [DEBUG] [Thread-136412] [transport.py] [_log()] userauth is OK
2025-12-31T23:14:43.723 [DEBUG] [Thread-136412] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:14:43.723 [DEBUG] [Thread-136412] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:14:43.723 [DEBUG] [Thread-136412] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T23:14:43.723 [DEBUG] [Thread-136412] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:14:43.734 [INFO] [Thread-136412] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:14:43.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:14:44.390 [DEBUG] [Thread-136412] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:14:44.390 [DEBUG] [Thread-136412] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:14:44.391 [DEBUG] [Thread-136412] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T23:14:44.431 [DEBUG] [Thread-136412] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:14:44.431 [DEBUG] [Thread-136412] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:14:44.433 [DEBUG] [Thread-136412] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:14:44.444 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:14:44.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T23:14:44.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T23:14:44.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T23:14:44.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:14:44.450 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T23:14:44.450 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:14:44.450 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:14:44.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T23:14:44.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.884858 -999.00  +15.40  15.56     77  +11.50 1 2 1 1 1     0    0 3.32 -26.76 Z.ESW 12.7 15.6 208.6 19.3 16.4 -19.9 16.4 -19.8 16.1 -18.5 16.4 -19.0
2025-12-31T23:14:44.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T23:14:44.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T23:14:44.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.884858
2025-12-31T23:14:44.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T23:14:44.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T23:14:44.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T23:14:44.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T23:14:44.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T23:14:44.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T23:14:11', tmtdew=4.44, humidity=74.57, cloud=0.0, wind=19.94, temperature=15.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T23:14:11', seeing=0.82, atlas_timestamp='2025-12-31T21:14:11.731', atlas_cloud=2, atlas_rain=1, zp_data=[0.4167500000000004, 1.11125, 0.6047500000000019, 0.08449999999999847, 0.0860000000000003, 0.800250000000001, 0.3179999999999996, 0.8202500000000006, 1.7594999999999992, 0.41800000000000104, 0.15124999999999922, 0.07099999999999973, 0.13100000000000023, 0.8032499999999994, 0.49599999999999866, -0.06300000000000061, 1.4402499999999998, 0.5659999999999998, 0.12599999999999945, 0.11824999999999974, 0.0649999999999995, 0.3227499999999992, -1.0177499999999995, 0.8067500000000001, nan, 0.27800000000000047, 0.14424999999999955, 0.18200000000000038, 0.27000000000000046, 0.045000000000001705, -1.5234999999999985, -1.741999999999999, 0.6022500000000006], zp_timestamp='2025-12-31T21:11:00')
2025-12-31T23:14:44.451 [DEBUG] [Thread-136412] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:14:44.525 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T23:14:44.536 [DEBUG] [Thread-136415] [transport.py] [_log()] starting thread (client mode): 0xb95796c0
2025-12-31T23:14:44.536 [DEBUG] [Thread-136415] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:14:44.551 [DEBUG] [Thread-136415] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T23:14:44.552 [INFO] [Thread-136415] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T23:14:44.559 [DEBUG] [Thread-136415] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:14:44.559 [DEBUG] [Thread-136415] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T23:14:44.559 [DEBUG] [Thread-136415] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:14:44.559 [DEBUG] [Thread-136415] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:14:44.559 [DEBUG] [Thread-136415] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:14:44.559 [DEBUG] [Thread-136415] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:14:44.559 [DEBUG] [Thread-136415] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:14:44.559 [DEBUG] [Thread-136415] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:14:44.559 [DEBUG] [Thread-136415] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:14:44.559 [DEBUG] [Thread-136415] [transport.py] [_log()] client lang: <none>
2025-12-31T23:14:44.559 [DEBUG] [Thread-136415] [transport.py] [_log()] server lang: <none>
2025-12-31T23:14:44.559 [DEBUG] [Thread-136415] [transport.py] [_log()] kex follows: False
2025-12-31T23:14:44.559 [DEBUG] [Thread-136415] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:14:44.559 [DEBUG] [Thread-136415] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:14:44.559 [DEBUG] [Thread-136415] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:14:44.559 [DEBUG] [Thread-136415] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:14:44.559 [DEBUG] [Thread-136415] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:14:44.559 [DEBUG] [Thread-136415] [transport.py] [_log()] Compression: none
2025-12-31T23:14:44.559 [DEBUG] [Thread-136415] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:14:44.618 [DEBUG] [Thread-136415] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:14:44.618 [DEBUG] [Thread-136415] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:14:44.618 [DEBUG] [Thread-136415] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T23:14:44.618 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T23:14:44.618 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:14:44.675 [DEBUG] [Thread-136415] [transport.py] [_log()] userauth is OK
2025-12-31T23:14:44.675 [DEBUG] [Thread-136415] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:14:44.675 [DEBUG] [Thread-136415] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:14:44.675 [DEBUG] [Thread-136415] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T23:14:44.675 [DEBUG] [Thread-136415] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:14:44.689 [INFO] [Thread-136415] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:14:44.689 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T23:14:44.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:14:45.528 [DEBUG] [Thread-136415] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:14:45.528 [DEBUG] [Thread-136415] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:14:45.579 [DEBUG] [Thread-136415] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:14:45.579 [DEBUG] [Thread-136415] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:14:45.590 [DEBUG] [Thread-136415] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:14:45.599 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:14:45.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T23:14:45.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T23:14:45.616 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:14:45.616 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:14:45.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:14:45.624 [DEBUG] [Thread-136415] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:14:51.266 [DEBUG] [Thread-136417 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:14:56.993 [DEBUG] [Thread-136418 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:15:12.054 [DEBUG] [Thread-136419 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:15:15.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T23:15:15.647 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T23:15:15.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T23:15:16.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 23, 14, 43), 4.44, 74.57, 0.0, 19.04, 15.28, 0, 0, 0, 2, 0, 0),)
2025-12-31T23:15:16.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 23:14:43
2025-12-31T23:15:16.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T23:15:16.740 [DEBUG] [Thread-136420] [transport.py] [_log()] starting thread (client mode): 0xb1747a30
2025-12-31T23:15:16.740 [DEBUG] [Thread-136420] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:15:16.759 [DEBUG] [Thread-136420] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T23:15:16.759 [INFO] [Thread-136420] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T23:15:16.761 [DEBUG] [Thread-136420] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:15:16.761 [DEBUG] [Thread-136420] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T23:15:16.761 [DEBUG] [Thread-136420] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:15:16.761 [DEBUG] [Thread-136420] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:15:16.761 [DEBUG] [Thread-136420] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:15:16.761 [DEBUG] [Thread-136420] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:15:16.761 [DEBUG] [Thread-136420] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:15:16.761 [DEBUG] [Thread-136420] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:15:16.761 [DEBUG] [Thread-136420] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:15:16.761 [DEBUG] [Thread-136420] [transport.py] [_log()] client lang: <none>
2025-12-31T23:15:16.761 [DEBUG] [Thread-136420] [transport.py] [_log()] server lang: <none>
2025-12-31T23:15:16.761 [DEBUG] [Thread-136420] [transport.py] [_log()] kex follows: False
2025-12-31T23:15:16.761 [DEBUG] [Thread-136420] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:15:16.761 [DEBUG] [Thread-136420] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:15:16.761 [DEBUG] [Thread-136420] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:15:16.761 [DEBUG] [Thread-136420] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:15:16.761 [DEBUG] [Thread-136420] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:15:16.761 [DEBUG] [Thread-136420] [transport.py] [_log()] Compression: none
2025-12-31T23:15:16.761 [DEBUG] [Thread-136420] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:15:16.773 [DEBUG] [Thread-136420] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:15:16.773 [DEBUG] [Thread-136420] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:15:16.773 [DEBUG] [Thread-136420] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T23:15:16.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T23:15:16.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:15:16.774 [DEBUG] [Thread-136420] [transport.py] [_log()] userauth is OK
2025-12-31T23:15:16.774 [DEBUG] [Thread-136420] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:15:16.774 [DEBUG] [Thread-136420] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:15:16.774 [DEBUG] [Thread-136420] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T23:15:16.774 [DEBUG] [Thread-136420] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:15:16.792 [INFO] [Thread-136420] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:15:16.792 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:15:18.481 [DEBUG] [Thread-136420] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:15:18.481 [DEBUG] [Thread-136420] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:15:18.482 [DEBUG] [Thread-136420] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T23:15:18.522 [DEBUG] [Thread-136420] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:15:18.522 [DEBUG] [Thread-136420] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:15:18.526 [DEBUG] [Thread-136420] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:15:18.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:15:18.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T23:15:18.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T23:15:18.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T23:15:18.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:15:18.668 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T23:15:18.668 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:15:18.668 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:15:18.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T23:15:18.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.885205 -999.00  +15.40  10.72     77  +11.40 1 2 1 1 1     0    0 3.29 -27.04 Z.ESW 10.9 10.7 188.0 17.8 16.4 -19.7 16.3 -20.0 16.1 -18.5 16.4 -19.0
2025-12-31T23:15:18.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T23:15:18.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T23:15:18.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.885205
2025-12-31T23:15:18.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T23:15:18.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T23:15:18.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T23:15:18.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T23:15:18.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T23:15:18.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T23:14:43', tmtdew=4.44, humidity=74.57, cloud=0.0, wind=19.04, temperature=15.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T23:15:15', seeing=1.02, atlas_timestamp='2025-12-31T21:14:41.712', atlas_cloud=2, atlas_rain=1, zp_data=[0.4167500000000004, 1.11125, 0.6047500000000019, 0.08449999999999847, 0.0860000000000003, 0.800250000000001, 0.3179999999999996, 0.8202500000000006, 1.7594999999999992, 0.41800000000000104, 0.15124999999999922, 0.07099999999999973, 0.13100000000000023, 0.8032499999999994, 0.49599999999999866, -0.06300000000000061, 1.4402499999999998, 0.5659999999999998, 0.12599999999999945, 0.11824999999999974, 0.0649999999999995, 0.3227499999999992, -1.0177499999999995, 0.8067500000000001, nan, 0.27800000000000047, 0.14424999999999955, 0.18200000000000038, 0.27000000000000046, 0.045000000000001705, -1.5234999999999985, -1.741999999999999, 0.6022500000000006], zp_timestamp='2025-12-31T21:14:00')
2025-12-31T23:15:18.671 [DEBUG] [Thread-136420] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:15:18.744 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T23:15:18.757 [DEBUG] [Thread-136423] [transport.py] [_log()] starting thread (client mode): 0xb957b430
2025-12-31T23:15:18.757 [DEBUG] [Thread-136423] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:15:18.771 [DEBUG] [Thread-136423] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T23:15:18.771 [INFO] [Thread-136423] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T23:15:18.779 [DEBUG] [Thread-136423] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:15:18.779 [DEBUG] [Thread-136423] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T23:15:18.779 [DEBUG] [Thread-136423] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:15:18.779 [DEBUG] [Thread-136423] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:15:18.779 [DEBUG] [Thread-136423] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:15:18.779 [DEBUG] [Thread-136423] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:15:18.779 [DEBUG] [Thread-136423] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:15:18.780 [DEBUG] [Thread-136423] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:15:18.780 [DEBUG] [Thread-136423] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:15:18.780 [DEBUG] [Thread-136423] [transport.py] [_log()] client lang: <none>
2025-12-31T23:15:18.780 [DEBUG] [Thread-136423] [transport.py] [_log()] server lang: <none>
2025-12-31T23:15:18.780 [DEBUG] [Thread-136423] [transport.py] [_log()] kex follows: False
2025-12-31T23:15:18.780 [DEBUG] [Thread-136423] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:15:18.780 [DEBUG] [Thread-136423] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:15:18.780 [DEBUG] [Thread-136423] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:15:18.780 [DEBUG] [Thread-136423] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:15:18.780 [DEBUG] [Thread-136423] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:15:18.780 [DEBUG] [Thread-136423] [transport.py] [_log()] Compression: none
2025-12-31T23:15:18.780 [DEBUG] [Thread-136423] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:15:18.839 [DEBUG] [Thread-136423] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:15:18.840 [DEBUG] [Thread-136423] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:15:18.841 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T23:15:18.841 [DEBUG] [Thread-136423] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T23:15:18.842 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:15:18.896 [DEBUG] [Thread-136423] [transport.py] [_log()] userauth is OK
2025-12-31T23:15:18.896 [DEBUG] [Thread-136423] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:15:18.896 [DEBUG] [Thread-136423] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:15:18.896 [DEBUG] [Thread-136423] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T23:15:18.896 [DEBUG] [Thread-136423] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:15:18.915 [INFO] [Thread-136423] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:15:18.915 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T23:15:18.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:15:19.776 [DEBUG] [Thread-136423] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:15:19.777 [DEBUG] [Thread-136423] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:15:19.825 [DEBUG] [Thread-136423] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:15:19.825 [DEBUG] [Thread-136423] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:15:19.834 [DEBUG] [Thread-136423] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:15:19.843 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:15:19.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T23:15:19.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-12-31T23:15:19.862 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:15:19.862 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:15:19.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:15:19.871 [DEBUG] [Thread-136423] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:15:23.560 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:15:23.561 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:15:27.083 [DEBUG] [Thread-136425 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:15:42.142 [DEBUG] [Thread-136426 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:15:49.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T23:15:49.893 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T23:15:49.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T23:15:50.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 23, 15, 47), 4.44, 74.57, 0.0, 17.31, 15.23, 0, 0, 0, 2, 0, 0),)
2025-12-31T23:15:50.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 23:15:47
2025-12-31T23:15:50.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T23:15:50.925 [DEBUG] [Thread-136427] [transport.py] [_log()] starting thread (client mode): 0xb17967a0
2025-12-31T23:15:50.925 [DEBUG] [Thread-136427] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:15:50.945 [DEBUG] [Thread-136427] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T23:15:50.945 [INFO] [Thread-136427] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T23:15:50.948 [DEBUG] [Thread-136427] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:15:50.948 [DEBUG] [Thread-136427] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T23:15:50.948 [DEBUG] [Thread-136427] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:15:50.948 [DEBUG] [Thread-136427] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:15:50.948 [DEBUG] [Thread-136427] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:15:50.948 [DEBUG] [Thread-136427] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:15:50.948 [DEBUG] [Thread-136427] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:15:50.948 [DEBUG] [Thread-136427] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:15:50.948 [DEBUG] [Thread-136427] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:15:50.948 [DEBUG] [Thread-136427] [transport.py] [_log()] client lang: <none>
2025-12-31T23:15:50.948 [DEBUG] [Thread-136427] [transport.py] [_log()] server lang: <none>
2025-12-31T23:15:50.948 [DEBUG] [Thread-136427] [transport.py] [_log()] kex follows: False
2025-12-31T23:15:50.948 [DEBUG] [Thread-136427] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:15:50.948 [DEBUG] [Thread-136427] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:15:50.948 [DEBUG] [Thread-136427] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:15:50.949 [DEBUG] [Thread-136427] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:15:50.949 [DEBUG] [Thread-136427] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:15:50.949 [DEBUG] [Thread-136427] [transport.py] [_log()] Compression: none
2025-12-31T23:15:50.949 [DEBUG] [Thread-136427] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:15:50.965 [DEBUG] [Thread-136427] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:15:50.966 [DEBUG] [Thread-136427] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:15:50.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T23:15:50.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:15:50.966 [DEBUG] [Thread-136427] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T23:15:50.967 [DEBUG] [Thread-136427] [transport.py] [_log()] userauth is OK
2025-12-31T23:15:50.967 [DEBUG] [Thread-136427] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:15:50.967 [DEBUG] [Thread-136427] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:15:50.967 [DEBUG] [Thread-136427] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T23:15:50.967 [DEBUG] [Thread-136427] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:15:50.977 [INFO] [Thread-136427] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:15:50.977 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:15:51.335 [DEBUG] [Thread-136429 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:15:51.636 [DEBUG] [Thread-136427] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:15:51.636 [DEBUG] [Thread-136427] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:15:51.636 [DEBUG] [Thread-136427] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T23:15:51.678 [DEBUG] [Thread-136427] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:15:51.678 [DEBUG] [Thread-136427] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:15:51.680 [DEBUG] [Thread-136427] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:15:51.691 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:15:51.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T23:15:51.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T23:15:51.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T23:15:51.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:15:51.697 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T23:15:51.697 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:15:51.697 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:15:51.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T23:15:51.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.885552 -999.00  +15.40  15.74     77  +11.40 1 2 1 1 1     0    0 3.31 -26.19 Z.ESW 12.9 15.7 201.4 20.1 16.4 -19.9 16.4 -20.1 16.1 -18.6 16.4 -19.2
2025-12-31T23:15:51.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T23:15:51.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T23:15:51.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.885552
2025-12-31T23:15:51.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T23:15:51.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T23:15:51.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T23:15:51.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T23:15:51.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T23:15:51.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T23:15:47', tmtdew=4.44, humidity=74.57, cloud=0.0, wind=17.31, temperature=15.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T23:15:47', seeing=1.02, atlas_timestamp='2025-12-31T21:15:11.693', atlas_cloud=2, atlas_rain=1, zp_data=[0.4167500000000004, 1.11125, 0.6047500000000019, 0.08449999999999847, 0.0860000000000003, 0.800250000000001, 0.3179999999999996, 0.8202500000000006, 1.7594999999999992, 0.41800000000000104, 0.15124999999999922, 0.07099999999999973, 0.13100000000000023, 0.8032499999999994, 0.49599999999999866, -0.06300000000000061, 1.4402499999999998, 0.5659999999999998, 0.12599999999999945, 0.11824999999999974, 0.0649999999999995, 0.3227499999999992, -1.0177499999999995, 0.8067500000000001, nan, 0.27800000000000047, 0.14424999999999955, 0.18200000000000038, 0.27000000000000046, 0.045000000000001705, -1.5234999999999985, -1.741999999999999, 0.6022500000000006], zp_timestamp='2025-12-31T21:14:00')
2025-12-31T23:15:51.698 [DEBUG] [Thread-136427] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:15:51.773 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T23:15:51.785 [DEBUG] [Thread-136431] [transport.py] [_log()] starting thread (client mode): 0xb95f0e20
2025-12-31T23:15:51.785 [DEBUG] [Thread-136431] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:15:51.800 [DEBUG] [Thread-136431] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T23:15:51.800 [INFO] [Thread-136431] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T23:15:51.808 [DEBUG] [Thread-136431] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:15:51.808 [DEBUG] [Thread-136431] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T23:15:51.808 [DEBUG] [Thread-136431] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:15:51.808 [DEBUG] [Thread-136431] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:15:51.808 [DEBUG] [Thread-136431] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:15:51.808 [DEBUG] [Thread-136431] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:15:51.808 [DEBUG] [Thread-136431] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:15:51.808 [DEBUG] [Thread-136431] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:15:51.808 [DEBUG] [Thread-136431] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:15:51.808 [DEBUG] [Thread-136431] [transport.py] [_log()] client lang: <none>
2025-12-31T23:15:51.808 [DEBUG] [Thread-136431] [transport.py] [_log()] server lang: <none>
2025-12-31T23:15:51.808 [DEBUG] [Thread-136431] [transport.py] [_log()] kex follows: False
2025-12-31T23:15:51.808 [DEBUG] [Thread-136431] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:15:51.808 [DEBUG] [Thread-136431] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:15:51.808 [DEBUG] [Thread-136431] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:15:51.808 [DEBUG] [Thread-136431] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:15:51.808 [DEBUG] [Thread-136431] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:15:51.808 [DEBUG] [Thread-136431] [transport.py] [_log()] Compression: none
2025-12-31T23:15:51.808 [DEBUG] [Thread-136431] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:15:51.866 [DEBUG] [Thread-136431] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:15:51.866 [DEBUG] [Thread-136431] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:15:51.866 [DEBUG] [Thread-136431] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T23:15:51.866 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T23:15:51.866 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:15:51.923 [DEBUG] [Thread-136431] [transport.py] [_log()] userauth is OK
2025-12-31T23:15:51.923 [DEBUG] [Thread-136431] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:15:51.923 [DEBUG] [Thread-136431] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:15:51.923 [DEBUG] [Thread-136431] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T23:15:51.923 [DEBUG] [Thread-136431] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:15:51.937 [INFO] [Thread-136431] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:15:51.937 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T23:15:51.937 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:15:52.810 [DEBUG] [Thread-136431] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:15:52.810 [DEBUG] [Thread-136431] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:15:52.857 [DEBUG] [Thread-136431] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:15:52.857 [DEBUG] [Thread-136431] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:15:52.866 [DEBUG] [Thread-136431] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:15:52.874 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:15:52.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T23:15:52.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T23:15:52.890 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:15:52.890 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:15:52.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:15:52.897 [DEBUG] [Thread-136431] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:15:57.171 [DEBUG] [Thread-136433 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:16:12.224 [DEBUG] [Thread-136434 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:16:22.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T23:16:22.920 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T23:16:22.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T23:16:23.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 23, 16, 19), 4.43, 74.6, 0.0, 19.5, 15.21, 0, 0, 0, 2, 0, 0),)
2025-12-31T23:16:23.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 23:16:19
2025-12-31T23:16:23.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T23:16:23.762 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:16:23.763 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:16:23.901 [DEBUG] [Thread-136435] [transport.py] [_log()] starting thread (client mode): 0xb1795480
2025-12-31T23:16:23.901 [DEBUG] [Thread-136435] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:16:23.923 [DEBUG] [Thread-136435] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T23:16:23.924 [INFO] [Thread-136435] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T23:16:23.927 [DEBUG] [Thread-136435] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:16:23.927 [DEBUG] [Thread-136435] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T23:16:23.927 [DEBUG] [Thread-136435] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:16:23.927 [DEBUG] [Thread-136435] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:16:23.927 [DEBUG] [Thread-136435] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:16:23.927 [DEBUG] [Thread-136435] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:16:23.927 [DEBUG] [Thread-136435] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:16:23.927 [DEBUG] [Thread-136435] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:16:23.927 [DEBUG] [Thread-136435] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:16:23.927 [DEBUG] [Thread-136435] [transport.py] [_log()] client lang: <none>
2025-12-31T23:16:23.927 [DEBUG] [Thread-136435] [transport.py] [_log()] server lang: <none>
2025-12-31T23:16:23.927 [DEBUG] [Thread-136435] [transport.py] [_log()] kex follows: False
2025-12-31T23:16:23.927 [DEBUG] [Thread-136435] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:16:23.927 [DEBUG] [Thread-136435] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:16:23.927 [DEBUG] [Thread-136435] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:16:23.927 [DEBUG] [Thread-136435] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:16:23.927 [DEBUG] [Thread-136435] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:16:23.927 [DEBUG] [Thread-136435] [transport.py] [_log()] Compression: none
2025-12-31T23:16:23.928 [DEBUG] [Thread-136435] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:16:23.945 [DEBUG] [Thread-136435] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:16:23.946 [DEBUG] [Thread-136435] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:16:23.946 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T23:16:23.947 [DEBUG] [Thread-136435] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T23:16:23.947 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:16:23.948 [DEBUG] [Thread-136435] [transport.py] [_log()] userauth is OK
2025-12-31T23:16:23.949 [DEBUG] [Thread-136435] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:16:23.949 [DEBUG] [Thread-136435] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:16:23.949 [DEBUG] [Thread-136435] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T23:16:23.949 [DEBUG] [Thread-136435] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:16:23.971 [INFO] [Thread-136435] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:16:23.971 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:16:24.734 [DEBUG] [Thread-136435] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:16:24.735 [DEBUG] [Thread-136435] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:16:24.735 [DEBUG] [Thread-136435] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T23:16:24.776 [DEBUG] [Thread-136435] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:16:24.776 [DEBUG] [Thread-136435] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:16:24.779 [DEBUG] [Thread-136435] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:16:24.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:16:24.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T23:16:24.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T23:16:24.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T23:16:24.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:16:24.797 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T23:16:24.797 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:16:24.798 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:16:24.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T23:16:24.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.885899 -999.00  +15.40  10.38     77  +11.40 1 2 1 1 1     0    0 3.33 -24.18 Z.ESW 9.2 10.4 228.3 17.1 16.4 -20.1 16.3 -19.9 16.1 -18.6 16.4 -19.3
2025-12-31T23:16:24.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T23:16:24.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T23:16:24.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.885899
2025-12-31T23:16:24.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T23:16:24.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T23:16:24.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T23:16:24.800 [DEBUG] [Thread-136435] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:16:24.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T23:16:24.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T23:16:24.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T23:16:19', tmtdew=4.43, humidity=74.6, cloud=0.0, wind=19.5, temperature=15.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T23:16:19', seeing=0.88, atlas_timestamp='2025-12-31T21:15:41.674', atlas_cloud=2, atlas_rain=1, zp_data=[0.4167500000000004, 1.11125, 0.6047500000000019, 0.08449999999999847, 0.0860000000000003, 0.800250000000001, 0.3179999999999996, 0.8202500000000006, 1.7594999999999992, 0.41800000000000104, 0.15124999999999922, 0.07099999999999973, 0.13100000000000023, 0.8032499999999994, 0.49599999999999866, -0.06300000000000061, 1.4402499999999998, 0.5659999999999998, 0.12599999999999945, 0.11824999999999974, 0.0649999999999995, 0.3227499999999992, -1.0177499999999995, 0.8067500000000001, nan, 0.27800000000000047, 0.14424999999999955, 0.18200000000000038, 0.27000000000000046, 0.045000000000001705, -1.5234999999999985, -1.741999999999999, 0.6022500000000006], zp_timestamp='2025-12-31T21:14:00')
2025-12-31T23:16:24.885 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T23:16:24.899 [DEBUG] [Thread-136438] [transport.py] [_log()] starting thread (client mode): 0xb9578400
2025-12-31T23:16:24.899 [DEBUG] [Thread-136438] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:16:24.913 [DEBUG] [Thread-136438] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T23:16:24.913 [INFO] [Thread-136438] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T23:16:24.922 [DEBUG] [Thread-136438] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:16:24.922 [DEBUG] [Thread-136438] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T23:16:24.922 [DEBUG] [Thread-136438] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:16:24.922 [DEBUG] [Thread-136438] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:16:24.922 [DEBUG] [Thread-136438] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:16:24.922 [DEBUG] [Thread-136438] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:16:24.922 [DEBUG] [Thread-136438] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:16:24.922 [DEBUG] [Thread-136438] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:16:24.922 [DEBUG] [Thread-136438] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:16:24.922 [DEBUG] [Thread-136438] [transport.py] [_log()] client lang: <none>
2025-12-31T23:16:24.923 [DEBUG] [Thread-136438] [transport.py] [_log()] server lang: <none>
2025-12-31T23:16:24.923 [DEBUG] [Thread-136438] [transport.py] [_log()] kex follows: False
2025-12-31T23:16:24.923 [DEBUG] [Thread-136438] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:16:24.923 [DEBUG] [Thread-136438] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:16:24.923 [DEBUG] [Thread-136438] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:16:24.923 [DEBUG] [Thread-136438] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:16:24.923 [DEBUG] [Thread-136438] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:16:24.923 [DEBUG] [Thread-136438] [transport.py] [_log()] Compression: none
2025-12-31T23:16:24.923 [DEBUG] [Thread-136438] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:16:24.983 [DEBUG] [Thread-136438] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:16:24.984 [DEBUG] [Thread-136438] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:16:24.984 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T23:16:24.985 [DEBUG] [Thread-136438] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T23:16:24.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:16:25.040 [DEBUG] [Thread-136438] [transport.py] [_log()] userauth is OK
2025-12-31T23:16:25.040 [DEBUG] [Thread-136438] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:16:25.040 [DEBUG] [Thread-136438] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:16:25.040 [DEBUG] [Thread-136438] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T23:16:25.040 [DEBUG] [Thread-136438] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:16:25.060 [INFO] [Thread-136438] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:16:25.060 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T23:16:25.060 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:16:25.895 [DEBUG] [Thread-136438] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:16:25.895 [DEBUG] [Thread-136438] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:16:25.943 [DEBUG] [Thread-136438] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:16:25.943 [DEBUG] [Thread-136438] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:16:25.952 [DEBUG] [Thread-136438] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:16:25.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:16:25.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T23:16:25.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T23:16:25.978 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:16:25.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:16:25.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:16:25.987 [DEBUG] [Thread-136438] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:16:27.259 [DEBUG] [Thread-136440 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:16:42.305 [DEBUG] [Thread-136441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:16:51.415 [DEBUG] [Thread-136442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:16:56.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T23:16:56.010 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T23:16:56.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T23:16:56.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 23, 16, 51), 4.42, 74.65, 0.0, 19.27, 15.2, 0, 0, 0, 2, 0, 0),)
2025-12-31T23:16:56.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 23:16:51
2025-12-31T23:16:56.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T23:16:57.020 [DEBUG] [Thread-136443] [transport.py] [_log()] starting thread (client mode): 0xb957b130
2025-12-31T23:16:57.020 [DEBUG] [Thread-136443] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:16:57.039 [DEBUG] [Thread-136443] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T23:16:57.040 [INFO] [Thread-136443] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T23:16:57.043 [DEBUG] [Thread-136443] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:16:57.043 [DEBUG] [Thread-136443] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T23:16:57.043 [DEBUG] [Thread-136443] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:16:57.043 [DEBUG] [Thread-136443] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:16:57.043 [DEBUG] [Thread-136443] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:16:57.043 [DEBUG] [Thread-136443] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:16:57.043 [DEBUG] [Thread-136443] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:16:57.043 [DEBUG] [Thread-136443] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:16:57.043 [DEBUG] [Thread-136443] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:16:57.043 [DEBUG] [Thread-136443] [transport.py] [_log()] client lang: <none>
2025-12-31T23:16:57.043 [DEBUG] [Thread-136443] [transport.py] [_log()] server lang: <none>
2025-12-31T23:16:57.044 [DEBUG] [Thread-136443] [transport.py] [_log()] kex follows: False
2025-12-31T23:16:57.044 [DEBUG] [Thread-136443] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:16:57.044 [DEBUG] [Thread-136443] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:16:57.044 [DEBUG] [Thread-136443] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:16:57.044 [DEBUG] [Thread-136443] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:16:57.044 [DEBUG] [Thread-136443] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:16:57.044 [DEBUG] [Thread-136443] [transport.py] [_log()] Compression: none
2025-12-31T23:16:57.044 [DEBUG] [Thread-136443] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:16:57.053 [DEBUG] [Thread-136443] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:16:57.053 [DEBUG] [Thread-136443] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:16:57.054 [DEBUG] [Thread-136443] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T23:16:57.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T23:16:57.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:16:57.055 [DEBUG] [Thread-136443] [transport.py] [_log()] userauth is OK
2025-12-31T23:16:57.055 [DEBUG] [Thread-136443] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:16:57.055 [DEBUG] [Thread-136443] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:16:57.055 [DEBUG] [Thread-136443] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T23:16:57.056 [DEBUG] [Thread-136443] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:16:57.073 [INFO] [Thread-136443] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:16:57.074 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:16:57.340 [DEBUG] [Thread-136445 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:16:57.715 [DEBUG] [Thread-136443] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:16:57.715 [DEBUG] [Thread-136443] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:16:57.715 [DEBUG] [Thread-136443] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T23:16:57.756 [DEBUG] [Thread-136443] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:16:57.756 [DEBUG] [Thread-136443] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:16:57.759 [DEBUG] [Thread-136443] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:16:57.770 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:16:57.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T23:16:57.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T23:16:57.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T23:16:57.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:16:57.781 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T23:16:57.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:16:57.781 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:16:57.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T23:16:57.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.886247 -999.00  +15.40  12.50     77  +11.40 1 2 1 1 1     0    0 3.48 -21.96 Z.ESW 18.2 12.5 215.2 16.2 16.4 -20.1 16.3 -20.0 16.1 -18.7 16.4 -19.2
2025-12-31T23:16:57.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T23:16:57.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T23:16:57.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.886247
2025-12-31T23:16:57.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T23:16:57.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T23:16:57.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T23:16:57.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T23:16:57.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T23:16:57.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T23:16:51', tmtdew=4.42, humidity=74.65, cloud=0.0, wind=19.27, temperature=15.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T23:16:51', seeing=0.81, atlas_timestamp='2025-12-31T21:16:11.741', atlas_cloud=2, atlas_rain=1, zp_data=[0.4167500000000004, 1.11125, 0.6047500000000019, 0.08449999999999847, 0.0860000000000003, 0.800250000000001, 0.3179999999999996, 0.8202500000000006, 1.7594999999999992, 0.41800000000000104, 0.15124999999999922, 0.07099999999999973, 0.13100000000000023, 0.8032499999999994, 0.49599999999999866, -0.06300000000000061, 1.4402499999999998, 0.5659999999999998, 0.12599999999999945, 0.11824999999999974, 0.0649999999999995, 0.3227499999999992, -1.0177499999999995, 0.8067500000000001, nan, 0.27800000000000047, 0.14424999999999955, 0.18200000000000038, 0.27000000000000046, 0.045000000000001705, -1.5234999999999985, -1.741999999999999, 0.6022500000000006], zp_timestamp='2025-12-31T21:14:00')
2025-12-31T23:16:57.784 [DEBUG] [Thread-136443] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:16:57.867 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T23:16:57.879 [DEBUG] [Thread-136447] [transport.py] [_log()] starting thread (client mode): 0xb17952d0
2025-12-31T23:16:57.879 [DEBUG] [Thread-136447] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:16:57.893 [DEBUG] [Thread-136447] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T23:16:57.894 [INFO] [Thread-136447] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T23:16:57.901 [DEBUG] [Thread-136447] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:16:57.902 [DEBUG] [Thread-136447] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T23:16:57.902 [DEBUG] [Thread-136447] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:16:57.902 [DEBUG] [Thread-136447] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:16:57.902 [DEBUG] [Thread-136447] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:16:57.902 [DEBUG] [Thread-136447] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:16:57.902 [DEBUG] [Thread-136447] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:16:57.902 [DEBUG] [Thread-136447] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:16:57.902 [DEBUG] [Thread-136447] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:16:57.902 [DEBUG] [Thread-136447] [transport.py] [_log()] client lang: <none>
2025-12-31T23:16:57.902 [DEBUG] [Thread-136447] [transport.py] [_log()] server lang: <none>
2025-12-31T23:16:57.902 [DEBUG] [Thread-136447] [transport.py] [_log()] kex follows: False
2025-12-31T23:16:57.902 [DEBUG] [Thread-136447] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:16:57.903 [DEBUG] [Thread-136447] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:16:57.903 [DEBUG] [Thread-136447] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:16:57.903 [DEBUG] [Thread-136447] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:16:57.903 [DEBUG] [Thread-136447] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:16:57.903 [DEBUG] [Thread-136447] [transport.py] [_log()] Compression: none
2025-12-31T23:16:57.903 [DEBUG] [Thread-136447] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:16:57.960 [DEBUG] [Thread-136447] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:16:57.961 [DEBUG] [Thread-136447] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:16:57.962 [DEBUG] [Thread-136447] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T23:16:57.962 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T23:16:57.963 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:16:58.020 [DEBUG] [Thread-136447] [transport.py] [_log()] userauth is OK
2025-12-31T23:16:58.020 [DEBUG] [Thread-136447] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:16:58.021 [DEBUG] [Thread-136447] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:16:58.021 [DEBUG] [Thread-136447] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T23:16:58.021 [DEBUG] [Thread-136447] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:16:58.041 [INFO] [Thread-136447] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:16:58.041 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T23:16:58.042 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:16:58.890 [DEBUG] [Thread-136447] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:16:58.890 [DEBUG] [Thread-136447] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:16:58.940 [DEBUG] [Thread-136447] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:16:58.940 [DEBUG] [Thread-136447] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:16:58.950 [DEBUG] [Thread-136447] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:16:58.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:16:58.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T23:16:58.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T23:16:58.979 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:16:58.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:16:58.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:16:58.988 [DEBUG] [Thread-136447] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:17:12.371 [DEBUG] [Thread-136449 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:17:23.965 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:17:23.966 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:17:27.412 [DEBUG] [Thread-136450 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:17:29.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T23:17:29.010 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T23:17:29.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T23:17:29.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 23, 17, 23), 4.41, 74.72, 0.0, 20.26, 15.25, 0, 0, 0, 2, 0, 0),)
2025-12-31T23:17:29.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 23:17:23
2025-12-31T23:17:29.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T23:17:30.001 [DEBUG] [Thread-136451] [transport.py] [_log()] starting thread (client mode): 0xb6b60580
2025-12-31T23:17:30.001 [DEBUG] [Thread-136451] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:17:30.021 [DEBUG] [Thread-136451] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T23:17:30.022 [INFO] [Thread-136451] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T23:17:30.025 [DEBUG] [Thread-136451] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:17:30.025 [DEBUG] [Thread-136451] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T23:17:30.025 [DEBUG] [Thread-136451] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:17:30.025 [DEBUG] [Thread-136451] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:17:30.025 [DEBUG] [Thread-136451] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:17:30.025 [DEBUG] [Thread-136451] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:17:30.025 [DEBUG] [Thread-136451] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:17:30.025 [DEBUG] [Thread-136451] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:17:30.025 [DEBUG] [Thread-136451] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:17:30.025 [DEBUG] [Thread-136451] [transport.py] [_log()] client lang: <none>
2025-12-31T23:17:30.025 [DEBUG] [Thread-136451] [transport.py] [_log()] server lang: <none>
2025-12-31T23:17:30.025 [DEBUG] [Thread-136451] [transport.py] [_log()] kex follows: False
2025-12-31T23:17:30.025 [DEBUG] [Thread-136451] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:17:30.025 [DEBUG] [Thread-136451] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:17:30.025 [DEBUG] [Thread-136451] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:17:30.025 [DEBUG] [Thread-136451] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:17:30.025 [DEBUG] [Thread-136451] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:17:30.025 [DEBUG] [Thread-136451] [transport.py] [_log()] Compression: none
2025-12-31T23:17:30.025 [DEBUG] [Thread-136451] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:17:30.042 [DEBUG] [Thread-136451] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:17:30.043 [DEBUG] [Thread-136451] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:17:30.043 [DEBUG] [Thread-136451] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T23:17:30.044 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T23:17:30.044 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:17:30.046 [DEBUG] [Thread-136451] [transport.py] [_log()] userauth is OK
2025-12-31T23:17:30.046 [DEBUG] [Thread-136451] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:17:30.046 [DEBUG] [Thread-136451] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:17:30.046 [DEBUG] [Thread-136451] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T23:17:30.046 [DEBUG] [Thread-136451] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:17:30.082 [INFO] [Thread-136451] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:17:30.082 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:17:30.860 [DEBUG] [Thread-136451] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:17:30.861 [DEBUG] [Thread-136451] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:17:30.861 [DEBUG] [Thread-136451] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T23:17:30.901 [DEBUG] [Thread-136451] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:17:30.901 [DEBUG] [Thread-136451] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:17:30.903 [DEBUG] [Thread-136451] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:17:30.911 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:17:30.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T23:17:30.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T23:17:30.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T23:17:30.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:17:30.924 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T23:17:30.925 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:17:30.925 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:17:30.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T23:17:30.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.886594 -999.00  +15.40   3.79     77  +11.40 1 2 1 1 1     0    0 3.51 -20.06 Z.ESW 9.3 3.8 223.5 17.9 16.4 -20.1 16.3 -20.2 16.1 -18.5 16.4 -19.2
2025-12-31T23:17:30.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T23:17:30.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T23:17:30.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.886594
2025-12-31T23:17:30.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T23:17:30.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T23:17:30.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T23:17:30.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T23:17:30.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T23:17:30.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T23:17:23', tmtdew=4.41, humidity=74.72, cloud=0.0, wind=20.26, temperature=15.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T23:17:23', seeing=0.74, atlas_timestamp='2025-12-31T21:16:41.722', atlas_cloud=2, atlas_rain=1, zp_data=[0.4167500000000004, 1.11125, 0.6047500000000019, 0.08449999999999847, 0.0860000000000003, 0.800250000000001, 0.3179999999999996, 0.8202500000000006, 1.7594999999999992, 0.41800000000000104, 0.15124999999999922, 0.07099999999999973, 0.13100000000000023, 0.8032499999999994, 0.49599999999999866, -0.06300000000000061, 1.4402499999999998, 0.5659999999999998, 0.12599999999999945, 0.11824999999999974, 0.0649999999999995, 0.3227499999999992, -1.0177499999999995, 0.8067500000000001, nan, 0.27800000000000047, 0.14424999999999955, 0.18200000000000038, 0.27000000000000046, 0.045000000000001705, -1.5234999999999985, -1.741999999999999, 0.6022500000000006], zp_timestamp='2025-12-31T21:14:00')
2025-12-31T23:17:30.928 [DEBUG] [Thread-136451] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:17:31.007 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T23:17:31.018 [DEBUG] [Thread-136454] [transport.py] [_log()] starting thread (client mode): 0xb6b61a50
2025-12-31T23:17:31.018 [DEBUG] [Thread-136454] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:17:31.034 [DEBUG] [Thread-136454] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T23:17:31.034 [INFO] [Thread-136454] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T23:17:31.041 [DEBUG] [Thread-136454] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:17:31.042 [DEBUG] [Thread-136454] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T23:17:31.042 [DEBUG] [Thread-136454] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:17:31.042 [DEBUG] [Thread-136454] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:17:31.042 [DEBUG] [Thread-136454] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:17:31.042 [DEBUG] [Thread-136454] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:17:31.042 [DEBUG] [Thread-136454] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:17:31.042 [DEBUG] [Thread-136454] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:17:31.042 [DEBUG] [Thread-136454] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:17:31.043 [DEBUG] [Thread-136454] [transport.py] [_log()] client lang: <none>
2025-12-31T23:17:31.043 [DEBUG] [Thread-136454] [transport.py] [_log()] server lang: <none>
2025-12-31T23:17:31.043 [DEBUG] [Thread-136454] [transport.py] [_log()] kex follows: False
2025-12-31T23:17:31.043 [DEBUG] [Thread-136454] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:17:31.043 [DEBUG] [Thread-136454] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:17:31.043 [DEBUG] [Thread-136454] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:17:31.043 [DEBUG] [Thread-136454] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:17:31.043 [DEBUG] [Thread-136454] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:17:31.044 [DEBUG] [Thread-136454] [transport.py] [_log()] Compression: none
2025-12-31T23:17:31.044 [DEBUG] [Thread-136454] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:17:31.100 [DEBUG] [Thread-136454] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:17:31.101 [DEBUG] [Thread-136454] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:17:31.101 [DEBUG] [Thread-136454] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T23:17:31.102 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T23:17:31.102 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:17:31.158 [DEBUG] [Thread-136454] [transport.py] [_log()] userauth is OK
2025-12-31T23:17:31.158 [DEBUG] [Thread-136454] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:17:31.158 [DEBUG] [Thread-136454] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:17:31.158 [DEBUG] [Thread-136454] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T23:17:31.159 [DEBUG] [Thread-136454] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:17:31.178 [INFO] [Thread-136454] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:17:31.179 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T23:17:31.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:17:32.053 [DEBUG] [Thread-136454] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:17:32.054 [DEBUG] [Thread-136454] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:17:32.102 [DEBUG] [Thread-136454] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:17:32.102 [DEBUG] [Thread-136454] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:17:32.111 [DEBUG] [Thread-136454] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:17:32.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:17:32.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T23:17:32.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T23:17:32.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:17:32.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:17:32.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:17:32.149 [DEBUG] [Thread-136454] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:17:42.452 [DEBUG] [Thread-136456 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:17:51.483 [DEBUG] [Thread-136457 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:17:57.496 [DEBUG] [Thread-136458 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:18:02.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T23:18:02.148 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T23:18:02.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T23:18:02.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 23, 17, 55), 4.42, 74.64, 0.0, 17.87, 15.2, 0, 0, 0, 2, 0, 0),)
2025-12-31T23:18:02.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 23:17:55
2025-12-31T23:18:02.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T23:18:03.134 [DEBUG] [Thread-136459] [transport.py] [_log()] starting thread (client mode): 0xb6b63a00
2025-12-31T23:18:03.134 [DEBUG] [Thread-136459] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:18:03.155 [DEBUG] [Thread-136459] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T23:18:03.155 [INFO] [Thread-136459] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T23:18:03.158 [DEBUG] [Thread-136459] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:18:03.158 [DEBUG] [Thread-136459] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T23:18:03.158 [DEBUG] [Thread-136459] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:18:03.158 [DEBUG] [Thread-136459] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:18:03.158 [DEBUG] [Thread-136459] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:18:03.158 [DEBUG] [Thread-136459] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:18:03.158 [DEBUG] [Thread-136459] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:18:03.158 [DEBUG] [Thread-136459] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:18:03.158 [DEBUG] [Thread-136459] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:18:03.158 [DEBUG] [Thread-136459] [transport.py] [_log()] client lang: <none>
2025-12-31T23:18:03.158 [DEBUG] [Thread-136459] [transport.py] [_log()] server lang: <none>
2025-12-31T23:18:03.158 [DEBUG] [Thread-136459] [transport.py] [_log()] kex follows: False
2025-12-31T23:18:03.158 [DEBUG] [Thread-136459] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:18:03.158 [DEBUG] [Thread-136459] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:18:03.158 [DEBUG] [Thread-136459] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:18:03.158 [DEBUG] [Thread-136459] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:18:03.158 [DEBUG] [Thread-136459] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:18:03.158 [DEBUG] [Thread-136459] [transport.py] [_log()] Compression: none
2025-12-31T23:18:03.158 [DEBUG] [Thread-136459] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:18:03.177 [DEBUG] [Thread-136459] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:18:03.177 [DEBUG] [Thread-136459] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:18:03.178 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T23:18:03.178 [DEBUG] [Thread-136459] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T23:18:03.179 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:18:03.180 [DEBUG] [Thread-136459] [transport.py] [_log()] userauth is OK
2025-12-31T23:18:03.181 [DEBUG] [Thread-136459] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:18:03.181 [DEBUG] [Thread-136459] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:18:03.181 [DEBUG] [Thread-136459] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T23:18:03.181 [DEBUG] [Thread-136459] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:18:03.207 [INFO] [Thread-136459] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:18:03.207 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:18:03.845 [DEBUG] [Thread-136459] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:18:03.845 [DEBUG] [Thread-136459] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:18:03.845 [DEBUG] [Thread-136459] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T23:18:03.886 [DEBUG] [Thread-136459] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:18:03.886 [DEBUG] [Thread-136459] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:18:03.890 [DEBUG] [Thread-136459] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:18:03.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:18:03.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T23:18:03.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T23:18:03.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T23:18:03.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:18:03.913 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T23:18:03.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:18:03.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:18:03.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T23:18:03.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.887288 -999.00  +15.40  14.25     77  +11.40 1 2 1 1 1     0    0 3.54 -17.94 ZnESW 10.4 14.2 207.0 16.2 16.4 -20.2 16.2 -19.9 16.1 -18.6 16.3 -19.2
2025-12-31T23:18:03.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T23:18:03.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T23:18:03.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.887288
2025-12-31T23:18:03.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T23:18:03.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T23:18:03.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T23:18:03.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T23:18:03.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T23:18:03.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T23:17:55', tmtdew=4.42, humidity=74.64, cloud=0.0, wind=17.87, temperature=15.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T23:17:56', seeing=0.76, atlas_timestamp='2025-12-31T21:17:41.683', atlas_cloud=2, atlas_rain=1, zp_data=[0.4167500000000004, 1.11125, 0.6047500000000019, 0.08449999999999847, 0.0860000000000003, 0.800250000000001, 0.3179999999999996, 0.8202500000000006, 1.7594999999999992, 0.41800000000000104, 0.15124999999999922, 0.07099999999999973, 0.13100000000000023, 0.8032499999999994, 0.49599999999999866, -0.06300000000000061, 1.4402499999999998, 0.5659999999999998, 0.12599999999999945, 0.11824999999999974, 0.0649999999999995, 0.3227499999999992, -1.0177499999999995, 0.8067500000000001, nan, 0.27800000000000047, 0.14424999999999955, 0.18200000000000038, 0.27000000000000046, 0.045000000000001705, -1.5234999999999985, -1.741999999999999, 0.6022500000000006], zp_timestamp='2025-12-31T21:14:00')
2025-12-31T23:18:03.916 [DEBUG] [Thread-136459] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:18:04.010 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T23:18:04.023 [DEBUG] [Thread-136462] [transport.py] [_log()] starting thread (client mode): 0xb6b63040
2025-12-31T23:18:04.023 [DEBUG] [Thread-136462] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:18:04.037 [DEBUG] [Thread-136462] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T23:18:04.037 [INFO] [Thread-136462] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T23:18:04.045 [DEBUG] [Thread-136462] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:18:04.045 [DEBUG] [Thread-136462] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T23:18:04.045 [DEBUG] [Thread-136462] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:18:04.045 [DEBUG] [Thread-136462] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:18:04.045 [DEBUG] [Thread-136462] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:18:04.046 [DEBUG] [Thread-136462] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:18:04.046 [DEBUG] [Thread-136462] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:18:04.046 [DEBUG] [Thread-136462] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:18:04.046 [DEBUG] [Thread-136462] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:18:04.046 [DEBUG] [Thread-136462] [transport.py] [_log()] client lang: <none>
2025-12-31T23:18:04.046 [DEBUG] [Thread-136462] [transport.py] [_log()] server lang: <none>
2025-12-31T23:18:04.046 [DEBUG] [Thread-136462] [transport.py] [_log()] kex follows: False
2025-12-31T23:18:04.046 [DEBUG] [Thread-136462] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:18:04.046 [DEBUG] [Thread-136462] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:18:04.047 [DEBUG] [Thread-136462] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:18:04.047 [DEBUG] [Thread-136462] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:18:04.047 [DEBUG] [Thread-136462] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:18:04.047 [DEBUG] [Thread-136462] [transport.py] [_log()] Compression: none
2025-12-31T23:18:04.047 [DEBUG] [Thread-136462] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:18:04.104 [DEBUG] [Thread-136462] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:18:04.105 [DEBUG] [Thread-136462] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:18:04.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T23:18:04.105 [DEBUG] [Thread-136462] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T23:18:04.107 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:18:04.161 [DEBUG] [Thread-136462] [transport.py] [_log()] userauth is OK
2025-12-31T23:18:04.162 [DEBUG] [Thread-136462] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:18:04.162 [DEBUG] [Thread-136462] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:18:04.162 [DEBUG] [Thread-136462] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T23:18:04.162 [DEBUG] [Thread-136462] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:18:04.184 [INFO] [Thread-136462] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:18:04.185 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T23:18:04.185 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:18:04.970 [DEBUG] [Thread-136462] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:18:04.970 [DEBUG] [Thread-136462] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:18:05.018 [DEBUG] [Thread-136462] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:18:05.018 [DEBUG] [Thread-136462] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:18:05.027 [DEBUG] [Thread-136462] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:18:05.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:18:05.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-12-31T23:18:05.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-12-31T23:18:05.053 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:18:05.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:18:05.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:18:05.062 [DEBUG] [Thread-136462] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:18:12.530 [DEBUG] [Thread-136464 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:18:24.166 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:18:24.168 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:18:27.589 [DEBUG] [Thread-136465 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:18:35.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T23:18:35.085 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T23:18:35.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T23:18:35.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 23, 18, 28), 4.41, 74.69, 0.0, 16.37, 15.23, 0, 0, 0, 2, 0, 0),)
2025-12-31T23:18:35.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 23:18:28
2025-12-31T23:18:35.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T23:18:36.076 [DEBUG] [Thread-136466] [transport.py] [_log()] starting thread (client mode): 0xb17952d0
2025-12-31T23:18:36.076 [DEBUG] [Thread-136466] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:18:36.096 [DEBUG] [Thread-136466] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T23:18:36.096 [INFO] [Thread-136466] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T23:18:36.100 [DEBUG] [Thread-136466] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:18:36.100 [DEBUG] [Thread-136466] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T23:18:36.100 [DEBUG] [Thread-136466] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:18:36.100 [DEBUG] [Thread-136466] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:18:36.100 [DEBUG] [Thread-136466] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:18:36.100 [DEBUG] [Thread-136466] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:18:36.100 [DEBUG] [Thread-136466] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:18:36.100 [DEBUG] [Thread-136466] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:18:36.100 [DEBUG] [Thread-136466] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:18:36.100 [DEBUG] [Thread-136466] [transport.py] [_log()] client lang: <none>
2025-12-31T23:18:36.100 [DEBUG] [Thread-136466] [transport.py] [_log()] server lang: <none>
2025-12-31T23:18:36.100 [DEBUG] [Thread-136466] [transport.py] [_log()] kex follows: False
2025-12-31T23:18:36.100 [DEBUG] [Thread-136466] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:18:36.100 [DEBUG] [Thread-136466] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:18:36.100 [DEBUG] [Thread-136466] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:18:36.100 [DEBUG] [Thread-136466] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:18:36.100 [DEBUG] [Thread-136466] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:18:36.100 [DEBUG] [Thread-136466] [transport.py] [_log()] Compression: none
2025-12-31T23:18:36.100 [DEBUG] [Thread-136466] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:18:36.116 [DEBUG] [Thread-136466] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:18:36.116 [DEBUG] [Thread-136466] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:18:36.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T23:18:36.117 [DEBUG] [Thread-136466] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T23:18:36.118 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:18:36.120 [DEBUG] [Thread-136466] [transport.py] [_log()] userauth is OK
2025-12-31T23:18:36.120 [DEBUG] [Thread-136466] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:18:36.120 [DEBUG] [Thread-136466] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:18:36.120 [DEBUG] [Thread-136466] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T23:18:36.120 [DEBUG] [Thread-136466] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:18:36.138 [INFO] [Thread-136466] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:18:36.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:18:36.751 [DEBUG] [Thread-136466] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:18:36.751 [DEBUG] [Thread-136466] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:18:36.752 [DEBUG] [Thread-136466] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T23:18:36.792 [DEBUG] [Thread-136466] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:18:36.792 [DEBUG] [Thread-136466] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:18:36.795 [DEBUG] [Thread-136466] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:18:36.807 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:18:36.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T23:18:36.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T23:18:36.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T23:18:36.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:18:36.821 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T23:18:36.821 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:18:36.821 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:18:36.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T23:18:36.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.887635 -999.00  +15.40   9.96     77  +11.40 1 2 1 1 1     0    0 3.56 -16.25 ZnESW 9.6 10.0 188.2 12.5 16.4 -20.0 16.3 -20.0 16.1 -18.5 16.4 -19.1
2025-12-31T23:18:36.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T23:18:36.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T23:18:36.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.887635
2025-12-31T23:18:36.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T23:18:36.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T23:18:36.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T23:18:36.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T23:18:36.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T23:18:36.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T23:18:28', tmtdew=4.41, humidity=74.69, cloud=0.0, wind=16.37, temperature=15.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T23:18:28', seeing=0.76, atlas_timestamp='2025-12-31T21:18:11.664', atlas_cloud=2, atlas_rain=1, zp_data=[0.06374999999999886, 0.07874999999999943, 0.10025000000000084, 0.023499999999998522, 0.01699999999999946, 0.034250000000000114, 0.14899999999999913, 0.16525000000000034, 0.05699999999999861, 0.10299999999999976, 0.16424999999999912, 0.09450000000000003, 0.17300000000000004, 0.4062499999999982, -0.5099999999999998, 0.0039999999999995595, 0.09724999999999895, 0.20350000000000001, 0.12399999999999878, 0.10124999999999851, 0.22999999999999865, 0.3977499999999985, 0.22025000000000006, 0.2762499999999992, 0.2599999999999998, 0.006000000000000227, 0.07375000000000043, 0.2569999999999997, 0.37600000000000033, 0.009000000000000341, -1.6959999999999997, -1.4619999999999997, 0.19174999999999898], zp_timestamp='2025-12-31T21:17:00')
2025-12-31T23:18:36.824 [DEBUG] [Thread-136466] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:18:36.907 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T23:18:36.919 [DEBUG] [Thread-136469] [transport.py] [_log()] starting thread (client mode): 0xb957a230
2025-12-31T23:18:36.920 [DEBUG] [Thread-136469] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:18:36.935 [DEBUG] [Thread-136469] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T23:18:36.935 [INFO] [Thread-136469] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T23:18:36.942 [DEBUG] [Thread-136469] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:18:36.943 [DEBUG] [Thread-136469] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T23:18:36.943 [DEBUG] [Thread-136469] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:18:36.943 [DEBUG] [Thread-136469] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:18:36.943 [DEBUG] [Thread-136469] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:18:36.943 [DEBUG] [Thread-136469] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:18:36.943 [DEBUG] [Thread-136469] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:18:36.943 [DEBUG] [Thread-136469] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:18:36.943 [DEBUG] [Thread-136469] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:18:36.943 [DEBUG] [Thread-136469] [transport.py] [_log()] client lang: <none>
2025-12-31T23:18:36.943 [DEBUG] [Thread-136469] [transport.py] [_log()] server lang: <none>
2025-12-31T23:18:36.943 [DEBUG] [Thread-136469] [transport.py] [_log()] kex follows: False
2025-12-31T23:18:36.943 [DEBUG] [Thread-136469] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:18:36.943 [DEBUG] [Thread-136469] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:18:36.943 [DEBUG] [Thread-136469] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:18:36.943 [DEBUG] [Thread-136469] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:18:36.943 [DEBUG] [Thread-136469] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:18:36.943 [DEBUG] [Thread-136469] [transport.py] [_log()] Compression: none
2025-12-31T23:18:36.943 [DEBUG] [Thread-136469] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:18:36.999 [DEBUG] [Thread-136469] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:18:37.000 [DEBUG] [Thread-136469] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:18:37.000 [DEBUG] [Thread-136469] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T23:18:37.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T23:18:37.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:18:37.056 [DEBUG] [Thread-136469] [transport.py] [_log()] userauth is OK
2025-12-31T23:18:37.056 [DEBUG] [Thread-136469] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:18:37.056 [DEBUG] [Thread-136469] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:18:37.056 [DEBUG] [Thread-136469] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T23:18:37.056 [DEBUG] [Thread-136469] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:18:37.074 [INFO] [Thread-136469] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:18:37.075 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T23:18:37.075 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:18:37.896 [DEBUG] [Thread-136469] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:18:37.896 [DEBUG] [Thread-136469] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:18:37.944 [DEBUG] [Thread-136469] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:18:37.945 [DEBUG] [Thread-136469] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:18:37.954 [DEBUG] [Thread-136469] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:18:37.964 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:18:37.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T23:18:37.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T23:18:37.982 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:18:37.982 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:18:37.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:18:37.991 [DEBUG] [Thread-136469] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:18:42.620 [DEBUG] [Thread-136471 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:18:51.552 [DEBUG] [Thread-136472 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:18:57.674 [DEBUG] [Thread-136473 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:19:08.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T23:19:08.013 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T23:19:08.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T23:19:08.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 23, 18, 28), 4.41, 74.69, 0.0, 16.37, 15.23, 0, 0, 0, 2, 0, 0),)
2025-12-31T23:19:08.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 23:18:28
2025-12-31T23:19:08.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T23:19:09.031 [DEBUG] [Thread-136474] [transport.py] [_log()] starting thread (client mode): 0xb6b61fc0
2025-12-31T23:19:09.031 [DEBUG] [Thread-136474] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:19:09.051 [DEBUG] [Thread-136474] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T23:19:09.051 [INFO] [Thread-136474] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T23:19:09.055 [DEBUG] [Thread-136474] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:19:09.055 [DEBUG] [Thread-136474] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T23:19:09.055 [DEBUG] [Thread-136474] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:19:09.055 [DEBUG] [Thread-136474] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:19:09.055 [DEBUG] [Thread-136474] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:19:09.055 [DEBUG] [Thread-136474] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:19:09.055 [DEBUG] [Thread-136474] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:19:09.055 [DEBUG] [Thread-136474] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:19:09.055 [DEBUG] [Thread-136474] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:19:09.055 [DEBUG] [Thread-136474] [transport.py] [_log()] client lang: <none>
2025-12-31T23:19:09.055 [DEBUG] [Thread-136474] [transport.py] [_log()] server lang: <none>
2025-12-31T23:19:09.055 [DEBUG] [Thread-136474] [transport.py] [_log()] kex follows: False
2025-12-31T23:19:09.055 [DEBUG] [Thread-136474] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:19:09.055 [DEBUG] [Thread-136474] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:19:09.055 [DEBUG] [Thread-136474] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:19:09.055 [DEBUG] [Thread-136474] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:19:09.055 [DEBUG] [Thread-136474] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:19:09.055 [DEBUG] [Thread-136474] [transport.py] [_log()] Compression: none
2025-12-31T23:19:09.055 [DEBUG] [Thread-136474] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:19:09.067 [DEBUG] [Thread-136474] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:19:09.067 [DEBUG] [Thread-136474] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:19:09.067 [DEBUG] [Thread-136474] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T23:19:09.067 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T23:19:09.067 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:19:09.067 [DEBUG] [Thread-136474] [transport.py] [_log()] userauth is OK
2025-12-31T23:19:09.068 [DEBUG] [Thread-136474] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:19:09.068 [DEBUG] [Thread-136474] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:19:09.068 [DEBUG] [Thread-136474] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T23:19:09.068 [DEBUG] [Thread-136474] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:19:09.077 [INFO] [Thread-136474] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:19:09.077 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:19:09.735 [DEBUG] [Thread-136474] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:19:09.735 [DEBUG] [Thread-136474] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:19:09.735 [DEBUG] [Thread-136474] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T23:19:09.776 [DEBUG] [Thread-136474] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:19:09.776 [DEBUG] [Thread-136474] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:19:09.779 [DEBUG] [Thread-136474] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:19:09.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:19:09.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T23:19:09.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T23:19:09.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T23:19:09.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:19:09.792 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T23:19:09.792 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:19:09.792 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:19:09.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T23:19:09.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.887983 -999.00  +15.40  11.92     77  +11.40 1 1 1 1 1     0    0 3.66 -15.18 ZNESW 12.8 11.9 194.6 17.2 16.4 -20.1 16.3 -20.0 16.1 -18.7 16.4 -19.2
2025-12-31T23:19:09.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T23:19:09.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T23:19:09.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.887983
2025-12-31T23:19:09.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T23:19:09.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T23:19:09.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T23:19:09.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T23:19:09.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T23:19:09.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T23:18:28', tmtdew=4.41, humidity=74.69, cloud=0.0, wind=16.37, temperature=15.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T23:19:00', seeing=1.1, atlas_timestamp='2025-12-31T21:18:41.731', atlas_cloud=1, atlas_rain=1, zp_data=[0.06374999999999886, 0.07874999999999943, 0.10025000000000084, 0.023499999999998522, 0.01699999999999946, 0.034250000000000114, 0.14899999999999913, 0.16525000000000034, 0.05699999999999861, 0.10299999999999976, 0.16424999999999912, 0.09450000000000003, 0.17300000000000004, 0.4062499999999982, -0.5099999999999998, 0.0039999999999995595, 0.09724999999999895, 0.20350000000000001, 0.12399999999999878, 0.10124999999999851, 0.22999999999999865, 0.3977499999999985, 0.22025000000000006, 0.2762499999999992, 0.2599999999999998, 0.006000000000000227, 0.07375000000000043, 0.2569999999999997, 0.37600000000000033, 0.009000000000000341, -1.6959999999999997, -1.4619999999999997, 0.19174999999999898], zp_timestamp='2025-12-31T21:17:00')
2025-12-31T23:19:09.793 [DEBUG] [Thread-136474] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:19:09.868 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T23:19:09.879 [DEBUG] [Thread-136477] [transport.py] [_log()] starting thread (client mode): 0xb6b61d80
2025-12-31T23:19:09.879 [DEBUG] [Thread-136477] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:19:09.893 [DEBUG] [Thread-136477] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T23:19:09.893 [INFO] [Thread-136477] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T23:19:09.901 [DEBUG] [Thread-136477] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:19:09.901 [DEBUG] [Thread-136477] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T23:19:09.901 [DEBUG] [Thread-136477] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:19:09.901 [DEBUG] [Thread-136477] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:19:09.901 [DEBUG] [Thread-136477] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:19:09.901 [DEBUG] [Thread-136477] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:19:09.901 [DEBUG] [Thread-136477] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:19:09.901 [DEBUG] [Thread-136477] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:19:09.901 [DEBUG] [Thread-136477] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:19:09.901 [DEBUG] [Thread-136477] [transport.py] [_log()] client lang: <none>
2025-12-31T23:19:09.901 [DEBUG] [Thread-136477] [transport.py] [_log()] server lang: <none>
2025-12-31T23:19:09.901 [DEBUG] [Thread-136477] [transport.py] [_log()] kex follows: False
2025-12-31T23:19:09.901 [DEBUG] [Thread-136477] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:19:09.901 [DEBUG] [Thread-136477] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:19:09.901 [DEBUG] [Thread-136477] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:19:09.901 [DEBUG] [Thread-136477] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:19:09.901 [DEBUG] [Thread-136477] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:19:09.901 [DEBUG] [Thread-136477] [transport.py] [_log()] Compression: none
2025-12-31T23:19:09.901 [DEBUG] [Thread-136477] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:19:09.958 [DEBUG] [Thread-136477] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:19:09.958 [DEBUG] [Thread-136477] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:19:09.958 [DEBUG] [Thread-136477] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T23:19:09.958 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T23:19:09.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:19:10.015 [DEBUG] [Thread-136477] [transport.py] [_log()] userauth is OK
2025-12-31T23:19:10.015 [DEBUG] [Thread-136477] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:19:10.015 [DEBUG] [Thread-136477] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:19:10.015 [DEBUG] [Thread-136477] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T23:19:10.015 [DEBUG] [Thread-136477] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:19:10.029 [INFO] [Thread-136477] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:19:10.029 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T23:19:10.029 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:19:10.837 [DEBUG] [Thread-136477] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:19:10.837 [DEBUG] [Thread-136477] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:19:10.886 [DEBUG] [Thread-136477] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:19:10.886 [DEBUG] [Thread-136477] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:19:10.894 [DEBUG] [Thread-136477] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:19:10.902 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:19:10.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')
2025-12-31T23:19:10.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T23:19:10.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:19:10.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:19:10.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:19:10.926 [DEBUG] [Thread-136477] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:19:12.709 [DEBUG] [Thread-136479 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:19:24.372 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:19:24.373 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:19:27.764 [DEBUG] [Thread-136480 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:19:40.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T23:19:40.934 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T23:19:40.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-12-31T23:19:41.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 23, 19, 32), 4.42, 74.65, 0.0, 16.3, 15.18, 0, 0, 0, 2, 0, 0),)
2025-12-31T23:19:41.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 23:19:32
2025-12-31T23:19:41.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T23:19:41.929 [DEBUG] [Thread-136481] [transport.py] [_log()] starting thread (client mode): 0xb6b60dc0
2025-12-31T23:19:41.929 [DEBUG] [Thread-136481] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:19:41.949 [DEBUG] [Thread-136481] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T23:19:41.950 [INFO] [Thread-136481] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T23:19:41.953 [DEBUG] [Thread-136481] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:19:41.953 [DEBUG] [Thread-136481] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T23:19:41.953 [DEBUG] [Thread-136481] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:19:41.953 [DEBUG] [Thread-136481] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:19:41.953 [DEBUG] [Thread-136481] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:19:41.953 [DEBUG] [Thread-136481] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:19:41.953 [DEBUG] [Thread-136481] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:19:41.953 [DEBUG] [Thread-136481] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:19:41.953 [DEBUG] [Thread-136481] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:19:41.953 [DEBUG] [Thread-136481] [transport.py] [_log()] client lang: <none>
2025-12-31T23:19:41.953 [DEBUG] [Thread-136481] [transport.py] [_log()] server lang: <none>
2025-12-31T23:19:41.953 [DEBUG] [Thread-136481] [transport.py] [_log()] kex follows: False
2025-12-31T23:19:41.953 [DEBUG] [Thread-136481] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:19:41.953 [DEBUG] [Thread-136481] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:19:41.954 [DEBUG] [Thread-136481] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:19:41.954 [DEBUG] [Thread-136481] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:19:41.954 [DEBUG] [Thread-136481] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:19:41.954 [DEBUG] [Thread-136481] [transport.py] [_log()] Compression: none
2025-12-31T23:19:41.954 [DEBUG] [Thread-136481] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:19:41.973 [DEBUG] [Thread-136481] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:19:41.974 [DEBUG] [Thread-136481] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:19:41.974 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T23:19:41.975 [DEBUG] [Thread-136481] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T23:19:41.976 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:19:41.977 [DEBUG] [Thread-136481] [transport.py] [_log()] userauth is OK
2025-12-31T23:19:41.977 [DEBUG] [Thread-136481] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:19:41.977 [DEBUG] [Thread-136481] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:19:41.977 [DEBUG] [Thread-136481] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T23:19:41.977 [DEBUG] [Thread-136481] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:19:41.999 [INFO] [Thread-136481] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:19:42.000 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:19:42.664 [DEBUG] [Thread-136481] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:19:42.665 [DEBUG] [Thread-136481] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:19:42.665 [DEBUG] [Thread-136481] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T23:19:42.706 [DEBUG] [Thread-136481] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:19:42.706 [DEBUG] [Thread-136481] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:19:42.710 [DEBUG] [Thread-136481] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:19:42.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:19:42.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T23:19:42.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T23:19:42.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T23:19:42.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:19:42.733 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T23:19:42.733 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:19:42.733 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:19:42.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T23:19:42.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.888330 -999.00  +15.30  10.20     77  +11.40 1 1 1 1 1     0    0 3.66 -13.23 ZNESW 9.9 10.2 196.2 17.0 16.4 -20.2 16.2 -20.2 16.0 -18.5 16.3 -19.4
2025-12-31T23:19:42.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T23:19:42.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T23:19:42.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.888330
2025-12-31T23:19:42.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T23:19:42.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T23:19:42.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T23:19:42.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T23:19:42.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T23:19:42.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T23:19:32', tmtdew=4.42, humidity=74.65, cloud=0.0, wind=16.3, temperature=15.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T23:19:32', seeing=1.08, atlas_timestamp='2025-12-31T21:19:11.712', atlas_cloud=1, atlas_rain=1, zp_data=[0.06374999999999886, 0.07874999999999943, 0.10025000000000084, 0.023499999999998522, 0.01699999999999946, 0.034250000000000114, 0.14899999999999913, 0.16525000000000034, 0.05699999999999861, 0.10299999999999976, 0.16424999999999912, 0.09450000000000003, 0.17300000000000004, 0.4062499999999982, -0.5099999999999998, 0.0039999999999995595, 0.09724999999999895, 0.20350000000000001, 0.12399999999999878, 0.10124999999999851, 0.22999999999999865, 0.3977499999999985, 0.22025000000000006, 0.2762499999999992, 0.2599999999999998, 0.006000000000000227, 0.07375000000000043, 0.2569999999999997, 0.37600000000000033, 0.009000000000000341, -1.6959999999999997, -1.4619999999999997, 0.19174999999999898], zp_timestamp='2025-12-31T21:17:00')
2025-12-31T23:19:42.735 [DEBUG] [Thread-136481] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:19:42.796 [DEBUG] [Thread-136484 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:19:42.819 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T23:19:42.833 [DEBUG] [Thread-136485] [transport.py] [_log()] starting thread (client mode): 0xb6b63a30
2025-12-31T23:19:42.833 [DEBUG] [Thread-136485] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:19:42.849 [DEBUG] [Thread-136485] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T23:19:42.849 [INFO] [Thread-136485] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T23:19:42.856 [DEBUG] [Thread-136485] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:19:42.856 [DEBUG] [Thread-136485] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T23:19:42.856 [DEBUG] [Thread-136485] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:19:42.856 [DEBUG] [Thread-136485] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:19:42.857 [DEBUG] [Thread-136485] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:19:42.857 [DEBUG] [Thread-136485] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:19:42.857 [DEBUG] [Thread-136485] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:19:42.857 [DEBUG] [Thread-136485] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:19:42.857 [DEBUG] [Thread-136485] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:19:42.857 [DEBUG] [Thread-136485] [transport.py] [_log()] client lang: <none>
2025-12-31T23:19:42.857 [DEBUG] [Thread-136485] [transport.py] [_log()] server lang: <none>
2025-12-31T23:19:42.857 [DEBUG] [Thread-136485] [transport.py] [_log()] kex follows: False
2025-12-31T23:19:42.857 [DEBUG] [Thread-136485] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:19:42.857 [DEBUG] [Thread-136485] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:19:42.857 [DEBUG] [Thread-136485] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:19:42.857 [DEBUG] [Thread-136485] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:19:42.857 [DEBUG] [Thread-136485] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:19:42.857 [DEBUG] [Thread-136485] [transport.py] [_log()] Compression: none
2025-12-31T23:19:42.857 [DEBUG] [Thread-136485] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:19:42.916 [DEBUG] [Thread-136485] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:19:42.917 [DEBUG] [Thread-136485] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:19:42.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T23:19:42.918 [DEBUG] [Thread-136485] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T23:19:42.919 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:19:42.976 [DEBUG] [Thread-136485] [transport.py] [_log()] userauth is OK
2025-12-31T23:19:42.976 [DEBUG] [Thread-136485] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:19:42.977 [DEBUG] [Thread-136485] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:19:42.977 [DEBUG] [Thread-136485] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T23:19:42.977 [DEBUG] [Thread-136485] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:19:42.994 [INFO] [Thread-136485] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:19:42.995 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T23:19:42.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:19:43.820 [DEBUG] [Thread-136485] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:19:43.820 [DEBUG] [Thread-136485] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:19:43.868 [DEBUG] [Thread-136485] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:19:43.869 [DEBUG] [Thread-136485] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:19:43.878 [DEBUG] [Thread-136485] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:19:43.887 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:19:43.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T23:19:43.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T23:19:43.909 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:19:43.910 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:19:43.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:19:43.922 [DEBUG] [Thread-136485] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:19:51.607 [DEBUG] [Thread-136487 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:19:57.830 [DEBUG] [Thread-136488 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:20:12.869 [DEBUG] [Thread-136489 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:20:13.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T23:20:13.941 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T23:20:13.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T23:20:14.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 23, 20, 4), 4.4, 74.72, 0.0, 17.08, 15.16, 0, 0, 0, 2, 0, 0),)
2025-12-31T23:20:14.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 23:20:04
2025-12-31T23:20:14.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T23:20:14.923 [DEBUG] [Thread-136490] [transport.py] [_log()] starting thread (client mode): 0xb6b63f40
2025-12-31T23:20:14.923 [DEBUG] [Thread-136490] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:20:14.944 [DEBUG] [Thread-136490] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T23:20:14.944 [INFO] [Thread-136490] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T23:20:14.947 [DEBUG] [Thread-136490] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:20:14.947 [DEBUG] [Thread-136490] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T23:20:14.947 [DEBUG] [Thread-136490] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:20:14.947 [DEBUG] [Thread-136490] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:20:14.947 [DEBUG] [Thread-136490] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:20:14.947 [DEBUG] [Thread-136490] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:20:14.947 [DEBUG] [Thread-136490] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:20:14.947 [DEBUG] [Thread-136490] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:20:14.947 [DEBUG] [Thread-136490] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:20:14.947 [DEBUG] [Thread-136490] [transport.py] [_log()] client lang: <none>
2025-12-31T23:20:14.947 [DEBUG] [Thread-136490] [transport.py] [_log()] server lang: <none>
2025-12-31T23:20:14.947 [DEBUG] [Thread-136490] [transport.py] [_log()] kex follows: False
2025-12-31T23:20:14.947 [DEBUG] [Thread-136490] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:20:14.947 [DEBUG] [Thread-136490] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:20:14.948 [DEBUG] [Thread-136490] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:20:14.948 [DEBUG] [Thread-136490] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:20:14.948 [DEBUG] [Thread-136490] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:20:14.948 [DEBUG] [Thread-136490] [transport.py] [_log()] Compression: none
2025-12-31T23:20:14.948 [DEBUG] [Thread-136490] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:20:14.963 [DEBUG] [Thread-136490] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:20:14.964 [DEBUG] [Thread-136490] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:20:14.965 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T23:20:14.965 [DEBUG] [Thread-136490] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T23:20:14.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:20:14.968 [DEBUG] [Thread-136490] [transport.py] [_log()] userauth is OK
2025-12-31T23:20:14.968 [DEBUG] [Thread-136490] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:20:14.968 [DEBUG] [Thread-136490] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:20:14.968 [DEBUG] [Thread-136490] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T23:20:14.968 [DEBUG] [Thread-136490] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:20:14.993 [INFO] [Thread-136490] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:20:14.993 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:20:15.634 [DEBUG] [Thread-136490] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:20:15.634 [DEBUG] [Thread-136490] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:20:15.634 [DEBUG] [Thread-136490] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T23:20:15.675 [DEBUG] [Thread-136490] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:20:15.676 [DEBUG] [Thread-136490] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:20:15.678 [DEBUG] [Thread-136490] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:20:15.692 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:20:15.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T23:20:15.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T23:20:15.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T23:20:15.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:20:15.699 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T23:20:15.699 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:20:15.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:20:15.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T23:20:15.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.888677 -999.00  +15.30  10.45     77  +11.50 1 1 1 1 1     0    0 3.68 -11.42 ZNESW 10.7 10.4 198.4 14.5 16.3 -20.2 16.2 -20.0 16.1 -18.5 16.3 -19.2
2025-12-31T23:20:15.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T23:20:15.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T23:20:15.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.888677
2025-12-31T23:20:15.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T23:20:15.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T23:20:15.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T23:20:15.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T23:20:15.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T23:20:15.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T23:20:04', tmtdew=4.4, humidity=74.72, cloud=0.0, wind=17.08, temperature=15.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T23:20:04', seeing=0.97, atlas_timestamp='2025-12-31T21:19:41.693', atlas_cloud=1, atlas_rain=1, zp_data=[0.06374999999999886, 0.07874999999999943, 0.10025000000000084, 0.023499999999998522, 0.01699999999999946, 0.034250000000000114, 0.14899999999999913, 0.16525000000000034, 0.05699999999999861, 0.10299999999999976, 0.16424999999999912, 0.09450000000000003, 0.17300000000000004, 0.4062499999999982, -0.5099999999999998, 0.0039999999999995595, 0.09724999999999895, 0.20350000000000001, 0.12399999999999878, 0.10124999999999851, 0.22999999999999865, 0.3977499999999985, 0.22025000000000006, 0.2762499999999992, 0.2599999999999998, 0.006000000000000227, 0.07375000000000043, 0.2569999999999997, 0.37600000000000033, 0.009000000000000341, -1.6959999999999997, -1.4619999999999997, 0.19174999999999898], zp_timestamp='2025-12-31T21:17:00')
2025-12-31T23:20:15.702 [DEBUG] [Thread-136490] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:20:15.778 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T23:20:15.791 [DEBUG] [Thread-136493] [transport.py] [_log()] starting thread (client mode): 0xb957bc40
2025-12-31T23:20:15.791 [DEBUG] [Thread-136493] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:20:15.805 [DEBUG] [Thread-136493] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T23:20:15.805 [INFO] [Thread-136493] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T23:20:15.813 [DEBUG] [Thread-136493] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:20:15.813 [DEBUG] [Thread-136493] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T23:20:15.813 [DEBUG] [Thread-136493] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:20:15.813 [DEBUG] [Thread-136493] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:20:15.813 [DEBUG] [Thread-136493] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:20:15.813 [DEBUG] [Thread-136493] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:20:15.813 [DEBUG] [Thread-136493] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:20:15.813 [DEBUG] [Thread-136493] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:20:15.813 [DEBUG] [Thread-136493] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:20:15.813 [DEBUG] [Thread-136493] [transport.py] [_log()] client lang: <none>
2025-12-31T23:20:15.813 [DEBUG] [Thread-136493] [transport.py] [_log()] server lang: <none>
2025-12-31T23:20:15.813 [DEBUG] [Thread-136493] [transport.py] [_log()] kex follows: False
2025-12-31T23:20:15.813 [DEBUG] [Thread-136493] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:20:15.814 [DEBUG] [Thread-136493] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:20:15.814 [DEBUG] [Thread-136493] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:20:15.814 [DEBUG] [Thread-136493] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:20:15.814 [DEBUG] [Thread-136493] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:20:15.814 [DEBUG] [Thread-136493] [transport.py] [_log()] Compression: none
2025-12-31T23:20:15.814 [DEBUG] [Thread-136493] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:20:15.871 [DEBUG] [Thread-136493] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:20:15.872 [DEBUG] [Thread-136493] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:20:15.872 [DEBUG] [Thread-136493] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T23:20:15.873 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T23:20:15.873 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:20:15.928 [DEBUG] [Thread-136493] [transport.py] [_log()] userauth is OK
2025-12-31T23:20:15.928 [DEBUG] [Thread-136493] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:20:15.928 [DEBUG] [Thread-136493] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:20:15.928 [DEBUG] [Thread-136493] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T23:20:15.929 [DEBUG] [Thread-136493] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:20:15.948 [INFO] [Thread-136493] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:20:15.948 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T23:20:15.949 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:20:16.788 [DEBUG] [Thread-136493] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:20:16.789 [DEBUG] [Thread-136493] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:20:16.837 [DEBUG] [Thread-136493] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:20:16.837 [DEBUG] [Thread-136493] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:20:16.847 [DEBUG] [Thread-136493] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:20:16.856 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:20:16.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-12-31T23:20:16.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T23:20:16.875 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:20:16.875 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:20:16.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:20:16.884 [DEBUG] [Thread-136493] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:20:24.604 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:20:24.605 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:20:27.902 [DEBUG] [Thread-136495 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:20:42.941 [DEBUG] [Thread-136496 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:20:46.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T23:20:46.907 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T23:20:46.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T23:20:47.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 23, 20, 36), 4.39, 74.8, 0.0, 15.63, 15.21, 0, 0, 0, 2, 0, 0),)
2025-12-31T23:20:47.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 23:20:36
2025-12-31T23:20:47.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T23:20:47.891 [DEBUG] [Thread-136497] [transport.py] [_log()] starting thread (client mode): 0xb957b220
2025-12-31T23:20:47.892 [DEBUG] [Thread-136497] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:20:47.906 [DEBUG] [Thread-136497] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T23:20:47.906 [INFO] [Thread-136497] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T23:20:47.909 [DEBUG] [Thread-136497] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:20:47.909 [DEBUG] [Thread-136497] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T23:20:47.909 [DEBUG] [Thread-136497] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:20:47.909 [DEBUG] [Thread-136497] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:20:47.909 [DEBUG] [Thread-136497] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:20:47.909 [DEBUG] [Thread-136497] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:20:47.909 [DEBUG] [Thread-136497] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:20:47.909 [DEBUG] [Thread-136497] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:20:47.909 [DEBUG] [Thread-136497] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:20:47.909 [DEBUG] [Thread-136497] [transport.py] [_log()] client lang: <none>
2025-12-31T23:20:47.909 [DEBUG] [Thread-136497] [transport.py] [_log()] server lang: <none>
2025-12-31T23:20:47.910 [DEBUG] [Thread-136497] [transport.py] [_log()] kex follows: False
2025-12-31T23:20:47.910 [DEBUG] [Thread-136497] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:20:47.910 [DEBUG] [Thread-136497] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:20:47.910 [DEBUG] [Thread-136497] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:20:47.910 [DEBUG] [Thread-136497] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:20:47.910 [DEBUG] [Thread-136497] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:20:47.910 [DEBUG] [Thread-136497] [transport.py] [_log()] Compression: none
2025-12-31T23:20:47.910 [DEBUG] [Thread-136497] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:20:47.927 [DEBUG] [Thread-136497] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:20:47.928 [DEBUG] [Thread-136497] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:20:47.928 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T23:20:47.929 [DEBUG] [Thread-136497] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T23:20:47.930 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:20:47.931 [DEBUG] [Thread-136497] [transport.py] [_log()] userauth is OK
2025-12-31T23:20:47.931 [DEBUG] [Thread-136497] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:20:47.931 [DEBUG] [Thread-136497] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:20:47.931 [DEBUG] [Thread-136497] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T23:20:47.932 [DEBUG] [Thread-136497] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:20:47.956 [INFO] [Thread-136497] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:20:47.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:20:48.591 [DEBUG] [Thread-136497] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:20:48.591 [DEBUG] [Thread-136497] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:20:48.592 [DEBUG] [Thread-136497] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T23:20:48.632 [DEBUG] [Thread-136497] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:20:48.632 [DEBUG] [Thread-136497] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:20:48.635 [DEBUG] [Thread-136497] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:20:48.644 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:20:48.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T23:20:48.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T23:20:48.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T23:20:48.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:20:48.654 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T23:20:48.655 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:20:48.655 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:20:48.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T23:20:48.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.889372 -999.00  +15.30  10.81     77  +11.50 1 1 1 1 1     0    0 3.73 -10.14 ZNESW 11.7 10.8 205.0 15.7 16.3 -20.2 16.2 -19.9 16.0 -18.5 16.3 -19.5
2025-12-31T23:20:48.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T23:20:48.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T23:20:48.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.889372
2025-12-31T23:20:48.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T23:20:48.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T23:20:48.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T23:20:48.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T23:20:48.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T23:20:48.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T23:20:36', tmtdew=4.39, humidity=74.8, cloud=0.0, wind=15.63, temperature=15.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T23:20:36', seeing=1.12, atlas_timestamp='2025-12-31T21:20:41.741', atlas_cloud=1, atlas_rain=1, zp_data=[0.06374999999999886, 0.07874999999999943, 0.10025000000000084, 0.023499999999998522, 0.01699999999999946, 0.034250000000000114, 0.14899999999999913, 0.16525000000000034, 0.05699999999999861, 0.10299999999999976, 0.16424999999999912, 0.09450000000000003, 0.17300000000000004, 0.4062499999999982, -0.5099999999999998, 0.0039999999999995595, 0.09724999999999895, 0.20350000000000001, 0.12399999999999878, 0.10124999999999851, 0.22999999999999865, 0.3977499999999985, 0.22025000000000006, 0.2762499999999992, 0.2599999999999998, 0.006000000000000227, 0.07375000000000043, 0.2569999999999997, 0.37600000000000033, 0.009000000000000341, -1.6959999999999997, -1.4619999999999997, 0.19174999999999898], zp_timestamp='2025-12-31T21:17:00')
2025-12-31T23:20:48.658 [DEBUG] [Thread-136497] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:20:48.741 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T23:20:48.754 [DEBUG] [Thread-136500] [transport.py] [_log()] starting thread (client mode): 0xb6b60ca0
2025-12-31T23:20:48.754 [DEBUG] [Thread-136500] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:20:48.769 [DEBUG] [Thread-136500] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T23:20:48.769 [INFO] [Thread-136500] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T23:20:48.776 [DEBUG] [Thread-136500] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:20:48.777 [DEBUG] [Thread-136500] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T23:20:48.777 [DEBUG] [Thread-136500] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:20:48.777 [DEBUG] [Thread-136500] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:20:48.777 [DEBUG] [Thread-136500] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:20:48.777 [DEBUG] [Thread-136500] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:20:48.777 [DEBUG] [Thread-136500] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:20:48.777 [DEBUG] [Thread-136500] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:20:48.777 [DEBUG] [Thread-136500] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:20:48.777 [DEBUG] [Thread-136500] [transport.py] [_log()] client lang: <none>
2025-12-31T23:20:48.777 [DEBUG] [Thread-136500] [transport.py] [_log()] server lang: <none>
2025-12-31T23:20:48.777 [DEBUG] [Thread-136500] [transport.py] [_log()] kex follows: False
2025-12-31T23:20:48.777 [DEBUG] [Thread-136500] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:20:48.777 [DEBUG] [Thread-136500] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:20:48.777 [DEBUG] [Thread-136500] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:20:48.777 [DEBUG] [Thread-136500] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:20:48.778 [DEBUG] [Thread-136500] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:20:48.778 [DEBUG] [Thread-136500] [transport.py] [_log()] Compression: none
2025-12-31T23:20:48.778 [DEBUG] [Thread-136500] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:20:48.837 [DEBUG] [Thread-136500] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:20:48.837 [DEBUG] [Thread-136500] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:20:48.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T23:20:48.838 [DEBUG] [Thread-136500] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T23:20:48.839 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:20:48.896 [DEBUG] [Thread-136500] [transport.py] [_log()] userauth is OK
2025-12-31T23:20:48.896 [DEBUG] [Thread-136500] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:20:48.896 [DEBUG] [Thread-136500] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:20:48.896 [DEBUG] [Thread-136500] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T23:20:48.896 [DEBUG] [Thread-136500] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:20:48.915 [INFO] [Thread-136500] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:20:48.915 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T23:20:48.916 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:20:49.754 [DEBUG] [Thread-136500] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:20:49.754 [DEBUG] [Thread-136500] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:20:49.802 [DEBUG] [Thread-136500] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:20:49.802 [DEBUG] [Thread-136500] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:20:49.812 [DEBUG] [Thread-136500] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:20:49.821 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:20:49.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T23:20:49.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-12-31T23:20:49.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:20:49.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:20:49.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:20:49.850 [DEBUG] [Thread-136500] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:20:51.663 [DEBUG] [Thread-136502 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:20:57.977 [DEBUG] [Thread-136503 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:21:13.025 [DEBUG] [Thread-136504 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:21:19.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T23:21:19.865 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T23:21:19.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-12-31T23:21:20.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 23, 21, 8), 4.38, 74.85, 0.0, 17.45, 15.2, 0, 0, 0, 2, 0, 0),)
2025-12-31T23:21:20.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 23:21:08
2025-12-31T23:21:20.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T23:21:20.842 [DEBUG] [Thread-136505] [transport.py] [_log()] starting thread (client mode): 0xb6b60640
2025-12-31T23:21:20.842 [DEBUG] [Thread-136505] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:21:20.863 [DEBUG] [Thread-136505] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T23:21:20.863 [INFO] [Thread-136505] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T23:21:20.866 [DEBUG] [Thread-136505] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:21:20.866 [DEBUG] [Thread-136505] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T23:21:20.866 [DEBUG] [Thread-136505] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:21:20.866 [DEBUG] [Thread-136505] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:21:20.866 [DEBUG] [Thread-136505] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:21:20.866 [DEBUG] [Thread-136505] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:21:20.866 [DEBUG] [Thread-136505] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:21:20.866 [DEBUG] [Thread-136505] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:21:20.866 [DEBUG] [Thread-136505] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:21:20.866 [DEBUG] [Thread-136505] [transport.py] [_log()] client lang: <none>
2025-12-31T23:21:20.866 [DEBUG] [Thread-136505] [transport.py] [_log()] server lang: <none>
2025-12-31T23:21:20.866 [DEBUG] [Thread-136505] [transport.py] [_log()] kex follows: False
2025-12-31T23:21:20.866 [DEBUG] [Thread-136505] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:21:20.866 [DEBUG] [Thread-136505] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:21:20.866 [DEBUG] [Thread-136505] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:21:20.866 [DEBUG] [Thread-136505] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:21:20.867 [DEBUG] [Thread-136505] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:21:20.867 [DEBUG] [Thread-136505] [transport.py] [_log()] Compression: none
2025-12-31T23:21:20.867 [DEBUG] [Thread-136505] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:21:20.883 [DEBUG] [Thread-136505] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:21:20.884 [DEBUG] [Thread-136505] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:21:20.884 [DEBUG] [Thread-136505] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T23:21:20.884 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T23:21:20.885 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:21:20.886 [DEBUG] [Thread-136505] [transport.py] [_log()] userauth is OK
2025-12-31T23:21:20.887 [DEBUG] [Thread-136505] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:21:20.887 [DEBUG] [Thread-136505] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:21:20.887 [DEBUG] [Thread-136505] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T23:21:20.887 [DEBUG] [Thread-136505] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:21:20.905 [INFO] [Thread-136505] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:21:20.906 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:21:21.539 [DEBUG] [Thread-136505] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:21:21.539 [DEBUG] [Thread-136505] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:21:21.540 [DEBUG] [Thread-136505] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T23:21:21.580 [DEBUG] [Thread-136505] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:21:21.580 [DEBUG] [Thread-136505] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:21:21.584 [DEBUG] [Thread-136505] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:21:21.599 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:21:21.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T23:21:21.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T23:21:21.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T23:21:21.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:21:21.610 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T23:21:21.610 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:21:21.610 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:21:21.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T23:21:21.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.889719 -999.00  +15.30   9.92     77  +11.50 1 1 1 1 1     0    0 3.70 -10.93 ZNESW 10.2 9.9 193.6 15.3 16.3 -20.0 16.1 -19.5 16.0 -18.5 16.3 -19.4
2025-12-31T23:21:21.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T23:21:21.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T23:21:21.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.889719
2025-12-31T23:21:21.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T23:21:21.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T23:21:21.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T23:21:21.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T23:21:21.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T23:21:21.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T23:21:08', tmtdew=4.38, humidity=74.85, cloud=0.0, wind=17.45, temperature=15.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T23:21:08', seeing=1.01, atlas_timestamp='2025-12-31T21:21:11.722', atlas_cloud=1, atlas_rain=1, zp_data=[0.06824999999999903, 0.012250000000001648, 0.08025000000000126, 0.0495000000000001, 0.06949999999999967, 0.2142500000000016, 0.21999999999999886, 0.17275000000000063, 0.07449999999999868, 0.07000000000000028, 0.12725000000000009, 0.17099999999999937, 0.1980000000000004, 0.2732499999999991, 0.1120000000000001, 0.009999999999999787, 0.06225000000000058, 0.11549999999999905, 0.07199999999999918, 0.21774999999999878, 0.1479999999999979, 0.07974999999999888, 0.05525000000000091, 0.2872500000000002, 0.118999999999998, 0.11900000000000155, 0.23024999999999984, 0.4510000000000005, 0.2450000000000001, -0.3439999999999994, -0.8889999999999993, 0.4400000000000004, 0.1817499999999992], zp_timestamp='2025-12-31T21:19:00')
2025-12-31T23:21:21.613 [DEBUG] [Thread-136505] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:21:21.695 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T23:21:21.707 [DEBUG] [Thread-136508] [transport.py] [_log()] starting thread (client mode): 0xb6b62500
2025-12-31T23:21:21.707 [DEBUG] [Thread-136508] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:21:21.722 [DEBUG] [Thread-136508] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T23:21:21.722 [INFO] [Thread-136508] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T23:21:21.729 [DEBUG] [Thread-136508] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:21:21.730 [DEBUG] [Thread-136508] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T23:21:21.730 [DEBUG] [Thread-136508] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:21:21.730 [DEBUG] [Thread-136508] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:21:21.730 [DEBUG] [Thread-136508] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:21:21.730 [DEBUG] [Thread-136508] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:21:21.730 [DEBUG] [Thread-136508] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:21:21.730 [DEBUG] [Thread-136508] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:21:21.730 [DEBUG] [Thread-136508] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:21:21.730 [DEBUG] [Thread-136508] [transport.py] [_log()] client lang: <none>
2025-12-31T23:21:21.730 [DEBUG] [Thread-136508] [transport.py] [_log()] server lang: <none>
2025-12-31T23:21:21.730 [DEBUG] [Thread-136508] [transport.py] [_log()] kex follows: False
2025-12-31T23:21:21.730 [DEBUG] [Thread-136508] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:21:21.730 [DEBUG] [Thread-136508] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:21:21.730 [DEBUG] [Thread-136508] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:21:21.730 [DEBUG] [Thread-136508] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:21:21.730 [DEBUG] [Thread-136508] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:21:21.731 [DEBUG] [Thread-136508] [transport.py] [_log()] Compression: none
2025-12-31T23:21:21.731 [DEBUG] [Thread-136508] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:21:21.787 [DEBUG] [Thread-136508] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:21:21.788 [DEBUG] [Thread-136508] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:21:21.789 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T23:21:21.789 [DEBUG] [Thread-136508] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T23:21:21.790 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:21:21.844 [DEBUG] [Thread-136508] [transport.py] [_log()] userauth is OK
2025-12-31T23:21:21.844 [DEBUG] [Thread-136508] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:21:21.844 [DEBUG] [Thread-136508] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:21:21.844 [DEBUG] [Thread-136508] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T23:21:21.844 [DEBUG] [Thread-136508] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:21:21.869 [INFO] [Thread-136508] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:21:21.869 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T23:21:21.870 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:21:22.660 [DEBUG] [Thread-136508] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:21:22.660 [DEBUG] [Thread-136508] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:21:22.708 [DEBUG] [Thread-136508] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:21:22.708 [DEBUG] [Thread-136508] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:21:22.718 [DEBUG] [Thread-136508] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:21:22.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:21:22.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T23:21:22.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T23:21:22.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:21:22.757 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:21:22.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:21:22.766 [DEBUG] [Thread-136508] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:21:24.805 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:21:24.807 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:21:28.063 [DEBUG] [Thread-136510 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:21:43.121 [DEBUG] [Thread-136511 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:21:51.739 [DEBUG] [Thread-136512 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:21:52.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T23:21:52.786 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T23:21:52.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T23:21:53.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 23, 21, 40), 4.38, 74.84, 0.0, 15.23, 15.2, 0, 0, 0, 2, 0, 0),)
2025-12-31T23:21:53.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 23:21:40
2025-12-31T23:21:53.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T23:21:53.763 [DEBUG] [Thread-136513] [transport.py] [_log()] starting thread (client mode): 0xb6b62e00
2025-12-31T23:21:53.763 [DEBUG] [Thread-136513] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:21:53.782 [DEBUG] [Thread-136513] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T23:21:53.782 [INFO] [Thread-136513] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T23:21:53.784 [DEBUG] [Thread-136513] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:21:53.784 [DEBUG] [Thread-136513] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T23:21:53.784 [DEBUG] [Thread-136513] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:21:53.784 [DEBUG] [Thread-136513] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:21:53.784 [DEBUG] [Thread-136513] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:21:53.784 [DEBUG] [Thread-136513] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:21:53.784 [DEBUG] [Thread-136513] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:21:53.784 [DEBUG] [Thread-136513] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:21:53.784 [DEBUG] [Thread-136513] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:21:53.785 [DEBUG] [Thread-136513] [transport.py] [_log()] client lang: <none>
2025-12-31T23:21:53.785 [DEBUG] [Thread-136513] [transport.py] [_log()] server lang: <none>
2025-12-31T23:21:53.785 [DEBUG] [Thread-136513] [transport.py] [_log()] kex follows: False
2025-12-31T23:21:53.785 [DEBUG] [Thread-136513] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:21:53.785 [DEBUG] [Thread-136513] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:21:53.785 [DEBUG] [Thread-136513] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:21:53.785 [DEBUG] [Thread-136513] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:21:53.785 [DEBUG] [Thread-136513] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:21:53.785 [DEBUG] [Thread-136513] [transport.py] [_log()] Compression: none
2025-12-31T23:21:53.785 [DEBUG] [Thread-136513] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:21:53.798 [DEBUG] [Thread-136513] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:21:53.799 [DEBUG] [Thread-136513] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:21:53.800 [DEBUG] [Thread-136513] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T23:21:53.800 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T23:21:53.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:21:53.802 [DEBUG] [Thread-136513] [transport.py] [_log()] userauth is OK
2025-12-31T23:21:53.803 [DEBUG] [Thread-136513] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:21:53.803 [DEBUG] [Thread-136513] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:21:53.803 [DEBUG] [Thread-136513] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T23:21:53.803 [DEBUG] [Thread-136513] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:21:53.819 [INFO] [Thread-136513] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:21:53.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:21:54.401 [DEBUG] [Thread-136513] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:21:54.401 [DEBUG] [Thread-136513] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:21:54.401 [DEBUG] [Thread-136513] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T23:21:54.442 [DEBUG] [Thread-136513] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:21:54.442 [DEBUG] [Thread-136513] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:21:54.445 [DEBUG] [Thread-136513] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:21:54.460 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:21:54.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T23:21:54.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T23:21:54.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T23:21:54.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:21:54.469 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T23:21:54.469 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:21:54.469 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:21:54.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T23:21:54.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.890066 -999.00  +15.30  13.88     77  +11.50 1 1 1 1 1     0    0 3.61 -11.74 ZNESW 11.2 13.9 187.0 17.8 16.3 -20.2 16.1 -19.4 16.0 -18.5 16.3 -19.5
2025-12-31T23:21:54.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T23:21:54.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T23:21:54.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.890066
2025-12-31T23:21:54.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T23:21:54.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T23:21:54.472 [DEBUG] [Thread-136513] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:21:54.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T23:21:54.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T23:21:54.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T23:21:54.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T23:21:40', tmtdew=4.38, humidity=74.84, cloud=0.0, wind=15.23, temperature=15.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T23:21:40', seeing=1.12, atlas_timestamp='2025-12-31T21:21:41.702', atlas_cloud=1, atlas_rain=1, zp_data=[0.06824999999999903, 0.012250000000001648, 0.08025000000000126, 0.0495000000000001, 0.06949999999999967, 0.2142500000000016, 0.21999999999999886, 0.17275000000000063, 0.07449999999999868, 0.07000000000000028, 0.12725000000000009, 0.17099999999999937, 0.1980000000000004, 0.2732499999999991, 0.1120000000000001, 0.009999999999999787, 0.06225000000000058, 0.11549999999999905, 0.07199999999999918, 0.21774999999999878, 0.1479999999999979, 0.07974999999999888, 0.05525000000000091, 0.2872500000000002, 0.118999999999998, 0.11900000000000155, 0.23024999999999984, 0.4510000000000005, 0.2450000000000001, -0.3439999999999994, -0.8889999999999993, 0.4400000000000004, 0.1817499999999992], zp_timestamp='2025-12-31T21:19:00')
2025-12-31T23:21:54.558 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T23:21:58.155 [DEBUG] [Thread-136516 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:22:13.202 [DEBUG] [Thread-136517 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:22:25.008 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:22:25.009 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:22:28.229 [DEBUG] [Thread-136518 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:22:43.270 [DEBUG] [Thread-136519 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:22:51.811 [DEBUG] [Thread-136520 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:22:58.306 [DEBUG] [Thread-136521 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:23:13.341 [DEBUG] [Thread-136522 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:23:25.209 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:23:25.210 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:23:28.377 [DEBUG] [Thread-136523 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:23:43.407 [DEBUG] [Thread-136524 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:23:51.892 [DEBUG] [Thread-136525 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:23:58.437 [DEBUG] [Thread-136526 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:24:08.789 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-12-31T23:24:13.471 [DEBUG] [Thread-136527 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:24:25.410 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:24:25.412 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:24:28.500 [DEBUG] [Thread-136528 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:24:38.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T23:24:38.816 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T23:24:38.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T23:24:39.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 23, 24, 20), 4.28, 75.59, 0.0, 18.07, 15.08, 0, 0, 0, 2, 0, 0),)
2025-12-31T23:24:39.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 23:24:20
2025-12-31T23:24:39.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T23:24:39.800 [DEBUG] [Thread-136529] [transport.py] [_log()] starting thread (client mode): 0xb6b63d00
2025-12-31T23:24:39.800 [DEBUG] [Thread-136529] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:24:39.824 [DEBUG] [Thread-136529] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T23:24:39.824 [INFO] [Thread-136529] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T23:24:39.825 [DEBUG] [Thread-136529] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:24:39.825 [DEBUG] [Thread-136529] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T23:24:39.825 [DEBUG] [Thread-136529] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:24:39.825 [DEBUG] [Thread-136529] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:24:39.825 [DEBUG] [Thread-136529] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:24:39.825 [DEBUG] [Thread-136529] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:24:39.825 [DEBUG] [Thread-136529] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:24:39.826 [DEBUG] [Thread-136529] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:24:39.826 [DEBUG] [Thread-136529] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:24:39.826 [DEBUG] [Thread-136529] [transport.py] [_log()] client lang: <none>
2025-12-31T23:24:39.826 [DEBUG] [Thread-136529] [transport.py] [_log()] server lang: <none>
2025-12-31T23:24:39.826 [DEBUG] [Thread-136529] [transport.py] [_log()] kex follows: False
2025-12-31T23:24:39.826 [DEBUG] [Thread-136529] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:24:39.826 [DEBUG] [Thread-136529] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:24:39.826 [DEBUG] [Thread-136529] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:24:39.826 [DEBUG] [Thread-136529] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:24:39.826 [DEBUG] [Thread-136529] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:24:39.826 [DEBUG] [Thread-136529] [transport.py] [_log()] Compression: none
2025-12-31T23:24:39.826 [DEBUG] [Thread-136529] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:24:39.844 [DEBUG] [Thread-136529] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:24:39.844 [DEBUG] [Thread-136529] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:24:39.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T23:24:39.845 [DEBUG] [Thread-136529] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T23:24:39.846 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:24:39.847 [DEBUG] [Thread-136529] [transport.py] [_log()] userauth is OK
2025-12-31T23:24:39.848 [DEBUG] [Thread-136529] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:24:39.848 [DEBUG] [Thread-136529] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:24:39.848 [DEBUG] [Thread-136529] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T23:24:39.848 [DEBUG] [Thread-136529] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:24:39.871 [INFO] [Thread-136529] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:24:39.872 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:24:40.496 [DEBUG] [Thread-136529] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:24:40.497 [DEBUG] [Thread-136529] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:24:40.497 [DEBUG] [Thread-136529] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T23:24:40.538 [DEBUG] [Thread-136529] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:24:40.538 [DEBUG] [Thread-136529] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:24:40.542 [DEBUG] [Thread-136529] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:24:40.553 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:24:40.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T23:24:40.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T23:24:40.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T23:24:40.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:24:40.565 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T23:24:40.565 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:24:40.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:24:40.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T23:24:40.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.891802 -999.00  +15.20  11.86     78  +11.40 1 1 1 1 1     0    0 3.57 -13.75 ZNESW 10.9 11.9 189.6 14.9 16.2 -20.2 16.1 -20.0 15.9 -18.6 16.2 -19.7
2025-12-31T23:24:40.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T23:24:40.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T23:24:40.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.891802
2025-12-31T23:24:40.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T23:24:40.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T23:24:40.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T23:24:40.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T23:24:40.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T23:24:40.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T23:24:20', tmtdew=4.28, humidity=75.59, cloud=0.0, wind=18.07, temperature=15.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T23:24:21', seeing=1.22, atlas_timestamp='2025-12-31T21:24:11.693', atlas_cloud=1, atlas_rain=1, zp_data=[0.06824999999999903, 0.012250000000001648, 0.08025000000000126, 0.0495000000000001, 0.06949999999999967, 0.2142500000000016, 0.21999999999999886, 0.17275000000000063, 0.07449999999999868, 0.07000000000000028, 0.12725000000000009, 0.17099999999999937, 0.1980000000000004, 0.2732499999999991, 0.1120000000000001, 0.009999999999999787, 0.06225000000000058, 0.11549999999999905, 0.07199999999999918, 0.21774999999999878, 0.1479999999999979, 0.07974999999999888, 0.05525000000000091, 0.2872500000000002, 0.118999999999998, 0.11900000000000155, 0.23024999999999984, 0.4510000000000005, 0.2450000000000001, -0.3439999999999994, -0.8889999999999993, 0.4400000000000004, 0.1817499999999992], zp_timestamp='2025-12-31T21:23:00')
2025-12-31T23:24:40.568 [DEBUG] [Thread-136529] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:24:40.660 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T23:24:40.674 [DEBUG] [Thread-136532] [transport.py] [_log()] starting thread (client mode): 0xb1797fd0
2025-12-31T23:24:40.674 [DEBUG] [Thread-136532] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:24:40.689 [DEBUG] [Thread-136532] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T23:24:40.689 [INFO] [Thread-136532] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T23:24:40.697 [DEBUG] [Thread-136532] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:24:40.697 [DEBUG] [Thread-136532] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T23:24:40.698 [DEBUG] [Thread-136532] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:24:40.698 [DEBUG] [Thread-136532] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:24:40.698 [DEBUG] [Thread-136532] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:24:40.698 [DEBUG] [Thread-136532] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:24:40.698 [DEBUG] [Thread-136532] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:24:40.698 [DEBUG] [Thread-136532] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:24:40.698 [DEBUG] [Thread-136532] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:24:40.698 [DEBUG] [Thread-136532] [transport.py] [_log()] client lang: <none>
2025-12-31T23:24:40.698 [DEBUG] [Thread-136532] [transport.py] [_log()] server lang: <none>
2025-12-31T23:24:40.698 [DEBUG] [Thread-136532] [transport.py] [_log()] kex follows: False
2025-12-31T23:24:40.698 [DEBUG] [Thread-136532] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:24:40.698 [DEBUG] [Thread-136532] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:24:40.698 [DEBUG] [Thread-136532] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:24:40.698 [DEBUG] [Thread-136532] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:24:40.698 [DEBUG] [Thread-136532] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:24:40.698 [DEBUG] [Thread-136532] [transport.py] [_log()] Compression: none
2025-12-31T23:24:40.699 [DEBUG] [Thread-136532] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:24:40.761 [DEBUG] [Thread-136532] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:24:40.761 [DEBUG] [Thread-136532] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:24:40.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T23:24:40.762 [DEBUG] [Thread-136532] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T23:24:40.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:24:40.820 [DEBUG] [Thread-136532] [transport.py] [_log()] userauth is OK
2025-12-31T23:24:40.821 [DEBUG] [Thread-136532] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:24:40.821 [DEBUG] [Thread-136532] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:24:40.821 [DEBUG] [Thread-136532] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T23:24:40.821 [DEBUG] [Thread-136532] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:24:40.841 [INFO] [Thread-136532] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:24:40.841 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T23:24:40.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:24:41.658 [DEBUG] [Thread-136532] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:24:41.658 [DEBUG] [Thread-136532] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:24:41.706 [DEBUG] [Thread-136532] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:24:41.706 [DEBUG] [Thread-136532] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:24:41.715 [DEBUG] [Thread-136532] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:24:41.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:24:41.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T23:24:41.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T23:24:41.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:24:41.743 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:24:41.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:24:41.752 [DEBUG] [Thread-136532] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:24:43.537 [DEBUG] [Thread-136534 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:24:51.962 [DEBUG] [Thread-136535 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:24:58.586 [DEBUG] [Thread-136536 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:25:11.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T23:25:11.758 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T23:25:11.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T23:25:12.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 23, 24, 53), 4.27, 75.62, 0.0, 20.68, 15.03, 0, 0, 0, 2, 0, 0),)
2025-12-31T23:25:12.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 23:24:53
2025-12-31T23:25:12.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T23:25:12.755 [DEBUG] [Thread-136537] [transport.py] [_log()] starting thread (client mode): 0xb6b63a90
2025-12-31T23:25:12.755 [DEBUG] [Thread-136537] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:25:12.774 [DEBUG] [Thread-136537] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T23:25:12.774 [INFO] [Thread-136537] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T23:25:12.776 [DEBUG] [Thread-136537] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:25:12.776 [DEBUG] [Thread-136537] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T23:25:12.776 [DEBUG] [Thread-136537] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:25:12.776 [DEBUG] [Thread-136537] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:25:12.776 [DEBUG] [Thread-136537] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:25:12.776 [DEBUG] [Thread-136537] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:25:12.776 [DEBUG] [Thread-136537] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:25:12.776 [DEBUG] [Thread-136537] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:25:12.776 [DEBUG] [Thread-136537] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:25:12.776 [DEBUG] [Thread-136537] [transport.py] [_log()] client lang: <none>
2025-12-31T23:25:12.776 [DEBUG] [Thread-136537] [transport.py] [_log()] server lang: <none>
2025-12-31T23:25:12.776 [DEBUG] [Thread-136537] [transport.py] [_log()] kex follows: False
2025-12-31T23:25:12.776 [DEBUG] [Thread-136537] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:25:12.776 [DEBUG] [Thread-136537] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:25:12.777 [DEBUG] [Thread-136537] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:25:12.777 [DEBUG] [Thread-136537] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:25:12.777 [DEBUG] [Thread-136537] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:25:12.777 [DEBUG] [Thread-136537] [transport.py] [_log()] Compression: none
2025-12-31T23:25:12.777 [DEBUG] [Thread-136537] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:25:12.788 [DEBUG] [Thread-136537] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:25:12.788 [DEBUG] [Thread-136537] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:25:12.789 [DEBUG] [Thread-136537] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T23:25:12.789 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T23:25:12.789 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:25:12.790 [DEBUG] [Thread-136537] [transport.py] [_log()] userauth is OK
2025-12-31T23:25:12.790 [DEBUG] [Thread-136537] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:25:12.790 [DEBUG] [Thread-136537] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:25:12.790 [DEBUG] [Thread-136537] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T23:25:12.790 [DEBUG] [Thread-136537] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:25:12.800 [INFO] [Thread-136537] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:25:12.801 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:25:13.617 [DEBUG] [Thread-136539 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:25:15.076 [DEBUG] [Thread-136537] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:25:15.076 [DEBUG] [Thread-136537] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:25:15.077 [DEBUG] [Thread-136537] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T23:25:15.118 [DEBUG] [Thread-136537] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:25:15.118 [DEBUG] [Thread-136537] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:25:15.123 [DEBUG] [Thread-136537] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:25:15.128 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:25:15.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T23:25:15.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T23:25:15.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T23:25:15.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:25:15.138 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T23:25:15.139 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:25:15.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:25:15.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T23:25:15.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.892149 -999.00  +15.20  12.58     78  +11.40 1 1 1 1 1     0    0 3.57 -13.75 ZNESW 14.1 12.6 182.8 18.2 16.2 -20.1 16.1 -19.8 15.9 -18.4 16.2 -19.5
2025-12-31T23:25:15.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T23:25:15.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T23:25:15.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.892149
2025-12-31T23:25:15.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T23:25:15.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T23:25:15.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T23:25:15.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T23:25:15.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T23:25:15.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T23:24:53', tmtdew=4.27, humidity=75.62, cloud=0.0, wind=20.68, temperature=15.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T23:24:53', seeing=1.02, atlas_timestamp='2025-12-31T21:24:41.674', atlas_cloud=1, atlas_rain=1, zp_data=[0.06824999999999903, 0.012250000000001648, 0.08025000000000126, 0.0495000000000001, 0.06949999999999967, 0.2142500000000016, 0.21999999999999886, 0.17275000000000063, 0.07449999999999868, 0.07000000000000028, 0.12725000000000009, 0.17099999999999937, 0.1980000000000004, 0.2732499999999991, 0.1120000000000001, 0.009999999999999787, 0.06225000000000058, 0.11549999999999905, 0.07199999999999918, 0.21774999999999878, 0.1479999999999979, 0.07974999999999888, 0.05525000000000091, 0.2872500000000002, 0.118999999999998, 0.11900000000000155, 0.23024999999999984, 0.4510000000000005, 0.2450000000000001, -0.3439999999999994, -0.8889999999999993, 0.4400000000000004, 0.1817499999999992], zp_timestamp='2025-12-31T21:23:00')
2025-12-31T23:25:15.141 [DEBUG] [Thread-136537] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:25:15.224 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T23:25:15.237 [DEBUG] [Thread-136541] [transport.py] [_log()] starting thread (client mode): 0xb6b61f90
2025-12-31T23:25:15.237 [DEBUG] [Thread-136541] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:25:15.252 [DEBUG] [Thread-136541] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T23:25:15.252 [INFO] [Thread-136541] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T23:25:15.260 [DEBUG] [Thread-136541] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:25:15.260 [DEBUG] [Thread-136541] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T23:25:15.260 [DEBUG] [Thread-136541] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:25:15.260 [DEBUG] [Thread-136541] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:25:15.260 [DEBUG] [Thread-136541] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:25:15.260 [DEBUG] [Thread-136541] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:25:15.260 [DEBUG] [Thread-136541] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:25:15.260 [DEBUG] [Thread-136541] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:25:15.260 [DEBUG] [Thread-136541] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:25:15.260 [DEBUG] [Thread-136541] [transport.py] [_log()] client lang: <none>
2025-12-31T23:25:15.260 [DEBUG] [Thread-136541] [transport.py] [_log()] server lang: <none>
2025-12-31T23:25:15.260 [DEBUG] [Thread-136541] [transport.py] [_log()] kex follows: False
2025-12-31T23:25:15.260 [DEBUG] [Thread-136541] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:25:15.260 [DEBUG] [Thread-136541] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:25:15.261 [DEBUG] [Thread-136541] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:25:15.261 [DEBUG] [Thread-136541] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:25:15.261 [DEBUG] [Thread-136541] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:25:15.261 [DEBUG] [Thread-136541] [transport.py] [_log()] Compression: none
2025-12-31T23:25:15.261 [DEBUG] [Thread-136541] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:25:15.319 [DEBUG] [Thread-136541] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:25:15.319 [DEBUG] [Thread-136541] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:25:15.320 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T23:25:15.320 [DEBUG] [Thread-136541] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T23:25:15.321 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:25:15.376 [DEBUG] [Thread-136541] [transport.py] [_log()] userauth is OK
2025-12-31T23:25:15.376 [DEBUG] [Thread-136541] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:25:15.376 [DEBUG] [Thread-136541] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:25:15.376 [DEBUG] [Thread-136541] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T23:25:15.377 [DEBUG] [Thread-136541] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:25:15.395 [INFO] [Thread-136541] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:25:15.396 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T23:25:15.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:25:16.225 [DEBUG] [Thread-136541] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:25:16.225 [DEBUG] [Thread-136541] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:25:16.273 [DEBUG] [Thread-136541] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:25:16.273 [DEBUG] [Thread-136541] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:25:16.283 [DEBUG] [Thread-136541] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:25:16.292 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:25:16.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T23:25:16.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T23:25:16.310 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:25:16.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:25:16.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:25:16.319 [DEBUG] [Thread-136541] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:25:25.631 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:25:25.631 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:25:28.663 [DEBUG] [Thread-136543 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:25:43.712 [DEBUG] [Thread-136544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:25:46.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T23:25:46.341 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T23:25:46.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T23:25:47.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 23, 25, 25), 4.26, 75.67, 0.0, 21.53, 15.1, 0, 0, 0, 2, 0, 0),)
2025-12-31T23:25:47.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 23:25:25
2025-12-31T23:25:47.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T23:25:47.336 [DEBUG] [Thread-136545] [transport.py] [_log()] starting thread (client mode): 0xb9578250
2025-12-31T23:25:47.336 [DEBUG] [Thread-136545] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:25:47.352 [DEBUG] [Thread-136545] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T23:25:47.352 [INFO] [Thread-136545] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T23:25:47.355 [DEBUG] [Thread-136545] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:25:47.355 [DEBUG] [Thread-136545] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T23:25:47.355 [DEBUG] [Thread-136545] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:25:47.355 [DEBUG] [Thread-136545] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:25:47.355 [DEBUG] [Thread-136545] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:25:47.355 [DEBUG] [Thread-136545] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:25:47.355 [DEBUG] [Thread-136545] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:25:47.355 [DEBUG] [Thread-136545] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:25:47.355 [DEBUG] [Thread-136545] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:25:47.355 [DEBUG] [Thread-136545] [transport.py] [_log()] client lang: <none>
2025-12-31T23:25:47.355 [DEBUG] [Thread-136545] [transport.py] [_log()] server lang: <none>
2025-12-31T23:25:47.355 [DEBUG] [Thread-136545] [transport.py] [_log()] kex follows: False
2025-12-31T23:25:47.355 [DEBUG] [Thread-136545] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:25:47.355 [DEBUG] [Thread-136545] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:25:47.355 [DEBUG] [Thread-136545] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:25:47.355 [DEBUG] [Thread-136545] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:25:47.355 [DEBUG] [Thread-136545] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:25:47.355 [DEBUG] [Thread-136545] [transport.py] [_log()] Compression: none
2025-12-31T23:25:47.355 [DEBUG] [Thread-136545] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:25:47.372 [DEBUG] [Thread-136545] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:25:47.373 [DEBUG] [Thread-136545] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:25:47.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T23:25:47.374 [DEBUG] [Thread-136545] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T23:25:47.375 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:25:47.376 [DEBUG] [Thread-136545] [transport.py] [_log()] userauth is OK
2025-12-31T23:25:47.376 [DEBUG] [Thread-136545] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:25:47.376 [DEBUG] [Thread-136545] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:25:47.376 [DEBUG] [Thread-136545] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T23:25:47.376 [DEBUG] [Thread-136545] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:25:47.401 [INFO] [Thread-136545] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:25:47.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:25:48.239 [DEBUG] [Thread-136545] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:25:48.239 [DEBUG] [Thread-136545] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:25:48.240 [DEBUG] [Thread-136545] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T23:25:48.280 [DEBUG] [Thread-136545] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:25:48.281 [DEBUG] [Thread-136545] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:25:48.284 [DEBUG] [Thread-136545] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:25:48.297 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:25:48.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T23:25:48.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T23:25:48.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T23:25:48.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:25:48.310 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T23:25:48.310 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:25:48.310 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:25:48.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T23:25:48.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.892496 -999.00  +15.20   9.96     78  +11.40 1 1 1 1 1     0    0 3.47 -15.56 ZNESW 11.1 10.0 175.8 19.3 16.2 -20.2 16.1 -19.8 15.9 -18.6 16.2 -19.5
2025-12-31T23:25:48.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T23:25:48.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T23:25:48.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.892496
2025-12-31T23:25:48.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T23:25:48.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T23:25:48.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T23:25:48.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T23:25:48.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T23:25:48.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T23:25:25', tmtdew=4.26, humidity=75.67, cloud=0.0, wind=21.53, temperature=15.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T23:25:25', seeing=1.02, atlas_timestamp='2025-12-31T21:25:11.654', atlas_cloud=1, atlas_rain=1, zp_data=[0.06824999999999903, 0.012250000000001648, 0.08025000000000126, 0.0495000000000001, 0.06949999999999967, 0.2142500000000016, 0.21999999999999886, 0.17275000000000063, 0.07449999999999868, 0.07000000000000028, 0.12725000000000009, 0.17099999999999937, 0.1980000000000004, 0.2732499999999991, 0.1120000000000001, 0.009999999999999787, 0.06225000000000058, 0.11549999999999905, 0.07199999999999918, 0.21774999999999878, 0.1479999999999979, 0.07974999999999888, 0.05525000000000091, 0.2872500000000002, 0.118999999999998, 0.11900000000000155, 0.23024999999999984, 0.4510000000000005, 0.2450000000000001, -0.3439999999999994, -0.8889999999999993, 0.4400000000000004, 0.1817499999999992], zp_timestamp='2025-12-31T21:23:00')
2025-12-31T23:25:48.313 [DEBUG] [Thread-136545] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:25:48.396 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T23:25:48.408 [DEBUG] [Thread-136548] [transport.py] [_log()] starting thread (client mode): 0xb95f2620
2025-12-31T23:25:48.408 [DEBUG] [Thread-136548] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:25:48.423 [DEBUG] [Thread-136548] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T23:25:48.423 [INFO] [Thread-136548] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T23:25:48.431 [DEBUG] [Thread-136548] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:25:48.431 [DEBUG] [Thread-136548] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T23:25:48.431 [DEBUG] [Thread-136548] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:25:48.431 [DEBUG] [Thread-136548] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:25:48.431 [DEBUG] [Thread-136548] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:25:48.431 [DEBUG] [Thread-136548] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:25:48.431 [DEBUG] [Thread-136548] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:25:48.431 [DEBUG] [Thread-136548] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:25:48.431 [DEBUG] [Thread-136548] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:25:48.432 [DEBUG] [Thread-136548] [transport.py] [_log()] client lang: <none>
2025-12-31T23:25:48.432 [DEBUG] [Thread-136548] [transport.py] [_log()] server lang: <none>
2025-12-31T23:25:48.432 [DEBUG] [Thread-136548] [transport.py] [_log()] kex follows: False
2025-12-31T23:25:48.432 [DEBUG] [Thread-136548] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:25:48.432 [DEBUG] [Thread-136548] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:25:48.432 [DEBUG] [Thread-136548] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:25:48.432 [DEBUG] [Thread-136548] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:25:48.432 [DEBUG] [Thread-136548] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:25:48.432 [DEBUG] [Thread-136548] [transport.py] [_log()] Compression: none
2025-12-31T23:25:48.432 [DEBUG] [Thread-136548] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:25:48.492 [DEBUG] [Thread-136548] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:25:48.492 [DEBUG] [Thread-136548] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:25:48.493 [DEBUG] [Thread-136548] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T23:25:48.493 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T23:25:48.494 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:25:48.552 [DEBUG] [Thread-136548] [transport.py] [_log()] userauth is OK
2025-12-31T23:25:48.553 [DEBUG] [Thread-136548] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:25:48.553 [DEBUG] [Thread-136548] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:25:48.553 [DEBUG] [Thread-136548] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T23:25:48.553 [DEBUG] [Thread-136548] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:25:48.577 [INFO] [Thread-136548] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:25:48.577 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T23:25:48.578 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:25:49.444 [DEBUG] [Thread-136548] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:25:49.444 [DEBUG] [Thread-136548] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:25:49.492 [DEBUG] [Thread-136548] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:25:49.492 [DEBUG] [Thread-136548] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:25:49.502 [DEBUG] [Thread-136548] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:25:49.511 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:25:49.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T23:25:49.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T23:25:49.529 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:25:49.529 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:25:49.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:25:49.538 [DEBUG] [Thread-136548] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:25:52.017 [DEBUG] [Thread-136550 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:25:58.750 [DEBUG] [Thread-136551 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:26:13.789 [DEBUG] [Thread-136552 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:26:19.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T23:26:19.561 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T23:26:19.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T23:26:20.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 23, 25, 57), 4.25, 75.7, 0.0, 19.87, 15.03, 0, 0, 0, 2, 0, 0),)
2025-12-31T23:26:20.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 23:25:57
2025-12-31T23:26:20.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T23:26:20.567 [DEBUG] [Thread-136553] [transport.py] [_log()] starting thread (client mode): 0xb6b62f80
2025-12-31T23:26:20.567 [DEBUG] [Thread-136553] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:26:20.590 [DEBUG] [Thread-136553] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T23:26:20.590 [INFO] [Thread-136553] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T23:26:20.594 [DEBUG] [Thread-136553] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:26:20.594 [DEBUG] [Thread-136553] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T23:26:20.594 [DEBUG] [Thread-136553] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:26:20.594 [DEBUG] [Thread-136553] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:26:20.594 [DEBUG] [Thread-136553] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:26:20.594 [DEBUG] [Thread-136553] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:26:20.594 [DEBUG] [Thread-136553] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:26:20.594 [DEBUG] [Thread-136553] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:26:20.594 [DEBUG] [Thread-136553] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:26:20.594 [DEBUG] [Thread-136553] [transport.py] [_log()] client lang: <none>
2025-12-31T23:26:20.594 [DEBUG] [Thread-136553] [transport.py] [_log()] server lang: <none>
2025-12-31T23:26:20.594 [DEBUG] [Thread-136553] [transport.py] [_log()] kex follows: False
2025-12-31T23:26:20.594 [DEBUG] [Thread-136553] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:26:20.594 [DEBUG] [Thread-136553] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:26:20.594 [DEBUG] [Thread-136553] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:26:20.594 [DEBUG] [Thread-136553] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:26:20.595 [DEBUG] [Thread-136553] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:26:20.595 [DEBUG] [Thread-136553] [transport.py] [_log()] Compression: none
2025-12-31T23:26:20.595 [DEBUG] [Thread-136553] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:26:20.612 [DEBUG] [Thread-136553] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:26:20.613 [DEBUG] [Thread-136553] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:26:20.613 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T23:26:20.613 [DEBUG] [Thread-136553] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T23:26:20.614 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:26:20.615 [DEBUG] [Thread-136553] [transport.py] [_log()] userauth is OK
2025-12-31T23:26:20.615 [DEBUG] [Thread-136553] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:26:20.615 [DEBUG] [Thread-136553] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:26:20.615 [DEBUG] [Thread-136553] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T23:26:20.615 [DEBUG] [Thread-136553] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:26:20.650 [INFO] [Thread-136553] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:26:20.650 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:26:21.295 [DEBUG] [Thread-136553] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:26:21.295 [DEBUG] [Thread-136553] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:26:21.296 [DEBUG] [Thread-136553] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T23:26:21.336 [DEBUG] [Thread-136553] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:26:21.336 [DEBUG] [Thread-136553] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:26:21.339 [DEBUG] [Thread-136553] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:26:21.350 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:26:21.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T23:26:21.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T23:26:21.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T23:26:21.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:26:21.360 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T23:26:21.360 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:26:21.360 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:26:21.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T23:26:21.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.892843 -999.00  +15.10  18.37     78  +11.40 1 1 1 1 1     0    0 3.53 -14.55 ZNESW 14.4 18.4 177.0 20.2 16.2 -20.1 16.0 -19.8 15.9 -18.5 16.2 -19.4
2025-12-31T23:26:21.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T23:26:21.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T23:26:21.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.892843
2025-12-31T23:26:21.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T23:26:21.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T23:26:21.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T23:26:21.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T23:26:21.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T23:26:21.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T23:25:57', tmtdew=4.25, humidity=75.7, cloud=0.0, wind=19.87, temperature=15.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T23:25:57', seeing=0.81, atlas_timestamp='2025-12-31T21:25:41.635', atlas_cloud=1, atlas_rain=1, zp_data=[0.06824999999999903, 0.012250000000001648, 0.08025000000000126, 0.0495000000000001, 0.06949999999999967, 0.2142500000000016, 0.21999999999999886, 0.17275000000000063, 0.07449999999999868, 0.07000000000000028, 0.12725000000000009, 0.17099999999999937, 0.1980000000000004, 0.2732499999999991, 0.1120000000000001, 0.009999999999999787, 0.06225000000000058, 0.11549999999999905, 0.07199999999999918, 0.21774999999999878, 0.1479999999999979, 0.07974999999999888, 0.05525000000000091, 0.2872500000000002, 0.118999999999998, 0.11900000000000155, 0.23024999999999984, 0.4510000000000005, 0.2450000000000001, -0.3439999999999994, -0.8889999999999993, 0.4400000000000004, 0.1817499999999992], zp_timestamp='2025-12-31T21:23:00')
2025-12-31T23:26:21.362 [DEBUG] [Thread-136553] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:26:21.447 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T23:26:21.459 [DEBUG] [Thread-136556] [transport.py] [_log()] starting thread (client mode): 0xb6b61d50
2025-12-31T23:26:21.459 [DEBUG] [Thread-136556] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:26:21.479 [DEBUG] [Thread-136556] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T23:26:21.479 [INFO] [Thread-136556] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T23:26:21.487 [DEBUG] [Thread-136556] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:26:21.487 [DEBUG] [Thread-136556] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T23:26:21.487 [DEBUG] [Thread-136556] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:26:21.487 [DEBUG] [Thread-136556] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:26:21.487 [DEBUG] [Thread-136556] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:26:21.487 [DEBUG] [Thread-136556] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:26:21.487 [DEBUG] [Thread-136556] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:26:21.487 [DEBUG] [Thread-136556] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:26:21.487 [DEBUG] [Thread-136556] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:26:21.487 [DEBUG] [Thread-136556] [transport.py] [_log()] client lang: <none>
2025-12-31T23:26:21.487 [DEBUG] [Thread-136556] [transport.py] [_log()] server lang: <none>
2025-12-31T23:26:21.487 [DEBUG] [Thread-136556] [transport.py] [_log()] kex follows: False
2025-12-31T23:26:21.487 [DEBUG] [Thread-136556] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:26:21.487 [DEBUG] [Thread-136556] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:26:21.488 [DEBUG] [Thread-136556] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:26:21.488 [DEBUG] [Thread-136556] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:26:21.488 [DEBUG] [Thread-136556] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:26:21.488 [DEBUG] [Thread-136556] [transport.py] [_log()] Compression: none
2025-12-31T23:26:21.488 [DEBUG] [Thread-136556] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:26:21.546 [DEBUG] [Thread-136556] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:26:21.547 [DEBUG] [Thread-136556] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:26:21.547 [DEBUG] [Thread-136556] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T23:26:21.547 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T23:26:21.548 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:26:21.604 [DEBUG] [Thread-136556] [transport.py] [_log()] userauth is OK
2025-12-31T23:26:21.604 [DEBUG] [Thread-136556] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:26:21.604 [DEBUG] [Thread-136556] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:26:21.604 [DEBUG] [Thread-136556] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T23:26:21.604 [DEBUG] [Thread-136556] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:26:21.625 [INFO] [Thread-136556] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:26:21.626 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T23:26:21.626 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:26:22.458 [DEBUG] [Thread-136556] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:26:22.458 [DEBUG] [Thread-136556] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:26:22.507 [DEBUG] [Thread-136556] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:26:22.507 [DEBUG] [Thread-136556] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:26:22.518 [DEBUG] [Thread-136556] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:26:22.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:26:22.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T23:26:22.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T23:26:22.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:26:22.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:26:22.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:26:22.559 [DEBUG] [Thread-136556] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:26:25.831 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:26:25.832 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:26:28.816 [DEBUG] [Thread-136558 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:26:43.876 [DEBUG] [Thread-136559 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:26:52.070 [DEBUG] [Thread-136560 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:26:52.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T23:26:52.576 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T23:26:52.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T23:26:53.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 23, 26, 29), 4.25, 75.73, 0.0, 21.0, 15.06, 0, 0, 0, 2, 0, 0),)
2025-12-31T23:26:53.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 23:26:29
2025-12-31T23:26:53.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T23:26:53.626 [DEBUG] [Thread-136561] [transport.py] [_log()] starting thread (client mode): 0xb6b614e0
2025-12-31T23:26:53.626 [DEBUG] [Thread-136561] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:26:53.646 [DEBUG] [Thread-136561] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T23:26:53.646 [INFO] [Thread-136561] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T23:26:53.648 [DEBUG] [Thread-136561] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:26:53.648 [DEBUG] [Thread-136561] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T23:26:53.648 [DEBUG] [Thread-136561] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:26:53.648 [DEBUG] [Thread-136561] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:26:53.648 [DEBUG] [Thread-136561] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:26:53.648 [DEBUG] [Thread-136561] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:26:53.648 [DEBUG] [Thread-136561] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:26:53.648 [DEBUG] [Thread-136561] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:26:53.648 [DEBUG] [Thread-136561] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:26:53.648 [DEBUG] [Thread-136561] [transport.py] [_log()] client lang: <none>
2025-12-31T23:26:53.648 [DEBUG] [Thread-136561] [transport.py] [_log()] server lang: <none>
2025-12-31T23:26:53.648 [DEBUG] [Thread-136561] [transport.py] [_log()] kex follows: False
2025-12-31T23:26:53.648 [DEBUG] [Thread-136561] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:26:53.648 [DEBUG] [Thread-136561] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:26:53.648 [DEBUG] [Thread-136561] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:26:53.648 [DEBUG] [Thread-136561] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:26:53.648 [DEBUG] [Thread-136561] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:26:53.648 [DEBUG] [Thread-136561] [transport.py] [_log()] Compression: none
2025-12-31T23:26:53.648 [DEBUG] [Thread-136561] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:26:53.666 [DEBUG] [Thread-136561] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:26:53.666 [DEBUG] [Thread-136561] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:26:53.666 [DEBUG] [Thread-136561] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T23:26:53.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T23:26:53.667 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:26:53.667 [DEBUG] [Thread-136561] [transport.py] [_log()] userauth is OK
2025-12-31T23:26:53.667 [DEBUG] [Thread-136561] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:26:53.667 [DEBUG] [Thread-136561] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:26:53.667 [DEBUG] [Thread-136561] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T23:26:53.667 [DEBUG] [Thread-136561] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:26:53.680 [INFO] [Thread-136561] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:26:53.680 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:26:54.441 [DEBUG] [Thread-136561] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:26:54.441 [DEBUG] [Thread-136561] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:26:54.441 [DEBUG] [Thread-136561] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T23:26:54.482 [DEBUG] [Thread-136561] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:26:54.482 [DEBUG] [Thread-136561] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:26:54.484 [DEBUG] [Thread-136561] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:26:54.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:26:54.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T23:26:54.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T23:26:54.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T23:26:54.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:26:54.502 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T23:26:54.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:26:54.502 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:26:54.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T23:26:54.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.893191 -999.00  +15.10  11.06     78  +11.40 1 1 1 1 1     0    0 3.57 -14.65 ZNESW 13.2 11.1 187.6 17.2 16.2 -20.2 16.1 -20.0 15.9 -18.4 16.2 -19.5
2025-12-31T23:26:54.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T23:26:54.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T23:26:54.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.893191
2025-12-31T23:26:54.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T23:26:54.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T23:26:54.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T23:26:54.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T23:26:54.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T23:26:54.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T23:26:29', tmtdew=4.25, humidity=75.73, cloud=0.0, wind=21.0, temperature=15.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T23:26:29', seeing=0.87, atlas_timestamp='2025-12-31T21:26:11.702', atlas_cloud=1, atlas_rain=1, zp_data=[0.06824999999999903, 0.012250000000001648, 0.08025000000000126, 0.0495000000000001, 0.06949999999999967, 0.2142500000000016, 0.21999999999999886, 0.17275000000000063, 0.07449999999999868, 0.07000000000000028, 0.12725000000000009, 0.17099999999999937, 0.1980000000000004, 0.2732499999999991, 0.1120000000000001, 0.009999999999999787, 0.06225000000000058, 0.11549999999999905, 0.07199999999999918, 0.21774999999999878, 0.1479999999999979, 0.07974999999999888, 0.05525000000000091, 0.2872500000000002, 0.118999999999998, 0.11900000000000155, 0.23024999999999984, 0.4510000000000005, 0.2450000000000001, -0.3439999999999994, -0.8889999999999993, 0.4400000000000004, 0.1817499999999992], zp_timestamp='2025-12-31T21:23:00')
2025-12-31T23:26:54.503 [DEBUG] [Thread-136561] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:26:54.579 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T23:26:54.592 [DEBUG] [Thread-136564] [transport.py] [_log()] starting thread (client mode): 0xb6b63f70
2025-12-31T23:26:54.592 [DEBUG] [Thread-136564] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:26:54.607 [DEBUG] [Thread-136564] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T23:26:54.607 [INFO] [Thread-136564] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T23:26:54.615 [DEBUG] [Thread-136564] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:26:54.615 [DEBUG] [Thread-136564] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T23:26:54.615 [DEBUG] [Thread-136564] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:26:54.616 [DEBUG] [Thread-136564] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:26:54.616 [DEBUG] [Thread-136564] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:26:54.616 [DEBUG] [Thread-136564] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:26:54.616 [DEBUG] [Thread-136564] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:26:54.616 [DEBUG] [Thread-136564] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:26:54.616 [DEBUG] [Thread-136564] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:26:54.616 [DEBUG] [Thread-136564] [transport.py] [_log()] client lang: <none>
2025-12-31T23:26:54.616 [DEBUG] [Thread-136564] [transport.py] [_log()] server lang: <none>
2025-12-31T23:26:54.616 [DEBUG] [Thread-136564] [transport.py] [_log()] kex follows: False
2025-12-31T23:26:54.616 [DEBUG] [Thread-136564] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:26:54.616 [DEBUG] [Thread-136564] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:26:54.616 [DEBUG] [Thread-136564] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:26:54.616 [DEBUG] [Thread-136564] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:26:54.616 [DEBUG] [Thread-136564] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:26:54.616 [DEBUG] [Thread-136564] [transport.py] [_log()] Compression: none
2025-12-31T23:26:54.616 [DEBUG] [Thread-136564] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:26:54.674 [DEBUG] [Thread-136564] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:26:54.674 [DEBUG] [Thread-136564] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:26:54.675 [DEBUG] [Thread-136564] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T23:26:54.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T23:26:54.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:26:54.731 [DEBUG] [Thread-136564] [transport.py] [_log()] userauth is OK
2025-12-31T23:26:54.731 [DEBUG] [Thread-136564] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:26:54.731 [DEBUG] [Thread-136564] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:26:54.731 [DEBUG] [Thread-136564] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T23:26:54.731 [DEBUG] [Thread-136564] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:26:54.745 [INFO] [Thread-136564] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:26:54.745 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T23:26:54.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:26:55.613 [DEBUG] [Thread-136564] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:26:55.613 [DEBUG] [Thread-136564] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:26:55.660 [DEBUG] [Thread-136564] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:26:55.660 [DEBUG] [Thread-136564] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:26:55.669 [DEBUG] [Thread-136564] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:26:55.676 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:26:55.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T23:26:55.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T23:26:55.692 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:26:55.692 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:26:55.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:26:55.700 [DEBUG] [Thread-136564] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:26:58.908 [DEBUG] [Thread-136566 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:27:13.956 [DEBUG] [Thread-136567 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:27:25.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T23:27:25.722 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T23:27:25.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T23:27:26.034 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:27:26.034 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:27:26.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 23, 27, 1), 4.26, 75.67, 0.0, 20.68, 15.03, 0, 0, 0, 2, 0, 0),)
2025-12-31T23:27:26.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 23:27:01
2025-12-31T23:27:26.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T23:27:26.718 [DEBUG] [Thread-136568] [transport.py] [_log()] starting thread (client mode): 0xb1796080
2025-12-31T23:27:26.718 [DEBUG] [Thread-136568] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:27:26.738 [DEBUG] [Thread-136568] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T23:27:26.738 [INFO] [Thread-136568] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T23:27:26.741 [DEBUG] [Thread-136568] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:27:26.741 [DEBUG] [Thread-136568] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T23:27:26.742 [DEBUG] [Thread-136568] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:27:26.742 [DEBUG] [Thread-136568] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:27:26.742 [DEBUG] [Thread-136568] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:27:26.742 [DEBUG] [Thread-136568] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:27:26.742 [DEBUG] [Thread-136568] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:27:26.742 [DEBUG] [Thread-136568] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:27:26.742 [DEBUG] [Thread-136568] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:27:26.742 [DEBUG] [Thread-136568] [transport.py] [_log()] client lang: <none>
2025-12-31T23:27:26.742 [DEBUG] [Thread-136568] [transport.py] [_log()] server lang: <none>
2025-12-31T23:27:26.742 [DEBUG] [Thread-136568] [transport.py] [_log()] kex follows: False
2025-12-31T23:27:26.742 [DEBUG] [Thread-136568] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:27:26.742 [DEBUG] [Thread-136568] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:27:26.742 [DEBUG] [Thread-136568] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:27:26.742 [DEBUG] [Thread-136568] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:27:26.743 [DEBUG] [Thread-136568] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:27:26.743 [DEBUG] [Thread-136568] [transport.py] [_log()] Compression: none
2025-12-31T23:27:26.743 [DEBUG] [Thread-136568] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:27:26.756 [DEBUG] [Thread-136568] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:27:26.757 [DEBUG] [Thread-136568] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:27:26.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T23:27:26.759 [DEBUG] [Thread-136568] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T23:27:26.760 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:27:26.761 [DEBUG] [Thread-136568] [transport.py] [_log()] userauth is OK
2025-12-31T23:27:26.762 [DEBUG] [Thread-136568] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:27:26.762 [DEBUG] [Thread-136568] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:27:26.762 [DEBUG] [Thread-136568] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T23:27:26.762 [DEBUG] [Thread-136568] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:27:26.787 [INFO] [Thread-136568] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:27:26.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:27:27.449 [DEBUG] [Thread-136568] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:27:27.449 [DEBUG] [Thread-136568] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:27:27.450 [DEBUG] [Thread-136568] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T23:27:27.490 [DEBUG] [Thread-136568] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:27:27.490 [DEBUG] [Thread-136568] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:27:27.494 [DEBUG] [Thread-136568] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:27:27.507 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:27:27.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T23:27:27.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T23:27:27.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T23:27:27.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:27:27.518 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T23:27:27.518 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:27:27.518 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:27:27.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T23:27:27.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.893538 -999.00  +15.10  10.22     78  +11.40 1 1 1 1 1     0    0 3.41 -16.21 ZNESW 11.2 10.2 196.6 16.9 16.1 -20.2 16.1 -19.9 15.8 -18.4 16.1 -19.5
2025-12-31T23:27:27.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T23:27:27.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T23:27:27.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.893538
2025-12-31T23:27:27.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T23:27:27.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T23:27:27.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T23:27:27.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T23:27:27.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T23:27:27.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T23:27:01', tmtdew=4.26, humidity=75.67, cloud=0.0, wind=20.68, temperature=15.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T23:27:01', seeing=0.87, atlas_timestamp='2025-12-31T21:26:41.683', atlas_cloud=1, atlas_rain=1, zp_data=[0.0547500000000003, 0.09625000000000128, 0.17125000000000057, 0.007499999999998508, 0.07349999999999923, 0.035250000000001336, 0.09999999999999964, 0.12225000000000108, 0.11749999999999972, 0.1855000000000011, 0.15625, 0.1379999999999999, 0.22799999999999976, 0.2632499999999993, -0.07399999999999984, -0.025000000000000355, 0.07124999999999915, 0.3414999999999999, 0.45199999999999996, 0.10874999999999879, 0.21099999999999852, 0.25324999999999775, -0.029749999999999943, 0.18825000000000003, 0.11249999999999893, 0.23799999999999955, 0.3637499999999996, 0.12950000000000017, 0.30900000000000016, -0.24099999999999966, -0.33199999999999896, 0.3280000000000012, 0.19125000000000014], zp_timestamp='2025-12-31T21:25:00')
2025-12-31T23:27:27.521 [DEBUG] [Thread-136568] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:27:27.604 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T23:27:27.615 [DEBUG] [Thread-136571] [transport.py] [_log()] starting thread (client mode): 0xb6b61450
2025-12-31T23:27:27.615 [DEBUG] [Thread-136571] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:27:27.630 [DEBUG] [Thread-136571] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T23:27:27.630 [INFO] [Thread-136571] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T23:27:27.638 [DEBUG] [Thread-136571] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:27:27.638 [DEBUG] [Thread-136571] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T23:27:27.638 [DEBUG] [Thread-136571] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:27:27.638 [DEBUG] [Thread-136571] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:27:27.638 [DEBUG] [Thread-136571] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:27:27.638 [DEBUG] [Thread-136571] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:27:27.638 [DEBUG] [Thread-136571] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:27:27.638 [DEBUG] [Thread-136571] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:27:27.638 [DEBUG] [Thread-136571] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:27:27.638 [DEBUG] [Thread-136571] [transport.py] [_log()] client lang: <none>
2025-12-31T23:27:27.638 [DEBUG] [Thread-136571] [transport.py] [_log()] server lang: <none>
2025-12-31T23:27:27.638 [DEBUG] [Thread-136571] [transport.py] [_log()] kex follows: False
2025-12-31T23:27:27.638 [DEBUG] [Thread-136571] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:27:27.638 [DEBUG] [Thread-136571] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:27:27.638 [DEBUG] [Thread-136571] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:27:27.638 [DEBUG] [Thread-136571] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:27:27.639 [DEBUG] [Thread-136571] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:27:27.639 [DEBUG] [Thread-136571] [transport.py] [_log()] Compression: none
2025-12-31T23:27:27.639 [DEBUG] [Thread-136571] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:27:27.699 [DEBUG] [Thread-136571] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:27:27.700 [DEBUG] [Thread-136571] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:27:27.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T23:27:27.701 [DEBUG] [Thread-136571] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T23:27:27.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:27:27.756 [DEBUG] [Thread-136571] [transport.py] [_log()] userauth is OK
2025-12-31T23:27:27.756 [DEBUG] [Thread-136571] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:27:27.756 [DEBUG] [Thread-136571] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:27:27.756 [DEBUG] [Thread-136571] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T23:27:27.756 [DEBUG] [Thread-136571] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:27:27.775 [INFO] [Thread-136571] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:27:27.776 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T23:27:27.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:27:28.627 [DEBUG] [Thread-136571] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:27:28.628 [DEBUG] [Thread-136571] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:27:28.676 [DEBUG] [Thread-136571] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:27:28.676 [DEBUG] [Thread-136571] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:27:28.685 [DEBUG] [Thread-136571] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:27:28.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:27:28.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T23:27:28.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T23:27:28.711 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:27:28.711 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:27:28.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:27:28.719 [DEBUG] [Thread-136571] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:27:28.992 [DEBUG] [Thread-136573 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:27:44.040 [DEBUG] [Thread-136574 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:27:52.128 [DEBUG] [Thread-136575 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:27:58.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T23:27:58.717 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T23:27:58.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-12-31T23:27:59.074 [DEBUG] [Thread-136576 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:27:59.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 23, 27, 33), 4.29, 75.5, 0.0, 22.19, 15.26, 0, 0, 0, 2, 0, 0),)
2025-12-31T23:27:59.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 23:27:33
2025-12-31T23:27:59.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T23:27:59.697 [DEBUG] [Thread-136577] [transport.py] [_log()] starting thread (client mode): 0xb17975e0
2025-12-31T23:27:59.697 [DEBUG] [Thread-136577] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:27:59.717 [DEBUG] [Thread-136577] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T23:27:59.718 [INFO] [Thread-136577] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T23:27:59.720 [DEBUG] [Thread-136577] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:27:59.721 [DEBUG] [Thread-136577] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T23:27:59.721 [DEBUG] [Thread-136577] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:27:59.721 [DEBUG] [Thread-136577] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:27:59.721 [DEBUG] [Thread-136577] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:27:59.721 [DEBUG] [Thread-136577] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:27:59.721 [DEBUG] [Thread-136577] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:27:59.721 [DEBUG] [Thread-136577] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:27:59.721 [DEBUG] [Thread-136577] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:27:59.721 [DEBUG] [Thread-136577] [transport.py] [_log()] client lang: <none>
2025-12-31T23:27:59.721 [DEBUG] [Thread-136577] [transport.py] [_log()] server lang: <none>
2025-12-31T23:27:59.721 [DEBUG] [Thread-136577] [transport.py] [_log()] kex follows: False
2025-12-31T23:27:59.721 [DEBUG] [Thread-136577] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:27:59.721 [DEBUG] [Thread-136577] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:27:59.721 [DEBUG] [Thread-136577] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:27:59.721 [DEBUG] [Thread-136577] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:27:59.721 [DEBUG] [Thread-136577] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:27:59.721 [DEBUG] [Thread-136577] [transport.py] [_log()] Compression: none
2025-12-31T23:27:59.721 [DEBUG] [Thread-136577] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:27:59.738 [DEBUG] [Thread-136577] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:27:59.739 [DEBUG] [Thread-136577] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:27:59.739 [DEBUG] [Thread-136577] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T23:27:59.739 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T23:27:59.740 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:27:59.741 [DEBUG] [Thread-136577] [transport.py] [_log()] userauth is OK
2025-12-31T23:27:59.741 [DEBUG] [Thread-136577] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:27:59.741 [DEBUG] [Thread-136577] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:27:59.741 [DEBUG] [Thread-136577] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T23:27:59.742 [DEBUG] [Thread-136577] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:27:59.766 [INFO] [Thread-136577] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:27:59.766 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:28:00.431 [DEBUG] [Thread-136577] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:28:00.431 [DEBUG] [Thread-136577] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:28:00.432 [DEBUG] [Thread-136577] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T23:28:00.472 [DEBUG] [Thread-136577] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:28:00.472 [DEBUG] [Thread-136577] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:28:00.475 [DEBUG] [Thread-136577] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:28:00.490 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:28:00.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T23:28:00.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T23:28:00.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T23:28:00.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:28:00.502 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T23:28:00.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:28:00.502 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:28:00.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T23:28:00.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.894233 -999.00  +15.10  12.22     78  +11.40 1 1 1 1 1     0    0 3.39 -16.82 ZNESW 13.8 12.2 179.6 15.5 16.2 -20.1 16.0 -19.6 15.9 -18.2 16.1 -19.1
2025-12-31T23:28:00.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T23:28:00.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T23:28:00.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.894233
2025-12-31T23:28:00.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T23:28:00.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T23:28:00.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T23:28:00.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T23:28:00.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T23:28:00.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T23:27:33', tmtdew=4.29, humidity=75.5, cloud=0.0, wind=22.19, temperature=15.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T23:27:33', seeing=0.82, atlas_timestamp='2025-12-31T21:27:41.731', atlas_cloud=1, atlas_rain=1, zp_data=[0.0547500000000003, 0.09625000000000128, 0.17125000000000057, 0.007499999999998508, 0.07349999999999923, 0.035250000000001336, 0.09999999999999964, 0.12225000000000108, 0.11749999999999972, 0.1855000000000011, 0.15625, 0.1379999999999999, 0.22799999999999976, 0.2632499999999993, -0.07399999999999984, -0.025000000000000355, 0.07124999999999915, 0.3414999999999999, 0.45199999999999996, 0.10874999999999879, 0.21099999999999852, 0.25324999999999775, -0.029749999999999943, 0.18825000000000003, 0.11249999999999893, 0.23799999999999955, 0.3637499999999996, 0.12950000000000017, 0.30900000000000016, -0.24099999999999966, -0.33199999999999896, 0.3280000000000012, 0.19125000000000014], zp_timestamp='2025-12-31T21:25:00')
2025-12-31T23:28:00.505 [DEBUG] [Thread-136577] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:28:00.601 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T23:28:00.614 [DEBUG] [Thread-136580] [transport.py] [_log()] starting thread (client mode): 0xb95f2dd0
2025-12-31T23:28:00.614 [DEBUG] [Thread-136580] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:28:00.629 [DEBUG] [Thread-136580] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T23:28:00.629 [INFO] [Thread-136580] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T23:28:00.637 [DEBUG] [Thread-136580] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:28:00.637 [DEBUG] [Thread-136580] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T23:28:00.637 [DEBUG] [Thread-136580] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:28:00.637 [DEBUG] [Thread-136580] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:28:00.638 [DEBUG] [Thread-136580] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:28:00.638 [DEBUG] [Thread-136580] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:28:00.638 [DEBUG] [Thread-136580] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:28:00.638 [DEBUG] [Thread-136580] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:28:00.638 [DEBUG] [Thread-136580] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:28:00.638 [DEBUG] [Thread-136580] [transport.py] [_log()] client lang: <none>
2025-12-31T23:28:00.638 [DEBUG] [Thread-136580] [transport.py] [_log()] server lang: <none>
2025-12-31T23:28:00.638 [DEBUG] [Thread-136580] [transport.py] [_log()] kex follows: False
2025-12-31T23:28:00.638 [DEBUG] [Thread-136580] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:28:00.639 [DEBUG] [Thread-136580] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:28:00.639 [DEBUG] [Thread-136580] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:28:00.639 [DEBUG] [Thread-136580] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:28:00.639 [DEBUG] [Thread-136580] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:28:00.639 [DEBUG] [Thread-136580] [transport.py] [_log()] Compression: none
2025-12-31T23:28:00.639 [DEBUG] [Thread-136580] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:28:00.696 [DEBUG] [Thread-136580] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:28:00.696 [DEBUG] [Thread-136580] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:28:00.696 [DEBUG] [Thread-136580] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T23:28:00.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T23:28:00.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:28:00.752 [DEBUG] [Thread-136580] [transport.py] [_log()] userauth is OK
2025-12-31T23:28:00.752 [DEBUG] [Thread-136580] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:28:00.752 [DEBUG] [Thread-136580] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:28:00.752 [DEBUG] [Thread-136580] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T23:28:00.753 [DEBUG] [Thread-136580] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:28:00.778 [INFO] [Thread-136580] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:28:00.778 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T23:28:00.779 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:28:01.659 [DEBUG] [Thread-136580] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:28:01.659 [DEBUG] [Thread-136580] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:28:01.707 [DEBUG] [Thread-136580] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:28:01.707 [DEBUG] [Thread-136580] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:28:01.716 [DEBUG] [Thread-136580] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:28:01.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:28:01.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T23:28:01.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T23:28:01.744 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:28:01.744 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:28:01.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:28:01.753 [DEBUG] [Thread-136580] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:28:14.102 [DEBUG] [Thread-136582 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:28:26.233 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:28:26.234 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:28:29.140 [DEBUG] [Thread-136583 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:28:31.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T23:28:31.746 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T23:28:31.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T23:28:32.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 23, 28, 6), 4.2, 76.22, 0.0, 22.11, 14.98, 0, 0, 0, 2, 0, 0),)
2025-12-31T23:28:32.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 23:28:06
2025-12-31T23:28:32.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T23:28:32.741 [DEBUG] [Thread-136584] [transport.py] [_log()] starting thread (client mode): 0xb95f14b0
2025-12-31T23:28:32.741 [DEBUG] [Thread-136584] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:28:32.762 [DEBUG] [Thread-136584] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T23:28:32.762 [INFO] [Thread-136584] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T23:28:32.765 [DEBUG] [Thread-136584] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:28:32.765 [DEBUG] [Thread-136584] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T23:28:32.765 [DEBUG] [Thread-136584] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:28:32.765 [DEBUG] [Thread-136584] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:28:32.765 [DEBUG] [Thread-136584] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:28:32.765 [DEBUG] [Thread-136584] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:28:32.766 [DEBUG] [Thread-136584] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:28:32.766 [DEBUG] [Thread-136584] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:28:32.766 [DEBUG] [Thread-136584] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:28:32.766 [DEBUG] [Thread-136584] [transport.py] [_log()] client lang: <none>
2025-12-31T23:28:32.766 [DEBUG] [Thread-136584] [transport.py] [_log()] server lang: <none>
2025-12-31T23:28:32.766 [DEBUG] [Thread-136584] [transport.py] [_log()] kex follows: False
2025-12-31T23:28:32.766 [DEBUG] [Thread-136584] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:28:32.766 [DEBUG] [Thread-136584] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:28:32.766 [DEBUG] [Thread-136584] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:28:32.766 [DEBUG] [Thread-136584] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:28:32.766 [DEBUG] [Thread-136584] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:28:32.766 [DEBUG] [Thread-136584] [transport.py] [_log()] Compression: none
2025-12-31T23:28:32.766 [DEBUG] [Thread-136584] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:28:32.785 [DEBUG] [Thread-136584] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:28:32.786 [DEBUG] [Thread-136584] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:28:32.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T23:28:32.786 [DEBUG] [Thread-136584] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T23:28:32.787 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:28:32.788 [DEBUG] [Thread-136584] [transport.py] [_log()] userauth is OK
2025-12-31T23:28:32.788 [DEBUG] [Thread-136584] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:28:32.788 [DEBUG] [Thread-136584] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:28:32.788 [DEBUG] [Thread-136584] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T23:28:32.788 [DEBUG] [Thread-136584] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:28:32.824 [INFO] [Thread-136584] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:28:32.824 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:28:33.485 [DEBUG] [Thread-136584] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:28:33.485 [DEBUG] [Thread-136584] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:28:33.486 [DEBUG] [Thread-136584] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T23:28:33.526 [DEBUG] [Thread-136584] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:28:33.526 [DEBUG] [Thread-136584] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:28:33.529 [DEBUG] [Thread-136584] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:28:33.540 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:28:33.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T23:28:33.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T23:28:33.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T23:28:33.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:28:33.550 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T23:28:33.550 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:28:33.551 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:28:33.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T23:28:33.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.894580 -999.00  +15.10  11.27     78  +11.40 1 1 1 1 1     0    0 3.48 -16.82 ZNESW 11.9 11.3 178.8 16.5 16.2 -20.1 15.9 -19.7 15.8 -18.0 16.2 -19.1
2025-12-31T23:28:33.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T23:28:33.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T23:28:33.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.894580
2025-12-31T23:28:33.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T23:28:33.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T23:28:33.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T23:28:33.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T23:28:33.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T23:28:33.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T23:28:06', tmtdew=4.2, humidity=76.22, cloud=0.0, wind=22.11, temperature=14.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T23:28:06', seeing=0.83, atlas_timestamp='2025-12-31T21:28:11.712', atlas_cloud=1, atlas_rain=1, zp_data=[0.0547500000000003, 0.09625000000000128, 0.17125000000000057, 0.007499999999998508, 0.07349999999999923, 0.035250000000001336, 0.09999999999999964, 0.12225000000000108, 0.11749999999999972, 0.1855000000000011, 0.15625, 0.1379999999999999, 0.22799999999999976, 0.2632499999999993, -0.07399999999999984, -0.025000000000000355, 0.07124999999999915, 0.3414999999999999, 0.45199999999999996, 0.10874999999999879, 0.21099999999999852, 0.25324999999999775, -0.029749999999999943, 0.18825000000000003, 0.11249999999999893, 0.23799999999999955, 0.3637499999999996, 0.12950000000000017, 0.30900000000000016, -0.24099999999999966, -0.33199999999999896, 0.3280000000000012, 0.19125000000000014], zp_timestamp='2025-12-31T21:25:00')
2025-12-31T23:28:33.553 [DEBUG] [Thread-136584] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:28:33.641 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T23:28:33.651 [DEBUG] [Thread-136587] [transport.py] [_log()] starting thread (client mode): 0xb95f2500
2025-12-31T23:28:33.651 [DEBUG] [Thread-136587] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:28:33.666 [DEBUG] [Thread-136587] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T23:28:33.666 [INFO] [Thread-136587] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T23:28:33.673 [DEBUG] [Thread-136587] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:28:33.674 [DEBUG] [Thread-136587] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T23:28:33.674 [DEBUG] [Thread-136587] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:28:33.674 [DEBUG] [Thread-136587] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:28:33.674 [DEBUG] [Thread-136587] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:28:33.674 [DEBUG] [Thread-136587] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:28:33.674 [DEBUG] [Thread-136587] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:28:33.674 [DEBUG] [Thread-136587] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:28:33.674 [DEBUG] [Thread-136587] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:28:33.674 [DEBUG] [Thread-136587] [transport.py] [_log()] client lang: <none>
2025-12-31T23:28:33.675 [DEBUG] [Thread-136587] [transport.py] [_log()] server lang: <none>
2025-12-31T23:28:33.675 [DEBUG] [Thread-136587] [transport.py] [_log()] kex follows: False
2025-12-31T23:28:33.675 [DEBUG] [Thread-136587] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:28:33.675 [DEBUG] [Thread-136587] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:28:33.675 [DEBUG] [Thread-136587] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:28:33.675 [DEBUG] [Thread-136587] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:28:33.675 [DEBUG] [Thread-136587] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:28:33.675 [DEBUG] [Thread-136587] [transport.py] [_log()] Compression: none
2025-12-31T23:28:33.676 [DEBUG] [Thread-136587] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:28:33.730 [DEBUG] [Thread-136587] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:28:33.730 [DEBUG] [Thread-136587] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:28:33.730 [DEBUG] [Thread-136587] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T23:28:33.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T23:28:33.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:28:33.788 [DEBUG] [Thread-136587] [transport.py] [_log()] userauth is OK
2025-12-31T23:28:33.788 [DEBUG] [Thread-136587] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:28:33.788 [DEBUG] [Thread-136587] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:28:33.788 [DEBUG] [Thread-136587] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T23:28:33.788 [DEBUG] [Thread-136587] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:28:33.808 [INFO] [Thread-136587] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:28:33.808 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T23:28:33.808 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:28:34.626 [DEBUG] [Thread-136587] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:28:34.626 [DEBUG] [Thread-136587] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:28:34.674 [DEBUG] [Thread-136587] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:28:34.674 [DEBUG] [Thread-136587] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:28:34.684 [DEBUG] [Thread-136587] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:28:34.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:28:34.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T23:28:34.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T23:28:34.712 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:28:34.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:28:34.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:28:34.721 [DEBUG] [Thread-136587] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:28:44.172 [DEBUG] [Thread-136589 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:28:52.205 [DEBUG] [Thread-136590 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:28:59.220 [DEBUG] [Thread-136591 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:29:04.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T23:29:04.744 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T23:29:04.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T23:29:05.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 23, 28, 38), 4.19, 76.25, 0.0, 20.36, 14.98, 0, 0, 0, 2, 0, 0),)
2025-12-31T23:29:05.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 23:28:38
2025-12-31T23:29:05.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T23:29:05.724 [DEBUG] [Thread-136592] [transport.py] [_log()] starting thread (client mode): 0xb1797730
2025-12-31T23:29:05.724 [DEBUG] [Thread-136592] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:29:05.743 [DEBUG] [Thread-136592] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T23:29:05.744 [INFO] [Thread-136592] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T23:29:05.747 [DEBUG] [Thread-136592] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:29:05.747 [DEBUG] [Thread-136592] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T23:29:05.747 [DEBUG] [Thread-136592] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:29:05.747 [DEBUG] [Thread-136592] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:29:05.747 [DEBUG] [Thread-136592] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:29:05.747 [DEBUG] [Thread-136592] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:29:05.747 [DEBUG] [Thread-136592] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:29:05.747 [DEBUG] [Thread-136592] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:29:05.747 [DEBUG] [Thread-136592] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:29:05.748 [DEBUG] [Thread-136592] [transport.py] [_log()] client lang: <none>
2025-12-31T23:29:05.748 [DEBUG] [Thread-136592] [transport.py] [_log()] server lang: <none>
2025-12-31T23:29:05.748 [DEBUG] [Thread-136592] [transport.py] [_log()] kex follows: False
2025-12-31T23:29:05.748 [DEBUG] [Thread-136592] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:29:05.748 [DEBUG] [Thread-136592] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:29:05.748 [DEBUG] [Thread-136592] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:29:05.748 [DEBUG] [Thread-136592] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:29:05.748 [DEBUG] [Thread-136592] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:29:05.748 [DEBUG] [Thread-136592] [transport.py] [_log()] Compression: none
2025-12-31T23:29:05.748 [DEBUG] [Thread-136592] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:29:05.766 [DEBUG] [Thread-136592] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:29:05.766 [DEBUG] [Thread-136592] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:29:05.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T23:29:05.768 [DEBUG] [Thread-136592] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T23:29:05.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:29:05.770 [DEBUG] [Thread-136592] [transport.py] [_log()] userauth is OK
2025-12-31T23:29:05.770 [DEBUG] [Thread-136592] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:29:05.770 [DEBUG] [Thread-136592] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:29:05.770 [DEBUG] [Thread-136592] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T23:29:05.770 [DEBUG] [Thread-136592] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:29:05.793 [INFO] [Thread-136592] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:29:05.793 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:29:06.421 [DEBUG] [Thread-136592] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:29:06.422 [DEBUG] [Thread-136592] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:29:06.422 [DEBUG] [Thread-136592] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T23:29:06.463 [DEBUG] [Thread-136592] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:29:06.463 [DEBUG] [Thread-136592] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:29:06.467 [DEBUG] [Thread-136592] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:29:06.480 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:29:06.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T23:29:06.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T23:29:06.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T23:29:06.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:29:06.493 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T23:29:06.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:29:06.493 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:29:06.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T23:29:06.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.894927 -999.00  +15.10  14.86     78  +11.40 1 1 1 1 1     0    0 3.36 -16.85 ZNESW 12.8 14.9 184.8 17.4 16.1 -20.0 16.0 -19.4 15.9 -18.3 16.1 -19.0
2025-12-31T23:29:06.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T23:29:06.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T23:29:06.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.894927
2025-12-31T23:29:06.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T23:29:06.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T23:29:06.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T23:29:06.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T23:29:06.495 [DEBUG] [Thread-136592] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:29:06.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T23:29:06.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T23:28:38', tmtdew=4.19, humidity=76.25, cloud=0.0, wind=20.36, temperature=14.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T23:28:38', seeing=0.83, atlas_timestamp='2025-12-31T21:28:41.693', atlas_cloud=1, atlas_rain=1, zp_data=[0.0547500000000003, 0.09625000000000128, 0.17125000000000057, 0.007499999999998508, 0.07349999999999923, 0.035250000000001336, 0.09999999999999964, 0.12225000000000108, 0.11749999999999972, 0.1855000000000011, 0.15625, 0.1379999999999999, 0.22799999999999976, 0.2632499999999993, -0.07399999999999984, -0.025000000000000355, 0.07124999999999915, 0.3414999999999999, 0.45199999999999996, 0.10874999999999879, 0.21099999999999852, 0.25324999999999775, -0.029749999999999943, 0.18825000000000003, 0.11249999999999893, 0.23799999999999955, 0.3637499999999996, 0.12950000000000017, 0.30900000000000016, -0.24099999999999966, -0.33199999999999896, 0.3280000000000012, 0.19125000000000014], zp_timestamp='2025-12-31T21:25:00')
2025-12-31T23:29:06.591 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T23:29:06.604 [DEBUG] [Thread-136595] [transport.py] [_log()] starting thread (client mode): 0xb1796bf0
2025-12-31T23:29:06.604 [DEBUG] [Thread-136595] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:29:06.622 [DEBUG] [Thread-136595] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T23:29:06.623 [INFO] [Thread-136595] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T23:29:06.630 [DEBUG] [Thread-136595] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:29:06.630 [DEBUG] [Thread-136595] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T23:29:06.631 [DEBUG] [Thread-136595] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:29:06.631 [DEBUG] [Thread-136595] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:29:06.631 [DEBUG] [Thread-136595] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:29:06.631 [DEBUG] [Thread-136595] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:29:06.631 [DEBUG] [Thread-136595] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:29:06.631 [DEBUG] [Thread-136595] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:29:06.631 [DEBUG] [Thread-136595] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:29:06.631 [DEBUG] [Thread-136595] [transport.py] [_log()] client lang: <none>
2025-12-31T23:29:06.631 [DEBUG] [Thread-136595] [transport.py] [_log()] server lang: <none>
2025-12-31T23:29:06.631 [DEBUG] [Thread-136595] [transport.py] [_log()] kex follows: False
2025-12-31T23:29:06.631 [DEBUG] [Thread-136595] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:29:06.631 [DEBUG] [Thread-136595] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:29:06.631 [DEBUG] [Thread-136595] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:29:06.631 [DEBUG] [Thread-136595] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:29:06.632 [DEBUG] [Thread-136595] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:29:06.632 [DEBUG] [Thread-136595] [transport.py] [_log()] Compression: none
2025-12-31T23:29:06.632 [DEBUG] [Thread-136595] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:29:06.692 [DEBUG] [Thread-136595] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:29:06.693 [DEBUG] [Thread-136595] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:29:06.693 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T23:29:06.694 [DEBUG] [Thread-136595] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T23:29:06.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:29:06.755 [DEBUG] [Thread-136595] [transport.py] [_log()] userauth is OK
2025-12-31T23:29:06.756 [DEBUG] [Thread-136595] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:29:06.756 [DEBUG] [Thread-136595] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:29:06.756 [DEBUG] [Thread-136595] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T23:29:06.756 [DEBUG] [Thread-136595] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:29:06.776 [INFO] [Thread-136595] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:29: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-12-31T23:29:06.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:29:07.706 [DEBUG] [Thread-136595] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:29:07.707 [DEBUG] [Thread-136595] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:29:07.755 [DEBUG] [Thread-136595] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:29:07.755 [DEBUG] [Thread-136595] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:29:07.764 [DEBUG] [Thread-136595] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:29:07.774 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:29:07.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T23:29:07.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T23:29:07.792 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:29:07.793 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:29:07.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:29:07.802 [DEBUG] [Thread-136595] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:29:14.257 [DEBUG] [Thread-136597 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:29:26.437 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:29:26.439 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:29:29.307 [DEBUG] [Thread-136598 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:29:37.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T23:29:37.824 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T23:29:37.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T23:29:38.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 23, 29, 10), 4.19, 76.28, 0.0, 20.96, 15.01, 0, 0, 0, 2, 0, 0),)
2025-12-31T23:29:38.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 23:29:10
2025-12-31T23:29:38.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T23:29:38.811 [DEBUG] [Thread-136599] [transport.py] [_log()] starting thread (client mode): 0xb17964a0
2025-12-31T23:29:38.811 [DEBUG] [Thread-136599] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:29:38.832 [DEBUG] [Thread-136599] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T23:29:38.832 [INFO] [Thread-136599] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T23:29:38.835 [DEBUG] [Thread-136599] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:29:38.835 [DEBUG] [Thread-136599] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T23:29:38.835 [DEBUG] [Thread-136599] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:29:38.835 [DEBUG] [Thread-136599] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:29:38.836 [DEBUG] [Thread-136599] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:29:38.836 [DEBUG] [Thread-136599] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:29:38.836 [DEBUG] [Thread-136599] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:29:38.836 [DEBUG] [Thread-136599] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:29:38.836 [DEBUG] [Thread-136599] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:29:38.836 [DEBUG] [Thread-136599] [transport.py] [_log()] client lang: <none>
2025-12-31T23:29:38.836 [DEBUG] [Thread-136599] [transport.py] [_log()] server lang: <none>
2025-12-31T23:29:38.836 [DEBUG] [Thread-136599] [transport.py] [_log()] kex follows: False
2025-12-31T23:29:38.836 [DEBUG] [Thread-136599] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:29:38.836 [DEBUG] [Thread-136599] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:29:38.836 [DEBUG] [Thread-136599] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:29:38.836 [DEBUG] [Thread-136599] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:29:38.836 [DEBUG] [Thread-136599] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:29:38.836 [DEBUG] [Thread-136599] [transport.py] [_log()] Compression: none
2025-12-31T23:29:38.836 [DEBUG] [Thread-136599] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:29:38.853 [DEBUG] [Thread-136599] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:29:38.854 [DEBUG] [Thread-136599] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:29:38.854 [DEBUG] [Thread-136599] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T23:29:38.854 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T23:29:38.855 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:29:38.856 [DEBUG] [Thread-136599] [transport.py] [_log()] userauth is OK
2025-12-31T23:29:38.856 [DEBUG] [Thread-136599] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:29:38.856 [DEBUG] [Thread-136599] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:29:38.856 [DEBUG] [Thread-136599] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T23:29:38.856 [DEBUG] [Thread-136599] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:29:38.892 [INFO] [Thread-136599] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:29:38.893 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:29:39.511 [DEBUG] [Thread-136599] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:29:39.511 [DEBUG] [Thread-136599] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:29:39.512 [DEBUG] [Thread-136599] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T23:29:39.552 [DEBUG] [Thread-136599] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:29:39.552 [DEBUG] [Thread-136599] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:29:39.554 [DEBUG] [Thread-136599] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:29:39.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:29:39.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T23:29:39.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T23:29:39.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T23:29:39.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:29:39.576 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T23:29:39.576 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:29:39.576 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:29:39.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T23:29:39.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.895274 -999.00  +15.10  18.45     78  +11.40 1 1 1 1 1     0    0 3.40 -18.00 ZNESW 14.4 18.4 176.2 19.2 16.1 -20.0 -999.0 -999.0 15.8 -18.2 16.1 -19.0
2025-12-31T23:29:39.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T23:29:39.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T23:29:39.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.895274
2025-12-31T23:29:39.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T23:29:39.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T23:29:39.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T23:29:39.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T23:29:39.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T23:29:39.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T23:29:10', tmtdew=4.19, humidity=76.28, cloud=0.0, wind=20.96, temperature=15.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T23:29:10', seeing=0.73, atlas_timestamp='2025-12-31T21:29:11.674', atlas_cloud=1, atlas_rain=1, zp_data=[0.0547500000000003, 0.09625000000000128, 0.17125000000000057, 0.007499999999998508, 0.07349999999999923, 0.035250000000001336, 0.09999999999999964, 0.12225000000000108, 0.11749999999999972, 0.1855000000000011, 0.15625, 0.1379999999999999, 0.22799999999999976, 0.2632499999999993, -0.07399999999999984, -0.025000000000000355, 0.07124999999999915, 0.3414999999999999, 0.45199999999999996, 0.10874999999999879, 0.21099999999999852, 0.25324999999999775, -0.029749999999999943, 0.18825000000000003, 0.11249999999999893, 0.23799999999999955, 0.3637499999999996, 0.12950000000000017, 0.30900000000000016, -0.24099999999999966, -0.33199999999999896, 0.3280000000000012, 0.19125000000000014], zp_timestamp='2025-12-31T21:25:00')
2025-12-31T23:29:39.577 [DEBUG] [Thread-136599] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:29:39.666 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T23:29:39.677 [DEBUG] [Thread-136602] [transport.py] [_log()] starting thread (client mode): 0xb1746530
2025-12-31T23:29:39.677 [DEBUG] [Thread-136602] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:29:39.693 [DEBUG] [Thread-136602] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T23:29:39.693 [INFO] [Thread-136602] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T23:29:39.700 [DEBUG] [Thread-136602] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:29:39.701 [DEBUG] [Thread-136602] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T23:29:39.701 [DEBUG] [Thread-136602] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:29:39.701 [DEBUG] [Thread-136602] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:29:39.701 [DEBUG] [Thread-136602] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:29:39.701 [DEBUG] [Thread-136602] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:29:39.701 [DEBUG] [Thread-136602] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:29:39.701 [DEBUG] [Thread-136602] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:29:39.701 [DEBUG] [Thread-136602] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:29:39.701 [DEBUG] [Thread-136602] [transport.py] [_log()] client lang: <none>
2025-12-31T23:29:39.701 [DEBUG] [Thread-136602] [transport.py] [_log()] server lang: <none>
2025-12-31T23:29:39.701 [DEBUG] [Thread-136602] [transport.py] [_log()] kex follows: False
2025-12-31T23:29:39.701 [DEBUG] [Thread-136602] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:29:39.701 [DEBUG] [Thread-136602] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:29:39.701 [DEBUG] [Thread-136602] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:29:39.701 [DEBUG] [Thread-136602] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:29:39.701 [DEBUG] [Thread-136602] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:29:39.701 [DEBUG] [Thread-136602] [transport.py] [_log()] Compression: none
2025-12-31T23:29:39.701 [DEBUG] [Thread-136602] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:29:39.759 [DEBUG] [Thread-136602] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:29:39.760 [DEBUG] [Thread-136602] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:29:39.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T23:29:39.761 [DEBUG] [Thread-136602] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T23:29:39.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:29:39.816 [DEBUG] [Thread-136602] [transport.py] [_log()] userauth is OK
2025-12-31T23:29:39.816 [DEBUG] [Thread-136602] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:29:39.816 [DEBUG] [Thread-136602] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:29:39.816 [DEBUG] [Thread-136602] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T23:29:39.816 [DEBUG] [Thread-136602] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:29:39.836 [INFO] [Thread-136602] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:29:39.836 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T23:29:39.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:29:40.655 [DEBUG] [Thread-136602] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:29:40.656 [DEBUG] [Thread-136602] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:29:40.704 [DEBUG] [Thread-136602] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:29:40.705 [DEBUG] [Thread-136602] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:29:40.714 [DEBUG] [Thread-136602] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:29:40.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:29:40.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T23:29:40.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T23:29:40.742 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:29:40.743 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:29:40.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:29:40.751 [DEBUG] [Thread-136602] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:29:44.335 [DEBUG] [Thread-136604 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:29:52.278 [DEBUG] [Thread-136605 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:29:59.383 [DEBUG] [Thread-136606 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:30:10.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T23:30:10.773 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T23:30:10.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T23:30:11.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 23, 29, 42), 4.19, 76.25, 0.0, 18.39, 14.93, 0, 0, 0, 2, 0, 0),)
2025-12-31T23:30:11.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 23:29:42
2025-12-31T23:30:11.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T23:30:11.809 [DEBUG] [Thread-136607] [transport.py] [_log()] starting thread (client mode): 0xb17454e0
2025-12-31T23:30:11.810 [DEBUG] [Thread-136607] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:30:11.831 [DEBUG] [Thread-136607] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T23:30:11.831 [INFO] [Thread-136607] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T23:30:11.834 [DEBUG] [Thread-136607] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:30:11.835 [DEBUG] [Thread-136607] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T23:30:11.835 [DEBUG] [Thread-136607] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:30:11.835 [DEBUG] [Thread-136607] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:30:11.835 [DEBUG] [Thread-136607] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:30:11.835 [DEBUG] [Thread-136607] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:30:11.835 [DEBUG] [Thread-136607] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:30:11.835 [DEBUG] [Thread-136607] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:30:11.835 [DEBUG] [Thread-136607] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:30:11.835 [DEBUG] [Thread-136607] [transport.py] [_log()] client lang: <none>
2025-12-31T23:30:11.835 [DEBUG] [Thread-136607] [transport.py] [_log()] server lang: <none>
2025-12-31T23:30:11.835 [DEBUG] [Thread-136607] [transport.py] [_log()] kex follows: False
2025-12-31T23:30:11.835 [DEBUG] [Thread-136607] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:30:11.835 [DEBUG] [Thread-136607] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:30:11.835 [DEBUG] [Thread-136607] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:30:11.835 [DEBUG] [Thread-136607] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:30:11.835 [DEBUG] [Thread-136607] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:30:11.835 [DEBUG] [Thread-136607] [transport.py] [_log()] Compression: none
2025-12-31T23:30:11.835 [DEBUG] [Thread-136607] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:30:11.852 [DEBUG] [Thread-136607] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:30:11.852 [DEBUG] [Thread-136607] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:30:11.852 [DEBUG] [Thread-136607] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T23:30:11.852 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T23:30:11.852 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:30:11.853 [DEBUG] [Thread-136607] [transport.py] [_log()] userauth is OK
2025-12-31T23:30:11.853 [DEBUG] [Thread-136607] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:30:11.853 [DEBUG] [Thread-136607] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:30:11.853 [DEBUG] [Thread-136607] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T23:30:11.853 [DEBUG] [Thread-136607] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:30:11.862 [INFO] [Thread-136607] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:30:11.862 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:30:13.478 [DEBUG] [Thread-136607] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:30:13.478 [DEBUG] [Thread-136607] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:30:13.479 [DEBUG] [Thread-136607] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T23:30:13.519 [DEBUG] [Thread-136607] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:30:13.519 [DEBUG] [Thread-136607] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:30:13.522 [DEBUG] [Thread-136607] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:30:13.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:30:13.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T23:30:13.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T23:30:13.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T23:30:13.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:30:13.559 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T23:30:13.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:30:13.559 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:30:13.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T23:30:13.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.895621 -999.00  +15.10  11.33     78  +11.40 1 1 1 1 1     0    0 3.38 -17.80 ZNESW 14.8 11.3 188.0 17.1 16.1 -20.0 15.9 -19.3 15.8 -18.1 16.1 -19.0
2025-12-31T23:30:13.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T23:30:13.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T23:30:13.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.895621
2025-12-31T23:30:13.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T23:30:13.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T23:30:13.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T23:30:13.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T23:30:13.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T23:30:13.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T23:29:42', tmtdew=4.19, humidity=76.25, cloud=0.0, wind=18.39, temperature=14.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T23:29:42', seeing=0.98, atlas_timestamp='2025-12-31T21:29:41.654', atlas_cloud=1, atlas_rain=1, zp_data=[0.0547500000000003, 0.09625000000000128, 0.17125000000000057, 0.007499999999998508, 0.07349999999999923, 0.035250000000001336, 0.09999999999999964, 0.12225000000000108, 0.11749999999999972, 0.1855000000000011, 0.15625, 0.1379999999999999, 0.22799999999999976, 0.2632499999999993, -0.07399999999999984, -0.025000000000000355, 0.07124999999999915, 0.3414999999999999, 0.45199999999999996, 0.10874999999999879, 0.21099999999999852, 0.25324999999999775, -0.029749999999999943, 0.18825000000000003, 0.11249999999999893, 0.23799999999999955, 0.3637499999999996, 0.12950000000000017, 0.30900000000000016, -0.24099999999999966, -0.33199999999999896, 0.3280000000000012, 0.19125000000000014], zp_timestamp='2025-12-31T21:28:00')
2025-12-31T23:30:13.562 [DEBUG] [Thread-136607] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:30:13.647 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T23:30:13.659 [DEBUG] [Thread-136610] [transport.py] [_log()] starting thread (client mode): 0xbbfcd150
2025-12-31T23:30:13.659 [DEBUG] [Thread-136610] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:30:13.674 [DEBUG] [Thread-136610] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T23:30:13.675 [INFO] [Thread-136610] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T23:30:13.682 [DEBUG] [Thread-136610] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:30:13.683 [DEBUG] [Thread-136610] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T23:30:13.683 [DEBUG] [Thread-136610] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:30:13.683 [DEBUG] [Thread-136610] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:30:13.683 [DEBUG] [Thread-136610] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:30:13.684 [DEBUG] [Thread-136610] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:30:13.684 [DEBUG] [Thread-136610] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:30:13.684 [DEBUG] [Thread-136610] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:30:13.684 [DEBUG] [Thread-136610] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:30:13.684 [DEBUG] [Thread-136610] [transport.py] [_log()] client lang: <none>
2025-12-31T23:30:13.684 [DEBUG] [Thread-136610] [transport.py] [_log()] server lang: <none>
2025-12-31T23:30:13.684 [DEBUG] [Thread-136610] [transport.py] [_log()] kex follows: False
2025-12-31T23:30:13.684 [DEBUG] [Thread-136610] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:30:13.684 [DEBUG] [Thread-136610] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:30:13.684 [DEBUG] [Thread-136610] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:30:13.684 [DEBUG] [Thread-136610] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:30:13.684 [DEBUG] [Thread-136610] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:30:13.684 [DEBUG] [Thread-136610] [transport.py] [_log()] Compression: none
2025-12-31T23:30:13.684 [DEBUG] [Thread-136610] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:30:13.740 [DEBUG] [Thread-136610] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:30:13.740 [DEBUG] [Thread-136610] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:30:13.741 [DEBUG] [Thread-136610] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T23:30:13.741 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T23:30:13.742 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:30:13.796 [DEBUG] [Thread-136610] [transport.py] [_log()] userauth is OK
2025-12-31T23:30:13.796 [DEBUG] [Thread-136610] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:30:13.796 [DEBUG] [Thread-136610] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:30:13.796 [DEBUG] [Thread-136610] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T23:30:13.797 [DEBUG] [Thread-136610] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:30:13.815 [INFO] [Thread-136610] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:30:13.815 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T23:30:13.816 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:30:14.413 [DEBUG] [Thread-136612 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:30:14.635 [DEBUG] [Thread-136610] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:30:14.635 [DEBUG] [Thread-136610] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:30:14.683 [DEBUG] [Thread-136610] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:30:14.683 [DEBUG] [Thread-136610] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:30:14.692 [DEBUG] [Thread-136610] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:30:14.700 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:30:14.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-12-31T23:30:14.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T23:30:14.716 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:30:14.716 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:30:14.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:30:14.724 [DEBUG] [Thread-136610] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:30:26.642 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:30:26.644 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:30:29.454 [DEBUG] [Thread-136613 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:30:44.487 [DEBUG] [Thread-136614 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:30:44.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T23:30:44.727 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T23:30:44.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T23:30:45.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 23, 30, 14), 4.19, 76.27, 0.0, 17.17, 14.98, 0, 0, 0, 2, 0, 0),)
2025-12-31T23:30:45.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 23:30:14
2025-12-31T23:30:45.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T23:30:45.768 [DEBUG] [Thread-136615] [transport.py] [_log()] starting thread (client mode): 0xb1746710
2025-12-31T23:30:45.768 [DEBUG] [Thread-136615] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:30:45.788 [DEBUG] [Thread-136615] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T23:30:45.788 [INFO] [Thread-136615] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T23:30:45.792 [DEBUG] [Thread-136615] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:30:45.792 [DEBUG] [Thread-136615] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T23:30:45.792 [DEBUG] [Thread-136615] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:30:45.792 [DEBUG] [Thread-136615] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:30:45.792 [DEBUG] [Thread-136615] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:30:45.792 [DEBUG] [Thread-136615] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:30:45.792 [DEBUG] [Thread-136615] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:30:45.792 [DEBUG] [Thread-136615] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:30:45.792 [DEBUG] [Thread-136615] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:30:45.792 [DEBUG] [Thread-136615] [transport.py] [_log()] client lang: <none>
2025-12-31T23:30:45.792 [DEBUG] [Thread-136615] [transport.py] [_log()] server lang: <none>
2025-12-31T23:30:45.792 [DEBUG] [Thread-136615] [transport.py] [_log()] kex follows: False
2025-12-31T23:30:45.792 [DEBUG] [Thread-136615] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:30:45.792 [DEBUG] [Thread-136615] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:30:45.792 [DEBUG] [Thread-136615] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:30:45.792 [DEBUG] [Thread-136615] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:30:45.792 [DEBUG] [Thread-136615] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:30:45.792 [DEBUG] [Thread-136615] [transport.py] [_log()] Compression: none
2025-12-31T23:30:45.792 [DEBUG] [Thread-136615] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:30:45.809 [DEBUG] [Thread-136615] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:30:45.809 [DEBUG] [Thread-136615] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:30:45.809 [DEBUG] [Thread-136615] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T23:30:45.809 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T23:30:45.809 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:30:45.810 [DEBUG] [Thread-136615] [transport.py] [_log()] userauth is OK
2025-12-31T23:30:45.810 [DEBUG] [Thread-136615] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:30:45.810 [DEBUG] [Thread-136615] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:30:45.810 [DEBUG] [Thread-136615] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T23:30:45.810 [DEBUG] [Thread-136615] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:30:45.821 [INFO] [Thread-136615] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:30:45.821 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:30:46.494 [DEBUG] [Thread-136615] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:30:46.495 [DEBUG] [Thread-136615] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:30:46.495 [DEBUG] [Thread-136615] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T23:30:46.536 [DEBUG] [Thread-136615] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:30:46.536 [DEBUG] [Thread-136615] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:30:46.538 [DEBUG] [Thread-136615] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:30:46.550 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:30:46.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T23:30:46.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T23:30:46.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T23:30:46.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:30:46.557 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T23:30:46.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:30:46.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:30:46.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T23:30:46.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.895621 -999.00  +15.10  11.33     78  +11.40 1 1 1 1 1     0    0 3.38 -17.80 ZNESW 14.8 11.3 188.0 17.1 16.1 -20.0 15.9 -19.3 15.8 -18.1 16.1 -19.0
2025-12-31T23:30:46.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T23:30:46.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T23:30:46.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.895621
2025-12-31T23:30:46.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T23:30:46.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T23:30:46.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T23:30:46.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T23:30:46.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T23:30:46.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T23:30:14', tmtdew=4.19, humidity=76.27, cloud=0.0, wind=17.17, temperature=14.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T23:30:14', seeing=0.89, atlas_timestamp='2025-12-31T21:29:41.654', atlas_cloud=1, atlas_rain=1, zp_data=[0.0547500000000003, 0.09625000000000128, 0.17125000000000057, 0.007499999999998508, 0.07349999999999923, 0.035250000000001336, 0.09999999999999964, 0.12225000000000108, 0.11749999999999972, 0.1855000000000011, 0.15625, 0.1379999999999999, 0.22799999999999976, 0.2632499999999993, -0.07399999999999984, -0.025000000000000355, 0.07124999999999915, 0.3414999999999999, 0.45199999999999996, 0.10874999999999879, 0.21099999999999852, 0.25324999999999775, -0.029749999999999943, 0.18825000000000003, 0.11249999999999893, 0.23799999999999955, 0.3637499999999996, 0.12950000000000017, 0.30900000000000016, -0.24099999999999966, -0.33199999999999896, 0.3280000000000012, 0.19125000000000014], zp_timestamp='2025-12-31T21:28:00')
2025-12-31T23:30:46.558 [DEBUG] [Thread-136615] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:30:46.632 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T23:30:46.643 [DEBUG] [Thread-136618] [transport.py] [_log()] starting thread (client mode): 0xb1745840
2025-12-31T23:30:46.643 [DEBUG] [Thread-136618] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:30:46.658 [DEBUG] [Thread-136618] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T23:30:46.658 [INFO] [Thread-136618] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T23:30:46.667 [DEBUG] [Thread-136618] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:30:46.667 [DEBUG] [Thread-136618] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T23:30:46.667 [DEBUG] [Thread-136618] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:30:46.667 [DEBUG] [Thread-136618] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:30:46.667 [DEBUG] [Thread-136618] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:30:46.667 [DEBUG] [Thread-136618] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:30:46.667 [DEBUG] [Thread-136618] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:30:46.667 [DEBUG] [Thread-136618] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:30:46.667 [DEBUG] [Thread-136618] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:30:46.667 [DEBUG] [Thread-136618] [transport.py] [_log()] client lang: <none>
2025-12-31T23:30:46.667 [DEBUG] [Thread-136618] [transport.py] [_log()] server lang: <none>
2025-12-31T23:30:46.667 [DEBUG] [Thread-136618] [transport.py] [_log()] kex follows: False
2025-12-31T23:30:46.667 [DEBUG] [Thread-136618] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:30:46.667 [DEBUG] [Thread-136618] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:30:46.667 [DEBUG] [Thread-136618] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:30:46.667 [DEBUG] [Thread-136618] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:30:46.667 [DEBUG] [Thread-136618] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:30:46.667 [DEBUG] [Thread-136618] [transport.py] [_log()] Compression: none
2025-12-31T23:30:46.667 [DEBUG] [Thread-136618] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:30:46.722 [DEBUG] [Thread-136618] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:30:46.722 [DEBUG] [Thread-136618] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:30:46.722 [DEBUG] [Thread-136618] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T23:30:46.722 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T23:30:46.722 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:30:46.781 [DEBUG] [Thread-136618] [transport.py] [_log()] userauth is OK
2025-12-31T23:30:46.781 [DEBUG] [Thread-136618] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:30:46.781 [DEBUG] [Thread-136618] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:30:46.781 [DEBUG] [Thread-136618] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T23:30:46.781 [DEBUG] [Thread-136618] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:30:46.795 [INFO] [Thread-136618] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:30:46.795 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T23:30:46.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:30:47.674 [DEBUG] [Thread-136618] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:30:47.674 [DEBUG] [Thread-136618] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:30:47.722 [DEBUG] [Thread-136618] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:30:47.723 [DEBUG] [Thread-136618] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:30:47.731 [DEBUG] [Thread-136618] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:30:47.739 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:30:47.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T23:30:47.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T23:30:47.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:30:47.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:30:47.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:30:47.763 [DEBUG] [Thread-136618] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:30:52.356 [DEBUG] [Thread-136620 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:30:59.519 [DEBUG] [Thread-136621 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:31:14.573 [DEBUG] [Thread-136622 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:31:17.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T23:31:17.758 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T23:31:17.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T23:31:18.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 23, 30, 46), 4.13, 76.32, 0.0, 20.52, 14.93, 0, 0, 0, 2, 0, 0),)
2025-12-31T23:31:18.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 23:30:46
2025-12-31T23:31:18.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T23:31:18.745 [DEBUG] [Thread-136623] [transport.py] [_log()] starting thread (client mode): 0xb6b61750
2025-12-31T23:31:18.746 [DEBUG] [Thread-136623] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:31:18.765 [DEBUG] [Thread-136623] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T23:31:18.765 [INFO] [Thread-136623] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T23:31:18.768 [DEBUG] [Thread-136623] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:31:18.768 [DEBUG] [Thread-136623] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T23:31:18.768 [DEBUG] [Thread-136623] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:31:18.769 [DEBUG] [Thread-136623] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:31:18.769 [DEBUG] [Thread-136623] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:31:18.769 [DEBUG] [Thread-136623] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:31:18.769 [DEBUG] [Thread-136623] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:31:18.769 [DEBUG] [Thread-136623] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:31:18.769 [DEBUG] [Thread-136623] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:31:18.769 [DEBUG] [Thread-136623] [transport.py] [_log()] client lang: <none>
2025-12-31T23:31:18.769 [DEBUG] [Thread-136623] [transport.py] [_log()] server lang: <none>
2025-12-31T23:31:18.769 [DEBUG] [Thread-136623] [transport.py] [_log()] kex follows: False
2025-12-31T23:31:18.769 [DEBUG] [Thread-136623] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:31:18.769 [DEBUG] [Thread-136623] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:31:18.769 [DEBUG] [Thread-136623] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:31:18.769 [DEBUG] [Thread-136623] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:31:18.769 [DEBUG] [Thread-136623] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:31:18.769 [DEBUG] [Thread-136623] [transport.py] [_log()] Compression: none
2025-12-31T23:31:18.769 [DEBUG] [Thread-136623] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:31:18.784 [DEBUG] [Thread-136623] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:31:18.784 [DEBUG] [Thread-136623] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:31:18.784 [DEBUG] [Thread-136623] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T23:31:18.784 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T23:31:18.784 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:31:18.785 [DEBUG] [Thread-136623] [transport.py] [_log()] userauth is OK
2025-12-31T23:31:18.785 [DEBUG] [Thread-136623] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:31:18.785 [DEBUG] [Thread-136623] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:31:18.785 [DEBUG] [Thread-136623] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T23:31:18.785 [DEBUG] [Thread-136623] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:31:18.795 [INFO] [Thread-136623] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:31:18.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:31:19.429 [DEBUG] [Thread-136623] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:31:19.429 [DEBUG] [Thread-136623] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:31:19.430 [DEBUG] [Thread-136623] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T23:31:19.470 [DEBUG] [Thread-136623] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:31:19.471 [DEBUG] [Thread-136623] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:31:19.473 [DEBUG] [Thread-136623] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:31:19.484 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:31:19.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T23:31:19.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T23:31:19.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T23:31:19.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:31:19.491 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T23:31:19.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:31:19.492 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:31:19.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T23:31:19.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.896316 -999.00  +15.10  10.07     78  +11.40 1 1 1 1 1     0    0 3.38 -18.33 ZNESW 11.4 10.1 196.2 16.1 16.1 -20.0 15.9 -19.7 15.8 -18.1 16.1 -19.1
2025-12-31T23:31:19.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T23:31:19.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T23:31:19.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.896316
2025-12-31T23:31:19.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T23:31:19.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T23:31:19.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T23:31:19.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T23:31:19.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T23:31:19.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T23:30:46', tmtdew=4.13, humidity=76.32, cloud=0.0, wind=20.52, temperature=14.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T23:30:46', seeing=0.86, atlas_timestamp='2025-12-31T21:30:41.702', atlas_cloud=1, atlas_rain=1, zp_data=[0.0547500000000003, 0.09625000000000128, 0.17125000000000057, 0.007499999999998508, 0.07349999999999923, 0.035250000000001336, 0.09999999999999964, 0.12225000000000108, 0.11749999999999972, 0.1855000000000011, 0.15625, 0.1379999999999999, 0.22799999999999976, 0.2632499999999993, -0.07399999999999984, -0.025000000000000355, 0.07124999999999915, 0.3414999999999999, 0.45199999999999996, 0.10874999999999879, 0.21099999999999852, 0.25324999999999775, -0.029749999999999943, 0.18825000000000003, 0.11249999999999893, 0.23799999999999955, 0.3637499999999996, 0.12950000000000017, 0.30900000000000016, -0.24099999999999966, -0.33199999999999896, 0.3280000000000012, 0.19125000000000014], zp_timestamp='2025-12-31T21:28:00')
2025-12-31T23:31:19.493 [DEBUG] [Thread-136623] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:31:19.567 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T23:31:19.579 [DEBUG] [Thread-136626] [transport.py] [_log()] starting thread (client mode): 0xb17954e0
2025-12-31T23:31:19.579 [DEBUG] [Thread-136626] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:31:19.593 [DEBUG] [Thread-136626] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T23:31:19.593 [INFO] [Thread-136626] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T23:31:19.601 [DEBUG] [Thread-136626] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:31:19.601 [DEBUG] [Thread-136626] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T23:31:19.601 [DEBUG] [Thread-136626] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:31:19.601 [DEBUG] [Thread-136626] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:31:19.601 [DEBUG] [Thread-136626] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:31:19.601 [DEBUG] [Thread-136626] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:31:19.601 [DEBUG] [Thread-136626] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:31:19.601 [DEBUG] [Thread-136626] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:31:19.601 [DEBUG] [Thread-136626] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:31:19.601 [DEBUG] [Thread-136626] [transport.py] [_log()] client lang: <none>
2025-12-31T23:31:19.601 [DEBUG] [Thread-136626] [transport.py] [_log()] server lang: <none>
2025-12-31T23:31:19.601 [DEBUG] [Thread-136626] [transport.py] [_log()] kex follows: False
2025-12-31T23:31:19.601 [DEBUG] [Thread-136626] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:31:19.601 [DEBUG] [Thread-136626] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:31:19.601 [DEBUG] [Thread-136626] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:31:19.601 [DEBUG] [Thread-136626] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:31:19.601 [DEBUG] [Thread-136626] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:31:19.601 [DEBUG] [Thread-136626] [transport.py] [_log()] Compression: none
2025-12-31T23:31:19.601 [DEBUG] [Thread-136626] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:31:19.658 [DEBUG] [Thread-136626] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:31:19.658 [DEBUG] [Thread-136626] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:31:19.659 [DEBUG] [Thread-136626] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T23:31:19.659 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T23:31:19.659 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:31:19.715 [DEBUG] [Thread-136626] [transport.py] [_log()] userauth is OK
2025-12-31T23:31:19.715 [DEBUG] [Thread-136626] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:31:19.715 [DEBUG] [Thread-136626] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:31:19.715 [DEBUG] [Thread-136626] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T23:31:19.715 [DEBUG] [Thread-136626] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:31:19.729 [INFO] [Thread-136626] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:31:19.729 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T23:31:19.729 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:31:20.586 [DEBUG] [Thread-136626] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:31:20.586 [DEBUG] [Thread-136626] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:31:20.634 [DEBUG] [Thread-136626] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:31:20.634 [DEBUG] [Thread-136626] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:31:20.643 [DEBUG] [Thread-136626] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:31:20.653 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:31:20.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T23:31:20.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T23:31:20.672 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:31:20.672 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:31:20.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:31:20.681 [DEBUG] [Thread-136626] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:31:26.849 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:31:26.850 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:31:29.607 [DEBUG] [Thread-136628 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:31:44.660 [DEBUG] [Thread-136629 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:31:50.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T23:31:50.702 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T23:31:50.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T23:31:51.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 23, 31, 18), 4.12, 76.35, 0.0, 20.61, 14.95, 0, 0, 0, 2, 0, 0),)
2025-12-31T23:31:51.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 23:31:18
2025-12-31T23:31:51.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T23:31:51.760 [DEBUG] [Thread-136630] [transport.py] [_log()] starting thread (client mode): 0xbbfcf0d0
2025-12-31T23:31:51.760 [DEBUG] [Thread-136630] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:31:51.781 [DEBUG] [Thread-136630] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T23:31:51.781 [INFO] [Thread-136630] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T23:31:51.784 [DEBUG] [Thread-136630] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:31:51.784 [DEBUG] [Thread-136630] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T23:31:51.784 [DEBUG] [Thread-136630] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:31:51.784 [DEBUG] [Thread-136630] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:31:51.784 [DEBUG] [Thread-136630] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:31:51.784 [DEBUG] [Thread-136630] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:31:51.784 [DEBUG] [Thread-136630] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:31:51.784 [DEBUG] [Thread-136630] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:31:51.784 [DEBUG] [Thread-136630] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:31:51.784 [DEBUG] [Thread-136630] [transport.py] [_log()] client lang: <none>
2025-12-31T23:31:51.784 [DEBUG] [Thread-136630] [transport.py] [_log()] server lang: <none>
2025-12-31T23:31:51.784 [DEBUG] [Thread-136630] [transport.py] [_log()] kex follows: False
2025-12-31T23:31:51.784 [DEBUG] [Thread-136630] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:31:51.784 [DEBUG] [Thread-136630] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:31:51.784 [DEBUG] [Thread-136630] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:31:51.784 [DEBUG] [Thread-136630] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:31:51.784 [DEBUG] [Thread-136630] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:31:51.784 [DEBUG] [Thread-136630] [transport.py] [_log()] Compression: none
2025-12-31T23:31:51.784 [DEBUG] [Thread-136630] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:31:51.802 [DEBUG] [Thread-136630] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:31:51.803 [DEBUG] [Thread-136630] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:31:51.803 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T23:31:51.803 [DEBUG] [Thread-136630] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T23:31:51.803 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:31:51.804 [DEBUG] [Thread-136630] [transport.py] [_log()] userauth is OK
2025-12-31T23:31:51.804 [DEBUG] [Thread-136630] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:31:51.804 [DEBUG] [Thread-136630] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:31:51.804 [DEBUG] [Thread-136630] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T23:31:51.804 [DEBUG] [Thread-136630] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:31:51.819 [INFO] [Thread-136630] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:31:51.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:31:52.429 [DEBUG] [Thread-136632 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:31:52.445 [DEBUG] [Thread-136630] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:31:52.445 [DEBUG] [Thread-136630] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:31:52.445 [DEBUG] [Thread-136630] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T23:31:52.486 [DEBUG] [Thread-136630] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:31:52.486 [DEBUG] [Thread-136630] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:31:52.488 [DEBUG] [Thread-136630] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:31:52.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:31:52.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T23:31:52.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T23:31:52.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T23:31:52.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:31:52.507 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T23:31:52.507 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:31:52.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:31:52.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T23:31:52.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.896663 -999.00  +15.10  13.36     78  +11.40 1 1 1 1 1     0    0 3.28 -19.32 ZNESW 12.0 13.4 184.7 16.7 16.1 -19.8 15.9 -19.6 15.8 -18.1 16.1 -19.0
2025-12-31T23:31:52.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T23:31:52.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T23:31:52.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.896663
2025-12-31T23:31:52.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T23:31:52.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T23:31:52.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T23:31:52.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T23:31:52.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T23:31:52.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T23:31:18', tmtdew=4.12, humidity=76.35, cloud=0.0, wind=20.61, temperature=14.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T23:31:50', seeing=0.83, atlas_timestamp='2025-12-31T21:31:11.683', atlas_cloud=1, atlas_rain=1, zp_data=[0.0547500000000003, 0.09625000000000128, 0.17125000000000057, 0.007499999999998508, 0.07349999999999923, 0.035250000000001336, 0.09999999999999964, 0.12225000000000108, 0.11749999999999972, 0.1855000000000011, 0.15625, 0.1379999999999999, 0.22799999999999976, 0.2632499999999993, -0.07399999999999984, -0.025000000000000355, 0.07124999999999915, 0.3414999999999999, 0.45199999999999996, 0.10874999999999879, 0.21099999999999852, 0.25324999999999775, -0.029749999999999943, 0.18825000000000003, 0.11249999999999893, 0.23799999999999955, 0.3637499999999996, 0.12950000000000017, 0.30900000000000016, -0.24099999999999966, -0.33199999999999896, 0.3280000000000012, 0.19125000000000014], zp_timestamp='2025-12-31T21:28:00')
2025-12-31T23:31:52.508 [DEBUG] [Thread-136630] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:31:52.581 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T23:31:52.593 [DEBUG] [Thread-136634] [transport.py] [_log()] starting thread (client mode): 0xb17963b0
2025-12-31T23:31:52.594 [DEBUG] [Thread-136634] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:31:52.609 [DEBUG] [Thread-136634] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T23:31:52.609 [INFO] [Thread-136634] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T23:31:52.617 [DEBUG] [Thread-136634] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:31:52.617 [DEBUG] [Thread-136634] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T23:31:52.617 [DEBUG] [Thread-136634] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:31:52.617 [DEBUG] [Thread-136634] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:31:52.617 [DEBUG] [Thread-136634] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:31:52.617 [DEBUG] [Thread-136634] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:31:52.617 [DEBUG] [Thread-136634] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:31:52.617 [DEBUG] [Thread-136634] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:31:52.617 [DEBUG] [Thread-136634] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:31:52.617 [DEBUG] [Thread-136634] [transport.py] [_log()] client lang: <none>
2025-12-31T23:31:52.617 [DEBUG] [Thread-136634] [transport.py] [_log()] server lang: <none>
2025-12-31T23:31:52.617 [DEBUG] [Thread-136634] [transport.py] [_log()] kex follows: False
2025-12-31T23:31:52.617 [DEBUG] [Thread-136634] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:31:52.617 [DEBUG] [Thread-136634] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:31:52.617 [DEBUG] [Thread-136634] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:31:52.617 [DEBUG] [Thread-136634] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:31:52.617 [DEBUG] [Thread-136634] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:31:52.617 [DEBUG] [Thread-136634] [transport.py] [_log()] Compression: none
2025-12-31T23:31:52.617 [DEBUG] [Thread-136634] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:31:52.676 [DEBUG] [Thread-136634] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:31:52.676 [DEBUG] [Thread-136634] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:31:52.677 [DEBUG] [Thread-136634] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T23:31:52.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T23:31:52.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:31:52.736 [DEBUG] [Thread-136634] [transport.py] [_log()] userauth is OK
2025-12-31T23:31:52.736 [DEBUG] [Thread-136634] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:31:52.736 [DEBUG] [Thread-136634] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:31:52.736 [DEBUG] [Thread-136634] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T23:31:52.736 [DEBUG] [Thread-136634] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:31:52.759 [INFO] [Thread-136634] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:31:52.759 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T23:31:52.759 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:31:53.587 [DEBUG] [Thread-136634] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:31:53.587 [DEBUG] [Thread-136634] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:31:53.635 [DEBUG] [Thread-136634] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:31:53.635 [DEBUG] [Thread-136634] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:31:53.644 [DEBUG] [Thread-136634] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:31:53.654 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:31:53.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T23:31:53.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T23:31:53.673 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:31:53.673 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:31:53.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:31:53.681 [DEBUG] [Thread-136634] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:31:59.696 [DEBUG] [Thread-136636 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:32:14.749 [DEBUG] [Thread-136637 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:32:23.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T23:32:23.704 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T23:32:23.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T23:32:24.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 23, 31, 50), 4.12, 76.37, 0.0, 18.42, 14.91, 0, 0, 0, 2, 0, 0),)
2025-12-31T23:32:24.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 23:31:50
2025-12-31T23:32:24.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T23:32:24.735 [DEBUG] [Thread-136638] [transport.py] [_log()] starting thread (client mode): 0xbbfcf340
2025-12-31T23:32:24.735 [DEBUG] [Thread-136638] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:32:24.750 [DEBUG] [Thread-136638] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T23:32:24.750 [INFO] [Thread-136638] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T23:32:24.753 [DEBUG] [Thread-136638] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:32:24.753 [DEBUG] [Thread-136638] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T23:32:24.754 [DEBUG] [Thread-136638] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:32:24.754 [DEBUG] [Thread-136638] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:32:24.754 [DEBUG] [Thread-136638] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:32:24.754 [DEBUG] [Thread-136638] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:32:24.754 [DEBUG] [Thread-136638] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:32:24.754 [DEBUG] [Thread-136638] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:32:24.754 [DEBUG] [Thread-136638] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:32:24.754 [DEBUG] [Thread-136638] [transport.py] [_log()] client lang: <none>
2025-12-31T23:32:24.754 [DEBUG] [Thread-136638] [transport.py] [_log()] server lang: <none>
2025-12-31T23:32:24.754 [DEBUG] [Thread-136638] [transport.py] [_log()] kex follows: False
2025-12-31T23:32:24.754 [DEBUG] [Thread-136638] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:32:24.754 [DEBUG] [Thread-136638] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:32:24.754 [DEBUG] [Thread-136638] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:32:24.754 [DEBUG] [Thread-136638] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:32:24.754 [DEBUG] [Thread-136638] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:32:24.754 [DEBUG] [Thread-136638] [transport.py] [_log()] Compression: none
2025-12-31T23:32:24.754 [DEBUG] [Thread-136638] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:32:24.770 [DEBUG] [Thread-136638] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:32:24.770 [DEBUG] [Thread-136638] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:32:24.770 [DEBUG] [Thread-136638] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T23:32:24.770 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T23:32:24.770 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:32:24.771 [DEBUG] [Thread-136638] [transport.py] [_log()] userauth is OK
2025-12-31T23:32:24.771 [DEBUG] [Thread-136638] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:32:24.771 [DEBUG] [Thread-136638] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:32:24.771 [DEBUG] [Thread-136638] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T23:32:24.771 [DEBUG] [Thread-136638] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:32:24.780 [INFO] [Thread-136638] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:32:24.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:32:25.466 [DEBUG] [Thread-136638] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:32:25.466 [DEBUG] [Thread-136638] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:32:25.466 [DEBUG] [Thread-136638] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T23:32:25.507 [DEBUG] [Thread-136638] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:32:25.507 [DEBUG] [Thread-136638] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:32:25.510 [DEBUG] [Thread-136638] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:32:25.521 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:32:25.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T23:32:25.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T23:32:25.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T23:32:25.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:32:25.527 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T23:32:25.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:32:25.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:32:25.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T23:32:25.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.897010 -999.00  +15.10  13.61     78  +11.50 1 1 1 1 1     0    0 3.34 -20.66 ZNESW 9.5 13.6 183.4 19.0 16.0 -19.9 15.9 -19.5 15.8 -18.1 16.0 -19.2
2025-12-31T23:32:25.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T23:32:25.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T23:32:25.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.897010
2025-12-31T23:32:25.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T23:32:25.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T23:32:25.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T23:32:25.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T23:32:25.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T23:32:25.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T23:31:50', tmtdew=4.12, humidity=76.37, cloud=0.0, wind=18.42, temperature=14.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T23:32:22', seeing=0.98, atlas_timestamp='2025-12-31T21:31:41.664', atlas_cloud=1, atlas_rain=1, zp_data=[0.0547500000000003, 0.09625000000000128, 0.17125000000000057, 0.007499999999998508, 0.07349999999999923, 0.035250000000001336, 0.09999999999999964, 0.12225000000000108, 0.11749999999999972, 0.1855000000000011, 0.15625, 0.1379999999999999, 0.22799999999999976, 0.2632499999999993, -0.07399999999999984, -0.025000000000000355, 0.07124999999999915, 0.3414999999999999, 0.45199999999999996, 0.10874999999999879, 0.21099999999999852, 0.25324999999999775, -0.029749999999999943, 0.18825000000000003, 0.11249999999999893, 0.23799999999999955, 0.3637499999999996, 0.12950000000000017, 0.30900000000000016, -0.24099999999999966, -0.33199999999999896, 0.3280000000000012, 0.19125000000000014], zp_timestamp='2025-12-31T21:28:00')
2025-12-31T23:32:25.529 [DEBUG] [Thread-136638] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:32:25.618 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T23:32:25.629 [DEBUG] [Thread-136641] [transport.py] [_log()] starting thread (client mode): 0xbbfcd060
2025-12-31T23:32:25.629 [DEBUG] [Thread-136641] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:32:25.646 [DEBUG] [Thread-136641] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T23:32:25.646 [INFO] [Thread-136641] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T23:32:25.654 [DEBUG] [Thread-136641] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:32:25.654 [DEBUG] [Thread-136641] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T23:32:25.654 [DEBUG] [Thread-136641] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:32:25.654 [DEBUG] [Thread-136641] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:32:25.654 [DEBUG] [Thread-136641] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:32:25.654 [DEBUG] [Thread-136641] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:32:25.654 [DEBUG] [Thread-136641] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:32:25.654 [DEBUG] [Thread-136641] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:32:25.654 [DEBUG] [Thread-136641] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:32:25.654 [DEBUG] [Thread-136641] [transport.py] [_log()] client lang: <none>
2025-12-31T23:32:25.654 [DEBUG] [Thread-136641] [transport.py] [_log()] server lang: <none>
2025-12-31T23:32:25.654 [DEBUG] [Thread-136641] [transport.py] [_log()] kex follows: False
2025-12-31T23:32:25.654 [DEBUG] [Thread-136641] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:32:25.654 [DEBUG] [Thread-136641] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:32:25.654 [DEBUG] [Thread-136641] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:32:25.655 [DEBUG] [Thread-136641] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:32:25.655 [DEBUG] [Thread-136641] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:32:25.655 [DEBUG] [Thread-136641] [transport.py] [_log()] Compression: none
2025-12-31T23:32:25.655 [DEBUG] [Thread-136641] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:32:25.710 [DEBUG] [Thread-136641] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:32:25.711 [DEBUG] [Thread-136641] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:32:25.712 [DEBUG] [Thread-136641] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T23:32:25.712 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T23:32:25.713 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:32:25.767 [DEBUG] [Thread-136641] [transport.py] [_log()] userauth is OK
2025-12-31T23:32:25.767 [DEBUG] [Thread-136641] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:32:25.767 [DEBUG] [Thread-136641] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:32:25.768 [DEBUG] [Thread-136641] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T23:32:25.768 [DEBUG] [Thread-136641] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:32:25.786 [INFO] [Thread-136641] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:32:25.787 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T23:32:25.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:32:26.649 [DEBUG] [Thread-136641] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:32:26.649 [DEBUG] [Thread-136641] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:32:26.697 [DEBUG] [Thread-136641] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:32:26.697 [DEBUG] [Thread-136641] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:32:26.707 [DEBUG] [Thread-136641] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:32:26.716 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:32:26.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-12-31T23:32:26.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T23:32:26.733 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:32:26.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:32:26.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:32:26.742 [DEBUG] [Thread-136641] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:32:27.058 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:32:27.059 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:32:29.786 [DEBUG] [Thread-136643 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:32:44.838 [DEBUG] [Thread-136644 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:32:52.507 [DEBUG] [Thread-136645 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:32:56.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T23:32:56.746 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T23:32:56.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T23:32:57.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 23, 32, 22), 4.11, 76.42, 0.0, 18.4, 14.91, 0, 0, 0, 2, 0, 0),)
2025-12-31T23:32:57.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 23:32:22
2025-12-31T23:32:57.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T23:32:57.722 [DEBUG] [Thread-136646] [transport.py] [_log()] starting thread (client mode): 0xb17446a0
2025-12-31T23:32:57.723 [DEBUG] [Thread-136646] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:32:57.742 [DEBUG] [Thread-136646] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T23:32:57.742 [INFO] [Thread-136646] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T23:32:57.745 [DEBUG] [Thread-136646] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:32:57.746 [DEBUG] [Thread-136646] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T23:32:57.746 [DEBUG] [Thread-136646] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:32:57.746 [DEBUG] [Thread-136646] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:32:57.746 [DEBUG] [Thread-136646] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:32:57.746 [DEBUG] [Thread-136646] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:32:57.746 [DEBUG] [Thread-136646] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:32:57.746 [DEBUG] [Thread-136646] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:32:57.746 [DEBUG] [Thread-136646] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:32:57.746 [DEBUG] [Thread-136646] [transport.py] [_log()] client lang: <none>
2025-12-31T23:32:57.746 [DEBUG] [Thread-136646] [transport.py] [_log()] server lang: <none>
2025-12-31T23:32:57.746 [DEBUG] [Thread-136646] [transport.py] [_log()] kex follows: False
2025-12-31T23:32:57.746 [DEBUG] [Thread-136646] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:32:57.746 [DEBUG] [Thread-136646] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:32:57.746 [DEBUG] [Thread-136646] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:32:57.746 [DEBUG] [Thread-136646] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:32:57.747 [DEBUG] [Thread-136646] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:32:57.747 [DEBUG] [Thread-136646] [transport.py] [_log()] Compression: none
2025-12-31T23:32:57.747 [DEBUG] [Thread-136646] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:32:57.765 [DEBUG] [Thread-136646] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:32:57.765 [DEBUG] [Thread-136646] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:32:57.766 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T23:32:57.767 [DEBUG] [Thread-136646] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T23:32:57.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:32:57.769 [DEBUG] [Thread-136646] [transport.py] [_log()] userauth is OK
2025-12-31T23:32:57.769 [DEBUG] [Thread-136646] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:32:57.770 [DEBUG] [Thread-136646] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:32:57.770 [DEBUG] [Thread-136646] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T23:32:57.770 [DEBUG] [Thread-136646] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:32:57.788 [INFO] [Thread-136646] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:32:57.789 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:32:58.407 [DEBUG] [Thread-136646] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:32:58.408 [DEBUG] [Thread-136646] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:32:58.408 [DEBUG] [Thread-136646] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T23:32:58.449 [DEBUG] [Thread-136646] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:32:58.449 [DEBUG] [Thread-136646] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:32:58.453 [DEBUG] [Thread-136646] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:32:58.465 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:32:58.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T23:32:58.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T23:32:58.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T23:32:58.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:32:58.477 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T23:32:58.477 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:32:58.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:32:58.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T23:32:58.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.897357 -999.00  +15.10  11.48     79  +11.50 1 1 1 1 1     0    0 3.19 -22.16 ZNESW 12.8 11.5 195.0 16.8 16.1 -19.9 15.9 -19.3 15.7 -18.2 16.0 -19.3
2025-12-31T23:32:58.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T23:32:58.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T23:32:58.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.897357
2025-12-31T23:32:58.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T23:32:58.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T23:32:58.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T23:32:58.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T23:32:58.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T23:32:58.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T23:32:22', tmtdew=4.11, humidity=76.42, cloud=0.0, wind=18.4, temperature=14.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T23:32:54', seeing=0.98, atlas_timestamp='2025-12-31T21:32:11.645', atlas_cloud=1, atlas_rain=1, zp_data=[0.0547500000000003, 0.09625000000000128, 0.17125000000000057, 0.007499999999998508, 0.07349999999999923, 0.035250000000001336, 0.09999999999999964, 0.12225000000000108, 0.11749999999999972, 0.1855000000000011, 0.15625, 0.1379999999999999, 0.22799999999999976, 0.2632499999999993, -0.07399999999999984, -0.025000000000000355, 0.07124999999999915, 0.3414999999999999, 0.45199999999999996, 0.10874999999999879, 0.21099999999999852, 0.25324999999999775, -0.029749999999999943, 0.18825000000000003, 0.11249999999999893, 0.23799999999999955, 0.3637499999999996, 0.12950000000000017, 0.30900000000000016, -0.24099999999999966, -0.33199999999999896, 0.3280000000000012, 0.19125000000000014], zp_timestamp='2025-12-31T21:28:00')
2025-12-31T23:32:58.480 [DEBUG] [Thread-136646] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:32:58.564 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T23:32:58.576 [DEBUG] [Thread-136649] [transport.py] [_log()] starting thread (client mode): 0xb95f2d10
2025-12-31T23:32:58.576 [DEBUG] [Thread-136649] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:32:58.592 [DEBUG] [Thread-136649] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T23:32:58.592 [INFO] [Thread-136649] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T23:32:58.599 [DEBUG] [Thread-136649] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:32:58.600 [DEBUG] [Thread-136649] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T23:32:58.600 [DEBUG] [Thread-136649] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:32:58.600 [DEBUG] [Thread-136649] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:32:58.600 [DEBUG] [Thread-136649] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:32:58.600 [DEBUG] [Thread-136649] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:32:58.600 [DEBUG] [Thread-136649] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:32:58.600 [DEBUG] [Thread-136649] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:32:58.600 [DEBUG] [Thread-136649] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:32:58.600 [DEBUG] [Thread-136649] [transport.py] [_log()] client lang: <none>
2025-12-31T23:32:58.600 [DEBUG] [Thread-136649] [transport.py] [_log()] server lang: <none>
2025-12-31T23:32:58.600 [DEBUG] [Thread-136649] [transport.py] [_log()] kex follows: False
2025-12-31T23:32:58.600 [DEBUG] [Thread-136649] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:32:58.600 [DEBUG] [Thread-136649] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:32:58.600 [DEBUG] [Thread-136649] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:32:58.600 [DEBUG] [Thread-136649] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:32:58.600 [DEBUG] [Thread-136649] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:32:58.600 [DEBUG] [Thread-136649] [transport.py] [_log()] Compression: none
2025-12-31T23:32:58.600 [DEBUG] [Thread-136649] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:32:58.663 [DEBUG] [Thread-136649] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:32:58.664 [DEBUG] [Thread-136649] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:32:58.664 [DEBUG] [Thread-136649] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T23:32:58.665 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T23:32:58.665 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:32:58.720 [DEBUG] [Thread-136649] [transport.py] [_log()] userauth is OK
2025-12-31T23:32:58.720 [DEBUG] [Thread-136649] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:32:58.720 [DEBUG] [Thread-136649] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:32:58.720 [DEBUG] [Thread-136649] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T23:32:58.721 [DEBUG] [Thread-136649] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:32:58.740 [INFO] [Thread-136649] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:32:58.741 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T23:32:58.741 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:32:59.566 [DEBUG] [Thread-136649] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:32:59.566 [DEBUG] [Thread-136649] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:32:59.614 [DEBUG] [Thread-136649] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:32:59.614 [DEBUG] [Thread-136649] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:32:59.623 [DEBUG] [Thread-136649] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:32:59.632 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:32:59.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T23:32:59.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T23:32:59.651 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:32:59.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:32:59.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:32:59.660 [DEBUG] [Thread-136649] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:32:59.869 [DEBUG] [Thread-136651 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:33:14.923 [DEBUG] [Thread-136652 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:33:27.257 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:33:27.258 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:33:29.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T23:33:29.665 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T23:33:29.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-12-31T23:33:29.951 [DEBUG] [Thread-136653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:33:30.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 23, 33, 26), 4.11, 76.42, 0.0, 16.82, 14.95, 0, 0, 0, 2, 0, 0),)
2025-12-31T23:33:30.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 23:33:26
2025-12-31T23:33:30.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T23:33:30.655 [DEBUG] [Thread-136654] [transport.py] [_log()] starting thread (client mode): 0xbbfcf820
2025-12-31T23:33:30.655 [DEBUG] [Thread-136654] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:33:30.675 [DEBUG] [Thread-136654] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T23:33:30.675 [INFO] [Thread-136654] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T23:33:30.678 [DEBUG] [Thread-136654] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:33:30.679 [DEBUG] [Thread-136654] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T23:33:30.679 [DEBUG] [Thread-136654] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:33:30.679 [DEBUG] [Thread-136654] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:33:30.679 [DEBUG] [Thread-136654] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:33:30.679 [DEBUG] [Thread-136654] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:33:30.679 [DEBUG] [Thread-136654] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:33:30.679 [DEBUG] [Thread-136654] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:33:30.679 [DEBUG] [Thread-136654] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:33:30.679 [DEBUG] [Thread-136654] [transport.py] [_log()] client lang: <none>
2025-12-31T23:33:30.679 [DEBUG] [Thread-136654] [transport.py] [_log()] server lang: <none>
2025-12-31T23:33:30.679 [DEBUG] [Thread-136654] [transport.py] [_log()] kex follows: False
2025-12-31T23:33:30.679 [DEBUG] [Thread-136654] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:33:30.679 [DEBUG] [Thread-136654] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:33:30.679 [DEBUG] [Thread-136654] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:33:30.679 [DEBUG] [Thread-136654] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:33:30.679 [DEBUG] [Thread-136654] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:33:30.680 [DEBUG] [Thread-136654] [transport.py] [_log()] Compression: none
2025-12-31T23:33:30.680 [DEBUG] [Thread-136654] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:33:30.696 [DEBUG] [Thread-136654] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:33:30.696 [DEBUG] [Thread-136654] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:33:30.697 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T23:33:30.697 [DEBUG] [Thread-136654] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T23:33:30.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:33:30.741 [DEBUG] [Thread-136654] [transport.py] [_log()] userauth is OK
2025-12-31T23:33:30.742 [DEBUG] [Thread-136654] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:33:30.742 [DEBUG] [Thread-136654] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:33:30.742 [DEBUG] [Thread-136654] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T23:33:30.742 [DEBUG] [Thread-136654] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:33:30.766 [INFO] [Thread-136654] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:33:30.766 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:33:31.374 [DEBUG] [Thread-136654] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:33:31.375 [DEBUG] [Thread-136654] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:33:31.375 [DEBUG] [Thread-136654] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T23:33:31.416 [DEBUG] [Thread-136654] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:33:31.416 [DEBUG] [Thread-136654] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:33:31.420 [DEBUG] [Thread-136654] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:33:31.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:33:31.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T23:33:31.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T23:33:31.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T23:33:31.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:33:31.438 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T23:33:31.438 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:33:31.438 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:33:31.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T23:33:31.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.897705 -999.00  +15.10  12.30     78  +11.50 1 1 1 1 1     0    0 3.24 -21.88 ZNESW 10.7 12.3 194.4 15.4 16.0 -20.0 15.9 -19.3 15.8 -18.3 16.0 -19.3
2025-12-31T23:33:31.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T23:33:31.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T23:33:31.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.897705
2025-12-31T23:33:31.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T23:33:31.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T23:33:31.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T23:33:31.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T23:33:31.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T23:33:31.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T23:33:26', tmtdew=4.11, humidity=76.42, cloud=0.0, wind=16.82, temperature=14.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T23:33:26', seeing=1.09, atlas_timestamp='2025-12-31T21:32:41.712', atlas_cloud=1, atlas_rain=1, zp_data=[0.15374999999999872, 0.09325000000000117, 0.1327499999999997, 0.13199999999999967, 0.45250000000000057, 0.1282500000000013, 0.10850000000000115, 0.16774999999999984, 0.12299999999999933, 0.0860000000000003, 0.12024999999999864, 0.2680000000000007, 0.2345000000000006, 0.2157499999999981, 0.0039999999999995595, 0.12149999999999928, 0.08525000000000027, 0.1775000000000002, 0.08099999999999952, 0.32124999999999915, 0.352999999999998, -0.0757500000000011, -0.8537499999999998, 0.2157499999999999, 0.10899999999999999, 0.6334999999999997, 0.49575000000000014, nan, 0.23599999999999977, -0.6414999999999988, -0.6539999999999981, 0.24600000000000044, 0.3122499999999988], zp_timestamp='2025-12-31T21:32:00')
2025-12-31T23:33:31.441 [DEBUG] [Thread-136654] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:33:31.524 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T23:33:31.535 [DEBUG] [Thread-136657] [transport.py] [_log()] starting thread (client mode): 0xb95f3520
2025-12-31T23:33:31.536 [DEBUG] [Thread-136657] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:33:31.551 [DEBUG] [Thread-136657] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T23:33:31.551 [INFO] [Thread-136657] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T23:33:31.559 [DEBUG] [Thread-136657] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:33:31.559 [DEBUG] [Thread-136657] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T23:33:31.559 [DEBUG] [Thread-136657] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:33:31.559 [DEBUG] [Thread-136657] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:33:31.559 [DEBUG] [Thread-136657] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:33:31.559 [DEBUG] [Thread-136657] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:33:31.559 [DEBUG] [Thread-136657] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:33:31.559 [DEBUG] [Thread-136657] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:33:31.559 [DEBUG] [Thread-136657] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:33:31.559 [DEBUG] [Thread-136657] [transport.py] [_log()] client lang: <none>
2025-12-31T23:33:31.559 [DEBUG] [Thread-136657] [transport.py] [_log()] server lang: <none>
2025-12-31T23:33:31.559 [DEBUG] [Thread-136657] [transport.py] [_log()] kex follows: False
2025-12-31T23:33:31.559 [DEBUG] [Thread-136657] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:33:31.559 [DEBUG] [Thread-136657] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:33:31.560 [DEBUG] [Thread-136657] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:33:31.560 [DEBUG] [Thread-136657] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:33:31.560 [DEBUG] [Thread-136657] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:33:31.560 [DEBUG] [Thread-136657] [transport.py] [_log()] Compression: none
2025-12-31T23:33:31.560 [DEBUG] [Thread-136657] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:33:31.620 [DEBUG] [Thread-136657] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:33:31.620 [DEBUG] [Thread-136657] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:33:31.621 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T23:33:31.621 [DEBUG] [Thread-136657] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T23:33:31.622 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:33:31.680 [DEBUG] [Thread-136657] [transport.py] [_log()] userauth is OK
2025-12-31T23:33:31.680 [DEBUG] [Thread-136657] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:33:31.680 [DEBUG] [Thread-136657] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:33:31.680 [DEBUG] [Thread-136657] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T23:33:31.680 [DEBUG] [Thread-136657] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:33:31.700 [INFO] [Thread-136657] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:33:31.700 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T23:33:31.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:33:32.589 [DEBUG] [Thread-136657] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:33:32.590 [DEBUG] [Thread-136657] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:33:32.639 [DEBUG] [Thread-136657] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:33:32.639 [DEBUG] [Thread-136657] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:33:32.649 [DEBUG] [Thread-136657] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:33:32.658 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:33:32.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T23:33:32.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T23:33:32.678 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:33:32.678 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:33:32.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:33:32.688 [DEBUG] [Thread-136657] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:33:44.984 [DEBUG] [Thread-136659 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:33:52.572 [DEBUG] [Thread-136660 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:34:00.042 [DEBUG] [Thread-136661 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:34:02.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T23:34:02.709 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T23:34:02.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T23:34:03.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 23, 33, 58), 4.12, 76.35, 0.0, 17.61, 14.86, 0, 0, 0, 2, 0, 0),)
2025-12-31T23:34:03.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 23:33:58
2025-12-31T23:34:03.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T23:34:03.720 [DEBUG] [Thread-136662] [transport.py] [_log()] starting thread (client mode): 0xb1744c70
2025-12-31T23:34:03.720 [DEBUG] [Thread-136662] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:34:03.740 [DEBUG] [Thread-136662] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T23:34:03.740 [INFO] [Thread-136662] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T23:34:03.743 [DEBUG] [Thread-136662] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:34:03.743 [DEBUG] [Thread-136662] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T23:34:03.743 [DEBUG] [Thread-136662] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:34:03.743 [DEBUG] [Thread-136662] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:34:03.743 [DEBUG] [Thread-136662] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:34:03.743 [DEBUG] [Thread-136662] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:34:03.743 [DEBUG] [Thread-136662] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:34:03.743 [DEBUG] [Thread-136662] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:34:03.743 [DEBUG] [Thread-136662] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:34:03.743 [DEBUG] [Thread-136662] [transport.py] [_log()] client lang: <none>
2025-12-31T23:34:03.743 [DEBUG] [Thread-136662] [transport.py] [_log()] server lang: <none>
2025-12-31T23:34:03.743 [DEBUG] [Thread-136662] [transport.py] [_log()] kex follows: False
2025-12-31T23:34:03.743 [DEBUG] [Thread-136662] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:34:03.743 [DEBUG] [Thread-136662] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:34:03.743 [DEBUG] [Thread-136662] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:34:03.743 [DEBUG] [Thread-136662] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:34:03.743 [DEBUG] [Thread-136662] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:34:03.743 [DEBUG] [Thread-136662] [transport.py] [_log()] Compression: none
2025-12-31T23:34:03.743 [DEBUG] [Thread-136662] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:34:03.758 [DEBUG] [Thread-136662] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:34:03.758 [DEBUG] [Thread-136662] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:34:03.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T23:34:03.759 [DEBUG] [Thread-136662] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T23:34:03.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:34:03.759 [DEBUG] [Thread-136662] [transport.py] [_log()] userauth is OK
2025-12-31T23:34:03.759 [DEBUG] [Thread-136662] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:34:03.759 [DEBUG] [Thread-136662] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:34:03.759 [DEBUG] [Thread-136662] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T23:34:03.759 [DEBUG] [Thread-136662] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:34:03.786 [INFO] [Thread-136662] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:34:03.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:34:04.536 [DEBUG] [Thread-136662] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:34:04.536 [DEBUG] [Thread-136662] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:34:04.536 [DEBUG] [Thread-136662] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T23:34:04.576 [DEBUG] [Thread-136662] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:34:04.577 [DEBUG] [Thread-136662] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:34:04.578 [DEBUG] [Thread-136662] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:34:04.588 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:34:04.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T23:34:04.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T23:34:04.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T23:34:04.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:34:04.595 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T23:34:04.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:34:04.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:34:04.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T23:34:04.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.898052 -999.00  +15.10  13.23     79  +11.50 1 1 1 1 1     0    0 3.21 -21.05 ZNESW 12.4 13.2 185.0 17.7 16.0 -20.0 15.8 -19.6 15.7 -18.3 16.0 -19.3
2025-12-31T23:34:04.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T23:34:04.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T23:34:04.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.898052
2025-12-31T23:34:04.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T23:34:04.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T23:34:04.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T23:34:04.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T23:34:04.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T23:34:04.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T23:33:58', tmtdew=4.12, humidity=76.35, cloud=0.0, wind=17.61, temperature=14.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T23:33:59', seeing=1.09, atlas_timestamp='2025-12-31T21:33:11.693', atlas_cloud=1, atlas_rain=1, zp_data=[0.15374999999999872, 0.09325000000000117, 0.1327499999999997, 0.13199999999999967, 0.45250000000000057, 0.1282500000000013, 0.10850000000000115, 0.16774999999999984, 0.12299999999999933, 0.0860000000000003, 0.12024999999999864, 0.2680000000000007, 0.2345000000000006, 0.2157499999999981, 0.0039999999999995595, 0.12149999999999928, 0.08525000000000027, 0.1775000000000002, 0.08099999999999952, 0.32124999999999915, 0.352999999999998, -0.0757500000000011, -0.8537499999999998, 0.2157499999999999, 0.10899999999999999, 0.6334999999999997, 0.49575000000000014, nan, 0.23599999999999977, -0.6414999999999988, -0.6539999999999981, 0.24600000000000044, 0.3122499999999988], zp_timestamp='2025-12-31T21:32:00')
2025-12-31T23:34:04.596 [DEBUG] [Thread-136662] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:34:04.669 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T23:34:04.686 [DEBUG] [Thread-136665] [transport.py] [_log()] starting thread (client mode): 0xb1744850
2025-12-31T23:34:04.686 [DEBUG] [Thread-136665] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:34:04.703 [DEBUG] [Thread-136665] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T23:34:04.704 [INFO] [Thread-136665] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T23:34:04.712 [DEBUG] [Thread-136665] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:34:04.712 [DEBUG] [Thread-136665] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T23:34:04.712 [DEBUG] [Thread-136665] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:34:04.712 [DEBUG] [Thread-136665] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:34:04.712 [DEBUG] [Thread-136665] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:34:04.712 [DEBUG] [Thread-136665] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:34:04.712 [DEBUG] [Thread-136665] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:34:04.712 [DEBUG] [Thread-136665] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:34:04.712 [DEBUG] [Thread-136665] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:34:04.712 [DEBUG] [Thread-136665] [transport.py] [_log()] client lang: <none>
2025-12-31T23:34:04.712 [DEBUG] [Thread-136665] [transport.py] [_log()] server lang: <none>
2025-12-31T23:34:04.712 [DEBUG] [Thread-136665] [transport.py] [_log()] kex follows: False
2025-12-31T23:34:04.712 [DEBUG] [Thread-136665] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:34:04.712 [DEBUG] [Thread-136665] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:34:04.712 [DEBUG] [Thread-136665] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:34:04.712 [DEBUG] [Thread-136665] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:34:04.712 [DEBUG] [Thread-136665] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:34:04.713 [DEBUG] [Thread-136665] [transport.py] [_log()] Compression: none
2025-12-31T23:34:04.713 [DEBUG] [Thread-136665] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:34:04.773 [DEBUG] [Thread-136665] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:34:04.774 [DEBUG] [Thread-136665] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:34:04.774 [DEBUG] [Thread-136665] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T23:34:04.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T23:34:04.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:34:04.831 [DEBUG] [Thread-136665] [transport.py] [_log()] userauth is OK
2025-12-31T23:34:04.831 [DEBUG] [Thread-136665] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:34:04.831 [DEBUG] [Thread-136665] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:34:04.831 [DEBUG] [Thread-136665] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T23:34:04.831 [DEBUG] [Thread-136665] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:34:04.845 [INFO] [Thread-136665] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:34:04.845 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T23:34:04.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:34:05.680 [DEBUG] [Thread-136665] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:34:05.680 [DEBUG] [Thread-136665] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:34:05.728 [DEBUG] [Thread-136665] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:34:05.728 [DEBUG] [Thread-136665] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:34:05.737 [DEBUG] [Thread-136665] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:34:05.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:34:05.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T23:34:05.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T23:34:05.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:34:05.761 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:34:05.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:34:05.769 [DEBUG] [Thread-136665] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:34:15.073 [DEBUG] [Thread-136667 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:34:27.458 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:34:27.459 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:34:30.122 [DEBUG] [Thread-136668 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:34:35.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T23:34:35.791 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T23:34:35.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T23:34:36.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 23, 34, 31), 4.11, 76.42, 0.0, 19.27, 14.88, 0, 0, 0, 2, 0, 0),)
2025-12-31T23:34:36.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 23:34:31
2025-12-31T23:34:36.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T23:34:36.769 [DEBUG] [Thread-136669] [transport.py] [_log()] starting thread (client mode): 0xb95f38e0
2025-12-31T23:34:36.769 [DEBUG] [Thread-136669] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:34:36.790 [DEBUG] [Thread-136669] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T23:34:36.790 [INFO] [Thread-136669] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T23:34:36.793 [DEBUG] [Thread-136669] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:34:36.793 [DEBUG] [Thread-136669] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T23:34:36.793 [DEBUG] [Thread-136669] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:34:36.793 [DEBUG] [Thread-136669] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:34:36.793 [DEBUG] [Thread-136669] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:34:36.793 [DEBUG] [Thread-136669] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:34:36.794 [DEBUG] [Thread-136669] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:34:36.794 [DEBUG] [Thread-136669] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:34:36.794 [DEBUG] [Thread-136669] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:34:36.794 [DEBUG] [Thread-136669] [transport.py] [_log()] client lang: <none>
2025-12-31T23:34:36.794 [DEBUG] [Thread-136669] [transport.py] [_log()] server lang: <none>
2025-12-31T23:34:36.794 [DEBUG] [Thread-136669] [transport.py] [_log()] kex follows: False
2025-12-31T23:34:36.794 [DEBUG] [Thread-136669] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:34:36.794 [DEBUG] [Thread-136669] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:34:36.794 [DEBUG] [Thread-136669] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:34:36.794 [DEBUG] [Thread-136669] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:34:36.794 [DEBUG] [Thread-136669] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:34:36.794 [DEBUG] [Thread-136669] [transport.py] [_log()] Compression: none
2025-12-31T23:34:36.794 [DEBUG] [Thread-136669] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:34:36.811 [DEBUG] [Thread-136669] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:34:36.812 [DEBUG] [Thread-136669] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:34:36.812 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T23:34:36.813 [DEBUG] [Thread-136669] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T23:34:36.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:34:36.814 [DEBUG] [Thread-136669] [transport.py] [_log()] userauth is OK
2025-12-31T23:34:36.814 [DEBUG] [Thread-136669] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:34:36.814 [DEBUG] [Thread-136669] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:34:36.814 [DEBUG] [Thread-136669] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T23:34:36.814 [DEBUG] [Thread-136669] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:34:36.828 [INFO] [Thread-136669] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:34:36.829 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:34:37.465 [DEBUG] [Thread-136669] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:34:37.465 [DEBUG] [Thread-136669] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:34:37.466 [DEBUG] [Thread-136669] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T23:34:37.506 [DEBUG] [Thread-136669] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:34:37.506 [DEBUG] [Thread-136669] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:34:37.508 [DEBUG] [Thread-136669] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:34:37.520 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:34:37.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T23:34:37.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T23:34:37.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T23:34:37.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:34:37.526 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T23:34:37.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:34:37.526 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:34:37.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T23:34:37.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.898746 -999.00  +15.10  16.30     79  +11.60 1 1 1 1 1     0    0 3.06 -24.98 ZNESW 14.8 16.3 184.6 18.9 16.0 -20.3 15.8 -20.0 15.7 -18.5 16.0 -19.5
2025-12-31T23:34:37.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T23:34:37.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T23:34:37.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.898746
2025-12-31T23:34:37.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T23:34:37.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T23:34:37.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T23:34:37.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T23:34:37.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T23:34:37.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T23:34:31', tmtdew=4.11, humidity=76.42, cloud=0.0, wind=19.27, temperature=14.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T23:34:31', seeing=1.15, atlas_timestamp='2025-12-31T21:34:11.654', atlas_cloud=1, atlas_rain=1, zp_data=[0.15374999999999872, 0.09325000000000117, 0.1327499999999997, 0.13199999999999967, 0.45250000000000057, 0.1282500000000013, 0.10850000000000115, 0.16774999999999984, 0.12299999999999933, 0.0860000000000003, 0.12024999999999864, 0.2680000000000007, 0.2345000000000006, 0.2157499999999981, 0.0039999999999995595, 0.12149999999999928, 0.08525000000000027, 0.1775000000000002, 0.08099999999999952, 0.32124999999999915, 0.352999999999998, -0.0757500000000011, -0.8537499999999998, 0.2157499999999999, 0.10899999999999999, 0.6334999999999997, 0.49575000000000014, nan, 0.23599999999999977, -0.6414999999999988, -0.6539999999999981, 0.24600000000000044, 0.3122499999999988], zp_timestamp='2025-12-31T21:32:00')
2025-12-31T23:34:37.527 [DEBUG] [Thread-136669] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:34:37.597 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T23:34:37.609 [DEBUG] [Thread-136672] [transport.py] [_log()] starting thread (client mode): 0xb95f01f0
2025-12-31T23:34:37.610 [DEBUG] [Thread-136672] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:34:37.627 [DEBUG] [Thread-136672] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T23:34:37.628 [INFO] [Thread-136672] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T23:34:37.636 [DEBUG] [Thread-136672] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:34:37.637 [DEBUG] [Thread-136672] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T23:34:37.637 [DEBUG] [Thread-136672] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:34:37.637 [DEBUG] [Thread-136672] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:34:37.637 [DEBUG] [Thread-136672] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:34:37.637 [DEBUG] [Thread-136672] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:34:37.638 [DEBUG] [Thread-136672] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:34:37.638 [DEBUG] [Thread-136672] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:34:37.638 [DEBUG] [Thread-136672] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:34:37.638 [DEBUG] [Thread-136672] [transport.py] [_log()] client lang: <none>
2025-12-31T23:34:37.638 [DEBUG] [Thread-136672] [transport.py] [_log()] server lang: <none>
2025-12-31T23:34:37.638 [DEBUG] [Thread-136672] [transport.py] [_log()] kex follows: False
2025-12-31T23:34:37.638 [DEBUG] [Thread-136672] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:34:37.638 [DEBUG] [Thread-136672] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:34:37.638 [DEBUG] [Thread-136672] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:34:37.638 [DEBUG] [Thread-136672] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:34:37.638 [DEBUG] [Thread-136672] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:34:37.638 [DEBUG] [Thread-136672] [transport.py] [_log()] Compression: none
2025-12-31T23:34:37.638 [DEBUG] [Thread-136672] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:34:37.700 [DEBUG] [Thread-136672] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:34:37.700 [DEBUG] [Thread-136672] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:34:37.701 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T23:34:37.701 [DEBUG] [Thread-136672] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T23:34:37.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:34:37.756 [DEBUG] [Thread-136672] [transport.py] [_log()] userauth is OK
2025-12-31T23:34:37.757 [DEBUG] [Thread-136672] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:34:37.757 [DEBUG] [Thread-136672] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:34:37.757 [DEBUG] [Thread-136672] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T23:34:37.757 [DEBUG] [Thread-136672] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:34:37.776 [INFO] [Thread-136672] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:34:37.776 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T23:34:37.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:34:38.605 [DEBUG] [Thread-136672] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:34:38.605 [DEBUG] [Thread-136672] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:34:38.653 [DEBUG] [Thread-136672] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:34:38.653 [DEBUG] [Thread-136672] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:34:38.661 [DEBUG] [Thread-136672] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:34:38.669 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:34:38.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T23:34:38.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T23:34:38.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:34:38.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:34:38.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:34:38.693 [DEBUG] [Thread-136672] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:34:45.153 [DEBUG] [Thread-136674 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:34:52.629 [DEBUG] [Thread-136675 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:35:00.205 [DEBUG] [Thread-136676 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:35:08.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T23:35:08.716 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T23:35:08.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T23:35:09.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 23, 35, 3), 4.1, 76.47, 0.0, 19.07, 14.9, 0, 0, 0, 2, 0, 0),)
2025-12-31T23:35:09.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 23:35:03
2025-12-31T23:35:09.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T23:35:09.673 [DEBUG] [Thread-136677] [transport.py] [_log()] starting thread (client mode): 0xb1747e20
2025-12-31T23:35:09.673 [DEBUG] [Thread-136677] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:35:09.690 [DEBUG] [Thread-136677] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T23:35:09.690 [INFO] [Thread-136677] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T23:35:09.693 [DEBUG] [Thread-136677] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:35:09.694 [DEBUG] [Thread-136677] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T23:35:09.694 [DEBUG] [Thread-136677] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:35:09.694 [DEBUG] [Thread-136677] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:35:09.694 [DEBUG] [Thread-136677] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:35:09.694 [DEBUG] [Thread-136677] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:35:09.694 [DEBUG] [Thread-136677] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:35:09.694 [DEBUG] [Thread-136677] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:35:09.694 [DEBUG] [Thread-136677] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:35:09.694 [DEBUG] [Thread-136677] [transport.py] [_log()] client lang: <none>
2025-12-31T23:35:09.694 [DEBUG] [Thread-136677] [transport.py] [_log()] server lang: <none>
2025-12-31T23:35:09.694 [DEBUG] [Thread-136677] [transport.py] [_log()] kex follows: False
2025-12-31T23:35:09.694 [DEBUG] [Thread-136677] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:35:09.694 [DEBUG] [Thread-136677] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:35:09.694 [DEBUG] [Thread-136677] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:35:09.694 [DEBUG] [Thread-136677] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:35:09.694 [DEBUG] [Thread-136677] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:35:09.694 [DEBUG] [Thread-136677] [transport.py] [_log()] Compression: none
2025-12-31T23:35:09.694 [DEBUG] [Thread-136677] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:35:09.712 [DEBUG] [Thread-136677] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:35:09.712 [DEBUG] [Thread-136677] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:35:09.713 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T23:35:09.713 [DEBUG] [Thread-136677] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T23:35:09.714 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:35:09.715 [DEBUG] [Thread-136677] [transport.py] [_log()] userauth is OK
2025-12-31T23:35:09.716 [DEBUG] [Thread-136677] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:35:09.716 [DEBUG] [Thread-136677] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:35:09.716 [DEBUG] [Thread-136677] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T23:35:09.716 [DEBUG] [Thread-136677] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:35:09.740 [INFO] [Thread-136677] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:35:09.741 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:35:15.240 [DEBUG] [Thread-136679 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:35:17.913 [DEBUG] [Thread-136677] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:35:17.913 [DEBUG] [Thread-136677] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:35:17.913 [DEBUG] [Thread-136677] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T23:35:17.954 [DEBUG] [Thread-136677] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:35:17.954 [DEBUG] [Thread-136677] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:35:17.957 [DEBUG] [Thread-136677] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:35:18.046 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:35:18.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T23:35:18.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T23:35:18.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T23:35:18.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:35:18.067 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T23:35:18.067 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:35:18.067 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:35:18.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T23:35:18.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.899094 -999.00  +15.10   9.06     79  +11.60 1 1 1 1 1     0    0 3.01 -25.57 ZNESW 10.2 9.1 185.4 14.0 15.9 -20.2 15.8 -20.0 15.7 -18.4 16.0 -19.5
2025-12-31T23:35:18.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T23:35:18.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T23:35:18.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.899094
2025-12-31T23:35:18.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T23:35:18.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T23:35:18.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T23:35:18.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T23:35:18.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T23:35:18.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T23:35:03', tmtdew=4.1, humidity=76.47, cloud=0.0, wind=19.07, temperature=14.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T23:35:03', seeing=1.2, atlas_timestamp='2025-12-31T21:34:41.722', atlas_cloud=1, atlas_rain=1, zp_data=[0.15374999999999872, 0.09325000000000117, 0.1327499999999997, 0.13199999999999967, 0.45250000000000057, 0.1282500000000013, 0.10850000000000115, 0.16774999999999984, 0.12299999999999933, 0.0860000000000003, 0.12024999999999864, 0.2680000000000007, 0.2345000000000006, 0.2157499999999981, 0.0039999999999995595, 0.12149999999999928, 0.08525000000000027, 0.1775000000000002, 0.08099999999999952, 0.32124999999999915, 0.352999999999998, -0.0757500000000011, -0.8537499999999998, 0.2157499999999999, 0.10899999999999999, 0.6334999999999997, 0.49575000000000014, nan, 0.23599999999999977, -0.6414999999999988, -0.6539999999999981, 0.24600000000000044, 0.3122499999999988], zp_timestamp='2025-12-31T21:32:00')
2025-12-31T23:35:18.069 [DEBUG] [Thread-136677] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:35:18.141 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T23:35:18.153 [DEBUG] [Thread-136681] [transport.py] [_log()] starting thread (client mode): 0xb1747040
2025-12-31T23:35:18.154 [DEBUG] [Thread-136681] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:35:18.168 [DEBUG] [Thread-136681] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T23:35:18.168 [INFO] [Thread-136681] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T23:35:18.176 [DEBUG] [Thread-136681] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:35:18.176 [DEBUG] [Thread-136681] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T23:35:18.176 [DEBUG] [Thread-136681] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:35:18.176 [DEBUG] [Thread-136681] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:35:18.176 [DEBUG] [Thread-136681] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:35:18.176 [DEBUG] [Thread-136681] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:35:18.176 [DEBUG] [Thread-136681] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:35:18.176 [DEBUG] [Thread-136681] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:35:18.176 [DEBUG] [Thread-136681] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:35:18.176 [DEBUG] [Thread-136681] [transport.py] [_log()] client lang: <none>
2025-12-31T23:35:18.176 [DEBUG] [Thread-136681] [transport.py] [_log()] server lang: <none>
2025-12-31T23:35:18.176 [DEBUG] [Thread-136681] [transport.py] [_log()] kex follows: False
2025-12-31T23:35:18.176 [DEBUG] [Thread-136681] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:35:18.176 [DEBUG] [Thread-136681] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:35:18.176 [DEBUG] [Thread-136681] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:35:18.176 [DEBUG] [Thread-136681] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:35:18.176 [DEBUG] [Thread-136681] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:35:18.176 [DEBUG] [Thread-136681] [transport.py] [_log()] Compression: none
2025-12-31T23:35:18.176 [DEBUG] [Thread-136681] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:35:18.233 [DEBUG] [Thread-136681] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:35:18.233 [DEBUG] [Thread-136681] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:35:18.234 [DEBUG] [Thread-136681] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T23:35:18.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T23:35:18.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:35:18.291 [DEBUG] [Thread-136681] [transport.py] [_log()] userauth is OK
2025-12-31T23:35:18.291 [DEBUG] [Thread-136681] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:35:18.291 [DEBUG] [Thread-136681] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:35:18.291 [DEBUG] [Thread-136681] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T23:35:18.291 [DEBUG] [Thread-136681] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:35:18.305 [INFO] [Thread-136681] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:35:18.305 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T23:35:18.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:35:19.142 [DEBUG] [Thread-136681] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:35:19.142 [DEBUG] [Thread-136681] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:35:19.189 [DEBUG] [Thread-136681] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:35:19.189 [DEBUG] [Thread-136681] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:35:19.198 [DEBUG] [Thread-136681] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:35:19.206 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:35:19.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T23:35:19.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T23:35:19.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:35:19.222 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:35:19.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:35:19.238 [DEBUG] [Thread-136681] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:35:27.660 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:35:27.662 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:35:30.272 [DEBUG] [Thread-136683 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:35:45.325 [DEBUG] [Thread-136684 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:35:49.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T23:35:49.238 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T23:35:49.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T23:35:49.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 23, 35, 35), 4.09, 76.53, 0.0, 19.67, 14.9, 0, 0, 0, 2, 0, 0),)
2025-12-31T23:35:49.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 23:35:35
2025-12-31T23:35:50.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T23:35:50.198 [DEBUG] [Thread-136685] [transport.py] [_log()] starting thread (client mode): 0xb6b61060
2025-12-31T23:35:50.198 [DEBUG] [Thread-136685] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:35:50.218 [DEBUG] [Thread-136685] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T23:35:50.218 [INFO] [Thread-136685] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T23:35:50.222 [DEBUG] [Thread-136685] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:35:50.222 [DEBUG] [Thread-136685] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T23:35:50.222 [DEBUG] [Thread-136685] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:35:50.222 [DEBUG] [Thread-136685] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:35:50.222 [DEBUG] [Thread-136685] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:35:50.222 [DEBUG] [Thread-136685] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:35:50.222 [DEBUG] [Thread-136685] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:35:50.222 [DEBUG] [Thread-136685] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:35:50.222 [DEBUG] [Thread-136685] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:35:50.222 [DEBUG] [Thread-136685] [transport.py] [_log()] client lang: <none>
2025-12-31T23:35:50.222 [DEBUG] [Thread-136685] [transport.py] [_log()] server lang: <none>
2025-12-31T23:35:50.222 [DEBUG] [Thread-136685] [transport.py] [_log()] kex follows: False
2025-12-31T23:35:50.222 [DEBUG] [Thread-136685] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:35:50.222 [DEBUG] [Thread-136685] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:35:50.222 [DEBUG] [Thread-136685] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:35:50.222 [DEBUG] [Thread-136685] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:35:50.222 [DEBUG] [Thread-136685] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:35:50.222 [DEBUG] [Thread-136685] [transport.py] [_log()] Compression: none
2025-12-31T23:35:50.223 [DEBUG] [Thread-136685] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:35:50.239 [DEBUG] [Thread-136685] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:35:50.240 [DEBUG] [Thread-136685] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:35:50.241 [DEBUG] [Thread-136685] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T23:35:50.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T23:35:50.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:35:50.242 [DEBUG] [Thread-136685] [transport.py] [_log()] userauth is OK
2025-12-31T23:35:50.242 [DEBUG] [Thread-136685] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:35:50.242 [DEBUG] [Thread-136685] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:35:50.243 [DEBUG] [Thread-136685] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T23:35:50.243 [DEBUG] [Thread-136685] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:35:50.276 [INFO] [Thread-136685] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:35:50.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:35:50.924 [DEBUG] [Thread-136685] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:35:50.924 [DEBUG] [Thread-136685] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:35:50.924 [DEBUG] [Thread-136685] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T23:35:50.965 [DEBUG] [Thread-136685] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:35:50.965 [DEBUG] [Thread-136685] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:35:50.968 [DEBUG] [Thread-136685] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:35:50.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:35:50.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T23:35:50.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T23:35:50.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T23:35:50.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:35:50.992 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T23:35:50.993 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:35:50.993 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:35:50.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T23:35:50.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.899441 -999.00  +15.10  13.64     79  +11.60 1 1 1 1 1     0    0 2.96 -26.18 ZNESW 11.6 13.6 197.0 17.4 15.9 -20.3 15.8 -19.8 15.7 -18.6 16.0 -19.6
2025-12-31T23:35:50.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T23:35:50.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T23:35:50.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.899441
2025-12-31T23:35:50.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T23:35:50.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T23:35:50.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T23:35:50.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T23:35:50.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T23:35:50.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T23:35:35', tmtdew=4.09, humidity=76.53, cloud=0.0, wind=19.67, temperature=14.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T23:35:35', seeing=1.14, atlas_timestamp='2025-12-31T21:35:11.702', atlas_cloud=1, atlas_rain=1, zp_data=[0.15374999999999872, 0.09325000000000117, 0.1327499999999997, 0.13199999999999967, 0.45250000000000057, 0.1282500000000013, 0.10850000000000115, 0.16774999999999984, 0.12299999999999933, 0.0860000000000003, 0.12024999999999864, 0.2680000000000007, 0.2345000000000006, 0.2157499999999981, 0.0039999999999995595, 0.12149999999999928, 0.08525000000000027, 0.1775000000000002, 0.08099999999999952, 0.32124999999999915, 0.352999999999998, -0.0757500000000011, -0.8537499999999998, 0.2157499999999999, 0.10899999999999999, 0.6334999999999997, 0.49575000000000014, nan, 0.23599999999999977, -0.6414999999999988, -0.6539999999999981, 0.24600000000000044, 0.3122499999999988], zp_timestamp='2025-12-31T21:32:00')
2025-12-31T23:35:50.996 [DEBUG] [Thread-136685] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:35:51.077 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T23:35:51.090 [DEBUG] [Thread-136688] [transport.py] [_log()] starting thread (client mode): 0xb6b60580
2025-12-31T23:35:51.090 [DEBUG] [Thread-136688] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:35:51.105 [DEBUG] [Thread-136688] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T23:35:51.106 [INFO] [Thread-136688] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T23:35:51.113 [DEBUG] [Thread-136688] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:35:51.114 [DEBUG] [Thread-136688] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T23:35:51.114 [DEBUG] [Thread-136688] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:35:51.114 [DEBUG] [Thread-136688] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:35:51.114 [DEBUG] [Thread-136688] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:35:51.114 [DEBUG] [Thread-136688] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:35:51.114 [DEBUG] [Thread-136688] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:35:51.114 [DEBUG] [Thread-136688] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:35:51.114 [DEBUG] [Thread-136688] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:35:51.114 [DEBUG] [Thread-136688] [transport.py] [_log()] client lang: <none>
2025-12-31T23:35:51.114 [DEBUG] [Thread-136688] [transport.py] [_log()] server lang: <none>
2025-12-31T23:35:51.114 [DEBUG] [Thread-136688] [transport.py] [_log()] kex follows: False
2025-12-31T23:35:51.114 [DEBUG] [Thread-136688] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:35:51.115 [DEBUG] [Thread-136688] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:35:51.115 [DEBUG] [Thread-136688] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:35:51.115 [DEBUG] [Thread-136688] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:35:51.115 [DEBUG] [Thread-136688] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:35:51.115 [DEBUG] [Thread-136688] [transport.py] [_log()] Compression: none
2025-12-31T23:35:51.115 [DEBUG] [Thread-136688] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:35:51.171 [DEBUG] [Thread-136688] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:35:51.172 [DEBUG] [Thread-136688] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:35:51.172 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T23:35:51.173 [DEBUG] [Thread-136688] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T23:35:51.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:35:51.228 [DEBUG] [Thread-136688] [transport.py] [_log()] userauth is OK
2025-12-31T23:35:51.228 [DEBUG] [Thread-136688] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:35:51.228 [DEBUG] [Thread-136688] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:35:51.228 [DEBUG] [Thread-136688] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T23:35:51.228 [DEBUG] [Thread-136688] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:35:51.247 [INFO] [Thread-136688] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:35:51.248 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T23:35:51.248 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:35:52.130 [DEBUG] [Thread-136688] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:35:52.130 [DEBUG] [Thread-136688] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:35:52.178 [DEBUG] [Thread-136688] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:35:52.178 [DEBUG] [Thread-136688] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:35:52.187 [DEBUG] [Thread-136688] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:35:52.197 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:35:52.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T23:35:52.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T23:35:52.216 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:35:52.216 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:35:52.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:35:52.225 [DEBUG] [Thread-136688] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:35:52.705 [DEBUG] [Thread-136690 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:36:00.356 [DEBUG] [Thread-136691 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:36:15.398 [DEBUG] [Thread-136692 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:36:22.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T23:36:22.229 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T23:36:22.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T23:36:22.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 23, 36, 7), 4.08, 76.58, 0.0, 18.67, 14.86, 0, 0, 0, 2, 0, 0),)
2025-12-31T23:36:22.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 23:36:07
2025-12-31T23:36:23.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T23:36:23.203 [DEBUG] [Thread-136693] [transport.py] [_log()] starting thread (client mode): 0xb95f15d0
2025-12-31T23:36:23.203 [DEBUG] [Thread-136693] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:36:23.224 [DEBUG] [Thread-136693] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T23:36:23.224 [INFO] [Thread-136693] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T23:36:23.228 [DEBUG] [Thread-136693] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:36:23.228 [DEBUG] [Thread-136693] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T23:36:23.228 [DEBUG] [Thread-136693] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:36:23.228 [DEBUG] [Thread-136693] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:36:23.228 [DEBUG] [Thread-136693] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:36:23.228 [DEBUG] [Thread-136693] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:36:23.228 [DEBUG] [Thread-136693] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:36:23.228 [DEBUG] [Thread-136693] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:36:23.228 [DEBUG] [Thread-136693] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:36:23.228 [DEBUG] [Thread-136693] [transport.py] [_log()] client lang: <none>
2025-12-31T23:36:23.228 [DEBUG] [Thread-136693] [transport.py] [_log()] server lang: <none>
2025-12-31T23:36:23.228 [DEBUG] [Thread-136693] [transport.py] [_log()] kex follows: False
2025-12-31T23:36:23.228 [DEBUG] [Thread-136693] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:36:23.228 [DEBUG] [Thread-136693] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:36:23.228 [DEBUG] [Thread-136693] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:36:23.229 [DEBUG] [Thread-136693] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:36:23.229 [DEBUG] [Thread-136693] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:36:23.229 [DEBUG] [Thread-136693] [transport.py] [_log()] Compression: none
2025-12-31T23:36:23.229 [DEBUG] [Thread-136693] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:36:23.246 [DEBUG] [Thread-136693] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:36:23.247 [DEBUG] [Thread-136693] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:36:23.247 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T23:36:23.248 [DEBUG] [Thread-136693] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T23:36:23.248 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:36:23.250 [DEBUG] [Thread-136693] [transport.py] [_log()] userauth is OK
2025-12-31T23:36:23.250 [DEBUG] [Thread-136693] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:36:23.250 [DEBUG] [Thread-136693] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:36:23.250 [DEBUG] [Thread-136693] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T23:36:23.250 [DEBUG] [Thread-136693] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:36:23.269 [INFO] [Thread-136693] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:36:23.270 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:36:24.053 [DEBUG] [Thread-136693] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:36:24.053 [DEBUG] [Thread-136693] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:36:24.053 [DEBUG] [Thread-136693] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T23:36:24.094 [DEBUG] [Thread-136693] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:36:24.094 [DEBUG] [Thread-136693] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:36:24.097 [DEBUG] [Thread-136693] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:36:24.108 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:36:24.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T23:36:24.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T23:36:24.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T23:36:24.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:36:24.119 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T23:36:24.119 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:36:24.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:36:24.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T23:36:24.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.899788 -999.00  +15.10  14.03     79  +11.60 1 1 1 1 1     0    0 2.92 -28.57 ZNESW 13.1 14.0 199.7 16.9 15.9 -20.2 15.8 -19.4 15.7 -18.7 16.0 -19.5
2025-12-31T23:36:24.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T23:36:24.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T23:36:24.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.899788
2025-12-31T23:36:24.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T23:36:24.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T23:36:24.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T23:36:24.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T23:36:24.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T23:36:24.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T23:36:07', tmtdew=4.08, humidity=76.58, cloud=0.0, wind=18.67, temperature=14.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T23:36:07', seeing=1.06, atlas_timestamp='2025-12-31T21:35:41.683', atlas_cloud=1, atlas_rain=1, zp_data=[0.17874999999999908, 0.17275000000000063, 0.15225000000000044, 0.1385000000000005, -0.009499999999999176, 0.056250000000000355, 0.1379999999999999, 0.3357500000000009, 0.4535, 0.16900000000000048, 0.21325000000000038, 0.3199999999999985, 0.16699999999999982, 0.1792499999999997, -0.12400000000000055, 0.1404999999999994, 0.5912499999999996, 0.15649999999999942, 0.25099999999999945, 0.3412499999999987, 0.3269999999999982, 0.17824999999999847, 0.04475000000000051, 0.06174999999999997, 0.2959999999999994, 0.33199999999999896, 0.13375000000000092, 0.23550000000000004, 0.26200000000000045, -1.331999999999999, -1.5889999999999986, 0.19000000000000128, 0.21974999999999945], zp_timestamp='2025-12-31T21:35:00')
2025-12-31T23:36:24.122 [DEBUG] [Thread-136693] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:36:24.205 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T23:36:24.216 [DEBUG] [Thread-136696] [transport.py] [_log()] starting thread (client mode): 0xb95f0880
2025-12-31T23:36:24.217 [DEBUG] [Thread-136696] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:36:24.231 [DEBUG] [Thread-136696] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T23:36:24.231 [INFO] [Thread-136696] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T23:36:24.238 [DEBUG] [Thread-136696] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:36:24.238 [DEBUG] [Thread-136696] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T23:36:24.239 [DEBUG] [Thread-136696] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:36:24.239 [DEBUG] [Thread-136696] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:36:24.239 [DEBUG] [Thread-136696] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:36:24.239 [DEBUG] [Thread-136696] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:36:24.239 [DEBUG] [Thread-136696] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:36:24.239 [DEBUG] [Thread-136696] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:36:24.239 [DEBUG] [Thread-136696] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:36:24.239 [DEBUG] [Thread-136696] [transport.py] [_log()] client lang: <none>
2025-12-31T23:36:24.239 [DEBUG] [Thread-136696] [transport.py] [_log()] server lang: <none>
2025-12-31T23:36:24.239 [DEBUG] [Thread-136696] [transport.py] [_log()] kex follows: False
2025-12-31T23:36:24.239 [DEBUG] [Thread-136696] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:36:24.239 [DEBUG] [Thread-136696] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:36:24.239 [DEBUG] [Thread-136696] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:36:24.239 [DEBUG] [Thread-136696] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:36:24.239 [DEBUG] [Thread-136696] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:36:24.239 [DEBUG] [Thread-136696] [transport.py] [_log()] Compression: none
2025-12-31T23:36:24.239 [DEBUG] [Thread-136696] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:36:24.299 [DEBUG] [Thread-136696] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:36:24.300 [DEBUG] [Thread-136696] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:36:24.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T23:36:24.301 [DEBUG] [Thread-136696] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T23:36:24.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:36:24.355 [DEBUG] [Thread-136696] [transport.py] [_log()] userauth is OK
2025-12-31T23:36:24.355 [DEBUG] [Thread-136696] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:36:24.355 [DEBUG] [Thread-136696] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:36:24.355 [DEBUG] [Thread-136696] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T23:36:24.356 [DEBUG] [Thread-136696] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:36:24.374 [INFO] [Thread-136696] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:36:24.374 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T23:36:24.374 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:36:25.213 [DEBUG] [Thread-136696] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:36:25.214 [DEBUG] [Thread-136696] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:36:25.262 [DEBUG] [Thread-136696] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:36:25.262 [DEBUG] [Thread-136696] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:36:25.271 [DEBUG] [Thread-136696] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:36:25.280 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:36:25.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T23:36:25.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T23:36:25.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:36:25.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:36:25.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:36:25.307 [DEBUG] [Thread-136696] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:36:27.860 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:36:27.862 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:36:30.435 [DEBUG] [Thread-136698 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:36:45.491 [DEBUG] [Thread-136699 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:36:52.761 [DEBUG] [Thread-136700 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:36:55.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T23:36:55.317 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T23:36:55.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T23:36:56.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 23, 36, 39), 3.97, 77.1, 0.0, 17.06, 14.83, 0, 0, 0, 2, 0, 0),)
2025-12-31T23:36:56.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 23:36:39
2025-12-31T23:36:56.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T23:36:56.297 [DEBUG] [Thread-136701] [transport.py] [_log()] starting thread (client mode): 0xb6b635b0
2025-12-31T23:36:56.297 [DEBUG] [Thread-136701] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:36:56.317 [DEBUG] [Thread-136701] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T23:36:56.317 [INFO] [Thread-136701] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T23:36:56.321 [DEBUG] [Thread-136701] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:36:56.321 [DEBUG] [Thread-136701] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T23:36:56.321 [DEBUG] [Thread-136701] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:36:56.321 [DEBUG] [Thread-136701] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:36:56.321 [DEBUG] [Thread-136701] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:36:56.321 [DEBUG] [Thread-136701] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:36:56.321 [DEBUG] [Thread-136701] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:36:56.321 [DEBUG] [Thread-136701] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:36:56.321 [DEBUG] [Thread-136701] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:36:56.321 [DEBUG] [Thread-136701] [transport.py] [_log()] client lang: <none>
2025-12-31T23:36:56.321 [DEBUG] [Thread-136701] [transport.py] [_log()] server lang: <none>
2025-12-31T23:36:56.321 [DEBUG] [Thread-136701] [transport.py] [_log()] kex follows: False
2025-12-31T23:36:56.321 [DEBUG] [Thread-136701] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:36:56.321 [DEBUG] [Thread-136701] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:36:56.321 [DEBUG] [Thread-136701] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:36:56.322 [DEBUG] [Thread-136701] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:36:56.322 [DEBUG] [Thread-136701] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:36:56.322 [DEBUG] [Thread-136701] [transport.py] [_log()] Compression: none
2025-12-31T23:36:56.322 [DEBUG] [Thread-136701] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:36:56.334 [DEBUG] [Thread-136701] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:36:56.334 [DEBUG] [Thread-136701] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:36:56.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T23:36:56.334 [DEBUG] [Thread-136701] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T23:36:56.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:36:56.335 [DEBUG] [Thread-136701] [transport.py] [_log()] userauth is OK
2025-12-31T23:36:56.335 [DEBUG] [Thread-136701] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:36:56.335 [DEBUG] [Thread-136701] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:36:56.335 [DEBUG] [Thread-136701] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T23:36:56.335 [DEBUG] [Thread-136701] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:36:56.352 [INFO] [Thread-136701] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:36:56.352 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:36:57.026 [DEBUG] [Thread-136701] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:36:57.026 [DEBUG] [Thread-136701] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:36:57.027 [DEBUG] [Thread-136701] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T23:36:57.067 [DEBUG] [Thread-136701] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:36:57.067 [DEBUG] [Thread-136701] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:36:57.070 [DEBUG] [Thread-136701] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:36:57.081 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:36:57.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T23:36:57.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T23:36:57.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T23:36:57.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:36:57.092 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T23:36:57.092 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:36:57.092 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:36:57.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T23:36:57.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.900135 -999.00  +15.10  13.10     79  +11.60 1 1 1 1 1     0    0 2.90 -30.79 ZNESW 11.1 13.1 203.2 16.9 16.0 -20.4 15.8 -19.8 15.7 -18.7 15.9 -19.7
2025-12-31T23:36:57.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T23:36:57.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T23:36:57.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.900135
2025-12-31T23:36:57.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T23:36:57.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T23:36:57.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T23:36:57.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T23:36:57.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T23:36:57.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T23:36:39', tmtdew=3.97, humidity=77.1, cloud=0.0, wind=17.06, temperature=14.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T23:36:39', seeing=1.13, atlas_timestamp='2025-12-31T21:36:11.664', atlas_cloud=1, atlas_rain=1, zp_data=[0.17874999999999908, 0.17275000000000063, 0.15225000000000044, 0.1385000000000005, -0.009499999999999176, 0.056250000000000355, 0.1379999999999999, 0.3357500000000009, 0.4535, 0.16900000000000048, 0.21325000000000038, 0.3199999999999985, 0.16699999999999982, 0.1792499999999997, -0.12400000000000055, 0.1404999999999994, 0.5912499999999996, 0.15649999999999942, 0.25099999999999945, 0.3412499999999987, 0.3269999999999982, 0.17824999999999847, 0.04475000000000051, 0.06174999999999997, 0.2959999999999994, 0.33199999999999896, 0.13375000000000092, 0.23550000000000004, 0.26200000000000045, -1.331999999999999, -1.5889999999999986, 0.19000000000000128, 0.21974999999999945], zp_timestamp='2025-12-31T21:35:00')
2025-12-31T23:36:57.094 [DEBUG] [Thread-136701] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:36:57.185 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T23:36:57.197 [DEBUG] [Thread-136704] [transport.py] [_log()] starting thread (client mode): 0xb95f15d0
2025-12-31T23:36:57.197 [DEBUG] [Thread-136704] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:36:57.211 [DEBUG] [Thread-136704] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T23:36:57.211 [INFO] [Thread-136704] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T23:36:57.220 [DEBUG] [Thread-136704] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:36:57.221 [DEBUG] [Thread-136704] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T23:36:57.221 [DEBUG] [Thread-136704] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:36:57.221 [DEBUG] [Thread-136704] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:36:57.221 [DEBUG] [Thread-136704] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:36:57.221 [DEBUG] [Thread-136704] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:36:57.221 [DEBUG] [Thread-136704] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:36:57.221 [DEBUG] [Thread-136704] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:36:57.221 [DEBUG] [Thread-136704] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:36:57.221 [DEBUG] [Thread-136704] [transport.py] [_log()] client lang: <none>
2025-12-31T23:36:57.221 [DEBUG] [Thread-136704] [transport.py] [_log()] server lang: <none>
2025-12-31T23:36:57.221 [DEBUG] [Thread-136704] [transport.py] [_log()] kex follows: False
2025-12-31T23:36:57.222 [DEBUG] [Thread-136704] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:36:57.222 [DEBUG] [Thread-136704] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:36:57.222 [DEBUG] [Thread-136704] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:36:57.222 [DEBUG] [Thread-136704] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:36:57.222 [DEBUG] [Thread-136704] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:36:57.222 [DEBUG] [Thread-136704] [transport.py] [_log()] Compression: none
2025-12-31T23:36:57.222 [DEBUG] [Thread-136704] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:36:57.278 [DEBUG] [Thread-136704] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:36:57.279 [DEBUG] [Thread-136704] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:36:57.279 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T23:36:57.280 [DEBUG] [Thread-136704] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T23:36:57.280 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:36:57.335 [DEBUG] [Thread-136704] [transport.py] [_log()] userauth is OK
2025-12-31T23:36:57.335 [DEBUG] [Thread-136704] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:36:57.335 [DEBUG] [Thread-136704] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:36:57.335 [DEBUG] [Thread-136704] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T23:36:57.335 [DEBUG] [Thread-136704] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:36:57.350 [INFO] [Thread-136704] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:36:57.350 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T23:36:57.350 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:36:58.185 [DEBUG] [Thread-136704] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:36:58.185 [DEBUG] [Thread-136704] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:36:58.233 [DEBUG] [Thread-136704] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:36:58.233 [DEBUG] [Thread-136704] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:36:58.242 [DEBUG] [Thread-136704] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:36:58.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:36:58.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T23:36:58.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-12-31T23:36:58.277 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:36:58.278 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:36:58.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:36:58.286 [DEBUG] [Thread-136704] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:37:00.520 [DEBUG] [Thread-136706 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:37:15.565 [DEBUG] [Thread-136707 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:37:18.715 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:37:21.837 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:37:26.914 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:37:28.064 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:37:28.065 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:37:28.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T23:37:28.307 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T23:37:28.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T23:37:28.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 23, 37, 11), 3.96, 77.15, 0.0, 15.37, 14.82, 0, 0, 0, 2, 0, 0),)
2025-12-31T23:37:28.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 23:37:11
2025-12-31T23:37:29.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T23:37:29.271 [DEBUG] [Thread-136708] [transport.py] [_log()] starting thread (client mode): 0xb6b61840
2025-12-31T23:37:29.271 [DEBUG] [Thread-136708] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:37:29.289 [DEBUG] [Thread-136708] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T23:37:29.289 [INFO] [Thread-136708] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T23:37:29.292 [DEBUG] [Thread-136708] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:37:29.292 [DEBUG] [Thread-136708] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T23:37:29.292 [DEBUG] [Thread-136708] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:37:29.292 [DEBUG] [Thread-136708] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:37:29.292 [DEBUG] [Thread-136708] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:37:29.292 [DEBUG] [Thread-136708] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:37:29.292 [DEBUG] [Thread-136708] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:37:29.292 [DEBUG] [Thread-136708] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:37:29.292 [DEBUG] [Thread-136708] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:37:29.292 [DEBUG] [Thread-136708] [transport.py] [_log()] client lang: <none>
2025-12-31T23:37:29.292 [DEBUG] [Thread-136708] [transport.py] [_log()] server lang: <none>
2025-12-31T23:37:29.292 [DEBUG] [Thread-136708] [transport.py] [_log()] kex follows: False
2025-12-31T23:37:29.292 [DEBUG] [Thread-136708] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:37:29.292 [DEBUG] [Thread-136708] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:37:29.292 [DEBUG] [Thread-136708] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:37:29.292 [DEBUG] [Thread-136708] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:37:29.292 [DEBUG] [Thread-136708] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:37:29.293 [DEBUG] [Thread-136708] [transport.py] [_log()] Compression: none
2025-12-31T23:37:29.293 [DEBUG] [Thread-136708] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:37:29.308 [DEBUG] [Thread-136708] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:37:29.308 [DEBUG] [Thread-136708] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:37:29.308 [DEBUG] [Thread-136708] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T23:37:29.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T23:37:29.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:37:29.309 [DEBUG] [Thread-136708] [transport.py] [_log()] userauth is OK
2025-12-31T23:37:29.309 [DEBUG] [Thread-136708] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:37:29.309 [DEBUG] [Thread-136708] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:37:29.309 [DEBUG] [Thread-136708] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T23:37:29.309 [DEBUG] [Thread-136708] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:37:29.318 [INFO] [Thread-136708] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:37:29.318 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:37:30.077 [DEBUG] [Thread-136708] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:37:30.077 [DEBUG] [Thread-136708] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:37:30.078 [DEBUG] [Thread-136708] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T23:37:30.119 [DEBUG] [Thread-136708] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:37:30.119 [DEBUG] [Thread-136708] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:37:30.122 [DEBUG] [Thread-136708] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:37:30.134 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:37:30.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T23:37:30.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T23:37:30.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T23:37:30.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:37:30.145 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T23:37:30.145 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:37:30.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:37:30.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T23:37:30.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.900482 -999.00  +15.10  15.96     79  +11.60 1 1 1 1 1     0    0 2.81 -34.00 ZNESW 15.0 16.0 192.8 22.3 16.0 -20.4 15.8 -19.8 15.7 -18.9 15.9 -19.7
2025-12-31T23:37:30.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T23:37:30.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T23:37:30.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.900482
2025-12-31T23:37:30.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T23:37:30.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T23:37:30.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T23:37:30.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T23:37:30.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T23:37:30.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T23:37:11', tmtdew=3.96, humidity=77.15, cloud=0.0, wind=15.37, temperature=14.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T23:37:11', seeing=1.13, atlas_timestamp='2025-12-31T21:36:41.645', atlas_cloud=1, atlas_rain=1, zp_data=[0.17874999999999908, 0.17275000000000063, 0.15225000000000044, 0.1385000000000005, -0.009499999999999176, 0.056250000000000355, 0.1379999999999999, 0.3357500000000009, 0.4535, 0.16900000000000048, 0.21325000000000038, 0.3199999999999985, 0.16699999999999982, 0.1792499999999997, -0.12400000000000055, 0.1404999999999994, 0.5912499999999996, 0.15649999999999942, 0.25099999999999945, 0.3412499999999987, 0.3269999999999982, 0.17824999999999847, 0.04475000000000051, 0.06174999999999997, 0.2959999999999994, 0.33199999999999896, 0.13375000000000092, 0.23550000000000004, 0.26200000000000045, -1.331999999999999, -1.5889999999999986, 0.19000000000000128, 0.21974999999999945], zp_timestamp='2025-12-31T21:35:00')
2025-12-31T23:37:30.148 [DEBUG] [Thread-136708] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:37:30.230 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T23:37:30.242 [DEBUG] [Thread-136711] [transport.py] [_log()] starting thread (client mode): 0xb6b63af0
2025-12-31T23:37:30.242 [DEBUG] [Thread-136711] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:37:30.257 [DEBUG] [Thread-136711] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T23:37:30.257 [INFO] [Thread-136711] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T23:37:30.264 [DEBUG] [Thread-136711] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:37:30.264 [DEBUG] [Thread-136711] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T23:37:30.265 [DEBUG] [Thread-136711] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:37:30.265 [DEBUG] [Thread-136711] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:37:30.265 [DEBUG] [Thread-136711] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:37:30.265 [DEBUG] [Thread-136711] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:37:30.265 [DEBUG] [Thread-136711] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:37:30.265 [DEBUG] [Thread-136711] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:37:30.265 [DEBUG] [Thread-136711] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:37:30.265 [DEBUG] [Thread-136711] [transport.py] [_log()] client lang: <none>
2025-12-31T23:37:30.265 [DEBUG] [Thread-136711] [transport.py] [_log()] server lang: <none>
2025-12-31T23:37:30.266 [DEBUG] [Thread-136711] [transport.py] [_log()] kex follows: False
2025-12-31T23:37:30.266 [DEBUG] [Thread-136711] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:37:30.266 [DEBUG] [Thread-136711] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:37:30.266 [DEBUG] [Thread-136711] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:37:30.266 [DEBUG] [Thread-136711] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:37:30.266 [DEBUG] [Thread-136711] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:37:30.266 [DEBUG] [Thread-136711] [transport.py] [_log()] Compression: none
2025-12-31T23:37:30.266 [DEBUG] [Thread-136711] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:37:30.326 [DEBUG] [Thread-136711] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:37:30.327 [DEBUG] [Thread-136711] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:37:30.327 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T23:37:30.328 [DEBUG] [Thread-136711] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T23:37:30.329 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:37:30.383 [DEBUG] [Thread-136711] [transport.py] [_log()] userauth is OK
2025-12-31T23:37:30.383 [DEBUG] [Thread-136711] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:37:30.384 [DEBUG] [Thread-136711] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:37:30.384 [DEBUG] [Thread-136711] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T23:37:30.384 [DEBUG] [Thread-136711] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:37:30.403 [INFO] [Thread-136711] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:37: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-12-31T23:37:30.404 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:37:30.594 [DEBUG] [Thread-136713 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:37:31.240 [DEBUG] [Thread-136711] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:37:31.240 [DEBUG] [Thread-136711] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:37:31.288 [DEBUG] [Thread-136711] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:37:31.289 [DEBUG] [Thread-136711] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:37:31.298 [DEBUG] [Thread-136711] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:37:31.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:37:31.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T23:37:31.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T23:37:31.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:37:31.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:37:31.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:37:31.335 [DEBUG] [Thread-136711] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:37:32.294 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:37:45.643 [DEBUG] [Thread-136714 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:37:51.682 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:37:52.830 [DEBUG] [Thread-136715 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:37:56.086 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:38:00.675 [DEBUG] [Thread-136716 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:38:01.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T23:38:01.350 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T23:38:01.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T23:38:02.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 23, 37, 43), 3.98, 77.08, 0.0, 16.07, 14.82, 0, 0, 0, 2, 0, 0),)
2025-12-31T23:38:02.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 23:37:43
2025-12-31T23:38:02.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T23:38:02.313 [DEBUG] [Thread-136717] [transport.py] [_log()] starting thread (client mode): 0xb6b62d10
2025-12-31T23:38:02.313 [DEBUG] [Thread-136717] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:38:02.333 [DEBUG] [Thread-136717] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T23:38:02.333 [INFO] [Thread-136717] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T23:38:02.335 [DEBUG] [Thread-136717] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:38:02.335 [DEBUG] [Thread-136717] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T23:38:02.335 [DEBUG] [Thread-136717] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:38:02.335 [DEBUG] [Thread-136717] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:38:02.335 [DEBUG] [Thread-136717] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:38:02.335 [DEBUG] [Thread-136717] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:38:02.335 [DEBUG] [Thread-136717] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:38:02.335 [DEBUG] [Thread-136717] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:38:02.335 [DEBUG] [Thread-136717] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:38:02.336 [DEBUG] [Thread-136717] [transport.py] [_log()] client lang: <none>
2025-12-31T23:38:02.336 [DEBUG] [Thread-136717] [transport.py] [_log()] server lang: <none>
2025-12-31T23:38:02.336 [DEBUG] [Thread-136717] [transport.py] [_log()] kex follows: False
2025-12-31T23:38:02.336 [DEBUG] [Thread-136717] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:38:02.336 [DEBUG] [Thread-136717] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:38:02.336 [DEBUG] [Thread-136717] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:38:02.336 [DEBUG] [Thread-136717] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:38:02.336 [DEBUG] [Thread-136717] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:38:02.336 [DEBUG] [Thread-136717] [transport.py] [_log()] Compression: none
2025-12-31T23:38:02.336 [DEBUG] [Thread-136717] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:38:02.345 [DEBUG] [Thread-136717] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:38:02.346 [DEBUG] [Thread-136717] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:38:02.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T23:38:02.348 [DEBUG] [Thread-136717] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T23:38:02.348 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:38:02.350 [DEBUG] [Thread-136717] [transport.py] [_log()] userauth is OK
2025-12-31T23:38:02.350 [DEBUG] [Thread-136717] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:38:02.350 [DEBUG] [Thread-136717] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:38:02.351 [DEBUG] [Thread-136717] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T23:38:02.351 [DEBUG] [Thread-136717] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:38:02.388 [INFO] [Thread-136717] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:38:02.388 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:38:03.066 [DEBUG] [Thread-136717] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:38:03.067 [DEBUG] [Thread-136717] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:38:03.067 [DEBUG] [Thread-136717] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T23:38:03.108 [DEBUG] [Thread-136717] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:38:03.108 [DEBUG] [Thread-136717] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:38:03.111 [DEBUG] [Thread-136717] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:38:03.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:38:03.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T23:38:03.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T23:38:03.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T23:38:03.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:38:03.132 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T23:38:03.132 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:38:03.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:38:03.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T23:38:03.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.901177 -999.00  +15.00  13.09     79  +11.50 1 1 1 1 1     0    0 2.71 -36.24 ZNESW 15.0 13.1 198.4 14.8 15.9 -20.4 15.8 -19.7 15.7 -18.8 15.9 -19.9
2025-12-31T23:38:03.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T23:38:03.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T23:38:03.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.901177
2025-12-31T23:38:03.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T23:38:03.134 [DEBUG] [Thread-136717] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:38:03.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T23:38:03.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T23:38:03.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T23:38:03.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T23:38:03.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T23:37:43', tmtdew=3.98, humidity=77.08, cloud=0.0, wind=16.07, temperature=14.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T23:37:43', seeing=1.18, atlas_timestamp='2025-12-31T21:37:41.693', atlas_cloud=1, atlas_rain=1, zp_data=[0.17874999999999908, 0.17275000000000063, 0.15225000000000044, 0.1385000000000005, -0.009499999999999176, 0.056250000000000355, 0.1379999999999999, 0.3357500000000009, 0.4535, 0.16900000000000048, 0.21325000000000038, 0.3199999999999985, 0.16699999999999982, 0.1792499999999997, -0.12400000000000055, 0.1404999999999994, 0.5912499999999996, 0.15649999999999942, 0.25099999999999945, 0.3412499999999987, 0.3269999999999982, 0.17824999999999847, 0.04475000000000051, 0.06174999999999997, 0.2959999999999994, 0.33199999999999896, 0.13375000000000092, 0.23550000000000004, 0.26200000000000045, -1.331999999999999, -1.5889999999999986, 0.19000000000000128, 0.21974999999999945], zp_timestamp='2025-12-31T21:35:00')
2025-12-31T23:38:03.227 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T23:38:03.240 [DEBUG] [Thread-136720] [transport.py] [_log()] starting thread (client mode): 0xb1797a00
2025-12-31T23:38:03.240 [DEBUG] [Thread-136720] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:38:03.256 [DEBUG] [Thread-136720] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T23:38:03.256 [INFO] [Thread-136720] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T23:38:03.264 [DEBUG] [Thread-136720] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:38:03.264 [DEBUG] [Thread-136720] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T23:38:03.264 [DEBUG] [Thread-136720] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:38:03.264 [DEBUG] [Thread-136720] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:38:03.264 [DEBUG] [Thread-136720] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:38:03.264 [DEBUG] [Thread-136720] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:38:03.264 [DEBUG] [Thread-136720] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:38:03.264 [DEBUG] [Thread-136720] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:38:03.264 [DEBUG] [Thread-136720] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:38:03.264 [DEBUG] [Thread-136720] [transport.py] [_log()] client lang: <none>
2025-12-31T23:38:03.264 [DEBUG] [Thread-136720] [transport.py] [_log()] server lang: <none>
2025-12-31T23:38:03.265 [DEBUG] [Thread-136720] [transport.py] [_log()] kex follows: False
2025-12-31T23:38:03.265 [DEBUG] [Thread-136720] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:38:03.265 [DEBUG] [Thread-136720] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:38:03.265 [DEBUG] [Thread-136720] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:38:03.265 [DEBUG] [Thread-136720] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:38:03.265 [DEBUG] [Thread-136720] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:38:03.265 [DEBUG] [Thread-136720] [transport.py] [_log()] Compression: none
2025-12-31T23:38:03.265 [DEBUG] [Thread-136720] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:38:03.326 [DEBUG] [Thread-136720] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:38:03.326 [DEBUG] [Thread-136720] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:38:03.327 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T23:38:03.327 [DEBUG] [Thread-136720] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T23:38:03.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:38:03.384 [DEBUG] [Thread-136720] [transport.py] [_log()] userauth is OK
2025-12-31T23:38:03.384 [DEBUG] [Thread-136720] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:38:03.384 [DEBUG] [Thread-136720] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:38:03.384 [DEBUG] [Thread-136720] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T23:38:03.384 [DEBUG] [Thread-136720] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:38:03.403 [INFO] [Thread-136720] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:38:03.404 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T23:38:03.404 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:38:04.303 [DEBUG] [Thread-136720] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:38:04.303 [DEBUG] [Thread-136720] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:38:04.351 [DEBUG] [Thread-136720] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:38:04.351 [DEBUG] [Thread-136720] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:38:04.361 [DEBUG] [Thread-136720] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:38:04.370 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:38:04.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-12-31T23:38:04.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T23:38:04.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:38:04.388 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:38:04.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:38:04.396 [DEBUG] [Thread-136720] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:38:15.484 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:38:15.712 [DEBUG] [Thread-136722 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:38:19.860 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:38:26.812 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:38:28.266 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:38:28.268 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:38:30.760 [DEBUG] [Thread-136723 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:38:31.187 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:38:34.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T23:38:34.418 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T23:38:34.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T23:38:35.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 23, 38, 15), 3.96, 77.15, 0.0, 16.18, 14.83, 0, 0, 0, 2, 0, 0),)
2025-12-31T23:38:35.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 23:38:15
2025-12-31T23:38:35.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T23:38:35.433 [DEBUG] [Thread-136724] [transport.py] [_log()] starting thread (client mode): 0xb9578f10
2025-12-31T23:38:35.433 [DEBUG] [Thread-136724] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:38:35.454 [DEBUG] [Thread-136724] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T23:38:35.454 [INFO] [Thread-136724] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T23:38:35.456 [DEBUG] [Thread-136724] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:38:35.456 [DEBUG] [Thread-136724] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T23:38:35.456 [DEBUG] [Thread-136724] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:38:35.456 [DEBUG] [Thread-136724] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:38:35.456 [DEBUG] [Thread-136724] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:38:35.456 [DEBUG] [Thread-136724] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:38:35.456 [DEBUG] [Thread-136724] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:38:35.456 [DEBUG] [Thread-136724] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:38:35.456 [DEBUG] [Thread-136724] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:38:35.456 [DEBUG] [Thread-136724] [transport.py] [_log()] client lang: <none>
2025-12-31T23:38:35.456 [DEBUG] [Thread-136724] [transport.py] [_log()] server lang: <none>
2025-12-31T23:38:35.456 [DEBUG] [Thread-136724] [transport.py] [_log()] kex follows: False
2025-12-31T23:38:35.456 [DEBUG] [Thread-136724] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:38:35.456 [DEBUG] [Thread-136724] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:38:35.456 [DEBUG] [Thread-136724] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:38:35.456 [DEBUG] [Thread-136724] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:38:35.456 [DEBUG] [Thread-136724] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:38:35.456 [DEBUG] [Thread-136724] [transport.py] [_log()] Compression: none
2025-12-31T23:38:35.456 [DEBUG] [Thread-136724] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:38:35.463 [DEBUG] [Thread-136724] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:38:35.463 [DEBUG] [Thread-136724] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:38:35.463 [DEBUG] [Thread-136724] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T23:38:35.463 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T23:38:35.463 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:38:35.464 [DEBUG] [Thread-136724] [transport.py] [_log()] userauth is OK
2025-12-31T23:38:35.464 [DEBUG] [Thread-136724] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:38:35.464 [DEBUG] [Thread-136724] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:38:35.464 [DEBUG] [Thread-136724] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T23:38:35.464 [DEBUG] [Thread-136724] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:38:35.479 [INFO] [Thread-136724] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:38:35.479 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:38:36.053 [DEBUG] [Thread-136724] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:38:36.053 [DEBUG] [Thread-136724] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:38:36.053 [DEBUG] [Thread-136724] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T23:38:36.094 [DEBUG] [Thread-136724] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:38:36.094 [DEBUG] [Thread-136724] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:38:36.097 [DEBUG] [Thread-136724] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:38:36.102 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:38:36.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T23:38:36.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T23:38:36.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T23:38:36.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:38:36.108 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T23:38:36.108 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:38:36.108 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:38:36.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T23:38:36.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.901524 -999.00  +15.00  13.74     79  +11.50 1 1 1 1 1     0    0 2.60 -37.46 ZNESW 10.4 13.7 194.6 20.5 15.9 -20.6 15.8 -20.0 15.6 -18.7 15.9 -19.8
2025-12-31T23:38:36.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T23:38:36.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T23:38:36.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.901524
2025-12-31T23:38:36.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T23:38:36.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T23:38:36.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T23:38:36.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T23:38:36.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T23:38:36.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T23:38:15', tmtdew=3.96, humidity=77.15, cloud=0.0, wind=16.18, temperature=14.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T23:38:15', seeing=1.18, atlas_timestamp='2025-12-31T21:38:11.674', atlas_cloud=1, atlas_rain=1, zp_data=[0.17874999999999908, 0.17275000000000063, 0.15225000000000044, 0.1385000000000005, -0.009499999999999176, 0.056250000000000355, 0.1379999999999999, 0.3357500000000009, 0.4535, 0.16900000000000048, 0.21325000000000038, 0.3199999999999985, 0.16699999999999982, 0.1792499999999997, -0.12400000000000055, 0.1404999999999994, 0.5912499999999996, 0.15649999999999942, 0.25099999999999945, 0.3412499999999987, 0.3269999999999982, 0.17824999999999847, 0.04475000000000051, 0.06174999999999997, 0.2959999999999994, 0.33199999999999896, 0.13375000000000092, 0.23550000000000004, 0.26200000000000045, -1.331999999999999, -1.5889999999999986, 0.19000000000000128, 0.21974999999999945], zp_timestamp='2025-12-31T21:35:00')
2025-12-31T23:38:36.110 [DEBUG] [Thread-136724] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:38:36.182 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T23:38:36.194 [DEBUG] [Thread-136727] [transport.py] [_log()] starting thread (client mode): 0xb957b370
2025-12-31T23:38:36.194 [DEBUG] [Thread-136727] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:38:36.209 [DEBUG] [Thread-136727] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T23:38:36.209 [INFO] [Thread-136727] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T23:38:36.217 [DEBUG] [Thread-136727] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:38:36.217 [DEBUG] [Thread-136727] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T23:38:36.217 [DEBUG] [Thread-136727] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:38:36.217 [DEBUG] [Thread-136727] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:38:36.217 [DEBUG] [Thread-136727] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:38:36.217 [DEBUG] [Thread-136727] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:38:36.217 [DEBUG] [Thread-136727] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:38:36.217 [DEBUG] [Thread-136727] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:38:36.217 [DEBUG] [Thread-136727] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:38:36.217 [DEBUG] [Thread-136727] [transport.py] [_log()] client lang: <none>
2025-12-31T23:38:36.217 [DEBUG] [Thread-136727] [transport.py] [_log()] server lang: <none>
2025-12-31T23:38:36.217 [DEBUG] [Thread-136727] [transport.py] [_log()] kex follows: False
2025-12-31T23:38:36.217 [DEBUG] [Thread-136727] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:38:36.217 [DEBUG] [Thread-136727] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:38:36.217 [DEBUG] [Thread-136727] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:38:36.217 [DEBUG] [Thread-136727] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:38:36.217 [DEBUG] [Thread-136727] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:38:36.217 [DEBUG] [Thread-136727] [transport.py] [_log()] Compression: none
2025-12-31T23:38:36.217 [DEBUG] [Thread-136727] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:38:36.274 [DEBUG] [Thread-136727] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:38:36.275 [DEBUG] [Thread-136727] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:38:36.275 [DEBUG] [Thread-136727] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T23:38:36.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T23:38:36.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:38:36.331 [DEBUG] [Thread-136727] [transport.py] [_log()] userauth is OK
2025-12-31T23:38:36.331 [DEBUG] [Thread-136727] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:38:36.331 [DEBUG] [Thread-136727] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:38:36.331 [DEBUG] [Thread-136727] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T23:38:36.331 [DEBUG] [Thread-136727] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:38:36.345 [INFO] [Thread-136727] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:38:36.345 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T23:38:36.345 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:38:37.182 [DEBUG] [Thread-136727] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:38:37.182 [DEBUG] [Thread-136727] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:38:37.230 [DEBUG] [Thread-136727] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:38:37.230 [DEBUG] [Thread-136727] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:38:37.238 [DEBUG] [Thread-136727] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:38:37.246 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:38:37.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T23:38:37.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T23:38:37.264 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:38:37.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:38:37.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:38:37.272 [DEBUG] [Thread-136727] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:38:45.791 [DEBUG] [Thread-136729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:38:52.902 [DEBUG] [Thread-136730 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:39:00.844 [DEBUG] [Thread-136731 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:39:07.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T23:39:07.277 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T23:39:07.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-12-31T23:39:07.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 23, 38, 47), 3.95, 77.2, 0.0, 16.83, 14.83, 0, 0, 0, 2, 0, 0),)
2025-12-31T23:39:07.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 23:38:47
2025-12-31T23:39:08.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T23:39:08.261 [DEBUG] [Thread-136732] [transport.py] [_log()] starting thread (client mode): 0xb1744d60
2025-12-31T23:39:08.262 [DEBUG] [Thread-136732] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:39:08.281 [DEBUG] [Thread-136732] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T23:39:08.281 [INFO] [Thread-136732] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T23:39:08.285 [DEBUG] [Thread-136732] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:39:08.285 [DEBUG] [Thread-136732] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T23:39:08.285 [DEBUG] [Thread-136732] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:39:08.285 [DEBUG] [Thread-136732] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:39:08.285 [DEBUG] [Thread-136732] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:39:08.285 [DEBUG] [Thread-136732] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:39:08.285 [DEBUG] [Thread-136732] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:39:08.285 [DEBUG] [Thread-136732] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:39:08.285 [DEBUG] [Thread-136732] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:39:08.285 [DEBUG] [Thread-136732] [transport.py] [_log()] client lang: <none>
2025-12-31T23:39:08.285 [DEBUG] [Thread-136732] [transport.py] [_log()] server lang: <none>
2025-12-31T23:39:08.285 [DEBUG] [Thread-136732] [transport.py] [_log()] kex follows: False
2025-12-31T23:39:08.285 [DEBUG] [Thread-136732] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:39:08.285 [DEBUG] [Thread-136732] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:39:08.286 [DEBUG] [Thread-136732] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:39:08.286 [DEBUG] [Thread-136732] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:39:08.286 [DEBUG] [Thread-136732] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:39:08.286 [DEBUG] [Thread-136732] [transport.py] [_log()] Compression: none
2025-12-31T23:39:08.286 [DEBUG] [Thread-136732] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:39:08.302 [DEBUG] [Thread-136732] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:39:08.303 [DEBUG] [Thread-136732] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:39:08.303 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T23:39:08.304 [DEBUG] [Thread-136732] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T23:39:08.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:39:08.306 [DEBUG] [Thread-136732] [transport.py] [_log()] userauth is OK
2025-12-31T23:39:08.306 [DEBUG] [Thread-136732] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:39:08.306 [DEBUG] [Thread-136732] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:39:08.306 [DEBUG] [Thread-136732] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T23:39:08.306 [DEBUG] [Thread-136732] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:39:08.323 [INFO] [Thread-136732] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:39:08.323 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:39:08.954 [DEBUG] [Thread-136732] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:39:08.954 [DEBUG] [Thread-136732] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:39:08.954 [DEBUG] [Thread-136732] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T23:39:08.996 [DEBUG] [Thread-136732] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:39:08.997 [DEBUG] [Thread-136732] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:39:08.999 [DEBUG] [Thread-136732] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:39:09.011 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:39:09.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T23:39:09.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T23:39:09.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T23:39:09.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:39:09.021 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T23:39:09.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:39:09.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:39:09.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T23:39:09.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.901871 -999.00  +15.00  13.99     79  +11.50 1 1 1 1 1     0    0 2.51 -41.43 ZNESW 16.8 14.0 194.6 15.9 15.9 -20.6 15.7 -19.7 15.7 -18.9 15.9 -20.0
2025-12-31T23:39:09.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T23:39:09.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T23:39:09.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.901871
2025-12-31T23:39:09.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T23:39:09.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T23:39:09.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T23:39:09.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T23:39:09.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T23:39:09.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T23:38:47', tmtdew=3.95, humidity=77.2, cloud=0.0, wind=16.83, temperature=14.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T23:38:47', seeing=0.99, atlas_timestamp='2025-12-31T21:38:41.654', atlas_cloud=1, atlas_rain=1, zp_data=[0.17874999999999908, 0.17275000000000063, 0.15225000000000044, 0.1385000000000005, -0.009499999999999176, 0.056250000000000355, 0.1379999999999999, 0.3357500000000009, 0.4535, 0.16900000000000048, 0.21325000000000038, 0.3199999999999985, 0.16699999999999982, 0.1792499999999997, -0.12400000000000055, 0.1404999999999994, 0.5912499999999996, 0.15649999999999942, 0.25099999999999945, 0.3412499999999987, 0.3269999999999982, 0.17824999999999847, 0.04475000000000051, 0.06174999999999997, 0.2959999999999994, 0.33199999999999896, 0.13375000000000092, 0.23550000000000004, 0.26200000000000045, -1.331999999999999, -1.5889999999999986, 0.19000000000000128, 0.21974999999999945], zp_timestamp='2025-12-31T21:35:00')
2025-12-31T23:39:09.023 [DEBUG] [Thread-136732] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:39:09.104 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T23:39:09.116 [DEBUG] [Thread-136735] [transport.py] [_log()] starting thread (client mode): 0xb17456c0
2025-12-31T23:39:09.116 [DEBUG] [Thread-136735] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:39:09.130 [DEBUG] [Thread-136735] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T23:39:09.130 [INFO] [Thread-136735] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T23:39:09.138 [DEBUG] [Thread-136735] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:39:09.138 [DEBUG] [Thread-136735] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T23:39:09.138 [DEBUG] [Thread-136735] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:39:09.138 [DEBUG] [Thread-136735] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:39:09.138 [DEBUG] [Thread-136735] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:39:09.138 [DEBUG] [Thread-136735] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:39:09.138 [DEBUG] [Thread-136735] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:39:09.138 [DEBUG] [Thread-136735] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:39:09.138 [DEBUG] [Thread-136735] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:39:09.138 [DEBUG] [Thread-136735] [transport.py] [_log()] client lang: <none>
2025-12-31T23:39:09.138 [DEBUG] [Thread-136735] [transport.py] [_log()] server lang: <none>
2025-12-31T23:39:09.138 [DEBUG] [Thread-136735] [transport.py] [_log()] kex follows: False
2025-12-31T23:39:09.138 [DEBUG] [Thread-136735] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:39:09.138 [DEBUG] [Thread-136735] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:39:09.138 [DEBUG] [Thread-136735] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:39:09.138 [DEBUG] [Thread-136735] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:39:09.138 [DEBUG] [Thread-136735] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:39:09.138 [DEBUG] [Thread-136735] [transport.py] [_log()] Compression: none
2025-12-31T23:39:09.138 [DEBUG] [Thread-136735] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:39:09.194 [DEBUG] [Thread-136735] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:39:09.195 [DEBUG] [Thread-136735] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:39:09.195 [DEBUG] [Thread-136735] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T23:39:09.196 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T23:39:09.196 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:39:09.251 [DEBUG] [Thread-136735] [transport.py] [_log()] userauth is OK
2025-12-31T23:39:09.251 [DEBUG] [Thread-136735] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:39:09.251 [DEBUG] [Thread-136735] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:39:09.252 [DEBUG] [Thread-136735] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T23:39:09.252 [DEBUG] [Thread-136735] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:39:09.270 [INFO] [Thread-136735] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:39:09.270 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T23:39:09.270 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:39:10.169 [DEBUG] [Thread-136735] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:39:10.169 [DEBUG] [Thread-136735] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:39:10.218 [DEBUG] [Thread-136735] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:39:10.218 [DEBUG] [Thread-136735] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:39:10.227 [DEBUG] [Thread-136735] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:39:10.236 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:39: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')
2025-12-31T23:39:10.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T23:39:10.252 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:39:10.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:39:10.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:39:10.260 [DEBUG] [Thread-136735] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:39:15.875 [DEBUG] [Thread-136737 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:39:28.467 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:39:28.468 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:39:30.320 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:39:30.933 [DEBUG] [Thread-136738 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:39:33.360 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:39:40.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T23:39:40.283 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T23:39:40.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T23:39:40.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 23, 39, 20), 3.96, 77.18, 0.0, 18.62, 14.82, 0, 0, 0, 2, 0, 0),)
2025-12-31T23:39:40.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 23:39:20
2025-12-31T23:39:41.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T23:39:41.249 [DEBUG] [Thread-136739] [transport.py] [_log()] starting thread (client mode): 0xb1796380
2025-12-31T23:39:41.250 [DEBUG] [Thread-136739] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:39:41.270 [DEBUG] [Thread-136739] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T23:39:41.271 [INFO] [Thread-136739] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T23:39:41.273 [DEBUG] [Thread-136739] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:39:41.273 [DEBUG] [Thread-136739] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T23:39:41.274 [DEBUG] [Thread-136739] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:39:41.274 [DEBUG] [Thread-136739] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:39:41.274 [DEBUG] [Thread-136739] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:39:41.274 [DEBUG] [Thread-136739] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:39:41.274 [DEBUG] [Thread-136739] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:39:41.274 [DEBUG] [Thread-136739] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:39:41.274 [DEBUG] [Thread-136739] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:39:41.274 [DEBUG] [Thread-136739] [transport.py] [_log()] client lang: <none>
2025-12-31T23:39:41.274 [DEBUG] [Thread-136739] [transport.py] [_log()] server lang: <none>
2025-12-31T23:39:41.274 [DEBUG] [Thread-136739] [transport.py] [_log()] kex follows: False
2025-12-31T23:39:41.274 [DEBUG] [Thread-136739] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:39:41.274 [DEBUG] [Thread-136739] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:39:41.274 [DEBUG] [Thread-136739] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:39:41.274 [DEBUG] [Thread-136739] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:39:41.274 [DEBUG] [Thread-136739] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:39:41.274 [DEBUG] [Thread-136739] [transport.py] [_log()] Compression: none
2025-12-31T23:39:41.274 [DEBUG] [Thread-136739] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:39:41.295 [DEBUG] [Thread-136739] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:39:41.296 [DEBUG] [Thread-136739] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:39:41.296 [DEBUG] [Thread-136739] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T23:39:41.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T23:39:41.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:39:41.298 [DEBUG] [Thread-136739] [transport.py] [_log()] userauth is OK
2025-12-31T23:39:41.299 [DEBUG] [Thread-136739] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:39:41.299 [DEBUG] [Thread-136739] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:39:41.299 [DEBUG] [Thread-136739] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T23:39:41.299 [DEBUG] [Thread-136739] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:39:41.324 [INFO] [Thread-136739] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:39:41.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:39:41.965 [DEBUG] [Thread-136739] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:39:41.965 [DEBUG] [Thread-136739] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:39:41.966 [DEBUG] [Thread-136739] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T23:39:42.006 [DEBUG] [Thread-136739] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:39:42.006 [DEBUG] [Thread-136739] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:39:42.010 [DEBUG] [Thread-136739] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:39:42.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:39:42.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T23:39:42.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T23:39:42.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T23:39:42.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:39:42.035 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T23:39:42.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:39:42.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:39:42.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T23:39:42.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.902218 -999.00  +15.00  14.78     80  +11.50 1 1 1 2 1     0    0 2.49 -40.40 ZNESW 12.4 14.8 204.9 19.4 15.9 -20.6 15.7 -19.9 15.6 -19.0 15.9 -19.9
2025-12-31T23:39:42.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T23:39:42.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T23:39:42.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.902218
2025-12-31T23:39:42.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T23:39:42.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T23:39:42.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T23:39:42.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T23:39:42.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T23:39:42.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T23:39:20', tmtdew=3.96, humidity=77.18, cloud=0.0, wind=18.62, temperature=14.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T23:39:20', seeing=1.09, atlas_timestamp='2025-12-31T21:39:11.635', atlas_cloud=1, atlas_rain=1, zp_data=[0.17874999999999908, 0.17275000000000063, 0.15225000000000044, 0.1385000000000005, -0.009499999999999176, 0.056250000000000355, 0.1379999999999999, 0.3357500000000009, 0.4535, 0.16900000000000048, 0.21325000000000038, 0.3199999999999985, 0.16699999999999982, 0.1792499999999997, -0.12400000000000055, 0.1404999999999994, 0.5912499999999996, 0.15649999999999942, 0.25099999999999945, 0.3412499999999987, 0.3269999999999982, 0.17824999999999847, 0.04475000000000051, 0.06174999999999997, 0.2959999999999994, 0.33199999999999896, 0.13375000000000092, 0.23550000000000004, 0.26200000000000045, -1.331999999999999, -1.5889999999999986, 0.19000000000000128, 0.21974999999999945], zp_timestamp='2025-12-31T21:38:00')
2025-12-31T23:39:42.038 [DEBUG] [Thread-136739] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:39:42.121 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T23:39:42.133 [DEBUG] [Thread-136742] [transport.py] [_log()] starting thread (client mode): 0xb9579270
2025-12-31T23:39:42.134 [DEBUG] [Thread-136742] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:39:42.147 [DEBUG] [Thread-136742] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T23:39:42.148 [INFO] [Thread-136742] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T23:39:42.155 [DEBUG] [Thread-136742] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:39:42.155 [DEBUG] [Thread-136742] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T23:39:42.156 [DEBUG] [Thread-136742] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:39:42.156 [DEBUG] [Thread-136742] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:39:42.156 [DEBUG] [Thread-136742] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:39:42.156 [DEBUG] [Thread-136742] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:39:42.156 [DEBUG] [Thread-136742] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:39:42.156 [DEBUG] [Thread-136742] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:39:42.156 [DEBUG] [Thread-136742] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:39:42.156 [DEBUG] [Thread-136742] [transport.py] [_log()] client lang: <none>
2025-12-31T23:39:42.156 [DEBUG] [Thread-136742] [transport.py] [_log()] server lang: <none>
2025-12-31T23:39:42.156 [DEBUG] [Thread-136742] [transport.py] [_log()] kex follows: False
2025-12-31T23:39:42.156 [DEBUG] [Thread-136742] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:39:42.156 [DEBUG] [Thread-136742] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:39:42.156 [DEBUG] [Thread-136742] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:39:42.156 [DEBUG] [Thread-136742] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:39:42.156 [DEBUG] [Thread-136742] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:39:42.156 [DEBUG] [Thread-136742] [transport.py] [_log()] Compression: none
2025-12-31T23:39:42.156 [DEBUG] [Thread-136742] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:39:42.214 [DEBUG] [Thread-136742] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:39:42.215 [DEBUG] [Thread-136742] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:39:42.215 [DEBUG] [Thread-136742] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T23:39:42.216 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T23:39:42.216 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:39:42.276 [DEBUG] [Thread-136742] [transport.py] [_log()] userauth is OK
2025-12-31T23:39:42.276 [DEBUG] [Thread-136742] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:39:42.277 [DEBUG] [Thread-136742] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:39:42.277 [DEBUG] [Thread-136742] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T23:39:42.277 [DEBUG] [Thread-136742] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:39:42.297 [INFO] [Thread-136742] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:39:42.297 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T23:39:42.298 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:39:43.075 [DEBUG] [Thread-136742] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:39:43.075 [DEBUG] [Thread-136742] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:39:43.123 [DEBUG] [Thread-136742] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:39:43.123 [DEBUG] [Thread-136742] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:39:43.133 [DEBUG] [Thread-136742] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:39:43.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:39:43.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T23:39:43.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T23:39:43.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:39:43.163 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:39:43.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:39:43.172 [DEBUG] [Thread-136742] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:39:45.966 [DEBUG] [Thread-136744 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:39:52.955 [DEBUG] [Thread-136745 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:40:01.005 [DEBUG] [Thread-136746 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:40:13.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T23:40:13.185 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T23:40:13.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-12-31T23:40:13.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 23, 39, 52), 3.95, 77.2, 0.0, 15.86, 14.78, 0, 0, 0, 2, 0, 0),)
2025-12-31T23:40:13.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 23:39:52
2025-12-31T23:40:13.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T23:40:14.144 [DEBUG] [Thread-136747] [transport.py] [_log()] starting thread (client mode): 0xb17941c0
2025-12-31T23:40:14.144 [DEBUG] [Thread-136747] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:40:14.164 [DEBUG] [Thread-136747] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T23:40:14.165 [INFO] [Thread-136747] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T23:40:14.168 [DEBUG] [Thread-136747] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:40:14.168 [DEBUG] [Thread-136747] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T23:40:14.168 [DEBUG] [Thread-136747] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:40:14.168 [DEBUG] [Thread-136747] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:40:14.168 [DEBUG] [Thread-136747] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:40:14.168 [DEBUG] [Thread-136747] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:40:14.168 [DEBUG] [Thread-136747] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:40:14.168 [DEBUG] [Thread-136747] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:40:14.168 [DEBUG] [Thread-136747] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:40:14.168 [DEBUG] [Thread-136747] [transport.py] [_log()] client lang: <none>
2025-12-31T23:40:14.168 [DEBUG] [Thread-136747] [transport.py] [_log()] server lang: <none>
2025-12-31T23:40:14.168 [DEBUG] [Thread-136747] [transport.py] [_log()] kex follows: False
2025-12-31T23:40:14.168 [DEBUG] [Thread-136747] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:40:14.168 [DEBUG] [Thread-136747] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:40:14.168 [DEBUG] [Thread-136747] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:40:14.169 [DEBUG] [Thread-136747] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:40:14.169 [DEBUG] [Thread-136747] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:40:14.169 [DEBUG] [Thread-136747] [transport.py] [_log()] Compression: none
2025-12-31T23:40:14.169 [DEBUG] [Thread-136747] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:40:14.187 [DEBUG] [Thread-136747] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:40:14.188 [DEBUG] [Thread-136747] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:40:14.188 [DEBUG] [Thread-136747] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T23:40:14.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T23:40:14.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:40:14.190 [DEBUG] [Thread-136747] [transport.py] [_log()] userauth is OK
2025-12-31T23:40:14.190 [DEBUG] [Thread-136747] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:40:14.190 [DEBUG] [Thread-136747] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:40:14.190 [DEBUG] [Thread-136747] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T23:40:14.190 [DEBUG] [Thread-136747] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:40:14.215 [INFO] [Thread-136747] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:40:14.216 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:40:15.399 [DEBUG] [Thread-136747] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:40:15.400 [DEBUG] [Thread-136747] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:40:15.400 [DEBUG] [Thread-136747] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T23:40:15.441 [DEBUG] [Thread-136747] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:40:15.442 [DEBUG] [Thread-136747] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:40:15.444 [DEBUG] [Thread-136747] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:40:15.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:40:15.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T23:40:15.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T23:40:15.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T23:40:15.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:40:15.554 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T23:40:15.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:40:15.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:40:15.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T23:40:15.555 [WARNING] [poll_weather_worker] [driver.py] [poll_weather_state()] Unable to get atlas cloud data: list index out of range
2025-12-31T23:40:15.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T23:39:52', tmtdew=3.95, humidity=77.2, cloud=0.0, wind=15.86, temperature=14.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T23:39:52', seeing=1.2, atlas_timestamp=None, atlas_cloud=None, atlas_rain=None, zp_data=[0.17874999999999908, 0.17275000000000063, 0.15225000000000044, 0.1385000000000005, -0.009499999999999176, 0.056250000000000355, 0.1379999999999999, 0.3357500000000009, 0.4535, 0.16900000000000048, 0.21325000000000038, 0.3199999999999985, 0.16699999999999982, 0.1792499999999997, -0.12400000000000055, 0.1404999999999994, 0.5912499999999996, 0.15649999999999942, 0.25099999999999945, 0.3412499999999987, 0.3269999999999982, 0.17824999999999847, 0.04475000000000051, 0.06174999999999997, 0.2959999999999994, 0.33199999999999896, 0.13375000000000092, 0.23550000000000004, 0.26200000000000045, -1.331999999999999, -1.5889999999999986, 0.19000000000000128, 0.21974999999999945], zp_timestamp='2025-12-31T21:38:00')
2025-12-31T23:40:15.557 [DEBUG] [Thread-136747] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:40:15.643 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T23:40:15.656 [DEBUG] [Thread-136750] [transport.py] [_log()] starting thread (client mode): 0xb17446d0
2025-12-31T23:40:15.656 [DEBUG] [Thread-136750] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:40:15.670 [DEBUG] [Thread-136750] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T23:40:15.670 [INFO] [Thread-136750] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T23:40:15.678 [DEBUG] [Thread-136750] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:40:15.679 [DEBUG] [Thread-136750] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T23:40:15.679 [DEBUG] [Thread-136750] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:40:15.679 [DEBUG] [Thread-136750] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:40:15.679 [DEBUG] [Thread-136750] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:40:15.679 [DEBUG] [Thread-136750] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:40:15.679 [DEBUG] [Thread-136750] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:40:15.679 [DEBUG] [Thread-136750] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:40:15.679 [DEBUG] [Thread-136750] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:40:15.679 [DEBUG] [Thread-136750] [transport.py] [_log()] client lang: <none>
2025-12-31T23:40:15.680 [DEBUG] [Thread-136750] [transport.py] [_log()] server lang: <none>
2025-12-31T23:40:15.680 [DEBUG] [Thread-136750] [transport.py] [_log()] kex follows: False
2025-12-31T23:40:15.680 [DEBUG] [Thread-136750] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:40:15.680 [DEBUG] [Thread-136750] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:40:15.680 [DEBUG] [Thread-136750] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:40:15.680 [DEBUG] [Thread-136750] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:40:15.680 [DEBUG] [Thread-136750] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:40:15.680 [DEBUG] [Thread-136750] [transport.py] [_log()] Compression: none
2025-12-31T23:40:15.681 [DEBUG] [Thread-136750] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:40:15.735 [DEBUG] [Thread-136750] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:40:15.736 [DEBUG] [Thread-136750] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:40:15.736 [DEBUG] [Thread-136750] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T23:40:15.737 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T23:40:15.737 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:40:15.791 [DEBUG] [Thread-136750] [transport.py] [_log()] userauth is OK
2025-12-31T23:40:15.792 [DEBUG] [Thread-136750] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:40:15.792 [DEBUG] [Thread-136750] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:40:15.792 [DEBUG] [Thread-136750] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T23:40:15.792 [DEBUG] [Thread-136750] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:40:15.811 [INFO] [Thread-136750] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:40:15.812 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T23:40:15.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:40:16.039 [DEBUG] [Thread-136752 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:40:16.700 [DEBUG] [Thread-136750] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:40:16.700 [DEBUG] [Thread-136750] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:40:16.748 [DEBUG] [Thread-136750] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:40:16.748 [DEBUG] [Thread-136750] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:40:16.757 [DEBUG] [Thread-136750] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:40:16.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:40:16.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T23:40:16.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T23:40:16.783 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:40:16.784 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:40:16.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:40:16.792 [DEBUG] [Thread-136750] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:40:28.667 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:40:28.667 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:40:31.097 [DEBUG] [Thread-136753 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:40:46.129 [DEBUG] [Thread-136754 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:40:46.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T23:40:46.815 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T23:40:46.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-12-31T23:40:47.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 23, 40, 24), 3.96, 77.17, 0.0, 15.74, 14.8, 0, 0, 0, 2, 0, 0),)
2025-12-31T23:40:47.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 23:40:24
2025-12-31T23:40:47.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T23:40:47.766 [DEBUG] [Thread-136755] [transport.py] [_log()] starting thread (client mode): 0xb6b61870
2025-12-31T23:40:47.766 [DEBUG] [Thread-136755] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:40:47.786 [DEBUG] [Thread-136755] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T23:40:47.786 [INFO] [Thread-136755] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T23:40:47.790 [DEBUG] [Thread-136755] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:40:47.790 [DEBUG] [Thread-136755] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T23:40:47.790 [DEBUG] [Thread-136755] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:40:47.790 [DEBUG] [Thread-136755] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:40:47.790 [DEBUG] [Thread-136755] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:40:47.790 [DEBUG] [Thread-136755] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:40:47.790 [DEBUG] [Thread-136755] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:40:47.790 [DEBUG] [Thread-136755] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:40:47.790 [DEBUG] [Thread-136755] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:40:47.790 [DEBUG] [Thread-136755] [transport.py] [_log()] client lang: <none>
2025-12-31T23:40:47.790 [DEBUG] [Thread-136755] [transport.py] [_log()] server lang: <none>
2025-12-31T23:40:47.790 [DEBUG] [Thread-136755] [transport.py] [_log()] kex follows: False
2025-12-31T23:40:47.790 [DEBUG] [Thread-136755] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:40:47.790 [DEBUG] [Thread-136755] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:40:47.790 [DEBUG] [Thread-136755] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:40:47.790 [DEBUG] [Thread-136755] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:40:47.790 [DEBUG] [Thread-136755] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:40:47.790 [DEBUG] [Thread-136755] [transport.py] [_log()] Compression: none
2025-12-31T23:40:47.790 [DEBUG] [Thread-136755] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:40:47.804 [DEBUG] [Thread-136755] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:40:47.805 [DEBUG] [Thread-136755] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:40:47.805 [DEBUG] [Thread-136755] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T23:40:47.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T23:40:47.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:40:47.808 [DEBUG] [Thread-136755] [transport.py] [_log()] userauth is OK
2025-12-31T23:40:47.808 [DEBUG] [Thread-136755] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:40:47.808 [DEBUG] [Thread-136755] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:40:47.808 [DEBUG] [Thread-136755] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T23:40:47.808 [DEBUG] [Thread-136755] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:40:47.835 [INFO] [Thread-136755] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:40:47.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:40:48.488 [DEBUG] [Thread-136755] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:40:48.488 [DEBUG] [Thread-136755] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:40:48.489 [DEBUG] [Thread-136755] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T23:40:48.530 [DEBUG] [Thread-136755] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:40:48.530 [DEBUG] [Thread-136755] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:40:48.533 [DEBUG] [Thread-136755] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:40:48.544 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:40:48.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T23:40:48.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T23:40:48.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T23:40:48.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:40:48.556 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T23:40:48.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:40:48.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:40:48.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T23:40:48.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.902566 -999.00  +15.00  14.64     80  +11.50 1 1 1 2 1     0    0 2.65 -36.01 ZNESW 11.4 14.6 207.8 17.6 15.9 -20.6 15.7 -19.8 15.6 -18.9 15.8 -19.8
2025-12-31T23:40:48.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T23:40:48.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T23:40:48.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.902566
2025-12-31T23:40:48.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T23:40:48.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T23:40:48.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T23:40:48.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T23:40:48.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T23:40:48.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T23:40:24', tmtdew=3.96, humidity=77.17, cloud=0.0, wind=15.74, temperature=14.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T23:40:24', seeing=1.02, atlas_timestamp='2025-12-31T21:39:41.702', atlas_cloud=1, atlas_rain=1, zp_data=[0.17874999999999908, 0.17275000000000063, 0.15225000000000044, 0.1385000000000005, -0.009499999999999176, 0.056250000000000355, 0.1379999999999999, 0.3357500000000009, 0.4535, 0.16900000000000048, 0.21325000000000038, 0.3199999999999985, 0.16699999999999982, 0.1792499999999997, -0.12400000000000055, 0.1404999999999994, 0.5912499999999996, 0.15649999999999942, 0.25099999999999945, 0.3412499999999987, 0.3269999999999982, 0.17824999999999847, 0.04475000000000051, 0.06174999999999997, 0.2959999999999994, 0.33199999999999896, 0.13375000000000092, 0.23550000000000004, 0.26200000000000045, -1.331999999999999, -1.5889999999999986, 0.19000000000000128, 0.21974999999999945], zp_timestamp='2025-12-31T21:38:00')
2025-12-31T23:40:48.559 [DEBUG] [Thread-136755] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:40:48.643 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T23:40:48.654 [DEBUG] [Thread-136758] [transport.py] [_log()] starting thread (client mode): 0xb17466e0
2025-12-31T23:40:48.655 [DEBUG] [Thread-136758] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:40:48.669 [DEBUG] [Thread-136758] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T23:40:48.670 [INFO] [Thread-136758] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T23:40:48.678 [DEBUG] [Thread-136758] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:40:48.678 [DEBUG] [Thread-136758] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T23:40:48.678 [DEBUG] [Thread-136758] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:40:48.678 [DEBUG] [Thread-136758] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:40:48.678 [DEBUG] [Thread-136758] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:40:48.678 [DEBUG] [Thread-136758] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:40:48.678 [DEBUG] [Thread-136758] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:40:48.678 [DEBUG] [Thread-136758] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:40:48.678 [DEBUG] [Thread-136758] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:40:48.679 [DEBUG] [Thread-136758] [transport.py] [_log()] client lang: <none>
2025-12-31T23:40:48.679 [DEBUG] [Thread-136758] [transport.py] [_log()] server lang: <none>
2025-12-31T23:40:48.679 [DEBUG] [Thread-136758] [transport.py] [_log()] kex follows: False
2025-12-31T23:40:48.679 [DEBUG] [Thread-136758] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:40:48.679 [DEBUG] [Thread-136758] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:40:48.679 [DEBUG] [Thread-136758] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:40:48.679 [DEBUG] [Thread-136758] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:40:48.679 [DEBUG] [Thread-136758] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:40:48.679 [DEBUG] [Thread-136758] [transport.py] [_log()] Compression: none
2025-12-31T23:40:48.679 [DEBUG] [Thread-136758] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:40:48.743 [DEBUG] [Thread-136758] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:40:48.744 [DEBUG] [Thread-136758] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:40:48.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T23:40:48.745 [DEBUG] [Thread-136758] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T23:40:48.746 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:40:48.804 [DEBUG] [Thread-136758] [transport.py] [_log()] userauth is OK
2025-12-31T23:40:48.804 [DEBUG] [Thread-136758] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:40:48.804 [DEBUG] [Thread-136758] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:40:48.804 [DEBUG] [Thread-136758] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T23:40:48.805 [DEBUG] [Thread-136758] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:40:48.824 [INFO] [Thread-136758] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:40:48.825 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T23:40:48.825 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:40:49.749 [DEBUG] [Thread-136758] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:40:49.749 [DEBUG] [Thread-136758] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:40:49.797 [DEBUG] [Thread-136758] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:40:49.797 [DEBUG] [Thread-136758] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:40:49.807 [DEBUG] [Thread-136758] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:40:49.816 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:40:49.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T23:40:49.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T23:40:49.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:40:49.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:40:49.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:40:49.845 [DEBUG] [Thread-136758] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:40:53.012 [DEBUG] [Thread-136760 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:40:57.079 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:41:01.163 [DEBUG] [Thread-136761 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:41:01.921 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:41:04.985 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:41:11.421 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:41:16.209 [DEBUG] [Thread-136762 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:41:19.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T23:41:19.867 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T23:41:19.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T23:41:20.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 23, 40, 56), 3.95, 77.22, 0.0, 20.5, 14.82, 0, 0, 0, 2, 0, 0),)
2025-12-31T23:41:20.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 23:40:56
2025-12-31T23:41:20.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T23:41:20.817 [DEBUG] [Thread-136763] [transport.py] [_log()] starting thread (client mode): 0xb9578f10
2025-12-31T23:41:20.817 [DEBUG] [Thread-136763] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:41:20.837 [DEBUG] [Thread-136763] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T23:41:20.837 [INFO] [Thread-136763] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T23:41:20.840 [DEBUG] [Thread-136763] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:41:20.841 [DEBUG] [Thread-136763] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T23:41:20.841 [DEBUG] [Thread-136763] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:41:20.841 [DEBUG] [Thread-136763] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:41:20.841 [DEBUG] [Thread-136763] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:41:20.841 [DEBUG] [Thread-136763] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:41:20.841 [DEBUG] [Thread-136763] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:41:20.841 [DEBUG] [Thread-136763] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:41:20.841 [DEBUG] [Thread-136763] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:41:20.841 [DEBUG] [Thread-136763] [transport.py] [_log()] client lang: <none>
2025-12-31T23:41:20.841 [DEBUG] [Thread-136763] [transport.py] [_log()] server lang: <none>
2025-12-31T23:41:20.841 [DEBUG] [Thread-136763] [transport.py] [_log()] kex follows: False
2025-12-31T23:41:20.841 [DEBUG] [Thread-136763] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:41:20.842 [DEBUG] [Thread-136763] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:41:20.842 [DEBUG] [Thread-136763] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:41:20.842 [DEBUG] [Thread-136763] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:41:20.842 [DEBUG] [Thread-136763] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:41:20.842 [DEBUG] [Thread-136763] [transport.py] [_log()] Compression: none
2025-12-31T23:41:20.842 [DEBUG] [Thread-136763] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:41:20.857 [DEBUG] [Thread-136763] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:41:20.857 [DEBUG] [Thread-136763] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:41:20.858 [DEBUG] [Thread-136763] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T23:41:20.858 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T23:41:20.859 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:41:20.860 [DEBUG] [Thread-136763] [transport.py] [_log()] userauth is OK
2025-12-31T23:41:20.860 [DEBUG] [Thread-136763] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:41:20.860 [DEBUG] [Thread-136763] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:41:20.860 [DEBUG] [Thread-136763] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T23:41:20.860 [DEBUG] [Thread-136763] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:41:20.884 [INFO] [Thread-136763] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:41:20.885 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:41:21.693 [DEBUG] [Thread-136763] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:41:21.693 [DEBUG] [Thread-136763] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:41:21.694 [DEBUG] [Thread-136763] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T23:41:21.734 [DEBUG] [Thread-136763] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:41:21.734 [DEBUG] [Thread-136763] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:41:21.737 [DEBUG] [Thread-136763] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:41:21.742 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:41:21.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T23:41:21.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T23:41:21.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T23:41:21.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:41:21.752 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T23:41:21.752 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:41:21.752 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:41:21.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T23:41:21.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.903260 -999.00  +15.00  13.26     79  +11.50 1 1 1 1 1     0    0 2.55 -37.35 ZNESW 12.2 13.3 194.8 16.2 15.9 -20.7 15.7 -19.8 15.6 -18.8 15.8 -19.7
2025-12-31T23:41:21.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T23:41:21.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T23:41:21.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.903260
2025-12-31T23:41:21.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T23:41:21.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T23:41:21.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T23:41:21.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T23:41:21.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T23:41:21.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T23:40:56', tmtdew=3.95, humidity=77.22, cloud=0.0, wind=20.5, temperature=14.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T23:40:56', seeing=1.02, atlas_timestamp='2025-12-31T21:40:41.664', atlas_cloud=1, atlas_rain=1, zp_data=[0.17874999999999908, 0.17275000000000063, 0.15225000000000044, 0.1385000000000005, -0.009499999999999176, 0.056250000000000355, 0.1379999999999999, 0.3357500000000009, 0.4535, 0.16900000000000048, 0.21325000000000038, 0.3199999999999985, 0.16699999999999982, 0.1792499999999997, -0.12400000000000055, 0.1404999999999994, 0.5912499999999996, 0.15649999999999942, 0.25099999999999945, 0.3412499999999987, 0.3269999999999982, 0.17824999999999847, 0.04475000000000051, 0.06174999999999997, 0.2959999999999994, 0.33199999999999896, 0.13375000000000092, 0.23550000000000004, 0.26200000000000045, -1.331999999999999, -1.5889999999999986, 0.19000000000000128, 0.21974999999999945], zp_timestamp='2025-12-31T21:38:00')
2025-12-31T23:41:21.755 [DEBUG] [Thread-136763] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:41:21.839 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T23:41:21.852 [DEBUG] [Thread-136766] [transport.py] [_log()] starting thread (client mode): 0xb1745f00
2025-12-31T23:41:21.852 [DEBUG] [Thread-136766] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:41:21.867 [DEBUG] [Thread-136766] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T23:41:21.867 [INFO] [Thread-136766] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T23:41:21.875 [DEBUG] [Thread-136766] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:41:21.875 [DEBUG] [Thread-136766] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T23:41:21.875 [DEBUG] [Thread-136766] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:41:21.875 [DEBUG] [Thread-136766] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:41:21.875 [DEBUG] [Thread-136766] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:41:21.875 [DEBUG] [Thread-136766] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:41:21.875 [DEBUG] [Thread-136766] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:41:21.875 [DEBUG] [Thread-136766] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:41:21.875 [DEBUG] [Thread-136766] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:41:21.875 [DEBUG] [Thread-136766] [transport.py] [_log()] client lang: <none>
2025-12-31T23:41:21.875 [DEBUG] [Thread-136766] [transport.py] [_log()] server lang: <none>
2025-12-31T23:41:21.875 [DEBUG] [Thread-136766] [transport.py] [_log()] kex follows: False
2025-12-31T23:41:21.875 [DEBUG] [Thread-136766] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:41:21.876 [DEBUG] [Thread-136766] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:41:21.876 [DEBUG] [Thread-136766] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:41:21.876 [DEBUG] [Thread-136766] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:41:21.876 [DEBUG] [Thread-136766] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:41:21.876 [DEBUG] [Thread-136766] [transport.py] [_log()] Compression: none
2025-12-31T23:41:21.876 [DEBUG] [Thread-136766] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:41:21.935 [DEBUG] [Thread-136766] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:41:21.936 [DEBUG] [Thread-136766] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:41:21.937 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T23:41:21.937 [DEBUG] [Thread-136766] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T23:41:21.938 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:41:21.995 [DEBUG] [Thread-136766] [transport.py] [_log()] userauth is OK
2025-12-31T23:41:21.996 [DEBUG] [Thread-136766] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:41:21.996 [DEBUG] [Thread-136766] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:41:21.996 [DEBUG] [Thread-136766] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T23:41:21.996 [DEBUG] [Thread-136766] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:41:22.015 [INFO] [Thread-136766] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:41:22.016 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T23:41:22.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:41:22.884 [DEBUG] [Thread-136766] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:41:22.885 [DEBUG] [Thread-136766] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:41:22.933 [DEBUG] [Thread-136766] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:41:22.933 [DEBUG] [Thread-136766] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:41:22.943 [DEBUG] [Thread-136766] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:41:22.952 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:41:22.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-12-31T23:41:22.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T23:41:22.971 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:41:22.971 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:41:22.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:41:22.981 [DEBUG] [Thread-136766] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:41:28.868 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:41:28.868 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:41:31.245 [DEBUG] [Thread-136768 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:41:46.294 [DEBUG] [Thread-136769 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:41:53.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T23:41:53.002 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T23:41:53.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-12-31T23:41:53.095 [DEBUG] [Thread-136770 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:41:53.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 23, 41, 28), 3.94, 77.28, 0.0, 20.75, 14.82, 0, 0, 0, 2, 0, 0),)
2025-12-31T23:41:53.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 23:41:28
2025-12-31T23:41:53.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T23:41:53.969 [DEBUG] [Thread-136771] [transport.py] [_log()] starting thread (client mode): 0xb1797df0
2025-12-31T23:41:53.969 [DEBUG] [Thread-136771] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:41:53.990 [DEBUG] [Thread-136771] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T23:41:53.990 [INFO] [Thread-136771] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T23:41:53.993 [DEBUG] [Thread-136771] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:41:53.993 [DEBUG] [Thread-136771] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T23:41:53.993 [DEBUG] [Thread-136771] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:41:53.993 [DEBUG] [Thread-136771] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:41:53.993 [DEBUG] [Thread-136771] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:41:53.993 [DEBUG] [Thread-136771] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:41:53.993 [DEBUG] [Thread-136771] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:41:53.993 [DEBUG] [Thread-136771] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:41:53.993 [DEBUG] [Thread-136771] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:41:53.993 [DEBUG] [Thread-136771] [transport.py] [_log()] client lang: <none>
2025-12-31T23:41:53.993 [DEBUG] [Thread-136771] [transport.py] [_log()] server lang: <none>
2025-12-31T23:41:53.993 [DEBUG] [Thread-136771] [transport.py] [_log()] kex follows: False
2025-12-31T23:41:53.993 [DEBUG] [Thread-136771] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:41:53.993 [DEBUG] [Thread-136771] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:41:53.993 [DEBUG] [Thread-136771] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:41:53.993 [DEBUG] [Thread-136771] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:41:53.993 [DEBUG] [Thread-136771] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:41:53.993 [DEBUG] [Thread-136771] [transport.py] [_log()] Compression: none
2025-12-31T23:41:53.993 [DEBUG] [Thread-136771] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:41:54.009 [DEBUG] [Thread-136771] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:41:54.010 [DEBUG] [Thread-136771] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:41:54.010 [DEBUG] [Thread-136771] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T23:41:54.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T23:41:54.011 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:41:54.012 [DEBUG] [Thread-136771] [transport.py] [_log()] userauth is OK
2025-12-31T23:41:54.012 [DEBUG] [Thread-136771] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:41:54.012 [DEBUG] [Thread-136771] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:41:54.012 [DEBUG] [Thread-136771] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T23:41:54.012 [DEBUG] [Thread-136771] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:41:54.026 [INFO] [Thread-136771] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:41:54.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:41:54.639 [DEBUG] [Thread-136771] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:41:54.640 [DEBUG] [Thread-136771] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:41:54.640 [DEBUG] [Thread-136771] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T23:41:54.680 [DEBUG] [Thread-136771] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:41:54.680 [DEBUG] [Thread-136771] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:41:54.684 [DEBUG] [Thread-136771] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:41:54.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:41:54.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T23:41:54.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T23:41:54.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T23:41:54.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:41:54.709 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T23:41:54.709 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:41:54.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:41:54.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T23:41:54.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.903607 -999.00  +15.00  13.77     80  +11.50 1 1 1 2 1     0    0 2.62 -36.06 ZNESW 12.8 13.8 200.0 17.5 15.9 -20.6 15.7 -19.8 15.6 -18.7 15.9 -19.7
2025-12-31T23:41:54.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T23:41:54.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T23:41:54.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.903607
2025-12-31T23:41:54.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T23:41:54.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T23:41:54.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T23:41:54.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T23:41:54.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T23:41:54.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T23:41:28', tmtdew=3.94, humidity=77.28, cloud=0.0, wind=20.75, temperature=14.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T23:41:28', seeing=1.05, atlas_timestamp='2025-12-31T21:41:11.645', atlas_cloud=1, atlas_rain=1, zp_data=[0.17874999999999908, 0.17275000000000063, 0.15225000000000044, 0.1385000000000005, -0.009499999999999176, 0.056250000000000355, 0.1379999999999999, 0.3357500000000009, 0.4535, 0.16900000000000048, 0.21325000000000038, 0.3199999999999985, 0.16699999999999982, 0.1792499999999997, -0.12400000000000055, 0.1404999999999994, 0.5912499999999996, 0.15649999999999942, 0.25099999999999945, 0.3412499999999987, 0.3269999999999982, 0.17824999999999847, 0.04475000000000051, 0.06174999999999997, 0.2959999999999994, 0.33199999999999896, 0.13375000000000092, 0.23550000000000004, 0.26200000000000045, -1.331999999999999, -1.5889999999999986, 0.19000000000000128, 0.21974999999999945], zp_timestamp='2025-12-31T21:38:00')
2025-12-31T23:41:54.712 [DEBUG] [Thread-136771] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:41:54.795 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T23:41:54.808 [DEBUG] [Thread-136774] [transport.py] [_log()] starting thread (client mode): 0xb1744ac0
2025-12-31T23:41:54.809 [DEBUG] [Thread-136774] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:41:54.823 [DEBUG] [Thread-136774] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T23:41:54.823 [INFO] [Thread-136774] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T23:41:54.831 [DEBUG] [Thread-136774] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:41:54.831 [DEBUG] [Thread-136774] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T23:41:54.832 [DEBUG] [Thread-136774] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:41:54.832 [DEBUG] [Thread-136774] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:41:54.832 [DEBUG] [Thread-136774] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:41:54.832 [DEBUG] [Thread-136774] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:41:54.832 [DEBUG] [Thread-136774] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:41:54.833 [DEBUG] [Thread-136774] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:41:54.833 [DEBUG] [Thread-136774] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:41:54.833 [DEBUG] [Thread-136774] [transport.py] [_log()] client lang: <none>
2025-12-31T23:41:54.833 [DEBUG] [Thread-136774] [transport.py] [_log()] server lang: <none>
2025-12-31T23:41:54.833 [DEBUG] [Thread-136774] [transport.py] [_log()] kex follows: False
2025-12-31T23:41:54.833 [DEBUG] [Thread-136774] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:41:54.833 [DEBUG] [Thread-136774] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:41:54.833 [DEBUG] [Thread-136774] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:41:54.833 [DEBUG] [Thread-136774] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:41:54.833 [DEBUG] [Thread-136774] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:41:54.833 [DEBUG] [Thread-136774] [transport.py] [_log()] Compression: none
2025-12-31T23:41:54.833 [DEBUG] [Thread-136774] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:41:54.892 [DEBUG] [Thread-136774] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:41:54.892 [DEBUG] [Thread-136774] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:41:54.893 [DEBUG] [Thread-136774] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T23:41:54.893 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T23:41:54.894 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:41:54.947 [DEBUG] [Thread-136774] [transport.py] [_log()] userauth is OK
2025-12-31T23:41:54.948 [DEBUG] [Thread-136774] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:41:54.948 [DEBUG] [Thread-136774] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:41:54.948 [DEBUG] [Thread-136774] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T23:41:54.948 [DEBUG] [Thread-136774] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:41:54.967 [INFO] [Thread-136774] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:41:54.968 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T23:41:54.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:41:55.799 [DEBUG] [Thread-136774] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:41:55.799 [DEBUG] [Thread-136774] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:41:55.847 [DEBUG] [Thread-136774] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:41:55.847 [DEBUG] [Thread-136774] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:41:55.856 [DEBUG] [Thread-136774] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:41:55.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:41:55.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T23:41:55.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T23:41:55.882 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:41:55.882 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:41:55.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:41:55.891 [DEBUG] [Thread-136774] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:42:01.321 [DEBUG] [Thread-136776 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:42:16.365 [DEBUG] [Thread-136777 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:42:25.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T23:42:25.913 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T23:42:25.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T23:42:26.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 23, 42), 3.95, 77.23, 0.0, 19.52, 14.77, 0, 0, 0, 2, 0, 0),)
2025-12-31T23:42:26.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 23:42:00
2025-12-31T23:42:26.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T23:42:26.899 [DEBUG] [Thread-136778] [transport.py] [_log()] starting thread (client mode): 0xb6bbead0
2025-12-31T23:42:26.899 [DEBUG] [Thread-136778] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:42:26.920 [DEBUG] [Thread-136778] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T23:42:26.920 [INFO] [Thread-136778] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T23:42:26.924 [DEBUG] [Thread-136778] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:42:26.924 [DEBUG] [Thread-136778] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T23:42:26.924 [DEBUG] [Thread-136778] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:42:26.924 [DEBUG] [Thread-136778] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:42:26.924 [DEBUG] [Thread-136778] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:42:26.924 [DEBUG] [Thread-136778] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:42:26.924 [DEBUG] [Thread-136778] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:42:26.924 [DEBUG] [Thread-136778] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:42:26.924 [DEBUG] [Thread-136778] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:42:26.924 [DEBUG] [Thread-136778] [transport.py] [_log()] client lang: <none>
2025-12-31T23:42:26.924 [DEBUG] [Thread-136778] [transport.py] [_log()] server lang: <none>
2025-12-31T23:42:26.924 [DEBUG] [Thread-136778] [transport.py] [_log()] kex follows: False
2025-12-31T23:42:26.924 [DEBUG] [Thread-136778] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:42:26.924 [DEBUG] [Thread-136778] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:42:26.924 [DEBUG] [Thread-136778] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:42:26.924 [DEBUG] [Thread-136778] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:42:26.924 [DEBUG] [Thread-136778] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:42:26.924 [DEBUG] [Thread-136778] [transport.py] [_log()] Compression: none
2025-12-31T23:42:26.924 [DEBUG] [Thread-136778] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:42:26.941 [DEBUG] [Thread-136778] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:42:26.941 [DEBUG] [Thread-136778] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:42:26.941 [DEBUG] [Thread-136778] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T23:42:26.941 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T23:42:26.941 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:42:26.942 [DEBUG] [Thread-136778] [transport.py] [_log()] userauth is OK
2025-12-31T23:42:26.942 [DEBUG] [Thread-136778] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:42:26.942 [DEBUG] [Thread-136778] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:42:26.942 [DEBUG] [Thread-136778] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T23:42:26.942 [DEBUG] [Thread-136778] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:42:26.969 [INFO] [Thread-136778] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:42:26.969 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:42:27.575 [DEBUG] [Thread-136778] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:42:27.575 [DEBUG] [Thread-136778] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:42:27.576 [DEBUG] [Thread-136778] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T23:42:27.617 [DEBUG] [Thread-136778] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:42:27.617 [DEBUG] [Thread-136778] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:42:27.619 [DEBUG] [Thread-136778] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:42:27.633 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:42:27.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T23:42:27.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T23:42:27.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T23:42:27.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:42:27.637 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T23:42:27.637 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:42:27.637 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:42:27.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T23:42:27.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.903954 -999.00  +15.00  14.76     80  +11.50 1 1 1 2 1     0    0 2.76 -30.77 ZNESW 14.5 14.8 191.0 19.6 15.9 -20.7 15.7 -20.3 15.5 -18.7 15.8 -19.8
2025-12-31T23:42:27.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T23:42:27.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T23:42:27.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.903954
2025-12-31T23:42:27.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T23:42:27.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T23:42:27.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T23:42:27.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T23:42:27.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T23:42:27.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T23:42:00', tmtdew=3.95, humidity=77.23, cloud=0.0, wind=19.52, temperature=14.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T23:42:00', seeing=1.12, atlas_timestamp='2025-12-31T21:41:41.626', atlas_cloud=1, atlas_rain=1, zp_data=[0.08174999999999955, 0.11125000000000007, 0.10224999999999973, 0.03549999999999898, -0.042500000000000426, 0.0002500000000011937, 0.029500000000000526, 0.056250000000000355, 0.058499999999998664, 0.09100000000000108, 0.09924999999999962, 0.01699999999999946, 0.05299999999999905, 0.07124999999999915, -0.15399999999999991, 0.0009999999999994458, 0.11425000000000018, 0.33000000000000007, 0.2749999999999986, 0.0677500000000002, 0.1479999999999979, -0.18625000000000114, -0.34174999999999933, 0.0752499999999987, 0.16499999999999915, 0.3745000000000003, 0.29274999999999984, nan, -0.6784999999999997, -1.5879999999999992, -1.9019999999999992, 0.0010000000000012221, 0.3017499999999984], zp_timestamp='2025-12-31T21:40:00')
2025-12-31T23:42:27.638 [DEBUG] [Thread-136778] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:42:27.713 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T23:42:27.725 [DEBUG] [Thread-136781] [transport.py] [_log()] starting thread (client mode): 0xb6bbf0d0
2025-12-31T23:42:27.725 [DEBUG] [Thread-136781] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:42:27.742 [DEBUG] [Thread-136781] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T23:42:27.742 [INFO] [Thread-136781] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T23:42:27.749 [DEBUG] [Thread-136781] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:42:27.749 [DEBUG] [Thread-136781] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T23:42:27.749 [DEBUG] [Thread-136781] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:42:27.749 [DEBUG] [Thread-136781] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:42:27.749 [DEBUG] [Thread-136781] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:42:27.749 [DEBUG] [Thread-136781] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:42:27.749 [DEBUG] [Thread-136781] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:42:27.749 [DEBUG] [Thread-136781] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:42:27.749 [DEBUG] [Thread-136781] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:42:27.749 [DEBUG] [Thread-136781] [transport.py] [_log()] client lang: <none>
2025-12-31T23:42:27.749 [DEBUG] [Thread-136781] [transport.py] [_log()] server lang: <none>
2025-12-31T23:42:27.749 [DEBUG] [Thread-136781] [transport.py] [_log()] kex follows: False
2025-12-31T23:42:27.750 [DEBUG] [Thread-136781] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:42:27.750 [DEBUG] [Thread-136781] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:42:27.750 [DEBUG] [Thread-136781] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:42:27.750 [DEBUG] [Thread-136781] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:42:27.750 [DEBUG] [Thread-136781] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:42:27.750 [DEBUG] [Thread-136781] [transport.py] [_log()] Compression: none
2025-12-31T23:42:27.750 [DEBUG] [Thread-136781] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:42:27.806 [DEBUG] [Thread-136781] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:42:27.806 [DEBUG] [Thread-136781] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:42:27.807 [DEBUG] [Thread-136781] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T23:42:27.807 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T23:42:27.807 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:42:27.863 [DEBUG] [Thread-136781] [transport.py] [_log()] userauth is OK
2025-12-31T23:42:27.863 [DEBUG] [Thread-136781] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:42:27.863 [DEBUG] [Thread-136781] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:42:27.863 [DEBUG] [Thread-136781] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T23:42:27.863 [DEBUG] [Thread-136781] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:42:27.878 [INFO] [Thread-136781] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:42:27.878 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T23:42:27.878 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:42:28.755 [DEBUG] [Thread-136781] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:42:28.755 [DEBUG] [Thread-136781] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:42:28.805 [DEBUG] [Thread-136781] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:42:28.805 [DEBUG] [Thread-136781] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:42:28.818 [DEBUG] [Thread-136781] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:42:28.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:42:28.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T23:42:28.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T23:42:28.851 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:42:28.851 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:42:28.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:42:28.863 [DEBUG] [Thread-136781] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:42:29.067 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:42:29.069 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:42:31.405 [DEBUG] [Thread-136783 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:42:46.468 [DEBUG] [Thread-136784 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:42:53.170 [DEBUG] [Thread-136785 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:42:58.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T23:42:58.879 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T23:42:58.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T23:42:59.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 23, 42, 32), 3.93, 77.33, 0.0, 20.29, 14.8, 0, 0, 0, 2, 0, 0),)
2025-12-31T23:42:59.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 23:42:32
2025-12-31T23:42:59.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T23:42:59.868 [DEBUG] [Thread-136786] [transport.py] [_log()] starting thread (client mode): 0xb957b2b0
2025-12-31T23:42:59.868 [DEBUG] [Thread-136786] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:42:59.888 [DEBUG] [Thread-136786] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T23:42:59.888 [INFO] [Thread-136786] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T23:42:59.891 [DEBUG] [Thread-136786] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:42:59.891 [DEBUG] [Thread-136786] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T23:42:59.891 [DEBUG] [Thread-136786] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:42:59.892 [DEBUG] [Thread-136786] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:42:59.892 [DEBUG] [Thread-136786] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:42:59.892 [DEBUG] [Thread-136786] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:42:59.892 [DEBUG] [Thread-136786] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:42:59.892 [DEBUG] [Thread-136786] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:42:59.892 [DEBUG] [Thread-136786] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:42:59.892 [DEBUG] [Thread-136786] [transport.py] [_log()] client lang: <none>
2025-12-31T23:42:59.892 [DEBUG] [Thread-136786] [transport.py] [_log()] server lang: <none>
2025-12-31T23:42:59.892 [DEBUG] [Thread-136786] [transport.py] [_log()] kex follows: False
2025-12-31T23:42:59.892 [DEBUG] [Thread-136786] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:42:59.892 [DEBUG] [Thread-136786] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:42:59.892 [DEBUG] [Thread-136786] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:42:59.892 [DEBUG] [Thread-136786] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:42:59.892 [DEBUG] [Thread-136786] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:42:59.892 [DEBUG] [Thread-136786] [transport.py] [_log()] Compression: none
2025-12-31T23:42:59.892 [DEBUG] [Thread-136786] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:42:59.908 [DEBUG] [Thread-136786] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:42:59.909 [DEBUG] [Thread-136786] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:42:59.909 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T23:42:59.910 [DEBUG] [Thread-136786] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T23:42:59.910 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:42:59.911 [DEBUG] [Thread-136786] [transport.py] [_log()] userauth is OK
2025-12-31T23:42:59.911 [DEBUG] [Thread-136786] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:42:59.911 [DEBUG] [Thread-136786] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:42:59.911 [DEBUG] [Thread-136786] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T23:42:59.911 [DEBUG] [Thread-136786] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:42:59.925 [INFO] [Thread-136786] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:42:59.925 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:43:00.543 [DEBUG] [Thread-136786] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:43:00.543 [DEBUG] [Thread-136786] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:43:00.544 [DEBUG] [Thread-136786] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T23:43:00.585 [DEBUG] [Thread-136786] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:43:00.585 [DEBUG] [Thread-136786] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:43:00.588 [DEBUG] [Thread-136786] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:43:00.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:43:00.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T23:43:00.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T23:43:00.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T23:43:00.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:43:00.606 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T23:43:00.606 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:43:00.606 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:43:00.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T23:43:00.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.904302 -999.00  +14.90  17.60     80  +11.50 1 1 1 2 1     0    0 2.66 -32.85 ZNESW 11.8 17.6 195.0 20.5 15.9 -20.7 15.7 -20.1 15.5 -18.6 15.8 -19.6
2025-12-31T23:43:00.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T23:43:00.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T23:43:00.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.904302
2025-12-31T23:43:00.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T23:43:00.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T23:43:00.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T23:43:00.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T23:43:00.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T23:43:00.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T23:42:32', tmtdew=3.93, humidity=77.33, cloud=0.0, wind=20.29, temperature=14.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T23:42:32', seeing=0.99, atlas_timestamp='2025-12-31T21:42:11.693', atlas_cloud=1, atlas_rain=1, zp_data=[0.08174999999999955, 0.11125000000000007, 0.10224999999999973, 0.03549999999999898, -0.042500000000000426, 0.0002500000000011937, 0.029500000000000526, 0.056250000000000355, 0.058499999999998664, 0.09100000000000108, 0.09924999999999962, 0.01699999999999946, 0.05299999999999905, 0.07124999999999915, -0.15399999999999991, 0.0009999999999994458, 0.11425000000000018, 0.33000000000000007, 0.2749999999999986, 0.0677500000000002, 0.1479999999999979, -0.18625000000000114, -0.34174999999999933, 0.0752499999999987, 0.16499999999999915, 0.3745000000000003, 0.29274999999999984, nan, -0.6784999999999997, -1.5879999999999992, -1.9019999999999992, 0.0010000000000012221, 0.3017499999999984], zp_timestamp='2025-12-31T21:40:00')
2025-12-31T23:43:00.609 [DEBUG] [Thread-136786] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:43:00.692 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T23:43:00.707 [DEBUG] [Thread-136789] [transport.py] [_log()] starting thread (client mode): 0xb957b8b0
2025-12-31T23:43:00.707 [DEBUG] [Thread-136789] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:43:00.727 [DEBUG] [Thread-136789] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T23:43:00.727 [INFO] [Thread-136789] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T23:43:00.735 [DEBUG] [Thread-136789] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:43:00.735 [DEBUG] [Thread-136789] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T23:43:00.735 [DEBUG] [Thread-136789] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:43:00.735 [DEBUG] [Thread-136789] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:43:00.735 [DEBUG] [Thread-136789] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:43:00.736 [DEBUG] [Thread-136789] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:43:00.736 [DEBUG] [Thread-136789] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:43:00.736 [DEBUG] [Thread-136789] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:43:00.736 [DEBUG] [Thread-136789] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:43:00.736 [DEBUG] [Thread-136789] [transport.py] [_log()] client lang: <none>
2025-12-31T23:43:00.736 [DEBUG] [Thread-136789] [transport.py] [_log()] server lang: <none>
2025-12-31T23:43:00.736 [DEBUG] [Thread-136789] [transport.py] [_log()] kex follows: False
2025-12-31T23:43:00.736 [DEBUG] [Thread-136789] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:43:00.736 [DEBUG] [Thread-136789] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:43:00.737 [DEBUG] [Thread-136789] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:43:00.737 [DEBUG] [Thread-136789] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:43:00.737 [DEBUG] [Thread-136789] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:43:00.737 [DEBUG] [Thread-136789] [transport.py] [_log()] Compression: none
2025-12-31T23:43:00.737 [DEBUG] [Thread-136789] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:43:00.796 [DEBUG] [Thread-136789] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:43:00.797 [DEBUG] [Thread-136789] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:43:00.798 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T23:43:00.798 [DEBUG] [Thread-136789] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T23:43:00.800 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:43:00.855 [DEBUG] [Thread-136789] [transport.py] [_log()] userauth is OK
2025-12-31T23:43:00.856 [DEBUG] [Thread-136789] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:43:00.856 [DEBUG] [Thread-136789] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:43:00.856 [DEBUG] [Thread-136789] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T23:43:00.856 [DEBUG] [Thread-136789] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:43:00.876 [INFO] [Thread-136789] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:43:00.876 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T23:43:00.877 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:43:01.505 [DEBUG] [Thread-136791 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:43:01.696 [DEBUG] [Thread-136789] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:43:01.696 [DEBUG] [Thread-136789] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:43:01.745 [DEBUG] [Thread-136789] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:43:01.745 [DEBUG] [Thread-136789] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:43:01.753 [DEBUG] [Thread-136789] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:43:01.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:43:01.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T23:43:01.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T23:43:01.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:43:01.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:43:01.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:43:01.785 [DEBUG] [Thread-136789] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:43:16.566 [DEBUG] [Thread-136792 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:43:29.270 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:43:29.271 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:43:31.602 [DEBUG] [Thread-136793 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:43:31.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T23:43:31.808 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T23:43:31.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T23:43:32.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 23, 43, 4), 3.92, 77.38, 0.0, 20.26, 14.82, 0, 0, 0, 2, 0, 0),)
2025-12-31T23:43:32.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 23:43:04
2025-12-31T23:43:32.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T23:43:32.795 [DEBUG] [Thread-136794] [transport.py] [_log()] starting thread (client mode): 0xb6bbf8e0
2025-12-31T23:43:32.795 [DEBUG] [Thread-136794] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:43:32.816 [DEBUG] [Thread-136794] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T23:43:32.816 [INFO] [Thread-136794] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T23:43:32.819 [DEBUG] [Thread-136794] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:43:32.820 [DEBUG] [Thread-136794] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T23:43:32.820 [DEBUG] [Thread-136794] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:43:32.820 [DEBUG] [Thread-136794] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:43:32.820 [DEBUG] [Thread-136794] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:43:32.820 [DEBUG] [Thread-136794] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:43:32.820 [DEBUG] [Thread-136794] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:43:32.820 [DEBUG] [Thread-136794] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:43:32.820 [DEBUG] [Thread-136794] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:43:32.820 [DEBUG] [Thread-136794] [transport.py] [_log()] client lang: <none>
2025-12-31T23:43:32.820 [DEBUG] [Thread-136794] [transport.py] [_log()] server lang: <none>
2025-12-31T23:43:32.820 [DEBUG] [Thread-136794] [transport.py] [_log()] kex follows: False
2025-12-31T23:43:32.820 [DEBUG] [Thread-136794] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:43:32.820 [DEBUG] [Thread-136794] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:43:32.820 [DEBUG] [Thread-136794] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:43:32.820 [DEBUG] [Thread-136794] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:43:32.821 [DEBUG] [Thread-136794] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:43:32.821 [DEBUG] [Thread-136794] [transport.py] [_log()] Compression: none
2025-12-31T23:43:32.821 [DEBUG] [Thread-136794] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:43:32.839 [DEBUG] [Thread-136794] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:43:32.840 [DEBUG] [Thread-136794] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:43:32.840 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T23:43:32.841 [DEBUG] [Thread-136794] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T23:43:32.842 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:43:32.843 [DEBUG] [Thread-136794] [transport.py] [_log()] userauth is OK
2025-12-31T23:43:32.843 [DEBUG] [Thread-136794] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:43:32.843 [DEBUG] [Thread-136794] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:43:32.843 [DEBUG] [Thread-136794] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T23:43:32.843 [DEBUG] [Thread-136794] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:43:32.868 [INFO] [Thread-136794] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:43:32.869 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:43:33.505 [DEBUG] [Thread-136794] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:43:33.505 [DEBUG] [Thread-136794] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:43:33.506 [DEBUG] [Thread-136794] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T23:43:33.546 [DEBUG] [Thread-136794] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:43:33.546 [DEBUG] [Thread-136794] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:43:33.549 [DEBUG] [Thread-136794] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:43:33.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:43:33.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T23:43:33.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T23:43:33.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T23:43:33.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:43:33.571 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T23:43:33.571 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:43:33.572 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:43:33.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T23:43:33.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.904649 -999.00  +14.90  10.32     80  +11.50 1 1 1 2 1     0    0 2.76 -33.03 ZNESW 16.2 10.3 190.2 18.5 15.9 -20.7 15.7 -20.1 15.6 -18.4 15.8 -19.6
2025-12-31T23:43:33.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T23:43:33.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T23:43:33.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.904649
2025-12-31T23:43:33.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T23:43:33.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T23:43:33.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T23:43:33.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T23:43:33.574 [DEBUG] [Thread-136794] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:43:33.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T23:43:33.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T23:43:04', tmtdew=3.92, humidity=77.38, cloud=0.0, wind=20.26, temperature=14.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T23:43:04', seeing=1.03, atlas_timestamp='2025-12-31T21:42:41.674', atlas_cloud=1, atlas_rain=1, zp_data=[0.08174999999999955, 0.11125000000000007, 0.10224999999999973, 0.03549999999999898, -0.042500000000000426, 0.0002500000000011937, 0.029500000000000526, 0.056250000000000355, 0.058499999999998664, 0.09100000000000108, 0.09924999999999962, 0.01699999999999946, 0.05299999999999905, 0.07124999999999915, -0.15399999999999991, 0.0009999999999994458, 0.11425000000000018, 0.33000000000000007, 0.2749999999999986, 0.0677500000000002, 0.1479999999999979, -0.18625000000000114, -0.34174999999999933, 0.0752499999999987, 0.16499999999999915, 0.3745000000000003, 0.29274999999999984, nan, -0.6784999999999997, -1.5879999999999992, -1.9019999999999992, 0.0010000000000012221, 0.3017499999999984], zp_timestamp='2025-12-31T21:40:00')
2025-12-31T23:43:33.655 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T23:43:33.667 [DEBUG] [Thread-136797] [transport.py] [_log()] starting thread (client mode): 0xb6bbcf70
2025-12-31T23:43:33.667 [DEBUG] [Thread-136797] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:43:33.683 [DEBUG] [Thread-136797] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T23:43:33.683 [INFO] [Thread-136797] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T23:43:33.691 [DEBUG] [Thread-136797] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:43:33.691 [DEBUG] [Thread-136797] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T23:43:33.692 [DEBUG] [Thread-136797] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:43:33.692 [DEBUG] [Thread-136797] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:43:33.692 [DEBUG] [Thread-136797] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:43:33.692 [DEBUG] [Thread-136797] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:43:33.692 [DEBUG] [Thread-136797] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:43:33.692 [DEBUG] [Thread-136797] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:43:33.692 [DEBUG] [Thread-136797] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:43:33.692 [DEBUG] [Thread-136797] [transport.py] [_log()] client lang: <none>
2025-12-31T23:43:33.692 [DEBUG] [Thread-136797] [transport.py] [_log()] server lang: <none>
2025-12-31T23:43:33.693 [DEBUG] [Thread-136797] [transport.py] [_log()] kex follows: False
2025-12-31T23:43:33.693 [DEBUG] [Thread-136797] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:43:33.693 [DEBUG] [Thread-136797] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:43:33.693 [DEBUG] [Thread-136797] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:43:33.693 [DEBUG] [Thread-136797] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:43:33.693 [DEBUG] [Thread-136797] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:43:33.693 [DEBUG] [Thread-136797] [transport.py] [_log()] Compression: none
2025-12-31T23:43:33.693 [DEBUG] [Thread-136797] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:43:33.752 [DEBUG] [Thread-136797] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:43:33.752 [DEBUG] [Thread-136797] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:43:33.753 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T23:43:33.753 [DEBUG] [Thread-136797] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T23:43:33.754 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:43:33.808 [DEBUG] [Thread-136797] [transport.py] [_log()] userauth is OK
2025-12-31T23:43:33.808 [DEBUG] [Thread-136797] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:43:33.808 [DEBUG] [Thread-136797] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:43:33.808 [DEBUG] [Thread-136797] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T23:43:33.808 [DEBUG] [Thread-136797] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:43:33.827 [INFO] [Thread-136797] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:43:33.827 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T23:43:33.828 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:43:34.701 [DEBUG] [Thread-136797] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:43:34.702 [DEBUG] [Thread-136797] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:43:34.750 [DEBUG] [Thread-136797] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:43:34.751 [DEBUG] [Thread-136797] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:43:34.760 [DEBUG] [Thread-136797] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:43:34.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:43:34.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T23:43:34.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T23:43:34.788 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:43:34.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:43:34.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:43:34.797 [DEBUG] [Thread-136797] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:43:46.633 [DEBUG] [Thread-136799 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:43:53.244 [DEBUG] [Thread-136800 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:44:01.686 [DEBUG] [Thread-136801 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:44:04.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T23:44:04.801 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T23:44:04.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T23:44:05.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 23, 43, 36), 3.92, 77.37, 0.0, 17.31, 14.78, 0, 0, 0, 2, 0, 0),)
2025-12-31T23:44:05.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 23:43:36
2025-12-31T23:44:05.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T23:44:05.782 [DEBUG] [Thread-136802] [transport.py] [_log()] starting thread (client mode): 0xb6bbc430
2025-12-31T23:44:05.782 [DEBUG] [Thread-136802] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:44:05.802 [DEBUG] [Thread-136802] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T23:44:05.802 [INFO] [Thread-136802] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T23:44:05.806 [DEBUG] [Thread-136802] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:44:05.806 [DEBUG] [Thread-136802] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T23:44:05.806 [DEBUG] [Thread-136802] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:44:05.806 [DEBUG] [Thread-136802] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:44:05.806 [DEBUG] [Thread-136802] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:44:05.806 [DEBUG] [Thread-136802] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:44:05.806 [DEBUG] [Thread-136802] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:44:05.806 [DEBUG] [Thread-136802] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:44:05.806 [DEBUG] [Thread-136802] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:44:05.806 [DEBUG] [Thread-136802] [transport.py] [_log()] client lang: <none>
2025-12-31T23:44:05.806 [DEBUG] [Thread-136802] [transport.py] [_log()] server lang: <none>
2025-12-31T23:44:05.806 [DEBUG] [Thread-136802] [transport.py] [_log()] kex follows: False
2025-12-31T23:44:05.806 [DEBUG] [Thread-136802] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:44:05.806 [DEBUG] [Thread-136802] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:44:05.806 [DEBUG] [Thread-136802] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:44:05.807 [DEBUG] [Thread-136802] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:44:05.807 [DEBUG] [Thread-136802] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:44:05.807 [DEBUG] [Thread-136802] [transport.py] [_log()] Compression: none
2025-12-31T23:44:05.807 [DEBUG] [Thread-136802] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:44:05.825 [DEBUG] [Thread-136802] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:44:05.825 [DEBUG] [Thread-136802] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:44:05.826 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T23:44:05.826 [DEBUG] [Thread-136802] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T23:44:05.827 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:44:05.828 [DEBUG] [Thread-136802] [transport.py] [_log()] userauth is OK
2025-12-31T23:44:05.829 [DEBUG] [Thread-136802] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:44:05.829 [DEBUG] [Thread-136802] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:44:05.829 [DEBUG] [Thread-136802] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T23:44:05.829 [DEBUG] [Thread-136802] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:44:05.847 [INFO] [Thread-136802] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:44:05.847 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:44:06.512 [DEBUG] [Thread-136802] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:44:06.512 [DEBUG] [Thread-136802] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:44:06.513 [DEBUG] [Thread-136802] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T23:44:06.553 [DEBUG] [Thread-136802] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:44:06.553 [DEBUG] [Thread-136802] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:44:06.556 [DEBUG] [Thread-136802] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:44:06.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:44:06.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T23:44:06.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T23:44:06.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T23:44:06.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:44:06.577 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T23:44:06.577 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:44:06.577 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:44:06.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T23:44:06.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.905343 -999.00  +15.00  11.40     80  +11.50 1 1 1 2 1     0    0 2.66 -32.46 ZNESW 12.0 11.4 196.6 15.0 15.8 -20.6 15.6 -19.8 15.6 -18.3 15.8 -19.4
2025-12-31T23:44:06.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T23:44:06.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T23:44:06.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.905343
2025-12-31T23:44:06.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T23:44:06.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T23:44:06.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T23:44:06.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T23:44:06.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T23:44:06.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T23:43:36', tmtdew=3.92, humidity=77.37, cloud=0.0, wind=17.31, temperature=14.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T23:43:37', seeing=1.03, atlas_timestamp='2025-12-31T21:43:41.635', atlas_cloud=1, atlas_rain=1, zp_data=[0.08174999999999955, 0.11125000000000007, 0.10224999999999973, 0.03549999999999898, -0.042500000000000426, 0.0002500000000011937, 0.029500000000000526, 0.056250000000000355, 0.058499999999998664, 0.09100000000000108, 0.09924999999999962, 0.01699999999999946, 0.05299999999999905, 0.07124999999999915, -0.15399999999999991, 0.0009999999999994458, 0.11425000000000018, 0.33000000000000007, 0.2749999999999986, 0.0677500000000002, 0.1479999999999979, -0.18625000000000114, -0.34174999999999933, 0.0752499999999987, 0.16499999999999915, 0.3745000000000003, 0.29274999999999984, nan, -0.6784999999999997, -1.5879999999999992, -1.9019999999999992, 0.0010000000000012221, 0.3017499999999984], zp_timestamp='2025-12-31T21:40:00')
2025-12-31T23:44:06.580 [DEBUG] [Thread-136802] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:44:06.662 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T23:44:06.676 [DEBUG] [Thread-136805] [transport.py] [_log()] starting thread (client mode): 0xb6bbe800
2025-12-31T23:44:06.676 [DEBUG] [Thread-136805] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:44:06.690 [DEBUG] [Thread-136805] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T23:44:06.691 [INFO] [Thread-136805] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T23:44:06.698 [DEBUG] [Thread-136805] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:44:06.698 [DEBUG] [Thread-136805] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T23:44:06.698 [DEBUG] [Thread-136805] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:44:06.698 [DEBUG] [Thread-136805] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:44:06.698 [DEBUG] [Thread-136805] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:44:06.698 [DEBUG] [Thread-136805] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:44:06.698 [DEBUG] [Thread-136805] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:44:06.698 [DEBUG] [Thread-136805] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:44:06.699 [DEBUG] [Thread-136805] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:44:06.699 [DEBUG] [Thread-136805] [transport.py] [_log()] client lang: <none>
2025-12-31T23:44:06.699 [DEBUG] [Thread-136805] [transport.py] [_log()] server lang: <none>
2025-12-31T23:44:06.699 [DEBUG] [Thread-136805] [transport.py] [_log()] kex follows: False
2025-12-31T23:44:06.699 [DEBUG] [Thread-136805] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:44:06.699 [DEBUG] [Thread-136805] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:44:06.699 [DEBUG] [Thread-136805] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:44:06.699 [DEBUG] [Thread-136805] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:44:06.699 [DEBUG] [Thread-136805] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:44:06.699 [DEBUG] [Thread-136805] [transport.py] [_log()] Compression: none
2025-12-31T23:44:06.699 [DEBUG] [Thread-136805] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:44:06.757 [DEBUG] [Thread-136805] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:44:06.758 [DEBUG] [Thread-136805] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:44:06.758 [DEBUG] [Thread-136805] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T23:44:06.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T23:44:06.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:44:06.820 [DEBUG] [Thread-136805] [transport.py] [_log()] userauth is OK
2025-12-31T23:44:06.820 [DEBUG] [Thread-136805] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:44:06.820 [DEBUG] [Thread-136805] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:44:06.821 [DEBUG] [Thread-136805] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T23:44:06.821 [DEBUG] [Thread-136805] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:44:06.840 [INFO] [Thread-136805] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:44:06.840 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T23:44:06.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:44:07.659 [DEBUG] [Thread-136805] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:44:07.659 [DEBUG] [Thread-136805] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:44:07.707 [DEBUG] [Thread-136805] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:44:07.707 [DEBUG] [Thread-136805] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:44:07.716 [DEBUG] [Thread-136805] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:44:07.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:44:07.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T23:44:07.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T23:44:07.749 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:44:07.749 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:44:07.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:44:07.758 [DEBUG] [Thread-136805] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:44:16.720 [DEBUG] [Thread-136807 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:44:29.472 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:44:29.473 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:44:31.760 [DEBUG] [Thread-136808 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:44:37.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T23:44:37.780 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T23:44:37.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T23:44:38.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 23, 44, 9), 3.91, 77.43, 0.0, 16.29, 14.78, 0, 0, 0, 2, 0, 0),)
2025-12-31T23:44:38.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 23:44:09
2025-12-31T23:44:38.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T23:44:38.753 [DEBUG] [Thread-136809] [transport.py] [_log()] starting thread (client mode): 0xb6bbf0a0
2025-12-31T23:44:38.753 [DEBUG] [Thread-136809] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:44:38.774 [DEBUG] [Thread-136809] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T23:44:38.774 [INFO] [Thread-136809] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T23:44:38.777 [DEBUG] [Thread-136809] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:44:38.777 [DEBUG] [Thread-136809] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T23:44:38.777 [DEBUG] [Thread-136809] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:44:38.777 [DEBUG] [Thread-136809] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:44:38.777 [DEBUG] [Thread-136809] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:44:38.777 [DEBUG] [Thread-136809] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:44:38.777 [DEBUG] [Thread-136809] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:44:38.777 [DEBUG] [Thread-136809] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:44:38.777 [DEBUG] [Thread-136809] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:44:38.777 [DEBUG] [Thread-136809] [transport.py] [_log()] client lang: <none>
2025-12-31T23:44:38.777 [DEBUG] [Thread-136809] [transport.py] [_log()] server lang: <none>
2025-12-31T23:44:38.777 [DEBUG] [Thread-136809] [transport.py] [_log()] kex follows: False
2025-12-31T23:44:38.777 [DEBUG] [Thread-136809] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:44:38.777 [DEBUG] [Thread-136809] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:44:38.777 [DEBUG] [Thread-136809] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:44:38.777 [DEBUG] [Thread-136809] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:44:38.777 [DEBUG] [Thread-136809] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:44:38.778 [DEBUG] [Thread-136809] [transport.py] [_log()] Compression: none
2025-12-31T23:44:38.778 [DEBUG] [Thread-136809] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:44:38.795 [DEBUG] [Thread-136809] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:44:38.796 [DEBUG] [Thread-136809] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:44:38.797 [DEBUG] [Thread-136809] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T23:44:38.797 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T23:44:38.797 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:44:38.799 [DEBUG] [Thread-136809] [transport.py] [_log()] userauth is OK
2025-12-31T23:44:38.799 [DEBUG] [Thread-136809] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:44:38.799 [DEBUG] [Thread-136809] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:44:38.799 [DEBUG] [Thread-136809] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T23:44:38.799 [DEBUG] [Thread-136809] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:44:38.834 [INFO] [Thread-136809] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:44:38.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:44:39.463 [DEBUG] [Thread-136809] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:44:39.464 [DEBUG] [Thread-136809] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:44:39.464 [DEBUG] [Thread-136809] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T23:44:39.505 [DEBUG] [Thread-136809] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:44:39.505 [DEBUG] [Thread-136809] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:44:39.509 [DEBUG] [Thread-136809] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:44:39.515 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:44:39.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T23:44:39.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T23:44:39.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T23:44:39.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:44:39.528 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T23:44:39.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:44:39.528 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:44:39.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T23:44:39.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.905690 -999.00  +15.00   9.53     80  +11.50 1 1 1 2 1     0    0 2.69 -30.56 ZNESW 9.6 9.5 196.8 13.9 15.8 -20.4 15.7 -19.5 15.6 -18.1 15.8 -19.0
2025-12-31T23:44:39.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T23:44:39.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T23:44:39.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.905690
2025-12-31T23:44:39.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T23:44:39.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T23:44:39.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T23:44:39.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T23:44:39.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T23:44:39.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T23:44:09', tmtdew=3.91, humidity=77.43, cloud=0.0, wind=16.29, temperature=14.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T23:44:09', seeing=0.96, atlas_timestamp='2025-12-31T21:44:11.616', atlas_cloud=1, atlas_rain=1, zp_data=[0.08174999999999955, 0.11125000000000007, 0.10224999999999973, 0.03549999999999898, -0.042500000000000426, 0.0002500000000011937, 0.029500000000000526, 0.056250000000000355, 0.058499999999998664, 0.09100000000000108, 0.09924999999999962, 0.01699999999999946, 0.05299999999999905, 0.07124999999999915, -0.15399999999999991, 0.0009999999999994458, 0.11425000000000018, 0.33000000000000007, 0.2749999999999986, 0.0677500000000002, 0.1479999999999979, -0.18625000000000114, -0.34174999999999933, 0.0752499999999987, 0.16499999999999915, 0.3745000000000003, 0.29274999999999984, nan, -0.6784999999999997, -1.5879999999999992, -1.9019999999999992, 0.0010000000000012221, 0.3017499999999984], zp_timestamp='2025-12-31T21:40:00')
2025-12-31T23:44:39.530 [DEBUG] [Thread-136809] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:44:39.614 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T23:44:39.627 [DEBUG] [Thread-136812] [transport.py] [_log()] starting thread (client mode): 0xb6bbe110
2025-12-31T23:44:39.627 [DEBUG] [Thread-136812] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:44:39.641 [DEBUG] [Thread-136812] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T23:44:39.642 [INFO] [Thread-136812] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T23:44:39.649 [DEBUG] [Thread-136812] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:44:39.649 [DEBUG] [Thread-136812] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T23:44:39.649 [DEBUG] [Thread-136812] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:44:39.649 [DEBUG] [Thread-136812] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:44:39.649 [DEBUG] [Thread-136812] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:44:39.649 [DEBUG] [Thread-136812] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:44:39.649 [DEBUG] [Thread-136812] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:44:39.649 [DEBUG] [Thread-136812] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:44:39.650 [DEBUG] [Thread-136812] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:44:39.650 [DEBUG] [Thread-136812] [transport.py] [_log()] client lang: <none>
2025-12-31T23:44:39.650 [DEBUG] [Thread-136812] [transport.py] [_log()] server lang: <none>
2025-12-31T23:44:39.650 [DEBUG] [Thread-136812] [transport.py] [_log()] kex follows: False
2025-12-31T23:44:39.650 [DEBUG] [Thread-136812] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:44:39.650 [DEBUG] [Thread-136812] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:44:39.650 [DEBUG] [Thread-136812] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:44:39.650 [DEBUG] [Thread-136812] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:44:39.650 [DEBUG] [Thread-136812] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:44:39.650 [DEBUG] [Thread-136812] [transport.py] [_log()] Compression: none
2025-12-31T23:44:39.650 [DEBUG] [Thread-136812] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:44:39.708 [DEBUG] [Thread-136812] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:44:39.708 [DEBUG] [Thread-136812] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:44:39.709 [DEBUG] [Thread-136812] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T23:44:39.709 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T23:44:39.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:44:39.764 [DEBUG] [Thread-136812] [transport.py] [_log()] userauth is OK
2025-12-31T23:44:39.764 [DEBUG] [Thread-136812] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:44:39.764 [DEBUG] [Thread-136812] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:44:39.764 [DEBUG] [Thread-136812] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T23:44:39.764 [DEBUG] [Thread-136812] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:44:39.783 [INFO] [Thread-136812] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:44:39.783 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T23:44:39.784 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:44:40.596 [DEBUG] [Thread-136812] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:44:40.596 [DEBUG] [Thread-136812] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:44:40.644 [DEBUG] [Thread-136812] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:44:40.645 [DEBUG] [Thread-136812] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:44:40.653 [DEBUG] [Thread-136812] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:44:40.663 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:44:40.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T23:44:40.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T23:44:40.682 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:44:40.682 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:44:40.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:44:40.691 [DEBUG] [Thread-136812] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:44:46.795 [DEBUG] [Thread-136814 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:44:53.300 [DEBUG] [Thread-136815 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:45:01.842 [DEBUG] [Thread-136816 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:45:10.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T23:45:10.704 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T23:45:10.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T23:45:11.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 23, 44, 41), 3.91, 77.43, 0.0, 18.05, 14.8, 0, 0, 0, 2, 0, 0),)
2025-12-31T23:45:11.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 23:44:41
2025-12-31T23:45:11.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T23:45:11.694 [DEBUG] [Thread-136817] [transport.py] [_log()] starting thread (client mode): 0xb9578a30
2025-12-31T23:45:11.694 [DEBUG] [Thread-136817] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:45:11.711 [DEBUG] [Thread-136817] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T23:45:11.711 [INFO] [Thread-136817] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T23:45:11.712 [DEBUG] [Thread-136817] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:45:11.713 [DEBUG] [Thread-136817] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T23:45:11.713 [DEBUG] [Thread-136817] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:45:11.713 [DEBUG] [Thread-136817] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:45:11.713 [DEBUG] [Thread-136817] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:45:11.713 [DEBUG] [Thread-136817] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:45:11.713 [DEBUG] [Thread-136817] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:45:11.713 [DEBUG] [Thread-136817] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:45:11.713 [DEBUG] [Thread-136817] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:45:11.713 [DEBUG] [Thread-136817] [transport.py] [_log()] client lang: <none>
2025-12-31T23:45:11.713 [DEBUG] [Thread-136817] [transport.py] [_log()] server lang: <none>
2025-12-31T23:45:11.713 [DEBUG] [Thread-136817] [transport.py] [_log()] kex follows: False
2025-12-31T23:45:11.713 [DEBUG] [Thread-136817] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:45:11.713 [DEBUG] [Thread-136817] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:45:11.713 [DEBUG] [Thread-136817] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:45:11.713 [DEBUG] [Thread-136817] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:45:11.713 [DEBUG] [Thread-136817] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:45:11.713 [DEBUG] [Thread-136817] [transport.py] [_log()] Compression: none
2025-12-31T23:45:11.713 [DEBUG] [Thread-136817] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:45:11.725 [DEBUG] [Thread-136817] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:45:11.726 [DEBUG] [Thread-136817] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:45:11.726 [DEBUG] [Thread-136817] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T23:45:11.726 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T23:45:11.726 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:45:11.727 [DEBUG] [Thread-136817] [transport.py] [_log()] userauth is OK
2025-12-31T23:45:11.727 [DEBUG] [Thread-136817] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:45:11.727 [DEBUG] [Thread-136817] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:45:11.727 [DEBUG] [Thread-136817] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T23:45:11.727 [DEBUG] [Thread-136817] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:45:11.736 [INFO] [Thread-136817] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:45:11.736 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:45:16.873 [DEBUG] [Thread-136819 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:45:18.586 [DEBUG] [Thread-136817] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:45:18.586 [DEBUG] [Thread-136817] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:45:18.587 [DEBUG] [Thread-136817] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T23:45:18.627 [DEBUG] [Thread-136817] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:45:18.627 [DEBUG] [Thread-136817] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:45:18.630 [DEBUG] [Thread-136817] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:45:18.673 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:45:18.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T23:45:18.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T23:45:18.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T23:45:18.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:45:18.701 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T23:45:18.701 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:45:18.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:45:18.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T23:45:18.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.906038 -999.00  +15.00  12.30     80  +11.50 1 1 1 2 1     0    0 2.69 -31.66 ZNESW 14.2 12.3 198.6 20.7 15.8 -20.5 15.7 -19.8 15.5 -18.1 15.8 -19.1
2025-12-31T23:45:18.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T23:45:18.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T23:45:18.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.906038
2025-12-31T23:45:18.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T23:45:18.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T23:45:18.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T23:45:18.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T23:45:18.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T23:45:18.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T23:44:41', tmtdew=3.91, humidity=77.43, cloud=0.0, wind=18.05, temperature=14.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T23:44:41', seeing=0.95, atlas_timestamp='2025-12-31T21:44:41.683', atlas_cloud=1, atlas_rain=1, zp_data=[0.08174999999999955, 0.11125000000000007, 0.10224999999999973, 0.03549999999999898, -0.042500000000000426, 0.0002500000000011937, 0.029500000000000526, 0.056250000000000355, 0.058499999999998664, 0.09100000000000108, 0.09924999999999962, 0.01699999999999946, 0.05299999999999905, 0.07124999999999915, -0.15399999999999991, 0.0009999999999994458, 0.11425000000000018, 0.33000000000000007, 0.2749999999999986, 0.0677500000000002, 0.1479999999999979, -0.18625000000000114, -0.34174999999999933, 0.0752499999999987, 0.16499999999999915, 0.3745000000000003, 0.29274999999999984, nan, -0.6784999999999997, -1.5879999999999992, -1.9019999999999992, 0.0010000000000012221, 0.3017499999999984], zp_timestamp='2025-12-31T21:40:00')
2025-12-31T23:45:18.704 [DEBUG] [Thread-136817] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:45:18.801 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T23:45:18.814 [DEBUG] [Thread-136821] [transport.py] [_log()] starting thread (client mode): 0xb9578730
2025-12-31T23:45:18.815 [DEBUG] [Thread-136821] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:45:18.830 [DEBUG] [Thread-136821] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T23:45:18.830 [INFO] [Thread-136821] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T23:45:18.838 [DEBUG] [Thread-136821] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:45:18.838 [DEBUG] [Thread-136821] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T23:45:18.838 [DEBUG] [Thread-136821] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:45:18.839 [DEBUG] [Thread-136821] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:45:18.839 [DEBUG] [Thread-136821] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:45:18.839 [DEBUG] [Thread-136821] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:45:18.839 [DEBUG] [Thread-136821] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:45:18.839 [DEBUG] [Thread-136821] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:45:18.839 [DEBUG] [Thread-136821] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:45:18.839 [DEBUG] [Thread-136821] [transport.py] [_log()] client lang: <none>
2025-12-31T23:45:18.839 [DEBUG] [Thread-136821] [transport.py] [_log()] server lang: <none>
2025-12-31T23:45:18.839 [DEBUG] [Thread-136821] [transport.py] [_log()] kex follows: False
2025-12-31T23:45:18.840 [DEBUG] [Thread-136821] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:45:18.840 [DEBUG] [Thread-136821] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:45:18.840 [DEBUG] [Thread-136821] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:45:18.840 [DEBUG] [Thread-136821] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:45:18.840 [DEBUG] [Thread-136821] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:45:18.840 [DEBUG] [Thread-136821] [transport.py] [_log()] Compression: none
2025-12-31T23:45:18.840 [DEBUG] [Thread-136821] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:45:18.897 [DEBUG] [Thread-136821] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:45:18.897 [DEBUG] [Thread-136821] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:45:18.898 [DEBUG] [Thread-136821] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T23:45:18.898 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T23:45:18.899 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:45:18.956 [DEBUG] [Thread-136821] [transport.py] [_log()] userauth is OK
2025-12-31T23:45:18.956 [DEBUG] [Thread-136821] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:45:18.956 [DEBUG] [Thread-136821] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:45:18.956 [DEBUG] [Thread-136821] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T23:45:18.957 [DEBUG] [Thread-136821] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:45:18.975 [INFO] [Thread-136821] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:45:18.976 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T23:45:18.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:45:19.811 [DEBUG] [Thread-136821] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:45:19.812 [DEBUG] [Thread-136821] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:45:19.859 [DEBUG] [Thread-136821] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:45:19.859 [DEBUG] [Thread-136821] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:45:19.869 [DEBUG] [Thread-136821] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:45:19.878 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:45:19.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T23:45:19.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T23:45:19.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:45:19.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:45:19.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:45:19.906 [DEBUG] [Thread-136821] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:45:29.673 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:45:29.674 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:45:31.907 [DEBUG] [Thread-136823 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:45:44.865 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:45:46.951 [DEBUG] [Thread-136824 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:45:48.023 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:45:49.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T23:45:49.927 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T23:45:49.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-12-31T23:45:50.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 23, 45, 45), 3.9, 77.47, 0.0, 17.77, 14.77, 0, 0, 0, 2, 0, 0),)
2025-12-31T23:45:50.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 23:45:45
2025-12-31T23:45:50.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T23:45:50.915 [DEBUG] [Thread-136825] [transport.py] [_log()] starting thread (client mode): 0xb1797310
2025-12-31T23:45:50.915 [DEBUG] [Thread-136825] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:45:50.936 [DEBUG] [Thread-136825] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T23:45:50.937 [INFO] [Thread-136825] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T23:45:50.939 [DEBUG] [Thread-136825] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:45:50.940 [DEBUG] [Thread-136825] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T23:45:50.940 [DEBUG] [Thread-136825] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:45:50.940 [DEBUG] [Thread-136825] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:45:50.940 [DEBUG] [Thread-136825] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:45:50.940 [DEBUG] [Thread-136825] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:45:50.940 [DEBUG] [Thread-136825] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:45:50.940 [DEBUG] [Thread-136825] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:45:50.940 [DEBUG] [Thread-136825] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:45:50.940 [DEBUG] [Thread-136825] [transport.py] [_log()] client lang: <none>
2025-12-31T23:45:50.940 [DEBUG] [Thread-136825] [transport.py] [_log()] server lang: <none>
2025-12-31T23:45:50.940 [DEBUG] [Thread-136825] [transport.py] [_log()] kex follows: False
2025-12-31T23:45:50.940 [DEBUG] [Thread-136825] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:45:50.940 [DEBUG] [Thread-136825] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:45:50.940 [DEBUG] [Thread-136825] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:45:50.940 [DEBUG] [Thread-136825] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:45:50.940 [DEBUG] [Thread-136825] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:45:50.940 [DEBUG] [Thread-136825] [transport.py] [_log()] Compression: none
2025-12-31T23:45:50.940 [DEBUG] [Thread-136825] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:45:50.958 [DEBUG] [Thread-136825] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:45:50.958 [DEBUG] [Thread-136825] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:45:50.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T23:45:50.959 [DEBUG] [Thread-136825] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T23:45:50.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:45:50.961 [DEBUG] [Thread-136825] [transport.py] [_log()] userauth is OK
2025-12-31T23:45:50.961 [DEBUG] [Thread-136825] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:45:50.961 [DEBUG] [Thread-136825] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:45:50.961 [DEBUG] [Thread-136825] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T23:45:50.961 [DEBUG] [Thread-136825] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:45:50.980 [INFO] [Thread-136825] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:45:50.980 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:45:51.626 [DEBUG] [Thread-136825] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:45:51.626 [DEBUG] [Thread-136825] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:45:51.627 [DEBUG] [Thread-136825] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T23:45:51.667 [DEBUG] [Thread-136825] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:45:51.667 [DEBUG] [Thread-136825] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:45:51.671 [DEBUG] [Thread-136825] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:45:51.683 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:45:51.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T23:45:51.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T23:45:51.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T23:45:51.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:45:51.695 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T23:45:51.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:45:51.695 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:45:51.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T23:45:51.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.906385 -999.00  +14.90  10.77     80  +11.50 1 1 1 2 1     0    0 2.72 -31.41 ZNESW 13.7 10.8 186.6 18.9 15.8 -20.5 15.6 -19.5 15.5 -17.9 15.8 -18.9
2025-12-31T23:45:51.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T23:45:51.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T23:45:51.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.906385
2025-12-31T23:45:51.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T23:45:51.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T23:45:51.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T23:45:51.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T23:45:51.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T23:45:51.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T23:45:45', tmtdew=3.9, humidity=77.47, cloud=0.0, wind=17.77, temperature=14.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T23:45:45', seeing=1.16, atlas_timestamp='2025-12-31T21:45:11.664', atlas_cloud=1, atlas_rain=1, zp_data=[0.03324999999999889, 0.09825000000000017, 0.0807500000000001, -0.01600000000000179, -0.024499999999999744, 0.09325000000000117, 0.0235000000000003, 0.1017500000000009, 0.09450000000000003, 0.0730000000000004, 0.11224999999999952, 0.1880000000000006, 0.22250000000000014, 0.05424999999999969, -0.10000000000000142, 0.010999999999999233, 0.05925000000000047, 0.1404999999999994, 0.21349999999999802, 0.9122499999999993, 0.20749999999999957, -0.8477500000000013, -0.18975000000000009, 0.09774999999999956, 0.16499999999999915, 0.6035000000000004, 0.15674999999999883, nan, -0.8879999999999999, -1.6759999999999984, -0.7889999999999997, 0.03300000000000125, 0.25574999999999903], zp_timestamp='2025-12-31T21:43:00')
2025-12-31T23:45:51.698 [DEBUG] [Thread-136825] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:45:51.781 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T23:45:51.794 [DEBUG] [Thread-136828] [transport.py] [_log()] starting thread (client mode): 0xb1794df0
2025-12-31T23:45:51.794 [DEBUG] [Thread-136828] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:45:51.809 [DEBUG] [Thread-136828] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T23:45:51.810 [INFO] [Thread-136828] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T23:45:51.817 [DEBUG] [Thread-136828] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:45:51.817 [DEBUG] [Thread-136828] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T23:45:51.817 [DEBUG] [Thread-136828] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:45:51.817 [DEBUG] [Thread-136828] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:45:51.818 [DEBUG] [Thread-136828] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:45:51.818 [DEBUG] [Thread-136828] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:45:51.818 [DEBUG] [Thread-136828] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:45:51.818 [DEBUG] [Thread-136828] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:45:51.818 [DEBUG] [Thread-136828] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:45:51.818 [DEBUG] [Thread-136828] [transport.py] [_log()] client lang: <none>
2025-12-31T23:45:51.818 [DEBUG] [Thread-136828] [transport.py] [_log()] server lang: <none>
2025-12-31T23:45:51.818 [DEBUG] [Thread-136828] [transport.py] [_log()] kex follows: False
2025-12-31T23:45:51.818 [DEBUG] [Thread-136828] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:45:51.818 [DEBUG] [Thread-136828] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:45:51.818 [DEBUG] [Thread-136828] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:45:51.818 [DEBUG] [Thread-136828] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:45:51.818 [DEBUG] [Thread-136828] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:45:51.818 [DEBUG] [Thread-136828] [transport.py] [_log()] Compression: none
2025-12-31T23:45:51.818 [DEBUG] [Thread-136828] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:45:51.876 [DEBUG] [Thread-136828] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:45:51.876 [DEBUG] [Thread-136828] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:45:51.877 [DEBUG] [Thread-136828] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T23:45:51.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T23:45:51.878 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:45:51.932 [DEBUG] [Thread-136828] [transport.py] [_log()] userauth is OK
2025-12-31T23:45:51.932 [DEBUG] [Thread-136828] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:45:51.932 [DEBUG] [Thread-136828] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:45:51.932 [DEBUG] [Thread-136828] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T23:45:51.933 [DEBUG] [Thread-136828] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:45:51.952 [INFO] [Thread-136828] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:45:51.952 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T23:45:51.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:45:52.834 [DEBUG] [Thread-136828] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:45:52.834 [DEBUG] [Thread-136828] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:45:52.882 [DEBUG] [Thread-136828] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:45:52.882 [DEBUG] [Thread-136828] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:45:52.892 [DEBUG] [Thread-136828] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:45:52.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:45:52.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T23:45:52.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T23:45:52.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:45:52.919 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:45:52.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:45:52.927 [DEBUG] [Thread-136828] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:45:53.099 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:45:53.366 [DEBUG] [Thread-136830 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:45:58.472 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:46:01.984 [DEBUG] [Thread-136831 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:46:17.043 [DEBUG] [Thread-136832 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:46:17.879 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:46:22.269 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:46:22.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T23:46:22.950 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T23:46: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-12-31T23:46:23.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 23, 46, 16), 3.89, 77.5, 0.0, 17.86, 14.72, 0, 0, 0, 2, 0, 0),)
2025-12-31T23:46:23.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 23:46:16
2025-12-31T23:46:23.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T23:46:23.926 [DEBUG] [Thread-136833] [transport.py] [_log()] starting thread (client mode): 0xb6bbe2f0
2025-12-31T23:46:23.926 [DEBUG] [Thread-136833] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:46:23.947 [DEBUG] [Thread-136833] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T23:46:23.947 [INFO] [Thread-136833] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T23:46:23.950 [DEBUG] [Thread-136833] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:46:23.950 [DEBUG] [Thread-136833] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T23:46:23.950 [DEBUG] [Thread-136833] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:46:23.951 [DEBUG] [Thread-136833] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:46:23.951 [DEBUG] [Thread-136833] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:46:23.951 [DEBUG] [Thread-136833] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:46:23.951 [DEBUG] [Thread-136833] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:46:23.951 [DEBUG] [Thread-136833] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:46:23.951 [DEBUG] [Thread-136833] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:46:23.951 [DEBUG] [Thread-136833] [transport.py] [_log()] client lang: <none>
2025-12-31T23:46:23.951 [DEBUG] [Thread-136833] [transport.py] [_log()] server lang: <none>
2025-12-31T23:46:23.951 [DEBUG] [Thread-136833] [transport.py] [_log()] kex follows: False
2025-12-31T23:46:23.951 [DEBUG] [Thread-136833] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:46:23.951 [DEBUG] [Thread-136833] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:46:23.951 [DEBUG] [Thread-136833] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:46:23.951 [DEBUG] [Thread-136833] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:46:23.952 [DEBUG] [Thread-136833] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:46:23.952 [DEBUG] [Thread-136833] [transport.py] [_log()] Compression: none
2025-12-31T23:46:23.952 [DEBUG] [Thread-136833] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:46:23.969 [DEBUG] [Thread-136833] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:46:23.970 [DEBUG] [Thread-136833] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:46:23.971 [DEBUG] [Thread-136833] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T23:46:23.971 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T23:46:23.972 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:46:23.974 [DEBUG] [Thread-136833] [transport.py] [_log()] userauth is OK
2025-12-31T23:46:23.974 [DEBUG] [Thread-136833] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:46:23.974 [DEBUG] [Thread-136833] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:46:23.974 [DEBUG] [Thread-136833] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T23:46:23.975 [DEBUG] [Thread-136833] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:46:23.996 [INFO] [Thread-136833] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:46:23.997 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:46:24.764 [DEBUG] [Thread-136833] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:46:24.764 [DEBUG] [Thread-136833] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:46:24.765 [DEBUG] [Thread-136833] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T23:46:24.805 [DEBUG] [Thread-136833] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:46:24.805 [DEBUG] [Thread-136833] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:46:24.809 [DEBUG] [Thread-136833] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:46:24.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:46:24.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T23:46:24.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T23:46:24.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T23:46:24.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:46:24.837 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T23:46:24.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:46:24.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:46:24.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T23:46:24.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.906732 -999.00  +14.90  11.35     80  +11.50 1 1 1 2 1     0    0 2.63 -32.58 ZNESW 9.0 11.3 198.8 18.3 15.9 -20.4 15.6 -20.0 15.5 -17.9 15.8 -18.9
2025-12-31T23:46:24.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T23:46:24.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T23:46:24.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.906732
2025-12-31T23:46:24.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T23:46:24.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T23:46:24.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T23:46:24.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T23:46:24.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-31T23:46:24.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T23:46:16', tmtdew=3.89, humidity=77.5, cloud=0.0, wind=17.86, temperature=14.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T23:46:17', seeing=1.0, atlas_timestamp='2025-12-31T21:45:41.645', atlas_cloud=1, atlas_rain=1, zp_data=[0.03324999999999889, 0.09825000000000017, 0.0807500000000001, -0.01600000000000179, -0.024499999999999744, 0.09325000000000117, 0.0235000000000003, 0.1017500000000009, 0.09450000000000003, 0.0730000000000004, 0.11224999999999952, 0.1880000000000006, 0.22250000000000014, 0.05424999999999969, -0.10000000000000142, 0.010999999999999233, 0.05925000000000047, 0.1404999999999994, 0.21349999999999802, 0.9122499999999993, 0.20749999999999957, -0.8477500000000013, -0.18975000000000009, 0.09774999999999956, 0.16499999999999915, 0.6035000000000004, 0.15674999999999883, nan, -0.8879999999999999, -1.6759999999999984, -0.7889999999999997, 0.03300000000000125, 0.25574999999999903], zp_timestamp='2025-12-31T21:43:00')
2025-12-31T23:46:24.841 [DEBUG] [Thread-136833] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:46:24.913 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T23:46:24.924 [DEBUG] [Thread-136836] [transport.py] [_log()] starting thread (client mode): 0xb6bbc9a0
2025-12-31T23:46:24.924 [DEBUG] [Thread-136836] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:46:24.938 [DEBUG] [Thread-136836] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T23:46:24.938 [INFO] [Thread-136836] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T23:46:24.945 [DEBUG] [Thread-136836] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:46:24.945 [DEBUG] [Thread-136836] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T23:46:24.946 [DEBUG] [Thread-136836] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:46:24.946 [DEBUG] [Thread-136836] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:46:24.946 [DEBUG] [Thread-136836] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:46:24.946 [DEBUG] [Thread-136836] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:46:24.946 [DEBUG] [Thread-136836] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:46:24.946 [DEBUG] [Thread-136836] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:46:24.946 [DEBUG] [Thread-136836] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:46:24.946 [DEBUG] [Thread-136836] [transport.py] [_log()] client lang: <none>
2025-12-31T23:46:24.946 [DEBUG] [Thread-136836] [transport.py] [_log()] server lang: <none>
2025-12-31T23:46:24.946 [DEBUG] [Thread-136836] [transport.py] [_log()] kex follows: False
2025-12-31T23:46:24.946 [DEBUG] [Thread-136836] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:46:24.946 [DEBUG] [Thread-136836] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:46:24.946 [DEBUG] [Thread-136836] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:46:24.946 [DEBUG] [Thread-136836] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:46:24.946 [DEBUG] [Thread-136836] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:46:24.946 [DEBUG] [Thread-136836] [transport.py] [_log()] Compression: none
2025-12-31T23:46:24.946 [DEBUG] [Thread-136836] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:46:25.006 [DEBUG] [Thread-136836] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:46:25.006 [DEBUG] [Thread-136836] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:46:25.006 [DEBUG] [Thread-136836] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T23:46:25.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T23:46:25.007 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:46:25.063 [DEBUG] [Thread-136836] [transport.py] [_log()] userauth is OK
2025-12-31T23:46:25.063 [DEBUG] [Thread-136836] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:46:25.063 [DEBUG] [Thread-136836] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:46:25.063 [DEBUG] [Thread-136836] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T23:46:25.063 [DEBUG] [Thread-136836] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:46:25.081 [INFO] [Thread-136836] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:46:25.082 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T23:46:25.082 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:46:25.896 [DEBUG] [Thread-136836] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:46:25.897 [DEBUG] [Thread-136836] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:46:25.944 [DEBUG] [Thread-136836] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:46:25.944 [DEBUG] [Thread-136836] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:46:25.953 [DEBUG] [Thread-136836] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:46:25.963 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:46:25.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T23:46: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') -> 00000000
2025-12-31T23:46:25.981 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:46:25.982 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:46:25.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:46:25.990 [DEBUG] [Thread-136836] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:46:29.872 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:46:29.873 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:46:32.071 [DEBUG] [Thread-136838 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:46:41.663 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:46:46.050 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:46:47.125 [DEBUG] [Thread-136839 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:46:52.998 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:46:53.422 [DEBUG] [Thread-136840 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:46:56.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T23:46:56.013 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T23:46:56.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T23:46:56.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 23, 46, 49), 3.84, 77.53, 0.0, 19.85, 14.72, 0, 0, 0, 2, 0, 0),)
2025-12-31T23:46:56.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 23:46:49
2025-12-31T23:46:56.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T23:46:57.059 [DEBUG] [Thread-136841] [transport.py] [_log()] starting thread (client mode): 0xb6bbd7e0
2025-12-31T23:46:57.059 [DEBUG] [Thread-136841] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:46:57.079 [DEBUG] [Thread-136841] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T23:46:57.080 [INFO] [Thread-136841] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T23:46:57.083 [DEBUG] [Thread-136841] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:46:57.083 [DEBUG] [Thread-136841] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T23:46:57.083 [DEBUG] [Thread-136841] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:46:57.083 [DEBUG] [Thread-136841] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:46:57.083 [DEBUG] [Thread-136841] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:46:57.083 [DEBUG] [Thread-136841] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:46:57.083 [DEBUG] [Thread-136841] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:46:57.083 [DEBUG] [Thread-136841] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:46:57.083 [DEBUG] [Thread-136841] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:46:57.083 [DEBUG] [Thread-136841] [transport.py] [_log()] client lang: <none>
2025-12-31T23:46:57.083 [DEBUG] [Thread-136841] [transport.py] [_log()] server lang: <none>
2025-12-31T23:46:57.083 [DEBUG] [Thread-136841] [transport.py] [_log()] kex follows: False
2025-12-31T23:46:57.083 [DEBUG] [Thread-136841] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:46:57.083 [DEBUG] [Thread-136841] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:46:57.083 [DEBUG] [Thread-136841] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:46:57.083 [DEBUG] [Thread-136841] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:46:57.083 [DEBUG] [Thread-136841] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:46:57.083 [DEBUG] [Thread-136841] [transport.py] [_log()] Compression: none
2025-12-31T23:46:57.083 [DEBUG] [Thread-136841] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:46:57.101 [DEBUG] [Thread-136841] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:46:57.101 [DEBUG] [Thread-136841] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:46:57.102 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T23:46:57.102 [DEBUG] [Thread-136841] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T23:46:57.102 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:46:57.145 [DEBUG] [Thread-136841] [transport.py] [_log()] userauth is OK
2025-12-31T23:46:57.145 [DEBUG] [Thread-136841] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:46:57.145 [DEBUG] [Thread-136841] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:46:57.145 [DEBUG] [Thread-136841] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T23:46:57.145 [DEBUG] [Thread-136841] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:46:57.173 [INFO] [Thread-136841] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:46:57.173 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:46:57.366 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:46:57.851 [DEBUG] [Thread-136841] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:46:57.851 [DEBUG] [Thread-136841] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:46:57.851 [DEBUG] [Thread-136841] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T23:46:57.893 [DEBUG] [Thread-136841] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:46:57.893 [DEBUG] [Thread-136841] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:46:57.895 [DEBUG] [Thread-136841] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:46:57.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:46:57.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T23:46:57.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T23:46:57.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T23:46:57.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:46:57.913 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T23:46:57.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:46:57.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:46:57.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T23:46:57.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.907079 -999.00  +14.90  13.48     80  +11.50 1 2 1 2 1     0    0 2.78 -27.45 ZNEs. 15.3 13.5 197.6 19.0 15.8 -20.2 15.7 -19.3 15.5 -17.8 15.8 -18.9
2025-12-31T23:46:57.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T23:46:57.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T23:46:57.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.907079
2025-12-31T23:46:57.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T23:46:57.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T23:46:57.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T23:46:57.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T23:46:57.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T23:46:57.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T23:46:49', tmtdew=3.84, humidity=77.53, cloud=0.0, wind=19.85, temperature=14.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T23:46:49', seeing=1.26, atlas_timestamp='2025-12-31T21:46:11.626', atlas_cloud=2, atlas_rain=1, zp_data=[0.03324999999999889, 0.09825000000000017, 0.0807500000000001, -0.01600000000000179, -0.024499999999999744, 0.09325000000000117, 0.0235000000000003, 0.1017500000000009, 0.09450000000000003, 0.0730000000000004, 0.11224999999999952, 0.1880000000000006, 0.22250000000000014, 0.05424999999999969, -0.10000000000000142, 0.010999999999999233, 0.05925000000000047, 0.1404999999999994, 0.21349999999999802, 0.9122499999999993, 0.20749999999999957, -0.8477500000000013, -0.18975000000000009, 0.09774999999999956, 0.16499999999999915, 0.6035000000000004, 0.15674999999999883, nan, -0.8879999999999999, -1.6759999999999984, -0.7889999999999997, 0.03300000000000125, 0.25574999999999903], zp_timestamp='2025-12-31T21:43:00')
2025-12-31T23:46:57.914 [DEBUG] [Thread-136841] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:46:57.988 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T23:46:58.000 [DEBUG] [Thread-136844] [transport.py] [_log()] starting thread (client mode): 0xb6bbd7b0
2025-12-31T23:46:58.000 [DEBUG] [Thread-136844] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:46:58.020 [DEBUG] [Thread-136844] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T23:46:58.020 [INFO] [Thread-136844] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T23:46:58.029 [DEBUG] [Thread-136844] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:46:58.029 [DEBUG] [Thread-136844] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T23:46:58.029 [DEBUG] [Thread-136844] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:46:58.029 [DEBUG] [Thread-136844] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:46:58.029 [DEBUG] [Thread-136844] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:46:58.029 [DEBUG] [Thread-136844] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:46:58.029 [DEBUG] [Thread-136844] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:46:58.029 [DEBUG] [Thread-136844] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:46:58.029 [DEBUG] [Thread-136844] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:46:58.029 [DEBUG] [Thread-136844] [transport.py] [_log()] client lang: <none>
2025-12-31T23:46:58.029 [DEBUG] [Thread-136844] [transport.py] [_log()] server lang: <none>
2025-12-31T23:46:58.029 [DEBUG] [Thread-136844] [transport.py] [_log()] kex follows: False
2025-12-31T23:46:58.029 [DEBUG] [Thread-136844] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:46:58.029 [DEBUG] [Thread-136844] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:46:58.029 [DEBUG] [Thread-136844] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:46:58.029 [DEBUG] [Thread-136844] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:46:58.029 [DEBUG] [Thread-136844] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:46:58.029 [DEBUG] [Thread-136844] [transport.py] [_log()] Compression: none
2025-12-31T23:46:58.029 [DEBUG] [Thread-136844] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:46:58.085 [DEBUG] [Thread-136844] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:46:58.085 [DEBUG] [Thread-136844] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:46:58.085 [DEBUG] [Thread-136844] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T23:46:58.085 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T23:46:58.085 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:46:58.145 [DEBUG] [Thread-136844] [transport.py] [_log()] userauth is OK
2025-12-31T23:46:58.145 [DEBUG] [Thread-136844] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:46:58.145 [DEBUG] [Thread-136844] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:46:58.145 [DEBUG] [Thread-136844] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T23:46:58.145 [DEBUG] [Thread-136844] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:46:58.159 [INFO] [Thread-136844] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:46:58.159 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T23:46:58.159 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:46:58.986 [DEBUG] [Thread-136844] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:46:58.986 [DEBUG] [Thread-136844] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:46:59.036 [DEBUG] [Thread-136844] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:46:59.036 [DEBUG] [Thread-136844] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:46:59.045 [DEBUG] [Thread-136844] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:46:59.053 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:46:59.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T23:46:59.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T23:46:59.069 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:46:59.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:46:59.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:46:59.077 [DEBUG] [Thread-136844] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:47:02.159 [DEBUG] [Thread-136846 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:47:17.213 [DEBUG] [Thread-136847 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:47:29.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T23:47:29.096 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T23:47:29.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T23:47:29.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 23, 47, 21), 3.83, 77.57, 0.0, 20.17, 14.7, 0, 0, 0, 2, 0, 0),)
2025-12-31T23:47:29.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 23:47:21
2025-12-31T23:47:29.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T23:47:30.073 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:47:30.074 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:47:30.090 [DEBUG] [Thread-136848] [transport.py] [_log()] starting thread (client mode): 0xb9579e40
2025-12-31T23:47:30.090 [DEBUG] [Thread-136848] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:47:30.110 [DEBUG] [Thread-136848] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T23:47:30.110 [INFO] [Thread-136848] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T23:47:30.113 [DEBUG] [Thread-136848] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:47:30.113 [DEBUG] [Thread-136848] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T23:47:30.113 [DEBUG] [Thread-136848] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:47:30.113 [DEBUG] [Thread-136848] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:47:30.113 [DEBUG] [Thread-136848] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:47:30.113 [DEBUG] [Thread-136848] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:47:30.114 [DEBUG] [Thread-136848] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:47:30.114 [DEBUG] [Thread-136848] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:47:30.114 [DEBUG] [Thread-136848] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:47:30.114 [DEBUG] [Thread-136848] [transport.py] [_log()] client lang: <none>
2025-12-31T23:47:30.114 [DEBUG] [Thread-136848] [transport.py] [_log()] server lang: <none>
2025-12-31T23:47:30.114 [DEBUG] [Thread-136848] [transport.py] [_log()] kex follows: False
2025-12-31T23:47:30.114 [DEBUG] [Thread-136848] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:47:30.114 [DEBUG] [Thread-136848] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:47:30.114 [DEBUG] [Thread-136848] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:47:30.114 [DEBUG] [Thread-136848] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:47:30.114 [DEBUG] [Thread-136848] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:47:30.114 [DEBUG] [Thread-136848] [transport.py] [_log()] Compression: none
2025-12-31T23:47:30.114 [DEBUG] [Thread-136848] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:47:30.136 [DEBUG] [Thread-136848] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:47:30.137 [DEBUG] [Thread-136848] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:47:30.138 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T23:47:30.138 [DEBUG] [Thread-136848] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T23:47:30.139 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:47:30.140 [DEBUG] [Thread-136848] [transport.py] [_log()] userauth is OK
2025-12-31T23:47:30.140 [DEBUG] [Thread-136848] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:47:30.140 [DEBUG] [Thread-136848] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:47:30.140 [DEBUG] [Thread-136848] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T23:47:30.140 [DEBUG] [Thread-136848] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:47:30.165 [INFO] [Thread-136848] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:47:30.166 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:47:30.960 [DEBUG] [Thread-136848] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:47:30.961 [DEBUG] [Thread-136848] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:47:30.961 [DEBUG] [Thread-136848] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T23:47:31.001 [DEBUG] [Thread-136848] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:47:31.001 [DEBUG] [Thread-136848] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:47:31.003 [DEBUG] [Thread-136848] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:47:31.015 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:47:31.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T23:47:31.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T23:47:31.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T23:47:31.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:47:31.022 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T23:47:31.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:47:31.022 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:47:31.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T23:47:31.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.907774 -999.00  +14.90  12.43     80  +11.50 1 2 1 2 1     0    0 2.67 -31.27 ZNEs. 13.9 12.4 194.4 17.3 15.8 -20.0 15.7 -19.3 15.5 -17.6 15.8 -18.7
2025-12-31T23:47:31.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T23:47:31.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T23:47:31.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.907774
2025-12-31T23:47:31.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T23:47:31.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T23:47:31.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T23:47:31.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T23:47:31.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T23:47:31.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T23:47:21', tmtdew=3.83, humidity=77.57, cloud=0.0, wind=20.17, temperature=14.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T23:47:21', seeing=1.29, atlas_timestamp='2025-12-31T21:47:11.674', atlas_cloud=2, atlas_rain=1, zp_data=[0.03324999999999889, 0.09825000000000017, 0.0807500000000001, -0.01600000000000179, -0.024499999999999744, 0.09325000000000117, 0.0235000000000003, 0.1017500000000009, 0.09450000000000003, 0.0730000000000004, 0.11224999999999952, 0.1880000000000006, 0.22250000000000014, 0.05424999999999969, -0.10000000000000142, 0.010999999999999233, 0.05925000000000047, 0.1404999999999994, 0.21349999999999802, 0.9122499999999993, 0.20749999999999957, -0.8477500000000013, -0.18975000000000009, 0.09774999999999956, 0.16499999999999915, 0.6035000000000004, 0.15674999999999883, nan, -0.8879999999999999, -1.6759999999999984, -0.7889999999999997, 0.03300000000000125, 0.25574999999999903], zp_timestamp='2025-12-31T21:43:00')
2025-12-31T23:47:31.023 [DEBUG] [Thread-136848] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:47:31.095 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T23:47:31.106 [DEBUG] [Thread-136851] [transport.py] [_log()] starting thread (client mode): 0xbbfcdf30
2025-12-31T23:47:31.106 [DEBUG] [Thread-136851] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:47:31.120 [DEBUG] [Thread-136851] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T23:47:31.120 [INFO] [Thread-136851] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T23:47:31.128 [DEBUG] [Thread-136851] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:47:31.128 [DEBUG] [Thread-136851] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T23:47:31.128 [DEBUG] [Thread-136851] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:47:31.128 [DEBUG] [Thread-136851] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:47:31.128 [DEBUG] [Thread-136851] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:47:31.128 [DEBUG] [Thread-136851] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:47:31.128 [DEBUG] [Thread-136851] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:47:31.128 [DEBUG] [Thread-136851] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:47:31.128 [DEBUG] [Thread-136851] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:47:31.128 [DEBUG] [Thread-136851] [transport.py] [_log()] client lang: <none>
2025-12-31T23:47:31.128 [DEBUG] [Thread-136851] [transport.py] [_log()] server lang: <none>
2025-12-31T23:47:31.128 [DEBUG] [Thread-136851] [transport.py] [_log()] kex follows: False
2025-12-31T23:47:31.128 [DEBUG] [Thread-136851] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:47:31.128 [DEBUG] [Thread-136851] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:47:31.128 [DEBUG] [Thread-136851] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:47:31.128 [DEBUG] [Thread-136851] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:47:31.128 [DEBUG] [Thread-136851] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:47:31.129 [DEBUG] [Thread-136851] [transport.py] [_log()] Compression: none
2025-12-31T23:47:31.129 [DEBUG] [Thread-136851] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:47:31.188 [DEBUG] [Thread-136851] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:47:31.189 [DEBUG] [Thread-136851] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:47:31.190 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T23:47:31.190 [DEBUG] [Thread-136851] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T23:47:31.192 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:47:31.248 [DEBUG] [Thread-136851] [transport.py] [_log()] userauth is OK
2025-12-31T23:47:31.248 [DEBUG] [Thread-136851] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:47:31.248 [DEBUG] [Thread-136851] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:47:31.248 [DEBUG] [Thread-136851] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T23:47:31.249 [DEBUG] [Thread-136851] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:47:31.271 [INFO] [Thread-136851] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:47:31.272 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T23:47:31.272 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:47:32.142 [DEBUG] [Thread-136851] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:47:32.143 [DEBUG] [Thread-136851] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:47:32.191 [DEBUG] [Thread-136851] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:47:32.191 [DEBUG] [Thread-136851] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:47:32.201 [DEBUG] [Thread-136851] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:47:32.210 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:47:32.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T23:47:32.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T23:47:32.229 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:47:32.229 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:47:32.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:47:32.238 [DEBUG] [Thread-136851] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:47:32.249 [DEBUG] [Thread-136853 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:47:47.297 [DEBUG] [Thread-136854 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:47:53.478 [DEBUG] [Thread-136855 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:47:57.033 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:48:00.082 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:48:02.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T23:48:02.260 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T23:48:02.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T23:48:02.331 [DEBUG] [Thread-136856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:48:02.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 23, 47, 53), 3.81, 77.65, 0.0, 20.41, 14.73, 0, 0, 0, 2, 0, 0),)
2025-12-31T23:48:02.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 23:47:53
2025-12-31T23:48:03.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T23:48:03.249 [DEBUG] [Thread-136857] [transport.py] [_log()] starting thread (client mode): 0xb6bbd930
2025-12-31T23:48:03.250 [DEBUG] [Thread-136857] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:48:03.265 [DEBUG] [Thread-136857] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T23:48:03.265 [INFO] [Thread-136857] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T23:48:03.268 [DEBUG] [Thread-136857] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:48:03.268 [DEBUG] [Thread-136857] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T23:48:03.268 [DEBUG] [Thread-136857] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:48:03.268 [DEBUG] [Thread-136857] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:48:03.268 [DEBUG] [Thread-136857] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:48:03.268 [DEBUG] [Thread-136857] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:48:03.269 [DEBUG] [Thread-136857] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:48:03.269 [DEBUG] [Thread-136857] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:48:03.269 [DEBUG] [Thread-136857] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:48:03.269 [DEBUG] [Thread-136857] [transport.py] [_log()] client lang: <none>
2025-12-31T23:48:03.269 [DEBUG] [Thread-136857] [transport.py] [_log()] server lang: <none>
2025-12-31T23:48:03.269 [DEBUG] [Thread-136857] [transport.py] [_log()] kex follows: False
2025-12-31T23:48:03.269 [DEBUG] [Thread-136857] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:48:03.269 [DEBUG] [Thread-136857] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:48:03.269 [DEBUG] [Thread-136857] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:48:03.269 [DEBUG] [Thread-136857] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:48:03.269 [DEBUG] [Thread-136857] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:48:03.269 [DEBUG] [Thread-136857] [transport.py] [_log()] Compression: none
2025-12-31T23:48:03.269 [DEBUG] [Thread-136857] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:48:03.286 [DEBUG] [Thread-136857] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:48:03.287 [DEBUG] [Thread-136857] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:48:03.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T23:48:03.288 [DEBUG] [Thread-136857] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T23:48:03.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:48:03.290 [DEBUG] [Thread-136857] [transport.py] [_log()] userauth is OK
2025-12-31T23:48:03.290 [DEBUG] [Thread-136857] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:48:03.290 [DEBUG] [Thread-136857] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:48:03.290 [DEBUG] [Thread-136857] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T23:48:03.290 [DEBUG] [Thread-136857] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:48:03.327 [INFO] [Thread-136857] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:48:03.328 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:48:03.945 [DEBUG] [Thread-136857] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:48:03.946 [DEBUG] [Thread-136857] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:48:03.946 [DEBUG] [Thread-136857] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T23:48:03.986 [DEBUG] [Thread-136857] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:48:03.986 [DEBUG] [Thread-136857] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:48:03.989 [DEBUG] [Thread-136857] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:48:04.001 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:48:04.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T23:48:04.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T23:48:04.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T23:48:04.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:48:04.011 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T23:48:04.012 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:48:04.012 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:48:04.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T23:48:04.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.908121 -999.00  +14.90  14.68     80  +11.50 1 2 1 2 1     0    0 2.62 -31.94 ZNEsW 11.3 14.7 190.9 20.0 15.8 -19.9 15.6 -19.2 15.5 -17.7 15.8 -18.7
2025-12-31T23:48:04.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T23:48:04.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T23:48:04.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.908121
2025-12-31T23:48:04.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T23:48:04.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T23:48:04.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T23:48:04.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T23:48:04.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T23:48:04.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T23:47:53', tmtdew=3.81, humidity=77.65, cloud=0.0, wind=20.41, temperature=14.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T23:47:53', seeing=1.29, atlas_timestamp='2025-12-31T21:47:41.654', atlas_cloud=2, atlas_rain=1, zp_data=[0.03324999999999889, 0.09825000000000017, 0.0807500000000001, -0.01600000000000179, -0.024499999999999744, 0.09325000000000117, 0.0235000000000003, 0.1017500000000009, 0.09450000000000003, 0.0730000000000004, 0.11224999999999952, 0.1880000000000006, 0.22250000000000014, 0.05424999999999969, -0.10000000000000142, 0.010999999999999233, 0.05925000000000047, 0.1404999999999994, 0.21349999999999802, 0.9122499999999993, 0.20749999999999957, -0.8477500000000013, -0.18975000000000009, 0.09774999999999956, 0.16499999999999915, 0.6035000000000004, 0.15674999999999883, nan, -0.8879999999999999, -1.6759999999999984, -0.7889999999999997, 0.03300000000000125, 0.25574999999999903], zp_timestamp='2025-12-31T21:43:00')
2025-12-31T23:48:04.014 [DEBUG] [Thread-136857] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:48:04.098 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T23:48:04.110 [DEBUG] [Thread-136860] [transport.py] [_log()] starting thread (client mode): 0xb6bbdd80
2025-12-31T23:48:04.110 [DEBUG] [Thread-136860] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:48:04.124 [DEBUG] [Thread-136860] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T23:48:04.124 [INFO] [Thread-136860] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T23:48:04.133 [DEBUG] [Thread-136860] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:48:04.133 [DEBUG] [Thread-136860] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T23:48:04.133 [DEBUG] [Thread-136860] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:48:04.133 [DEBUG] [Thread-136860] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:48:04.133 [DEBUG] [Thread-136860] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:48:04.134 [DEBUG] [Thread-136860] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:48:04.134 [DEBUG] [Thread-136860] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:48:04.134 [DEBUG] [Thread-136860] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:48:04.134 [DEBUG] [Thread-136860] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:48:04.134 [DEBUG] [Thread-136860] [transport.py] [_log()] client lang: <none>
2025-12-31T23:48:04.134 [DEBUG] [Thread-136860] [transport.py] [_log()] server lang: <none>
2025-12-31T23:48:04.134 [DEBUG] [Thread-136860] [transport.py] [_log()] kex follows: False
2025-12-31T23:48:04.134 [DEBUG] [Thread-136860] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:48:04.134 [DEBUG] [Thread-136860] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:48:04.135 [DEBUG] [Thread-136860] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:48:04.135 [DEBUG] [Thread-136860] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:48:04.135 [DEBUG] [Thread-136860] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:48:04.135 [DEBUG] [Thread-136860] [transport.py] [_log()] Compression: none
2025-12-31T23:48:04.135 [DEBUG] [Thread-136860] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:48:04.192 [DEBUG] [Thread-136860] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:48:04.193 [DEBUG] [Thread-136860] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:48:04.194 [DEBUG] [Thread-136860] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T23:48:04.194 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T23:48:04.195 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:48:04.252 [DEBUG] [Thread-136860] [transport.py] [_log()] userauth is OK
2025-12-31T23:48:04.252 [DEBUG] [Thread-136860] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:48:04.253 [DEBUG] [Thread-136860] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:48:04.253 [DEBUG] [Thread-136860] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T23:48:04.253 [DEBUG] [Thread-136860] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:48:04.271 [INFO] [Thread-136860] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:48:04.272 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T23:48:04.272 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:48:05.159 [DEBUG] [Thread-136860] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:48:05.159 [DEBUG] [Thread-136860] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:48:05.207 [DEBUG] [Thread-136860] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:48:05.207 [DEBUG] [Thread-136860] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:48:05.217 [DEBUG] [Thread-136860] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:48:05.225 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:48:05.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T23:48:05.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T23:48:05.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:48:05.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:48:05.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:48:05.253 [DEBUG] [Thread-136860] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:48:17.359 [DEBUG] [Thread-136862 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:48:30.272 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:48:30.273 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:48:32.397 [DEBUG] [Thread-136863 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:48:35.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T23:48:35.276 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T23:48:35.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T23:48:35.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 23, 48, 25), 3.81, 77.65, 0.0, 19.39, 14.73, 0, 0, 0, 2, 0, 0),)
2025-12-31T23:48:35.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 23:48:25
2025-12-31T23:48:36.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T23:48:36.261 [DEBUG] [Thread-136864] [transport.py] [_log()] starting thread (client mode): 0xb1747310
2025-12-31T23:48:36.261 [DEBUG] [Thread-136864] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:48:36.281 [DEBUG] [Thread-136864] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T23:48:36.281 [INFO] [Thread-136864] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T23:48:36.284 [DEBUG] [Thread-136864] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:48:36.284 [DEBUG] [Thread-136864] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T23:48:36.285 [DEBUG] [Thread-136864] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:48:36.285 [DEBUG] [Thread-136864] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:48:36.285 [DEBUG] [Thread-136864] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:48:36.285 [DEBUG] [Thread-136864] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:48:36.285 [DEBUG] [Thread-136864] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:48:36.285 [DEBUG] [Thread-136864] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:48:36.285 [DEBUG] [Thread-136864] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:48:36.285 [DEBUG] [Thread-136864] [transport.py] [_log()] client lang: <none>
2025-12-31T23:48:36.285 [DEBUG] [Thread-136864] [transport.py] [_log()] server lang: <none>
2025-12-31T23:48:36.285 [DEBUG] [Thread-136864] [transport.py] [_log()] kex follows: False
2025-12-31T23:48:36.285 [DEBUG] [Thread-136864] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:48:36.285 [DEBUG] [Thread-136864] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:48:36.285 [DEBUG] [Thread-136864] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:48:36.285 [DEBUG] [Thread-136864] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:48:36.285 [DEBUG] [Thread-136864] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:48:36.286 [DEBUG] [Thread-136864] [transport.py] [_log()] Compression: none
2025-12-31T23:48:36.286 [DEBUG] [Thread-136864] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:48:36.306 [DEBUG] [Thread-136864] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:48:36.306 [DEBUG] [Thread-136864] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:48:36.307 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T23:48:36.307 [DEBUG] [Thread-136864] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T23:48:36.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:48:36.309 [DEBUG] [Thread-136864] [transport.py] [_log()] userauth is OK
2025-12-31T23:48:36.309 [DEBUG] [Thread-136864] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:48:36.309 [DEBUG] [Thread-136864] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:48:36.309 [DEBUG] [Thread-136864] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T23:48:36.309 [DEBUG] [Thread-136864] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:48:36.344 [INFO] [Thread-136864] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:48:36.345 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:48:37.006 [DEBUG] [Thread-136864] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:48:37.006 [DEBUG] [Thread-136864] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:48:37.007 [DEBUG] [Thread-136864] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T23:48:37.047 [DEBUG] [Thread-136864] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:48:37.048 [DEBUG] [Thread-136864] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:48:37.051 [DEBUG] [Thread-136864] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:48:37.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:48:37.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T23:48:37.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T23:48:37.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T23:48:37.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:48:37.076 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T23:48:37.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:48:37.076 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:48:37.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T23:48:37.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.908468 -999.00  +14.90  14.55     80  +11.50 1 2 1 2 1     0    0 2.69 -29.50 ZNEsW 16.4 14.6 181.2 18.5 15.8 -19.9 15.6 -18.9 15.5 -17.5 15.8 -18.8
2025-12-31T23:48:37.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T23:48:37.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T23:48:37.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.908468
2025-12-31T23:48:37.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T23:48:37.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T23:48:37.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T23:48:37.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T23:48:37.079 [DEBUG] [Thread-136864] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:48:37.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T23:48:37.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T23:48:25', tmtdew=3.81, humidity=77.65, cloud=0.0, wind=19.39, temperature=14.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T23:48:25', seeing=1.17, atlas_timestamp='2025-12-31T21:48:11.635', atlas_cloud=2, atlas_rain=1, zp_data=[0.03324999999999889, 0.09825000000000017, 0.0807500000000001, -0.01600000000000179, -0.024499999999999744, 0.09325000000000117, 0.0235000000000003, 0.1017500000000009, 0.09450000000000003, 0.0730000000000004, 0.11224999999999952, 0.1880000000000006, 0.22250000000000014, 0.05424999999999969, -0.10000000000000142, 0.010999999999999233, 0.05925000000000047, 0.1404999999999994, 0.21349999999999802, 0.9122499999999993, 0.20749999999999957, -0.8477500000000013, -0.18975000000000009, 0.09774999999999956, 0.16499999999999915, 0.6035000000000004, 0.15674999999999883, nan, -0.8879999999999999, -1.6759999999999984, -0.7889999999999997, 0.03300000000000125, 0.25574999999999903], zp_timestamp='2025-12-31T21:46:00')
2025-12-31T23:48:37.154 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T23:48:37.166 [DEBUG] [Thread-136867] [transport.py] [_log()] starting thread (client mode): 0xb6b63d90
2025-12-31T23:48:37.166 [DEBUG] [Thread-136867] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:48:37.181 [DEBUG] [Thread-136867] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T23:48:37.182 [INFO] [Thread-136867] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T23:48:37.189 [DEBUG] [Thread-136867] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:48:37.190 [DEBUG] [Thread-136867] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T23:48:37.190 [DEBUG] [Thread-136867] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:48:37.190 [DEBUG] [Thread-136867] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:48:37.190 [DEBUG] [Thread-136867] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:48:37.190 [DEBUG] [Thread-136867] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:48:37.190 [DEBUG] [Thread-136867] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:48:37.190 [DEBUG] [Thread-136867] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:48:37.190 [DEBUG] [Thread-136867] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:48:37.190 [DEBUG] [Thread-136867] [transport.py] [_log()] client lang: <none>
2025-12-31T23:48:37.191 [DEBUG] [Thread-136867] [transport.py] [_log()] server lang: <none>
2025-12-31T23:48:37.191 [DEBUG] [Thread-136867] [transport.py] [_log()] kex follows: False
2025-12-31T23:48:37.191 [DEBUG] [Thread-136867] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:48:37.191 [DEBUG] [Thread-136867] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:48:37.191 [DEBUG] [Thread-136867] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:48:37.192 [DEBUG] [Thread-136867] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:48:37.192 [DEBUG] [Thread-136867] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:48:37.192 [DEBUG] [Thread-136867] [transport.py] [_log()] Compression: none
2025-12-31T23:48:37.192 [DEBUG] [Thread-136867] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:48:37.248 [DEBUG] [Thread-136867] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:48:37.249 [DEBUG] [Thread-136867] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:48:37.250 [DEBUG] [Thread-136867] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T23:48:37.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T23:48:37.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:48:37.308 [DEBUG] [Thread-136867] [transport.py] [_log()] userauth is OK
2025-12-31T23:48:37.308 [DEBUG] [Thread-136867] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:48:37.308 [DEBUG] [Thread-136867] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:48:37.309 [DEBUG] [Thread-136867] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T23:48:37.309 [DEBUG] [Thread-136867] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:48:37.328 [INFO] [Thread-136867] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:48:37.328 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T23:48:37.329 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:48:38.145 [DEBUG] [Thread-136867] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:48:38.146 [DEBUG] [Thread-136867] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:48:38.194 [DEBUG] [Thread-136867] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:48:38.194 [DEBUG] [Thread-136867] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:48:38.204 [DEBUG] [Thread-136867] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:48:38.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:48:38.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T23:48:38.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T23:48:38.239 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:48:38.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:48:38.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:48:38.248 [DEBUG] [Thread-136867] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:48:47.433 [DEBUG] [Thread-136869 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:48:53.559 [DEBUG] [Thread-136870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:49:02.490 [DEBUG] [Thread-136871 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:49:08.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T23:49:08.271 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T23:49:08.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T23:49:08.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 23, 48, 57), 3.76, 78.15, 0.0, 21.28, 14.73, 0, 0, 0, 2, 0, 0),)
2025-12-31T23:49:08.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 23:48:57
2025-12-31T23:49:09.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T23:49:09.267 [DEBUG] [Thread-136872] [transport.py] [_log()] starting thread (client mode): 0xb6bbceb0
2025-12-31T23:49:09.267 [DEBUG] [Thread-136872] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:49:09.282 [DEBUG] [Thread-136872] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T23:49:09.282 [INFO] [Thread-136872] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T23:49:09.285 [DEBUG] [Thread-136872] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:49:09.285 [DEBUG] [Thread-136872] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T23:49:09.285 [DEBUG] [Thread-136872] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:49:09.285 [DEBUG] [Thread-136872] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:49:09.285 [DEBUG] [Thread-136872] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:49:09.285 [DEBUG] [Thread-136872] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:49:09.285 [DEBUG] [Thread-136872] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:49:09.285 [DEBUG] [Thread-136872] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:49:09.285 [DEBUG] [Thread-136872] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:49:09.285 [DEBUG] [Thread-136872] [transport.py] [_log()] client lang: <none>
2025-12-31T23:49:09.285 [DEBUG] [Thread-136872] [transport.py] [_log()] server lang: <none>
2025-12-31T23:49:09.285 [DEBUG] [Thread-136872] [transport.py] [_log()] kex follows: False
2025-12-31T23:49:09.285 [DEBUG] [Thread-136872] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:49:09.285 [DEBUG] [Thread-136872] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:49:09.285 [DEBUG] [Thread-136872] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:49:09.285 [DEBUG] [Thread-136872] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:49:09.285 [DEBUG] [Thread-136872] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:49:09.285 [DEBUG] [Thread-136872] [transport.py] [_log()] Compression: none
2025-12-31T23:49:09.285 [DEBUG] [Thread-136872] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:49:09.301 [DEBUG] [Thread-136872] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:49:09.301 [DEBUG] [Thread-136872] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:49:09.302 [DEBUG] [Thread-136872] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T23:49:09.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T23:49:09.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:49:09.304 [DEBUG] [Thread-136872] [transport.py] [_log()] userauth is OK
2025-12-31T23:49:09.304 [DEBUG] [Thread-136872] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:49:09.304 [DEBUG] [Thread-136872] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:49:09.304 [DEBUG] [Thread-136872] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T23:49:09.304 [DEBUG] [Thread-136872] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:49:09.328 [INFO] [Thread-136872] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:49:09.329 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:49:10.006 [DEBUG] [Thread-136872] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:49:10.006 [DEBUG] [Thread-136872] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:49:10.006 [DEBUG] [Thread-136872] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T23:49:10.047 [DEBUG] [Thread-136872] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:49:10.047 [DEBUG] [Thread-136872] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:49:10.051 [DEBUG] [Thread-136872] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:49:10.062 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:49:10.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T23:49:10.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T23:49:10.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T23:49:10.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:49:10.076 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T23:49:10.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:49:10.076 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:49:10.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T23:49:10.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.908815 -999.00  +14.80  12.91     80  +11.60 1 2 1 2 1     0    0 2.69 -29.27 ZnESW 13.9 12.9 190.8 18.2 15.8 -19.8 15.6 -18.8 15.5 -17.6 15.7 -18.8
2025-12-31T23:49:10.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T23:49:10.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T23:49:10.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.908815
2025-12-31T23:49:10.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T23:49:10.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T23:49:10.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T23:49:10.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T23:49:10.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T23:49:10.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T23:48:57', tmtdew=3.76, humidity=78.15, cloud=0.0, wind=21.28, temperature=14.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T23:48:57', seeing=1.25, atlas_timestamp='2025-12-31T21:48:41.616', atlas_cloud=2, atlas_rain=1, zp_data=[0.03324999999999889, 0.09825000000000017, 0.0807500000000001, -0.01600000000000179, -0.024499999999999744, 0.09325000000000117, 0.0235000000000003, 0.1017500000000009, 0.09450000000000003, 0.0730000000000004, 0.11224999999999952, 0.1880000000000006, 0.22250000000000014, 0.05424999999999969, -0.10000000000000142, 0.010999999999999233, 0.05925000000000047, 0.1404999999999994, 0.21349999999999802, 0.9122499999999993, 0.20749999999999957, -0.8477500000000013, -0.18975000000000009, 0.09774999999999956, 0.16499999999999915, 0.6035000000000004, 0.15674999999999883, nan, -0.8879999999999999, -1.6759999999999984, -0.7889999999999997, 0.03300000000000125, 0.25574999999999903], zp_timestamp='2025-12-31T21:46:00')
2025-12-31T23:49:10.079 [DEBUG] [Thread-136872] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:49:10.162 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T23:49:10.173 [DEBUG] [Thread-136875] [transport.py] [_log()] starting thread (client mode): 0xbbfcd1e0
2025-12-31T23:49:10.173 [DEBUG] [Thread-136875] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:49:10.188 [DEBUG] [Thread-136875] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T23:49:10.189 [INFO] [Thread-136875] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T23:49:10.196 [DEBUG] [Thread-136875] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:49:10.197 [DEBUG] [Thread-136875] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T23:49:10.197 [DEBUG] [Thread-136875] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:49:10.197 [DEBUG] [Thread-136875] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:49:10.197 [DEBUG] [Thread-136875] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:49:10.197 [DEBUG] [Thread-136875] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:49:10.197 [DEBUG] [Thread-136875] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:49:10.197 [DEBUG] [Thread-136875] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:49:10.197 [DEBUG] [Thread-136875] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:49:10.197 [DEBUG] [Thread-136875] [transport.py] [_log()] client lang: <none>
2025-12-31T23:49:10.197 [DEBUG] [Thread-136875] [transport.py] [_log()] server lang: <none>
2025-12-31T23:49:10.198 [DEBUG] [Thread-136875] [transport.py] [_log()] kex follows: False
2025-12-31T23:49:10.198 [DEBUG] [Thread-136875] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:49:10.198 [DEBUG] [Thread-136875] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:49:10.198 [DEBUG] [Thread-136875] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:49:10.198 [DEBUG] [Thread-136875] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:49:10.198 [DEBUG] [Thread-136875] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:49:10.198 [DEBUG] [Thread-136875] [transport.py] [_log()] Compression: none
2025-12-31T23:49:10.198 [DEBUG] [Thread-136875] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:49:10.256 [DEBUG] [Thread-136875] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:49:10.256 [DEBUG] [Thread-136875] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:49:10.257 [DEBUG] [Thread-136875] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T23:49:10.257 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T23:49:10.258 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:49:10.311 [DEBUG] [Thread-136875] [transport.py] [_log()] userauth is OK
2025-12-31T23:49:10.312 [DEBUG] [Thread-136875] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:49:10.312 [DEBUG] [Thread-136875] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:49:10.312 [DEBUG] [Thread-136875] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T23:49:10.312 [DEBUG] [Thread-136875] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:49:10.334 [INFO] [Thread-136875] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:49:10.334 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T23:49:10.335 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:49:11.185 [DEBUG] [Thread-136875] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:49:11.185 [DEBUG] [Thread-136875] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:49:11.233 [DEBUG] [Thread-136875] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:49:11.233 [DEBUG] [Thread-136875] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:49:11.243 [DEBUG] [Thread-136875] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:49:11.252 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:49:11.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T23:49:11.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T23:49:11.271 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:49:11.271 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:49:11.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:49:11.279 [DEBUG] [Thread-136875] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:49:17.526 [DEBUG] [Thread-136877 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:49:24.554 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:49:28.741 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:49:30.475 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:49:30.476 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:49:31.853 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:49:32.581 [DEBUG] [Thread-136878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:49:38.260 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:49:41.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T23:49:41.302 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T23:49:41.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T23:49:42.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 23, 49, 29), 3.75, 78.23, 0.0, 20.64, 14.68, 0, 0, 0, 2, 0, 0),)
2025-12-31T23:49:42.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 23:49:29
2025-12-31T23:49:42.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T23:49:42.291 [DEBUG] [Thread-136879] [transport.py] [_log()] starting thread (client mode): 0xbbfce020
2025-12-31T23:49:42.292 [DEBUG] [Thread-136879] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:49:42.312 [DEBUG] [Thread-136879] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T23:49:42.312 [INFO] [Thread-136879] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T23:49:42.315 [DEBUG] [Thread-136879] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:49:42.315 [DEBUG] [Thread-136879] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T23:49:42.315 [DEBUG] [Thread-136879] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:49:42.315 [DEBUG] [Thread-136879] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:49:42.315 [DEBUG] [Thread-136879] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:49:42.316 [DEBUG] [Thread-136879] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:49:42.316 [DEBUG] [Thread-136879] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:49:42.316 [DEBUG] [Thread-136879] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:49:42.316 [DEBUG] [Thread-136879] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:49:42.316 [DEBUG] [Thread-136879] [transport.py] [_log()] client lang: <none>
2025-12-31T23:49:42.316 [DEBUG] [Thread-136879] [transport.py] [_log()] server lang: <none>
2025-12-31T23:49:42.316 [DEBUG] [Thread-136879] [transport.py] [_log()] kex follows: False
2025-12-31T23:49:42.316 [DEBUG] [Thread-136879] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:49:42.316 [DEBUG] [Thread-136879] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:49:42.316 [DEBUG] [Thread-136879] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:49:42.316 [DEBUG] [Thread-136879] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:49:42.316 [DEBUG] [Thread-136879] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:49:42.317 [DEBUG] [Thread-136879] [transport.py] [_log()] Compression: none
2025-12-31T23:49:42.317 [DEBUG] [Thread-136879] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:49:42.336 [DEBUG] [Thread-136879] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:49:42.337 [DEBUG] [Thread-136879] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:49:42.337 [DEBUG] [Thread-136879] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T23:49:42.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T23:49:42.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:49:42.381 [DEBUG] [Thread-136879] [transport.py] [_log()] userauth is OK
2025-12-31T23:49:42.382 [DEBUG] [Thread-136879] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:49:42.382 [DEBUG] [Thread-136879] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:49:42.382 [DEBUG] [Thread-136879] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T23:49:42.382 [DEBUG] [Thread-136879] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:49:42.405 [INFO] [Thread-136879] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:49:42.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:49:42.988 [DEBUG] [Thread-136879] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:49:42.988 [DEBUG] [Thread-136879] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:49:42.989 [DEBUG] [Thread-136879] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T23:49:43.030 [DEBUG] [Thread-136879] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:49:43.030 [DEBUG] [Thread-136879] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:49:43.033 [DEBUG] [Thread-136879] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:49:43.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:49:43.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T23:49:43.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T23:49:43.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T23:49:43.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:49:43.055 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T23:49:43.055 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:49:43.055 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:49:43.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T23:49:43.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.909163 -999.00  +14.80  16.92     80  +11.50 1 2 1 2 1     0    0 2.52 -32.24 ZnESW 14.4 16.9 193.0 20.9 15.7 -19.8 15.6 -18.9 15.5 -17.5 15.8 -18.5
2025-12-31T23:49:43.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T23:49:43.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T23:49:43.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.909163
2025-12-31T23:49:43.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T23:49:43.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T23:49:43.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T23:49:43.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T23:49:43.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T23:49:43.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T23:49:29', tmtdew=3.75, humidity=78.23, cloud=0.0, wind=20.64, temperature=14.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T23:49:29', seeing=1.25, atlas_timestamp='2025-12-31T21:49:11.683', atlas_cloud=2, atlas_rain=1, zp_data=[0.03324999999999889, 0.09825000000000017, 0.0807500000000001, -0.01600000000000179, -0.024499999999999744, 0.09325000000000117, 0.0235000000000003, 0.1017500000000009, 0.09450000000000003, 0.0730000000000004, 0.11224999999999952, 0.1880000000000006, 0.22250000000000014, 0.05424999999999969, -0.10000000000000142, 0.010999999999999233, 0.05925000000000047, 0.1404999999999994, 0.21349999999999802, 0.9122499999999993, 0.20749999999999957, -0.8477500000000013, -0.18975000000000009, 0.09774999999999956, 0.16499999999999915, 0.6035000000000004, 0.15674999999999883, nan, -0.8879999999999999, -1.6759999999999984, -0.7889999999999997, 0.03300000000000125, 0.25574999999999903], zp_timestamp='2025-12-31T21:46:00')
2025-12-31T23:49:43.057 [DEBUG] [Thread-136879] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:49:43.142 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T23:49:43.153 [DEBUG] [Thread-136882] [transport.py] [_log()] starting thread (client mode): 0xb6b62c80
2025-12-31T23:49:43.153 [DEBUG] [Thread-136882] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:49:43.167 [DEBUG] [Thread-136882] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T23:49:43.168 [INFO] [Thread-136882] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T23:49:43.177 [DEBUG] [Thread-136882] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:49:43.177 [DEBUG] [Thread-136882] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T23:49:43.178 [DEBUG] [Thread-136882] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:49:43.178 [DEBUG] [Thread-136882] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:49:43.178 [DEBUG] [Thread-136882] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:49:43.178 [DEBUG] [Thread-136882] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:49:43.178 [DEBUG] [Thread-136882] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:49:43.178 [DEBUG] [Thread-136882] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:49:43.178 [DEBUG] [Thread-136882] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:49:43.178 [DEBUG] [Thread-136882] [transport.py] [_log()] client lang: <none>
2025-12-31T23:49:43.178 [DEBUG] [Thread-136882] [transport.py] [_log()] server lang: <none>
2025-12-31T23:49:43.178 [DEBUG] [Thread-136882] [transport.py] [_log()] kex follows: False
2025-12-31T23:49:43.179 [DEBUG] [Thread-136882] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:49:43.179 [DEBUG] [Thread-136882] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:49:43.179 [DEBUG] [Thread-136882] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:49:43.179 [DEBUG] [Thread-136882] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:49:43.179 [DEBUG] [Thread-136882] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:49:43.179 [DEBUG] [Thread-136882] [transport.py] [_log()] Compression: none
2025-12-31T23:49:43.179 [DEBUG] [Thread-136882] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:49:43.244 [DEBUG] [Thread-136882] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:49:43.244 [DEBUG] [Thread-136882] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:49:43.245 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T23:49:43.245 [DEBUG] [Thread-136882] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T23:49:43.246 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:49:43.316 [DEBUG] [Thread-136882] [transport.py] [_log()] userauth is OK
2025-12-31T23:49:43.317 [DEBUG] [Thread-136882] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:49:43.317 [DEBUG] [Thread-136882] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:49:43.317 [DEBUG] [Thread-136882] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T23:49:43.317 [DEBUG] [Thread-136882] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:49:43.345 [INFO] [Thread-136882] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:49:43.346 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T23:49:43.346 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:49:44.207 [DEBUG] [Thread-136882] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:49:44.207 [DEBUG] [Thread-136882] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:49:44.256 [DEBUG] [Thread-136882] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:49:44.256 [DEBUG] [Thread-136882] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:49:44.265 [DEBUG] [Thread-136882] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:49:44.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:49:44.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T23:49:44.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T23:49:44.293 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:49:44.293 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:49:44.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:49:44.301 [DEBUG] [Thread-136882] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:49:47.608 [DEBUG] [Thread-136884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:49:53.626 [DEBUG] [Thread-136885 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:50:02.657 [DEBUG] [Thread-136886 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:50:14.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T23:50:14.324 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T23:50:14.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T23:50:15.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 23, 50, 2), 3.74, 78.26, 0.0, 20.73, 14.73, 0, 0, 0, 2, 0, 0),)
2025-12-31T23:50:15.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 23:50:02
2025-12-31T23:50:15.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T23:50:15.315 [DEBUG] [Thread-136887] [transport.py] [_log()] starting thread (client mode): 0xb6b62f20
2025-12-31T23:50:15.315 [DEBUG] [Thread-136887] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:50:15.337 [DEBUG] [Thread-136887] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T23:50:15.337 [INFO] [Thread-136887] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T23:50:15.340 [DEBUG] [Thread-136887] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:50:15.340 [DEBUG] [Thread-136887] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T23:50:15.340 [DEBUG] [Thread-136887] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:50:15.340 [DEBUG] [Thread-136887] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:50:15.340 [DEBUG] [Thread-136887] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:50:15.340 [DEBUG] [Thread-136887] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:50:15.340 [DEBUG] [Thread-136887] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:50:15.340 [DEBUG] [Thread-136887] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:50:15.340 [DEBUG] [Thread-136887] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:50:15.340 [DEBUG] [Thread-136887] [transport.py] [_log()] client lang: <none>
2025-12-31T23:50:15.340 [DEBUG] [Thread-136887] [transport.py] [_log()] server lang: <none>
2025-12-31T23:50:15.340 [DEBUG] [Thread-136887] [transport.py] [_log()] kex follows: False
2025-12-31T23:50:15.340 [DEBUG] [Thread-136887] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:50:15.340 [DEBUG] [Thread-136887] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:50:15.340 [DEBUG] [Thread-136887] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:50:15.340 [DEBUG] [Thread-136887] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:50:15.341 [DEBUG] [Thread-136887] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:50:15.341 [DEBUG] [Thread-136887] [transport.py] [_log()] Compression: none
2025-12-31T23:50:15.341 [DEBUG] [Thread-136887] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:50:15.357 [DEBUG] [Thread-136887] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:50:15.357 [DEBUG] [Thread-136887] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:50:15.357 [DEBUG] [Thread-136887] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T23:50:15.357 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T23:50:15.358 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:50:15.358 [DEBUG] [Thread-136887] [transport.py] [_log()] userauth is OK
2025-12-31T23:50:15.358 [DEBUG] [Thread-136887] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:50:15.358 [DEBUG] [Thread-136887] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:50:15.358 [DEBUG] [Thread-136887] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T23:50:15.358 [DEBUG] [Thread-136887] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:50:15.368 [INFO] [Thread-136887] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:50:15.368 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:50:17.686 [DEBUG] [Thread-136889 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:50:18.323 [DEBUG] [Thread-136887] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:50:18.324 [DEBUG] [Thread-136887] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:50:18.324 [DEBUG] [Thread-136887] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T23:50:18.364 [DEBUG] [Thread-136887] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:50:18.364 [DEBUG] [Thread-136887] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:50:18.367 [DEBUG] [Thread-136887] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:50:18.452 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:50:18.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T23:50:18.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T23:50:18.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T23:50:18.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:50:18.465 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T23:50:18.465 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:50:18.465 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:50:18.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T23:50:18.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.909163 -999.00  +14.80  16.92     80  +11.50 1 2 1 2 1     0    0 2.52 -32.24 ZnESW 14.4 16.9 193.0 20.9 15.7 -19.8 15.6 -18.9 15.5 -17.5 15.8 -18.5
2025-12-31T23:50:18.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T23:50:18.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T23:50:18.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.909163
2025-12-31T23:50:18.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T23:50:18.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T23:50:18.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T23:50:18.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T23:50:18.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T23:50:18.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T23:50:02', tmtdew=3.74, humidity=78.26, cloud=0.0, wind=20.73, temperature=14.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T23:50:02', seeing=1.52, atlas_timestamp='2025-12-31T21:49:11.683', atlas_cloud=2, atlas_rain=1, zp_data=[0.03324999999999889, 0.09825000000000017, 0.0807500000000001, -0.01600000000000179, -0.024499999999999744, 0.09325000000000117, 0.0235000000000003, 0.1017500000000009, 0.09450000000000003, 0.0730000000000004, 0.11224999999999952, 0.1880000000000006, 0.22250000000000014, 0.05424999999999969, -0.10000000000000142, 0.010999999999999233, 0.05925000000000047, 0.1404999999999994, 0.21349999999999802, 0.9122499999999993, 0.20749999999999957, -0.8477500000000013, -0.18975000000000009, 0.09774999999999956, 0.16499999999999915, 0.6035000000000004, 0.15674999999999883, nan, -0.8879999999999999, -1.6759999999999984, -0.7889999999999997, 0.03300000000000125, 0.25574999999999903], zp_timestamp='2025-12-31T21:46:00')
2025-12-31T23:50:18.468 [DEBUG] [Thread-136887] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:50:18.552 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T23:50:18.566 [DEBUG] [Thread-136891] [transport.py] [_log()] starting thread (client mode): 0xb95f3490
2025-12-31T23:50:18.566 [DEBUG] [Thread-136891] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:50:18.581 [DEBUG] [Thread-136891] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T23:50:18.581 [INFO] [Thread-136891] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T23:50:18.588 [DEBUG] [Thread-136891] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:50:18.589 [DEBUG] [Thread-136891] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T23:50:18.589 [DEBUG] [Thread-136891] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:50:18.589 [DEBUG] [Thread-136891] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:50:18.589 [DEBUG] [Thread-136891] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:50:18.589 [DEBUG] [Thread-136891] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:50:18.589 [DEBUG] [Thread-136891] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:50:18.589 [DEBUG] [Thread-136891] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:50:18.589 [DEBUG] [Thread-136891] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:50:18.589 [DEBUG] [Thread-136891] [transport.py] [_log()] client lang: <none>
2025-12-31T23:50:18.590 [DEBUG] [Thread-136891] [transport.py] [_log()] server lang: <none>
2025-12-31T23:50:18.590 [DEBUG] [Thread-136891] [transport.py] [_log()] kex follows: False
2025-12-31T23:50:18.590 [DEBUG] [Thread-136891] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:50:18.590 [DEBUG] [Thread-136891] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:50:18.590 [DEBUG] [Thread-136891] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:50:18.590 [DEBUG] [Thread-136891] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:50:18.590 [DEBUG] [Thread-136891] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:50:18.590 [DEBUG] [Thread-136891] [transport.py] [_log()] Compression: none
2025-12-31T23:50:18.590 [DEBUG] [Thread-136891] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:50:18.646 [DEBUG] [Thread-136891] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:50:18.647 [DEBUG] [Thread-136891] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:50:18.647 [DEBUG] [Thread-136891] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T23:50:18.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T23:50:18.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:50:18.704 [DEBUG] [Thread-136891] [transport.py] [_log()] userauth is OK
2025-12-31T23:50:18.704 [DEBUG] [Thread-136891] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:50:18.704 [DEBUG] [Thread-136891] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:50:18.704 [DEBUG] [Thread-136891] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T23:50:18.705 [DEBUG] [Thread-136891] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:50:18.723 [INFO] [Thread-136891] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:50:18.723 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T23:50:18.724 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:50:19.541 [DEBUG] [Thread-136891] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:50:19.541 [DEBUG] [Thread-136891] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:50:19.589 [DEBUG] [Thread-136891] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:50:19.589 [DEBUG] [Thread-136891] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:50:19.601 [DEBUG] [Thread-136891] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:50:19.610 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:50:19.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T23:50:19.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T23:50:19.629 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:50:19.630 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:50:19.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:50:19.638 [DEBUG] [Thread-136891] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:50:30.675 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:50:30.677 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:50:32.734 [DEBUG] [Thread-136893 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:50:38.680 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:50:41.839 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:50:46.926 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:50:47.789 [DEBUG] [Thread-136894 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:50:49.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T23:50:49.660 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T23:50:49.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T23:50:50.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 23, 50, 34), 3.87, 77.6, 0.0, 23.08, 14.97, 0, 0, 0, 2, 0, 0),)
2025-12-31T23:50:50.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 23:50:34
2025-12-31T23:50:50.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T23:50:50.708 [DEBUG] [Thread-136895] [transport.py] [_log()] starting thread (client mode): 0xb6bbdfc0
2025-12-31T23:50:50.708 [DEBUG] [Thread-136895] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:50:50.727 [DEBUG] [Thread-136895] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T23:50:50.727 [INFO] [Thread-136895] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T23:50:50.731 [DEBUG] [Thread-136895] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:50:50.731 [DEBUG] [Thread-136895] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T23:50:50.731 [DEBUG] [Thread-136895] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:50:50.731 [DEBUG] [Thread-136895] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:50:50.731 [DEBUG] [Thread-136895] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:50:50.731 [DEBUG] [Thread-136895] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:50:50.731 [DEBUG] [Thread-136895] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:50:50.731 [DEBUG] [Thread-136895] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:50:50.731 [DEBUG] [Thread-136895] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:50:50.731 [DEBUG] [Thread-136895] [transport.py] [_log()] client lang: <none>
2025-12-31T23:50:50.731 [DEBUG] [Thread-136895] [transport.py] [_log()] server lang: <none>
2025-12-31T23:50:50.731 [DEBUG] [Thread-136895] [transport.py] [_log()] kex follows: False
2025-12-31T23:50:50.731 [DEBUG] [Thread-136895] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:50:50.731 [DEBUG] [Thread-136895] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:50:50.731 [DEBUG] [Thread-136895] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:50:50.731 [DEBUG] [Thread-136895] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:50:50.731 [DEBUG] [Thread-136895] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:50:50.731 [DEBUG] [Thread-136895] [transport.py] [_log()] Compression: none
2025-12-31T23:50:50.731 [DEBUG] [Thread-136895] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:50:50.749 [DEBUG] [Thread-136895] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:50:50.749 [DEBUG] [Thread-136895] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:50:50.749 [DEBUG] [Thread-136895] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T23:50:50.749 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T23:50:50.749 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:50:50.750 [DEBUG] [Thread-136895] [transport.py] [_log()] userauth is OK
2025-12-31T23:50:50.750 [DEBUG] [Thread-136895] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:50:50.750 [DEBUG] [Thread-136895] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:50:50.750 [DEBUG] [Thread-136895] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T23:50:50.750 [DEBUG] [Thread-136895] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:50:50.760 [INFO] [Thread-136895] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:50:50.760 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:50:51.414 [DEBUG] [Thread-136895] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:50:51.414 [DEBUG] [Thread-136895] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:50:51.414 [DEBUG] [Thread-136895] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T23:50:51.455 [DEBUG] [Thread-136895] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:50:51.455 [DEBUG] [Thread-136895] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:50:51.457 [DEBUG] [Thread-136895] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:50:51.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:50:51.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T23:50:51.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T23:50:51.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T23:50:51.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:50:51.475 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T23:50:51.475 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:50:51.475 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:50:51.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T23:50:51.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.909510 -999.00  +14.80  12.66     80  +11.60 1 2 1 2 1     0    0 2.62 -32.01 ZnEsW 14.5 12.7 192.4 18.7 15.8 -19.7 15.6 -18.7 15.5 -17.3 15.7 -18.4
2025-12-31T23:50:51.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T23:50:51.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T23:50:51.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.909510
2025-12-31T23:50:51.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T23:50:51.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T23:50:51.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T23:50:51.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T23:50:51.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T23:50:51.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T23:50:34', tmtdew=3.87, humidity=77.6, cloud=0.0, wind=23.08, temperature=14.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T23:50:34', seeing=1.24, atlas_timestamp='2025-12-31T21:49:41.664', atlas_cloud=2, atlas_rain=1, zp_data=[0.03324999999999889, 0.09825000000000017, 0.0807500000000001, -0.01600000000000179, -0.024499999999999744, 0.09325000000000117, 0.0235000000000003, 0.1017500000000009, 0.09450000000000003, 0.0730000000000004, 0.11224999999999952, 0.1880000000000006, 0.22250000000000014, 0.05424999999999969, -0.10000000000000142, 0.010999999999999233, 0.05925000000000047, 0.1404999999999994, 0.21349999999999802, 0.9122499999999993, 0.20749999999999957, -0.8477500000000013, -0.18975000000000009, 0.09774999999999956, 0.16499999999999915, 0.6035000000000004, 0.15674999999999883, nan, -0.8879999999999999, -1.6759999999999984, -0.7889999999999997, 0.03300000000000125, 0.25574999999999903], zp_timestamp='2025-12-31T21:46:00')
2025-12-31T23:50:51.476 [DEBUG] [Thread-136895] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:50:51.551 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T23:50:51.566 [DEBUG] [Thread-136898] [transport.py] [_log()] starting thread (client mode): 0xb6b61000
2025-12-31T23:50:51.566 [DEBUG] [Thread-136898] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:50:51.580 [DEBUG] [Thread-136898] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T23:50:51.581 [INFO] [Thread-136898] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T23:50:51.588 [DEBUG] [Thread-136898] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:50:51.588 [DEBUG] [Thread-136898] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T23:50:51.588 [DEBUG] [Thread-136898] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:50:51.588 [DEBUG] [Thread-136898] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:50:51.588 [DEBUG] [Thread-136898] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:50:51.588 [DEBUG] [Thread-136898] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:50:51.588 [DEBUG] [Thread-136898] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:50:51.588 [DEBUG] [Thread-136898] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:50:51.588 [DEBUG] [Thread-136898] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:50:51.588 [DEBUG] [Thread-136898] [transport.py] [_log()] client lang: <none>
2025-12-31T23:50:51.588 [DEBUG] [Thread-136898] [transport.py] [_log()] server lang: <none>
2025-12-31T23:50:51.588 [DEBUG] [Thread-136898] [transport.py] [_log()] kex follows: False
2025-12-31T23:50:51.588 [DEBUG] [Thread-136898] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:50:51.588 [DEBUG] [Thread-136898] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:50:51.588 [DEBUG] [Thread-136898] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:50:51.588 [DEBUG] [Thread-136898] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:50:51.588 [DEBUG] [Thread-136898] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:50:51.588 [DEBUG] [Thread-136898] [transport.py] [_log()] Compression: none
2025-12-31T23:50:51.588 [DEBUG] [Thread-136898] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:50:51.646 [DEBUG] [Thread-136898] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:50:51.646 [DEBUG] [Thread-136898] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:50:51.646 [DEBUG] [Thread-136898] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T23:50:51.646 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T23:50:51.646 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:50:51.704 [DEBUG] [Thread-136898] [transport.py] [_log()] userauth is OK
2025-12-31T23:50:51.704 [DEBUG] [Thread-136898] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:50:51.704 [DEBUG] [Thread-136898] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:50:51.704 [DEBUG] [Thread-136898] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T23:50:51.704 [DEBUG] [Thread-136898] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:50:51.718 [INFO] [Thread-136898] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:50:51.719 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T23:50:51.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:50:52.316 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:50:52.566 [DEBUG] [Thread-136898] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:50:52.567 [DEBUG] [Thread-136898] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:50:52.618 [DEBUG] [Thread-136898] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:50:52.618 [DEBUG] [Thread-136898] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:50:52.628 [DEBUG] [Thread-136898] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:50:52.638 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:50:52.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T23:50:52.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T23:50:52.657 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:50:52.657 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:50:52.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:50:52.667 [DEBUG] [Thread-136898] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:50:53.681 [DEBUG] [Thread-136900 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:51:02.822 [DEBUG] [Thread-136901 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:51:11.693 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:51:16.092 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:51:17.880 [DEBUG] [Thread-136902 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:51:22.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T23:51:22.663 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T23:51:22.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T23:51:23.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 23, 51, 6), 3.73, 78.3, 0.0, 18.0, 14.63, 0, 0, 0, 2, 0, 0),)
2025-12-31T23:51:23.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 23:51:06
2025-12-31T23:51:23.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T23:51:23.666 [DEBUG] [Thread-136903] [transport.py] [_log()] starting thread (client mode): 0xb6bbf370
2025-12-31T23:51:23.666 [DEBUG] [Thread-136903] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:51:23.685 [DEBUG] [Thread-136903] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T23:51:23.685 [INFO] [Thread-136903] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T23:51:23.689 [DEBUG] [Thread-136903] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:51:23.689 [DEBUG] [Thread-136903] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T23:51:23.689 [DEBUG] [Thread-136903] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:51:23.689 [DEBUG] [Thread-136903] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:51:23.689 [DEBUG] [Thread-136903] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:51:23.689 [DEBUG] [Thread-136903] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:51:23.689 [DEBUG] [Thread-136903] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:51:23.689 [DEBUG] [Thread-136903] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:51:23.689 [DEBUG] [Thread-136903] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:51:23.689 [DEBUG] [Thread-136903] [transport.py] [_log()] client lang: <none>
2025-12-31T23:51:23.689 [DEBUG] [Thread-136903] [transport.py] [_log()] server lang: <none>
2025-12-31T23:51:23.689 [DEBUG] [Thread-136903] [transport.py] [_log()] kex follows: False
2025-12-31T23:51:23.689 [DEBUG] [Thread-136903] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:51:23.689 [DEBUG] [Thread-136903] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:51:23.689 [DEBUG] [Thread-136903] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:51:23.689 [DEBUG] [Thread-136903] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:51:23.689 [DEBUG] [Thread-136903] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:51:23.690 [DEBUG] [Thread-136903] [transport.py] [_log()] Compression: none
2025-12-31T23:51:23.690 [DEBUG] [Thread-136903] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:51:23.708 [DEBUG] [Thread-136903] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:51:23.709 [DEBUG] [Thread-136903] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:51:23.709 [DEBUG] [Thread-136903] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T23:51:23.709 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T23:51:23.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:51:23.711 [DEBUG] [Thread-136903] [transport.py] [_log()] userauth is OK
2025-12-31T23:51:23.711 [DEBUG] [Thread-136903] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:51:23.711 [DEBUG] [Thread-136903] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:51:23.712 [DEBUG] [Thread-136903] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T23:51:23.712 [DEBUG] [Thread-136903] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:51:23.731 [INFO] [Thread-136903] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:51:23.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:51:24.521 [DEBUG] [Thread-136903] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:51:24.522 [DEBUG] [Thread-136903] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:51:24.522 [DEBUG] [Thread-136903] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T23:51:24.563 [DEBUG] [Thread-136903] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:51:24.563 [DEBUG] [Thread-136903] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:51:24.565 [DEBUG] [Thread-136903] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:51:24.576 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:51:24.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T23:51:24.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T23:51:24.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T23:51:24.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:51:24.582 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T23:51:24.582 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:51:24.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:51:24.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T23:51:24.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.910204 -999.00  +14.80  11.42     81  +11.60 1 2 1 2 1     0    0 2.41 -36.05 ZNEsW 18.0 11.4 195.1 23.0 15.7 -19.5 15.6 -18.3 15.5 -16.9 15.7 -18.2
2025-12-31T23:51:24.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T23:51:24.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T23:51:24.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.910204
2025-12-31T23:51:24.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T23:51:24.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T23:51:24.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T23:51:24.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T23:51:24.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T23:51:24.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T23:51:06', tmtdew=3.73, humidity=78.3, cloud=0.0, wind=18.0, temperature=14.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T23:51:06', seeing=1.25, atlas_timestamp='2025-12-31T21:50:41.626', atlas_cloud=2, atlas_rain=1, zp_data=[0.12875000000000014, 0.1542500000000011, 0.16825000000000045, 0.14349999999999952, 0.2705000000000002, 0.35325000000000095, -0.0065000000000008384, 0.21075000000000088, 0.12650000000000006, 0.4150000000000009, 0.3947499999999984, 0.9470000000000001, 0.5474999999999994, 0.023749999999999716, -1.125, -0.1144999999999996, 0.18024999999999913, 0.41849999999999987, 0.46749999999999936, nan, 0.29299999999999926, -0.6377500000000005, -1.7927499999999998, -0.05424999999999969, 0.18849999999999945, 0.3194999999999997, 0.8237500000000004, nan, -1.1500000000000004, -1.7439999999999998, -1.6674999999999986, 0.11350000000000193, 0.21274999999999977], zp_timestamp='2025-12-31T21:49:00')
2025-12-31T23:51:24.584 [DEBUG] [Thread-136903] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:51:24.657 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T23:51:24.670 [DEBUG] [Thread-136906] [transport.py] [_log()] starting thread (client mode): 0xb6bbdb40
2025-12-31T23:51:24.670 [DEBUG] [Thread-136906] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:51:24.685 [DEBUG] [Thread-136906] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T23:51:24.685 [INFO] [Thread-136906] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T23:51:24.692 [DEBUG] [Thread-136906] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:51:24.692 [DEBUG] [Thread-136906] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T23:51:24.693 [DEBUG] [Thread-136906] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:51:24.693 [DEBUG] [Thread-136906] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:51:24.693 [DEBUG] [Thread-136906] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:51:24.693 [DEBUG] [Thread-136906] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:51:24.693 [DEBUG] [Thread-136906] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:51:24.693 [DEBUG] [Thread-136906] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:51:24.693 [DEBUG] [Thread-136906] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:51:24.693 [DEBUG] [Thread-136906] [transport.py] [_log()] client lang: <none>
2025-12-31T23:51:24.693 [DEBUG] [Thread-136906] [transport.py] [_log()] server lang: <none>
2025-12-31T23:51:24.693 [DEBUG] [Thread-136906] [transport.py] [_log()] kex follows: False
2025-12-31T23:51:24.693 [DEBUG] [Thread-136906] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:51:24.693 [DEBUG] [Thread-136906] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:51:24.693 [DEBUG] [Thread-136906] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:51:24.693 [DEBUG] [Thread-136906] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:51:24.693 [DEBUG] [Thread-136906] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:51:24.693 [DEBUG] [Thread-136906] [transport.py] [_log()] Compression: none
2025-12-31T23:51:24.693 [DEBUG] [Thread-136906] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:51:24.756 [DEBUG] [Thread-136906] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:51:24.757 [DEBUG] [Thread-136906] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:51:24.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T23:51:24.758 [DEBUG] [Thread-136906] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T23:51:24.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:51:24.815 [DEBUG] [Thread-136906] [transport.py] [_log()] userauth is OK
2025-12-31T23:51:24.815 [DEBUG] [Thread-136906] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:51:24.815 [DEBUG] [Thread-136906] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:51:24.816 [DEBUG] [Thread-136906] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T23:51:24.816 [DEBUG] [Thread-136906] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:51:24.833 [INFO] [Thread-136906] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:51:24.833 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T23:51:24.834 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:51:25.674 [DEBUG] [Thread-136906] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:51:25.674 [DEBUG] [Thread-136906] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:51:25.724 [DEBUG] [Thread-136906] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:51:25.724 [DEBUG] [Thread-136906] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:51:25.733 [DEBUG] [Thread-136906] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:51:25.742 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:51:25.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T23:51:25.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T23:51:25.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:51:25.760 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:51:25.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:51:25.769 [DEBUG] [Thread-136906] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:51:30.877 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:51:30.878 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:51:32.912 [DEBUG] [Thread-136908 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:51:35.494 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:51:39.883 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:51:46.818 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:51:47.951 [DEBUG] [Thread-136909 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:51:51.196 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:51:53.771 [DEBUG] [Thread-136910 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:51:55.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T23:51:55.790 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T23:51:55.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T23:51:56.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 23, 51, 38), 3.74, 78.26, 0.0, 17.61, 14.63, 0, 0, 0, 2, 0, 0),)
2025-12-31T23:51:56.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 23:51:38
2025-12-31T23:51:56.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T23:51:56.814 [DEBUG] [Thread-136911] [transport.py] [_log()] starting thread (client mode): 0xb95f1540
2025-12-31T23:51:56.814 [DEBUG] [Thread-136911] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:51:56.834 [DEBUG] [Thread-136911] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T23:51:56.834 [INFO] [Thread-136911] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T23:51:56.835 [DEBUG] [Thread-136911] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:51:56.835 [DEBUG] [Thread-136911] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T23:51:56.835 [DEBUG] [Thread-136911] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:51:56.835 [DEBUG] [Thread-136911] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:51:56.835 [DEBUG] [Thread-136911] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:51:56.835 [DEBUG] [Thread-136911] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:51:56.835 [DEBUG] [Thread-136911] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:51:56.836 [DEBUG] [Thread-136911] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:51:56.836 [DEBUG] [Thread-136911] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:51:56.836 [DEBUG] [Thread-136911] [transport.py] [_log()] client lang: <none>
2025-12-31T23:51:56.836 [DEBUG] [Thread-136911] [transport.py] [_log()] server lang: <none>
2025-12-31T23:51:56.836 [DEBUG] [Thread-136911] [transport.py] [_log()] kex follows: False
2025-12-31T23:51:56.836 [DEBUG] [Thread-136911] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:51:56.836 [DEBUG] [Thread-136911] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:51:56.836 [DEBUG] [Thread-136911] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:51:56.836 [DEBUG] [Thread-136911] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:51:56.836 [DEBUG] [Thread-136911] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:51:56.836 [DEBUG] [Thread-136911] [transport.py] [_log()] Compression: none
2025-12-31T23:51:56.836 [DEBUG] [Thread-136911] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:51:56.843 [DEBUG] [Thread-136911] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:51:56.844 [DEBUG] [Thread-136911] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:51:56.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T23:51:56.844 [DEBUG] [Thread-136911] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T23:51:56.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:51:56.845 [DEBUG] [Thread-136911] [transport.py] [_log()] userauth is OK
2025-12-31T23:51:56.845 [DEBUG] [Thread-136911] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:51:56.845 [DEBUG] [Thread-136911] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:51:56.845 [DEBUG] [Thread-136911] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T23:51:56.845 [DEBUG] [Thread-136911] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:51:56.860 [INFO] [Thread-136911] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:51:56.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:51:57.503 [DEBUG] [Thread-136911] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:51:57.503 [DEBUG] [Thread-136911] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:51:57.504 [DEBUG] [Thread-136911] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T23:51:57.545 [DEBUG] [Thread-136911] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:51:57.545 [DEBUG] [Thread-136911] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:51:57.548 [DEBUG] [Thread-136911] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:51:57.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:51:57.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T23:51:57.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T23:51:57.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T23:51:57.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:51:57.567 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T23:51:57.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:51:57.568 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:51:57.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T23:51:57.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.910551 -999.00  +14.70   9.27     81  +11.50 1 2 1 2 1     0    0 2.54 -34.76 ZNEsW 13.9 9.3 192.8 21.0 15.7 -19.4 15.6 -18.3 15.4 -16.5 15.7 -17.8
2025-12-31T23:51:57.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T23:51:57.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T23:51:57.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.910551
2025-12-31T23:51:57.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T23:51:57.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T23:51:57.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T23:51:57.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T23:51:57.569 [DEBUG] [Thread-136911] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:51:57.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T23:51:57.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T23:51:38', tmtdew=3.74, humidity=78.26, cloud=0.0, wind=17.61, temperature=14.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T23:51:38', seeing=1.25, atlas_timestamp='2025-12-31T21:51:11.606', atlas_cloud=2, atlas_rain=1, zp_data=[0.12875000000000014, 0.1542500000000011, 0.16825000000000045, 0.14349999999999952, 0.2705000000000002, 0.35325000000000095, -0.0065000000000008384, 0.21075000000000088, 0.12650000000000006, 0.4150000000000009, 0.3947499999999984, 0.9470000000000001, 0.5474999999999994, 0.023749999999999716, -1.125, -0.1144999999999996, 0.18024999999999913, 0.41849999999999987, 0.46749999999999936, nan, 0.29299999999999926, -0.6377500000000005, -1.7927499999999998, -0.05424999999999969, 0.18849999999999945, 0.3194999999999997, 0.8237500000000004, nan, -1.1500000000000004, -1.7439999999999998, -1.6674999999999986, 0.11350000000000193, 0.21274999999999977], zp_timestamp='2025-12-31T21:49:00')
2025-12-31T23:51:57.646 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T23:51:57.659 [DEBUG] [Thread-136914] [transport.py] [_log()] starting thread (client mode): 0xb95f2d10
2025-12-31T23:51:57.659 [DEBUG] [Thread-136914] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:51:57.674 [DEBUG] [Thread-136914] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T23:51:57.674 [INFO] [Thread-136914] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T23:51:57.682 [DEBUG] [Thread-136914] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:51:57.682 [DEBUG] [Thread-136914] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T23:51:57.682 [DEBUG] [Thread-136914] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:51:57.682 [DEBUG] [Thread-136914] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:51:57.682 [DEBUG] [Thread-136914] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:51:57.682 [DEBUG] [Thread-136914] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:51:57.682 [DEBUG] [Thread-136914] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:51:57.682 [DEBUG] [Thread-136914] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:51:57.682 [DEBUG] [Thread-136914] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:51:57.682 [DEBUG] [Thread-136914] [transport.py] [_log()] client lang: <none>
2025-12-31T23:51:57.682 [DEBUG] [Thread-136914] [transport.py] [_log()] server lang: <none>
2025-12-31T23:51:57.682 [DEBUG] [Thread-136914] [transport.py] [_log()] kex follows: False
2025-12-31T23:51:57.683 [DEBUG] [Thread-136914] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:51:57.683 [DEBUG] [Thread-136914] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:51:57.683 [DEBUG] [Thread-136914] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:51:57.683 [DEBUG] [Thread-136914] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:51:57.683 [DEBUG] [Thread-136914] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:51:57.683 [DEBUG] [Thread-136914] [transport.py] [_log()] Compression: none
2025-12-31T23:51:57.683 [DEBUG] [Thread-136914] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:51:57.739 [DEBUG] [Thread-136914] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:51:57.739 [DEBUG] [Thread-136914] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:51:57.740 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T23:51:57.740 [DEBUG] [Thread-136914] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T23:51:57.741 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:51:57.795 [DEBUG] [Thread-136914] [transport.py] [_log()] userauth is OK
2025-12-31T23:51:57.795 [DEBUG] [Thread-136914] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:51:57.795 [DEBUG] [Thread-136914] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:51:57.795 [DEBUG] [Thread-136914] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T23:51:57.795 [DEBUG] [Thread-136914] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:51:57.810 [INFO] [Thread-136914] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:51:57.810 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T23:51:57.810 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:51:58.639 [DEBUG] [Thread-136914] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:51:58.639 [DEBUG] [Thread-136914] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:51:58.688 [DEBUG] [Thread-136914] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:51:58.688 [DEBUG] [Thread-136914] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:51:58.698 [DEBUG] [Thread-136914] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:51:58.708 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:51:58.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T23:51:58.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T23:51:58.726 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:51:58.727 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:51:58.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:51:58.735 [DEBUG] [Thread-136914] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:52:02.987 [DEBUG] [Thread-136916 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:52:18.032 [DEBUG] [Thread-136917 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:52:28.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T23:52:28.758 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T23:52:28.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-12-31T23:52:29.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 23, 52, 10), 3.73, 78.31, 0.0, 17.01, 14.63, 0, 0, 0, 2, 0, 0),)
2025-12-31T23:52:29.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 23:52:10
2025-12-31T23:52:29.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T23:52:29.737 [DEBUG] [Thread-136918] [transport.py] [_log()] starting thread (client mode): 0xb95f37f0
2025-12-31T23:52:29.737 [DEBUG] [Thread-136918] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:52:29.757 [DEBUG] [Thread-136918] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T23:52:29.757 [INFO] [Thread-136918] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T23:52:29.761 [DEBUG] [Thread-136918] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:52:29.761 [DEBUG] [Thread-136918] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T23:52:29.761 [DEBUG] [Thread-136918] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:52:29.761 [DEBUG] [Thread-136918] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:52:29.761 [DEBUG] [Thread-136918] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:52:29.761 [DEBUG] [Thread-136918] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:52:29.761 [DEBUG] [Thread-136918] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:52:29.761 [DEBUG] [Thread-136918] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:52:29.761 [DEBUG] [Thread-136918] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:52:29.761 [DEBUG] [Thread-136918] [transport.py] [_log()] client lang: <none>
2025-12-31T23:52:29.761 [DEBUG] [Thread-136918] [transport.py] [_log()] server lang: <none>
2025-12-31T23:52:29.761 [DEBUG] [Thread-136918] [transport.py] [_log()] kex follows: False
2025-12-31T23:52:29.761 [DEBUG] [Thread-136918] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:52:29.761 [DEBUG] [Thread-136918] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:52:29.761 [DEBUG] [Thread-136918] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:52:29.761 [DEBUG] [Thread-136918] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:52:29.761 [DEBUG] [Thread-136918] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:52:29.761 [DEBUG] [Thread-136918] [transport.py] [_log()] Compression: none
2025-12-31T23:52:29.761 [DEBUG] [Thread-136918] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:52:29.778 [DEBUG] [Thread-136918] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:52:29.779 [DEBUG] [Thread-136918] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:52:29.779 [DEBUG] [Thread-136918] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T23:52:29.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T23:52:29.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:52:29.781 [DEBUG] [Thread-136918] [transport.py] [_log()] userauth is OK
2025-12-31T23:52:29.781 [DEBUG] [Thread-136918] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:52:29.781 [DEBUG] [Thread-136918] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:52:29.781 [DEBUG] [Thread-136918] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T23:52:29.782 [DEBUG] [Thread-136918] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:52:29.796 [INFO] [Thread-136918] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:52:29.797 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:52:30.414 [DEBUG] [Thread-136918] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:52:30.414 [DEBUG] [Thread-136918] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:52:30.415 [DEBUG] [Thread-136918] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T23:52:30.455 [DEBUG] [Thread-136918] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:52:30.455 [DEBUG] [Thread-136918] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:52:30.459 [DEBUG] [Thread-136918] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:52:30.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:52:30.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T23:52:30.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T23:52:30.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T23:52:30.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:52:30.482 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T23:52:30.483 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:52:30.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:52:30.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T23:52:30.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.910899 -999.00  +14.80  13.64     81  +11.50 1 2 1 2 1     0    0 2.37 -37.03 ZNEsW 9.7 13.6 207.6 18.1 15.7 -19.1 15.6 -17.8 15.4 -16.1 15.7 -17.5
2025-12-31T23:52:30.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T23:52:30.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T23:52:30.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.910899
2025-12-31T23:52:30.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T23:52:30.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T23:52:30.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T23:52:30.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T23:52:30.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T23:52:30.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T23:52:10', tmtdew=3.73, humidity=78.31, cloud=0.0, wind=17.01, temperature=14.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T23:52:10', seeing=1.27, atlas_timestamp='2025-12-31T21:51:41.674', atlas_cloud=2, atlas_rain=1, zp_data=[0.12875000000000014, 0.1542500000000011, 0.16825000000000045, 0.14349999999999952, 0.2705000000000002, 0.35325000000000095, -0.0065000000000008384, 0.21075000000000088, 0.12650000000000006, 0.4150000000000009, 0.3947499999999984, 0.9470000000000001, 0.5474999999999994, 0.023749999999999716, -1.125, -0.1144999999999996, 0.18024999999999913, 0.41849999999999987, 0.46749999999999936, nan, 0.29299999999999926, -0.6377500000000005, -1.7927499999999998, -0.05424999999999969, 0.18849999999999945, 0.3194999999999997, 0.8237500000000004, nan, -1.1500000000000004, -1.7439999999999998, -1.6674999999999986, 0.11350000000000193, 0.21274999999999977], zp_timestamp='2025-12-31T21:49:00')
2025-12-31T23:52:30.485 [DEBUG] [Thread-136918] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:52:30.570 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T23:52:30.585 [DEBUG] [Thread-136921] [transport.py] [_log()] starting thread (client mode): 0xb6b63820
2025-12-31T23:52:30.585 [DEBUG] [Thread-136921] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:52:30.601 [DEBUG] [Thread-136921] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T23:52:30.601 [INFO] [Thread-136921] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T23:52:30.609 [DEBUG] [Thread-136921] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:52:30.609 [DEBUG] [Thread-136921] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T23:52:30.609 [DEBUG] [Thread-136921] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:52:30.609 [DEBUG] [Thread-136921] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:52:30.609 [DEBUG] [Thread-136921] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:52:30.609 [DEBUG] [Thread-136921] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:52:30.609 [DEBUG] [Thread-136921] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:52:30.609 [DEBUG] [Thread-136921] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:52:30.609 [DEBUG] [Thread-136921] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:52:30.609 [DEBUG] [Thread-136921] [transport.py] [_log()] client lang: <none>
2025-12-31T23:52:30.609 [DEBUG] [Thread-136921] [transport.py] [_log()] server lang: <none>
2025-12-31T23:52:30.609 [DEBUG] [Thread-136921] [transport.py] [_log()] kex follows: False
2025-12-31T23:52:30.609 [DEBUG] [Thread-136921] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:52:30.610 [DEBUG] [Thread-136921] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:52:30.610 [DEBUG] [Thread-136921] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:52:30.610 [DEBUG] [Thread-136921] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:52:30.610 [DEBUG] [Thread-136921] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:52:30.610 [DEBUG] [Thread-136921] [transport.py] [_log()] Compression: none
2025-12-31T23:52:30.610 [DEBUG] [Thread-136921] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:52:30.668 [DEBUG] [Thread-136921] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:52:30.668 [DEBUG] [Thread-136921] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:52:30.669 [DEBUG] [Thread-136921] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T23:52:30.669 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T23:52:30.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:52:30.728 [DEBUG] [Thread-136921] [transport.py] [_log()] userauth is OK
2025-12-31T23:52:30.729 [DEBUG] [Thread-136921] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:52:30.729 [DEBUG] [Thread-136921] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:52:30.729 [DEBUG] [Thread-136921] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T23:52:30.729 [DEBUG] [Thread-136921] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:52:30.749 [INFO] [Thread-136921] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:52:30.750 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T23:52:30.750 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:52:31.077 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:52:31.078 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:52:31.605 [DEBUG] [Thread-136921] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:52:31.605 [DEBUG] [Thread-136921] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:52:31.653 [DEBUG] [Thread-136921] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:52:31.654 [DEBUG] [Thread-136921] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:52:31.663 [DEBUG] [Thread-136921] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:52:31.672 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:52:31.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T23:52:31.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T23:52:31.691 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:52:31.691 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:52:31.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:52:31.705 [DEBUG] [Thread-136921] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:52:33.070 [DEBUG] [Thread-136923 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:52:48.119 [DEBUG] [Thread-136924 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:52:50.885 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:52:53.851 [DEBUG] [Thread-136925 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:52:53.927 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:53:01.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T23:53:01.715 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T23:53:01.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-12-31T23:53:02.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 23, 52, 42), 3.68, 78.33, 0.0, 17.57, 14.67, 0, 0, 0, 2, 0, 0),)
2025-12-31T23:53:02.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 23:52:42
2025-12-31T23:53:02.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T23:53:02.693 [DEBUG] [Thread-136926] [transport.py] [_log()] starting thread (client mode): 0xb6b60c40
2025-12-31T23:53:02.693 [DEBUG] [Thread-136926] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:53:02.715 [DEBUG] [Thread-136926] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T23:53:02.715 [INFO] [Thread-136926] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T23:53:02.716 [DEBUG] [Thread-136926] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:53:02.716 [DEBUG] [Thread-136926] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T23:53:02.716 [DEBUG] [Thread-136926] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:53:02.716 [DEBUG] [Thread-136926] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:53:02.716 [DEBUG] [Thread-136926] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:53:02.716 [DEBUG] [Thread-136926] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:53:02.716 [DEBUG] [Thread-136926] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:53:02.716 [DEBUG] [Thread-136926] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:53:02.716 [DEBUG] [Thread-136926] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:53:02.716 [DEBUG] [Thread-136926] [transport.py] [_log()] client lang: <none>
2025-12-31T23:53:02.716 [DEBUG] [Thread-136926] [transport.py] [_log()] server lang: <none>
2025-12-31T23:53:02.716 [DEBUG] [Thread-136926] [transport.py] [_log()] kex follows: False
2025-12-31T23:53:02.716 [DEBUG] [Thread-136926] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:53:02.716 [DEBUG] [Thread-136926] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:53:02.717 [DEBUG] [Thread-136926] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:53:02.717 [DEBUG] [Thread-136926] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:53:02.717 [DEBUG] [Thread-136926] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:53:02.717 [DEBUG] [Thread-136926] [transport.py] [_log()] Compression: none
2025-12-31T23:53:02.717 [DEBUG] [Thread-136926] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:53:02.726 [DEBUG] [Thread-136926] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:53:02.727 [DEBUG] [Thread-136926] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:53:02.727 [DEBUG] [Thread-136926] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T23:53:02.727 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T23:53:02.727 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:53:02.728 [DEBUG] [Thread-136926] [transport.py] [_log()] userauth is OK
2025-12-31T23:53:02.728 [DEBUG] [Thread-136926] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:53:02.728 [DEBUG] [Thread-136926] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:53:02.728 [DEBUG] [Thread-136926] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T23:53:02.728 [DEBUG] [Thread-136926] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:53:02.747 [INFO] [Thread-136926] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:53:02.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:53:03.151 [DEBUG] [Thread-136928 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:53:03.391 [DEBUG] [Thread-136926] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:53:03.391 [DEBUG] [Thread-136926] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:53:03.392 [DEBUG] [Thread-136926] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T23:53:03.432 [DEBUG] [Thread-136926] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:53:03.432 [DEBUG] [Thread-136926] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:53:03.436 [DEBUG] [Thread-136926] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:53:03.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:53:03.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T23:53:03.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T23:53:03.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T23:53:03.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:53:03.458 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T23:53:03.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:53:03.458 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:53:03.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T23:53:03.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.911246 -999.00  +14.80  16.20     81  +11.50 1 2 1 2 1     0    0 2.48 -34.65 ZNE.. 12.7 16.2 201.2 18.6 15.7 -18.8 15.6 -17.6 15.4 -15.9 15.7 -17.2
2025-12-31T23:53:03.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T23:53:03.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T23:53:03.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.911246
2025-12-31T23:53:03.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T23:53:03.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T23:53:03.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T23:53:03.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T23:53:03.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T23:53:03.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T23:52:42', tmtdew=3.68, humidity=78.33, cloud=0.0, wind=17.57, temperature=14.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T23:52:42', seeing=1.15, atlas_timestamp='2025-12-31T21:52:11.654', atlas_cloud=2, atlas_rain=1, zp_data=[0.12875000000000014, 0.1542500000000011, 0.16825000000000045, 0.14349999999999952, 0.2705000000000002, 0.35325000000000095, -0.0065000000000008384, 0.21075000000000088, 0.12650000000000006, 0.4150000000000009, 0.3947499999999984, 0.9470000000000001, 0.5474999999999994, 0.023749999999999716, -1.125, -0.1144999999999996, 0.18024999999999913, 0.41849999999999987, 0.46749999999999936, nan, 0.29299999999999926, -0.6377500000000005, -1.7927499999999998, -0.05424999999999969, 0.18849999999999945, 0.3194999999999997, 0.8237500000000004, nan, -1.1500000000000004, -1.7439999999999998, -1.6674999999999986, 0.11350000000000193, 0.21274999999999977], zp_timestamp='2025-12-31T21:49:00')
2025-12-31T23:53:03.460 [DEBUG] [Thread-136926] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:53:03.541 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T23:53:03.554 [DEBUG] [Thread-136930] [transport.py] [_log()] starting thread (client mode): 0xb95f0dc0
2025-12-31T23:53:03.555 [DEBUG] [Thread-136930] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:53:03.569 [DEBUG] [Thread-136930] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T23:53:03.569 [INFO] [Thread-136930] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T23:53:03.577 [DEBUG] [Thread-136930] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:53:03.578 [DEBUG] [Thread-136930] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T23:53:03.578 [DEBUG] [Thread-136930] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:53:03.578 [DEBUG] [Thread-136930] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:53:03.578 [DEBUG] [Thread-136930] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:53:03.578 [DEBUG] [Thread-136930] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:53:03.578 [DEBUG] [Thread-136930] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:53:03.578 [DEBUG] [Thread-136930] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:53:03.579 [DEBUG] [Thread-136930] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:53:03.579 [DEBUG] [Thread-136930] [transport.py] [_log()] client lang: <none>
2025-12-31T23:53:03.579 [DEBUG] [Thread-136930] [transport.py] [_log()] server lang: <none>
2025-12-31T23:53:03.579 [DEBUG] [Thread-136930] [transport.py] [_log()] kex follows: False
2025-12-31T23:53:03.579 [DEBUG] [Thread-136930] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:53:03.579 [DEBUG] [Thread-136930] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:53:03.579 [DEBUG] [Thread-136930] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:53:03.579 [DEBUG] [Thread-136930] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:53:03.580 [DEBUG] [Thread-136930] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:53:03.580 [DEBUG] [Thread-136930] [transport.py] [_log()] Compression: none
2025-12-31T23:53:03.580 [DEBUG] [Thread-136930] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:53:03.637 [DEBUG] [Thread-136930] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:53:03.637 [DEBUG] [Thread-136930] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:53:03.638 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T23:53:03.639 [DEBUG] [Thread-136930] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T23:53:03.639 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:53:03.704 [DEBUG] [Thread-136930] [transport.py] [_log()] userauth is OK
2025-12-31T23:53:03.704 [DEBUG] [Thread-136930] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:53:03.704 [DEBUG] [Thread-136930] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:53:03.704 [DEBUG] [Thread-136930] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T23:53:03.704 [DEBUG] [Thread-136930] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:53:03.723 [INFO] [Thread-136930] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:53:03.724 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T23:53:03.724 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:53:04.553 [DEBUG] [Thread-136930] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:53:04.553 [DEBUG] [Thread-136930] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:53:04.602 [DEBUG] [Thread-136930] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:53:04.602 [DEBUG] [Thread-136930] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:53:04.612 [DEBUG] [Thread-136930] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:53:04.622 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:53:04.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T23:53:04.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T23:53:04.647 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:53:04.647 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:53:04.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:53:04.656 [DEBUG] [Thread-136930] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:53:18.186 [DEBUG] [Thread-136932 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:53:31.280 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:53:31.282 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:53:33.244 [DEBUG] [Thread-136933 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:53:34.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T23:53:34.678 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T23:53:34.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T23:53:35.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 23, 53, 14), 3.67, 78.36, 0.0, 15.69, 14.6, 0, 0, 0, 2, 0, 0),)
2025-12-31T23:53:35.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 23:53:14
2025-12-31T23:53:35.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T23:53:35.662 [DEBUG] [Thread-136934] [transport.py] [_log()] starting thread (client mode): 0xb6bbe530
2025-12-31T23:53:35.662 [DEBUG] [Thread-136934] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:53:35.683 [DEBUG] [Thread-136934] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T23:53:35.683 [INFO] [Thread-136934] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T23:53:35.686 [DEBUG] [Thread-136934] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:53:35.686 [DEBUG] [Thread-136934] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T23:53:35.686 [DEBUG] [Thread-136934] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:53:35.686 [DEBUG] [Thread-136934] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:53:35.686 [DEBUG] [Thread-136934] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:53:35.686 [DEBUG] [Thread-136934] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:53:35.686 [DEBUG] [Thread-136934] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:53:35.686 [DEBUG] [Thread-136934] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:53:35.686 [DEBUG] [Thread-136934] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:53:35.686 [DEBUG] [Thread-136934] [transport.py] [_log()] client lang: <none>
2025-12-31T23:53:35.686 [DEBUG] [Thread-136934] [transport.py] [_log()] server lang: <none>
2025-12-31T23:53:35.686 [DEBUG] [Thread-136934] [transport.py] [_log()] kex follows: False
2025-12-31T23:53:35.686 [DEBUG] [Thread-136934] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:53:35.686 [DEBUG] [Thread-136934] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:53:35.686 [DEBUG] [Thread-136934] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:53:35.686 [DEBUG] [Thread-136934] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:53:35.686 [DEBUG] [Thread-136934] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:53:35.686 [DEBUG] [Thread-136934] [transport.py] [_log()] Compression: none
2025-12-31T23:53:35.686 [DEBUG] [Thread-136934] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:53:35.702 [DEBUG] [Thread-136934] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:53:35.703 [DEBUG] [Thread-136934] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:53:35.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T23:53:35.704 [DEBUG] [Thread-136934] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T23:53:35.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:53:35.706 [DEBUG] [Thread-136934] [transport.py] [_log()] userauth is OK
2025-12-31T23:53:35.706 [DEBUG] [Thread-136934] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:53:35.706 [DEBUG] [Thread-136934] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:53:35.706 [DEBUG] [Thread-136934] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T23:53:35.706 [DEBUG] [Thread-136934] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:53:35.732 [INFO] [Thread-136934] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:53:35.732 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:53:36.375 [DEBUG] [Thread-136934] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:53:36.376 [DEBUG] [Thread-136934] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:53:36.376 [DEBUG] [Thread-136934] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T23:53:36.417 [DEBUG] [Thread-136934] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:53:36.417 [DEBUG] [Thread-136934] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:53:36.421 [DEBUG] [Thread-136934] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:53:36.433 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:53:36.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T23:53:36.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T23:53:36.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T23:53:36.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:53:36.445 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T23:53:36.445 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:53:36.445 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:53:36.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T23:53:36.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.911940 -999.00  +14.80   9.68     81  +11.50 1 2 1 2 1     0    0 2.57 -30.39 ZNE.. 15.0 9.7 190.7 19.1 15.8 -18.3 15.6 -16.9 15.5 -15.1 15.7 -16.4
2025-12-31T23:53:36.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T23:53:36.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T23:53:36.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.911940
2025-12-31T23:53:36.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T23:53:36.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T23:53:36.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T23:53:36.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T23:53:36.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T23:53:36.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T23:53:14', tmtdew=3.67, humidity=78.36, cloud=0.0, wind=15.69, temperature=14.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T23:53:14', seeing=1.15, atlas_timestamp='2025-12-31T21:53:11.616', atlas_cloud=2, atlas_rain=1, zp_data=[0.12875000000000014, 0.1542500000000011, 0.16825000000000045, 0.14349999999999952, 0.2705000000000002, 0.35325000000000095, -0.0065000000000008384, 0.21075000000000088, 0.12650000000000006, 0.4150000000000009, 0.3947499999999984, 0.9470000000000001, 0.5474999999999994, 0.023749999999999716, -1.125, -0.1144999999999996, 0.18024999999999913, 0.41849999999999987, 0.46749999999999936, nan, 0.29299999999999926, -0.6377500000000005, -1.7927499999999998, -0.05424999999999969, 0.18849999999999945, 0.3194999999999997, 0.8237500000000004, nan, -1.1500000000000004, -1.7439999999999998, -1.6674999999999986, 0.11350000000000193, 0.21274999999999977], zp_timestamp='2025-12-31T21:49:00')
2025-12-31T23:53:36.448 [DEBUG] [Thread-136934] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:53:36.531 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T23:53:36.544 [DEBUG] [Thread-136937] [transport.py] [_log()] starting thread (client mode): 0xb6bbdc30
2025-12-31T23:53:36.545 [DEBUG] [Thread-136937] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:53:36.560 [DEBUG] [Thread-136937] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T23:53:36.560 [INFO] [Thread-136937] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T23:53:36.567 [DEBUG] [Thread-136937] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:53:36.568 [DEBUG] [Thread-136937] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T23:53:36.568 [DEBUG] [Thread-136937] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:53:36.568 [DEBUG] [Thread-136937] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:53:36.568 [DEBUG] [Thread-136937] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:53:36.568 [DEBUG] [Thread-136937] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:53:36.568 [DEBUG] [Thread-136937] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:53:36.568 [DEBUG] [Thread-136937] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:53:36.568 [DEBUG] [Thread-136937] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:53:36.568 [DEBUG] [Thread-136937] [transport.py] [_log()] client lang: <none>
2025-12-31T23:53:36.568 [DEBUG] [Thread-136937] [transport.py] [_log()] server lang: <none>
2025-12-31T23:53:36.568 [DEBUG] [Thread-136937] [transport.py] [_log()] kex follows: False
2025-12-31T23:53:36.568 [DEBUG] [Thread-136937] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:53:36.568 [DEBUG] [Thread-136937] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:53:36.568 [DEBUG] [Thread-136937] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:53:36.568 [DEBUG] [Thread-136937] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:53:36.568 [DEBUG] [Thread-136937] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:53:36.569 [DEBUG] [Thread-136937] [transport.py] [_log()] Compression: none
2025-12-31T23:53:36.569 [DEBUG] [Thread-136937] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:53:36.628 [DEBUG] [Thread-136937] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:53:36.628 [DEBUG] [Thread-136937] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:53:36.629 [DEBUG] [Thread-136937] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T23:53:36.629 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T23:53:36.629 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:53:36.688 [DEBUG] [Thread-136937] [transport.py] [_log()] userauth is OK
2025-12-31T23:53:36.688 [DEBUG] [Thread-136937] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:53:36.688 [DEBUG] [Thread-136937] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:53:36.688 [DEBUG] [Thread-136937] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T23:53:36.689 [DEBUG] [Thread-136937] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:53:36.709 [INFO] [Thread-136937] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:53:36.709 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T23:53:36.710 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:53:37.561 [DEBUG] [Thread-136937] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:53:37.561 [DEBUG] [Thread-136937] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:53:37.609 [DEBUG] [Thread-136937] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:53:37.609 [DEBUG] [Thread-136937] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:53:37.618 [DEBUG] [Thread-136937] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:53:37.628 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:53:37.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T23:53:37.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T23:53:37.646 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:53:37.647 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:53:37.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:53:37.656 [DEBUG] [Thread-136937] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:53:48.276 [DEBUG] [Thread-136939 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:53:53.927 [DEBUG] [Thread-136940 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:54:03.313 [DEBUG] [Thread-136941 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:54:07.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T23:54:07.677 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T23:54:07.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-12-31T23:54:08.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 23, 53, 46), 3.73, 78.33, 0.0, 17.26, 14.72, 0, 0, 0, 2, 0, 0),)
2025-12-31T23:54:08.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 23:53:46
2025-12-31T23:54:08.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T23:54:08.715 [DEBUG] [Thread-136942] [transport.py] [_log()] starting thread (client mode): 0xb95f1f60
2025-12-31T23:54:08.715 [DEBUG] [Thread-136942] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:54:08.734 [DEBUG] [Thread-136942] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T23:54:08.734 [INFO] [Thread-136942] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T23:54:08.738 [DEBUG] [Thread-136942] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:54:08.738 [DEBUG] [Thread-136942] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T23:54:08.738 [DEBUG] [Thread-136942] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:54:08.738 [DEBUG] [Thread-136942] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:54:08.738 [DEBUG] [Thread-136942] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:54:08.738 [DEBUG] [Thread-136942] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:54:08.738 [DEBUG] [Thread-136942] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:54:08.738 [DEBUG] [Thread-136942] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:54:08.738 [DEBUG] [Thread-136942] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:54:08.738 [DEBUG] [Thread-136942] [transport.py] [_log()] client lang: <none>
2025-12-31T23:54:08.738 [DEBUG] [Thread-136942] [transport.py] [_log()] server lang: <none>
2025-12-31T23:54:08.738 [DEBUG] [Thread-136942] [transport.py] [_log()] kex follows: False
2025-12-31T23:54:08.738 [DEBUG] [Thread-136942] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:54:08.738 [DEBUG] [Thread-136942] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:54:08.738 [DEBUG] [Thread-136942] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:54:08.738 [DEBUG] [Thread-136942] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:54:08.738 [DEBUG] [Thread-136942] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:54:08.738 [DEBUG] [Thread-136942] [transport.py] [_log()] Compression: none
2025-12-31T23:54:08.738 [DEBUG] [Thread-136942] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:54:08.754 [DEBUG] [Thread-136942] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:54:08.754 [DEBUG] [Thread-136942] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:54:08.755 [DEBUG] [Thread-136942] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T23:54:08.755 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T23:54:08.756 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:54:08.757 [DEBUG] [Thread-136942] [transport.py] [_log()] userauth is OK
2025-12-31T23:54:08.757 [DEBUG] [Thread-136942] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:54:08.757 [DEBUG] [Thread-136942] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:54:08.757 [DEBUG] [Thread-136942] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T23:54:08.757 [DEBUG] [Thread-136942] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:54:08.780 [INFO] [Thread-136942] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:54:08.781 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:54:09.420 [DEBUG] [Thread-136942] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:54:09.420 [DEBUG] [Thread-136942] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:54:09.420 [DEBUG] [Thread-136942] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T23:54:09.461 [DEBUG] [Thread-136942] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:54:09.461 [DEBUG] [Thread-136942] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:54:09.464 [DEBUG] [Thread-136942] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:54:09.475 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:54:09.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T23:54:09.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T23:54:09.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T23:54:09.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:54:09.488 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T23:54:09.488 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:54:09.488 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:54:09.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T23:54:09.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.912288 -999.00  +14.80  14.28     81  +11.50 1 2 1 2 1     0    0 2.48 -31.65 ZNE.. 11.9 14.3 207.6 19.8 15.7 -17.7 15.6 -16.6 15.4 -14.8 15.7 -16.1
2025-12-31T23:54:09.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T23:54:09.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T23:54:09.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.912288
2025-12-31T23:54:09.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T23:54:09.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T23:54:09.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T23:54:09.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T23:54:09.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T23:54:09.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T23:53:46', tmtdew=3.73, humidity=78.33, cloud=0.0, wind=17.26, temperature=14.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T23:53:46', seeing=1.31, atlas_timestamp='2025-12-31T21:53:41.683', atlas_cloud=2, atlas_rain=1, zp_data=[0.12875000000000014, 0.1542500000000011, 0.16825000000000045, 0.14349999999999952, 0.2705000000000002, 0.35325000000000095, -0.0065000000000008384, 0.21075000000000088, 0.12650000000000006, 0.4150000000000009, 0.3947499999999984, 0.9470000000000001, 0.5474999999999994, 0.023749999999999716, -1.125, -0.1144999999999996, 0.18024999999999913, 0.41849999999999987, 0.46749999999999936, nan, 0.29299999999999926, -0.6377500000000005, -1.7927499999999998, -0.05424999999999969, 0.18849999999999945, 0.3194999999999997, 0.8237500000000004, nan, -1.1500000000000004, -1.7439999999999998, -1.6674999999999986, 0.11350000000000193, 0.21274999999999977], zp_timestamp='2025-12-31T21:49:00')
2025-12-31T23:54:09.491 [DEBUG] [Thread-136942] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:54:09.574 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T23:54:09.592 [DEBUG] [Thread-136945] [transport.py] [_log()] starting thread (client mode): 0xb95f0130
2025-12-31T23:54:09.592 [DEBUG] [Thread-136945] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:54:09.606 [DEBUG] [Thread-136945] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T23:54:09.607 [INFO] [Thread-136945] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T23:54:09.615 [DEBUG] [Thread-136945] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:54:09.615 [DEBUG] [Thread-136945] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T23:54:09.615 [DEBUG] [Thread-136945] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:54:09.615 [DEBUG] [Thread-136945] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:54:09.615 [DEBUG] [Thread-136945] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:54:09.615 [DEBUG] [Thread-136945] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:54:09.615 [DEBUG] [Thread-136945] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:54:09.615 [DEBUG] [Thread-136945] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:54:09.616 [DEBUG] [Thread-136945] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:54:09.616 [DEBUG] [Thread-136945] [transport.py] [_log()] client lang: <none>
2025-12-31T23:54:09.616 [DEBUG] [Thread-136945] [transport.py] [_log()] server lang: <none>
2025-12-31T23:54:09.616 [DEBUG] [Thread-136945] [transport.py] [_log()] kex follows: False
2025-12-31T23:54:09.616 [DEBUG] [Thread-136945] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:54:09.616 [DEBUG] [Thread-136945] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:54:09.616 [DEBUG] [Thread-136945] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:54:09.616 [DEBUG] [Thread-136945] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:54:09.616 [DEBUG] [Thread-136945] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:54:09.616 [DEBUG] [Thread-136945] [transport.py] [_log()] Compression: none
2025-12-31T23:54:09.616 [DEBUG] [Thread-136945] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:54:09.671 [DEBUG] [Thread-136945] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:54:09.671 [DEBUG] [Thread-136945] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:54:09.672 [DEBUG] [Thread-136945] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T23:54:09.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T23:54:09.673 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:54:09.730 [DEBUG] [Thread-136945] [transport.py] [_log()] userauth is OK
2025-12-31T23:54:09.730 [DEBUG] [Thread-136945] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:54:09.730 [DEBUG] [Thread-136945] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:54:09.730 [DEBUG] [Thread-136945] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T23:54:09.730 [DEBUG] [Thread-136945] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:54:09.749 [INFO] [Thread-136945] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:54:09.749 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T23:54:09.750 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:54:10.567 [DEBUG] [Thread-136945] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:54:10.567 [DEBUG] [Thread-136945] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:54:10.615 [DEBUG] [Thread-136945] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:54:10.615 [DEBUG] [Thread-136945] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:54:10.624 [DEBUG] [Thread-136945] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:54:10.634 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:54:10.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T23:54:10.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T23:54:10.652 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:54:10.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:54:10.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:54:10.660 [DEBUG] [Thread-136945] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:54:18.341 [DEBUG] [Thread-136947 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:54:18.494 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:54:22.558 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:54:25.632 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:54:31.481 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:54:31.483 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:54:32.027 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:54:33.398 [DEBUG] [Thread-136948 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:54:40.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T23:54:40.661 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T23:54:40.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T23:54:41.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 23, 54, 18), 3.72, 78.36, 0.0, 15.4, 14.72, 0, 0, 0, 2, 0, 0),)
2025-12-31T23:54:41.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 23:54:18
2025-12-31T23:54:41.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T23:54:41.677 [DEBUG] [Thread-136949] [transport.py] [_log()] starting thread (client mode): 0xb6ba18a0
2025-12-31T23:54:41.677 [DEBUG] [Thread-136949] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:54:41.696 [DEBUG] [Thread-136949] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T23:54:41.696 [INFO] [Thread-136949] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T23:54:41.699 [DEBUG] [Thread-136949] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:54:41.699 [DEBUG] [Thread-136949] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T23:54:41.699 [DEBUG] [Thread-136949] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:54:41.699 [DEBUG] [Thread-136949] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:54:41.699 [DEBUG] [Thread-136949] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:54:41.699 [DEBUG] [Thread-136949] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:54:41.699 [DEBUG] [Thread-136949] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:54:41.699 [DEBUG] [Thread-136949] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:54:41.699 [DEBUG] [Thread-136949] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:54:41.699 [DEBUG] [Thread-136949] [transport.py] [_log()] client lang: <none>
2025-12-31T23:54:41.699 [DEBUG] [Thread-136949] [transport.py] [_log()] server lang: <none>
2025-12-31T23:54:41.699 [DEBUG] [Thread-136949] [transport.py] [_log()] kex follows: False
2025-12-31T23:54:41.699 [DEBUG] [Thread-136949] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:54:41.699 [DEBUG] [Thread-136949] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:54:41.699 [DEBUG] [Thread-136949] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:54:41.699 [DEBUG] [Thread-136949] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:54:41.699 [DEBUG] [Thread-136949] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:54:41.699 [DEBUG] [Thread-136949] [transport.py] [_log()] Compression: none
2025-12-31T23:54:41.699 [DEBUG] [Thread-136949] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:54:41.715 [DEBUG] [Thread-136949] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:54:41.715 [DEBUG] [Thread-136949] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:54:41.715 [DEBUG] [Thread-136949] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T23:54:41.715 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T23:54:41.715 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:54:41.715 [DEBUG] [Thread-136949] [transport.py] [_log()] userauth is OK
2025-12-31T23:54:41.716 [DEBUG] [Thread-136949] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:54:41.716 [DEBUG] [Thread-136949] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:54:41.716 [DEBUG] [Thread-136949] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T23:54:41.716 [DEBUG] [Thread-136949] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:54:41.725 [INFO] [Thread-136949] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:54:41.726 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:54:42.412 [DEBUG] [Thread-136949] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:54:42.412 [DEBUG] [Thread-136949] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:54:42.412 [DEBUG] [Thread-136949] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T23:54:42.453 [DEBUG] [Thread-136949] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:54:42.453 [DEBUG] [Thread-136949] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:54:42.456 [DEBUG] [Thread-136949] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:54:42.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:54:42.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T23:54:42.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T23:54:42.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T23:54:42.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:54:42.472 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T23:54:42.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:54:42.472 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:54:42.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T23:54:42.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.912635 -999.00  +14.70  14.80     81  +11.50 1 2 1 2 1     0    0 2.64 -29.37 ZNE.. 11.5 14.8 205.6 18.1 15.7 -17.4 15.6 -16.5 15.4 -14.5 15.7 -15.7
2025-12-31T23:54:42.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T23:54:42.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T23:54:42.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.912635
2025-12-31T23:54:42.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T23:54:42.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T23:54:42.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T23:54:42.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T23:54:42.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T23:54:42.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T23:54:18', tmtdew=3.72, humidity=78.36, cloud=0.0, wind=15.4, temperature=14.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T23:54:18', seeing=1.21, atlas_timestamp='2025-12-31T21:54:11.664', atlas_cloud=2, atlas_rain=1, zp_data=[0.12875000000000014, 0.1542500000000011, 0.16825000000000045, 0.14349999999999952, 0.2705000000000002, 0.35325000000000095, -0.0065000000000008384, 0.21075000000000088, 0.12650000000000006, 0.4150000000000009, 0.3947499999999984, 0.9470000000000001, 0.5474999999999994, 0.023749999999999716, -1.125, -0.1144999999999996, 0.18024999999999913, 0.41849999999999987, 0.46749999999999936, nan, 0.29299999999999926, -0.6377500000000005, -1.7927499999999998, -0.05424999999999969, 0.18849999999999945, 0.3194999999999997, 0.8237500000000004, nan, -1.1500000000000004, -1.7439999999999998, -1.6674999999999986, 0.11350000000000193, 0.21274999999999977], zp_timestamp='2025-12-31T21:53:00')
2025-12-31T23:54:42.473 [DEBUG] [Thread-136949] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:54:42.548 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T23:54:42.562 [DEBUG] [Thread-136952] [transport.py] [_log()] starting thread (client mode): 0xb6ba3280
2025-12-31T23:54:42.562 [DEBUG] [Thread-136952] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:54:42.577 [DEBUG] [Thread-136952] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T23:54:42.577 [INFO] [Thread-136952] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T23:54:42.585 [DEBUG] [Thread-136952] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:54:42.585 [DEBUG] [Thread-136952] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T23:54:42.585 [DEBUG] [Thread-136952] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:54:42.585 [DEBUG] [Thread-136952] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:54:42.585 [DEBUG] [Thread-136952] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:54:42.585 [DEBUG] [Thread-136952] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:54:42.585 [DEBUG] [Thread-136952] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:54:42.585 [DEBUG] [Thread-136952] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:54:42.585 [DEBUG] [Thread-136952] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:54:42.585 [DEBUG] [Thread-136952] [transport.py] [_log()] client lang: <none>
2025-12-31T23:54:42.585 [DEBUG] [Thread-136952] [transport.py] [_log()] server lang: <none>
2025-12-31T23:54:42.585 [DEBUG] [Thread-136952] [transport.py] [_log()] kex follows: False
2025-12-31T23:54:42.585 [DEBUG] [Thread-136952] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:54:42.585 [DEBUG] [Thread-136952] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:54:42.585 [DEBUG] [Thread-136952] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:54:42.585 [DEBUG] [Thread-136952] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:54:42.585 [DEBUG] [Thread-136952] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:54:42.585 [DEBUG] [Thread-136952] [transport.py] [_log()] Compression: none
2025-12-31T23:54:42.585 [DEBUG] [Thread-136952] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:54:42.642 [DEBUG] [Thread-136952] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:54:42.642 [DEBUG] [Thread-136952] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:54:42.642 [DEBUG] [Thread-136952] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T23:54:42.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T23:54:42.643 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:54:42.699 [DEBUG] [Thread-136952] [transport.py] [_log()] userauth is OK
2025-12-31T23:54:42.699 [DEBUG] [Thread-136952] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:54:42.699 [DEBUG] [Thread-136952] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:54:42.699 [DEBUG] [Thread-136952] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T23:54:42.699 [DEBUG] [Thread-136952] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:54:42.713 [INFO] [Thread-136952] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:54:42.714 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T23:54:42.714 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:54:43.530 [DEBUG] [Thread-136952] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:54:43.530 [DEBUG] [Thread-136952] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:54:43.579 [DEBUG] [Thread-136952] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:54:43.579 [DEBUG] [Thread-136952] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:54:43.587 [DEBUG] [Thread-136952] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:54:43.596 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:54:43.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T23:54:43.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T23:54:43.612 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:54:43.612 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:54:43.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:54:43.621 [DEBUG] [Thread-136952] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:54:48.430 [DEBUG] [Thread-136954 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:54:54.007 [DEBUG] [Thread-136955 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:55:03.481 [DEBUG] [Thread-136956 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:55:13.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T23:55:13.621 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T23:55:13.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T23:55:14.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 23, 54, 50), 3.74, 78.25, 0.0, 15.51, 14.65, 0, 0, 0, 2, 0, 0),)
2025-12-31T23:55:14.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 23:54:50
2025-12-31T23:55:14.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T23:55:14.608 [DEBUG] [Thread-136957] [transport.py] [_log()] starting thread (client mode): 0xb95f1db0
2025-12-31T23:55:14.608 [DEBUG] [Thread-136957] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:55:14.627 [DEBUG] [Thread-136957] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T23:55:14.628 [INFO] [Thread-136957] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T23:55:14.631 [DEBUG] [Thread-136957] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:55:14.631 [DEBUG] [Thread-136957] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T23:55:14.631 [DEBUG] [Thread-136957] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:55:14.631 [DEBUG] [Thread-136957] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:55:14.631 [DEBUG] [Thread-136957] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:55:14.631 [DEBUG] [Thread-136957] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:55:14.631 [DEBUG] [Thread-136957] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:55:14.631 [DEBUG] [Thread-136957] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:55:14.631 [DEBUG] [Thread-136957] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:55:14.631 [DEBUG] [Thread-136957] [transport.py] [_log()] client lang: <none>
2025-12-31T23:55:14.631 [DEBUG] [Thread-136957] [transport.py] [_log()] server lang: <none>
2025-12-31T23:55:14.631 [DEBUG] [Thread-136957] [transport.py] [_log()] kex follows: False
2025-12-31T23:55:14.631 [DEBUG] [Thread-136957] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:55:14.631 [DEBUG] [Thread-136957] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:55:14.631 [DEBUG] [Thread-136957] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:55:14.631 [DEBUG] [Thread-136957] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:55:14.632 [DEBUG] [Thread-136957] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:55:14.632 [DEBUG] [Thread-136957] [transport.py] [_log()] Compression: none
2025-12-31T23:55:14.632 [DEBUG] [Thread-136957] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:55:14.648 [DEBUG] [Thread-136957] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:55:14.648 [DEBUG] [Thread-136957] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:55:14.649 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T23:55:14.649 [DEBUG] [Thread-136957] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T23:55:14.650 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:55:14.652 [DEBUG] [Thread-136957] [transport.py] [_log()] userauth is OK
2025-12-31T23:55:14.652 [DEBUG] [Thread-136957] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:55:14.652 [DEBUG] [Thread-136957] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:55:14.652 [DEBUG] [Thread-136957] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T23:55:14.652 [DEBUG] [Thread-136957] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:55:14.674 [INFO] [Thread-136957] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:55:14.675 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:55:18.518 [DEBUG] [Thread-136959 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:55:23.921 [DEBUG] [Thread-136957] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:55:23.921 [DEBUG] [Thread-136957] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:55:23.922 [DEBUG] [Thread-136957] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T23:55:23.963 [DEBUG] [Thread-136957] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:55:23.963 [DEBUG] [Thread-136957] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:55:23.965 [DEBUG] [Thread-136957] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:55:24.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:55:24.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T23:55:24.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T23:55:24.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T23:55:24.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:55:24.086 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T23:55:24.087 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:55:24.087 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:55:24.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T23:55:24.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.912982 -999.00  +14.70  15.05     81  +11.50 1 2 1 2 1     0    0 2.52 -29.74 ZNE.. 13.2 15.1 189.0 19.6 15.7 -17.1 15.6 -15.9 15.4 -14.4 15.7 -15.3
2025-12-31T23:55:24.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T23:55:24.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T23:55:24.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.912982
2025-12-31T23:55:24.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T23:55:24.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T23:55:24.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T23:55:24.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T23:55:24.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T23:55:24.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T23:54:50', tmtdew=3.74, humidity=78.25, cloud=0.0, wind=15.51, temperature=14.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T23:54:50', seeing=1.11, atlas_timestamp='2025-12-31T21:54:41.645', atlas_cloud=2, atlas_rain=1, zp_data=[0.12875000000000014, 0.1542500000000011, 0.16825000000000045, 0.14349999999999952, 0.2705000000000002, 0.35325000000000095, -0.0065000000000008384, 0.21075000000000088, 0.12650000000000006, 0.4150000000000009, 0.3947499999999984, 0.9470000000000001, 0.5474999999999994, 0.023749999999999716, -1.125, -0.1144999999999996, 0.18024999999999913, 0.41849999999999987, 0.46749999999999936, nan, 0.29299999999999926, -0.6377500000000005, -1.7927499999999998, -0.05424999999999969, 0.18849999999999945, 0.3194999999999997, 0.8237500000000004, nan, -1.1500000000000004, -1.7439999999999998, -1.6674999999999986, 0.11350000000000193, 0.21274999999999977], zp_timestamp='2025-12-31T21:53:00')
2025-12-31T23:55:24.088 [DEBUG] [Thread-136957] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:55:24.162 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T23:55:24.176 [DEBUG] [Thread-136961] [transport.py] [_log()] starting thread (client mode): 0xb95f0280
2025-12-31T23:55:24.176 [DEBUG] [Thread-136961] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:55:24.194 [DEBUG] [Thread-136961] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T23:55:24.194 [INFO] [Thread-136961] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T23:55:24.205 [DEBUG] [Thread-136961] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:55:24.205 [DEBUG] [Thread-136961] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T23:55:24.205 [DEBUG] [Thread-136961] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:55:24.205 [DEBUG] [Thread-136961] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:55:24.205 [DEBUG] [Thread-136961] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:55:24.205 [DEBUG] [Thread-136961] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:55:24.205 [DEBUG] [Thread-136961] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:55:24.205 [DEBUG] [Thread-136961] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:55:24.205 [DEBUG] [Thread-136961] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:55:24.205 [DEBUG] [Thread-136961] [transport.py] [_log()] client lang: <none>
2025-12-31T23:55:24.205 [DEBUG] [Thread-136961] [transport.py] [_log()] server lang: <none>
2025-12-31T23:55:24.205 [DEBUG] [Thread-136961] [transport.py] [_log()] kex follows: False
2025-12-31T23:55:24.205 [DEBUG] [Thread-136961] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:55:24.205 [DEBUG] [Thread-136961] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:55:24.205 [DEBUG] [Thread-136961] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:55:24.205 [DEBUG] [Thread-136961] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:55:24.205 [DEBUG] [Thread-136961] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:55:24.205 [DEBUG] [Thread-136961] [transport.py] [_log()] Compression: none
2025-12-31T23:55:24.205 [DEBUG] [Thread-136961] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:55:24.266 [DEBUG] [Thread-136961] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:55:24.266 [DEBUG] [Thread-136961] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:55:24.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T23:55:24.267 [DEBUG] [Thread-136961] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T23:55:24.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:55:24.327 [DEBUG] [Thread-136961] [transport.py] [_log()] userauth is OK
2025-12-31T23:55:24.327 [DEBUG] [Thread-136961] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:55:24.327 [DEBUG] [Thread-136961] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:55:24.327 [DEBUG] [Thread-136961] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T23:55:24.327 [DEBUG] [Thread-136961] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:55:24.345 [INFO] [Thread-136961] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:55:24.345 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T23:55:24.345 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:55:25.182 [DEBUG] [Thread-136961] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:55:25.182 [DEBUG] [Thread-136961] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:55:25.231 [DEBUG] [Thread-136961] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:55:25.231 [DEBUG] [Thread-136961] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:55:25.243 [DEBUG] [Thread-136961] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:55:25.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:55:25.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T23:55: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') -> 00000000
2025-12-31T23:55:25.268 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:55:25.268 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:55:25.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:55:25.276 [DEBUG] [Thread-136961] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:55:31.684 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:55:31.685 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:55:33.549 [DEBUG] [Thread-136963 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:55:48.600 [DEBUG] [Thread-136964 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:55:54.082 [DEBUG] [Thread-136965 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:55:55.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T23:55:55.296 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T23:55:55.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T23:55:56.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 23, 55, 22), 3.75, 78.18, 0.0, 13.32, 14.63, 0, 0, 0, 2, 0, 0),)
2025-12-31T23:55:56.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 23:55:22
2025-12-31T23:55:56.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T23:55:56.336 [DEBUG] [Thread-136966] [transport.py] [_log()] starting thread (client mode): 0xb6ba0310
2025-12-31T23:55:56.336 [DEBUG] [Thread-136966] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:55:56.355 [DEBUG] [Thread-136966] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T23:55:56.355 [INFO] [Thread-136966] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T23:55:56.358 [DEBUG] [Thread-136966] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:55:56.358 [DEBUG] [Thread-136966] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T23:55:56.359 [DEBUG] [Thread-136966] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:55:56.359 [DEBUG] [Thread-136966] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:55:56.359 [DEBUG] [Thread-136966] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:55:56.359 [DEBUG] [Thread-136966] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:55:56.359 [DEBUG] [Thread-136966] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:55:56.359 [DEBUG] [Thread-136966] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:55:56.359 [DEBUG] [Thread-136966] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:55:56.359 [DEBUG] [Thread-136966] [transport.py] [_log()] client lang: <none>
2025-12-31T23:55:56.359 [DEBUG] [Thread-136966] [transport.py] [_log()] server lang: <none>
2025-12-31T23:55:56.359 [DEBUG] [Thread-136966] [transport.py] [_log()] kex follows: False
2025-12-31T23:55:56.359 [DEBUG] [Thread-136966] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:55:56.359 [DEBUG] [Thread-136966] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:55:56.359 [DEBUG] [Thread-136966] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:55:56.359 [DEBUG] [Thread-136966] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:55:56.359 [DEBUG] [Thread-136966] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:55:56.359 [DEBUG] [Thread-136966] [transport.py] [_log()] Compression: none
2025-12-31T23:55:56.359 [DEBUG] [Thread-136966] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:55:56.374 [DEBUG] [Thread-136966] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:55:56.374 [DEBUG] [Thread-136966] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:55:56.374 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T23:55:56.374 [DEBUG] [Thread-136966] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T23:55:56.374 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:55:56.374 [DEBUG] [Thread-136966] [transport.py] [_log()] userauth is OK
2025-12-31T23:55:56.375 [DEBUG] [Thread-136966] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:55:56.375 [DEBUG] [Thread-136966] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:55:56.375 [DEBUG] [Thread-136966] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T23:55:56.375 [DEBUG] [Thread-136966] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:55:56.383 [INFO] [Thread-136966] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:55:56.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:55:57.044 [DEBUG] [Thread-136966] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:55:57.044 [DEBUG] [Thread-136966] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:55:57.044 [DEBUG] [Thread-136966] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T23:55:57.086 [DEBUG] [Thread-136966] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:55:57.086 [DEBUG] [Thread-136966] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:55:57.088 [DEBUG] [Thread-136966] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:55:57.100 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:55:57.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T23:55:57.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T23:55:57.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T23:55:57.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:55:57.110 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T23:55:57.110 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:55:57.110 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:55:57.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T23:55:57.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.913329 -999.00  +14.70  15.18     81  +11.50 1 2 1 2 1     0    0 2.67 -27.50 ZNE.. 12.4 15.2 197.2 18.0 15.7 -16.8 15.6 -15.9 15.5 -14.3 15.7 -15.3
2025-12-31T23:55:57.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T23:55:57.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T23:55:57.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.913329
2025-12-31T23:55:57.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T23:55:57.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T23:55:57.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T23:55:57.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T23:55:57.112 [DEBUG] [Thread-136966] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:55:57.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T23:55:57.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T23:55:22', tmtdew=3.75, humidity=78.18, cloud=0.0, wind=13.32, temperature=14.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T23:55:54', seeing=1.39, atlas_timestamp='2025-12-31T21:55:11.626', atlas_cloud=2, atlas_rain=1, zp_data=[0.12875000000000014, 0.1542500000000011, 0.16825000000000045, 0.14349999999999952, 0.2705000000000002, 0.35325000000000095, -0.0065000000000008384, 0.21075000000000088, 0.12650000000000006, 0.4150000000000009, 0.3947499999999984, 0.9470000000000001, 0.5474999999999994, 0.023749999999999716, -1.125, -0.1144999999999996, 0.18024999999999913, 0.41849999999999987, 0.46749999999999936, nan, 0.29299999999999926, -0.6377500000000005, -1.7927499999999998, -0.05424999999999969, 0.18849999999999945, 0.3194999999999997, 0.8237500000000004, nan, -1.1500000000000004, -1.7439999999999998, -1.6674999999999986, 0.11350000000000193, 0.21274999999999977], zp_timestamp='2025-12-31T21:53:00')
2025-12-31T23:55:57.190 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T23:55:57.202 [DEBUG] [Thread-136969] [transport.py] [_log()] starting thread (client mode): 0xb95f0130
2025-12-31T23:55:57.202 [DEBUG] [Thread-136969] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:55:57.218 [DEBUG] [Thread-136969] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T23:55:57.218 [INFO] [Thread-136969] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T23:55:57.225 [DEBUG] [Thread-136969] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:55:57.226 [DEBUG] [Thread-136969] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T23:55:57.226 [DEBUG] [Thread-136969] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:55:57.226 [DEBUG] [Thread-136969] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:55:57.226 [DEBUG] [Thread-136969] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:55:57.226 [DEBUG] [Thread-136969] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:55:57.226 [DEBUG] [Thread-136969] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:55:57.226 [DEBUG] [Thread-136969] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:55:57.226 [DEBUG] [Thread-136969] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:55:57.226 [DEBUG] [Thread-136969] [transport.py] [_log()] client lang: <none>
2025-12-31T23:55:57.226 [DEBUG] [Thread-136969] [transport.py] [_log()] server lang: <none>
2025-12-31T23:55:57.226 [DEBUG] [Thread-136969] [transport.py] [_log()] kex follows: False
2025-12-31T23:55:57.226 [DEBUG] [Thread-136969] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:55:57.226 [DEBUG] [Thread-136969] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:55:57.226 [DEBUG] [Thread-136969] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:55:57.226 [DEBUG] [Thread-136969] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:55:57.226 [DEBUG] [Thread-136969] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:55:57.226 [DEBUG] [Thread-136969] [transport.py] [_log()] Compression: none
2025-12-31T23:55:57.226 [DEBUG] [Thread-136969] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:55:57.284 [DEBUG] [Thread-136969] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:55:57.285 [DEBUG] [Thread-136969] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:55:57.285 [DEBUG] [Thread-136969] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T23:55:57.286 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T23:55:57.286 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:55:57.340 [DEBUG] [Thread-136969] [transport.py] [_log()] userauth is OK
2025-12-31T23:55:57.340 [DEBUG] [Thread-136969] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:55:57.340 [DEBUG] [Thread-136969] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:55:57.340 [DEBUG] [Thread-136969] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T23:55:57.340 [DEBUG] [Thread-136969] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:55:57.359 [INFO] [Thread-136969] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:55:57.360 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T23:55:57.360 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:55:58.207 [DEBUG] [Thread-136969] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:55:58.208 [DEBUG] [Thread-136969] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:55:58.256 [DEBUG] [Thread-136969] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:55:58.256 [DEBUG] [Thread-136969] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:55:58.265 [DEBUG] [Thread-136969] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:55:58.274 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:55:58.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T23:55:58.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T23:55:58.293 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:55:58.293 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:55:58.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:55:58.302 [DEBUG] [Thread-136969] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:56:03.631 [DEBUG] [Thread-136971 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:56:18.669 [DEBUG] [Thread-136972 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:56:28.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T23:56:28.324 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T23:56:28.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T23:56:29.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 23, 55, 54), 3.72, 78.13, 0.0, 16.9, 14.62, 0, 0, 0, 2, 0, 0),)
2025-12-31T23:56:29.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 23:55:54
2025-12-31T23:56:29.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T23:56:29.351 [DEBUG] [Thread-136973] [transport.py] [_log()] starting thread (client mode): 0xb6ba1300
2025-12-31T23:56:29.351 [DEBUG] [Thread-136973] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:56:29.371 [DEBUG] [Thread-136973] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T23:56:29.371 [INFO] [Thread-136973] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T23:56:29.375 [DEBUG] [Thread-136973] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:56:29.375 [DEBUG] [Thread-136973] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T23:56:29.375 [DEBUG] [Thread-136973] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:56:29.375 [DEBUG] [Thread-136973] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:56:29.375 [DEBUG] [Thread-136973] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:56:29.375 [DEBUG] [Thread-136973] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:56:29.375 [DEBUG] [Thread-136973] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:56:29.375 [DEBUG] [Thread-136973] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:56:29.375 [DEBUG] [Thread-136973] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:56:29.375 [DEBUG] [Thread-136973] [transport.py] [_log()] client lang: <none>
2025-12-31T23:56:29.375 [DEBUG] [Thread-136973] [transport.py] [_log()] server lang: <none>
2025-12-31T23:56:29.375 [DEBUG] [Thread-136973] [transport.py] [_log()] kex follows: False
2025-12-31T23:56:29.375 [DEBUG] [Thread-136973] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:56:29.375 [DEBUG] [Thread-136973] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:56:29.375 [DEBUG] [Thread-136973] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:56:29.375 [DEBUG] [Thread-136973] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:56:29.375 [DEBUG] [Thread-136973] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:56:29.375 [DEBUG] [Thread-136973] [transport.py] [_log()] Compression: none
2025-12-31T23:56:29.375 [DEBUG] [Thread-136973] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:56:29.390 [DEBUG] [Thread-136973] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:56:29.391 [DEBUG] [Thread-136973] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:56:29.391 [DEBUG] [Thread-136973] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T23:56:29.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T23:56:29.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:56:29.392 [DEBUG] [Thread-136973] [transport.py] [_log()] userauth is OK
2025-12-31T23:56:29.392 [DEBUG] [Thread-136973] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:56:29.392 [DEBUG] [Thread-136973] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:56:29.392 [DEBUG] [Thread-136973] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T23:56:29.392 [DEBUG] [Thread-136973] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:56:29.421 [INFO] [Thread-136973] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:56:29.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:56:30.195 [DEBUG] [Thread-136973] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:56:30.195 [DEBUG] [Thread-136973] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:56:30.195 [DEBUG] [Thread-136973] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T23:56:30.236 [DEBUG] [Thread-136973] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:56:30.236 [DEBUG] [Thread-136973] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:56:30.240 [DEBUG] [Thread-136973] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:56:30.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:56:30.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T23:56:30.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T23:56:30.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T23:56:30.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:56:30.264 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T23:56:30.264 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:56:30.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:56:30.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T23:56:30.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.913677 -999.00  +14.70  14.95     81  +11.50 1 2 1 2 1     0    0 2.72 -26.50 ZNE.. 15.2 14.9 197.6 22.5 15.7 -16.5 15.6 -15.9 15.4 -14.1 15.8 -15.1
2025-12-31T23:56:30.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T23:56:30.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T23:56:30.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.913677
2025-12-31T23:56:30.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T23:56:30.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T23:56:30.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T23:56:30.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T23:56:30.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T23:56:30.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T23:55:54', tmtdew=3.72, humidity=78.13, cloud=0.0, wind=16.9, temperature=14.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T23:56:27', seeing=1.39, atlas_timestamp='2025-12-31T21:55:41.693', atlas_cloud=2, atlas_rain=1, zp_data=[0.12875000000000014, 0.1542500000000011, 0.16825000000000045, 0.14349999999999952, 0.2705000000000002, 0.35325000000000095, -0.0065000000000008384, 0.21075000000000088, 0.12650000000000006, 0.4150000000000009, 0.3947499999999984, 0.9470000000000001, 0.5474999999999994, 0.023749999999999716, -1.125, -0.1144999999999996, 0.18024999999999913, 0.41849999999999987, 0.46749999999999936, nan, 0.29299999999999926, -0.6377500000000005, -1.7927499999999998, -0.05424999999999969, 0.18849999999999945, 0.3194999999999997, 0.8237500000000004, nan, -1.1500000000000004, -1.7439999999999998, -1.6674999999999986, 0.11350000000000193, 0.21274999999999977], zp_timestamp='2025-12-31T21:53:00')
2025-12-31T23:56:30.267 [DEBUG] [Thread-136973] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:56:30.347 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T23:56:30.362 [DEBUG] [Thread-136976] [transport.py] [_log()] starting thread (client mode): 0xb6ba3850
2025-12-31T23:56:30.362 [DEBUG] [Thread-136976] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:56:30.378 [DEBUG] [Thread-136976] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T23:56:30.378 [INFO] [Thread-136976] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T23:56:30.386 [DEBUG] [Thread-136976] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:56:30.386 [DEBUG] [Thread-136976] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T23:56:30.386 [DEBUG] [Thread-136976] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:56:30.387 [DEBUG] [Thread-136976] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:56:30.387 [DEBUG] [Thread-136976] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:56:30.387 [DEBUG] [Thread-136976] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:56:30.387 [DEBUG] [Thread-136976] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:56:30.387 [DEBUG] [Thread-136976] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:56:30.387 [DEBUG] [Thread-136976] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:56:30.387 [DEBUG] [Thread-136976] [transport.py] [_log()] client lang: <none>
2025-12-31T23:56:30.387 [DEBUG] [Thread-136976] [transport.py] [_log()] server lang: <none>
2025-12-31T23:56:30.387 [DEBUG] [Thread-136976] [transport.py] [_log()] kex follows: False
2025-12-31T23:56:30.387 [DEBUG] [Thread-136976] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:56:30.387 [DEBUG] [Thread-136976] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:56:30.387 [DEBUG] [Thread-136976] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:56:30.387 [DEBUG] [Thread-136976] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:56:30.387 [DEBUG] [Thread-136976] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:56:30.388 [DEBUG] [Thread-136976] [transport.py] [_log()] Compression: none
2025-12-31T23:56:30.388 [DEBUG] [Thread-136976] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:56:30.444 [DEBUG] [Thread-136976] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:56:30.445 [DEBUG] [Thread-136976] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:56:30.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T23:56:30.446 [DEBUG] [Thread-136976] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T23:56:30.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:56:30.504 [DEBUG] [Thread-136976] [transport.py] [_log()] userauth is OK
2025-12-31T23:56:30.505 [DEBUG] [Thread-136976] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:56:30.505 [DEBUG] [Thread-136976] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:56:30.505 [DEBUG] [Thread-136976] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T23:56:30.505 [DEBUG] [Thread-136976] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:56:30.531 [INFO] [Thread-136976] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:56:30.532 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T23:56:30.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:56:31.360 [DEBUG] [Thread-136976] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:56:31.360 [DEBUG] [Thread-136976] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:56:31.408 [DEBUG] [Thread-136976] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:56:31.408 [DEBUG] [Thread-136976] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:56:31.421 [DEBUG] [Thread-136976] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:56:31.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:56:31.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T23:56:31.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T23:56:31.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:56:31.453 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:56:31.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:56:31.462 [DEBUG] [Thread-136976] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:56:31.886 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:56:31.887 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:56:33.705 [DEBUG] [Thread-136978 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:56:48.755 [DEBUG] [Thread-136979 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:56:54.169 [DEBUG] [Thread-136980 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:57:01.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T23:57:01.467 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T23:57:01.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T23:57:02.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 23, 56, 59), 3.69, 78.27, 0.0, 20.79, 14.63, 0, 0, 0, 2, 0, 0),)
2025-12-31T23:57:02.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 23:56:59
2025-12-31T23:57:02.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T23:57:02.458 [DEBUG] [Thread-136981] [transport.py] [_log()] starting thread (client mode): 0xb95f0130
2025-12-31T23:57:02.459 [DEBUG] [Thread-136981] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:57:02.472 [DEBUG] [Thread-136981] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T23:57:02.472 [INFO] [Thread-136981] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T23:57:02.475 [DEBUG] [Thread-136981] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:57:02.475 [DEBUG] [Thread-136981] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T23:57:02.475 [DEBUG] [Thread-136981] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:57:02.475 [DEBUG] [Thread-136981] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:57:02.475 [DEBUG] [Thread-136981] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:57:02.475 [DEBUG] [Thread-136981] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:57:02.475 [DEBUG] [Thread-136981] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:57:02.475 [DEBUG] [Thread-136981] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:57:02.475 [DEBUG] [Thread-136981] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:57:02.476 [DEBUG] [Thread-136981] [transport.py] [_log()] client lang: <none>
2025-12-31T23:57:02.476 [DEBUG] [Thread-136981] [transport.py] [_log()] server lang: <none>
2025-12-31T23:57:02.476 [DEBUG] [Thread-136981] [transport.py] [_log()] kex follows: False
2025-12-31T23:57:02.476 [DEBUG] [Thread-136981] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:57:02.476 [DEBUG] [Thread-136981] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:57:02.476 [DEBUG] [Thread-136981] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:57:02.476 [DEBUG] [Thread-136981] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:57:02.476 [DEBUG] [Thread-136981] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:57:02.476 [DEBUG] [Thread-136981] [transport.py] [_log()] Compression: none
2025-12-31T23:57:02.476 [DEBUG] [Thread-136981] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:57:02.492 [DEBUG] [Thread-136981] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:57:02.493 [DEBUG] [Thread-136981] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:57:02.493 [DEBUG] [Thread-136981] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T23:57:02.493 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T23:57:02.494 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:57:02.495 [DEBUG] [Thread-136981] [transport.py] [_log()] userauth is OK
2025-12-31T23:57:02.495 [DEBUG] [Thread-136981] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:57:02.495 [DEBUG] [Thread-136981] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:57:02.495 [DEBUG] [Thread-136981] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T23:57:02.495 [DEBUG] [Thread-136981] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:57:02.513 [INFO] [Thread-136981] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:57:02.514 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:57:03.121 [DEBUG] [Thread-136981] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:57:03.121 [DEBUG] [Thread-136981] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:57:03.121 [DEBUG] [Thread-136981] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T23:57:03.163 [DEBUG] [Thread-136981] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:57:03.163 [DEBUG] [Thread-136981] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:57:03.166 [DEBUG] [Thread-136981] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:57:03.180 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:57:03.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T23:57:03.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T23:57:03.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T23:57:03.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:57:03.189 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T23:57:03.189 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:57:03.190 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:57:03.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T23:57:03.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.914024 -999.00  +14.70  15.54     81  +11.50 1 2 1 2 1     0    0 2.63 -27.00 zNEs. 16.8 15.5 195.6 19.1 15.7 -16.3 15.6 -15.8 15.4 -14.0 15.7 -15.1
2025-12-31T23:57:03.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T23:57:03.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T23:57:03.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.914024
2025-12-31T23:57:03.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T23:57:03.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T23:57:03.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T23:57:03.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T23:57:03.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T23:57:03.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T23:56:59', tmtdew=3.69, humidity=78.27, cloud=0.0, wind=20.79, temperature=14.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T23:56:59', seeing=1.56, atlas_timestamp='2025-12-31T21:56:11.674', atlas_cloud=2, atlas_rain=1, zp_data=[0.12875000000000014, 0.1542500000000011, 0.16825000000000045, 0.14349999999999952, 0.2705000000000002, 0.35325000000000095, -0.0065000000000008384, 0.21075000000000088, 0.12650000000000006, 0.4150000000000009, 0.3947499999999984, 0.9470000000000001, 0.5474999999999994, 0.023749999999999716, -1.125, -0.1144999999999996, 0.18024999999999913, 0.41849999999999987, 0.46749999999999936, nan, 0.29299999999999926, -0.6377500000000005, -1.7927499999999998, -0.05424999999999969, 0.18849999999999945, 0.3194999999999997, 0.8237500000000004, nan, -1.1500000000000004, -1.7439999999999998, -1.6674999999999986, 0.11350000000000193, 0.21274999999999977], zp_timestamp='2025-12-31T21:53:00')
2025-12-31T23:57:03.192 [DEBUG] [Thread-136981] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:57:03.275 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T23:57:03.288 [DEBUG] [Thread-136984] [transport.py] [_log()] starting thread (client mode): 0xb95f3ca0
2025-12-31T23:57:03.288 [DEBUG] [Thread-136984] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:57:03.302 [DEBUG] [Thread-136984] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T23:57:03.303 [INFO] [Thread-136984] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T23:57:03.310 [DEBUG] [Thread-136984] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:57:03.311 [DEBUG] [Thread-136984] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T23:57:03.311 [DEBUG] [Thread-136984] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:57:03.311 [DEBUG] [Thread-136984] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:57:03.311 [DEBUG] [Thread-136984] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:57:03.311 [DEBUG] [Thread-136984] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:57:03.311 [DEBUG] [Thread-136984] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:57:03.311 [DEBUG] [Thread-136984] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:57:03.311 [DEBUG] [Thread-136984] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:57:03.311 [DEBUG] [Thread-136984] [transport.py] [_log()] client lang: <none>
2025-12-31T23:57:03.311 [DEBUG] [Thread-136984] [transport.py] [_log()] server lang: <none>
2025-12-31T23:57:03.311 [DEBUG] [Thread-136984] [transport.py] [_log()] kex follows: False
2025-12-31T23:57:03.311 [DEBUG] [Thread-136984] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:57:03.312 [DEBUG] [Thread-136984] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:57:03.312 [DEBUG] [Thread-136984] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:57:03.312 [DEBUG] [Thread-136984] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:57:03.312 [DEBUG] [Thread-136984] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:57:03.312 [DEBUG] [Thread-136984] [transport.py] [_log()] Compression: none
2025-12-31T23:57:03.312 [DEBUG] [Thread-136984] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:57:03.370 [DEBUG] [Thread-136984] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:57:03.371 [DEBUG] [Thread-136984] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:57:03.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T23:57:03.372 [DEBUG] [Thread-136984] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T23:57:03.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:57:03.428 [DEBUG] [Thread-136984] [transport.py] [_log()] userauth is OK
2025-12-31T23:57:03.428 [DEBUG] [Thread-136984] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:57:03.428 [DEBUG] [Thread-136984] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:57:03.429 [DEBUG] [Thread-136984] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T23:57:03.429 [DEBUG] [Thread-136984] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:57:03.454 [INFO] [Thread-136984] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:57:03.455 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T23:57:03.455 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:57:03.792 [DEBUG] [Thread-136986 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:57:04.333 [DEBUG] [Thread-136984] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:57:04.334 [DEBUG] [Thread-136984] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:57:04.381 [DEBUG] [Thread-136984] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:57:04.381 [DEBUG] [Thread-136984] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:57:04.391 [DEBUG] [Thread-136984] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:57:04.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:57:04.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T23:57:04.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T23:57:04.418 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:57:04.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:57:04.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:57:04.427 [DEBUG] [Thread-136984] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:57:18.843 [DEBUG] [Thread-136987 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:57:32.090 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:57:32.091 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:57:33.874 [DEBUG] [Thread-136988 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:57:34.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T23:57:34.450 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T23:57:34.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T23:57:35.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 23, 57, 31), 3.68, 78.3, 0.0, 20.1, 14.6, 0, 0, 0, 2, 0, 0),)
2025-12-31T23:57:35.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 23:57:31
2025-12-31T23:57:35.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T23:57:35.425 [DEBUG] [Thread-136989] [transport.py] [_log()] starting thread (client mode): 0xb6ba2530
2025-12-31T23:57:35.426 [DEBUG] [Thread-136989] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:57:35.440 [DEBUG] [Thread-136989] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T23:57:35.440 [INFO] [Thread-136989] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T23:57:35.443 [DEBUG] [Thread-136989] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:57:35.443 [DEBUG] [Thread-136989] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T23:57:35.443 [DEBUG] [Thread-136989] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:57:35.443 [DEBUG] [Thread-136989] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:57:35.443 [DEBUG] [Thread-136989] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:57:35.443 [DEBUG] [Thread-136989] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:57:35.443 [DEBUG] [Thread-136989] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:57:35.443 [DEBUG] [Thread-136989] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:57:35.443 [DEBUG] [Thread-136989] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:57:35.443 [DEBUG] [Thread-136989] [transport.py] [_log()] client lang: <none>
2025-12-31T23:57:35.443 [DEBUG] [Thread-136989] [transport.py] [_log()] server lang: <none>
2025-12-31T23:57:35.443 [DEBUG] [Thread-136989] [transport.py] [_log()] kex follows: False
2025-12-31T23:57:35.443 [DEBUG] [Thread-136989] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:57:35.443 [DEBUG] [Thread-136989] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:57:35.443 [DEBUG] [Thread-136989] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:57:35.443 [DEBUG] [Thread-136989] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:57:35.443 [DEBUG] [Thread-136989] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:57:35.443 [DEBUG] [Thread-136989] [transport.py] [_log()] Compression: none
2025-12-31T23:57:35.443 [DEBUG] [Thread-136989] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:57:35.457 [DEBUG] [Thread-136989] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:57:35.458 [DEBUG] [Thread-136989] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:57:35.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T23:57:35.458 [DEBUG] [Thread-136989] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T23:57:35.459 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:57:35.460 [DEBUG] [Thread-136989] [transport.py] [_log()] userauth is OK
2025-12-31T23:57:35.460 [DEBUG] [Thread-136989] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:57:35.460 [DEBUG] [Thread-136989] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:57:35.460 [DEBUG] [Thread-136989] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T23:57:35.461 [DEBUG] [Thread-136989] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:57:35.481 [INFO] [Thread-136989] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:57:35.482 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:57:36.301 [DEBUG] [Thread-136989] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:57:36.302 [DEBUG] [Thread-136989] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:57:36.302 [DEBUG] [Thread-136989] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T23:57:36.343 [DEBUG] [Thread-136989] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:57:36.343 [DEBUG] [Thread-136989] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:57:36.345 [DEBUG] [Thread-136989] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:57:36.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:57:36.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T23:57:36.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T23:57:36.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T23:57:36.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:57:36.366 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T23:57:36.366 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:57:36.366 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:57:36.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T23:57:36.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.914718 -999.00  +14.70  14.77     81  +11.50 1 2 1 2 1     0    0 2.57 -25.30 zNE.. 13.2 14.8 195.4 17.5 15.7 -15.9 15.6 -15.5 15.4 -14.1 15.7 -15.0
2025-12-31T23:57:36.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T23:57:36.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T23:57:36.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.914718
2025-12-31T23:57:36.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T23:57:36.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T23:57:36.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T23:57:36.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T23:57:36.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T23:57:36.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T23:57:31', tmtdew=3.68, humidity=78.3, cloud=0.0, wind=20.1, temperature=14.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T23:57:31', seeing=1.26, atlas_timestamp='2025-12-31T21:57:11.635', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2025-12-31T23:57:36.368 [DEBUG] [Thread-136989] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:57:36.474 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T23:57:36.486 [DEBUG] [Thread-136992] [transport.py] [_log()] starting thread (client mode): 0xb6ba15d0
2025-12-31T23:57:36.486 [DEBUG] [Thread-136992] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:57:36.506 [DEBUG] [Thread-136992] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T23:57:36.507 [INFO] [Thread-136992] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T23:57:36.514 [DEBUG] [Thread-136992] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:57:36.515 [DEBUG] [Thread-136992] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T23:57:36.515 [DEBUG] [Thread-136992] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:57:36.515 [DEBUG] [Thread-136992] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:57:36.515 [DEBUG] [Thread-136992] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:57:36.515 [DEBUG] [Thread-136992] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:57:36.515 [DEBUG] [Thread-136992] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:57:36.515 [DEBUG] [Thread-136992] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:57:36.515 [DEBUG] [Thread-136992] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:57:36.515 [DEBUG] [Thread-136992] [transport.py] [_log()] client lang: <none>
2025-12-31T23:57:36.515 [DEBUG] [Thread-136992] [transport.py] [_log()] server lang: <none>
2025-12-31T23:57:36.515 [DEBUG] [Thread-136992] [transport.py] [_log()] kex follows: False
2025-12-31T23:57:36.515 [DEBUG] [Thread-136992] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:57:36.515 [DEBUG] [Thread-136992] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:57:36.515 [DEBUG] [Thread-136992] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:57:36.516 [DEBUG] [Thread-136992] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:57:36.516 [DEBUG] [Thread-136992] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:57:36.516 [DEBUG] [Thread-136992] [transport.py] [_log()] Compression: none
2025-12-31T23:57:36.516 [DEBUG] [Thread-136992] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:57:36.571 [DEBUG] [Thread-136992] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:57:36.572 [DEBUG] [Thread-136992] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:57:36.573 [DEBUG] [Thread-136992] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T23:57:36.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T23:57:36.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:57:36.630 [DEBUG] [Thread-136992] [transport.py] [_log()] userauth is OK
2025-12-31T23:57:36.631 [DEBUG] [Thread-136992] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:57:36.631 [DEBUG] [Thread-136992] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:57:36.631 [DEBUG] [Thread-136992] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T23:57:36.631 [DEBUG] [Thread-136992] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:57:36.650 [INFO] [Thread-136992] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:57:36.651 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T23:57:36.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:57:37.544 [DEBUG] [Thread-136992] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:57:37.544 [DEBUG] [Thread-136992] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:57:37.597 [DEBUG] [Thread-136992] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:57:37.597 [DEBUG] [Thread-136992] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:57:37.609 [DEBUG] [Thread-136992] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:57:37.623 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:57:37.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T23:57:37.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T23:57:37.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:57:37.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:57:37.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:57:37.660 [DEBUG] [Thread-136992] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:57:48.914 [DEBUG] [Thread-136994 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:57:54.243 [DEBUG] [Thread-136995 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:58:03.964 [DEBUG] [Thread-136996 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:58:07.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T23:58:07.672 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T23:58:07.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T23:58:08.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 23, 58, 3), 3.68, 78.33, 0.0, 20.43, 14.65, 0, 0, 0, 2, 0, 0),)
2025-12-31T23:58:08.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 23:58:03
2025-12-31T23:58:08.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T23:58:08.638 [DEBUG] [Thread-136997] [transport.py] [_log()] starting thread (client mode): 0xb1747b80
2025-12-31T23:58:08.638 [DEBUG] [Thread-136997] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:58:08.659 [DEBUG] [Thread-136997] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T23:58:08.659 [INFO] [Thread-136997] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T23:58:08.662 [DEBUG] [Thread-136997] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:58:08.662 [DEBUG] [Thread-136997] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T23:58:08.662 [DEBUG] [Thread-136997] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:58:08.662 [DEBUG] [Thread-136997] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:58:08.662 [DEBUG] [Thread-136997] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:58:08.662 [DEBUG] [Thread-136997] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:58:08.662 [DEBUG] [Thread-136997] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:58:08.662 [DEBUG] [Thread-136997] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:58:08.663 [DEBUG] [Thread-136997] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:58:08.663 [DEBUG] [Thread-136997] [transport.py] [_log()] client lang: <none>
2025-12-31T23:58:08.663 [DEBUG] [Thread-136997] [transport.py] [_log()] server lang: <none>
2025-12-31T23:58:08.663 [DEBUG] [Thread-136997] [transport.py] [_log()] kex follows: False
2025-12-31T23:58:08.663 [DEBUG] [Thread-136997] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:58:08.663 [DEBUG] [Thread-136997] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:58:08.663 [DEBUG] [Thread-136997] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:58:08.663 [DEBUG] [Thread-136997] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:58:08.663 [DEBUG] [Thread-136997] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:58:08.663 [DEBUG] [Thread-136997] [transport.py] [_log()] Compression: none
2025-12-31T23:58:08.663 [DEBUG] [Thread-136997] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:58:08.680 [DEBUG] [Thread-136997] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:58:08.680 [DEBUG] [Thread-136997] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:58:08.681 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T23:58:08.681 [DEBUG] [Thread-136997] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T23:58:08.682 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:58:08.684 [DEBUG] [Thread-136997] [transport.py] [_log()] userauth is OK
2025-12-31T23:58:08.684 [DEBUG] [Thread-136997] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:58:08.684 [DEBUG] [Thread-136997] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:58:08.684 [DEBUG] [Thread-136997] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T23:58:08.684 [DEBUG] [Thread-136997] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:58:08.703 [INFO] [Thread-136997] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:58:08.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:58:09.349 [DEBUG] [Thread-136997] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:58:09.349 [DEBUG] [Thread-136997] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:58:09.350 [DEBUG] [Thread-136997] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T23:58:09.390 [DEBUG] [Thread-136997] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:58:09.390 [DEBUG] [Thread-136997] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:58:09.393 [DEBUG] [Thread-136997] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:58:09.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:58:09.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T23:58:09.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T23:58:09.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T23:58:09.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:58:09.416 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T23:58:09.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:58:09.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:58:09.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T23:58:09.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.915065 -999.00  +14.70  11.09     81  +11.50 1 2 1 2 1     0    0 2.61 -25.52 Z.... 14.7 11.1 206.2 18.0 15.7 -15.7 15.5 -14.9 15.4 -14.0 15.7 -15.0
2025-12-31T23:58:09.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T23:58:09.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T23:58:09.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.915065
2025-12-31T23:58:09.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T23:58:09.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T23:58:09.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T23:58:09.419 [DEBUG] [Thread-136997] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:58:09.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T23:58:09.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T23:58:09.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T23:58:03', tmtdew=3.68, humidity=78.33, cloud=0.0, wind=20.43, temperature=14.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T23:58:03', seeing=1.25, atlas_timestamp='2025-12-31T21:57:41.616', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2025-12-31T23:58:09.502 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T23:58:09.513 [DEBUG] [Thread-137000] [transport.py] [_log()] starting thread (client mode): 0xb1747400
2025-12-31T23:58:09.514 [DEBUG] [Thread-137000] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:58:09.528 [DEBUG] [Thread-137000] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T23:58:09.528 [INFO] [Thread-137000] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T23:58:09.536 [DEBUG] [Thread-137000] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:58:09.537 [DEBUG] [Thread-137000] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T23:58:09.537 [DEBUG] [Thread-137000] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:58:09.537 [DEBUG] [Thread-137000] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:58:09.537 [DEBUG] [Thread-137000] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:58:09.537 [DEBUG] [Thread-137000] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:58:09.537 [DEBUG] [Thread-137000] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:58:09.537 [DEBUG] [Thread-137000] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:58:09.537 [DEBUG] [Thread-137000] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:58:09.537 [DEBUG] [Thread-137000] [transport.py] [_log()] client lang: <none>
2025-12-31T23:58:09.538 [DEBUG] [Thread-137000] [transport.py] [_log()] server lang: <none>
2025-12-31T23:58:09.538 [DEBUG] [Thread-137000] [transport.py] [_log()] kex follows: False
2025-12-31T23:58:09.538 [DEBUG] [Thread-137000] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:58:09.538 [DEBUG] [Thread-137000] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:58:09.538 [DEBUG] [Thread-137000] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:58:09.538 [DEBUG] [Thread-137000] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:58:09.538 [DEBUG] [Thread-137000] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:58:09.539 [DEBUG] [Thread-137000] [transport.py] [_log()] Compression: none
2025-12-31T23:58:09.539 [DEBUG] [Thread-137000] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:58:09.596 [DEBUG] [Thread-137000] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:58:09.597 [DEBUG] [Thread-137000] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:58:09.598 [DEBUG] [Thread-137000] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T23:58:09.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T23:58:09.600 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:58:09.657 [DEBUG] [Thread-137000] [transport.py] [_log()] userauth is OK
2025-12-31T23:58:09.657 [DEBUG] [Thread-137000] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:58:09.657 [DEBUG] [Thread-137000] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:58:09.658 [DEBUG] [Thread-137000] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T23:58:09.658 [DEBUG] [Thread-137000] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:58:09.680 [INFO] [Thread-137000] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:58:09.680 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T23:58:09.681 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:58:10.544 [DEBUG] [Thread-137000] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:58:10.544 [DEBUG] [Thread-137000] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:58:10.593 [DEBUG] [Thread-137000] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:58:10.593 [DEBUG] [Thread-137000] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:58:10.602 [DEBUG] [Thread-137000] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:58:10.612 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:58:10.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T23:58:10.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T23:58:10.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:58:10.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:58:10.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:58:10.640 [DEBUG] [Thread-137000] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:58:18.994 [DEBUG] [Thread-137002 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:58:32.292 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:58:32.293 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:58:34.050 [DEBUG] [Thread-137003 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:58:40.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T23:58:40.661 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T23:58:40.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T23:58:41.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 23, 58, 35), 3.67, 78.35, 0.0, 16.94, 14.63, 0, 0, 0, 2, 0, 0),)
2025-12-31T23:58:41.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 23:58:35
2025-12-31T23:58:41.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T23:58:41.624 [DEBUG] [Thread-137004] [transport.py] [_log()] starting thread (client mode): 0xb6ba1780
2025-12-31T23:58:41.624 [DEBUG] [Thread-137004] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:58:41.644 [DEBUG] [Thread-137004] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T23:58:41.644 [INFO] [Thread-137004] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T23:58:41.647 [DEBUG] [Thread-137004] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:58:41.647 [DEBUG] [Thread-137004] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T23:58:41.647 [DEBUG] [Thread-137004] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:58:41.647 [DEBUG] [Thread-137004] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:58:41.647 [DEBUG] [Thread-137004] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:58:41.647 [DEBUG] [Thread-137004] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:58:41.647 [DEBUG] [Thread-137004] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:58:41.647 [DEBUG] [Thread-137004] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:58:41.647 [DEBUG] [Thread-137004] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:58:41.647 [DEBUG] [Thread-137004] [transport.py] [_log()] client lang: <none>
2025-12-31T23:58:41.647 [DEBUG] [Thread-137004] [transport.py] [_log()] server lang: <none>
2025-12-31T23:58:41.647 [DEBUG] [Thread-137004] [transport.py] [_log()] kex follows: False
2025-12-31T23:58:41.647 [DEBUG] [Thread-137004] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:58:41.647 [DEBUG] [Thread-137004] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:58:41.647 [DEBUG] [Thread-137004] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:58:41.647 [DEBUG] [Thread-137004] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:58:41.647 [DEBUG] [Thread-137004] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:58:41.648 [DEBUG] [Thread-137004] [transport.py] [_log()] Compression: none
2025-12-31T23:58:41.648 [DEBUG] [Thread-137004] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:58:41.665 [DEBUG] [Thread-137004] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:58:41.665 [DEBUG] [Thread-137004] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:58:41.666 [DEBUG] [Thread-137004] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T23:58:41.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T23:58:41.667 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:58:41.668 [DEBUG] [Thread-137004] [transport.py] [_log()] userauth is OK
2025-12-31T23:58:41.668 [DEBUG] [Thread-137004] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:58:41.668 [DEBUG] [Thread-137004] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:58:41.668 [DEBUG] [Thread-137004] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T23:58:41.668 [DEBUG] [Thread-137004] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:58:41.691 [INFO] [Thread-137004] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:58:41.692 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:58:42.303 [DEBUG] [Thread-137004] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:58:42.304 [DEBUG] [Thread-137004] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:58:42.304 [DEBUG] [Thread-137004] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T23:58:42.345 [DEBUG] [Thread-137004] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:58:42.345 [DEBUG] [Thread-137004] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:58:42.348 [DEBUG] [Thread-137004] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:58:42.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:58:42.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T23:58:42.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T23:58:42.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T23:58:42.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:58:42.375 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T23:58:42.375 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:58:42.375 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:58:42.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T23:58:42.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.915412 -999.00  +14.80  13.87     81  +11.50 1 2 1 2 1     0    0 2.66 -24.47 Z.... 13.7 13.9 196.0 20.8 15.7 -15.6 15.6 -14.9 15.4 -14.1 15.7 -14.9
2025-12-31T23:58:42.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T23:58:42.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T23:58:42.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.915412
2025-12-31T23:58:42.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T23:58:42.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T23:58:42.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T23:58:42.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T23:58:42.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T23:58:42.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T23:58:35', tmtdew=3.67, humidity=78.35, cloud=0.0, wind=16.94, temperature=14.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T23:58:35', seeing=1.22, atlas_timestamp='2025-12-31T21:58:11.597', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2025-12-31T23:58:42.378 [DEBUG] [Thread-137004] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:58:42.461 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T23:58:42.472 [DEBUG] [Thread-137007] [transport.py] [_log()] starting thread (client mode): 0xb6b62740
2025-12-31T23:58:42.472 [DEBUG] [Thread-137007] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:58:42.486 [DEBUG] [Thread-137007] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T23:58:42.486 [INFO] [Thread-137007] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T23:58:42.493 [DEBUG] [Thread-137007] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:58:42.494 [DEBUG] [Thread-137007] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T23:58:42.494 [DEBUG] [Thread-137007] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:58:42.494 [DEBUG] [Thread-137007] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:58:42.494 [DEBUG] [Thread-137007] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:58:42.494 [DEBUG] [Thread-137007] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:58:42.494 [DEBUG] [Thread-137007] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:58:42.494 [DEBUG] [Thread-137007] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:58:42.494 [DEBUG] [Thread-137007] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:58:42.494 [DEBUG] [Thread-137007] [transport.py] [_log()] client lang: <none>
2025-12-31T23:58:42.494 [DEBUG] [Thread-137007] [transport.py] [_log()] server lang: <none>
2025-12-31T23:58:42.494 [DEBUG] [Thread-137007] [transport.py] [_log()] kex follows: False
2025-12-31T23:58:42.494 [DEBUG] [Thread-137007] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:58:42.494 [DEBUG] [Thread-137007] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:58:42.494 [DEBUG] [Thread-137007] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:58:42.494 [DEBUG] [Thread-137007] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:58:42.494 [DEBUG] [Thread-137007] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:58:42.494 [DEBUG] [Thread-137007] [transport.py] [_log()] Compression: none
2025-12-31T23:58:42.494 [DEBUG] [Thread-137007] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:58:42.552 [DEBUG] [Thread-137007] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:58:42.552 [DEBUG] [Thread-137007] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:58:42.553 [DEBUG] [Thread-137007] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T23:58:42.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T23:58:42.554 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:58:42.608 [DEBUG] [Thread-137007] [transport.py] [_log()] userauth is OK
2025-12-31T23:58:42.608 [DEBUG] [Thread-137007] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:58:42.608 [DEBUG] [Thread-137007] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:58:42.608 [DEBUG] [Thread-137007] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T23:58:42.608 [DEBUG] [Thread-137007] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:58:42.626 [INFO] [Thread-137007] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:58:42.627 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T23:58:42.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:58:43.462 [DEBUG] [Thread-137007] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:58:43.463 [DEBUG] [Thread-137007] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:58:43.511 [DEBUG] [Thread-137007] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:58:43.511 [DEBUG] [Thread-137007] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:58:43.521 [DEBUG] [Thread-137007] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:58:43.530 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:58:43.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T23:58:43.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T23:58:43.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:58:43.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:58:43.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:58:43.558 [DEBUG] [Thread-137007] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:58:49.083 [DEBUG] [Thread-137009 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:58:54.315 [DEBUG] [Thread-137010 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:59:04.145 [DEBUG] [Thread-137011 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:59:13.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T23:59:13.579 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T23:59:13.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T23:59:14.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 23, 59, 7), 3.68, 78.31, 0.0, 14.89, 14.63, 0, 0, 0, 2, 0, 0),)
2025-12-31T23:59:14.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 23:59:07
2025-12-31T23:59:14.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T23:59:14.621 [DEBUG] [Thread-137012] [transport.py] [_log()] starting thread (client mode): 0xb6b60a30
2025-12-31T23:59:14.621 [DEBUG] [Thread-137012] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:59:14.641 [DEBUG] [Thread-137012] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T23:59:14.641 [INFO] [Thread-137012] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T23:59:14.644 [DEBUG] [Thread-137012] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:59:14.644 [DEBUG] [Thread-137012] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T23:59:14.644 [DEBUG] [Thread-137012] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:59:14.644 [DEBUG] [Thread-137012] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:59:14.644 [DEBUG] [Thread-137012] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:59:14.644 [DEBUG] [Thread-137012] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:59:14.644 [DEBUG] [Thread-137012] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:59:14.644 [DEBUG] [Thread-137012] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:59:14.644 [DEBUG] [Thread-137012] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:59:14.644 [DEBUG] [Thread-137012] [transport.py] [_log()] client lang: <none>
2025-12-31T23:59:14.644 [DEBUG] [Thread-137012] [transport.py] [_log()] server lang: <none>
2025-12-31T23:59:14.644 [DEBUG] [Thread-137012] [transport.py] [_log()] kex follows: False
2025-12-31T23:59:14.644 [DEBUG] [Thread-137012] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:59:14.644 [DEBUG] [Thread-137012] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:59:14.644 [DEBUG] [Thread-137012] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:59:14.644 [DEBUG] [Thread-137012] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:59:14.644 [DEBUG] [Thread-137012] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:59:14.644 [DEBUG] [Thread-137012] [transport.py] [_log()] Compression: none
2025-12-31T23:59:14.644 [DEBUG] [Thread-137012] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:59:14.659 [DEBUG] [Thread-137012] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:59:14.660 [DEBUG] [Thread-137012] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:59:14.660 [DEBUG] [Thread-137012] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T23:59:14.660 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T23:59:14.660 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:59:14.661 [DEBUG] [Thread-137012] [transport.py] [_log()] userauth is OK
2025-12-31T23:59:14.661 [DEBUG] [Thread-137012] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:59:14.661 [DEBUG] [Thread-137012] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:59:14.661 [DEBUG] [Thread-137012] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T23:59:14.661 [DEBUG] [Thread-137012] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:59:14.676 [INFO] [Thread-137012] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:59:14.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:59:15.312 [DEBUG] [Thread-137012] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:59:15.312 [DEBUG] [Thread-137012] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:59:15.312 [DEBUG] [Thread-137012] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T23:59:15.354 [DEBUG] [Thread-137012] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:59:15.354 [DEBUG] [Thread-137012] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:59:15.356 [DEBUG] [Thread-137012] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:59:15.367 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:59:15.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T23:59:15.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T23:59:15.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T23:59:15.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:59:15.374 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T23:59:15.374 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:59:15.374 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:59:15.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T23:59:15.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.915760 -999.00  +14.80  11.94     81  +11.60 1 2 1 2 1     0    0 2.70 -24.23 z.eS. 14.7 11.9 182.6 17.4 15.8 -15.5 15.6 -14.7 15.4 -14.0 15.7 -15.0
2025-12-31T23:59:15.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T23:59:15.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T23:59:15.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.915760
2025-12-31T23:59:15.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T23:59:15.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T23:59:15.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T23:59:15.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T23:59:15.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T23:59:15.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T23:59:07', tmtdew=3.68, humidity=78.31, cloud=0.0, wind=14.89, temperature=14.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T23:59:07', seeing=1.22, atlas_timestamp='2025-12-31T21:58:41.664', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2025-12-31T23:59:15.375 [DEBUG] [Thread-137012] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:59:15.449 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T23:59:15.460 [DEBUG] [Thread-137015] [transport.py] [_log()] starting thread (client mode): 0xb95f0100
2025-12-31T23:59:15.460 [DEBUG] [Thread-137015] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:59:15.475 [DEBUG] [Thread-137015] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T23:59:15.475 [INFO] [Thread-137015] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T23:59:15.482 [DEBUG] [Thread-137015] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:59:15.483 [DEBUG] [Thread-137015] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T23:59:15.483 [DEBUG] [Thread-137015] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:59:15.483 [DEBUG] [Thread-137015] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:59:15.483 [DEBUG] [Thread-137015] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:59:15.483 [DEBUG] [Thread-137015] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:59:15.483 [DEBUG] [Thread-137015] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:59:15.483 [DEBUG] [Thread-137015] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:59:15.483 [DEBUG] [Thread-137015] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:59:15.483 [DEBUG] [Thread-137015] [transport.py] [_log()] client lang: <none>
2025-12-31T23:59:15.483 [DEBUG] [Thread-137015] [transport.py] [_log()] server lang: <none>
2025-12-31T23:59:15.483 [DEBUG] [Thread-137015] [transport.py] [_log()] kex follows: False
2025-12-31T23:59:15.483 [DEBUG] [Thread-137015] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:59:15.483 [DEBUG] [Thread-137015] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:59:15.483 [DEBUG] [Thread-137015] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:59:15.483 [DEBUG] [Thread-137015] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:59:15.483 [DEBUG] [Thread-137015] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:59:15.483 [DEBUG] [Thread-137015] [transport.py] [_log()] Compression: none
2025-12-31T23:59:15.483 [DEBUG] [Thread-137015] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:59:15.538 [DEBUG] [Thread-137015] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:59:15.538 [DEBUG] [Thread-137015] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:59:15.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T23:59:15.539 [DEBUG] [Thread-137015] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T23:59:15.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:59:15.595 [DEBUG] [Thread-137015] [transport.py] [_log()] userauth is OK
2025-12-31T23:59:15.595 [DEBUG] [Thread-137015] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:59:15.595 [DEBUG] [Thread-137015] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:59:15.595 [DEBUG] [Thread-137015] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T23:59:15.595 [DEBUG] [Thread-137015] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:59:15.610 [INFO] [Thread-137015] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:59:15.610 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T23:59:15.610 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:59:16.450 [DEBUG] [Thread-137015] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:59:16.450 [DEBUG] [Thread-137015] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:59:16.498 [DEBUG] [Thread-137015] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:59:16.498 [DEBUG] [Thread-137015] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:59:16.506 [DEBUG] [Thread-137015] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:59:16.514 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:59:16.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T23:59:16.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T23:59:16.530 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:59:16.530 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:59:16.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:59:16.538 [DEBUG] [Thread-137015] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:59:19.174 [DEBUG] [Thread-137017 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:59:32.492 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:59:32.493 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:59:34.225 [DEBUG] [Thread-137018 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:59:46.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-31T23:59:46.542 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-31T23:59:46.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-31T23:59:47.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 31, 23, 59, 39), 3.68, 78.3, 0.0, 15.97, 14.65, 0, 0, 0, 2, 0, 0),)
2025-12-31T23:59:47.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-31 23:59:39
2025-12-31T23:59:47.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-31T23:59:47.521 [DEBUG] [Thread-137019] [transport.py] [_log()] starting thread (client mode): 0xb95f07f0
2025-12-31T23:59:47.521 [DEBUG] [Thread-137019] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:59:47.541 [DEBUG] [Thread-137019] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-31T23:59:47.541 [INFO] [Thread-137019] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-31T23:59:47.544 [DEBUG] [Thread-137019] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:59:47.545 [DEBUG] [Thread-137019] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-31T23:59:47.545 [DEBUG] [Thread-137019] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:59:47.545 [DEBUG] [Thread-137019] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:59:47.545 [DEBUG] [Thread-137019] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:59:47.545 [DEBUG] [Thread-137019] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:59:47.545 [DEBUG] [Thread-137019] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:59:47.545 [DEBUG] [Thread-137019] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:59:47.545 [DEBUG] [Thread-137019] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:59:47.545 [DEBUG] [Thread-137019] [transport.py] [_log()] client lang: <none>
2025-12-31T23:59:47.545 [DEBUG] [Thread-137019] [transport.py] [_log()] server lang: <none>
2025-12-31T23:59:47.545 [DEBUG] [Thread-137019] [transport.py] [_log()] kex follows: False
2025-12-31T23:59:47.545 [DEBUG] [Thread-137019] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:59:47.545 [DEBUG] [Thread-137019] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:59:47.545 [DEBUG] [Thread-137019] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:59:47.545 [DEBUG] [Thread-137019] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:59:47.545 [DEBUG] [Thread-137019] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:59:47.545 [DEBUG] [Thread-137019] [transport.py] [_log()] Compression: none
2025-12-31T23:59:47.545 [DEBUG] [Thread-137019] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:59:47.561 [DEBUG] [Thread-137019] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:59:47.561 [DEBUG] [Thread-137019] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:59:47.562 [DEBUG] [Thread-137019] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-31T23:59:47.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-31T23:59:47.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:59:47.563 [DEBUG] [Thread-137019] [transport.py] [_log()] userauth is OK
2025-12-31T23:59:47.564 [DEBUG] [Thread-137019] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:59:47.564 [DEBUG] [Thread-137019] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:59:47.564 [DEBUG] [Thread-137019] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-31T23:59:47.564 [DEBUG] [Thread-137019] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:59:47.583 [INFO] [Thread-137019] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:59:47.584 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:59:48.206 [DEBUG] [Thread-137019] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:59:48.206 [DEBUG] [Thread-137019] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:59:48.206 [DEBUG] [Thread-137019] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-31T23:59:48.247 [DEBUG] [Thread-137019] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:59:48.247 [DEBUG] [Thread-137019] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:59:48.250 [DEBUG] [Thread-137019] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:59:48.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:59:48.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-31T23:59:48.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-31T23:59:48.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-31T23:59:48.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:59:48.276 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-31T23:59:48.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:59:48.276 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:59:48.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-31T23:59:48.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.916107 -999.00  +14.80  11.42     81  +11.50 1 2 1 2 1     0    0 2.68 -24.40 z.... 11.3 11.4 199.2 15.7 15.7 -15.5 15.6 -14.8 15.4 -13.9 15.8 -14.9
2025-12-31T23:59:48.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-31T23:59:48.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-31T23:59:48.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.916107
2025-12-31T23:59:48.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-31T23:59:48.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-31T23:59:48.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-31T23:59:48.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-31T23:59:48.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-31T23:59:48.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-31T23:59:39', tmtdew=3.68, humidity=78.3, cloud=0.0, wind=15.97, temperature=14.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-31T23:59:39', seeing=1.22, atlas_timestamp='2025-12-31T21:59:11.645', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2025-12-31T23:59:48.279 [DEBUG] [Thread-137019] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:59:48.365 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-31T23:59:48.375 [DEBUG] [Thread-137022] [transport.py] [_log()] starting thread (client mode): 0xb17972b0
2025-12-31T23:59:48.375 [DEBUG] [Thread-137022] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-31T23:59:48.392 [DEBUG] [Thread-137022] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-31T23:59:48.393 [INFO] [Thread-137022] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-31T23:59:48.403 [DEBUG] [Thread-137022] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-31T23:59:48.403 [DEBUG] [Thread-137022] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-31T23:59:48.403 [DEBUG] [Thread-137022] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-31T23:59:48.403 [DEBUG] [Thread-137022] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:59:48.403 [DEBUG] [Thread-137022] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-31T23:59:48.403 [DEBUG] [Thread-137022] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:59:48.403 [DEBUG] [Thread-137022] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-31T23:59:48.403 [DEBUG] [Thread-137022] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-31T23:59:48.403 [DEBUG] [Thread-137022] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-31T23:59:48.403 [DEBUG] [Thread-137022] [transport.py] [_log()] client lang: <none>
2025-12-31T23:59:48.404 [DEBUG] [Thread-137022] [transport.py] [_log()] server lang: <none>
2025-12-31T23:59:48.404 [DEBUG] [Thread-137022] [transport.py] [_log()] kex follows: False
2025-12-31T23:59:48.404 [DEBUG] [Thread-137022] [transport.py] [_log()] === Key exchange agreements ===
2025-12-31T23:59:48.404 [DEBUG] [Thread-137022] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-31T23:59:48.404 [DEBUG] [Thread-137022] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-31T23:59:48.404 [DEBUG] [Thread-137022] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-31T23:59:48.404 [DEBUG] [Thread-137022] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-31T23:59:48.404 [DEBUG] [Thread-137022] [transport.py] [_log()] Compression: none
2025-12-31T23:59:48.404 [DEBUG] [Thread-137022] [transport.py] [_log()] === End of kex handshake ===
2025-12-31T23:59:48.459 [DEBUG] [Thread-137022] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-31T23:59:48.460 [DEBUG] [Thread-137022] [transport.py] [_log()] Switch to new keys ...
2025-12-31T23:59:48.460 [DEBUG] [Thread-137022] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-31T23:59:48.460 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-31T23:59:48.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-31T23:59:48.516 [DEBUG] [Thread-137022] [transport.py] [_log()] userauth is OK
2025-12-31T23:59:48.516 [DEBUG] [Thread-137022] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-31T23:59:48.516 [DEBUG] [Thread-137022] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-31T23:59:48.516 [DEBUG] [Thread-137022] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-31T23:59:48.517 [DEBUG] [Thread-137022] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-31T23:59:48.535 [INFO] [Thread-137022] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-31T23:59:48.536 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-31T23:59:48.536 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-31T23:59:49.261 [DEBUG] [Thread-137024 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-31T23:59:49.377 [DEBUG] [Thread-137022] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-31T23:59:49.377 [DEBUG] [Thread-137022] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-31T23:59:49.425 [DEBUG] [Thread-137022] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-31T23:59:49.425 [DEBUG] [Thread-137022] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-31T23:59:49.434 [DEBUG] [Thread-137022] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-31T23:59:49.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-31T23:59:49.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-31T23:59:49.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-31T23:59:49.460 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-31T23:59:49.460 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-31T23:59:49.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-31T23:59:49.468 [DEBUG] [Thread-137022] [transport.py] [_log()] EOF in transport thread
2025-12-31T23:59:54.371 [DEBUG] [Thread-137025 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:00:04.308 [DEBUG] [Thread-137026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:00:19.344 [DEBUG] [Thread-137027 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:00:19.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T00:00:19.491 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T00:00:19.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T00:00:20.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 0, 0, 11), 3.68, 78.3, 0.0, 17.01, 14.65, 0, 0, 0, 2, 0, 0),)
2026-01-01T00:00:20.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 00:00:11
2026-01-01T00:00:20.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T00:00:20.481 [DEBUG] [Thread-137028] [transport.py] [_log()] starting thread (client mode): 0xb6ba3ca0
2026-01-01T00:00:20.481 [DEBUG] [Thread-137028] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:00:20.502 [DEBUG] [Thread-137028] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T00:00:20.502 [INFO] [Thread-137028] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T00:00:20.505 [DEBUG] [Thread-137028] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:00:20.505 [DEBUG] [Thread-137028] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T00:00:20.505 [DEBUG] [Thread-137028] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:00:20.505 [DEBUG] [Thread-137028] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:00:20.505 [DEBUG] [Thread-137028] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:00:20.505 [DEBUG] [Thread-137028] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:00:20.505 [DEBUG] [Thread-137028] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:00:20.505 [DEBUG] [Thread-137028] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:00:20.505 [DEBUG] [Thread-137028] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:00:20.505 [DEBUG] [Thread-137028] [transport.py] [_log()] client lang: <none>
2026-01-01T00:00:20.505 [DEBUG] [Thread-137028] [transport.py] [_log()] server lang: <none>
2026-01-01T00:00:20.505 [DEBUG] [Thread-137028] [transport.py] [_log()] kex follows: False
2026-01-01T00:00:20.505 [DEBUG] [Thread-137028] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:00:20.505 [DEBUG] [Thread-137028] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:00:20.505 [DEBUG] [Thread-137028] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:00:20.505 [DEBUG] [Thread-137028] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:00:20.505 [DEBUG] [Thread-137028] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:00:20.506 [DEBUG] [Thread-137028] [transport.py] [_log()] Compression: none
2026-01-01T00:00:20.506 [DEBUG] [Thread-137028] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:00:20.522 [DEBUG] [Thread-137028] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:00:20.523 [DEBUG] [Thread-137028] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:00:20.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T00:00:20.524 [DEBUG] [Thread-137028] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T00:00:20.525 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:00:20.526 [DEBUG] [Thread-137028] [transport.py] [_log()] userauth is OK
2026-01-01T00:00:20.526 [DEBUG] [Thread-137028] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:00:20.526 [DEBUG] [Thread-137028] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:00:20.527 [DEBUG] [Thread-137028] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T00:00:20.527 [DEBUG] [Thread-137028] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:00:20.547 [INFO] [Thread-137028] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:00:20.547 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:00:21.192 [DEBUG] [Thread-137028] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:00:21.192 [DEBUG] [Thread-137028] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:00:21.193 [DEBUG] [Thread-137028] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T00:00:21.233 [DEBUG] [Thread-137028] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:00:21.233 [DEBUG] [Thread-137028] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:00:21.237 [DEBUG] [Thread-137028] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:00:21.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:00:21.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T00:00:21.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T00:00:21.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T00:00:21.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:00:21.263 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T00:00:21.263 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:00:21.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:00:21.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T00:00:21.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.916454 -999.00  +14.80  11.33     81  +11.50 1 2 1 2 1     0    0 2.66 -24.52 z.... 7.6 11.3 193.2 16.0 15.7 -15.4 15.6 -14.6 15.5 -14.0 15.8 -15.1
2026-01-01T00:00:21.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T00:00:21.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T00:00:21.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.916454
2026-01-01T00:00:21.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T00:00:21.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T00:00:21.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T00:00:21.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T00:00:21.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T00:00:21.266 [DEBUG] [Thread-137028] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:00:21.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T00:00:11', tmtdew=3.68, humidity=78.3, cloud=0.0, wind=17.01, temperature=14.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:00:11', seeing=1.22, atlas_timestamp='2025-12-31T21:59:41.626', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T00:00:21.349 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T00:00:21.362 [DEBUG] [Thread-137031] [transport.py] [_log()] starting thread (client mode): 0xb1747b80
2026-01-01T00:00:21.363 [DEBUG] [Thread-137031] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:00:21.378 [DEBUG] [Thread-137031] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T00:00:21.378 [INFO] [Thread-137031] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T00:00:21.385 [DEBUG] [Thread-137031] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:00:21.386 [DEBUG] [Thread-137031] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T00:00:21.386 [DEBUG] [Thread-137031] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:00:21.386 [DEBUG] [Thread-137031] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:00:21.386 [DEBUG] [Thread-137031] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:00:21.386 [DEBUG] [Thread-137031] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:00:21.386 [DEBUG] [Thread-137031] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:00:21.386 [DEBUG] [Thread-137031] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:00:21.386 [DEBUG] [Thread-137031] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:00:21.386 [DEBUG] [Thread-137031] [transport.py] [_log()] client lang: <none>
2026-01-01T00:00:21.386 [DEBUG] [Thread-137031] [transport.py] [_log()] server lang: <none>
2026-01-01T00:00:21.386 [DEBUG] [Thread-137031] [transport.py] [_log()] kex follows: False
2026-01-01T00:00:21.386 [DEBUG] [Thread-137031] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:00:21.386 [DEBUG] [Thread-137031] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:00:21.386 [DEBUG] [Thread-137031] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:00:21.386 [DEBUG] [Thread-137031] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:00:21.386 [DEBUG] [Thread-137031] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:00:21.386 [DEBUG] [Thread-137031] [transport.py] [_log()] Compression: none
2026-01-01T00:00:21.387 [DEBUG] [Thread-137031] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:00:21.447 [DEBUG] [Thread-137031] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:00:21.447 [DEBUG] [Thread-137031] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:00:21.448 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T00:00:21.448 [DEBUG] [Thread-137031] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T00:00:21.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:00:21.505 [DEBUG] [Thread-137031] [transport.py] [_log()] userauth is OK
2026-01-01T00:00:21.506 [DEBUG] [Thread-137031] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:00:21.506 [DEBUG] [Thread-137031] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:00:21.506 [DEBUG] [Thread-137031] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T00:00:21.506 [DEBUG] [Thread-137031] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:00:21.525 [INFO] [Thread-137031] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:00:21.525 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T00:00:21.526 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:00:22.372 [DEBUG] [Thread-137031] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:00:22.372 [DEBUG] [Thread-137031] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:00:22.420 [DEBUG] [Thread-137031] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:00:22.420 [DEBUG] [Thread-137031] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:00:22.429 [DEBUG] [Thread-137031] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:00:22.438 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:00:22.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T00:00:22.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T00:00:22.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:00:22.455 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:00:22.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:00:22.464 [DEBUG] [Thread-137031] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:00:32.694 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:00:32.695 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:00:34.372 [DEBUG] [Thread-137033 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:00:49.416 [DEBUG] [Thread-137034 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:00:52.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T00:00:52.461 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T00:00:52.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T00:00:53.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 0, 0, 43), 3.68, 78.31, 0.0, 16.59, 14.62, 0, 0, 0, 2, 0, 0),)
2026-01-01T00:00:53.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 00:00:43
2026-01-01T00:00:53.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T00:00:53.467 [DEBUG] [Thread-137035] [transport.py] [_log()] starting thread (client mode): 0xb1794a30
2026-01-01T00:00:53.467 [DEBUG] [Thread-137035] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:00:53.487 [DEBUG] [Thread-137035] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T00:00:53.487 [INFO] [Thread-137035] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T00:00:53.489 [DEBUG] [Thread-137035] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:00:53.489 [DEBUG] [Thread-137035] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T00:00:53.489 [DEBUG] [Thread-137035] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:00:53.489 [DEBUG] [Thread-137035] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:00:53.489 [DEBUG] [Thread-137035] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:00:53.489 [DEBUG] [Thread-137035] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:00:53.489 [DEBUG] [Thread-137035] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:00:53.490 [DEBUG] [Thread-137035] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:00:53.490 [DEBUG] [Thread-137035] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:00:53.490 [DEBUG] [Thread-137035] [transport.py] [_log()] client lang: <none>
2026-01-01T00:00:53.490 [DEBUG] [Thread-137035] [transport.py] [_log()] server lang: <none>
2026-01-01T00:00:53.490 [DEBUG] [Thread-137035] [transport.py] [_log()] kex follows: False
2026-01-01T00:00:53.490 [DEBUG] [Thread-137035] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:00:53.490 [DEBUG] [Thread-137035] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:00:53.490 [DEBUG] [Thread-137035] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:00:53.490 [DEBUG] [Thread-137035] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:00:53.490 [DEBUG] [Thread-137035] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:00:53.490 [DEBUG] [Thread-137035] [transport.py] [_log()] Compression: none
2026-01-01T00:00:53.490 [DEBUG] [Thread-137035] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:00:53.506 [DEBUG] [Thread-137035] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:00:53.507 [DEBUG] [Thread-137035] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:00:53.507 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T00:00:53.507 [DEBUG] [Thread-137035] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T00:00:53.508 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:00:53.512 [DEBUG] [Thread-137035] [transport.py] [_log()] userauth is OK
2026-01-01T00:00:53.513 [DEBUG] [Thread-137035] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:00:53.513 [DEBUG] [Thread-137035] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:00:53.513 [DEBUG] [Thread-137035] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T00:00:53.513 [DEBUG] [Thread-137035] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:00:53.529 [INFO] [Thread-137035] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:00:53.530 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:00:54.100 [DEBUG] [Thread-137035] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:00:54.100 [DEBUG] [Thread-137035] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:00:54.100 [DEBUG] [Thread-137035] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T00:00:54.141 [DEBUG] [Thread-137035] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:00:54.141 [DEBUG] [Thread-137035] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:00:54.145 [DEBUG] [Thread-137035] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:00:54.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:00:54.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T00:00:54.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T00:00:54.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T00:00:54.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:00:54.166 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T00:00:54.166 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:00:54.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:00:54.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T00:00:54.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.917149 -999.00  +14.80  13.93     80  +11.50 1 2 1 2 1     0    0 2.65 -22.61 Z.... 15.4 13.9 199.8 15.8 15.8 -15.3 15.6 -14.6 15.4 -13.6 15.8 -15.0
2026-01-01T00:00:54.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T00:00:54.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T00:00:54.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.917149
2026-01-01T00:00:54.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T00:00:54.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T00:00:54.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T00:00:54.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T00:00:54.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T00:00:54.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T00:00:43', tmtdew=3.68, humidity=78.31, cloud=0.0, wind=16.59, temperature=14.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:00:43', seeing=1.22, atlas_timestamp='2025-12-31T22:00:41.674', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T00:00:54.169 [DEBUG] [Thread-137035] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:00:54.253 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T00:00:54.265 [DEBUG] [Thread-137038] [transport.py] [_log()] starting thread (client mode): 0xb1795b40
2026-01-01T00:00:54.265 [DEBUG] [Thread-137038] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:00:54.281 [DEBUG] [Thread-137038] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T00:00:54.281 [INFO] [Thread-137038] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T00:00:54.289 [DEBUG] [Thread-137038] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:00:54.289 [DEBUG] [Thread-137038] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T00:00:54.289 [DEBUG] [Thread-137038] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:00:54.289 [DEBUG] [Thread-137038] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:00:54.289 [DEBUG] [Thread-137038] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:00:54.289 [DEBUG] [Thread-137038] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:00:54.289 [DEBUG] [Thread-137038] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:00:54.290 [DEBUG] [Thread-137038] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:00:54.290 [DEBUG] [Thread-137038] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:00:54.290 [DEBUG] [Thread-137038] [transport.py] [_log()] client lang: <none>
2026-01-01T00:00:54.290 [DEBUG] [Thread-137038] [transport.py] [_log()] server lang: <none>
2026-01-01T00:00:54.290 [DEBUG] [Thread-137038] [transport.py] [_log()] kex follows: False
2026-01-01T00:00:54.290 [DEBUG] [Thread-137038] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:00:54.290 [DEBUG] [Thread-137038] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:00:54.290 [DEBUG] [Thread-137038] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:00:54.290 [DEBUG] [Thread-137038] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:00:54.290 [DEBUG] [Thread-137038] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:00:54.290 [DEBUG] [Thread-137038] [transport.py] [_log()] Compression: none
2026-01-01T00:00:54.290 [DEBUG] [Thread-137038] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:00:54.349 [DEBUG] [Thread-137038] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:00:54.349 [DEBUG] [Thread-137038] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:00:54.350 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T00:00:54.351 [DEBUG] [Thread-137038] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T00:00:54.352 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:00:54.408 [DEBUG] [Thread-137038] [transport.py] [_log()] userauth is OK
2026-01-01T00:00:54.408 [DEBUG] [Thread-137038] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:00:54.408 [DEBUG] [Thread-137038] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:00:54.408 [DEBUG] [Thread-137038] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T00:00:54.408 [DEBUG] [Thread-137038] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:00:54.422 [INFO] [Thread-137038] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:00:54.422 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T00:00:54.423 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:00:54.440 [DEBUG] [Thread-137040 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:00:55.284 [DEBUG] [Thread-137038] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:00:55.284 [DEBUG] [Thread-137038] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:00:55.334 [DEBUG] [Thread-137038] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:00:55.335 [DEBUG] [Thread-137038] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:00:55.344 [DEBUG] [Thread-137038] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:00:55.353 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:00: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')
2026-01-01T00:00:55.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T00:00:55.374 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:00:55.375 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:00:55.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:00:55.383 [DEBUG] [Thread-137038] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:01:04.454 [DEBUG] [Thread-137041 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:01:19.500 [DEBUG] [Thread-137042 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:01:25.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T00:01:25.406 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T00:01:25.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T00:01:26.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 0, 1, 15), 3.67, 78.35, 0.0, 17.49, 14.63, 0, 0, 0, 2, 0, 0),)
2026-01-01T00:01:26.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 00:01:15
2026-01-01T00:01:26.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T00:01:26.404 [DEBUG] [Thread-137043] [transport.py] [_log()] starting thread (client mode): 0xb1794eb0
2026-01-01T00:01:26.404 [DEBUG] [Thread-137043] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:01:26.417 [DEBUG] [Thread-137043] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T00:01:26.417 [INFO] [Thread-137043] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T00:01:26.420 [DEBUG] [Thread-137043] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:01:26.420 [DEBUG] [Thread-137043] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T00:01:26.420 [DEBUG] [Thread-137043] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:01:26.420 [DEBUG] [Thread-137043] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:01:26.420 [DEBUG] [Thread-137043] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:01:26.420 [DEBUG] [Thread-137043] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:01:26.420 [DEBUG] [Thread-137043] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:01:26.420 [DEBUG] [Thread-137043] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:01:26.420 [DEBUG] [Thread-137043] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:01:26.420 [DEBUG] [Thread-137043] [transport.py] [_log()] client lang: <none>
2026-01-01T00:01:26.420 [DEBUG] [Thread-137043] [transport.py] [_log()] server lang: <none>
2026-01-01T00:01:26.420 [DEBUG] [Thread-137043] [transport.py] [_log()] kex follows: False
2026-01-01T00:01:26.420 [DEBUG] [Thread-137043] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:01:26.420 [DEBUG] [Thread-137043] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:01:26.420 [DEBUG] [Thread-137043] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:01:26.420 [DEBUG] [Thread-137043] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:01:26.420 [DEBUG] [Thread-137043] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:01:26.420 [DEBUG] [Thread-137043] [transport.py] [_log()] Compression: none
2026-01-01T00:01:26.420 [DEBUG] [Thread-137043] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:01:26.433 [DEBUG] [Thread-137043] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:01:26.434 [DEBUG] [Thread-137043] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:01:26.434 [DEBUG] [Thread-137043] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T00:01:26.434 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T00:01:26.434 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:01:26.435 [DEBUG] [Thread-137043] [transport.py] [_log()] userauth is OK
2026-01-01T00:01:26.435 [DEBUG] [Thread-137043] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:01:26.435 [DEBUG] [Thread-137043] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:01:26.435 [DEBUG] [Thread-137043] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T00:01:26.435 [DEBUG] [Thread-137043] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:01:26.446 [INFO] [Thread-137043] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:01:26.447 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:01:27.074 [DEBUG] [Thread-137043] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:01:27.074 [DEBUG] [Thread-137043] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:01:27.074 [DEBUG] [Thread-137043] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T00:01:27.115 [DEBUG] [Thread-137043] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:01:27.115 [DEBUG] [Thread-137043] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:01:27.122 [DEBUG] [Thread-137043] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:01:27.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:01:27.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T00:01:27.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T00:01:27.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T00:01:27.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:01:27.146 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T00:01:27.146 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:01:27.146 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:01:27.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T00:01:27.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.917496 -999.00  +14.80   9.42     80  +11.60 1 2 1 2 1     0    0 2.71 -21.91 Z.... 7.8 9.4 218.0 16.9 15.8 -15.2 15.6 -14.3 15.5 -13.6 15.8 -15.0
2026-01-01T00:01:27.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T00:01:27.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T00:01:27.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.917496
2026-01-01T00:01:27.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T00:01:27.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T00:01:27.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T00:01:27.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T00:01:27.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T00:01:27.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T00:01:15', tmtdew=3.67, humidity=78.35, cloud=0.0, wind=17.49, temperature=14.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:01:15', seeing=1.22, atlas_timestamp='2025-12-31T22:01:11.654', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T00:01:27.149 [DEBUG] [Thread-137043] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:01:27.232 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T00:01:27.244 [DEBUG] [Thread-137046] [transport.py] [_log()] starting thread (client mode): 0xb9578190
2026-01-01T00:01:27.244 [DEBUG] [Thread-137046] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:01:27.261 [DEBUG] [Thread-137046] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T00:01:27.261 [INFO] [Thread-137046] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T00:01:27.269 [DEBUG] [Thread-137046] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:01:27.269 [DEBUG] [Thread-137046] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T00:01:27.270 [DEBUG] [Thread-137046] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:01:27.270 [DEBUG] [Thread-137046] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:01:27.270 [DEBUG] [Thread-137046] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:01:27.270 [DEBUG] [Thread-137046] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:01:27.270 [DEBUG] [Thread-137046] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:01:27.270 [DEBUG] [Thread-137046] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:01:27.270 [DEBUG] [Thread-137046] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:01:27.270 [DEBUG] [Thread-137046] [transport.py] [_log()] client lang: <none>
2026-01-01T00:01:27.270 [DEBUG] [Thread-137046] [transport.py] [_log()] server lang: <none>
2026-01-01T00:01:27.270 [DEBUG] [Thread-137046] [transport.py] [_log()] kex follows: False
2026-01-01T00:01:27.271 [DEBUG] [Thread-137046] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:01:27.271 [DEBUG] [Thread-137046] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:01:27.271 [DEBUG] [Thread-137046] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:01:27.271 [DEBUG] [Thread-137046] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:01:27.271 [DEBUG] [Thread-137046] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:01:27.271 [DEBUG] [Thread-137046] [transport.py] [_log()] Compression: none
2026-01-01T00:01:27.271 [DEBUG] [Thread-137046] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:01:27.333 [DEBUG] [Thread-137046] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:01:27.334 [DEBUG] [Thread-137046] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:01:27.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T00:01:27.336 [DEBUG] [Thread-137046] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T00:01:27.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:01:27.392 [DEBUG] [Thread-137046] [transport.py] [_log()] userauth is OK
2026-01-01T00:01:27.393 [DEBUG] [Thread-137046] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:01:27.393 [DEBUG] [Thread-137046] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:01:27.393 [DEBUG] [Thread-137046] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T00:01:27.393 [DEBUG] [Thread-137046] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:01:27.412 [INFO] [Thread-137046] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:01:27.412 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T00:01:27.413 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:01:28.318 [DEBUG] [Thread-137046] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:01:28.318 [DEBUG] [Thread-137046] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:01:28.369 [DEBUG] [Thread-137046] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:01:28.369 [DEBUG] [Thread-137046] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:01:28.382 [DEBUG] [Thread-137046] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:01:28.394 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:01:28.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T00:01:28.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T00:01:28.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:01:28.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:01:28.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:01:28.424 [DEBUG] [Thread-137046] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:01:32.895 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:01:32.896 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:01:34.537 [DEBUG] [Thread-137048 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:01:49.594 [DEBUG] [Thread-137049 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:01:54.495 [DEBUG] [Thread-137050 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:01:58.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T00:01:58.447 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T00:01:58.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T00:01:59.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 0, 1, 47), 3.66, 78.4, 0.0, 20.71, 14.65, 0, 0, 0, 2, 0, 0),)
2026-01-01T00:01:59.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 00:01:47
2026-01-01T00:01:59.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T00:01:59.436 [DEBUG] [Thread-137051] [transport.py] [_log()] starting thread (client mode): 0xb17975b0
2026-01-01T00:01:59.436 [DEBUG] [Thread-137051] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:01:59.454 [DEBUG] [Thread-137051] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T00:01:59.454 [INFO] [Thread-137051] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T00:01:59.456 [DEBUG] [Thread-137051] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:01:59.456 [DEBUG] [Thread-137051] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T00:01:59.456 [DEBUG] [Thread-137051] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:01:59.457 [DEBUG] [Thread-137051] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:01:59.457 [DEBUG] [Thread-137051] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:01:59.457 [DEBUG] [Thread-137051] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:01:59.457 [DEBUG] [Thread-137051] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:01:59.457 [DEBUG] [Thread-137051] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:01:59.457 [DEBUG] [Thread-137051] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:01:59.457 [DEBUG] [Thread-137051] [transport.py] [_log()] client lang: <none>
2026-01-01T00:01:59.457 [DEBUG] [Thread-137051] [transport.py] [_log()] server lang: <none>
2026-01-01T00:01:59.457 [DEBUG] [Thread-137051] [transport.py] [_log()] kex follows: False
2026-01-01T00:01:59.457 [DEBUG] [Thread-137051] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:01:59.457 [DEBUG] [Thread-137051] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:01:59.457 [DEBUG] [Thread-137051] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:01:59.457 [DEBUG] [Thread-137051] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:01:59.457 [DEBUG] [Thread-137051] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:01:59.457 [DEBUG] [Thread-137051] [transport.py] [_log()] Compression: none
2026-01-01T00:01:59.457 [DEBUG] [Thread-137051] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:01:59.468 [DEBUG] [Thread-137051] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:01:59.468 [DEBUG] [Thread-137051] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:01:59.469 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T00:01:59.469 [DEBUG] [Thread-137051] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T00:01:59.470 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:01:59.471 [DEBUG] [Thread-137051] [transport.py] [_log()] userauth is OK
2026-01-01T00:01:59.471 [DEBUG] [Thread-137051] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:01:59.471 [DEBUG] [Thread-137051] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:01:59.471 [DEBUG] [Thread-137051] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T00:01:59.471 [DEBUG] [Thread-137051] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:01:59.495 [INFO] [Thread-137051] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:01:59.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:02:00.116 [DEBUG] [Thread-137051] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:02:00.116 [DEBUG] [Thread-137051] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:02:00.116 [DEBUG] [Thread-137051] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T00:02:00.157 [DEBUG] [Thread-137051] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:02:00.157 [DEBUG] [Thread-137051] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:02:00.160 [DEBUG] [Thread-137051] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:02:00.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:02:00.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T00:02:00.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T00:02:00.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T00:02:00.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:02:00.178 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T00:02:00.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:02:00.178 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:02:00.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T00:02:00.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.917843 -999.00  +14.80  14.28     80  +11.60 1 2 1 2 1     0    0 2.78 -22.43 Z.... 14.0 14.3 192.8 17.9 15.8 -15.3 15.7 -14.1 15.5 -13.5 15.8 -15.0
2026-01-01T00:02:00.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T00:02:00.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T00:02:00.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.917843
2026-01-01T00:02:00.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T00:02:00.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T00:02:00.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T00:02:00.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T00:02:00.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T00:02:00.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T00:01:47', tmtdew=3.66, humidity=78.4, cloud=0.0, wind=20.71, temperature=14.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:01:47', seeing=1.22, atlas_timestamp='2025-12-31T22:01:41.635', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T00:02:00.181 [DEBUG] [Thread-137051] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:02:00.264 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T00:02:00.277 [DEBUG] [Thread-137054] [transport.py] [_log()] starting thread (client mode): 0xb6ba0400
2026-01-01T00:02:00.277 [DEBUG] [Thread-137054] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:02:00.293 [DEBUG] [Thread-137054] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T00:02:00.293 [INFO] [Thread-137054] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T00:02:00.300 [DEBUG] [Thread-137054] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:02:00.301 [DEBUG] [Thread-137054] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T00:02:00.301 [DEBUG] [Thread-137054] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:02:00.301 [DEBUG] [Thread-137054] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:02:00.301 [DEBUG] [Thread-137054] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:02:00.301 [DEBUG] [Thread-137054] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:02:00.301 [DEBUG] [Thread-137054] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:02:00.301 [DEBUG] [Thread-137054] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:02:00.301 [DEBUG] [Thread-137054] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:02:00.301 [DEBUG] [Thread-137054] [transport.py] [_log()] client lang: <none>
2026-01-01T00:02:00.301 [DEBUG] [Thread-137054] [transport.py] [_log()] server lang: <none>
2026-01-01T00:02:00.301 [DEBUG] [Thread-137054] [transport.py] [_log()] kex follows: False
2026-01-01T00:02:00.301 [DEBUG] [Thread-137054] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:02:00.301 [DEBUG] [Thread-137054] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:02:00.301 [DEBUG] [Thread-137054] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:02:00.301 [DEBUG] [Thread-137054] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:02:00.301 [DEBUG] [Thread-137054] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:02:00.301 [DEBUG] [Thread-137054] [transport.py] [_log()] Compression: none
2026-01-01T00:02:00.301 [DEBUG] [Thread-137054] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:02:00.360 [DEBUG] [Thread-137054] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:02:00.361 [DEBUG] [Thread-137054] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:02:00.361 [DEBUG] [Thread-137054] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T00:02:00.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T00:02:00.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:02:00.416 [DEBUG] [Thread-137054] [transport.py] [_log()] userauth is OK
2026-01-01T00:02:00.416 [DEBUG] [Thread-137054] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:02:00.416 [DEBUG] [Thread-137054] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:02:00.416 [DEBUG] [Thread-137054] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T00:02:00.416 [DEBUG] [Thread-137054] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:02:00.437 [INFO] [Thread-137054] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:02:00.437 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T00:02:00.438 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:02:01.284 [DEBUG] [Thread-137054] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:02:01.284 [DEBUG] [Thread-137054] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:02:01.331 [DEBUG] [Thread-137054] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:02:01.331 [DEBUG] [Thread-137054] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:02:01.340 [DEBUG] [Thread-137054] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:02:01.348 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:02:01.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T00:02:01.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T00:02:01.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:02:01.366 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:02:01.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:02:01.374 [DEBUG] [Thread-137054] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:02:04.622 [DEBUG] [Thread-137056 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:02:19.685 [DEBUG] [Thread-137057 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:02:31.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T00:02:31.396 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T00:02:31.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T00:02:32.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 0, 2, 19), 3.66, 78.41, 0.0, 20.75, 14.63, 0, 0, 0, 2, 0, 0),)
2026-01-01T00:02:32.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 00:02:19
2026-01-01T00:02:32.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T00:02:32.407 [DEBUG] [Thread-137058] [transport.py] [_log()] starting thread (client mode): 0xb95f16c0
2026-01-01T00:02:32.407 [DEBUG] [Thread-137058] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:02:32.426 [DEBUG] [Thread-137058] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T00:02:32.426 [INFO] [Thread-137058] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T00:02:32.430 [DEBUG] [Thread-137058] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:02:32.430 [DEBUG] [Thread-137058] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T00:02:32.430 [DEBUG] [Thread-137058] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:02:32.430 [DEBUG] [Thread-137058] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:02:32.430 [DEBUG] [Thread-137058] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:02:32.430 [DEBUG] [Thread-137058] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:02:32.430 [DEBUG] [Thread-137058] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:02:32.430 [DEBUG] [Thread-137058] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:02:32.430 [DEBUG] [Thread-137058] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:02:32.430 [DEBUG] [Thread-137058] [transport.py] [_log()] client lang: <none>
2026-01-01T00:02:32.430 [DEBUG] [Thread-137058] [transport.py] [_log()] server lang: <none>
2026-01-01T00:02:32.430 [DEBUG] [Thread-137058] [transport.py] [_log()] kex follows: False
2026-01-01T00:02:32.430 [DEBUG] [Thread-137058] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:02:32.430 [DEBUG] [Thread-137058] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:02:32.430 [DEBUG] [Thread-137058] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:02:32.430 [DEBUG] [Thread-137058] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:02:32.430 [DEBUG] [Thread-137058] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:02:32.430 [DEBUG] [Thread-137058] [transport.py] [_log()] Compression: none
2026-01-01T00:02:32.430 [DEBUG] [Thread-137058] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:02:32.437 [DEBUG] [Thread-137058] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:02:32.437 [DEBUG] [Thread-137058] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:02:32.437 [DEBUG] [Thread-137058] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T00:02:32.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T00:02:32.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:02:32.438 [DEBUG] [Thread-137058] [transport.py] [_log()] userauth is OK
2026-01-01T00:02:32.438 [DEBUG] [Thread-137058] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:02:32.438 [DEBUG] [Thread-137058] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:02:32.438 [DEBUG] [Thread-137058] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T00:02:32.438 [DEBUG] [Thread-137058] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:02:32.453 [INFO] [Thread-137058] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:02:32.453 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:02:33.096 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:02:33.097 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:02:33.097 [DEBUG] [Thread-137058] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:02:33.097 [DEBUG] [Thread-137058] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:02:33.097 [DEBUG] [Thread-137058] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T00:02:33.137 [DEBUG] [Thread-137058] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:02:33.137 [DEBUG] [Thread-137058] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:02:33.140 [DEBUG] [Thread-137058] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:02:33.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:02:33.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T00:02:33.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T00:02:33.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T00:02:33.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:02:33.156 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T00:02:33.156 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:02:33.156 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:02:33.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T00:02:33.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.918190 -999.00  +14.80   9.31     81  +11.60 1 2 1 2 1     0    0 2.67 -22.45 Z.... 9.1 9.3 195.5 13.6 15.8 -15.2 15.7 -14.2 15.5 -13.3 15.8 -14.8
2026-01-01T00:02:33.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T00:02:33.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T00:02:33.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.918190
2026-01-01T00:02:33.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T00:02:33.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T00:02:33.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T00:02:33.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T00:02:33.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T00:02:33.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T00:02:19', tmtdew=3.66, humidity=78.41, cloud=0.0, wind=20.75, temperature=14.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:02:20', seeing=1.17, atlas_timestamp='2025-12-31T22:02:11.616', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T00:02:33.157 [DEBUG] [Thread-137058] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:02:33.231 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T00:02:33.242 [DEBUG] [Thread-137061] [transport.py] [_log()] starting thread (client mode): 0xb6ba1b10
2026-01-01T00:02:33.242 [DEBUG] [Thread-137061] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:02:33.257 [DEBUG] [Thread-137061] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T00:02:33.257 [INFO] [Thread-137061] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T00:02:33.264 [DEBUG] [Thread-137061] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:02:33.264 [DEBUG] [Thread-137061] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T00:02:33.264 [DEBUG] [Thread-137061] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:02:33.264 [DEBUG] [Thread-137061] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:02:33.264 [DEBUG] [Thread-137061] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:02:33.264 [DEBUG] [Thread-137061] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:02:33.264 [DEBUG] [Thread-137061] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:02:33.264 [DEBUG] [Thread-137061] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:02:33.264 [DEBUG] [Thread-137061] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:02:33.264 [DEBUG] [Thread-137061] [transport.py] [_log()] client lang: <none>
2026-01-01T00:02:33.264 [DEBUG] [Thread-137061] [transport.py] [_log()] server lang: <none>
2026-01-01T00:02:33.264 [DEBUG] [Thread-137061] [transport.py] [_log()] kex follows: False
2026-01-01T00:02:33.264 [DEBUG] [Thread-137061] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:02:33.264 [DEBUG] [Thread-137061] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:02:33.264 [DEBUG] [Thread-137061] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:02:33.264 [DEBUG] [Thread-137061] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:02:33.264 [DEBUG] [Thread-137061] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:02:33.265 [DEBUG] [Thread-137061] [transport.py] [_log()] Compression: none
2026-01-01T00:02:33.265 [DEBUG] [Thread-137061] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:02:33.322 [DEBUG] [Thread-137061] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:02:33.322 [DEBUG] [Thread-137061] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:02:33.322 [DEBUG] [Thread-137061] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T00:02:33.323 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T00:02:33.323 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:02:33.379 [DEBUG] [Thread-137061] [transport.py] [_log()] userauth is OK
2026-01-01T00:02:33.379 [DEBUG] [Thread-137061] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:02:33.379 [DEBUG] [Thread-137061] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:02:33.379 [DEBUG] [Thread-137061] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T00:02:33.379 [DEBUG] [Thread-137061] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:02:33.397 [INFO] [Thread-137061] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:02:33.397 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T00:02:33.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:02:34.244 [DEBUG] [Thread-137061] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:02:34.244 [DEBUG] [Thread-137061] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:02:34.292 [DEBUG] [Thread-137061] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:02:34.292 [DEBUG] [Thread-137061] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:02:34.303 [DEBUG] [Thread-137061] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:02:34.311 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:02:34.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T00:02:34.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T00:02:34.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:02:34.332 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:02:34.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:02:34.340 [DEBUG] [Thread-137061] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:02:34.714 [DEBUG] [Thread-137063 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:02:49.766 [DEBUG] [Thread-137064 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:02:54.571 [DEBUG] [Thread-137065 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:03:04.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T00:03:04.362 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T00:03:04.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T00:03:04.802 [DEBUG] [Thread-137066 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:03:05.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 0, 2, 52), 3.63, 79.06, 0.0, 19.62, 14.62, 0, 0, 0, 2, 0, 0),)
2026-01-01T00:03:05.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 00:02:52
2026-01-01T00:03:05.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T00:03:05.361 [DEBUG] [Thread-137067] [transport.py] [_log()] starting thread (client mode): 0xbbfcdf30
2026-01-01T00:03:05.361 [DEBUG] [Thread-137067] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:03:05.382 [DEBUG] [Thread-137067] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T00:03:05.382 [INFO] [Thread-137067] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T00:03:05.384 [DEBUG] [Thread-137067] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:03:05.384 [DEBUG] [Thread-137067] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T00:03:05.384 [DEBUG] [Thread-137067] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:03:05.384 [DEBUG] [Thread-137067] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:03:05.384 [DEBUG] [Thread-137067] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:03:05.384 [DEBUG] [Thread-137067] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:03:05.385 [DEBUG] [Thread-137067] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:03:05.385 [DEBUG] [Thread-137067] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:03:05.385 [DEBUG] [Thread-137067] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:03:05.385 [DEBUG] [Thread-137067] [transport.py] [_log()] client lang: <none>
2026-01-01T00:03:05.385 [DEBUG] [Thread-137067] [transport.py] [_log()] server lang: <none>
2026-01-01T00:03:05.385 [DEBUG] [Thread-137067] [transport.py] [_log()] kex follows: False
2026-01-01T00:03:05.385 [DEBUG] [Thread-137067] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:03:05.385 [DEBUG] [Thread-137067] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:03:05.385 [DEBUG] [Thread-137067] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:03:05.385 [DEBUG] [Thread-137067] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:03:05.385 [DEBUG] [Thread-137067] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:03:05.385 [DEBUG] [Thread-137067] [transport.py] [_log()] Compression: none
2026-01-01T00:03:05.385 [DEBUG] [Thread-137067] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:03:05.406 [DEBUG] [Thread-137067] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:03:05.407 [DEBUG] [Thread-137067] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:03:05.408 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T00:03:05.409 [DEBUG] [Thread-137067] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T00:03:05.409 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:03:05.411 [DEBUG] [Thread-137067] [transport.py] [_log()] userauth is OK
2026-01-01T00:03:05.411 [DEBUG] [Thread-137067] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:03:05.411 [DEBUG] [Thread-137067] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:03:05.411 [DEBUG] [Thread-137067] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T00:03:05.411 [DEBUG] [Thread-137067] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:03:05.446 [INFO] [Thread-137067] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:03:05.447 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:03:06.093 [DEBUG] [Thread-137067] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:03:06.093 [DEBUG] [Thread-137067] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:03:06.094 [DEBUG] [Thread-137067] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T00:03:06.134 [DEBUG] [Thread-137067] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:03:06.134 [DEBUG] [Thread-137067] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:03:06.135 [DEBUG] [Thread-137067] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:03:06.148 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:03:06.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T00:03:06.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T00:03:06.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T00:03:06.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:03:06.152 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T00:03:06.152 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:03:06.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:03:06.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T00:03:06.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.918190 -999.00  +14.80   9.31     81  +11.60 1 2 1 2 1     0    0 2.67 -22.45 Z.... 9.1 9.3 195.5 13.6 15.8 -15.2 15.7 -14.2 15.5 -13.3 15.8 -14.8
2026-01-01T00:03:06.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T00:03:06.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T00:03:06.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.918190
2026-01-01T00:03:06.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T00:03:06.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T00:03:06.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T00:03:06.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T00:03:06.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T00:03:06.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T00:02:52', tmtdew=3.63, humidity=79.06, cloud=0.0, wind=19.62, temperature=14.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:02:52', seeing=1.17, atlas_timestamp='2025-12-31T22:02:11.616', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T00:03:06.152 [DEBUG] [Thread-137067] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:03:06.227 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T00:03:06.239 [DEBUG] [Thread-137070] [transport.py] [_log()] starting thread (client mode): 0xb6ba0070
2026-01-01T00:03:06.239 [DEBUG] [Thread-137070] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:03:06.256 [DEBUG] [Thread-137070] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T00:03:06.256 [INFO] [Thread-137070] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T00:03:06.263 [DEBUG] [Thread-137070] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:03:06.263 [DEBUG] [Thread-137070] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T00:03:06.263 [DEBUG] [Thread-137070] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:03:06.263 [DEBUG] [Thread-137070] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:03:06.263 [DEBUG] [Thread-137070] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:03:06.263 [DEBUG] [Thread-137070] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:03:06.263 [DEBUG] [Thread-137070] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:03:06.263 [DEBUG] [Thread-137070] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:03:06.263 [DEBUG] [Thread-137070] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:03:06.264 [DEBUG] [Thread-137070] [transport.py] [_log()] client lang: <none>
2026-01-01T00:03:06.264 [DEBUG] [Thread-137070] [transport.py] [_log()] server lang: <none>
2026-01-01T00:03:06.264 [DEBUG] [Thread-137070] [transport.py] [_log()] kex follows: False
2026-01-01T00:03:06.264 [DEBUG] [Thread-137070] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:03:06.264 [DEBUG] [Thread-137070] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:03:06.264 [DEBUG] [Thread-137070] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:03:06.264 [DEBUG] [Thread-137070] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:03:06.264 [DEBUG] [Thread-137070] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:03:06.264 [DEBUG] [Thread-137070] [transport.py] [_log()] Compression: none
2026-01-01T00:03:06.264 [DEBUG] [Thread-137070] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:03:06.330 [DEBUG] [Thread-137070] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:03:06.330 [DEBUG] [Thread-137070] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:03:06.331 [DEBUG] [Thread-137070] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T00:03:06.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T00:03:06.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:03:06.387 [DEBUG] [Thread-137070] [transport.py] [_log()] userauth is OK
2026-01-01T00:03:06.387 [DEBUG] [Thread-137070] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:03:06.387 [DEBUG] [Thread-137070] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:03:06.387 [DEBUG] [Thread-137070] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T00:03:06.387 [DEBUG] [Thread-137070] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:03:06.402 [INFO] [Thread-137070] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:03:06.403 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T00:03:06.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:03:07.271 [DEBUG] [Thread-137070] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:03:07.271 [DEBUG] [Thread-137070] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:03:07.319 [DEBUG] [Thread-137070] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:03:07.319 [DEBUG] [Thread-137070] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:03:07.328 [DEBUG] [Thread-137070] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:03:07.335 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:03:07.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T00:03:07.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T00:03:07.351 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:03:07.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:03:07.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:03:07.359 [DEBUG] [Thread-137070] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:03:19.834 [DEBUG] [Thread-137072 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:03:33.298 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:03:33.299 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:03:34.884 [DEBUG] [Thread-137073 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:03:37.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T00:03:37.363 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T00:03:37.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T00:03:38.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 0, 3, 24), 3.63, 79.06, 0.0, 19.87, 14.62, 0, 0, 0, 2, 0, 0),)
2026-01-01T00:03:38.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 00:03:24
2026-01-01T00:03:38.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T00:03:38.364 [DEBUG] [Thread-137074] [transport.py] [_log()] starting thread (client mode): 0xb1794550
2026-01-01T00:03:38.364 [DEBUG] [Thread-137074] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:03:38.384 [DEBUG] [Thread-137074] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T00:03:38.384 [INFO] [Thread-137074] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T00:03:38.388 [DEBUG] [Thread-137074] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:03:38.388 [DEBUG] [Thread-137074] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T00:03:38.388 [DEBUG] [Thread-137074] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:03:38.388 [DEBUG] [Thread-137074] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:03:38.388 [DEBUG] [Thread-137074] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:03:38.388 [DEBUG] [Thread-137074] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:03:38.388 [DEBUG] [Thread-137074] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:03:38.388 [DEBUG] [Thread-137074] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:03:38.388 [DEBUG] [Thread-137074] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:03:38.388 [DEBUG] [Thread-137074] [transport.py] [_log()] client lang: <none>
2026-01-01T00:03:38.388 [DEBUG] [Thread-137074] [transport.py] [_log()] server lang: <none>
2026-01-01T00:03:38.388 [DEBUG] [Thread-137074] [transport.py] [_log()] kex follows: False
2026-01-01T00:03:38.388 [DEBUG] [Thread-137074] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:03:38.388 [DEBUG] [Thread-137074] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:03:38.388 [DEBUG] [Thread-137074] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:03:38.388 [DEBUG] [Thread-137074] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:03:38.388 [DEBUG] [Thread-137074] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:03:38.388 [DEBUG] [Thread-137074] [transport.py] [_log()] Compression: none
2026-01-01T00:03:38.389 [DEBUG] [Thread-137074] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:03:38.405 [DEBUG] [Thread-137074] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:03:38.405 [DEBUG] [Thread-137074] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:03:38.406 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T00:03:38.406 [DEBUG] [Thread-137074] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T00:03:38.407 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:03:38.408 [DEBUG] [Thread-137074] [transport.py] [_log()] userauth is OK
2026-01-01T00:03:38.408 [DEBUG] [Thread-137074] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:03:38.408 [DEBUG] [Thread-137074] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:03:38.408 [DEBUG] [Thread-137074] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T00:03:38.408 [DEBUG] [Thread-137074] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:03:38.423 [INFO] [Thread-137074] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:03:38.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:03:39.079 [DEBUG] [Thread-137074] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:03:39.079 [DEBUG] [Thread-137074] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:03:39.080 [DEBUG] [Thread-137074] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T00:03:39.120 [DEBUG] [Thread-137074] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:03:39.120 [DEBUG] [Thread-137074] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:03:39.124 [DEBUG] [Thread-137074] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:03:39.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:03:39.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T00:03:39.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T00:03:39.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T00:03:39.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:03:39.147 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T00:03:39.147 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:03:39.148 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:03:39.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T00:03:39.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.918537 -999.00  +14.80  11.64     80  +11.60 1 2 1 2 1     0    0 2.77 -21.46 .N... 12.1 11.6 191.4 13.8 15.8 -15.0 15.7 -13.9 15.5 -13.2 15.8 -14.8
2026-01-01T00:03:39.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T00:03:39.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T00:03:39.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.918537
2026-01-01T00:03:39.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T00:03:39.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T00:03:39.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T00:03:39.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T00:03:39.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T00:03:39.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T00:03:24', tmtdew=3.63, humidity=79.06, cloud=0.0, wind=19.87, temperature=14.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:03:24', seeing=1.45, atlas_timestamp='2025-12-31T22:02:41.597', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T00:03:39.150 [DEBUG] [Thread-137074] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:03:39.233 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T00:03:39.244 [DEBUG] [Thread-137077] [transport.py] [_log()] starting thread (client mode): 0xb6b614b0
2026-01-01T00:03:39.244 [DEBUG] [Thread-137077] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:03:39.260 [DEBUG] [Thread-137077] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T00:03:39.260 [INFO] [Thread-137077] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T00:03:39.267 [DEBUG] [Thread-137077] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:03:39.268 [DEBUG] [Thread-137077] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T00:03:39.268 [DEBUG] [Thread-137077] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:03:39.268 [DEBUG] [Thread-137077] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:03:39.268 [DEBUG] [Thread-137077] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:03:39.268 [DEBUG] [Thread-137077] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:03:39.268 [DEBUG] [Thread-137077] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:03:39.269 [DEBUG] [Thread-137077] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:03:39.269 [DEBUG] [Thread-137077] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:03:39.269 [DEBUG] [Thread-137077] [transport.py] [_log()] client lang: <none>
2026-01-01T00:03:39.269 [DEBUG] [Thread-137077] [transport.py] [_log()] server lang: <none>
2026-01-01T00:03:39.269 [DEBUG] [Thread-137077] [transport.py] [_log()] kex follows: False
2026-01-01T00:03:39.269 [DEBUG] [Thread-137077] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:03:39.269 [DEBUG] [Thread-137077] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:03:39.269 [DEBUG] [Thread-137077] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:03:39.269 [DEBUG] [Thread-137077] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:03:39.269 [DEBUG] [Thread-137077] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:03:39.269 [DEBUG] [Thread-137077] [transport.py] [_log()] Compression: none
2026-01-01T00:03:39.269 [DEBUG] [Thread-137077] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:03:39.327 [DEBUG] [Thread-137077] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:03:39.328 [DEBUG] [Thread-137077] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:03:39.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T00:03:39.329 [DEBUG] [Thread-137077] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T00:03:39.330 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:03:39.384 [DEBUG] [Thread-137077] [transport.py] [_log()] userauth is OK
2026-01-01T00:03:39.384 [DEBUG] [Thread-137077] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:03:39.385 [DEBUG] [Thread-137077] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:03:39.385 [DEBUG] [Thread-137077] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T00:03:39.385 [DEBUG] [Thread-137077] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:03:39.404 [INFO] [Thread-137077] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:03:39.404 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T00:03:39.405 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:03:40.198 [DEBUG] [Thread-137077] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:03:40.198 [DEBUG] [Thread-137077] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:03:40.246 [DEBUG] [Thread-137077] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:03:40.246 [DEBUG] [Thread-137077] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:03:40.255 [DEBUG] [Thread-137077] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:03:40.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:03:40.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T00:03:40.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T00:03:40.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:03:40.283 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:03:40.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:03:40.291 [DEBUG] [Thread-137077] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:03:49.917 [DEBUG] [Thread-137079 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:03:54.647 [DEBUG] [Thread-137080 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:04:04.956 [DEBUG] [Thread-137081 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:04:10.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T00:04:10.314 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T00:04:10.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T00:04:11.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 0, 3, 56), 3.62, 79.13, 0.0, 16.43, 14.62, 0, 0, 0, 2, 0, 0),)
2026-01-01T00:04:11.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 00:03:56
2026-01-01T00:04:11.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T00:04:11.302 [DEBUG] [Thread-137082] [transport.py] [_log()] starting thread (client mode): 0xb6ba1750
2026-01-01T00:04:11.303 [DEBUG] [Thread-137082] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:04:11.323 [DEBUG] [Thread-137082] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T00:04:11.323 [INFO] [Thread-137082] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T00:04:11.326 [DEBUG] [Thread-137082] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:04:11.326 [DEBUG] [Thread-137082] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T00:04:11.326 [DEBUG] [Thread-137082] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:04:11.326 [DEBUG] [Thread-137082] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:04:11.326 [DEBUG] [Thread-137082] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:04:11.326 [DEBUG] [Thread-137082] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:04:11.326 [DEBUG] [Thread-137082] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:04:11.326 [DEBUG] [Thread-137082] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:04:11.326 [DEBUG] [Thread-137082] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:04:11.326 [DEBUG] [Thread-137082] [transport.py] [_log()] client lang: <none>
2026-01-01T00:04:11.326 [DEBUG] [Thread-137082] [transport.py] [_log()] server lang: <none>
2026-01-01T00:04:11.327 [DEBUG] [Thread-137082] [transport.py] [_log()] kex follows: False
2026-01-01T00:04:11.327 [DEBUG] [Thread-137082] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:04:11.327 [DEBUG] [Thread-137082] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:04:11.327 [DEBUG] [Thread-137082] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:04:11.327 [DEBUG] [Thread-137082] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:04:11.327 [DEBUG] [Thread-137082] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:04:11.327 [DEBUG] [Thread-137082] [transport.py] [_log()] Compression: none
2026-01-01T00:04:11.327 [DEBUG] [Thread-137082] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:04:11.344 [DEBUG] [Thread-137082] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:04:11.345 [DEBUG] [Thread-137082] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:04:11.345 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T00:04:11.345 [DEBUG] [Thread-137082] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T00:04:11.346 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:04:11.347 [DEBUG] [Thread-137082] [transport.py] [_log()] userauth is OK
2026-01-01T00:04:11.348 [DEBUG] [Thread-137082] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:04:11.348 [DEBUG] [Thread-137082] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:04:11.348 [DEBUG] [Thread-137082] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T00:04:11.348 [DEBUG] [Thread-137082] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:04:11.373 [INFO] [Thread-137082] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:04:11.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:04:12.009 [DEBUG] [Thread-137082] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:04:12.010 [DEBUG] [Thread-137082] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:04:12.010 [DEBUG] [Thread-137082] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T00:04:12.051 [DEBUG] [Thread-137082] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:04:12.051 [DEBUG] [Thread-137082] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:04:12.055 [DEBUG] [Thread-137082] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:04:12.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:04:12.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T00:04:12.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T00:04:12.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T00:04:12.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:04:12.077 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T00:04:12.077 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:04:12.077 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:04:12.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T00:04:12.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.918885 -999.00  +14.80   9.73     81  +11.60 1 2 1 2 1     0    0 2.70 -20.46 .N... 7.6 9.7 188.9 14.3 15.8 -14.9 15.7 -14.4 15.5 -13.2 15.8 -14.8
2026-01-01T00:04:12.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T00:04:12.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T00:04:12.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.918885
2026-01-01T00:04:12.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T00:04:12.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T00:04:12.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T00:04:12.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T00:04:12.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T00:04:12.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T00:03:56', tmtdew=3.62, humidity=79.13, cloud=0.0, wind=16.43, temperature=14.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:03:56', seeing=1.45, atlas_timestamp='2025-12-31T22:03:11.664', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T00:04:12.080 [DEBUG] [Thread-137082] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:04:12.164 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T00:04:12.175 [DEBUG] [Thread-137085] [transport.py] [_log()] starting thread (client mode): 0xb957bca0
2026-01-01T00:04:12.176 [DEBUG] [Thread-137085] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:04:12.191 [DEBUG] [Thread-137085] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T00:04:12.191 [INFO] [Thread-137085] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T00:04:12.199 [DEBUG] [Thread-137085] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:04:12.199 [DEBUG] [Thread-137085] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T00:04:12.199 [DEBUG] [Thread-137085] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:04:12.199 [DEBUG] [Thread-137085] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:04:12.199 [DEBUG] [Thread-137085] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:04:12.199 [DEBUG] [Thread-137085] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:04:12.199 [DEBUG] [Thread-137085] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:04:12.199 [DEBUG] [Thread-137085] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:04:12.199 [DEBUG] [Thread-137085] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:04:12.199 [DEBUG] [Thread-137085] [transport.py] [_log()] client lang: <none>
2026-01-01T00:04:12.199 [DEBUG] [Thread-137085] [transport.py] [_log()] server lang: <none>
2026-01-01T00:04:12.199 [DEBUG] [Thread-137085] [transport.py] [_log()] kex follows: False
2026-01-01T00:04:12.199 [DEBUG] [Thread-137085] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:04:12.199 [DEBUG] [Thread-137085] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:04:12.200 [DEBUG] [Thread-137085] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:04:12.200 [DEBUG] [Thread-137085] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:04:12.200 [DEBUG] [Thread-137085] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:04:12.200 [DEBUG] [Thread-137085] [transport.py] [_log()] Compression: none
2026-01-01T00:04:12.200 [DEBUG] [Thread-137085] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:04:12.257 [DEBUG] [Thread-137085] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:04:12.258 [DEBUG] [Thread-137085] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:04:12.258 [DEBUG] [Thread-137085] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T00:04:12.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T00:04:12.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:04:12.316 [DEBUG] [Thread-137085] [transport.py] [_log()] userauth is OK
2026-01-01T00:04:12.317 [DEBUG] [Thread-137085] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:04:12.317 [DEBUG] [Thread-137085] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:04:12.317 [DEBUG] [Thread-137085] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T00:04:12.317 [DEBUG] [Thread-137085] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:04:12.336 [INFO] [Thread-137085] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:04:12.336 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T00:04:12.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:04:13.178 [DEBUG] [Thread-137085] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:04:13.178 [DEBUG] [Thread-137085] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:04:13.227 [DEBUG] [Thread-137085] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:04:13.227 [DEBUG] [Thread-137085] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:04:13.236 [DEBUG] [Thread-137085] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:04:13.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:04:13.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T00:04:13.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T00:04:13.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:04:13.262 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:04:13.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:04:13.271 [DEBUG] [Thread-137085] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:04:19.992 [DEBUG] [Thread-137087 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:04:33.498 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:04:33.499 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:04:35.039 [DEBUG] [Thread-137088 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:04:43.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T00:04:43.294 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T00:04:43.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T00:04:44.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 0, 4, 28), 3.62, 79.13, 0.0, 17.34, 14.6, 0, 0, 0, 2, 0, 0),)
2026-01-01T00:04:44.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 00:04:28
2026-01-01T00:04:44.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T00:04:44.289 [DEBUG] [Thread-137089] [transport.py] [_log()] starting thread (client mode): 0xb6bbd540
2026-01-01T00:04:44.289 [DEBUG] [Thread-137089] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:04:44.309 [DEBUG] [Thread-137089] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T00:04:44.309 [INFO] [Thread-137089] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T00:04:44.313 [DEBUG] [Thread-137089] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:04:44.313 [DEBUG] [Thread-137089] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T00:04:44.313 [DEBUG] [Thread-137089] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:04:44.313 [DEBUG] [Thread-137089] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:04:44.313 [DEBUG] [Thread-137089] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:04:44.313 [DEBUG] [Thread-137089] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:04:44.313 [DEBUG] [Thread-137089] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:04:44.313 [DEBUG] [Thread-137089] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:04:44.313 [DEBUG] [Thread-137089] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:04:44.313 [DEBUG] [Thread-137089] [transport.py] [_log()] client lang: <none>
2026-01-01T00:04:44.313 [DEBUG] [Thread-137089] [transport.py] [_log()] server lang: <none>
2026-01-01T00:04:44.314 [DEBUG] [Thread-137089] [transport.py] [_log()] kex follows: False
2026-01-01T00:04:44.314 [DEBUG] [Thread-137089] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:04:44.314 [DEBUG] [Thread-137089] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:04:44.314 [DEBUG] [Thread-137089] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:04:44.314 [DEBUG] [Thread-137089] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:04:44.314 [DEBUG] [Thread-137089] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:04:44.314 [DEBUG] [Thread-137089] [transport.py] [_log()] Compression: none
2026-01-01T00:04:44.314 [DEBUG] [Thread-137089] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:04:44.333 [DEBUG] [Thread-137089] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:04:44.333 [DEBUG] [Thread-137089] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:04:44.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T00:04:44.334 [DEBUG] [Thread-137089] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T00:04:44.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:04:44.336 [DEBUG] [Thread-137089] [transport.py] [_log()] userauth is OK
2026-01-01T00:04:44.336 [DEBUG] [Thread-137089] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:04:44.336 [DEBUG] [Thread-137089] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:04:44.336 [DEBUG] [Thread-137089] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T00:04:44.337 [DEBUG] [Thread-137089] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:04:44.355 [INFO] [Thread-137089] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:04:44.355 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:04:45.009 [DEBUG] [Thread-137089] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:04:45.009 [DEBUG] [Thread-137089] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:04:45.010 [DEBUG] [Thread-137089] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T00:04:45.050 [DEBUG] [Thread-137089] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:04:45.050 [DEBUG] [Thread-137089] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:04:45.054 [DEBUG] [Thread-137089] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:04:45.067 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:04:45.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T00:04:45.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T00:04:45.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T00:04:45.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:04:45.081 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T00:04:45.082 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:04:45.082 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:04:45.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T00:04:45.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.919579 -999.00  +14.80  15.92     81  +11.60 1 2 1 2 1     0    0 2.81 -18.91 .N... 13.4 15.9 193.2 21.6 15.8 -14.9 15.7 -14.4 15.5 -13.3 15.8 -14.6
2026-01-01T00:04:45.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T00:04:45.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T00:04:45.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.919579
2026-01-01T00:04:45.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T00:04:45.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T00:04:45.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T00:04:45.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T00:04:45.084 [DEBUG] [Thread-137089] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:04:45.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T00:04:45.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T00:04:28', tmtdew=3.62, humidity=79.13, cloud=0.0, wind=17.34, temperature=14.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:04:28', seeing=1.45, atlas_timestamp='2025-12-31T22:04:11.626', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T00:04:45.168 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T00:04:45.179 [DEBUG] [Thread-137092] [transport.py] [_log()] starting thread (client mode): 0xb6bbc460
2026-01-01T00:04:45.179 [DEBUG] [Thread-137092] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:04:45.195 [DEBUG] [Thread-137092] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T00:04:45.195 [INFO] [Thread-137092] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T00:04:45.202 [DEBUG] [Thread-137092] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:04:45.203 [DEBUG] [Thread-137092] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T00:04:45.203 [DEBUG] [Thread-137092] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:04:45.203 [DEBUG] [Thread-137092] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:04:45.203 [DEBUG] [Thread-137092] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:04:45.203 [DEBUG] [Thread-137092] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:04:45.203 [DEBUG] [Thread-137092] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:04:45.203 [DEBUG] [Thread-137092] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:04:45.203 [DEBUG] [Thread-137092] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:04:45.203 [DEBUG] [Thread-137092] [transport.py] [_log()] client lang: <none>
2026-01-01T00:04:45.203 [DEBUG] [Thread-137092] [transport.py] [_log()] server lang: <none>
2026-01-01T00:04:45.203 [DEBUG] [Thread-137092] [transport.py] [_log()] kex follows: False
2026-01-01T00:04:45.203 [DEBUG] [Thread-137092] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:04:45.203 [DEBUG] [Thread-137092] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:04:45.203 [DEBUG] [Thread-137092] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:04:45.203 [DEBUG] [Thread-137092] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:04:45.203 [DEBUG] [Thread-137092] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:04:45.203 [DEBUG] [Thread-137092] [transport.py] [_log()] Compression: none
2026-01-01T00:04:45.203 [DEBUG] [Thread-137092] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:04:45.260 [DEBUG] [Thread-137092] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:04:45.260 [DEBUG] [Thread-137092] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:04:45.261 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T00:04:45.261 [DEBUG] [Thread-137092] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T00:04:45.262 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:04:45.315 [DEBUG] [Thread-137092] [transport.py] [_log()] userauth is OK
2026-01-01T00:04:45.316 [DEBUG] [Thread-137092] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:04:45.316 [DEBUG] [Thread-137092] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:04:45.316 [DEBUG] [Thread-137092] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T00:04:45.316 [DEBUG] [Thread-137092] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:04:45.340 [INFO] [Thread-137092] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:04:45.340 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T00:04:45.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:04:46.180 [DEBUG] [Thread-137092] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:04:46.181 [DEBUG] [Thread-137092] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:04:46.229 [DEBUG] [Thread-137092] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:04:46.229 [DEBUG] [Thread-137092] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:04:46.238 [DEBUG] [Thread-137092] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:04:46.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:04:46.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T00:04:46.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T00:04:46.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:04:46.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:04:46.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:04:46.274 [DEBUG] [Thread-137092] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:04:50.074 [DEBUG] [Thread-137094 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:04:54.736 [DEBUG] [Thread-137095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:05:05.126 [DEBUG] [Thread-137096 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:05:16.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T00:05:16.296 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T00:05:16.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T00:05:17.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 0, 4, 28), 3.62, 79.13, 0.0, 17.34, 14.6, 0, 0, 0, 2, 0, 0),)
2026-01-01T00:05:17.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 00:04:28
2026-01-01T00:05:17.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T00:05:17.300 [DEBUG] [Thread-137097] [transport.py] [_log()] starting thread (client mode): 0xb6bbd7e0
2026-01-01T00:05:17.300 [DEBUG] [Thread-137097] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:05:17.321 [DEBUG] [Thread-137097] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T00:05:17.321 [INFO] [Thread-137097] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T00:05:17.325 [DEBUG] [Thread-137097] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:05:17.325 [DEBUG] [Thread-137097] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T00:05:17.325 [DEBUG] [Thread-137097] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:05:17.325 [DEBUG] [Thread-137097] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:05:17.325 [DEBUG] [Thread-137097] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:05:17.325 [DEBUG] [Thread-137097] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:05:17.325 [DEBUG] [Thread-137097] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:05:17.325 [DEBUG] [Thread-137097] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:05:17.325 [DEBUG] [Thread-137097] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:05:17.325 [DEBUG] [Thread-137097] [transport.py] [_log()] client lang: <none>
2026-01-01T00:05:17.325 [DEBUG] [Thread-137097] [transport.py] [_log()] server lang: <none>
2026-01-01T00:05:17.325 [DEBUG] [Thread-137097] [transport.py] [_log()] kex follows: False
2026-01-01T00:05:17.325 [DEBUG] [Thread-137097] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:05:17.325 [DEBUG] [Thread-137097] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:05:17.325 [DEBUG] [Thread-137097] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:05:17.326 [DEBUG] [Thread-137097] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:05:17.326 [DEBUG] [Thread-137097] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:05:17.326 [DEBUG] [Thread-137097] [transport.py] [_log()] Compression: none
2026-01-01T00:05:17.326 [DEBUG] [Thread-137097] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:05:17.343 [DEBUG] [Thread-137097] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:05:17.344 [DEBUG] [Thread-137097] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:05:17.344 [DEBUG] [Thread-137097] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T00:05:17.344 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T00:05:17.345 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:05:17.346 [DEBUG] [Thread-137097] [transport.py] [_log()] userauth is OK
2026-01-01T00:05:17.346 [DEBUG] [Thread-137097] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:05:17.347 [DEBUG] [Thread-137097] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:05:17.347 [DEBUG] [Thread-137097] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T00:05:17.347 [DEBUG] [Thread-137097] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:05:17.362 [INFO] [Thread-137097] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:05:17.362 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:05:17.974 [DEBUG] [Thread-137097] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:05:17.974 [DEBUG] [Thread-137097] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:05:17.974 [DEBUG] [Thread-137097] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T00:05:18.015 [DEBUG] [Thread-137097] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:05:18.015 [DEBUG] [Thread-137097] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:05:18.018 [DEBUG] [Thread-137097] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:05:18.030 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:05:18.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T00:05:18.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T00:05:18.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T00:05:18.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:05:18.043 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T00:05:18.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:05:18.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:05:18.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T00:05:18.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.919926 -999.00  +14.80  13.10     81  +11.60 1 2 1 2 1     0    0 2.72 -18.08 .N... 10.5 13.1 201.0 21.3 15.8 -14.8 15.6 -14.2 15.5 -13.2 15.8 -14.3
2026-01-01T00:05:18.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T00:05:18.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T00:05:18.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.919926
2026-01-01T00:05:18.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T00:05:18.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T00:05:18.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T00:05:18.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T00:05:18.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T00:05:18.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T00:04:28', tmtdew=3.62, humidity=79.13, cloud=0.0, wind=17.34, temperature=14.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:05:00', seeing=1.26, atlas_timestamp='2025-12-31T22:04:41.606', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T00:05:18.046 [DEBUG] [Thread-137097] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:05:18.120 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T00:05:18.132 [DEBUG] [Thread-137100] [transport.py] [_log()] starting thread (client mode): 0xb6bbe2c0
2026-01-01T00:05:18.132 [DEBUG] [Thread-137100] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:05:18.147 [DEBUG] [Thread-137100] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T00:05:18.148 [INFO] [Thread-137100] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T00:05:18.155 [DEBUG] [Thread-137100] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:05:18.155 [DEBUG] [Thread-137100] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T00:05:18.155 [DEBUG] [Thread-137100] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:05:18.155 [DEBUG] [Thread-137100] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:05:18.155 [DEBUG] [Thread-137100] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:05:18.156 [DEBUG] [Thread-137100] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:05:18.156 [DEBUG] [Thread-137100] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:05:18.156 [DEBUG] [Thread-137100] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:05:18.156 [DEBUG] [Thread-137100] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:05:18.156 [DEBUG] [Thread-137100] [transport.py] [_log()] client lang: <none>
2026-01-01T00:05:18.156 [DEBUG] [Thread-137100] [transport.py] [_log()] server lang: <none>
2026-01-01T00:05:18.156 [DEBUG] [Thread-137100] [transport.py] [_log()] kex follows: False
2026-01-01T00:05:18.156 [DEBUG] [Thread-137100] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:05:18.156 [DEBUG] [Thread-137100] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:05:18.157 [DEBUG] [Thread-137100] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:05:18.157 [DEBUG] [Thread-137100] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:05:18.157 [DEBUG] [Thread-137100] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:05:18.157 [DEBUG] [Thread-137100] [transport.py] [_log()] Compression: none
2026-01-01T00:05:18.157 [DEBUG] [Thread-137100] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:05:18.216 [DEBUG] [Thread-137100] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:05:18.216 [DEBUG] [Thread-137100] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:05:18.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T00:05:18.217 [DEBUG] [Thread-137100] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T00:05:18.218 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:05:18.272 [DEBUG] [Thread-137100] [transport.py] [_log()] userauth is OK
2026-01-01T00:05:18.272 [DEBUG] [Thread-137100] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:05:18.273 [DEBUG] [Thread-137100] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:05:18.273 [DEBUG] [Thread-137100] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T00:05:18.273 [DEBUG] [Thread-137100] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:05:18.291 [INFO] [Thread-137100] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:05:18.291 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T00:05:18.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:05:19.139 [DEBUG] [Thread-137100] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:05:19.139 [DEBUG] [Thread-137100] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:05:19.187 [DEBUG] [Thread-137100] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:05:19.187 [DEBUG] [Thread-137100] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:05:19.197 [DEBUG] [Thread-137100] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:05:19.206 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:05:19.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T00:05:19.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T00:05:19.224 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:05:19.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:05:19.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:05:19.233 [DEBUG] [Thread-137100] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:05:20.157 [DEBUG] [Thread-137102 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:05:33.702 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:05:33.703 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:05:35.206 [DEBUG] [Thread-137103 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:05:49.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T00:05:49.256 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T00:05:49.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T00:05:49.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 0, 5, 32), 3.62, 79.11, 0.0, 18.93, 14.65, 0, 0, 0, 2, 0, 0),)
2026-01-01T00:05:49.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 00:05:32
2026-01-01T00:05:50.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T00:05:50.237 [DEBUG] [Thread-137104] [transport.py] [_log()] starting thread (client mode): 0xb95784c0
2026-01-01T00:05:50.238 [DEBUG] [Thread-137104] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:05:50.243 [DEBUG] [Thread-137105 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:05:50.257 [DEBUG] [Thread-137104] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T00:05:50.257 [INFO] [Thread-137104] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T00:05:50.260 [DEBUG] [Thread-137104] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:05:50.260 [DEBUG] [Thread-137104] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T00:05:50.261 [DEBUG] [Thread-137104] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:05:50.261 [DEBUG] [Thread-137104] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:05:50.261 [DEBUG] [Thread-137104] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:05:50.261 [DEBUG] [Thread-137104] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:05:50.261 [DEBUG] [Thread-137104] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:05:50.261 [DEBUG] [Thread-137104] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:05:50.261 [DEBUG] [Thread-137104] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:05:50.261 [DEBUG] [Thread-137104] [transport.py] [_log()] client lang: <none>
2026-01-01T00:05:50.261 [DEBUG] [Thread-137104] [transport.py] [_log()] server lang: <none>
2026-01-01T00:05:50.261 [DEBUG] [Thread-137104] [transport.py] [_log()] kex follows: False
2026-01-01T00:05:50.261 [DEBUG] [Thread-137104] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:05:50.261 [DEBUG] [Thread-137104] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:05:50.262 [DEBUG] [Thread-137104] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:05:50.262 [DEBUG] [Thread-137104] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:05:50.262 [DEBUG] [Thread-137104] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:05:50.262 [DEBUG] [Thread-137104] [transport.py] [_log()] Compression: none
2026-01-01T00:05:50.262 [DEBUG] [Thread-137104] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:05:50.280 [DEBUG] [Thread-137104] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:05:50.281 [DEBUG] [Thread-137104] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:05:50.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T00:05:50.283 [DEBUG] [Thread-137104] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T00:05:50.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:05:50.285 [DEBUG] [Thread-137104] [transport.py] [_log()] userauth is OK
2026-01-01T00:05:50.286 [DEBUG] [Thread-137104] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:05:50.286 [DEBUG] [Thread-137104] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:05:50.286 [DEBUG] [Thread-137104] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T00:05:50.286 [DEBUG] [Thread-137104] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:05:50.307 [INFO] [Thread-137104] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:05:50.308 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:05:51.094 [DEBUG] [Thread-137104] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:05:51.094 [DEBUG] [Thread-137104] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:05:51.095 [DEBUG] [Thread-137104] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T00:05:51.135 [DEBUG] [Thread-137104] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:05:51.135 [DEBUG] [Thread-137104] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:05:51.139 [DEBUG] [Thread-137104] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:05:51.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:05:51.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T00:05:51.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T00:05:51.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T00:05:51.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:05:51.163 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T00:05:51.164 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:05:51.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:05:51.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T00:05:51.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.920273 -999.00  +14.80   9.55     81  +11.60 1 2 1 2 1     0    0 2.79 -18.00 .N... 5.9 9.6 207.3 22.0 15.8 -14.9 15.6 -14.0 15.5 -13.2 15.8 -14.3
2026-01-01T00:05:51.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T00:05:51.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T00:05:51.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.920273
2026-01-01T00:05:51.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T00:05:51.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T00:05:51.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T00:05:51.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T00:05:51.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T00:05:51.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T00:05:32', tmtdew=3.62, humidity=79.11, cloud=0.0, wind=18.93, temperature=14.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:05:32', seeing=1.26, atlas_timestamp='2025-12-31T22:05:11.587', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T00:05:51.166 [DEBUG] [Thread-137104] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:05:51.250 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T00:05:51.262 [DEBUG] [Thread-137108] [transport.py] [_log()] starting thread (client mode): 0xb957b640
2026-01-01T00:05:51.262 [DEBUG] [Thread-137108] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:05:51.279 [DEBUG] [Thread-137108] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T00:05:51.279 [INFO] [Thread-137108] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T00:05:51.286 [DEBUG] [Thread-137108] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:05:51.287 [DEBUG] [Thread-137108] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T00:05:51.287 [DEBUG] [Thread-137108] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:05:51.287 [DEBUG] [Thread-137108] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:05:51.287 [DEBUG] [Thread-137108] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:05:51.287 [DEBUG] [Thread-137108] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:05:51.287 [DEBUG] [Thread-137108] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:05:51.287 [DEBUG] [Thread-137108] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:05:51.287 [DEBUG] [Thread-137108] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:05:51.288 [DEBUG] [Thread-137108] [transport.py] [_log()] client lang: <none>
2026-01-01T00:05:51.288 [DEBUG] [Thread-137108] [transport.py] [_log()] server lang: <none>
2026-01-01T00:05:51.288 [DEBUG] [Thread-137108] [transport.py] [_log()] kex follows: False
2026-01-01T00:05:51.288 [DEBUG] [Thread-137108] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:05:51.288 [DEBUG] [Thread-137108] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:05:51.288 [DEBUG] [Thread-137108] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:05:51.288 [DEBUG] [Thread-137108] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:05:51.289 [DEBUG] [Thread-137108] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:05:51.289 [DEBUG] [Thread-137108] [transport.py] [_log()] Compression: none
2026-01-01T00:05:51.290 [DEBUG] [Thread-137108] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:05:51.344 [DEBUG] [Thread-137108] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:05:51.344 [DEBUG] [Thread-137108] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:05:51.345 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T00:05:51.346 [DEBUG] [Thread-137108] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T00:05:51.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:05:51.400 [DEBUG] [Thread-137108] [transport.py] [_log()] userauth is OK
2026-01-01T00:05:51.400 [DEBUG] [Thread-137108] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:05:51.401 [DEBUG] [Thread-137108] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:05:51.401 [DEBUG] [Thread-137108] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T00:05:51.401 [DEBUG] [Thread-137108] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:05:51.422 [INFO] [Thread-137108] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:05:51.422 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T00:05:51.423 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:05:52.261 [DEBUG] [Thread-137108] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:05:52.261 [DEBUG] [Thread-137108] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:05:52.309 [DEBUG] [Thread-137108] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:05:52.309 [DEBUG] [Thread-137108] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:05:52.318 [DEBUG] [Thread-137108] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:05:52.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:05:52.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T00:05:52.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T00:05:52.345 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:05:52.345 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:05:52.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:05:52.354 [DEBUG] [Thread-137108] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:05:54.809 [DEBUG] [Thread-137110 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:06:05.274 [DEBUG] [Thread-137111 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:06:20.316 [DEBUG] [Thread-137112 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:06:22.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T00:06:22.376 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T00:06:22.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T00:06:23.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 0, 6, 4), 3.63, 79.08, 0.0, 20.05, 14.62, 0, 0, 0, 2, 0, 0),)
2026-01-01T00:06:23.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 00:06:04
2026-01-01T00:06:23.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T00:06:23.388 [DEBUG] [Thread-137113] [transport.py] [_log()] starting thread (client mode): 0xb6bbf700
2026-01-01T00:06:23.389 [DEBUG] [Thread-137113] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:06:23.408 [DEBUG] [Thread-137113] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T00:06:23.408 [INFO] [Thread-137113] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T00:06:23.411 [DEBUG] [Thread-137113] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:06:23.411 [DEBUG] [Thread-137113] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T00:06:23.411 [DEBUG] [Thread-137113] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:06:23.411 [DEBUG] [Thread-137113] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:06:23.411 [DEBUG] [Thread-137113] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:06:23.411 [DEBUG] [Thread-137113] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:06:23.411 [DEBUG] [Thread-137113] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:06:23.411 [DEBUG] [Thread-137113] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:06:23.411 [DEBUG] [Thread-137113] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:06:23.411 [DEBUG] [Thread-137113] [transport.py] [_log()] client lang: <none>
2026-01-01T00:06:23.412 [DEBUG] [Thread-137113] [transport.py] [_log()] server lang: <none>
2026-01-01T00:06:23.412 [DEBUG] [Thread-137113] [transport.py] [_log()] kex follows: False
2026-01-01T00:06:23.412 [DEBUG] [Thread-137113] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:06:23.412 [DEBUG] [Thread-137113] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:06:23.412 [DEBUG] [Thread-137113] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:06:23.412 [DEBUG] [Thread-137113] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:06:23.412 [DEBUG] [Thread-137113] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:06:23.412 [DEBUG] [Thread-137113] [transport.py] [_log()] Compression: none
2026-01-01T00:06:23.412 [DEBUG] [Thread-137113] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:06:23.419 [DEBUG] [Thread-137113] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:06:23.419 [DEBUG] [Thread-137113] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:06:23.419 [DEBUG] [Thread-137113] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T00:06:23.419 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T00:06:23.419 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:06:23.420 [DEBUG] [Thread-137113] [transport.py] [_log()] userauth is OK
2026-01-01T00:06:23.420 [DEBUG] [Thread-137113] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:06:23.420 [DEBUG] [Thread-137113] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:06:23.420 [DEBUG] [Thread-137113] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T00:06:23.420 [DEBUG] [Thread-137113] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:06:23.429 [INFO] [Thread-137113] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:06:23.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:06:24.033 [DEBUG] [Thread-137113] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:06:24.033 [DEBUG] [Thread-137113] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:06:24.033 [DEBUG] [Thread-137113] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T00:06:24.074 [DEBUG] [Thread-137113] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:06:24.074 [DEBUG] [Thread-137113] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:06:24.077 [DEBUG] [Thread-137113] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:06:24.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:06:24.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T00:06:24.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T00:06:24.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T00:06:24.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:06:24.096 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T00:06:24.096 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:06:24.096 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:06:24.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T00:06:24.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.920621 -999.00  +14.80  14.28     81  +11.60 1 2 1 2 1     0    0 2.77 -18.49 .N... 16.2 14.3 212.7 21.9 15.8 -14.8 15.7 -14.3 15.4 -13.3 15.8 -14.3
2026-01-01T00:06:24.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T00:06:24.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T00:06:24.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.920621
2026-01-01T00:06:24.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T00:06:24.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T00:06:24.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T00:06:24.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T00:06:24.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T00:06:24.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T00:06:04', tmtdew=3.63, humidity=79.08, cloud=0.0, wind=20.05, temperature=14.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:06:04', seeing=1.26, atlas_timestamp='2025-12-31T22:05:41.654', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T00:06:24.097 [DEBUG] [Thread-137113] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:06:24.171 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T00:06:24.182 [DEBUG] [Thread-137116] [transport.py] [_log()] starting thread (client mode): 0xb6bbc940
2026-01-01T00:06:24.182 [DEBUG] [Thread-137116] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:06:24.197 [DEBUG] [Thread-137116] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T00:06:24.197 [INFO] [Thread-137116] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T00:06:24.204 [DEBUG] [Thread-137116] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:06:24.204 [DEBUG] [Thread-137116] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T00:06:24.204 [DEBUG] [Thread-137116] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:06:24.204 [DEBUG] [Thread-137116] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:06:24.204 [DEBUG] [Thread-137116] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:06:24.204 [DEBUG] [Thread-137116] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:06:24.204 [DEBUG] [Thread-137116] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:06:24.205 [DEBUG] [Thread-137116] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:06:24.205 [DEBUG] [Thread-137116] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:06:24.205 [DEBUG] [Thread-137116] [transport.py] [_log()] client lang: <none>
2026-01-01T00:06:24.205 [DEBUG] [Thread-137116] [transport.py] [_log()] server lang: <none>
2026-01-01T00:06:24.205 [DEBUG] [Thread-137116] [transport.py] [_log()] kex follows: False
2026-01-01T00:06:24.205 [DEBUG] [Thread-137116] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:06:24.205 [DEBUG] [Thread-137116] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:06:24.205 [DEBUG] [Thread-137116] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:06:24.205 [DEBUG] [Thread-137116] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:06:24.205 [DEBUG] [Thread-137116] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:06:24.205 [DEBUG] [Thread-137116] [transport.py] [_log()] Compression: none
2026-01-01T00:06:24.205 [DEBUG] [Thread-137116] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:06:24.262 [DEBUG] [Thread-137116] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:06:24.262 [DEBUG] [Thread-137116] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:06:24.262 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T00:06:24.262 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:06:24.262 [DEBUG] [Thread-137116] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T00:06:24.319 [DEBUG] [Thread-137116] [transport.py] [_log()] userauth is OK
2026-01-01T00:06:24.319 [DEBUG] [Thread-137116] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:06:24.319 [DEBUG] [Thread-137116] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:06:24.319 [DEBUG] [Thread-137116] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T00:06:24.319 [DEBUG] [Thread-137116] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:06:24.337 [INFO] [Thread-137116] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:06:24.337 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T00:06:24.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:06:25.231 [DEBUG] [Thread-137116] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:06:25.232 [DEBUG] [Thread-137116] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:06:25.279 [DEBUG] [Thread-137116] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:06:25.280 [DEBUG] [Thread-137116] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:06:25.288 [DEBUG] [Thread-137116] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:06:25.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:06:25.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T00:06:25.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T00:06:25.312 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:06:25.312 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:06:25.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:06:25.320 [DEBUG] [Thread-137116] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:06:33.904 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:06:33.905 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:06:35.349 [DEBUG] [Thread-137118 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:06:50.395 [DEBUG] [Thread-137119 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:06:54.885 [DEBUG] [Thread-137120 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:06:55.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T00:06:55.343 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T00:06:55.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T00:06:56.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 0, 6, 36), 3.59, 79.03, 0.0, 16.71, 14.55, 0, 0, 0, 2, 0, 0),)
2026-01-01T00:06:56.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 00:06:36
2026-01-01T00:06:56.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T00:06:56.358 [DEBUG] [Thread-137121] [transport.py] [_log()] starting thread (client mode): 0xb1794550
2026-01-01T00:06:56.358 [DEBUG] [Thread-137121] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:06:56.388 [DEBUG] [Thread-137121] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T00:06:56.388 [INFO] [Thread-137121] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T00:06:56.390 [DEBUG] [Thread-137121] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:06:56.390 [DEBUG] [Thread-137121] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T00:06:56.390 [DEBUG] [Thread-137121] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:06:56.390 [DEBUG] [Thread-137121] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:06:56.390 [DEBUG] [Thread-137121] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:06:56.390 [DEBUG] [Thread-137121] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:06:56.390 [DEBUG] [Thread-137121] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:06:56.390 [DEBUG] [Thread-137121] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:06:56.390 [DEBUG] [Thread-137121] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:06:56.390 [DEBUG] [Thread-137121] [transport.py] [_log()] client lang: <none>
2026-01-01T00:06:56.390 [DEBUG] [Thread-137121] [transport.py] [_log()] server lang: <none>
2026-01-01T00:06:56.390 [DEBUG] [Thread-137121] [transport.py] [_log()] kex follows: False
2026-01-01T00:06:56.390 [DEBUG] [Thread-137121] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:06:56.390 [DEBUG] [Thread-137121] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:06:56.390 [DEBUG] [Thread-137121] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:06:56.390 [DEBUG] [Thread-137121] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:06:56.390 [DEBUG] [Thread-137121] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:06:56.390 [DEBUG] [Thread-137121] [transport.py] [_log()] Compression: none
2026-01-01T00:06:56.390 [DEBUG] [Thread-137121] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:06:56.403 [DEBUG] [Thread-137121] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:06:56.403 [DEBUG] [Thread-137121] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:06:56.403 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T00:06:56.403 [DEBUG] [Thread-137121] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T00:06:56.403 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:06:56.405 [DEBUG] [Thread-137121] [transport.py] [_log()] userauth is OK
2026-01-01T00:06:56.405 [DEBUG] [Thread-137121] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:06:56.405 [DEBUG] [Thread-137121] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:06:56.405 [DEBUG] [Thread-137121] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T00:06:56.405 [DEBUG] [Thread-137121] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:06:56.420 [INFO] [Thread-137121] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:06:56.420 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:06:57.248 [DEBUG] [Thread-137121] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:06:57.248 [DEBUG] [Thread-137121] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:06:57.249 [DEBUG] [Thread-137121] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T00:06:57.289 [DEBUG] [Thread-137121] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:06:57.289 [DEBUG] [Thread-137121] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:06:57.292 [DEBUG] [Thread-137121] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:06:57.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:06:57.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T00:06:57.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T00:06:57.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T00:06:57.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:06:57.318 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T00:06:57.318 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:06:57.318 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:06:57.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T00:06:57.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.920968 -999.00  +14.80  14.56     81  +11.60 1 2 1 2 1     0    0 2.79 -18.23 ...S. 16.0 14.6 196.4 18.5 15.8 -14.9 15.7 -14.3 15.5 -13.3 15.8 -14.2
2026-01-01T00:06:57.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T00:06:57.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T00:06:57.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.920968
2026-01-01T00:06:57.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T00:06:57.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T00:06:57.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T00:06:57.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T00:06:57.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T00:06:57.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T00:06:36', tmtdew=3.59, humidity=79.03, cloud=0.0, wind=16.71, temperature=14.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:06:36', seeing=1.26, atlas_timestamp='2025-12-31T22:06:11.635', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T00:06:57.321 [DEBUG] [Thread-137121] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:06:57.405 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T00:06:57.417 [DEBUG] [Thread-137124] [transport.py] [_log()] starting thread (client mode): 0xb1796440
2026-01-01T00:06:57.417 [DEBUG] [Thread-137124] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:06:57.433 [DEBUG] [Thread-137124] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T00:06:57.433 [INFO] [Thread-137124] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T00:06:57.441 [DEBUG] [Thread-137124] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:06:57.441 [DEBUG] [Thread-137124] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T00:06:57.441 [DEBUG] [Thread-137124] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:06:57.441 [DEBUG] [Thread-137124] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:06:57.441 [DEBUG] [Thread-137124] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:06:57.441 [DEBUG] [Thread-137124] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:06:57.441 [DEBUG] [Thread-137124] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:06:57.441 [DEBUG] [Thread-137124] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:06:57.441 [DEBUG] [Thread-137124] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:06:57.441 [DEBUG] [Thread-137124] [transport.py] [_log()] client lang: <none>
2026-01-01T00:06:57.442 [DEBUG] [Thread-137124] [transport.py] [_log()] server lang: <none>
2026-01-01T00:06:57.442 [DEBUG] [Thread-137124] [transport.py] [_log()] kex follows: False
2026-01-01T00:06:57.442 [DEBUG] [Thread-137124] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:06:57.442 [DEBUG] [Thread-137124] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:06:57.442 [DEBUG] [Thread-137124] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:06:57.442 [DEBUG] [Thread-137124] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:06:57.442 [DEBUG] [Thread-137124] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:06:57.442 [DEBUG] [Thread-137124] [transport.py] [_log()] Compression: none
2026-01-01T00:06:57.442 [DEBUG] [Thread-137124] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:06:57.499 [DEBUG] [Thread-137124] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:06:57.500 [DEBUG] [Thread-137124] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:06:57.501 [DEBUG] [Thread-137124] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T00:06:57.501 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T00:06:57.502 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:06:57.556 [DEBUG] [Thread-137124] [transport.py] [_log()] userauth is OK
2026-01-01T00:06:57.556 [DEBUG] [Thread-137124] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:06:57.557 [DEBUG] [Thread-137124] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:06:57.557 [DEBUG] [Thread-137124] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T00:06:57.557 [DEBUG] [Thread-137124] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:06:57.576 [INFO] [Thread-137124] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:06:57.577 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T00:06:57.577 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:06:58.429 [DEBUG] [Thread-137124] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:06:58.429 [DEBUG] [Thread-137124] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:06:58.477 [DEBUG] [Thread-137124] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:06:58.477 [DEBUG] [Thread-137124] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:06:58.487 [DEBUG] [Thread-137124] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:06:58.497 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:06:58.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T00:06:58.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T00:06:58.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:06:58.513 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:06:58.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:06:58.523 [DEBUG] [Thread-137124] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:07:05.426 [DEBUG] [Thread-137126 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:07:20.465 [DEBUG] [Thread-137127 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:07:28.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T00:07:28.544 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T00:07:28.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T00:07:29.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 0, 7, 8), 3.58, 79.08, 0.0, 18.72, 14.58, 0, 0, 0, 2, 0, 0),)
2026-01-01T00:07:29.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 00:07:08
2026-01-01T00:07:29.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T00:07:29.530 [DEBUG] [Thread-137128] [transport.py] [_log()] starting thread (client mode): 0xb17969b0
2026-01-01T00:07:29.531 [DEBUG] [Thread-137128] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:07:29.551 [DEBUG] [Thread-137128] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T00:07:29.551 [INFO] [Thread-137128] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T00:07:29.555 [DEBUG] [Thread-137128] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:07:29.555 [DEBUG] [Thread-137128] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T00:07:29.555 [DEBUG] [Thread-137128] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:07:29.555 [DEBUG] [Thread-137128] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:07:29.555 [DEBUG] [Thread-137128] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:07:29.555 [DEBUG] [Thread-137128] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:07:29.556 [DEBUG] [Thread-137128] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:07:29.556 [DEBUG] [Thread-137128] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:07:29.556 [DEBUG] [Thread-137128] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:07:29.556 [DEBUG] [Thread-137128] [transport.py] [_log()] client lang: <none>
2026-01-01T00:07:29.556 [DEBUG] [Thread-137128] [transport.py] [_log()] server lang: <none>
2026-01-01T00:07:29.556 [DEBUG] [Thread-137128] [transport.py] [_log()] kex follows: False
2026-01-01T00:07:29.556 [DEBUG] [Thread-137128] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:07:29.556 [DEBUG] [Thread-137128] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:07:29.556 [DEBUG] [Thread-137128] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:07:29.556 [DEBUG] [Thread-137128] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:07:29.556 [DEBUG] [Thread-137128] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:07:29.556 [DEBUG] [Thread-137128] [transport.py] [_log()] Compression: none
2026-01-01T00:07:29.556 [DEBUG] [Thread-137128] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:07:29.576 [DEBUG] [Thread-137128] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:07:29.577 [DEBUG] [Thread-137128] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:07:29.577 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T00:07:29.578 [DEBUG] [Thread-137128] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T00:07:29.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:07:29.580 [DEBUG] [Thread-137128] [transport.py] [_log()] userauth is OK
2026-01-01T00:07:29.580 [DEBUG] [Thread-137128] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:07:29.580 [DEBUG] [Thread-137128] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:07:29.580 [DEBUG] [Thread-137128] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T00:07:29.580 [DEBUG] [Thread-137128] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:07:29.616 [INFO] [Thread-137128] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:07:29.616 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:07:30.263 [DEBUG] [Thread-137128] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:07:30.263 [DEBUG] [Thread-137128] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:07:30.263 [DEBUG] [Thread-137128] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T00:07:30.304 [DEBUG] [Thread-137128] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:07:30.304 [DEBUG] [Thread-137128] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:07:30.308 [DEBUG] [Thread-137128] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:07:30.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:07:30.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T00:07:30.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T00:07:30.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T00:07:30.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:07:30.332 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T00:07:30.333 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:07:30.333 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:07:30.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T00:07:30.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.921315 -999.00  +14.80  10.53     81  +11.60 1 2 1 2 1     0    0 2.78 -15.99 ...S. 13.2 10.5 202.4 17.7 15.8 -14.9 15.7 -14.5 15.4 -13.4 15.8 -14.2
2026-01-01T00:07:30.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T00:07:30.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T00:07:30.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.921315
2026-01-01T00:07:30.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T00:07:30.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T00:07:30.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T00:07:30.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T00:07:30.335 [DEBUG] [Thread-137128] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:07:30.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T00:07:30.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T00:07:08', tmtdew=3.58, humidity=79.08, cloud=0.0, wind=18.72, temperature=14.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:07:08', seeing=1.26, atlas_timestamp='2025-12-31T22:06:41.616', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T00:07:30.419 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T00:07:30.434 [DEBUG] [Thread-137131] [transport.py] [_log()] starting thread (client mode): 0xb6bbedd0
2026-01-01T00:07:30.434 [DEBUG] [Thread-137131] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:07:30.451 [DEBUG] [Thread-137131] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T00:07:30.451 [INFO] [Thread-137131] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T00:07:30.458 [DEBUG] [Thread-137131] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:07:30.459 [DEBUG] [Thread-137131] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T00:07:30.459 [DEBUG] [Thread-137131] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:07:30.459 [DEBUG] [Thread-137131] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:07:30.459 [DEBUG] [Thread-137131] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:07:30.459 [DEBUG] [Thread-137131] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:07:30.459 [DEBUG] [Thread-137131] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:07:30.459 [DEBUG] [Thread-137131] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:07:30.459 [DEBUG] [Thread-137131] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:07:30.459 [DEBUG] [Thread-137131] [transport.py] [_log()] client lang: <none>
2026-01-01T00:07:30.459 [DEBUG] [Thread-137131] [transport.py] [_log()] server lang: <none>
2026-01-01T00:07:30.459 [DEBUG] [Thread-137131] [transport.py] [_log()] kex follows: False
2026-01-01T00:07:30.459 [DEBUG] [Thread-137131] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:07:30.459 [DEBUG] [Thread-137131] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:07:30.460 [DEBUG] [Thread-137131] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:07:30.460 [DEBUG] [Thread-137131] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:07:30.460 [DEBUG] [Thread-137131] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:07:30.460 [DEBUG] [Thread-137131] [transport.py] [_log()] Compression: none
2026-01-01T00:07:30.460 [DEBUG] [Thread-137131] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:07:30.521 [DEBUG] [Thread-137131] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:07:30.522 [DEBUG] [Thread-137131] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:07:30.522 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T00:07:30.523 [DEBUG] [Thread-137131] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T00:07:30.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:07:30.580 [DEBUG] [Thread-137131] [transport.py] [_log()] userauth is OK
2026-01-01T00:07:30.580 [DEBUG] [Thread-137131] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:07:30.580 [DEBUG] [Thread-137131] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:07:30.580 [DEBUG] [Thread-137131] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T00:07:30.580 [DEBUG] [Thread-137131] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:07:30.600 [INFO] [Thread-137131] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:07:30.600 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T00:07:30.601 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:07:31.451 [DEBUG] [Thread-137131] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:07:31.451 [DEBUG] [Thread-137131] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:07:31.499 [DEBUG] [Thread-137131] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:07:31.499 [DEBUG] [Thread-137131] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:07:31.509 [DEBUG] [Thread-137131] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:07:31.518 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:07:31.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T00:07:31.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T00:07:31.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:07:31.537 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:07:31.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:07:31.546 [DEBUG] [Thread-137131] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:07:34.107 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:07:34.108 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:07:35.499 [DEBUG] [Thread-137133 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:07:50.548 [DEBUG] [Thread-137134 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:07:54.952 [DEBUG] [Thread-137135 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:08:01.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T00:08:01.559 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T00:08:01.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T00:08:02.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 0, 7, 40), 3.57, 79.13, 0.0, 20.4, 14.67, 0, 0, 0, 2, 0, 0),)
2026-01-01T00:08:02.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 00:07:40
2026-01-01T00:08:02.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T00:08:02.544 [DEBUG] [Thread-137136] [transport.py] [_log()] starting thread (client mode): 0xb6bbddb0
2026-01-01T00:08:02.544 [DEBUG] [Thread-137136] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:08:02.563 [DEBUG] [Thread-137136] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T00:08:02.564 [INFO] [Thread-137136] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T00:08:02.567 [DEBUG] [Thread-137136] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:08:02.567 [DEBUG] [Thread-137136] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T00:08:02.567 [DEBUG] [Thread-137136] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:08:02.567 [DEBUG] [Thread-137136] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:08:02.567 [DEBUG] [Thread-137136] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:08:02.567 [DEBUG] [Thread-137136] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:08:02.567 [DEBUG] [Thread-137136] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:08:02.567 [DEBUG] [Thread-137136] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:08:02.568 [DEBUG] [Thread-137136] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:08:02.568 [DEBUG] [Thread-137136] [transport.py] [_log()] client lang: <none>
2026-01-01T00:08:02.568 [DEBUG] [Thread-137136] [transport.py] [_log()] server lang: <none>
2026-01-01T00:08:02.568 [DEBUG] [Thread-137136] [transport.py] [_log()] kex follows: False
2026-01-01T00:08:02.568 [DEBUG] [Thread-137136] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:08:02.568 [DEBUG] [Thread-137136] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:08:02.568 [DEBUG] [Thread-137136] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:08:02.568 [DEBUG] [Thread-137136] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:08:02.568 [DEBUG] [Thread-137136] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:08:02.568 [DEBUG] [Thread-137136] [transport.py] [_log()] Compression: none
2026-01-01T00:08:02.568 [DEBUG] [Thread-137136] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:08:02.588 [DEBUG] [Thread-137136] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:08:02.589 [DEBUG] [Thread-137136] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:08:02.589 [DEBUG] [Thread-137136] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T00:08:02.590 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T00:08:02.590 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:08:02.633 [DEBUG] [Thread-137136] [transport.py] [_log()] userauth is OK
2026-01-01T00:08:02.634 [DEBUG] [Thread-137136] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:08:02.634 [DEBUG] [Thread-137136] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:08:02.634 [DEBUG] [Thread-137136] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T00:08:02.634 [DEBUG] [Thread-137136] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:08:02.655 [INFO] [Thread-137136] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:08:02.655 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:08:03.314 [DEBUG] [Thread-137136] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:08:03.314 [DEBUG] [Thread-137136] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:08:03.315 [DEBUG] [Thread-137136] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T00:08:03.355 [DEBUG] [Thread-137136] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:08:03.355 [DEBUG] [Thread-137136] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:08:03.359 [DEBUG] [Thread-137136] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:08:03.372 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:08:03.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T00:08:03.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T00:08:03.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T00:08:03.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:08:03.384 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T00:08:03.384 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:08:03.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:08:03.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T00:08:03.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.921662 -999.00  +14.80  10.56     81  +11.60 1 2 1 2 1     0    0 2.75 -17.17 ...S. 11.3 10.6 203.8 20.0 15.8 -15.1 15.6 -14.7 15.5 -13.6 15.8 -14.4
2026-01-01T00:08:03.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T00:08:03.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T00:08:03.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.921662
2026-01-01T00:08:03.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T00:08:03.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T00:08:03.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T00:08:03.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T00:08:03.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T00:08:03.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T00:07:40', tmtdew=3.57, humidity=79.13, cloud=0.0, wind=20.4, temperature=14.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:07:40', seeing=1.26, atlas_timestamp='2025-12-31T22:07:11.597', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T00:08:03.387 [DEBUG] [Thread-137136] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:08:03.470 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T00:08:03.483 [DEBUG] [Thread-137139] [transport.py] [_log()] starting thread (client mode): 0xb9578c10
2026-01-01T00:08:03.483 [DEBUG] [Thread-137139] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:08:03.499 [DEBUG] [Thread-137139] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T00:08:03.500 [INFO] [Thread-137139] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T00:08:03.507 [DEBUG] [Thread-137139] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:08:03.507 [DEBUG] [Thread-137139] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T00:08:03.507 [DEBUG] [Thread-137139] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:08:03.508 [DEBUG] [Thread-137139] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:08:03.508 [DEBUG] [Thread-137139] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:08:03.508 [DEBUG] [Thread-137139] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:08:03.508 [DEBUG] [Thread-137139] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:08:03.508 [DEBUG] [Thread-137139] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:08:03.508 [DEBUG] [Thread-137139] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:08:03.508 [DEBUG] [Thread-137139] [transport.py] [_log()] client lang: <none>
2026-01-01T00:08:03.508 [DEBUG] [Thread-137139] [transport.py] [_log()] server lang: <none>
2026-01-01T00:08:03.508 [DEBUG] [Thread-137139] [transport.py] [_log()] kex follows: False
2026-01-01T00:08:03.508 [DEBUG] [Thread-137139] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:08:03.508 [DEBUG] [Thread-137139] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:08:03.508 [DEBUG] [Thread-137139] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:08:03.508 [DEBUG] [Thread-137139] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:08:03.508 [DEBUG] [Thread-137139] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:08:03.508 [DEBUG] [Thread-137139] [transport.py] [_log()] Compression: none
2026-01-01T00:08:03.508 [DEBUG] [Thread-137139] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:08:03.567 [DEBUG] [Thread-137139] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:08:03.568 [DEBUG] [Thread-137139] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:08:03.568 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T00:08:03.569 [DEBUG] [Thread-137139] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T00:08:03.569 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:08:03.624 [DEBUG] [Thread-137139] [transport.py] [_log()] userauth is OK
2026-01-01T00:08:03.624 [DEBUG] [Thread-137139] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:08:03.624 [DEBUG] [Thread-137139] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:08:03.625 [DEBUG] [Thread-137139] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T00:08:03.625 [DEBUG] [Thread-137139] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:08:03.643 [INFO] [Thread-137139] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:08:03.644 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T00:08:03.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:08:04.477 [DEBUG] [Thread-137139] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:08:04.477 [DEBUG] [Thread-137139] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:08:04.525 [DEBUG] [Thread-137139] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:08:04.525 [DEBUG] [Thread-137139] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:08:04.536 [DEBUG] [Thread-137139] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:08:04.547 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:08:04.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T00:08:04.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T00:08:04.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:08:04.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:08:04.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:08:04.577 [DEBUG] [Thread-137139] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:08:05.584 [DEBUG] [Thread-137141 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:08:20.626 [DEBUG] [Thread-137142 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:08:34.315 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:08:34.317 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:08:34.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T00:08:34.600 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T00:08:34.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T00:08:35.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 0, 8, 12), 3.56, 79.18, 0.0, 21.14, 14.62, 0, 0, 0, 2, 0, 0),)
2026-01-01T00:08:35.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 00:08:12
2026-01-01T00:08:35.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T00:08:35.593 [DEBUG] [Thread-137143] [transport.py] [_log()] starting thread (client mode): 0xb6bbf5b0
2026-01-01T00:08:35.593 [DEBUG] [Thread-137143] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:08:35.613 [DEBUG] [Thread-137143] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T00:08:35.613 [INFO] [Thread-137143] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T00:08:35.616 [DEBUG] [Thread-137143] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:08:35.616 [DEBUG] [Thread-137143] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T00:08:35.616 [DEBUG] [Thread-137143] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:08:35.616 [DEBUG] [Thread-137143] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:08:35.616 [DEBUG] [Thread-137143] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:08:35.616 [DEBUG] [Thread-137143] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:08:35.617 [DEBUG] [Thread-137143] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:08:35.617 [DEBUG] [Thread-137143] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:08:35.617 [DEBUG] [Thread-137143] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:08:35.617 [DEBUG] [Thread-137143] [transport.py] [_log()] client lang: <none>
2026-01-01T00:08:35.617 [DEBUG] [Thread-137143] [transport.py] [_log()] server lang: <none>
2026-01-01T00:08:35.617 [DEBUG] [Thread-137143] [transport.py] [_log()] kex follows: False
2026-01-01T00:08:35.617 [DEBUG] [Thread-137143] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:08:35.617 [DEBUG] [Thread-137143] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:08:35.617 [DEBUG] [Thread-137143] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:08:35.617 [DEBUG] [Thread-137143] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:08:35.617 [DEBUG] [Thread-137143] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:08:35.617 [DEBUG] [Thread-137143] [transport.py] [_log()] Compression: none
2026-01-01T00:08:35.617 [DEBUG] [Thread-137143] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:08:35.635 [DEBUG] [Thread-137143] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:08:35.635 [DEBUG] [Thread-137143] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:08:35.636 [DEBUG] [Thread-137143] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T00:08:35.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T00:08:35.637 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:08:35.638 [DEBUG] [Thread-137143] [transport.py] [_log()] userauth is OK
2026-01-01T00:08:35.638 [DEBUG] [Thread-137143] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:08:35.638 [DEBUG] [Thread-137143] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:08:35.638 [DEBUG] [Thread-137143] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T00:08:35.638 [DEBUG] [Thread-137143] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:08:35.659 [DEBUG] [Thread-137145 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:08:35.674 [INFO] [Thread-137143] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:08:35.675 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:08:36.323 [DEBUG] [Thread-137143] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:08:36.323 [DEBUG] [Thread-137143] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:08:36.323 [DEBUG] [Thread-137143] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T00:08:36.364 [DEBUG] [Thread-137143] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:08:36.364 [DEBUG] [Thread-137143] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:08:36.367 [DEBUG] [Thread-137143] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:08:36.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:08:36.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T00:08:36.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T00:08:36.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T00:08:36.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:08:36.390 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T00:08:36.390 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:08:36.390 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:08:36.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T00:08:36.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.922010 -999.00  +14.80   9.35     81  +11.60 1 2 1 2 1     0    0 2.80 -17.69 ...S. 8.5 9.3 200.0 18.2 15.8 -15.2 15.7 -15.0 15.4 -13.8 15.8 -14.4
2026-01-01T00:08:36.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T00:08:36.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T00:08:36.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.922010
2026-01-01T00:08:36.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T00:08:36.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T00:08:36.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T00:08:36.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T00:08:36.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T00:08:36.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T00:08:12', tmtdew=3.56, humidity=79.18, cloud=0.0, wind=21.14, temperature=14.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:08:12', seeing=1.26, atlas_timestamp='2025-12-31T22:07:41.664', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T00:08:36.392 [DEBUG] [Thread-137143] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:08:36.478 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T00:08:36.489 [DEBUG] [Thread-137147] [transport.py] [_log()] starting thread (client mode): 0xb17941c0
2026-01-01T00:08:36.489 [DEBUG] [Thread-137147] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:08:36.504 [DEBUG] [Thread-137147] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T00:08:36.504 [INFO] [Thread-137147] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T00:08:36.512 [DEBUG] [Thread-137147] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:08:36.513 [DEBUG] [Thread-137147] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T00:08:36.513 [DEBUG] [Thread-137147] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:08:36.513 [DEBUG] [Thread-137147] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:08:36.513 [DEBUG] [Thread-137147] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:08:36.513 [DEBUG] [Thread-137147] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:08:36.514 [DEBUG] [Thread-137147] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:08:36.514 [DEBUG] [Thread-137147] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:08:36.514 [DEBUG] [Thread-137147] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:08:36.514 [DEBUG] [Thread-137147] [transport.py] [_log()] client lang: <none>
2026-01-01T00:08:36.514 [DEBUG] [Thread-137147] [transport.py] [_log()] server lang: <none>
2026-01-01T00:08:36.514 [DEBUG] [Thread-137147] [transport.py] [_log()] kex follows: False
2026-01-01T00:08:36.514 [DEBUG] [Thread-137147] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:08:36.514 [DEBUG] [Thread-137147] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:08:36.515 [DEBUG] [Thread-137147] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:08:36.515 [DEBUG] [Thread-137147] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:08:36.515 [DEBUG] [Thread-137147] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:08:36.515 [DEBUG] [Thread-137147] [transport.py] [_log()] Compression: none
2026-01-01T00:08:36.515 [DEBUG] [Thread-137147] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:08:36.572 [DEBUG] [Thread-137147] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:08:36.573 [DEBUG] [Thread-137147] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:08:36.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T00:08:36.574 [DEBUG] [Thread-137147] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T00:08:36.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:08:36.628 [DEBUG] [Thread-137147] [transport.py] [_log()] userauth is OK
2026-01-01T00:08:36.629 [DEBUG] [Thread-137147] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:08:36.629 [DEBUG] [Thread-137147] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:08:36.629 [DEBUG] [Thread-137147] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T00:08:36.629 [DEBUG] [Thread-137147] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:08:36.647 [INFO] [Thread-137147] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:08:36.648 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T00:08:36.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:08:37.482 [DEBUG] [Thread-137147] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:08:37.483 [DEBUG] [Thread-137147] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:08:37.534 [DEBUG] [Thread-137147] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:08:37.534 [DEBUG] [Thread-137147] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:08:37.543 [DEBUG] [Thread-137147] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:08:37.553 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:08:37.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T00:08:37.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T00:08:37.571 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:08:37.572 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:08:37.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:08:37.580 [DEBUG] [Thread-137147] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:08:50.697 [DEBUG] [Thread-137149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:08:55.030 [DEBUG] [Thread-137150 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:09:05.746 [DEBUG] [Thread-137151 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:09:07.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T00:09:07.602 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T00:09:07.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T00:09:08.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 0, 8, 44), 3.55, 79.21, 0.0, 22.43, 14.57, 0, 0, 0, 2, 0, 0),)
2026-01-01T00:09:08.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 00:08:44
2026-01-01T00:09:08.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T00:09:08.585 [DEBUG] [Thread-137152] [transport.py] [_log()] starting thread (client mode): 0xb1744490
2026-01-01T00:09:08.586 [DEBUG] [Thread-137152] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:09:08.605 [DEBUG] [Thread-137152] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T00:09:08.606 [INFO] [Thread-137152] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T00:09:08.609 [DEBUG] [Thread-137152] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:09:08.609 [DEBUG] [Thread-137152] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T00:09:08.609 [DEBUG] [Thread-137152] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:09:08.609 [DEBUG] [Thread-137152] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:09:08.609 [DEBUG] [Thread-137152] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:09:08.609 [DEBUG] [Thread-137152] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:09:08.609 [DEBUG] [Thread-137152] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:09:08.609 [DEBUG] [Thread-137152] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:09:08.609 [DEBUG] [Thread-137152] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:09:08.609 [DEBUG] [Thread-137152] [transport.py] [_log()] client lang: <none>
2026-01-01T00:09:08.609 [DEBUG] [Thread-137152] [transport.py] [_log()] server lang: <none>
2026-01-01T00:09:08.609 [DEBUG] [Thread-137152] [transport.py] [_log()] kex follows: False
2026-01-01T00:09:08.609 [DEBUG] [Thread-137152] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:09:08.609 [DEBUG] [Thread-137152] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:09:08.609 [DEBUG] [Thread-137152] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:09:08.610 [DEBUG] [Thread-137152] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:09:08.610 [DEBUG] [Thread-137152] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:09:08.610 [DEBUG] [Thread-137152] [transport.py] [_log()] Compression: none
2026-01-01T00:09:08.610 [DEBUG] [Thread-137152] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:09:08.626 [DEBUG] [Thread-137152] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:09:08.627 [DEBUG] [Thread-137152] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:09:08.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T00:09:08.627 [DEBUG] [Thread-137152] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T00:09:08.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:09:08.629 [DEBUG] [Thread-137152] [transport.py] [_log()] userauth is OK
2026-01-01T00:09:08.629 [DEBUG] [Thread-137152] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:09:08.630 [DEBUG] [Thread-137152] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:09:08.630 [DEBUG] [Thread-137152] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T00:09:08.630 [DEBUG] [Thread-137152] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:09:08.653 [INFO] [Thread-137152] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:09:08.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:09:09.298 [DEBUG] [Thread-137152] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:09:09.298 [DEBUG] [Thread-137152] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:09:09.299 [DEBUG] [Thread-137152] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T00:09:09.339 [DEBUG] [Thread-137152] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:09:09.339 [DEBUG] [Thread-137152] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:09:09.342 [DEBUG] [Thread-137152] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:09:09.353 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:09:09.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T00:09:09.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T00:09:09.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T00:09:09.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:09:09.364 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T00:09:09.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:09:09.365 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:09:09.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T00:09:09.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.922704 -999.00  +14.80  15.11     81  +11.60 1 2 1 2 1     0    0 2.74 -17.50 ...S. 12.5 15.1 194.1 20.6 15.8 -15.6 15.6 -15.3 15.4 -14.1 15.8 -14.7
2026-01-01T00:09:09.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T00:09:09.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T00:09:09.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.922704
2026-01-01T00:09:09.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T00:09:09.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T00:09:09.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T00:09:09.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T00:09:09.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T00:09:09.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T00:08:44', tmtdew=3.55, humidity=79.21, cloud=0.0, wind=22.43, temperature=14.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:08:12', seeing=1.26, atlas_timestamp='2025-12-31T22:08:41.626', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T00:09:09.367 [DEBUG] [Thread-137152] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:09:09.449 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T00:09:09.461 [DEBUG] [Thread-137155] [transport.py] [_log()] starting thread (client mode): 0xb17454e0
2026-01-01T00:09:09.461 [DEBUG] [Thread-137155] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:09:09.476 [DEBUG] [Thread-137155] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T00:09:09.476 [INFO] [Thread-137155] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T00:09:09.483 [DEBUG] [Thread-137155] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:09:09.484 [DEBUG] [Thread-137155] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T00:09:09.484 [DEBUG] [Thread-137155] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:09:09.484 [DEBUG] [Thread-137155] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:09:09.484 [DEBUG] [Thread-137155] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:09:09.484 [DEBUG] [Thread-137155] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:09:09.484 [DEBUG] [Thread-137155] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:09:09.484 [DEBUG] [Thread-137155] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:09:09.484 [DEBUG] [Thread-137155] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:09:09.484 [DEBUG] [Thread-137155] [transport.py] [_log()] client lang: <none>
2026-01-01T00:09:09.484 [DEBUG] [Thread-137155] [transport.py] [_log()] server lang: <none>
2026-01-01T00:09:09.484 [DEBUG] [Thread-137155] [transport.py] [_log()] kex follows: False
2026-01-01T00:09:09.484 [DEBUG] [Thread-137155] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:09:09.484 [DEBUG] [Thread-137155] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:09:09.484 [DEBUG] [Thread-137155] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:09:09.484 [DEBUG] [Thread-137155] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:09:09.484 [DEBUG] [Thread-137155] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:09:09.484 [DEBUG] [Thread-137155] [transport.py] [_log()] Compression: none
2026-01-01T00:09:09.484 [DEBUG] [Thread-137155] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:09:09.544 [DEBUG] [Thread-137155] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:09:09.545 [DEBUG] [Thread-137155] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:09:09.545 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T00:09:09.546 [DEBUG] [Thread-137155] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T00:09:09.547 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:09:09.600 [DEBUG] [Thread-137155] [transport.py] [_log()] userauth is OK
2026-01-01T00:09:09.600 [DEBUG] [Thread-137155] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:09:09.600 [DEBUG] [Thread-137155] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:09:09.601 [DEBUG] [Thread-137155] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T00:09:09.601 [DEBUG] [Thread-137155] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:09:09.619 [INFO] [Thread-137155] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:09:09.619 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T00:09:09.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:09:10.444 [DEBUG] [Thread-137155] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:09:10.444 [DEBUG] [Thread-137155] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:09:10.492 [DEBUG] [Thread-137155] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:09:10.492 [DEBUG] [Thread-137155] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:09:10.501 [DEBUG] [Thread-137155] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:09:10.510 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:09:10.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T00:09:10.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T00:09:10.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:09:10.528 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:09:10.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:09:10.536 [DEBUG] [Thread-137155] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:09:20.784 [DEBUG] [Thread-137157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:09:34.525 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:09:34.526 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:09:35.845 [DEBUG] [Thread-137158 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:09:40.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T00:09:40.557 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T00:09:40.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T00:09:41.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 0, 9, 17), 3.53, 79.31, 0.0, 21.3, 14.57, 0, 0, 0, 2, 0, 0),)
2026-01-01T00:09:41.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 00:09:17
2026-01-01T00:09:41.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T00:09:41.541 [DEBUG] [Thread-137159] [transport.py] [_log()] starting thread (client mode): 0xb1744a60
2026-01-01T00:09:41.541 [DEBUG] [Thread-137159] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:09:41.562 [DEBUG] [Thread-137159] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T00:09:41.562 [INFO] [Thread-137159] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T00:09:41.565 [DEBUG] [Thread-137159] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:09:41.565 [DEBUG] [Thread-137159] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T00:09:41.565 [DEBUG] [Thread-137159] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:09:41.565 [DEBUG] [Thread-137159] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:09:41.565 [DEBUG] [Thread-137159] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:09:41.565 [DEBUG] [Thread-137159] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:09:41.565 [DEBUG] [Thread-137159] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:09:41.565 [DEBUG] [Thread-137159] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:09:41.565 [DEBUG] [Thread-137159] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:09:41.565 [DEBUG] [Thread-137159] [transport.py] [_log()] client lang: <none>
2026-01-01T00:09:41.565 [DEBUG] [Thread-137159] [transport.py] [_log()] server lang: <none>
2026-01-01T00:09:41.565 [DEBUG] [Thread-137159] [transport.py] [_log()] kex follows: False
2026-01-01T00:09:41.565 [DEBUG] [Thread-137159] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:09:41.565 [DEBUG] [Thread-137159] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:09:41.565 [DEBUG] [Thread-137159] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:09:41.565 [DEBUG] [Thread-137159] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:09:41.565 [DEBUG] [Thread-137159] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:09:41.565 [DEBUG] [Thread-137159] [transport.py] [_log()] Compression: none
2026-01-01T00:09:41.565 [DEBUG] [Thread-137159] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:09:41.585 [DEBUG] [Thread-137159] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:09:41.585 [DEBUG] [Thread-137159] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:09:41.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T00:09:41.586 [DEBUG] [Thread-137159] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T00:09:41.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:09:41.588 [DEBUG] [Thread-137159] [transport.py] [_log()] userauth is OK
2026-01-01T00:09:41.589 [DEBUG] [Thread-137159] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:09:41.589 [DEBUG] [Thread-137159] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:09:41.589 [DEBUG] [Thread-137159] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T00:09:41.589 [DEBUG] [Thread-137159] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:09:41.623 [INFO] [Thread-137159] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:09:41.625 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:09:42.268 [DEBUG] [Thread-137159] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:09:42.268 [DEBUG] [Thread-137159] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:09:42.269 [DEBUG] [Thread-137159] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T00:09:42.309 [DEBUG] [Thread-137159] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:09:42.309 [DEBUG] [Thread-137159] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:09:42.312 [DEBUG] [Thread-137159] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:09:42.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:09:42.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T00:09:42.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T00:09:42.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T00:09:42.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:09:42.338 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T00:09:42.338 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:09:42.338 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:09:42.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T00:09:42.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.923051 -999.00  +14.80  10.59     81  +11.60 1 2 1 2 1     0    0 2.77 -17.74 ...S. 8.1 10.6 212.0 19.1 15.8 -15.8 15.7 -15.5 15.5 -14.1 15.8 -14.8
2026-01-01T00:09:42.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T00:09:42.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T00:09:42.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.923051
2026-01-01T00:09:42.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T00:09:42.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T00:09:42.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T00:09:42.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T00:09:42.340 [DEBUG] [Thread-137159] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:09:42.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T00:09:42.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T00:09:17', tmtdew=3.53, humidity=79.31, cloud=0.0, wind=21.3, temperature=14.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:08:12', seeing=1.26, atlas_timestamp='2025-12-31T22:09:11.606', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T00:09:42.435 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T00:09:42.446 [DEBUG] [Thread-137162] [transport.py] [_log()] starting thread (client mode): 0xb95f1030
2026-01-01T00:09:42.446 [DEBUG] [Thread-137162] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:09:42.461 [DEBUG] [Thread-137162] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T00:09:42.461 [INFO] [Thread-137162] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T00:09:42.469 [DEBUG] [Thread-137162] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:09:42.469 [DEBUG] [Thread-137162] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T00:09:42.470 [DEBUG] [Thread-137162] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:09:42.470 [DEBUG] [Thread-137162] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:09:42.470 [DEBUG] [Thread-137162] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:09:42.470 [DEBUG] [Thread-137162] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:09:42.470 [DEBUG] [Thread-137162] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:09:42.470 [DEBUG] [Thread-137162] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:09:42.470 [DEBUG] [Thread-137162] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:09:42.470 [DEBUG] [Thread-137162] [transport.py] [_log()] client lang: <none>
2026-01-01T00:09:42.470 [DEBUG] [Thread-137162] [transport.py] [_log()] server lang: <none>
2026-01-01T00:09:42.471 [DEBUG] [Thread-137162] [transport.py] [_log()] kex follows: False
2026-01-01T00:09:42.471 [DEBUG] [Thread-137162] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:09:42.471 [DEBUG] [Thread-137162] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:09:42.471 [DEBUG] [Thread-137162] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:09:42.471 [DEBUG] [Thread-137162] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:09:42.471 [DEBUG] [Thread-137162] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:09:42.471 [DEBUG] [Thread-137162] [transport.py] [_log()] Compression: none
2026-01-01T00:09:42.472 [DEBUG] [Thread-137162] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:09:42.527 [DEBUG] [Thread-137162] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:09:42.527 [DEBUG] [Thread-137162] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:09:42.528 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T00:09:42.529 [DEBUG] [Thread-137162] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T00:09:42.530 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:09:42.584 [DEBUG] [Thread-137162] [transport.py] [_log()] userauth is OK
2026-01-01T00:09:42.585 [DEBUG] [Thread-137162] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:09:42.585 [DEBUG] [Thread-137162] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:09:42.585 [DEBUG] [Thread-137162] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T00:09:42.586 [DEBUG] [Thread-137162] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:09:42.604 [INFO] [Thread-137162] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:09:42.605 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T00:09:42.605 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:09:43.397 [DEBUG] [Thread-137162] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:09:43.397 [DEBUG] [Thread-137162] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:09:43.445 [DEBUG] [Thread-137162] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:09:43.445 [DEBUG] [Thread-137162] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:09:43.454 [DEBUG] [Thread-137162] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:09:43.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:09:43.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T00:09:43.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T00:09:43.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:09:43.482 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:09:43.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:09:43.491 [DEBUG] [Thread-137162] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:09:50.872 [DEBUG] [Thread-137164 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:09:55.107 [DEBUG] [Thread-137165 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:10:05.912 [DEBUG] [Thread-137166 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:10:13.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T00:10:13.491 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T00:10:13.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T00:10:14.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 0, 9, 49), 3.48, 79.35, 0.0, 16.0, 14.57, 0, 0, 0, 2, 0, 0),)
2026-01-01T00:10:14.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 00:09:49
2026-01-01T00:10:14.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T00:10:14.526 [DEBUG] [Thread-137167] [transport.py] [_log()] starting thread (client mode): 0xb9579f30
2026-01-01T00:10:14.526 [DEBUG] [Thread-137167] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:10:14.547 [DEBUG] [Thread-137167] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T00:10:14.547 [INFO] [Thread-137167] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T00:10:14.550 [DEBUG] [Thread-137167] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:10:14.550 [DEBUG] [Thread-137167] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T00:10:14.550 [DEBUG] [Thread-137167] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:10:14.550 [DEBUG] [Thread-137167] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:10:14.550 [DEBUG] [Thread-137167] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:10:14.550 [DEBUG] [Thread-137167] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:10:14.550 [DEBUG] [Thread-137167] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:10:14.550 [DEBUG] [Thread-137167] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:10:14.550 [DEBUG] [Thread-137167] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:10:14.550 [DEBUG] [Thread-137167] [transport.py] [_log()] client lang: <none>
2026-01-01T00:10:14.550 [DEBUG] [Thread-137167] [transport.py] [_log()] server lang: <none>
2026-01-01T00:10:14.550 [DEBUG] [Thread-137167] [transport.py] [_log()] kex follows: False
2026-01-01T00:10:14.550 [DEBUG] [Thread-137167] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:10:14.550 [DEBUG] [Thread-137167] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:10:14.550 [DEBUG] [Thread-137167] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:10:14.550 [DEBUG] [Thread-137167] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:10:14.550 [DEBUG] [Thread-137167] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:10:14.550 [DEBUG] [Thread-137167] [transport.py] [_log()] Compression: none
2026-01-01T00:10:14.550 [DEBUG] [Thread-137167] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:10:14.566 [DEBUG] [Thread-137167] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:10:14.566 [DEBUG] [Thread-137167] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:10:14.566 [DEBUG] [Thread-137167] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T00:10:14.566 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T00:10:14.566 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:10:14.567 [DEBUG] [Thread-137167] [transport.py] [_log()] userauth is OK
2026-01-01T00:10:14.567 [DEBUG] [Thread-137167] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:10:14.567 [DEBUG] [Thread-137167] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:10:14.567 [DEBUG] [Thread-137167] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T00:10:14.567 [DEBUG] [Thread-137167] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:10:14.585 [INFO] [Thread-137167] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:10:14.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:10:15.428 [DEBUG] [Thread-137167] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:10:15.428 [DEBUG] [Thread-137167] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:10:15.428 [DEBUG] [Thread-137167] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T00:10:15.468 [DEBUG] [Thread-137167] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:10:15.468 [DEBUG] [Thread-137167] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:10:15.470 [DEBUG] [Thread-137167] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:10:15.483 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:10:15.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T00:10:15.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T00:10:15.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T00:10:15.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:10:15.488 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T00:10:15.488 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:10:15.488 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:10:15.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T00:10:15.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.923398 -999.00  +14.80  10.28     81  +11.60 1 2 1 2 1     0    0 2.75 -17.25 ...S. 4.8 10.3 222.4 16.7 15.8 -16.0 15.7 -15.8 15.5 -14.2 15.8 -14.8
2026-01-01T00:10:15.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T00:10:15.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T00:10:15.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.923398
2026-01-01T00:10:15.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T00:10:15.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T00:10:15.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T00:10:15.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T00:10:15.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T00:10:15.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T00:09:49', tmtdew=3.48, humidity=79.35, cloud=0.0, wind=16.0, temperature=14.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:09:49', seeing=1.09, atlas_timestamp='2025-12-31T22:09:41.587', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T00:10:15.489 [DEBUG] [Thread-137167] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:10:15.564 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T00:10:15.576 [DEBUG] [Thread-137170] [transport.py] [_log()] starting thread (client mode): 0xb1747310
2026-01-01T00:10:15.576 [DEBUG] [Thread-137170] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:10:15.592 [DEBUG] [Thread-137170] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T00:10:15.592 [INFO] [Thread-137170] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T00:10:15.599 [DEBUG] [Thread-137170] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:10:15.599 [DEBUG] [Thread-137170] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T00:10:15.599 [DEBUG] [Thread-137170] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:10:15.599 [DEBUG] [Thread-137170] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:10:15.599 [DEBUG] [Thread-137170] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:10:15.599 [DEBUG] [Thread-137170] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:10:15.599 [DEBUG] [Thread-137170] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:10:15.599 [DEBUG] [Thread-137170] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:10:15.599 [DEBUG] [Thread-137170] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:10:15.599 [DEBUG] [Thread-137170] [transport.py] [_log()] client lang: <none>
2026-01-01T00:10:15.599 [DEBUG] [Thread-137170] [transport.py] [_log()] server lang: <none>
2026-01-01T00:10:15.599 [DEBUG] [Thread-137170] [transport.py] [_log()] kex follows: False
2026-01-01T00:10:15.599 [DEBUG] [Thread-137170] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:10:15.599 [DEBUG] [Thread-137170] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:10:15.599 [DEBUG] [Thread-137170] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:10:15.599 [DEBUG] [Thread-137170] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:10:15.599 [DEBUG] [Thread-137170] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:10:15.599 [DEBUG] [Thread-137170] [transport.py] [_log()] Compression: none
2026-01-01T00:10:15.600 [DEBUG] [Thread-137170] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:10:15.654 [DEBUG] [Thread-137170] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:10:15.654 [DEBUG] [Thread-137170] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:10:15.654 [DEBUG] [Thread-137170] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T00:10:15.654 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T00:10:15.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:10:15.711 [DEBUG] [Thread-137170] [transport.py] [_log()] userauth is OK
2026-01-01T00:10:15.711 [DEBUG] [Thread-137170] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:10:15.711 [DEBUG] [Thread-137170] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:10:15.712 [DEBUG] [Thread-137170] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T00:10:15.712 [DEBUG] [Thread-137170] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:10:15.729 [INFO] [Thread-137170] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:10:15.730 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T00:10:15.730 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:10:16.579 [DEBUG] [Thread-137170] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:10:16.579 [DEBUG] [Thread-137170] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:10:16.627 [DEBUG] [Thread-137170] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:10:16.627 [DEBUG] [Thread-137170] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:10:16.635 [DEBUG] [Thread-137170] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:10:16.643 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:10:16.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T00:10:16.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T00:10:16.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:10:16.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:10:16.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:10:16.667 [DEBUG] [Thread-137170] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:10:20.943 [DEBUG] [Thread-137172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:10:34.730 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:10:34.731 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:10:35.992 [DEBUG] [Thread-137173 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:10:46.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T00:10:46.689 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T00:10:46.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T00:10:47.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 0, 10, 21), 3.48, 79.31, 0.0, 17.79, 14.52, 0, 0, 0, 2, 0, 0),)
2026-01-01T00:10:47.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 00:10:21
2026-01-01T00:10:47.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T00:10:47.689 [DEBUG] [Thread-137174] [transport.py] [_log()] starting thread (client mode): 0xb1795060
2026-01-01T00:10:47.689 [DEBUG] [Thread-137174] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:10:47.709 [DEBUG] [Thread-137174] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T00:10:47.709 [INFO] [Thread-137174] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T00:10:47.712 [DEBUG] [Thread-137174] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:10:47.713 [DEBUG] [Thread-137174] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T00:10:47.713 [DEBUG] [Thread-137174] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:10:47.713 [DEBUG] [Thread-137174] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:10:47.713 [DEBUG] [Thread-137174] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:10:47.713 [DEBUG] [Thread-137174] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:10:47.713 [DEBUG] [Thread-137174] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:10:47.713 [DEBUG] [Thread-137174] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:10:47.713 [DEBUG] [Thread-137174] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:10:47.713 [DEBUG] [Thread-137174] [transport.py] [_log()] client lang: <none>
2026-01-01T00:10:47.713 [DEBUG] [Thread-137174] [transport.py] [_log()] server lang: <none>
2026-01-01T00:10:47.713 [DEBUG] [Thread-137174] [transport.py] [_log()] kex follows: False
2026-01-01T00:10:47.713 [DEBUG] [Thread-137174] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:10:47.713 [DEBUG] [Thread-137174] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:10:47.714 [DEBUG] [Thread-137174] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:10:47.714 [DEBUG] [Thread-137174] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:10:47.714 [DEBUG] [Thread-137174] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:10:47.714 [DEBUG] [Thread-137174] [transport.py] [_log()] Compression: none
2026-01-01T00:10:47.714 [DEBUG] [Thread-137174] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:10:47.731 [DEBUG] [Thread-137174] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:10:47.732 [DEBUG] [Thread-137174] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:10:47.733 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T00:10:47.733 [DEBUG] [Thread-137174] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T00:10:47.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:10:47.735 [DEBUG] [Thread-137174] [transport.py] [_log()] userauth is OK
2026-01-01T00:10:47.735 [DEBUG] [Thread-137174] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:10:47.735 [DEBUG] [Thread-137174] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:10:47.735 [DEBUG] [Thread-137174] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T00:10:47.735 [DEBUG] [Thread-137174] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:10:47.759 [INFO] [Thread-137174] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:10:47.760 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:10:48.418 [DEBUG] [Thread-137174] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:10:48.418 [DEBUG] [Thread-137174] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:10:48.418 [DEBUG] [Thread-137174] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T00:10:48.459 [DEBUG] [Thread-137174] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:10:48.459 [DEBUG] [Thread-137174] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:10:48.462 [DEBUG] [Thread-137174] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:10:48.475 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:10:48.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T00:10:48.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T00:10:48.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T00:10:48.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:10:48.486 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T00:10:48.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:10:48.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:10:48.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T00:10:48.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.923746 -999.00  +14.80  11.38     81  +11.60 1 2 1 2 1     0    0 2.77 -15.46 ZNES. 11.5 11.4 195.9 19.8 15.8 -15.9 15.6 -15.6 15.5 -14.0 15.8 -14.9
2026-01-01T00:10:48.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T00:10:48.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T00:10:48.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.923746
2026-01-01T00:10:48.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T00:10:48.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T00:10:48.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T00:10:48.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T00:10:48.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T00:10:48.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T00:10:21', tmtdew=3.48, humidity=79.31, cloud=0.0, wind=17.79, temperature=14.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:10:21', seeing=1.09, atlas_timestamp='2025-12-31T22:10:11.654', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T00:10:48.489 [DEBUG] [Thread-137174] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:10:48.572 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T00:10:48.583 [DEBUG] [Thread-137177] [transport.py] [_log()] starting thread (client mode): 0xb1747190
2026-01-01T00:10:48.583 [DEBUG] [Thread-137177] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:10:48.598 [DEBUG] [Thread-137177] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T00:10:48.598 [INFO] [Thread-137177] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T00:10:48.606 [DEBUG] [Thread-137177] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:10:48.606 [DEBUG] [Thread-137177] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T00:10:48.606 [DEBUG] [Thread-137177] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:10:48.606 [DEBUG] [Thread-137177] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:10:48.606 [DEBUG] [Thread-137177] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:10:48.606 [DEBUG] [Thread-137177] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:10:48.606 [DEBUG] [Thread-137177] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:10:48.607 [DEBUG] [Thread-137177] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:10:48.607 [DEBUG] [Thread-137177] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:10:48.607 [DEBUG] [Thread-137177] [transport.py] [_log()] client lang: <none>
2026-01-01T00:10:48.607 [DEBUG] [Thread-137177] [transport.py] [_log()] server lang: <none>
2026-01-01T00:10:48.607 [DEBUG] [Thread-137177] [transport.py] [_log()] kex follows: False
2026-01-01T00:10:48.607 [DEBUG] [Thread-137177] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:10:48.607 [DEBUG] [Thread-137177] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:10:48.607 [DEBUG] [Thread-137177] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:10:48.607 [DEBUG] [Thread-137177] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:10:48.607 [DEBUG] [Thread-137177] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:10:48.607 [DEBUG] [Thread-137177] [transport.py] [_log()] Compression: none
2026-01-01T00:10:48.607 [DEBUG] [Thread-137177] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:10:48.664 [DEBUG] [Thread-137177] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:10:48.665 [DEBUG] [Thread-137177] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:10:48.665 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T00:10:48.666 [DEBUG] [Thread-137177] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T00:10:48.667 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:10:48.719 [DEBUG] [Thread-137177] [transport.py] [_log()] userauth is OK
2026-01-01T00:10:48.720 [DEBUG] [Thread-137177] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:10:48.720 [DEBUG] [Thread-137177] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:10:48.720 [DEBUG] [Thread-137177] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T00:10:48.720 [DEBUG] [Thread-137177] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:10:48.739 [INFO] [Thread-137177] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:10:48.739 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T00:10:48.739 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:10:49.629 [DEBUG] [Thread-137177] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:10:49.630 [DEBUG] [Thread-137177] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:10:49.677 [DEBUG] [Thread-137177] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:10:49.677 [DEBUG] [Thread-137177] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:10:49.687 [DEBUG] [Thread-137177] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:10:49.696 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:10:49.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T00:10:49.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T00:10:49.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:10:49.716 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:10:49.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:10:49.724 [DEBUG] [Thread-137177] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:10:51.033 [DEBUG] [Thread-137179 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:10:55.160 [DEBUG] [Thread-137180 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:11:06.080 [DEBUG] [Thread-137181 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:11:19.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T00:11:19.747 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T00:11:19.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T00:11:20.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 0, 10, 53), 3.48, 79.31, 0.0, 16.43, 14.54, 0, 0, 0, 2, 0, 0),)
2026-01-01T00:11:20.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 00:10:53
2026-01-01T00:11:20.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T00:11:20.721 [DEBUG] [Thread-137182] [transport.py] [_log()] starting thread (client mode): 0xb95f3370
2026-01-01T00:11:20.721 [DEBUG] [Thread-137182] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:11:20.741 [DEBUG] [Thread-137182] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T00:11:20.741 [INFO] [Thread-137182] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T00:11:20.745 [DEBUG] [Thread-137182] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:11:20.745 [DEBUG] [Thread-137182] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T00:11:20.745 [DEBUG] [Thread-137182] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:11:20.745 [DEBUG] [Thread-137182] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:11:20.745 [DEBUG] [Thread-137182] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:11:20.745 [DEBUG] [Thread-137182] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:11:20.745 [DEBUG] [Thread-137182] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:11:20.745 [DEBUG] [Thread-137182] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:11:20.745 [DEBUG] [Thread-137182] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:11:20.745 [DEBUG] [Thread-137182] [transport.py] [_log()] client lang: <none>
2026-01-01T00:11:20.745 [DEBUG] [Thread-137182] [transport.py] [_log()] server lang: <none>
2026-01-01T00:11:20.745 [DEBUG] [Thread-137182] [transport.py] [_log()] kex follows: False
2026-01-01T00:11:20.745 [DEBUG] [Thread-137182] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:11:20.745 [DEBUG] [Thread-137182] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:11:20.745 [DEBUG] [Thread-137182] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:11:20.745 [DEBUG] [Thread-137182] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:11:20.745 [DEBUG] [Thread-137182] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:11:20.745 [DEBUG] [Thread-137182] [transport.py] [_log()] Compression: none
2026-01-01T00:11:20.745 [DEBUG] [Thread-137182] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:11:20.756 [DEBUG] [Thread-137182] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:11:20.757 [DEBUG] [Thread-137182] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:11:20.757 [DEBUG] [Thread-137182] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T00:11:20.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T00:11:20.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:11:20.758 [DEBUG] [Thread-137182] [transport.py] [_log()] userauth is OK
2026-01-01T00:11:20.759 [DEBUG] [Thread-137182] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:11:20.759 [DEBUG] [Thread-137182] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:11:20.759 [DEBUG] [Thread-137182] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T00:11:20.759 [DEBUG] [Thread-137182] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:11:20.777 [INFO] [Thread-137182] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:11:20.778 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:11:21.115 [DEBUG] [Thread-137184 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:11:21.394 [DEBUG] [Thread-137182] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:11:21.394 [DEBUG] [Thread-137182] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:11:21.394 [DEBUG] [Thread-137182] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T00:11:21.435 [DEBUG] [Thread-137182] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:11:21.435 [DEBUG] [Thread-137182] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:11:21.439 [DEBUG] [Thread-137182] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:11:21.450 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:11:21.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T00:11:21.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T00:11:21.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T00:11:21.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:11:21.463 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T00:11:21.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:11:21.464 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:11:21.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T00:11:21.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.924093 -999.00  +14.70  11.92     81  +11.60 1 2 1 2 1     0    0 2.79 -14.84 zN.s. 16.2 11.9 201.0 19.1 15.8 -15.9 15.6 -15.2 15.4 -13.7 15.8 -14.7
2026-01-01T00:11:21.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T00:11:21.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T00:11:21.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.924093
2026-01-01T00:11:21.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T00:11:21.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T00:11:21.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T00:11:21.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T00:11:21.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T00:11:21.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T00:10:53', tmtdew=3.48, humidity=79.31, cloud=0.0, wind=16.43, temperature=14.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:10:53', seeing=1.29, atlas_timestamp='2025-12-31T22:10:41.635', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T00:11:21.466 [DEBUG] [Thread-137182] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:11:21.550 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T00:11:21.562 [DEBUG] [Thread-137186] [transport.py] [_log()] starting thread (client mode): 0xb95f1e70
2026-01-01T00:11:21.562 [DEBUG] [Thread-137186] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:11:21.578 [DEBUG] [Thread-137186] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T00:11:21.578 [INFO] [Thread-137186] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T00:11:21.586 [DEBUG] [Thread-137186] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:11:21.586 [DEBUG] [Thread-137186] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T00:11:21.586 [DEBUG] [Thread-137186] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:11:21.586 [DEBUG] [Thread-137186] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:11:21.586 [DEBUG] [Thread-137186] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:11:21.586 [DEBUG] [Thread-137186] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:11:21.587 [DEBUG] [Thread-137186] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:11:21.587 [DEBUG] [Thread-137186] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:11:21.587 [DEBUG] [Thread-137186] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:11:21.587 [DEBUG] [Thread-137186] [transport.py] [_log()] client lang: <none>
2026-01-01T00:11:21.587 [DEBUG] [Thread-137186] [transport.py] [_log()] server lang: <none>
2026-01-01T00:11:21.587 [DEBUG] [Thread-137186] [transport.py] [_log()] kex follows: False
2026-01-01T00:11:21.587 [DEBUG] [Thread-137186] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:11:21.587 [DEBUG] [Thread-137186] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:11:21.587 [DEBUG] [Thread-137186] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:11:21.588 [DEBUG] [Thread-137186] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:11:21.588 [DEBUG] [Thread-137186] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:11:21.589 [DEBUG] [Thread-137186] [transport.py] [_log()] Compression: none
2026-01-01T00:11:21.589 [DEBUG] [Thread-137186] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:11:21.648 [DEBUG] [Thread-137186] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:11:21.649 [DEBUG] [Thread-137186] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:11:21.650 [DEBUG] [Thread-137186] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T00:11:21.650 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T00:11:21.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:11:21.704 [DEBUG] [Thread-137186] [transport.py] [_log()] userauth is OK
2026-01-01T00:11:21.704 [DEBUG] [Thread-137186] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:11:21.705 [DEBUG] [Thread-137186] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:11:21.705 [DEBUG] [Thread-137186] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T00:11:21.705 [DEBUG] [Thread-137186] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:11:21.724 [INFO] [Thread-137186] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:11:21.725 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T00:11:21.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:11:22.547 [DEBUG] [Thread-137186] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:11:22.547 [DEBUG] [Thread-137186] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:11:22.595 [DEBUG] [Thread-137186] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:11:22.596 [DEBUG] [Thread-137186] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:11:22.605 [DEBUG] [Thread-137186] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:11:22.614 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:11:22.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T00:11: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') -> 00000000
2026-01-01T00:11:22.633 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:11:22.633 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:11:22.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:11:22.642 [DEBUG] [Thread-137186] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:11:34.938 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:11:34.939 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:11:36.145 [DEBUG] [Thread-137188 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:11:51.189 [DEBUG] [Thread-137189 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:11:52.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T00:11:52.664 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T00:11:52.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T00:11:53.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 0, 11, 25), 3.48, 79.35, 0.0, 15.88, 14.57, 0, 0, 0, 2, 0, 0),)
2026-01-01T00:11:53.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 00:11:25
2026-01-01T00:11:53.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T00:11:53.649 [DEBUG] [Thread-137190] [transport.py] [_log()] starting thread (client mode): 0xb1746ec0
2026-01-01T00:11:53.650 [DEBUG] [Thread-137190] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:11:53.669 [DEBUG] [Thread-137190] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T00:11:53.669 [INFO] [Thread-137190] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T00:11:53.672 [DEBUG] [Thread-137190] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:11:53.673 [DEBUG] [Thread-137190] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T00:11:53.673 [DEBUG] [Thread-137190] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:11:53.673 [DEBUG] [Thread-137190] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:11:53.673 [DEBUG] [Thread-137190] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:11:53.673 [DEBUG] [Thread-137190] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:11:53.673 [DEBUG] [Thread-137190] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:11:53.673 [DEBUG] [Thread-137190] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:11:53.673 [DEBUG] [Thread-137190] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:11:53.673 [DEBUG] [Thread-137190] [transport.py] [_log()] client lang: <none>
2026-01-01T00:11:53.673 [DEBUG] [Thread-137190] [transport.py] [_log()] server lang: <none>
2026-01-01T00:11:53.673 [DEBUG] [Thread-137190] [transport.py] [_log()] kex follows: False
2026-01-01T00:11:53.673 [DEBUG] [Thread-137190] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:11:53.673 [DEBUG] [Thread-137190] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:11:53.673 [DEBUG] [Thread-137190] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:11:53.673 [DEBUG] [Thread-137190] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:11:53.673 [DEBUG] [Thread-137190] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:11:53.673 [DEBUG] [Thread-137190] [transport.py] [_log()] Compression: none
2026-01-01T00:11:53.673 [DEBUG] [Thread-137190] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:11:53.690 [DEBUG] [Thread-137190] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:11:53.690 [DEBUG] [Thread-137190] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:11:53.691 [DEBUG] [Thread-137190] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T00:11:53.691 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T00:11:53.692 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:11:53.693 [DEBUG] [Thread-137190] [transport.py] [_log()] userauth is OK
2026-01-01T00:11:53.693 [DEBUG] [Thread-137190] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:11:53.693 [DEBUG] [Thread-137190] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:11:53.693 [DEBUG] [Thread-137190] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T00:11:53.693 [DEBUG] [Thread-137190] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:11:53.729 [INFO] [Thread-137190] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:11:53.730 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:11:54.383 [DEBUG] [Thread-137190] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:11:54.384 [DEBUG] [Thread-137190] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:11:54.384 [DEBUG] [Thread-137190] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T00:11:54.425 [DEBUG] [Thread-137190] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:11:54.425 [DEBUG] [Thread-137190] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:11:54.428 [DEBUG] [Thread-137190] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:11:54.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:11:54.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T00:11:54.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T00:11:54.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T00:11:54.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:11:54.452 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T00:11:54.452 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:11:54.452 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:11:54.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T00:11:54.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.924440 -999.00  +14.70  12.58     81  +11.60 1 2 1 2 1     0    0 2.80 -13.97 zN.s. 15.2 12.6 200.0 18.2 15.8 -15.7 15.6 -15.2 15.5 -13.5 15.8 -14.5
2026-01-01T00:11:54.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T00:11:54.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T00:11:54.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.924440
2026-01-01T00:11:54.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T00:11:54.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T00:11:54.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T00:11:54.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T00:11:54.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T00:11:54.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T00:11:25', tmtdew=3.48, humidity=79.35, cloud=0.0, wind=15.88, temperature=14.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:11:25', seeing=1.47, atlas_timestamp='2025-12-31T22:11:11.616', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T00:11:54.455 [DEBUG] [Thread-137190] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:11:54.537 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T00:11:54.551 [DEBUG] [Thread-137193] [transport.py] [_log()] starting thread (client mode): 0xb1745ae0
2026-01-01T00:11:54.551 [DEBUG] [Thread-137193] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:11:54.567 [DEBUG] [Thread-137193] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T00:11:54.567 [INFO] [Thread-137193] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T00:11:54.574 [DEBUG] [Thread-137193] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:11:54.574 [DEBUG] [Thread-137193] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T00:11:54.575 [DEBUG] [Thread-137193] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:11:54.575 [DEBUG] [Thread-137193] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:11:54.575 [DEBUG] [Thread-137193] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:11:54.575 [DEBUG] [Thread-137193] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:11:54.575 [DEBUG] [Thread-137193] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:11:54.575 [DEBUG] [Thread-137193] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:11:54.575 [DEBUG] [Thread-137193] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:11:54.575 [DEBUG] [Thread-137193] [transport.py] [_log()] client lang: <none>
2026-01-01T00:11:54.575 [DEBUG] [Thread-137193] [transport.py] [_log()] server lang: <none>
2026-01-01T00:11:54.575 [DEBUG] [Thread-137193] [transport.py] [_log()] kex follows: False
2026-01-01T00:11:54.575 [DEBUG] [Thread-137193] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:11:54.575 [DEBUG] [Thread-137193] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:11:54.575 [DEBUG] [Thread-137193] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:11:54.575 [DEBUG] [Thread-137193] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:11:54.575 [DEBUG] [Thread-137193] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:11:54.575 [DEBUG] [Thread-137193] [transport.py] [_log()] Compression: none
2026-01-01T00:11:54.575 [DEBUG] [Thread-137193] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:11:54.632 [DEBUG] [Thread-137193] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:11:54.632 [DEBUG] [Thread-137193] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:11:54.633 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T00:11:54.633 [DEBUG] [Thread-137193] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T00:11:54.634 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:11:54.688 [DEBUG] [Thread-137193] [transport.py] [_log()] userauth is OK
2026-01-01T00:11:54.689 [DEBUG] [Thread-137193] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:11:54.689 [DEBUG] [Thread-137193] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:11:54.689 [DEBUG] [Thread-137193] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T00:11:54.689 [DEBUG] [Thread-137193] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:11:54.709 [INFO] [Thread-137193] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:11:54.709 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T00:11:54.710 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:11:55.234 [DEBUG] [Thread-137195 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:11:55.571 [DEBUG] [Thread-137193] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:11:55.571 [DEBUG] [Thread-137193] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:11:55.620 [DEBUG] [Thread-137193] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:11:55.620 [DEBUG] [Thread-137193] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:11:55.628 [DEBUG] [Thread-137193] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:11:55.636 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:11:55.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T00:11:55.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T00:11:55.652 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:11:55.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:11:55.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:11:55.660 [DEBUG] [Thread-137193] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:12:06.221 [DEBUG] [Thread-137196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:12:21.270 [DEBUG] [Thread-137197 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:12:25.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T00:12:25.682 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T00:12:25.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T00:12:26.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 0, 11, 57), 3.53, 79.31, 0.0, 20.17, 14.5, 0, 0, 0, 2, 0, 0),)
2026-01-01T00:12:26.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 00:11:57
2026-01-01T00:12:26.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T00:12:26.671 [DEBUG] [Thread-137198] [transport.py] [_log()] starting thread (client mode): 0xb1747ac0
2026-01-01T00:12:26.671 [DEBUG] [Thread-137198] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:12:26.691 [DEBUG] [Thread-137198] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T00:12:26.691 [INFO] [Thread-137198] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T00:12:26.694 [DEBUG] [Thread-137198] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:12:26.694 [DEBUG] [Thread-137198] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T00:12:26.695 [DEBUG] [Thread-137198] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:12:26.695 [DEBUG] [Thread-137198] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:12:26.695 [DEBUG] [Thread-137198] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:12:26.695 [DEBUG] [Thread-137198] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:12:26.695 [DEBUG] [Thread-137198] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:12:26.695 [DEBUG] [Thread-137198] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:12:26.695 [DEBUG] [Thread-137198] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:12:26.695 [DEBUG] [Thread-137198] [transport.py] [_log()] client lang: <none>
2026-01-01T00:12:26.695 [DEBUG] [Thread-137198] [transport.py] [_log()] server lang: <none>
2026-01-01T00:12:26.695 [DEBUG] [Thread-137198] [transport.py] [_log()] kex follows: False
2026-01-01T00:12:26.695 [DEBUG] [Thread-137198] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:12:26.695 [DEBUG] [Thread-137198] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:12:26.695 [DEBUG] [Thread-137198] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:12:26.695 [DEBUG] [Thread-137198] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:12:26.695 [DEBUG] [Thread-137198] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:12:26.696 [DEBUG] [Thread-137198] [transport.py] [_log()] Compression: none
2026-01-01T00:12:26.696 [DEBUG] [Thread-137198] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:12:26.717 [DEBUG] [Thread-137198] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:12:26.718 [DEBUG] [Thread-137198] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:12:26.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T00:12:26.720 [DEBUG] [Thread-137198] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T00:12:26.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:12:26.722 [DEBUG] [Thread-137198] [transport.py] [_log()] userauth is OK
2026-01-01T00:12:26.722 [DEBUG] [Thread-137198] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:12:26.722 [DEBUG] [Thread-137198] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:12:26.722 [DEBUG] [Thread-137198] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T00:12:26.722 [DEBUG] [Thread-137198] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:12:26.745 [INFO] [Thread-137198] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:12:26.746 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:12:27.386 [DEBUG] [Thread-137198] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:12:27.387 [DEBUG] [Thread-137198] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:12:27.387 [DEBUG] [Thread-137198] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T00:12:27.428 [DEBUG] [Thread-137198] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:12:27.428 [DEBUG] [Thread-137198] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:12:27.431 [DEBUG] [Thread-137198] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:12:27.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:12:27.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T00:12:27.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T00:12:27.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T00:12:27.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:12:27.453 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T00:12:27.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:12:27.453 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:12:27.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T00:12:27.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.924787 -999.00  +14.70  14.17     81  +11.60 1 2 1 2 1     0    0 2.86 -13.26 Z..S. 11.4 14.2 204.5 17.5 15.8 -15.5 15.6 -15.1 15.4 -13.1 15.8 -14.3
2026-01-01T00:12:27.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T00:12:27.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T00:12:27.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.924787
2026-01-01T00:12:27.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T00:12:27.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T00:12:27.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T00:12:27.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T00:12:27.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T00:12:27.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T00:11:57', tmtdew=3.53, humidity=79.31, cloud=0.0, wind=20.17, temperature=14.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:11:57', seeing=1.47, atlas_timestamp='2025-12-31T22:11:41.597', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T00:12:27.455 [DEBUG] [Thread-137198] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:12:27.548 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T00:12:27.560 [DEBUG] [Thread-137201] [transport.py] [_log()] starting thread (client mode): 0xb1747610
2026-01-01T00:12:27.560 [DEBUG] [Thread-137201] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:12:27.578 [DEBUG] [Thread-137201] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T00:12:27.579 [INFO] [Thread-137201] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T00:12:27.586 [DEBUG] [Thread-137201] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:12:27.586 [DEBUG] [Thread-137201] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T00:12:27.586 [DEBUG] [Thread-137201] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:12:27.586 [DEBUG] [Thread-137201] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:12:27.586 [DEBUG] [Thread-137201] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:12:27.586 [DEBUG] [Thread-137201] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:12:27.587 [DEBUG] [Thread-137201] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:12:27.587 [DEBUG] [Thread-137201] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:12:27.587 [DEBUG] [Thread-137201] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:12:27.587 [DEBUG] [Thread-137201] [transport.py] [_log()] client lang: <none>
2026-01-01T00:12:27.587 [DEBUG] [Thread-137201] [transport.py] [_log()] server lang: <none>
2026-01-01T00:12:27.587 [DEBUG] [Thread-137201] [transport.py] [_log()] kex follows: False
2026-01-01T00:12:27.587 [DEBUG] [Thread-137201] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:12:27.587 [DEBUG] [Thread-137201] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:12:27.587 [DEBUG] [Thread-137201] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:12:27.587 [DEBUG] [Thread-137201] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:12:27.587 [DEBUG] [Thread-137201] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:12:27.587 [DEBUG] [Thread-137201] [transport.py] [_log()] Compression: none
2026-01-01T00:12:27.587 [DEBUG] [Thread-137201] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:12:27.644 [DEBUG] [Thread-137201] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:12:27.645 [DEBUG] [Thread-137201] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:12:27.645 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T00:12:27.646 [DEBUG] [Thread-137201] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T00:12:27.647 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:12:27.700 [DEBUG] [Thread-137201] [transport.py] [_log()] userauth is OK
2026-01-01T00:12:27.700 [DEBUG] [Thread-137201] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:12:27.701 [DEBUG] [Thread-137201] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:12:27.701 [DEBUG] [Thread-137201] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T00:12:27.701 [DEBUG] [Thread-137201] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:12:27.719 [INFO] [Thread-137201] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:12:27.720 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T00:12:27.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:12:28.572 [DEBUG] [Thread-137201] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:12:28.573 [DEBUG] [Thread-137201] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:12:28.621 [DEBUG] [Thread-137201] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:12:28.621 [DEBUG] [Thread-137201] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:12:28.630 [DEBUG] [Thread-137201] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:12:28.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:12:28.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T00:12:28.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T00:12:28.657 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:12:28.657 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:12:28.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:12:28.665 [DEBUG] [Thread-137201] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:12:35.141 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:12:35.143 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:12:36.307 [DEBUG] [Thread-137203 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:12:51.361 [DEBUG] [Thread-137204 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:12:55.305 [DEBUG] [Thread-137205 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:12:58.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T00:12:58.688 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T00:12:58.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T00:12:59.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 0, 12, 29), 3.52, 79.38, 0.0, 18.32, 14.55, 0, 0, 0, 2, 0, 0),)
2026-01-01T00:12:59.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 00:12:29
2026-01-01T00:12:59.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T00:12:59.690 [DEBUG] [Thread-137206] [transport.py] [_log()] starting thread (client mode): 0xb17471c0
2026-01-01T00:12:59.690 [DEBUG] [Thread-137206] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:12:59.710 [DEBUG] [Thread-137206] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T00:12:59.710 [INFO] [Thread-137206] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T00:12:59.713 [DEBUG] [Thread-137206] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:12:59.713 [DEBUG] [Thread-137206] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T00:12:59.714 [DEBUG] [Thread-137206] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:12:59.714 [DEBUG] [Thread-137206] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:12:59.714 [DEBUG] [Thread-137206] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:12:59.714 [DEBUG] [Thread-137206] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:12:59.714 [DEBUG] [Thread-137206] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:12:59.714 [DEBUG] [Thread-137206] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:12:59.714 [DEBUG] [Thread-137206] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:12:59.714 [DEBUG] [Thread-137206] [transport.py] [_log()] client lang: <none>
2026-01-01T00:12:59.714 [DEBUG] [Thread-137206] [transport.py] [_log()] server lang: <none>
2026-01-01T00:12:59.714 [DEBUG] [Thread-137206] [transport.py] [_log()] kex follows: False
2026-01-01T00:12:59.714 [DEBUG] [Thread-137206] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:12:59.714 [DEBUG] [Thread-137206] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:12:59.714 [DEBUG] [Thread-137206] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:12:59.714 [DEBUG] [Thread-137206] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:12:59.714 [DEBUG] [Thread-137206] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:12:59.714 [DEBUG] [Thread-137206] [transport.py] [_log()] Compression: none
2026-01-01T00:12:59.714 [DEBUG] [Thread-137206] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:12:59.729 [DEBUG] [Thread-137206] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:12:59.729 [DEBUG] [Thread-137206] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:12:59.730 [DEBUG] [Thread-137206] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T00:12:59.730 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T00:12:59.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:12:59.731 [DEBUG] [Thread-137206] [transport.py] [_log()] userauth is OK
2026-01-01T00:12:59.731 [DEBUG] [Thread-137206] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:12:59.732 [DEBUG] [Thread-137206] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:12:59.732 [DEBUG] [Thread-137206] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T00:12:59.732 [DEBUG] [Thread-137206] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:12:59.752 [INFO] [Thread-137206] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:12:59.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:13:00.350 [DEBUG] [Thread-137206] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:13:00.351 [DEBUG] [Thread-137206] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:13:00.351 [DEBUG] [Thread-137206] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T00:13:00.392 [DEBUG] [Thread-137206] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:13:00.392 [DEBUG] [Thread-137206] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:13:00.396 [DEBUG] [Thread-137206] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:13:00.409 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:13:00.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T00:13:00.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T00:13:00.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T00:13:00.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:13:00.420 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T00:13:00.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:13:00.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:13:00.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T00:13:00.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.925482 -999.00  +14.70   7.45     81  +11.60 1 2 1 2 1     0    0 2.86 -12.23 .N... 8.6 7.5 224.8 18.2 15.8 -14.9 15.6 -13.9 15.5 -12.4 15.8 -13.5
2026-01-01T00:13:00.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T00:13:00.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T00:13:00.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.925482
2026-01-01T00:13:00.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T00:13:00.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T00:13:00.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T00:13:00.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T00:13:00.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T00:13:00.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T00:12:29', tmtdew=3.52, humidity=79.38, cloud=0.0, wind=18.32, temperature=14.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:12:29', seeing=1.25, atlas_timestamp='2025-12-31T22:12:41.645', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T00:13:00.423 [DEBUG] [Thread-137206] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:13:00.508 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T00:13:00.522 [DEBUG] [Thread-137209] [transport.py] [_log()] starting thread (client mode): 0xb6bbfa60
2026-01-01T00:13:00.522 [DEBUG] [Thread-137209] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:13:00.537 [DEBUG] [Thread-137209] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T00:13:00.537 [INFO] [Thread-137209] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T00:13:00.545 [DEBUG] [Thread-137209] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:13:00.545 [DEBUG] [Thread-137209] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T00:13:00.546 [DEBUG] [Thread-137209] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:13:00.546 [DEBUG] [Thread-137209] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:13:00.546 [DEBUG] [Thread-137209] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:13:00.546 [DEBUG] [Thread-137209] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:13:00.546 [DEBUG] [Thread-137209] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:13:00.546 [DEBUG] [Thread-137209] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:13:00.546 [DEBUG] [Thread-137209] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:13:00.546 [DEBUG] [Thread-137209] [transport.py] [_log()] client lang: <none>
2026-01-01T00:13:00.547 [DEBUG] [Thread-137209] [transport.py] [_log()] server lang: <none>
2026-01-01T00:13:00.547 [DEBUG] [Thread-137209] [transport.py] [_log()] kex follows: False
2026-01-01T00:13:00.547 [DEBUG] [Thread-137209] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:13:00.547 [DEBUG] [Thread-137209] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:13:00.547 [DEBUG] [Thread-137209] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:13:00.547 [DEBUG] [Thread-137209] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:13:00.547 [DEBUG] [Thread-137209] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:13:00.547 [DEBUG] [Thread-137209] [transport.py] [_log()] Compression: none
2026-01-01T00:13:00.548 [DEBUG] [Thread-137209] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:13:00.605 [DEBUG] [Thread-137209] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:13:00.606 [DEBUG] [Thread-137209] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:13:00.606 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T00:13:00.607 [DEBUG] [Thread-137209] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T00:13:00.608 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:13:00.660 [DEBUG] [Thread-137209] [transport.py] [_log()] userauth is OK
2026-01-01T00:13:00.660 [DEBUG] [Thread-137209] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:13:00.661 [DEBUG] [Thread-137209] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:13:00.661 [DEBUG] [Thread-137209] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T00:13:00.661 [DEBUG] [Thread-137209] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:13:00.682 [INFO] [Thread-137209] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:13:00.682 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T00:13:00.683 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:13:01.518 [DEBUG] [Thread-137209] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:13:01.518 [DEBUG] [Thread-137209] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:13:01.566 [DEBUG] [Thread-137209] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:13:01.567 [DEBUG] [Thread-137209] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:13:01.576 [DEBUG] [Thread-137209] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:13:01.585 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:13:01.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T00:13:01.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T00:13:01.604 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:13:01.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:13:01.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:13:01.612 [DEBUG] [Thread-137209] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:13:06.387 [DEBUG] [Thread-137211 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:13:21.436 [DEBUG] [Thread-137212 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:13:31.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T00:13:31.635 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T00:13:31.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T00:13:32.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 0, 13, 1), 3.48, 79.85, 0.0, 21.47, 14.52, 0, 0, 0, 2, 0, 0),)
2026-01-01T00:13:32.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 00:13:01
2026-01-01T00:13:32.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T00:13:32.673 [DEBUG] [Thread-137213] [transport.py] [_log()] starting thread (client mode): 0xb6bbc940
2026-01-01T00:13:32.673 [DEBUG] [Thread-137213] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:13:32.688 [DEBUG] [Thread-137213] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T00:13:32.688 [INFO] [Thread-137213] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T00:13:32.692 [DEBUG] [Thread-137213] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:13:32.692 [DEBUG] [Thread-137213] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T00:13:32.692 [DEBUG] [Thread-137213] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:13:32.692 [DEBUG] [Thread-137213] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:13:32.692 [DEBUG] [Thread-137213] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:13:32.692 [DEBUG] [Thread-137213] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:13:32.692 [DEBUG] [Thread-137213] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:13:32.692 [DEBUG] [Thread-137213] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:13:32.692 [DEBUG] [Thread-137213] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:13:32.692 [DEBUG] [Thread-137213] [transport.py] [_log()] client lang: <none>
2026-01-01T00:13:32.692 [DEBUG] [Thread-137213] [transport.py] [_log()] server lang: <none>
2026-01-01T00:13:32.692 [DEBUG] [Thread-137213] [transport.py] [_log()] kex follows: False
2026-01-01T00:13:32.692 [DEBUG] [Thread-137213] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:13:32.692 [DEBUG] [Thread-137213] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:13:32.692 [DEBUG] [Thread-137213] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:13:32.692 [DEBUG] [Thread-137213] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:13:32.692 [DEBUG] [Thread-137213] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:13:32.692 [DEBUG] [Thread-137213] [transport.py] [_log()] Compression: none
2026-01-01T00:13:32.692 [DEBUG] [Thread-137213] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:13:32.708 [DEBUG] [Thread-137213] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:13:32.708 [DEBUG] [Thread-137213] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:13:32.709 [DEBUG] [Thread-137213] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T00:13:32.709 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T00:13:32.709 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:13:32.709 [DEBUG] [Thread-137213] [transport.py] [_log()] userauth is OK
2026-01-01T00:13:32.710 [DEBUG] [Thread-137213] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:13:32.710 [DEBUG] [Thread-137213] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:13:32.710 [DEBUG] [Thread-137213] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T00:13:32.710 [DEBUG] [Thread-137213] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:13:32.720 [INFO] [Thread-137213] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:13:32.721 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:13:33.346 [DEBUG] [Thread-137213] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:13:33.346 [DEBUG] [Thread-137213] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:13:33.346 [DEBUG] [Thread-137213] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T00:13:33.387 [DEBUG] [Thread-137213] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:13:33.387 [DEBUG] [Thread-137213] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:13:33.389 [DEBUG] [Thread-137213] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:13:33.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:13:33.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T00:13:33.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T00:13:33.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T00:13:33.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:13:33.406 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T00:13:33.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:13:33.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:13:33.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T00:13:33.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.925829 -999.00  +14.70  14.69     81  +11.60 1 2 1 2 1     0    0 2.81 -12.34 .N... 19.0 14.7 206.3 20.7 15.8 -14.4 15.6 -13.4 15.5 -12.2 15.8 -13.4
2026-01-01T00:13:33.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T00:13:33.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T00:13:33.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.925829
2026-01-01T00:13:33.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T00:13:33.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T00:13:33.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T00:13:33.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T00:13:33.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T00:13:33.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T00:13:01', tmtdew=3.48, humidity=79.85, cloud=0.0, wind=21.47, temperature=14.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:13:01', seeing=1.31, atlas_timestamp='2025-12-31T22:13:11.626', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T00:13:33.407 [DEBUG] [Thread-137213] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:13:33.481 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T00:13:33.492 [DEBUG] [Thread-137216] [transport.py] [_log()] starting thread (client mode): 0xb6ba2fb0
2026-01-01T00:13:33.492 [DEBUG] [Thread-137216] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:13:33.509 [DEBUG] [Thread-137216] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T00:13:33.509 [INFO] [Thread-137216] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T00:13:33.517 [DEBUG] [Thread-137216] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:13:33.517 [DEBUG] [Thread-137216] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T00:13:33.517 [DEBUG] [Thread-137216] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:13:33.517 [DEBUG] [Thread-137216] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:13:33.517 [DEBUG] [Thread-137216] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:13:33.517 [DEBUG] [Thread-137216] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:13:33.517 [DEBUG] [Thread-137216] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:13:33.517 [DEBUG] [Thread-137216] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:13:33.517 [DEBUG] [Thread-137216] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:13:33.517 [DEBUG] [Thread-137216] [transport.py] [_log()] client lang: <none>
2026-01-01T00:13:33.517 [DEBUG] [Thread-137216] [transport.py] [_log()] server lang: <none>
2026-01-01T00:13:33.517 [DEBUG] [Thread-137216] [transport.py] [_log()] kex follows: False
2026-01-01T00:13:33.517 [DEBUG] [Thread-137216] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:13:33.517 [DEBUG] [Thread-137216] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:13:33.517 [DEBUG] [Thread-137216] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:13:33.517 [DEBUG] [Thread-137216] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:13:33.517 [DEBUG] [Thread-137216] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:13:33.517 [DEBUG] [Thread-137216] [transport.py] [_log()] Compression: none
2026-01-01T00:13:33.517 [DEBUG] [Thread-137216] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:13:33.574 [DEBUG] [Thread-137216] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:13:33.574 [DEBUG] [Thread-137216] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:13:33.575 [DEBUG] [Thread-137216] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T00:13:33.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T00:13:33.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:13:33.631 [DEBUG] [Thread-137216] [transport.py] [_log()] userauth is OK
2026-01-01T00:13:33.632 [DEBUG] [Thread-137216] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:13:33.632 [DEBUG] [Thread-137216] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:13:33.632 [DEBUG] [Thread-137216] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T00:13:33.632 [DEBUG] [Thread-137216] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:13:33.651 [INFO] [Thread-137216] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:13:33.651 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T00:13:33.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:13:34.509 [DEBUG] [Thread-137216] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:13:34.509 [DEBUG] [Thread-137216] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:13:34.557 [DEBUG] [Thread-137216] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:13:34.558 [DEBUG] [Thread-137216] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:13:34.566 [DEBUG] [Thread-137216] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:13:34.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:13:34.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T00:13:34.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T00:13:34.591 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:13:34.591 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:13:34.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:13:34.599 [DEBUG] [Thread-137216] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:13:35.344 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:13:35.345 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:13:36.469 [DEBUG] [Thread-137218 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:13:51.533 [DEBUG] [Thread-137219 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:13:55.384 [DEBUG] [Thread-137220 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:14:04.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T00:14:04.622 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T00:14:04.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T00:14:05.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 0, 13, 33), 3.46, 79.93, 0.0, 21.12, 14.55, 0, 0, 0, 2, 0, 0),)
2026-01-01T00:14:05.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 00:13:33
2026-01-01T00:14:05.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T00:14:05.629 [DEBUG] [Thread-137221] [transport.py] [_log()] starting thread (client mode): 0xb1747610
2026-01-01T00:14:05.629 [DEBUG] [Thread-137221] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:14:05.648 [DEBUG] [Thread-137221] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T00:14:05.649 [INFO] [Thread-137221] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T00:14:05.652 [DEBUG] [Thread-137221] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:14:05.652 [DEBUG] [Thread-137221] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T00:14:05.652 [DEBUG] [Thread-137221] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:14:05.652 [DEBUG] [Thread-137221] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:14:05.652 [DEBUG] [Thread-137221] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:14:05.652 [DEBUG] [Thread-137221] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:14:05.652 [DEBUG] [Thread-137221] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:14:05.652 [DEBUG] [Thread-137221] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:14:05.652 [DEBUG] [Thread-137221] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:14:05.652 [DEBUG] [Thread-137221] [transport.py] [_log()] client lang: <none>
2026-01-01T00:14:05.652 [DEBUG] [Thread-137221] [transport.py] [_log()] server lang: <none>
2026-01-01T00:14:05.652 [DEBUG] [Thread-137221] [transport.py] [_log()] kex follows: False
2026-01-01T00:14:05.652 [DEBUG] [Thread-137221] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:14:05.652 [DEBUG] [Thread-137221] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:14:05.652 [DEBUG] [Thread-137221] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:14:05.652 [DEBUG] [Thread-137221] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:14:05.652 [DEBUG] [Thread-137221] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:14:05.652 [DEBUG] [Thread-137221] [transport.py] [_log()] Compression: none
2026-01-01T00:14:05.652 [DEBUG] [Thread-137221] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:14:05.669 [DEBUG] [Thread-137221] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:14:05.669 [DEBUG] [Thread-137221] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:14:05.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T00:14:05.670 [DEBUG] [Thread-137221] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T00:14:05.671 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:14:05.673 [DEBUG] [Thread-137221] [transport.py] [_log()] userauth is OK
2026-01-01T00:14:05.673 [DEBUG] [Thread-137221] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:14:05.673 [DEBUG] [Thread-137221] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:14:05.673 [DEBUG] [Thread-137221] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T00:14:05.673 [DEBUG] [Thread-137221] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:14:05.697 [INFO] [Thread-137221] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:14:05.698 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:14:06.325 [DEBUG] [Thread-137221] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:14:06.325 [DEBUG] [Thread-137221] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:14:06.325 [DEBUG] [Thread-137221] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T00:14:06.367 [DEBUG] [Thread-137221] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:14:06.367 [DEBUG] [Thread-137221] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:14:06.370 [DEBUG] [Thread-137221] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:14:06.382 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:14:06.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T00:14:06.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T00:14:06.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T00:14:06.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:14:06.387 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T00:14:06.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:14:06.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:14:06.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T00:14:06.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.926176 -999.00  +14.70   8.31     81  +11.60 1 2 1 2 1     0    0 2.85 -12.73 .N... 8.9 8.3 218.6 16.6 15.7 -14.1 15.6 -13.2 15.5 -11.9 15.8 -12.9
2026-01-01T00:14:06.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T00:14:06.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T00:14:06.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.926176
2026-01-01T00:14:06.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T00:14:06.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T00:14:06.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T00:14:06.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T00:14:06.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T00:14:06.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T00:13:33', tmtdew=3.46, humidity=79.93, cloud=0.0, wind=21.12, temperature=14.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:13:33', seeing=1.31, atlas_timestamp='2025-12-31T22:13:41.606', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T00:14:06.388 [DEBUG] [Thread-137221] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:14:06.462 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T00:14:06.474 [DEBUG] [Thread-137224] [transport.py] [_log()] starting thread (client mode): 0xb6ba0940
2026-01-01T00:14:06.474 [DEBUG] [Thread-137224] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:14:06.489 [DEBUG] [Thread-137224] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T00:14:06.489 [INFO] [Thread-137224] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T00:14:06.497 [DEBUG] [Thread-137224] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:14:06.497 [DEBUG] [Thread-137224] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T00:14:06.497 [DEBUG] [Thread-137224] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:14:06.497 [DEBUG] [Thread-137224] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:14:06.497 [DEBUG] [Thread-137224] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:14:06.497 [DEBUG] [Thread-137224] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:14:06.497 [DEBUG] [Thread-137224] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:14:06.497 [DEBUG] [Thread-137224] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:14:06.497 [DEBUG] [Thread-137224] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:14:06.497 [DEBUG] [Thread-137224] [transport.py] [_log()] client lang: <none>
2026-01-01T00:14:06.497 [DEBUG] [Thread-137224] [transport.py] [_log()] server lang: <none>
2026-01-01T00:14:06.497 [DEBUG] [Thread-137224] [transport.py] [_log()] kex follows: False
2026-01-01T00:14:06.497 [DEBUG] [Thread-137224] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:14:06.497 [DEBUG] [Thread-137224] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:14:06.497 [DEBUG] [Thread-137224] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:14:06.497 [DEBUG] [Thread-137224] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:14:06.497 [DEBUG] [Thread-137224] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:14:06.497 [DEBUG] [Thread-137224] [transport.py] [_log()] Compression: none
2026-01-01T00:14:06.497 [DEBUG] [Thread-137224] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:14:06.554 [DEBUG] [Thread-137224] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:14:06.554 [DEBUG] [Thread-137224] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:14:06.554 [DEBUG] [Thread-137224] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T00:14:06.554 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T00:14:06.554 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:14:06.569 [DEBUG] [Thread-137226 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:14:06.614 [DEBUG] [Thread-137224] [transport.py] [_log()] userauth is OK
2026-01-01T00:14:06.614 [DEBUG] [Thread-137224] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:14:06.614 [DEBUG] [Thread-137224] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:14:06.614 [DEBUG] [Thread-137224] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T00:14:06.614 [DEBUG] [Thread-137224] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:14:06.629 [INFO] [Thread-137224] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:14:06.629 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T00:14:06.629 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:14:07.535 [DEBUG] [Thread-137224] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:14:07.536 [DEBUG] [Thread-137224] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:14:07.583 [DEBUG] [Thread-137224] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:14:07.583 [DEBUG] [Thread-137224] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:14:07.592 [DEBUG] [Thread-137224] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:14:07.599 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:14:07.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T00:14:07.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T00:14:07.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:14:07.619 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:14:07.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:14:07.627 [DEBUG] [Thread-137224] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:14:21.605 [DEBUG] [Thread-137227 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:14:35.545 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:14:35.546 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:14:36.642 [DEBUG] [Thread-137228 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:14:37.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T00:14:37.649 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T00:14:37.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T00:14:38.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 0, 14, 5), 3.45, 79.96, 0.0, 21.0, 14.52, 0, 0, 0, 2, 0, 0),)
2026-01-01T00:14:38.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 00:14:05
2026-01-01T00:14:38.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T00:14:38.689 [DEBUG] [Thread-137229] [transport.py] [_log()] starting thread (client mode): 0xb6ba0430
2026-01-01T00:14:38.690 [DEBUG] [Thread-137229] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:14:38.710 [DEBUG] [Thread-137229] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T00:14:38.710 [INFO] [Thread-137229] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T00:14:38.713 [DEBUG] [Thread-137229] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:14:38.713 [DEBUG] [Thread-137229] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T00:14:38.713 [DEBUG] [Thread-137229] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:14:38.713 [DEBUG] [Thread-137229] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:14:38.713 [DEBUG] [Thread-137229] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:14:38.713 [DEBUG] [Thread-137229] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:14:38.713 [DEBUG] [Thread-137229] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:14:38.713 [DEBUG] [Thread-137229] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:14:38.713 [DEBUG] [Thread-137229] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:14:38.713 [DEBUG] [Thread-137229] [transport.py] [_log()] client lang: <none>
2026-01-01T00:14:38.713 [DEBUG] [Thread-137229] [transport.py] [_log()] server lang: <none>
2026-01-01T00:14:38.713 [DEBUG] [Thread-137229] [transport.py] [_log()] kex follows: False
2026-01-01T00:14:38.713 [DEBUG] [Thread-137229] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:14:38.713 [DEBUG] [Thread-137229] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:14:38.713 [DEBUG] [Thread-137229] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:14:38.713 [DEBUG] [Thread-137229] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:14:38.713 [DEBUG] [Thread-137229] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:14:38.713 [DEBUG] [Thread-137229] [transport.py] [_log()] Compression: none
2026-01-01T00:14:38.713 [DEBUG] [Thread-137229] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:14:38.728 [DEBUG] [Thread-137229] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:14:38.728 [DEBUG] [Thread-137229] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:14:38.728 [DEBUG] [Thread-137229] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T00:14:38.728 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T00:14:38.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:14:38.729 [DEBUG] [Thread-137229] [transport.py] [_log()] userauth is OK
2026-01-01T00:14:38.729 [DEBUG] [Thread-137229] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:14:38.729 [DEBUG] [Thread-137229] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:14:38.729 [DEBUG] [Thread-137229] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T00:14:38.729 [DEBUG] [Thread-137229] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:14:38.739 [INFO] [Thread-137229] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:14:38.739 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:14:39.390 [DEBUG] [Thread-137229] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:14:39.390 [DEBUG] [Thread-137229] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:14:39.390 [DEBUG] [Thread-137229] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T00:14:39.430 [DEBUG] [Thread-137229] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:14:39.430 [DEBUG] [Thread-137229] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:14:39.433 [DEBUG] [Thread-137229] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:14:39.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:14:39.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T00:14:39.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T00:14:39.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T00:14:39.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:14:39.453 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T00:14:39.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:14:39.453 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:14:39.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T00:14:39.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.926523 -999.00  +14.70   6.80     81  +11.60 1 2 1 2 1     0    0 2.85 -11.24 .N... 10.0 6.8 183.2 15.8 15.8 -13.9 15.6 -12.8 15.5 -11.7 15.8 -12.7
2026-01-01T00:14:39.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T00:14:39.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T00:14:39.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.926523
2026-01-01T00:14:39.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T00:14:39.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T00:14:39.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T00:14:39.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T00:14:39.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T00:14:39.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T00:14:05', tmtdew=3.45, humidity=79.96, cloud=0.0, wind=21.0, temperature=14.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:14:05', seeing=1.31, atlas_timestamp='2025-12-31T22:14:11.587', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T00:14:39.454 [DEBUG] [Thread-137229] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:14:39.528 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T00:14:39.539 [DEBUG] [Thread-137232] [transport.py] [_log()] starting thread (client mode): 0xb6ba3850
2026-01-01T00:14:39.539 [DEBUG] [Thread-137232] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:14:39.554 [DEBUG] [Thread-137232] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T00:14:39.554 [INFO] [Thread-137232] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T00:14:39.561 [DEBUG] [Thread-137232] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:14:39.561 [DEBUG] [Thread-137232] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T00:14:39.561 [DEBUG] [Thread-137232] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:14:39.561 [DEBUG] [Thread-137232] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:14:39.561 [DEBUG] [Thread-137232] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:14:39.561 [DEBUG] [Thread-137232] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:14:39.561 [DEBUG] [Thread-137232] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:14:39.561 [DEBUG] [Thread-137232] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:14:39.561 [DEBUG] [Thread-137232] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:14:39.561 [DEBUG] [Thread-137232] [transport.py] [_log()] client lang: <none>
2026-01-01T00:14:39.561 [DEBUG] [Thread-137232] [transport.py] [_log()] server lang: <none>
2026-01-01T00:14:39.561 [DEBUG] [Thread-137232] [transport.py] [_log()] kex follows: False
2026-01-01T00:14:39.561 [DEBUG] [Thread-137232] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:14:39.561 [DEBUG] [Thread-137232] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:14:39.561 [DEBUG] [Thread-137232] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:14:39.561 [DEBUG] [Thread-137232] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:14:39.562 [DEBUG] [Thread-137232] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:14:39.562 [DEBUG] [Thread-137232] [transport.py] [_log()] Compression: none
2026-01-01T00:14:39.562 [DEBUG] [Thread-137232] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:14:39.620 [DEBUG] [Thread-137232] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:14:39.620 [DEBUG] [Thread-137232] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:14:39.620 [DEBUG] [Thread-137232] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T00:14:39.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T00:14:39.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:14:39.679 [DEBUG] [Thread-137232] [transport.py] [_log()] userauth is OK
2026-01-01T00:14:39.679 [DEBUG] [Thread-137232] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:14:39.679 [DEBUG] [Thread-137232] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:14:39.679 [DEBUG] [Thread-137232] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T00:14:39.679 [DEBUG] [Thread-137232] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:14:39.693 [INFO] [Thread-137232] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:14:39.693 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T00:14:39.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:14:40.495 [DEBUG] [Thread-137232] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:14:40.496 [DEBUG] [Thread-137232] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:14:40.544 [DEBUG] [Thread-137232] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:14:40.544 [DEBUG] [Thread-137232] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:14:40.554 [DEBUG] [Thread-137232] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:14:40.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:14:40.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T00:14:40.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T00:14:40.582 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:14:40.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:14:40.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:14:40.591 [DEBUG] [Thread-137232] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:14:51.671 [DEBUG] [Thread-137234 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:14:55.461 [DEBUG] [Thread-137235 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:15:06.711 [DEBUG] [Thread-137236 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:15:10.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T00:15:10.613 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T00:15:10.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T00:15:11.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 0, 14, 37), 3.45, 79.98, 0.0, 20.22, 14.49, 0, 0, 0, 2, 0, 0),)
2026-01-01T00:15:11.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 00:14:37
2026-01-01T00:15:11.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T00:15:11.654 [DEBUG] [Thread-137237] [transport.py] [_log()] starting thread (client mode): 0xb6ba2e90
2026-01-01T00:15:11.654 [DEBUG] [Thread-137237] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:15:11.674 [DEBUG] [Thread-137237] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T00:15:11.674 [INFO] [Thread-137237] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T00:15:11.678 [DEBUG] [Thread-137237] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:15:11.678 [DEBUG] [Thread-137237] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T00:15:11.678 [DEBUG] [Thread-137237] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:15:11.678 [DEBUG] [Thread-137237] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:15:11.678 [DEBUG] [Thread-137237] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:15:11.678 [DEBUG] [Thread-137237] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:15:11.678 [DEBUG] [Thread-137237] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:15:11.678 [DEBUG] [Thread-137237] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:15:11.678 [DEBUG] [Thread-137237] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:15:11.678 [DEBUG] [Thread-137237] [transport.py] [_log()] client lang: <none>
2026-01-01T00:15:11.678 [DEBUG] [Thread-137237] [transport.py] [_log()] server lang: <none>
2026-01-01T00:15:11.678 [DEBUG] [Thread-137237] [transport.py] [_log()] kex follows: False
2026-01-01T00:15:11.678 [DEBUG] [Thread-137237] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:15:11.678 [DEBUG] [Thread-137237] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:15:11.678 [DEBUG] [Thread-137237] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:15:11.678 [DEBUG] [Thread-137237] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:15:11.678 [DEBUG] [Thread-137237] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:15:11.678 [DEBUG] [Thread-137237] [transport.py] [_log()] Compression: none
2026-01-01T00:15:11.678 [DEBUG] [Thread-137237] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:15:11.686 [DEBUG] [Thread-137237] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:15:11.686 [DEBUG] [Thread-137237] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:15:11.686 [DEBUG] [Thread-137237] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T00:15:11.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T00:15:11.687 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:15:11.687 [DEBUG] [Thread-137237] [transport.py] [_log()] userauth is OK
2026-01-01T00:15:11.687 [DEBUG] [Thread-137237] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:15:11.687 [DEBUG] [Thread-137237] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:15:11.687 [DEBUG] [Thread-137237] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T00:15:11.687 [DEBUG] [Thread-137237] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:15:11.706 [INFO] [Thread-137237] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:15:11.706 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:15:12.619 [DEBUG] [Thread-137237] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:15:12.619 [DEBUG] [Thread-137237] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:15:12.619 [DEBUG] [Thread-137237] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T00:15:12.660 [DEBUG] [Thread-137237] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:15:12.661 [DEBUG] [Thread-137237] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:15:12.664 [DEBUG] [Thread-137237] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:15:12.671 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:15:12.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T00:15:12.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T00:15:12.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T00:15:12.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:15:12.736 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T00:15:12.736 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:15:12.736 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:15:12.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T00:15:12.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.926871 -999.00  +14.70  15.68     81  +11.60 1 2 1 2 1     0    0 2.94 -10.26 ..... 14.0 15.7 199.6 17.9 15.8 -13.6 15.6 -12.7 15.5 -11.4 15.8 -12.5
2026-01-01T00:15:12.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T00:15:12.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T00:15:12.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.926871
2026-01-01T00:15:12.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T00:15:12.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T00:15:12.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T00:15:12.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T00:15:12.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T00:15:12.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T00:14:37', tmtdew=3.45, humidity=79.98, cloud=0.0, wind=20.22, temperature=14.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:15:10', seeing=1.31, atlas_timestamp='2025-12-31T22:14:41.654', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T00:15:12.739 [DEBUG] [Thread-137237] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:15:12.824 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T00:15:12.836 [DEBUG] [Thread-137240] [transport.py] [_log()] starting thread (client mode): 0xb6ba3880
2026-01-01T00:15:12.837 [DEBUG] [Thread-137240] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:15:12.852 [DEBUG] [Thread-137240] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T00:15:12.852 [INFO] [Thread-137240] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T00:15:12.860 [DEBUG] [Thread-137240] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:15:12.860 [DEBUG] [Thread-137240] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T00:15:12.860 [DEBUG] [Thread-137240] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:15:12.860 [DEBUG] [Thread-137240] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:15:12.861 [DEBUG] [Thread-137240] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:15:12.861 [DEBUG] [Thread-137240] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:15:12.861 [DEBUG] [Thread-137240] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:15:12.861 [DEBUG] [Thread-137240] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:15:12.861 [DEBUG] [Thread-137240] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:15:12.861 [DEBUG] [Thread-137240] [transport.py] [_log()] client lang: <none>
2026-01-01T00:15:12.861 [DEBUG] [Thread-137240] [transport.py] [_log()] server lang: <none>
2026-01-01T00:15:12.861 [DEBUG] [Thread-137240] [transport.py] [_log()] kex follows: False
2026-01-01T00:15:12.861 [DEBUG] [Thread-137240] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:15:12.861 [DEBUG] [Thread-137240] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:15:12.861 [DEBUG] [Thread-137240] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:15:12.861 [DEBUG] [Thread-137240] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:15:12.861 [DEBUG] [Thread-137240] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:15:12.861 [DEBUG] [Thread-137240] [transport.py] [_log()] Compression: none
2026-01-01T00:15:12.861 [DEBUG] [Thread-137240] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:15:12.919 [DEBUG] [Thread-137240] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:15:12.920 [DEBUG] [Thread-137240] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:15:12.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T00:15:12.921 [DEBUG] [Thread-137240] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T00:15:12.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:15:12.976 [DEBUG] [Thread-137240] [transport.py] [_log()] userauth is OK
2026-01-01T00:15:12.977 [DEBUG] [Thread-137240] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:15:12.977 [DEBUG] [Thread-137240] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:15:12.977 [DEBUG] [Thread-137240] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T00:15:12.977 [DEBUG] [Thread-137240] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:15:12.997 [INFO] [Thread-137240] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:15:12.997 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T00:15:12.998 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:15:13.819 [DEBUG] [Thread-137240] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:15:13.819 [DEBUG] [Thread-137240] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:15:13.867 [DEBUG] [Thread-137240] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:15:13.867 [DEBUG] [Thread-137240] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:15:13.876 [DEBUG] [Thread-137240] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:15:13.886 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:15:13.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T00:15:13.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T00:15:13.904 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:15:13.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:15:13.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:15:13.913 [DEBUG] [Thread-137240] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:15:21.740 [DEBUG] [Thread-137242 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:15:35.749 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:15:35.750 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:15:36.789 [DEBUG] [Thread-137243 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:15:43.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T00:15:43.936 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T00:15:43.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T00:15:44.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 0, 15, 9), 3.45, 80.0, 0.0, 21.16, 14.47, 0, 0, 0, 2, 0, 0),)
2026-01-01T00:15:44.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 00:15:09
2026-01-01T00:15:44.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T00:15:44.922 [DEBUG] [Thread-137244] [transport.py] [_log()] starting thread (client mode): 0xb6bbf5b0
2026-01-01T00:15:44.922 [DEBUG] [Thread-137244] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:15:44.943 [DEBUG] [Thread-137244] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T00:15:44.944 [INFO] [Thread-137244] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T00:15:44.947 [DEBUG] [Thread-137244] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:15:44.947 [DEBUG] [Thread-137244] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T00:15:44.947 [DEBUG] [Thread-137244] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:15:44.947 [DEBUG] [Thread-137244] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:15:44.947 [DEBUG] [Thread-137244] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:15:44.947 [DEBUG] [Thread-137244] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:15:44.947 [DEBUG] [Thread-137244] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:15:44.947 [DEBUG] [Thread-137244] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:15:44.948 [DEBUG] [Thread-137244] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:15:44.948 [DEBUG] [Thread-137244] [transport.py] [_log()] client lang: <none>
2026-01-01T00:15:44.948 [DEBUG] [Thread-137244] [transport.py] [_log()] server lang: <none>
2026-01-01T00:15:44.948 [DEBUG] [Thread-137244] [transport.py] [_log()] kex follows: False
2026-01-01T00:15:44.948 [DEBUG] [Thread-137244] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:15:44.948 [DEBUG] [Thread-137244] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:15:44.948 [DEBUG] [Thread-137244] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:15:44.948 [DEBUG] [Thread-137244] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:15:44.948 [DEBUG] [Thread-137244] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:15:44.948 [DEBUG] [Thread-137244] [transport.py] [_log()] Compression: none
2026-01-01T00:15:44.948 [DEBUG] [Thread-137244] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:15:44.968 [DEBUG] [Thread-137244] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:15:44.968 [DEBUG] [Thread-137244] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:15:44.969 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T00:15:44.969 [DEBUG] [Thread-137244] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T00:15:44.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:15:44.971 [DEBUG] [Thread-137244] [transport.py] [_log()] userauth is OK
2026-01-01T00:15:44.971 [DEBUG] [Thread-137244] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:15:44.972 [DEBUG] [Thread-137244] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:15:44.972 [DEBUG] [Thread-137244] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T00:15:44.972 [DEBUG] [Thread-137244] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:15:45.009 [INFO] [Thread-137244] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:15:45.009 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:15:45.653 [DEBUG] [Thread-137244] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:15:45.653 [DEBUG] [Thread-137244] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:15:45.654 [DEBUG] [Thread-137244] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T00:15:45.693 [DEBUG] [Thread-137244] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:15:45.694 [DEBUG] [Thread-137244] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:15:45.696 [DEBUG] [Thread-137244] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:15:45.708 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:15:45.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T00:15:45.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T00:15:45.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T00:15:45.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:15:45.716 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T00:15:45.716 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:15:45.716 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:15:45.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T00:15:45.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.927218 -999.00  +14.70  13.91     81  +11.60 1 2 1 2 1     0    0 2.94 -10.18 ..... 13.9 13.9 187.6 23.2 15.8 -13.2 15.6 -12.7 15.5 -11.5 15.8 -12.5
2026-01-01T00:15:45.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T00:15:45.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T00:15:45.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.927218
2026-01-01T00:15:45.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T00:15:45.718 [DEBUG] [Thread-137244] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:15:45.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T00:15:45.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T00:15:45.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T00:15:45.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T00:15:45.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T00:15:09', tmtdew=3.45, humidity=80.0, cloud=0.0, wind=21.16, temperature=14.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:15:42', seeing=1.31, atlas_timestamp='2025-12-31T22:15:11.635', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T00:15:45.807 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T00:15:45.817 [DEBUG] [Thread-137247] [transport.py] [_log()] starting thread (client mode): 0xb6bbfd30
2026-01-01T00:15:45.817 [DEBUG] [Thread-137247] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:15:45.833 [DEBUG] [Thread-137247] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T00:15:45.833 [INFO] [Thread-137247] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T00:15:45.843 [DEBUG] [Thread-137247] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:15:45.843 [DEBUG] [Thread-137247] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T00:15:45.843 [DEBUG] [Thread-137247] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:15:45.843 [DEBUG] [Thread-137247] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:15:45.843 [DEBUG] [Thread-137247] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:15:45.843 [DEBUG] [Thread-137247] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:15:45.844 [DEBUG] [Thread-137247] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:15:45.844 [DEBUG] [Thread-137247] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:15:45.844 [DEBUG] [Thread-137247] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:15:45.844 [DEBUG] [Thread-137247] [transport.py] [_log()] client lang: <none>
2026-01-01T00:15:45.844 [DEBUG] [Thread-137247] [transport.py] [_log()] server lang: <none>
2026-01-01T00:15:45.844 [DEBUG] [Thread-137247] [transport.py] [_log()] kex follows: False
2026-01-01T00:15:45.844 [DEBUG] [Thread-137247] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:15:45.844 [DEBUG] [Thread-137247] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:15:45.844 [DEBUG] [Thread-137247] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:15:45.844 [DEBUG] [Thread-137247] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:15:45.844 [DEBUG] [Thread-137247] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:15:45.845 [DEBUG] [Thread-137247] [transport.py] [_log()] Compression: none
2026-01-01T00:15:45.845 [DEBUG] [Thread-137247] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:15:45.899 [DEBUG] [Thread-137247] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:15:45.900 [DEBUG] [Thread-137247] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:15:45.901 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T00:15:45.901 [DEBUG] [Thread-137247] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T00:15:45.902 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:15:45.956 [DEBUG] [Thread-137247] [transport.py] [_log()] userauth is OK
2026-01-01T00:15:45.956 [DEBUG] [Thread-137247] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:15:45.957 [DEBUG] [Thread-137247] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:15:45.957 [DEBUG] [Thread-137247] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T00:15:45.957 [DEBUG] [Thread-137247] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:15:45.976 [INFO] [Thread-137247] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:15:45.977 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T00:15:45.977 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:15:46.862 [DEBUG] [Thread-137247] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:15:46.862 [DEBUG] [Thread-137247] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:15:46.910 [DEBUG] [Thread-137247] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:15:46.910 [DEBUG] [Thread-137247] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:15:46.919 [DEBUG] [Thread-137247] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:15:46.929 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:15:46.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T00:15:46.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T00:15:46.947 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:15:46.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:15:46.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:15:46.956 [DEBUG] [Thread-137247] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:15:51.826 [DEBUG] [Thread-137249 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:15:55.544 [DEBUG] [Thread-137250 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:16:06.884 [DEBUG] [Thread-137251 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:16:16.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T00:16:16.952 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T00:16:16.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T00:16:17.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 0, 16, 14), 3.45, 79.98, 0.0, 20.29, 14.47, 0, 0, 0, 2, 0, 0),)
2026-01-01T00:16:17.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 00:16:14
2026-01-01T00:16:17.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T00:16:17.953 [DEBUG] [Thread-137252] [transport.py] [_log()] starting thread (client mode): 0xb9559fc0
2026-01-01T00:16:17.953 [DEBUG] [Thread-137252] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:16:17.973 [DEBUG] [Thread-137252] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T00:16:17.973 [INFO] [Thread-137252] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T00:16:17.977 [DEBUG] [Thread-137252] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:16:17.977 [DEBUG] [Thread-137252] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T00:16:17.977 [DEBUG] [Thread-137252] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:16:17.977 [DEBUG] [Thread-137252] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:16:17.977 [DEBUG] [Thread-137252] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:16:17.977 [DEBUG] [Thread-137252] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:16:17.977 [DEBUG] [Thread-137252] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:16:17.977 [DEBUG] [Thread-137252] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:16:17.977 [DEBUG] [Thread-137252] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:16:17.977 [DEBUG] [Thread-137252] [transport.py] [_log()] client lang: <none>
2026-01-01T00:16:17.977 [DEBUG] [Thread-137252] [transport.py] [_log()] server lang: <none>
2026-01-01T00:16:17.977 [DEBUG] [Thread-137252] [transport.py] [_log()] kex follows: False
2026-01-01T00:16:17.977 [DEBUG] [Thread-137252] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:16:17.977 [DEBUG] [Thread-137252] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:16:17.977 [DEBUG] [Thread-137252] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:16:17.977 [DEBUG] [Thread-137252] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:16:17.977 [DEBUG] [Thread-137252] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:16:17.977 [DEBUG] [Thread-137252] [transport.py] [_log()] Compression: none
2026-01-01T00:16:17.977 [DEBUG] [Thread-137252] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:16:17.994 [DEBUG] [Thread-137252] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:16:17.994 [DEBUG] [Thread-137252] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:16:17.995 [DEBUG] [Thread-137252] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T00:16:17.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T00:16:17.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:16:17.996 [DEBUG] [Thread-137252] [transport.py] [_log()] userauth is OK
2026-01-01T00:16:17.997 [DEBUG] [Thread-137252] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:16:17.997 [DEBUG] [Thread-137252] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:16:17.997 [DEBUG] [Thread-137252] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T00:16:17.997 [DEBUG] [Thread-137252] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:16:18.018 [INFO] [Thread-137252] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:16:18.018 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:16:18.674 [DEBUG] [Thread-137252] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:16:18.675 [DEBUG] [Thread-137252] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:16:18.675 [DEBUG] [Thread-137252] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T00:16:18.717 [DEBUG] [Thread-137252] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:16:18.717 [DEBUG] [Thread-137252] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:16:18.721 [DEBUG] [Thread-137252] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:16:18.732 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:16:18.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T00:16:18.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T00:16:18.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T00:16:18.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:16:18.748 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T00:16:18.748 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:16:18.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:16:18.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T00:16:18.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.927565 -999.00  +14.70  20.20     81  +11.60 1 2 1 2 1     0    0 2.88 -9.78 ..... 15.5 20.2 201.6 24.8 15.8 -13.0 15.6 -12.2 15.5 -11.4 15.8 -12.3
2026-01-01T00:16:18.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T00:16:18.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T00:16:18.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.927565
2026-01-01T00:16:18.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T00:16:18.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T00:16:18.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T00:16:18.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T00:16:18.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T00:16:18.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T00:16:14', tmtdew=3.45, humidity=79.98, cloud=0.0, wind=20.29, temperature=14.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:16:14', seeing=1.31, atlas_timestamp='2025-12-31T22:15:41.616', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T00:16:18.751 [DEBUG] [Thread-137252] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:16:18.835 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T00:16:18.847 [DEBUG] [Thread-137255] [transport.py] [_log()] starting thread (client mode): 0xb955b160
2026-01-01T00:16:18.847 [DEBUG] [Thread-137255] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:16:18.867 [DEBUG] [Thread-137255] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T00:16:18.867 [INFO] [Thread-137255] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T00:16:18.875 [DEBUG] [Thread-137255] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:16:18.875 [DEBUG] [Thread-137255] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T00:16:18.875 [DEBUG] [Thread-137255] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:16:18.875 [DEBUG] [Thread-137255] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:16:18.875 [DEBUG] [Thread-137255] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:16:18.875 [DEBUG] [Thread-137255] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:16:18.875 [DEBUG] [Thread-137255] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:16:18.875 [DEBUG] [Thread-137255] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:16:18.875 [DEBUG] [Thread-137255] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:16:18.875 [DEBUG] [Thread-137255] [transport.py] [_log()] client lang: <none>
2026-01-01T00:16:18.875 [DEBUG] [Thread-137255] [transport.py] [_log()] server lang: <none>
2026-01-01T00:16:18.875 [DEBUG] [Thread-137255] [transport.py] [_log()] kex follows: False
2026-01-01T00:16:18.875 [DEBUG] [Thread-137255] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:16:18.876 [DEBUG] [Thread-137255] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:16:18.876 [DEBUG] [Thread-137255] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:16:18.876 [DEBUG] [Thread-137255] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:16:18.876 [DEBUG] [Thread-137255] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:16:18.876 [DEBUG] [Thread-137255] [transport.py] [_log()] Compression: none
2026-01-01T00:16:18.876 [DEBUG] [Thread-137255] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:16:18.932 [DEBUG] [Thread-137255] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:16:18.932 [DEBUG] [Thread-137255] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:16:18.933 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T00:16:18.933 [DEBUG] [Thread-137255] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T00:16:18.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:16:18.988 [DEBUG] [Thread-137255] [transport.py] [_log()] userauth is OK
2026-01-01T00:16:18.988 [DEBUG] [Thread-137255] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:16:18.989 [DEBUG] [Thread-137255] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:16:18.989 [DEBUG] [Thread-137255] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T00:16:18.989 [DEBUG] [Thread-137255] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:16:19.009 [INFO] [Thread-137255] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:16:19.009 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T00:16:19.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:16:19.858 [DEBUG] [Thread-137255] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:16:19.858 [DEBUG] [Thread-137255] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:16:19.906 [DEBUG] [Thread-137255] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:16:19.906 [DEBUG] [Thread-137255] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:16:19.915 [DEBUG] [Thread-137255] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:16:19.924 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:16:19.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T00:16:19.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T00:16:19.949 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:16:19.949 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:16:19.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:16:19.958 [DEBUG] [Thread-137255] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:16:21.917 [DEBUG] [Thread-137257 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:16:35.950 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:16:35.951 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:16:36.979 [DEBUG] [Thread-137258 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:16:49.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T00:16:49.976 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T00:16:49.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T00:16:50.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 0, 16, 46), 3.39, 80.01, 0.0, 22.5, 14.49, 0, 1, 0, 2, 0, 0),)
2026-01-01T00:16:50.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 00:16:46
2026-01-01T00:16:50.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T00:16:50.964 [DEBUG] [Thread-137259] [transport.py] [_log()] starting thread (client mode): 0xb955a950
2026-01-01T00:16:50.964 [DEBUG] [Thread-137259] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:16:50.985 [DEBUG] [Thread-137259] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T00:16:50.986 [INFO] [Thread-137259] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T00:16:50.989 [DEBUG] [Thread-137259] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:16:50.989 [DEBUG] [Thread-137259] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T00:16:50.989 [DEBUG] [Thread-137259] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:16:50.989 [DEBUG] [Thread-137259] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:16:50.989 [DEBUG] [Thread-137259] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:16:50.989 [DEBUG] [Thread-137259] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:16:50.989 [DEBUG] [Thread-137259] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:16:50.989 [DEBUG] [Thread-137259] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:16:50.989 [DEBUG] [Thread-137259] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:16:50.989 [DEBUG] [Thread-137259] [transport.py] [_log()] client lang: <none>
2026-01-01T00:16:50.989 [DEBUG] [Thread-137259] [transport.py] [_log()] server lang: <none>
2026-01-01T00:16:50.989 [DEBUG] [Thread-137259] [transport.py] [_log()] kex follows: False
2026-01-01T00:16:50.989 [DEBUG] [Thread-137259] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:16:50.990 [DEBUG] [Thread-137259] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:16:50.990 [DEBUG] [Thread-137259] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:16:50.990 [DEBUG] [Thread-137259] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:16:50.990 [DEBUG] [Thread-137259] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:16:50.990 [DEBUG] [Thread-137259] [transport.py] [_log()] Compression: none
2026-01-01T00:16:50.990 [DEBUG] [Thread-137259] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:16:51.007 [DEBUG] [Thread-137259] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:16:51.007 [DEBUG] [Thread-137259] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:16:51.008 [DEBUG] [Thread-137259] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T00:16:51.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T00:16:51.009 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:16:51.010 [DEBUG] [Thread-137259] [transport.py] [_log()] userauth is OK
2026-01-01T00:16:51.010 [DEBUG] [Thread-137259] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:16:51.011 [DEBUG] [Thread-137259] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:16:51.011 [DEBUG] [Thread-137259] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T00:16:51.011 [DEBUG] [Thread-137259] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:16:51.047 [INFO] [Thread-137259] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:16:51.048 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:16:51.691 [DEBUG] [Thread-137259] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:16:51.691 [DEBUG] [Thread-137259] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:16:51.691 [DEBUG] [Thread-137259] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T00:16:51.732 [DEBUG] [Thread-137259] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:16:51.732 [DEBUG] [Thread-137259] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:16:51.736 [DEBUG] [Thread-137259] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:16:51.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:16:51.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T00:16:51.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T00:16:51.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T00:16:51.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:16:51.759 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T00:16:51.759 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:16:51.759 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:16:51.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T00:16:51.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.928260 -999.00  +14.60  16.31     82  +11.60 1 3 1 2 1     0    0 2.86 -11.33 ----- 13.3 16.3 205.2 21.4 15.8 -12.6 15.6 -12.5 15.4 -11.2 15.8 -12.1
2026-01-01T00:16:51.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T00:16:51.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T00:16:51.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.928260
2026-01-01T00:16:51.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T00:16:51.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T00:16:51.761 [DEBUG] [Thread-137259] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:16:51.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T00:16:51.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T00:16:51.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-01-01T00:16:51.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T00:16:46', tmtdew=3.39, humidity=80.01, cloud=0.0, wind=22.5, temperature=14.49, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:16:46', seeing=1.34, atlas_timestamp='2025-12-31T22:16:41.664', atlas_cloud=3, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T00:16:51.844 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T00:16:51.856 [DEBUG] [Thread-137262] [transport.py] [_log()] starting thread (client mode): 0xb955a5c0
2026-01-01T00:16:51.856 [DEBUG] [Thread-137262] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:16:51.871 [DEBUG] [Thread-137262] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T00:16:51.872 [INFO] [Thread-137262] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T00:16:51.879 [DEBUG] [Thread-137262] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:16:51.879 [DEBUG] [Thread-137262] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T00:16:51.879 [DEBUG] [Thread-137262] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:16:51.880 [DEBUG] [Thread-137262] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:16:51.880 [DEBUG] [Thread-137262] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:16:51.880 [DEBUG] [Thread-137262] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:16:51.880 [DEBUG] [Thread-137262] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:16:51.880 [DEBUG] [Thread-137262] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:16:51.880 [DEBUG] [Thread-137262] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:16:51.880 [DEBUG] [Thread-137262] [transport.py] [_log()] client lang: <none>
2026-01-01T00:16:51.880 [DEBUG] [Thread-137262] [transport.py] [_log()] server lang: <none>
2026-01-01T00:16:51.880 [DEBUG] [Thread-137262] [transport.py] [_log()] kex follows: False
2026-01-01T00:16:51.880 [DEBUG] [Thread-137262] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:16:51.880 [DEBUG] [Thread-137262] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:16:51.880 [DEBUG] [Thread-137262] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:16:51.880 [DEBUG] [Thread-137262] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:16:51.880 [DEBUG] [Thread-137262] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:16:51.880 [DEBUG] [Thread-137262] [transport.py] [_log()] Compression: none
2026-01-01T00:16:51.881 [DEBUG] [Thread-137262] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:16:51.940 [DEBUG] [Thread-137262] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:16:51.941 [DEBUG] [Thread-137262] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:16:51.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T00:16:51.942 [DEBUG] [Thread-137262] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T00:16:51.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:16:51.996 [DEBUG] [Thread-137262] [transport.py] [_log()] userauth is OK
2026-01-01T00:16:51.996 [DEBUG] [Thread-137262] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:16:51.997 [DEBUG] [Thread-137262] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:16:51.997 [DEBUG] [Thread-137262] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T00:16:51.997 [DEBUG] [Thread-137262] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:16:52.013 [DEBUG] [Thread-137264 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:16:52.016 [INFO] [Thread-137262] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:16:52.016 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T00:16:52.017 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:16:52.848 [DEBUG] [Thread-137262] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:16:52.848 [DEBUG] [Thread-137262] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:16:52.896 [DEBUG] [Thread-137262] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:16:52.896 [DEBUG] [Thread-137262] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:16:52.905 [DEBUG] [Thread-137262] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:16:52.915 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:16:52.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T00:16:52.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T00:16:52.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:16:52.934 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:16:52.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:16:52.944 [DEBUG] [Thread-137262] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:16:55.608 [DEBUG] [Thread-137265 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:17:07.064 [DEBUG] [Thread-137266 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:17:22.097 [DEBUG] [Thread-137267 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:17:22.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T00:17:22.965 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T00:17:22.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T00:17:23.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 0, 17, 18), 3.4, 79.96, 0.0, 21.12, 14.45, 0, 0, 0, 2, 0, 0),)
2026-01-01T00:17:23.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 00:17:18
2026-01-01T00:17:23.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T00:17:23.962 [DEBUG] [Thread-137268] [transport.py] [_log()] starting thread (client mode): 0xb955ad70
2026-01-01T00:17:23.962 [DEBUG] [Thread-137268] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:17:23.981 [DEBUG] [Thread-137268] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T00:17:23.981 [INFO] [Thread-137268] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T00:17:23.984 [DEBUG] [Thread-137268] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:17:23.984 [DEBUG] [Thread-137268] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T00:17:23.984 [DEBUG] [Thread-137268] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:17:23.984 [DEBUG] [Thread-137268] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:17:23.984 [DEBUG] [Thread-137268] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:17:23.984 [DEBUG] [Thread-137268] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:17:23.984 [DEBUG] [Thread-137268] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:17:23.984 [DEBUG] [Thread-137268] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:17:23.984 [DEBUG] [Thread-137268] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:17:23.984 [DEBUG] [Thread-137268] [transport.py] [_log()] client lang: <none>
2026-01-01T00:17:23.984 [DEBUG] [Thread-137268] [transport.py] [_log()] server lang: <none>
2026-01-01T00:17:23.984 [DEBUG] [Thread-137268] [transport.py] [_log()] kex follows: False
2026-01-01T00:17:23.984 [DEBUG] [Thread-137268] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:17:23.984 [DEBUG] [Thread-137268] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:17:23.984 [DEBUG] [Thread-137268] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:17:23.984 [DEBUG] [Thread-137268] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:17:23.984 [DEBUG] [Thread-137268] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:17:23.984 [DEBUG] [Thread-137268] [transport.py] [_log()] Compression: none
2026-01-01T00:17:23.984 [DEBUG] [Thread-137268] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:17:24.000 [DEBUG] [Thread-137268] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:17:24.000 [DEBUG] [Thread-137268] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:17:24.000 [DEBUG] [Thread-137268] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T00:17:24.000 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T00:17:24.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:17:24.001 [DEBUG] [Thread-137268] [transport.py] [_log()] userauth is OK
2026-01-01T00:17:24.001 [DEBUG] [Thread-137268] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:17:24.001 [DEBUG] [Thread-137268] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:17:24.001 [DEBUG] [Thread-137268] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T00:17:24.001 [DEBUG] [Thread-137268] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:17:24.016 [INFO] [Thread-137268] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:17:24.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:17:24.621 [DEBUG] [Thread-137268] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:17:24.621 [DEBUG] [Thread-137268] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:17:24.621 [DEBUG] [Thread-137268] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T00:17:24.662 [DEBUG] [Thread-137268] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:17:24.662 [DEBUG] [Thread-137268] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:17:24.664 [DEBUG] [Thread-137268] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:17:24.678 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:17:24.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T00:17:24.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T00:17:24.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T00:17:24.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:17:24.683 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T00:17:24.683 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:17:24.683 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:17:24.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T00:17:24.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.928606 -999.00  +14.60  12.81     82  +11.60 1 3 1 2 1     0    0 2.83 -11.61 ----- 11.1 12.8 195.6 15.2 15.8 -12.5 15.6 -12.3 15.4 -11.0 15.8 -11.8
2026-01-01T00:17:24.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T00:17:24.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T00:17:24.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.928606
2026-01-01T00:17:24.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T00:17:24.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T00:17:24.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T00:17:24.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T00:17:24.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-01-01T00:17:24.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T00:17:18', tmtdew=3.4, humidity=79.96, cloud=0.0, wind=21.12, temperature=14.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:17:18', seeing=1.34, atlas_timestamp='2025-12-31T22:17:11.558', atlas_cloud=3, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T00:17:24.685 [DEBUG] [Thread-137268] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:17:24.757 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T00:17:24.768 [DEBUG] [Thread-137271] [transport.py] [_log()] starting thread (client mode): 0xb955a0b0
2026-01-01T00:17:24.768 [DEBUG] [Thread-137271] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:17:24.783 [DEBUG] [Thread-137271] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T00:17:24.783 [INFO] [Thread-137271] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T00:17:24.790 [DEBUG] [Thread-137271] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:17:24.790 [DEBUG] [Thread-137271] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T00:17:24.790 [DEBUG] [Thread-137271] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:17:24.790 [DEBUG] [Thread-137271] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:17:24.790 [DEBUG] [Thread-137271] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:17:24.790 [DEBUG] [Thread-137271] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:17:24.790 [DEBUG] [Thread-137271] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:17:24.790 [DEBUG] [Thread-137271] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:17:24.790 [DEBUG] [Thread-137271] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:17:24.790 [DEBUG] [Thread-137271] [transport.py] [_log()] client lang: <none>
2026-01-01T00:17:24.791 [DEBUG] [Thread-137271] [transport.py] [_log()] server lang: <none>
2026-01-01T00:17:24.791 [DEBUG] [Thread-137271] [transport.py] [_log()] kex follows: False
2026-01-01T00:17:24.791 [DEBUG] [Thread-137271] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:17:24.791 [DEBUG] [Thread-137271] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:17:24.791 [DEBUG] [Thread-137271] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:17:24.791 [DEBUG] [Thread-137271] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:17:24.791 [DEBUG] [Thread-137271] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:17:24.791 [DEBUG] [Thread-137271] [transport.py] [_log()] Compression: none
2026-01-01T00:17:24.791 [DEBUG] [Thread-137271] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:17:24.846 [DEBUG] [Thread-137271] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:17:24.846 [DEBUG] [Thread-137271] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:17:24.846 [DEBUG] [Thread-137271] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T00:17:24.846 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T00:17:24.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:17:24.903 [DEBUG] [Thread-137271] [transport.py] [_log()] userauth is OK
2026-01-01T00:17:24.903 [DEBUG] [Thread-137271] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:17:24.903 [DEBUG] [Thread-137271] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:17:24.903 [DEBUG] [Thread-137271] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T00:17:24.903 [DEBUG] [Thread-137271] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:17:24.918 [INFO] [Thread-137271] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:17:24.918 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T00:17:24.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:17:25.748 [DEBUG] [Thread-137271] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:17:25.748 [DEBUG] [Thread-137271] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:17:25.796 [DEBUG] [Thread-137271] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:17:25.796 [DEBUG] [Thread-137271] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:17:25.804 [DEBUG] [Thread-137271] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:17:25.812 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:17:25.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T00:17:25.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T00:17:25.827 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:17:25.828 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:17:25.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:17:25.835 [DEBUG] [Thread-137271] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:17:36.154 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:17:36.155 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:17:37.126 [DEBUG] [Thread-137273 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:17:52.174 [DEBUG] [Thread-137274 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:17:55.665 [DEBUG] [Thread-137275 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:17:55.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T00:17:55.842 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T00:17:55.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T00:17:56.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 0, 17, 50), 3.39, 80.03, 0.0, 21.84, 14.47, 0, 1, 0, 2, 0, 0),)
2026-01-01T00:17:56.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 00:17:50
2026-01-01T00:17:56.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T00:17:56.840 [DEBUG] [Thread-137276] [transport.py] [_log()] starting thread (client mode): 0xb955b010
2026-01-01T00:17:56.840 [DEBUG] [Thread-137276] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:17:56.861 [DEBUG] [Thread-137276] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T00:17:56.861 [INFO] [Thread-137276] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T00:17:56.864 [DEBUG] [Thread-137276] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:17:56.865 [DEBUG] [Thread-137276] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T00:17:56.865 [DEBUG] [Thread-137276] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:17:56.865 [DEBUG] [Thread-137276] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:17:56.865 [DEBUG] [Thread-137276] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:17:56.865 [DEBUG] [Thread-137276] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:17:56.865 [DEBUG] [Thread-137276] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:17:56.865 [DEBUG] [Thread-137276] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:17:56.865 [DEBUG] [Thread-137276] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:17:56.865 [DEBUG] [Thread-137276] [transport.py] [_log()] client lang: <none>
2026-01-01T00:17:56.865 [DEBUG] [Thread-137276] [transport.py] [_log()] server lang: <none>
2026-01-01T00:17:56.865 [DEBUG] [Thread-137276] [transport.py] [_log()] kex follows: False
2026-01-01T00:17:56.865 [DEBUG] [Thread-137276] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:17:56.866 [DEBUG] [Thread-137276] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:17:56.866 [DEBUG] [Thread-137276] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:17:56.866 [DEBUG] [Thread-137276] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:17:56.866 [DEBUG] [Thread-137276] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:17:56.866 [DEBUG] [Thread-137276] [transport.py] [_log()] Compression: none
2026-01-01T00:17:56.866 [DEBUG] [Thread-137276] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:17:56.885 [DEBUG] [Thread-137276] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:17:56.886 [DEBUG] [Thread-137276] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:17:56.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T00:17:56.887 [DEBUG] [Thread-137276] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T00:17:56.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:17:56.889 [DEBUG] [Thread-137276] [transport.py] [_log()] userauth is OK
2026-01-01T00:17:56.889 [DEBUG] [Thread-137276] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:17:56.890 [DEBUG] [Thread-137276] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:17:56.890 [DEBUG] [Thread-137276] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T00:17:56.890 [DEBUG] [Thread-137276] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:17:56.915 [INFO] [Thread-137276] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:17:56.916 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:17:57.549 [DEBUG] [Thread-137276] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:17:57.549 [DEBUG] [Thread-137276] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:17:57.549 [DEBUG] [Thread-137276] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T00:17:57.590 [DEBUG] [Thread-137276] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:17:57.590 [DEBUG] [Thread-137276] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:17:57.593 [DEBUG] [Thread-137276] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:17:57.604 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:17:57.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T00:17:57.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T00:17:57.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T00:17:57.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:17:57.616 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T00:17:57.616 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:17:57.616 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:17:57.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T00:17:57.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.928954 -999.00  +14.60  12.64     82  +11.60 1 3 1 2 1     0    0 2.80 -12.01 ----- 13.7 12.6 200.8 21.9 15.8 -12.4 15.6 -11.9 15.4 -11.1 15.8 -11.7
2026-01-01T00:17:57.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T00:17:57.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T00:17:57.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.928954
2026-01-01T00:17:57.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T00:17:57.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T00:17:57.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T00:17:57.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T00:17:57.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-01-01T00:17:57.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T00:17:50', tmtdew=3.39, humidity=80.03, cloud=0.0, wind=21.84, temperature=14.47, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:17:50', seeing=1.34, atlas_timestamp='2025-12-31T22:17:41.626', atlas_cloud=3, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T00:17:57.619 [DEBUG] [Thread-137276] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:17:57.702 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T00:17:57.714 [DEBUG] [Thread-137279] [transport.py] [_log()] starting thread (client mode): 0xb9559d50
2026-01-01T00:17:57.714 [DEBUG] [Thread-137279] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:17:57.729 [DEBUG] [Thread-137279] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T00:17:57.729 [INFO] [Thread-137279] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T00:17:57.737 [DEBUG] [Thread-137279] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:17:57.737 [DEBUG] [Thread-137279] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T00:17:57.738 [DEBUG] [Thread-137279] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:17:57.738 [DEBUG] [Thread-137279] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:17:57.738 [DEBUG] [Thread-137279] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:17:57.738 [DEBUG] [Thread-137279] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:17:57.738 [DEBUG] [Thread-137279] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:17:57.738 [DEBUG] [Thread-137279] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:17:57.738 [DEBUG] [Thread-137279] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:17:57.738 [DEBUG] [Thread-137279] [transport.py] [_log()] client lang: <none>
2026-01-01T00:17:57.739 [DEBUG] [Thread-137279] [transport.py] [_log()] server lang: <none>
2026-01-01T00:17:57.739 [DEBUG] [Thread-137279] [transport.py] [_log()] kex follows: False
2026-01-01T00:17:57.739 [DEBUG] [Thread-137279] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:17:57.739 [DEBUG] [Thread-137279] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:17:57.739 [DEBUG] [Thread-137279] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:17:57.739 [DEBUG] [Thread-137279] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:17:57.739 [DEBUG] [Thread-137279] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:17:57.739 [DEBUG] [Thread-137279] [transport.py] [_log()] Compression: none
2026-01-01T00:17:57.740 [DEBUG] [Thread-137279] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:17:57.800 [DEBUG] [Thread-137279] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:17:57.800 [DEBUG] [Thread-137279] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:17:57.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T00:17:57.802 [DEBUG] [Thread-137279] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T00:17:57.803 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:17:57.855 [DEBUG] [Thread-137279] [transport.py] [_log()] userauth is OK
2026-01-01T00:17:57.855 [DEBUG] [Thread-137279] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:17:57.856 [DEBUG] [Thread-137279] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:17:57.856 [DEBUG] [Thread-137279] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T00:17:57.856 [DEBUG] [Thread-137279] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:17:57.870 [INFO] [Thread-137279] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:17:57.870 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T00:17:57.870 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:17:58.730 [DEBUG] [Thread-137279] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:17:58.730 [DEBUG] [Thread-137279] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:17:58.778 [DEBUG] [Thread-137279] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:17:58.779 [DEBUG] [Thread-137279] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:17:58.788 [DEBUG] [Thread-137279] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:17:58.797 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:17:58.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T00:17:58.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T00:17:58.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:17:58.815 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:17:58.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:17:58.824 [DEBUG] [Thread-137279] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:18:07.203 [DEBUG] [Thread-137281 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:18:22.253 [DEBUG] [Thread-137282 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:18:28.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T00:18:28.833 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T00:18:28.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T00:18:29.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 0, 18, 22), 3.38, 80.06, 0.0, 22.0, 14.45, 0, 1, 0, 2, 0, 0),)
2026-01-01T00:18:29.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 00:18:22
2026-01-01T00:18:29.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T00:18:29.803 [DEBUG] [Thread-137283] [transport.py] [_log()] starting thread (client mode): 0xb955a8c0
2026-01-01T00:18:29.803 [DEBUG] [Thread-137283] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:18:29.816 [DEBUG] [Thread-137283] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T00:18:29.816 [INFO] [Thread-137283] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T00:18:29.818 [DEBUG] [Thread-137283] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:18:29.818 [DEBUG] [Thread-137283] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T00:18:29.818 [DEBUG] [Thread-137283] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:18:29.818 [DEBUG] [Thread-137283] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:18:29.818 [DEBUG] [Thread-137283] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:18:29.818 [DEBUG] [Thread-137283] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:18:29.818 [DEBUG] [Thread-137283] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:18:29.818 [DEBUG] [Thread-137283] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:18:29.818 [DEBUG] [Thread-137283] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:18:29.818 [DEBUG] [Thread-137283] [transport.py] [_log()] client lang: <none>
2026-01-01T00:18:29.818 [DEBUG] [Thread-137283] [transport.py] [_log()] server lang: <none>
2026-01-01T00:18:29.818 [DEBUG] [Thread-137283] [transport.py] [_log()] kex follows: False
2026-01-01T00:18:29.818 [DEBUG] [Thread-137283] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:18:29.818 [DEBUG] [Thread-137283] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:18:29.818 [DEBUG] [Thread-137283] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:18:29.818 [DEBUG] [Thread-137283] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:18:29.818 [DEBUG] [Thread-137283] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:18:29.818 [DEBUG] [Thread-137283] [transport.py] [_log()] Compression: none
2026-01-01T00:18:29.818 [DEBUG] [Thread-137283] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:18:29.832 [DEBUG] [Thread-137283] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:18:29.833 [DEBUG] [Thread-137283] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:18:29.833 [DEBUG] [Thread-137283] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T00:18:29.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T00:18:29.834 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:18:29.835 [DEBUG] [Thread-137283] [transport.py] [_log()] userauth is OK
2026-01-01T00:18:29.835 [DEBUG] [Thread-137283] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:18:29.835 [DEBUG] [Thread-137283] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:18:29.835 [DEBUG] [Thread-137283] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T00:18:29.835 [DEBUG] [Thread-137283] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:18:29.859 [INFO] [Thread-137283] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:18:29.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:18:30.525 [DEBUG] [Thread-137283] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:18:30.526 [DEBUG] [Thread-137283] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:18:30.526 [DEBUG] [Thread-137283] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T00:18:30.567 [DEBUG] [Thread-137283] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:18:30.567 [DEBUG] [Thread-137283] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:18:30.570 [DEBUG] [Thread-137283] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:18:30.583 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:18:30.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T00:18:30.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T00:18:30.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T00:18:30.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:18:30.594 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T00:18:30.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:18:30.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:18:30.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T00:18:30.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.929301 -999.00  +14.60  12.43     82  +11.60 1 3 1 2 1     0    0 2.78 -12.19 ----- 11.1 12.4 219.2 21.7 15.7 -12.1 15.6 -11.9 15.5 -11.2 15.8 -11.9
2026-01-01T00:18:30.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T00:18:30.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T00:18:30.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.929301
2026-01-01T00:18:30.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T00:18:30.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T00:18:30.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T00:18:30.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T00:18:30.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-01-01T00:18:30.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T00:18:22', tmtdew=3.38, humidity=80.06, cloud=0.0, wind=22.0, temperature=14.45, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:18:22', seeing=1.34, atlas_timestamp='2025-12-31T22:18:11.606', atlas_cloud=3, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T00:18:30.597 [DEBUG] [Thread-137283] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:18:30.681 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T00:18:30.700 [DEBUG] [Thread-137286] [transport.py] [_log()] starting thread (client mode): 0xb9559b10
2026-01-01T00:18:30.701 [DEBUG] [Thread-137286] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:18:30.723 [DEBUG] [Thread-137286] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T00:18:30.723 [INFO] [Thread-137286] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T00:18:30.732 [DEBUG] [Thread-137286] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:18:30.733 [DEBUG] [Thread-137286] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T00:18:30.733 [DEBUG] [Thread-137286] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:18:30.733 [DEBUG] [Thread-137286] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:18:30.733 [DEBUG] [Thread-137286] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:18:30.733 [DEBUG] [Thread-137286] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:18:30.733 [DEBUG] [Thread-137286] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:18:30.733 [DEBUG] [Thread-137286] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:18:30.733 [DEBUG] [Thread-137286] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:18:30.733 [DEBUG] [Thread-137286] [transport.py] [_log()] client lang: <none>
2026-01-01T00:18:30.733 [DEBUG] [Thread-137286] [transport.py] [_log()] server lang: <none>
2026-01-01T00:18:30.733 [DEBUG] [Thread-137286] [transport.py] [_log()] kex follows: False
2026-01-01T00:18:30.733 [DEBUG] [Thread-137286] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:18:30.733 [DEBUG] [Thread-137286] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:18:30.734 [DEBUG] [Thread-137286] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:18:30.734 [DEBUG] [Thread-137286] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:18:30.734 [DEBUG] [Thread-137286] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:18:30.734 [DEBUG] [Thread-137286] [transport.py] [_log()] Compression: none
2026-01-01T00:18:30.734 [DEBUG] [Thread-137286] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:18:30.794 [DEBUG] [Thread-137286] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:18:30.794 [DEBUG] [Thread-137286] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:18:30.795 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T00:18:30.795 [DEBUG] [Thread-137286] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T00:18:30.796 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:18:30.856 [DEBUG] [Thread-137286] [transport.py] [_log()] userauth is OK
2026-01-01T00:18:30.857 [DEBUG] [Thread-137286] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:18:30.857 [DEBUG] [Thread-137286] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:18:30.857 [DEBUG] [Thread-137286] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T00:18:30.857 [DEBUG] [Thread-137286] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:18:30.875 [INFO] [Thread-137286] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:18:30.876 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T00:18:30.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:18:31.742 [DEBUG] [Thread-137286] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:18:31.743 [DEBUG] [Thread-137286] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:18:31.792 [DEBUG] [Thread-137286] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:18:31.793 [DEBUG] [Thread-137286] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:18:31.804 [DEBUG] [Thread-137286] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:18:31.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:18:31.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T00:18:31.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T00:18:31.834 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:18:31.834 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:18:31.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:18:31.846 [DEBUG] [Thread-137286] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:18:36.358 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:18:36.359 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:18:37.287 [DEBUG] [Thread-137288 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:18:52.336 [DEBUG] [Thread-137289 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:18:55.741 [DEBUG] [Thread-137290 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:19:01.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T00:19:01.865 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T00:19:01.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T00:19:02.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 0, 18, 54), 3.39, 80.01, 0.0, 21.95, 14.44, 0, 1, 0, 2, 0, 0),)
2026-01-01T00:19:02.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 00:18:54
2026-01-01T00:19:02.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T00:19:02.856 [DEBUG] [Thread-137291] [transport.py] [_log()] starting thread (client mode): 0xb95f3c40
2026-01-01T00:19:02.856 [DEBUG] [Thread-137291] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:19:02.877 [DEBUG] [Thread-137291] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T00:19:02.877 [INFO] [Thread-137291] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T00:19:02.880 [DEBUG] [Thread-137291] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:19:02.880 [DEBUG] [Thread-137291] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T00:19:02.880 [DEBUG] [Thread-137291] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:19:02.880 [DEBUG] [Thread-137291] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:19:02.880 [DEBUG] [Thread-137291] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:19:02.880 [DEBUG] [Thread-137291] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:19:02.880 [DEBUG] [Thread-137291] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:19:02.880 [DEBUG] [Thread-137291] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:19:02.880 [DEBUG] [Thread-137291] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:19:02.880 [DEBUG] [Thread-137291] [transport.py] [_log()] client lang: <none>
2026-01-01T00:19:02.880 [DEBUG] [Thread-137291] [transport.py] [_log()] server lang: <none>
2026-01-01T00:19:02.880 [DEBUG] [Thread-137291] [transport.py] [_log()] kex follows: False
2026-01-01T00:19:02.880 [DEBUG] [Thread-137291] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:19:02.880 [DEBUG] [Thread-137291] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:19:02.880 [DEBUG] [Thread-137291] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:19:02.880 [DEBUG] [Thread-137291] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:19:02.880 [DEBUG] [Thread-137291] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:19:02.880 [DEBUG] [Thread-137291] [transport.py] [_log()] Compression: none
2026-01-01T00:19:02.880 [DEBUG] [Thread-137291] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:19:02.892 [DEBUG] [Thread-137291] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:19:02.893 [DEBUG] [Thread-137291] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:19:02.893 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T00:19:02.894 [DEBUG] [Thread-137291] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T00:19:02.894 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:19:02.895 [DEBUG] [Thread-137291] [transport.py] [_log()] userauth is OK
2026-01-01T00:19:02.896 [DEBUG] [Thread-137291] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:19:02.896 [DEBUG] [Thread-137291] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:19:02.896 [DEBUG] [Thread-137291] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T00:19:02.896 [DEBUG] [Thread-137291] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:19:02.921 [INFO] [Thread-137291] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:19:02.922 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:19:03.499 [DEBUG] [Thread-137291] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:19:03.500 [DEBUG] [Thread-137291] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:19:03.500 [DEBUG] [Thread-137291] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T00:19:03.541 [DEBUG] [Thread-137291] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:19:03.541 [DEBUG] [Thread-137291] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:19:03.544 [DEBUG] [Thread-137291] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:19:03.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:19:03.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T00:19:03.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T00:19:03.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T00:19:03.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:19:03.568 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T00:19:03.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:19:03.568 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:19:03.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T00:19:03.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.929648 -999.00  +14.60  14.08     82  +11.60 1 3 1 2 1     0    0 2.77 -12.31 ----- 14.4 14.1 192.0 16.7 15.8 -12.2 15.7 -11.6 15.5 -11.1 15.8 -11.8
2026-01-01T00:19:03.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T00:19:03.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T00:19:03.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.929648
2026-01-01T00:19:03.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T00:19:03.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T00:19:03.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T00:19:03.571 [DEBUG] [Thread-137291] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:19:03.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T00:19:03.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-01-01T00:19:03.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T00:18:54', tmtdew=3.39, humidity=80.01, cloud=0.0, wind=21.95, temperature=14.44, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:18:54', seeing=1.34, atlas_timestamp='2025-12-31T22:18:41.587', atlas_cloud=3, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T00:19:03.655 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T00:19:03.668 [DEBUG] [Thread-137294] [transport.py] [_log()] starting thread (client mode): 0xb95f03a0
2026-01-01T00:19:03.668 [DEBUG] [Thread-137294] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:19:03.685 [DEBUG] [Thread-137294] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T00:19:03.685 [INFO] [Thread-137294] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T00:19:03.692 [DEBUG] [Thread-137294] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:19:03.692 [DEBUG] [Thread-137294] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T00:19:03.693 [DEBUG] [Thread-137294] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:19:03.693 [DEBUG] [Thread-137294] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:19:03.693 [DEBUG] [Thread-137294] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:19:03.693 [DEBUG] [Thread-137294] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:19:03.702 [DEBUG] [Thread-137294] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:19:03.702 [DEBUG] [Thread-137294] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:19:03.702 [DEBUG] [Thread-137294] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:19:03.702 [DEBUG] [Thread-137294] [transport.py] [_log()] client lang: <none>
2026-01-01T00:19:03.702 [DEBUG] [Thread-137294] [transport.py] [_log()] server lang: <none>
2026-01-01T00:19:03.702 [DEBUG] [Thread-137294] [transport.py] [_log()] kex follows: False
2026-01-01T00:19:03.702 [DEBUG] [Thread-137294] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:19:03.702 [DEBUG] [Thread-137294] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:19:03.702 [DEBUG] [Thread-137294] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:19:03.703 [DEBUG] [Thread-137294] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:19:03.703 [DEBUG] [Thread-137294] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:19:03.703 [DEBUG] [Thread-137294] [transport.py] [_log()] Compression: none
2026-01-01T00:19:03.703 [DEBUG] [Thread-137294] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:19:03.750 [DEBUG] [Thread-137294] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:19:03.750 [DEBUG] [Thread-137294] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:19:03.751 [DEBUG] [Thread-137294] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T00:19:03.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T00:19:03.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:19:03.807 [DEBUG] [Thread-137294] [transport.py] [_log()] userauth is OK
2026-01-01T00:19:03.808 [DEBUG] [Thread-137294] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:19:03.808 [DEBUG] [Thread-137294] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:19:03.808 [DEBUG] [Thread-137294] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T00:19:03.808 [DEBUG] [Thread-137294] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:19:03.827 [INFO] [Thread-137294] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:19:03.828 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T00:19:03.828 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:19:04.670 [DEBUG] [Thread-137294] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:19:04.670 [DEBUG] [Thread-137294] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:19:04.718 [DEBUG] [Thread-137294] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:19:04.718 [DEBUG] [Thread-137294] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:19:04.727 [DEBUG] [Thread-137294] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:19:04.736 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:19:04.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T00:19:04.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T00:19:04.754 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:19:04.754 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:19:04.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:19:04.762 [DEBUG] [Thread-137294] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:19:07.371 [DEBUG] [Thread-137296 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:19:22.417 [DEBUG] [Thread-137297 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:19:34.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T00:19:34.784 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T00:19:34.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T00:19:35.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 0, 19, 26), 3.39, 80.05, 0.0, 20.84, 14.47, 0, 1, 0, 2, 0, 0),)
2026-01-01T00:19:35.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 00:19:26
2026-01-01T00:19:35.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T00:19:35.782 [DEBUG] [Thread-137298] [transport.py] [_log()] starting thread (client mode): 0xb6ba1ab0
2026-01-01T00:19:35.782 [DEBUG] [Thread-137298] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:19:35.801 [DEBUG] [Thread-137298] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T00:19:35.801 [INFO] [Thread-137298] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T00:19:35.804 [DEBUG] [Thread-137298] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:19:35.804 [DEBUG] [Thread-137298] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T00:19:35.804 [DEBUG] [Thread-137298] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:19:35.804 [DEBUG] [Thread-137298] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:19:35.804 [DEBUG] [Thread-137298] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:19:35.804 [DEBUG] [Thread-137298] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:19:35.804 [DEBUG] [Thread-137298] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:19:35.804 [DEBUG] [Thread-137298] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:19:35.804 [DEBUG] [Thread-137298] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:19:35.804 [DEBUG] [Thread-137298] [transport.py] [_log()] client lang: <none>
2026-01-01T00:19:35.804 [DEBUG] [Thread-137298] [transport.py] [_log()] server lang: <none>
2026-01-01T00:19:35.804 [DEBUG] [Thread-137298] [transport.py] [_log()] kex follows: False
2026-01-01T00:19:35.804 [DEBUG] [Thread-137298] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:19:35.804 [DEBUG] [Thread-137298] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:19:35.804 [DEBUG] [Thread-137298] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:19:35.804 [DEBUG] [Thread-137298] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:19:35.804 [DEBUG] [Thread-137298] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:19:35.804 [DEBUG] [Thread-137298] [transport.py] [_log()] Compression: none
2026-01-01T00:19:35.804 [DEBUG] [Thread-137298] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:19:35.821 [DEBUG] [Thread-137298] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:19:35.821 [DEBUG] [Thread-137298] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:19:35.822 [DEBUG] [Thread-137298] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T00:19:35.822 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T00:19:35.822 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:19:35.823 [DEBUG] [Thread-137298] [transport.py] [_log()] userauth is OK
2026-01-01T00:19:35.824 [DEBUG] [Thread-137298] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:19:35.824 [DEBUG] [Thread-137298] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:19:35.824 [DEBUG] [Thread-137298] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T00:19:35.824 [DEBUG] [Thread-137298] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:19:35.841 [INFO] [Thread-137298] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:19:35.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:19:36.454 [DEBUG] [Thread-137298] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:19:36.455 [DEBUG] [Thread-137298] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:19:36.455 [DEBUG] [Thread-137298] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T00:19:36.496 [DEBUG] [Thread-137298] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:19:36.496 [DEBUG] [Thread-137298] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:19:36.499 [DEBUG] [Thread-137298] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:19:36.511 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:19:36.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T00:19:36.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T00:19:36.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T00:19:36.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:19:36.519 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T00:19:36.520 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:19:36.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:19:36.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T00:19:36.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.929995 -999.00  +14.70  13.18     82  +11.60 1 3 1 2 1     0    0 2.85 -12.46 ----- 13.7 13.2 199.8 18.0 15.8 -12.1 15.7 -11.8 15.5 -10.9 15.8 -11.7
2026-01-01T00:19:36.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T00:19:36.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T00:19:36.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.929995
2026-01-01T00:19:36.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T00:19:36.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T00:19:36.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T00:19:36.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T00:19:36.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-01-01T00:19:36.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T00:19:26', tmtdew=3.39, humidity=80.05, cloud=0.0, wind=20.84, temperature=14.47, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:19:26', seeing=1.34, atlas_timestamp='2025-12-31T22:19:11.568', atlas_cloud=3, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T00:19:36.522 [DEBUG] [Thread-137298] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:19:36.564 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:19:36.565 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:19:36.607 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T00:19:36.620 [DEBUG] [Thread-137301] [transport.py] [_log()] starting thread (client mode): 0xb6ba3160
2026-01-01T00:19:36.620 [DEBUG] [Thread-137301] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:19:36.634 [DEBUG] [Thread-137301] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T00:19:36.635 [INFO] [Thread-137301] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T00:19:36.642 [DEBUG] [Thread-137301] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:19:36.642 [DEBUG] [Thread-137301] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T00:19:36.642 [DEBUG] [Thread-137301] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:19:36.642 [DEBUG] [Thread-137301] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:19:36.642 [DEBUG] [Thread-137301] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:19:36.643 [DEBUG] [Thread-137301] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:19:36.643 [DEBUG] [Thread-137301] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:19:36.643 [DEBUG] [Thread-137301] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:19:36.643 [DEBUG] [Thread-137301] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:19:36.643 [DEBUG] [Thread-137301] [transport.py] [_log()] client lang: <none>
2026-01-01T00:19:36.643 [DEBUG] [Thread-137301] [transport.py] [_log()] server lang: <none>
2026-01-01T00:19:36.643 [DEBUG] [Thread-137301] [transport.py] [_log()] kex follows: False
2026-01-01T00:19:36.643 [DEBUG] [Thread-137301] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:19:36.643 [DEBUG] [Thread-137301] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:19:36.644 [DEBUG] [Thread-137301] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:19:36.644 [DEBUG] [Thread-137301] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:19:36.644 [DEBUG] [Thread-137301] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:19:36.645 [DEBUG] [Thread-137301] [transport.py] [_log()] Compression: none
2026-01-01T00:19:36.645 [DEBUG] [Thread-137301] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:19:36.699 [DEBUG] [Thread-137301] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:19:36.700 [DEBUG] [Thread-137301] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:19:36.701 [DEBUG] [Thread-137301] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T00:19:36.701 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T00:19:36.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:19:36.756 [DEBUG] [Thread-137301] [transport.py] [_log()] userauth is OK
2026-01-01T00:19:36.756 [DEBUG] [Thread-137301] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:19:36.756 [DEBUG] [Thread-137301] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:19:36.756 [DEBUG] [Thread-137301] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T00:19:36.757 [DEBUG] [Thread-137301] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:19:36.778 [INFO] [Thread-137301] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:19:36.778 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T00:19:36.779 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:19:37.450 [DEBUG] [Thread-137303 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:19:37.607 [DEBUG] [Thread-137301] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:19:37.608 [DEBUG] [Thread-137301] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:19:37.656 [DEBUG] [Thread-137301] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:19:37.656 [DEBUG] [Thread-137301] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:19:37.666 [DEBUG] [Thread-137301] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:19:37.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:19:37.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T00:19:37.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T00:19:37.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:19:37.694 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:19:37.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:19:37.702 [DEBUG] [Thread-137301] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:19:52.507 [DEBUG] [Thread-137304 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:19:55.807 [DEBUG] [Thread-137305 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:20:07.538 [DEBUG] [Thread-137306 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:20:07.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T00:20:07.725 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T00:20:07.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T00:20:08.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 0, 19, 58), 3.38, 80.06, 0.0, 17.04, 14.44, 0, 1, 0, 2, 0, 0),)
2026-01-01T00:20:08.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 00:19:58
2026-01-01T00:20:08.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T00:20:08.699 [DEBUG] [Thread-137307] [transport.py] [_log()] starting thread (client mode): 0xb95f1e40
2026-01-01T00:20:08.699 [DEBUG] [Thread-137307] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:20:08.712 [DEBUG] [Thread-137307] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T00:20:08.712 [INFO] [Thread-137307] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T00:20:08.714 [DEBUG] [Thread-137307] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:20:08.714 [DEBUG] [Thread-137307] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T00:20:08.714 [DEBUG] [Thread-137307] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:20:08.714 [DEBUG] [Thread-137307] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:20:08.714 [DEBUG] [Thread-137307] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:20:08.714 [DEBUG] [Thread-137307] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:20:08.714 [DEBUG] [Thread-137307] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:20:08.714 [DEBUG] [Thread-137307] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:20:08.714 [DEBUG] [Thread-137307] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:20:08.714 [DEBUG] [Thread-137307] [transport.py] [_log()] client lang: <none>
2026-01-01T00:20:08.714 [DEBUG] [Thread-137307] [transport.py] [_log()] server lang: <none>
2026-01-01T00:20:08.714 [DEBUG] [Thread-137307] [transport.py] [_log()] kex follows: False
2026-01-01T00:20:08.714 [DEBUG] [Thread-137307] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:20:08.714 [DEBUG] [Thread-137307] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:20:08.715 [DEBUG] [Thread-137307] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:20:08.715 [DEBUG] [Thread-137307] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:20:08.715 [DEBUG] [Thread-137307] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:20:08.715 [DEBUG] [Thread-137307] [transport.py] [_log()] Compression: none
2026-01-01T00:20:08.715 [DEBUG] [Thread-137307] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:20:08.728 [DEBUG] [Thread-137307] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:20:08.728 [DEBUG] [Thread-137307] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:20:08.729 [DEBUG] [Thread-137307] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T00:20:08.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T00:20:08.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:20:08.730 [DEBUG] [Thread-137307] [transport.py] [_log()] userauth is OK
2026-01-01T00:20:08.730 [DEBUG] [Thread-137307] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:20:08.730 [DEBUG] [Thread-137307] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:20:08.730 [DEBUG] [Thread-137307] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T00:20:08.730 [DEBUG] [Thread-137307] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:20:08.744 [INFO] [Thread-137307] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:20:08.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:20:09.335 [DEBUG] [Thread-137307] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:20:09.336 [DEBUG] [Thread-137307] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:20:09.336 [DEBUG] [Thread-137307] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T00:20:09.377 [DEBUG] [Thread-137307] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:20:09.377 [DEBUG] [Thread-137307] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:20:09.380 [DEBUG] [Thread-137307] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:20:09.391 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:20:09.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T00:20:09.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T00:20:09.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T00:20:09.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:20:09.401 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T00:20:09.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:20:09.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:20:09.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T00:20:09.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.930343 -999.00  +14.60  15.31     82  +11.60 1 3 1 2 1     0    0 2.77 -13.69 ----- 11.4 15.3 208.8 19.3 15.8 -12.2 15.7 -12.0 15.5 -11.1 15.8 -11.8
2026-01-01T00:20:09.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T00:20:09.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T00:20:09.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.930343
2026-01-01T00:20:09.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T00:20:09.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T00:20:09.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T00:20:09.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T00:20:09.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-01-01T00:20:09.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T00:19:58', tmtdew=3.38, humidity=80.06, cloud=0.0, wind=17.04, temperature=14.44, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:19:58', seeing=1.34, atlas_timestamp='2025-12-31T22:19:41.635', atlas_cloud=3, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T00:20:09.404 [DEBUG] [Thread-137307] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:20:09.488 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T00:20:09.501 [DEBUG] [Thread-137310] [transport.py] [_log()] starting thread (client mode): 0xb95f02e0
2026-01-01T00:20:09.501 [DEBUG] [Thread-137310] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:20:09.516 [DEBUG] [Thread-137310] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T00:20:09.517 [INFO] [Thread-137310] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T00:20:09.524 [DEBUG] [Thread-137310] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:20:09.525 [DEBUG] [Thread-137310] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T00:20:09.525 [DEBUG] [Thread-137310] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:20:09.525 [DEBUG] [Thread-137310] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:20:09.525 [DEBUG] [Thread-137310] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:20:09.525 [DEBUG] [Thread-137310] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:20:09.525 [DEBUG] [Thread-137310] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:20:09.526 [DEBUG] [Thread-137310] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:20:09.526 [DEBUG] [Thread-137310] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:20:09.526 [DEBUG] [Thread-137310] [transport.py] [_log()] client lang: <none>
2026-01-01T00:20:09.526 [DEBUG] [Thread-137310] [transport.py] [_log()] server lang: <none>
2026-01-01T00:20:09.526 [DEBUG] [Thread-137310] [transport.py] [_log()] kex follows: False
2026-01-01T00:20:09.526 [DEBUG] [Thread-137310] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:20:09.526 [DEBUG] [Thread-137310] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:20:09.526 [DEBUG] [Thread-137310] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:20:09.527 [DEBUG] [Thread-137310] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:20:09.527 [DEBUG] [Thread-137310] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:20:09.527 [DEBUG] [Thread-137310] [transport.py] [_log()] Compression: none
2026-01-01T00:20:09.527 [DEBUG] [Thread-137310] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:20:09.585 [DEBUG] [Thread-137310] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:20:09.585 [DEBUG] [Thread-137310] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:20:09.586 [DEBUG] [Thread-137310] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T00:20:09.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T00:20:09.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:20:09.649 [DEBUG] [Thread-137310] [transport.py] [_log()] userauth is OK
2026-01-01T00:20:09.649 [DEBUG] [Thread-137310] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:20:09.650 [DEBUG] [Thread-137310] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:20:09.650 [DEBUG] [Thread-137310] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T00:20:09.650 [DEBUG] [Thread-137310] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:20:09.669 [INFO] [Thread-137310] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:20:09.669 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T00:20:09.670 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:20:10.510 [DEBUG] [Thread-137310] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:20:10.510 [DEBUG] [Thread-137310] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:20:10.558 [DEBUG] [Thread-137310] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:20:10.558 [DEBUG] [Thread-137310] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:20:10.568 [DEBUG] [Thread-137310] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:20:10.577 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:20:10.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T00:20:10.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T00:20:10.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:20:10.596 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:20:10.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:20:10.604 [DEBUG] [Thread-137310] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:20:22.573 [DEBUG] [Thread-137312 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:20:36.768 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:20:36.769 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:20:37.621 [DEBUG] [Thread-137313 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:20:40.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T00:20:40.610 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T00:20:40.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T00:20:41.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 0, 20, 30), 3.39, 80.05, 0.0, 16.52, 14.4, 0, 1, 0, 2, 0, 0),)
2026-01-01T00:20:41.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 00:20:30
2026-01-01T00:20:41.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T00:20:41.624 [DEBUG] [Thread-137314] [transport.py] [_log()] starting thread (client mode): 0xb6ba25c0
2026-01-01T00:20:41.624 [DEBUG] [Thread-137314] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:20:41.647 [DEBUG] [Thread-137314] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T00:20:41.647 [INFO] [Thread-137314] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T00:20:41.650 [DEBUG] [Thread-137314] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:20:41.650 [DEBUG] [Thread-137314] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T00:20:41.650 [DEBUG] [Thread-137314] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:20:41.651 [DEBUG] [Thread-137314] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:20:41.651 [DEBUG] [Thread-137314] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:20:41.651 [DEBUG] [Thread-137314] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:20:41.651 [DEBUG] [Thread-137314] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:20:41.651 [DEBUG] [Thread-137314] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:20:41.651 [DEBUG] [Thread-137314] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:20:41.651 [DEBUG] [Thread-137314] [transport.py] [_log()] client lang: <none>
2026-01-01T00:20:41.651 [DEBUG] [Thread-137314] [transport.py] [_log()] server lang: <none>
2026-01-01T00:20:41.651 [DEBUG] [Thread-137314] [transport.py] [_log()] kex follows: False
2026-01-01T00:20:41.651 [DEBUG] [Thread-137314] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:20:41.651 [DEBUG] [Thread-137314] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:20:41.651 [DEBUG] [Thread-137314] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:20:41.651 [DEBUG] [Thread-137314] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:20:41.652 [DEBUG] [Thread-137314] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:20:41.652 [DEBUG] [Thread-137314] [transport.py] [_log()] Compression: none
2026-01-01T00:20:41.652 [DEBUG] [Thread-137314] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:20:41.673 [DEBUG] [Thread-137314] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:20:41.674 [DEBUG] [Thread-137314] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:20:41.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T00:20:41.675 [DEBUG] [Thread-137314] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T00:20:41.676 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:20:41.677 [DEBUG] [Thread-137314] [transport.py] [_log()] userauth is OK
2026-01-01T00:20:41.677 [DEBUG] [Thread-137314] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:20:41.677 [DEBUG] [Thread-137314] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:20:41.677 [DEBUG] [Thread-137314] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T00:20:41.678 [DEBUG] [Thread-137314] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:20:41.713 [INFO] [Thread-137314] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:20:41.714 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:20:42.271 [DEBUG] [Thread-137314] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:20:42.271 [DEBUG] [Thread-137314] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:20:42.272 [DEBUG] [Thread-137314] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T00:20:42.312 [DEBUG] [Thread-137314] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:20:42.312 [DEBUG] [Thread-137314] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:20:42.316 [DEBUG] [Thread-137314] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:20:42.323 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:20:42.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T00:20:42.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T00:20:42.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T00:20:42.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:20:42.334 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T00:20:42.334 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:20:42.334 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:20:42.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T00:20:42.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.930343 -999.00  +14.60  15.31     82  +11.60 1 3 1 2 1     0    0 2.77 -13.69 ----- 11.4 15.3 208.8 19.3 15.8 -12.2 15.7 -12.0 15.5 -11.1 15.8 -11.8
2026-01-01T00:20:42.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T00:20:42.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T00:20:42.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.930343
2026-01-01T00:20:42.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T00:20:42.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T00:20:42.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T00:20:42.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T00:20:42.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-01-01T00:20:42.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T00:20:30', tmtdew=3.39, humidity=80.05, cloud=0.0, wind=16.52, temperature=14.4, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T22:19:41.635', atlas_cloud=3, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T00:20:42.336 [DEBUG] [Thread-137314] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:20:42.427 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T00:20:42.439 [DEBUG] [Thread-137317] [transport.py] [_log()] starting thread (client mode): 0xbbfcc520
2026-01-01T00:20:42.439 [DEBUG] [Thread-137317] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:20:42.455 [DEBUG] [Thread-137317] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T00:20:42.455 [INFO] [Thread-137317] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T00:20:42.462 [DEBUG] [Thread-137317] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:20:42.462 [DEBUG] [Thread-137317] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T00:20:42.463 [DEBUG] [Thread-137317] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:20:42.463 [DEBUG] [Thread-137317] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:20:42.463 [DEBUG] [Thread-137317] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:20:42.463 [DEBUG] [Thread-137317] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:20:42.463 [DEBUG] [Thread-137317] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:20:42.463 [DEBUG] [Thread-137317] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:20:42.463 [DEBUG] [Thread-137317] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:20:42.463 [DEBUG] [Thread-137317] [transport.py] [_log()] client lang: <none>
2026-01-01T00:20:42.463 [DEBUG] [Thread-137317] [transport.py] [_log()] server lang: <none>
2026-01-01T00:20:42.463 [DEBUG] [Thread-137317] [transport.py] [_log()] kex follows: False
2026-01-01T00:20:42.463 [DEBUG] [Thread-137317] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:20:42.463 [DEBUG] [Thread-137317] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:20:42.463 [DEBUG] [Thread-137317] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:20:42.463 [DEBUG] [Thread-137317] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:20:42.463 [DEBUG] [Thread-137317] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:20:42.463 [DEBUG] [Thread-137317] [transport.py] [_log()] Compression: none
2026-01-01T00:20:42.463 [DEBUG] [Thread-137317] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:20:42.520 [DEBUG] [Thread-137317] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:20:42.520 [DEBUG] [Thread-137317] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:20:42.521 [DEBUG] [Thread-137317] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T00:20:42.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T00:20:42.522 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:20:42.576 [DEBUG] [Thread-137317] [transport.py] [_log()] userauth is OK
2026-01-01T00:20:42.576 [DEBUG] [Thread-137317] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:20:42.576 [DEBUG] [Thread-137317] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:20:42.577 [DEBUG] [Thread-137317] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T00:20:42.577 [DEBUG] [Thread-137317] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:20:42.595 [INFO] [Thread-137317] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:20:42.596 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T00:20:42.596 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:20:43.420 [DEBUG] [Thread-137317] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:20:43.420 [DEBUG] [Thread-137317] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:20:43.468 [DEBUG] [Thread-137317] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:20:43.468 [DEBUG] [Thread-137317] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:20:43.477 [DEBUG] [Thread-137317] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:20:43.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:20:43.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T00:20:43.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T00:20:43.505 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:20:43.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:20:43.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:20:43.513 [DEBUG] [Thread-137317] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:20:52.650 [DEBUG] [Thread-137319 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:20:55.877 [DEBUG] [Thread-137320 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:21:07.700 [DEBUG] [Thread-137321 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:21:13.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T00:21:13.521 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T00:21:13.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T00:21:14.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 0, 21, 3), 3.37, 80.11, 0.0, 17.17, 14.44, 0, 1, 0, 2, 0, 0),)
2026-01-01T00:21:14.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 00:21:03
2026-01-01T00:21:14.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T00:21:14.552 [DEBUG] [Thread-137322] [transport.py] [_log()] starting thread (client mode): 0xb95596f0
2026-01-01T00:21:14.553 [DEBUG] [Thread-137322] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:21:14.571 [DEBUG] [Thread-137322] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T00:21:14.571 [INFO] [Thread-137322] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T00:21:14.573 [DEBUG] [Thread-137322] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:21:14.573 [DEBUG] [Thread-137322] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T00:21:14.573 [DEBUG] [Thread-137322] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:21:14.574 [DEBUG] [Thread-137322] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:21:14.574 [DEBUG] [Thread-137322] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:21:14.574 [DEBUG] [Thread-137322] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:21:14.574 [DEBUG] [Thread-137322] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:21:14.574 [DEBUG] [Thread-137322] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:21:14.574 [DEBUG] [Thread-137322] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:21:14.574 [DEBUG] [Thread-137322] [transport.py] [_log()] client lang: <none>
2026-01-01T00:21:14.574 [DEBUG] [Thread-137322] [transport.py] [_log()] server lang: <none>
2026-01-01T00:21:14.574 [DEBUG] [Thread-137322] [transport.py] [_log()] kex follows: False
2026-01-01T00:21:14.574 [DEBUG] [Thread-137322] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:21:14.574 [DEBUG] [Thread-137322] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:21:14.574 [DEBUG] [Thread-137322] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:21:14.574 [DEBUG] [Thread-137322] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:21:14.574 [DEBUG] [Thread-137322] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:21:14.574 [DEBUG] [Thread-137322] [transport.py] [_log()] Compression: none
2026-01-01T00:21:14.574 [DEBUG] [Thread-137322] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:21:14.589 [DEBUG] [Thread-137322] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:21:14.589 [DEBUG] [Thread-137322] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:21:14.589 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T00:21:14.590 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:21:14.590 [DEBUG] [Thread-137322] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T00:21:14.590 [DEBUG] [Thread-137322] [transport.py] [_log()] userauth is OK
2026-01-01T00:21:14.590 [DEBUG] [Thread-137322] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:21:14.590 [DEBUG] [Thread-137322] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:21:14.590 [DEBUG] [Thread-137322] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T00:21:14.590 [DEBUG] [Thread-137322] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:21:14.600 [INFO] [Thread-137322] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:21:14.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:21:15.237 [DEBUG] [Thread-137322] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:21:15.237 [DEBUG] [Thread-137322] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:21:15.237 [DEBUG] [Thread-137322] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T00:21:15.278 [DEBUG] [Thread-137322] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:21:15.278 [DEBUG] [Thread-137322] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:21:15.281 [DEBUG] [Thread-137322] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:21:15.292 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:21:15.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T00:21:15.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T00:21:15.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T00:21:15.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:21:15.297 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T00:21:15.297 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:21:15.297 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:21:15.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T00:21:15.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.930690 -999.00  +14.60  14.22     82  +11.60 1 3 1 2 1     0    0 2.81 -13.71 ----- 11.1 14.2 206.0 18.5 15.8 -12.1 15.6 -11.6 15.5 -11.1 15.8 -11.7
2026-01-01T00:21:15.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T00:21:15.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T00:21:15.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.930690
2026-01-01T00:21:15.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T00:21:15.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T00:21:15.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T00:21:15.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T00:21:15.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-01-01T00:21:15.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T00:21:03', tmtdew=3.37, humidity=80.11, cloud=0.0, wind=17.17, temperature=14.44, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T22:20:11.616', atlas_cloud=3, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T00:21:15.298 [DEBUG] [Thread-137322] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:21:15.373 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T00:21:15.386 [DEBUG] [Thread-137325] [transport.py] [_log()] starting thread (client mode): 0xb6ba0220
2026-01-01T00:21:15.386 [DEBUG] [Thread-137325] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:21:15.401 [DEBUG] [Thread-137325] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T00:21:15.401 [INFO] [Thread-137325] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T00:21:15.409 [DEBUG] [Thread-137325] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:21:15.409 [DEBUG] [Thread-137325] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T00:21:15.409 [DEBUG] [Thread-137325] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:21:15.409 [DEBUG] [Thread-137325] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:21:15.409 [DEBUG] [Thread-137325] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:21:15.409 [DEBUG] [Thread-137325] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:21:15.409 [DEBUG] [Thread-137325] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:21:15.409 [DEBUG] [Thread-137325] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:21:15.409 [DEBUG] [Thread-137325] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:21:15.409 [DEBUG] [Thread-137325] [transport.py] [_log()] client lang: <none>
2026-01-01T00:21:15.409 [DEBUG] [Thread-137325] [transport.py] [_log()] server lang: <none>
2026-01-01T00:21:15.409 [DEBUG] [Thread-137325] [transport.py] [_log()] kex follows: False
2026-01-01T00:21:15.409 [DEBUG] [Thread-137325] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:21:15.409 [DEBUG] [Thread-137325] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:21:15.409 [DEBUG] [Thread-137325] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:21:15.409 [DEBUG] [Thread-137325] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:21:15.409 [DEBUG] [Thread-137325] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:21:15.409 [DEBUG] [Thread-137325] [transport.py] [_log()] Compression: none
2026-01-01T00:21:15.409 [DEBUG] [Thread-137325] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:21:15.466 [DEBUG] [Thread-137325] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:21:15.466 [DEBUG] [Thread-137325] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:21:15.467 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T00:21:15.467 [DEBUG] [Thread-137325] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T00:21:15.467 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:21:15.523 [DEBUG] [Thread-137325] [transport.py] [_log()] userauth is OK
2026-01-01T00:21:15.523 [DEBUG] [Thread-137325] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:21:15.523 [DEBUG] [Thread-137325] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:21:15.523 [DEBUG] [Thread-137325] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T00:21:15.523 [DEBUG] [Thread-137325] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:21:15.541 [INFO] [Thread-137325] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:21:15.542 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T00:21:15.542 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:21:16.406 [DEBUG] [Thread-137325] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:21:16.406 [DEBUG] [Thread-137325] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:21:16.454 [DEBUG] [Thread-137325] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:21:16.455 [DEBUG] [Thread-137325] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:21:16.463 [DEBUG] [Thread-137325] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:21:16.471 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:21:16.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T00:21:16.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T00:21:16.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:21:16.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:21:16.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:21:16.495 [DEBUG] [Thread-137325] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:21:22.733 [DEBUG] [Thread-137327 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:21:36.969 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:21:36.970 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:21:37.791 [DEBUG] [Thread-137328 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:21:46.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T00:21:46.495 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T00:21:46.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T00:21:47.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 0, 21, 35), 3.38, 80.11, 0.0, 16.9, 14.47, 0, 1, 0, 2, 0, 0),)
2026-01-01T00:21:47.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 00:21:35
2026-01-01T00:21:47.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T00:21:47.469 [DEBUG] [Thread-137329] [transport.py] [_log()] starting thread (client mode): 0xb6ba0940
2026-01-01T00:21:47.469 [DEBUG] [Thread-137329] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:21:47.490 [DEBUG] [Thread-137329] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T00:21:47.490 [INFO] [Thread-137329] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T00:21:47.493 [DEBUG] [Thread-137329] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:21:47.493 [DEBUG] [Thread-137329] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T00:21:47.493 [DEBUG] [Thread-137329] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:21:47.493 [DEBUG] [Thread-137329] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:21:47.493 [DEBUG] [Thread-137329] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:21:47.493 [DEBUG] [Thread-137329] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:21:47.494 [DEBUG] [Thread-137329] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:21:47.494 [DEBUG] [Thread-137329] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:21:47.494 [DEBUG] [Thread-137329] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:21:47.494 [DEBUG] [Thread-137329] [transport.py] [_log()] client lang: <none>
2026-01-01T00:21:47.494 [DEBUG] [Thread-137329] [transport.py] [_log()] server lang: <none>
2026-01-01T00:21:47.494 [DEBUG] [Thread-137329] [transport.py] [_log()] kex follows: False
2026-01-01T00:21:47.494 [DEBUG] [Thread-137329] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:21:47.494 [DEBUG] [Thread-137329] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:21:47.494 [DEBUG] [Thread-137329] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:21:47.494 [DEBUG] [Thread-137329] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:21:47.494 [DEBUG] [Thread-137329] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:21:47.494 [DEBUG] [Thread-137329] [transport.py] [_log()] Compression: none
2026-01-01T00:21:47.494 [DEBUG] [Thread-137329] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:21:47.511 [DEBUG] [Thread-137329] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:21:47.511 [DEBUG] [Thread-137329] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:21:47.512 [DEBUG] [Thread-137329] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T00:21:47.512 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T00:21:47.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:21:47.514 [DEBUG] [Thread-137329] [transport.py] [_log()] userauth is OK
2026-01-01T00:21:47.514 [DEBUG] [Thread-137329] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:21:47.514 [DEBUG] [Thread-137329] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:21:47.514 [DEBUG] [Thread-137329] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T00:21:47.514 [DEBUG] [Thread-137329] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:21:47.548 [INFO] [Thread-137329] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:21:47.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:21:48.217 [DEBUG] [Thread-137329] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:21:48.217 [DEBUG] [Thread-137329] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:21:48.217 [DEBUG] [Thread-137329] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T00:21:48.259 [DEBUG] [Thread-137329] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:21:48.259 [DEBUG] [Thread-137329] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:21:48.262 [DEBUG] [Thread-137329] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:21:48.274 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:21:48.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T00:21:48.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T00:21:48.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T00:21:48.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:21:48.285 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T00:21:48.286 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:21:48.286 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:21:48.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T00:21:48.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.931384 -999.00  +14.60  18.14     82  +11.60 1 3 1 2 1     0    0 2.77 -14.32 ----- 15.0 18.1 196.0 21.0 15.8 -12.1 15.6 -11.7 15.4 -11.1 15.8 -12.0
2026-01-01T00:21:48.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T00:21:48.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T00:21:48.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.931384
2026-01-01T00:21:48.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T00:21:48.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T00:21:48.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T00:21:48.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T00:21:48.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-01-01T00:21:48.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T00:21:35', tmtdew=3.38, humidity=80.11, cloud=0.0, wind=16.9, temperature=14.47, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T22:21:11.578', atlas_cloud=3, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T00:21:48.288 [DEBUG] [Thread-137329] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:21:48.373 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T00:21:48.383 [DEBUG] [Thread-137332] [transport.py] [_log()] starting thread (client mode): 0xb17979a0
2026-01-01T00:21:48.383 [DEBUG] [Thread-137332] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:21:48.400 [DEBUG] [Thread-137332] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T00:21:48.400 [INFO] [Thread-137332] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T00:21:48.408 [DEBUG] [Thread-137332] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:21:48.409 [DEBUG] [Thread-137332] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T00:21:48.409 [DEBUG] [Thread-137332] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:21:48.409 [DEBUG] [Thread-137332] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:21:48.409 [DEBUG] [Thread-137332] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:21:48.409 [DEBUG] [Thread-137332] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:21:48.409 [DEBUG] [Thread-137332] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:21:48.409 [DEBUG] [Thread-137332] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:21:48.410 [DEBUG] [Thread-137332] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:21:48.410 [DEBUG] [Thread-137332] [transport.py] [_log()] client lang: <none>
2026-01-01T00:21:48.410 [DEBUG] [Thread-137332] [transport.py] [_log()] server lang: <none>
2026-01-01T00:21:48.410 [DEBUG] [Thread-137332] [transport.py] [_log()] kex follows: False
2026-01-01T00:21:48.410 [DEBUG] [Thread-137332] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:21:48.410 [DEBUG] [Thread-137332] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:21:48.410 [DEBUG] [Thread-137332] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:21:48.410 [DEBUG] [Thread-137332] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:21:48.410 [DEBUG] [Thread-137332] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:21:48.410 [DEBUG] [Thread-137332] [transport.py] [_log()] Compression: none
2026-01-01T00:21:48.410 [DEBUG] [Thread-137332] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:21:48.472 [DEBUG] [Thread-137332] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:21:48.472 [DEBUG] [Thread-137332] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:21:48.473 [DEBUG] [Thread-137332] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T00:21:48.473 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T00:21:48.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:21:48.533 [DEBUG] [Thread-137332] [transport.py] [_log()] userauth is OK
2026-01-01T00:21:48.533 [DEBUG] [Thread-137332] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:21:48.533 [DEBUG] [Thread-137332] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:21:48.533 [DEBUG] [Thread-137332] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T00:21:48.533 [DEBUG] [Thread-137332] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:21:48.557 [INFO] [Thread-137332] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:21:48.557 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T00:21:48.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:21:49.811 [DEBUG] [Thread-137332] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:21:49.811 [DEBUG] [Thread-137332] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:21:49.859 [DEBUG] [Thread-137332] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:21:49.859 [DEBUG] [Thread-137332] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:21:49.872 [DEBUG] [Thread-137332] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:21:49.881 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:21:49.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T00:21:49.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T00:21:49.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:21:49.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:21:49.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:21:49.913 [DEBUG] [Thread-137332] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:21:52.825 [DEBUG] [Thread-137334 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:21:55.945 [DEBUG] [Thread-137335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:22:07.870 [DEBUG] [Thread-137336 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:22:19.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T00:22:19.910 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T00:22:19.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T00:22:20.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 0, 22, 7), 3.38, 80.1, 0.0, 16.73, 14.45, 0, 1, 0, 2, 0, 0),)
2026-01-01T00:22:20.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 00:22:07
2026-01-01T00:22:20.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T00:22:20.904 [DEBUG] [Thread-137337] [transport.py] [_log()] starting thread (client mode): 0xb6ba0b50
2026-01-01T00:22:20.904 [DEBUG] [Thread-137337] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:22:20.923 [DEBUG] [Thread-137337] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T00:22:20.923 [INFO] [Thread-137337] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T00:22:20.924 [DEBUG] [Thread-137337] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:22:20.924 [DEBUG] [Thread-137337] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T00:22:20.924 [DEBUG] [Thread-137337] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:22:20.924 [DEBUG] [Thread-137337] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:22:20.924 [DEBUG] [Thread-137337] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:22:20.924 [DEBUG] [Thread-137337] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:22:20.924 [DEBUG] [Thread-137337] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:22:20.924 [DEBUG] [Thread-137337] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:22:20.924 [DEBUG] [Thread-137337] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:22:20.925 [DEBUG] [Thread-137337] [transport.py] [_log()] client lang: <none>
2026-01-01T00:22:20.925 [DEBUG] [Thread-137337] [transport.py] [_log()] server lang: <none>
2026-01-01T00:22:20.925 [DEBUG] [Thread-137337] [transport.py] [_log()] kex follows: False
2026-01-01T00:22:20.925 [DEBUG] [Thread-137337] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:22:20.925 [DEBUG] [Thread-137337] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:22:20.925 [DEBUG] [Thread-137337] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:22:20.925 [DEBUG] [Thread-137337] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:22:20.925 [DEBUG] [Thread-137337] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:22:20.925 [DEBUG] [Thread-137337] [transport.py] [_log()] Compression: none
2026-01-01T00:22:20.925 [DEBUG] [Thread-137337] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:22:20.938 [DEBUG] [Thread-137337] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:22:20.939 [DEBUG] [Thread-137337] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:22:20.940 [DEBUG] [Thread-137337] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T00:22:20.941 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T00:22:20.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:22:20.943 [DEBUG] [Thread-137337] [transport.py] [_log()] userauth is OK
2026-01-01T00:22:20.943 [DEBUG] [Thread-137337] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:22:20.943 [DEBUG] [Thread-137337] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:22:20.944 [DEBUG] [Thread-137337] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T00:22:20.944 [DEBUG] [Thread-137337] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:22:20.966 [INFO] [Thread-137337] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:22:20.967 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:22:21.637 [DEBUG] [Thread-137337] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:22:21.637 [DEBUG] [Thread-137337] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:22:21.638 [DEBUG] [Thread-137337] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T00:22:21.678 [DEBUG] [Thread-137337] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:22:21.678 [DEBUG] [Thread-137337] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:22:21.682 [DEBUG] [Thread-137337] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:22:21.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:22:21.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T00:22:21.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T00:22:21.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T00:22:21.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:22:21.706 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T00:22:21.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:22:21.706 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:22:21.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T00:22:21.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.931732 -999.00  +14.60  12.78     82  +11.60 1 3 1 2 1     0    0 2.73 -14.41 ----- 11.8 12.8 187.4 21.5 15.8 -12.1 15.6 -11.7 15.4 -11.2 15.8 -11.9
2026-01-01T00:22:21.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T00:22:21.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T00:22:21.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.931732
2026-01-01T00:22:21.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T00:22:21.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T00:22:21.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T00:22:21.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T00:22:21.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-01-01T00:22:21.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T00:22:07', tmtdew=3.38, humidity=80.1, cloud=0.0, wind=16.73, temperature=14.45, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T22:21:41.645', atlas_cloud=3, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T00:22:21.709 [DEBUG] [Thread-137337] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:22:21.791 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T00:22:21.804 [DEBUG] [Thread-137340] [transport.py] [_log()] starting thread (client mode): 0xb9559fc0
2026-01-01T00:22:21.804 [DEBUG] [Thread-137340] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:22:21.819 [DEBUG] [Thread-137340] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T00:22:21.819 [INFO] [Thread-137340] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T00:22:21.827 [DEBUG] [Thread-137340] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:22:21.827 [DEBUG] [Thread-137340] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T00:22:21.828 [DEBUG] [Thread-137340] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:22:21.828 [DEBUG] [Thread-137340] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:22:21.828 [DEBUG] [Thread-137340] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:22:21.828 [DEBUG] [Thread-137340] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:22:21.828 [DEBUG] [Thread-137340] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:22:21.828 [DEBUG] [Thread-137340] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:22:21.828 [DEBUG] [Thread-137340] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:22:21.828 [DEBUG] [Thread-137340] [transport.py] [_log()] client lang: <none>
2026-01-01T00:22:21.829 [DEBUG] [Thread-137340] [transport.py] [_log()] server lang: <none>
2026-01-01T00:22:21.829 [DEBUG] [Thread-137340] [transport.py] [_log()] kex follows: False
2026-01-01T00:22:21.829 [DEBUG] [Thread-137340] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:22:21.829 [DEBUG] [Thread-137340] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:22:21.829 [DEBUG] [Thread-137340] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:22:21.829 [DEBUG] [Thread-137340] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:22:21.829 [DEBUG] [Thread-137340] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:22:21.830 [DEBUG] [Thread-137340] [transport.py] [_log()] Compression: none
2026-01-01T00:22:21.830 [DEBUG] [Thread-137340] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:22:21.885 [DEBUG] [Thread-137340] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:22:21.885 [DEBUG] [Thread-137340] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:22:21.886 [DEBUG] [Thread-137340] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T00:22:21.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T00:22:21.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:22:21.945 [DEBUG] [Thread-137340] [transport.py] [_log()] userauth is OK
2026-01-01T00:22:21.945 [DEBUG] [Thread-137340] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:22:21.945 [DEBUG] [Thread-137340] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:22:21.945 [DEBUG] [Thread-137340] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T00:22:21.945 [DEBUG] [Thread-137340] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:22:21.966 [INFO] [Thread-137340] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:22:21.966 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T00:22:21.967 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:22:22.847 [DEBUG] [Thread-137340] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:22:22.847 [DEBUG] [Thread-137340] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:22:22.895 [DEBUG] [Thread-137340] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:22:22.896 [DEBUG] [Thread-137340] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:22:22.903 [DEBUG] [Thread-137342 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:22:22.905 [DEBUG] [Thread-137340] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:22:22.914 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:22:22.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T00:22:22.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T00:22:22.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:22:22.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:22:22.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:22:22.940 [DEBUG] [Thread-137340] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:22:37.173 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:22:37.174 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:22:37.956 [DEBUG] [Thread-137343 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:22:52.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T00:22:52.963 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T00:22:52.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T00:22:52.986 [DEBUG] [Thread-137344 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:22:53.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 0, 22, 39), 3.43, 80.1, 0.0, 19.82, 14.47, 0, 1, 0, 2, 0, 0),)
2026-01-01T00:22:53.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 00:22:39
2026-01-01T00:22:53.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T00:22:53.954 [DEBUG] [Thread-137345] [transport.py] [_log()] starting thread (client mode): 0xbbfce890
2026-01-01T00:22:53.954 [DEBUG] [Thread-137345] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:22:53.975 [DEBUG] [Thread-137345] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T00:22:53.975 [INFO] [Thread-137345] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T00:22:53.978 [DEBUG] [Thread-137345] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:22:53.978 [DEBUG] [Thread-137345] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T00:22:53.978 [DEBUG] [Thread-137345] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:22:53.979 [DEBUG] [Thread-137345] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:22:53.979 [DEBUG] [Thread-137345] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:22:53.979 [DEBUG] [Thread-137345] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:22:53.979 [DEBUG] [Thread-137345] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:22:53.979 [DEBUG] [Thread-137345] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:22:53.979 [DEBUG] [Thread-137345] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:22:53.979 [DEBUG] [Thread-137345] [transport.py] [_log()] client lang: <none>
2026-01-01T00:22:53.979 [DEBUG] [Thread-137345] [transport.py] [_log()] server lang: <none>
2026-01-01T00:22:53.979 [DEBUG] [Thread-137345] [transport.py] [_log()] kex follows: False
2026-01-01T00:22:53.979 [DEBUG] [Thread-137345] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:22:53.979 [DEBUG] [Thread-137345] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:22:53.979 [DEBUG] [Thread-137345] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:22:53.980 [DEBUG] [Thread-137345] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:22:53.980 [DEBUG] [Thread-137345] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:22:53.980 [DEBUG] [Thread-137345] [transport.py] [_log()] Compression: none
2026-01-01T00:22:53.980 [DEBUG] [Thread-137345] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:22:53.997 [DEBUG] [Thread-137345] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:22:53.998 [DEBUG] [Thread-137345] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:22:53.998 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T00:22:53.999 [DEBUG] [Thread-137345] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T00:22:54.000 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:22:54.001 [DEBUG] [Thread-137345] [transport.py] [_log()] userauth is OK
2026-01-01T00:22:54.001 [DEBUG] [Thread-137345] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:22:54.001 [DEBUG] [Thread-137345] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:22:54.001 [DEBUG] [Thread-137345] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T00:22:54.002 [DEBUG] [Thread-137345] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:22:54.037 [INFO] [Thread-137345] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:22:54.038 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:22:54.661 [DEBUG] [Thread-137345] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:22:54.661 [DEBUG] [Thread-137345] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:22:54.662 [DEBUG] [Thread-137345] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T00:22:54.702 [DEBUG] [Thread-137345] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:22:54.702 [DEBUG] [Thread-137345] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:22:54.706 [DEBUG] [Thread-137345] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:22:54.720 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:22:54.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T00:22:54.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T00:22:54.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T00:22:54.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:22:54.732 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T00:22:54.733 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:22:54.733 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:22:54.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T00:22:54.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.932079 -999.00  +14.60  11.39     82  +11.60 1 3 1 2 1     0    0 2.67 -15.65 ----- 15.2 11.4 184.7 20.1 15.8 -12.2 15.6 -11.5 15.5 -11.2 15.8 -11.8
2026-01-01T00:22:54.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T00:22:54.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T00:22:54.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.932079
2026-01-01T00:22:54.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T00:22:54.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T00:22:54.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T00:22:54.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T00:22:54.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-01-01T00:22:54.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T00:22:39', tmtdew=3.43, humidity=80.1, cloud=0.0, wind=19.82, temperature=14.47, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T22:22:11.626', atlas_cloud=3, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T00:22:54.735 [DEBUG] [Thread-137345] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:22:54.820 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T00:22:54.830 [DEBUG] [Thread-137348] [transport.py] [_log()] starting thread (client mode): 0xb955a500
2026-01-01T00:22:54.830 [DEBUG] [Thread-137348] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:22:54.847 [DEBUG] [Thread-137348] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T00:22:54.847 [INFO] [Thread-137348] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T00:22:54.855 [DEBUG] [Thread-137348] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:22:54.855 [DEBUG] [Thread-137348] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T00:22:54.855 [DEBUG] [Thread-137348] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:22:54.855 [DEBUG] [Thread-137348] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:22:54.855 [DEBUG] [Thread-137348] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:22:54.855 [DEBUG] [Thread-137348] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:22:54.855 [DEBUG] [Thread-137348] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:22:54.855 [DEBUG] [Thread-137348] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:22:54.855 [DEBUG] [Thread-137348] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:22:54.855 [DEBUG] [Thread-137348] [transport.py] [_log()] client lang: <none>
2026-01-01T00:22:54.855 [DEBUG] [Thread-137348] [transport.py] [_log()] server lang: <none>
2026-01-01T00:22:54.855 [DEBUG] [Thread-137348] [transport.py] [_log()] kex follows: False
2026-01-01T00:22:54.855 [DEBUG] [Thread-137348] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:22:54.855 [DEBUG] [Thread-137348] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:22:54.855 [DEBUG] [Thread-137348] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:22:54.855 [DEBUG] [Thread-137348] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:22:54.856 [DEBUG] [Thread-137348] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:22:54.856 [DEBUG] [Thread-137348] [transport.py] [_log()] Compression: none
2026-01-01T00:22:54.856 [DEBUG] [Thread-137348] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:22:54.912 [DEBUG] [Thread-137348] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:22:54.912 [DEBUG] [Thread-137348] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:22:54.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T00:22:54.914 [DEBUG] [Thread-137348] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T00:22:54.914 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:22:54.968 [DEBUG] [Thread-137348] [transport.py] [_log()] userauth is OK
2026-01-01T00:22:54.968 [DEBUG] [Thread-137348] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:22:54.969 [DEBUG] [Thread-137348] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:22:54.969 [DEBUG] [Thread-137348] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T00:22:54.969 [DEBUG] [Thread-137348] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:22:54.987 [INFO] [Thread-137348] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:22:54.988 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T00:22:54.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:22:55.846 [DEBUG] [Thread-137348] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:22:55.846 [DEBUG] [Thread-137348] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:22:55.894 [DEBUG] [Thread-137348] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:22:55.894 [DEBUG] [Thread-137348] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:22:55.903 [DEBUG] [Thread-137348] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:22:55.911 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:22:55.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T00:22:55.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T00:22:55.929 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:22:55.929 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:22:55.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:22:55.940 [DEBUG] [Thread-137348] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:22:56.028 [DEBUG] [Thread-137350 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:23:08.020 [DEBUG] [Thread-137351 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:23:23.066 [DEBUG] [Thread-137352 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:23:25.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T00:23:25.961 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T00:23:25.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T00:23:26.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 0, 23, 11), 3.42, 80.15, 0.0, 18.69, 14.47, 0, 1, 0, 2, 0, 0),)
2026-01-01T00:23:26.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 00:23:11
2026-01-01T00:23:26.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T00:23:26.947 [DEBUG] [Thread-137353] [transport.py] [_log()] starting thread (client mode): 0xb6ba1060
2026-01-01T00:23:26.947 [DEBUG] [Thread-137353] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:23:26.968 [DEBUG] [Thread-137353] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T00:23:26.968 [INFO] [Thread-137353] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T00:23:26.971 [DEBUG] [Thread-137353] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:23:26.971 [DEBUG] [Thread-137353] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T00:23:26.972 [DEBUG] [Thread-137353] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:23:26.972 [DEBUG] [Thread-137353] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:23:26.972 [DEBUG] [Thread-137353] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:23:26.972 [DEBUG] [Thread-137353] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:23:26.972 [DEBUG] [Thread-137353] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:23:26.972 [DEBUG] [Thread-137353] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:23:26.972 [DEBUG] [Thread-137353] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:23:26.972 [DEBUG] [Thread-137353] [transport.py] [_log()] client lang: <none>
2026-01-01T00:23:26.972 [DEBUG] [Thread-137353] [transport.py] [_log()] server lang: <none>
2026-01-01T00:23:26.972 [DEBUG] [Thread-137353] [transport.py] [_log()] kex follows: False
2026-01-01T00:23:26.972 [DEBUG] [Thread-137353] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:23:26.972 [DEBUG] [Thread-137353] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:23:26.972 [DEBUG] [Thread-137353] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:23:26.972 [DEBUG] [Thread-137353] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:23:26.972 [DEBUG] [Thread-137353] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:23:26.972 [DEBUG] [Thread-137353] [transport.py] [_log()] Compression: none
2026-01-01T00:23:26.972 [DEBUG] [Thread-137353] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:23:26.991 [DEBUG] [Thread-137353] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:23:26.992 [DEBUG] [Thread-137353] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:23:26.993 [DEBUG] [Thread-137353] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T00:23:26.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T00:23:26.994 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:23:26.995 [DEBUG] [Thread-137353] [transport.py] [_log()] userauth is OK
2026-01-01T00:23:26.995 [DEBUG] [Thread-137353] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:23:26.995 [DEBUG] [Thread-137353] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:23:26.995 [DEBUG] [Thread-137353] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T00:23:26.995 [DEBUG] [Thread-137353] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:23:27.013 [INFO] [Thread-137353] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:23:27.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:23:27.641 [DEBUG] [Thread-137353] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:23:27.642 [DEBUG] [Thread-137353] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:23:27.642 [DEBUG] [Thread-137353] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T00:23:27.684 [DEBUG] [Thread-137353] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:23:27.684 [DEBUG] [Thread-137353] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:23:27.687 [DEBUG] [Thread-137353] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:23:27.703 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:23:27.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T00:23:27.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T00:23:27.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T00:23:27.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:23:27.719 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T00:23:27.720 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:23:27.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:23:27.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T00:23:27.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.932426 -999.00  +14.60  12.94     82  +11.60 1 2 1 2 1     0    0 2.65 -15.62 ..... 10.9 12.9 201.8 16.1 15.8 -12.0 15.6 -11.6 15.5 -11.1 15.8 -11.8
2026-01-01T00:23:27.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T00:23:27.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T00:23:27.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.932426
2026-01-01T00:23:27.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T00:23:27.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T00:23:27.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T00:23:27.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T00:23:27.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T00:23:27.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T00:23:11', tmtdew=3.42, humidity=80.15, cloud=0.0, wind=18.69, temperature=14.47, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T22:22:41.606', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T00:23:27.723 [DEBUG] [Thread-137353] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:23:27.806 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T00:23:27.818 [DEBUG] [Thread-137356] [transport.py] [_log()] starting thread (client mode): 0xb6b62920
2026-01-01T00:23:27.819 [DEBUG] [Thread-137356] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:23:27.834 [DEBUG] [Thread-137356] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T00:23:27.834 [INFO] [Thread-137356] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T00:23:27.845 [DEBUG] [Thread-137356] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:23:27.846 [DEBUG] [Thread-137356] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T00:23:27.846 [DEBUG] [Thread-137356] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:23:27.846 [DEBUG] [Thread-137356] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:23:27.847 [DEBUG] [Thread-137356] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:23:27.847 [DEBUG] [Thread-137356] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:23:27.847 [DEBUG] [Thread-137356] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:23:27.847 [DEBUG] [Thread-137356] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:23:27.847 [DEBUG] [Thread-137356] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:23:27.847 [DEBUG] [Thread-137356] [transport.py] [_log()] client lang: <none>
2026-01-01T00:23:27.847 [DEBUG] [Thread-137356] [transport.py] [_log()] server lang: <none>
2026-01-01T00:23:27.847 [DEBUG] [Thread-137356] [transport.py] [_log()] kex follows: False
2026-01-01T00:23:27.847 [DEBUG] [Thread-137356] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:23:27.847 [DEBUG] [Thread-137356] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:23:27.847 [DEBUG] [Thread-137356] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:23:27.847 [DEBUG] [Thread-137356] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:23:27.847 [DEBUG] [Thread-137356] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:23:27.847 [DEBUG] [Thread-137356] [transport.py] [_log()] Compression: none
2026-01-01T00:23:27.848 [DEBUG] [Thread-137356] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:23:27.905 [DEBUG] [Thread-137356] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:23:27.906 [DEBUG] [Thread-137356] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:23:27.906 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T00:23:27.907 [DEBUG] [Thread-137356] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T00:23:27.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:23:27.964 [DEBUG] [Thread-137356] [transport.py] [_log()] userauth is OK
2026-01-01T00:23:27.964 [DEBUG] [Thread-137356] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:23:27.964 [DEBUG] [Thread-137356] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:23:27.965 [DEBUG] [Thread-137356] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T00:23:27.965 [DEBUG] [Thread-137356] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:23:27.990 [INFO] [Thread-137356] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:23:27.991 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T00:23:27.991 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:23:28.862 [DEBUG] [Thread-137356] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:23:28.862 [DEBUG] [Thread-137356] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:23:28.910 [DEBUG] [Thread-137356] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:23:28.910 [DEBUG] [Thread-137356] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:23:28.919 [DEBUG] [Thread-137356] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:23:28.928 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:23: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')
2026-01-01T00:23:28.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T00:23:28.947 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:23:28.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:23:28.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:23:28.959 [DEBUG] [Thread-137356] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:23:37.380 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:23:37.381 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:23:38.104 [DEBUG] [Thread-137358 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:23:53.158 [DEBUG] [Thread-137359 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:23:56.084 [DEBUG] [Thread-137360 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:23:58.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T00:23:58.978 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T00:23:58.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T00:23:59.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 0, 23, 43), 3.37, 80.16, 0.0, 18.02, 14.45, 0, 1, 0, 2, 0, 0),)
2026-01-01T00:23:59.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 00:23:43
2026-01-01T00:23:59.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T00:23:59.946 [DEBUG] [Thread-137361] [transport.py] [_log()] starting thread (client mode): 0xb955a710
2026-01-01T00:23:59.946 [DEBUG] [Thread-137361] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:23:59.966 [DEBUG] [Thread-137361] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T00:23:59.966 [INFO] [Thread-137361] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T00:23:59.970 [DEBUG] [Thread-137361] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:23:59.970 [DEBUG] [Thread-137361] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T00:23:59.970 [DEBUG] [Thread-137361] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:23:59.970 [DEBUG] [Thread-137361] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:23:59.970 [DEBUG] [Thread-137361] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:23:59.970 [DEBUG] [Thread-137361] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:23:59.970 [DEBUG] [Thread-137361] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:23:59.970 [DEBUG] [Thread-137361] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:23:59.970 [DEBUG] [Thread-137361] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:23:59.970 [DEBUG] [Thread-137361] [transport.py] [_log()] client lang: <none>
2026-01-01T00:23:59.971 [DEBUG] [Thread-137361] [transport.py] [_log()] server lang: <none>
2026-01-01T00:23:59.971 [DEBUG] [Thread-137361] [transport.py] [_log()] kex follows: False
2026-01-01T00:23:59.971 [DEBUG] [Thread-137361] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:23:59.971 [DEBUG] [Thread-137361] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:23:59.971 [DEBUG] [Thread-137361] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:23:59.971 [DEBUG] [Thread-137361] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:23:59.971 [DEBUG] [Thread-137361] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:23:59.971 [DEBUG] [Thread-137361] [transport.py] [_log()] Compression: none
2026-01-01T00:23:59.971 [DEBUG] [Thread-137361] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:23:59.989 [DEBUG] [Thread-137361] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:23:59.990 [DEBUG] [Thread-137361] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:23:59.990 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T00:23:59.992 [DEBUG] [Thread-137361] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T00:23:59.992 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:23:59.994 [DEBUG] [Thread-137361] [transport.py] [_log()] userauth is OK
2026-01-01T00:23:59.994 [DEBUG] [Thread-137361] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:23:59.994 [DEBUG] [Thread-137361] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:23:59.994 [DEBUG] [Thread-137361] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T00:23:59.995 [DEBUG] [Thread-137361] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:24:00.029 [INFO] [Thread-137361] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:24:00.030 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:24:00.671 [DEBUG] [Thread-137361] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:24:00.671 [DEBUG] [Thread-137361] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:24:00.672 [DEBUG] [Thread-137361] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T00:24:00.712 [DEBUG] [Thread-137361] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:24:00.712 [DEBUG] [Thread-137361] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:24:00.716 [DEBUG] [Thread-137361] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:24:00.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:24:00.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T00:24:00.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T00:24:00.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T00:24:00.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:24:00.740 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T00:24:00.740 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:24:00.740 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:24:00.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T00:24:00.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.932773 -999.00  +14.60  15.16     82  +11.60 1 2 1 2 1     0    0 2.67 -14.67 ..... 14.7 15.2 206.0 19.1 15.8 -12.0 15.6 -11.4 15.5 -11.1 15.8 -11.6
2026-01-01T00:24:00.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T00:24:00.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T00:24:00.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.932773
2026-01-01T00:24:00.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T00:24:00.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T00:24:00.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T00:24:00.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T00:24:00.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T00:24:00.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T00:23:43', tmtdew=3.37, humidity=80.16, cloud=0.0, wind=18.02, temperature=14.45, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T22:23:11.587', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T00:24:00.743 [DEBUG] [Thread-137361] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:24:00.825 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T00:24:00.838 [DEBUG] [Thread-137364] [transport.py] [_log()] starting thread (client mode): 0xb17979a0
2026-01-01T00:24:00.838 [DEBUG] [Thread-137364] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:24:00.854 [DEBUG] [Thread-137364] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T00:24:00.854 [INFO] [Thread-137364] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T00:24:00.862 [DEBUG] [Thread-137364] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:24:00.862 [DEBUG] [Thread-137364] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T00:24:00.862 [DEBUG] [Thread-137364] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:24:00.862 [DEBUG] [Thread-137364] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:24:00.862 [DEBUG] [Thread-137364] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:24:00.862 [DEBUG] [Thread-137364] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:24:00.862 [DEBUG] [Thread-137364] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:24:00.862 [DEBUG] [Thread-137364] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:24:00.862 [DEBUG] [Thread-137364] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:24:00.862 [DEBUG] [Thread-137364] [transport.py] [_log()] client lang: <none>
2026-01-01T00:24:00.862 [DEBUG] [Thread-137364] [transport.py] [_log()] server lang: <none>
2026-01-01T00:24:00.862 [DEBUG] [Thread-137364] [transport.py] [_log()] kex follows: False
2026-01-01T00:24:00.862 [DEBUG] [Thread-137364] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:24:00.862 [DEBUG] [Thread-137364] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:24:00.862 [DEBUG] [Thread-137364] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:24:00.862 [DEBUG] [Thread-137364] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:24:00.862 [DEBUG] [Thread-137364] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:24:00.862 [DEBUG] [Thread-137364] [transport.py] [_log()] Compression: none
2026-01-01T00:24:00.863 [DEBUG] [Thread-137364] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:24:00.920 [DEBUG] [Thread-137364] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:24:00.921 [DEBUG] [Thread-137364] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:24:00.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T00:24:00.922 [DEBUG] [Thread-137364] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T00:24:00.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:24:00.976 [DEBUG] [Thread-137364] [transport.py] [_log()] userauth is OK
2026-01-01T00:24:00.977 [DEBUG] [Thread-137364] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:24:00.977 [DEBUG] [Thread-137364] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:24:00.977 [DEBUG] [Thread-137364] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T00:24:00.977 [DEBUG] [Thread-137364] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:24:01.001 [INFO] [Thread-137364] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:24:01.002 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T00:24:01.002 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:24:01.886 [DEBUG] [Thread-137364] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:24:01.886 [DEBUG] [Thread-137364] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:24:01.935 [DEBUG] [Thread-137364] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:24:01.935 [DEBUG] [Thread-137364] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:24:01.944 [DEBUG] [Thread-137364] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:24:01.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:24:01.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T00:24:01.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T00:24:01.972 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:24:01.973 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:24:01.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:24:01.981 [DEBUG] [Thread-137364] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:24:08.192 [DEBUG] [Thread-137366 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:24:23.241 [DEBUG] [Thread-137367 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:24:32.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T00:24:32.004 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T00:24:32.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T00:24:32.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 0, 24, 15), 3.35, 80.23, 0.0, 20.84, 14.45, 0, 1, 0, 2, 0, 0),)
2026-01-01T00:24:32.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 00:24:15
2026-01-01T00:24:32.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T00:24:33.031 [DEBUG] [Thread-137368] [transport.py] [_log()] starting thread (client mode): 0xb6bbdc90
2026-01-01T00:24:33.031 [DEBUG] [Thread-137368] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:24:33.043 [DEBUG] [Thread-137368] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T00:24:33.043 [INFO] [Thread-137368] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T00:24:33.046 [DEBUG] [Thread-137368] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:24:33.046 [DEBUG] [Thread-137368] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T00:24:33.046 [DEBUG] [Thread-137368] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:24:33.046 [DEBUG] [Thread-137368] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:24:33.046 [DEBUG] [Thread-137368] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:24:33.046 [DEBUG] [Thread-137368] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:24:33.046 [DEBUG] [Thread-137368] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:24:33.046 [DEBUG] [Thread-137368] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:24:33.046 [DEBUG] [Thread-137368] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:24:33.046 [DEBUG] [Thread-137368] [transport.py] [_log()] client lang: <none>
2026-01-01T00:24:33.046 [DEBUG] [Thread-137368] [transport.py] [_log()] server lang: <none>
2026-01-01T00:24:33.046 [DEBUG] [Thread-137368] [transport.py] [_log()] kex follows: False
2026-01-01T00:24:33.046 [DEBUG] [Thread-137368] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:24:33.046 [DEBUG] [Thread-137368] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:24:33.046 [DEBUG] [Thread-137368] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:24:33.046 [DEBUG] [Thread-137368] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:24:33.046 [DEBUG] [Thread-137368] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:24:33.046 [DEBUG] [Thread-137368] [transport.py] [_log()] Compression: none
2026-01-01T00:24:33.046 [DEBUG] [Thread-137368] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:24:33.056 [DEBUG] [Thread-137368] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:24:33.057 [DEBUG] [Thread-137368] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:24:33.057 [DEBUG] [Thread-137368] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T00:24:33.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T00:24:33.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:24:33.061 [DEBUG] [Thread-137368] [transport.py] [_log()] userauth is OK
2026-01-01T00:24:33.061 [DEBUG] [Thread-137368] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:24:33.061 [DEBUG] [Thread-137368] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:24:33.061 [DEBUG] [Thread-137368] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T00:24:33.061 [DEBUG] [Thread-137368] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:24:33.074 [INFO] [Thread-137368] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:24:33.074 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:24:33.651 [DEBUG] [Thread-137368] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:24:33.651 [DEBUG] [Thread-137368] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:24:33.651 [DEBUG] [Thread-137368] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T00:24:33.691 [DEBUG] [Thread-137368] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:24:33.692 [DEBUG] [Thread-137368] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:24:33.694 [DEBUG] [Thread-137368] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:24:33.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:24:33.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T00:24:33.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T00:24:33.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T00:24:33.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:24:33.709 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T00:24:33.709 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:24:33.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:24:33.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T00:24:33.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.933120 -999.00  +14.60  12.38     82  +11.60 1 2 1 2 1     0    0 2.65 -15.02 ..... 9.2 12.4 211.8 16.8 15.8 -11.8 15.7 -11.6 15.5 -11.1 15.8 -11.7
2026-01-01T00:24:33.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T00:24:33.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T00:24:33.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.933120
2026-01-01T00:24:33.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T00:24:33.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T00:24:33.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T00:24:33.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T00:24:33.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T00:24:33.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T00:24:15', tmtdew=3.35, humidity=80.23, cloud=0.0, wind=20.84, temperature=14.45, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T22:23:41.568', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T00:24:33.711 [DEBUG] [Thread-137368] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:24:33.785 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T00:24:33.796 [DEBUG] [Thread-137371] [transport.py] [_log()] starting thread (client mode): 0xb95784c0
2026-01-01T00:24:33.796 [DEBUG] [Thread-137371] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:24:33.812 [DEBUG] [Thread-137371] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T00:24:33.813 [INFO] [Thread-137371] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T00:24:33.820 [DEBUG] [Thread-137371] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:24:33.820 [DEBUG] [Thread-137371] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T00:24:33.820 [DEBUG] [Thread-137371] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:24:33.820 [DEBUG] [Thread-137371] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:24:33.820 [DEBUG] [Thread-137371] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:24:33.820 [DEBUG] [Thread-137371] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:24:33.820 [DEBUG] [Thread-137371] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:24:33.820 [DEBUG] [Thread-137371] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:24:33.820 [DEBUG] [Thread-137371] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:24:33.820 [DEBUG] [Thread-137371] [transport.py] [_log()] client lang: <none>
2026-01-01T00:24:33.820 [DEBUG] [Thread-137371] [transport.py] [_log()] server lang: <none>
2026-01-01T00:24:33.820 [DEBUG] [Thread-137371] [transport.py] [_log()] kex follows: False
2026-01-01T00:24:33.820 [DEBUG] [Thread-137371] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:24:33.820 [DEBUG] [Thread-137371] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:24:33.820 [DEBUG] [Thread-137371] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:24:33.820 [DEBUG] [Thread-137371] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:24:33.820 [DEBUG] [Thread-137371] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:24:33.820 [DEBUG] [Thread-137371] [transport.py] [_log()] Compression: none
2026-01-01T00:24:33.821 [DEBUG] [Thread-137371] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:24:33.880 [DEBUG] [Thread-137371] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:24:33.880 [DEBUG] [Thread-137371] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:24:33.880 [DEBUG] [Thread-137371] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T00:24:33.880 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T00:24:33.880 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:24:33.937 [DEBUG] [Thread-137371] [transport.py] [_log()] userauth is OK
2026-01-01T00:24:33.937 [DEBUG] [Thread-137371] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:24:33.937 [DEBUG] [Thread-137371] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:24:33.937 [DEBUG] [Thread-137371] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T00:24:33.937 [DEBUG] [Thread-137371] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:24:33.954 [INFO] [Thread-137371] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:24:33.955 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T00:24:33.955 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:24:34.823 [DEBUG] [Thread-137371] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:24:34.824 [DEBUG] [Thread-137371] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:24:34.871 [DEBUG] [Thread-137371] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:24:34.871 [DEBUG] [Thread-137371] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:24:34.881 [DEBUG] [Thread-137371] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:24:34.890 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:24:34.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T00:24:34.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T00:24:34.909 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:24:34.909 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:24:34.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:24:34.918 [DEBUG] [Thread-137371] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:24:37.589 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:24:37.590 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:24:38.275 [DEBUG] [Thread-137373 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:24:53.331 [DEBUG] [Thread-137374 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:24:56.159 [DEBUG] [Thread-137375 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:25:04.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T00:25:04.925 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T00:25:04.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T00:25:05.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 0, 24, 47), 3.36, 80.2, 0.0, 18.74, 14.5, 0, 1, 0, 2, 0, 0),)
2026-01-01T00:25:05.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 00:24:47
2026-01-01T00:25:05.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T00:25:05.893 [DEBUG] [Thread-137376] [transport.py] [_log()] starting thread (client mode): 0xb6bbded0
2026-01-01T00:25:05.893 [DEBUG] [Thread-137376] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:25:05.914 [DEBUG] [Thread-137376] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T00:25:05.914 [INFO] [Thread-137376] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T00:25:05.917 [DEBUG] [Thread-137376] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:25:05.917 [DEBUG] [Thread-137376] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T00:25:05.917 [DEBUG] [Thread-137376] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:25:05.917 [DEBUG] [Thread-137376] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:25:05.917 [DEBUG] [Thread-137376] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:25:05.917 [DEBUG] [Thread-137376] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:25:05.917 [DEBUG] [Thread-137376] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:25:05.917 [DEBUG] [Thread-137376] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:25:05.917 [DEBUG] [Thread-137376] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:25:05.917 [DEBUG] [Thread-137376] [transport.py] [_log()] client lang: <none>
2026-01-01T00:25:05.917 [DEBUG] [Thread-137376] [transport.py] [_log()] server lang: <none>
2026-01-01T00:25:05.917 [DEBUG] [Thread-137376] [transport.py] [_log()] kex follows: False
2026-01-01T00:25:05.917 [DEBUG] [Thread-137376] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:25:05.917 [DEBUG] [Thread-137376] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:25:05.917 [DEBUG] [Thread-137376] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:25:05.917 [DEBUG] [Thread-137376] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:25:05.917 [DEBUG] [Thread-137376] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:25:05.917 [DEBUG] [Thread-137376] [transport.py] [_log()] Compression: none
2026-01-01T00:25:05.917 [DEBUG] [Thread-137376] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:25:05.933 [DEBUG] [Thread-137376] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:25:05.934 [DEBUG] [Thread-137376] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:25:05.934 [DEBUG] [Thread-137376] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T00:25:05.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T00:25:05.935 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:25:05.936 [DEBUG] [Thread-137376] [transport.py] [_log()] userauth is OK
2026-01-01T00:25:05.936 [DEBUG] [Thread-137376] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:25:05.937 [DEBUG] [Thread-137376] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:25:05.937 [DEBUG] [Thread-137376] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T00:25:05.937 [DEBUG] [Thread-137376] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:25:05.959 [INFO] [Thread-137376] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:25:05.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:25:08.366 [DEBUG] [Thread-137378 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:25:08.856 [DEBUG] [Thread-137376] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:25:08.856 [DEBUG] [Thread-137376] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:25:08.857 [DEBUG] [Thread-137376] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T00:25:08.897 [DEBUG] [Thread-137376] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:25:08.897 [DEBUG] [Thread-137376] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:25:08.899 [DEBUG] [Thread-137376] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:25:08.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:25:08.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T00:25:08.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T00:25:08.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T00:25:08.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:25:08.926 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T00:25:08.926 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:25:08.926 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:25:08.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T00:25:08.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.933467 -999.00  +14.70   7.60     82  +11.60 1 3 1 2 1     0    0 2.74 -14.15 ----- 11.8 7.6 189.2 12.8 15.8 -11.7 15.7 -11.3 15.5 -11.1 15.8 -11.7
2026-01-01T00:25:08.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T00:25:08.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T00:25:08.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.933467
2026-01-01T00:25:08.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T00:25:08.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T00:25:08.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T00:25:08.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T00:25:08.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-01-01T00:25:08.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T00:24:47', tmtdew=3.36, humidity=80.2, cloud=0.0, wind=18.74, temperature=14.5, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T22:24:11.549', atlas_cloud=3, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T00:25:08.928 [DEBUG] [Thread-137376] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:25:09.002 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T00:25:09.014 [DEBUG] [Thread-137380] [transport.py] [_log()] starting thread (client mode): 0xb6bbfd30
2026-01-01T00:25:09.014 [DEBUG] [Thread-137380] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:25:09.029 [DEBUG] [Thread-137380] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T00:25:09.029 [INFO] [Thread-137380] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T00:25:09.037 [DEBUG] [Thread-137380] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:25:09.037 [DEBUG] [Thread-137380] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T00:25:09.037 [DEBUG] [Thread-137380] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:25:09.037 [DEBUG] [Thread-137380] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:25:09.037 [DEBUG] [Thread-137380] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:25:09.037 [DEBUG] [Thread-137380] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:25:09.037 [DEBUG] [Thread-137380] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:25:09.037 [DEBUG] [Thread-137380] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:25:09.037 [DEBUG] [Thread-137380] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:25:09.037 [DEBUG] [Thread-137380] [transport.py] [_log()] client lang: <none>
2026-01-01T00:25:09.037 [DEBUG] [Thread-137380] [transport.py] [_log()] server lang: <none>
2026-01-01T00:25:09.037 [DEBUG] [Thread-137380] [transport.py] [_log()] kex follows: False
2026-01-01T00:25:09.037 [DEBUG] [Thread-137380] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:25:09.037 [DEBUG] [Thread-137380] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:25:09.037 [DEBUG] [Thread-137380] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:25:09.037 [DEBUG] [Thread-137380] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:25:09.037 [DEBUG] [Thread-137380] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:25:09.037 [DEBUG] [Thread-137380] [transport.py] [_log()] Compression: none
2026-01-01T00:25:09.037 [DEBUG] [Thread-137380] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:25:09.099 [DEBUG] [Thread-137380] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:25:09.099 [DEBUG] [Thread-137380] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:25:09.099 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T00:25:09.099 [DEBUG] [Thread-137380] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T00:25:09.099 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:25:09.155 [DEBUG] [Thread-137380] [transport.py] [_log()] userauth is OK
2026-01-01T00:25:09.155 [DEBUG] [Thread-137380] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:25:09.156 [DEBUG] [Thread-137380] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:25:09.156 [DEBUG] [Thread-137380] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T00:25:09.156 [DEBUG] [Thread-137380] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:25:09.170 [INFO] [Thread-137380] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:25:09.170 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T00:25:09.170 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:25:10.031 [DEBUG] [Thread-137380] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:25:10.031 [DEBUG] [Thread-137380] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:25:10.078 [DEBUG] [Thread-137380] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:25:10.078 [DEBUG] [Thread-137380] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:25:10.086 [DEBUG] [Thread-137380] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:25:10.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:25: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')
2026-01-01T00:25:10.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T00:25:10.110 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:25:10.110 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:25:10.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:25:10.118 [DEBUG] [Thread-137380] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:25:23.396 [DEBUG] [Thread-137382 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:25:37.805 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:25:37.806 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:25:38.452 [DEBUG] [Thread-137383 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:25:40.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T00:25:40.141 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T00:25:40.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T00:25:40.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 0, 25, 19), 3.36, 80.16, 0.0, 19.67, 14.42, 0, 1, 0, 2, 0, 0),)
2026-01-01T00:25:40.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 00:25:19
2026-01-01T00:25:40.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T00:25:41.124 [DEBUG] [Thread-137384] [transport.py] [_log()] starting thread (client mode): 0xb6b61210
2026-01-01T00:25:41.125 [DEBUG] [Thread-137384] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:25:41.146 [DEBUG] [Thread-137384] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T00:25:41.146 [INFO] [Thread-137384] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T00:25:41.147 [DEBUG] [Thread-137384] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:25:41.147 [DEBUG] [Thread-137384] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T00:25:41.148 [DEBUG] [Thread-137384] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:25:41.148 [DEBUG] [Thread-137384] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:25:41.148 [DEBUG] [Thread-137384] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:25:41.148 [DEBUG] [Thread-137384] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:25:41.148 [DEBUG] [Thread-137384] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:25:41.148 [DEBUG] [Thread-137384] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:25:41.148 [DEBUG] [Thread-137384] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:25:41.148 [DEBUG] [Thread-137384] [transport.py] [_log()] client lang: <none>
2026-01-01T00:25:41.148 [DEBUG] [Thread-137384] [transport.py] [_log()] server lang: <none>
2026-01-01T00:25:41.148 [DEBUG] [Thread-137384] [transport.py] [_log()] kex follows: False
2026-01-01T00:25:41.148 [DEBUG] [Thread-137384] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:25:41.148 [DEBUG] [Thread-137384] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:25:41.148 [DEBUG] [Thread-137384] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:25:41.148 [DEBUG] [Thread-137384] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:25:41.148 [DEBUG] [Thread-137384] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:25:41.148 [DEBUG] [Thread-137384] [transport.py] [_log()] Compression: none
2026-01-01T00:25:41.148 [DEBUG] [Thread-137384] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:25:41.160 [DEBUG] [Thread-137384] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:25:41.161 [DEBUG] [Thread-137384] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:25:41.162 [DEBUG] [Thread-137384] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T00:25:41.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T00:25:41.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:25:41.164 [DEBUG] [Thread-137384] [transport.py] [_log()] userauth is OK
2026-01-01T00:25:41.164 [DEBUG] [Thread-137384] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:25:41.164 [DEBUG] [Thread-137384] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:25:41.164 [DEBUG] [Thread-137384] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T00:25:41.164 [DEBUG] [Thread-137384] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:25:41.184 [INFO] [Thread-137384] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:25:41.185 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:25:41.851 [DEBUG] [Thread-137384] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:25:41.851 [DEBUG] [Thread-137384] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:25:41.851 [DEBUG] [Thread-137384] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T00:25:41.892 [DEBUG] [Thread-137384] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:25:41.893 [DEBUG] [Thread-137384] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:25:41.896 [DEBUG] [Thread-137384] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:25:41.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:25:41.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T00:25:41.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T00:25:41.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T00:25:41.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:25:41.921 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T00:25:41.921 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:25:41.921 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:25:41.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T00:25:41.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.934162 -999.00  +14.70  11.90     81  +11.60 1 2 1 2 1     0    0 2.77 -13.94 ..... 8.7 11.9 201.6 18.2 15.8 -12.0 15.7 -11.6 15.5 -11.2 15.8 -11.9
2026-01-01T00:25:41.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T00:25:41.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T00:25:41.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.934162
2026-01-01T00:25:41.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T00:25:41.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T00:25:41.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T00:25:41.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T00:25:41.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T00:25:41.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T00:25:19', tmtdew=3.36, humidity=80.16, cloud=0.0, wind=19.67, temperature=14.42, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T22:25:11.597', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T00:25:41.924 [DEBUG] [Thread-137384] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:25:42.011 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T00:25:42.022 [DEBUG] [Thread-137387] [transport.py] [_log()] starting thread (client mode): 0xb6b621a0
2026-01-01T00:25:42.023 [DEBUG] [Thread-137387] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:25:42.038 [DEBUG] [Thread-137387] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T00:25:42.038 [INFO] [Thread-137387] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T00:25:42.046 [DEBUG] [Thread-137387] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:25:42.046 [DEBUG] [Thread-137387] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T00:25:42.046 [DEBUG] [Thread-137387] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:25:42.047 [DEBUG] [Thread-137387] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:25:42.047 [DEBUG] [Thread-137387] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:25:42.047 [DEBUG] [Thread-137387] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:25:42.047 [DEBUG] [Thread-137387] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:25:42.047 [DEBUG] [Thread-137387] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:25:42.047 [DEBUG] [Thread-137387] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:25:42.047 [DEBUG] [Thread-137387] [transport.py] [_log()] client lang: <none>
2026-01-01T00:25:42.047 [DEBUG] [Thread-137387] [transport.py] [_log()] server lang: <none>
2026-01-01T00:25:42.048 [DEBUG] [Thread-137387] [transport.py] [_log()] kex follows: False
2026-01-01T00:25:42.048 [DEBUG] [Thread-137387] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:25:42.048 [DEBUG] [Thread-137387] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:25:42.048 [DEBUG] [Thread-137387] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:25:42.048 [DEBUG] [Thread-137387] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:25:42.048 [DEBUG] [Thread-137387] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:25:42.048 [DEBUG] [Thread-137387] [transport.py] [_log()] Compression: none
2026-01-01T00:25:42.048 [DEBUG] [Thread-137387] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:25:42.104 [DEBUG] [Thread-137387] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:25:42.104 [DEBUG] [Thread-137387] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:25:42.104 [DEBUG] [Thread-137387] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T00:25:42.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T00:25:42.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:25:42.160 [DEBUG] [Thread-137387] [transport.py] [_log()] userauth is OK
2026-01-01T00:25:42.161 [DEBUG] [Thread-137387] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:25:42.161 [DEBUG] [Thread-137387] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:25:42.161 [DEBUG] [Thread-137387] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T00:25:42.161 [DEBUG] [Thread-137387] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:25:42.182 [INFO] [Thread-137387] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:25:42.182 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T00:25:42.183 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:25:43.057 [DEBUG] [Thread-137387] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:25:43.058 [DEBUG] [Thread-137387] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:25:43.106 [DEBUG] [Thread-137387] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:25:43.106 [DEBUG] [Thread-137387] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:25:43.116 [DEBUG] [Thread-137387] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:25:43.125 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:25:43.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T00:25:43.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T00:25:43.144 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:25:43.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:25:43.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:25:43.153 [DEBUG] [Thread-137387] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:25:53.480 [DEBUG] [Thread-137389 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:25:56.225 [DEBUG] [Thread-137390 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:26:08.529 [DEBUG] [Thread-137391 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:26:13.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T00:26:13.175 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T00:26:13.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T00:26:13.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 0, 25, 51), 3.37, 80.16, 0.0, 18.09, 14.39, 0, 1, 0, 2, 0, 0),)
2026-01-01T00:26:13.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 00:25:51
2026-01-01T00:26:14.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T00:26:14.166 [DEBUG] [Thread-137392] [transport.py] [_log()] starting thread (client mode): 0xb6b622f0
2026-01-01T00:26:14.167 [DEBUG] [Thread-137392] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:26:14.187 [DEBUG] [Thread-137392] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T00:26:14.187 [INFO] [Thread-137392] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T00:26:14.190 [DEBUG] [Thread-137392] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:26:14.190 [DEBUG] [Thread-137392] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T00:26:14.190 [DEBUG] [Thread-137392] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:26:14.190 [DEBUG] [Thread-137392] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:26:14.190 [DEBUG] [Thread-137392] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:26:14.190 [DEBUG] [Thread-137392] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:26:14.190 [DEBUG] [Thread-137392] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:26:14.190 [DEBUG] [Thread-137392] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:26:14.190 [DEBUG] [Thread-137392] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:26:14.190 [DEBUG] [Thread-137392] [transport.py] [_log()] client lang: <none>
2026-01-01T00:26:14.190 [DEBUG] [Thread-137392] [transport.py] [_log()] server lang: <none>
2026-01-01T00:26:14.190 [DEBUG] [Thread-137392] [transport.py] [_log()] kex follows: False
2026-01-01T00:26:14.190 [DEBUG] [Thread-137392] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:26:14.191 [DEBUG] [Thread-137392] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:26:14.191 [DEBUG] [Thread-137392] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:26:14.191 [DEBUG] [Thread-137392] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:26:14.191 [DEBUG] [Thread-137392] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:26:14.191 [DEBUG] [Thread-137392] [transport.py] [_log()] Compression: none
2026-01-01T00:26:14.191 [DEBUG] [Thread-137392] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:26:14.204 [DEBUG] [Thread-137392] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:26:14.205 [DEBUG] [Thread-137392] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:26:14.205 [DEBUG] [Thread-137392] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T00:26:14.205 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T00:26:14.206 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:26:14.208 [DEBUG] [Thread-137392] [transport.py] [_log()] userauth is OK
2026-01-01T00:26:14.208 [DEBUG] [Thread-137392] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:26:14.208 [DEBUG] [Thread-137392] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:26:14.208 [DEBUG] [Thread-137392] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T00:26:14.209 [DEBUG] [Thread-137392] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:26:14.230 [INFO] [Thread-137392] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:26:14.231 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:26:14.889 [DEBUG] [Thread-137392] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:26:14.889 [DEBUG] [Thread-137392] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:26:14.889 [DEBUG] [Thread-137392] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T00:26:14.930 [DEBUG] [Thread-137392] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:26:14.930 [DEBUG] [Thread-137392] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:26:14.934 [DEBUG] [Thread-137392] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:26:14.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:26:14.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T00:26:14.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T00:26:14.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T00:26:14.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:26:14.961 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T00:26:14.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:26:14.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:26:14.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T00:26:14.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.934509 -999.00  +14.70  12.59     82  +11.60 1 3 1 2 1     0    0 2.69 -13.90 ----- 15.7 12.6 196.4 22.4 15.9 -12.2 15.7 -12.0 -999.0 -999.0 15.8 -12.1
2026-01-01T00:26:14.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T00:26:14.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T00:26:14.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.934509
2026-01-01T00:26:14.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T00:26:14.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T00:26:14.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T00:26:14.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T00:26:14.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-01-01T00:26:14.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T00:25:51', tmtdew=3.37, humidity=80.16, cloud=0.0, wind=18.09, temperature=14.39, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T22:25:41.578', atlas_cloud=3, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T00:26:14.965 [DEBUG] [Thread-137392] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:26:15.047 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T00:26:15.064 [DEBUG] [Thread-137395] [transport.py] [_log()] starting thread (client mode): 0xbbfcd1e0
2026-01-01T00:26:15.064 [DEBUG] [Thread-137395] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:26:15.080 [DEBUG] [Thread-137395] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T00:26:15.081 [INFO] [Thread-137395] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T00:26:15.090 [DEBUG] [Thread-137395] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:26:15.090 [DEBUG] [Thread-137395] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T00:26:15.090 [DEBUG] [Thread-137395] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:26:15.090 [DEBUG] [Thread-137395] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:26:15.090 [DEBUG] [Thread-137395] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:26:15.090 [DEBUG] [Thread-137395] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:26:15.090 [DEBUG] [Thread-137395] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:26:15.090 [DEBUG] [Thread-137395] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:26:15.090 [DEBUG] [Thread-137395] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:26:15.090 [DEBUG] [Thread-137395] [transport.py] [_log()] client lang: <none>
2026-01-01T00:26:15.090 [DEBUG] [Thread-137395] [transport.py] [_log()] server lang: <none>
2026-01-01T00:26:15.091 [DEBUG] [Thread-137395] [transport.py] [_log()] kex follows: False
2026-01-01T00:26:15.091 [DEBUG] [Thread-137395] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:26:15.091 [DEBUG] [Thread-137395] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:26:15.091 [DEBUG] [Thread-137395] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:26:15.091 [DEBUG] [Thread-137395] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:26:15.091 [DEBUG] [Thread-137395] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:26:15.091 [DEBUG] [Thread-137395] [transport.py] [_log()] Compression: none
2026-01-01T00:26:15.091 [DEBUG] [Thread-137395] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:26:15.155 [DEBUG] [Thread-137395] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:26:15.156 [DEBUG] [Thread-137395] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:26:15.156 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T00:26:15.157 [DEBUG] [Thread-137395] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T00:26:15.158 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:26:15.218 [DEBUG] [Thread-137395] [transport.py] [_log()] userauth is OK
2026-01-01T00:26:15.218 [DEBUG] [Thread-137395] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:26:15.219 [DEBUG] [Thread-137395] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:26:15.219 [DEBUG] [Thread-137395] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T00:26:15.219 [DEBUG] [Thread-137395] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:26:15.241 [INFO] [Thread-137395] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:26:15.242 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T00:26:15.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:26:16.093 [DEBUG] [Thread-137395] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:26:16.093 [DEBUG] [Thread-137395] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:26:16.144 [DEBUG] [Thread-137395] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:26:16.144 [DEBUG] [Thread-137395] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:26:16.157 [DEBUG] [Thread-137395] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:26:16.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:26:16.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T00:26: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
2026-01-01T00:26:16.193 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:26:16.193 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:26:16.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:26:16.203 [DEBUG] [Thread-137395] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:26:23.566 [DEBUG] [Thread-137397 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:26:38.013 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:26:38.014 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:26:38.611 [DEBUG] [Thread-137398 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:26:46.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T00:26:46.210 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T00:26:46.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T00:26:46.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 0, 26, 23), 3.36, 80.21, 0.0, 18.14, 14.39, 0, 1, 0, 2, 0, 0),)
2026-01-01T00:26:46.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 00:26:23
2026-01-01T00:26:47.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T00:26:47.182 [DEBUG] [Thread-137399] [transport.py] [_log()] starting thread (client mode): 0xb9579540
2026-01-01T00:26:47.182 [DEBUG] [Thread-137399] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:26:47.201 [DEBUG] [Thread-137399] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T00:26:47.202 [INFO] [Thread-137399] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T00:26:47.204 [DEBUG] [Thread-137399] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:26:47.205 [DEBUG] [Thread-137399] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T00:26:47.205 [DEBUG] [Thread-137399] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:26:47.205 [DEBUG] [Thread-137399] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:26:47.205 [DEBUG] [Thread-137399] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:26:47.205 [DEBUG] [Thread-137399] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:26:47.205 [DEBUG] [Thread-137399] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:26:47.205 [DEBUG] [Thread-137399] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:26:47.205 [DEBUG] [Thread-137399] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:26:47.205 [DEBUG] [Thread-137399] [transport.py] [_log()] client lang: <none>
2026-01-01T00:26:47.205 [DEBUG] [Thread-137399] [transport.py] [_log()] server lang: <none>
2026-01-01T00:26:47.205 [DEBUG] [Thread-137399] [transport.py] [_log()] kex follows: False
2026-01-01T00:26:47.205 [DEBUG] [Thread-137399] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:26:47.205 [DEBUG] [Thread-137399] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:26:47.205 [DEBUG] [Thread-137399] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:26:47.206 [DEBUG] [Thread-137399] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:26:47.206 [DEBUG] [Thread-137399] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:26:47.206 [DEBUG] [Thread-137399] [transport.py] [_log()] Compression: none
2026-01-01T00:26:47.206 [DEBUG] [Thread-137399] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:26:47.223 [DEBUG] [Thread-137399] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:26:47.224 [DEBUG] [Thread-137399] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:26:47.224 [DEBUG] [Thread-137399] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T00:26:47.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T00:26:47.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:26:47.226 [DEBUG] [Thread-137399] [transport.py] [_log()] userauth is OK
2026-01-01T00:26:47.226 [DEBUG] [Thread-137399] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:26:47.226 [DEBUG] [Thread-137399] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:26:47.226 [DEBUG] [Thread-137399] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T00:26:47.226 [DEBUG] [Thread-137399] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:26:47.251 [INFO] [Thread-137399] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:26:47.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:26:47.870 [DEBUG] [Thread-137399] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:26:47.870 [DEBUG] [Thread-137399] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:26:47.871 [DEBUG] [Thread-137399] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T00:26:47.911 [DEBUG] [Thread-137399] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:26:47.911 [DEBUG] [Thread-137399] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:26:47.915 [DEBUG] [Thread-137399] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:26:47.926 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:26:47.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T00:26:47.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T00:26:47.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T00:26:47.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:26:47.938 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T00:26:47.938 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:26:47.939 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:26:47.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T00:26:47.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.934856 -999.00  +14.60  11.75     82  +11.60 1 3 1 2 1     0    0 2.64 -14.78 ----- 11.2 11.8 195.0 18.2 15.8 -12.3 15.6 -12.2 15.5 -11.7 15.8 -12.5
2026-01-01T00:26:47.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T00:26:47.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T00:26:47.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.934856
2026-01-01T00:26:47.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T00:26:47.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T00:26:47.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T00:26:47.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T00:26:47.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-01-01T00:26:47.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T00:26:23', tmtdew=3.36, humidity=80.21, cloud=0.0, wind=18.14, temperature=14.39, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T22:26:11.558', atlas_cloud=3, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T00:26:47.941 [DEBUG] [Thread-137399] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:26:48.024 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T00:26:48.036 [DEBUG] [Thread-137402] [transport.py] [_log()] starting thread (client mode): 0xb6bbc820
2026-01-01T00:26:48.037 [DEBUG] [Thread-137402] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:26:48.054 [DEBUG] [Thread-137402] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T00:26:48.054 [INFO] [Thread-137402] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T00:26:48.061 [DEBUG] [Thread-137402] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:26:48.061 [DEBUG] [Thread-137402] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T00:26:48.061 [DEBUG] [Thread-137402] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:26:48.062 [DEBUG] [Thread-137402] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:26:48.062 [DEBUG] [Thread-137402] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:26:48.062 [DEBUG] [Thread-137402] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:26:48.062 [DEBUG] [Thread-137402] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:26:48.062 [DEBUG] [Thread-137402] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:26:48.062 [DEBUG] [Thread-137402] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:26:48.062 [DEBUG] [Thread-137402] [transport.py] [_log()] client lang: <none>
2026-01-01T00:26:48.062 [DEBUG] [Thread-137402] [transport.py] [_log()] server lang: <none>
2026-01-01T00:26:48.062 [DEBUG] [Thread-137402] [transport.py] [_log()] kex follows: False
2026-01-01T00:26:48.062 [DEBUG] [Thread-137402] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:26:48.062 [DEBUG] [Thread-137402] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:26:48.062 [DEBUG] [Thread-137402] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:26:48.062 [DEBUG] [Thread-137402] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:26:48.062 [DEBUG] [Thread-137402] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:26:48.062 [DEBUG] [Thread-137402] [transport.py] [_log()] Compression: none
2026-01-01T00:26:48.062 [DEBUG] [Thread-137402] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:26:48.120 [DEBUG] [Thread-137402] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:26:48.120 [DEBUG] [Thread-137402] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:26:48.121 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T00:26:48.122 [DEBUG] [Thread-137402] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T00:26:48.122 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:26:48.177 [DEBUG] [Thread-137402] [transport.py] [_log()] userauth is OK
2026-01-01T00:26:48.177 [DEBUG] [Thread-137402] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:26:48.177 [DEBUG] [Thread-137402] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:26:48.177 [DEBUG] [Thread-137402] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T00:26:48.177 [DEBUG] [Thread-137402] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:26:48.197 [INFO] [Thread-137402] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:26:48.197 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T00:26:48.198 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:26:49.138 [DEBUG] [Thread-137402] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:26:49.138 [DEBUG] [Thread-137402] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:26:49.186 [DEBUG] [Thread-137402] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:26:49.186 [DEBUG] [Thread-137402] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:26:49.195 [DEBUG] [Thread-137402] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:26:49.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:26:49.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T00:26:49.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T00:26:49.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:26:49.223 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:26:49.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:26:49.231 [DEBUG] [Thread-137402] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:26:53.648 [DEBUG] [Thread-137404 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:26:56.294 [DEBUG] [Thread-137405 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:27:08.695 [DEBUG] [Thread-137406 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:27:19.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T00:27:19.249 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T00:27:19.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T00:27:19.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 0, 26, 55), 3.36, 80.2, 0.0, 19.04, 14.45, 0, 1, 0, 2, 0, 0),)
2026-01-01T00:27:19.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 00:26:55
2026-01-01T00:27:20.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T00:27:20.238 [DEBUG] [Thread-137407] [transport.py] [_log()] starting thread (client mode): 0xb9579810
2026-01-01T00:27:20.238 [DEBUG] [Thread-137407] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:27:20.261 [DEBUG] [Thread-137407] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T00:27:20.261 [INFO] [Thread-137407] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T00:27:20.265 [DEBUG] [Thread-137407] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:27:20.265 [DEBUG] [Thread-137407] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T00:27:20.265 [DEBUG] [Thread-137407] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:27:20.265 [DEBUG] [Thread-137407] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:27:20.265 [DEBUG] [Thread-137407] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:27:20.265 [DEBUG] [Thread-137407] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:27:20.265 [DEBUG] [Thread-137407] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:27:20.265 [DEBUG] [Thread-137407] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:27:20.265 [DEBUG] [Thread-137407] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:27:20.265 [DEBUG] [Thread-137407] [transport.py] [_log()] client lang: <none>
2026-01-01T00:27:20.265 [DEBUG] [Thread-137407] [transport.py] [_log()] server lang: <none>
2026-01-01T00:27:20.266 [DEBUG] [Thread-137407] [transport.py] [_log()] kex follows: False
2026-01-01T00:27:20.266 [DEBUG] [Thread-137407] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:27:20.266 [DEBUG] [Thread-137407] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:27:20.266 [DEBUG] [Thread-137407] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:27:20.266 [DEBUG] [Thread-137407] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:27:20.266 [DEBUG] [Thread-137407] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:27:20.266 [DEBUG] [Thread-137407] [transport.py] [_log()] Compression: none
2026-01-01T00:27:20.266 [DEBUG] [Thread-137407] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:27:20.283 [DEBUG] [Thread-137407] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:27:20.284 [DEBUG] [Thread-137407] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:27:20.284 [DEBUG] [Thread-137407] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T00:27:20.285 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T00:27:20.285 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:27:20.287 [DEBUG] [Thread-137407] [transport.py] [_log()] userauth is OK
2026-01-01T00:27:20.288 [DEBUG] [Thread-137407] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:27:20.288 [DEBUG] [Thread-137407] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:27:20.288 [DEBUG] [Thread-137407] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T00:27:20.288 [DEBUG] [Thread-137407] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:27:20.327 [INFO] [Thread-137407] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:27:20.328 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:27:20.980 [DEBUG] [Thread-137407] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:27:20.980 [DEBUG] [Thread-137407] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:27:20.981 [DEBUG] [Thread-137407] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T00:27:21.021 [DEBUG] [Thread-137407] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:27:21.022 [DEBUG] [Thread-137407] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:27:21.026 [DEBUG] [Thread-137407] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:27:21.039 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:27:21.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T00:27:21.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T00:27:21.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T00:27:21.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:27:21.057 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T00:27:21.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:27:21.057 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:27:21.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T00:27:21.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.935204 -999.00  +14.60   9.40     82  +11.60 1 2 1 2 1     0    0 2.62 -13.25 ..... 10.9 9.4 200.8 15.8 15.8 -12.6 15.6 -12.2 15.4 -11.6 15.8 -12.4
2026-01-01T00:27:21.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T00:27:21.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T00:27:21.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.935204
2026-01-01T00:27:21.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T00:27:21.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T00:27:21.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T00:27:21.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T00:27:21.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T00:27:21.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T00:26:55', tmtdew=3.36, humidity=80.2, cloud=0.0, wind=19.04, temperature=14.45, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T22:26:41.626', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T00:27:21.060 [DEBUG] [Thread-137407] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:27:21.144 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T00:27:21.158 [DEBUG] [Thread-137410] [transport.py] [_log()] starting thread (client mode): 0xb6bbffa0
2026-01-01T00:27:21.159 [DEBUG] [Thread-137410] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:27:21.177 [DEBUG] [Thread-137410] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T00:27:21.177 [INFO] [Thread-137410] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T00:27:21.185 [DEBUG] [Thread-137410] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:27:21.186 [DEBUG] [Thread-137410] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T00:27:21.186 [DEBUG] [Thread-137410] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:27:21.186 [DEBUG] [Thread-137410] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:27:21.186 [DEBUG] [Thread-137410] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:27:21.186 [DEBUG] [Thread-137410] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:27:21.186 [DEBUG] [Thread-137410] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:27:21.186 [DEBUG] [Thread-137410] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:27:21.186 [DEBUG] [Thread-137410] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:27:21.186 [DEBUG] [Thread-137410] [transport.py] [_log()] client lang: <none>
2026-01-01T00:27:21.186 [DEBUG] [Thread-137410] [transport.py] [_log()] server lang: <none>
2026-01-01T00:27:21.186 [DEBUG] [Thread-137410] [transport.py] [_log()] kex follows: False
2026-01-01T00:27:21.186 [DEBUG] [Thread-137410] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:27:21.186 [DEBUG] [Thread-137410] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:27:21.187 [DEBUG] [Thread-137410] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:27:21.187 [DEBUG] [Thread-137410] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:27:21.187 [DEBUG] [Thread-137410] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:27:21.187 [DEBUG] [Thread-137410] [transport.py] [_log()] Compression: none
2026-01-01T00:27:21.187 [DEBUG] [Thread-137410] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:27:21.246 [DEBUG] [Thread-137410] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:27:21.246 [DEBUG] [Thread-137410] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:27:21.247 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T00:27:21.248 [DEBUG] [Thread-137410] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T00:27:21.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:27:21.305 [DEBUG] [Thread-137410] [transport.py] [_log()] userauth is OK
2026-01-01T00:27:21.305 [DEBUG] [Thread-137410] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:27:21.306 [DEBUG] [Thread-137410] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:27:21.306 [DEBUG] [Thread-137410] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T00:27:21.306 [DEBUG] [Thread-137410] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:27:21.324 [INFO] [Thread-137410] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:27:21.324 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T00:27:21.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:27:22.189 [DEBUG] [Thread-137410] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:27:22.189 [DEBUG] [Thread-137410] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:27:22.236 [DEBUG] [Thread-137410] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:27:22.236 [DEBUG] [Thread-137410] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:27:22.244 [DEBUG] [Thread-137410] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:27:22.252 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:27:22.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T00:27:22.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T00:27:22.269 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:27:22.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:27:22.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:27:22.277 [DEBUG] [Thread-137410] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:27:23.728 [DEBUG] [Thread-137412 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:27:38.225 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:27:38.226 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:27:38.783 [DEBUG] [Thread-137413 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:27:52.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T00:27:52.299 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T00:27:52.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T00:27:53.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 0, 27, 27), 3.36, 80.18, 0.0, 19.74, 14.44, 0, 1, 0, 2, 0, 0),)
2026-01-01T00:27:53.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 00:27:27
2026-01-01T00:27:53.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T00:27:53.297 [DEBUG] [Thread-137414] [transport.py] [_log()] starting thread (client mode): 0xb6bbcd60
2026-01-01T00:27:53.297 [DEBUG] [Thread-137414] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:27:53.318 [DEBUG] [Thread-137414] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T00:27:53.319 [INFO] [Thread-137414] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T00:27:53.321 [DEBUG] [Thread-137414] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:27:53.321 [DEBUG] [Thread-137414] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T00:27:53.321 [DEBUG] [Thread-137414] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:27:53.321 [DEBUG] [Thread-137414] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:27:53.321 [DEBUG] [Thread-137414] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:27:53.321 [DEBUG] [Thread-137414] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:27:53.322 [DEBUG] [Thread-137414] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:27:53.322 [DEBUG] [Thread-137414] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:27:53.322 [DEBUG] [Thread-137414] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:27:53.322 [DEBUG] [Thread-137414] [transport.py] [_log()] client lang: <none>
2026-01-01T00:27:53.322 [DEBUG] [Thread-137414] [transport.py] [_log()] server lang: <none>
2026-01-01T00:27:53.322 [DEBUG] [Thread-137414] [transport.py] [_log()] kex follows: False
2026-01-01T00:27:53.322 [DEBUG] [Thread-137414] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:27:53.322 [DEBUG] [Thread-137414] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:27:53.322 [DEBUG] [Thread-137414] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:27:53.322 [DEBUG] [Thread-137414] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:27:53.322 [DEBUG] [Thread-137414] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:27:53.322 [DEBUG] [Thread-137414] [transport.py] [_log()] Compression: none
2026-01-01T00:27:53.322 [DEBUG] [Thread-137414] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:27:53.341 [DEBUG] [Thread-137414] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:27:53.341 [DEBUG] [Thread-137414] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:27:53.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T00:27:53.342 [DEBUG] [Thread-137414] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T00:27:53.343 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:27:53.344 [DEBUG] [Thread-137414] [transport.py] [_log()] userauth is OK
2026-01-01T00:27:53.345 [DEBUG] [Thread-137414] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:27:53.345 [DEBUG] [Thread-137414] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:27:53.345 [DEBUG] [Thread-137414] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T00:27:53.345 [DEBUG] [Thread-137414] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:27:53.369 [INFO] [Thread-137414] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:27:53.370 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:27:53.820 [DEBUG] [Thread-137416 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:27:54.011 [DEBUG] [Thread-137414] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:27:54.012 [DEBUG] [Thread-137414] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:27:54.012 [DEBUG] [Thread-137414] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T00:27:54.053 [DEBUG] [Thread-137414] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:27:54.053 [DEBUG] [Thread-137414] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:27:54.056 [DEBUG] [Thread-137414] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:27:54.069 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:27:54.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T00:27:54.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T00:27:54.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T00:27:54.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:27:54.080 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T00:27:54.080 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:27:54.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:27:54.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T00:27:54.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.935551 -999.00  +14.60  14.99     82  +11.60 1 2 1 2 1     0    0 2.73 -13.08 ..... 14.3 15.0 201.8 18.7 15.8 -12.8 15.6 -12.3 15.4 -11.9 15.8 -12.8
2026-01-01T00:27:54.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T00:27:54.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T00:27:54.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.935551
2026-01-01T00:27:54.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T00:27:54.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T00:27:54.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T00:27:54.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T00:27:54.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T00:27:54.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T00:27:27', tmtdew=3.36, humidity=80.18, cloud=0.0, wind=19.74, temperature=14.44, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T22:27:11.606', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T00:27:54.082 [DEBUG] [Thread-137414] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:27:54.165 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T00:27:54.178 [DEBUG] [Thread-137418] [transport.py] [_log()] starting thread (client mode): 0xb17947f0
2026-01-01T00:27:54.179 [DEBUG] [Thread-137418] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:27:54.194 [DEBUG] [Thread-137418] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T00:27:54.195 [INFO] [Thread-137418] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T00:27:54.202 [DEBUG] [Thread-137418] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:27:54.202 [DEBUG] [Thread-137418] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T00:27:54.202 [DEBUG] [Thread-137418] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:27:54.203 [DEBUG] [Thread-137418] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:27:54.203 [DEBUG] [Thread-137418] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:27:54.203 [DEBUG] [Thread-137418] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:27:54.203 [DEBUG] [Thread-137418] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:27:54.203 [DEBUG] [Thread-137418] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:27:54.203 [DEBUG] [Thread-137418] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:27:54.203 [DEBUG] [Thread-137418] [transport.py] [_log()] client lang: <none>
2026-01-01T00:27:54.203 [DEBUG] [Thread-137418] [transport.py] [_log()] server lang: <none>
2026-01-01T00:27:54.203 [DEBUG] [Thread-137418] [transport.py] [_log()] kex follows: False
2026-01-01T00:27:54.203 [DEBUG] [Thread-137418] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:27:54.203 [DEBUG] [Thread-137418] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:27:54.203 [DEBUG] [Thread-137418] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:27:54.203 [DEBUG] [Thread-137418] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:27:54.203 [DEBUG] [Thread-137418] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:27:54.204 [DEBUG] [Thread-137418] [transport.py] [_log()] Compression: none
2026-01-01T00:27:54.204 [DEBUG] [Thread-137418] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:27:54.260 [DEBUG] [Thread-137418] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:27:54.261 [DEBUG] [Thread-137418] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:27:54.261 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T00:27:54.262 [DEBUG] [Thread-137418] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T00:27:54.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:27:54.316 [DEBUG] [Thread-137418] [transport.py] [_log()] userauth is OK
2026-01-01T00:27:54.317 [DEBUG] [Thread-137418] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:27:54.317 [DEBUG] [Thread-137418] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:27:54.317 [DEBUG] [Thread-137418] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T00:27:54.317 [DEBUG] [Thread-137418] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:27:54.335 [INFO] [Thread-137418] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:27:54.336 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T00:27:54.336 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:27:55.187 [DEBUG] [Thread-137418] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:27:55.187 [DEBUG] [Thread-137418] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:27:55.235 [DEBUG] [Thread-137418] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:27:55.235 [DEBUG] [Thread-137418] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:27:55.245 [DEBUG] [Thread-137418] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:27:55.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:27:55.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T00:27:55.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T00:27:55.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:27:55.273 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:27:55.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:27:55.281 [DEBUG] [Thread-137418] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:27:56.370 [DEBUG] [Thread-137420 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:28:08.855 [DEBUG] [Thread-137421 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:28:23.903 [DEBUG] [Thread-137422 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:28:25.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T00:28:25.304 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T00:28:25.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T00:28:26.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 0, 27, 59), 3.36, 80.21, 0.0, 17.04, 14.42, 0, 1, 0, 2, 0, 0),)
2026-01-01T00:28:26.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 00:27:59
2026-01-01T00:28:26.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T00:28:26.330 [DEBUG] [Thread-137423] [transport.py] [_log()] starting thread (client mode): 0xb9578c10
2026-01-01T00:28:26.330 [DEBUG] [Thread-137423] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:28:26.350 [DEBUG] [Thread-137423] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T00:28:26.350 [INFO] [Thread-137423] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T00:28:26.352 [DEBUG] [Thread-137423] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:28:26.352 [DEBUG] [Thread-137423] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T00:28:26.352 [DEBUG] [Thread-137423] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:28:26.352 [DEBUG] [Thread-137423] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:28:26.352 [DEBUG] [Thread-137423] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:28:26.352 [DEBUG] [Thread-137423] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:28:26.352 [DEBUG] [Thread-137423] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:28:26.352 [DEBUG] [Thread-137423] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:28:26.352 [DEBUG] [Thread-137423] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:28:26.352 [DEBUG] [Thread-137423] [transport.py] [_log()] client lang: <none>
2026-01-01T00:28:26.352 [DEBUG] [Thread-137423] [transport.py] [_log()] server lang: <none>
2026-01-01T00:28:26.352 [DEBUG] [Thread-137423] [transport.py] [_log()] kex follows: False
2026-01-01T00:28:26.352 [DEBUG] [Thread-137423] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:28:26.352 [DEBUG] [Thread-137423] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:28:26.352 [DEBUG] [Thread-137423] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:28:26.352 [DEBUG] [Thread-137423] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:28:26.352 [DEBUG] [Thread-137423] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:28:26.352 [DEBUG] [Thread-137423] [transport.py] [_log()] Compression: none
2026-01-01T00:28:26.352 [DEBUG] [Thread-137423] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:28:26.362 [DEBUG] [Thread-137423] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:28:26.362 [DEBUG] [Thread-137423] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:28:26.362 [DEBUG] [Thread-137423] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T00:28:26.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T00:28:26.363 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:28:26.363 [DEBUG] [Thread-137423] [transport.py] [_log()] userauth is OK
2026-01-01T00:28:26.363 [DEBUG] [Thread-137423] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:28:26.363 [DEBUG] [Thread-137423] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:28:26.363 [DEBUG] [Thread-137423] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T00:28:26.363 [DEBUG] [Thread-137423] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:28:26.372 [INFO] [Thread-137423] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:28:26.372 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:28:27.020 [DEBUG] [Thread-137423] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:28:27.020 [DEBUG] [Thread-137423] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:28:27.020 [DEBUG] [Thread-137423] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T00:28:27.061 [DEBUG] [Thread-137423] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:28:27.062 [DEBUG] [Thread-137423] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:28:27.064 [DEBUG] [Thread-137423] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:28:27.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:28:27.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T00:28:27.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T00:28:27.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T00:28:27.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:28:27.082 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T00:28:27.082 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:28:27.082 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:28:27.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T00:28:27.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.935898 -999.00  +14.60  11.53     82  +11.60 1 2 1 2 1     0    0 2.68 -13.56 ..... 8.5 11.5 185.5 20.2 15.8 -12.9 15.6 -13.1 15.4 -12.3 15.8 -12.9
2026-01-01T00:28:27.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T00:28:27.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T00:28:27.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.935898
2026-01-01T00:28:27.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T00:28:27.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T00:28:27.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T00:28:27.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T00:28:27.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T00:28:27.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T00:27:59', tmtdew=3.36, humidity=80.21, cloud=0.0, wind=17.04, temperature=14.42, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T22:27:41.587', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T00:28:27.084 [DEBUG] [Thread-137423] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:28:27.157 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T00:28:27.168 [DEBUG] [Thread-137426] [transport.py] [_log()] starting thread (client mode): 0xbbfccfa0
2026-01-01T00:28:27.168 [DEBUG] [Thread-137426] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:28:27.183 [DEBUG] [Thread-137426] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T00:28:27.183 [INFO] [Thread-137426] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T00:28:27.191 [DEBUG] [Thread-137426] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:28:27.191 [DEBUG] [Thread-137426] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T00:28:27.191 [DEBUG] [Thread-137426] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:28:27.191 [DEBUG] [Thread-137426] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:28:27.191 [DEBUG] [Thread-137426] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:28:27.191 [DEBUG] [Thread-137426] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:28:27.191 [DEBUG] [Thread-137426] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:28:27.191 [DEBUG] [Thread-137426] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:28:27.191 [DEBUG] [Thread-137426] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:28:27.191 [DEBUG] [Thread-137426] [transport.py] [_log()] client lang: <none>
2026-01-01T00:28:27.191 [DEBUG] [Thread-137426] [transport.py] [_log()] server lang: <none>
2026-01-01T00:28:27.191 [DEBUG] [Thread-137426] [transport.py] [_log()] kex follows: False
2026-01-01T00:28:27.191 [DEBUG] [Thread-137426] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:28:27.191 [DEBUG] [Thread-137426] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:28:27.191 [DEBUG] [Thread-137426] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:28:27.191 [DEBUG] [Thread-137426] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:28:27.191 [DEBUG] [Thread-137426] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:28:27.191 [DEBUG] [Thread-137426] [transport.py] [_log()] Compression: none
2026-01-01T00:28:27.191 [DEBUG] [Thread-137426] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:28:27.246 [DEBUG] [Thread-137426] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:28:27.246 [DEBUG] [Thread-137426] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:28:27.246 [DEBUG] [Thread-137426] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T00:28:27.246 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T00:28:27.246 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:28:27.304 [DEBUG] [Thread-137426] [transport.py] [_log()] userauth is OK
2026-01-01T00:28:27.304 [DEBUG] [Thread-137426] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:28:27.304 [DEBUG] [Thread-137426] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:28:27.304 [DEBUG] [Thread-137426] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T00:28:27.304 [DEBUG] [Thread-137426] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:28:27.318 [INFO] [Thread-137426] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:28:27.318 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T00:28:27.318 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:28:28.164 [DEBUG] [Thread-137426] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:28:28.164 [DEBUG] [Thread-137426] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:28:28.212 [DEBUG] [Thread-137426] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:28:28.212 [DEBUG] [Thread-137426] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:28:28.222 [DEBUG] [Thread-137426] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:28:28.230 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:28:28.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T00:28:28.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T00:28:28.246 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:28:28.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:28:28.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:28:28.254 [DEBUG] [Thread-137426] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:28:38.431 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:28:38.433 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:28:38.932 [DEBUG] [Thread-137428 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:28:53.985 [DEBUG] [Thread-137429 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:28:56.450 [DEBUG] [Thread-137430 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:28:58.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T00:28:58.277 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T00:28: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
2026-01-01T00:28:58.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 0, 28, 32), 3.37, 80.15, 0.0, 18.09, 14.42, 0, 1, 0, 2, 0, 0),)
2026-01-01T00:28:58.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 00:28:32
2026-01-01T00:28:59.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T00:28:59.258 [DEBUG] [Thread-137431] [transport.py] [_log()] starting thread (client mode): 0xb6bbdd20
2026-01-01T00:28:59.258 [DEBUG] [Thread-137431] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:28:59.280 [DEBUG] [Thread-137431] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T00:28:59.280 [INFO] [Thread-137431] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T00:28:59.284 [DEBUG] [Thread-137431] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:28:59.284 [DEBUG] [Thread-137431] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T00:28:59.284 [DEBUG] [Thread-137431] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:28:59.284 [DEBUG] [Thread-137431] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:28:59.284 [DEBUG] [Thread-137431] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:28:59.284 [DEBUG] [Thread-137431] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:28:59.284 [DEBUG] [Thread-137431] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:28:59.284 [DEBUG] [Thread-137431] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:28:59.284 [DEBUG] [Thread-137431] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:28:59.284 [DEBUG] [Thread-137431] [transport.py] [_log()] client lang: <none>
2026-01-01T00:28:59.284 [DEBUG] [Thread-137431] [transport.py] [_log()] server lang: <none>
2026-01-01T00:28:59.284 [DEBUG] [Thread-137431] [transport.py] [_log()] kex follows: False
2026-01-01T00:28:59.284 [DEBUG] [Thread-137431] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:28:59.284 [DEBUG] [Thread-137431] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:28:59.285 [DEBUG] [Thread-137431] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:28:59.285 [DEBUG] [Thread-137431] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:28:59.285 [DEBUG] [Thread-137431] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:28:59.285 [DEBUG] [Thread-137431] [transport.py] [_log()] Compression: none
2026-01-01T00:28:59.285 [DEBUG] [Thread-137431] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:28:59.302 [DEBUG] [Thread-137431] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:28:59.302 [DEBUG] [Thread-137431] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:28:59.303 [DEBUG] [Thread-137431] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T00:28:59.303 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T00:28:59.303 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:28:59.304 [DEBUG] [Thread-137431] [transport.py] [_log()] userauth is OK
2026-01-01T00:28:59.305 [DEBUG] [Thread-137431] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:28:59.305 [DEBUG] [Thread-137431] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:28:59.305 [DEBUG] [Thread-137431] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T00:28:59.305 [DEBUG] [Thread-137431] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:28:59.323 [INFO] [Thread-137431] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:28:59.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:28:59.977 [DEBUG] [Thread-137431] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:28:59.978 [DEBUG] [Thread-137431] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:28:59.978 [DEBUG] [Thread-137431] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T00:29:00.019 [DEBUG] [Thread-137431] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:29:00.019 [DEBUG] [Thread-137431] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:29:00.023 [DEBUG] [Thread-137431] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:29:00.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:29:00.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T00:29:00.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T00:29:00.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T00:29:00.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:29:00.046 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T00:29:00.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:29:00.047 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:29:00.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T00:29:00.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.936245 -999.00  +14.60   6.31     82  +11.60 1 2 1 2 1     0    0 2.72 -12.68 ..... 8.2 6.3 196.3 12.2 15.8 -13.0 15.6 -12.5 15.5 -12.3 15.7 -12.8
2026-01-01T00:29:00.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T00:29:00.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T00:29:00.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.936245
2026-01-01T00:29:00.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T00:29:00.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T00:29:00.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T00:29:00.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T00:29:00.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T00:29:00.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T00:28:32', tmtdew=3.37, humidity=80.15, cloud=0.0, wind=18.09, temperature=14.42, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T22:28:11.568', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T00:29:00.049 [DEBUG] [Thread-137431] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:29:00.143 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T00:29:00.157 [DEBUG] [Thread-137434] [transport.py] [_log()] starting thread (client mode): 0xbbfcff10
2026-01-01T00:29:00.157 [DEBUG] [Thread-137434] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:29:00.172 [DEBUG] [Thread-137434] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T00:29:00.172 [INFO] [Thread-137434] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T00:29:00.180 [DEBUG] [Thread-137434] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:29:00.180 [DEBUG] [Thread-137434] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T00:29:00.181 [DEBUG] [Thread-137434] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:29:00.181 [DEBUG] [Thread-137434] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:29:00.181 [DEBUG] [Thread-137434] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:29:00.181 [DEBUG] [Thread-137434] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:29:00.181 [DEBUG] [Thread-137434] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:29:00.181 [DEBUG] [Thread-137434] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:29:00.181 [DEBUG] [Thread-137434] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:29:00.181 [DEBUG] [Thread-137434] [transport.py] [_log()] client lang: <none>
2026-01-01T00:29:00.182 [DEBUG] [Thread-137434] [transport.py] [_log()] server lang: <none>
2026-01-01T00:29:00.182 [DEBUG] [Thread-137434] [transport.py] [_log()] kex follows: False
2026-01-01T00:29:00.182 [DEBUG] [Thread-137434] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:29:00.182 [DEBUG] [Thread-137434] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:29:00.182 [DEBUG] [Thread-137434] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:29:00.182 [DEBUG] [Thread-137434] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:29:00.182 [DEBUG] [Thread-137434] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:29:00.183 [DEBUG] [Thread-137434] [transport.py] [_log()] Compression: none
2026-01-01T00:29:00.183 [DEBUG] [Thread-137434] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:29:00.242 [DEBUG] [Thread-137434] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:29:00.243 [DEBUG] [Thread-137434] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:29:00.243 [DEBUG] [Thread-137434] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T00:29:00.243 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T00:29:00.243 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:29:00.300 [DEBUG] [Thread-137434] [transport.py] [_log()] userauth is OK
2026-01-01T00:29:00.300 [DEBUG] [Thread-137434] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:29:00.300 [DEBUG] [Thread-137434] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:29:00.300 [DEBUG] [Thread-137434] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T00:29:00.300 [DEBUG] [Thread-137434] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:29:00.314 [INFO] [Thread-137434] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:29:00.314 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T00:29:00.315 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:29:01.159 [DEBUG] [Thread-137434] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:29:01.159 [DEBUG] [Thread-137434] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:29:01.207 [DEBUG] [Thread-137434] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:29:01.207 [DEBUG] [Thread-137434] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:29:01.216 [DEBUG] [Thread-137434] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:29:01.224 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:29:01.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T00:29:01.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T00:29:01.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:29:01.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:29:01.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:29:01.250 [DEBUG] [Thread-137434] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:29:09.020 [DEBUG] [Thread-137436 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:29:24.073 [DEBUG] [Thread-137437 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:29:31.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T00:29:31.243 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T00:29:31.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T00:29:31.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 0, 29, 4), 3.36, 80.16, 0.0, 16.78, 14.44, 0, 1, 0, 2, 0, 0),)
2026-01-01T00:29:31.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 00:29:04
2026-01-01T00:29:32.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T00:29:32.229 [DEBUG] [Thread-137438] [transport.py] [_log()] starting thread (client mode): 0xb1797df0
2026-01-01T00:29:32.229 [DEBUG] [Thread-137438] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:29:32.249 [DEBUG] [Thread-137438] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T00:29:32.249 [INFO] [Thread-137438] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T00:29:32.252 [DEBUG] [Thread-137438] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:29:32.253 [DEBUG] [Thread-137438] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T00:29:32.253 [DEBUG] [Thread-137438] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:29:32.253 [DEBUG] [Thread-137438] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:29:32.253 [DEBUG] [Thread-137438] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:29:32.253 [DEBUG] [Thread-137438] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:29:32.253 [DEBUG] [Thread-137438] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:29:32.253 [DEBUG] [Thread-137438] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:29:32.253 [DEBUG] [Thread-137438] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:29:32.253 [DEBUG] [Thread-137438] [transport.py] [_log()] client lang: <none>
2026-01-01T00:29:32.253 [DEBUG] [Thread-137438] [transport.py] [_log()] server lang: <none>
2026-01-01T00:29:32.253 [DEBUG] [Thread-137438] [transport.py] [_log()] kex follows: False
2026-01-01T00:29:32.253 [DEBUG] [Thread-137438] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:29:32.253 [DEBUG] [Thread-137438] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:29:32.253 [DEBUG] [Thread-137438] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:29:32.253 [DEBUG] [Thread-137438] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:29:32.253 [DEBUG] [Thread-137438] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:29:32.253 [DEBUG] [Thread-137438] [transport.py] [_log()] Compression: none
2026-01-01T00:29:32.253 [DEBUG] [Thread-137438] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:29:32.271 [DEBUG] [Thread-137438] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:29:32.272 [DEBUG] [Thread-137438] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:29:32.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T00:29:32.273 [DEBUG] [Thread-137438] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T00:29:32.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:29:32.275 [DEBUG] [Thread-137438] [transport.py] [_log()] userauth is OK
2026-01-01T00:29:32.275 [DEBUG] [Thread-137438] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:29:32.275 [DEBUG] [Thread-137438] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:29:32.275 [DEBUG] [Thread-137438] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T00:29:32.275 [DEBUG] [Thread-137438] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:29:32.312 [INFO] [Thread-137438] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:29:32.312 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:29:32.972 [DEBUG] [Thread-137438] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:29:32.972 [DEBUG] [Thread-137438] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:29:32.973 [DEBUG] [Thread-137438] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T00:29:33.013 [DEBUG] [Thread-137438] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:29:33.013 [DEBUG] [Thread-137438] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:29:33.017 [DEBUG] [Thread-137438] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:29:33.029 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:29:33.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T00:29:33.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T00:29:33.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T00:29:33.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:29:33.041 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T00:29:33.042 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:29:33.042 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:29:33.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T00:29:33.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.936940 -999.00  +14.60   8.44     82  +11.60 1 2 1 2 1     0    0 2.68 -12.81 ..... 7.3 8.4 212.8 18.7 15.8 -13.3 15.6 -13.2 15.4 -12.6 15.8 -13.4
2026-01-01T00:29:33.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T00:29:33.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T00:29:33.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.936940
2026-01-01T00:29:33.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T00:29:33.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T00:29:33.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T00:29:33.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T00:29:33.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T00:29:33.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T00:29:04', tmtdew=3.36, humidity=80.16, cloud=0.0, wind=16.78, temperature=14.44, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T22:29:11.616', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T00:29:33.044 [DEBUG] [Thread-137438] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:29:33.127 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T00:29:38.635 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:29:38.636 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:29:39.105 [DEBUG] [Thread-137441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:29:54.153 [DEBUG] [Thread-137442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:29:56.549 [DEBUG] [Thread-137443 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:30:09.189 [DEBUG] [Thread-137444 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:30:24.215 [DEBUG] [Thread-137445 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:30:38.842 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:30:38.843 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:30:39.249 [DEBUG] [Thread-137446 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:30:54.285 [DEBUG] [Thread-137447 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:30:56.602 [DEBUG] [Thread-137448 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:31:09.318 [DEBUG] [Thread-137449 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:31:24.354 [DEBUG] [Thread-137450 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:31:39.046 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:31:39.046 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:31:39.385 [DEBUG] [Thread-137451 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:31:47.925 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2026-01-01T00:31:54.418 [DEBUG] [Thread-137452 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:31:56.680 [DEBUG] [Thread-137453 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:32:09.453 [DEBUG] [Thread-137454 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:32:17.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T00:32:17.956 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T00:32:17.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T00:32:18.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 0, 31, 44), 3.33, 80.33, 0.0, 17.64, 14.29, 0, 1, 0, 2, 0, 0),)
2026-01-01T00:32:18.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 00:31:44
2026-01-01T00:32:18.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T00:32:19.025 [DEBUG] [Thread-137455] [transport.py] [_log()] starting thread (client mode): 0xb1797370
2026-01-01T00:32:19.025 [DEBUG] [Thread-137455] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:32:19.041 [DEBUG] [Thread-137455] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T00:32:19.041 [INFO] [Thread-137455] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T00:32:19.044 [DEBUG] [Thread-137455] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:32:19.045 [DEBUG] [Thread-137455] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T00:32:19.045 [DEBUG] [Thread-137455] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:32:19.045 [DEBUG] [Thread-137455] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:32:19.045 [DEBUG] [Thread-137455] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:32:19.045 [DEBUG] [Thread-137455] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:32:19.045 [DEBUG] [Thread-137455] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:32:19.045 [DEBUG] [Thread-137455] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:32:19.045 [DEBUG] [Thread-137455] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:32:19.045 [DEBUG] [Thread-137455] [transport.py] [_log()] client lang: <none>
2026-01-01T00:32:19.045 [DEBUG] [Thread-137455] [transport.py] [_log()] server lang: <none>
2026-01-01T00:32:19.045 [DEBUG] [Thread-137455] [transport.py] [_log()] kex follows: False
2026-01-01T00:32:19.045 [DEBUG] [Thread-137455] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:32:19.045 [DEBUG] [Thread-137455] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:32:19.045 [DEBUG] [Thread-137455] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:32:19.045 [DEBUG] [Thread-137455] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:32:19.045 [DEBUG] [Thread-137455] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:32:19.045 [DEBUG] [Thread-137455] [transport.py] [_log()] Compression: none
2026-01-01T00:32:19.045 [DEBUG] [Thread-137455] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:32:19.062 [DEBUG] [Thread-137455] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:32:19.063 [DEBUG] [Thread-137455] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:32:19.063 [DEBUG] [Thread-137455] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T00:32:19.063 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T00:32:19.063 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:32:19.064 [DEBUG] [Thread-137455] [transport.py] [_log()] userauth is OK
2026-01-01T00:32:19.064 [DEBUG] [Thread-137455] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:32:19.064 [DEBUG] [Thread-137455] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:32:19.064 [DEBUG] [Thread-137455] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T00:32:19.064 [DEBUG] [Thread-137455] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:32:19.082 [INFO] [Thread-137455] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:32:19.082 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:32:19.715 [DEBUG] [Thread-137455] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:32:19.715 [DEBUG] [Thread-137455] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:32:19.715 [DEBUG] [Thread-137455] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T00:32:19.755 [DEBUG] [Thread-137455] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:32:19.755 [DEBUG] [Thread-137455] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:32:19.757 [DEBUG] [Thread-137455] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:32:19.768 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:32:19.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T00:32:19.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T00:32:19.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T00:32:19.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:32:19.774 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T00:32:19.774 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:32:19.774 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:32:19.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T00:32:19.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.938676 -999.00  +14.60  15.37     82  +11.60 1 2 1 2 1     0    0 2.83 -10.14 Z..S. 14.6 15.4 200.2 17.2 15.8 -14.3 15.6 -14.0 15.4 -13.2 15.8 -13.9
2026-01-01T00:32:19.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T00:32:19.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T00:32:19.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.938676
2026-01-01T00:32:19.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T00:32:19.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T00:32:19.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T00:32:19.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T00:32:19.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T00:32:19.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T00:31:44', tmtdew=3.33, humidity=80.33, cloud=0.0, wind=17.64, temperature=14.29, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T22:31:41.606', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T00:32:19.776 [DEBUG] [Thread-137455] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:32:19.849 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T00:32:19.861 [DEBUG] [Thread-137458] [transport.py] [_log()] starting thread (client mode): 0xb95f1420
2026-01-01T00:32:19.861 [DEBUG] [Thread-137458] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:32:19.879 [DEBUG] [Thread-137458] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T00:32:19.879 [INFO] [Thread-137458] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T00:32:19.886 [DEBUG] [Thread-137458] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:32:19.886 [DEBUG] [Thread-137458] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T00:32:19.887 [DEBUG] [Thread-137458] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:32:19.887 [DEBUG] [Thread-137458] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:32:19.887 [DEBUG] [Thread-137458] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:32:19.887 [DEBUG] [Thread-137458] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:32:19.887 [DEBUG] [Thread-137458] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:32:19.887 [DEBUG] [Thread-137458] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:32:19.887 [DEBUG] [Thread-137458] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:32:19.887 [DEBUG] [Thread-137458] [transport.py] [_log()] client lang: <none>
2026-01-01T00:32:19.887 [DEBUG] [Thread-137458] [transport.py] [_log()] server lang: <none>
2026-01-01T00:32:19.887 [DEBUG] [Thread-137458] [transport.py] [_log()] kex follows: False
2026-01-01T00:32:19.887 [DEBUG] [Thread-137458] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:32:19.887 [DEBUG] [Thread-137458] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:32:19.887 [DEBUG] [Thread-137458] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:32:19.887 [DEBUG] [Thread-137458] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:32:19.887 [DEBUG] [Thread-137458] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:32:19.887 [DEBUG] [Thread-137458] [transport.py] [_log()] Compression: none
2026-01-01T00:32:19.887 [DEBUG] [Thread-137458] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:32:19.942 [DEBUG] [Thread-137458] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:32:19.942 [DEBUG] [Thread-137458] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:32:19.942 [DEBUG] [Thread-137458] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T00:32:19.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T00:32:19.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:32:20.000 [DEBUG] [Thread-137458] [transport.py] [_log()] userauth is OK
2026-01-01T00:32:20.000 [DEBUG] [Thread-137458] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:32:20.000 [DEBUG] [Thread-137458] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:32:20.000 [DEBUG] [Thread-137458] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T00:32:20.000 [DEBUG] [Thread-137458] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:32:20.018 [INFO] [Thread-137458] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:32:20.019 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T00:32:20.019 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:32:20.892 [DEBUG] [Thread-137458] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:32:20.892 [DEBUG] [Thread-137458] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:32:20.940 [DEBUG] [Thread-137458] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:32:20.940 [DEBUG] [Thread-137458] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:32:20.949 [DEBUG] [Thread-137458] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:32:20.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:32:20.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T00:32:20.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T00:32:20.975 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:32:20.975 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:32:20.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:32:20.983 [DEBUG] [Thread-137458] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:32:24.484 [DEBUG] [Thread-137460 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:32:39.258 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:32:39.259 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:32:39.531 [DEBUG] [Thread-137461 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:32:50.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T00:32:50.987 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T00:32:50.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T00:32:51.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 0, 32, 48), 3.31, 80.46, 0.0, 15.88, 14.39, 0, 1, 0, 2, 0, 0),)
2026-01-01T00:32:51.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 00:32:48
2026-01-01T00:32:51.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T00:32:51.990 [DEBUG] [Thread-137462] [transport.py] [_log()] starting thread (client mode): 0xb1744df0
2026-01-01T00:32:51.990 [DEBUG] [Thread-137462] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:32:52.010 [DEBUG] [Thread-137462] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T00:32:52.011 [INFO] [Thread-137462] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T00:32:52.015 [DEBUG] [Thread-137462] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:32:52.015 [DEBUG] [Thread-137462] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T00:32:52.015 [DEBUG] [Thread-137462] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:32:52.015 [DEBUG] [Thread-137462] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:32:52.015 [DEBUG] [Thread-137462] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:32:52.015 [DEBUG] [Thread-137462] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:32:52.015 [DEBUG] [Thread-137462] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:32:52.015 [DEBUG] [Thread-137462] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:32:52.015 [DEBUG] [Thread-137462] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:32:52.016 [DEBUG] [Thread-137462] [transport.py] [_log()] client lang: <none>
2026-01-01T00:32:52.016 [DEBUG] [Thread-137462] [transport.py] [_log()] server lang: <none>
2026-01-01T00:32:52.016 [DEBUG] [Thread-137462] [transport.py] [_log()] kex follows: False
2026-01-01T00:32:52.016 [DEBUG] [Thread-137462] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:32:52.016 [DEBUG] [Thread-137462] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:32:52.016 [DEBUG] [Thread-137462] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:32:52.016 [DEBUG] [Thread-137462] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:32:52.016 [DEBUG] [Thread-137462] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:32:52.016 [DEBUG] [Thread-137462] [transport.py] [_log()] Compression: none
2026-01-01T00:32:52.016 [DEBUG] [Thread-137462] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:32:52.035 [DEBUG] [Thread-137462] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:32:52.036 [DEBUG] [Thread-137462] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:32:52.037 [DEBUG] [Thread-137462] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T00:32:52.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T00:32:52.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:32:52.039 [DEBUG] [Thread-137462] [transport.py] [_log()] userauth is OK
2026-01-01T00:32:52.039 [DEBUG] [Thread-137462] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:32:52.039 [DEBUG] [Thread-137462] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:32:52.039 [DEBUG] [Thread-137462] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T00:32:52.039 [DEBUG] [Thread-137462] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:32:52.075 [INFO] [Thread-137462] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:32:52.076 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:32:52.698 [DEBUG] [Thread-137462] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:32:52.698 [DEBUG] [Thread-137462] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:32:52.699 [DEBUG] [Thread-137462] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T00:32:52.739 [DEBUG] [Thread-137462] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:32:52.739 [DEBUG] [Thread-137462] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:32:52.742 [DEBUG] [Thread-137462] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:32:52.754 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:32:52.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T00:32:52.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T00:32:52.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T00:32:52.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:32:52.765 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T00:32:52.765 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:32:52.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:32:52.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T00:32:52.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.939023 -999.00  +14.60  15.29     82  +11.60 1 2 1 2 1     0    0 2.78 -10.90 z..s. 16.9 15.3 190.6 17.3 15.8 -14.4 15.6 -14.5 15.4 -13.4 15.8 -14.0
2026-01-01T00:32:52.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T00:32:52.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T00:32:52.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.939023
2026-01-01T00:32:52.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T00:32:52.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T00:32:52.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T00:32:52.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T00:32:52.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T00:32:52.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T00:32:48', tmtdew=3.31, humidity=80.46, cloud=0.0, wind=15.88, temperature=14.39, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T22:32:11.587', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T00:32:52.768 [DEBUG] [Thread-137462] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:32:52.852 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T00:32:52.863 [DEBUG] [Thread-137465] [transport.py] [_log()] starting thread (client mode): 0xb6bbecb0
2026-01-01T00:32:52.864 [DEBUG] [Thread-137465] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:32:52.879 [DEBUG] [Thread-137465] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T00:32:52.879 [INFO] [Thread-137465] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T00:32:52.886 [DEBUG] [Thread-137465] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:32:52.886 [DEBUG] [Thread-137465] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T00:32:52.886 [DEBUG] [Thread-137465] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:32:52.886 [DEBUG] [Thread-137465] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:32:52.886 [DEBUG] [Thread-137465] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:32:52.887 [DEBUG] [Thread-137465] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:32:52.887 [DEBUG] [Thread-137465] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:32:52.887 [DEBUG] [Thread-137465] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:32:52.887 [DEBUG] [Thread-137465] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:32:52.887 [DEBUG] [Thread-137465] [transport.py] [_log()] client lang: <none>
2026-01-01T00:32:52.887 [DEBUG] [Thread-137465] [transport.py] [_log()] server lang: <none>
2026-01-01T00:32:52.887 [DEBUG] [Thread-137465] [transport.py] [_log()] kex follows: False
2026-01-01T00:32:52.887 [DEBUG] [Thread-137465] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:32:52.887 [DEBUG] [Thread-137465] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:32:52.887 [DEBUG] [Thread-137465] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:32:52.887 [DEBUG] [Thread-137465] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:32:52.887 [DEBUG] [Thread-137465] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:32:52.887 [DEBUG] [Thread-137465] [transport.py] [_log()] Compression: none
2026-01-01T00:32:52.887 [DEBUG] [Thread-137465] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:32:52.942 [DEBUG] [Thread-137465] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:32:52.942 [DEBUG] [Thread-137465] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:32:52.942 [DEBUG] [Thread-137465] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T00:32:52.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T00:32:52.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:32:53.000 [DEBUG] [Thread-137465] [transport.py] [_log()] userauth is OK
2026-01-01T00:32:53.000 [DEBUG] [Thread-137465] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:32:53.000 [DEBUG] [Thread-137465] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:32:53.000 [DEBUG] [Thread-137465] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T00:32:53.000 [DEBUG] [Thread-137465] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:32:53.013 [INFO] [Thread-137465] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:32:53.013 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T00:32:53.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:32:53.822 [DEBUG] [Thread-137465] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:32:53.822 [DEBUG] [Thread-137465] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:32:53.869 [DEBUG] [Thread-137465] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:32:53.869 [DEBUG] [Thread-137465] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:32:53.878 [DEBUG] [Thread-137465] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:32:53.886 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:32:53.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T00:32:53.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T00:32:53.902 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:32:53.902 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:32:53.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:32:53.910 [DEBUG] [Thread-137465] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:32:54.562 [DEBUG] [Thread-137467 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:32:56.732 [DEBUG] [Thread-137468 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:33:09.601 [DEBUG] [Thread-137469 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:33:23.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T00:33:23.932 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T00:33:23.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T00:33:24.637 [DEBUG] [Thread-137470 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:33:24.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 0, 33, 20), 3.31, 80.46, 0.0, 15.4, 14.34, 0, 1, 0, 2, 0, 0),)
2026-01-01T00:33:24.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 00:33:20
2026-01-01T00:33:24.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T00:33:24.923 [DEBUG] [Thread-137471] [transport.py] [_log()] starting thread (client mode): 0xbbfcd060
2026-01-01T00:33:24.924 [DEBUG] [Thread-137471] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:33:24.944 [DEBUG] [Thread-137471] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T00:33:24.945 [INFO] [Thread-137471] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T00:33:24.946 [DEBUG] [Thread-137471] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:33:24.946 [DEBUG] [Thread-137471] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T00:33:24.946 [DEBUG] [Thread-137471] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:33:24.946 [DEBUG] [Thread-137471] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:33:24.946 [DEBUG] [Thread-137471] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:33:24.946 [DEBUG] [Thread-137471] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:33:24.946 [DEBUG] [Thread-137471] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:33:24.946 [DEBUG] [Thread-137471] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:33:24.946 [DEBUG] [Thread-137471] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:33:24.946 [DEBUG] [Thread-137471] [transport.py] [_log()] client lang: <none>
2026-01-01T00:33:24.946 [DEBUG] [Thread-137471] [transport.py] [_log()] server lang: <none>
2026-01-01T00:33:24.946 [DEBUG] [Thread-137471] [transport.py] [_log()] kex follows: False
2026-01-01T00:33:24.946 [DEBUG] [Thread-137471] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:33:24.946 [DEBUG] [Thread-137471] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:33:24.946 [DEBUG] [Thread-137471] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:33:24.946 [DEBUG] [Thread-137471] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:33:24.947 [DEBUG] [Thread-137471] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:33:24.947 [DEBUG] [Thread-137471] [transport.py] [_log()] Compression: none
2026-01-01T00:33:24.947 [DEBUG] [Thread-137471] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:33:24.956 [DEBUG] [Thread-137471] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:33:24.956 [DEBUG] [Thread-137471] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:33:24.957 [DEBUG] [Thread-137471] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T00:33:24.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T00:33:24.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:33:24.958 [DEBUG] [Thread-137471] [transport.py] [_log()] userauth is OK
2026-01-01T00:33:24.959 [DEBUG] [Thread-137471] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:33:24.959 [DEBUG] [Thread-137471] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:33:24.959 [DEBUG] [Thread-137471] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T00:33:24.959 [DEBUG] [Thread-137471] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:33:24.997 [INFO] [Thread-137471] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:33:24.998 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:33:25.647 [DEBUG] [Thread-137471] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:33:25.647 [DEBUG] [Thread-137471] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:33:25.647 [DEBUG] [Thread-137471] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T00:33:25.687 [DEBUG] [Thread-137471] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:33:25.687 [DEBUG] [Thread-137471] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:33:25.689 [DEBUG] [Thread-137471] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:33:25.702 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:33:25.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T00:33:25.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T00:33:25.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T00:33:25.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:33:25.708 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T00:33:25.709 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:33:25.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:33:25.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T00:33:25.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.939717 -999.00  +14.50  11.81     82  +11.60 1 2 1 2 1     0    0 2.72 -10.86 z.... 11.7 11.8 197.6 17.5 15.8 -14.7 15.6 -15.4 15.4 -13.8 15.7 -14.3
2026-01-01T00:33:25.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T00:33:25.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T00:33:25.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.939717
2026-01-01T00:33:25.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T00:33:25.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T00:33:25.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T00:33:25.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T00:33:25.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T00:33:25.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T00:33:20', tmtdew=3.31, humidity=80.46, cloud=0.0, wind=15.4, temperature=14.34, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T22:33:11.549', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T00:33:25.711 [DEBUG] [Thread-137471] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:33:25.797 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T00:33:25.808 [DEBUG] [Thread-137474] [transport.py] [_log()] starting thread (client mode): 0xb6b639d0
2026-01-01T00:33:25.808 [DEBUG] [Thread-137474] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:33:25.823 [DEBUG] [Thread-137474] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T00:33:25.823 [INFO] [Thread-137474] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T00:33:25.832 [DEBUG] [Thread-137474] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:33:25.832 [DEBUG] [Thread-137474] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T00:33:25.832 [DEBUG] [Thread-137474] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:33:25.832 [DEBUG] [Thread-137474] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:33:25.832 [DEBUG] [Thread-137474] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:33:25.832 [DEBUG] [Thread-137474] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:33:25.832 [DEBUG] [Thread-137474] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:33:25.832 [DEBUG] [Thread-137474] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:33:25.833 [DEBUG] [Thread-137474] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:33:25.833 [DEBUG] [Thread-137474] [transport.py] [_log()] client lang: <none>
2026-01-01T00:33:25.833 [DEBUG] [Thread-137474] [transport.py] [_log()] server lang: <none>
2026-01-01T00:33:25.833 [DEBUG] [Thread-137474] [transport.py] [_log()] kex follows: False
2026-01-01T00:33:25.833 [DEBUG] [Thread-137474] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:33:25.833 [DEBUG] [Thread-137474] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:33:25.833 [DEBUG] [Thread-137474] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:33:25.833 [DEBUG] [Thread-137474] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:33:25.833 [DEBUG] [Thread-137474] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:33:25.833 [DEBUG] [Thread-137474] [transport.py] [_log()] Compression: none
2026-01-01T00:33:25.833 [DEBUG] [Thread-137474] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:33:25.888 [DEBUG] [Thread-137474] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:33:25.888 [DEBUG] [Thread-137474] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:33:25.889 [DEBUG] [Thread-137474] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T00:33:25.889 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T00:33:25.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:33:25.948 [DEBUG] [Thread-137474] [transport.py] [_log()] userauth is OK
2026-01-01T00:33:25.949 [DEBUG] [Thread-137474] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:33:25.949 [DEBUG] [Thread-137474] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:33:25.949 [DEBUG] [Thread-137474] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T00:33:25.949 [DEBUG] [Thread-137474] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:33:25.971 [INFO] [Thread-137474] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:33:25.971 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T00:33:25.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:33:26.843 [DEBUG] [Thread-137474] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:33:26.843 [DEBUG] [Thread-137474] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:33:26.892 [DEBUG] [Thread-137474] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:33:26.892 [DEBUG] [Thread-137474] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:33:26.905 [DEBUG] [Thread-137474] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:33:26.914 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:33:26.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T00:33:26.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T00:33:26.933 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:33:26.933 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:33:26.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:33:26.942 [DEBUG] [Thread-137474] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:33:39.462 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:33:39.463 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:33:39.665 [DEBUG] [Thread-137476 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:33:54.716 [DEBUG] [Thread-137477 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:33:56.796 [DEBUG] [Thread-137478 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:33:56.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T00:33:56.965 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T00:33:56.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T00:33:57.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 0, 33, 52), 3.3, 80.49, 0.0, 17.36, 14.34, 0, 1, 0, 2, 0, 0),)
2026-01-01T00:33:57.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 00:33:52
2026-01-01T00:33:57.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T00:33:57.963 [DEBUG] [Thread-137479] [transport.py] [_log()] starting thread (client mode): 0xb6bbdf00
2026-01-01T00:33:57.963 [DEBUG] [Thread-137479] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:33:57.976 [DEBUG] [Thread-137479] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T00:33:57.976 [INFO] [Thread-137479] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T00:33:57.978 [DEBUG] [Thread-137479] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:33:57.978 [DEBUG] [Thread-137479] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T00:33:57.979 [DEBUG] [Thread-137479] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:33:57.979 [DEBUG] [Thread-137479] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:33:57.979 [DEBUG] [Thread-137479] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:33:57.979 [DEBUG] [Thread-137479] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:33:57.979 [DEBUG] [Thread-137479] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:33:57.979 [DEBUG] [Thread-137479] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:33:57.979 [DEBUG] [Thread-137479] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:33:57.979 [DEBUG] [Thread-137479] [transport.py] [_log()] client lang: <none>
2026-01-01T00:33:57.979 [DEBUG] [Thread-137479] [transport.py] [_log()] server lang: <none>
2026-01-01T00:33:57.979 [DEBUG] [Thread-137479] [transport.py] [_log()] kex follows: False
2026-01-01T00:33:57.979 [DEBUG] [Thread-137479] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:33:57.979 [DEBUG] [Thread-137479] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:33:57.979 [DEBUG] [Thread-137479] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:33:57.979 [DEBUG] [Thread-137479] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:33:57.979 [DEBUG] [Thread-137479] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:33:57.979 [DEBUG] [Thread-137479] [transport.py] [_log()] Compression: none
2026-01-01T00:33:57.979 [DEBUG] [Thread-137479] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:33:57.990 [DEBUG] [Thread-137479] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:33:57.990 [DEBUG] [Thread-137479] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:33:57.990 [DEBUG] [Thread-137479] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T00:33:57.990 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T00:33:57.991 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:33:57.991 [DEBUG] [Thread-137479] [transport.py] [_log()] userauth is OK
2026-01-01T00:33:57.991 [DEBUG] [Thread-137479] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:33:57.991 [DEBUG] [Thread-137479] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:33:57.991 [DEBUG] [Thread-137479] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T00:33:57.992 [DEBUG] [Thread-137479] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:33:58.011 [INFO] [Thread-137479] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:33:58.012 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:33:58.623 [DEBUG] [Thread-137479] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:33:58.623 [DEBUG] [Thread-137479] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:33:58.624 [DEBUG] [Thread-137479] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T00:33:58.664 [DEBUG] [Thread-137479] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:33:58.664 [DEBUG] [Thread-137479] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:33:58.668 [DEBUG] [Thread-137479] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:33:58.681 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:33:58.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T00:33:58.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T00:33:58.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T00:33:58.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:33:58.692 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T00:33:58.692 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:33:58.692 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:33:58.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T00:33:58.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.940065 -999.00  +14.50  11.76     82  +11.60 1 2 1 2 1     0    0 2.69 -11.77 z.... 10.8 11.8 199.4 17.3 15.8 -14.8 15.6 -14.7 15.4 -13.7 15.7 -14.2
2026-01-01T00:33:58.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T00:33:58.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T00:33:58.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.940065
2026-01-01T00:33:58.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T00:33:58.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T00:33:58.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T00:33:58.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T00:33:58.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T00:33:58.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T00:33:52', tmtdew=3.3, humidity=80.49, cloud=0.0, wind=17.36, temperature=14.34, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T22:33:41.616', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T00:33:58.695 [DEBUG] [Thread-137479] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:33:58.778 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T00:33:58.790 [DEBUG] [Thread-137482] [transport.py] [_log()] starting thread (client mode): 0xb95f38e0
2026-01-01T00:33:58.790 [DEBUG] [Thread-137482] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:33:58.805 [DEBUG] [Thread-137482] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T00:33:58.805 [INFO] [Thread-137482] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T00:33:58.813 [DEBUG] [Thread-137482] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:33:58.813 [DEBUG] [Thread-137482] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T00:33:58.814 [DEBUG] [Thread-137482] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:33:58.814 [DEBUG] [Thread-137482] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:33:58.814 [DEBUG] [Thread-137482] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:33:58.814 [DEBUG] [Thread-137482] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:33:58.814 [DEBUG] [Thread-137482] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:33:58.815 [DEBUG] [Thread-137482] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:33:58.815 [DEBUG] [Thread-137482] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:33:58.815 [DEBUG] [Thread-137482] [transport.py] [_log()] client lang: <none>
2026-01-01T00:33:58.815 [DEBUG] [Thread-137482] [transport.py] [_log()] server lang: <none>
2026-01-01T00:33:58.815 [DEBUG] [Thread-137482] [transport.py] [_log()] kex follows: False
2026-01-01T00:33:58.815 [DEBUG] [Thread-137482] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:33:58.815 [DEBUG] [Thread-137482] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:33:58.815 [DEBUG] [Thread-137482] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:33:58.815 [DEBUG] [Thread-137482] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:33:58.815 [DEBUG] [Thread-137482] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:33:58.816 [DEBUG] [Thread-137482] [transport.py] [_log()] Compression: none
2026-01-01T00:33:58.816 [DEBUG] [Thread-137482] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:33:58.872 [DEBUG] [Thread-137482] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:33:58.872 [DEBUG] [Thread-137482] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:33:58.873 [DEBUG] [Thread-137482] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T00:33:58.873 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T00:33:58.874 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:33:58.928 [DEBUG] [Thread-137482] [transport.py] [_log()] userauth is OK
2026-01-01T00:33:58.928 [DEBUG] [Thread-137482] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:33:58.929 [DEBUG] [Thread-137482] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:33:58.929 [DEBUG] [Thread-137482] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T00:33:58.929 [DEBUG] [Thread-137482] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:33:58.954 [INFO] [Thread-137482] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:33:58.954 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T00:33:58.955 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:33:59.760 [DEBUG] [Thread-137482] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:33:59.761 [DEBUG] [Thread-137482] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:33:59.809 [DEBUG] [Thread-137482] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:33:59.809 [DEBUG] [Thread-137482] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:33:59.819 [DEBUG] [Thread-137482] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:33:59.828 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:33:59.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T00:33:59.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T00:33:59.847 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:33:59.847 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:33:59.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:33:59.856 [DEBUG] [Thread-137482] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:34:09.748 [DEBUG] [Thread-137484 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:34:24.804 [DEBUG] [Thread-137485 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:34:29.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T00:34:29.878 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T00:34:29.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T00:34:30.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 0, 34, 24), 3.31, 80.44, 0.0, 17.77, 14.3, 0, 1, 0, 2, 0, 0),)
2026-01-01T00:34:30.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 00:34:24
2026-01-01T00:34:30.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T00:34:30.870 [DEBUG] [Thread-137486] [transport.py] [_log()] starting thread (client mode): 0xb6b634c0
2026-01-01T00:34:30.870 [DEBUG] [Thread-137486] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:34:30.891 [DEBUG] [Thread-137486] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T00:34:30.891 [INFO] [Thread-137486] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T00:34:30.894 [DEBUG] [Thread-137486] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:34:30.894 [DEBUG] [Thread-137486] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T00:34:30.894 [DEBUG] [Thread-137486] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:34:30.894 [DEBUG] [Thread-137486] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:34:30.894 [DEBUG] [Thread-137486] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:34:30.894 [DEBUG] [Thread-137486] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:34:30.894 [DEBUG] [Thread-137486] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:34:30.894 [DEBUG] [Thread-137486] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:34:30.894 [DEBUG] [Thread-137486] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:34:30.895 [DEBUG] [Thread-137486] [transport.py] [_log()] client lang: <none>
2026-01-01T00:34:30.895 [DEBUG] [Thread-137486] [transport.py] [_log()] server lang: <none>
2026-01-01T00:34:30.895 [DEBUG] [Thread-137486] [transport.py] [_log()] kex follows: False
2026-01-01T00:34:30.895 [DEBUG] [Thread-137486] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:34:30.895 [DEBUG] [Thread-137486] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:34:30.895 [DEBUG] [Thread-137486] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:34:30.895 [DEBUG] [Thread-137486] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:34:30.895 [DEBUG] [Thread-137486] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:34:30.895 [DEBUG] [Thread-137486] [transport.py] [_log()] Compression: none
2026-01-01T00:34:30.895 [DEBUG] [Thread-137486] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:34:30.903 [DEBUG] [Thread-137486] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:34:30.903 [DEBUG] [Thread-137486] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:34:30.904 [DEBUG] [Thread-137486] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T00:34:30.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T00:34:30.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:34:30.905 [DEBUG] [Thread-137486] [transport.py] [_log()] userauth is OK
2026-01-01T00:34:30.905 [DEBUG] [Thread-137486] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:34:30.905 [DEBUG] [Thread-137486] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:34:30.905 [DEBUG] [Thread-137486] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T00:34:30.905 [DEBUG] [Thread-137486] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:34:30.923 [INFO] [Thread-137486] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:34:30.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:34:31.579 [DEBUG] [Thread-137486] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:34:31.580 [DEBUG] [Thread-137486] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:34:31.580 [DEBUG] [Thread-137486] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T00:34:31.621 [DEBUG] [Thread-137486] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:34:31.621 [DEBUG] [Thread-137486] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:34:31.624 [DEBUG] [Thread-137486] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:34:31.635 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:34:31.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T00:34:31.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T00:34:31.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T00:34:31.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:34:31.647 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T00:34:31.647 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:34:31.647 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:34:31.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T00:34:31.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.940412 -999.00  +14.50   9.04     82  +11.60 1 2 1 2 1     0    0 2.73 -11.42 Z..s. 12.9 9.0 192.3 12.8 15.7 -15.0 15.6 -15.5 15.4 -13.8 15.8 -14.2
2026-01-01T00:34:31.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T00:34:31.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T00:34:31.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.940412
2026-01-01T00:34:31.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T00:34:31.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T00:34:31.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T00:34:31.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T00:34:31.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T00:34:31.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T00:34:24', tmtdew=3.31, humidity=80.44, cloud=0.0, wind=17.77, temperature=14.3, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T22:34:11.597', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T00:34:31.650 [DEBUG] [Thread-137486] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:34:31.733 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T00:34:31.744 [DEBUG] [Thread-137489] [transport.py] [_log()] starting thread (client mode): 0xb6b62c80
2026-01-01T00:34:31.745 [DEBUG] [Thread-137489] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:34:31.760 [DEBUG] [Thread-137489] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T00:34:31.760 [INFO] [Thread-137489] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T00:34:31.771 [DEBUG] [Thread-137489] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:34:31.771 [DEBUG] [Thread-137489] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T00:34:31.771 [DEBUG] [Thread-137489] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:34:31.771 [DEBUG] [Thread-137489] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:34:31.772 [DEBUG] [Thread-137489] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:34:31.772 [DEBUG] [Thread-137489] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:34:31.772 [DEBUG] [Thread-137489] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:34:31.772 [DEBUG] [Thread-137489] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:34:31.772 [DEBUG] [Thread-137489] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:34:31.772 [DEBUG] [Thread-137489] [transport.py] [_log()] client lang: <none>
2026-01-01T00:34:31.772 [DEBUG] [Thread-137489] [transport.py] [_log()] server lang: <none>
2026-01-01T00:34:31.772 [DEBUG] [Thread-137489] [transport.py] [_log()] kex follows: False
2026-01-01T00:34:31.772 [DEBUG] [Thread-137489] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:34:31.772 [DEBUG] [Thread-137489] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:34:31.772 [DEBUG] [Thread-137489] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:34:31.772 [DEBUG] [Thread-137489] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:34:31.772 [DEBUG] [Thread-137489] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:34:31.772 [DEBUG] [Thread-137489] [transport.py] [_log()] Compression: none
2026-01-01T00:34:31.772 [DEBUG] [Thread-137489] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:34:31.832 [DEBUG] [Thread-137489] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:34:31.833 [DEBUG] [Thread-137489] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:34:31.833 [DEBUG] [Thread-137489] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T00:34:31.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T00:34:31.834 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:34:31.888 [DEBUG] [Thread-137489] [transport.py] [_log()] userauth is OK
2026-01-01T00:34:31.889 [DEBUG] [Thread-137489] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:34:31.889 [DEBUG] [Thread-137489] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:34:31.889 [DEBUG] [Thread-137489] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T00:34:31.889 [DEBUG] [Thread-137489] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:34:31.913 [INFO] [Thread-137489] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:34:31.913 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T00:34:31.914 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:34:32.776 [DEBUG] [Thread-137489] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:34:32.776 [DEBUG] [Thread-137489] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:34:32.824 [DEBUG] [Thread-137489] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:34:32.824 [DEBUG] [Thread-137489] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:34:32.832 [DEBUG] [Thread-137489] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:34:32.840 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:34:32.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T00:34:32.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T00:34:32.857 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:34:32.857 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:34:32.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:34:32.865 [DEBUG] [Thread-137489] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:34:39.666 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:34:39.668 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:34:39.837 [DEBUG] [Thread-137491 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:34:54.887 [DEBUG] [Thread-137492 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:34:56.871 [DEBUG] [Thread-137493 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:35:02.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T00:35:02.881 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T00:35:02.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T00:35:03.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 0, 34, 56), 3.32, 80.4, 0.0, 15.4, 14.3, 0, 1, 0, 2, 0, 0),)
2026-01-01T00:35:03.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 00:34:56
2026-01-01T00:35:03.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T00:35:03.870 [DEBUG] [Thread-137494] [transport.py] [_log()] starting thread (client mode): 0xb6ba30a0
2026-01-01T00:35:03.870 [DEBUG] [Thread-137494] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:35:03.892 [DEBUG] [Thread-137494] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T00:35:03.893 [INFO] [Thread-137494] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T00:35:03.896 [DEBUG] [Thread-137494] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:35:03.896 [DEBUG] [Thread-137494] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T00:35:03.896 [DEBUG] [Thread-137494] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:35:03.896 [DEBUG] [Thread-137494] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:35:03.896 [DEBUG] [Thread-137494] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:35:03.896 [DEBUG] [Thread-137494] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:35:03.896 [DEBUG] [Thread-137494] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:35:03.896 [DEBUG] [Thread-137494] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:35:03.896 [DEBUG] [Thread-137494] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:35:03.896 [DEBUG] [Thread-137494] [transport.py] [_log()] client lang: <none>
2026-01-01T00:35:03.896 [DEBUG] [Thread-137494] [transport.py] [_log()] server lang: <none>
2026-01-01T00:35:03.896 [DEBUG] [Thread-137494] [transport.py] [_log()] kex follows: False
2026-01-01T00:35:03.896 [DEBUG] [Thread-137494] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:35:03.897 [DEBUG] [Thread-137494] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:35:03.897 [DEBUG] [Thread-137494] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:35:03.897 [DEBUG] [Thread-137494] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:35:03.897 [DEBUG] [Thread-137494] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:35:03.897 [DEBUG] [Thread-137494] [transport.py] [_log()] Compression: none
2026-01-01T00:35:03.897 [DEBUG] [Thread-137494] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:35:03.915 [DEBUG] [Thread-137494] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:35:03.915 [DEBUG] [Thread-137494] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:35:03.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T00:35:03.916 [DEBUG] [Thread-137494] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T00:35:03.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:35:03.918 [DEBUG] [Thread-137494] [transport.py] [_log()] userauth is OK
2026-01-01T00:35:03.919 [DEBUG] [Thread-137494] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:35:03.919 [DEBUG] [Thread-137494] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:35:03.919 [DEBUG] [Thread-137494] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T00:35:03.919 [DEBUG] [Thread-137494] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:35:03.937 [INFO] [Thread-137494] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:35:03.938 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:35:05.375 [DEBUG] [Thread-137494] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:35:05.375 [DEBUG] [Thread-137494] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:35:05.376 [DEBUG] [Thread-137494] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T00:35:05.417 [DEBUG] [Thread-137494] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:35:05.417 [DEBUG] [Thread-137494] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:35:05.421 [DEBUG] [Thread-137494] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:35:05.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:35:05.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T00:35:05.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T00:35:05.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T00:35:05.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:35:05.483 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T00:35:05.483 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:35:05.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:35:05.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T00:35:05.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.940759 -999.00  +14.50  11.72     82  +11.60 1 2 1 2 1     0    0 2.68 -11.43 Z..S. 7.8 11.7 202.4 16.3 15.8 -15.1 15.6 -15.3 15.4 -13.9 15.8 -14.6
2026-01-01T00:35:05.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T00:35:05.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T00:35:05.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.940759
2026-01-01T00:35:05.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T00:35:05.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T00:35:05.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T00:35:05.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T00:35:05.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T00:35:05.492 [DEBUG] [Thread-137494] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:35:05.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T00:34:56', tmtdew=3.32, humidity=80.4, cloud=0.0, wind=15.4, temperature=14.3, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T22:34:41.578', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T00:35:05.580 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T00:35:05.591 [DEBUG] [Thread-137497] [transport.py] [_log()] starting thread (client mode): 0xb6b62da0
2026-01-01T00:35:05.591 [DEBUG] [Thread-137497] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:35:05.606 [DEBUG] [Thread-137497] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T00:35:05.606 [INFO] [Thread-137497] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T00:35:05.613 [DEBUG] [Thread-137497] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:35:05.613 [DEBUG] [Thread-137497] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T00:35:05.614 [DEBUG] [Thread-137497] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:35:05.614 [DEBUG] [Thread-137497] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:35:05.614 [DEBUG] [Thread-137497] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:35:05.614 [DEBUG] [Thread-137497] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:35:05.614 [DEBUG] [Thread-137497] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:35:05.614 [DEBUG] [Thread-137497] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:35:05.614 [DEBUG] [Thread-137497] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:35:05.614 [DEBUG] [Thread-137497] [transport.py] [_log()] client lang: <none>
2026-01-01T00:35:05.614 [DEBUG] [Thread-137497] [transport.py] [_log()] server lang: <none>
2026-01-01T00:35:05.614 [DEBUG] [Thread-137497] [transport.py] [_log()] kex follows: False
2026-01-01T00:35:05.614 [DEBUG] [Thread-137497] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:35:05.614 [DEBUG] [Thread-137497] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:35:05.614 [DEBUG] [Thread-137497] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:35:05.614 [DEBUG] [Thread-137497] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:35:05.614 [DEBUG] [Thread-137497] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:35:05.614 [DEBUG] [Thread-137497] [transport.py] [_log()] Compression: none
2026-01-01T00:35:05.614 [DEBUG] [Thread-137497] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:35:05.670 [DEBUG] [Thread-137497] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:35:05.670 [DEBUG] [Thread-137497] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:35:05.671 [DEBUG] [Thread-137497] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T00:35:05.671 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T00:35:05.671 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:35:05.728 [DEBUG] [Thread-137497] [transport.py] [_log()] userauth is OK
2026-01-01T00:35:05.728 [DEBUG] [Thread-137497] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:35:05.728 [DEBUG] [Thread-137497] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:35:05.728 [DEBUG] [Thread-137497] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T00:35:05.728 [DEBUG] [Thread-137497] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:35:05.747 [INFO] [Thread-137497] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:35:05.747 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T00:35:05.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:35:06.588 [DEBUG] [Thread-137497] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:35:06.588 [DEBUG] [Thread-137497] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:35:06.636 [DEBUG] [Thread-137497] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:35:06.636 [DEBUG] [Thread-137497] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:35:06.645 [DEBUG] [Thread-137497] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:35:06.655 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:35:06.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T00:35:06.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
2026-01-01T00:35:06.673 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:35:06.673 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:35:06.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:35:06.681 [DEBUG] [Thread-137497] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:35:09.919 [DEBUG] [Thread-137499 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:35:24.971 [DEBUG] [Thread-137500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:35:36.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T00:35:36.705 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T00:35:36.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T00:35:37.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 0, 35, 28), 3.32, 80.41, 0.0, 15.92, 14.34, 0, 1, 0, 2, 0, 0),)
2026-01-01T00:35:37.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 00:35:28
2026-01-01T00:35:37.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T00:35:37.674 [DEBUG] [Thread-137501] [transport.py] [_log()] starting thread (client mode): 0xb6ba32b0
2026-01-01T00:35:37.674 [DEBUG] [Thread-137501] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:35:37.694 [DEBUG] [Thread-137501] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T00:35:37.695 [INFO] [Thread-137501] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T00:35:37.698 [DEBUG] [Thread-137501] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:35:37.698 [DEBUG] [Thread-137501] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T00:35:37.698 [DEBUG] [Thread-137501] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:35:37.698 [DEBUG] [Thread-137501] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:35:37.698 [DEBUG] [Thread-137501] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:35:37.698 [DEBUG] [Thread-137501] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:35:37.698 [DEBUG] [Thread-137501] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:35:37.698 [DEBUG] [Thread-137501] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:35:37.698 [DEBUG] [Thread-137501] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:35:37.698 [DEBUG] [Thread-137501] [transport.py] [_log()] client lang: <none>
2026-01-01T00:35:37.698 [DEBUG] [Thread-137501] [transport.py] [_log()] server lang: <none>
2026-01-01T00:35:37.699 [DEBUG] [Thread-137501] [transport.py] [_log()] kex follows: False
2026-01-01T00:35:37.699 [DEBUG] [Thread-137501] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:35:37.699 [DEBUG] [Thread-137501] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:35:37.699 [DEBUG] [Thread-137501] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:35:37.699 [DEBUG] [Thread-137501] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:35:37.699 [DEBUG] [Thread-137501] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:35:37.699 [DEBUG] [Thread-137501] [transport.py] [_log()] Compression: none
2026-01-01T00:35:37.699 [DEBUG] [Thread-137501] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:35:37.717 [DEBUG] [Thread-137501] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:35:37.718 [DEBUG] [Thread-137501] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:35:37.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T00:35:37.720 [DEBUG] [Thread-137501] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T00:35:37.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:35:37.722 [DEBUG] [Thread-137501] [transport.py] [_log()] userauth is OK
2026-01-01T00:35:37.722 [DEBUG] [Thread-137501] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:35:37.722 [DEBUG] [Thread-137501] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:35:37.722 [DEBUG] [Thread-137501] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T00:35:37.723 [DEBUG] [Thread-137501] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:35:37.754 [INFO] [Thread-137501] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:35:37.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:35:38.410 [DEBUG] [Thread-137501] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:35:38.410 [DEBUG] [Thread-137501] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:35:38.410 [DEBUG] [Thread-137501] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T00:35:38.451 [DEBUG] [Thread-137501] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:35:38.451 [DEBUG] [Thread-137501] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:35:38.455 [DEBUG] [Thread-137501] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:35:38.466 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:35:38.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T00:35:38.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T00:35:38.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T00:35:38.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:35:38.479 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T00:35:38.479 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:35:38.479 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:35:38.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T00:35:38.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.941106 -999.00  +14.60   9.87     82  +11.60 1 2 1 2 1     0    0 2.74 -11.91 Z..S. 10.6 9.9 192.0 13.1 15.8 -15.3 15.6 -15.2 15.4 -14.1 15.7 -14.4
2026-01-01T00:35:38.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T00:35:38.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T00:35:38.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.941106
2026-01-01T00:35:38.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T00:35:38.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T00:35:38.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T00:35:38.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T00:35:38.481 [DEBUG] [Thread-137501] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:35:38.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T00:35:38.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T00:35:28', tmtdew=3.32, humidity=80.41, cloud=0.0, wind=15.92, temperature=14.34, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T22:35:11.558', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T00:35:38.565 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T00:35:38.577 [DEBUG] [Thread-137504] [transport.py] [_log()] starting thread (client mode): 0xb6bbebc0
2026-01-01T00:35:38.577 [DEBUG] [Thread-137504] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:35:38.592 [DEBUG] [Thread-137504] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T00:35:38.592 [INFO] [Thread-137504] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T00:35:38.599 [DEBUG] [Thread-137504] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:35:38.600 [DEBUG] [Thread-137504] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T00:35:38.600 [DEBUG] [Thread-137504] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:35:38.600 [DEBUG] [Thread-137504] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:35:38.600 [DEBUG] [Thread-137504] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:35:38.600 [DEBUG] [Thread-137504] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:35:38.600 [DEBUG] [Thread-137504] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:35:38.600 [DEBUG] [Thread-137504] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:35:38.600 [DEBUG] [Thread-137504] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:35:38.600 [DEBUG] [Thread-137504] [transport.py] [_log()] client lang: <none>
2026-01-01T00:35:38.600 [DEBUG] [Thread-137504] [transport.py] [_log()] server lang: <none>
2026-01-01T00:35:38.600 [DEBUG] [Thread-137504] [transport.py] [_log()] kex follows: False
2026-01-01T00:35:38.600 [DEBUG] [Thread-137504] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:35:38.600 [DEBUG] [Thread-137504] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:35:38.600 [DEBUG] [Thread-137504] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:35:38.600 [DEBUG] [Thread-137504] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:35:38.600 [DEBUG] [Thread-137504] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:35:38.600 [DEBUG] [Thread-137504] [transport.py] [_log()] Compression: none
2026-01-01T00:35:38.601 [DEBUG] [Thread-137504] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:35:38.660 [DEBUG] [Thread-137504] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:35:38.661 [DEBUG] [Thread-137504] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:35:38.661 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T00:35:38.662 [DEBUG] [Thread-137504] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T00:35:38.663 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:35:38.717 [DEBUG] [Thread-137504] [transport.py] [_log()] userauth is OK
2026-01-01T00:35:38.717 [DEBUG] [Thread-137504] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:35:38.717 [DEBUG] [Thread-137504] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:35:38.717 [DEBUG] [Thread-137504] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T00:35:38.717 [DEBUG] [Thread-137504] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:35:38.736 [INFO] [Thread-137504] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:35:38.736 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T00:35:38.737 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:35:39.587 [DEBUG] [Thread-137504] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:35:39.587 [DEBUG] [Thread-137504] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:35:39.635 [DEBUG] [Thread-137504] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:35:39.635 [DEBUG] [Thread-137504] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:35:39.645 [DEBUG] [Thread-137504] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:35:39.654 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:35: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')
2026-01-01T00:35:39.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T00:35:39.673 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:35:39.673 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:35:39.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:35:39.682 [DEBUG] [Thread-137504] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:35:39.869 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:35:39.871 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:35:40.004 [DEBUG] [Thread-137506 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:35:55.055 [DEBUG] [Thread-137507 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:35:56.948 [DEBUG] [Thread-137508 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:36:09.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T00:36:09.704 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T00:36:09.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T00:36:10.090 [DEBUG] [Thread-137509 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:36:10.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 0, 36, 1), 3.32, 80.41, 0.0, 17.1, 14.3, 0, 1, 0, 2, 0, 0),)
2026-01-01T00:36:10.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 00:36:01
2026-01-01T00:36:10.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T00:36:10.732 [DEBUG] [Thread-137510] [transport.py] [_log()] starting thread (client mode): 0xb1747400
2026-01-01T00:36:10.733 [DEBUG] [Thread-137510] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:36:10.753 [DEBUG] [Thread-137510] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T00:36:10.753 [INFO] [Thread-137510] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T00:36:10.756 [DEBUG] [Thread-137510] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:36:10.756 [DEBUG] [Thread-137510] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T00:36:10.756 [DEBUG] [Thread-137510] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:36:10.756 [DEBUG] [Thread-137510] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:36:10.756 [DEBUG] [Thread-137510] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:36:10.756 [DEBUG] [Thread-137510] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:36:10.756 [DEBUG] [Thread-137510] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:36:10.756 [DEBUG] [Thread-137510] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:36:10.756 [DEBUG] [Thread-137510] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:36:10.756 [DEBUG] [Thread-137510] [transport.py] [_log()] client lang: <none>
2026-01-01T00:36:10.756 [DEBUG] [Thread-137510] [transport.py] [_log()] server lang: <none>
2026-01-01T00:36:10.756 [DEBUG] [Thread-137510] [transport.py] [_log()] kex follows: False
2026-01-01T00:36:10.756 [DEBUG] [Thread-137510] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:36:10.756 [DEBUG] [Thread-137510] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:36:10.756 [DEBUG] [Thread-137510] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:36:10.756 [DEBUG] [Thread-137510] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:36:10.756 [DEBUG] [Thread-137510] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:36:10.756 [DEBUG] [Thread-137510] [transport.py] [_log()] Compression: none
2026-01-01T00:36:10.756 [DEBUG] [Thread-137510] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:36:10.768 [DEBUG] [Thread-137510] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:36:10.768 [DEBUG] [Thread-137510] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:36:10.768 [DEBUG] [Thread-137510] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T00:36:10.769 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T00:36:10.769 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:36:10.769 [DEBUG] [Thread-137510] [transport.py] [_log()] userauth is OK
2026-01-01T00:36:10.769 [DEBUG] [Thread-137510] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:36:10.769 [DEBUG] [Thread-137510] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:36:10.769 [DEBUG] [Thread-137510] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T00:36:10.769 [DEBUG] [Thread-137510] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:36:10.778 [INFO] [Thread-137510] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:36:10.778 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:36:11.422 [DEBUG] [Thread-137510] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:36:11.422 [DEBUG] [Thread-137510] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:36:11.422 [DEBUG] [Thread-137510] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T00:36:11.462 [DEBUG] [Thread-137510] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:36:11.462 [DEBUG] [Thread-137510] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:36:11.465 [DEBUG] [Thread-137510] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:36:11.478 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:36:11.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T00:36:11.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T00:36:11.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T00:36:11.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:36:11.483 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T00:36:11.483 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:36:11.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:36:11.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T00:36:11.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.941453 -999.00  +14.60   8.24     82  +11.60 1 2 1 2 1     0    0 2.77 -10.31 Z..S. 8.4 8.2 185.0 13.1 15.8 -15.3 15.6 -15.2 15.4 -14.0 15.8 -14.5
2026-01-01T00:36:11.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T00:36:11.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T00:36:11.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.941453
2026-01-01T00:36:11.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T00:36:11.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T00:36:11.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T00:36:11.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T00:36:11.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T00:36:11.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T00:36:01', tmtdew=3.32, humidity=80.41, cloud=0.0, wind=17.1, temperature=14.3, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T22:35:41.539', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T00:36:11.484 [DEBUG] [Thread-137510] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:36:11.558 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T00:36:11.570 [DEBUG] [Thread-137513] [transport.py] [_log()] starting thread (client mode): 0xb6bbd1e0
2026-01-01T00:36:11.571 [DEBUG] [Thread-137513] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:36:11.590 [DEBUG] [Thread-137513] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T00:36:11.590 [INFO] [Thread-137513] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T00:36:11.597 [DEBUG] [Thread-137513] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:36:11.597 [DEBUG] [Thread-137513] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T00:36:11.597 [DEBUG] [Thread-137513] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:36:11.597 [DEBUG] [Thread-137513] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:36:11.597 [DEBUG] [Thread-137513] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:36:11.597 [DEBUG] [Thread-137513] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:36:11.597 [DEBUG] [Thread-137513] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:36:11.597 [DEBUG] [Thread-137513] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:36:11.597 [DEBUG] [Thread-137513] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:36:11.598 [DEBUG] [Thread-137513] [transport.py] [_log()] client lang: <none>
2026-01-01T00:36:11.598 [DEBUG] [Thread-137513] [transport.py] [_log()] server lang: <none>
2026-01-01T00:36:11.598 [DEBUG] [Thread-137513] [transport.py] [_log()] kex follows: False
2026-01-01T00:36:11.598 [DEBUG] [Thread-137513] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:36:11.598 [DEBUG] [Thread-137513] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:36:11.598 [DEBUG] [Thread-137513] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:36:11.598 [DEBUG] [Thread-137513] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:36:11.598 [DEBUG] [Thread-137513] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:36:11.598 [DEBUG] [Thread-137513] [transport.py] [_log()] Compression: none
2026-01-01T00:36:11.598 [DEBUG] [Thread-137513] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:36:11.654 [DEBUG] [Thread-137513] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:36:11.654 [DEBUG] [Thread-137513] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:36:11.655 [DEBUG] [Thread-137513] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T00:36:11.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T00:36:11.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:36:11.712 [DEBUG] [Thread-137513] [transport.py] [_log()] userauth is OK
2026-01-01T00:36:11.712 [DEBUG] [Thread-137513] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:36:11.712 [DEBUG] [Thread-137513] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:36:11.712 [DEBUG] [Thread-137513] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T00:36:11.712 [DEBUG] [Thread-137513] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:36:11.725 [INFO] [Thread-137513] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:36:11.725 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T00:36:11.726 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:36:12.552 [DEBUG] [Thread-137513] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:36:12.552 [DEBUG] [Thread-137513] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:36:12.599 [DEBUG] [Thread-137513] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:36:12.600 [DEBUG] [Thread-137513] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:36:12.608 [DEBUG] [Thread-137513] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:36:12.616 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:36:12.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T00:36:12.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T00:36:12.633 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:36:12.633 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:36:12.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:36:12.641 [DEBUG] [Thread-137513] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:36:25.125 [DEBUG] [Thread-137515 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:36:40.073 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:36:40.074 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:36:40.173 [DEBUG] [Thread-137516 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:36:42.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T00:36:42.661 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T00:36:42.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T00:36:43.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 0, 36, 33), 3.45, 79.79, 0.0, 17.57, 15.01, 0, 0, 0, 2, 0, 0),)
2026-01-01T00:36:43.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 00:36:33
2026-01-01T00:36:43.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T00:36:43.633 [DEBUG] [Thread-137517] [transport.py] [_log()] starting thread (client mode): 0xb6b60640
2026-01-01T00:36:43.633 [DEBUG] [Thread-137517] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:36:43.653 [DEBUG] [Thread-137517] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T00:36:43.654 [INFO] [Thread-137517] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T00:36:43.657 [DEBUG] [Thread-137517] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:36:43.657 [DEBUG] [Thread-137517] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T00:36:43.657 [DEBUG] [Thread-137517] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:36:43.657 [DEBUG] [Thread-137517] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:36:43.657 [DEBUG] [Thread-137517] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:36:43.657 [DEBUG] [Thread-137517] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:36:43.657 [DEBUG] [Thread-137517] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:36:43.657 [DEBUG] [Thread-137517] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:36:43.657 [DEBUG] [Thread-137517] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:36:43.657 [DEBUG] [Thread-137517] [transport.py] [_log()] client lang: <none>
2026-01-01T00:36:43.657 [DEBUG] [Thread-137517] [transport.py] [_log()] server lang: <none>
2026-01-01T00:36:43.657 [DEBUG] [Thread-137517] [transport.py] [_log()] kex follows: False
2026-01-01T00:36:43.657 [DEBUG] [Thread-137517] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:36:43.658 [DEBUG] [Thread-137517] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:36:43.658 [DEBUG] [Thread-137517] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:36:43.658 [DEBUG] [Thread-137517] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:36:43.658 [DEBUG] [Thread-137517] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:36:43.658 [DEBUG] [Thread-137517] [transport.py] [_log()] Compression: none
2026-01-01T00:36:43.658 [DEBUG] [Thread-137517] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:36:43.679 [DEBUG] [Thread-137517] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:36:43.679 [DEBUG] [Thread-137517] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:36:43.680 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T00:36:43.680 [DEBUG] [Thread-137517] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T00:36:43.681 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:36:43.683 [DEBUG] [Thread-137517] [transport.py] [_log()] userauth is OK
2026-01-01T00:36:43.683 [DEBUG] [Thread-137517] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:36:43.683 [DEBUG] [Thread-137517] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:36:43.683 [DEBUG] [Thread-137517] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T00:36:43.683 [DEBUG] [Thread-137517] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:36:43.706 [INFO] [Thread-137517] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:36:43.707 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:36:44.358 [DEBUG] [Thread-137517] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:36:44.358 [DEBUG] [Thread-137517] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:36:44.358 [DEBUG] [Thread-137517] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T00:36:44.399 [DEBUG] [Thread-137517] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:36:44.399 [DEBUG] [Thread-137517] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:36:44.402 [DEBUG] [Thread-137517] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:36:44.414 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:36:44.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T00:36:44.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T00:36:44.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T00:36:44.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:36:44.425 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T00:36:44.425 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:36:44.425 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:36:44.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T00:36:44.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.941801 -999.00  +14.60  10.40     82  +11.60 1 2 1 2 1     0    0 2.68 -9.84 Z..S. 12.9 10.4 196.5 12.6 15.8 -15.3 15.6 -15.2 15.4 -13.9 15.7 -14.4
2026-01-01T00:36:44.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T00:36:44.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T00:36:44.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.941801
2026-01-01T00:36:44.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T00:36:44.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T00:36:44.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T00:36:44.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T00:36:44.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T00:36:44.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T00:36:33', tmtdew=3.45, humidity=79.79, cloud=0.0, wind=17.57, temperature=15.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T22:36:11.606', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T00:36:44.428 [DEBUG] [Thread-137517] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:36:44.517 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T00:36:44.528 [DEBUG] [Thread-137520] [transport.py] [_log()] starting thread (client mode): 0xb6ba2470
2026-01-01T00:36:44.528 [DEBUG] [Thread-137520] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:36:44.543 [DEBUG] [Thread-137520] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T00:36:44.543 [INFO] [Thread-137520] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T00:36:44.551 [DEBUG] [Thread-137520] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:36:44.551 [DEBUG] [Thread-137520] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T00:36:44.551 [DEBUG] [Thread-137520] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:36:44.551 [DEBUG] [Thread-137520] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:36:44.551 [DEBUG] [Thread-137520] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:36:44.551 [DEBUG] [Thread-137520] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:36:44.551 [DEBUG] [Thread-137520] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:36:44.551 [DEBUG] [Thread-137520] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:36:44.551 [DEBUG] [Thread-137520] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:36:44.551 [DEBUG] [Thread-137520] [transport.py] [_log()] client lang: <none>
2026-01-01T00:36:44.551 [DEBUG] [Thread-137520] [transport.py] [_log()] server lang: <none>
2026-01-01T00:36:44.551 [DEBUG] [Thread-137520] [transport.py] [_log()] kex follows: False
2026-01-01T00:36:44.551 [DEBUG] [Thread-137520] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:36:44.551 [DEBUG] [Thread-137520] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:36:44.551 [DEBUG] [Thread-137520] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:36:44.551 [DEBUG] [Thread-137520] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:36:44.551 [DEBUG] [Thread-137520] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:36:44.551 [DEBUG] [Thread-137520] [transport.py] [_log()] Compression: none
2026-01-01T00:36:44.551 [DEBUG] [Thread-137520] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:36:44.608 [DEBUG] [Thread-137520] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:36:44.609 [DEBUG] [Thread-137520] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:36:44.609 [DEBUG] [Thread-137520] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T00:36:44.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T00:36:44.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:36:44.664 [DEBUG] [Thread-137520] [transport.py] [_log()] userauth is OK
2026-01-01T00:36:44.665 [DEBUG] [Thread-137520] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:36:44.665 [DEBUG] [Thread-137520] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:36:44.665 [DEBUG] [Thread-137520] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T00:36:44.665 [DEBUG] [Thread-137520] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:36:44.686 [INFO] [Thread-137520] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:36:44.686 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T00:36:44.687 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:36:45.506 [DEBUG] [Thread-137520] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:36:45.506 [DEBUG] [Thread-137520] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:36:45.554 [DEBUG] [Thread-137520] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:36:45.554 [DEBUG] [Thread-137520] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:36:45.562 [DEBUG] [Thread-137520] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:36:45.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:36:45.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T00:36:45.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T00:36:45.586 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:36:45.586 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:36:45.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:36:45.593 [DEBUG] [Thread-137520] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:36:55.203 [DEBUG] [Thread-137522 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:36:57.023 [DEBUG] [Thread-137523 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:37:10.268 [DEBUG] [Thread-137524 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:37:15.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T00:37:15.616 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T00:37:15.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T00:37:16.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 0, 37, 5), 3.27, 80.41, 0.0, 16.09, 14.32, 0, 1, 0, 2, 0, 0),)
2026-01-01T00:37:16.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 00:37:05
2026-01-01T00:37:16.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T00:37:16.605 [DEBUG] [Thread-137525] [transport.py] [_log()] starting thread (client mode): 0xb6ba12d0
2026-01-01T00:37:16.605 [DEBUG] [Thread-137525] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:37:16.625 [DEBUG] [Thread-137525] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T00:37:16.625 [INFO] [Thread-137525] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T00:37:16.627 [DEBUG] [Thread-137525] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:37:16.627 [DEBUG] [Thread-137525] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T00:37:16.627 [DEBUG] [Thread-137525] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:37:16.627 [DEBUG] [Thread-137525] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:37:16.627 [DEBUG] [Thread-137525] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:37:16.627 [DEBUG] [Thread-137525] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:37:16.627 [DEBUG] [Thread-137525] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:37:16.627 [DEBUG] [Thread-137525] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:37:16.627 [DEBUG] [Thread-137525] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:37:16.627 [DEBUG] [Thread-137525] [transport.py] [_log()] client lang: <none>
2026-01-01T00:37:16.627 [DEBUG] [Thread-137525] [transport.py] [_log()] server lang: <none>
2026-01-01T00:37:16.627 [DEBUG] [Thread-137525] [transport.py] [_log()] kex follows: False
2026-01-01T00:37:16.627 [DEBUG] [Thread-137525] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:37:16.627 [DEBUG] [Thread-137525] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:37:16.627 [DEBUG] [Thread-137525] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:37:16.627 [DEBUG] [Thread-137525] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:37:16.627 [DEBUG] [Thread-137525] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:37:16.627 [DEBUG] [Thread-137525] [transport.py] [_log()] Compression: none
2026-01-01T00:37:16.627 [DEBUG] [Thread-137525] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:37:16.638 [DEBUG] [Thread-137525] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:37:16.638 [DEBUG] [Thread-137525] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:37:16.639 [DEBUG] [Thread-137525] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T00:37:16.639 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T00:37:16.640 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:37:16.641 [DEBUG] [Thread-137525] [transport.py] [_log()] userauth is OK
2026-01-01T00:37:16.641 [DEBUG] [Thread-137525] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:37:16.641 [DEBUG] [Thread-137525] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:37:16.641 [DEBUG] [Thread-137525] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T00:37:16.641 [DEBUG] [Thread-137525] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:37:16.655 [INFO] [Thread-137525] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:37:16.656 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:37:17.306 [DEBUG] [Thread-137525] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:37:17.306 [DEBUG] [Thread-137525] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:37:17.306 [DEBUG] [Thread-137525] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T00:37:17.347 [DEBUG] [Thread-137525] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:37:17.347 [DEBUG] [Thread-137525] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:37:17.351 [DEBUG] [Thread-137525] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:37:17.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:37:17.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T00:37:17.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T00:37:17.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T00:37:17.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:37:17.370 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T00:37:17.370 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:37:17.370 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:37:17.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T00:37:17.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.942495 -999.00  +14.60  12.78     82  +11.60 1 2 1 2 1     0    0 2.76 -8.59 ZNE.. 11.0 12.8 198.4 15.3 15.7 -15.1 15.6 -14.9 15.4 -13.6 15.8 -14.2
2026-01-01T00:37:17.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T00:37:17.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T00:37:17.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.942495
2026-01-01T00:37:17.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T00:37:17.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T00:37:17.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T00:37:17.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T00:37:17.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T00:37:17.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T00:37:05', tmtdew=3.27, humidity=80.41, cloud=0.0, wind=16.09, temperature=14.32, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T22:37:11.568', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T00:37:17.374 [DEBUG] [Thread-137525] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:37:17.456 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T00:37:17.469 [DEBUG] [Thread-137528] [transport.py] [_log()] starting thread (client mode): 0xb6ba38e0
2026-01-01T00:37:17.469 [DEBUG] [Thread-137528] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:37:17.484 [DEBUG] [Thread-137528] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T00:37:17.484 [INFO] [Thread-137528] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T00:37:17.492 [DEBUG] [Thread-137528] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:37:17.492 [DEBUG] [Thread-137528] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T00:37:17.492 [DEBUG] [Thread-137528] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:37:17.492 [DEBUG] [Thread-137528] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:37:17.492 [DEBUG] [Thread-137528] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:37:17.493 [DEBUG] [Thread-137528] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:37:17.493 [DEBUG] [Thread-137528] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:37:17.493 [DEBUG] [Thread-137528] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:37:17.493 [DEBUG] [Thread-137528] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:37:17.493 [DEBUG] [Thread-137528] [transport.py] [_log()] client lang: <none>
2026-01-01T00:37:17.493 [DEBUG] [Thread-137528] [transport.py] [_log()] server lang: <none>
2026-01-01T00:37:17.493 [DEBUG] [Thread-137528] [transport.py] [_log()] kex follows: False
2026-01-01T00:37:17.493 [DEBUG] [Thread-137528] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:37:17.493 [DEBUG] [Thread-137528] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:37:17.493 [DEBUG] [Thread-137528] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:37:17.493 [DEBUG] [Thread-137528] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:37:17.493 [DEBUG] [Thread-137528] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:37:17.493 [DEBUG] [Thread-137528] [transport.py] [_log()] Compression: none
2026-01-01T00:37:17.493 [DEBUG] [Thread-137528] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:37:17.548 [DEBUG] [Thread-137528] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:37:17.548 [DEBUG] [Thread-137528] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:37:17.549 [DEBUG] [Thread-137528] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T00:37:17.549 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T00:37:17.550 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:37:17.604 [DEBUG] [Thread-137528] [transport.py] [_log()] userauth is OK
2026-01-01T00:37:17.605 [DEBUG] [Thread-137528] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:37:17.605 [DEBUG] [Thread-137528] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:37:17.605 [DEBUG] [Thread-137528] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T00:37:17.605 [DEBUG] [Thread-137528] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:37:17.623 [INFO] [Thread-137528] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:37:17.624 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T00:37:17.624 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:37:18.455 [DEBUG] [Thread-137528] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:37:18.455 [DEBUG] [Thread-137528] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:37:18.504 [DEBUG] [Thread-137528] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:37:18.504 [DEBUG] [Thread-137528] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:37:18.513 [DEBUG] [Thread-137528] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:37:18.523 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:37:18.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T00:37:18.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T00:37:18.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:37:18.542 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:37:18.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:37:18.550 [DEBUG] [Thread-137528] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:37:25.302 [DEBUG] [Thread-137530 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:37:40.274 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:37:40.275 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:37:40.343 [DEBUG] [Thread-137531 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:37:48.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T00:37:48.573 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T00:37:48.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T00:37:49.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 0, 37, 37), 3.31, 80.43, 0.0, 17.24, 14.32, 0, 1, 0, 2, 0, 0),)
2026-01-01T00:37:49.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 00:37:37
2026-01-01T00:37:49.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T00:37:49.560 [DEBUG] [Thread-137532] [transport.py] [_log()] starting thread (client mode): 0xb6bbf580
2026-01-01T00:37:49.561 [DEBUG] [Thread-137532] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:37:49.580 [DEBUG] [Thread-137532] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T00:37:49.581 [INFO] [Thread-137532] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T00:37:49.582 [DEBUG] [Thread-137532] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:37:49.582 [DEBUG] [Thread-137532] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T00:37:49.582 [DEBUG] [Thread-137532] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:37:49.582 [DEBUG] [Thread-137532] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:37:49.582 [DEBUG] [Thread-137532] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:37:49.582 [DEBUG] [Thread-137532] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:37:49.582 [DEBUG] [Thread-137532] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:37:49.582 [DEBUG] [Thread-137532] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:37:49.582 [DEBUG] [Thread-137532] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:37:49.582 [DEBUG] [Thread-137532] [transport.py] [_log()] client lang: <none>
2026-01-01T00:37:49.582 [DEBUG] [Thread-137532] [transport.py] [_log()] server lang: <none>
2026-01-01T00:37:49.582 [DEBUG] [Thread-137532] [transport.py] [_log()] kex follows: False
2026-01-01T00:37:49.582 [DEBUG] [Thread-137532] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:37:49.582 [DEBUG] [Thread-137532] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:37:49.582 [DEBUG] [Thread-137532] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:37:49.582 [DEBUG] [Thread-137532] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:37:49.583 [DEBUG] [Thread-137532] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:37:49.583 [DEBUG] [Thread-137532] [transport.py] [_log()] Compression: none
2026-01-01T00:37:49.583 [DEBUG] [Thread-137532] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:37:49.597 [DEBUG] [Thread-137532] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:37:49.598 [DEBUG] [Thread-137532] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:37:49.598 [DEBUG] [Thread-137532] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T00:37:49.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T00:37:49.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:37:49.600 [DEBUG] [Thread-137532] [transport.py] [_log()] userauth is OK
2026-01-01T00:37:49.601 [DEBUG] [Thread-137532] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:37:49.601 [DEBUG] [Thread-137532] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:37:49.601 [DEBUG] [Thread-137532] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T00:37:49.601 [DEBUG] [Thread-137532] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:37:49.625 [INFO] [Thread-137532] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:37:49.625 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:37:50.244 [DEBUG] [Thread-137532] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:37:50.245 [DEBUG] [Thread-137532] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:37:50.245 [DEBUG] [Thread-137532] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T00:37:50.285 [DEBUG] [Thread-137532] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:37:50.285 [DEBUG] [Thread-137532] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:37:50.288 [DEBUG] [Thread-137532] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:37:50.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:37:50.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T00:37:50.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T00:37:50.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T00:37:50.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:37:50.309 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T00:37:50.309 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:37:50.309 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:37:50.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T00:37:50.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.942842 -999.00  +14.60  10.53     82  +11.60 1 2 1 2 1     0    0 2.74 -7.95 ZNE.. 11.1 10.5 195.8 14.7 15.8 -15.0 15.6 -14.6 15.5 -13.3 15.8 -14.0
2026-01-01T00:37:50.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T00:37:50.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T00:37:50.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.942842
2026-01-01T00:37:50.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T00:37:50.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T00:37:50.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T00:37:50.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T00:37:50.311 [DEBUG] [Thread-137532] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:37:50.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T00:37:50.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T00:37:37', tmtdew=3.31, humidity=80.43, cloud=0.0, wind=17.24, temperature=14.32, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T22:37:41.549', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T00:37:50.395 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T00:37:50.407 [DEBUG] [Thread-137535] [transport.py] [_log()] starting thread (client mode): 0xb6ba0e20
2026-01-01T00:37:50.407 [DEBUG] [Thread-137535] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:37:50.422 [DEBUG] [Thread-137535] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T00:37:50.422 [INFO] [Thread-137535] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T00:37:50.429 [DEBUG] [Thread-137535] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:37:50.430 [DEBUG] [Thread-137535] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T00:37:50.430 [DEBUG] [Thread-137535] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:37:50.430 [DEBUG] [Thread-137535] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:37:50.430 [DEBUG] [Thread-137535] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:37:50.430 [DEBUG] [Thread-137535] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:37:50.430 [DEBUG] [Thread-137535] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:37:50.430 [DEBUG] [Thread-137535] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:37:50.430 [DEBUG] [Thread-137535] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:37:50.430 [DEBUG] [Thread-137535] [transport.py] [_log()] client lang: <none>
2026-01-01T00:37:50.430 [DEBUG] [Thread-137535] [transport.py] [_log()] server lang: <none>
2026-01-01T00:37:50.430 [DEBUG] [Thread-137535] [transport.py] [_log()] kex follows: False
2026-01-01T00:37:50.430 [DEBUG] [Thread-137535] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:37:50.430 [DEBUG] [Thread-137535] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:37:50.430 [DEBUG] [Thread-137535] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:37:50.430 [DEBUG] [Thread-137535] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:37:50.430 [DEBUG] [Thread-137535] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:37:50.430 [DEBUG] [Thread-137535] [transport.py] [_log()] Compression: none
2026-01-01T00:37:50.430 [DEBUG] [Thread-137535] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:37:50.488 [DEBUG] [Thread-137535] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:37:50.489 [DEBUG] [Thread-137535] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:37:50.490 [DEBUG] [Thread-137535] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T00:37:50.490 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T00:37:50.490 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:37:50.544 [DEBUG] [Thread-137535] [transport.py] [_log()] userauth is OK
2026-01-01T00:37:50.545 [DEBUG] [Thread-137535] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:37:50.545 [DEBUG] [Thread-137535] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:37:50.545 [DEBUG] [Thread-137535] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T00:37:50.545 [DEBUG] [Thread-137535] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:37:50.568 [INFO] [Thread-137535] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:37:50.568 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T00:37:50.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:37:51.429 [DEBUG] [Thread-137535] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:37:51.429 [DEBUG] [Thread-137535] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:37:51.477 [DEBUG] [Thread-137535] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:37:51.477 [DEBUG] [Thread-137535] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:37:51.487 [DEBUG] [Thread-137535] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:37:51.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:37:51.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T00:37:51.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T00:37:51.515 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:37:51.515 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:37:51.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:37:51.523 [DEBUG] [Thread-137535] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:37:55.382 [DEBUG] [Thread-137537 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:37:57.092 [DEBUG] [Thread-137538 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:38:10.438 [DEBUG] [Thread-137539 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:38:21.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T00:38:21.532 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T00:38:21.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T00:38:22.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 0, 38, 9), 3.32, 80.38, 0.0, 16.99, 14.27, 0, 1, 0, 2, 0, 0),)
2026-01-01T00:38:22.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 00:38:09
2026-01-01T00:38:22.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T00:38:22.500 [DEBUG] [Thread-137540] [transport.py] [_log()] starting thread (client mode): 0xb955abf0
2026-01-01T00:38:22.500 [DEBUG] [Thread-137540] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:38:22.520 [DEBUG] [Thread-137540] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T00:38:22.520 [INFO] [Thread-137540] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T00:38:22.521 [DEBUG] [Thread-137540] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:38:22.521 [DEBUG] [Thread-137540] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T00:38:22.521 [DEBUG] [Thread-137540] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:38:22.521 [DEBUG] [Thread-137540] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:38:22.521 [DEBUG] [Thread-137540] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:38:22.521 [DEBUG] [Thread-137540] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:38:22.521 [DEBUG] [Thread-137540] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:38:22.521 [DEBUG] [Thread-137540] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:38:22.521 [DEBUG] [Thread-137540] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:38:22.521 [DEBUG] [Thread-137540] [transport.py] [_log()] client lang: <none>
2026-01-01T00:38:22.521 [DEBUG] [Thread-137540] [transport.py] [_log()] server lang: <none>
2026-01-01T00:38:22.521 [DEBUG] [Thread-137540] [transport.py] [_log()] kex follows: False
2026-01-01T00:38:22.521 [DEBUG] [Thread-137540] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:38:22.522 [DEBUG] [Thread-137540] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:38:22.522 [DEBUG] [Thread-137540] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:38:22.522 [DEBUG] [Thread-137540] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:38:22.522 [DEBUG] [Thread-137540] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:38:22.522 [DEBUG] [Thread-137540] [transport.py] [_log()] Compression: none
2026-01-01T00:38:22.522 [DEBUG] [Thread-137540] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:38:22.532 [DEBUG] [Thread-137540] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:38:22.532 [DEBUG] [Thread-137540] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:38:22.533 [DEBUG] [Thread-137540] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T00:38:22.533 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T00:38:22.534 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:38:22.535 [DEBUG] [Thread-137540] [transport.py] [_log()] userauth is OK
2026-01-01T00:38:22.535 [DEBUG] [Thread-137540] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:38:22.535 [DEBUG] [Thread-137540] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:38:22.535 [DEBUG] [Thread-137540] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T00:38:22.535 [DEBUG] [Thread-137540] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:38:22.560 [INFO] [Thread-137540] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:38:22.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:38:23.199 [DEBUG] [Thread-137540] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:38:23.199 [DEBUG] [Thread-137540] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:38:23.199 [DEBUG] [Thread-137540] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T00:38:23.240 [DEBUG] [Thread-137540] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:38:23.240 [DEBUG] [Thread-137540] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:38:23.243 [DEBUG] [Thread-137540] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:38:23.249 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:38:23.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T00:38:23.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T00:38:23.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T00:38:23.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:38:23.263 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T00:38:23.263 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:38:23.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:38:23.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T00:38:23.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.943189 -999.00  +14.60   7.53     82  +11.60 1 2 1 2 1     0    0 2.74 -7.30 z..S. 9.0 7.5 202.8 13.1 15.8 -14.9 15.6 -15.0 15.4 -13.1 15.7 -13.9
2026-01-01T00:38:23.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T00:38:23.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T00:38:23.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.943189
2026-01-01T00:38:23.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T00:38:23.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T00:38:23.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T00:38:23.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T00:38:23.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T00:38:23.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T00:38:09', tmtdew=3.32, humidity=80.38, cloud=0.0, wind=16.99, temperature=14.27, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T22:38:11.530', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T00:38:23.266 [DEBUG] [Thread-137540] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:38:23.351 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T00:38:23.362 [DEBUG] [Thread-137543] [transport.py] [_log()] starting thread (client mode): 0xb955ac80
2026-01-01T00:38:23.362 [DEBUG] [Thread-137543] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:38:23.379 [DEBUG] [Thread-137543] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T00:38:23.379 [INFO] [Thread-137543] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T00:38:23.387 [DEBUG] [Thread-137543] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:38:23.387 [DEBUG] [Thread-137543] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T00:38:23.387 [DEBUG] [Thread-137543] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:38:23.387 [DEBUG] [Thread-137543] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:38:23.387 [DEBUG] [Thread-137543] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:38:23.388 [DEBUG] [Thread-137543] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:38:23.388 [DEBUG] [Thread-137543] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:38:23.388 [DEBUG] [Thread-137543] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:38:23.388 [DEBUG] [Thread-137543] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:38:23.388 [DEBUG] [Thread-137543] [transport.py] [_log()] client lang: <none>
2026-01-01T00:38:23.388 [DEBUG] [Thread-137543] [transport.py] [_log()] server lang: <none>
2026-01-01T00:38:23.389 [DEBUG] [Thread-137543] [transport.py] [_log()] kex follows: False
2026-01-01T00:38:23.389 [DEBUG] [Thread-137543] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:38:23.389 [DEBUG] [Thread-137543] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:38:23.389 [DEBUG] [Thread-137543] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:38:23.389 [DEBUG] [Thread-137543] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:38:23.389 [DEBUG] [Thread-137543] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:38:23.389 [DEBUG] [Thread-137543] [transport.py] [_log()] Compression: none
2026-01-01T00:38:23.389 [DEBUG] [Thread-137543] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:38:23.444 [DEBUG] [Thread-137543] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:38:23.445 [DEBUG] [Thread-137543] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:38:23.445 [DEBUG] [Thread-137543] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T00:38:23.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T00:38:23.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:38:23.504 [DEBUG] [Thread-137543] [transport.py] [_log()] userauth is OK
2026-01-01T00:38:23.504 [DEBUG] [Thread-137543] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:38:23.504 [DEBUG] [Thread-137543] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:38:23.504 [DEBUG] [Thread-137543] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T00:38:23.504 [DEBUG] [Thread-137543] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:38:23.525 [INFO] [Thread-137543] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:38:23.526 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T00:38:23.526 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:38:24.374 [DEBUG] [Thread-137543] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:38:24.375 [DEBUG] [Thread-137543] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:38:24.424 [DEBUG] [Thread-137543] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:38:24.424 [DEBUG] [Thread-137543] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:38:24.436 [DEBUG] [Thread-137543] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:38:24.445 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:38:24.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T00:38:24.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T00:38:24.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:38:24.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:38:24.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:38:24.478 [DEBUG] [Thread-137543] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:38:25.471 [DEBUG] [Thread-137545 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:38:40.478 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:38:40.479 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:38:40.529 [DEBUG] [Thread-137546 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:38:54.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T00:38:54.473 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T00:38:54.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
2026-01-01T00:38:55.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 0, 38, 41), 3.31, 80.43, 0.0, 16.18, 14.32, 0, 1, 0, 2, 0, 0),)
2026-01-01T00:38:55.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 00:38:41
2026-01-01T00:38:55.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T00:38:55.450 [DEBUG] [Thread-137547] [transport.py] [_log()] starting thread (client mode): 0xb1745ed0
2026-01-01T00:38:55.450 [DEBUG] [Thread-137547] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:38:55.469 [DEBUG] [Thread-137547] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T00:38:55.469 [INFO] [Thread-137547] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T00:38:55.471 [DEBUG] [Thread-137547] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:38:55.471 [DEBUG] [Thread-137547] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T00:38:55.471 [DEBUG] [Thread-137547] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:38:55.471 [DEBUG] [Thread-137547] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:38:55.471 [DEBUG] [Thread-137547] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:38:55.471 [DEBUG] [Thread-137547] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:38:55.471 [DEBUG] [Thread-137547] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:38:55.471 [DEBUG] [Thread-137547] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:38:55.472 [DEBUG] [Thread-137547] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:38:55.472 [DEBUG] [Thread-137547] [transport.py] [_log()] client lang: <none>
2026-01-01T00:38:55.472 [DEBUG] [Thread-137547] [transport.py] [_log()] server lang: <none>
2026-01-01T00:38:55.472 [DEBUG] [Thread-137547] [transport.py] [_log()] kex follows: False
2026-01-01T00:38:55.472 [DEBUG] [Thread-137547] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:38:55.472 [DEBUG] [Thread-137547] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:38:55.472 [DEBUG] [Thread-137547] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:38:55.472 [DEBUG] [Thread-137547] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:38:55.472 [DEBUG] [Thread-137547] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:38:55.472 [DEBUG] [Thread-137547] [transport.py] [_log()] Compression: none
2026-01-01T00:38:55.472 [DEBUG] [Thread-137547] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:38:55.483 [DEBUG] [Thread-137547] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:38:55.484 [DEBUG] [Thread-137547] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:38:55.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T00:38:55.484 [DEBUG] [Thread-137547] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T00:38:55.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:38:55.485 [DEBUG] [Thread-137547] [transport.py] [_log()] userauth is OK
2026-01-01T00:38:55.485 [DEBUG] [Thread-137547] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:38:55.485 [DEBUG] [Thread-137547] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:38:55.485 [DEBUG] [Thread-137547] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T00:38:55.486 [DEBUG] [Thread-137547] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:38:55.502 [INFO] [Thread-137547] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:38:55.502 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:38:55.563 [DEBUG] [Thread-137549 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:38:56.123 [DEBUG] [Thread-137547] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:38:56.123 [DEBUG] [Thread-137547] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:38:56.124 [DEBUG] [Thread-137547] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T00:38:56.164 [DEBUG] [Thread-137547] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:38:56.164 [DEBUG] [Thread-137547] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:38:56.167 [DEBUG] [Thread-137547] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:38:56.176 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:38:56.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T00:38:56.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T00:38:56.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T00:38:56.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:38:56.187 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T00:38:56.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:38:56.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:38:56.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T00:38:56.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.943537 -999.00  +14.60   9.64     82  +11.60 1 2 1 2 1     0    0 2.79 -6.94 z..S. 8.0 9.6 208.6 13.8 15.8 -14.7 15.6 -14.4 15.4 -13.0 15.8 -14.0
2026-01-01T00:38:56.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T00:38:56.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T00:38:56.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.943537
2026-01-01T00:38:56.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T00:38:56.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T00:38:56.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T00:38:56.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T00:38:56.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T00:38:56.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T00:38:41', tmtdew=3.31, humidity=80.43, cloud=0.0, wind=16.18, temperature=14.32, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T22:38:41.597', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T00:38:56.189 [DEBUG] [Thread-137547] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:38:56.276 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T00:38:56.288 [DEBUG] [Thread-137551] [transport.py] [_log()] starting thread (client mode): 0xb6bbc400
2026-01-01T00:38:56.288 [DEBUG] [Thread-137551] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:38:56.303 [DEBUG] [Thread-137551] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T00:38:56.303 [INFO] [Thread-137551] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T00:38:56.311 [DEBUG] [Thread-137551] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:38:56.312 [DEBUG] [Thread-137551] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T00:38:56.312 [DEBUG] [Thread-137551] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:38:56.313 [DEBUG] [Thread-137551] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:38:56.313 [DEBUG] [Thread-137551] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:38:56.313 [DEBUG] [Thread-137551] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:38:56.313 [DEBUG] [Thread-137551] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:38:56.313 [DEBUG] [Thread-137551] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:38:56.313 [DEBUG] [Thread-137551] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:38:56.313 [DEBUG] [Thread-137551] [transport.py] [_log()] client lang: <none>
2026-01-01T00:38:56.313 [DEBUG] [Thread-137551] [transport.py] [_log()] server lang: <none>
2026-01-01T00:38:56.313 [DEBUG] [Thread-137551] [transport.py] [_log()] kex follows: False
2026-01-01T00:38:56.313 [DEBUG] [Thread-137551] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:38:56.313 [DEBUG] [Thread-137551] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:38:56.313 [DEBUG] [Thread-137551] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:38:56.313 [DEBUG] [Thread-137551] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:38:56.313 [DEBUG] [Thread-137551] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:38:56.313 [DEBUG] [Thread-137551] [transport.py] [_log()] Compression: none
2026-01-01T00:38:56.313 [DEBUG] [Thread-137551] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:38:56.367 [DEBUG] [Thread-137551] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:38:56.368 [DEBUG] [Thread-137551] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:38:56.368 [DEBUG] [Thread-137551] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T00:38:56.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T00:38:56.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:38:56.424 [DEBUG] [Thread-137551] [transport.py] [_log()] userauth is OK
2026-01-01T00:38:56.424 [DEBUG] [Thread-137551] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:38:56.424 [DEBUG] [Thread-137551] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:38:56.424 [DEBUG] [Thread-137551] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T00:38:56.424 [DEBUG] [Thread-137551] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:38:56.441 [INFO] [Thread-137551] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:38:56.441 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T00:38:56.442 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:38:57.162 [DEBUG] [Thread-137553 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:38:57.239 [DEBUG] [Thread-137551] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:38:57.240 [DEBUG] [Thread-137551] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:38:57.288 [DEBUG] [Thread-137551] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:38:57.288 [DEBUG] [Thread-137551] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:38:57.298 [DEBUG] [Thread-137551] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:38:57.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:38:57.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T00:38:57.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T00:38:57.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:38:57.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:38:57.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:38:57.334 [DEBUG] [Thread-137551] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:39:10.601 [DEBUG] [Thread-137554 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:39:25.656 [DEBUG] [Thread-137555 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:39:27.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T00:39:27.357 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T00:39:27.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T00:39:28.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 0, 39, 14), 3.3, 80.51, 0.0, 16.57, 14.34, 0, 1, 0, 2, 0, 0),)
2026-01-01T00:39:28.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 00:39:14
2026-01-01T00:39:28.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T00:39:28.350 [DEBUG] [Thread-137556] [transport.py] [_log()] starting thread (client mode): 0xb6ba1600
2026-01-01T00:39:28.350 [DEBUG] [Thread-137556] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:39:28.372 [DEBUG] [Thread-137556] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T00:39:28.373 [INFO] [Thread-137556] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T00:39:28.376 [DEBUG] [Thread-137556] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:39:28.376 [DEBUG] [Thread-137556] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T00:39:28.376 [DEBUG] [Thread-137556] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:39:28.377 [DEBUG] [Thread-137556] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:39:28.377 [DEBUG] [Thread-137556] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:39:28.377 [DEBUG] [Thread-137556] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:39:28.377 [DEBUG] [Thread-137556] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:39:28.377 [DEBUG] [Thread-137556] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:39:28.377 [DEBUG] [Thread-137556] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:39:28.377 [DEBUG] [Thread-137556] [transport.py] [_log()] client lang: <none>
2026-01-01T00:39:28.377 [DEBUG] [Thread-137556] [transport.py] [_log()] server lang: <none>
2026-01-01T00:39:28.377 [DEBUG] [Thread-137556] [transport.py] [_log()] kex follows: False
2026-01-01T00:39:28.377 [DEBUG] [Thread-137556] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:39:28.377 [DEBUG] [Thread-137556] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:39:28.377 [DEBUG] [Thread-137556] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:39:28.377 [DEBUG] [Thread-137556] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:39:28.377 [DEBUG] [Thread-137556] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:39:28.377 [DEBUG] [Thread-137556] [transport.py] [_log()] Compression: none
2026-01-01T00:39:28.377 [DEBUG] [Thread-137556] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:39:28.394 [DEBUG] [Thread-137556] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:39:28.395 [DEBUG] [Thread-137556] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:39:28.395 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T00:39:28.396 [DEBUG] [Thread-137556] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T00:39:28.397 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:39:28.398 [DEBUG] [Thread-137556] [transport.py] [_log()] userauth is OK
2026-01-01T00:39:28.398 [DEBUG] [Thread-137556] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:39:28.398 [DEBUG] [Thread-137556] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:39:28.398 [DEBUG] [Thread-137556] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T00:39:28.398 [DEBUG] [Thread-137556] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:39:28.421 [INFO] [Thread-137556] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:39:28.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:39:29.185 [DEBUG] [Thread-137556] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:39:29.185 [DEBUG] [Thread-137556] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:39:29.186 [DEBUG] [Thread-137556] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T00:39:29.226 [DEBUG] [Thread-137556] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:39:29.226 [DEBUG] [Thread-137556] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:39:29.229 [DEBUG] [Thread-137556] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:39:29.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:39:29.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T00:39:29.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T00:39:29.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T00:39:29.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:39:29.249 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T00:39:29.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:39:29.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:39:29.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T00:39:29.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.943537 -999.00  +14.60   9.64     82  +11.60 1 2 1 2 1     0    0 2.79 -6.94 z..S. 8.0 9.6 208.6 13.8 15.8 -14.7 15.6 -14.4 15.4 -13.0 15.8 -14.0
2026-01-01T00:39:29.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T00:39:29.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T00:39:29.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.943537
2026-01-01T00:39:29.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T00:39:29.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T00:39:29.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T00:39:29.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T00:39:29.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T00:39:29.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T00:39:14', tmtdew=3.3, humidity=80.51, cloud=0.0, wind=16.57, temperature=14.34, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T22:38:41.597', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T00:39:29.252 [DEBUG] [Thread-137556] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:39:29.337 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T00:39:29.348 [DEBUG] [Thread-137559] [transport.py] [_log()] starting thread (client mode): 0xb9558a60
2026-01-01T00:39:29.348 [DEBUG] [Thread-137559] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:39:29.363 [DEBUG] [Thread-137559] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T00:39:29.363 [INFO] [Thread-137559] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T00:39:29.370 [DEBUG] [Thread-137559] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:39:29.370 [DEBUG] [Thread-137559] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T00:39:29.370 [DEBUG] [Thread-137559] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:39:29.370 [DEBUG] [Thread-137559] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:39:29.370 [DEBUG] [Thread-137559] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:39:29.370 [DEBUG] [Thread-137559] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:39:29.370 [DEBUG] [Thread-137559] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:39:29.371 [DEBUG] [Thread-137559] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:39:29.371 [DEBUG] [Thread-137559] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:39:29.371 [DEBUG] [Thread-137559] [transport.py] [_log()] client lang: <none>
2026-01-01T00:39:29.371 [DEBUG] [Thread-137559] [transport.py] [_log()] server lang: <none>
2026-01-01T00:39:29.371 [DEBUG] [Thread-137559] [transport.py] [_log()] kex follows: False
2026-01-01T00:39:29.371 [DEBUG] [Thread-137559] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:39:29.371 [DEBUG] [Thread-137559] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:39:29.371 [DEBUG] [Thread-137559] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:39:29.371 [DEBUG] [Thread-137559] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:39:29.371 [DEBUG] [Thread-137559] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:39:29.371 [DEBUG] [Thread-137559] [transport.py] [_log()] Compression: none
2026-01-01T00:39:29.371 [DEBUG] [Thread-137559] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:39:29.427 [DEBUG] [Thread-137559] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:39:29.427 [DEBUG] [Thread-137559] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:39:29.427 [DEBUG] [Thread-137559] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T00:39:29.427 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T00:39:29.427 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:39:29.484 [DEBUG] [Thread-137559] [transport.py] [_log()] userauth is OK
2026-01-01T00:39:29.484 [DEBUG] [Thread-137559] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:39:29.484 [DEBUG] [Thread-137559] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:39:29.484 [DEBUG] [Thread-137559] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T00:39:29.484 [DEBUG] [Thread-137559] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:39:29.507 [INFO] [Thread-137559] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:39:29.507 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T00:39:29.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:39:30.352 [DEBUG] [Thread-137559] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:39:30.352 [DEBUG] [Thread-137559] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:39:30.404 [DEBUG] [Thread-137559] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:39:30.404 [DEBUG] [Thread-137559] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:39:30.413 [DEBUG] [Thread-137559] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:39:30.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:39:30.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T00:39:30.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T00:39:30.444 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:39:30.444 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:39:30.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:39:30.453 [DEBUG] [Thread-137559] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:39:40.684 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:39:40.685 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:39:40.689 [DEBUG] [Thread-137561 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:39:55.747 [DEBUG] [Thread-137562 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:39:57.222 [DEBUG] [Thread-137563 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:40:00.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T00:40:00.475 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T00:40:00.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
2026-01-01T00:40:01.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 0, 39, 46), 3.24, 81.06, 0.0, 16.48, 14.3, 0, 1, 0, 2, 0, 0),)
2026-01-01T00:40:01.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 00:39:46
2026-01-01T00:40:01.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T00:40:01.507 [DEBUG] [Thread-137564] [transport.py] [_log()] starting thread (client mode): 0xb955b640
2026-01-01T00:40:01.507 [DEBUG] [Thread-137564] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:40:01.527 [DEBUG] [Thread-137564] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T00:40:01.527 [INFO] [Thread-137564] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T00:40:01.530 [DEBUG] [Thread-137564] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:40:01.530 [DEBUG] [Thread-137564] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T00:40:01.530 [DEBUG] [Thread-137564] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:40:01.530 [DEBUG] [Thread-137564] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:40:01.530 [DEBUG] [Thread-137564] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:40:01.530 [DEBUG] [Thread-137564] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:40:01.530 [DEBUG] [Thread-137564] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:40:01.530 [DEBUG] [Thread-137564] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:40:01.530 [DEBUG] [Thread-137564] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:40:01.530 [DEBUG] [Thread-137564] [transport.py] [_log()] client lang: <none>
2026-01-01T00:40:01.530 [DEBUG] [Thread-137564] [transport.py] [_log()] server lang: <none>
2026-01-01T00:40:01.530 [DEBUG] [Thread-137564] [transport.py] [_log()] kex follows: False
2026-01-01T00:40:01.530 [DEBUG] [Thread-137564] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:40:01.530 [DEBUG] [Thread-137564] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:40:01.530 [DEBUG] [Thread-137564] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:40:01.530 [DEBUG] [Thread-137564] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:40:01.530 [DEBUG] [Thread-137564] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:40:01.530 [DEBUG] [Thread-137564] [transport.py] [_log()] Compression: none
2026-01-01T00:40:01.530 [DEBUG] [Thread-137564] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:40:01.548 [DEBUG] [Thread-137564] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:40:01.548 [DEBUG] [Thread-137564] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:40:01.548 [DEBUG] [Thread-137564] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T00:40:01.548 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T00:40:01.548 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:40:01.549 [DEBUG] [Thread-137564] [transport.py] [_log()] userauth is OK
2026-01-01T00:40:01.549 [DEBUG] [Thread-137564] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:40:01.549 [DEBUG] [Thread-137564] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:40:01.549 [DEBUG] [Thread-137564] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T00:40:01.549 [DEBUG] [Thread-137564] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:40:01.564 [INFO] [Thread-137564] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:40:01.564 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:40:02.188 [DEBUG] [Thread-137564] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:40:02.188 [DEBUG] [Thread-137564] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:40:02.188 [DEBUG] [Thread-137564] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T00:40:02.230 [DEBUG] [Thread-137564] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:40:02.230 [DEBUG] [Thread-137564] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:40:02.231 [DEBUG] [Thread-137564] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:40:02.236 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:40:02.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T00:40:02.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T00:40:02.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T00:40:02.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:40:02.240 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T00:40:02.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:40:02.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:40:02.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T00:40:02.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.943884 -999.00  +14.60   9.35     82  +11.60 1 2 1 2 1     0    0 2.86 -6.31 z..S. 14.1 9.3 204.0 13.2 15.8 -14.6 15.6 -14.2 15.4 -13.0 15.7 -13.6
2026-01-01T00:40:02.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T00:40:02.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T00:40:02.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.943884
2026-01-01T00:40:02.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T00:40:02.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T00:40:02.241 [DEBUG] [Thread-137564] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:40:02.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T00:40:02.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T00:40:02.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T00:40:02.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T00:39:46', tmtdew=3.24, humidity=81.06, cloud=0.0, wind=16.48, temperature=14.3, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T22:39:11.578', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T00:40:02.323 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T00:40:02.334 [DEBUG] [Thread-137567] [transport.py] [_log()] starting thread (client mode): 0xb955bca0
2026-01-01T00:40:02.334 [DEBUG] [Thread-137567] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:40:02.349 [DEBUG] [Thread-137567] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T00:40:02.349 [INFO] [Thread-137567] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T00:40:02.357 [DEBUG] [Thread-137567] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:40:02.357 [DEBUG] [Thread-137567] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T00:40:02.357 [DEBUG] [Thread-137567] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:40:02.357 [DEBUG] [Thread-137567] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:40:02.357 [DEBUG] [Thread-137567] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:40:02.357 [DEBUG] [Thread-137567] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:40:02.357 [DEBUG] [Thread-137567] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:40:02.357 [DEBUG] [Thread-137567] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:40:02.357 [DEBUG] [Thread-137567] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:40:02.357 [DEBUG] [Thread-137567] [transport.py] [_log()] client lang: <none>
2026-01-01T00:40:02.357 [DEBUG] [Thread-137567] [transport.py] [_log()] server lang: <none>
2026-01-01T00:40:02.357 [DEBUG] [Thread-137567] [transport.py] [_log()] kex follows: False
2026-01-01T00:40:02.357 [DEBUG] [Thread-137567] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:40:02.357 [DEBUG] [Thread-137567] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:40:02.357 [DEBUG] [Thread-137567] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:40:02.357 [DEBUG] [Thread-137567] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:40:02.357 [DEBUG] [Thread-137567] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:40:02.357 [DEBUG] [Thread-137567] [transport.py] [_log()] Compression: none
2026-01-01T00:40:02.357 [DEBUG] [Thread-137567] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:40:02.415 [DEBUG] [Thread-137567] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:40:02.415 [DEBUG] [Thread-137567] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:40:02.415 [DEBUG] [Thread-137567] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T00:40:02.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T00:40:02.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:40:02.472 [DEBUG] [Thread-137567] [transport.py] [_log()] userauth is OK
2026-01-01T00:40:02.472 [DEBUG] [Thread-137567] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:40:02.472 [DEBUG] [Thread-137567] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:40:02.472 [DEBUG] [Thread-137567] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T00:40:02.472 [DEBUG] [Thread-137567] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:40:02.486 [INFO] [Thread-137567] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:40:02.486 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T00:40:02.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:40:03.348 [DEBUG] [Thread-137567] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:40:03.348 [DEBUG] [Thread-137567] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:40:03.396 [DEBUG] [Thread-137567] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:40:03.396 [DEBUG] [Thread-137567] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:40:03.405 [DEBUG] [Thread-137567] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:40:03.412 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:40:03.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T00:40:03.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T00:40:03.428 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:40:03.428 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:40:03.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:40:03.436 [DEBUG] [Thread-137567] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:40:10.776 [DEBUG] [Thread-137569 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:40:25.830 [DEBUG] [Thread-137570 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:40:33.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T00:40:33.439 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T00:40:33.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T00:40:34.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 0, 40, 18), 3.22, 81.16, 0.0, 15.88, 14.29, 0, 1, 0, 2, 0, 0),)
2026-01-01T00:40:34.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 00:40:18
2026-01-01T00:40:34.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T00:40:34.427 [DEBUG] [Thread-137571] [transport.py] [_log()] starting thread (client mode): 0xb955bb80
2026-01-01T00:40:34.427 [DEBUG] [Thread-137571] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:40:34.443 [DEBUG] [Thread-137571] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T00:40:34.443 [INFO] [Thread-137571] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T00:40:34.447 [DEBUG] [Thread-137571] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:40:34.447 [DEBUG] [Thread-137571] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T00:40:34.447 [DEBUG] [Thread-137571] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:40:34.447 [DEBUG] [Thread-137571] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:40:34.447 [DEBUG] [Thread-137571] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:40:34.447 [DEBUG] [Thread-137571] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:40:34.447 [DEBUG] [Thread-137571] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:40:34.447 [DEBUG] [Thread-137571] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:40:34.447 [DEBUG] [Thread-137571] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:40:34.447 [DEBUG] [Thread-137571] [transport.py] [_log()] client lang: <none>
2026-01-01T00:40:34.447 [DEBUG] [Thread-137571] [transport.py] [_log()] server lang: <none>
2026-01-01T00:40:34.447 [DEBUG] [Thread-137571] [transport.py] [_log()] kex follows: False
2026-01-01T00:40:34.447 [DEBUG] [Thread-137571] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:40:34.447 [DEBUG] [Thread-137571] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:40:34.447 [DEBUG] [Thread-137571] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:40:34.447 [DEBUG] [Thread-137571] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:40:34.448 [DEBUG] [Thread-137571] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:40:34.448 [DEBUG] [Thread-137571] [transport.py] [_log()] Compression: none
2026-01-01T00:40:34.448 [DEBUG] [Thread-137571] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:40:34.467 [DEBUG] [Thread-137571] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:40:34.468 [DEBUG] [Thread-137571] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:40:34.468 [DEBUG] [Thread-137571] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T00:40:34.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T00:40:34.470 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:40:34.471 [DEBUG] [Thread-137571] [transport.py] [_log()] userauth is OK
2026-01-01T00:40:34.471 [DEBUG] [Thread-137571] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:40:34.471 [DEBUG] [Thread-137571] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:40:34.471 [DEBUG] [Thread-137571] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T00:40:34.471 [DEBUG] [Thread-137571] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:40:34.494 [INFO] [Thread-137571] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:40:34.495 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:40:35.145 [DEBUG] [Thread-137571] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:40:35.145 [DEBUG] [Thread-137571] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:40:35.145 [DEBUG] [Thread-137571] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T00:40:35.186 [DEBUG] [Thread-137571] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:40:35.187 [DEBUG] [Thread-137571] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:40:35.189 [DEBUG] [Thread-137571] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:40:35.203 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:40:35.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T00:40:35.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T00:40:35.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T00:40:35.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:40:35.216 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T00:40:35.216 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:40:35.216 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:40:35.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T00:40:35.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.944231 -999.00  +14.60   9.56     82  +11.60 1 2 1 2 1     0    0 2.83 -6.16 ...S. 9.8 9.6 195.7 13.4 15.8 -14.4 15.6 -13.9 15.4 -12.6 15.8 -13.5
2026-01-01T00:40:35.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T00:40:35.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T00:40:35.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.944231
2026-01-01T00:40:35.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T00:40:35.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T00:40:35.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T00:40:35.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T00:40:35.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T00:40:35.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T00:40:18', tmtdew=3.22, humidity=81.16, cloud=0.0, wind=15.88, temperature=14.29, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T22:39:41.558', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T00:40:35.218 [DEBUG] [Thread-137571] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:40:35.315 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T00:40:35.327 [DEBUG] [Thread-137574] [transport.py] [_log()] starting thread (client mode): 0xb6bbc820
2026-01-01T00:40:35.327 [DEBUG] [Thread-137574] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:40:35.343 [DEBUG] [Thread-137574] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T00:40:35.343 [INFO] [Thread-137574] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T00:40:35.350 [DEBUG] [Thread-137574] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:40:35.351 [DEBUG] [Thread-137574] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T00:40:35.351 [DEBUG] [Thread-137574] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:40:35.351 [DEBUG] [Thread-137574] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:40:35.351 [DEBUG] [Thread-137574] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:40:35.351 [DEBUG] [Thread-137574] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:40:35.351 [DEBUG] [Thread-137574] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:40:35.351 [DEBUG] [Thread-137574] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:40:35.351 [DEBUG] [Thread-137574] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:40:35.351 [DEBUG] [Thread-137574] [transport.py] [_log()] client lang: <none>
2026-01-01T00:40:35.351 [DEBUG] [Thread-137574] [transport.py] [_log()] server lang: <none>
2026-01-01T00:40:35.351 [DEBUG] [Thread-137574] [transport.py] [_log()] kex follows: False
2026-01-01T00:40:35.351 [DEBUG] [Thread-137574] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:40:35.351 [DEBUG] [Thread-137574] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:40:35.351 [DEBUG] [Thread-137574] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:40:35.351 [DEBUG] [Thread-137574] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:40:35.352 [DEBUG] [Thread-137574] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:40:35.352 [DEBUG] [Thread-137574] [transport.py] [_log()] Compression: none
2026-01-01T00:40:35.352 [DEBUG] [Thread-137574] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:40:35.408 [DEBUG] [Thread-137574] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:40:35.408 [DEBUG] [Thread-137574] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:40:35.409 [DEBUG] [Thread-137574] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T00:40:35.409 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T00:40:35.410 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:40:35.464 [DEBUG] [Thread-137574] [transport.py] [_log()] userauth is OK
2026-01-01T00:40:35.464 [DEBUG] [Thread-137574] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:40:35.464 [DEBUG] [Thread-137574] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:40:35.464 [DEBUG] [Thread-137574] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T00:40:35.464 [DEBUG] [Thread-137574] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:40:35.483 [INFO] [Thread-137574] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:40:35.483 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T00:40:35.484 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:40:36.316 [DEBUG] [Thread-137574] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:40:36.316 [DEBUG] [Thread-137574] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:40:36.364 [DEBUG] [Thread-137574] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:40:36.364 [DEBUG] [Thread-137574] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:40:36.373 [DEBUG] [Thread-137574] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:40:36.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:40:36.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T00:40: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
2026-01-01T00:40:36.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:40:36.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:40:36.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:40:36.417 [DEBUG] [Thread-137574] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:40:40.862 [DEBUG] [Thread-137576 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:40:40.890 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:40:40.890 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:40:55.908 [DEBUG] [Thread-137577 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:40:57.296 [DEBUG] [Thread-137578 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:41:06.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T00:41:06.432 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T00:41:06.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T00:41:07.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 0, 40, 50), 3.21, 81.21, 0.0, 16.52, 14.29, 0, 1, 0, 2, 0, 0),)
2026-01-01T00:41:07.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 00:40:50
2026-01-01T00:41:07.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T00:41:07.422 [DEBUG] [Thread-137579] [transport.py] [_log()] starting thread (client mode): 0xb955a410
2026-01-01T00:41:07.422 [DEBUG] [Thread-137579] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:41:07.443 [DEBUG] [Thread-137579] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T00:41:07.443 [INFO] [Thread-137579] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T00:41:07.447 [DEBUG] [Thread-137579] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:41:07.447 [DEBUG] [Thread-137579] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T00:41:07.447 [DEBUG] [Thread-137579] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:41:07.447 [DEBUG] [Thread-137579] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:41:07.447 [DEBUG] [Thread-137579] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:41:07.447 [DEBUG] [Thread-137579] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:41:07.447 [DEBUG] [Thread-137579] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:41:07.447 [DEBUG] [Thread-137579] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:41:07.447 [DEBUG] [Thread-137579] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:41:07.447 [DEBUG] [Thread-137579] [transport.py] [_log()] client lang: <none>
2026-01-01T00:41:07.447 [DEBUG] [Thread-137579] [transport.py] [_log()] server lang: <none>
2026-01-01T00:41:07.447 [DEBUG] [Thread-137579] [transport.py] [_log()] kex follows: False
2026-01-01T00:41:07.447 [DEBUG] [Thread-137579] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:41:07.447 [DEBUG] [Thread-137579] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:41:07.448 [DEBUG] [Thread-137579] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:41:07.448 [DEBUG] [Thread-137579] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:41:07.448 [DEBUG] [Thread-137579] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:41:07.448 [DEBUG] [Thread-137579] [transport.py] [_log()] Compression: none
2026-01-01T00:41:07.448 [DEBUG] [Thread-137579] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:41:07.466 [DEBUG] [Thread-137579] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:41:07.467 [DEBUG] [Thread-137579] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:41:07.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T00:41:07.468 [DEBUG] [Thread-137579] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T00:41:07.469 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:41:07.470 [DEBUG] [Thread-137579] [transport.py] [_log()] userauth is OK
2026-01-01T00:41:07.471 [DEBUG] [Thread-137579] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:41:07.471 [DEBUG] [Thread-137579] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:41:07.471 [DEBUG] [Thread-137579] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T00:41:07.471 [DEBUG] [Thread-137579] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:41:07.494 [INFO] [Thread-137579] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:41:07.495 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:41:08.116 [DEBUG] [Thread-137579] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:41:08.116 [DEBUG] [Thread-137579] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:41:08.116 [DEBUG] [Thread-137579] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T00:41:08.157 [DEBUG] [Thread-137579] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:41:08.157 [DEBUG] [Thread-137579] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:41:08.159 [DEBUG] [Thread-137579] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:41:08.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:41:08.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T00:41:08.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T00:41:08.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T00:41:08.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:41:08.181 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T00:41:08.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:41:08.181 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:41:08.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T00:41:08.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.944926 -999.00  +14.60   4.33     82  +11.60 1 2 1 2 1     0    0 2.87 -5.01 .Nes. 4.9 4.3 211.9 12.9 15.8 -14.2 15.6 -13.7 15.4 -12.7 15.8 -13.4
2026-01-01T00:41:08.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T00:41:08.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T00:41:08.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.944926
2026-01-01T00:41:08.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T00:41:08.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T00:41:08.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T00:41:08.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T00:41:08.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T00:41:08.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T00:40:50', tmtdew=3.21, humidity=81.21, cloud=0.0, wind=16.52, temperature=14.29, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T22:40:41.606', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T00:41:08.184 [DEBUG] [Thread-137579] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:41:08.266 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T00:41:10.945 [DEBUG] [Thread-137582 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:41:25.991 [DEBUG] [Thread-137583 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:41:41.030 [DEBUG] [Thread-137584 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:41:41.096 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:41:41.097 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:41:56.064 [DEBUG] [Thread-137585 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:41:57.373 [DEBUG] [Thread-137586 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:42:11.099 [DEBUG] [Thread-137587 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:42:26.137 [DEBUG] [Thread-137588 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:42:41.169 [DEBUG] [Thread-137589 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:42:41.300 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:42:41.301 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:42:56.205 [DEBUG] [Thread-137590 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:42:57.457 [DEBUG] [Thread-137591 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:43:11.241 [DEBUG] [Thread-137592 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:43:20.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
2026-01-01T00:43:26.279 [DEBUG] [Thread-137593 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:43:41.314 [DEBUG] [Thread-137594 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:43:41.500 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:43:41.501 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:43:50.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T00:43:50.175 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T00:43:50.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T00:43:50.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 0, 43, 30), 3.22, 81.14, 0.0, 14.79, 14.2, 0, 1, 0, 2, 0, 0),)
2026-01-01T00:43:50.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 00:43:30
2026-01-01T00:43:51.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T00:43:51.181 [DEBUG] [Thread-137595] [transport.py] [_log()] starting thread (client mode): 0xb6bbf3d0
2026-01-01T00:43:51.181 [DEBUG] [Thread-137595] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:43:51.200 [DEBUG] [Thread-137595] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T00:43:51.200 [INFO] [Thread-137595] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T00:43:51.204 [DEBUG] [Thread-137595] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:43:51.204 [DEBUG] [Thread-137595] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T00:43:51.204 [DEBUG] [Thread-137595] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:43:51.204 [DEBUG] [Thread-137595] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:43:51.204 [DEBUG] [Thread-137595] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:43:51.204 [DEBUG] [Thread-137595] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:43:51.204 [DEBUG] [Thread-137595] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:43:51.204 [DEBUG] [Thread-137595] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:43:51.204 [DEBUG] [Thread-137595] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:43:51.204 [DEBUG] [Thread-137595] [transport.py] [_log()] client lang: <none>
2026-01-01T00:43:51.204 [DEBUG] [Thread-137595] [transport.py] [_log()] server lang: <none>
2026-01-01T00:43:51.204 [DEBUG] [Thread-137595] [transport.py] [_log()] kex follows: False
2026-01-01T00:43:51.204 [DEBUG] [Thread-137595] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:43:51.204 [DEBUG] [Thread-137595] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:43:51.204 [DEBUG] [Thread-137595] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:43:51.204 [DEBUG] [Thread-137595] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:43:51.204 [DEBUG] [Thread-137595] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:43:51.204 [DEBUG] [Thread-137595] [transport.py] [_log()] Compression: none
2026-01-01T00:43:51.204 [DEBUG] [Thread-137595] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:43:51.221 [DEBUG] [Thread-137595] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:43:51.221 [DEBUG] [Thread-137595] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:43:51.222 [DEBUG] [Thread-137595] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T00:43:51.222 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T00:43:51.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:43:51.224 [DEBUG] [Thread-137595] [transport.py] [_log()] userauth is OK
2026-01-01T00:43:51.224 [DEBUG] [Thread-137595] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:43:51.224 [DEBUG] [Thread-137595] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:43:51.225 [DEBUG] [Thread-137595] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T00:43:51.225 [DEBUG] [Thread-137595] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:43:51.250 [INFO] [Thread-137595] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:43:51.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:43:51.901 [DEBUG] [Thread-137595] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:43:51.902 [DEBUG] [Thread-137595] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:43:51.902 [DEBUG] [Thread-137595] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T00:43:51.942 [DEBUG] [Thread-137595] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:43:51.943 [DEBUG] [Thread-137595] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:43:51.945 [DEBUG] [Thread-137595] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:43:51.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:43:51.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T00:43:51.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T00:43:51.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T00:43:51.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:43:51.963 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T00:43:51.963 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:43:51.963 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:43:51.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T00:43:51.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.946661 -999.00  +14.50  10.33     82  +11.50 1 2 1 2 1     0    0 2.91 -4.71 ...S. 12.0 10.3 191.9 19.6 15.7 -13.9 15.6 -13.4 15.4 -12.4 15.7 -12.9
2026-01-01T00:43:51.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T00:43:51.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T00:43:51.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.946661
2026-01-01T00:43:51.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T00:43:51.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T00:43:51.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T00:43:51.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T00:43:51.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T00:43:51.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T00:43:30', tmtdew=3.22, humidity=81.14, cloud=0.0, wind=14.79, temperature=14.2, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T22:43:11.510', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T00:43:51.964 [DEBUG] [Thread-137595] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:43:52.038 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T00:43:52.051 [DEBUG] [Thread-137598] [transport.py] [_log()] starting thread (client mode): 0xb955ab00
2026-01-01T00:43:52.051 [DEBUG] [Thread-137598] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:43:52.070 [DEBUG] [Thread-137598] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T00:43:52.070 [INFO] [Thread-137598] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T00:43:52.077 [DEBUG] [Thread-137598] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:43:52.077 [DEBUG] [Thread-137598] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T00:43:52.077 [DEBUG] [Thread-137598] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:43:52.077 [DEBUG] [Thread-137598] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:43:52.077 [DEBUG] [Thread-137598] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:43:52.078 [DEBUG] [Thread-137598] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:43:52.078 [DEBUG] [Thread-137598] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:43:52.078 [DEBUG] [Thread-137598] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:43:52.078 [DEBUG] [Thread-137598] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:43:52.078 [DEBUG] [Thread-137598] [transport.py] [_log()] client lang: <none>
2026-01-01T00:43:52.078 [DEBUG] [Thread-137598] [transport.py] [_log()] server lang: <none>
2026-01-01T00:43:52.078 [DEBUG] [Thread-137598] [transport.py] [_log()] kex follows: False
2026-01-01T00:43:52.078 [DEBUG] [Thread-137598] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:43:52.078 [DEBUG] [Thread-137598] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:43:52.078 [DEBUG] [Thread-137598] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:43:52.078 [DEBUG] [Thread-137598] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:43:52.078 [DEBUG] [Thread-137598] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:43:52.078 [DEBUG] [Thread-137598] [transport.py] [_log()] Compression: none
2026-01-01T00:43:52.078 [DEBUG] [Thread-137598] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:43:52.134 [DEBUG] [Thread-137598] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:43:52.135 [DEBUG] [Thread-137598] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:43:52.135 [DEBUG] [Thread-137598] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T00:43:52.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T00:43:52.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:43:52.192 [DEBUG] [Thread-137598] [transport.py] [_log()] userauth is OK
2026-01-01T00:43:52.192 [DEBUG] [Thread-137598] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:43:52.192 [DEBUG] [Thread-137598] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:43:52.192 [DEBUG] [Thread-137598] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T00:43:52.192 [DEBUG] [Thread-137598] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:43:52.207 [INFO] [Thread-137598] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:43:52.207 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T00:43:52.207 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:43:53.087 [DEBUG] [Thread-137598] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:43:53.087 [DEBUG] [Thread-137598] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:43:53.135 [DEBUG] [Thread-137598] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:43:53.135 [DEBUG] [Thread-137598] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:43:53.143 [DEBUG] [Thread-137598] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:43:53.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:43:53.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T00:43:53.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T00:43:53.167 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:43:53.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:43:53.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:43:53.175 [DEBUG] [Thread-137598] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:43:56.347 [DEBUG] [Thread-137600 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:43:57.525 [DEBUG] [Thread-137601 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:44:11.387 [DEBUG] [Thread-137602 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:44:23.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T00:44:23.183 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T00:44:23.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T00:44:23.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 0, 44, 2), 3.22, 81.14, 0.0, 15.3, 14.2, 0, 1, 0, 2, 0, 0),)
2026-01-01T00:44:23.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 00:44:02
2026-01-01T00:44:24.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T00:44:24.174 [DEBUG] [Thread-137603] [transport.py] [_log()] starting thread (client mode): 0xb955a830
2026-01-01T00:44:24.174 [DEBUG] [Thread-137603] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:44:24.195 [DEBUG] [Thread-137603] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T00:44:24.195 [INFO] [Thread-137603] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T00:44:24.199 [DEBUG] [Thread-137603] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:44:24.199 [DEBUG] [Thread-137603] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T00:44:24.199 [DEBUG] [Thread-137603] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:44:24.199 [DEBUG] [Thread-137603] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:44:24.199 [DEBUG] [Thread-137603] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:44:24.199 [DEBUG] [Thread-137603] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:44:24.199 [DEBUG] [Thread-137603] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:44:24.199 [DEBUG] [Thread-137603] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:44:24.199 [DEBUG] [Thread-137603] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:44:24.199 [DEBUG] [Thread-137603] [transport.py] [_log()] client lang: <none>
2026-01-01T00:44:24.199 [DEBUG] [Thread-137603] [transport.py] [_log()] server lang: <none>
2026-01-01T00:44:24.200 [DEBUG] [Thread-137603] [transport.py] [_log()] kex follows: False
2026-01-01T00:44:24.200 [DEBUG] [Thread-137603] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:44:24.200 [DEBUG] [Thread-137603] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:44:24.200 [DEBUG] [Thread-137603] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:44:24.200 [DEBUG] [Thread-137603] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:44:24.200 [DEBUG] [Thread-137603] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:44:24.200 [DEBUG] [Thread-137603] [transport.py] [_log()] Compression: none
2026-01-01T00:44:24.200 [DEBUG] [Thread-137603] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:44:24.210 [DEBUG] [Thread-137603] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:44:24.211 [DEBUG] [Thread-137603] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:44:24.211 [DEBUG] [Thread-137603] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T00:44:24.212 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T00:44:24.213 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:44:24.214 [DEBUG] [Thread-137603] [transport.py] [_log()] userauth is OK
2026-01-01T00:44:24.215 [DEBUG] [Thread-137603] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:44:24.215 [DEBUG] [Thread-137603] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:44:24.215 [DEBUG] [Thread-137603] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T00:44:24.215 [DEBUG] [Thread-137603] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:44:24.241 [INFO] [Thread-137603] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:44:24.241 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:44:25.033 [DEBUG] [Thread-137603] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:44:25.033 [DEBUG] [Thread-137603] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:44:25.033 [DEBUG] [Thread-137603] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T00:44:25.074 [DEBUG] [Thread-137603] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:44:25.074 [DEBUG] [Thread-137603] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:44:25.079 [DEBUG] [Thread-137603] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:44:25.086 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:44:25.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T00:44:25.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T00:44:25.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T00:44:25.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:44:25.101 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T00:44:25.101 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:44:25.102 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:44:25.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T00:44:25.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.947009 -999.00  +14.50  10.73     82  +11.50 1 2 1 2 1     0    0 2.86 -4.32 ...S. 11.7 10.7 227.5 15.6 15.8 -13.7 15.6 -13.4 15.4 -12.3 15.7 -12.7
2026-01-01T00:44:25.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T00:44:25.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T00:44:25.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.947009
2026-01-01T00:44:25.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T00:44:25.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T00:44:25.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T00:44:25.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T00:44:25.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T00:44:25.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T00:44:02', tmtdew=3.22, humidity=81.14, cloud=0.0, wind=15.3, temperature=14.2, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T22:43:41.578', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T00:44:25.104 [DEBUG] [Thread-137603] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:44:25.188 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T00:44:25.199 [DEBUG] [Thread-137606] [transport.py] [_log()] starting thread (client mode): 0xb95593c0
2026-01-01T00:44:25.200 [DEBUG] [Thread-137606] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:44:25.215 [DEBUG] [Thread-137606] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T00:44:25.215 [INFO] [Thread-137606] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T00:44:25.223 [DEBUG] [Thread-137606] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:44:25.223 [DEBUG] [Thread-137606] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T00:44:25.223 [DEBUG] [Thread-137606] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:44:25.223 [DEBUG] [Thread-137606] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:44:25.223 [DEBUG] [Thread-137606] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:44:25.223 [DEBUG] [Thread-137606] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:44:25.223 [DEBUG] [Thread-137606] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:44:25.223 [DEBUG] [Thread-137606] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:44:25.223 [DEBUG] [Thread-137606] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:44:25.223 [DEBUG] [Thread-137606] [transport.py] [_log()] client lang: <none>
2026-01-01T00:44:25.223 [DEBUG] [Thread-137606] [transport.py] [_log()] server lang: <none>
2026-01-01T00:44:25.223 [DEBUG] [Thread-137606] [transport.py] [_log()] kex follows: False
2026-01-01T00:44:25.223 [DEBUG] [Thread-137606] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:44:25.223 [DEBUG] [Thread-137606] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:44:25.223 [DEBUG] [Thread-137606] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:44:25.223 [DEBUG] [Thread-137606] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:44:25.224 [DEBUG] [Thread-137606] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:44:25.224 [DEBUG] [Thread-137606] [transport.py] [_log()] Compression: none
2026-01-01T00:44:25.224 [DEBUG] [Thread-137606] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:44:25.281 [DEBUG] [Thread-137606] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:44:25.282 [DEBUG] [Thread-137606] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:44:25.282 [DEBUG] [Thread-137606] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T00:44:25.283 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T00:44:25.283 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:44:25.341 [DEBUG] [Thread-137606] [transport.py] [_log()] userauth is OK
2026-01-01T00:44:25.341 [DEBUG] [Thread-137606] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:44:25.341 [DEBUG] [Thread-137606] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:44:25.341 [DEBUG] [Thread-137606] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T00:44:25.341 [DEBUG] [Thread-137606] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:44:25.366 [INFO] [Thread-137606] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:44:25.366 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T00:44:25.367 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:44:26.228 [DEBUG] [Thread-137606] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:44:26.229 [DEBUG] [Thread-137606] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:44:26.277 [DEBUG] [Thread-137606] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:44:26.277 [DEBUG] [Thread-137606] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:44:26.286 [DEBUG] [Thread-137606] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:44:26.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:44:26.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T00:44:26.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T00:44:26.314 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:44:26.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:44:26.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:44:26.323 [DEBUG] [Thread-137606] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:44:26.425 [DEBUG] [Thread-137608 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:44:41.472 [DEBUG] [Thread-137609 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:44:41.704 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:44:41.705 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:44:56.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T00:44:56.346 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T00:44:56.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T00:44:56.511 [DEBUG] [Thread-137610 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:44:57.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 0, 44, 34), 3.24, 80.54, 0.0, 15.93, 14.2, 0, 1, 0, 2, 0, 0),)
2026-01-01T00:44:57.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 00:44:34
2026-01-01T00:44:57.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T00:44:57.363 [DEBUG] [Thread-137611] [transport.py] [_log()] starting thread (client mode): 0xb6ba3dc0
2026-01-01T00:44:57.363 [DEBUG] [Thread-137611] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:44:57.384 [DEBUG] [Thread-137611] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T00:44:57.384 [INFO] [Thread-137611] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T00:44:57.387 [DEBUG] [Thread-137611] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:44:57.387 [DEBUG] [Thread-137611] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T00:44:57.387 [DEBUG] [Thread-137611] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:44:57.387 [DEBUG] [Thread-137611] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:44:57.387 [DEBUG] [Thread-137611] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:44:57.387 [DEBUG] [Thread-137611] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:44:57.387 [DEBUG] [Thread-137611] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:44:57.387 [DEBUG] [Thread-137611] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:44:57.387 [DEBUG] [Thread-137611] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:44:57.387 [DEBUG] [Thread-137611] [transport.py] [_log()] client lang: <none>
2026-01-01T00:44:57.387 [DEBUG] [Thread-137611] [transport.py] [_log()] server lang: <none>
2026-01-01T00:44:57.387 [DEBUG] [Thread-137611] [transport.py] [_log()] kex follows: False
2026-01-01T00:44:57.387 [DEBUG] [Thread-137611] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:44:57.387 [DEBUG] [Thread-137611] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:44:57.387 [DEBUG] [Thread-137611] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:44:57.388 [DEBUG] [Thread-137611] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:44:57.388 [DEBUG] [Thread-137611] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:44:57.388 [DEBUG] [Thread-137611] [transport.py] [_log()] Compression: none
2026-01-01T00:44:57.388 [DEBUG] [Thread-137611] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:44:57.404 [DEBUG] [Thread-137611] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:44:57.404 [DEBUG] [Thread-137611] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:44:57.405 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T00:44:57.405 [DEBUG] [Thread-137611] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T00:44:57.406 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:44:57.407 [DEBUG] [Thread-137611] [transport.py] [_log()] userauth is OK
2026-01-01T00:44:57.408 [DEBUG] [Thread-137611] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:44:57.408 [DEBUG] [Thread-137611] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:44:57.408 [DEBUG] [Thread-137611] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T00:44:57.408 [DEBUG] [Thread-137611] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:44:57.434 [INFO] [Thread-137611] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:44:57.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:44:57.599 [DEBUG] [Thread-137613 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:44:58.053 [DEBUG] [Thread-137611] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:44:58.053 [DEBUG] [Thread-137611] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:44:58.054 [DEBUG] [Thread-137611] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T00:44:58.094 [DEBUG] [Thread-137611] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:44:58.094 [DEBUG] [Thread-137611] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:44:58.097 [DEBUG] [Thread-137611] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:44:58.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:44:58.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T00:44:58.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T00:44:58.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T00:44:58.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:44:58.124 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T00:44:58.124 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:44:58.124 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:44:58.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T00:44:58.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.947703 -999.00  +14.50  12.43     82  +11.50 1 2 1 2 1     0    0 2.85 -3.74 ..... 9.4 12.4 215.6 19.3 15.7 -13.6 15.6 -13.3 15.4 -12.2 15.7 -12.6
2026-01-01T00:44:58.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T00:44:58.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T00:44:58.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.947703
2026-01-01T00:44:58.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T00:44:58.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T00:44:58.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T00:44:58.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T00:44:58.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T00:44:58.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T00:44:34', tmtdew=3.24, humidity=80.54, cloud=0.0, wind=15.93, temperature=14.2, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T22:44:41.539', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T00:44:58.126 [DEBUG] [Thread-137611] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:44:58.209 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T00:44:58.221 [DEBUG] [Thread-137615] [transport.py] [_log()] starting thread (client mode): 0xb6ba2530
2026-01-01T00:44:58.221 [DEBUG] [Thread-137615] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:44:58.237 [DEBUG] [Thread-137615] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T00:44:58.237 [INFO] [Thread-137615] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T00:44:58.244 [DEBUG] [Thread-137615] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:44:58.245 [DEBUG] [Thread-137615] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T00:44:58.245 [DEBUG] [Thread-137615] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:44:58.245 [DEBUG] [Thread-137615] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:44:58.245 [DEBUG] [Thread-137615] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:44:58.245 [DEBUG] [Thread-137615] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:44:58.245 [DEBUG] [Thread-137615] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:44:58.245 [DEBUG] [Thread-137615] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:44:58.245 [DEBUG] [Thread-137615] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:44:58.245 [DEBUG] [Thread-137615] [transport.py] [_log()] client lang: <none>
2026-01-01T00:44:58.245 [DEBUG] [Thread-137615] [transport.py] [_log()] server lang: <none>
2026-01-01T00:44:58.245 [DEBUG] [Thread-137615] [transport.py] [_log()] kex follows: False
2026-01-01T00:44:58.245 [DEBUG] [Thread-137615] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:44:58.245 [DEBUG] [Thread-137615] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:44:58.245 [DEBUG] [Thread-137615] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:44:58.245 [DEBUG] [Thread-137615] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:44:58.246 [DEBUG] [Thread-137615] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:44:58.246 [DEBUG] [Thread-137615] [transport.py] [_log()] Compression: none
2026-01-01T00:44:58.246 [DEBUG] [Thread-137615] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:44:58.304 [DEBUG] [Thread-137615] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:44:58.305 [DEBUG] [Thread-137615] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:44:58.305 [DEBUG] [Thread-137615] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T00:44:58.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T00:44:58.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:44:58.361 [DEBUG] [Thread-137615] [transport.py] [_log()] userauth is OK
2026-01-01T00:44:58.361 [DEBUG] [Thread-137615] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:44:58.361 [DEBUG] [Thread-137615] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:44:58.361 [DEBUG] [Thread-137615] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T00:44:58.361 [DEBUG] [Thread-137615] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:44:58.380 [INFO] [Thread-137615] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:44:58.381 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T00:44:58.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:44:59.195 [DEBUG] [Thread-137615] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:44:59.195 [DEBUG] [Thread-137615] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:44:59.243 [DEBUG] [Thread-137615] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:44:59.243 [DEBUG] [Thread-137615] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:44:59.252 [DEBUG] [Thread-137615] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:44:59.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:44:59.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T00:44:59.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
2026-01-01T00:44:59.278 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:44:59.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:44:59.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:44:59.287 [DEBUG] [Thread-137615] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:45:11.538 [DEBUG] [Thread-137617 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:45:26.577 [DEBUG] [Thread-137618 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:45:29.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T00:45:29.293 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T00:45:29.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T00:45:29.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 0, 45, 6), 3.25, 80.49, 0.0, 15.19, 14.25, 0, 1, 0, 2, 0, 0),)
2026-01-01T00:45:29.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 00:45:06
2026-01-01T00:45:30.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T00:45:30.270 [DEBUG] [Thread-137619] [transport.py] [_log()] starting thread (client mode): 0xb955ac20
2026-01-01T00:45:30.270 [DEBUG] [Thread-137619] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:45:30.290 [DEBUG] [Thread-137619] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T00:45:30.291 [INFO] [Thread-137619] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T00:45:30.294 [DEBUG] [Thread-137619] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:45:30.294 [DEBUG] [Thread-137619] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T00:45:30.294 [DEBUG] [Thread-137619] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:45:30.294 [DEBUG] [Thread-137619] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:45:30.294 [DEBUG] [Thread-137619] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:45:30.294 [DEBUG] [Thread-137619] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:45:30.294 [DEBUG] [Thread-137619] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:45:30.294 [DEBUG] [Thread-137619] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:45:30.294 [DEBUG] [Thread-137619] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:45:30.294 [DEBUG] [Thread-137619] [transport.py] [_log()] client lang: <none>
2026-01-01T00:45:30.294 [DEBUG] [Thread-137619] [transport.py] [_log()] server lang: <none>
2026-01-01T00:45:30.294 [DEBUG] [Thread-137619] [transport.py] [_log()] kex follows: False
2026-01-01T00:45:30.294 [DEBUG] [Thread-137619] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:45:30.294 [DEBUG] [Thread-137619] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:45:30.294 [DEBUG] [Thread-137619] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:45:30.294 [DEBUG] [Thread-137619] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:45:30.294 [DEBUG] [Thread-137619] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:45:30.294 [DEBUG] [Thread-137619] [transport.py] [_log()] Compression: none
2026-01-01T00:45:30.294 [DEBUG] [Thread-137619] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:45:30.312 [DEBUG] [Thread-137619] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:45:30.313 [DEBUG] [Thread-137619] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:45:30.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T00:45:30.314 [DEBUG] [Thread-137619] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T00:45:30.315 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:45:30.316 [DEBUG] [Thread-137619] [transport.py] [_log()] userauth is OK
2026-01-01T00:45:30.317 [DEBUG] [Thread-137619] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:45:30.317 [DEBUG] [Thread-137619] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:45:30.317 [DEBUG] [Thread-137619] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T00:45:30.317 [DEBUG] [Thread-137619] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:45:30.337 [INFO] [Thread-137619] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:45:30.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:45:30.943 [DEBUG] [Thread-137619] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:45:30.943 [DEBUG] [Thread-137619] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:45:30.944 [DEBUG] [Thread-137619] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T00:45:30.984 [DEBUG] [Thread-137619] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:45:30.985 [DEBUG] [Thread-137619] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:45:30.988 [DEBUG] [Thread-137619] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:45:31.002 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:45:31.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T00:45:31.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T00:45:31.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T00:45:31.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:45:31.011 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T00:45:31.011 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:45:31.011 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:45:31.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T00:45:31.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.948051 -999.00  +14.50   6.76     82  +11.50 1 2 1 2 1     0    0 2.92 -3.12 ...s. 8.3 6.8 256.5 13.0 15.7 -13.5 15.6 -13.4 15.4 -12.3 15.7 -12.7
2026-01-01T00:45:31.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T00:45:31.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T00:45:31.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.948051
2026-01-01T00:45:31.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T00:45:31.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T00:45:31.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T00:45:31.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T00:45:31.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T00:45:31.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T00:45:06', tmtdew=3.25, humidity=80.49, cloud=0.0, wind=15.19, temperature=14.25, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T22:45:11.606', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T00:45:31.013 [DEBUG] [Thread-137619] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:45:31.095 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T00:45:31.106 [DEBUG] [Thread-137622] [transport.py] [_log()] starting thread (client mode): 0xb9559ba0
2026-01-01T00:45:31.107 [DEBUG] [Thread-137622] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:45:31.121 [DEBUG] [Thread-137622] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T00:45:31.121 [INFO] [Thread-137622] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T00:45:31.129 [DEBUG] [Thread-137622] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:45:31.129 [DEBUG] [Thread-137622] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T00:45:31.129 [DEBUG] [Thread-137622] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:45:31.129 [DEBUG] [Thread-137622] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:45:31.129 [DEBUG] [Thread-137622] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:45:31.129 [DEBUG] [Thread-137622] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:45:31.129 [DEBUG] [Thread-137622] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:45:31.130 [DEBUG] [Thread-137622] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:45:31.130 [DEBUG] [Thread-137622] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:45:31.130 [DEBUG] [Thread-137622] [transport.py] [_log()] client lang: <none>
2026-01-01T00:45:31.130 [DEBUG] [Thread-137622] [transport.py] [_log()] server lang: <none>
2026-01-01T00:45:31.130 [DEBUG] [Thread-137622] [transport.py] [_log()] kex follows: False
2026-01-01T00:45:31.130 [DEBUG] [Thread-137622] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:45:31.130 [DEBUG] [Thread-137622] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:45:31.130 [DEBUG] [Thread-137622] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:45:31.130 [DEBUG] [Thread-137622] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:45:31.130 [DEBUG] [Thread-137622] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:45:31.131 [DEBUG] [Thread-137622] [transport.py] [_log()] Compression: none
2026-01-01T00:45:31.131 [DEBUG] [Thread-137622] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:45:31.192 [DEBUG] [Thread-137622] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:45:31.193 [DEBUG] [Thread-137622] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:45:31.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T00:45:31.194 [DEBUG] [Thread-137622] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T00:45:31.195 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:45:31.249 [DEBUG] [Thread-137622] [transport.py] [_log()] userauth is OK
2026-01-01T00:45:31.249 [DEBUG] [Thread-137622] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:45:31.249 [DEBUG] [Thread-137622] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:45:31.249 [DEBUG] [Thread-137622] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T00:45:31.249 [DEBUG] [Thread-137622] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:45:31.269 [INFO] [Thread-137622] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:45:31.270 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T00:45:31.270 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:45:32.150 [DEBUG] [Thread-137622] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:45:32.150 [DEBUG] [Thread-137622] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:45:32.198 [DEBUG] [Thread-137622] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:45:32.198 [DEBUG] [Thread-137622] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:45:32.207 [DEBUG] [Thread-137622] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:45:32.216 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:45:32.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T00:45: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
2026-01-01T00:45:32.235 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:45:32.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:45:32.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:45:32.244 [DEBUG] [Thread-137622] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:45:41.609 [DEBUG] [Thread-137624 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:45:41.908 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:45:41.909 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:45:56.666 [DEBUG] [Thread-137625 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:45:57.661 [DEBUG] [Thread-137626 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:46:02.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T00:46:02.266 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T00:46:02.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
2026-01-01T00:46:02.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 0, 45, 38), 3.31, 80.46, 0.0, 17.96, 14.25, 0, 1, 0, 2, 0, 0),)
2026-01-01T00:46:02.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 00:45:38
2026-01-01T00:46:03.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T00:46:03.245 [DEBUG] [Thread-137627] [transport.py] [_log()] starting thread (client mode): 0xb6ba1660
2026-01-01T00:46:03.245 [DEBUG] [Thread-137627] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:46:03.267 [DEBUG] [Thread-137627] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T00:46:03.267 [INFO] [Thread-137627] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T00:46:03.270 [DEBUG] [Thread-137627] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:46:03.270 [DEBUG] [Thread-137627] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T00:46:03.270 [DEBUG] [Thread-137627] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:46:03.270 [DEBUG] [Thread-137627] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:46:03.270 [DEBUG] [Thread-137627] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:46:03.271 [DEBUG] [Thread-137627] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:46:03.271 [DEBUG] [Thread-137627] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:46:03.271 [DEBUG] [Thread-137627] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:46:03.271 [DEBUG] [Thread-137627] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:46:03.271 [DEBUG] [Thread-137627] [transport.py] [_log()] client lang: <none>
2026-01-01T00:46:03.271 [DEBUG] [Thread-137627] [transport.py] [_log()] server lang: <none>
2026-01-01T00:46:03.271 [DEBUG] [Thread-137627] [transport.py] [_log()] kex follows: False
2026-01-01T00:46:03.271 [DEBUG] [Thread-137627] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:46:03.271 [DEBUG] [Thread-137627] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:46:03.271 [DEBUG] [Thread-137627] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:46:03.271 [DEBUG] [Thread-137627] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:46:03.271 [DEBUG] [Thread-137627] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:46:03.271 [DEBUG] [Thread-137627] [transport.py] [_log()] Compression: none
2026-01-01T00:46:03.271 [DEBUG] [Thread-137627] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:46:03.289 [DEBUG] [Thread-137627] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:46:03.289 [DEBUG] [Thread-137627] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:46:03.290 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T00:46:03.290 [DEBUG] [Thread-137627] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T00:46:03.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:46:03.292 [DEBUG] [Thread-137627] [transport.py] [_log()] userauth is OK
2026-01-01T00:46:03.293 [DEBUG] [Thread-137627] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:46:03.293 [DEBUG] [Thread-137627] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:46:03.293 [DEBUG] [Thread-137627] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T00:46:03.293 [DEBUG] [Thread-137627] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:46:03.309 [INFO] [Thread-137627] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:46:03.309 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:46:03.947 [DEBUG] [Thread-137627] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:46:03.948 [DEBUG] [Thread-137627] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:46:03.948 [DEBUG] [Thread-137627] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T00:46:03.989 [DEBUG] [Thread-137627] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:46:03.989 [DEBUG] [Thread-137627] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:46:03.992 [DEBUG] [Thread-137627] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:46:04.004 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:46:04.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T00:46:04.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T00:46:04.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T00:46:04.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:46:04.015 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T00:46:04.015 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:46:04.015 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:46:04.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T00:46:04.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.948397 -999.00  +14.50   8.78     82  +11.50 1 2 1 2 1     0    0 2.94 -2.63 ...s. 10.1 8.8 190.8 14.9 15.7 -13.5 15.6 -13.7 15.3 -12.4 15.7 -12.6
2026-01-01T00:46:04.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T00:46:04.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T00:46:04.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.948397
2026-01-01T00:46:04.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T00:46:04.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T00:46:04.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T00:46:04.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T00:46:04.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T00:46:04.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T00:45:38', tmtdew=3.31, humidity=80.46, cloud=0.0, wind=17.96, temperature=14.25, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T22:45:41.501', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T00:46:04.018 [DEBUG] [Thread-137627] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:46:04.102 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T00:46:04.114 [DEBUG] [Thread-137630] [transport.py] [_log()] starting thread (client mode): 0xb6bbda20
2026-01-01T00:46:04.115 [DEBUG] [Thread-137630] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:46:04.130 [DEBUG] [Thread-137630] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T00:46:04.130 [INFO] [Thread-137630] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T00:46:04.137 [DEBUG] [Thread-137630] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:46:04.138 [DEBUG] [Thread-137630] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T00:46:04.138 [DEBUG] [Thread-137630] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:46:04.138 [DEBUG] [Thread-137630] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:46:04.138 [DEBUG] [Thread-137630] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:46:04.138 [DEBUG] [Thread-137630] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:46:04.139 [DEBUG] [Thread-137630] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:46:04.139 [DEBUG] [Thread-137630] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:46:04.139 [DEBUG] [Thread-137630] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:46:04.139 [DEBUG] [Thread-137630] [transport.py] [_log()] client lang: <none>
2026-01-01T00:46:04.139 [DEBUG] [Thread-137630] [transport.py] [_log()] server lang: <none>
2026-01-01T00:46:04.139 [DEBUG] [Thread-137630] [transport.py] [_log()] kex follows: False
2026-01-01T00:46:04.139 [DEBUG] [Thread-137630] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:46:04.139 [DEBUG] [Thread-137630] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:46:04.139 [DEBUG] [Thread-137630] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:46:04.139 [DEBUG] [Thread-137630] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:46:04.139 [DEBUG] [Thread-137630] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:46:04.139 [DEBUG] [Thread-137630] [transport.py] [_log()] Compression: none
2026-01-01T00:46:04.139 [DEBUG] [Thread-137630] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:46:04.198 [DEBUG] [Thread-137630] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:46:04.198 [DEBUG] [Thread-137630] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:46:04.199 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T00:46:04.199 [DEBUG] [Thread-137630] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T00:46:04.200 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:46:04.257 [DEBUG] [Thread-137630] [transport.py] [_log()] userauth is OK
2026-01-01T00:46:04.257 [DEBUG] [Thread-137630] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:46:04.257 [DEBUG] [Thread-137630] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:46:04.257 [DEBUG] [Thread-137630] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T00:46:04.257 [DEBUG] [Thread-137630] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:46:04.278 [INFO] [Thread-137630] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:46:04.278 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T00:46:04.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:46:05.190 [DEBUG] [Thread-137630] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:46:05.191 [DEBUG] [Thread-137630] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:46:05.243 [DEBUG] [Thread-137630] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:46:05.244 [DEBUG] [Thread-137630] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:46:05.253 [DEBUG] [Thread-137630] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:46:05.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:46:05.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T00:46:05.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T00:46:05.280 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:46:05.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:46:05.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:46:05.289 [DEBUG] [Thread-137630] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:46:11.699 [DEBUG] [Thread-137632 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:46:26.744 [DEBUG] [Thread-137633 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:46:35.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T00:46:35.312 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T00:46:35.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T00:46:36.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 0, 46, 10), 3.32, 80.4, 0.0, 18.05, 14.25, 0, 1, 0, 2, 0, 0),)
2026-01-01T00:46:36.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 00:46:10
2026-01-01T00:46:36.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T00:46:36.319 [DEBUG] [Thread-137634] [transport.py] [_log()] starting thread (client mode): 0xb955a0e0
2026-01-01T00:46:36.319 [DEBUG] [Thread-137634] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:46:36.339 [DEBUG] [Thread-137634] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T00:46:36.339 [INFO] [Thread-137634] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T00:46:36.343 [DEBUG] [Thread-137634] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:46:36.343 [DEBUG] [Thread-137634] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T00:46:36.343 [DEBUG] [Thread-137634] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:46:36.343 [DEBUG] [Thread-137634] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:46:36.343 [DEBUG] [Thread-137634] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:46:36.343 [DEBUG] [Thread-137634] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:46:36.344 [DEBUG] [Thread-137634] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:46:36.344 [DEBUG] [Thread-137634] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:46:36.344 [DEBUG] [Thread-137634] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:46:36.344 [DEBUG] [Thread-137634] [transport.py] [_log()] client lang: <none>
2026-01-01T00:46:36.344 [DEBUG] [Thread-137634] [transport.py] [_log()] server lang: <none>
2026-01-01T00:46:36.344 [DEBUG] [Thread-137634] [transport.py] [_log()] kex follows: False
2026-01-01T00:46:36.344 [DEBUG] [Thread-137634] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:46:36.344 [DEBUG] [Thread-137634] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:46:36.344 [DEBUG] [Thread-137634] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:46:36.344 [DEBUG] [Thread-137634] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:46:36.344 [DEBUG] [Thread-137634] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:46:36.344 [DEBUG] [Thread-137634] [transport.py] [_log()] Compression: none
2026-01-01T00:46:36.344 [DEBUG] [Thread-137634] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:46:36.361 [DEBUG] [Thread-137634] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:46:36.362 [DEBUG] [Thread-137634] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:46:36.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T00:46:36.363 [DEBUG] [Thread-137634] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T00:46:36.364 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:46:36.365 [DEBUG] [Thread-137634] [transport.py] [_log()] userauth is OK
2026-01-01T00:46:36.365 [DEBUG] [Thread-137634] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:46:36.365 [DEBUG] [Thread-137634] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:46:36.365 [DEBUG] [Thread-137634] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T00:46:36.366 [DEBUG] [Thread-137634] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:46:36.383 [INFO] [Thread-137634] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:46:36.384 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:46:37.014 [DEBUG] [Thread-137634] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:46:37.015 [DEBUG] [Thread-137634] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:46:37.015 [DEBUG] [Thread-137634] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T00:46:37.056 [DEBUG] [Thread-137634] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:46:37.056 [DEBUG] [Thread-137634] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:46:37.060 [DEBUG] [Thread-137634] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:46:37.071 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:46:37.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T00:46:37.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T00:46:37.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T00:46:37.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:46:37.086 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T00:46:37.086 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:46:37.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:46:37.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T00:46:37.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.948745 -999.00  +14.50   9.22     81  +11.40 1 2 1 2 1     0    0 3.01 -2.24 ..... 12.7 9.2 198.8 16.4 15.7 -13.7 15.6 -13.5 15.3 -12.4 15.7 -12.6
2026-01-01T00:46:37.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T00:46:37.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T00:46:37.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.948745
2026-01-01T00:46:37.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T00:46:37.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T00:46:37.089 [DEBUG] [Thread-137634] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:46:37.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T00:46:37.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T00:46:37.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T00:46:37.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T00:46:10', tmtdew=3.32, humidity=80.4, cloud=0.0, wind=18.05, temperature=14.25, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T22:46:11.568', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T00:46:37.186 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T00:46:37.198 [DEBUG] [Thread-137637] [transport.py] [_log()] starting thread (client mode): 0xb95f3bb0
2026-01-01T00:46:37.198 [DEBUG] [Thread-137637] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:46:37.217 [DEBUG] [Thread-137637] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T00:46:37.218 [INFO] [Thread-137637] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T00:46:37.225 [DEBUG] [Thread-137637] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:46:37.225 [DEBUG] [Thread-137637] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T00:46:37.226 [DEBUG] [Thread-137637] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:46:37.226 [DEBUG] [Thread-137637] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:46:37.226 [DEBUG] [Thread-137637] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:46:37.226 [DEBUG] [Thread-137637] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:46:37.226 [DEBUG] [Thread-137637] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:46:37.226 [DEBUG] [Thread-137637] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:46:37.226 [DEBUG] [Thread-137637] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:46:37.227 [DEBUG] [Thread-137637] [transport.py] [_log()] client lang: <none>
2026-01-01T00:46:37.227 [DEBUG] [Thread-137637] [transport.py] [_log()] server lang: <none>
2026-01-01T00:46:37.227 [DEBUG] [Thread-137637] [transport.py] [_log()] kex follows: False
2026-01-01T00:46:37.227 [DEBUG] [Thread-137637] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:46:37.227 [DEBUG] [Thread-137637] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:46:37.227 [DEBUG] [Thread-137637] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:46:37.227 [DEBUG] [Thread-137637] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:46:37.228 [DEBUG] [Thread-137637] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:46:37.228 [DEBUG] [Thread-137637] [transport.py] [_log()] Compression: none
2026-01-01T00:46:37.228 [DEBUG] [Thread-137637] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:46:37.285 [DEBUG] [Thread-137637] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:46:37.285 [DEBUG] [Thread-137637] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:46:37.286 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T00:46:37.286 [DEBUG] [Thread-137637] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T00:46:37.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:46:37.340 [DEBUG] [Thread-137637] [transport.py] [_log()] userauth is OK
2026-01-01T00:46:37.341 [DEBUG] [Thread-137637] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:46:37.341 [DEBUG] [Thread-137637] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:46:37.341 [DEBUG] [Thread-137637] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T00:46:37.341 [DEBUG] [Thread-137637] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:46:37.360 [INFO] [Thread-137637] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:46:37.361 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T00:46:37.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:46:38.203 [DEBUG] [Thread-137637] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:46:38.204 [DEBUG] [Thread-137637] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:46:38.252 [DEBUG] [Thread-137637] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:46:38.252 [DEBUG] [Thread-137637] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:46:38.262 [DEBUG] [Thread-137637] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:46:38.271 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:46:38.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T00:46:38.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T00:46:38.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:46:38.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:46:38.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:46:38.298 [DEBUG] [Thread-137637] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:46:41.777 [DEBUG] [Thread-137639 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:46:42.112 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:46:42.113 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:46:56.835 [DEBUG] [Thread-137640 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:46:57.737 [DEBUG] [Thread-137641 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:47:08.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T00:47:08.320 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T00:47:08.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T00:47:09.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 0, 46, 42), 3.31, 80.43, 0.0, 18.19, 14.27, 0, 1, 0, 2, 0, 0),)
2026-01-01T00:47:09.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 00:46:42
2026-01-01T00:47:09.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T00:47:09.322 [DEBUG] [Thread-137642] [transport.py] [_log()] starting thread (client mode): 0xb6ba2e90
2026-01-01T00:47:09.322 [DEBUG] [Thread-137642] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:47:09.343 [DEBUG] [Thread-137642] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T00:47:09.343 [INFO] [Thread-137642] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T00:47:09.346 [DEBUG] [Thread-137642] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:47:09.346 [DEBUG] [Thread-137642] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T00:47:09.346 [DEBUG] [Thread-137642] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:47:09.346 [DEBUG] [Thread-137642] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:47:09.346 [DEBUG] [Thread-137642] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:47:09.346 [DEBUG] [Thread-137642] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:47:09.346 [DEBUG] [Thread-137642] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:47:09.346 [DEBUG] [Thread-137642] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:47:09.346 [DEBUG] [Thread-137642] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:47:09.346 [DEBUG] [Thread-137642] [transport.py] [_log()] client lang: <none>
2026-01-01T00:47:09.346 [DEBUG] [Thread-137642] [transport.py] [_log()] server lang: <none>
2026-01-01T00:47:09.346 [DEBUG] [Thread-137642] [transport.py] [_log()] kex follows: False
2026-01-01T00:47:09.346 [DEBUG] [Thread-137642] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:47:09.346 [DEBUG] [Thread-137642] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:47:09.346 [DEBUG] [Thread-137642] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:47:09.346 [DEBUG] [Thread-137642] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:47:09.346 [DEBUG] [Thread-137642] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:47:09.346 [DEBUG] [Thread-137642] [transport.py] [_log()] Compression: none
2026-01-01T00:47:09.346 [DEBUG] [Thread-137642] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:47:09.361 [DEBUG] [Thread-137642] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:47:09.361 [DEBUG] [Thread-137642] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:47:09.361 [DEBUG] [Thread-137642] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T00:47:09.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T00:47:09.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:47:09.362 [DEBUG] [Thread-137642] [transport.py] [_log()] userauth is OK
2026-01-01T00:47:09.362 [DEBUG] [Thread-137642] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:47:09.362 [DEBUG] [Thread-137642] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:47:09.362 [DEBUG] [Thread-137642] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T00:47:09.362 [DEBUG] [Thread-137642] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:47:09.372 [INFO] [Thread-137642] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:47:09.372 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:47:10.005 [DEBUG] [Thread-137642] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:47:10.005 [DEBUG] [Thread-137642] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:47:10.005 [DEBUG] [Thread-137642] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T00:47:10.046 [DEBUG] [Thread-137642] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:47:10.046 [DEBUG] [Thread-137642] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:47:10.048 [DEBUG] [Thread-137642] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:47:10.061 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:47:10.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T00:47:10.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T00:47:10.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T00:47:10.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:47:10.067 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T00:47:10.067 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:47:10.067 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:47:10.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T00:47:10.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.949092 -999.00  +14.50  10.97     81  +11.40 1 2 1 2 1     0    0 2.96 -1.50 ..... 10.1 11.0 219.2 19.1 15.7 -13.7 15.5 -13.6 15.3 -12.5 15.7 -12.8
2026-01-01T00:47:10.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T00:47:10.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T00:47:10.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.949092
2026-01-01T00:47:10.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T00:47:10.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T00:47:10.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T00:47:10.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T00:47:10.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T00:47:10.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T00:46:42', tmtdew=3.31, humidity=80.43, cloud=0.0, wind=18.19, temperature=14.27, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T22:46:41.549', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T00:47:10.068 [DEBUG] [Thread-137642] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:47:10.142 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T00:47:10.154 [DEBUG] [Thread-137645] [transport.py] [_log()] starting thread (client mode): 0xb6ba1c60
2026-01-01T00:47:10.154 [DEBUG] [Thread-137645] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:47:10.169 [DEBUG] [Thread-137645] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T00:47:10.169 [INFO] [Thread-137645] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T00:47:10.177 [DEBUG] [Thread-137645] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:47:10.177 [DEBUG] [Thread-137645] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T00:47:10.177 [DEBUG] [Thread-137645] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:47:10.177 [DEBUG] [Thread-137645] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:47:10.177 [DEBUG] [Thread-137645] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:47:10.177 [DEBUG] [Thread-137645] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:47:10.177 [DEBUG] [Thread-137645] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:47:10.177 [DEBUG] [Thread-137645] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:47:10.177 [DEBUG] [Thread-137645] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:47:10.177 [DEBUG] [Thread-137645] [transport.py] [_log()] client lang: <none>
2026-01-01T00:47:10.177 [DEBUG] [Thread-137645] [transport.py] [_log()] server lang: <none>
2026-01-01T00:47:10.177 [DEBUG] [Thread-137645] [transport.py] [_log()] kex follows: False
2026-01-01T00:47:10.177 [DEBUG] [Thread-137645] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:47:10.177 [DEBUG] [Thread-137645] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:47:10.177 [DEBUG] [Thread-137645] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:47:10.177 [DEBUG] [Thread-137645] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:47:10.177 [DEBUG] [Thread-137645] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:47:10.177 [DEBUG] [Thread-137645] [transport.py] [_log()] Compression: none
2026-01-01T00:47:10.177 [DEBUG] [Thread-137645] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:47:10.234 [DEBUG] [Thread-137645] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:47:10.234 [DEBUG] [Thread-137645] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:47:10.234 [DEBUG] [Thread-137645] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T00:47:10.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T00:47:10.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:47:10.291 [DEBUG] [Thread-137645] [transport.py] [_log()] userauth is OK
2026-01-01T00:47:10.292 [DEBUG] [Thread-137645] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:47:10.292 [DEBUG] [Thread-137645] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:47:10.292 [DEBUG] [Thread-137645] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T00:47:10.292 [DEBUG] [Thread-137645] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:47:10.305 [INFO] [Thread-137645] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:47:10.305 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T00:47:10.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:47:11.144 [DEBUG] [Thread-137645] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:47:11.144 [DEBUG] [Thread-137645] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:47:11.195 [DEBUG] [Thread-137645] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:47:11.195 [DEBUG] [Thread-137645] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:47:11.205 [DEBUG] [Thread-137645] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:47:11.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:47:11.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T00:47:11.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T00:47:11.228 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:47:11.228 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:47:11.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:47:11.236 [DEBUG] [Thread-137645] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:47:11.866 [DEBUG] [Thread-137647 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:47:26.911 [DEBUG] [Thread-137648 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:47:41.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T00:47:41.259 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T00:47:41.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T00:47:41.946 [DEBUG] [Thread-137649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:47:41.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 0, 47, 14), 3.32, 80.38, 0.0, 18.63, 14.27, 0, 1, 0, 2, 0, 0),)
2026-01-01T00:47:41.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 00:47:14
2026-01-01T00:47:42.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T00:47:42.258 [DEBUG] [Thread-137650] [transport.py] [_log()] starting thread (client mode): 0xb9579e40
2026-01-01T00:47:42.259 [DEBUG] [Thread-137650] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:47:42.272 [DEBUG] [Thread-137650] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T00:47:42.272 [INFO] [Thread-137650] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T00:47:42.274 [DEBUG] [Thread-137650] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:47:42.274 [DEBUG] [Thread-137650] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T00:47:42.274 [DEBUG] [Thread-137650] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:47:42.274 [DEBUG] [Thread-137650] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:47:42.274 [DEBUG] [Thread-137650] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:47:42.274 [DEBUG] [Thread-137650] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:47:42.274 [DEBUG] [Thread-137650] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:47:42.274 [DEBUG] [Thread-137650] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:47:42.275 [DEBUG] [Thread-137650] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:47:42.275 [DEBUG] [Thread-137650] [transport.py] [_log()] client lang: <none>
2026-01-01T00:47:42.275 [DEBUG] [Thread-137650] [transport.py] [_log()] server lang: <none>
2026-01-01T00:47:42.275 [DEBUG] [Thread-137650] [transport.py] [_log()] kex follows: False
2026-01-01T00:47:42.275 [DEBUG] [Thread-137650] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:47:42.275 [DEBUG] [Thread-137650] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:47:42.275 [DEBUG] [Thread-137650] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:47:42.275 [DEBUG] [Thread-137650] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:47:42.275 [DEBUG] [Thread-137650] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:47:42.275 [DEBUG] [Thread-137650] [transport.py] [_log()] Compression: none
2026-01-01T00:47:42.275 [DEBUG] [Thread-137650] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:47:42.290 [DEBUG] [Thread-137650] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:47:42.291 [DEBUG] [Thread-137650] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:47:42.292 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T00:47:42.293 [DEBUG] [Thread-137650] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T00:47:42.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:47:42.294 [DEBUG] [Thread-137650] [transport.py] [_log()] userauth is OK
2026-01-01T00:47:42.295 [DEBUG] [Thread-137650] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:47:42.295 [DEBUG] [Thread-137650] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:47:42.295 [DEBUG] [Thread-137650] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T00:47:42.295 [DEBUG] [Thread-137650] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:47:42.315 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:47:42.316 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:47:42.321 [INFO] [Thread-137650] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:47:42.322 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:47:42.975 [DEBUG] [Thread-137650] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:47:42.975 [DEBUG] [Thread-137650] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:47:42.976 [DEBUG] [Thread-137650] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T00:47:43.016 [DEBUG] [Thread-137650] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:47:43.016 [DEBUG] [Thread-137650] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:47:43.020 [DEBUG] [Thread-137650] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:47:43.032 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:47:43.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T00:47:43.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T00:47:43.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T00:47:43.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:47:43.044 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T00:47:43.044 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:47:43.045 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:47:43.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T00:47:43.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.949439 -999.00  +14.50   9.58     82  +11.40 1 2 1 2 1     0    0 2.99 -0.89 ..... 9.6 9.6 229.3 19.3 15.7 -13.8 15.5 -13.7 15.3 -12.7 15.7 -12.8
2026-01-01T00:47:43.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T00:47:43.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T00:47:43.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.949439
2026-01-01T00:47:43.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T00:47:43.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T00:47:43.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T00:47:43.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T00:47:43.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T00:47:43.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T00:47:14', tmtdew=3.32, humidity=80.38, cloud=0.0, wind=18.63, temperature=14.27, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T22:47:11.530', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T00:47:43.047 [DEBUG] [Thread-137650] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:47:43.126 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T00:47:43.137 [DEBUG] [Thread-137653] [transport.py] [_log()] starting thread (client mode): 0xb6b62c80
2026-01-01T00:47:43.137 [DEBUG] [Thread-137653] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:47:43.156 [DEBUG] [Thread-137653] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T00:47:43.157 [INFO] [Thread-137653] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T00:47:43.164 [DEBUG] [Thread-137653] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:47:43.164 [DEBUG] [Thread-137653] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T00:47:43.164 [DEBUG] [Thread-137653] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:47:43.164 [DEBUG] [Thread-137653] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:47:43.165 [DEBUG] [Thread-137653] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:47:43.165 [DEBUG] [Thread-137653] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:47:43.165 [DEBUG] [Thread-137653] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:47:43.165 [DEBUG] [Thread-137653] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:47:43.165 [DEBUG] [Thread-137653] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:47:43.165 [DEBUG] [Thread-137653] [transport.py] [_log()] client lang: <none>
2026-01-01T00:47:43.165 [DEBUG] [Thread-137653] [transport.py] [_log()] server lang: <none>
2026-01-01T00:47:43.165 [DEBUG] [Thread-137653] [transport.py] [_log()] kex follows: False
2026-01-01T00:47:43.165 [DEBUG] [Thread-137653] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:47:43.165 [DEBUG] [Thread-137653] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:47:43.165 [DEBUG] [Thread-137653] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:47:43.165 [DEBUG] [Thread-137653] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:47:43.165 [DEBUG] [Thread-137653] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:47:43.165 [DEBUG] [Thread-137653] [transport.py] [_log()] Compression: none
2026-01-01T00:47:43.165 [DEBUG] [Thread-137653] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:47:43.224 [DEBUG] [Thread-137653] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:47:43.224 [DEBUG] [Thread-137653] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:47:43.225 [DEBUG] [Thread-137653] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T00:47:43.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T00:47:43.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:47:43.280 [DEBUG] [Thread-137653] [transport.py] [_log()] userauth is OK
2026-01-01T00:47:43.280 [DEBUG] [Thread-137653] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:47:43.281 [DEBUG] [Thread-137653] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:47:43.281 [DEBUG] [Thread-137653] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T00:47:43.281 [DEBUG] [Thread-137653] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:47:43.300 [INFO] [Thread-137653] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:47:43.301 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T00:47:43.301 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:47:44.183 [DEBUG] [Thread-137653] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:47:44.183 [DEBUG] [Thread-137653] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:47:44.231 [DEBUG] [Thread-137653] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:47:44.231 [DEBUG] [Thread-137653] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:47:44.240 [DEBUG] [Thread-137653] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:47:44.249 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:47:44.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T00:47:44.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T00:47:44.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:47:44.266 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:47:44.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:47:44.274 [DEBUG] [Thread-137653] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:47:56.975 [DEBUG] [Thread-137655 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:47:57.794 [DEBUG] [Thread-137656 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:48:12.030 [DEBUG] [Thread-137657 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:48:14.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T00:48:14.298 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T00:48:14.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T00:48:15.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 0, 47, 46), 3.3, 80.25, 0.0, 17.1, 14.17, 0, 1, 0, 2, 0, 0),)
2026-01-01T00:48:15.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 00:47:46
2026-01-01T00:48:15.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T00:48:15.279 [DEBUG] [Thread-137658] [transport.py] [_log()] starting thread (client mode): 0xb95584c0
2026-01-01T00:48:15.279 [DEBUG] [Thread-137658] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:48:15.299 [DEBUG] [Thread-137658] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T00:48:15.300 [INFO] [Thread-137658] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T00:48:15.303 [DEBUG] [Thread-137658] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:48:15.303 [DEBUG] [Thread-137658] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T00:48:15.303 [DEBUG] [Thread-137658] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:48:15.303 [DEBUG] [Thread-137658] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:48:15.303 [DEBUG] [Thread-137658] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:48:15.303 [DEBUG] [Thread-137658] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:48:15.303 [DEBUG] [Thread-137658] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:48:15.304 [DEBUG] [Thread-137658] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:48:15.304 [DEBUG] [Thread-137658] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:48:15.304 [DEBUG] [Thread-137658] [transport.py] [_log()] client lang: <none>
2026-01-01T00:48:15.304 [DEBUG] [Thread-137658] [transport.py] [_log()] server lang: <none>
2026-01-01T00:48:15.304 [DEBUG] [Thread-137658] [transport.py] [_log()] kex follows: False
2026-01-01T00:48:15.304 [DEBUG] [Thread-137658] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:48:15.304 [DEBUG] [Thread-137658] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:48:15.304 [DEBUG] [Thread-137658] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:48:15.304 [DEBUG] [Thread-137658] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:48:15.304 [DEBUG] [Thread-137658] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:48:15.304 [DEBUG] [Thread-137658] [transport.py] [_log()] Compression: none
2026-01-01T00:48:15.304 [DEBUG] [Thread-137658] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:48:15.322 [DEBUG] [Thread-137658] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:48:15.323 [DEBUG] [Thread-137658] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:48:15.323 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T00:48:15.324 [DEBUG] [Thread-137658] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T00:48:15.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:48:15.326 [DEBUG] [Thread-137658] [transport.py] [_log()] userauth is OK
2026-01-01T00:48:15.326 [DEBUG] [Thread-137658] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:48:15.326 [DEBUG] [Thread-137658] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:48:15.326 [DEBUG] [Thread-137658] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T00:48:15.327 [DEBUG] [Thread-137658] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:48:15.351 [INFO] [Thread-137658] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:48:15.352 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:48:15.995 [DEBUG] [Thread-137658] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:48:15.995 [DEBUG] [Thread-137658] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:48:15.995 [DEBUG] [Thread-137658] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T00:48:16.037 [DEBUG] [Thread-137658] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:48:16.038 [DEBUG] [Thread-137658] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:48:16.041 [DEBUG] [Thread-137658] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:48:16.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:48:16.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T00:48:16.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T00:48:16.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T00:48:16.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:48:16.065 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T00:48:16.065 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:48:16.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:48:16.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T00:48:16.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.949786 -999.00  +14.50   9.69     82  +11.40 1 2 1 2 1     0    0 3.01 -0.50 ..ES. 9.2 9.7 196.7 14.3 15.7 -13.9 15.5 -14.1 15.3 -12.7 15.7 -12.8
2026-01-01T00:48:16.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T00:48:16.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T00:48:16.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.949786
2026-01-01T00:48:16.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T00:48:16.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T00:48:16.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T00:48:16.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T00:48:16.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T00:48:16.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T00:47:46', tmtdew=3.3, humidity=80.25, cloud=0.0, wind=17.1, temperature=14.17, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T22:47:41.510', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T00:48:16.068 [DEBUG] [Thread-137658] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:48:16.151 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T00:48:16.164 [DEBUG] [Thread-137661] [transport.py] [_log()] starting thread (client mode): 0xb6bbc6a0
2026-01-01T00:48:16.164 [DEBUG] [Thread-137661] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:48:16.179 [DEBUG] [Thread-137661] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T00:48:16.180 [INFO] [Thread-137661] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T00:48:16.187 [DEBUG] [Thread-137661] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:48:16.187 [DEBUG] [Thread-137661] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T00:48:16.188 [DEBUG] [Thread-137661] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:48:16.188 [DEBUG] [Thread-137661] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:48:16.188 [DEBUG] [Thread-137661] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:48:16.188 [DEBUG] [Thread-137661] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:48:16.188 [DEBUG] [Thread-137661] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:48:16.188 [DEBUG] [Thread-137661] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:48:16.188 [DEBUG] [Thread-137661] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:48:16.188 [DEBUG] [Thread-137661] [transport.py] [_log()] client lang: <none>
2026-01-01T00:48:16.188 [DEBUG] [Thread-137661] [transport.py] [_log()] server lang: <none>
2026-01-01T00:48:16.188 [DEBUG] [Thread-137661] [transport.py] [_log()] kex follows: False
2026-01-01T00:48:16.188 [DEBUG] [Thread-137661] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:48:16.188 [DEBUG] [Thread-137661] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:48:16.189 [DEBUG] [Thread-137661] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:48:16.189 [DEBUG] [Thread-137661] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:48:16.189 [DEBUG] [Thread-137661] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:48:16.189 [DEBUG] [Thread-137661] [transport.py] [_log()] Compression: none
2026-01-01T00:48:16.189 [DEBUG] [Thread-137661] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:48:16.245 [DEBUG] [Thread-137661] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:48:16.245 [DEBUG] [Thread-137661] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:48:16.246 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T00:48:16.246 [DEBUG] [Thread-137661] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T00:48:16.247 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:48:16.301 [DEBUG] [Thread-137661] [transport.py] [_log()] userauth is OK
2026-01-01T00:48:16.301 [DEBUG] [Thread-137661] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:48:16.301 [DEBUG] [Thread-137661] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:48:16.301 [DEBUG] [Thread-137661] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T00:48:16.301 [DEBUG] [Thread-137661] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:48:16.320 [INFO] [Thread-137661] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:48:16.320 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T00:48:16.321 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:48:17.172 [DEBUG] [Thread-137661] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:48:17.172 [DEBUG] [Thread-137661] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:48:17.220 [DEBUG] [Thread-137661] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:48:17.220 [DEBUG] [Thread-137661] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:48:17.229 [DEBUG] [Thread-137661] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:48:17.239 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:48:17.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T00:48:17.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T00:48:17.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:48:17.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:48:17.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:48:17.267 [DEBUG] [Thread-137661] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:48:27.061 [DEBUG] [Thread-137663 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:48:42.101 [DEBUG] [Thread-137664 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:48:42.517 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:48:42.518 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:48:47.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T00:48:47.290 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T00:48:47.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T00:48:47.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 0, 48, 19), 3.28, 80.33, 0.0, 18.0, 14.19, 0, 1, 0, 2, 0, 0),)
2026-01-01T00:48:47.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 00:48:19
2026-01-01T00:48:48.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T00:48:48.270 [DEBUG] [Thread-137665] [transport.py] [_log()] starting thread (client mode): 0xb6b62110
2026-01-01T00:48:48.270 [DEBUG] [Thread-137665] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:48:48.292 [DEBUG] [Thread-137665] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T00:48:48.292 [INFO] [Thread-137665] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T00:48:48.296 [DEBUG] [Thread-137665] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:48:48.296 [DEBUG] [Thread-137665] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T00:48:48.297 [DEBUG] [Thread-137665] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:48:48.297 [DEBUG] [Thread-137665] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:48:48.297 [DEBUG] [Thread-137665] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:48:48.297 [DEBUG] [Thread-137665] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:48:48.297 [DEBUG] [Thread-137665] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:48:48.297 [DEBUG] [Thread-137665] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:48:48.297 [DEBUG] [Thread-137665] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:48:48.297 [DEBUG] [Thread-137665] [transport.py] [_log()] client lang: <none>
2026-01-01T00:48:48.297 [DEBUG] [Thread-137665] [transport.py] [_log()] server lang: <none>
2026-01-01T00:48:48.297 [DEBUG] [Thread-137665] [transport.py] [_log()] kex follows: False
2026-01-01T00:48:48.297 [DEBUG] [Thread-137665] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:48:48.298 [DEBUG] [Thread-137665] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:48:48.298 [DEBUG] [Thread-137665] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:48:48.298 [DEBUG] [Thread-137665] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:48:48.298 [DEBUG] [Thread-137665] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:48:48.298 [DEBUG] [Thread-137665] [transport.py] [_log()] Compression: none
2026-01-01T00:48:48.298 [DEBUG] [Thread-137665] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:48:48.315 [DEBUG] [Thread-137665] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:48:48.316 [DEBUG] [Thread-137665] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:48:48.317 [DEBUG] [Thread-137665] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T00:48:48.317 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T00:48:48.317 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:48:48.319 [DEBUG] [Thread-137665] [transport.py] [_log()] userauth is OK
2026-01-01T00:48:48.319 [DEBUG] [Thread-137665] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:48:48.319 [DEBUG] [Thread-137665] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:48:48.319 [DEBUG] [Thread-137665] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T00:48:48.319 [DEBUG] [Thread-137665] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:48:48.345 [INFO] [Thread-137665] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:48:48.346 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:48:49.014 [DEBUG] [Thread-137665] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:48:49.015 [DEBUG] [Thread-137665] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:48:49.015 [DEBUG] [Thread-137665] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T00:48:49.056 [DEBUG] [Thread-137665] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:48:49.056 [DEBUG] [Thread-137665] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:48:49.060 [DEBUG] [Thread-137665] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:48:49.074 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:48:49.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T00:48:49.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T00:48:49.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T00:48:49.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:48:49.087 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T00:48:49.087 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:48:49.087 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:48:49.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T00:48:49.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.950481 -999.00  +14.50  11.84     82  +11.40 1 2 1 2 1     0    0 3.06 0.54 Z.ES. 7.7 11.8 203.7 18.7 15.7 -14.1 15.5 -14.3 15.3 -13.0 15.7 -13.1
2026-01-01T00:48:49.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T00:48:49.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T00:48:49.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.950481
2026-01-01T00:48:49.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T00:48:49.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T00:48:49.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T00:48:49.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T00:48:49.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T00:48:49.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T00:48:19', tmtdew=3.28, humidity=80.33, cloud=0.0, wind=18.0, temperature=14.19, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T22:48:41.558', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T00:48:49.089 [DEBUG] [Thread-137665] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:48:49.173 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T00:48:49.184 [DEBUG] [Thread-137668] [transport.py] [_log()] starting thread (client mode): 0xb1747610
2026-01-01T00:48:49.184 [DEBUG] [Thread-137668] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:48:49.202 [DEBUG] [Thread-137668] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T00:48:49.202 [INFO] [Thread-137668] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T00:48:49.210 [DEBUG] [Thread-137668] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:48:49.210 [DEBUG] [Thread-137668] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T00:48:49.211 [DEBUG] [Thread-137668] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:48:49.211 [DEBUG] [Thread-137668] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:48:49.211 [DEBUG] [Thread-137668] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:48:49.211 [DEBUG] [Thread-137668] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:48:49.211 [DEBUG] [Thread-137668] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:48:49.211 [DEBUG] [Thread-137668] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:48:49.211 [DEBUG] [Thread-137668] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:48:49.211 [DEBUG] [Thread-137668] [transport.py] [_log()] client lang: <none>
2026-01-01T00:48:49.212 [DEBUG] [Thread-137668] [transport.py] [_log()] server lang: <none>
2026-01-01T00:48:49.212 [DEBUG] [Thread-137668] [transport.py] [_log()] kex follows: False
2026-01-01T00:48:49.212 [DEBUG] [Thread-137668] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:48:49.212 [DEBUG] [Thread-137668] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:48:49.212 [DEBUG] [Thread-137668] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:48:49.212 [DEBUG] [Thread-137668] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:48:49.213 [DEBUG] [Thread-137668] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:48:49.213 [DEBUG] [Thread-137668] [transport.py] [_log()] Compression: none
2026-01-01T00:48:49.213 [DEBUG] [Thread-137668] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:48:49.272 [DEBUG] [Thread-137668] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:48:49.272 [DEBUG] [Thread-137668] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:48:49.273 [DEBUG] [Thread-137668] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T00:48:49.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T00:48:49.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:48:49.329 [DEBUG] [Thread-137668] [transport.py] [_log()] userauth is OK
2026-01-01T00:48:49.329 [DEBUG] [Thread-137668] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:48:49.330 [DEBUG] [Thread-137668] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:48:49.330 [DEBUG] [Thread-137668] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T00:48:49.330 [DEBUG] [Thread-137668] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:48:49.349 [INFO] [Thread-137668] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:48:49.350 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T00:48:49.350 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:48:50.204 [DEBUG] [Thread-137668] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:48:50.205 [DEBUG] [Thread-137668] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:48:50.253 [DEBUG] [Thread-137668] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:48:50.254 [DEBUG] [Thread-137668] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:48:50.263 [DEBUG] [Thread-137668] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:48:50.272 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:48:50.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T00:48:50.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T00:48:50.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:48:50.291 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:48:50.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:48:50.300 [DEBUG] [Thread-137668] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:48:57.140 [DEBUG] [Thread-137670 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:48:57.882 [DEBUG] [Thread-137671 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:49:12.185 [DEBUG] [Thread-137672 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:49:20.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T00:49:20.322 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T00:49:20.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T00:49:21.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 0, 48, 51), 3.33, 80.35, 0.0, 16.78, 14.25, 0, 1, 0, 2, 0, 0),)
2026-01-01T00:49:21.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 00:48:51
2026-01-01T00:49:21.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T00:49:21.307 [DEBUG] [Thread-137673] [transport.py] [_log()] starting thread (client mode): 0xb1744b50
2026-01-01T00:49:21.307 [DEBUG] [Thread-137673] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:49:21.327 [DEBUG] [Thread-137673] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T00:49:21.328 [INFO] [Thread-137673] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T00:49:21.331 [DEBUG] [Thread-137673] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:49:21.331 [DEBUG] [Thread-137673] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T00:49:21.331 [DEBUG] [Thread-137673] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:49:21.331 [DEBUG] [Thread-137673] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:49:21.331 [DEBUG] [Thread-137673] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:49:21.331 [DEBUG] [Thread-137673] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:49:21.331 [DEBUG] [Thread-137673] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:49:21.331 [DEBUG] [Thread-137673] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:49:21.331 [DEBUG] [Thread-137673] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:49:21.331 [DEBUG] [Thread-137673] [transport.py] [_log()] client lang: <none>
2026-01-01T00:49:21.331 [DEBUG] [Thread-137673] [transport.py] [_log()] server lang: <none>
2026-01-01T00:49:21.332 [DEBUG] [Thread-137673] [transport.py] [_log()] kex follows: False
2026-01-01T00:49:21.332 [DEBUG] [Thread-137673] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:49:21.332 [DEBUG] [Thread-137673] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:49:21.332 [DEBUG] [Thread-137673] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:49:21.332 [DEBUG] [Thread-137673] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:49:21.332 [DEBUG] [Thread-137673] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:49:21.332 [DEBUG] [Thread-137673] [transport.py] [_log()] Compression: none
2026-01-01T00:49:21.332 [DEBUG] [Thread-137673] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:49:21.345 [DEBUG] [Thread-137673] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:49:21.346 [DEBUG] [Thread-137673] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:49:21.346 [DEBUG] [Thread-137673] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T00:49:21.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T00:49:21.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:49:21.348 [DEBUG] [Thread-137673] [transport.py] [_log()] userauth is OK
2026-01-01T00:49:21.349 [DEBUG] [Thread-137673] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:49:21.349 [DEBUG] [Thread-137673] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:49:21.349 [DEBUG] [Thread-137673] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T00:49:21.349 [DEBUG] [Thread-137673] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:49:21.373 [INFO] [Thread-137673] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:49:21.374 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:49:22.048 [DEBUG] [Thread-137673] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:49:22.048 [DEBUG] [Thread-137673] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:49:22.049 [DEBUG] [Thread-137673] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T00:49:22.089 [DEBUG] [Thread-137673] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:49:22.089 [DEBUG] [Thread-137673] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:49:22.092 [DEBUG] [Thread-137673] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:49:22.107 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:49:22.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T00:49:22.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T00:49:22.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T00:49:22.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:49:22.121 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T00:49:22.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:49:22.121 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:49:22.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T00:49:22.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.950827 -999.00  +14.50   9.31     82  +11.40 1 2 1 2 1     0    0 3.06 0.96 Z..S. 7.7 9.3 210.4 12.9 15.7 -14.4 15.5 -14.3 15.4 -13.0 15.7 -13.4
2026-01-01T00:49:22.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T00:49:22.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T00:49:22.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.950827
2026-01-01T00:49:22.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T00:49:22.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T00:49:22.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T00:49:22.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T00:49:22.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T00:49:22.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T00:48:51', tmtdew=3.33, humidity=80.35, cloud=0.0, wind=16.78, temperature=14.25, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T22:49:11.453', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T00:49:22.123 [DEBUG] [Thread-137673] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:49:22.206 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T00:49:22.220 [DEBUG] [Thread-137676] [transport.py] [_log()] starting thread (client mode): 0xb95f23b0
2026-01-01T00:49:22.220 [DEBUG] [Thread-137676] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:49:22.235 [DEBUG] [Thread-137676] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T00:49:22.235 [INFO] [Thread-137676] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T00:49:22.243 [DEBUG] [Thread-137676] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:49:22.243 [DEBUG] [Thread-137676] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T00:49:22.243 [DEBUG] [Thread-137676] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:49:22.244 [DEBUG] [Thread-137676] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:49:22.244 [DEBUG] [Thread-137676] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:49:22.244 [DEBUG] [Thread-137676] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:49:22.244 [DEBUG] [Thread-137676] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:49:22.244 [DEBUG] [Thread-137676] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:49:22.244 [DEBUG] [Thread-137676] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:49:22.244 [DEBUG] [Thread-137676] [transport.py] [_log()] client lang: <none>
2026-01-01T00:49:22.244 [DEBUG] [Thread-137676] [transport.py] [_log()] server lang: <none>
2026-01-01T00:49:22.244 [DEBUG] [Thread-137676] [transport.py] [_log()] kex follows: False
2026-01-01T00:49:22.245 [DEBUG] [Thread-137676] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:49:22.245 [DEBUG] [Thread-137676] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:49:22.245 [DEBUG] [Thread-137676] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:49:22.245 [DEBUG] [Thread-137676] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:49:22.245 [DEBUG] [Thread-137676] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:49:22.245 [DEBUG] [Thread-137676] [transport.py] [_log()] Compression: none
2026-01-01T00:49:22.246 [DEBUG] [Thread-137676] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:49:22.303 [DEBUG] [Thread-137676] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:49:22.304 [DEBUG] [Thread-137676] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:49:22.304 [DEBUG] [Thread-137676] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T00:49:22.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T00:49:22.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:49:22.359 [DEBUG] [Thread-137676] [transport.py] [_log()] userauth is OK
2026-01-01T00:49:22.360 [DEBUG] [Thread-137676] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:49:22.360 [DEBUG] [Thread-137676] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:49:22.360 [DEBUG] [Thread-137676] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T00:49:22.360 [DEBUG] [Thread-137676] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:49:22.379 [INFO] [Thread-137676] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:49:22.380 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T00:49:22.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:49:23.236 [DEBUG] [Thread-137676] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:49:23.236 [DEBUG] [Thread-137676] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:49:23.284 [DEBUG] [Thread-137676] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:49:23.284 [DEBUG] [Thread-137676] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:49:23.292 [DEBUG] [Thread-137676] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:49:23.300 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:49:23.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T00:49:23.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T00:49:23.316 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:49:23.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:49:23.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:49:23.324 [DEBUG] [Thread-137676] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:49:27.215 [DEBUG] [Thread-137678 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:49:42.265 [DEBUG] [Thread-137679 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:49:42.722 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:49:42.723 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:49:53.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T00:49:53.328 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T00:49:53.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T00:49:54.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 0, 49, 23), 3.34, 80.3, 0.0, 17.5, 14.24, 0, 1, 0, 2, 0, 0),)
2026-01-01T00:49:54.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 00:49:23
2026-01-01T00:49:54.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T00:49:54.314 [DEBUG] [Thread-137680] [transport.py] [_log()] starting thread (client mode): 0xb17463b0
2026-01-01T00:49:54.314 [DEBUG] [Thread-137680] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:49:54.324 [DEBUG] [Thread-137680] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T00:49:54.324 [INFO] [Thread-137680] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T00:49:54.327 [DEBUG] [Thread-137680] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:49:54.327 [DEBUG] [Thread-137680] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T00:49:54.327 [DEBUG] [Thread-137680] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:49:54.327 [DEBUG] [Thread-137680] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:49:54.327 [DEBUG] [Thread-137680] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:49:54.327 [DEBUG] [Thread-137680] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:49:54.327 [DEBUG] [Thread-137680] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:49:54.327 [DEBUG] [Thread-137680] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:49:54.327 [DEBUG] [Thread-137680] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:49:54.328 [DEBUG] [Thread-137680] [transport.py] [_log()] client lang: <none>
2026-01-01T00:49:54.328 [DEBUG] [Thread-137680] [transport.py] [_log()] server lang: <none>
2026-01-01T00:49:54.328 [DEBUG] [Thread-137680] [transport.py] [_log()] kex follows: False
2026-01-01T00:49:54.328 [DEBUG] [Thread-137680] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:49:54.328 [DEBUG] [Thread-137680] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:49:54.328 [DEBUG] [Thread-137680] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:49:54.328 [DEBUG] [Thread-137680] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:49:54.328 [DEBUG] [Thread-137680] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:49:54.328 [DEBUG] [Thread-137680] [transport.py] [_log()] Compression: none
2026-01-01T00:49:54.328 [DEBUG] [Thread-137680] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:49:54.341 [DEBUG] [Thread-137680] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:49:54.342 [DEBUG] [Thread-137680] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:49:54.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T00:49:54.343 [DEBUG] [Thread-137680] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T00:49:54.344 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:49:54.345 [DEBUG] [Thread-137680] [transport.py] [_log()] userauth is OK
2026-01-01T00:49:54.345 [DEBUG] [Thread-137680] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:49:54.345 [DEBUG] [Thread-137680] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:49:54.345 [DEBUG] [Thread-137680] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T00:49:54.345 [DEBUG] [Thread-137680] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:49:54.385 [INFO] [Thread-137680] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:49:54.386 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:49:54.976 [DEBUG] [Thread-137680] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:49:54.977 [DEBUG] [Thread-137680] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:49:54.978 [DEBUG] [Thread-137680] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T00:49:55.017 [DEBUG] [Thread-137680] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:49:55.017 [DEBUG] [Thread-137680] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:49:55.021 [DEBUG] [Thread-137680] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:49:55.032 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:49:55.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T00:49:55.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T00:49:55.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T00:49:55.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:49:55.044 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T00:49:55.044 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:49:55.044 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:49:55.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T00:49:55.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.951175 -999.00  +14.50  11.22     82  +11.50 1 2 1 2 1     0    0 3.01 1.19 Z..S. 16.4 11.2 199.6 16.7 15.7 -14.5 15.4 -14.9 15.3 -13.2 15.6 -13.5
2026-01-01T00:49:55.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T00:49:55.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T00:49:55.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.951175
2026-01-01T00:49:55.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T00:49:55.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T00:49:55.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T00:49:55.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T00:49:55.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T00:49:55.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T00:49:23', tmtdew=3.34, humidity=80.3, cloud=0.0, wind=17.5, temperature=14.24, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T22:49:41.520', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T00:49:55.047 [DEBUG] [Thread-137680] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:49:55.119 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T00:49:55.132 [DEBUG] [Thread-137683] [transport.py] [_log()] starting thread (client mode): 0xb1747310
2026-01-01T00:49:55.132 [DEBUG] [Thread-137683] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:49:55.147 [DEBUG] [Thread-137683] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T00:49:55.147 [INFO] [Thread-137683] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T00:49:55.155 [DEBUG] [Thread-137683] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:49:55.155 [DEBUG] [Thread-137683] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T00:49:55.155 [DEBUG] [Thread-137683] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:49:55.155 [DEBUG] [Thread-137683] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:49:55.155 [DEBUG] [Thread-137683] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:49:55.155 [DEBUG] [Thread-137683] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:49:55.155 [DEBUG] [Thread-137683] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:49:55.155 [DEBUG] [Thread-137683] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:49:55.155 [DEBUG] [Thread-137683] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:49:55.155 [DEBUG] [Thread-137683] [transport.py] [_log()] client lang: <none>
2026-01-01T00:49:55.156 [DEBUG] [Thread-137683] [transport.py] [_log()] server lang: <none>
2026-01-01T00:49:55.156 [DEBUG] [Thread-137683] [transport.py] [_log()] kex follows: False
2026-01-01T00:49:55.156 [DEBUG] [Thread-137683] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:49:55.156 [DEBUG] [Thread-137683] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:49:55.156 [DEBUG] [Thread-137683] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:49:55.156 [DEBUG] [Thread-137683] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:49:55.156 [DEBUG] [Thread-137683] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:49:55.156 [DEBUG] [Thread-137683] [transport.py] [_log()] Compression: none
2026-01-01T00:49:55.156 [DEBUG] [Thread-137683] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:49:55.212 [DEBUG] [Thread-137683] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:49:55.213 [DEBUG] [Thread-137683] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:49:55.213 [DEBUG] [Thread-137683] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T00:49:55.214 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T00:49:55.214 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:49:55.270 [DEBUG] [Thread-137683] [transport.py] [_log()] userauth is OK
2026-01-01T00:49:55.270 [DEBUG] [Thread-137683] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:49:55.270 [DEBUG] [Thread-137683] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:49:55.270 [DEBUG] [Thread-137683] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T00:49:55.270 [DEBUG] [Thread-137683] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:49:55.287 [INFO] [Thread-137683] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:49:55.287 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T00:49:55.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:49:56.096 [DEBUG] [Thread-137683] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:49:56.097 [DEBUG] [Thread-137683] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:49:56.144 [DEBUG] [Thread-137683] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:49:56.144 [DEBUG] [Thread-137683] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:49:56.154 [DEBUG] [Thread-137683] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:49:56.161 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:49:56.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T00:49:56.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T00:49:56.177 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:49:56.177 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:49:56.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:49:56.185 [DEBUG] [Thread-137683] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:49:57.293 [DEBUG] [Thread-137685 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:49:57.964 [DEBUG] [Thread-137686 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:50:12.344 [DEBUG] [Thread-137687 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:50:26.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T00:50:26.207 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T00:50:26.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T00:50:26.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 0, 49, 55), 3.33, 80.35, 0.0, 15.72, 14.2, 0, 1, 0, 2, 0, 0),)
2026-01-01T00:50:26.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 00:49:55
2026-01-01T00:50:27.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T00:50:27.197 [DEBUG] [Thread-137688] [transport.py] [_log()] starting thread (client mode): 0xb95f2cb0
2026-01-01T00:50:27.197 [DEBUG] [Thread-137688] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:50:27.217 [DEBUG] [Thread-137688] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T00:50:27.217 [INFO] [Thread-137688] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T00:50:27.220 [DEBUG] [Thread-137688] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:50:27.220 [DEBUG] [Thread-137688] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T00:50:27.220 [DEBUG] [Thread-137688] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:50:27.221 [DEBUG] [Thread-137688] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:50:27.221 [DEBUG] [Thread-137688] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:50:27.221 [DEBUG] [Thread-137688] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:50:27.221 [DEBUG] [Thread-137688] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:50:27.221 [DEBUG] [Thread-137688] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:50:27.221 [DEBUG] [Thread-137688] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:50:27.221 [DEBUG] [Thread-137688] [transport.py] [_log()] client lang: <none>
2026-01-01T00:50:27.221 [DEBUG] [Thread-137688] [transport.py] [_log()] server lang: <none>
2026-01-01T00:50:27.221 [DEBUG] [Thread-137688] [transport.py] [_log()] kex follows: False
2026-01-01T00:50:27.221 [DEBUG] [Thread-137688] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:50:27.221 [DEBUG] [Thread-137688] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:50:27.221 [DEBUG] [Thread-137688] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:50:27.221 [DEBUG] [Thread-137688] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:50:27.221 [DEBUG] [Thread-137688] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:50:27.221 [DEBUG] [Thread-137688] [transport.py] [_log()] Compression: none
2026-01-01T00:50:27.221 [DEBUG] [Thread-137688] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:50:27.238 [DEBUG] [Thread-137688] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:50:27.238 [DEBUG] [Thread-137688] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:50:27.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T00:50:27.240 [DEBUG] [Thread-137688] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T00:50:27.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:50:27.241 [DEBUG] [Thread-137688] [transport.py] [_log()] userauth is OK
2026-01-01T00:50:27.242 [DEBUG] [Thread-137688] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:50:27.242 [DEBUG] [Thread-137688] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:50:27.242 [DEBUG] [Thread-137688] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T00:50:27.242 [DEBUG] [Thread-137688] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:50:27.266 [INFO] [Thread-137688] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:50:27.266 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:50:27.377 [DEBUG] [Thread-137690 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:50:27.875 [DEBUG] [Thread-137688] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:50:27.875 [DEBUG] [Thread-137688] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:50:27.876 [DEBUG] [Thread-137688] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T00:50:27.917 [DEBUG] [Thread-137688] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:50:27.917 [DEBUG] [Thread-137688] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:50:27.919 [DEBUG] [Thread-137688] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:50:27.925 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:50:27.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T00:50:27.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T00:50:27.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T00:50:27.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:50:27.929 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T00:50:27.929 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:50:27.929 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:50:27.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T00:50:27.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.951522 -999.00  +14.40  16.42     82  +11.40 1 2 1 2 1     0    0 3.01 0.88 Z..S. 16.3 16.4 209.8 20.1 15.7 -14.7 15.5 -15.0 15.3 -13.4 15.6 -13.7
2026-01-01T00:50:27.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T00:50:27.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T00:50:27.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.951522
2026-01-01T00:50:27.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T00:50:27.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T00:50:27.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T00:50:27.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T00:50:27.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T00:50:27.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T00:49:55', tmtdew=3.33, humidity=80.35, cloud=0.0, wind=15.72, temperature=14.2, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T22:50:11.501', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T00:50:27.930 [DEBUG] [Thread-137688] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:50:28.004 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T00:50:28.015 [DEBUG] [Thread-137692] [transport.py] [_log()] starting thread (client mode): 0xb1747ca0
2026-01-01T00:50:28.015 [DEBUG] [Thread-137692] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:50:28.030 [DEBUG] [Thread-137692] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T00:50:28.030 [INFO] [Thread-137692] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T00:50:28.037 [DEBUG] [Thread-137692] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:50:28.037 [DEBUG] [Thread-137692] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T00:50:28.037 [DEBUG] [Thread-137692] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:50:28.037 [DEBUG] [Thread-137692] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:50:28.037 [DEBUG] [Thread-137692] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:50:28.037 [DEBUG] [Thread-137692] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:50:28.038 [DEBUG] [Thread-137692] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:50:28.038 [DEBUG] [Thread-137692] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:50:28.038 [DEBUG] [Thread-137692] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:50:28.038 [DEBUG] [Thread-137692] [transport.py] [_log()] client lang: <none>
2026-01-01T00:50:28.038 [DEBUG] [Thread-137692] [transport.py] [_log()] server lang: <none>
2026-01-01T00:50:28.038 [DEBUG] [Thread-137692] [transport.py] [_log()] kex follows: False
2026-01-01T00:50:28.038 [DEBUG] [Thread-137692] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:50:28.038 [DEBUG] [Thread-137692] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:50:28.038 [DEBUG] [Thread-137692] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:50:28.038 [DEBUG] [Thread-137692] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:50:28.038 [DEBUG] [Thread-137692] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:50:28.038 [DEBUG] [Thread-137692] [transport.py] [_log()] Compression: none
2026-01-01T00:50:28.038 [DEBUG] [Thread-137692] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:50:28.093 [DEBUG] [Thread-137692] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:50:28.093 [DEBUG] [Thread-137692] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:50:28.093 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T00:50:28.093 [DEBUG] [Thread-137692] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T00:50:28.093 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:50:28.150 [DEBUG] [Thread-137692] [transport.py] [_log()] userauth is OK
2026-01-01T00:50:28.150 [DEBUG] [Thread-137692] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:50:28.150 [DEBUG] [Thread-137692] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:50:28.150 [DEBUG] [Thread-137692] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T00:50:28.150 [DEBUG] [Thread-137692] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:50:28.167 [INFO] [Thread-137692] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:50:28.167 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T00:50:28.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:50:29.048 [DEBUG] [Thread-137692] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:50:29.048 [DEBUG] [Thread-137692] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:50:29.096 [DEBUG] [Thread-137692] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:50:29.096 [DEBUG] [Thread-137692] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:50:29.104 [DEBUG] [Thread-137692] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:50:29.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:50:29.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T00:50:29.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T00:50:29.128 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:50:29.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:50:29.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:50:29.136 [DEBUG] [Thread-137692] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:50:42.411 [DEBUG] [Thread-137694 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:50:42.923 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:50:42.924 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:50:57.464 [DEBUG] [Thread-137695 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:50:58.048 [DEBUG] [Thread-137696 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:50:59.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T00:50:59.131 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T00:50:59.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T00:50:59.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 0, 50, 27), 3.33, 80.35, 0.0, 17.2, 14.22, 0, 1, 0, 2, 0, 0),)
2026-01-01T00:50:59.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 00:50:27
2026-01-01T00:51:00.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T00:51:00.206 [DEBUG] [Thread-137697] [transport.py] [_log()] starting thread (client mode): 0xb955bd30
2026-01-01T00:51:00.206 [DEBUG] [Thread-137697] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:51:00.228 [DEBUG] [Thread-137697] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T00:51:00.228 [INFO] [Thread-137697] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T00:51:00.231 [DEBUG] [Thread-137697] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:51:00.231 [DEBUG] [Thread-137697] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T00:51:00.231 [DEBUG] [Thread-137697] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:51:00.231 [DEBUG] [Thread-137697] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:51:00.231 [DEBUG] [Thread-137697] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:51:00.231 [DEBUG] [Thread-137697] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:51:00.231 [DEBUG] [Thread-137697] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:51:00.231 [DEBUG] [Thread-137697] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:51:00.231 [DEBUG] [Thread-137697] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:51:00.231 [DEBUG] [Thread-137697] [transport.py] [_log()] client lang: <none>
2026-01-01T00:51:00.231 [DEBUG] [Thread-137697] [transport.py] [_log()] server lang: <none>
2026-01-01T00:51:00.231 [DEBUG] [Thread-137697] [transport.py] [_log()] kex follows: False
2026-01-01T00:51:00.232 [DEBUG] [Thread-137697] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:51:00.232 [DEBUG] [Thread-137697] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:51:00.232 [DEBUG] [Thread-137697] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:51:00.232 [DEBUG] [Thread-137697] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:51:00.232 [DEBUG] [Thread-137697] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:51:00.232 [DEBUG] [Thread-137697] [transport.py] [_log()] Compression: none
2026-01-01T00:51:00.232 [DEBUG] [Thread-137697] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:51:00.242 [DEBUG] [Thread-137697] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:51:00.242 [DEBUG] [Thread-137697] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:51:00.242 [DEBUG] [Thread-137697] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T00:51:00.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T00:51:00.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:51:00.243 [DEBUG] [Thread-137697] [transport.py] [_log()] userauth is OK
2026-01-01T00:51:00.243 [DEBUG] [Thread-137697] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:51:00.243 [DEBUG] [Thread-137697] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:51:00.243 [DEBUG] [Thread-137697] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T00:51:00.243 [DEBUG] [Thread-137697] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:51:00.256 [INFO] [Thread-137697] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:51:00.256 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:51:00.910 [DEBUG] [Thread-137697] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:51:00.910 [DEBUG] [Thread-137697] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:51:00.910 [DEBUG] [Thread-137697] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T00:51:00.952 [DEBUG] [Thread-137697] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:51:00.952 [DEBUG] [Thread-137697] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:51:00.954 [DEBUG] [Thread-137697] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:51:00.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:51:00.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T00:51:00.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T00:51:00.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T00:51:00.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:51:00.964 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T00:51:00.964 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:51:00.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:51:00.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T00:51:00.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.951870 -999.00  +14.40  10.12     82  +11.50 1 2 1 2 1     0    0 3.01 0.53 Z.ES. 9.3 10.1 207.1 18.1 15.7 -14.7 15.4 -14.9 15.3 -13.5 15.7 -13.6
2026-01-01T00:51:00.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T00:51:00.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T00:51:00.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.951870
2026-01-01T00:51:00.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T00:51:00.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T00:51:00.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T00:51:00.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T00:51:00.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T00:51:00.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T00:50:27', tmtdew=3.33, humidity=80.35, cloud=0.0, wind=17.2, temperature=14.22, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T22:50:41.568', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T00:51:00.965 [DEBUG] [Thread-137697] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:51:01.040 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T00:51:01.052 [DEBUG] [Thread-137700] [transport.py] [_log()] starting thread (client mode): 0xb95f0940
2026-01-01T00:51:01.052 [DEBUG] [Thread-137700] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:51:01.071 [DEBUG] [Thread-137700] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T00:51:01.072 [INFO] [Thread-137700] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T00:51:01.079 [DEBUG] [Thread-137700] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:51:01.079 [DEBUG] [Thread-137700] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T00:51:01.079 [DEBUG] [Thread-137700] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:51:01.079 [DEBUG] [Thread-137700] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:51:01.079 [DEBUG] [Thread-137700] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:51:01.079 [DEBUG] [Thread-137700] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:51:01.079 [DEBUG] [Thread-137700] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:51:01.079 [DEBUG] [Thread-137700] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:51:01.079 [DEBUG] [Thread-137700] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:51:01.079 [DEBUG] [Thread-137700] [transport.py] [_log()] client lang: <none>
2026-01-01T00:51:01.079 [DEBUG] [Thread-137700] [transport.py] [_log()] server lang: <none>
2026-01-01T00:51:01.079 [DEBUG] [Thread-137700] [transport.py] [_log()] kex follows: False
2026-01-01T00:51:01.079 [DEBUG] [Thread-137700] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:51:01.079 [DEBUG] [Thread-137700] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:51:01.079 [DEBUG] [Thread-137700] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:51:01.079 [DEBUG] [Thread-137700] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:51:01.079 [DEBUG] [Thread-137700] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:51:01.080 [DEBUG] [Thread-137700] [transport.py] [_log()] Compression: none
2026-01-01T00:51:01.080 [DEBUG] [Thread-137700] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:51:01.134 [DEBUG] [Thread-137700] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:51:01.135 [DEBUG] [Thread-137700] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:51:01.135 [DEBUG] [Thread-137700] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T00:51:01.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T00:51:01.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:51:01.192 [DEBUG] [Thread-137700] [transport.py] [_log()] userauth is OK
2026-01-01T00:51:01.192 [DEBUG] [Thread-137700] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:51:01.192 [DEBUG] [Thread-137700] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:51:01.192 [DEBUG] [Thread-137700] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T00:51:01.192 [DEBUG] [Thread-137700] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:51:01.206 [INFO] [Thread-137700] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:51:01.206 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T00:51:01.206 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:51:02.042 [DEBUG] [Thread-137700] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:51:02.042 [DEBUG] [Thread-137700] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:51:02.090 [DEBUG] [Thread-137700] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:51:02.090 [DEBUG] [Thread-137700] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:51:02.099 [DEBUG] [Thread-137700] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:51:02.106 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:51:02.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T00:51:02.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T00:51:02.122 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:51:02.122 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:51:02.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:51:02.130 [DEBUG] [Thread-137700] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:51:12.500 [DEBUG] [Thread-137702 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:51:27.550 [DEBUG] [Thread-137703 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:51:32.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T00:51:32.153 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T00:51:32.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T00:51:32.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 0, 50, 59), 3.27, 80.4, 0.0, 14.91, 14.2, 0, 1, 0, 2, 0, 0),)
2026-01-01T00:51:32.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 00:50:59
2026-01-01T00:51:33.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T00:51:33.179 [DEBUG] [Thread-137704] [transport.py] [_log()] starting thread (client mode): 0xb1744eb0
2026-01-01T00:51:33.179 [DEBUG] [Thread-137704] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:51:33.200 [DEBUG] [Thread-137704] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T00:51:33.200 [INFO] [Thread-137704] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T00:51:33.203 [DEBUG] [Thread-137704] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:51:33.203 [DEBUG] [Thread-137704] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T00:51:33.203 [DEBUG] [Thread-137704] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:51:33.203 [DEBUG] [Thread-137704] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:51:33.203 [DEBUG] [Thread-137704] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:51:33.203 [DEBUG] [Thread-137704] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:51:33.203 [DEBUG] [Thread-137704] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:51:33.203 [DEBUG] [Thread-137704] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:51:33.203 [DEBUG] [Thread-137704] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:51:33.203 [DEBUG] [Thread-137704] [transport.py] [_log()] client lang: <none>
2026-01-01T00:51:33.203 [DEBUG] [Thread-137704] [transport.py] [_log()] server lang: <none>
2026-01-01T00:51:33.203 [DEBUG] [Thread-137704] [transport.py] [_log()] kex follows: False
2026-01-01T00:51:33.204 [DEBUG] [Thread-137704] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:51:33.204 [DEBUG] [Thread-137704] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:51:33.204 [DEBUG] [Thread-137704] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:51:33.204 [DEBUG] [Thread-137704] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:51:33.204 [DEBUG] [Thread-137704] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:51:33.204 [DEBUG] [Thread-137704] [transport.py] [_log()] Compression: none
2026-01-01T00:51:33.204 [DEBUG] [Thread-137704] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:51:33.218 [DEBUG] [Thread-137704] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:51:33.218 [DEBUG] [Thread-137704] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:51:33.219 [DEBUG] [Thread-137704] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T00:51:33.219 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T00:51:33.219 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:51:33.219 [DEBUG] [Thread-137704] [transport.py] [_log()] userauth is OK
2026-01-01T00:51:33.219 [DEBUG] [Thread-137704] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:51:33.219 [DEBUG] [Thread-137704] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:51:33.219 [DEBUG] [Thread-137704] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T00:51:33.219 [DEBUG] [Thread-137704] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:51:33.228 [INFO] [Thread-137704] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:51:33.228 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:51:33.996 [DEBUG] [Thread-137704] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:51:33.997 [DEBUG] [Thread-137704] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:51:33.997 [DEBUG] [Thread-137704] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T00:51:34.037 [DEBUG] [Thread-137704] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:51:34.038 [DEBUG] [Thread-137704] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:51:34.040 [DEBUG] [Thread-137704] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:51:34.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:51:34.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T00:51:34.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T00:51:34.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T00:51:34.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:51:34.062 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T00:51:34.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:51:34.063 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:51:34.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T00:51:34.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.951870 -999.00  +14.40  10.12     82  +11.50 1 2 1 2 1     0    0 3.01 0.53 Z.ES. 9.3 10.1 207.1 18.1 15.7 -14.7 15.4 -14.9 15.3 -13.5 15.7 -13.6
2026-01-01T00:51:34.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T00:51:34.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T00:51:34.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.951870
2026-01-01T00:51:34.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T00:51:34.064 [DEBUG] [Thread-137704] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:51:34.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T00:51:34.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T00:51:34.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T00:51:34.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T00:51:34.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T00:50:59', tmtdew=3.27, humidity=80.4, cloud=0.0, wind=14.91, temperature=14.2, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T22:50:41.568', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T00:51:34.151 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T00:51:34.162 [DEBUG] [Thread-137707] [transport.py] [_log()] starting thread (client mode): 0xb1797bb0
2026-01-01T00:51:34.163 [DEBUG] [Thread-137707] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:51:34.177 [DEBUG] [Thread-137707] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T00:51:34.178 [INFO] [Thread-137707] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T00:51:34.185 [DEBUG] [Thread-137707] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:51:34.185 [DEBUG] [Thread-137707] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T00:51:34.185 [DEBUG] [Thread-137707] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:51:34.186 [DEBUG] [Thread-137707] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:51:34.186 [DEBUG] [Thread-137707] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:51:34.186 [DEBUG] [Thread-137707] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:51:34.186 [DEBUG] [Thread-137707] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:51:34.186 [DEBUG] [Thread-137707] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:51:34.186 [DEBUG] [Thread-137707] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:51:34.186 [DEBUG] [Thread-137707] [transport.py] [_log()] client lang: <none>
2026-01-01T00:51:34.186 [DEBUG] [Thread-137707] [transport.py] [_log()] server lang: <none>
2026-01-01T00:51:34.186 [DEBUG] [Thread-137707] [transport.py] [_log()] kex follows: False
2026-01-01T00:51:34.186 [DEBUG] [Thread-137707] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:51:34.186 [DEBUG] [Thread-137707] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:51:34.186 [DEBUG] [Thread-137707] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:51:34.186 [DEBUG] [Thread-137707] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:51:34.186 [DEBUG] [Thread-137707] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:51:34.186 [DEBUG] [Thread-137707] [transport.py] [_log()] Compression: none
2026-01-01T00:51:34.186 [DEBUG] [Thread-137707] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:51:34.246 [DEBUG] [Thread-137707] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:51:34.246 [DEBUG] [Thread-137707] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:51:34.247 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T00:51:34.247 [DEBUG] [Thread-137707] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T00:51:34.248 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:51:34.302 [DEBUG] [Thread-137707] [transport.py] [_log()] userauth is OK
2026-01-01T00:51:34.303 [DEBUG] [Thread-137707] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:51:34.303 [DEBUG] [Thread-137707] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:51:34.303 [DEBUG] [Thread-137707] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T00:51:34.303 [DEBUG] [Thread-137707] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:51:34.322 [INFO] [Thread-137707] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:51:34.322 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T00:51:34.323 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:51:35.177 [DEBUG] [Thread-137707] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:51:35.177 [DEBUG] [Thread-137707] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:51:35.225 [DEBUG] [Thread-137707] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:51:35.226 [DEBUG] [Thread-137707] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:51:35.235 [DEBUG] [Thread-137707] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:51:35.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:51:35.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T00:51:35.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T00:51:35.263 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:51:35.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:51:35.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:51:35.272 [DEBUG] [Thread-137707] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:51:42.579 [DEBUG] [Thread-137709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:51:43.127 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:51:43.128 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:51:57.622 [DEBUG] [Thread-137710 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:51:58.132 [DEBUG] [Thread-137711 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:52:05.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T00:52:05.294 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T00:52:05.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T00:52:06.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 0, 51, 31), 2.17, 86.95, 0.0, 14.72, 9.33, 1, 1, 0, 2, 0, 0),)
2026-01-01T00:52:06.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 00:51:31
2026-01-01T00:52:06.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T00:52:06.282 [DEBUG] [Thread-137712] [transport.py] [_log()] starting thread (client mode): 0xb1794400
2026-01-01T00:52:06.282 [DEBUG] [Thread-137712] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:52:06.303 [DEBUG] [Thread-137712] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T00:52:06.303 [INFO] [Thread-137712] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T00:52:06.306 [DEBUG] [Thread-137712] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:52:06.306 [DEBUG] [Thread-137712] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T00:52:06.307 [DEBUG] [Thread-137712] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:52:06.307 [DEBUG] [Thread-137712] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:52:06.307 [DEBUG] [Thread-137712] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:52:06.307 [DEBUG] [Thread-137712] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:52:06.307 [DEBUG] [Thread-137712] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:52:06.307 [DEBUG] [Thread-137712] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:52:06.307 [DEBUG] [Thread-137712] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:52:06.307 [DEBUG] [Thread-137712] [transport.py] [_log()] client lang: <none>
2026-01-01T00:52:06.307 [DEBUG] [Thread-137712] [transport.py] [_log()] server lang: <none>
2026-01-01T00:52:06.307 [DEBUG] [Thread-137712] [transport.py] [_log()] kex follows: False
2026-01-01T00:52:06.307 [DEBUG] [Thread-137712] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:52:06.307 [DEBUG] [Thread-137712] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:52:06.307 [DEBUG] [Thread-137712] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:52:06.307 [DEBUG] [Thread-137712] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:52:06.307 [DEBUG] [Thread-137712] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:52:06.307 [DEBUG] [Thread-137712] [transport.py] [_log()] Compression: none
2026-01-01T00:52:06.307 [DEBUG] [Thread-137712] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:52:06.324 [DEBUG] [Thread-137712] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:52:06.325 [DEBUG] [Thread-137712] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:52:06.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T00:52:06.325 [DEBUG] [Thread-137712] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T00:52:06.326 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:52:06.328 [DEBUG] [Thread-137712] [transport.py] [_log()] userauth is OK
2026-01-01T00:52:06.328 [DEBUG] [Thread-137712] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:52:06.328 [DEBUG] [Thread-137712] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:52:06.328 [DEBUG] [Thread-137712] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T00:52:06.328 [DEBUG] [Thread-137712] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:52:06.354 [INFO] [Thread-137712] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:52:06.355 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:52:06.987 [DEBUG] [Thread-137712] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:52:06.987 [DEBUG] [Thread-137712] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:52:06.988 [DEBUG] [Thread-137712] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T00:52:07.028 [DEBUG] [Thread-137712] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:52:07.028 [DEBUG] [Thread-137712] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:52:07.031 [DEBUG] [Thread-137712] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:52:07.044 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:52:07.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T00:52:07.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T00:52:07.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T00:52:07.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:52:07.059 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T00:52:07.059 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:52:07.059 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:52:07.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T00:52:07.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.952217 -999.00  +14.40  14.34     82  +11.50 1 2 1 2 1     0    0 2.99 0.09 Z.eS. 15.8 14.3 197.8 19.9 15.7 -14.9 15.4 -15.4 15.3 -13.4 15.7 -13.8
2026-01-01T00:52:07.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T00:52:07.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T00:52:07.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.952217
2026-01-01T00:52:07.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T00:52:07.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T00:52:07.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T00:52:07.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T00:52:07.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T00:52:07.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T00:51:31', tmtdew=2.17, humidity=86.95, cloud=0.0, wind=14.72, temperature=9.33, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T22:51:11.549', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T00:52:07.062 [DEBUG] [Thread-137712] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:52:07.146 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T00:52:07.158 [DEBUG] [Thread-137715] [transport.py] [_log()] starting thread (client mode): 0xb95f03a0
2026-01-01T00:52:07.158 [DEBUG] [Thread-137715] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:52:07.174 [DEBUG] [Thread-137715] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T00:52:07.174 [INFO] [Thread-137715] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T00:52:07.181 [DEBUG] [Thread-137715] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:52:07.181 [DEBUG] [Thread-137715] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T00:52:07.181 [DEBUG] [Thread-137715] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:52:07.181 [DEBUG] [Thread-137715] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:52:07.181 [DEBUG] [Thread-137715] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:52:07.181 [DEBUG] [Thread-137715] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:52:07.181 [DEBUG] [Thread-137715] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:52:07.181 [DEBUG] [Thread-137715] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:52:07.182 [DEBUG] [Thread-137715] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:52:07.182 [DEBUG] [Thread-137715] [transport.py] [_log()] client lang: <none>
2026-01-01T00:52:07.182 [DEBUG] [Thread-137715] [transport.py] [_log()] server lang: <none>
2026-01-01T00:52:07.182 [DEBUG] [Thread-137715] [transport.py] [_log()] kex follows: False
2026-01-01T00:52:07.182 [DEBUG] [Thread-137715] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:52:07.182 [DEBUG] [Thread-137715] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:52:07.182 [DEBUG] [Thread-137715] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:52:07.182 [DEBUG] [Thread-137715] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:52:07.182 [DEBUG] [Thread-137715] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:52:07.182 [DEBUG] [Thread-137715] [transport.py] [_log()] Compression: none
2026-01-01T00:52:07.182 [DEBUG] [Thread-137715] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:52:07.239 [DEBUG] [Thread-137715] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:52:07.240 [DEBUG] [Thread-137715] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:52:07.240 [DEBUG] [Thread-137715] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T00:52:07.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T00:52:07.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:52:07.296 [DEBUG] [Thread-137715] [transport.py] [_log()] userauth is OK
2026-01-01T00:52:07.296 [DEBUG] [Thread-137715] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:52:07.296 [DEBUG] [Thread-137715] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:52:07.296 [DEBUG] [Thread-137715] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T00:52:07.296 [DEBUG] [Thread-137715] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:52:07.316 [INFO] [Thread-137715] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:52:07.316 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T00:52:07.317 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:52:08.201 [DEBUG] [Thread-137715] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:52:08.201 [DEBUG] [Thread-137715] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:52:08.249 [DEBUG] [Thread-137715] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:52:08.249 [DEBUG] [Thread-137715] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:52:08.258 [DEBUG] [Thread-137715] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:52:08.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:52:08.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T00:52:08.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T00:52:08.284 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:52:08.284 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:52:08.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:52:08.293 [DEBUG] [Thread-137715] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:52:12.655 [DEBUG] [Thread-137717 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:52:27.700 [DEBUG] [Thread-137718 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:52:38.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T00:52:38.315 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T00:52:38.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T00:52:38.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 0, 52, 35), 2.21, 86.92, 0.0, 15.14, 9.31, 1, 1, 0, 2, 0, 0),)
2026-01-01T00:52:38.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 00:52:35
2026-01-01T00:52:39.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T00:52:39.275 [DEBUG] [Thread-137719] [transport.py] [_log()] starting thread (client mode): 0xb95f15d0
2026-01-01T00:52:39.275 [DEBUG] [Thread-137719] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:52:39.296 [DEBUG] [Thread-137719] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T00:52:39.296 [INFO] [Thread-137719] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T00:52:39.300 [DEBUG] [Thread-137719] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:52:39.300 [DEBUG] [Thread-137719] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T00:52:39.300 [DEBUG] [Thread-137719] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:52:39.300 [DEBUG] [Thread-137719] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:52:39.300 [DEBUG] [Thread-137719] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:52:39.300 [DEBUG] [Thread-137719] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:52:39.300 [DEBUG] [Thread-137719] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:52:39.300 [DEBUG] [Thread-137719] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:52:39.300 [DEBUG] [Thread-137719] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:52:39.300 [DEBUG] [Thread-137719] [transport.py] [_log()] client lang: <none>
2026-01-01T00:52:39.300 [DEBUG] [Thread-137719] [transport.py] [_log()] server lang: <none>
2026-01-01T00:52:39.300 [DEBUG] [Thread-137719] [transport.py] [_log()] kex follows: False
2026-01-01T00:52:39.300 [DEBUG] [Thread-137719] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:52:39.300 [DEBUG] [Thread-137719] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:52:39.300 [DEBUG] [Thread-137719] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:52:39.300 [DEBUG] [Thread-137719] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:52:39.300 [DEBUG] [Thread-137719] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:52:39.300 [DEBUG] [Thread-137719] [transport.py] [_log()] Compression: none
2026-01-01T00:52:39.300 [DEBUG] [Thread-137719] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:52:39.317 [DEBUG] [Thread-137719] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:52:39.318 [DEBUG] [Thread-137719] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:52:39.318 [DEBUG] [Thread-137719] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T00:52:39.319 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T00:52:39.319 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:52:39.320 [DEBUG] [Thread-137719] [transport.py] [_log()] userauth is OK
2026-01-01T00:52:39.320 [DEBUG] [Thread-137719] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:52:39.320 [DEBUG] [Thread-137719] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:52:39.320 [DEBUG] [Thread-137719] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T00:52:39.320 [DEBUG] [Thread-137719] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:52:39.342 [INFO] [Thread-137719] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:52:39.342 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:52:40.149 [DEBUG] [Thread-137719] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:52:40.150 [DEBUG] [Thread-137719] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:52:40.150 [DEBUG] [Thread-137719] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T00:52:40.191 [DEBUG] [Thread-137719] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:52:40.191 [DEBUG] [Thread-137719] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:52:40.194 [DEBUG] [Thread-137719] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:52:40.207 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:52:40.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T00:52:40.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T00:52:40.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T00:52:40.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:52:40.218 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T00:52:40.218 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:52:40.218 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:52:40.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T00:52:40.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.952564 -999.00  +14.40  17.24     82  +11.40 1 2 1 2 1     0    0 2.95 -0.31 Z.eS. 14.4 17.2 211.0 21.2 15.6 -15.0 15.4 -15.3 15.3 -13.6 15.6 -13.8
2026-01-01T00:52:40.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T00:52:40.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T00:52:40.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.952564
2026-01-01T00:52:40.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T00:52:40.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T00:52:40.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T00:52:40.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T00:52:40.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T00:52:40.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T00:52:35', tmtdew=2.21, humidity=86.92, cloud=0.0, wind=15.14, temperature=9.31, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T22:51:41.530', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T00:52:40.221 [DEBUG] [Thread-137719] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:52:40.305 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T00:52:40.317 [DEBUG] [Thread-137722] [transport.py] [_log()] starting thread (client mode): 0xb95f3f10
2026-01-01T00:52:40.317 [DEBUG] [Thread-137722] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:52:40.332 [DEBUG] [Thread-137722] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T00:52:40.333 [INFO] [Thread-137722] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T00:52:40.340 [DEBUG] [Thread-137722] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:52:40.340 [DEBUG] [Thread-137722] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T00:52:40.340 [DEBUG] [Thread-137722] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:52:40.340 [DEBUG] [Thread-137722] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:52:40.340 [DEBUG] [Thread-137722] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:52:40.341 [DEBUG] [Thread-137722] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:52:40.341 [DEBUG] [Thread-137722] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:52:40.341 [DEBUG] [Thread-137722] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:52:40.341 [DEBUG] [Thread-137722] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:52:40.341 [DEBUG] [Thread-137722] [transport.py] [_log()] client lang: <none>
2026-01-01T00:52:40.341 [DEBUG] [Thread-137722] [transport.py] [_log()] server lang: <none>
2026-01-01T00:52:40.341 [DEBUG] [Thread-137722] [transport.py] [_log()] kex follows: False
2026-01-01T00:52:40.341 [DEBUG] [Thread-137722] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:52:40.341 [DEBUG] [Thread-137722] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:52:40.341 [DEBUG] [Thread-137722] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:52:40.341 [DEBUG] [Thread-137722] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:52:40.341 [DEBUG] [Thread-137722] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:52:40.342 [DEBUG] [Thread-137722] [transport.py] [_log()] Compression: none
2026-01-01T00:52:40.342 [DEBUG] [Thread-137722] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:52:40.397 [DEBUG] [Thread-137722] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:52:40.397 [DEBUG] [Thread-137722] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:52:40.398 [DEBUG] [Thread-137722] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T00:52:40.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T00:52:40.399 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:52:40.453 [DEBUG] [Thread-137722] [transport.py] [_log()] userauth is OK
2026-01-01T00:52:40.454 [DEBUG] [Thread-137722] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:52:40.454 [DEBUG] [Thread-137722] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:52:40.454 [DEBUG] [Thread-137722] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T00:52:40.454 [DEBUG] [Thread-137722] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:52:40.473 [INFO] [Thread-137722] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:52:40.473 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T00:52:40.474 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:52:41.336 [DEBUG] [Thread-137722] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:52:41.336 [DEBUG] [Thread-137722] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:52:41.384 [DEBUG] [Thread-137722] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:52:41.384 [DEBUG] [Thread-137722] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:52:41.393 [DEBUG] [Thread-137722] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:52:41.403 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:52:41.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T00:52:41.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T00:52:41.422 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:52:41.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:52:41.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:52:41.431 [DEBUG] [Thread-137722] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:52:42.745 [DEBUG] [Thread-137724 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:52:43.331 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:52:43.332 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:52:57.805 [DEBUG] [Thread-137725 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:52:58.184 [DEBUG] [Thread-137726 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:53:11.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T00:53:11.452 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T00:53:11.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T00:53:12.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 0, 53, 7), 2.21, 86.95, 0.0, 17.54, 9.36, 1, 1, 0, 2, 0, 0),)
2026-01-01T00:53:12.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 00:53:07
2026-01-01T00:53:12.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T00:53:12.420 [DEBUG] [Thread-137727] [transport.py] [_log()] starting thread (client mode): 0xb1744eb0
2026-01-01T00:53:12.420 [DEBUG] [Thread-137727] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:53:12.436 [DEBUG] [Thread-137727] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T00:53:12.436 [INFO] [Thread-137727] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T00:53:12.439 [DEBUG] [Thread-137727] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:53:12.439 [DEBUG] [Thread-137727] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T00:53:12.439 [DEBUG] [Thread-137727] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:53:12.439 [DEBUG] [Thread-137727] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:53:12.439 [DEBUG] [Thread-137727] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:53:12.439 [DEBUG] [Thread-137727] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:53:12.439 [DEBUG] [Thread-137727] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:53:12.439 [DEBUG] [Thread-137727] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:53:12.440 [DEBUG] [Thread-137727] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:53:12.440 [DEBUG] [Thread-137727] [transport.py] [_log()] client lang: <none>
2026-01-01T00:53:12.440 [DEBUG] [Thread-137727] [transport.py] [_log()] server lang: <none>
2026-01-01T00:53:12.440 [DEBUG] [Thread-137727] [transport.py] [_log()] kex follows: False
2026-01-01T00:53:12.440 [DEBUG] [Thread-137727] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:53:12.440 [DEBUG] [Thread-137727] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:53:12.440 [DEBUG] [Thread-137727] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:53:12.440 [DEBUG] [Thread-137727] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:53:12.440 [DEBUG] [Thread-137727] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:53:12.440 [DEBUG] [Thread-137727] [transport.py] [_log()] Compression: none
2026-01-01T00:53:12.440 [DEBUG] [Thread-137727] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:53:12.457 [DEBUG] [Thread-137727] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:53:12.457 [DEBUG] [Thread-137727] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:53:12.458 [DEBUG] [Thread-137727] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T00:53:12.459 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T00:53:12.460 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:53:12.502 [DEBUG] [Thread-137727] [transport.py] [_log()] userauth is OK
2026-01-01T00:53:12.502 [DEBUG] [Thread-137727] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:53:12.503 [DEBUG] [Thread-137727] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:53:12.503 [DEBUG] [Thread-137727] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T00:53:12.503 [DEBUG] [Thread-137727] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:53:12.523 [INFO] [Thread-137727] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:53:12.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:53:12.834 [DEBUG] [Thread-137729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:53:13.194 [DEBUG] [Thread-137727] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:53:13.194 [DEBUG] [Thread-137727] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:53:13.195 [DEBUG] [Thread-137727] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T00:53:13.235 [DEBUG] [Thread-137727] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:53:13.235 [DEBUG] [Thread-137727] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:53:13.239 [DEBUG] [Thread-137727] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:53:13.252 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:53:13.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T00:53:13.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T00:53:13.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T00:53:13.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:53:13.265 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T00:53:13.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:53:13.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:53:13.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T00:53:13.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.952911 -999.00  +14.40   9.82     82  +11.50 1 2 1 2 1     0    0 2.98 -0.60 z.ES. 9.9 9.8 205.4 16.3 15.6 -14.9 15.4 -15.1 15.2 -13.4 15.6 -13.7
2026-01-01T00:53:13.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T00:53:13.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T00:53:13.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.952911
2026-01-01T00:53:13.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T00:53:13.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T00:53:13.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T00:53:13.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T00:53:13.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T00:53:13.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T00:53:07', tmtdew=2.21, humidity=86.95, cloud=0.0, wind=17.54, temperature=9.36, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T22:52:11.510', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T00:53:13.268 [DEBUG] [Thread-137727] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:53:13.353 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T00:53:13.366 [DEBUG] [Thread-137731] [transport.py] [_log()] starting thread (client mode): 0xb6b14400
2026-01-01T00:53:13.366 [DEBUG] [Thread-137731] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:53:13.381 [DEBUG] [Thread-137731] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T00:53:13.381 [INFO] [Thread-137731] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T00:53:13.389 [DEBUG] [Thread-137731] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:53:13.389 [DEBUG] [Thread-137731] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T00:53:13.389 [DEBUG] [Thread-137731] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:53:13.389 [DEBUG] [Thread-137731] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:53:13.389 [DEBUG] [Thread-137731] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:53:13.390 [DEBUG] [Thread-137731] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:53:13.390 [DEBUG] [Thread-137731] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:53:13.390 [DEBUG] [Thread-137731] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:53:13.390 [DEBUG] [Thread-137731] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:53:13.390 [DEBUG] [Thread-137731] [transport.py] [_log()] client lang: <none>
2026-01-01T00:53:13.390 [DEBUG] [Thread-137731] [transport.py] [_log()] server lang: <none>
2026-01-01T00:53:13.390 [DEBUG] [Thread-137731] [transport.py] [_log()] kex follows: False
2026-01-01T00:53:13.390 [DEBUG] [Thread-137731] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:53:13.390 [DEBUG] [Thread-137731] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:53:13.390 [DEBUG] [Thread-137731] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:53:13.390 [DEBUG] [Thread-137731] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:53:13.390 [DEBUG] [Thread-137731] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:53:13.390 [DEBUG] [Thread-137731] [transport.py] [_log()] Compression: none
2026-01-01T00:53:13.390 [DEBUG] [Thread-137731] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:53:13.446 [DEBUG] [Thread-137731] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:53:13.447 [DEBUG] [Thread-137731] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:53:13.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T00:53:13.448 [DEBUG] [Thread-137731] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T00:53:13.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:53:13.502 [DEBUG] [Thread-137731] [transport.py] [_log()] userauth is OK
2026-01-01T00:53:13.502 [DEBUG] [Thread-137731] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:53:13.502 [DEBUG] [Thread-137731] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:53:13.503 [DEBUG] [Thread-137731] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T00:53:13.503 [DEBUG] [Thread-137731] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:53:13.521 [INFO] [Thread-137731] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:53:13.522 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T00:53:13.522 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:53:14.380 [DEBUG] [Thread-137731] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:53:14.380 [DEBUG] [Thread-137731] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:53:14.428 [DEBUG] [Thread-137731] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:53:14.428 [DEBUG] [Thread-137731] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:53:14.437 [DEBUG] [Thread-137731] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:53:14.450 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:53:14.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T00:53:14.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T00:53:14.469 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:53:14.470 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:53:14.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:53:14.478 [DEBUG] [Thread-137731] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:53:27.874 [DEBUG] [Thread-137733 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:53:42.929 [DEBUG] [Thread-137734 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:53:43.533 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:53:43.534 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:53:44.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T00:53:44.500 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T00:53:44.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T00:53:45.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 0, 53, 39), 2.21, 86.93, 0.0, 18.32, 9.34, 1, 1, 0, 2, 0, 0),)
2026-01-01T00:53:45.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 00:53:39
2026-01-01T00:53:45.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T00:53:45.476 [DEBUG] [Thread-137735] [transport.py] [_log()] starting thread (client mode): 0xb17947f0
2026-01-01T00:53:45.476 [DEBUG] [Thread-137735] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:53:45.488 [DEBUG] [Thread-137735] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T00:53:45.488 [INFO] [Thread-137735] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T00:53:45.491 [DEBUG] [Thread-137735] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:53:45.491 [DEBUG] [Thread-137735] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T00:53:45.491 [DEBUG] [Thread-137735] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:53:45.491 [DEBUG] [Thread-137735] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:53:45.491 [DEBUG] [Thread-137735] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:53:45.491 [DEBUG] [Thread-137735] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:53:45.491 [DEBUG] [Thread-137735] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:53:45.491 [DEBUG] [Thread-137735] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:53:45.491 [DEBUG] [Thread-137735] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:53:45.491 [DEBUG] [Thread-137735] [transport.py] [_log()] client lang: <none>
2026-01-01T00:53:45.491 [DEBUG] [Thread-137735] [transport.py] [_log()] server lang: <none>
2026-01-01T00:53:45.491 [DEBUG] [Thread-137735] [transport.py] [_log()] kex follows: False
2026-01-01T00:53:45.491 [DEBUG] [Thread-137735] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:53:45.491 [DEBUG] [Thread-137735] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:53:45.491 [DEBUG] [Thread-137735] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:53:45.491 [DEBUG] [Thread-137735] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:53:45.491 [DEBUG] [Thread-137735] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:53:45.491 [DEBUG] [Thread-137735] [transport.py] [_log()] Compression: none
2026-01-01T00:53:45.491 [DEBUG] [Thread-137735] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:53:45.507 [DEBUG] [Thread-137735] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:53:45.508 [DEBUG] [Thread-137735] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:53:45.509 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T00:53:45.509 [DEBUG] [Thread-137735] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T00:53:45.510 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:53:45.511 [DEBUG] [Thread-137735] [transport.py] [_log()] userauth is OK
2026-01-01T00:53:45.511 [DEBUG] [Thread-137735] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:53:45.511 [DEBUG] [Thread-137735] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:53:45.511 [DEBUG] [Thread-137735] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T00:53:45.511 [DEBUG] [Thread-137735] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:53:45.526 [INFO] [Thread-137735] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:53:45.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:53:46.358 [DEBUG] [Thread-137735] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:53:46.358 [DEBUG] [Thread-137735] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:53:46.359 [DEBUG] [Thread-137735] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T00:53:46.399 [DEBUG] [Thread-137735] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:53:46.399 [DEBUG] [Thread-137735] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:53:46.402 [DEBUG] [Thread-137735] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:53:46.414 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:53:46.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T00:53:46.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T00:53:46.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T00:53:46.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:53:46.426 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T00:53:46.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:53:46.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:53:46.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T00:53:46.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.953606 -999.00  +14.40  13.93     82  +11.50 1 2 1 2 1     0    0 2.94 -1.30 Z.ES. 11.0 13.9 199.2 15.4 15.6 -15.1 15.4 -15.2 15.2 -13.2 15.6 -13.7
2026-01-01T00:53:46.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T00:53:46.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T00:53:46.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.953606
2026-01-01T00:53:46.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T00:53:46.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T00:53:46.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T00:53:46.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T00:53:46.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T00:53:46.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T00:53:39', tmtdew=2.21, humidity=86.93, cloud=0.0, wind=18.32, temperature=9.34, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T22:53:11.558', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T00:53:46.429 [DEBUG] [Thread-137735] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:53:46.507 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T00:53:46.518 [DEBUG] [Thread-137738] [transport.py] [_log()] starting thread (client mode): 0xb955a410
2026-01-01T00:53:46.518 [DEBUG] [Thread-137738] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:53:46.534 [DEBUG] [Thread-137738] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T00:53:46.535 [INFO] [Thread-137738] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T00:53:46.542 [DEBUG] [Thread-137738] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:53:46.542 [DEBUG] [Thread-137738] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T00:53:46.542 [DEBUG] [Thread-137738] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:53:46.542 [DEBUG] [Thread-137738] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:53:46.542 [DEBUG] [Thread-137738] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:53:46.542 [DEBUG] [Thread-137738] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:53:46.542 [DEBUG] [Thread-137738] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:53:46.543 [DEBUG] [Thread-137738] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:53:46.543 [DEBUG] [Thread-137738] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:53:46.543 [DEBUG] [Thread-137738] [transport.py] [_log()] client lang: <none>
2026-01-01T00:53:46.543 [DEBUG] [Thread-137738] [transport.py] [_log()] server lang: <none>
2026-01-01T00:53:46.543 [DEBUG] [Thread-137738] [transport.py] [_log()] kex follows: False
2026-01-01T00:53:46.543 [DEBUG] [Thread-137738] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:53:46.543 [DEBUG] [Thread-137738] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:53:46.543 [DEBUG] [Thread-137738] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:53:46.543 [DEBUG] [Thread-137738] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:53:46.543 [DEBUG] [Thread-137738] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:53:46.544 [DEBUG] [Thread-137738] [transport.py] [_log()] Compression: none
2026-01-01T00:53:46.544 [DEBUG] [Thread-137738] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:53:46.601 [DEBUG] [Thread-137738] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:53:46.601 [DEBUG] [Thread-137738] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:53:46.602 [DEBUG] [Thread-137738] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T00:53:46.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T00:53:46.603 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:53:46.660 [DEBUG] [Thread-137738] [transport.py] [_log()] userauth is OK
2026-01-01T00:53:46.660 [DEBUG] [Thread-137738] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:53:46.660 [DEBUG] [Thread-137738] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:53:46.660 [DEBUG] [Thread-137738] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T00:53:46.660 [DEBUG] [Thread-137738] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:53:46.680 [INFO] [Thread-137738] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:53:46.680 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T00:53:46.681 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:53:47.536 [DEBUG] [Thread-137738] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:53:47.536 [DEBUG] [Thread-137738] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:53:47.584 [DEBUG] [Thread-137738] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:53:47.584 [DEBUG] [Thread-137738] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:53:47.594 [DEBUG] [Thread-137738] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:53:47.603 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:53:47.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T00:53:47.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T00:53:47.621 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:53:47.621 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:53:47.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:53:47.630 [DEBUG] [Thread-137738] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:53:57.965 [DEBUG] [Thread-137740 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:53:58.273 [DEBUG] [Thread-137741 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:54:13.015 [DEBUG] [Thread-137742 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:54:17.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T00:54:17.652 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T00:54:17.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T00:54:18.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 0, 54, 11), 2.21, 86.93, 0.0, 18.05, 9.35, 1, 1, 0, 2, 0, 0),)
2026-01-01T00:54:18.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 00:54:11
2026-01-01T00:54:18.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T00:54:18.660 [DEBUG] [Thread-137743] [transport.py] [_log()] starting thread (client mode): 0xb1744760
2026-01-01T00:54:18.660 [DEBUG] [Thread-137743] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:54:18.680 [DEBUG] [Thread-137743] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T00:54:18.680 [INFO] [Thread-137743] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T00:54:18.683 [DEBUG] [Thread-137743] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:54:18.683 [DEBUG] [Thread-137743] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T00:54:18.683 [DEBUG] [Thread-137743] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:54:18.683 [DEBUG] [Thread-137743] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:54:18.683 [DEBUG] [Thread-137743] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:54:18.683 [DEBUG] [Thread-137743] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:54:18.683 [DEBUG] [Thread-137743] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:54:18.683 [DEBUG] [Thread-137743] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:54:18.683 [DEBUG] [Thread-137743] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:54:18.683 [DEBUG] [Thread-137743] [transport.py] [_log()] client lang: <none>
2026-01-01T00:54:18.683 [DEBUG] [Thread-137743] [transport.py] [_log()] server lang: <none>
2026-01-01T00:54:18.683 [DEBUG] [Thread-137743] [transport.py] [_log()] kex follows: False
2026-01-01T00:54:18.683 [DEBUG] [Thread-137743] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:54:18.683 [DEBUG] [Thread-137743] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:54:18.683 [DEBUG] [Thread-137743] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:54:18.683 [DEBUG] [Thread-137743] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:54:18.683 [DEBUG] [Thread-137743] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:54:18.683 [DEBUG] [Thread-137743] [transport.py] [_log()] Compression: none
2026-01-01T00:54:18.683 [DEBUG] [Thread-137743] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:54:18.699 [DEBUG] [Thread-137743] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:54:18.699 [DEBUG] [Thread-137743] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:54:18.699 [DEBUG] [Thread-137743] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T00:54:18.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T00:54:18.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:54:18.741 [DEBUG] [Thread-137743] [transport.py] [_log()] userauth is OK
2026-01-01T00:54:18.741 [DEBUG] [Thread-137743] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:54:18.741 [DEBUG] [Thread-137743] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:54:18.741 [DEBUG] [Thread-137743] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T00:54:18.741 [DEBUG] [Thread-137743] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:54:18.771 [INFO] [Thread-137743] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:54:18.771 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:54:19.382 [DEBUG] [Thread-137743] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:54:19.382 [DEBUG] [Thread-137743] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:54:19.382 [DEBUG] [Thread-137743] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T00:54:19.424 [DEBUG] [Thread-137743] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:54:19.424 [DEBUG] [Thread-137743] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:54:19.426 [DEBUG] [Thread-137743] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:54:19.438 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:54:19.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T00:54:19.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T00:54:19.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T00:54:19.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:54:19.445 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T00:54:19.445 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:54:19.445 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:54:19.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T00:54:19.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.953953 -999.00  +14.40   8.60     82  +11.50 1 2 1 2 1     0    0 3.00 -1.71 Z.ES. 14.4 8.6 196.1 15.0 15.6 -15.1 15.4 -15.0 15.3 -13.3 15.6 -13.7
2026-01-01T00:54:19.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T00:54:19.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T00:54:19.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.953953
2026-01-01T00:54:19.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T00:54:19.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T00:54:19.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T00:54:19.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T00:54:19.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T00:54:19.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T00:54:11', tmtdew=2.21, humidity=86.93, cloud=0.0, wind=18.05, temperature=9.35, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T22:53:41.539', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T00:54:19.446 [DEBUG] [Thread-137743] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:54:19.520 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T00:54:19.532 [DEBUG] [Thread-137746] [transport.py] [_log()] starting thread (client mode): 0xb17454e0
2026-01-01T00:54:19.532 [DEBUG] [Thread-137746] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:54:19.552 [DEBUG] [Thread-137746] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T00:54:19.552 [INFO] [Thread-137746] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T00:54:19.559 [DEBUG] [Thread-137746] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:54:19.559 [DEBUG] [Thread-137746] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T00:54:19.559 [DEBUG] [Thread-137746] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:54:19.559 [DEBUG] [Thread-137746] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:54:19.559 [DEBUG] [Thread-137746] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:54:19.559 [DEBUG] [Thread-137746] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:54:19.559 [DEBUG] [Thread-137746] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:54:19.559 [DEBUG] [Thread-137746] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:54:19.559 [DEBUG] [Thread-137746] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:54:19.559 [DEBUG] [Thread-137746] [transport.py] [_log()] client lang: <none>
2026-01-01T00:54:19.560 [DEBUG] [Thread-137746] [transport.py] [_log()] server lang: <none>
2026-01-01T00:54:19.560 [DEBUG] [Thread-137746] [transport.py] [_log()] kex follows: False
2026-01-01T00:54:19.560 [DEBUG] [Thread-137746] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:54:19.560 [DEBUG] [Thread-137746] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:54:19.560 [DEBUG] [Thread-137746] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:54:19.560 [DEBUG] [Thread-137746] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:54:19.560 [DEBUG] [Thread-137746] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:54:19.560 [DEBUG] [Thread-137746] [transport.py] [_log()] Compression: none
2026-01-01T00:54:19.560 [DEBUG] [Thread-137746] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:54:19.616 [DEBUG] [Thread-137746] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:54:19.616 [DEBUG] [Thread-137746] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:54:19.616 [DEBUG] [Thread-137746] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T00:54:19.616 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T00:54:19.616 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:54:19.672 [DEBUG] [Thread-137746] [transport.py] [_log()] userauth is OK
2026-01-01T00:54:19.672 [DEBUG] [Thread-137746] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:54:19.672 [DEBUG] [Thread-137746] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:54:19.672 [DEBUG] [Thread-137746] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T00:54:19.672 [DEBUG] [Thread-137746] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:54:19.688 [INFO] [Thread-137746] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:54:19.688 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T00:54:19.688 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:54:20.537 [DEBUG] [Thread-137746] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:54:20.537 [DEBUG] [Thread-137746] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:54:20.585 [DEBUG] [Thread-137746] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:54:20.585 [DEBUG] [Thread-137746] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:54:20.594 [DEBUG] [Thread-137746] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:54:20.603 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:54:20.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T00:54:20.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T00:54:20.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:54:20.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:54:20.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:54:20.629 [DEBUG] [Thread-137746] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:54:28.044 [DEBUG] [Thread-137748 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:54:43.103 [DEBUG] [Thread-137749 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:54:43.733 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:54:43.734 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:54:50.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T00:54:50.639 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T00:54:50.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T00:54:51.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 0, 54, 43), 2.21, 86.94, 0.0, 18.24, 9.34, 1, 1, 0, 2, 0, 0),)
2026-01-01T00:54:51.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 00:54:43
2026-01-01T00:54:51.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T00:54:51.615 [DEBUG] [Thread-137750] [transport.py] [_log()] starting thread (client mode): 0xb6b149d0
2026-01-01T00:54:51.615 [DEBUG] [Thread-137750] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:54:51.643 [DEBUG] [Thread-137750] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T00:54:51.644 [INFO] [Thread-137750] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T00:54:51.649 [DEBUG] [Thread-137750] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:54:51.650 [DEBUG] [Thread-137750] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T00:54:51.650 [DEBUG] [Thread-137750] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:54:51.650 [DEBUG] [Thread-137750] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:54:51.650 [DEBUG] [Thread-137750] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:54:51.650 [DEBUG] [Thread-137750] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:54:51.650 [DEBUG] [Thread-137750] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:54:51.650 [DEBUG] [Thread-137750] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:54:51.650 [DEBUG] [Thread-137750] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:54:51.650 [DEBUG] [Thread-137750] [transport.py] [_log()] client lang: <none>
2026-01-01T00:54:51.651 [DEBUG] [Thread-137750] [transport.py] [_log()] server lang: <none>
2026-01-01T00:54:51.651 [DEBUG] [Thread-137750] [transport.py] [_log()] kex follows: False
2026-01-01T00:54:51.651 [DEBUG] [Thread-137750] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:54:51.651 [DEBUG] [Thread-137750] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:54:51.651 [DEBUG] [Thread-137750] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:54:51.651 [DEBUG] [Thread-137750] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:54:51.651 [DEBUG] [Thread-137750] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:54:51.651 [DEBUG] [Thread-137750] [transport.py] [_log()] Compression: none
2026-01-01T00:54:51.652 [DEBUG] [Thread-137750] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:54:51.662 [DEBUG] [Thread-137750] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:54:51.663 [DEBUG] [Thread-137750] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:54:51.664 [DEBUG] [Thread-137750] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T00:54:51.664 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T00:54:51.664 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:54:51.665 [DEBUG] [Thread-137750] [transport.py] [_log()] userauth is OK
2026-01-01T00:54:51.665 [DEBUG] [Thread-137750] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:54:51.666 [DEBUG] [Thread-137750] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:54:51.666 [DEBUG] [Thread-137750] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T00:54:51.666 [DEBUG] [Thread-137750] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:54:51.690 [INFO] [Thread-137750] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:54:51.690 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:54:52.486 [DEBUG] [Thread-137750] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:54:52.486 [DEBUG] [Thread-137750] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:54:52.486 [DEBUG] [Thread-137750] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T00:54:52.527 [DEBUG] [Thread-137750] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:54:52.527 [DEBUG] [Thread-137750] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:54:52.530 [DEBUG] [Thread-137750] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:54:52.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:54:52.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T00:54:52.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T00:54:52.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T00:54:52.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:54:52.552 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T00:54:52.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:54:52.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:54:52.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T00:54:52.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.954300 -999.00  +14.40  10.63     82  +11.50 1 2 1 2 1     0    0 2.90 -2.19 Z.ES. 11.2 10.6 188.8 19.5 15.6 -14.9 15.4 -14.7 15.3 -13.2 15.6 -13.7
2026-01-01T00:54:52.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T00:54:52.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T00:54:52.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.954300
2026-01-01T00:54:52.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T00:54:52.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T00:54:52.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T00:54:52.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T00:54:52.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T00:54:52.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T00:54:43', tmtdew=2.21, humidity=86.94, cloud=0.0, wind=18.24, temperature=9.34, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T22:54:11.520', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T00:54:52.555 [DEBUG] [Thread-137750] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:54:52.640 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T00:54:52.652 [DEBUG] [Thread-137753] [transport.py] [_log()] starting thread (client mode): 0xb1796b30
2026-01-01T00:54:52.652 [DEBUG] [Thread-137753] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:54:52.667 [DEBUG] [Thread-137753] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T00:54:52.668 [INFO] [Thread-137753] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T00:54:52.675 [DEBUG] [Thread-137753] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:54:52.675 [DEBUG] [Thread-137753] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T00:54:52.675 [DEBUG] [Thread-137753] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:54:52.675 [DEBUG] [Thread-137753] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:54:52.675 [DEBUG] [Thread-137753] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:54:52.676 [DEBUG] [Thread-137753] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:54:52.676 [DEBUG] [Thread-137753] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:54:52.676 [DEBUG] [Thread-137753] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:54:52.676 [DEBUG] [Thread-137753] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:54:52.676 [DEBUG] [Thread-137753] [transport.py] [_log()] client lang: <none>
2026-01-01T00:54:52.676 [DEBUG] [Thread-137753] [transport.py] [_log()] server lang: <none>
2026-01-01T00:54:52.676 [DEBUG] [Thread-137753] [transport.py] [_log()] kex follows: False
2026-01-01T00:54:52.676 [DEBUG] [Thread-137753] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:54:52.676 [DEBUG] [Thread-137753] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:54:52.677 [DEBUG] [Thread-137753] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:54:52.677 [DEBUG] [Thread-137753] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:54:52.677 [DEBUG] [Thread-137753] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:54:52.677 [DEBUG] [Thread-137753] [transport.py] [_log()] Compression: none
2026-01-01T00:54:52.677 [DEBUG] [Thread-137753] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:54:52.732 [DEBUG] [Thread-137753] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:54:52.732 [DEBUG] [Thread-137753] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:54:52.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T00:54:52.732 [DEBUG] [Thread-137753] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T00:54:52.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:54:52.789 [DEBUG] [Thread-137753] [transport.py] [_log()] userauth is OK
2026-01-01T00:54:52.789 [DEBUG] [Thread-137753] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:54:52.789 [DEBUG] [Thread-137753] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:54:52.789 [DEBUG] [Thread-137753] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T00:54:52.789 [DEBUG] [Thread-137753] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:54:52.803 [INFO] [Thread-137753] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:54:52.803 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T00:54:52.803 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:54:53.630 [DEBUG] [Thread-137753] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:54:53.630 [DEBUG] [Thread-137753] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:54:53.678 [DEBUG] [Thread-137753] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:54:53.678 [DEBUG] [Thread-137753] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:54:53.687 [DEBUG] [Thread-137753] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:54:53.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:54: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')
2026-01-01T00:54: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') -> 00000000
2026-01-01T00:54:53.710 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:54:53.710 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:54:53.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:54:53.718 [DEBUG] [Thread-137753] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:54:58.139 [DEBUG] [Thread-137755 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:54:58.326 [DEBUG] [Thread-137756 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:55:13.183 [DEBUG] [Thread-137757 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:55:23.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T00:55:23.733 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T00:55:23.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T00:55:24.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 0, 55, 15), 2.2, 87.01, 0.0, 16.02, 9.35, 1, 1, 0, 2, 0, 0),)
2026-01-01T00:55:24.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 00:55:15
2026-01-01T00:55:24.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T00:55:24.701 [DEBUG] [Thread-137758] [transport.py] [_log()] starting thread (client mode): 0xb6b61720
2026-01-01T00:55:24.701 [DEBUG] [Thread-137758] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:55:24.722 [DEBUG] [Thread-137758] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T00:55:24.722 [INFO] [Thread-137758] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T00:55:24.725 [DEBUG] [Thread-137758] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:55:24.725 [DEBUG] [Thread-137758] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T00:55:24.725 [DEBUG] [Thread-137758] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:55:24.725 [DEBUG] [Thread-137758] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:55:24.725 [DEBUG] [Thread-137758] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:55:24.725 [DEBUG] [Thread-137758] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:55:24.725 [DEBUG] [Thread-137758] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:55:24.726 [DEBUG] [Thread-137758] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:55:24.726 [DEBUG] [Thread-137758] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:55:24.726 [DEBUG] [Thread-137758] [transport.py] [_log()] client lang: <none>
2026-01-01T00:55:24.726 [DEBUG] [Thread-137758] [transport.py] [_log()] server lang: <none>
2026-01-01T00:55:24.726 [DEBUG] [Thread-137758] [transport.py] [_log()] kex follows: False
2026-01-01T00:55:24.726 [DEBUG] [Thread-137758] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:55:24.726 [DEBUG] [Thread-137758] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:55:24.726 [DEBUG] [Thread-137758] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:55:24.726 [DEBUG] [Thread-137758] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:55:24.726 [DEBUG] [Thread-137758] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:55:24.726 [DEBUG] [Thread-137758] [transport.py] [_log()] Compression: none
2026-01-01T00:55:24.726 [DEBUG] [Thread-137758] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:55:24.746 [DEBUG] [Thread-137758] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:55:24.747 [DEBUG] [Thread-137758] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:55:24.748 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T00:55:24.748 [DEBUG] [Thread-137758] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T00:55:24.749 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:55:24.750 [DEBUG] [Thread-137758] [transport.py] [_log()] userauth is OK
2026-01-01T00:55:24.751 [DEBUG] [Thread-137758] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:55:24.751 [DEBUG] [Thread-137758] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:55:24.751 [DEBUG] [Thread-137758] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T00:55:24.751 [DEBUG] [Thread-137758] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:55:24.767 [INFO] [Thread-137758] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:55:24.768 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:55:26.521 [DEBUG] [Thread-137758] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:55:26.521 [DEBUG] [Thread-137758] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:55:26.521 [DEBUG] [Thread-137758] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T00:55:26.562 [DEBUG] [Thread-137758] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:55:26.562 [DEBUG] [Thread-137758] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:55:26.565 [DEBUG] [Thread-137758] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:55:26.576 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:55:26.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T00:55:26.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T00:55:26.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T00:55:26.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:55:26.588 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T00:55:26.588 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:55:26.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:55:26.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T00:55:26.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.954647 -999.00  +14.40  10.75     82  +11.50 1 2 1 2 1     0    0 2.91 -2.23 Z.ES. 7.6 10.8 214.4 16.1 15.6 -14.9 15.4 -14.8 15.3 -13.0 15.6 -13.5
2026-01-01T00:55:26.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T00:55:26.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T00:55:26.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.954647
2026-01-01T00:55:26.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T00:55:26.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T00:55:26.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T00:55:26.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T00:55:26.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T00:55:26.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T00:55:15', tmtdew=2.2, humidity=87.01, cloud=0.0, wind=16.02, temperature=9.35, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T22:54:41.501', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T00:55:26.590 [DEBUG] [Thread-137758] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:55:26.675 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T00:55:26.686 [DEBUG] [Thread-137761] [transport.py] [_log()] starting thread (client mode): 0xb6b16f20
2026-01-01T00:55:26.687 [DEBUG] [Thread-137761] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:55:26.702 [DEBUG] [Thread-137761] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T00:55:26.703 [INFO] [Thread-137761] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T00:55:26.710 [DEBUG] [Thread-137761] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:55:26.710 [DEBUG] [Thread-137761] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T00:55:26.710 [DEBUG] [Thread-137761] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:55:26.710 [DEBUG] [Thread-137761] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:55:26.710 [DEBUG] [Thread-137761] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:55:26.710 [DEBUG] [Thread-137761] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:55:26.710 [DEBUG] [Thread-137761] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:55:26.710 [DEBUG] [Thread-137761] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:55:26.710 [DEBUG] [Thread-137761] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:55:26.710 [DEBUG] [Thread-137761] [transport.py] [_log()] client lang: <none>
2026-01-01T00:55:26.710 [DEBUG] [Thread-137761] [transport.py] [_log()] server lang: <none>
2026-01-01T00:55:26.710 [DEBUG] [Thread-137761] [transport.py] [_log()] kex follows: False
2026-01-01T00:55:26.710 [DEBUG] [Thread-137761] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:55:26.711 [DEBUG] [Thread-137761] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:55:26.711 [DEBUG] [Thread-137761] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:55:26.711 [DEBUG] [Thread-137761] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:55:26.711 [DEBUG] [Thread-137761] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:55:26.711 [DEBUG] [Thread-137761] [transport.py] [_log()] Compression: none
2026-01-01T00:55:26.711 [DEBUG] [Thread-137761] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:55:26.767 [DEBUG] [Thread-137761] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:55:26.768 [DEBUG] [Thread-137761] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:55:26.768 [DEBUG] [Thread-137761] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T00:55:26.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T00:55:26.769 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:55:26.823 [DEBUG] [Thread-137761] [transport.py] [_log()] userauth is OK
2026-01-01T00:55:26.823 [DEBUG] [Thread-137761] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:55:26.823 [DEBUG] [Thread-137761] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:55:26.824 [DEBUG] [Thread-137761] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T00:55:26.824 [DEBUG] [Thread-137761] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:55:26.845 [INFO] [Thread-137761] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:55:26.846 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T00:55:26.846 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:55:27.701 [DEBUG] [Thread-137761] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:55:27.701 [DEBUG] [Thread-137761] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:55:27.749 [DEBUG] [Thread-137761] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:55:27.749 [DEBUG] [Thread-137761] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:55:27.758 [DEBUG] [Thread-137761] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:55:27.767 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:55: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')
2026-01-01T00:55:27.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T00:55:27.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:55:27.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:55:27.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:55:27.795 [DEBUG] [Thread-137761] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:55:28.218 [DEBUG] [Thread-137763 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:55:43.260 [DEBUG] [Thread-137764 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:55:43.943 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:55:43.945 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:55:57.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T00:55:57.818 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T00:55:57.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T00:55:58.294 [DEBUG] [Thread-137765 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:55:58.401 [DEBUG] [Thread-137766 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:55:58.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 0, 55, 47), 2.2, 87.0, 0.0, 16.87, 9.31, 1, 1, 0, 2, 0, 0),)
2026-01-01T00:55:58.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 00:55:47
2026-01-01T00:55:58.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T00:55:58.787 [DEBUG] [Thread-137767] [transport.py] [_log()] starting thread (client mode): 0xb6b61630
2026-01-01T00:55:58.787 [DEBUG] [Thread-137767] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:55:58.801 [DEBUG] [Thread-137767] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T00:55:58.801 [INFO] [Thread-137767] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T00:55:58.805 [DEBUG] [Thread-137767] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:55:58.805 [DEBUG] [Thread-137767] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T00:55:58.805 [DEBUG] [Thread-137767] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:55:58.805 [DEBUG] [Thread-137767] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:55:58.805 [DEBUG] [Thread-137767] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:55:58.805 [DEBUG] [Thread-137767] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:55:58.805 [DEBUG] [Thread-137767] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:55:58.805 [DEBUG] [Thread-137767] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:55:58.805 [DEBUG] [Thread-137767] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:55:58.805 [DEBUG] [Thread-137767] [transport.py] [_log()] client lang: <none>
2026-01-01T00:55:58.805 [DEBUG] [Thread-137767] [transport.py] [_log()] server lang: <none>
2026-01-01T00:55:58.806 [DEBUG] [Thread-137767] [transport.py] [_log()] kex follows: False
2026-01-01T00:55:58.806 [DEBUG] [Thread-137767] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:55:58.806 [DEBUG] [Thread-137767] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:55:58.806 [DEBUG] [Thread-137767] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:55:58.806 [DEBUG] [Thread-137767] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:55:58.806 [DEBUG] [Thread-137767] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:55:58.806 [DEBUG] [Thread-137767] [transport.py] [_log()] Compression: none
2026-01-01T00:55:58.806 [DEBUG] [Thread-137767] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:55:58.823 [DEBUG] [Thread-137767] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:55:58.823 [DEBUG] [Thread-137767] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:55:58.824 [DEBUG] [Thread-137767] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T00:55:58.824 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T00:55:58.825 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:55:58.826 [DEBUG] [Thread-137767] [transport.py] [_log()] userauth is OK
2026-01-01T00:55:58.826 [DEBUG] [Thread-137767] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:55:58.826 [DEBUG] [Thread-137767] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:55:58.826 [DEBUG] [Thread-137767] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T00:55:58.826 [DEBUG] [Thread-137767] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:55:58.862 [INFO] [Thread-137767] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:55:58.863 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:55:59.532 [DEBUG] [Thread-137767] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:55:59.533 [DEBUG] [Thread-137767] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:55:59.533 [DEBUG] [Thread-137767] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T00:55:59.574 [DEBUG] [Thread-137767] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:55:59.574 [DEBUG] [Thread-137767] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:55:59.578 [DEBUG] [Thread-137767] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:55:59.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:55:59.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T00:55:59.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T00:55:59.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T00:55:59.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:55:59.601 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T00:55:59.601 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:55:59.601 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:55:59.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T00:55:59.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.954995 -999.00  +14.40   8.59     82  +11.50 1 2 1 2 1     0    0 2.96 -2.04 z.ES. 11.2 8.6 186.0 16.3 15.6 -14.7 15.4 -14.3 15.2 -12.7 15.6 -13.4
2026-01-01T00:55:59.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T00:55:59.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T00:55:59.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.954995
2026-01-01T00:55:59.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T00:55:59.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T00:55:59.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T00:55:59.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T00:55:59.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T00:55:59.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T00:55:47', tmtdew=2.2, humidity=87.0, cloud=0.0, wind=16.87, temperature=9.31, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T22:55:11.568', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T00:55:59.604 [DEBUG] [Thread-137767] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:55:59.688 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T00:55:59.701 [DEBUG] [Thread-137770] [transport.py] [_log()] starting thread (client mode): 0xb9578c10
2026-01-01T00:55:59.702 [DEBUG] [Thread-137770] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:55:59.718 [DEBUG] [Thread-137770] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T00:55:59.718 [INFO] [Thread-137770] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T00:55:59.725 [DEBUG] [Thread-137770] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:55:59.726 [DEBUG] [Thread-137770] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T00:55:59.726 [DEBUG] [Thread-137770] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:55:59.726 [DEBUG] [Thread-137770] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:55:59.726 [DEBUG] [Thread-137770] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:55:59.726 [DEBUG] [Thread-137770] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:55:59.726 [DEBUG] [Thread-137770] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:55:59.726 [DEBUG] [Thread-137770] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:55:59.726 [DEBUG] [Thread-137770] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:55:59.726 [DEBUG] [Thread-137770] [transport.py] [_log()] client lang: <none>
2026-01-01T00:55:59.726 [DEBUG] [Thread-137770] [transport.py] [_log()] server lang: <none>
2026-01-01T00:55:59.726 [DEBUG] [Thread-137770] [transport.py] [_log()] kex follows: False
2026-01-01T00:55:59.726 [DEBUG] [Thread-137770] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:55:59.726 [DEBUG] [Thread-137770] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:55:59.726 [DEBUG] [Thread-137770] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:55:59.726 [DEBUG] [Thread-137770] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:55:59.726 [DEBUG] [Thread-137770] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:55:59.726 [DEBUG] [Thread-137770] [transport.py] [_log()] Compression: none
2026-01-01T00:55:59.727 [DEBUG] [Thread-137770] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:55:59.784 [DEBUG] [Thread-137770] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:55:59.784 [DEBUG] [Thread-137770] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:55:59.785 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T00:55:59.785 [DEBUG] [Thread-137770] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T00:55:59.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:55:59.842 [DEBUG] [Thread-137770] [transport.py] [_log()] userauth is OK
2026-01-01T00:55:59.842 [DEBUG] [Thread-137770] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:55:59.843 [DEBUG] [Thread-137770] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:55:59.843 [DEBUG] [Thread-137770] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T00:55:59.843 [DEBUG] [Thread-137770] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:55:59.872 [INFO] [Thread-137770] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:55:59.872 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T00:55:59.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:56:00.762 [DEBUG] [Thread-137770] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:56:00.762 [DEBUG] [Thread-137770] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:56:00.810 [DEBUG] [Thread-137770] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:56:00.810 [DEBUG] [Thread-137770] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:56:00.820 [DEBUG] [Thread-137770] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:56:00.829 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:56:00.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T00:56:00.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T00:56:00.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:56:00.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:56:00.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:56:00.856 [DEBUG] [Thread-137770] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:56:13.325 [DEBUG] [Thread-137772 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:56:28.364 [DEBUG] [Thread-137773 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:56:30.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T00:56:30.870 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T00:56:30.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T00:56:31.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 0, 56, 20), 2.2, 87.02, 0.0, 15.72, 9.35, 1, 1, 0, 2, 0, 0),)
2026-01-01T00:56:31.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 00:56:20
2026-01-01T00:56:31.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T00:56:31.830 [DEBUG] [Thread-137774] [transport.py] [_log()] starting thread (client mode): 0xb957a230
2026-01-01T00:56:31.830 [DEBUG] [Thread-137774] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:56:31.851 [DEBUG] [Thread-137774] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T00:56:31.851 [INFO] [Thread-137774] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T00:56:31.853 [DEBUG] [Thread-137774] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:56:31.853 [DEBUG] [Thread-137774] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T00:56:31.853 [DEBUG] [Thread-137774] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:56:31.853 [DEBUG] [Thread-137774] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:56:31.853 [DEBUG] [Thread-137774] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:56:31.853 [DEBUG] [Thread-137774] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:56:31.853 [DEBUG] [Thread-137774] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:56:31.853 [DEBUG] [Thread-137774] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:56:31.853 [DEBUG] [Thread-137774] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:56:31.853 [DEBUG] [Thread-137774] [transport.py] [_log()] client lang: <none>
2026-01-01T00:56:31.853 [DEBUG] [Thread-137774] [transport.py] [_log()] server lang: <none>
2026-01-01T00:56:31.854 [DEBUG] [Thread-137774] [transport.py] [_log()] kex follows: False
2026-01-01T00:56:31.854 [DEBUG] [Thread-137774] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:56:31.854 [DEBUG] [Thread-137774] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:56:31.854 [DEBUG] [Thread-137774] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:56:31.854 [DEBUG] [Thread-137774] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:56:31.854 [DEBUG] [Thread-137774] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:56:31.854 [DEBUG] [Thread-137774] [transport.py] [_log()] Compression: none
2026-01-01T00:56:31.854 [DEBUG] [Thread-137774] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:56:31.863 [DEBUG] [Thread-137774] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:56:31.864 [DEBUG] [Thread-137774] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:56:31.864 [DEBUG] [Thread-137774] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T00:56:31.865 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T00:56:31.865 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:56:31.869 [DEBUG] [Thread-137774] [transport.py] [_log()] userauth is OK
2026-01-01T00:56:31.869 [DEBUG] [Thread-137774] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:56:31.869 [DEBUG] [Thread-137774] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:56:31.869 [DEBUG] [Thread-137774] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T00:56:31.869 [DEBUG] [Thread-137774] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:56:31.888 [INFO] [Thread-137774] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:56:31.889 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:56:32.618 [DEBUG] [Thread-137774] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:56:32.619 [DEBUG] [Thread-137774] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:56:32.619 [DEBUG] [Thread-137774] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T00:56:32.660 [DEBUG] [Thread-137774] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:56:32.660 [DEBUG] [Thread-137774] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:56:32.664 [DEBUG] [Thread-137774] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:56:32.670 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:56:32.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T00:56:32.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T00:56:32.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T00:56:32.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:56:32.682 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T00:56:32.683 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:56:32.683 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:56:32.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T00:56:32.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.955342 -999.00  +14.50   7.49     82  +11.50 1 2 1 2 1     0    0 2.95 -1.72 z.ES. 9.9 7.5 193.6 12.7 15.6 -14.5 15.4 -14.1 15.3 -12.5 15.6 -13.3
2026-01-01T00:56:32.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T00:56:32.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T00:56:32.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.955342
2026-01-01T00:56:32.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T00:56:32.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T00:56:32.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T00:56:32.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T00:56:32.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T00:56:32.685 [DEBUG] [Thread-137774] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:56:32.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T00:56:20', tmtdew=2.2, humidity=87.02, cloud=0.0, wind=15.72, temperature=9.35, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T22:55:41.549', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T00:56:32.769 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T00:56:32.781 [DEBUG] [Thread-137777] [transport.py] [_log()] starting thread (client mode): 0xb1796c80
2026-01-01T00:56:32.781 [DEBUG] [Thread-137777] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:56:32.797 [DEBUG] [Thread-137777] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T00:56:32.797 [INFO] [Thread-137777] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T00:56:32.805 [DEBUG] [Thread-137777] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:56:32.805 [DEBUG] [Thread-137777] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T00:56:32.805 [DEBUG] [Thread-137777] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:56:32.805 [DEBUG] [Thread-137777] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:56:32.805 [DEBUG] [Thread-137777] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:56:32.805 [DEBUG] [Thread-137777] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:56:32.805 [DEBUG] [Thread-137777] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:56:32.805 [DEBUG] [Thread-137777] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:56:32.805 [DEBUG] [Thread-137777] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:56:32.805 [DEBUG] [Thread-137777] [transport.py] [_log()] client lang: <none>
2026-01-01T00:56:32.805 [DEBUG] [Thread-137777] [transport.py] [_log()] server lang: <none>
2026-01-01T00:56:32.805 [DEBUG] [Thread-137777] [transport.py] [_log()] kex follows: False
2026-01-01T00:56:32.805 [DEBUG] [Thread-137777] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:56:32.806 [DEBUG] [Thread-137777] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:56:32.806 [DEBUG] [Thread-137777] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:56:32.806 [DEBUG] [Thread-137777] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:56:32.806 [DEBUG] [Thread-137777] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:56:32.806 [DEBUG] [Thread-137777] [transport.py] [_log()] Compression: none
2026-01-01T00:56:32.806 [DEBUG] [Thread-137777] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:56:32.865 [DEBUG] [Thread-137777] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:56:32.866 [DEBUG] [Thread-137777] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:56:32.866 [DEBUG] [Thread-137777] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T00:56:32.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T00:56:32.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:56:32.921 [DEBUG] [Thread-137777] [transport.py] [_log()] userauth is OK
2026-01-01T00:56:32.921 [DEBUG] [Thread-137777] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:56:32.922 [DEBUG] [Thread-137777] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:56:32.922 [DEBUG] [Thread-137777] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T00:56:32.922 [DEBUG] [Thread-137777] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:56:32.944 [INFO] [Thread-137777] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:56:32.944 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T00:56:32.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:56:33.824 [DEBUG] [Thread-137777] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:56:33.824 [DEBUG] [Thread-137777] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:56:33.872 [DEBUG] [Thread-137777] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:56:33.872 [DEBUG] [Thread-137777] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:56:33.881 [DEBUG] [Thread-137777] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:56:33.891 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:56:33.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T00:56:33.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T00:56:33.910 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:56:33.910 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:56:33.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:56:33.918 [DEBUG] [Thread-137777] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:56:43.397 [DEBUG] [Thread-137779 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:56:44.145 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:56:44.146 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:56:58.454 [DEBUG] [Thread-137780 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:56:58.475 [DEBUG] [Thread-137781 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:57:03.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T00:57:03.941 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T00:57:03.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T00:57:04.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 0, 56, 52), 2.17, 87.0, 0.0, 15.21, 9.31, 1, 1, 0, 2, 0, 0),)
2026-01-01T00:57:04.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 00:56:52
2026-01-01T00:57:04.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T00:57:04.909 [DEBUG] [Thread-137782] [transport.py] [_log()] starting thread (client mode): 0xb6bbda20
2026-01-01T00:57:04.909 [DEBUG] [Thread-137782] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:57:04.930 [DEBUG] [Thread-137782] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T00:57:04.931 [INFO] [Thread-137782] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T00:57:04.933 [DEBUG] [Thread-137782] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:57:04.933 [DEBUG] [Thread-137782] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T00:57:04.933 [DEBUG] [Thread-137782] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:57:04.933 [DEBUG] [Thread-137782] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:57:04.933 [DEBUG] [Thread-137782] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:57:04.933 [DEBUG] [Thread-137782] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:57:04.933 [DEBUG] [Thread-137782] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:57:04.933 [DEBUG] [Thread-137782] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:57:04.933 [DEBUG] [Thread-137782] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:57:04.934 [DEBUG] [Thread-137782] [transport.py] [_log()] client lang: <none>
2026-01-01T00:57:04.934 [DEBUG] [Thread-137782] [transport.py] [_log()] server lang: <none>
2026-01-01T00:57:04.934 [DEBUG] [Thread-137782] [transport.py] [_log()] kex follows: False
2026-01-01T00:57:04.934 [DEBUG] [Thread-137782] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:57:04.934 [DEBUG] [Thread-137782] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:57:04.934 [DEBUG] [Thread-137782] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:57:04.934 [DEBUG] [Thread-137782] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:57:04.934 [DEBUG] [Thread-137782] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:57:04.934 [DEBUG] [Thread-137782] [transport.py] [_log()] Compression: none
2026-01-01T00:57:04.934 [DEBUG] [Thread-137782] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:57:04.951 [DEBUG] [Thread-137782] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:57:04.952 [DEBUG] [Thread-137782] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:57:04.952 [DEBUG] [Thread-137782] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T00:57:04.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T00:57:04.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:57:04.952 [DEBUG] [Thread-137782] [transport.py] [_log()] userauth is OK
2026-01-01T00:57:04.952 [DEBUG] [Thread-137782] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:57:04.952 [DEBUG] [Thread-137782] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:57:04.952 [DEBUG] [Thread-137782] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T00:57:04.952 [DEBUG] [Thread-137782] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:57:04.963 [INFO] [Thread-137782] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:57:04.963 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:57:05.571 [DEBUG] [Thread-137782] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:57:05.571 [DEBUG] [Thread-137782] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:57:05.572 [DEBUG] [Thread-137782] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T00:57:05.613 [DEBUG] [Thread-137782] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:57:05.613 [DEBUG] [Thread-137782] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:57:05.616 [DEBUG] [Thread-137782] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:57:05.627 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:57:05.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T00:57:05.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T00:57:05.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T00:57:05.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:57:05.636 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T00:57:05.637 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:57:05.637 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:57:05.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T00:57:05.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.955689 -999.00  +14.40  12.47     82  +11.50 1 2 1 2 1     0    0 2.97 -1.57 Z.ES. 12.6 12.5 198.0 17.6 15.6 -14.5 15.4 -14.1 15.3 -12.6 15.6 -13.1
2026-01-01T00:57:05.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T00:57:05.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T00:57:05.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.955689
2026-01-01T00:57:05.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T00:57:05.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T00:57:05.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T00:57:05.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T00:57:05.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T00:57:05.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T00:56:52', tmtdew=2.17, humidity=87.0, cloud=0.0, wind=15.21, temperature=9.31, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T22:56:11.530', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T00:57:05.639 [DEBUG] [Thread-137782] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:57:05.725 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T00:57:05.737 [DEBUG] [Thread-137785] [transport.py] [_log()] starting thread (client mode): 0xb9578190
2026-01-01T00:57:05.737 [DEBUG] [Thread-137785] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:57:05.752 [DEBUG] [Thread-137785] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T00:57:05.752 [INFO] [Thread-137785] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T00:57:05.761 [DEBUG] [Thread-137785] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:57:05.762 [DEBUG] [Thread-137785] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T00:57:05.762 [DEBUG] [Thread-137785] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:57:05.762 [DEBUG] [Thread-137785] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:57:05.762 [DEBUG] [Thread-137785] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:57:05.762 [DEBUG] [Thread-137785] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:57:05.762 [DEBUG] [Thread-137785] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:57:05.762 [DEBUG] [Thread-137785] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:57:05.762 [DEBUG] [Thread-137785] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:57:05.763 [DEBUG] [Thread-137785] [transport.py] [_log()] client lang: <none>
2026-01-01T00:57:05.763 [DEBUG] [Thread-137785] [transport.py] [_log()] server lang: <none>
2026-01-01T00:57:05.763 [DEBUG] [Thread-137785] [transport.py] [_log()] kex follows: False
2026-01-01T00:57:05.763 [DEBUG] [Thread-137785] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:57:05.763 [DEBUG] [Thread-137785] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:57:05.763 [DEBUG] [Thread-137785] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:57:05.763 [DEBUG] [Thread-137785] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:57:05.763 [DEBUG] [Thread-137785] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:57:05.763 [DEBUG] [Thread-137785] [transport.py] [_log()] Compression: none
2026-01-01T00:57:05.764 [DEBUG] [Thread-137785] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:57:05.821 [DEBUG] [Thread-137785] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:57:05.821 [DEBUG] [Thread-137785] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:57:05.822 [DEBUG] [Thread-137785] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T00:57:05.822 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T00:57:05.823 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:57:05.886 [DEBUG] [Thread-137785] [transport.py] [_log()] userauth is OK
2026-01-01T00:57:05.886 [DEBUG] [Thread-137785] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:57:05.887 [DEBUG] [Thread-137785] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:57:05.887 [DEBUG] [Thread-137785] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T00:57:05.887 [DEBUG] [Thread-137785] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:57:05.910 [INFO] [Thread-137785] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:57:05.910 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T00:57:05.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:57:06.815 [DEBUG] [Thread-137785] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:57:06.815 [DEBUG] [Thread-137785] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:57:06.863 [DEBUG] [Thread-137785] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:57:06.863 [DEBUG] [Thread-137785] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:57:06.872 [DEBUG] [Thread-137785] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:57:06.882 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:57:06.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T00:57:06.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T00:57:06.900 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:57:06.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:57:06.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:57:06.909 [DEBUG] [Thread-137785] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:57:13.487 [DEBUG] [Thread-137787 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:57:28.533 [DEBUG] [Thread-137788 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:57:36.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T00:57:36.925 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T00:57:36.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T00:57:37.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 0, 57, 24), 2.16, 87.01, 0.0, 18.05, 9.33, 1, 1, 0, 2, 0, 0),)
2026-01-01T00:57:37.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 00:57:24
2026-01-01T00:57:37.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T00:57:37.912 [DEBUG] [Thread-137789] [transport.py] [_log()] starting thread (client mode): 0xb6b17d30
2026-01-01T00:57:37.912 [DEBUG] [Thread-137789] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:57:37.931 [DEBUG] [Thread-137789] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T00:57:37.931 [INFO] [Thread-137789] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T00:57:37.936 [DEBUG] [Thread-137789] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:57:37.936 [DEBUG] [Thread-137789] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T00:57:37.936 [DEBUG] [Thread-137789] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:57:37.936 [DEBUG] [Thread-137789] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:57:37.936 [DEBUG] [Thread-137789] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:57:37.936 [DEBUG] [Thread-137789] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:57:37.936 [DEBUG] [Thread-137789] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:57:37.936 [DEBUG] [Thread-137789] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:57:37.936 [DEBUG] [Thread-137789] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:57:37.936 [DEBUG] [Thread-137789] [transport.py] [_log()] client lang: <none>
2026-01-01T00:57:37.936 [DEBUG] [Thread-137789] [transport.py] [_log()] server lang: <none>
2026-01-01T00:57:37.936 [DEBUG] [Thread-137789] [transport.py] [_log()] kex follows: False
2026-01-01T00:57:37.936 [DEBUG] [Thread-137789] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:57:37.936 [DEBUG] [Thread-137789] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:57:37.936 [DEBUG] [Thread-137789] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:57:37.936 [DEBUG] [Thread-137789] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:57:37.936 [DEBUG] [Thread-137789] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:57:37.936 [DEBUG] [Thread-137789] [transport.py] [_log()] Compression: none
2026-01-01T00:57:37.936 [DEBUG] [Thread-137789] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:57:37.952 [DEBUG] [Thread-137789] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:57:37.953 [DEBUG] [Thread-137789] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:57:37.953 [DEBUG] [Thread-137789] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T00:57:37.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T00:57:37.954 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:57:37.997 [DEBUG] [Thread-137789] [transport.py] [_log()] userauth is OK
2026-01-01T00:57:37.997 [DEBUG] [Thread-137789] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:57:37.997 [DEBUG] [Thread-137789] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:57:37.998 [DEBUG] [Thread-137789] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T00:57:37.998 [DEBUG] [Thread-137789] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:57:38.022 [INFO] [Thread-137789] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:57:38.023 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:57:38.746 [DEBUG] [Thread-137789] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:57:38.746 [DEBUG] [Thread-137789] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:57:38.746 [DEBUG] [Thread-137789] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T00:57:38.787 [DEBUG] [Thread-137789] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:57:38.787 [DEBUG] [Thread-137789] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:57:38.790 [DEBUG] [Thread-137789] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:57:38.797 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:57:38.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T00:57:38.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T00:57:38.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T00:57:38.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:57:38.803 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T00:57:38.803 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:57:38.803 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:57:38.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T00:57:38.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.956383 -999.00  +14.40  18.33     82  +11.40 1 2 1 2 1     0    0 2.91 -1.98 Z.ES. 17.7 18.3 199.0 20.9 15.6 -14.1 15.4 -14.2 15.2 -12.2 15.6 -12.9
2026-01-01T00:57:38.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T00:57:38.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T00:57:38.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.956383
2026-01-01T00:57:38.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T00:57:38.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T00:57:38.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T00:57:38.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T00:57:38.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T00:57:38.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T00:57:24', tmtdew=2.16, humidity=87.01, cloud=0.0, wind=18.05, temperature=9.33, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T22:57:11.491', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T00:57:38.804 [DEBUG] [Thread-137789] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:57:38.880 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T00:57:38.893 [DEBUG] [Thread-137792] [transport.py] [_log()] starting thread (client mode): 0xb95f22f0
2026-01-01T00:57:38.893 [DEBUG] [Thread-137792] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:57:38.909 [DEBUG] [Thread-137792] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T00:57:38.909 [INFO] [Thread-137792] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T00:57:38.917 [DEBUG] [Thread-137792] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:57:38.917 [DEBUG] [Thread-137792] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T00:57:38.917 [DEBUG] [Thread-137792] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:57:38.917 [DEBUG] [Thread-137792] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:57:38.917 [DEBUG] [Thread-137792] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:57:38.917 [DEBUG] [Thread-137792] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:57:38.917 [DEBUG] [Thread-137792] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:57:38.917 [DEBUG] [Thread-137792] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:57:38.917 [DEBUG] [Thread-137792] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:57:38.917 [DEBUG] [Thread-137792] [transport.py] [_log()] client lang: <none>
2026-01-01T00:57:38.917 [DEBUG] [Thread-137792] [transport.py] [_log()] server lang: <none>
2026-01-01T00:57:38.917 [DEBUG] [Thread-137792] [transport.py] [_log()] kex follows: False
2026-01-01T00:57:38.917 [DEBUG] [Thread-137792] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:57:38.917 [DEBUG] [Thread-137792] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:57:38.918 [DEBUG] [Thread-137792] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:57:38.918 [DEBUG] [Thread-137792] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:57:38.918 [DEBUG] [Thread-137792] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:57:38.918 [DEBUG] [Thread-137792] [transport.py] [_log()] Compression: none
2026-01-01T00:57:38.918 [DEBUG] [Thread-137792] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:57:38.974 [DEBUG] [Thread-137792] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:57:38.975 [DEBUG] [Thread-137792] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:57:38.976 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T00:57:38.976 [DEBUG] [Thread-137792] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T00:57:38.977 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:57:39.031 [DEBUG] [Thread-137792] [transport.py] [_log()] userauth is OK
2026-01-01T00:57:39.031 [DEBUG] [Thread-137792] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:57:39.032 [DEBUG] [Thread-137792] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:57:39.032 [DEBUG] [Thread-137792] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T00:57:39.032 [DEBUG] [Thread-137792] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:57:39.050 [INFO] [Thread-137792] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:57:39.051 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T00:57:39.051 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:57:39.886 [DEBUG] [Thread-137792] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:57:39.887 [DEBUG] [Thread-137792] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:57:39.934 [DEBUG] [Thread-137792] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:57:39.934 [DEBUG] [Thread-137792] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:57:39.943 [DEBUG] [Thread-137792] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:57:39.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:57:39.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T00:57:39.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T00:57:39.971 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:57:39.971 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:57:39.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:57:39.980 [DEBUG] [Thread-137792] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:57:43.566 [DEBUG] [Thread-137794 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:57:44.349 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:57:44.350 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:57:58.550 [DEBUG] [Thread-137795 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:57:58.613 [DEBUG] [Thread-137796 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:58:10.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T00:58:10.002 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T00:58:10.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T00:58:10.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 0, 57, 56), 2.16, 87.01, 0.0, 16.3, 9.31, 1, 1, 0, 2, 0, 0),)
2026-01-01T00:58:10.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 00:57:56
2026-01-01T00:58:10.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T00:58:11.023 [DEBUG] [Thread-137797] [transport.py] [_log()] starting thread (client mode): 0xb1745bd0
2026-01-01T00:58:11.023 [DEBUG] [Thread-137797] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:58:11.038 [DEBUG] [Thread-137797] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T00:58:11.038 [INFO] [Thread-137797] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T00:58:11.041 [DEBUG] [Thread-137797] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:58:11.041 [DEBUG] [Thread-137797] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T00:58:11.041 [DEBUG] [Thread-137797] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:58:11.041 [DEBUG] [Thread-137797] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:58:11.041 [DEBUG] [Thread-137797] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:58:11.041 [DEBUG] [Thread-137797] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:58:11.041 [DEBUG] [Thread-137797] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:58:11.041 [DEBUG] [Thread-137797] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:58:11.041 [DEBUG] [Thread-137797] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:58:11.041 [DEBUG] [Thread-137797] [transport.py] [_log()] client lang: <none>
2026-01-01T00:58:11.041 [DEBUG] [Thread-137797] [transport.py] [_log()] server lang: <none>
2026-01-01T00:58:11.041 [DEBUG] [Thread-137797] [transport.py] [_log()] kex follows: False
2026-01-01T00:58:11.042 [DEBUG] [Thread-137797] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:58:11.042 [DEBUG] [Thread-137797] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:58:11.042 [DEBUG] [Thread-137797] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:58:11.042 [DEBUG] [Thread-137797] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:58:11.042 [DEBUG] [Thread-137797] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:58:11.042 [DEBUG] [Thread-137797] [transport.py] [_log()] Compression: none
2026-01-01T00:58:11.042 [DEBUG] [Thread-137797] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:58:11.056 [DEBUG] [Thread-137797] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:58:11.057 [DEBUG] [Thread-137797] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:58:11.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T00:58:11.057 [DEBUG] [Thread-137797] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T00:58:11.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:58:11.059 [DEBUG] [Thread-137797] [transport.py] [_log()] userauth is OK
2026-01-01T00:58:11.059 [DEBUG] [Thread-137797] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:58:11.059 [DEBUG] [Thread-137797] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:58:11.059 [DEBUG] [Thread-137797] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T00:58:11.059 [DEBUG] [Thread-137797] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:58:11.075 [INFO] [Thread-137797] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:58:11.075 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:58:11.703 [DEBUG] [Thread-137797] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:58:11.703 [DEBUG] [Thread-137797] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:58:11.703 [DEBUG] [Thread-137797] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T00:58:11.745 [DEBUG] [Thread-137797] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:58:11.745 [DEBUG] [Thread-137797] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:58:11.748 [DEBUG] [Thread-137797] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:58:11.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:58:11.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T00:58:11.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T00:58:11.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T00:58:11.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:58:11.766 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T00:58:11.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:58:11.766 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:58:11.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T00:58:11.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.956731 -999.00  +14.30  12.35     82  +11.40 1 2 1 2 1     0    0 2.93 -1.97 .NEs. 18.3 12.3 198.4 22.5 15.6 -13.9 15.4 -13.4 15.2 -12.0 15.6 -12.7
2026-01-01T00:58:11.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T00:58:11.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T00:58:11.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.956731
2026-01-01T00:58:11.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T00:58:11.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T00:58:11.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T00:58:11.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T00:58:11.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T00:58:11.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T00:57:56', tmtdew=2.16, humidity=87.01, cloud=0.0, wind=16.3, temperature=9.31, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T22:57:41.558', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T00:58:11.767 [DEBUG] [Thread-137797] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:58:11.848 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T00:58:11.860 [DEBUG] [Thread-137800] [transport.py] [_log()] starting thread (client mode): 0xb95f2230
2026-01-01T00:58:11.860 [DEBUG] [Thread-137800] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:58:11.877 [DEBUG] [Thread-137800] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T00:58:11.877 [INFO] [Thread-137800] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T00:58:11.885 [DEBUG] [Thread-137800] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:58:11.885 [DEBUG] [Thread-137800] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T00:58:11.885 [DEBUG] [Thread-137800] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:58:11.885 [DEBUG] [Thread-137800] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:58:11.885 [DEBUG] [Thread-137800] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:58:11.885 [DEBUG] [Thread-137800] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:58:11.885 [DEBUG] [Thread-137800] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:58:11.885 [DEBUG] [Thread-137800] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:58:11.885 [DEBUG] [Thread-137800] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:58:11.885 [DEBUG] [Thread-137800] [transport.py] [_log()] client lang: <none>
2026-01-01T00:58:11.885 [DEBUG] [Thread-137800] [transport.py] [_log()] server lang: <none>
2026-01-01T00:58:11.885 [DEBUG] [Thread-137800] [transport.py] [_log()] kex follows: False
2026-01-01T00:58:11.885 [DEBUG] [Thread-137800] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:58:11.885 [DEBUG] [Thread-137800] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:58:11.885 [DEBUG] [Thread-137800] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:58:11.885 [DEBUG] [Thread-137800] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:58:11.885 [DEBUG] [Thread-137800] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:58:11.885 [DEBUG] [Thread-137800] [transport.py] [_log()] Compression: none
2026-01-01T00:58:11.885 [DEBUG] [Thread-137800] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:58:11.942 [DEBUG] [Thread-137800] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:58:11.942 [DEBUG] [Thread-137800] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:58:11.942 [DEBUG] [Thread-137800] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T00:58:11.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T00:58:11.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:58:11.999 [DEBUG] [Thread-137800] [transport.py] [_log()] userauth is OK
2026-01-01T00:58:11.999 [DEBUG] [Thread-137800] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:58:11.999 [DEBUG] [Thread-137800] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:58:11.999 [DEBUG] [Thread-137800] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T00:58:11.999 [DEBUG] [Thread-137800] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:58:12.014 [INFO] [Thread-137800] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:58:12.014 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T00:58:12.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:58:12.882 [DEBUG] [Thread-137800] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:58:12.882 [DEBUG] [Thread-137800] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:58:12.930 [DEBUG] [Thread-137800] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:58:12.930 [DEBUG] [Thread-137800] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:58:12.939 [DEBUG] [Thread-137800] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:58:12.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:58:12.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T00:58:12.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T00:58:12.967 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:58:12.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:58:12.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:58:12.977 [DEBUG] [Thread-137800] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:58:13.650 [DEBUG] [Thread-137802 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:58:28.703 [DEBUG] [Thread-137803 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:58:42.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T00:58:42.995 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T00:58:42.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T00:58:43.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 0, 58, 28), 2.16, 87.01, 0.0, 17.56, 9.29, 1, 1, 0, 2, 0, 0),)
2026-01-01T00:58:43.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 00:58:28
2026-01-01T00:58:43.735 [DEBUG] [Thread-137804 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:58:43.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T00:58:43.979 [DEBUG] [Thread-137805] [transport.py] [_log()] starting thread (client mode): 0xb6b61720
2026-01-01T00:58:43.979 [DEBUG] [Thread-137805] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:58:43.998 [DEBUG] [Thread-137805] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T00:58:43.998 [INFO] [Thread-137805] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T00:58:44.001 [DEBUG] [Thread-137805] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:58:44.002 [DEBUG] [Thread-137805] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T00:58:44.002 [DEBUG] [Thread-137805] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:58:44.002 [DEBUG] [Thread-137805] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:58:44.002 [DEBUG] [Thread-137805] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:58:44.002 [DEBUG] [Thread-137805] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:58:44.002 [DEBUG] [Thread-137805] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:58:44.002 [DEBUG] [Thread-137805] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:58:44.002 [DEBUG] [Thread-137805] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:58:44.002 [DEBUG] [Thread-137805] [transport.py] [_log()] client lang: <none>
2026-01-01T00:58:44.002 [DEBUG] [Thread-137805] [transport.py] [_log()] server lang: <none>
2026-01-01T00:58:44.002 [DEBUG] [Thread-137805] [transport.py] [_log()] kex follows: False
2026-01-01T00:58:44.002 [DEBUG] [Thread-137805] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:58:44.002 [DEBUG] [Thread-137805] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:58:44.002 [DEBUG] [Thread-137805] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:58:44.002 [DEBUG] [Thread-137805] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:58:44.003 [DEBUG] [Thread-137805] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:58:44.003 [DEBUG] [Thread-137805] [transport.py] [_log()] Compression: none
2026-01-01T00:58:44.003 [DEBUG] [Thread-137805] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:58:44.019 [DEBUG] [Thread-137805] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:58:44.020 [DEBUG] [Thread-137805] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:58:44.021 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T00:58:44.021 [DEBUG] [Thread-137805] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T00:58:44.022 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:58:44.023 [DEBUG] [Thread-137805] [transport.py] [_log()] userauth is OK
2026-01-01T00:58:44.024 [DEBUG] [Thread-137805] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:58:44.024 [DEBUG] [Thread-137805] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:58:44.024 [DEBUG] [Thread-137805] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T00:58:44.024 [DEBUG] [Thread-137805] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:58:44.042 [INFO] [Thread-137805] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:58:44.042 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:58:44.563 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:58:44.564 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:58:44.746 [DEBUG] [Thread-137805] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:58:44.746 [DEBUG] [Thread-137805] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:58:44.747 [DEBUG] [Thread-137805] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T00:58:44.787 [DEBUG] [Thread-137805] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:58:44.787 [DEBUG] [Thread-137805] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:58:44.790 [DEBUG] [Thread-137805] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:58:44.803 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:58:44.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T00:58:44.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T00:58:44.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T00:58:44.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:58:44.818 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T00:58:44.819 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:58:44.819 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:58:44.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T00:58:44.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.957078 -999.00  +14.30  10.99     82  +11.30 1 2 1 2 1     0    0 2.95 -1.97 ..... 13.2 11.0 196.4 19.3 15.5 -13.5 15.4 -13.2 15.2 -11.9 15.6 -12.4
2026-01-01T00:58:44.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T00:58:44.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T00:58:44.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.957078
2026-01-01T00:58:44.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T00:58:44.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T00:58:44.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T00:58:44.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T00:58:44.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T00:58:44.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T00:58:28', tmtdew=2.16, humidity=87.01, cloud=0.0, wind=17.56, temperature=9.29, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T22:58:11.539', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T00:58:44.821 [DEBUG] [Thread-137805] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:58:44.905 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T00:58:44.916 [DEBUG] [Thread-137808] [transport.py] [_log()] starting thread (client mode): 0xb9579ff0
2026-01-01T00:58:44.916 [DEBUG] [Thread-137808] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:58:44.931 [DEBUG] [Thread-137808] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T00:58:44.931 [INFO] [Thread-137808] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T00:58:44.939 [DEBUG] [Thread-137808] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:58:44.939 [DEBUG] [Thread-137808] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T00:58:44.939 [DEBUG] [Thread-137808] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:58:44.939 [DEBUG] [Thread-137808] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:58:44.939 [DEBUG] [Thread-137808] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:58:44.939 [DEBUG] [Thread-137808] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:58:44.939 [DEBUG] [Thread-137808] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:58:44.939 [DEBUG] [Thread-137808] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:58:44.939 [DEBUG] [Thread-137808] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:58:44.939 [DEBUG] [Thread-137808] [transport.py] [_log()] client lang: <none>
2026-01-01T00:58:44.939 [DEBUG] [Thread-137808] [transport.py] [_log()] server lang: <none>
2026-01-01T00:58:44.939 [DEBUG] [Thread-137808] [transport.py] [_log()] kex follows: False
2026-01-01T00:58:44.939 [DEBUG] [Thread-137808] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:58:44.939 [DEBUG] [Thread-137808] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:58:44.939 [DEBUG] [Thread-137808] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:58:44.939 [DEBUG] [Thread-137808] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:58:44.939 [DEBUG] [Thread-137808] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:58:44.939 [DEBUG] [Thread-137808] [transport.py] [_log()] Compression: none
2026-01-01T00:58:44.939 [DEBUG] [Thread-137808] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:58:44.995 [DEBUG] [Thread-137808] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:58:44.996 [DEBUG] [Thread-137808] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:58:44.996 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T00:58:44.997 [DEBUG] [Thread-137808] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T00:58:44.998 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:58:45.052 [DEBUG] [Thread-137808] [transport.py] [_log()] userauth is OK
2026-01-01T00:58:45.052 [DEBUG] [Thread-137808] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:58:45.052 [DEBUG] [Thread-137808] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:58:45.052 [DEBUG] [Thread-137808] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T00:58:45.052 [DEBUG] [Thread-137808] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:58:45.066 [INFO] [Thread-137808] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:58:45.066 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T00:58:45.066 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:58:45.885 [DEBUG] [Thread-137808] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:58:45.885 [DEBUG] [Thread-137808] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:58:45.932 [DEBUG] [Thread-137808] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:58:45.932 [DEBUG] [Thread-137808] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:58:45.940 [DEBUG] [Thread-137808] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:58:45.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:58:45.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T00:58:45.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T00:58:45.964 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:58:45.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:58:45.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:58:45.972 [DEBUG] [Thread-137808] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:58:58.629 [DEBUG] [Thread-137810 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:58:58.763 [DEBUG] [Thread-137811 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:59:13.825 [DEBUG] [Thread-137812 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:59:15.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T00:59:15.995 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T00:59:15.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T00:59:16.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 0, 59), 2.2, 87.02, 0.0, 18.39, 9.31, 1, 1, 0, 2, 0, 0),)
2026-01-01T00:59:16.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 00:59:00
2026-01-01T00:59:16.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T00:59:16.966 [DEBUG] [Thread-137813] [transport.py] [_log()] starting thread (client mode): 0xb6ba0dc0
2026-01-01T00:59:16.966 [DEBUG] [Thread-137813] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:59:16.986 [DEBUG] [Thread-137813] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T00:59:16.986 [INFO] [Thread-137813] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T00:59:16.990 [DEBUG] [Thread-137813] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:59:16.990 [DEBUG] [Thread-137813] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T00:59:16.990 [DEBUG] [Thread-137813] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:59:16.990 [DEBUG] [Thread-137813] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:59:16.990 [DEBUG] [Thread-137813] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:59:16.990 [DEBUG] [Thread-137813] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:59:16.990 [DEBUG] [Thread-137813] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:59:16.990 [DEBUG] [Thread-137813] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:59:16.990 [DEBUG] [Thread-137813] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:59:16.990 [DEBUG] [Thread-137813] [transport.py] [_log()] client lang: <none>
2026-01-01T00:59:16.990 [DEBUG] [Thread-137813] [transport.py] [_log()] server lang: <none>
2026-01-01T00:59:16.990 [DEBUG] [Thread-137813] [transport.py] [_log()] kex follows: False
2026-01-01T00:59:16.990 [DEBUG] [Thread-137813] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:59:16.990 [DEBUG] [Thread-137813] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:59:16.990 [DEBUG] [Thread-137813] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:59:16.990 [DEBUG] [Thread-137813] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:59:16.990 [DEBUG] [Thread-137813] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:59:16.990 [DEBUG] [Thread-137813] [transport.py] [_log()] Compression: none
2026-01-01T00:59:16.990 [DEBUG] [Thread-137813] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:59:17.008 [DEBUG] [Thread-137813] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:59:17.009 [DEBUG] [Thread-137813] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:59:17.009 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T00:59:17.010 [DEBUG] [Thread-137813] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T00:59:17.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:59:17.012 [DEBUG] [Thread-137813] [transport.py] [_log()] userauth is OK
2026-01-01T00:59:17.013 [DEBUG] [Thread-137813] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:59:17.013 [DEBUG] [Thread-137813] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:59:17.013 [DEBUG] [Thread-137813] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T00:59:17.013 [DEBUG] [Thread-137813] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:59:17.039 [INFO] [Thread-137813] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:59:17.040 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:59:17.684 [DEBUG] [Thread-137813] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:59:17.684 [DEBUG] [Thread-137813] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:59:17.685 [DEBUG] [Thread-137813] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T00:59:17.726 [DEBUG] [Thread-137813] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:59:17.726 [DEBUG] [Thread-137813] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:59:17.730 [DEBUG] [Thread-137813] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:59:17.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:59:17.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T00:59:17.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T00:59:17.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T00:59:17.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:59:17.759 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T00:59:17.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:59:17.760 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:59:17.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T00:59:17.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.957425 -999.00  +14.30  13.31     82  +11.30 1 2 1 2 1     0    0 2.95 -1.84 ..... 10.6 13.3 198.0 15.6 15.6 -13.3 15.3 -13.2 15.2 -11.8 15.6 -12.4
2026-01-01T00:59:17.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T00:59:17.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T00:59:17.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.957425
2026-01-01T00:59:17.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T00:59:17.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T00:59:17.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T00:59:17.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T00:59:17.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T00:59:17.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T00:59:00', tmtdew=2.2, humidity=87.02, cloud=0.0, wind=18.39, temperature=9.31, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T22:58:41.520', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T00:59:17.763 [DEBUG] [Thread-137813] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:59:17.846 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T00:59:17.859 [DEBUG] [Thread-137816] [transport.py] [_log()] starting thread (client mode): 0xb95f2230
2026-01-01T00:59:17.859 [DEBUG] [Thread-137816] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:59:17.875 [DEBUG] [Thread-137816] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T00:59:17.875 [INFO] [Thread-137816] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T00:59:17.882 [DEBUG] [Thread-137816] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:59:17.882 [DEBUG] [Thread-137816] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T00:59:17.882 [DEBUG] [Thread-137816] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:59:17.882 [DEBUG] [Thread-137816] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:59:17.882 [DEBUG] [Thread-137816] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:59:17.882 [DEBUG] [Thread-137816] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:59:17.883 [DEBUG] [Thread-137816] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:59:17.883 [DEBUG] [Thread-137816] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:59:17.883 [DEBUG] [Thread-137816] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:59:17.883 [DEBUG] [Thread-137816] [transport.py] [_log()] client lang: <none>
2026-01-01T00:59:17.883 [DEBUG] [Thread-137816] [transport.py] [_log()] server lang: <none>
2026-01-01T00:59:17.883 [DEBUG] [Thread-137816] [transport.py] [_log()] kex follows: False
2026-01-01T00:59:17.883 [DEBUG] [Thread-137816] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:59:17.883 [DEBUG] [Thread-137816] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:59:17.883 [DEBUG] [Thread-137816] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:59:17.883 [DEBUG] [Thread-137816] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:59:17.883 [DEBUG] [Thread-137816] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:59:17.883 [DEBUG] [Thread-137816] [transport.py] [_log()] Compression: none
2026-01-01T00:59:17.883 [DEBUG] [Thread-137816] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:59:17.941 [DEBUG] [Thread-137816] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:59:17.942 [DEBUG] [Thread-137816] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:59:17.942 [DEBUG] [Thread-137816] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T00:59:17.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T00:59:17.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:59:17.997 [DEBUG] [Thread-137816] [transport.py] [_log()] userauth is OK
2026-01-01T00:59:17.998 [DEBUG] [Thread-137816] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:59:17.998 [DEBUG] [Thread-137816] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:59:17.998 [DEBUG] [Thread-137816] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T00:59:17.998 [DEBUG] [Thread-137816] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:59:18.018 [INFO] [Thread-137816] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:59:18.019 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T00:59:18.019 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:59:18.871 [DEBUG] [Thread-137816] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:59:18.871 [DEBUG] [Thread-137816] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:59:18.919 [DEBUG] [Thread-137816] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:59:18.919 [DEBUG] [Thread-137816] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:59:18.928 [DEBUG] [Thread-137816] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:59:18.936 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:59:18.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T00:59:18.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T00:59:18.952 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:59:18.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:59:18.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:59:18.960 [DEBUG] [Thread-137816] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:59:28.856 [DEBUG] [Thread-137818 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:59:43.903 [DEBUG] [Thread-137819 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:59:44.769 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:59:44.770 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:59:48.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T00:59:48.983 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T00:59:48.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T00:59:49.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 0, 59, 32), 2.2, 86.97, 0.0, 16.69, 9.3, 1, 1, 0, 2, 0, 0),)
2026-01-01T00:59:49.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 00:59:32
2026-01-01T00:59:49.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T00:59:49.957 [DEBUG] [Thread-137820] [transport.py] [_log()] starting thread (client mode): 0xb95f0100
2026-01-01T00:59:49.958 [DEBUG] [Thread-137820] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:59:49.986 [DEBUG] [Thread-137820] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T00:59:49.986 [INFO] [Thread-137820] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T00:59:49.990 [DEBUG] [Thread-137820] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:59:49.990 [DEBUG] [Thread-137820] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T00:59:49.991 [DEBUG] [Thread-137820] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:59:49.991 [DEBUG] [Thread-137820] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:59:49.991 [DEBUG] [Thread-137820] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:59:49.991 [DEBUG] [Thread-137820] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:59:49.991 [DEBUG] [Thread-137820] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:59:49.991 [DEBUG] [Thread-137820] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:59:49.991 [DEBUG] [Thread-137820] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:59:49.991 [DEBUG] [Thread-137820] [transport.py] [_log()] client lang: <none>
2026-01-01T00:59:49.991 [DEBUG] [Thread-137820] [transport.py] [_log()] server lang: <none>
2026-01-01T00:59:49.991 [DEBUG] [Thread-137820] [transport.py] [_log()] kex follows: False
2026-01-01T00:59:49.991 [DEBUG] [Thread-137820] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:59:49.991 [DEBUG] [Thread-137820] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:59:49.991 [DEBUG] [Thread-137820] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:59:49.991 [DEBUG] [Thread-137820] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:59:49.991 [DEBUG] [Thread-137820] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:59:49.992 [DEBUG] [Thread-137820] [transport.py] [_log()] Compression: none
2026-01-01T00:59:49.992 [DEBUG] [Thread-137820] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:59:50.009 [DEBUG] [Thread-137820] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:59:50.010 [DEBUG] [Thread-137820] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:59:50.011 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T00:59:50.011 [DEBUG] [Thread-137820] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T00:59:50.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:59:50.013 [DEBUG] [Thread-137820] [transport.py] [_log()] userauth is OK
2026-01-01T00:59:50.013 [DEBUG] [Thread-137820] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:59:50.013 [DEBUG] [Thread-137820] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:59:50.014 [DEBUG] [Thread-137820] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T00:59:50.014 [DEBUG] [Thread-137820] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:59:50.050 [INFO] [Thread-137820] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:59:50.051 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:59:50.799 [DEBUG] [Thread-137820] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:59:50.799 [DEBUG] [Thread-137820] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:59:50.800 [DEBUG] [Thread-137820] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T00:59:50.840 [DEBUG] [Thread-137820] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:59:50.840 [DEBUG] [Thread-137820] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:59:50.843 [DEBUG] [Thread-137820] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:59:50.855 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:59:50.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T00:59:50.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T00:59:50.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T00:59:50.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:59:50.867 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T00:59:50.867 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:59:50.868 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:59:50.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T00:59:50.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.957772 -999.00  +14.40  12.10     82  +11.30 1 2 1 2 1     0    0 2.91 -1.44 ..... 14.1 12.1 195.8 18.5 15.6 -13.2 15.4 -13.0 15.2 -11.7 15.6 -12.3
2026-01-01T00:59:50.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T00:59:50.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T00:59:50.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.957772
2026-01-01T00:59:50.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T00:59:50.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T00:59:50.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T00:59:50.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T00:59:50.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T00:59:50.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T00:59:32', tmtdew=2.2, humidity=86.97, cloud=0.0, wind=16.69, temperature=9.3, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T22:59:11.501', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T00:59:50.871 [DEBUG] [Thread-137820] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:59:50.948 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T00:59:50.960 [DEBUG] [Thread-137823] [transport.py] [_log()] starting thread (client mode): 0xb6b16f80
2026-01-01T00:59:50.960 [DEBUG] [Thread-137823] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T00:59:50.976 [DEBUG] [Thread-137823] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T00:59:50.976 [INFO] [Thread-137823] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T00:59:50.984 [DEBUG] [Thread-137823] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T00:59:50.984 [DEBUG] [Thread-137823] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T00:59:50.984 [DEBUG] [Thread-137823] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T00:59:50.984 [DEBUG] [Thread-137823] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:59:50.984 [DEBUG] [Thread-137823] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T00:59:50.985 [DEBUG] [Thread-137823] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:59:50.985 [DEBUG] [Thread-137823] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T00:59:50.985 [DEBUG] [Thread-137823] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T00:59:50.985 [DEBUG] [Thread-137823] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T00:59:50.985 [DEBUG] [Thread-137823] [transport.py] [_log()] client lang: <none>
2026-01-01T00:59:50.985 [DEBUG] [Thread-137823] [transport.py] [_log()] server lang: <none>
2026-01-01T00:59:50.985 [DEBUG] [Thread-137823] [transport.py] [_log()] kex follows: False
2026-01-01T00:59:50.985 [DEBUG] [Thread-137823] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T00:59:50.985 [DEBUG] [Thread-137823] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T00:59:50.985 [DEBUG] [Thread-137823] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T00:59:50.985 [DEBUG] [Thread-137823] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T00:59:50.985 [DEBUG] [Thread-137823] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T00:59:50.985 [DEBUG] [Thread-137823] [transport.py] [_log()] Compression: none
2026-01-01T00:59:50.985 [DEBUG] [Thread-137823] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T00:59:51.041 [DEBUG] [Thread-137823] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T00:59:51.042 [DEBUG] [Thread-137823] [transport.py] [_log()] Switch to new keys ...
2026-01-01T00:59:51.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T00:59:51.043 [DEBUG] [Thread-137823] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T00:59:51.044 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T00:59:51.098 [DEBUG] [Thread-137823] [transport.py] [_log()] userauth is OK
2026-01-01T00:59:51.098 [DEBUG] [Thread-137823] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T00:59:51.099 [DEBUG] [Thread-137823] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T00:59:51.099 [DEBUG] [Thread-137823] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T00:59:51.099 [DEBUG] [Thread-137823] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T00:59:51.118 [INFO] [Thread-137823] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T00:59:51.118 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T00:59:51.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T00:59:51.976 [DEBUG] [Thread-137823] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T00:59:51.976 [DEBUG] [Thread-137823] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T00:59:52.023 [DEBUG] [Thread-137823] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T00:59:52.024 [DEBUG] [Thread-137823] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T00:59:52.032 [DEBUG] [Thread-137823] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T00:59:52.041 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T00:59:52.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T00:59:52.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T00:59:52.058 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T00:59:52.058 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T00:59:52.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T00:59:52.066 [DEBUG] [Thread-137823] [transport.py] [_log()] EOF in transport thread
2026-01-01T00:59:58.687 [DEBUG] [Thread-137825 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T00:59:58.937 [DEBUG] [Thread-137826 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:00:13.993 [DEBUG] [Thread-137827 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:00:22.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T01:00:22.079 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T01:00:22.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T01:00:22.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 1, 0, 4), 2.2, 86.97, 0.0, 21.03, 9.3, 1, 1, 0, 2, 0, 0),)
2026-01-01T01:00:22.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 01:00:04
2026-01-01T01:00:22.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T01:00:23.052 [DEBUG] [Thread-137828] [transport.py] [_log()] starting thread (client mode): 0xb6ba1cc0
2026-01-01T01:00:23.052 [DEBUG] [Thread-137828] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:00:23.072 [DEBUG] [Thread-137828] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T01:00:23.072 [INFO] [Thread-137828] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T01:00:23.075 [DEBUG] [Thread-137828] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:00:23.075 [DEBUG] [Thread-137828] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T01:00:23.075 [DEBUG] [Thread-137828] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:00:23.075 [DEBUG] [Thread-137828] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:00:23.075 [DEBUG] [Thread-137828] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:00:23.076 [DEBUG] [Thread-137828] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:00:23.076 [DEBUG] [Thread-137828] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:00:23.076 [DEBUG] [Thread-137828] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:00:23.076 [DEBUG] [Thread-137828] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:00:23.076 [DEBUG] [Thread-137828] [transport.py] [_log()] client lang: <none>
2026-01-01T01:00:23.076 [DEBUG] [Thread-137828] [transport.py] [_log()] server lang: <none>
2026-01-01T01:00:23.076 [DEBUG] [Thread-137828] [transport.py] [_log()] kex follows: False
2026-01-01T01:00:23.076 [DEBUG] [Thread-137828] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:00:23.076 [DEBUG] [Thread-137828] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:00:23.076 [DEBUG] [Thread-137828] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:00:23.076 [DEBUG] [Thread-137828] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:00:23.076 [DEBUG] [Thread-137828] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:00:23.076 [DEBUG] [Thread-137828] [transport.py] [_log()] Compression: none
2026-01-01T01:00:23.076 [DEBUG] [Thread-137828] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:00:23.093 [DEBUG] [Thread-137828] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:00:23.093 [DEBUG] [Thread-137828] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:00:23.094 [DEBUG] [Thread-137828] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T01:00:23.094 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T01:00:23.094 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:00:23.096 [DEBUG] [Thread-137828] [transport.py] [_log()] userauth is OK
2026-01-01T01:00:23.096 [DEBUG] [Thread-137828] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:00:23.096 [DEBUG] [Thread-137828] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:00:23.096 [DEBUG] [Thread-137828] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T01:00:23.096 [DEBUG] [Thread-137828] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:00:23.118 [INFO] [Thread-137828] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:00:23.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:00:23.769 [DEBUG] [Thread-137828] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:00:23.769 [DEBUG] [Thread-137828] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:00:23.770 [DEBUG] [Thread-137828] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T01:00:23.810 [DEBUG] [Thread-137828] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:00:23.810 [DEBUG] [Thread-137828] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:00:23.814 [DEBUG] [Thread-137828] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:00:23.827 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:00:23.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T01:00:23.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T01:00:23.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T01:00:23.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:00:23.840 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T01:00:23.840 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:00:23.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:00:23.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T01:00:23.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.958119 -999.00  +14.40  12.93     82  +11.30 1 2 1 2 1     0    0 2.96 -1.20 ..... 12.3 12.9 199.4 16.1 15.6 -13.0 15.4 -12.9 15.2 -11.5 15.6 -12.2
2026-01-01T01:00:23.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T01:00:23.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T01:00:23.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.958119
2026-01-01T01:00:23.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T01:00:23.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T01:00:23.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T01:00:23.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T01:00:23.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T01:00:23.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T01:00:04', tmtdew=2.2, humidity=86.97, cloud=0.0, wind=21.03, temperature=9.3, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T22:59:41.482', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T01:00:23.842 [DEBUG] [Thread-137828] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:00:23.925 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T01:00:23.937 [DEBUG] [Thread-137831] [transport.py] [_log()] starting thread (client mode): 0xb9558940
2026-01-01T01:00:23.937 [DEBUG] [Thread-137831] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:00:23.952 [DEBUG] [Thread-137831] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T01:00:23.952 [INFO] [Thread-137831] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T01:00:23.959 [DEBUG] [Thread-137831] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:00:23.960 [DEBUG] [Thread-137831] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T01:00:23.960 [DEBUG] [Thread-137831] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:00:23.960 [DEBUG] [Thread-137831] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:00:23.960 [DEBUG] [Thread-137831] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:00:23.960 [DEBUG] [Thread-137831] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:00:23.960 [DEBUG] [Thread-137831] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:00:23.961 [DEBUG] [Thread-137831] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:00:23.961 [DEBUG] [Thread-137831] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:00:23.961 [DEBUG] [Thread-137831] [transport.py] [_log()] client lang: <none>
2026-01-01T01:00:23.961 [DEBUG] [Thread-137831] [transport.py] [_log()] server lang: <none>
2026-01-01T01:00:23.961 [DEBUG] [Thread-137831] [transport.py] [_log()] kex follows: False
2026-01-01T01:00:23.961 [DEBUG] [Thread-137831] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:00:23.961 [DEBUG] [Thread-137831] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:00:23.962 [DEBUG] [Thread-137831] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:00:23.962 [DEBUG] [Thread-137831] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:00:23.962 [DEBUG] [Thread-137831] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:00:23.962 [DEBUG] [Thread-137831] [transport.py] [_log()] Compression: none
2026-01-01T01:00:23.962 [DEBUG] [Thread-137831] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:00:24.017 [DEBUG] [Thread-137831] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:00:24.018 [DEBUG] [Thread-137831] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:00:24.018 [DEBUG] [Thread-137831] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T01:00:24.019 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T01:00:24.019 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:00:24.076 [DEBUG] [Thread-137831] [transport.py] [_log()] userauth is OK
2026-01-01T01:00:24.076 [DEBUG] [Thread-137831] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:00:24.076 [DEBUG] [Thread-137831] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:00:24.077 [DEBUG] [Thread-137831] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T01:00:24.077 [DEBUG] [Thread-137831] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:00:24.096 [INFO] [Thread-137831] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:00:24.096 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T01:00:24.097 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:00:24.914 [DEBUG] [Thread-137831] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:00:24.914 [DEBUG] [Thread-137831] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:00:24.962 [DEBUG] [Thread-137831] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:00:24.962 [DEBUG] [Thread-137831] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:00:24.971 [DEBUG] [Thread-137831] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:00:24.981 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:00:24.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T01:00:24.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T01:00:24.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:00:25.000 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:00:25.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:00:25.008 [DEBUG] [Thread-137831] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:00:29.033 [DEBUG] [Thread-137833 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:00:44.078 [DEBUG] [Thread-137834 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:00:44.982 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:00:44.982 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:00:55.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T01:00:55.031 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T01:00:55.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T01:00:55.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 1, 0, 36), 2.21, 86.93, 0.0, 22.27, 9.3, 1, 1, 0, 2, 0, 0),)
2026-01-01T01:00:55.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 01:00:36
2026-01-01T01:00:55.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T01:00:56.019 [DEBUG] [Thread-137835] [transport.py] [_log()] starting thread (client mode): 0xb95f1330
2026-01-01T01:00:56.019 [DEBUG] [Thread-137835] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:00:56.039 [DEBUG] [Thread-137835] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T01:00:56.040 [INFO] [Thread-137835] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T01:00:56.042 [DEBUG] [Thread-137835] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:00:56.042 [DEBUG] [Thread-137835] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T01:00:56.042 [DEBUG] [Thread-137835] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:00:56.042 [DEBUG] [Thread-137835] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:00:56.042 [DEBUG] [Thread-137835] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:00:56.043 [DEBUG] [Thread-137835] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:00:56.043 [DEBUG] [Thread-137835] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:00:56.043 [DEBUG] [Thread-137835] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:00:56.043 [DEBUG] [Thread-137835] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:00:56.043 [DEBUG] [Thread-137835] [transport.py] [_log()] client lang: <none>
2026-01-01T01:00:56.043 [DEBUG] [Thread-137835] [transport.py] [_log()] server lang: <none>
2026-01-01T01:00:56.043 [DEBUG] [Thread-137835] [transport.py] [_log()] kex follows: False
2026-01-01T01:00:56.043 [DEBUG] [Thread-137835] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:00:56.043 [DEBUG] [Thread-137835] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:00:56.043 [DEBUG] [Thread-137835] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:00:56.043 [DEBUG] [Thread-137835] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:00:56.043 [DEBUG] [Thread-137835] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:00:56.044 [DEBUG] [Thread-137835] [transport.py] [_log()] Compression: none
2026-01-01T01:00:56.044 [DEBUG] [Thread-137835] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:00:56.064 [DEBUG] [Thread-137835] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:00:56.064 [DEBUG] [Thread-137835] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:00:56.065 [DEBUG] [Thread-137835] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T01:00:56.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T01:00:56.066 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:00:56.067 [DEBUG] [Thread-137835] [transport.py] [_log()] userauth is OK
2026-01-01T01:00:56.067 [DEBUG] [Thread-137835] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:00:56.067 [DEBUG] [Thread-137835] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:00:56.067 [DEBUG] [Thread-137835] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T01:00:56.067 [DEBUG] [Thread-137835] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:00:56.090 [INFO] [Thread-137835] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:00:56.091 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:00:56.747 [DEBUG] [Thread-137835] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:00:56.747 [DEBUG] [Thread-137835] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:00:56.748 [DEBUG] [Thread-137835] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T01:00:56.788 [DEBUG] [Thread-137835] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:00:56.788 [DEBUG] [Thread-137835] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:00:56.792 [DEBUG] [Thread-137835] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:00:56.804 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:00:56.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T01:00:56.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T01:00:56.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T01:00:56.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:00:56.816 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T01:00:56.816 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:00:56.816 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:00:56.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T01:00:56.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.958814 -999.00  +14.40  16.26     82  +11.40 1 2 1 2 1     0    0 2.95 -0.47 ..ES. 12.5 16.3 194.6 22.0 15.5 -13.1 15.4 -13.2 15.3 -11.8 15.6 -12.2
2026-01-01T01:00:56.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T01:00:56.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T01:00:56.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.958814
2026-01-01T01:00:56.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T01:00:56.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T01:00:56.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T01:00:56.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T01:00:56.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T01:00:56.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T01:00:36', tmtdew=2.21, humidity=86.93, cloud=0.0, wind=22.27, temperature=9.3, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T23:00:41.530', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T01:00:56.819 [DEBUG] [Thread-137835] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:00:56.902 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T01:00:56.914 [DEBUG] [Thread-137838] [transport.py] [_log()] starting thread (client mode): 0xb6ba3fa0
2026-01-01T01:00:56.914 [DEBUG] [Thread-137838] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:00:56.931 [DEBUG] [Thread-137838] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T01:00:56.931 [INFO] [Thread-137838] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T01:00:56.938 [DEBUG] [Thread-137838] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:00:56.938 [DEBUG] [Thread-137838] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T01:00:56.939 [DEBUG] [Thread-137838] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:00:56.939 [DEBUG] [Thread-137838] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:00:56.939 [DEBUG] [Thread-137838] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:00:56.939 [DEBUG] [Thread-137838] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:00:56.939 [DEBUG] [Thread-137838] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:00:56.939 [DEBUG] [Thread-137838] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:00:56.939 [DEBUG] [Thread-137838] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:00:56.940 [DEBUG] [Thread-137838] [transport.py] [_log()] client lang: <none>
2026-01-01T01:00:56.940 [DEBUG] [Thread-137838] [transport.py] [_log()] server lang: <none>
2026-01-01T01:00:56.940 [DEBUG] [Thread-137838] [transport.py] [_log()] kex follows: False
2026-01-01T01:00:56.940 [DEBUG] [Thread-137838] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:00:56.940 [DEBUG] [Thread-137838] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:00:56.940 [DEBUG] [Thread-137838] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:00:56.940 [DEBUG] [Thread-137838] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:00:56.941 [DEBUG] [Thread-137838] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:00:56.941 [DEBUG] [Thread-137838] [transport.py] [_log()] Compression: none
2026-01-01T01:00:56.941 [DEBUG] [Thread-137838] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:00:57.000 [DEBUG] [Thread-137838] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:00:57.001 [DEBUG] [Thread-137838] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:00:57.010 [DEBUG] [Thread-137838] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T01:00:57.011 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T01:00:57.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:00:57.059 [DEBUG] [Thread-137838] [transport.py] [_log()] userauth is OK
2026-01-01T01:00:57.059 [DEBUG] [Thread-137838] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:00:57.060 [DEBUG] [Thread-137838] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:00:57.060 [DEBUG] [Thread-137838] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T01:00:57.060 [DEBUG] [Thread-137838] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:00:57.079 [INFO] [Thread-137838] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:00:57.079 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T01:00:57.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:00:57.910 [DEBUG] [Thread-137838] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:00:57.911 [DEBUG] [Thread-137838] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:00:57.957 [DEBUG] [Thread-137838] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:00:57.958 [DEBUG] [Thread-137838] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:00:57.967 [DEBUG] [Thread-137838] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:00:57.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:00: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')
2026-01-01T01:00:57.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T01:00:57.993 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:00:57.993 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:00:57.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:00:58.002 [DEBUG] [Thread-137838] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:00:58.744 [DEBUG] [Thread-137840 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:00:59.109 [DEBUG] [Thread-137841 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:01:14.159 [DEBUG] [Thread-137842 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:01:28.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T01:01:28.021 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T01:01:28.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T01:01:28.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 1, 1, 8), 2.21, 86.94, 0.0, 20.43, 9.3, 1, 1, 0, 2, 0, 0),)
2026-01-01T01:01:28.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 01:01:08
2026-01-01T01:01:28.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T01:01:28.993 [DEBUG] [Thread-137843] [transport.py] [_log()] starting thread (client mode): 0xb6ba23b0
2026-01-01T01:01:28.993 [DEBUG] [Thread-137843] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:01:29.013 [DEBUG] [Thread-137843] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T01:01:29.013 [INFO] [Thread-137843] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T01:01:29.017 [DEBUG] [Thread-137843] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:01:29.017 [DEBUG] [Thread-137843] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T01:01:29.017 [DEBUG] [Thread-137843] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:01:29.017 [DEBUG] [Thread-137843] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:01:29.017 [DEBUG] [Thread-137843] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:01:29.017 [DEBUG] [Thread-137843] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:01:29.017 [DEBUG] [Thread-137843] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:01:29.017 [DEBUG] [Thread-137843] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:01:29.017 [DEBUG] [Thread-137843] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:01:29.017 [DEBUG] [Thread-137843] [transport.py] [_log()] client lang: <none>
2026-01-01T01:01:29.017 [DEBUG] [Thread-137843] [transport.py] [_log()] server lang: <none>
2026-01-01T01:01:29.017 [DEBUG] [Thread-137843] [transport.py] [_log()] kex follows: False
2026-01-01T01:01:29.017 [DEBUG] [Thread-137843] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:01:29.017 [DEBUG] [Thread-137843] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:01:29.017 [DEBUG] [Thread-137843] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:01:29.017 [DEBUG] [Thread-137843] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:01:29.017 [DEBUG] [Thread-137843] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:01:29.017 [DEBUG] [Thread-137843] [transport.py] [_log()] Compression: none
2026-01-01T01:01:29.017 [DEBUG] [Thread-137843] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:01:29.034 [DEBUG] [Thread-137843] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:01:29.035 [DEBUG] [Thread-137843] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:01:29.035 [DEBUG] [Thread-137843] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T01:01:29.036 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T01:01:29.036 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:01:29.037 [DEBUG] [Thread-137843] [transport.py] [_log()] userauth is OK
2026-01-01T01:01:29.037 [DEBUG] [Thread-137843] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:01:29.037 [DEBUG] [Thread-137843] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:01:29.038 [DEBUG] [Thread-137843] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T01:01:29.038 [DEBUG] [Thread-137843] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:01:29.072 [INFO] [Thread-137843] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:01:29.073 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:01:29.193 [DEBUG] [Thread-137845 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:01:29.731 [DEBUG] [Thread-137843] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:01:29.731 [DEBUG] [Thread-137843] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:01:29.732 [DEBUG] [Thread-137843] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T01:01:29.773 [DEBUG] [Thread-137843] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:01:29.773 [DEBUG] [Thread-137843] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:01:29.776 [DEBUG] [Thread-137843] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:01:29.788 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:01:29.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T01:01:29.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T01:01:29.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T01:01:29.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:01:29.799 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T01:01:29.799 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:01:29.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:01:29.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T01:01:29.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.959161 -999.00  +14.30  11.28     82  +11.30 1 2 1 2 1     0    0 3.02 -0.37 ...S. 13.8 11.3 190.6 24.1 15.6 -13.0 15.3 -13.3 15.2 -11.8 15.6 -12.2
2026-01-01T01:01:29.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T01:01:29.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T01:01:29.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.959161
2026-01-01T01:01:29.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T01:01:29.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T01:01:29.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T01:01:29.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T01:01:29.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T01:01:29.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T01:01:08', tmtdew=2.21, humidity=86.94, cloud=0.0, wind=20.43, temperature=9.3, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T23:01:11.510', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T01:01:29.801 [DEBUG] [Thread-137843] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:01:29.885 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T01:01:29.896 [DEBUG] [Thread-137847] [transport.py] [_log()] starting thread (client mode): 0xb6ba2770
2026-01-01T01:01:29.897 [DEBUG] [Thread-137847] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:01:29.912 [DEBUG] [Thread-137847] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T01:01:29.912 [INFO] [Thread-137847] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T01:01:29.920 [DEBUG] [Thread-137847] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:01:29.920 [DEBUG] [Thread-137847] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T01:01:29.920 [DEBUG] [Thread-137847] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:01:29.921 [DEBUG] [Thread-137847] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:01:29.921 [DEBUG] [Thread-137847] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:01:29.921 [DEBUG] [Thread-137847] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:01:29.921 [DEBUG] [Thread-137847] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:01:29.921 [DEBUG] [Thread-137847] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:01:29.921 [DEBUG] [Thread-137847] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:01:29.921 [DEBUG] [Thread-137847] [transport.py] [_log()] client lang: <none>
2026-01-01T01:01:29.921 [DEBUG] [Thread-137847] [transport.py] [_log()] server lang: <none>
2026-01-01T01:01:29.921 [DEBUG] [Thread-137847] [transport.py] [_log()] kex follows: False
2026-01-01T01:01:29.921 [DEBUG] [Thread-137847] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:01:29.921 [DEBUG] [Thread-137847] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:01:29.921 [DEBUG] [Thread-137847] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:01:29.921 [DEBUG] [Thread-137847] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:01:29.921 [DEBUG] [Thread-137847] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:01:29.921 [DEBUG] [Thread-137847] [transport.py] [_log()] Compression: none
2026-01-01T01:01:29.921 [DEBUG] [Thread-137847] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:01:29.980 [DEBUG] [Thread-137847] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:01:29.980 [DEBUG] [Thread-137847] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:01:29.981 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T01:01:29.982 [DEBUG] [Thread-137847] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T01:01:29.983 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:01:30.036 [DEBUG] [Thread-137847] [transport.py] [_log()] userauth is OK
2026-01-01T01:01:30.036 [DEBUG] [Thread-137847] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:01:30.036 [DEBUG] [Thread-137847] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:01:30.037 [DEBUG] [Thread-137847] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T01:01:30.037 [DEBUG] [Thread-137847] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:01:30.057 [INFO] [Thread-137847] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:01:30.057 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T01:01:30.058 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:01:30.971 [DEBUG] [Thread-137847] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:01:30.971 [DEBUG] [Thread-137847] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:01:31.019 [DEBUG] [Thread-137847] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:01:31.019 [DEBUG] [Thread-137847] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:01:31.029 [DEBUG] [Thread-137847] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:01:31.038 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:01:31.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T01:01:31.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T01:01:31.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:01:31.057 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:01:31.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:01:31.065 [DEBUG] [Thread-137847] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:01:44.234 [DEBUG] [Thread-137849 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:01:45.184 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:01:45.186 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:01:58.795 [DEBUG] [Thread-137850 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:01:59.282 [DEBUG] [Thread-137851 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:02:01.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T01:02:01.078 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T01:02:01.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T01:02:01.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 1, 1, 40), 2.21, 86.91, 0.0, 20.34, 9.21, 1, 1, 0, 2, 0, 0),)
2026-01-01T01:02:01.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 01:01:40
2026-01-01T01:02:01.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T01:02:02.112 [DEBUG] [Thread-137852] [transport.py] [_log()] starting thread (client mode): 0xb955a350
2026-01-01T01:02:02.112 [DEBUG] [Thread-137852] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:02:02.134 [DEBUG] [Thread-137852] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T01:02:02.134 [INFO] [Thread-137852] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T01:02:02.138 [DEBUG] [Thread-137852] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:02:02.138 [DEBUG] [Thread-137852] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T01:02:02.138 [DEBUG] [Thread-137852] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:02:02.138 [DEBUG] [Thread-137852] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:02:02.138 [DEBUG] [Thread-137852] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:02:02.138 [DEBUG] [Thread-137852] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:02:02.138 [DEBUG] [Thread-137852] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:02:02.138 [DEBUG] [Thread-137852] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:02:02.138 [DEBUG] [Thread-137852] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:02:02.138 [DEBUG] [Thread-137852] [transport.py] [_log()] client lang: <none>
2026-01-01T01:02:02.138 [DEBUG] [Thread-137852] [transport.py] [_log()] server lang: <none>
2026-01-01T01:02:02.138 [DEBUG] [Thread-137852] [transport.py] [_log()] kex follows: False
2026-01-01T01:02:02.138 [DEBUG] [Thread-137852] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:02:02.138 [DEBUG] [Thread-137852] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:02:02.138 [DEBUG] [Thread-137852] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:02:02.138 [DEBUG] [Thread-137852] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:02:02.138 [DEBUG] [Thread-137852] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:02:02.138 [DEBUG] [Thread-137852] [transport.py] [_log()] Compression: none
2026-01-01T01:02:02.138 [DEBUG] [Thread-137852] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:02:02.153 [DEBUG] [Thread-137852] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:02:02.153 [DEBUG] [Thread-137852] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:02:02.153 [DEBUG] [Thread-137852] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T01:02:02.153 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T01:02:02.153 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:02:02.154 [DEBUG] [Thread-137852] [transport.py] [_log()] userauth is OK
2026-01-01T01:02:02.154 [DEBUG] [Thread-137852] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:02:02.154 [DEBUG] [Thread-137852] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:02:02.154 [DEBUG] [Thread-137852] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T01:02:02.154 [DEBUG] [Thread-137852] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:02:02.168 [INFO] [Thread-137852] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:02:02.168 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:02:02.821 [DEBUG] [Thread-137852] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:02:02.821 [DEBUG] [Thread-137852] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:02:02.821 [DEBUG] [Thread-137852] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T01:02:02.863 [DEBUG] [Thread-137852] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:02:02.863 [DEBUG] [Thread-137852] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:02:02.865 [DEBUG] [Thread-137852] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:02:02.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:02:02.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T01:02:02.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T01:02:02.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T01:02:02.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:02:02.883 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T01:02:02.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:02:02.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:02:02.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T01:02:02.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.959508 -999.00  +14.30  19.17     82  +11.40 1 2 1 2 1     0    0 2.97 -0.20 ...S. 15.8 19.2 195.8 20.6 15.5 -13.0 15.3 -13.6 15.2 -11.8 15.5 -12.2
2026-01-01T01:02:02.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T01:02:02.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T01:02:02.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.959508
2026-01-01T01:02:02.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T01:02:02.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T01:02:02.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T01:02:02.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T01:02:02.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T01:02:02.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T01:01:40', tmtdew=2.21, humidity=86.91, cloud=0.0, wind=20.34, temperature=9.21, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T23:01:41.491', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T01:02:02.884 [DEBUG] [Thread-137852] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:02:02.958 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T01:02:02.974 [DEBUG] [Thread-137855] [transport.py] [_log()] starting thread (client mode): 0xb9559e40
2026-01-01T01:02:02.974 [DEBUG] [Thread-137855] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:02:02.990 [DEBUG] [Thread-137855] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T01:02:02.990 [INFO] [Thread-137855] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T01:02:03.001 [DEBUG] [Thread-137855] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:02:03.001 [DEBUG] [Thread-137855] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T01:02:03.001 [DEBUG] [Thread-137855] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:02:03.001 [DEBUG] [Thread-137855] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:02:03.001 [DEBUG] [Thread-137855] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:02:03.002 [DEBUG] [Thread-137855] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:02:03.002 [DEBUG] [Thread-137855] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:02:03.002 [DEBUG] [Thread-137855] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:02:03.002 [DEBUG] [Thread-137855] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:02:03.002 [DEBUG] [Thread-137855] [transport.py] [_log()] client lang: <none>
2026-01-01T01:02:03.002 [DEBUG] [Thread-137855] [transport.py] [_log()] server lang: <none>
2026-01-01T01:02:03.002 [DEBUG] [Thread-137855] [transport.py] [_log()] kex follows: False
2026-01-01T01:02:03.002 [DEBUG] [Thread-137855] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:02:03.002 [DEBUG] [Thread-137855] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:02:03.002 [DEBUG] [Thread-137855] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:02:03.002 [DEBUG] [Thread-137855] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:02:03.002 [DEBUG] [Thread-137855] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:02:03.002 [DEBUG] [Thread-137855] [transport.py] [_log()] Compression: none
2026-01-01T01:02:03.002 [DEBUG] [Thread-137855] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:02:03.063 [DEBUG] [Thread-137855] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:02:03.063 [DEBUG] [Thread-137855] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:02:03.063 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T01:02:03.063 [DEBUG] [Thread-137855] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T01:02:03.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:02:03.130 [DEBUG] [Thread-137855] [transport.py] [_log()] userauth is OK
2026-01-01T01:02:03.130 [DEBUG] [Thread-137855] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:02:03.130 [DEBUG] [Thread-137855] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:02:03.130 [DEBUG] [Thread-137855] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T01:02:03.130 [DEBUG] [Thread-137855] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:02:03.153 [INFO] [Thread-137855] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:02:03.153 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T01:02:03.153 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:02:04.013 [DEBUG] [Thread-137855] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:02:04.013 [DEBUG] [Thread-137855] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:02:04.063 [DEBUG] [Thread-137855] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:02:04.063 [DEBUG] [Thread-137855] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:02:04.071 [DEBUG] [Thread-137855] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:02:04.079 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:02:04.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')
2026-01-01T01:02:04.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T01:02:04.099 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:02:04.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:02:04.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:02:04.111 [DEBUG] [Thread-137855] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:02:14.312 [DEBUG] [Thread-137857 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:02:29.352 [DEBUG] [Thread-137858 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:02:34.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T01:02:34.130 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T01:02:34.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T01:02:34.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 1, 2, 13), 2.22, 86.89, 0.0, 19.73, 9.27, 1, 1, 0, 2, 0, 0),)
2026-01-01T01:02:34.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 01:02:13
2026-01-01T01:02:34.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T01:02:35.115 [DEBUG] [Thread-137859] [transport.py] [_log()] starting thread (client mode): 0xb9579300
2026-01-01T01:02:35.115 [DEBUG] [Thread-137859] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:02:35.135 [DEBUG] [Thread-137859] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T01:02:35.135 [INFO] [Thread-137859] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T01:02:35.138 [DEBUG] [Thread-137859] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:02:35.139 [DEBUG] [Thread-137859] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T01:02:35.139 [DEBUG] [Thread-137859] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:02:35.139 [DEBUG] [Thread-137859] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:02:35.139 [DEBUG] [Thread-137859] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:02:35.139 [DEBUG] [Thread-137859] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:02:35.139 [DEBUG] [Thread-137859] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:02:35.139 [DEBUG] [Thread-137859] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:02:35.139 [DEBUG] [Thread-137859] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:02:35.139 [DEBUG] [Thread-137859] [transport.py] [_log()] client lang: <none>
2026-01-01T01:02:35.139 [DEBUG] [Thread-137859] [transport.py] [_log()] server lang: <none>
2026-01-01T01:02:35.139 [DEBUG] [Thread-137859] [transport.py] [_log()] kex follows: False
2026-01-01T01:02:35.139 [DEBUG] [Thread-137859] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:02:35.139 [DEBUG] [Thread-137859] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:02:35.139 [DEBUG] [Thread-137859] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:02:35.139 [DEBUG] [Thread-137859] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:02:35.139 [DEBUG] [Thread-137859] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:02:35.139 [DEBUG] [Thread-137859] [transport.py] [_log()] Compression: none
2026-01-01T01:02:35.139 [DEBUG] [Thread-137859] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:02:35.157 [DEBUG] [Thread-137859] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:02:35.157 [DEBUG] [Thread-137859] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:02:35.158 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T01:02:35.158 [DEBUG] [Thread-137859] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T01:02:35.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:02:35.160 [DEBUG] [Thread-137859] [transport.py] [_log()] userauth is OK
2026-01-01T01:02:35.160 [DEBUG] [Thread-137859] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:02:35.160 [DEBUG] [Thread-137859] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:02:35.160 [DEBUG] [Thread-137859] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T01:02:35.160 [DEBUG] [Thread-137859] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:02:35.185 [INFO] [Thread-137859] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:02:35.185 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:02:35.841 [DEBUG] [Thread-137859] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:02:35.841 [DEBUG] [Thread-137859] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:02:35.842 [DEBUG] [Thread-137859] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T01:02:35.882 [DEBUG] [Thread-137859] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:02:35.882 [DEBUG] [Thread-137859] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:02:35.886 [DEBUG] [Thread-137859] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:02:35.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:02:35.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T01:02:35.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T01:02:35.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T01:02:35.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:02:35.908 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T01:02:35.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:02:35.908 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:02:35.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T01:02:35.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.959855 -999.00  +14.30  17.04     82  +11.30 1 2 1 2 1     0    0 2.93 -0.37 ...S. 13.6 17.0 209.8 22.8 15.5 -13.1 15.3 -13.4 15.2 -12.1 15.5 -12.4
2026-01-01T01:02:35.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T01:02:35.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T01:02:35.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.959855
2026-01-01T01:02:35.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T01:02:35.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T01:02:35.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T01:02:35.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T01:02:35.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T01:02:35.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T01:02:13', tmtdew=2.22, humidity=86.89, cloud=0.0, wind=19.73, temperature=9.27, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T23:02:11.472', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T01:02:35.911 [DEBUG] [Thread-137859] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:02:35.993 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T01:02:36.005 [DEBUG] [Thread-137862] [transport.py] [_log()] starting thread (client mode): 0xb6ba20b0
2026-01-01T01:02:36.006 [DEBUG] [Thread-137862] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:02:36.025 [DEBUG] [Thread-137862] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T01:02:36.025 [INFO] [Thread-137862] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T01:02:36.032 [DEBUG] [Thread-137862] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:02:36.033 [DEBUG] [Thread-137862] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T01:02:36.033 [DEBUG] [Thread-137862] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:02:36.033 [DEBUG] [Thread-137862] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:02:36.033 [DEBUG] [Thread-137862] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:02:36.033 [DEBUG] [Thread-137862] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:02:36.033 [DEBUG] [Thread-137862] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:02:36.033 [DEBUG] [Thread-137862] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:02:36.033 [DEBUG] [Thread-137862] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:02:36.033 [DEBUG] [Thread-137862] [transport.py] [_log()] client lang: <none>
2026-01-01T01:02:36.034 [DEBUG] [Thread-137862] [transport.py] [_log()] server lang: <none>
2026-01-01T01:02:36.034 [DEBUG] [Thread-137862] [transport.py] [_log()] kex follows: False
2026-01-01T01:02:36.034 [DEBUG] [Thread-137862] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:02:36.034 [DEBUG] [Thread-137862] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:02:36.034 [DEBUG] [Thread-137862] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:02:36.034 [DEBUG] [Thread-137862] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:02:36.034 [DEBUG] [Thread-137862] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:02:36.034 [DEBUG] [Thread-137862] [transport.py] [_log()] Compression: none
2026-01-01T01:02:36.034 [DEBUG] [Thread-137862] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:02:36.092 [DEBUG] [Thread-137862] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:02:36.092 [DEBUG] [Thread-137862] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:02:36.092 [DEBUG] [Thread-137862] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T01:02:36.092 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T01:02:36.093 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:02:36.149 [DEBUG] [Thread-137862] [transport.py] [_log()] userauth is OK
2026-01-01T01:02:36.149 [DEBUG] [Thread-137862] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:02:36.150 [DEBUG] [Thread-137862] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:02:36.150 [DEBUG] [Thread-137862] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T01:02:36.150 [DEBUG] [Thread-137862] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:02:36.168 [INFO] [Thread-137862] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:02:36.169 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T01:02:36.169 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:02:37.014 [DEBUG] [Thread-137862] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:02:37.015 [DEBUG] [Thread-137862] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:02:37.063 [DEBUG] [Thread-137862] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:02:37.063 [DEBUG] [Thread-137862] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:02:37.072 [DEBUG] [Thread-137862] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:02:37.081 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:02:37.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T01:02:37.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T01:02:37.100 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:02:37.101 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:02:37.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:02:37.109 [DEBUG] [Thread-137862] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:02:44.379 [DEBUG] [Thread-137864 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:02:45.389 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:02:45.390 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:02:58.852 [DEBUG] [Thread-137865 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:02:59.432 [DEBUG] [Thread-137866 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:03:07.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T01:03:07.120 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T01:03:07.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T01:03:07.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 1, 2, 45), 2.22, 86.89, 0.0, 22.39, 9.27, 1, 1, 0, 2, 0, 0),)
2026-01-01T01:03:07.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 01:02:45
2026-01-01T01:03:07.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T01:03:08.116 [DEBUG] [Thread-137867] [transport.py] [_log()] starting thread (client mode): 0xb95588e0
2026-01-01T01:03:08.116 [DEBUG] [Thread-137867] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:03:08.137 [DEBUG] [Thread-137867] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T01:03:08.137 [INFO] [Thread-137867] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T01:03:08.140 [DEBUG] [Thread-137867] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:03:08.140 [DEBUG] [Thread-137867] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T01:03:08.140 [DEBUG] [Thread-137867] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:03:08.140 [DEBUG] [Thread-137867] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:03:08.140 [DEBUG] [Thread-137867] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:03:08.140 [DEBUG] [Thread-137867] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:03:08.141 [DEBUG] [Thread-137867] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:03:08.141 [DEBUG] [Thread-137867] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:03:08.141 [DEBUG] [Thread-137867] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:03:08.141 [DEBUG] [Thread-137867] [transport.py] [_log()] client lang: <none>
2026-01-01T01:03:08.141 [DEBUG] [Thread-137867] [transport.py] [_log()] server lang: <none>
2026-01-01T01:03:08.141 [DEBUG] [Thread-137867] [transport.py] [_log()] kex follows: False
2026-01-01T01:03:08.141 [DEBUG] [Thread-137867] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:03:08.141 [DEBUG] [Thread-137867] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:03:08.141 [DEBUG] [Thread-137867] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:03:08.141 [DEBUG] [Thread-137867] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:03:08.141 [DEBUG] [Thread-137867] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:03:08.141 [DEBUG] [Thread-137867] [transport.py] [_log()] Compression: none
2026-01-01T01:03:08.141 [DEBUG] [Thread-137867] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:03:08.160 [DEBUG] [Thread-137867] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:03:08.161 [DEBUG] [Thread-137867] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:03:08.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T01:03:08.162 [DEBUG] [Thread-137867] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T01:03:08.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:03:08.164 [DEBUG] [Thread-137867] [transport.py] [_log()] userauth is OK
2026-01-01T01:03:08.164 [DEBUG] [Thread-137867] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:03:08.164 [DEBUG] [Thread-137867] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:03:08.165 [DEBUG] [Thread-137867] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T01:03:08.165 [DEBUG] [Thread-137867] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:03:08.193 [INFO] [Thread-137867] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:03:08.195 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:03:08.822 [DEBUG] [Thread-137867] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:03:08.822 [DEBUG] [Thread-137867] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:03:08.822 [DEBUG] [Thread-137867] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T01:03:08.863 [DEBUG] [Thread-137867] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:03:08.863 [DEBUG] [Thread-137867] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:03:08.867 [DEBUG] [Thread-137867] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:03:08.879 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:03:08.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T01:03:08.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T01:03:08.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T01:03:08.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:03:08.891 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T01:03:08.891 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:03:08.891 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:03:08.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T01:03:08.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.960203 -999.00  +14.30  16.45     82  +11.40 1 2 1 2 1     0    0 2.95 -0.93 ..ES. 15.4 16.4 196.4 18.5 15.5 -13.1 15.3 -13.2 15.2 -11.9 15.6 -12.2
2026-01-01T01:03:08.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T01:03:08.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T01:03:08.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.960203
2026-01-01T01:03:08.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T01:03:08.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T01:03:08.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T01:03:08.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T01:03:08.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T01:03:08.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T01:02:45', tmtdew=2.22, humidity=86.89, cloud=0.0, wind=22.39, temperature=9.27, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T23:02:41.539', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T01:03:08.894 [DEBUG] [Thread-137867] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:03:08.977 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T01:03:08.989 [DEBUG] [Thread-137870] [transport.py] [_log()] starting thread (client mode): 0xb95f0d00
2026-01-01T01:03:08.990 [DEBUG] [Thread-137870] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:03:09.007 [DEBUG] [Thread-137870] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T01:03:09.007 [INFO] [Thread-137870] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T01:03:09.015 [DEBUG] [Thread-137870] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:03:09.015 [DEBUG] [Thread-137870] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T01:03:09.015 [DEBUG] [Thread-137870] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:03:09.015 [DEBUG] [Thread-137870] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:03:09.016 [DEBUG] [Thread-137870] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:03:09.016 [DEBUG] [Thread-137870] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:03:09.016 [DEBUG] [Thread-137870] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:03:09.016 [DEBUG] [Thread-137870] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:03:09.016 [DEBUG] [Thread-137870] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:03:09.016 [DEBUG] [Thread-137870] [transport.py] [_log()] client lang: <none>
2026-01-01T01:03:09.016 [DEBUG] [Thread-137870] [transport.py] [_log()] server lang: <none>
2026-01-01T01:03:09.016 [DEBUG] [Thread-137870] [transport.py] [_log()] kex follows: False
2026-01-01T01:03:09.016 [DEBUG] [Thread-137870] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:03:09.016 [DEBUG] [Thread-137870] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:03:09.016 [DEBUG] [Thread-137870] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:03:09.016 [DEBUG] [Thread-137870] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:03:09.016 [DEBUG] [Thread-137870] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:03:09.016 [DEBUG] [Thread-137870] [transport.py] [_log()] Compression: none
2026-01-01T01:03:09.016 [DEBUG] [Thread-137870] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:03:09.075 [DEBUG] [Thread-137870] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:03:09.076 [DEBUG] [Thread-137870] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:03:09.076 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T01:03:09.077 [DEBUG] [Thread-137870] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T01:03:09.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:03:09.133 [DEBUG] [Thread-137870] [transport.py] [_log()] userauth is OK
2026-01-01T01:03:09.134 [DEBUG] [Thread-137870] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:03:09.134 [DEBUG] [Thread-137870] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:03:09.134 [DEBUG] [Thread-137870] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T01:03:09.134 [DEBUG] [Thread-137870] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:03:09.155 [INFO] [Thread-137870] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:03:09.155 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T01:03:09.156 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:03:10.007 [DEBUG] [Thread-137870] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:03:10.007 [DEBUG] [Thread-137870] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:03:10.055 [DEBUG] [Thread-137870] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:03:10.055 [DEBUG] [Thread-137870] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:03:10.065 [DEBUG] [Thread-137870] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:03:10.074 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:03:10.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T01:03:10.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T01:03:10.092 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:03:10.092 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:03:10.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:03:10.100 [DEBUG] [Thread-137870] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:03:14.468 [DEBUG] [Thread-137872 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:03:29.511 [DEBUG] [Thread-137873 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:03:40.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T01:03:40.117 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T01:03:40.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T01:03:40.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 1, 3, 17), 2.22, 86.89, 0.0, 21.79, 9.27, 1, 1, 0, 2, 0, 0),)
2026-01-01T01:03:40.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 01:03:17
2026-01-01T01:03:40.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T01:03:41.100 [DEBUG] [Thread-137874] [transport.py] [_log()] starting thread (client mode): 0xb95f0940
2026-01-01T01:03:41.101 [DEBUG] [Thread-137874] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:03:41.117 [DEBUG] [Thread-137874] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T01:03:41.118 [INFO] [Thread-137874] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T01:03:41.120 [DEBUG] [Thread-137874] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:03:41.120 [DEBUG] [Thread-137874] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T01:03:41.121 [DEBUG] [Thread-137874] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:03:41.121 [DEBUG] [Thread-137874] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:03:41.121 [DEBUG] [Thread-137874] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:03:41.121 [DEBUG] [Thread-137874] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:03:41.121 [DEBUG] [Thread-137874] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:03:41.121 [DEBUG] [Thread-137874] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:03:41.121 [DEBUG] [Thread-137874] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:03:41.121 [DEBUG] [Thread-137874] [transport.py] [_log()] client lang: <none>
2026-01-01T01:03:41.121 [DEBUG] [Thread-137874] [transport.py] [_log()] server lang: <none>
2026-01-01T01:03:41.121 [DEBUG] [Thread-137874] [transport.py] [_log()] kex follows: False
2026-01-01T01:03:41.121 [DEBUG] [Thread-137874] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:03:41.121 [DEBUG] [Thread-137874] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:03:41.121 [DEBUG] [Thread-137874] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:03:41.121 [DEBUG] [Thread-137874] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:03:41.121 [DEBUG] [Thread-137874] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:03:41.121 [DEBUG] [Thread-137874] [transport.py] [_log()] Compression: none
2026-01-01T01:03:41.121 [DEBUG] [Thread-137874] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:03:41.140 [DEBUG] [Thread-137874] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:03:41.141 [DEBUG] [Thread-137874] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:03:41.142 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T01:03:41.142 [DEBUG] [Thread-137874] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T01:03:41.143 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:03:41.146 [DEBUG] [Thread-137874] [transport.py] [_log()] userauth is OK
2026-01-01T01:03:41.146 [DEBUG] [Thread-137874] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:03:41.147 [DEBUG] [Thread-137874] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:03:41.147 [DEBUG] [Thread-137874] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T01:03:41.147 [DEBUG] [Thread-137874] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:03:41.164 [INFO] [Thread-137874] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:03:41.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:03:41.820 [DEBUG] [Thread-137874] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:03:41.821 [DEBUG] [Thread-137874] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:03:41.822 [DEBUG] [Thread-137874] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T01:03:41.862 [DEBUG] [Thread-137874] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:03:41.862 [DEBUG] [Thread-137874] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:03:41.866 [DEBUG] [Thread-137874] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:03:41.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:03:41.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T01:03:41.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T01:03:41.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T01:03:41.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:03:41.889 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T01:03:41.889 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:03:41.889 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:03:41.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T01:03:41.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.960550 -999.00  +14.30  14.88     82  +11.30 1 2 1 2 1     0    0 2.98 -1.53 ..ES. 15.9 14.9 194.6 19.4 15.5 -13.2 15.3 -13.5 15.2 -12.1 15.5 -12.2
2026-01-01T01:03:41.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T01:03:41.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T01:03:41.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.960550
2026-01-01T01:03:41.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T01:03:41.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T01:03:41.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T01:03:41.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T01:03:41.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T01:03:41.892 [DEBUG] [Thread-137874] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:03:41.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T01:03:17', tmtdew=2.22, humidity=86.89, cloud=0.0, wind=21.79, temperature=9.27, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T23:03:11.520', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T01:03:41.975 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T01:03:41.988 [DEBUG] [Thread-137877] [transport.py] [_log()] starting thread (client mode): 0xb6b15270
2026-01-01T01:03:41.988 [DEBUG] [Thread-137877] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:03:42.003 [DEBUG] [Thread-137877] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T01:03:42.003 [INFO] [Thread-137877] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T01:03:42.010 [DEBUG] [Thread-137877] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:03:42.011 [DEBUG] [Thread-137877] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T01:03:42.011 [DEBUG] [Thread-137877] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:03:42.011 [DEBUG] [Thread-137877] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:03:42.011 [DEBUG] [Thread-137877] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:03:42.011 [DEBUG] [Thread-137877] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:03:42.011 [DEBUG] [Thread-137877] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:03:42.011 [DEBUG] [Thread-137877] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:03:42.012 [DEBUG] [Thread-137877] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:03:42.012 [DEBUG] [Thread-137877] [transport.py] [_log()] client lang: <none>
2026-01-01T01:03:42.012 [DEBUG] [Thread-137877] [transport.py] [_log()] server lang: <none>
2026-01-01T01:03:42.012 [DEBUG] [Thread-137877] [transport.py] [_log()] kex follows: False
2026-01-01T01:03:42.012 [DEBUG] [Thread-137877] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:03:42.012 [DEBUG] [Thread-137877] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:03:42.012 [DEBUG] [Thread-137877] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:03:42.012 [DEBUG] [Thread-137877] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:03:42.012 [DEBUG] [Thread-137877] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:03:42.012 [DEBUG] [Thread-137877] [transport.py] [_log()] Compression: none
2026-01-01T01:03:42.012 [DEBUG] [Thread-137877] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:03:42.070 [DEBUG] [Thread-137877] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:03:42.070 [DEBUG] [Thread-137877] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:03:42.071 [DEBUG] [Thread-137877] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T01:03:42.071 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T01:03:42.072 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:03:42.126 [DEBUG] [Thread-137877] [transport.py] [_log()] userauth is OK
2026-01-01T01:03:42.127 [DEBUG] [Thread-137877] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:03:42.127 [DEBUG] [Thread-137877] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:03:42.127 [DEBUG] [Thread-137877] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T01:03:42.127 [DEBUG] [Thread-137877] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:03:42.152 [INFO] [Thread-137877] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:03:42.152 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T01:03:42.153 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:03:42.959 [DEBUG] [Thread-137877] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:03:42.959 [DEBUG] [Thread-137877] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:03:43.007 [DEBUG] [Thread-137877] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:03:43.007 [DEBUG] [Thread-137877] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:03:43.016 [DEBUG] [Thread-137877] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:03:43.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:03:43.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T01:03:43.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T01:03:43.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:03:43.045 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:03:43.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:03:43.054 [DEBUG] [Thread-137877] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:03:44.544 [DEBUG] [Thread-137879 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:03:45.593 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:03:45.594 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:03:58.926 [DEBUG] [Thread-137880 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:03:59.589 [DEBUG] [Thread-137881 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:04:13.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T01:04:13.076 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T01:04:13.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T01:04:13.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 1, 3, 49), 2.21, 86.92, 0.0, 21.74, 9.3, 1, 1, 0, 2, 0, 0),)
2026-01-01T01:04:13.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 01:03:49
2026-01-01T01:04:13.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T01:04:14.073 [DEBUG] [Thread-137882] [transport.py] [_log()] starting thread (client mode): 0xb6b29390
2026-01-01T01:04:14.073 [DEBUG] [Thread-137882] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:04:14.096 [DEBUG] [Thread-137882] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T01:04:14.096 [INFO] [Thread-137882] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T01:04:14.100 [DEBUG] [Thread-137882] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:04:14.100 [DEBUG] [Thread-137882] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T01:04:14.100 [DEBUG] [Thread-137882] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:04:14.100 [DEBUG] [Thread-137882] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:04:14.100 [DEBUG] [Thread-137882] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:04:14.100 [DEBUG] [Thread-137882] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:04:14.100 [DEBUG] [Thread-137882] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:04:14.100 [DEBUG] [Thread-137882] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:04:14.100 [DEBUG] [Thread-137882] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:04:14.100 [DEBUG] [Thread-137882] [transport.py] [_log()] client lang: <none>
2026-01-01T01:04:14.100 [DEBUG] [Thread-137882] [transport.py] [_log()] server lang: <none>
2026-01-01T01:04:14.100 [DEBUG] [Thread-137882] [transport.py] [_log()] kex follows: False
2026-01-01T01:04:14.100 [DEBUG] [Thread-137882] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:04:14.100 [DEBUG] [Thread-137882] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:04:14.100 [DEBUG] [Thread-137882] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:04:14.100 [DEBUG] [Thread-137882] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:04:14.100 [DEBUG] [Thread-137882] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:04:14.100 [DEBUG] [Thread-137882] [transport.py] [_log()] Compression: none
2026-01-01T01:04:14.100 [DEBUG] [Thread-137882] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:04:14.119 [DEBUG] [Thread-137882] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:04:14.120 [DEBUG] [Thread-137882] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:04:14.120 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T01:04:14.120 [DEBUG] [Thread-137882] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T01:04:14.121 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:04:14.122 [DEBUG] [Thread-137882] [transport.py] [_log()] userauth is OK
2026-01-01T01:04:14.122 [DEBUG] [Thread-137882] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:04:14.123 [DEBUG] [Thread-137882] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:04:14.123 [DEBUG] [Thread-137882] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T01:04:14.123 [DEBUG] [Thread-137882] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:04:14.157 [INFO] [Thread-137882] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:04:14.158 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:04:14.618 [DEBUG] [Thread-137884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:04:14.777 [DEBUG] [Thread-137882] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:04:14.777 [DEBUG] [Thread-137882] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:04:14.777 [DEBUG] [Thread-137882] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T01:04:14.818 [DEBUG] [Thread-137882] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:04:14.819 [DEBUG] [Thread-137882] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:04:14.822 [DEBUG] [Thread-137882] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:04:14.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:04:14.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T01:04:14.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T01:04:14.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T01:04:14.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:04:14.851 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T01:04:14.851 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:04:14.851 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:04:14.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T01:04:14.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.960897 -999.00  +14.20  17.65     82  +11.30 1 2 1 2 1     0    0 2.90 -1.90 ..ES. 12.8 17.6 198.3 21.1 15.5 -13.2 15.3 -13.9 15.2 -12.4 15.5 -12.6
2026-01-01T01:04:14.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T01:04:14.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T01:04:14.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.960897
2026-01-01T01:04:14.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T01:04:14.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T01:04:14.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T01:04:14.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T01:04:14.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T01:04:14.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T01:03:49', tmtdew=2.21, humidity=86.92, cloud=0.0, wind=21.74, temperature=9.3, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T23:03:41.501', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T01:04:14.854 [DEBUG] [Thread-137882] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:04:14.953 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T01:04:14.967 [DEBUG] [Thread-137886] [transport.py] [_log()] starting thread (client mode): 0xb955ae90
2026-01-01T01:04:14.967 [DEBUG] [Thread-137886] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:04:14.983 [DEBUG] [Thread-137886] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T01:04:14.983 [INFO] [Thread-137886] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T01:04:14.990 [DEBUG] [Thread-137886] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:04:14.991 [DEBUG] [Thread-137886] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T01:04:14.991 [DEBUG] [Thread-137886] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:04:14.991 [DEBUG] [Thread-137886] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:04:14.991 [DEBUG] [Thread-137886] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:04:14.991 [DEBUG] [Thread-137886] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:04:14.991 [DEBUG] [Thread-137886] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:04:14.991 [DEBUG] [Thread-137886] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:04:14.991 [DEBUG] [Thread-137886] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:04:14.991 [DEBUG] [Thread-137886] [transport.py] [_log()] client lang: <none>
2026-01-01T01:04:14.991 [DEBUG] [Thread-137886] [transport.py] [_log()] server lang: <none>
2026-01-01T01:04:14.991 [DEBUG] [Thread-137886] [transport.py] [_log()] kex follows: False
2026-01-01T01:04:14.991 [DEBUG] [Thread-137886] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:04:14.991 [DEBUG] [Thread-137886] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:04:14.991 [DEBUG] [Thread-137886] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:04:14.992 [DEBUG] [Thread-137886] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:04:14.992 [DEBUG] [Thread-137886] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:04:14.992 [DEBUG] [Thread-137886] [transport.py] [_log()] Compression: none
2026-01-01T01:04:14.992 [DEBUG] [Thread-137886] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:04:15.051 [DEBUG] [Thread-137886] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:04:15.052 [DEBUG] [Thread-137886] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:04:15.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T01:04:15.053 [DEBUG] [Thread-137886] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T01:04:15.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:04:15.111 [DEBUG] [Thread-137886] [transport.py] [_log()] userauth is OK
2026-01-01T01:04:15.111 [DEBUG] [Thread-137886] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:04:15.111 [DEBUG] [Thread-137886] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:04:15.111 [DEBUG] [Thread-137886] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T01:04:15.111 [DEBUG] [Thread-137886] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:04:15.130 [INFO] [Thread-137886] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:04:15.131 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T01:04:15.131 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:04:15.927 [DEBUG] [Thread-137886] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:04:15.927 [DEBUG] [Thread-137886] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:04:15.975 [DEBUG] [Thread-137886] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:04:15.975 [DEBUG] [Thread-137886] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:04:15.984 [DEBUG] [Thread-137886] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:04:15.992 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:04:15.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T01:04:16.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T01:04:16.010 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:04:16.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:04:16.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:04:16.019 [DEBUG] [Thread-137886] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:04:29.656 [DEBUG] [Thread-137888 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:04:44.711 [DEBUG] [Thread-137889 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:04:45.798 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:04:45.799 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:04:46.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T01:04:46.033 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T01:04:46.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T01:04:46.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 1, 4, 21), 2.21, 86.94, 0.0, 22.02, 9.3, 1, 1, 0, 2, 0, 0),)
2026-01-01T01:04:46.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 01:04:21
2026-01-01T01:04:46.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T01:04:47.033 [DEBUG] [Thread-137890] [transport.py] [_log()] starting thread (client mode): 0xb6b2b9a0
2026-01-01T01:04:47.033 [DEBUG] [Thread-137890] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:04:47.060 [DEBUG] [Thread-137890] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T01:04:47.060 [INFO] [Thread-137890] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T01:04:47.061 [DEBUG] [Thread-137890] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:04:47.061 [DEBUG] [Thread-137890] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T01:04:47.061 [DEBUG] [Thread-137890] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:04:47.061 [DEBUG] [Thread-137890] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:04:47.061 [DEBUG] [Thread-137890] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:04:47.061 [DEBUG] [Thread-137890] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:04:47.061 [DEBUG] [Thread-137890] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:04:47.061 [DEBUG] [Thread-137890] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:04:47.061 [DEBUG] [Thread-137890] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:04:47.061 [DEBUG] [Thread-137890] [transport.py] [_log()] client lang: <none>
2026-01-01T01:04:47.061 [DEBUG] [Thread-137890] [transport.py] [_log()] server lang: <none>
2026-01-01T01:04:47.061 [DEBUG] [Thread-137890] [transport.py] [_log()] kex follows: False
2026-01-01T01:04:47.061 [DEBUG] [Thread-137890] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:04:47.061 [DEBUG] [Thread-137890] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:04:47.061 [DEBUG] [Thread-137890] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:04:47.061 [DEBUG] [Thread-137890] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:04:47.061 [DEBUG] [Thread-137890] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:04:47.062 [DEBUG] [Thread-137890] [transport.py] [_log()] Compression: none
2026-01-01T01:04:47.062 [DEBUG] [Thread-137890] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:04:47.070 [DEBUG] [Thread-137890] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:04:47.071 [DEBUG] [Thread-137890] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:04:47.072 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T01:04:47.072 [DEBUG] [Thread-137890] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T01:04:47.073 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:04:47.074 [DEBUG] [Thread-137890] [transport.py] [_log()] userauth is OK
2026-01-01T01:04:47.074 [DEBUG] [Thread-137890] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:04:47.074 [DEBUG] [Thread-137890] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:04:47.075 [DEBUG] [Thread-137890] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T01:04:47.075 [DEBUG] [Thread-137890] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:04:47.099 [INFO] [Thread-137890] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:04:47.100 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:04:47.730 [DEBUG] [Thread-137890] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:04:47.730 [DEBUG] [Thread-137890] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:04:47.731 [DEBUG] [Thread-137890] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T01:04:47.771 [DEBUG] [Thread-137890] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:04:47.771 [DEBUG] [Thread-137890] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:04:47.774 [DEBUG] [Thread-137890] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:04:47.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:04:47.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T01:04:47.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T01:04:47.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T01:04:47.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:04:47.794 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T01:04:47.794 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:04:47.794 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:04:47.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T01:04:47.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.961592 -999.00  +14.30  11.86     82  +11.30 1 2 1 2 1     0    0 2.91 -2.54 Z.ES. 9.7 11.9 209.1 18.2 15.5 -13.4 15.3 -13.3 15.2 -12.5 15.5 -12.6
2026-01-01T01:04:47.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T01:04:47.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T01:04:47.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.961592
2026-01-01T01:04:47.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T01:04:47.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T01:04:47.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T01:04:47.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T01:04:47.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T01:04:47.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T01:04:21', tmtdew=2.21, humidity=86.94, cloud=0.0, wind=22.02, temperature=9.3, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T23:04:41.549', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T01:04:47.797 [DEBUG] [Thread-137890] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:04:47.884 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T01:04:47.896 [DEBUG] [Thread-137893] [transport.py] [_log()] starting thread (client mode): 0xb6b153c0
2026-01-01T01:04:47.896 [DEBUG] [Thread-137893] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:04:47.912 [DEBUG] [Thread-137893] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T01:04:47.912 [INFO] [Thread-137893] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T01:04:47.920 [DEBUG] [Thread-137893] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:04:47.920 [DEBUG] [Thread-137893] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T01:04:47.920 [DEBUG] [Thread-137893] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:04:47.920 [DEBUG] [Thread-137893] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:04:47.920 [DEBUG] [Thread-137893] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:04:47.920 [DEBUG] [Thread-137893] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:04:47.920 [DEBUG] [Thread-137893] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:04:47.920 [DEBUG] [Thread-137893] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:04:47.920 [DEBUG] [Thread-137893] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:04:47.920 [DEBUG] [Thread-137893] [transport.py] [_log()] client lang: <none>
2026-01-01T01:04:47.920 [DEBUG] [Thread-137893] [transport.py] [_log()] server lang: <none>
2026-01-01T01:04:47.920 [DEBUG] [Thread-137893] [transport.py] [_log()] kex follows: False
2026-01-01T01:04:47.920 [DEBUG] [Thread-137893] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:04:47.920 [DEBUG] [Thread-137893] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:04:47.921 [DEBUG] [Thread-137893] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:04:47.921 [DEBUG] [Thread-137893] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:04:47.921 [DEBUG] [Thread-137893] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:04:47.921 [DEBUG] [Thread-137893] [transport.py] [_log()] Compression: none
2026-01-01T01:04:47.921 [DEBUG] [Thread-137893] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:04:47.980 [DEBUG] [Thread-137893] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:04:47.980 [DEBUG] [Thread-137893] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:04:47.981 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T01:04:47.981 [DEBUG] [Thread-137893] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T01:04:47.982 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:04:48.039 [DEBUG] [Thread-137893] [transport.py] [_log()] userauth is OK
2026-01-01T01:04:48.039 [DEBUG] [Thread-137893] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:04:48.039 [DEBUG] [Thread-137893] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:04:48.040 [DEBUG] [Thread-137893] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T01:04:48.040 [DEBUG] [Thread-137893] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:04:48.068 [INFO] [Thread-137893] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:04:48.069 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T01:04:48.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:04:48.919 [DEBUG] [Thread-137893] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:04:48.920 [DEBUG] [Thread-137893] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:04:48.967 [DEBUG] [Thread-137893] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:04:48.967 [DEBUG] [Thread-137893] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:04:48.977 [DEBUG] [Thread-137893] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:04:48.986 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:04:48.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T01:04:48.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T01:04:49.005 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:04:49.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:04:49.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:04:49.014 [DEBUG] [Thread-137893] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:04:59.005 [DEBUG] [Thread-137895 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:04:59.746 [DEBUG] [Thread-137896 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:05:14.798 [DEBUG] [Thread-137897 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:05:19.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T01:05:19.036 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T01:05:19.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T01:05:19.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 1, 4, 53), 2.22, 86.9, 0.0, 19.44, 9.3, 1, 1, 0, 2, 0, 0),)
2026-01-01T01:05:19.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 01:04:53
2026-01-01T01:05:19.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T01:05:20.079 [DEBUG] [Thread-137898] [transport.py] [_log()] starting thread (client mode): 0xb9579ff0
2026-01-01T01:05:20.079 [DEBUG] [Thread-137898] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:05:20.100 [DEBUG] [Thread-137898] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T01:05:20.100 [INFO] [Thread-137898] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T01:05:20.104 [DEBUG] [Thread-137898] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:05:20.104 [DEBUG] [Thread-137898] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T01:05:20.104 [DEBUG] [Thread-137898] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:05:20.104 [DEBUG] [Thread-137898] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:05:20.104 [DEBUG] [Thread-137898] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:05:20.104 [DEBUG] [Thread-137898] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:05:20.104 [DEBUG] [Thread-137898] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:05:20.104 [DEBUG] [Thread-137898] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:05:20.104 [DEBUG] [Thread-137898] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:05:20.104 [DEBUG] [Thread-137898] [transport.py] [_log()] client lang: <none>
2026-01-01T01:05:20.104 [DEBUG] [Thread-137898] [transport.py] [_log()] server lang: <none>
2026-01-01T01:05:20.104 [DEBUG] [Thread-137898] [transport.py] [_log()] kex follows: False
2026-01-01T01:05:20.104 [DEBUG] [Thread-137898] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:05:20.104 [DEBUG] [Thread-137898] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:05:20.104 [DEBUG] [Thread-137898] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:05:20.104 [DEBUG] [Thread-137898] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:05:20.104 [DEBUG] [Thread-137898] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:05:20.104 [DEBUG] [Thread-137898] [transport.py] [_log()] Compression: none
2026-01-01T01:05:20.104 [DEBUG] [Thread-137898] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:05:20.119 [DEBUG] [Thread-137898] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:05:20.119 [DEBUG] [Thread-137898] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:05:20.119 [DEBUG] [Thread-137898] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T01:05:20.120 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T01:05:20.120 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:05:20.120 [DEBUG] [Thread-137898] [transport.py] [_log()] userauth is OK
2026-01-01T01:05:20.121 [DEBUG] [Thread-137898] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:05:20.121 [DEBUG] [Thread-137898] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:05:20.121 [DEBUG] [Thread-137898] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T01:05:20.121 [DEBUG] [Thread-137898] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:05:20.138 [INFO] [Thread-137898] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:05:20.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:05:23.741 [DEBUG] [Thread-137898] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:05:23.741 [DEBUG] [Thread-137898] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:05:23.741 [DEBUG] [Thread-137898] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T01:05:23.782 [DEBUG] [Thread-137898] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:05:23.782 [DEBUG] [Thread-137898] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:05:23.786 [DEBUG] [Thread-137898] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:05:23.799 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:05:23.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T01:05:23.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T01:05:23.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T01:05:23.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:05:23.848 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T01:05:23.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:05:23.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:05:23.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T01:05:23.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 
2026-01-01T01:05:23.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T01:05:23.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T01:05:23.849 [WARNING] [poll_weather_worker] [driver.py] [poll_weather_state()] Unable to get atlas cloud data: list index out of range
2026-01-01T01:05:23.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T01:04:53', tmtdew=2.22, humidity=86.9, cloud=0.0, wind=19.44, temperature=9.3, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp=None, atlas_cloud=None, atlas_rain=None, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T01:05:23.850 [DEBUG] [Thread-137898] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:05:23.934 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T01:05:23.948 [DEBUG] [Thread-137901] [transport.py] [_log()] starting thread (client mode): 0xb9578910
2026-01-01T01:05:23.948 [DEBUG] [Thread-137901] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:05:23.963 [DEBUG] [Thread-137901] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T01:05:23.963 [INFO] [Thread-137901] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T01:05:23.970 [DEBUG] [Thread-137901] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:05:23.970 [DEBUG] [Thread-137901] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T01:05:23.970 [DEBUG] [Thread-137901] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:05:23.970 [DEBUG] [Thread-137901] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:05:23.970 [DEBUG] [Thread-137901] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:05:23.970 [DEBUG] [Thread-137901] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:05:23.970 [DEBUG] [Thread-137901] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:05:23.971 [DEBUG] [Thread-137901] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:05:23.971 [DEBUG] [Thread-137901] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:05:23.971 [DEBUG] [Thread-137901] [transport.py] [_log()] client lang: <none>
2026-01-01T01:05:23.971 [DEBUG] [Thread-137901] [transport.py] [_log()] server lang: <none>
2026-01-01T01:05:23.971 [DEBUG] [Thread-137901] [transport.py] [_log()] kex follows: False
2026-01-01T01:05:23.971 [DEBUG] [Thread-137901] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:05:23.971 [DEBUG] [Thread-137901] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:05:23.971 [DEBUG] [Thread-137901] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:05:23.971 [DEBUG] [Thread-137901] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:05:23.971 [DEBUG] [Thread-137901] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:05:23.971 [DEBUG] [Thread-137901] [transport.py] [_log()] Compression: none
2026-01-01T01:05:23.971 [DEBUG] [Thread-137901] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:05:24.031 [DEBUG] [Thread-137901] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:05:24.031 [DEBUG] [Thread-137901] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:05:24.032 [DEBUG] [Thread-137901] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T01:05:24.032 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T01:05:24.032 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:05:24.088 [DEBUG] [Thread-137901] [transport.py] [_log()] userauth is OK
2026-01-01T01:05:24.088 [DEBUG] [Thread-137901] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:05:24.088 [DEBUG] [Thread-137901] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:05:24.088 [DEBUG] [Thread-137901] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T01:05:24.088 [DEBUG] [Thread-137901] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:05:24.108 [INFO] [Thread-137901] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:05:24.109 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T01:05:24.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:05:24.981 [DEBUG] [Thread-137901] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:05:24.981 [DEBUG] [Thread-137901] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:05:25.031 [DEBUG] [Thread-137901] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:05:25.031 [DEBUG] [Thread-137901] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:05:25.047 [DEBUG] [Thread-137901] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:05:25.058 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:05:25.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T01:05:25.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T01:05:25.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:05:25.077 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:05:25.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:05:25.085 [DEBUG] [Thread-137901] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:05:29.829 [DEBUG] [Thread-137903 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:05:44.881 [DEBUG] [Thread-137904 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:05:46.003 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:05:46.005 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:05:55.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T01:05:55.108 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T01:05:55.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T01:05:55.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 1, 5, 25), 2.23, 86.85, 0.0, 17.91, 9.27, 1, 1, 0, 2, 0, 0),)
2026-01-01T01:05:55.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 01:05:25
2026-01-01T01:05:55.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T01:05:56.107 [DEBUG] [Thread-137905] [transport.py] [_log()] starting thread (client mode): 0xb6b2b100
2026-01-01T01:05:56.107 [DEBUG] [Thread-137905] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:05:56.126 [DEBUG] [Thread-137905] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T01:05:56.126 [INFO] [Thread-137905] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T01:05:56.129 [DEBUG] [Thread-137905] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:05:56.129 [DEBUG] [Thread-137905] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T01:05:56.129 [DEBUG] [Thread-137905] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:05:56.129 [DEBUG] [Thread-137905] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:05:56.129 [DEBUG] [Thread-137905] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:05:56.129 [DEBUG] [Thread-137905] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:05:56.129 [DEBUG] [Thread-137905] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:05:56.129 [DEBUG] [Thread-137905] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:05:56.129 [DEBUG] [Thread-137905] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:05:56.129 [DEBUG] [Thread-137905] [transport.py] [_log()] client lang: <none>
2026-01-01T01:05:56.129 [DEBUG] [Thread-137905] [transport.py] [_log()] server lang: <none>
2026-01-01T01:05:56.129 [DEBUG] [Thread-137905] [transport.py] [_log()] kex follows: False
2026-01-01T01:05:56.129 [DEBUG] [Thread-137905] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:05:56.129 [DEBUG] [Thread-137905] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:05:56.129 [DEBUG] [Thread-137905] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:05:56.129 [DEBUG] [Thread-137905] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:05:56.129 [DEBUG] [Thread-137905] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:05:56.129 [DEBUG] [Thread-137905] [transport.py] [_log()] Compression: none
2026-01-01T01:05:56.129 [DEBUG] [Thread-137905] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:05:56.144 [DEBUG] [Thread-137905] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:05:56.144 [DEBUG] [Thread-137905] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:05:56.144 [DEBUG] [Thread-137905] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T01:05:56.144 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T01:05:56.144 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:05:56.147 [DEBUG] [Thread-137905] [transport.py] [_log()] userauth is OK
2026-01-01T01:05:56.147 [DEBUG] [Thread-137905] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:05:56.147 [DEBUG] [Thread-137905] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:05:56.147 [DEBUG] [Thread-137905] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T01:05:56.148 [DEBUG] [Thread-137905] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:05:56.163 [INFO] [Thread-137905] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:05:56.163 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:05:56.803 [DEBUG] [Thread-137905] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:05:56.803 [DEBUG] [Thread-137905] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:05:56.803 [DEBUG] [Thread-137905] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T01:05:56.845 [DEBUG] [Thread-137905] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:05:56.845 [DEBUG] [Thread-137905] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:05:56.847 [DEBUG] [Thread-137905] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:05:56.858 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:05:56.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T01:05:56.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T01:05:56.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T01:05:56.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:05:56.864 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T01:05:56.864 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:05:56.864 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:05:56.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T01:05:56.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.961939 -999.00  +14.30  12.54     82  +11.30 1 2 1 2 1     0    0 2.91 -2.76 Z.ES. 11.2 12.5 208.3 20.6 15.5 -13.3 15.3 -13.5 15.2 -12.5 15.5 -12.8
2026-01-01T01:05:56.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T01:05:56.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T01:05:56.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.961939
2026-01-01T01:05:56.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T01:05:56.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T01:05:56.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T01:05:56.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T01:05:56.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T01:05:56.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T01:05:25', tmtdew=2.23, humidity=86.85, cloud=0.0, wind=17.91, temperature=9.27, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T23:05:11.530', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T01:05:56.866 [DEBUG] [Thread-137905] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:05:56.940 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T01:05:56.953 [DEBUG] [Thread-137908] [transport.py] [_log()] starting thread (client mode): 0xb9578910
2026-01-01T01:05:56.953 [DEBUG] [Thread-137908] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:05:56.972 [DEBUG] [Thread-137908] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T01:05:56.972 [INFO] [Thread-137908] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T01:05:56.980 [DEBUG] [Thread-137908] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:05:56.980 [DEBUG] [Thread-137908] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T01:05:56.980 [DEBUG] [Thread-137908] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:05:56.980 [DEBUG] [Thread-137908] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:05:56.980 [DEBUG] [Thread-137908] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:05:56.980 [DEBUG] [Thread-137908] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:05:56.980 [DEBUG] [Thread-137908] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:05:56.980 [DEBUG] [Thread-137908] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:05:56.980 [DEBUG] [Thread-137908] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:05:56.980 [DEBUG] [Thread-137908] [transport.py] [_log()] client lang: <none>
2026-01-01T01:05:56.980 [DEBUG] [Thread-137908] [transport.py] [_log()] server lang: <none>
2026-01-01T01:05:56.980 [DEBUG] [Thread-137908] [transport.py] [_log()] kex follows: False
2026-01-01T01:05:56.980 [DEBUG] [Thread-137908] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:05:56.980 [DEBUG] [Thread-137908] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:05:56.980 [DEBUG] [Thread-137908] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:05:56.980 [DEBUG] [Thread-137908] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:05:56.980 [DEBUG] [Thread-137908] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:05:56.980 [DEBUG] [Thread-137908] [transport.py] [_log()] Compression: none
2026-01-01T01:05:56.980 [DEBUG] [Thread-137908] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:05:57.038 [DEBUG] [Thread-137908] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:05:57.038 [DEBUG] [Thread-137908] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:05:57.039 [DEBUG] [Thread-137908] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T01:05:57.039 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T01:05:57.039 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:05:57.096 [DEBUG] [Thread-137908] [transport.py] [_log()] userauth is OK
2026-01-01T01:05:57.096 [DEBUG] [Thread-137908] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:05:57.096 [DEBUG] [Thread-137908] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:05:57.096 [DEBUG] [Thread-137908] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T01:05:57.096 [DEBUG] [Thread-137908] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:05:57.114 [INFO] [Thread-137908] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:05:57.114 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T01:05:57.114 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:05:57.945 [DEBUG] [Thread-137908] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:05:57.945 [DEBUG] [Thread-137908] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:05:57.994 [DEBUG] [Thread-137908] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:05:57.994 [DEBUG] [Thread-137908] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:05:58.002 [DEBUG] [Thread-137908] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:05:58.010 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:05:58.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T01:05:58.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T01:05:58.026 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:05:58.026 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:05:58.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:05:58.034 [DEBUG] [Thread-137908] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:05:59.079 [DEBUG] [Thread-137910 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:05:59.913 [DEBUG] [Thread-137911 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:06:14.964 [DEBUG] [Thread-137912 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:06:28.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T01:06:28.053 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T01:06:28.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T01:06:28.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 1, 5, 57), 2.23, 86.84, 0.0, 17.75, 9.27, 1, 1, 0, 2, 0, 0),)
2026-01-01T01:06:28.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 01:05:57
2026-01-01T01:06:28.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T01:06:29.066 [DEBUG] [Thread-137913] [transport.py] [_log()] starting thread (client mode): 0xb6b61720
2026-01-01T01:06:29.066 [DEBUG] [Thread-137913] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:06:29.088 [DEBUG] [Thread-137913] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T01:06:29.088 [INFO] [Thread-137913] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T01:06:29.091 [DEBUG] [Thread-137913] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:06:29.091 [DEBUG] [Thread-137913] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T01:06:29.091 [DEBUG] [Thread-137913] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:06:29.091 [DEBUG] [Thread-137913] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:06:29.091 [DEBUG] [Thread-137913] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:06:29.091 [DEBUG] [Thread-137913] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:06:29.091 [DEBUG] [Thread-137913] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:06:29.091 [DEBUG] [Thread-137913] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:06:29.091 [DEBUG] [Thread-137913] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:06:29.091 [DEBUG] [Thread-137913] [transport.py] [_log()] client lang: <none>
2026-01-01T01:06:29.091 [DEBUG] [Thread-137913] [transport.py] [_log()] server lang: <none>
2026-01-01T01:06:29.092 [DEBUG] [Thread-137913] [transport.py] [_log()] kex follows: False
2026-01-01T01:06:29.092 [DEBUG] [Thread-137913] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:06:29.092 [DEBUG] [Thread-137913] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:06:29.092 [DEBUG] [Thread-137913] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:06:29.092 [DEBUG] [Thread-137913] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:06:29.092 [DEBUG] [Thread-137913] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:06:29.092 [DEBUG] [Thread-137913] [transport.py] [_log()] Compression: none
2026-01-01T01:06:29.092 [DEBUG] [Thread-137913] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:06:29.109 [DEBUG] [Thread-137913] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:06:29.110 [DEBUG] [Thread-137913] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:06:29.110 [DEBUG] [Thread-137913] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T01:06:29.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T01:06:29.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:06:29.112 [DEBUG] [Thread-137913] [transport.py] [_log()] userauth is OK
2026-01-01T01:06:29.113 [DEBUG] [Thread-137913] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:06:29.113 [DEBUG] [Thread-137913] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:06:29.113 [DEBUG] [Thread-137913] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T01:06:29.113 [DEBUG] [Thread-137913] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:06:29.129 [INFO] [Thread-137913] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:06:29.129 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:06:29.888 [DEBUG] [Thread-137913] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:06:29.888 [DEBUG] [Thread-137913] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:06:29.888 [DEBUG] [Thread-137913] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T01:06:29.929 [DEBUG] [Thread-137913] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:06:29.929 [DEBUG] [Thread-137913] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:06:29.931 [DEBUG] [Thread-137913] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:06:29.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:06:29.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T01:06:29.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T01:06:29.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T01:06:29.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:06:29.948 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T01:06:29.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:06:29.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:06:29.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T01:06:29.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.962286 -999.00  +14.30  10.13     82  +11.30 1 2 1 2 1     0    0 2.90 -2.78 ..... 6.9 10.1 198.2 15.3 15.5 -13.5 15.3 -13.9 15.2 -12.7 15.5 -12.9
2026-01-01T01:06:29.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T01:06:29.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T01:06:29.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.962286
2026-01-01T01:06:29.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T01:06:29.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T01:06:29.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T01:06:29.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T01:06:29.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T01:06:29.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T01:05:57', tmtdew=2.23, humidity=86.84, cloud=0.0, wind=17.75, temperature=9.27, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T23:05:41.510', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T01:06:29.949 [DEBUG] [Thread-137913] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:06:29.997 [DEBUG] [Thread-137916 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:06:30.024 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T01:06:30.035 [DEBUG] [Thread-137917] [transport.py] [_log()] starting thread (client mode): 0xbbfcdcc0
2026-01-01T01:06:30.035 [DEBUG] [Thread-137917] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:06:30.051 [DEBUG] [Thread-137917] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T01:06:30.051 [INFO] [Thread-137917] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T01:06:30.058 [DEBUG] [Thread-137917] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:06:30.059 [DEBUG] [Thread-137917] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T01:06:30.059 [DEBUG] [Thread-137917] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:06:30.059 [DEBUG] [Thread-137917] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:06:30.059 [DEBUG] [Thread-137917] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:06:30.059 [DEBUG] [Thread-137917] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:06:30.059 [DEBUG] [Thread-137917] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:06:30.059 [DEBUG] [Thread-137917] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:06:30.059 [DEBUG] [Thread-137917] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:06:30.059 [DEBUG] [Thread-137917] [transport.py] [_log()] client lang: <none>
2026-01-01T01:06:30.059 [DEBUG] [Thread-137917] [transport.py] [_log()] server lang: <none>
2026-01-01T01:06:30.059 [DEBUG] [Thread-137917] [transport.py] [_log()] kex follows: False
2026-01-01T01:06:30.059 [DEBUG] [Thread-137917] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:06:30.059 [DEBUG] [Thread-137917] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:06:30.059 [DEBUG] [Thread-137917] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:06:30.059 [DEBUG] [Thread-137917] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:06:30.059 [DEBUG] [Thread-137917] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:06:30.059 [DEBUG] [Thread-137917] [transport.py] [_log()] Compression: none
2026-01-01T01:06:30.059 [DEBUG] [Thread-137917] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:06:30.115 [DEBUG] [Thread-137917] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:06:30.115 [DEBUG] [Thread-137917] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:06:30.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T01:06:30.115 [DEBUG] [Thread-137917] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T01:06:30.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:06:30.172 [DEBUG] [Thread-137917] [transport.py] [_log()] userauth is OK
2026-01-01T01:06:30.172 [DEBUG] [Thread-137917] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:06:30.172 [DEBUG] [Thread-137917] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:06:30.172 [DEBUG] [Thread-137917] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T01:06:30.172 [DEBUG] [Thread-137917] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:06:30.188 [INFO] [Thread-137917] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:06:30.188 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T01:06:30.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:06:31.013 [DEBUG] [Thread-137917] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:06:31.014 [DEBUG] [Thread-137917] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:06:31.062 [DEBUG] [Thread-137917] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:06:31.062 [DEBUG] [Thread-137917] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:06:31.070 [DEBUG] [Thread-137917] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:06:31.078 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:06:31.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T01:06:31.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T01:06:31.093 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:06:31.093 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:06:31.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:06:31.101 [DEBUG] [Thread-137917] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:06:45.031 [DEBUG] [Thread-137919 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:06:46.209 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:06:46.210 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:06:59.156 [DEBUG] [Thread-137920 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:07:00.071 [DEBUG] [Thread-137921 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:07:01.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T01:07:01.124 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T01:07:01.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T01:07:01.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 1, 6, 29), 3.34, 80.25, 0.0, 18.49, 14.12, 0, 1, 0, 2, 0, 0),)
2026-01-01T01:07:01.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 01:06:29
2026-01-01T01:07:01.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T01:07:02.127 [DEBUG] [Thread-137922] [transport.py] [_log()] starting thread (client mode): 0xb6b2bbb0
2026-01-01T01:07:02.127 [DEBUG] [Thread-137922] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:07:02.147 [DEBUG] [Thread-137922] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T01:07:02.147 [INFO] [Thread-137922] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T01:07:02.150 [DEBUG] [Thread-137922] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:07:02.150 [DEBUG] [Thread-137922] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T01:07:02.150 [DEBUG] [Thread-137922] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:07:02.150 [DEBUG] [Thread-137922] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:07:02.150 [DEBUG] [Thread-137922] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:07:02.150 [DEBUG] [Thread-137922] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:07:02.150 [DEBUG] [Thread-137922] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:07:02.150 [DEBUG] [Thread-137922] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:07:02.150 [DEBUG] [Thread-137922] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:07:02.150 [DEBUG] [Thread-137922] [transport.py] [_log()] client lang: <none>
2026-01-01T01:07:02.150 [DEBUG] [Thread-137922] [transport.py] [_log()] server lang: <none>
2026-01-01T01:07:02.150 [DEBUG] [Thread-137922] [transport.py] [_log()] kex follows: False
2026-01-01T01:07:02.151 [DEBUG] [Thread-137922] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:07:02.151 [DEBUG] [Thread-137922] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:07:02.151 [DEBUG] [Thread-137922] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:07:02.151 [DEBUG] [Thread-137922] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:07:02.151 [DEBUG] [Thread-137922] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:07:02.151 [DEBUG] [Thread-137922] [transport.py] [_log()] Compression: none
2026-01-01T01:07:02.151 [DEBUG] [Thread-137922] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:07:02.166 [DEBUG] [Thread-137922] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:07:02.167 [DEBUG] [Thread-137922] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:07:02.167 [DEBUG] [Thread-137922] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T01:07:02.167 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T01:07:02.167 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:07:02.168 [DEBUG] [Thread-137922] [transport.py] [_log()] userauth is OK
2026-01-01T01:07:02.168 [DEBUG] [Thread-137922] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:07:02.168 [DEBUG] [Thread-137922] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:07:02.168 [DEBUG] [Thread-137922] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T01:07:02.168 [DEBUG] [Thread-137922] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:07:02.177 [INFO] [Thread-137922] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:07:02.177 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:07:02.802 [DEBUG] [Thread-137922] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:07:02.802 [DEBUG] [Thread-137922] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:07:02.802 [DEBUG] [Thread-137922] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T01:07:02.843 [DEBUG] [Thread-137922] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:07:02.843 [DEBUG] [Thread-137922] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:07:02.845 [DEBUG] [Thread-137922] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:07:02.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:07:02.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T01:07:02.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T01:07:02.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T01:07:02.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:07:02.864 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T01:07:02.864 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:07:02.864 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:07:02.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T01:07:02.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.962633 -999.00  +14.30  10.45     82  +11.30 1 2 1 2 1     0    0 2.96 -2.64 z.ES. 15.4 10.4 198.1 20.8 15.5 -13.8 15.3 -13.8 15.2 -12.8 15.4 -12.9
2026-01-01T01:07:02.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T01:07:02.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T01:07:02.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.962633
2026-01-01T01:07:02.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T01:07:02.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T01:07:02.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T01:07:02.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T01:07:02.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T01:07:02.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T01:06:29', tmtdew=3.34, humidity=80.25, cloud=0.0, wind=18.49, temperature=14.12, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T23:06:11.491', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T01:07:02.865 [DEBUG] [Thread-137922] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:07:02.939 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T01:07:02.954 [DEBUG] [Thread-137925] [transport.py] [_log()] starting thread (client mode): 0xb955b820
2026-01-01T01:07:02.955 [DEBUG] [Thread-137925] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:07:02.972 [DEBUG] [Thread-137925] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T01:07:02.972 [INFO] [Thread-137925] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T01:07:02.982 [DEBUG] [Thread-137925] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:07:02.982 [DEBUG] [Thread-137925] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T01:07:02.982 [DEBUG] [Thread-137925] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:07:02.982 [DEBUG] [Thread-137925] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:07:02.982 [DEBUG] [Thread-137925] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:07:02.982 [DEBUG] [Thread-137925] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:07:02.982 [DEBUG] [Thread-137925] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:07:02.982 [DEBUG] [Thread-137925] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:07:02.982 [DEBUG] [Thread-137925] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:07:02.982 [DEBUG] [Thread-137925] [transport.py] [_log()] client lang: <none>
2026-01-01T01:07:02.982 [DEBUG] [Thread-137925] [transport.py] [_log()] server lang: <none>
2026-01-01T01:07:02.982 [DEBUG] [Thread-137925] [transport.py] [_log()] kex follows: False
2026-01-01T01:07:02.982 [DEBUG] [Thread-137925] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:07:02.982 [DEBUG] [Thread-137925] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:07:02.982 [DEBUG] [Thread-137925] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:07:02.982 [DEBUG] [Thread-137925] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:07:02.982 [DEBUG] [Thread-137925] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:07:02.982 [DEBUG] [Thread-137925] [transport.py] [_log()] Compression: none
2026-01-01T01:07:02.982 [DEBUG] [Thread-137925] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:07:03.039 [DEBUG] [Thread-137925] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:07:03.039 [DEBUG] [Thread-137925] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:07:03.039 [DEBUG] [Thread-137925] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T01:07:03.039 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T01:07:03.039 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:07:03.096 [DEBUG] [Thread-137925] [transport.py] [_log()] userauth is OK
2026-01-01T01:07:03.097 [DEBUG] [Thread-137925] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:07:03.097 [DEBUG] [Thread-137925] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:07:03.097 [DEBUG] [Thread-137925] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T01:07:03.097 [DEBUG] [Thread-137925] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:07:03.110 [INFO] [Thread-137925] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:07:03.110 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T01:07:03.111 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:07:03.974 [DEBUG] [Thread-137925] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:07:03.974 [DEBUG] [Thread-137925] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:07:04.021 [DEBUG] [Thread-137925] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:07:04.022 [DEBUG] [Thread-137925] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:07:04.031 [DEBUG] [Thread-137925] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:07:04.039 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:07:04.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T01:07:04.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
2026-01-01T01:07:04.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:07:04.058 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:07:04.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:07:04.066 [DEBUG] [Thread-137925] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:07:15.101 [DEBUG] [Thread-137927 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:07:30.145 [DEBUG] [Thread-137928 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:07:34.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T01:07:34.088 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T01:07:34.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T01:07:34.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 1, 7, 1), 3.34, 80.26, 0.0, 20.26, 14.12, 0, 1, 0, 2, 0, 0),)
2026-01-01T01:07:34.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 01:07:01
2026-01-01T01:07:34.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T01:07:35.148 [DEBUG] [Thread-137929] [transport.py] [_log()] starting thread (client mode): 0xb95590f0
2026-01-01T01:07:35.148 [DEBUG] [Thread-137929] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:07:35.169 [DEBUG] [Thread-137929] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T01:07:35.169 [INFO] [Thread-137929] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T01:07:35.172 [DEBUG] [Thread-137929] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:07:35.173 [DEBUG] [Thread-137929] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T01:07:35.173 [DEBUG] [Thread-137929] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:07:35.173 [DEBUG] [Thread-137929] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:07:35.173 [DEBUG] [Thread-137929] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:07:35.173 [DEBUG] [Thread-137929] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:07:35.173 [DEBUG] [Thread-137929] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:07:35.173 [DEBUG] [Thread-137929] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:07:35.173 [DEBUG] [Thread-137929] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:07:35.173 [DEBUG] [Thread-137929] [transport.py] [_log()] client lang: <none>
2026-01-01T01:07:35.173 [DEBUG] [Thread-137929] [transport.py] [_log()] server lang: <none>
2026-01-01T01:07:35.173 [DEBUG] [Thread-137929] [transport.py] [_log()] kex follows: False
2026-01-01T01:07:35.173 [DEBUG] [Thread-137929] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:07:35.173 [DEBUG] [Thread-137929] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:07:35.173 [DEBUG] [Thread-137929] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:07:35.173 [DEBUG] [Thread-137929] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:07:35.173 [DEBUG] [Thread-137929] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:07:35.173 [DEBUG] [Thread-137929] [transport.py] [_log()] Compression: none
2026-01-01T01:07:35.173 [DEBUG] [Thread-137929] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:07:35.191 [DEBUG] [Thread-137929] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:07:35.191 [DEBUG] [Thread-137929] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:07:35.192 [DEBUG] [Thread-137929] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T01:07:35.192 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T01:07:35.192 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:07:35.192 [DEBUG] [Thread-137929] [transport.py] [_log()] userauth is OK
2026-01-01T01:07:35.192 [DEBUG] [Thread-137929] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:07:35.192 [DEBUG] [Thread-137929] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:07:35.192 [DEBUG] [Thread-137929] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T01:07:35.192 [DEBUG] [Thread-137929] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:07:35.203 [INFO] [Thread-137929] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:07:35.203 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:07:35.991 [DEBUG] [Thread-137929] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:07:35.991 [DEBUG] [Thread-137929] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:07:35.992 [DEBUG] [Thread-137929] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T01:07:36.032 [DEBUG] [Thread-137929] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:07:36.032 [DEBUG] [Thread-137929] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:07:36.035 [DEBUG] [Thread-137929] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:07:36.046 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:07:36.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T01:07:36.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T01:07:36.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T01:07:36.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:07:36.058 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T01:07:36.058 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:07:36.058 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:07:36.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T01:07:36.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.962980 -999.00  +14.30  16.02     82  +11.30 1 2 1 2 1     0    0 2.88 -2.69 ZN.S. 11.7 16.0 204.2 19.4 15.5 -13.6 15.3 -13.9 15.2 -12.9 15.5 -13.1
2026-01-01T01:07:36.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T01:07:36.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T01:07:36.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.962980
2026-01-01T01:07:36.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T01:07:36.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T01:07:36.060 [DEBUG] [Thread-137929] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:07:36.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T01:07:36.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T01:07:36.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T01:07:36.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T01:07:01', tmtdew=3.34, humidity=80.26, cloud=0.0, wind=20.26, temperature=14.12, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T23:06:41.472', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T01:07:36.148 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T01:07:45.182 [DEBUG] [Thread-137932 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:07:46.414 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:07:46.415 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:07:59.219 [DEBUG] [Thread-137933 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:08:00.230 [DEBUG] [Thread-137934 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:08:15.267 [DEBUG] [Thread-137935 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:08:30.298 [DEBUG] [Thread-137936 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:08:45.327 [DEBUG] [Thread-137937 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:08:46.620 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:08:46.621 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:08:59.276 [DEBUG] [Thread-137938 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:09:00.366 [DEBUG] [Thread-137939 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:09:15.398 [DEBUG] [Thread-137940 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:09:30.440 [DEBUG] [Thread-137941 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:09:45.475 [DEBUG] [Thread-137942 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:09:46.822 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:09:46.823 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:09:49.397 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2026-01-01T01:09:59.332 [DEBUG] [Thread-137943 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:10:00.507 [DEBUG] [Thread-137944 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:10:15.541 [DEBUG] [Thread-137945 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:10:19.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T01:10:19.401 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T01:10:19.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T01:10:20.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 1, 10, 14), 3.41, 80.15, 0.0, 15.32, 14.11, 0, 1, 0, 2, 0, 0),)
2026-01-01T01:10:20.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 01:10:14
2026-01-01T01:10:20.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T01:10:20.391 [DEBUG] [Thread-137946] [transport.py] [_log()] starting thread (client mode): 0xb6b2b370
2026-01-01T01:10:20.391 [DEBUG] [Thread-137946] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:10:20.412 [DEBUG] [Thread-137946] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T01:10:20.412 [INFO] [Thread-137946] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T01:10:20.415 [DEBUG] [Thread-137946] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:10:20.415 [DEBUG] [Thread-137946] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T01:10:20.415 [DEBUG] [Thread-137946] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:10:20.415 [DEBUG] [Thread-137946] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:10:20.415 [DEBUG] [Thread-137946] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:10:20.415 [DEBUG] [Thread-137946] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:10:20.415 [DEBUG] [Thread-137946] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:10:20.415 [DEBUG] [Thread-137946] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:10:20.415 [DEBUG] [Thread-137946] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:10:20.416 [DEBUG] [Thread-137946] [transport.py] [_log()] client lang: <none>
2026-01-01T01:10:20.416 [DEBUG] [Thread-137946] [transport.py] [_log()] server lang: <none>
2026-01-01T01:10:20.416 [DEBUG] [Thread-137946] [transport.py] [_log()] kex follows: False
2026-01-01T01:10:20.416 [DEBUG] [Thread-137946] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:10:20.416 [DEBUG] [Thread-137946] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:10:20.416 [DEBUG] [Thread-137946] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:10:20.416 [DEBUG] [Thread-137946] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:10:20.416 [DEBUG] [Thread-137946] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:10:20.416 [DEBUG] [Thread-137946] [transport.py] [_log()] Compression: none
2026-01-01T01:10:20.416 [DEBUG] [Thread-137946] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:10:20.434 [DEBUG] [Thread-137946] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:10:20.434 [DEBUG] [Thread-137946] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:10:20.435 [DEBUG] [Thread-137946] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T01:10:20.435 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T01:10:20.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:10:20.437 [DEBUG] [Thread-137946] [transport.py] [_log()] userauth is OK
2026-01-01T01:10:20.437 [DEBUG] [Thread-137946] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:10:20.437 [DEBUG] [Thread-137946] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:10:20.437 [DEBUG] [Thread-137946] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T01:10:20.437 [DEBUG] [Thread-137946] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:10:20.460 [INFO] [Thread-137946] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:10:20.460 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:10:21.111 [DEBUG] [Thread-137946] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:10:21.111 [DEBUG] [Thread-137946] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:10:21.112 [DEBUG] [Thread-137946] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T01:10:21.152 [DEBUG] [Thread-137946] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:10:21.152 [DEBUG] [Thread-137946] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:10:21.156 [DEBUG] [Thread-137946] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:10:21.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:10:21.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T01:10:21.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T01:10:21.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T01:10:21.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:10:21.182 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T01:10:21.182 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:10:21.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:10:21.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T01:10:21.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.965064 -999.00  +14.30   8.40     82  +11.30 1 2 1 2 1     0    0 2.92 -2.37 ..eS. 8.4 8.4 190.9 15.2 15.4 -14.4 15.3 -14.8 15.2 -13.5 15.4 -13.6
2026-01-01T01:10:21.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T01:10:21.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T01:10:21.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.965064
2026-01-01T01:10:21.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T01:10:21.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T01:10:21.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T01:10:21.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T01:10:21.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T01:10:21.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T01:10:14', tmtdew=3.41, humidity=80.15, cloud=0.0, wind=15.32, temperature=14.11, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T23:09:41.530', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T01:10:21.184 [DEBUG] [Thread-137946] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:10:21.283 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T01:10:21.295 [DEBUG] [Thread-137949] [transport.py] [_log()] starting thread (client mode): 0xb6b2b250
2026-01-01T01:10:21.296 [DEBUG] [Thread-137949] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:10:21.313 [DEBUG] [Thread-137949] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T01:10:21.313 [INFO] [Thread-137949] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T01:10:21.321 [DEBUG] [Thread-137949] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:10:21.321 [DEBUG] [Thread-137949] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T01:10:21.321 [DEBUG] [Thread-137949] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:10:21.322 [DEBUG] [Thread-137949] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:10:21.322 [DEBUG] [Thread-137949] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:10:21.322 [DEBUG] [Thread-137949] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:10:21.322 [DEBUG] [Thread-137949] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:10:21.322 [DEBUG] [Thread-137949] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:10:21.322 [DEBUG] [Thread-137949] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:10:21.322 [DEBUG] [Thread-137949] [transport.py] [_log()] client lang: <none>
2026-01-01T01:10:21.322 [DEBUG] [Thread-137949] [transport.py] [_log()] server lang: <none>
2026-01-01T01:10:21.322 [DEBUG] [Thread-137949] [transport.py] [_log()] kex follows: False
2026-01-01T01:10:21.322 [DEBUG] [Thread-137949] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:10:21.322 [DEBUG] [Thread-137949] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:10:21.322 [DEBUG] [Thread-137949] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:10:21.322 [DEBUG] [Thread-137949] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:10:21.322 [DEBUG] [Thread-137949] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:10:21.322 [DEBUG] [Thread-137949] [transport.py] [_log()] Compression: none
2026-01-01T01:10:21.322 [DEBUG] [Thread-137949] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:10:21.379 [DEBUG] [Thread-137949] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:10:21.380 [DEBUG] [Thread-137949] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:10:21.380 [DEBUG] [Thread-137949] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T01:10:21.381 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T01:10:21.381 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:10:21.436 [DEBUG] [Thread-137949] [transport.py] [_log()] userauth is OK
2026-01-01T01:10:21.436 [DEBUG] [Thread-137949] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:10:21.436 [DEBUG] [Thread-137949] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:10:21.436 [DEBUG] [Thread-137949] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T01:10:21.436 [DEBUG] [Thread-137949] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:10:21.455 [INFO] [Thread-137949] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:10:21.456 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T01:10:21.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:10:22.293 [DEBUG] [Thread-137949] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:10:22.293 [DEBUG] [Thread-137949] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:10:22.341 [DEBUG] [Thread-137949] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:10:22.341 [DEBUG] [Thread-137949] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:10:22.351 [DEBUG] [Thread-137949] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:10:22.361 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:10:22.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T01:10:22.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T01:10:22.380 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:10:22.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:10:22.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:10:22.389 [DEBUG] [Thread-137949] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:10:30.573 [DEBUG] [Thread-137951 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:10:45.621 [DEBUG] [Thread-137952 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:10:47.024 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:10:47.025 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:10:52.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T01:10:52.406 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T01:10:52.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T01:10:53.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 1, 10, 46), 3.41, 79.68, 0.0, 17.24, 14.11, 0, 0, 0, 2, 0, 0),)
2026-01-01T01:10:53.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 01:10:46
2026-01-01T01:10:53.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T01:10:53.410 [DEBUG] [Thread-137953] [transport.py] [_log()] starting thread (client mode): 0xb6b2b880
2026-01-01T01:10:53.410 [DEBUG] [Thread-137953] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:10:53.430 [DEBUG] [Thread-137953] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T01:10:53.430 [INFO] [Thread-137953] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T01:10:53.434 [DEBUG] [Thread-137953] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:10:53.434 [DEBUG] [Thread-137953] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T01:10:53.434 [DEBUG] [Thread-137953] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:10:53.434 [DEBUG] [Thread-137953] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:10:53.434 [DEBUG] [Thread-137953] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:10:53.434 [DEBUG] [Thread-137953] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:10:53.434 [DEBUG] [Thread-137953] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:10:53.434 [DEBUG] [Thread-137953] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:10:53.434 [DEBUG] [Thread-137953] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:10:53.434 [DEBUG] [Thread-137953] [transport.py] [_log()] client lang: <none>
2026-01-01T01:10:53.434 [DEBUG] [Thread-137953] [transport.py] [_log()] server lang: <none>
2026-01-01T01:10:53.434 [DEBUG] [Thread-137953] [transport.py] [_log()] kex follows: False
2026-01-01T01:10:53.435 [DEBUG] [Thread-137953] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:10:53.435 [DEBUG] [Thread-137953] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:10:53.435 [DEBUG] [Thread-137953] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:10:53.435 [DEBUG] [Thread-137953] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:10:53.435 [DEBUG] [Thread-137953] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:10:53.435 [DEBUG] [Thread-137953] [transport.py] [_log()] Compression: none
2026-01-01T01:10:53.435 [DEBUG] [Thread-137953] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:10:53.454 [DEBUG] [Thread-137953] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:10:53.454 [DEBUG] [Thread-137953] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:10:53.455 [DEBUG] [Thread-137953] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T01:10:53.455 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T01:10:53.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:10:53.457 [DEBUG] [Thread-137953] [transport.py] [_log()] userauth is OK
2026-01-01T01:10:53.457 [DEBUG] [Thread-137953] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:10:53.457 [DEBUG] [Thread-137953] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:10:53.457 [DEBUG] [Thread-137953] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T01:10:53.457 [DEBUG] [Thread-137953] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:10:53.480 [INFO] [Thread-137953] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:10:53.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:10:54.096 [DEBUG] [Thread-137953] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:10:54.096 [DEBUG] [Thread-137953] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:10:54.097 [DEBUG] [Thread-137953] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T01:10:54.137 [DEBUG] [Thread-137953] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:10:54.137 [DEBUG] [Thread-137953] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:10:54.141 [DEBUG] [Thread-137953] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:10:54.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:10:54.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T01:10:54.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T01:10:54.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T01:10:54.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:10:54.166 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T01:10:54.166 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:10:54.166 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:10:54.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T01:10:54.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.965411 -999.00  +14.30   8.48     82  +11.30 1 2 1 2 1     0    0 2.87 -2.13 Z..S. 10.1 8.5 218.7 12.2 15.5 -14.6 15.3 -15.2 15.1 -13.4 15.5 -13.7
2026-01-01T01:10:54.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T01:10:54.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T01:10:54.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.965411
2026-01-01T01:10:54.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T01:10:54.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T01:10:54.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T01:10:54.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T01:10:54.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T01:10:54.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T01:10:46', tmtdew=3.41, humidity=79.68, cloud=0.0, wind=17.24, temperature=14.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T23:10:11.510', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T01:10:54.169 [DEBUG] [Thread-137953] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:10:54.252 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T01:10:54.264 [DEBUG] [Thread-137956] [transport.py] [_log()] starting thread (client mode): 0xb6b297b0
2026-01-01T01:10:54.264 [DEBUG] [Thread-137956] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:10:54.280 [DEBUG] [Thread-137956] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T01:10:54.280 [INFO] [Thread-137956] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T01:10:54.288 [DEBUG] [Thread-137956] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:10:54.288 [DEBUG] [Thread-137956] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T01:10:54.288 [DEBUG] [Thread-137956] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:10:54.288 [DEBUG] [Thread-137956] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:10:54.288 [DEBUG] [Thread-137956] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:10:54.288 [DEBUG] [Thread-137956] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:10:54.288 [DEBUG] [Thread-137956] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:10:54.288 [DEBUG] [Thread-137956] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:10:54.288 [DEBUG] [Thread-137956] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:10:54.288 [DEBUG] [Thread-137956] [transport.py] [_log()] client lang: <none>
2026-01-01T01:10:54.288 [DEBUG] [Thread-137956] [transport.py] [_log()] server lang: <none>
2026-01-01T01:10:54.288 [DEBUG] [Thread-137956] [transport.py] [_log()] kex follows: False
2026-01-01T01:10:54.288 [DEBUG] [Thread-137956] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:10:54.288 [DEBUG] [Thread-137956] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:10:54.288 [DEBUG] [Thread-137956] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:10:54.288 [DEBUG] [Thread-137956] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:10:54.288 [DEBUG] [Thread-137956] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:10:54.288 [DEBUG] [Thread-137956] [transport.py] [_log()] Compression: none
2026-01-01T01:10:54.288 [DEBUG] [Thread-137956] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:10:54.355 [DEBUG] [Thread-137956] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:10:54.356 [DEBUG] [Thread-137956] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:10:54.356 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T01:10:54.357 [DEBUG] [Thread-137956] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T01:10:54.358 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:10:54.412 [DEBUG] [Thread-137956] [transport.py] [_log()] userauth is OK
2026-01-01T01:10:54.412 [DEBUG] [Thread-137956] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:10:54.412 [DEBUG] [Thread-137956] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:10:54.412 [DEBUG] [Thread-137956] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T01:10:54.412 [DEBUG] [Thread-137956] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:10:54.430 [INFO] [Thread-137956] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:10:54.431 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T01:10:54.431 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:10:55.229 [DEBUG] [Thread-137956] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:10:55.229 [DEBUG] [Thread-137956] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:10:55.277 [DEBUG] [Thread-137956] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:10:55.277 [DEBUG] [Thread-137956] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:10:55.286 [DEBUG] [Thread-137956] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:10:55.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:10:55.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T01:10:55.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T01:10:55.312 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:10:55.312 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:10:55.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:10:55.321 [DEBUG] [Thread-137956] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:10:59.411 [DEBUG] [Thread-137958 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:11:00.656 [DEBUG] [Thread-137959 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:11:15.704 [DEBUG] [Thread-137960 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:11:25.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T01:11:25.334 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T01:11:25.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T01:11:26.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 1, 11, 18), 3.4, 79.71, 0.0, 17.15, 14.12, 0, 0, 0, 2, 0, 0),)
2026-01-01T01:11:26.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 01:11:18
2026-01-01T01:11:26.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T01:11:26.306 [DEBUG] [Thread-137961] [transport.py] [_log()] starting thread (client mode): 0xb6b283a0
2026-01-01T01:11:26.307 [DEBUG] [Thread-137961] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:11:26.327 [DEBUG] [Thread-137961] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T01:11:26.327 [INFO] [Thread-137961] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T01:11:26.329 [DEBUG] [Thread-137961] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:11:26.329 [DEBUG] [Thread-137961] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T01:11:26.329 [DEBUG] [Thread-137961] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:11:26.329 [DEBUG] [Thread-137961] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:11:26.329 [DEBUG] [Thread-137961] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:11:26.329 [DEBUG] [Thread-137961] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:11:26.329 [DEBUG] [Thread-137961] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:11:26.329 [DEBUG] [Thread-137961] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:11:26.329 [DEBUG] [Thread-137961] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:11:26.329 [DEBUG] [Thread-137961] [transport.py] [_log()] client lang: <none>
2026-01-01T01:11:26.329 [DEBUG] [Thread-137961] [transport.py] [_log()] server lang: <none>
2026-01-01T01:11:26.329 [DEBUG] [Thread-137961] [transport.py] [_log()] kex follows: False
2026-01-01T01:11:26.329 [DEBUG] [Thread-137961] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:11:26.329 [DEBUG] [Thread-137961] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:11:26.329 [DEBUG] [Thread-137961] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:11:26.329 [DEBUG] [Thread-137961] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:11:26.329 [DEBUG] [Thread-137961] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:11:26.329 [DEBUG] [Thread-137961] [transport.py] [_log()] Compression: none
2026-01-01T01:11:26.329 [DEBUG] [Thread-137961] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:11:26.342 [DEBUG] [Thread-137961] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:11:26.342 [DEBUG] [Thread-137961] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:11:26.343 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T01:11:26.343 [DEBUG] [Thread-137961] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T01:11:26.344 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:11:26.345 [DEBUG] [Thread-137961] [transport.py] [_log()] userauth is OK
2026-01-01T01:11:26.345 [DEBUG] [Thread-137961] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:11:26.345 [DEBUG] [Thread-137961] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:11:26.346 [DEBUG] [Thread-137961] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T01:11:26.346 [DEBUG] [Thread-137961] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:11:26.370 [INFO] [Thread-137961] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:11:26.371 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:11:27.023 [DEBUG] [Thread-137961] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:11:27.024 [DEBUG] [Thread-137961] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:11:27.024 [DEBUG] [Thread-137961] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T01:11:27.065 [DEBUG] [Thread-137961] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:11:27.065 [DEBUG] [Thread-137961] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:11:27.069 [DEBUG] [Thread-137961] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:11:27.080 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:11:27.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T01:11:27.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T01:11:27.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T01:11:27.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:11:27.091 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T01:11:27.092 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:11:27.092 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:11:27.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T01:11:27.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.965758 -999.00  +14.30   9.91     82  +11.30 1 2 1 2 1     0    0 2.91 -1.96 Z.eS. 11.1 9.9 209.0 14.0 15.5 -14.6 15.3 -14.8 15.2 -13.5 15.5 -13.7
2026-01-01T01:11:27.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T01:11:27.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T01:11:27.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.965758
2026-01-01T01:11:27.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T01:11:27.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T01:11:27.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T01:11:27.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T01:11:27.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T01:11:27.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T01:11:18', tmtdew=3.4, humidity=79.71, cloud=0.0, wind=17.15, temperature=14.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T23:10:41.491', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T01:11:27.094 [DEBUG] [Thread-137961] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:11:27.179 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T01:11:27.191 [DEBUG] [Thread-137964] [transport.py] [_log()] starting thread (client mode): 0xb6ba23b0
2026-01-01T01:11:27.191 [DEBUG] [Thread-137964] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:11:27.206 [DEBUG] [Thread-137964] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T01:11:27.207 [INFO] [Thread-137964] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T01:11:27.214 [DEBUG] [Thread-137964] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:11:27.214 [DEBUG] [Thread-137964] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T01:11:27.214 [DEBUG] [Thread-137964] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:11:27.214 [DEBUG] [Thread-137964] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:11:27.215 [DEBUG] [Thread-137964] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:11:27.215 [DEBUG] [Thread-137964] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:11:27.215 [DEBUG] [Thread-137964] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:11:27.215 [DEBUG] [Thread-137964] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:11:27.215 [DEBUG] [Thread-137964] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:11:27.215 [DEBUG] [Thread-137964] [transport.py] [_log()] client lang: <none>
2026-01-01T01:11:27.215 [DEBUG] [Thread-137964] [transport.py] [_log()] server lang: <none>
2026-01-01T01:11:27.215 [DEBUG] [Thread-137964] [transport.py] [_log()] kex follows: False
2026-01-01T01:11:27.215 [DEBUG] [Thread-137964] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:11:27.215 [DEBUG] [Thread-137964] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:11:27.215 [DEBUG] [Thread-137964] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:11:27.215 [DEBUG] [Thread-137964] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:11:27.216 [DEBUG] [Thread-137964] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:11:27.216 [DEBUG] [Thread-137964] [transport.py] [_log()] Compression: none
2026-01-01T01:11:27.216 [DEBUG] [Thread-137964] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:11:27.276 [DEBUG] [Thread-137964] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:11:27.277 [DEBUG] [Thread-137964] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:11:27.278 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T01:11:27.278 [DEBUG] [Thread-137964] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T01:11:27.279 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:11:27.333 [DEBUG] [Thread-137964] [transport.py] [_log()] userauth is OK
2026-01-01T01:11:27.333 [DEBUG] [Thread-137964] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:11:27.333 [DEBUG] [Thread-137964] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:11:27.333 [DEBUG] [Thread-137964] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T01:11:27.333 [DEBUG] [Thread-137964] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:11:27.353 [INFO] [Thread-137964] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:11:27.353 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T01:11:27.354 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:11:28.218 [DEBUG] [Thread-137964] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:11:28.218 [DEBUG] [Thread-137964] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:11:28.266 [DEBUG] [Thread-137964] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:11:28.266 [DEBUG] [Thread-137964] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:11:28.274 [DEBUG] [Thread-137964] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:11:28.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:11:28.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T01:11:28.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T01:11:28.300 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:11:28.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:11:28.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:11:28.309 [DEBUG] [Thread-137964] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:11:30.737 [DEBUG] [Thread-137966 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:11:45.794 [DEBUG] [Thread-137967 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:11:47.226 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:11:47.227 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:11:58.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T01:11:58.326 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T01:11:58.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T01:11:59.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 1, 11, 50), 3.4, 79.7, 0.0, 15.26, 14.09, 0, 0, 0, 2, 0, 0),)
2026-01-01T01:11:59.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 01:11:50
2026-01-01T01:11:59.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T01:11:59.309 [DEBUG] [Thread-137968] [transport.py] [_log()] starting thread (client mode): 0xb955b820
2026-01-01T01:11:59.309 [DEBUG] [Thread-137968] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:11:59.330 [DEBUG] [Thread-137968] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T01:11:59.330 [INFO] [Thread-137968] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T01:11:59.333 [DEBUG] [Thread-137968] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:11:59.333 [DEBUG] [Thread-137968] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T01:11:59.333 [DEBUG] [Thread-137968] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:11:59.333 [DEBUG] [Thread-137968] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:11:59.333 [DEBUG] [Thread-137968] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:11:59.333 [DEBUG] [Thread-137968] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:11:59.333 [DEBUG] [Thread-137968] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:11:59.333 [DEBUG] [Thread-137968] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:11:59.333 [DEBUG] [Thread-137968] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:11:59.333 [DEBUG] [Thread-137968] [transport.py] [_log()] client lang: <none>
2026-01-01T01:11:59.333 [DEBUG] [Thread-137968] [transport.py] [_log()] server lang: <none>
2026-01-01T01:11:59.333 [DEBUG] [Thread-137968] [transport.py] [_log()] kex follows: False
2026-01-01T01:11:59.333 [DEBUG] [Thread-137968] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:11:59.334 [DEBUG] [Thread-137968] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:11:59.334 [DEBUG] [Thread-137968] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:11:59.334 [DEBUG] [Thread-137968] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:11:59.334 [DEBUG] [Thread-137968] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:11:59.334 [DEBUG] [Thread-137968] [transport.py] [_log()] Compression: none
2026-01-01T01:11:59.334 [DEBUG] [Thread-137968] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:11:59.352 [DEBUG] [Thread-137968] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:11:59.353 [DEBUG] [Thread-137968] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:11:59.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T01:11:59.354 [DEBUG] [Thread-137968] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T01:11:59.355 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:11:59.356 [DEBUG] [Thread-137968] [transport.py] [_log()] userauth is OK
2026-01-01T01:11:59.356 [DEBUG] [Thread-137968] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:11:59.356 [DEBUG] [Thread-137968] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:11:59.357 [DEBUG] [Thread-137968] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T01:11:59.357 [DEBUG] [Thread-137968] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:11:59.393 [INFO] [Thread-137968] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:11:59.394 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:11:59.505 [DEBUG] [Thread-137970 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:12:00.042 [DEBUG] [Thread-137968] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:12:00.042 [DEBUG] [Thread-137968] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:12:00.043 [DEBUG] [Thread-137968] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T01:12:00.083 [DEBUG] [Thread-137968] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:12:00.083 [DEBUG] [Thread-137968] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:12:00.086 [DEBUG] [Thread-137968] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:12:00.098 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:12:00.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T01:12:00.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T01:12:00.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T01:12:00.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:12:00.106 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T01:12:00.107 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:12:00.107 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:12:00.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T01:12:00.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.966105 -999.00  +14.30  10.31     82  +11.30 1 2 1 2 1     0    0 2.92 -1.51 Z.eS. 9.7 10.3 195.2 16.3 15.5 -14.8 15.3 -14.9 15.2 -13.5 15.5 -13.6
2026-01-01T01:12:00.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T01:12:00.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T01:12:00.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.966105
2026-01-01T01:12:00.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T01:12:00.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T01:12:00.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T01:12:00.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T01:12:00.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T01:12:00.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T01:11:50', tmtdew=3.4, humidity=79.7, cloud=0.0, wind=15.26, temperature=14.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T23:11:11.472', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T01:12:00.109 [DEBUG] [Thread-137968] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:12:00.192 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T01:12:00.204 [DEBUG] [Thread-137972] [transport.py] [_log()] starting thread (client mode): 0xb6ba1c60
2026-01-01T01:12:00.205 [DEBUG] [Thread-137972] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:12:00.219 [DEBUG] [Thread-137972] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T01:12:00.219 [INFO] [Thread-137972] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T01:12:00.227 [DEBUG] [Thread-137972] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:12:00.227 [DEBUG] [Thread-137972] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T01:12:00.227 [DEBUG] [Thread-137972] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:12:00.227 [DEBUG] [Thread-137972] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:12:00.228 [DEBUG] [Thread-137972] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:12:00.228 [DEBUG] [Thread-137972] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:12:00.228 [DEBUG] [Thread-137972] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:12:00.228 [DEBUG] [Thread-137972] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:12:00.228 [DEBUG] [Thread-137972] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:12:00.228 [DEBUG] [Thread-137972] [transport.py] [_log()] client lang: <none>
2026-01-01T01:12:00.228 [DEBUG] [Thread-137972] [transport.py] [_log()] server lang: <none>
2026-01-01T01:12:00.228 [DEBUG] [Thread-137972] [transport.py] [_log()] kex follows: False
2026-01-01T01:12:00.228 [DEBUG] [Thread-137972] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:12:00.228 [DEBUG] [Thread-137972] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:12:00.228 [DEBUG] [Thread-137972] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:12:00.228 [DEBUG] [Thread-137972] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:12:00.228 [DEBUG] [Thread-137972] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:12:00.228 [DEBUG] [Thread-137972] [transport.py] [_log()] Compression: none
2026-01-01T01:12:00.228 [DEBUG] [Thread-137972] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:12:00.284 [DEBUG] [Thread-137972] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:12:00.285 [DEBUG] [Thread-137972] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:12:00.285 [DEBUG] [Thread-137972] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T01:12:00.286 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T01:12:00.286 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:12:00.340 [DEBUG] [Thread-137972] [transport.py] [_log()] userauth is OK
2026-01-01T01:12:00.341 [DEBUG] [Thread-137972] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:12:00.341 [DEBUG] [Thread-137972] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:12:00.341 [DEBUG] [Thread-137972] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T01:12:00.341 [DEBUG] [Thread-137972] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:12:00.365 [INFO] [Thread-137972] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:12:00.365 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T01:12:00.366 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:12:00.821 [DEBUG] [Thread-137974 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:12:01.245 [DEBUG] [Thread-137972] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:12:01.246 [DEBUG] [Thread-137972] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:12:01.293 [DEBUG] [Thread-137972] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:12:01.293 [DEBUG] [Thread-137972] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:12:01.302 [DEBUG] [Thread-137972] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:12:01.311 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:12:01.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T01:12:01.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T01:12:01.330 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:12:01.330 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:12:01.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:12:01.339 [DEBUG] [Thread-137972] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:12:15.872 [DEBUG] [Thread-137975 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:12:30.907 [DEBUG] [Thread-137976 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:12:31.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T01:12:31.361 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T01:12:31.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T01:12:32.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 1, 12, 22), 3.4, 79.7, 0.0, 15.16, 14.11, 0, 0, 0, 2, 0, 0),)
2026-01-01T01:12:32.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 01:12:22
2026-01-01T01:12:32.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T01:12:32.337 [DEBUG] [Thread-137977] [transport.py] [_log()] starting thread (client mode): 0xb6b28af0
2026-01-01T01:12:32.337 [DEBUG] [Thread-137977] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:12:32.359 [DEBUG] [Thread-137977] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T01:12:32.360 [INFO] [Thread-137977] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T01:12:32.361 [DEBUG] [Thread-137977] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:12:32.361 [DEBUG] [Thread-137977] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T01:12:32.361 [DEBUG] [Thread-137977] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:12:32.361 [DEBUG] [Thread-137977] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:12:32.361 [DEBUG] [Thread-137977] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:12:32.361 [DEBUG] [Thread-137977] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:12:32.361 [DEBUG] [Thread-137977] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:12:32.361 [DEBUG] [Thread-137977] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:12:32.361 [DEBUG] [Thread-137977] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:12:32.361 [DEBUG] [Thread-137977] [transport.py] [_log()] client lang: <none>
2026-01-01T01:12:32.361 [DEBUG] [Thread-137977] [transport.py] [_log()] server lang: <none>
2026-01-01T01:12:32.361 [DEBUG] [Thread-137977] [transport.py] [_log()] kex follows: False
2026-01-01T01:12:32.361 [DEBUG] [Thread-137977] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:12:32.362 [DEBUG] [Thread-137977] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:12:32.362 [DEBUG] [Thread-137977] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:12:32.362 [DEBUG] [Thread-137977] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:12:32.362 [DEBUG] [Thread-137977] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:12:32.362 [DEBUG] [Thread-137977] [transport.py] [_log()] Compression: none
2026-01-01T01:12:32.362 [DEBUG] [Thread-137977] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:12:32.380 [DEBUG] [Thread-137977] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:12:32.380 [DEBUG] [Thread-137977] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:12:32.381 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T01:12:32.381 [DEBUG] [Thread-137977] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T01:12:32.382 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:12:32.383 [DEBUG] [Thread-137977] [transport.py] [_log()] userauth is OK
2026-01-01T01:12:32.383 [DEBUG] [Thread-137977] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:12:32.384 [DEBUG] [Thread-137977] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:12:32.384 [DEBUG] [Thread-137977] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T01:12:32.384 [DEBUG] [Thread-137977] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:12:32.408 [INFO] [Thread-137977] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:12:32.409 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:12:33.079 [DEBUG] [Thread-137977] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:12:33.079 [DEBUG] [Thread-137977] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:12:33.079 [DEBUG] [Thread-137977] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T01:12:33.120 [DEBUG] [Thread-137977] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:12:33.120 [DEBUG] [Thread-137977] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:12:33.123 [DEBUG] [Thread-137977] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:12:33.134 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:12:33.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T01:12:33.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T01:12:33.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T01:12:33.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:12:33.140 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T01:12:33.140 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:12:33.140 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:12:33.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T01:12:33.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.966800 -999.00  +14.30  13.34     82  +11.20 1 2 1 2 1     0    0 2.92 -0.88 Z.eS. 13.0 13.3 198.0 14.7 15.5 -14.7 15.3 -14.9 15.2 -13.2 15.4 -13.4
2026-01-01T01:12:33.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T01:12:33.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T01:12:33.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.966800
2026-01-01T01:12:33.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T01:12:33.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T01:12:33.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T01:12:33.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T01:12:33.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T01:12:33.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T01:12:22', tmtdew=3.4, humidity=79.7, cloud=0.0, wind=15.16, temperature=14.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T23:12:11.520', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T21:54:00')
2026-01-01T01:12:33.142 [DEBUG] [Thread-137977] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:12:33.224 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T01:12:33.237 [DEBUG] [Thread-137980] [transport.py] [_log()] starting thread (client mode): 0xb6b29ed0
2026-01-01T01:12:33.237 [DEBUG] [Thread-137980] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:12:33.254 [DEBUG] [Thread-137980] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T01:12:33.254 [INFO] [Thread-137980] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T01:12:33.261 [DEBUG] [Thread-137980] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:12:33.261 [DEBUG] [Thread-137980] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T01:12:33.261 [DEBUG] [Thread-137980] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:12:33.261 [DEBUG] [Thread-137980] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:12:33.261 [DEBUG] [Thread-137980] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:12:33.261 [DEBUG] [Thread-137980] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:12:33.261 [DEBUG] [Thread-137980] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:12:33.262 [DEBUG] [Thread-137980] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:12:33.262 [DEBUG] [Thread-137980] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:12:33.262 [DEBUG] [Thread-137980] [transport.py] [_log()] client lang: <none>
2026-01-01T01:12:33.262 [DEBUG] [Thread-137980] [transport.py] [_log()] server lang: <none>
2026-01-01T01:12:33.262 [DEBUG] [Thread-137980] [transport.py] [_log()] kex follows: False
2026-01-01T01:12:33.262 [DEBUG] [Thread-137980] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:12:33.262 [DEBUG] [Thread-137980] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:12:33.262 [DEBUG] [Thread-137980] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:12:33.262 [DEBUG] [Thread-137980] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:12:33.262 [DEBUG] [Thread-137980] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:12:33.262 [DEBUG] [Thread-137980] [transport.py] [_log()] Compression: none
2026-01-01T01:12:33.262 [DEBUG] [Thread-137980] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:12:33.320 [DEBUG] [Thread-137980] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:12:33.321 [DEBUG] [Thread-137980] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:12:33.321 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T01:12:33.322 [DEBUG] [Thread-137980] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T01:12:33.322 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:12:33.377 [DEBUG] [Thread-137980] [transport.py] [_log()] userauth is OK
2026-01-01T01:12:33.377 [DEBUG] [Thread-137980] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:12:33.378 [DEBUG] [Thread-137980] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:12:33.378 [DEBUG] [Thread-137980] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T01:12:33.378 [DEBUG] [Thread-137980] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:12:33.397 [INFO] [Thread-137980] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:12:33.397 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T01:12:33.398 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:12:34.215 [DEBUG] [Thread-137980] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:12:34.215 [DEBUG] [Thread-137980] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:12:34.263 [DEBUG] [Thread-137980] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:12:34.263 [DEBUG] [Thread-137980] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:12:34.272 [DEBUG] [Thread-137980] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:12:34.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:12:34.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T01:12:34.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T01:12:34.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:12:34.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:12:34.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:12:34.309 [DEBUG] [Thread-137980] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:12:45.939 [DEBUG] [Thread-137982 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:12:47.441 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:12:47.442 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:12:59.573 [DEBUG] [Thread-137983 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:13:00.991 [DEBUG] [Thread-137984 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:13:04.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T01:13:04.331 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T01:13:04.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T01:13:05.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 1, 12, 54), 3.41, 80.18, 0.0, 16.67, 14.09, 0, 1, 0, 2, 0, 0),)
2026-01-01T01:13:05.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 01:12:54
2026-01-01T01:13:05.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T01:13:05.356 [DEBUG] [Thread-137985] [transport.py] [_log()] starting thread (client mode): 0xb6b2b940
2026-01-01T01:13:05.356 [DEBUG] [Thread-137985] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:13:05.378 [DEBUG] [Thread-137985] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T01:13:05.378 [INFO] [Thread-137985] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T01:13:05.381 [DEBUG] [Thread-137985] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:13:05.381 [DEBUG] [Thread-137985] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T01:13:05.381 [DEBUG] [Thread-137985] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:13:05.381 [DEBUG] [Thread-137985] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:13:05.381 [DEBUG] [Thread-137985] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:13:05.381 [DEBUG] [Thread-137985] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:13:05.381 [DEBUG] [Thread-137985] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:13:05.381 [DEBUG] [Thread-137985] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:13:05.381 [DEBUG] [Thread-137985] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:13:05.381 [DEBUG] [Thread-137985] [transport.py] [_log()] client lang: <none>
2026-01-01T01:13:05.381 [DEBUG] [Thread-137985] [transport.py] [_log()] server lang: <none>
2026-01-01T01:13:05.381 [DEBUG] [Thread-137985] [transport.py] [_log()] kex follows: False
2026-01-01T01:13:05.381 [DEBUG] [Thread-137985] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:13:05.381 [DEBUG] [Thread-137985] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:13:05.381 [DEBUG] [Thread-137985] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:13:05.381 [DEBUG] [Thread-137985] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:13:05.381 [DEBUG] [Thread-137985] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:13:05.381 [DEBUG] [Thread-137985] [transport.py] [_log()] Compression: none
2026-01-01T01:13:05.382 [DEBUG] [Thread-137985] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:13:05.389 [DEBUG] [Thread-137985] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:13:05.390 [DEBUG] [Thread-137985] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:13:05.390 [DEBUG] [Thread-137985] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T01:13:05.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T01:13:05.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:13:05.391 [DEBUG] [Thread-137985] [transport.py] [_log()] userauth is OK
2026-01-01T01:13:05.391 [DEBUG] [Thread-137985] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:13:05.391 [DEBUG] [Thread-137985] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:13:05.391 [DEBUG] [Thread-137985] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T01:13:05.391 [DEBUG] [Thread-137985] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:13:05.424 [INFO] [Thread-137985] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:13:05.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:13:06.088 [DEBUG] [Thread-137985] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:13:06.088 [DEBUG] [Thread-137985] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:13:06.088 [DEBUG] [Thread-137985] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T01:13:06.130 [DEBUG] [Thread-137985] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:13:06.130 [DEBUG] [Thread-137985] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:13:06.133 [DEBUG] [Thread-137985] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:13:06.146 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:13:06.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T01:13:06.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T01:13:06.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T01:13:06.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:13:06.154 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T01:13:06.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:13:06.154 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:13:06.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T01:13:06.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.967147 -999.00  +14.30  12.03     82  +11.30 1 2 1 2 1     0    0 2.96 -1.03 Z.ES. 8.8 12.0 197.0 19.4 15.5 -14.5 15.3 -14.9 15.1 -13.2 15.4 -13.4
2026-01-01T01:13:06.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T01:13:06.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T01:13:06.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.967147
2026-01-01T01:13:06.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T01:13:06.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T01:13:06.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T01:13:06.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T01:13:06.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T01:13:06.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T01:12:54', tmtdew=3.41, humidity=80.18, cloud=0.0, wind=16.67, temperature=14.09, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T23:12:41.501', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T23:12:00')
2026-01-01T01:13:06.156 [DEBUG] [Thread-137985] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:13:06.230 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T01:13:16.025 [DEBUG] [Thread-137988 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:13:31.076 [DEBUG] [Thread-137989 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:13:46.108 [DEBUG] [Thread-137990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:13:47.645 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:13:47.646 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:13:59.643 [DEBUG] [Thread-137991 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:14:01.141 [DEBUG] [Thread-137992 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:14:16.177 [DEBUG] [Thread-137993 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:14:31.209 [DEBUG] [Thread-137994 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:14:46.239 [DEBUG] [Thread-137995 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:14:47.846 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:14:47.847 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:14:59.695 [DEBUG] [Thread-137996 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:15:01.273 [DEBUG] [Thread-137997 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:15:16.308 [DEBUG] [Thread-137998 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:15:21.173 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2026-01-01T01:15:31.346 [DEBUG] [Thread-137999 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:15:46.383 [DEBUG] [Thread-138000 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:15:48.054 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:15:48.055 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:15:51.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T01:15:51.189 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T01:15:51.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T01:15:51.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 1, 15, 34), 3.34, 80.28, 0.0, 18.79, 14.04, 0, 1, 0, 2, 0, 0),)
2026-01-01T01:15:51.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 01:15:34
2026-01-01T01:15:52.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T01:15:52.198 [DEBUG] [Thread-138001] [transport.py] [_log()] starting thread (client mode): 0xb95f03a0
2026-01-01T01:15:52.198 [DEBUG] [Thread-138001] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:15:52.221 [DEBUG] [Thread-138001] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T01:15:52.221 [INFO] [Thread-138001] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T01:15:52.224 [DEBUG] [Thread-138001] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:15:52.224 [DEBUG] [Thread-138001] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T01:15:52.224 [DEBUG] [Thread-138001] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:15:52.224 [DEBUG] [Thread-138001] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:15:52.224 [DEBUG] [Thread-138001] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:15:52.224 [DEBUG] [Thread-138001] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:15:52.224 [DEBUG] [Thread-138001] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:15:52.224 [DEBUG] [Thread-138001] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:15:52.224 [DEBUG] [Thread-138001] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:15:52.224 [DEBUG] [Thread-138001] [transport.py] [_log()] client lang: <none>
2026-01-01T01:15:52.224 [DEBUG] [Thread-138001] [transport.py] [_log()] server lang: <none>
2026-01-01T01:15:52.224 [DEBUG] [Thread-138001] [transport.py] [_log()] kex follows: False
2026-01-01T01:15:52.224 [DEBUG] [Thread-138001] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:15:52.224 [DEBUG] [Thread-138001] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:15:52.224 [DEBUG] [Thread-138001] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:15:52.225 [DEBUG] [Thread-138001] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:15:52.225 [DEBUG] [Thread-138001] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:15:52.225 [DEBUG] [Thread-138001] [transport.py] [_log()] Compression: none
2026-01-01T01:15:52.225 [DEBUG] [Thread-138001] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:15:52.242 [DEBUG] [Thread-138001] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:15:52.242 [DEBUG] [Thread-138001] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:15:52.243 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T01:15:52.243 [DEBUG] [Thread-138001] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T01:15:52.244 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:15:52.246 [DEBUG] [Thread-138001] [transport.py] [_log()] userauth is OK
2026-01-01T01:15:52.246 [DEBUG] [Thread-138001] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:15:52.246 [DEBUG] [Thread-138001] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:15:52.246 [DEBUG] [Thread-138001] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T01:15:52.246 [DEBUG] [Thread-138001] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:15:52.271 [INFO] [Thread-138001] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:15:52.272 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:15:52.934 [DEBUG] [Thread-138001] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:15:52.934 [DEBUG] [Thread-138001] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:15:52.935 [DEBUG] [Thread-138001] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T01:15:52.976 [DEBUG] [Thread-138001] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:15:52.976 [DEBUG] [Thread-138001] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:15:52.980 [DEBUG] [Thread-138001] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:15:52.992 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:15:52.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T01:15:52.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T01:15:52.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T01:15:53.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:15:53.009 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T01:15:53.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:15:53.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:15:53.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T01:15:53.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.968883 -999.00  +14.20   8.36     82  +11.30 1 2 1 2 1     0    0 3.02 -1.25 ..ES. 10.0 8.4 204.7 18.3 15.4 -13.9 15.2 -14.0 15.1 -13.3 15.4 -13.2
2026-01-01T01:15:53.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T01:15:53.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T01:15:53.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.968883
2026-01-01T01:15:53.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T01:15:53.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T01:15:53.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T01:15:53.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T01:15:53.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T01:15:53.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T01:15:34', tmtdew=3.34, humidity=80.28, cloud=0.0, wind=18.79, temperature=14.04, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T23:15:11.491', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T23:12:00')
2026-01-01T01:15:53.012 [DEBUG] [Thread-138001] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:15:53.096 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T01:15:53.109 [DEBUG] [Thread-138004] [transport.py] [_log()] starting thread (client mode): 0xb6ba0b50
2026-01-01T01:15:53.109 [DEBUG] [Thread-138004] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:15:53.125 [DEBUG] [Thread-138004] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T01:15:53.125 [INFO] [Thread-138004] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T01:15:53.133 [DEBUG] [Thread-138004] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:15:53.133 [DEBUG] [Thread-138004] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T01:15:53.133 [DEBUG] [Thread-138004] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:15:53.133 [DEBUG] [Thread-138004] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:15:53.133 [DEBUG] [Thread-138004] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:15:53.133 [DEBUG] [Thread-138004] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:15:53.133 [DEBUG] [Thread-138004] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:15:53.133 [DEBUG] [Thread-138004] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:15:53.133 [DEBUG] [Thread-138004] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:15:53.133 [DEBUG] [Thread-138004] [transport.py] [_log()] client lang: <none>
2026-01-01T01:15:53.133 [DEBUG] [Thread-138004] [transport.py] [_log()] server lang: <none>
2026-01-01T01:15:53.133 [DEBUG] [Thread-138004] [transport.py] [_log()] kex follows: False
2026-01-01T01:15:53.133 [DEBUG] [Thread-138004] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:15:53.134 [DEBUG] [Thread-138004] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:15:53.134 [DEBUG] [Thread-138004] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:15:53.134 [DEBUG] [Thread-138004] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:15:53.134 [DEBUG] [Thread-138004] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:15:53.134 [DEBUG] [Thread-138004] [transport.py] [_log()] Compression: none
2026-01-01T01:15:53.134 [DEBUG] [Thread-138004] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:15:53.190 [DEBUG] [Thread-138004] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:15:53.191 [DEBUG] [Thread-138004] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:15:53.192 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T01:15:53.192 [DEBUG] [Thread-138004] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T01:15:53.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:15:53.247 [DEBUG] [Thread-138004] [transport.py] [_log()] userauth is OK
2026-01-01T01:15:53.248 [DEBUG] [Thread-138004] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:15:53.248 [DEBUG] [Thread-138004] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:15:53.248 [DEBUG] [Thread-138004] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T01:15:53.248 [DEBUG] [Thread-138004] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:15:53.267 [INFO] [Thread-138004] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:15:53.267 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T01:15:53.268 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:15:54.120 [DEBUG] [Thread-138004] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:15:54.120 [DEBUG] [Thread-138004] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:15:54.168 [DEBUG] [Thread-138004] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:15:54.168 [DEBUG] [Thread-138004] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:15:54.180 [DEBUG] [Thread-138004] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:15:54.189 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:15:54.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')
2026-01-01T01:15:54.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T01:15:54.207 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:15:54.207 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:15:54.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:15:54.216 [DEBUG] [Thread-138004] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:15:59.765 [DEBUG] [Thread-138006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:16:01.421 [DEBUG] [Thread-138007 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:16:16.470 [DEBUG] [Thread-138008 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:16:24.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T01:16:24.213 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T01:16:24.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
2026-01-01T01:16:24.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 1, 16, 6), 3.33, 80.33, 0.0, 17.19, 14.01, 0, 1, 0, 2, 0, 0),)
2026-01-01T01:16:24.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 01:16:06
2026-01-01T01:16:25.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T01:16:25.226 [DEBUG] [Thread-138009] [transport.py] [_log()] starting thread (client mode): 0xb95f31c0
2026-01-01T01:16:25.226 [DEBUG] [Thread-138009] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:16:25.247 [DEBUG] [Thread-138009] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T01:16:25.247 [INFO] [Thread-138009] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T01:16:25.249 [DEBUG] [Thread-138009] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:16:25.249 [DEBUG] [Thread-138009] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T01:16:25.249 [DEBUG] [Thread-138009] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:16:25.249 [DEBUG] [Thread-138009] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:16:25.249 [DEBUG] [Thread-138009] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:16:25.249 [DEBUG] [Thread-138009] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:16:25.249 [DEBUG] [Thread-138009] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:16:25.249 [DEBUG] [Thread-138009] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:16:25.249 [DEBUG] [Thread-138009] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:16:25.249 [DEBUG] [Thread-138009] [transport.py] [_log()] client lang: <none>
2026-01-01T01:16:25.249 [DEBUG] [Thread-138009] [transport.py] [_log()] server lang: <none>
2026-01-01T01:16:25.249 [DEBUG] [Thread-138009] [transport.py] [_log()] kex follows: False
2026-01-01T01:16:25.249 [DEBUG] [Thread-138009] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:16:25.249 [DEBUG] [Thread-138009] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:16:25.249 [DEBUG] [Thread-138009] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:16:25.249 [DEBUG] [Thread-138009] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:16:25.249 [DEBUG] [Thread-138009] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:16:25.249 [DEBUG] [Thread-138009] [transport.py] [_log()] Compression: none
2026-01-01T01:16:25.249 [DEBUG] [Thread-138009] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:16:25.257 [DEBUG] [Thread-138009] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:16:25.258 [DEBUG] [Thread-138009] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:16:25.258 [DEBUG] [Thread-138009] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T01:16:25.258 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T01:16:25.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:16:25.260 [DEBUG] [Thread-138009] [transport.py] [_log()] userauth is OK
2026-01-01T01:16:25.260 [DEBUG] [Thread-138009] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:16:25.261 [DEBUG] [Thread-138009] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:16:25.261 [DEBUG] [Thread-138009] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T01:16:25.261 [DEBUG] [Thread-138009] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:16:25.284 [INFO] [Thread-138009] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:16:25.286 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:16:25.889 [DEBUG] [Thread-138009] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:16:25.889 [DEBUG] [Thread-138009] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:16:25.890 [DEBUG] [Thread-138009] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T01:16:25.930 [DEBUG] [Thread-138009] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:16:25.930 [DEBUG] [Thread-138009] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:16:25.933 [DEBUG] [Thread-138009] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:16:25.945 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:16:25.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T01:16:25.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T01:16:25.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T01:16:25.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:16:25.956 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T01:16:25.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:16:25.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:16:25.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T01:16:25.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.969577 -999.00  +14.20   8.51     82  +11.30 1 2 1 2 1     0    0 2.90 -1.79 ...s. 12.4 8.5 225.5 22.5 15.4 -14.0 15.2 -14.4 15.1 -14.1 15.4 -14.0
2026-01-01T01:16:25.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T01:16:25.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T01:16:25.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.969577
2026-01-01T01:16:25.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T01:16:25.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T01:16:25.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T01:16:25.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T01:16:25.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T01:16:25.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T01:16:06', tmtdew=3.33, humidity=80.33, cloud=0.0, wind=17.19, temperature=14.01, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T23:16:11.453', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T23:12:00')
2026-01-01T01:16:25.959 [DEBUG] [Thread-138009] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:16:26.042 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T01:16:26.053 [DEBUG] [Thread-138012] [transport.py] [_log()] starting thread (client mode): 0xb6b16b90
2026-01-01T01:16:26.053 [DEBUG] [Thread-138012] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:16:26.069 [DEBUG] [Thread-138012] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T01:16:26.069 [INFO] [Thread-138012] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T01:16:26.076 [DEBUG] [Thread-138012] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:16:26.077 [DEBUG] [Thread-138012] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T01:16:26.077 [DEBUG] [Thread-138012] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:16:26.077 [DEBUG] [Thread-138012] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:16:26.077 [DEBUG] [Thread-138012] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:16:26.077 [DEBUG] [Thread-138012] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:16:26.077 [DEBUG] [Thread-138012] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:16:26.077 [DEBUG] [Thread-138012] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:16:26.077 [DEBUG] [Thread-138012] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:16:26.077 [DEBUG] [Thread-138012] [transport.py] [_log()] client lang: <none>
2026-01-01T01:16:26.077 [DEBUG] [Thread-138012] [transport.py] [_log()] server lang: <none>
2026-01-01T01:16:26.077 [DEBUG] [Thread-138012] [transport.py] [_log()] kex follows: False
2026-01-01T01:16:26.077 [DEBUG] [Thread-138012] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:16:26.077 [DEBUG] [Thread-138012] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:16:26.077 [DEBUG] [Thread-138012] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:16:26.077 [DEBUG] [Thread-138012] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:16:26.077 [DEBUG] [Thread-138012] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:16:26.077 [DEBUG] [Thread-138012] [transport.py] [_log()] Compression: none
2026-01-01T01:16:26.077 [DEBUG] [Thread-138012] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:16:26.139 [DEBUG] [Thread-138012] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:16:26.139 [DEBUG] [Thread-138012] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:16:26.140 [DEBUG] [Thread-138012] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T01:16:26.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T01:16:26.141 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:16:26.199 [DEBUG] [Thread-138012] [transport.py] [_log()] userauth is OK
2026-01-01T01:16:26.199 [DEBUG] [Thread-138012] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:16:26.199 [DEBUG] [Thread-138012] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:16:26.199 [DEBUG] [Thread-138012] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T01:16:26.200 [DEBUG] [Thread-138012] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:16:26.219 [INFO] [Thread-138012] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:16:26.219 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T01:16:26.219 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:16:27.056 [DEBUG] [Thread-138012] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:16:27.057 [DEBUG] [Thread-138012] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:16:27.105 [DEBUG] [Thread-138012] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:16:27.105 [DEBUG] [Thread-138012] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:16:27.115 [DEBUG] [Thread-138012] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:16:27.124 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:16:27.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T01:16:27.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T01:16:27.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:16:27.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:16:27.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:16:27.152 [DEBUG] [Thread-138012] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:16:31.501 [DEBUG] [Thread-138014 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:16:46.551 [DEBUG] [Thread-138015 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:16:48.254 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:16:48.255 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:16:57.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T01:16:57.174 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T01:16:57.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T01:16:57.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 1, 16, 38), 3.32, 80.35, 0.0, 18.35, 14.04, 0, 1, 0, 2, 0, 0),)
2026-01-01T01:16:57.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 01:16:38
2026-01-01T01:16:58.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T01:16:58.228 [DEBUG] [Thread-138016] [transport.py] [_log()] starting thread (client mode): 0xb95f1360
2026-01-01T01:16:58.229 [DEBUG] [Thread-138016] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:16:58.249 [DEBUG] [Thread-138016] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T01:16:58.249 [INFO] [Thread-138016] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T01:16:58.252 [DEBUG] [Thread-138016] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:16:58.252 [DEBUG] [Thread-138016] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T01:16:58.252 [DEBUG] [Thread-138016] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:16:58.252 [DEBUG] [Thread-138016] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:16:58.252 [DEBUG] [Thread-138016] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:16:58.252 [DEBUG] [Thread-138016] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:16:58.252 [DEBUG] [Thread-138016] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:16:58.252 [DEBUG] [Thread-138016] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:16:58.253 [DEBUG] [Thread-138016] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:16:58.253 [DEBUG] [Thread-138016] [transport.py] [_log()] client lang: <none>
2026-01-01T01:16:58.253 [DEBUG] [Thread-138016] [transport.py] [_log()] server lang: <none>
2026-01-01T01:16:58.253 [DEBUG] [Thread-138016] [transport.py] [_log()] kex follows: False
2026-01-01T01:16:58.253 [DEBUG] [Thread-138016] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:16:58.253 [DEBUG] [Thread-138016] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:16:58.253 [DEBUG] [Thread-138016] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:16:58.253 [DEBUG] [Thread-138016] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:16:58.253 [DEBUG] [Thread-138016] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:16:58.253 [DEBUG] [Thread-138016] [transport.py] [_log()] Compression: none
2026-01-01T01:16:58.253 [DEBUG] [Thread-138016] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:16:58.270 [DEBUG] [Thread-138016] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:16:58.270 [DEBUG] [Thread-138016] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:16:58.270 [DEBUG] [Thread-138016] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T01:16:58.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T01:16:58.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:16:58.273 [DEBUG] [Thread-138016] [transport.py] [_log()] userauth is OK
2026-01-01T01:16:58.273 [DEBUG] [Thread-138016] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:16:58.273 [DEBUG] [Thread-138016] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:16:58.273 [DEBUG] [Thread-138016] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T01:16:58.273 [DEBUG] [Thread-138016] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:16:58.289 [INFO] [Thread-138016] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:16:58.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:16:58.928 [DEBUG] [Thread-138016] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:16:58.928 [DEBUG] [Thread-138016] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:16:58.928 [DEBUG] [Thread-138016] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T01:16:58.969 [DEBUG] [Thread-138016] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:16:58.970 [DEBUG] [Thread-138016] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:16:58.972 [DEBUG] [Thread-138016] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:16:58.983 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:16:58.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T01:16:58.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T01:16:58.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T01:16:58.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:16:58.989 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T01:16:58.989 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:16:58.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:16:58.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T01:16:58.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.969925 -999.00  +14.20  10.58     82  +11.30 1 2 1 2 1     0    0 2.90 -1.27 ...s. 13.7 10.6 204.4 20.4 15.4 -14.3 15.2 -14.7 15.1 -14.6 15.4 -14.4
2026-01-01T01:16:58.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T01:16:58.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T01:16:58.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.969925
2026-01-01T01:16:58.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T01:16:58.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T01:16:58.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T01:16:58.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T01:16:58.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T01:16:58.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T01:16:38', tmtdew=3.32, humidity=80.35, cloud=0.0, wind=18.35, temperature=14.04, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T23:16:41.520', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T23:12:00')
2026-01-01T01:16:58.991 [DEBUG] [Thread-138016] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:16:59.065 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T01:16:59.077 [DEBUG] [Thread-138019] [transport.py] [_log()] starting thread (client mode): 0xb6bbf1c0
2026-01-01T01:16:59.077 [DEBUG] [Thread-138019] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:16:59.092 [DEBUG] [Thread-138019] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T01:16:59.092 [INFO] [Thread-138019] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T01:16:59.100 [DEBUG] [Thread-138019] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:16:59.100 [DEBUG] [Thread-138019] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T01:16:59.100 [DEBUG] [Thread-138019] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:16:59.100 [DEBUG] [Thread-138019] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:16:59.100 [DEBUG] [Thread-138019] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:16:59.100 [DEBUG] [Thread-138019] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:16:59.100 [DEBUG] [Thread-138019] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:16:59.100 [DEBUG] [Thread-138019] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:16:59.100 [DEBUG] [Thread-138019] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:16:59.100 [DEBUG] [Thread-138019] [transport.py] [_log()] client lang: <none>
2026-01-01T01:16:59.100 [DEBUG] [Thread-138019] [transport.py] [_log()] server lang: <none>
2026-01-01T01:16:59.100 [DEBUG] [Thread-138019] [transport.py] [_log()] kex follows: False
2026-01-01T01:16:59.100 [DEBUG] [Thread-138019] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:16:59.100 [DEBUG] [Thread-138019] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:16:59.100 [DEBUG] [Thread-138019] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:16:59.100 [DEBUG] [Thread-138019] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:16:59.100 [DEBUG] [Thread-138019] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:16:59.100 [DEBUG] [Thread-138019] [transport.py] [_log()] Compression: none
2026-01-01T01:16:59.100 [DEBUG] [Thread-138019] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:16:59.157 [DEBUG] [Thread-138019] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:16:59.157 [DEBUG] [Thread-138019] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:16:59.158 [DEBUG] [Thread-138019] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T01:16:59.158 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T01:16:59.158 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:16:59.215 [DEBUG] [Thread-138019] [transport.py] [_log()] userauth is OK
2026-01-01T01:16:59.215 [DEBUG] [Thread-138019] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:16:59.215 [DEBUG] [Thread-138019] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:16:59.215 [DEBUG] [Thread-138019] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T01:16:59.215 [DEBUG] [Thread-138019] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:16:59.229 [INFO] [Thread-138019] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:16:59.229 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T01:16:59.229 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:16:59.818 [DEBUG] [Thread-138021 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:17:00.054 [DEBUG] [Thread-138019] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:17:00.054 [DEBUG] [Thread-138019] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:17:00.102 [DEBUG] [Thread-138019] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:17:00.102 [DEBUG] [Thread-138019] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:17:00.110 [DEBUG] [Thread-138019] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:17:00.118 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:17:00.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T01:17:00.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T01:17:00.134 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:17:00.134 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:17:00.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:17:00.142 [DEBUG] [Thread-138019] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:17:01.588 [DEBUG] [Thread-138022 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:17:16.641 [DEBUG] [Thread-138023 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:17:30.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T01:17:30.159 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T01:17:30.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T01:17:30.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 1, 17, 10), 3.31, 80.41, 0.0, 18.24, 14.02, 0, 1, 0, 2, 0, 0),)
2026-01-01T01:17:30.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 01:17:10
2026-01-01T01:17:31.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T01:17:31.151 [DEBUG] [Thread-138024] [transport.py] [_log()] starting thread (client mode): 0xb17942b0
2026-01-01T01:17:31.151 [DEBUG] [Thread-138024] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:17:31.172 [DEBUG] [Thread-138024] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T01:17:31.172 [INFO] [Thread-138024] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T01:17:31.175 [DEBUG] [Thread-138024] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:17:31.175 [DEBUG] [Thread-138024] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T01:17:31.175 [DEBUG] [Thread-138024] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:17:31.175 [DEBUG] [Thread-138024] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:17:31.175 [DEBUG] [Thread-138024] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:17:31.175 [DEBUG] [Thread-138024] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:17:31.175 [DEBUG] [Thread-138024] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:17:31.175 [DEBUG] [Thread-138024] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:17:31.176 [DEBUG] [Thread-138024] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:17:31.176 [DEBUG] [Thread-138024] [transport.py] [_log()] client lang: <none>
2026-01-01T01:17:31.176 [DEBUG] [Thread-138024] [transport.py] [_log()] server lang: <none>
2026-01-01T01:17:31.176 [DEBUG] [Thread-138024] [transport.py] [_log()] kex follows: False
2026-01-01T01:17:31.176 [DEBUG] [Thread-138024] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:17:31.176 [DEBUG] [Thread-138024] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:17:31.176 [DEBUG] [Thread-138024] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:17:31.176 [DEBUG] [Thread-138024] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:17:31.176 [DEBUG] [Thread-138024] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:17:31.176 [DEBUG] [Thread-138024] [transport.py] [_log()] Compression: none
2026-01-01T01:17:31.176 [DEBUG] [Thread-138024] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:17:31.195 [DEBUG] [Thread-138024] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:17:31.196 [DEBUG] [Thread-138024] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:17:31.196 [DEBUG] [Thread-138024] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T01:17:31.197 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T01:17:31.198 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:17:31.237 [DEBUG] [Thread-138024] [transport.py] [_log()] userauth is OK
2026-01-01T01:17:31.238 [DEBUG] [Thread-138024] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:17:31.238 [DEBUG] [Thread-138024] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:17:31.238 [DEBUG] [Thread-138024] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T01:17:31.238 [DEBUG] [Thread-138024] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:17:31.257 [INFO] [Thread-138024] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:17:31.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:17:31.678 [DEBUG] [Thread-138026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:17:31.886 [DEBUG] [Thread-138024] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:17:31.887 [DEBUG] [Thread-138024] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:17:31.888 [DEBUG] [Thread-138024] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T01:17:31.928 [DEBUG] [Thread-138024] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:17:31.928 [DEBUG] [Thread-138024] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:17:31.932 [DEBUG] [Thread-138024] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:17:31.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:17:31.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T01:17:31.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T01:17:31.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T01:17:31.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:17:31.955 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T01:17:31.955 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:17:31.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:17:31.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T01:17:31.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.970272 -999.00  +14.20  11.41     82  +11.30 1 2 1 2 1     0    0 2.97 -1.03 ...s. 8.7 11.4 214.0 18.9 15.4 -14.8 15.2 -15.3 15.0 -15.1 15.4 -14.9
2026-01-01T01:17:31.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T01:17:31.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T01:17:31.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.970272
2026-01-01T01:17:31.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T01:17:31.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T01:17:31.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T01:17:31.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T01:17:31.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T01:17:31.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T01:17:10', tmtdew=3.31, humidity=80.41, cloud=0.0, wind=18.24, temperature=14.02, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T23:17:11.501', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T23:12:00')
2026-01-01T01:17:31.958 [DEBUG] [Thread-138024] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:17:32.052 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T01:17:32.065 [DEBUG] [Thread-138028] [transport.py] [_log()] starting thread (client mode): 0xb1795210
2026-01-01T01:17:32.065 [DEBUG] [Thread-138028] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:17:32.082 [DEBUG] [Thread-138028] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T01:17:32.082 [INFO] [Thread-138028] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T01:17:32.090 [DEBUG] [Thread-138028] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:17:32.090 [DEBUG] [Thread-138028] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T01:17:32.090 [DEBUG] [Thread-138028] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:17:32.090 [DEBUG] [Thread-138028] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:17:32.090 [DEBUG] [Thread-138028] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:17:32.090 [DEBUG] [Thread-138028] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:17:32.090 [DEBUG] [Thread-138028] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:17:32.090 [DEBUG] [Thread-138028] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:17:32.090 [DEBUG] [Thread-138028] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:17:32.091 [DEBUG] [Thread-138028] [transport.py] [_log()] client lang: <none>
2026-01-01T01:17:32.091 [DEBUG] [Thread-138028] [transport.py] [_log()] server lang: <none>
2026-01-01T01:17:32.091 [DEBUG] [Thread-138028] [transport.py] [_log()] kex follows: False
2026-01-01T01:17:32.091 [DEBUG] [Thread-138028] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:17:32.091 [DEBUG] [Thread-138028] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:17:32.091 [DEBUG] [Thread-138028] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:17:32.091 [DEBUG] [Thread-138028] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:17:32.091 [DEBUG] [Thread-138028] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:17:32.091 [DEBUG] [Thread-138028] [transport.py] [_log()] Compression: none
2026-01-01T01:17:32.091 [DEBUG] [Thread-138028] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:17:32.148 [DEBUG] [Thread-138028] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:17:32.149 [DEBUG] [Thread-138028] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:17:32.149 [DEBUG] [Thread-138028] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T01:17:32.150 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T01:17:32.150 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:17:32.204 [DEBUG] [Thread-138028] [transport.py] [_log()] userauth is OK
2026-01-01T01:17:32.204 [DEBUG] [Thread-138028] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:17:32.204 [DEBUG] [Thread-138028] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:17:32.204 [DEBUG] [Thread-138028] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T01:17:32.204 [DEBUG] [Thread-138028] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:17:32.224 [INFO] [Thread-138028] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:17:32.224 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T01:17:32.225 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:17:33.067 [DEBUG] [Thread-138028] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:17:33.067 [DEBUG] [Thread-138028] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:17:33.116 [DEBUG] [Thread-138028] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:17:33.116 [DEBUG] [Thread-138028] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:17:33.126 [DEBUG] [Thread-138028] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:17:33.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:17:33.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T01:17:33.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T01:17:33.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:17:33.154 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:17:33.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:17:33.163 [DEBUG] [Thread-138028] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:17:46.711 [DEBUG] [Thread-138030 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:17:48.456 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:17:48.457 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:17:59.895 [DEBUG] [Thread-138031 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:18:01.760 [DEBUG] [Thread-138032 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:18:03.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T01:18:03.186 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T01:18:03.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T01:18:03.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 1, 17, 42), 3.3, 80.46, 0.0, 19.83, 14.01, 0, 1, 0, 2, 0, 0),)
2026-01-01T01:18:03.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 01:17:42
2026-01-01T01:18:04.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T01:18:04.182 [DEBUG] [Thread-138033] [transport.py] [_log()] starting thread (client mode): 0xb6ba20b0
2026-01-01T01:18:04.182 [DEBUG] [Thread-138033] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:18:04.203 [DEBUG] [Thread-138033] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T01:18:04.203 [INFO] [Thread-138033] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T01:18:04.206 [DEBUG] [Thread-138033] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:18:04.206 [DEBUG] [Thread-138033] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T01:18:04.206 [DEBUG] [Thread-138033] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:18:04.206 [DEBUG] [Thread-138033] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:18:04.206 [DEBUG] [Thread-138033] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:18:04.206 [DEBUG] [Thread-138033] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:18:04.206 [DEBUG] [Thread-138033] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:18:04.206 [DEBUG] [Thread-138033] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:18:04.206 [DEBUG] [Thread-138033] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:18:04.206 [DEBUG] [Thread-138033] [transport.py] [_log()] client lang: <none>
2026-01-01T01:18:04.206 [DEBUG] [Thread-138033] [transport.py] [_log()] server lang: <none>
2026-01-01T01:18:04.206 [DEBUG] [Thread-138033] [transport.py] [_log()] kex follows: False
2026-01-01T01:18:04.206 [DEBUG] [Thread-138033] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:18:04.206 [DEBUG] [Thread-138033] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:18:04.206 [DEBUG] [Thread-138033] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:18:04.206 [DEBUG] [Thread-138033] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:18:04.206 [DEBUG] [Thread-138033] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:18:04.206 [DEBUG] [Thread-138033] [transport.py] [_log()] Compression: none
2026-01-01T01:18:04.206 [DEBUG] [Thread-138033] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:18:04.223 [DEBUG] [Thread-138033] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:18:04.223 [DEBUG] [Thread-138033] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:18:04.224 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T01:18:04.224 [DEBUG] [Thread-138033] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T01:18:04.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:18:04.226 [DEBUG] [Thread-138033] [transport.py] [_log()] userauth is OK
2026-01-01T01:18:04.226 [DEBUG] [Thread-138033] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:18:04.227 [DEBUG] [Thread-138033] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:18:04.227 [DEBUG] [Thread-138033] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T01:18:04.227 [DEBUG] [Thread-138033] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:18:04.262 [INFO] [Thread-138033] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:18:04.262 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:18:04.902 [DEBUG] [Thread-138033] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:18:04.902 [DEBUG] [Thread-138033] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:18:04.902 [DEBUG] [Thread-138033] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T01:18:04.943 [DEBUG] [Thread-138033] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:18:04.943 [DEBUG] [Thread-138033] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:18:04.947 [DEBUG] [Thread-138033] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:18:04.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:18:04.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T01:18:04.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T01:18:04.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T01:18:04.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:18:04.968 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T01:18:04.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:18:04.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:18:04.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T01:18:04.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.970619 -999.00  +14.20  10.51     82  +11.30 1 2 1 2 1     0    0 2.95 -0.74 ...s. 8.4 10.5 208.2 13.5 15.4 -15.0 15.2 -15.8 15.1 -15.8 15.4 -15.4
2026-01-01T01:18:04.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T01:18:04.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T01:18:04.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.970619
2026-01-01T01:18:04.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T01:18:04.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T01:18:04.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T01:18:04.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T01:18:04.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T01:18:04.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T01:17:42', tmtdew=3.3, humidity=80.46, cloud=0.0, wind=19.83, temperature=14.01, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T23:17:41.482', atlas_cloud=2, atlas_rain=1, zp_data=[0.6927499999999993, 0.6252500000000003, 0.9632500000000004, 0.7744999999999989, nan, 1.4357500000000005, 0.577, 0.54575, 0.4494999999999987, 0.6770000000000005, 1.5982499999999993, nan, nan, -0.2787500000000005, 0.011999999999998678, 0.09399999999999942, 0.3407499999999999, 0.8734999999999999, 0.9259999999999993, nan, nan, -1.606250000000001, -1.37275, -0.08924999999999983, 0.4599999999999991, 0.3409999999999993, -0.4192499999999999, nan, -0.30150000000000077, -1.5219999999999985, -1.5629999999999988, -1.0329999999999995, 0.3587499999999988], zp_timestamp='2025-12-31T23:12:00')
2026-01-01T01:18:04.969 [DEBUG] [Thread-138033] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:18:05.040 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T01:18:16.789 [DEBUG] [Thread-138036 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:18:31.833 [DEBUG] [Thread-138037 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:18:46.874 [DEBUG] [Thread-138038 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:18:48.657 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:18:48.657 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:18:59.974 [DEBUG] [Thread-138039 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:19:01.902 [DEBUG] [Thread-138040 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:19:16.937 [DEBUG] [Thread-138041 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:19:31.971 [DEBUG] [Thread-138042 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:19:47.000 [DEBUG] [Thread-138043 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:19:48.856 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:19:48.858 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:20:00.064 [DEBUG] [Thread-138044 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:20:02.035 [DEBUG] [Thread-138045 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:20:17.067 [DEBUG] [Thread-138046 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:20:20.181 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2026-01-01T01:20:32.105 [DEBUG] [Thread-138047 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:20:47.142 [DEBUG] [Thread-138048 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:20:49.057 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:20:49.058 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:20:50.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T01:20:50.210 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T01:20:50.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T01:20:50.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 1, 20, 23), 3.28, 80.56, 0.0, 17.89, 13.97, 0, 1, 0, 2, 0, 0),)
2026-01-01T01:20:50.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 01:20:23
2026-01-01T01:20:51.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T01:20:51.265 [DEBUG] [Thread-138049] [transport.py] [_log()] starting thread (client mode): 0xb6ba2c50
2026-01-01T01:20:51.265 [DEBUG] [Thread-138049] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:20:51.287 [DEBUG] [Thread-138049] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T01:20:51.287 [INFO] [Thread-138049] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T01:20:51.290 [DEBUG] [Thread-138049] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:20:51.290 [DEBUG] [Thread-138049] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T01:20:51.290 [DEBUG] [Thread-138049] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:20:51.290 [DEBUG] [Thread-138049] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:20:51.290 [DEBUG] [Thread-138049] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:20:51.290 [DEBUG] [Thread-138049] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:20:51.290 [DEBUG] [Thread-138049] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:20:51.290 [DEBUG] [Thread-138049] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:20:51.290 [DEBUG] [Thread-138049] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:20:51.290 [DEBUG] [Thread-138049] [transport.py] [_log()] client lang: <none>
2026-01-01T01:20:51.290 [DEBUG] [Thread-138049] [transport.py] [_log()] server lang: <none>
2026-01-01T01:20:51.290 [DEBUG] [Thread-138049] [transport.py] [_log()] kex follows: False
2026-01-01T01:20:51.290 [DEBUG] [Thread-138049] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:20:51.290 [DEBUG] [Thread-138049] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:20:51.290 [DEBUG] [Thread-138049] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:20:51.290 [DEBUG] [Thread-138049] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:20:51.290 [DEBUG] [Thread-138049] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:20:51.290 [DEBUG] [Thread-138049] [transport.py] [_log()] Compression: none
2026-01-01T01:20:51.290 [DEBUG] [Thread-138049] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:20:51.306 [DEBUG] [Thread-138049] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:20:51.306 [DEBUG] [Thread-138049] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:20:51.306 [DEBUG] [Thread-138049] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T01:20:51.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T01:20:51.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:20:51.307 [DEBUG] [Thread-138049] [transport.py] [_log()] userauth is OK
2026-01-01T01:20:51.307 [DEBUG] [Thread-138049] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:20:51.307 [DEBUG] [Thread-138049] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:20:51.307 [DEBUG] [Thread-138049] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T01:20:51.307 [DEBUG] [Thread-138049] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:20:51.317 [INFO] [Thread-138049] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:20:51.317 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:20:51.922 [DEBUG] [Thread-138049] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:20:51.922 [DEBUG] [Thread-138049] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:20:51.922 [DEBUG] [Thread-138049] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T01:20:51.962 [DEBUG] [Thread-138049] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:20:51.962 [DEBUG] [Thread-138049] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:20:51.965 [DEBUG] [Thread-138049] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:20:51.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:20:51.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T01:20:51.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T01:20:51.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T01:20:51.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:20:51.983 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T01:20:51.983 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:20:51.983 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:20:51.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T01:20:51.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.972355 -999.00  +14.20  11.51     82  +11.30 1 2 1 2 1     0    0 2.97 -0.18 zN.SW 11.4 11.5 196.2 13.3 15.3 -17.3 15.2 -18.1 14.9 -17.6 15.3 -17.7
2026-01-01T01:20:51.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T01:20:51.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T01:20:51.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.972355
2026-01-01T01:20:51.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T01:20:51.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T01:20:51.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T01:20:51.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T01:20:51.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T01:20:51.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T01:20:23', tmtdew=3.28, humidity=80.56, cloud=0.0, wind=17.89, temperature=13.97, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T23:20:11.472', atlas_cloud=2, atlas_rain=1, zp_data=[0.9247499999999995, 0.31625000000000014, 0.6312500000000005, 1.0074999999999994, 1.0990000000000002, nan, nan, nan, nan, 0.2889999999999997, 0.5172499999999989, 1.4649999999999999, nan, nan, nan, nan, 1.3592499999999994, 0.4975000000000005, 0.5864999999999991, nan, nan, nan, -1.0627499999999994, -0.10475000000000101, nan, 0.5190000000000001, -0.10624999999999929, -0.061500000000000554, -1.065999999999999, -1.8459999999999983, -1.230999999999998, -1.1799999999999997, nan], zp_timestamp='2025-12-31T23:17:00')
2026-01-01T01:20:51.984 [DEBUG] [Thread-138049] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:20:52.057 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T01:20:52.069 [DEBUG] [Thread-138052] [transport.py] [_log()] starting thread (client mode): 0xb6b15480
2026-01-01T01:20:52.069 [DEBUG] [Thread-138052] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:20:52.085 [DEBUG] [Thread-138052] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T01:20:52.085 [INFO] [Thread-138052] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T01:20:52.093 [DEBUG] [Thread-138052] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:20:52.093 [DEBUG] [Thread-138052] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T01:20:52.093 [DEBUG] [Thread-138052] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:20:52.093 [DEBUG] [Thread-138052] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:20:52.093 [DEBUG] [Thread-138052] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:20:52.093 [DEBUG] [Thread-138052] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:20:52.093 [DEBUG] [Thread-138052] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:20:52.093 [DEBUG] [Thread-138052] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:20:52.093 [DEBUG] [Thread-138052] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:20:52.093 [DEBUG] [Thread-138052] [transport.py] [_log()] client lang: <none>
2026-01-01T01:20:52.093 [DEBUG] [Thread-138052] [transport.py] [_log()] server lang: <none>
2026-01-01T01:20:52.093 [DEBUG] [Thread-138052] [transport.py] [_log()] kex follows: False
2026-01-01T01:20:52.093 [DEBUG] [Thread-138052] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:20:52.093 [DEBUG] [Thread-138052] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:20:52.093 [DEBUG] [Thread-138052] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:20:52.093 [DEBUG] [Thread-138052] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:20:52.093 [DEBUG] [Thread-138052] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:20:52.093 [DEBUG] [Thread-138052] [transport.py] [_log()] Compression: none
2026-01-01T01:20:52.093 [DEBUG] [Thread-138052] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:20:52.148 [DEBUG] [Thread-138052] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:20:52.148 [DEBUG] [Thread-138052] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:20:52.148 [DEBUG] [Thread-138052] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T01:20:52.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T01:20:52.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:20:52.205 [DEBUG] [Thread-138052] [transport.py] [_log()] userauth is OK
2026-01-01T01:20:52.205 [DEBUG] [Thread-138052] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:20:52.205 [DEBUG] [Thread-138052] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:20:52.205 [DEBUG] [Thread-138052] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T01:20:52.205 [DEBUG] [Thread-138052] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:20:52.219 [INFO] [Thread-138052] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:20:52.219 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T01:20:52.219 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:20:53.111 [DEBUG] [Thread-138052] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:20:53.111 [DEBUG] [Thread-138052] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:20:53.159 [DEBUG] [Thread-138052] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:20:53.159 [DEBUG] [Thread-138052] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:20:53.167 [DEBUG] [Thread-138052] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:20:53.175 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:20:53.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T01:20:53.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T01:20:53.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:20:53.190 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:20:53.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:20:53.198 [DEBUG] [Thread-138052] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:21:00.144 [DEBUG] [Thread-138054 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:21:02.172 [DEBUG] [Thread-138055 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:21:17.226 [DEBUG] [Thread-138056 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:21:23.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T01:21:23.192 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T01:21:23.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T01:21:23.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 1, 20, 55), 3.23, 80.6, 0.0, 15.93, 13.92, 0, 1, 0, 2, 0, 0),)
2026-01-01T01:21:23.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 01:20:55
2026-01-01T01:21:24.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T01:21:24.204 [DEBUG] [Thread-138057] [transport.py] [_log()] starting thread (client mode): 0xb6b2ab00
2026-01-01T01:21:24.204 [DEBUG] [Thread-138057] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:21:24.224 [DEBUG] [Thread-138057] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T01:21:24.224 [INFO] [Thread-138057] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T01:21:24.227 [DEBUG] [Thread-138057] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:21:24.227 [DEBUG] [Thread-138057] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T01:21:24.227 [DEBUG] [Thread-138057] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:21:24.227 [DEBUG] [Thread-138057] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:21:24.227 [DEBUG] [Thread-138057] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:21:24.227 [DEBUG] [Thread-138057] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:21:24.227 [DEBUG] [Thread-138057] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:21:24.227 [DEBUG] [Thread-138057] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:21:24.227 [DEBUG] [Thread-138057] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:21:24.227 [DEBUG] [Thread-138057] [transport.py] [_log()] client lang: <none>
2026-01-01T01:21:24.227 [DEBUG] [Thread-138057] [transport.py] [_log()] server lang: <none>
2026-01-01T01:21:24.227 [DEBUG] [Thread-138057] [transport.py] [_log()] kex follows: False
2026-01-01T01:21:24.227 [DEBUG] [Thread-138057] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:21:24.227 [DEBUG] [Thread-138057] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:21:24.227 [DEBUG] [Thread-138057] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:21:24.227 [DEBUG] [Thread-138057] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:21:24.227 [DEBUG] [Thread-138057] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:21:24.227 [DEBUG] [Thread-138057] [transport.py] [_log()] Compression: none
2026-01-01T01:21:24.227 [DEBUG] [Thread-138057] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:21:24.240 [DEBUG] [Thread-138057] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:21:24.240 [DEBUG] [Thread-138057] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:21:24.240 [DEBUG] [Thread-138057] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T01:21:24.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T01:21:24.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:21:24.241 [DEBUG] [Thread-138057] [transport.py] [_log()] userauth is OK
2026-01-01T01:21:24.241 [DEBUG] [Thread-138057] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:21:24.241 [DEBUG] [Thread-138057] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:21:24.241 [DEBUG] [Thread-138057] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T01:21:24.241 [DEBUG] [Thread-138057] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:21:24.256 [INFO] [Thread-138057] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:21:24.256 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:21:24.846 [DEBUG] [Thread-138057] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:21:24.846 [DEBUG] [Thread-138057] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:21:24.847 [DEBUG] [Thread-138057] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T01:21:24.887 [DEBUG] [Thread-138057] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:21:24.887 [DEBUG] [Thread-138057] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:21:24.890 [DEBUG] [Thread-138057] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:21:24.902 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:21:24.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T01:21:24.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T01:21:24.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T01:21:24.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:21:24.914 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T01:21:24.914 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:21:24.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:21:24.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T01:21:24.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.972702 -999.00  +14.20  14.06     82  +11.30 1 2 1 2 1     0    0 2.92 -0.46 zN.SW 14.8 14.1 200.2 16.2 15.3 -17.7 15.1 -18.5 14.9 -17.9 15.3 -18.1
2026-01-01T01:21:24.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T01:21:24.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T01:21:24.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.972702
2026-01-01T01:21:24.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T01:21:24.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T01:21:24.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T01:21:24.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T01:21:24.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T01:21:24.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T01:20:55', tmtdew=3.23, humidity=80.6, cloud=0.0, wind=15.93, temperature=13.92, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T23:20:41.453', atlas_cloud=2, atlas_rain=1, zp_data=[0.9247499999999995, 0.31625000000000014, 0.6312500000000005, 1.0074999999999994, 1.0990000000000002, nan, nan, nan, nan, 0.2889999999999997, 0.5172499999999989, 1.4649999999999999, nan, nan, nan, nan, 1.3592499999999994, 0.4975000000000005, 0.5864999999999991, nan, nan, nan, -1.0627499999999994, -0.10475000000000101, nan, 0.5190000000000001, -0.10624999999999929, -0.061500000000000554, -1.065999999999999, -1.8459999999999983, -1.230999999999998, -1.1799999999999997, nan], zp_timestamp='2025-12-31T23:17:00')
2026-01-01T01:21:24.917 [DEBUG] [Thread-138057] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:21:25.001 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T01:21:25.013 [DEBUG] [Thread-138060] [transport.py] [_log()] starting thread (client mode): 0xb1794400
2026-01-01T01:21:25.013 [DEBUG] [Thread-138060] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:21:25.028 [DEBUG] [Thread-138060] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T01:21:25.029 [INFO] [Thread-138060] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T01:21:25.036 [DEBUG] [Thread-138060] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:21:25.036 [DEBUG] [Thread-138060] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T01:21:25.037 [DEBUG] [Thread-138060] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:21:25.037 [DEBUG] [Thread-138060] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:21:25.037 [DEBUG] [Thread-138060] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:21:25.037 [DEBUG] [Thread-138060] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:21:25.037 [DEBUG] [Thread-138060] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:21:25.037 [DEBUG] [Thread-138060] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:21:25.037 [DEBUG] [Thread-138060] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:21:25.037 [DEBUG] [Thread-138060] [transport.py] [_log()] client lang: <none>
2026-01-01T01:21:25.037 [DEBUG] [Thread-138060] [transport.py] [_log()] server lang: <none>
2026-01-01T01:21:25.037 [DEBUG] [Thread-138060] [transport.py] [_log()] kex follows: False
2026-01-01T01:21:25.037 [DEBUG] [Thread-138060] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:21:25.037 [DEBUG] [Thread-138060] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:21:25.037 [DEBUG] [Thread-138060] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:21:25.037 [DEBUG] [Thread-138060] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:21:25.037 [DEBUG] [Thread-138060] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:21:25.037 [DEBUG] [Thread-138060] [transport.py] [_log()] Compression: none
2026-01-01T01:21:25.037 [DEBUG] [Thread-138060] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:21:25.093 [DEBUG] [Thread-138060] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:21:25.094 [DEBUG] [Thread-138060] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:21:25.094 [DEBUG] [Thread-138060] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T01:21:25.095 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T01:21:25.095 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:21:25.150 [DEBUG] [Thread-138060] [transport.py] [_log()] userauth is OK
2026-01-01T01:21:25.150 [DEBUG] [Thread-138060] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:21:25.150 [DEBUG] [Thread-138060] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:21:25.150 [DEBUG] [Thread-138060] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T01:21:25.151 [DEBUG] [Thread-138060] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:21:25.175 [INFO] [Thread-138060] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:21:25.176 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T01:21:25.176 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:21:25.993 [DEBUG] [Thread-138060] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:21:25.994 [DEBUG] [Thread-138060] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:21:26.041 [DEBUG] [Thread-138060] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:21:26.041 [DEBUG] [Thread-138060] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:21:26.051 [DEBUG] [Thread-138060] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:21:26.060 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:21:26.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T01:21:26.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T01:21:26.078 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:21:26.079 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:21:26.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:21:26.087 [DEBUG] [Thread-138060] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:21:32.257 [DEBUG] [Thread-138062 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:21:47.310 [DEBUG] [Thread-138063 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:21:49.259 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:21:49.260 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:21:56.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T01:21:56.105 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T01:21:56.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T01:21:56.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 1, 21, 27), 3.21, 80.66, 0.0, 18.02, 13.96, 0, 1, 0, 2, 0, 0),)
2026-01-01T01:21:56.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 01:21:27
2026-01-01T01:21:56.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T01:21:57.124 [DEBUG] [Thread-138064] [transport.py] [_log()] starting thread (client mode): 0xb6b17f10
2026-01-01T01:21:57.124 [DEBUG] [Thread-138064] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:21:57.144 [DEBUG] [Thread-138064] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T01:21:57.144 [INFO] [Thread-138064] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T01:21:57.148 [DEBUG] [Thread-138064] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:21:57.148 [DEBUG] [Thread-138064] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T01:21:57.148 [DEBUG] [Thread-138064] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:21:57.148 [DEBUG] [Thread-138064] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:21:57.148 [DEBUG] [Thread-138064] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:21:57.148 [DEBUG] [Thread-138064] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:21:57.148 [DEBUG] [Thread-138064] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:21:57.148 [DEBUG] [Thread-138064] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:21:57.148 [DEBUG] [Thread-138064] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:21:57.148 [DEBUG] [Thread-138064] [transport.py] [_log()] client lang: <none>
2026-01-01T01:21:57.148 [DEBUG] [Thread-138064] [transport.py] [_log()] server lang: <none>
2026-01-01T01:21:57.149 [DEBUG] [Thread-138064] [transport.py] [_log()] kex follows: False
2026-01-01T01:21:57.149 [DEBUG] [Thread-138064] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:21:57.149 [DEBUG] [Thread-138064] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:21:57.149 [DEBUG] [Thread-138064] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:21:57.149 [DEBUG] [Thread-138064] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:21:57.149 [DEBUG] [Thread-138064] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:21:57.149 [DEBUG] [Thread-138064] [transport.py] [_log()] Compression: none
2026-01-01T01:21:57.149 [DEBUG] [Thread-138064] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:21:57.168 [DEBUG] [Thread-138064] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:21:57.168 [DEBUG] [Thread-138064] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:21:57.169 [DEBUG] [Thread-138064] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T01:21:57.170 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T01:21:57.170 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:21:57.172 [DEBUG] [Thread-138064] [transport.py] [_log()] userauth is OK
2026-01-01T01:21:57.172 [DEBUG] [Thread-138064] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:21:57.172 [DEBUG] [Thread-138064] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:21:57.172 [DEBUG] [Thread-138064] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T01:21:57.172 [DEBUG] [Thread-138064] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:21:57.209 [INFO] [Thread-138064] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:21:57.209 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:21:57.827 [DEBUG] [Thread-138064] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:21:57.828 [DEBUG] [Thread-138064] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:21:57.828 [DEBUG] [Thread-138064] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T01:21:57.869 [DEBUG] [Thread-138064] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:21:57.869 [DEBUG] [Thread-138064] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:21:57.873 [DEBUG] [Thread-138064] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:21:57.884 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:21:57.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T01:21:57.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T01:21:57.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T01:21:57.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:21:57.896 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T01:21:57.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:21:57.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:21:57.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T01:21:57.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.973050 -999.00  +14.20   7.73     82  +11.30 1 2 1 2 1     0    0 2.97 -0.85 zN.SW 11.6 7.7 214.9 13.0 15.3 -18.3 15.1 -18.9 14.8 -18.1 15.2 -18.3
2026-01-01T01:21:57.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T01:21:57.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T01:21:57.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.973050
2026-01-01T01:21:57.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T01:21:57.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T01:21:57.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T01:21:57.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T01:21:57.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T01:21:57.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T01:21:27', tmtdew=3.21, humidity=80.66, cloud=0.0, wind=18.02, temperature=13.96, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T23:21:11.520', atlas_cloud=2, atlas_rain=1, zp_data=[0.9227499999999997, 0.8097500000000011, 0.5992499999999996, 0.42549999999999955, 0.5795000000000003, 0.8262500000000008, 0.5999999999999996, 0.5562500000000004, 0.46499999999999986, 0.7140000000000004, 0.37324999999999875, 0.2699999999999996, 0.1720000000000006, -0.2547499999999996, 0.2345000000000006, nan, 0.5017499999999995, 1.0164999999999997, 0.27699999999999925, 0.2342499999999994, 0.2629999999999981, -0.034250000000000114, -1.4022499999999987, nan, nan, 0.5779999999999994, 0.29574999999999996, 0.5345000000000004, 0.20550000000000068, -1.241999999999999, -1.5664999999999996, -0.9879999999999995, 0.699749999999999], zp_timestamp='2025-12-31T23:20:00')
2026-01-01T01:21:57.899 [DEBUG] [Thread-138064] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:21:57.982 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T01:21:57.994 [DEBUG] [Thread-138067] [transport.py] [_log()] starting thread (client mode): 0xb95f3d30
2026-01-01T01:21:57.994 [DEBUG] [Thread-138067] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:21:58.013 [DEBUG] [Thread-138067] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T01:21:58.013 [INFO] [Thread-138067] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T01:21:58.020 [DEBUG] [Thread-138067] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:21:58.021 [DEBUG] [Thread-138067] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T01:21:58.021 [DEBUG] [Thread-138067] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:21:58.021 [DEBUG] [Thread-138067] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:21:58.021 [DEBUG] [Thread-138067] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:21:58.021 [DEBUG] [Thread-138067] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:21:58.021 [DEBUG] [Thread-138067] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:21:58.021 [DEBUG] [Thread-138067] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:21:58.021 [DEBUG] [Thread-138067] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:21:58.021 [DEBUG] [Thread-138067] [transport.py] [_log()] client lang: <none>
2026-01-01T01:21:58.021 [DEBUG] [Thread-138067] [transport.py] [_log()] server lang: <none>
2026-01-01T01:21:58.021 [DEBUG] [Thread-138067] [transport.py] [_log()] kex follows: False
2026-01-01T01:21:58.021 [DEBUG] [Thread-138067] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:21:58.021 [DEBUG] [Thread-138067] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:21:58.021 [DEBUG] [Thread-138067] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:21:58.021 [DEBUG] [Thread-138067] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:21:58.022 [DEBUG] [Thread-138067] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:21:58.022 [DEBUG] [Thread-138067] [transport.py] [_log()] Compression: none
2026-01-01T01:21:58.022 [DEBUG] [Thread-138067] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:21:58.076 [DEBUG] [Thread-138067] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:21:58.077 [DEBUG] [Thread-138067] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:21:58.077 [DEBUG] [Thread-138067] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T01:21:58.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T01:21:58.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:21:58.134 [DEBUG] [Thread-138067] [transport.py] [_log()] userauth is OK
2026-01-01T01:21:58.134 [DEBUG] [Thread-138067] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:21:58.134 [DEBUG] [Thread-138067] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:21:58.134 [DEBUG] [Thread-138067] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T01:21:58.134 [DEBUG] [Thread-138067] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:21:58.158 [INFO] [Thread-138067] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:21:58.159 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T01:21:58.159 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:21:58.966 [DEBUG] [Thread-138067] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:21:58.966 [DEBUG] [Thread-138067] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:21:59.014 [DEBUG] [Thread-138067] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:21:59.014 [DEBUG] [Thread-138067] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:21:59.024 [DEBUG] [Thread-138067] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:21:59.034 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:21:59.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T01:21:59.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T01:21:59.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:21:59.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:21:59.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:21:59.061 [DEBUG] [Thread-138067] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:22:00.197 [DEBUG] [Thread-138069 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:22:02.345 [DEBUG] [Thread-138070 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:22:17.404 [DEBUG] [Thread-138071 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:22:29.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T01:22:29.081 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T01:22:29.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T01:22:29.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 1, 21, 59), 3.21, 81.21, 0.0, 20.13, 13.97, 0, 1, 0, 2, 0, 0),)
2026-01-01T01:22:29.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 01:21:59
2026-01-01T01:22:29.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T01:22:30.081 [DEBUG] [Thread-138072] [transport.py] [_log()] starting thread (client mode): 0xb95f0dc0
2026-01-01T01:22:30.081 [DEBUG] [Thread-138072] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:22:30.102 [DEBUG] [Thread-138072] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T01:22:30.103 [INFO] [Thread-138072] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T01:22:30.106 [DEBUG] [Thread-138072] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:22:30.106 [DEBUG] [Thread-138072] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T01:22:30.106 [DEBUG] [Thread-138072] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:22:30.106 [DEBUG] [Thread-138072] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:22:30.106 [DEBUG] [Thread-138072] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:22:30.106 [DEBUG] [Thread-138072] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:22:30.106 [DEBUG] [Thread-138072] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:22:30.106 [DEBUG] [Thread-138072] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:22:30.106 [DEBUG] [Thread-138072] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:22:30.106 [DEBUG] [Thread-138072] [transport.py] [_log()] client lang: <none>
2026-01-01T01:22:30.106 [DEBUG] [Thread-138072] [transport.py] [_log()] server lang: <none>
2026-01-01T01:22:30.107 [DEBUG] [Thread-138072] [transport.py] [_log()] kex follows: False
2026-01-01T01:22:30.107 [DEBUG] [Thread-138072] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:22:30.107 [DEBUG] [Thread-138072] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:22:30.107 [DEBUG] [Thread-138072] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:22:30.107 [DEBUG] [Thread-138072] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:22:30.107 [DEBUG] [Thread-138072] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:22:30.107 [DEBUG] [Thread-138072] [transport.py] [_log()] Compression: none
2026-01-01T01:22:30.107 [DEBUG] [Thread-138072] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:22:30.126 [DEBUG] [Thread-138072] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:22:30.126 [DEBUG] [Thread-138072] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:22:30.127 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T01:22:30.127 [DEBUG] [Thread-138072] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T01:22:30.128 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:22:30.129 [DEBUG] [Thread-138072] [transport.py] [_log()] userauth is OK
2026-01-01T01:22:30.130 [DEBUG] [Thread-138072] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:22:30.130 [DEBUG] [Thread-138072] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:22:30.130 [DEBUG] [Thread-138072] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T01:22:30.130 [DEBUG] [Thread-138072] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:22:30.164 [INFO] [Thread-138072] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:22:30.165 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:22:30.850 [DEBUG] [Thread-138072] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:22:30.851 [DEBUG] [Thread-138072] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:22:30.851 [DEBUG] [Thread-138072] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T01:22:30.892 [DEBUG] [Thread-138072] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:22:30.892 [DEBUG] [Thread-138072] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:22:30.896 [DEBUG] [Thread-138072] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:22:30.909 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:22:30.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T01:22:30.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T01:22:30.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T01:22:30.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:22:30.920 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T01:22:30.920 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:22:30.921 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:22:30.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T01:22:30.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.973397 -999.00  +14.10  16.50     82  +11.20 1 2 1 2 1     0    0 2.95 -1.22 ZNeSW 15.8 16.5 209.2 21.9 15.3 -18.7 15.1 -19.6 14.9 -18.5 15.2 -18.8
2026-01-01T01:22:30.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T01:22:30.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T01:22:30.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.973397
2026-01-01T01:22:30.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T01:22:30.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T01:22:30.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T01:22:30.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T01:22:30.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T01:22:30.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T01:21:59', tmtdew=3.21, humidity=81.21, cloud=0.0, wind=20.13, temperature=13.97, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T23:21:41.501', atlas_cloud=2, atlas_rain=1, zp_data=[0.9227499999999997, 0.8097500000000011, 0.5992499999999996, 0.42549999999999955, 0.5795000000000003, 0.8262500000000008, 0.5999999999999996, 0.5562500000000004, 0.46499999999999986, 0.7140000000000004, 0.37324999999999875, 0.2699999999999996, 0.1720000000000006, -0.2547499999999996, 0.2345000000000006, nan, 0.5017499999999995, 1.0164999999999997, 0.27699999999999925, 0.2342499999999994, 0.2629999999999981, -0.034250000000000114, -1.4022499999999987, nan, nan, 0.5779999999999994, 0.29574999999999996, 0.5345000000000004, 0.20550000000000068, -1.241999999999999, -1.5664999999999996, -0.9879999999999995, 0.699749999999999], zp_timestamp='2025-12-31T23:20:00')
2026-01-01T01:22:30.923 [DEBUG] [Thread-138072] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:22:31.016 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T01:22:31.028 [DEBUG] [Thread-138075] [transport.py] [_log()] starting thread (client mode): 0xb6b16620
2026-01-01T01:22:31.028 [DEBUG] [Thread-138075] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:22:31.043 [DEBUG] [Thread-138075] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T01:22:31.044 [INFO] [Thread-138075] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T01:22:31.051 [DEBUG] [Thread-138075] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:22:31.051 [DEBUG] [Thread-138075] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T01:22:31.052 [DEBUG] [Thread-138075] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:22:31.052 [DEBUG] [Thread-138075] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:22:31.052 [DEBUG] [Thread-138075] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:22:31.052 [DEBUG] [Thread-138075] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:22:31.052 [DEBUG] [Thread-138075] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:22:31.052 [DEBUG] [Thread-138075] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:22:31.052 [DEBUG] [Thread-138075] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:22:31.052 [DEBUG] [Thread-138075] [transport.py] [_log()] client lang: <none>
2026-01-01T01:22:31.053 [DEBUG] [Thread-138075] [transport.py] [_log()] server lang: <none>
2026-01-01T01:22:31.053 [DEBUG] [Thread-138075] [transport.py] [_log()] kex follows: False
2026-01-01T01:22:31.053 [DEBUG] [Thread-138075] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:22:31.053 [DEBUG] [Thread-138075] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:22:31.053 [DEBUG] [Thread-138075] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:22:31.053 [DEBUG] [Thread-138075] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:22:31.053 [DEBUG] [Thread-138075] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:22:31.054 [DEBUG] [Thread-138075] [transport.py] [_log()] Compression: none
2026-01-01T01:22:31.054 [DEBUG] [Thread-138075] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:22:31.112 [DEBUG] [Thread-138075] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:22:31.113 [DEBUG] [Thread-138075] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:22:31.113 [DEBUG] [Thread-138075] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T01:22:31.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T01:22:31.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:22:31.170 [DEBUG] [Thread-138075] [transport.py] [_log()] userauth is OK
2026-01-01T01:22:31.171 [DEBUG] [Thread-138075] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:22:31.171 [DEBUG] [Thread-138075] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:22:31.171 [DEBUG] [Thread-138075] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T01:22:31.171 [DEBUG] [Thread-138075] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:22:31.190 [INFO] [Thread-138075] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:22:31.190 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T01:22:31.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:22:32.066 [DEBUG] [Thread-138075] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:22:32.066 [DEBUG] [Thread-138075] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:22:32.113 [DEBUG] [Thread-138075] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:22:32.113 [DEBUG] [Thread-138075] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:22:32.122 [DEBUG] [Thread-138075] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:22:32.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:22:32.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T01:22:32.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T01:22:32.146 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:22:32.146 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:22:32.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:22:32.154 [DEBUG] [Thread-138075] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:22:32.437 [DEBUG] [Thread-138077 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:22:47.482 [DEBUG] [Thread-138078 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:22:49.461 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:22:49.462 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:23:00.254 [DEBUG] [Thread-138079 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:23:02.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T01:23:02.158 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T01:23:02.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T01:23:02.514 [DEBUG] [Thread-138080 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:23:02.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 1, 22, 31), 3.21, 81.2, 0.0, 20.12, 13.94, 0, 1, 0, 2, 0, 0),)
2026-01-01T01:23:02.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 01:22:31
2026-01-01T01:23:03.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T01:23:03.151 [DEBUG] [Thread-138081] [transport.py] [_log()] starting thread (client mode): 0xb6b61630
2026-01-01T01:23:03.151 [DEBUG] [Thread-138081] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:23:03.171 [DEBUG] [Thread-138081] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T01:23:03.172 [INFO] [Thread-138081] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T01:23:03.175 [DEBUG] [Thread-138081] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:23:03.175 [DEBUG] [Thread-138081] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T01:23:03.175 [DEBUG] [Thread-138081] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:23:03.175 [DEBUG] [Thread-138081] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:23:03.175 [DEBUG] [Thread-138081] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:23:03.175 [DEBUG] [Thread-138081] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:23:03.175 [DEBUG] [Thread-138081] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:23:03.175 [DEBUG] [Thread-138081] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:23:03.175 [DEBUG] [Thread-138081] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:23:03.175 [DEBUG] [Thread-138081] [transport.py] [_log()] client lang: <none>
2026-01-01T01:23:03.175 [DEBUG] [Thread-138081] [transport.py] [_log()] server lang: <none>
2026-01-01T01:23:03.175 [DEBUG] [Thread-138081] [transport.py] [_log()] kex follows: False
2026-01-01T01:23:03.175 [DEBUG] [Thread-138081] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:23:03.175 [DEBUG] [Thread-138081] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:23:03.175 [DEBUG] [Thread-138081] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:23:03.175 [DEBUG] [Thread-138081] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:23:03.176 [DEBUG] [Thread-138081] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:23:03.176 [DEBUG] [Thread-138081] [transport.py] [_log()] Compression: none
2026-01-01T01:23:03.176 [DEBUG] [Thread-138081] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:23:03.193 [DEBUG] [Thread-138081] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:23:03.193 [DEBUG] [Thread-138081] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:23:03.194 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T01:23:03.194 [DEBUG] [Thread-138081] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T01:23:03.195 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:23:03.238 [DEBUG] [Thread-138081] [transport.py] [_log()] userauth is OK
2026-01-01T01:23:03.238 [DEBUG] [Thread-138081] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:23:03.238 [DEBUG] [Thread-138081] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:23:03.238 [DEBUG] [Thread-138081] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T01:23:03.238 [DEBUG] [Thread-138081] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:23:03.276 [INFO] [Thread-138081] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:23:03.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:23:03.899 [DEBUG] [Thread-138081] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:23:03.899 [DEBUG] [Thread-138081] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:23:03.899 [DEBUG] [Thread-138081] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T01:23:03.940 [DEBUG] [Thread-138081] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:23:03.940 [DEBUG] [Thread-138081] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:23:03.943 [DEBUG] [Thread-138081] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:23:03.956 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:23:03.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T01:23:03.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T01:23:03.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T01:23:03.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:23:03.963 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T01:23:03.963 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:23:03.963 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:23:03.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T01:23:03.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.973744 -999.00  +14.10  11.70     82  +11.20 1 2 1 2 1     0    0 2.92 -1.42 ZNeSW 5.6 11.7 194.9 20.4 15.2 -19.0 15.1 -19.5 14.8 -18.6 15.2 -19.1
2026-01-01T01:23:03.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T01:23:03.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T01:23:03.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.973744
2026-01-01T01:23:03.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T01:23:03.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T01:23:03.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T01:23:03.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T01:23:03.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T01:23:03.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T01:22:31', tmtdew=3.21, humidity=81.2, cloud=0.0, wind=20.12, temperature=13.94, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T23:22:11.482', atlas_cloud=2, atlas_rain=1, zp_data=[0.9227499999999997, 0.8097500000000011, 0.5992499999999996, 0.42549999999999955, 0.5795000000000003, 0.8262500000000008, 0.5999999999999996, 0.5562500000000004, 0.46499999999999986, 0.7140000000000004, 0.37324999999999875, 0.2699999999999996, 0.1720000000000006, -0.2547499999999996, 0.2345000000000006, nan, 0.5017499999999995, 1.0164999999999997, 0.27699999999999925, 0.2342499999999994, 0.2629999999999981, -0.034250000000000114, -1.4022499999999987, nan, nan, 0.5779999999999994, 0.29574999999999996, 0.5345000000000004, 0.20550000000000068, -1.241999999999999, -1.5664999999999996, -0.9879999999999995, 0.699749999999999], zp_timestamp='2025-12-31T23:20:00')
2026-01-01T01:23:03.964 [DEBUG] [Thread-138081] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:23:04.037 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T01:23:04.049 [DEBUG] [Thread-138084] [transport.py] [_log()] starting thread (client mode): 0xb6b17280
2026-01-01T01:23:04.049 [DEBUG] [Thread-138084] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:23:04.064 [DEBUG] [Thread-138084] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T01:23:04.064 [INFO] [Thread-138084] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T01:23:04.071 [DEBUG] [Thread-138084] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:23:04.071 [DEBUG] [Thread-138084] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T01:23:04.071 [DEBUG] [Thread-138084] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:23:04.071 [DEBUG] [Thread-138084] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:23:04.071 [DEBUG] [Thread-138084] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:23:04.071 [DEBUG] [Thread-138084] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:23:04.071 [DEBUG] [Thread-138084] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:23:04.071 [DEBUG] [Thread-138084] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:23:04.071 [DEBUG] [Thread-138084] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:23:04.071 [DEBUG] [Thread-138084] [transport.py] [_log()] client lang: <none>
2026-01-01T01:23:04.072 [DEBUG] [Thread-138084] [transport.py] [_log()] server lang: <none>
2026-01-01T01:23:04.072 [DEBUG] [Thread-138084] [transport.py] [_log()] kex follows: False
2026-01-01T01:23:04.072 [DEBUG] [Thread-138084] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:23:04.072 [DEBUG] [Thread-138084] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:23:04.072 [DEBUG] [Thread-138084] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:23:04.072 [DEBUG] [Thread-138084] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:23:04.072 [DEBUG] [Thread-138084] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:23:04.072 [DEBUG] [Thread-138084] [transport.py] [_log()] Compression: none
2026-01-01T01:23:04.072 [DEBUG] [Thread-138084] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:23:04.130 [DEBUG] [Thread-138084] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:23:04.130 [DEBUG] [Thread-138084] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:23:04.130 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T01:23:04.131 [DEBUG] [Thread-138084] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T01:23:04.131 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:23:04.186 [DEBUG] [Thread-138084] [transport.py] [_log()] userauth is OK
2026-01-01T01:23:04.186 [DEBUG] [Thread-138084] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:23:04.186 [DEBUG] [Thread-138084] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:23:04.186 [DEBUG] [Thread-138084] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T01:23:04.186 [DEBUG] [Thread-138084] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:23:04.200 [INFO] [Thread-138084] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:23:04.200 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T01:23:04.200 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:23:05.040 [DEBUG] [Thread-138084] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:23:05.040 [DEBUG] [Thread-138084] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:23:05.087 [DEBUG] [Thread-138084] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:23:05.087 [DEBUG] [Thread-138084] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:23:05.096 [DEBUG] [Thread-138084] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:23:05.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:23:05.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T01:23:05.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T01:23:05.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:23:05.121 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:23:05.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:23:05.128 [DEBUG] [Thread-138084] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:23:17.545 [DEBUG] [Thread-138086 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:23:32.594 [DEBUG] [Thread-138087 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:23:35.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T01:23:35.137 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T01:23:35.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T01:23:35.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 1, 23, 3), 3.21, 81.16, 0.0, 19.6, 13.92, 0, 1, 0, 2, 0, 0),)
2026-01-01T01:23:35.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 01:23:03
2026-01-01T01:23:36.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T01:23:36.151 [DEBUG] [Thread-138088] [transport.py] [_log()] starting thread (client mode): 0xb95f1360
2026-01-01T01:23:36.151 [DEBUG] [Thread-138088] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:23:36.172 [DEBUG] [Thread-138088] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T01:23:36.172 [INFO] [Thread-138088] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T01:23:36.175 [DEBUG] [Thread-138088] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:23:36.175 [DEBUG] [Thread-138088] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T01:23:36.175 [DEBUG] [Thread-138088] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:23:36.175 [DEBUG] [Thread-138088] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:23:36.175 [DEBUG] [Thread-138088] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:23:36.175 [DEBUG] [Thread-138088] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:23:36.175 [DEBUG] [Thread-138088] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:23:36.175 [DEBUG] [Thread-138088] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:23:36.175 [DEBUG] [Thread-138088] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:23:36.175 [DEBUG] [Thread-138088] [transport.py] [_log()] client lang: <none>
2026-01-01T01:23:36.175 [DEBUG] [Thread-138088] [transport.py] [_log()] server lang: <none>
2026-01-01T01:23:36.176 [DEBUG] [Thread-138088] [transport.py] [_log()] kex follows: False
2026-01-01T01:23:36.176 [DEBUG] [Thread-138088] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:23:36.176 [DEBUG] [Thread-138088] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:23:36.176 [DEBUG] [Thread-138088] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:23:36.176 [DEBUG] [Thread-138088] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:23:36.176 [DEBUG] [Thread-138088] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:23:36.176 [DEBUG] [Thread-138088] [transport.py] [_log()] Compression: none
2026-01-01T01:23:36.176 [DEBUG] [Thread-138088] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:23:36.191 [DEBUG] [Thread-138088] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:23:36.191 [DEBUG] [Thread-138088] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:23:36.191 [DEBUG] [Thread-138088] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T01:23:36.191 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T01:23:36.192 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:23:36.192 [DEBUG] [Thread-138088] [transport.py] [_log()] userauth is OK
2026-01-01T01:23:36.192 [DEBUG] [Thread-138088] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:23:36.192 [DEBUG] [Thread-138088] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:23:36.192 [DEBUG] [Thread-138088] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T01:23:36.192 [DEBUG] [Thread-138088] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:23:36.211 [INFO] [Thread-138088] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:23:36.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:23:36.849 [DEBUG] [Thread-138088] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:23:36.849 [DEBUG] [Thread-138088] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:23:36.850 [DEBUG] [Thread-138088] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T01:23:36.891 [DEBUG] [Thread-138088] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:23:36.891 [DEBUG] [Thread-138088] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:23:36.893 [DEBUG] [Thread-138088] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:23:36.904 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:23:36.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T01:23:36.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T01:23:36.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T01:23:36.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:23:36.909 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T01:23:36.909 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:23:36.909 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:23:36.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T01:23:36.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.974091 -999.00  +14.10  11.42     82  +11.20 1 1 1 2 1     0    0 2.88 -2.08 ZNESW 14.1 11.4 246.0 21.0 15.2 -19.6 15.0 -19.8 14.8 -18.9 15.2 -19.5
2026-01-01T01:23:36.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T01:23:36.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T01:23:36.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.974091
2026-01-01T01:23:36.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T01:23:36.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T01:23:36.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T01:23:36.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T01:23:36.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T01:23:36.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T01:23:03', tmtdew=3.21, humidity=81.16, cloud=0.0, wind=19.6, temperature=13.92, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T23:22:41.462', atlas_cloud=1, atlas_rain=1, zp_data=[0.9227499999999997, 0.8097500000000011, 0.5992499999999996, 0.42549999999999955, 0.5795000000000003, 0.8262500000000008, 0.5999999999999996, 0.5562500000000004, 0.46499999999999986, 0.7140000000000004, 0.37324999999999875, 0.2699999999999996, 0.1720000000000006, -0.2547499999999996, 0.2345000000000006, nan, 0.5017499999999995, 1.0164999999999997, 0.27699999999999925, 0.2342499999999994, 0.2629999999999981, -0.034250000000000114, -1.4022499999999987, nan, nan, 0.5779999999999994, 0.29574999999999996, 0.5345000000000004, 0.20550000000000068, -1.241999999999999, -1.5664999999999996, -0.9879999999999995, 0.699749999999999], zp_timestamp='2025-12-31T23:20:00')
2026-01-01T01:23:36.911 [DEBUG] [Thread-138088] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:23:36.985 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T01:23:36.997 [DEBUG] [Thread-138091] [transport.py] [_log()] starting thread (client mode): 0xb95b16f0
2026-01-01T01:23:36.997 [DEBUG] [Thread-138091] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:23:37.013 [DEBUG] [Thread-138091] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T01:23:37.013 [INFO] [Thread-138091] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T01:23:37.020 [DEBUG] [Thread-138091] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:23:37.020 [DEBUG] [Thread-138091] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T01:23:37.020 [DEBUG] [Thread-138091] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:23:37.020 [DEBUG] [Thread-138091] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:23:37.020 [DEBUG] [Thread-138091] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:23:37.020 [DEBUG] [Thread-138091] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:23:37.020 [DEBUG] [Thread-138091] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:23:37.020 [DEBUG] [Thread-138091] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:23:37.020 [DEBUG] [Thread-138091] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:23:37.020 [DEBUG] [Thread-138091] [transport.py] [_log()] client lang: <none>
2026-01-01T01:23:37.020 [DEBUG] [Thread-138091] [transport.py] [_log()] server lang: <none>
2026-01-01T01:23:37.020 [DEBUG] [Thread-138091] [transport.py] [_log()] kex follows: False
2026-01-01T01:23:37.020 [DEBUG] [Thread-138091] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:23:37.020 [DEBUG] [Thread-138091] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:23:37.020 [DEBUG] [Thread-138091] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:23:37.020 [DEBUG] [Thread-138091] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:23:37.021 [DEBUG] [Thread-138091] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:23:37.021 [DEBUG] [Thread-138091] [transport.py] [_log()] Compression: none
2026-01-01T01:23:37.021 [DEBUG] [Thread-138091] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:23:37.077 [DEBUG] [Thread-138091] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:23:37.077 [DEBUG] [Thread-138091] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:23:37.077 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T01:23:37.077 [DEBUG] [Thread-138091] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T01:23:37.077 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:23:37.137 [DEBUG] [Thread-138091] [transport.py] [_log()] userauth is OK
2026-01-01T01:23:37.137 [DEBUG] [Thread-138091] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:23:37.138 [DEBUG] [Thread-138091] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:23:37.138 [DEBUG] [Thread-138091] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T01:23:37.138 [DEBUG] [Thread-138091] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:23:37.152 [INFO] [Thread-138091] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:23:37.152 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T01:23:37.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:23:37.983 [DEBUG] [Thread-138091] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:23:37.983 [DEBUG] [Thread-138091] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:23:38.031 [DEBUG] [Thread-138091] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:23:38.031 [DEBUG] [Thread-138091] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:23:38.041 [DEBUG] [Thread-138091] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:23:38.050 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:23:38.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T01:23:38.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T01:23:38.068 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:23:38.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:23:38.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:23:38.076 [DEBUG] [Thread-138091] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:23:47.634 [DEBUG] [Thread-138093 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:23:49.672 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:23:49.673 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:24:00.310 [DEBUG] [Thread-138094 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:24:02.685 [DEBUG] [Thread-138095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:24:08.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T01:24:08.099 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T01:24:08.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T01:24:08.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 1, 23, 35), 3.22, 80.63, 0.0, 15.93, 13.84, 0, 1, 0, 2, 0, 0),)
2026-01-01T01:24:08.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 01:23:35
2026-01-01T01:24:09.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T01:24:09.159 [DEBUG] [Thread-138096] [transport.py] [_log()] starting thread (client mode): 0xb95b2740
2026-01-01T01:24:09.159 [DEBUG] [Thread-138096] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:24:09.175 [DEBUG] [Thread-138096] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T01:24:09.175 [INFO] [Thread-138096] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T01:24:09.179 [DEBUG] [Thread-138096] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:24:09.179 [DEBUG] [Thread-138096] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T01:24:09.179 [DEBUG] [Thread-138096] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:24:09.179 [DEBUG] [Thread-138096] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:24:09.179 [DEBUG] [Thread-138096] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:24:09.179 [DEBUG] [Thread-138096] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:24:09.179 [DEBUG] [Thread-138096] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:24:09.179 [DEBUG] [Thread-138096] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:24:09.179 [DEBUG] [Thread-138096] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:24:09.179 [DEBUG] [Thread-138096] [transport.py] [_log()] client lang: <none>
2026-01-01T01:24:09.179 [DEBUG] [Thread-138096] [transport.py] [_log()] server lang: <none>
2026-01-01T01:24:09.179 [DEBUG] [Thread-138096] [transport.py] [_log()] kex follows: False
2026-01-01T01:24:09.179 [DEBUG] [Thread-138096] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:24:09.179 [DEBUG] [Thread-138096] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:24:09.179 [DEBUG] [Thread-138096] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:24:09.179 [DEBUG] [Thread-138096] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:24:09.179 [DEBUG] [Thread-138096] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:24:09.179 [DEBUG] [Thread-138096] [transport.py] [_log()] Compression: none
2026-01-01T01:24:09.179 [DEBUG] [Thread-138096] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:24:09.193 [DEBUG] [Thread-138096] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:24:09.193 [DEBUG] [Thread-138096] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:24:09.193 [DEBUG] [Thread-138096] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T01:24:09.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T01:24:09.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:24:09.194 [DEBUG] [Thread-138096] [transport.py] [_log()] userauth is OK
2026-01-01T01:24:09.194 [DEBUG] [Thread-138096] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:24:09.194 [DEBUG] [Thread-138096] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:24:09.194 [DEBUG] [Thread-138096] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T01:24:09.194 [DEBUG] [Thread-138096] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:24:09.220 [INFO] [Thread-138096] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:24:09.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:24:09.809 [DEBUG] [Thread-138096] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:24:09.809 [DEBUG] [Thread-138096] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:24:09.809 [DEBUG] [Thread-138096] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T01:24:09.851 [DEBUG] [Thread-138096] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:24:09.851 [DEBUG] [Thread-138096] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:24:09.854 [DEBUG] [Thread-138096] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:24:09.864 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:24:09.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T01:24:09.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T01:24:09.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T01:24:09.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:24:09.875 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T01:24:09.875 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:24:09.875 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:24:09.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T01:24:09.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.974786 -999.00  +14.10   9.12     82  +11.10 1 1 1 2 1     0    0 2.91 -2.22 ZNESW 7.9 9.1 204.7 13.0 15.2 -20.1 15.0 -20.3 14.8 -18.9 15.1 -19.7
2026-01-01T01:24:09.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T01:24:09.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T01:24:09.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.974786
2026-01-01T01:24:09.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T01:24:09.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T01:24:09.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T01:24:09.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T01:24:09.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T01:24:09.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T01:23:35', tmtdew=3.22, humidity=80.63, cloud=0.0, wind=15.93, temperature=13.84, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T23:23:41.510', atlas_cloud=1, atlas_rain=1, zp_data=[0.9227499999999997, 0.8097500000000011, 0.5992499999999996, 0.42549999999999955, 0.5795000000000003, 0.8262500000000008, 0.5999999999999996, 0.5562500000000004, 0.46499999999999986, 0.7140000000000004, 0.37324999999999875, 0.2699999999999996, 0.1720000000000006, -0.2547499999999996, 0.2345000000000006, nan, 0.5017499999999995, 1.0164999999999997, 0.27699999999999925, 0.2342499999999994, 0.2629999999999981, -0.034250000000000114, -1.4022499999999987, nan, nan, 0.5779999999999994, 0.29574999999999996, 0.5345000000000004, 0.20550000000000068, -1.241999999999999, -1.5664999999999996, -0.9879999999999995, 0.699749999999999], zp_timestamp='2025-12-31T23:20:00')
2026-01-01T01:24:09.877 [DEBUG] [Thread-138096] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:24:09.961 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T01:24:09.977 [DEBUG] [Thread-138099] [transport.py] [_log()] starting thread (client mode): 0xb95b3280
2026-01-01T01:24:09.977 [DEBUG] [Thread-138099] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:24:09.993 [DEBUG] [Thread-138099] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T01:24:09.993 [INFO] [Thread-138099] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T01:24:10.001 [DEBUG] [Thread-138099] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:24:10.001 [DEBUG] [Thread-138099] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T01:24:10.001 [DEBUG] [Thread-138099] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:24:10.001 [DEBUG] [Thread-138099] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:24:10.001 [DEBUG] [Thread-138099] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:24:10.001 [DEBUG] [Thread-138099] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:24:10.001 [DEBUG] [Thread-138099] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:24:10.001 [DEBUG] [Thread-138099] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:24:10.001 [DEBUG] [Thread-138099] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:24:10.001 [DEBUG] [Thread-138099] [transport.py] [_log()] client lang: <none>
2026-01-01T01:24:10.001 [DEBUG] [Thread-138099] [transport.py] [_log()] server lang: <none>
2026-01-01T01:24:10.002 [DEBUG] [Thread-138099] [transport.py] [_log()] kex follows: False
2026-01-01T01:24:10.002 [DEBUG] [Thread-138099] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:24:10.002 [DEBUG] [Thread-138099] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:24:10.002 [DEBUG] [Thread-138099] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:24:10.002 [DEBUG] [Thread-138099] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:24:10.002 [DEBUG] [Thread-138099] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:24:10.002 [DEBUG] [Thread-138099] [transport.py] [_log()] Compression: none
2026-01-01T01:24:10.002 [DEBUG] [Thread-138099] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:24:10.059 [DEBUG] [Thread-138099] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:24:10.060 [DEBUG] [Thread-138099] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:24:10.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T01:24:10.061 [DEBUG] [Thread-138099] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T01:24:10.061 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:24:10.115 [DEBUG] [Thread-138099] [transport.py] [_log()] userauth is OK
2026-01-01T01:24:10.115 [DEBUG] [Thread-138099] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:24:10.116 [DEBUG] [Thread-138099] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:24:10.116 [DEBUG] [Thread-138099] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T01:24:10.116 [DEBUG] [Thread-138099] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:24:10.134 [INFO] [Thread-138099] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:24:10.134 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T01:24:10.135 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:24:10.943 [DEBUG] [Thread-138099] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:24:10.944 [DEBUG] [Thread-138099] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:24:10.992 [DEBUG] [Thread-138099] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:24:10.992 [DEBUG] [Thread-138099] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:24:11.001 [DEBUG] [Thread-138099] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:24:11.011 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:24:11.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T01:24:11.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T01:24:11.029 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:24:11.029 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:24:11.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:24:11.039 [DEBUG] [Thread-138099] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:24:17.714 [DEBUG] [Thread-138101 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:24:32.767 [DEBUG] [Thread-138102 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:24:41.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T01:24:41.060 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T01:24:41.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T01:24:41.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 1, 24, 7), 3.26, 80.43, 0.0, 18.26, 13.79, 0, 1, 0, 2, 0, 0),)
2026-01-01T01:24:41.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 01:24:07
2026-01-01T01:24:41.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T01:24:42.131 [DEBUG] [Thread-138103] [transport.py] [_log()] starting thread (client mode): 0xb95b1210
2026-01-01T01:24:42.131 [DEBUG] [Thread-138103] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:24:42.152 [DEBUG] [Thread-138103] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T01:24:42.152 [INFO] [Thread-138103] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T01:24:42.155 [DEBUG] [Thread-138103] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:24:42.155 [DEBUG] [Thread-138103] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T01:24:42.155 [DEBUG] [Thread-138103] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:24:42.155 [DEBUG] [Thread-138103] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:24:42.155 [DEBUG] [Thread-138103] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:24:42.155 [DEBUG] [Thread-138103] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:24:42.155 [DEBUG] [Thread-138103] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:24:42.155 [DEBUG] [Thread-138103] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:24:42.155 [DEBUG] [Thread-138103] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:24:42.155 [DEBUG] [Thread-138103] [transport.py] [_log()] client lang: <none>
2026-01-01T01:24:42.155 [DEBUG] [Thread-138103] [transport.py] [_log()] server lang: <none>
2026-01-01T01:24:42.155 [DEBUG] [Thread-138103] [transport.py] [_log()] kex follows: False
2026-01-01T01:24:42.155 [DEBUG] [Thread-138103] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:24:42.155 [DEBUG] [Thread-138103] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:24:42.155 [DEBUG] [Thread-138103] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:24:42.155 [DEBUG] [Thread-138103] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:24:42.155 [DEBUG] [Thread-138103] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:24:42.155 [DEBUG] [Thread-138103] [transport.py] [_log()] Compression: none
2026-01-01T01:24:42.155 [DEBUG] [Thread-138103] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:24:42.170 [DEBUG] [Thread-138103] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:24:42.171 [DEBUG] [Thread-138103] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:24:42.171 [DEBUG] [Thread-138103] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T01:24:42.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T01:24:42.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:24:42.214 [DEBUG] [Thread-138103] [transport.py] [_log()] userauth is OK
2026-01-01T01:24:42.214 [DEBUG] [Thread-138103] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:24:42.214 [DEBUG] [Thread-138103] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:24:42.214 [DEBUG] [Thread-138103] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T01:24:42.214 [DEBUG] [Thread-138103] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:24:42.243 [INFO] [Thread-138103] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:24:42.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:24:42.860 [DEBUG] [Thread-138103] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:24:42.860 [DEBUG] [Thread-138103] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:24:42.861 [DEBUG] [Thread-138103] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T01:24:42.901 [DEBUG] [Thread-138103] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:24:42.902 [DEBUG] [Thread-138103] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:24:42.904 [DEBUG] [Thread-138103] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:24:42.912 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:24:42.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T01:24:42.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T01:24:42.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T01:24:42.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:24:42.921 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T01:24:42.921 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:24:42.921 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:24:42.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T01:24:42.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.975133 -999.00  +14.10  16.98     82  +11.10 1 1 1 2 1     0    0 2.91 -2.70 ZNESW 15.6 17.0 204.4 20.9 15.2 -20.3 15.0 -20.6 14.8 -19.2 15.2 -20.0
2026-01-01T01:24:42.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T01:24:42.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T01:24:42.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.975133
2026-01-01T01:24:42.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T01:24:42.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T01:24:42.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T01:24:42.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T01:24:42.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T01:24:42.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T01:24:07', tmtdew=3.26, humidity=80.43, cloud=0.0, wind=18.26, temperature=13.79, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T23:24:11.491', atlas_cloud=1, atlas_rain=1, zp_data=[0.9227499999999997, 0.8097500000000011, 0.5992499999999996, 0.42549999999999955, 0.5795000000000003, 0.8262500000000008, 0.5999999999999996, 0.5562500000000004, 0.46499999999999986, 0.7140000000000004, 0.37324999999999875, 0.2699999999999996, 0.1720000000000006, -0.2547499999999996, 0.2345000000000006, nan, 0.5017499999999995, 1.0164999999999997, 0.27699999999999925, 0.2342499999999994, 0.2629999999999981, -0.034250000000000114, -1.4022499999999987, nan, nan, 0.5779999999999994, 0.29574999999999996, 0.5345000000000004, 0.20550000000000068, -1.241999999999999, -1.5664999999999996, -0.9879999999999995, 0.699749999999999], zp_timestamp='2025-12-31T23:23:00')
2026-01-01T01:24:42.923 [DEBUG] [Thread-138103] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:24:42.996 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T01:24:43.010 [DEBUG] [Thread-138106] [transport.py] [_log()] starting thread (client mode): 0xb17445b0
2026-01-01T01:24:43.010 [DEBUG] [Thread-138106] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:24:43.025 [DEBUG] [Thread-138106] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T01:24:43.025 [INFO] [Thread-138106] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T01:24:43.033 [DEBUG] [Thread-138106] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:24:43.033 [DEBUG] [Thread-138106] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T01:24:43.033 [DEBUG] [Thread-138106] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:24:43.033 [DEBUG] [Thread-138106] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:24:43.033 [DEBUG] [Thread-138106] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:24:43.033 [DEBUG] [Thread-138106] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:24:43.033 [DEBUG] [Thread-138106] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:24:43.033 [DEBUG] [Thread-138106] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:24:43.033 [DEBUG] [Thread-138106] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:24:43.033 [DEBUG] [Thread-138106] [transport.py] [_log()] client lang: <none>
2026-01-01T01:24:43.033 [DEBUG] [Thread-138106] [transport.py] [_log()] server lang: <none>
2026-01-01T01:24:43.033 [DEBUG] [Thread-138106] [transport.py] [_log()] kex follows: False
2026-01-01T01:24:43.033 [DEBUG] [Thread-138106] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:24:43.033 [DEBUG] [Thread-138106] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:24:43.033 [DEBUG] [Thread-138106] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:24:43.033 [DEBUG] [Thread-138106] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:24:43.033 [DEBUG] [Thread-138106] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:24:43.033 [DEBUG] [Thread-138106] [transport.py] [_log()] Compression: none
2026-01-01T01:24:43.034 [DEBUG] [Thread-138106] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:24:43.089 [DEBUG] [Thread-138106] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:24:43.089 [DEBUG] [Thread-138106] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:24:43.090 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T01:24:43.090 [DEBUG] [Thread-138106] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T01:24:43.090 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:24:43.147 [DEBUG] [Thread-138106] [transport.py] [_log()] userauth is OK
2026-01-01T01:24:43.147 [DEBUG] [Thread-138106] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:24:43.147 [DEBUG] [Thread-138106] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:24:43.147 [DEBUG] [Thread-138106] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T01:24:43.147 [DEBUG] [Thread-138106] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:24:43.162 [INFO] [Thread-138106] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:24:43.162 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T01:24:43.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:24:43.958 [DEBUG] [Thread-138106] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:24:43.958 [DEBUG] [Thread-138106] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:24:44.006 [DEBUG] [Thread-138106] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:24:44.006 [DEBUG] [Thread-138106] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:24:44.014 [DEBUG] [Thread-138106] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:24:44.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:24:44.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T01:24:44.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T01:24:44.037 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:24:44.037 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:24:44.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:24:44.045 [DEBUG] [Thread-138106] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:24:47.801 [DEBUG] [Thread-138108 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:24:49.872 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:24:49.873 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:25:00.392 [DEBUG] [Thread-138109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:25:02.853 [DEBUG] [Thread-138110 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:25:14.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T01:25:14.046 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T01:25:14.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T01:25:14.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 1, 25, 11), 3.32, 80.35, 0.0, 18.47, 13.82, 0, 1, 0, 2, 0, 0),)
2026-01-01T01:25:14.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 01:25:11
2026-01-01T01:25:14.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T01:25:15.040 [DEBUG] [Thread-138111] [transport.py] [_log()] starting thread (client mode): 0xb95b0eb0
2026-01-01T01:25:15.040 [DEBUG] [Thread-138111] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:25:15.059 [DEBUG] [Thread-138111] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T01:25:15.059 [INFO] [Thread-138111] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T01:25:15.063 [DEBUG] [Thread-138111] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:25:15.063 [DEBUG] [Thread-138111] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T01:25:15.063 [DEBUG] [Thread-138111] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:25:15.063 [DEBUG] [Thread-138111] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:25:15.063 [DEBUG] [Thread-138111] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:25:15.063 [DEBUG] [Thread-138111] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:25:15.063 [DEBUG] [Thread-138111] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:25:15.063 [DEBUG] [Thread-138111] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:25:15.063 [DEBUG] [Thread-138111] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:25:15.063 [DEBUG] [Thread-138111] [transport.py] [_log()] client lang: <none>
2026-01-01T01:25:15.063 [DEBUG] [Thread-138111] [transport.py] [_log()] server lang: <none>
2026-01-01T01:25:15.063 [DEBUG] [Thread-138111] [transport.py] [_log()] kex follows: False
2026-01-01T01:25:15.063 [DEBUG] [Thread-138111] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:25:15.063 [DEBUG] [Thread-138111] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:25:15.063 [DEBUG] [Thread-138111] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:25:15.063 [DEBUG] [Thread-138111] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:25:15.063 [DEBUG] [Thread-138111] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:25:15.063 [DEBUG] [Thread-138111] [transport.py] [_log()] Compression: none
2026-01-01T01:25:15.063 [DEBUG] [Thread-138111] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:25:15.079 [DEBUG] [Thread-138111] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:25:15.080 [DEBUG] [Thread-138111] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:25:15.080 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T01:25:15.081 [DEBUG] [Thread-138111] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T01:25:15.081 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:25:15.122 [DEBUG] [Thread-138111] [transport.py] [_log()] userauth is OK
2026-01-01T01:25:15.122 [DEBUG] [Thread-138111] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:25:15.122 [DEBUG] [Thread-138111] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:25:15.122 [DEBUG] [Thread-138111] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T01:25:15.122 [DEBUG] [Thread-138111] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:25:15.155 [INFO] [Thread-138111] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:25:15.156 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:25:15.796 [DEBUG] [Thread-138111] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:25:15.796 [DEBUG] [Thread-138111] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:25:15.796 [DEBUG] [Thread-138111] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T01:25:15.837 [DEBUG] [Thread-138111] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:25:15.837 [DEBUG] [Thread-138111] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:25:15.840 [DEBUG] [Thread-138111] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:25:15.851 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:25:15.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T01:25:15.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T01:25:15.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T01:25:15.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:25:15.860 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T01:25:15.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:25:15.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:25:15.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T01:25:15.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.975480 -999.00  +14.10   8.73     82  +11.10 1 1 1 2 1     0    0 2.75 -3.05 ZNESW 6.0 8.7 181.5 19.4 15.1 -20.5 15.0 -20.6 14.8 -19.2 15.1 -20.1
2026-01-01T01:25:15.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T01:25:15.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T01:25:15.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.975480
2026-01-01T01:25:15.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T01:25:15.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T01:25:15.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T01:25:15.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T01:25:15.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T01:25:15.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T01:25:11', tmtdew=3.32, humidity=80.35, cloud=0.0, wind=18.47, temperature=13.82, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T23:24:41.472', atlas_cloud=1, atlas_rain=1, zp_data=[0.9227499999999997, 0.8097500000000011, 0.5992499999999996, 0.42549999999999955, 0.5795000000000003, 0.8262500000000008, 0.5999999999999996, 0.5562500000000004, 0.46499999999999986, 0.7140000000000004, 0.37324999999999875, 0.2699999999999996, 0.1720000000000006, -0.2547499999999996, 0.2345000000000006, nan, 0.5017499999999995, 1.0164999999999997, 0.27699999999999925, 0.2342499999999994, 0.2629999999999981, -0.034250000000000114, -1.4022499999999987, nan, nan, 0.5779999999999994, 0.29574999999999996, 0.5345000000000004, 0.20550000000000068, -1.241999999999999, -1.5664999999999996, -0.9879999999999995, 0.699749999999999], zp_timestamp='2025-12-31T23:23:00')
2026-01-01T01:25:15.863 [DEBUG] [Thread-138111] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:25:15.942 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T01:25:15.954 [DEBUG] [Thread-138114] [transport.py] [_log()] starting thread (client mode): 0xb95b3700
2026-01-01T01:25:15.954 [DEBUG] [Thread-138114] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:25:15.970 [DEBUG] [Thread-138114] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T01:25:15.970 [INFO] [Thread-138114] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T01:25:15.977 [DEBUG] [Thread-138114] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:25:15.978 [DEBUG] [Thread-138114] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T01:25:15.978 [DEBUG] [Thread-138114] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:25:15.978 [DEBUG] [Thread-138114] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:25:15.978 [DEBUG] [Thread-138114] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:25:15.978 [DEBUG] [Thread-138114] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:25:15.978 [DEBUG] [Thread-138114] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:25:15.978 [DEBUG] [Thread-138114] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:25:15.978 [DEBUG] [Thread-138114] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:25:15.978 [DEBUG] [Thread-138114] [transport.py] [_log()] client lang: <none>
2026-01-01T01:25:15.978 [DEBUG] [Thread-138114] [transport.py] [_log()] server lang: <none>
2026-01-01T01:25:15.978 [DEBUG] [Thread-138114] [transport.py] [_log()] kex follows: False
2026-01-01T01:25:15.978 [DEBUG] [Thread-138114] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:25:15.979 [DEBUG] [Thread-138114] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:25:15.979 [DEBUG] [Thread-138114] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:25:15.979 [DEBUG] [Thread-138114] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:25:15.979 [DEBUG] [Thread-138114] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:25:15.979 [DEBUG] [Thread-138114] [transport.py] [_log()] Compression: none
2026-01-01T01:25:15.979 [DEBUG] [Thread-138114] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:25:16.037 [DEBUG] [Thread-138114] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:25:16.038 [DEBUG] [Thread-138114] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:25:16.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T01:25:16.039 [DEBUG] [Thread-138114] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T01:25:16.040 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:25:16.096 [DEBUG] [Thread-138114] [transport.py] [_log()] userauth is OK
2026-01-01T01:25:16.096 [DEBUG] [Thread-138114] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:25:16.096 [DEBUG] [Thread-138114] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:25:16.096 [DEBUG] [Thread-138114] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T01:25:16.096 [DEBUG] [Thread-138114] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:25:16.115 [INFO] [Thread-138114] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:25:16.116 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T01:25:16.117 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:25:16.946 [DEBUG] [Thread-138114] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:25:16.947 [DEBUG] [Thread-138114] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:25:16.995 [DEBUG] [Thread-138114] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:25:16.995 [DEBUG] [Thread-138114] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:25:17.005 [DEBUG] [Thread-138114] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:25:17.014 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:25:17.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T01:25:17.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T01:25:17.032 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:25:17.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:25:17.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:25:17.041 [DEBUG] [Thread-138114] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:25:17.886 [DEBUG] [Thread-138116 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:25:32.922 [DEBUG] [Thread-138117 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:25:47.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T01:25:47.064 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T01:25:47.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T01:25:47.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 1, 25, 44), 3.37, 80.35, 0.0, 15.9, 13.86, 0, 1, 0, 2, 0, 0),)
2026-01-01T01:25:47.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 01:25:44
2026-01-01T01:25:47.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T01:25:47.956 [DEBUG] [Thread-138118 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:25:48.049 [DEBUG] [Thread-138119] [transport.py] [_log()] starting thread (client mode): 0xb1796920
2026-01-01T01:25:48.049 [DEBUG] [Thread-138119] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:25:48.070 [DEBUG] [Thread-138119] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T01:25:48.071 [INFO] [Thread-138119] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T01:25:48.074 [DEBUG] [Thread-138119] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:25:48.074 [DEBUG] [Thread-138119] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T01:25:48.074 [DEBUG] [Thread-138119] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:25:48.074 [DEBUG] [Thread-138119] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:25:48.074 [DEBUG] [Thread-138119] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:25:48.074 [DEBUG] [Thread-138119] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:25:48.074 [DEBUG] [Thread-138119] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:25:48.074 [DEBUG] [Thread-138119] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:25:48.075 [DEBUG] [Thread-138119] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:25:48.075 [DEBUG] [Thread-138119] [transport.py] [_log()] client lang: <none>
2026-01-01T01:25:48.075 [DEBUG] [Thread-138119] [transport.py] [_log()] server lang: <none>
2026-01-01T01:25:48.075 [DEBUG] [Thread-138119] [transport.py] [_log()] kex follows: False
2026-01-01T01:25:48.075 [DEBUG] [Thread-138119] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:25:48.075 [DEBUG] [Thread-138119] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:25:48.075 [DEBUG] [Thread-138119] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:25:48.075 [DEBUG] [Thread-138119] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:25:48.075 [DEBUG] [Thread-138119] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:25:48.075 [DEBUG] [Thread-138119] [transport.py] [_log()] Compression: none
2026-01-01T01:25:48.075 [DEBUG] [Thread-138119] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:25:48.094 [DEBUG] [Thread-138119] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:25:48.095 [DEBUG] [Thread-138119] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:25:48.095 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T01:25:48.096 [DEBUG] [Thread-138119] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T01:25:48.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:25:48.097 [DEBUG] [Thread-138119] [transport.py] [_log()] userauth is OK
2026-01-01T01:25:48.098 [DEBUG] [Thread-138119] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:25:48.098 [DEBUG] [Thread-138119] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:25:48.098 [DEBUG] [Thread-138119] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T01:25:48.098 [DEBUG] [Thread-138119] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:25:48.112 [INFO] [Thread-138119] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:25:48.113 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:25:48.978 [DEBUG] [Thread-138119] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:25:48.978 [DEBUG] [Thread-138119] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:25:48.978 [DEBUG] [Thread-138119] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T01:25:49.019 [DEBUG] [Thread-138119] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:25:49.020 [DEBUG] [Thread-138119] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:25:49.024 [DEBUG] [Thread-138119] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:25:49.036 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:25:49.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T01:25:49.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T01:25:49.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T01:25:49.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:25:49.052 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T01:25:49.053 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:25:49.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:25:49.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T01:25:49.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.975827 -999.00  +14.10  13.16     81  +11.00 1 1 1 2 1     0    0 2.85 -3.24 ZNESW 9.8 13.2 207.8 16.7 15.1 -20.6 15.0 -20.7 14.8 -19.2 15.1 -20.1
2026-01-01T01:25:49.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T01:25:49.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T01:25:49.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.975827
2026-01-01T01:25:49.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T01:25:49.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T01:25:49.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T01:25:49.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T01:25:49.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T01:25:49.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T01:25:44', tmtdew=3.37, humidity=80.35, cloud=0.0, wind=15.9, temperature=13.86, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T23:25:11.453', atlas_cloud=1, atlas_rain=1, zp_data=[0.9227499999999997, 0.8097500000000011, 0.5992499999999996, 0.42549999999999955, 0.5795000000000003, 0.8262500000000008, 0.5999999999999996, 0.5562500000000004, 0.46499999999999986, 0.7140000000000004, 0.37324999999999875, 0.2699999999999996, 0.1720000000000006, -0.2547499999999996, 0.2345000000000006, nan, 0.5017499999999995, 1.0164999999999997, 0.27699999999999925, 0.2342499999999994, 0.2629999999999981, -0.034250000000000114, -1.4022499999999987, nan, nan, 0.5779999999999994, 0.29574999999999996, 0.5345000000000004, 0.20550000000000068, -1.241999999999999, -1.5664999999999996, -0.9879999999999995, 0.699749999999999], zp_timestamp='2025-12-31T23:23:00')
2026-01-01T01:25:49.055 [DEBUG] [Thread-138119] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:25:49.137 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T01:25:49.148 [DEBUG] [Thread-138122] [transport.py] [_log()] starting thread (client mode): 0xb17958d0
2026-01-01T01:25:49.149 [DEBUG] [Thread-138122] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:25:49.163 [DEBUG] [Thread-138122] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T01:25:49.164 [INFO] [Thread-138122] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T01:25:49.171 [DEBUG] [Thread-138122] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:25:49.171 [DEBUG] [Thread-138122] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T01:25:49.171 [DEBUG] [Thread-138122] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:25:49.171 [DEBUG] [Thread-138122] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:25:49.171 [DEBUG] [Thread-138122] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:25:49.172 [DEBUG] [Thread-138122] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:25:49.172 [DEBUG] [Thread-138122] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:25:49.172 [DEBUG] [Thread-138122] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:25:49.172 [DEBUG] [Thread-138122] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:25:49.172 [DEBUG] [Thread-138122] [transport.py] [_log()] client lang: <none>
2026-01-01T01:25:49.172 [DEBUG] [Thread-138122] [transport.py] [_log()] server lang: <none>
2026-01-01T01:25:49.172 [DEBUG] [Thread-138122] [transport.py] [_log()] kex follows: False
2026-01-01T01:25:49.172 [DEBUG] [Thread-138122] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:25:49.172 [DEBUG] [Thread-138122] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:25:49.172 [DEBUG] [Thread-138122] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:25:49.172 [DEBUG] [Thread-138122] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:25:49.172 [DEBUG] [Thread-138122] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:25:49.172 [DEBUG] [Thread-138122] [transport.py] [_log()] Compression: none
2026-01-01T01:25:49.172 [DEBUG] [Thread-138122] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:25:49.232 [DEBUG] [Thread-138122] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:25:49.232 [DEBUG] [Thread-138122] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:25:49.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T01:25:49.233 [DEBUG] [Thread-138122] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T01:25:49.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:25:49.288 [DEBUG] [Thread-138122] [transport.py] [_log()] userauth is OK
2026-01-01T01:25:49.288 [DEBUG] [Thread-138122] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:25:49.288 [DEBUG] [Thread-138122] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:25:49.289 [DEBUG] [Thread-138122] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T01:25:49.289 [DEBUG] [Thread-138122] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:25:49.307 [INFO] [Thread-138122] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:25:49.308 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T01:25:49.308 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:25:50.076 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:25:50.077 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:25:50.191 [DEBUG] [Thread-138122] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:25:50.191 [DEBUG] [Thread-138122] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:25:50.239 [DEBUG] [Thread-138122] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:25:50.239 [DEBUG] [Thread-138122] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:25:50.249 [DEBUG] [Thread-138122] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:25:50.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:25:50.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T01:25:50.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T01:25:50.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:25:50.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:25:50.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:25:50.283 [DEBUG] [Thread-138122] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:26:00.466 [DEBUG] [Thread-138124 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:26:02.986 [DEBUG] [Thread-138125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:26:18.028 [DEBUG] [Thread-138126 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:26:20.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T01:26:20.299 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T01:26:20.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T01:26:21.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 1, 26, 16), 3.38, 80.3, 0.0, 17.27, 13.86, 0, 1, 0, 2, 0, 0),)
2026-01-01T01:26:21.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 01:26:16
2026-01-01T01:26:21.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T01:26:21.287 [DEBUG] [Thread-138127] [transport.py] [_log()] starting thread (client mode): 0xb1745e10
2026-01-01T01:26:21.287 [DEBUG] [Thread-138127] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:26:21.307 [DEBUG] [Thread-138127] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T01:26:21.307 [INFO] [Thread-138127] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T01:26:21.310 [DEBUG] [Thread-138127] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:26:21.310 [DEBUG] [Thread-138127] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T01:26:21.310 [DEBUG] [Thread-138127] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:26:21.311 [DEBUG] [Thread-138127] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:26:21.311 [DEBUG] [Thread-138127] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:26:21.311 [DEBUG] [Thread-138127] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:26:21.311 [DEBUG] [Thread-138127] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:26:21.311 [DEBUG] [Thread-138127] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:26:21.311 [DEBUG] [Thread-138127] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:26:21.311 [DEBUG] [Thread-138127] [transport.py] [_log()] client lang: <none>
2026-01-01T01:26:21.311 [DEBUG] [Thread-138127] [transport.py] [_log()] server lang: <none>
2026-01-01T01:26:21.311 [DEBUG] [Thread-138127] [transport.py] [_log()] kex follows: False
2026-01-01T01:26:21.311 [DEBUG] [Thread-138127] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:26:21.311 [DEBUG] [Thread-138127] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:26:21.311 [DEBUG] [Thread-138127] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:26:21.311 [DEBUG] [Thread-138127] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:26:21.311 [DEBUG] [Thread-138127] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:26:21.311 [DEBUG] [Thread-138127] [transport.py] [_log()] Compression: none
2026-01-01T01:26:21.311 [DEBUG] [Thread-138127] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:26:21.327 [DEBUG] [Thread-138127] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:26:21.327 [DEBUG] [Thread-138127] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:26:21.327 [DEBUG] [Thread-138127] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T01:26:21.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T01:26:21.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:26:21.368 [DEBUG] [Thread-138127] [transport.py] [_log()] userauth is OK
2026-01-01T01:26:21.369 [DEBUG] [Thread-138127] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:26:21.369 [DEBUG] [Thread-138127] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:26:21.369 [DEBUG] [Thread-138127] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T01:26:21.369 [DEBUG] [Thread-138127] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:26:21.405 [INFO] [Thread-138127] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:26:21.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:26:22.015 [DEBUG] [Thread-138127] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:26:22.015 [DEBUG] [Thread-138127] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:26:22.016 [DEBUG] [Thread-138127] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T01:26:22.056 [DEBUG] [Thread-138127] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:26:22.056 [DEBUG] [Thread-138127] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:26:22.059 [DEBUG] [Thread-138127] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:26:22.073 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:26:22.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T01:26:22.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T01:26:22.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T01:26:22.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:26:22.084 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T01:26:22.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:26:22.085 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:26:22.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T01:26:22.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.976175 -999.00  +14.10   8.99     81  +11.00 1 1 1 2 1     0    0 2.88 -2.66 ZNESW 9.0 9.0 205.4 20.5 15.1 -20.9 15.0 -20.4 14.8 -19.2 15.1 -20.2
2026-01-01T01:26:22.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T01:26:22.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T01:26:22.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.976175
2026-01-01T01:26:22.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T01:26:22.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T01:26:22.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T01:26:22.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T01:26:22.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T01:26:22.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T01:26:16', tmtdew=3.38, humidity=80.3, cloud=0.0, wind=17.27, temperature=13.86, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T23:25:41.520', atlas_cloud=1, atlas_rain=1, zp_data=[0.9227499999999997, 0.8097500000000011, 0.5992499999999996, 0.42549999999999955, 0.5795000000000003, 0.8262500000000008, 0.5999999999999996, 0.5562500000000004, 0.46499999999999986, 0.7140000000000004, 0.37324999999999875, 0.2699999999999996, 0.1720000000000006, -0.2547499999999996, 0.2345000000000006, nan, 0.5017499999999995, 1.0164999999999997, 0.27699999999999925, 0.2342499999999994, 0.2629999999999981, -0.034250000000000114, -1.4022499999999987, nan, nan, 0.5779999999999994, 0.29574999999999996, 0.5345000000000004, 0.20550000000000068, -1.241999999999999, -1.5664999999999996, -0.9879999999999995, 0.699749999999999], zp_timestamp='2025-12-31T23:23:00')
2026-01-01T01:26:22.087 [DEBUG] [Thread-138127] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:26:22.168 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T01:26:22.180 [DEBUG] [Thread-138130] [transport.py] [_log()] starting thread (client mode): 0xb6b16c50
2026-01-01T01:26:22.180 [DEBUG] [Thread-138130] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:26:22.197 [DEBUG] [Thread-138130] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T01:26:22.198 [INFO] [Thread-138130] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T01:26:22.205 [DEBUG] [Thread-138130] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:26:22.206 [DEBUG] [Thread-138130] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T01:26:22.206 [DEBUG] [Thread-138130] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:26:22.206 [DEBUG] [Thread-138130] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:26:22.206 [DEBUG] [Thread-138130] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:26:22.206 [DEBUG] [Thread-138130] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:26:22.206 [DEBUG] [Thread-138130] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:26:22.206 [DEBUG] [Thread-138130] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:26:22.206 [DEBUG] [Thread-138130] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:26:22.206 [DEBUG] [Thread-138130] [transport.py] [_log()] client lang: <none>
2026-01-01T01:26:22.206 [DEBUG] [Thread-138130] [transport.py] [_log()] server lang: <none>
2026-01-01T01:26:22.206 [DEBUG] [Thread-138130] [transport.py] [_log()] kex follows: False
2026-01-01T01:26:22.206 [DEBUG] [Thread-138130] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:26:22.206 [DEBUG] [Thread-138130] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:26:22.206 [DEBUG] [Thread-138130] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:26:22.206 [DEBUG] [Thread-138130] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:26:22.207 [DEBUG] [Thread-138130] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:26:22.207 [DEBUG] [Thread-138130] [transport.py] [_log()] Compression: none
2026-01-01T01:26:22.207 [DEBUG] [Thread-138130] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:26:22.264 [DEBUG] [Thread-138130] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:26:22.265 [DEBUG] [Thread-138130] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:26:22.265 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T01:26:22.266 [DEBUG] [Thread-138130] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T01:26:22.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:26:22.320 [DEBUG] [Thread-138130] [transport.py] [_log()] userauth is OK
2026-01-01T01:26:22.321 [DEBUG] [Thread-138130] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:26:22.321 [DEBUG] [Thread-138130] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:26:22.321 [DEBUG] [Thread-138130] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T01:26:22.321 [DEBUG] [Thread-138130] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:26:22.340 [INFO] [Thread-138130] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:26:22.341 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T01:26:22.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:26:23.182 [DEBUG] [Thread-138130] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:26:23.182 [DEBUG] [Thread-138130] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:26:23.230 [DEBUG] [Thread-138130] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:26:23.230 [DEBUG] [Thread-138130] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:26:23.240 [DEBUG] [Thread-138130] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:26:23.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:26:23.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T01:26:23.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T01:26:23.269 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:26:23.270 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:26:23.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:26:23.278 [DEBUG] [Thread-138130] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:26:33.060 [DEBUG] [Thread-138132 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:26:48.107 [DEBUG] [Thread-138133 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:26:50.280 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:26:50.280 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:26:53.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T01:26:53.301 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T01:26:53.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T01:26:54.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 1, 26, 49), 3.34, 79.73, 0.0, 19.21, 13.77, 0, 0, 0, 2, 0, 0),)
2026-01-01T01:26:54.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 01:26:49
2026-01-01T01:26:54.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T01:26:54.299 [DEBUG] [Thread-138134] [transport.py] [_log()] starting thread (client mode): 0xb17461d0
2026-01-01T01:26:54.299 [DEBUG] [Thread-138134] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:26:54.318 [DEBUG] [Thread-138134] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T01:26:54.319 [INFO] [Thread-138134] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T01:26:54.322 [DEBUG] [Thread-138134] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:26:54.322 [DEBUG] [Thread-138134] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T01:26:54.322 [DEBUG] [Thread-138134] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:26:54.322 [DEBUG] [Thread-138134] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:26:54.322 [DEBUG] [Thread-138134] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:26:54.322 [DEBUG] [Thread-138134] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:26:54.322 [DEBUG] [Thread-138134] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:26:54.322 [DEBUG] [Thread-138134] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:26:54.322 [DEBUG] [Thread-138134] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:26:54.322 [DEBUG] [Thread-138134] [transport.py] [_log()] client lang: <none>
2026-01-01T01:26:54.322 [DEBUG] [Thread-138134] [transport.py] [_log()] server lang: <none>
2026-01-01T01:26:54.322 [DEBUG] [Thread-138134] [transport.py] [_log()] kex follows: False
2026-01-01T01:26:54.322 [DEBUG] [Thread-138134] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:26:54.322 [DEBUG] [Thread-138134] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:26:54.322 [DEBUG] [Thread-138134] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:26:54.322 [DEBUG] [Thread-138134] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:26:54.322 [DEBUG] [Thread-138134] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:26:54.322 [DEBUG] [Thread-138134] [transport.py] [_log()] Compression: none
2026-01-01T01:26:54.322 [DEBUG] [Thread-138134] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:26:54.339 [DEBUG] [Thread-138134] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:26:54.340 [DEBUG] [Thread-138134] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:26:54.340 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T01:26:54.341 [DEBUG] [Thread-138134] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T01:26:54.341 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:26:54.342 [DEBUG] [Thread-138134] [transport.py] [_log()] userauth is OK
2026-01-01T01:26:54.343 [DEBUG] [Thread-138134] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:26:54.343 [DEBUG] [Thread-138134] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:26:54.343 [DEBUG] [Thread-138134] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T01:26:54.343 [DEBUG] [Thread-138134] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:26:54.362 [INFO] [Thread-138134] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:26:54.362 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:26:55.033 [DEBUG] [Thread-138134] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:26:55.034 [DEBUG] [Thread-138134] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:26:55.034 [DEBUG] [Thread-138134] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T01:26:55.076 [DEBUG] [Thread-138134] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:26:55.076 [DEBUG] [Thread-138134] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:26:55.080 [DEBUG] [Thread-138134] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:26:55.091 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:26:55.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T01:26:55.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T01:26:55.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T01:26:55.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:26:55.105 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T01:26:55.105 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:26:55.105 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:26:55.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T01:26:55.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.976522 -999.00  +14.10   7.06     81  +11.00 1 1 1 2 1     0    0 2.91 -1.53 ZNESW 8.8 7.1 224.1 16.0 15.1 -20.9 14.9 -20.4 14.7 -19.3 15.0 -20.2
2026-01-01T01:26:55.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T01:26:55.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T01:26:55.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.976522
2026-01-01T01:26:55.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T01:26:55.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T01:26:55.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T01:26:55.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T01:26:55.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T01:26:55.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T01:26:49', tmtdew=3.34, humidity=79.73, cloud=0.0, wind=19.21, temperature=13.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T23:26:11.501', atlas_cloud=1, atlas_rain=1, zp_data=[0.9227499999999997, 0.8097500000000011, 0.5992499999999996, 0.42549999999999955, 0.5795000000000003, 0.8262500000000008, 0.5999999999999996, 0.5562500000000004, 0.46499999999999986, 0.7140000000000004, 0.37324999999999875, 0.2699999999999996, 0.1720000000000006, -0.2547499999999996, 0.2345000000000006, nan, 0.5017499999999995, 1.0164999999999997, 0.27699999999999925, 0.2342499999999994, 0.2629999999999981, -0.034250000000000114, -1.4022499999999987, nan, nan, 0.5779999999999994, 0.29574999999999996, 0.5345000000000004, 0.20550000000000068, -1.241999999999999, -1.5664999999999996, -0.9879999999999995, 0.699749999999999], zp_timestamp='2025-12-31T23:23:00')
2026-01-01T01:26:55.108 [DEBUG] [Thread-138134] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:26:55.186 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T01:26:55.198 [DEBUG] [Thread-138137] [transport.py] [_log()] starting thread (client mode): 0xb1747190
2026-01-01T01:26:55.198 [DEBUG] [Thread-138137] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:26:55.214 [DEBUG] [Thread-138137] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T01:26:55.214 [INFO] [Thread-138137] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T01:26:55.222 [DEBUG] [Thread-138137] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:26:55.222 [DEBUG] [Thread-138137] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T01:26:55.222 [DEBUG] [Thread-138137] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:26:55.222 [DEBUG] [Thread-138137] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:26:55.222 [DEBUG] [Thread-138137] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:26:55.222 [DEBUG] [Thread-138137] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:26:55.222 [DEBUG] [Thread-138137] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:26:55.222 [DEBUG] [Thread-138137] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:26:55.222 [DEBUG] [Thread-138137] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:26:55.222 [DEBUG] [Thread-138137] [transport.py] [_log()] client lang: <none>
2026-01-01T01:26:55.222 [DEBUG] [Thread-138137] [transport.py] [_log()] server lang: <none>
2026-01-01T01:26:55.222 [DEBUG] [Thread-138137] [transport.py] [_log()] kex follows: False
2026-01-01T01:26:55.222 [DEBUG] [Thread-138137] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:26:55.222 [DEBUG] [Thread-138137] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:26:55.223 [DEBUG] [Thread-138137] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:26:55.223 [DEBUG] [Thread-138137] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:26:55.223 [DEBUG] [Thread-138137] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:26:55.223 [DEBUG] [Thread-138137] [transport.py] [_log()] Compression: none
2026-01-01T01:26:55.223 [DEBUG] [Thread-138137] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:26:55.280 [DEBUG] [Thread-138137] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:26:55.281 [DEBUG] [Thread-138137] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:26:55.282 [DEBUG] [Thread-138137] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T01:26:55.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T01:26:55.283 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:26:55.338 [DEBUG] [Thread-138137] [transport.py] [_log()] userauth is OK
2026-01-01T01:26:55.338 [DEBUG] [Thread-138137] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:26:55.339 [DEBUG] [Thread-138137] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:26:55.339 [DEBUG] [Thread-138137] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T01:26:55.339 [DEBUG] [Thread-138137] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:26:55.361 [INFO] [Thread-138137] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:26:55.361 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T01:26:55.362 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:26:56.193 [DEBUG] [Thread-138137] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:26:56.193 [DEBUG] [Thread-138137] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:26:56.241 [DEBUG] [Thread-138137] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:26:56.242 [DEBUG] [Thread-138137] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:26:56.250 [DEBUG] [Thread-138137] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:26:56.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:26:56.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T01:26:56.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T01:26:56.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:26:56.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:26:56.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:26:56.285 [DEBUG] [Thread-138137] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:27:00.539 [DEBUG] [Thread-138139 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:27:03.141 [DEBUG] [Thread-138140 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:27:18.186 [DEBUG] [Thread-138141 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:27:26.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T01:27:26.296 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T01:27:26.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T01:27:26.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 1, 27, 21), 3.35, 79.71, 0.0, 17.73, 13.77, 0, 0, 0, 2, 0, 0),)
2026-01-01T01:27:26.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 01:27:21
2026-01-01T01:27:27.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T01:27:27.269 [DEBUG] [Thread-138142] [transport.py] [_log()] starting thread (client mode): 0xb6ba25c0
2026-01-01T01:27:27.269 [DEBUG] [Thread-138142] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:27:27.290 [DEBUG] [Thread-138142] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T01:27:27.290 [INFO] [Thread-138142] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T01:27:27.293 [DEBUG] [Thread-138142] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:27:27.293 [DEBUG] [Thread-138142] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T01:27:27.293 [DEBUG] [Thread-138142] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:27:27.293 [DEBUG] [Thread-138142] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:27:27.293 [DEBUG] [Thread-138142] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:27:27.293 [DEBUG] [Thread-138142] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:27:27.293 [DEBUG] [Thread-138142] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:27:27.293 [DEBUG] [Thread-138142] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:27:27.293 [DEBUG] [Thread-138142] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:27:27.293 [DEBUG] [Thread-138142] [transport.py] [_log()] client lang: <none>
2026-01-01T01:27:27.293 [DEBUG] [Thread-138142] [transport.py] [_log()] server lang: <none>
2026-01-01T01:27:27.293 [DEBUG] [Thread-138142] [transport.py] [_log()] kex follows: False
2026-01-01T01:27:27.293 [DEBUG] [Thread-138142] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:27:27.293 [DEBUG] [Thread-138142] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:27:27.293 [DEBUG] [Thread-138142] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:27:27.293 [DEBUG] [Thread-138142] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:27:27.293 [DEBUG] [Thread-138142] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:27:27.293 [DEBUG] [Thread-138142] [transport.py] [_log()] Compression: none
2026-01-01T01:27:27.293 [DEBUG] [Thread-138142] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:27:27.311 [DEBUG] [Thread-138142] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:27:27.312 [DEBUG] [Thread-138142] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:27:27.313 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T01:27:27.314 [DEBUG] [Thread-138142] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T01:27:27.315 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:27:27.316 [DEBUG] [Thread-138142] [transport.py] [_log()] userauth is OK
2026-01-01T01:27:27.316 [DEBUG] [Thread-138142] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:27:27.316 [DEBUG] [Thread-138142] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:27:27.317 [DEBUG] [Thread-138142] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T01:27:27.317 [DEBUG] [Thread-138142] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:27:27.337 [INFO] [Thread-138142] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:27:27.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:27:27.985 [DEBUG] [Thread-138142] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:27:27.986 [DEBUG] [Thread-138142] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:27:27.986 [DEBUG] [Thread-138142] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T01:27:28.026 [DEBUG] [Thread-138142] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:27:28.026 [DEBUG] [Thread-138142] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:27:28.029 [DEBUG] [Thread-138142] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:27:28.041 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:27:28.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T01:27:28.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T01:27:28.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T01:27:28.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:27:28.051 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T01:27:28.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:27:28.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:27:28.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T01:27:28.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.977216 -999.00  +14.00  16.04     81  +10.90 1 1 1 2 1     0    0 2.94 -0.53 ZNESW 10.9 16.0 207.2 22.7 15.0 -21.0 14.9 -20.4 14.6 -19.2 15.0 -20.1
2026-01-01T01:27:28.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T01:27:28.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T01:27:28.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.977216
2026-01-01T01:27:28.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T01:27:28.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T01:27:28.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T01:27:28.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T01:27:28.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T01:27:28.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T01:27:21', tmtdew=3.35, humidity=79.71, cloud=0.0, wind=17.73, temperature=13.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T23:27:11.462', atlas_cloud=1, atlas_rain=1, zp_data=[0.9227499999999997, 0.8097500000000011, 0.5992499999999996, 0.42549999999999955, 0.5795000000000003, 0.8262500000000008, 0.5999999999999996, 0.5562500000000004, 0.46499999999999986, 0.7140000000000004, 0.37324999999999875, 0.2699999999999996, 0.1720000000000006, -0.2547499999999996, 0.2345000000000006, nan, 0.5017499999999995, 1.0164999999999997, 0.27699999999999925, 0.2342499999999994, 0.2629999999999981, -0.034250000000000114, -1.4022499999999987, nan, nan, 0.5779999999999994, 0.29574999999999996, 0.5345000000000004, 0.20550000000000068, -1.241999999999999, -1.5664999999999996, -0.9879999999999995, 0.699749999999999], zp_timestamp='2025-12-31T23:23:00')
2026-01-01T01:27:28.054 [DEBUG] [Thread-138142] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:27:28.135 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T01:27:28.148 [DEBUG] [Thread-138145] [transport.py] [_log()] starting thread (client mode): 0xb95f1d80
2026-01-01T01:27:28.148 [DEBUG] [Thread-138145] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:27:28.163 [DEBUG] [Thread-138145] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T01:27:28.163 [INFO] [Thread-138145] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T01:27:28.171 [DEBUG] [Thread-138145] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:27:28.172 [DEBUG] [Thread-138145] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T01:27:28.172 [DEBUG] [Thread-138145] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:27:28.172 [DEBUG] [Thread-138145] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:27:28.172 [DEBUG] [Thread-138145] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:27:28.172 [DEBUG] [Thread-138145] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:27:28.172 [DEBUG] [Thread-138145] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:27:28.173 [DEBUG] [Thread-138145] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:27:28.173 [DEBUG] [Thread-138145] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:27:28.173 [DEBUG] [Thread-138145] [transport.py] [_log()] client lang: <none>
2026-01-01T01:27:28.173 [DEBUG] [Thread-138145] [transport.py] [_log()] server lang: <none>
2026-01-01T01:27:28.173 [DEBUG] [Thread-138145] [transport.py] [_log()] kex follows: False
2026-01-01T01:27:28.173 [DEBUG] [Thread-138145] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:27:28.173 [DEBUG] [Thread-138145] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:27:28.173 [DEBUG] [Thread-138145] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:27:28.173 [DEBUG] [Thread-138145] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:27:28.173 [DEBUG] [Thread-138145] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:27:28.173 [DEBUG] [Thread-138145] [transport.py] [_log()] Compression: none
2026-01-01T01:27:28.173 [DEBUG] [Thread-138145] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:27:28.228 [DEBUG] [Thread-138145] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:27:28.229 [DEBUG] [Thread-138145] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:27:28.230 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T01:27:28.230 [DEBUG] [Thread-138145] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T01:27:28.231 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:27:28.284 [DEBUG] [Thread-138145] [transport.py] [_log()] userauth is OK
2026-01-01T01:27:28.284 [DEBUG] [Thread-138145] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:27:28.284 [DEBUG] [Thread-138145] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:27:28.284 [DEBUG] [Thread-138145] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T01:27:28.284 [DEBUG] [Thread-138145] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:27:28.298 [INFO] [Thread-138145] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:27:28.298 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T01:27:28.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:27:29.166 [DEBUG] [Thread-138145] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:27:29.167 [DEBUG] [Thread-138145] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:27:29.215 [DEBUG] [Thread-138145] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:27:29.215 [DEBUG] [Thread-138145] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:27:29.224 [DEBUG] [Thread-138145] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:27:29.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:27:29.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T01:27:29.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T01:27:29.252 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:27:29.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:27:29.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:27:29.261 [DEBUG] [Thread-138145] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:27:33.214 [DEBUG] [Thread-138147 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:27:48.271 [DEBUG] [Thread-138148 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:27:50.481 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:27:50.482 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:27:59.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T01:27:59.283 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T01:27:59.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T01:28:00.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 1, 27, 53), 3.42, 79.62, 0.0, 16.67, 13.82, 0, 0, 0, 2, 0, 0),)
2026-01-01T01:28:00.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 01:27:53
2026-01-01T01:28:00.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T01:28:00.300 [DEBUG] [Thread-138149] [transport.py] [_log()] starting thread (client mode): 0xb95f2cb0
2026-01-01T01:28:00.300 [DEBUG] [Thread-138149] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:28:00.312 [DEBUG] [Thread-138149] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T01:28:00.312 [INFO] [Thread-138149] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T01:28:00.314 [DEBUG] [Thread-138149] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:28:00.315 [DEBUG] [Thread-138149] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T01:28:00.315 [DEBUG] [Thread-138149] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:28:00.315 [DEBUG] [Thread-138149] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:28:00.315 [DEBUG] [Thread-138149] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:28:00.315 [DEBUG] [Thread-138149] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:28:00.315 [DEBUG] [Thread-138149] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:28:00.315 [DEBUG] [Thread-138149] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:28:00.315 [DEBUG] [Thread-138149] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:28:00.315 [DEBUG] [Thread-138149] [transport.py] [_log()] client lang: <none>
2026-01-01T01:28:00.315 [DEBUG] [Thread-138149] [transport.py] [_log()] server lang: <none>
2026-01-01T01:28:00.315 [DEBUG] [Thread-138149] [transport.py] [_log()] kex follows: False
2026-01-01T01:28:00.315 [DEBUG] [Thread-138149] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:28:00.315 [DEBUG] [Thread-138149] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:28:00.315 [DEBUG] [Thread-138149] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:28:00.315 [DEBUG] [Thread-138149] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:28:00.315 [DEBUG] [Thread-138149] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:28:00.315 [DEBUG] [Thread-138149] [transport.py] [_log()] Compression: none
2026-01-01T01:28:00.315 [DEBUG] [Thread-138149] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:28:00.331 [DEBUG] [Thread-138149] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:28:00.331 [DEBUG] [Thread-138149] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:28:00.332 [DEBUG] [Thread-138149] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T01:28:00.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T01:28:00.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:28:00.332 [DEBUG] [Thread-138149] [transport.py] [_log()] userauth is OK
2026-01-01T01:28:00.332 [DEBUG] [Thread-138149] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:28:00.332 [DEBUG] [Thread-138149] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:28:00.332 [DEBUG] [Thread-138149] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T01:28:00.332 [DEBUG] [Thread-138149] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:28:00.341 [INFO] [Thread-138149] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:28:00.342 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:28:00.612 [DEBUG] [Thread-138151 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:28:01.005 [DEBUG] [Thread-138149] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:28:01.005 [DEBUG] [Thread-138149] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:28:01.005 [DEBUG] [Thread-138149] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T01:28:01.047 [DEBUG] [Thread-138149] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:28:01.047 [DEBUG] [Thread-138149] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:28:01.051 [DEBUG] [Thread-138149] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:28:01.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:28:01.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T01:28:01.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T01:28:01.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T01:28:01.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:28:01.076 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T01:28:01.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:28:01.076 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:28:01.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T01:28:01.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.977563 -999.00  +14.00  11.13     81  +10.80 1 1 1 2 1     0    0 3.04 0.33 ZNESW 7.9 11.1 231.6 19.1 15.0 -20.9 14.8 -20.6 14.7 -19.3 14.9 -20.1
2026-01-01T01:28:01.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T01:28:01.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T01:28:01.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.977563
2026-01-01T01:28:01.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T01:28:01.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T01:28:01.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T01:28:01.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T01:28:01.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T01:28:01.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T01:27:53', tmtdew=3.42, humidity=79.62, cloud=0.0, wind=16.67, temperature=13.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T23:27:41.443', atlas_cloud=1, atlas_rain=1, zp_data=[0.07375000000000043, 0.09625000000000128, 0.13424999999999976, 0.13849999999999874, 0.07900000000000063, 0.10075000000000145, 0.0860000000000003, 0.17025000000000112, 0.08949999999999925, 0.07900000000000063, 0.07124999999999915, 0.19599999999999973, 0.11500000000000021, 0.13175000000000026, 0.05599999999999916, 0.19699999999999918, 0.18074999999999974, 0.19849999999999923, 0.10699999999999932, 0.7032499999999988, 0.13349999999999795, 0.13874999999999815, -0.07174999999999976, 0.11275000000000013, 0.2699999999999996, 0.29100000000000037, 0.25624999999999964, 0.30049999999999955, 0.258, -0.4794999999999998, -1.2544999999999984, -0.46399999999999864, 0.5412499999999998], zp_timestamp='2025-12-31T23:26:00')
2026-01-01T01:28:01.079 [DEBUG] [Thread-138149] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:28:01.159 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T01:28:01.172 [DEBUG] [Thread-138153] [transport.py] [_log()] starting thread (client mode): 0xb95b00a0
2026-01-01T01:28:01.172 [DEBUG] [Thread-138153] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:28:01.188 [DEBUG] [Thread-138153] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T01:28:01.188 [INFO] [Thread-138153] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T01:28:01.196 [DEBUG] [Thread-138153] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:28:01.196 [DEBUG] [Thread-138153] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T01:28:01.196 [DEBUG] [Thread-138153] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:28:01.196 [DEBUG] [Thread-138153] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:28:01.196 [DEBUG] [Thread-138153] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:28:01.196 [DEBUG] [Thread-138153] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:28:01.196 [DEBUG] [Thread-138153] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:28:01.196 [DEBUG] [Thread-138153] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:28:01.196 [DEBUG] [Thread-138153] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:28:01.196 [DEBUG] [Thread-138153] [transport.py] [_log()] client lang: <none>
2026-01-01T01:28:01.196 [DEBUG] [Thread-138153] [transport.py] [_log()] server lang: <none>
2026-01-01T01:28:01.196 [DEBUG] [Thread-138153] [transport.py] [_log()] kex follows: False
2026-01-01T01:28:01.196 [DEBUG] [Thread-138153] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:28:01.196 [DEBUG] [Thread-138153] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:28:01.197 [DEBUG] [Thread-138153] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:28:01.197 [DEBUG] [Thread-138153] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:28:01.197 [DEBUG] [Thread-138153] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:28:01.197 [DEBUG] [Thread-138153] [transport.py] [_log()] Compression: none
2026-01-01T01:28:01.197 [DEBUG] [Thread-138153] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:28:01.252 [DEBUG] [Thread-138153] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:28:01.253 [DEBUG] [Thread-138153] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:28:01.254 [DEBUG] [Thread-138153] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T01:28:01.254 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T01:28:01.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:28:01.309 [DEBUG] [Thread-138153] [transport.py] [_log()] userauth is OK
2026-01-01T01:28:01.309 [DEBUG] [Thread-138153] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:28:01.310 [DEBUG] [Thread-138153] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:28:01.310 [DEBUG] [Thread-138153] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T01:28:01.310 [DEBUG] [Thread-138153] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:28:01.329 [INFO] [Thread-138153] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:28:01.329 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T01:28:01.330 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:28:02.157 [DEBUG] [Thread-138153] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:28:02.157 [DEBUG] [Thread-138153] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:28:02.207 [DEBUG] [Thread-138153] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:28:02.207 [DEBUG] [Thread-138153] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:28:02.219 [DEBUG] [Thread-138153] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:28:02.230 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:28: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')
2026-01-01T01:28:02.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T01:28:02.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:28:02.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:28:02.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:28:02.258 [DEBUG] [Thread-138153] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:28:03.302 [DEBUG] [Thread-138155 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:28:18.365 [DEBUG] [Thread-138156 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:28:32.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T01:28:32.281 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T01:28: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
2026-01-01T01:28:32.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 1, 28, 25), 3.42, 79.62, 0.0, 17.8, 13.84, 0, 0, 0, 2, 0, 0),)
2026-01-01T01:28:32.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 01:28:25
2026-01-01T01:28:33.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T01:28:33.251 [DEBUG] [Thread-138157] [transport.py] [_log()] starting thread (client mode): 0xb6b14c40
2026-01-01T01:28:33.251 [DEBUG] [Thread-138157] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:28:33.273 [DEBUG] [Thread-138157] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T01:28:33.273 [INFO] [Thread-138157] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T01:28:33.276 [DEBUG] [Thread-138157] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:28:33.276 [DEBUG] [Thread-138157] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T01:28:33.276 [DEBUG] [Thread-138157] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:28:33.276 [DEBUG] [Thread-138157] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:28:33.277 [DEBUG] [Thread-138157] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:28:33.277 [DEBUG] [Thread-138157] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:28:33.277 [DEBUG] [Thread-138157] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:28:33.277 [DEBUG] [Thread-138157] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:28:33.277 [DEBUG] [Thread-138157] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:28:33.277 [DEBUG] [Thread-138157] [transport.py] [_log()] client lang: <none>
2026-01-01T01:28:33.277 [DEBUG] [Thread-138157] [transport.py] [_log()] server lang: <none>
2026-01-01T01:28:33.277 [DEBUG] [Thread-138157] [transport.py] [_log()] kex follows: False
2026-01-01T01:28:33.277 [DEBUG] [Thread-138157] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:28:33.277 [DEBUG] [Thread-138157] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:28:33.277 [DEBUG] [Thread-138157] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:28:33.277 [DEBUG] [Thread-138157] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:28:33.277 [DEBUG] [Thread-138157] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:28:33.278 [DEBUG] [Thread-138157] [transport.py] [_log()] Compression: none
2026-01-01T01:28:33.278 [DEBUG] [Thread-138157] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:28:33.296 [DEBUG] [Thread-138157] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:28:33.297 [DEBUG] [Thread-138157] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:28:33.297 [DEBUG] [Thread-138157] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T01:28:33.298 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T01:28:33.299 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:28:33.300 [DEBUG] [Thread-138157] [transport.py] [_log()] userauth is OK
2026-01-01T01:28:33.300 [DEBUG] [Thread-138157] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:28:33.300 [DEBUG] [Thread-138157] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:28:33.300 [DEBUG] [Thread-138157] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T01:28:33.300 [DEBUG] [Thread-138157] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:28:33.321 [INFO] [Thread-138157] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:28:33.321 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:28:33.400 [DEBUG] [Thread-138159 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:28:33.967 [DEBUG] [Thread-138157] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:28:33.967 [DEBUG] [Thread-138157] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:28:33.967 [DEBUG] [Thread-138157] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T01:28:34.008 [DEBUG] [Thread-138157] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:28:34.008 [DEBUG] [Thread-138157] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:28:34.011 [DEBUG] [Thread-138157] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:28:34.023 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:28:34.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T01:28:34.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T01:28:34.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T01:28:34.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:28:34.029 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T01:28:34.029 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:28:34.029 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:28:34.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T01:28:34.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.977911 -999.00  +14.00   8.79     81  +10.80 1 1 1 2 1     0    0 3.05 1.46 ZNESW 10.2 8.8 218.2 14.4 14.9 -20.8 14.9 -20.6 14.6 -19.3 15.0 -20.1
2026-01-01T01:28:34.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T01:28:34.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T01:28:34.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.977911
2026-01-01T01:28:34.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T01:28:34.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T01:28:34.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T01:28:34.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T01:28:34.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T01:28:34.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T01:28:25', tmtdew=3.42, humidity=79.62, cloud=0.0, wind=17.8, temperature=13.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T23:28:11.510', atlas_cloud=1, atlas_rain=1, zp_data=[0.07375000000000043, 0.09625000000000128, 0.13424999999999976, 0.13849999999999874, 0.07900000000000063, 0.10075000000000145, 0.0860000000000003, 0.17025000000000112, 0.08949999999999925, 0.07900000000000063, 0.07124999999999915, 0.19599999999999973, 0.11500000000000021, 0.13175000000000026, 0.05599999999999916, 0.19699999999999918, 0.18074999999999974, 0.19849999999999923, 0.10699999999999932, 0.7032499999999988, 0.13349999999999795, 0.13874999999999815, -0.07174999999999976, 0.11275000000000013, 0.2699999999999996, 0.29100000000000037, 0.25624999999999964, 0.30049999999999955, 0.258, -0.4794999999999998, -1.2544999999999984, -0.46399999999999864, 0.5412499999999998], zp_timestamp='2025-12-31T23:26:00')
2026-01-01T01:28:34.031 [DEBUG] [Thread-138157] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:28:34.102 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T01:28:34.114 [DEBUG] [Thread-138161] [transport.py] [_log()] starting thread (client mode): 0xb95b0220
2026-01-01T01:28:34.115 [DEBUG] [Thread-138161] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:28:34.129 [DEBUG] [Thread-138161] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T01:28:34.129 [INFO] [Thread-138161] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T01:28:34.137 [DEBUG] [Thread-138161] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:28:34.137 [DEBUG] [Thread-138161] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T01:28:34.137 [DEBUG] [Thread-138161] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:28:34.137 [DEBUG] [Thread-138161] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:28:34.137 [DEBUG] [Thread-138161] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:28:34.137 [DEBUG] [Thread-138161] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:28:34.137 [DEBUG] [Thread-138161] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:28:34.137 [DEBUG] [Thread-138161] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:28:34.137 [DEBUG] [Thread-138161] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:28:34.137 [DEBUG] [Thread-138161] [transport.py] [_log()] client lang: <none>
2026-01-01T01:28:34.137 [DEBUG] [Thread-138161] [transport.py] [_log()] server lang: <none>
2026-01-01T01:28:34.137 [DEBUG] [Thread-138161] [transport.py] [_log()] kex follows: False
2026-01-01T01:28:34.137 [DEBUG] [Thread-138161] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:28:34.137 [DEBUG] [Thread-138161] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:28:34.137 [DEBUG] [Thread-138161] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:28:34.137 [DEBUG] [Thread-138161] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:28:34.137 [DEBUG] [Thread-138161] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:28:34.137 [DEBUG] [Thread-138161] [transport.py] [_log()] Compression: none
2026-01-01T01:28:34.137 [DEBUG] [Thread-138161] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:28:34.195 [DEBUG] [Thread-138161] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:28:34.195 [DEBUG] [Thread-138161] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:28:34.195 [DEBUG] [Thread-138161] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T01:28:34.195 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T01:28:34.195 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:28:34.253 [DEBUG] [Thread-138161] [transport.py] [_log()] userauth is OK
2026-01-01T01:28:34.253 [DEBUG] [Thread-138161] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:28:34.253 [DEBUG] [Thread-138161] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:28:34.253 [DEBUG] [Thread-138161] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T01:28:34.253 [DEBUG] [Thread-138161] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:28:34.267 [INFO] [Thread-138161] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:28:34.267 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T01:28:34.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:28:35.132 [DEBUG] [Thread-138161] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:28:35.132 [DEBUG] [Thread-138161] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:28:35.180 [DEBUG] [Thread-138161] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:28:35.180 [DEBUG] [Thread-138161] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:28:35.188 [DEBUG] [Thread-138161] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:28:35.196 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:28:35.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T01:28:35.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T01:28:35.212 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:28:35.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:28:35.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:28:35.224 [DEBUG] [Thread-138161] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:28:48.431 [DEBUG] [Thread-138163 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:28:50.685 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:28:50.686 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:29:00.683 [DEBUG] [Thread-138164 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:29:03.480 [DEBUG] [Thread-138165 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:29:05.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T01:29:05.239 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T01:29: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
2026-01-01T01:29:05.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 1, 28, 57), 3.48, 79.55, 0.0, 16.18, 13.84, 0, 0, 0, 2, 0, 0),)
2026-01-01T01:29:05.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 01:28:57
2026-01-01T01:29:06.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T01:29:06.244 [DEBUG] [Thread-138166] [transport.py] [_log()] starting thread (client mode): 0xb95f0250
2026-01-01T01:29:06.244 [DEBUG] [Thread-138166] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:29:06.265 [DEBUG] [Thread-138166] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T01:29:06.265 [INFO] [Thread-138166] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T01:29:06.268 [DEBUG] [Thread-138166] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:29:06.268 [DEBUG] [Thread-138166] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T01:29:06.268 [DEBUG] [Thread-138166] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:29:06.268 [DEBUG] [Thread-138166] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:29:06.268 [DEBUG] [Thread-138166] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:29:06.268 [DEBUG] [Thread-138166] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:29:06.268 [DEBUG] [Thread-138166] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:29:06.268 [DEBUG] [Thread-138166] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:29:06.268 [DEBUG] [Thread-138166] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:29:06.268 [DEBUG] [Thread-138166] [transport.py] [_log()] client lang: <none>
2026-01-01T01:29:06.268 [DEBUG] [Thread-138166] [transport.py] [_log()] server lang: <none>
2026-01-01T01:29:06.268 [DEBUG] [Thread-138166] [transport.py] [_log()] kex follows: False
2026-01-01T01:29:06.268 [DEBUG] [Thread-138166] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:29:06.269 [DEBUG] [Thread-138166] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:29:06.269 [DEBUG] [Thread-138166] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:29:06.269 [DEBUG] [Thread-138166] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:29:06.269 [DEBUG] [Thread-138166] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:29:06.269 [DEBUG] [Thread-138166] [transport.py] [_log()] Compression: none
2026-01-01T01:29:06.269 [DEBUG] [Thread-138166] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:29:06.287 [DEBUG] [Thread-138166] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:29:06.288 [DEBUG] [Thread-138166] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:29:06.288 [DEBUG] [Thread-138166] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T01:29:06.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T01:29:06.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:29:06.290 [DEBUG] [Thread-138166] [transport.py] [_log()] userauth is OK
2026-01-01T01:29:06.290 [DEBUG] [Thread-138166] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:29:06.290 [DEBUG] [Thread-138166] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:29:06.291 [DEBUG] [Thread-138166] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T01:29:06.291 [DEBUG] [Thread-138166] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:29:06.316 [INFO] [Thread-138166] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:29:06.317 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:29:06.961 [DEBUG] [Thread-138166] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:29:06.961 [DEBUG] [Thread-138166] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:29:06.962 [DEBUG] [Thread-138166] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T01:29:07.003 [DEBUG] [Thread-138166] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:29:07.003 [DEBUG] [Thread-138166] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:29:07.006 [DEBUG] [Thread-138166] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:29:07.019 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:29:07.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T01:29:07.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T01:29:07.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T01:29:07.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:29:07.033 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T01:29:07.034 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:29:07.034 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:29:07.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T01:29:07.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.978258 -999.00  +14.00  13.44     81  +10.80 1 1 1 2 1     0    0 3.07 2.49 ZNESW 10.6 13.4 214.2 17.2 14.9 -20.9 14.8 -20.6 14.6 -19.3 14.9 -20.0
2026-01-01T01:29:07.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T01:29:07.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T01:29:07.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.978258
2026-01-01T01:29:07.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T01:29:07.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T01:29:07.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T01:29:07.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T01:29:07.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T01:29:07.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T01:28:57', tmtdew=3.48, humidity=79.55, cloud=0.0, wind=16.18, temperature=13.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T23:28:41.491', atlas_cloud=1, atlas_rain=1, zp_data=[0.07375000000000043, 0.09625000000000128, 0.13424999999999976, 0.13849999999999874, 0.07900000000000063, 0.10075000000000145, 0.0860000000000003, 0.17025000000000112, 0.08949999999999925, 0.07900000000000063, 0.07124999999999915, 0.19599999999999973, 0.11500000000000021, 0.13175000000000026, 0.05599999999999916, 0.19699999999999918, 0.18074999999999974, 0.19849999999999923, 0.10699999999999932, 0.7032499999999988, 0.13349999999999795, 0.13874999999999815, -0.07174999999999976, 0.11275000000000013, 0.2699999999999996, 0.29100000000000037, 0.25624999999999964, 0.30049999999999955, 0.258, -0.4794999999999998, -1.2544999999999984, -0.46399999999999864, 0.5412499999999998], zp_timestamp='2025-12-31T23:26:00')
2026-01-01T01:29:07.036 [DEBUG] [Thread-138166] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:29:07.122 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T01:29:07.134 [DEBUG] [Thread-138169] [transport.py] [_log()] starting thread (client mode): 0xb957b4c0
2026-01-01T01:29:07.134 [DEBUG] [Thread-138169] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:29:07.153 [DEBUG] [Thread-138169] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T01:29:07.154 [INFO] [Thread-138169] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T01:29:07.161 [DEBUG] [Thread-138169] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:29:07.162 [DEBUG] [Thread-138169] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T01:29:07.162 [DEBUG] [Thread-138169] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:29:07.162 [DEBUG] [Thread-138169] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:29:07.162 [DEBUG] [Thread-138169] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:29:07.162 [DEBUG] [Thread-138169] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:29:07.162 [DEBUG] [Thread-138169] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:29:07.162 [DEBUG] [Thread-138169] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:29:07.162 [DEBUG] [Thread-138169] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:29:07.162 [DEBUG] [Thread-138169] [transport.py] [_log()] client lang: <none>
2026-01-01T01:29:07.162 [DEBUG] [Thread-138169] [transport.py] [_log()] server lang: <none>
2026-01-01T01:29:07.162 [DEBUG] [Thread-138169] [transport.py] [_log()] kex follows: False
2026-01-01T01:29:07.162 [DEBUG] [Thread-138169] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:29:07.162 [DEBUG] [Thread-138169] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:29:07.162 [DEBUG] [Thread-138169] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:29:07.162 [DEBUG] [Thread-138169] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:29:07.163 [DEBUG] [Thread-138169] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:29:07.163 [DEBUG] [Thread-138169] [transport.py] [_log()] Compression: none
2026-01-01T01:29:07.163 [DEBUG] [Thread-138169] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:29:07.222 [DEBUG] [Thread-138169] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:29:07.222 [DEBUG] [Thread-138169] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:29:07.223 [DEBUG] [Thread-138169] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T01:29:07.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T01:29:07.224 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:29:07.277 [DEBUG] [Thread-138169] [transport.py] [_log()] userauth is OK
2026-01-01T01:29:07.278 [DEBUG] [Thread-138169] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:29:07.278 [DEBUG] [Thread-138169] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:29:07.278 [DEBUG] [Thread-138169] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T01:29:07.278 [DEBUG] [Thread-138169] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:29:07.298 [INFO] [Thread-138169] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:29:07.299 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T01:29:07.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:29:08.169 [DEBUG] [Thread-138169] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:29:08.170 [DEBUG] [Thread-138169] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:29:08.218 [DEBUG] [Thread-138169] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:29:08.218 [DEBUG] [Thread-138169] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:29:08.227 [DEBUG] [Thread-138169] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:29:08.236 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:29:08.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T01:29: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
2026-01-01T01:29:08.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:29:08.254 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:29:08.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:29:08.262 [DEBUG] [Thread-138169] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:29:18.514 [DEBUG] [Thread-138171 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:29:33.570 [DEBUG] [Thread-138172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:29:38.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T01:29:38.267 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T01:29:38.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T01:29:38.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 1, 29, 29), 3.52, 79.33, 0.0, 17.4, 13.81, 0, 0, 0, 2, 0, 0),)
2026-01-01T01:29:38.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 01:29:29
2026-01-01T01:29:39.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T01:29:39.274 [DEBUG] [Thread-138173] [transport.py] [_log()] starting thread (client mode): 0xb6b16b90
2026-01-01T01:29:39.274 [DEBUG] [Thread-138173] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:29:39.288 [DEBUG] [Thread-138173] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T01:29:39.288 [INFO] [Thread-138173] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T01:29:39.290 [DEBUG] [Thread-138173] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:29:39.290 [DEBUG] [Thread-138173] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T01:29:39.290 [DEBUG] [Thread-138173] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:29:39.290 [DEBUG] [Thread-138173] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:29:39.290 [DEBUG] [Thread-138173] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:29:39.290 [DEBUG] [Thread-138173] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:29:39.290 [DEBUG] [Thread-138173] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:29:39.290 [DEBUG] [Thread-138173] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:29:39.290 [DEBUG] [Thread-138173] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:29:39.290 [DEBUG] [Thread-138173] [transport.py] [_log()] client lang: <none>
2026-01-01T01:29:39.290 [DEBUG] [Thread-138173] [transport.py] [_log()] server lang: <none>
2026-01-01T01:29:39.290 [DEBUG] [Thread-138173] [transport.py] [_log()] kex follows: False
2026-01-01T01:29:39.290 [DEBUG] [Thread-138173] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:29:39.290 [DEBUG] [Thread-138173] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:29:39.290 [DEBUG] [Thread-138173] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:29:39.290 [DEBUG] [Thread-138173] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:29:39.291 [DEBUG] [Thread-138173] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:29:39.291 [DEBUG] [Thread-138173] [transport.py] [_log()] Compression: none
2026-01-01T01:29:39.291 [DEBUG] [Thread-138173] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:29:39.300 [DEBUG] [Thread-138173] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:29:39.300 [DEBUG] [Thread-138173] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:29:39.300 [DEBUG] [Thread-138173] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T01:29:39.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T01:29:39.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:29:39.301 [DEBUG] [Thread-138173] [transport.py] [_log()] userauth is OK
2026-01-01T01:29:39.301 [DEBUG] [Thread-138173] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:29:39.301 [DEBUG] [Thread-138173] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:29:39.301 [DEBUG] [Thread-138173] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T01:29:39.302 [DEBUG] [Thread-138173] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:29:39.332 [INFO] [Thread-138173] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:29:39.333 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:29:39.938 [DEBUG] [Thread-138173] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:29:39.938 [DEBUG] [Thread-138173] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:29:39.938 [DEBUG] [Thread-138173] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T01:29:39.980 [DEBUG] [Thread-138173] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:29:39.980 [DEBUG] [Thread-138173] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:29:39.983 [DEBUG] [Thread-138173] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:29:39.993 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:29:39.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T01:29:39.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T01:29:39.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T01:29:40.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:29:40.003 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T01:29:40.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:29:40.003 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:29:40.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T01:29:40.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.978605 -999.00  +14.00  10.85     81  +10.80 1 1 1 2 1     0    0 3.12 3.95 ZNESW 15.5 10.8 221.0 18.5 14.9 -20.8 14.8 -20.6 14.6 -19.2 14.9 -20.0
2026-01-01T01:29:40.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T01:29:40.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T01:29:40.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.978605
2026-01-01T01:29:40.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T01:29:40.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T01:29:40.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T01:29:40.005 [DEBUG] [Thread-138173] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:29:40.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T01:29:40.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T01:29:40.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T01:29:29', tmtdew=3.52, humidity=79.33, cloud=0.0, wind=17.4, temperature=13.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T23:29:11.472', atlas_cloud=1, atlas_rain=1, zp_data=[0.07375000000000043, 0.09625000000000128, 0.13424999999999976, 0.13849999999999874, 0.07900000000000063, 0.10075000000000145, 0.0860000000000003, 0.17025000000000112, 0.08949999999999925, 0.07900000000000063, 0.07124999999999915, 0.19599999999999973, 0.11500000000000021, 0.13175000000000026, 0.05599999999999916, 0.19699999999999918, 0.18074999999999974, 0.19849999999999923, 0.10699999999999932, 0.7032499999999988, 0.13349999999999795, 0.13874999999999815, -0.07174999999999976, 0.11275000000000013, 0.2699999999999996, 0.29100000000000037, 0.25624999999999964, 0.30049999999999955, 0.258, -0.4794999999999998, -1.2544999999999984, -0.46399999999999864, 0.5412499999999998], zp_timestamp='2025-12-31T23:26:00')
2026-01-01T01:29:40.091 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T01:29:40.102 [DEBUG] [Thread-138176] [transport.py] [_log()] starting thread (client mode): 0xb6b15d80
2026-01-01T01:29:40.102 [DEBUG] [Thread-138176] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:29:40.117 [DEBUG] [Thread-138176] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T01:29:40.117 [INFO] [Thread-138176] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T01:29:40.124 [DEBUG] [Thread-138176] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:29:40.125 [DEBUG] [Thread-138176] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T01:29:40.125 [DEBUG] [Thread-138176] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:29:40.125 [DEBUG] [Thread-138176] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:29:40.125 [DEBUG] [Thread-138176] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:29:40.125 [DEBUG] [Thread-138176] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:29:40.125 [DEBUG] [Thread-138176] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:29:40.125 [DEBUG] [Thread-138176] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:29:40.125 [DEBUG] [Thread-138176] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:29:40.126 [DEBUG] [Thread-138176] [transport.py] [_log()] client lang: <none>
2026-01-01T01:29:40.126 [DEBUG] [Thread-138176] [transport.py] [_log()] server lang: <none>
2026-01-01T01:29:40.126 [DEBUG] [Thread-138176] [transport.py] [_log()] kex follows: False
2026-01-01T01:29:40.126 [DEBUG] [Thread-138176] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:29:40.126 [DEBUG] [Thread-138176] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:29:40.126 [DEBUG] [Thread-138176] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:29:40.126 [DEBUG] [Thread-138176] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:29:40.126 [DEBUG] [Thread-138176] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:29:40.127 [DEBUG] [Thread-138176] [transport.py] [_log()] Compression: none
2026-01-01T01:29:40.127 [DEBUG] [Thread-138176] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:29:40.181 [DEBUG] [Thread-138176] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:29:40.182 [DEBUG] [Thread-138176] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:29:40.182 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T01:29:40.183 [DEBUG] [Thread-138176] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T01:29:40.184 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:29:40.237 [DEBUG] [Thread-138176] [transport.py] [_log()] userauth is OK
2026-01-01T01:29:40.237 [DEBUG] [Thread-138176] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:29:40.237 [DEBUG] [Thread-138176] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:29:40.238 [DEBUG] [Thread-138176] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T01:29:40.238 [DEBUG] [Thread-138176] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:29:40.259 [INFO] [Thread-138176] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:29:40.260 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T01:29:40.260 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:29:41.057 [DEBUG] [Thread-138176] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:29:41.057 [DEBUG] [Thread-138176] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:29:41.105 [DEBUG] [Thread-138176] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:29:41.105 [DEBUG] [Thread-138176] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:29:41.113 [DEBUG] [Thread-138176] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:29:41.122 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:29:41.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T01:29:41.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T01:29:41.139 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:29:41.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:29:41.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:29:41.147 [DEBUG] [Thread-138176] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:29:48.601 [DEBUG] [Thread-138178 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:29:50.886 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:29:50.887 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:30:00.739 [DEBUG] [Thread-138179 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:30:03.635 [DEBUG] [Thread-138180 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:30:11.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T01:30:11.152 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T01:30:11.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T01:30:11.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 1, 30, 1), 3.54, 79.23, 0.0, 16.96, 13.74, 0, 0, 0, 2, 0, 0),)
2026-01-01T01:30:11.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 01:30:01
2026-01-01T01:30:11.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T01:30:12.144 [DEBUG] [Thread-138181] [transport.py] [_log()] starting thread (client mode): 0xb95f03a0
2026-01-01T01:30:12.144 [DEBUG] [Thread-138181] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:30:12.163 [DEBUG] [Thread-138181] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T01:30:12.163 [INFO] [Thread-138181] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T01:30:12.166 [DEBUG] [Thread-138181] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:30:12.167 [DEBUG] [Thread-138181] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T01:30:12.167 [DEBUG] [Thread-138181] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:30:12.167 [DEBUG] [Thread-138181] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:30:12.167 [DEBUG] [Thread-138181] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:30:12.167 [DEBUG] [Thread-138181] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:30:12.167 [DEBUG] [Thread-138181] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:30:12.167 [DEBUG] [Thread-138181] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:30:12.167 [DEBUG] [Thread-138181] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:30:12.167 [DEBUG] [Thread-138181] [transport.py] [_log()] client lang: <none>
2026-01-01T01:30:12.167 [DEBUG] [Thread-138181] [transport.py] [_log()] server lang: <none>
2026-01-01T01:30:12.167 [DEBUG] [Thread-138181] [transport.py] [_log()] kex follows: False
2026-01-01T01:30:12.167 [DEBUG] [Thread-138181] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:30:12.167 [DEBUG] [Thread-138181] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:30:12.167 [DEBUG] [Thread-138181] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:30:12.167 [DEBUG] [Thread-138181] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:30:12.167 [DEBUG] [Thread-138181] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:30:12.167 [DEBUG] [Thread-138181] [transport.py] [_log()] Compression: none
2026-01-01T01:30:12.167 [DEBUG] [Thread-138181] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:30:12.184 [DEBUG] [Thread-138181] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:30:12.185 [DEBUG] [Thread-138181] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:30:12.185 [DEBUG] [Thread-138181] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T01:30:12.185 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T01:30:12.186 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:30:12.187 [DEBUG] [Thread-138181] [transport.py] [_log()] userauth is OK
2026-01-01T01:30:12.187 [DEBUG] [Thread-138181] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:30:12.187 [DEBUG] [Thread-138181] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:30:12.187 [DEBUG] [Thread-138181] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T01:30:12.187 [DEBUG] [Thread-138181] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:30:12.212 [INFO] [Thread-138181] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:30:12.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:30:18.668 [DEBUG] [Thread-138183 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:30:19.097 [DEBUG] [Thread-138181] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:30:19.098 [DEBUG] [Thread-138181] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:30:19.098 [DEBUG] [Thread-138181] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T01:30:19.139 [DEBUG] [Thread-138181] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:30:19.139 [DEBUG] [Thread-138181] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:30:19.143 [DEBUG] [Thread-138181] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:30:19.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:30:19.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T01:30:19.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T01:30:19.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T01:30:19.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:30:19.234 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T01:30:19.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:30:19.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:30:19.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T01:30:19.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.978605 -999.00  +14.00  10.85     81  +10.80 1 1 1 2 1     0    0 3.12 3.95 ZNESW 15.5 10.8 221.0 18.5 14.9 -20.8 14.8 -20.6 14.6 -19.2 14.9 -20.0
2026-01-01T01:30:19.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T01:30:19.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T01:30:19.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.978605
2026-01-01T01:30:19.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T01:30:19.236 [DEBUG] [Thread-138181] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:30:19.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T01:30:19.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T01:30:19.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T01:30:19.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T01:30:19.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T01:30:01', tmtdew=3.54, humidity=79.23, cloud=0.0, wind=16.96, temperature=13.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T23:29:11.472', atlas_cloud=1, atlas_rain=1, zp_data=[0.07375000000000043, 0.09625000000000128, 0.13424999999999976, 0.13849999999999874, 0.07900000000000063, 0.10075000000000145, 0.0860000000000003, 0.17025000000000112, 0.08949999999999925, 0.07900000000000063, 0.07124999999999915, 0.19599999999999973, 0.11500000000000021, 0.13175000000000026, 0.05599999999999916, 0.19699999999999918, 0.18074999999999974, 0.19849999999999923, 0.10699999999999932, 0.7032499999999988, 0.13349999999999795, 0.13874999999999815, -0.07174999999999976, 0.11275000000000013, 0.2699999999999996, 0.29100000000000037, 0.25624999999999964, 0.30049999999999955, 0.258, -0.4794999999999998, -1.2544999999999984, -0.46399999999999864, 0.5412499999999998], zp_timestamp='2025-12-31T23:26:00')
2026-01-01T01:30:19.324 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T01:30:19.337 [DEBUG] [Thread-138185] [transport.py] [_log()] starting thread (client mode): 0xb95586d0
2026-01-01T01:30:19.338 [DEBUG] [Thread-138185] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:30:19.353 [DEBUG] [Thread-138185] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T01:30:19.353 [INFO] [Thread-138185] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T01:30:19.361 [DEBUG] [Thread-138185] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:30:19.361 [DEBUG] [Thread-138185] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T01:30:19.361 [DEBUG] [Thread-138185] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:30:19.362 [DEBUG] [Thread-138185] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:30:19.362 [DEBUG] [Thread-138185] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:30:19.362 [DEBUG] [Thread-138185] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:30:19.362 [DEBUG] [Thread-138185] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:30:19.362 [DEBUG] [Thread-138185] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:30:19.362 [DEBUG] [Thread-138185] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:30:19.362 [DEBUG] [Thread-138185] [transport.py] [_log()] client lang: <none>
2026-01-01T01:30:19.363 [DEBUG] [Thread-138185] [transport.py] [_log()] server lang: <none>
2026-01-01T01:30:19.363 [DEBUG] [Thread-138185] [transport.py] [_log()] kex follows: False
2026-01-01T01:30:19.363 [DEBUG] [Thread-138185] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:30:19.363 [DEBUG] [Thread-138185] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:30:19.363 [DEBUG] [Thread-138185] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:30:19.363 [DEBUG] [Thread-138185] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:30:19.364 [DEBUG] [Thread-138185] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:30:19.364 [DEBUG] [Thread-138185] [transport.py] [_log()] Compression: none
2026-01-01T01:30:19.364 [DEBUG] [Thread-138185] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:30:19.418 [DEBUG] [Thread-138185] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:30:19.419 [DEBUG] [Thread-138185] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:30:19.420 [DEBUG] [Thread-138185] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T01:30:19.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T01:30:19.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:30:19.474 [DEBUG] [Thread-138185] [transport.py] [_log()] userauth is OK
2026-01-01T01:30:19.474 [DEBUG] [Thread-138185] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:30:19.475 [DEBUG] [Thread-138185] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:30:19.475 [DEBUG] [Thread-138185] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T01:30:19.475 [DEBUG] [Thread-138185] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:30:19.497 [INFO] [Thread-138185] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:30:19.497 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T01:30:19.498 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:30:20.335 [DEBUG] [Thread-138185] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:30:20.336 [DEBUG] [Thread-138185] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:30:20.383 [DEBUG] [Thread-138185] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:30:20.384 [DEBUG] [Thread-138185] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:30:20.392 [DEBUG] [Thread-138185] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:30:20.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:30: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')
2026-01-01T01:30:20.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T01:30:20.418 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:30:20.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:30:20.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:30:20.426 [DEBUG] [Thread-138185] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:30:33.699 [DEBUG] [Thread-138187 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:30:48.739 [DEBUG] [Thread-138188 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:30:50.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T01:30:50.430 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T01:30:50.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T01:30:51.088 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:30:51.089 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:30:51.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 1, 30, 33), 3.7, 78.34, 0.0, 23.5, 14.05, 0, 0, 0, 2, 0, 0),)
2026-01-01T01:30:51.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 01:30:33
2026-01-01T01:30:51.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T01:30:51.404 [DEBUG] [Thread-138189] [transport.py] [_log()] starting thread (client mode): 0xb6b14a90
2026-01-01T01:30:51.405 [DEBUG] [Thread-138189] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:30:51.423 [DEBUG] [Thread-138189] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T01:30:51.424 [INFO] [Thread-138189] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T01:30:51.427 [DEBUG] [Thread-138189] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:30:51.427 [DEBUG] [Thread-138189] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T01:30:51.427 [DEBUG] [Thread-138189] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:30:51.427 [DEBUG] [Thread-138189] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:30:51.427 [DEBUG] [Thread-138189] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:30:51.427 [DEBUG] [Thread-138189] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:30:51.427 [DEBUG] [Thread-138189] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:30:51.428 [DEBUG] [Thread-138189] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:30:51.428 [DEBUG] [Thread-138189] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:30:51.428 [DEBUG] [Thread-138189] [transport.py] [_log()] client lang: <none>
2026-01-01T01:30:51.428 [DEBUG] [Thread-138189] [transport.py] [_log()] server lang: <none>
2026-01-01T01:30:51.428 [DEBUG] [Thread-138189] [transport.py] [_log()] kex follows: False
2026-01-01T01:30:51.428 [DEBUG] [Thread-138189] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:30:51.428 [DEBUG] [Thread-138189] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:30:51.428 [DEBUG] [Thread-138189] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:30:51.428 [DEBUG] [Thread-138189] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:30:51.428 [DEBUG] [Thread-138189] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:30:51.428 [DEBUG] [Thread-138189] [transport.py] [_log()] Compression: none
2026-01-01T01:30:51.428 [DEBUG] [Thread-138189] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:30:51.445 [DEBUG] [Thread-138189] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:30:51.446 [DEBUG] [Thread-138189] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:30:51.447 [DEBUG] [Thread-138189] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T01:30:51.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T01:30:51.448 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:30:51.449 [DEBUG] [Thread-138189] [transport.py] [_log()] userauth is OK
2026-01-01T01:30:51.449 [DEBUG] [Thread-138189] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:30:51.450 [DEBUG] [Thread-138189] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:30:51.450 [DEBUG] [Thread-138189] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T01:30:51.450 [DEBUG] [Thread-138189] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:30:51.473 [INFO] [Thread-138189] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:30:51.474 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:30:52.103 [DEBUG] [Thread-138189] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:30:52.103 [DEBUG] [Thread-138189] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:30:52.103 [DEBUG] [Thread-138189] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T01:30:52.144 [DEBUG] [Thread-138189] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:30:52.144 [DEBUG] [Thread-138189] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:30:52.147 [DEBUG] [Thread-138189] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:30:52.160 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:30:52.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T01:30:52.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T01:30:52.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T01:30:52.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:30:52.173 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T01:30:52.173 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:30:52.173 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:30:52.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T01:30:52.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.978952 -999.00  +14.00   9.49     80  +10.80 1 1 1 2 1     0    0 3.06 4.55 ZNESW 14.0 9.5 213.2 17.4 15.0 -20.9 14.8 -20.4 14.6 -19.3 14.9 -20.0
2026-01-01T01:30:52.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T01:30:52.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T01:30:52.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.978952
2026-01-01T01:30:52.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T01:30:52.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T01:30:52.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T01:30:52.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T01:30:52.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T01:30:52.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T01:30:33', tmtdew=3.7, humidity=78.34, cloud=0.0, wind=23.5, temperature=14.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T23:29:41.453', atlas_cloud=1, atlas_rain=1, zp_data=[0.04774999999999885, 0.16825000000000045, 0.08924999999999983, 0.067499999999999, 0.0909999999999993, 0.05725000000000158, 0.1404999999999994, 0.1932500000000008, 0.13149999999999906, 0.13199999999999967, 0.056750000000000966, 0.08499999999999908, 0.09999999999999964, 0.11224999999999952, 0.053999999999998494, 0.37599999999999945, 0.2322500000000005, 0.20849999999999902, 0.03799999999999848, 0.10524999999999807, 0.13799999999999812, 0.0727499999999992, 0.12625000000000064, 0.1927500000000002, 0.15249999999999808, 0.18950000000000067, 0.14124999999999943, 0.1725000000000012, 0.2400000000000002, 0.044500000000001094, -0.8844999999999992, 0.07800000000000118, 0.22774999999999856], zp_timestamp='2025-12-31T23:29:00')
2026-01-01T01:30:52.176 [DEBUG] [Thread-138189] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:30:52.260 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T01:30:52.272 [DEBUG] [Thread-138192] [transport.py] [_log()] starting thread (client mode): 0xb95b3040
2026-01-01T01:30:52.272 [DEBUG] [Thread-138192] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:30:52.287 [DEBUG] [Thread-138192] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T01:30:52.287 [INFO] [Thread-138192] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T01:30:52.294 [DEBUG] [Thread-138192] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:30:52.295 [DEBUG] [Thread-138192] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T01:30:52.295 [DEBUG] [Thread-138192] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:30:52.295 [DEBUG] [Thread-138192] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:30:52.295 [DEBUG] [Thread-138192] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:30:52.295 [DEBUG] [Thread-138192] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:30:52.295 [DEBUG] [Thread-138192] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:30:52.295 [DEBUG] [Thread-138192] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:30:52.295 [DEBUG] [Thread-138192] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:30:52.295 [DEBUG] [Thread-138192] [transport.py] [_log()] client lang: <none>
2026-01-01T01:30:52.295 [DEBUG] [Thread-138192] [transport.py] [_log()] server lang: <none>
2026-01-01T01:30:52.295 [DEBUG] [Thread-138192] [transport.py] [_log()] kex follows: False
2026-01-01T01:30:52.295 [DEBUG] [Thread-138192] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:30:52.295 [DEBUG] [Thread-138192] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:30:52.295 [DEBUG] [Thread-138192] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:30:52.295 [DEBUG] [Thread-138192] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:30:52.295 [DEBUG] [Thread-138192] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:30:52.296 [DEBUG] [Thread-138192] [transport.py] [_log()] Compression: none
2026-01-01T01:30:52.296 [DEBUG] [Thread-138192] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:30:52.354 [DEBUG] [Thread-138192] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:30:52.354 [DEBUG] [Thread-138192] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:30:52.355 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T01:30:52.355 [DEBUG] [Thread-138192] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T01:30:52.356 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:30:52.410 [DEBUG] [Thread-138192] [transport.py] [_log()] userauth is OK
2026-01-01T01:30:52.410 [DEBUG] [Thread-138192] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:30:52.411 [DEBUG] [Thread-138192] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:30:52.411 [DEBUG] [Thread-138192] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T01:30:52.411 [DEBUG] [Thread-138192] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:30:52.430 [INFO] [Thread-138192] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:30:52.430 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T01:30:52.431 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:30:53.231 [DEBUG] [Thread-138192] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:30:53.232 [DEBUG] [Thread-138192] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:30:53.279 [DEBUG] [Thread-138192] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:30:53.279 [DEBUG] [Thread-138192] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:30:53.289 [DEBUG] [Thread-138192] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:30:53.298 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:30:53.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T01:30:53.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T01:30:53.317 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:30:53.317 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:30:53.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:30:53.326 [DEBUG] [Thread-138192] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:31:00.807 [DEBUG] [Thread-138194 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:31:03.777 [DEBUG] [Thread-138195 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:31:18.823 [DEBUG] [Thread-138196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:31:23.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T01:31:23.348 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T01:31:23.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T01:31:24.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 1, 31, 5), 3.61, 78.62, 0.0, 19.66, 13.82, 0, 0, 0, 2, 0, 0),)
2026-01-01T01:31:24.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 01:31:05
2026-01-01T01:31:24.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T01:31:24.319 [DEBUG] [Thread-138197] [transport.py] [_log()] starting thread (client mode): 0xb95b2950
2026-01-01T01:31:24.319 [DEBUG] [Thread-138197] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:31:24.339 [DEBUG] [Thread-138197] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T01:31:24.339 [INFO] [Thread-138197] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T01:31:24.342 [DEBUG] [Thread-138197] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:31:24.343 [DEBUG] [Thread-138197] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T01:31:24.343 [DEBUG] [Thread-138197] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:31:24.343 [DEBUG] [Thread-138197] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:31:24.343 [DEBUG] [Thread-138197] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:31:24.343 [DEBUG] [Thread-138197] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:31:24.343 [DEBUG] [Thread-138197] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:31:24.343 [DEBUG] [Thread-138197] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:31:24.343 [DEBUG] [Thread-138197] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:31:24.343 [DEBUG] [Thread-138197] [transport.py] [_log()] client lang: <none>
2026-01-01T01:31:24.343 [DEBUG] [Thread-138197] [transport.py] [_log()] server lang: <none>
2026-01-01T01:31:24.343 [DEBUG] [Thread-138197] [transport.py] [_log()] kex follows: False
2026-01-01T01:31:24.343 [DEBUG] [Thread-138197] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:31:24.343 [DEBUG] [Thread-138197] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:31:24.343 [DEBUG] [Thread-138197] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:31:24.343 [DEBUG] [Thread-138197] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:31:24.343 [DEBUG] [Thread-138197] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:31:24.343 [DEBUG] [Thread-138197] [transport.py] [_log()] Compression: none
2026-01-01T01:31:24.343 [DEBUG] [Thread-138197] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:31:24.359 [DEBUG] [Thread-138197] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:31:24.360 [DEBUG] [Thread-138197] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:31:24.360 [DEBUG] [Thread-138197] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T01:31:24.360 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T01:31:24.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:31:24.362 [DEBUG] [Thread-138197] [transport.py] [_log()] userauth is OK
2026-01-01T01:31:24.362 [DEBUG] [Thread-138197] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:31:24.362 [DEBUG] [Thread-138197] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:31:24.362 [DEBUG] [Thread-138197] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T01:31:24.362 [DEBUG] [Thread-138197] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:31:24.376 [INFO] [Thread-138197] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:31:24.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:31:25.170 [DEBUG] [Thread-138197] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:31:25.170 [DEBUG] [Thread-138197] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:31:25.170 [DEBUG] [Thread-138197] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T01:31:25.211 [DEBUG] [Thread-138197] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:31:25.211 [DEBUG] [Thread-138197] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:31:25.215 [DEBUG] [Thread-138197] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:31:25.229 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:31:25.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T01:31:25.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T01:31:25.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T01:31:25.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:31:25.239 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T01:31:25.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:31:25.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:31:25.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T01:31:25.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.979647 -999.00  +14.00  13.24     80  +10.70 1 1 1 2 1     0    0 3.17 6.63 ZNESW 11.6 13.2 202.1 17.8 14.9 -20.8 14.8 -20.6 14.6 -18.9 14.9 -20.0
2026-01-01T01:31:25.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T01:31:25.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T01:31:25.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.979647
2026-01-01T01:31:25.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T01:31:25.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T01:31:25.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T01:31:25.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T01:31:25.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T01:31:25.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T01:31:05', tmtdew=3.61, humidity=78.62, cloud=0.0, wind=19.66, temperature=13.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T23:30:41.501', atlas_cloud=1, atlas_rain=1, zp_data=[0.04774999999999885, 0.16825000000000045, 0.08924999999999983, 0.067499999999999, 0.0909999999999993, 0.05725000000000158, 0.1404999999999994, 0.1932500000000008, 0.13149999999999906, 0.13199999999999967, 0.056750000000000966, 0.08499999999999908, 0.09999999999999964, 0.11224999999999952, 0.053999999999998494, 0.37599999999999945, 0.2322500000000005, 0.20849999999999902, 0.03799999999999848, 0.10524999999999807, 0.13799999999999812, 0.0727499999999992, 0.12625000000000064, 0.1927500000000002, 0.15249999999999808, 0.18950000000000067, 0.14124999999999943, 0.1725000000000012, 0.2400000000000002, 0.044500000000001094, -0.8844999999999992, 0.07800000000000118, 0.22774999999999856], zp_timestamp='2025-12-31T23:29:00')
2026-01-01T01:31:25.242 [DEBUG] [Thread-138197] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:31:25.321 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T01:31:25.333 [DEBUG] [Thread-138200] [transport.py] [_log()] starting thread (client mode): 0xb6ba0a00
2026-01-01T01:31:25.333 [DEBUG] [Thread-138200] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:31:25.348 [DEBUG] [Thread-138200] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T01:31:25.348 [INFO] [Thread-138200] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T01:31:25.356 [DEBUG] [Thread-138200] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:31:25.356 [DEBUG] [Thread-138200] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T01:31:25.356 [DEBUG] [Thread-138200] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:31:25.357 [DEBUG] [Thread-138200] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:31:25.357 [DEBUG] [Thread-138200] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:31:25.357 [DEBUG] [Thread-138200] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:31:25.357 [DEBUG] [Thread-138200] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:31:25.357 [DEBUG] [Thread-138200] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:31:25.357 [DEBUG] [Thread-138200] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:31:25.357 [DEBUG] [Thread-138200] [transport.py] [_log()] client lang: <none>
2026-01-01T01:31:25.357 [DEBUG] [Thread-138200] [transport.py] [_log()] server lang: <none>
2026-01-01T01:31:25.357 [DEBUG] [Thread-138200] [transport.py] [_log()] kex follows: False
2026-01-01T01:31:25.358 [DEBUG] [Thread-138200] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:31:25.358 [DEBUG] [Thread-138200] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:31:25.358 [DEBUG] [Thread-138200] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:31:25.358 [DEBUG] [Thread-138200] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:31:25.358 [DEBUG] [Thread-138200] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:31:25.358 [DEBUG] [Thread-138200] [transport.py] [_log()] Compression: none
2026-01-01T01:31:25.358 [DEBUG] [Thread-138200] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:31:25.415 [DEBUG] [Thread-138200] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:31:25.415 [DEBUG] [Thread-138200] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:31:25.416 [DEBUG] [Thread-138200] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T01:31:25.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T01:31:25.418 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:31:25.470 [DEBUG] [Thread-138200] [transport.py] [_log()] userauth is OK
2026-01-01T01:31:25.470 [DEBUG] [Thread-138200] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:31:25.470 [DEBUG] [Thread-138200] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:31:25.471 [DEBUG] [Thread-138200] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T01:31:25.471 [DEBUG] [Thread-138200] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:31:25.490 [INFO] [Thread-138200] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:31:25.490 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T01:31:25.491 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:31:26.295 [DEBUG] [Thread-138200] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:31:26.296 [DEBUG] [Thread-138200] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:31:26.344 [DEBUG] [Thread-138200] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:31:26.344 [DEBUG] [Thread-138200] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:31:26.354 [DEBUG] [Thread-138200] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:31:26.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:31:26.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T01:31:26.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T01:31:26.382 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:31:26.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:31:26.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:31:26.390 [DEBUG] [Thread-138200] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:31:33.858 [DEBUG] [Thread-138202 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:31:48.915 [DEBUG] [Thread-138203 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:31:51.292 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:31:51.293 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:31:56.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T01:31:56.413 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T01:31:56.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T01:31:57.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 1, 31, 37), 3.68, 78.54, 0.0, 17.72, 13.81, 0, 0, 0, 2, 0, 0),)
2026-01-01T01:31:57.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 01:31:37
2026-01-01T01:31:57.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T01:31:57.421 [DEBUG] [Thread-138204] [transport.py] [_log()] starting thread (client mode): 0xb6ba0310
2026-01-01T01:31:57.421 [DEBUG] [Thread-138204] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:31:57.442 [DEBUG] [Thread-138204] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T01:31:57.442 [INFO] [Thread-138204] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T01:31:57.445 [DEBUG] [Thread-138204] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:31:57.446 [DEBUG] [Thread-138204] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T01:31:57.446 [DEBUG] [Thread-138204] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:31:57.446 [DEBUG] [Thread-138204] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:31:57.446 [DEBUG] [Thread-138204] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:31:57.446 [DEBUG] [Thread-138204] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:31:57.446 [DEBUG] [Thread-138204] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:31:57.446 [DEBUG] [Thread-138204] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:31:57.446 [DEBUG] [Thread-138204] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:31:57.446 [DEBUG] [Thread-138204] [transport.py] [_log()] client lang: <none>
2026-01-01T01:31:57.446 [DEBUG] [Thread-138204] [transport.py] [_log()] server lang: <none>
2026-01-01T01:31:57.446 [DEBUG] [Thread-138204] [transport.py] [_log()] kex follows: False
2026-01-01T01:31:57.446 [DEBUG] [Thread-138204] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:31:57.446 [DEBUG] [Thread-138204] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:31:57.447 [DEBUG] [Thread-138204] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:31:57.447 [DEBUG] [Thread-138204] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:31:57.447 [DEBUG] [Thread-138204] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:31:57.447 [DEBUG] [Thread-138204] [transport.py] [_log()] Compression: none
2026-01-01T01:31:57.447 [DEBUG] [Thread-138204] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:31:57.466 [DEBUG] [Thread-138204] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:31:57.467 [DEBUG] [Thread-138204] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:31:57.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T01:31:57.468 [DEBUG] [Thread-138204] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T01:31:57.469 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:31:57.471 [DEBUG] [Thread-138204] [transport.py] [_log()] userauth is OK
2026-01-01T01:31:57.471 [DEBUG] [Thread-138204] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:31:57.471 [DEBUG] [Thread-138204] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:31:57.472 [DEBUG] [Thread-138204] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T01:31:57.472 [DEBUG] [Thread-138204] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:31:57.496 [INFO] [Thread-138204] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:31:57.497 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:31:58.076 [DEBUG] [Thread-138204] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:31:58.077 [DEBUG] [Thread-138204] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:31:58.078 [DEBUG] [Thread-138204] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T01:31:58.118 [DEBUG] [Thread-138204] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:31:58.118 [DEBUG] [Thread-138204] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:31:58.121 [DEBUG] [Thread-138204] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:31:58.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:31:58.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T01:31:58.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T01:31:58.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T01:31:58.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:31:58.146 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T01:31:58.146 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:31:58.146 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:31:58.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T01:31:58.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.979994 -999.00  +14.00   9.42     80  +10.70 1 1 1 2 1     0    0 3.24 7.71 ZNESW 11.1 9.4 217.4 23.8 14.9 -20.8 14.8 -20.5 14.6 -19.2 14.9 -20.0
2026-01-01T01:31:58.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T01:31:58.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T01:31:58.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.979994
2026-01-01T01:31:58.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T01:31:58.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T01:31:58.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T01:31:58.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T01:31:58.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T01:31:58.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T01:31:37', tmtdew=3.68, humidity=78.54, cloud=0.0, wind=17.72, temperature=13.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T23:31:11.482', atlas_cloud=1, atlas_rain=1, zp_data=[0.04774999999999885, 0.16825000000000045, 0.08924999999999983, 0.067499999999999, 0.0909999999999993, 0.05725000000000158, 0.1404999999999994, 0.1932500000000008, 0.13149999999999906, 0.13199999999999967, 0.056750000000000966, 0.08499999999999908, 0.09999999999999964, 0.11224999999999952, 0.053999999999998494, 0.37599999999999945, 0.2322500000000005, 0.20849999999999902, 0.03799999999999848, 0.10524999999999807, 0.13799999999999812, 0.0727499999999992, 0.12625000000000064, 0.1927500000000002, 0.15249999999999808, 0.18950000000000067, 0.14124999999999943, 0.1725000000000012, 0.2400000000000002, 0.044500000000001094, -0.8844999999999992, 0.07800000000000118, 0.22774999999999856], zp_timestamp='2025-12-31T23:29:00')
2026-01-01T01:31:58.149 [DEBUG] [Thread-138204] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:31:58.232 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T01:31:58.245 [DEBUG] [Thread-138207] [transport.py] [_log()] starting thread (client mode): 0xb95b0220
2026-01-01T01:31:58.246 [DEBUG] [Thread-138207] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:31:58.261 [DEBUG] [Thread-138207] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T01:31:58.261 [INFO] [Thread-138207] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T01:31:58.268 [DEBUG] [Thread-138207] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:31:58.268 [DEBUG] [Thread-138207] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T01:31:58.268 [DEBUG] [Thread-138207] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:31:58.268 [DEBUG] [Thread-138207] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:31:58.268 [DEBUG] [Thread-138207] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:31:58.268 [DEBUG] [Thread-138207] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:31:58.268 [DEBUG] [Thread-138207] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:31:58.269 [DEBUG] [Thread-138207] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:31:58.269 [DEBUG] [Thread-138207] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:31:58.269 [DEBUG] [Thread-138207] [transport.py] [_log()] client lang: <none>
2026-01-01T01:31:58.269 [DEBUG] [Thread-138207] [transport.py] [_log()] server lang: <none>
2026-01-01T01:31:58.269 [DEBUG] [Thread-138207] [transport.py] [_log()] kex follows: False
2026-01-01T01:31:58.269 [DEBUG] [Thread-138207] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:31:58.269 [DEBUG] [Thread-138207] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:31:58.269 [DEBUG] [Thread-138207] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:31:58.269 [DEBUG] [Thread-138207] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:31:58.269 [DEBUG] [Thread-138207] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:31:58.269 [DEBUG] [Thread-138207] [transport.py] [_log()] Compression: none
2026-01-01T01:31:58.269 [DEBUG] [Thread-138207] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:31:58.326 [DEBUG] [Thread-138207] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:31:58.327 [DEBUG] [Thread-138207] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:31:58.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T01:31:58.329 [DEBUG] [Thread-138207] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T01:31:58.329 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:31:58.383 [DEBUG] [Thread-138207] [transport.py] [_log()] userauth is OK
2026-01-01T01:31:58.383 [DEBUG] [Thread-138207] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:31:58.383 [DEBUG] [Thread-138207] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:31:58.383 [DEBUG] [Thread-138207] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T01:31:58.383 [DEBUG] [Thread-138207] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:31:58.402 [INFO] [Thread-138207] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:31:58.403 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T01:31:58.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:31:59.236 [DEBUG] [Thread-138207] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:31:59.236 [DEBUG] [Thread-138207] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:31:59.284 [DEBUG] [Thread-138207] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:31:59.284 [DEBUG] [Thread-138207] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:31:59.293 [DEBUG] [Thread-138207] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:31:59.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:31:59.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T01:31:59.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T01:31:59.322 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:31:59.322 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:31:59.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:31:59.330 [DEBUG] [Thread-138207] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:32:00.864 [DEBUG] [Thread-138209 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:32:03.945 [DEBUG] [Thread-138210 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:32:18.997 [DEBUG] [Thread-138211 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:32:29.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T01:32:29.353 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T01:32:29.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T01:32:30.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 1, 32, 9), 3.68, 78.52, 0.0, 18.46, 13.82, 0, 0, 0, 2, 0, 0),)
2026-01-01T01:32:30.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 01:32:09
2026-01-01T01:32:30.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T01:32:30.385 [DEBUG] [Thread-138212] [transport.py] [_log()] starting thread (client mode): 0xb955a740
2026-01-01T01:32:30.385 [DEBUG] [Thread-138212] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:32:30.405 [DEBUG] [Thread-138212] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T01:32:30.405 [INFO] [Thread-138212] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T01:32:30.408 [DEBUG] [Thread-138212] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:32:30.408 [DEBUG] [Thread-138212] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T01:32:30.408 [DEBUG] [Thread-138212] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:32:30.408 [DEBUG] [Thread-138212] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:32:30.408 [DEBUG] [Thread-138212] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:32:30.408 [DEBUG] [Thread-138212] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:32:30.408 [DEBUG] [Thread-138212] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:32:30.408 [DEBUG] [Thread-138212] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:32:30.408 [DEBUG] [Thread-138212] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:32:30.408 [DEBUG] [Thread-138212] [transport.py] [_log()] client lang: <none>
2026-01-01T01:32:30.408 [DEBUG] [Thread-138212] [transport.py] [_log()] server lang: <none>
2026-01-01T01:32:30.408 [DEBUG] [Thread-138212] [transport.py] [_log()] kex follows: False
2026-01-01T01:32:30.408 [DEBUG] [Thread-138212] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:32:30.409 [DEBUG] [Thread-138212] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:32:30.409 [DEBUG] [Thread-138212] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:32:30.409 [DEBUG] [Thread-138212] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:32:30.409 [DEBUG] [Thread-138212] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:32:30.409 [DEBUG] [Thread-138212] [transport.py] [_log()] Compression: none
2026-01-01T01:32:30.409 [DEBUG] [Thread-138212] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:32:30.423 [DEBUG] [Thread-138212] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:32:30.423 [DEBUG] [Thread-138212] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:32:30.423 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T01:32:30.423 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:32:30.424 [DEBUG] [Thread-138212] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T01:32:30.424 [DEBUG] [Thread-138212] [transport.py] [_log()] userauth is OK
2026-01-01T01:32:30.424 [DEBUG] [Thread-138212] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:32:30.424 [DEBUG] [Thread-138212] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:32:30.424 [DEBUG] [Thread-138212] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T01:32:30.424 [DEBUG] [Thread-138212] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:32:30.437 [INFO] [Thread-138212] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:32:30.437 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:32:31.212 [DEBUG] [Thread-138212] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:32:31.212 [DEBUG] [Thread-138212] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:32:31.212 [DEBUG] [Thread-138212] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T01:32:31.252 [DEBUG] [Thread-138212] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:32:31.253 [DEBUG] [Thread-138212] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:32:31.255 [DEBUG] [Thread-138212] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:32:31.268 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:32:31.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T01:32:31.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T01:32:31.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T01:32:31.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:32:31.273 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T01:32:31.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:32:31.273 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:32:31.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T01:32:31.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.980342 -999.00  +14.00  10.54     81  +10.80 1 2 1 2 1     0    0 3.26 8.30 ZnESW 10.0 10.5 217.4 14.6 14.9 -20.8 14.8 -20.4 14.5 -19.2 14.8 -20.0
2026-01-01T01:32:31.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T01:32:31.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T01:32:31.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.980342
2026-01-01T01:32:31.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T01:32:31.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T01:32:31.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T01:32:31.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T01:32:31.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T01:32:31.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T01:32:09', tmtdew=3.68, humidity=78.52, cloud=0.0, wind=18.46, temperature=13.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T23:31:41.549', atlas_cloud=2, atlas_rain=1, zp_data=[0.04774999999999885, 0.16825000000000045, 0.08924999999999983, 0.067499999999999, 0.0909999999999993, 0.05725000000000158, 0.1404999999999994, 0.1932500000000008, 0.13149999999999906, 0.13199999999999967, 0.056750000000000966, 0.08499999999999908, 0.09999999999999964, 0.11224999999999952, 0.053999999999998494, 0.37599999999999945, 0.2322500000000005, 0.20849999999999902, 0.03799999999999848, 0.10524999999999807, 0.13799999999999812, 0.0727499999999992, 0.12625000000000064, 0.1927500000000002, 0.15249999999999808, 0.18950000000000067, 0.14124999999999943, 0.1725000000000012, 0.2400000000000002, 0.044500000000001094, -0.8844999999999992, 0.07800000000000118, 0.22774999999999856], zp_timestamp='2025-12-31T23:29:00')
2026-01-01T01:32:31.275 [DEBUG] [Thread-138212] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:32:31.349 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T01:32:31.360 [DEBUG] [Thread-138215] [transport.py] [_log()] starting thread (client mode): 0xb6b163b0
2026-01-01T01:32:31.360 [DEBUG] [Thread-138215] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:32:31.375 [DEBUG] [Thread-138215] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T01:32:31.376 [INFO] [Thread-138215] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T01:32:31.383 [DEBUG] [Thread-138215] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:32:31.383 [DEBUG] [Thread-138215] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T01:32:31.383 [DEBUG] [Thread-138215] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:32:31.383 [DEBUG] [Thread-138215] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:32:31.383 [DEBUG] [Thread-138215] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:32:31.383 [DEBUG] [Thread-138215] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:32:31.383 [DEBUG] [Thread-138215] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:32:31.383 [DEBUG] [Thread-138215] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:32:31.383 [DEBUG] [Thread-138215] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:32:31.383 [DEBUG] [Thread-138215] [transport.py] [_log()] client lang: <none>
2026-01-01T01:32:31.383 [DEBUG] [Thread-138215] [transport.py] [_log()] server lang: <none>
2026-01-01T01:32:31.383 [DEBUG] [Thread-138215] [transport.py] [_log()] kex follows: False
2026-01-01T01:32:31.383 [DEBUG] [Thread-138215] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:32:31.383 [DEBUG] [Thread-138215] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:32:31.383 [DEBUG] [Thread-138215] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:32:31.383 [DEBUG] [Thread-138215] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:32:31.384 [DEBUG] [Thread-138215] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:32:31.384 [DEBUG] [Thread-138215] [transport.py] [_log()] Compression: none
2026-01-01T01:32:31.384 [DEBUG] [Thread-138215] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:32:31.442 [DEBUG] [Thread-138215] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:32:31.442 [DEBUG] [Thread-138215] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:32:31.442 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T01:32:31.442 [DEBUG] [Thread-138215] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T01:32:31.442 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:32:31.498 [DEBUG] [Thread-138215] [transport.py] [_log()] userauth is OK
2026-01-01T01:32:31.498 [DEBUG] [Thread-138215] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:32:31.498 [DEBUG] [Thread-138215] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:32:31.498 [DEBUG] [Thread-138215] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T01:32:31.498 [DEBUG] [Thread-138215] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:32:31.512 [INFO] [Thread-138215] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:32:31.512 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T01:32:31.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:32:32.363 [DEBUG] [Thread-138215] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:32:32.363 [DEBUG] [Thread-138215] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:32:32.412 [DEBUG] [Thread-138215] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:32:32.412 [DEBUG] [Thread-138215] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:32:32.421 [DEBUG] [Thread-138215] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:32:32.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:32:32.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T01:32:32.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T01:32:32.450 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:32:32.450 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:32:32.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:32:32.458 [DEBUG] [Thread-138215] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:32:34.030 [DEBUG] [Thread-138217 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:32:49.085 [DEBUG] [Thread-138218 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:32:51.492 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:32:51.493 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:33:00.922 [DEBUG] [Thread-138219 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:33:02.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T01:33:02.481 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T01:33:02.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T01:33:03.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 1, 32, 41), 3.64, 78.45, 0.0, 19.85, 13.76, 0, 0, 0, 2, 0, 0),)
2026-01-01T01:33:03.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 01:32:41
2026-01-01T01:33:03.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T01:33:03.454 [DEBUG] [Thread-138220] [transport.py] [_log()] starting thread (client mode): 0xb6bbec50
2026-01-01T01:33:03.454 [DEBUG] [Thread-138220] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:33:03.474 [DEBUG] [Thread-138220] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T01:33:03.474 [INFO] [Thread-138220] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T01:33:03.477 [DEBUG] [Thread-138220] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:33:03.477 [DEBUG] [Thread-138220] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T01:33:03.477 [DEBUG] [Thread-138220] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:33:03.477 [DEBUG] [Thread-138220] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:33:03.477 [DEBUG] [Thread-138220] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:33:03.477 [DEBUG] [Thread-138220] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:33:03.477 [DEBUG] [Thread-138220] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:33:03.477 [DEBUG] [Thread-138220] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:33:03.478 [DEBUG] [Thread-138220] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:33:03.478 [DEBUG] [Thread-138220] [transport.py] [_log()] client lang: <none>
2026-01-01T01:33:03.478 [DEBUG] [Thread-138220] [transport.py] [_log()] server lang: <none>
2026-01-01T01:33:03.478 [DEBUG] [Thread-138220] [transport.py] [_log()] kex follows: False
2026-01-01T01:33:03.478 [DEBUG] [Thread-138220] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:33:03.478 [DEBUG] [Thread-138220] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:33:03.478 [DEBUG] [Thread-138220] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:33:03.478 [DEBUG] [Thread-138220] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:33:03.478 [DEBUG] [Thread-138220] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:33:03.478 [DEBUG] [Thread-138220] [transport.py] [_log()] Compression: none
2026-01-01T01:33:03.478 [DEBUG] [Thread-138220] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:33:03.496 [DEBUG] [Thread-138220] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:33:03.496 [DEBUG] [Thread-138220] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:33:03.497 [DEBUG] [Thread-138220] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T01:33:03.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T01:33:03.498 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:33:03.499 [DEBUG] [Thread-138220] [transport.py] [_log()] userauth is OK
2026-01-01T01:33:03.499 [DEBUG] [Thread-138220] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:33:03.499 [DEBUG] [Thread-138220] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:33:03.499 [DEBUG] [Thread-138220] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T01:33:03.500 [DEBUG] [Thread-138220] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:33:03.526 [INFO] [Thread-138220] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:33:03.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:33:04.122 [DEBUG] [Thread-138222 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:33:04.189 [DEBUG] [Thread-138220] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:33:04.189 [DEBUG] [Thread-138220] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:33:04.190 [DEBUG] [Thread-138220] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T01:33:04.230 [DEBUG] [Thread-138220] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:33:04.230 [DEBUG] [Thread-138220] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:33:04.234 [DEBUG] [Thread-138220] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:33:04.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:33:04.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T01:33:04.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T01:33:04.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T01:33:04.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:33:04.259 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T01:33:04.259 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:33:04.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:33:04.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T01:33:04.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.980688 -999.00  +14.00   6.85     81  +10.80 1 2 1 2 1     0    0 3.31 8.46 ZnESW 5.8 6.8 194.1 15.7 14.9 -20.7 14.7 -20.4 14.6 -19.0 14.8 -20.0
2026-01-01T01:33:04.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T01:33:04.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T01:33:04.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.980688
2026-01-01T01:33:04.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T01:33:04.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T01:33:04.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T01:33:04.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T01:33:04.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T01:33:04.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T01:32:41', tmtdew=3.64, humidity=78.45, cloud=0.0, wind=19.85, temperature=13.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T23:32:11.443', atlas_cloud=2, atlas_rain=1, zp_data=[0.04774999999999885, 0.16825000000000045, 0.08924999999999983, 0.067499999999999, 0.0909999999999993, 0.05725000000000158, 0.1404999999999994, 0.1932500000000008, 0.13149999999999906, 0.13199999999999967, 0.056750000000000966, 0.08499999999999908, 0.09999999999999964, 0.11224999999999952, 0.053999999999998494, 0.37599999999999945, 0.2322500000000005, 0.20849999999999902, 0.03799999999999848, 0.10524999999999807, 0.13799999999999812, 0.0727499999999992, 0.12625000000000064, 0.1927500000000002, 0.15249999999999808, 0.18950000000000067, 0.14124999999999943, 0.1725000000000012, 0.2400000000000002, 0.044500000000001094, -0.8844999999999992, 0.07800000000000118, 0.22774999999999856], zp_timestamp='2025-12-31T23:29:00')
2026-01-01T01:33:04.262 [DEBUG] [Thread-138220] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:33:04.346 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T01:33:04.359 [DEBUG] [Thread-138224] [transport.py] [_log()] starting thread (client mode): 0xb6b15e10
2026-01-01T01:33:04.359 [DEBUG] [Thread-138224] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:33:04.375 [DEBUG] [Thread-138224] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T01:33:04.375 [INFO] [Thread-138224] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T01:33:04.382 [DEBUG] [Thread-138224] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:33:04.383 [DEBUG] [Thread-138224] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T01:33:04.383 [DEBUG] [Thread-138224] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:33:04.383 [DEBUG] [Thread-138224] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:33:04.383 [DEBUG] [Thread-138224] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:33:04.383 [DEBUG] [Thread-138224] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:33:04.383 [DEBUG] [Thread-138224] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:33:04.383 [DEBUG] [Thread-138224] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:33:04.383 [DEBUG] [Thread-138224] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:33:04.383 [DEBUG] [Thread-138224] [transport.py] [_log()] client lang: <none>
2026-01-01T01:33:04.383 [DEBUG] [Thread-138224] [transport.py] [_log()] server lang: <none>
2026-01-01T01:33:04.384 [DEBUG] [Thread-138224] [transport.py] [_log()] kex follows: False
2026-01-01T01:33:04.384 [DEBUG] [Thread-138224] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:33:04.384 [DEBUG] [Thread-138224] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:33:04.384 [DEBUG] [Thread-138224] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:33:04.384 [DEBUG] [Thread-138224] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:33:04.384 [DEBUG] [Thread-138224] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:33:04.384 [DEBUG] [Thread-138224] [transport.py] [_log()] Compression: none
2026-01-01T01:33:04.384 [DEBUG] [Thread-138224] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:33:04.446 [DEBUG] [Thread-138224] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:33:04.447 [DEBUG] [Thread-138224] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:33:04.447 [DEBUG] [Thread-138224] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T01:33:04.448 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T01:33:04.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:33:04.503 [DEBUG] [Thread-138224] [transport.py] [_log()] userauth is OK
2026-01-01T01:33:04.503 [DEBUG] [Thread-138224] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:33:04.503 [DEBUG] [Thread-138224] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:33:04.504 [DEBUG] [Thread-138224] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T01:33:04.504 [DEBUG] [Thread-138224] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:33:04.527 [INFO] [Thread-138224] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:33:04.528 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T01:33:04.528 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:33:05.393 [DEBUG] [Thread-138224] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:33:05.393 [DEBUG] [Thread-138224] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:33:05.440 [DEBUG] [Thread-138224] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:33:05.440 [DEBUG] [Thread-138224] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:33:05.448 [DEBUG] [Thread-138224] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:33:05.456 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:33:05.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T01:33:05.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T01:33:05.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:33:05.472 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:33:05.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:33:05.479 [DEBUG] [Thread-138224] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:33:19.154 [DEBUG] [Thread-138226 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:33:34.212 [DEBUG] [Thread-138227 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:33:35.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T01:33:35.502 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T01:33:35.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T01:33:36.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 1, 33, 14), 3.64, 78.47, 0.0, 19.18, 13.81, 0, 0, 0, 2, 0, 0),)
2026-01-01T01:33:36.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 01:33:14
2026-01-01T01:33:36.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T01:33:36.493 [DEBUG] [Thread-138228] [transport.py] [_log()] starting thread (client mode): 0xb6b299f0
2026-01-01T01:33:36.493 [DEBUG] [Thread-138228] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:33:36.513 [DEBUG] [Thread-138228] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T01:33:36.513 [INFO] [Thread-138228] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T01:33:36.516 [DEBUG] [Thread-138228] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:33:36.516 [DEBUG] [Thread-138228] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T01:33:36.516 [DEBUG] [Thread-138228] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:33:36.516 [DEBUG] [Thread-138228] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:33:36.516 [DEBUG] [Thread-138228] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:33:36.516 [DEBUG] [Thread-138228] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:33:36.516 [DEBUG] [Thread-138228] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:33:36.516 [DEBUG] [Thread-138228] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:33:36.516 [DEBUG] [Thread-138228] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:33:36.516 [DEBUG] [Thread-138228] [transport.py] [_log()] client lang: <none>
2026-01-01T01:33:36.516 [DEBUG] [Thread-138228] [transport.py] [_log()] server lang: <none>
2026-01-01T01:33:36.516 [DEBUG] [Thread-138228] [transport.py] [_log()] kex follows: False
2026-01-01T01:33:36.516 [DEBUG] [Thread-138228] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:33:36.516 [DEBUG] [Thread-138228] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:33:36.516 [DEBUG] [Thread-138228] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:33:36.516 [DEBUG] [Thread-138228] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:33:36.516 [DEBUG] [Thread-138228] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:33:36.516 [DEBUG] [Thread-138228] [transport.py] [_log()] Compression: none
2026-01-01T01:33:36.516 [DEBUG] [Thread-138228] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:33:36.533 [DEBUG] [Thread-138228] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:33:36.533 [DEBUG] [Thread-138228] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:33:36.534 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T01:33:36.534 [DEBUG] [Thread-138228] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T01:33:36.535 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:33:36.536 [DEBUG] [Thread-138228] [transport.py] [_log()] userauth is OK
2026-01-01T01:33:36.536 [DEBUG] [Thread-138228] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:33:36.537 [DEBUG] [Thread-138228] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:33:36.537 [DEBUG] [Thread-138228] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T01:33:36.537 [DEBUG] [Thread-138228] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:33:36.573 [INFO] [Thread-138228] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:33:36.574 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:33:37.365 [DEBUG] [Thread-138228] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:33:37.366 [DEBUG] [Thread-138228] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:33:37.366 [DEBUG] [Thread-138228] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T01:33:37.408 [DEBUG] [Thread-138228] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:33:37.408 [DEBUG] [Thread-138228] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:33:37.410 [DEBUG] [Thread-138228] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:33:37.422 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:33:37.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T01:33:37.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T01:33:37.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T01:33:37.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:33:37.433 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T01:33:37.433 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:33:37.433 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:33:37.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T01:33:37.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.981383 -999.00  +13.90   9.40     80  +10.70 1 2 1 2 1     0    0 3.28 9.43 ZnESW 12.6 9.4 219.5 22.5 14.8 -20.8 14.7 -20.6 14.5 -19.0 14.8 -20.1
2026-01-01T01:33:37.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T01:33:37.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T01:33:37.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.981383
2026-01-01T01:33:37.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T01:33:37.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T01:33:37.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T01:33:37.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T01:33:37.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T01:33:37.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T01:33:14', tmtdew=3.64, humidity=78.47, cloud=0.0, wind=19.18, temperature=13.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T00:20:31', seeing=1.34, atlas_timestamp='2025-12-31T23:33:11.491', atlas_cloud=2, atlas_rain=1, zp_data=[0.04774999999999885, 0.16825000000000045, 0.08924999999999983, 0.067499999999999, 0.0909999999999993, 0.05725000000000158, 0.1404999999999994, 0.1932500000000008, 0.13149999999999906, 0.13199999999999967, 0.056750000000000966, 0.08499999999999908, 0.09999999999999964, 0.11224999999999952, 0.053999999999998494, 0.37599999999999945, 0.2322500000000005, 0.20849999999999902, 0.03799999999999848, 0.10524999999999807, 0.13799999999999812, 0.0727499999999992, 0.12625000000000064, 0.1927500000000002, 0.15249999999999808, 0.18950000000000067, 0.14124999999999943, 0.1725000000000012, 0.2400000000000002, 0.044500000000001094, -0.8844999999999992, 0.07800000000000118, 0.22774999999999856], zp_timestamp='2025-12-31T23:29:00')
2026-01-01T01:33:37.436 [DEBUG] [Thread-138228] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:33:37.520 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T01:33:37.533 [DEBUG] [Thread-138231] [transport.py] [_log()] starting thread (client mode): 0xb95f0dc0
2026-01-01T01:33:37.533 [DEBUG] [Thread-138231] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:33:37.548 [DEBUG] [Thread-138231] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T01:33:37.548 [INFO] [Thread-138231] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T01:33:37.556 [DEBUG] [Thread-138231] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:33:37.556 [DEBUG] [Thread-138231] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T01:33:37.556 [DEBUG] [Thread-138231] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:33:37.556 [DEBUG] [Thread-138231] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:33:37.556 [DEBUG] [Thread-138231] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:33:37.557 [DEBUG] [Thread-138231] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:33:37.557 [DEBUG] [Thread-138231] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:33:37.557 [DEBUG] [Thread-138231] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:33:37.557 [DEBUG] [Thread-138231] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:33:37.557 [DEBUG] [Thread-138231] [transport.py] [_log()] client lang: <none>
2026-01-01T01:33:37.557 [DEBUG] [Thread-138231] [transport.py] [_log()] server lang: <none>
2026-01-01T01:33:37.557 [DEBUG] [Thread-138231] [transport.py] [_log()] kex follows: False
2026-01-01T01:33:37.557 [DEBUG] [Thread-138231] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:33:37.557 [DEBUG] [Thread-138231] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:33:37.557 [DEBUG] [Thread-138231] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:33:37.557 [DEBUG] [Thread-138231] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:33:37.557 [DEBUG] [Thread-138231] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:33:37.557 [DEBUG] [Thread-138231] [transport.py] [_log()] Compression: none
2026-01-01T01:33:37.557 [DEBUG] [Thread-138231] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:33:37.616 [DEBUG] [Thread-138231] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:33:37.616 [DEBUG] [Thread-138231] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:33:37.617 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T01:33:37.617 [DEBUG] [Thread-138231] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T01:33:37.618 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:33:37.671 [DEBUG] [Thread-138231] [transport.py] [_log()] userauth is OK
2026-01-01T01:33:37.672 [DEBUG] [Thread-138231] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:33:37.672 [DEBUG] [Thread-138231] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:33:37.672 [DEBUG] [Thread-138231] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T01:33:37.672 [DEBUG] [Thread-138231] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:33:37.691 [INFO] [Thread-138231] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:33:37.691 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T01:33:37.692 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:33:38.525 [DEBUG] [Thread-138231] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:33:38.525 [DEBUG] [Thread-138231] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:33:38.573 [DEBUG] [Thread-138231] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:33:38.573 [DEBUG] [Thread-138231] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:33:38.583 [DEBUG] [Thread-138231] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:33:38.593 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:33:38.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T01:33:38.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T01:33:38.612 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:33:38.612 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:33:38.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:33:38.620 [DEBUG] [Thread-138231] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:33:49.247 [DEBUG] [Thread-138233 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:33:51.693 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:33:51.695 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:34:00.994 [DEBUG] [Thread-138234 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:34:04.284 [DEBUG] [Thread-138235 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:34:08.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T01:34:08.640 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T01:34:08.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T01:34:09.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 1, 33, 46), 3.68, 78.54, 0.0, 21.67, 13.82, 0, 0, 0, 2, 0, 0),)
2026-01-01T01:34:09.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 01:33:46
2026-01-01T01:34:09.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T01:34:09.612 [DEBUG] [Thread-138236] [transport.py] [_log()] starting thread (client mode): 0xb1744df0
2026-01-01T01:34:09.612 [DEBUG] [Thread-138236] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:34:09.634 [DEBUG] [Thread-138236] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T01:34:09.634 [INFO] [Thread-138236] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T01:34:09.637 [DEBUG] [Thread-138236] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:34:09.637 [DEBUG] [Thread-138236] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T01:34:09.637 [DEBUG] [Thread-138236] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:34:09.637 [DEBUG] [Thread-138236] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:34:09.637 [DEBUG] [Thread-138236] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:34:09.637 [DEBUG] [Thread-138236] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:34:09.637 [DEBUG] [Thread-138236] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:34:09.637 [DEBUG] [Thread-138236] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:34:09.637 [DEBUG] [Thread-138236] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:34:09.637 [DEBUG] [Thread-138236] [transport.py] [_log()] client lang: <none>
2026-01-01T01:34:09.637 [DEBUG] [Thread-138236] [transport.py] [_log()] server lang: <none>
2026-01-01T01:34:09.637 [DEBUG] [Thread-138236] [transport.py] [_log()] kex follows: False
2026-01-01T01:34:09.637 [DEBUG] [Thread-138236] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:34:09.637 [DEBUG] [Thread-138236] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:34:09.637 [DEBUG] [Thread-138236] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:34:09.637 [DEBUG] [Thread-138236] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:34:09.637 [DEBUG] [Thread-138236] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:34:09.637 [DEBUG] [Thread-138236] [transport.py] [_log()] Compression: none
2026-01-01T01:34:09.637 [DEBUG] [Thread-138236] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:34:09.654 [DEBUG] [Thread-138236] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:34:09.655 [DEBUG] [Thread-138236] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:34:09.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T01:34:09.656 [DEBUG] [Thread-138236] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T01:34:09.657 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:34:09.658 [DEBUG] [Thread-138236] [transport.py] [_log()] userauth is OK
2026-01-01T01:34:09.658 [DEBUG] [Thread-138236] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:34:09.658 [DEBUG] [Thread-138236] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:34:09.658 [DEBUG] [Thread-138236] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T01:34:09.659 [DEBUG] [Thread-138236] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:34:09.692 [INFO] [Thread-138236] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:34:09.692 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:34:10.326 [DEBUG] [Thread-138236] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:34:10.327 [DEBUG] [Thread-138236] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:34:10.327 [DEBUG] [Thread-138236] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T01:34:10.368 [DEBUG] [Thread-138236] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:34:10.369 [DEBUG] [Thread-138236] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:34:10.372 [DEBUG] [Thread-138236] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:34:10.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:34:10.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T01:34:10.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T01:34:10.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T01:34:10.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:34:10.397 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T01:34:10.397 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:34:10.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:34:10.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T01:34:10.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.981730 -999.00  +13.90   9.58     80  +10.70 1 2 1 2 1     0    0 3.38 11.29 ZnESW 11.3 9.6 223.3 18.0 14.8 -20.7 14.7 -20.3 14.5 -19.2 14.8 -20.1
2026-01-01T01:34:10.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T01:34:10.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T01:34:10.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.981730
2026-01-01T01:34:10.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T01:34:10.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T01:34:10.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T01:34:10.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T01:34:10.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T01:34:10.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T01:33:46', tmtdew=3.68, humidity=78.54, cloud=0.0, wind=21.67, temperature=13.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T01:33:46', seeing=1.14, atlas_timestamp='2025-12-31T23:33:41.472', atlas_cloud=2, atlas_rain=1, zp_data=[0.04774999999999885, 0.16825000000000045, 0.08924999999999983, 0.067499999999999, 0.0909999999999993, 0.05725000000000158, 0.1404999999999994, 0.1932500000000008, 0.13149999999999906, 0.13199999999999967, 0.056750000000000966, 0.08499999999999908, 0.09999999999999964, 0.11224999999999952, 0.053999999999998494, 0.37599999999999945, 0.2322500000000005, 0.20849999999999902, 0.03799999999999848, 0.10524999999999807, 0.13799999999999812, 0.0727499999999992, 0.12625000000000064, 0.1927500000000002, 0.15249999999999808, 0.18950000000000067, 0.14124999999999943, 0.1725000000000012, 0.2400000000000002, 0.044500000000001094, -0.8844999999999992, 0.07800000000000118, 0.22774999999999856], zp_timestamp='2025-12-31T23:32:00')
2026-01-01T01:34:10.400 [DEBUG] [Thread-138236] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:34:10.482 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T01:34:10.497 [DEBUG] [Thread-138239] [transport.py] [_log()] starting thread (client mode): 0xb9558460
2026-01-01T01:34:10.497 [DEBUG] [Thread-138239] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:34:10.513 [DEBUG] [Thread-138239] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T01:34:10.514 [INFO] [Thread-138239] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T01:34:10.521 [DEBUG] [Thread-138239] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:34:10.522 [DEBUG] [Thread-138239] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T01:34:10.522 [DEBUG] [Thread-138239] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:34:10.522 [DEBUG] [Thread-138239] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:34:10.522 [DEBUG] [Thread-138239] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:34:10.522 [DEBUG] [Thread-138239] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:34:10.522 [DEBUG] [Thread-138239] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:34:10.523 [DEBUG] [Thread-138239] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:34:10.523 [DEBUG] [Thread-138239] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:34:10.523 [DEBUG] [Thread-138239] [transport.py] [_log()] client lang: <none>
2026-01-01T01:34:10.523 [DEBUG] [Thread-138239] [transport.py] [_log()] server lang: <none>
2026-01-01T01:34:10.523 [DEBUG] [Thread-138239] [transport.py] [_log()] kex follows: False
2026-01-01T01:34:10.523 [DEBUG] [Thread-138239] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:34:10.523 [DEBUG] [Thread-138239] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:34:10.523 [DEBUG] [Thread-138239] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:34:10.524 [DEBUG] [Thread-138239] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:34:10.524 [DEBUG] [Thread-138239] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:34:10.524 [DEBUG] [Thread-138239] [transport.py] [_log()] Compression: none
2026-01-01T01:34:10.524 [DEBUG] [Thread-138239] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:34:10.580 [DEBUG] [Thread-138239] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:34:10.580 [DEBUG] [Thread-138239] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:34:10.581 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T01:34:10.581 [DEBUG] [Thread-138239] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T01:34:10.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:34:10.636 [DEBUG] [Thread-138239] [transport.py] [_log()] userauth is OK
2026-01-01T01:34:10.636 [DEBUG] [Thread-138239] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:34:10.637 [DEBUG] [Thread-138239] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:34:10.637 [DEBUG] [Thread-138239] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T01:34:10.637 [DEBUG] [Thread-138239] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:34:10.662 [INFO] [Thread-138239] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:34:10.662 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T01:34:10.663 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:34:11.509 [DEBUG] [Thread-138239] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:34:11.510 [DEBUG] [Thread-138239] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:34:11.557 [DEBUG] [Thread-138239] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:34:11.557 [DEBUG] [Thread-138239] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:34:11.567 [DEBUG] [Thread-138239] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:34:11.576 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:34:11.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T01:34:11.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T01:34:11.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:34:11.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:34:11.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:34:11.604 [DEBUG] [Thread-138239] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:34:19.320 [DEBUG] [Thread-138241 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:34:34.359 [DEBUG] [Thread-138242 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:34:41.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T01:34:41.597 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T01:34: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
2026-01-01T01:34:42.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 1, 34, 18), 3.69, 78.44, 0.0, 20.59, 13.77, 0, 0, 0, 2, 0, 0),)
2026-01-01T01:34:42.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 01:34:18
2026-01-01T01:34:42.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T01:34:42.580 [DEBUG] [Thread-138243] [transport.py] [_log()] starting thread (client mode): 0xb17476a0
2026-01-01T01:34:42.581 [DEBUG] [Thread-138243] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:34:42.601 [DEBUG] [Thread-138243] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T01:34:42.601 [INFO] [Thread-138243] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T01:34:42.604 [DEBUG] [Thread-138243] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:34:42.605 [DEBUG] [Thread-138243] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T01:34:42.605 [DEBUG] [Thread-138243] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:34:42.605 [DEBUG] [Thread-138243] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:34:42.605 [DEBUG] [Thread-138243] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:34:42.605 [DEBUG] [Thread-138243] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:34:42.605 [DEBUG] [Thread-138243] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:34:42.605 [DEBUG] [Thread-138243] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:34:42.605 [DEBUG] [Thread-138243] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:34:42.605 [DEBUG] [Thread-138243] [transport.py] [_log()] client lang: <none>
2026-01-01T01:34:42.605 [DEBUG] [Thread-138243] [transport.py] [_log()] server lang: <none>
2026-01-01T01:34:42.605 [DEBUG] [Thread-138243] [transport.py] [_log()] kex follows: False
2026-01-01T01:34:42.605 [DEBUG] [Thread-138243] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:34:42.605 [DEBUG] [Thread-138243] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:34:42.605 [DEBUG] [Thread-138243] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:34:42.605 [DEBUG] [Thread-138243] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:34:42.605 [DEBUG] [Thread-138243] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:34:42.605 [DEBUG] [Thread-138243] [transport.py] [_log()] Compression: none
2026-01-01T01:34:42.605 [DEBUG] [Thread-138243] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:34:42.613 [DEBUG] [Thread-138243] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:34:42.614 [DEBUG] [Thread-138243] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:34:42.614 [DEBUG] [Thread-138243] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T01:34:42.615 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T01:34:42.615 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:34:42.616 [DEBUG] [Thread-138243] [transport.py] [_log()] userauth is OK
2026-01-01T01:34:42.616 [DEBUG] [Thread-138243] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:34:42.617 [DEBUG] [Thread-138243] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:34:42.617 [DEBUG] [Thread-138243] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T01:34:42.617 [DEBUG] [Thread-138243] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:34:42.636 [INFO] [Thread-138243] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:34:42.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:34:43.269 [DEBUG] [Thread-138243] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:34:43.269 [DEBUG] [Thread-138243] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:34:43.270 [DEBUG] [Thread-138243] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T01:34:43.310 [DEBUG] [Thread-138243] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:34:43.310 [DEBUG] [Thread-138243] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:34:43.313 [DEBUG] [Thread-138243] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:34:43.326 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:34:43.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T01:34:43.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T01:34:43.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T01:34:43.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:34:43.339 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T01:34:43.339 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:34:43.339 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:34:43.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T01:34:43.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.982077 -999.00  +13.90  19.38     80  +10.70 1 2 1 2 1     0    0 3.42 11.82 ZnESW 14.9 19.4 224.2 24.9 14.8 -20.7 14.7 -20.3 14.5 -19.3 14.8 -20.2
2026-01-01T01:34:43.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T01:34:43.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T01:34:43.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.982077
2026-01-01T01:34:43.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T01:34:43.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T01:34:43.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T01:34:43.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T01:34:43.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T01:34:43.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T01:34:18', tmtdew=3.69, humidity=78.44, cloud=0.0, wind=20.59, temperature=13.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T01:34:18', seeing=1.0, atlas_timestamp='2025-12-31T23:34:11.453', atlas_cloud=2, atlas_rain=1, zp_data=[0.04774999999999885, 0.16825000000000045, 0.08924999999999983, 0.067499999999999, 0.0909999999999993, 0.05725000000000158, 0.1404999999999994, 0.1932500000000008, 0.13149999999999906, 0.13199999999999967, 0.056750000000000966, 0.08499999999999908, 0.09999999999999964, 0.11224999999999952, 0.053999999999998494, 0.37599999999999945, 0.2322500000000005, 0.20849999999999902, 0.03799999999999848, 0.10524999999999807, 0.13799999999999812, 0.0727499999999992, 0.12625000000000064, 0.1927500000000002, 0.15249999999999808, 0.18950000000000067, 0.14124999999999943, 0.1725000000000012, 0.2400000000000002, 0.044500000000001094, -0.8844999999999992, 0.07800000000000118, 0.22774999999999856], zp_timestamp='2025-12-31T23:32:00')
2026-01-01T01:34:43.342 [DEBUG] [Thread-138243] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:34:43.428 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T01:34:43.440 [DEBUG] [Thread-138246] [transport.py] [_log()] starting thread (client mode): 0xb95f37f0
2026-01-01T01:34:43.440 [DEBUG] [Thread-138246] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:34:43.456 [DEBUG] [Thread-138246] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T01:34:43.456 [INFO] [Thread-138246] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T01:34:43.464 [DEBUG] [Thread-138246] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:34:43.465 [DEBUG] [Thread-138246] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T01:34:43.465 [DEBUG] [Thread-138246] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:34:43.465 [DEBUG] [Thread-138246] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:34:43.465 [DEBUG] [Thread-138246] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:34:43.465 [DEBUG] [Thread-138246] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:34:43.465 [DEBUG] [Thread-138246] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:34:43.466 [DEBUG] [Thread-138246] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:34:43.466 [DEBUG] [Thread-138246] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:34:43.466 [DEBUG] [Thread-138246] [transport.py] [_log()] client lang: <none>
2026-01-01T01:34:43.466 [DEBUG] [Thread-138246] [transport.py] [_log()] server lang: <none>
2026-01-01T01:34:43.466 [DEBUG] [Thread-138246] [transport.py] [_log()] kex follows: False
2026-01-01T01:34:43.466 [DEBUG] [Thread-138246] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:34:43.466 [DEBUG] [Thread-138246] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:34:43.466 [DEBUG] [Thread-138246] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:34:43.466 [DEBUG] [Thread-138246] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:34:43.466 [DEBUG] [Thread-138246] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:34:43.466 [DEBUG] [Thread-138246] [transport.py] [_log()] Compression: none
2026-01-01T01:34:43.466 [DEBUG] [Thread-138246] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:34:43.524 [DEBUG] [Thread-138246] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:34:43.524 [DEBUG] [Thread-138246] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:34:43.525 [DEBUG] [Thread-138246] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T01:34:43.525 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T01:34:43.526 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:34:43.580 [DEBUG] [Thread-138246] [transport.py] [_log()] userauth is OK
2026-01-01T01:34:43.580 [DEBUG] [Thread-138246] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:34:43.581 [DEBUG] [Thread-138246] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:34:43.581 [DEBUG] [Thread-138246] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T01:34:43.581 [DEBUG] [Thread-138246] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:34:43.599 [INFO] [Thread-138246] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:34:43.600 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T01:34:43.601 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:34:44.435 [DEBUG] [Thread-138246] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:34:44.436 [DEBUG] [Thread-138246] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:34:44.484 [DEBUG] [Thread-138246] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:34:44.484 [DEBUG] [Thread-138246] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:34:44.493 [DEBUG] [Thread-138246] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:34:44.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:34:44.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T01:34:44.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T01:34:44.520 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:34:44.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:34:44.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:34:44.529 [DEBUG] [Thread-138246] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:34:49.399 [DEBUG] [Thread-138248 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:34:51.898 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:34:51.899 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:35:01.062 [DEBUG] [Thread-138249 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:35:04.447 [DEBUG] [Thread-138250 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:35:14.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T01:35:14.552 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T01:35:14.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T01:35:15.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 1, 34, 50), 3.71, 78.35, 0.0, 17.98, 13.77, 0, 0, 0, 2, 0, 0),)
2026-01-01T01:35:15.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 01:34:50
2026-01-01T01:35:15.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T01:35:15.555 [DEBUG] [Thread-138251] [transport.py] [_log()] starting thread (client mode): 0xb6b2ae60
2026-01-01T01:35:15.556 [DEBUG] [Thread-138251] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:35:15.576 [DEBUG] [Thread-138251] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T01:35:15.576 [INFO] [Thread-138251] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T01:35:15.579 [DEBUG] [Thread-138251] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:35:15.579 [DEBUG] [Thread-138251] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T01:35:15.580 [DEBUG] [Thread-138251] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:35:15.580 [DEBUG] [Thread-138251] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:35:15.580 [DEBUG] [Thread-138251] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:35:15.580 [DEBUG] [Thread-138251] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:35:15.580 [DEBUG] [Thread-138251] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:35:15.580 [DEBUG] [Thread-138251] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:35:15.580 [DEBUG] [Thread-138251] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:35:15.580 [DEBUG] [Thread-138251] [transport.py] [_log()] client lang: <none>
2026-01-01T01:35:15.580 [DEBUG] [Thread-138251] [transport.py] [_log()] server lang: <none>
2026-01-01T01:35:15.580 [DEBUG] [Thread-138251] [transport.py] [_log()] kex follows: False
2026-01-01T01:35:15.580 [DEBUG] [Thread-138251] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:35:15.580 [DEBUG] [Thread-138251] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:35:15.580 [DEBUG] [Thread-138251] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:35:15.581 [DEBUG] [Thread-138251] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:35:15.581 [DEBUG] [Thread-138251] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:35:15.581 [DEBUG] [Thread-138251] [transport.py] [_log()] Compression: none
2026-01-01T01:35:15.581 [DEBUG] [Thread-138251] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:35:15.597 [DEBUG] [Thread-138251] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:35:15.598 [DEBUG] [Thread-138251] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:35:15.598 [DEBUG] [Thread-138251] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T01:35:15.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T01:35:15.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:35:15.600 [DEBUG] [Thread-138251] [transport.py] [_log()] userauth is OK
2026-01-01T01:35:15.600 [DEBUG] [Thread-138251] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:35:15.600 [DEBUG] [Thread-138251] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:35:15.601 [DEBUG] [Thread-138251] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T01:35:15.601 [DEBUG] [Thread-138251] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:35:15.618 [INFO] [Thread-138251] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:35:15.619 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:35:16.349 [DEBUG] [Thread-138251] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:35:16.350 [DEBUG] [Thread-138251] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:35:16.350 [DEBUG] [Thread-138251] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T01:35:16.391 [DEBUG] [Thread-138251] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:35:16.391 [DEBUG] [Thread-138251] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:35:16.394 [DEBUG] [Thread-138251] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:35:16.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:35:16.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T01:35:16.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T01:35:16.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T01:35:16.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:35:16.430 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T01:35:16.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:35:16.431 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:35:16.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T01:35:16.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.982424 -999.00  +13.90   9.01     81  +10.70 1 2 1 2 1     0    0 3.47 13.79 ZnESW 7.1 9.0 246.8 17.3 14.8 -20.8 14.6 -20.4 14.4 -19.0 14.8 -20.1
2026-01-01T01:35:16.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T01:35:16.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T01:35:16.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.982424
2026-01-01T01:35:16.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T01:35:16.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T01:35:16.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T01:35:16.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T01:35:16.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-01-01T01:35:16.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T01:34:50', tmtdew=3.71, humidity=78.35, cloud=0.0, wind=17.98, temperature=13.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T01:34:50', seeing=1.07, atlas_timestamp='2025-12-31T23:34:41.434', atlas_cloud=2, atlas_rain=1, zp_data=[0.04774999999999885, 0.16825000000000045, 0.08924999999999983, 0.067499999999999, 0.0909999999999993, 0.05725000000000158, 0.1404999999999994, 0.1932500000000008, 0.13149999999999906, 0.13199999999999967, 0.056750000000000966, 0.08499999999999908, 0.09999999999999964, 0.11224999999999952, 0.053999999999998494, 0.37599999999999945, 0.2322500000000005, 0.20849999999999902, 0.03799999999999848, 0.10524999999999807, 0.13799999999999812, 0.0727499999999992, 0.12625000000000064, 0.1927500000000002, 0.15249999999999808, 0.18950000000000067, 0.14124999999999943, 0.1725000000000012, 0.2400000000000002, 0.044500000000001094, -0.8844999999999992, 0.07800000000000118, 0.22774999999999856], zp_timestamp='2025-12-31T23:32:00')
2026-01-01T01:35:16.433 [DEBUG] [Thread-138251] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:35:16.518 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T01:35:16.532 [DEBUG] [Thread-138254] [transport.py] [_log()] starting thread (client mode): 0xb6b29330
2026-01-01T01:35:16.532 [DEBUG] [Thread-138254] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:35:16.547 [DEBUG] [Thread-138254] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T01:35:16.547 [INFO] [Thread-138254] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T01:35:16.555 [DEBUG] [Thread-138254] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:35:16.555 [DEBUG] [Thread-138254] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T01:35:16.556 [DEBUG] [Thread-138254] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:35:16.556 [DEBUG] [Thread-138254] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:35:16.556 [DEBUG] [Thread-138254] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:35:16.556 [DEBUG] [Thread-138254] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:35:16.556 [DEBUG] [Thread-138254] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:35:16.556 [DEBUG] [Thread-138254] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:35:16.556 [DEBUG] [Thread-138254] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:35:16.556 [DEBUG] [Thread-138254] [transport.py] [_log()] client lang: <none>
2026-01-01T01:35:16.557 [DEBUG] [Thread-138254] [transport.py] [_log()] server lang: <none>
2026-01-01T01:35:16.557 [DEBUG] [Thread-138254] [transport.py] [_log()] kex follows: False
2026-01-01T01:35:16.557 [DEBUG] [Thread-138254] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:35:16.557 [DEBUG] [Thread-138254] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:35:16.557 [DEBUG] [Thread-138254] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:35:16.557 [DEBUG] [Thread-138254] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:35:16.557 [DEBUG] [Thread-138254] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:35:16.558 [DEBUG] [Thread-138254] [transport.py] [_log()] Compression: none
2026-01-01T01:35:16.558 [DEBUG] [Thread-138254] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:35:16.616 [DEBUG] [Thread-138254] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:35:16.617 [DEBUG] [Thread-138254] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:35:16.618 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T01:35:16.618 [DEBUG] [Thread-138254] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T01:35:16.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:35:16.671 [DEBUG] [Thread-138254] [transport.py] [_log()] userauth is OK
2026-01-01T01:35:16.672 [DEBUG] [Thread-138254] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:35:16.672 [DEBUG] [Thread-138254] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:35:16.672 [DEBUG] [Thread-138254] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T01:35:16.672 [DEBUG] [Thread-138254] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:35:16.691 [INFO] [Thread-138254] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:35:16.692 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T01:35:16.692 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:35:17.534 [DEBUG] [Thread-138254] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:35:17.534 [DEBUG] [Thread-138254] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:35:17.582 [DEBUG] [Thread-138254] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:35:17.582 [DEBUG] [Thread-138254] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:35:17.591 [DEBUG] [Thread-138254] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:35:17.601 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:35:17.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T01:35:17.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T01:35:17.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:35:17.619 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:35:17.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:35:17.628 [DEBUG] [Thread-138254] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:35:19.483 [DEBUG] [Thread-138256 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:35:34.538 [DEBUG] [Thread-138257 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:35:47.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T01:35:47.634 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T01:35:47.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T01:35:48.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 1, 35, 22), 3.71, 78.35, 0.0, 17.1, 13.82, 0, 0, 0, 2, 0, 0),)
2026-01-01T01:35:48.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 01:35:22
2026-01-01T01:35:48.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T01:35:48.621 [DEBUG] [Thread-138258] [transport.py] [_log()] starting thread (client mode): 0xb6b29660
2026-01-01T01:35:48.621 [DEBUG] [Thread-138258] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:35:48.641 [DEBUG] [Thread-138258] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T01:35:48.641 [INFO] [Thread-138258] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T01:35:48.644 [DEBUG] [Thread-138258] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:35:48.645 [DEBUG] [Thread-138258] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T01:35:48.645 [DEBUG] [Thread-138258] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:35:48.645 [DEBUG] [Thread-138258] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:35:48.645 [DEBUG] [Thread-138258] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:35:48.645 [DEBUG] [Thread-138258] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:35:48.645 [DEBUG] [Thread-138258] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:35:48.645 [DEBUG] [Thread-138258] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:35:48.645 [DEBUG] [Thread-138258] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:35:48.645 [DEBUG] [Thread-138258] [transport.py] [_log()] client lang: <none>
2026-01-01T01:35:48.645 [DEBUG] [Thread-138258] [transport.py] [_log()] server lang: <none>
2026-01-01T01:35:48.645 [DEBUG] [Thread-138258] [transport.py] [_log()] kex follows: False
2026-01-01T01:35:48.645 [DEBUG] [Thread-138258] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:35:48.645 [DEBUG] [Thread-138258] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:35:48.645 [DEBUG] [Thread-138258] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:35:48.645 [DEBUG] [Thread-138258] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:35:48.646 [DEBUG] [Thread-138258] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:35:48.646 [DEBUG] [Thread-138258] [transport.py] [_log()] Compression: none
2026-01-01T01:35:48.646 [DEBUG] [Thread-138258] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:35:48.663 [DEBUG] [Thread-138258] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:35:48.664 [DEBUG] [Thread-138258] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:35:48.664 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T01:35:48.664 [DEBUG] [Thread-138258] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T01:35:48.665 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:35:48.667 [DEBUG] [Thread-138258] [transport.py] [_log()] userauth is OK
2026-01-01T01:35:48.667 [DEBUG] [Thread-138258] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:35:48.667 [DEBUG] [Thread-138258] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:35:48.667 [DEBUG] [Thread-138258] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T01:35:48.667 [DEBUG] [Thread-138258] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:35:48.703 [INFO] [Thread-138258] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:35:48.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:35:49.322 [DEBUG] [Thread-138258] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:35:49.322 [DEBUG] [Thread-138258] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:35:49.323 [DEBUG] [Thread-138258] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T01:35:49.363 [DEBUG] [Thread-138258] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:35:49.363 [DEBUG] [Thread-138258] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:35:49.367 [DEBUG] [Thread-138258] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:35:49.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:35:49.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T01:35:49.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T01:35:49.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T01:35:49.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:35:49.392 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T01:35:49.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:35:49.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:35:49.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T01:35:49.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.982772 -999.00  +13.90  11.42     80  +10.70 1 1 1 2 1     0    0 3.49 14.26 ZNESW 6.0 11.4 208.8 18.8 14.8 -20.8 14.7 -20.3 14.5 -19.1 14.7 -20.1
2026-01-01T01:35:49.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T01:35:49.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T01:35:49.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.982772
2026-01-01T01:35:49.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T01:35:49.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T01:35:49.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T01:35:49.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T01:35:49.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T01:35:49.395 [DEBUG] [Thread-138258] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:35:49.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T01:35:22', tmtdew=3.71, humidity=78.35, cloud=0.0, wind=17.1, temperature=13.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T01:35:22', seeing=1.07, atlas_timestamp='2025-12-31T23:35:11.501', atlas_cloud=1, atlas_rain=1, zp_data=[0.04774999999999885, 0.16825000000000045, 0.08924999999999983, 0.067499999999999, 0.0909999999999993, 0.05725000000000158, 0.1404999999999994, 0.1932500000000008, 0.13149999999999906, 0.13199999999999967, 0.056750000000000966, 0.08499999999999908, 0.09999999999999964, 0.11224999999999952, 0.053999999999998494, 0.37599999999999945, 0.2322500000000005, 0.20849999999999902, 0.03799999999999848, 0.10524999999999807, 0.13799999999999812, 0.0727499999999992, 0.12625000000000064, 0.1927500000000002, 0.15249999999999808, 0.18950000000000067, 0.14124999999999943, 0.1725000000000012, 0.2400000000000002, 0.044500000000001094, -0.8844999999999992, 0.07800000000000118, 0.22774999999999856], zp_timestamp='2025-12-31T23:32:00')
2026-01-01T01:35:49.486 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T01:35:49.497 [DEBUG] [Thread-138261] [transport.py] [_log()] starting thread (client mode): 0xb6b28d60
2026-01-01T01:35:49.497 [DEBUG] [Thread-138261] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:35:49.513 [DEBUG] [Thread-138261] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T01:35:49.513 [INFO] [Thread-138261] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T01:35:49.520 [DEBUG] [Thread-138261] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:35:49.520 [DEBUG] [Thread-138261] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T01:35:49.520 [DEBUG] [Thread-138261] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:35:49.520 [DEBUG] [Thread-138261] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:35:49.520 [DEBUG] [Thread-138261] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:35:49.520 [DEBUG] [Thread-138261] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:35:49.520 [DEBUG] [Thread-138261] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:35:49.521 [DEBUG] [Thread-138261] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:35:49.521 [DEBUG] [Thread-138261] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:35:49.521 [DEBUG] [Thread-138261] [transport.py] [_log()] client lang: <none>
2026-01-01T01:35:49.521 [DEBUG] [Thread-138261] [transport.py] [_log()] server lang: <none>
2026-01-01T01:35:49.521 [DEBUG] [Thread-138261] [transport.py] [_log()] kex follows: False
2026-01-01T01:35:49.521 [DEBUG] [Thread-138261] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:35:49.521 [DEBUG] [Thread-138261] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:35:49.521 [DEBUG] [Thread-138261] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:35:49.521 [DEBUG] [Thread-138261] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:35:49.521 [DEBUG] [Thread-138261] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:35:49.521 [DEBUG] [Thread-138261] [transport.py] [_log()] Compression: none
2026-01-01T01:35:49.521 [DEBUG] [Thread-138261] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:35:49.572 [DEBUG] [Thread-138263 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:35:49.579 [DEBUG] [Thread-138261] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:35:49.580 [DEBUG] [Thread-138261] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:35:49.580 [DEBUG] [Thread-138261] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T01:35:49.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T01:35:49.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:35:49.636 [DEBUG] [Thread-138261] [transport.py] [_log()] userauth is OK
2026-01-01T01:35:49.636 [DEBUG] [Thread-138261] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:35:49.636 [DEBUG] [Thread-138261] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:35:49.637 [DEBUG] [Thread-138261] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T01:35:49.637 [DEBUG] [Thread-138261] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:35:49.656 [INFO] [Thread-138261] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:35:49.656 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T01:35:49.657 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:35:50.582 [DEBUG] [Thread-138261] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:35:50.582 [DEBUG] [Thread-138261] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:35:50.630 [DEBUG] [Thread-138261] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:35:50.630 [DEBUG] [Thread-138261] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:35:50.639 [DEBUG] [Thread-138261] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:35:50.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:35:50.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T01:35:50.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T01:35:50.667 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:35:50.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:35:50.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:35:50.676 [DEBUG] [Thread-138261] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:35:52.098 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:35:52.099 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:36:01.143 [DEBUG] [Thread-138264 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:36:04.622 [DEBUG] [Thread-138265 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:36:19.657 [DEBUG] [Thread-138266 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:36:20.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T01:36:20.698 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T01:36:20.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T01:36:21.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 1, 35, 54), 3.71, 78.37, 0.0, 19.57, 13.72, 0, 0, 0, 2, 0, 0),)
2026-01-01T01:36:21.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 01:35:54
2026-01-01T01:36:21.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T01:36:21.752 [DEBUG] [Thread-138267] [transport.py] [_log()] starting thread (client mode): 0xb6b2b820
2026-01-01T01:36:21.752 [DEBUG] [Thread-138267] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:36:21.772 [DEBUG] [Thread-138267] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T01:36:21.772 [INFO] [Thread-138267] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T01:36:21.774 [DEBUG] [Thread-138267] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:36:21.774 [DEBUG] [Thread-138267] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T01:36:21.774 [DEBUG] [Thread-138267] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:36:21.774 [DEBUG] [Thread-138267] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:36:21.774 [DEBUG] [Thread-138267] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:36:21.774 [DEBUG] [Thread-138267] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:36:21.774 [DEBUG] [Thread-138267] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:36:21.774 [DEBUG] [Thread-138267] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:36:21.774 [DEBUG] [Thread-138267] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:36:21.774 [DEBUG] [Thread-138267] [transport.py] [_log()] client lang: <none>
2026-01-01T01:36:21.774 [DEBUG] [Thread-138267] [transport.py] [_log()] server lang: <none>
2026-01-01T01:36:21.774 [DEBUG] [Thread-138267] [transport.py] [_log()] kex follows: False
2026-01-01T01:36:21.774 [DEBUG] [Thread-138267] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:36:21.774 [DEBUG] [Thread-138267] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:36:21.774 [DEBUG] [Thread-138267] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:36:21.774 [DEBUG] [Thread-138267] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:36:21.774 [DEBUG] [Thread-138267] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:36:21.774 [DEBUG] [Thread-138267] [transport.py] [_log()] Compression: none
2026-01-01T01:36:21.774 [DEBUG] [Thread-138267] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:36:21.789 [DEBUG] [Thread-138267] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:36:21.789 [DEBUG] [Thread-138267] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:36:21.789 [DEBUG] [Thread-138267] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T01:36:21.789 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T01:36:21.789 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:36:21.790 [DEBUG] [Thread-138267] [transport.py] [_log()] userauth is OK
2026-01-01T01:36:21.790 [DEBUG] [Thread-138267] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:36:21.790 [DEBUG] [Thread-138267] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:36:21.790 [DEBUG] [Thread-138267] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T01:36:21.790 [DEBUG] [Thread-138267] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:36:21.806 [INFO] [Thread-138267] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:36:21.806 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:36:22.410 [DEBUG] [Thread-138267] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:36:22.410 [DEBUG] [Thread-138267] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:36:22.410 [DEBUG] [Thread-138267] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T01:36:22.452 [DEBUG] [Thread-138267] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:36:22.452 [DEBUG] [Thread-138267] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:36:22.455 [DEBUG] [Thread-138267] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:36:22.469 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:36:22.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T01:36:22.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T01:36:22.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T01:36:22.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:36:22.478 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T01:36:22.478 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:36:22.478 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:36:22.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T01:36:22.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.983119 -999.00  +13.90  10.48     80  +10.60 1 1 1 2 1     0    0 3.47 15.54 ZNESW 10.1 10.5 227.6 21.5 14.8 -20.9 14.6 -20.4 14.4 -19.2 14.7 -20.1
2026-01-01T01:36:22.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T01:36:22.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T01:36:22.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.983119
2026-01-01T01:36:22.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T01:36:22.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T01:36:22.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T01:36:22.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T01:36:22.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T01:36:22.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T01:35:54', tmtdew=3.71, humidity=78.37, cloud=0.0, wind=19.57, temperature=13.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T01:35:54', seeing=0.92, atlas_timestamp='2025-12-31T23:35:41.482', atlas_cloud=1, atlas_rain=1, zp_data=[0.04774999999999885, 0.16825000000000045, 0.08924999999999983, 0.067499999999999, 0.0909999999999993, 0.05725000000000158, 0.1404999999999994, 0.1932500000000008, 0.13149999999999906, 0.13199999999999967, 0.056750000000000966, 0.08499999999999908, 0.09999999999999964, 0.11224999999999952, 0.053999999999998494, 0.37599999999999945, 0.2322500000000005, 0.20849999999999902, 0.03799999999999848, 0.10524999999999807, 0.13799999999999812, 0.0727499999999992, 0.12625000000000064, 0.1927500000000002, 0.15249999999999808, 0.18950000000000067, 0.14124999999999943, 0.1725000000000012, 0.2400000000000002, 0.044500000000001094, -0.8844999999999992, 0.07800000000000118, 0.22774999999999856], zp_timestamp='2025-12-31T23:32:00')
2026-01-01T01:36:22.479 [DEBUG] [Thread-138267] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:36:22.552 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T01:36:22.565 [DEBUG] [Thread-138270] [transport.py] [_log()] starting thread (client mode): 0xb6b28a90
2026-01-01T01:36:22.565 [DEBUG] [Thread-138270] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:36:22.581 [DEBUG] [Thread-138270] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T01:36:22.581 [INFO] [Thread-138270] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T01:36:22.588 [DEBUG] [Thread-138270] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:36:22.588 [DEBUG] [Thread-138270] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T01:36:22.588 [DEBUG] [Thread-138270] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:36:22.588 [DEBUG] [Thread-138270] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:36:22.588 [DEBUG] [Thread-138270] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:36:22.588 [DEBUG] [Thread-138270] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:36:22.588 [DEBUG] [Thread-138270] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:36:22.588 [DEBUG] [Thread-138270] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:36:22.588 [DEBUG] [Thread-138270] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:36:22.588 [DEBUG] [Thread-138270] [transport.py] [_log()] client lang: <none>
2026-01-01T01:36:22.588 [DEBUG] [Thread-138270] [transport.py] [_log()] server lang: <none>
2026-01-01T01:36:22.588 [DEBUG] [Thread-138270] [transport.py] [_log()] kex follows: False
2026-01-01T01:36:22.588 [DEBUG] [Thread-138270] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:36:22.588 [DEBUG] [Thread-138270] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:36:22.588 [DEBUG] [Thread-138270] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:36:22.588 [DEBUG] [Thread-138270] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:36:22.588 [DEBUG] [Thread-138270] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:36:22.589 [DEBUG] [Thread-138270] [transport.py] [_log()] Compression: none
2026-01-01T01:36:22.589 [DEBUG] [Thread-138270] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:36:22.647 [DEBUG] [Thread-138270] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:36:22.647 [DEBUG] [Thread-138270] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:36:22.647 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T01:36:22.648 [DEBUG] [Thread-138270] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T01:36:22.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:36:22.704 [DEBUG] [Thread-138270] [transport.py] [_log()] userauth is OK
2026-01-01T01:36:22.704 [DEBUG] [Thread-138270] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:36:22.704 [DEBUG] [Thread-138270] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:36:22.704 [DEBUG] [Thread-138270] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T01:36:22.704 [DEBUG] [Thread-138270] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:36:22.722 [INFO] [Thread-138270] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:36:22.722 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T01:36:22.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:36:23.557 [DEBUG] [Thread-138270] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:36:23.557 [DEBUG] [Thread-138270] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:36:23.605 [DEBUG] [Thread-138270] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:36:23.605 [DEBUG] [Thread-138270] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:36:23.614 [DEBUG] [Thread-138270] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:36:23.621 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:36:23.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T01:36:23.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T01:36:23.637 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:36:23.637 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:36:23.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:36:23.645 [DEBUG] [Thread-138270] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:36:34.688 [DEBUG] [Thread-138272 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:36:49.752 [DEBUG] [Thread-138273 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:36:52.299 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:36:52.300 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:36:53.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T01:36:53.668 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T01:36:53.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T01:36:54.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 1, 36, 26), 3.69, 78.44, 0.0, 20.12, 13.74, 0, 0, 0, 2, 0, 0),)
2026-01-01T01:36:54.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 01:36:26
2026-01-01T01:36:54.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T01:36:54.684 [DEBUG] [Thread-138274] [transport.py] [_log()] starting thread (client mode): 0xb95f2cb0
2026-01-01T01:36:54.684 [DEBUG] [Thread-138274] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:36:54.705 [DEBUG] [Thread-138274] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T01:36:54.705 [INFO] [Thread-138274] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T01:36:54.708 [DEBUG] [Thread-138274] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:36:54.708 [DEBUG] [Thread-138274] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T01:36:54.709 [DEBUG] [Thread-138274] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:36:54.709 [DEBUG] [Thread-138274] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:36:54.709 [DEBUG] [Thread-138274] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:36:54.709 [DEBUG] [Thread-138274] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:36:54.709 [DEBUG] [Thread-138274] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:36:54.709 [DEBUG] [Thread-138274] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:36:54.709 [DEBUG] [Thread-138274] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:36:54.709 [DEBUG] [Thread-138274] [transport.py] [_log()] client lang: <none>
2026-01-01T01:36:54.709 [DEBUG] [Thread-138274] [transport.py] [_log()] server lang: <none>
2026-01-01T01:36:54.709 [DEBUG] [Thread-138274] [transport.py] [_log()] kex follows: False
2026-01-01T01:36:54.709 [DEBUG] [Thread-138274] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:36:54.709 [DEBUG] [Thread-138274] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:36:54.709 [DEBUG] [Thread-138274] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:36:54.709 [DEBUG] [Thread-138274] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:36:54.709 [DEBUG] [Thread-138274] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:36:54.709 [DEBUG] [Thread-138274] [transport.py] [_log()] Compression: none
2026-01-01T01:36:54.709 [DEBUG] [Thread-138274] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:36:54.727 [DEBUG] [Thread-138274] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:36:54.727 [DEBUG] [Thread-138274] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:36:54.727 [DEBUG] [Thread-138274] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T01:36:54.727 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T01:36:54.727 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:36:54.728 [DEBUG] [Thread-138274] [transport.py] [_log()] userauth is OK
2026-01-01T01:36:54.728 [DEBUG] [Thread-138274] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:36:54.728 [DEBUG] [Thread-138274] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:36:54.728 [DEBUG] [Thread-138274] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T01:36:54.728 [DEBUG] [Thread-138274] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:36:54.743 [INFO] [Thread-138274] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:36:54.744 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:36:55.361 [DEBUG] [Thread-138274] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:36:55.361 [DEBUG] [Thread-138274] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:36:55.361 [DEBUG] [Thread-138274] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T01:36:55.402 [DEBUG] [Thread-138274] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:36:55.403 [DEBUG] [Thread-138274] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:36:55.406 [DEBUG] [Thread-138274] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:36:55.412 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:36:55.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T01:36:55.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T01:36:55.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T01:36:55.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:36:55.421 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T01:36:55.422 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:36:55.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:36:55.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T01:36:55.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.983813 -999.00  +13.90  15.74     81  +10.70 1 1 1 2 1     0    0 3.60 17.02 ZNESW 13.3 15.7 211.6 21.3 14.8 -20.9 14.6 -20.4 14.4 -19.0 14.7 -20.1
2026-01-01T01:36:55.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T01:36:55.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T01:36:55.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.983813
2026-01-01T01:36:55.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T01:36:55.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T01:36:55.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T01:36:55.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T01:36:55.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T01:36:55.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T01:36:26', tmtdew=3.69, humidity=78.44, cloud=0.0, wind=20.12, temperature=13.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T01:36:26', seeing=0.9, atlas_timestamp='2025-12-31T23:36:41.443', atlas_cloud=1, atlas_rain=1, zp_data=[0.027249999999998664, 0.03575000000000017, 0.06125000000000114, 0.043499999999998096, 0.03549999999999898, 0.08125000000000071, 0.0600000000000005, 0.03675000000000139, 0.0, 0.04100000000000037, 0.03275000000000006, 0.11849999999999916, 0.14150000000000063, 0.06424999999999947, -0.049500000000001876, 0.07399999999999807, 0.09024999999999928, 0.19799999999999862, 0.0824999999999978, 0.17024999999999935, 0.129999999999999, 0.08824999999999861, 0.04625000000000057, 0.50875, 0.2544999999999984, 0.266, 0.28775000000000084, 0.27449999999999974, 0.35250000000000004, 0.12400000000000055, -0.07399999999999807, 0.3865000000000016, 0.22974999999999923], zp_timestamp='2025-12-31T23:35:00')
2026-01-01T01:36:55.424 [DEBUG] [Thread-138274] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:36:55.501 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T01:36:55.513 [DEBUG] [Thread-138277] [transport.py] [_log()] starting thread (client mode): 0xb95f15d0
2026-01-01T01:36:55.513 [DEBUG] [Thread-138277] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:36:55.528 [DEBUG] [Thread-138277] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T01:36:55.528 [INFO] [Thread-138277] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T01:36:55.536 [DEBUG] [Thread-138277] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:36:55.536 [DEBUG] [Thread-138277] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T01:36:55.536 [DEBUG] [Thread-138277] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:36:55.536 [DEBUG] [Thread-138277] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:36:55.536 [DEBUG] [Thread-138277] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:36:55.536 [DEBUG] [Thread-138277] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:36:55.536 [DEBUG] [Thread-138277] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:36:55.537 [DEBUG] [Thread-138277] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:36:55.537 [DEBUG] [Thread-138277] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:36:55.537 [DEBUG] [Thread-138277] [transport.py] [_log()] client lang: <none>
2026-01-01T01:36:55.537 [DEBUG] [Thread-138277] [transport.py] [_log()] server lang: <none>
2026-01-01T01:36:55.537 [DEBUG] [Thread-138277] [transport.py] [_log()] kex follows: False
2026-01-01T01:36:55.537 [DEBUG] [Thread-138277] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:36:55.537 [DEBUG] [Thread-138277] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:36:55.537 [DEBUG] [Thread-138277] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:36:55.537 [DEBUG] [Thread-138277] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:36:55.538 [DEBUG] [Thread-138277] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:36:55.538 [DEBUG] [Thread-138277] [transport.py] [_log()] Compression: none
2026-01-01T01:36:55.538 [DEBUG] [Thread-138277] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:36:55.593 [DEBUG] [Thread-138277] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:36:55.594 [DEBUG] [Thread-138277] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:36:55.595 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T01:36:55.595 [DEBUG] [Thread-138277] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T01:36:55.596 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:36:55.652 [DEBUG] [Thread-138277] [transport.py] [_log()] userauth is OK
2026-01-01T01:36:55.653 [DEBUG] [Thread-138277] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:36:55.653 [DEBUG] [Thread-138277] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:36:55.653 [DEBUG] [Thread-138277] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T01:36:55.653 [DEBUG] [Thread-138277] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:36:55.675 [INFO] [Thread-138277] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:36:55.675 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T01:36:55.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:36:56.523 [DEBUG] [Thread-138277] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:36:56.524 [DEBUG] [Thread-138277] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:36:56.571 [DEBUG] [Thread-138277] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:36:56.571 [DEBUG] [Thread-138277] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:36:56.580 [DEBUG] [Thread-138277] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:36:56.587 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:36:56.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T01:36:56.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T01:36:56.603 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:36:56.603 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:36:56.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:36:56.611 [DEBUG] [Thread-138277] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:37:01.208 [DEBUG] [Thread-138279 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:37:04.787 [DEBUG] [Thread-138280 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:37:19.842 [DEBUG] [Thread-138281 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:37:26.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T01:37:26.634 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T01:37:26.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T01:37:27.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 1, 36, 58), 3.75, 77.94, 0.0, 18.92, 13.82, 0, 0, 0, 2, 0, 0),)
2026-01-01T01:37:27.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 01:36:58
2026-01-01T01:37:27.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T01:37:27.625 [DEBUG] [Thread-138282] [transport.py] [_log()] starting thread (client mode): 0xb6b2a560
2026-01-01T01:37:27.625 [DEBUG] [Thread-138282] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:37:27.645 [DEBUG] [Thread-138282] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T01:37:27.645 [INFO] [Thread-138282] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T01:37:27.649 [DEBUG] [Thread-138282] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:37:27.649 [DEBUG] [Thread-138282] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T01:37:27.649 [DEBUG] [Thread-138282] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:37:27.649 [DEBUG] [Thread-138282] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:37:27.649 [DEBUG] [Thread-138282] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:37:27.649 [DEBUG] [Thread-138282] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:37:27.649 [DEBUG] [Thread-138282] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:37:27.649 [DEBUG] [Thread-138282] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:37:27.649 [DEBUG] [Thread-138282] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:37:27.649 [DEBUG] [Thread-138282] [transport.py] [_log()] client lang: <none>
2026-01-01T01:37:27.649 [DEBUG] [Thread-138282] [transport.py] [_log()] server lang: <none>
2026-01-01T01:37:27.649 [DEBUG] [Thread-138282] [transport.py] [_log()] kex follows: False
2026-01-01T01:37:27.649 [DEBUG] [Thread-138282] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:37:27.649 [DEBUG] [Thread-138282] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:37:27.649 [DEBUG] [Thread-138282] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:37:27.650 [DEBUG] [Thread-138282] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:37:27.650 [DEBUG] [Thread-138282] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:37:27.650 [DEBUG] [Thread-138282] [transport.py] [_log()] Compression: none
2026-01-01T01:37:27.650 [DEBUG] [Thread-138282] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:37:27.667 [DEBUG] [Thread-138282] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:37:27.668 [DEBUG] [Thread-138282] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:37:27.669 [DEBUG] [Thread-138282] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T01:37:27.669 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T01:37:27.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:37:27.672 [DEBUG] [Thread-138282] [transport.py] [_log()] userauth is OK
2026-01-01T01:37:27.672 [DEBUG] [Thread-138282] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:37:27.672 [DEBUG] [Thread-138282] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:37:27.672 [DEBUG] [Thread-138282] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T01:37:27.672 [DEBUG] [Thread-138282] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:37:27.687 [INFO] [Thread-138282] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:37:27.688 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:37:28.321 [DEBUG] [Thread-138282] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:37:28.321 [DEBUG] [Thread-138282] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:37:28.321 [DEBUG] [Thread-138282] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T01:37:28.362 [DEBUG] [Thread-138282] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:37:28.362 [DEBUG] [Thread-138282] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:37:28.365 [DEBUG] [Thread-138282] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:37:28.377 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:37:28.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T01:37:28.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T01:37:28.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T01:37:28.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:37:28.387 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T01:37:28.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:37:28.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:37:28.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T01:37:28.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.984160 -999.00  +13.90   9.49     81  +10.70 1 1 1 2 1     0    0 3.55 16.85 ZNESW 6.8 9.5 222.7 19.1 14.8 -20.9 14.6 -20.3 14.4 -19.0 14.7 -20.0
2026-01-01T01:37:28.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T01:37:28.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T01:37:28.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.984160
2026-01-01T01:37:28.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T01:37:28.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T01:37:28.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T01:37:28.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T01:37:28.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T01:37:28.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T01:36:58', tmtdew=3.75, humidity=77.94, cloud=0.0, wind=18.92, temperature=13.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T01:36:58', seeing=1.07, atlas_timestamp='2025-12-31T23:37:11.424', atlas_cloud=1, atlas_rain=1, zp_data=[0.027249999999998664, 0.03575000000000017, 0.06125000000000114, 0.043499999999998096, 0.03549999999999898, 0.08125000000000071, 0.0600000000000005, 0.03675000000000139, 0.0, 0.04100000000000037, 0.03275000000000006, 0.11849999999999916, 0.14150000000000063, 0.06424999999999947, -0.049500000000001876, 0.07399999999999807, 0.09024999999999928, 0.19799999999999862, 0.0824999999999978, 0.17024999999999935, 0.129999999999999, 0.08824999999999861, 0.04625000000000057, 0.50875, 0.2544999999999984, 0.266, 0.28775000000000084, 0.27449999999999974, 0.35250000000000004, 0.12400000000000055, -0.07399999999999807, 0.3865000000000016, 0.22974999999999923], zp_timestamp='2025-12-31T23:35:00')
2026-01-01T01:37:28.389 [DEBUG] [Thread-138282] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:37:28.472 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T01:37:28.483 [DEBUG] [Thread-138285] [transport.py] [_log()] starting thread (client mode): 0xb6bbfe80
2026-01-01T01:37:28.483 [DEBUG] [Thread-138285] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:37:28.499 [DEBUG] [Thread-138285] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T01:37:28.499 [INFO] [Thread-138285] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T01:37:28.506 [DEBUG] [Thread-138285] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:37:28.506 [DEBUG] [Thread-138285] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T01:37:28.506 [DEBUG] [Thread-138285] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:37:28.506 [DEBUG] [Thread-138285] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:37:28.506 [DEBUG] [Thread-138285] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:37:28.507 [DEBUG] [Thread-138285] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:37:28.507 [DEBUG] [Thread-138285] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:37:28.507 [DEBUG] [Thread-138285] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:37:28.507 [DEBUG] [Thread-138285] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:37:28.507 [DEBUG] [Thread-138285] [transport.py] [_log()] client lang: <none>
2026-01-01T01:37:28.507 [DEBUG] [Thread-138285] [transport.py] [_log()] server lang: <none>
2026-01-01T01:37:28.507 [DEBUG] [Thread-138285] [transport.py] [_log()] kex follows: False
2026-01-01T01:37:28.507 [DEBUG] [Thread-138285] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:37:28.507 [DEBUG] [Thread-138285] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:37:28.507 [DEBUG] [Thread-138285] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:37:28.507 [DEBUG] [Thread-138285] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:37:28.507 [DEBUG] [Thread-138285] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:37:28.507 [DEBUG] [Thread-138285] [transport.py] [_log()] Compression: none
2026-01-01T01:37:28.507 [DEBUG] [Thread-138285] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:37:28.565 [DEBUG] [Thread-138285] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:37:28.565 [DEBUG] [Thread-138285] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:37:28.566 [DEBUG] [Thread-138285] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T01:37:28.566 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T01:37:28.566 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:37:28.621 [DEBUG] [Thread-138285] [transport.py] [_log()] userauth is OK
2026-01-01T01:37:28.621 [DEBUG] [Thread-138285] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:37:28.621 [DEBUG] [Thread-138285] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:37:28.621 [DEBUG] [Thread-138285] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T01:37:28.621 [DEBUG] [Thread-138285] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:37:28.641 [INFO] [Thread-138285] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:37:28.642 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T01:37:28.642 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:37:29.487 [DEBUG] [Thread-138285] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:37:29.487 [DEBUG] [Thread-138285] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:37:29.535 [DEBUG] [Thread-138285] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:37:29.535 [DEBUG] [Thread-138285] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:37:29.544 [DEBUG] [Thread-138285] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:37:29.553 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:37:29.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T01:37:29.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T01:37:29.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:37:29.571 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:37:29.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:37:29.579 [DEBUG] [Thread-138285] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:37:34.876 [DEBUG] [Thread-138287 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:37:49.926 [DEBUG] [Thread-138288 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:37:52.503 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:37:52.504 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:37:59.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T01:37:59.600 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T01:37:59.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T01:38:00.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 1, 37, 30), 3.74, 77.94, 0.0, 19.64, 13.76, 0, 0, 0, 2, 0, 0),)
2026-01-01T01:38:00.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 01:37:30
2026-01-01T01:38:00.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T01:38:00.579 [DEBUG] [Thread-138289] [transport.py] [_log()] starting thread (client mode): 0xb95f0be0
2026-01-01T01:38:00.579 [DEBUG] [Thread-138289] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:38:00.599 [DEBUG] [Thread-138289] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T01:38:00.600 [INFO] [Thread-138289] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T01:38:00.603 [DEBUG] [Thread-138289] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:38:00.603 [DEBUG] [Thread-138289] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T01:38:00.603 [DEBUG] [Thread-138289] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:38:00.603 [DEBUG] [Thread-138289] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:38:00.603 [DEBUG] [Thread-138289] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:38:00.603 [DEBUG] [Thread-138289] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:38:00.603 [DEBUG] [Thread-138289] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:38:00.603 [DEBUG] [Thread-138289] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:38:00.603 [DEBUG] [Thread-138289] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:38:00.603 [DEBUG] [Thread-138289] [transport.py] [_log()] client lang: <none>
2026-01-01T01:38:00.603 [DEBUG] [Thread-138289] [transport.py] [_log()] server lang: <none>
2026-01-01T01:38:00.603 [DEBUG] [Thread-138289] [transport.py] [_log()] kex follows: False
2026-01-01T01:38:00.603 [DEBUG] [Thread-138289] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:38:00.604 [DEBUG] [Thread-138289] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:38:00.604 [DEBUG] [Thread-138289] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:38:00.604 [DEBUG] [Thread-138289] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:38:00.604 [DEBUG] [Thread-138289] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:38:00.604 [DEBUG] [Thread-138289] [transport.py] [_log()] Compression: none
2026-01-01T01:38:00.604 [DEBUG] [Thread-138289] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:38:00.620 [DEBUG] [Thread-138289] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:38:00.621 [DEBUG] [Thread-138289] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:38:00.621 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T01:38:00.622 [DEBUG] [Thread-138289] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T01:38:00.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:38:00.665 [DEBUG] [Thread-138289] [transport.py] [_log()] userauth is OK
2026-01-01T01:38:00.665 [DEBUG] [Thread-138289] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:38:00.665 [DEBUG] [Thread-138289] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:38:00.665 [DEBUG] [Thread-138289] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T01:38:00.666 [DEBUG] [Thread-138289] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:38:00.686 [INFO] [Thread-138289] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:38:00.686 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:38:01.288 [DEBUG] [Thread-138291 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:38:01.321 [DEBUG] [Thread-138289] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:38:01.321 [DEBUG] [Thread-138289] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:38:01.321 [DEBUG] [Thread-138289] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T01:38:01.362 [DEBUG] [Thread-138289] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:38:01.362 [DEBUG] [Thread-138289] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:38:01.365 [DEBUG] [Thread-138289] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:38:01.377 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:38:01.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T01:38:01.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T01:38:01.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T01:38:01.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:38:01.388 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T01:38:01.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:38:01.388 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:38:01.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T01:38:01.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.984508 -999.00  +13.90   8.16     81  +10.70 1 1 1 2 1     0    0 3.66 17.76 ZNESW 8.6 8.2 217.4 18.8 14.7 -20.8 14.6 -20.4 14.4 -19.0 14.7 -20.1
2026-01-01T01:38:01.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T01:38:01.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T01:38:01.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.984508
2026-01-01T01:38:01.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T01:38:01.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T01:38:01.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T01:38:01.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T01:38:01.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T01:38:01.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T01:37:30', tmtdew=3.74, humidity=77.94, cloud=0.0, wind=19.64, temperature=13.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T01:37:30', seeing=1.07, atlas_timestamp='2025-12-31T23:37:41.491', atlas_cloud=1, atlas_rain=1, zp_data=[0.027249999999998664, 0.03575000000000017, 0.06125000000000114, 0.043499999999998096, 0.03549999999999898, 0.08125000000000071, 0.0600000000000005, 0.03675000000000139, 0.0, 0.04100000000000037, 0.03275000000000006, 0.11849999999999916, 0.14150000000000063, 0.06424999999999947, -0.049500000000001876, 0.07399999999999807, 0.09024999999999928, 0.19799999999999862, 0.0824999999999978, 0.17024999999999935, 0.129999999999999, 0.08824999999999861, 0.04625000000000057, 0.50875, 0.2544999999999984, 0.266, 0.28775000000000084, 0.27449999999999974, 0.35250000000000004, 0.12400000000000055, -0.07399999999999807, 0.3865000000000016, 0.22974999999999923], zp_timestamp='2025-12-31T23:35:00')
2026-01-01T01:38:01.391 [DEBUG] [Thread-138289] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:38:01.474 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T01:38:01.486 [DEBUG] [Thread-138293] [transport.py] [_log()] starting thread (client mode): 0xb95589a0
2026-01-01T01:38:01.486 [DEBUG] [Thread-138293] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:38:01.502 [DEBUG] [Thread-138293] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T01:38:01.502 [INFO] [Thread-138293] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T01:38:01.510 [DEBUG] [Thread-138293] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:38:01.510 [DEBUG] [Thread-138293] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T01:38:01.510 [DEBUG] [Thread-138293] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:38:01.511 [DEBUG] [Thread-138293] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:38:01.511 [DEBUG] [Thread-138293] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:38:01.511 [DEBUG] [Thread-138293] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:38:01.511 [DEBUG] [Thread-138293] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:38:01.511 [DEBUG] [Thread-138293] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:38:01.511 [DEBUG] [Thread-138293] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:38:01.511 [DEBUG] [Thread-138293] [transport.py] [_log()] client lang: <none>
2026-01-01T01:38:01.511 [DEBUG] [Thread-138293] [transport.py] [_log()] server lang: <none>
2026-01-01T01:38:01.511 [DEBUG] [Thread-138293] [transport.py] [_log()] kex follows: False
2026-01-01T01:38:01.511 [DEBUG] [Thread-138293] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:38:01.511 [DEBUG] [Thread-138293] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:38:01.511 [DEBUG] [Thread-138293] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:38:01.511 [DEBUG] [Thread-138293] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:38:01.511 [DEBUG] [Thread-138293] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:38:01.511 [DEBUG] [Thread-138293] [transport.py] [_log()] Compression: none
2026-01-01T01:38:01.511 [DEBUG] [Thread-138293] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:38:01.569 [DEBUG] [Thread-138293] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:38:01.570 [DEBUG] [Thread-138293] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:38:01.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T01:38:01.571 [DEBUG] [Thread-138293] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T01:38:01.572 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:38:01.625 [DEBUG] [Thread-138293] [transport.py] [_log()] userauth is OK
2026-01-01T01:38:01.625 [DEBUG] [Thread-138293] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:38:01.626 [DEBUG] [Thread-138293] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:38:01.626 [DEBUG] [Thread-138293] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T01:38:01.626 [DEBUG] [Thread-138293] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:38:01.646 [INFO] [Thread-138293] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:38:01.646 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T01:38:01.647 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:38:02.513 [DEBUG] [Thread-138293] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:38:02.514 [DEBUG] [Thread-138293] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:38:02.565 [DEBUG] [Thread-138293] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:38:02.566 [DEBUG] [Thread-138293] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:38:02.575 [DEBUG] [Thread-138293] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:38:02.584 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:38:02.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T01:38:02.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T01:38:02.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:38:02.603 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:38:02.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:38:02.611 [DEBUG] [Thread-138293] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:38:04.962 [DEBUG] [Thread-138295 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:38:20.007 [DEBUG] [Thread-138296 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:38:32.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T01:38:32.634 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T01:38:32.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T01:38:33.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 1, 38, 2), 3.73, 78.0, 0.0, 17.59, 13.79, 0, 0, 0, 2, 0, 0),)
2026-01-01T01:38:33.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 01:38:02
2026-01-01T01:38:33.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T01:38:33.636 [DEBUG] [Thread-138297] [transport.py] [_log()] starting thread (client mode): 0xb1744eb0
2026-01-01T01:38:33.636 [DEBUG] [Thread-138297] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:38:33.656 [DEBUG] [Thread-138297] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T01:38:33.656 [INFO] [Thread-138297] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T01:38:33.657 [DEBUG] [Thread-138297] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:38:33.657 [DEBUG] [Thread-138297] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T01:38:33.657 [DEBUG] [Thread-138297] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:38:33.657 [DEBUG] [Thread-138297] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:38:33.657 [DEBUG] [Thread-138297] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:38:33.657 [DEBUG] [Thread-138297] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:38:33.657 [DEBUG] [Thread-138297] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:38:33.657 [DEBUG] [Thread-138297] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:38:33.657 [DEBUG] [Thread-138297] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:38:33.657 [DEBUG] [Thread-138297] [transport.py] [_log()] client lang: <none>
2026-01-01T01:38:33.657 [DEBUG] [Thread-138297] [transport.py] [_log()] server lang: <none>
2026-01-01T01:38:33.658 [DEBUG] [Thread-138297] [transport.py] [_log()] kex follows: False
2026-01-01T01:38:33.658 [DEBUG] [Thread-138297] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:38:33.658 [DEBUG] [Thread-138297] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:38:33.658 [DEBUG] [Thread-138297] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:38:33.658 [DEBUG] [Thread-138297] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:38:33.658 [DEBUG] [Thread-138297] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:38:33.658 [DEBUG] [Thread-138297] [transport.py] [_log()] Compression: none
2026-01-01T01:38:33.658 [DEBUG] [Thread-138297] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:38:33.671 [DEBUG] [Thread-138297] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:38:33.671 [DEBUG] [Thread-138297] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:38:33.671 [DEBUG] [Thread-138297] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T01:38:33.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T01:38:33.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:38:33.673 [DEBUG] [Thread-138297] [transport.py] [_log()] userauth is OK
2026-01-01T01:38:33.673 [DEBUG] [Thread-138297] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:38:33.673 [DEBUG] [Thread-138297] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:38:33.673 [DEBUG] [Thread-138297] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T01:38:33.673 [DEBUG] [Thread-138297] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:38:33.686 [INFO] [Thread-138297] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:38:33.687 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:38:34.379 [DEBUG] [Thread-138297] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:38:34.379 [DEBUG] [Thread-138297] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:38:34.380 [DEBUG] [Thread-138297] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T01:38:34.420 [DEBUG] [Thread-138297] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:38:34.420 [DEBUG] [Thread-138297] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:38:34.423 [DEBUG] [Thread-138297] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:38:34.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:38:34.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T01:38:34.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T01:38:34.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T01:38:34.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:38:34.446 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T01:38:34.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:38:34.447 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:38:34.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T01:38:34.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.984855 -999.00  +13.90  11.28     81  +10.70 1 1 1 2 1     0    0 3.53 17.06 ZNESW 7.9 11.3 203.2 15.4 14.7 -20.9 14.6 -20.5 14.3 -19.0 14.7 -20.1
2026-01-01T01:38:34.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T01:38:34.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T01:38:34.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.984855
2026-01-01T01:38:34.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T01:38:34.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T01:38:34.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T01:38:34.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T01:38:34.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T01:38:34.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T01:38:02', tmtdew=3.73, humidity=78.0, cloud=0.0, wind=17.59, temperature=13.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T01:38:02', seeing=1.02, atlas_timestamp='2025-12-31T23:38:11.472', atlas_cloud=1, atlas_rain=1, zp_data=[0.027249999999998664, 0.03575000000000017, 0.06125000000000114, 0.043499999999998096, 0.03549999999999898, 0.08125000000000071, 0.0600000000000005, 0.03675000000000139, 0.0, 0.04100000000000037, 0.03275000000000006, 0.11849999999999916, 0.14150000000000063, 0.06424999999999947, -0.049500000000001876, 0.07399999999999807, 0.09024999999999928, 0.19799999999999862, 0.0824999999999978, 0.17024999999999935, 0.129999999999999, 0.08824999999999861, 0.04625000000000057, 0.50875, 0.2544999999999984, 0.266, 0.28775000000000084, 0.27449999999999974, 0.35250000000000004, 0.12400000000000055, -0.07399999999999807, 0.3865000000000016, 0.22974999999999923], zp_timestamp='2025-12-31T23:35:00')
2026-01-01T01:38:34.449 [DEBUG] [Thread-138297] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:38:34.531 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T01:38:34.542 [DEBUG] [Thread-138300] [transport.py] [_log()] starting thread (client mode): 0xb1747b80
2026-01-01T01:38:34.542 [DEBUG] [Thread-138300] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:38:34.558 [DEBUG] [Thread-138300] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T01:38:34.558 [INFO] [Thread-138300] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T01:38:34.566 [DEBUG] [Thread-138300] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:38:34.566 [DEBUG] [Thread-138300] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T01:38:34.566 [DEBUG] [Thread-138300] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:38:34.566 [DEBUG] [Thread-138300] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:38:34.566 [DEBUG] [Thread-138300] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:38:34.566 [DEBUG] [Thread-138300] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:38:34.566 [DEBUG] [Thread-138300] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:38:34.566 [DEBUG] [Thread-138300] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:38:34.566 [DEBUG] [Thread-138300] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:38:34.567 [DEBUG] [Thread-138300] [transport.py] [_log()] client lang: <none>
2026-01-01T01:38:34.567 [DEBUG] [Thread-138300] [transport.py] [_log()] server lang: <none>
2026-01-01T01:38:34.567 [DEBUG] [Thread-138300] [transport.py] [_log()] kex follows: False
2026-01-01T01:38:34.567 [DEBUG] [Thread-138300] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:38:34.567 [DEBUG] [Thread-138300] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:38:34.567 [DEBUG] [Thread-138300] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:38:34.567 [DEBUG] [Thread-138300] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:38:34.567 [DEBUG] [Thread-138300] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:38:34.567 [DEBUG] [Thread-138300] [transport.py] [_log()] Compression: none
2026-01-01T01:38:34.567 [DEBUG] [Thread-138300] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:38:34.624 [DEBUG] [Thread-138300] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:38:34.625 [DEBUG] [Thread-138300] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:38:34.625 [DEBUG] [Thread-138300] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T01:38:34.626 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T01:38:34.626 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:38:34.682 [DEBUG] [Thread-138300] [transport.py] [_log()] userauth is OK
2026-01-01T01:38:34.682 [DEBUG] [Thread-138300] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:38:34.682 [DEBUG] [Thread-138300] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:38:34.682 [DEBUG] [Thread-138300] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T01:38:34.682 [DEBUG] [Thread-138300] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:38:34.701 [INFO] [Thread-138300] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:38:34.702 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T01:38:34.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:38:35.037 [DEBUG] [Thread-138302 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:38:35.539 [DEBUG] [Thread-138300] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:38:35.539 [DEBUG] [Thread-138300] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:38:35.586 [DEBUG] [Thread-138300] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:38:35.586 [DEBUG] [Thread-138300] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:38:35.594 [DEBUG] [Thread-138300] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:38:35.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:38: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')
2026-01-01T01:38:35.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T01:38:35.617 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:38:35.617 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:38:35.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:38:35.625 [DEBUG] [Thread-138300] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:38:50.080 [DEBUG] [Thread-138303 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:38:52.705 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:38:52.707 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:39:01.357 [DEBUG] [Thread-138304 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:39:05.113 [DEBUG] [Thread-138305 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:39:05.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T01:39:05.648 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T01:39:05.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T01:39:06.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 1, 38, 34), 3.63, 78.52, 0.0, 17.54, 13.72, 0, 0, 0, 2, 0, 0),)
2026-01-01T01:39:06.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 01:38:34
2026-01-01T01:39:06.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T01:39:06.634 [DEBUG] [Thread-138306] [transport.py] [_log()] starting thread (client mode): 0xb6b2b790
2026-01-01T01:39:06.634 [DEBUG] [Thread-138306] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:39:06.650 [DEBUG] [Thread-138306] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T01:39:06.650 [INFO] [Thread-138306] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T01:39:06.652 [DEBUG] [Thread-138306] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:39:06.652 [DEBUG] [Thread-138306] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T01:39:06.652 [DEBUG] [Thread-138306] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:39:06.652 [DEBUG] [Thread-138306] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:39:06.653 [DEBUG] [Thread-138306] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:39:06.653 [DEBUG] [Thread-138306] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:39:06.653 [DEBUG] [Thread-138306] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:39:06.653 [DEBUG] [Thread-138306] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:39:06.653 [DEBUG] [Thread-138306] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:39:06.653 [DEBUG] [Thread-138306] [transport.py] [_log()] client lang: <none>
2026-01-01T01:39:06.653 [DEBUG] [Thread-138306] [transport.py] [_log()] server lang: <none>
2026-01-01T01:39:06.653 [DEBUG] [Thread-138306] [transport.py] [_log()] kex follows: False
2026-01-01T01:39:06.653 [DEBUG] [Thread-138306] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:39:06.653 [DEBUG] [Thread-138306] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:39:06.653 [DEBUG] [Thread-138306] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:39:06.653 [DEBUG] [Thread-138306] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:39:06.653 [DEBUG] [Thread-138306] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:39:06.653 [DEBUG] [Thread-138306] [transport.py] [_log()] Compression: none
2026-01-01T01:39:06.653 [DEBUG] [Thread-138306] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:39:06.677 [DEBUG] [Thread-138306] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:39:06.678 [DEBUG] [Thread-138306] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:39:06.679 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T01:39:06.679 [DEBUG] [Thread-138306] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T01:39:06.680 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:39:06.681 [DEBUG] [Thread-138306] [transport.py] [_log()] userauth is OK
2026-01-01T01:39:06.682 [DEBUG] [Thread-138306] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:39:06.682 [DEBUG] [Thread-138306] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:39:06.682 [DEBUG] [Thread-138306] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T01:39:06.682 [DEBUG] [Thread-138306] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:39:06.718 [INFO] [Thread-138306] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:39:06.718 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:39:07.314 [DEBUG] [Thread-138306] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:39:07.314 [DEBUG] [Thread-138306] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:39:07.314 [DEBUG] [Thread-138306] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T01:39:07.354 [DEBUG] [Thread-138306] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:39:07.354 [DEBUG] [Thread-138306] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:39:07.356 [DEBUG] [Thread-138306] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:39:07.367 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:39:07.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T01:39:07.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T01:39:07.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T01:39:07.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:39:07.374 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T01:39:07.374 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:39:07.374 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:39:07.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T01:39:07.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.985202 -999.00  +13.90  10.53     81  +10.80 1 1 1 2 1     0    0 3.63 18.96 ZNESW 3.7 10.5 214.2 14.9 14.7 -20.8 14.5 -20.4 14.3 -19.1 14.7 -20.0
2026-01-01T01:39:07.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T01:39:07.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T01:39:07.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.985202
2026-01-01T01:39:07.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T01:39:07.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T01:39:07.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T01:39:07.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T01:39:07.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T01:39:07.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T01:38:34', tmtdew=3.63, humidity=78.52, cloud=0.0, wind=17.54, temperature=13.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T01:38:34', seeing=1.1, atlas_timestamp='2025-12-31T23:38:41.453', atlas_cloud=1, atlas_rain=1, zp_data=[0.027249999999998664, 0.03575000000000017, 0.06125000000000114, 0.043499999999998096, 0.03549999999999898, 0.08125000000000071, 0.0600000000000005, 0.03675000000000139, 0.0, 0.04100000000000037, 0.03275000000000006, 0.11849999999999916, 0.14150000000000063, 0.06424999999999947, -0.049500000000001876, 0.07399999999999807, 0.09024999999999928, 0.19799999999999862, 0.0824999999999978, 0.17024999999999935, 0.129999999999999, 0.08824999999999861, 0.04625000000000057, 0.50875, 0.2544999999999984, 0.266, 0.28775000000000084, 0.27449999999999974, 0.35250000000000004, 0.12400000000000055, -0.07399999999999807, 0.3865000000000016, 0.22974999999999923], zp_timestamp='2025-12-31T23:35:00')
2026-01-01T01:39:07.375 [DEBUG] [Thread-138306] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:39:07.449 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T01:39:07.461 [DEBUG] [Thread-138309] [transport.py] [_log()] starting thread (client mode): 0xb6b2a110
2026-01-01T01:39:07.461 [DEBUG] [Thread-138309] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:39:07.477 [DEBUG] [Thread-138309] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T01:39:07.477 [INFO] [Thread-138309] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T01:39:07.485 [DEBUG] [Thread-138309] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:39:07.485 [DEBUG] [Thread-138309] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T01:39:07.485 [DEBUG] [Thread-138309] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:39:07.485 [DEBUG] [Thread-138309] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:39:07.485 [DEBUG] [Thread-138309] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:39:07.485 [DEBUG] [Thread-138309] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:39:07.485 [DEBUG] [Thread-138309] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:39:07.485 [DEBUG] [Thread-138309] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:39:07.485 [DEBUG] [Thread-138309] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:39:07.485 [DEBUG] [Thread-138309] [transport.py] [_log()] client lang: <none>
2026-01-01T01:39:07.485 [DEBUG] [Thread-138309] [transport.py] [_log()] server lang: <none>
2026-01-01T01:39:07.485 [DEBUG] [Thread-138309] [transport.py] [_log()] kex follows: False
2026-01-01T01:39:07.485 [DEBUG] [Thread-138309] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:39:07.485 [DEBUG] [Thread-138309] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:39:07.485 [DEBUG] [Thread-138309] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:39:07.485 [DEBUG] [Thread-138309] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:39:07.485 [DEBUG] [Thread-138309] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:39:07.485 [DEBUG] [Thread-138309] [transport.py] [_log()] Compression: none
2026-01-01T01:39:07.485 [DEBUG] [Thread-138309] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:39:07.540 [DEBUG] [Thread-138309] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:39:07.540 [DEBUG] [Thread-138309] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:39:07.541 [DEBUG] [Thread-138309] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T01:39:07.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T01:39:07.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:39:07.597 [DEBUG] [Thread-138309] [transport.py] [_log()] userauth is OK
2026-01-01T01:39:07.597 [DEBUG] [Thread-138309] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:39:07.597 [DEBUG] [Thread-138309] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:39:07.597 [DEBUG] [Thread-138309] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T01:39:07.597 [DEBUG] [Thread-138309] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:39:07.615 [INFO] [Thread-138309] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:39:07.616 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T01:39:07.616 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:39:08.489 [DEBUG] [Thread-138309] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:39:08.489 [DEBUG] [Thread-138309] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:39:08.537 [DEBUG] [Thread-138309] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:39:08.538 [DEBUG] [Thread-138309] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:39:08.546 [DEBUG] [Thread-138309] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:39:08.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:39:08.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T01:39:08.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T01:39:08.571 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:39:08.571 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:39:08.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:39:08.579 [DEBUG] [Thread-138309] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:39:20.152 [DEBUG] [Thread-138311 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:39:35.201 [DEBUG] [Thread-138312 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:39:38.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T01:39:38.601 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T01:39:38.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T01:39:39.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 1, 39, 6), 3.62, 78.54, 0.0, 16.0, 13.71, 0, 0, 0, 2, 0, 0),)
2026-01-01T01:39:39.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 01:39:06
2026-01-01T01:39:39.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T01:39:39.663 [DEBUG] [Thread-138313] [transport.py] [_log()] starting thread (client mode): 0xb6bbeb00
2026-01-01T01:39:39.663 [DEBUG] [Thread-138313] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:39:39.683 [DEBUG] [Thread-138313] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T01:39:39.683 [INFO] [Thread-138313] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T01:39:39.684 [DEBUG] [Thread-138313] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:39:39.684 [DEBUG] [Thread-138313] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T01:39:39.684 [DEBUG] [Thread-138313] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:39:39.685 [DEBUG] [Thread-138313] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:39:39.685 [DEBUG] [Thread-138313] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:39:39.685 [DEBUG] [Thread-138313] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:39:39.685 [DEBUG] [Thread-138313] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:39:39.685 [DEBUG] [Thread-138313] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:39:39.685 [DEBUG] [Thread-138313] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:39:39.685 [DEBUG] [Thread-138313] [transport.py] [_log()] client lang: <none>
2026-01-01T01:39:39.685 [DEBUG] [Thread-138313] [transport.py] [_log()] server lang: <none>
2026-01-01T01:39:39.685 [DEBUG] [Thread-138313] [transport.py] [_log()] kex follows: False
2026-01-01T01:39:39.685 [DEBUG] [Thread-138313] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:39:39.685 [DEBUG] [Thread-138313] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:39:39.685 [DEBUG] [Thread-138313] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:39:39.685 [DEBUG] [Thread-138313] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:39:39.685 [DEBUG] [Thread-138313] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:39:39.685 [DEBUG] [Thread-138313] [transport.py] [_log()] Compression: none
2026-01-01T01:39:39.685 [DEBUG] [Thread-138313] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:39:39.694 [DEBUG] [Thread-138313] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:39:39.694 [DEBUG] [Thread-138313] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:39:39.694 [DEBUG] [Thread-138313] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T01:39:39.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T01:39:39.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:39:39.695 [DEBUG] [Thread-138313] [transport.py] [_log()] userauth is OK
2026-01-01T01:39:39.695 [DEBUG] [Thread-138313] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:39:39.695 [DEBUG] [Thread-138313] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:39:39.695 [DEBUG] [Thread-138313] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T01:39:39.695 [DEBUG] [Thread-138313] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:39:39.706 [INFO] [Thread-138313] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:39:39.706 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:39:40.276 [DEBUG] [Thread-138313] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:39:40.276 [DEBUG] [Thread-138313] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:39:40.276 [DEBUG] [Thread-138313] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T01:39:40.318 [DEBUG] [Thread-138313] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:39:40.318 [DEBUG] [Thread-138313] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:39:40.320 [DEBUG] [Thread-138313] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:39:40.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:39:40.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T01:39:40.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T01:39:40.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T01:39:40.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:39:40.329 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T01:39:40.330 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:39:40.330 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:39:40.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T01:39:40.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.985549 -999.00  +13.90  10.87     81  +10.80 1 1 1 2 1     0    0 3.74 19.22 ZNESW 9.4 10.9 202.7 12.9 14.7 -20.9 14.5 -20.3 14.4 -19.0 14.7 -20.2
2026-01-01T01:39:40.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T01:39:40.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T01:39:40.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.985549
2026-01-01T01:39:40.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T01:39:40.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T01:39:40.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T01:39:40.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T01:39:40.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T01:39:40.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T01:39:06', tmtdew=3.62, humidity=78.54, cloud=0.0, wind=16.0, temperature=13.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T01:39:06', seeing=1.08, atlas_timestamp='2025-12-31T23:39:11.434', atlas_cloud=1, atlas_rain=1, zp_data=[0.027249999999998664, 0.03575000000000017, 0.06125000000000114, 0.043499999999998096, 0.03549999999999898, 0.08125000000000071, 0.0600000000000005, 0.03675000000000139, 0.0, 0.04100000000000037, 0.03275000000000006, 0.11849999999999916, 0.14150000000000063, 0.06424999999999947, -0.049500000000001876, 0.07399999999999807, 0.09024999999999928, 0.19799999999999862, 0.0824999999999978, 0.17024999999999935, 0.129999999999999, 0.08824999999999861, 0.04625000000000057, 0.50875, 0.2544999999999984, 0.266, 0.28775000000000084, 0.27449999999999974, 0.35250000000000004, 0.12400000000000055, -0.07399999999999807, 0.3865000000000016, 0.22974999999999923], zp_timestamp='2025-12-31T23:35:00')
2026-01-01T01:39:40.330 [DEBUG] [Thread-138313] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:39:40.405 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T01:39:40.417 [DEBUG] [Thread-138316] [transport.py] [_log()] starting thread (client mode): 0xb17471f0
2026-01-01T01:39:40.417 [DEBUG] [Thread-138316] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:39:40.432 [DEBUG] [Thread-138316] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T01:39:40.432 [INFO] [Thread-138316] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T01:39:40.439 [DEBUG] [Thread-138316] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:39:40.439 [DEBUG] [Thread-138316] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T01:39:40.439 [DEBUG] [Thread-138316] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:39:40.439 [DEBUG] [Thread-138316] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:39:40.439 [DEBUG] [Thread-138316] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:39:40.440 [DEBUG] [Thread-138316] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:39:40.440 [DEBUG] [Thread-138316] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:39:40.440 [DEBUG] [Thread-138316] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:39:40.440 [DEBUG] [Thread-138316] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:39:40.440 [DEBUG] [Thread-138316] [transport.py] [_log()] client lang: <none>
2026-01-01T01:39:40.440 [DEBUG] [Thread-138316] [transport.py] [_log()] server lang: <none>
2026-01-01T01:39:40.440 [DEBUG] [Thread-138316] [transport.py] [_log()] kex follows: False
2026-01-01T01:39:40.440 [DEBUG] [Thread-138316] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:39:40.440 [DEBUG] [Thread-138316] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:39:40.440 [DEBUG] [Thread-138316] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:39:40.440 [DEBUG] [Thread-138316] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:39:40.440 [DEBUG] [Thread-138316] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:39:40.440 [DEBUG] [Thread-138316] [transport.py] [_log()] Compression: none
2026-01-01T01:39:40.440 [DEBUG] [Thread-138316] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:39:40.496 [DEBUG] [Thread-138316] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:39:40.496 [DEBUG] [Thread-138316] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:39:40.497 [DEBUG] [Thread-138316] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T01:39:40.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T01:39:40.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:39:40.553 [DEBUG] [Thread-138316] [transport.py] [_log()] userauth is OK
2026-01-01T01:39:40.553 [DEBUG] [Thread-138316] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:39:40.553 [DEBUG] [Thread-138316] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:39:40.553 [DEBUG] [Thread-138316] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T01:39:40.553 [DEBUG] [Thread-138316] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:39:40.569 [INFO] [Thread-138316] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:39:40.569 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T01:39:40.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:39:41.389 [DEBUG] [Thread-138316] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:39:41.389 [DEBUG] [Thread-138316] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:39:41.437 [DEBUG] [Thread-138316] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:39:41.437 [DEBUG] [Thread-138316] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:39:41.446 [DEBUG] [Thread-138316] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:39:41.456 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:39:41.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T01:39:41.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T01:39:41.474 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:39:41.475 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:39:41.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:39:41.483 [DEBUG] [Thread-138316] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:39:50.233 [DEBUG] [Thread-138318 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:39:52.912 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:39:52.913 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:40:01.411 [DEBUG] [Thread-138319 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:40:05.287 [DEBUG] [Thread-138320 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:40:11.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T01:40:11.491 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T01:40:11.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T01:40:12.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 1, 39, 38), 3.62, 78.55, 0.0, 18.0, 13.72, 0, 0, 0, 2, 0, 0),)
2026-01-01T01:40:12.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 01:39:38
2026-01-01T01:40:12.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T01:40:12.560 [DEBUG] [Thread-138321] [transport.py] [_log()] starting thread (client mode): 0xb955a830
2026-01-01T01:40:12.560 [DEBUG] [Thread-138321] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:40:12.580 [DEBUG] [Thread-138321] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T01:40:12.580 [INFO] [Thread-138321] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T01:40:12.582 [DEBUG] [Thread-138321] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:40:12.582 [DEBUG] [Thread-138321] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T01:40:12.582 [DEBUG] [Thread-138321] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:40:12.582 [DEBUG] [Thread-138321] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:40:12.582 [DEBUG] [Thread-138321] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:40:12.582 [DEBUG] [Thread-138321] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:40:12.582 [DEBUG] [Thread-138321] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:40:12.582 [DEBUG] [Thread-138321] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:40:12.582 [DEBUG] [Thread-138321] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:40:12.582 [DEBUG] [Thread-138321] [transport.py] [_log()] client lang: <none>
2026-01-01T01:40:12.582 [DEBUG] [Thread-138321] [transport.py] [_log()] server lang: <none>
2026-01-01T01:40:12.582 [DEBUG] [Thread-138321] [transport.py] [_log()] kex follows: False
2026-01-01T01:40:12.582 [DEBUG] [Thread-138321] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:40:12.582 [DEBUG] [Thread-138321] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:40:12.582 [DEBUG] [Thread-138321] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:40:12.582 [DEBUG] [Thread-138321] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:40:12.582 [DEBUG] [Thread-138321] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:40:12.582 [DEBUG] [Thread-138321] [transport.py] [_log()] Compression: none
2026-01-01T01:40:12.582 [DEBUG] [Thread-138321] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:40:12.594 [DEBUG] [Thread-138321] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:40:12.594 [DEBUG] [Thread-138321] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:40:12.594 [DEBUG] [Thread-138321] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T01:40:12.594 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T01:40:12.594 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:40:12.595 [DEBUG] [Thread-138321] [transport.py] [_log()] userauth is OK
2026-01-01T01:40:12.595 [DEBUG] [Thread-138321] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:40:12.595 [DEBUG] [Thread-138321] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:40:12.595 [DEBUG] [Thread-138321] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T01:40:12.595 [DEBUG] [Thread-138321] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:40:12.610 [INFO] [Thread-138321] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:40:12.610 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:40:16.894 [DEBUG] [Thread-138321] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:40:16.894 [DEBUG] [Thread-138321] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:40:16.894 [DEBUG] [Thread-138321] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T01:40:16.935 [DEBUG] [Thread-138321] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:40:16.935 [DEBUG] [Thread-138321] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:40:16.937 [DEBUG] [Thread-138321] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:40:16.951 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:40:16.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T01:40:16.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T01:40:16.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T01:40:16.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:40:16.970 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T01:40:16.970 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:40:16.970 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:40:16.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T01:40:16.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.985549 -999.00  +13.90  10.87     81  +10.80 1 1 1 2 1     0    0 3.74 19.22 ZNESW 9.4 10.9 202.7 12.9 14.7 -20.9 14.5 -20.3 14.4 -19.0 14.7 -20.2
2026-01-01T01:40:16.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T01:40:16.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T01:40:16.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.985549
2026-01-01T01:40:16.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T01:40:16.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T01:40:16.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T01:40:16.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T01:40:16.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T01:40:16.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T01:39:38', tmtdew=3.62, humidity=78.55, cloud=0.0, wind=18.0, temperature=13.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T01:40:11', seeing=1.03, atlas_timestamp='2025-12-31T23:39:11.434', atlas_cloud=1, atlas_rain=1, zp_data=[0.027249999999998664, 0.03575000000000017, 0.06125000000000114, 0.043499999999998096, 0.03549999999999898, 0.08125000000000071, 0.0600000000000005, 0.03675000000000139, 0.0, 0.04100000000000037, 0.03275000000000006, 0.11849999999999916, 0.14150000000000063, 0.06424999999999947, -0.049500000000001876, 0.07399999999999807, 0.09024999999999928, 0.19799999999999862, 0.0824999999999978, 0.17024999999999935, 0.129999999999999, 0.08824999999999861, 0.04625000000000057, 0.50875, 0.2544999999999984, 0.266, 0.28775000000000084, 0.27449999999999974, 0.35250000000000004, 0.12400000000000055, -0.07399999999999807, 0.3865000000000016, 0.22974999999999923], zp_timestamp='2025-12-31T23:38:00')
2026-01-01T01:40:16.971 [DEBUG] [Thread-138321] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:40:17.045 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T01:40:17.057 [DEBUG] [Thread-138324] [transport.py] [_log()] starting thread (client mode): 0xb6ba2e30
2026-01-01T01:40:17.057 [DEBUG] [Thread-138324] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:40:17.072 [DEBUG] [Thread-138324] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T01:40:17.072 [INFO] [Thread-138324] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T01:40:17.080 [DEBUG] [Thread-138324] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:40:17.080 [DEBUG] [Thread-138324] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T01:40:17.080 [DEBUG] [Thread-138324] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:40:17.080 [DEBUG] [Thread-138324] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:40:17.080 [DEBUG] [Thread-138324] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:40:17.080 [DEBUG] [Thread-138324] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:40:17.080 [DEBUG] [Thread-138324] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:40:17.080 [DEBUG] [Thread-138324] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:40:17.080 [DEBUG] [Thread-138324] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:40:17.080 [DEBUG] [Thread-138324] [transport.py] [_log()] client lang: <none>
2026-01-01T01:40:17.080 [DEBUG] [Thread-138324] [transport.py] [_log()] server lang: <none>
2026-01-01T01:40:17.080 [DEBUG] [Thread-138324] [transport.py] [_log()] kex follows: False
2026-01-01T01:40:17.080 [DEBUG] [Thread-138324] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:40:17.080 [DEBUG] [Thread-138324] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:40:17.080 [DEBUG] [Thread-138324] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:40:17.080 [DEBUG] [Thread-138324] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:40:17.080 [DEBUG] [Thread-138324] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:40:17.080 [DEBUG] [Thread-138324] [transport.py] [_log()] Compression: none
2026-01-01T01:40:17.080 [DEBUG] [Thread-138324] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:40:17.140 [DEBUG] [Thread-138324] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:40:17.140 [DEBUG] [Thread-138324] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:40:17.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T01:40:17.140 [DEBUG] [Thread-138324] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T01:40:17.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:40:17.197 [DEBUG] [Thread-138324] [transport.py] [_log()] userauth is OK
2026-01-01T01:40:17.197 [DEBUG] [Thread-138324] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:40:17.197 [DEBUG] [Thread-138324] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:40:17.197 [DEBUG] [Thread-138324] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T01:40:17.197 [DEBUG] [Thread-138324] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:40:17.213 [INFO] [Thread-138324] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:40:17.213 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T01:40:17.213 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:40:18.048 [DEBUG] [Thread-138324] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:40:18.048 [DEBUG] [Thread-138324] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:40:18.095 [DEBUG] [Thread-138324] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:40:18.095 [DEBUG] [Thread-138324] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:40:18.104 [DEBUG] [Thread-138324] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:40:18.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:40:18.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T01:40:18.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T01:40:18.128 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:40:18.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:40:18.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:40:18.136 [DEBUG] [Thread-138324] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:40:20.322 [DEBUG] [Thread-138326 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:40:35.369 [DEBUG] [Thread-138327 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:40:48.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T01:40:48.159 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T01:40:48.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T01:40:48.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 1, 40, 43), 3.63, 78.5, 0.0, 16.16, 13.72, 0, 0, 0, 2, 0, 0),)
2026-01-01T01:40:48.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 01:40:43
2026-01-01T01:40:49.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T01:40:49.158 [DEBUG] [Thread-138328] [transport.py] [_log()] starting thread (client mode): 0xb6ba3790
2026-01-01T01:40:49.158 [DEBUG] [Thread-138328] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:40:49.170 [DEBUG] [Thread-138328] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T01:40:49.170 [INFO] [Thread-138328] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T01:40:49.173 [DEBUG] [Thread-138328] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:40:49.173 [DEBUG] [Thread-138328] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T01:40:49.173 [DEBUG] [Thread-138328] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:40:49.173 [DEBUG] [Thread-138328] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:40:49.173 [DEBUG] [Thread-138328] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:40:49.173 [DEBUG] [Thread-138328] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:40:49.173 [DEBUG] [Thread-138328] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:40:49.173 [DEBUG] [Thread-138328] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:40:49.173 [DEBUG] [Thread-138328] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:40:49.173 [DEBUG] [Thread-138328] [transport.py] [_log()] client lang: <none>
2026-01-01T01:40:49.173 [DEBUG] [Thread-138328] [transport.py] [_log()] server lang: <none>
2026-01-01T01:40:49.173 [DEBUG] [Thread-138328] [transport.py] [_log()] kex follows: False
2026-01-01T01:40:49.174 [DEBUG] [Thread-138328] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:40:49.174 [DEBUG] [Thread-138328] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:40:49.174 [DEBUG] [Thread-138328] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:40:49.174 [DEBUG] [Thread-138328] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:40:49.174 [DEBUG] [Thread-138328] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:40:49.174 [DEBUG] [Thread-138328] [transport.py] [_log()] Compression: none
2026-01-01T01:40:49.174 [DEBUG] [Thread-138328] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:40:49.196 [DEBUG] [Thread-138328] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:40:49.197 [DEBUG] [Thread-138328] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:40:49.198 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T01:40:49.199 [DEBUG] [Thread-138328] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T01:40:49.200 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:40:49.201 [DEBUG] [Thread-138328] [transport.py] [_log()] userauth is OK
2026-01-01T01:40:49.201 [DEBUG] [Thread-138328] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:40:49.201 [DEBUG] [Thread-138328] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:40:49.202 [DEBUG] [Thread-138328] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T01:40:49.202 [DEBUG] [Thread-138328] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:40:49.217 [INFO] [Thread-138328] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:40:49.218 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:40:49.857 [DEBUG] [Thread-138328] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:40:49.857 [DEBUG] [Thread-138328] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:40:49.857 [DEBUG] [Thread-138328] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T01:40:49.898 [DEBUG] [Thread-138328] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:40:49.898 [DEBUG] [Thread-138328] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:40:49.902 [DEBUG] [Thread-138328] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:40:49.914 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:40:49.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T01:40:49.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T01:40:49.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T01:40:49.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:40:49.926 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T01:40:49.926 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:40:49.926 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:40:49.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T01:40:49.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.986244 -999.00  +13.80   4.00     81  +10.70 1 1 1 2 1     0    0 3.58 18.12 ZNESW 5.4 4.0 187.3 12.3 14.7 -21.0 14.6 -20.5 14.3 -19.1 14.7 -20.2
2026-01-01T01:40:49.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T01:40:49.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T01:40:49.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.986244
2026-01-01T01:40:49.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T01:40:49.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T01:40:49.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T01:40:49.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T01:40:49.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T01:40:49.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T01:40:43', tmtdew=3.63, humidity=78.5, cloud=0.0, wind=16.16, temperature=13.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T01:40:43', seeing=0.99, atlas_timestamp='2025-12-31T23:40:11.482', atlas_cloud=1, atlas_rain=1, zp_data=[0.027249999999998664, 0.03575000000000017, 0.06125000000000114, 0.043499999999998096, 0.03549999999999898, 0.08125000000000071, 0.0600000000000005, 0.03675000000000139, 0.0, 0.04100000000000037, 0.03275000000000006, 0.11849999999999916, 0.14150000000000063, 0.06424999999999947, -0.049500000000001876, 0.07399999999999807, 0.09024999999999928, 0.19799999999999862, 0.0824999999999978, 0.17024999999999935, 0.129999999999999, 0.08824999999999861, 0.04625000000000057, 0.50875, 0.2544999999999984, 0.266, 0.28775000000000084, 0.27449999999999974, 0.35250000000000004, 0.12400000000000055, -0.07399999999999807, 0.3865000000000016, 0.22974999999999923], zp_timestamp='2025-12-31T23:38:00')
2026-01-01T01:40:49.929 [DEBUG] [Thread-138328] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:40:50.010 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T01:40:50.023 [DEBUG] [Thread-138331] [transport.py] [_log()] starting thread (client mode): 0xb6b2ba90
2026-01-01T01:40:50.023 [DEBUG] [Thread-138331] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:40:50.038 [DEBUG] [Thread-138331] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T01:40:50.038 [INFO] [Thread-138331] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T01:40:50.045 [DEBUG] [Thread-138331] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:40:50.046 [DEBUG] [Thread-138331] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T01:40:50.046 [DEBUG] [Thread-138331] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:40:50.046 [DEBUG] [Thread-138331] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:40:50.046 [DEBUG] [Thread-138331] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:40:50.046 [DEBUG] [Thread-138331] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:40:50.046 [DEBUG] [Thread-138331] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:40:50.046 [DEBUG] [Thread-138331] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:40:50.046 [DEBUG] [Thread-138331] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:40:50.046 [DEBUG] [Thread-138331] [transport.py] [_log()] client lang: <none>
2026-01-01T01:40:50.046 [DEBUG] [Thread-138331] [transport.py] [_log()] server lang: <none>
2026-01-01T01:40:50.046 [DEBUG] [Thread-138331] [transport.py] [_log()] kex follows: False
2026-01-01T01:40:50.046 [DEBUG] [Thread-138331] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:40:50.046 [DEBUG] [Thread-138331] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:40:50.046 [DEBUG] [Thread-138331] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:40:50.046 [DEBUG] [Thread-138331] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:40:50.046 [DEBUG] [Thread-138331] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:40:50.046 [DEBUG] [Thread-138331] [transport.py] [_log()] Compression: none
2026-01-01T01:40:50.046 [DEBUG] [Thread-138331] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:40:50.103 [DEBUG] [Thread-138331] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:40:50.104 [DEBUG] [Thread-138331] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:40:50.104 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T01:40:50.105 [DEBUG] [Thread-138331] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T01:40:50.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:40:50.163 [DEBUG] [Thread-138331] [transport.py] [_log()] userauth is OK
2026-01-01T01:40:50.163 [DEBUG] [Thread-138331] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:40:50.163 [DEBUG] [Thread-138331] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:40:50.163 [DEBUG] [Thread-138331] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T01:40:50.163 [DEBUG] [Thread-138331] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:40:50.182 [INFO] [Thread-138331] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:40:50.183 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T01:40:50.183 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:40:50.408 [DEBUG] [Thread-138333 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:40:51.065 [DEBUG] [Thread-138331] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:40:51.065 [DEBUG] [Thread-138331] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:40:51.112 [DEBUG] [Thread-138331] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:40:51.113 [DEBUG] [Thread-138331] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:40:51.121 [DEBUG] [Thread-138331] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:40:51.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:40:51.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T01:40:51.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T01:40:51.145 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:40:51.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:40:51.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:40:51.153 [DEBUG] [Thread-138331] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:40:53.111 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:40:53.112 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:41:01.498 [DEBUG] [Thread-138334 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:41:05.465 [DEBUG] [Thread-138335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:41:20.503 [DEBUG] [Thread-138336 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:41:21.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T01:41:21.175 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T01:41:21.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T01:41:21.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 1, 41, 15), 3.64, 78.45, 0.0, 15.09, 13.72, 0, 0, 0, 2, 0, 0),)
2026-01-01T01:41:21.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 01:41:15
2026-01-01T01:41:22.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T01:41:22.168 [DEBUG] [Thread-138337] [transport.py] [_log()] starting thread (client mode): 0xb95f20b0
2026-01-01T01:41:22.168 [DEBUG] [Thread-138337] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:41:22.188 [DEBUG] [Thread-138337] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T01:41:22.188 [INFO] [Thread-138337] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T01:41:22.191 [DEBUG] [Thread-138337] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:41:22.191 [DEBUG] [Thread-138337] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T01:41:22.191 [DEBUG] [Thread-138337] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:41:22.191 [DEBUG] [Thread-138337] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:41:22.191 [DEBUG] [Thread-138337] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:41:22.191 [DEBUG] [Thread-138337] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:41:22.191 [DEBUG] [Thread-138337] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:41:22.191 [DEBUG] [Thread-138337] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:41:22.191 [DEBUG] [Thread-138337] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:41:22.191 [DEBUG] [Thread-138337] [transport.py] [_log()] client lang: <none>
2026-01-01T01:41:22.191 [DEBUG] [Thread-138337] [transport.py] [_log()] server lang: <none>
2026-01-01T01:41:22.191 [DEBUG] [Thread-138337] [transport.py] [_log()] kex follows: False
2026-01-01T01:41:22.191 [DEBUG] [Thread-138337] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:41:22.191 [DEBUG] [Thread-138337] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:41:22.191 [DEBUG] [Thread-138337] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:41:22.191 [DEBUG] [Thread-138337] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:41:22.191 [DEBUG] [Thread-138337] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:41:22.191 [DEBUG] [Thread-138337] [transport.py] [_log()] Compression: none
2026-01-01T01:41:22.191 [DEBUG] [Thread-138337] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:41:22.208 [DEBUG] [Thread-138337] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:41:22.209 [DEBUG] [Thread-138337] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:41:22.209 [DEBUG] [Thread-138337] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T01:41:22.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T01:41:22.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:41:22.212 [DEBUG] [Thread-138337] [transport.py] [_log()] userauth is OK
2026-01-01T01:41:22.212 [DEBUG] [Thread-138337] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:41:22.212 [DEBUG] [Thread-138337] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:41:22.212 [DEBUG] [Thread-138337] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T01:41:22.212 [DEBUG] [Thread-138337] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:41:22.231 [INFO] [Thread-138337] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:41:22.231 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:41:22.989 [DEBUG] [Thread-138337] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:41:22.989 [DEBUG] [Thread-138337] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:41:22.990 [DEBUG] [Thread-138337] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T01:41:23.030 [DEBUG] [Thread-138337] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:41:23.030 [DEBUG] [Thread-138337] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:41:23.033 [DEBUG] [Thread-138337] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:41:23.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:41:23.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T01:41:23.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T01:41:23.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T01:41:23.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:41:23.058 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T01:41:23.059 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:41:23.059 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:41:23.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T01:41:23.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.986591 -999.00  +13.80   8.45     81  +10.60 1 1 1 2 1     0    0 3.66 19.07 ZNESW 9.9 8.4 220.3 17.6 14.7 -21.0 14.5 -20.5 14.4 -19.3 14.6 -20.2
2026-01-01T01:41:23.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T01:41:23.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T01:41:23.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.986591
2026-01-01T01:41:23.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T01:41:23.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T01:41:23.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T01:41:23.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T01:41:23.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T01:41:23.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T01:41:15', tmtdew=3.64, humidity=78.45, cloud=0.0, wind=15.09, temperature=13.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T01:41:15', seeing=1.1, atlas_timestamp='2025-12-31T23:40:41.462', atlas_cloud=1, atlas_rain=1, zp_data=[0.027249999999998664, 0.03575000000000017, 0.06125000000000114, 0.043499999999998096, 0.03549999999999898, 0.08125000000000071, 0.0600000000000005, 0.03675000000000139, 0.0, 0.04100000000000037, 0.03275000000000006, 0.11849999999999916, 0.14150000000000063, 0.06424999999999947, -0.049500000000001876, 0.07399999999999807, 0.09024999999999928, 0.19799999999999862, 0.0824999999999978, 0.17024999999999935, 0.129999999999999, 0.08824999999999861, 0.04625000000000057, 0.50875, 0.2544999999999984, 0.266, 0.28775000000000084, 0.27449999999999974, 0.35250000000000004, 0.12400000000000055, -0.07399999999999807, 0.3865000000000016, 0.22974999999999923], zp_timestamp='2025-12-31T23:38:00')
2026-01-01T01:41:23.062 [DEBUG] [Thread-138337] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:41:23.146 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T01:41:23.157 [DEBUG] [Thread-138340] [transport.py] [_log()] starting thread (client mode): 0xb6b2b880
2026-01-01T01:41:23.157 [DEBUG] [Thread-138340] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:41:23.177 [DEBUG] [Thread-138340] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T01:41:23.178 [INFO] [Thread-138340] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T01:41:23.185 [DEBUG] [Thread-138340] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:41:23.186 [DEBUG] [Thread-138340] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T01:41:23.186 [DEBUG] [Thread-138340] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:41:23.186 [DEBUG] [Thread-138340] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:41:23.186 [DEBUG] [Thread-138340] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:41:23.186 [DEBUG] [Thread-138340] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:41:23.186 [DEBUG] [Thread-138340] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:41:23.187 [DEBUG] [Thread-138340] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:41:23.187 [DEBUG] [Thread-138340] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:41:23.187 [DEBUG] [Thread-138340] [transport.py] [_log()] client lang: <none>
2026-01-01T01:41:23.187 [DEBUG] [Thread-138340] [transport.py] [_log()] server lang: <none>
2026-01-01T01:41:23.187 [DEBUG] [Thread-138340] [transport.py] [_log()] kex follows: False
2026-01-01T01:41:23.187 [DEBUG] [Thread-138340] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:41:23.188 [DEBUG] [Thread-138340] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:41:23.188 [DEBUG] [Thread-138340] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:41:23.188 [DEBUG] [Thread-138340] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:41:23.188 [DEBUG] [Thread-138340] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:41:23.188 [DEBUG] [Thread-138340] [transport.py] [_log()] Compression: none
2026-01-01T01:41:23.188 [DEBUG] [Thread-138340] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:41:23.242 [DEBUG] [Thread-138340] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:41:23.243 [DEBUG] [Thread-138340] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:41:23.243 [DEBUG] [Thread-138340] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T01:41:23.244 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T01:41:23.244 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:41:23.299 [DEBUG] [Thread-138340] [transport.py] [_log()] userauth is OK
2026-01-01T01:41:23.299 [DEBUG] [Thread-138340] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:41:23.299 [DEBUG] [Thread-138340] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:41:23.300 [DEBUG] [Thread-138340] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T01:41:23.300 [DEBUG] [Thread-138340] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:41:23.318 [INFO] [Thread-138340] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:41:23.319 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T01:41:23.319 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:41:24.157 [DEBUG] [Thread-138340] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:41:24.157 [DEBUG] [Thread-138340] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:41:24.205 [DEBUG] [Thread-138340] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:41:24.205 [DEBUG] [Thread-138340] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:41:24.214 [DEBUG] [Thread-138340] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:41:24.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:41:24.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T01:41:24.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T01:41:24.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:41:24.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:41:24.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:41:24.249 [DEBUG] [Thread-138340] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:41:35.532 [DEBUG] [Thread-138342 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:41:50.576 [DEBUG] [Thread-138343 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:41:53.313 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:41:53.314 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:41:54.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T01:41:54.272 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T01:41:54.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T01:41:54.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 1, 41, 47), 3.64, 78.44, 0.0, 13.71, 13.69, 0, 0, 0, 2, 0, 0),)
2026-01-01T01:41:54.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 01:41:47
2026-01-01T01:41:55.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T01:41:55.269 [DEBUG] [Thread-138344] [transport.py] [_log()] starting thread (client mode): 0xb6bbc3d0
2026-01-01T01:41:55.269 [DEBUG] [Thread-138344] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:41:55.289 [DEBUG] [Thread-138344] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T01:41:55.289 [INFO] [Thread-138344] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T01:41:55.293 [DEBUG] [Thread-138344] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:41:55.293 [DEBUG] [Thread-138344] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T01:41:55.293 [DEBUG] [Thread-138344] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:41:55.293 [DEBUG] [Thread-138344] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:41:55.293 [DEBUG] [Thread-138344] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:41:55.293 [DEBUG] [Thread-138344] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:41:55.293 [DEBUG] [Thread-138344] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:41:55.293 [DEBUG] [Thread-138344] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:41:55.293 [DEBUG] [Thread-138344] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:41:55.293 [DEBUG] [Thread-138344] [transport.py] [_log()] client lang: <none>
2026-01-01T01:41:55.293 [DEBUG] [Thread-138344] [transport.py] [_log()] server lang: <none>
2026-01-01T01:41:55.293 [DEBUG] [Thread-138344] [transport.py] [_log()] kex follows: False
2026-01-01T01:41:55.293 [DEBUG] [Thread-138344] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:41:55.293 [DEBUG] [Thread-138344] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:41:55.293 [DEBUG] [Thread-138344] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:41:55.293 [DEBUG] [Thread-138344] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:41:55.293 [DEBUG] [Thread-138344] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:41:55.293 [DEBUG] [Thread-138344] [transport.py] [_log()] Compression: none
2026-01-01T01:41:55.293 [DEBUG] [Thread-138344] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:41:55.311 [DEBUG] [Thread-138344] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:41:55.312 [DEBUG] [Thread-138344] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:41:55.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T01:41:55.313 [DEBUG] [Thread-138344] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T01:41:55.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:41:55.315 [DEBUG] [Thread-138344] [transport.py] [_log()] userauth is OK
2026-01-01T01:41:55.315 [DEBUG] [Thread-138344] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:41:55.315 [DEBUG] [Thread-138344] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:41:55.315 [DEBUG] [Thread-138344] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T01:41:55.315 [DEBUG] [Thread-138344] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:41:55.332 [INFO] [Thread-138344] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:41:55.333 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:41:55.946 [DEBUG] [Thread-138344] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:41:55.946 [DEBUG] [Thread-138344] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:41:55.947 [DEBUG] [Thread-138344] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T01:41:55.988 [DEBUG] [Thread-138344] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:41:55.988 [DEBUG] [Thread-138344] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:41:55.991 [DEBUG] [Thread-138344] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:41:56.002 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:41:56.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T01:41:56.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T01:41:56.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T01:41:56.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:41:56.014 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T01:41:56.014 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:41:56.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:41:56.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T01:41:56.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.986938 -999.00  +13.80   7.86     80  +10.60 1 1 1 2 1     0    0 3.70 21.32 ZNESW 5.2 7.9 216.2 12.0 14.6 -21.1 14.5 -20.6 14.3 -19.3 14.6 -20.2
2026-01-01T01:41:56.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T01:41:56.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T01:41:56.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.986938
2026-01-01T01:41:56.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T01:41:56.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T01:41:56.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T01:41:56.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T01:41:56.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T01:41:56.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T01:41:47', tmtdew=3.64, humidity=78.44, cloud=0.0, wind=13.71, temperature=13.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T01:41:47', seeing=1.1, atlas_timestamp='2025-12-31T23:41:11.443', atlas_cloud=1, atlas_rain=1, zp_data=[0.027249999999998664, 0.03575000000000017, 0.06125000000000114, 0.043499999999998096, 0.03549999999999898, 0.08125000000000071, 0.0600000000000005, 0.03675000000000139, 0.0, 0.04100000000000037, 0.03275000000000006, 0.11849999999999916, 0.14150000000000063, 0.06424999999999947, -0.049500000000001876, 0.07399999999999807, 0.09024999999999928, 0.19799999999999862, 0.0824999999999978, 0.17024999999999935, 0.129999999999999, 0.08824999999999861, 0.04625000000000057, 0.50875, 0.2544999999999984, 0.266, 0.28775000000000084, 0.27449999999999974, 0.35250000000000004, 0.12400000000000055, -0.07399999999999807, 0.3865000000000016, 0.22974999999999923], zp_timestamp='2025-12-31T23:38:00')
2026-01-01T01:41:56.017 [DEBUG] [Thread-138344] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:41:56.102 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T01:41:56.114 [DEBUG] [Thread-138347] [transport.py] [_log()] starting thread (client mode): 0xb955b1c0
2026-01-01T01:41:56.114 [DEBUG] [Thread-138347] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:41:56.129 [DEBUG] [Thread-138347] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T01:41:56.130 [INFO] [Thread-138347] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T01:41:56.137 [DEBUG] [Thread-138347] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:41:56.137 [DEBUG] [Thread-138347] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T01:41:56.137 [DEBUG] [Thread-138347] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:41:56.137 [DEBUG] [Thread-138347] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:41:56.138 [DEBUG] [Thread-138347] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:41:56.138 [DEBUG] [Thread-138347] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:41:56.138 [DEBUG] [Thread-138347] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:41:56.138 [DEBUG] [Thread-138347] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:41:56.138 [DEBUG] [Thread-138347] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:41:56.138 [DEBUG] [Thread-138347] [transport.py] [_log()] client lang: <none>
2026-01-01T01:41:56.138 [DEBUG] [Thread-138347] [transport.py] [_log()] server lang: <none>
2026-01-01T01:41:56.138 [DEBUG] [Thread-138347] [transport.py] [_log()] kex follows: False
2026-01-01T01:41:56.138 [DEBUG] [Thread-138347] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:41:56.138 [DEBUG] [Thread-138347] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:41:56.138 [DEBUG] [Thread-138347] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:41:56.138 [DEBUG] [Thread-138347] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:41:56.138 [DEBUG] [Thread-138347] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:41:56.138 [DEBUG] [Thread-138347] [transport.py] [_log()] Compression: none
2026-01-01T01:41:56.138 [DEBUG] [Thread-138347] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:41:56.199 [DEBUG] [Thread-138347] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:41:56.200 [DEBUG] [Thread-138347] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:41:56.200 [DEBUG] [Thread-138347] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T01:41:56.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T01:41:56.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:41:56.254 [DEBUG] [Thread-138347] [transport.py] [_log()] userauth is OK
2026-01-01T01:41:56.255 [DEBUG] [Thread-138347] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:41:56.255 [DEBUG] [Thread-138347] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:41:56.255 [DEBUG] [Thread-138347] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T01:41:56.255 [DEBUG] [Thread-138347] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:41:56.275 [INFO] [Thread-138347] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:41:56.275 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T01:41:56.276 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:41:57.114 [DEBUG] [Thread-138347] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:41:57.114 [DEBUG] [Thread-138347] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:41:57.163 [DEBUG] [Thread-138347] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:41:57.163 [DEBUG] [Thread-138347] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:41:57.172 [DEBUG] [Thread-138347] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:41:57.180 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:41:57.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T01:41:57.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T01:41:57.197 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:41:57.197 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:41:57.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:41:57.207 [DEBUG] [Thread-138347] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:42:01.585 [DEBUG] [Thread-138349 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:42:05.613 [DEBUG] [Thread-138350 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:42:20.651 [DEBUG] [Thread-138351 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:42:27.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T01:42:27.228 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T01:42:27.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T01:42:27.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 1, 42, 19), 3.64, 78.44, 0.0, 12.62, 13.67, 0, 0, 0, 2, 0, 0),)
2026-01-01T01:42:27.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 01:42:19
2026-01-01T01:42:28.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T01:42:28.227 [DEBUG] [Thread-138352] [transport.py] [_log()] starting thread (client mode): 0xb6b2aad0
2026-01-01T01:42:28.227 [DEBUG] [Thread-138352] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:42:28.246 [DEBUG] [Thread-138352] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T01:42:28.247 [INFO] [Thread-138352] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T01:42:28.250 [DEBUG] [Thread-138352] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:42:28.250 [DEBUG] [Thread-138352] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T01:42:28.250 [DEBUG] [Thread-138352] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:42:28.250 [DEBUG] [Thread-138352] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:42:28.250 [DEBUG] [Thread-138352] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:42:28.250 [DEBUG] [Thread-138352] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:42:28.250 [DEBUG] [Thread-138352] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:42:28.250 [DEBUG] [Thread-138352] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:42:28.250 [DEBUG] [Thread-138352] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:42:28.250 [DEBUG] [Thread-138352] [transport.py] [_log()] client lang: <none>
2026-01-01T01:42:28.250 [DEBUG] [Thread-138352] [transport.py] [_log()] server lang: <none>
2026-01-01T01:42:28.250 [DEBUG] [Thread-138352] [transport.py] [_log()] kex follows: False
2026-01-01T01:42:28.251 [DEBUG] [Thread-138352] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:42:28.251 [DEBUG] [Thread-138352] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:42:28.251 [DEBUG] [Thread-138352] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:42:28.251 [DEBUG] [Thread-138352] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:42:28.251 [DEBUG] [Thread-138352] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:42:28.251 [DEBUG] [Thread-138352] [transport.py] [_log()] Compression: none
2026-01-01T01:42:28.251 [DEBUG] [Thread-138352] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:42:28.266 [DEBUG] [Thread-138352] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:42:28.267 [DEBUG] [Thread-138352] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:42:28.267 [DEBUG] [Thread-138352] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T01:42:28.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T01:42:28.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:42:28.309 [DEBUG] [Thread-138352] [transport.py] [_log()] userauth is OK
2026-01-01T01:42:28.309 [DEBUG] [Thread-138352] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:42:28.309 [DEBUG] [Thread-138352] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:42:28.309 [DEBUG] [Thread-138352] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T01:42:28.309 [DEBUG] [Thread-138352] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:42:28.342 [INFO] [Thread-138352] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:42:28.343 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:42:29.521 [DEBUG] [Thread-138352] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:42:29.521 [DEBUG] [Thread-138352] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:42:29.522 [DEBUG] [Thread-138352] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T01:42:29.562 [DEBUG] [Thread-138352] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:42:29.562 [DEBUG] [Thread-138352] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:42:29.565 [DEBUG] [Thread-138352] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:42:29.578 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:42:29.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T01:42:29.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T01:42:29.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T01:42:29.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:42:29.586 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T01:42:29.586 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:42:29.586 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:42:29.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T01:42:29.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.987285 -999.00  +13.80   5.10     80  +10.60 1 1 1 2 1     0    0 3.74 19.54 ZNESW 5.1 5.1 244.3 9.7 14.7 -21.1 14.5 -20.7 14.3 -19.2 14.6 -20.2
2026-01-01T01:42:29.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T01:42:29.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T01:42:29.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.987285
2026-01-01T01:42:29.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T01:42:29.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T01:42:29.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T01:42:29.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T01:42:29.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T01:42:29.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T01:42:19', tmtdew=3.64, humidity=78.44, cloud=0.0, wind=12.62, temperature=13.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T01:42:19', seeing=1.32, atlas_timestamp='2025-12-31T23:41:41.424', atlas_cloud=1, atlas_rain=1, zp_data=[0.027249999999998664, 0.03575000000000017, 0.06125000000000114, 0.043499999999998096, 0.03549999999999898, 0.08125000000000071, 0.0600000000000005, 0.03675000000000139, 0.0, 0.04100000000000037, 0.03275000000000006, 0.11849999999999916, 0.14150000000000063, 0.06424999999999947, -0.049500000000001876, 0.07399999999999807, 0.09024999999999928, 0.19799999999999862, 0.0824999999999978, 0.17024999999999935, 0.129999999999999, 0.08824999999999861, 0.04625000000000057, 0.50875, 0.2544999999999984, 0.266, 0.28775000000000084, 0.27449999999999974, 0.35250000000000004, 0.12400000000000055, -0.07399999999999807, 0.3865000000000016, 0.22974999999999923], zp_timestamp='2025-12-31T23:38:00')
2026-01-01T01:42:29.588 [DEBUG] [Thread-138352] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:42:29.671 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T01:42:29.682 [DEBUG] [Thread-138355] [transport.py] [_log()] starting thread (client mode): 0xb6ba2e30
2026-01-01T01:42:29.682 [DEBUG] [Thread-138355] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:42:29.697 [DEBUG] [Thread-138355] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T01:42:29.697 [INFO] [Thread-138355] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T01:42:29.705 [DEBUG] [Thread-138355] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:42:29.705 [DEBUG] [Thread-138355] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T01:42:29.705 [DEBUG] [Thread-138355] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:42:29.705 [DEBUG] [Thread-138355] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:42:29.705 [DEBUG] [Thread-138355] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:42:29.706 [DEBUG] [Thread-138355] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:42:29.706 [DEBUG] [Thread-138355] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:42:29.706 [DEBUG] [Thread-138355] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:42:29.706 [DEBUG] [Thread-138355] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:42:29.706 [DEBUG] [Thread-138355] [transport.py] [_log()] client lang: <none>
2026-01-01T01:42:29.706 [DEBUG] [Thread-138355] [transport.py] [_log()] server lang: <none>
2026-01-01T01:42:29.706 [DEBUG] [Thread-138355] [transport.py] [_log()] kex follows: False
2026-01-01T01:42:29.706 [DEBUG] [Thread-138355] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:42:29.706 [DEBUG] [Thread-138355] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:42:29.706 [DEBUG] [Thread-138355] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:42:29.707 [DEBUG] [Thread-138355] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:42:29.707 [DEBUG] [Thread-138355] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:42:29.707 [DEBUG] [Thread-138355] [transport.py] [_log()] Compression: none
2026-01-01T01:42:29.707 [DEBUG] [Thread-138355] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:42:29.762 [DEBUG] [Thread-138355] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:42:29.763 [DEBUG] [Thread-138355] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:42:29.763 [DEBUG] [Thread-138355] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T01:42:29.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T01:42:29.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:42:29.823 [DEBUG] [Thread-138355] [transport.py] [_log()] userauth is OK
2026-01-01T01:42:29.824 [DEBUG] [Thread-138355] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:42:29.824 [DEBUG] [Thread-138355] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:42:29.824 [DEBUG] [Thread-138355] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T01:42:29.824 [DEBUG] [Thread-138355] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:42:29.842 [INFO] [Thread-138355] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:42:29.843 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T01:42:29.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:42:30.700 [DEBUG] [Thread-138355] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:42:30.700 [DEBUG] [Thread-138355] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:42:30.749 [DEBUG] [Thread-138355] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:42:30.749 [DEBUG] [Thread-138355] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:42:30.757 [DEBUG] [Thread-138355] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:42:30.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:42:30.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T01:42:30.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T01:42:30.784 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:42:30.784 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:42:30.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:42:30.793 [DEBUG] [Thread-138355] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:42:35.680 [DEBUG] [Thread-138357 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:42:50.729 [DEBUG] [Thread-138358 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:42:53.515 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:42:53.516 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:43:00.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T01:43:00.815 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T01:43:00.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T01:43:01.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 1, 42, 51), 3.7, 78.42, 0.0, 13.0, 13.67, 0, 0, 0, 2, 0, 0),)
2026-01-01T01:43:01.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 01:42:51
2026-01-01T01:43:01.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T01:43:01.659 [DEBUG] [Thread-138359 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:43:01.789 [DEBUG] [Thread-138360] [transport.py] [_log()] starting thread (client mode): 0xb1744730
2026-01-01T01:43:01.789 [DEBUG] [Thread-138360] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:43:01.807 [DEBUG] [Thread-138360] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T01:43:01.807 [INFO] [Thread-138360] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T01:43:01.811 [DEBUG] [Thread-138360] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:43:01.811 [DEBUG] [Thread-138360] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T01:43:01.811 [DEBUG] [Thread-138360] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:43:01.811 [DEBUG] [Thread-138360] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:43:01.812 [DEBUG] [Thread-138360] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:43:01.812 [DEBUG] [Thread-138360] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:43:01.812 [DEBUG] [Thread-138360] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:43:01.812 [DEBUG] [Thread-138360] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:43:01.812 [DEBUG] [Thread-138360] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:43:01.812 [DEBUG] [Thread-138360] [transport.py] [_log()] client lang: <none>
2026-01-01T01:43:01.812 [DEBUG] [Thread-138360] [transport.py] [_log()] server lang: <none>
2026-01-01T01:43:01.812 [DEBUG] [Thread-138360] [transport.py] [_log()] kex follows: False
2026-01-01T01:43:01.812 [DEBUG] [Thread-138360] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:43:01.812 [DEBUG] [Thread-138360] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:43:01.812 [DEBUG] [Thread-138360] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:43:01.812 [DEBUG] [Thread-138360] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:43:01.812 [DEBUG] [Thread-138360] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:43:01.812 [DEBUG] [Thread-138360] [transport.py] [_log()] Compression: none
2026-01-01T01:43:01.812 [DEBUG] [Thread-138360] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:43:01.827 [DEBUG] [Thread-138360] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:43:01.828 [DEBUG] [Thread-138360] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:43:01.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T01:43:01.829 [DEBUG] [Thread-138360] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T01:43:01.830 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:43:01.831 [DEBUG] [Thread-138360] [transport.py] [_log()] userauth is OK
2026-01-01T01:43:01.831 [DEBUG] [Thread-138360] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:43:01.831 [DEBUG] [Thread-138360] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:43:01.831 [DEBUG] [Thread-138360] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T01:43:01.831 [DEBUG] [Thread-138360] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:43:01.850 [INFO] [Thread-138360] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:43:01.852 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:43:02.456 [DEBUG] [Thread-138360] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:43:02.457 [DEBUG] [Thread-138360] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:43:02.457 [DEBUG] [Thread-138360] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T01:43:02.498 [DEBUG] [Thread-138360] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:43:02.498 [DEBUG] [Thread-138360] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:43:02.501 [DEBUG] [Thread-138360] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:43:02.514 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:43:02.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T01:43:02.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T01:43:02.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T01:43:02.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:43:02.526 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T01:43:02.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:43:02.526 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:43:02.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T01:43:02.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.987632 -999.00  +13.80   4.31     80  +10.60 1 1 1 2 1     0    0 3.62 18.22 ZNESW 5.8 4.3 236.3 13.0 14.6 -21.2 14.5 -20.6 14.3 -19.4 14.6 -20.3
2026-01-01T01:43:02.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T01:43:02.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T01:43:02.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.987632
2026-01-01T01:43:02.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T01:43:02.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T01:43:02.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T01:43:02.528 [DEBUG] [Thread-138360] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:43:02.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T01:43:02.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T01:43:02.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T01:42:51', tmtdew=3.7, humidity=78.42, cloud=0.0, wind=13.0, temperature=13.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T01:42:51', seeing=1.03, atlas_timestamp='2025-12-31T23:42:11.405', atlas_cloud=1, atlas_rain=1, zp_data=[0.08224999999999838, 0.12424999999999997, 0.09175000000000111, 0.10249999999999915, 0.21850000000000058, 0.10025000000000084, 0.06400000000000006, 0.08725000000000094, 0.04449999999999932, 0.09200000000000053, 0.02224999999999966, 0.12199999999999989, 0.36599999999999966, 0.06925000000000026, 0.011999999999998678, 0.05799999999999983, 0.11224999999999952, 0.2394999999999996, 0.08000000000000007, 0.19024999999999892, 0.32399999999999807, 0.1822499999999998, 0.05025000000000013, 0.16174999999999962, 0.13949999999999996, 0.15450000000000053, 0.21875, 0.1485000000000003, 0.47799999999999976, -0.049999999999998934, 0.11900000000000155, 0.29800000000000093, 0.302249999999999], zp_timestamp='2025-12-31T23:41:00')
2026-01-01T01:43:02.611 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T01:43:02.623 [DEBUG] [Thread-138363] [transport.py] [_log()] starting thread (client mode): 0xb1795570
2026-01-01T01:43:02.623 [DEBUG] [Thread-138363] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:43:02.638 [DEBUG] [Thread-138363] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T01:43:02.639 [INFO] [Thread-138363] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T01:43:02.646 [DEBUG] [Thread-138363] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:43:02.646 [DEBUG] [Thread-138363] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T01:43:02.646 [DEBUG] [Thread-138363] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:43:02.646 [DEBUG] [Thread-138363] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:43:02.647 [DEBUG] [Thread-138363] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:43:02.647 [DEBUG] [Thread-138363] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:43:02.647 [DEBUG] [Thread-138363] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:43:02.647 [DEBUG] [Thread-138363] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:43:02.647 [DEBUG] [Thread-138363] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:43:02.647 [DEBUG] [Thread-138363] [transport.py] [_log()] client lang: <none>
2026-01-01T01:43:02.647 [DEBUG] [Thread-138363] [transport.py] [_log()] server lang: <none>
2026-01-01T01:43:02.647 [DEBUG] [Thread-138363] [transport.py] [_log()] kex follows: False
2026-01-01T01:43:02.647 [DEBUG] [Thread-138363] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:43:02.647 [DEBUG] [Thread-138363] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:43:02.647 [DEBUG] [Thread-138363] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:43:02.647 [DEBUG] [Thread-138363] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:43:02.647 [DEBUG] [Thread-138363] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:43:02.647 [DEBUG] [Thread-138363] [transport.py] [_log()] Compression: none
2026-01-01T01:43:02.647 [DEBUG] [Thread-138363] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:43:02.703 [DEBUG] [Thread-138363] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:43:02.704 [DEBUG] [Thread-138363] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:43:02.705 [DEBUG] [Thread-138363] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T01:43:02.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T01:43:02.706 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:43:02.759 [DEBUG] [Thread-138363] [transport.py] [_log()] userauth is OK
2026-01-01T01:43:02.760 [DEBUG] [Thread-138363] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:43:02.760 [DEBUG] [Thread-138363] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:43:02.761 [DEBUG] [Thread-138363] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T01:43:02.761 [DEBUG] [Thread-138363] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:43:02.779 [INFO] [Thread-138363] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:43:02.780 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T01:43:02.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:43:03.625 [DEBUG] [Thread-138363] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:43:03.625 [DEBUG] [Thread-138363] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:43:03.673 [DEBUG] [Thread-138363] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:43:03.674 [DEBUG] [Thread-138363] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:43:03.683 [DEBUG] [Thread-138363] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:43:03.692 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:43:03.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T01:43:03.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T01:43:03.711 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:43:03.711 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:43:03.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:43:03.720 [DEBUG] [Thread-138363] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:43:05.760 [DEBUG] [Thread-138365 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:43:20.812 [DEBUG] [Thread-138366 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:43:33.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T01:43:33.713 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T01:43:33.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
2026-01-01T01:43:34.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 1, 43, 23), 3.7, 78.39, 0.0, 14.17, 13.62, 0, 0, 0, 2, 0, 0),)
2026-01-01T01:43:34.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 01:43:23
2026-01-01T01:43:34.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T01:43:34.694 [DEBUG] [Thread-138367] [transport.py] [_log()] starting thread (client mode): 0xb9579f00
2026-01-01T01:43:34.694 [DEBUG] [Thread-138367] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:43:34.714 [DEBUG] [Thread-138367] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T01:43:34.714 [INFO] [Thread-138367] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T01:43:34.715 [DEBUG] [Thread-138367] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:43:34.715 [DEBUG] [Thread-138367] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T01:43:34.715 [DEBUG] [Thread-138367] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:43:34.715 [DEBUG] [Thread-138367] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:43:34.715 [DEBUG] [Thread-138367] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:43:34.715 [DEBUG] [Thread-138367] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:43:34.715 [DEBUG] [Thread-138367] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:43:34.715 [DEBUG] [Thread-138367] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:43:34.715 [DEBUG] [Thread-138367] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:43:34.715 [DEBUG] [Thread-138367] [transport.py] [_log()] client lang: <none>
2026-01-01T01:43:34.715 [DEBUG] [Thread-138367] [transport.py] [_log()] server lang: <none>
2026-01-01T01:43:34.715 [DEBUG] [Thread-138367] [transport.py] [_log()] kex follows: False
2026-01-01T01:43:34.715 [DEBUG] [Thread-138367] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:43:34.715 [DEBUG] [Thread-138367] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:43:34.715 [DEBUG] [Thread-138367] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:43:34.715 [DEBUG] [Thread-138367] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:43:34.715 [DEBUG] [Thread-138367] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:43:34.715 [DEBUG] [Thread-138367] [transport.py] [_log()] Compression: none
2026-01-01T01:43:34.715 [DEBUG] [Thread-138367] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:43:34.723 [DEBUG] [Thread-138367] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:43:34.724 [DEBUG] [Thread-138367] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:43:34.724 [DEBUG] [Thread-138367] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T01:43:34.724 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T01:43:34.724 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:43:34.725 [DEBUG] [Thread-138367] [transport.py] [_log()] userauth is OK
2026-01-01T01:43:34.725 [DEBUG] [Thread-138367] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:43:34.725 [DEBUG] [Thread-138367] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:43:34.726 [DEBUG] [Thread-138367] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T01:43:34.726 [DEBUG] [Thread-138367] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:43:34.742 [INFO] [Thread-138367] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:43:34.743 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:43:35.514 [DEBUG] [Thread-138367] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:43:35.514 [DEBUG] [Thread-138367] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:43:35.514 [DEBUG] [Thread-138367] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T01:43:35.555 [DEBUG] [Thread-138367] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:43:35.555 [DEBUG] [Thread-138367] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:43:35.558 [DEBUG] [Thread-138367] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:43:35.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:43:35.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T01:43:35.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T01:43:35.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T01:43:35.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:43:35.579 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T01:43:35.579 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:43:35.579 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:43:35.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T01:43:35.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.987980 -999.00  +13.80   6.10     80  +10.50 1 1 1 2 1     0    0 3.70 19.84 ZNESW 7.3 6.1 225.2 10.8 14.6 -21.2 14.5 -20.8 14.3 -19.4 14.6 -20.3
2026-01-01T01:43:35.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T01:43:35.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T01:43:35.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.987980
2026-01-01T01:43:35.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T01:43:35.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T01:43:35.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T01:43:35.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T01:43:35.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T01:43:35.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T01:43:23', tmtdew=3.7, humidity=78.39, cloud=0.0, wind=14.17, temperature=13.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T01:43:23', seeing=1.05, atlas_timestamp='2025-12-31T23:42:41.472', atlas_cloud=1, atlas_rain=1, zp_data=[0.08224999999999838, 0.12424999999999997, 0.09175000000000111, 0.10249999999999915, 0.21850000000000058, 0.10025000000000084, 0.06400000000000006, 0.08725000000000094, 0.04449999999999932, 0.09200000000000053, 0.02224999999999966, 0.12199999999999989, 0.36599999999999966, 0.06925000000000026, 0.011999999999998678, 0.05799999999999983, 0.11224999999999952, 0.2394999999999996, 0.08000000000000007, 0.19024999999999892, 0.32399999999999807, 0.1822499999999998, 0.05025000000000013, 0.16174999999999962, 0.13949999999999996, 0.15450000000000053, 0.21875, 0.1485000000000003, 0.47799999999999976, -0.049999999999998934, 0.11900000000000155, 0.29800000000000093, 0.302249999999999], zp_timestamp='2025-12-31T23:41:00')
2026-01-01T01:43:35.582 [DEBUG] [Thread-138367] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:43:35.671 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T01:43:35.683 [DEBUG] [Thread-138370] [transport.py] [_log()] starting thread (client mode): 0xb95b3b20
2026-01-01T01:43:35.683 [DEBUG] [Thread-138370] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:43:35.699 [DEBUG] [Thread-138370] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T01:43:35.699 [INFO] [Thread-138370] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T01:43:35.707 [DEBUG] [Thread-138370] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:43:35.707 [DEBUG] [Thread-138370] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T01:43:35.707 [DEBUG] [Thread-138370] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:43:35.707 [DEBUG] [Thread-138370] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:43:35.707 [DEBUG] [Thread-138370] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:43:35.707 [DEBUG] [Thread-138370] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:43:35.707 [DEBUG] [Thread-138370] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:43:35.707 [DEBUG] [Thread-138370] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:43:35.707 [DEBUG] [Thread-138370] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:43:35.707 [DEBUG] [Thread-138370] [transport.py] [_log()] client lang: <none>
2026-01-01T01:43:35.707 [DEBUG] [Thread-138370] [transport.py] [_log()] server lang: <none>
2026-01-01T01:43:35.708 [DEBUG] [Thread-138370] [transport.py] [_log()] kex follows: False
2026-01-01T01:43:35.708 [DEBUG] [Thread-138370] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:43:35.708 [DEBUG] [Thread-138370] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:43:35.708 [DEBUG] [Thread-138370] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:43:35.708 [DEBUG] [Thread-138370] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:43:35.708 [DEBUG] [Thread-138370] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:43:35.708 [DEBUG] [Thread-138370] [transport.py] [_log()] Compression: none
2026-01-01T01:43:35.708 [DEBUG] [Thread-138370] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:43:35.768 [DEBUG] [Thread-138370] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:43:35.768 [DEBUG] [Thread-138370] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:43:35.769 [DEBUG] [Thread-138370] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T01:43:35.769 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T01:43:35.770 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:43:35.825 [DEBUG] [Thread-138370] [transport.py] [_log()] userauth is OK
2026-01-01T01:43:35.825 [DEBUG] [Thread-138370] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:43:35.825 [DEBUG] [Thread-138370] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:43:35.825 [DEBUG] [Thread-138370] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T01:43:35.825 [DEBUG] [Thread-138370] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:43:35.844 [DEBUG] [Thread-138372 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:43:35.849 [INFO] [Thread-138370] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:43:35.849 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T01:43:35.849 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:43:36.673 [DEBUG] [Thread-138370] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:43:36.673 [DEBUG] [Thread-138370] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:43:36.721 [DEBUG] [Thread-138370] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:43:36.721 [DEBUG] [Thread-138370] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:43:36.731 [DEBUG] [Thread-138370] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:43:36.740 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:43:36.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T01:43:36.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T01:43:36.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:43:36.759 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:43:36.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:43:36.769 [DEBUG] [Thread-138370] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:43:50.899 [DEBUG] [Thread-138373 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:43:53.717 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:43:53.719 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:44:01.750 [DEBUG] [Thread-138374 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:44:05.931 [DEBUG] [Thread-138375 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:44:06.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T01:44:06.789 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T01:44:06.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T01:44:07.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 1, 43, 55), 3.72, 78.3, 0.0, 12.81, 13.61, 0, 0, 0, 2, 0, 0),)
2026-01-01T01:44:07.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 01:43:55
2026-01-01T01:44:07.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T01:44:07.810 [DEBUG] [Thread-138376] [transport.py] [_log()] starting thread (client mode): 0xb6b17280
2026-01-01T01:44:07.810 [DEBUG] [Thread-138376] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:44:07.830 [DEBUG] [Thread-138376] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T01:44:07.830 [INFO] [Thread-138376] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T01:44:07.834 [DEBUG] [Thread-138376] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:44:07.834 [DEBUG] [Thread-138376] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T01:44:07.834 [DEBUG] [Thread-138376] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:44:07.834 [DEBUG] [Thread-138376] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:44:07.834 [DEBUG] [Thread-138376] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:44:07.834 [DEBUG] [Thread-138376] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:44:07.834 [DEBUG] [Thread-138376] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:44:07.834 [DEBUG] [Thread-138376] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:44:07.834 [DEBUG] [Thread-138376] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:44:07.834 [DEBUG] [Thread-138376] [transport.py] [_log()] client lang: <none>
2026-01-01T01:44:07.834 [DEBUG] [Thread-138376] [transport.py] [_log()] server lang: <none>
2026-01-01T01:44:07.834 [DEBUG] [Thread-138376] [transport.py] [_log()] kex follows: False
2026-01-01T01:44:07.834 [DEBUG] [Thread-138376] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:44:07.834 [DEBUG] [Thread-138376] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:44:07.834 [DEBUG] [Thread-138376] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:44:07.834 [DEBUG] [Thread-138376] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:44:07.834 [DEBUG] [Thread-138376] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:44:07.834 [DEBUG] [Thread-138376] [transport.py] [_log()] Compression: none
2026-01-01T01:44:07.835 [DEBUG] [Thread-138376] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:44:07.851 [DEBUG] [Thread-138376] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:44:07.851 [DEBUG] [Thread-138376] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:44:07.851 [DEBUG] [Thread-138376] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T01:44:07.852 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T01:44:07.852 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:44:07.852 [DEBUG] [Thread-138376] [transport.py] [_log()] userauth is OK
2026-01-01T01:44:07.852 [DEBUG] [Thread-138376] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:44:07.853 [DEBUG] [Thread-138376] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:44:07.853 [DEBUG] [Thread-138376] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T01:44:07.853 [DEBUG] [Thread-138376] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:44:07.881 [INFO] [Thread-138376] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:44:07.881 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:44:08.456 [DEBUG] [Thread-138376] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:44:08.456 [DEBUG] [Thread-138376] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:44:08.456 [DEBUG] [Thread-138376] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T01:44:08.497 [DEBUG] [Thread-138376] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:44:08.497 [DEBUG] [Thread-138376] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:44:08.499 [DEBUG] [Thread-138376] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:44:08.512 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:44:08.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T01:44:08.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T01:44:08.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T01:44:08.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:44:08.518 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T01:44:08.518 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:44:08.518 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:44:08.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T01:44:08.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.988674 -999.00  +13.80   8.05     80  +10.50 1 1 1 2 1     0    0 3.81 21.90 ZNESW 9.5 8.1 204.0 12.3 14.6 -21.1 14.5 -20.7 14.3 -19.5 14.6 -20.2
2026-01-01T01:44:08.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T01:44:08.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T01:44:08.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.988674
2026-01-01T01:44:08.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T01:44:08.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T01:44:08.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T01:44:08.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T01:44:08.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T01:44:08.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T01:43:55', tmtdew=3.72, humidity=78.3, cloud=0.0, wind=12.81, temperature=13.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T01:43:55', seeing=1.05, atlas_timestamp='2025-12-31T23:43:41.434', atlas_cloud=1, atlas_rain=1, zp_data=[0.08224999999999838, 0.12424999999999997, 0.09175000000000111, 0.10249999999999915, 0.21850000000000058, 0.10025000000000084, 0.06400000000000006, 0.08725000000000094, 0.04449999999999932, 0.09200000000000053, 0.02224999999999966, 0.12199999999999989, 0.36599999999999966, 0.06925000000000026, 0.011999999999998678, 0.05799999999999983, 0.11224999999999952, 0.2394999999999996, 0.08000000000000007, 0.19024999999999892, 0.32399999999999807, 0.1822499999999998, 0.05025000000000013, 0.16174999999999962, 0.13949999999999996, 0.15450000000000053, 0.21875, 0.1485000000000003, 0.47799999999999976, -0.049999999999998934, 0.11900000000000155, 0.29800000000000093, 0.302249999999999], zp_timestamp='2025-12-31T23:41:00')
2026-01-01T01:44:08.519 [DEBUG] [Thread-138376] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:44:08.605 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T01:44:08.617 [DEBUG] [Thread-138379] [transport.py] [_log()] starting thread (client mode): 0xb6b17a90
2026-01-01T01:44:08.617 [DEBUG] [Thread-138379] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:44:08.632 [DEBUG] [Thread-138379] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T01:44:08.632 [INFO] [Thread-138379] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T01:44:08.639 [DEBUG] [Thread-138379] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:44:08.639 [DEBUG] [Thread-138379] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T01:44:08.639 [DEBUG] [Thread-138379] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:44:08.639 [DEBUG] [Thread-138379] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:44:08.639 [DEBUG] [Thread-138379] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:44:08.639 [DEBUG] [Thread-138379] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:44:08.639 [DEBUG] [Thread-138379] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:44:08.639 [DEBUG] [Thread-138379] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:44:08.639 [DEBUG] [Thread-138379] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:44:08.639 [DEBUG] [Thread-138379] [transport.py] [_log()] client lang: <none>
2026-01-01T01:44:08.639 [DEBUG] [Thread-138379] [transport.py] [_log()] server lang: <none>
2026-01-01T01:44:08.639 [DEBUG] [Thread-138379] [transport.py] [_log()] kex follows: False
2026-01-01T01:44:08.640 [DEBUG] [Thread-138379] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:44:08.640 [DEBUG] [Thread-138379] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:44:08.640 [DEBUG] [Thread-138379] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:44:08.640 [DEBUG] [Thread-138379] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:44:08.640 [DEBUG] [Thread-138379] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:44:08.640 [DEBUG] [Thread-138379] [transport.py] [_log()] Compression: none
2026-01-01T01:44:08.640 [DEBUG] [Thread-138379] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:44:08.694 [DEBUG] [Thread-138379] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:44:08.694 [DEBUG] [Thread-138379] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:44:08.694 [DEBUG] [Thread-138379] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T01:44:08.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T01:44:08.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:44:08.751 [DEBUG] [Thread-138379] [transport.py] [_log()] userauth is OK
2026-01-01T01:44:08.751 [DEBUG] [Thread-138379] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:44:08.751 [DEBUG] [Thread-138379] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:44:08.751 [DEBUG] [Thread-138379] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T01:44:08.751 [DEBUG] [Thread-138379] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:44:08.765 [INFO] [Thread-138379] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:44:08.765 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T01:44:08.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:44:09.590 [DEBUG] [Thread-138379] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:44:09.590 [DEBUG] [Thread-138379] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:44:09.637 [DEBUG] [Thread-138379] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:44:09.637 [DEBUG] [Thread-138379] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:44:09.646 [DEBUG] [Thread-138379] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:44:09.654 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:44:09.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T01:44:09.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T01:44:09.669 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:44:09.669 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:44:09.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:44:09.677 [DEBUG] [Thread-138379] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:44:20.962 [DEBUG] [Thread-138381 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:44:36.010 [DEBUG] [Thread-138382 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:44:39.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T01:44:39.700 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T01:44:39.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T01:44:40.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 1, 44, 27), 3.72, 78.27, 0.0, 14.26, 13.62, 0, 0, 0, 2, 0, 0),)
2026-01-01T01:44:40.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 01:44:27
2026-01-01T01:44:40.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T01:44:40.690 [DEBUG] [Thread-138383] [transport.py] [_log()] starting thread (client mode): 0xb6b156c0
2026-01-01T01:44:40.690 [DEBUG] [Thread-138383] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:44:40.711 [DEBUG] [Thread-138383] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T01:44:40.711 [INFO] [Thread-138383] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T01:44:40.714 [DEBUG] [Thread-138383] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:44:40.714 [DEBUG] [Thread-138383] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T01:44:40.714 [DEBUG] [Thread-138383] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:44:40.714 [DEBUG] [Thread-138383] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:44:40.714 [DEBUG] [Thread-138383] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:44:40.715 [DEBUG] [Thread-138383] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:44:40.715 [DEBUG] [Thread-138383] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:44:40.715 [DEBUG] [Thread-138383] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:44:40.715 [DEBUG] [Thread-138383] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:44:40.715 [DEBUG] [Thread-138383] [transport.py] [_log()] client lang: <none>
2026-01-01T01:44:40.715 [DEBUG] [Thread-138383] [transport.py] [_log()] server lang: <none>
2026-01-01T01:44:40.715 [DEBUG] [Thread-138383] [transport.py] [_log()] kex follows: False
2026-01-01T01:44:40.715 [DEBUG] [Thread-138383] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:44:40.715 [DEBUG] [Thread-138383] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:44:40.715 [DEBUG] [Thread-138383] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:44:40.715 [DEBUG] [Thread-138383] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:44:40.715 [DEBUG] [Thread-138383] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:44:40.715 [DEBUG] [Thread-138383] [transport.py] [_log()] Compression: none
2026-01-01T01:44:40.715 [DEBUG] [Thread-138383] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:44:40.732 [DEBUG] [Thread-138383] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:44:40.733 [DEBUG] [Thread-138383] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:44:40.733 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T01:44:40.734 [DEBUG] [Thread-138383] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T01:44:40.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:44:40.736 [DEBUG] [Thread-138383] [transport.py] [_log()] userauth is OK
2026-01-01T01:44:40.736 [DEBUG] [Thread-138383] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:44:40.736 [DEBUG] [Thread-138383] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:44:40.736 [DEBUG] [Thread-138383] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T01:44:40.736 [DEBUG] [Thread-138383] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:44:40.771 [INFO] [Thread-138383] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:44:40.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:44:41.383 [DEBUG] [Thread-138383] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:44:41.384 [DEBUG] [Thread-138383] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:44:41.384 [DEBUG] [Thread-138383] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T01:44:41.424 [DEBUG] [Thread-138383] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:44:41.424 [DEBUG] [Thread-138383] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:44:41.428 [DEBUG] [Thread-138383] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:44:41.439 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:44:41.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T01:44:41.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T01:44:41.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T01:44:41.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:44:41.450 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T01:44:41.450 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:44:41.450 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:44:41.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T01:44:41.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.989021 -999.00  +13.80   6.17     80  +10.50 1 1 1 2 1     0    0 3.74 22.80 ZNESW 5.4 6.2 203.3 11.2 14.6 -21.4 14.5 -20.8 14.3 -19.3 14.6 -20.3
2026-01-01T01:44:41.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T01:44:41.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T01:44:41.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.989021
2026-01-01T01:44:41.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T01:44:41.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T01:44:41.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T01:44:41.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T01:44:41.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T01:44:41.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T01:44:27', tmtdew=3.72, humidity=78.27, cloud=0.0, wind=14.26, temperature=13.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T01:44:27', seeing=1.1, atlas_timestamp='2025-12-31T23:44:11.414', atlas_cloud=1, atlas_rain=1, zp_data=[0.08224999999999838, 0.12424999999999997, 0.09175000000000111, 0.10249999999999915, 0.21850000000000058, 0.10025000000000084, 0.06400000000000006, 0.08725000000000094, 0.04449999999999932, 0.09200000000000053, 0.02224999999999966, 0.12199999999999989, 0.36599999999999966, 0.06925000000000026, 0.011999999999998678, 0.05799999999999983, 0.11224999999999952, 0.2394999999999996, 0.08000000000000007, 0.19024999999999892, 0.32399999999999807, 0.1822499999999998, 0.05025000000000013, 0.16174999999999962, 0.13949999999999996, 0.15450000000000053, 0.21875, 0.1485000000000003, 0.47799999999999976, -0.049999999999998934, 0.11900000000000155, 0.29800000000000093, 0.302249999999999], zp_timestamp='2025-12-31T23:41:00')
2026-01-01T01:44:41.453 [DEBUG] [Thread-138383] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:44:41.536 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T01:44:41.548 [DEBUG] [Thread-138386] [transport.py] [_log()] starting thread (client mode): 0xb95b30a0
2026-01-01T01:44:41.548 [DEBUG] [Thread-138386] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:44:41.568 [DEBUG] [Thread-138386] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T01:44:41.568 [INFO] [Thread-138386] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T01:44:41.575 [DEBUG] [Thread-138386] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:44:41.575 [DEBUG] [Thread-138386] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T01:44:41.575 [DEBUG] [Thread-138386] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:44:41.575 [DEBUG] [Thread-138386] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:44:41.575 [DEBUG] [Thread-138386] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:44:41.575 [DEBUG] [Thread-138386] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:44:41.575 [DEBUG] [Thread-138386] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:44:41.575 [DEBUG] [Thread-138386] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:44:41.575 [DEBUG] [Thread-138386] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:44:41.575 [DEBUG] [Thread-138386] [transport.py] [_log()] client lang: <none>
2026-01-01T01:44:41.575 [DEBUG] [Thread-138386] [transport.py] [_log()] server lang: <none>
2026-01-01T01:44:41.575 [DEBUG] [Thread-138386] [transport.py] [_log()] kex follows: False
2026-01-01T01:44:41.575 [DEBUG] [Thread-138386] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:44:41.575 [DEBUG] [Thread-138386] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:44:41.575 [DEBUG] [Thread-138386] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:44:41.575 [DEBUG] [Thread-138386] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:44:41.575 [DEBUG] [Thread-138386] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:44:41.575 [DEBUG] [Thread-138386] [transport.py] [_log()] Compression: none
2026-01-01T01:44:41.575 [DEBUG] [Thread-138386] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:44:41.631 [DEBUG] [Thread-138386] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:44:41.632 [DEBUG] [Thread-138386] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:44:41.632 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T01:44:41.633 [DEBUG] [Thread-138386] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T01:44:41.634 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:44:41.688 [DEBUG] [Thread-138386] [transport.py] [_log()] userauth is OK
2026-01-01T01:44:41.688 [DEBUG] [Thread-138386] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:44:41.689 [DEBUG] [Thread-138386] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:44:41.689 [DEBUG] [Thread-138386] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T01:44:41.689 [DEBUG] [Thread-138386] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:44:41.707 [INFO] [Thread-138386] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:44:41.708 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T01:44:41.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:44:42.577 [DEBUG] [Thread-138386] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:44:42.577 [DEBUG] [Thread-138386] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:44:42.625 [DEBUG] [Thread-138386] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:44:42.625 [DEBUG] [Thread-138386] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:44:42.635 [DEBUG] [Thread-138386] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:44:42.644 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:44:42.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T01:44:42.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T01:44:42.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:44:42.662 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:44:42.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:44:42.670 [DEBUG] [Thread-138386] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:44:51.047 [DEBUG] [Thread-138388 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:44:53.919 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:44:53.921 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:45:01.802 [DEBUG] [Thread-138389 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:45:06.099 [DEBUG] [Thread-138390 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:45:12.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T01:45:12.670 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T01:45:12.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T01:45:13.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 1, 44, 59), 3.77, 77.79, 0.0, 14.56, 13.64, 0, 0, 0, 2, 0, 0),)
2026-01-01T01:45:13.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 01:44:59
2026-01-01T01:45:13.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T01:45:13.637 [DEBUG] [Thread-138391] [transport.py] [_log()] starting thread (client mode): 0xb6b2beb0
2026-01-01T01:45:13.637 [DEBUG] [Thread-138391] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:45:13.662 [DEBUG] [Thread-138391] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T01:45:13.662 [INFO] [Thread-138391] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T01:45:13.664 [DEBUG] [Thread-138391] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:45:13.664 [DEBUG] [Thread-138391] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T01:45:13.664 [DEBUG] [Thread-138391] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:45:13.664 [DEBUG] [Thread-138391] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:45:13.664 [DEBUG] [Thread-138391] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:45:13.664 [DEBUG] [Thread-138391] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:45:13.664 [DEBUG] [Thread-138391] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:45:13.664 [DEBUG] [Thread-138391] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:45:13.665 [DEBUG] [Thread-138391] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:45:13.665 [DEBUG] [Thread-138391] [transport.py] [_log()] client lang: <none>
2026-01-01T01:45:13.665 [DEBUG] [Thread-138391] [transport.py] [_log()] server lang: <none>
2026-01-01T01:45:13.665 [DEBUG] [Thread-138391] [transport.py] [_log()] kex follows: False
2026-01-01T01:45:13.665 [DEBUG] [Thread-138391] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:45:13.665 [DEBUG] [Thread-138391] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:45:13.665 [DEBUG] [Thread-138391] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:45:13.665 [DEBUG] [Thread-138391] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:45:13.665 [DEBUG] [Thread-138391] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:45:13.665 [DEBUG] [Thread-138391] [transport.py] [_log()] Compression: none
2026-01-01T01:45:13.665 [DEBUG] [Thread-138391] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:45:13.686 [DEBUG] [Thread-138391] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:45:13.687 [DEBUG] [Thread-138391] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:45:13.688 [DEBUG] [Thread-138391] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T01:45:13.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T01:45:13.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:45:13.690 [DEBUG] [Thread-138391] [transport.py] [_log()] userauth is OK
2026-01-01T01:45:13.691 [DEBUG] [Thread-138391] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:45:13.691 [DEBUG] [Thread-138391] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:45:13.691 [DEBUG] [Thread-138391] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T01:45:13.691 [DEBUG] [Thread-138391] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:45:13.726 [INFO] [Thread-138391] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:45:13.727 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:45:17.934 [DEBUG] [Thread-138391] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:45:17.935 [DEBUG] [Thread-138391] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:45:17.935 [DEBUG] [Thread-138391] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T01:45:17.976 [DEBUG] [Thread-138391] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:45:17.976 [DEBUG] [Thread-138391] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:45:17.980 [DEBUG] [Thread-138391] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:45:18.019 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:45:18.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T01:45:18.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T01:45:18.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T01:45:18.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:45:18.052 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T01:45:18.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:45:18.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:45:18.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T01:45:18.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.989369 -999.00  +13.80   7.29     80  +10.50 1 1 1 2 1     0    0 3.77 21.18 ZNESW 5.6 7.3 203.0 11.9 14.6 -21.2 14.5 -20.9 14.3 -19.5 14.6 -20.3
2026-01-01T01:45:18.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T01:45:18.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T01:45:18.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.989369
2026-01-01T01:45:18.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T01:45:18.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T01:45:18.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T01:45:18.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T01:45:18.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T01:45:18.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T01:44:59', tmtdew=3.77, humidity=77.79, cloud=0.0, wind=14.56, temperature=13.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T01:44:59', seeing=1.23, atlas_timestamp='2025-12-31T23:44:41.482', atlas_cloud=1, atlas_rain=1, zp_data=[0.08224999999999838, 0.12424999999999997, 0.09175000000000111, 0.10249999999999915, 0.21850000000000058, 0.10025000000000084, 0.06400000000000006, 0.08725000000000094, 0.04449999999999932, 0.09200000000000053, 0.02224999999999966, 0.12199999999999989, 0.36599999999999966, 0.06925000000000026, 0.011999999999998678, 0.05799999999999983, 0.11224999999999952, 0.2394999999999996, 0.08000000000000007, 0.19024999999999892, 0.32399999999999807, 0.1822499999999998, 0.05025000000000013, 0.16174999999999962, 0.13949999999999996, 0.15450000000000053, 0.21875, 0.1485000000000003, 0.47799999999999976, -0.049999999999998934, 0.11900000000000155, 0.29800000000000093, 0.302249999999999], zp_timestamp='2025-12-31T23:41:00')
2026-01-01T01:45:18.055 [DEBUG] [Thread-138391] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:45:18.139 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T01:45:18.152 [DEBUG] [Thread-138394] [transport.py] [_log()] starting thread (client mode): 0xb17960e0
2026-01-01T01:45:18.152 [DEBUG] [Thread-138394] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:45:18.172 [DEBUG] [Thread-138394] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T01:45:18.172 [INFO] [Thread-138394] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T01:45:18.180 [DEBUG] [Thread-138394] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:45:18.180 [DEBUG] [Thread-138394] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T01:45:18.180 [DEBUG] [Thread-138394] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:45:18.180 [DEBUG] [Thread-138394] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:45:18.180 [DEBUG] [Thread-138394] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:45:18.180 [DEBUG] [Thread-138394] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:45:18.180 [DEBUG] [Thread-138394] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:45:18.180 [DEBUG] [Thread-138394] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:45:18.180 [DEBUG] [Thread-138394] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:45:18.180 [DEBUG] [Thread-138394] [transport.py] [_log()] client lang: <none>
2026-01-01T01:45:18.180 [DEBUG] [Thread-138394] [transport.py] [_log()] server lang: <none>
2026-01-01T01:45:18.181 [DEBUG] [Thread-138394] [transport.py] [_log()] kex follows: False
2026-01-01T01:45:18.181 [DEBUG] [Thread-138394] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:45:18.181 [DEBUG] [Thread-138394] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:45:18.181 [DEBUG] [Thread-138394] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:45:18.181 [DEBUG] [Thread-138394] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:45:18.181 [DEBUG] [Thread-138394] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:45:18.181 [DEBUG] [Thread-138394] [transport.py] [_log()] Compression: none
2026-01-01T01:45:18.181 [DEBUG] [Thread-138394] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:45:18.240 [DEBUG] [Thread-138394] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:45:18.241 [DEBUG] [Thread-138394] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:45:18.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T01:45:18.242 [DEBUG] [Thread-138394] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T01:45:18.243 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:45:18.296 [DEBUG] [Thread-138394] [transport.py] [_log()] userauth is OK
2026-01-01T01:45:18.297 [DEBUG] [Thread-138394] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:45:18.297 [DEBUG] [Thread-138394] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:45:18.297 [DEBUG] [Thread-138394] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T01:45:18.297 [DEBUG] [Thread-138394] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:45:18.317 [INFO] [Thread-138394] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:45:18.317 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T01:45:18.317 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:45:19.124 [DEBUG] [Thread-138394] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:45:19.124 [DEBUG] [Thread-138394] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:45:19.171 [DEBUG] [Thread-138394] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:45:19.172 [DEBUG] [Thread-138394] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:45:19.181 [DEBUG] [Thread-138394] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:45:19.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:45:19.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T01:45:19.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T01:45:19.209 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:45:19.209 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:45:19.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:45:19.218 [DEBUG] [Thread-138394] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:45:21.138 [DEBUG] [Thread-138396 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:45:22.247 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:45:25.442 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:45:30.519 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:45:35.905 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:45:36.187 [DEBUG] [Thread-138397 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:45:45.097 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:45:49.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T01:45:49.240 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T01:45:49.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T01:45:49.522 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:45:49.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 1, 45, 31), 3.77, 77.79, 0.0, 14.47, 13.64, 0, 0, 0, 2, 0, 0),)
2026-01-01T01:45:49.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 01:45:31
2026-01-01T01:45:50.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T01:45:50.221 [DEBUG] [Thread-138398] [transport.py] [_log()] starting thread (client mode): 0xb9578280
2026-01-01T01:45:50.221 [DEBUG] [Thread-138398] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:45:50.241 [DEBUG] [Thread-138398] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T01:45:50.241 [INFO] [Thread-138398] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T01:45:50.244 [DEBUG] [Thread-138398] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:45:50.244 [DEBUG] [Thread-138398] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T01:45:50.244 [DEBUG] [Thread-138398] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:45:50.244 [DEBUG] [Thread-138398] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:45:50.244 [DEBUG] [Thread-138398] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:45:50.244 [DEBUG] [Thread-138398] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:45:50.245 [DEBUG] [Thread-138398] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:45:50.245 [DEBUG] [Thread-138398] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:45:50.245 [DEBUG] [Thread-138398] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:45:50.245 [DEBUG] [Thread-138398] [transport.py] [_log()] client lang: <none>
2026-01-01T01:45:50.245 [DEBUG] [Thread-138398] [transport.py] [_log()] server lang: <none>
2026-01-01T01:45:50.245 [DEBUG] [Thread-138398] [transport.py] [_log()] kex follows: False
2026-01-01T01:45:50.245 [DEBUG] [Thread-138398] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:45:50.245 [DEBUG] [Thread-138398] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:45:50.245 [DEBUG] [Thread-138398] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:45:50.245 [DEBUG] [Thread-138398] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:45:50.245 [DEBUG] [Thread-138398] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:45:50.246 [DEBUG] [Thread-138398] [transport.py] [_log()] Compression: none
2026-01-01T01:45:50.246 [DEBUG] [Thread-138398] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:45:50.265 [DEBUG] [Thread-138398] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:45:50.266 [DEBUG] [Thread-138398] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:45:50.266 [DEBUG] [Thread-138398] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T01:45:50.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T01:45:50.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:45:50.269 [DEBUG] [Thread-138398] [transport.py] [_log()] userauth is OK
2026-01-01T01:45:50.270 [DEBUG] [Thread-138398] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:45:50.270 [DEBUG] [Thread-138398] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:45:50.270 [DEBUG] [Thread-138398] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T01:45:50.270 [DEBUG] [Thread-138398] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:45:50.292 [INFO] [Thread-138398] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:45:50.294 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:45:50.956 [DEBUG] [Thread-138398] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:45:50.956 [DEBUG] [Thread-138398] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:45:50.957 [DEBUG] [Thread-138398] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T01:45:50.998 [DEBUG] [Thread-138398] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:45:50.998 [DEBUG] [Thread-138398] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:45:51.001 [DEBUG] [Thread-138398] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:45:51.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:45:51.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T01:45:51.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T01:45:51.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T01:45:51.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:45:51.027 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T01:45:51.028 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:45:51.028 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:45:51.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T01:45:51.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.989716 -999.00  +13.80   8.97     80  +10.40 1 1 1 2 1     0    0 3.89 24.40 ZNESW 10.7 9.0 205.6 16.0 14.6 -21.2 14.5 -20.8 14.3 -19.3 14.5 -20.2
2026-01-01T01:45:51.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T01:45:51.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T01:45:51.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.989716
2026-01-01T01:45:51.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T01:45:51.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T01:45:51.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T01:45:51.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T01:45:51.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T01:45:51.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T01:45:31', tmtdew=3.77, humidity=77.79, cloud=0.0, wind=14.47, temperature=13.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T01:45:32', seeing=1.12, atlas_timestamp='2025-12-31T23:45:11.462', atlas_cloud=1, atlas_rain=1, zp_data=[0.003249999999999531, 0.0652500000000007, 0.04124999999999979, -0.0005000000000006111, 0.07499999999999929, 0.09425000000000061, 0.07099999999999973, 0.05424999999999969, 0.033500000000000085, 0.08900000000000041, 0.006249999999999645, 0.0649999999999995, 0.08499999999999908, 0.16724999999999923, 0.129999999999999, 0.08999999999999986, 0.06074999999999875, 0.18399999999999928, 0.036999999999999034, 0.1112499999999983, 0.07699999999999818, 0.1742499999999989, 0.17925000000000146, 0.18774999999999942, 0.0804999999999989, 0.1875, 0.20674999999999955, 0.2245000000000008, 0.19549999999999912, 0.15200000000000102, 0.18700000000000117, 0.16400000000000148, 0.16574999999999918], zp_timestamp='2025-12-31T23:45:00')
2026-01-01T01:45:51.030 [DEBUG] [Thread-138398] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:45:51.117 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T01:45:51.129 [DEBUG] [Thread-138401] [transport.py] [_log()] starting thread (client mode): 0xb6b14b80
2026-01-01T01:45:51.130 [DEBUG] [Thread-138401] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:45:51.145 [DEBUG] [Thread-138401] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T01:45:51.145 [INFO] [Thread-138401] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T01:45:51.152 [DEBUG] [Thread-138401] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:45:51.153 [DEBUG] [Thread-138401] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T01:45:51.153 [DEBUG] [Thread-138401] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:45:51.153 [DEBUG] [Thread-138401] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:45:51.153 [DEBUG] [Thread-138401] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:45:51.153 [DEBUG] [Thread-138401] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:45:51.153 [DEBUG] [Thread-138401] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:45:51.153 [DEBUG] [Thread-138401] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:45:51.153 [DEBUG] [Thread-138401] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:45:51.153 [DEBUG] [Thread-138401] [transport.py] [_log()] client lang: <none>
2026-01-01T01:45:51.153 [DEBUG] [Thread-138401] [transport.py] [_log()] server lang: <none>
2026-01-01T01:45:51.154 [DEBUG] [Thread-138401] [transport.py] [_log()] kex follows: False
2026-01-01T01:45:51.154 [DEBUG] [Thread-138401] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:45:51.154 [DEBUG] [Thread-138401] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:45:51.154 [DEBUG] [Thread-138401] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:45:51.154 [DEBUG] [Thread-138401] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:45:51.154 [DEBUG] [Thread-138401] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:45:51.154 [DEBUG] [Thread-138401] [transport.py] [_log()] Compression: none
2026-01-01T01:45:51.154 [DEBUG] [Thread-138401] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:45:51.213 [DEBUG] [Thread-138401] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:45:51.213 [DEBUG] [Thread-138401] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:45:51.214 [DEBUG] [Thread-138401] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T01:45:51.214 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T01:45:51.214 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:45:51.232 [DEBUG] [Thread-138403 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:45:51.268 [DEBUG] [Thread-138401] [transport.py] [_log()] userauth is OK
2026-01-01T01:45:51.268 [DEBUG] [Thread-138401] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:45:51.269 [DEBUG] [Thread-138401] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:45:51.269 [DEBUG] [Thread-138401] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T01:45:51.269 [DEBUG] [Thread-138401] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:45:51.292 [INFO] [Thread-138401] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:45:51.292 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T01:45:51.293 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:45:52.164 [DEBUG] [Thread-138401] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:45:52.165 [DEBUG] [Thread-138401] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:45:52.212 [DEBUG] [Thread-138401] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:45:52.212 [DEBUG] [Thread-138401] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:45:52.221 [DEBUG] [Thread-138401] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:45:52.230 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:45:52.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T01:45:52.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T01:45:52.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:45:52.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:45:52.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:45:52.260 [DEBUG] [Thread-138401] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:45:53.757 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:45:54.141 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:45:54.142 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:45:56.826 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:46:01.856 [DEBUG] [Thread-138404 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:46:06.280 [DEBUG] [Thread-138405 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:46:21.313 [DEBUG] [Thread-138406 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:46:22.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T01:46:22.279 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T01:46:22.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T01:46:22.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 1, 46, 4), 3.78, 77.75, 0.0, 13.48, 13.62, 0, 0, 0, 2, 0, 0),)
2026-01-01T01:46:22.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 01:46:04
2026-01-01T01:46:23.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T01:46:23.255 [DEBUG] [Thread-138407] [transport.py] [_log()] starting thread (client mode): 0xb6b16380
2026-01-01T01:46:23.256 [DEBUG] [Thread-138407] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:46:23.277 [DEBUG] [Thread-138407] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T01:46:23.277 [INFO] [Thread-138407] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T01:46:23.280 [DEBUG] [Thread-138407] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:46:23.280 [DEBUG] [Thread-138407] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T01:46:23.280 [DEBUG] [Thread-138407] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:46:23.280 [DEBUG] [Thread-138407] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:46:23.280 [DEBUG] [Thread-138407] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:46:23.280 [DEBUG] [Thread-138407] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:46:23.280 [DEBUG] [Thread-138407] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:46:23.281 [DEBUG] [Thread-138407] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:46:23.281 [DEBUG] [Thread-138407] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:46:23.281 [DEBUG] [Thread-138407] [transport.py] [_log()] client lang: <none>
2026-01-01T01:46:23.281 [DEBUG] [Thread-138407] [transport.py] [_log()] server lang: <none>
2026-01-01T01:46:23.281 [DEBUG] [Thread-138407] [transport.py] [_log()] kex follows: False
2026-01-01T01:46:23.281 [DEBUG] [Thread-138407] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:46:23.281 [DEBUG] [Thread-138407] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:46:23.281 [DEBUG] [Thread-138407] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:46:23.281 [DEBUG] [Thread-138407] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:46:23.281 [DEBUG] [Thread-138407] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:46:23.281 [DEBUG] [Thread-138407] [transport.py] [_log()] Compression: none
2026-01-01T01:46:23.281 [DEBUG] [Thread-138407] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:46:23.285 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:46:23.301 [DEBUG] [Thread-138407] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:46:23.302 [DEBUG] [Thread-138407] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:46:23.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T01:46:23.303 [DEBUG] [Thread-138407] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T01:46:23.303 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:46:23.306 [DEBUG] [Thread-138407] [transport.py] [_log()] userauth is OK
2026-01-01T01:46:23.306 [DEBUG] [Thread-138407] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:46:23.306 [DEBUG] [Thread-138407] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:46:23.306 [DEBUG] [Thread-138407] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T01:46:23.306 [DEBUG] [Thread-138407] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:46:23.331 [INFO] [Thread-138407] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:46:23.332 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:46:24.140 [DEBUG] [Thread-138407] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:46:24.140 [DEBUG] [Thread-138407] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:46:24.141 [DEBUG] [Thread-138407] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T01:46:24.181 [DEBUG] [Thread-138407] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:46:24.181 [DEBUG] [Thread-138407] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:46:24.185 [DEBUG] [Thread-138407] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:46:24.198 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:46:24.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T01:46:24.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T01:46:24.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T01:46:24.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:46:24.210 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T01:46:24.211 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:46:24.211 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:46:24.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T01:46:24.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.990063 -999.00  +13.80  10.54     80  +10.40 1 1 1 2 1     0    0 3.83 21.76 ZNESW 5.0 10.5 206.6 13.4 14.6 -21.3 14.5 -20.8 14.3 -19.4 14.6 -20.3
2026-01-01T01:46:24.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T01:46:24.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T01:46:24.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.990063
2026-01-01T01:46:24.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T01:46:24.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T01:46:24.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T01:46:24.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T01:46:24.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T01:46:24.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T01:46:04', tmtdew=3.78, humidity=77.75, cloud=0.0, wind=13.48, temperature=13.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T01:46:04', seeing=1.12, atlas_timestamp='2025-12-31T23:45:41.443', atlas_cloud=1, atlas_rain=1, zp_data=[0.003249999999999531, 0.0652500000000007, 0.04124999999999979, -0.0005000000000006111, 0.07499999999999929, 0.09425000000000061, 0.07099999999999973, 0.05424999999999969, 0.033500000000000085, 0.08900000000000041, 0.006249999999999645, 0.0649999999999995, 0.08499999999999908, 0.16724999999999923, 0.129999999999999, 0.08999999999999986, 0.06074999999999875, 0.18399999999999928, 0.036999999999999034, 0.1112499999999983, 0.07699999999999818, 0.1742499999999989, 0.17925000000000146, 0.18774999999999942, 0.0804999999999989, 0.1875, 0.20674999999999955, 0.2245000000000008, 0.19549999999999912, 0.15200000000000102, 0.18700000000000117, 0.16400000000000148, 0.16574999999999918], zp_timestamp='2025-12-31T23:45:00')
2026-01-01T01:46:24.213 [DEBUG] [Thread-138407] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:46:24.297 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T01:46:24.308 [DEBUG] [Thread-138410] [transport.py] [_log()] starting thread (client mode): 0xb1797f10
2026-01-01T01:46:24.309 [DEBUG] [Thread-138410] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:46:24.324 [DEBUG] [Thread-138410] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T01:46:24.324 [INFO] [Thread-138410] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T01:46:24.331 [DEBUG] [Thread-138410] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:46:24.332 [DEBUG] [Thread-138410] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T01:46:24.332 [DEBUG] [Thread-138410] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:46:24.332 [DEBUG] [Thread-138410] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:46:24.332 [DEBUG] [Thread-138410] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:46:24.332 [DEBUG] [Thread-138410] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:46:24.332 [DEBUG] [Thread-138410] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:46:24.332 [DEBUG] [Thread-138410] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:46:24.332 [DEBUG] [Thread-138410] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:46:24.332 [DEBUG] [Thread-138410] [transport.py] [_log()] client lang: <none>
2026-01-01T01:46:24.332 [DEBUG] [Thread-138410] [transport.py] [_log()] server lang: <none>
2026-01-01T01:46:24.332 [DEBUG] [Thread-138410] [transport.py] [_log()] kex follows: False
2026-01-01T01:46:24.332 [DEBUG] [Thread-138410] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:46:24.332 [DEBUG] [Thread-138410] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:46:24.332 [DEBUG] [Thread-138410] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:46:24.332 [DEBUG] [Thread-138410] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:46:24.332 [DEBUG] [Thread-138410] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:46:24.333 [DEBUG] [Thread-138410] [transport.py] [_log()] Compression: none
2026-01-01T01:46:24.333 [DEBUG] [Thread-138410] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:46:24.393 [DEBUG] [Thread-138410] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:46:24.393 [DEBUG] [Thread-138410] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:46:24.394 [DEBUG] [Thread-138410] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T01:46:24.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T01:46:24.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:46:24.452 [DEBUG] [Thread-138410] [transport.py] [_log()] userauth is OK
2026-01-01T01:46:24.452 [DEBUG] [Thread-138410] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:46:24.453 [DEBUG] [Thread-138410] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:46:24.453 [DEBUG] [Thread-138410] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T01:46:24.453 [DEBUG] [Thread-138410] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:46:24.471 [INFO] [Thread-138410] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:46:24.472 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T01:46:24.472 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:46:25.323 [DEBUG] [Thread-138410] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:46:25.324 [DEBUG] [Thread-138410] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:46:25.371 [DEBUG] [Thread-138410] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:46:25.371 [DEBUG] [Thread-138410] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:46:25.380 [DEBUG] [Thread-138410] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:46:25.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:46:25.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T01:46:25.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T01:46:25.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:46:25.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:46:25.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:46:25.414 [DEBUG] [Thread-138410] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:46:28.086 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:46:31.147 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:46:36.348 [DEBUG] [Thread-138412 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:46:37.559 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:46:51.388 [DEBUG] [Thread-138413 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:46:54.345 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:46:54.346 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:46:55.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T01:46:55.430 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T01:46:55.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T01:46:56.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 1, 46, 36), 3.77, 77.77, 0.0, 13.87, 13.62, 0, 0, 0, 2, 0, 0),)
2026-01-01T01:46:56.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 01:46:36
2026-01-01T01:46:56.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T01:46:56.402 [DEBUG] [Thread-138414] [transport.py] [_log()] starting thread (client mode): 0xb17954b0
2026-01-01T01:46:56.402 [DEBUG] [Thread-138414] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:46:56.422 [DEBUG] [Thread-138414] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T01:46:56.422 [INFO] [Thread-138414] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T01:46:56.426 [DEBUG] [Thread-138414] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:46:56.426 [DEBUG] [Thread-138414] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T01:46:56.426 [DEBUG] [Thread-138414] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:46:56.426 [DEBUG] [Thread-138414] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:46:56.426 [DEBUG] [Thread-138414] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:46:56.426 [DEBUG] [Thread-138414] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:46:56.426 [DEBUG] [Thread-138414] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:46:56.426 [DEBUG] [Thread-138414] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:46:56.426 [DEBUG] [Thread-138414] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:46:56.426 [DEBUG] [Thread-138414] [transport.py] [_log()] client lang: <none>
2026-01-01T01:46:56.426 [DEBUG] [Thread-138414] [transport.py] [_log()] server lang: <none>
2026-01-01T01:46:56.426 [DEBUG] [Thread-138414] [transport.py] [_log()] kex follows: False
2026-01-01T01:46:56.426 [DEBUG] [Thread-138414] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:46:56.426 [DEBUG] [Thread-138414] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:46:56.426 [DEBUG] [Thread-138414] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:46:56.426 [DEBUG] [Thread-138414] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:46:56.426 [DEBUG] [Thread-138414] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:46:56.426 [DEBUG] [Thread-138414] [transport.py] [_log()] Compression: none
2026-01-01T01:46:56.426 [DEBUG] [Thread-138414] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:46:56.440 [DEBUG] [Thread-138414] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:46:56.441 [DEBUG] [Thread-138414] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:46:56.441 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T01:46:56.441 [DEBUG] [Thread-138414] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T01:46:56.442 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:46:56.443 [DEBUG] [Thread-138414] [transport.py] [_log()] userauth is OK
2026-01-01T01:46:56.444 [DEBUG] [Thread-138414] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:46:56.444 [DEBUG] [Thread-138414] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:46:56.444 [DEBUG] [Thread-138414] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T01:46:56.444 [DEBUG] [Thread-138414] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:46:56.458 [INFO] [Thread-138414] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:46:56.458 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:46:57.116 [DEBUG] [Thread-138414] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:46:57.116 [DEBUG] [Thread-138414] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:46:57.117 [DEBUG] [Thread-138414] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T01:46:57.158 [DEBUG] [Thread-138414] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:46:57.158 [DEBUG] [Thread-138414] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:46:57.162 [DEBUG] [Thread-138414] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:46:57.174 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:46:57.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T01:46:57.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T01:46:57.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T01:46:57.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:46:57.186 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T01:46:57.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:46:57.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:46:57.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T01:46:57.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.990410 -999.00  +13.80   8.70     80  +10.50 1 1 1 2 1     0    0 3.83 22.85 ZNESW 7.7 8.7 201.9 12.9 14.6 -21.4 14.5 -20.7 14.2 -19.4 14.6 -20.4
2026-01-01T01:46:57.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T01:46:57.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T01:46:57.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.990410
2026-01-01T01:46:57.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T01:46:57.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T01:46:57.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T01:46:57.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T01:46:57.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T01:46:57.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T01:46:36', tmtdew=3.77, humidity=77.77, cloud=0.0, wind=13.87, temperature=13.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T01:46:36', seeing=1.07, atlas_timestamp='2025-12-31T23:46:11.424', atlas_cloud=1, atlas_rain=1, zp_data=[0.003249999999999531, 0.0652500000000007, 0.04124999999999979, -0.0005000000000006111, 0.07499999999999929, 0.09425000000000061, 0.07099999999999973, 0.05424999999999969, 0.033500000000000085, 0.08900000000000041, 0.006249999999999645, 0.0649999999999995, 0.08499999999999908, 0.16724999999999923, 0.129999999999999, 0.08999999999999986, 0.06074999999999875, 0.18399999999999928, 0.036999999999999034, 0.1112499999999983, 0.07699999999999818, 0.1742499999999989, 0.17925000000000146, 0.18774999999999942, 0.0804999999999989, 0.1875, 0.20674999999999955, 0.2245000000000008, 0.19549999999999912, 0.15200000000000102, 0.18700000000000117, 0.16400000000000148, 0.16574999999999918], zp_timestamp='2025-12-31T23:45:00')
2026-01-01T01:46:57.189 [DEBUG] [Thread-138414] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:46:57.273 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T01:46:57.285 [DEBUG] [Thread-138417] [transport.py] [_log()] starting thread (client mode): 0xb1795660
2026-01-01T01:46:57.285 [DEBUG] [Thread-138417] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:46:57.301 [DEBUG] [Thread-138417] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T01:46:57.301 [INFO] [Thread-138417] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T01:46:57.309 [DEBUG] [Thread-138417] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:46:57.309 [DEBUG] [Thread-138417] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T01:46:57.309 [DEBUG] [Thread-138417] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:46:57.309 [DEBUG] [Thread-138417] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:46:57.309 [DEBUG] [Thread-138417] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:46:57.309 [DEBUG] [Thread-138417] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:46:57.309 [DEBUG] [Thread-138417] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:46:57.309 [DEBUG] [Thread-138417] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:46:57.309 [DEBUG] [Thread-138417] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:46:57.309 [DEBUG] [Thread-138417] [transport.py] [_log()] client lang: <none>
2026-01-01T01:46:57.309 [DEBUG] [Thread-138417] [transport.py] [_log()] server lang: <none>
2026-01-01T01:46:57.309 [DEBUG] [Thread-138417] [transport.py] [_log()] kex follows: False
2026-01-01T01:46:57.309 [DEBUG] [Thread-138417] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:46:57.310 [DEBUG] [Thread-138417] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:46:57.310 [DEBUG] [Thread-138417] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:46:57.310 [DEBUG] [Thread-138417] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:46:57.310 [DEBUG] [Thread-138417] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:46:57.310 [DEBUG] [Thread-138417] [transport.py] [_log()] Compression: none
2026-01-01T01:46:57.310 [DEBUG] [Thread-138417] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:46:57.369 [DEBUG] [Thread-138417] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:46:57.370 [DEBUG] [Thread-138417] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:46:57.370 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T01:46:57.371 [DEBUG] [Thread-138417] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T01:46:57.372 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:46:57.425 [DEBUG] [Thread-138417] [transport.py] [_log()] userauth is OK
2026-01-01T01:46:57.425 [DEBUG] [Thread-138417] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:46:57.426 [DEBUG] [Thread-138417] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:46:57.426 [DEBUG] [Thread-138417] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T01:46:57.426 [DEBUG] [Thread-138417] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:46:57.444 [INFO] [Thread-138417] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:46:57.445 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T01:46:57.445 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:46:58.267 [DEBUG] [Thread-138417] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:46:58.267 [DEBUG] [Thread-138417] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:46:58.315 [DEBUG] [Thread-138417] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:46:58.315 [DEBUG] [Thread-138417] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:46:58.325 [DEBUG] [Thread-138417] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:46:58.334 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:46:58.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T01:46:58.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T01:46:58.352 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:46:58.353 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:46:58.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:46:58.361 [DEBUG] [Thread-138417] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:47:01.930 [DEBUG] [Thread-138419 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:47:06.429 [DEBUG] [Thread-138420 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:47:21.477 [DEBUG] [Thread-138421 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:47:28.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T01:47:28.384 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T01:47:28.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T01:47:29.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 1, 47, 8), 3.78, 77.72, 0.0, 13.41, 13.59, 0, 0, 0, 2, 0, 0),)
2026-01-01T01:47:29.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 01:47:08
2026-01-01T01:47:29.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T01:47:29.374 [DEBUG] [Thread-138422] [transport.py] [_log()] starting thread (client mode): 0xb6b17430
2026-01-01T01:47:29.374 [DEBUG] [Thread-138422] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:47:29.393 [DEBUG] [Thread-138422] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T01:47:29.394 [INFO] [Thread-138422] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T01:47:29.397 [DEBUG] [Thread-138422] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:47:29.397 [DEBUG] [Thread-138422] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T01:47:29.397 [DEBUG] [Thread-138422] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:47:29.397 [DEBUG] [Thread-138422] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:47:29.397 [DEBUG] [Thread-138422] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:47:29.397 [DEBUG] [Thread-138422] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:47:29.397 [DEBUG] [Thread-138422] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:47:29.397 [DEBUG] [Thread-138422] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:47:29.397 [DEBUG] [Thread-138422] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:47:29.397 [DEBUG] [Thread-138422] [transport.py] [_log()] client lang: <none>
2026-01-01T01:47:29.397 [DEBUG] [Thread-138422] [transport.py] [_log()] server lang: <none>
2026-01-01T01:47:29.397 [DEBUG] [Thread-138422] [transport.py] [_log()] kex follows: False
2026-01-01T01:47:29.397 [DEBUG] [Thread-138422] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:47:29.397 [DEBUG] [Thread-138422] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:47:29.397 [DEBUG] [Thread-138422] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:47:29.397 [DEBUG] [Thread-138422] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:47:29.397 [DEBUG] [Thread-138422] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:47:29.397 [DEBUG] [Thread-138422] [transport.py] [_log()] Compression: none
2026-01-01T01:47:29.397 [DEBUG] [Thread-138422] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:47:29.411 [DEBUG] [Thread-138422] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:47:29.412 [DEBUG] [Thread-138422] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:47:29.412 [DEBUG] [Thread-138422] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T01:47:29.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T01:47:29.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:47:29.412 [DEBUG] [Thread-138422] [transport.py] [_log()] userauth is OK
2026-01-01T01:47:29.412 [DEBUG] [Thread-138422] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:47:29.412 [DEBUG] [Thread-138422] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:47:29.412 [DEBUG] [Thread-138422] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T01:47:29.412 [DEBUG] [Thread-138422] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:47:29.421 [INFO] [Thread-138422] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:47:29.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:47:30.071 [DEBUG] [Thread-138422] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:47:30.071 [DEBUG] [Thread-138422] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:47:30.071 [DEBUG] [Thread-138422] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T01:47:30.112 [DEBUG] [Thread-138422] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:47:30.113 [DEBUG] [Thread-138422] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:47:30.116 [DEBUG] [Thread-138422] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:47:30.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:47:30.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T01:47:30.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T01:47:30.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T01:47:30.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:47:30.141 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T01:47:30.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:47:30.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:47:30.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T01:47:30.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.991105 -999.00  +13.80   8.01     80  +10.40 1 1 1 2 1     0    0 3.82 21.81 ZNESW 9.4 8.0 206.4 13.0 14.6 -21.3 14.5 -20.8 14.2 -19.4 14.5 -20.3
2026-01-01T01:47:30.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T01:47:30.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T01:47:30.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.991105
2026-01-01T01:47:30.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T01:47:30.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T01:47:30.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T01:47:30.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T01:47:30.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T01:47:30.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T01:47:08', tmtdew=3.78, humidity=77.72, cloud=0.0, wind=13.41, temperature=13.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T01:47:08', seeing=1.01, atlas_timestamp='2025-12-31T23:47:11.472', atlas_cloud=1, atlas_rain=1, zp_data=[0.003249999999999531, 0.0652500000000007, 0.04124999999999979, -0.0005000000000006111, 0.07499999999999929, 0.09425000000000061, 0.07099999999999973, 0.05424999999999969, 0.033500000000000085, 0.08900000000000041, 0.006249999999999645, 0.0649999999999995, 0.08499999999999908, 0.16724999999999923, 0.129999999999999, 0.08999999999999986, 0.06074999999999875, 0.18399999999999928, 0.036999999999999034, 0.1112499999999983, 0.07699999999999818, 0.1742499999999989, 0.17925000000000146, 0.18774999999999942, 0.0804999999999989, 0.1875, 0.20674999999999955, 0.2245000000000008, 0.19549999999999912, 0.15200000000000102, 0.18700000000000117, 0.16400000000000148, 0.16574999999999918], zp_timestamp='2025-12-31T23:45:00')
2026-01-01T01:47:30.144 [DEBUG] [Thread-138422] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:47:30.227 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T01:47:30.238 [DEBUG] [Thread-138425] [transport.py] [_log()] starting thread (client mode): 0xb6b14310
2026-01-01T01:47:30.239 [DEBUG] [Thread-138425] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:47:30.254 [DEBUG] [Thread-138425] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T01:47:30.254 [INFO] [Thread-138425] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T01:47:30.261 [DEBUG] [Thread-138425] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:47:30.261 [DEBUG] [Thread-138425] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T01:47:30.262 [DEBUG] [Thread-138425] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:47:30.262 [DEBUG] [Thread-138425] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:47:30.262 [DEBUG] [Thread-138425] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:47:30.262 [DEBUG] [Thread-138425] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:47:30.262 [DEBUG] [Thread-138425] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:47:30.262 [DEBUG] [Thread-138425] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:47:30.262 [DEBUG] [Thread-138425] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:47:30.262 [DEBUG] [Thread-138425] [transport.py] [_log()] client lang: <none>
2026-01-01T01:47:30.262 [DEBUG] [Thread-138425] [transport.py] [_log()] server lang: <none>
2026-01-01T01:47:30.262 [DEBUG] [Thread-138425] [transport.py] [_log()] kex follows: False
2026-01-01T01:47:30.262 [DEBUG] [Thread-138425] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:47:30.262 [DEBUG] [Thread-138425] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:47:30.262 [DEBUG] [Thread-138425] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:47:30.263 [DEBUG] [Thread-138425] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:47:30.263 [DEBUG] [Thread-138425] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:47:30.263 [DEBUG] [Thread-138425] [transport.py] [_log()] Compression: none
2026-01-01T01:47:30.263 [DEBUG] [Thread-138425] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:47:30.322 [DEBUG] [Thread-138425] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:47:30.322 [DEBUG] [Thread-138425] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:47:30.323 [DEBUG] [Thread-138425] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T01:47:30.323 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T01:47:30.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:47:30.377 [DEBUG] [Thread-138425] [transport.py] [_log()] userauth is OK
2026-01-01T01:47:30.377 [DEBUG] [Thread-138425] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:47:30.378 [DEBUG] [Thread-138425] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:47:30.378 [DEBUG] [Thread-138425] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T01:47:30.378 [DEBUG] [Thread-138425] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:47:30.396 [INFO] [Thread-138425] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:47:30.397 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T01:47:30.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:47:31.235 [DEBUG] [Thread-138425] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:47:31.235 [DEBUG] [Thread-138425] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:47:31.283 [DEBUG] [Thread-138425] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:47:31.283 [DEBUG] [Thread-138425] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:47:31.292 [DEBUG] [Thread-138425] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:47:31.301 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:47:31.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T01:47:31.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T01:47:31.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:47:31.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:47:31.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:47:31.329 [DEBUG] [Thread-138425] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:47:36.506 [DEBUG] [Thread-138427 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:47:51.559 [DEBUG] [Thread-138428 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:47:54.569 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:47:54.570 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:48:01.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T01:48:01.351 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T01:48:01.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T01:48:02.002 [DEBUG] [Thread-138429 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:48:02.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 1, 47, 40), 3.78, 77.74, 0.0, 15.6, 13.59, 0, 0, 0, 2, 0, 0),)
2026-01-01T01:48:02.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 01:47:40
2026-01-01T01:48:02.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T01:48:02.373 [DEBUG] [Thread-138430] [transport.py] [_log()] starting thread (client mode): 0xb6b17130
2026-01-01T01:48:02.373 [DEBUG] [Thread-138430] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:48:02.394 [DEBUG] [Thread-138430] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T01:48:02.394 [INFO] [Thread-138430] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T01:48:02.398 [DEBUG] [Thread-138430] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:48:02.398 [DEBUG] [Thread-138430] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T01:48:02.398 [DEBUG] [Thread-138430] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:48:02.398 [DEBUG] [Thread-138430] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:48:02.398 [DEBUG] [Thread-138430] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:48:02.398 [DEBUG] [Thread-138430] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:48:02.398 [DEBUG] [Thread-138430] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:48:02.398 [DEBUG] [Thread-138430] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:48:02.398 [DEBUG] [Thread-138430] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:48:02.398 [DEBUG] [Thread-138430] [transport.py] [_log()] client lang: <none>
2026-01-01T01:48:02.398 [DEBUG] [Thread-138430] [transport.py] [_log()] server lang: <none>
2026-01-01T01:48:02.398 [DEBUG] [Thread-138430] [transport.py] [_log()] kex follows: False
2026-01-01T01:48:02.398 [DEBUG] [Thread-138430] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:48:02.398 [DEBUG] [Thread-138430] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:48:02.398 [DEBUG] [Thread-138430] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:48:02.398 [DEBUG] [Thread-138430] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:48:02.398 [DEBUG] [Thread-138430] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:48:02.398 [DEBUG] [Thread-138430] [transport.py] [_log()] Compression: none
2026-01-01T01:48:02.398 [DEBUG] [Thread-138430] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:48:02.413 [DEBUG] [Thread-138430] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:48:02.413 [DEBUG] [Thread-138430] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:48:02.413 [DEBUG] [Thread-138430] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T01:48:02.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T01:48:02.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:48:02.414 [DEBUG] [Thread-138430] [transport.py] [_log()] userauth is OK
2026-01-01T01:48:02.414 [DEBUG] [Thread-138430] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:48:02.414 [DEBUG] [Thread-138430] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:48:02.414 [DEBUG] [Thread-138430] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T01:48:02.414 [DEBUG] [Thread-138430] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:48:02.423 [INFO] [Thread-138430] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:48:02.423 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:48:03.101 [DEBUG] [Thread-138430] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:48:03.101 [DEBUG] [Thread-138430] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:48:03.101 [DEBUG] [Thread-138430] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T01:48:03.143 [DEBUG] [Thread-138430] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:48:03.143 [DEBUG] [Thread-138430] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:48:03.146 [DEBUG] [Thread-138430] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:48:03.157 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:48:03.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T01:48:03.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T01:48:03.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T01:48:03.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:48:03.167 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T01:48:03.167 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:48:03.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:48:03.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T01:48:03.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.991452 -999.00  +13.80   7.32     80  +10.40 1 1 1 2 1     0    0 3.84 21.82 ZNESW 4.2 7.3 198.6 10.5 14.6 -21.3 14.4 -20.7 14.2 -19.5 14.5 -20.3
2026-01-01T01:48:03.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T01:48:03.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T01:48:03.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.991452
2026-01-01T01:48:03.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T01:48:03.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T01:48:03.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T01:48:03.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T01:48:03.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T01:48:03.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T01:47:40', tmtdew=3.78, humidity=77.74, cloud=0.0, wind=15.6, temperature=13.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T01:47:40', seeing=1.2, atlas_timestamp='2025-12-31T23:47:41.453', atlas_cloud=1, atlas_rain=1, zp_data=[0.003249999999999531, 0.0652500000000007, 0.04124999999999979, -0.0005000000000006111, 0.07499999999999929, 0.09425000000000061, 0.07099999999999973, 0.05424999999999969, 0.033500000000000085, 0.08900000000000041, 0.006249999999999645, 0.0649999999999995, 0.08499999999999908, 0.16724999999999923, 0.129999999999999, 0.08999999999999986, 0.06074999999999875, 0.18399999999999928, 0.036999999999999034, 0.1112499999999983, 0.07699999999999818, 0.1742499999999989, 0.17925000000000146, 0.18774999999999942, 0.0804999999999989, 0.1875, 0.20674999999999955, 0.2245000000000008, 0.19549999999999912, 0.15200000000000102, 0.18700000000000117, 0.16400000000000148, 0.16574999999999918], zp_timestamp='2025-12-31T23:45:00')
2026-01-01T01:48:03.169 [DEBUG] [Thread-138430] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:48:03.241 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T01:48:03.256 [DEBUG] [Thread-138433] [transport.py] [_log()] starting thread (client mode): 0xb6b14eb0
2026-01-01T01:48:03.256 [DEBUG] [Thread-138433] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:48:03.270 [DEBUG] [Thread-138433] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T01:48:03.270 [INFO] [Thread-138433] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T01:48:03.278 [DEBUG] [Thread-138433] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:48:03.278 [DEBUG] [Thread-138433] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T01:48:03.278 [DEBUG] [Thread-138433] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:48:03.278 [DEBUG] [Thread-138433] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:48:03.278 [DEBUG] [Thread-138433] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:48:03.278 [DEBUG] [Thread-138433] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:48:03.278 [DEBUG] [Thread-138433] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:48:03.278 [DEBUG] [Thread-138433] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:48:03.278 [DEBUG] [Thread-138433] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:48:03.278 [DEBUG] [Thread-138433] [transport.py] [_log()] client lang: <none>
2026-01-01T01:48:03.278 [DEBUG] [Thread-138433] [transport.py] [_log()] server lang: <none>
2026-01-01T01:48:03.278 [DEBUG] [Thread-138433] [transport.py] [_log()] kex follows: False
2026-01-01T01:48:03.278 [DEBUG] [Thread-138433] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:48:03.279 [DEBUG] [Thread-138433] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:48:03.279 [DEBUG] [Thread-138433] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:48:03.279 [DEBUG] [Thread-138433] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:48:03.279 [DEBUG] [Thread-138433] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:48:03.279 [DEBUG] [Thread-138433] [transport.py] [_log()] Compression: none
2026-01-01T01:48:03.279 [DEBUG] [Thread-138433] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:48:03.342 [DEBUG] [Thread-138433] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:48:03.342 [DEBUG] [Thread-138433] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:48:03.342 [DEBUG] [Thread-138433] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T01:48:03.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T01:48:03.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:48:03.397 [DEBUG] [Thread-138433] [transport.py] [_log()] userauth is OK
2026-01-01T01:48:03.397 [DEBUG] [Thread-138433] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:48:03.397 [DEBUG] [Thread-138433] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:48:03.397 [DEBUG] [Thread-138433] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T01:48:03.397 [DEBUG] [Thread-138433] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:48:03.411 [INFO] [Thread-138433] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:48:03.411 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T01:48:03.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:48:04.214 [DEBUG] [Thread-138433] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:48:04.214 [DEBUG] [Thread-138433] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:48:04.264 [DEBUG] [Thread-138433] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:48:04.264 [DEBUG] [Thread-138433] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:48:04.273 [DEBUG] [Thread-138433] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:48:04.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:48:04.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T01:48:04.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T01:48:04.300 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:48:04.301 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:48:04.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:48:04.309 [DEBUG] [Thread-138433] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:48:06.591 [DEBUG] [Thread-138435 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:48:21.645 [DEBUG] [Thread-138436 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:48:34.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T01:48:34.329 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T01:48:34.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T01:48:35.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 1, 48, 12), 3.74, 77.95, 0.0, 15.46, 13.61, 0, 0, 0, 2, 0, 0),)
2026-01-01T01:48:35.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 01:48:12
2026-01-01T01:48:35.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T01:48:35.330 [DEBUG] [Thread-138437] [transport.py] [_log()] starting thread (client mode): 0xb95b2770
2026-01-01T01:48:35.330 [DEBUG] [Thread-138437] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:48:35.352 [DEBUG] [Thread-138437] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T01:48:35.352 [INFO] [Thread-138437] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T01:48:35.354 [DEBUG] [Thread-138437] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:48:35.354 [DEBUG] [Thread-138437] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T01:48:35.354 [DEBUG] [Thread-138437] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:48:35.354 [DEBUG] [Thread-138437] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:48:35.354 [DEBUG] [Thread-138437] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:48:35.354 [DEBUG] [Thread-138437] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:48:35.354 [DEBUG] [Thread-138437] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:48:35.354 [DEBUG] [Thread-138437] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:48:35.354 [DEBUG] [Thread-138437] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:48:35.354 [DEBUG] [Thread-138437] [transport.py] [_log()] client lang: <none>
2026-01-01T01:48:35.354 [DEBUG] [Thread-138437] [transport.py] [_log()] server lang: <none>
2026-01-01T01:48:35.354 [DEBUG] [Thread-138437] [transport.py] [_log()] kex follows: False
2026-01-01T01:48:35.354 [DEBUG] [Thread-138437] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:48:35.354 [DEBUG] [Thread-138437] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:48:35.354 [DEBUG] [Thread-138437] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:48:35.354 [DEBUG] [Thread-138437] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:48:35.354 [DEBUG] [Thread-138437] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:48:35.354 [DEBUG] [Thread-138437] [transport.py] [_log()] Compression: none
2026-01-01T01:48:35.354 [DEBUG] [Thread-138437] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:48:35.372 [DEBUG] [Thread-138437] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:48:35.372 [DEBUG] [Thread-138437] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:48:35.373 [DEBUG] [Thread-138437] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T01:48:35.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T01:48:35.374 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:48:35.375 [DEBUG] [Thread-138437] [transport.py] [_log()] userauth is OK
2026-01-01T01:48:35.375 [DEBUG] [Thread-138437] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:48:35.375 [DEBUG] [Thread-138437] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:48:35.375 [DEBUG] [Thread-138437] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T01:48:35.375 [DEBUG] [Thread-138437] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:48:35.400 [INFO] [Thread-138437] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:48:35.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:48:36.002 [DEBUG] [Thread-138437] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:48:36.002 [DEBUG] [Thread-138437] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:48:36.003 [DEBUG] [Thread-138437] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T01:48:36.045 [DEBUG] [Thread-138437] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:48:36.045 [DEBUG] [Thread-138437] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:48:36.048 [DEBUG] [Thread-138437] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:48:36.060 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:48:36.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T01:48:36.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T01:48:36.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T01:48:36.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:48:36.072 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T01:48:36.072 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:48:36.072 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:48:36.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T01:48:36.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.991799 -999.00  +13.80   7.88     80  +10.40 1 1 1 2 1     0    0 3.85 20.65 ZNESW 5.9 7.9 212.0 12.1 14.6 -21.3 14.4 -20.8 14.2 -19.3 14.5 -20.3
2026-01-01T01:48:36.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T01:48:36.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T01:48:36.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.991799
2026-01-01T01:48:36.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T01:48:36.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T01:48:36.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T01:48:36.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T01:48:36.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T01:48:36.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T01:48:12', tmtdew=3.74, humidity=77.95, cloud=0.0, wind=15.46, temperature=13.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T01:48:12', seeing=1.2, atlas_timestamp='2025-12-31T23:48:11.434', atlas_cloud=1, atlas_rain=1, zp_data=[0.003249999999999531, 0.0652500000000007, 0.04124999999999979, -0.0005000000000006111, 0.07499999999999929, 0.09425000000000061, 0.07099999999999973, 0.05424999999999969, 0.033500000000000085, 0.08900000000000041, 0.006249999999999645, 0.0649999999999995, 0.08499999999999908, 0.16724999999999923, 0.129999999999999, 0.08999999999999986, 0.06074999999999875, 0.18399999999999928, 0.036999999999999034, 0.1112499999999983, 0.07699999999999818, 0.1742499999999989, 0.17925000000000146, 0.18774999999999942, 0.0804999999999989, 0.1875, 0.20674999999999955, 0.2245000000000008, 0.19549999999999912, 0.15200000000000102, 0.18700000000000117, 0.16400000000000148, 0.16574999999999918], zp_timestamp='2025-12-31T23:45:00')
2026-01-01T01:48:36.075 [DEBUG] [Thread-138437] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:48:36.171 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T01:48:36.182 [DEBUG] [Thread-138440] [transport.py] [_log()] starting thread (client mode): 0xb95f2620
2026-01-01T01:48:36.182 [DEBUG] [Thread-138440] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:48:36.198 [DEBUG] [Thread-138440] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T01:48:36.198 [INFO] [Thread-138440] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T01:48:36.205 [DEBUG] [Thread-138440] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:48:36.206 [DEBUG] [Thread-138440] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T01:48:36.206 [DEBUG] [Thread-138440] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:48:36.206 [DEBUG] [Thread-138440] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:48:36.206 [DEBUG] [Thread-138440] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:48:36.206 [DEBUG] [Thread-138440] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:48:36.206 [DEBUG] [Thread-138440] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:48:36.206 [DEBUG] [Thread-138440] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:48:36.206 [DEBUG] [Thread-138440] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:48:36.206 [DEBUG] [Thread-138440] [transport.py] [_log()] client lang: <none>
2026-01-01T01:48:36.206 [DEBUG] [Thread-138440] [transport.py] [_log()] server lang: <none>
2026-01-01T01:48:36.207 [DEBUG] [Thread-138440] [transport.py] [_log()] kex follows: False
2026-01-01T01:48:36.207 [DEBUG] [Thread-138440] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:48:36.207 [DEBUG] [Thread-138440] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:48:36.207 [DEBUG] [Thread-138440] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:48:36.207 [DEBUG] [Thread-138440] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:48:36.207 [DEBUG] [Thread-138440] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:48:36.207 [DEBUG] [Thread-138440] [transport.py] [_log()] Compression: none
2026-01-01T01:48:36.207 [DEBUG] [Thread-138440] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:48:36.265 [DEBUG] [Thread-138440] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:48:36.266 [DEBUG] [Thread-138440] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:48:36.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T01:48:36.267 [DEBUG] [Thread-138440] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T01:48:36.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:48:36.322 [DEBUG] [Thread-138440] [transport.py] [_log()] userauth is OK
2026-01-01T01:48:36.322 [DEBUG] [Thread-138440] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:48:36.322 [DEBUG] [Thread-138440] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:48:36.322 [DEBUG] [Thread-138440] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T01:48:36.322 [DEBUG] [Thread-138440] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:48:36.349 [INFO] [Thread-138440] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:48:36.349 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T01:48:36.350 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:48:36.680 [DEBUG] [Thread-138442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:48:37.169 [DEBUG] [Thread-138440] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:48:37.169 [DEBUG] [Thread-138440] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:48:37.217 [DEBUG] [Thread-138440] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:48:37.218 [DEBUG] [Thread-138440] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:48:37.228 [DEBUG] [Thread-138440] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:48:37.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:48:37.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T01:48:37.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T01:48:37.256 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:48:37.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:48:37.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:48:37.265 [DEBUG] [Thread-138440] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:48:51.728 [DEBUG] [Thread-138443 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:48:54.771 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:48:54.772 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:49:02.073 [DEBUG] [Thread-138444 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:49:06.765 [DEBUG] [Thread-138445 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:49:07.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T01:49:07.285 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T01:49:07.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T01:49:07.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 1, 48, 44), 3.78, 77.75, 0.0, 15.95, 13.54, 0, 0, 0, 2, 0, 0),)
2026-01-01T01:49:07.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 01:48:44
2026-01-01T01:49:08.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T01:49:08.272 [DEBUG] [Thread-138446] [transport.py] [_log()] starting thread (client mode): 0xb6b15c60
2026-01-01T01:49:08.272 [DEBUG] [Thread-138446] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:49:08.293 [DEBUG] [Thread-138446] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T01:49:08.293 [INFO] [Thread-138446] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T01:49:08.296 [DEBUG] [Thread-138446] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:49:08.296 [DEBUG] [Thread-138446] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T01:49:08.296 [DEBUG] [Thread-138446] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:49:08.296 [DEBUG] [Thread-138446] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:49:08.296 [DEBUG] [Thread-138446] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:49:08.296 [DEBUG] [Thread-138446] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:49:08.296 [DEBUG] [Thread-138446] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:49:08.296 [DEBUG] [Thread-138446] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:49:08.297 [DEBUG] [Thread-138446] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:49:08.297 [DEBUG] [Thread-138446] [transport.py] [_log()] client lang: <none>
2026-01-01T01:49:08.297 [DEBUG] [Thread-138446] [transport.py] [_log()] server lang: <none>
2026-01-01T01:49:08.297 [DEBUG] [Thread-138446] [transport.py] [_log()] kex follows: False
2026-01-01T01:49:08.297 [DEBUG] [Thread-138446] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:49:08.297 [DEBUG] [Thread-138446] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:49:08.297 [DEBUG] [Thread-138446] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:49:08.297 [DEBUG] [Thread-138446] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:49:08.297 [DEBUG] [Thread-138446] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:49:08.297 [DEBUG] [Thread-138446] [transport.py] [_log()] Compression: none
2026-01-01T01:49:08.297 [DEBUG] [Thread-138446] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:49:08.316 [DEBUG] [Thread-138446] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:49:08.316 [DEBUG] [Thread-138446] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:49:08.317 [DEBUG] [Thread-138446] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T01:49:08.317 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T01:49:08.318 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:49:08.319 [DEBUG] [Thread-138446] [transport.py] [_log()] userauth is OK
2026-01-01T01:49:08.319 [DEBUG] [Thread-138446] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:49:08.319 [DEBUG] [Thread-138446] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:49:08.319 [DEBUG] [Thread-138446] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T01:49:08.319 [DEBUG] [Thread-138446] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:49:08.355 [INFO] [Thread-138446] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:49:08.355 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:49:09.006 [DEBUG] [Thread-138446] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:49:09.006 [DEBUG] [Thread-138446] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:49:09.006 [DEBUG] [Thread-138446] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T01:49:09.047 [DEBUG] [Thread-138446] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:49:09.047 [DEBUG] [Thread-138446] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:49:09.050 [DEBUG] [Thread-138446] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:49:09.062 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:49:09.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T01:49:09.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T01:49:09.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T01:49:09.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:49:09.074 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T01:49:09.074 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:49:09.074 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:49:09.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T01:49:09.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.992146 -999.00  +13.70   9.45     80  +10.40 1 1 1 2 1     0    0 3.82 20.39 ZNESW 10.6 9.4 195.2 13.1 14.6 -21.1 14.4 -20.9 14.2 -19.3 14.5 -20.3
2026-01-01T01:49:09.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T01:49:09.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T01:49:09.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.992146
2026-01-01T01:49:09.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T01:49:09.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T01:49:09.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T01:49:09.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T01:49:09.076 [DEBUG] [Thread-138446] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:49:09.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T01:49:09.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T01:48:44', tmtdew=3.78, humidity=77.75, cloud=0.0, wind=15.95, temperature=13.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T01:48:44', seeing=1.2, atlas_timestamp='2025-12-31T23:48:41.414', atlas_cloud=1, atlas_rain=1, zp_data=[0.003249999999999531, 0.0652500000000007, 0.04124999999999979, -0.0005000000000006111, 0.07499999999999929, 0.09425000000000061, 0.07099999999999973, 0.05424999999999969, 0.033500000000000085, 0.08900000000000041, 0.006249999999999645, 0.0649999999999995, 0.08499999999999908, 0.16724999999999923, 0.129999999999999, 0.08999999999999986, 0.06074999999999875, 0.18399999999999928, 0.036999999999999034, 0.1112499999999983, 0.07699999999999818, 0.1742499999999989, 0.17925000000000146, 0.18774999999999942, 0.0804999999999989, 0.1875, 0.20674999999999955, 0.2245000000000008, 0.19549999999999912, 0.15200000000000102, 0.18700000000000117, 0.16400000000000148, 0.16574999999999918], zp_timestamp='2025-12-31T23:47:00')
2026-01-01T01:49:09.170 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T01:49:09.183 [DEBUG] [Thread-138449] [transport.py] [_log()] starting thread (client mode): 0xb6b14b80
2026-01-01T01:49:09.184 [DEBUG] [Thread-138449] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:49:09.199 [DEBUG] [Thread-138449] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T01:49:09.199 [INFO] [Thread-138449] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T01:49:09.206 [DEBUG] [Thread-138449] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:49:09.206 [DEBUG] [Thread-138449] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T01:49:09.206 [DEBUG] [Thread-138449] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:49:09.206 [DEBUG] [Thread-138449] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:49:09.206 [DEBUG] [Thread-138449] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:49:09.206 [DEBUG] [Thread-138449] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:49:09.206 [DEBUG] [Thread-138449] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:49:09.206 [DEBUG] [Thread-138449] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:49:09.206 [DEBUG] [Thread-138449] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:49:09.207 [DEBUG] [Thread-138449] [transport.py] [_log()] client lang: <none>
2026-01-01T01:49:09.207 [DEBUG] [Thread-138449] [transport.py] [_log()] server lang: <none>
2026-01-01T01:49:09.207 [DEBUG] [Thread-138449] [transport.py] [_log()] kex follows: False
2026-01-01T01:49:09.207 [DEBUG] [Thread-138449] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:49:09.207 [DEBUG] [Thread-138449] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:49:09.207 [DEBUG] [Thread-138449] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:49:09.207 [DEBUG] [Thread-138449] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:49:09.207 [DEBUG] [Thread-138449] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:49:09.207 [DEBUG] [Thread-138449] [transport.py] [_log()] Compression: none
2026-01-01T01:49:09.207 [DEBUG] [Thread-138449] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:49:09.266 [DEBUG] [Thread-138449] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:49:09.267 [DEBUG] [Thread-138449] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:49:09.268 [DEBUG] [Thread-138449] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T01:49:09.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T01:49:09.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:49:09.323 [DEBUG] [Thread-138449] [transport.py] [_log()] userauth is OK
2026-01-01T01:49:09.323 [DEBUG] [Thread-138449] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:49:09.323 [DEBUG] [Thread-138449] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:49:09.323 [DEBUG] [Thread-138449] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T01:49:09.323 [DEBUG] [Thread-138449] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:49:09.343 [INFO] [Thread-138449] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:49:09.344 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T01:49:09.344 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:49:10.146 [DEBUG] [Thread-138449] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:49:10.146 [DEBUG] [Thread-138449] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:49:10.194 [DEBUG] [Thread-138449] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:49:10.195 [DEBUG] [Thread-138449] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:49:10.204 [DEBUG] [Thread-138449] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:49:10.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:49:10.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T01:49:10.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T01:49:10.232 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:49:10.232 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:49:10.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:49:10.241 [DEBUG] [Thread-138449] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:49:21.796 [DEBUG] [Thread-138451 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:49:36.834 [DEBUG] [Thread-138452 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:49:40.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T01:49:40.254 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T01:49:40.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T01:49:40.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 1, 49, 16), 3.77, 77.8, 0.0, 14.75, 13.56, 0, 0, 0, 2, 0, 0),)
2026-01-01T01:49:40.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 01:49:16
2026-01-01T01:49:41.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T01:49:41.228 [DEBUG] [Thread-138453] [transport.py] [_log()] starting thread (client mode): 0xb95b2590
2026-01-01T01:49:41.228 [DEBUG] [Thread-138453] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:49:41.248 [DEBUG] [Thread-138453] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T01:49:41.248 [INFO] [Thread-138453] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T01:49:41.250 [DEBUG] [Thread-138453] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:49:41.250 [DEBUG] [Thread-138453] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T01:49:41.250 [DEBUG] [Thread-138453] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:49:41.250 [DEBUG] [Thread-138453] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:49:41.250 [DEBUG] [Thread-138453] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:49:41.250 [DEBUG] [Thread-138453] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:49:41.250 [DEBUG] [Thread-138453] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:49:41.250 [DEBUG] [Thread-138453] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:49:41.250 [DEBUG] [Thread-138453] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:49:41.250 [DEBUG] [Thread-138453] [transport.py] [_log()] client lang: <none>
2026-01-01T01:49:41.250 [DEBUG] [Thread-138453] [transport.py] [_log()] server lang: <none>
2026-01-01T01:49:41.250 [DEBUG] [Thread-138453] [transport.py] [_log()] kex follows: False
2026-01-01T01:49:41.250 [DEBUG] [Thread-138453] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:49:41.250 [DEBUG] [Thread-138453] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:49:41.250 [DEBUG] [Thread-138453] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:49:41.250 [DEBUG] [Thread-138453] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:49:41.250 [DEBUG] [Thread-138453] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:49:41.250 [DEBUG] [Thread-138453] [transport.py] [_log()] Compression: none
2026-01-01T01:49:41.250 [DEBUG] [Thread-138453] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:49:41.268 [DEBUG] [Thread-138453] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:49:41.268 [DEBUG] [Thread-138453] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:49:41.269 [DEBUG] [Thread-138453] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T01:49:41.269 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T01:49:41.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:49:41.313 [DEBUG] [Thread-138453] [transport.py] [_log()] userauth is OK
2026-01-01T01:49:41.313 [DEBUG] [Thread-138453] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:49:41.314 [DEBUG] [Thread-138453] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:49:41.314 [DEBUG] [Thread-138453] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T01:49:41.314 [DEBUG] [Thread-138453] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:49:41.333 [INFO] [Thread-138453] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:49:41.334 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:49:42.002 [DEBUG] [Thread-138453] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:49:42.002 [DEBUG] [Thread-138453] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:49:42.003 [DEBUG] [Thread-138453] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T01:49:42.043 [DEBUG] [Thread-138453] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:49:42.043 [DEBUG] [Thread-138453] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:49:42.046 [DEBUG] [Thread-138453] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:49:42.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:49:42.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T01:49:42.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T01:49:42.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T01:49:42.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:49:42.069 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T01:49:42.069 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:49:42.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:49:42.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T01:49:42.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.992493 -999.00  +13.70   6.11     80  +10.40 1 1 1 2 1     0    0 3.82 20.06 ZNESW 8.8 6.1 194.4 12.7 14.5 -21.3 14.4 -20.6 14.2 -19.2 14.5 -20.3
2026-01-01T01:49:42.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T01:49:42.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T01:49:42.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.992493
2026-01-01T01:49:42.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T01:49:42.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T01:49:42.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T01:49:42.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T01:49:42.072 [DEBUG] [Thread-138453] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:49:42.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T01:49:42.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T01:49:16', tmtdew=3.77, humidity=77.8, cloud=0.0, wind=14.75, temperature=13.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T01:49:16', seeing=1.2, atlas_timestamp='2025-12-31T23:49:11.395', atlas_cloud=1, atlas_rain=1, zp_data=[0.003249999999999531, 0.0652500000000007, 0.04124999999999979, -0.0005000000000006111, 0.07499999999999929, 0.09425000000000061, 0.07099999999999973, 0.05424999999999969, 0.033500000000000085, 0.08900000000000041, 0.006249999999999645, 0.0649999999999995, 0.08499999999999908, 0.16724999999999923, 0.129999999999999, 0.08999999999999986, 0.06074999999999875, 0.18399999999999928, 0.036999999999999034, 0.1112499999999983, 0.07699999999999818, 0.1742499999999989, 0.17925000000000146, 0.18774999999999942, 0.0804999999999989, 0.1875, 0.20674999999999955, 0.2245000000000008, 0.19549999999999912, 0.15200000000000102, 0.18700000000000117, 0.16400000000000148, 0.16574999999999918], zp_timestamp='2025-12-31T23:47:00')
2026-01-01T01:49:42.155 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T01:49:42.168 [DEBUG] [Thread-138456] [transport.py] [_log()] starting thread (client mode): 0xb6ba2650
2026-01-01T01:49:42.169 [DEBUG] [Thread-138456] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:49:42.186 [DEBUG] [Thread-138456] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T01:49:42.187 [INFO] [Thread-138456] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T01:49:42.194 [DEBUG] [Thread-138456] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:49:42.195 [DEBUG] [Thread-138456] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T01:49:42.195 [DEBUG] [Thread-138456] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:49:42.195 [DEBUG] [Thread-138456] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:49:42.195 [DEBUG] [Thread-138456] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:49:42.195 [DEBUG] [Thread-138456] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:49:42.195 [DEBUG] [Thread-138456] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:49:42.195 [DEBUG] [Thread-138456] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:49:42.195 [DEBUG] [Thread-138456] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:49:42.195 [DEBUG] [Thread-138456] [transport.py] [_log()] client lang: <none>
2026-01-01T01:49:42.195 [DEBUG] [Thread-138456] [transport.py] [_log()] server lang: <none>
2026-01-01T01:49:42.195 [DEBUG] [Thread-138456] [transport.py] [_log()] kex follows: False
2026-01-01T01:49:42.195 [DEBUG] [Thread-138456] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:49:42.195 [DEBUG] [Thread-138456] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:49:42.195 [DEBUG] [Thread-138456] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:49:42.195 [DEBUG] [Thread-138456] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:49:42.196 [DEBUG] [Thread-138456] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:49:42.196 [DEBUG] [Thread-138456] [transport.py] [_log()] Compression: none
2026-01-01T01:49:42.196 [DEBUG] [Thread-138456] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:49:42.255 [DEBUG] [Thread-138456] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:49:42.255 [DEBUG] [Thread-138456] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:49:42.256 [DEBUG] [Thread-138456] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T01:49:42.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T01:49:42.257 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:49:42.320 [DEBUG] [Thread-138456] [transport.py] [_log()] userauth is OK
2026-01-01T01:49:42.321 [DEBUG] [Thread-138456] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:49:42.321 [DEBUG] [Thread-138456] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:49:42.321 [DEBUG] [Thread-138456] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T01:49:42.321 [DEBUG] [Thread-138456] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:49:42.349 [INFO] [Thread-138456] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:49:42.350 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T01:49:42.350 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:49:43.157 [DEBUG] [Thread-138456] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:49:43.157 [DEBUG] [Thread-138456] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:49:43.204 [DEBUG] [Thread-138456] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:49:43.205 [DEBUG] [Thread-138456] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:49:43.214 [DEBUG] [Thread-138456] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:49:43.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:49:43.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T01:49:43.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T01:49:43.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:49:43.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:49:43.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:49:43.251 [DEBUG] [Thread-138456] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:49:51.871 [DEBUG] [Thread-138458 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:49:54.978 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:49:54.979 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:50:02.128 [DEBUG] [Thread-138459 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:50:06.919 [DEBUG] [Thread-138460 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:50:13.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T01:50:13.273 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T01:50:13.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T01:50:13.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 1, 49, 48), 3.7, 77.87, 0.0, 14.93, 13.52, 0, 0, 0, 2, 0, 0),)
2026-01-01T01:50:13.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 01:49:48
2026-01-01T01:50:14.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T01:50:14.246 [DEBUG] [Thread-138461] [transport.py] [_log()] starting thread (client mode): 0xb95b3400
2026-01-01T01:50:14.247 [DEBUG] [Thread-138461] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:50:14.267 [DEBUG] [Thread-138461] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T01:50:14.267 [INFO] [Thread-138461] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T01:50:14.269 [DEBUG] [Thread-138461] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:50:14.269 [DEBUG] [Thread-138461] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T01:50:14.269 [DEBUG] [Thread-138461] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:50:14.269 [DEBUG] [Thread-138461] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:50:14.269 [DEBUG] [Thread-138461] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:50:14.269 [DEBUG] [Thread-138461] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:50:14.269 [DEBUG] [Thread-138461] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:50:14.269 [DEBUG] [Thread-138461] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:50:14.269 [DEBUG] [Thread-138461] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:50:14.269 [DEBUG] [Thread-138461] [transport.py] [_log()] client lang: <none>
2026-01-01T01:50:14.269 [DEBUG] [Thread-138461] [transport.py] [_log()] server lang: <none>
2026-01-01T01:50:14.269 [DEBUG] [Thread-138461] [transport.py] [_log()] kex follows: False
2026-01-01T01:50:14.269 [DEBUG] [Thread-138461] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:50:14.269 [DEBUG] [Thread-138461] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:50:14.269 [DEBUG] [Thread-138461] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:50:14.269 [DEBUG] [Thread-138461] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:50:14.269 [DEBUG] [Thread-138461] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:50:14.270 [DEBUG] [Thread-138461] [transport.py] [_log()] Compression: none
2026-01-01T01:50:14.270 [DEBUG] [Thread-138461] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:50:14.283 [DEBUG] [Thread-138461] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:50:14.284 [DEBUG] [Thread-138461] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:50:14.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T01:50:14.285 [DEBUG] [Thread-138461] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T01:50:14.285 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:50:14.286 [DEBUG] [Thread-138461] [transport.py] [_log()] userauth is OK
2026-01-01T01:50:14.287 [DEBUG] [Thread-138461] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:50:14.287 [DEBUG] [Thread-138461] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:50:14.287 [DEBUG] [Thread-138461] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T01:50:14.287 [DEBUG] [Thread-138461] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:50:14.306 [INFO] [Thread-138461] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:50:14.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:50:20.803 [DEBUG] [Thread-138461] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:50:20.803 [DEBUG] [Thread-138461] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:50:20.804 [DEBUG] [Thread-138461] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T01:50:20.844 [DEBUG] [Thread-138461] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:50:20.845 [DEBUG] [Thread-138461] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:50:20.847 [DEBUG] [Thread-138461] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:50:20.858 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:50:20.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T01:50:20.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T01:50:20.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T01:50:20.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:50:20.901 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T01:50:20.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:50:20.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:50:20.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T01:50:20.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.992493 -999.00  +13.70   6.11     80  +10.40 1 1 1 2 1     0    0 3.82 20.06 ZNESW 8.8 6.1 194.4 12.7 14.5 -21.3 14.4 -20.6 14.2 -19.2 14.5 -20.3
2026-01-01T01:50:20.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T01:50:20.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T01:50:20.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.992493
2026-01-01T01:50:20.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T01:50:20.903 [DEBUG] [Thread-138461] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:50:20.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T01:50:20.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T01:50:20.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T01:50:20.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T01:50:20.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T01:49:48', tmtdew=3.7, humidity=77.87, cloud=0.0, wind=14.93, temperature=13.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T01:49:48', seeing=1.2, atlas_timestamp='2025-12-31T23:49:11.395', atlas_cloud=1, atlas_rain=1, zp_data=[0.003249999999999531, 0.0652500000000007, 0.04124999999999979, -0.0005000000000006111, 0.07499999999999929, 0.09425000000000061, 0.07099999999999973, 0.05424999999999969, 0.033500000000000085, 0.08900000000000041, 0.006249999999999645, 0.0649999999999995, 0.08499999999999908, 0.16724999999999923, 0.129999999999999, 0.08999999999999986, 0.06074999999999875, 0.18399999999999928, 0.036999999999999034, 0.1112499999999983, 0.07699999999999818, 0.1742499999999989, 0.17925000000000146, 0.18774999999999942, 0.0804999999999989, 0.1875, 0.20674999999999955, 0.2245000000000008, 0.19549999999999912, 0.15200000000000102, 0.18700000000000117, 0.16400000000000148, 0.16574999999999918], zp_timestamp='2025-12-31T23:47:00')
2026-01-01T01:50:20.993 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T01:50:21.005 [DEBUG] [Thread-138464] [transport.py] [_log()] starting thread (client mode): 0xb6b175b0
2026-01-01T01:50:21.005 [DEBUG] [Thread-138464] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:50:21.020 [DEBUG] [Thread-138464] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T01:50:21.020 [INFO] [Thread-138464] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T01:50:21.028 [DEBUG] [Thread-138464] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:50:21.028 [DEBUG] [Thread-138464] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T01:50:21.028 [DEBUG] [Thread-138464] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:50:21.028 [DEBUG] [Thread-138464] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:50:21.028 [DEBUG] [Thread-138464] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:50:21.028 [DEBUG] [Thread-138464] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:50:21.028 [DEBUG] [Thread-138464] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:50:21.028 [DEBUG] [Thread-138464] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:50:21.028 [DEBUG] [Thread-138464] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:50:21.028 [DEBUG] [Thread-138464] [transport.py] [_log()] client lang: <none>
2026-01-01T01:50:21.028 [DEBUG] [Thread-138464] [transport.py] [_log()] server lang: <none>
2026-01-01T01:50:21.028 [DEBUG] [Thread-138464] [transport.py] [_log()] kex follows: False
2026-01-01T01:50:21.028 [DEBUG] [Thread-138464] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:50:21.028 [DEBUG] [Thread-138464] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:50:21.028 [DEBUG] [Thread-138464] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:50:21.028 [DEBUG] [Thread-138464] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:50:21.028 [DEBUG] [Thread-138464] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:50:21.028 [DEBUG] [Thread-138464] [transport.py] [_log()] Compression: none
2026-01-01T01:50:21.028 [DEBUG] [Thread-138464] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:50:21.085 [DEBUG] [Thread-138464] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:50:21.085 [DEBUG] [Thread-138464] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:50:21.085 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T01:50:21.086 [DEBUG] [Thread-138464] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T01:50:21.086 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:50:21.142 [DEBUG] [Thread-138464] [transport.py] [_log()] userauth is OK
2026-01-01T01:50:21.142 [DEBUG] [Thread-138464] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:50:21.142 [DEBUG] [Thread-138464] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:50:21.142 [DEBUG] [Thread-138464] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T01:50:21.142 [DEBUG] [Thread-138464] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:50:21.157 [INFO] [Thread-138464] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:50:21.157 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T01:50:21.157 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:50:21.948 [DEBUG] [Thread-138464] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:50:21.948 [DEBUG] [Thread-138464] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:50:21.952 [DEBUG] [Thread-138466 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:50:21.996 [DEBUG] [Thread-138464] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:50:21.996 [DEBUG] [Thread-138464] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:50:22.005 [DEBUG] [Thread-138464] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:50:22.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:50:22.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T01:50:22.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T01:50:22.029 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:50:22.029 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:50:22.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:50:22.036 [DEBUG] [Thread-138464] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:50:36.988 [DEBUG] [Thread-138467 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:50:52.021 [DEBUG] [Thread-138468 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:50:52.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T01:50:52.043 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T01:50:52.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T01:50:52.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 1, 50, 20), 3.69, 77.92, 0.0, 13.02, 13.54, 0, 0, 0, 2, 0, 0),)
2026-01-01T01:50:52.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 01:50:20
2026-01-01T01:50:52.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T01:50:53.035 [DEBUG] [Thread-138469] [transport.py] [_log()] starting thread (client mode): 0xb95f3c10
2026-01-01T01:50:53.036 [DEBUG] [Thread-138469] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:50:53.055 [DEBUG] [Thread-138469] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T01:50:53.055 [INFO] [Thread-138469] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T01:50:53.059 [DEBUG] [Thread-138469] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:50:53.059 [DEBUG] [Thread-138469] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T01:50:53.059 [DEBUG] [Thread-138469] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:50:53.059 [DEBUG] [Thread-138469] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:50:53.059 [DEBUG] [Thread-138469] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:50:53.059 [DEBUG] [Thread-138469] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:50:53.059 [DEBUG] [Thread-138469] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:50:53.059 [DEBUG] [Thread-138469] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:50:53.059 [DEBUG] [Thread-138469] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:50:53.059 [DEBUG] [Thread-138469] [transport.py] [_log()] client lang: <none>
2026-01-01T01:50:53.059 [DEBUG] [Thread-138469] [transport.py] [_log()] server lang: <none>
2026-01-01T01:50:53.059 [DEBUG] [Thread-138469] [transport.py] [_log()] kex follows: False
2026-01-01T01:50:53.059 [DEBUG] [Thread-138469] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:50:53.059 [DEBUG] [Thread-138469] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:50:53.059 [DEBUG] [Thread-138469] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:50:53.059 [DEBUG] [Thread-138469] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:50:53.059 [DEBUG] [Thread-138469] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:50:53.059 [DEBUG] [Thread-138469] [transport.py] [_log()] Compression: none
2026-01-01T01:50:53.059 [DEBUG] [Thread-138469] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:50:53.075 [DEBUG] [Thread-138469] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:50:53.075 [DEBUG] [Thread-138469] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:50:53.075 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T01:50:53.076 [DEBUG] [Thread-138469] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T01:50:53.076 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:50:53.076 [DEBUG] [Thread-138469] [transport.py] [_log()] userauth is OK
2026-01-01T01:50:53.076 [DEBUG] [Thread-138469] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:50:53.077 [DEBUG] [Thread-138469] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:50:53.077 [DEBUG] [Thread-138469] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T01:50:53.077 [DEBUG] [Thread-138469] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:50:53.090 [INFO] [Thread-138469] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:50:53.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:50:53.748 [DEBUG] [Thread-138469] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:50:53.748 [DEBUG] [Thread-138469] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:50:53.749 [DEBUG] [Thread-138469] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T01:50:53.790 [DEBUG] [Thread-138469] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:50:53.790 [DEBUG] [Thread-138469] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:50:53.792 [DEBUG] [Thread-138469] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:50:53.805 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:50:53.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T01:50:53.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T01:50:53.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T01:50:53.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:50:53.810 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T01:50:53.810 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:50:53.810 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:50:53.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T01:50:53.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.992841 -999.00  +13.70  10.46     80  +10.40 1 1 1 2 1     0    0 3.82 18.52 ZNESW 12.9 10.5 222.5 15.0 14.5 -21.1 14.4 -20.6 14.2 -19.3 14.5 -20.3
2026-01-01T01:50:53.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T01:50:53.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T01:50:53.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.992841
2026-01-01T01:50:53.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T01:50:53.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T01:50:53.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T01:50:53.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T01:50:53.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T01:50:53.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T01:50:20', tmtdew=3.69, humidity=77.92, cloud=0.0, wind=13.02, temperature=13.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T01:50:20', seeing=1.2, atlas_timestamp='2025-12-31T23:49:41.462', atlas_cloud=1, atlas_rain=1, zp_data=[0.003249999999999531, 0.0652500000000007, 0.04124999999999979, -0.0005000000000006111, 0.07499999999999929, 0.09425000000000061, 0.07099999999999973, 0.05424999999999969, 0.033500000000000085, 0.08900000000000041, 0.006249999999999645, 0.0649999999999995, 0.08499999999999908, 0.16724999999999923, 0.129999999999999, 0.08999999999999986, 0.06074999999999875, 0.18399999999999928, 0.036999999999999034, 0.1112499999999983, 0.07699999999999818, 0.1742499999999989, 0.17925000000000146, 0.18774999999999942, 0.0804999999999989, 0.1875, 0.20674999999999955, 0.2245000000000008, 0.19549999999999912, 0.15200000000000102, 0.18700000000000117, 0.16400000000000148, 0.16574999999999918], zp_timestamp='2025-12-31T23:47:00')
2026-01-01T01:50:53.812 [DEBUG] [Thread-138469] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:50:53.886 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T01:50:53.896 [DEBUG] [Thread-138472] [transport.py] [_log()] starting thread (client mode): 0xb95b1f30
2026-01-01T01:50:53.896 [DEBUG] [Thread-138472] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:50:53.912 [DEBUG] [Thread-138472] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T01:50:53.912 [INFO] [Thread-138472] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T01:50:53.919 [DEBUG] [Thread-138472] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:50:53.919 [DEBUG] [Thread-138472] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T01:50:53.919 [DEBUG] [Thread-138472] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:50:53.919 [DEBUG] [Thread-138472] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:50:53.919 [DEBUG] [Thread-138472] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:50:53.919 [DEBUG] [Thread-138472] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:50:53.919 [DEBUG] [Thread-138472] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:50:53.919 [DEBUG] [Thread-138472] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:50:53.919 [DEBUG] [Thread-138472] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:50:53.919 [DEBUG] [Thread-138472] [transport.py] [_log()] client lang: <none>
2026-01-01T01:50:53.919 [DEBUG] [Thread-138472] [transport.py] [_log()] server lang: <none>
2026-01-01T01:50:53.919 [DEBUG] [Thread-138472] [transport.py] [_log()] kex follows: False
2026-01-01T01:50:53.919 [DEBUG] [Thread-138472] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:50:53.919 [DEBUG] [Thread-138472] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:50:53.919 [DEBUG] [Thread-138472] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:50:53.919 [DEBUG] [Thread-138472] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:50:53.919 [DEBUG] [Thread-138472] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:50:53.919 [DEBUG] [Thread-138472] [transport.py] [_log()] Compression: none
2026-01-01T01:50:53.919 [DEBUG] [Thread-138472] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:50:53.977 [DEBUG] [Thread-138472] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:50:53.977 [DEBUG] [Thread-138472] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:50:53.977 [DEBUG] [Thread-138472] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T01:50:53.977 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T01:50:53.977 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:50:54.034 [DEBUG] [Thread-138472] [transport.py] [_log()] userauth is OK
2026-01-01T01:50:54.034 [DEBUG] [Thread-138472] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:50:54.034 [DEBUG] [Thread-138472] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:50:54.034 [DEBUG] [Thread-138472] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T01:50:54.034 [DEBUG] [Thread-138472] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:50:54.051 [INFO] [Thread-138472] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:50:54.051 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T01:50:54.051 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:50:54.893 [DEBUG] [Thread-138472] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:50:54.893 [DEBUG] [Thread-138472] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:50:54.941 [DEBUG] [Thread-138472] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:50:54.941 [DEBUG] [Thread-138472] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:50:54.949 [DEBUG] [Thread-138472] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:50:54.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:50:54.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T01:50: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') -> 00000000
2026-01-01T01:50:54.973 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:50:54.973 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:50:54.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:50:54.981 [DEBUG] [Thread-138472] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:50:55.182 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:50:55.183 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:51:02.184 [DEBUG] [Thread-138474 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:51:07.053 [DEBUG] [Thread-138475 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:51:22.100 [DEBUG] [Thread-138476 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:51:25.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T01:51:25.004 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T01:51:25.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T01:51:25.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 1, 50, 52), 3.71, 78.35, 0.0, 12.67, 13.52, 0, 0, 0, 2, 0, 0),)
2026-01-01T01:51:25.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 01:50:52
2026-01-01T01:51:25.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T01:51:26.049 [DEBUG] [Thread-138477] [transport.py] [_log()] starting thread (client mode): 0xb6ba1cc0
2026-01-01T01:51:26.050 [DEBUG] [Thread-138477] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:51:26.069 [DEBUG] [Thread-138477] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T01:51:26.069 [INFO] [Thread-138477] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T01:51:26.072 [DEBUG] [Thread-138477] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:51:26.072 [DEBUG] [Thread-138477] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T01:51:26.072 [DEBUG] [Thread-138477] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:51:26.072 [DEBUG] [Thread-138477] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:51:26.072 [DEBUG] [Thread-138477] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:51:26.072 [DEBUG] [Thread-138477] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:51:26.072 [DEBUG] [Thread-138477] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:51:26.072 [DEBUG] [Thread-138477] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:51:26.072 [DEBUG] [Thread-138477] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:51:26.072 [DEBUG] [Thread-138477] [transport.py] [_log()] client lang: <none>
2026-01-01T01:51:26.072 [DEBUG] [Thread-138477] [transport.py] [_log()] server lang: <none>
2026-01-01T01:51:26.072 [DEBUG] [Thread-138477] [transport.py] [_log()] kex follows: False
2026-01-01T01:51:26.072 [DEBUG] [Thread-138477] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:51:26.072 [DEBUG] [Thread-138477] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:51:26.072 [DEBUG] [Thread-138477] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:51:26.073 [DEBUG] [Thread-138477] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:51:26.073 [DEBUG] [Thread-138477] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:51:26.073 [DEBUG] [Thread-138477] [transport.py] [_log()] Compression: none
2026-01-01T01:51:26.073 [DEBUG] [Thread-138477] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:51:26.089 [DEBUG] [Thread-138477] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:51:26.089 [DEBUG] [Thread-138477] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:51:26.090 [DEBUG] [Thread-138477] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T01:51:26.090 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T01:51:26.090 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:51:26.090 [DEBUG] [Thread-138477] [transport.py] [_log()] userauth is OK
2026-01-01T01:51:26.090 [DEBUG] [Thread-138477] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:51:26.090 [DEBUG] [Thread-138477] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:51:26.091 [DEBUG] [Thread-138477] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T01:51:26.091 [DEBUG] [Thread-138477] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:51:26.102 [INFO] [Thread-138477] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:51:26.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:51:26.904 [DEBUG] [Thread-138477] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:51:26.905 [DEBUG] [Thread-138477] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:51:26.905 [DEBUG] [Thread-138477] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T01:51:26.946 [DEBUG] [Thread-138477] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:51:26.946 [DEBUG] [Thread-138477] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:51:26.949 [DEBUG] [Thread-138477] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:51:26.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:51:26.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T01:51:26.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T01:51:26.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T01:51:26.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:51:26.961 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T01:51:26.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:51:26.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:51:26.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T01:51:26.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.993535 -999.00  +13.70   5.08     80  +10.40 1 1 1 2 1     0    0 3.74 16.03 ZNESW 7.8 5.1 218.1 11.9 14.5 -21.2 14.4 -20.6 14.2 -19.2 14.5 -20.1
2026-01-01T01:51:26.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T01:51:26.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T01:51:26.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.993535
2026-01-01T01:51:26.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T01:51:26.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T01:51:26.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T01:51:26.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T01:51:26.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T01:51:26.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T01:50:52', tmtdew=3.71, humidity=78.35, cloud=0.0, wind=12.67, temperature=13.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T01:50:53', seeing=1.2, atlas_timestamp='2025-12-31T23:50:41.424', atlas_cloud=1, atlas_rain=1, zp_data=[0.003249999999999531, 0.0652500000000007, 0.04124999999999979, -0.0005000000000006111, 0.07499999999999929, 0.09425000000000061, 0.07099999999999973, 0.05424999999999969, 0.033500000000000085, 0.08900000000000041, 0.006249999999999645, 0.0649999999999995, 0.08499999999999908, 0.16724999999999923, 0.129999999999999, 0.08999999999999986, 0.06074999999999875, 0.18399999999999928, 0.036999999999999034, 0.1112499999999983, 0.07699999999999818, 0.1742499999999989, 0.17925000000000146, 0.18774999999999942, 0.0804999999999989, 0.1875, 0.20674999999999955, 0.2245000000000008, 0.19549999999999912, 0.15200000000000102, 0.18700000000000117, 0.16400000000000148, 0.16574999999999918], zp_timestamp='2025-12-31T23:47:00')
2026-01-01T01:51:26.962 [DEBUG] [Thread-138477] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:51:27.036 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T01:51:37.135 [DEBUG] [Thread-138480 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:51:52.184 [DEBUG] [Thread-138481 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:51:55.382 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:51:55.383 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:52:02.261 [DEBUG] [Thread-138482 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:52:07.215 [DEBUG] [Thread-138483 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:52:22.254 [DEBUG] [Thread-138484 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:52:37.286 [DEBUG] [Thread-138485 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:52:52.325 [DEBUG] [Thread-138486 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:52:55.583 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:52:55.584 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:53:02.332 [DEBUG] [Thread-138487 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:53:07.362 [DEBUG] [Thread-138488 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:53:22.396 [DEBUG] [Thread-138489 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:53:37.431 [DEBUG] [Thread-138490 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:53:39.029 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2026-01-01T01:53:50.305 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:53:52.466 [DEBUG] [Thread-138491 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:53:53.502 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:53:55.785 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:53:55.785 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:53:58.555 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:54:02.388 [DEBUG] [Thread-138492 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:54:03.987 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:54:07.500 [DEBUG] [Thread-138493 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:54:08.280 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:54:09.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T01:54:09.056 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T01:54:09.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T01:54:09.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 1, 54, 5), 3.67, 78.54, 0.0, 13.83, 13.51, 0, 0, 0, 2, 0, 0),)
2026-01-01T01:54:09.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 01:54:05
2026-01-01T01:54:09.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T01:54:10.048 [DEBUG] [Thread-138494] [transport.py] [_log()] starting thread (client mode): 0xb6bbc2e0
2026-01-01T01:54:10.048 [DEBUG] [Thread-138494] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:54:10.069 [DEBUG] [Thread-138494] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T01:54:10.069 [INFO] [Thread-138494] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T01:54:10.072 [DEBUG] [Thread-138494] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:54:10.072 [DEBUG] [Thread-138494] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T01:54:10.072 [DEBUG] [Thread-138494] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:54:10.072 [DEBUG] [Thread-138494] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:54:10.072 [DEBUG] [Thread-138494] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:54:10.072 [DEBUG] [Thread-138494] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:54:10.072 [DEBUG] [Thread-138494] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:54:10.072 [DEBUG] [Thread-138494] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:54:10.072 [DEBUG] [Thread-138494] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:54:10.072 [DEBUG] [Thread-138494] [transport.py] [_log()] client lang: <none>
2026-01-01T01:54:10.072 [DEBUG] [Thread-138494] [transport.py] [_log()] server lang: <none>
2026-01-01T01:54:10.072 [DEBUG] [Thread-138494] [transport.py] [_log()] kex follows: False
2026-01-01T01:54:10.072 [DEBUG] [Thread-138494] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:54:10.072 [DEBUG] [Thread-138494] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:54:10.072 [DEBUG] [Thread-138494] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:54:10.072 [DEBUG] [Thread-138494] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:54:10.072 [DEBUG] [Thread-138494] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:54:10.072 [DEBUG] [Thread-138494] [transport.py] [_log()] Compression: none
2026-01-01T01:54:10.072 [DEBUG] [Thread-138494] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:54:10.088 [DEBUG] [Thread-138494] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:54:10.089 [DEBUG] [Thread-138494] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:54:10.089 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T01:54:10.090 [DEBUG] [Thread-138494] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T01:54:10.090 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:54:10.091 [DEBUG] [Thread-138494] [transport.py] [_log()] userauth is OK
2026-01-01T01:54:10.092 [DEBUG] [Thread-138494] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:54:10.092 [DEBUG] [Thread-138494] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:54:10.092 [DEBUG] [Thread-138494] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T01:54:10.092 [DEBUG] [Thread-138494] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:54:10.115 [INFO] [Thread-138494] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:54:10.116 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:54:10.788 [DEBUG] [Thread-138494] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:54:10.789 [DEBUG] [Thread-138494] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:54:10.789 [DEBUG] [Thread-138494] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T01:54:10.830 [DEBUG] [Thread-138494] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:54:10.830 [DEBUG] [Thread-138494] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:54:10.834 [DEBUG] [Thread-138494] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:54:10.846 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:54:10.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T01:54:10.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T01:54:10.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T01:54:10.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:54:10.857 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T01:54:10.857 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:54:10.857 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:54:10.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T01:54:10.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.995618 -999.00  +13.70   7.47     81  +10.50 1 1 1 2 1     0    0 3.48 8.64 ZNESW 8.9 7.5 256.0 21.3 14.5 -21.2 14.3 -20.7 14.1 -19.2 14.4 -20.2
2026-01-01T01:54:10.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T01:54:10.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T01:54:10.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.995618
2026-01-01T01:54:10.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T01:54:10.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T01:54:10.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T01:54:10.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T01:54:10.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T01:54:10.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T01:54:05', tmtdew=3.67, humidity=78.54, cloud=0.0, wind=13.83, temperature=13.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T01:51:25', seeing=1.2, atlas_timestamp='2025-12-31T23:53:41.395', atlas_cloud=1, atlas_rain=1, zp_data=[0.03474999999999895, 0.08225000000000016, 0.03725000000000023, 0.05549999999999855, 0.07249999999999979, 0.07425000000000104, 0.0519999999999996, 0.008750000000000924, 0.09649999999999892, 0.09100000000000108, -0.0007500000000000284, 0.08499999999999908, 0.11299999999999955, 0.09024999999999928, 0.00849999999999973, 0.053999999999998494, 0.1092499999999994, 0.20650000000000013, 0.1399999999999988, 0.18624999999999936, 0.07099999999999795, 0.12224999999999753, 0.08425000000000082, 0.10124999999999851, 0.10899999999999999, 0.2810000000000006, 0.3047500000000003, 0.19350000000000023, 0.2270000000000003, 0.22100000000000186, 0.2550000000000008, 0.33500000000000085, 0.1952499999999997], zp_timestamp='2025-12-31T23:51:00')
2026-01-01T01:54:10.859 [DEBUG] [Thread-138494] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:54:10.943 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T01:54:10.955 [DEBUG] [Thread-138497] [transport.py] [_log()] starting thread (client mode): 0xb1745ff0
2026-01-01T01:54:10.955 [DEBUG] [Thread-138497] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:54:10.973 [DEBUG] [Thread-138497] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T01:54:10.974 [INFO] [Thread-138497] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T01:54:10.981 [DEBUG] [Thread-138497] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:54:10.981 [DEBUG] [Thread-138497] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T01:54:10.981 [DEBUG] [Thread-138497] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:54:10.981 [DEBUG] [Thread-138497] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:54:10.981 [DEBUG] [Thread-138497] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:54:10.981 [DEBUG] [Thread-138497] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:54:10.982 [DEBUG] [Thread-138497] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:54:10.982 [DEBUG] [Thread-138497] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:54:10.982 [DEBUG] [Thread-138497] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:54:10.982 [DEBUG] [Thread-138497] [transport.py] [_log()] client lang: <none>
2026-01-01T01:54:10.982 [DEBUG] [Thread-138497] [transport.py] [_log()] server lang: <none>
2026-01-01T01:54:10.982 [DEBUG] [Thread-138497] [transport.py] [_log()] kex follows: False
2026-01-01T01:54:10.982 [DEBUG] [Thread-138497] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:54:10.982 [DEBUG] [Thread-138497] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:54:10.982 [DEBUG] [Thread-138497] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:54:10.982 [DEBUG] [Thread-138497] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:54:10.982 [DEBUG] [Thread-138497] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:54:10.982 [DEBUG] [Thread-138497] [transport.py] [_log()] Compression: none
2026-01-01T01:54:10.982 [DEBUG] [Thread-138497] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:54:11.041 [DEBUG] [Thread-138497] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:54:11.041 [DEBUG] [Thread-138497] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:54:11.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T01:54:11.043 [DEBUG] [Thread-138497] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T01:54:11.044 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:54:11.102 [DEBUG] [Thread-138497] [transport.py] [_log()] userauth is OK
2026-01-01T01:54:11.102 [DEBUG] [Thread-138497] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:54:11.102 [DEBUG] [Thread-138497] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:54:11.102 [DEBUG] [Thread-138497] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T01:54:11.102 [DEBUG] [Thread-138497] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:54:11.121 [INFO] [Thread-138497] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:54:11.122 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T01:54:11.122 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:54:11.382 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:54:12.009 [DEBUG] [Thread-138497] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:54:12.010 [DEBUG] [Thread-138497] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:54:12.057 [DEBUG] [Thread-138497] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:54:12.057 [DEBUG] [Thread-138497] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:54:12.067 [DEBUG] [Thread-138497] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:54:12.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:54:12.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T01:54: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') -> 00000000
2026-01-01T01:54:12.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:54:12.094 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:54:12.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:54:12.102 [DEBUG] [Thread-138497] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:54:22.539 [DEBUG] [Thread-138499 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:54:37.585 [DEBUG] [Thread-138500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:54:37.842 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:54:42.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T01:54:42.098 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T01:54:42.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T01:54:42.649 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:54:42.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 1, 54, 37), 3.67, 78.54, 0.0, 16.85, 13.49, 0, 0, 0, 2, 0, 0),)
2026-01-01T01:54:42.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 01:54:37
2026-01-01T01:54:42.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T01:54:43.100 [DEBUG] [Thread-138501] [transport.py] [_log()] starting thread (client mode): 0xb6ba3df0
2026-01-01T01:54:43.100 [DEBUG] [Thread-138501] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:54:43.121 [DEBUG] [Thread-138501] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T01:54:43.121 [INFO] [Thread-138501] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T01:54:43.124 [DEBUG] [Thread-138501] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:54:43.124 [DEBUG] [Thread-138501] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T01:54:43.124 [DEBUG] [Thread-138501] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:54:43.124 [DEBUG] [Thread-138501] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:54:43.124 [DEBUG] [Thread-138501] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:54:43.124 [DEBUG] [Thread-138501] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:54:43.124 [DEBUG] [Thread-138501] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:54:43.124 [DEBUG] [Thread-138501] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:54:43.124 [DEBUG] [Thread-138501] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:54:43.124 [DEBUG] [Thread-138501] [transport.py] [_log()] client lang: <none>
2026-01-01T01:54:43.125 [DEBUG] [Thread-138501] [transport.py] [_log()] server lang: <none>
2026-01-01T01:54:43.125 [DEBUG] [Thread-138501] [transport.py] [_log()] kex follows: False
2026-01-01T01:54:43.125 [DEBUG] [Thread-138501] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:54:43.125 [DEBUG] [Thread-138501] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:54:43.125 [DEBUG] [Thread-138501] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:54:43.125 [DEBUG] [Thread-138501] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:54:43.125 [DEBUG] [Thread-138501] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:54:43.125 [DEBUG] [Thread-138501] [transport.py] [_log()] Compression: none
2026-01-01T01:54:43.125 [DEBUG] [Thread-138501] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:54:43.140 [DEBUG] [Thread-138501] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:54:43.140 [DEBUG] [Thread-138501] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:54:43.141 [DEBUG] [Thread-138501] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T01:54:43.141 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T01:54:43.141 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:54:43.144 [DEBUG] [Thread-138501] [transport.py] [_log()] userauth is OK
2026-01-01T01:54:43.144 [DEBUG] [Thread-138501] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:54:43.144 [DEBUG] [Thread-138501] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:54:43.144 [DEBUG] [Thread-138501] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T01:54:43.144 [DEBUG] [Thread-138501] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:54:43.159 [INFO] [Thread-138501] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:54:43.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:54:43.803 [DEBUG] [Thread-138501] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:54:43.803 [DEBUG] [Thread-138501] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:54:43.803 [DEBUG] [Thread-138501] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T01:54:43.844 [DEBUG] [Thread-138501] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:54:43.844 [DEBUG] [Thread-138501] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:54:43.848 [DEBUG] [Thread-138501] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:54:43.861 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:54:43.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T01:54:43.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T01:54:43.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T01:54:43.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:54:43.874 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T01:54:43.874 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:54:43.874 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:54:43.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T01:54:43.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.995966 -999.00  +13.70  11.15     81  +10.50 1 1 1 2 1     0    0 3.42 7.90 ZNESW 6.6 11.2 216.6 14.9 14.4 -21.2 14.3 -20.7 14.1 -19.4 14.4 -20.3
2026-01-01T01:54:43.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T01:54:43.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T01:54:43.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.995966
2026-01-01T01:54:43.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T01:54:43.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T01:54:43.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T01:54:43.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T01:54:43.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T01:54:43.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T01:54:37', tmtdew=3.67, humidity=78.54, cloud=0.0, wind=16.85, temperature=13.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T01:51:25', seeing=1.2, atlas_timestamp='2025-12-31T23:54:11.462', atlas_cloud=1, atlas_rain=1, zp_data=[0.03474999999999895, 0.08225000000000016, 0.03725000000000023, 0.05549999999999855, 0.07249999999999979, 0.07425000000000104, 0.0519999999999996, 0.008750000000000924, 0.09649999999999892, 0.09100000000000108, -0.0007500000000000284, 0.08499999999999908, 0.11299999999999955, 0.09024999999999928, 0.00849999999999973, 0.053999999999998494, 0.1092499999999994, 0.20650000000000013, 0.1399999999999988, 0.18624999999999936, 0.07099999999999795, 0.12224999999999753, 0.08425000000000082, 0.10124999999999851, 0.10899999999999999, 0.2810000000000006, 0.3047500000000003, 0.19350000000000023, 0.2270000000000003, 0.22100000000000186, 0.2550000000000008, 0.33500000000000085, 0.1952499999999997], zp_timestamp='2025-12-31T23:51:00')
2026-01-01T01:54:43.877 [DEBUG] [Thread-138501] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:54:43.961 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T01:54:43.973 [DEBUG] [Thread-138504] [transport.py] [_log()] starting thread (client mode): 0xb95b1030
2026-01-01T01:54:43.973 [DEBUG] [Thread-138504] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:54:43.987 [DEBUG] [Thread-138504] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T01:54:43.988 [INFO] [Thread-138504] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T01:54:43.995 [DEBUG] [Thread-138504] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:54:43.995 [DEBUG] [Thread-138504] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T01:54:43.995 [DEBUG] [Thread-138504] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:54:43.995 [DEBUG] [Thread-138504] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:54:43.995 [DEBUG] [Thread-138504] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:54:43.995 [DEBUG] [Thread-138504] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:54:43.995 [DEBUG] [Thread-138504] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:54:43.995 [DEBUG] [Thread-138504] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:54:43.996 [DEBUG] [Thread-138504] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:54:43.996 [DEBUG] [Thread-138504] [transport.py] [_log()] client lang: <none>
2026-01-01T01:54:43.996 [DEBUG] [Thread-138504] [transport.py] [_log()] server lang: <none>
2026-01-01T01:54:43.996 [DEBUG] [Thread-138504] [transport.py] [_log()] kex follows: False
2026-01-01T01:54:43.996 [DEBUG] [Thread-138504] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:54:43.996 [DEBUG] [Thread-138504] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:54:43.996 [DEBUG] [Thread-138504] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:54:43.996 [DEBUG] [Thread-138504] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:54:43.996 [DEBUG] [Thread-138504] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:54:43.996 [DEBUG] [Thread-138504] [transport.py] [_log()] Compression: none
2026-01-01T01:54:43.996 [DEBUG] [Thread-138504] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:54:44.052 [DEBUG] [Thread-138504] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:54:44.053 [DEBUG] [Thread-138504] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:54:44.053 [DEBUG] [Thread-138504] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T01:54:44.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T01:54:44.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:54:44.108 [DEBUG] [Thread-138504] [transport.py] [_log()] userauth is OK
2026-01-01T01:54:44.109 [DEBUG] [Thread-138504] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:54:44.109 [DEBUG] [Thread-138504] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:54:44.109 [DEBUG] [Thread-138504] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T01:54:44.109 [DEBUG] [Thread-138504] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:54:44.128 [INFO] [Thread-138504] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:54:44.128 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T01:54:44.129 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:54:44.987 [DEBUG] [Thread-138504] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:54:44.987 [DEBUG] [Thread-138504] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:54:45.035 [DEBUG] [Thread-138504] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:54:45.035 [DEBUG] [Thread-138504] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:54:45.045 [DEBUG] [Thread-138504] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:54:45.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:54:45.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T01:54:45.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T01:54:45.073 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:54:45.073 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:54:45.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:54:45.081 [DEBUG] [Thread-138504] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:54:45.715 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:54:52.163 [DEBUG] [Thread-92026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:54:52.619 [DEBUG] [Thread-138506 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:54:55.989 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:54:55.990 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:55:02.456 [DEBUG] [Thread-138507 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:55:07.679 [DEBUG] [Thread-138508 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:55:15.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T01:55:15.104 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T01:55:15.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T01:55:15.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 1, 55, 9), 3.66, 78.57, 0.0, 17.17, 13.48, 0, 0, 0, 2, 0, 0),)
2026-01-01T01:55:15.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 01:55:09
2026-01-01T01:55:15.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T01:55:16.100 [DEBUG] [Thread-138509] [transport.py] [_log()] starting thread (client mode): 0xb1747d60
2026-01-01T01:55:16.100 [DEBUG] [Thread-138509] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:55:16.121 [DEBUG] [Thread-138509] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T01:55:16.122 [INFO] [Thread-138509] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T01:55:16.124 [DEBUG] [Thread-138509] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:55:16.125 [DEBUG] [Thread-138509] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T01:55:16.125 [DEBUG] [Thread-138509] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:55:16.125 [DEBUG] [Thread-138509] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:55:16.125 [DEBUG] [Thread-138509] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:55:16.125 [DEBUG] [Thread-138509] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:55:16.125 [DEBUG] [Thread-138509] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:55:16.125 [DEBUG] [Thread-138509] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:55:16.125 [DEBUG] [Thread-138509] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:55:16.125 [DEBUG] [Thread-138509] [transport.py] [_log()] client lang: <none>
2026-01-01T01:55:16.125 [DEBUG] [Thread-138509] [transport.py] [_log()] server lang: <none>
2026-01-01T01:55:16.125 [DEBUG] [Thread-138509] [transport.py] [_log()] kex follows: False
2026-01-01T01:55:16.125 [DEBUG] [Thread-138509] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:55:16.125 [DEBUG] [Thread-138509] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:55:16.125 [DEBUG] [Thread-138509] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:55:16.125 [DEBUG] [Thread-138509] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:55:16.125 [DEBUG] [Thread-138509] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:55:16.125 [DEBUG] [Thread-138509] [transport.py] [_log()] Compression: none
2026-01-01T01:55:16.125 [DEBUG] [Thread-138509] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:55:16.143 [DEBUG] [Thread-138509] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:55:16.143 [DEBUG] [Thread-138509] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:55:16.144 [DEBUG] [Thread-138509] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T01:55:16.144 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T01:55:16.145 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:55:16.146 [DEBUG] [Thread-138509] [transport.py] [_log()] userauth is OK
2026-01-01T01:55:16.146 [DEBUG] [Thread-138509] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:55:16.146 [DEBUG] [Thread-138509] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:55:16.146 [DEBUG] [Thread-138509] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T01:55:16.146 [DEBUG] [Thread-138509] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:55:16.170 [INFO] [Thread-138509] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:55:16.171 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:55:16.777 [DEBUG] [Thread-138509] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:55:16.777 [DEBUG] [Thread-138509] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:55:16.777 [DEBUG] [Thread-138509] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T01:55:16.818 [DEBUG] [Thread-138509] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:55:16.818 [DEBUG] [Thread-138509] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:55:16.820 [DEBUG] [Thread-138509] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:55:16.832 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:55:16.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T01:55:16.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T01:55:16.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T01:55:16.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:55:16.843 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T01:55:16.843 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:55:16.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:55:16.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T01:55:16.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.996313 -999.00  +13.60  10.67     81  +10.50 1 1 1 2 1     0    0 3.46 6.64 ZNESW 10.8 10.7 233.4 14.2 14.4 -21.1 14.3 -20.6 14.2 -19.2 14.4 -20.3
2026-01-01T01:55:16.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T01:55:16.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T01:55:16.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.996313
2026-01-01T01:55:16.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T01:55:16.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T01:55:16.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T01:55:16.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T01:55:16.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T01:55:16.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T01:55:09', tmtdew=3.66, humidity=78.57, cloud=0.0, wind=17.17, temperature=13.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T01:51:25', seeing=1.2, atlas_timestamp='2025-12-31T23:54:41.443', atlas_cloud=1, atlas_rain=1, zp_data=[0.03474999999999895, 0.08225000000000016, 0.03725000000000023, 0.05549999999999855, 0.07249999999999979, 0.07425000000000104, 0.0519999999999996, 0.008750000000000924, 0.09649999999999892, 0.09100000000000108, -0.0007500000000000284, 0.08499999999999908, 0.11299999999999955, 0.09024999999999928, 0.00849999999999973, 0.053999999999998494, 0.1092499999999994, 0.20650000000000013, 0.1399999999999988, 0.18624999999999936, 0.07099999999999795, 0.12224999999999753, 0.08425000000000082, 0.10124999999999851, 0.10899999999999999, 0.2810000000000006, 0.3047500000000003, 0.19350000000000023, 0.2270000000000003, 0.22100000000000186, 0.2550000000000008, 0.33500000000000085, 0.1952499999999997], zp_timestamp='2025-12-31T23:53:00')
2026-01-01T01:55:16.845 [DEBUG] [Thread-138509] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:55:16.928 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T01:55:16.940 [DEBUG] [Thread-138512] [transport.py] [_log()] starting thread (client mode): 0xb17965f0
2026-01-01T01:55:16.941 [DEBUG] [Thread-138512] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:55:16.956 [DEBUG] [Thread-138512] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T01:55:16.956 [INFO] [Thread-138512] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T01:55:16.964 [DEBUG] [Thread-138512] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:55:16.964 [DEBUG] [Thread-138512] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T01:55:16.964 [DEBUG] [Thread-138512] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:55:16.964 [DEBUG] [Thread-138512] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:55:16.964 [DEBUG] [Thread-138512] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:55:16.964 [DEBUG] [Thread-138512] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:55:16.965 [DEBUG] [Thread-138512] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:55:16.965 [DEBUG] [Thread-138512] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:55:16.965 [DEBUG] [Thread-138512] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:55:16.965 [DEBUG] [Thread-138512] [transport.py] [_log()] client lang: <none>
2026-01-01T01:55:16.965 [DEBUG] [Thread-138512] [transport.py] [_log()] server lang: <none>
2026-01-01T01:55:16.965 [DEBUG] [Thread-138512] [transport.py] [_log()] kex follows: False
2026-01-01T01:55:16.965 [DEBUG] [Thread-138512] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:55:16.965 [DEBUG] [Thread-138512] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:55:16.966 [DEBUG] [Thread-138512] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:55:16.966 [DEBUG] [Thread-138512] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:55:16.966 [DEBUG] [Thread-138512] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:55:16.966 [DEBUG] [Thread-138512] [transport.py] [_log()] Compression: none
2026-01-01T01:55:16.966 [DEBUG] [Thread-138512] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:55:17.021 [DEBUG] [Thread-138512] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:55:17.022 [DEBUG] [Thread-138512] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:55:17.022 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T01:55:17.023 [DEBUG] [Thread-138512] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T01:55:17.024 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:55:17.077 [DEBUG] [Thread-138512] [transport.py] [_log()] userauth is OK
2026-01-01T01:55:17.077 [DEBUG] [Thread-138512] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:55:17.077 [DEBUG] [Thread-138512] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:55:17.077 [DEBUG] [Thread-138512] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T01:55:17.077 [DEBUG] [Thread-138512] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:55:17.095 [INFO] [Thread-138512] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:55:17.096 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T01:55:17.096 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:55:17.998 [DEBUG] [Thread-138512] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:55:17.998 [DEBUG] [Thread-138512] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:55:18.046 [DEBUG] [Thread-138512] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:55:18.046 [DEBUG] [Thread-138512] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:55:18.055 [DEBUG] [Thread-138512] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:55:18.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:55:18.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T01:55:18.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T01:55:18.082 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:55:18.082 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:55:18.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:55:18.090 [DEBUG] [Thread-138512] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:55:22.711 [DEBUG] [Thread-138514 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:55:37.761 [DEBUG] [Thread-138515 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:55:48.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T01:55:48.113 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T01:55:48.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T01:55:48.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 1, 55, 41), 3.65, 78.62, 0.0, 16.3, 13.48, 0, 0, 0, 2, 0, 0),)
2026-01-01T01:55:48.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 01:55:41
2026-01-01T01:55:48.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T01:55:49.126 [DEBUG] [Thread-138516] [transport.py] [_log()] starting thread (client mode): 0xb6bbf670
2026-01-01T01:55:49.126 [DEBUG] [Thread-138516] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:55:49.146 [DEBUG] [Thread-138516] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T01:55:49.146 [INFO] [Thread-138516] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T01:55:49.148 [DEBUG] [Thread-138516] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:55:49.148 [DEBUG] [Thread-138516] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T01:55:49.149 [DEBUG] [Thread-138516] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:55:49.149 [DEBUG] [Thread-138516] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:55:49.149 [DEBUG] [Thread-138516] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:55:49.149 [DEBUG] [Thread-138516] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:55:49.149 [DEBUG] [Thread-138516] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:55:49.149 [DEBUG] [Thread-138516] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:55:49.149 [DEBUG] [Thread-138516] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:55:49.149 [DEBUG] [Thread-138516] [transport.py] [_log()] client lang: <none>
2026-01-01T01:55:49.149 [DEBUG] [Thread-138516] [transport.py] [_log()] server lang: <none>
2026-01-01T01:55:49.149 [DEBUG] [Thread-138516] [transport.py] [_log()] kex follows: False
2026-01-01T01:55:49.149 [DEBUG] [Thread-138516] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:55:49.149 [DEBUG] [Thread-138516] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:55:49.149 [DEBUG] [Thread-138516] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:55:49.149 [DEBUG] [Thread-138516] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:55:49.149 [DEBUG] [Thread-138516] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:55:49.149 [DEBUG] [Thread-138516] [transport.py] [_log()] Compression: none
2026-01-01T01:55:49.149 [DEBUG] [Thread-138516] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:55:49.161 [DEBUG] [Thread-138516] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:55:49.161 [DEBUG] [Thread-138516] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:55:49.161 [DEBUG] [Thread-138516] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T01:55:49.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T01:55:49.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:55:49.162 [DEBUG] [Thread-138516] [transport.py] [_log()] userauth is OK
2026-01-01T01:55:49.162 [DEBUG] [Thread-138516] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:55:49.162 [DEBUG] [Thread-138516] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:55:49.162 [DEBUG] [Thread-138516] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T01:55:49.162 [DEBUG] [Thread-138516] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:55:49.175 [INFO] [Thread-138516] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:55:49.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:55:49.768 [DEBUG] [Thread-138516] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:55:49.768 [DEBUG] [Thread-138516] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:55:49.768 [DEBUG] [Thread-138516] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T01:55:49.808 [DEBUG] [Thread-138516] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:55:49.808 [DEBUG] [Thread-138516] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:55:49.811 [DEBUG] [Thread-138516] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:55:49.822 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:55:49.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T01:55:49.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T01:55:49.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T01:55:49.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:55:49.827 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T01:55:49.827 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:55:49.827 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:55:49.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T01:55:49.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.997007 -999.00  +13.60   9.88     81  +10.50 1 1 1 2 1     0    0 3.35 4.13 ZNESW 7.8 9.9 242.5 20.1 14.4 -21.3 14.3 -20.6 14.1 -19.3 14.4 -20.3
2026-01-01T01:55:49.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T01:55:49.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T01:55:49.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.997007
2026-01-01T01:55:49.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T01:55:49.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T01:55:49.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T01:55:49.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T01:55:49.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T01:55:49.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T01:55:41', tmtdew=3.65, humidity=78.62, cloud=0.0, wind=16.3, temperature=13.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T01:51:25', seeing=1.2, atlas_timestamp='2025-12-31T23:55:41.405', atlas_cloud=1, atlas_rain=1, zp_data=[0.03474999999999895, 0.08225000000000016, 0.03725000000000023, 0.05549999999999855, 0.07249999999999979, 0.07425000000000104, 0.0519999999999996, 0.008750000000000924, 0.09649999999999892, 0.09100000000000108, -0.0007500000000000284, 0.08499999999999908, 0.11299999999999955, 0.09024999999999928, 0.00849999999999973, 0.053999999999998494, 0.1092499999999994, 0.20650000000000013, 0.1399999999999988, 0.18624999999999936, 0.07099999999999795, 0.12224999999999753, 0.08425000000000082, 0.10124999999999851, 0.10899999999999999, 0.2810000000000006, 0.3047500000000003, 0.19350000000000023, 0.2270000000000003, 0.22100000000000186, 0.2550000000000008, 0.33500000000000085, 0.1952499999999997], zp_timestamp='2025-12-31T23:53:00')
2026-01-01T01:55:49.828 [DEBUG] [Thread-138516] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:55:49.901 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T01:55:52.791 [DEBUG] [Thread-138519 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:55:56.191 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:55:56.192 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:56:02.531 [DEBUG] [Thread-138520 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:56:07.842 [DEBUG] [Thread-138521 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:56:22.883 [DEBUG] [Thread-138522 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:56:37.920 [DEBUG] [Thread-138523 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:56:52.956 [DEBUG] [Thread-138524 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:56:56.394 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:56:56.395 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:57:02.602 [DEBUG] [Thread-138525 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:57:07.989 [DEBUG] [Thread-138526 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:57:23.021 [DEBUG] [Thread-138527 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:57:38.057 [DEBUG] [Thread-138528 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:57:53.088 [DEBUG] [Thread-138529 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:57:56.606 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:57:56.608 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:58:02.678 [DEBUG] [Thread-138530 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:58:05.269 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2026-01-01T01:58:08.124 [DEBUG] [Thread-138531 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:58:23.157 [DEBUG] [Thread-138532 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:58:35.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T01:58:35.285 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T01:58:35.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T01:58:36.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 1, 58, 21), 3.59, 78.7, 0.0, 14.31, 13.44, 0, 0, 0, 2, 0, 0),)
2026-01-01T01:58:36.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 01:58:21
2026-01-01T01:58:36.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T01:58:36.282 [DEBUG] [Thread-138533] [transport.py] [_log()] starting thread (client mode): 0xb6b177f0
2026-01-01T01:58:36.282 [DEBUG] [Thread-138533] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:58:36.303 [DEBUG] [Thread-138533] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T01:58:36.303 [INFO] [Thread-138533] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T01:58:36.307 [DEBUG] [Thread-138533] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:58:36.307 [DEBUG] [Thread-138533] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T01:58:36.307 [DEBUG] [Thread-138533] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:58:36.307 [DEBUG] [Thread-138533] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:58:36.307 [DEBUG] [Thread-138533] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:58:36.307 [DEBUG] [Thread-138533] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:58:36.307 [DEBUG] [Thread-138533] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:58:36.307 [DEBUG] [Thread-138533] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:58:36.307 [DEBUG] [Thread-138533] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:58:36.307 [DEBUG] [Thread-138533] [transport.py] [_log()] client lang: <none>
2026-01-01T01:58:36.307 [DEBUG] [Thread-138533] [transport.py] [_log()] server lang: <none>
2026-01-01T01:58:36.307 [DEBUG] [Thread-138533] [transport.py] [_log()] kex follows: False
2026-01-01T01:58:36.307 [DEBUG] [Thread-138533] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:58:36.307 [DEBUG] [Thread-138533] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:58:36.307 [DEBUG] [Thread-138533] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:58:36.307 [DEBUG] [Thread-138533] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:58:36.307 [DEBUG] [Thread-138533] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:58:36.307 [DEBUG] [Thread-138533] [transport.py] [_log()] Compression: none
2026-01-01T01:58:36.307 [DEBUG] [Thread-138533] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:58:36.325 [DEBUG] [Thread-138533] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:58:36.326 [DEBUG] [Thread-138533] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:58:36.326 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T01:58:36.327 [DEBUG] [Thread-138533] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T01:58:36.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:58:36.329 [DEBUG] [Thread-138533] [transport.py] [_log()] userauth is OK
2026-01-01T01:58:36.329 [DEBUG] [Thread-138533] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:58:36.329 [DEBUG] [Thread-138533] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:58:36.329 [DEBUG] [Thread-138533] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T01:58:36.329 [DEBUG] [Thread-138533] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:58:36.354 [INFO] [Thread-138533] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:58:36.354 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:58:36.956 [DEBUG] [Thread-138533] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:58:36.956 [DEBUG] [Thread-138533] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:58:36.957 [DEBUG] [Thread-138533] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T01:58:36.997 [DEBUG] [Thread-138533] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:58:36.997 [DEBUG] [Thread-138533] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:58:37.000 [DEBUG] [Thread-138533] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:58:37.014 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:58:37.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T01:58:37.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T01:58:37.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T01:58:37.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:58:37.024 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T01:58:37.024 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:58:37.024 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:58:37.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T01:58:37.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.998396 -999.00  +13.60   5.72     81  +10.50 1 1 1 2 1     0    0 3.18 0.00 ZNESW 8.6 5.7 210.7 12.7 14.3 -21.2 14.2 -20.8 14.0 -19.3 14.3 -20.2
2026-01-01T01:58:37.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T01:58:37.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T01:58:37.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.998396
2026-01-01T01:58:37.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T01:58:37.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T01:58:37.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T01:58:37.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T01:58:37.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T01:58:37.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T01:58:21', tmtdew=3.59, humidity=78.7, cloud=0.0, wind=14.31, temperature=13.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T01:58:21', seeing=0.92, atlas_timestamp='2025-12-31T23:57:41.414', atlas_cloud=1, atlas_rain=1, zp_data=[0.0337499999999995, 0.10125000000000028, 0.0832499999999996, 0.05149999999999899, 0.07150000000000034, 0.09224999999999994, 0.009999999999999787, 0.06425000000000125, 0.05000000000000071, 0.08999999999999986, 0.02624999999999922, 0.09800000000000075, 0.125, 0.0962499999999995, 0.05299999999999905, 0.0909999999999993, 0.1302500000000002, 0.25450000000000017, 0.10849999999999937, 0.18024999999999913, 0.10949999999999882, 0.09274999999999878, 0.0022500000000000853, 0.08474999999999966, 0.14199999999999768, 0.24600000000000044, 0.15075000000000038, 0.21899999999999942, 0.45500000000000007, 0.2190000000000012, 0.16500000000000092, 0.2394999999999996, 0.2497499999999988], zp_timestamp='2025-12-31T23:57:00')
2026-01-01T01:58:37.027 [DEBUG] [Thread-138533] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:58:37.107 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T01:58:37.120 [DEBUG] [Thread-138536] [transport.py] [_log()] starting thread (client mode): 0xb6b16b90
2026-01-01T01:58:37.120 [DEBUG] [Thread-138536] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:58:37.137 [DEBUG] [Thread-138536] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T01:58:37.137 [INFO] [Thread-138536] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T01:58:37.145 [DEBUG] [Thread-138536] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:58:37.145 [DEBUG] [Thread-138536] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T01:58:37.145 [DEBUG] [Thread-138536] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:58:37.145 [DEBUG] [Thread-138536] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:58:37.145 [DEBUG] [Thread-138536] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:58:37.145 [DEBUG] [Thread-138536] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:58:37.145 [DEBUG] [Thread-138536] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:58:37.145 [DEBUG] [Thread-138536] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:58:37.145 [DEBUG] [Thread-138536] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:58:37.145 [DEBUG] [Thread-138536] [transport.py] [_log()] client lang: <none>
2026-01-01T01:58:37.145 [DEBUG] [Thread-138536] [transport.py] [_log()] server lang: <none>
2026-01-01T01:58:37.145 [DEBUG] [Thread-138536] [transport.py] [_log()] kex follows: False
2026-01-01T01:58:37.145 [DEBUG] [Thread-138536] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:58:37.145 [DEBUG] [Thread-138536] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:58:37.146 [DEBUG] [Thread-138536] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:58:37.146 [DEBUG] [Thread-138536] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:58:37.146 [DEBUG] [Thread-138536] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:58:37.146 [DEBUG] [Thread-138536] [transport.py] [_log()] Compression: none
2026-01-01T01:58:37.146 [DEBUG] [Thread-138536] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:58:37.204 [DEBUG] [Thread-138536] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:58:37.204 [DEBUG] [Thread-138536] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:58:37.205 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T01:58:37.205 [DEBUG] [Thread-138536] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T01:58:37.206 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:58:37.260 [DEBUG] [Thread-138536] [transport.py] [_log()] userauth is OK
2026-01-01T01:58:37.260 [DEBUG] [Thread-138536] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:58:37.260 [DEBUG] [Thread-138536] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:58:37.261 [DEBUG] [Thread-138536] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T01:58:37.261 [DEBUG] [Thread-138536] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:58:37.280 [INFO] [Thread-138536] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:58:37.281 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T01:58:37.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:58:38.124 [DEBUG] [Thread-138536] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:58:38.124 [DEBUG] [Thread-138536] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:58:38.172 [DEBUG] [Thread-138536] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:58:38.172 [DEBUG] [Thread-138536] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:58:38.181 [DEBUG] [Thread-138536] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:58:38.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:58:38.191 [DEBUG] [Thread-138538 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:58:38.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T01:58:38.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T01:58:38.209 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:58:38.209 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:58:38.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:58:38.217 [DEBUG] [Thread-138536] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:58:53.247 [DEBUG] [Thread-138539 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:58:56.807 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:58:56.808 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:59:02.732 [DEBUG] [Thread-138540 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:59:08.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T01:59:08.239 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T01:59:08.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T01:59:08.276 [DEBUG] [Thread-138541 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:59:08.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 1, 58, 53), 3.53, 79.24, 0.0, 16.41, 13.41, 0, 0, 0, 2, 0, 0),)
2026-01-01T01:59:08.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 01:58:53
2026-01-01T01:59:09.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T01:59:09.225 [DEBUG] [Thread-138542] [transport.py] [_log()] starting thread (client mode): 0xb6b142e0
2026-01-01T01:59:09.225 [DEBUG] [Thread-138542] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:59:09.245 [DEBUG] [Thread-138542] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T01:59:09.246 [INFO] [Thread-138542] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T01:59:09.249 [DEBUG] [Thread-138542] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:59:09.249 [DEBUG] [Thread-138542] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T01:59:09.249 [DEBUG] [Thread-138542] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:59:09.249 [DEBUG] [Thread-138542] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:59:09.249 [DEBUG] [Thread-138542] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:59:09.249 [DEBUG] [Thread-138542] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:59:09.249 [DEBUG] [Thread-138542] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:59:09.249 [DEBUG] [Thread-138542] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:59:09.250 [DEBUG] [Thread-138542] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:59:09.250 [DEBUG] [Thread-138542] [transport.py] [_log()] client lang: <none>
2026-01-01T01:59:09.250 [DEBUG] [Thread-138542] [transport.py] [_log()] server lang: <none>
2026-01-01T01:59:09.250 [DEBUG] [Thread-138542] [transport.py] [_log()] kex follows: False
2026-01-01T01:59:09.250 [DEBUG] [Thread-138542] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:59:09.250 [DEBUG] [Thread-138542] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:59:09.250 [DEBUG] [Thread-138542] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:59:09.250 [DEBUG] [Thread-138542] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:59:09.250 [DEBUG] [Thread-138542] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:59:09.250 [DEBUG] [Thread-138542] [transport.py] [_log()] Compression: none
2026-01-01T01:59:09.250 [DEBUG] [Thread-138542] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:59:09.268 [DEBUG] [Thread-138542] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:59:09.269 [DEBUG] [Thread-138542] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:59:09.269 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T01:59:09.271 [DEBUG] [Thread-138542] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T01:59:09.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:59:09.272 [DEBUG] [Thread-138542] [transport.py] [_log()] userauth is OK
2026-01-01T01:59:09.273 [DEBUG] [Thread-138542] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:59:09.273 [DEBUG] [Thread-138542] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:59:09.273 [DEBUG] [Thread-138542] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T01:59:09.273 [DEBUG] [Thread-138542] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:59:09.287 [INFO] [Thread-138542] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:59:09.288 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:59:09.947 [DEBUG] [Thread-138542] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:59:09.948 [DEBUG] [Thread-138542] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:59:09.948 [DEBUG] [Thread-138542] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T01:59:09.989 [DEBUG] [Thread-138542] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:59:09.989 [DEBUG] [Thread-138542] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:59:09.991 [DEBUG] [Thread-138542] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:59:10.002 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:59:10.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T01:59:10.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T01:59:10.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T01:59:10.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:59:10.008 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T01:59:10.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:59:10.008 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:59:10.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T01:59:10.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.998743 -999.00  +13.60  11.43     81  +10.50 1 1 1 2 1     0    0 3.21 -0.66 ZNESW 7.0 11.4 206.6 14.2 14.3 -21.1 14.2 -21.0 14.0 -19.3 14.4 -20.2
2026-01-01T01:59:10.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T01:59:10.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T01:59:10.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.998743
2026-01-01T01:59:10.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T01:59:10.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T01:59:10.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T01:59:10.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T01:59:10.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T01:59:10.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T01:58:53', tmtdew=3.53, humidity=79.24, cloud=0.0, wind=16.41, temperature=13.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T01:58:54', seeing=0.78, atlas_timestamp='2025-12-31T23:58:11.395', atlas_cloud=1, atlas_rain=1, zp_data=[0.0337499999999995, 0.10125000000000028, 0.0832499999999996, 0.05149999999999899, 0.07150000000000034, 0.09224999999999994, 0.009999999999999787, 0.06425000000000125, 0.05000000000000071, 0.08999999999999986, 0.02624999999999922, 0.09800000000000075, 0.125, 0.0962499999999995, 0.05299999999999905, 0.0909999999999993, 0.1302500000000002, 0.25450000000000017, 0.10849999999999937, 0.18024999999999913, 0.10949999999999882, 0.09274999999999878, 0.0022500000000000853, 0.08474999999999966, 0.14199999999999768, 0.24600000000000044, 0.15075000000000038, 0.21899999999999942, 0.45500000000000007, 0.2190000000000012, 0.16500000000000092, 0.2394999999999996, 0.2497499999999988], zp_timestamp='2025-12-31T23:57:00')
2026-01-01T01:59:10.009 [DEBUG] [Thread-138542] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:59:10.083 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T01:59:10.097 [DEBUG] [Thread-138545] [transport.py] [_log()] starting thread (client mode): 0xb1744eb0
2026-01-01T01:59:10.097 [DEBUG] [Thread-138545] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:59:10.120 [DEBUG] [Thread-138545] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T01:59:10.120 [INFO] [Thread-138545] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T01:59:10.128 [DEBUG] [Thread-138545] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:59:10.128 [DEBUG] [Thread-138545] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T01:59:10.128 [DEBUG] [Thread-138545] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:59:10.128 [DEBUG] [Thread-138545] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:59:10.128 [DEBUG] [Thread-138545] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:59:10.128 [DEBUG] [Thread-138545] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:59:10.128 [DEBUG] [Thread-138545] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:59:10.129 [DEBUG] [Thread-138545] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:59:10.129 [DEBUG] [Thread-138545] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:59:10.129 [DEBUG] [Thread-138545] [transport.py] [_log()] client lang: <none>
2026-01-01T01:59:10.129 [DEBUG] [Thread-138545] [transport.py] [_log()] server lang: <none>
2026-01-01T01:59:10.129 [DEBUG] [Thread-138545] [transport.py] [_log()] kex follows: False
2026-01-01T01:59:10.129 [DEBUG] [Thread-138545] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:59:10.129 [DEBUG] [Thread-138545] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:59:10.129 [DEBUG] [Thread-138545] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:59:10.129 [DEBUG] [Thread-138545] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:59:10.129 [DEBUG] [Thread-138545] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:59:10.129 [DEBUG] [Thread-138545] [transport.py] [_log()] Compression: none
2026-01-01T01:59:10.129 [DEBUG] [Thread-138545] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:59:10.186 [DEBUG] [Thread-138545] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:59:10.187 [DEBUG] [Thread-138545] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:59:10.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T01:59:10.188 [DEBUG] [Thread-138545] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T01:59:10.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:59:10.242 [DEBUG] [Thread-138545] [transport.py] [_log()] userauth is OK
2026-01-01T01:59:10.242 [DEBUG] [Thread-138545] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:59:10.242 [DEBUG] [Thread-138545] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:59:10.243 [DEBUG] [Thread-138545] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T01:59:10.243 [DEBUG] [Thread-138545] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:59:10.261 [INFO] [Thread-138545] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:59:10.262 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T01:59:10.262 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:59:11.101 [DEBUG] [Thread-138545] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:59:11.102 [DEBUG] [Thread-138545] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:59:11.149 [DEBUG] [Thread-138545] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:59:11.149 [DEBUG] [Thread-138545] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:59:11.158 [DEBUG] [Thread-138545] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:59:11.167 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:59:11.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T01:59:11.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T01:59:11.186 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:59:11.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:59:11.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:59:11.195 [DEBUG] [Thread-138545] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:59:23.309 [DEBUG] [Thread-138547 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:59:38.356 [DEBUG] [Thread-138548 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:59:41.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T01:59:41.217 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T01:59:41.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T01:59:41.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 1, 59, 26), 3.52, 79.3, 0.0, 15.32, 13.43, 0, 0, 0, 2, 0, 0),)
2026-01-01T01:59:41.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 01:59:26
2026-01-01T01:59:42.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T01:59:42.262 [DEBUG] [Thread-138549] [transport.py] [_log()] starting thread (client mode): 0xb95b3040
2026-01-01T01:59:42.262 [DEBUG] [Thread-138549] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:59:42.282 [DEBUG] [Thread-138549] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T01:59:42.282 [INFO] [Thread-138549] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T01:59:42.284 [DEBUG] [Thread-138549] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:59:42.284 [DEBUG] [Thread-138549] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T01:59:42.284 [DEBUG] [Thread-138549] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:59:42.284 [DEBUG] [Thread-138549] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:59:42.284 [DEBUG] [Thread-138549] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:59:42.284 [DEBUG] [Thread-138549] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:59:42.284 [DEBUG] [Thread-138549] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:59:42.284 [DEBUG] [Thread-138549] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:59:42.284 [DEBUG] [Thread-138549] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:59:42.284 [DEBUG] [Thread-138549] [transport.py] [_log()] client lang: <none>
2026-01-01T01:59:42.284 [DEBUG] [Thread-138549] [transport.py] [_log()] server lang: <none>
2026-01-01T01:59:42.284 [DEBUG] [Thread-138549] [transport.py] [_log()] kex follows: False
2026-01-01T01:59:42.284 [DEBUG] [Thread-138549] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:59:42.284 [DEBUG] [Thread-138549] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:59:42.285 [DEBUG] [Thread-138549] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:59:42.285 [DEBUG] [Thread-138549] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:59:42.285 [DEBUG] [Thread-138549] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:59:42.285 [DEBUG] [Thread-138549] [transport.py] [_log()] Compression: none
2026-01-01T01:59:42.285 [DEBUG] [Thread-138549] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:59:42.293 [DEBUG] [Thread-138549] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:59:42.293 [DEBUG] [Thread-138549] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:59:42.293 [DEBUG] [Thread-138549] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T01:59:42.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T01:59:42.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:59:42.294 [DEBUG] [Thread-138549] [transport.py] [_log()] userauth is OK
2026-01-01T01:59:42.294 [DEBUG] [Thread-138549] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:59:42.294 [DEBUG] [Thread-138549] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:59:42.294 [DEBUG] [Thread-138549] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T01:59:42.294 [DEBUG] [Thread-138549] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:59:42.303 [INFO] [Thread-138549] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:59:42.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:59:42.941 [DEBUG] [Thread-138549] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:59:42.941 [DEBUG] [Thread-138549] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:59:42.941 [DEBUG] [Thread-138549] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T01:59:42.982 [DEBUG] [Thread-138549] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:59:42.982 [DEBUG] [Thread-138549] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:59:42.984 [DEBUG] [Thread-138549] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:59:42.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:59:42.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T01:59:42.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T01:59:42.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T01:59:43.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:59:43.001 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T01:59:43.001 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:59:43.001 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:59:43.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T01:59:43.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.999438 -999.00  +13.60   7.19     81  +10.50 1 1 1 2 1     0    0 3.19 -2.06 ZNESW 13.4 7.2 191.3 15.5 14.3 -21.0 14.2 -20.6 14.1 -19.2 14.3 -20.2
2026-01-01T01:59:43.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T01:59:43.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T01:59:43.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.999438
2026-01-01T01:59:43.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T01:59:43.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T01:59:43.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T01:59:43.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T01:59:43.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T01:59:43.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T01:59:26', tmtdew=3.52, humidity=79.3, cloud=0.0, wind=15.32, temperature=13.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T01:59:26', seeing=0.78, atlas_timestamp='2025-12-31T23:59:11.443', atlas_cloud=1, atlas_rain=1, zp_data=[0.0337499999999995, 0.10125000000000028, 0.0832499999999996, 0.05149999999999899, 0.07150000000000034, 0.09224999999999994, 0.009999999999999787, 0.06425000000000125, 0.05000000000000071, 0.08999999999999986, 0.02624999999999922, 0.09800000000000075, 0.125, 0.0962499999999995, 0.05299999999999905, 0.0909999999999993, 0.1302500000000002, 0.25450000000000017, 0.10849999999999937, 0.18024999999999913, 0.10949999999999882, 0.09274999999999878, 0.0022500000000000853, 0.08474999999999966, 0.14199999999999768, 0.24600000000000044, 0.15075000000000038, 0.21899999999999942, 0.45500000000000007, 0.2190000000000012, 0.16500000000000092, 0.2394999999999996, 0.2497499999999988], zp_timestamp='2025-12-31T23:57:00')
2026-01-01T01:59:43.003 [DEBUG] [Thread-138549] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:59:43.075 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T01:59:43.087 [DEBUG] [Thread-138552] [transport.py] [_log()] starting thread (client mode): 0xb95b2050
2026-01-01T01:59:43.087 [DEBUG] [Thread-138552] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T01:59:43.101 [DEBUG] [Thread-138552] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T01:59:43.101 [INFO] [Thread-138552] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T01:59:43.109 [DEBUG] [Thread-138552] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T01:59:43.109 [DEBUG] [Thread-138552] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T01:59:43.109 [DEBUG] [Thread-138552] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T01:59:43.109 [DEBUG] [Thread-138552] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:59:43.109 [DEBUG] [Thread-138552] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T01:59:43.109 [DEBUG] [Thread-138552] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:59:43.109 [DEBUG] [Thread-138552] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T01:59:43.109 [DEBUG] [Thread-138552] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T01:59:43.109 [DEBUG] [Thread-138552] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T01:59:43.109 [DEBUG] [Thread-138552] [transport.py] [_log()] client lang: <none>
2026-01-01T01:59:43.109 [DEBUG] [Thread-138552] [transport.py] [_log()] server lang: <none>
2026-01-01T01:59:43.109 [DEBUG] [Thread-138552] [transport.py] [_log()] kex follows: False
2026-01-01T01:59:43.109 [DEBUG] [Thread-138552] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T01:59:43.109 [DEBUG] [Thread-138552] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T01:59:43.109 [DEBUG] [Thread-138552] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T01:59:43.109 [DEBUG] [Thread-138552] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T01:59:43.109 [DEBUG] [Thread-138552] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T01:59:43.109 [DEBUG] [Thread-138552] [transport.py] [_log()] Compression: none
2026-01-01T01:59:43.109 [DEBUG] [Thread-138552] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T01:59:43.168 [DEBUG] [Thread-138552] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T01:59:43.168 [DEBUG] [Thread-138552] [transport.py] [_log()] Switch to new keys ...
2026-01-01T01:59:43.168 [DEBUG] [Thread-138552] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T01:59:43.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T01:59:43.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T01:59:43.227 [DEBUG] [Thread-138552] [transport.py] [_log()] userauth is OK
2026-01-01T01:59:43.227 [DEBUG] [Thread-138552] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T01:59:43.227 [DEBUG] [Thread-138552] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T01:59:43.227 [DEBUG] [Thread-138552] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T01:59:43.227 [DEBUG] [Thread-138552] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T01:59:43.244 [INFO] [Thread-138552] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T01:59:43.245 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T01:59:43.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T01:59:44.039 [DEBUG] [Thread-138552] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T01:59:44.039 [DEBUG] [Thread-138552] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T01:59:44.087 [DEBUG] [Thread-138552] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T01:59:44.087 [DEBUG] [Thread-138552] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T01:59:44.096 [DEBUG] [Thread-138552] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T01:59:44.107 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T01:59:44.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T01:59:44.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T01:59:44.124 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T01:59:44.125 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T01:59:44.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T01:59:44.133 [DEBUG] [Thread-138552] [transport.py] [_log()] EOF in transport thread
2026-01-01T01:59:53.387 [DEBUG] [Thread-138554 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:59:57.007 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T01:59:57.008 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:00:02.783 [DEBUG] [Thread-138555 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:00:08.438 [DEBUG] [Thread-138556 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:00:14.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T02:00:14.156 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T02:00: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
2026-01-01T02:00:14.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 1, 59, 58), 3.57, 79.29, 0.0, 13.02, 13.43, 0, 0, 0, 2, 0, 0),)
2026-01-01T02:00:14.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 01:59:58
2026-01-01T02:00:15.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T02:00:15.149 [DEBUG] [Thread-138557] [transport.py] [_log()] starting thread (client mode): 0xb95b3400
2026-01-01T02:00:15.149 [DEBUG] [Thread-138557] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:00:15.168 [DEBUG] [Thread-138557] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T02:00:15.169 [INFO] [Thread-138557] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T02:00:15.172 [DEBUG] [Thread-138557] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:00:15.172 [DEBUG] [Thread-138557] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T02:00:15.172 [DEBUG] [Thread-138557] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:00:15.172 [DEBUG] [Thread-138557] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:00:15.172 [DEBUG] [Thread-138557] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:00:15.172 [DEBUG] [Thread-138557] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:00:15.172 [DEBUG] [Thread-138557] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:00:15.172 [DEBUG] [Thread-138557] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:00:15.172 [DEBUG] [Thread-138557] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:00:15.172 [DEBUG] [Thread-138557] [transport.py] [_log()] client lang: <none>
2026-01-01T02:00:15.172 [DEBUG] [Thread-138557] [transport.py] [_log()] server lang: <none>
2026-01-01T02:00:15.172 [DEBUG] [Thread-138557] [transport.py] [_log()] kex follows: False
2026-01-01T02:00:15.172 [DEBUG] [Thread-138557] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:00:15.172 [DEBUG] [Thread-138557] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:00:15.172 [DEBUG] [Thread-138557] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:00:15.172 [DEBUG] [Thread-138557] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:00:15.172 [DEBUG] [Thread-138557] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:00:15.172 [DEBUG] [Thread-138557] [transport.py] [_log()] Compression: none
2026-01-01T02:00:15.172 [DEBUG] [Thread-138557] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:00:15.187 [DEBUG] [Thread-138557] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:00:15.188 [DEBUG] [Thread-138557] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:00:15.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T02:00:15.189 [DEBUG] [Thread-138557] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T02:00:15.190 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:00:15.191 [DEBUG] [Thread-138557] [transport.py] [_log()] userauth is OK
2026-01-01T02:00:15.191 [DEBUG] [Thread-138557] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:00:15.191 [DEBUG] [Thread-138557] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:00:15.191 [DEBUG] [Thread-138557] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T02:00:15.191 [DEBUG] [Thread-138557] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:00:15.216 [INFO] [Thread-138557] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:00:15.216 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:00:16.589 [DEBUG] [Thread-138557] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:00:16.590 [DEBUG] [Thread-138557] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:00:16.590 [DEBUG] [Thread-138557] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T02:00:16.630 [DEBUG] [Thread-138557] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:00:16.631 [DEBUG] [Thread-138557] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:00:16.633 [DEBUG] [Thread-138557] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:00:16.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:00:16.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T02:00:16.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T02:00:16.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T02:00:16.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:00:16.754 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T02:00:16.754 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:00:16.754 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:00:16.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T02:00:16.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61040.999785 -999.00  +13.50   6.88     81  +10.50 1 1 1 2 1     0    0 3.12 -3.00 ZNESW 6.8 6.9 212.0 14.4 14.4 -21.1 14.2 -20.6 14.0 -19.1 14.3 -20.2
2026-01-01T02:00:16.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T02:00:16.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T02:00:16.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61040.999785
2026-01-01T02:00:16.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T02:00:16.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T02:00:16.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T02:00:16.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T02:00:16.755 [DEBUG] [Thread-138557] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:00:16.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T02:00:16.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T01:59:58', tmtdew=3.57, humidity=79.29, cloud=0.0, wind=13.02, temperature=13.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T01:59:58', seeing=0.82, atlas_timestamp='2025-12-31T23:59:41.424', atlas_cloud=1, atlas_rain=1, zp_data=[0.0337499999999995, 0.10125000000000028, 0.0832499999999996, 0.05149999999999899, 0.07150000000000034, 0.09224999999999994, 0.009999999999999787, 0.06425000000000125, 0.05000000000000071, 0.08999999999999986, 0.02624999999999922, 0.09800000000000075, 0.125, 0.0962499999999995, 0.05299999999999905, 0.0909999999999993, 0.1302500000000002, 0.25450000000000017, 0.10849999999999937, 0.18024999999999913, 0.10949999999999882, 0.09274999999999878, 0.0022500000000000853, 0.08474999999999966, 0.14199999999999768, 0.24600000000000044, 0.15075000000000038, 0.21899999999999942, 0.45500000000000007, 0.2190000000000012, 0.16500000000000092, 0.2394999999999996, 0.2497499999999988], zp_timestamp='2025-12-31T23:57:00')
2026-01-01T02:00:16.830 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T02:00:16.842 [DEBUG] [Thread-138560] [transport.py] [_log()] starting thread (client mode): 0xb95b33a0
2026-01-01T02:00:16.842 [DEBUG] [Thread-138560] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:00:16.858 [DEBUG] [Thread-138560] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T02:00:16.858 [INFO] [Thread-138560] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T02:00:16.865 [DEBUG] [Thread-138560] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:00:16.865 [DEBUG] [Thread-138560] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T02:00:16.865 [DEBUG] [Thread-138560] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:00:16.865 [DEBUG] [Thread-138560] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:00:16.865 [DEBUG] [Thread-138560] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:00:16.865 [DEBUG] [Thread-138560] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:00:16.865 [DEBUG] [Thread-138560] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:00:16.865 [DEBUG] [Thread-138560] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:00:16.865 [DEBUG] [Thread-138560] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:00:16.865 [DEBUG] [Thread-138560] [transport.py] [_log()] client lang: <none>
2026-01-01T02:00:16.865 [DEBUG] [Thread-138560] [transport.py] [_log()] server lang: <none>
2026-01-01T02:00:16.865 [DEBUG] [Thread-138560] [transport.py] [_log()] kex follows: False
2026-01-01T02:00:16.865 [DEBUG] [Thread-138560] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:00:16.866 [DEBUG] [Thread-138560] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:00:16.866 [DEBUG] [Thread-138560] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:00:16.866 [DEBUG] [Thread-138560] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:00:16.866 [DEBUG] [Thread-138560] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:00:16.866 [DEBUG] [Thread-138560] [transport.py] [_log()] Compression: none
2026-01-01T02:00:16.866 [DEBUG] [Thread-138560] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:00:16.921 [DEBUG] [Thread-138560] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:00:16.922 [DEBUG] [Thread-138560] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:00:16.922 [DEBUG] [Thread-138560] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T02:00:16.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T02:00:16.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:00:16.979 [DEBUG] [Thread-138560] [transport.py] [_log()] userauth is OK
2026-01-01T02:00:16.979 [DEBUG] [Thread-138560] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:00:16.979 [DEBUG] [Thread-138560] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:00:16.979 [DEBUG] [Thread-138560] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T02:00:16.979 [DEBUG] [Thread-138560] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:00:16.993 [INFO] [Thread-138560] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:00:16.993 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T02:00:16.994 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:00:17.858 [DEBUG] [Thread-138560] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:00:17.858 [DEBUG] [Thread-138560] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:00:17.906 [DEBUG] [Thread-138560] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:00:17.906 [DEBUG] [Thread-138560] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:00:17.915 [DEBUG] [Thread-138560] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:00:17.922 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:00:17.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T02:00:17.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
2026-01-01T02:00:17.938 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:00:17.938 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:00:17.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:00:17.946 [DEBUG] [Thread-138560] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:00:23.471 [DEBUG] [Thread-138562 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:00:38.523 [DEBUG] [Thread-138563 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:00:47.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T02:00:47.969 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T02:00:47.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T02:00:48.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 2, 0, 30), 3.59, 79.19, 0.0, 13.99, 13.41, 0, 0, 0, 2, 0, 0),)
2026-01-01T02:00:48.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 02:00:30
2026-01-01T02:00:48.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T02:00:48.951 [DEBUG] [Thread-138564] [transport.py] [_log()] starting thread (client mode): 0xb6ba1ba0
2026-01-01T02:00:48.951 [DEBUG] [Thread-138564] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:00:48.972 [DEBUG] [Thread-138564] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T02:00:48.972 [INFO] [Thread-138564] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T02:00:48.975 [DEBUG] [Thread-138564] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:00:48.975 [DEBUG] [Thread-138564] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T02:00:48.975 [DEBUG] [Thread-138564] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:00:48.975 [DEBUG] [Thread-138564] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:00:48.975 [DEBUG] [Thread-138564] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:00:48.975 [DEBUG] [Thread-138564] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:00:48.975 [DEBUG] [Thread-138564] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:00:48.975 [DEBUG] [Thread-138564] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:00:48.975 [DEBUG] [Thread-138564] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:00:48.975 [DEBUG] [Thread-138564] [transport.py] [_log()] client lang: <none>
2026-01-01T02:00:48.975 [DEBUG] [Thread-138564] [transport.py] [_log()] server lang: <none>
2026-01-01T02:00:48.975 [DEBUG] [Thread-138564] [transport.py] [_log()] kex follows: False
2026-01-01T02:00:48.975 [DEBUG] [Thread-138564] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:00:48.976 [DEBUG] [Thread-138564] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:00:48.976 [DEBUG] [Thread-138564] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:00:48.976 [DEBUG] [Thread-138564] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:00:48.976 [DEBUG] [Thread-138564] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:00:48.976 [DEBUG] [Thread-138564] [transport.py] [_log()] Compression: none
2026-01-01T02:00:48.976 [DEBUG] [Thread-138564] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:00:48.995 [DEBUG] [Thread-138564] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:00:48.995 [DEBUG] [Thread-138564] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:00:48.996 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T02:00:48.996 [DEBUG] [Thread-138564] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T02:00:48.997 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:00:48.998 [DEBUG] [Thread-138564] [transport.py] [_log()] userauth is OK
2026-01-01T02:00:48.998 [DEBUG] [Thread-138564] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:00:48.998 [DEBUG] [Thread-138564] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:00:48.998 [DEBUG] [Thread-138564] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T02:00:48.998 [DEBUG] [Thread-138564] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:00:49.031 [INFO] [Thread-138564] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:00:49.032 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:00:49.687 [DEBUG] [Thread-138564] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:00:49.687 [DEBUG] [Thread-138564] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:00:49.688 [DEBUG] [Thread-138564] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T02:00:49.728 [DEBUG] [Thread-138564] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:00:49.728 [DEBUG] [Thread-138564] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:00:49.731 [DEBUG] [Thread-138564] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:00:49.744 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:00:49.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T02:00:49.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T02:00:49.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T02:00:49.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:00:49.755 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T02:00:49.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:00:49.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:00:49.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T02:00:49.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.000132 -999.00  +13.50   7.51     81  +10.50 1 1 1 2 1     0    0 -999.00 0.00 ZNESW 11.0 7.5 209.8 12.6 14.3 -20.9 14.2 -20.5 14.0 -19.1 14.3 -20.1
2026-01-01T02:00:49.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T02:00:49.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T02:00:49.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.000132
2026-01-01T02:00:49.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T02:00:49.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T02:00:49.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T02:00:49.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T02:00:49.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T02:00:49.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T02:00:30', tmtdew=3.59, humidity=79.19, cloud=0.0, wind=13.99, temperature=13.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T02:00:30', seeing=0.83, atlas_timestamp='2026-01-01T00:00:11.405', atlas_cloud=1, atlas_rain=1, zp_data=[0.07975000000000065, 0.19625000000000092, 0.12225000000000108, 0.08899999999999864, 0.09200000000000053, 0.0867500000000021, 0.07199999999999918, 0.09725000000000072, 0.19950000000000045, 0.20550000000000068, 0.0962499999999995, 0.10400000000000098, 0.15700000000000003, 0.13724999999999987, 0.0934999999999988, 0.0799999999999983, 0.18524999999999991, 0.2284999999999986, 0.1399999999999988, 0.17274999999999885, 0.2884999999999991, 0.27424999999999855, -0.010749999999998039, 0.1332500000000003, 0.17099999999999937, 0.20149999999999935, 0.20175000000000054, 0.2575000000000003, 0.4660000000000002, 0.025000000000000355, 0.21500000000000163, 0.28600000000000136, 0.2527499999999989], zp_timestamp='2025-12-31T23:59:00')
2026-01-01T02:00:49.758 [DEBUG] [Thread-138564] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:00:49.835 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T02:00:49.848 [DEBUG] [Thread-138567] [transport.py] [_log()] starting thread (client mode): 0xb6ba2020
2026-01-01T02:00:49.848 [DEBUG] [Thread-138567] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:00:49.863 [DEBUG] [Thread-138567] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T02:00:49.863 [INFO] [Thread-138567] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T02:00:49.870 [DEBUG] [Thread-138567] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:00:49.871 [DEBUG] [Thread-138567] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T02:00:49.871 [DEBUG] [Thread-138567] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:00:49.871 [DEBUG] [Thread-138567] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:00:49.871 [DEBUG] [Thread-138567] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:00:49.871 [DEBUG] [Thread-138567] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:00:49.871 [DEBUG] [Thread-138567] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:00:49.871 [DEBUG] [Thread-138567] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:00:49.871 [DEBUG] [Thread-138567] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:00:49.871 [DEBUG] [Thread-138567] [transport.py] [_log()] client lang: <none>
2026-01-01T02:00:49.871 [DEBUG] [Thread-138567] [transport.py] [_log()] server lang: <none>
2026-01-01T02:00:49.871 [DEBUG] [Thread-138567] [transport.py] [_log()] kex follows: False
2026-01-01T02:00:49.871 [DEBUG] [Thread-138567] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:00:49.871 [DEBUG] [Thread-138567] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:00:49.871 [DEBUG] [Thread-138567] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:00:49.871 [DEBUG] [Thread-138567] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:00:49.871 [DEBUG] [Thread-138567] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:00:49.871 [DEBUG] [Thread-138567] [transport.py] [_log()] Compression: none
2026-01-01T02:00:49.871 [DEBUG] [Thread-138567] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:00:49.930 [DEBUG] [Thread-138567] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:00:49.931 [DEBUG] [Thread-138567] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:00:49.931 [DEBUG] [Thread-138567] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T02:00:49.932 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T02:00:49.932 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:00:49.986 [DEBUG] [Thread-138567] [transport.py] [_log()] userauth is OK
2026-01-01T02:00:49.986 [DEBUG] [Thread-138567] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:00:49.986 [DEBUG] [Thread-138567] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:00:49.986 [DEBUG] [Thread-138567] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T02:00:49.987 [DEBUG] [Thread-138567] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:00:50.005 [INFO] [Thread-138567] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:00:50.005 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T02:00:50.006 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:00:50.918 [DEBUG] [Thread-138567] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:00:50.918 [DEBUG] [Thread-138567] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:00:50.966 [DEBUG] [Thread-138567] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:00:50.966 [DEBUG] [Thread-138567] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:00:50.976 [DEBUG] [Thread-138567] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:00:50.985 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:00:50.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T02:00:50.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T02:00:51.004 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:00:51.004 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:00:51.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:00:51.013 [DEBUG] [Thread-138567] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:00:53.564 [DEBUG] [Thread-138569 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:00:57.208 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:00:57.209 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:01:02.835 [DEBUG] [Thread-138570 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:01:08.622 [DEBUG] [Thread-138571 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:01:21.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T02:01:21.036 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T02:01:21.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T02:01:21.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 2, 1, 2), 3.59, 79.17, 0.0, 13.43, 13.41, 0, 0, 0, 2, 0, 0),)
2026-01-01T02:01:21.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 02:01:02
2026-01-01T02:01:21.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T02:01:22.036 [DEBUG] [Thread-138572] [transport.py] [_log()] starting thread (client mode): 0xb6ba0220
2026-01-01T02:01:22.037 [DEBUG] [Thread-138572] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:01:22.057 [DEBUG] [Thread-138572] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T02:01:22.057 [INFO] [Thread-138572] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T02:01:22.060 [DEBUG] [Thread-138572] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:01:22.060 [DEBUG] [Thread-138572] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T02:01:22.061 [DEBUG] [Thread-138572] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:01:22.061 [DEBUG] [Thread-138572] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:01:22.061 [DEBUG] [Thread-138572] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:01:22.061 [DEBUG] [Thread-138572] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:01:22.061 [DEBUG] [Thread-138572] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:01:22.061 [DEBUG] [Thread-138572] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:01:22.061 [DEBUG] [Thread-138572] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:01:22.061 [DEBUG] [Thread-138572] [transport.py] [_log()] client lang: <none>
2026-01-01T02:01:22.062 [DEBUG] [Thread-138572] [transport.py] [_log()] server lang: <none>
2026-01-01T02:01:22.062 [DEBUG] [Thread-138572] [transport.py] [_log()] kex follows: False
2026-01-01T02:01:22.062 [DEBUG] [Thread-138572] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:01:22.062 [DEBUG] [Thread-138572] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:01:22.062 [DEBUG] [Thread-138572] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:01:22.062 [DEBUG] [Thread-138572] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:01:22.062 [DEBUG] [Thread-138572] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:01:22.062 [DEBUG] [Thread-138572] [transport.py] [_log()] Compression: none
2026-01-01T02:01:22.063 [DEBUG] [Thread-138572] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:01:22.082 [DEBUG] [Thread-138572] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:01:22.083 [DEBUG] [Thread-138572] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:01:22.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T02:01:22.084 [DEBUG] [Thread-138572] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T02:01:22.085 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:01:22.086 [DEBUG] [Thread-138572] [transport.py] [_log()] userauth is OK
2026-01-01T02:01:22.087 [DEBUG] [Thread-138572] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:01:22.087 [DEBUG] [Thread-138572] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:01:22.087 [DEBUG] [Thread-138572] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T02:01:22.087 [DEBUG] [Thread-138572] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:01:22.113 [INFO] [Thread-138572] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:01:22.114 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:01:22.910 [DEBUG] [Thread-138572] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:01:22.910 [DEBUG] [Thread-138572] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:01:22.911 [DEBUG] [Thread-138572] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T02:01:22.951 [DEBUG] [Thread-138572] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:01:22.951 [DEBUG] [Thread-138572] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:01:22.958 [DEBUG] [Thread-138572] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:01:22.972 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:01:22.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T02:01:22.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T02:01:22.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T02:01:22.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:01:22.991 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T02:01:22.992 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:01:22.992 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:01:22.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T02:01:22.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.000479 -999.00  +13.50   9.19     81  +10.50 1 1 1 2 1     0    0 -999.00 0.00 ZNESW 8.3 9.2 202.0 14.4 14.3 -21.0 14.2 -20.6 14.0 -19.1 14.3 -20.1
2026-01-01T02:01:22.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T02:01:22.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T02:01:22.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.000479
2026-01-01T02:01:22.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T02:01:22.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T02:01:22.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T02:01:22.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T02:01:22.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T02:01:22.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T02:01:02', tmtdew=3.59, humidity=79.17, cloud=0.0, wind=13.43, temperature=13.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T02:01:02', seeing=0.96, atlas_timestamp='2026-01-01T00:00:41.386', atlas_cloud=1, atlas_rain=1, zp_data=[0.07975000000000065, 0.19625000000000092, 0.12225000000000108, 0.08899999999999864, 0.09200000000000053, 0.0867500000000021, 0.07199999999999918, 0.09725000000000072, 0.19950000000000045, 0.20550000000000068, 0.0962499999999995, 0.10400000000000098, 0.15700000000000003, 0.13724999999999987, 0.0934999999999988, 0.0799999999999983, 0.18524999999999991, 0.2284999999999986, 0.1399999999999988, 0.17274999999999885, 0.2884999999999991, 0.27424999999999855, -0.010749999999998039, 0.1332500000000003, 0.17099999999999937, 0.20149999999999935, 0.20175000000000054, 0.2575000000000003, 0.4660000000000002, 0.025000000000000355, 0.21500000000000163, 0.28600000000000136, 0.2527499999999989], zp_timestamp='2025-12-31T23:59:00')
2026-01-01T02:01:22.995 [DEBUG] [Thread-138572] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:01:23.083 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T02:01:23.094 [DEBUG] [Thread-138575] [transport.py] [_log()] starting thread (client mode): 0xb6b2a890
2026-01-01T02:01:23.094 [DEBUG] [Thread-138575] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:01:23.109 [DEBUG] [Thread-138575] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T02:01:23.109 [INFO] [Thread-138575] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T02:01:23.116 [DEBUG] [Thread-138575] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:01:23.117 [DEBUG] [Thread-138575] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T02:01:23.117 [DEBUG] [Thread-138575] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:01:23.117 [DEBUG] [Thread-138575] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:01:23.117 [DEBUG] [Thread-138575] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:01:23.117 [DEBUG] [Thread-138575] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:01:23.117 [DEBUG] [Thread-138575] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:01:23.117 [DEBUG] [Thread-138575] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:01:23.117 [DEBUG] [Thread-138575] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:01:23.117 [DEBUG] [Thread-138575] [transport.py] [_log()] client lang: <none>
2026-01-01T02:01:23.117 [DEBUG] [Thread-138575] [transport.py] [_log()] server lang: <none>
2026-01-01T02:01:23.117 [DEBUG] [Thread-138575] [transport.py] [_log()] kex follows: False
2026-01-01T02:01:23.117 [DEBUG] [Thread-138575] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:01:23.117 [DEBUG] [Thread-138575] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:01:23.117 [DEBUG] [Thread-138575] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:01:23.117 [DEBUG] [Thread-138575] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:01:23.117 [DEBUG] [Thread-138575] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:01:23.117 [DEBUG] [Thread-138575] [transport.py] [_log()] Compression: none
2026-01-01T02:01:23.117 [DEBUG] [Thread-138575] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:01:23.177 [DEBUG] [Thread-138575] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:01:23.177 [DEBUG] [Thread-138575] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:01:23.178 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T02:01:23.179 [DEBUG] [Thread-138575] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T02:01:23.180 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:01:23.233 [DEBUG] [Thread-138575] [transport.py] [_log()] userauth is OK
2026-01-01T02:01:23.234 [DEBUG] [Thread-138575] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:01:23.234 [DEBUG] [Thread-138575] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:01:23.234 [DEBUG] [Thread-138575] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T02:01:23.234 [DEBUG] [Thread-138575] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:01:23.253 [INFO] [Thread-138575] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:01:23.253 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T02:01:23.254 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:01:23.661 [DEBUG] [Thread-138577 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:01:24.080 [DEBUG] [Thread-138575] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:01:24.080 [DEBUG] [Thread-138575] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:01:24.128 [DEBUG] [Thread-138575] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:01:24.128 [DEBUG] [Thread-138575] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:01:24.137 [DEBUG] [Thread-138575] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:01:24.146 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:01:24.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T02:01:24.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T02:01:24.164 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:01:24.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:01:24.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:01:24.173 [DEBUG] [Thread-138575] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:01:38.706 [DEBUG] [Thread-138578 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:01:53.742 [DEBUG] [Thread-138579 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:01:54.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T02:01:54.193 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T02:01:54.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T02:01:54.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 2, 1, 34), 3.6, 79.14, 0.0, 13.08, 13.41, 0, 0, 0, 2, 0, 0),)
2026-01-01T02:01:54.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 02:01:34
2026-01-01T02:01:55.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T02:01:55.167 [DEBUG] [Thread-138580] [transport.py] [_log()] starting thread (client mode): 0xb17469e0
2026-01-01T02:01:55.168 [DEBUG] [Thread-138580] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:01:55.191 [DEBUG] [Thread-138580] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T02:01:55.191 [INFO] [Thread-138580] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T02:01:55.194 [DEBUG] [Thread-138580] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:01:55.195 [DEBUG] [Thread-138580] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T02:01:55.195 [DEBUG] [Thread-138580] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:01:55.195 [DEBUG] [Thread-138580] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:01:55.195 [DEBUG] [Thread-138580] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:01:55.195 [DEBUG] [Thread-138580] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:01:55.195 [DEBUG] [Thread-138580] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:01:55.195 [DEBUG] [Thread-138580] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:01:55.195 [DEBUG] [Thread-138580] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:01:55.195 [DEBUG] [Thread-138580] [transport.py] [_log()] client lang: <none>
2026-01-01T02:01:55.195 [DEBUG] [Thread-138580] [transport.py] [_log()] server lang: <none>
2026-01-01T02:01:55.195 [DEBUG] [Thread-138580] [transport.py] [_log()] kex follows: False
2026-01-01T02:01:55.195 [DEBUG] [Thread-138580] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:01:55.195 [DEBUG] [Thread-138580] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:01:55.195 [DEBUG] [Thread-138580] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:01:55.195 [DEBUG] [Thread-138580] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:01:55.195 [DEBUG] [Thread-138580] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:01:55.195 [DEBUG] [Thread-138580] [transport.py] [_log()] Compression: none
2026-01-01T02:01:55.195 [DEBUG] [Thread-138580] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:01:55.215 [DEBUG] [Thread-138580] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:01:55.215 [DEBUG] [Thread-138580] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:01:55.216 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T02:01:55.216 [DEBUG] [Thread-138580] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T02:01:55.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:01:55.218 [DEBUG] [Thread-138580] [transport.py] [_log()] userauth is OK
2026-01-01T02:01:55.218 [DEBUG] [Thread-138580] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:01:55.219 [DEBUG] [Thread-138580] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:01:55.219 [DEBUG] [Thread-138580] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T02:01:55.219 [DEBUG] [Thread-138580] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:01:55.257 [INFO] [Thread-138580] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:01:55.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:01:55.879 [DEBUG] [Thread-138580] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:01:55.879 [DEBUG] [Thread-138580] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:01:55.879 [DEBUG] [Thread-138580] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T02:01:55.920 [DEBUG] [Thread-138580] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:01:55.920 [DEBUG] [Thread-138580] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:01:55.924 [DEBUG] [Thread-138580] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:01:55.937 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:01:55.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T02:01:55.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T02:01:55.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T02:01:55.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:01:55.949 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T02:01:55.949 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:01:55.949 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:01:55.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T02:01:55.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.000827 -999.00  +13.50   6.83     81  +10.50 1 1 1 2 1     0    0 -999.00 0.00 ZNESW 3.6 6.8 200.4 14.2 14.3 -21.0 14.2 -20.6 14.0 -19.2 14.3 -20.3
2026-01-01T02:01:55.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T02:01:55.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T02:01:55.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.000827
2026-01-01T02:01:55.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T02:01:55.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T02:01:55.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T02:01:55.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T02:01:55.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T02:01:55.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T02:01:34', tmtdew=3.6, humidity=79.14, cloud=0.0, wind=13.08, temperature=13.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T02:01:34', seeing=0.96, atlas_timestamp='2026-01-01T00:01:11.453', atlas_cloud=1, atlas_rain=1, zp_data=[0.07975000000000065, 0.19625000000000092, 0.12225000000000108, 0.08899999999999864, 0.09200000000000053, 0.0867500000000021, 0.07199999999999918, 0.09725000000000072, 0.19950000000000045, 0.20550000000000068, 0.0962499999999995, 0.10400000000000098, 0.15700000000000003, 0.13724999999999987, 0.0934999999999988, 0.0799999999999983, 0.18524999999999991, 0.2284999999999986, 0.1399999999999988, 0.17274999999999885, 0.2884999999999991, 0.27424999999999855, -0.010749999999998039, 0.1332500000000003, 0.17099999999999937, 0.20149999999999935, 0.20175000000000054, 0.2575000000000003, 0.4660000000000002, 0.025000000000000355, 0.21500000000000163, 0.28600000000000136, 0.2527499999999989], zp_timestamp='2025-12-31T23:59:00')
2026-01-01T02:01:55.952 [DEBUG] [Thread-138580] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:01:56.039 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T02:01:56.051 [DEBUG] [Thread-138583] [transport.py] [_log()] starting thread (client mode): 0xb9559600
2026-01-01T02:01:56.051 [DEBUG] [Thread-138583] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:01:56.066 [DEBUG] [Thread-138583] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T02:01:56.066 [INFO] [Thread-138583] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T02:01:56.074 [DEBUG] [Thread-138583] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:01:56.074 [DEBUG] [Thread-138583] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T02:01:56.074 [DEBUG] [Thread-138583] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:01:56.074 [DEBUG] [Thread-138583] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:01:56.074 [DEBUG] [Thread-138583] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:01:56.074 [DEBUG] [Thread-138583] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:01:56.074 [DEBUG] [Thread-138583] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:01:56.074 [DEBUG] [Thread-138583] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:01:56.074 [DEBUG] [Thread-138583] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:01:56.075 [DEBUG] [Thread-138583] [transport.py] [_log()] client lang: <none>
2026-01-01T02:01:56.075 [DEBUG] [Thread-138583] [transport.py] [_log()] server lang: <none>
2026-01-01T02:01:56.075 [DEBUG] [Thread-138583] [transport.py] [_log()] kex follows: False
2026-01-01T02:01:56.075 [DEBUG] [Thread-138583] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:01:56.075 [DEBUG] [Thread-138583] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:01:56.075 [DEBUG] [Thread-138583] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:01:56.075 [DEBUG] [Thread-138583] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:01:56.075 [DEBUG] [Thread-138583] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:01:56.075 [DEBUG] [Thread-138583] [transport.py] [_log()] Compression: none
2026-01-01T02:01:56.075 [DEBUG] [Thread-138583] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:01:56.131 [DEBUG] [Thread-138583] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:01:56.132 [DEBUG] [Thread-138583] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:01:56.132 [DEBUG] [Thread-138583] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T02:01:56.133 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T02:01:56.133 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:01:56.190 [DEBUG] [Thread-138583] [transport.py] [_log()] userauth is OK
2026-01-01T02:01:56.190 [DEBUG] [Thread-138583] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:01:56.191 [DEBUG] [Thread-138583] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:01:56.191 [DEBUG] [Thread-138583] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T02:01:56.191 [DEBUG] [Thread-138583] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:01:56.211 [INFO] [Thread-138583] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:01:56.211 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T02:01:56.211 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:01:57.002 [DEBUG] [Thread-138583] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:01:57.002 [DEBUG] [Thread-138583] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:01:57.050 [DEBUG] [Thread-138583] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:01:57.050 [DEBUG] [Thread-138583] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:01:57.060 [DEBUG] [Thread-138583] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:01:57.069 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:01:57.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T02:01:57.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T02:01:57.088 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:01:57.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:01:57.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:01:57.097 [DEBUG] [Thread-138583] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:01:57.410 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:01:57.412 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:02:02.913 [DEBUG] [Thread-138585 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:02:08.778 [DEBUG] [Thread-138586 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:02:23.829 [DEBUG] [Thread-138587 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:02:27.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T02:02:27.091 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T02:02:27.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T02:02:27.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 2, 2, 6), 3.6, 79.15, 0.0, 13.82, 13.41, 0, 0, 0, 2, 0, 0),)
2026-01-01T02:02:27.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 02:02:06
2026-01-01T02:02:27.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T02:02:28.064 [DEBUG] [Thread-138588] [transport.py] [_log()] starting thread (client mode): 0xb9558dc0
2026-01-01T02:02:28.064 [DEBUG] [Thread-138588] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:02:28.085 [DEBUG] [Thread-138588] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T02:02:28.086 [INFO] [Thread-138588] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T02:02:28.089 [DEBUG] [Thread-138588] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:02:28.089 [DEBUG] [Thread-138588] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T02:02:28.089 [DEBUG] [Thread-138588] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:02:28.089 [DEBUG] [Thread-138588] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:02:28.089 [DEBUG] [Thread-138588] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:02:28.089 [DEBUG] [Thread-138588] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:02:28.089 [DEBUG] [Thread-138588] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:02:28.089 [DEBUG] [Thread-138588] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:02:28.089 [DEBUG] [Thread-138588] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:02:28.089 [DEBUG] [Thread-138588] [transport.py] [_log()] client lang: <none>
2026-01-01T02:02:28.090 [DEBUG] [Thread-138588] [transport.py] [_log()] server lang: <none>
2026-01-01T02:02:28.090 [DEBUG] [Thread-138588] [transport.py] [_log()] kex follows: False
2026-01-01T02:02:28.090 [DEBUG] [Thread-138588] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:02:28.090 [DEBUG] [Thread-138588] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:02:28.090 [DEBUG] [Thread-138588] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:02:28.090 [DEBUG] [Thread-138588] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:02:28.090 [DEBUG] [Thread-138588] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:02:28.090 [DEBUG] [Thread-138588] [transport.py] [_log()] Compression: none
2026-01-01T02:02:28.090 [DEBUG] [Thread-138588] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:02:28.108 [DEBUG] [Thread-138588] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:02:28.109 [DEBUG] [Thread-138588] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:02:28.109 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T02:02:28.110 [DEBUG] [Thread-138588] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T02:02:28.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:02:28.112 [DEBUG] [Thread-138588] [transport.py] [_log()] userauth is OK
2026-01-01T02:02:28.112 [DEBUG] [Thread-138588] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:02:28.112 [DEBUG] [Thread-138588] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:02:28.112 [DEBUG] [Thread-138588] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T02:02:28.112 [DEBUG] [Thread-138588] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:02:28.147 [INFO] [Thread-138588] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:02:28.147 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:02:28.946 [DEBUG] [Thread-138588] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:02:28.946 [DEBUG] [Thread-138588] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:02:28.946 [DEBUG] [Thread-138588] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T02:02:28.987 [DEBUG] [Thread-138588] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:02:28.987 [DEBUG] [Thread-138588] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:02:28.989 [DEBUG] [Thread-138588] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:02:29.002 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:02:29.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T02:02:29.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T02:02:29.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T02:02:29.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:02:29.011 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T02:02:29.011 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:02:29.011 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:02:29.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T02:02:29.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.001174 -999.00  +13.60   5.62     81  +10.50 1 1 1 2 1     0    0 -999.00 0.00 ZNESW 6.8 5.6 263.5 13.9 14.3 -21.0 14.2 -20.4 14.0 -19.1 14.3 -20.1
2026-01-01T02:02:29.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T02:02:29.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T02:02:29.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.001174
2026-01-01T02:02:29.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T02:02:29.012 [DEBUG] [Thread-138588] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:02:29.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T02:02:29.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T02:02:29.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T02:02:29.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T02:02:29.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T02:02:06', tmtdew=3.6, humidity=79.15, cloud=0.0, wind=13.82, temperature=13.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T02:02:06', seeing=0.89, atlas_timestamp='2026-01-01T00:01:41.434', atlas_cloud=1, atlas_rain=1, zp_data=[0.07975000000000065, 0.19625000000000092, 0.12225000000000108, 0.08899999999999864, 0.09200000000000053, 0.0867500000000021, 0.07199999999999918, 0.09725000000000072, 0.19950000000000045, 0.20550000000000068, 0.0962499999999995, 0.10400000000000098, 0.15700000000000003, 0.13724999999999987, 0.0934999999999988, 0.0799999999999983, 0.18524999999999991, 0.2284999999999986, 0.1399999999999988, 0.17274999999999885, 0.2884999999999991, 0.27424999999999855, -0.010749999999998039, 0.1332500000000003, 0.17099999999999937, 0.20149999999999935, 0.20175000000000054, 0.2575000000000003, 0.4660000000000002, 0.025000000000000355, 0.21500000000000163, 0.28600000000000136, 0.2527499999999989], zp_timestamp='2025-12-31T23:59:00')
2026-01-01T02:02:29.097 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T02:02:29.108 [DEBUG] [Thread-138591] [transport.py] [_log()] starting thread (client mode): 0xb6b009a0
2026-01-01T02:02:29.108 [DEBUG] [Thread-138591] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:02:29.123 [DEBUG] [Thread-138591] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T02:02:29.123 [INFO] [Thread-138591] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T02:02:29.131 [DEBUG] [Thread-138591] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:02:29.131 [DEBUG] [Thread-138591] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T02:02:29.131 [DEBUG] [Thread-138591] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:02:29.131 [DEBUG] [Thread-138591] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:02:29.131 [DEBUG] [Thread-138591] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:02:29.131 [DEBUG] [Thread-138591] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:02:29.131 [DEBUG] [Thread-138591] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:02:29.131 [DEBUG] [Thread-138591] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:02:29.131 [DEBUG] [Thread-138591] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:02:29.131 [DEBUG] [Thread-138591] [transport.py] [_log()] client lang: <none>
2026-01-01T02:02:29.131 [DEBUG] [Thread-138591] [transport.py] [_log()] server lang: <none>
2026-01-01T02:02:29.131 [DEBUG] [Thread-138591] [transport.py] [_log()] kex follows: False
2026-01-01T02:02:29.131 [DEBUG] [Thread-138591] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:02:29.131 [DEBUG] [Thread-138591] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:02:29.131 [DEBUG] [Thread-138591] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:02:29.131 [DEBUG] [Thread-138591] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:02:29.131 [DEBUG] [Thread-138591] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:02:29.132 [DEBUG] [Thread-138591] [transport.py] [_log()] Compression: none
2026-01-01T02:02:29.132 [DEBUG] [Thread-138591] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:02:29.191 [DEBUG] [Thread-138591] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:02:29.192 [DEBUG] [Thread-138591] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:02:29.192 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T02:02:29.193 [DEBUG] [Thread-138591] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T02:02:29.194 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:02:29.250 [DEBUG] [Thread-138591] [transport.py] [_log()] userauth is OK
2026-01-01T02:02:29.250 [DEBUG] [Thread-138591] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:02:29.250 [DEBUG] [Thread-138591] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:02:29.250 [DEBUG] [Thread-138591] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T02:02:29.250 [DEBUG] [Thread-138591] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:02:29.265 [INFO] [Thread-138591] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:02:29.265 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T02:02:29.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:02:30.142 [DEBUG] [Thread-138591] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:02:30.142 [DEBUG] [Thread-138591] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:02:30.190 [DEBUG] [Thread-138591] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:02:30.190 [DEBUG] [Thread-138591] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:02:30.198 [DEBUG] [Thread-138591] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:02:30.206 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:02:30.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T02:02:30.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T02:02:30.224 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:02:30.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:02:30.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:02:30.232 [DEBUG] [Thread-138591] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:02:38.864 [DEBUG] [Thread-138593 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:02:53.902 [DEBUG] [Thread-138594 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:02:57.610 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:02:57.611 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:03:00.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T02:03:00.225 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T02:03:00.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T02:03:00.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 2, 2, 38), 3.54, 79.19, 0.0, 12.44, 13.36, 0, 0, 0, 2, 0, 0),)
2026-01-01T02:03:00.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 02:02:38
2026-01-01T02:03:01.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T02:03:01.206 [DEBUG] [Thread-138595] [transport.py] [_log()] starting thread (client mode): 0xb6b024d0
2026-01-01T02:03:01.206 [DEBUG] [Thread-138595] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:03:01.226 [DEBUG] [Thread-138595] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T02:03:01.227 [INFO] [Thread-138595] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T02:03:01.228 [DEBUG] [Thread-138595] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:03:01.228 [DEBUG] [Thread-138595] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T02:03:01.228 [DEBUG] [Thread-138595] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:03:01.228 [DEBUG] [Thread-138595] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:03:01.228 [DEBUG] [Thread-138595] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:03:01.228 [DEBUG] [Thread-138595] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:03:01.228 [DEBUG] [Thread-138595] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:03:01.228 [DEBUG] [Thread-138595] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:03:01.228 [DEBUG] [Thread-138595] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:03:01.228 [DEBUG] [Thread-138595] [transport.py] [_log()] client lang: <none>
2026-01-01T02:03:01.228 [DEBUG] [Thread-138595] [transport.py] [_log()] server lang: <none>
2026-01-01T02:03:01.228 [DEBUG] [Thread-138595] [transport.py] [_log()] kex follows: False
2026-01-01T02:03:01.228 [DEBUG] [Thread-138595] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:03:01.228 [DEBUG] [Thread-138595] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:03:01.228 [DEBUG] [Thread-138595] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:03:01.228 [DEBUG] [Thread-138595] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:03:01.228 [DEBUG] [Thread-138595] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:03:01.228 [DEBUG] [Thread-138595] [transport.py] [_log()] Compression: none
2026-01-01T02:03:01.228 [DEBUG] [Thread-138595] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:03:01.247 [DEBUG] [Thread-138595] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:03:01.247 [DEBUG] [Thread-138595] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:03:01.248 [DEBUG] [Thread-138595] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T02:03:01.248 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T02:03:01.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:03:01.250 [DEBUG] [Thread-138595] [transport.py] [_log()] userauth is OK
2026-01-01T02:03:01.250 [DEBUG] [Thread-138595] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:03:01.250 [DEBUG] [Thread-138595] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:03:01.250 [DEBUG] [Thread-138595] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T02:03:01.250 [DEBUG] [Thread-138595] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:03:01.285 [INFO] [Thread-138595] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:03:01.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:03:01.883 [DEBUG] [Thread-138595] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:03:01.884 [DEBUG] [Thread-138595] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:03:01.884 [DEBUG] [Thread-138595] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T02:03:01.924 [DEBUG] [Thread-138595] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:03:01.925 [DEBUG] [Thread-138595] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:03:01.928 [DEBUG] [Thread-138595] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:03:01.939 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:03:01.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T02:03:01.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T02:03:01.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T02:03:01.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:03:01.952 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T02:03:01.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:03:01.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:03:01.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T02:03:01.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.001868 -999.00  +13.60   5.11     81  +10.40 1 1 1 2 1     0    0 -999.00 0.00 ZNESW 5.7 5.1 207.3 12.2 14.3 -21.1 14.1 -20.4 14.0 -19.1 14.3 -20.1
2026-01-01T02:03:01.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T02:03:01.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T02:03:01.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.001868
2026-01-01T02:03:01.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T02:03:01.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T02:03:01.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T02:03:01.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T02:03:01.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T02:03:01.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T02:02:38', tmtdew=3.54, humidity=79.19, cloud=0.0, wind=12.44, temperature=13.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T02:02:38', seeing=0.93, atlas_timestamp='2026-01-01T00:02:41.395', atlas_cloud=1, atlas_rain=1, zp_data=[0.07975000000000065, 0.19625000000000092, 0.12225000000000108, 0.08899999999999864, 0.09200000000000053, 0.0867500000000021, 0.07199999999999918, 0.09725000000000072, 0.19950000000000045, 0.20550000000000068, 0.0962499999999995, 0.10400000000000098, 0.15700000000000003, 0.13724999999999987, 0.0934999999999988, 0.0799999999999983, 0.18524999999999991, 0.2284999999999986, 0.1399999999999988, 0.17274999999999885, 0.2884999999999991, 0.27424999999999855, -0.010749999999998039, 0.1332500000000003, 0.17099999999999937, 0.20149999999999935, 0.20175000000000054, 0.2575000000000003, 0.4660000000000002, 0.025000000000000355, 0.21500000000000163, 0.28600000000000136, 0.2527499999999989], zp_timestamp='2025-12-31T23:59:00')
2026-01-01T02:03:01.955 [DEBUG] [Thread-138595] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:03:02.038 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T02:03:02.051 [DEBUG] [Thread-138598] [transport.py] [_log()] starting thread (client mode): 0xb6b01540
2026-01-01T02:03:02.051 [DEBUG] [Thread-138598] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:03:02.065 [DEBUG] [Thread-138598] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T02:03:02.066 [INFO] [Thread-138598] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T02:03:02.073 [DEBUG] [Thread-138598] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:03:02.073 [DEBUG] [Thread-138598] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T02:03:02.074 [DEBUG] [Thread-138598] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:03:02.074 [DEBUG] [Thread-138598] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:03:02.074 [DEBUG] [Thread-138598] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:03:02.074 [DEBUG] [Thread-138598] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:03:02.074 [DEBUG] [Thread-138598] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:03:02.074 [DEBUG] [Thread-138598] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:03:02.074 [DEBUG] [Thread-138598] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:03:02.074 [DEBUG] [Thread-138598] [transport.py] [_log()] client lang: <none>
2026-01-01T02:03:02.074 [DEBUG] [Thread-138598] [transport.py] [_log()] server lang: <none>
2026-01-01T02:03:02.074 [DEBUG] [Thread-138598] [transport.py] [_log()] kex follows: False
2026-01-01T02:03:02.074 [DEBUG] [Thread-138598] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:03:02.074 [DEBUG] [Thread-138598] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:03:02.074 [DEBUG] [Thread-138598] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:03:02.074 [DEBUG] [Thread-138598] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:03:02.074 [DEBUG] [Thread-138598] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:03:02.074 [DEBUG] [Thread-138598] [transport.py] [_log()] Compression: none
2026-01-01T02:03:02.074 [DEBUG] [Thread-138598] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:03:02.134 [DEBUG] [Thread-138598] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:03:02.134 [DEBUG] [Thread-138598] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:03:02.135 [DEBUG] [Thread-138598] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T02:03:02.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T02:03:02.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:03:02.192 [DEBUG] [Thread-138598] [transport.py] [_log()] userauth is OK
2026-01-01T02:03:02.193 [DEBUG] [Thread-138598] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:03:02.193 [DEBUG] [Thread-138598] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:03:02.193 [DEBUG] [Thread-138598] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T02:03:02.193 [DEBUG] [Thread-138598] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:03:02.211 [INFO] [Thread-138598] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:03:02.212 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T02:03:02.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:03:02.994 [DEBUG] [Thread-138600 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:03:03.036 [DEBUG] [Thread-138598] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:03:03.036 [DEBUG] [Thread-138598] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:03:03.084 [DEBUG] [Thread-138598] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:03:03.084 [DEBUG] [Thread-138598] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:03:03.093 [DEBUG] [Thread-138598] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:03:03.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:03:03.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T02:03:03.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T02:03:03.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:03:03.122 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:03:03.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:03:03.130 [DEBUG] [Thread-138598] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:03:08.935 [DEBUG] [Thread-138601 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:03:23.996 [DEBUG] [Thread-138602 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:03:33.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T02:03:33.152 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T02:03: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
2026-01-01T02:03:33.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 2, 3, 10), 3.56, 79.07, 0.0, 12.95, 13.33, 0, 0, 0, 2, 0, 0),)
2026-01-01T02:03:33.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 02:03:10
2026-01-01T02:03:33.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T02:03:34.141 [DEBUG] [Thread-138603] [transport.py] [_log()] starting thread (client mode): 0xb9559300
2026-01-01T02:03:34.141 [DEBUG] [Thread-138603] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:03:34.156 [DEBUG] [Thread-138603] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T02:03:34.156 [INFO] [Thread-138603] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T02:03:34.159 [DEBUG] [Thread-138603] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:03:34.159 [DEBUG] [Thread-138603] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T02:03:34.159 [DEBUG] [Thread-138603] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:03:34.159 [DEBUG] [Thread-138603] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:03:34.159 [DEBUG] [Thread-138603] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:03:34.159 [DEBUG] [Thread-138603] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:03:34.159 [DEBUG] [Thread-138603] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:03:34.159 [DEBUG] [Thread-138603] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:03:34.160 [DEBUG] [Thread-138603] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:03:34.160 [DEBUG] [Thread-138603] [transport.py] [_log()] client lang: <none>
2026-01-01T02:03:34.160 [DEBUG] [Thread-138603] [transport.py] [_log()] server lang: <none>
2026-01-01T02:03:34.160 [DEBUG] [Thread-138603] [transport.py] [_log()] kex follows: False
2026-01-01T02:03:34.160 [DEBUG] [Thread-138603] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:03:34.160 [DEBUG] [Thread-138603] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:03:34.160 [DEBUG] [Thread-138603] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:03:34.160 [DEBUG] [Thread-138603] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:03:34.160 [DEBUG] [Thread-138603] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:03:34.160 [DEBUG] [Thread-138603] [transport.py] [_log()] Compression: none
2026-01-01T02:03:34.160 [DEBUG] [Thread-138603] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:03:34.174 [DEBUG] [Thread-138603] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:03:34.174 [DEBUG] [Thread-138603] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:03:34.175 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T02:03:34.175 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:03:34.175 [DEBUG] [Thread-138603] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T02:03:34.175 [DEBUG] [Thread-138603] [transport.py] [_log()] userauth is OK
2026-01-01T02:03:34.176 [DEBUG] [Thread-138603] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:03:34.176 [DEBUG] [Thread-138603] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:03:34.176 [DEBUG] [Thread-138603] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T02:03:34.176 [DEBUG] [Thread-138603] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:03:34.185 [INFO] [Thread-138603] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:03:34.185 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:03:34.797 [DEBUG] [Thread-138603] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:03:34.797 [DEBUG] [Thread-138603] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:03:34.797 [DEBUG] [Thread-138603] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T02:03:34.839 [DEBUG] [Thread-138603] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:03:34.839 [DEBUG] [Thread-138603] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:03:34.841 [DEBUG] [Thread-138603] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:03:34.853 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:03:34.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T02:03:34.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T02:03:34.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T02:03:34.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:03:34.859 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T02:03:34.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:03:34.859 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:03:34.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T02:03:34.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.002216 -999.00  +13.50   8.94     81  +10.40 1 1 1 2 1     0    0 -999.00 0.00 ZNESW 8.4 8.9 206.8 12.9 14.3 -20.9 14.2 -20.6 13.9 -19.0 14.3 -20.2
2026-01-01T02:03:34.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T02:03:34.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T02:03:34.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.002216
2026-01-01T02:03:34.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T02:03:34.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T02:03:34.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T02:03:34.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T02:03:34.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T02:03:34.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T02:03:10', tmtdew=3.56, humidity=79.07, cloud=0.0, wind=12.95, temperature=13.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T02:03:10', seeing=0.91, atlas_timestamp='2026-01-01T00:03:11.462', atlas_cloud=1, atlas_rain=1, zp_data=[0.07975000000000065, 0.19625000000000092, 0.12225000000000108, 0.08899999999999864, 0.09200000000000053, 0.0867500000000021, 0.07199999999999918, 0.09725000000000072, 0.19950000000000045, 0.20550000000000068, 0.0962499999999995, 0.10400000000000098, 0.15700000000000003, 0.13724999999999987, 0.0934999999999988, 0.0799999999999983, 0.18524999999999991, 0.2284999999999986, 0.1399999999999988, 0.17274999999999885, 0.2884999999999991, 0.27424999999999855, -0.010749999999998039, 0.1332500000000003, 0.17099999999999937, 0.20149999999999935, 0.20175000000000054, 0.2575000000000003, 0.4660000000000002, 0.025000000000000355, 0.21500000000000163, 0.28600000000000136, 0.2527499999999989], zp_timestamp='2025-12-31T23:59:00')
2026-01-01T02:03:34.861 [DEBUG] [Thread-138603] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:03:34.934 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T02:03:34.946 [DEBUG] [Thread-138606] [transport.py] [_log()] starting thread (client mode): 0xb955b820
2026-01-01T02:03:34.946 [DEBUG] [Thread-138606] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:03:34.961 [DEBUG] [Thread-138606] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T02:03:34.961 [INFO] [Thread-138606] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T02:03:34.969 [DEBUG] [Thread-138606] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:03:34.969 [DEBUG] [Thread-138606] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T02:03:34.969 [DEBUG] [Thread-138606] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:03:34.969 [DEBUG] [Thread-138606] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:03:34.969 [DEBUG] [Thread-138606] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:03:34.969 [DEBUG] [Thread-138606] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:03:34.969 [DEBUG] [Thread-138606] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:03:34.969 [DEBUG] [Thread-138606] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:03:34.969 [DEBUG] [Thread-138606] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:03:34.969 [DEBUG] [Thread-138606] [transport.py] [_log()] client lang: <none>
2026-01-01T02:03:34.969 [DEBUG] [Thread-138606] [transport.py] [_log()] server lang: <none>
2026-01-01T02:03:34.969 [DEBUG] [Thread-138606] [transport.py] [_log()] kex follows: False
2026-01-01T02:03:34.969 [DEBUG] [Thread-138606] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:03:34.969 [DEBUG] [Thread-138606] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:03:34.969 [DEBUG] [Thread-138606] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:03:34.969 [DEBUG] [Thread-138606] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:03:34.969 [DEBUG] [Thread-138606] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:03:34.969 [DEBUG] [Thread-138606] [transport.py] [_log()] Compression: none
2026-01-01T02:03:34.969 [DEBUG] [Thread-138606] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:03:35.029 [DEBUG] [Thread-138606] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:03:35.029 [DEBUG] [Thread-138606] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:03:35.029 [DEBUG] [Thread-138606] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T02:03:35.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T02:03:35.030 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:03:35.084 [DEBUG] [Thread-138606] [transport.py] [_log()] userauth is OK
2026-01-01T02:03:35.084 [DEBUG] [Thread-138606] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:03:35.084 [DEBUG] [Thread-138606] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:03:35.084 [DEBUG] [Thread-138606] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T02:03:35.084 [DEBUG] [Thread-138606] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:03:35.098 [INFO] [Thread-138606] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:03:35.098 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T02:03:35.098 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:03:35.955 [DEBUG] [Thread-138606] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:03:35.955 [DEBUG] [Thread-138606] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:03:36.003 [DEBUG] [Thread-138606] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:03:36.003 [DEBUG] [Thread-138606] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:03:36.011 [DEBUG] [Thread-138606] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:03:36.019 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:03:36.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T02:03:36.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T02:03:36.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:03:36.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:03:36.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:03:36.043 [DEBUG] [Thread-138606] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:03:39.026 [DEBUG] [Thread-138608 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:03:54.080 [DEBUG] [Thread-138609 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:03:57.811 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:03:57.812 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:04:03.081 [DEBUG] [Thread-138610 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:04:06.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T02:04:06.066 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T02:04:06.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T02:04:06.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 2, 3, 42), 3.61, 79.07, 0.0, 13.71, 13.39, 0, 0, 0, 2, 0, 0),)
2026-01-01T02:04:06.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 02:03:42
2026-01-01T02:04:06.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T02:04:07.037 [DEBUG] [Thread-138611] [transport.py] [_log()] starting thread (client mode): 0xb955a140
2026-01-01T02:04:07.038 [DEBUG] [Thread-138611] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:04:07.057 [DEBUG] [Thread-138611] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T02:04:07.057 [INFO] [Thread-138611] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T02:04:07.061 [DEBUG] [Thread-138611] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:04:07.061 [DEBUG] [Thread-138611] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T02:04:07.061 [DEBUG] [Thread-138611] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:04:07.061 [DEBUG] [Thread-138611] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:04:07.061 [DEBUG] [Thread-138611] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:04:07.061 [DEBUG] [Thread-138611] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:04:07.061 [DEBUG] [Thread-138611] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:04:07.061 [DEBUG] [Thread-138611] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:04:07.061 [DEBUG] [Thread-138611] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:04:07.061 [DEBUG] [Thread-138611] [transport.py] [_log()] client lang: <none>
2026-01-01T02:04:07.061 [DEBUG] [Thread-138611] [transport.py] [_log()] server lang: <none>
2026-01-01T02:04:07.061 [DEBUG] [Thread-138611] [transport.py] [_log()] kex follows: False
2026-01-01T02:04:07.061 [DEBUG] [Thread-138611] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:04:07.061 [DEBUG] [Thread-138611] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:04:07.061 [DEBUG] [Thread-138611] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:04:07.062 [DEBUG] [Thread-138611] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:04:07.062 [DEBUG] [Thread-138611] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:04:07.062 [DEBUG] [Thread-138611] [transport.py] [_log()] Compression: none
2026-01-01T02:04:07.062 [DEBUG] [Thread-138611] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:04:07.078 [DEBUG] [Thread-138611] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:04:07.079 [DEBUG] [Thread-138611] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:04:07.080 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T02:04:07.080 [DEBUG] [Thread-138611] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T02:04:07.081 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:04:07.082 [DEBUG] [Thread-138611] [transport.py] [_log()] userauth is OK
2026-01-01T02:04:07.082 [DEBUG] [Thread-138611] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:04:07.082 [DEBUG] [Thread-138611] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:04:07.082 [DEBUG] [Thread-138611] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T02:04:07.082 [DEBUG] [Thread-138611] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:04:07.104 [INFO] [Thread-138611] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:04:07.104 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:04:07.742 [DEBUG] [Thread-138611] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:04:07.742 [DEBUG] [Thread-138611] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:04:07.743 [DEBUG] [Thread-138611] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T02:04:07.783 [DEBUG] [Thread-138611] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:04:07.783 [DEBUG] [Thread-138611] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:04:07.786 [DEBUG] [Thread-138611] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:04:07.798 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:04:07.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T02:04:07.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T02:04:07.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T02:04:07.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:04:07.811 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T02:04:07.811 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:04:07.811 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:04:07.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T02:04:07.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.002563 -999.00  +13.50   9.35     81  +10.40 1 1 1 2 1     0    0 -999.00 0.00 ZNESW 9.5 9.3 190.4 14.2 14.3 -21.0 14.2 -20.6 14.0 -19.1 14.3 -20.1
2026-01-01T02:04:07.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T02:04:07.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T02:04:07.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.002563
2026-01-01T02:04:07.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T02:04:07.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T02:04:07.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T02:04:07.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T02:04:07.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T02:04:07.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T02:03:42', tmtdew=3.61, humidity=79.07, cloud=0.0, wind=13.71, temperature=13.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T02:03:42', seeing=0.91, atlas_timestamp='2026-01-01T00:03:41.443', atlas_cloud=1, atlas_rain=1, zp_data=[0.07975000000000065, 0.19625000000000092, 0.12225000000000108, 0.08899999999999864, 0.09200000000000053, 0.0867500000000021, 0.07199999999999918, 0.09725000000000072, 0.19950000000000045, 0.20550000000000068, 0.0962499999999995, 0.10400000000000098, 0.15700000000000003, 0.13724999999999987, 0.0934999999999988, 0.0799999999999983, 0.18524999999999991, 0.2284999999999986, 0.1399999999999988, 0.17274999999999885, 0.2884999999999991, 0.27424999999999855, -0.010749999999998039, 0.1332500000000003, 0.17099999999999937, 0.20149999999999935, 0.20175000000000054, 0.2575000000000003, 0.4660000000000002, 0.025000000000000355, 0.21500000000000163, 0.28600000000000136, 0.2527499999999989], zp_timestamp='2026-01-01T00:02:00')
2026-01-01T02:04:07.814 [DEBUG] [Thread-138611] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:04:07.899 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T02:04:07.911 [DEBUG] [Thread-138614] [transport.py] [_log()] starting thread (client mode): 0xb955ad70
2026-01-01T02:04:07.911 [DEBUG] [Thread-138614] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:04:07.925 [DEBUG] [Thread-138614] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T02:04:07.926 [INFO] [Thread-138614] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T02:04:07.933 [DEBUG] [Thread-138614] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:04:07.934 [DEBUG] [Thread-138614] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T02:04:07.934 [DEBUG] [Thread-138614] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:04:07.934 [DEBUG] [Thread-138614] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:04:07.934 [DEBUG] [Thread-138614] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:04:07.934 [DEBUG] [Thread-138614] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:04:07.935 [DEBUG] [Thread-138614] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:04:07.935 [DEBUG] [Thread-138614] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:04:07.935 [DEBUG] [Thread-138614] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:04:07.935 [DEBUG] [Thread-138614] [transport.py] [_log()] client lang: <none>
2026-01-01T02:04:07.935 [DEBUG] [Thread-138614] [transport.py] [_log()] server lang: <none>
2026-01-01T02:04:07.935 [DEBUG] [Thread-138614] [transport.py] [_log()] kex follows: False
2026-01-01T02:04:07.935 [DEBUG] [Thread-138614] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:04:07.935 [DEBUG] [Thread-138614] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:04:07.935 [DEBUG] [Thread-138614] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:04:07.935 [DEBUG] [Thread-138614] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:04:07.935 [DEBUG] [Thread-138614] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:04:07.935 [DEBUG] [Thread-138614] [transport.py] [_log()] Compression: none
2026-01-01T02:04:07.935 [DEBUG] [Thread-138614] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:04:07.992 [DEBUG] [Thread-138614] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:04:07.992 [DEBUG] [Thread-138614] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:04:07.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T02:04:07.993 [DEBUG] [Thread-138614] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T02:04:07.994 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:04:08.047 [DEBUG] [Thread-138614] [transport.py] [_log()] userauth is OK
2026-01-01T02:04:08.047 [DEBUG] [Thread-138614] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:04:08.047 [DEBUG] [Thread-138614] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:04:08.047 [DEBUG] [Thread-138614] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T02:04:08.048 [DEBUG] [Thread-138614] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:04:08.065 [INFO] [Thread-138614] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:04:08.066 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T02:04:08.066 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:04:08.892 [DEBUG] [Thread-138614] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:04:08.893 [DEBUG] [Thread-138614] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:04:08.940 [DEBUG] [Thread-138614] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:04:08.941 [DEBUG] [Thread-138614] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:04:08.950 [DEBUG] [Thread-138614] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:04:08.959 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:04:08.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T02:04:08.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T02:04:08.978 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:04:08.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:04:08.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:04:08.987 [DEBUG] [Thread-138614] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:04:09.116 [DEBUG] [Thread-138616 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:04:24.161 [DEBUG] [Thread-138617 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:04:38.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T02:04:38.992 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T02:04:38.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T02:04:39.197 [DEBUG] [Thread-138618 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:04:39.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 2, 4, 14), 3.62, 79.05, 0.0, 13.71, 13.46, 0, 0, 0, 2, 0, 0),)
2026-01-01T02:04:39.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 02:04:14
2026-01-01T02:04:39.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T02:04:39.947 [DEBUG] [Thread-138619] [transport.py] [_log()] starting thread (client mode): 0xb955a500
2026-01-01T02:04:39.947 [DEBUG] [Thread-138619] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:04:39.967 [DEBUG] [Thread-138619] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T02:04:39.968 [INFO] [Thread-138619] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T02:04:39.971 [DEBUG] [Thread-138619] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:04:39.971 [DEBUG] [Thread-138619] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T02:04:39.971 [DEBUG] [Thread-138619] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:04:39.971 [DEBUG] [Thread-138619] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:04:39.971 [DEBUG] [Thread-138619] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:04:39.971 [DEBUG] [Thread-138619] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:04:39.971 [DEBUG] [Thread-138619] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:04:39.971 [DEBUG] [Thread-138619] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:04:39.971 [DEBUG] [Thread-138619] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:04:39.971 [DEBUG] [Thread-138619] [transport.py] [_log()] client lang: <none>
2026-01-01T02:04:39.971 [DEBUG] [Thread-138619] [transport.py] [_log()] server lang: <none>
2026-01-01T02:04:39.971 [DEBUG] [Thread-138619] [transport.py] [_log()] kex follows: False
2026-01-01T02:04:39.971 [DEBUG] [Thread-138619] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:04:39.971 [DEBUG] [Thread-138619] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:04:39.971 [DEBUG] [Thread-138619] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:04:39.971 [DEBUG] [Thread-138619] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:04:39.971 [DEBUG] [Thread-138619] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:04:39.971 [DEBUG] [Thread-138619] [transport.py] [_log()] Compression: none
2026-01-01T02:04:39.971 [DEBUG] [Thread-138619] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:04:39.988 [DEBUG] [Thread-138619] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:04:39.989 [DEBUG] [Thread-138619] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:04:39.989 [DEBUG] [Thread-138619] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T02:04:39.990 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T02:04:39.990 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:04:40.033 [DEBUG] [Thread-138619] [transport.py] [_log()] userauth is OK
2026-01-01T02:04:40.033 [DEBUG] [Thread-138619] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:04:40.033 [DEBUG] [Thread-138619] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:04:40.033 [DEBUG] [Thread-138619] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T02:04:40.033 [DEBUG] [Thread-138619] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:04:40.064 [INFO] [Thread-138619] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:04:40.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:04:40.720 [DEBUG] [Thread-138619] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:04:40.721 [DEBUG] [Thread-138619] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:04:40.721 [DEBUG] [Thread-138619] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T02:04:40.762 [DEBUG] [Thread-138619] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:04:40.762 [DEBUG] [Thread-138619] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:04:40.764 [DEBUG] [Thread-138619] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:04:40.774 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:04:40.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T02:04:40.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T02:04:40.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T02:04:40.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:04:40.782 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T02:04:40.782 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:04:40.782 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:04:40.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T02:04:40.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.002910 -999.00  +13.50   9.74     81  +10.40 1 1 1 2 1     0    0 -999.00 0.00 ZNESW 8.3 9.7 211.8 13.7 14.3 -20.9 14.2 -20.6 14.0 -19.0 14.3 -20.0
2026-01-01T02:04:40.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T02:04:40.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T02:04:40.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.002910
2026-01-01T02:04:40.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T02:04:40.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T02:04:40.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T02:04:40.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T02:04:40.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T02:04:40.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T02:04:14', tmtdew=3.62, humidity=79.05, cloud=0.0, wind=13.71, temperature=13.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T02:04:14', seeing=0.85, atlas_timestamp='2026-01-01T00:04:11.424', atlas_cloud=1, atlas_rain=1, zp_data=[0.07975000000000065, 0.19625000000000092, 0.12225000000000108, 0.08899999999999864, 0.09200000000000053, 0.0867500000000021, 0.07199999999999918, 0.09725000000000072, 0.19950000000000045, 0.20550000000000068, 0.0962499999999995, 0.10400000000000098, 0.15700000000000003, 0.13724999999999987, 0.0934999999999988, 0.0799999999999983, 0.18524999999999991, 0.2284999999999986, 0.1399999999999988, 0.17274999999999885, 0.2884999999999991, 0.27424999999999855, -0.010749999999998039, 0.1332500000000003, 0.17099999999999937, 0.20149999999999935, 0.20175000000000054, 0.2575000000000003, 0.4660000000000002, 0.025000000000000355, 0.21500000000000163, 0.28600000000000136, 0.2527499999999989], zp_timestamp='2026-01-01T00:02:00')
2026-01-01T02:04:40.785 [DEBUG] [Thread-138619] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:04:40.867 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T02:04:40.880 [DEBUG] [Thread-138622] [transport.py] [_log()] starting thread (client mode): 0xb9558280
2026-01-01T02:04:40.880 [DEBUG] [Thread-138622] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:04:40.895 [DEBUG] [Thread-138622] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T02:04:40.895 [INFO] [Thread-138622] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T02:04:40.902 [DEBUG] [Thread-138622] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:04:40.903 [DEBUG] [Thread-138622] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T02:04:40.903 [DEBUG] [Thread-138622] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:04:40.903 [DEBUG] [Thread-138622] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:04:40.903 [DEBUG] [Thread-138622] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:04:40.903 [DEBUG] [Thread-138622] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:04:40.903 [DEBUG] [Thread-138622] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:04:40.903 [DEBUG] [Thread-138622] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:04:40.903 [DEBUG] [Thread-138622] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:04:40.903 [DEBUG] [Thread-138622] [transport.py] [_log()] client lang: <none>
2026-01-01T02:04:40.903 [DEBUG] [Thread-138622] [transport.py] [_log()] server lang: <none>
2026-01-01T02:04:40.903 [DEBUG] [Thread-138622] [transport.py] [_log()] kex follows: False
2026-01-01T02:04:40.903 [DEBUG] [Thread-138622] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:04:40.903 [DEBUG] [Thread-138622] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:04:40.903 [DEBUG] [Thread-138622] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:04:40.903 [DEBUG] [Thread-138622] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:04:40.903 [DEBUG] [Thread-138622] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:04:40.903 [DEBUG] [Thread-138622] [transport.py] [_log()] Compression: none
2026-01-01T02:04:40.903 [DEBUG] [Thread-138622] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:04:40.963 [DEBUG] [Thread-138622] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:04:40.963 [DEBUG] [Thread-138622] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:04:40.964 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T02:04:40.964 [DEBUG] [Thread-138622] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T02:04:40.965 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:04:41.019 [DEBUG] [Thread-138622] [transport.py] [_log()] userauth is OK
2026-01-01T02:04:41.019 [DEBUG] [Thread-138622] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:04:41.019 [DEBUG] [Thread-138622] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:04:41.019 [DEBUG] [Thread-138622] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T02:04:41.019 [DEBUG] [Thread-138622] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:04:41.038 [INFO] [Thread-138622] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:04:41.039 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T02:04:41.039 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:04:41.869 [DEBUG] [Thread-138622] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:04:41.869 [DEBUG] [Thread-138622] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:04:41.917 [DEBUG] [Thread-138622] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:04:41.917 [DEBUG] [Thread-138622] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:04:41.926 [DEBUG] [Thread-138622] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:04:41.935 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:04:41.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T02:04:41.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T02:04:41.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:04:41.954 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:04:41.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:04:41.963 [DEBUG] [Thread-138622] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:04:54.222 [DEBUG] [Thread-138624 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:04:58.012 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:04:58.013 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:05:03.157 [DEBUG] [Thread-138625 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:05:09.264 [DEBUG] [Thread-138626 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:05:11.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T02:05:11.983 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T02:05:11.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T02:05:12.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 2, 4, 46), 3.63, 78.5, 0.0, 13.22, 13.44, 0, 0, 0, 2, 0, 0),)
2026-01-01T02:05:12.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 02:04:46
2026-01-01T02:05:12.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T02:05:12.965 [DEBUG] [Thread-138627] [transport.py] [_log()] starting thread (client mode): 0xb6b29720
2026-01-01T02:05:12.965 [DEBUG] [Thread-138627] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:05:12.985 [DEBUG] [Thread-138627] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T02:05:12.986 [INFO] [Thread-138627] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T02:05:12.988 [DEBUG] [Thread-138627] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:05:12.988 [DEBUG] [Thread-138627] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T02:05:12.988 [DEBUG] [Thread-138627] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:05:12.988 [DEBUG] [Thread-138627] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:05:12.989 [DEBUG] [Thread-138627] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:05:12.989 [DEBUG] [Thread-138627] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:05:12.989 [DEBUG] [Thread-138627] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:05:12.989 [DEBUG] [Thread-138627] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:05:12.989 [DEBUG] [Thread-138627] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:05:12.989 [DEBUG] [Thread-138627] [transport.py] [_log()] client lang: <none>
2026-01-01T02:05:12.989 [DEBUG] [Thread-138627] [transport.py] [_log()] server lang: <none>
2026-01-01T02:05:12.989 [DEBUG] [Thread-138627] [transport.py] [_log()] kex follows: False
2026-01-01T02:05:12.989 [DEBUG] [Thread-138627] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:05:12.989 [DEBUG] [Thread-138627] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:05:12.989 [DEBUG] [Thread-138627] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:05:12.989 [DEBUG] [Thread-138627] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:05:12.989 [DEBUG] [Thread-138627] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:05:12.989 [DEBUG] [Thread-138627] [transport.py] [_log()] Compression: none
2026-01-01T02:05:12.989 [DEBUG] [Thread-138627] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:05:13.005 [DEBUG] [Thread-138627] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:05:13.006 [DEBUG] [Thread-138627] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:05:13.007 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T02:05:13.007 [DEBUG] [Thread-138627] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T02:05:13.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:05:13.009 [DEBUG] [Thread-138627] [transport.py] [_log()] userauth is OK
2026-01-01T02:05:13.009 [DEBUG] [Thread-138627] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:05:13.009 [DEBUG] [Thread-138627] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:05:13.009 [DEBUG] [Thread-138627] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T02:05:13.010 [DEBUG] [Thread-138627] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:05:13.025 [INFO] [Thread-138627] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:05:13.026 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:05:13.671 [DEBUG] [Thread-138627] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:05:13.671 [DEBUG] [Thread-138627] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:05:13.672 [DEBUG] [Thread-138627] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T02:05:13.712 [DEBUG] [Thread-138627] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:05:13.712 [DEBUG] [Thread-138627] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:05:13.717 [DEBUG] [Thread-138627] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:05:13.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:05:13.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T02:05:13.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T02:05:13.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T02:05:13.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:05:13.740 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T02:05:13.740 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:05:13.740 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:05:13.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T02:05:13.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.003257 -999.00  +13.50  10.84     81  +10.40 1 1 1 2 1     0    0 -999.00 0.00 ZNESW 11.1 10.8 203.8 13.6 14.3 -20.9 14.2 -20.5 14.0 -19.0 14.3 -20.1
2026-01-01T02:05:13.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T02:05:13.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T02:05:13.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.003257
2026-01-01T02:05:13.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T02:05:13.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T02:05:13.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T02:05:13.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T02:05:13.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T02:05:13.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T02:04:46', tmtdew=3.63, humidity=78.5, cloud=0.0, wind=13.22, temperature=13.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T02:04:46', seeing=0.79, atlas_timestamp='2026-01-01T00:04:41.405', atlas_cloud=1, atlas_rain=1, zp_data=[0.07975000000000065, 0.19625000000000092, 0.12225000000000108, 0.08899999999999864, 0.09200000000000053, 0.0867500000000021, 0.07199999999999918, 0.09725000000000072, 0.19950000000000045, 0.20550000000000068, 0.0962499999999995, 0.10400000000000098, 0.15700000000000003, 0.13724999999999987, 0.0934999999999988, 0.0799999999999983, 0.18524999999999991, 0.2284999999999986, 0.1399999999999988, 0.17274999999999885, 0.2884999999999991, 0.27424999999999855, -0.010749999999998039, 0.1332500000000003, 0.17099999999999937, 0.20149999999999935, 0.20175000000000054, 0.2575000000000003, 0.4660000000000002, 0.025000000000000355, 0.21500000000000163, 0.28600000000000136, 0.2527499999999989], zp_timestamp='2026-01-01T00:02:00')
2026-01-01T02:05:13.743 [DEBUG] [Thread-138627] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:05:13.826 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T02:05:13.838 [DEBUG] [Thread-138630] [transport.py] [_log()] starting thread (client mode): 0xb6b28040
2026-01-01T02:05:13.838 [DEBUG] [Thread-138630] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:05:13.859 [DEBUG] [Thread-138630] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T02:05:13.859 [INFO] [Thread-138630] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T02:05:13.867 [DEBUG] [Thread-138630] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:05:13.867 [DEBUG] [Thread-138630] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T02:05:13.867 [DEBUG] [Thread-138630] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:05:13.868 [DEBUG] [Thread-138630] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:05:13.868 [DEBUG] [Thread-138630] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:05:13.868 [DEBUG] [Thread-138630] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:05:13.868 [DEBUG] [Thread-138630] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:05:13.868 [DEBUG] [Thread-138630] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:05:13.868 [DEBUG] [Thread-138630] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:05:13.868 [DEBUG] [Thread-138630] [transport.py] [_log()] client lang: <none>
2026-01-01T02:05:13.868 [DEBUG] [Thread-138630] [transport.py] [_log()] server lang: <none>
2026-01-01T02:05:13.868 [DEBUG] [Thread-138630] [transport.py] [_log()] kex follows: False
2026-01-01T02:05:13.868 [DEBUG] [Thread-138630] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:05:13.868 [DEBUG] [Thread-138630] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:05:13.868 [DEBUG] [Thread-138630] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:05:13.868 [DEBUG] [Thread-138630] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:05:13.868 [DEBUG] [Thread-138630] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:05:13.868 [DEBUG] [Thread-138630] [transport.py] [_log()] Compression: none
2026-01-01T02:05:13.869 [DEBUG] [Thread-138630] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:05:13.924 [DEBUG] [Thread-138630] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:05:13.925 [DEBUG] [Thread-138630] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:05:13.925 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T02:05:13.925 [DEBUG] [Thread-138630] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T02:05:13.926 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:05:13.982 [DEBUG] [Thread-138630] [transport.py] [_log()] userauth is OK
2026-01-01T02:05:13.982 [DEBUG] [Thread-138630] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:05:13.982 [DEBUG] [Thread-138630] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:05:13.982 [DEBUG] [Thread-138630] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T02:05:13.982 [DEBUG] [Thread-138630] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:05:14.002 [INFO] [Thread-138630] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:05:14.002 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T02:05:14.003 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:05:14.851 [DEBUG] [Thread-138630] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:05:14.851 [DEBUG] [Thread-138630] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:05:14.899 [DEBUG] [Thread-138630] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:05:14.899 [DEBUG] [Thread-138630] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:05:14.909 [DEBUG] [Thread-138630] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:05:14.919 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:05:14.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T02:05:14.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T02:05:14.937 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:05:14.938 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:05:14.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:05:14.946 [DEBUG] [Thread-138630] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:05:24.299 [DEBUG] [Thread-138632 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:05:39.349 [DEBUG] [Thread-138633 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:05:44.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T02:05:44.968 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T02:05:44.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T02:05:45.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 2, 5, 18), 3.64, 78.42, 0.0, 13.48, 13.39, 0, 0, 0, 2, 0, 0),)
2026-01-01T02:05:45.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 02:05:18
2026-01-01T02:05:45.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T02:05:45.954 [DEBUG] [Thread-138634] [transport.py] [_log()] starting thread (client mode): 0xb6b2a890
2026-01-01T02:05:45.954 [DEBUG] [Thread-138634] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:05:45.974 [DEBUG] [Thread-138634] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T02:05:45.974 [INFO] [Thread-138634] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T02:05:45.977 [DEBUG] [Thread-138634] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:05:45.977 [DEBUG] [Thread-138634] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T02:05:45.977 [DEBUG] [Thread-138634] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:05:45.977 [DEBUG] [Thread-138634] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:05:45.977 [DEBUG] [Thread-138634] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:05:45.977 [DEBUG] [Thread-138634] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:05:45.977 [DEBUG] [Thread-138634] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:05:45.977 [DEBUG] [Thread-138634] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:05:45.977 [DEBUG] [Thread-138634] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:05:45.977 [DEBUG] [Thread-138634] [transport.py] [_log()] client lang: <none>
2026-01-01T02:05:45.977 [DEBUG] [Thread-138634] [transport.py] [_log()] server lang: <none>
2026-01-01T02:05:45.977 [DEBUG] [Thread-138634] [transport.py] [_log()] kex follows: False
2026-01-01T02:05:45.977 [DEBUG] [Thread-138634] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:05:45.977 [DEBUG] [Thread-138634] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:05:45.977 [DEBUG] [Thread-138634] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:05:45.977 [DEBUG] [Thread-138634] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:05:45.977 [DEBUG] [Thread-138634] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:05:45.977 [DEBUG] [Thread-138634] [transport.py] [_log()] Compression: none
2026-01-01T02:05:45.977 [DEBUG] [Thread-138634] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:05:45.994 [DEBUG] [Thread-138634] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:05:45.995 [DEBUG] [Thread-138634] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:05:45.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T02:05:45.996 [DEBUG] [Thread-138634] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T02:05:45.997 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:05:45.998 [DEBUG] [Thread-138634] [transport.py] [_log()] userauth is OK
2026-01-01T02:05:45.999 [DEBUG] [Thread-138634] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:05:45.999 [DEBUG] [Thread-138634] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:05:45.999 [DEBUG] [Thread-138634] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T02:05:45.999 [DEBUG] [Thread-138634] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:05:46.028 [INFO] [Thread-138634] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:05:46.028 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:05:46.638 [DEBUG] [Thread-138634] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:05:46.639 [DEBUG] [Thread-138634] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:05:46.639 [DEBUG] [Thread-138634] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T02:05:46.681 [DEBUG] [Thread-138634] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:05:46.681 [DEBUG] [Thread-138634] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:05:46.685 [DEBUG] [Thread-138634] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:05:46.698 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:05:46.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T02:05:46.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T02:05:46.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T02:05:46.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:05:46.712 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T02:05:46.712 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:05:46.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:05:46.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T02:05:46.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.003257 -999.00  +13.50  10.84     81  +10.40 1 1 1 2 1     0    0 -999.00 0.00 ZNESW 11.1 10.8 203.8 13.6 14.3 -20.9 14.2 -20.5 14.0 -19.0 14.3 -20.1
2026-01-01T02:05:46.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T02:05:46.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T02:05:46.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.003257
2026-01-01T02:05:46.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T02:05:46.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T02:05:46.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T02:05:46.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T02:05:46.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T02:05:46.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T02:05:18', tmtdew=3.64, humidity=78.42, cloud=0.0, wind=13.48, temperature=13.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T02:05:19', seeing=1.25, atlas_timestamp='2026-01-01T00:04:41.405', atlas_cloud=1, atlas_rain=1, zp_data=[0.07975000000000065, 0.19625000000000092, 0.12225000000000108, 0.08899999999999864, 0.09200000000000053, 0.0867500000000021, 0.07199999999999918, 0.09725000000000072, 0.19950000000000045, 0.20550000000000068, 0.0962499999999995, 0.10400000000000098, 0.15700000000000003, 0.13724999999999987, 0.0934999999999988, 0.0799999999999983, 0.18524999999999991, 0.2284999999999986, 0.1399999999999988, 0.17274999999999885, 0.2884999999999991, 0.27424999999999855, -0.010749999999998039, 0.1332500000000003, 0.17099999999999937, 0.20149999999999935, 0.20175000000000054, 0.2575000000000003, 0.4660000000000002, 0.025000000000000355, 0.21500000000000163, 0.28600000000000136, 0.2527499999999989], zp_timestamp='2026-01-01T00:02:00')
2026-01-01T02:05:46.715 [DEBUG] [Thread-138634] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:05:46.800 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T02:05:46.810 [DEBUG] [Thread-138637] [transport.py] [_log()] starting thread (client mode): 0xb6bbd2d0
2026-01-01T02:05:46.810 [DEBUG] [Thread-138637] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:05:46.825 [DEBUG] [Thread-138637] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T02:05:46.825 [INFO] [Thread-138637] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T02:05:46.832 [DEBUG] [Thread-138637] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:05:46.832 [DEBUG] [Thread-138637] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T02:05:46.832 [DEBUG] [Thread-138637] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:05:46.832 [DEBUG] [Thread-138637] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:05:46.832 [DEBUG] [Thread-138637] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:05:46.832 [DEBUG] [Thread-138637] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:05:46.832 [DEBUG] [Thread-138637] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:05:46.832 [DEBUG] [Thread-138637] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:05:46.832 [DEBUG] [Thread-138637] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:05:46.833 [DEBUG] [Thread-138637] [transport.py] [_log()] client lang: <none>
2026-01-01T02:05:46.833 [DEBUG] [Thread-138637] [transport.py] [_log()] server lang: <none>
2026-01-01T02:05:46.833 [DEBUG] [Thread-138637] [transport.py] [_log()] kex follows: False
2026-01-01T02:05:46.833 [DEBUG] [Thread-138637] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:05:46.833 [DEBUG] [Thread-138637] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:05:46.833 [DEBUG] [Thread-138637] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:05:46.833 [DEBUG] [Thread-138637] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:05:46.833 [DEBUG] [Thread-138637] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:05:46.833 [DEBUG] [Thread-138637] [transport.py] [_log()] Compression: none
2026-01-01T02:05:46.833 [DEBUG] [Thread-138637] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:05:46.888 [DEBUG] [Thread-138637] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:05:46.888 [DEBUG] [Thread-138637] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:05:46.889 [DEBUG] [Thread-138637] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T02:05:46.889 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T02:05:46.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:05:46.949 [DEBUG] [Thread-138637] [transport.py] [_log()] userauth is OK
2026-01-01T02:05:46.949 [DEBUG] [Thread-138637] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:05:46.949 [DEBUG] [Thread-138637] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:05:46.949 [DEBUG] [Thread-138637] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T02:05:46.949 [DEBUG] [Thread-138637] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:05:46.967 [INFO] [Thread-138637] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:05:46.967 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T02:05:46.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:05:47.820 [DEBUG] [Thread-138637] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:05:47.820 [DEBUG] [Thread-138637] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:05:47.868 [DEBUG] [Thread-138637] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:05:47.869 [DEBUG] [Thread-138637] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:05:47.877 [DEBUG] [Thread-138637] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:05:47.886 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:05:47.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T02:05:47.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T02:05:47.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:05:47.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:05:47.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:05:47.911 [DEBUG] [Thread-138637] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:05:54.381 [DEBUG] [Thread-138639 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:05:58.216 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:05:58.217 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:06:03.241 [DEBUG] [Thread-138640 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:06:09.428 [DEBUG] [Thread-138641 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:06:17.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T02:06:17.918 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T02:06:17.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T02:06:18.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 2, 5, 51), 3.64, 78.42, 0.0, 13.0, 13.44, 0, 0, 0, 2, 0, 0),)
2026-01-01T02:06:18.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 02:05:51
2026-01-01T02:06:18.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T02:06:18.906 [DEBUG] [Thread-138642] [transport.py] [_log()] starting thread (client mode): 0xb6b2b070
2026-01-01T02:06:18.906 [DEBUG] [Thread-138642] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:06:18.928 [DEBUG] [Thread-138642] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T02:06:18.929 [INFO] [Thread-138642] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T02:06:18.932 [DEBUG] [Thread-138642] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:06:18.933 [DEBUG] [Thread-138642] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T02:06:18.933 [DEBUG] [Thread-138642] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:06:18.933 [DEBUG] [Thread-138642] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:06:18.933 [DEBUG] [Thread-138642] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:06:18.933 [DEBUG] [Thread-138642] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:06:18.933 [DEBUG] [Thread-138642] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:06:18.933 [DEBUG] [Thread-138642] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:06:18.933 [DEBUG] [Thread-138642] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:06:18.933 [DEBUG] [Thread-138642] [transport.py] [_log()] client lang: <none>
2026-01-01T02:06:18.933 [DEBUG] [Thread-138642] [transport.py] [_log()] server lang: <none>
2026-01-01T02:06:18.933 [DEBUG] [Thread-138642] [transport.py] [_log()] kex follows: False
2026-01-01T02:06:18.933 [DEBUG] [Thread-138642] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:06:18.933 [DEBUG] [Thread-138642] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:06:18.933 [DEBUG] [Thread-138642] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:06:18.933 [DEBUG] [Thread-138642] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:06:18.933 [DEBUG] [Thread-138642] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:06:18.933 [DEBUG] [Thread-138642] [transport.py] [_log()] Compression: none
2026-01-01T02:06:18.933 [DEBUG] [Thread-138642] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:06:18.950 [DEBUG] [Thread-138642] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:06:18.951 [DEBUG] [Thread-138642] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:06:18.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T02:06:18.952 [DEBUG] [Thread-138642] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T02:06:18.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:06:18.954 [DEBUG] [Thread-138642] [transport.py] [_log()] userauth is OK
2026-01-01T02:06:18.955 [DEBUG] [Thread-138642] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:06:18.955 [DEBUG] [Thread-138642] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:06:18.955 [DEBUG] [Thread-138642] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T02:06:18.955 [DEBUG] [Thread-138642] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:06:18.980 [INFO] [Thread-138642] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:06:18.981 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:06:19.710 [DEBUG] [Thread-138642] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:06:19.711 [DEBUG] [Thread-138642] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:06:19.711 [DEBUG] [Thread-138642] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T02:06:19.751 [DEBUG] [Thread-138642] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:06:19.751 [DEBUG] [Thread-138642] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:06:19.754 [DEBUG] [Thread-138642] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:06:19.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:06:19.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T02:06:19.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T02:06:19.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T02:06:19.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:06:19.777 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T02:06:19.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:06:19.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:06:19.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T02:06:19.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.003951 -999.00  +13.50   4.32     81  +10.40 1 1 1 2 1     0    0 -999.00 0.00 ZNESW 7.9 4.3 248.1 15.3 14.3 -20.8 14.2 -20.4 13.9 -19.0 14.2 -20.1
2026-01-01T02:06:19.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T02:06:19.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T02:06:19.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.003951
2026-01-01T02:06:19.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T02:06:19.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T02:06:19.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T02:06:19.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T02:06:19.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T02:06:19.779 [DEBUG] [Thread-138642] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:06:19.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T02:05:51', tmtdew=3.64, humidity=78.42, cloud=0.0, wind=13.0, temperature=13.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T02:05:51', seeing=0.91, atlas_timestamp='2026-01-01T00:05:41.366', atlas_cloud=1, atlas_rain=1, zp_data=[0.07975000000000065, 0.19625000000000092, 0.12225000000000108, 0.08899999999999864, 0.09200000000000053, 0.0867500000000021, 0.07199999999999918, 0.09725000000000072, 0.19950000000000045, 0.20550000000000068, 0.0962499999999995, 0.10400000000000098, 0.15700000000000003, 0.13724999999999987, 0.0934999999999988, 0.0799999999999983, 0.18524999999999991, 0.2284999999999986, 0.1399999999999988, 0.17274999999999885, 0.2884999999999991, 0.27424999999999855, -0.010749999999998039, 0.1332500000000003, 0.17099999999999937, 0.20149999999999935, 0.20175000000000054, 0.2575000000000003, 0.4660000000000002, 0.025000000000000355, 0.21500000000000163, 0.28600000000000136, 0.2527499999999989], zp_timestamp='2026-01-01T00:02:00')
2026-01-01T02:06:19.861 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T02:06:19.876 [DEBUG] [Thread-138645] [transport.py] [_log()] starting thread (client mode): 0xb6b29ff0
2026-01-01T02:06:19.876 [DEBUG] [Thread-138645] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:06:19.893 [DEBUG] [Thread-138645] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T02:06:19.893 [INFO] [Thread-138645] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T02:06:19.901 [DEBUG] [Thread-138645] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:06:19.901 [DEBUG] [Thread-138645] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T02:06:19.901 [DEBUG] [Thread-138645] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:06:19.901 [DEBUG] [Thread-138645] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:06:19.901 [DEBUG] [Thread-138645] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:06:19.901 [DEBUG] [Thread-138645] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:06:19.902 [DEBUG] [Thread-138645] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:06:19.902 [DEBUG] [Thread-138645] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:06:19.902 [DEBUG] [Thread-138645] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:06:19.902 [DEBUG] [Thread-138645] [transport.py] [_log()] client lang: <none>
2026-01-01T02:06:19.902 [DEBUG] [Thread-138645] [transport.py] [_log()] server lang: <none>
2026-01-01T02:06:19.902 [DEBUG] [Thread-138645] [transport.py] [_log()] kex follows: False
2026-01-01T02:06:19.902 [DEBUG] [Thread-138645] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:06:19.902 [DEBUG] [Thread-138645] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:06:19.902 [DEBUG] [Thread-138645] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:06:19.902 [DEBUG] [Thread-138645] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:06:19.902 [DEBUG] [Thread-138645] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:06:19.902 [DEBUG] [Thread-138645] [transport.py] [_log()] Compression: none
2026-01-01T02:06:19.902 [DEBUG] [Thread-138645] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:06:19.961 [DEBUG] [Thread-138645] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:06:19.961 [DEBUG] [Thread-138645] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:06:19.962 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T02:06:19.962 [DEBUG] [Thread-138645] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T02:06:19.963 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:06:20.021 [DEBUG] [Thread-138645] [transport.py] [_log()] userauth is OK
2026-01-01T02:06:20.021 [DEBUG] [Thread-138645] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:06:20.021 [DEBUG] [Thread-138645] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:06:20.021 [DEBUG] [Thread-138645] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T02:06:20.022 [DEBUG] [Thread-138645] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:06:20.040 [INFO] [Thread-138645] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:06:20.040 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T02:06:20.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:06:20.850 [DEBUG] [Thread-138645] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:06:20.850 [DEBUG] [Thread-138645] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:06:20.898 [DEBUG] [Thread-138645] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:06:20.898 [DEBUG] [Thread-138645] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:06:20.908 [DEBUG] [Thread-138645] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:06:20.920 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:06:20.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T02:06:20.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T02:06:20.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:06:20.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:06:20.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:06:20.953 [DEBUG] [Thread-138645] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:06:24.456 [DEBUG] [Thread-138647 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:06:39.498 [DEBUG] [Thread-138648 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:06:50.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T02:06:50.975 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T02:06:50.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T02:06:51.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 2, 6, 23), 3.65, 78.39, 0.0, 12.72, 13.43, 0, 0, 0, 2, 0, 0),)
2026-01-01T02:06:51.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 02:06:23
2026-01-01T02:06:51.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T02:06:52.006 [DEBUG] [Thread-138649] [transport.py] [_log()] starting thread (client mode): 0xb955abf0
2026-01-01T02:06:52.006 [DEBUG] [Thread-138649] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:06:52.026 [DEBUG] [Thread-138649] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T02:06:52.026 [INFO] [Thread-138649] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T02:06:52.029 [DEBUG] [Thread-138649] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:06:52.029 [DEBUG] [Thread-138649] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T02:06:52.029 [DEBUG] [Thread-138649] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:06:52.029 [DEBUG] [Thread-138649] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:06:52.029 [DEBUG] [Thread-138649] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:06:52.029 [DEBUG] [Thread-138649] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:06:52.029 [DEBUG] [Thread-138649] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:06:52.029 [DEBUG] [Thread-138649] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:06:52.029 [DEBUG] [Thread-138649] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:06:52.029 [DEBUG] [Thread-138649] [transport.py] [_log()] client lang: <none>
2026-01-01T02:06:52.029 [DEBUG] [Thread-138649] [transport.py] [_log()] server lang: <none>
2026-01-01T02:06:52.029 [DEBUG] [Thread-138649] [transport.py] [_log()] kex follows: False
2026-01-01T02:06:52.029 [DEBUG] [Thread-138649] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:06:52.029 [DEBUG] [Thread-138649] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:06:52.029 [DEBUG] [Thread-138649] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:06:52.029 [DEBUG] [Thread-138649] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:06:52.029 [DEBUG] [Thread-138649] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:06:52.029 [DEBUG] [Thread-138649] [transport.py] [_log()] Compression: none
2026-01-01T02:06:52.029 [DEBUG] [Thread-138649] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:06:52.045 [DEBUG] [Thread-138649] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:06:52.045 [DEBUG] [Thread-138649] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:06:52.045 [DEBUG] [Thread-138649] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T02:06:52.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T02:06:52.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:06:52.046 [DEBUG] [Thread-138649] [transport.py] [_log()] userauth is OK
2026-01-01T02:06:52.046 [DEBUG] [Thread-138649] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:06:52.046 [DEBUG] [Thread-138649] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:06:52.046 [DEBUG] [Thread-138649] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T02:06:52.046 [DEBUG] [Thread-138649] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:06:52.055 [INFO] [Thread-138649] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:06:52.056 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:06:52.703 [DEBUG] [Thread-138649] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:06:52.704 [DEBUG] [Thread-138649] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:06:52.704 [DEBUG] [Thread-138649] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T02:06:52.745 [DEBUG] [Thread-138649] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:06:52.746 [DEBUG] [Thread-138649] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:06:52.749 [DEBUG] [Thread-138649] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:06:52.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:06:52.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T02:06:52.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T02:06:52.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T02:06:52.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:06:52.774 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T02:06:52.774 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:06:52.774 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:06:52.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T02:06:52.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.004299 -999.00  +13.50   6.56     81  +10.40 1 1 1 2 1     0    0 -999.00 0.00 ZNESW 5.0 6.6 211.8 11.1 14.3 -20.9 14.2 -20.5 13.9 -19.0 14.2 -20.1
2026-01-01T02:06:52.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T02:06:52.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T02:06:52.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.004299
2026-01-01T02:06:52.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T02:06:52.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T02:06:52.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T02:06:52.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T02:06:52.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T02:06:52.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T02:06:23', tmtdew=3.65, humidity=78.39, cloud=0.0, wind=12.72, temperature=13.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T02:06:23', seeing=0.85, atlas_timestamp='2026-01-01T00:06:11.434', atlas_cloud=1, atlas_rain=1, zp_data=[0.025749999999998607, 0.09425000000000061, 0.06975000000000087, 0.03049999999999997, 0.03850000000000087, 0.048250000000001236, 0.008000000000000895, 0.029749999999999943, 0.08349999999999902, 0.07450000000000045, -0.0017500000000012506, 0.04449999999999932, 0.10800000000000054, 0.11125000000000007, 0.13199999999999967, 0.051000000000000156, 0.1952499999999997, 0.17999999999999972, 0.08000000000000007, 0.13175000000000026, 0.08399999999999963, 0.27474999999999916, 0.08625000000000149, 0.16174999999999962, 0.1479999999999997, 0.1949999999999985, 0.1802500000000009, 0.2024999999999988, 0.2469999999999999, 0.27550000000000097, 0.35850000000000115, 0.25200000000000067, 0.22025000000000006], zp_timestamp='2026-01-01T00:05:00')
2026-01-01T02:06:52.777 [DEBUG] [Thread-138649] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:06:52.860 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T02:06:52.873 [DEBUG] [Thread-138652] [transport.py] [_log()] starting thread (client mode): 0xb9558220
2026-01-01T02:06:52.873 [DEBUG] [Thread-138652] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:06:52.888 [DEBUG] [Thread-138652] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T02:06:52.888 [INFO] [Thread-138652] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T02:06:52.895 [DEBUG] [Thread-138652] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:06:52.895 [DEBUG] [Thread-138652] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T02:06:52.895 [DEBUG] [Thread-138652] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:06:52.895 [DEBUG] [Thread-138652] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:06:52.895 [DEBUG] [Thread-138652] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:06:52.895 [DEBUG] [Thread-138652] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:06:52.896 [DEBUG] [Thread-138652] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:06:52.896 [DEBUG] [Thread-138652] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:06:52.896 [DEBUG] [Thread-138652] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:06:52.896 [DEBUG] [Thread-138652] [transport.py] [_log()] client lang: <none>
2026-01-01T02:06:52.896 [DEBUG] [Thread-138652] [transport.py] [_log()] server lang: <none>
2026-01-01T02:06:52.896 [DEBUG] [Thread-138652] [transport.py] [_log()] kex follows: False
2026-01-01T02:06:52.896 [DEBUG] [Thread-138652] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:06:52.896 [DEBUG] [Thread-138652] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:06:52.896 [DEBUG] [Thread-138652] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:06:52.896 [DEBUG] [Thread-138652] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:06:52.896 [DEBUG] [Thread-138652] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:06:52.896 [DEBUG] [Thread-138652] [transport.py] [_log()] Compression: none
2026-01-01T02:06:52.896 [DEBUG] [Thread-138652] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:06:52.952 [DEBUG] [Thread-138652] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:06:52.952 [DEBUG] [Thread-138652] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:06:52.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T02:06:52.953 [DEBUG] [Thread-138652] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T02:06:52.954 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:06:53.009 [DEBUG] [Thread-138652] [transport.py] [_log()] userauth is OK
2026-01-01T02:06:53.009 [DEBUG] [Thread-138652] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:06:53.009 [DEBUG] [Thread-138652] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:06:53.009 [DEBUG] [Thread-138652] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T02:06:53.010 [DEBUG] [Thread-138652] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:06:53.029 [INFO] [Thread-138652] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:06:53.029 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T02:06:53.030 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:06:53.813 [DEBUG] [Thread-138652] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:06:53.814 [DEBUG] [Thread-138652] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:06:53.862 [DEBUG] [Thread-138652] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:06:53.862 [DEBUG] [Thread-138652] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:06:53.873 [DEBUG] [Thread-138652] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:06:53.882 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:06:53.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T02:06:53.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T02:06:53.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:06:53.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:06:53.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:06:53.910 [DEBUG] [Thread-138652] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:06:54.528 [DEBUG] [Thread-138654 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:06:58.423 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:06:58.424 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:07:03.299 [DEBUG] [Thread-138655 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:07:09.590 [DEBUG] [Thread-138656 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:07:23.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T02:07:23.932 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T02:07:23.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T02:07:24.624 [DEBUG] [Thread-138657 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:07:24.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 2, 6, 55), 3.66, 78.32, 0.0, 15.72, 13.38, 0, 0, 0, 2, 0, 0),)
2026-01-01T02:07:24.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 02:06:55
2026-01-01T02:07:24.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T02:07:24.944 [DEBUG] [Thread-138658] [transport.py] [_log()] starting thread (client mode): 0xb955a920
2026-01-01T02:07:24.944 [DEBUG] [Thread-138658] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:07:24.963 [DEBUG] [Thread-138658] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T02:07:24.963 [INFO] [Thread-138658] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T02:07:24.966 [DEBUG] [Thread-138658] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:07:24.966 [DEBUG] [Thread-138658] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T02:07:24.967 [DEBUG] [Thread-138658] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:07:24.967 [DEBUG] [Thread-138658] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:07:24.967 [DEBUG] [Thread-138658] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:07:24.967 [DEBUG] [Thread-138658] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:07:24.967 [DEBUG] [Thread-138658] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:07:24.967 [DEBUG] [Thread-138658] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:07:24.967 [DEBUG] [Thread-138658] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:07:24.967 [DEBUG] [Thread-138658] [transport.py] [_log()] client lang: <none>
2026-01-01T02:07:24.967 [DEBUG] [Thread-138658] [transport.py] [_log()] server lang: <none>
2026-01-01T02:07:24.967 [DEBUG] [Thread-138658] [transport.py] [_log()] kex follows: False
2026-01-01T02:07:24.967 [DEBUG] [Thread-138658] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:07:24.967 [DEBUG] [Thread-138658] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:07:24.967 [DEBUG] [Thread-138658] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:07:24.967 [DEBUG] [Thread-138658] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:07:24.967 [DEBUG] [Thread-138658] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:07:24.967 [DEBUG] [Thread-138658] [transport.py] [_log()] Compression: none
2026-01-01T02:07:24.967 [DEBUG] [Thread-138658] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:07:24.982 [DEBUG] [Thread-138658] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:07:24.982 [DEBUG] [Thread-138658] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:07:24.982 [DEBUG] [Thread-138658] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T02:07:24.983 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T02:07:24.983 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:07:24.983 [DEBUG] [Thread-138658] [transport.py] [_log()] userauth is OK
2026-01-01T02:07:24.983 [DEBUG] [Thread-138658] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:07:24.983 [DEBUG] [Thread-138658] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:07:24.983 [DEBUG] [Thread-138658] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T02:07:24.983 [DEBUG] [Thread-138658] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:07:24.995 [INFO] [Thread-138658] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:07:24.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:07:25.783 [DEBUG] [Thread-138658] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:07:25.783 [DEBUG] [Thread-138658] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:07:25.783 [DEBUG] [Thread-138658] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T02:07:25.825 [DEBUG] [Thread-138658] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:07:25.825 [DEBUG] [Thread-138658] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:07:25.830 [DEBUG] [Thread-138658] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:07:25.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:07:25.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T02:07:25.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T02:07:25.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T02:07:25.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:07:25.846 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T02:07:25.846 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:07:25.846 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:07:25.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T02:07:25.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.004646 -999.00  +13.50   5.52     81  +10.40 1 1 1 2 1     0    0 -999.00 0.00 ZNESW 10.8 5.5 189.3 9.3 14.3 -21.0 14.1 -20.4 13.9 -19.1 14.2 -20.0
2026-01-01T02:07:25.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T02:07:25.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T02:07:25.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.004646
2026-01-01T02:07:25.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T02:07:25.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T02:07:25.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T02:07:25.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T02:07:25.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T02:07:25.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T02:06:55', tmtdew=3.66, humidity=78.32, cloud=0.0, wind=15.72, temperature=13.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T02:06:55', seeing=0.85, atlas_timestamp='2026-01-01T00:06:41.414', atlas_cloud=1, atlas_rain=1, zp_data=[0.025749999999998607, 0.09425000000000061, 0.06975000000000087, 0.03049999999999997, 0.03850000000000087, 0.048250000000001236, 0.008000000000000895, 0.029749999999999943, 0.08349999999999902, 0.07450000000000045, -0.0017500000000012506, 0.04449999999999932, 0.10800000000000054, 0.11125000000000007, 0.13199999999999967, 0.051000000000000156, 0.1952499999999997, 0.17999999999999972, 0.08000000000000007, 0.13175000000000026, 0.08399999999999963, 0.27474999999999916, 0.08625000000000149, 0.16174999999999962, 0.1479999999999997, 0.1949999999999985, 0.1802500000000009, 0.2024999999999988, 0.2469999999999999, 0.27550000000000097, 0.35850000000000115, 0.25200000000000067, 0.22025000000000006], zp_timestamp='2026-01-01T00:05:00')
2026-01-01T02:07:25.846 [DEBUG] [Thread-138658] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:07:25.921 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T02:07:25.932 [DEBUG] [Thread-138661] [transport.py] [_log()] starting thread (client mode): 0xbbfce890
2026-01-01T02:07:25.932 [DEBUG] [Thread-138661] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:07:25.947 [DEBUG] [Thread-138661] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T02:07:25.947 [INFO] [Thread-138661] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T02:07:25.955 [DEBUG] [Thread-138661] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:07:25.955 [DEBUG] [Thread-138661] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T02:07:25.955 [DEBUG] [Thread-138661] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:07:25.955 [DEBUG] [Thread-138661] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:07:25.955 [DEBUG] [Thread-138661] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:07:25.955 [DEBUG] [Thread-138661] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:07:25.955 [DEBUG] [Thread-138661] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:07:25.955 [DEBUG] [Thread-138661] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:07:25.955 [DEBUG] [Thread-138661] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:07:25.955 [DEBUG] [Thread-138661] [transport.py] [_log()] client lang: <none>
2026-01-01T02:07:25.955 [DEBUG] [Thread-138661] [transport.py] [_log()] server lang: <none>
2026-01-01T02:07:25.955 [DEBUG] [Thread-138661] [transport.py] [_log()] kex follows: False
2026-01-01T02:07:25.955 [DEBUG] [Thread-138661] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:07:25.955 [DEBUG] [Thread-138661] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:07:25.955 [DEBUG] [Thread-138661] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:07:25.955 [DEBUG] [Thread-138661] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:07:25.955 [DEBUG] [Thread-138661] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:07:25.955 [DEBUG] [Thread-138661] [transport.py] [_log()] Compression: none
2026-01-01T02:07:25.955 [DEBUG] [Thread-138661] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:07:26.014 [DEBUG] [Thread-138661] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:07:26.014 [DEBUG] [Thread-138661] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:07:26.014 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T02:07:26.014 [DEBUG] [Thread-138661] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T02:07:26.014 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:07:26.071 [DEBUG] [Thread-138661] [transport.py] [_log()] userauth is OK
2026-01-01T02:07:26.071 [DEBUG] [Thread-138661] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:07:26.071 [DEBUG] [Thread-138661] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:07:26.071 [DEBUG] [Thread-138661] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T02:07:26.071 [DEBUG] [Thread-138661] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:07:26.085 [INFO] [Thread-138661] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:07:26.085 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T02:07:26.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:07:26.950 [DEBUG] [Thread-138661] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:07:26.950 [DEBUG] [Thread-138661] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:07:26.998 [DEBUG] [Thread-138661] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:07:26.998 [DEBUG] [Thread-138661] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:07:27.008 [DEBUG] [Thread-138661] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:07:27.019 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:07:27.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T02:07:27.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T02:07:27.036 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:07:27.036 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:07:27.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:07:27.043 [DEBUG] [Thread-138661] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:07:39.654 [DEBUG] [Thread-138663 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:07:54.706 [DEBUG] [Thread-138664 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:07:57.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T02:07:57.047 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T02:07:57.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T02:07:57.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 2, 7, 27), 3.67, 78.27, 0.0, 13.48, 13.38, 0, 0, 0, 2, 0, 0),)
2026-01-01T02:07:57.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 02:07:27
2026-01-01T02:07:57.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T02:07:58.040 [DEBUG] [Thread-138665] [transport.py] [_log()] starting thread (client mode): 0xb955baf0
2026-01-01T02:07:58.040 [DEBUG] [Thread-138665] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:07:58.060 [DEBUG] [Thread-138665] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T02:07:58.061 [INFO] [Thread-138665] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T02:07:58.064 [DEBUG] [Thread-138665] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:07:58.064 [DEBUG] [Thread-138665] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T02:07:58.064 [DEBUG] [Thread-138665] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:07:58.064 [DEBUG] [Thread-138665] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:07:58.064 [DEBUG] [Thread-138665] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:07:58.064 [DEBUG] [Thread-138665] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:07:58.064 [DEBUG] [Thread-138665] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:07:58.064 [DEBUG] [Thread-138665] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:07:58.064 [DEBUG] [Thread-138665] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:07:58.064 [DEBUG] [Thread-138665] [transport.py] [_log()] client lang: <none>
2026-01-01T02:07:58.064 [DEBUG] [Thread-138665] [transport.py] [_log()] server lang: <none>
2026-01-01T02:07:58.064 [DEBUG] [Thread-138665] [transport.py] [_log()] kex follows: False
2026-01-01T02:07:58.064 [DEBUG] [Thread-138665] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:07:58.064 [DEBUG] [Thread-138665] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:07:58.064 [DEBUG] [Thread-138665] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:07:58.064 [DEBUG] [Thread-138665] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:07:58.064 [DEBUG] [Thread-138665] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:07:58.064 [DEBUG] [Thread-138665] [transport.py] [_log()] Compression: none
2026-01-01T02:07:58.064 [DEBUG] [Thread-138665] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:07:58.079 [DEBUG] [Thread-138665] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:07:58.080 [DEBUG] [Thread-138665] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:07:58.080 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T02:07:58.081 [DEBUG] [Thread-138665] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T02:07:58.082 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:07:58.082 [DEBUG] [Thread-138665] [transport.py] [_log()] userauth is OK
2026-01-01T02:07:58.083 [DEBUG] [Thread-138665] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:07:58.083 [DEBUG] [Thread-138665] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:07:58.083 [DEBUG] [Thread-138665] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T02:07:58.083 [DEBUG] [Thread-138665] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:07:58.105 [INFO] [Thread-138665] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:07:58.106 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:07:58.625 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:07:58.626 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:07:58.738 [DEBUG] [Thread-138665] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:07:58.739 [DEBUG] [Thread-138665] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:07:58.739 [DEBUG] [Thread-138665] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T02:07:58.780 [DEBUG] [Thread-138665] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:07:58.780 [DEBUG] [Thread-138665] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:07:58.783 [DEBUG] [Thread-138665] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:07:58.797 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:07:58.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T02:07:58.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T02:07:58.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T02:07:58.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:07:58.806 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T02:07:58.806 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:07:58.806 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:07:58.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T02:07:58.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.004993 -999.00  +13.50  10.76     81  +10.30 1 1 1 2 1     0    0 -999.00 0.00 ZNESW 6.2 10.8 217.5 14.9 14.3 -21.0 14.1 -20.4 13.9 -19.0 14.2 -20.1
2026-01-01T02:07:58.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T02:07:58.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T02:07:58.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.004993
2026-01-01T02:07:58.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T02:07:58.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T02:07:58.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T02:07:58.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T02:07:58.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T02:07:58.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T02:07:27', tmtdew=3.67, humidity=78.27, cloud=0.0, wind=13.48, temperature=13.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T02:07:27', seeing=0.85, atlas_timestamp='2026-01-01T00:07:11.395', atlas_cloud=1, atlas_rain=1, zp_data=[0.025749999999998607, 0.09425000000000061, 0.06975000000000087, 0.03049999999999997, 0.03850000000000087, 0.048250000000001236, 0.008000000000000895, 0.029749999999999943, 0.08349999999999902, 0.07450000000000045, -0.0017500000000012506, 0.04449999999999932, 0.10800000000000054, 0.11125000000000007, 0.13199999999999967, 0.051000000000000156, 0.1952499999999997, 0.17999999999999972, 0.08000000000000007, 0.13175000000000026, 0.08399999999999963, 0.27474999999999916, 0.08625000000000149, 0.16174999999999962, 0.1479999999999997, 0.1949999999999985, 0.1802500000000009, 0.2024999999999988, 0.2469999999999999, 0.27550000000000097, 0.35850000000000115, 0.25200000000000067, 0.22025000000000006], zp_timestamp='2026-01-01T00:05:00')
2026-01-01T02:07:58.809 [DEBUG] [Thread-138665] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:07:58.896 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T02:07:58.908 [DEBUG] [Thread-138668] [transport.py] [_log()] starting thread (client mode): 0xb9558550
2026-01-01T02:07:58.908 [DEBUG] [Thread-138668] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:07:58.923 [DEBUG] [Thread-138668] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T02:07:58.924 [INFO] [Thread-138668] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T02:07:58.931 [DEBUG] [Thread-138668] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:07:58.931 [DEBUG] [Thread-138668] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T02:07:58.931 [DEBUG] [Thread-138668] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:07:58.931 [DEBUG] [Thread-138668] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:07:58.931 [DEBUG] [Thread-138668] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:07:58.931 [DEBUG] [Thread-138668] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:07:58.931 [DEBUG] [Thread-138668] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:07:58.931 [DEBUG] [Thread-138668] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:07:58.931 [DEBUG] [Thread-138668] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:07:58.931 [DEBUG] [Thread-138668] [transport.py] [_log()] client lang: <none>
2026-01-01T02:07:58.931 [DEBUG] [Thread-138668] [transport.py] [_log()] server lang: <none>
2026-01-01T02:07:58.932 [DEBUG] [Thread-138668] [transport.py] [_log()] kex follows: False
2026-01-01T02:07:58.932 [DEBUG] [Thread-138668] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:07:58.932 [DEBUG] [Thread-138668] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:07:58.932 [DEBUG] [Thread-138668] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:07:58.932 [DEBUG] [Thread-138668] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:07:58.932 [DEBUG] [Thread-138668] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:07:58.932 [DEBUG] [Thread-138668] [transport.py] [_log()] Compression: none
2026-01-01T02:07:58.932 [DEBUG] [Thread-138668] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:07:58.990 [DEBUG] [Thread-138668] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:07:58.991 [DEBUG] [Thread-138668] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:07:58.991 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T02:07:58.991 [DEBUG] [Thread-138668] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T02:07:58.992 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:07:59.046 [DEBUG] [Thread-138668] [transport.py] [_log()] userauth is OK
2026-01-01T02:07:59.047 [DEBUG] [Thread-138668] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:07:59.047 [DEBUG] [Thread-138668] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:07:59.047 [DEBUG] [Thread-138668] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T02:07:59.047 [DEBUG] [Thread-138668] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:07:59.065 [INFO] [Thread-138668] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:07:59.066 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T02:07:59.066 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:07:59.911 [DEBUG] [Thread-138668] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:07:59.911 [DEBUG] [Thread-138668] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:07:59.958 [DEBUG] [Thread-138668] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:07:59.958 [DEBUG] [Thread-138668] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:07:59.967 [DEBUG] [Thread-138668] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:07:59.975 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:07:59.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T02:07:59.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T02:07:59.991 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:07:59.991 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:07:59.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:07:59.999 [DEBUG] [Thread-138668] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:08:03.377 [DEBUG] [Thread-138670 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:08:09.733 [DEBUG] [Thread-138671 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:08:24.775 [DEBUG] [Thread-138672 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:08:30.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T02:08:30.022 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T02:08:30.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T02:08:30.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 2, 7, 59), 3.66, 78.34, 0.0, 14.8, 13.39, 0, 0, 0, 2, 0, 0),)
2026-01-01T02:08:30.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 02:07:59
2026-01-01T02:08:30.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T02:08:30.999 [DEBUG] [Thread-138673] [transport.py] [_log()] starting thread (client mode): 0xb955b0d0
2026-01-01T02:08:30.999 [DEBUG] [Thread-138673] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:08:31.019 [DEBUG] [Thread-138673] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T02:08:31.019 [INFO] [Thread-138673] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T02:08:31.022 [DEBUG] [Thread-138673] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:08:31.023 [DEBUG] [Thread-138673] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T02:08:31.023 [DEBUG] [Thread-138673] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:08:31.023 [DEBUG] [Thread-138673] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:08:31.023 [DEBUG] [Thread-138673] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:08:31.023 [DEBUG] [Thread-138673] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:08:31.023 [DEBUG] [Thread-138673] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:08:31.023 [DEBUG] [Thread-138673] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:08:31.023 [DEBUG] [Thread-138673] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:08:31.023 [DEBUG] [Thread-138673] [transport.py] [_log()] client lang: <none>
2026-01-01T02:08:31.023 [DEBUG] [Thread-138673] [transport.py] [_log()] server lang: <none>
2026-01-01T02:08:31.023 [DEBUG] [Thread-138673] [transport.py] [_log()] kex follows: False
2026-01-01T02:08:31.023 [DEBUG] [Thread-138673] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:08:31.023 [DEBUG] [Thread-138673] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:08:31.023 [DEBUG] [Thread-138673] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:08:31.023 [DEBUG] [Thread-138673] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:08:31.023 [DEBUG] [Thread-138673] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:08:31.023 [DEBUG] [Thread-138673] [transport.py] [_log()] Compression: none
2026-01-01T02:08:31.023 [DEBUG] [Thread-138673] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:08:31.040 [DEBUG] [Thread-138673] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:08:31.041 [DEBUG] [Thread-138673] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:08:31.041 [DEBUG] [Thread-138673] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T02:08:31.041 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T02:08:31.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:08:31.043 [DEBUG] [Thread-138673] [transport.py] [_log()] userauth is OK
2026-01-01T02:08:31.044 [DEBUG] [Thread-138673] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:08:31.044 [DEBUG] [Thread-138673] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:08:31.044 [DEBUG] [Thread-138673] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T02:08:31.044 [DEBUG] [Thread-138673] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:08:31.059 [INFO] [Thread-138673] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:08:31.060 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:08:31.869 [DEBUG] [Thread-138673] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:08:31.869 [DEBUG] [Thread-138673] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:08:31.869 [DEBUG] [Thread-138673] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T02:08:31.909 [DEBUG] [Thread-138673] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:08:31.910 [DEBUG] [Thread-138673] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:08:31.912 [DEBUG] [Thread-138673] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:08:31.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:08:31.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T02:08:31.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T02:08:31.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T02:08:31.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:08:31.929 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T02:08:31.929 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:08:31.929 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:08:31.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T02:08:31.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.005340 -999.00  +13.50   5.53     81  +10.30 1 1 1 2 1     0    0 -999.00 0.00 ZNESW 6.3 5.5 194.9 13.9 14.3 -21.1 14.1 -20.4 13.9 -19.0 14.3 -20.2
2026-01-01T02:08:31.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T02:08:31.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T02:08:31.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.005340
2026-01-01T02:08:31.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T02:08:31.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T02:08:31.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T02:08:31.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T02:08:31.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T02:08:31.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T02:07:59', tmtdew=3.66, humidity=78.34, cloud=0.0, wind=14.8, temperature=13.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T02:07:59', seeing=1.09, atlas_timestamp='2026-01-01T00:07:41.376', atlas_cloud=1, atlas_rain=1, zp_data=[0.025749999999998607, 0.09425000000000061, 0.06975000000000087, 0.03049999999999997, 0.03850000000000087, 0.048250000000001236, 0.008000000000000895, 0.029749999999999943, 0.08349999999999902, 0.07450000000000045, -0.0017500000000012506, 0.04449999999999932, 0.10800000000000054, 0.11125000000000007, 0.13199999999999967, 0.051000000000000156, 0.1952499999999997, 0.17999999999999972, 0.08000000000000007, 0.13175000000000026, 0.08399999999999963, 0.27474999999999916, 0.08625000000000149, 0.16174999999999962, 0.1479999999999997, 0.1949999999999985, 0.1802500000000009, 0.2024999999999988, 0.2469999999999999, 0.27550000000000097, 0.35850000000000115, 0.25200000000000067, 0.22025000000000006], zp_timestamp='2026-01-01T00:05:00')
2026-01-01T02:08:31.931 [DEBUG] [Thread-138673] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:08:32.005 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T02:08:32.016 [DEBUG] [Thread-138676] [transport.py] [_log()] starting thread (client mode): 0xb9558d00
2026-01-01T02:08:32.016 [DEBUG] [Thread-138676] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:08:32.032 [DEBUG] [Thread-138676] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T02:08:32.032 [INFO] [Thread-138676] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T02:08:32.039 [DEBUG] [Thread-138676] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:08:32.039 [DEBUG] [Thread-138676] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T02:08:32.040 [DEBUG] [Thread-138676] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:08:32.040 [DEBUG] [Thread-138676] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:08:32.040 [DEBUG] [Thread-138676] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:08:32.040 [DEBUG] [Thread-138676] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:08:32.040 [DEBUG] [Thread-138676] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:08:32.040 [DEBUG] [Thread-138676] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:08:32.040 [DEBUG] [Thread-138676] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:08:32.040 [DEBUG] [Thread-138676] [transport.py] [_log()] client lang: <none>
2026-01-01T02:08:32.040 [DEBUG] [Thread-138676] [transport.py] [_log()] server lang: <none>
2026-01-01T02:08:32.040 [DEBUG] [Thread-138676] [transport.py] [_log()] kex follows: False
2026-01-01T02:08:32.040 [DEBUG] [Thread-138676] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:08:32.040 [DEBUG] [Thread-138676] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:08:32.040 [DEBUG] [Thread-138676] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:08:32.040 [DEBUG] [Thread-138676] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:08:32.040 [DEBUG] [Thread-138676] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:08:32.040 [DEBUG] [Thread-138676] [transport.py] [_log()] Compression: none
2026-01-01T02:08:32.040 [DEBUG] [Thread-138676] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:08:32.100 [DEBUG] [Thread-138676] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:08:32.100 [DEBUG] [Thread-138676] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:08:32.100 [DEBUG] [Thread-138676] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T02:08:32.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T02:08:32.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:08:32.157 [DEBUG] [Thread-138676] [transport.py] [_log()] userauth is OK
2026-01-01T02:08:32.157 [DEBUG] [Thread-138676] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:08:32.157 [DEBUG] [Thread-138676] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:08:32.157 [DEBUG] [Thread-138676] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T02:08:32.157 [DEBUG] [Thread-138676] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:08:32.172 [INFO] [Thread-138676] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:08:32.172 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T02:08:32.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:08:32.996 [DEBUG] [Thread-138676] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:08:32.996 [DEBUG] [Thread-138676] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:08:33.045 [DEBUG] [Thread-138676] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:08:33.045 [DEBUG] [Thread-138676] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:08:33.053 [DEBUG] [Thread-138676] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:08:33.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:08:33.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T02:08: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') -> 00000000
2026-01-01T02:08:33.083 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:08:33.083 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:08:33.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:08:33.096 [DEBUG] [Thread-138676] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:08:39.809 [DEBUG] [Thread-138678 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:08:54.860 [DEBUG] [Thread-138679 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:08:58.826 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:08:58.828 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:09:03.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T02:09:03.114 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T02:09:03.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T02:09:03.460 [DEBUG] [Thread-138680 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:09:03.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 2, 8, 31), 3.66, 78.32, 0.0, 16.76, 13.38, 0, 0, 0, 2, 0, 0),)
2026-01-01T02:09:03.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 02:08:31
2026-01-01T02:09:03.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T02:09:04.123 [DEBUG] [Thread-138681] [transport.py] [_log()] starting thread (client mode): 0xb6bbf7f0
2026-01-01T02:09:04.123 [DEBUG] [Thread-138681] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:09:04.143 [DEBUG] [Thread-138681] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T02:09:04.143 [INFO] [Thread-138681] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T02:09:04.147 [DEBUG] [Thread-138681] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:09:04.147 [DEBUG] [Thread-138681] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T02:09:04.147 [DEBUG] [Thread-138681] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:09:04.147 [DEBUG] [Thread-138681] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:09:04.147 [DEBUG] [Thread-138681] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:09:04.147 [DEBUG] [Thread-138681] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:09:04.147 [DEBUG] [Thread-138681] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:09:04.147 [DEBUG] [Thread-138681] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:09:04.147 [DEBUG] [Thread-138681] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:09:04.147 [DEBUG] [Thread-138681] [transport.py] [_log()] client lang: <none>
2026-01-01T02:09:04.147 [DEBUG] [Thread-138681] [transport.py] [_log()] server lang: <none>
2026-01-01T02:09:04.147 [DEBUG] [Thread-138681] [transport.py] [_log()] kex follows: False
2026-01-01T02:09:04.147 [DEBUG] [Thread-138681] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:09:04.147 [DEBUG] [Thread-138681] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:09:04.147 [DEBUG] [Thread-138681] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:09:04.147 [DEBUG] [Thread-138681] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:09:04.147 [DEBUG] [Thread-138681] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:09:04.147 [DEBUG] [Thread-138681] [transport.py] [_log()] Compression: none
2026-01-01T02:09:04.147 [DEBUG] [Thread-138681] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:09:04.161 [DEBUG] [Thread-138681] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:09:04.161 [DEBUG] [Thread-138681] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:09:04.162 [DEBUG] [Thread-138681] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T02:09:04.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T02:09:04.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:09:04.204 [DEBUG] [Thread-138681] [transport.py] [_log()] userauth is OK
2026-01-01T02:09:04.204 [DEBUG] [Thread-138681] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:09:04.204 [DEBUG] [Thread-138681] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:09:04.204 [DEBUG] [Thread-138681] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T02:09:04.204 [DEBUG] [Thread-138681] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:09:04.223 [INFO] [Thread-138681] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:09:04.223 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:09:04.837 [DEBUG] [Thread-138681] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:09:04.837 [DEBUG] [Thread-138681] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:09:04.837 [DEBUG] [Thread-138681] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T02:09:04.879 [DEBUG] [Thread-138681] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:09:04.879 [DEBUG] [Thread-138681] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:09:04.881 [DEBUG] [Thread-138681] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:09:04.893 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:09:04.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T02:09:04.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T02:09:04.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T02:09:04.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:09:04.898 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T02:09:04.898 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:09:04.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:09:04.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T02:09:04.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.005687 -999.00  +13.60   9.62     81  +10.40 1 1 1 2 1     0    0 -999.00 0.00 ZNESW 4.4 9.6 203.4 12.7 14.3 -20.9 14.1 -20.4 14.0 -19.1 14.2 -20.1
2026-01-01T02:09:04.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T02:09:04.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T02:09:04.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.005687
2026-01-01T02:09:04.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T02:09:04.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T02:09:04.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T02:09:04.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T02:09:04.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T02:09:04.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T02:08:31', tmtdew=3.66, humidity=78.32, cloud=0.0, wind=16.76, temperature=13.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T02:08:31', seeing=1.19, atlas_timestamp='2026-01-01T00:08:11.357', atlas_cloud=1, atlas_rain=1, zp_data=[0.025749999999998607, 0.09425000000000061, 0.06975000000000087, 0.03049999999999997, 0.03850000000000087, 0.048250000000001236, 0.008000000000000895, 0.029749999999999943, 0.08349999999999902, 0.07450000000000045, -0.0017500000000012506, 0.04449999999999932, 0.10800000000000054, 0.11125000000000007, 0.13199999999999967, 0.051000000000000156, 0.1952499999999997, 0.17999999999999972, 0.08000000000000007, 0.13175000000000026, 0.08399999999999963, 0.27474999999999916, 0.08625000000000149, 0.16174999999999962, 0.1479999999999997, 0.1949999999999985, 0.1802500000000009, 0.2024999999999988, 0.2469999999999999, 0.27550000000000097, 0.35850000000000115, 0.25200000000000067, 0.22025000000000006], zp_timestamp='2026-01-01T00:05:00')
2026-01-01T02:09:04.899 [DEBUG] [Thread-138681] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:09:04.973 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T02:09:04.985 [DEBUG] [Thread-138684] [transport.py] [_log()] starting thread (client mode): 0xb6b604c0
2026-01-01T02:09:04.985 [DEBUG] [Thread-138684] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:09:04.999 [DEBUG] [Thread-138684] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T02:09:04.999 [INFO] [Thread-138684] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T02:09:05.007 [DEBUG] [Thread-138684] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:09:05.007 [DEBUG] [Thread-138684] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T02:09:05.007 [DEBUG] [Thread-138684] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:09:05.007 [DEBUG] [Thread-138684] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:09:05.007 [DEBUG] [Thread-138684] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:09:05.007 [DEBUG] [Thread-138684] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:09:05.007 [DEBUG] [Thread-138684] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:09:05.007 [DEBUG] [Thread-138684] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:09:05.007 [DEBUG] [Thread-138684] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:09:05.007 [DEBUG] [Thread-138684] [transport.py] [_log()] client lang: <none>
2026-01-01T02:09:05.007 [DEBUG] [Thread-138684] [transport.py] [_log()] server lang: <none>
2026-01-01T02:09:05.007 [DEBUG] [Thread-138684] [transport.py] [_log()] kex follows: False
2026-01-01T02:09:05.007 [DEBUG] [Thread-138684] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:09:05.007 [DEBUG] [Thread-138684] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:09:05.007 [DEBUG] [Thread-138684] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:09:05.007 [DEBUG] [Thread-138684] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:09:05.007 [DEBUG] [Thread-138684] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:09:05.007 [DEBUG] [Thread-138684] [transport.py] [_log()] Compression: none
2026-01-01T02:09:05.007 [DEBUG] [Thread-138684] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:09:05.064 [DEBUG] [Thread-138684] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:09:05.064 [DEBUG] [Thread-138684] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:09:05.064 [DEBUG] [Thread-138684] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T02:09:05.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T02:09:05.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:09:05.121 [DEBUG] [Thread-138684] [transport.py] [_log()] userauth is OK
2026-01-01T02:09:05.121 [DEBUG] [Thread-138684] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:09:05.121 [DEBUG] [Thread-138684] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:09:05.121 [DEBUG] [Thread-138684] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T02:09:05.121 [DEBUG] [Thread-138684] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:09:05.140 [INFO] [Thread-138684] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:09:05.141 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T02:09:05.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:09:05.968 [DEBUG] [Thread-138684] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:09:05.968 [DEBUG] [Thread-138684] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:09:06.016 [DEBUG] [Thread-138684] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:09:06.016 [DEBUG] [Thread-138684] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:09:06.026 [DEBUG] [Thread-138684] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:09:06.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:09:06.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T02:09:06.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T02:09:06.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:09:06.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:09:06.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:09:06.063 [DEBUG] [Thread-138684] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:09:09.894 [DEBUG] [Thread-138686 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:09:24.946 [DEBUG] [Thread-138687 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:09:36.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T02:09:36.085 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T02:09:36.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T02:09:36.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 2, 9, 3), 3.66, 78.32, 0.0, 14.49, 13.39, 0, 0, 0, 2, 0, 0),)
2026-01-01T02:09:36.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 02:09:03
2026-01-01T02:09:36.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T02:09:37.139 [DEBUG] [Thread-138688] [transport.py] [_log()] starting thread (client mode): 0xb6b15db0
2026-01-01T02:09:37.140 [DEBUG] [Thread-138688] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:09:37.159 [DEBUG] [Thread-138688] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T02:09:37.159 [INFO] [Thread-138688] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T02:09:37.162 [DEBUG] [Thread-138688] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:09:37.163 [DEBUG] [Thread-138688] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T02:09:37.163 [DEBUG] [Thread-138688] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:09:37.163 [DEBUG] [Thread-138688] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:09:37.163 [DEBUG] [Thread-138688] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:09:37.163 [DEBUG] [Thread-138688] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:09:37.163 [DEBUG] [Thread-138688] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:09:37.163 [DEBUG] [Thread-138688] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:09:37.163 [DEBUG] [Thread-138688] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:09:37.163 [DEBUG] [Thread-138688] [transport.py] [_log()] client lang: <none>
2026-01-01T02:09:37.163 [DEBUG] [Thread-138688] [transport.py] [_log()] server lang: <none>
2026-01-01T02:09:37.163 [DEBUG] [Thread-138688] [transport.py] [_log()] kex follows: False
2026-01-01T02:09:37.163 [DEBUG] [Thread-138688] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:09:37.163 [DEBUG] [Thread-138688] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:09:37.163 [DEBUG] [Thread-138688] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:09:37.163 [DEBUG] [Thread-138688] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:09:37.163 [DEBUG] [Thread-138688] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:09:37.163 [DEBUG] [Thread-138688] [transport.py] [_log()] Compression: none
2026-01-01T02:09:37.163 [DEBUG] [Thread-138688] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:09:37.178 [DEBUG] [Thread-138688] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:09:37.179 [DEBUG] [Thread-138688] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:09:37.179 [DEBUG] [Thread-138688] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T02:09:37.179 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T02:09:37.179 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:09:37.179 [DEBUG] [Thread-138688] [transport.py] [_log()] userauth is OK
2026-01-01T02:09:37.179 [DEBUG] [Thread-138688] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:09:37.179 [DEBUG] [Thread-138688] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:09:37.179 [DEBUG] [Thread-138688] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T02:09:37.179 [DEBUG] [Thread-138688] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:09:37.188 [INFO] [Thread-138688] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:09:37.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:09:37.957 [DEBUG] [Thread-138688] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:09:37.957 [DEBUG] [Thread-138688] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:09:37.958 [DEBUG] [Thread-138688] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T02:09:37.998 [DEBUG] [Thread-138688] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:09:37.998 [DEBUG] [Thread-138688] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:09:38.002 [DEBUG] [Thread-138688] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:09:38.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:09:38.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T02:09:38.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T02:09:38.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T02:09:38.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:09:38.024 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T02:09:38.024 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:09:38.024 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:09:38.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T02:09:38.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.006382 -999.00  +13.50   7.14     81  +10.40 1 1 1 2 1     0    0 -999.00 0.00 ZNESW 7.1 7.1 227.3 12.5 14.3 -21.0 14.1 -20.5 13.9 -19.1 14.2 -20.1
2026-01-01T02:09:38.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T02:09:38.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T02:09:38.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.006382
2026-01-01T02:09:38.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T02:09:38.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T02:09:38.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T02:09:38.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T02:09:38.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T02:09:38.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T02:09:03', tmtdew=3.66, humidity=78.32, cloud=0.0, wind=14.49, temperature=13.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T02:09:35', seeing=0.92, atlas_timestamp='2026-01-01T00:09:11.405', atlas_cloud=1, atlas_rain=1, zp_data=[0.025749999999998607, 0.09425000000000061, 0.06975000000000087, 0.03049999999999997, 0.03850000000000087, 0.048250000000001236, 0.008000000000000895, 0.029749999999999943, 0.08349999999999902, 0.07450000000000045, -0.0017500000000012506, 0.04449999999999932, 0.10800000000000054, 0.11125000000000007, 0.13199999999999967, 0.051000000000000156, 0.1952499999999997, 0.17999999999999972, 0.08000000000000007, 0.13175000000000026, 0.08399999999999963, 0.27474999999999916, 0.08625000000000149, 0.16174999999999962, 0.1479999999999997, 0.1949999999999985, 0.1802500000000009, 0.2024999999999988, 0.2469999999999999, 0.27550000000000097, 0.35850000000000115, 0.25200000000000067, 0.22025000000000006], zp_timestamp='2026-01-01T00:05:00')
2026-01-01T02:09:38.027 [DEBUG] [Thread-138688] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:09:38.110 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T02:09:38.121 [DEBUG] [Thread-138691] [transport.py] [_log()] starting thread (client mode): 0xb6ba01f0
2026-01-01T02:09:38.121 [DEBUG] [Thread-138691] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:09:38.139 [DEBUG] [Thread-138691] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T02:09:38.139 [INFO] [Thread-138691] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T02:09:38.146 [DEBUG] [Thread-138691] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:09:38.147 [DEBUG] [Thread-138691] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T02:09:38.147 [DEBUG] [Thread-138691] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:09:38.147 [DEBUG] [Thread-138691] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:09:38.147 [DEBUG] [Thread-138691] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:09:38.147 [DEBUG] [Thread-138691] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:09:38.147 [DEBUG] [Thread-138691] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:09:38.147 [DEBUG] [Thread-138691] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:09:38.147 [DEBUG] [Thread-138691] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:09:38.147 [DEBUG] [Thread-138691] [transport.py] [_log()] client lang: <none>
2026-01-01T02:09:38.148 [DEBUG] [Thread-138691] [transport.py] [_log()] server lang: <none>
2026-01-01T02:09:38.148 [DEBUG] [Thread-138691] [transport.py] [_log()] kex follows: False
2026-01-01T02:09:38.148 [DEBUG] [Thread-138691] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:09:38.148 [DEBUG] [Thread-138691] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:09:38.148 [DEBUG] [Thread-138691] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:09:38.148 [DEBUG] [Thread-138691] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:09:38.148 [DEBUG] [Thread-138691] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:09:38.149 [DEBUG] [Thread-138691] [transport.py] [_log()] Compression: none
2026-01-01T02:09:38.149 [DEBUG] [Thread-138691] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:09:38.205 [DEBUG] [Thread-138691] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:09:38.205 [DEBUG] [Thread-138691] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:09:38.206 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T02:09:38.206 [DEBUG] [Thread-138691] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T02:09:38.207 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:09:38.261 [DEBUG] [Thread-138691] [transport.py] [_log()] userauth is OK
2026-01-01T02:09:38.262 [DEBUG] [Thread-138691] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:09:38.262 [DEBUG] [Thread-138691] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:09:38.262 [DEBUG] [Thread-138691] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T02:09:38.262 [DEBUG] [Thread-138691] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:09:38.281 [INFO] [Thread-138691] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:09:38.282 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T02:09:38.282 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:09:39.126 [DEBUG] [Thread-138691] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:09:39.126 [DEBUG] [Thread-138691] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:09:39.174 [DEBUG] [Thread-138691] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:09:39.175 [DEBUG] [Thread-138691] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:09:39.184 [DEBUG] [Thread-138691] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:09:39.193 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:09:39.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T02:09:39.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T02:09:39.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:09:39.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:09:39.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:09:39.222 [DEBUG] [Thread-138691] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:09:39.978 [DEBUG] [Thread-138693 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:09:55.039 [DEBUG] [Thread-138694 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:09:59.028 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:09:59.030 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:10:03.512 [DEBUG] [Thread-138695 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:10:09.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T02:10:09.244 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T02:10:09.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T02:10:09.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 2, 9, 35), 3.66, 78.34, 0.0, 14.79, 13.43, 0, 0, 0, 2, 0, 0),)
2026-01-01T02:10:09.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 02:09:35
2026-01-01T02:10:10.073 [DEBUG] [Thread-138696 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:10:10.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T02:10:10.250 [DEBUG] [Thread-138697] [transport.py] [_log()] starting thread (client mode): 0xb6b15b70
2026-01-01T02:10:10.250 [DEBUG] [Thread-138697] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:10:10.269 [DEBUG] [Thread-138697] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T02:10:10.269 [INFO] [Thread-138697] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T02:10:10.273 [DEBUG] [Thread-138697] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:10:10.274 [DEBUG] [Thread-138697] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T02:10:10.274 [DEBUG] [Thread-138697] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:10:10.274 [DEBUG] [Thread-138697] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:10:10.274 [DEBUG] [Thread-138697] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:10:10.274 [DEBUG] [Thread-138697] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:10:10.274 [DEBUG] [Thread-138697] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:10:10.274 [DEBUG] [Thread-138697] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:10:10.274 [DEBUG] [Thread-138697] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:10:10.274 [DEBUG] [Thread-138697] [transport.py] [_log()] client lang: <none>
2026-01-01T02:10:10.274 [DEBUG] [Thread-138697] [transport.py] [_log()] server lang: <none>
2026-01-01T02:10:10.274 [DEBUG] [Thread-138697] [transport.py] [_log()] kex follows: False
2026-01-01T02:10:10.274 [DEBUG] [Thread-138697] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:10:10.274 [DEBUG] [Thread-138697] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:10:10.274 [DEBUG] [Thread-138697] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:10:10.274 [DEBUG] [Thread-138697] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:10:10.274 [DEBUG] [Thread-138697] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:10:10.274 [DEBUG] [Thread-138697] [transport.py] [_log()] Compression: none
2026-01-01T02:10:10.274 [DEBUG] [Thread-138697] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:10:10.282 [DEBUG] [Thread-138697] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:10:10.283 [DEBUG] [Thread-138697] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:10:10.283 [DEBUG] [Thread-138697] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T02:10:10.283 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T02:10:10.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:10:10.288 [DEBUG] [Thread-138697] [transport.py] [_log()] userauth is OK
2026-01-01T02:10:10.289 [DEBUG] [Thread-138697] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:10:10.289 [DEBUG] [Thread-138697] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:10:10.289 [DEBUG] [Thread-138697] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T02:10:10.289 [DEBUG] [Thread-138697] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:10:10.313 [INFO] [Thread-138697] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:10:10.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:10:12.921 [DEBUG] [Thread-138697] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:10:12.921 [DEBUG] [Thread-138697] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:10:12.921 [DEBUG] [Thread-138697] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T02:10:12.962 [DEBUG] [Thread-138697] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:10:12.963 [DEBUG] [Thread-138697] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:10:12.966 [DEBUG] [Thread-138697] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:10:12.979 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:10:12.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T02:10:12.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T02:10:12.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T02:10:12.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:10:12.992 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T02:10:12.992 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:10:12.993 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:10:12.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T02:10:12.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.006729 -999.00  +13.50   8.66     81  +10.40 1 1 1 2 1     0    0 -999.00 0.00 ZNESW 5.7 8.7 215.8 12.0 14.3 -20.9 14.2 -20.5 13.9 -19.1 14.2 -20.1
2026-01-01T02:10:12.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T02:10:12.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T02:10:12.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.006729
2026-01-01T02:10:12.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T02:10:12.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T02:10:12.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T02:10:12.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T02:10:12.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T02:10:12.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T02:09:35', tmtdew=3.66, humidity=78.34, cloud=0.0, wind=14.79, temperature=13.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T02:10:07', seeing=0.98, atlas_timestamp='2026-01-01T00:09:41.386', atlas_cloud=1, atlas_rain=1, zp_data=[0.025749999999998607, 0.09425000000000061, 0.06975000000000087, 0.03049999999999997, 0.03850000000000087, 0.048250000000001236, 0.008000000000000895, 0.029749999999999943, 0.08349999999999902, 0.07450000000000045, -0.0017500000000012506, 0.04449999999999932, 0.10800000000000054, 0.11125000000000007, 0.13199999999999967, 0.051000000000000156, 0.1952499999999997, 0.17999999999999972, 0.08000000000000007, 0.13175000000000026, 0.08399999999999963, 0.27474999999999916, 0.08625000000000149, 0.16174999999999962, 0.1479999999999997, 0.1949999999999985, 0.1802500000000009, 0.2024999999999988, 0.2469999999999999, 0.27550000000000097, 0.35850000000000115, 0.25200000000000067, 0.22025000000000006], zp_timestamp='2026-01-01T00:07:00')
2026-01-01T02:10:12.995 [DEBUG] [Thread-138697] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:10:13.089 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T02:10:13.101 [DEBUG] [Thread-138700] [transport.py] [_log()] starting thread (client mode): 0xb1794310
2026-01-01T02:10:13.101 [DEBUG] [Thread-138700] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:10:13.117 [DEBUG] [Thread-138700] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T02:10:13.117 [INFO] [Thread-138700] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T02:10:13.124 [DEBUG] [Thread-138700] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:10:13.124 [DEBUG] [Thread-138700] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T02:10:13.125 [DEBUG] [Thread-138700] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:10:13.125 [DEBUG] [Thread-138700] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:10:13.125 [DEBUG] [Thread-138700] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:10:13.125 [DEBUG] [Thread-138700] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:10:13.125 [DEBUG] [Thread-138700] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:10:13.125 [DEBUG] [Thread-138700] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:10:13.125 [DEBUG] [Thread-138700] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:10:13.125 [DEBUG] [Thread-138700] [transport.py] [_log()] client lang: <none>
2026-01-01T02:10:13.125 [DEBUG] [Thread-138700] [transport.py] [_log()] server lang: <none>
2026-01-01T02:10:13.125 [DEBUG] [Thread-138700] [transport.py] [_log()] kex follows: False
2026-01-01T02:10:13.125 [DEBUG] [Thread-138700] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:10:13.125 [DEBUG] [Thread-138700] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:10:13.125 [DEBUG] [Thread-138700] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:10:13.125 [DEBUG] [Thread-138700] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:10:13.125 [DEBUG] [Thread-138700] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:10:13.125 [DEBUG] [Thread-138700] [transport.py] [_log()] Compression: none
2026-01-01T02:10:13.125 [DEBUG] [Thread-138700] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:10:13.187 [DEBUG] [Thread-138700] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:10:13.187 [DEBUG] [Thread-138700] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:10:13.188 [DEBUG] [Thread-138700] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T02:10:13.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T02:10:13.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:10:13.245 [DEBUG] [Thread-138700] [transport.py] [_log()] userauth is OK
2026-01-01T02:10:13.245 [DEBUG] [Thread-138700] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:10:13.245 [DEBUG] [Thread-138700] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:10:13.245 [DEBUG] [Thread-138700] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T02:10:13.246 [DEBUG] [Thread-138700] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:10:13.264 [INFO] [Thread-138700] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:10:13.264 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T02:10:13.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:10:14.073 [DEBUG] [Thread-138700] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:10:14.073 [DEBUG] [Thread-138700] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:10:14.120 [DEBUG] [Thread-138700] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:10:14.120 [DEBUG] [Thread-138700] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:10:14.129 [DEBUG] [Thread-138700] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:10:14.137 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:10:14.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T02:10:14.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T02:10:14.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:10:14.154 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:10:14.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:10:14.163 [DEBUG] [Thread-138700] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:10:25.110 [DEBUG] [Thread-138702 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:10:40.160 [DEBUG] [Thread-138703 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:10:44.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T02:10:44.185 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T02:10:44.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T02:10:44.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 2, 10, 39), 3.66, 78.32, 0.0, 13.02, 13.43, 0, 0, 0, 2, 0, 0),)
2026-01-01T02:10:44.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 02:10:39
2026-01-01T02:10:45.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T02:10:45.205 [DEBUG] [Thread-138704] [transport.py] [_log()] starting thread (client mode): 0xb6b14c40
2026-01-01T02:10:45.205 [DEBUG] [Thread-138704] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:10:45.225 [DEBUG] [Thread-138704] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T02:10:45.225 [INFO] [Thread-138704] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T02:10:45.228 [DEBUG] [Thread-138704] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:10:45.228 [DEBUG] [Thread-138704] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T02:10:45.228 [DEBUG] [Thread-138704] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:10:45.228 [DEBUG] [Thread-138704] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:10:45.228 [DEBUG] [Thread-138704] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:10:45.229 [DEBUG] [Thread-138704] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:10:45.229 [DEBUG] [Thread-138704] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:10:45.229 [DEBUG] [Thread-138704] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:10:45.229 [DEBUG] [Thread-138704] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:10:45.229 [DEBUG] [Thread-138704] [transport.py] [_log()] client lang: <none>
2026-01-01T02:10:45.229 [DEBUG] [Thread-138704] [transport.py] [_log()] server lang: <none>
2026-01-01T02:10:45.229 [DEBUG] [Thread-138704] [transport.py] [_log()] kex follows: False
2026-01-01T02:10:45.229 [DEBUG] [Thread-138704] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:10:45.229 [DEBUG] [Thread-138704] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:10:45.229 [DEBUG] [Thread-138704] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:10:45.229 [DEBUG] [Thread-138704] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:10:45.229 [DEBUG] [Thread-138704] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:10:45.229 [DEBUG] [Thread-138704] [transport.py] [_log()] Compression: none
2026-01-01T02:10:45.229 [DEBUG] [Thread-138704] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:10:45.243 [DEBUG] [Thread-138704] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:10:45.243 [DEBUG] [Thread-138704] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:10:45.243 [DEBUG] [Thread-138704] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T02:10:45.243 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T02:10:45.243 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:10:45.243 [DEBUG] [Thread-138704] [transport.py] [_log()] userauth is OK
2026-01-01T02:10:45.243 [DEBUG] [Thread-138704] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:10:45.243 [DEBUG] [Thread-138704] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:10:45.243 [DEBUG] [Thread-138704] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T02:10:45.243 [DEBUG] [Thread-138704] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:10:45.270 [INFO] [Thread-138704] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:10:45.270 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:10:45.934 [DEBUG] [Thread-138704] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:10:45.934 [DEBUG] [Thread-138704] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:10:45.935 [DEBUG] [Thread-138704] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T02:10:45.975 [DEBUG] [Thread-138704] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:10:45.975 [DEBUG] [Thread-138704] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:10:45.978 [DEBUG] [Thread-138704] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:10:45.992 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:10:45.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T02:10:45.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T02:10:45.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T02:10:46.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:10:46.004 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T02:10:46.005 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:10:46.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:10:46.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T02:10:46.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.007076 -999.00  +13.50   6.64     81  +10.40 1 1 1 2 1     0    0 -999.00 0.00 ZNESW 10.7 6.6 210.6 14.0 14.2 -20.9 14.2 -20.7 13.9 -19.1 14.2 -20.1
2026-01-01T02:10:46.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T02:10:46.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T02:10:46.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.007076
2026-01-01T02:10:46.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T02:10:46.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T02:10:46.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T02:10:46.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T02:10:46.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T02:10:46.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T02:10:39', tmtdew=3.66, humidity=78.32, cloud=0.0, wind=13.02, temperature=13.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T02:10:39', seeing=0.98, atlas_timestamp='2026-01-01T00:10:11.366', atlas_cloud=1, atlas_rain=1, zp_data=[0.025749999999998607, 0.09425000000000061, 0.06975000000000087, 0.03049999999999997, 0.03850000000000087, 0.048250000000001236, 0.008000000000000895, 0.029749999999999943, 0.08349999999999902, 0.07450000000000045, -0.0017500000000012506, 0.04449999999999932, 0.10800000000000054, 0.11125000000000007, 0.13199999999999967, 0.051000000000000156, 0.1952499999999997, 0.17999999999999972, 0.08000000000000007, 0.13175000000000026, 0.08399999999999963, 0.27474999999999916, 0.08625000000000149, 0.16174999999999962, 0.1479999999999997, 0.1949999999999985, 0.1802500000000009, 0.2024999999999988, 0.2469999999999999, 0.27550000000000097, 0.35850000000000115, 0.25200000000000067, 0.22025000000000006], zp_timestamp='2026-01-01T00:07:00')
2026-01-01T02:10:46.007 [DEBUG] [Thread-138704] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:10:46.094 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T02:10:46.104 [DEBUG] [Thread-138707] [transport.py] [_log()] starting thread (client mode): 0xb6b15180
2026-01-01T02:10:46.104 [DEBUG] [Thread-138707] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:10:46.119 [DEBUG] [Thread-138707] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T02:10:46.119 [INFO] [Thread-138707] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T02:10:46.128 [DEBUG] [Thread-138707] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:10:46.128 [DEBUG] [Thread-138707] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T02:10:46.128 [DEBUG] [Thread-138707] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:10:46.128 [DEBUG] [Thread-138707] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:10:46.128 [DEBUG] [Thread-138707] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:10:46.128 [DEBUG] [Thread-138707] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:10:46.128 [DEBUG] [Thread-138707] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:10:46.128 [DEBUG] [Thread-138707] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:10:46.128 [DEBUG] [Thread-138707] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:10:46.128 [DEBUG] [Thread-138707] [transport.py] [_log()] client lang: <none>
2026-01-01T02:10:46.128 [DEBUG] [Thread-138707] [transport.py] [_log()] server lang: <none>
2026-01-01T02:10:46.128 [DEBUG] [Thread-138707] [transport.py] [_log()] kex follows: False
2026-01-01T02:10:46.128 [DEBUG] [Thread-138707] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:10:46.128 [DEBUG] [Thread-138707] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:10:46.129 [DEBUG] [Thread-138707] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:10:46.129 [DEBUG] [Thread-138707] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:10:46.129 [DEBUG] [Thread-138707] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:10:46.129 [DEBUG] [Thread-138707] [transport.py] [_log()] Compression: none
2026-01-01T02:10:46.129 [DEBUG] [Thread-138707] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:10:46.183 [DEBUG] [Thread-138707] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:10:46.183 [DEBUG] [Thread-138707] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:10:46.184 [DEBUG] [Thread-138707] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T02:10:46.184 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T02:10:46.185 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:10:46.240 [DEBUG] [Thread-138707] [transport.py] [_log()] userauth is OK
2026-01-01T02:10:46.240 [DEBUG] [Thread-138707] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:10:46.240 [DEBUG] [Thread-138707] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:10:46.240 [DEBUG] [Thread-138707] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T02:10:46.240 [DEBUG] [Thread-138707] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:10:46.258 [INFO] [Thread-138707] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:10:46.259 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T02:10:46.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:10:47.097 [DEBUG] [Thread-138707] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:10:47.098 [DEBUG] [Thread-138707] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:10:47.148 [DEBUG] [Thread-138707] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:10:47.148 [DEBUG] [Thread-138707] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:10:47.157 [DEBUG] [Thread-138707] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:10:47.166 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:10:47.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T02:10:47.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T02:10:47.184 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:10:47.184 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:10:47.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:10:47.192 [DEBUG] [Thread-138707] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:10:55.195 [DEBUG] [Thread-138709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:10:59.230 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:10:59.231 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:11:03.587 [DEBUG] [Thread-138710 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:11:10.245 [DEBUG] [Thread-138711 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:11:17.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T02:11:17.215 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T02:11:17.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T02:11:17.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 2, 11, 11), 3.65, 78.37, 0.0, 14.86, 13.46, 0, 0, 0, 2, 0, 0),)
2026-01-01T02:11:17.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 02:11:11
2026-01-01T02:11:18.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T02:11:18.216 [DEBUG] [Thread-138712] [transport.py] [_log()] starting thread (client mode): 0xb6b28c70
2026-01-01T02:11:18.216 [DEBUG] [Thread-138712] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:11:18.235 [DEBUG] [Thread-138712] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T02:11:18.235 [INFO] [Thread-138712] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T02:11:18.238 [DEBUG] [Thread-138712] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:11:18.239 [DEBUG] [Thread-138712] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T02:11:18.239 [DEBUG] [Thread-138712] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:11:18.239 [DEBUG] [Thread-138712] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:11:18.239 [DEBUG] [Thread-138712] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:11:18.239 [DEBUG] [Thread-138712] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:11:18.239 [DEBUG] [Thread-138712] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:11:18.239 [DEBUG] [Thread-138712] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:11:18.239 [DEBUG] [Thread-138712] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:11:18.239 [DEBUG] [Thread-138712] [transport.py] [_log()] client lang: <none>
2026-01-01T02:11:18.239 [DEBUG] [Thread-138712] [transport.py] [_log()] server lang: <none>
2026-01-01T02:11:18.239 [DEBUG] [Thread-138712] [transport.py] [_log()] kex follows: False
2026-01-01T02:11:18.239 [DEBUG] [Thread-138712] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:11:18.239 [DEBUG] [Thread-138712] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:11:18.239 [DEBUG] [Thread-138712] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:11:18.239 [DEBUG] [Thread-138712] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:11:18.240 [DEBUG] [Thread-138712] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:11:18.240 [DEBUG] [Thread-138712] [transport.py] [_log()] Compression: none
2026-01-01T02:11:18.240 [DEBUG] [Thread-138712] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:11:18.258 [DEBUG] [Thread-138712] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:11:18.258 [DEBUG] [Thread-138712] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:11:18.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T02:11:18.259 [DEBUG] [Thread-138712] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T02:11:18.260 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:11:18.262 [DEBUG] [Thread-138712] [transport.py] [_log()] userauth is OK
2026-01-01T02:11:18.262 [DEBUG] [Thread-138712] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:11:18.262 [DEBUG] [Thread-138712] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:11:18.262 [DEBUG] [Thread-138712] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T02:11:18.262 [DEBUG] [Thread-138712] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:11:18.287 [INFO] [Thread-138712] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:11:18.288 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:11:18.927 [DEBUG] [Thread-138712] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:11:18.927 [DEBUG] [Thread-138712] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:11:18.927 [DEBUG] [Thread-138712] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T02:11:18.969 [DEBUG] [Thread-138712] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:11:18.969 [DEBUG] [Thread-138712] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:11:18.971 [DEBUG] [Thread-138712] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:11:18.984 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:11:18.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T02:11:18.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T02:11:18.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T02:11:18.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:11:18.990 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T02:11:18.990 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:11:18.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:11:18.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T02:11:18.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.007424 -999.00  +13.50   5.45     81  +10.40 1 1 1 2 1     0    0 -999.00 0.00 ZNESW 4.0 5.5 251.2 11.7 14.2 -20.9 14.1 -20.5 13.9 -19.2 14.2 -19.9
2026-01-01T02:11:18.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T02:11:18.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T02:11:18.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.007424
2026-01-01T02:11:18.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T02:11:18.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T02:11:18.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T02:11:18.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T02:11:18.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T02:11:18.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T02:11:11', tmtdew=3.65, humidity=78.37, cloud=0.0, wind=14.86, temperature=13.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T02:11:12', seeing=1.12, atlas_timestamp='2026-01-01T00:10:41.434', atlas_cloud=1, atlas_rain=1, zp_data=[0.025749999999998607, 0.09425000000000061, 0.06975000000000087, 0.03049999999999997, 0.03850000000000087, 0.048250000000001236, 0.008000000000000895, 0.029749999999999943, 0.08349999999999902, 0.07450000000000045, -0.0017500000000012506, 0.04449999999999932, 0.10800000000000054, 0.11125000000000007, 0.13199999999999967, 0.051000000000000156, 0.1952499999999997, 0.17999999999999972, 0.08000000000000007, 0.13175000000000026, 0.08399999999999963, 0.27474999999999916, 0.08625000000000149, 0.16174999999999962, 0.1479999999999997, 0.1949999999999985, 0.1802500000000009, 0.2024999999999988, 0.2469999999999999, 0.27550000000000097, 0.35850000000000115, 0.25200000000000067, 0.22025000000000006], zp_timestamp='2026-01-01T00:07:00')
2026-01-01T02:11:18.991 [DEBUG] [Thread-138712] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:11:19.064 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T02:11:19.077 [DEBUG] [Thread-138715] [transport.py] [_log()] starting thread (client mode): 0xb6bbd570
2026-01-01T02:11:19.077 [DEBUG] [Thread-138715] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:11:19.092 [DEBUG] [Thread-138715] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T02:11:19.092 [INFO] [Thread-138715] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T02:11:19.099 [DEBUG] [Thread-138715] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:11:19.099 [DEBUG] [Thread-138715] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T02:11:19.099 [DEBUG] [Thread-138715] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:11:19.099 [DEBUG] [Thread-138715] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:11:19.099 [DEBUG] [Thread-138715] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:11:19.099 [DEBUG] [Thread-138715] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:11:19.100 [DEBUG] [Thread-138715] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:11:19.100 [DEBUG] [Thread-138715] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:11:19.100 [DEBUG] [Thread-138715] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:11:19.100 [DEBUG] [Thread-138715] [transport.py] [_log()] client lang: <none>
2026-01-01T02:11:19.100 [DEBUG] [Thread-138715] [transport.py] [_log()] server lang: <none>
2026-01-01T02:11:19.100 [DEBUG] [Thread-138715] [transport.py] [_log()] kex follows: False
2026-01-01T02:11:19.100 [DEBUG] [Thread-138715] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:11:19.100 [DEBUG] [Thread-138715] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:11:19.100 [DEBUG] [Thread-138715] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:11:19.100 [DEBUG] [Thread-138715] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:11:19.100 [DEBUG] [Thread-138715] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:11:19.100 [DEBUG] [Thread-138715] [transport.py] [_log()] Compression: none
2026-01-01T02:11:19.100 [DEBUG] [Thread-138715] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:11:19.158 [DEBUG] [Thread-138715] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:11:19.158 [DEBUG] [Thread-138715] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:11:19.158 [DEBUG] [Thread-138715] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T02:11:19.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T02:11:19.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:11:19.215 [DEBUG] [Thread-138715] [transport.py] [_log()] userauth is OK
2026-01-01T02:11:19.215 [DEBUG] [Thread-138715] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:11:19.215 [DEBUG] [Thread-138715] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:11:19.215 [DEBUG] [Thread-138715] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T02:11:19.215 [DEBUG] [Thread-138715] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:11:19.230 [INFO] [Thread-138715] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:11:19.230 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T02:11:19.230 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:11:20.055 [DEBUG] [Thread-138715] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:11:20.055 [DEBUG] [Thread-138715] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:11:20.103 [DEBUG] [Thread-138715] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:11:20.103 [DEBUG] [Thread-138715] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:11:20.112 [DEBUG] [Thread-138715] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:11:20.119 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:11:20.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T02:11:20.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T02:11:20.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:11:20.135 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:11:20.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:11:20.143 [DEBUG] [Thread-138715] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:11:25.276 [DEBUG] [Thread-138717 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:11:40.337 [DEBUG] [Thread-138718 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:11:50.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T02:11:50.166 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T02:11:50.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T02:11:50.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 2, 11, 44), 3.64, 78.41, 0.0, 13.27, 13.34, 0, 0, 0, 2, 0, 0),)
2026-01-01T02:11:50.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 02:11:44
2026-01-01T02:11:51.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T02:11:51.150 [DEBUG] [Thread-138719] [transport.py] [_log()] starting thread (client mode): 0xb6b14880
2026-01-01T02:11:51.150 [DEBUG] [Thread-138719] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:11:51.170 [DEBUG] [Thread-138719] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T02:11:51.170 [INFO] [Thread-138719] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T02:11:51.174 [DEBUG] [Thread-138719] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:11:51.174 [DEBUG] [Thread-138719] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T02:11:51.174 [DEBUG] [Thread-138719] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:11:51.174 [DEBUG] [Thread-138719] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:11:51.174 [DEBUG] [Thread-138719] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:11:51.174 [DEBUG] [Thread-138719] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:11:51.174 [DEBUG] [Thread-138719] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:11:51.174 [DEBUG] [Thread-138719] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:11:51.174 [DEBUG] [Thread-138719] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:11:51.174 [DEBUG] [Thread-138719] [transport.py] [_log()] client lang: <none>
2026-01-01T02:11:51.175 [DEBUG] [Thread-138719] [transport.py] [_log()] server lang: <none>
2026-01-01T02:11:51.175 [DEBUG] [Thread-138719] [transport.py] [_log()] kex follows: False
2026-01-01T02:11:51.175 [DEBUG] [Thread-138719] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:11:51.175 [DEBUG] [Thread-138719] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:11:51.175 [DEBUG] [Thread-138719] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:11:51.175 [DEBUG] [Thread-138719] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:11:51.175 [DEBUG] [Thread-138719] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:11:51.175 [DEBUG] [Thread-138719] [transport.py] [_log()] Compression: none
2026-01-01T02:11:51.175 [DEBUG] [Thread-138719] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:11:51.194 [DEBUG] [Thread-138719] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:11:51.195 [DEBUG] [Thread-138719] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:11:51.196 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T02:11:51.197 [DEBUG] [Thread-138719] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T02:11:51.197 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:11:51.199 [DEBUG] [Thread-138719] [transport.py] [_log()] userauth is OK
2026-01-01T02:11:51.199 [DEBUG] [Thread-138719] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:11:51.199 [DEBUG] [Thread-138719] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:11:51.199 [DEBUG] [Thread-138719] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T02:11:51.199 [DEBUG] [Thread-138719] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:11:51.234 [INFO] [Thread-138719] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:11:51.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:11:51.888 [DEBUG] [Thread-138719] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:11:51.888 [DEBUG] [Thread-138719] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:11:51.889 [DEBUG] [Thread-138719] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T02:11:51.930 [DEBUG] [Thread-138719] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:11:51.930 [DEBUG] [Thread-138719] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:11:51.934 [DEBUG] [Thread-138719] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:11:51.946 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:11:51.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T02:11:51.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T02:11:51.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T02:11:51.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:11:51.962 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T02:11:51.963 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:11:51.963 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:11:51.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T02:11:51.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.007771 -999.00  +13.50   7.41     81  +10.40 1 1 1 2 1     0    0 -999.00 0.00 ZNESW 8.7 7.4 210.9 9.3 14.2 -21.0 14.1 -20.5 13.9 -19.0 14.2 -20.2
2026-01-01T02:11:51.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T02:11:51.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T02:11:51.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.007771
2026-01-01T02:11:51.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T02:11:51.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T02:11:51.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T02:11:51.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T02:11:51.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T02:11:51.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T02:11:44', tmtdew=3.64, humidity=78.41, cloud=0.0, wind=13.27, temperature=13.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T02:11:44', seeing=1.12, atlas_timestamp='2026-01-01T00:11:11.414', atlas_cloud=1, atlas_rain=1, zp_data=[0.025749999999998607, 0.09425000000000061, 0.06975000000000087, 0.03049999999999997, 0.03850000000000087, 0.048250000000001236, 0.008000000000000895, 0.029749999999999943, 0.08349999999999902, 0.07450000000000045, -0.0017500000000012506, 0.04449999999999932, 0.10800000000000054, 0.11125000000000007, 0.13199999999999967, 0.051000000000000156, 0.1952499999999997, 0.17999999999999972, 0.08000000000000007, 0.13175000000000026, 0.08399999999999963, 0.27474999999999916, 0.08625000000000149, 0.16174999999999962, 0.1479999999999997, 0.1949999999999985, 0.1802500000000009, 0.2024999999999988, 0.2469999999999999, 0.27550000000000097, 0.35850000000000115, 0.25200000000000067, 0.22025000000000006], zp_timestamp='2026-01-01T00:07:00')
2026-01-01T02:11:51.966 [DEBUG] [Thread-138719] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:11:52.049 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T02:11:52.062 [DEBUG] [Thread-138722] [transport.py] [_log()] starting thread (client mode): 0xb6b14580
2026-01-01T02:11:52.062 [DEBUG] [Thread-138722] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:11:52.077 [DEBUG] [Thread-138722] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T02:11:52.077 [INFO] [Thread-138722] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T02:11:52.085 [DEBUG] [Thread-138722] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:11:52.085 [DEBUG] [Thread-138722] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T02:11:52.085 [DEBUG] [Thread-138722] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:11:52.085 [DEBUG] [Thread-138722] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:11:52.085 [DEBUG] [Thread-138722] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:11:52.085 [DEBUG] [Thread-138722] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:11:52.085 [DEBUG] [Thread-138722] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:11:52.085 [DEBUG] [Thread-138722] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:11:52.085 [DEBUG] [Thread-138722] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:11:52.085 [DEBUG] [Thread-138722] [transport.py] [_log()] client lang: <none>
2026-01-01T02:11:52.085 [DEBUG] [Thread-138722] [transport.py] [_log()] server lang: <none>
2026-01-01T02:11:52.085 [DEBUG] [Thread-138722] [transport.py] [_log()] kex follows: False
2026-01-01T02:11:52.086 [DEBUG] [Thread-138722] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:11:52.086 [DEBUG] [Thread-138722] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:11:52.086 [DEBUG] [Thread-138722] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:11:52.086 [DEBUG] [Thread-138722] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:11:52.086 [DEBUG] [Thread-138722] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:11:52.086 [DEBUG] [Thread-138722] [transport.py] [_log()] Compression: none
2026-01-01T02:11:52.086 [DEBUG] [Thread-138722] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:11:52.143 [DEBUG] [Thread-138722] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:11:52.143 [DEBUG] [Thread-138722] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:11:52.144 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T02:11:52.145 [DEBUG] [Thread-138722] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T02:11:52.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:11:52.199 [DEBUG] [Thread-138722] [transport.py] [_log()] userauth is OK
2026-01-01T02:11:52.199 [DEBUG] [Thread-138722] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:11:52.199 [DEBUG] [Thread-138722] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:11:52.199 [DEBUG] [Thread-138722] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T02:11:52.199 [DEBUG] [Thread-138722] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:11:52.223 [INFO] [Thread-138722] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:11:52.224 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T02:11:52.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:11:53.089 [DEBUG] [Thread-138722] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:11:53.089 [DEBUG] [Thread-138722] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:11:53.137 [DEBUG] [Thread-138722] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:11:53.137 [DEBUG] [Thread-138722] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:11:53.146 [DEBUG] [Thread-138722] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:11:53.155 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:11:53.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T02:11:53.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T02:11:53.174 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:11:53.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:11:53.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:11:53.182 [DEBUG] [Thread-138722] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:11:55.373 [DEBUG] [Thread-138724 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:11:59.429 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:11:59.430 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:12:03.682 [DEBUG] [Thread-138725 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:12:10.408 [DEBUG] [Thread-138726 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:12:23.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T02:12:23.194 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T02:12:23.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T02:12:23.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 2, 12, 16), 3.64, 78.41, 0.0, 11.95, 13.33, 0, 0, 0, 2, 0, 0),)
2026-01-01T02:12:23.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 02:12:16
2026-01-01T02:12:24.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T02:12:24.166 [DEBUG] [Thread-138727] [transport.py] [_log()] starting thread (client mode): 0xb6bbc520
2026-01-01T02:12:24.166 [DEBUG] [Thread-138727] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:12:24.187 [DEBUG] [Thread-138727] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T02:12:24.187 [INFO] [Thread-138727] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T02:12:24.191 [DEBUG] [Thread-138727] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:12:24.191 [DEBUG] [Thread-138727] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T02:12:24.191 [DEBUG] [Thread-138727] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:12:24.191 [DEBUG] [Thread-138727] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:12:24.191 [DEBUG] [Thread-138727] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:12:24.191 [DEBUG] [Thread-138727] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:12:24.191 [DEBUG] [Thread-138727] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:12:24.192 [DEBUG] [Thread-138727] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:12:24.192 [DEBUG] [Thread-138727] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:12:24.192 [DEBUG] [Thread-138727] [transport.py] [_log()] client lang: <none>
2026-01-01T02:12:24.192 [DEBUG] [Thread-138727] [transport.py] [_log()] server lang: <none>
2026-01-01T02:12:24.192 [DEBUG] [Thread-138727] [transport.py] [_log()] kex follows: False
2026-01-01T02:12:24.192 [DEBUG] [Thread-138727] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:12:24.192 [DEBUG] [Thread-138727] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:12:24.192 [DEBUG] [Thread-138727] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:12:24.192 [DEBUG] [Thread-138727] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:12:24.192 [DEBUG] [Thread-138727] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:12:24.192 [DEBUG] [Thread-138727] [transport.py] [_log()] Compression: none
2026-01-01T02:12:24.192 [DEBUG] [Thread-138727] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:12:24.214 [DEBUG] [Thread-138727] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:12:24.214 [DEBUG] [Thread-138727] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:12:24.215 [DEBUG] [Thread-138727] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T02:12:24.215 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T02:12:24.216 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:12:24.217 [DEBUG] [Thread-138727] [transport.py] [_log()] userauth is OK
2026-01-01T02:12:24.217 [DEBUG] [Thread-138727] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:12:24.217 [DEBUG] [Thread-138727] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:12:24.217 [DEBUG] [Thread-138727] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T02:12:24.217 [DEBUG] [Thread-138727] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:12:24.252 [INFO] [Thread-138727] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:12:24.253 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:12:24.930 [DEBUG] [Thread-138727] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:12:24.930 [DEBUG] [Thread-138727] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:12:24.931 [DEBUG] [Thread-138727] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T02:12:24.971 [DEBUG] [Thread-138727] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:12:24.971 [DEBUG] [Thread-138727] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:12:24.975 [DEBUG] [Thread-138727] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:12:24.987 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:12:24.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T02:12:24.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T02:12:24.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T02:12:24.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:12:25.000 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T02:12:25.000 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:12:25.000 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:12:25.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T02:12:25.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.008118 -999.00  +13.50  10.77     81  +10.40 1 1 1 2 1     0    0 -999.00 0.00 ZNESW 11.8 10.8 223.0 16.3 14.2 -21.0 14.1 -20.6 13.9 -18.9 14.2 -20.1
2026-01-01T02:12:25.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T02:12:25.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T02:12:25.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.008118
2026-01-01T02:12:25.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T02:12:25.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T02:12:25.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T02:12:25.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T02:12:25.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T02:12:25.002 [DEBUG] [Thread-138727] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:12:25.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T02:12:16', tmtdew=3.64, humidity=78.41, cloud=0.0, wind=11.95, temperature=13.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T02:12:16', seeing=1.03, atlas_timestamp='2026-01-01T00:11:41.395', atlas_cloud=1, atlas_rain=1, zp_data=[0.025749999999998607, 0.09425000000000061, 0.06975000000000087, 0.03049999999999997, 0.03850000000000087, 0.048250000000001236, 0.008000000000000895, 0.029749999999999943, 0.08349999999999902, 0.07450000000000045, -0.0017500000000012506, 0.04449999999999932, 0.10800000000000054, 0.11125000000000007, 0.13199999999999967, 0.051000000000000156, 0.1952499999999997, 0.17999999999999972, 0.08000000000000007, 0.13175000000000026, 0.08399999999999963, 0.27474999999999916, 0.08625000000000149, 0.16174999999999962, 0.1479999999999997, 0.1949999999999985, 0.1802500000000009, 0.2024999999999988, 0.2469999999999999, 0.27550000000000097, 0.35850000000000115, 0.25200000000000067, 0.22025000000000006], zp_timestamp='2026-01-01T00:07:00')
2026-01-01T02:12:25.086 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T02:12:25.097 [DEBUG] [Thread-138730] [transport.py] [_log()] starting thread (client mode): 0xb1796bf0
2026-01-01T02:12:25.097 [DEBUG] [Thread-138730] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:12:25.112 [DEBUG] [Thread-138730] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T02:12:25.113 [INFO] [Thread-138730] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T02:12:25.120 [DEBUG] [Thread-138730] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:12:25.121 [DEBUG] [Thread-138730] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T02:12:25.121 [DEBUG] [Thread-138730] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:12:25.121 [DEBUG] [Thread-138730] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:12:25.121 [DEBUG] [Thread-138730] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:12:25.121 [DEBUG] [Thread-138730] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:12:25.121 [DEBUG] [Thread-138730] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:12:25.121 [DEBUG] [Thread-138730] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:12:25.121 [DEBUG] [Thread-138730] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:12:25.121 [DEBUG] [Thread-138730] [transport.py] [_log()] client lang: <none>
2026-01-01T02:12:25.121 [DEBUG] [Thread-138730] [transport.py] [_log()] server lang: <none>
2026-01-01T02:12:25.121 [DEBUG] [Thread-138730] [transport.py] [_log()] kex follows: False
2026-01-01T02:12:25.121 [DEBUG] [Thread-138730] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:12:25.121 [DEBUG] [Thread-138730] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:12:25.121 [DEBUG] [Thread-138730] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:12:25.121 [DEBUG] [Thread-138730] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:12:25.121 [DEBUG] [Thread-138730] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:12:25.121 [DEBUG] [Thread-138730] [transport.py] [_log()] Compression: none
2026-01-01T02:12:25.121 [DEBUG] [Thread-138730] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:12:25.179 [DEBUG] [Thread-138730] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:12:25.179 [DEBUG] [Thread-138730] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:12:25.180 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T02:12:25.181 [DEBUG] [Thread-138730] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T02:12:25.182 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:12:25.235 [DEBUG] [Thread-138730] [transport.py] [_log()] userauth is OK
2026-01-01T02:12:25.236 [DEBUG] [Thread-138730] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:12:25.236 [DEBUG] [Thread-138730] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:12:25.236 [DEBUG] [Thread-138730] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T02:12:25.236 [DEBUG] [Thread-138730] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:12:25.255 [INFO] [Thread-138730] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:12:25.255 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T02:12:25.256 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:12:25.442 [DEBUG] [Thread-138732 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:12:26.175 [DEBUG] [Thread-138730] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:12:26.175 [DEBUG] [Thread-138730] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:12:26.224 [DEBUG] [Thread-138730] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:12:26.224 [DEBUG] [Thread-138730] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:12:26.234 [DEBUG] [Thread-138730] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:12:26.243 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:12:26.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T02:12:26.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T02:12:26.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:12:26.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:12:26.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:12:26.269 [DEBUG] [Thread-138730] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:12:40.486 [DEBUG] [Thread-138733 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:12:55.519 [DEBUG] [Thread-138734 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:12:56.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T02:12:56.292 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T02:12:56.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T02:12:57.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 2, 12, 48), 3.59, 78.96, 0.0, 12.76, 13.36, 0, 0, 0, 2, 0, 0),)
2026-01-01T02:12:57.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 02:12:48
2026-01-01T02:12:57.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T02:12:57.295 [DEBUG] [Thread-138735] [transport.py] [_log()] starting thread (client mode): 0xb95f3490
2026-01-01T02:12:57.295 [DEBUG] [Thread-138735] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:12:57.316 [DEBUG] [Thread-138735] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T02:12:57.316 [INFO] [Thread-138735] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T02:12:57.320 [DEBUG] [Thread-138735] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:12:57.320 [DEBUG] [Thread-138735] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T02:12:57.320 [DEBUG] [Thread-138735] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:12:57.320 [DEBUG] [Thread-138735] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:12:57.320 [DEBUG] [Thread-138735] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:12:57.320 [DEBUG] [Thread-138735] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:12:57.320 [DEBUG] [Thread-138735] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:12:57.320 [DEBUG] [Thread-138735] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:12:57.320 [DEBUG] [Thread-138735] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:12:57.320 [DEBUG] [Thread-138735] [transport.py] [_log()] client lang: <none>
2026-01-01T02:12:57.320 [DEBUG] [Thread-138735] [transport.py] [_log()] server lang: <none>
2026-01-01T02:12:57.320 [DEBUG] [Thread-138735] [transport.py] [_log()] kex follows: False
2026-01-01T02:12:57.320 [DEBUG] [Thread-138735] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:12:57.320 [DEBUG] [Thread-138735] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:12:57.320 [DEBUG] [Thread-138735] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:12:57.321 [DEBUG] [Thread-138735] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:12:57.321 [DEBUG] [Thread-138735] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:12:57.321 [DEBUG] [Thread-138735] [transport.py] [_log()] Compression: none
2026-01-01T02:12:57.321 [DEBUG] [Thread-138735] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:12:57.338 [DEBUG] [Thread-138735] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:12:57.339 [DEBUG] [Thread-138735] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:12:57.340 [DEBUG] [Thread-138735] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T02:12:57.340 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T02:12:57.340 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:12:57.342 [DEBUG] [Thread-138735] [transport.py] [_log()] userauth is OK
2026-01-01T02:12:57.342 [DEBUG] [Thread-138735] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:12:57.342 [DEBUG] [Thread-138735] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:12:57.342 [DEBUG] [Thread-138735] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T02:12:57.342 [DEBUG] [Thread-138735] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:12:57.378 [INFO] [Thread-138735] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:12:57.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:12:58.046 [DEBUG] [Thread-138735] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:12:58.047 [DEBUG] [Thread-138735] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:12:58.047 [DEBUG] [Thread-138735] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T02:12:58.088 [DEBUG] [Thread-138735] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:12:58.088 [DEBUG] [Thread-138735] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:12:58.091 [DEBUG] [Thread-138735] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:12:58.102 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:12:58.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T02:12:58.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T02:12:58.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T02:12:58.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:12:58.114 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T02:12:58.114 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:12:58.114 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:12:58.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T02:12:58.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.008812 -999.00  +13.50   7.62     81  +10.40 1 1 1 2 1     0    0 -999.00 0.00 ZNESW 7.8 7.6 207.6 12.8 14.2 -21.0 14.1 -20.6 13.9 -19.1 14.2 -20.2
2026-01-01T02:12:58.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T02:12:58.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T02:12:58.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.008812
2026-01-01T02:12:58.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T02:12:58.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T02:12:58.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T02:12:58.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T02:12:58.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T02:12:58.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T02:12:48', tmtdew=3.59, humidity=78.96, cloud=0.0, wind=12.76, temperature=13.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T02:12:48', seeing=0.9, atlas_timestamp='2026-01-01T00:12:41.357', atlas_cloud=1, atlas_rain=1, zp_data=[0.0417500000000004, 0.11224999999999952, 0.08025000000000126, 0.05149999999999899, 0.042500000000000426, 0.03125, 0.07499999999999929, 0.07324999999999982, 0.09399999999999942, 0.09299999999999997, -0.006750000000000256, 0.07499999999999929, 0.08699999999999974, 0.12725000000000009, 0.10299999999999976, 0.05799999999999983, 0.11224999999999952, 0.2494999999999994, 0.14100000000000001, 0.12624999999999886, 0.14449999999999896, 0.10024999999999906, 0.03725000000000023, 0.12875000000000014, 0.18299999999999983, 0.22750000000000092, 0.1827500000000004, 0.20550000000000068, 0.2519999999999998, 0.2790000000000008, 0.36600000000000144, 0.30400000000000116, 0.2132499999999986], zp_timestamp='2026-01-01T00:11:00')
2026-01-01T02:12:58.117 [DEBUG] [Thread-138735] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:12:58.208 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T02:12:58.220 [DEBUG] [Thread-138738] [transport.py] [_log()] starting thread (client mode): 0xb95b15d0
2026-01-01T02:12:58.220 [DEBUG] [Thread-138738] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:12:58.236 [DEBUG] [Thread-138738] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T02:12:58.237 [INFO] [Thread-138738] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T02:12:58.244 [DEBUG] [Thread-138738] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:12:58.244 [DEBUG] [Thread-138738] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T02:12:58.244 [DEBUG] [Thread-138738] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:12:58.244 [DEBUG] [Thread-138738] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:12:58.244 [DEBUG] [Thread-138738] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:12:58.245 [DEBUG] [Thread-138738] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:12:58.245 [DEBUG] [Thread-138738] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:12:58.245 [DEBUG] [Thread-138738] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:12:58.245 [DEBUG] [Thread-138738] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:12:58.245 [DEBUG] [Thread-138738] [transport.py] [_log()] client lang: <none>
2026-01-01T02:12:58.245 [DEBUG] [Thread-138738] [transport.py] [_log()] server lang: <none>
2026-01-01T02:12:58.245 [DEBUG] [Thread-138738] [transport.py] [_log()] kex follows: False
2026-01-01T02:12:58.245 [DEBUG] [Thread-138738] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:12:58.245 [DEBUG] [Thread-138738] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:12:58.246 [DEBUG] [Thread-138738] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:12:58.246 [DEBUG] [Thread-138738] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:12:58.246 [DEBUG] [Thread-138738] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:12:58.246 [DEBUG] [Thread-138738] [transport.py] [_log()] Compression: none
2026-01-01T02:12:58.246 [DEBUG] [Thread-138738] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:12:58.303 [DEBUG] [Thread-138738] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:12:58.303 [DEBUG] [Thread-138738] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:12:58.304 [DEBUG] [Thread-138738] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T02:12:58.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T02:12:58.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:12:58.358 [DEBUG] [Thread-138738] [transport.py] [_log()] userauth is OK
2026-01-01T02:12:58.359 [DEBUG] [Thread-138738] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:12:58.359 [DEBUG] [Thread-138738] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:12:58.359 [DEBUG] [Thread-138738] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T02:12:58.359 [DEBUG] [Thread-138738] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:12:58.379 [INFO] [Thread-138738] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:12:58.380 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T02:12:58.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:12:59.213 [DEBUG] [Thread-138738] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:12:59.213 [DEBUG] [Thread-138738] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:12:59.261 [DEBUG] [Thread-138738] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:12:59.261 [DEBUG] [Thread-138738] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:12:59.271 [DEBUG] [Thread-138738] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:12:59.280 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:12: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')
2026-01-01T02:12:59.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T02:12:59.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:12:59.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:12:59.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:12:59.308 [DEBUG] [Thread-138738] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:12:59.629 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:12:59.631 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:13:03.760 [DEBUG] [Thread-138740 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:13:10.558 [DEBUG] [Thread-138741 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:13:25.606 [DEBUG] [Thread-138742 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:13:29.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T02:13:29.331 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T02:13:29.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T02:13:30.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 2, 13, 20), 3.59, 78.92, 0.0, 14.29, 13.34, 0, 0, 0, 2, 0, 0),)
2026-01-01T02:13:30.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 02:13:20
2026-01-01T02:13:30.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T02:13:30.311 [DEBUG] [Thread-138743] [transport.py] [_log()] starting thread (client mode): 0xb95b2980
2026-01-01T02:13:30.311 [DEBUG] [Thread-138743] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:13:30.327 [DEBUG] [Thread-138743] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T02:13:30.327 [INFO] [Thread-138743] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T02:13:30.331 [DEBUG] [Thread-138743] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:13:30.331 [DEBUG] [Thread-138743] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T02:13:30.331 [DEBUG] [Thread-138743] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:13:30.331 [DEBUG] [Thread-138743] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:13:30.331 [DEBUG] [Thread-138743] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:13:30.331 [DEBUG] [Thread-138743] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:13:30.331 [DEBUG] [Thread-138743] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:13:30.331 [DEBUG] [Thread-138743] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:13:30.331 [DEBUG] [Thread-138743] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:13:30.331 [DEBUG] [Thread-138743] [transport.py] [_log()] client lang: <none>
2026-01-01T02:13:30.331 [DEBUG] [Thread-138743] [transport.py] [_log()] server lang: <none>
2026-01-01T02:13:30.331 [DEBUG] [Thread-138743] [transport.py] [_log()] kex follows: False
2026-01-01T02:13:30.331 [DEBUG] [Thread-138743] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:13:30.331 [DEBUG] [Thread-138743] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:13:30.331 [DEBUG] [Thread-138743] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:13:30.332 [DEBUG] [Thread-138743] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:13:30.332 [DEBUG] [Thread-138743] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:13:30.332 [DEBUG] [Thread-138743] [transport.py] [_log()] Compression: none
2026-01-01T02:13:30.332 [DEBUG] [Thread-138743] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:13:30.351 [DEBUG] [Thread-138743] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:13:30.351 [DEBUG] [Thread-138743] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:13:30.352 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T02:13:30.352 [DEBUG] [Thread-138743] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T02:13:30.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:13:30.393 [DEBUG] [Thread-138743] [transport.py] [_log()] userauth is OK
2026-01-01T02:13:30.393 [DEBUG] [Thread-138743] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:13:30.393 [DEBUG] [Thread-138743] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:13:30.394 [DEBUG] [Thread-138743] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T02:13:30.394 [DEBUG] [Thread-138743] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:13:30.431 [INFO] [Thread-138743] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:13:30.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:13:31.062 [DEBUG] [Thread-138743] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:13:31.063 [DEBUG] [Thread-138743] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:13:31.063 [DEBUG] [Thread-138743] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T02:13:31.103 [DEBUG] [Thread-138743] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:13:31.104 [DEBUG] [Thread-138743] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:13:31.107 [DEBUG] [Thread-138743] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:13:31.118 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:13:31.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T02:13:31.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T02:13:31.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T02:13:31.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:13:31.132 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T02:13:31.132 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:13:31.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:13:31.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T02:13:31.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.009160 -999.00  +13.50   5.09     81  +10.40 1 1 1 2 1     0    0 -999.00 0.00 ZNESW 5.4 5.1 206.9 12.2 14.2 -21.0 14.1 -20.6 13.8 -19.0 14.2 -20.1
2026-01-01T02:13:31.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T02:13:31.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T02:13:31.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.009160
2026-01-01T02:13:31.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T02:13:31.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T02:13:31.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T02:13:31.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T02:13:31.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T02:13:31.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T02:13:20', tmtdew=3.59, humidity=78.92, cloud=0.0, wind=14.29, temperature=13.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T02:13:20', seeing=0.86, atlas_timestamp='2026-01-01T00:13:11.424', atlas_cloud=1, atlas_rain=1, zp_data=[0.0417500000000004, 0.11224999999999952, 0.08025000000000126, 0.05149999999999899, 0.042500000000000426, 0.03125, 0.07499999999999929, 0.07324999999999982, 0.09399999999999942, 0.09299999999999997, -0.006750000000000256, 0.07499999999999929, 0.08699999999999974, 0.12725000000000009, 0.10299999999999976, 0.05799999999999983, 0.11224999999999952, 0.2494999999999994, 0.14100000000000001, 0.12624999999999886, 0.14449999999999896, 0.10024999999999906, 0.03725000000000023, 0.12875000000000014, 0.18299999999999983, 0.22750000000000092, 0.1827500000000004, 0.20550000000000068, 0.2519999999999998, 0.2790000000000008, 0.36600000000000144, 0.30400000000000116, 0.2132499999999986], zp_timestamp='2026-01-01T00:11:00')
2026-01-01T02:13:31.135 [DEBUG] [Thread-138743] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:13:31.222 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T02:13:31.233 [DEBUG] [Thread-138746] [transport.py] [_log()] starting thread (client mode): 0xb95b0100
2026-01-01T02:13:31.233 [DEBUG] [Thread-138746] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:13:31.248 [DEBUG] [Thread-138746] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T02:13:31.249 [INFO] [Thread-138746] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T02:13:31.256 [DEBUG] [Thread-138746] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:13:31.256 [DEBUG] [Thread-138746] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T02:13:31.256 [DEBUG] [Thread-138746] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:13:31.256 [DEBUG] [Thread-138746] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:13:31.256 [DEBUG] [Thread-138746] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:13:31.256 [DEBUG] [Thread-138746] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:13:31.256 [DEBUG] [Thread-138746] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:13:31.256 [DEBUG] [Thread-138746] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:13:31.257 [DEBUG] [Thread-138746] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:13:31.257 [DEBUG] [Thread-138746] [transport.py] [_log()] client lang: <none>
2026-01-01T02:13:31.257 [DEBUG] [Thread-138746] [transport.py] [_log()] server lang: <none>
2026-01-01T02:13:31.257 [DEBUG] [Thread-138746] [transport.py] [_log()] kex follows: False
2026-01-01T02:13:31.257 [DEBUG] [Thread-138746] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:13:31.257 [DEBUG] [Thread-138746] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:13:31.257 [DEBUG] [Thread-138746] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:13:31.257 [DEBUG] [Thread-138746] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:13:31.257 [DEBUG] [Thread-138746] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:13:31.257 [DEBUG] [Thread-138746] [transport.py] [_log()] Compression: none
2026-01-01T02:13:31.257 [DEBUG] [Thread-138746] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:13:31.314 [DEBUG] [Thread-138746] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:13:31.315 [DEBUG] [Thread-138746] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:13:31.315 [DEBUG] [Thread-138746] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T02:13:31.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T02:13:31.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:13:31.370 [DEBUG] [Thread-138746] [transport.py] [_log()] userauth is OK
2026-01-01T02:13:31.371 [DEBUG] [Thread-138746] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:13:31.371 [DEBUG] [Thread-138746] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:13:31.371 [DEBUG] [Thread-138746] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T02:13:31.371 [DEBUG] [Thread-138746] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:13:31.390 [INFO] [Thread-138746] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:13:31.391 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T02:13:31.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:13:32.228 [DEBUG] [Thread-138746] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:13:32.228 [DEBUG] [Thread-138746] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:13:32.276 [DEBUG] [Thread-138746] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:13:32.276 [DEBUG] [Thread-138746] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:13:32.286 [DEBUG] [Thread-138746] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:13:32.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:13:32.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T02:13: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
2026-01-01T02:13:32.315 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:13:32.315 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:13:32.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:13:32.325 [DEBUG] [Thread-138746] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:13:40.644 [DEBUG] [Thread-138748 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:13:55.692 [DEBUG] [Thread-138749 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:13:59.830 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:13:59.831 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:14:02.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T02:14:02.337 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T02:14:02.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T02:14:03.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 2, 13, 52), 3.62, 78.79, 0.0, 13.94, 13.38, 0, 0, 0, 2, 0, 0),)
2026-01-01T02:14:03.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 02:13:52
2026-01-01T02:14:03.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T02:14:03.317 [DEBUG] [Thread-138750] [transport.py] [_log()] starting thread (client mode): 0xb6bbeb60
2026-01-01T02:14:03.317 [DEBUG] [Thread-138750] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:14:03.338 [DEBUG] [Thread-138750] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T02:14:03.338 [INFO] [Thread-138750] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T02:14:03.341 [DEBUG] [Thread-138750] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:14:03.341 [DEBUG] [Thread-138750] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T02:14:03.341 [DEBUG] [Thread-138750] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:14:03.341 [DEBUG] [Thread-138750] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:14:03.342 [DEBUG] [Thread-138750] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:14:03.342 [DEBUG] [Thread-138750] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:14:03.342 [DEBUG] [Thread-138750] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:14:03.342 [DEBUG] [Thread-138750] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:14:03.342 [DEBUG] [Thread-138750] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:14:03.342 [DEBUG] [Thread-138750] [transport.py] [_log()] client lang: <none>
2026-01-01T02:14:03.342 [DEBUG] [Thread-138750] [transport.py] [_log()] server lang: <none>
2026-01-01T02:14:03.342 [DEBUG] [Thread-138750] [transport.py] [_log()] kex follows: False
2026-01-01T02:14:03.342 [DEBUG] [Thread-138750] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:14:03.342 [DEBUG] [Thread-138750] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:14:03.342 [DEBUG] [Thread-138750] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:14:03.342 [DEBUG] [Thread-138750] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:14:03.342 [DEBUG] [Thread-138750] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:14:03.342 [DEBUG] [Thread-138750] [transport.py] [_log()] Compression: none
2026-01-01T02:14:03.342 [DEBUG] [Thread-138750] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:14:03.360 [DEBUG] [Thread-138750] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:14:03.360 [DEBUG] [Thread-138750] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:14:03.361 [DEBUG] [Thread-138750] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T02:14:03.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T02:14:03.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:14:03.363 [DEBUG] [Thread-138750] [transport.py] [_log()] userauth is OK
2026-01-01T02:14:03.363 [DEBUG] [Thread-138750] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:14:03.364 [DEBUG] [Thread-138750] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:14:03.364 [DEBUG] [Thread-138750] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T02:14:03.364 [DEBUG] [Thread-138750] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:14:03.401 [INFO] [Thread-138750] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:14:03.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:14:03.833 [DEBUG] [Thread-138752 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:14:04.055 [DEBUG] [Thread-138750] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:14:04.055 [DEBUG] [Thread-138750] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:14:04.056 [DEBUG] [Thread-138750] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T02:14:04.096 [DEBUG] [Thread-138750] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:14:04.096 [DEBUG] [Thread-138750] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:14:04.099 [DEBUG] [Thread-138750] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:14:04.111 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:14:04.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T02:14:04.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T02:14:04.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T02:14:04.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:14:04.122 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T02:14:04.122 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:14:04.123 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:14:04.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T02:14:04.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.009507 -999.00  +13.50   9.65     81  +10.40 1 1 1 2 1     0    0 -999.00 0.00 ZNESW 10.8 9.7 198.6 14.2 14.2 -21.1 14.1 -21.0 13.8 -19.2 14.2 -20.2
2026-01-01T02:14:04.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T02:14:04.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T02:14:04.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.009507
2026-01-01T02:14:04.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T02:14:04.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T02:14:04.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T02:14:04.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T02:14:04.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T02:14:04.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T02:13:52', tmtdew=3.62, humidity=78.79, cloud=0.0, wind=13.94, temperature=13.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T02:13:52', seeing=0.79, atlas_timestamp='2026-01-01T00:13:41.405', atlas_cloud=1, atlas_rain=1, zp_data=[0.0417500000000004, 0.11224999999999952, 0.08025000000000126, 0.05149999999999899, 0.042500000000000426, 0.03125, 0.07499999999999929, 0.07324999999999982, 0.09399999999999942, 0.09299999999999997, -0.006750000000000256, 0.07499999999999929, 0.08699999999999974, 0.12725000000000009, 0.10299999999999976, 0.05799999999999983, 0.11224999999999952, 0.2494999999999994, 0.14100000000000001, 0.12624999999999886, 0.14449999999999896, 0.10024999999999906, 0.03725000000000023, 0.12875000000000014, 0.18299999999999983, 0.22750000000000092, 0.1827500000000004, 0.20550000000000068, 0.2519999999999998, 0.2790000000000008, 0.36600000000000144, 0.30400000000000116, 0.2132499999999986], zp_timestamp='2026-01-01T00:11:00')
2026-01-01T02:14:04.125 [DEBUG] [Thread-138750] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:14:04.209 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T02:14:04.220 [DEBUG] [Thread-138754] [transport.py] [_log()] starting thread (client mode): 0xb17947c0
2026-01-01T02:14:04.220 [DEBUG] [Thread-138754] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:14:04.236 [DEBUG] [Thread-138754] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T02:14:04.236 [INFO] [Thread-138754] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T02:14:04.243 [DEBUG] [Thread-138754] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:14:04.243 [DEBUG] [Thread-138754] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T02:14:04.243 [DEBUG] [Thread-138754] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:14:04.243 [DEBUG] [Thread-138754] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:14:04.243 [DEBUG] [Thread-138754] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:14:04.244 [DEBUG] [Thread-138754] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:14:04.244 [DEBUG] [Thread-138754] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:14:04.244 [DEBUG] [Thread-138754] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:14:04.244 [DEBUG] [Thread-138754] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:14:04.244 [DEBUG] [Thread-138754] [transport.py] [_log()] client lang: <none>
2026-01-01T02:14:04.244 [DEBUG] [Thread-138754] [transport.py] [_log()] server lang: <none>
2026-01-01T02:14:04.244 [DEBUG] [Thread-138754] [transport.py] [_log()] kex follows: False
2026-01-01T02:14:04.244 [DEBUG] [Thread-138754] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:14:04.244 [DEBUG] [Thread-138754] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:14:04.244 [DEBUG] [Thread-138754] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:14:04.244 [DEBUG] [Thread-138754] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:14:04.244 [DEBUG] [Thread-138754] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:14:04.244 [DEBUG] [Thread-138754] [transport.py] [_log()] Compression: none
2026-01-01T02:14:04.244 [DEBUG] [Thread-138754] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:14:04.302 [DEBUG] [Thread-138754] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:14:04.302 [DEBUG] [Thread-138754] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:14:04.303 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T02:14:04.303 [DEBUG] [Thread-138754] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T02:14:04.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:14:04.358 [DEBUG] [Thread-138754] [transport.py] [_log()] userauth is OK
2026-01-01T02:14:04.358 [DEBUG] [Thread-138754] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:14:04.358 [DEBUG] [Thread-138754] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:14:04.358 [DEBUG] [Thread-138754] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T02:14:04.358 [DEBUG] [Thread-138754] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:14:04.378 [INFO] [Thread-138754] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:14:04.378 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T02:14:04.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:14:05.226 [DEBUG] [Thread-138754] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:14:05.226 [DEBUG] [Thread-138754] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:14:05.274 [DEBUG] [Thread-138754] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:14:05.274 [DEBUG] [Thread-138754] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:14:05.283 [DEBUG] [Thread-138754] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:14:05.293 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:14:05.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T02:14:05.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T02:14:05.311 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:14:05.312 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:14:05.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:14:05.320 [DEBUG] [Thread-138754] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:14:10.725 [DEBUG] [Thread-138756 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:14:25.773 [DEBUG] [Thread-138757 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:14:35.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T02:14:35.342 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T02:14:35.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T02:14:36.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 2, 14, 24), 3.62, 78.76, 0.0, 13.38, 13.34, 0, 0, 0, 2, 0, 0),)
2026-01-01T02:14:36.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 02:14:24
2026-01-01T02:14:36.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T02:14:36.374 [DEBUG] [Thread-138758] [transport.py] [_log()] starting thread (client mode): 0xb17960b0
2026-01-01T02:14:36.375 [DEBUG] [Thread-138758] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:14:36.394 [DEBUG] [Thread-138758] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T02:14:36.394 [INFO] [Thread-138758] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T02:14:36.397 [DEBUG] [Thread-138758] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:14:36.397 [DEBUG] [Thread-138758] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T02:14:36.397 [DEBUG] [Thread-138758] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:14:36.397 [DEBUG] [Thread-138758] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:14:36.397 [DEBUG] [Thread-138758] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:14:36.397 [DEBUG] [Thread-138758] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:14:36.397 [DEBUG] [Thread-138758] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:14:36.397 [DEBUG] [Thread-138758] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:14:36.397 [DEBUG] [Thread-138758] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:14:36.397 [DEBUG] [Thread-138758] [transport.py] [_log()] client lang: <none>
2026-01-01T02:14:36.397 [DEBUG] [Thread-138758] [transport.py] [_log()] server lang: <none>
2026-01-01T02:14:36.397 [DEBUG] [Thread-138758] [transport.py] [_log()] kex follows: False
2026-01-01T02:14:36.397 [DEBUG] [Thread-138758] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:14:36.397 [DEBUG] [Thread-138758] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:14:36.397 [DEBUG] [Thread-138758] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:14:36.397 [DEBUG] [Thread-138758] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:14:36.398 [DEBUG] [Thread-138758] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:14:36.398 [DEBUG] [Thread-138758] [transport.py] [_log()] Compression: none
2026-01-01T02:14:36.398 [DEBUG] [Thread-138758] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:14:36.412 [DEBUG] [Thread-138758] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:14:36.413 [DEBUG] [Thread-138758] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:14:36.413 [DEBUG] [Thread-138758] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T02:14:36.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T02:14:36.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:14:36.414 [DEBUG] [Thread-138758] [transport.py] [_log()] userauth is OK
2026-01-01T02:14:36.414 [DEBUG] [Thread-138758] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:14:36.414 [DEBUG] [Thread-138758] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:14:36.414 [DEBUG] [Thread-138758] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T02:14:36.414 [DEBUG] [Thread-138758] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:14:36.425 [INFO] [Thread-138758] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:14:36.425 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:14:37.070 [DEBUG] [Thread-138758] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:14:37.070 [DEBUG] [Thread-138758] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:14:37.070 [DEBUG] [Thread-138758] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T02:14:37.112 [DEBUG] [Thread-138758] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:14:37.112 [DEBUG] [Thread-138758] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:14:37.115 [DEBUG] [Thread-138758] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:14:37.126 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:14:37.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T02:14:37.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T02:14:37.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T02:14:37.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:14:37.136 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T02:14:37.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:14:37.136 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:14:37.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T02:14:37.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.009854 -999.00  +13.50   6.79     81  +10.40 1 1 1 2 1     0    0 -999.00 0.00 ZNESW 7.2 6.8 194.0 12.2 14.2 -21.1 14.1 -20.7 13.9 -19.2 14.2 -20.2
2026-01-01T02:14:37.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T02:14:37.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T02:14:37.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.009854
2026-01-01T02:14:37.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T02:14:37.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T02:14:37.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T02:14:37.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T02:14:37.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T02:14:37.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T02:14:24', tmtdew=3.62, humidity=78.76, cloud=0.0, wind=13.38, temperature=13.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T02:14:24', seeing=1.13, atlas_timestamp='2026-01-01T00:14:11.386', atlas_cloud=1, atlas_rain=1, zp_data=[0.0417500000000004, 0.11224999999999952, 0.08025000000000126, 0.05149999999999899, 0.042500000000000426, 0.03125, 0.07499999999999929, 0.07324999999999982, 0.09399999999999942, 0.09299999999999997, -0.006750000000000256, 0.07499999999999929, 0.08699999999999974, 0.12725000000000009, 0.10299999999999976, 0.05799999999999983, 0.11224999999999952, 0.2494999999999994, 0.14100000000000001, 0.12624999999999886, 0.14449999999999896, 0.10024999999999906, 0.03725000000000023, 0.12875000000000014, 0.18299999999999983, 0.22750000000000092, 0.1827500000000004, 0.20550000000000068, 0.2519999999999998, 0.2790000000000008, 0.36600000000000144, 0.30400000000000116, 0.2132499999999986], zp_timestamp='2026-01-01T00:11:00')
2026-01-01T02:14:37.138 [DEBUG] [Thread-138758] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:14:37.211 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T02:14:37.224 [DEBUG] [Thread-138761] [transport.py] [_log()] starting thread (client mode): 0xb95b37c0
2026-01-01T02:14:37.224 [DEBUG] [Thread-138761] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:14:37.244 [DEBUG] [Thread-138761] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T02:14:37.244 [INFO] [Thread-138761] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T02:14:37.251 [DEBUG] [Thread-138761] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:14:37.251 [DEBUG] [Thread-138761] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T02:14:37.251 [DEBUG] [Thread-138761] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:14:37.251 [DEBUG] [Thread-138761] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:14:37.251 [DEBUG] [Thread-138761] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:14:37.251 [DEBUG] [Thread-138761] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:14:37.251 [DEBUG] [Thread-138761] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:14:37.251 [DEBUG] [Thread-138761] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:14:37.251 [DEBUG] [Thread-138761] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:14:37.251 [DEBUG] [Thread-138761] [transport.py] [_log()] client lang: <none>
2026-01-01T02:14:37.251 [DEBUG] [Thread-138761] [transport.py] [_log()] server lang: <none>
2026-01-01T02:14:37.251 [DEBUG] [Thread-138761] [transport.py] [_log()] kex follows: False
2026-01-01T02:14:37.251 [DEBUG] [Thread-138761] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:14:37.251 [DEBUG] [Thread-138761] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:14:37.251 [DEBUG] [Thread-138761] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:14:37.252 [DEBUG] [Thread-138761] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:14:37.252 [DEBUG] [Thread-138761] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:14:37.252 [DEBUG] [Thread-138761] [transport.py] [_log()] Compression: none
2026-01-01T02:14:37.252 [DEBUG] [Thread-138761] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:14:37.308 [DEBUG] [Thread-138761] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:14:37.308 [DEBUG] [Thread-138761] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:14:37.308 [DEBUG] [Thread-138761] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T02:14:37.309 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T02:14:37.309 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:14:37.365 [DEBUG] [Thread-138761] [transport.py] [_log()] userauth is OK
2026-01-01T02:14:37.365 [DEBUG] [Thread-138761] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:14:37.365 [DEBUG] [Thread-138761] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:14:37.365 [DEBUG] [Thread-138761] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T02:14:37.365 [DEBUG] [Thread-138761] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:14:37.382 [INFO] [Thread-138761] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:14:37.382 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T02:14:37.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:14:38.224 [DEBUG] [Thread-138761] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:14:38.224 [DEBUG] [Thread-138761] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:14:38.271 [DEBUG] [Thread-138761] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:14:38.271 [DEBUG] [Thread-138761] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:14:38.280 [DEBUG] [Thread-138761] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:14:38.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:14:38.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T02:14:38.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T02:14:38.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:14:38.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:14:38.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:14:38.311 [DEBUG] [Thread-138761] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:14:40.803 [DEBUG] [Thread-138763 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:14:55.855 [DEBUG] [Thread-138764 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:15:00.030 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:15:00.031 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:15:03.891 [DEBUG] [Thread-138765 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:15:08.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T02:15:08.306 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T02:15:08.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T02:15:09.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 2, 14, 56), 3.63, 78.71, 0.0, 13.45, 13.39, 0, 0, 0, 2, 0, 0),)
2026-01-01T02:15:09.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 02:14:56
2026-01-01T02:15:09.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T02:15:09.292 [DEBUG] [Thread-138766] [transport.py] [_log()] starting thread (client mode): 0xb6bbc520
2026-01-01T02:15:09.292 [DEBUG] [Thread-138766] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:15:09.317 [DEBUG] [Thread-138766] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T02:15:09.317 [INFO] [Thread-138766] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T02:15:09.318 [DEBUG] [Thread-138766] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:15:09.318 [DEBUG] [Thread-138766] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T02:15:09.318 [DEBUG] [Thread-138766] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:15:09.318 [DEBUG] [Thread-138766] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:15:09.318 [DEBUG] [Thread-138766] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:15:09.318 [DEBUG] [Thread-138766] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:15:09.318 [DEBUG] [Thread-138766] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:15:09.319 [DEBUG] [Thread-138766] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:15:09.319 [DEBUG] [Thread-138766] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:15:09.319 [DEBUG] [Thread-138766] [transport.py] [_log()] client lang: <none>
2026-01-01T02:15:09.319 [DEBUG] [Thread-138766] [transport.py] [_log()] server lang: <none>
2026-01-01T02:15:09.319 [DEBUG] [Thread-138766] [transport.py] [_log()] kex follows: False
2026-01-01T02:15:09.319 [DEBUG] [Thread-138766] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:15:09.319 [DEBUG] [Thread-138766] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:15:09.319 [DEBUG] [Thread-138766] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:15:09.319 [DEBUG] [Thread-138766] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:15:09.319 [DEBUG] [Thread-138766] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:15:09.319 [DEBUG] [Thread-138766] [transport.py] [_log()] Compression: none
2026-01-01T02:15:09.319 [DEBUG] [Thread-138766] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:15:09.337 [DEBUG] [Thread-138766] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:15:09.337 [DEBUG] [Thread-138766] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:15:09.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T02:15:09.338 [DEBUG] [Thread-138766] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T02:15:09.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:15:09.340 [DEBUG] [Thread-138766] [transport.py] [_log()] userauth is OK
2026-01-01T02:15:09.340 [DEBUG] [Thread-138766] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:15:09.340 [DEBUG] [Thread-138766] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:15:09.340 [DEBUG] [Thread-138766] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T02:15:09.341 [DEBUG] [Thread-138766] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:15:09.377 [INFO] [Thread-138766] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:15:09.378 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:15:10.889 [DEBUG] [Thread-138768 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:15:11.679 [DEBUG] [Thread-138766] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:15:11.679 [DEBUG] [Thread-138766] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:15:11.679 [DEBUG] [Thread-138766] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T02:15:11.720 [DEBUG] [Thread-138766] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:15:11.721 [DEBUG] [Thread-138766] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:15:11.722 [DEBUG] [Thread-138766] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:15:11.799 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:15:11.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T02:15:11.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T02:15:11.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T02:15:11.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:15:11.820 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T02:15:11.820 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:15:11.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:15:11.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T02:15:11.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.009854 -999.00  +13.50   6.79     81  +10.40 1 1 1 2 1     0    0 -999.00 0.00 ZNESW 7.2 6.8 194.0 12.2 14.2 -21.1 14.1 -20.7 13.9 -19.2 14.2 -20.2
2026-01-01T02:15:11.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T02:15:11.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T02:15:11.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.009854
2026-01-01T02:15:11.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T02:15:11.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T02:15:11.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T02:15:11.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T02:15:11.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T02:15:11.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T02:14:56', tmtdew=3.63, humidity=78.71, cloud=0.0, wind=13.45, temperature=13.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T02:14:56', seeing=1.13, atlas_timestamp='2026-01-01T00:14:11.386', atlas_cloud=1, atlas_rain=1, zp_data=[0.0417500000000004, 0.11224999999999952, 0.08025000000000126, 0.05149999999999899, 0.042500000000000426, 0.03125, 0.07499999999999929, 0.07324999999999982, 0.09399999999999942, 0.09299999999999997, -0.006750000000000256, 0.07499999999999929, 0.08699999999999974, 0.12725000000000009, 0.10299999999999976, 0.05799999999999983, 0.11224999999999952, 0.2494999999999994, 0.14100000000000001, 0.12624999999999886, 0.14449999999999896, 0.10024999999999906, 0.03725000000000023, 0.12875000000000014, 0.18299999999999983, 0.22750000000000092, 0.1827500000000004, 0.20550000000000068, 0.2519999999999998, 0.2790000000000008, 0.36600000000000144, 0.30400000000000116, 0.2132499999999986], zp_timestamp='2026-01-01T00:11:00')
2026-01-01T02:15:11.821 [DEBUG] [Thread-138766] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:15:11.897 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T02:15:11.908 [DEBUG] [Thread-138770] [transport.py] [_log()] starting thread (client mode): 0xb6bbc3d0
2026-01-01T02:15:11.909 [DEBUG] [Thread-138770] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:15:11.924 [DEBUG] [Thread-138770] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T02:15:11.924 [INFO] [Thread-138770] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T02:15:11.931 [DEBUG] [Thread-138770] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:15:11.931 [DEBUG] [Thread-138770] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T02:15:11.931 [DEBUG] [Thread-138770] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:15:11.931 [DEBUG] [Thread-138770] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:15:11.931 [DEBUG] [Thread-138770] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:15:11.931 [DEBUG] [Thread-138770] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:15:11.931 [DEBUG] [Thread-138770] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:15:11.931 [DEBUG] [Thread-138770] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:15:11.931 [DEBUG] [Thread-138770] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:15:11.931 [DEBUG] [Thread-138770] [transport.py] [_log()] client lang: <none>
2026-01-01T02:15:11.931 [DEBUG] [Thread-138770] [transport.py] [_log()] server lang: <none>
2026-01-01T02:15:11.932 [DEBUG] [Thread-138770] [transport.py] [_log()] kex follows: False
2026-01-01T02:15:11.932 [DEBUG] [Thread-138770] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:15:11.932 [DEBUG] [Thread-138770] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:15:11.932 [DEBUG] [Thread-138770] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:15:11.932 [DEBUG] [Thread-138770] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:15:11.932 [DEBUG] [Thread-138770] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:15:11.932 [DEBUG] [Thread-138770] [transport.py] [_log()] Compression: none
2026-01-01T02:15:11.932 [DEBUG] [Thread-138770] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:15:11.987 [DEBUG] [Thread-138770] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:15:11.987 [DEBUG] [Thread-138770] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:15:11.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T02:15:11.988 [DEBUG] [Thread-138770] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T02:15:11.988 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:15:12.045 [DEBUG] [Thread-138770] [transport.py] [_log()] userauth is OK
2026-01-01T02:15:12.045 [DEBUG] [Thread-138770] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:15:12.045 [DEBUG] [Thread-138770] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:15:12.045 [DEBUG] [Thread-138770] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T02:15:12.045 [DEBUG] [Thread-138770] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:15:12.062 [INFO] [Thread-138770] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:15:12.062 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T02:15:12.062 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:15:12.832 [DEBUG] [Thread-138770] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:15:12.832 [DEBUG] [Thread-138770] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:15:12.880 [DEBUG] [Thread-138770] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:15:12.880 [DEBUG] [Thread-138770] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:15:12.889 [DEBUG] [Thread-138770] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:15:12.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:15:12.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T02:15:12.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T02:15:12.912 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:15:12.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:15:12.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:15:12.920 [DEBUG] [Thread-138770] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:15:25.919 [DEBUG] [Thread-138772 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:15:40.967 [DEBUG] [Thread-138773 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:15:42.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T02:15:42.942 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T02:15: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
2026-01-01T02:15:43.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 2, 15, 28), 3.62, 78.76, 0.0, 12.63, 13.36, 0, 0, 0, 2, 0, 0),)
2026-01-01T02:15:43.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 02:15:28
2026-01-01T02:15:43.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T02:15:43.913 [DEBUG] [Thread-138774] [transport.py] [_log()] starting thread (client mode): 0xb1797c10
2026-01-01T02:15:43.913 [DEBUG] [Thread-138774] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:15:43.934 [DEBUG] [Thread-138774] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T02:15:43.934 [INFO] [Thread-138774] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T02:15:43.937 [DEBUG] [Thread-138774] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:15:43.937 [DEBUG] [Thread-138774] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T02:15:43.937 [DEBUG] [Thread-138774] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:15:43.937 [DEBUG] [Thread-138774] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:15:43.937 [DEBUG] [Thread-138774] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:15:43.937 [DEBUG] [Thread-138774] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:15:43.937 [DEBUG] [Thread-138774] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:15:43.937 [DEBUG] [Thread-138774] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:15:43.937 [DEBUG] [Thread-138774] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:15:43.937 [DEBUG] [Thread-138774] [transport.py] [_log()] client lang: <none>
2026-01-01T02:15:43.937 [DEBUG] [Thread-138774] [transport.py] [_log()] server lang: <none>
2026-01-01T02:15:43.937 [DEBUG] [Thread-138774] [transport.py] [_log()] kex follows: False
2026-01-01T02:15:43.937 [DEBUG] [Thread-138774] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:15:43.937 [DEBUG] [Thread-138774] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:15:43.937 [DEBUG] [Thread-138774] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:15:43.937 [DEBUG] [Thread-138774] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:15:43.937 [DEBUG] [Thread-138774] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:15:43.937 [DEBUG] [Thread-138774] [transport.py] [_log()] Compression: none
2026-01-01T02:15:43.937 [DEBUG] [Thread-138774] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:15:43.955 [DEBUG] [Thread-138774] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:15:43.955 [DEBUG] [Thread-138774] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:15:43.956 [DEBUG] [Thread-138774] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T02:15:43.956 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T02:15:43.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:15:43.958 [DEBUG] [Thread-138774] [transport.py] [_log()] userauth is OK
2026-01-01T02:15:43.958 [DEBUG] [Thread-138774] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:15:43.958 [DEBUG] [Thread-138774] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:15:43.958 [DEBUG] [Thread-138774] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T02:15:43.958 [DEBUG] [Thread-138774] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:15:43.995 [INFO] [Thread-138774] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:15:43.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:15:44.680 [DEBUG] [Thread-138774] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:15:44.680 [DEBUG] [Thread-138774] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:15:44.681 [DEBUG] [Thread-138774] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T02:15:44.722 [DEBUG] [Thread-138774] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:15:44.722 [DEBUG] [Thread-138774] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:15:44.726 [DEBUG] [Thread-138774] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:15:44.739 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:15:44.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T02:15:44.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T02:15:44.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T02:15:44.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:15:44.755 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T02:15:44.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:15:44.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:15:44.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T02:15:44.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.010201 -999.00  +13.50  10.86     81  +10.40 1 1 1 2 1     0    0 -999.00 0.00 ZNESW 10.1 10.9 207.9 12.9 14.2 -21.1 14.1 -20.6 13.9 -19.3 14.2 -20.2
2026-01-01T02:15:44.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T02:15:44.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T02:15:44.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.010201
2026-01-01T02:15:44.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T02:15:44.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T02:15:44.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T02:15:44.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T02:15:44.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T02:15:44.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T02:15:28', tmtdew=3.62, humidity=78.76, cloud=0.0, wind=12.63, temperature=13.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T02:15:28', seeing=0.97, atlas_timestamp='2026-01-01T00:14:41.366', atlas_cloud=1, atlas_rain=1, zp_data=[0.0417500000000004, 0.11224999999999952, 0.08025000000000126, 0.05149999999999899, 0.042500000000000426, 0.03125, 0.07499999999999929, 0.07324999999999982, 0.09399999999999942, 0.09299999999999997, -0.006750000000000256, 0.07499999999999929, 0.08699999999999974, 0.12725000000000009, 0.10299999999999976, 0.05799999999999983, 0.11224999999999952, 0.2494999999999994, 0.14100000000000001, 0.12624999999999886, 0.14449999999999896, 0.10024999999999906, 0.03725000000000023, 0.12875000000000014, 0.18299999999999983, 0.22750000000000092, 0.1827500000000004, 0.20550000000000068, 0.2519999999999998, 0.2790000000000008, 0.36600000000000144, 0.30400000000000116, 0.2132499999999986], zp_timestamp='2026-01-01T00:11:00')
2026-01-01T02:15:44.758 [DEBUG] [Thread-138774] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:15:44.840 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T02:15:44.854 [DEBUG] [Thread-138777] [transport.py] [_log()] starting thread (client mode): 0xb6b15150
2026-01-01T02:15:44.854 [DEBUG] [Thread-138777] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:15:44.869 [DEBUG] [Thread-138777] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T02:15:44.869 [INFO] [Thread-138777] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T02:15:44.876 [DEBUG] [Thread-138777] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:15:44.876 [DEBUG] [Thread-138777] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T02:15:44.877 [DEBUG] [Thread-138777] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:15:44.877 [DEBUG] [Thread-138777] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:15:44.877 [DEBUG] [Thread-138777] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:15:44.877 [DEBUG] [Thread-138777] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:15:44.877 [DEBUG] [Thread-138777] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:15:44.877 [DEBUG] [Thread-138777] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:15:44.877 [DEBUG] [Thread-138777] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:15:44.878 [DEBUG] [Thread-138777] [transport.py] [_log()] client lang: <none>
2026-01-01T02:15:44.878 [DEBUG] [Thread-138777] [transport.py] [_log()] server lang: <none>
2026-01-01T02:15:44.878 [DEBUG] [Thread-138777] [transport.py] [_log()] kex follows: False
2026-01-01T02:15:44.878 [DEBUG] [Thread-138777] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:15:44.878 [DEBUG] [Thread-138777] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:15:44.878 [DEBUG] [Thread-138777] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:15:44.878 [DEBUG] [Thread-138777] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:15:44.878 [DEBUG] [Thread-138777] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:15:44.878 [DEBUG] [Thread-138777] [transport.py] [_log()] Compression: none
2026-01-01T02:15:44.878 [DEBUG] [Thread-138777] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:15:44.937 [DEBUG] [Thread-138777] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:15:44.938 [DEBUG] [Thread-138777] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:15:44.938 [DEBUG] [Thread-138777] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T02:15:44.939 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T02:15:44.939 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:15:44.993 [DEBUG] [Thread-138777] [transport.py] [_log()] userauth is OK
2026-01-01T02:15:44.993 [DEBUG] [Thread-138777] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:15:44.993 [DEBUG] [Thread-138777] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:15:44.994 [DEBUG] [Thread-138777] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T02:15:44.994 [DEBUG] [Thread-138777] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:15:45.012 [INFO] [Thread-138777] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:15:45.012 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T02:15:45.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:15:45.821 [DEBUG] [Thread-138777] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:15:45.821 [DEBUG] [Thread-138777] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:15:45.870 [DEBUG] [Thread-138777] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:15:45.870 [DEBUG] [Thread-138777] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:15:45.879 [DEBUG] [Thread-138777] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:15:45.888 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:15:45.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T02:15:45.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T02:15:45.905 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:15:45.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:15:45.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:15:45.913 [DEBUG] [Thread-138777] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:15:55.997 [DEBUG] [Thread-138779 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:16:00.235 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:16:00.236 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:16:03.947 [DEBUG] [Thread-138780 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:16:11.039 [DEBUG] [Thread-138781 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:16:15.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T02:16:15.936 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T02:16:15.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T02:16:16.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 2, 16), 3.61, 78.82, 0.0, 15.18, 13.38, 0, 0, 0, 2, 0, 0),)
2026-01-01T02:16:16.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 02:16:00
2026-01-01T02:16:16.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T02:16:16.916 [DEBUG] [Thread-138782] [transport.py] [_log()] starting thread (client mode): 0xb1795e40
2026-01-01T02:16:16.916 [DEBUG] [Thread-138782] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:16:16.936 [DEBUG] [Thread-138782] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T02:16:16.936 [INFO] [Thread-138782] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T02:16:16.939 [DEBUG] [Thread-138782] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:16:16.940 [DEBUG] [Thread-138782] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T02:16:16.940 [DEBUG] [Thread-138782] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:16:16.940 [DEBUG] [Thread-138782] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:16:16.940 [DEBUG] [Thread-138782] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:16:16.940 [DEBUG] [Thread-138782] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:16:16.940 [DEBUG] [Thread-138782] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:16:16.940 [DEBUG] [Thread-138782] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:16:16.940 [DEBUG] [Thread-138782] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:16:16.940 [DEBUG] [Thread-138782] [transport.py] [_log()] client lang: <none>
2026-01-01T02:16:16.940 [DEBUG] [Thread-138782] [transport.py] [_log()] server lang: <none>
2026-01-01T02:16:16.940 [DEBUG] [Thread-138782] [transport.py] [_log()] kex follows: False
2026-01-01T02:16:16.940 [DEBUG] [Thread-138782] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:16:16.940 [DEBUG] [Thread-138782] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:16:16.940 [DEBUG] [Thread-138782] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:16:16.941 [DEBUG] [Thread-138782] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:16:16.941 [DEBUG] [Thread-138782] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:16:16.941 [DEBUG] [Thread-138782] [transport.py] [_log()] Compression: none
2026-01-01T02:16:16.941 [DEBUG] [Thread-138782] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:16:16.960 [DEBUG] [Thread-138782] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:16:16.960 [DEBUG] [Thread-138782] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:16:16.961 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T02:16:16.961 [DEBUG] [Thread-138782] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T02:16:16.962 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:16:16.963 [DEBUG] [Thread-138782] [transport.py] [_log()] userauth is OK
2026-01-01T02:16:16.963 [DEBUG] [Thread-138782] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:16:16.963 [DEBUG] [Thread-138782] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:16:16.963 [DEBUG] [Thread-138782] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T02:16:16.963 [DEBUG] [Thread-138782] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:16:16.996 [INFO] [Thread-138782] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:16:16.997 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:16:17.639 [DEBUG] [Thread-138782] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:16:17.639 [DEBUG] [Thread-138782] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:16:17.639 [DEBUG] [Thread-138782] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T02:16:17.680 [DEBUG] [Thread-138782] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:16:17.681 [DEBUG] [Thread-138782] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:16:17.684 [DEBUG] [Thread-138782] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:16:17.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:16:17.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T02:16:17.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T02:16:17.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T02:16:17.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:16:17.706 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T02:16:17.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:16:17.707 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:16:17.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T02:16:17.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.010896 -999.00  +13.50   7.84     81  +10.40 1 1 1 2 1     0    0 -999.00 0.00 ZNESW 7.1 7.8 226.3 14.3 14.2 -21.1 14.1 -20.6 13.8 -19.1 14.2 -20.1
2026-01-01T02:16:17.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T02:16:17.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T02:16:17.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.010896
2026-01-01T02:16:17.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T02:16:17.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T02:16:17.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T02:16:17.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T02:16:17.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T02:16:17.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T02:16:00', tmtdew=3.61, humidity=78.82, cloud=0.0, wind=15.18, temperature=13.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T02:16:00', seeing=0.95, atlas_timestamp='2026-01-01T00:15:41.414', atlas_cloud=1, atlas_rain=1, zp_data=[0.03974999999999973, 0.06825000000000081, 0.08525000000000027, 0.005499999999999616, 0.028999999999999915, 0.07225000000000037, 0.08999999999999986, 0.09224999999999994, 0.09750000000000014, 0.11100000000000065, 0.010249999999999204, 0.08999999999999986, 0.1120000000000001, 0.11125000000000007, 0.07599999999999874, 0.05149999999999899, 0.11175000000000068, 0.21199999999999974, 0.1225000000000005, 0.1112499999999983, 0.14699999999999847, 0.1637499999999985, 0.04025000000000034, 0.13675000000000104, 0.1769999999999996, 0.29049999999999976, 0.19024999999999892, 0.22949999999999982, 0.25900000000000034, 0.27800000000000136, 0.18500000000000227, 0.2475000000000005, 0.21674999999999933], zp_timestamp='2026-01-01T00:13:00')
2026-01-01T02:16:17.709 [DEBUG] [Thread-138782] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:16:17.790 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T02:16:17.802 [DEBUG] [Thread-138785] [transport.py] [_log()] starting thread (client mode): 0xb1795570
2026-01-01T02:16:17.803 [DEBUG] [Thread-138785] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:16:17.818 [DEBUG] [Thread-138785] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T02:16:17.818 [INFO] [Thread-138785] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T02:16:17.825 [DEBUG] [Thread-138785] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:16:17.826 [DEBUG] [Thread-138785] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T02:16:17.826 [DEBUG] [Thread-138785] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:16:17.826 [DEBUG] [Thread-138785] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:16:17.826 [DEBUG] [Thread-138785] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:16:17.826 [DEBUG] [Thread-138785] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:16:17.826 [DEBUG] [Thread-138785] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:16:17.826 [DEBUG] [Thread-138785] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:16:17.826 [DEBUG] [Thread-138785] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:16:17.826 [DEBUG] [Thread-138785] [transport.py] [_log()] client lang: <none>
2026-01-01T02:16:17.826 [DEBUG] [Thread-138785] [transport.py] [_log()] server lang: <none>
2026-01-01T02:16:17.826 [DEBUG] [Thread-138785] [transport.py] [_log()] kex follows: False
2026-01-01T02:16:17.826 [DEBUG] [Thread-138785] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:16:17.826 [DEBUG] [Thread-138785] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:16:17.826 [DEBUG] [Thread-138785] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:16:17.826 [DEBUG] [Thread-138785] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:16:17.826 [DEBUG] [Thread-138785] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:16:17.826 [DEBUG] [Thread-138785] [transport.py] [_log()] Compression: none
2026-01-01T02:16:17.827 [DEBUG] [Thread-138785] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:16:17.885 [DEBUG] [Thread-138785] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:16:17.885 [DEBUG] [Thread-138785] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:16:17.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T02:16:17.886 [DEBUG] [Thread-138785] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T02:16:17.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:16:17.941 [DEBUG] [Thread-138785] [transport.py] [_log()] userauth is OK
2026-01-01T02:16:17.941 [DEBUG] [Thread-138785] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:16:17.941 [DEBUG] [Thread-138785] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:16:17.941 [DEBUG] [Thread-138785] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T02:16:17.942 [DEBUG] [Thread-138785] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:16:17.960 [INFO] [Thread-138785] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:16:17.960 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T02:16:17.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:16:18.750 [DEBUG] [Thread-138785] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:16:18.750 [DEBUG] [Thread-138785] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:16:18.798 [DEBUG] [Thread-138785] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:16:18.798 [DEBUG] [Thread-138785] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:16:18.807 [DEBUG] [Thread-138785] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:16:18.817 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:16:18.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T02:16:18.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T02:16:18.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:16:18.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:16:18.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:16:18.844 [DEBUG] [Thread-138785] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:16:26.074 [DEBUG] [Thread-138787 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:16:41.126 [DEBUG] [Thread-138788 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:16:48.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T02:16:48.845 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T02:16:48.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T02:16:49.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 2, 16, 32), 3.59, 78.91, 0.0, 14.65, 13.36, 0, 0, 0, 2, 0, 0),)
2026-01-01T02:16:49.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 02:16:32
2026-01-01T02:16:49.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T02:16:49.830 [DEBUG] [Thread-138789] [transport.py] [_log()] starting thread (client mode): 0xb95b2ef0
2026-01-01T02:16:49.830 [DEBUG] [Thread-138789] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:16:49.849 [DEBUG] [Thread-138789] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T02:16:49.849 [INFO] [Thread-138789] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T02:16:49.851 [DEBUG] [Thread-138789] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:16:49.851 [DEBUG] [Thread-138789] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T02:16:49.851 [DEBUG] [Thread-138789] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:16:49.851 [DEBUG] [Thread-138789] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:16:49.851 [DEBUG] [Thread-138789] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:16:49.851 [DEBUG] [Thread-138789] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:16:49.851 [DEBUG] [Thread-138789] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:16:49.851 [DEBUG] [Thread-138789] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:16:49.851 [DEBUG] [Thread-138789] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:16:49.851 [DEBUG] [Thread-138789] [transport.py] [_log()] client lang: <none>
2026-01-01T02:16:49.851 [DEBUG] [Thread-138789] [transport.py] [_log()] server lang: <none>
2026-01-01T02:16:49.851 [DEBUG] [Thread-138789] [transport.py] [_log()] kex follows: False
2026-01-01T02:16:49.851 [DEBUG] [Thread-138789] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:16:49.851 [DEBUG] [Thread-138789] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:16:49.851 [DEBUG] [Thread-138789] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:16:49.851 [DEBUG] [Thread-138789] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:16:49.851 [DEBUG] [Thread-138789] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:16:49.851 [DEBUG] [Thread-138789] [transport.py] [_log()] Compression: none
2026-01-01T02:16:49.851 [DEBUG] [Thread-138789] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:16:49.859 [DEBUG] [Thread-138789] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:16:49.860 [DEBUG] [Thread-138789] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:16:49.860 [DEBUG] [Thread-138789] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T02:16:49.860 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T02:16:49.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:16:49.862 [DEBUG] [Thread-138789] [transport.py] [_log()] userauth is OK
2026-01-01T02:16:49.862 [DEBUG] [Thread-138789] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:16:49.862 [DEBUG] [Thread-138789] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:16:49.862 [DEBUG] [Thread-138789] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T02:16:49.862 [DEBUG] [Thread-138789] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:16:49.897 [INFO] [Thread-138789] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:16:49.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:16:50.489 [DEBUG] [Thread-138789] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:16:50.489 [DEBUG] [Thread-138789] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:16:50.489 [DEBUG] [Thread-138789] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T02:16:50.530 [DEBUG] [Thread-138789] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:16:50.530 [DEBUG] [Thread-138789] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:16:50.534 [DEBUG] [Thread-138789] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:16:50.547 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:16:50.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T02:16:50.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T02:16:50.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T02:16:50.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:16:50.559 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T02:16:50.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:16:50.559 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:16:50.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T02:16:50.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.011243 -999.00  +13.50   7.43     81  +10.40 1 1 1 2 1     0    0 -999.00 0.00 ZNESW 6.4 7.4 213.1 13.5 14.2 -21.1 14.1 -20.8 13.8 -19.2 14.2 -20.2
2026-01-01T02:16:50.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T02:16:50.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T02:16:50.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.011243
2026-01-01T02:16:50.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T02:16:50.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T02:16:50.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T02:16:50.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T02:16:50.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T02:16:50.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T02:16:32', tmtdew=3.59, humidity=78.91, cloud=0.0, wind=14.65, temperature=13.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T02:16:32', seeing=0.95, atlas_timestamp='2026-01-01T00:16:11.395', atlas_cloud=1, atlas_rain=1, zp_data=[0.03974999999999973, 0.06825000000000081, 0.08525000000000027, 0.005499999999999616, 0.028999999999999915, 0.07225000000000037, 0.08999999999999986, 0.09224999999999994, 0.09750000000000014, 0.11100000000000065, 0.010249999999999204, 0.08999999999999986, 0.1120000000000001, 0.11125000000000007, 0.07599999999999874, 0.05149999999999899, 0.11175000000000068, 0.21199999999999974, 0.1225000000000005, 0.1112499999999983, 0.14699999999999847, 0.1637499999999985, 0.04025000000000034, 0.13675000000000104, 0.1769999999999996, 0.29049999999999976, 0.19024999999999892, 0.22949999999999982, 0.25900000000000034, 0.27800000000000136, 0.18500000000000227, 0.2475000000000005, 0.21674999999999933], zp_timestamp='2026-01-01T00:13:00')
2026-01-01T02:16:50.561 [DEBUG] [Thread-138789] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:16:50.644 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T02:16:50.656 [DEBUG] [Thread-138792] [transport.py] [_log()] starting thread (client mode): 0xb17964a0
2026-01-01T02:16:50.656 [DEBUG] [Thread-138792] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:16:50.672 [DEBUG] [Thread-138792] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T02:16:50.673 [INFO] [Thread-138792] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T02:16:50.680 [DEBUG] [Thread-138792] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:16:50.680 [DEBUG] [Thread-138792] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T02:16:50.680 [DEBUG] [Thread-138792] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:16:50.680 [DEBUG] [Thread-138792] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:16:50.680 [DEBUG] [Thread-138792] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:16:50.680 [DEBUG] [Thread-138792] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:16:50.681 [DEBUG] [Thread-138792] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:16:50.681 [DEBUG] [Thread-138792] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:16:50.681 [DEBUG] [Thread-138792] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:16:50.681 [DEBUG] [Thread-138792] [transport.py] [_log()] client lang: <none>
2026-01-01T02:16:50.681 [DEBUG] [Thread-138792] [transport.py] [_log()] server lang: <none>
2026-01-01T02:16:50.681 [DEBUG] [Thread-138792] [transport.py] [_log()] kex follows: False
2026-01-01T02:16:50.681 [DEBUG] [Thread-138792] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:16:50.681 [DEBUG] [Thread-138792] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:16:50.681 [DEBUG] [Thread-138792] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:16:50.681 [DEBUG] [Thread-138792] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:16:50.681 [DEBUG] [Thread-138792] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:16:50.681 [DEBUG] [Thread-138792] [transport.py] [_log()] Compression: none
2026-01-01T02:16:50.681 [DEBUG] [Thread-138792] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:16:50.748 [DEBUG] [Thread-138792] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:16:50.748 [DEBUG] [Thread-138792] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:16:50.749 [DEBUG] [Thread-138792] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T02:16:50.749 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T02:16:50.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:16:50.804 [DEBUG] [Thread-138792] [transport.py] [_log()] userauth is OK
2026-01-01T02:16:50.805 [DEBUG] [Thread-138792] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:16:50.805 [DEBUG] [Thread-138792] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:16:50.805 [DEBUG] [Thread-138792] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T02:16:50.805 [DEBUG] [Thread-138792] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:16:50.823 [INFO] [Thread-138792] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:16:50.824 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T02:16:50.824 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:16:51.643 [DEBUG] [Thread-138792] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:16:51.643 [DEBUG] [Thread-138792] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:16:51.691 [DEBUG] [Thread-138792] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:16:51.691 [DEBUG] [Thread-138792] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:16:51.700 [DEBUG] [Thread-138792] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:16:51.710 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:16:51.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T02:16:51.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T02:16:51.728 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:16:51.729 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:16:51.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:16:51.737 [DEBUG] [Thread-138792] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:16:56.162 [DEBUG] [Thread-138794 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:17:00.435 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:17:00.437 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:17:04.006 [DEBUG] [Thread-138795 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:17:11.212 [DEBUG] [Thread-138796 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:17:21.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T02:17:21.760 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T02:17:21.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T02:17:22.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 2, 17, 4), 3.58, 78.97, 0.0, 15.44, 13.38, 0, 0, 0, 2, 0, 0),)
2026-01-01T02:17:22.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 02:17:04
2026-01-01T02:17:22.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T02:17:22.727 [DEBUG] [Thread-138797] [transport.py] [_log()] starting thread (client mode): 0xb95b0ee0
2026-01-01T02:17:22.727 [DEBUG] [Thread-138797] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:17:22.747 [DEBUG] [Thread-138797] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T02:17:22.747 [INFO] [Thread-138797] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T02:17:22.750 [DEBUG] [Thread-138797] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:17:22.750 [DEBUG] [Thread-138797] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T02:17:22.750 [DEBUG] [Thread-138797] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:17:22.750 [DEBUG] [Thread-138797] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:17:22.750 [DEBUG] [Thread-138797] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:17:22.751 [DEBUG] [Thread-138797] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:17:22.751 [DEBUG] [Thread-138797] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:17:22.751 [DEBUG] [Thread-138797] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:17:22.751 [DEBUG] [Thread-138797] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:17:22.751 [DEBUG] [Thread-138797] [transport.py] [_log()] client lang: <none>
2026-01-01T02:17:22.751 [DEBUG] [Thread-138797] [transport.py] [_log()] server lang: <none>
2026-01-01T02:17:22.751 [DEBUG] [Thread-138797] [transport.py] [_log()] kex follows: False
2026-01-01T02:17:22.751 [DEBUG] [Thread-138797] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:17:22.751 [DEBUG] [Thread-138797] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:17:22.751 [DEBUG] [Thread-138797] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:17:22.751 [DEBUG] [Thread-138797] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:17:22.751 [DEBUG] [Thread-138797] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:17:22.751 [DEBUG] [Thread-138797] [transport.py] [_log()] Compression: none
2026-01-01T02:17:22.751 [DEBUG] [Thread-138797] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:17:22.769 [DEBUG] [Thread-138797] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:17:22.769 [DEBUG] [Thread-138797] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:17:22.770 [DEBUG] [Thread-138797] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T02:17:22.770 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T02:17:22.770 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:17:22.771 [DEBUG] [Thread-138797] [transport.py] [_log()] userauth is OK
2026-01-01T02:17:22.771 [DEBUG] [Thread-138797] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:17:22.771 [DEBUG] [Thread-138797] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:17:22.772 [DEBUG] [Thread-138797] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T02:17:22.772 [DEBUG] [Thread-138797] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:17:22.795 [INFO] [Thread-138797] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:17:22.796 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:17:23.461 [DEBUG] [Thread-138797] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:17:23.461 [DEBUG] [Thread-138797] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:17:23.462 [DEBUG] [Thread-138797] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T02:17:23.502 [DEBUG] [Thread-138797] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:17:23.502 [DEBUG] [Thread-138797] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:17:23.506 [DEBUG] [Thread-138797] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:17:23.517 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:17:23.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T02:17:23.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T02:17:23.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T02:17:23.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:17:23.529 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T02:17:23.529 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:17:23.529 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:17:23.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T02:17:23.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.011590 -999.00  +13.40   7.03     82  +10.50 1 1 1 2 1     0    0 -999.00 0.00 ZNESW 4.2 7.0 187.0 13.1 14.2 -21.1 14.0 -20.6 13.8 -19.3 14.2 -20.2
2026-01-01T02:17:23.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T02:17:23.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T02:17:23.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.011590
2026-01-01T02:17:23.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T02:17:23.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T02:17:23.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T02:17:23.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T02:17:23.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T02:17:23.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T02:17:04', tmtdew=3.58, humidity=78.97, cloud=0.0, wind=15.44, temperature=13.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T02:17:04', seeing=0.99, atlas_timestamp='2026-01-01T00:16:41.376', atlas_cloud=1, atlas_rain=1, zp_data=[0.03974999999999973, 0.06825000000000081, 0.08525000000000027, 0.005499999999999616, 0.028999999999999915, 0.07225000000000037, 0.08999999999999986, 0.09224999999999994, 0.09750000000000014, 0.11100000000000065, 0.010249999999999204, 0.08999999999999986, 0.1120000000000001, 0.11125000000000007, 0.07599999999999874, 0.05149999999999899, 0.11175000000000068, 0.21199999999999974, 0.1225000000000005, 0.1112499999999983, 0.14699999999999847, 0.1637499999999985, 0.04025000000000034, 0.13675000000000104, 0.1769999999999996, 0.29049999999999976, 0.19024999999999892, 0.22949999999999982, 0.25900000000000034, 0.27800000000000136, 0.18500000000000227, 0.2475000000000005, 0.21674999999999933], zp_timestamp='2026-01-01T00:13:00')
2026-01-01T02:17:23.532 [DEBUG] [Thread-138797] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:17:23.615 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T02:17:23.626 [DEBUG] [Thread-138800] [transport.py] [_log()] starting thread (client mode): 0xb6bbf1c0
2026-01-01T02:17:23.626 [DEBUG] [Thread-138800] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:17:23.641 [DEBUG] [Thread-138800] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T02:17:23.641 [INFO] [Thread-138800] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T02:17:23.649 [DEBUG] [Thread-138800] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:17:23.649 [DEBUG] [Thread-138800] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T02:17:23.649 [DEBUG] [Thread-138800] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:17:23.649 [DEBUG] [Thread-138800] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:17:23.649 [DEBUG] [Thread-138800] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:17:23.649 [DEBUG] [Thread-138800] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:17:23.649 [DEBUG] [Thread-138800] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:17:23.649 [DEBUG] [Thread-138800] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:17:23.649 [DEBUG] [Thread-138800] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:17:23.649 [DEBUG] [Thread-138800] [transport.py] [_log()] client lang: <none>
2026-01-01T02:17:23.649 [DEBUG] [Thread-138800] [transport.py] [_log()] server lang: <none>
2026-01-01T02:17:23.649 [DEBUG] [Thread-138800] [transport.py] [_log()] kex follows: False
2026-01-01T02:17:23.649 [DEBUG] [Thread-138800] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:17:23.649 [DEBUG] [Thread-138800] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:17:23.649 [DEBUG] [Thread-138800] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:17:23.649 [DEBUG] [Thread-138800] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:17:23.649 [DEBUG] [Thread-138800] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:17:23.650 [DEBUG] [Thread-138800] [transport.py] [_log()] Compression: none
2026-01-01T02:17:23.650 [DEBUG] [Thread-138800] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:17:23.708 [DEBUG] [Thread-138800] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:17:23.708 [DEBUG] [Thread-138800] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:17:23.709 [DEBUG] [Thread-138800] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T02:17:23.709 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T02:17:23.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:17:23.768 [DEBUG] [Thread-138800] [transport.py] [_log()] userauth is OK
2026-01-01T02:17:23.769 [DEBUG] [Thread-138800] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:17:23.769 [DEBUG] [Thread-138800] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:17:23.769 [DEBUG] [Thread-138800] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T02:17:23.769 [DEBUG] [Thread-138800] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:17:23.792 [INFO] [Thread-138800] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:17:23.792 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T02:17:23.793 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:17:24.597 [DEBUG] [Thread-138800] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:17:24.598 [DEBUG] [Thread-138800] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:17:24.646 [DEBUG] [Thread-138800] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:17:24.646 [DEBUG] [Thread-138800] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:17:24.655 [DEBUG] [Thread-138800] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:17:24.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:17:24.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T02:17:24.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T02:17:24.684 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:17:24.684 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:17:24.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:17:24.692 [DEBUG] [Thread-138800] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:17:26.243 [DEBUG] [Thread-138802 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:17:41.301 [DEBUG] [Thread-138803 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:17:54.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T02:17:54.715 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T02:17:54.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T02:17:55.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 2, 17, 36), 3.53, 78.97, 0.0, 13.45, 13.33, 0, 0, 0, 2, 0, 0),)
2026-01-01T02:17:55.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 02:17:36
2026-01-01T02:17:55.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T02:17:55.697 [DEBUG] [Thread-138804] [transport.py] [_log()] starting thread (client mode): 0xb6b17820
2026-01-01T02:17:55.697 [DEBUG] [Thread-138804] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:17:55.719 [DEBUG] [Thread-138804] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T02:17:55.719 [INFO] [Thread-138804] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T02:17:55.723 [DEBUG] [Thread-138804] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:17:55.723 [DEBUG] [Thread-138804] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T02:17:55.723 [DEBUG] [Thread-138804] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:17:55.723 [DEBUG] [Thread-138804] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:17:55.723 [DEBUG] [Thread-138804] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:17:55.723 [DEBUG] [Thread-138804] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:17:55.723 [DEBUG] [Thread-138804] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:17:55.723 [DEBUG] [Thread-138804] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:17:55.723 [DEBUG] [Thread-138804] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:17:55.723 [DEBUG] [Thread-138804] [transport.py] [_log()] client lang: <none>
2026-01-01T02:17:55.723 [DEBUG] [Thread-138804] [transport.py] [_log()] server lang: <none>
2026-01-01T02:17:55.723 [DEBUG] [Thread-138804] [transport.py] [_log()] kex follows: False
2026-01-01T02:17:55.723 [DEBUG] [Thread-138804] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:17:55.723 [DEBUG] [Thread-138804] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:17:55.723 [DEBUG] [Thread-138804] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:17:55.723 [DEBUG] [Thread-138804] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:17:55.723 [DEBUG] [Thread-138804] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:17:55.723 [DEBUG] [Thread-138804] [transport.py] [_log()] Compression: none
2026-01-01T02:17:55.723 [DEBUG] [Thread-138804] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:17:55.738 [DEBUG] [Thread-138804] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:17:55.738 [DEBUG] [Thread-138804] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:17:55.738 [DEBUG] [Thread-138804] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T02:17:55.738 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T02:17:55.739 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:17:55.739 [DEBUG] [Thread-138804] [transport.py] [_log()] userauth is OK
2026-01-01T02:17:55.739 [DEBUG] [Thread-138804] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:17:55.739 [DEBUG] [Thread-138804] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:17:55.739 [DEBUG] [Thread-138804] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T02:17:55.739 [DEBUG] [Thread-138804] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:17:55.748 [INFO] [Thread-138804] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:17:55.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:17:56.334 [DEBUG] [Thread-138806 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:17:56.508 [DEBUG] [Thread-138804] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:17:56.509 [DEBUG] [Thread-138804] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:17:56.509 [DEBUG] [Thread-138804] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T02:17:56.549 [DEBUG] [Thread-138804] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:17:56.550 [DEBUG] [Thread-138804] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:17:56.552 [DEBUG] [Thread-138804] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:17:56.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:17:56.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T02:17:56.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T02:17:56.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T02:17:56.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:17:56.565 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T02:17:56.565 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:17:56.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:17:56.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T02:17:56.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.011937 -999.00  +13.50   6.57     82  +10.50 1 1 1 2 1     0    0 -999.00 0.00 ZNESW 4.7 6.6 234.4 10.8 14.1 -20.9 14.1 -20.6 13.8 -19.2 14.2 -20.1
2026-01-01T02:17:56.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T02:17:56.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T02:17:56.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.011937
2026-01-01T02:17:56.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T02:17:56.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T02:17:56.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T02:17:56.567 [DEBUG] [Thread-138804] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:17:56.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T02:17:56.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T02:17:56.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T02:17:36', tmtdew=3.53, humidity=78.97, cloud=0.0, wind=13.45, temperature=13.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T02:17:36', seeing=1.05, atlas_timestamp='2026-01-01T00:17:11.357', atlas_cloud=1, atlas_rain=1, zp_data=[0.03974999999999973, 0.06825000000000081, 0.08525000000000027, 0.005499999999999616, 0.028999999999999915, 0.07225000000000037, 0.08999999999999986, 0.09224999999999994, 0.09750000000000014, 0.11100000000000065, 0.010249999999999204, 0.08999999999999986, 0.1120000000000001, 0.11125000000000007, 0.07599999999999874, 0.05149999999999899, 0.11175000000000068, 0.21199999999999974, 0.1225000000000005, 0.1112499999999983, 0.14699999999999847, 0.1637499999999985, 0.04025000000000034, 0.13675000000000104, 0.1769999999999996, 0.29049999999999976, 0.19024999999999892, 0.22949999999999982, 0.25900000000000034, 0.27800000000000136, 0.18500000000000227, 0.2475000000000005, 0.21674999999999933], zp_timestamp='2026-01-01T00:13:00')
2026-01-01T02:17:56.656 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T02:17:56.669 [DEBUG] [Thread-138808] [transport.py] [_log()] starting thread (client mode): 0xb6bbf3d0
2026-01-01T02:17:56.669 [DEBUG] [Thread-138808] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:17:56.683 [DEBUG] [Thread-138808] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T02:17:56.683 [INFO] [Thread-138808] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T02:17:56.690 [DEBUG] [Thread-138808] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:17:56.690 [DEBUG] [Thread-138808] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T02:17:56.690 [DEBUG] [Thread-138808] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:17:56.690 [DEBUG] [Thread-138808] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:17:56.690 [DEBUG] [Thread-138808] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:17:56.690 [DEBUG] [Thread-138808] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:17:56.690 [DEBUG] [Thread-138808] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:17:56.690 [DEBUG] [Thread-138808] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:17:56.690 [DEBUG] [Thread-138808] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:17:56.691 [DEBUG] [Thread-138808] [transport.py] [_log()] client lang: <none>
2026-01-01T02:17:56.691 [DEBUG] [Thread-138808] [transport.py] [_log()] server lang: <none>
2026-01-01T02:17:56.691 [DEBUG] [Thread-138808] [transport.py] [_log()] kex follows: False
2026-01-01T02:17:56.691 [DEBUG] [Thread-138808] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:17:56.691 [DEBUG] [Thread-138808] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:17:56.691 [DEBUG] [Thread-138808] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:17:56.691 [DEBUG] [Thread-138808] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:17:56.691 [DEBUG] [Thread-138808] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:17:56.691 [DEBUG] [Thread-138808] [transport.py] [_log()] Compression: none
2026-01-01T02:17:56.691 [DEBUG] [Thread-138808] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:17:56.747 [DEBUG] [Thread-138808] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:17:56.748 [DEBUG] [Thread-138808] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:17:56.749 [DEBUG] [Thread-138808] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T02:17:56.749 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T02:17:56.749 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:17:56.804 [DEBUG] [Thread-138808] [transport.py] [_log()] userauth is OK
2026-01-01T02:17:56.805 [DEBUG] [Thread-138808] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:17:56.805 [DEBUG] [Thread-138808] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:17:56.814 [DEBUG] [Thread-138808] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T02:17:56.814 [DEBUG] [Thread-138808] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:17:56.834 [INFO] [Thread-138808] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:17:56.834 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T02:17:56.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:17:57.650 [DEBUG] [Thread-138808] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:17:57.651 [DEBUG] [Thread-138808] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:17:57.699 [DEBUG] [Thread-138808] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:17:57.699 [DEBUG] [Thread-138808] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:17:57.709 [DEBUG] [Thread-138808] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:17:57.718 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:17:57.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T02:17:57.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T02:17:57.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:17:57.737 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:17:57.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:17:57.745 [DEBUG] [Thread-138808] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:18:00.638 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:18:00.639 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:18:04.084 [DEBUG] [Thread-138810 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:18:11.370 [DEBUG] [Thread-138811 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:18:26.431 [DEBUG] [Thread-138812 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:18:27.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T02:18:27.768 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T02:18:27.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T02:18:28.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 2, 18, 8), 3.53, 78.97, 0.0, 14.5, 13.33, 0, 0, 0, 2, 0, 0),)
2026-01-01T02:18:28.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 02:18:08
2026-01-01T02:18:28.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T02:18:28.760 [DEBUG] [Thread-138813] [transport.py] [_log()] starting thread (client mode): 0xb1747610
2026-01-01T02:18:28.760 [DEBUG] [Thread-138813] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:18:28.781 [DEBUG] [Thread-138813] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T02:18:28.781 [INFO] [Thread-138813] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T02:18:28.784 [DEBUG] [Thread-138813] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:18:28.784 [DEBUG] [Thread-138813] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T02:18:28.784 [DEBUG] [Thread-138813] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:18:28.784 [DEBUG] [Thread-138813] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:18:28.784 [DEBUG] [Thread-138813] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:18:28.784 [DEBUG] [Thread-138813] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:18:28.784 [DEBUG] [Thread-138813] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:18:28.785 [DEBUG] [Thread-138813] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:18:28.785 [DEBUG] [Thread-138813] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:18:28.785 [DEBUG] [Thread-138813] [transport.py] [_log()] client lang: <none>
2026-01-01T02:18:28.785 [DEBUG] [Thread-138813] [transport.py] [_log()] server lang: <none>
2026-01-01T02:18:28.785 [DEBUG] [Thread-138813] [transport.py] [_log()] kex follows: False
2026-01-01T02:18:28.785 [DEBUG] [Thread-138813] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:18:28.785 [DEBUG] [Thread-138813] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:18:28.785 [DEBUG] [Thread-138813] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:18:28.785 [DEBUG] [Thread-138813] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:18:28.785 [DEBUG] [Thread-138813] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:18:28.785 [DEBUG] [Thread-138813] [transport.py] [_log()] Compression: none
2026-01-01T02:18:28.785 [DEBUG] [Thread-138813] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:18:28.800 [DEBUG] [Thread-138813] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:18:28.801 [DEBUG] [Thread-138813] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:18:28.801 [DEBUG] [Thread-138813] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T02:18:28.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T02:18:28.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:18:28.802 [DEBUG] [Thread-138813] [transport.py] [_log()] userauth is OK
2026-01-01T02:18:28.802 [DEBUG] [Thread-138813] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:18:28.802 [DEBUG] [Thread-138813] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:18:28.802 [DEBUG] [Thread-138813] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T02:18:28.802 [DEBUG] [Thread-138813] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:18:28.811 [INFO] [Thread-138813] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:18:28.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:18:29.446 [DEBUG] [Thread-138813] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:18:29.446 [DEBUG] [Thread-138813] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:18:29.446 [DEBUG] [Thread-138813] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T02:18:29.488 [DEBUG] [Thread-138813] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:18:29.488 [DEBUG] [Thread-138813] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:18:29.492 [DEBUG] [Thread-138813] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:18:29.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:18:29.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T02:18:29.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T02:18:29.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T02:18:29.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:18:29.516 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T02:18:29.516 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:18:29.516 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:18:29.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T02:18:29.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.012285 -999.00  +13.50   6.52     81  +10.40 1 1 1 2 1     0    0 -999.00 0.00 ZNESW 5.3 6.5 199.6 8.5 14.2 -21.0 14.0 -20.5 13.8 -19.2 14.2 -20.2
2026-01-01T02:18:29.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T02:18:29.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T02:18:29.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.012285
2026-01-01T02:18:29.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T02:18:29.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T02:18:29.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T02:18:29.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T02:18:29.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T02:18:29.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T02:18:08', tmtdew=3.53, humidity=78.97, cloud=0.0, wind=14.5, temperature=13.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T02:18:08', seeing=0.94, atlas_timestamp='2026-01-01T00:17:41.424', atlas_cloud=1, atlas_rain=1, zp_data=[0.03974999999999973, 0.06825000000000081, 0.08525000000000027, 0.005499999999999616, 0.028999999999999915, 0.07225000000000037, 0.08999999999999986, 0.09224999999999994, 0.09750000000000014, 0.11100000000000065, 0.010249999999999204, 0.08999999999999986, 0.1120000000000001, 0.11125000000000007, 0.07599999999999874, 0.05149999999999899, 0.11175000000000068, 0.21199999999999974, 0.1225000000000005, 0.1112499999999983, 0.14699999999999847, 0.1637499999999985, 0.04025000000000034, 0.13675000000000104, 0.1769999999999996, 0.29049999999999976, 0.19024999999999892, 0.22949999999999982, 0.25900000000000034, 0.27800000000000136, 0.18500000000000227, 0.2475000000000005, 0.21674999999999933], zp_timestamp='2026-01-01T00:13:00')
2026-01-01T02:18:29.518 [DEBUG] [Thread-138813] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:18:29.606 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T02:18:29.618 [DEBUG] [Thread-138816] [transport.py] [_log()] starting thread (client mode): 0xb17463b0
2026-01-01T02:18:29.618 [DEBUG] [Thread-138816] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:18:29.633 [DEBUG] [Thread-138816] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T02:18:29.633 [INFO] [Thread-138816] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T02:18:29.641 [DEBUG] [Thread-138816] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:18:29.641 [DEBUG] [Thread-138816] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T02:18:29.641 [DEBUG] [Thread-138816] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:18:29.641 [DEBUG] [Thread-138816] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:18:29.641 [DEBUG] [Thread-138816] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:18:29.641 [DEBUG] [Thread-138816] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:18:29.641 [DEBUG] [Thread-138816] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:18:29.641 [DEBUG] [Thread-138816] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:18:29.641 [DEBUG] [Thread-138816] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:18:29.641 [DEBUG] [Thread-138816] [transport.py] [_log()] client lang: <none>
2026-01-01T02:18:29.641 [DEBUG] [Thread-138816] [transport.py] [_log()] server lang: <none>
2026-01-01T02:18:29.641 [DEBUG] [Thread-138816] [transport.py] [_log()] kex follows: False
2026-01-01T02:18:29.641 [DEBUG] [Thread-138816] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:18:29.641 [DEBUG] [Thread-138816] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:18:29.641 [DEBUG] [Thread-138816] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:18:29.641 [DEBUG] [Thread-138816] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:18:29.641 [DEBUG] [Thread-138816] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:18:29.641 [DEBUG] [Thread-138816] [transport.py] [_log()] Compression: none
2026-01-01T02:18:29.641 [DEBUG] [Thread-138816] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:18:29.697 [DEBUG] [Thread-138816] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:18:29.698 [DEBUG] [Thread-138816] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:18:29.698 [DEBUG] [Thread-138816] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T02:18:29.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T02:18:29.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:18:29.755 [DEBUG] [Thread-138816] [transport.py] [_log()] userauth is OK
2026-01-01T02:18:29.755 [DEBUG] [Thread-138816] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:18:29.755 [DEBUG] [Thread-138816] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:18:29.755 [DEBUG] [Thread-138816] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T02:18:29.755 [DEBUG] [Thread-138816] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:18:29.769 [INFO] [Thread-138816] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:18:29.770 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T02:18:29.770 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:18:30.588 [DEBUG] [Thread-138816] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:18:30.589 [DEBUG] [Thread-138816] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:18:30.636 [DEBUG] [Thread-138816] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:18:30.636 [DEBUG] [Thread-138816] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:18:30.644 [DEBUG] [Thread-138816] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:18:30.652 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:18:30.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T02:18:30.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T02:18:30.667 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:18:30.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:18:30.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:18:30.675 [DEBUG] [Thread-138816] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:18:41.459 [DEBUG] [Thread-138818 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:18:56.501 [DEBUG] [Thread-138819 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:19:00.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T02:19:00.674 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T02:19:00.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T02:19:00.837 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:19:00.838 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:19:01.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 2, 18, 41), 3.54, 78.94, 0.0, 13.23, 13.24, 0, 0, 0, 2, 0, 0),)
2026-01-01T02:19:01.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 02:18:41
2026-01-01T02:19:01.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T02:19:01.662 [DEBUG] [Thread-138820] [transport.py] [_log()] starting thread (client mode): 0xb1745f00
2026-01-01T02:19:01.663 [DEBUG] [Thread-138820] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:19:01.684 [DEBUG] [Thread-138820] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T02:19:01.684 [INFO] [Thread-138820] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T02:19:01.687 [DEBUG] [Thread-138820] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:19:01.688 [DEBUG] [Thread-138820] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T02:19:01.688 [DEBUG] [Thread-138820] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:19:01.688 [DEBUG] [Thread-138820] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:19:01.688 [DEBUG] [Thread-138820] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:19:01.688 [DEBUG] [Thread-138820] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:19:01.688 [DEBUG] [Thread-138820] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:19:01.688 [DEBUG] [Thread-138820] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:19:01.688 [DEBUG] [Thread-138820] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:19:01.688 [DEBUG] [Thread-138820] [transport.py] [_log()] client lang: <none>
2026-01-01T02:19:01.688 [DEBUG] [Thread-138820] [transport.py] [_log()] server lang: <none>
2026-01-01T02:19:01.689 [DEBUG] [Thread-138820] [transport.py] [_log()] kex follows: False
2026-01-01T02:19:01.689 [DEBUG] [Thread-138820] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:19:01.689 [DEBUG] [Thread-138820] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:19:01.689 [DEBUG] [Thread-138820] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:19:01.689 [DEBUG] [Thread-138820] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:19:01.689 [DEBUG] [Thread-138820] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:19:01.689 [DEBUG] [Thread-138820] [transport.py] [_log()] Compression: none
2026-01-01T02:19:01.689 [DEBUG] [Thread-138820] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:19:01.709 [DEBUG] [Thread-138820] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:19:01.709 [DEBUG] [Thread-138820] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:19:01.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T02:19:01.710 [DEBUG] [Thread-138820] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T02:19:01.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:19:01.713 [DEBUG] [Thread-138820] [transport.py] [_log()] userauth is OK
2026-01-01T02:19:01.713 [DEBUG] [Thread-138820] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:19:01.713 [DEBUG] [Thread-138820] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:19:01.713 [DEBUG] [Thread-138820] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T02:19:01.713 [DEBUG] [Thread-138820] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:19:01.748 [INFO] [Thread-138820] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:19:01.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:19:02.471 [DEBUG] [Thread-138820] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:19:02.472 [DEBUG] [Thread-138820] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:19:02.472 [DEBUG] [Thread-138820] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T02:19:02.512 [DEBUG] [Thread-138820] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:19:02.512 [DEBUG] [Thread-138820] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:19:02.516 [DEBUG] [Thread-138820] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:19:02.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:19:02.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T02:19:02.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T02:19:02.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T02:19:02.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:19:02.539 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T02:19:02.539 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:19:02.539 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:19:02.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T02:19:02.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.012632 -999.00  +13.50   5.16     81  +10.40 1 1 1 2 1     0    0 -999.00 0.00 ZNESW 5.3 5.2 183.7 7.7 14.2 -21.1 14.1 -21.0 13.8 -19.1 14.2 -20.2
2026-01-01T02:19:02.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T02:19:02.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T02:19:02.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.012632
2026-01-01T02:19:02.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T02:19:02.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T02:19:02.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T02:19:02.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T02:19:02.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T02:19:02.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T02:18:41', tmtdew=3.54, humidity=78.94, cloud=0.0, wind=13.23, temperature=13.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T02:18:41', seeing=1.12, atlas_timestamp='2026-01-01T00:18:11.405', atlas_cloud=1, atlas_rain=1, zp_data=[0.03974999999999973, 0.06825000000000081, 0.08525000000000027, 0.005499999999999616, 0.028999999999999915, 0.07225000000000037, 0.08999999999999986, 0.09224999999999994, 0.09750000000000014, 0.11100000000000065, 0.010249999999999204, 0.08999999999999986, 0.1120000000000001, 0.11125000000000007, 0.07599999999999874, 0.05149999999999899, 0.11175000000000068, 0.21199999999999974, 0.1225000000000005, 0.1112499999999983, 0.14699999999999847, 0.1637499999999985, 0.04025000000000034, 0.13675000000000104, 0.1769999999999996, 0.29049999999999976, 0.19024999999999892, 0.22949999999999982, 0.25900000000000034, 0.27800000000000136, 0.18500000000000227, 0.2475000000000005, 0.21674999999999933], zp_timestamp='2026-01-01T00:17:00')
2026-01-01T02:19:02.542 [DEBUG] [Thread-138820] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:19:02.625 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T02:19:02.637 [DEBUG] [Thread-138823] [transport.py] [_log()] starting thread (client mode): 0xb6ba2530
2026-01-01T02:19:02.638 [DEBUG] [Thread-138823] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:19:02.657 [DEBUG] [Thread-138823] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T02:19:02.657 [INFO] [Thread-138823] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T02:19:02.665 [DEBUG] [Thread-138823] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:19:02.665 [DEBUG] [Thread-138823] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T02:19:02.665 [DEBUG] [Thread-138823] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:19:02.665 [DEBUG] [Thread-138823] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:19:02.665 [DEBUG] [Thread-138823] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:19:02.665 [DEBUG] [Thread-138823] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:19:02.665 [DEBUG] [Thread-138823] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:19:02.665 [DEBUG] [Thread-138823] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:19:02.665 [DEBUG] [Thread-138823] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:19:02.665 [DEBUG] [Thread-138823] [transport.py] [_log()] client lang: <none>
2026-01-01T02:19:02.665 [DEBUG] [Thread-138823] [transport.py] [_log()] server lang: <none>
2026-01-01T02:19:02.665 [DEBUG] [Thread-138823] [transport.py] [_log()] kex follows: False
2026-01-01T02:19:02.665 [DEBUG] [Thread-138823] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:19:02.665 [DEBUG] [Thread-138823] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:19:02.665 [DEBUG] [Thread-138823] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:19:02.665 [DEBUG] [Thread-138823] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:19:02.665 [DEBUG] [Thread-138823] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:19:02.665 [DEBUG] [Thread-138823] [transport.py] [_log()] Compression: none
2026-01-01T02:19:02.665 [DEBUG] [Thread-138823] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:19:02.723 [DEBUG] [Thread-138823] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:19:02.724 [DEBUG] [Thread-138823] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:19:02.725 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T02:19:02.725 [DEBUG] [Thread-138823] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T02:19:02.726 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:19:02.779 [DEBUG] [Thread-138823] [transport.py] [_log()] userauth is OK
2026-01-01T02:19:02.780 [DEBUG] [Thread-138823] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:19:02.780 [DEBUG] [Thread-138823] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:19:02.780 [DEBUG] [Thread-138823] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T02:19:02.780 [DEBUG] [Thread-138823] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:19:02.800 [INFO] [Thread-138823] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:19:02.801 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T02:19:02.801 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:19:03.643 [DEBUG] [Thread-138823] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:19:03.643 [DEBUG] [Thread-138823] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:19:03.691 [DEBUG] [Thread-138823] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:19:03.691 [DEBUG] [Thread-138823] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:19:03.701 [DEBUG] [Thread-138823] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:19:03.710 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:19:03.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T02:19:03.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T02:19:03.728 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:19:03.729 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:19:03.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:19:03.737 [DEBUG] [Thread-138823] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:19:04.173 [DEBUG] [Thread-138825 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:19:11.532 [DEBUG] [Thread-138826 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:19:26.582 [DEBUG] [Thread-138827 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:19:33.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T02:19:33.739 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T02:19:33.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T02:19:34.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 2, 19, 13), 3.52, 79.02, 0.0, 13.57, 13.29, 0, 0, 0, 2, 0, 0),)
2026-01-01T02:19:34.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 02:19:13
2026-01-01T02:19:34.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T02:19:34.730 [DEBUG] [Thread-138828] [transport.py] [_log()] starting thread (client mode): 0xb9558700
2026-01-01T02:19:34.730 [DEBUG] [Thread-138828] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:19:34.750 [DEBUG] [Thread-138828] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T02:19:34.750 [INFO] [Thread-138828] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T02:19:34.753 [DEBUG] [Thread-138828] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:19:34.753 [DEBUG] [Thread-138828] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T02:19:34.753 [DEBUG] [Thread-138828] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:19:34.753 [DEBUG] [Thread-138828] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:19:34.753 [DEBUG] [Thread-138828] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:19:34.753 [DEBUG] [Thread-138828] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:19:34.753 [DEBUG] [Thread-138828] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:19:34.753 [DEBUG] [Thread-138828] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:19:34.753 [DEBUG] [Thread-138828] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:19:34.753 [DEBUG] [Thread-138828] [transport.py] [_log()] client lang: <none>
2026-01-01T02:19:34.753 [DEBUG] [Thread-138828] [transport.py] [_log()] server lang: <none>
2026-01-01T02:19:34.753 [DEBUG] [Thread-138828] [transport.py] [_log()] kex follows: False
2026-01-01T02:19:34.753 [DEBUG] [Thread-138828] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:19:34.754 [DEBUG] [Thread-138828] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:19:34.754 [DEBUG] [Thread-138828] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:19:34.754 [DEBUG] [Thread-138828] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:19:34.754 [DEBUG] [Thread-138828] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:19:34.754 [DEBUG] [Thread-138828] [transport.py] [_log()] Compression: none
2026-01-01T02:19:34.754 [DEBUG] [Thread-138828] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:19:34.772 [DEBUG] [Thread-138828] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:19:34.773 [DEBUG] [Thread-138828] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:19:34.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T02:19:34.774 [DEBUG] [Thread-138828] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T02:19:34.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:19:34.776 [DEBUG] [Thread-138828] [transport.py] [_log()] userauth is OK
2026-01-01T02:19:34.776 [DEBUG] [Thread-138828] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:19:34.776 [DEBUG] [Thread-138828] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:19:34.776 [DEBUG] [Thread-138828] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T02:19:34.776 [DEBUG] [Thread-138828] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:19:34.811 [INFO] [Thread-138828] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:19:34.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:19:35.441 [DEBUG] [Thread-138828] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:19:35.441 [DEBUG] [Thread-138828] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:19:35.441 [DEBUG] [Thread-138828] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T02:19:35.482 [DEBUG] [Thread-138828] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:19:35.482 [DEBUG] [Thread-138828] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:19:35.485 [DEBUG] [Thread-138828] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:19:35.497 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:19:35.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T02:19:35.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T02:19:35.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T02:19:35.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:19:35.506 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T02:19:35.506 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:19:35.506 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:19:35.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T02:19:35.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.013326 -999.00  +13.40  10.02     81  +10.40 1 1 1 2 1     0    0 -999.00 0.00 ZNESW 7.7 10.0 202.8 11.0 14.1 -20.9 14.0 -20.5 13.8 -19.0 14.1 -20.1
2026-01-01T02:19:35.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T02:19:35.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T02:19:35.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.013326
2026-01-01T02:19:35.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T02:19:35.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T02:19:35.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T02:19:35.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T02:19:35.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T02:19:35.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T02:19:13', tmtdew=3.52, humidity=79.02, cloud=0.0, wind=13.57, temperature=13.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T02:19:13', seeing=0.94, atlas_timestamp='2026-01-01T00:19:11.366', atlas_cloud=1, atlas_rain=1, zp_data=[0.03974999999999973, 0.06825000000000081, 0.08525000000000027, 0.005499999999999616, 0.028999999999999915, 0.07225000000000037, 0.08999999999999986, 0.09224999999999994, 0.09750000000000014, 0.11100000000000065, 0.010249999999999204, 0.08999999999999986, 0.1120000000000001, 0.11125000000000007, 0.07599999999999874, 0.05149999999999899, 0.11175000000000068, 0.21199999999999974, 0.1225000000000005, 0.1112499999999983, 0.14699999999999847, 0.1637499999999985, 0.04025000000000034, 0.13675000000000104, 0.1769999999999996, 0.29049999999999976, 0.19024999999999892, 0.22949999999999982, 0.25900000000000034, 0.27800000000000136, 0.18500000000000227, 0.2475000000000005, 0.21674999999999933], zp_timestamp='2026-01-01T00:17:00')
2026-01-01T02:19:35.508 [DEBUG] [Thread-138828] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:19:35.605 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T02:19:35.617 [DEBUG] [Thread-138831] [transport.py] [_log()] starting thread (client mode): 0xb9558f40
2026-01-01T02:19:35.617 [DEBUG] [Thread-138831] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:19:35.631 [DEBUG] [Thread-138831] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T02:19:35.631 [INFO] [Thread-138831] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T02:19:35.639 [DEBUG] [Thread-138831] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:19:35.639 [DEBUG] [Thread-138831] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T02:19:35.639 [DEBUG] [Thread-138831] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:19:35.639 [DEBUG] [Thread-138831] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:19:35.639 [DEBUG] [Thread-138831] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:19:35.639 [DEBUG] [Thread-138831] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:19:35.639 [DEBUG] [Thread-138831] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:19:35.639 [DEBUG] [Thread-138831] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:19:35.639 [DEBUG] [Thread-138831] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:19:35.639 [DEBUG] [Thread-138831] [transport.py] [_log()] client lang: <none>
2026-01-01T02:19:35.639 [DEBUG] [Thread-138831] [transport.py] [_log()] server lang: <none>
2026-01-01T02:19:35.639 [DEBUG] [Thread-138831] [transport.py] [_log()] kex follows: False
2026-01-01T02:19:35.639 [DEBUG] [Thread-138831] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:19:35.639 [DEBUG] [Thread-138831] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:19:35.639 [DEBUG] [Thread-138831] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:19:35.639 [DEBUG] [Thread-138831] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:19:35.639 [DEBUG] [Thread-138831] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:19:35.639 [DEBUG] [Thread-138831] [transport.py] [_log()] Compression: none
2026-01-01T02:19:35.639 [DEBUG] [Thread-138831] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:19:35.698 [DEBUG] [Thread-138831] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:19:35.699 [DEBUG] [Thread-138831] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:19:35.699 [DEBUG] [Thread-138831] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T02:19:35.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T02:19:35.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:19:35.759 [DEBUG] [Thread-138831] [transport.py] [_log()] userauth is OK
2026-01-01T02:19:35.759 [DEBUG] [Thread-138831] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:19:35.759 [DEBUG] [Thread-138831] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:19:35.759 [DEBUG] [Thread-138831] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T02:19:35.759 [DEBUG] [Thread-138831] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:19:35.779 [INFO] [Thread-138831] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:19:35.779 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T02:19:35.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:19:36.598 [DEBUG] [Thread-138831] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:19:36.598 [DEBUG] [Thread-138831] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:19:36.646 [DEBUG] [Thread-138831] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:19:36.646 [DEBUG] [Thread-138831] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:19:36.655 [DEBUG] [Thread-138831] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:19:36.664 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:19:36.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T02:19:36.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T02:19:36.683 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:19:36.683 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:19:36.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:19:36.691 [DEBUG] [Thread-138831] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:19:41.618 [DEBUG] [Thread-138833 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:19:56.662 [DEBUG] [Thread-138834 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:20:01.051 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:20:01.052 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:20:04.249 [DEBUG] [Thread-138835 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:20:06.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T02:20:06.714 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T02:20:06.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T02:20:07.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 2, 19, 45), 3.53, 78.96, 0.0, 13.08, 13.29, 0, 0, 0, 2, 0, 0),)
2026-01-01T02:20:07.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 02:19:45
2026-01-01T02:20:07.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T02:20:07.673 [DEBUG] [Thread-138836] [transport.py] [_log()] starting thread (client mode): 0xb1794100
2026-01-01T02:20:07.673 [DEBUG] [Thread-138836] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:20:07.688 [DEBUG] [Thread-138836] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T02:20:07.688 [INFO] [Thread-138836] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T02:20:07.691 [DEBUG] [Thread-138836] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:20:07.691 [DEBUG] [Thread-138836] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T02:20:07.691 [DEBUG] [Thread-138836] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:20:07.691 [DEBUG] [Thread-138836] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:20:07.691 [DEBUG] [Thread-138836] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:20:07.691 [DEBUG] [Thread-138836] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:20:07.691 [DEBUG] [Thread-138836] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:20:07.691 [DEBUG] [Thread-138836] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:20:07.691 [DEBUG] [Thread-138836] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:20:07.691 [DEBUG] [Thread-138836] [transport.py] [_log()] client lang: <none>
2026-01-01T02:20:07.692 [DEBUG] [Thread-138836] [transport.py] [_log()] server lang: <none>
2026-01-01T02:20:07.692 [DEBUG] [Thread-138836] [transport.py] [_log()] kex follows: False
2026-01-01T02:20:07.692 [DEBUG] [Thread-138836] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:20:07.692 [DEBUG] [Thread-138836] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:20:07.692 [DEBUG] [Thread-138836] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:20:07.692 [DEBUG] [Thread-138836] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:20:07.692 [DEBUG] [Thread-138836] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:20:07.692 [DEBUG] [Thread-138836] [transport.py] [_log()] Compression: none
2026-01-01T02:20:07.692 [DEBUG] [Thread-138836] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:20:07.710 [DEBUG] [Thread-138836] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:20:07.711 [DEBUG] [Thread-138836] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:20:07.711 [DEBUG] [Thread-138836] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T02:20:07.712 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T02:20:07.712 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:20:07.713 [DEBUG] [Thread-138836] [transport.py] [_log()] userauth is OK
2026-01-01T02:20:07.714 [DEBUG] [Thread-138836] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:20:07.714 [DEBUG] [Thread-138836] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:20:07.714 [DEBUG] [Thread-138836] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T02:20:07.714 [DEBUG] [Thread-138836] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:20:07.739 [INFO] [Thread-138836] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:20:07.740 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:20:10.168 [DEBUG] [Thread-138836] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:20:10.169 [DEBUG] [Thread-138836] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:20:10.169 [DEBUG] [Thread-138836] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T02:20:10.210 [DEBUG] [Thread-138836] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:20:10.210 [DEBUG] [Thread-138836] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:20:10.213 [DEBUG] [Thread-138836] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:20:10.225 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:20:10.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T02:20:10.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T02:20:10.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T02:20:10.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:20:10.253 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T02:20:10.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:20:10.254 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:20:10.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T02:20:10.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.013673 -999.00  +13.40   8.50     81  +10.30 1 1 1 2 1     0    0 -999.00 0.00 ZNESW 5.5 8.5 194.8 11.1 14.2 -21.0 14.0 -20.6 13.8 -19.1 14.1 -20.2
2026-01-01T02:20:10.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T02:20:10.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T02:20:10.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.013673
2026-01-01T02:20:10.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T02:20:10.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T02:20:10.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T02:20:10.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T02:20:10.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T02:20:10.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T02:19:45', tmtdew=3.53, humidity=78.96, cloud=0.0, wind=13.08, temperature=13.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T02:19:45', seeing=0.94, atlas_timestamp='2026-01-01T00:19:41.347', atlas_cloud=1, atlas_rain=1, zp_data=[0.03974999999999973, 0.06825000000000081, 0.08525000000000027, 0.005499999999999616, 0.028999999999999915, 0.07225000000000037, 0.08999999999999986, 0.09224999999999994, 0.09750000000000014, 0.11100000000000065, 0.010249999999999204, 0.08999999999999986, 0.1120000000000001, 0.11125000000000007, 0.07599999999999874, 0.05149999999999899, 0.11175000000000068, 0.21199999999999974, 0.1225000000000005, 0.1112499999999983, 0.14699999999999847, 0.1637499999999985, 0.04025000000000034, 0.13675000000000104, 0.1769999999999996, 0.29049999999999976, 0.19024999999999892, 0.22949999999999982, 0.25900000000000034, 0.27800000000000136, 0.18500000000000227, 0.2475000000000005, 0.21674999999999933], zp_timestamp='2026-01-01T00:17:00')
2026-01-01T02:20:10.256 [DEBUG] [Thread-138836] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:20:10.340 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T02:20:10.354 [DEBUG] [Thread-138839] [transport.py] [_log()] starting thread (client mode): 0xb6b14580
2026-01-01T02:20:10.354 [DEBUG] [Thread-138839] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:20:10.372 [DEBUG] [Thread-138839] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T02:20:10.372 [INFO] [Thread-138839] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T02:20:10.379 [DEBUG] [Thread-138839] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:20:10.379 [DEBUG] [Thread-138839] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T02:20:10.380 [DEBUG] [Thread-138839] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:20:10.380 [DEBUG] [Thread-138839] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:20:10.380 [DEBUG] [Thread-138839] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:20:10.380 [DEBUG] [Thread-138839] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:20:10.380 [DEBUG] [Thread-138839] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:20:10.380 [DEBUG] [Thread-138839] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:20:10.380 [DEBUG] [Thread-138839] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:20:10.380 [DEBUG] [Thread-138839] [transport.py] [_log()] client lang: <none>
2026-01-01T02:20:10.380 [DEBUG] [Thread-138839] [transport.py] [_log()] server lang: <none>
2026-01-01T02:20:10.380 [DEBUG] [Thread-138839] [transport.py] [_log()] kex follows: False
2026-01-01T02:20:10.380 [DEBUG] [Thread-138839] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:20:10.380 [DEBUG] [Thread-138839] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:20:10.380 [DEBUG] [Thread-138839] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:20:10.380 [DEBUG] [Thread-138839] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:20:10.381 [DEBUG] [Thread-138839] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:20:10.381 [DEBUG] [Thread-138839] [transport.py] [_log()] Compression: none
2026-01-01T02:20:10.381 [DEBUG] [Thread-138839] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:20:10.439 [DEBUG] [Thread-138839] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:20:10.439 [DEBUG] [Thread-138839] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:20:10.440 [DEBUG] [Thread-138839] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T02:20:10.440 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T02:20:10.441 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:20:10.495 [DEBUG] [Thread-138839] [transport.py] [_log()] userauth is OK
2026-01-01T02:20:10.495 [DEBUG] [Thread-138839] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:20:10.496 [DEBUG] [Thread-138839] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:20:10.496 [DEBUG] [Thread-138839] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T02:20:10.496 [DEBUG] [Thread-138839] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:20:10.515 [INFO] [Thread-138839] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:20:10.515 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T02:20:10.516 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:20:11.387 [DEBUG] [Thread-138839] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:20:11.387 [DEBUG] [Thread-138839] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:20:11.435 [DEBUG] [Thread-138839] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:20:11.435 [DEBUG] [Thread-138839] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:20:11.445 [DEBUG] [Thread-138839] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:20:11.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:20:11.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T02:20:11.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T02:20:11.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:20:11.472 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:20:11.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:20:11.480 [DEBUG] [Thread-138839] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:20:11.697 [DEBUG] [Thread-138841 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:20:26.745 [DEBUG] [Thread-138842 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:20:41.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T02:20:41.497 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T02:20:41.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T02:20:41.774 [DEBUG] [Thread-138843 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:20:42.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 2, 20, 17), 3.56, 78.82, 0.0, 14.7, 13.31, 0, 0, 0, 2, 0, 0),)
2026-01-01T02:20:42.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 02:20:17
2026-01-01T02:20:42.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T02:20:42.480 [DEBUG] [Thread-138844] [transport.py] [_log()] starting thread (client mode): 0xb6ba1660
2026-01-01T02:20:42.480 [DEBUG] [Thread-138844] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:20:42.500 [DEBUG] [Thread-138844] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T02:20:42.500 [INFO] [Thread-138844] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T02:20:42.503 [DEBUG] [Thread-138844] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:20:42.503 [DEBUG] [Thread-138844] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T02:20:42.503 [DEBUG] [Thread-138844] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:20:42.503 [DEBUG] [Thread-138844] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:20:42.503 [DEBUG] [Thread-138844] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:20:42.503 [DEBUG] [Thread-138844] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:20:42.503 [DEBUG] [Thread-138844] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:20:42.503 [DEBUG] [Thread-138844] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:20:42.503 [DEBUG] [Thread-138844] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:20:42.503 [DEBUG] [Thread-138844] [transport.py] [_log()] client lang: <none>
2026-01-01T02:20:42.503 [DEBUG] [Thread-138844] [transport.py] [_log()] server lang: <none>
2026-01-01T02:20:42.503 [DEBUG] [Thread-138844] [transport.py] [_log()] kex follows: False
2026-01-01T02:20:42.503 [DEBUG] [Thread-138844] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:20:42.503 [DEBUG] [Thread-138844] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:20:42.503 [DEBUG] [Thread-138844] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:20:42.503 [DEBUG] [Thread-138844] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:20:42.503 [DEBUG] [Thread-138844] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:20:42.503 [DEBUG] [Thread-138844] [transport.py] [_log()] Compression: none
2026-01-01T02:20:42.504 [DEBUG] [Thread-138844] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:20:42.519 [DEBUG] [Thread-138844] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:20:42.520 [DEBUG] [Thread-138844] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:20:42.520 [DEBUG] [Thread-138844] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T02:20:42.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T02:20:42.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:20:42.522 [DEBUG] [Thread-138844] [transport.py] [_log()] userauth is OK
2026-01-01T02:20:42.522 [DEBUG] [Thread-138844] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:20:42.523 [DEBUG] [Thread-138844] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:20:42.523 [DEBUG] [Thread-138844] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T02:20:42.523 [DEBUG] [Thread-138844] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:20:42.537 [INFO] [Thread-138844] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:20:42.538 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:20:43.182 [DEBUG] [Thread-138844] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:20:43.182 [DEBUG] [Thread-138844] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:20:43.182 [DEBUG] [Thread-138844] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T02:20:43.223 [DEBUG] [Thread-138844] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:20:43.223 [DEBUG] [Thread-138844] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:20:43.225 [DEBUG] [Thread-138844] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:20:43.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:20:43.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T02:20:43.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T02:20:43.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T02:20:43.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:20:43.247 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T02:20:43.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:20:43.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:20:43.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T02:20:43.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.014021 -999.00  +13.40  11.53     81  +10.30 1 1 1 2 1     0    0 -999.00 0.00 ZNESW 9.7 11.5 207.0 13.4 14.2 -21.0 14.0 -20.5 13.8 -19.1 14.1 -20.1
2026-01-01T02:20:43.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T02:20:43.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T02:20:43.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.014021
2026-01-01T02:20:43.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T02:20:43.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T02:20:43.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T02:20:43.249 [DEBUG] [Thread-138844] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:20:43.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T02:20:43.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T02:20:43.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T02:20:17', tmtdew=3.56, humidity=78.82, cloud=0.0, wind=14.7, temperature=13.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T02:20:17', seeing=1.16, atlas_timestamp='2026-01-01T00:20:11.414', atlas_cloud=1, atlas_rain=1, zp_data=[0.03974999999999973, 0.06825000000000081, 0.08525000000000027, 0.005499999999999616, 0.028999999999999915, 0.07225000000000037, 0.08999999999999986, 0.09224999999999994, 0.09750000000000014, 0.11100000000000065, 0.010249999999999204, 0.08999999999999986, 0.1120000000000001, 0.11125000000000007, 0.07599999999999874, 0.05149999999999899, 0.11175000000000068, 0.21199999999999974, 0.1225000000000005, 0.1112499999999983, 0.14699999999999847, 0.1637499999999985, 0.04025000000000034, 0.13675000000000104, 0.1769999999999996, 0.29049999999999976, 0.19024999999999892, 0.22949999999999982, 0.25900000000000034, 0.27800000000000136, 0.18500000000000227, 0.2475000000000005, 0.21674999999999933], zp_timestamp='2026-01-01T00:17:00')
2026-01-01T02:20:43.334 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T02:20:43.343 [DEBUG] [Thread-138847] [transport.py] [_log()] starting thread (client mode): 0xb95f3d30
2026-01-01T02:20:43.343 [DEBUG] [Thread-138847] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:20:43.358 [DEBUG] [Thread-138847] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T02:20:43.358 [INFO] [Thread-138847] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T02:20:43.365 [DEBUG] [Thread-138847] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:20:43.365 [DEBUG] [Thread-138847] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T02:20:43.365 [DEBUG] [Thread-138847] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:20:43.366 [DEBUG] [Thread-138847] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:20:43.366 [DEBUG] [Thread-138847] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:20:43.366 [DEBUG] [Thread-138847] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:20:43.366 [DEBUG] [Thread-138847] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:20:43.366 [DEBUG] [Thread-138847] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:20:43.366 [DEBUG] [Thread-138847] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:20:43.366 [DEBUG] [Thread-138847] [transport.py] [_log()] client lang: <none>
2026-01-01T02:20:43.366 [DEBUG] [Thread-138847] [transport.py] [_log()] server lang: <none>
2026-01-01T02:20:43.366 [DEBUG] [Thread-138847] [transport.py] [_log()] kex follows: False
2026-01-01T02:20:43.366 [DEBUG] [Thread-138847] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:20:43.367 [DEBUG] [Thread-138847] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:20:43.367 [DEBUG] [Thread-138847] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:20:43.367 [DEBUG] [Thread-138847] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:20:43.367 [DEBUG] [Thread-138847] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:20:43.367 [DEBUG] [Thread-138847] [transport.py] [_log()] Compression: none
2026-01-01T02:20:43.367 [DEBUG] [Thread-138847] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:20:43.422 [DEBUG] [Thread-138847] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:20:43.422 [DEBUG] [Thread-138847] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:20:43.423 [DEBUG] [Thread-138847] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T02:20:43.423 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T02:20:43.423 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:20:43.478 [DEBUG] [Thread-138847] [transport.py] [_log()] userauth is OK
2026-01-01T02:20:43.478 [DEBUG] [Thread-138847] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:20:43.478 [DEBUG] [Thread-138847] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:20:43.479 [DEBUG] [Thread-138847] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T02:20:43.479 [DEBUG] [Thread-138847] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:20:43.497 [INFO] [Thread-138847] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:20:43.498 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T02:20:43.498 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:20:44.302 [DEBUG] [Thread-138847] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:20:44.302 [DEBUG] [Thread-138847] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:20:44.350 [DEBUG] [Thread-138847] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:20:44.351 [DEBUG] [Thread-138847] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:20:44.359 [DEBUG] [Thread-138847] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:20:44.368 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:20:44.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T02:20:44.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T02:20:44.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:20:44.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:20:44.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:20:44.393 [DEBUG] [Thread-138847] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:20:56.808 [DEBUG] [Thread-138849 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:21:01.255 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:21:01.256 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:21:04.323 [DEBUG] [Thread-138850 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:21:11.859 [DEBUG] [Thread-138851 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:21:14.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T02:21:14.416 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T02:21:14.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T02:21:15.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 2, 20, 49), 3.62, 78.51, 0.0, 14.42, 13.28, 0, 0, 0, 2, 0, 0),)
2026-01-01T02:21:15.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 02:20:49
2026-01-01T02:21:15.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T02:21:15.395 [DEBUG] [Thread-138852] [transport.py] [_log()] starting thread (client mode): 0xb6ba3d60
2026-01-01T02:21:15.395 [DEBUG] [Thread-138852] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:21:15.413 [DEBUG] [Thread-138852] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T02:21:15.414 [INFO] [Thread-138852] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T02:21:15.417 [DEBUG] [Thread-138852] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:21:15.417 [DEBUG] [Thread-138852] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T02:21:15.417 [DEBUG] [Thread-138852] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:21:15.417 [DEBUG] [Thread-138852] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:21:15.417 [DEBUG] [Thread-138852] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:21:15.417 [DEBUG] [Thread-138852] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:21:15.417 [DEBUG] [Thread-138852] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:21:15.417 [DEBUG] [Thread-138852] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:21:15.417 [DEBUG] [Thread-138852] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:21:15.417 [DEBUG] [Thread-138852] [transport.py] [_log()] client lang: <none>
2026-01-01T02:21:15.417 [DEBUG] [Thread-138852] [transport.py] [_log()] server lang: <none>
2026-01-01T02:21:15.417 [DEBUG] [Thread-138852] [transport.py] [_log()] kex follows: False
2026-01-01T02:21:15.418 [DEBUG] [Thread-138852] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:21:15.418 [DEBUG] [Thread-138852] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:21:15.418 [DEBUG] [Thread-138852] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:21:15.418 [DEBUG] [Thread-138852] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:21:15.418 [DEBUG] [Thread-138852] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:21:15.418 [DEBUG] [Thread-138852] [transport.py] [_log()] Compression: none
2026-01-01T02:21:15.418 [DEBUG] [Thread-138852] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:21:15.437 [DEBUG] [Thread-138852] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:21:15.437 [DEBUG] [Thread-138852] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:21:15.438 [DEBUG] [Thread-138852] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T02:21:15.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T02:21:15.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:21:15.439 [DEBUG] [Thread-138852] [transport.py] [_log()] userauth is OK
2026-01-01T02:21:15.439 [DEBUG] [Thread-138852] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:21:15.439 [DEBUG] [Thread-138852] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:21:15.439 [DEBUG] [Thread-138852] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T02:21:15.439 [DEBUG] [Thread-138852] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:21:15.450 [INFO] [Thread-138852] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:21:15.450 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:21:16.007 [DEBUG] [Thread-138852] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:21:16.008 [DEBUG] [Thread-138852] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:21:16.008 [DEBUG] [Thread-138852] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T02:21:16.048 [DEBUG] [Thread-138852] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:21:16.048 [DEBUG] [Thread-138852] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:21:16.052 [DEBUG] [Thread-138852] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:21:16.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:21:16.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T02:21:16.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T02:21:16.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T02:21:16.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:21:16.076 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T02:21:16.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:21:16.076 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:21:16.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T02:21:16.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.014368 -999.00  +13.40   6.63     81  +10.30 1 1 1 2 1     0    0 -999.00 0.00 ZNESW 7.1 6.6 205.8 13.6 14.1 -20.9 14.0 -20.6 13.8 -19.1 14.1 -20.1
2026-01-01T02:21:16.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T02:21:16.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T02:21:16.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.014368
2026-01-01T02:21:16.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T02:21:16.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T02:21:16.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T02:21:16.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T02:21:16.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T02:21:16.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T02:20:49', tmtdew=3.62, humidity=78.51, cloud=0.0, wind=14.42, temperature=13.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T02:20:49', seeing=1.16, atlas_timestamp='2026-01-01T00:20:41.395', atlas_cloud=1, atlas_rain=1, zp_data=[0.03974999999999973, 0.06825000000000081, 0.08525000000000027, 0.005499999999999616, 0.028999999999999915, 0.07225000000000037, 0.08999999999999986, 0.09224999999999994, 0.09750000000000014, 0.11100000000000065, 0.010249999999999204, 0.08999999999999986, 0.1120000000000001, 0.11125000000000007, 0.07599999999999874, 0.05149999999999899, 0.11175000000000068, 0.21199999999999974, 0.1225000000000005, 0.1112499999999983, 0.14699999999999847, 0.1637499999999985, 0.04025000000000034, 0.13675000000000104, 0.1769999999999996, 0.29049999999999976, 0.19024999999999892, 0.22949999999999982, 0.25900000000000034, 0.27800000000000136, 0.18500000000000227, 0.2475000000000005, 0.21674999999999933], zp_timestamp='2026-01-01T00:17:00')
2026-01-01T02:21:16.079 [DEBUG] [Thread-138852] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:21:16.165 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T02:21:16.179 [DEBUG] [Thread-138855] [transport.py] [_log()] starting thread (client mode): 0xb6bbf490
2026-01-01T02:21:16.179 [DEBUG] [Thread-138855] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:21:16.198 [DEBUG] [Thread-138855] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T02:21:16.198 [INFO] [Thread-138855] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T02:21:16.209 [DEBUG] [Thread-138855] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:21:16.209 [DEBUG] [Thread-138855] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T02:21:16.209 [DEBUG] [Thread-138855] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:21:16.209 [DEBUG] [Thread-138855] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:21:16.209 [DEBUG] [Thread-138855] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:21:16.210 [DEBUG] [Thread-138855] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:21:16.210 [DEBUG] [Thread-138855] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:21:16.210 [DEBUG] [Thread-138855] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:21:16.210 [DEBUG] [Thread-138855] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:21:16.210 [DEBUG] [Thread-138855] [transport.py] [_log()] client lang: <none>
2026-01-01T02:21:16.210 [DEBUG] [Thread-138855] [transport.py] [_log()] server lang: <none>
2026-01-01T02:21:16.210 [DEBUG] [Thread-138855] [transport.py] [_log()] kex follows: False
2026-01-01T02:21:16.210 [DEBUG] [Thread-138855] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:21:16.210 [DEBUG] [Thread-138855] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:21:16.211 [DEBUG] [Thread-138855] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:21:16.211 [DEBUG] [Thread-138855] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:21:16.211 [DEBUG] [Thread-138855] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:21:16.211 [DEBUG] [Thread-138855] [transport.py] [_log()] Compression: none
2026-01-01T02:21:16.211 [DEBUG] [Thread-138855] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:21:16.266 [DEBUG] [Thread-138855] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:21:16.266 [DEBUG] [Thread-138855] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:21:16.267 [DEBUG] [Thread-138855] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T02:21:16.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T02:21:16.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:21:16.323 [DEBUG] [Thread-138855] [transport.py] [_log()] userauth is OK
2026-01-01T02:21:16.323 [DEBUG] [Thread-138855] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:21:16.323 [DEBUG] [Thread-138855] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:21:16.324 [DEBUG] [Thread-138855] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T02:21:16.324 [DEBUG] [Thread-138855] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:21:16.345 [INFO] [Thread-138855] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:21:16.346 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T02:21:16.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:21:17.159 [DEBUG] [Thread-138855] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:21:17.159 [DEBUG] [Thread-138855] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:21:17.207 [DEBUG] [Thread-138855] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:21:17.208 [DEBUG] [Thread-138855] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:21:17.218 [DEBUG] [Thread-138855] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:21:17.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:21:17.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T02:21:17.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T02:21:17.248 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:21:17.248 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:21:17.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:21:17.257 [DEBUG] [Thread-138855] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:21:26.899 [DEBUG] [Thread-138857 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:21:41.956 [DEBUG] [Thread-138858 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:21:47.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T02:21:47.279 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T02:21:47.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T02:21:47.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 2, 21, 21), 3.63, 78.49, 0.0, 12.9, 13.33, 0, 0, 0, 2, 0, 0),)
2026-01-01T02:21:47.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 02:21:21
2026-01-01T02:21:48.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T02:21:48.252 [DEBUG] [Thread-138859] [transport.py] [_log()] starting thread (client mode): 0xb6ba3df0
2026-01-01T02:21:48.252 [DEBUG] [Thread-138859] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:21:48.275 [DEBUG] [Thread-138859] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T02:21:48.275 [INFO] [Thread-138859] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T02:21:48.278 [DEBUG] [Thread-138859] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:21:48.278 [DEBUG] [Thread-138859] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T02:21:48.278 [DEBUG] [Thread-138859] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:21:48.278 [DEBUG] [Thread-138859] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:21:48.278 [DEBUG] [Thread-138859] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:21:48.278 [DEBUG] [Thread-138859] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:21:48.278 [DEBUG] [Thread-138859] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:21:48.278 [DEBUG] [Thread-138859] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:21:48.278 [DEBUG] [Thread-138859] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:21:48.278 [DEBUG] [Thread-138859] [transport.py] [_log()] client lang: <none>
2026-01-01T02:21:48.278 [DEBUG] [Thread-138859] [transport.py] [_log()] server lang: <none>
2026-01-01T02:21:48.278 [DEBUG] [Thread-138859] [transport.py] [_log()] kex follows: False
2026-01-01T02:21:48.278 [DEBUG] [Thread-138859] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:21:48.278 [DEBUG] [Thread-138859] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:21:48.278 [DEBUG] [Thread-138859] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:21:48.278 [DEBUG] [Thread-138859] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:21:48.278 [DEBUG] [Thread-138859] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:21:48.278 [DEBUG] [Thread-138859] [transport.py] [_log()] Compression: none
2026-01-01T02:21:48.278 [DEBUG] [Thread-138859] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:21:48.295 [DEBUG] [Thread-138859] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:21:48.296 [DEBUG] [Thread-138859] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:21:48.296 [DEBUG] [Thread-138859] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T02:21:48.296 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T02:21:48.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:21:48.298 [DEBUG] [Thread-138859] [transport.py] [_log()] userauth is OK
2026-01-01T02:21:48.299 [DEBUG] [Thread-138859] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:21:48.299 [DEBUG] [Thread-138859] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:21:48.299 [DEBUG] [Thread-138859] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T02:21:48.299 [DEBUG] [Thread-138859] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:21:48.331 [INFO] [Thread-138859] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:21:48.332 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:21:48.998 [DEBUG] [Thread-138859] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:21:48.999 [DEBUG] [Thread-138859] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:21:48.999 [DEBUG] [Thread-138859] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T02:21:49.039 [DEBUG] [Thread-138859] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:21:49.039 [DEBUG] [Thread-138859] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:21:49.042 [DEBUG] [Thread-138859] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:21:49.055 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:21:49.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T02:21:49.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T02:21:49.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T02:21:49.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:21:49.066 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T02:21:49.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:21:49.067 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:21:49.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T02:21:49.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.014715 -999.00  +13.50   6.23     81  +10.30 1 1 1 2 1     0    0 -999.00 0.00 ZNESW 7.2 6.2 212.4 17.3 14.1 -20.9 14.0 -20.6 13.8 -19.1 14.1 -20.2
2026-01-01T02:21:49.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T02:21:49.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T02:21:49.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.014715
2026-01-01T02:21:49.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T02:21:49.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T02:21:49.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T02:21:49.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T02:21:49.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T02:21:49.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T02:21:21', tmtdew=3.63, humidity=78.49, cloud=0.0, wind=12.9, temperature=13.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T02:21:21', seeing=0.95, atlas_timestamp='2026-01-01T00:21:11.376', atlas_cloud=1, atlas_rain=1, zp_data=[0.03974999999999973, 0.06825000000000081, 0.08525000000000027, 0.005499999999999616, 0.028999999999999915, 0.07225000000000037, 0.08999999999999986, 0.09224999999999994, 0.09750000000000014, 0.11100000000000065, 0.010249999999999204, 0.08999999999999986, 0.1120000000000001, 0.11125000000000007, 0.07599999999999874, 0.05149999999999899, 0.11175000000000068, 0.21199999999999974, 0.1225000000000005, 0.1112499999999983, 0.14699999999999847, 0.1637499999999985, 0.04025000000000034, 0.13675000000000104, 0.1769999999999996, 0.29049999999999976, 0.19024999999999892, 0.22949999999999982, 0.25900000000000034, 0.27800000000000136, 0.18500000000000227, 0.2475000000000005, 0.21674999999999933], zp_timestamp='2026-01-01T00:17:00')
2026-01-01T02:21:49.070 [DEBUG] [Thread-138859] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:21:49.152 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T02:21:49.164 [DEBUG] [Thread-138862] [transport.py] [_log()] starting thread (client mode): 0xb17445b0
2026-01-01T02:21:49.164 [DEBUG] [Thread-138862] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:21:49.179 [DEBUG] [Thread-138862] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T02:21:49.179 [INFO] [Thread-138862] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T02:21:49.187 [DEBUG] [Thread-138862] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:21:49.187 [DEBUG] [Thread-138862] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T02:21:49.187 [DEBUG] [Thread-138862] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:21:49.187 [DEBUG] [Thread-138862] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:21:49.187 [DEBUG] [Thread-138862] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:21:49.187 [DEBUG] [Thread-138862] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:21:49.187 [DEBUG] [Thread-138862] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:21:49.187 [DEBUG] [Thread-138862] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:21:49.187 [DEBUG] [Thread-138862] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:21:49.187 [DEBUG] [Thread-138862] [transport.py] [_log()] client lang: <none>
2026-01-01T02:21:49.188 [DEBUG] [Thread-138862] [transport.py] [_log()] server lang: <none>
2026-01-01T02:21:49.188 [DEBUG] [Thread-138862] [transport.py] [_log()] kex follows: False
2026-01-01T02:21:49.188 [DEBUG] [Thread-138862] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:21:49.188 [DEBUG] [Thread-138862] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:21:49.188 [DEBUG] [Thread-138862] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:21:49.188 [DEBUG] [Thread-138862] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:21:49.188 [DEBUG] [Thread-138862] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:21:49.188 [DEBUG] [Thread-138862] [transport.py] [_log()] Compression: none
2026-01-01T02:21:49.188 [DEBUG] [Thread-138862] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:21:49.246 [DEBUG] [Thread-138862] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:21:49.247 [DEBUG] [Thread-138862] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:21:49.248 [DEBUG] [Thread-138862] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T02:21:49.248 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T02:21:49.248 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:21:49.303 [DEBUG] [Thread-138862] [transport.py] [_log()] userauth is OK
2026-01-01T02:21:49.303 [DEBUG] [Thread-138862] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:21:49.303 [DEBUG] [Thread-138862] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:21:49.303 [DEBUG] [Thread-138862] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T02:21:49.303 [DEBUG] [Thread-138862] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:21:49.322 [INFO] [Thread-138862] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:21:49.323 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T02:21:49.323 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:21:50.143 [DEBUG] [Thread-138862] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:21:50.143 [DEBUG] [Thread-138862] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:21:50.191 [DEBUG] [Thread-138862] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:21:50.191 [DEBUG] [Thread-138862] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:21:50.201 [DEBUG] [Thread-138862] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:21:50.210 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:21:50.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T02:21:50.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T02:21:50.229 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:21:50.229 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:21:50.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:21:50.237 [DEBUG] [Thread-138862] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:21:56.985 [DEBUG] [Thread-138864 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:22:01.478 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:22:01.479 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:22:04.382 [DEBUG] [Thread-138865 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:22:12.038 [DEBUG] [Thread-138866 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:22:20.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T02:22:20.260 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T02:22:20.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T02:22:20.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 2, 21, 53), 3.7, 78.36, 0.0, 14.52, 13.34, 0, 0, 0, 2, 0, 0),)
2026-01-01T02:22:20.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 02:21:53
2026-01-01T02:22:21.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T02:22:21.280 [DEBUG] [Thread-138867] [transport.py] [_log()] starting thread (client mode): 0xb9558c40
2026-01-01T02:22:21.281 [DEBUG] [Thread-138867] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:22:21.300 [DEBUG] [Thread-138867] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T02:22:21.300 [INFO] [Thread-138867] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T02:22:21.303 [DEBUG] [Thread-138867] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:22:21.303 [DEBUG] [Thread-138867] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T02:22:21.303 [DEBUG] [Thread-138867] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:22:21.303 [DEBUG] [Thread-138867] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:22:21.303 [DEBUG] [Thread-138867] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:22:21.303 [DEBUG] [Thread-138867] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:22:21.303 [DEBUG] [Thread-138867] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:22:21.303 [DEBUG] [Thread-138867] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:22:21.303 [DEBUG] [Thread-138867] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:22:21.303 [DEBUG] [Thread-138867] [transport.py] [_log()] client lang: <none>
2026-01-01T02:22:21.303 [DEBUG] [Thread-138867] [transport.py] [_log()] server lang: <none>
2026-01-01T02:22:21.303 [DEBUG] [Thread-138867] [transport.py] [_log()] kex follows: False
2026-01-01T02:22:21.303 [DEBUG] [Thread-138867] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:22:21.303 [DEBUG] [Thread-138867] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:22:21.303 [DEBUG] [Thread-138867] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:22:21.303 [DEBUG] [Thread-138867] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:22:21.303 [DEBUG] [Thread-138867] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:22:21.303 [DEBUG] [Thread-138867] [transport.py] [_log()] Compression: none
2026-01-01T02:22:21.303 [DEBUG] [Thread-138867] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:22:21.310 [DEBUG] [Thread-138867] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:22:21.310 [DEBUG] [Thread-138867] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:22:21.310 [DEBUG] [Thread-138867] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T02:22:21.311 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T02:22:21.311 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:22:21.311 [DEBUG] [Thread-138867] [transport.py] [_log()] userauth is OK
2026-01-01T02:22:21.311 [DEBUG] [Thread-138867] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:22:21.311 [DEBUG] [Thread-138867] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:22:21.311 [DEBUG] [Thread-138867] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T02:22:21.311 [DEBUG] [Thread-138867] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:22:21.320 [INFO] [Thread-138867] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:22:21.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:22:21.985 [DEBUG] [Thread-138867] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:22:21.985 [DEBUG] [Thread-138867] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:22:21.985 [DEBUG] [Thread-138867] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T02:22:22.026 [DEBUG] [Thread-138867] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:22:22.026 [DEBUG] [Thread-138867] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:22:22.028 [DEBUG] [Thread-138867] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:22:22.039 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:22:22.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T02:22:22.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T02:22:22.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T02:22:22.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:22:22.046 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T02:22:22.046 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:22:22.046 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:22:22.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T02:22:22.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.015062 -999.00  +13.50   9.06     81  +10.30 1 1 1 2 1     0    0 -999.00 0.00 ZNESW 6.1 9.1 217.2 12.0 14.1 -21.0 14.0 -20.6 13.8 -19.1 14.1 -20.1
2026-01-01T02:22:22.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T02:22:22.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T02:22:22.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.015062
2026-01-01T02:22:22.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T02:22:22.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T02:22:22.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T02:22:22.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T02:22:22.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T02:22:22.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T02:21:53', tmtdew=3.7, humidity=78.36, cloud=0.0, wind=14.52, temperature=13.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T02:21:53', seeing=0.75, atlas_timestamp='2026-01-01T00:21:41.357', atlas_cloud=1, atlas_rain=1, zp_data=[0.03275000000000006, 0.05924999999999869, 0.08924999999999983, 0.02999999999999936, 0.03950000000000031, 0.045750000000001734, 0.07399999999999984, 0.0782500000000006, 0.10849999999999937, 0.1070000000000011, 0.051249999999999574, 0.09600000000000009, 0.1349999999999998, 0.1352499999999992, 0.06850000000000023, 0.034499999999997755, 0.1407500000000006, 0.20849999999999902, 0.1529999999999987, 0.15124999999999922, 0.16199999999999903, 0.1477499999999985, 0.05725000000000158, 0.06174999999999997, 0.18499999999999872, 0.15949999999999953, 0.14874999999999972, 0.1899999999999995, 0.23500000000000032, 0.2140000000000022, 0.29400000000000137, 0.2060000000000013, 0.18774999999999942], zp_timestamp='2026-01-01T00:20:00')
2026-01-01T02:22:22.047 [DEBUG] [Thread-138867] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:22:22.119 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T02:22:22.133 [DEBUG] [Thread-138870] [transport.py] [_log()] starting thread (client mode): 0xb1744df0
2026-01-01T02:22:22.133 [DEBUG] [Thread-138870] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:22:22.148 [DEBUG] [Thread-138870] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T02:22:22.148 [INFO] [Thread-138870] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T02:22:22.156 [DEBUG] [Thread-138870] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:22:22.156 [DEBUG] [Thread-138870] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T02:22:22.156 [DEBUG] [Thread-138870] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:22:22.156 [DEBUG] [Thread-138870] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:22:22.156 [DEBUG] [Thread-138870] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:22:22.156 [DEBUG] [Thread-138870] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:22:22.157 [DEBUG] [Thread-138870] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:22:22.157 [DEBUG] [Thread-138870] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:22:22.157 [DEBUG] [Thread-138870] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:22:22.157 [DEBUG] [Thread-138870] [transport.py] [_log()] client lang: <none>
2026-01-01T02:22:22.157 [DEBUG] [Thread-138870] [transport.py] [_log()] server lang: <none>
2026-01-01T02:22:22.157 [DEBUG] [Thread-138870] [transport.py] [_log()] kex follows: False
2026-01-01T02:22:22.157 [DEBUG] [Thread-138870] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:22:22.157 [DEBUG] [Thread-138870] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:22:22.157 [DEBUG] [Thread-138870] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:22:22.157 [DEBUG] [Thread-138870] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:22:22.157 [DEBUG] [Thread-138870] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:22:22.157 [DEBUG] [Thread-138870] [transport.py] [_log()] Compression: none
2026-01-01T02:22:22.157 [DEBUG] [Thread-138870] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:22:22.218 [DEBUG] [Thread-138870] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:22:22.218 [DEBUG] [Thread-138870] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:22:22.218 [DEBUG] [Thread-138870] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T02:22:22.218 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T02:22:22.219 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:22:22.274 [DEBUG] [Thread-138870] [transport.py] [_log()] userauth is OK
2026-01-01T02:22:22.274 [DEBUG] [Thread-138870] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:22:22.274 [DEBUG] [Thread-138870] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:22:22.274 [DEBUG] [Thread-138870] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T02:22:22.275 [DEBUG] [Thread-138870] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:22:22.289 [INFO] [Thread-138870] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:22:22.289 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T02:22:22.289 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:22:23.095 [DEBUG] [Thread-138870] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:22:23.095 [DEBUG] [Thread-138870] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:22:23.143 [DEBUG] [Thread-138870] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:22:23.143 [DEBUG] [Thread-138870] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:22:23.153 [DEBUG] [Thread-138870] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:22:23.161 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:22:23.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T02:22:23.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T02:22:23.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:22:23.178 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:22:23.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:22:23.186 [DEBUG] [Thread-138870] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:22:27.068 [DEBUG] [Thread-138872 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:22:42.119 [DEBUG] [Thread-138873 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:22:53.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T02:22:53.209 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T02:22:53.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T02:22:53.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 2, 22, 25), 3.71, 78.33, 0.0, 13.3, 13.33, 0, 0, 0, 2, 0, 0),)
2026-01-01T02:22:53.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 02:22:25
2026-01-01T02:22:54.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T02:22:54.194 [DEBUG] [Thread-138874] [transport.py] [_log()] starting thread (client mode): 0xb95b2020
2026-01-01T02:22:54.195 [DEBUG] [Thread-138874] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:22:54.214 [DEBUG] [Thread-138874] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T02:22:54.215 [INFO] [Thread-138874] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T02:22:54.218 [DEBUG] [Thread-138874] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:22:54.218 [DEBUG] [Thread-138874] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T02:22:54.218 [DEBUG] [Thread-138874] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:22:54.218 [DEBUG] [Thread-138874] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:22:54.218 [DEBUG] [Thread-138874] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:22:54.218 [DEBUG] [Thread-138874] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:22:54.219 [DEBUG] [Thread-138874] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:22:54.219 [DEBUG] [Thread-138874] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:22:54.219 [DEBUG] [Thread-138874] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:22:54.219 [DEBUG] [Thread-138874] [transport.py] [_log()] client lang: <none>
2026-01-01T02:22:54.219 [DEBUG] [Thread-138874] [transport.py] [_log()] server lang: <none>
2026-01-01T02:22:54.219 [DEBUG] [Thread-138874] [transport.py] [_log()] kex follows: False
2026-01-01T02:22:54.219 [DEBUG] [Thread-138874] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:22:54.219 [DEBUG] [Thread-138874] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:22:54.219 [DEBUG] [Thread-138874] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:22:54.219 [DEBUG] [Thread-138874] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:22:54.219 [DEBUG] [Thread-138874] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:22:54.219 [DEBUG] [Thread-138874] [transport.py] [_log()] Compression: none
2026-01-01T02:22:54.219 [DEBUG] [Thread-138874] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:22:54.238 [DEBUG] [Thread-138874] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:22:54.239 [DEBUG] [Thread-138874] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:22:54.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T02:22:54.240 [DEBUG] [Thread-138874] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T02:22:54.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:22:54.242 [DEBUG] [Thread-138874] [transport.py] [_log()] userauth is OK
2026-01-01T02:22:54.242 [DEBUG] [Thread-138874] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:22:54.242 [DEBUG] [Thread-138874] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:22:54.242 [DEBUG] [Thread-138874] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T02:22:54.243 [DEBUG] [Thread-138874] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:22:54.265 [INFO] [Thread-138874] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:22:54.266 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:22:54.906 [DEBUG] [Thread-138874] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:22:54.906 [DEBUG] [Thread-138874] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:22:54.907 [DEBUG] [Thread-138874] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T02:22:54.947 [DEBUG] [Thread-138874] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:22:54.947 [DEBUG] [Thread-138874] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:22:54.951 [DEBUG] [Thread-138874] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:22:54.962 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:22:54.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T02:22:54.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T02:22:54.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T02:22:54.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:22:54.976 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T02:22:54.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:22:54.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:22:54.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T02:22:54.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.015757 -999.00  +13.50   9.48     80  +10.20 1 1 1 2 1     0    0 -999.00 0.00 ZNESW 6.9 9.5 216.3 14.2 14.1 -21.0 14.0 -20.7 13.8 -19.2 14.1 -20.2
2026-01-01T02:22:54.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T02:22:54.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T02:22:54.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.015757
2026-01-01T02:22:54.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T02:22:54.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T02:22:54.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T02:22:54.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T02:22:54.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T02:22:54.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T02:22:25', tmtdew=3.71, humidity=78.33, cloud=0.0, wind=13.3, temperature=13.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T02:22:25', seeing=0.84, atlas_timestamp='2026-01-01T00:22:41.405', atlas_cloud=1, atlas_rain=1, zp_data=[0.03275000000000006, 0.05924999999999869, 0.08924999999999983, 0.02999999999999936, 0.03950000000000031, 0.045750000000001734, 0.07399999999999984, 0.0782500000000006, 0.10849999999999937, 0.1070000000000011, 0.051249999999999574, 0.09600000000000009, 0.1349999999999998, 0.1352499999999992, 0.06850000000000023, 0.034499999999997755, 0.1407500000000006, 0.20849999999999902, 0.1529999999999987, 0.15124999999999922, 0.16199999999999903, 0.1477499999999985, 0.05725000000000158, 0.06174999999999997, 0.18499999999999872, 0.15949999999999953, 0.14874999999999972, 0.1899999999999995, 0.23500000000000032, 0.2140000000000022, 0.29400000000000137, 0.2060000000000013, 0.18774999999999942], zp_timestamp='2026-01-01T00:20:00')
2026-01-01T02:22:54.979 [DEBUG] [Thread-138874] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:22:55.064 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T02:22:55.077 [DEBUG] [Thread-138877] [transport.py] [_log()] starting thread (client mode): 0xb6b03a90
2026-01-01T02:22:55.077 [DEBUG] [Thread-138877] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:22:55.093 [DEBUG] [Thread-138877] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T02:22:55.093 [INFO] [Thread-138877] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T02:22:55.101 [DEBUG] [Thread-138877] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:22:55.101 [DEBUG] [Thread-138877] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T02:22:55.101 [DEBUG] [Thread-138877] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:22:55.102 [DEBUG] [Thread-138877] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:22:55.102 [DEBUG] [Thread-138877] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:22:55.102 [DEBUG] [Thread-138877] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:22:55.102 [DEBUG] [Thread-138877] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:22:55.102 [DEBUG] [Thread-138877] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:22:55.102 [DEBUG] [Thread-138877] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:22:55.102 [DEBUG] [Thread-138877] [transport.py] [_log()] client lang: <none>
2026-01-01T02:22:55.102 [DEBUG] [Thread-138877] [transport.py] [_log()] server lang: <none>
2026-01-01T02:22:55.103 [DEBUG] [Thread-138877] [transport.py] [_log()] kex follows: False
2026-01-01T02:22:55.103 [DEBUG] [Thread-138877] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:22:55.103 [DEBUG] [Thread-138877] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:22:55.103 [DEBUG] [Thread-138877] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:22:55.103 [DEBUG] [Thread-138877] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:22:55.103 [DEBUG] [Thread-138877] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:22:55.103 [DEBUG] [Thread-138877] [transport.py] [_log()] Compression: none
2026-01-01T02:22:55.103 [DEBUG] [Thread-138877] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:22:55.159 [DEBUG] [Thread-138877] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:22:55.160 [DEBUG] [Thread-138877] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:22:55.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T02:22:55.161 [DEBUG] [Thread-138877] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T02:22:55.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:22:55.218 [DEBUG] [Thread-138877] [transport.py] [_log()] userauth is OK
2026-01-01T02:22:55.218 [DEBUG] [Thread-138877] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:22:55.218 [DEBUG] [Thread-138877] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:22:55.218 [DEBUG] [Thread-138877] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T02:22:55.218 [DEBUG] [Thread-138877] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:22:55.234 [INFO] [Thread-138877] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:22:55.234 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T02:22:55.234 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:22:56.055 [DEBUG] [Thread-138877] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:22:56.056 [DEBUG] [Thread-138877] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:22:56.104 [DEBUG] [Thread-138877] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:22:56.104 [DEBUG] [Thread-138877] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:22:56.113 [DEBUG] [Thread-138877] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:22:56.122 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:22:56.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T02:22:56.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T02:22:56.138 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:22:56.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:22:56.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:22:56.146 [DEBUG] [Thread-138877] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:22:57.152 [DEBUG] [Thread-138879 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:23:01.683 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:23:01.684 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:23:04.449 [DEBUG] [Thread-138880 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:23:12.202 [DEBUG] [Thread-138881 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:23:26.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T02:23:26.155 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T02:23:26.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T02:23:26.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 2, 22, 57), 3.71, 78.29, 0.0, 13.57, 13.34, 0, 0, 0, 2, 0, 0),)
2026-01-01T02:23:26.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 02:22:57
2026-01-01T02:23:26.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T02:23:27.113 [DEBUG] [Thread-138882] [transport.py] [_log()] starting thread (client mode): 0xb17975e0
2026-01-01T02:23:27.113 [DEBUG] [Thread-138882] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:23:27.133 [DEBUG] [Thread-138882] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T02:23:27.133 [INFO] [Thread-138882] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T02:23:27.136 [DEBUG] [Thread-138882] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:23:27.137 [DEBUG] [Thread-138882] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T02:23:27.137 [DEBUG] [Thread-138882] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:23:27.137 [DEBUG] [Thread-138882] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:23:27.137 [DEBUG] [Thread-138882] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:23:27.137 [DEBUG] [Thread-138882] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:23:27.137 [DEBUG] [Thread-138882] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:23:27.137 [DEBUG] [Thread-138882] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:23:27.137 [DEBUG] [Thread-138882] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:23:27.137 [DEBUG] [Thread-138882] [transport.py] [_log()] client lang: <none>
2026-01-01T02:23:27.137 [DEBUG] [Thread-138882] [transport.py] [_log()] server lang: <none>
2026-01-01T02:23:27.137 [DEBUG] [Thread-138882] [transport.py] [_log()] kex follows: False
2026-01-01T02:23:27.137 [DEBUG] [Thread-138882] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:23:27.137 [DEBUG] [Thread-138882] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:23:27.138 [DEBUG] [Thread-138882] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:23:27.138 [DEBUG] [Thread-138882] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:23:27.138 [DEBUG] [Thread-138882] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:23:27.138 [DEBUG] [Thread-138882] [transport.py] [_log()] Compression: none
2026-01-01T02:23:27.138 [DEBUG] [Thread-138882] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:23:27.147 [DEBUG] [Thread-138882] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:23:27.148 [DEBUG] [Thread-138882] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:23:27.148 [DEBUG] [Thread-138882] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T02:23:27.148 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T02:23:27.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:23:27.150 [DEBUG] [Thread-138882] [transport.py] [_log()] userauth is OK
2026-01-01T02:23:27.150 [DEBUG] [Thread-138882] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:23:27.150 [DEBUG] [Thread-138882] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:23:27.150 [DEBUG] [Thread-138882] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T02:23:27.150 [DEBUG] [Thread-138882] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:23:27.175 [INFO] [Thread-138882] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:23:27.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:23:27.239 [DEBUG] [Thread-138884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:23:27.790 [DEBUG] [Thread-138882] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:23:27.790 [DEBUG] [Thread-138882] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:23:27.791 [DEBUG] [Thread-138882] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T02:23:27.832 [DEBUG] [Thread-138882] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:23:27.832 [DEBUG] [Thread-138882] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:23:27.835 [DEBUG] [Thread-138882] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:23:27.849 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:23:27.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T02:23:27.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T02:23:27.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T02:23:27.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:23:27.864 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T02:23:27.864 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:23:27.864 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:23:27.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T02:23:27.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.016104 -999.00  +13.50  10.49     80  +10.20 1 1 1 2 1     0    0 -999.00 0.00 ZNESW 10.6 10.5 212.7 13.5 14.1 -21.1 14.0 -20.6 13.8 -19.2 14.1 -20.2
2026-01-01T02:23:27.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T02:23:27.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T02:23:27.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.016104
2026-01-01T02:23:27.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T02:23:27.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T02:23:27.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T02:23:27.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T02:23:27.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T02:23:27.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T02:22:57', tmtdew=3.71, humidity=78.29, cloud=0.0, wind=13.57, temperature=13.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T02:22:57', seeing=0.91, atlas_timestamp='2026-01-01T00:23:11.386', atlas_cloud=1, atlas_rain=1, zp_data=[0.03275000000000006, 0.05924999999999869, 0.08924999999999983, 0.02999999999999936, 0.03950000000000031, 0.045750000000001734, 0.07399999999999984, 0.0782500000000006, 0.10849999999999937, 0.1070000000000011, 0.051249999999999574, 0.09600000000000009, 0.1349999999999998, 0.1352499999999992, 0.06850000000000023, 0.034499999999997755, 0.1407500000000006, 0.20849999999999902, 0.1529999999999987, 0.15124999999999922, 0.16199999999999903, 0.1477499999999985, 0.05725000000000158, 0.06174999999999997, 0.18499999999999872, 0.15949999999999953, 0.14874999999999972, 0.1899999999999995, 0.23500000000000032, 0.2140000000000022, 0.29400000000000137, 0.2060000000000013, 0.18774999999999942], zp_timestamp='2026-01-01T00:20:00')
2026-01-01T02:23:27.867 [DEBUG] [Thread-138882] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:23:27.950 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T02:23:27.962 [DEBUG] [Thread-138886] [transport.py] [_log()] starting thread (client mode): 0xb955b550
2026-01-01T02:23:27.962 [DEBUG] [Thread-138886] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:23:27.977 [DEBUG] [Thread-138886] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T02:23:27.978 [INFO] [Thread-138886] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T02:23:27.985 [DEBUG] [Thread-138886] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:23:27.985 [DEBUG] [Thread-138886] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T02:23:27.985 [DEBUG] [Thread-138886] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:23:27.985 [DEBUG] [Thread-138886] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:23:27.986 [DEBUG] [Thread-138886] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:23:27.986 [DEBUG] [Thread-138886] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:23:27.986 [DEBUG] [Thread-138886] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:23:27.986 [DEBUG] [Thread-138886] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:23:27.986 [DEBUG] [Thread-138886] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:23:27.986 [DEBUG] [Thread-138886] [transport.py] [_log()] client lang: <none>
2026-01-01T02:23:27.986 [DEBUG] [Thread-138886] [transport.py] [_log()] server lang: <none>
2026-01-01T02:23:27.986 [DEBUG] [Thread-138886] [transport.py] [_log()] kex follows: False
2026-01-01T02:23:27.986 [DEBUG] [Thread-138886] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:23:27.986 [DEBUG] [Thread-138886] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:23:27.986 [DEBUG] [Thread-138886] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:23:27.986 [DEBUG] [Thread-138886] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:23:27.986 [DEBUG] [Thread-138886] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:23:27.986 [DEBUG] [Thread-138886] [transport.py] [_log()] Compression: none
2026-01-01T02:23:27.986 [DEBUG] [Thread-138886] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:23:28.045 [DEBUG] [Thread-138886] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:23:28.046 [DEBUG] [Thread-138886] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:23:28.046 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T02:23:28.047 [DEBUG] [Thread-138886] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T02:23:28.047 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:23:28.102 [DEBUG] [Thread-138886] [transport.py] [_log()] userauth is OK
2026-01-01T02:23:28.102 [DEBUG] [Thread-138886] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:23:28.102 [DEBUG] [Thread-138886] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:23:28.102 [DEBUG] [Thread-138886] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T02:23:28.102 [DEBUG] [Thread-138886] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:23:28.121 [INFO] [Thread-138886] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:23:28.121 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T02:23:28.122 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:23:29.015 [DEBUG] [Thread-138886] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:23:29.016 [DEBUG] [Thread-138886] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:23:29.063 [DEBUG] [Thread-138886] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:23:29.064 [DEBUG] [Thread-138886] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:23:29.073 [DEBUG] [Thread-138886] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:23:29.082 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:23:29.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T02:23:29.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T02:23:29.101 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:23:29.101 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:23:29.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:23:29.110 [DEBUG] [Thread-138886] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:23:42.268 [DEBUG] [Thread-138888 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:23:57.309 [DEBUG] [Thread-138889 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:23:59.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T02:23:59.132 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T02:23:59.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T02:23:59.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 2, 23, 29), 3.73, 78.23, 0.0, 14.15, 13.36, 0, 0, 0, 2, 0, 0),)
2026-01-01T02:23:59.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 02:23:29
2026-01-01T02:23:59.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T02:24:00.101 [DEBUG] [Thread-138890] [transport.py] [_log()] starting thread (client mode): 0xb6b28910
2026-01-01T02:24:00.101 [DEBUG] [Thread-138890] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:24:00.117 [DEBUG] [Thread-138890] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T02:24:00.117 [INFO] [Thread-138890] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T02:24:00.120 [DEBUG] [Thread-138890] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:24:00.120 [DEBUG] [Thread-138890] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T02:24:00.120 [DEBUG] [Thread-138890] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:24:00.120 [DEBUG] [Thread-138890] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:24:00.120 [DEBUG] [Thread-138890] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:24:00.120 [DEBUG] [Thread-138890] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:24:00.120 [DEBUG] [Thread-138890] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:24:00.120 [DEBUG] [Thread-138890] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:24:00.121 [DEBUG] [Thread-138890] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:24:00.121 [DEBUG] [Thread-138890] [transport.py] [_log()] client lang: <none>
2026-01-01T02:24:00.121 [DEBUG] [Thread-138890] [transport.py] [_log()] server lang: <none>
2026-01-01T02:24:00.121 [DEBUG] [Thread-138890] [transport.py] [_log()] kex follows: False
2026-01-01T02:24:00.121 [DEBUG] [Thread-138890] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:24:00.121 [DEBUG] [Thread-138890] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:24:00.121 [DEBUG] [Thread-138890] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:24:00.121 [DEBUG] [Thread-138890] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:24:00.121 [DEBUG] [Thread-138890] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:24:00.121 [DEBUG] [Thread-138890] [transport.py] [_log()] Compression: none
2026-01-01T02:24:00.121 [DEBUG] [Thread-138890] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:24:00.142 [DEBUG] [Thread-138890] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:24:00.143 [DEBUG] [Thread-138890] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:24:00.144 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T02:24:00.144 [DEBUG] [Thread-138890] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T02:24:00.145 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:24:00.146 [DEBUG] [Thread-138890] [transport.py] [_log()] userauth is OK
2026-01-01T02:24:00.146 [DEBUG] [Thread-138890] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:24:00.146 [DEBUG] [Thread-138890] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:24:00.146 [DEBUG] [Thread-138890] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T02:24:00.147 [DEBUG] [Thread-138890] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:24:00.171 [INFO] [Thread-138890] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:24:00.173 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:24:00.745 [DEBUG] [Thread-138890] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:24:00.745 [DEBUG] [Thread-138890] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:24:00.746 [DEBUG] [Thread-138890] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T02:24:00.786 [DEBUG] [Thread-138890] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:24:00.786 [DEBUG] [Thread-138890] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:24:00.789 [DEBUG] [Thread-138890] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:24:00.803 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:24:00.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T02:24:00.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T02:24:00.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T02:24:00.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:24:00.815 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T02:24:00.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:24:00.815 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:24:00.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T02:24:00.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.016451 -999.00  +13.50   6.10     81  +10.30 1 1 1 2 1     0    0 -999.00 0.00 ZNESW 10.1 6.1 257.5 14.8 14.1 -21.2 14.0 -20.8 13.8 -19.1 14.1 -20.3
2026-01-01T02:24:00.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T02:24:00.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T02:24:00.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.016451
2026-01-01T02:24:00.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T02:24:00.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T02:24:00.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T02:24:00.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T02:24:00.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T02:24:00.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T02:23:29', tmtdew=3.73, humidity=78.23, cloud=0.0, wind=14.15, temperature=13.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T02:23:29', seeing=0.82, atlas_timestamp='2026-01-01T00:23:41.366', atlas_cloud=1, atlas_rain=1, zp_data=[0.03275000000000006, 0.05924999999999869, 0.08924999999999983, 0.02999999999999936, 0.03950000000000031, 0.045750000000001734, 0.07399999999999984, 0.0782500000000006, 0.10849999999999937, 0.1070000000000011, 0.051249999999999574, 0.09600000000000009, 0.1349999999999998, 0.1352499999999992, 0.06850000000000023, 0.034499999999997755, 0.1407500000000006, 0.20849999999999902, 0.1529999999999987, 0.15124999999999922, 0.16199999999999903, 0.1477499999999985, 0.05725000000000158, 0.06174999999999997, 0.18499999999999872, 0.15949999999999953, 0.14874999999999972, 0.1899999999999995, 0.23500000000000032, 0.2140000000000022, 0.29400000000000137, 0.2060000000000013, 0.18774999999999942], zp_timestamp='2026-01-01T00:20:00')
2026-01-01T02:24:00.818 [DEBUG] [Thread-138890] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:24:00.901 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T02:24:00.914 [DEBUG] [Thread-138893] [transport.py] [_log()] starting thread (client mode): 0xb1746530
2026-01-01T02:24:00.914 [DEBUG] [Thread-138893] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:24:00.929 [DEBUG] [Thread-138893] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T02:24:00.930 [INFO] [Thread-138893] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T02:24:00.937 [DEBUG] [Thread-138893] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:24:00.937 [DEBUG] [Thread-138893] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T02:24:00.937 [DEBUG] [Thread-138893] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:24:00.937 [DEBUG] [Thread-138893] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:24:00.937 [DEBUG] [Thread-138893] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:24:00.937 [DEBUG] [Thread-138893] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:24:00.937 [DEBUG] [Thread-138893] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:24:00.938 [DEBUG] [Thread-138893] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:24:00.938 [DEBUG] [Thread-138893] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:24:00.938 [DEBUG] [Thread-138893] [transport.py] [_log()] client lang: <none>
2026-01-01T02:24:00.938 [DEBUG] [Thread-138893] [transport.py] [_log()] server lang: <none>
2026-01-01T02:24:00.938 [DEBUG] [Thread-138893] [transport.py] [_log()] kex follows: False
2026-01-01T02:24:00.938 [DEBUG] [Thread-138893] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:24:00.938 [DEBUG] [Thread-138893] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:24:00.938 [DEBUG] [Thread-138893] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:24:00.938 [DEBUG] [Thread-138893] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:24:00.938 [DEBUG] [Thread-138893] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:24:00.938 [DEBUG] [Thread-138893] [transport.py] [_log()] Compression: none
2026-01-01T02:24:00.938 [DEBUG] [Thread-138893] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:24:00.998 [DEBUG] [Thread-138893] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:24:00.999 [DEBUG] [Thread-138893] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:24:00.999 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T02:24:01.000 [DEBUG] [Thread-138893] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T02:24:01.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:24:01.054 [DEBUG] [Thread-138893] [transport.py] [_log()] userauth is OK
2026-01-01T02:24:01.055 [DEBUG] [Thread-138893] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:24:01.055 [DEBUG] [Thread-138893] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:24:01.055 [DEBUG] [Thread-138893] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T02:24:01.055 [DEBUG] [Thread-138893] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:24:01.075 [INFO] [Thread-138893] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:24:01.075 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T02:24:01.076 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:24:01.886 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:24:01.887 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:24:01.912 [DEBUG] [Thread-138893] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:24:01.912 [DEBUG] [Thread-138893] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:24:01.959 [DEBUG] [Thread-138893] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:24:01.959 [DEBUG] [Thread-138893] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:24:01.967 [DEBUG] [Thread-138893] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:24:01.975 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:24:01.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T02:24:01.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T02:24:01.992 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:24:01.992 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:24:01.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:24:02.000 [DEBUG] [Thread-138893] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:24:04.529 [DEBUG] [Thread-138895 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:24:12.346 [DEBUG] [Thread-138896 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:24:27.393 [DEBUG] [Thread-138897 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:24:32.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T02:24:32.012 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T02:24:32.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T02:24:32.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 2, 24, 1), 3.72, 78.28, 0.0, 12.88, 13.34, 0, 0, 0, 2, 0, 0),)
2026-01-01T02:24:32.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 02:24:01
2026-01-01T02:24:32.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T02:24:32.988 [DEBUG] [Thread-138898] [transport.py] [_log()] starting thread (client mode): 0xb6b2b910
2026-01-01T02:24:32.988 [DEBUG] [Thread-138898] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:24:33.001 [DEBUG] [Thread-138898] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T02:24:33.001 [INFO] [Thread-138898] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T02:24:33.002 [DEBUG] [Thread-138898] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:24:33.002 [DEBUG] [Thread-138898] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T02:24:33.002 [DEBUG] [Thread-138898] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:24:33.002 [DEBUG] [Thread-138898] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:24:33.002 [DEBUG] [Thread-138898] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:24:33.002 [DEBUG] [Thread-138898] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:24:33.002 [DEBUG] [Thread-138898] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:24:33.002 [DEBUG] [Thread-138898] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:24:33.002 [DEBUG] [Thread-138898] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:24:33.002 [DEBUG] [Thread-138898] [transport.py] [_log()] client lang: <none>
2026-01-01T02:24:33.002 [DEBUG] [Thread-138898] [transport.py] [_log()] server lang: <none>
2026-01-01T02:24:33.002 [DEBUG] [Thread-138898] [transport.py] [_log()] kex follows: False
2026-01-01T02:24:33.002 [DEBUG] [Thread-138898] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:24:33.002 [DEBUG] [Thread-138898] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:24:33.002 [DEBUG] [Thread-138898] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:24:33.002 [DEBUG] [Thread-138898] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:24:33.002 [DEBUG] [Thread-138898] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:24:33.002 [DEBUG] [Thread-138898] [transport.py] [_log()] Compression: none
2026-01-01T02:24:33.002 [DEBUG] [Thread-138898] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:24:33.010 [DEBUG] [Thread-138898] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:24:33.010 [DEBUG] [Thread-138898] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:24:33.010 [DEBUG] [Thread-138898] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T02:24:33.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T02:24:33.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:24:33.011 [DEBUG] [Thread-138898] [transport.py] [_log()] userauth is OK
2026-01-01T02:24:33.011 [DEBUG] [Thread-138898] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:24:33.011 [DEBUG] [Thread-138898] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:24:33.011 [DEBUG] [Thread-138898] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T02:24:33.011 [DEBUG] [Thread-138898] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:24:33.024 [INFO] [Thread-138898] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:24:33.024 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:24:33.628 [DEBUG] [Thread-138898] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:24:33.628 [DEBUG] [Thread-138898] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:24:33.629 [DEBUG] [Thread-138898] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T02:24:33.669 [DEBUG] [Thread-138898] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:24:33.669 [DEBUG] [Thread-138898] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:24:33.673 [DEBUG] [Thread-138898] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:24:33.684 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:24:33.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T02:24:33.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T02:24:33.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T02:24:33.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:24:33.695 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T02:24:33.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:24:33.695 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:24:33.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T02:24:33.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.016798 -999.00  +13.40   6.98     81  +10.40 1 1 1 2 1     0    0 -999.00 0.00 ZNESW 4.1 7.0 197.8 14.8 14.1 -21.1 14.0 -20.7 13.8 -19.2 14.1 -20.2
2026-01-01T02:24:33.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T02:24:33.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T02:24:33.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.016798
2026-01-01T02:24:33.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T02:24:33.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T02:24:33.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T02:24:33.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T02:24:33.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T02:24:33.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T02:24:01', tmtdew=3.72, humidity=78.28, cloud=0.0, wind=12.88, temperature=13.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T02:24:01', seeing=0.8, atlas_timestamp='2026-01-01T00:24:11.347', atlas_cloud=1, atlas_rain=1, zp_data=[0.03275000000000006, 0.05924999999999869, 0.08924999999999983, 0.02999999999999936, 0.03950000000000031, 0.045750000000001734, 0.07399999999999984, 0.0782500000000006, 0.10849999999999937, 0.1070000000000011, 0.051249999999999574, 0.09600000000000009, 0.1349999999999998, 0.1352499999999992, 0.06850000000000023, 0.034499999999997755, 0.1407500000000006, 0.20849999999999902, 0.1529999999999987, 0.15124999999999922, 0.16199999999999903, 0.1477499999999985, 0.05725000000000158, 0.06174999999999997, 0.18499999999999872, 0.15949999999999953, 0.14874999999999972, 0.1899999999999995, 0.23500000000000032, 0.2140000000000022, 0.29400000000000137, 0.2060000000000013, 0.18774999999999942], zp_timestamp='2026-01-01T00:20:00')
2026-01-01T02:24:33.698 [DEBUG] [Thread-138898] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:24:33.782 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T02:24:33.797 [DEBUG] [Thread-138901] [transport.py] [_log()] starting thread (client mode): 0xb6b29870
2026-01-01T02:24:33.797 [DEBUG] [Thread-138901] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:24:33.813 [DEBUG] [Thread-138901] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T02:24:33.813 [INFO] [Thread-138901] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T02:24:33.820 [DEBUG] [Thread-138901] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:24:33.821 [DEBUG] [Thread-138901] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T02:24:33.821 [DEBUG] [Thread-138901] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:24:33.821 [DEBUG] [Thread-138901] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:24:33.821 [DEBUG] [Thread-138901] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:24:33.821 [DEBUG] [Thread-138901] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:24:33.821 [DEBUG] [Thread-138901] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:24:33.821 [DEBUG] [Thread-138901] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:24:33.822 [DEBUG] [Thread-138901] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:24:33.822 [DEBUG] [Thread-138901] [transport.py] [_log()] client lang: <none>
2026-01-01T02:24:33.822 [DEBUG] [Thread-138901] [transport.py] [_log()] server lang: <none>
2026-01-01T02:24:33.822 [DEBUG] [Thread-138901] [transport.py] [_log()] kex follows: False
2026-01-01T02:24:33.822 [DEBUG] [Thread-138901] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:24:33.822 [DEBUG] [Thread-138901] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:24:33.822 [DEBUG] [Thread-138901] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:24:33.822 [DEBUG] [Thread-138901] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:24:33.823 [DEBUG] [Thread-138901] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:24:33.823 [DEBUG] [Thread-138901] [transport.py] [_log()] Compression: none
2026-01-01T02:24:33.823 [DEBUG] [Thread-138901] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:24:33.879 [DEBUG] [Thread-138901] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:24:33.879 [DEBUG] [Thread-138901] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:24:33.880 [DEBUG] [Thread-138901] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T02:24:33.880 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T02:24:33.881 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:24:33.939 [DEBUG] [Thread-138901] [transport.py] [_log()] userauth is OK
2026-01-01T02:24:33.939 [DEBUG] [Thread-138901] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:24:33.939 [DEBUG] [Thread-138901] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:24:33.939 [DEBUG] [Thread-138901] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T02:24:33.939 [DEBUG] [Thread-138901] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:24:33.959 [INFO] [Thread-138901] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:24:33.959 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T02:24:33.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:24:34.777 [DEBUG] [Thread-138901] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:24:34.777 [DEBUG] [Thread-138901] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:24:34.824 [DEBUG] [Thread-138901] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:24:34.824 [DEBUG] [Thread-138901] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:24:34.832 [DEBUG] [Thread-138901] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:24:34.840 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:24:34.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T02:24:34.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T02:24:34.856 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:24:34.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:24:34.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:24:34.864 [DEBUG] [Thread-138901] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:24:42.429 [DEBUG] [Thread-138903 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:24:57.475 [DEBUG] [Thread-138904 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:25:02.086 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:25:02.088 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:25:04.619 [DEBUG] [Thread-138905 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:25:04.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T02:25:04.881 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T02:25:04.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T02:25:05.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 2, 24, 33), 4.0, 76.72, 0.0, 11.08, 13.79, 0, 0, 0, 2, 0, 0),)
2026-01-01T02:25:05.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 02:24:33
2026-01-01T02:25:05.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T02:25:05.878 [DEBUG] [Thread-138906] [transport.py] [_log()] starting thread (client mode): 0xb6b28280
2026-01-01T02:25:05.878 [DEBUG] [Thread-138906] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:25:05.896 [DEBUG] [Thread-138906] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T02:25:05.896 [INFO] [Thread-138906] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T02:25:05.899 [DEBUG] [Thread-138906] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:25:05.899 [DEBUG] [Thread-138906] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T02:25:05.900 [DEBUG] [Thread-138906] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:25:05.900 [DEBUG] [Thread-138906] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:25:05.900 [DEBUG] [Thread-138906] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:25:05.900 [DEBUG] [Thread-138906] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:25:05.900 [DEBUG] [Thread-138906] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:25:05.900 [DEBUG] [Thread-138906] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:25:05.900 [DEBUG] [Thread-138906] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:25:05.900 [DEBUG] [Thread-138906] [transport.py] [_log()] client lang: <none>
2026-01-01T02:25:05.900 [DEBUG] [Thread-138906] [transport.py] [_log()] server lang: <none>
2026-01-01T02:25:05.900 [DEBUG] [Thread-138906] [transport.py] [_log()] kex follows: False
2026-01-01T02:25:05.900 [DEBUG] [Thread-138906] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:25:05.900 [DEBUG] [Thread-138906] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:25:05.900 [DEBUG] [Thread-138906] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:25:05.900 [DEBUG] [Thread-138906] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:25:05.900 [DEBUG] [Thread-138906] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:25:05.900 [DEBUG] [Thread-138906] [transport.py] [_log()] Compression: none
2026-01-01T02:25:05.900 [DEBUG] [Thread-138906] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:25:05.920 [DEBUG] [Thread-138906] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:25:05.920 [DEBUG] [Thread-138906] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:25:05.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T02:25:05.921 [DEBUG] [Thread-138906] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T02:25:05.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:25:05.924 [DEBUG] [Thread-138906] [transport.py] [_log()] userauth is OK
2026-01-01T02:25:05.924 [DEBUG] [Thread-138906] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:25:05.924 [DEBUG] [Thread-138906] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:25:05.924 [DEBUG] [Thread-138906] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T02:25:05.924 [DEBUG] [Thread-138906] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:25:05.949 [INFO] [Thread-138906] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:25:05.950 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:25:08.224 [DEBUG] [Thread-138906] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:25:08.224 [DEBUG] [Thread-138906] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:25:08.224 [DEBUG] [Thread-138906] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T02:25:08.265 [DEBUG] [Thread-138906] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:25:08.265 [DEBUG] [Thread-138906] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:25:08.268 [DEBUG] [Thread-138906] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:25:08.280 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:25:08.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T02:25:08.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T02:25:08.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T02:25:08.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:25:08.295 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T02:25:08.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:25:08.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:25:08.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T02:25:08.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.016798 -999.00  +13.40   6.98     81  +10.40 1 1 1 2 1     0    0 -999.00 0.00 ZNESW 4.1 7.0 197.8 14.8 14.1 -21.1 14.0 -20.7 13.8 -19.2 14.1 -20.2
2026-01-01T02:25:08.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T02:25:08.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T02:25:08.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.016798
2026-01-01T02:25:08.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T02:25:08.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T02:25:08.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T02:25:08.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T02:25:08.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T02:25:08.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T02:24:33', tmtdew=4.0, humidity=76.72, cloud=0.0, wind=11.08, temperature=13.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T02:24:34', seeing=0.8, atlas_timestamp='2026-01-01T00:24:11.347', atlas_cloud=1, atlas_rain=1, zp_data=[0.03275000000000006, 0.05924999999999869, 0.08924999999999983, 0.02999999999999936, 0.03950000000000031, 0.045750000000001734, 0.07399999999999984, 0.0782500000000006, 0.10849999999999937, 0.1070000000000011, 0.051249999999999574, 0.09600000000000009, 0.1349999999999998, 0.1352499999999992, 0.06850000000000023, 0.034499999999997755, 0.1407500000000006, 0.20849999999999902, 0.1529999999999987, 0.15124999999999922, 0.16199999999999903, 0.1477499999999985, 0.05725000000000158, 0.06174999999999997, 0.18499999999999872, 0.15949999999999953, 0.14874999999999972, 0.1899999999999995, 0.23500000000000032, 0.2140000000000022, 0.29400000000000137, 0.2060000000000013, 0.18774999999999942], zp_timestamp='2026-01-01T00:23:00')
2026-01-01T02:25:08.298 [DEBUG] [Thread-138906] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:25:08.382 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T02:25:08.394 [DEBUG] [Thread-138909] [transport.py] [_log()] starting thread (client mode): 0xb6b2a380
2026-01-01T02:25:08.395 [DEBUG] [Thread-138909] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:25:08.411 [DEBUG] [Thread-138909] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T02:25:08.411 [INFO] [Thread-138909] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T02:25:08.419 [DEBUG] [Thread-138909] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:25:08.419 [DEBUG] [Thread-138909] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T02:25:08.419 [DEBUG] [Thread-138909] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:25:08.419 [DEBUG] [Thread-138909] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:25:08.419 [DEBUG] [Thread-138909] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:25:08.419 [DEBUG] [Thread-138909] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:25:08.420 [DEBUG] [Thread-138909] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:25:08.420 [DEBUG] [Thread-138909] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:25:08.420 [DEBUG] [Thread-138909] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:25:08.420 [DEBUG] [Thread-138909] [transport.py] [_log()] client lang: <none>
2026-01-01T02:25:08.420 [DEBUG] [Thread-138909] [transport.py] [_log()] server lang: <none>
2026-01-01T02:25:08.420 [DEBUG] [Thread-138909] [transport.py] [_log()] kex follows: False
2026-01-01T02:25:08.420 [DEBUG] [Thread-138909] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:25:08.420 [DEBUG] [Thread-138909] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:25:08.420 [DEBUG] [Thread-138909] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:25:08.421 [DEBUG] [Thread-138909] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:25:08.421 [DEBUG] [Thread-138909] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:25:08.421 [DEBUG] [Thread-138909] [transport.py] [_log()] Compression: none
2026-01-01T02:25:08.421 [DEBUG] [Thread-138909] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:25:08.481 [DEBUG] [Thread-138909] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:25:08.482 [DEBUG] [Thread-138909] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:25:08.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T02:25:08.483 [DEBUG] [Thread-138909] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T02:25:08.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:25:08.538 [DEBUG] [Thread-138909] [transport.py] [_log()] userauth is OK
2026-01-01T02:25:08.538 [DEBUG] [Thread-138909] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:25:08.538 [DEBUG] [Thread-138909] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:25:08.538 [DEBUG] [Thread-138909] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T02:25:08.538 [DEBUG] [Thread-138909] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:25:08.557 [INFO] [Thread-138909] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:25:08.558 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T02:25:08.558 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:25:09.379 [DEBUG] [Thread-138909] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:25:09.379 [DEBUG] [Thread-138909] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:25:09.427 [DEBUG] [Thread-138909] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:25:09.427 [DEBUG] [Thread-138909] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:25:09.437 [DEBUG] [Thread-138909] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:25:09.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:25:09.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T02:25:09.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T02:25:09.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:25:09.465 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:25:09.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:25:09.473 [DEBUG] [Thread-138909] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:25:12.506 [DEBUG] [Thread-138911 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:25:27.562 [DEBUG] [Thread-138912 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:25:39.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T02:25:39.496 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T02:25:39.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T02:25:40.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 2, 25, 6), 3.71, 78.56, 0.0, 12.3, 13.41, 0, 0, 0, 2, 0, 0),)
2026-01-01T02:25:40.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 02:25:06
2026-01-01T02:25:40.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T02:25:40.532 [DEBUG] [Thread-138913] [transport.py] [_log()] starting thread (client mode): 0xb6b28a00
2026-01-01T02:25:40.532 [DEBUG] [Thread-138913] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:25:40.551 [DEBUG] [Thread-138913] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T02:25:40.551 [INFO] [Thread-138913] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T02:25:40.554 [DEBUG] [Thread-138913] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:25:40.555 [DEBUG] [Thread-138913] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T02:25:40.555 [DEBUG] [Thread-138913] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:25:40.555 [DEBUG] [Thread-138913] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:25:40.555 [DEBUG] [Thread-138913] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:25:40.555 [DEBUG] [Thread-138913] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:25:40.555 [DEBUG] [Thread-138913] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:25:40.555 [DEBUG] [Thread-138913] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:25:40.555 [DEBUG] [Thread-138913] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:25:40.555 [DEBUG] [Thread-138913] [transport.py] [_log()] client lang: <none>
2026-01-01T02:25:40.555 [DEBUG] [Thread-138913] [transport.py] [_log()] server lang: <none>
2026-01-01T02:25:40.555 [DEBUG] [Thread-138913] [transport.py] [_log()] kex follows: False
2026-01-01T02:25:40.555 [DEBUG] [Thread-138913] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:25:40.555 [DEBUG] [Thread-138913] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:25:40.555 [DEBUG] [Thread-138913] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:25:40.555 [DEBUG] [Thread-138913] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:25:40.555 [DEBUG] [Thread-138913] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:25:40.555 [DEBUG] [Thread-138913] [transport.py] [_log()] Compression: none
2026-01-01T02:25:40.555 [DEBUG] [Thread-138913] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:25:40.574 [DEBUG] [Thread-138913] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:25:40.574 [DEBUG] [Thread-138913] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:25:40.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T02:25:40.575 [DEBUG] [Thread-138913] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T02:25:40.576 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:25:40.577 [DEBUG] [Thread-138913] [transport.py] [_log()] userauth is OK
2026-01-01T02:25:40.578 [DEBUG] [Thread-138913] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:25:40.578 [DEBUG] [Thread-138913] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:25:40.578 [DEBUG] [Thread-138913] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T02:25:40.578 [DEBUG] [Thread-138913] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:25:40.596 [INFO] [Thread-138913] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:25:40.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:25:41.257 [DEBUG] [Thread-138913] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:25:41.257 [DEBUG] [Thread-138913] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:25:41.258 [DEBUG] [Thread-138913] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T02:25:41.299 [DEBUG] [Thread-138913] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:25:41.299 [DEBUG] [Thread-138913] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:25:41.302 [DEBUG] [Thread-138913] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:25:41.317 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:25:41.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T02:25:41.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T02:25:41.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T02:25:41.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:25:41.329 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T02:25:41.329 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:25:41.330 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:25:41.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T02:25:41.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.017145 -999.00  +13.40   2.89     82  +10.40 1 1 1 2 1     0    0 -999.00 0.00 ZNESW 11.9 2.9 279.2 6.8 14.1 -21.2 14.0 -20.8 13.8 -19.1 14.1 -20.2
2026-01-01T02:25:41.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T02:25:41.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T02:25:41.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.017145
2026-01-01T02:25:41.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T02:25:41.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T02:25:41.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T02:25:41.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T02:25:41.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T02:25:41.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T02:25:06', tmtdew=3.71, humidity=78.56, cloud=0.0, wind=12.3, temperature=13.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T02:25:38', seeing=0.8, atlas_timestamp='2026-01-01T00:24:41.328', atlas_cloud=1, atlas_rain=1, zp_data=[0.03275000000000006, 0.05924999999999869, 0.08924999999999983, 0.02999999999999936, 0.03950000000000031, 0.045750000000001734, 0.07399999999999984, 0.0782500000000006, 0.10849999999999937, 0.1070000000000011, 0.051249999999999574, 0.09600000000000009, 0.1349999999999998, 0.1352499999999992, 0.06850000000000023, 0.034499999999997755, 0.1407500000000006, 0.20849999999999902, 0.1529999999999987, 0.15124999999999922, 0.16199999999999903, 0.1477499999999985, 0.05725000000000158, 0.06174999999999997, 0.18499999999999872, 0.15949999999999953, 0.14874999999999972, 0.1899999999999995, 0.23500000000000032, 0.2140000000000022, 0.29400000000000137, 0.2060000000000013, 0.18774999999999942], zp_timestamp='2026-01-01T00:23:00')
2026-01-01T02:25:41.332 [DEBUG] [Thread-138913] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:25:41.415 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T02:25:41.427 [DEBUG] [Thread-138916] [transport.py] [_log()] starting thread (client mode): 0xb6b2b2b0
2026-01-01T02:25:41.427 [DEBUG] [Thread-138916] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:25:41.443 [DEBUG] [Thread-138916] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T02:25:41.443 [INFO] [Thread-138916] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T02:25:41.451 [DEBUG] [Thread-138916] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:25:41.451 [DEBUG] [Thread-138916] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T02:25:41.451 [DEBUG] [Thread-138916] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:25:41.451 [DEBUG] [Thread-138916] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:25:41.451 [DEBUG] [Thread-138916] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:25:41.451 [DEBUG] [Thread-138916] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:25:41.451 [DEBUG] [Thread-138916] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:25:41.451 [DEBUG] [Thread-138916] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:25:41.451 [DEBUG] [Thread-138916] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:25:41.451 [DEBUG] [Thread-138916] [transport.py] [_log()] client lang: <none>
2026-01-01T02:25:41.451 [DEBUG] [Thread-138916] [transport.py] [_log()] server lang: <none>
2026-01-01T02:25:41.451 [DEBUG] [Thread-138916] [transport.py] [_log()] kex follows: False
2026-01-01T02:25:41.451 [DEBUG] [Thread-138916] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:25:41.452 [DEBUG] [Thread-138916] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:25:41.452 [DEBUG] [Thread-138916] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:25:41.452 [DEBUG] [Thread-138916] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:25:41.452 [DEBUG] [Thread-138916] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:25:41.452 [DEBUG] [Thread-138916] [transport.py] [_log()] Compression: none
2026-01-01T02:25:41.452 [DEBUG] [Thread-138916] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:25:41.509 [DEBUG] [Thread-138916] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:25:41.510 [DEBUG] [Thread-138916] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:25:41.510 [DEBUG] [Thread-138916] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T02:25:41.510 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T02:25:41.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:25:41.565 [DEBUG] [Thread-138916] [transport.py] [_log()] userauth is OK
2026-01-01T02:25:41.566 [DEBUG] [Thread-138916] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:25:41.566 [DEBUG] [Thread-138916] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:25:41.566 [DEBUG] [Thread-138916] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T02:25:41.566 [DEBUG] [Thread-138916] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:25:41.586 [INFO] [Thread-138916] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:25:41.586 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T02:25:41.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:25:42.446 [DEBUG] [Thread-138916] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:25:42.446 [DEBUG] [Thread-138916] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:25:42.494 [DEBUG] [Thread-138916] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:25:42.494 [DEBUG] [Thread-138916] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:25:42.504 [DEBUG] [Thread-138916] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:25:42.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:25: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')
2026-01-01T02:25:42.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T02:25:42.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:25:42.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:25:42.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:25:42.540 [DEBUG] [Thread-138916] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:25:42.596 [DEBUG] [Thread-138918 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:25:57.651 [DEBUG] [Thread-138919 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:26:02.297 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:26:02.298 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:26:04.703 [DEBUG] [Thread-138920 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:26:12.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T02:26:12.562 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T02:26:12.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T02:26:12.686 [DEBUG] [Thread-138921 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:26:13.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 2, 26, 10), 3.55, 78.86, 0.0, 11.89, 13.29, 0, 0, 0, 2, 0, 0),)
2026-01-01T02:26:13.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 02:26:10
2026-01-01T02:26:13.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T02:26:13.608 [DEBUG] [Thread-138922] [transport.py] [_log()] starting thread (client mode): 0xb1744b50
2026-01-01T02:26:13.608 [DEBUG] [Thread-138922] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:26:13.628 [DEBUG] [Thread-138922] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T02:26:13.628 [INFO] [Thread-138922] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T02:26:13.631 [DEBUG] [Thread-138922] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:26:13.632 [DEBUG] [Thread-138922] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T02:26:13.632 [DEBUG] [Thread-138922] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:26:13.632 [DEBUG] [Thread-138922] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:26:13.632 [DEBUG] [Thread-138922] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:26:13.632 [DEBUG] [Thread-138922] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:26:13.632 [DEBUG] [Thread-138922] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:26:13.632 [DEBUG] [Thread-138922] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:26:13.632 [DEBUG] [Thread-138922] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:26:13.632 [DEBUG] [Thread-138922] [transport.py] [_log()] client lang: <none>
2026-01-01T02:26:13.632 [DEBUG] [Thread-138922] [transport.py] [_log()] server lang: <none>
2026-01-01T02:26:13.632 [DEBUG] [Thread-138922] [transport.py] [_log()] kex follows: False
2026-01-01T02:26:13.632 [DEBUG] [Thread-138922] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:26:13.632 [DEBUG] [Thread-138922] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:26:13.632 [DEBUG] [Thread-138922] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:26:13.632 [DEBUG] [Thread-138922] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:26:13.632 [DEBUG] [Thread-138922] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:26:13.632 [DEBUG] [Thread-138922] [transport.py] [_log()] Compression: none
2026-01-01T02:26:13.632 [DEBUG] [Thread-138922] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:26:13.645 [DEBUG] [Thread-138922] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:26:13.645 [DEBUG] [Thread-138922] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:26:13.646 [DEBUG] [Thread-138922] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T02:26:13.646 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T02:26:13.646 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:26:13.646 [DEBUG] [Thread-138922] [transport.py] [_log()] userauth is OK
2026-01-01T02:26:13.646 [DEBUG] [Thread-138922] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:26:13.646 [DEBUG] [Thread-138922] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:26:13.646 [DEBUG] [Thread-138922] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T02:26:13.646 [DEBUG] [Thread-138922] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:26:13.656 [INFO] [Thread-138922] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:26:13.656 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:26:14.275 [DEBUG] [Thread-138922] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:26:14.275 [DEBUG] [Thread-138922] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:26:14.275 [DEBUG] [Thread-138922] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T02:26:14.317 [DEBUG] [Thread-138922] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:26:14.317 [DEBUG] [Thread-138922] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:26:14.319 [DEBUG] [Thread-138922] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:26:14.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:26:14.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T02:26:14.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T02:26:14.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T02:26:14.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:26:14.331 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T02:26:14.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:26:14.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:26:14.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T02:26:14.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.017839 -999.00  +13.40   7.97     82  +10.50 1 1 1 2 1     0    0 -999.00 0.00 ZNESW 7.0 8.0 205.0 13.4 14.1 -21.1 14.0 -20.7 13.7 -19.2 14.1 -20.3
2026-01-01T02:26:14.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T02:26:14.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T02:26:14.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.017839
2026-01-01T02:26:14.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T02:26:14.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T02:26:14.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T02:26:14.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T02:26:14.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T02:26:14.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T02:26:10', tmtdew=3.55, humidity=78.86, cloud=0.0, wind=11.89, temperature=13.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T02:26:10', seeing=0.81, atlas_timestamp='2026-01-01T00:25:41.290', atlas_cloud=1, atlas_rain=1, zp_data=[0.03275000000000006, 0.05924999999999869, 0.08924999999999983, 0.02999999999999936, 0.03950000000000031, 0.045750000000001734, 0.07399999999999984, 0.0782500000000006, 0.10849999999999937, 0.1070000000000011, 0.051249999999999574, 0.09600000000000009, 0.1349999999999998, 0.1352499999999992, 0.06850000000000023, 0.034499999999997755, 0.1407500000000006, 0.20849999999999902, 0.1529999999999987, 0.15124999999999922, 0.16199999999999903, 0.1477499999999985, 0.05725000000000158, 0.06174999999999997, 0.18499999999999872, 0.15949999999999953, 0.14874999999999972, 0.1899999999999995, 0.23500000000000032, 0.2140000000000022, 0.29400000000000137, 0.2060000000000013, 0.18774999999999942], zp_timestamp='2026-01-01T00:23:00')
2026-01-01T02:26:14.332 [DEBUG] [Thread-138922] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:26:14.407 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T02:26:14.418 [DEBUG] [Thread-138925] [transport.py] [_log()] starting thread (client mode): 0xb1745db0
2026-01-01T02:26:14.419 [DEBUG] [Thread-138925] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:26:14.433 [DEBUG] [Thread-138925] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T02:26:14.433 [INFO] [Thread-138925] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T02:26:14.440 [DEBUG] [Thread-138925] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:26:14.441 [DEBUG] [Thread-138925] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T02:26:14.441 [DEBUG] [Thread-138925] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:26:14.441 [DEBUG] [Thread-138925] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:26:14.441 [DEBUG] [Thread-138925] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:26:14.441 [DEBUG] [Thread-138925] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:26:14.441 [DEBUG] [Thread-138925] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:26:14.441 [DEBUG] [Thread-138925] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:26:14.441 [DEBUG] [Thread-138925] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:26:14.441 [DEBUG] [Thread-138925] [transport.py] [_log()] client lang: <none>
2026-01-01T02:26:14.441 [DEBUG] [Thread-138925] [transport.py] [_log()] server lang: <none>
2026-01-01T02:26:14.441 [DEBUG] [Thread-138925] [transport.py] [_log()] kex follows: False
2026-01-01T02:26:14.441 [DEBUG] [Thread-138925] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:26:14.441 [DEBUG] [Thread-138925] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:26:14.441 [DEBUG] [Thread-138925] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:26:14.441 [DEBUG] [Thread-138925] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:26:14.441 [DEBUG] [Thread-138925] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:26:14.441 [DEBUG] [Thread-138925] [transport.py] [_log()] Compression: none
2026-01-01T02:26:14.441 [DEBUG] [Thread-138925] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:26:14.495 [DEBUG] [Thread-138925] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:26:14.496 [DEBUG] [Thread-138925] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:26:14.496 [DEBUG] [Thread-138925] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T02:26:14.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T02:26:14.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:26:14.553 [DEBUG] [Thread-138925] [transport.py] [_log()] userauth is OK
2026-01-01T02:26:14.553 [DEBUG] [Thread-138925] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:26:14.553 [DEBUG] [Thread-138925] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:26:14.553 [DEBUG] [Thread-138925] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T02:26:14.553 [DEBUG] [Thread-138925] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:26:14.568 [INFO] [Thread-138925] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:26:14.568 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T02:26:14.568 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:26:15.385 [DEBUG] [Thread-138925] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:26:15.385 [DEBUG] [Thread-138925] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:26:15.433 [DEBUG] [Thread-138925] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:26:15.433 [DEBUG] [Thread-138925] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:26:15.441 [DEBUG] [Thread-138925] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:26:15.449 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:26:15.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T02:26:15.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T02:26:15.465 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:26:15.465 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:26:15.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:26:15.473 [DEBUG] [Thread-138925] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:26:27.720 [DEBUG] [Thread-138927 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:26:42.771 [DEBUG] [Thread-138928 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:26:45.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T02:26:45.495 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T02:26:45.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T02:26:46.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 2, 26, 42), 3.52, 79.01, 0.0, 13.23, 13.28, 0, 0, 0, 2, 0, 0),)
2026-01-01T02:26:46.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 02:26:42
2026-01-01T02:26:46.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T02:26:46.496 [DEBUG] [Thread-138929] [transport.py] [_log()] starting thread (client mode): 0xb6b2ac20
2026-01-01T02:26:46.496 [DEBUG] [Thread-138929] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:26:46.521 [DEBUG] [Thread-138929] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T02:26:46.521 [INFO] [Thread-138929] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T02:26:46.525 [DEBUG] [Thread-138929] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:26:46.525 [DEBUG] [Thread-138929] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T02:26:46.525 [DEBUG] [Thread-138929] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:26:46.525 [DEBUG] [Thread-138929] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:26:46.525 [DEBUG] [Thread-138929] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:26:46.525 [DEBUG] [Thread-138929] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:26:46.525 [DEBUG] [Thread-138929] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:26:46.525 [DEBUG] [Thread-138929] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:26:46.525 [DEBUG] [Thread-138929] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:26:46.525 [DEBUG] [Thread-138929] [transport.py] [_log()] client lang: <none>
2026-01-01T02:26:46.525 [DEBUG] [Thread-138929] [transport.py] [_log()] server lang: <none>
2026-01-01T02:26:46.525 [DEBUG] [Thread-138929] [transport.py] [_log()] kex follows: False
2026-01-01T02:26:46.525 [DEBUG] [Thread-138929] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:26:46.525 [DEBUG] [Thread-138929] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:26:46.525 [DEBUG] [Thread-138929] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:26:46.525 [DEBUG] [Thread-138929] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:26:46.525 [DEBUG] [Thread-138929] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:26:46.525 [DEBUG] [Thread-138929] [transport.py] [_log()] Compression: none
2026-01-01T02:26:46.525 [DEBUG] [Thread-138929] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:26:46.542 [DEBUG] [Thread-138929] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:26:46.543 [DEBUG] [Thread-138929] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:26:46.543 [DEBUG] [Thread-138929] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T02:26:46.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T02:26:46.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:26:46.546 [DEBUG] [Thread-138929] [transport.py] [_log()] userauth is OK
2026-01-01T02:26:46.546 [DEBUG] [Thread-138929] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:26:46.546 [DEBUG] [Thread-138929] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:26:46.546 [DEBUG] [Thread-138929] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T02:26:46.546 [DEBUG] [Thread-138929] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:26:46.582 [INFO] [Thread-138929] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:26:46.583 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:26:47.231 [DEBUG] [Thread-138929] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:26:47.231 [DEBUG] [Thread-138929] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:26:47.232 [DEBUG] [Thread-138929] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T02:26:47.272 [DEBUG] [Thread-138929] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:26:47.272 [DEBUG] [Thread-138929] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:26:47.276 [DEBUG] [Thread-138929] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:26:47.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:26:47.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T02:26:47.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T02:26:47.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T02:26:47.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:26:47.300 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T02:26:47.301 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:26:47.301 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:26:47.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T02:26:47.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.018187 -999.00  +13.40   7.16     82  +10.50 1 1 1 2 1     0    0 -999.00 0.00 ZNESW 7.4 7.2 255.8 14.8 14.1 -21.0 14.0 -20.7 13.8 -19.1 14.0 -20.3
2026-01-01T02:26:47.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T02:26:47.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T02:26:47.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.018187
2026-01-01T02:26:47.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T02:26:47.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T02:26:47.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T02:26:47.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T02:26:47.303 [DEBUG] [Thread-138929] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:26:47.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T02:26:47.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T02:26:42', tmtdew=3.52, humidity=79.01, cloud=0.0, wind=13.23, temperature=13.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T02:26:42', seeing=0.96, atlas_timestamp='2026-01-01T00:26:11.357', atlas_cloud=1, atlas_rain=1, zp_data=[0.03275000000000006, 0.05924999999999869, 0.08924999999999983, 0.02999999999999936, 0.03950000000000031, 0.045750000000001734, 0.07399999999999984, 0.0782500000000006, 0.10849999999999937, 0.1070000000000011, 0.051249999999999574, 0.09600000000000009, 0.1349999999999998, 0.1352499999999992, 0.06850000000000023, 0.034499999999997755, 0.1407500000000006, 0.20849999999999902, 0.1529999999999987, 0.15124999999999922, 0.16199999999999903, 0.1477499999999985, 0.05725000000000158, 0.06174999999999997, 0.18499999999999872, 0.15949999999999953, 0.14874999999999972, 0.1899999999999995, 0.23500000000000032, 0.2140000000000022, 0.29400000000000137, 0.2060000000000013, 0.18774999999999942], zp_timestamp='2026-01-01T00:23:00')
2026-01-01T02:26:47.385 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T02:26:47.395 [DEBUG] [Thread-138932] [transport.py] [_log()] starting thread (client mode): 0xb6b03850
2026-01-01T02:26:47.395 [DEBUG] [Thread-138932] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:26:47.409 [DEBUG] [Thread-138932] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T02:26:47.409 [INFO] [Thread-138932] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T02:26:47.417 [DEBUG] [Thread-138932] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:26:47.417 [DEBUG] [Thread-138932] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T02:26:47.417 [DEBUG] [Thread-138932] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:26:47.418 [DEBUG] [Thread-138932] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:26:47.418 [DEBUG] [Thread-138932] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:26:47.418 [DEBUG] [Thread-138932] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:26:47.418 [DEBUG] [Thread-138932] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:26:47.418 [DEBUG] [Thread-138932] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:26:47.418 [DEBUG] [Thread-138932] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:26:47.418 [DEBUG] [Thread-138932] [transport.py] [_log()] client lang: <none>
2026-01-01T02:26:47.418 [DEBUG] [Thread-138932] [transport.py] [_log()] server lang: <none>
2026-01-01T02:26:47.418 [DEBUG] [Thread-138932] [transport.py] [_log()] kex follows: False
2026-01-01T02:26:47.418 [DEBUG] [Thread-138932] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:26:47.419 [DEBUG] [Thread-138932] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:26:47.419 [DEBUG] [Thread-138932] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:26:47.419 [DEBUG] [Thread-138932] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:26:47.419 [DEBUG] [Thread-138932] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:26:47.419 [DEBUG] [Thread-138932] [transport.py] [_log()] Compression: none
2026-01-01T02:26:47.419 [DEBUG] [Thread-138932] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:26:47.478 [DEBUG] [Thread-138932] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:26:47.479 [DEBUG] [Thread-138932] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:26:47.479 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T02:26:47.480 [DEBUG] [Thread-138932] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T02:26:47.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:26:47.541 [DEBUG] [Thread-138932] [transport.py] [_log()] userauth is OK
2026-01-01T02:26:47.541 [DEBUG] [Thread-138932] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:26:47.542 [DEBUG] [Thread-138932] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:26:47.542 [DEBUG] [Thread-138932] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T02:26:47.542 [DEBUG] [Thread-138932] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:26:47.557 [INFO] [Thread-138932] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:26:47.557 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T02:26:47.558 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:26:48.442 [DEBUG] [Thread-138932] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:26:48.442 [DEBUG] [Thread-138932] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:26:48.490 [DEBUG] [Thread-138932] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:26:48.490 [DEBUG] [Thread-138932] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:26:48.499 [DEBUG] [Thread-138932] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:26:48.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:26:48.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T02:26:48.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T02:26:48.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:26:48.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:26:48.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:26:48.536 [DEBUG] [Thread-138932] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:26:57.800 [DEBUG] [Thread-138934 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:27:02.497 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:27:02.498 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:27:04.787 [DEBUG] [Thread-138935 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:27:12.861 [DEBUG] [Thread-138936 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:27:18.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T02:27:18.559 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T02:27:18.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T02:27:19.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 2, 27, 14), 3.5, 79.15, 0.0, 12.6, 13.24, 0, 0, 0, 2, 0, 0),)
2026-01-01T02:27:19.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 02:27:14
2026-01-01T02:27:19.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T02:27:19.560 [DEBUG] [Thread-138937] [transport.py] [_log()] starting thread (client mode): 0xb1744100
2026-01-01T02:27:19.560 [DEBUG] [Thread-138937] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:27:19.581 [DEBUG] [Thread-138937] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T02:27:19.581 [INFO] [Thread-138937] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T02:27:19.584 [DEBUG] [Thread-138937] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:27:19.584 [DEBUG] [Thread-138937] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T02:27:19.584 [DEBUG] [Thread-138937] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:27:19.584 [DEBUG] [Thread-138937] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:27:19.584 [DEBUG] [Thread-138937] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:27:19.584 [DEBUG] [Thread-138937] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:27:19.584 [DEBUG] [Thread-138937] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:27:19.585 [DEBUG] [Thread-138937] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:27:19.585 [DEBUG] [Thread-138937] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:27:19.585 [DEBUG] [Thread-138937] [transport.py] [_log()] client lang: <none>
2026-01-01T02:27:19.585 [DEBUG] [Thread-138937] [transport.py] [_log()] server lang: <none>
2026-01-01T02:27:19.585 [DEBUG] [Thread-138937] [transport.py] [_log()] kex follows: False
2026-01-01T02:27:19.585 [DEBUG] [Thread-138937] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:27:19.585 [DEBUG] [Thread-138937] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:27:19.585 [DEBUG] [Thread-138937] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:27:19.585 [DEBUG] [Thread-138937] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:27:19.585 [DEBUG] [Thread-138937] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:27:19.585 [DEBUG] [Thread-138937] [transport.py] [_log()] Compression: none
2026-01-01T02:27:19.585 [DEBUG] [Thread-138937] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:27:19.605 [DEBUG] [Thread-138937] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:27:19.605 [DEBUG] [Thread-138937] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:27:19.606 [DEBUG] [Thread-138937] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T02:27:19.607 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T02:27:19.608 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:27:19.609 [DEBUG] [Thread-138937] [transport.py] [_log()] userauth is OK
2026-01-01T02:27:19.609 [DEBUG] [Thread-138937] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:27:19.610 [DEBUG] [Thread-138937] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:27:19.610 [DEBUG] [Thread-138937] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T02:27:19.610 [DEBUG] [Thread-138937] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:27:19.629 [INFO] [Thread-138937] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:27:19.630 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:27:20.248 [DEBUG] [Thread-138937] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:27:20.248 [DEBUG] [Thread-138937] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:27:20.249 [DEBUG] [Thread-138937] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T02:27:20.289 [DEBUG] [Thread-138937] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:27:20.289 [DEBUG] [Thread-138937] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:27:20.292 [DEBUG] [Thread-138937] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:27:20.304 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:27:20.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T02:27:20.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T02:27:20.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T02:27:20.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:27:20.315 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T02:27:20.315 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:27:20.315 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:27:20.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T02:27:20.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.018534 -999.00  +13.40   7.15     82  +10.40 1 1 1 2 1     0    0 -999.00 0.00 ZNESW 8.7 7.2 205.6 13.7 14.1 -21.1 13.9 -20.8 13.7 -19.1 14.0 -20.2
2026-01-01T02:27:20.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T02:27:20.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T02:27:20.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.018534
2026-01-01T02:27:20.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T02:27:20.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T02:27:20.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T02:27:20.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T02:27:20.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T02:27:20.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T02:27:14', tmtdew=3.5, humidity=79.15, cloud=0.0, wind=12.6, temperature=13.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T02:27:14', seeing=1.05, atlas_timestamp='2026-01-01T00:26:41.338', atlas_cloud=1, atlas_rain=1, zp_data=[0.03275000000000006, 0.05924999999999869, 0.08924999999999983, 0.02999999999999936, 0.03950000000000031, 0.045750000000001734, 0.07399999999999984, 0.0782500000000006, 0.10849999999999937, 0.1070000000000011, 0.051249999999999574, 0.09600000000000009, 0.1349999999999998, 0.1352499999999992, 0.06850000000000023, 0.034499999999997755, 0.1407500000000006, 0.20849999999999902, 0.1529999999999987, 0.15124999999999922, 0.16199999999999903, 0.1477499999999985, 0.05725000000000158, 0.06174999999999997, 0.18499999999999872, 0.15949999999999953, 0.14874999999999972, 0.1899999999999995, 0.23500000000000032, 0.2140000000000022, 0.29400000000000137, 0.2060000000000013, 0.18774999999999942], zp_timestamp='2026-01-01T00:23:00')
2026-01-01T02:27:20.318 [DEBUG] [Thread-138937] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:27:20.401 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T02:27:20.413 [DEBUG] [Thread-138940] [transport.py] [_log()] starting thread (client mode): 0xb1747400
2026-01-01T02:27:20.414 [DEBUG] [Thread-138940] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:27:20.429 [DEBUG] [Thread-138940] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T02:27:20.429 [INFO] [Thread-138940] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T02:27:20.437 [DEBUG] [Thread-138940] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:27:20.437 [DEBUG] [Thread-138940] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T02:27:20.437 [DEBUG] [Thread-138940] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:27:20.437 [DEBUG] [Thread-138940] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:27:20.437 [DEBUG] [Thread-138940] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:27:20.437 [DEBUG] [Thread-138940] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:27:20.438 [DEBUG] [Thread-138940] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:27:20.438 [DEBUG] [Thread-138940] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:27:20.438 [DEBUG] [Thread-138940] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:27:20.438 [DEBUG] [Thread-138940] [transport.py] [_log()] client lang: <none>
2026-01-01T02:27:20.438 [DEBUG] [Thread-138940] [transport.py] [_log()] server lang: <none>
2026-01-01T02:27:20.438 [DEBUG] [Thread-138940] [transport.py] [_log()] kex follows: False
2026-01-01T02:27:20.438 [DEBUG] [Thread-138940] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:27:20.439 [DEBUG] [Thread-138940] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:27:20.439 [DEBUG] [Thread-138940] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:27:20.439 [DEBUG] [Thread-138940] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:27:20.439 [DEBUG] [Thread-138940] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:27:20.439 [DEBUG] [Thread-138940] [transport.py] [_log()] Compression: none
2026-01-01T02:27:20.439 [DEBUG] [Thread-138940] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:27:20.497 [DEBUG] [Thread-138940] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:27:20.498 [DEBUG] [Thread-138940] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:27:20.498 [DEBUG] [Thread-138940] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T02:27:20.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T02:27:20.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:27:20.557 [DEBUG] [Thread-138940] [transport.py] [_log()] userauth is OK
2026-01-01T02:27:20.557 [DEBUG] [Thread-138940] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:27:20.558 [DEBUG] [Thread-138940] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:27:20.558 [DEBUG] [Thread-138940] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T02:27:20.558 [DEBUG] [Thread-138940] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:27:20.576 [INFO] [Thread-138940] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:27:20.577 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T02:27:20.577 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:27:21.413 [DEBUG] [Thread-138940] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:27:21.413 [DEBUG] [Thread-138940] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:27:21.461 [DEBUG] [Thread-138940] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:27:21.461 [DEBUG] [Thread-138940] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:27:21.471 [DEBUG] [Thread-138940] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:27:21.480 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:27:21.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T02:27: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') -> 00000000
2026-01-01T02:27:21.498 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:27:21.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:27:21.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:27:21.507 [DEBUG] [Thread-138940] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:27:27.895 [DEBUG] [Thread-138942 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:27:42.945 [DEBUG] [Thread-138943 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:27:51.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T02:27:51.530 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T02:27:51.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T02:27:52.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 2, 27, 46), 3.45, 79.87, 0.0, 12.79, 13.23, 0, 0, 0, 2, 0, 0),)
2026-01-01T02:27:52.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 02:27:46
2026-01-01T02:27:52.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T02:27:52.511 [DEBUG] [Thread-138944] [transport.py] [_log()] starting thread (client mode): 0xb6b2afb0
2026-01-01T02:27:52.511 [DEBUG] [Thread-138944] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:27:52.532 [DEBUG] [Thread-138944] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T02:27:52.533 [INFO] [Thread-138944] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T02:27:52.536 [DEBUG] [Thread-138944] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:27:52.536 [DEBUG] [Thread-138944] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T02:27:52.536 [DEBUG] [Thread-138944] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:27:52.536 [DEBUG] [Thread-138944] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:27:52.536 [DEBUG] [Thread-138944] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:27:52.537 [DEBUG] [Thread-138944] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:27:52.537 [DEBUG] [Thread-138944] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:27:52.537 [DEBUG] [Thread-138944] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:27:52.537 [DEBUG] [Thread-138944] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:27:52.537 [DEBUG] [Thread-138944] [transport.py] [_log()] client lang: <none>
2026-01-01T02:27:52.537 [DEBUG] [Thread-138944] [transport.py] [_log()] server lang: <none>
2026-01-01T02:27:52.537 [DEBUG] [Thread-138944] [transport.py] [_log()] kex follows: False
2026-01-01T02:27:52.537 [DEBUG] [Thread-138944] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:27:52.537 [DEBUG] [Thread-138944] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:27:52.537 [DEBUG] [Thread-138944] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:27:52.538 [DEBUG] [Thread-138944] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:27:52.538 [DEBUG] [Thread-138944] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:27:52.538 [DEBUG] [Thread-138944] [transport.py] [_log()] Compression: none
2026-01-01T02:27:52.538 [DEBUG] [Thread-138944] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:27:52.557 [DEBUG] [Thread-138944] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:27:52.558 [DEBUG] [Thread-138944] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:27:52.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T02:27:52.559 [DEBUG] [Thread-138944] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T02:27:52.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:27:52.561 [DEBUG] [Thread-138944] [transport.py] [_log()] userauth is OK
2026-01-01T02:27:52.561 [DEBUG] [Thread-138944] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:27:52.561 [DEBUG] [Thread-138944] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:27:52.561 [DEBUG] [Thread-138944] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T02:27:52.561 [DEBUG] [Thread-138944] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:27:52.598 [INFO] [Thread-138944] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:27:52.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:27:53.256 [DEBUG] [Thread-138944] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:27:53.256 [DEBUG] [Thread-138944] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:27:53.257 [DEBUG] [Thread-138944] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T02:27:53.297 [DEBUG] [Thread-138944] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:27:53.297 [DEBUG] [Thread-138944] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:27:53.300 [DEBUG] [Thread-138944] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:27:53.311 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:27:53.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T02:27:53.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T02:27:53.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T02:27:53.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:27:53.326 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T02:27:53.326 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:27:53.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:27:53.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T02:27:53.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.018882 -999.00  +13.30   5.53     82  +10.40 1 1 1 2 1     0    0 -999.00 0.00 ZNESW 6.5 5.5 219.7 11.8 14.1 -21.1 14.0 -20.7 13.7 -19.1 14.0 -20.1
2026-01-01T02:27:53.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T02:27:53.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T02:27:53.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.018882
2026-01-01T02:27:53.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T02:27:53.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T02:27:53.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T02:27:53.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T02:27:53.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T02:27:53.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T02:27:46', tmtdew=3.45, humidity=79.87, cloud=0.0, wind=12.79, temperature=13.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T02:27:46', seeing=0.78, atlas_timestamp='2026-01-01T00:27:11.405', atlas_cloud=1, atlas_rain=1, zp_data=[0.00975000000000037, 0.04824999999999946, 0.08525000000000027, 0.04449999999999932, 0.06049999999999933, 0.07125000000000092, 0.09699999999999953, 0.07525000000000048, 0.11349999999999838, 0.13000000000000078, 0.03524999999999956, 0.07950000000000124, 0.12400000000000055, 0.11875000000000036, 0.07249999999999801, 0.07399999999999984, 0.17575000000000074, 0.20350000000000001, 0.13199999999999967, 0.14624999999999844, 0.18249999999999922, 0.11074999999999946, 0.07624999999999993, 0.10275000000000034, 0.17099999999999937, 0.22250000000000014, 0.16174999999999962, 0.21850000000000058, 0.4710000000000001, 0.28300000000000125, 0.22800000000000153, 0.29300000000000104, 0.16474999999999795], zp_timestamp='2026-01-01T00:26:00')
2026-01-01T02:27:53.329 [DEBUG] [Thread-138944] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:27:53.412 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T02:27:53.424 [DEBUG] [Thread-138947] [transport.py] [_log()] starting thread (client mode): 0xb6bbda20
2026-01-01T02:27:53.424 [DEBUG] [Thread-138947] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:27:53.440 [DEBUG] [Thread-138947] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T02:27:53.440 [INFO] [Thread-138947] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T02:27:53.447 [DEBUG] [Thread-138947] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:27:53.448 [DEBUG] [Thread-138947] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T02:27:53.448 [DEBUG] [Thread-138947] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:27:53.448 [DEBUG] [Thread-138947] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:27:53.448 [DEBUG] [Thread-138947] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:27:53.448 [DEBUG] [Thread-138947] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:27:53.448 [DEBUG] [Thread-138947] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:27:53.448 [DEBUG] [Thread-138947] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:27:53.448 [DEBUG] [Thread-138947] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:27:53.448 [DEBUG] [Thread-138947] [transport.py] [_log()] client lang: <none>
2026-01-01T02:27:53.448 [DEBUG] [Thread-138947] [transport.py] [_log()] server lang: <none>
2026-01-01T02:27:53.448 [DEBUG] [Thread-138947] [transport.py] [_log()] kex follows: False
2026-01-01T02:27:53.448 [DEBUG] [Thread-138947] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:27:53.448 [DEBUG] [Thread-138947] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:27:53.448 [DEBUG] [Thread-138947] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:27:53.448 [DEBUG] [Thread-138947] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:27:53.449 [DEBUG] [Thread-138947] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:27:53.449 [DEBUG] [Thread-138947] [transport.py] [_log()] Compression: none
2026-01-01T02:27:53.449 [DEBUG] [Thread-138947] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:27:53.505 [DEBUG] [Thread-138947] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:27:53.505 [DEBUG] [Thread-138947] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:27:53.506 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T02:27:53.507 [DEBUG] [Thread-138947] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T02:27:53.508 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:27:53.561 [DEBUG] [Thread-138947] [transport.py] [_log()] userauth is OK
2026-01-01T02:27:53.561 [DEBUG] [Thread-138947] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:27:53.561 [DEBUG] [Thread-138947] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:27:53.561 [DEBUG] [Thread-138947] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T02:27:53.562 [DEBUG] [Thread-138947] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:27:53.580 [INFO] [Thread-138947] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:27:53.581 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T02:27:53.581 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:27:54.417 [DEBUG] [Thread-138947] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:27:54.417 [DEBUG] [Thread-138947] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:27:54.465 [DEBUG] [Thread-138947] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:27:54.465 [DEBUG] [Thread-138947] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:27:54.474 [DEBUG] [Thread-138947] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:27:54.483 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:27:54.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T02:27:54.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T02:27:54.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:27:54.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:27:54.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:27:54.511 [DEBUG] [Thread-138947] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:27:57.978 [DEBUG] [Thread-138949 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:28:02.698 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:28:02.700 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:28:04.868 [DEBUG] [Thread-138950 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:28:13.025 [DEBUG] [Thread-138951 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:28:24.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T02:28:24.526 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T02:28:24.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T02:28:25.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 2, 28, 18), 3.44, 79.95, 0.0, 12.56, 13.24, 0, 0, 0, 2, 0, 0),)
2026-01-01T02:28:25.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 02:28:18
2026-01-01T02:28:25.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T02:28:25.514 [DEBUG] [Thread-138952] [transport.py] [_log()] starting thread (client mode): 0xb6b2ae00
2026-01-01T02:28:25.514 [DEBUG] [Thread-138952] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:28:25.534 [DEBUG] [Thread-138952] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T02:28:25.534 [INFO] [Thread-138952] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T02:28:25.537 [DEBUG] [Thread-138952] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:28:25.537 [DEBUG] [Thread-138952] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T02:28:25.537 [DEBUG] [Thread-138952] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:28:25.537 [DEBUG] [Thread-138952] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:28:25.537 [DEBUG] [Thread-138952] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:28:25.537 [DEBUG] [Thread-138952] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:28:25.537 [DEBUG] [Thread-138952] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:28:25.537 [DEBUG] [Thread-138952] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:28:25.537 [DEBUG] [Thread-138952] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:28:25.537 [DEBUG] [Thread-138952] [transport.py] [_log()] client lang: <none>
2026-01-01T02:28:25.537 [DEBUG] [Thread-138952] [transport.py] [_log()] server lang: <none>
2026-01-01T02:28:25.538 [DEBUG] [Thread-138952] [transport.py] [_log()] kex follows: False
2026-01-01T02:28:25.538 [DEBUG] [Thread-138952] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:28:25.538 [DEBUG] [Thread-138952] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:28:25.538 [DEBUG] [Thread-138952] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:28:25.538 [DEBUG] [Thread-138952] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:28:25.538 [DEBUG] [Thread-138952] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:28:25.538 [DEBUG] [Thread-138952] [transport.py] [_log()] Compression: none
2026-01-01T02:28:25.538 [DEBUG] [Thread-138952] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:28:25.550 [DEBUG] [Thread-138952] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:28:25.550 [DEBUG] [Thread-138952] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:28:25.551 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T02:28:25.551 [DEBUG] [Thread-138952] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T02:28:25.551 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:28:25.552 [DEBUG] [Thread-138952] [transport.py] [_log()] userauth is OK
2026-01-01T02:28:25.552 [DEBUG] [Thread-138952] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:28:25.552 [DEBUG] [Thread-138952] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:28:25.552 [DEBUG] [Thread-138952] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T02:28:25.552 [DEBUG] [Thread-138952] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:28:25.570 [INFO] [Thread-138952] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:28:25.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:28:26.311 [DEBUG] [Thread-138952] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:28:26.312 [DEBUG] [Thread-138952] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:28:26.312 [DEBUG] [Thread-138952] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T02:28:26.353 [DEBUG] [Thread-138952] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:28:26.353 [DEBUG] [Thread-138952] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:28:26.355 [DEBUG] [Thread-138952] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:28:26.367 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:28:26.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T02:28:26.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T02:28:26.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T02:28:26.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:28:26.383 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T02:28:26.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:28:26.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:28:26.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T02:28:26.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.019229 -999.00  +13.30   8.49     82  +10.40 1 1 1 2 1     0    0 -999.00 0.00 ZNESW 10.1 8.5 204.6 13.4 14.1 -21.1 14.0 -20.7 13.7 -19.0 14.0 -20.2
2026-01-01T02:28:26.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T02:28:26.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T02:28:26.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.019229
2026-01-01T02:28:26.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T02:28:26.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T02:28:26.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T02:28:26.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T02:28:26.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T02:28:26.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T02:28:18', tmtdew=3.44, humidity=79.95, cloud=0.0, wind=12.56, temperature=13.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T02:28:18', seeing=0.87, atlas_timestamp='2026-01-01T00:27:41.386', atlas_cloud=1, atlas_rain=1, zp_data=[0.00975000000000037, 0.04824999999999946, 0.08525000000000027, 0.04449999999999932, 0.06049999999999933, 0.07125000000000092, 0.09699999999999953, 0.07525000000000048, 0.11349999999999838, 0.13000000000000078, 0.03524999999999956, 0.07950000000000124, 0.12400000000000055, 0.11875000000000036, 0.07249999999999801, 0.07399999999999984, 0.17575000000000074, 0.20350000000000001, 0.13199999999999967, 0.14624999999999844, 0.18249999999999922, 0.11074999999999946, 0.07624999999999993, 0.10275000000000034, 0.17099999999999937, 0.22250000000000014, 0.16174999999999962, 0.21850000000000058, 0.4710000000000001, 0.28300000000000125, 0.22800000000000153, 0.29300000000000104, 0.16474999999999795], zp_timestamp='2026-01-01T00:26:00')
2026-01-01T02:28:26.386 [DEBUG] [Thread-138952] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:28:26.472 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T02:28:26.484 [DEBUG] [Thread-138955] [transport.py] [_log()] starting thread (client mode): 0xb17448b0
2026-01-01T02:28:26.484 [DEBUG] [Thread-138955] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:28:26.499 [DEBUG] [Thread-138955] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T02:28:26.499 [INFO] [Thread-138955] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T02:28:26.506 [DEBUG] [Thread-138955] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:28:26.507 [DEBUG] [Thread-138955] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T02:28:26.507 [DEBUG] [Thread-138955] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:28:26.507 [DEBUG] [Thread-138955] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:28:26.507 [DEBUG] [Thread-138955] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:28:26.507 [DEBUG] [Thread-138955] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:28:26.508 [DEBUG] [Thread-138955] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:28:26.508 [DEBUG] [Thread-138955] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:28:26.508 [DEBUG] [Thread-138955] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:28:26.508 [DEBUG] [Thread-138955] [transport.py] [_log()] client lang: <none>
2026-01-01T02:28:26.508 [DEBUG] [Thread-138955] [transport.py] [_log()] server lang: <none>
2026-01-01T02:28:26.508 [DEBUG] [Thread-138955] [transport.py] [_log()] kex follows: False
2026-01-01T02:28:26.508 [DEBUG] [Thread-138955] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:28:26.508 [DEBUG] [Thread-138955] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:28:26.508 [DEBUG] [Thread-138955] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:28:26.508 [DEBUG] [Thread-138955] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:28:26.508 [DEBUG] [Thread-138955] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:28:26.508 [DEBUG] [Thread-138955] [transport.py] [_log()] Compression: none
2026-01-01T02:28:26.508 [DEBUG] [Thread-138955] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:28:26.565 [DEBUG] [Thread-138955] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:28:26.565 [DEBUG] [Thread-138955] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:28:26.566 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T02:28:26.567 [DEBUG] [Thread-138955] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T02:28:26.568 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:28:26.621 [DEBUG] [Thread-138955] [transport.py] [_log()] userauth is OK
2026-01-01T02:28:26.621 [DEBUG] [Thread-138955] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:28:26.621 [DEBUG] [Thread-138955] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:28:26.621 [DEBUG] [Thread-138955] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T02:28:26.622 [DEBUG] [Thread-138955] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:28:26.640 [INFO] [Thread-138955] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:28:26.641 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T02:28:26.642 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:28:27.513 [DEBUG] [Thread-138955] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:28:27.514 [DEBUG] [Thread-138955] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:28:27.562 [DEBUG] [Thread-138955] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:28:27.562 [DEBUG] [Thread-138955] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:28:27.571 [DEBUG] [Thread-138955] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:28:27.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:28:27.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T02:28:27.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T02:28:27.600 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:28:27.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:28:27.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:28:27.608 [DEBUG] [Thread-138955] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:28:28.055 [DEBUG] [Thread-138957 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:28:43.118 [DEBUG] [Thread-138958 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:28:57.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T02:28:57.631 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T02:28:57.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T02:28:58.147 [DEBUG] [Thread-138959 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:28:58.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 2, 28, 50), 3.38, 80.0, 0.0, 12.11, 13.21, 0, 1, 0, 2, 0, 0),)
2026-01-01T02:28:58.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 02:28:50
2026-01-01T02:28:58.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T02:28:58.605 [DEBUG] [Thread-138960] [transport.py] [_log()] starting thread (client mode): 0xb17445b0
2026-01-01T02:28:58.605 [DEBUG] [Thread-138960] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:28:58.625 [DEBUG] [Thread-138960] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T02:28:58.625 [INFO] [Thread-138960] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T02:28:58.628 [DEBUG] [Thread-138960] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:28:58.628 [DEBUG] [Thread-138960] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T02:28:58.628 [DEBUG] [Thread-138960] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:28:58.629 [DEBUG] [Thread-138960] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:28:58.629 [DEBUG] [Thread-138960] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:28:58.629 [DEBUG] [Thread-138960] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:28:58.629 [DEBUG] [Thread-138960] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:28:58.629 [DEBUG] [Thread-138960] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:28:58.629 [DEBUG] [Thread-138960] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:28:58.629 [DEBUG] [Thread-138960] [transport.py] [_log()] client lang: <none>
2026-01-01T02:28:58.629 [DEBUG] [Thread-138960] [transport.py] [_log()] server lang: <none>
2026-01-01T02:28:58.629 [DEBUG] [Thread-138960] [transport.py] [_log()] kex follows: False
2026-01-01T02:28:58.629 [DEBUG] [Thread-138960] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:28:58.629 [DEBUG] [Thread-138960] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:28:58.629 [DEBUG] [Thread-138960] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:28:58.629 [DEBUG] [Thread-138960] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:28:58.629 [DEBUG] [Thread-138960] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:28:58.629 [DEBUG] [Thread-138960] [transport.py] [_log()] Compression: none
2026-01-01T02:28:58.629 [DEBUG] [Thread-138960] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:28:58.648 [DEBUG] [Thread-138960] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:28:58.648 [DEBUG] [Thread-138960] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:28:58.649 [DEBUG] [Thread-138960] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T02:28:58.649 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T02:28:58.650 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:28:58.651 [DEBUG] [Thread-138960] [transport.py] [_log()] userauth is OK
2026-01-01T02:28:58.651 [DEBUG] [Thread-138960] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:28:58.651 [DEBUG] [Thread-138960] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:28:58.651 [DEBUG] [Thread-138960] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T02:28:58.652 [DEBUG] [Thread-138960] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:28:58.673 [INFO] [Thread-138960] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:28:58.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:28:59.282 [DEBUG] [Thread-138960] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:28:59.283 [DEBUG] [Thread-138960] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:28:59.283 [DEBUG] [Thread-138960] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T02:28:59.324 [DEBUG] [Thread-138960] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:28:59.324 [DEBUG] [Thread-138960] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:28:59.328 [DEBUG] [Thread-138960] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:28:59.339 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:28:59.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T02:28:59.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T02:28:59.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T02:28:59.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:28:59.350 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T02:28:59.351 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:28:59.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:28:59.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T02:28:59.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.019576 -999.00  +13.30   6.83     82  +10.40 1 1 1 2 1     0    0 -999.00 0.00 ZNESW 4.3 6.8 208.0 11.7 14.0 -21.2 13.9 -20.5 13.7 -19.0 14.0 -20.1
2026-01-01T02:28:59.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T02:28:59.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T02:28:59.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.019576
2026-01-01T02:28:59.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T02:28:59.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T02:28:59.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T02:28:59.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T02:28:59.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T02:28:59.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T02:28:50', tmtdew=3.38, humidity=80.0, cloud=0.0, wind=12.11, temperature=13.21, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T02:28:50', seeing=0.87, atlas_timestamp='2026-01-01T00:28:11.366', atlas_cloud=1, atlas_rain=1, zp_data=[0.00975000000000037, 0.04824999999999946, 0.08525000000000027, 0.04449999999999932, 0.06049999999999933, 0.07125000000000092, 0.09699999999999953, 0.07525000000000048, 0.11349999999999838, 0.13000000000000078, 0.03524999999999956, 0.07950000000000124, 0.12400000000000055, 0.11875000000000036, 0.07249999999999801, 0.07399999999999984, 0.17575000000000074, 0.20350000000000001, 0.13199999999999967, 0.14624999999999844, 0.18249999999999922, 0.11074999999999946, 0.07624999999999993, 0.10275000000000034, 0.17099999999999937, 0.22250000000000014, 0.16174999999999962, 0.21850000000000058, 0.4710000000000001, 0.28300000000000125, 0.22800000000000153, 0.29300000000000104, 0.16474999999999795], zp_timestamp='2026-01-01T00:26:00')
2026-01-01T02:28:59.353 [DEBUG] [Thread-138960] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:28:59.441 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T02:28:59.453 [DEBUG] [Thread-138963] [transport.py] [_log()] starting thread (client mode): 0xb1745ff0
2026-01-01T02:28:59.453 [DEBUG] [Thread-138963] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:28:59.471 [DEBUG] [Thread-138963] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T02:28:59.471 [INFO] [Thread-138963] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T02:28:59.479 [DEBUG] [Thread-138963] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:28:59.479 [DEBUG] [Thread-138963] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T02:28:59.479 [DEBUG] [Thread-138963] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:28:59.479 [DEBUG] [Thread-138963] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:28:59.479 [DEBUG] [Thread-138963] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:28:59.479 [DEBUG] [Thread-138963] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:28:59.479 [DEBUG] [Thread-138963] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:28:59.479 [DEBUG] [Thread-138963] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:28:59.480 [DEBUG] [Thread-138963] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:28:59.480 [DEBUG] [Thread-138963] [transport.py] [_log()] client lang: <none>
2026-01-01T02:28:59.480 [DEBUG] [Thread-138963] [transport.py] [_log()] server lang: <none>
2026-01-01T02:28:59.480 [DEBUG] [Thread-138963] [transport.py] [_log()] kex follows: False
2026-01-01T02:28:59.480 [DEBUG] [Thread-138963] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:28:59.480 [DEBUG] [Thread-138963] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:28:59.480 [DEBUG] [Thread-138963] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:28:59.480 [DEBUG] [Thread-138963] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:28:59.480 [DEBUG] [Thread-138963] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:28:59.480 [DEBUG] [Thread-138963] [transport.py] [_log()] Compression: none
2026-01-01T02:28:59.480 [DEBUG] [Thread-138963] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:28:59.537 [DEBUG] [Thread-138963] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:28:59.537 [DEBUG] [Thread-138963] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:28:59.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T02:28:59.538 [DEBUG] [Thread-138963] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T02:28:59.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:28:59.593 [DEBUG] [Thread-138963] [transport.py] [_log()] userauth is OK
2026-01-01T02:28:59.593 [DEBUG] [Thread-138963] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:28:59.594 [DEBUG] [Thread-138963] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:28:59.594 [DEBUG] [Thread-138963] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T02:28:59.594 [DEBUG] [Thread-138963] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:28:59.612 [INFO] [Thread-138963] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:28:59.612 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T02:28:59.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:29:00.437 [DEBUG] [Thread-138963] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:29:00.437 [DEBUG] [Thread-138963] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:29:00.486 [DEBUG] [Thread-138963] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:29:00.487 [DEBUG] [Thread-138963] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:29:00.497 [DEBUG] [Thread-138963] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:29:00.507 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:29:00.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T02:29:00.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T02:29:00.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:29:00.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:29:00.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:29:00.537 [DEBUG] [Thread-138963] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:29:02.901 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:29:02.902 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:29:04.925 [DEBUG] [Thread-138965 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:29:13.177 [DEBUG] [Thread-138966 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:29:28.231 [DEBUG] [Thread-138967 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:29:30.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T02:29:30.558 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T02:29:30.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T02:29:31.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 2, 29, 22), 3.37, 80.02, 0.0, 11.4, 13.19, 0, 1, 0, 2, 0, 0),)
2026-01-01T02:29:31.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 02:29:22
2026-01-01T02:29:31.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T02:29:31.598 [DEBUG] [Thread-138968] [transport.py] [_log()] starting thread (client mode): 0xb6b01f30
2026-01-01T02:29:31.599 [DEBUG] [Thread-138968] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:29:31.619 [DEBUG] [Thread-138968] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T02:29:31.619 [INFO] [Thread-138968] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T02:29:31.622 [DEBUG] [Thread-138968] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:29:31.622 [DEBUG] [Thread-138968] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T02:29:31.622 [DEBUG] [Thread-138968] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:29:31.622 [DEBUG] [Thread-138968] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:29:31.622 [DEBUG] [Thread-138968] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:29:31.622 [DEBUG] [Thread-138968] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:29:31.622 [DEBUG] [Thread-138968] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:29:31.623 [DEBUG] [Thread-138968] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:29:31.623 [DEBUG] [Thread-138968] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:29:31.623 [DEBUG] [Thread-138968] [transport.py] [_log()] client lang: <none>
2026-01-01T02:29:31.623 [DEBUG] [Thread-138968] [transport.py] [_log()] server lang: <none>
2026-01-01T02:29:31.623 [DEBUG] [Thread-138968] [transport.py] [_log()] kex follows: False
2026-01-01T02:29:31.623 [DEBUG] [Thread-138968] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:29:31.623 [DEBUG] [Thread-138968] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:29:31.623 [DEBUG] [Thread-138968] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:29:31.623 [DEBUG] [Thread-138968] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:29:31.623 [DEBUG] [Thread-138968] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:29:31.623 [DEBUG] [Thread-138968] [transport.py] [_log()] Compression: none
2026-01-01T02:29:31.623 [DEBUG] [Thread-138968] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:29:31.639 [DEBUG] [Thread-138968] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:29:31.639 [DEBUG] [Thread-138968] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:29:31.640 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T02:29:31.640 [DEBUG] [Thread-138968] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T02:29:31.640 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:29:31.642 [DEBUG] [Thread-138968] [transport.py] [_log()] userauth is OK
2026-01-01T02:29:31.642 [DEBUG] [Thread-138968] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:29:31.642 [DEBUG] [Thread-138968] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:29:31.642 [DEBUG] [Thread-138968] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T02:29:31.642 [DEBUG] [Thread-138968] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:29:31.652 [INFO] [Thread-138968] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:29:31.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:29:32.435 [DEBUG] [Thread-138968] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:29:32.435 [DEBUG] [Thread-138968] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:29:32.436 [DEBUG] [Thread-138968] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T02:29:32.476 [DEBUG] [Thread-138968] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:29:32.476 [DEBUG] [Thread-138968] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:29:32.480 [DEBUG] [Thread-138968] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:29:32.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:29:32.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T02:29:32.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T02:29:32.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T02:29:32.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:29:32.505 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T02:29:32.505 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:29:32.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:29:32.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T02:29:32.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.020270 -999.00  +13.30   7.82     82  +10.40 1 1 1 2 1     0    0 -999.00 0.00 ZNESW 4.7 7.8 205.2 12.6 14.1 -21.0 13.9 -20.7 13.7 -19.0 14.0 -20.1
2026-01-01T02:29:32.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T02:29:32.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T02:29:32.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.020270
2026-01-01T02:29:32.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T02:29:32.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T02:29:32.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T02:29:32.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T02:29:32.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T02:29:32.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T02:29:22', tmtdew=3.37, humidity=80.02, cloud=0.0, wind=11.4, temperature=13.19, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T02:29:22', seeing=0.87, atlas_timestamp='2026-01-01T00:29:11.328', atlas_cloud=1, atlas_rain=1, zp_data=[0.00975000000000037, 0.04824999999999946, 0.08525000000000027, 0.04449999999999932, 0.06049999999999933, 0.07125000000000092, 0.09699999999999953, 0.07525000000000048, 0.11349999999999838, 0.13000000000000078, 0.03524999999999956, 0.07950000000000124, 0.12400000000000055, 0.11875000000000036, 0.07249999999999801, 0.07399999999999984, 0.17575000000000074, 0.20350000000000001, 0.13199999999999967, 0.14624999999999844, 0.18249999999999922, 0.11074999999999946, 0.07624999999999993, 0.10275000000000034, 0.17099999999999937, 0.22250000000000014, 0.16174999999999962, 0.21850000000000058, 0.4710000000000001, 0.28300000000000125, 0.22800000000000153, 0.29300000000000104, 0.16474999999999795], zp_timestamp='2026-01-01T00:26:00')
2026-01-01T02:29:32.508 [DEBUG] [Thread-138968] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:29:32.582 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T02:29:32.593 [DEBUG] [Thread-138971] [transport.py] [_log()] starting thread (client mode): 0xb6ba33d0
2026-01-01T02:29:32.594 [DEBUG] [Thread-138971] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:29:32.609 [DEBUG] [Thread-138971] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T02:29:32.609 [INFO] [Thread-138971] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T02:29:32.617 [DEBUG] [Thread-138971] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:29:32.617 [DEBUG] [Thread-138971] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T02:29:32.617 [DEBUG] [Thread-138971] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:29:32.617 [DEBUG] [Thread-138971] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:29:32.617 [DEBUG] [Thread-138971] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:29:32.617 [DEBUG] [Thread-138971] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:29:32.617 [DEBUG] [Thread-138971] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:29:32.617 [DEBUG] [Thread-138971] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:29:32.617 [DEBUG] [Thread-138971] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:29:32.617 [DEBUG] [Thread-138971] [transport.py] [_log()] client lang: <none>
2026-01-01T02:29:32.618 [DEBUG] [Thread-138971] [transport.py] [_log()] server lang: <none>
2026-01-01T02:29:32.618 [DEBUG] [Thread-138971] [transport.py] [_log()] kex follows: False
2026-01-01T02:29:32.618 [DEBUG] [Thread-138971] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:29:32.618 [DEBUG] [Thread-138971] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:29:32.618 [DEBUG] [Thread-138971] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:29:32.618 [DEBUG] [Thread-138971] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:29:32.618 [DEBUG] [Thread-138971] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:29:32.618 [DEBUG] [Thread-138971] [transport.py] [_log()] Compression: none
2026-01-01T02:29:32.618 [DEBUG] [Thread-138971] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:29:32.677 [DEBUG] [Thread-138971] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:29:32.678 [DEBUG] [Thread-138971] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:29:32.678 [DEBUG] [Thread-138971] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T02:29:32.679 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T02:29:32.679 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:29:32.733 [DEBUG] [Thread-138971] [transport.py] [_log()] userauth is OK
2026-01-01T02:29:32.733 [DEBUG] [Thread-138971] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:29:32.733 [DEBUG] [Thread-138971] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:29:32.734 [DEBUG] [Thread-138971] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T02:29:32.734 [DEBUG] [Thread-138971] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:29:32.753 [INFO] [Thread-138971] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:29:32.753 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T02:29:32.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:29:33.576 [DEBUG] [Thread-138971] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:29:33.576 [DEBUG] [Thread-138971] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:29:33.624 [DEBUG] [Thread-138971] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:29:33.625 [DEBUG] [Thread-138971] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:29:33.633 [DEBUG] [Thread-138971] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:29:33.642 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:29:33.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T02:29:33.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T02:29:33.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:29:33.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:29:33.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:29:33.667 [DEBUG] [Thread-138971] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:29:43.264 [DEBUG] [Thread-138973 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:29:58.316 [DEBUG] [Thread-138974 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:30:03.104 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:30:03.105 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:30:03.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T02:30:03.690 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T02:30:03.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T02:30:04.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 2, 29, 54), 3.3, 80.14, 0.0, 12.05, 13.14, 0, 1, 0, 2, 0, 0),)
2026-01-01T02:30:04.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 02:29:54
2026-01-01T02:30:04.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T02:30:04.692 [DEBUG] [Thread-138975] [transport.py] [_log()] starting thread (client mode): 0xb6b03730
2026-01-01T02:30:04.692 [DEBUG] [Thread-138975] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:30:04.712 [DEBUG] [Thread-138975] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T02:30:04.713 [INFO] [Thread-138975] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T02:30:04.714 [DEBUG] [Thread-138975] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:30:04.714 [DEBUG] [Thread-138975] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T02:30:04.714 [DEBUG] [Thread-138975] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:30:04.714 [DEBUG] [Thread-138975] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:30:04.714 [DEBUG] [Thread-138975] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:30:04.714 [DEBUG] [Thread-138975] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:30:04.714 [DEBUG] [Thread-138975] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:30:04.714 [DEBUG] [Thread-138975] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:30:04.714 [DEBUG] [Thread-138975] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:30:04.714 [DEBUG] [Thread-138975] [transport.py] [_log()] client lang: <none>
2026-01-01T02:30:04.714 [DEBUG] [Thread-138975] [transport.py] [_log()] server lang: <none>
2026-01-01T02:30:04.714 [DEBUG] [Thread-138975] [transport.py] [_log()] kex follows: False
2026-01-01T02:30:04.714 [DEBUG] [Thread-138975] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:30:04.714 [DEBUG] [Thread-138975] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:30:04.714 [DEBUG] [Thread-138975] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:30:04.714 [DEBUG] [Thread-138975] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:30:04.714 [DEBUG] [Thread-138975] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:30:04.714 [DEBUG] [Thread-138975] [transport.py] [_log()] Compression: none
2026-01-01T02:30:04.714 [DEBUG] [Thread-138975] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:30:04.722 [DEBUG] [Thread-138975] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:30:04.723 [DEBUG] [Thread-138975] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:30:04.723 [DEBUG] [Thread-138975] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T02:30:04.723 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T02:30:04.724 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:30:04.724 [DEBUG] [Thread-138975] [transport.py] [_log()] userauth is OK
2026-01-01T02:30:04.724 [DEBUG] [Thread-138975] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:30:04.725 [DEBUG] [Thread-138975] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:30:04.725 [DEBUG] [Thread-138975] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T02:30:04.725 [DEBUG] [Thread-138975] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:30:04.746 [INFO] [Thread-138975] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:30:04.747 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:30:04.982 [DEBUG] [Thread-138977 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:30:07.875 [DEBUG] [Thread-138975] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:30:07.875 [DEBUG] [Thread-138975] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:30:07.876 [DEBUG] [Thread-138975] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T02:30:07.916 [DEBUG] [Thread-138975] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:30:07.917 [DEBUG] [Thread-138975] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:30:07.919 [DEBUG] [Thread-138975] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:30:07.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:30:07.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T02:30:07.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T02:30:07.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T02:30:07.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:30:07.961 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T02:30:07.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:30:07.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:30:07.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T02:30:07.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.020618 -999.00  +13.30   6.60     83  +10.50 1 1 1 2 1     0    0 -999.00 0.00 ZNESW 9.9 6.6 185.0 9.7 14.1 -20.9 13.9 -20.6 13.7 -19.1 14.0 -20.1
2026-01-01T02:30:07.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T02:30:07.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T02:30:07.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.020618
2026-01-01T02:30:07.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T02:30:07.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T02:30:07.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T02:30:07.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T02:30:07.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T02:30:07.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T02:29:54', tmtdew=3.3, humidity=80.14, cloud=0.0, wind=12.05, temperature=13.14, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T02:29:54', seeing=0.88, atlas_timestamp='2026-01-01T00:29:41.395', atlas_cloud=1, atlas_rain=1, zp_data=[0.00975000000000037, 0.04824999999999946, 0.08525000000000027, 0.04449999999999932, 0.06049999999999933, 0.07125000000000092, 0.09699999999999953, 0.07525000000000048, 0.11349999999999838, 0.13000000000000078, 0.03524999999999956, 0.07950000000000124, 0.12400000000000055, 0.11875000000000036, 0.07249999999999801, 0.07399999999999984, 0.17575000000000074, 0.20350000000000001, 0.13199999999999967, 0.14624999999999844, 0.18249999999999922, 0.11074999999999946, 0.07624999999999993, 0.10275000000000034, 0.17099999999999937, 0.22250000000000014, 0.16174999999999962, 0.21850000000000058, 0.4710000000000001, 0.28300000000000125, 0.22800000000000153, 0.29300000000000104, 0.16474999999999795], zp_timestamp='2026-01-01T00:26:00')
2026-01-01T02:30:07.962 [DEBUG] [Thread-138975] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:30:08.034 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T02:30:08.045 [DEBUG] [Thread-138979] [transport.py] [_log()] starting thread (client mode): 0xb1744790
2026-01-01T02:30:08.046 [DEBUG] [Thread-138979] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:30:08.061 [DEBUG] [Thread-138979] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T02:30:08.061 [INFO] [Thread-138979] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T02:30:08.075 [DEBUG] [Thread-138979] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:30:08.075 [DEBUG] [Thread-138979] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T02:30:08.075 [DEBUG] [Thread-138979] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:30:08.075 [DEBUG] [Thread-138979] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:30:08.075 [DEBUG] [Thread-138979] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:30:08.075 [DEBUG] [Thread-138979] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:30:08.075 [DEBUG] [Thread-138979] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:30:08.075 [DEBUG] [Thread-138979] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:30:08.075 [DEBUG] [Thread-138979] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:30:08.075 [DEBUG] [Thread-138979] [transport.py] [_log()] client lang: <none>
2026-01-01T02:30:08.075 [DEBUG] [Thread-138979] [transport.py] [_log()] server lang: <none>
2026-01-01T02:30:08.075 [DEBUG] [Thread-138979] [transport.py] [_log()] kex follows: False
2026-01-01T02:30:08.075 [DEBUG] [Thread-138979] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:30:08.075 [DEBUG] [Thread-138979] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:30:08.075 [DEBUG] [Thread-138979] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:30:08.075 [DEBUG] [Thread-138979] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:30:08.075 [DEBUG] [Thread-138979] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:30:08.075 [DEBUG] [Thread-138979] [transport.py] [_log()] Compression: none
2026-01-01T02:30:08.075 [DEBUG] [Thread-138979] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:30:08.131 [DEBUG] [Thread-138979] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:30:08.131 [DEBUG] [Thread-138979] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:30:08.131 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T02:30:08.131 [DEBUG] [Thread-138979] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T02:30:08.131 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:30:08.188 [DEBUG] [Thread-138979] [transport.py] [_log()] userauth is OK
2026-01-01T02:30:08.188 [DEBUG] [Thread-138979] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:30:08.188 [DEBUG] [Thread-138979] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:30:08.188 [DEBUG] [Thread-138979] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T02:30:08.188 [DEBUG] [Thread-138979] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:30:08.202 [INFO] [Thread-138979] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:30:08.202 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T02:30:08.202 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:30:09.107 [DEBUG] [Thread-138979] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:30:09.107 [DEBUG] [Thread-138979] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:30:09.155 [DEBUG] [Thread-138979] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:30:09.155 [DEBUG] [Thread-138979] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:30:09.164 [DEBUG] [Thread-138979] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:30:09.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:30:09.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T02:30:09.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T02:30:09.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:30:09.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:30:09.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:30:09.196 [DEBUG] [Thread-138979] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:30:13.347 [DEBUG] [Thread-138981 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:30:28.397 [DEBUG] [Thread-138982 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:30:39.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T02:30:39.218 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T02:30:39.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T02:30:39.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 2, 30, 26), 3.28, 80.25, 0.0, 11.36, 13.16, 0, 1, 0, 2, 0, 0),)
2026-01-01T02:30:39.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 02:30:26
2026-01-01T02:30:40.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T02:30:40.187 [DEBUG] [Thread-138983] [transport.py] [_log()] starting thread (client mode): 0xb95f22f0
2026-01-01T02:30:40.187 [DEBUG] [Thread-138983] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:30:40.208 [DEBUG] [Thread-138983] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T02:30:40.208 [INFO] [Thread-138983] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T02:30:40.211 [DEBUG] [Thread-138983] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:30:40.211 [DEBUG] [Thread-138983] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T02:30:40.211 [DEBUG] [Thread-138983] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:30:40.211 [DEBUG] [Thread-138983] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:30:40.211 [DEBUG] [Thread-138983] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:30:40.212 [DEBUG] [Thread-138983] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:30:40.212 [DEBUG] [Thread-138983] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:30:40.212 [DEBUG] [Thread-138983] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:30:40.212 [DEBUG] [Thread-138983] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:30:40.212 [DEBUG] [Thread-138983] [transport.py] [_log()] client lang: <none>
2026-01-01T02:30:40.212 [DEBUG] [Thread-138983] [transport.py] [_log()] server lang: <none>
2026-01-01T02:30:40.212 [DEBUG] [Thread-138983] [transport.py] [_log()] kex follows: False
2026-01-01T02:30:40.212 [DEBUG] [Thread-138983] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:30:40.212 [DEBUG] [Thread-138983] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:30:40.212 [DEBUG] [Thread-138983] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:30:40.212 [DEBUG] [Thread-138983] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:30:40.212 [DEBUG] [Thread-138983] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:30:40.212 [DEBUG] [Thread-138983] [transport.py] [_log()] Compression: none
2026-01-01T02:30:40.212 [DEBUG] [Thread-138983] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:30:40.230 [DEBUG] [Thread-138983] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:30:40.231 [DEBUG] [Thread-138983] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:30:40.231 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T02:30:40.232 [DEBUG] [Thread-138983] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T02:30:40.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:30:40.234 [DEBUG] [Thread-138983] [transport.py] [_log()] userauth is OK
2026-01-01T02:30:40.234 [DEBUG] [Thread-138983] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:30:40.234 [DEBUG] [Thread-138983] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:30:40.234 [DEBUG] [Thread-138983] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T02:30:40.235 [DEBUG] [Thread-138983] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:30:40.252 [INFO] [Thread-138983] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:30:40.253 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:30:41.071 [DEBUG] [Thread-138983] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:30:41.071 [DEBUG] [Thread-138983] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:30:41.072 [DEBUG] [Thread-138983] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T02:30:41.112 [DEBUG] [Thread-138983] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:30:41.112 [DEBUG] [Thread-138983] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:30:41.117 [DEBUG] [Thread-138983] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:30:41.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:30:41.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T02:30:41.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T02:30:41.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T02:30:41.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:30:41.133 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T02:30:41.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:30:41.134 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:30:41.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T02:30:41.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.020965 -999.00  +13.30   5.60     83  +10.50 1 1 1 2 1     0    0 2.84 -7.35 ZNESW 5.9 5.6 213.9 15.5 14.1 -21.0 13.9 -20.6 13.7 -19.1 14.0 -20.1
2026-01-01T02:30:41.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T02:30:41.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T02:30:41.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.020965
2026-01-01T02:30:41.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T02:30:41.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T02:30:41.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T02:30:41.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T02:30:41.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T02:30:41.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T02:30:26', tmtdew=3.28, humidity=80.25, cloud=0.0, wind=11.36, temperature=13.16, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T02:30:26', seeing=0.8, atlas_timestamp='2026-01-01T00:30:11.376', atlas_cloud=1, atlas_rain=1, zp_data=[0.00975000000000037, 0.04824999999999946, 0.08525000000000027, 0.04449999999999932, 0.06049999999999933, 0.07125000000000092, 0.09699999999999953, 0.07525000000000048, 0.11349999999999838, 0.13000000000000078, 0.03524999999999956, 0.07950000000000124, 0.12400000000000055, 0.11875000000000036, 0.07249999999999801, 0.07399999999999984, 0.17575000000000074, 0.20350000000000001, 0.13199999999999967, 0.14624999999999844, 0.18249999999999922, 0.11074999999999946, 0.07624999999999993, 0.10275000000000034, 0.17099999999999937, 0.22250000000000014, 0.16174999999999962, 0.21850000000000058, 0.4710000000000001, 0.28300000000000125, 0.22800000000000153, 0.29300000000000104, 0.16474999999999795], zp_timestamp='2026-01-01T00:26:00')
2026-01-01T02:30:41.136 [DEBUG] [Thread-138983] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:30:41.227 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T02:30:41.238 [DEBUG] [Thread-138986] [transport.py] [_log()] starting thread (client mode): 0xb6b02b90
2026-01-01T02:30:41.238 [DEBUG] [Thread-138986] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:30:41.253 [DEBUG] [Thread-138986] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T02:30:41.253 [INFO] [Thread-138986] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T02:30:41.261 [DEBUG] [Thread-138986] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:30:41.261 [DEBUG] [Thread-138986] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T02:30:41.261 [DEBUG] [Thread-138986] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:30:41.261 [DEBUG] [Thread-138986] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:30:41.261 [DEBUG] [Thread-138986] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:30:41.261 [DEBUG] [Thread-138986] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:30:41.261 [DEBUG] [Thread-138986] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:30:41.261 [DEBUG] [Thread-138986] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:30:41.261 [DEBUG] [Thread-138986] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:30:41.261 [DEBUG] [Thread-138986] [transport.py] [_log()] client lang: <none>
2026-01-01T02:30:41.261 [DEBUG] [Thread-138986] [transport.py] [_log()] server lang: <none>
2026-01-01T02:30:41.261 [DEBUG] [Thread-138986] [transport.py] [_log()] kex follows: False
2026-01-01T02:30:41.261 [DEBUG] [Thread-138986] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:30:41.261 [DEBUG] [Thread-138986] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:30:41.261 [DEBUG] [Thread-138986] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:30:41.261 [DEBUG] [Thread-138986] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:30:41.261 [DEBUG] [Thread-138986] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:30:41.261 [DEBUG] [Thread-138986] [transport.py] [_log()] Compression: none
2026-01-01T02:30:41.261 [DEBUG] [Thread-138986] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:30:41.321 [DEBUG] [Thread-138986] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:30:41.321 [DEBUG] [Thread-138986] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:30:41.322 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T02:30:41.322 [DEBUG] [Thread-138986] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T02:30:41.323 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:30:41.376 [DEBUG] [Thread-138986] [transport.py] [_log()] userauth is OK
2026-01-01T02:30:41.377 [DEBUG] [Thread-138986] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:30:41.377 [DEBUG] [Thread-138986] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:30:41.377 [DEBUG] [Thread-138986] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T02:30:41.377 [DEBUG] [Thread-138986] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:30:41.401 [INFO] [Thread-138986] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:30:41.401 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T02:30:41.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:30:42.252 [DEBUG] [Thread-138986] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:30:42.252 [DEBUG] [Thread-138986] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:30:42.300 [DEBUG] [Thread-138986] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:30:42.300 [DEBUG] [Thread-138986] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:30:42.309 [DEBUG] [Thread-138986] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:30:42.318 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:30: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')
2026-01-01T02:30: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
2026-01-01T02:30:42.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:30:42.336 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:30:42.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:30:42.345 [DEBUG] [Thread-138986] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:30:43.429 [DEBUG] [Thread-138988 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:30:58.474 [DEBUG] [Thread-138989 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:31:03.304 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:31:03.306 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:31:05.060 [DEBUG] [Thread-138990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:31:12.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T02:31:12.368 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T02:31:12.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T02:31:13.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 2, 30, 58), 3.27, 80.32, 0.0, 13.29, 13.13, 0, 1, 0, 2, 0, 0),)
2026-01-01T02:31:13.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 02:30:58
2026-01-01T02:31:13.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T02:31:13.357 [DEBUG] [Thread-138991] [transport.py] [_log()] starting thread (client mode): 0xb95f0f10
2026-01-01T02:31:13.357 [DEBUG] [Thread-138991] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:31:13.376 [DEBUG] [Thread-138991] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T02:31:13.376 [INFO] [Thread-138991] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T02:31:13.380 [DEBUG] [Thread-138991] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:31:13.380 [DEBUG] [Thread-138991] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T02:31:13.380 [DEBUG] [Thread-138991] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:31:13.380 [DEBUG] [Thread-138991] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:31:13.380 [DEBUG] [Thread-138991] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:31:13.380 [DEBUG] [Thread-138991] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:31:13.380 [DEBUG] [Thread-138991] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:31:13.380 [DEBUG] [Thread-138991] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:31:13.380 [DEBUG] [Thread-138991] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:31:13.380 [DEBUG] [Thread-138991] [transport.py] [_log()] client lang: <none>
2026-01-01T02:31:13.380 [DEBUG] [Thread-138991] [transport.py] [_log()] server lang: <none>
2026-01-01T02:31:13.380 [DEBUG] [Thread-138991] [transport.py] [_log()] kex follows: False
2026-01-01T02:31:13.380 [DEBUG] [Thread-138991] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:31:13.380 [DEBUG] [Thread-138991] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:31:13.380 [DEBUG] [Thread-138991] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:31:13.381 [DEBUG] [Thread-138991] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:31:13.381 [DEBUG] [Thread-138991] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:31:13.381 [DEBUG] [Thread-138991] [transport.py] [_log()] Compression: none
2026-01-01T02:31:13.381 [DEBUG] [Thread-138991] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:31:13.398 [DEBUG] [Thread-138991] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:31:13.399 [DEBUG] [Thread-138991] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:31:13.399 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T02:31:13.400 [DEBUG] [Thread-138991] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T02:31:13.400 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:31:13.402 [DEBUG] [Thread-138991] [transport.py] [_log()] userauth is OK
2026-01-01T02:31:13.402 [DEBUG] [Thread-138991] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:31:13.402 [DEBUG] [Thread-138991] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:31:13.402 [DEBUG] [Thread-138991] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T02:31:13.402 [DEBUG] [Thread-138991] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:31:13.425 [INFO] [Thread-138991] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:31:13.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:31:13.509 [DEBUG] [Thread-138993 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:31:14.073 [DEBUG] [Thread-138991] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:31:14.073 [DEBUG] [Thread-138991] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:31:14.073 [DEBUG] [Thread-138991] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T02:31:14.114 [DEBUG] [Thread-138991] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:31:14.114 [DEBUG] [Thread-138991] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:31:14.117 [DEBUG] [Thread-138991] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:31:14.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:31:14.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T02:31:14.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T02:31:14.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T02:31:14.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:31:14.141 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T02:31:14.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:31:14.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:31:14.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T02:31:14.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.021312 -999.00  +13.30   6.06     83  +10.50 1 1 1 2 1     0    0 2.84 -9.21 ZNESW 5.0 6.1 233.6 11.1 14.0 -20.9 13.9 -20.5 13.7 -18.9 13.9 -20.2
2026-01-01T02:31:14.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T02:31:14.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T02:31:14.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.021312
2026-01-01T02:31:14.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T02:31:14.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T02:31:14.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T02:31:14.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T02:31:14.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T02:31:14.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T02:30:58', tmtdew=3.27, humidity=80.32, cloud=0.0, wind=13.29, temperature=13.13, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T02:30:58', seeing=0.94, atlas_timestamp='2026-01-01T00:30:41.357', atlas_cloud=1, atlas_rain=1, zp_data=[0.038750000000000284, 0.02325000000000088, 0.0832499999999996, 0.06649999999999956, 0.06949999999999967, 0.10625000000000107, 0.0860000000000003, 0.06825000000000081, 0.12399999999999878, 0.10599999999999987, 0.052250000000000796, 0.12400000000000055, 0.16699999999999982, 0.16724999999999923, 0.07049999999999912, 0.07150000000000034, 0.08174999999999955, 0.17349999999999888, 0.11499999999999844, 0.15424999999999933, 0.19799999999999862, 0.19874999999999865, 0.10625000000000107, 0.0962499999999995, 0.1269999999999989, 0.21149999999999913, 0.16225000000000023, 0.1695000000000011, 0.25400000000000045, 0.35300000000000065, 0.1850000000000005, 0.2190000000000012, 0.14324999999999832], zp_timestamp='2026-01-01T00:30:00')
2026-01-01T02:31:14.143 [DEBUG] [Thread-138991] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:31:14.227 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T02:31:14.239 [DEBUG] [Thread-138995] [transport.py] [_log()] starting thread (client mode): 0xb6bbcbb0
2026-01-01T02:31:14.239 [DEBUG] [Thread-138995] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:31:14.256 [DEBUG] [Thread-138995] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T02:31:14.257 [INFO] [Thread-138995] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T02:31:14.264 [DEBUG] [Thread-138995] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:31:14.264 [DEBUG] [Thread-138995] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T02:31:14.264 [DEBUG] [Thread-138995] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:31:14.264 [DEBUG] [Thread-138995] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:31:14.264 [DEBUG] [Thread-138995] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:31:14.265 [DEBUG] [Thread-138995] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:31:14.265 [DEBUG] [Thread-138995] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:31:14.265 [DEBUG] [Thread-138995] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:31:14.265 [DEBUG] [Thread-138995] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:31:14.265 [DEBUG] [Thread-138995] [transport.py] [_log()] client lang: <none>
2026-01-01T02:31:14.265 [DEBUG] [Thread-138995] [transport.py] [_log()] server lang: <none>
2026-01-01T02:31:14.265 [DEBUG] [Thread-138995] [transport.py] [_log()] kex follows: False
2026-01-01T02:31:14.265 [DEBUG] [Thread-138995] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:31:14.265 [DEBUG] [Thread-138995] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:31:14.265 [DEBUG] [Thread-138995] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:31:14.265 [DEBUG] [Thread-138995] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:31:14.265 [DEBUG] [Thread-138995] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:31:14.265 [DEBUG] [Thread-138995] [transport.py] [_log()] Compression: none
2026-01-01T02:31:14.265 [DEBUG] [Thread-138995] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:31:14.325 [DEBUG] [Thread-138995] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:31:14.325 [DEBUG] [Thread-138995] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:31:14.326 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T02:31:14.326 [DEBUG] [Thread-138995] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T02:31:14.327 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:31:14.380 [DEBUG] [Thread-138995] [transport.py] [_log()] userauth is OK
2026-01-01T02:31:14.381 [DEBUG] [Thread-138995] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:31:14.381 [DEBUG] [Thread-138995] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:31:14.381 [DEBUG] [Thread-138995] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T02:31:14.381 [DEBUG] [Thread-138995] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:31:14.399 [INFO] [Thread-138995] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:31:14.399 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T02:31:14.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:31:15.215 [DEBUG] [Thread-138995] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:31:15.216 [DEBUG] [Thread-138995] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:31:15.264 [DEBUG] [Thread-138995] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:31:15.264 [DEBUG] [Thread-138995] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:31:15.273 [DEBUG] [Thread-138995] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:31:15.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:31: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')
2026-01-01T02:31:15.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T02:31:15.301 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:31:15.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:31:15.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:31:15.310 [DEBUG] [Thread-138995] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:31:28.540 [DEBUG] [Thread-138997 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:31:43.580 [DEBUG] [Thread-138998 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:31:45.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T02:31:45.333 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T02:31:45.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T02:31:46.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 2, 31, 30), 3.25, 80.4, 0.0, 13.92, 13.11, 0, 1, 0, 2, 0, 0),)
2026-01-01T02:31:46.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 02:31:30
2026-01-01T02:31:46.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T02:31:46.341 [DEBUG] [Thread-138999] [transport.py] [_log()] starting thread (client mode): 0xb17948e0
2026-01-01T02:31:46.341 [DEBUG] [Thread-138999] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:31:46.361 [DEBUG] [Thread-138999] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T02:31:46.361 [INFO] [Thread-138999] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T02:31:46.364 [DEBUG] [Thread-138999] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:31:46.364 [DEBUG] [Thread-138999] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T02:31:46.364 [DEBUG] [Thread-138999] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:31:46.364 [DEBUG] [Thread-138999] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:31:46.364 [DEBUG] [Thread-138999] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:31:46.365 [DEBUG] [Thread-138999] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:31:46.365 [DEBUG] [Thread-138999] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:31:46.365 [DEBUG] [Thread-138999] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:31:46.365 [DEBUG] [Thread-138999] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:31:46.365 [DEBUG] [Thread-138999] [transport.py] [_log()] client lang: <none>
2026-01-01T02:31:46.365 [DEBUG] [Thread-138999] [transport.py] [_log()] server lang: <none>
2026-01-01T02:31:46.365 [DEBUG] [Thread-138999] [transport.py] [_log()] kex follows: False
2026-01-01T02:31:46.365 [DEBUG] [Thread-138999] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:31:46.365 [DEBUG] [Thread-138999] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:31:46.365 [DEBUG] [Thread-138999] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:31:46.365 [DEBUG] [Thread-138999] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:31:46.365 [DEBUG] [Thread-138999] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:31:46.365 [DEBUG] [Thread-138999] [transport.py] [_log()] Compression: none
2026-01-01T02:31:46.366 [DEBUG] [Thread-138999] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:31:46.384 [DEBUG] [Thread-138999] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:31:46.384 [DEBUG] [Thread-138999] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:31:46.385 [DEBUG] [Thread-138999] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T02:31:46.385 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T02:31:46.386 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:31:46.387 [DEBUG] [Thread-138999] [transport.py] [_log()] userauth is OK
2026-01-01T02:31:46.387 [DEBUG] [Thread-138999] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:31:46.387 [DEBUG] [Thread-138999] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:31:46.388 [DEBUG] [Thread-138999] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T02:31:46.388 [DEBUG] [Thread-138999] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:31:46.411 [INFO] [Thread-138999] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:31:46.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:31:47.068 [DEBUG] [Thread-138999] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:31:47.069 [DEBUG] [Thread-138999] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:31:47.069 [DEBUG] [Thread-138999] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T02:31:47.110 [DEBUG] [Thread-138999] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:31:47.110 [DEBUG] [Thread-138999] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:31:47.114 [DEBUG] [Thread-138999] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:31:47.126 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:31:47.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T02:31:47.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T02:31:47.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T02:31:47.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:31:47.138 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T02:31:47.138 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:31:47.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:31:47.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T02:31:47.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.021659 -999.00  +13.30   7.18     83  +10.50 1 1 1 2 1     0    0 2.70 -11.15 ZNESW 5.0 7.2 199.0 12.5 14.0 -20.9 13.9 -20.5 13.7 -19.0 13.9 -20.0
2026-01-01T02:31:47.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T02:31:47.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T02:31:47.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.021659
2026-01-01T02:31:47.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T02:31:47.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T02:31:47.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T02:31:47.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T02:31:47.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T02:31:47.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T02:31:30', tmtdew=3.25, humidity=80.4, cloud=0.0, wind=13.92, temperature=13.11, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T02:31:31', seeing=1.02, atlas_timestamp='2026-01-01T00:31:11.338', atlas_cloud=1, atlas_rain=1, zp_data=[0.038750000000000284, 0.02325000000000088, 0.0832499999999996, 0.06649999999999956, 0.06949999999999967, 0.10625000000000107, 0.0860000000000003, 0.06825000000000081, 0.12399999999999878, 0.10599999999999987, 0.052250000000000796, 0.12400000000000055, 0.16699999999999982, 0.16724999999999923, 0.07049999999999912, 0.07150000000000034, 0.08174999999999955, 0.17349999999999888, 0.11499999999999844, 0.15424999999999933, 0.19799999999999862, 0.19874999999999865, 0.10625000000000107, 0.0962499999999995, 0.1269999999999989, 0.21149999999999913, 0.16225000000000023, 0.1695000000000011, 0.25400000000000045, 0.35300000000000065, 0.1850000000000005, 0.2190000000000012, 0.14324999999999832], zp_timestamp='2026-01-01T00:30:00')
2026-01-01T02:31:47.142 [DEBUG] [Thread-138999] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:31:47.215 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T02:31:47.225 [DEBUG] [Thread-139002] [transport.py] [_log()] starting thread (client mode): 0xb6ba2c50
2026-01-01T02:31:47.225 [DEBUG] [Thread-139002] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:31:47.240 [DEBUG] [Thread-139002] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T02:31:47.241 [INFO] [Thread-139002] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T02:31:47.248 [DEBUG] [Thread-139002] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:31:47.248 [DEBUG] [Thread-139002] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T02:31:47.249 [DEBUG] [Thread-139002] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:31:47.249 [DEBUG] [Thread-139002] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:31:47.249 [DEBUG] [Thread-139002] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:31:47.249 [DEBUG] [Thread-139002] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:31:47.249 [DEBUG] [Thread-139002] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:31:47.249 [DEBUG] [Thread-139002] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:31:47.249 [DEBUG] [Thread-139002] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:31:47.249 [DEBUG] [Thread-139002] [transport.py] [_log()] client lang: <none>
2026-01-01T02:31:47.250 [DEBUG] [Thread-139002] [transport.py] [_log()] server lang: <none>
2026-01-01T02:31:47.250 [DEBUG] [Thread-139002] [transport.py] [_log()] kex follows: False
2026-01-01T02:31:47.250 [DEBUG] [Thread-139002] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:31:47.250 [DEBUG] [Thread-139002] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:31:47.250 [DEBUG] [Thread-139002] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:31:47.250 [DEBUG] [Thread-139002] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:31:47.250 [DEBUG] [Thread-139002] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:31:47.250 [DEBUG] [Thread-139002] [transport.py] [_log()] Compression: none
2026-01-01T02:31:47.251 [DEBUG] [Thread-139002] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:31:47.309 [DEBUG] [Thread-139002] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:31:47.310 [DEBUG] [Thread-139002] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:31:47.310 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T02:31:47.311 [DEBUG] [Thread-139002] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T02:31:47.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:31:47.365 [DEBUG] [Thread-139002] [transport.py] [_log()] userauth is OK
2026-01-01T02:31:47.365 [DEBUG] [Thread-139002] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:31:47.365 [DEBUG] [Thread-139002] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:31:47.366 [DEBUG] [Thread-139002] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T02:31:47.366 [DEBUG] [Thread-139002] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:31:47.385 [INFO] [Thread-139002] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:31:47.385 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T02:31:47.386 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:31:48.213 [DEBUG] [Thread-139002] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:31:48.214 [DEBUG] [Thread-139002] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:31:48.261 [DEBUG] [Thread-139002] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:31:48.261 [DEBUG] [Thread-139002] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:31:48.271 [DEBUG] [Thread-139002] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:31:48.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:31: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')
2026-01-01T02:31: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
2026-01-01T02:31:48.297 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:31:48.297 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:31:48.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:31:48.305 [DEBUG] [Thread-139002] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:31:58.617 [DEBUG] [Thread-139004 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:32:03.505 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:32:03.505 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:32:05.112 [DEBUG] [Thread-139005 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:32:13.676 [DEBUG] [Thread-139006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:32:18.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T02:32:18.317 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T02:32: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
2026-01-01T02:32:19.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 2, 32, 2), 3.24, 80.47, 0.0, 12.46, 13.13, 0, 1, 0, 2, 0, 0),)
2026-01-01T02:32:19.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 02:32:02
2026-01-01T02:32:19.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T02:32:19.287 [DEBUG] [Thread-139007] [transport.py] [_log()] starting thread (client mode): 0xb6b283d0
2026-01-01T02:32:19.287 [DEBUG] [Thread-139007] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:32:19.307 [DEBUG] [Thread-139007] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T02:32:19.307 [INFO] [Thread-139007] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T02:32:19.310 [DEBUG] [Thread-139007] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:32:19.311 [DEBUG] [Thread-139007] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T02:32:19.311 [DEBUG] [Thread-139007] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:32:19.311 [DEBUG] [Thread-139007] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:32:19.311 [DEBUG] [Thread-139007] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:32:19.311 [DEBUG] [Thread-139007] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:32:19.311 [DEBUG] [Thread-139007] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:32:19.311 [DEBUG] [Thread-139007] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:32:19.311 [DEBUG] [Thread-139007] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:32:19.311 [DEBUG] [Thread-139007] [transport.py] [_log()] client lang: <none>
2026-01-01T02:32:19.311 [DEBUG] [Thread-139007] [transport.py] [_log()] server lang: <none>
2026-01-01T02:32:19.311 [DEBUG] [Thread-139007] [transport.py] [_log()] kex follows: False
2026-01-01T02:32:19.311 [DEBUG] [Thread-139007] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:32:19.311 [DEBUG] [Thread-139007] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:32:19.311 [DEBUG] [Thread-139007] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:32:19.311 [DEBUG] [Thread-139007] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:32:19.311 [DEBUG] [Thread-139007] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:32:19.311 [DEBUG] [Thread-139007] [transport.py] [_log()] Compression: none
2026-01-01T02:32:19.311 [DEBUG] [Thread-139007] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:32:19.326 [DEBUG] [Thread-139007] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:32:19.326 [DEBUG] [Thread-139007] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:32:19.326 [DEBUG] [Thread-139007] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T02:32:19.326 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T02:32:19.326 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:32:19.368 [DEBUG] [Thread-139007] [transport.py] [_log()] userauth is OK
2026-01-01T02:32:19.369 [DEBUG] [Thread-139007] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:32:19.369 [DEBUG] [Thread-139007] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:32:19.369 [DEBUG] [Thread-139007] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T02:32:19.369 [DEBUG] [Thread-139007] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:32:19.406 [INFO] [Thread-139007] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:32:19.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:32:20.059 [DEBUG] [Thread-139007] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:32:20.060 [DEBUG] [Thread-139007] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:32:20.060 [DEBUG] [Thread-139007] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T02:32:20.101 [DEBUG] [Thread-139007] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:32:20.101 [DEBUG] [Thread-139007] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:32:20.105 [DEBUG] [Thread-139007] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:32:20.116 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:32:20.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T02:32:20.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T02:32:20.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T02:32:20.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:32:20.127 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T02:32:20.128 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:32:20.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:32:20.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T02:32:20.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.022006 -999.00  +13.30   4.90     83  +10.50 1 1 1 2 1     0    0 2.66 -13.22 ZNESW 3.4 4.9 215.5 9.5 14.0 -21.0 13.9 -20.6 13.7 -19.0 14.0 -20.1
2026-01-01T02:32:20.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T02:32:20.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T02:32:20.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.022006
2026-01-01T02:32:20.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T02:32:20.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T02:32:20.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T02:32:20.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T02:32:20.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T02:32:20.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T02:32:02', tmtdew=3.24, humidity=80.47, cloud=0.0, wind=12.46, temperature=13.13, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T02:32:03', seeing=0.82, atlas_timestamp='2026-01-01T00:31:41.318', atlas_cloud=1, atlas_rain=1, zp_data=[0.038750000000000284, 0.02325000000000088, 0.0832499999999996, 0.06649999999999956, 0.06949999999999967, 0.10625000000000107, 0.0860000000000003, 0.06825000000000081, 0.12399999999999878, 0.10599999999999987, 0.052250000000000796, 0.12400000000000055, 0.16699999999999982, 0.16724999999999923, 0.07049999999999912, 0.07150000000000034, 0.08174999999999955, 0.17349999999999888, 0.11499999999999844, 0.15424999999999933, 0.19799999999999862, 0.19874999999999865, 0.10625000000000107, 0.0962499999999995, 0.1269999999999989, 0.21149999999999913, 0.16225000000000023, 0.1695000000000011, 0.25400000000000045, 0.35300000000000065, 0.1850000000000005, 0.2190000000000012, 0.14324999999999832], zp_timestamp='2026-01-01T00:30:00')
2026-01-01T02:32:20.130 [DEBUG] [Thread-139007] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:32:20.214 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T02:32:20.226 [DEBUG] [Thread-139010] [transport.py] [_log()] starting thread (client mode): 0xb1795480
2026-01-01T02:32:20.226 [DEBUG] [Thread-139010] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:32:20.245 [DEBUG] [Thread-139010] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T02:32:20.245 [INFO] [Thread-139010] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T02:32:20.253 [DEBUG] [Thread-139010] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:32:20.253 [DEBUG] [Thread-139010] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T02:32:20.253 [DEBUG] [Thread-139010] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:32:20.253 [DEBUG] [Thread-139010] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:32:20.254 [DEBUG] [Thread-139010] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:32:20.254 [DEBUG] [Thread-139010] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:32:20.254 [DEBUG] [Thread-139010] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:32:20.254 [DEBUG] [Thread-139010] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:32:20.254 [DEBUG] [Thread-139010] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:32:20.254 [DEBUG] [Thread-139010] [transport.py] [_log()] client lang: <none>
2026-01-01T02:32:20.254 [DEBUG] [Thread-139010] [transport.py] [_log()] server lang: <none>
2026-01-01T02:32:20.254 [DEBUG] [Thread-139010] [transport.py] [_log()] kex follows: False
2026-01-01T02:32:20.254 [DEBUG] [Thread-139010] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:32:20.255 [DEBUG] [Thread-139010] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:32:20.255 [DEBUG] [Thread-139010] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:32:20.255 [DEBUG] [Thread-139010] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:32:20.255 [DEBUG] [Thread-139010] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:32:20.255 [DEBUG] [Thread-139010] [transport.py] [_log()] Compression: none
2026-01-01T02:32:20.255 [DEBUG] [Thread-139010] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:32:20.313 [DEBUG] [Thread-139010] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:32:20.313 [DEBUG] [Thread-139010] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:32:20.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T02:32:20.315 [DEBUG] [Thread-139010] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T02:32:20.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:32:20.369 [DEBUG] [Thread-139010] [transport.py] [_log()] userauth is OK
2026-01-01T02:32:20.369 [DEBUG] [Thread-139010] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:32:20.369 [DEBUG] [Thread-139010] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:32:20.369 [DEBUG] [Thread-139010] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T02:32:20.369 [DEBUG] [Thread-139010] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:32:20.388 [INFO] [Thread-139010] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:32:20.389 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T02:32:20.389 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:32:21.192 [DEBUG] [Thread-139010] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:32:21.192 [DEBUG] [Thread-139010] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:32:21.240 [DEBUG] [Thread-139010] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:32:21.240 [DEBUG] [Thread-139010] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:32:21.250 [DEBUG] [Thread-139010] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:32:21.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:32:21.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T02:32:21.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
2026-01-01T02:32:21.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:32:21.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:32:21.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:32:21.288 [DEBUG] [Thread-139010] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:32:28.715 [DEBUG] [Thread-139012 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:32:43.766 [DEBUG] [Thread-139013 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:32:51.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T02:32:51.310 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T02:32:51.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T02:32:52.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 2, 32, 35), 3.23, 81.0, 0.0, 10.02, 13.11, 0, 1, 0, 2, 0, 0),)
2026-01-01T02:32:52.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 02:32:35
2026-01-01T02:32:52.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T02:32:52.303 [DEBUG] [Thread-139014] [transport.py] [_log()] starting thread (client mode): 0xb95b1d50
2026-01-01T02:32:52.304 [DEBUG] [Thread-139014] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:32:52.324 [DEBUG] [Thread-139014] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T02:32:52.325 [INFO] [Thread-139014] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T02:32:52.328 [DEBUG] [Thread-139014] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:32:52.328 [DEBUG] [Thread-139014] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T02:32:52.328 [DEBUG] [Thread-139014] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:32:52.328 [DEBUG] [Thread-139014] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:32:52.328 [DEBUG] [Thread-139014] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:32:52.328 [DEBUG] [Thread-139014] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:32:52.328 [DEBUG] [Thread-139014] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:32:52.328 [DEBUG] [Thread-139014] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:32:52.328 [DEBUG] [Thread-139014] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:32:52.328 [DEBUG] [Thread-139014] [transport.py] [_log()] client lang: <none>
2026-01-01T02:32:52.328 [DEBUG] [Thread-139014] [transport.py] [_log()] server lang: <none>
2026-01-01T02:32:52.328 [DEBUG] [Thread-139014] [transport.py] [_log()] kex follows: False
2026-01-01T02:32:52.328 [DEBUG] [Thread-139014] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:32:52.328 [DEBUG] [Thread-139014] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:32:52.328 [DEBUG] [Thread-139014] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:32:52.328 [DEBUG] [Thread-139014] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:32:52.328 [DEBUG] [Thread-139014] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:32:52.328 [DEBUG] [Thread-139014] [transport.py] [_log()] Compression: none
2026-01-01T02:32:52.328 [DEBUG] [Thread-139014] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:32:52.346 [DEBUG] [Thread-139014] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:32:52.347 [DEBUG] [Thread-139014] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:32:52.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T02:32:52.348 [DEBUG] [Thread-139014] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T02:32:52.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:32:52.350 [DEBUG] [Thread-139014] [transport.py] [_log()] userauth is OK
2026-01-01T02:32:52.350 [DEBUG] [Thread-139014] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:32:52.350 [DEBUG] [Thread-139014] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:32:52.350 [DEBUG] [Thread-139014] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T02:32:52.350 [DEBUG] [Thread-139014] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:32:52.375 [INFO] [Thread-139014] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:32:52.375 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:32:53.030 [DEBUG] [Thread-139014] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:32:53.031 [DEBUG] [Thread-139014] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:32:53.031 [DEBUG] [Thread-139014] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T02:32:53.072 [DEBUG] [Thread-139014] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:32:53.072 [DEBUG] [Thread-139014] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:32:53.074 [DEBUG] [Thread-139014] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:32:53.086 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:32:53.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T02:32:53.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T02:32:53.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T02:32:53.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:32:53.098 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T02:32:53.099 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:32:53.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:32:53.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T02:32:53.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.022701 -999.00  +13.30   6.49     83  +10.50 1 1 1 2 1     0    0 2.52 -15.57 ZNESW 6.8 6.5 188.2 10.3 14.0 -21.1 13.8 -20.8 13.7 -19.1 14.0 -20.2
2026-01-01T02:32:53.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T02:32:53.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T02:32:53.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.022701
2026-01-01T02:32:53.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T02:32:53.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T02:32:53.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T02:32:53.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T02:32:53.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T02:32:53.101 [DEBUG] [Thread-139014] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:32:53.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T02:32:35', tmtdew=3.23, humidity=81.0, cloud=0.0, wind=10.02, temperature=13.11, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T02:32:35', seeing=0.82, atlas_timestamp='2026-01-01T00:32:41.366', atlas_cloud=1, atlas_rain=1, zp_data=[0.038750000000000284, 0.02325000000000088, 0.0832499999999996, 0.06649999999999956, 0.06949999999999967, 0.10625000000000107, 0.0860000000000003, 0.06825000000000081, 0.12399999999999878, 0.10599999999999987, 0.052250000000000796, 0.12400000000000055, 0.16699999999999982, 0.16724999999999923, 0.07049999999999912, 0.07150000000000034, 0.08174999999999955, 0.17349999999999888, 0.11499999999999844, 0.15424999999999933, 0.19799999999999862, 0.19874999999999865, 0.10625000000000107, 0.0962499999999995, 0.1269999999999989, 0.21149999999999913, 0.16225000000000023, 0.1695000000000011, 0.25400000000000045, 0.35300000000000065, 0.1850000000000005, 0.2190000000000012, 0.14324999999999832], zp_timestamp='2026-01-01T00:30:00')
2026-01-01T02:32:53.190 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T02:32:53.203 [DEBUG] [Thread-139017] [transport.py] [_log()] starting thread (client mode): 0xb6ba3df0
2026-01-01T02:32:53.203 [DEBUG] [Thread-139017] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:32:53.218 [DEBUG] [Thread-139017] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T02:32:53.218 [INFO] [Thread-139017] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T02:32:53.226 [DEBUG] [Thread-139017] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:32:53.226 [DEBUG] [Thread-139017] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T02:32:53.226 [DEBUG] [Thread-139017] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:32:53.226 [DEBUG] [Thread-139017] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:32:53.227 [DEBUG] [Thread-139017] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:32:53.227 [DEBUG] [Thread-139017] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:32:53.227 [DEBUG] [Thread-139017] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:32:53.227 [DEBUG] [Thread-139017] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:32:53.227 [DEBUG] [Thread-139017] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:32:53.227 [DEBUG] [Thread-139017] [transport.py] [_log()] client lang: <none>
2026-01-01T02:32:53.227 [DEBUG] [Thread-139017] [transport.py] [_log()] server lang: <none>
2026-01-01T02:32:53.227 [DEBUG] [Thread-139017] [transport.py] [_log()] kex follows: False
2026-01-01T02:32:53.227 [DEBUG] [Thread-139017] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:32:53.227 [DEBUG] [Thread-139017] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:32:53.227 [DEBUG] [Thread-139017] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:32:53.227 [DEBUG] [Thread-139017] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:32:53.227 [DEBUG] [Thread-139017] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:32:53.227 [DEBUG] [Thread-139017] [transport.py] [_log()] Compression: none
2026-01-01T02:32:53.227 [DEBUG] [Thread-139017] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:32:53.285 [DEBUG] [Thread-139017] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:32:53.286 [DEBUG] [Thread-139017] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:32:53.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T02:32:53.287 [DEBUG] [Thread-139017] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T02:32:53.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:32:53.340 [DEBUG] [Thread-139017] [transport.py] [_log()] userauth is OK
2026-01-01T02:32:53.341 [DEBUG] [Thread-139017] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:32:53.341 [DEBUG] [Thread-139017] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:32:53.341 [DEBUG] [Thread-139017] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T02:32:53.341 [DEBUG] [Thread-139017] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:32:53.360 [INFO] [Thread-139017] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:32:53.360 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T02:32:53.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:32:54.160 [DEBUG] [Thread-139017] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:32:54.160 [DEBUG] [Thread-139017] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:32:54.208 [DEBUG] [Thread-139017] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:32:54.208 [DEBUG] [Thread-139017] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:32:54.217 [DEBUG] [Thread-139017] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:32:54.226 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:32:54.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T02:32:54.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T02:32:54.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:32:54.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:32:54.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:32:54.254 [DEBUG] [Thread-139017] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:32:58.800 [DEBUG] [Thread-139019 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:33:03.705 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:33:03.706 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:33:05.187 [DEBUG] [Thread-139020 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:33:13.852 [DEBUG] [Thread-139021 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:33:24.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T02:33:24.276 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T02:33:24.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T02:33:25.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 2, 33, 7), 3.24, 80.98, 0.0, 10.75, 13.11, 0, 1, 0, 2, 0, 0),)
2026-01-01T02:33:25.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 02:33:07
2026-01-01T02:33:25.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T02:33:25.318 [DEBUG] [Thread-139022] [transport.py] [_log()] starting thread (client mode): 0xb957b370
2026-01-01T02:33:25.318 [DEBUG] [Thread-139022] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:33:25.340 [DEBUG] [Thread-139022] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T02:33:25.340 [INFO] [Thread-139022] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T02:33:25.344 [DEBUG] [Thread-139022] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:33:25.344 [DEBUG] [Thread-139022] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T02:33:25.344 [DEBUG] [Thread-139022] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:33:25.344 [DEBUG] [Thread-139022] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:33:25.344 [DEBUG] [Thread-139022] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:33:25.344 [DEBUG] [Thread-139022] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:33:25.344 [DEBUG] [Thread-139022] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:33:25.344 [DEBUG] [Thread-139022] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:33:25.344 [DEBUG] [Thread-139022] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:33:25.344 [DEBUG] [Thread-139022] [transport.py] [_log()] client lang: <none>
2026-01-01T02:33:25.344 [DEBUG] [Thread-139022] [transport.py] [_log()] server lang: <none>
2026-01-01T02:33:25.344 [DEBUG] [Thread-139022] [transport.py] [_log()] kex follows: False
2026-01-01T02:33:25.344 [DEBUG] [Thread-139022] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:33:25.344 [DEBUG] [Thread-139022] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:33:25.344 [DEBUG] [Thread-139022] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:33:25.344 [DEBUG] [Thread-139022] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:33:25.344 [DEBUG] [Thread-139022] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:33:25.344 [DEBUG] [Thread-139022] [transport.py] [_log()] Compression: none
2026-01-01T02:33:25.344 [DEBUG] [Thread-139022] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:33:25.360 [DEBUG] [Thread-139022] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:33:25.360 [DEBUG] [Thread-139022] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:33:25.360 [DEBUG] [Thread-139022] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T02:33:25.360 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T02:33:25.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:33:25.361 [DEBUG] [Thread-139022] [transport.py] [_log()] userauth is OK
2026-01-01T02:33:25.361 [DEBUG] [Thread-139022] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:33:25.361 [DEBUG] [Thread-139022] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:33:25.361 [DEBUG] [Thread-139022] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T02:33:25.361 [DEBUG] [Thread-139022] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:33:25.387 [INFO] [Thread-139022] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:33:25.388 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:33:26.032 [DEBUG] [Thread-139022] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:33:26.032 [DEBUG] [Thread-139022] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:33:26.032 [DEBUG] [Thread-139022] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T02:33:26.073 [DEBUG] [Thread-139022] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:33:26.073 [DEBUG] [Thread-139022] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:33:26.076 [DEBUG] [Thread-139022] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:33:26.087 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:33:26.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T02:33:26.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T02:33:26.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T02:33:26.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:33:26.098 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T02:33:26.099 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:33:26.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:33:26.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T02:33:26.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.023048 -999.00  +13.20   6.32     83  +10.40 1 1 1 2 1     0    0 2.57 -15.07 ZNESW 6.5 6.3 205.4 13.5 14.0 -20.9 13.8 -20.9 13.7 -19.2 13.9 -20.1
2026-01-01T02:33:26.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T02:33:26.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T02:33:26.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.023048
2026-01-01T02:33:26.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T02:33:26.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T02:33:26.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T02:33:26.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T02:33:26.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T02:33:26.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T02:33:07', tmtdew=3.24, humidity=80.98, cloud=0.0, wind=10.75, temperature=13.11, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T02:33:07', seeing=0.88, atlas_timestamp='2026-01-01T00:33:11.347', atlas_cloud=1, atlas_rain=1, zp_data=[0.038750000000000284, 0.02325000000000088, 0.0832499999999996, 0.06649999999999956, 0.06949999999999967, 0.10625000000000107, 0.0860000000000003, 0.06825000000000081, 0.12399999999999878, 0.10599999999999987, 0.052250000000000796, 0.12400000000000055, 0.16699999999999982, 0.16724999999999923, 0.07049999999999912, 0.07150000000000034, 0.08174999999999955, 0.17349999999999888, 0.11499999999999844, 0.15424999999999933, 0.19799999999999862, 0.19874999999999865, 0.10625000000000107, 0.0962499999999995, 0.1269999999999989, 0.21149999999999913, 0.16225000000000023, 0.1695000000000011, 0.25400000000000045, 0.35300000000000065, 0.1850000000000005, 0.2190000000000012, 0.14324999999999832], zp_timestamp='2026-01-01T00:30:00')
2026-01-01T02:33:26.101 [DEBUG] [Thread-139022] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:33:26.192 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T02:33:26.203 [DEBUG] [Thread-139025] [transport.py] [_log()] starting thread (client mode): 0xb1795480
2026-01-01T02:33:26.203 [DEBUG] [Thread-139025] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:33:26.218 [DEBUG] [Thread-139025] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T02:33:26.218 [INFO] [Thread-139025] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T02:33:26.225 [DEBUG] [Thread-139025] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:33:26.226 [DEBUG] [Thread-139025] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T02:33:26.226 [DEBUG] [Thread-139025] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:33:26.226 [DEBUG] [Thread-139025] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:33:26.226 [DEBUG] [Thread-139025] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:33:26.226 [DEBUG] [Thread-139025] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:33:26.226 [DEBUG] [Thread-139025] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:33:26.226 [DEBUG] [Thread-139025] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:33:26.226 [DEBUG] [Thread-139025] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:33:26.227 [DEBUG] [Thread-139025] [transport.py] [_log()] client lang: <none>
2026-01-01T02:33:26.227 [DEBUG] [Thread-139025] [transport.py] [_log()] server lang: <none>
2026-01-01T02:33:26.227 [DEBUG] [Thread-139025] [transport.py] [_log()] kex follows: False
2026-01-01T02:33:26.227 [DEBUG] [Thread-139025] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:33:26.227 [DEBUG] [Thread-139025] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:33:26.227 [DEBUG] [Thread-139025] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:33:26.227 [DEBUG] [Thread-139025] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:33:26.227 [DEBUG] [Thread-139025] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:33:26.227 [DEBUG] [Thread-139025] [transport.py] [_log()] Compression: none
2026-01-01T02:33:26.227 [DEBUG] [Thread-139025] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:33:26.284 [DEBUG] [Thread-139025] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:33:26.285 [DEBUG] [Thread-139025] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:33:26.285 [DEBUG] [Thread-139025] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T02:33:26.286 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T02:33:26.286 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:33:26.340 [DEBUG] [Thread-139025] [transport.py] [_log()] userauth is OK
2026-01-01T02:33:26.340 [DEBUG] [Thread-139025] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:33:26.341 [DEBUG] [Thread-139025] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:33:26.341 [DEBUG] [Thread-139025] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T02:33:26.341 [DEBUG] [Thread-139025] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:33:26.360 [INFO] [Thread-139025] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:33:26.360 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T02:33:26.360 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:33:27.209 [DEBUG] [Thread-139025] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:33:27.209 [DEBUG] [Thread-139025] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:33:27.257 [DEBUG] [Thread-139025] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:33:27.258 [DEBUG] [Thread-139025] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:33:27.266 [DEBUG] [Thread-139025] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:33:27.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:33:27.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T02:33:27.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T02:33:27.292 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:33:27.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:33:27.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:33:27.300 [DEBUG] [Thread-139025] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:33:28.882 [DEBUG] [Thread-139027 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:33:43.932 [DEBUG] [Thread-139028 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:33:57.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T02:33:57.323 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T02:33: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
2026-01-01T02:33:58.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 2, 33, 39), 3.24, 80.98, 0.0, 9.86, 13.11, 0, 1, 0, 2, 0, 0),)
2026-01-01T02:33:58.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 02:33:39
2026-01-01T02:33:58.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T02:33:58.314 [DEBUG] [Thread-139029] [transport.py] [_log()] starting thread (client mode): 0xb9558310
2026-01-01T02:33:58.314 [DEBUG] [Thread-139029] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:33:58.335 [DEBUG] [Thread-139029] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T02:33:58.335 [INFO] [Thread-139029] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T02:33:58.338 [DEBUG] [Thread-139029] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:33:58.338 [DEBUG] [Thread-139029] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T02:33:58.338 [DEBUG] [Thread-139029] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:33:58.338 [DEBUG] [Thread-139029] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:33:58.338 [DEBUG] [Thread-139029] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:33:58.338 [DEBUG] [Thread-139029] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:33:58.339 [DEBUG] [Thread-139029] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:33:58.339 [DEBUG] [Thread-139029] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:33:58.339 [DEBUG] [Thread-139029] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:33:58.339 [DEBUG] [Thread-139029] [transport.py] [_log()] client lang: <none>
2026-01-01T02:33:58.339 [DEBUG] [Thread-139029] [transport.py] [_log()] server lang: <none>
2026-01-01T02:33:58.339 [DEBUG] [Thread-139029] [transport.py] [_log()] kex follows: False
2026-01-01T02:33:58.339 [DEBUG] [Thread-139029] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:33:58.339 [DEBUG] [Thread-139029] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:33:58.339 [DEBUG] [Thread-139029] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:33:58.339 [DEBUG] [Thread-139029] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:33:58.339 [DEBUG] [Thread-139029] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:33:58.339 [DEBUG] [Thread-139029] [transport.py] [_log()] Compression: none
2026-01-01T02:33:58.339 [DEBUG] [Thread-139029] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:33:58.356 [DEBUG] [Thread-139029] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:33:58.356 [DEBUG] [Thread-139029] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:33:58.357 [DEBUG] [Thread-139029] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T02:33:58.357 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T02:33:58.358 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:33:58.359 [DEBUG] [Thread-139029] [transport.py] [_log()] userauth is OK
2026-01-01T02:33:58.359 [DEBUG] [Thread-139029] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:33:58.359 [DEBUG] [Thread-139029] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:33:58.359 [DEBUG] [Thread-139029] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T02:33:58.360 [DEBUG] [Thread-139029] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:33:58.384 [INFO] [Thread-139029] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:33:58.384 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:33:58.965 [DEBUG] [Thread-139031 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:33:59.002 [DEBUG] [Thread-139029] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:33:59.002 [DEBUG] [Thread-139029] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:33:59.002 [DEBUG] [Thread-139029] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T02:33:59.043 [DEBUG] [Thread-139029] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:33:59.043 [DEBUG] [Thread-139029] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:33:59.046 [DEBUG] [Thread-139029] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:33:59.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:33:59.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T02:33:59.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T02:33:59.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T02:33:59.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:33:59.062 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T02:33:59.062 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:33:59.062 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:33:59.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T02:33:59.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.023395 -999.00  +13.30   4.77     82  +10.40 1 1 1 2 1     0    0 2.50 -17.30 ZNESW 3.6 4.8 248.7 6.4 14.0 -21.0 13.9 -20.7 13.6 -19.1 13.9 -20.0
2026-01-01T02:33:59.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T02:33:59.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T02:33:59.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.023395
2026-01-01T02:33:59.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T02:33:59.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T02:33:59.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T02:33:59.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T02:33:59.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T02:33:59.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T02:33:39', tmtdew=3.24, humidity=80.98, cloud=0.0, wind=9.86, temperature=13.11, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T02:33:39', seeing=0.93, atlas_timestamp='2026-01-01T00:33:41.328', atlas_cloud=1, atlas_rain=1, zp_data=[0.038750000000000284, 0.02325000000000088, 0.0832499999999996, 0.06649999999999956, 0.06949999999999967, 0.10625000000000107, 0.0860000000000003, 0.06825000000000081, 0.12399999999999878, 0.10599999999999987, 0.052250000000000796, 0.12400000000000055, 0.16699999999999982, 0.16724999999999923, 0.07049999999999912, 0.07150000000000034, 0.08174999999999955, 0.17349999999999888, 0.11499999999999844, 0.15424999999999933, 0.19799999999999862, 0.19874999999999865, 0.10625000000000107, 0.0962499999999995, 0.1269999999999989, 0.21149999999999913, 0.16225000000000023, 0.1695000000000011, 0.25400000000000045, 0.35300000000000065, 0.1850000000000005, 0.2190000000000012, 0.14324999999999832], zp_timestamp='2026-01-01T00:32:00')
2026-01-01T02:33:59.063 [DEBUG] [Thread-139029] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:33:59.140 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T02:33:59.153 [DEBUG] [Thread-139033] [transport.py] [_log()] starting thread (client mode): 0xb95f1db0
2026-01-01T02:33:59.153 [DEBUG] [Thread-139033] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:33:59.168 [DEBUG] [Thread-139033] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T02:33:59.168 [INFO] [Thread-139033] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T02:33:59.176 [DEBUG] [Thread-139033] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:33:59.176 [DEBUG] [Thread-139033] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T02:33:59.176 [DEBUG] [Thread-139033] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:33:59.176 [DEBUG] [Thread-139033] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:33:59.176 [DEBUG] [Thread-139033] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:33:59.176 [DEBUG] [Thread-139033] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:33:59.176 [DEBUG] [Thread-139033] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:33:59.176 [DEBUG] [Thread-139033] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:33:59.176 [DEBUG] [Thread-139033] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:33:59.176 [DEBUG] [Thread-139033] [transport.py] [_log()] client lang: <none>
2026-01-01T02:33:59.176 [DEBUG] [Thread-139033] [transport.py] [_log()] server lang: <none>
2026-01-01T02:33:59.176 [DEBUG] [Thread-139033] [transport.py] [_log()] kex follows: False
2026-01-01T02:33:59.176 [DEBUG] [Thread-139033] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:33:59.176 [DEBUG] [Thread-139033] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:33:59.176 [DEBUG] [Thread-139033] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:33:59.176 [DEBUG] [Thread-139033] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:33:59.176 [DEBUG] [Thread-139033] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:33:59.176 [DEBUG] [Thread-139033] [transport.py] [_log()] Compression: none
2026-01-01T02:33:59.176 [DEBUG] [Thread-139033] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:33:59.231 [DEBUG] [Thread-139033] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:33:59.231 [DEBUG] [Thread-139033] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:33:59.231 [DEBUG] [Thread-139033] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T02:33:59.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T02:33:59.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:33:59.293 [DEBUG] [Thread-139033] [transport.py] [_log()] userauth is OK
2026-01-01T02:33:59.293 [DEBUG] [Thread-139033] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:33:59.293 [DEBUG] [Thread-139033] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:33:59.293 [DEBUG] [Thread-139033] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T02:33:59.293 [DEBUG] [Thread-139033] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:33:59.307 [INFO] [Thread-139033] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:33:59.307 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T02:33:59.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:34:00.171 [DEBUG] [Thread-139033] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:34:00.171 [DEBUG] [Thread-139033] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:34:00.219 [DEBUG] [Thread-139033] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:34:00.219 [DEBUG] [Thread-139033] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:34:00.231 [DEBUG] [Thread-139033] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:34:00.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:34:00.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T02:34:00.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T02:34:00.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:34:00.262 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:34:00.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:34:00.269 [DEBUG] [Thread-139033] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:34:03.901 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:34:03.902 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:34:05.260 [DEBUG] [Thread-139035 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:34:13.992 [DEBUG] [Thread-139036 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:34:29.043 [DEBUG] [Thread-139037 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:34:30.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T02:34:30.293 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T02:34:30.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T02:34:30.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 2, 34, 11), 3.23, 81.03, 0.0, 10.13, 13.13, 0, 1, 0, 2, 0, 0),)
2026-01-01T02:34:30.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 02:34:11
2026-01-01T02:34:31.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T02:34:31.273 [DEBUG] [Thread-139038] [transport.py] [_log()] starting thread (client mode): 0xb6bbeb00
2026-01-01T02:34:31.273 [DEBUG] [Thread-139038] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:34:31.290 [DEBUG] [Thread-139038] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T02:34:31.290 [INFO] [Thread-139038] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T02:34:31.293 [DEBUG] [Thread-139038] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:34:31.293 [DEBUG] [Thread-139038] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T02:34:31.293 [DEBUG] [Thread-139038] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:34:31.293 [DEBUG] [Thread-139038] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:34:31.293 [DEBUG] [Thread-139038] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:34:31.293 [DEBUG] [Thread-139038] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:34:31.293 [DEBUG] [Thread-139038] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:34:31.294 [DEBUG] [Thread-139038] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:34:31.294 [DEBUG] [Thread-139038] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:34:31.294 [DEBUG] [Thread-139038] [transport.py] [_log()] client lang: <none>
2026-01-01T02:34:31.294 [DEBUG] [Thread-139038] [transport.py] [_log()] server lang: <none>
2026-01-01T02:34:31.294 [DEBUG] [Thread-139038] [transport.py] [_log()] kex follows: False
2026-01-01T02:34:31.294 [DEBUG] [Thread-139038] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:34:31.294 [DEBUG] [Thread-139038] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:34:31.294 [DEBUG] [Thread-139038] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:34:31.294 [DEBUG] [Thread-139038] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:34:31.294 [DEBUG] [Thread-139038] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:34:31.294 [DEBUG] [Thread-139038] [transport.py] [_log()] Compression: none
2026-01-01T02:34:31.294 [DEBUG] [Thread-139038] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:34:31.306 [DEBUG] [Thread-139038] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:34:31.307 [DEBUG] [Thread-139038] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:34:31.307 [DEBUG] [Thread-139038] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T02:34:31.307 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T02:34:31.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:34:31.309 [DEBUG] [Thread-139038] [transport.py] [_log()] userauth is OK
2026-01-01T02:34:31.309 [DEBUG] [Thread-139038] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:34:31.309 [DEBUG] [Thread-139038] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:34:31.309 [DEBUG] [Thread-139038] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T02:34:31.309 [DEBUG] [Thread-139038] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:34:31.329 [INFO] [Thread-139038] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:34:31.329 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:34:31.950 [DEBUG] [Thread-139038] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:34:31.950 [DEBUG] [Thread-139038] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:34:31.950 [DEBUG] [Thread-139038] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T02:34:31.991 [DEBUG] [Thread-139038] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:34:31.991 [DEBUG] [Thread-139038] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:34:31.994 [DEBUG] [Thread-139038] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:34:32.007 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:34:32.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T02:34:32.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T02:34:32.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T02:34:32.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:34:32.017 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T02:34:32.018 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:34:32.018 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:34:32.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T02:34:32.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.023742 -999.00  +13.30   6.58     83  +10.50 1 1 1 2 1     0    0 2.47 -17.23 ZNESW 6.3 6.6 197.2 9.5 13.9 -21.1 13.9 -20.7 13.6 -19.1 13.9 -20.1
2026-01-01T02:34:32.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T02:34:32.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T02:34:32.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.023742
2026-01-01T02:34:32.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T02:34:32.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T02:34:32.020 [DEBUG] [Thread-139038] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:34:32.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T02:34:32.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T02:34:32.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T02:34:32.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T02:34:11', tmtdew=3.23, humidity=81.03, cloud=0.0, wind=10.13, temperature=13.13, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T02:34:11', seeing=0.93, atlas_timestamp='2026-01-01T00:34:11.309', atlas_cloud=1, atlas_rain=1, zp_data=[0.038750000000000284, 0.02325000000000088, 0.0832499999999996, 0.06649999999999956, 0.06949999999999967, 0.10625000000000107, 0.0860000000000003, 0.06825000000000081, 0.12399999999999878, 0.10599999999999987, 0.052250000000000796, 0.12400000000000055, 0.16699999999999982, 0.16724999999999923, 0.07049999999999912, 0.07150000000000034, 0.08174999999999955, 0.17349999999999888, 0.11499999999999844, 0.15424999999999933, 0.19799999999999862, 0.19874999999999865, 0.10625000000000107, 0.0962499999999995, 0.1269999999999989, 0.21149999999999913, 0.16225000000000023, 0.1695000000000011, 0.25400000000000045, 0.35300000000000065, 0.1850000000000005, 0.2190000000000012, 0.14324999999999832], zp_timestamp='2026-01-01T00:32:00')
2026-01-01T02:34:32.107 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T02:34:32.119 [DEBUG] [Thread-139041] [transport.py] [_log()] starting thread (client mode): 0xb6b29150
2026-01-01T02:34:32.120 [DEBUG] [Thread-139041] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:34:32.135 [DEBUG] [Thread-139041] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T02:34:32.135 [INFO] [Thread-139041] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T02:34:32.143 [DEBUG] [Thread-139041] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:34:32.143 [DEBUG] [Thread-139041] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T02:34:32.143 [DEBUG] [Thread-139041] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:34:32.143 [DEBUG] [Thread-139041] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:34:32.143 [DEBUG] [Thread-139041] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:34:32.143 [DEBUG] [Thread-139041] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:34:32.143 [DEBUG] [Thread-139041] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:34:32.143 [DEBUG] [Thread-139041] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:34:32.143 [DEBUG] [Thread-139041] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:34:32.143 [DEBUG] [Thread-139041] [transport.py] [_log()] client lang: <none>
2026-01-01T02:34:32.143 [DEBUG] [Thread-139041] [transport.py] [_log()] server lang: <none>
2026-01-01T02:34:32.143 [DEBUG] [Thread-139041] [transport.py] [_log()] kex follows: False
2026-01-01T02:34:32.143 [DEBUG] [Thread-139041] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:34:32.143 [DEBUG] [Thread-139041] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:34:32.144 [DEBUG] [Thread-139041] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:34:32.144 [DEBUG] [Thread-139041] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:34:32.144 [DEBUG] [Thread-139041] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:34:32.144 [DEBUG] [Thread-139041] [transport.py] [_log()] Compression: none
2026-01-01T02:34:32.144 [DEBUG] [Thread-139041] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:34:32.201 [DEBUG] [Thread-139041] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:34:32.202 [DEBUG] [Thread-139041] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:34:32.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T02:34:32.203 [DEBUG] [Thread-139041] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T02:34:32.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:34:32.257 [DEBUG] [Thread-139041] [transport.py] [_log()] userauth is OK
2026-01-01T02:34:32.258 [DEBUG] [Thread-139041] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:34:32.258 [DEBUG] [Thread-139041] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:34:32.258 [DEBUG] [Thread-139041] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T02:34:32.258 [DEBUG] [Thread-139041] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:34:32.277 [INFO] [Thread-139041] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:34:32.277 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T02:34:32.278 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:34:33.123 [DEBUG] [Thread-139041] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:34:33.123 [DEBUG] [Thread-139041] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:34:33.171 [DEBUG] [Thread-139041] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:34:33.171 [DEBUG] [Thread-139041] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:34:33.181 [DEBUG] [Thread-139041] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:34:33.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:34:33.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T02:34:33.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T02:34:33.209 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:34:33.209 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:34:33.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:34:33.217 [DEBUG] [Thread-139041] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:34:44.072 [DEBUG] [Thread-139043 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:34:59.112 [DEBUG] [Thread-139044 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:35:03.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T02:35:03.228 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T02:35:03.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T02:35:03.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 2, 34, 43), 3.22, 81.07, 0.0, 12.95, 13.15, 0, 1, 0, 2, 0, 0),)
2026-01-01T02:35:03.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 02:34:43
2026-01-01T02:35:04.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T02:35:04.101 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:35:04.102 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:35:04.214 [DEBUG] [Thread-139045] [transport.py] [_log()] starting thread (client mode): 0xb6b2ae00
2026-01-01T02:35:04.215 [DEBUG] [Thread-139045] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:35:04.233 [DEBUG] [Thread-139045] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T02:35:04.233 [INFO] [Thread-139045] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T02:35:04.237 [DEBUG] [Thread-139045] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:35:04.237 [DEBUG] [Thread-139045] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T02:35:04.237 [DEBUG] [Thread-139045] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:35:04.237 [DEBUG] [Thread-139045] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:35:04.237 [DEBUG] [Thread-139045] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:35:04.237 [DEBUG] [Thread-139045] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:35:04.237 [DEBUG] [Thread-139045] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:35:04.237 [DEBUG] [Thread-139045] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:35:04.237 [DEBUG] [Thread-139045] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:35:04.237 [DEBUG] [Thread-139045] [transport.py] [_log()] client lang: <none>
2026-01-01T02:35:04.237 [DEBUG] [Thread-139045] [transport.py] [_log()] server lang: <none>
2026-01-01T02:35:04.237 [DEBUG] [Thread-139045] [transport.py] [_log()] kex follows: False
2026-01-01T02:35:04.237 [DEBUG] [Thread-139045] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:35:04.237 [DEBUG] [Thread-139045] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:35:04.237 [DEBUG] [Thread-139045] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:35:04.237 [DEBUG] [Thread-139045] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:35:04.237 [DEBUG] [Thread-139045] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:35:04.237 [DEBUG] [Thread-139045] [transport.py] [_log()] Compression: none
2026-01-01T02:35:04.237 [DEBUG] [Thread-139045] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:35:04.252 [DEBUG] [Thread-139045] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:35:04.253 [DEBUG] [Thread-139045] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:35:04.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T02:35:04.254 [DEBUG] [Thread-139045] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T02:35:04.254 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:35:04.256 [DEBUG] [Thread-139045] [transport.py] [_log()] userauth is OK
2026-01-01T02:35:04.256 [DEBUG] [Thread-139045] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:35:04.256 [DEBUG] [Thread-139045] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:35:04.256 [DEBUG] [Thread-139045] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T02:35:04.256 [DEBUG] [Thread-139045] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:35:04.275 [INFO] [Thread-139045] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:35:04.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:35:05.335 [DEBUG] [Thread-139047 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:35:10.274 [DEBUG] [Thread-139045] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:35:10.274 [DEBUG] [Thread-139045] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:35:10.275 [DEBUG] [Thread-139045] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T02:35:10.315 [DEBUG] [Thread-139045] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:35:10.315 [DEBUG] [Thread-139045] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:35:10.319 [DEBUG] [Thread-139045] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:35:10.330 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:35:10.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T02:35:10.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T02:35:10.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T02:35:10.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:35:10.412 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T02:35:10.412 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:35:10.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:35:10.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T02:35:10.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.024090 -999.00  +13.30   4.56     83  +10.50 1 1 1 2 1     0    0 2.49 -18.35 ZNESW 6.5 4.6 194.3 11.0 13.9 -20.9 13.8 -20.6 13.7 -19.1 13.9 -20.1
2026-01-01T02:35:10.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T02:35:10.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T02:35:10.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.024090
2026-01-01T02:35:10.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T02:35:10.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T02:35:10.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T02:35:10.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T02:35:10.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T02:35:10.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T02:34:43', tmtdew=3.22, humidity=81.07, cloud=0.0, wind=12.95, temperature=13.15, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T02:34:43', seeing=1.05, atlas_timestamp='2026-01-01T00:34:41.376', atlas_cloud=1, atlas_rain=1, zp_data=[0.038750000000000284, 0.02325000000000088, 0.0832499999999996, 0.06649999999999956, 0.06949999999999967, 0.10625000000000107, 0.0860000000000003, 0.06825000000000081, 0.12399999999999878, 0.10599999999999987, 0.052250000000000796, 0.12400000000000055, 0.16699999999999982, 0.16724999999999923, 0.07049999999999912, 0.07150000000000034, 0.08174999999999955, 0.17349999999999888, 0.11499999999999844, 0.15424999999999933, 0.19799999999999862, 0.19874999999999865, 0.10625000000000107, 0.0962499999999995, 0.1269999999999989, 0.21149999999999913, 0.16225000000000023, 0.1695000000000011, 0.25400000000000045, 0.35300000000000065, 0.1850000000000005, 0.2190000000000012, 0.14324999999999832], zp_timestamp='2026-01-01T00:32:00')
2026-01-01T02:35:10.414 [DEBUG] [Thread-139045] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:35:10.500 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T02:35:10.513 [DEBUG] [Thread-139049] [transport.py] [_log()] starting thread (client mode): 0xb9579e40
2026-01-01T02:35:10.513 [DEBUG] [Thread-139049] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:35:10.529 [DEBUG] [Thread-139049] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T02:35:10.529 [INFO] [Thread-139049] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T02:35:10.536 [DEBUG] [Thread-139049] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:35:10.537 [DEBUG] [Thread-139049] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T02:35:10.537 [DEBUG] [Thread-139049] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:35:10.537 [DEBUG] [Thread-139049] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:35:10.537 [DEBUG] [Thread-139049] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:35:10.537 [DEBUG] [Thread-139049] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:35:10.537 [DEBUG] [Thread-139049] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:35:10.537 [DEBUG] [Thread-139049] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:35:10.537 [DEBUG] [Thread-139049] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:35:10.537 [DEBUG] [Thread-139049] [transport.py] [_log()] client lang: <none>
2026-01-01T02:35:10.537 [DEBUG] [Thread-139049] [transport.py] [_log()] server lang: <none>
2026-01-01T02:35:10.537 [DEBUG] [Thread-139049] [transport.py] [_log()] kex follows: False
2026-01-01T02:35:10.537 [DEBUG] [Thread-139049] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:35:10.537 [DEBUG] [Thread-139049] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:35:10.537 [DEBUG] [Thread-139049] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:35:10.537 [DEBUG] [Thread-139049] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:35:10.537 [DEBUG] [Thread-139049] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:35:10.538 [DEBUG] [Thread-139049] [transport.py] [_log()] Compression: none
2026-01-01T02:35:10.538 [DEBUG] [Thread-139049] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:35:10.597 [DEBUG] [Thread-139049] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:35:10.598 [DEBUG] [Thread-139049] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:35:10.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T02:35:10.599 [DEBUG] [Thread-139049] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T02:35:10.600 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:35:10.653 [DEBUG] [Thread-139049] [transport.py] [_log()] userauth is OK
2026-01-01T02:35:10.654 [DEBUG] [Thread-139049] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:35:10.654 [DEBUG] [Thread-139049] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:35:10.654 [DEBUG] [Thread-139049] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T02:35:10.654 [DEBUG] [Thread-139049] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:35:10.678 [INFO] [Thread-139049] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:35:10.679 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T02:35:10.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:35:11.539 [DEBUG] [Thread-139049] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:35:11.539 [DEBUG] [Thread-139049] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:35:11.587 [DEBUG] [Thread-139049] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:35:11.587 [DEBUG] [Thread-139049] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:35:11.597 [DEBUG] [Thread-139049] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:35:11.606 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:35:11.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T02:35:11.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T02:35:11.625 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:35:11.625 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:35:11.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:35:11.634 [DEBUG] [Thread-139049] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:35:14.148 [DEBUG] [Thread-139051 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:35:29.199 [DEBUG] [Thread-139052 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:35:41.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T02:35:41.655 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T02:35:41.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T02:35:42.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 2, 35, 15), 3.23, 81.02, 0.0, 11.47, 13.13, 0, 1, 0, 2, 0, 0),)
2026-01-01T02:35:42.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 02:35:15
2026-01-01T02:35:42.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T02:35:42.640 [DEBUG] [Thread-139053] [transport.py] [_log()] starting thread (client mode): 0xb6b15390
2026-01-01T02:35:42.640 [DEBUG] [Thread-139053] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:35:42.661 [DEBUG] [Thread-139053] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T02:35:42.661 [INFO] [Thread-139053] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T02:35:42.664 [DEBUG] [Thread-139053] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:35:42.664 [DEBUG] [Thread-139053] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T02:35:42.664 [DEBUG] [Thread-139053] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:35:42.664 [DEBUG] [Thread-139053] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:35:42.664 [DEBUG] [Thread-139053] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:35:42.664 [DEBUG] [Thread-139053] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:35:42.664 [DEBUG] [Thread-139053] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:35:42.664 [DEBUG] [Thread-139053] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:35:42.665 [DEBUG] [Thread-139053] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:35:42.665 [DEBUG] [Thread-139053] [transport.py] [_log()] client lang: <none>
2026-01-01T02:35:42.665 [DEBUG] [Thread-139053] [transport.py] [_log()] server lang: <none>
2026-01-01T02:35:42.665 [DEBUG] [Thread-139053] [transport.py] [_log()] kex follows: False
2026-01-01T02:35:42.665 [DEBUG] [Thread-139053] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:35:42.665 [DEBUG] [Thread-139053] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:35:42.665 [DEBUG] [Thread-139053] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:35:42.665 [DEBUG] [Thread-139053] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:35:42.665 [DEBUG] [Thread-139053] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:35:42.665 [DEBUG] [Thread-139053] [transport.py] [_log()] Compression: none
2026-01-01T02:35:42.665 [DEBUG] [Thread-139053] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:35:42.683 [DEBUG] [Thread-139053] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:35:42.684 [DEBUG] [Thread-139053] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:35:42.685 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T02:35:42.685 [DEBUG] [Thread-139053] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T02:35:42.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:35:42.688 [DEBUG] [Thread-139053] [transport.py] [_log()] userauth is OK
2026-01-01T02:35:42.688 [DEBUG] [Thread-139053] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:35:42.688 [DEBUG] [Thread-139053] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:35:42.688 [DEBUG] [Thread-139053] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T02:35:42.688 [DEBUG] [Thread-139053] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:35:42.724 [INFO] [Thread-139053] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:35:42.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:35:43.389 [DEBUG] [Thread-139053] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:35:43.390 [DEBUG] [Thread-139053] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:35:43.391 [DEBUG] [Thread-139053] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T02:35:43.431 [DEBUG] [Thread-139053] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:35:43.432 [DEBUG] [Thread-139053] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:35:43.435 [DEBUG] [Thread-139053] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:35:43.449 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:35:43.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T02:35:43.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T02:35:43.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T02:35:43.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:35:43.460 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T02:35:43.460 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:35:43.460 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:35:43.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T02:35:43.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.024090 -999.00  +13.30   4.56     83  +10.50 1 1 1 2 1     0    0 2.49 -18.35 ZNESW 6.5 4.6 194.3 11.0 13.9 -20.9 13.8 -20.6 13.7 -19.1 13.9 -20.1
2026-01-01T02:35:43.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T02:35:43.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T02:35:43.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.024090
2026-01-01T02:35:43.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T02:35:43.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T02:35:43.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T02:35:43.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T02:35:43.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T02:35:43.463 [DEBUG] [Thread-139053] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:35:43.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T02:35:15', tmtdew=3.23, humidity=81.02, cloud=0.0, wind=11.47, temperature=13.13, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T02:35:15', seeing=1.07, atlas_timestamp='2026-01-01T00:34:41.376', atlas_cloud=1, atlas_rain=1, zp_data=[0.038750000000000284, 0.02325000000000088, 0.0832499999999996, 0.06649999999999956, 0.06949999999999967, 0.10625000000000107, 0.0860000000000003, 0.06825000000000081, 0.12399999999999878, 0.10599999999999987, 0.052250000000000796, 0.12400000000000055, 0.16699999999999982, 0.16724999999999923, 0.07049999999999912, 0.07150000000000034, 0.08174999999999955, 0.17349999999999888, 0.11499999999999844, 0.15424999999999933, 0.19799999999999862, 0.19874999999999865, 0.10625000000000107, 0.0962499999999995, 0.1269999999999989, 0.21149999999999913, 0.16225000000000023, 0.1695000000000011, 0.25400000000000045, 0.35300000000000065, 0.1850000000000005, 0.2190000000000012, 0.14324999999999832], zp_timestamp='2026-01-01T00:32:00')
2026-01-01T02:35:43.547 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T02:35:43.743 [DEBUG] [Thread-139056] [transport.py] [_log()] starting thread (client mode): 0xb6bbe680
2026-01-01T02:35:43.743 [DEBUG] [Thread-139056] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:35:43.757 [DEBUG] [Thread-139056] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T02:35:43.757 [INFO] [Thread-139056] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T02:35:43.765 [DEBUG] [Thread-139056] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:35:43.765 [DEBUG] [Thread-139056] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T02:35:43.765 [DEBUG] [Thread-139056] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:35:43.765 [DEBUG] [Thread-139056] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:35:43.766 [DEBUG] [Thread-139056] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:35:43.766 [DEBUG] [Thread-139056] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:35:43.766 [DEBUG] [Thread-139056] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:35:43.766 [DEBUG] [Thread-139056] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:35:43.766 [DEBUG] [Thread-139056] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:35:43.766 [DEBUG] [Thread-139056] [transport.py] [_log()] client lang: <none>
2026-01-01T02:35:43.766 [DEBUG] [Thread-139056] [transport.py] [_log()] server lang: <none>
2026-01-01T02:35:43.766 [DEBUG] [Thread-139056] [transport.py] [_log()] kex follows: False
2026-01-01T02:35:43.766 [DEBUG] [Thread-139056] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:35:43.766 [DEBUG] [Thread-139056] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:35:43.766 [DEBUG] [Thread-139056] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:35:43.766 [DEBUG] [Thread-139056] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:35:43.766 [DEBUG] [Thread-139056] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:35:43.766 [DEBUG] [Thread-139056] [transport.py] [_log()] Compression: none
2026-01-01T02:35:43.767 [DEBUG] [Thread-139056] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:35:43.826 [DEBUG] [Thread-139056] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:35:43.826 [DEBUG] [Thread-139056] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:35:43.827 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T02:35:43.827 [DEBUG] [Thread-139056] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T02:35:43.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:35:43.881 [DEBUG] [Thread-139056] [transport.py] [_log()] userauth is OK
2026-01-01T02:35:43.882 [DEBUG] [Thread-139056] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:35:43.882 [DEBUG] [Thread-139056] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:35:43.882 [DEBUG] [Thread-139056] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T02:35:43.882 [DEBUG] [Thread-139056] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:35:43.906 [INFO] [Thread-139056] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:35:43.907 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T02:35:43.907 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:35:44.235 [DEBUG] [Thread-139058 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:35:44.746 [DEBUG] [Thread-139056] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:35:44.746 [DEBUG] [Thread-139056] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:35:44.794 [DEBUG] [Thread-139056] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:35:44.794 [DEBUG] [Thread-139056] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:35:44.804 [DEBUG] [Thread-139056] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:35:44.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:35:44.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T02:35:44.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T02:35:44.831 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:35:44.831 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:35:44.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:35:44.840 [DEBUG] [Thread-139056] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:35:59.280 [DEBUG] [Thread-139059 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:36:04.303 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:36:04.304 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:36:05.413 [DEBUG] [Thread-139060 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:36:14.314 [DEBUG] [Thread-139061 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:36:14.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T02:36:14.840 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T02:36:14.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T02:36:15.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 2, 35, 47), 3.19, 80.98, 0.0, 12.0, 13.08, 0, 1, 0, 2, 0, 0),)
2026-01-01T02:36:15.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 02:35:47
2026-01-01T02:36:15.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T02:36:15.812 [DEBUG] [Thread-139062] [transport.py] [_log()] starting thread (client mode): 0xb957ba90
2026-01-01T02:36:15.812 [DEBUG] [Thread-139062] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:36:15.833 [DEBUG] [Thread-139062] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T02:36:15.833 [INFO] [Thread-139062] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T02:36:15.836 [DEBUG] [Thread-139062] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:36:15.836 [DEBUG] [Thread-139062] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T02:36:15.836 [DEBUG] [Thread-139062] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:36:15.836 [DEBUG] [Thread-139062] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:36:15.836 [DEBUG] [Thread-139062] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:36:15.836 [DEBUG] [Thread-139062] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:36:15.836 [DEBUG] [Thread-139062] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:36:15.836 [DEBUG] [Thread-139062] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:36:15.836 [DEBUG] [Thread-139062] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:36:15.836 [DEBUG] [Thread-139062] [transport.py] [_log()] client lang: <none>
2026-01-01T02:36:15.836 [DEBUG] [Thread-139062] [transport.py] [_log()] server lang: <none>
2026-01-01T02:36:15.836 [DEBUG] [Thread-139062] [transport.py] [_log()] kex follows: False
2026-01-01T02:36:15.836 [DEBUG] [Thread-139062] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:36:15.836 [DEBUG] [Thread-139062] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:36:15.836 [DEBUG] [Thread-139062] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:36:15.836 [DEBUG] [Thread-139062] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:36:15.836 [DEBUG] [Thread-139062] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:36:15.836 [DEBUG] [Thread-139062] [transport.py] [_log()] Compression: none
2026-01-01T02:36:15.836 [DEBUG] [Thread-139062] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:36:15.853 [DEBUG] [Thread-139062] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:36:15.854 [DEBUG] [Thread-139062] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:36:15.854 [DEBUG] [Thread-139062] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T02:36:15.854 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T02:36:15.855 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:36:15.856 [DEBUG] [Thread-139062] [transport.py] [_log()] userauth is OK
2026-01-01T02:36:15.856 [DEBUG] [Thread-139062] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:36:15.856 [DEBUG] [Thread-139062] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:36:15.857 [DEBUG] [Thread-139062] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T02:36:15.857 [DEBUG] [Thread-139062] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:36:15.874 [INFO] [Thread-139062] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:36:15.875 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:36:16.649 [DEBUG] [Thread-139062] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:36:16.649 [DEBUG] [Thread-139062] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:36:16.650 [DEBUG] [Thread-139062] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T02:36:16.691 [DEBUG] [Thread-139062] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:36:16.691 [DEBUG] [Thread-139062] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:36:16.694 [DEBUG] [Thread-139062] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:36:16.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:36:16.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T02:36:16.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T02:36:16.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T02:36:16.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:36:16.724 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T02:36:16.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:36:16.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:36:16.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T02:36:16.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.024784 -999.00  +13.20   6.91     83  +10.50 1 1 1 2 1     0    0 2.30 -23.28 ZNESW 3.6 6.9 208.4 9.6 13.9 -21.0 13.8 -20.6 13.6 -19.0 13.9 -20.1
2026-01-01T02:36:16.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T02:36:16.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T02:36:16.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.024784
2026-01-01T02:36:16.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T02:36:16.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T02:36:16.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T02:36:16.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T02:36:16.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T02:36:16.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T02:35:47', tmtdew=3.19, humidity=80.98, cloud=0.0, wind=12.0, temperature=13.08, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T02:35:47', seeing=0.92, atlas_timestamp='2026-01-01T00:35:41.338', atlas_cloud=1, atlas_rain=1, zp_data=[0.038750000000000284, 0.02325000000000088, 0.0832499999999996, 0.06649999999999956, 0.06949999999999967, 0.10625000000000107, 0.0860000000000003, 0.06825000000000081, 0.12399999999999878, 0.10599999999999987, 0.052250000000000796, 0.12400000000000055, 0.16699999999999982, 0.16724999999999923, 0.07049999999999912, 0.07150000000000034, 0.08174999999999955, 0.17349999999999888, 0.11499999999999844, 0.15424999999999933, 0.19799999999999862, 0.19874999999999865, 0.10625000000000107, 0.0962499999999995, 0.1269999999999989, 0.21149999999999913, 0.16225000000000023, 0.1695000000000011, 0.25400000000000045, 0.35300000000000065, 0.1850000000000005, 0.2190000000000012, 0.14324999999999832], zp_timestamp='2026-01-01T00:32:00')
2026-01-01T02:36:16.727 [DEBUG] [Thread-139062] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:36:16.826 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T02:36:16.839 [DEBUG] [Thread-139065] [transport.py] [_log()] starting thread (client mode): 0xb6b14c70
2026-01-01T02:36:16.839 [DEBUG] [Thread-139065] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:36:16.856 [DEBUG] [Thread-139065] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T02:36:16.856 [INFO] [Thread-139065] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T02:36:16.864 [DEBUG] [Thread-139065] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:36:16.864 [DEBUG] [Thread-139065] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T02:36:16.864 [DEBUG] [Thread-139065] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:36:16.864 [DEBUG] [Thread-139065] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:36:16.864 [DEBUG] [Thread-139065] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:36:16.865 [DEBUG] [Thread-139065] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:36:16.865 [DEBUG] [Thread-139065] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:36:16.865 [DEBUG] [Thread-139065] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:36:16.865 [DEBUG] [Thread-139065] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:36:16.865 [DEBUG] [Thread-139065] [transport.py] [_log()] client lang: <none>
2026-01-01T02:36:16.865 [DEBUG] [Thread-139065] [transport.py] [_log()] server lang: <none>
2026-01-01T02:36:16.865 [DEBUG] [Thread-139065] [transport.py] [_log()] kex follows: False
2026-01-01T02:36:16.865 [DEBUG] [Thread-139065] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:36:16.865 [DEBUG] [Thread-139065] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:36:16.865 [DEBUG] [Thread-139065] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:36:16.865 [DEBUG] [Thread-139065] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:36:16.865 [DEBUG] [Thread-139065] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:36:16.865 [DEBUG] [Thread-139065] [transport.py] [_log()] Compression: none
2026-01-01T02:36:16.865 [DEBUG] [Thread-139065] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:36:16.921 [DEBUG] [Thread-139065] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:36:16.922 [DEBUG] [Thread-139065] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:36:16.923 [DEBUG] [Thread-139065] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T02:36:16.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T02:36:16.924 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:36:16.978 [DEBUG] [Thread-139065] [transport.py] [_log()] userauth is OK
2026-01-01T02:36:16.978 [DEBUG] [Thread-139065] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:36:16.978 [DEBUG] [Thread-139065] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:36:16.978 [DEBUG] [Thread-139065] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T02:36:16.979 [DEBUG] [Thread-139065] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:36:16.998 [INFO] [Thread-139065] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:36:16.998 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T02:36:16.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:36:17.818 [DEBUG] [Thread-139065] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:36:17.818 [DEBUG] [Thread-139065] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:36:17.866 [DEBUG] [Thread-139065] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:36:17.866 [DEBUG] [Thread-139065] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:36:17.875 [DEBUG] [Thread-139065] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:36:17.885 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:36:17.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T02:36:17.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T02:36:17.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:36:17.904 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:36:17.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:36:17.912 [DEBUG] [Thread-139065] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:36:29.349 [DEBUG] [Thread-139067 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:36:44.400 [DEBUG] [Thread-139068 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:36:47.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T02:36:47.935 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T02:36:47.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T02:36:48.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 2, 36, 19), 3.19, 80.97, 0.0, 13.53, 13.06, 0, 1, 0, 2, 0, 0),)
2026-01-01T02:36:48.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 02:36:19
2026-01-01T02:36:48.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T02:36:48.922 [DEBUG] [Thread-139069] [transport.py] [_log()] starting thread (client mode): 0xb9579e40
2026-01-01T02:36:48.922 [DEBUG] [Thread-139069] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:36:48.943 [DEBUG] [Thread-139069] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T02:36:48.943 [INFO] [Thread-139069] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T02:36:48.945 [DEBUG] [Thread-139069] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:36:48.945 [DEBUG] [Thread-139069] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T02:36:48.945 [DEBUG] [Thread-139069] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:36:48.945 [DEBUG] [Thread-139069] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:36:48.945 [DEBUG] [Thread-139069] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:36:48.945 [DEBUG] [Thread-139069] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:36:48.945 [DEBUG] [Thread-139069] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:36:48.945 [DEBUG] [Thread-139069] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:36:48.945 [DEBUG] [Thread-139069] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:36:48.945 [DEBUG] [Thread-139069] [transport.py] [_log()] client lang: <none>
2026-01-01T02:36:48.945 [DEBUG] [Thread-139069] [transport.py] [_log()] server lang: <none>
2026-01-01T02:36:48.945 [DEBUG] [Thread-139069] [transport.py] [_log()] kex follows: False
2026-01-01T02:36:48.945 [DEBUG] [Thread-139069] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:36:48.945 [DEBUG] [Thread-139069] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:36:48.945 [DEBUG] [Thread-139069] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:36:48.945 [DEBUG] [Thread-139069] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:36:48.945 [DEBUG] [Thread-139069] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:36:48.945 [DEBUG] [Thread-139069] [transport.py] [_log()] Compression: none
2026-01-01T02:36:48.945 [DEBUG] [Thread-139069] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:36:48.963 [DEBUG] [Thread-139069] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:36:48.964 [DEBUG] [Thread-139069] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:36:48.965 [DEBUG] [Thread-139069] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T02:36:48.965 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T02:36:48.965 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:36:48.966 [DEBUG] [Thread-139069] [transport.py] [_log()] userauth is OK
2026-01-01T02:36:48.967 [DEBUG] [Thread-139069] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:36:48.967 [DEBUG] [Thread-139069] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:36:48.967 [DEBUG] [Thread-139069] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T02:36:48.967 [DEBUG] [Thread-139069] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:36:48.993 [INFO] [Thread-139069] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:36:48.993 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:36:49.608 [DEBUG] [Thread-139069] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:36:49.608 [DEBUG] [Thread-139069] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:36:49.609 [DEBUG] [Thread-139069] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T02:36:49.649 [DEBUG] [Thread-139069] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:36:49.649 [DEBUG] [Thread-139069] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:36:49.652 [DEBUG] [Thread-139069] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:36:49.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:36:49.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T02:36:49.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T02:36:49.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T02:36:49.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:36:49.677 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T02:36:49.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:36:49.677 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:36:49.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T02:36:49.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.025131 -999.00  +13.20   2.46     83  +10.50 1 1 1 2 1     0    0 2.37 -23.52 ZNESW 5.1 2.5 248.4 8.8 13.9 -20.9 13.9 -20.6 13.6 -19.0 13.9 -20.1
2026-01-01T02:36:49.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T02:36:49.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T02:36:49.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.025131
2026-01-01T02:36:49.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T02:36:49.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T02:36:49.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T02:36:49.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T02:36:49.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T02:36:49.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T02:36:19', tmtdew=3.19, humidity=80.97, cloud=0.0, wind=13.53, temperature=13.06, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T02:36:19', seeing=0.94, atlas_timestamp='2026-01-01T00:36:11.318', atlas_cloud=1, atlas_rain=1, zp_data=[0.038750000000000284, 0.02325000000000088, 0.0832499999999996, 0.06649999999999956, 0.06949999999999967, 0.10625000000000107, 0.0860000000000003, 0.06825000000000081, 0.12399999999999878, 0.10599999999999987, 0.052250000000000796, 0.12400000000000055, 0.16699999999999982, 0.16724999999999923, 0.07049999999999912, 0.07150000000000034, 0.08174999999999955, 0.17349999999999888, 0.11499999999999844, 0.15424999999999933, 0.19799999999999862, 0.19874999999999865, 0.10625000000000107, 0.0962499999999995, 0.1269999999999989, 0.21149999999999913, 0.16225000000000023, 0.1695000000000011, 0.25400000000000045, 0.35300000000000065, 0.1850000000000005, 0.2190000000000012, 0.14324999999999832], zp_timestamp='2026-01-01T00:32:00')
2026-01-01T02:36:49.680 [DEBUG] [Thread-139069] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:36:49.763 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T02:36:49.776 [DEBUG] [Thread-139072] [transport.py] [_log()] starting thread (client mode): 0xb9578fd0
2026-01-01T02:36:49.776 [DEBUG] [Thread-139072] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:36:49.790 [DEBUG] [Thread-139072] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T02:36:49.790 [INFO] [Thread-139072] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T02:36:49.798 [DEBUG] [Thread-139072] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:36:49.798 [DEBUG] [Thread-139072] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T02:36:49.798 [DEBUG] [Thread-139072] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:36:49.798 [DEBUG] [Thread-139072] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:36:49.799 [DEBUG] [Thread-139072] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:36:49.799 [DEBUG] [Thread-139072] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:36:49.799 [DEBUG] [Thread-139072] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:36:49.799 [DEBUG] [Thread-139072] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:36:49.799 [DEBUG] [Thread-139072] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:36:49.799 [DEBUG] [Thread-139072] [transport.py] [_log()] client lang: <none>
2026-01-01T02:36:49.799 [DEBUG] [Thread-139072] [transport.py] [_log()] server lang: <none>
2026-01-01T02:36:49.799 [DEBUG] [Thread-139072] [transport.py] [_log()] kex follows: False
2026-01-01T02:36:49.799 [DEBUG] [Thread-139072] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:36:49.799 [DEBUG] [Thread-139072] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:36:49.799 [DEBUG] [Thread-139072] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:36:49.799 [DEBUG] [Thread-139072] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:36:49.799 [DEBUG] [Thread-139072] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:36:49.799 [DEBUG] [Thread-139072] [transport.py] [_log()] Compression: none
2026-01-01T02:36:49.799 [DEBUG] [Thread-139072] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:36:49.858 [DEBUG] [Thread-139072] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:36:49.858 [DEBUG] [Thread-139072] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:36:49.859 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T02:36:49.859 [DEBUG] [Thread-139072] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T02:36:49.860 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:36:49.914 [DEBUG] [Thread-139072] [transport.py] [_log()] userauth is OK
2026-01-01T02:36:49.914 [DEBUG] [Thread-139072] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:36:49.914 [DEBUG] [Thread-139072] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:36:49.914 [DEBUG] [Thread-139072] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T02:36:49.914 [DEBUG] [Thread-139072] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:36:49.933 [INFO] [Thread-139072] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:36:49.933 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T02:36:49.934 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:36:50.769 [DEBUG] [Thread-139072] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:36:50.769 [DEBUG] [Thread-139072] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:36:50.817 [DEBUG] [Thread-139072] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:36:50.817 [DEBUG] [Thread-139072] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:36:50.827 [DEBUG] [Thread-139072] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:36:50.836 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:36: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')
2026-01-01T02:36:50.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T02:36:50.855 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:36:50.855 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:36:50.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:36:50.863 [DEBUG] [Thread-139072] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:36:59.434 [DEBUG] [Thread-139074 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:37:04.517 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:37:04.519 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:37:05.474 [DEBUG] [Thread-139075 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:37:14.485 [DEBUG] [Thread-139076 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:37:20.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T02:37:20.859 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T02:37:20.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T02:37:21.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 2, 36, 51), 3.2, 80.9, 0.0, 12.28, 13.13, 0, 1, 0, 2, 0, 0),)
2026-01-01T02:37:21.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 02:36:51
2026-01-01T02:37:21.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T02:37:21.838 [DEBUG] [Thread-139077] [transport.py] [_log()] starting thread (client mode): 0xb6bbddb0
2026-01-01T02:37:21.838 [DEBUG] [Thread-139077] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:37:21.859 [DEBUG] [Thread-139077] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T02:37:21.860 [INFO] [Thread-139077] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T02:37:21.863 [DEBUG] [Thread-139077] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:37:21.863 [DEBUG] [Thread-139077] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T02:37:21.863 [DEBUG] [Thread-139077] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:37:21.863 [DEBUG] [Thread-139077] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:37:21.864 [DEBUG] [Thread-139077] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:37:21.864 [DEBUG] [Thread-139077] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:37:21.864 [DEBUG] [Thread-139077] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:37:21.864 [DEBUG] [Thread-139077] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:37:21.864 [DEBUG] [Thread-139077] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:37:21.864 [DEBUG] [Thread-139077] [transport.py] [_log()] client lang: <none>
2026-01-01T02:37:21.864 [DEBUG] [Thread-139077] [transport.py] [_log()] server lang: <none>
2026-01-01T02:37:21.864 [DEBUG] [Thread-139077] [transport.py] [_log()] kex follows: False
2026-01-01T02:37:21.864 [DEBUG] [Thread-139077] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:37:21.864 [DEBUG] [Thread-139077] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:37:21.864 [DEBUG] [Thread-139077] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:37:21.865 [DEBUG] [Thread-139077] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:37:21.865 [DEBUG] [Thread-139077] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:37:21.865 [DEBUG] [Thread-139077] [transport.py] [_log()] Compression: none
2026-01-01T02:37:21.865 [DEBUG] [Thread-139077] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:37:21.886 [DEBUG] [Thread-139077] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:37:21.887 [DEBUG] [Thread-139077] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:37:21.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T02:37:21.888 [DEBUG] [Thread-139077] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T02:37:21.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:37:21.890 [DEBUG] [Thread-139077] [transport.py] [_log()] userauth is OK
2026-01-01T02:37:21.890 [DEBUG] [Thread-139077] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:37:21.890 [DEBUG] [Thread-139077] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:37:21.890 [DEBUG] [Thread-139077] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T02:37:21.890 [DEBUG] [Thread-139077] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:37:21.925 [INFO] [Thread-139077] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:37:21.926 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:37:22.534 [DEBUG] [Thread-139077] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:37:22.534 [DEBUG] [Thread-139077] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:37:22.534 [DEBUG] [Thread-139077] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T02:37:22.575 [DEBUG] [Thread-139077] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:37:22.575 [DEBUG] [Thread-139077] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:37:22.579 [DEBUG] [Thread-139077] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:37:22.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:37:22.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T02:37:22.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T02:37:22.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T02:37:22.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:37:22.601 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T02:37:22.601 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:37:22.601 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:37:22.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T02:37:22.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.025479 -999.00  +13.20   5.64     83  +10.50 1 1 1 2 1     0    0 2.29 -22.65 ZNESW 6.0 5.6 247.9 9.2 14.0 -20.9 13.8 -20.6 13.6 -19.0 13.8 -20.2
2026-01-01T02:37:22.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T02:37:22.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T02:37:22.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.025479
2026-01-01T02:37:22.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T02:37:22.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T02:37:22.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T02:37:22.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T02:37:22.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T02:37:22.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T02:36:51', tmtdew=3.2, humidity=80.9, cloud=0.0, wind=12.28, temperature=13.13, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T02:36:51', seeing=1.11, atlas_timestamp='2026-01-01T00:36:41.386', atlas_cloud=1, atlas_rain=1, zp_data=[0.04374999999999929, 0.02325000000000088, 0.06574999999999953, 0.02949999999999875, 0.007500000000000284, 0.05375000000000085, 0.1479999999999997, 0.10625000000000107, 0.13349999999999795, 0.12700000000000067, 0.03725000000000023, 0.07850000000000001, 0.13899999999999935, 0.1332500000000003, 0.11599999999999966, 0.1659999999999986, 0.12924999999999898, 0.1775000000000002, 0.12599999999999945, 0.1667500000000004, 0.16949999999999932, 0.11774999999999913, 0.11875000000000213, 0.18324999999999925, 0.1504999999999992, 0.2264999999999997, 0.16025000000000134, 0.2085000000000008, 0.31400000000000006, 0.20700000000000074, 0.4155000000000024, 0.23300000000000054, 0.16974999999999874], zp_timestamp='2026-01-01T00:35:00')
2026-01-01T02:37:22.604 [DEBUG] [Thread-139077] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:37:22.686 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T02:37:22.700 [DEBUG] [Thread-139080] [transport.py] [_log()] starting thread (client mode): 0xb6b14430
2026-01-01T02:37:22.700 [DEBUG] [Thread-139080] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:37:22.715 [DEBUG] [Thread-139080] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T02:37:22.715 [INFO] [Thread-139080] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T02:37:22.723 [DEBUG] [Thread-139080] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:37:22.723 [DEBUG] [Thread-139080] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T02:37:22.723 [DEBUG] [Thread-139080] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:37:22.723 [DEBUG] [Thread-139080] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:37:22.723 [DEBUG] [Thread-139080] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:37:22.723 [DEBUG] [Thread-139080] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:37:22.724 [DEBUG] [Thread-139080] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:37:22.724 [DEBUG] [Thread-139080] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:37:22.724 [DEBUG] [Thread-139080] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:37:22.724 [DEBUG] [Thread-139080] [transport.py] [_log()] client lang: <none>
2026-01-01T02:37:22.724 [DEBUG] [Thread-139080] [transport.py] [_log()] server lang: <none>
2026-01-01T02:37:22.724 [DEBUG] [Thread-139080] [transport.py] [_log()] kex follows: False
2026-01-01T02:37:22.724 [DEBUG] [Thread-139080] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:37:22.724 [DEBUG] [Thread-139080] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:37:22.724 [DEBUG] [Thread-139080] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:37:22.724 [DEBUG] [Thread-139080] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:37:22.724 [DEBUG] [Thread-139080] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:37:22.724 [DEBUG] [Thread-139080] [transport.py] [_log()] Compression: none
2026-01-01T02:37:22.724 [DEBUG] [Thread-139080] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:37:22.781 [DEBUG] [Thread-139080] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:37:22.782 [DEBUG] [Thread-139080] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:37:22.782 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T02:37:22.783 [DEBUG] [Thread-139080] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T02:37:22.783 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:37:22.841 [DEBUG] [Thread-139080] [transport.py] [_log()] userauth is OK
2026-01-01T02:37:22.841 [DEBUG] [Thread-139080] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:37:22.841 [DEBUG] [Thread-139080] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:37:22.841 [DEBUG] [Thread-139080] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T02:37:22.841 [DEBUG] [Thread-139080] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:37:22.861 [INFO] [Thread-139080] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:37:22.862 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T02:37:22.862 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:37:23.675 [DEBUG] [Thread-139080] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:37:23.675 [DEBUG] [Thread-139080] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:37:23.723 [DEBUG] [Thread-139080] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:37:23.723 [DEBUG] [Thread-139080] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:37:23.732 [DEBUG] [Thread-139080] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:37:23.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:37:23.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T02:37:23.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T02:37:23.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:37:23.761 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:37:23.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:37:23.769 [DEBUG] [Thread-139080] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:37:29.513 [DEBUG] [Thread-139082 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:37:44.562 [DEBUG] [Thread-139083 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:37:53.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T02:37:53.791 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T02:37:53.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T02:37:54.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 2, 37, 23), 3.21, 80.88, 0.0, 11.33, 13.13, 0, 1, 0, 2, 0, 0),)
2026-01-01T02:37:54.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 02:37:23
2026-01-01T02:37:54.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T02:37:54.812 [DEBUG] [Thread-139084] [transport.py] [_log()] starting thread (client mode): 0xb6b163b0
2026-01-01T02:37:54.812 [DEBUG] [Thread-139084] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:37:54.830 [DEBUG] [Thread-139084] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T02:37:54.831 [INFO] [Thread-139084] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T02:37:54.834 [DEBUG] [Thread-139084] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:37:54.834 [DEBUG] [Thread-139084] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T02:37:54.834 [DEBUG] [Thread-139084] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:37:54.834 [DEBUG] [Thread-139084] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:37:54.834 [DEBUG] [Thread-139084] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:37:54.834 [DEBUG] [Thread-139084] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:37:54.834 [DEBUG] [Thread-139084] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:37:54.834 [DEBUG] [Thread-139084] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:37:54.834 [DEBUG] [Thread-139084] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:37:54.834 [DEBUG] [Thread-139084] [transport.py] [_log()] client lang: <none>
2026-01-01T02:37:54.834 [DEBUG] [Thread-139084] [transport.py] [_log()] server lang: <none>
2026-01-01T02:37:54.834 [DEBUG] [Thread-139084] [transport.py] [_log()] kex follows: False
2026-01-01T02:37:54.834 [DEBUG] [Thread-139084] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:37:54.834 [DEBUG] [Thread-139084] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:37:54.834 [DEBUG] [Thread-139084] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:37:54.834 [DEBUG] [Thread-139084] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:37:54.834 [DEBUG] [Thread-139084] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:37:54.834 [DEBUG] [Thread-139084] [transport.py] [_log()] Compression: none
2026-01-01T02:37:54.834 [DEBUG] [Thread-139084] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:37:54.848 [DEBUG] [Thread-139084] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:37:54.849 [DEBUG] [Thread-139084] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:37:54.849 [DEBUG] [Thread-139084] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T02:37:54.849 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T02:37:54.849 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:37:54.849 [DEBUG] [Thread-139084] [transport.py] [_log()] userauth is OK
2026-01-01T02:37:54.849 [DEBUG] [Thread-139084] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:37:54.849 [DEBUG] [Thread-139084] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:37:54.849 [DEBUG] [Thread-139084] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T02:37:54.849 [DEBUG] [Thread-139084] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:37:54.864 [INFO] [Thread-139084] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:37:54.865 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:37:55.500 [DEBUG] [Thread-139084] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:37:55.501 [DEBUG] [Thread-139084] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:37:55.501 [DEBUG] [Thread-139084] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T02:37:55.541 [DEBUG] [Thread-139084] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:37:55.541 [DEBUG] [Thread-139084] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:37:55.543 [DEBUG] [Thread-139084] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:37:55.558 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:37:55.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T02:37:55.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T02:37:55.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T02:37:55.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:37:55.563 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T02:37:55.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:37:55.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:37:55.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T02:37:55.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.025826 -999.00  +13.20   4.63     83  +10.50 1 1 1 2 1     0    0 2.30 -22.79 ZNESW 7.1 4.6 189.1 11.5 14.0 -21.0 13.8 -20.7 13.7 -19.0 13.9 -20.0
2026-01-01T02:37:55.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T02:37:55.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T02:37:55.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.025826
2026-01-01T02:37:55.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T02:37:55.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T02:37:55.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T02:37:55.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T02:37:55.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T02:37:55.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T02:37:23', tmtdew=3.21, humidity=80.88, cloud=0.0, wind=11.33, temperature=13.13, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T02:37:23', seeing=0.86, atlas_timestamp='2026-01-01T00:37:11.366', atlas_cloud=1, atlas_rain=1, zp_data=[0.04374999999999929, 0.02325000000000088, 0.06574999999999953, 0.02949999999999875, 0.007500000000000284, 0.05375000000000085, 0.1479999999999997, 0.10625000000000107, 0.13349999999999795, 0.12700000000000067, 0.03725000000000023, 0.07850000000000001, 0.13899999999999935, 0.1332500000000003, 0.11599999999999966, 0.1659999999999986, 0.12924999999999898, 0.1775000000000002, 0.12599999999999945, 0.1667500000000004, 0.16949999999999932, 0.11774999999999913, 0.11875000000000213, 0.18324999999999925, 0.1504999999999992, 0.2264999999999997, 0.16025000000000134, 0.2085000000000008, 0.31400000000000006, 0.20700000000000074, 0.4155000000000024, 0.23300000000000054, 0.16974999999999874], zp_timestamp='2026-01-01T00:35:00')
2026-01-01T02:37:55.564 [DEBUG] [Thread-139084] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:37:55.638 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T02:37:55.651 [DEBUG] [Thread-139087] [transport.py] [_log()] starting thread (client mode): 0xb95f3ac0
2026-01-01T02:37:55.651 [DEBUG] [Thread-139087] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:37:55.666 [DEBUG] [Thread-139087] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T02:37:55.666 [INFO] [Thread-139087] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T02:37:55.674 [DEBUG] [Thread-139087] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:37:55.674 [DEBUG] [Thread-139087] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T02:37:55.674 [DEBUG] [Thread-139087] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:37:55.674 [DEBUG] [Thread-139087] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:37:55.674 [DEBUG] [Thread-139087] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:37:55.674 [DEBUG] [Thread-139087] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:37:55.674 [DEBUG] [Thread-139087] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:37:55.674 [DEBUG] [Thread-139087] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:37:55.674 [DEBUG] [Thread-139087] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:37:55.674 [DEBUG] [Thread-139087] [transport.py] [_log()] client lang: <none>
2026-01-01T02:37:55.674 [DEBUG] [Thread-139087] [transport.py] [_log()] server lang: <none>
2026-01-01T02:37:55.674 [DEBUG] [Thread-139087] [transport.py] [_log()] kex follows: False
2026-01-01T02:37:55.674 [DEBUG] [Thread-139087] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:37:55.674 [DEBUG] [Thread-139087] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:37:55.674 [DEBUG] [Thread-139087] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:37:55.674 [DEBUG] [Thread-139087] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:37:55.674 [DEBUG] [Thread-139087] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:37:55.674 [DEBUG] [Thread-139087] [transport.py] [_log()] Compression: none
2026-01-01T02:37:55.674 [DEBUG] [Thread-139087] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:37:55.736 [DEBUG] [Thread-139087] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:37:55.736 [DEBUG] [Thread-139087] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:37:55.736 [DEBUG] [Thread-139087] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T02:37:55.736 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T02:37:55.736 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:37:55.793 [DEBUG] [Thread-139087] [transport.py] [_log()] userauth is OK
2026-01-01T02:37:55.793 [DEBUG] [Thread-139087] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:37:55.793 [DEBUG] [Thread-139087] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:37:55.793 [DEBUG] [Thread-139087] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T02:37:55.793 [DEBUG] [Thread-139087] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:37:55.807 [INFO] [Thread-139087] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:37:55.807 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T02:37:55.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:37:56.609 [DEBUG] [Thread-139087] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:37:56.609 [DEBUG] [Thread-139087] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:37:56.656 [DEBUG] [Thread-139087] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:37:56.656 [DEBUG] [Thread-139087] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:37:56.664 [DEBUG] [Thread-139087] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:37:56.672 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:37:56.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T02:37:56.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T02:37:56.688 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:37:56.688 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:37:56.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:37:56.696 [DEBUG] [Thread-139087] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:37:59.595 [DEBUG] [Thread-139089 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:38:04.719 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:38:04.720 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:38:05.541 [DEBUG] [Thread-139090 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:38:14.648 [DEBUG] [Thread-139091 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:38:26.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T02:38:26.719 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T02:38:26.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T02:38:27.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 2, 37, 55), 3.18, 80.74, 0.0, 12.32, 13.1, 0, 1, 0, 2, 0, 0),)
2026-01-01T02:38:27.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 02:37:55
2026-01-01T02:38:27.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T02:38:27.703 [DEBUG] [Thread-139092] [transport.py] [_log()] starting thread (client mode): 0xb9578910
2026-01-01T02:38:27.703 [DEBUG] [Thread-139092] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:38:27.723 [DEBUG] [Thread-139092] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T02:38:27.723 [INFO] [Thread-139092] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T02:38:27.726 [DEBUG] [Thread-139092] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:38:27.726 [DEBUG] [Thread-139092] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T02:38:27.726 [DEBUG] [Thread-139092] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:38:27.726 [DEBUG] [Thread-139092] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:38:27.726 [DEBUG] [Thread-139092] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:38:27.726 [DEBUG] [Thread-139092] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:38:27.726 [DEBUG] [Thread-139092] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:38:27.726 [DEBUG] [Thread-139092] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:38:27.726 [DEBUG] [Thread-139092] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:38:27.726 [DEBUG] [Thread-139092] [transport.py] [_log()] client lang: <none>
2026-01-01T02:38:27.726 [DEBUG] [Thread-139092] [transport.py] [_log()] server lang: <none>
2026-01-01T02:38:27.726 [DEBUG] [Thread-139092] [transport.py] [_log()] kex follows: False
2026-01-01T02:38:27.726 [DEBUG] [Thread-139092] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:38:27.726 [DEBUG] [Thread-139092] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:38:27.726 [DEBUG] [Thread-139092] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:38:27.726 [DEBUG] [Thread-139092] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:38:27.726 [DEBUG] [Thread-139092] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:38:27.726 [DEBUG] [Thread-139092] [transport.py] [_log()] Compression: none
2026-01-01T02:38:27.726 [DEBUG] [Thread-139092] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:38:27.743 [DEBUG] [Thread-139092] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:38:27.743 [DEBUG] [Thread-139092] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:38:27.744 [DEBUG] [Thread-139092] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T02:38:27.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T02:38:27.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:38:27.746 [DEBUG] [Thread-139092] [transport.py] [_log()] userauth is OK
2026-01-01T02:38:27.747 [DEBUG] [Thread-139092] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:38:27.747 [DEBUG] [Thread-139092] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:38:27.747 [DEBUG] [Thread-139092] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T02:38:27.747 [DEBUG] [Thread-139092] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:38:27.783 [INFO] [Thread-139092] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:38:27.784 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:38:28.391 [DEBUG] [Thread-139092] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:38:28.391 [DEBUG] [Thread-139092] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:38:28.391 [DEBUG] [Thread-139092] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T02:38:28.432 [DEBUG] [Thread-139092] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:38:28.432 [DEBUG] [Thread-139092] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:38:28.435 [DEBUG] [Thread-139092] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:38:28.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:38:28.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T02:38:28.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T02:38:28.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T02:38:28.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:38:28.454 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T02:38:28.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:38:28.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:38:28.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T02:38:28.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.026173 -999.00  +13.20   5.04     83  +10.50 1 1 1 2 1     0    0 2.23 -23.93 ZNESW 5.8 5.0 224.8 13.4 14.0 -21.0 13.8 -20.5 13.6 -19.0 13.9 -20.1
2026-01-01T02:38:28.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T02:38:28.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T02:38:28.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.026173
2026-01-01T02:38:28.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T02:38:28.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T02:38:28.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T02:38:28.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T02:38:28.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T02:38:28.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T02:37:55', tmtdew=3.18, humidity=80.74, cloud=0.0, wind=12.32, temperature=13.1, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T02:37:56', seeing=0.86, atlas_timestamp='2026-01-01T00:37:41.347', atlas_cloud=1, atlas_rain=1, zp_data=[0.04374999999999929, 0.02325000000000088, 0.06574999999999953, 0.02949999999999875, 0.007500000000000284, 0.05375000000000085, 0.1479999999999997, 0.10625000000000107, 0.13349999999999795, 0.12700000000000067, 0.03725000000000023, 0.07850000000000001, 0.13899999999999935, 0.1332500000000003, 0.11599999999999966, 0.1659999999999986, 0.12924999999999898, 0.1775000000000002, 0.12599999999999945, 0.1667500000000004, 0.16949999999999932, 0.11774999999999913, 0.11875000000000213, 0.18324999999999925, 0.1504999999999992, 0.2264999999999997, 0.16025000000000134, 0.2085000000000008, 0.31400000000000006, 0.20700000000000074, 0.4155000000000024, 0.23300000000000054, 0.16974999999999874], zp_timestamp='2026-01-01T00:35:00')
2026-01-01T02:38:28.455 [DEBUG] [Thread-139092] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:38:28.529 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T02:38:28.545 [DEBUG] [Thread-139095] [transport.py] [_log()] starting thread (client mode): 0xb95b3670
2026-01-01T02:38:28.545 [DEBUG] [Thread-139095] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:38:28.560 [DEBUG] [Thread-139095] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T02:38:28.560 [INFO] [Thread-139095] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T02:38:28.568 [DEBUG] [Thread-139095] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:38:28.568 [DEBUG] [Thread-139095] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T02:38:28.568 [DEBUG] [Thread-139095] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:38:28.568 [DEBUG] [Thread-139095] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:38:28.568 [DEBUG] [Thread-139095] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:38:28.568 [DEBUG] [Thread-139095] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:38:28.568 [DEBUG] [Thread-139095] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:38:28.568 [DEBUG] [Thread-139095] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:38:28.568 [DEBUG] [Thread-139095] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:38:28.568 [DEBUG] [Thread-139095] [transport.py] [_log()] client lang: <none>
2026-01-01T02:38:28.568 [DEBUG] [Thread-139095] [transport.py] [_log()] server lang: <none>
2026-01-01T02:38:28.568 [DEBUG] [Thread-139095] [transport.py] [_log()] kex follows: False
2026-01-01T02:38:28.568 [DEBUG] [Thread-139095] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:38:28.568 [DEBUG] [Thread-139095] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:38:28.568 [DEBUG] [Thread-139095] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:38:28.568 [DEBUG] [Thread-139095] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:38:28.568 [DEBUG] [Thread-139095] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:38:28.568 [DEBUG] [Thread-139095] [transport.py] [_log()] Compression: none
2026-01-01T02:38:28.568 [DEBUG] [Thread-139095] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:38:28.623 [DEBUG] [Thread-139095] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:38:28.623 [DEBUG] [Thread-139095] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:38:28.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T02:38:28.624 [DEBUG] [Thread-139095] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T02:38:28.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:38:28.687 [DEBUG] [Thread-139095] [transport.py] [_log()] userauth is OK
2026-01-01T02:38:28.687 [DEBUG] [Thread-139095] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:38:28.687 [DEBUG] [Thread-139095] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:38:28.687 [DEBUG] [Thread-139095] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T02:38:28.687 [DEBUG] [Thread-139095] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:38:28.701 [INFO] [Thread-139095] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:38:28.701 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T02:38:28.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:38:29.540 [DEBUG] [Thread-139095] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:38:29.540 [DEBUG] [Thread-139095] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:38:29.587 [DEBUG] [Thread-139095] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:38:29.587 [DEBUG] [Thread-139095] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:38:29.596 [DEBUG] [Thread-139095] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:38:29.604 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:38:29.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T02:38:29.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T02:38:29.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:38:29.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:38:29.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:38:29.628 [DEBUG] [Thread-139095] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:38:29.682 [DEBUG] [Thread-139097 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:38:44.728 [DEBUG] [Thread-139098 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:38:59.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T02:38:59.634 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T02:38:59.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T02:38:59.763 [DEBUG] [Thread-139099 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:39:00.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 2, 38, 28), 3.19, 80.7, 0.0, 11.77, 13.1, 0, 1, 0, 2, 0, 0),)
2026-01-01T02:39:00.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 02:38:28
2026-01-01T02:39:00.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T02:39:00.628 [DEBUG] [Thread-139100] [transport.py] [_log()] starting thread (client mode): 0xb9579f00
2026-01-01T02:39:00.629 [DEBUG] [Thread-139100] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:39:00.644 [DEBUG] [Thread-139100] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T02:39:00.644 [INFO] [Thread-139100] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T02:39:00.647 [DEBUG] [Thread-139100] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:39:00.648 [DEBUG] [Thread-139100] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T02:39:00.648 [DEBUG] [Thread-139100] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:39:00.648 [DEBUG] [Thread-139100] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:39:00.648 [DEBUG] [Thread-139100] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:39:00.648 [DEBUG] [Thread-139100] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:39:00.648 [DEBUG] [Thread-139100] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:39:00.648 [DEBUG] [Thread-139100] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:39:00.648 [DEBUG] [Thread-139100] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:39:00.648 [DEBUG] [Thread-139100] [transport.py] [_log()] client lang: <none>
2026-01-01T02:39:00.648 [DEBUG] [Thread-139100] [transport.py] [_log()] server lang: <none>
2026-01-01T02:39:00.648 [DEBUG] [Thread-139100] [transport.py] [_log()] kex follows: False
2026-01-01T02:39:00.648 [DEBUG] [Thread-139100] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:39:00.648 [DEBUG] [Thread-139100] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:39:00.648 [DEBUG] [Thread-139100] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:39:00.648 [DEBUG] [Thread-139100] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:39:00.648 [DEBUG] [Thread-139100] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:39:00.648 [DEBUG] [Thread-139100] [transport.py] [_log()] Compression: none
2026-01-01T02:39:00.648 [DEBUG] [Thread-139100] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:39:00.663 [DEBUG] [Thread-139100] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:39:00.663 [DEBUG] [Thread-139100] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:39:00.663 [DEBUG] [Thread-139100] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T02:39:00.663 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T02:39:00.663 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:39:00.664 [DEBUG] [Thread-139100] [transport.py] [_log()] userauth is OK
2026-01-01T02:39:00.664 [DEBUG] [Thread-139100] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:39:00.664 [DEBUG] [Thread-139100] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:39:00.664 [DEBUG] [Thread-139100] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T02:39:00.664 [DEBUG] [Thread-139100] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:39:00.673 [INFO] [Thread-139100] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:39:00.673 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:39:01.335 [DEBUG] [Thread-139100] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:39:01.335 [DEBUG] [Thread-139100] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:39:01.335 [DEBUG] [Thread-139100] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T02:39:01.376 [DEBUG] [Thread-139100] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:39:01.376 [DEBUG] [Thread-139100] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:39:01.378 [DEBUG] [Thread-139100] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:39:01.390 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:39:01.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T02:39:01.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T02:39:01.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T02:39:01.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:39:01.394 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T02:39:01.394 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:39:01.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:39:01.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T02:39:01.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.026520 -999.00  +13.20   3.82     83  +10.50 1 1 1 2 1     0    0 2.29 -23.63 ZNESW 5.5 3.8 219.3 8.6 13.9 -21.0 13.8 -20.4 13.7 -19.0 13.8 -20.0
2026-01-01T02:39:01.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T02:39:01.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T02:39:01.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.026520
2026-01-01T02:39:01.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T02:39:01.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T02:39:01.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T02:39:01.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T02:39:01.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T02:39:01.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T02:38:28', tmtdew=3.19, humidity=80.7, cloud=0.0, wind=11.77, temperature=13.1, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T02:38:28', seeing=0.86, atlas_timestamp='2026-01-01T00:38:11.328', atlas_cloud=1, atlas_rain=1, zp_data=[0.04374999999999929, 0.02325000000000088, 0.06574999999999953, 0.02949999999999875, 0.007500000000000284, 0.05375000000000085, 0.1479999999999997, 0.10625000000000107, 0.13349999999999795, 0.12700000000000067, 0.03725000000000023, 0.07850000000000001, 0.13899999999999935, 0.1332500000000003, 0.11599999999999966, 0.1659999999999986, 0.12924999999999898, 0.1775000000000002, 0.12599999999999945, 0.1667500000000004, 0.16949999999999932, 0.11774999999999913, 0.11875000000000213, 0.18324999999999925, 0.1504999999999992, 0.2264999999999997, 0.16025000000000134, 0.2085000000000008, 0.31400000000000006, 0.20700000000000074, 0.4155000000000024, 0.23300000000000054, 0.16974999999999874], zp_timestamp='2026-01-01T00:35:00')
2026-01-01T02:39:01.396 [DEBUG] [Thread-139100] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:39:01.469 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T02:39:01.481 [DEBUG] [Thread-139103] [transport.py] [_log()] starting thread (client mode): 0xb6ba2e90
2026-01-01T02:39:01.481 [DEBUG] [Thread-139103] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:39:01.495 [DEBUG] [Thread-139103] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T02:39:01.495 [INFO] [Thread-139103] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T02:39:01.503 [DEBUG] [Thread-139103] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:39:01.503 [DEBUG] [Thread-139103] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T02:39:01.503 [DEBUG] [Thread-139103] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:39:01.503 [DEBUG] [Thread-139103] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:39:01.503 [DEBUG] [Thread-139103] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:39:01.503 [DEBUG] [Thread-139103] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:39:01.503 [DEBUG] [Thread-139103] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:39:01.503 [DEBUG] [Thread-139103] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:39:01.503 [DEBUG] [Thread-139103] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:39:01.503 [DEBUG] [Thread-139103] [transport.py] [_log()] client lang: <none>
2026-01-01T02:39:01.503 [DEBUG] [Thread-139103] [transport.py] [_log()] server lang: <none>
2026-01-01T02:39:01.503 [DEBUG] [Thread-139103] [transport.py] [_log()] kex follows: False
2026-01-01T02:39:01.503 [DEBUG] [Thread-139103] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:39:01.503 [DEBUG] [Thread-139103] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:39:01.503 [DEBUG] [Thread-139103] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:39:01.503 [DEBUG] [Thread-139103] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:39:01.503 [DEBUG] [Thread-139103] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:39:01.503 [DEBUG] [Thread-139103] [transport.py] [_log()] Compression: none
2026-01-01T02:39:01.503 [DEBUG] [Thread-139103] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:39:01.561 [DEBUG] [Thread-139103] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:39:01.561 [DEBUG] [Thread-139103] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:39:01.561 [DEBUG] [Thread-139103] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T02:39:01.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T02:39:01.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:39:01.617 [DEBUG] [Thread-139103] [transport.py] [_log()] userauth is OK
2026-01-01T02:39:01.617 [DEBUG] [Thread-139103] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:39:01.617 [DEBUG] [Thread-139103] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:39:01.617 [DEBUG] [Thread-139103] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T02:39:01.618 [DEBUG] [Thread-139103] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:39:01.632 [INFO] [Thread-139103] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:39:01.632 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T02:39:01.632 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:39:02.529 [DEBUG] [Thread-139103] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:39:02.529 [DEBUG] [Thread-139103] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:39:02.577 [DEBUG] [Thread-139103] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:39:02.577 [DEBUG] [Thread-139103] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:39:02.586 [DEBUG] [Thread-139103] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:39:02.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:39:02.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T02:39:02.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T02:39:02.611 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:39:02.611 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:39:02.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:39:02.620 [DEBUG] [Thread-139103] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:39:04.921 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:39:04.922 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:39:05.613 [DEBUG] [Thread-139105 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:39:14.794 [DEBUG] [Thread-139106 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:39:29.843 [DEBUG] [Thread-139107 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:39:32.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T02:39:32.626 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T02:39:32.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T02:39:33.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 2, 38, 28), 3.19, 80.7, 0.0, 9.97, 13.1, 0, 1, 0, 2, 0, 0),)
2026-01-01T02:39:33.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 02:38:28
2026-01-01T02:39:33.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T02:39:33.710 [DEBUG] [Thread-139108] [transport.py] [_log()] starting thread (client mode): 0xb6b14580
2026-01-01T02:39:33.710 [DEBUG] [Thread-139108] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:39:33.731 [DEBUG] [Thread-139108] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T02:39:33.731 [INFO] [Thread-139108] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T02:39:33.734 [DEBUG] [Thread-139108] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:39:33.734 [DEBUG] [Thread-139108] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T02:39:33.734 [DEBUG] [Thread-139108] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:39:33.734 [DEBUG] [Thread-139108] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:39:33.734 [DEBUG] [Thread-139108] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:39:33.734 [DEBUG] [Thread-139108] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:39:33.734 [DEBUG] [Thread-139108] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:39:33.734 [DEBUG] [Thread-139108] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:39:33.734 [DEBUG] [Thread-139108] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:39:33.734 [DEBUG] [Thread-139108] [transport.py] [_log()] client lang: <none>
2026-01-01T02:39:33.734 [DEBUG] [Thread-139108] [transport.py] [_log()] server lang: <none>
2026-01-01T02:39:33.734 [DEBUG] [Thread-139108] [transport.py] [_log()] kex follows: False
2026-01-01T02:39:33.734 [DEBUG] [Thread-139108] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:39:33.734 [DEBUG] [Thread-139108] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:39:33.734 [DEBUG] [Thread-139108] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:39:33.734 [DEBUG] [Thread-139108] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:39:33.734 [DEBUG] [Thread-139108] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:39:33.734 [DEBUG] [Thread-139108] [transport.py] [_log()] Compression: none
2026-01-01T02:39:33.735 [DEBUG] [Thread-139108] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:39:33.751 [DEBUG] [Thread-139108] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:39:33.752 [DEBUG] [Thread-139108] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:39:33.752 [DEBUG] [Thread-139108] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T02:39:33.752 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T02:39:33.752 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:39:33.753 [DEBUG] [Thread-139108] [transport.py] [_log()] userauth is OK
2026-01-01T02:39:33.753 [DEBUG] [Thread-139108] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:39:33.753 [DEBUG] [Thread-139108] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:39:33.753 [DEBUG] [Thread-139108] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T02:39:33.753 [DEBUG] [Thread-139108] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:39:33.769 [INFO] [Thread-139108] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:39:33.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:39:34.414 [DEBUG] [Thread-139108] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:39:34.414 [DEBUG] [Thread-139108] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:39:34.414 [DEBUG] [Thread-139108] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T02:39:34.455 [DEBUG] [Thread-139108] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:39:34.455 [DEBUG] [Thread-139108] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:39:34.458 [DEBUG] [Thread-139108] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:39:34.469 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:39:34.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T02:39:34.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T02:39:34.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T02:39:34.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:39:34.479 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T02:39:34.479 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:39:34.479 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:39:34.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T02:39:34.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.027215 -999.00  +13.20   5.31     83  +10.50 1 1 1 2 1     0    0 2.22 -22.68 ZNESW 4.8 5.3 197.5 8.7 13.9 -20.8 13.8 -20.5 13.6 -19.0 13.9 -20.0
2026-01-01T02:39:34.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T02:39:34.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T02:39:34.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.027215
2026-01-01T02:39:34.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T02:39:34.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T02:39:34.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T02:39:34.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T02:39:34.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T02:39:34.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T02:38:28', tmtdew=3.19, humidity=80.7, cloud=0.0, wind=9.97, temperature=13.1, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T02:39:32', seeing=0.93, atlas_timestamp='2026-01-01T00:39:11.376', atlas_cloud=1, atlas_rain=1, zp_data=[0.04374999999999929, 0.02325000000000088, 0.06574999999999953, 0.02949999999999875, 0.007500000000000284, 0.05375000000000085, 0.1479999999999997, 0.10625000000000107, 0.13349999999999795, 0.12700000000000067, 0.03725000000000023, 0.07850000000000001, 0.13899999999999935, 0.1332500000000003, 0.11599999999999966, 0.1659999999999986, 0.12924999999999898, 0.1775000000000002, 0.12599999999999945, 0.1667500000000004, 0.16949999999999932, 0.11774999999999913, 0.11875000000000213, 0.18324999999999925, 0.1504999999999992, 0.2264999999999997, 0.16025000000000134, 0.2085000000000008, 0.31400000000000006, 0.20700000000000074, 0.4155000000000024, 0.23300000000000054, 0.16974999999999874], zp_timestamp='2026-01-01T00:35:00')
2026-01-01T02:39:34.482 [DEBUG] [Thread-139108] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:39:34.573 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T02:39:34.585 [DEBUG] [Thread-139111] [transport.py] [_log()] starting thread (client mode): 0xb6b145b0
2026-01-01T02:39:34.586 [DEBUG] [Thread-139111] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:39:34.601 [DEBUG] [Thread-139111] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T02:39:34.601 [INFO] [Thread-139111] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T02:39:34.609 [DEBUG] [Thread-139111] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:39:34.609 [DEBUG] [Thread-139111] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T02:39:34.609 [DEBUG] [Thread-139111] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:39:34.610 [DEBUG] [Thread-139111] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:39:34.610 [DEBUG] [Thread-139111] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:39:34.610 [DEBUG] [Thread-139111] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:39:34.610 [DEBUG] [Thread-139111] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:39:34.610 [DEBUG] [Thread-139111] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:39:34.610 [DEBUG] [Thread-139111] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:39:34.610 [DEBUG] [Thread-139111] [transport.py] [_log()] client lang: <none>
2026-01-01T02:39:34.610 [DEBUG] [Thread-139111] [transport.py] [_log()] server lang: <none>
2026-01-01T02:39:34.610 [DEBUG] [Thread-139111] [transport.py] [_log()] kex follows: False
2026-01-01T02:39:34.611 [DEBUG] [Thread-139111] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:39:34.611 [DEBUG] [Thread-139111] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:39:34.611 [DEBUG] [Thread-139111] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:39:34.611 [DEBUG] [Thread-139111] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:39:34.611 [DEBUG] [Thread-139111] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:39:34.611 [DEBUG] [Thread-139111] [transport.py] [_log()] Compression: none
2026-01-01T02:39:34.611 [DEBUG] [Thread-139111] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:39:34.671 [DEBUG] [Thread-139111] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:39:34.671 [DEBUG] [Thread-139111] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:39:34.672 [DEBUG] [Thread-139111] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T02:39:34.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T02:39:34.673 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:39:34.730 [DEBUG] [Thread-139111] [transport.py] [_log()] userauth is OK
2026-01-01T02:39:34.730 [DEBUG] [Thread-139111] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:39:34.730 [DEBUG] [Thread-139111] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:39:34.730 [DEBUG] [Thread-139111] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T02:39:34.730 [DEBUG] [Thread-139111] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:39:34.749 [INFO] [Thread-139111] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:39:34.750 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T02:39:34.751 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:39:35.581 [DEBUG] [Thread-139111] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:39:35.582 [DEBUG] [Thread-139111] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:39:35.630 [DEBUG] [Thread-139111] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:39:35.630 [DEBUG] [Thread-139111] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:39:35.639 [DEBUG] [Thread-139111] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:39:35.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:39:35.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T02:39:35.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T02:39:35.664 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:39:35.664 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:39:35.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:39:35.672 [DEBUG] [Thread-139111] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:39:44.875 [DEBUG] [Thread-139113 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:39:59.923 [DEBUG] [Thread-139114 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:40:05.122 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:40:05.123 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:40:05.664 [DEBUG] [Thread-139115 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:40:05.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T02:40:05.694 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T02:40:05.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T02:40:06.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 2, 39, 32), 3.2, 80.67, 0.0, 11.05, 13.05, 0, 1, 0, 2, 0, 0),)
2026-01-01T02:40:06.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 02:39:32
2026-01-01T02:40:06.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T02:40:06.725 [DEBUG] [Thread-139116] [transport.py] [_log()] starting thread (client mode): 0xb1744eb0
2026-01-01T02:40:06.725 [DEBUG] [Thread-139116] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:40:06.745 [DEBUG] [Thread-139116] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T02:40:06.745 [INFO] [Thread-139116] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T02:40:06.748 [DEBUG] [Thread-139116] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:40:06.748 [DEBUG] [Thread-139116] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T02:40:06.748 [DEBUG] [Thread-139116] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:40:06.748 [DEBUG] [Thread-139116] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:40:06.748 [DEBUG] [Thread-139116] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:40:06.748 [DEBUG] [Thread-139116] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:40:06.748 [DEBUG] [Thread-139116] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:40:06.748 [DEBUG] [Thread-139116] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:40:06.748 [DEBUG] [Thread-139116] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:40:06.748 [DEBUG] [Thread-139116] [transport.py] [_log()] client lang: <none>
2026-01-01T02:40:06.748 [DEBUG] [Thread-139116] [transport.py] [_log()] server lang: <none>
2026-01-01T02:40:06.748 [DEBUG] [Thread-139116] [transport.py] [_log()] kex follows: False
2026-01-01T02:40:06.748 [DEBUG] [Thread-139116] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:40:06.748 [DEBUG] [Thread-139116] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:40:06.748 [DEBUG] [Thread-139116] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:40:06.748 [DEBUG] [Thread-139116] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:40:06.748 [DEBUG] [Thread-139116] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:40:06.749 [DEBUG] [Thread-139116] [transport.py] [_log()] Compression: none
2026-01-01T02:40:06.749 [DEBUG] [Thread-139116] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:40:06.758 [DEBUG] [Thread-139116] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:40:06.758 [DEBUG] [Thread-139116] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:40:06.758 [DEBUG] [Thread-139116] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T02:40:06.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T02:40:06.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:40:06.760 [DEBUG] [Thread-139116] [transport.py] [_log()] userauth is OK
2026-01-01T02:40:06.761 [DEBUG] [Thread-139116] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:40:06.761 [DEBUG] [Thread-139116] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:40:06.761 [DEBUG] [Thread-139116] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T02:40:06.761 [DEBUG] [Thread-139116] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:40:06.775 [INFO] [Thread-139116] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:40:06.775 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:40:07.906 [DEBUG] [Thread-139116] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:40:07.906 [DEBUG] [Thread-139116] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:40:07.907 [DEBUG] [Thread-139116] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T02:40:07.947 [DEBUG] [Thread-139116] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:40:07.947 [DEBUG] [Thread-139116] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:40:07.949 [DEBUG] [Thread-139116] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:40:07.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:40:07.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T02:40:07.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T02:40:07.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T02:40:07.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:40:07.985 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T02:40:07.986 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:40:07.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:40:07.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T02:40:07.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.027562 -999.00  +13.20   5.54     83  +10.40 1 1 1 2 1     0    0 2.23 -23.15 ZNESW 7.1 5.5 186.4 8.1 13.9 -20.9 13.8 -20.4 13.6 -18.9 13.9 -20.0
2026-01-01T02:40:07.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T02:40:07.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T02:40:07.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.027562
2026-01-01T02:40:07.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T02:40:07.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T02:40:07.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T02:40:07.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T02:40:07.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T02:40:07.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T02:39:32', tmtdew=3.2, humidity=80.67, cloud=0.0, wind=11.05, temperature=13.05, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T02:40:04', seeing=0.95, atlas_timestamp='2026-01-01T00:39:41.357', atlas_cloud=1, atlas_rain=1, zp_data=[0.04374999999999929, 0.02325000000000088, 0.06574999999999953, 0.02949999999999875, 0.007500000000000284, 0.05375000000000085, 0.1479999999999997, 0.10625000000000107, 0.13349999999999795, 0.12700000000000067, 0.03725000000000023, 0.07850000000000001, 0.13899999999999935, 0.1332500000000003, 0.11599999999999966, 0.1659999999999986, 0.12924999999999898, 0.1775000000000002, 0.12599999999999945, 0.1667500000000004, 0.16949999999999932, 0.11774999999999913, 0.11875000000000213, 0.18324999999999925, 0.1504999999999992, 0.2264999999999997, 0.16025000000000134, 0.2085000000000008, 0.31400000000000006, 0.20700000000000074, 0.4155000000000024, 0.23300000000000054, 0.16974999999999874], zp_timestamp='2026-01-01T00:38:00')
2026-01-01T02:40:07.988 [DEBUG] [Thread-139116] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:40:08.067 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T02:40:08.080 [DEBUG] [Thread-139119] [transport.py] [_log()] starting thread (client mode): 0xb95b09d0
2026-01-01T02:40:08.080 [DEBUG] [Thread-139119] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:40:08.096 [DEBUG] [Thread-139119] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T02:40:08.096 [INFO] [Thread-139119] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T02:40:08.104 [DEBUG] [Thread-139119] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:40:08.104 [DEBUG] [Thread-139119] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T02:40:08.104 [DEBUG] [Thread-139119] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:40:08.104 [DEBUG] [Thread-139119] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:40:08.104 [DEBUG] [Thread-139119] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:40:08.104 [DEBUG] [Thread-139119] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:40:08.104 [DEBUG] [Thread-139119] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:40:08.104 [DEBUG] [Thread-139119] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:40:08.104 [DEBUG] [Thread-139119] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:40:08.104 [DEBUG] [Thread-139119] [transport.py] [_log()] client lang: <none>
2026-01-01T02:40:08.104 [DEBUG] [Thread-139119] [transport.py] [_log()] server lang: <none>
2026-01-01T02:40:08.104 [DEBUG] [Thread-139119] [transport.py] [_log()] kex follows: False
2026-01-01T02:40:08.104 [DEBUG] [Thread-139119] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:40:08.105 [DEBUG] [Thread-139119] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:40:08.105 [DEBUG] [Thread-139119] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:40:08.105 [DEBUG] [Thread-139119] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:40:08.105 [DEBUG] [Thread-139119] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:40:08.105 [DEBUG] [Thread-139119] [transport.py] [_log()] Compression: none
2026-01-01T02:40:08.105 [DEBUG] [Thread-139119] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:40:08.163 [DEBUG] [Thread-139119] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:40:08.163 [DEBUG] [Thread-139119] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:40:08.164 [DEBUG] [Thread-139119] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T02:40:08.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T02:40:08.165 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:40:08.222 [DEBUG] [Thread-139119] [transport.py] [_log()] userauth is OK
2026-01-01T02:40:08.223 [DEBUG] [Thread-139119] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:40:08.223 [DEBUG] [Thread-139119] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:40:08.224 [DEBUG] [Thread-139119] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T02:40:08.224 [DEBUG] [Thread-139119] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:40:08.243 [INFO] [Thread-139119] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:40:08.243 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T02:40:08.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:40:09.062 [DEBUG] [Thread-139119] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:40:09.062 [DEBUG] [Thread-139119] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:40:09.113 [DEBUG] [Thread-139119] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:40:09.113 [DEBUG] [Thread-139119] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:40:09.123 [DEBUG] [Thread-139119] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:40:09.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:40:09.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T02:40:09.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T02:40:09.161 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:40:09.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:40:09.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:40:09.173 [DEBUG] [Thread-139119] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:40:14.959 [DEBUG] [Thread-139121 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:40:30.018 [DEBUG] [Thread-139122 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:40:39.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T02:40:39.193 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T02:40:39.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T02:40:39.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 2, 40, 36), 3.2, 80.67, 0.0, 9.72, 13.05, 0, 1, 0, 2, 0, 0),)
2026-01-01T02:40:39.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 02:40:36
2026-01-01T02:40:40.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T02:40:40.194 [DEBUG] [Thread-139123] [transport.py] [_log()] starting thread (client mode): 0xb95b1ea0
2026-01-01T02:40:40.195 [DEBUG] [Thread-139123] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:40:40.215 [DEBUG] [Thread-139123] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T02:40:40.215 [INFO] [Thread-139123] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T02:40:40.218 [DEBUG] [Thread-139123] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:40:40.218 [DEBUG] [Thread-139123] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T02:40:40.218 [DEBUG] [Thread-139123] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:40:40.218 [DEBUG] [Thread-139123] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:40:40.218 [DEBUG] [Thread-139123] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:40:40.218 [DEBUG] [Thread-139123] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:40:40.218 [DEBUG] [Thread-139123] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:40:40.219 [DEBUG] [Thread-139123] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:40:40.219 [DEBUG] [Thread-139123] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:40:40.219 [DEBUG] [Thread-139123] [transport.py] [_log()] client lang: <none>
2026-01-01T02:40:40.219 [DEBUG] [Thread-139123] [transport.py] [_log()] server lang: <none>
2026-01-01T02:40:40.219 [DEBUG] [Thread-139123] [transport.py] [_log()] kex follows: False
2026-01-01T02:40:40.219 [DEBUG] [Thread-139123] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:40:40.219 [DEBUG] [Thread-139123] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:40:40.219 [DEBUG] [Thread-139123] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:40:40.219 [DEBUG] [Thread-139123] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:40:40.219 [DEBUG] [Thread-139123] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:40:40.219 [DEBUG] [Thread-139123] [transport.py] [_log()] Compression: none
2026-01-01T02:40:40.219 [DEBUG] [Thread-139123] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:40:40.228 [DEBUG] [Thread-139123] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:40:40.228 [DEBUG] [Thread-139123] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:40:40.229 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T02:40:40.229 [DEBUG] [Thread-139123] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T02:40:40.230 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:40:40.231 [DEBUG] [Thread-139123] [transport.py] [_log()] userauth is OK
2026-01-01T02:40:40.231 [DEBUG] [Thread-139123] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:40:40.231 [DEBUG] [Thread-139123] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:40:40.231 [DEBUG] [Thread-139123] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T02:40:40.231 [DEBUG] [Thread-139123] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:40:40.256 [INFO] [Thread-139123] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:40:40.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:40:40.894 [DEBUG] [Thread-139123] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:40:40.895 [DEBUG] [Thread-139123] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:40:40.895 [DEBUG] [Thread-139123] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T02:40:40.936 [DEBUG] [Thread-139123] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:40:40.936 [DEBUG] [Thread-139123] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:40:40.940 [DEBUG] [Thread-139123] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:40:40.951 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:40:40.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T02:40:40.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T02:40:40.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T02:40:40.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:40:40.963 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T02:40:40.963 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:40:40.963 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:40:40.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T02:40:40.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.027909 -999.00  +13.20   4.26     83  +10.40 1 1 1 2 1     0    0 2.22 -24.97 ZNESW 5.2 4.3 209.9 9.6 13.9 -20.8 13.8 -20.6 13.6 -19.0 13.9 -19.9
2026-01-01T02:40:40.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T02:40:40.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T02:40:40.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.027909
2026-01-01T02:40:40.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T02:40:40.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T02:40:40.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T02:40:40.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T02:40:40.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T02:40:40.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T02:40:36', tmtdew=3.2, humidity=80.67, cloud=0.0, wind=9.72, temperature=13.05, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T02:40:36', seeing=0.91, atlas_timestamp='2026-01-01T00:40:11.338', atlas_cloud=1, atlas_rain=1, zp_data=[0.04374999999999929, 0.02325000000000088, 0.06574999999999953, 0.02949999999999875, 0.007500000000000284, 0.05375000000000085, 0.1479999999999997, 0.10625000000000107, 0.13349999999999795, 0.12700000000000067, 0.03725000000000023, 0.07850000000000001, 0.13899999999999935, 0.1332500000000003, 0.11599999999999966, 0.1659999999999986, 0.12924999999999898, 0.1775000000000002, 0.12599999999999945, 0.1667500000000004, 0.16949999999999932, 0.11774999999999913, 0.11875000000000213, 0.18324999999999925, 0.1504999999999992, 0.2264999999999997, 0.16025000000000134, 0.2085000000000008, 0.31400000000000006, 0.20700000000000074, 0.4155000000000024, 0.23300000000000054, 0.16974999999999874], zp_timestamp='2026-01-01T00:38:00')
2026-01-01T02:40:40.966 [DEBUG] [Thread-139123] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:40:41.045 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T02:40:41.057 [DEBUG] [Thread-139126] [transport.py] [_log()] starting thread (client mode): 0xb1797a00
2026-01-01T02:40:41.058 [DEBUG] [Thread-139126] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:40:41.074 [DEBUG] [Thread-139126] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T02:40:41.074 [INFO] [Thread-139126] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T02:40:41.081 [DEBUG] [Thread-139126] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:40:41.082 [DEBUG] [Thread-139126] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T02:40:41.082 [DEBUG] [Thread-139126] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:40:41.082 [DEBUG] [Thread-139126] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:40:41.082 [DEBUG] [Thread-139126] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:40:41.082 [DEBUG] [Thread-139126] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:40:41.082 [DEBUG] [Thread-139126] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:40:41.082 [DEBUG] [Thread-139126] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:40:41.082 [DEBUG] [Thread-139126] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:40:41.082 [DEBUG] [Thread-139126] [transport.py] [_log()] client lang: <none>
2026-01-01T02:40:41.082 [DEBUG] [Thread-139126] [transport.py] [_log()] server lang: <none>
2026-01-01T02:40:41.082 [DEBUG] [Thread-139126] [transport.py] [_log()] kex follows: False
2026-01-01T02:40:41.082 [DEBUG] [Thread-139126] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:40:41.082 [DEBUG] [Thread-139126] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:40:41.083 [DEBUG] [Thread-139126] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:40:41.083 [DEBUG] [Thread-139126] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:40:41.083 [DEBUG] [Thread-139126] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:40:41.083 [DEBUG] [Thread-139126] [transport.py] [_log()] Compression: none
2026-01-01T02:40:41.083 [DEBUG] [Thread-139126] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:40:41.141 [DEBUG] [Thread-139126] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:40:41.141 [DEBUG] [Thread-139126] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:40:41.141 [DEBUG] [Thread-139126] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T02:40:41.141 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T02:40:41.142 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:40:41.198 [DEBUG] [Thread-139126] [transport.py] [_log()] userauth is OK
2026-01-01T02:40:41.198 [DEBUG] [Thread-139126] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:40:41.199 [DEBUG] [Thread-139126] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:40:41.199 [DEBUG] [Thread-139126] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T02:40:41.199 [DEBUG] [Thread-139126] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:40:41.224 [INFO] [Thread-139126] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:40:41.224 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T02:40:41.225 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:40:42.026 [DEBUG] [Thread-139126] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:40:42.027 [DEBUG] [Thread-139126] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:40:42.075 [DEBUG] [Thread-139126] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:40:42.075 [DEBUG] [Thread-139126] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:40:42.085 [DEBUG] [Thread-139126] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:40:42.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:40:42.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T02:40:42.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T02:40:42.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:40:42.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:40:42.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:40:42.121 [DEBUG] [Thread-139126] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:40:45.049 [DEBUG] [Thread-139128 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:41:00.110 [DEBUG] [Thread-139129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:41:05.323 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:41:05.324 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:41:05.746 [DEBUG] [Thread-139130 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:41:12.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T02:41:12.143 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T02:41:12.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T02:41:12.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 2, 41, 8), 3.21, 80.59, 0.0, 10.13, 13.06, 0, 1, 0, 2, 0, 0),)
2026-01-01T02:41:12.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 02:41:08
2026-01-01T02:41:13.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T02:41:13.170 [DEBUG] [Thread-139131] [transport.py] [_log()] starting thread (client mode): 0xb95f2c80
2026-01-01T02:41:13.170 [DEBUG] [Thread-139131] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:41:13.190 [DEBUG] [Thread-139131] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T02:41:13.191 [INFO] [Thread-139131] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T02:41:13.193 [DEBUG] [Thread-139131] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:41:13.194 [DEBUG] [Thread-139131] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T02:41:13.194 [DEBUG] [Thread-139131] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:41:13.194 [DEBUG] [Thread-139131] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:41:13.194 [DEBUG] [Thread-139131] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:41:13.194 [DEBUG] [Thread-139131] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:41:13.194 [DEBUG] [Thread-139131] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:41:13.194 [DEBUG] [Thread-139131] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:41:13.194 [DEBUG] [Thread-139131] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:41:13.194 [DEBUG] [Thread-139131] [transport.py] [_log()] client lang: <none>
2026-01-01T02:41:13.194 [DEBUG] [Thread-139131] [transport.py] [_log()] server lang: <none>
2026-01-01T02:41:13.194 [DEBUG] [Thread-139131] [transport.py] [_log()] kex follows: False
2026-01-01T02:41:13.194 [DEBUG] [Thread-139131] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:41:13.194 [DEBUG] [Thread-139131] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:41:13.194 [DEBUG] [Thread-139131] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:41:13.194 [DEBUG] [Thread-139131] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:41:13.194 [DEBUG] [Thread-139131] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:41:13.194 [DEBUG] [Thread-139131] [transport.py] [_log()] Compression: none
2026-01-01T02:41:13.194 [DEBUG] [Thread-139131] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:41:13.210 [DEBUG] [Thread-139131] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:41:13.210 [DEBUG] [Thread-139131] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:41:13.210 [DEBUG] [Thread-139131] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T02:41:13.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T02:41:13.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:41:13.211 [DEBUG] [Thread-139131] [transport.py] [_log()] userauth is OK
2026-01-01T02:41:13.211 [DEBUG] [Thread-139131] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:41:13.211 [DEBUG] [Thread-139131] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:41:13.211 [DEBUG] [Thread-139131] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T02:41:13.211 [DEBUG] [Thread-139131] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:41:13.220 [INFO] [Thread-139131] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:41:13.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:41:13.817 [DEBUG] [Thread-139131] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:41:13.817 [DEBUG] [Thread-139131] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:41:13.817 [DEBUG] [Thread-139131] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T02:41:13.858 [DEBUG] [Thread-139131] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:41:13.858 [DEBUG] [Thread-139131] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:41:13.860 [DEBUG] [Thread-139131] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:41:13.872 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:41:13.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T02:41:13.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T02:41:13.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T02:41:13.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:41:13.876 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T02:41:13.876 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:41:13.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:41:13.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T02:41:13.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.028256 -999.00  +13.20   6.16     83  +10.50 1 1 1 2 1     0    0 2.18 -24.23 ZNESW 6.4 6.2 197.7 8.3 13.9 -20.9 13.8 -20.6 13.6 -18.9 13.9 -20.0
2026-01-01T02:41:13.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T02:41:13.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T02:41:13.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.028256
2026-01-01T02:41:13.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T02:41:13.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T02:41:13.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T02:41:13.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T02:41:13.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T02:41:13.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T02:41:08', tmtdew=3.21, humidity=80.59, cloud=0.0, wind=10.13, temperature=13.06, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T02:41:08', seeing=1.04, atlas_timestamp='2026-01-01T00:40:41.318', atlas_cloud=1, atlas_rain=1, zp_data=[0.04374999999999929, 0.02325000000000088, 0.06574999999999953, 0.02949999999999875, 0.007500000000000284, 0.05375000000000085, 0.1479999999999997, 0.10625000000000107, 0.13349999999999795, 0.12700000000000067, 0.03725000000000023, 0.07850000000000001, 0.13899999999999935, 0.1332500000000003, 0.11599999999999966, 0.1659999999999986, 0.12924999999999898, 0.1775000000000002, 0.12599999999999945, 0.1667500000000004, 0.16949999999999932, 0.11774999999999913, 0.11875000000000213, 0.18324999999999925, 0.1504999999999992, 0.2264999999999997, 0.16025000000000134, 0.2085000000000008, 0.31400000000000006, 0.20700000000000074, 0.4155000000000024, 0.23300000000000054, 0.16974999999999874], zp_timestamp='2026-01-01T00:38:00')
2026-01-01T02:41:13.877 [DEBUG] [Thread-139131] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:41:13.951 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T02:41:13.963 [DEBUG] [Thread-139134] [transport.py] [_log()] starting thread (client mode): 0xb17471c0
2026-01-01T02:41:13.963 [DEBUG] [Thread-139134] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:41:13.978 [DEBUG] [Thread-139134] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T02:41:13.978 [INFO] [Thread-139134] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T02:41:13.985 [DEBUG] [Thread-139134] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:41:13.986 [DEBUG] [Thread-139134] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T02:41:13.986 [DEBUG] [Thread-139134] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:41:13.986 [DEBUG] [Thread-139134] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:41:13.986 [DEBUG] [Thread-139134] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:41:13.986 [DEBUG] [Thread-139134] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:41:13.986 [DEBUG] [Thread-139134] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:41:13.986 [DEBUG] [Thread-139134] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:41:13.986 [DEBUG] [Thread-139134] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:41:13.986 [DEBUG] [Thread-139134] [transport.py] [_log()] client lang: <none>
2026-01-01T02:41:13.986 [DEBUG] [Thread-139134] [transport.py] [_log()] server lang: <none>
2026-01-01T02:41:13.986 [DEBUG] [Thread-139134] [transport.py] [_log()] kex follows: False
2026-01-01T02:41:13.986 [DEBUG] [Thread-139134] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:41:13.986 [DEBUG] [Thread-139134] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:41:13.986 [DEBUG] [Thread-139134] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:41:13.986 [DEBUG] [Thread-139134] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:41:13.986 [DEBUG] [Thread-139134] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:41:13.986 [DEBUG] [Thread-139134] [transport.py] [_log()] Compression: none
2026-01-01T02:41:13.986 [DEBUG] [Thread-139134] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:41:14.044 [DEBUG] [Thread-139134] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:41:14.044 [DEBUG] [Thread-139134] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:41:14.044 [DEBUG] [Thread-139134] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T02:41:14.044 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T02:41:14.044 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:41:14.102 [DEBUG] [Thread-139134] [transport.py] [_log()] userauth is OK
2026-01-01T02:41:14.102 [DEBUG] [Thread-139134] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:41:14.102 [DEBUG] [Thread-139134] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:41:14.102 [DEBUG] [Thread-139134] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T02:41:14.102 [DEBUG] [Thread-139134] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:41:14.116 [INFO] [Thread-139134] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:41:14.116 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T02:41:14.116 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:41:14.921 [DEBUG] [Thread-139134] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:41:14.921 [DEBUG] [Thread-139134] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:41:14.969 [DEBUG] [Thread-139134] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:41:14.969 [DEBUG] [Thread-139134] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:41:14.977 [DEBUG] [Thread-139134] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:41:14.985 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:41:14.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T02:41:14.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T02:41:15.001 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:41:15.001 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:41:15.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:41:15.013 [DEBUG] [Thread-139134] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:41:15.140 [DEBUG] [Thread-139136 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:41:30.181 [DEBUG] [Thread-139137 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:41:45.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T02:41:45.019 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T02:41:45.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T02:41:45.215 [DEBUG] [Thread-139138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:41:45.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 2, 41, 40), 3.28, 80.5, 0.0, 9.35, 13.1, 0, 1, 0, 2, 0, 0),)
2026-01-01T02:41:45.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 02:41:40
2026-01-01T02:41:45.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T02:41:46.012 [DEBUG] [Thread-139139] [transport.py] [_log()] starting thread (client mode): 0xb6ba1450
2026-01-01T02:41:46.012 [DEBUG] [Thread-139139] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:41:46.031 [DEBUG] [Thread-139139] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T02:41:46.031 [INFO] [Thread-139139] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T02:41:46.035 [DEBUG] [Thread-139139] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:41:46.035 [DEBUG] [Thread-139139] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T02:41:46.035 [DEBUG] [Thread-139139] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:41:46.035 [DEBUG] [Thread-139139] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:41:46.035 [DEBUG] [Thread-139139] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:41:46.035 [DEBUG] [Thread-139139] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:41:46.035 [DEBUG] [Thread-139139] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:41:46.035 [DEBUG] [Thread-139139] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:41:46.035 [DEBUG] [Thread-139139] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:41:46.035 [DEBUG] [Thread-139139] [transport.py] [_log()] client lang: <none>
2026-01-01T02:41:46.035 [DEBUG] [Thread-139139] [transport.py] [_log()] server lang: <none>
2026-01-01T02:41:46.035 [DEBUG] [Thread-139139] [transport.py] [_log()] kex follows: False
2026-01-01T02:41:46.035 [DEBUG] [Thread-139139] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:41:46.035 [DEBUG] [Thread-139139] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:41:46.035 [DEBUG] [Thread-139139] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:41:46.035 [DEBUG] [Thread-139139] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:41:46.035 [DEBUG] [Thread-139139] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:41:46.035 [DEBUG] [Thread-139139] [transport.py] [_log()] Compression: none
2026-01-01T02:41:46.036 [DEBUG] [Thread-139139] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:41:46.053 [DEBUG] [Thread-139139] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:41:46.054 [DEBUG] [Thread-139139] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:41:46.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T02:41:46.055 [DEBUG] [Thread-139139] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T02:41:46.055 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:41:46.057 [DEBUG] [Thread-139139] [transport.py] [_log()] userauth is OK
2026-01-01T02:41:46.057 [DEBUG] [Thread-139139] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:41:46.058 [DEBUG] [Thread-139139] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:41:46.058 [DEBUG] [Thread-139139] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T02:41:46.058 [DEBUG] [Thread-139139] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:41:46.082 [INFO] [Thread-139139] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:41:46.082 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:41:46.730 [DEBUG] [Thread-139139] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:41:46.730 [DEBUG] [Thread-139139] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:41:46.731 [DEBUG] [Thread-139139] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T02:41:46.775 [DEBUG] [Thread-139139] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:41:46.775 [DEBUG] [Thread-139139] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:41:46.778 [DEBUG] [Thread-139139] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:41:46.792 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:41:46.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T02:41:46.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T02:41:46.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T02:41:46.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:41:46.805 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T02:41:46.805 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:41:46.805 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:41:46.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T02:41:46.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.028603 -999.00  +13.20   5.71     83  +10.50 1 1 1 2 1     0    0 2.21 -24.74 ZNESW 7.8 5.7 208.3 8.4 13.9 -20.8 13.8 -20.4 13.6 -19.0 13.9 -20.0
2026-01-01T02:41:46.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T02:41:46.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T02:41:46.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.028603
2026-01-01T02:41:46.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T02:41:46.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T02:41:46.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T02:41:46.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T02:41:46.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T02:41:46.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T02:41:40', tmtdew=3.28, humidity=80.5, cloud=0.0, wind=9.35, temperature=13.1, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T02:41:40', seeing=0.99, atlas_timestamp='2026-01-01T00:41:11.299', atlas_cloud=1, atlas_rain=1, zp_data=[0.04374999999999929, 0.02325000000000088, 0.06574999999999953, 0.02949999999999875, 0.007500000000000284, 0.05375000000000085, 0.1479999999999997, 0.10625000000000107, 0.13349999999999795, 0.12700000000000067, 0.03725000000000023, 0.07850000000000001, 0.13899999999999935, 0.1332500000000003, 0.11599999999999966, 0.1659999999999986, 0.12924999999999898, 0.1775000000000002, 0.12599999999999945, 0.1667500000000004, 0.16949999999999932, 0.11774999999999913, 0.11875000000000213, 0.18324999999999925, 0.1504999999999992, 0.2264999999999997, 0.16025000000000134, 0.2085000000000008, 0.31400000000000006, 0.20700000000000074, 0.4155000000000024, 0.23300000000000054, 0.16974999999999874], zp_timestamp='2026-01-01T00:38:00')
2026-01-01T02:41:46.808 [DEBUG] [Thread-139139] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:41:46.899 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T02:41:46.910 [DEBUG] [Thread-139142] [transport.py] [_log()] starting thread (client mode): 0xb955ba00
2026-01-01T02:41:46.910 [DEBUG] [Thread-139142] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:41:46.931 [DEBUG] [Thread-139142] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T02:41:46.931 [INFO] [Thread-139142] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T02:41:46.939 [DEBUG] [Thread-139142] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:41:46.939 [DEBUG] [Thread-139142] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T02:41:46.939 [DEBUG] [Thread-139142] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:41:46.939 [DEBUG] [Thread-139142] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:41:46.940 [DEBUG] [Thread-139142] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:41:46.940 [DEBUG] [Thread-139142] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:41:46.940 [DEBUG] [Thread-139142] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:41:46.940 [DEBUG] [Thread-139142] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:41:46.940 [DEBUG] [Thread-139142] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:41:46.940 [DEBUG] [Thread-139142] [transport.py] [_log()] client lang: <none>
2026-01-01T02:41:46.940 [DEBUG] [Thread-139142] [transport.py] [_log()] server lang: <none>
2026-01-01T02:41:46.940 [DEBUG] [Thread-139142] [transport.py] [_log()] kex follows: False
2026-01-01T02:41:46.940 [DEBUG] [Thread-139142] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:41:46.940 [DEBUG] [Thread-139142] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:41:46.940 [DEBUG] [Thread-139142] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:41:46.940 [DEBUG] [Thread-139142] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:41:46.940 [DEBUG] [Thread-139142] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:41:46.940 [DEBUG] [Thread-139142] [transport.py] [_log()] Compression: none
2026-01-01T02:41:46.941 [DEBUG] [Thread-139142] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:41:46.999 [DEBUG] [Thread-139142] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:41:46.999 [DEBUG] [Thread-139142] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:41:47.000 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T02:41:47.000 [DEBUG] [Thread-139142] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T02:41:47.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:41:47.054 [DEBUG] [Thread-139142] [transport.py] [_log()] userauth is OK
2026-01-01T02:41:47.054 [DEBUG] [Thread-139142] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:41:47.055 [DEBUG] [Thread-139142] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:41:47.055 [DEBUG] [Thread-139142] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T02:41:47.055 [DEBUG] [Thread-139142] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:41:47.074 [INFO] [Thread-139142] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:41:47.074 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T02:41:47.075 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:41:47.950 [DEBUG] [Thread-139142] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:41:47.950 [DEBUG] [Thread-139142] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:41:47.998 [DEBUG] [Thread-139142] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:41:47.998 [DEBUG] [Thread-139142] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:41:48.008 [DEBUG] [Thread-139142] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:41:48.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:41:48.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')
2026-01-01T02:41:48.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T02:41:48.034 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:41:48.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:41:48.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:41:48.043 [DEBUG] [Thread-139142] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:42:00.241 [DEBUG] [Thread-139144 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:42:05.524 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:42:05.525 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:42:05.851 [DEBUG] [Thread-139145 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:42:15.298 [DEBUG] [Thread-139146 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:42:18.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T02:42:18.066 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T02:42:18.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T02:42:18.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 2, 42, 12), 3.27, 80.54, 0.0, 10.34, 13.15, 0, 1, 0, 2, 0, 0),)
2026-01-01T02:42:18.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 02:42:12
2026-01-01T02:42:18.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T02:42:19.058 [DEBUG] [Thread-139147] [transport.py] [_log()] starting thread (client mode): 0xb95b1390
2026-01-01T02:42:19.058 [DEBUG] [Thread-139147] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:42:19.077 [DEBUG] [Thread-139147] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T02:42:19.078 [INFO] [Thread-139147] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T02:42:19.080 [DEBUG] [Thread-139147] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:42:19.080 [DEBUG] [Thread-139147] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T02:42:19.081 [DEBUG] [Thread-139147] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:42:19.081 [DEBUG] [Thread-139147] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:42:19.081 [DEBUG] [Thread-139147] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:42:19.081 [DEBUG] [Thread-139147] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:42:19.081 [DEBUG] [Thread-139147] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:42:19.081 [DEBUG] [Thread-139147] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:42:19.081 [DEBUG] [Thread-139147] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:42:19.081 [DEBUG] [Thread-139147] [transport.py] [_log()] client lang: <none>
2026-01-01T02:42:19.081 [DEBUG] [Thread-139147] [transport.py] [_log()] server lang: <none>
2026-01-01T02:42:19.081 [DEBUG] [Thread-139147] [transport.py] [_log()] kex follows: False
2026-01-01T02:42:19.081 [DEBUG] [Thread-139147] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:42:19.081 [DEBUG] [Thread-139147] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:42:19.081 [DEBUG] [Thread-139147] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:42:19.081 [DEBUG] [Thread-139147] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:42:19.081 [DEBUG] [Thread-139147] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:42:19.081 [DEBUG] [Thread-139147] [transport.py] [_log()] Compression: none
2026-01-01T02:42:19.081 [DEBUG] [Thread-139147] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:42:19.099 [DEBUG] [Thread-139147] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:42:19.099 [DEBUG] [Thread-139147] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:42:19.100 [DEBUG] [Thread-139147] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T02:42:19.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T02:42:19.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:42:19.102 [DEBUG] [Thread-139147] [transport.py] [_log()] userauth is OK
2026-01-01T02:42:19.102 [DEBUG] [Thread-139147] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:42:19.102 [DEBUG] [Thread-139147] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:42:19.102 [DEBUG] [Thread-139147] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T02:42:19.102 [DEBUG] [Thread-139147] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:42:19.128 [INFO] [Thread-139147] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:42:19.129 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:42:19.772 [DEBUG] [Thread-139147] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:42:19.772 [DEBUG] [Thread-139147] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:42:19.772 [DEBUG] [Thread-139147] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T02:42:19.813 [DEBUG] [Thread-139147] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:42:19.813 [DEBUG] [Thread-139147] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:42:19.816 [DEBUG] [Thread-139147] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:42:19.827 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:42:19.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T02:42:19.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T02:42:19.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T02:42:19.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:42:19.837 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T02:42:19.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:42:19.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:42:19.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T02:42:19.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.028951 -999.00  +13.20   4.40     83  +10.40 1 1 1 2 1     0    0 2.18 -25.39 ZNESW 4.1 4.4 204.6 7.6 13.9 -21.0 13.8 -20.6 13.6 -19.0 13.9 -19.9
2026-01-01T02:42:19.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T02:42:19.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T02:42:19.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.028951
2026-01-01T02:42:19.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T02:42:19.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T02:42:19.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T02:42:19.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T02:42:19.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T02:42:19.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T02:42:12', tmtdew=3.27, humidity=80.54, cloud=0.0, wind=10.34, temperature=13.15, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T02:42:12', seeing=0.99, atlas_timestamp='2026-01-01T00:41:41.366', atlas_cloud=1, atlas_rain=1, zp_data=[0.04374999999999929, 0.02325000000000088, 0.06574999999999953, 0.02949999999999875, 0.007500000000000284, 0.05375000000000085, 0.1479999999999997, 0.10625000000000107, 0.13349999999999795, 0.12700000000000067, 0.03725000000000023, 0.07850000000000001, 0.13899999999999935, 0.1332500000000003, 0.11599999999999966, 0.1659999999999986, 0.12924999999999898, 0.1775000000000002, 0.12599999999999945, 0.1667500000000004, 0.16949999999999932, 0.11774999999999913, 0.11875000000000213, 0.18324999999999925, 0.1504999999999992, 0.2264999999999997, 0.16025000000000134, 0.2085000000000008, 0.31400000000000006, 0.20700000000000074, 0.4155000000000024, 0.23300000000000054, 0.16974999999999874], zp_timestamp='2026-01-01T00:38:00')
2026-01-01T02:42:19.840 [DEBUG] [Thread-139147] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:42:19.924 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T02:42:19.935 [DEBUG] [Thread-139150] [transport.py] [_log()] starting thread (client mode): 0xb95b1c00
2026-01-01T02:42:19.936 [DEBUG] [Thread-139150] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:42:19.952 [DEBUG] [Thread-139150] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T02:42:19.952 [INFO] [Thread-139150] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T02:42:19.959 [DEBUG] [Thread-139150] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:42:19.960 [DEBUG] [Thread-139150] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T02:42:19.960 [DEBUG] [Thread-139150] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:42:19.960 [DEBUG] [Thread-139150] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:42:19.960 [DEBUG] [Thread-139150] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:42:19.960 [DEBUG] [Thread-139150] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:42:19.960 [DEBUG] [Thread-139150] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:42:19.960 [DEBUG] [Thread-139150] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:42:19.960 [DEBUG] [Thread-139150] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:42:19.960 [DEBUG] [Thread-139150] [transport.py] [_log()] client lang: <none>
2026-01-01T02:42:19.960 [DEBUG] [Thread-139150] [transport.py] [_log()] server lang: <none>
2026-01-01T02:42:19.960 [DEBUG] [Thread-139150] [transport.py] [_log()] kex follows: False
2026-01-01T02:42:19.960 [DEBUG] [Thread-139150] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:42:19.960 [DEBUG] [Thread-139150] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:42:19.960 [DEBUG] [Thread-139150] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:42:19.960 [DEBUG] [Thread-139150] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:42:19.961 [DEBUG] [Thread-139150] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:42:19.961 [DEBUG] [Thread-139150] [transport.py] [_log()] Compression: none
2026-01-01T02:42:19.961 [DEBUG] [Thread-139150] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:42:20.018 [DEBUG] [Thread-139150] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:42:20.018 [DEBUG] [Thread-139150] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:42:20.019 [DEBUG] [Thread-139150] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T02:42:20.019 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T02:42:20.020 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:42:20.075 [DEBUG] [Thread-139150] [transport.py] [_log()] userauth is OK
2026-01-01T02:42:20.076 [DEBUG] [Thread-139150] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:42:20.076 [DEBUG] [Thread-139150] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:42:20.076 [DEBUG] [Thread-139150] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T02:42:20.076 [DEBUG] [Thread-139150] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:42:20.095 [INFO] [Thread-139150] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:42:20.095 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T02:42:20.096 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:42:20.886 [DEBUG] [Thread-139150] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:42:20.887 [DEBUG] [Thread-139150] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:42:20.934 [DEBUG] [Thread-139150] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:42:20.934 [DEBUG] [Thread-139150] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:42:20.944 [DEBUG] [Thread-139150] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:42:20.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:42:20.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T02:42:20.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T02:42:20.971 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:42:20.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:42:20.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:42:20.981 [DEBUG] [Thread-139150] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:42:30.332 [DEBUG] [Thread-139152 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:42:45.373 [DEBUG] [Thread-139153 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:42:50.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T02:42:50.990 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T02:42:50.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T02:42:51.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 2, 42, 44), 3.27, 80.52, 0.0, 11.77, 13.11, 0, 1, 0, 2, 0, 0),)
2026-01-01T02:42:51.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 02:42:44
2026-01-01T02:42:51.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T02:42:51.969 [DEBUG] [Thread-139154] [transport.py] [_log()] starting thread (client mode): 0xb1744730
2026-01-01T02:42:51.969 [DEBUG] [Thread-139154] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:42:51.988 [DEBUG] [Thread-139154] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T02:42:51.988 [INFO] [Thread-139154] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T02:42:51.991 [DEBUG] [Thread-139154] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:42:51.992 [DEBUG] [Thread-139154] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T02:42:51.992 [DEBUG] [Thread-139154] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:42:51.992 [DEBUG] [Thread-139154] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:42:51.992 [DEBUG] [Thread-139154] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:42:51.992 [DEBUG] [Thread-139154] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:42:51.992 [DEBUG] [Thread-139154] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:42:51.992 [DEBUG] [Thread-139154] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:42:51.992 [DEBUG] [Thread-139154] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:42:51.992 [DEBUG] [Thread-139154] [transport.py] [_log()] client lang: <none>
2026-01-01T02:42:51.992 [DEBUG] [Thread-139154] [transport.py] [_log()] server lang: <none>
2026-01-01T02:42:51.992 [DEBUG] [Thread-139154] [transport.py] [_log()] kex follows: False
2026-01-01T02:42:51.993 [DEBUG] [Thread-139154] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:42:51.993 [DEBUG] [Thread-139154] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:42:51.993 [DEBUG] [Thread-139154] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:42:51.993 [DEBUG] [Thread-139154] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:42:51.993 [DEBUG] [Thread-139154] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:42:51.993 [DEBUG] [Thread-139154] [transport.py] [_log()] Compression: none
2026-01-01T02:42:51.993 [DEBUG] [Thread-139154] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:42:52.011 [DEBUG] [Thread-139154] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:42:52.012 [DEBUG] [Thread-139154] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:42:52.013 [DEBUG] [Thread-139154] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T02:42:52.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T02:42:52.014 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:42:52.015 [DEBUG] [Thread-139154] [transport.py] [_log()] userauth is OK
2026-01-01T02:42:52.016 [DEBUG] [Thread-139154] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:42:52.016 [DEBUG] [Thread-139154] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:42:52.016 [DEBUG] [Thread-139154] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T02:42:52.016 [DEBUG] [Thread-139154] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:42:52.051 [INFO] [Thread-139154] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:42:52.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:42:52.691 [DEBUG] [Thread-139154] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:42:52.691 [DEBUG] [Thread-139154] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:42:52.691 [DEBUG] [Thread-139154] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T02:42:52.732 [DEBUG] [Thread-139154] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:42:52.732 [DEBUG] [Thread-139154] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:42:52.735 [DEBUG] [Thread-139154] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:42:52.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:42:52.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T02:42:52.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T02:42:52.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T02:42:52.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:42:52.757 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T02:42:52.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:42:52.757 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:42:52.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T02:42:52.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.029645 -999.00  +13.20   4.76     83  +10.50 1 1 1 2 1     0    0 2.18 -23.57 ZNESW 6.4 4.8 209.0 8.9 13.9 -20.7 13.8 -20.5 13.6 -18.9 13.9 -20.1
2026-01-01T02:42:52.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T02:42:52.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T02:42:52.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.029645
2026-01-01T02:42:52.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T02:42:52.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T02:42:52.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T02:42:52.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T02:42:52.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T02:42:52.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T02:42:44', tmtdew=3.27, humidity=80.52, cloud=0.0, wind=11.77, temperature=13.11, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T02:42:44', seeing=0.95, atlas_timestamp='2026-01-01T00:42:41.328', atlas_cloud=1, atlas_rain=1, zp_data=[0.04374999999999929, 0.02325000000000088, 0.06574999999999953, 0.02949999999999875, 0.007500000000000284, 0.05375000000000085, 0.1479999999999997, 0.10625000000000107, 0.13349999999999795, 0.12700000000000067, 0.03725000000000023, 0.07850000000000001, 0.13899999999999935, 0.1332500000000003, 0.11599999999999966, 0.1659999999999986, 0.12924999999999898, 0.1775000000000002, 0.12599999999999945, 0.1667500000000004, 0.16949999999999932, 0.11774999999999913, 0.11875000000000213, 0.18324999999999925, 0.1504999999999992, 0.2264999999999997, 0.16025000000000134, 0.2085000000000008, 0.31400000000000006, 0.20700000000000074, 0.4155000000000024, 0.23300000000000054, 0.16974999999999874], zp_timestamp='2026-01-01T00:38:00')
2026-01-01T02:42:52.760 [DEBUG] [Thread-139154] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:42:52.843 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T02:42:52.856 [DEBUG] [Thread-139157] [transport.py] [_log()] starting thread (client mode): 0xb1796920
2026-01-01T02:42:52.856 [DEBUG] [Thread-139157] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:42:52.871 [DEBUG] [Thread-139157] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T02:42:52.871 [INFO] [Thread-139157] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T02:42:52.879 [DEBUG] [Thread-139157] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:42:52.879 [DEBUG] [Thread-139157] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T02:42:52.879 [DEBUG] [Thread-139157] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:42:52.879 [DEBUG] [Thread-139157] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:42:52.879 [DEBUG] [Thread-139157] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:42:52.879 [DEBUG] [Thread-139157] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:42:52.879 [DEBUG] [Thread-139157] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:42:52.879 [DEBUG] [Thread-139157] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:42:52.879 [DEBUG] [Thread-139157] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:42:52.879 [DEBUG] [Thread-139157] [transport.py] [_log()] client lang: <none>
2026-01-01T02:42:52.879 [DEBUG] [Thread-139157] [transport.py] [_log()] server lang: <none>
2026-01-01T02:42:52.879 [DEBUG] [Thread-139157] [transport.py] [_log()] kex follows: False
2026-01-01T02:42:52.879 [DEBUG] [Thread-139157] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:42:52.879 [DEBUG] [Thread-139157] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:42:52.880 [DEBUG] [Thread-139157] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:42:52.880 [DEBUG] [Thread-139157] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:42:52.880 [DEBUG] [Thread-139157] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:42:52.880 [DEBUG] [Thread-139157] [transport.py] [_log()] Compression: none
2026-01-01T02:42:52.880 [DEBUG] [Thread-139157] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:42:52.938 [DEBUG] [Thread-139157] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:42:52.938 [DEBUG] [Thread-139157] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:42:52.939 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T02:42:52.939 [DEBUG] [Thread-139157] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T02:42:52.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:42:52.994 [DEBUG] [Thread-139157] [transport.py] [_log()] userauth is OK
2026-01-01T02:42:52.994 [DEBUG] [Thread-139157] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:42:52.995 [DEBUG] [Thread-139157] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:42:52.995 [DEBUG] [Thread-139157] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T02:42:52.995 [DEBUG] [Thread-139157] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:42:53.014 [INFO] [Thread-139157] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:42:53.014 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T02:42:53.015 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:42:53.824 [DEBUG] [Thread-139157] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:42:53.824 [DEBUG] [Thread-139157] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:42:53.872 [DEBUG] [Thread-139157] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:42:53.872 [DEBUG] [Thread-139157] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:42:53.881 [DEBUG] [Thread-139157] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:42:53.890 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:42:53.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T02:42:53.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T02:42:53.909 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:42:53.909 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:42:53.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:42:53.918 [DEBUG] [Thread-139157] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:43:00.404 [DEBUG] [Thread-139159 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:43:05.721 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:43:05.722 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:43:05.933 [DEBUG] [Thread-139160 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:43:15.448 [DEBUG] [Thread-139161 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:43:23.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T02:43:23.941 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T02:43:23.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T02:43:24.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 2, 43, 17), 3.27, 80.55, 0.0, 10.52, 13.13, 0, 1, 0, 2, 0, 0),)
2026-01-01T02:43:24.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 02:43:17
2026-01-01T02:43:24.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T02:43:24.925 [DEBUG] [Thread-139162] [transport.py] [_log()] starting thread (client mode): 0xb95b0730
2026-01-01T02:43:24.925 [DEBUG] [Thread-139162] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:43:24.946 [DEBUG] [Thread-139162] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T02:43:24.946 [INFO] [Thread-139162] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T02:43:24.949 [DEBUG] [Thread-139162] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:43:24.949 [DEBUG] [Thread-139162] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T02:43:24.949 [DEBUG] [Thread-139162] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:43:24.949 [DEBUG] [Thread-139162] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:43:24.949 [DEBUG] [Thread-139162] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:43:24.949 [DEBUG] [Thread-139162] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:43:24.949 [DEBUG] [Thread-139162] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:43:24.949 [DEBUG] [Thread-139162] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:43:24.949 [DEBUG] [Thread-139162] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:43:24.949 [DEBUG] [Thread-139162] [transport.py] [_log()] client lang: <none>
2026-01-01T02:43:24.949 [DEBUG] [Thread-139162] [transport.py] [_log()] server lang: <none>
2026-01-01T02:43:24.949 [DEBUG] [Thread-139162] [transport.py] [_log()] kex follows: False
2026-01-01T02:43:24.949 [DEBUG] [Thread-139162] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:43:24.949 [DEBUG] [Thread-139162] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:43:24.949 [DEBUG] [Thread-139162] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:43:24.949 [DEBUG] [Thread-139162] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:43:24.949 [DEBUG] [Thread-139162] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:43:24.949 [DEBUG] [Thread-139162] [transport.py] [_log()] Compression: none
2026-01-01T02:43:24.949 [DEBUG] [Thread-139162] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:43:24.967 [DEBUG] [Thread-139162] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:43:24.968 [DEBUG] [Thread-139162] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:43:24.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T02:43:24.969 [DEBUG] [Thread-139162] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T02:43:24.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:43:24.972 [DEBUG] [Thread-139162] [transport.py] [_log()] userauth is OK
2026-01-01T02:43:24.973 [DEBUG] [Thread-139162] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:43:24.973 [DEBUG] [Thread-139162] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:43:24.973 [DEBUG] [Thread-139162] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T02:43:24.973 [DEBUG] [Thread-139162] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:43:24.997 [INFO] [Thread-139162] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:43:24.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:43:25.642 [DEBUG] [Thread-139162] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:43:25.642 [DEBUG] [Thread-139162] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:43:25.643 [DEBUG] [Thread-139162] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T02:43:25.684 [DEBUG] [Thread-139162] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:43:25.684 [DEBUG] [Thread-139162] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:43:25.687 [DEBUG] [Thread-139162] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:43:25.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:43:25.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T02:43:25.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T02:43:25.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T02:43:25.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:43:25.702 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T02:43:25.703 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:43:25.703 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:43:25.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T02:43:25.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.029992 -999.00  +13.20   6.98     83  +10.50 1 1 1 2 1     0    0 2.22 -22.62 ZNESW 7.4 7.0 227.3 11.1 13.9 -20.9 13.8 -20.4 13.6 -18.8 13.9 -20.1
2026-01-01T02:43:25.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T02:43:25.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T02:43:25.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.029992
2026-01-01T02:43:25.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T02:43:25.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T02:43:25.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T02:43:25.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T02:43:25.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T02:43:25.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T02:43:17', tmtdew=3.27, humidity=80.55, cloud=0.0, wind=10.52, temperature=13.13, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T02:43:17', seeing=1.04, atlas_timestamp='2026-01-01T00:43:11.309', atlas_cloud=1, atlas_rain=1, zp_data=[0.07525000000000048, 0.08975000000000044, 0.10025000000000084, 0.06550000000000011, 0.05250000000000021, 0.10325000000000095, 0.1399999999999988, 0.11625000000000085, 0.1385000000000005, 0.16900000000000048, 0.07925000000000004, 0.08499999999999908, 0.13100000000000023, 0.16324999999999967, 0.11599999999999966, 0.10849999999999937, 0.12325000000000053, 0.22850000000000037, 0.16499999999999915, 0.17324999999999946, 0.16449999999999854, 0.1247499999999988, 0.10525000000000162, 0.18175000000000097, 0.1609999999999996, 0.16849999999999987, 0.1687499999999993, 0.19950000000000045, 0.24650000000000016, 0.29350000000000165, 0.1850000000000005, 0.28500000000000103, 0.21274999999999977], zp_timestamp='2026-01-01T00:41:00')
2026-01-01T02:43:25.705 [DEBUG] [Thread-139162] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:43:25.791 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T02:43:25.801 [DEBUG] [Thread-139165] [transport.py] [_log()] starting thread (client mode): 0xb6b15810
2026-01-01T02:43:25.801 [DEBUG] [Thread-139165] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:43:25.816 [DEBUG] [Thread-139165] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T02:43:25.816 [INFO] [Thread-139165] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T02:43:25.824 [DEBUG] [Thread-139165] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:43:25.824 [DEBUG] [Thread-139165] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T02:43:25.824 [DEBUG] [Thread-139165] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:43:25.824 [DEBUG] [Thread-139165] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:43:25.825 [DEBUG] [Thread-139165] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:43:25.825 [DEBUG] [Thread-139165] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:43:25.825 [DEBUG] [Thread-139165] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:43:25.825 [DEBUG] [Thread-139165] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:43:25.825 [DEBUG] [Thread-139165] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:43:25.825 [DEBUG] [Thread-139165] [transport.py] [_log()] client lang: <none>
2026-01-01T02:43:25.825 [DEBUG] [Thread-139165] [transport.py] [_log()] server lang: <none>
2026-01-01T02:43:25.825 [DEBUG] [Thread-139165] [transport.py] [_log()] kex follows: False
2026-01-01T02:43:25.825 [DEBUG] [Thread-139165] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:43:25.826 [DEBUG] [Thread-139165] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:43:25.826 [DEBUG] [Thread-139165] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:43:25.826 [DEBUG] [Thread-139165] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:43:25.826 [DEBUG] [Thread-139165] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:43:25.826 [DEBUG] [Thread-139165] [transport.py] [_log()] Compression: none
2026-01-01T02:43:25.826 [DEBUG] [Thread-139165] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:43:25.883 [DEBUG] [Thread-139165] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:43:25.884 [DEBUG] [Thread-139165] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:43:25.884 [DEBUG] [Thread-139165] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T02:43:25.885 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T02:43:25.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:43:25.946 [DEBUG] [Thread-139165] [transport.py] [_log()] userauth is OK
2026-01-01T02:43:25.947 [DEBUG] [Thread-139165] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:43:25.947 [DEBUG] [Thread-139165] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:43:25.947 [DEBUG] [Thread-139165] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T02:43:25.947 [DEBUG] [Thread-139165] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:43:25.969 [INFO] [Thread-139165] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:43:25.970 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T02:43:25.970 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:43:26.823 [DEBUG] [Thread-139165] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:43:26.823 [DEBUG] [Thread-139165] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:43:26.871 [DEBUG] [Thread-139165] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:43:26.871 [DEBUG] [Thread-139165] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:43:26.880 [DEBUG] [Thread-139165] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:43:26.889 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:43:26.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T02:43:26.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T02:43:26.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:43:26.909 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:43:26.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:43:26.917 [DEBUG] [Thread-139165] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:43:30.483 [DEBUG] [Thread-139167 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:43:45.547 [DEBUG] [Thread-139168 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:43:56.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T02:43:56.940 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T02:43:56.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T02:43:57.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 2, 43, 49), 3.22, 80.55, 0.0, 9.58, 13.08, 0, 1, 0, 2, 0, 0),)
2026-01-01T02:43:57.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 02:43:49
2026-01-01T02:43:57.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T02:43:57.915 [DEBUG] [Thread-139169] [transport.py] [_log()] starting thread (client mode): 0xb95598d0
2026-01-01T02:43:57.916 [DEBUG] [Thread-139169] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:43:57.936 [DEBUG] [Thread-139169] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T02:43:57.936 [INFO] [Thread-139169] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T02:43:57.938 [DEBUG] [Thread-139169] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:43:57.938 [DEBUG] [Thread-139169] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T02:43:57.938 [DEBUG] [Thread-139169] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:43:57.938 [DEBUG] [Thread-139169] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:43:57.938 [DEBUG] [Thread-139169] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:43:57.938 [DEBUG] [Thread-139169] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:43:57.938 [DEBUG] [Thread-139169] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:43:57.938 [DEBUG] [Thread-139169] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:43:57.938 [DEBUG] [Thread-139169] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:43:57.938 [DEBUG] [Thread-139169] [transport.py] [_log()] client lang: <none>
2026-01-01T02:43:57.938 [DEBUG] [Thread-139169] [transport.py] [_log()] server lang: <none>
2026-01-01T02:43:57.938 [DEBUG] [Thread-139169] [transport.py] [_log()] kex follows: False
2026-01-01T02:43:57.938 [DEBUG] [Thread-139169] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:43:57.938 [DEBUG] [Thread-139169] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:43:57.938 [DEBUG] [Thread-139169] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:43:57.938 [DEBUG] [Thread-139169] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:43:57.938 [DEBUG] [Thread-139169] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:43:57.938 [DEBUG] [Thread-139169] [transport.py] [_log()] Compression: none
2026-01-01T02:43:57.939 [DEBUG] [Thread-139169] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:43:57.952 [DEBUG] [Thread-139169] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:43:57.953 [DEBUG] [Thread-139169] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:43:57.953 [DEBUG] [Thread-139169] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T02:43:57.954 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T02:43:57.954 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:43:57.956 [DEBUG] [Thread-139169] [transport.py] [_log()] userauth is OK
2026-01-01T02:43:57.956 [DEBUG] [Thread-139169] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:43:57.957 [DEBUG] [Thread-139169] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:43:57.957 [DEBUG] [Thread-139169] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T02:43:57.957 [DEBUG] [Thread-139169] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:43:57.982 [INFO] [Thread-139169] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:43:57.983 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:43:58.587 [DEBUG] [Thread-139169] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:43:58.587 [DEBUG] [Thread-139169] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:43:58.588 [DEBUG] [Thread-139169] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T02:43:58.628 [DEBUG] [Thread-139169] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:43:58.628 [DEBUG] [Thread-139169] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:43:58.631 [DEBUG] [Thread-139169] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:43:58.638 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:43:58.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T02:43:58.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T02:43:58.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T02:43:58.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:43:58.648 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T02:43:58.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:43:58.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:43:58.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T02:43:58.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.030340 -999.00  +13.20   7.53     83  +10.50 1 1 1 2 1     0    0 2.14 -22.73 ZNESW 7.8 7.5 196.2 11.9 13.9 -20.8 13.8 -20.4 13.6 -18.9 13.8 -19.9
2026-01-01T02:43:58.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T02:43:58.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T02:43:58.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.030340
2026-01-01T02:43:58.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T02:43:58.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T02:43:58.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T02:43:58.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T02:43:58.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T02:43:58.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T02:43:49', tmtdew=3.22, humidity=80.55, cloud=0.0, wind=9.58, temperature=13.08, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T02:43:49', seeing=1.04, atlas_timestamp='2026-01-01T00:43:41.376', atlas_cloud=1, atlas_rain=1, zp_data=[0.07525000000000048, 0.08975000000000044, 0.10025000000000084, 0.06550000000000011, 0.05250000000000021, 0.10325000000000095, 0.1399999999999988, 0.11625000000000085, 0.1385000000000005, 0.16900000000000048, 0.07925000000000004, 0.08499999999999908, 0.13100000000000023, 0.16324999999999967, 0.11599999999999966, 0.10849999999999937, 0.12325000000000053, 0.22850000000000037, 0.16499999999999915, 0.17324999999999946, 0.16449999999999854, 0.1247499999999988, 0.10525000000000162, 0.18175000000000097, 0.1609999999999996, 0.16849999999999987, 0.1687499999999993, 0.19950000000000045, 0.24650000000000016, 0.29350000000000165, 0.1850000000000005, 0.28500000000000103, 0.21274999999999977], zp_timestamp='2026-01-01T00:41:00')
2026-01-01T02:43:58.651 [DEBUG] [Thread-139169] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:43:58.735 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T02:43:58.747 [DEBUG] [Thread-139172] [transport.py] [_log()] starting thread (client mode): 0xb95b11b0
2026-01-01T02:43:58.747 [DEBUG] [Thread-139172] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:43:58.762 [DEBUG] [Thread-139172] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T02:43:58.762 [INFO] [Thread-139172] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T02:43:58.770 [DEBUG] [Thread-139172] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:43:58.770 [DEBUG] [Thread-139172] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T02:43:58.770 [DEBUG] [Thread-139172] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:43:58.770 [DEBUG] [Thread-139172] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:43:58.770 [DEBUG] [Thread-139172] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:43:58.771 [DEBUG] [Thread-139172] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:43:58.771 [DEBUG] [Thread-139172] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:43:58.771 [DEBUG] [Thread-139172] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:43:58.771 [DEBUG] [Thread-139172] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:43:58.771 [DEBUG] [Thread-139172] [transport.py] [_log()] client lang: <none>
2026-01-01T02:43:58.771 [DEBUG] [Thread-139172] [transport.py] [_log()] server lang: <none>
2026-01-01T02:43:58.771 [DEBUG] [Thread-139172] [transport.py] [_log()] kex follows: False
2026-01-01T02:43:58.771 [DEBUG] [Thread-139172] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:43:58.772 [DEBUG] [Thread-139172] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:43:58.772 [DEBUG] [Thread-139172] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:43:58.772 [DEBUG] [Thread-139172] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:43:58.772 [DEBUG] [Thread-139172] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:43:58.772 [DEBUG] [Thread-139172] [transport.py] [_log()] Compression: none
2026-01-01T02:43:58.772 [DEBUG] [Thread-139172] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:43:58.830 [DEBUG] [Thread-139172] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:43:58.830 [DEBUG] [Thread-139172] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:43:58.831 [DEBUG] [Thread-139172] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T02:43:58.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T02:43:58.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:43:58.886 [DEBUG] [Thread-139172] [transport.py] [_log()] userauth is OK
2026-01-01T02:43:58.887 [DEBUG] [Thread-139172] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:43:58.887 [DEBUG] [Thread-139172] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:43:58.887 [DEBUG] [Thread-139172] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T02:43:58.887 [DEBUG] [Thread-139172] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:43:58.905 [INFO] [Thread-139172] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:43:58.906 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T02:43:58.906 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:43:59.698 [DEBUG] [Thread-139172] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:43:59.698 [DEBUG] [Thread-139172] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:43:59.746 [DEBUG] [Thread-139172] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:43:59.746 [DEBUG] [Thread-139172] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:43:59.756 [DEBUG] [Thread-139172] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:43:59.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:43:59.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T02:43:59.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T02:43:59.785 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:43:59.785 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:43:59.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:43:59.794 [DEBUG] [Thread-139172] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:44:00.577 [DEBUG] [Thread-139174 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:44:05.923 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:44:05.924 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:44:06.010 [DEBUG] [Thread-139175 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:44:15.625 [DEBUG] [Thread-139176 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:44:29.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T02:44:29.816 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T02:44:29.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T02:44:30.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 2, 44, 21), 3.23, 80.5, 0.0, 9.86, 13.1, 0, 1, 0, 2, 0, 0),)
2026-01-01T02:44:30.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 02:44:21
2026-01-01T02:44:30.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T02:44:30.659 [DEBUG] [Thread-139177 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:44:30.792 [DEBUG] [Thread-139178] [transport.py] [_log()] starting thread (client mode): 0xb9558580
2026-01-01T02:44:30.792 [DEBUG] [Thread-139178] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:44:30.813 [DEBUG] [Thread-139178] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T02:44:30.813 [INFO] [Thread-139178] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T02:44:30.815 [DEBUG] [Thread-139178] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:44:30.816 [DEBUG] [Thread-139178] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T02:44:30.816 [DEBUG] [Thread-139178] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:44:30.816 [DEBUG] [Thread-139178] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:44:30.816 [DEBUG] [Thread-139178] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:44:30.816 [DEBUG] [Thread-139178] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:44:30.816 [DEBUG] [Thread-139178] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:44:30.816 [DEBUG] [Thread-139178] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:44:30.816 [DEBUG] [Thread-139178] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:44:30.816 [DEBUG] [Thread-139178] [transport.py] [_log()] client lang: <none>
2026-01-01T02:44:30.816 [DEBUG] [Thread-139178] [transport.py] [_log()] server lang: <none>
2026-01-01T02:44:30.816 [DEBUG] [Thread-139178] [transport.py] [_log()] kex follows: False
2026-01-01T02:44:30.816 [DEBUG] [Thread-139178] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:44:30.816 [DEBUG] [Thread-139178] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:44:30.816 [DEBUG] [Thread-139178] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:44:30.816 [DEBUG] [Thread-139178] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:44:30.816 [DEBUG] [Thread-139178] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:44:30.816 [DEBUG] [Thread-139178] [transport.py] [_log()] Compression: none
2026-01-01T02:44:30.816 [DEBUG] [Thread-139178] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:44:30.823 [DEBUG] [Thread-139178] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:44:30.824 [DEBUG] [Thread-139178] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:44:30.824 [DEBUG] [Thread-139178] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T02:44:30.824 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T02:44:30.824 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:44:30.825 [DEBUG] [Thread-139178] [transport.py] [_log()] userauth is OK
2026-01-01T02:44:30.825 [DEBUG] [Thread-139178] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:44:30.825 [DEBUG] [Thread-139178] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:44:30.825 [DEBUG] [Thread-139178] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T02:44:30.825 [DEBUG] [Thread-139178] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:44:30.843 [INFO] [Thread-139178] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:44:30.844 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:44:31.472 [DEBUG] [Thread-139178] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:44:31.473 [DEBUG] [Thread-139178] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:44:31.474 [DEBUG] [Thread-139178] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T02:44:31.513 [DEBUG] [Thread-139178] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:44:31.513 [DEBUG] [Thread-139178] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:44:31.517 [DEBUG] [Thread-139178] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:44:31.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:44:31.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T02:44:31.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T02:44:31.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T02:44:31.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:44:31.542 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T02:44:31.542 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:44:31.542 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:44:31.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T02:44:31.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.030687 -999.00  +13.20   5.04     83  +10.50 1 1 1 2 1     0    0 2.23 -22.58 ZNESW 4.9 5.0 211.5 8.2 13.9 -20.8 13.8 -20.5 13.6 -18.8 13.8 -19.8
2026-01-01T02:44:31.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T02:44:31.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T02:44:31.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.030687
2026-01-01T02:44:31.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T02:44:31.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T02:44:31.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T02:44:31.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T02:44:31.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T02:44:31.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T02:44:21', tmtdew=3.23, humidity=80.5, cloud=0.0, wind=9.86, temperature=13.1, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T02:44:21', seeing=1.01, atlas_timestamp='2026-01-01T00:44:11.357', atlas_cloud=1, atlas_rain=1, zp_data=[0.07525000000000048, 0.08975000000000044, 0.10025000000000084, 0.06550000000000011, 0.05250000000000021, 0.10325000000000095, 0.1399999999999988, 0.11625000000000085, 0.1385000000000005, 0.16900000000000048, 0.07925000000000004, 0.08499999999999908, 0.13100000000000023, 0.16324999999999967, 0.11599999999999966, 0.10849999999999937, 0.12325000000000053, 0.22850000000000037, 0.16499999999999915, 0.17324999999999946, 0.16449999999999854, 0.1247499999999988, 0.10525000000000162, 0.18175000000000097, 0.1609999999999996, 0.16849999999999987, 0.1687499999999993, 0.19950000000000045, 0.24650000000000016, 0.29350000000000165, 0.1850000000000005, 0.28500000000000103, 0.21274999999999977], zp_timestamp='2026-01-01T00:41:00')
2026-01-01T02:44:31.545 [DEBUG] [Thread-139178] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:44:31.637 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T02:44:31.648 [DEBUG] [Thread-139181] [transport.py] [_log()] starting thread (client mode): 0xb955a4d0
2026-01-01T02:44:31.649 [DEBUG] [Thread-139181] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:44:31.664 [DEBUG] [Thread-139181] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T02:44:31.664 [INFO] [Thread-139181] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T02:44:31.672 [DEBUG] [Thread-139181] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:44:31.672 [DEBUG] [Thread-139181] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T02:44:31.672 [DEBUG] [Thread-139181] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:44:31.672 [DEBUG] [Thread-139181] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:44:31.672 [DEBUG] [Thread-139181] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:44:31.672 [DEBUG] [Thread-139181] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:44:31.672 [DEBUG] [Thread-139181] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:44:31.672 [DEBUG] [Thread-139181] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:44:31.672 [DEBUG] [Thread-139181] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:44:31.672 [DEBUG] [Thread-139181] [transport.py] [_log()] client lang: <none>
2026-01-01T02:44:31.672 [DEBUG] [Thread-139181] [transport.py] [_log()] server lang: <none>
2026-01-01T02:44:31.672 [DEBUG] [Thread-139181] [transport.py] [_log()] kex follows: False
2026-01-01T02:44:31.672 [DEBUG] [Thread-139181] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:44:31.673 [DEBUG] [Thread-139181] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:44:31.673 [DEBUG] [Thread-139181] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:44:31.673 [DEBUG] [Thread-139181] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:44:31.673 [DEBUG] [Thread-139181] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:44:31.673 [DEBUG] [Thread-139181] [transport.py] [_log()] Compression: none
2026-01-01T02:44:31.673 [DEBUG] [Thread-139181] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:44:31.732 [DEBUG] [Thread-139181] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:44:31.733 [DEBUG] [Thread-139181] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:44:31.733 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T02:44:31.734 [DEBUG] [Thread-139181] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T02:44:31.735 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:44:31.790 [DEBUG] [Thread-139181] [transport.py] [_log()] userauth is OK
2026-01-01T02:44:31.790 [DEBUG] [Thread-139181] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:44:31.791 [DEBUG] [Thread-139181] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:44:31.791 [DEBUG] [Thread-139181] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T02:44:31.791 [DEBUG] [Thread-139181] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:44:31.810 [INFO] [Thread-139181] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:44:31.810 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T02:44:31.811 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:44:32.652 [DEBUG] [Thread-139181] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:44:32.652 [DEBUG] [Thread-139181] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:44:32.700 [DEBUG] [Thread-139181] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:44:32.700 [DEBUG] [Thread-139181] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:44:32.709 [DEBUG] [Thread-139181] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:44:32.718 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:44:32.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T02:44: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') -> 00000000
2026-01-01T02:44:32.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:44:32.739 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:44:32.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:44:32.747 [DEBUG] [Thread-139181] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:44:45.689 [DEBUG] [Thread-139183 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:45:00.734 [DEBUG] [Thread-139184 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:45:02.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T02:45:02.769 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T02:45:02.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T02:45:03.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 2, 44, 53), 3.22, 80.55, 0.0, 9.6, 13.03, 0, 1, 0, 2, 0, 0),)
2026-01-01T02:45:03.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 02:44:53
2026-01-01T02:45:03.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T02:45:03.764 [DEBUG] [Thread-139185] [transport.py] [_log()] starting thread (client mode): 0xb6b2a5f0
2026-01-01T02:45:03.764 [DEBUG] [Thread-139185] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:45:03.785 [DEBUG] [Thread-139185] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T02:45:03.785 [INFO] [Thread-139185] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T02:45:03.788 [DEBUG] [Thread-139185] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:45:03.788 [DEBUG] [Thread-139185] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T02:45:03.788 [DEBUG] [Thread-139185] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:45:03.788 [DEBUG] [Thread-139185] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:45:03.788 [DEBUG] [Thread-139185] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:45:03.788 [DEBUG] [Thread-139185] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:45:03.788 [DEBUG] [Thread-139185] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:45:03.788 [DEBUG] [Thread-139185] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:45:03.788 [DEBUG] [Thread-139185] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:45:03.789 [DEBUG] [Thread-139185] [transport.py] [_log()] client lang: <none>
2026-01-01T02:45:03.789 [DEBUG] [Thread-139185] [transport.py] [_log()] server lang: <none>
2026-01-01T02:45:03.789 [DEBUG] [Thread-139185] [transport.py] [_log()] kex follows: False
2026-01-01T02:45:03.789 [DEBUG] [Thread-139185] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:45:03.789 [DEBUG] [Thread-139185] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:45:03.789 [DEBUG] [Thread-139185] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:45:03.789 [DEBUG] [Thread-139185] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:45:03.789 [DEBUG] [Thread-139185] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:45:03.789 [DEBUG] [Thread-139185] [transport.py] [_log()] Compression: none
2026-01-01T02:45:03.789 [DEBUG] [Thread-139185] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:45:03.805 [DEBUG] [Thread-139185] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:45:03.805 [DEBUG] [Thread-139185] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:45:03.805 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T02:45:03.805 [DEBUG] [Thread-139185] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T02:45:03.805 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:45:03.806 [DEBUG] [Thread-139185] [transport.py] [_log()] userauth is OK
2026-01-01T02:45:03.806 [DEBUG] [Thread-139185] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:45:03.806 [DEBUG] [Thread-139185] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:45:03.806 [DEBUG] [Thread-139185] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T02:45:03.806 [DEBUG] [Thread-139185] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:45:03.818 [INFO] [Thread-139185] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:45:03.818 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:45:06.067 [DEBUG] [Thread-139187 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:45:06.137 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:45:06.138 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:45:11.979 [DEBUG] [Thread-139185] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:45:11.980 [DEBUG] [Thread-139185] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:45:11.980 [DEBUG] [Thread-139185] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T02:45:12.021 [DEBUG] [Thread-139185] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:45:12.021 [DEBUG] [Thread-139185] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:45:12.024 [DEBUG] [Thread-139185] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:45:12.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:45:12.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T02:45:12.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T02:45:12.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T02:45:12.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:45:12.187 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T02:45:12.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:45:12.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:45:12.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T02:45:12.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.030687 -999.00  +13.20   5.04     83  +10.50 1 1 1 2 1     0    0 2.23 -22.58 ZNESW 4.9 5.0 211.5 8.2 13.9 -20.8 13.8 -20.5 13.6 -18.8 13.8 -19.8
2026-01-01T02:45:12.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T02:45:12.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T02:45:12.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.030687
2026-01-01T02:45:12.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T02:45:12.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T02:45:12.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T02:45:12.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T02:45:12.189 [DEBUG] [Thread-139185] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:45:12.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T02:45:12.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T02:44:53', tmtdew=3.22, humidity=80.55, cloud=0.0, wind=9.6, temperature=13.03, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T02:44:53', seeing=1.0, atlas_timestamp='2026-01-01T00:44:11.357', atlas_cloud=1, atlas_rain=1, zp_data=[0.07525000000000048, 0.08975000000000044, 0.10025000000000084, 0.06550000000000011, 0.05250000000000021, 0.10325000000000095, 0.1399999999999988, 0.11625000000000085, 0.1385000000000005, 0.16900000000000048, 0.07925000000000004, 0.08499999999999908, 0.13100000000000023, 0.16324999999999967, 0.11599999999999966, 0.10849999999999937, 0.12325000000000053, 0.22850000000000037, 0.16499999999999915, 0.17324999999999946, 0.16449999999999854, 0.1247499999999988, 0.10525000000000162, 0.18175000000000097, 0.1609999999999996, 0.16849999999999987, 0.1687499999999993, 0.19950000000000045, 0.24650000000000016, 0.29350000000000165, 0.1850000000000005, 0.28500000000000103, 0.21274999999999977], zp_timestamp='2026-01-01T00:41:00')
2026-01-01T02:45:12.275 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T02:45:12.287 [DEBUG] [Thread-139189] [transport.py] [_log()] starting thread (client mode): 0xb6b15180
2026-01-01T02:45:12.288 [DEBUG] [Thread-139189] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:45:12.303 [DEBUG] [Thread-139189] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T02:45:12.303 [INFO] [Thread-139189] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T02:45:12.311 [DEBUG] [Thread-139189] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:45:12.311 [DEBUG] [Thread-139189] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T02:45:12.311 [DEBUG] [Thread-139189] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:45:12.311 [DEBUG] [Thread-139189] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:45:12.311 [DEBUG] [Thread-139189] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:45:12.312 [DEBUG] [Thread-139189] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:45:12.312 [DEBUG] [Thread-139189] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:45:12.312 [DEBUG] [Thread-139189] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:45:12.312 [DEBUG] [Thread-139189] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:45:12.312 [DEBUG] [Thread-139189] [transport.py] [_log()] client lang: <none>
2026-01-01T02:45:12.312 [DEBUG] [Thread-139189] [transport.py] [_log()] server lang: <none>
2026-01-01T02:45:12.312 [DEBUG] [Thread-139189] [transport.py] [_log()] kex follows: False
2026-01-01T02:45:12.312 [DEBUG] [Thread-139189] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:45:12.312 [DEBUG] [Thread-139189] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:45:12.312 [DEBUG] [Thread-139189] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:45:12.313 [DEBUG] [Thread-139189] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:45:12.313 [DEBUG] [Thread-139189] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:45:12.313 [DEBUG] [Thread-139189] [transport.py] [_log()] Compression: none
2026-01-01T02:45:12.313 [DEBUG] [Thread-139189] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:45:12.370 [DEBUG] [Thread-139189] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:45:12.370 [DEBUG] [Thread-139189] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:45:12.371 [DEBUG] [Thread-139189] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T02:45:12.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T02:45:12.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:45:12.426 [DEBUG] [Thread-139189] [transport.py] [_log()] userauth is OK
2026-01-01T02:45:12.426 [DEBUG] [Thread-139189] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:45:12.426 [DEBUG] [Thread-139189] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:45:12.426 [DEBUG] [Thread-139189] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T02:45:12.426 [DEBUG] [Thread-139189] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:45:12.445 [INFO] [Thread-139189] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:45:12.445 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T02:45:12.446 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:45:13.266 [DEBUG] [Thread-139189] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:45:13.266 [DEBUG] [Thread-139189] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:45:13.314 [DEBUG] [Thread-139189] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:45:13.314 [DEBUG] [Thread-139189] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:45:13.323 [DEBUG] [Thread-139189] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:45:13.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:45:13.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T02:45:13.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T02:45:13.350 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:45:13.350 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:45:13.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:45:13.358 [DEBUG] [Thread-139189] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:45:15.769 [DEBUG] [Thread-139191 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:45:30.820 [DEBUG] [Thread-139192 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:45:43.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T02:45:43.381 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T02:45:43.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T02:45:44.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 2, 45, 25), 3.21, 80.59, 0.0, 10.5, 13.03, 0, 1, 0, 2, 0, 0),)
2026-01-01T02:45:44.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 02:45:25
2026-01-01T02:45:44.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T02:45:44.375 [DEBUG] [Thread-139193] [transport.py] [_log()] starting thread (client mode): 0xb1794370
2026-01-01T02:45:44.376 [DEBUG] [Thread-139193] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:45:44.396 [DEBUG] [Thread-139193] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T02:45:44.396 [INFO] [Thread-139193] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T02:45:44.399 [DEBUG] [Thread-139193] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:45:44.399 [DEBUG] [Thread-139193] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T02:45:44.399 [DEBUG] [Thread-139193] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:45:44.399 [DEBUG] [Thread-139193] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:45:44.399 [DEBUG] [Thread-139193] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:45:44.399 [DEBUG] [Thread-139193] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:45:44.399 [DEBUG] [Thread-139193] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:45:44.399 [DEBUG] [Thread-139193] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:45:44.399 [DEBUG] [Thread-139193] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:45:44.399 [DEBUG] [Thread-139193] [transport.py] [_log()] client lang: <none>
2026-01-01T02:45:44.399 [DEBUG] [Thread-139193] [transport.py] [_log()] server lang: <none>
2026-01-01T02:45:44.399 [DEBUG] [Thread-139193] [transport.py] [_log()] kex follows: False
2026-01-01T02:45:44.399 [DEBUG] [Thread-139193] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:45:44.399 [DEBUG] [Thread-139193] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:45:44.400 [DEBUG] [Thread-139193] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:45:44.400 [DEBUG] [Thread-139193] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:45:44.400 [DEBUG] [Thread-139193] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:45:44.400 [DEBUG] [Thread-139193] [transport.py] [_log()] Compression: none
2026-01-01T02:45:44.400 [DEBUG] [Thread-139193] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:45:44.415 [DEBUG] [Thread-139193] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:45:44.415 [DEBUG] [Thread-139193] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:45:44.415 [DEBUG] [Thread-139193] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T02:45:44.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T02:45:44.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:45:44.416 [DEBUG] [Thread-139193] [transport.py] [_log()] userauth is OK
2026-01-01T02:45:44.416 [DEBUG] [Thread-139193] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:45:44.416 [DEBUG] [Thread-139193] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:45:44.416 [DEBUG] [Thread-139193] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T02:45:44.416 [DEBUG] [Thread-139193] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:45:44.432 [INFO] [Thread-139193] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:45:44.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:45:45.084 [DEBUG] [Thread-139193] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:45:45.084 [DEBUG] [Thread-139193] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:45:45.084 [DEBUG] [Thread-139193] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T02:45:45.125 [DEBUG] [Thread-139193] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:45:45.125 [DEBUG] [Thread-139193] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:45:45.127 [DEBUG] [Thread-139193] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:45:45.139 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:45:45.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T02:45:45.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T02:45:45.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T02:45:45.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:45:45.144 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T02:45:45.144 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:45:45.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:45:45.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T02:45:45.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.031034 -999.00  +13.20   6.34     83  +10.40 1 1 1 2 1     0    0 2.19 -22.20 ZNESW 7.3 6.3 221.1 9.0 13.9 -20.8 13.8 -20.4 13.6 -18.9 13.8 -19.9
2026-01-01T02:45:45.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T02:45:45.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T02:45:45.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.031034
2026-01-01T02:45:45.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T02:45:45.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T02:45:45.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T02:45:45.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T02:45:45.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T02:45:45.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T02:45:25', tmtdew=3.21, humidity=80.59, cloud=0.0, wind=10.5, temperature=13.03, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T02:45:25', seeing=0.94, atlas_timestamp='2026-01-01T00:44:41.338', atlas_cloud=1, atlas_rain=1, zp_data=[0.07525000000000048, 0.08975000000000044, 0.10025000000000084, 0.06550000000000011, 0.05250000000000021, 0.10325000000000095, 0.1399999999999988, 0.11625000000000085, 0.1385000000000005, 0.16900000000000048, 0.07925000000000004, 0.08499999999999908, 0.13100000000000023, 0.16324999999999967, 0.11599999999999966, 0.10849999999999937, 0.12325000000000053, 0.22850000000000037, 0.16499999999999915, 0.17324999999999946, 0.16449999999999854, 0.1247499999999988, 0.10525000000000162, 0.18175000000000097, 0.1609999999999996, 0.16849999999999987, 0.1687499999999993, 0.19950000000000045, 0.24650000000000016, 0.29350000000000165, 0.1850000000000005, 0.28500000000000103, 0.21274999999999977], zp_timestamp='2026-01-01T00:41:00')
2026-01-01T02:45:45.145 [DEBUG] [Thread-139193] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:45:45.219 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T02:45:45.231 [DEBUG] [Thread-139196] [transport.py] [_log()] starting thread (client mode): 0xb17947c0
2026-01-01T02:45:45.231 [DEBUG] [Thread-139196] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:45:45.247 [DEBUG] [Thread-139196] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T02:45:45.247 [INFO] [Thread-139196] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T02:45:45.254 [DEBUG] [Thread-139196] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:45:45.254 [DEBUG] [Thread-139196] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T02:45:45.254 [DEBUG] [Thread-139196] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:45:45.254 [DEBUG] [Thread-139196] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:45:45.254 [DEBUG] [Thread-139196] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:45:45.254 [DEBUG] [Thread-139196] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:45:45.254 [DEBUG] [Thread-139196] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:45:45.254 [DEBUG] [Thread-139196] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:45:45.254 [DEBUG] [Thread-139196] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:45:45.254 [DEBUG] [Thread-139196] [transport.py] [_log()] client lang: <none>
2026-01-01T02:45:45.254 [DEBUG] [Thread-139196] [transport.py] [_log()] server lang: <none>
2026-01-01T02:45:45.254 [DEBUG] [Thread-139196] [transport.py] [_log()] kex follows: False
2026-01-01T02:45:45.254 [DEBUG] [Thread-139196] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:45:45.254 [DEBUG] [Thread-139196] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:45:45.254 [DEBUG] [Thread-139196] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:45:45.254 [DEBUG] [Thread-139196] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:45:45.254 [DEBUG] [Thread-139196] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:45:45.254 [DEBUG] [Thread-139196] [transport.py] [_log()] Compression: none
2026-01-01T02:45:45.254 [DEBUG] [Thread-139196] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:45:45.312 [DEBUG] [Thread-139196] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:45:45.312 [DEBUG] [Thread-139196] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:45:45.312 [DEBUG] [Thread-139196] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T02:45:45.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T02:45:45.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:45:45.369 [DEBUG] [Thread-139196] [transport.py] [_log()] userauth is OK
2026-01-01T02:45:45.369 [DEBUG] [Thread-139196] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:45:45.369 [DEBUG] [Thread-139196] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:45:45.369 [DEBUG] [Thread-139196] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T02:45:45.369 [DEBUG] [Thread-139196] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:45:45.383 [INFO] [Thread-139196] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:45:45.383 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T02:45:45.384 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:45:45.852 [DEBUG] [Thread-139198 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:45:46.210 [DEBUG] [Thread-139196] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:45:46.210 [DEBUG] [Thread-139196] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:45:46.258 [DEBUG] [Thread-139196] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:45:46.258 [DEBUG] [Thread-139196] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:45:46.266 [DEBUG] [Thread-139196] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:45:46.274 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:45:46.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T02:45:46.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T02:45:46.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:45:46.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:45:46.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:45:46.298 [DEBUG] [Thread-139196] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:46:00.891 [DEBUG] [Thread-139199 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:46:06.134 [DEBUG] [Thread-139200 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:46:06.339 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:46:06.340 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:46:15.927 [DEBUG] [Thread-139201 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:46:16.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T02:46:16.295 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T02:46:16.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T02:46:16.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 2, 45, 57), 3.25, 80.64, 0.0, 10.2, 13.13, 0, 1, 0, 2, 0, 0),)
2026-01-01T02:46:16.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 02:45:57
2026-01-01T02:46:17.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T02:46:17.268 [DEBUG] [Thread-139202] [transport.py] [_log()] starting thread (client mode): 0xb1797520
2026-01-01T02:46:17.268 [DEBUG] [Thread-139202] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:46:17.288 [DEBUG] [Thread-139202] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T02:46:17.288 [INFO] [Thread-139202] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T02:46:17.291 [DEBUG] [Thread-139202] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:46:17.291 [DEBUG] [Thread-139202] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T02:46:17.291 [DEBUG] [Thread-139202] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:46:17.291 [DEBUG] [Thread-139202] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:46:17.291 [DEBUG] [Thread-139202] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:46:17.291 [DEBUG] [Thread-139202] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:46:17.292 [DEBUG] [Thread-139202] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:46:17.292 [DEBUG] [Thread-139202] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:46:17.292 [DEBUG] [Thread-139202] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:46:17.292 [DEBUG] [Thread-139202] [transport.py] [_log()] client lang: <none>
2026-01-01T02:46:17.292 [DEBUG] [Thread-139202] [transport.py] [_log()] server lang: <none>
2026-01-01T02:46:17.292 [DEBUG] [Thread-139202] [transport.py] [_log()] kex follows: False
2026-01-01T02:46:17.292 [DEBUG] [Thread-139202] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:46:17.292 [DEBUG] [Thread-139202] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:46:17.292 [DEBUG] [Thread-139202] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:46:17.292 [DEBUG] [Thread-139202] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:46:17.292 [DEBUG] [Thread-139202] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:46:17.292 [DEBUG] [Thread-139202] [transport.py] [_log()] Compression: none
2026-01-01T02:46:17.292 [DEBUG] [Thread-139202] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:46:17.309 [DEBUG] [Thread-139202] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:46:17.309 [DEBUG] [Thread-139202] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:46:17.310 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T02:46:17.310 [DEBUG] [Thread-139202] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T02:46:17.311 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:46:17.313 [DEBUG] [Thread-139202] [transport.py] [_log()] userauth is OK
2026-01-01T02:46:17.313 [DEBUG] [Thread-139202] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:46:17.313 [DEBUG] [Thread-139202] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:46:17.313 [DEBUG] [Thread-139202] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T02:46:17.313 [DEBUG] [Thread-139202] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:46:17.337 [INFO] [Thread-139202] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:46:17.340 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:46:17.992 [DEBUG] [Thread-139202] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:46:17.992 [DEBUG] [Thread-139202] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:46:17.993 [DEBUG] [Thread-139202] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T02:46:18.033 [DEBUG] [Thread-139202] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:46:18.033 [DEBUG] [Thread-139202] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:46:18.037 [DEBUG] [Thread-139202] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:46:18.048 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:46:18.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T02:46:18.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T02:46:18.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T02:46:18.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:46:18.060 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T02:46:18.060 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:46:18.060 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:46:18.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T02:46:18.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.031728 -999.00  +13.20   7.82     82  +10.40 1 1 1 2 1     0    0 2.14 -23.54 ZNESW 8.9 7.8 216.2 9.9 13.9 -20.8 13.8 -20.6 13.6 -19.0 13.9 -20.1
2026-01-01T02:46:18.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T02:46:18.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T02:46:18.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.031728
2026-01-01T02:46:18.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T02:46:18.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T02:46:18.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T02:46:18.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T02:46:18.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T02:46:18.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T02:45:57', tmtdew=3.25, humidity=80.64, cloud=0.0, wind=10.2, temperature=13.13, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T02:45:58', seeing=1.0, atlas_timestamp='2026-01-01T00:45:41.299', atlas_cloud=1, atlas_rain=1, zp_data=[0.04025000000000034, 0.10224999999999973, 0.0652500000000007, 0.053999999999998494, 0.07699999999999996, 0.08025000000000126, 0.11800000000000033, 0.15024999999999977, 0.13149999999999906, 0.20400000000000063, 0.03524999999999956, 0.0754999999999999, 0.09399999999999942, 0.11524999999999963, 0.058999999999999275, 0.1164999999999985, 0.17724999999999902, 0.20149999999999935, 0.13299999999999912, 0.11624999999999908, 0.10849999999999937, 0.1007499999999979, 0.08525000000000027, 0.18374999999999986, 0.15750000000000064, 0.19599999999999973, 0.17575000000000074, 0.14649999999999963, 0.1479999999999997, 0.17849999999999966, 0.24100000000000144, 0.3265000000000011, 0.1947499999999991], zp_timestamp='2026-01-01T00:44:00')
2026-01-01T02:46:18.063 [DEBUG] [Thread-139202] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:46:18.156 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T02:46:18.171 [DEBUG] [Thread-139205] [transport.py] [_log()] starting thread (client mode): 0xb6b00ac0
2026-01-01T02:46:18.171 [DEBUG] [Thread-139205] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:46:18.188 [DEBUG] [Thread-139205] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T02:46:18.189 [INFO] [Thread-139205] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T02:46:18.198 [DEBUG] [Thread-139205] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:46:18.198 [DEBUG] [Thread-139205] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T02:46:18.198 [DEBUG] [Thread-139205] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:46:18.198 [DEBUG] [Thread-139205] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:46:18.198 [DEBUG] [Thread-139205] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:46:18.198 [DEBUG] [Thread-139205] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:46:18.198 [DEBUG] [Thread-139205] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:46:18.198 [DEBUG] [Thread-139205] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:46:18.198 [DEBUG] [Thread-139205] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:46:18.199 [DEBUG] [Thread-139205] [transport.py] [_log()] client lang: <none>
2026-01-01T02:46:18.199 [DEBUG] [Thread-139205] [transport.py] [_log()] server lang: <none>
2026-01-01T02:46:18.199 [DEBUG] [Thread-139205] [transport.py] [_log()] kex follows: False
2026-01-01T02:46:18.199 [DEBUG] [Thread-139205] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:46:18.199 [DEBUG] [Thread-139205] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:46:18.199 [DEBUG] [Thread-139205] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:46:18.199 [DEBUG] [Thread-139205] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:46:18.199 [DEBUG] [Thread-139205] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:46:18.199 [DEBUG] [Thread-139205] [transport.py] [_log()] Compression: none
2026-01-01T02:46:18.199 [DEBUG] [Thread-139205] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:46:18.254 [DEBUG] [Thread-139205] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:46:18.255 [DEBUG] [Thread-139205] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:46:18.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T02:46:18.256 [DEBUG] [Thread-139205] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T02:46:18.257 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:46:18.310 [DEBUG] [Thread-139205] [transport.py] [_log()] userauth is OK
2026-01-01T02:46:18.311 [DEBUG] [Thread-139205] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:46:18.311 [DEBUG] [Thread-139205] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:46:18.311 [DEBUG] [Thread-139205] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T02:46:18.311 [DEBUG] [Thread-139205] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:46:18.329 [INFO] [Thread-139205] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:46:18.330 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T02:46:18.330 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:46:19.153 [DEBUG] [Thread-139205] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:46:19.154 [DEBUG] [Thread-139205] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:46:19.202 [DEBUG] [Thread-139205] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:46:19.202 [DEBUG] [Thread-139205] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:46:19.212 [DEBUG] [Thread-139205] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:46:19.221 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:46:19.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T02:46:19.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T02:46:19.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:46:19.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:46:19.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:46:19.249 [DEBUG] [Thread-139205] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:46:30.956 [DEBUG] [Thread-139207 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:46:45.994 [DEBUG] [Thread-139208 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:46:49.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T02:46:49.271 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T02:46:49.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T02:46:49.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 2, 46, 30), 3.27, 80.55, 0.0, 10.59, 13.05, 0, 1, 0, 2, 0, 0),)
2026-01-01T02:46:49.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 02:46:30
2026-01-01T02:46:50.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T02:46:50.238 [DEBUG] [Thread-139209] [transport.py] [_log()] starting thread (client mode): 0xb6bbec20
2026-01-01T02:46:50.238 [DEBUG] [Thread-139209] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:46:50.258 [DEBUG] [Thread-139209] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T02:46:50.259 [INFO] [Thread-139209] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T02:46:50.260 [DEBUG] [Thread-139209] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:46:50.260 [DEBUG] [Thread-139209] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T02:46:50.260 [DEBUG] [Thread-139209] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:46:50.260 [DEBUG] [Thread-139209] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:46:50.260 [DEBUG] [Thread-139209] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:46:50.260 [DEBUG] [Thread-139209] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:46:50.260 [DEBUG] [Thread-139209] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:46:50.260 [DEBUG] [Thread-139209] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:46:50.260 [DEBUG] [Thread-139209] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:46:50.260 [DEBUG] [Thread-139209] [transport.py] [_log()] client lang: <none>
2026-01-01T02:46:50.260 [DEBUG] [Thread-139209] [transport.py] [_log()] server lang: <none>
2026-01-01T02:46:50.260 [DEBUG] [Thread-139209] [transport.py] [_log()] kex follows: False
2026-01-01T02:46:50.260 [DEBUG] [Thread-139209] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:46:50.260 [DEBUG] [Thread-139209] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:46:50.260 [DEBUG] [Thread-139209] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:46:50.261 [DEBUG] [Thread-139209] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:46:50.261 [DEBUG] [Thread-139209] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:46:50.261 [DEBUG] [Thread-139209] [transport.py] [_log()] Compression: none
2026-01-01T02:46:50.261 [DEBUG] [Thread-139209] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:46:50.279 [DEBUG] [Thread-139209] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:46:50.280 [DEBUG] [Thread-139209] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:46:50.280 [DEBUG] [Thread-139209] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T02:46:50.280 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T02:46:50.281 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:46:50.282 [DEBUG] [Thread-139209] [transport.py] [_log()] userauth is OK
2026-01-01T02:46:50.282 [DEBUG] [Thread-139209] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:46:50.283 [DEBUG] [Thread-139209] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:46:50.283 [DEBUG] [Thread-139209] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T02:46:50.283 [DEBUG] [Thread-139209] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:46:50.317 [INFO] [Thread-139209] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:46:50.318 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:46:50.948 [DEBUG] [Thread-139209] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:46:50.949 [DEBUG] [Thread-139209] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:46:50.949 [DEBUG] [Thread-139209] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T02:46:50.990 [DEBUG] [Thread-139209] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:46:50.990 [DEBUG] [Thread-139209] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:46:50.994 [DEBUG] [Thread-139209] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:46:51.004 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:46:51.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T02:46:51.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T02:46:51.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T02:46:51.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:46:51.017 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T02:46:51.017 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:46:51.018 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:46:51.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T02:46:51.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.032075 -999.00  +13.20   4.21     82  +10.40 1 1 1 2 1     0    0 2.15 -23.31 ZNESW 5.1 4.2 248.1 9.8 13.9 -20.9 13.8 -20.6 13.6 -19.1 13.9 -20.1
2026-01-01T02:46:51.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T02:46:51.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T02:46:51.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.032075
2026-01-01T02:46:51.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T02:46:51.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T02:46:51.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T02:46:51.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T02:46:51.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T02:46:51.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T02:46:30', tmtdew=3.27, humidity=80.55, cloud=0.0, wind=10.59, temperature=13.05, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T02:46:30', seeing=1.02, atlas_timestamp='2026-01-01T00:46:11.280', atlas_cloud=1, atlas_rain=1, zp_data=[0.04025000000000034, 0.10224999999999973, 0.0652500000000007, 0.053999999999998494, 0.07699999999999996, 0.08025000000000126, 0.11800000000000033, 0.15024999999999977, 0.13149999999999906, 0.20400000000000063, 0.03524999999999956, 0.0754999999999999, 0.09399999999999942, 0.11524999999999963, 0.058999999999999275, 0.1164999999999985, 0.17724999999999902, 0.20149999999999935, 0.13299999999999912, 0.11624999999999908, 0.10849999999999937, 0.1007499999999979, 0.08525000000000027, 0.18374999999999986, 0.15750000000000064, 0.19599999999999973, 0.17575000000000074, 0.14649999999999963, 0.1479999999999997, 0.17849999999999966, 0.24100000000000144, 0.3265000000000011, 0.1947499999999991], zp_timestamp='2026-01-01T00:44:00')
2026-01-01T02:46:51.020 [DEBUG] [Thread-139209] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:46:51.112 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T02:46:51.125 [DEBUG] [Thread-139212] [transport.py] [_log()] starting thread (client mode): 0xb6b28190
2026-01-01T02:46:51.125 [DEBUG] [Thread-139212] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:46:51.139 [DEBUG] [Thread-139212] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T02:46:51.140 [INFO] [Thread-139212] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T02:46:51.147 [DEBUG] [Thread-139212] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:46:51.147 [DEBUG] [Thread-139212] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T02:46:51.147 [DEBUG] [Thread-139212] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:46:51.148 [DEBUG] [Thread-139212] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:46:51.148 [DEBUG] [Thread-139212] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:46:51.148 [DEBUG] [Thread-139212] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:46:51.148 [DEBUG] [Thread-139212] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:46:51.148 [DEBUG] [Thread-139212] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:46:51.148 [DEBUG] [Thread-139212] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:46:51.148 [DEBUG] [Thread-139212] [transport.py] [_log()] client lang: <none>
2026-01-01T02:46:51.148 [DEBUG] [Thread-139212] [transport.py] [_log()] server lang: <none>
2026-01-01T02:46:51.148 [DEBUG] [Thread-139212] [transport.py] [_log()] kex follows: False
2026-01-01T02:46:51.149 [DEBUG] [Thread-139212] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:46:51.149 [DEBUG] [Thread-139212] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:46:51.149 [DEBUG] [Thread-139212] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:46:51.149 [DEBUG] [Thread-139212] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:46:51.149 [DEBUG] [Thread-139212] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:46:51.149 [DEBUG] [Thread-139212] [transport.py] [_log()] Compression: none
2026-01-01T02:46:51.149 [DEBUG] [Thread-139212] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:46:51.206 [DEBUG] [Thread-139212] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:46:51.207 [DEBUG] [Thread-139212] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:46:51.208 [DEBUG] [Thread-139212] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T02:46:51.208 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T02:46:51.209 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:46:51.262 [DEBUG] [Thread-139212] [transport.py] [_log()] userauth is OK
2026-01-01T02:46:51.262 [DEBUG] [Thread-139212] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:46:51.263 [DEBUG] [Thread-139212] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:46:51.263 [DEBUG] [Thread-139212] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T02:46:51.263 [DEBUG] [Thread-139212] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:46:51.277 [INFO] [Thread-139212] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:46:51.278 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T02:46:51.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:46:52.108 [DEBUG] [Thread-139212] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:46:52.108 [DEBUG] [Thread-139212] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:46:52.156 [DEBUG] [Thread-139212] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:46:52.156 [DEBUG] [Thread-139212] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:46:52.166 [DEBUG] [Thread-139212] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:46:52.175 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:46:52.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T02:46:52.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T02:46:52.193 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:46:52.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:46:52.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:46:52.202 [DEBUG] [Thread-139212] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:47:01.031 [DEBUG] [Thread-139214 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:47:06.189 [DEBUG] [Thread-139215 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:47:06.540 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:47:06.541 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:47:16.075 [DEBUG] [Thread-139216 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:47:22.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T02:47:22.210 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T02:47:22.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T02:47:22.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 2, 47, 2), 3.27, 80.55, 0.0, 11.65, 13.11, 0, 1, 0, 2, 0, 0),)
2026-01-01T02:47:22.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 02:47:02
2026-01-01T02:47:23.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T02:47:23.176 [DEBUG] [Thread-139217] [transport.py] [_log()] starting thread (client mode): 0xb6b28490
2026-01-01T02:47:23.176 [DEBUG] [Thread-139217] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:47:23.197 [DEBUG] [Thread-139217] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T02:47:23.197 [INFO] [Thread-139217] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T02:47:23.200 [DEBUG] [Thread-139217] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:47:23.200 [DEBUG] [Thread-139217] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T02:47:23.200 [DEBUG] [Thread-139217] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:47:23.200 [DEBUG] [Thread-139217] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:47:23.200 [DEBUG] [Thread-139217] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:47:23.200 [DEBUG] [Thread-139217] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:47:23.200 [DEBUG] [Thread-139217] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:47:23.200 [DEBUG] [Thread-139217] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:47:23.200 [DEBUG] [Thread-139217] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:47:23.200 [DEBUG] [Thread-139217] [transport.py] [_log()] client lang: <none>
2026-01-01T02:47:23.200 [DEBUG] [Thread-139217] [transport.py] [_log()] server lang: <none>
2026-01-01T02:47:23.200 [DEBUG] [Thread-139217] [transport.py] [_log()] kex follows: False
2026-01-01T02:47:23.200 [DEBUG] [Thread-139217] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:47:23.200 [DEBUG] [Thread-139217] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:47:23.200 [DEBUG] [Thread-139217] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:47:23.200 [DEBUG] [Thread-139217] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:47:23.200 [DEBUG] [Thread-139217] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:47:23.200 [DEBUG] [Thread-139217] [transport.py] [_log()] Compression: none
2026-01-01T02:47:23.200 [DEBUG] [Thread-139217] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:47:23.219 [DEBUG] [Thread-139217] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:47:23.219 [DEBUG] [Thread-139217] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:47:23.220 [DEBUG] [Thread-139217] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T02:47:23.220 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T02:47:23.221 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:47:23.222 [DEBUG] [Thread-139217] [transport.py] [_log()] userauth is OK
2026-01-01T02:47:23.222 [DEBUG] [Thread-139217] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:47:23.222 [DEBUG] [Thread-139217] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:47:23.223 [DEBUG] [Thread-139217] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T02:47:23.223 [DEBUG] [Thread-139217] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:47:23.258 [INFO] [Thread-139217] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:47:23.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:47:23.906 [DEBUG] [Thread-139217] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:47:23.907 [DEBUG] [Thread-139217] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:47:23.907 [DEBUG] [Thread-139217] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T02:47:23.948 [DEBUG] [Thread-139217] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:47:23.948 [DEBUG] [Thread-139217] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:47:23.952 [DEBUG] [Thread-139217] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:47:23.966 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:47:23.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T02:47:23.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T02:47:23.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T02:47:23.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:47:23.978 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T02:47:23.978 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:47:23.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:47:23.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T02:47:23.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.032423 -999.00  +13.20   6.05     82  +10.40 1 1 1 2 1     0    0 2.22 -21.85 ZNESW 5.9 6.0 225.4 8.4 13.9 -20.9 13.8 -20.5 13.6 -19.1 13.9 -20.1
2026-01-01T02:47:23.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T02:47:23.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T02:47:23.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.032423
2026-01-01T02:47:23.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T02:47:23.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T02:47:23.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T02:47:23.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T02:47:23.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T02:47:23.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T02:47:02', tmtdew=3.27, humidity=80.55, cloud=0.0, wind=11.65, temperature=13.11, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T02:47:02', seeing=1.19, atlas_timestamp='2026-01-01T00:46:41.347', atlas_cloud=1, atlas_rain=1, zp_data=[0.04025000000000034, 0.10224999999999973, 0.0652500000000007, 0.053999999999998494, 0.07699999999999996, 0.08025000000000126, 0.11800000000000033, 0.15024999999999977, 0.13149999999999906, 0.20400000000000063, 0.03524999999999956, 0.0754999999999999, 0.09399999999999942, 0.11524999999999963, 0.058999999999999275, 0.1164999999999985, 0.17724999999999902, 0.20149999999999935, 0.13299999999999912, 0.11624999999999908, 0.10849999999999937, 0.1007499999999979, 0.08525000000000027, 0.18374999999999986, 0.15750000000000064, 0.19599999999999973, 0.17575000000000074, 0.14649999999999963, 0.1479999999999997, 0.17849999999999966, 0.24100000000000144, 0.3265000000000011, 0.1947499999999991], zp_timestamp='2026-01-01T00:44:00')
2026-01-01T02:47:23.981 [DEBUG] [Thread-139217] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:47:24.064 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T02:47:24.076 [DEBUG] [Thread-139220] [transport.py] [_log()] starting thread (client mode): 0xb6b29210
2026-01-01T02:47:24.076 [DEBUG] [Thread-139220] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:47:24.091 [DEBUG] [Thread-139220] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T02:47:24.091 [INFO] [Thread-139220] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T02:47:24.099 [DEBUG] [Thread-139220] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:47:24.099 [DEBUG] [Thread-139220] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T02:47:24.099 [DEBUG] [Thread-139220] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:47:24.099 [DEBUG] [Thread-139220] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:47:24.099 [DEBUG] [Thread-139220] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:47:24.099 [DEBUG] [Thread-139220] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:47:24.100 [DEBUG] [Thread-139220] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:47:24.100 [DEBUG] [Thread-139220] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:47:24.100 [DEBUG] [Thread-139220] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:47:24.100 [DEBUG] [Thread-139220] [transport.py] [_log()] client lang: <none>
2026-01-01T02:47:24.100 [DEBUG] [Thread-139220] [transport.py] [_log()] server lang: <none>
2026-01-01T02:47:24.100 [DEBUG] [Thread-139220] [transport.py] [_log()] kex follows: False
2026-01-01T02:47:24.100 [DEBUG] [Thread-139220] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:47:24.100 [DEBUG] [Thread-139220] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:47:24.100 [DEBUG] [Thread-139220] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:47:24.100 [DEBUG] [Thread-139220] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:47:24.100 [DEBUG] [Thread-139220] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:47:24.100 [DEBUG] [Thread-139220] [transport.py] [_log()] Compression: none
2026-01-01T02:47:24.100 [DEBUG] [Thread-139220] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:47:24.158 [DEBUG] [Thread-139220] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:47:24.159 [DEBUG] [Thread-139220] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:47:24.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T02:47:24.160 [DEBUG] [Thread-139220] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T02:47:24.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:47:24.214 [DEBUG] [Thread-139220] [transport.py] [_log()] userauth is OK
2026-01-01T02:47:24.215 [DEBUG] [Thread-139220] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:47:24.215 [DEBUG] [Thread-139220] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:47:24.215 [DEBUG] [Thread-139220] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T02:47:24.215 [DEBUG] [Thread-139220] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:47:24.233 [INFO] [Thread-139220] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:47:24.234 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T02:47:24.234 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:47:25.086 [DEBUG] [Thread-139220] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:47:25.087 [DEBUG] [Thread-139220] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:47:25.135 [DEBUG] [Thread-139220] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:47:25.135 [DEBUG] [Thread-139220] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:47:25.144 [DEBUG] [Thread-139220] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:47:25.152 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:47:25.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T02:47:25.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T02:47:25.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:47:25.170 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:47:25.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:47:25.179 [DEBUG] [Thread-139220] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:47:31.117 [DEBUG] [Thread-139222 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:47:46.165 [DEBUG] [Thread-139223 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:47:55.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T02:47:55.201 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T02:47:55.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T02:47:55.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 2, 47, 34), 3.31, 80.35, 0.0, 11.72, 13.08, 0, 1, 0, 2, 0, 0),)
2026-01-01T02:47:55.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 02:47:34
2026-01-01T02:47:56.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T02:47:56.177 [DEBUG] [Thread-139224] [transport.py] [_log()] starting thread (client mode): 0xb6b2b100
2026-01-01T02:47:56.177 [DEBUG] [Thread-139224] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:47:56.188 [DEBUG] [Thread-139224] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T02:47:56.188 [INFO] [Thread-139224] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T02:47:56.189 [DEBUG] [Thread-139224] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:47:56.189 [DEBUG] [Thread-139224] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T02:47:56.189 [DEBUG] [Thread-139224] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:47:56.189 [DEBUG] [Thread-139224] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:47:56.189 [DEBUG] [Thread-139224] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:47:56.189 [DEBUG] [Thread-139224] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:47:56.189 [DEBUG] [Thread-139224] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:47:56.189 [DEBUG] [Thread-139224] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:47:56.189 [DEBUG] [Thread-139224] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:47:56.189 [DEBUG] [Thread-139224] [transport.py] [_log()] client lang: <none>
2026-01-01T02:47:56.189 [DEBUG] [Thread-139224] [transport.py] [_log()] server lang: <none>
2026-01-01T02:47:56.189 [DEBUG] [Thread-139224] [transport.py] [_log()] kex follows: False
2026-01-01T02:47:56.189 [DEBUG] [Thread-139224] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:47:56.189 [DEBUG] [Thread-139224] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:47:56.189 [DEBUG] [Thread-139224] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:47:56.189 [DEBUG] [Thread-139224] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:47:56.190 [DEBUG] [Thread-139224] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:47:56.190 [DEBUG] [Thread-139224] [transport.py] [_log()] Compression: none
2026-01-01T02:47:56.190 [DEBUG] [Thread-139224] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:47:56.202 [DEBUG] [Thread-139224] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:47:56.203 [DEBUG] [Thread-139224] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:47:56.203 [DEBUG] [Thread-139224] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T02:47:56.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T02:47:56.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:47:56.209 [DEBUG] [Thread-139224] [transport.py] [_log()] userauth is OK
2026-01-01T02:47:56.209 [DEBUG] [Thread-139224] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:47:56.209 [DEBUG] [Thread-139224] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:47:56.209 [DEBUG] [Thread-139224] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T02:47:56.209 [DEBUG] [Thread-139224] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:47:56.224 [INFO] [Thread-139224] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:47:56.225 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:47:56.874 [DEBUG] [Thread-139224] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:47:56.874 [DEBUG] [Thread-139224] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:47:56.874 [DEBUG] [Thread-139224] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T02:47:56.915 [DEBUG] [Thread-139224] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:47:56.915 [DEBUG] [Thread-139224] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:47:56.919 [DEBUG] [Thread-139224] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:47:56.932 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:47:56.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T02:47:56.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T02:47:56.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T02:47:56.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:47:56.946 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T02:47:56.946 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:47:56.947 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:47:56.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T02:47:56.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.032770 -999.00  +13.20   4.87     82  +10.40 1 1 1 2 1     0    0 2.25 -20.94 ZNESW 3.3 4.9 225.4 10.0 13.9 -20.8 13.8 -20.5 13.6 -19.1 13.9 -20.0
2026-01-01T02:47:56.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T02:47:56.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T02:47:56.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.032770
2026-01-01T02:47:56.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T02:47:56.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T02:47:56.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T02:47:56.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T02:47:56.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T02:47:56.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T02:47:34', tmtdew=3.31, humidity=80.35, cloud=0.0, wind=11.72, temperature=13.08, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T02:47:34', seeing=1.19, atlas_timestamp='2026-01-01T00:47:11.328', atlas_cloud=1, atlas_rain=1, zp_data=[0.04025000000000034, 0.10224999999999973, 0.0652500000000007, 0.053999999999998494, 0.07699999999999996, 0.08025000000000126, 0.11800000000000033, 0.15024999999999977, 0.13149999999999906, 0.20400000000000063, 0.03524999999999956, 0.0754999999999999, 0.09399999999999942, 0.11524999999999963, 0.058999999999999275, 0.1164999999999985, 0.17724999999999902, 0.20149999999999935, 0.13299999999999912, 0.11624999999999908, 0.10849999999999937, 0.1007499999999979, 0.08525000000000027, 0.18374999999999986, 0.15750000000000064, 0.19599999999999973, 0.17575000000000074, 0.14649999999999963, 0.1479999999999997, 0.17849999999999966, 0.24100000000000144, 0.3265000000000011, 0.1947499999999991], zp_timestamp='2026-01-01T00:44:00')
2026-01-01T02:47:56.950 [DEBUG] [Thread-139224] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:47:57.033 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T02:47:57.045 [DEBUG] [Thread-139227] [transport.py] [_log()] starting thread (client mode): 0xb6b29c90
2026-01-01T02:47:57.045 [DEBUG] [Thread-139227] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:47:57.061 [DEBUG] [Thread-139227] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T02:47:57.061 [INFO] [Thread-139227] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T02:47:57.068 [DEBUG] [Thread-139227] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:47:57.069 [DEBUG] [Thread-139227] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T02:47:57.069 [DEBUG] [Thread-139227] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:47:57.069 [DEBUG] [Thread-139227] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:47:57.069 [DEBUG] [Thread-139227] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:47:57.069 [DEBUG] [Thread-139227] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:47:57.069 [DEBUG] [Thread-139227] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:47:57.069 [DEBUG] [Thread-139227] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:47:57.069 [DEBUG] [Thread-139227] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:47:57.069 [DEBUG] [Thread-139227] [transport.py] [_log()] client lang: <none>
2026-01-01T02:47:57.069 [DEBUG] [Thread-139227] [transport.py] [_log()] server lang: <none>
2026-01-01T02:47:57.069 [DEBUG] [Thread-139227] [transport.py] [_log()] kex follows: False
2026-01-01T02:47:57.069 [DEBUG] [Thread-139227] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:47:57.069 [DEBUG] [Thread-139227] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:47:57.069 [DEBUG] [Thread-139227] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:47:57.069 [DEBUG] [Thread-139227] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:47:57.070 [DEBUG] [Thread-139227] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:47:57.070 [DEBUG] [Thread-139227] [transport.py] [_log()] Compression: none
2026-01-01T02:47:57.070 [DEBUG] [Thread-139227] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:47:57.130 [DEBUG] [Thread-139227] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:47:57.131 [DEBUG] [Thread-139227] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:47:57.132 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T02:47:57.132 [DEBUG] [Thread-139227] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T02:47:57.133 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:47:57.186 [DEBUG] [Thread-139227] [transport.py] [_log()] userauth is OK
2026-01-01T02:47:57.186 [DEBUG] [Thread-139227] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:47:57.187 [DEBUG] [Thread-139227] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:47:57.187 [DEBUG] [Thread-139227] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T02:47:57.187 [DEBUG] [Thread-139227] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:47:57.205 [INFO] [Thread-139227] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:47:57.206 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T02:47:57.207 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:47:58.032 [DEBUG] [Thread-139227] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:47:58.032 [DEBUG] [Thread-139227] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:47:58.080 [DEBUG] [Thread-139227] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:47:58.080 [DEBUG] [Thread-139227] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:47:58.089 [DEBUG] [Thread-139227] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:47:58.098 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:47:58.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T02:47:58.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T02:47:58.116 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:47:58.116 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:47:58.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:47:58.125 [DEBUG] [Thread-139227] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:48:01.199 [DEBUG] [Thread-139229 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:48:06.273 [DEBUG] [Thread-139230 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:48:06.741 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:48:06.742 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:48:16.249 [DEBUG] [Thread-139231 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:48:28.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T02:48:28.148 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T02:48:28.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T02:48:28.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 2, 48, 6), 3.35, 80.11, 0.0, 10.01, 13.1, 0, 1, 0, 2, 0, 0),)
2026-01-01T02:48:28.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 02:48:06
2026-01-01T02:48:28.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T02:48:29.130 [DEBUG] [Thread-139232] [transport.py] [_log()] starting thread (client mode): 0xb6b02710
2026-01-01T02:48:29.131 [DEBUG] [Thread-139232] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:48:29.151 [DEBUG] [Thread-139232] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T02:48:29.152 [INFO] [Thread-139232] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T02:48:29.155 [DEBUG] [Thread-139232] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:48:29.155 [DEBUG] [Thread-139232] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T02:48:29.155 [DEBUG] [Thread-139232] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:48:29.155 [DEBUG] [Thread-139232] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:48:29.155 [DEBUG] [Thread-139232] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:48:29.155 [DEBUG] [Thread-139232] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:48:29.155 [DEBUG] [Thread-139232] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:48:29.155 [DEBUG] [Thread-139232] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:48:29.155 [DEBUG] [Thread-139232] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:48:29.155 [DEBUG] [Thread-139232] [transport.py] [_log()] client lang: <none>
2026-01-01T02:48:29.155 [DEBUG] [Thread-139232] [transport.py] [_log()] server lang: <none>
2026-01-01T02:48:29.155 [DEBUG] [Thread-139232] [transport.py] [_log()] kex follows: False
2026-01-01T02:48:29.155 [DEBUG] [Thread-139232] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:48:29.155 [DEBUG] [Thread-139232] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:48:29.155 [DEBUG] [Thread-139232] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:48:29.155 [DEBUG] [Thread-139232] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:48:29.155 [DEBUG] [Thread-139232] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:48:29.156 [DEBUG] [Thread-139232] [transport.py] [_log()] Compression: none
2026-01-01T02:48:29.156 [DEBUG] [Thread-139232] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:48:29.173 [DEBUG] [Thread-139232] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:48:29.173 [DEBUG] [Thread-139232] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:48:29.174 [DEBUG] [Thread-139232] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T02:48:29.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T02:48:29.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:48:29.175 [DEBUG] [Thread-139232] [transport.py] [_log()] userauth is OK
2026-01-01T02:48:29.176 [DEBUG] [Thread-139232] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:48:29.176 [DEBUG] [Thread-139232] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:48:29.176 [DEBUG] [Thread-139232] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T02:48:29.176 [DEBUG] [Thread-139232] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:48:29.197 [INFO] [Thread-139232] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:48:29.198 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:48:29.836 [DEBUG] [Thread-139232] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:48:29.836 [DEBUG] [Thread-139232] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:48:29.836 [DEBUG] [Thread-139232] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T02:48:29.877 [DEBUG] [Thread-139232] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:48:29.877 [DEBUG] [Thread-139232] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:48:29.880 [DEBUG] [Thread-139232] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:48:29.892 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:48:29.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T02:48:29.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T02:48:29.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T02:48:29.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:48:29.905 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T02:48:29.905 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:48:29.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:48:29.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T02:48:29.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.033117 -999.00  +13.30   7.21     82  +10.40 1 1 1 2 1     0    0 2.24 -22.25 ZNESW 4.2 7.2 204.3 8.5 13.9 -20.8 13.8 -20.5 13.6 -19.0 13.9 -20.1
2026-01-01T02:48:29.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T02:48:29.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T02:48:29.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.033117
2026-01-01T02:48:29.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T02:48:29.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T02:48:29.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T02:48:29.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T02:48:29.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T02:48:29.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T02:48:06', tmtdew=3.35, humidity=80.11, cloud=0.0, wind=10.01, temperature=13.1, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T02:48:06', seeing=1.19, atlas_timestamp='2026-01-01T00:47:41.309', atlas_cloud=1, atlas_rain=1, zp_data=[0.04025000000000034, 0.10224999999999973, 0.0652500000000007, 0.053999999999998494, 0.07699999999999996, 0.08025000000000126, 0.11800000000000033, 0.15024999999999977, 0.13149999999999906, 0.20400000000000063, 0.03524999999999956, 0.0754999999999999, 0.09399999999999942, 0.11524999999999963, 0.058999999999999275, 0.1164999999999985, 0.17724999999999902, 0.20149999999999935, 0.13299999999999912, 0.11624999999999908, 0.10849999999999937, 0.1007499999999979, 0.08525000000000027, 0.18374999999999986, 0.15750000000000064, 0.19599999999999973, 0.17575000000000074, 0.14649999999999963, 0.1479999999999997, 0.17849999999999966, 0.24100000000000144, 0.3265000000000011, 0.1947499999999991], zp_timestamp='2026-01-01T00:44:00')
2026-01-01T02:48:29.908 [DEBUG] [Thread-139232] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:48:29.997 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T02:48:30.008 [DEBUG] [Thread-139235] [transport.py] [_log()] starting thread (client mode): 0xb6b02cb0
2026-01-01T02:48:30.009 [DEBUG] [Thread-139235] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:48:30.024 [DEBUG] [Thread-139235] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T02:48:30.024 [INFO] [Thread-139235] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T02:48:30.032 [DEBUG] [Thread-139235] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:48:30.032 [DEBUG] [Thread-139235] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T02:48:30.032 [DEBUG] [Thread-139235] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:48:30.032 [DEBUG] [Thread-139235] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:48:30.032 [DEBUG] [Thread-139235] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:48:30.032 [DEBUG] [Thread-139235] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:48:30.032 [DEBUG] [Thread-139235] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:48:30.033 [DEBUG] [Thread-139235] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:48:30.033 [DEBUG] [Thread-139235] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:48:30.033 [DEBUG] [Thread-139235] [transport.py] [_log()] client lang: <none>
2026-01-01T02:48:30.033 [DEBUG] [Thread-139235] [transport.py] [_log()] server lang: <none>
2026-01-01T02:48:30.033 [DEBUG] [Thread-139235] [transport.py] [_log()] kex follows: False
2026-01-01T02:48:30.033 [DEBUG] [Thread-139235] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:48:30.033 [DEBUG] [Thread-139235] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:48:30.033 [DEBUG] [Thread-139235] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:48:30.033 [DEBUG] [Thread-139235] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:48:30.033 [DEBUG] [Thread-139235] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:48:30.033 [DEBUG] [Thread-139235] [transport.py] [_log()] Compression: none
2026-01-01T02:48:30.033 [DEBUG] [Thread-139235] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:48:30.090 [DEBUG] [Thread-139235] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:48:30.090 [DEBUG] [Thread-139235] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:48:30.091 [DEBUG] [Thread-139235] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T02:48:30.091 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T02:48:30.092 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:48:30.146 [DEBUG] [Thread-139235] [transport.py] [_log()] userauth is OK
2026-01-01T02:48:30.146 [DEBUG] [Thread-139235] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:48:30.146 [DEBUG] [Thread-139235] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:48:30.147 [DEBUG] [Thread-139235] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T02:48:30.147 [DEBUG] [Thread-139235] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:48:30.166 [INFO] [Thread-139235] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:48:30.167 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T02:48:30.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:48:31.004 [DEBUG] [Thread-139235] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:48:31.004 [DEBUG] [Thread-139235] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:48:31.052 [DEBUG] [Thread-139235] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:48:31.052 [DEBUG] [Thread-139235] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:48:31.061 [DEBUG] [Thread-139235] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:48:31.071 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:48:31.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T02:48:31.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T02:48:31.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:48:31.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:48:31.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:48:31.098 [DEBUG] [Thread-139235] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:48:31.281 [DEBUG] [Thread-139237 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:48:46.331 [DEBUG] [Thread-139238 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:49:01.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T02:49:01.103 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T02:49:01.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T02:49:01.363 [DEBUG] [Thread-139239 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:49:01.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 2, 48, 38), 3.37, 80.04, 0.0, 10.09, 13.18, 0, 1, 0, 2, 0, 0),)
2026-01-01T02:49:01.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 02:48:38
2026-01-01T02:49:01.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T02:49:02.140 [DEBUG] [Thread-139240] [transport.py] [_log()] starting thread (client mode): 0xb6b03760
2026-01-01T02:49:02.140 [DEBUG] [Thread-139240] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:49:02.159 [DEBUG] [Thread-139240] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T02:49:02.159 [INFO] [Thread-139240] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T02:49:02.162 [DEBUG] [Thread-139240] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:49:02.162 [DEBUG] [Thread-139240] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T02:49:02.162 [DEBUG] [Thread-139240] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:49:02.162 [DEBUG] [Thread-139240] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:49:02.162 [DEBUG] [Thread-139240] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:49:02.162 [DEBUG] [Thread-139240] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:49:02.162 [DEBUG] [Thread-139240] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:49:02.162 [DEBUG] [Thread-139240] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:49:02.162 [DEBUG] [Thread-139240] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:49:02.162 [DEBUG] [Thread-139240] [transport.py] [_log()] client lang: <none>
2026-01-01T02:49:02.162 [DEBUG] [Thread-139240] [transport.py] [_log()] server lang: <none>
2026-01-01T02:49:02.162 [DEBUG] [Thread-139240] [transport.py] [_log()] kex follows: False
2026-01-01T02:49:02.162 [DEBUG] [Thread-139240] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:49:02.162 [DEBUG] [Thread-139240] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:49:02.162 [DEBUG] [Thread-139240] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:49:02.163 [DEBUG] [Thread-139240] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:49:02.163 [DEBUG] [Thread-139240] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:49:02.163 [DEBUG] [Thread-139240] [transport.py] [_log()] Compression: none
2026-01-01T02:49:02.163 [DEBUG] [Thread-139240] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:49:02.178 [DEBUG] [Thread-139240] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:49:02.184 [DEBUG] [Thread-139240] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:49:02.184 [DEBUG] [Thread-139240] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T02:49:02.184 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T02:49:02.184 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:49:02.185 [DEBUG] [Thread-139240] [transport.py] [_log()] userauth is OK
2026-01-01T02:49:02.185 [DEBUG] [Thread-139240] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:49:02.185 [DEBUG] [Thread-139240] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:49:02.185 [DEBUG] [Thread-139240] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T02:49:02.185 [DEBUG] [Thread-139240] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:49:02.194 [INFO] [Thread-139240] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:49:02.195 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:49:03.007 [DEBUG] [Thread-139240] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:49:03.007 [DEBUG] [Thread-139240] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:49:03.008 [DEBUG] [Thread-139240] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T02:49:03.048 [DEBUG] [Thread-139240] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:49:03.048 [DEBUG] [Thread-139240] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:49:03.050 [DEBUG] [Thread-139240] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:49:03.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:49:03.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T02:49:03.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T02:49:03.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T02:49:03.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:49:03.069 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T02:49:03.069 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:49:03.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:49:03.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T02:49:03.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.033812 -999.00  +13.20   4.67     82  +10.40 1 1 1 2 1     0    0 2.30 -19.72 ZNESW 5.8 4.7 245.1 10.0 13.9 -20.8 13.8 -20.5 13.6 -19.0 13.9 -20.1
2026-01-01T02:49:03.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T02:49:03.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T02:49:03.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.033812
2026-01-01T02:49:03.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T02:49:03.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T02:49:03.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T02:49:03.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T02:49:03.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T02:49:03.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T02:48:38', tmtdew=3.37, humidity=80.04, cloud=0.0, wind=10.09, temperature=13.18, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T02:48:38', seeing=1.21, atlas_timestamp='2026-01-01T00:48:41.357', atlas_cloud=1, atlas_rain=1, zp_data=[0.04025000000000034, 0.10224999999999973, 0.0652500000000007, 0.053999999999998494, 0.07699999999999996, 0.08025000000000126, 0.11800000000000033, 0.15024999999999977, 0.13149999999999906, 0.20400000000000063, 0.03524999999999956, 0.0754999999999999, 0.09399999999999942, 0.11524999999999963, 0.058999999999999275, 0.1164999999999985, 0.17724999999999902, 0.20149999999999935, 0.13299999999999912, 0.11624999999999908, 0.10849999999999937, 0.1007499999999979, 0.08525000000000027, 0.18374999999999986, 0.15750000000000064, 0.19599999999999973, 0.17575000000000074, 0.14649999999999963, 0.1479999999999997, 0.17849999999999966, 0.24100000000000144, 0.3265000000000011, 0.1947499999999991], zp_timestamp='2026-01-01T00:47:00')
2026-01-01T02:49:03.070 [DEBUG] [Thread-139240] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:49:03.144 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T02:49:03.157 [DEBUG] [Thread-139243] [transport.py] [_log()] starting thread (client mode): 0xb955bc10
2026-01-01T02:49:03.157 [DEBUG] [Thread-139243] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:49:03.172 [DEBUG] [Thread-139243] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T02:49:03.172 [INFO] [Thread-139243] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T02:49:03.181 [DEBUG] [Thread-139243] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:49:03.181 [DEBUG] [Thread-139243] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T02:49:03.181 [DEBUG] [Thread-139243] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:49:03.181 [DEBUG] [Thread-139243] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:49:03.181 [DEBUG] [Thread-139243] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:49:03.181 [DEBUG] [Thread-139243] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:49:03.182 [DEBUG] [Thread-139243] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:49:03.182 [DEBUG] [Thread-139243] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:49:03.182 [DEBUG] [Thread-139243] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:49:03.182 [DEBUG] [Thread-139243] [transport.py] [_log()] client lang: <none>
2026-01-01T02:49:03.182 [DEBUG] [Thread-139243] [transport.py] [_log()] server lang: <none>
2026-01-01T02:49:03.182 [DEBUG] [Thread-139243] [transport.py] [_log()] kex follows: False
2026-01-01T02:49:03.182 [DEBUG] [Thread-139243] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:49:03.182 [DEBUG] [Thread-139243] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:49:03.182 [DEBUG] [Thread-139243] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:49:03.182 [DEBUG] [Thread-139243] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:49:03.182 [DEBUG] [Thread-139243] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:49:03.182 [DEBUG] [Thread-139243] [transport.py] [_log()] Compression: none
2026-01-01T02:49:03.182 [DEBUG] [Thread-139243] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:49:03.240 [DEBUG] [Thread-139243] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:49:03.240 [DEBUG] [Thread-139243] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:49:03.241 [DEBUG] [Thread-139243] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T02:49:03.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T02:49:03.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:49:03.298 [DEBUG] [Thread-139243] [transport.py] [_log()] userauth is OK
2026-01-01T02:49:03.298 [DEBUG] [Thread-139243] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:49:03.298 [DEBUG] [Thread-139243] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:49:03.298 [DEBUG] [Thread-139243] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T02:49:03.298 [DEBUG] [Thread-139243] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:49:03.316 [INFO] [Thread-139243] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:49:03.316 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T02:49:03.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:49:04.181 [DEBUG] [Thread-139243] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:49:04.182 [DEBUG] [Thread-139243] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:49:04.230 [DEBUG] [Thread-139243] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:49:04.230 [DEBUG] [Thread-139243] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:49:04.239 [DEBUG] [Thread-139243] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:49:04.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:49:04.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T02:49:04.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T02:49:04.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:49:04.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:49:04.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:49:04.270 [DEBUG] [Thread-139243] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:49:06.351 [DEBUG] [Thread-139245 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:49:06.939 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:49:06.940 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:49:16.395 [DEBUG] [Thread-139246 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:49:31.459 [DEBUG] [Thread-139247 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:49:34.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T02:49:34.293 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T02:49:34.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T02:49:35.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 2, 49, 10), 3.38, 79.99, 0.0, 9.92, 13.16, 0, 0, 0, 2, 0, 0),)
2026-01-01T02:49:35.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 02:49:10
2026-01-01T02:49:35.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T02:49:35.295 [DEBUG] [Thread-139248] [transport.py] [_log()] starting thread (client mode): 0xb6b01cf0
2026-01-01T02:49:35.295 [DEBUG] [Thread-139248] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:49:35.315 [DEBUG] [Thread-139248] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T02:49:35.315 [INFO] [Thread-139248] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T02:49:35.319 [DEBUG] [Thread-139248] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:49:35.319 [DEBUG] [Thread-139248] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T02:49:35.319 [DEBUG] [Thread-139248] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:49:35.319 [DEBUG] [Thread-139248] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:49:35.319 [DEBUG] [Thread-139248] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:49:35.319 [DEBUG] [Thread-139248] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:49:35.319 [DEBUG] [Thread-139248] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:49:35.319 [DEBUG] [Thread-139248] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:49:35.319 [DEBUG] [Thread-139248] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:49:35.319 [DEBUG] [Thread-139248] [transport.py] [_log()] client lang: <none>
2026-01-01T02:49:35.319 [DEBUG] [Thread-139248] [transport.py] [_log()] server lang: <none>
2026-01-01T02:49:35.319 [DEBUG] [Thread-139248] [transport.py] [_log()] kex follows: False
2026-01-01T02:49:35.319 [DEBUG] [Thread-139248] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:49:35.319 [DEBUG] [Thread-139248] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:49:35.319 [DEBUG] [Thread-139248] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:49:35.319 [DEBUG] [Thread-139248] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:49:35.319 [DEBUG] [Thread-139248] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:49:35.319 [DEBUG] [Thread-139248] [transport.py] [_log()] Compression: none
2026-01-01T02:49:35.319 [DEBUG] [Thread-139248] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:49:35.337 [DEBUG] [Thread-139248] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:49:35.338 [DEBUG] [Thread-139248] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:49:35.338 [DEBUG] [Thread-139248] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T02:49:35.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T02:49:35.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:49:35.385 [DEBUG] [Thread-139248] [transport.py] [_log()] userauth is OK
2026-01-01T02:49:35.385 [DEBUG] [Thread-139248] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:49:35.385 [DEBUG] [Thread-139248] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:49:35.385 [DEBUG] [Thread-139248] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T02:49:35.385 [DEBUG] [Thread-139248] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:49:35.423 [INFO] [Thread-139248] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:49:35.423 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:49:36.084 [DEBUG] [Thread-139248] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:49:36.084 [DEBUG] [Thread-139248] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:49:36.085 [DEBUG] [Thread-139248] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T02:49:36.126 [DEBUG] [Thread-139248] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:49:36.126 [DEBUG] [Thread-139248] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:49:36.129 [DEBUG] [Thread-139248] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:49:36.140 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:49:36.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T02:49:36.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T02:49:36.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T02:49:36.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:49:36.151 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T02:49:36.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:49:36.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:49:36.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T02:49:36.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.034159 -999.00  +13.20   3.69     82  +10.40 1 1 1 2 1     0    0 2.23 -20.25 ZNESW 4.7 3.7 190.5 7.7 13.9 -20.9 13.8 -20.6 13.6 -18.9 13.8 -20.1
2026-01-01T02:49:36.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T02:49:36.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T02:49:36.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.034159
2026-01-01T02:49:36.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T02:49:36.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T02:49:36.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T02:49:36.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T02:49:36.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T02:49:36.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T02:49:10', tmtdew=3.38, humidity=79.99, cloud=0.0, wind=9.92, temperature=13.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T02:49:10', seeing=1.06, atlas_timestamp='2026-01-01T00:49:11.338', atlas_cloud=1, atlas_rain=1, zp_data=[0.04025000000000034, 0.10224999999999973, 0.0652500000000007, 0.053999999999998494, 0.07699999999999996, 0.08025000000000126, 0.11800000000000033, 0.15024999999999977, 0.13149999999999906, 0.20400000000000063, 0.03524999999999956, 0.0754999999999999, 0.09399999999999942, 0.11524999999999963, 0.058999999999999275, 0.1164999999999985, 0.17724999999999902, 0.20149999999999935, 0.13299999999999912, 0.11624999999999908, 0.10849999999999937, 0.1007499999999979, 0.08525000000000027, 0.18374999999999986, 0.15750000000000064, 0.19599999999999973, 0.17575000000000074, 0.14649999999999963, 0.1479999999999997, 0.17849999999999966, 0.24100000000000144, 0.3265000000000011, 0.1947499999999991], zp_timestamp='2026-01-01T00:47:00')
2026-01-01T02:49:36.153 [DEBUG] [Thread-139248] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:49:36.237 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T02:49:36.249 [DEBUG] [Thread-139251] [transport.py] [_log()] starting thread (client mode): 0xb6b02cb0
2026-01-01T02:49:36.249 [DEBUG] [Thread-139251] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:49:36.265 [DEBUG] [Thread-139251] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T02:49:36.265 [INFO] [Thread-139251] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T02:49:36.273 [DEBUG] [Thread-139251] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:49:36.273 [DEBUG] [Thread-139251] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T02:49:36.273 [DEBUG] [Thread-139251] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:49:36.273 [DEBUG] [Thread-139251] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:49:36.273 [DEBUG] [Thread-139251] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:49:36.273 [DEBUG] [Thread-139251] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:49:36.274 [DEBUG] [Thread-139251] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:49:36.274 [DEBUG] [Thread-139251] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:49:36.274 [DEBUG] [Thread-139251] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:49:36.274 [DEBUG] [Thread-139251] [transport.py] [_log()] client lang: <none>
2026-01-01T02:49:36.274 [DEBUG] [Thread-139251] [transport.py] [_log()] server lang: <none>
2026-01-01T02:49:36.274 [DEBUG] [Thread-139251] [transport.py] [_log()] kex follows: False
2026-01-01T02:49:36.274 [DEBUG] [Thread-139251] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:49:36.274 [DEBUG] [Thread-139251] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:49:36.275 [DEBUG] [Thread-139251] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:49:36.275 [DEBUG] [Thread-139251] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:49:36.275 [DEBUG] [Thread-139251] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:49:36.275 [DEBUG] [Thread-139251] [transport.py] [_log()] Compression: none
2026-01-01T02:49:36.275 [DEBUG] [Thread-139251] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:49:36.331 [DEBUG] [Thread-139251] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:49:36.331 [DEBUG] [Thread-139251] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:49:36.332 [DEBUG] [Thread-139251] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T02:49:36.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T02:49:36.333 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:49:36.385 [DEBUG] [Thread-139251] [transport.py] [_log()] userauth is OK
2026-01-01T02:49:36.386 [DEBUG] [Thread-139251] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:49:36.386 [DEBUG] [Thread-139251] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:49:36.386 [DEBUG] [Thread-139251] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T02:49:36.386 [DEBUG] [Thread-139251] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:49:36.401 [INFO] [Thread-139251] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:49:36.401 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T02:49:36.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:49:37.219 [DEBUG] [Thread-139251] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:49:37.220 [DEBUG] [Thread-139251] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:49:37.267 [DEBUG] [Thread-139251] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:49:37.268 [DEBUG] [Thread-139251] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:49:37.276 [DEBUG] [Thread-139251] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:49:37.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:49:37.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T02:49:37.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T02:49:37.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:49:37.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:49:37.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:49:37.310 [DEBUG] [Thread-139251] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:49:46.491 [DEBUG] [Thread-139253 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:50:01.552 [DEBUG] [Thread-139254 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:50:06.426 [DEBUG] [Thread-139255 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:50:07.140 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:50:07.141 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:50:07.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T02:50:07.333 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T02:50:07.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T02:50:08.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 2, 49, 42), 3.38, 79.97, 0.0, 10.13, 13.05, 0, 0, 0, 2, 0, 0),)
2026-01-01T02:50:08.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 02:49:42
2026-01-01T02:50:08.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T02:50:08.313 [DEBUG] [Thread-139256] [transport.py] [_log()] starting thread (client mode): 0xb17969b0
2026-01-01T02:50:08.313 [DEBUG] [Thread-139256] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:50:08.332 [DEBUG] [Thread-139256] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T02:50:08.332 [INFO] [Thread-139256] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T02:50:08.335 [DEBUG] [Thread-139256] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:50:08.336 [DEBUG] [Thread-139256] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T02:50:08.336 [DEBUG] [Thread-139256] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:50:08.336 [DEBUG] [Thread-139256] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:50:08.336 [DEBUG] [Thread-139256] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:50:08.336 [DEBUG] [Thread-139256] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:50:08.336 [DEBUG] [Thread-139256] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:50:08.336 [DEBUG] [Thread-139256] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:50:08.336 [DEBUG] [Thread-139256] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:50:08.336 [DEBUG] [Thread-139256] [transport.py] [_log()] client lang: <none>
2026-01-01T02:50:08.336 [DEBUG] [Thread-139256] [transport.py] [_log()] server lang: <none>
2026-01-01T02:50:08.336 [DEBUG] [Thread-139256] [transport.py] [_log()] kex follows: False
2026-01-01T02:50:08.336 [DEBUG] [Thread-139256] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:50:08.336 [DEBUG] [Thread-139256] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:50:08.337 [DEBUG] [Thread-139256] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:50:08.337 [DEBUG] [Thread-139256] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:50:08.337 [DEBUG] [Thread-139256] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:50:08.337 [DEBUG] [Thread-139256] [transport.py] [_log()] Compression: none
2026-01-01T02:50:08.337 [DEBUG] [Thread-139256] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:50:08.354 [DEBUG] [Thread-139256] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:50:08.355 [DEBUG] [Thread-139256] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:50:08.356 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T02:50:08.356 [DEBUG] [Thread-139256] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T02:50:08.357 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:50:08.359 [DEBUG] [Thread-139256] [transport.py] [_log()] userauth is OK
2026-01-01T02:50:08.359 [DEBUG] [Thread-139256] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:50:08.359 [DEBUG] [Thread-139256] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:50:08.359 [DEBUG] [Thread-139256] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T02:50:08.359 [DEBUG] [Thread-139256] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:50:08.382 [INFO] [Thread-139256] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:50:08.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:50:16.587 [DEBUG] [Thread-139258 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:50:18.935 [DEBUG] [Thread-139256] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:50:18.935 [DEBUG] [Thread-139256] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:50:18.935 [DEBUG] [Thread-139256] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T02:50:18.975 [DEBUG] [Thread-139256] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:50:18.975 [DEBUG] [Thread-139256] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:50:18.978 [DEBUG] [Thread-139256] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:50:18.990 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:50:18.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T02:50:18.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T02:50:18.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T02:50:19.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:50:19.053 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T02:50:19.053 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:50:19.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:50:19.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T02:50:19.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.034506 -999.00  +13.20   8.72     82  +10.30 1 1 1 2 1     0    0 2.24 -21.50 ZNESW 9.2 8.7 201.6 10.0 13.9 -20.9 13.8 -20.6 13.6 -19.0 13.9 -20.1
2026-01-01T02:50:19.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T02:50:19.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T02:50:19.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.034506
2026-01-01T02:50:19.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T02:50:19.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T02:50:19.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T02:50:19.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T02:50:19.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T02:50:19.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T02:49:42', tmtdew=3.38, humidity=79.97, cloud=0.0, wind=10.13, temperature=13.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T02:49:42', seeing=1.15, atlas_timestamp='2026-01-01T00:49:41.318', atlas_cloud=1, atlas_rain=1, zp_data=[0.04025000000000034, 0.10224999999999973, 0.0652500000000007, 0.053999999999998494, 0.07699999999999996, 0.08025000000000126, 0.11800000000000033, 0.15024999999999977, 0.13149999999999906, 0.20400000000000063, 0.03524999999999956, 0.0754999999999999, 0.09399999999999942, 0.11524999999999963, 0.058999999999999275, 0.1164999999999985, 0.17724999999999902, 0.20149999999999935, 0.13299999999999912, 0.11624999999999908, 0.10849999999999937, 0.1007499999999979, 0.08525000000000027, 0.18374999999999986, 0.15750000000000064, 0.19599999999999973, 0.17575000000000074, 0.14649999999999963, 0.1479999999999997, 0.17849999999999966, 0.24100000000000144, 0.3265000000000011, 0.1947499999999991], zp_timestamp='2026-01-01T00:47:00')
2026-01-01T02:50:19.055 [DEBUG] [Thread-139256] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:50:19.131 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T02:50:19.142 [DEBUG] [Thread-139260] [transport.py] [_log()] starting thread (client mode): 0xb1745ff0
2026-01-01T02:50:19.142 [DEBUG] [Thread-139260] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:50:19.159 [DEBUG] [Thread-139260] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T02:50:19.159 [INFO] [Thread-139260] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T02:50:19.166 [DEBUG] [Thread-139260] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:50:19.167 [DEBUG] [Thread-139260] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T02:50:19.167 [DEBUG] [Thread-139260] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:50:19.167 [DEBUG] [Thread-139260] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:50:19.167 [DEBUG] [Thread-139260] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:50:19.167 [DEBUG] [Thread-139260] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:50:19.167 [DEBUG] [Thread-139260] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:50:19.167 [DEBUG] [Thread-139260] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:50:19.167 [DEBUG] [Thread-139260] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:50:19.167 [DEBUG] [Thread-139260] [transport.py] [_log()] client lang: <none>
2026-01-01T02:50:19.167 [DEBUG] [Thread-139260] [transport.py] [_log()] server lang: <none>
2026-01-01T02:50:19.167 [DEBUG] [Thread-139260] [transport.py] [_log()] kex follows: False
2026-01-01T02:50:19.167 [DEBUG] [Thread-139260] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:50:19.167 [DEBUG] [Thread-139260] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:50:19.167 [DEBUG] [Thread-139260] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:50:19.167 [DEBUG] [Thread-139260] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:50:19.167 [DEBUG] [Thread-139260] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:50:19.167 [DEBUG] [Thread-139260] [transport.py] [_log()] Compression: none
2026-01-01T02:50:19.167 [DEBUG] [Thread-139260] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:50:19.225 [DEBUG] [Thread-139260] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:50:19.225 [DEBUG] [Thread-139260] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:50:19.225 [DEBUG] [Thread-139260] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T02:50:19.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T02:50:19.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:50:19.281 [DEBUG] [Thread-139260] [transport.py] [_log()] userauth is OK
2026-01-01T02:50:19.282 [DEBUG] [Thread-139260] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:50:19.282 [DEBUG] [Thread-139260] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:50:19.282 [DEBUG] [Thread-139260] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T02:50:19.282 [DEBUG] [Thread-139260] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:50:19.300 [INFO] [Thread-139260] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:50:19.300 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T02:50:19.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:50:20.123 [DEBUG] [Thread-139260] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:50:20.123 [DEBUG] [Thread-139260] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:50:20.170 [DEBUG] [Thread-139260] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:50:20.171 [DEBUG] [Thread-139260] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:50:20.179 [DEBUG] [Thread-139260] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:50:20.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:50:20.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T02:50:20.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T02:50:20.203 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:50:20.203 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:50:20.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:50:20.211 [DEBUG] [Thread-139260] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:50:31.616 [DEBUG] [Thread-139262 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:50:46.665 [DEBUG] [Thread-139263 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:50:50.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T02:50:50.231 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T02:50:50.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T02:50:50.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 2, 50, 46), 3.4, 80.11, 0.0, 10.34, 13.13, 0, 1, 0, 2, 0, 0),)
2026-01-01T02:50:50.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 02:50:46
2026-01-01T02:50:51.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T02:50:51.231 [DEBUG] [Thread-139264] [transport.py] [_log()] starting thread (client mode): 0xb6b2bd30
2026-01-01T02:50:51.231 [DEBUG] [Thread-139264] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:50:51.254 [DEBUG] [Thread-139264] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T02:50:51.254 [INFO] [Thread-139264] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T02:50:51.257 [DEBUG] [Thread-139264] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:50:51.257 [DEBUG] [Thread-139264] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T02:50:51.257 [DEBUG] [Thread-139264] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:50:51.258 [DEBUG] [Thread-139264] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:50:51.258 [DEBUG] [Thread-139264] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:50:51.258 [DEBUG] [Thread-139264] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:50:51.258 [DEBUG] [Thread-139264] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:50:51.258 [DEBUG] [Thread-139264] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:50:51.258 [DEBUG] [Thread-139264] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:50:51.258 [DEBUG] [Thread-139264] [transport.py] [_log()] client lang: <none>
2026-01-01T02:50:51.258 [DEBUG] [Thread-139264] [transport.py] [_log()] server lang: <none>
2026-01-01T02:50:51.258 [DEBUG] [Thread-139264] [transport.py] [_log()] kex follows: False
2026-01-01T02:50:51.258 [DEBUG] [Thread-139264] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:50:51.258 [DEBUG] [Thread-139264] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:50:51.258 [DEBUG] [Thread-139264] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:50:51.258 [DEBUG] [Thread-139264] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:50:51.258 [DEBUG] [Thread-139264] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:50:51.258 [DEBUG] [Thread-139264] [transport.py] [_log()] Compression: none
2026-01-01T02:50:51.258 [DEBUG] [Thread-139264] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:50:51.275 [DEBUG] [Thread-139264] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:50:51.275 [DEBUG] [Thread-139264] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:50:51.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T02:50:51.276 [DEBUG] [Thread-139264] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T02:50:51.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:50:51.278 [DEBUG] [Thread-139264] [transport.py] [_log()] userauth is OK
2026-01-01T02:50:51.278 [DEBUG] [Thread-139264] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:50:51.279 [DEBUG] [Thread-139264] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:50:51.279 [DEBUG] [Thread-139264] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T02:50:51.279 [DEBUG] [Thread-139264] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:50:51.303 [INFO] [Thread-139264] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:50:51.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:50:51.943 [DEBUG] [Thread-139264] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:50:51.943 [DEBUG] [Thread-139264] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:50:51.943 [DEBUG] [Thread-139264] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T02:50:51.984 [DEBUG] [Thread-139264] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:50:51.984 [DEBUG] [Thread-139264] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:50:51.987 [DEBUG] [Thread-139264] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:50:51.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:50:51.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T02:50:52.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T02:50:52.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T02:50:52.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:50:52.011 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T02:50:52.011 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:50:52.011 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:50:52.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T02:50:52.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.034853 -999.00  +13.20   5.88     82  +10.30 1 1 1 2 1     0    0 2.25 -19.35 ZNESW 2.9 5.9 213.9 8.6 13.9 -20.8 13.8 -20.6 13.6 -19.1 13.9 -20.2
2026-01-01T02:50:52.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T02:50:52.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T02:50:52.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.034853
2026-01-01T02:50:52.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T02:50:52.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T02:50:52.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T02:50:52.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T02:50:52.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T02:50:52.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T02:50:46', tmtdew=3.4, humidity=80.11, cloud=0.0, wind=10.34, temperature=13.13, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T02:50:46', seeing=1.13, atlas_timestamp='2026-01-01T00:50:11.299', atlas_cloud=1, atlas_rain=1, zp_data=[0.04025000000000034, 0.10224999999999973, 0.0652500000000007, 0.053999999999998494, 0.07699999999999996, 0.08025000000000126, 0.11800000000000033, 0.15024999999999977, 0.13149999999999906, 0.20400000000000063, 0.03524999999999956, 0.0754999999999999, 0.09399999999999942, 0.11524999999999963, 0.058999999999999275, 0.1164999999999985, 0.17724999999999902, 0.20149999999999935, 0.13299999999999912, 0.11624999999999908, 0.10849999999999937, 0.1007499999999979, 0.08525000000000027, 0.18374999999999986, 0.15750000000000064, 0.19599999999999973, 0.17575000000000074, 0.14649999999999963, 0.1479999999999997, 0.17849999999999966, 0.24100000000000144, 0.3265000000000011, 0.1947499999999991], zp_timestamp='2026-01-01T00:47:00')
2026-01-01T02:50:52.013 [DEBUG] [Thread-139264] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:50:52.096 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T02:50:52.109 [DEBUG] [Thread-139267] [transport.py] [_log()] starting thread (client mode): 0xb1744df0
2026-01-01T02:50:52.109 [DEBUG] [Thread-139267] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:50:52.124 [DEBUG] [Thread-139267] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T02:50:52.124 [INFO] [Thread-139267] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T02:50:52.131 [DEBUG] [Thread-139267] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:50:52.132 [DEBUG] [Thread-139267] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T02:50:52.132 [DEBUG] [Thread-139267] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:50:52.132 [DEBUG] [Thread-139267] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:50:52.132 [DEBUG] [Thread-139267] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:50:52.132 [DEBUG] [Thread-139267] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:50:52.132 [DEBUG] [Thread-139267] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:50:52.132 [DEBUG] [Thread-139267] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:50:52.132 [DEBUG] [Thread-139267] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:50:52.132 [DEBUG] [Thread-139267] [transport.py] [_log()] client lang: <none>
2026-01-01T02:50:52.132 [DEBUG] [Thread-139267] [transport.py] [_log()] server lang: <none>
2026-01-01T02:50:52.132 [DEBUG] [Thread-139267] [transport.py] [_log()] kex follows: False
2026-01-01T02:50:52.132 [DEBUG] [Thread-139267] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:50:52.132 [DEBUG] [Thread-139267] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:50:52.132 [DEBUG] [Thread-139267] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:50:52.132 [DEBUG] [Thread-139267] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:50:52.132 [DEBUG] [Thread-139267] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:50:52.133 [DEBUG] [Thread-139267] [transport.py] [_log()] Compression: none
2026-01-01T02:50:52.133 [DEBUG] [Thread-139267] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:50:52.190 [DEBUG] [Thread-139267] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:50:52.190 [DEBUG] [Thread-139267] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:50:52.191 [DEBUG] [Thread-139267] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T02:50:52.191 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T02:50:52.192 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:50:52.246 [DEBUG] [Thread-139267] [transport.py] [_log()] userauth is OK
2026-01-01T02:50:52.246 [DEBUG] [Thread-139267] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:50:52.246 [DEBUG] [Thread-139267] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:50:52.246 [DEBUG] [Thread-139267] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T02:50:52.246 [DEBUG] [Thread-139267] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:50:52.270 [INFO] [Thread-139267] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:50:52.271 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T02:50:52.272 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:50:53.070 [DEBUG] [Thread-139267] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:50:53.070 [DEBUG] [Thread-139267] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:50:53.118 [DEBUG] [Thread-139267] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:50:53.119 [DEBUG] [Thread-139267] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:50:53.127 [DEBUG] [Thread-139267] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:50:53.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:50:53.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T02:50:53.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T02:50:53.152 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:50:53.153 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:50:53.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:50:53.161 [DEBUG] [Thread-139267] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:51:01.692 [DEBUG] [Thread-139269 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:51:06.506 [DEBUG] [Thread-139270 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:51:07.343 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:51:07.344 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:51:16.737 [DEBUG] [Thread-139271 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:51:23.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T02:51:23.157 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T02:51:23.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T02:51:23.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 2, 51, 18), 3.4, 80.12, 0.0, 9.78, 13.08, 0, 1, 0, 2, 0, 0),)
2026-01-01T02:51:23.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 02:51:18
2026-01-01T02:51:24.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T02:51:24.148 [DEBUG] [Thread-139272] [transport.py] [_log()] starting thread (client mode): 0xb9558850
2026-01-01T02:51:24.148 [DEBUG] [Thread-139272] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:51:24.168 [DEBUG] [Thread-139272] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T02:51:24.168 [INFO] [Thread-139272] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T02:51:24.171 [DEBUG] [Thread-139272] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:51:24.171 [DEBUG] [Thread-139272] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T02:51:24.171 [DEBUG] [Thread-139272] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:51:24.171 [DEBUG] [Thread-139272] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:51:24.171 [DEBUG] [Thread-139272] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:51:24.171 [DEBUG] [Thread-139272] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:51:24.171 [DEBUG] [Thread-139272] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:51:24.171 [DEBUG] [Thread-139272] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:51:24.171 [DEBUG] [Thread-139272] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:51:24.171 [DEBUG] [Thread-139272] [transport.py] [_log()] client lang: <none>
2026-01-01T02:51:24.171 [DEBUG] [Thread-139272] [transport.py] [_log()] server lang: <none>
2026-01-01T02:51:24.171 [DEBUG] [Thread-139272] [transport.py] [_log()] kex follows: False
2026-01-01T02:51:24.171 [DEBUG] [Thread-139272] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:51:24.171 [DEBUG] [Thread-139272] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:51:24.171 [DEBUG] [Thread-139272] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:51:24.171 [DEBUG] [Thread-139272] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:51:24.171 [DEBUG] [Thread-139272] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:51:24.171 [DEBUG] [Thread-139272] [transport.py] [_log()] Compression: none
2026-01-01T02:51:24.171 [DEBUG] [Thread-139272] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:51:24.189 [DEBUG] [Thread-139272] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:51:24.190 [DEBUG] [Thread-139272] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:51:24.191 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T02:51:24.191 [DEBUG] [Thread-139272] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T02:51:24.192 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:51:24.193 [DEBUG] [Thread-139272] [transport.py] [_log()] userauth is OK
2026-01-01T02:51:24.193 [DEBUG] [Thread-139272] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:51:24.193 [DEBUG] [Thread-139272] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:51:24.193 [DEBUG] [Thread-139272] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T02:51:24.193 [DEBUG] [Thread-139272] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:51:24.211 [INFO] [Thread-139272] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:51:24.211 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:51:24.949 [DEBUG] [Thread-139272] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:51:24.949 [DEBUG] [Thread-139272] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:51:24.950 [DEBUG] [Thread-139272] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T02:51:24.990 [DEBUG] [Thread-139272] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:51:24.990 [DEBUG] [Thread-139272] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:51:24.994 [DEBUG] [Thread-139272] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:51:25.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:51:25.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T02:51:25.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T02:51:25.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T02:51:25.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:51:25.021 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T02:51:25.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:51:25.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:51:25.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T02:51:25.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.035200 -999.00  +13.20   6.47     82  +10.30 1 1 1 2 1     0    0 2.31 -16.79 ZNESW 4.9 6.5 205.8 10.3 13.9 -20.9 13.8 -20.6 13.6 -19.1 13.9 -20.2
2026-01-01T02:51:25.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T02:51:25.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T02:51:25.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.035200
2026-01-01T02:51:25.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T02:51:25.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T02:51:25.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T02:51:25.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T02:51:25.023 [DEBUG] [Thread-139272] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:51:25.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T02:51:25.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T02:51:18', tmtdew=3.4, humidity=80.12, cloud=0.0, wind=9.78, temperature=13.08, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T02:51:18', seeing=1.13, atlas_timestamp='2026-01-01T00:50:41.280', atlas_cloud=1, atlas_rain=1, zp_data=[0.04025000000000034, 0.10224999999999973, 0.0652500000000007, 0.053999999999998494, 0.07699999999999996, 0.08025000000000126, 0.11800000000000033, 0.15024999999999977, 0.13149999999999906, 0.20400000000000063, 0.03524999999999956, 0.0754999999999999, 0.09399999999999942, 0.11524999999999963, 0.058999999999999275, 0.1164999999999985, 0.17724999999999902, 0.20149999999999935, 0.13299999999999912, 0.11624999999999908, 0.10849999999999937, 0.1007499999999979, 0.08525000000000027, 0.18374999999999986, 0.15750000000000064, 0.19599999999999973, 0.17575000000000074, 0.14649999999999963, 0.1479999999999997, 0.17849999999999966, 0.24100000000000144, 0.3265000000000011, 0.1947499999999991], zp_timestamp='2026-01-01T00:47:00')
2026-01-01T02:51:25.106 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T02:51:25.118 [DEBUG] [Thread-139275] [transport.py] [_log()] starting thread (client mode): 0xb955a0b0
2026-01-01T02:51:25.118 [DEBUG] [Thread-139275] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:51:25.133 [DEBUG] [Thread-139275] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T02:51:25.133 [INFO] [Thread-139275] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T02:51:25.141 [DEBUG] [Thread-139275] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:51:25.141 [DEBUG] [Thread-139275] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T02:51:25.141 [DEBUG] [Thread-139275] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:51:25.141 [DEBUG] [Thread-139275] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:51:25.142 [DEBUG] [Thread-139275] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:51:25.142 [DEBUG] [Thread-139275] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:51:25.142 [DEBUG] [Thread-139275] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:51:25.142 [DEBUG] [Thread-139275] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:51:25.142 [DEBUG] [Thread-139275] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:51:25.142 [DEBUG] [Thread-139275] [transport.py] [_log()] client lang: <none>
2026-01-01T02:51:25.142 [DEBUG] [Thread-139275] [transport.py] [_log()] server lang: <none>
2026-01-01T02:51:25.142 [DEBUG] [Thread-139275] [transport.py] [_log()] kex follows: False
2026-01-01T02:51:25.142 [DEBUG] [Thread-139275] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:51:25.142 [DEBUG] [Thread-139275] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:51:25.142 [DEBUG] [Thread-139275] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:51:25.142 [DEBUG] [Thread-139275] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:51:25.142 [DEBUG] [Thread-139275] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:51:25.142 [DEBUG] [Thread-139275] [transport.py] [_log()] Compression: none
2026-01-01T02:51:25.143 [DEBUG] [Thread-139275] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:51:25.197 [DEBUG] [Thread-139275] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:51:25.198 [DEBUG] [Thread-139275] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:51:25.199 [DEBUG] [Thread-139275] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T02:51:25.199 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T02:51:25.199 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:51:25.254 [DEBUG] [Thread-139275] [transport.py] [_log()] userauth is OK
2026-01-01T02:51:25.255 [DEBUG] [Thread-139275] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:51:25.255 [DEBUG] [Thread-139275] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:51:25.255 [DEBUG] [Thread-139275] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T02:51:25.255 [DEBUG] [Thread-139275] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:51:25.273 [INFO] [Thread-139275] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:51:25.274 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T02:51:25.274 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:51:26.137 [DEBUG] [Thread-139275] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:51:26.137 [DEBUG] [Thread-139275] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:51:26.185 [DEBUG] [Thread-139275] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:51:26.185 [DEBUG] [Thread-139275] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:51:26.195 [DEBUG] [Thread-139275] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:51:26.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:51:26.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T02:51:26.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T02:51:26.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:51:26.223 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:51:26.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:51:26.232 [DEBUG] [Thread-139275] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:51:31.776 [DEBUG] [Thread-139277 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:51:46.820 [DEBUG] [Thread-139278 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:51:56.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T02:51:56.234 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T02:51:56.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T02:51:56.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 2, 51, 50), 3.38, 80.24, 0.0, 13.08, 13.1, 0, 1, 0, 2, 0, 0),)
2026-01-01T02:51:56.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 02:51:50
2026-01-01T02:51:57.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T02:51:57.259 [DEBUG] [Thread-139279] [transport.py] [_log()] starting thread (client mode): 0xb955add0
2026-01-01T02:51:57.259 [DEBUG] [Thread-139279] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:51:57.282 [DEBUG] [Thread-139279] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T02:51:57.282 [INFO] [Thread-139279] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T02:51:57.285 [DEBUG] [Thread-139279] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:51:57.285 [DEBUG] [Thread-139279] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T02:51:57.285 [DEBUG] [Thread-139279] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:51:57.285 [DEBUG] [Thread-139279] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:51:57.285 [DEBUG] [Thread-139279] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:51:57.285 [DEBUG] [Thread-139279] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:51:57.285 [DEBUG] [Thread-139279] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:51:57.285 [DEBUG] [Thread-139279] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:51:57.285 [DEBUG] [Thread-139279] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:51:57.285 [DEBUG] [Thread-139279] [transport.py] [_log()] client lang: <none>
2026-01-01T02:51:57.285 [DEBUG] [Thread-139279] [transport.py] [_log()] server lang: <none>
2026-01-01T02:51:57.285 [DEBUG] [Thread-139279] [transport.py] [_log()] kex follows: False
2026-01-01T02:51:57.285 [DEBUG] [Thread-139279] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:51:57.285 [DEBUG] [Thread-139279] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:51:57.285 [DEBUG] [Thread-139279] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:51:57.285 [DEBUG] [Thread-139279] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:51:57.285 [DEBUG] [Thread-139279] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:51:57.285 [DEBUG] [Thread-139279] [transport.py] [_log()] Compression: none
2026-01-01T02:51:57.285 [DEBUG] [Thread-139279] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:51:57.304 [DEBUG] [Thread-139279] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:51:57.305 [DEBUG] [Thread-139279] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:51:57.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T02:51:57.306 [DEBUG] [Thread-139279] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T02:51:57.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:51:57.308 [DEBUG] [Thread-139279] [transport.py] [_log()] userauth is OK
2026-01-01T02:51:57.309 [DEBUG] [Thread-139279] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:51:57.309 [DEBUG] [Thread-139279] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:51:57.309 [DEBUG] [Thread-139279] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T02:51:57.309 [DEBUG] [Thread-139279] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:51:57.328 [INFO] [Thread-139279] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:51:57.329 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:51:57.991 [DEBUG] [Thread-139279] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:51:57.991 [DEBUG] [Thread-139279] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:51:57.991 [DEBUG] [Thread-139279] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T02:51:58.032 [DEBUG] [Thread-139279] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:51:58.032 [DEBUG] [Thread-139279] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:51:58.036 [DEBUG] [Thread-139279] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:51:58.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:51:58.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T02:51:58.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T02:51:58.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T02:51:58.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:51:58.059 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T02:51:58.059 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:51:58.060 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:51:58.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T02:51:58.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.035548 -999.00  +13.20   3.53     82  +10.30 1 1 1 2 1     0    0 2.33 -15.01 ZNESW 6.0 3.5 216.7 10.6 13.9 -21.0 13.8 -20.7 13.6 -19.1 13.8 -20.2
2026-01-01T02:51:58.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T02:51:58.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T02:51:58.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.035548
2026-01-01T02:51:58.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T02:51:58.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T02:51:58.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T02:51:58.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T02:51:58.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T02:51:58.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T02:51:50', tmtdew=3.38, humidity=80.24, cloud=0.0, wind=13.08, temperature=13.1, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T02:51:50', seeing=1.19, atlas_timestamp='2026-01-01T00:51:11.347', atlas_cloud=1, atlas_rain=1, zp_data=[0.04025000000000034, 0.10224999999999973, 0.0652500000000007, 0.053999999999998494, 0.07699999999999996, 0.08025000000000126, 0.11800000000000033, 0.15024999999999977, 0.13149999999999906, 0.20400000000000063, 0.03524999999999956, 0.0754999999999999, 0.09399999999999942, 0.11524999999999963, 0.058999999999999275, 0.1164999999999985, 0.17724999999999902, 0.20149999999999935, 0.13299999999999912, 0.11624999999999908, 0.10849999999999937, 0.1007499999999979, 0.08525000000000027, 0.18374999999999986, 0.15750000000000064, 0.19599999999999973, 0.17575000000000074, 0.14649999999999963, 0.1479999999999997, 0.17849999999999966, 0.24100000000000144, 0.3265000000000011, 0.1947499999999991], zp_timestamp='2026-01-01T00:47:00')
2026-01-01T02:51:58.062 [DEBUG] [Thread-139279] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:51:58.150 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T02:51:58.162 [DEBUG] [Thread-139282] [transport.py] [_log()] starting thread (client mode): 0xb95f31c0
2026-01-01T02:51:58.162 [DEBUG] [Thread-139282] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:51:58.177 [DEBUG] [Thread-139282] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T02:51:58.178 [INFO] [Thread-139282] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T02:51:58.185 [DEBUG] [Thread-139282] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:51:58.185 [DEBUG] [Thread-139282] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T02:51:58.185 [DEBUG] [Thread-139282] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:51:58.185 [DEBUG] [Thread-139282] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:51:58.185 [DEBUG] [Thread-139282] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:51:58.185 [DEBUG] [Thread-139282] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:51:58.185 [DEBUG] [Thread-139282] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:51:58.185 [DEBUG] [Thread-139282] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:51:58.186 [DEBUG] [Thread-139282] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:51:58.186 [DEBUG] [Thread-139282] [transport.py] [_log()] client lang: <none>
2026-01-01T02:51:58.186 [DEBUG] [Thread-139282] [transport.py] [_log()] server lang: <none>
2026-01-01T02:51:58.186 [DEBUG] [Thread-139282] [transport.py] [_log()] kex follows: False
2026-01-01T02:51:58.186 [DEBUG] [Thread-139282] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:51:58.186 [DEBUG] [Thread-139282] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:51:58.186 [DEBUG] [Thread-139282] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:51:58.186 [DEBUG] [Thread-139282] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:51:58.186 [DEBUG] [Thread-139282] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:51:58.186 [DEBUG] [Thread-139282] [transport.py] [_log()] Compression: none
2026-01-01T02:51:58.186 [DEBUG] [Thread-139282] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:51:58.242 [DEBUG] [Thread-139282] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:51:58.243 [DEBUG] [Thread-139282] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:51:58.243 [DEBUG] [Thread-139282] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T02:51:58.244 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T02:51:58.245 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:51:58.298 [DEBUG] [Thread-139282] [transport.py] [_log()] userauth is OK
2026-01-01T02:51:58.298 [DEBUG] [Thread-139282] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:51:58.299 [DEBUG] [Thread-139282] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:51:58.299 [DEBUG] [Thread-139282] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T02:51:58.299 [DEBUG] [Thread-139282] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:51:58.318 [INFO] [Thread-139282] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:51:58.318 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T02:51:58.319 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:51:59.139 [DEBUG] [Thread-139282] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:51:59.140 [DEBUG] [Thread-139282] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:51:59.188 [DEBUG] [Thread-139282] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:51:59.188 [DEBUG] [Thread-139282] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:51:59.197 [DEBUG] [Thread-139282] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:51:59.207 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:51:59.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T02:51:59.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T02:51:59.226 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:51:59.226 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:51:59.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:51:59.235 [DEBUG] [Thread-139282] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:52:01.855 [DEBUG] [Thread-139284 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:52:06.562 [DEBUG] [Thread-139285 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:52:07.546 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:52:07.547 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:52:16.901 [DEBUG] [Thread-139286 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:52:29.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T02:52:29.237 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T02:52:29.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T02:52:29.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 2, 52, 22), 3.37, 80.27, 0.0, 12.53, 13.15, 0, 1, 0, 2, 0, 0),)
2026-01-01T02:52:29.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 02:52:22
2026-01-01T02:52:30.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T02:52:30.230 [DEBUG] [Thread-139287] [transport.py] [_log()] starting thread (client mode): 0xb6ba2a10
2026-01-01T02:52:30.231 [DEBUG] [Thread-139287] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:52:30.251 [DEBUG] [Thread-139287] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T02:52:30.251 [INFO] [Thread-139287] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T02:52:30.253 [DEBUG] [Thread-139287] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:52:30.253 [DEBUG] [Thread-139287] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T02:52:30.253 [DEBUG] [Thread-139287] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:52:30.253 [DEBUG] [Thread-139287] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:52:30.253 [DEBUG] [Thread-139287] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:52:30.253 [DEBUG] [Thread-139287] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:52:30.253 [DEBUG] [Thread-139287] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:52:30.254 [DEBUG] [Thread-139287] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:52:30.254 [DEBUG] [Thread-139287] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:52:30.254 [DEBUG] [Thread-139287] [transport.py] [_log()] client lang: <none>
2026-01-01T02:52:30.254 [DEBUG] [Thread-139287] [transport.py] [_log()] server lang: <none>
2026-01-01T02:52:30.254 [DEBUG] [Thread-139287] [transport.py] [_log()] kex follows: False
2026-01-01T02:52:30.254 [DEBUG] [Thread-139287] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:52:30.254 [DEBUG] [Thread-139287] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:52:30.254 [DEBUG] [Thread-139287] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:52:30.254 [DEBUG] [Thread-139287] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:52:30.254 [DEBUG] [Thread-139287] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:52:30.254 [DEBUG] [Thread-139287] [transport.py] [_log()] Compression: none
2026-01-01T02:52:30.254 [DEBUG] [Thread-139287] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:52:30.267 [DEBUG] [Thread-139287] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:52:30.268 [DEBUG] [Thread-139287] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:52:30.268 [DEBUG] [Thread-139287] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T02:52:30.269 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T02:52:30.269 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:52:30.270 [DEBUG] [Thread-139287] [transport.py] [_log()] userauth is OK
2026-01-01T02:52:30.270 [DEBUG] [Thread-139287] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:52:30.270 [DEBUG] [Thread-139287] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:52:30.271 [DEBUG] [Thread-139287] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T02:52:30.271 [DEBUG] [Thread-139287] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:52:30.288 [INFO] [Thread-139287] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:52:30.288 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:52:31.077 [DEBUG] [Thread-139287] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:52:31.077 [DEBUG] [Thread-139287] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:52:31.077 [DEBUG] [Thread-139287] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T02:52:31.118 [DEBUG] [Thread-139287] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:52:31.118 [DEBUG] [Thread-139287] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:52:31.121 [DEBUG] [Thread-139287] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:52:31.132 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:52:31.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T02:52:31.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T02:52:31.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T02:52:31.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:52:31.141 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T02:52:31.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:52:31.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:52:31.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T02:52:31.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.036242 -999.00  +13.20   5.19     82  +10.40 1 1 1 2 1     0    0 2.50 -9.64 ZNESW 8.1 5.2 274.8 9.7 13.9 -21.0 13.8 -20.7 13.6 -19.1 13.9 -20.2
2026-01-01T02:52:31.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T02:52:31.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T02:52:31.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.036242
2026-01-01T02:52:31.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T02:52:31.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T02:52:31.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T02:52:31.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T02:52:31.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T02:52:31.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T02:52:22', tmtdew=3.37, humidity=80.27, cloud=0.0, wind=12.53, temperature=13.15, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T02:52:22', seeing=1.23, atlas_timestamp='2026-01-01T00:52:11.309', atlas_cloud=1, atlas_rain=1, zp_data=[0.021250000000000213, 0.09675000000000011, 0.06925000000000026, 0.0470000000000006, 0.03950000000000031, 0.07725000000000115, 0.11299999999999955, 0.0727499999999992, 0.07449999999999868, 0.16949999999999932, 0.028249999999999886, 0.08000000000000007, 0.09699999999999953, 0.08274999999999899, 0.06899999999999906, 0.07649999999999935, 0.12624999999999886, 0.21449999999999925, 0.11050000000000004, 0.1327499999999997, 0.09849999999999781, 0.10174999999999912, 0.0652500000000007, 0.12725000000000009, 0.16549999999999976, 0.14149999999999885, 0.12424999999999997, 0.14949999999999974, 0.16800000000000104, 0.19500000000000028, 0.15000000000000036, 0.307500000000001, 0.21774999999999878], zp_timestamp='2026-01-01T00:50:00')
2026-01-01T02:52:31.143 [DEBUG] [Thread-139287] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:52:31.226 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T02:52:31.237 [DEBUG] [Thread-139290] [transport.py] [_log()] starting thread (client mode): 0xb9558460
2026-01-01T02:52:31.238 [DEBUG] [Thread-139290] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:52:31.253 [DEBUG] [Thread-139290] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T02:52:31.254 [INFO] [Thread-139290] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T02:52:31.261 [DEBUG] [Thread-139290] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:52:31.261 [DEBUG] [Thread-139290] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T02:52:31.261 [DEBUG] [Thread-139290] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:52:31.261 [DEBUG] [Thread-139290] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:52:31.261 [DEBUG] [Thread-139290] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:52:31.261 [DEBUG] [Thread-139290] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:52:31.261 [DEBUG] [Thread-139290] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:52:31.261 [DEBUG] [Thread-139290] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:52:31.261 [DEBUG] [Thread-139290] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:52:31.261 [DEBUG] [Thread-139290] [transport.py] [_log()] client lang: <none>
2026-01-01T02:52:31.261 [DEBUG] [Thread-139290] [transport.py] [_log()] server lang: <none>
2026-01-01T02:52:31.261 [DEBUG] [Thread-139290] [transport.py] [_log()] kex follows: False
2026-01-01T02:52:31.261 [DEBUG] [Thread-139290] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:52:31.261 [DEBUG] [Thread-139290] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:52:31.262 [DEBUG] [Thread-139290] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:52:31.262 [DEBUG] [Thread-139290] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:52:31.262 [DEBUG] [Thread-139290] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:52:31.262 [DEBUG] [Thread-139290] [transport.py] [_log()] Compression: none
2026-01-01T02:52:31.262 [DEBUG] [Thread-139290] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:52:31.317 [DEBUG] [Thread-139290] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:52:31.317 [DEBUG] [Thread-139290] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:52:31.318 [DEBUG] [Thread-139290] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T02:52:31.318 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T02:52:31.318 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:52:31.373 [DEBUG] [Thread-139290] [transport.py] [_log()] userauth is OK
2026-01-01T02:52:31.374 [DEBUG] [Thread-139290] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:52:31.374 [DEBUG] [Thread-139290] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:52:31.374 [DEBUG] [Thread-139290] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T02:52:31.374 [DEBUG] [Thread-139290] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:52:31.393 [INFO] [Thread-139290] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:52:31.394 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T02:52:31.394 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:52:31.928 [DEBUG] [Thread-139292 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:52:32.201 [DEBUG] [Thread-139290] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:52:32.201 [DEBUG] [Thread-139290] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:52:32.248 [DEBUG] [Thread-139290] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:52:32.249 [DEBUG] [Thread-139290] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:52:32.257 [DEBUG] [Thread-139290] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:52:32.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:52:32.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T02:52:32.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T02:52:32.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:52:32.283 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:52:32.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:52:32.291 [DEBUG] [Thread-139290] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:52:46.982 [DEBUG] [Thread-139293 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:53:02.013 [DEBUG] [Thread-139294 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:53:02.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T02:53:02.314 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T02:53:02.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T02:53:03.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 2, 52, 54), 3.36, 80.06, 0.0, 10.01, 13.05, 0, 1, 0, 2, 0, 0),)
2026-01-01T02:53:03.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 02:52:54
2026-01-01T02:53:03.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T02:53:03.282 [DEBUG] [Thread-139295] [transport.py] [_log()] starting thread (client mode): 0xb955a860
2026-01-01T02:53:03.283 [DEBUG] [Thread-139295] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:53:03.303 [DEBUG] [Thread-139295] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T02:53:03.304 [INFO] [Thread-139295] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T02:53:03.307 [DEBUG] [Thread-139295] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:53:03.307 [DEBUG] [Thread-139295] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T02:53:03.307 [DEBUG] [Thread-139295] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:53:03.307 [DEBUG] [Thread-139295] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:53:03.307 [DEBUG] [Thread-139295] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:53:03.307 [DEBUG] [Thread-139295] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:53:03.307 [DEBUG] [Thread-139295] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:53:03.307 [DEBUG] [Thread-139295] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:53:03.307 [DEBUG] [Thread-139295] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:53:03.307 [DEBUG] [Thread-139295] [transport.py] [_log()] client lang: <none>
2026-01-01T02:53:03.307 [DEBUG] [Thread-139295] [transport.py] [_log()] server lang: <none>
2026-01-01T02:53:03.307 [DEBUG] [Thread-139295] [transport.py] [_log()] kex follows: False
2026-01-01T02:53:03.307 [DEBUG] [Thread-139295] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:53:03.307 [DEBUG] [Thread-139295] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:53:03.307 [DEBUG] [Thread-139295] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:53:03.307 [DEBUG] [Thread-139295] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:53:03.307 [DEBUG] [Thread-139295] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:53:03.307 [DEBUG] [Thread-139295] [transport.py] [_log()] Compression: none
2026-01-01T02:53:03.307 [DEBUG] [Thread-139295] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:53:03.324 [DEBUG] [Thread-139295] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:53:03.324 [DEBUG] [Thread-139295] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:53:03.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T02:53:03.326 [DEBUG] [Thread-139295] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T02:53:03.326 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:53:03.327 [DEBUG] [Thread-139295] [transport.py] [_log()] userauth is OK
2026-01-01T02:53:03.328 [DEBUG] [Thread-139295] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:53:03.328 [DEBUG] [Thread-139295] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:53:03.328 [DEBUG] [Thread-139295] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T02:53:03.328 [DEBUG] [Thread-139295] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:53:03.352 [INFO] [Thread-139295] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:53:03.353 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:53:04.002 [DEBUG] [Thread-139295] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:53:04.002 [DEBUG] [Thread-139295] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:53:04.002 [DEBUG] [Thread-139295] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T02:53:04.043 [DEBUG] [Thread-139295] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:53:04.043 [DEBUG] [Thread-139295] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:53:04.046 [DEBUG] [Thread-139295] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:53:04.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:53:04.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T02:53:04.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T02:53:04.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T02:53:04.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:53:04.069 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T02:53:04.069 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:53:04.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:53:04.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T02:53:04.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.036589 -999.00  +13.20   4.73     82  +10.30 1 1 1 2 1     0    0 2.61 -8.21 ZNESW 5.2 4.7 199.6 9.7 13.9 -21.0 13.8 -20.6 13.6 -19.2 13.8 -20.2
2026-01-01T02:53:04.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T02:53:04.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T02:53:04.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.036589
2026-01-01T02:53:04.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T02:53:04.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T02:53:04.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T02:53:04.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T02:53:04.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T02:53:04.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T02:52:54', tmtdew=3.36, humidity=80.06, cloud=0.0, wind=10.01, temperature=13.05, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T02:52:54', seeing=1.23, atlas_timestamp='2026-01-01T00:52:41.290', atlas_cloud=1, atlas_rain=1, zp_data=[0.021250000000000213, 0.09675000000000011, 0.06925000000000026, 0.0470000000000006, 0.03950000000000031, 0.07725000000000115, 0.11299999999999955, 0.0727499999999992, 0.07449999999999868, 0.16949999999999932, 0.028249999999999886, 0.08000000000000007, 0.09699999999999953, 0.08274999999999899, 0.06899999999999906, 0.07649999999999935, 0.12624999999999886, 0.21449999999999925, 0.11050000000000004, 0.1327499999999997, 0.09849999999999781, 0.10174999999999912, 0.0652500000000007, 0.12725000000000009, 0.16549999999999976, 0.14149999999999885, 0.12424999999999997, 0.14949999999999974, 0.16800000000000104, 0.19500000000000028, 0.15000000000000036, 0.307500000000001, 0.21774999999999878], zp_timestamp='2026-01-01T00:50:00')
2026-01-01T02:53:04.071 [DEBUG] [Thread-139295] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:53:04.156 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T02:53:04.168 [DEBUG] [Thread-139298] [transport.py] [_log()] starting thread (client mode): 0xb955baf0
2026-01-01T02:53:04.168 [DEBUG] [Thread-139298] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:53:04.183 [DEBUG] [Thread-139298] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T02:53:04.183 [INFO] [Thread-139298] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T02:53:04.190 [DEBUG] [Thread-139298] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:53:04.191 [DEBUG] [Thread-139298] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T02:53:04.191 [DEBUG] [Thread-139298] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:53:04.191 [DEBUG] [Thread-139298] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:53:04.191 [DEBUG] [Thread-139298] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:53:04.191 [DEBUG] [Thread-139298] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:53:04.191 [DEBUG] [Thread-139298] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:53:04.191 [DEBUG] [Thread-139298] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:53:04.191 [DEBUG] [Thread-139298] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:53:04.191 [DEBUG] [Thread-139298] [transport.py] [_log()] client lang: <none>
2026-01-01T02:53:04.191 [DEBUG] [Thread-139298] [transport.py] [_log()] server lang: <none>
2026-01-01T02:53:04.191 [DEBUG] [Thread-139298] [transport.py] [_log()] kex follows: False
2026-01-01T02:53:04.191 [DEBUG] [Thread-139298] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:53:04.191 [DEBUG] [Thread-139298] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:53:04.191 [DEBUG] [Thread-139298] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:53:04.191 [DEBUG] [Thread-139298] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:53:04.191 [DEBUG] [Thread-139298] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:53:04.191 [DEBUG] [Thread-139298] [transport.py] [_log()] Compression: none
2026-01-01T02:53:04.191 [DEBUG] [Thread-139298] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:53:04.250 [DEBUG] [Thread-139298] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:53:04.250 [DEBUG] [Thread-139298] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:53:04.251 [DEBUG] [Thread-139298] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T02:53:04.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T02:53:04.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:53:04.306 [DEBUG] [Thread-139298] [transport.py] [_log()] userauth is OK
2026-01-01T02:53:04.306 [DEBUG] [Thread-139298] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:53:04.307 [DEBUG] [Thread-139298] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:53:04.307 [DEBUG] [Thread-139298] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T02:53:04.307 [DEBUG] [Thread-139298] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:53:04.327 [INFO] [Thread-139298] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:53:04.328 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T02:53:04.328 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:53:05.174 [DEBUG] [Thread-139298] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:53:05.174 [DEBUG] [Thread-139298] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:53:05.222 [DEBUG] [Thread-139298] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:53:05.222 [DEBUG] [Thread-139298] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:53:05.236 [DEBUG] [Thread-139298] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:53:05.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:53:05.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T02:53:05.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T02:53:05.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:53:05.273 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:53:05.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:53:05.285 [DEBUG] [Thread-139298] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:53:06.638 [DEBUG] [Thread-139300 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:53:07.748 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:53:07.749 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:53:17.052 [DEBUG] [Thread-139301 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:53:32.114 [DEBUG] [Thread-139302 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:53:35.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T02:53:35.304 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T02:53:35.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T02:53:36.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 2, 53, 27), 3.4, 79.84, 0.0, 11.72, 13.1, 0, 0, 0, 2, 0, 0),)
2026-01-01T02:53:36.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 02:53:27
2026-01-01T02:53:36.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T02:53:36.333 [DEBUG] [Thread-139303] [transport.py] [_log()] starting thread (client mode): 0xb1745600
2026-01-01T02:53:36.333 [DEBUG] [Thread-139303] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:53:36.353 [DEBUG] [Thread-139303] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T02:53:36.353 [INFO] [Thread-139303] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T02:53:36.356 [DEBUG] [Thread-139303] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:53:36.356 [DEBUG] [Thread-139303] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T02:53:36.356 [DEBUG] [Thread-139303] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:53:36.356 [DEBUG] [Thread-139303] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:53:36.356 [DEBUG] [Thread-139303] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:53:36.356 [DEBUG] [Thread-139303] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:53:36.356 [DEBUG] [Thread-139303] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:53:36.356 [DEBUG] [Thread-139303] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:53:36.356 [DEBUG] [Thread-139303] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:53:36.356 [DEBUG] [Thread-139303] [transport.py] [_log()] client lang: <none>
2026-01-01T02:53:36.356 [DEBUG] [Thread-139303] [transport.py] [_log()] server lang: <none>
2026-01-01T02:53:36.356 [DEBUG] [Thread-139303] [transport.py] [_log()] kex follows: False
2026-01-01T02:53:36.356 [DEBUG] [Thread-139303] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:53:36.357 [DEBUG] [Thread-139303] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:53:36.357 [DEBUG] [Thread-139303] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:53:36.357 [DEBUG] [Thread-139303] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:53:36.357 [DEBUG] [Thread-139303] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:53:36.357 [DEBUG] [Thread-139303] [transport.py] [_log()] Compression: none
2026-01-01T02:53:36.357 [DEBUG] [Thread-139303] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:53:36.372 [DEBUG] [Thread-139303] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:53:36.372 [DEBUG] [Thread-139303] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:53:36.373 [DEBUG] [Thread-139303] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T02:53:36.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T02:53:36.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:53:36.373 [DEBUG] [Thread-139303] [transport.py] [_log()] userauth is OK
2026-01-01T02:53:36.373 [DEBUG] [Thread-139303] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:53:36.373 [DEBUG] [Thread-139303] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:53:36.374 [DEBUG] [Thread-139303] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T02:53:36.374 [DEBUG] [Thread-139303] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:53:36.387 [INFO] [Thread-139303] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:53:36.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:53:37.027 [DEBUG] [Thread-139303] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:53:37.027 [DEBUG] [Thread-139303] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:53:37.027 [DEBUG] [Thread-139303] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T02:53:37.068 [DEBUG] [Thread-139303] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:53:37.068 [DEBUG] [Thread-139303] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:53:37.071 [DEBUG] [Thread-139303] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:53:37.085 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:53:37.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T02:53:37.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T02:53:37.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T02:53:37.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:53:37.090 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T02:53:37.091 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:53:37.091 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:53:37.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T02:53:37.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.036937 -999.00  +13.20   7.08     82  +10.30 1 1 1 2 1     0    0 2.58 -5.64 ZNESW 7.6 7.1 212.6 10.1 13.9 -21.1 13.8 -20.7 13.6 -19.1 13.9 -20.2
2026-01-01T02:53:37.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T02:53:37.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T02:53:37.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.036937
2026-01-01T02:53:37.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T02:53:37.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T02:53:37.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T02:53:37.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T02:53:37.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T02:53:37.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T02:53:27', tmtdew=3.4, humidity=79.84, cloud=0.0, wind=11.72, temperature=13.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T02:53:27', seeing=1.23, atlas_timestamp='2026-01-01T00:53:11.357', atlas_cloud=1, atlas_rain=1, zp_data=[0.021250000000000213, 0.09675000000000011, 0.06925000000000026, 0.0470000000000006, 0.03950000000000031, 0.07725000000000115, 0.11299999999999955, 0.0727499999999992, 0.07449999999999868, 0.16949999999999932, 0.028249999999999886, 0.08000000000000007, 0.09699999999999953, 0.08274999999999899, 0.06899999999999906, 0.07649999999999935, 0.12624999999999886, 0.21449999999999925, 0.11050000000000004, 0.1327499999999997, 0.09849999999999781, 0.10174999999999912, 0.0652500000000007, 0.12725000000000009, 0.16549999999999976, 0.14149999999999885, 0.12424999999999997, 0.14949999999999974, 0.16800000000000104, 0.19500000000000028, 0.15000000000000036, 0.307500000000001, 0.21774999999999878], zp_timestamp='2026-01-01T00:50:00')
2026-01-01T02:53:37.093 [DEBUG] [Thread-139303] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:53:37.165 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T02:53:37.180 [DEBUG] [Thread-139306] [transport.py] [_log()] starting thread (client mode): 0xb1796350
2026-01-01T02:53:37.180 [DEBUG] [Thread-139306] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:53:37.195 [DEBUG] [Thread-139306] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T02:53:37.196 [INFO] [Thread-139306] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T02:53:37.203 [DEBUG] [Thread-139306] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:53:37.203 [DEBUG] [Thread-139306] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T02:53:37.203 [DEBUG] [Thread-139306] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:53:37.203 [DEBUG] [Thread-139306] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:53:37.203 [DEBUG] [Thread-139306] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:53:37.203 [DEBUG] [Thread-139306] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:53:37.203 [DEBUG] [Thread-139306] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:53:37.203 [DEBUG] [Thread-139306] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:53:37.203 [DEBUG] [Thread-139306] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:53:37.203 [DEBUG] [Thread-139306] [transport.py] [_log()] client lang: <none>
2026-01-01T02:53:37.203 [DEBUG] [Thread-139306] [transport.py] [_log()] server lang: <none>
2026-01-01T02:53:37.203 [DEBUG] [Thread-139306] [transport.py] [_log()] kex follows: False
2026-01-01T02:53:37.203 [DEBUG] [Thread-139306] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:53:37.203 [DEBUG] [Thread-139306] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:53:37.203 [DEBUG] [Thread-139306] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:53:37.203 [DEBUG] [Thread-139306] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:53:37.203 [DEBUG] [Thread-139306] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:53:37.204 [DEBUG] [Thread-139306] [transport.py] [_log()] Compression: none
2026-01-01T02:53:37.204 [DEBUG] [Thread-139306] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:53:37.260 [DEBUG] [Thread-139306] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:53:37.260 [DEBUG] [Thread-139306] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:53:37.260 [DEBUG] [Thread-139306] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T02:53:37.260 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T02:53:37.260 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:53:37.318 [DEBUG] [Thread-139306] [transport.py] [_log()] userauth is OK
2026-01-01T02:53:37.318 [DEBUG] [Thread-139306] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:53:37.318 [DEBUG] [Thread-139306] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:53:37.318 [DEBUG] [Thread-139306] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T02:53:37.318 [DEBUG] [Thread-139306] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:53:37.332 [INFO] [Thread-139306] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:53:37.332 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T02:53:37.332 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:53:38.169 [DEBUG] [Thread-139306] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:53:38.170 [DEBUG] [Thread-139306] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:53:38.217 [DEBUG] [Thread-139306] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:53:38.217 [DEBUG] [Thread-139306] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:53:38.226 [DEBUG] [Thread-139306] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:53:38.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:53:38.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T02:53:38.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T02:53:38.249 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:53:38.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:53:38.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:53:38.257 [DEBUG] [Thread-139306] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:53:47.150 [DEBUG] [Thread-139308 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:54:02.207 [DEBUG] [Thread-139309 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:54:06.694 [DEBUG] [Thread-139310 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:54:07.950 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:54:07.951 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:54:08.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T02:54:08.279 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T02:54:08.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T02:54:08.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 2, 53, 59), 3.41, 79.81, 0.0, 11.93, 13.05, 0, 0, 0, 2, 0, 0),)
2026-01-01T02:54:08.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 02:53:59
2026-01-01T02:54:09.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T02:54:09.272 [DEBUG] [Thread-139311] [transport.py] [_log()] starting thread (client mode): 0xb6ba04f0
2026-01-01T02:54:09.272 [DEBUG] [Thread-139311] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:54:09.290 [DEBUG] [Thread-139311] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T02:54:09.290 [INFO] [Thread-139311] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T02:54:09.293 [DEBUG] [Thread-139311] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:54:09.294 [DEBUG] [Thread-139311] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T02:54:09.294 [DEBUG] [Thread-139311] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:54:09.294 [DEBUG] [Thread-139311] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:54:09.294 [DEBUG] [Thread-139311] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:54:09.294 [DEBUG] [Thread-139311] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:54:09.294 [DEBUG] [Thread-139311] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:54:09.294 [DEBUG] [Thread-139311] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:54:09.294 [DEBUG] [Thread-139311] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:54:09.294 [DEBUG] [Thread-139311] [transport.py] [_log()] client lang: <none>
2026-01-01T02:54:09.294 [DEBUG] [Thread-139311] [transport.py] [_log()] server lang: <none>
2026-01-01T02:54:09.294 [DEBUG] [Thread-139311] [transport.py] [_log()] kex follows: False
2026-01-01T02:54:09.294 [DEBUG] [Thread-139311] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:54:09.294 [DEBUG] [Thread-139311] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:54:09.294 [DEBUG] [Thread-139311] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:54:09.294 [DEBUG] [Thread-139311] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:54:09.294 [DEBUG] [Thread-139311] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:54:09.294 [DEBUG] [Thread-139311] [transport.py] [_log()] Compression: none
2026-01-01T02:54:09.294 [DEBUG] [Thread-139311] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:54:09.311 [DEBUG] [Thread-139311] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:54:09.311 [DEBUG] [Thread-139311] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:54:09.311 [DEBUG] [Thread-139311] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T02:54:09.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T02:54:09.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:54:09.313 [DEBUG] [Thread-139311] [transport.py] [_log()] userauth is OK
2026-01-01T02:54:09.313 [DEBUG] [Thread-139311] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:54:09.313 [DEBUG] [Thread-139311] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:54:09.313 [DEBUG] [Thread-139311] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T02:54:09.313 [DEBUG] [Thread-139311] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:54:09.331 [INFO] [Thread-139311] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:54:09.332 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:54:09.971 [DEBUG] [Thread-139311] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:54:09.971 [DEBUG] [Thread-139311] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:54:09.971 [DEBUG] [Thread-139311] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T02:54:10.012 [DEBUG] [Thread-139311] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:54:10.012 [DEBUG] [Thread-139311] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:54:10.016 [DEBUG] [Thread-139311] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:54:10.030 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:54:10.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T02:54:10.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T02:54:10.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T02:54:10.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:54:10.044 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T02:54:10.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:54:10.045 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:54:10.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T02:54:10.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.037284 -999.00  +13.20   4.50     82  +10.30 1 1 1 2 1     0    0 2.75 -3.64 ZNESW 3.8 4.5 227.2 10.4 13.9 -21.1 13.8 -20.7 13.6 -19.1 13.9 -20.2
2026-01-01T02:54:10.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T02:54:10.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T02:54:10.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.037284
2026-01-01T02:54:10.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T02:54:10.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T02:54:10.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T02:54:10.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T02:54:10.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T02:54:10.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T02:53:59', tmtdew=3.41, humidity=79.81, cloud=0.0, wind=11.93, temperature=13.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T02:53:59', seeing=1.16, atlas_timestamp='2026-01-01T00:53:41.338', atlas_cloud=1, atlas_rain=1, zp_data=[0.021250000000000213, 0.09675000000000011, 0.06925000000000026, 0.0470000000000006, 0.03950000000000031, 0.07725000000000115, 0.11299999999999955, 0.0727499999999992, 0.07449999999999868, 0.16949999999999932, 0.028249999999999886, 0.08000000000000007, 0.09699999999999953, 0.08274999999999899, 0.06899999999999906, 0.07649999999999935, 0.12624999999999886, 0.21449999999999925, 0.11050000000000004, 0.1327499999999997, 0.09849999999999781, 0.10174999999999912, 0.0652500000000007, 0.12725000000000009, 0.16549999999999976, 0.14149999999999885, 0.12424999999999997, 0.14949999999999974, 0.16800000000000104, 0.19500000000000028, 0.15000000000000036, 0.307500000000001, 0.21774999999999878], zp_timestamp='2026-01-01T00:50:00')
2026-01-01T02:54:10.047 [DEBUG] [Thread-139311] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:54:10.130 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T02:54:10.142 [DEBUG] [Thread-139314] [transport.py] [_log()] starting thread (client mode): 0xb1744100
2026-01-01T02:54:10.142 [DEBUG] [Thread-139314] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:54:10.158 [DEBUG] [Thread-139314] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T02:54:10.158 [INFO] [Thread-139314] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T02:54:10.166 [DEBUG] [Thread-139314] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:54:10.166 [DEBUG] [Thread-139314] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T02:54:10.166 [DEBUG] [Thread-139314] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:54:10.166 [DEBUG] [Thread-139314] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:54:10.166 [DEBUG] [Thread-139314] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:54:10.166 [DEBUG] [Thread-139314] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:54:10.167 [DEBUG] [Thread-139314] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:54:10.167 [DEBUG] [Thread-139314] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:54:10.167 [DEBUG] [Thread-139314] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:54:10.167 [DEBUG] [Thread-139314] [transport.py] [_log()] client lang: <none>
2026-01-01T02:54:10.167 [DEBUG] [Thread-139314] [transport.py] [_log()] server lang: <none>
2026-01-01T02:54:10.167 [DEBUG] [Thread-139314] [transport.py] [_log()] kex follows: False
2026-01-01T02:54:10.167 [DEBUG] [Thread-139314] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:54:10.167 [DEBUG] [Thread-139314] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:54:10.167 [DEBUG] [Thread-139314] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:54:10.167 [DEBUG] [Thread-139314] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:54:10.167 [DEBUG] [Thread-139314] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:54:10.167 [DEBUG] [Thread-139314] [transport.py] [_log()] Compression: none
2026-01-01T02:54:10.167 [DEBUG] [Thread-139314] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:54:10.226 [DEBUG] [Thread-139314] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:54:10.226 [DEBUG] [Thread-139314] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:54:10.227 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T02:54:10.227 [DEBUG] [Thread-139314] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T02:54:10.228 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:54:10.281 [DEBUG] [Thread-139314] [transport.py] [_log()] userauth is OK
2026-01-01T02:54:10.281 [DEBUG] [Thread-139314] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:54:10.282 [DEBUG] [Thread-139314] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:54:10.282 [DEBUG] [Thread-139314] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T02:54:10.282 [DEBUG] [Thread-139314] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:54:10.309 [INFO] [Thread-139314] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:54:10.309 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T02:54:10.310 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:54:11.108 [DEBUG] [Thread-139314] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:54:11.108 [DEBUG] [Thread-139314] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:54:11.156 [DEBUG] [Thread-139314] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:54:11.157 [DEBUG] [Thread-139314] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:54:11.166 [DEBUG] [Thread-139314] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:54:11.175 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:54:11.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T02:54:11.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T02:54:11.192 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:54:11.193 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:54:11.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:54:11.201 [DEBUG] [Thread-139314] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:54:17.238 [DEBUG] [Thread-139316 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:54:32.275 [DEBUG] [Thread-139317 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:54:41.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T02:54:41.223 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T02:54:41.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T02:54:41.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 2, 54, 31), 3.41, 79.79, 0.0, 11.4, 13.06, 0, 0, 0, 2, 0, 0),)
2026-01-01T02:54:41.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 02:54:31
2026-01-01T02:54:42.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T02:54:42.209 [DEBUG] [Thread-139318] [transport.py] [_log()] starting thread (client mode): 0xb6b15780
2026-01-01T02:54:42.209 [DEBUG] [Thread-139318] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:54:42.230 [DEBUG] [Thread-139318] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T02:54:42.230 [INFO] [Thread-139318] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T02:54:42.233 [DEBUG] [Thread-139318] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:54:42.233 [DEBUG] [Thread-139318] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T02:54:42.233 [DEBUG] [Thread-139318] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:54:42.233 [DEBUG] [Thread-139318] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:54:42.233 [DEBUG] [Thread-139318] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:54:42.234 [DEBUG] [Thread-139318] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:54:42.234 [DEBUG] [Thread-139318] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:54:42.234 [DEBUG] [Thread-139318] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:54:42.234 [DEBUG] [Thread-139318] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:54:42.234 [DEBUG] [Thread-139318] [transport.py] [_log()] client lang: <none>
2026-01-01T02:54:42.234 [DEBUG] [Thread-139318] [transport.py] [_log()] server lang: <none>
2026-01-01T02:54:42.234 [DEBUG] [Thread-139318] [transport.py] [_log()] kex follows: False
2026-01-01T02:54:42.234 [DEBUG] [Thread-139318] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:54:42.234 [DEBUG] [Thread-139318] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:54:42.234 [DEBUG] [Thread-139318] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:54:42.234 [DEBUG] [Thread-139318] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:54:42.234 [DEBUG] [Thread-139318] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:54:42.234 [DEBUG] [Thread-139318] [transport.py] [_log()] Compression: none
2026-01-01T02:54:42.235 [DEBUG] [Thread-139318] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:54:42.252 [DEBUG] [Thread-139318] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:54:42.252 [DEBUG] [Thread-139318] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:54:42.253 [DEBUG] [Thread-139318] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T02:54:42.254 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T02:54:42.254 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:54:42.255 [DEBUG] [Thread-139318] [transport.py] [_log()] userauth is OK
2026-01-01T02:54:42.256 [DEBUG] [Thread-139318] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:54:42.256 [DEBUG] [Thread-139318] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:54:42.256 [DEBUG] [Thread-139318] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T02:54:42.256 [DEBUG] [Thread-139318] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:54:42.288 [INFO] [Thread-139318] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:54:42.289 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:54:42.944 [DEBUG] [Thread-139318] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:54:42.945 [DEBUG] [Thread-139318] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:54:42.945 [DEBUG] [Thread-139318] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T02:54:42.986 [DEBUG] [Thread-139318] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:54:42.986 [DEBUG] [Thread-139318] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:54:42.988 [DEBUG] [Thread-139318] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:54:43.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:54:43.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T02:54:43.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T02:54:43.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T02:54:43.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:54:43.014 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T02:54:43.014 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:54:43.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:54:43.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T02:54:43.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.037631 -999.00  +13.20   3.80     82  +10.30 1 1 1 2 1     0    0 2.77 -2.06 ZNESW 6.4 3.8 248.8 9.9 13.9 -21.0 13.8 -20.7 13.6 -19.1 13.9 -20.2
2026-01-01T02:54:43.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T02:54:43.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T02:54:43.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.037631
2026-01-01T02:54:43.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T02:54:43.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T02:54:43.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T02:54:43.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T02:54:43.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T02:54:43.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T02:54:31', tmtdew=3.41, humidity=79.79, cloud=0.0, wind=11.4, temperature=13.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T02:54:31', seeing=1.1, atlas_timestamp='2026-01-01T00:54:11.318', atlas_cloud=1, atlas_rain=1, zp_data=[0.021250000000000213, 0.09675000000000011, 0.06925000000000026, 0.0470000000000006, 0.03950000000000031, 0.07725000000000115, 0.11299999999999955, 0.0727499999999992, 0.07449999999999868, 0.16949999999999932, 0.028249999999999886, 0.08000000000000007, 0.09699999999999953, 0.08274999999999899, 0.06899999999999906, 0.07649999999999935, 0.12624999999999886, 0.21449999999999925, 0.11050000000000004, 0.1327499999999997, 0.09849999999999781, 0.10174999999999912, 0.0652500000000007, 0.12725000000000009, 0.16549999999999976, 0.14149999999999885, 0.12424999999999997, 0.14949999999999974, 0.16800000000000104, 0.19500000000000028, 0.15000000000000036, 0.307500000000001, 0.21774999999999878], zp_timestamp='2026-01-01T00:50:00')
2026-01-01T02:54:43.016 [DEBUG] [Thread-139318] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:54:43.107 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T02:54:43.117 [DEBUG] [Thread-139321] [transport.py] [_log()] starting thread (client mode): 0xb95f2d10
2026-01-01T02:54:43.117 [DEBUG] [Thread-139321] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:54:43.133 [DEBUG] [Thread-139321] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T02:54:43.133 [INFO] [Thread-139321] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T02:54:43.141 [DEBUG] [Thread-139321] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:54:43.141 [DEBUG] [Thread-139321] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T02:54:43.141 [DEBUG] [Thread-139321] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:54:43.141 [DEBUG] [Thread-139321] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:54:43.141 [DEBUG] [Thread-139321] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:54:43.141 [DEBUG] [Thread-139321] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:54:43.141 [DEBUG] [Thread-139321] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:54:43.141 [DEBUG] [Thread-139321] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:54:43.141 [DEBUG] [Thread-139321] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:54:43.141 [DEBUG] [Thread-139321] [transport.py] [_log()] client lang: <none>
2026-01-01T02:54:43.141 [DEBUG] [Thread-139321] [transport.py] [_log()] server lang: <none>
2026-01-01T02:54:43.142 [DEBUG] [Thread-139321] [transport.py] [_log()] kex follows: False
2026-01-01T02:54:43.142 [DEBUG] [Thread-139321] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:54:43.142 [DEBUG] [Thread-139321] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:54:43.142 [DEBUG] [Thread-139321] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:54:43.142 [DEBUG] [Thread-139321] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:54:43.142 [DEBUG] [Thread-139321] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:54:43.142 [DEBUG] [Thread-139321] [transport.py] [_log()] Compression: none
2026-01-01T02:54:43.142 [DEBUG] [Thread-139321] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:54:43.197 [DEBUG] [Thread-139321] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:54:43.198 [DEBUG] [Thread-139321] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:54:43.198 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T02:54:43.199 [DEBUG] [Thread-139321] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T02:54:43.199 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:54:43.253 [DEBUG] [Thread-139321] [transport.py] [_log()] userauth is OK
2026-01-01T02:54:43.254 [DEBUG] [Thread-139321] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:54:43.254 [DEBUG] [Thread-139321] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:54:43.254 [DEBUG] [Thread-139321] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T02:54:43.254 [DEBUG] [Thread-139321] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:54:43.274 [INFO] [Thread-139321] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:54:43.274 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T02:54:43.274 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:54:44.112 [DEBUG] [Thread-139321] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:54:44.113 [DEBUG] [Thread-139321] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:54:44.160 [DEBUG] [Thread-139321] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:54:44.160 [DEBUG] [Thread-139321] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:54:44.169 [DEBUG] [Thread-139321] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:54:44.177 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:54:44.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T02:54:44.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T02:54:44.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:54:44.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:54:44.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:54:44.202 [DEBUG] [Thread-139321] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:54:47.305 [DEBUG] [Thread-139323 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:55:02.361 [DEBUG] [Thread-139324 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:55:06.772 [DEBUG] [Thread-139325 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:55:08.149 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:55:08.150 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:55:14.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T02:55:14.210 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T02:55:14.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T02:55:14.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 2, 55, 3), 3.42, 79.77, 0.0, 9.95, 13.05, 0, 0, 0, 2, 0, 0),)
2026-01-01T02:55:14.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 02:55:03
2026-01-01T02:55:15.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T02:55:15.194 [DEBUG] [Thread-139326] [transport.py] [_log()] starting thread (client mode): 0xb957b0d0
2026-01-01T02:55:15.194 [DEBUG] [Thread-139326] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:55:15.215 [DEBUG] [Thread-139326] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T02:55:15.215 [INFO] [Thread-139326] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T02:55:15.218 [DEBUG] [Thread-139326] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:55:15.219 [DEBUG] [Thread-139326] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T02:55:15.219 [DEBUG] [Thread-139326] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:55:15.219 [DEBUG] [Thread-139326] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:55:15.219 [DEBUG] [Thread-139326] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:55:15.219 [DEBUG] [Thread-139326] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:55:15.219 [DEBUG] [Thread-139326] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:55:15.219 [DEBUG] [Thread-139326] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:55:15.219 [DEBUG] [Thread-139326] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:55:15.219 [DEBUG] [Thread-139326] [transport.py] [_log()] client lang: <none>
2026-01-01T02:55:15.219 [DEBUG] [Thread-139326] [transport.py] [_log()] server lang: <none>
2026-01-01T02:55:15.219 [DEBUG] [Thread-139326] [transport.py] [_log()] kex follows: False
2026-01-01T02:55:15.219 [DEBUG] [Thread-139326] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:55:15.219 [DEBUG] [Thread-139326] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:55:15.219 [DEBUG] [Thread-139326] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:55:15.219 [DEBUG] [Thread-139326] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:55:15.219 [DEBUG] [Thread-139326] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:55:15.219 [DEBUG] [Thread-139326] [transport.py] [_log()] Compression: none
2026-01-01T02:55:15.219 [DEBUG] [Thread-139326] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:55:15.235 [DEBUG] [Thread-139326] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:55:15.236 [DEBUG] [Thread-139326] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:55:15.237 [DEBUG] [Thread-139326] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T02:55:15.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T02:55:15.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:55:15.239 [DEBUG] [Thread-139326] [transport.py] [_log()] userauth is OK
2026-01-01T02:55:15.239 [DEBUG] [Thread-139326] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:55:15.239 [DEBUG] [Thread-139326] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:55:15.239 [DEBUG] [Thread-139326] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T02:55:15.239 [DEBUG] [Thread-139326] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:55:15.263 [INFO] [Thread-139326] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:55:15.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:55:15.828 [DEBUG] [Thread-139326] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:55:15.829 [DEBUG] [Thread-139326] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:55:15.829 [DEBUG] [Thread-139326] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T02:55:15.870 [DEBUG] [Thread-139326] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:55:15.871 [DEBUG] [Thread-139326] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:55:15.873 [DEBUG] [Thread-139326] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:55:15.885 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:55:15.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T02:55:15.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T02:55:15.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T02:55:15.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:55:15.891 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T02:55:15.891 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:55:15.891 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:55:15.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T02:55:15.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.037978 -999.00  +13.20   3.06     82  +10.30 1 1 1 2 1     0    0 2.83 -0.96 ZNESW 4.9 3.1 178.9 9.9 13.9 -21.1 13.8 -20.7 13.6 -19.2 13.8 -20.3
2026-01-01T02:55:15.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T02:55:15.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T02:55:15.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.037978
2026-01-01T02:55:15.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T02:55:15.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T02:55:15.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T02:55:15.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T02:55:15.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T02:55:15.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T02:55:03', tmtdew=3.42, humidity=79.77, cloud=0.0, wind=9.95, temperature=13.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T02:55:03', seeing=1.1, atlas_timestamp='2026-01-01T00:54:41.299', atlas_cloud=1, atlas_rain=1, zp_data=[0.021250000000000213, 0.09675000000000011, 0.06925000000000026, 0.0470000000000006, 0.03950000000000031, 0.07725000000000115, 0.11299999999999955, 0.0727499999999992, 0.07449999999999868, 0.16949999999999932, 0.028249999999999886, 0.08000000000000007, 0.09699999999999953, 0.08274999999999899, 0.06899999999999906, 0.07649999999999935, 0.12624999999999886, 0.21449999999999925, 0.11050000000000004, 0.1327499999999997, 0.09849999999999781, 0.10174999999999912, 0.0652500000000007, 0.12725000000000009, 0.16549999999999976, 0.14149999999999885, 0.12424999999999997, 0.14949999999999974, 0.16800000000000104, 0.19500000000000028, 0.15000000000000036, 0.307500000000001, 0.21774999999999878], zp_timestamp='2026-01-01T00:53:00')
2026-01-01T02:55:15.893 [DEBUG] [Thread-139326] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:55:15.977 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T02:55:15.989 [DEBUG] [Thread-139329] [transport.py] [_log()] starting thread (client mode): 0xb6b15e10
2026-01-01T02:55:15.989 [DEBUG] [Thread-139329] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:55:16.005 [DEBUG] [Thread-139329] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T02:55:16.005 [INFO] [Thread-139329] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T02:55:16.013 [DEBUG] [Thread-139329] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:55:16.013 [DEBUG] [Thread-139329] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T02:55:16.013 [DEBUG] [Thread-139329] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:55:16.013 [DEBUG] [Thread-139329] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:55:16.014 [DEBUG] [Thread-139329] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:55:16.014 [DEBUG] [Thread-139329] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:55:16.014 [DEBUG] [Thread-139329] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:55:16.014 [DEBUG] [Thread-139329] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:55:16.014 [DEBUG] [Thread-139329] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:55:16.014 [DEBUG] [Thread-139329] [transport.py] [_log()] client lang: <none>
2026-01-01T02:55:16.014 [DEBUG] [Thread-139329] [transport.py] [_log()] server lang: <none>
2026-01-01T02:55:16.014 [DEBUG] [Thread-139329] [transport.py] [_log()] kex follows: False
2026-01-01T02:55:16.014 [DEBUG] [Thread-139329] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:55:16.015 [DEBUG] [Thread-139329] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:55:16.015 [DEBUG] [Thread-139329] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:55:16.015 [DEBUG] [Thread-139329] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:55:16.015 [DEBUG] [Thread-139329] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:55:16.015 [DEBUG] [Thread-139329] [transport.py] [_log()] Compression: none
2026-01-01T02:55:16.015 [DEBUG] [Thread-139329] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:55:16.070 [DEBUG] [Thread-139329] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:55:16.070 [DEBUG] [Thread-139329] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:55:16.071 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T02:55:16.071 [DEBUG] [Thread-139329] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T02:55:16.072 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:55:16.126 [DEBUG] [Thread-139329] [transport.py] [_log()] userauth is OK
2026-01-01T02:55:16.126 [DEBUG] [Thread-139329] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:55:16.126 [DEBUG] [Thread-139329] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:55:16.126 [DEBUG] [Thread-139329] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T02:55:16.126 [DEBUG] [Thread-139329] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:55:16.145 [INFO] [Thread-139329] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:55:16.146 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T02:55:16.146 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:55:16.959 [DEBUG] [Thread-139329] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:55:16.960 [DEBUG] [Thread-139329] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:55:17.010 [DEBUG] [Thread-139329] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:55:17.010 [DEBUG] [Thread-139329] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:55:17.019 [DEBUG] [Thread-139329] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:55:17.031 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:55:17.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T02:55:17.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T02:55:17.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:55:17.050 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:55:17.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:55:17.058 [DEBUG] [Thread-139329] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:55:17.398 [DEBUG] [Thread-139331 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:55:32.451 [DEBUG] [Thread-139332 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:55:47.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T02:55:47.081 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T02:55:47.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T02:55:47.481 [DEBUG] [Thread-139333 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:55:47.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 2, 55, 35), 3.5, 79.34, 0.0, 11.73, 13.11, 0, 0, 0, 2, 0, 0),)
2026-01-01T02:55:47.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 02:55:35
2026-01-01T02:55:47.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T02:55:48.061 [DEBUG] [Thread-139334] [transport.py] [_log()] starting thread (client mode): 0xb6b2a260
2026-01-01T02:55:48.061 [DEBUG] [Thread-139334] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:55:48.080 [DEBUG] [Thread-139334] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T02:55:48.081 [INFO] [Thread-139334] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T02:55:48.084 [DEBUG] [Thread-139334] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:55:48.084 [DEBUG] [Thread-139334] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T02:55:48.084 [DEBUG] [Thread-139334] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:55:48.084 [DEBUG] [Thread-139334] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:55:48.084 [DEBUG] [Thread-139334] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:55:48.084 [DEBUG] [Thread-139334] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:55:48.084 [DEBUG] [Thread-139334] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:55:48.084 [DEBUG] [Thread-139334] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:55:48.084 [DEBUG] [Thread-139334] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:55:48.084 [DEBUG] [Thread-139334] [transport.py] [_log()] client lang: <none>
2026-01-01T02:55:48.084 [DEBUG] [Thread-139334] [transport.py] [_log()] server lang: <none>
2026-01-01T02:55:48.084 [DEBUG] [Thread-139334] [transport.py] [_log()] kex follows: False
2026-01-01T02:55:48.084 [DEBUG] [Thread-139334] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:55:48.084 [DEBUG] [Thread-139334] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:55:48.084 [DEBUG] [Thread-139334] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:55:48.084 [DEBUG] [Thread-139334] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:55:48.084 [DEBUG] [Thread-139334] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:55:48.084 [DEBUG] [Thread-139334] [transport.py] [_log()] Compression: none
2026-01-01T02:55:48.084 [DEBUG] [Thread-139334] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:55:48.103 [DEBUG] [Thread-139334] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:55:48.104 [DEBUG] [Thread-139334] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:55:48.104 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T02:55:48.105 [DEBUG] [Thread-139334] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T02:55:48.106 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:55:48.108 [DEBUG] [Thread-139334] [transport.py] [_log()] userauth is OK
2026-01-01T02:55:48.108 [DEBUG] [Thread-139334] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:55:48.108 [DEBUG] [Thread-139334] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:55:48.108 [DEBUG] [Thread-139334] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T02:55:48.108 [DEBUG] [Thread-139334] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:55:48.132 [INFO] [Thread-139334] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:55:48.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:55:48.742 [DEBUG] [Thread-139334] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:55:48.743 [DEBUG] [Thread-139334] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:55:48.743 [DEBUG] [Thread-139334] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T02:55:48.785 [DEBUG] [Thread-139334] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:55:48.785 [DEBUG] [Thread-139334] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:55:48.790 [DEBUG] [Thread-139334] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:55:48.801 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:55:48.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T02:55:48.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T02:55:48.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T02:55:48.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:55:48.818 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T02:55:48.819 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:55:48.819 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:55:48.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T02:55:48.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.037978 -999.00  +13.20   3.06     82  +10.30 1 1 1 2 1     0    0 2.83 -0.96 ZNESW 4.9 3.1 178.9 9.9 13.9 -21.1 13.8 -20.7 13.6 -19.2 13.8 -20.3
2026-01-01T02:55:48.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T02:55:48.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T02:55:48.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.037978
2026-01-01T02:55:48.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T02:55:48.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T02:55:48.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T02:55:48.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T02:55:48.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T02:55:48.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T02:55:35', tmtdew=3.5, humidity=79.34, cloud=0.0, wind=11.73, temperature=13.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T02:55:35', seeing=1.26, atlas_timestamp='2026-01-01T00:54:41.299', atlas_cloud=1, atlas_rain=1, zp_data=[0.021250000000000213, 0.09675000000000011, 0.06925000000000026, 0.0470000000000006, 0.03950000000000031, 0.07725000000000115, 0.11299999999999955, 0.0727499999999992, 0.07449999999999868, 0.16949999999999932, 0.028249999999999886, 0.08000000000000007, 0.09699999999999953, 0.08274999999999899, 0.06899999999999906, 0.07649999999999935, 0.12624999999999886, 0.21449999999999925, 0.11050000000000004, 0.1327499999999997, 0.09849999999999781, 0.10174999999999912, 0.0652500000000007, 0.12725000000000009, 0.16549999999999976, 0.14149999999999885, 0.12424999999999997, 0.14949999999999974, 0.16800000000000104, 0.19500000000000028, 0.15000000000000036, 0.307500000000001, 0.21774999999999878], zp_timestamp='2026-01-01T00:53:00')
2026-01-01T02:55:48.821 [DEBUG] [Thread-139334] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:55:48.905 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T02:55:48.918 [DEBUG] [Thread-139337] [transport.py] [_log()] starting thread (client mode): 0xb95b16c0
2026-01-01T02:55:48.918 [DEBUG] [Thread-139337] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:55:48.933 [DEBUG] [Thread-139337] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T02:55:48.933 [INFO] [Thread-139337] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T02:55:48.941 [DEBUG] [Thread-139337] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:55:48.941 [DEBUG] [Thread-139337] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T02:55:48.941 [DEBUG] [Thread-139337] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:55:48.941 [DEBUG] [Thread-139337] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:55:48.941 [DEBUG] [Thread-139337] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:55:48.941 [DEBUG] [Thread-139337] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:55:48.941 [DEBUG] [Thread-139337] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:55:48.941 [DEBUG] [Thread-139337] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:55:48.941 [DEBUG] [Thread-139337] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:55:48.941 [DEBUG] [Thread-139337] [transport.py] [_log()] client lang: <none>
2026-01-01T02:55:48.941 [DEBUG] [Thread-139337] [transport.py] [_log()] server lang: <none>
2026-01-01T02:55:48.942 [DEBUG] [Thread-139337] [transport.py] [_log()] kex follows: False
2026-01-01T02:55:48.942 [DEBUG] [Thread-139337] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:55:48.942 [DEBUG] [Thread-139337] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:55:48.942 [DEBUG] [Thread-139337] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:55:48.942 [DEBUG] [Thread-139337] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:55:48.942 [DEBUG] [Thread-139337] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:55:48.942 [DEBUG] [Thread-139337] [transport.py] [_log()] Compression: none
2026-01-01T02:55:48.942 [DEBUG] [Thread-139337] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:55:48.998 [DEBUG] [Thread-139337] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:55:48.999 [DEBUG] [Thread-139337] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:55:48.999 [DEBUG] [Thread-139337] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T02:55:49.000 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T02:55:49.000 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:55:49.053 [DEBUG] [Thread-139337] [transport.py] [_log()] userauth is OK
2026-01-01T02:55:49.054 [DEBUG] [Thread-139337] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:55:49.054 [DEBUG] [Thread-139337] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:55:49.054 [DEBUG] [Thread-139337] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T02:55:49.054 [DEBUG] [Thread-139337] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:55:49.081 [INFO] [Thread-139337] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:55:49.081 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T02:55:49.081 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:55:49.933 [DEBUG] [Thread-139337] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:55:49.934 [DEBUG] [Thread-139337] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:55:49.982 [DEBUG] [Thread-139337] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:55:49.982 [DEBUG] [Thread-139337] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:55:49.992 [DEBUG] [Thread-139337] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:55:50.001 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:55:50.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T02:55:50.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T02:55:50.019 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:55:50.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:55:50.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:55:50.028 [DEBUG] [Thread-139337] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:56:02.514 [DEBUG] [Thread-139339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:56:06.861 [DEBUG] [Thread-139340 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:56:08.357 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:56:08.358 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:56:17.562 [DEBUG] [Thread-139341 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:56:20.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T02:56:20.046 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T02:56:20.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T02:56:20.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 2, 56, 7), 3.5, 79.37, 0.0, 10.27, 13.1, 0, 0, 0, 2, 0, 0),)
2026-01-01T02:56:20.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 02:56:07
2026-01-01T02:56:20.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T02:56:21.031 [DEBUG] [Thread-139342] [transport.py] [_log()] starting thread (client mode): 0xb1747190
2026-01-01T02:56:21.031 [DEBUG] [Thread-139342] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:56:21.050 [DEBUG] [Thread-139342] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T02:56:21.050 [INFO] [Thread-139342] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T02:56:21.053 [DEBUG] [Thread-139342] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:56:21.053 [DEBUG] [Thread-139342] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T02:56:21.053 [DEBUG] [Thread-139342] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:56:21.054 [DEBUG] [Thread-139342] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:56:21.054 [DEBUG] [Thread-139342] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:56:21.054 [DEBUG] [Thread-139342] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:56:21.054 [DEBUG] [Thread-139342] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:56:21.054 [DEBUG] [Thread-139342] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:56:21.054 [DEBUG] [Thread-139342] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:56:21.054 [DEBUG] [Thread-139342] [transport.py] [_log()] client lang: <none>
2026-01-01T02:56:21.054 [DEBUG] [Thread-139342] [transport.py] [_log()] server lang: <none>
2026-01-01T02:56:21.054 [DEBUG] [Thread-139342] [transport.py] [_log()] kex follows: False
2026-01-01T02:56:21.054 [DEBUG] [Thread-139342] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:56:21.054 [DEBUG] [Thread-139342] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:56:21.054 [DEBUG] [Thread-139342] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:56:21.054 [DEBUG] [Thread-139342] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:56:21.054 [DEBUG] [Thread-139342] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:56:21.055 [DEBUG] [Thread-139342] [transport.py] [_log()] Compression: none
2026-01-01T02:56:21.055 [DEBUG] [Thread-139342] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:56:21.073 [DEBUG] [Thread-139342] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:56:21.074 [DEBUG] [Thread-139342] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:56:21.075 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T02:56:21.075 [DEBUG] [Thread-139342] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T02:56:21.076 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:56:21.077 [DEBUG] [Thread-139342] [transport.py] [_log()] userauth is OK
2026-01-01T02:56:21.077 [DEBUG] [Thread-139342] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:56:21.077 [DEBUG] [Thread-139342] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:56:21.077 [DEBUG] [Thread-139342] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T02:56:21.077 [DEBUG] [Thread-139342] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:56:21.095 [INFO] [Thread-139342] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:56:21.096 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:56:21.892 [DEBUG] [Thread-139342] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:56:21.892 [DEBUG] [Thread-139342] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:56:21.892 [DEBUG] [Thread-139342] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T02:56:21.933 [DEBUG] [Thread-139342] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:56:21.934 [DEBUG] [Thread-139342] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:56:21.937 [DEBUG] [Thread-139342] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:56:21.950 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:56:21.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T02:56:21.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T02:56:21.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T02:56:21.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:56:21.961 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T02:56:21.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:56:21.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:56:21.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T02:56:21.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.038673 -999.00  +13.20   7.39     82  +10.20 1 1 1 2 1     0    0 2.87 1.96 ZNESW 6.5 7.4 202.0 11.9 13.9 -21.1 13.8 -20.8 13.6 -19.1 13.8 -20.3
2026-01-01T02:56:21.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T02:56:21.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T02:56:21.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.038673
2026-01-01T02:56:21.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T02:56:21.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T02:56:21.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T02:56:21.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T02:56:21.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T02:56:21.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T02:56:07', tmtdew=3.5, humidity=79.37, cloud=0.0, wind=10.27, temperature=13.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T02:56:07', seeing=1.18, atlas_timestamp='2026-01-01T00:55:41.347', atlas_cloud=1, atlas_rain=1, zp_data=[0.021250000000000213, 0.09675000000000011, 0.06925000000000026, 0.0470000000000006, 0.03950000000000031, 0.07725000000000115, 0.11299999999999955, 0.0727499999999992, 0.07449999999999868, 0.16949999999999932, 0.028249999999999886, 0.08000000000000007, 0.09699999999999953, 0.08274999999999899, 0.06899999999999906, 0.07649999999999935, 0.12624999999999886, 0.21449999999999925, 0.11050000000000004, 0.1327499999999997, 0.09849999999999781, 0.10174999999999912, 0.0652500000000007, 0.12725000000000009, 0.16549999999999976, 0.14149999999999885, 0.12424999999999997, 0.14949999999999974, 0.16800000000000104, 0.19500000000000028, 0.15000000000000036, 0.307500000000001, 0.21774999999999878], zp_timestamp='2026-01-01T00:53:00')
2026-01-01T02:56:21.964 [DEBUG] [Thread-139342] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:56:22.048 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T02:56:22.059 [DEBUG] [Thread-139345] [transport.py] [_log()] starting thread (client mode): 0xb17471c0
2026-01-01T02:56:22.059 [DEBUG] [Thread-139345] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:56:22.075 [DEBUG] [Thread-139345] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T02:56:22.075 [INFO] [Thread-139345] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T02:56:22.082 [DEBUG] [Thread-139345] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:56:22.082 [DEBUG] [Thread-139345] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T02:56:22.082 [DEBUG] [Thread-139345] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:56:22.082 [DEBUG] [Thread-139345] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:56:22.082 [DEBUG] [Thread-139345] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:56:22.083 [DEBUG] [Thread-139345] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:56:22.083 [DEBUG] [Thread-139345] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:56:22.083 [DEBUG] [Thread-139345] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:56:22.083 [DEBUG] [Thread-139345] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:56:22.083 [DEBUG] [Thread-139345] [transport.py] [_log()] client lang: <none>
2026-01-01T02:56:22.083 [DEBUG] [Thread-139345] [transport.py] [_log()] server lang: <none>
2026-01-01T02:56:22.083 [DEBUG] [Thread-139345] [transport.py] [_log()] kex follows: False
2026-01-01T02:56:22.083 [DEBUG] [Thread-139345] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:56:22.083 [DEBUG] [Thread-139345] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:56:22.083 [DEBUG] [Thread-139345] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:56:22.083 [DEBUG] [Thread-139345] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:56:22.083 [DEBUG] [Thread-139345] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:56:22.083 [DEBUG] [Thread-139345] [transport.py] [_log()] Compression: none
2026-01-01T02:56:22.083 [DEBUG] [Thread-139345] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:56:22.143 [DEBUG] [Thread-139345] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:56:22.143 [DEBUG] [Thread-139345] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:56:22.144 [DEBUG] [Thread-139345] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T02:56:22.144 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T02:56:22.145 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:56:22.202 [DEBUG] [Thread-139345] [transport.py] [_log()] userauth is OK
2026-01-01T02:56:22.203 [DEBUG] [Thread-139345] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:56:22.203 [DEBUG] [Thread-139345] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:56:22.203 [DEBUG] [Thread-139345] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T02:56:22.203 [DEBUG] [Thread-139345] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:56:22.222 [INFO] [Thread-139345] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:56:22.222 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T02:56:22.223 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:56:23.118 [DEBUG] [Thread-139345] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:56:23.118 [DEBUG] [Thread-139345] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:56:23.166 [DEBUG] [Thread-139345] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:56:23.166 [DEBUG] [Thread-139345] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:56:23.176 [DEBUG] [Thread-139345] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:56:23.189 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:56:23.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')
2026-01-01T02:56:23.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T02:56:23.214 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:56:23.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:56:23.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:56:23.226 [DEBUG] [Thread-139345] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:56:32.598 [DEBUG] [Thread-139347 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:56:47.658 [DEBUG] [Thread-139348 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:56:53.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T02:56:53.245 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T02:56:53.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T02:56:53.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 2, 56, 39), 3.44, 79.41, 0.0, 10.3, 13.0, 0, 0, 0, 2, 0, 0),)
2026-01-01T02:56:53.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 02:56:39
2026-01-01T02:56:54.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T02:56:54.232 [DEBUG] [Thread-139349] [transport.py] [_log()] starting thread (client mode): 0xb6b29db0
2026-01-01T02:56:54.232 [DEBUG] [Thread-139349] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:56:54.252 [DEBUG] [Thread-139349] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T02:56:54.252 [INFO] [Thread-139349] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T02:56:54.255 [DEBUG] [Thread-139349] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:56:54.255 [DEBUG] [Thread-139349] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T02:56:54.255 [DEBUG] [Thread-139349] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:56:54.255 [DEBUG] [Thread-139349] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:56:54.255 [DEBUG] [Thread-139349] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:56:54.255 [DEBUG] [Thread-139349] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:56:54.256 [DEBUG] [Thread-139349] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:56:54.256 [DEBUG] [Thread-139349] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:56:54.256 [DEBUG] [Thread-139349] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:56:54.256 [DEBUG] [Thread-139349] [transport.py] [_log()] client lang: <none>
2026-01-01T02:56:54.256 [DEBUG] [Thread-139349] [transport.py] [_log()] server lang: <none>
2026-01-01T02:56:54.256 [DEBUG] [Thread-139349] [transport.py] [_log()] kex follows: False
2026-01-01T02:56:54.256 [DEBUG] [Thread-139349] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:56:54.256 [DEBUG] [Thread-139349] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:56:54.256 [DEBUG] [Thread-139349] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:56:54.256 [DEBUG] [Thread-139349] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:56:54.256 [DEBUG] [Thread-139349] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:56:54.256 [DEBUG] [Thread-139349] [transport.py] [_log()] Compression: none
2026-01-01T02:56:54.256 [DEBUG] [Thread-139349] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:56:54.272 [DEBUG] [Thread-139349] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:56:54.272 [DEBUG] [Thread-139349] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:56:54.272 [DEBUG] [Thread-139349] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T02:56:54.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T02:56:54.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:56:54.273 [DEBUG] [Thread-139349] [transport.py] [_log()] userauth is OK
2026-01-01T02:56:54.273 [DEBUG] [Thread-139349] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:56:54.273 [DEBUG] [Thread-139349] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:56:54.273 [DEBUG] [Thread-139349] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T02:56:54.273 [DEBUG] [Thread-139349] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:56:54.282 [INFO] [Thread-139349] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:56:54.282 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:56:54.906 [DEBUG] [Thread-139349] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:56:54.907 [DEBUG] [Thread-139349] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:56:54.907 [DEBUG] [Thread-139349] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T02:56:54.947 [DEBUG] [Thread-139349] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:56:54.948 [DEBUG] [Thread-139349] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:56:54.951 [DEBUG] [Thread-139349] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:56:54.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:56:54.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T02:56:54.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T02:56:54.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T02:56:54.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:56:54.978 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T02:56:54.979 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:56:54.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:56:54.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T02:56:54.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.039020 -999.00  +13.20   5.03     81  +10.20 1 1 1 2 1     0    0 2.94 3.20 ZNESW 3.8 5.0 210.5 8.1 13.9 -21.2 13.8 -20.8 13.6 -19.3 13.8 -20.0
2026-01-01T02:56:54.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T02:56:54.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T02:56:54.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.039020
2026-01-01T02:56:54.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T02:56:54.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T02:56:54.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T02:56:54.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T02:56:54.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T02:56:54.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T02:56:39', tmtdew=3.44, humidity=79.41, cloud=0.0, wind=10.3, temperature=13.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T02:56:39', seeing=0.99, atlas_timestamp='2026-01-01T00:56:11.328', atlas_cloud=1, atlas_rain=1, zp_data=[0.021250000000000213, 0.09675000000000011, 0.06925000000000026, 0.0470000000000006, 0.03950000000000031, 0.07725000000000115, 0.11299999999999955, 0.0727499999999992, 0.07449999999999868, 0.16949999999999932, 0.028249999999999886, 0.08000000000000007, 0.09699999999999953, 0.08274999999999899, 0.06899999999999906, 0.07649999999999935, 0.12624999999999886, 0.21449999999999925, 0.11050000000000004, 0.1327499999999997, 0.09849999999999781, 0.10174999999999912, 0.0652500000000007, 0.12725000000000009, 0.16549999999999976, 0.14149999999999885, 0.12424999999999997, 0.14949999999999974, 0.16800000000000104, 0.19500000000000028, 0.15000000000000036, 0.307500000000001, 0.21774999999999878], zp_timestamp='2026-01-01T00:53:00')
2026-01-01T02:56:54.981 [DEBUG] [Thread-139349] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:56:55.067 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T02:56:55.080 [DEBUG] [Thread-139352] [transport.py] [_log()] starting thread (client mode): 0xb9558850
2026-01-01T02:56:55.080 [DEBUG] [Thread-139352] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:56:55.095 [DEBUG] [Thread-139352] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T02:56:55.096 [INFO] [Thread-139352] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T02:56:55.103 [DEBUG] [Thread-139352] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:56:55.103 [DEBUG] [Thread-139352] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T02:56:55.103 [DEBUG] [Thread-139352] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:56:55.103 [DEBUG] [Thread-139352] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:56:55.103 [DEBUG] [Thread-139352] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:56:55.103 [DEBUG] [Thread-139352] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:56:55.103 [DEBUG] [Thread-139352] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:56:55.103 [DEBUG] [Thread-139352] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:56:55.103 [DEBUG] [Thread-139352] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:56:55.103 [DEBUG] [Thread-139352] [transport.py] [_log()] client lang: <none>
2026-01-01T02:56:55.103 [DEBUG] [Thread-139352] [transport.py] [_log()] server lang: <none>
2026-01-01T02:56:55.103 [DEBUG] [Thread-139352] [transport.py] [_log()] kex follows: False
2026-01-01T02:56:55.104 [DEBUG] [Thread-139352] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:56:55.104 [DEBUG] [Thread-139352] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:56:55.104 [DEBUG] [Thread-139352] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:56:55.104 [DEBUG] [Thread-139352] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:56:55.104 [DEBUG] [Thread-139352] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:56:55.104 [DEBUG] [Thread-139352] [transport.py] [_log()] Compression: none
2026-01-01T02:56:55.104 [DEBUG] [Thread-139352] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:56:55.161 [DEBUG] [Thread-139352] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:56:55.162 [DEBUG] [Thread-139352] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:56:55.162 [DEBUG] [Thread-139352] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T02:56:55.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T02:56:55.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:56:55.218 [DEBUG] [Thread-139352] [transport.py] [_log()] userauth is OK
2026-01-01T02:56:55.218 [DEBUG] [Thread-139352] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:56:55.219 [DEBUG] [Thread-139352] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:56:55.219 [DEBUG] [Thread-139352] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T02:56:55.219 [DEBUG] [Thread-139352] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:56:55.238 [INFO] [Thread-139352] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:56:55.238 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T02:56:55.239 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:56:56.048 [DEBUG] [Thread-139352] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:56:56.048 [DEBUG] [Thread-139352] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:56:56.096 [DEBUG] [Thread-139352] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:56:56.096 [DEBUG] [Thread-139352] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:56:56.105 [DEBUG] [Thread-139352] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:56:56.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:56:56.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T02:56:56.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T02:56:56.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:56:56.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:56:56.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:56:56.139 [DEBUG] [Thread-139352] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:57:02.690 [DEBUG] [Thread-139354 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:57:06.945 [DEBUG] [Thread-139355 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:57:08.558 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:57:08.559 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:57:17.739 [DEBUG] [Thread-139356 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:57:26.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T02:57:26.161 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T02:57:26.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T02:57:26.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 2, 57, 11), 3.42, 79.54, 0.0, 8.89, 13.03, 0, 0, 0, 2, 0, 0),)
2026-01-01T02:57:26.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 02:57:11
2026-01-01T02:57:27.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T02:57:27.170 [DEBUG] [Thread-139357] [transport.py] [_log()] starting thread (client mode): 0xb95b3af0
2026-01-01T02:57:27.170 [DEBUG] [Thread-139357] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:57:27.187 [DEBUG] [Thread-139357] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T02:57:27.187 [INFO] [Thread-139357] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T02:57:27.190 [DEBUG] [Thread-139357] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:57:27.190 [DEBUG] [Thread-139357] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T02:57:27.190 [DEBUG] [Thread-139357] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:57:27.190 [DEBUG] [Thread-139357] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:57:27.190 [DEBUG] [Thread-139357] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:57:27.190 [DEBUG] [Thread-139357] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:57:27.190 [DEBUG] [Thread-139357] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:57:27.190 [DEBUG] [Thread-139357] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:57:27.190 [DEBUG] [Thread-139357] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:57:27.190 [DEBUG] [Thread-139357] [transport.py] [_log()] client lang: <none>
2026-01-01T02:57:27.190 [DEBUG] [Thread-139357] [transport.py] [_log()] server lang: <none>
2026-01-01T02:57:27.190 [DEBUG] [Thread-139357] [transport.py] [_log()] kex follows: False
2026-01-01T02:57:27.191 [DEBUG] [Thread-139357] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:57:27.191 [DEBUG] [Thread-139357] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:57:27.191 [DEBUG] [Thread-139357] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:57:27.191 [DEBUG] [Thread-139357] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:57:27.191 [DEBUG] [Thread-139357] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:57:27.191 [DEBUG] [Thread-139357] [transport.py] [_log()] Compression: none
2026-01-01T02:57:27.191 [DEBUG] [Thread-139357] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:57:27.211 [DEBUG] [Thread-139357] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:57:27.212 [DEBUG] [Thread-139357] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:57:27.212 [DEBUG] [Thread-139357] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T02:57:27.213 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T02:57:27.213 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:57:27.214 [DEBUG] [Thread-139357] [transport.py] [_log()] userauth is OK
2026-01-01T02:57:27.214 [DEBUG] [Thread-139357] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:57:27.214 [DEBUG] [Thread-139357] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:57:27.214 [DEBUG] [Thread-139357] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T02:57:27.214 [DEBUG] [Thread-139357] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:57:27.237 [INFO] [Thread-139357] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:57:27.238 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:57:28.084 [DEBUG] [Thread-139357] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:57:28.084 [DEBUG] [Thread-139357] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:57:28.084 [DEBUG] [Thread-139357] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T02:57:28.126 [DEBUG] [Thread-139357] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:57:28.126 [DEBUG] [Thread-139357] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:57:28.129 [DEBUG] [Thread-139357] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:57:28.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:57:28.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T02:57:28.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T02:57:28.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T02:57:28.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:57:28.149 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T02:57:28.149 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:57:28.149 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:57:28.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T02:57:28.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.039367 -999.00  +13.20   6.44     81  +10.20 1 1 1 2 1     0    0 2.95 4.23 ZNESW 6.5 6.4 221.6 9.3 13.9 -21.2 13.8 -20.8 13.6 -19.2 13.8 -20.3
2026-01-01T02:57:28.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T02:57:28.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T02:57:28.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.039367
2026-01-01T02:57:28.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T02:57:28.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T02:57:28.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T02:57:28.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T02:57:28.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T02:57:28.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T02:57:11', tmtdew=3.42, humidity=79.54, cloud=0.0, wind=8.89, temperature=13.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T02:57:11', seeing=1.18, atlas_timestamp='2026-01-01T00:56:41.309', atlas_cloud=1, atlas_rain=1, zp_data=[0.021250000000000213, 0.09675000000000011, 0.06925000000000026, 0.0470000000000006, 0.03950000000000031, 0.07725000000000115, 0.11299999999999955, 0.0727499999999992, 0.07449999999999868, 0.16949999999999932, 0.028249999999999886, 0.08000000000000007, 0.09699999999999953, 0.08274999999999899, 0.06899999999999906, 0.07649999999999935, 0.12624999999999886, 0.21449999999999925, 0.11050000000000004, 0.1327499999999997, 0.09849999999999781, 0.10174999999999912, 0.0652500000000007, 0.12725000000000009, 0.16549999999999976, 0.14149999999999885, 0.12424999999999997, 0.14949999999999974, 0.16800000000000104, 0.19500000000000028, 0.15000000000000036, 0.307500000000001, 0.21774999999999878], zp_timestamp='2026-01-01T00:53:00')
2026-01-01T02:57:28.150 [DEBUG] [Thread-139357] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:57:28.223 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T02:57:28.234 [DEBUG] [Thread-139360] [transport.py] [_log()] starting thread (client mode): 0xb6b037c0
2026-01-01T02:57:28.234 [DEBUG] [Thread-139360] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:57:28.249 [DEBUG] [Thread-139360] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T02:57:28.249 [INFO] [Thread-139360] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T02:57:28.257 [DEBUG] [Thread-139360] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:57:28.257 [DEBUG] [Thread-139360] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T02:57:28.257 [DEBUG] [Thread-139360] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:57:28.257 [DEBUG] [Thread-139360] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:57:28.257 [DEBUG] [Thread-139360] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:57:28.257 [DEBUG] [Thread-139360] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:57:28.257 [DEBUG] [Thread-139360] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:57:28.257 [DEBUG] [Thread-139360] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:57:28.257 [DEBUG] [Thread-139360] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:57:28.257 [DEBUG] [Thread-139360] [transport.py] [_log()] client lang: <none>
2026-01-01T02:57:28.257 [DEBUG] [Thread-139360] [transport.py] [_log()] server lang: <none>
2026-01-01T02:57:28.257 [DEBUG] [Thread-139360] [transport.py] [_log()] kex follows: False
2026-01-01T02:57:28.257 [DEBUG] [Thread-139360] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:57:28.257 [DEBUG] [Thread-139360] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:57:28.257 [DEBUG] [Thread-139360] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:57:28.257 [DEBUG] [Thread-139360] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:57:28.257 [DEBUG] [Thread-139360] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:57:28.257 [DEBUG] [Thread-139360] [transport.py] [_log()] Compression: none
2026-01-01T02:57:28.257 [DEBUG] [Thread-139360] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:57:28.312 [DEBUG] [Thread-139360] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:57:28.312 [DEBUG] [Thread-139360] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:57:28.312 [DEBUG] [Thread-139360] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T02:57:28.313 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T02:57:28.313 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:57:28.369 [DEBUG] [Thread-139360] [transport.py] [_log()] userauth is OK
2026-01-01T02:57:28.369 [DEBUG] [Thread-139360] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:57:28.370 [DEBUG] [Thread-139360] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:57:28.370 [DEBUG] [Thread-139360] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T02:57:28.370 [DEBUG] [Thread-139360] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:57:28.384 [INFO] [Thread-139360] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:57:28.384 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T02:57:28.384 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:57:29.251 [DEBUG] [Thread-139360] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:57:29.251 [DEBUG] [Thread-139360] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:57:29.299 [DEBUG] [Thread-139360] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:57:29.299 [DEBUG] [Thread-139360] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:57:29.307 [DEBUG] [Thread-139360] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:57:29.315 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:57:29.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T02:57:29.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T02:57:29.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:57:29.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:57:29.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:57:29.339 [DEBUG] [Thread-139360] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:57:32.769 [DEBUG] [Thread-139362 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:57:47.810 [DEBUG] [Thread-139363 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:57:59.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T02:57:59.362 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T02:57:59.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T02:58:00.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 2, 57, 43), 3.47, 79.52, 0.0, 10.2, 13.03, 0, 0, 0, 2, 0, 0),)
2026-01-01T02:58:00.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 02:57:43
2026-01-01T02:58:00.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T02:58:00.339 [DEBUG] [Thread-139364] [transport.py] [_log()] starting thread (client mode): 0xb1747850
2026-01-01T02:58:00.339 [DEBUG] [Thread-139364] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:58:00.359 [DEBUG] [Thread-139364] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T02:58:00.359 [INFO] [Thread-139364] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T02:58:00.363 [DEBUG] [Thread-139364] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:58:00.363 [DEBUG] [Thread-139364] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T02:58:00.363 [DEBUG] [Thread-139364] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:58:00.363 [DEBUG] [Thread-139364] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:58:00.363 [DEBUG] [Thread-139364] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:58:00.363 [DEBUG] [Thread-139364] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:58:00.363 [DEBUG] [Thread-139364] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:58:00.363 [DEBUG] [Thread-139364] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:58:00.363 [DEBUG] [Thread-139364] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:58:00.363 [DEBUG] [Thread-139364] [transport.py] [_log()] client lang: <none>
2026-01-01T02:58:00.364 [DEBUG] [Thread-139364] [transport.py] [_log()] server lang: <none>
2026-01-01T02:58:00.364 [DEBUG] [Thread-139364] [transport.py] [_log()] kex follows: False
2026-01-01T02:58:00.364 [DEBUG] [Thread-139364] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:58:00.364 [DEBUG] [Thread-139364] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:58:00.364 [DEBUG] [Thread-139364] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:58:00.364 [DEBUG] [Thread-139364] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:58:00.364 [DEBUG] [Thread-139364] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:58:00.364 [DEBUG] [Thread-139364] [transport.py] [_log()] Compression: none
2026-01-01T02:58:00.364 [DEBUG] [Thread-139364] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:58:00.383 [DEBUG] [Thread-139364] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:58:00.384 [DEBUG] [Thread-139364] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:58:00.384 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T02:58:00.385 [DEBUG] [Thread-139364] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T02:58:00.386 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:58:00.425 [DEBUG] [Thread-139364] [transport.py] [_log()] userauth is OK
2026-01-01T02:58:00.425 [DEBUG] [Thread-139364] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:58:00.426 [DEBUG] [Thread-139364] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:58:00.426 [DEBUG] [Thread-139364] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T02:58:00.426 [DEBUG] [Thread-139364] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:58:00.446 [INFO] [Thread-139364] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:58:00.447 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:58:01.093 [DEBUG] [Thread-139364] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:58:01.093 [DEBUG] [Thread-139364] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:58:01.094 [DEBUG] [Thread-139364] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T02:58:01.134 [DEBUG] [Thread-139364] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:58:01.134 [DEBUG] [Thread-139364] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:58:01.138 [DEBUG] [Thread-139364] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:58:01.150 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:58:01.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T02:58:01.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T02:58:01.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T02:58:01.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:58:01.163 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T02:58:01.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:58:01.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:58:01.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T02:58:01.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.039714 -999.00  +13.20   5.80     81  +10.20 1 1 1 2 1     0    0 2.97 5.52 ZNESW 6.0 5.8 196.2 7.0 13.9 -21.1 13.8 -20.7 13.6 -19.2 13.8 -20.4
2026-01-01T02:58:01.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T02:58:01.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T02:58:01.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.039714
2026-01-01T02:58:01.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T02:58:01.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T02:58:01.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T02:58:01.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T02:58:01.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T02:58:01.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T02:57:43', tmtdew=3.47, humidity=79.52, cloud=0.0, wind=10.2, temperature=13.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T02:57:43', seeing=1.03, atlas_timestamp='2026-01-01T00:57:11.290', atlas_cloud=1, atlas_rain=1, zp_data=[0.01574999999999882, 0.06325000000000003, 0.054250000000001464, 0.026499999999998636, 0.053000000000000824, 0.07375000000000043, 0.07399999999999984, 0.09875000000000078, 0.08549999999999969, 0.14300000000000068, 0.01624999999999943, 0.0730000000000004, 0.09699999999999953, 0.10724999999999874, 0.09299999999999997, 0.05299999999999905, 0.1302500000000002, 0.18549999999999933, 0.09899999999999842, 0.10374999999999801, 0.11249999999999893, 0.07974999999999888, 0.08075000000000188, 0.13974999999999937, 0.17300000000000004, 0.15649999999999942, 0.13674999999999926, 0.1844999999999999, 0.18100000000000094, 0.1800000000000015, 0.1540000000000017, 0.25650000000000084, 0.20224999999999937], zp_timestamp='2026-01-01T00:56:00')
2026-01-01T02:58:01.166 [DEBUG] [Thread-139364] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:58:01.250 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T02:58:01.261 [DEBUG] [Thread-139367] [transport.py] [_log()] starting thread (client mode): 0xb95b3790
2026-01-01T02:58:01.262 [DEBUG] [Thread-139367] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:58:01.277 [DEBUG] [Thread-139367] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T02:58:01.277 [INFO] [Thread-139367] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T02:58:01.285 [DEBUG] [Thread-139367] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:58:01.285 [DEBUG] [Thread-139367] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T02:58:01.285 [DEBUG] [Thread-139367] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:58:01.285 [DEBUG] [Thread-139367] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:58:01.285 [DEBUG] [Thread-139367] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:58:01.286 [DEBUG] [Thread-139367] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:58:01.286 [DEBUG] [Thread-139367] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:58:01.286 [DEBUG] [Thread-139367] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:58:01.286 [DEBUG] [Thread-139367] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:58:01.286 [DEBUG] [Thread-139367] [transport.py] [_log()] client lang: <none>
2026-01-01T02:58:01.286 [DEBUG] [Thread-139367] [transport.py] [_log()] server lang: <none>
2026-01-01T02:58:01.286 [DEBUG] [Thread-139367] [transport.py] [_log()] kex follows: False
2026-01-01T02:58:01.286 [DEBUG] [Thread-139367] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:58:01.286 [DEBUG] [Thread-139367] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:58:01.286 [DEBUG] [Thread-139367] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:58:01.286 [DEBUG] [Thread-139367] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:58:01.286 [DEBUG] [Thread-139367] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:58:01.286 [DEBUG] [Thread-139367] [transport.py] [_log()] Compression: none
2026-01-01T02:58:01.286 [DEBUG] [Thread-139367] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:58:01.342 [DEBUG] [Thread-139367] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:58:01.342 [DEBUG] [Thread-139367] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:58:01.343 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T02:58:01.343 [DEBUG] [Thread-139367] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T02:58:01.344 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:58:01.398 [DEBUG] [Thread-139367] [transport.py] [_log()] userauth is OK
2026-01-01T02:58:01.398 [DEBUG] [Thread-139367] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:58:01.398 [DEBUG] [Thread-139367] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:58:01.398 [DEBUG] [Thread-139367] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T02:58:01.399 [DEBUG] [Thread-139367] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:58:01.417 [INFO] [Thread-139367] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:58:01.417 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T02:58:01.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:58:02.276 [DEBUG] [Thread-139367] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:58:02.276 [DEBUG] [Thread-139367] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:58:02.324 [DEBUG] [Thread-139367] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:58:02.324 [DEBUG] [Thread-139367] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:58:02.333 [DEBUG] [Thread-139367] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:58:02.343 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:58:02.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T02:58:02.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T02:58:02.360 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:58:02.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:58:02.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:58:02.369 [DEBUG] [Thread-139367] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:58:02.845 [DEBUG] [Thread-139369 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:58:07.015 [DEBUG] [Thread-139370 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:58:08.766 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:58:08.767 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:58:17.902 [DEBUG] [Thread-139371 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:58:32.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T02:58:32.392 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T02:58:32.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T02:58:32.934 [DEBUG] [Thread-139372 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:58:33.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 2, 58, 15), 3.47, 79.52, 0.0, 10.3, 13.06, 0, 0, 0, 2, 0, 0),)
2026-01-01T02:58:33.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 02:58:15
2026-01-01T02:58:33.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T02:58:33.377 [DEBUG] [Thread-139373] [transport.py] [_log()] starting thread (client mode): 0xb95b3010
2026-01-01T02:58:33.377 [DEBUG] [Thread-139373] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:58:33.398 [DEBUG] [Thread-139373] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T02:58:33.399 [INFO] [Thread-139373] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T02:58:33.402 [DEBUG] [Thread-139373] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:58:33.402 [DEBUG] [Thread-139373] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T02:58:33.402 [DEBUG] [Thread-139373] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:58:33.402 [DEBUG] [Thread-139373] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:58:33.402 [DEBUG] [Thread-139373] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:58:33.402 [DEBUG] [Thread-139373] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:58:33.402 [DEBUG] [Thread-139373] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:58:33.402 [DEBUG] [Thread-139373] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:58:33.402 [DEBUG] [Thread-139373] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:58:33.402 [DEBUG] [Thread-139373] [transport.py] [_log()] client lang: <none>
2026-01-01T02:58:33.402 [DEBUG] [Thread-139373] [transport.py] [_log()] server lang: <none>
2026-01-01T02:58:33.402 [DEBUG] [Thread-139373] [transport.py] [_log()] kex follows: False
2026-01-01T02:58:33.403 [DEBUG] [Thread-139373] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:58:33.403 [DEBUG] [Thread-139373] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:58:33.403 [DEBUG] [Thread-139373] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:58:33.403 [DEBUG] [Thread-139373] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:58:33.403 [DEBUG] [Thread-139373] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:58:33.403 [DEBUG] [Thread-139373] [transport.py] [_log()] Compression: none
2026-01-01T02:58:33.403 [DEBUG] [Thread-139373] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:58:33.419 [DEBUG] [Thread-139373] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:58:33.419 [DEBUG] [Thread-139373] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:58:33.420 [DEBUG] [Thread-139373] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T02:58:33.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T02:58:33.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:58:33.420 [DEBUG] [Thread-139373] [transport.py] [_log()] userauth is OK
2026-01-01T02:58:33.420 [DEBUG] [Thread-139373] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:58:33.420 [DEBUG] [Thread-139373] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:58:33.421 [DEBUG] [Thread-139373] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T02:58:33.421 [DEBUG] [Thread-139373] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:58:33.437 [INFO] [Thread-139373] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:58:33.438 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:58:34.106 [DEBUG] [Thread-139373] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:58:34.106 [DEBUG] [Thread-139373] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:58:34.107 [DEBUG] [Thread-139373] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T02:58:34.147 [DEBUG] [Thread-139373] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:58:34.147 [DEBUG] [Thread-139373] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:58:34.151 [DEBUG] [Thread-139373] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:58:34.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:58:34.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T02:58:34.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T02:58:34.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T02:58:34.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:58:34.173 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T02:58:34.173 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:58:34.173 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:58:34.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T02:58:34.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.040061 -999.00  +13.20   8.12     82  +10.20 1 1 1 2 1     0    0 3.04 6.82 ZNESW 7.1 8.1 218.9 10.3 13.9 -21.1 13.8 -21.0 13.5 -19.3 13.8 -20.2
2026-01-01T02:58:34.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T02:58:34.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T02:58:34.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.040061
2026-01-01T02:58:34.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T02:58:34.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T02:58:34.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T02:58:34.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T02:58:34.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T02:58:34.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T02:58:15', tmtdew=3.47, humidity=79.52, cloud=0.0, wind=10.3, temperature=13.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T02:58:15', seeing=1.03, atlas_timestamp='2026-01-01T00:57:41.270', atlas_cloud=1, atlas_rain=1, zp_data=[0.01574999999999882, 0.06325000000000003, 0.054250000000001464, 0.026499999999998636, 0.053000000000000824, 0.07375000000000043, 0.07399999999999984, 0.09875000000000078, 0.08549999999999969, 0.14300000000000068, 0.01624999999999943, 0.0730000000000004, 0.09699999999999953, 0.10724999999999874, 0.09299999999999997, 0.05299999999999905, 0.1302500000000002, 0.18549999999999933, 0.09899999999999842, 0.10374999999999801, 0.11249999999999893, 0.07974999999999888, 0.08075000000000188, 0.13974999999999937, 0.17300000000000004, 0.15649999999999942, 0.13674999999999926, 0.1844999999999999, 0.18100000000000094, 0.1800000000000015, 0.1540000000000017, 0.25650000000000084, 0.20224999999999937], zp_timestamp='2026-01-01T00:56:00')
2026-01-01T02:58:34.176 [DEBUG] [Thread-139373] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:58:34.254 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T02:58:34.266 [DEBUG] [Thread-139376] [transport.py] [_log()] starting thread (client mode): 0xb95b1c00
2026-01-01T02:58:34.266 [DEBUG] [Thread-139376] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:58:34.281 [DEBUG] [Thread-139376] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T02:58:34.282 [INFO] [Thread-139376] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T02:58:34.289 [DEBUG] [Thread-139376] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:58:34.290 [DEBUG] [Thread-139376] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T02:58:34.290 [DEBUG] [Thread-139376] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:58:34.290 [DEBUG] [Thread-139376] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:58:34.290 [DEBUG] [Thread-139376] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:58:34.290 [DEBUG] [Thread-139376] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:58:34.290 [DEBUG] [Thread-139376] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:58:34.290 [DEBUG] [Thread-139376] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:58:34.290 [DEBUG] [Thread-139376] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:58:34.290 [DEBUG] [Thread-139376] [transport.py] [_log()] client lang: <none>
2026-01-01T02:58:34.290 [DEBUG] [Thread-139376] [transport.py] [_log()] server lang: <none>
2026-01-01T02:58:34.290 [DEBUG] [Thread-139376] [transport.py] [_log()] kex follows: False
2026-01-01T02:58:34.290 [DEBUG] [Thread-139376] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:58:34.290 [DEBUG] [Thread-139376] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:58:34.290 [DEBUG] [Thread-139376] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:58:34.290 [DEBUG] [Thread-139376] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:58:34.291 [DEBUG] [Thread-139376] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:58:34.291 [DEBUG] [Thread-139376] [transport.py] [_log()] Compression: none
2026-01-01T02:58:34.291 [DEBUG] [Thread-139376] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:58:34.354 [DEBUG] [Thread-139376] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:58:34.355 [DEBUG] [Thread-139376] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:58:34.355 [DEBUG] [Thread-139376] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T02:58:34.355 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T02:58:34.356 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:58:34.416 [DEBUG] [Thread-139376] [transport.py] [_log()] userauth is OK
2026-01-01T02:58:34.417 [DEBUG] [Thread-139376] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:58:34.417 [DEBUG] [Thread-139376] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:58:34.417 [DEBUG] [Thread-139376] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T02:58:34.417 [DEBUG] [Thread-139376] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:58:34.436 [INFO] [Thread-139376] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:58:34.437 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T02:58:34.438 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:58:35.330 [DEBUG] [Thread-139376] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:58:35.330 [DEBUG] [Thread-139376] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:58:35.378 [DEBUG] [Thread-139376] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:58:35.378 [DEBUG] [Thread-139376] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:58:35.388 [DEBUG] [Thread-139376] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:58:35.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:58:35.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T02:58:35.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T02:58:35.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:58:35.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:58:35.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:58:35.425 [DEBUG] [Thread-139376] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:58:47.961 [DEBUG] [Thread-139378 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:59:02.996 [DEBUG] [Thread-139379 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:59:05.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T02:59:05.447 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T02:59:05.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T02:59:06.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 2, 58, 47), 3.45, 79.61, 0.0, 11.68, 13.06, 0, 0, 0, 2, 0, 0),)
2026-01-01T02:59:06.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 02:58:47
2026-01-01T02:59:06.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T02:59:06.428 [DEBUG] [Thread-139380] [transport.py] [_log()] starting thread (client mode): 0xb95b1870
2026-01-01T02:59:06.428 [DEBUG] [Thread-139380] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:59:06.447 [DEBUG] [Thread-139380] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T02:59:06.448 [INFO] [Thread-139380] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T02:59:06.451 [DEBUG] [Thread-139380] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:59:06.451 [DEBUG] [Thread-139380] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T02:59:06.451 [DEBUG] [Thread-139380] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:59:06.451 [DEBUG] [Thread-139380] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:59:06.451 [DEBUG] [Thread-139380] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:59:06.451 [DEBUG] [Thread-139380] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:59:06.451 [DEBUG] [Thread-139380] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:59:06.451 [DEBUG] [Thread-139380] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:59:06.451 [DEBUG] [Thread-139380] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:59:06.451 [DEBUG] [Thread-139380] [transport.py] [_log()] client lang: <none>
2026-01-01T02:59:06.451 [DEBUG] [Thread-139380] [transport.py] [_log()] server lang: <none>
2026-01-01T02:59:06.452 [DEBUG] [Thread-139380] [transport.py] [_log()] kex follows: False
2026-01-01T02:59:06.452 [DEBUG] [Thread-139380] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:59:06.452 [DEBUG] [Thread-139380] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:59:06.452 [DEBUG] [Thread-139380] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:59:06.452 [DEBUG] [Thread-139380] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:59:06.452 [DEBUG] [Thread-139380] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:59:06.452 [DEBUG] [Thread-139380] [transport.py] [_log()] Compression: none
2026-01-01T02:59:06.452 [DEBUG] [Thread-139380] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:59:06.469 [DEBUG] [Thread-139380] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:59:06.470 [DEBUG] [Thread-139380] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:59:06.471 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T02:59:06.471 [DEBUG] [Thread-139380] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T02:59:06.472 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:59:06.473 [DEBUG] [Thread-139380] [transport.py] [_log()] userauth is OK
2026-01-01T02:59:06.474 [DEBUG] [Thread-139380] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:59:06.474 [DEBUG] [Thread-139380] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:59:06.474 [DEBUG] [Thread-139380] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T02:59:06.474 [DEBUG] [Thread-139380] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:59:06.498 [INFO] [Thread-139380] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:59:06.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:59:07.085 [DEBUG] [Thread-139382 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:59:07.119 [DEBUG] [Thread-139380] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:59:07.119 [DEBUG] [Thread-139380] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:59:07.119 [DEBUG] [Thread-139380] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T02:59:07.160 [DEBUG] [Thread-139380] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:59:07.160 [DEBUG] [Thread-139380] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:59:07.163 [DEBUG] [Thread-139380] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:59:07.175 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:59:07.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T02:59:07.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T02:59:07.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T02:59:07.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:59:07.185 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T02:59:07.185 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:59:07.185 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:59:07.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T02:59:07.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.040756 -999.00  +13.10   4.02     83  +10.30 1 1 1 2 1     0    0 3.14 9.28 ZNESW 5.6 4.0 234.2 12.4 13.8 -21.2 13.8 -21.1 13.5 -19.3 13.8 -20.3
2026-01-01T02:59:07.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T02:59:07.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T02:59:07.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.040756
2026-01-01T02:59:07.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T02:59:07.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T02:59:07.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T02:59:07.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T02:59:07.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T02:59:07.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T02:58:47', tmtdew=3.45, humidity=79.61, cloud=0.0, wind=11.68, temperature=13.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T02:58:47', seeing=1.03, atlas_timestamp='2026-01-01T00:58:41.318', atlas_cloud=1, atlas_rain=1, zp_data=[0.01574999999999882, 0.06325000000000003, 0.054250000000001464, 0.026499999999998636, 0.053000000000000824, 0.07375000000000043, 0.07399999999999984, 0.09875000000000078, 0.08549999999999969, 0.14300000000000068, 0.01624999999999943, 0.0730000000000004, 0.09699999999999953, 0.10724999999999874, 0.09299999999999997, 0.05299999999999905, 0.1302500000000002, 0.18549999999999933, 0.09899999999999842, 0.10374999999999801, 0.11249999999999893, 0.07974999999999888, 0.08075000000000188, 0.13974999999999937, 0.17300000000000004, 0.15649999999999942, 0.13674999999999926, 0.1844999999999999, 0.18100000000000094, 0.1800000000000015, 0.1540000000000017, 0.25650000000000084, 0.20224999999999937], zp_timestamp='2026-01-01T00:56:00')
2026-01-01T02:59:07.188 [DEBUG] [Thread-139380] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:59:07.262 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T02:59:07.275 [DEBUG] [Thread-139384] [transport.py] [_log()] starting thread (client mode): 0xb1747850
2026-01-01T02:59:07.275 [DEBUG] [Thread-139384] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:59:07.290 [DEBUG] [Thread-139384] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T02:59:07.290 [INFO] [Thread-139384] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T02:59:07.298 [DEBUG] [Thread-139384] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:59:07.298 [DEBUG] [Thread-139384] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T02:59:07.298 [DEBUG] [Thread-139384] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:59:07.298 [DEBUG] [Thread-139384] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:59:07.298 [DEBUG] [Thread-139384] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:59:07.298 [DEBUG] [Thread-139384] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:59:07.298 [DEBUG] [Thread-139384] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:59:07.298 [DEBUG] [Thread-139384] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:59:07.298 [DEBUG] [Thread-139384] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:59:07.299 [DEBUG] [Thread-139384] [transport.py] [_log()] client lang: <none>
2026-01-01T02:59:07.299 [DEBUG] [Thread-139384] [transport.py] [_log()] server lang: <none>
2026-01-01T02:59:07.299 [DEBUG] [Thread-139384] [transport.py] [_log()] kex follows: False
2026-01-01T02:59:07.299 [DEBUG] [Thread-139384] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:59:07.299 [DEBUG] [Thread-139384] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:59:07.299 [DEBUG] [Thread-139384] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:59:07.299 [DEBUG] [Thread-139384] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:59:07.299 [DEBUG] [Thread-139384] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:59:07.299 [DEBUG] [Thread-139384] [transport.py] [_log()] Compression: none
2026-01-01T02:59:07.299 [DEBUG] [Thread-139384] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:59:07.358 [DEBUG] [Thread-139384] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:59:07.358 [DEBUG] [Thread-139384] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:59:07.359 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T02:59:07.359 [DEBUG] [Thread-139384] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T02:59:07.360 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:59:07.414 [DEBUG] [Thread-139384] [transport.py] [_log()] userauth is OK
2026-01-01T02:59:07.414 [DEBUG] [Thread-139384] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:59:07.415 [DEBUG] [Thread-139384] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:59:07.415 [DEBUG] [Thread-139384] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T02:59:07.415 [DEBUG] [Thread-139384] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:59:07.440 [INFO] [Thread-139384] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:59:07.441 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T02:59:07.442 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:59:08.301 [DEBUG] [Thread-139384] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:59:08.302 [DEBUG] [Thread-139384] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:59:08.350 [DEBUG] [Thread-139384] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:59:08.350 [DEBUG] [Thread-139384] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:59:08.359 [DEBUG] [Thread-139384] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:59:08.369 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:59:08.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T02:59:08.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T02:59:08.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:59:08.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:59:08.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:59:08.396 [DEBUG] [Thread-139384] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:59:08.968 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:59:08.969 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:59:18.031 [DEBUG] [Thread-139386 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:59:33.077 [DEBUG] [Thread-139387 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T02:59:38.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T02:59:38.419 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T02:59:38.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T02:59:39.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 2, 59, 19), 3.45, 79.59, 0.0, 11.98, 13.05, 0, 0, 0, 2, 0, 0),)
2026-01-01T02:59:39.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 02:59:19
2026-01-01T02:59:39.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T02:59:39.388 [DEBUG] [Thread-139388] [transport.py] [_log()] starting thread (client mode): 0xb6b01cf0
2026-01-01T02:59:39.388 [DEBUG] [Thread-139388] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:59:39.409 [DEBUG] [Thread-139388] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T02:59:39.409 [INFO] [Thread-139388] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T02:59:39.412 [DEBUG] [Thread-139388] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:59:39.412 [DEBUG] [Thread-139388] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T02:59:39.412 [DEBUG] [Thread-139388] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:59:39.412 [DEBUG] [Thread-139388] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:59:39.412 [DEBUG] [Thread-139388] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:59:39.412 [DEBUG] [Thread-139388] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:59:39.412 [DEBUG] [Thread-139388] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:59:39.412 [DEBUG] [Thread-139388] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:59:39.412 [DEBUG] [Thread-139388] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:59:39.412 [DEBUG] [Thread-139388] [transport.py] [_log()] client lang: <none>
2026-01-01T02:59:39.412 [DEBUG] [Thread-139388] [transport.py] [_log()] server lang: <none>
2026-01-01T02:59:39.412 [DEBUG] [Thread-139388] [transport.py] [_log()] kex follows: False
2026-01-01T02:59:39.413 [DEBUG] [Thread-139388] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:59:39.413 [DEBUG] [Thread-139388] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:59:39.413 [DEBUG] [Thread-139388] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:59:39.413 [DEBUG] [Thread-139388] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:59:39.413 [DEBUG] [Thread-139388] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:59:39.413 [DEBUG] [Thread-139388] [transport.py] [_log()] Compression: none
2026-01-01T02:59:39.413 [DEBUG] [Thread-139388] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:59:39.430 [DEBUG] [Thread-139388] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:59:39.430 [DEBUG] [Thread-139388] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:59:39.431 [DEBUG] [Thread-139388] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T02:59:39.431 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T02:59:39.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:59:39.433 [DEBUG] [Thread-139388] [transport.py] [_log()] userauth is OK
2026-01-01T02:59:39.433 [DEBUG] [Thread-139388] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:59:39.433 [DEBUG] [Thread-139388] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:59:39.433 [DEBUG] [Thread-139388] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T02:59:39.433 [DEBUG] [Thread-139388] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:59:39.459 [INFO] [Thread-139388] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:59:39.460 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:59:40.078 [DEBUG] [Thread-139388] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:59:40.079 [DEBUG] [Thread-139388] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:59:40.079 [DEBUG] [Thread-139388] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T02:59:40.120 [DEBUG] [Thread-139388] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:59:40.120 [DEBUG] [Thread-139388] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:59:40.123 [DEBUG] [Thread-139388] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:59:40.137 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:59:40.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T02:59:40.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T02:59:40.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T02:59:40.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:59:40.149 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T02:59:40.149 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:59:40.150 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:59:40.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T02:59:40.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.041103 -999.00  +13.10   8.73     83  +10.30 1 1 1 2 1     0    0 3.13 9.59 ZNESW 6.9 8.7 210.2 10.2 13.9 -21.2 13.7 -20.9 13.5 -19.2 13.8 -20.4
2026-01-01T02:59:40.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T02:59:40.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T02:59:40.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.041103
2026-01-01T02:59:40.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T02:59:40.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T02:59:40.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T02:59:40.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T02:59:40.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T02:59:40.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T02:59:19', tmtdew=3.45, humidity=79.59, cloud=0.0, wind=11.98, temperature=13.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T02:59:20', seeing=1.12, atlas_timestamp='2026-01-01T00:59:11.299', atlas_cloud=1, atlas_rain=1, zp_data=[0.01574999999999882, 0.06325000000000003, 0.054250000000001464, 0.026499999999998636, 0.053000000000000824, 0.07375000000000043, 0.07399999999999984, 0.09875000000000078, 0.08549999999999969, 0.14300000000000068, 0.01624999999999943, 0.0730000000000004, 0.09699999999999953, 0.10724999999999874, 0.09299999999999997, 0.05299999999999905, 0.1302500000000002, 0.18549999999999933, 0.09899999999999842, 0.10374999999999801, 0.11249999999999893, 0.07974999999999888, 0.08075000000000188, 0.13974999999999937, 0.17300000000000004, 0.15649999999999942, 0.13674999999999926, 0.1844999999999999, 0.18100000000000094, 0.1800000000000015, 0.1540000000000017, 0.25650000000000084, 0.20224999999999937], zp_timestamp='2026-01-01T00:56:00')
2026-01-01T02:59:40.152 [DEBUG] [Thread-139388] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:59:40.228 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T02:59:40.239 [DEBUG] [Thread-139391] [transport.py] [_log()] starting thread (client mode): 0xb9544220
2026-01-01T02:59:40.240 [DEBUG] [Thread-139391] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T02:59:40.257 [DEBUG] [Thread-139391] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T02:59:40.257 [INFO] [Thread-139391] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T02:59:40.264 [DEBUG] [Thread-139391] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T02:59:40.265 [DEBUG] [Thread-139391] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T02:59:40.265 [DEBUG] [Thread-139391] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T02:59:40.265 [DEBUG] [Thread-139391] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:59:40.265 [DEBUG] [Thread-139391] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T02:59:40.265 [DEBUG] [Thread-139391] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:59:40.265 [DEBUG] [Thread-139391] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T02:59:40.265 [DEBUG] [Thread-139391] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T02:59:40.265 [DEBUG] [Thread-139391] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T02:59:40.266 [DEBUG] [Thread-139391] [transport.py] [_log()] client lang: <none>
2026-01-01T02:59:40.266 [DEBUG] [Thread-139391] [transport.py] [_log()] server lang: <none>
2026-01-01T02:59:40.266 [DEBUG] [Thread-139391] [transport.py] [_log()] kex follows: False
2026-01-01T02:59:40.266 [DEBUG] [Thread-139391] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T02:59:40.266 [DEBUG] [Thread-139391] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T02:59:40.266 [DEBUG] [Thread-139391] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T02:59:40.266 [DEBUG] [Thread-139391] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T02:59:40.266 [DEBUG] [Thread-139391] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T02:59:40.267 [DEBUG] [Thread-139391] [transport.py] [_log()] Compression: none
2026-01-01T02:59:40.267 [DEBUG] [Thread-139391] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T02:59:40.322 [DEBUG] [Thread-139391] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T02:59:40.323 [DEBUG] [Thread-139391] [transport.py] [_log()] Switch to new keys ...
2026-01-01T02:59:40.324 [DEBUG] [Thread-139391] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T02:59:40.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T02:59:40.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T02:59:40.378 [DEBUG] [Thread-139391] [transport.py] [_log()] userauth is OK
2026-01-01T02:59:40.378 [DEBUG] [Thread-139391] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T02:59:40.378 [DEBUG] [Thread-139391] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T02:59:40.379 [DEBUG] [Thread-139391] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T02:59:40.379 [DEBUG] [Thread-139391] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T02:59:40.399 [INFO] [Thread-139391] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T02:59:40.400 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T02:59:40.400 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T02:59:41.247 [DEBUG] [Thread-139391] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T02:59:41.247 [DEBUG] [Thread-139391] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T02:59:41.295 [DEBUG] [Thread-139391] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T02:59:41.295 [DEBUG] [Thread-139391] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T02:59:41.305 [DEBUG] [Thread-139391] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T02:59:41.314 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T02:59:41.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T02:59:41.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T02:59:41.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T02:59:41.332 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T02:59:41.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T02:59:41.341 [DEBUG] [Thread-139391] [transport.py] [_log()] EOF in transport thread
2026-01-01T02:59:48.114 [DEBUG] [Thread-139393 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:00:03.161 [DEBUG] [Thread-139394 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:00:07.138 [DEBUG] [Thread-139395 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:00:09.173 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:00:09.174 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:00:11.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T03:00:11.338 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T03:00:11.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T03:00:12.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 2, 59, 52), 3.39, 79.66, 0.0, 11.19, 12.95, 0, 0, 0, 2, 0, 0),)
2026-01-01T03:00:12.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 02:59:52
2026-01-01T03:00:12.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T03:00:12.307 [DEBUG] [Thread-139396] [transport.py] [_log()] starting thread (client mode): 0xb95b27a0
2026-01-01T03:00:12.307 [DEBUG] [Thread-139396] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T03:00:12.327 [DEBUG] [Thread-139396] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T03:00:12.327 [INFO] [Thread-139396] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T03:00:12.330 [DEBUG] [Thread-139396] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T03:00:12.330 [DEBUG] [Thread-139396] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T03:00:12.330 [DEBUG] [Thread-139396] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T03:00:12.330 [DEBUG] [Thread-139396] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:00:12.330 [DEBUG] [Thread-139396] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:00:12.330 [DEBUG] [Thread-139396] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:00:12.330 [DEBUG] [Thread-139396] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:00:12.330 [DEBUG] [Thread-139396] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T03:00:12.330 [DEBUG] [Thread-139396] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T03:00:12.330 [DEBUG] [Thread-139396] [transport.py] [_log()] client lang: <none>
2026-01-01T03:00:12.330 [DEBUG] [Thread-139396] [transport.py] [_log()] server lang: <none>
2026-01-01T03:00:12.330 [DEBUG] [Thread-139396] [transport.py] [_log()] kex follows: False
2026-01-01T03:00:12.330 [DEBUG] [Thread-139396] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T03:00:12.330 [DEBUG] [Thread-139396] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T03:00:12.330 [DEBUG] [Thread-139396] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T03:00:12.330 [DEBUG] [Thread-139396] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T03:00:12.330 [DEBUG] [Thread-139396] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T03:00:12.330 [DEBUG] [Thread-139396] [transport.py] [_log()] Compression: none
2026-01-01T03:00:12.330 [DEBUG] [Thread-139396] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T03:00:12.345 [DEBUG] [Thread-139396] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T03:00:12.346 [DEBUG] [Thread-139396] [transport.py] [_log()] Switch to new keys ...
2026-01-01T03:00:12.346 [DEBUG] [Thread-139396] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T03:00:12.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T03:00:12.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T03:00:12.348 [DEBUG] [Thread-139396] [transport.py] [_log()] userauth is OK
2026-01-01T03:00:12.348 [DEBUG] [Thread-139396] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T03:00:12.348 [DEBUG] [Thread-139396] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T03:00:12.348 [DEBUG] [Thread-139396] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T03:00:12.349 [DEBUG] [Thread-139396] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T03:00:12.372 [INFO] [Thread-139396] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T03:00:12.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T03:00:17.517 [DEBUG] [Thread-139396] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T03:00:17.518 [DEBUG] [Thread-139396] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T03:00:17.518 [DEBUG] [Thread-139396] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T03:00:17.559 [DEBUG] [Thread-139396] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T03:00:17.559 [DEBUG] [Thread-139396] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T03:00:17.562 [DEBUG] [Thread-139396] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T03:00:17.623 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T03:00:17.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T03:00:17.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T03:00:17.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T03:00:17.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T03:00:17.659 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T03:00:17.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T03:00:17.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T03:00:17.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T03:00:17.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.041450 -999.00  +13.10   4.46     83  +10.30 1 1 1 2 1     0    0 3.11 9.93 ZNESW 6.8 4.5 210.2 9.8 13.9 -21.2 13.7 -20.8 13.5 -19.3 13.8 -20.3
2026-01-01T03:00:17.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T03:00:17.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T03:00:17.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.041450
2026-01-01T03:00:17.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T03:00:17.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T03:00:17.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T03:00:17.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T03:00:17.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T03:00:17.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T02:59:52', tmtdew=3.39, humidity=79.66, cloud=0.0, wind=11.19, temperature=12.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T02:59:52', seeing=1.16, atlas_timestamp='2026-01-01T00:59:41.280', atlas_cloud=1, atlas_rain=1, zp_data=[0.01574999999999882, 0.06325000000000003, 0.054250000000001464, 0.026499999999998636, 0.053000000000000824, 0.07375000000000043, 0.07399999999999984, 0.09875000000000078, 0.08549999999999969, 0.14300000000000068, 0.01624999999999943, 0.0730000000000004, 0.09699999999999953, 0.10724999999999874, 0.09299999999999997, 0.05299999999999905, 0.1302500000000002, 0.18549999999999933, 0.09899999999999842, 0.10374999999999801, 0.11249999999999893, 0.07974999999999888, 0.08075000000000188, 0.13974999999999937, 0.17300000000000004, 0.15649999999999942, 0.13674999999999926, 0.1844999999999999, 0.18100000000000094, 0.1800000000000015, 0.1540000000000017, 0.25650000000000084, 0.20224999999999937], zp_timestamp='2026-01-01T00:56:00')
2026-01-01T03:00:17.662 [DEBUG] [Thread-139396] [transport.py] [_log()] EOF in transport thread
2026-01-01T03:00:17.746 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T03:00:17.758 [DEBUG] [Thread-139399] [transport.py] [_log()] starting thread (client mode): 0xb1744eb0
2026-01-01T03:00:17.758 [DEBUG] [Thread-139399] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T03:00:17.773 [DEBUG] [Thread-139399] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T03:00:17.774 [INFO] [Thread-139399] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T03:00:17.782 [DEBUG] [Thread-139399] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T03:00:17.782 [DEBUG] [Thread-139399] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T03:00:17.782 [DEBUG] [Thread-139399] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T03:00:17.782 [DEBUG] [Thread-139399] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:00:17.782 [DEBUG] [Thread-139399] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:00:17.782 [DEBUG] [Thread-139399] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:00:17.782 [DEBUG] [Thread-139399] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:00:17.783 [DEBUG] [Thread-139399] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T03:00:17.783 [DEBUG] [Thread-139399] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T03:00:17.783 [DEBUG] [Thread-139399] [transport.py] [_log()] client lang: <none>
2026-01-01T03:00:17.783 [DEBUG] [Thread-139399] [transport.py] [_log()] server lang: <none>
2026-01-01T03:00:17.783 [DEBUG] [Thread-139399] [transport.py] [_log()] kex follows: False
2026-01-01T03:00:17.783 [DEBUG] [Thread-139399] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T03:00:17.783 [DEBUG] [Thread-139399] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T03:00:17.783 [DEBUG] [Thread-139399] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T03:00:17.783 [DEBUG] [Thread-139399] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T03:00:17.784 [DEBUG] [Thread-139399] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T03:00:17.784 [DEBUG] [Thread-139399] [transport.py] [_log()] Compression: none
2026-01-01T03:00:17.784 [DEBUG] [Thread-139399] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T03:00:17.842 [DEBUG] [Thread-139399] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T03:00:17.843 [DEBUG] [Thread-139399] [transport.py] [_log()] Switch to new keys ...
2026-01-01T03:00:17.844 [DEBUG] [Thread-139399] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T03:00:17.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T03:00:17.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T03:00:17.902 [DEBUG] [Thread-139399] [transport.py] [_log()] userauth is OK
2026-01-01T03:00:17.902 [DEBUG] [Thread-139399] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T03:00:17.902 [DEBUG] [Thread-139399] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T03:00:17.902 [DEBUG] [Thread-139399] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T03:00:17.903 [DEBUG] [Thread-139399] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T03:00:17.921 [INFO] [Thread-139399] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T03:00:17.921 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T03:00:17.922 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T03:00:18.190 [DEBUG] [Thread-139401 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:00:18.743 [DEBUG] [Thread-139399] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T03:00:18.743 [DEBUG] [Thread-139399] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T03:00:18.797 [DEBUG] [Thread-139399] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T03:00:18.797 [DEBUG] [Thread-139399] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T03:00:18.817 [DEBUG] [Thread-139399] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T03:00:18.829 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T03:00:18.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T03:00:18.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T03:00:18.847 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T03:00:18.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T03:00:18.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T03:00:18.856 [DEBUG] [Thread-139399] [transport.py] [_log()] EOF in transport thread
2026-01-01T03:00:33.251 [DEBUG] [Thread-139402 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:00:48.284 [DEBUG] [Thread-139403 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:00:48.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T03:00:48.878 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T03:00:48.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T03:00:49.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 3, 0, 24), 3.38, 79.74, 0.0, 10.91, 12.95, 0, 0, 0, 2, 0, 0),)
2026-01-01T03:00:49.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 03:00:24
2026-01-01T03:00:49.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T03:00:49.872 [DEBUG] [Thread-139404] [transport.py] [_log()] starting thread (client mode): 0xb6b14580
2026-01-01T03:00:49.872 [DEBUG] [Thread-139404] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T03:00:49.892 [DEBUG] [Thread-139404] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T03:00:49.892 [INFO] [Thread-139404] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T03:00:49.895 [DEBUG] [Thread-139404] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T03:00:49.895 [DEBUG] [Thread-139404] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T03:00:49.895 [DEBUG] [Thread-139404] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T03:00:49.895 [DEBUG] [Thread-139404] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:00:49.895 [DEBUG] [Thread-139404] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:00:49.895 [DEBUG] [Thread-139404] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:00:49.895 [DEBUG] [Thread-139404] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:00:49.895 [DEBUG] [Thread-139404] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T03:00:49.895 [DEBUG] [Thread-139404] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T03:00:49.895 [DEBUG] [Thread-139404] [transport.py] [_log()] client lang: <none>
2026-01-01T03:00:49.895 [DEBUG] [Thread-139404] [transport.py] [_log()] server lang: <none>
2026-01-01T03:00:49.895 [DEBUG] [Thread-139404] [transport.py] [_log()] kex follows: False
2026-01-01T03:00:49.895 [DEBUG] [Thread-139404] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T03:00:49.895 [DEBUG] [Thread-139404] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T03:00:49.895 [DEBUG] [Thread-139404] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T03:00:49.895 [DEBUG] [Thread-139404] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T03:00:49.895 [DEBUG] [Thread-139404] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T03:00:49.895 [DEBUG] [Thread-139404] [transport.py] [_log()] Compression: none
2026-01-01T03:00:49.895 [DEBUG] [Thread-139404] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T03:00:49.913 [DEBUG] [Thread-139404] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T03:00:49.913 [DEBUG] [Thread-139404] [transport.py] [_log()] Switch to new keys ...
2026-01-01T03:00:49.914 [DEBUG] [Thread-139404] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T03:00:49.914 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T03:00:49.914 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T03:00:49.915 [DEBUG] [Thread-139404] [transport.py] [_log()] userauth is OK
2026-01-01T03:00:49.916 [DEBUG] [Thread-139404] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T03:00:49.916 [DEBUG] [Thread-139404] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T03:00:49.916 [DEBUG] [Thread-139404] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T03:00:49.916 [DEBUG] [Thread-139404] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T03:00:49.930 [INFO] [Thread-139404] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T03:00:49.930 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T03:00:50.535 [DEBUG] [Thread-139404] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T03:00:50.535 [DEBUG] [Thread-139404] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T03:00:50.536 [DEBUG] [Thread-139404] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T03:00:50.577 [DEBUG] [Thread-139404] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T03:00:50.577 [DEBUG] [Thread-139404] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T03:00:50.580 [DEBUG] [Thread-139404] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T03:00:50.591 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T03:00:50.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T03:00:50.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T03:00:50.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T03:00:50.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T03:00:50.603 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T03:00:50.603 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T03:00:50.603 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T03:00:50.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T03:00:50.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.041797 -999.00  +13.10   3.93     83  +10.40 1 1 1 2 1     0    0 3.12 9.20 ZNESW 5.7 3.9 223.5 9.5 13.8 -21.2 13.8 -20.9 13.5 -19.1 13.8 -20.2
2026-01-01T03:00:50.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T03:00:50.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T03:00:50.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.041797
2026-01-01T03:00:50.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T03:00:50.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T03:00:50.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T03:00:50.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T03:00:50.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T03:00:50.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T03:00:24', tmtdew=3.38, humidity=79.74, cloud=0.0, wind=10.91, temperature=12.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T03:00:24', seeing=1.14, atlas_timestamp='2026-01-01T01:00:11.261', atlas_cloud=1, atlas_rain=1, zp_data=[0.01574999999999882, 0.06325000000000003, 0.054250000000001464, 0.026499999999998636, 0.053000000000000824, 0.07375000000000043, 0.07399999999999984, 0.09875000000000078, 0.08549999999999969, 0.14300000000000068, 0.01624999999999943, 0.0730000000000004, 0.09699999999999953, 0.10724999999999874, 0.09299999999999997, 0.05299999999999905, 0.1302500000000002, 0.18549999999999933, 0.09899999999999842, 0.10374999999999801, 0.11249999999999893, 0.07974999999999888, 0.08075000000000188, 0.13974999999999937, 0.17300000000000004, 0.15649999999999942, 0.13674999999999926, 0.1844999999999999, 0.18100000000000094, 0.1800000000000015, 0.1540000000000017, 0.25650000000000084, 0.20224999999999937], zp_timestamp='2026-01-01T00:56:00')
2026-01-01T03:00:50.606 [DEBUG] [Thread-139404] [transport.py] [_log()] EOF in transport thread
2026-01-01T03:00:50.689 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T03:00:50.702 [DEBUG] [Thread-139407] [transport.py] [_log()] starting thread (client mode): 0xb6b17280
2026-01-01T03:00:50.702 [DEBUG] [Thread-139407] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T03:00:50.718 [DEBUG] [Thread-139407] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T03:00:50.718 [INFO] [Thread-139407] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T03:00:50.726 [DEBUG] [Thread-139407] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T03:00:50.726 [DEBUG] [Thread-139407] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T03:00:50.726 [DEBUG] [Thread-139407] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T03:00:50.727 [DEBUG] [Thread-139407] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:00:50.727 [DEBUG] [Thread-139407] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:00:50.727 [DEBUG] [Thread-139407] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:00:50.727 [DEBUG] [Thread-139407] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:00:50.727 [DEBUG] [Thread-139407] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T03:00:50.727 [DEBUG] [Thread-139407] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T03:00:50.727 [DEBUG] [Thread-139407] [transport.py] [_log()] client lang: <none>
2026-01-01T03:00:50.727 [DEBUG] [Thread-139407] [transport.py] [_log()] server lang: <none>
2026-01-01T03:00:50.727 [DEBUG] [Thread-139407] [transport.py] [_log()] kex follows: False
2026-01-01T03:00:50.727 [DEBUG] [Thread-139407] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T03:00:50.727 [DEBUG] [Thread-139407] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T03:00:50.727 [DEBUG] [Thread-139407] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T03:00:50.727 [DEBUG] [Thread-139407] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T03:00:50.727 [DEBUG] [Thread-139407] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T03:00:50.727 [DEBUG] [Thread-139407] [transport.py] [_log()] Compression: none
2026-01-01T03:00:50.727 [DEBUG] [Thread-139407] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T03:00:50.786 [DEBUG] [Thread-139407] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T03:00:50.787 [DEBUG] [Thread-139407] [transport.py] [_log()] Switch to new keys ...
2026-01-01T03:00:50.787 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T03:00:50.788 [DEBUG] [Thread-139407] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T03:00:50.789 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T03:00:50.842 [DEBUG] [Thread-139407] [transport.py] [_log()] userauth is OK
2026-01-01T03:00:50.842 [DEBUG] [Thread-139407] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T03:00:50.843 [DEBUG] [Thread-139407] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T03:00:50.843 [DEBUG] [Thread-139407] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T03:00:50.843 [DEBUG] [Thread-139407] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T03:00:50.861 [INFO] [Thread-139407] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T03:00:50.862 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T03:00:50.862 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T03:00:51.697 [DEBUG] [Thread-139407] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T03:00:51.698 [DEBUG] [Thread-139407] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T03:00:51.746 [DEBUG] [Thread-139407] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T03:00:51.747 [DEBUG] [Thread-139407] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T03:00:51.756 [DEBUG] [Thread-139407] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T03:00:51.765 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T03:00:51.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T03:00:51.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T03:00:51.784 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T03:00:51.784 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T03:00:51.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T03:00:51.793 [DEBUG] [Thread-139407] [transport.py] [_log()] EOF in transport thread
2026-01-01T03:01:03.313 [DEBUG] [Thread-139409 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:01:07.194 [DEBUG] [Thread-139410 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:01:09.374 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:01:09.376 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:01:18.365 [DEBUG] [Thread-139411 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:01:21.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T03:01:21.816 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T03:01:21.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T03:01:22.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 3, 0, 56), 3.28, 80.47, 0.0, 13.96, 12.95, 0, 1, 0, 2, 0, 0),)
2026-01-01T03:01:22.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 03:00:56
2026-01-01T03:01:22.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T03:01:22.848 [DEBUG] [Thread-139412] [transport.py] [_log()] starting thread (client mode): 0xb6bbd210
2026-01-01T03:01:22.848 [DEBUG] [Thread-139412] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T03:01:22.863 [DEBUG] [Thread-139412] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T03:01:22.863 [INFO] [Thread-139412] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T03:01:22.866 [DEBUG] [Thread-139412] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T03:01:22.866 [DEBUG] [Thread-139412] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T03:01:22.866 [DEBUG] [Thread-139412] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T03:01:22.866 [DEBUG] [Thread-139412] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:01:22.866 [DEBUG] [Thread-139412] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:01:22.866 [DEBUG] [Thread-139412] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:01:22.867 [DEBUG] [Thread-139412] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:01:22.867 [DEBUG] [Thread-139412] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T03:01:22.867 [DEBUG] [Thread-139412] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T03:01:22.867 [DEBUG] [Thread-139412] [transport.py] [_log()] client lang: <none>
2026-01-01T03:01:22.867 [DEBUG] [Thread-139412] [transport.py] [_log()] server lang: <none>
2026-01-01T03:01:22.867 [DEBUG] [Thread-139412] [transport.py] [_log()] kex follows: False
2026-01-01T03:01:22.867 [DEBUG] [Thread-139412] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T03:01:22.867 [DEBUG] [Thread-139412] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T03:01:22.867 [DEBUG] [Thread-139412] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T03:01:22.867 [DEBUG] [Thread-139412] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T03:01:22.867 [DEBUG] [Thread-139412] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T03:01:22.867 [DEBUG] [Thread-139412] [transport.py] [_log()] Compression: none
2026-01-01T03:01:22.867 [DEBUG] [Thread-139412] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T03:01:22.881 [DEBUG] [Thread-139412] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T03:01:22.881 [DEBUG] [Thread-139412] [transport.py] [_log()] Switch to new keys ...
2026-01-01T03:01:22.881 [DEBUG] [Thread-139412] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T03:01:22.881 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T03:01:22.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T03:01:22.882 [DEBUG] [Thread-139412] [transport.py] [_log()] userauth is OK
2026-01-01T03:01:22.882 [DEBUG] [Thread-139412] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T03:01:22.882 [DEBUG] [Thread-139412] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T03:01:22.882 [DEBUG] [Thread-139412] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T03:01:22.882 [DEBUG] [Thread-139412] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T03:01:22.895 [INFO] [Thread-139412] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T03:01:22.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T03:01:23.704 [DEBUG] [Thread-139412] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T03:01:23.704 [DEBUG] [Thread-139412] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T03:01:23.704 [DEBUG] [Thread-139412] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T03:01:23.746 [DEBUG] [Thread-139412] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T03:01:23.746 [DEBUG] [Thread-139412] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T03:01:23.748 [DEBUG] [Thread-139412] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T03:01:23.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T03:01:23.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T03:01:23.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T03:01:23.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T03:01:23.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T03:01:23.780 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T03:01:23.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T03:01:23.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T03:01:23.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T03:01:23.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.042145 -999.00  +13.10   9.21     84  +10.40 1 1 1 2 1     0    0 3.10 7.93 ZNESW 7.1 9.2 218.2 11.9 13.8 -21.3 13.7 -20.8 13.5 -19.3 13.8 -20.4
2026-01-01T03:01:23.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T03:01:23.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T03:01:23.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.042145
2026-01-01T03:01:23.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T03:01:23.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T03:01:23.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T03:01:23.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T03:01:23.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T03:01:23.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T03:00:56', tmtdew=3.28, humidity=80.47, cloud=0.0, wind=13.96, temperature=12.95, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T03:00:56', seeing=1.09, atlas_timestamp='2026-01-01T01:00:41.328', atlas_cloud=1, atlas_rain=1, zp_data=[0.011749999999999261, 0.06825000000000081, 0.03074999999999939, -0.005000000000000782, 0.027499999999999858, 0.04875000000000185, 0.054999999999999716, 0.11025000000000063, 0.10499999999999865, 0.12450000000000117, 0.04374999999999929, 0.03700000000000081, 0.05799999999999983, 0.08624999999999972, 0.053999999999998494, 0.028999999999999915, 0.07225000000000037, 0.17300000000000004, 0.08699999999999974, 0.0832499999999996, 0.08749999999999858, 0.06474999999999831, 0.04925000000000068, 0.08425000000000082, 0.13099999999999845, 0.10650000000000048, 0.1667500000000004, 0.12349999999999994, 0.11749999999999972, 0.11600000000000144, 0.15000000000000036, 0.2065000000000019, 0.1377499999999987], zp_timestamp='2026-01-01T00:59:00')
2026-01-01T03:01:23.781 [DEBUG] [Thread-139412] [transport.py] [_log()] EOF in transport thread
2026-01-01T03:01:23.855 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T03:01:23.866 [DEBUG] [Thread-139415] [transport.py] [_log()] starting thread (client mode): 0xb6bbfe80
2026-01-01T03:01:23.866 [DEBUG] [Thread-139415] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T03:01:23.882 [DEBUG] [Thread-139415] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T03:01:23.882 [INFO] [Thread-139415] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T03:01:23.889 [DEBUG] [Thread-139415] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T03:01:23.889 [DEBUG] [Thread-139415] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T03:01:23.889 [DEBUG] [Thread-139415] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T03:01:23.889 [DEBUG] [Thread-139415] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:01:23.889 [DEBUG] [Thread-139415] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:01:23.889 [DEBUG] [Thread-139415] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:01:23.889 [DEBUG] [Thread-139415] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:01:23.889 [DEBUG] [Thread-139415] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T03:01:23.889 [DEBUG] [Thread-139415] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T03:01:23.889 [DEBUG] [Thread-139415] [transport.py] [_log()] client lang: <none>
2026-01-01T03:01:23.890 [DEBUG] [Thread-139415] [transport.py] [_log()] server lang: <none>
2026-01-01T03:01:23.890 [DEBUG] [Thread-139415] [transport.py] [_log()] kex follows: False
2026-01-01T03:01:23.890 [DEBUG] [Thread-139415] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T03:01:23.890 [DEBUG] [Thread-139415] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T03:01:23.890 [DEBUG] [Thread-139415] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T03:01:23.890 [DEBUG] [Thread-139415] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T03:01:23.890 [DEBUG] [Thread-139415] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T03:01:23.890 [DEBUG] [Thread-139415] [transport.py] [_log()] Compression: none
2026-01-01T03:01:23.890 [DEBUG] [Thread-139415] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T03:01:23.948 [DEBUG] [Thread-139415] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T03:01:23.948 [DEBUG] [Thread-139415] [transport.py] [_log()] Switch to new keys ...
2026-01-01T03:01:23.948 [DEBUG] [Thread-139415] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T03:01:23.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T03:01:23.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T03:01:24.008 [DEBUG] [Thread-139415] [transport.py] [_log()] userauth is OK
2026-01-01T03:01:24.008 [DEBUG] [Thread-139415] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T03:01:24.008 [DEBUG] [Thread-139415] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T03:01:24.008 [DEBUG] [Thread-139415] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T03:01:24.008 [DEBUG] [Thread-139415] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T03:01:24.023 [INFO] [Thread-139415] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T03:01:24.023 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T03:01:24.024 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T03:01:24.902 [DEBUG] [Thread-139415] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T03:01:24.902 [DEBUG] [Thread-139415] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T03:01:24.950 [DEBUG] [Thread-139415] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T03:01:24.950 [DEBUG] [Thread-139415] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T03:01:24.959 [DEBUG] [Thread-139415] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T03:01:24.967 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T03:01:24.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T03:01:24.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T03:01:24.983 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T03:01:24.983 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T03:01:24.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T03:01:24.991 [DEBUG] [Thread-139415] [transport.py] [_log()] EOF in transport thread
2026-01-01T03:01:33.396 [DEBUG] [Thread-139417 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:01:48.453 [DEBUG] [Thread-139418 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:01:54.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T03:01:54.984 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T03:01:54.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T03:01:55.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 3, 1, 28), 3.25, 80.65, 0.0, 15.67, 12.95, 0, 1, 0, 2, 0, 0),)
2026-01-01T03:01:55.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 03:01:28
2026-01-01T03:01:55.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T03:01:55.978 [DEBUG] [Thread-139419] [transport.py] [_log()] starting thread (client mode): 0xb95b0790
2026-01-01T03:01:55.978 [DEBUG] [Thread-139419] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T03:01:55.997 [DEBUG] [Thread-139419] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T03:01:55.997 [INFO] [Thread-139419] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T03:01:56.000 [DEBUG] [Thread-139419] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T03:01:56.000 [DEBUG] [Thread-139419] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T03:01:56.000 [DEBUG] [Thread-139419] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T03:01:56.000 [DEBUG] [Thread-139419] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:01:56.001 [DEBUG] [Thread-139419] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:01:56.001 [DEBUG] [Thread-139419] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:01:56.001 [DEBUG] [Thread-139419] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:01:56.001 [DEBUG] [Thread-139419] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T03:01:56.001 [DEBUG] [Thread-139419] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T03:01:56.001 [DEBUG] [Thread-139419] [transport.py] [_log()] client lang: <none>
2026-01-01T03:01:56.001 [DEBUG] [Thread-139419] [transport.py] [_log()] server lang: <none>
2026-01-01T03:01:56.001 [DEBUG] [Thread-139419] [transport.py] [_log()] kex follows: False
2026-01-01T03:01:56.001 [DEBUG] [Thread-139419] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T03:01:56.001 [DEBUG] [Thread-139419] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T03:01:56.001 [DEBUG] [Thread-139419] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T03:01:56.001 [DEBUG] [Thread-139419] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T03:01:56.001 [DEBUG] [Thread-139419] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T03:01:56.001 [DEBUG] [Thread-139419] [transport.py] [_log()] Compression: none
2026-01-01T03:01:56.001 [DEBUG] [Thread-139419] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T03:01:56.020 [DEBUG] [Thread-139419] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T03:01:56.021 [DEBUG] [Thread-139419] [transport.py] [_log()] Switch to new keys ...
2026-01-01T03:01:56.021 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T03:01:56.021 [DEBUG] [Thread-139419] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T03:01:56.022 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T03:01:56.024 [DEBUG] [Thread-139419] [transport.py] [_log()] userauth is OK
2026-01-01T03:01:56.024 [DEBUG] [Thread-139419] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T03:01:56.024 [DEBUG] [Thread-139419] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T03:01:56.024 [DEBUG] [Thread-139419] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T03:01:56.024 [DEBUG] [Thread-139419] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T03:01:56.047 [INFO] [Thread-139419] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T03:01:56.048 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T03:01:56.707 [DEBUG] [Thread-139419] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T03:01:56.707 [DEBUG] [Thread-139419] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T03:01:56.707 [DEBUG] [Thread-139419] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T03:01:56.748 [DEBUG] [Thread-139419] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T03:01:56.748 [DEBUG] [Thread-139419] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T03:01:56.752 [DEBUG] [Thread-139419] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T03:01:56.764 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T03:01:56.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T03:01:56.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T03:01:56.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T03:01:56.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T03:01:56.777 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T03:01:56.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T03:01:56.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T03:01:56.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T03:01:56.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.042492 -999.00  +13.00   4.72     84  +10.50 1 1 1 2 1     0    0 3.03 7.03 ZNESW 6.6 4.7 223.2 11.5 13.8 -21.1 13.7 -20.6 13.5 -19.2 13.7 -20.1
2026-01-01T03:01:56.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T03:01:56.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T03:01:56.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.042492
2026-01-01T03:01:56.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T03:01:56.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T03:01:56.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T03:01:56.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T03:01:56.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T03:01:56.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T03:01:28', tmtdew=3.25, humidity=80.65, cloud=0.0, wind=15.67, temperature=12.95, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T03:01:28', seeing=1.1, atlas_timestamp='2026-01-01T01:01:11.309', atlas_cloud=1, atlas_rain=1, zp_data=[0.011749999999999261, 0.06825000000000081, 0.03074999999999939, -0.005000000000000782, 0.027499999999999858, 0.04875000000000185, 0.054999999999999716, 0.11025000000000063, 0.10499999999999865, 0.12450000000000117, 0.04374999999999929, 0.03700000000000081, 0.05799999999999983, 0.08624999999999972, 0.053999999999998494, 0.028999999999999915, 0.07225000000000037, 0.17300000000000004, 0.08699999999999974, 0.0832499999999996, 0.08749999999999858, 0.06474999999999831, 0.04925000000000068, 0.08425000000000082, 0.13099999999999845, 0.10650000000000048, 0.1667500000000004, 0.12349999999999994, 0.11749999999999972, 0.11600000000000144, 0.15000000000000036, 0.2065000000000019, 0.1377499999999987], zp_timestamp='2026-01-01T00:59:00')
2026-01-01T03:01:56.780 [DEBUG] [Thread-139419] [transport.py] [_log()] EOF in transport thread
2026-01-01T03:01:56.860 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T03:01:56.873 [DEBUG] [Thread-139422] [transport.py] [_log()] starting thread (client mode): 0xb95b2e90
2026-01-01T03:01:56.873 [DEBUG] [Thread-139422] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T03:01:56.888 [DEBUG] [Thread-139422] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T03:01:56.888 [INFO] [Thread-139422] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T03:01:56.896 [DEBUG] [Thread-139422] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T03:01:56.896 [DEBUG] [Thread-139422] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T03:01:56.896 [DEBUG] [Thread-139422] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T03:01:56.896 [DEBUG] [Thread-139422] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:01:56.896 [DEBUG] [Thread-139422] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:01:56.896 [DEBUG] [Thread-139422] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:01:56.896 [DEBUG] [Thread-139422] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:01:56.896 [DEBUG] [Thread-139422] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T03:01:56.897 [DEBUG] [Thread-139422] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T03:01:56.897 [DEBUG] [Thread-139422] [transport.py] [_log()] client lang: <none>
2026-01-01T03:01:56.897 [DEBUG] [Thread-139422] [transport.py] [_log()] server lang: <none>
2026-01-01T03:01:56.897 [DEBUG] [Thread-139422] [transport.py] [_log()] kex follows: False
2026-01-01T03:01:56.897 [DEBUG] [Thread-139422] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T03:01:56.897 [DEBUG] [Thread-139422] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T03:01:56.897 [DEBUG] [Thread-139422] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T03:01:56.897 [DEBUG] [Thread-139422] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T03:01:56.897 [DEBUG] [Thread-139422] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T03:01:56.897 [DEBUG] [Thread-139422] [transport.py] [_log()] Compression: none
2026-01-01T03:01:56.897 [DEBUG] [Thread-139422] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T03:01:56.954 [DEBUG] [Thread-139422] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T03:01:56.954 [DEBUG] [Thread-139422] [transport.py] [_log()] Switch to new keys ...
2026-01-01T03:01:56.955 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T03:01:56.956 [DEBUG] [Thread-139422] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T03:01:56.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T03:01:57.009 [DEBUG] [Thread-139422] [transport.py] [_log()] userauth is OK
2026-01-01T03:01:57.009 [DEBUG] [Thread-139422] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T03:01:57.009 [DEBUG] [Thread-139422] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T03:01:57.009 [DEBUG] [Thread-139422] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T03:01:57.009 [DEBUG] [Thread-139422] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T03:01:57.028 [INFO] [Thread-139422] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T03:01:57.029 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T03:01:57.030 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T03:01:57.870 [DEBUG] [Thread-139422] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T03:01:57.870 [DEBUG] [Thread-139422] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T03:01:57.918 [DEBUG] [Thread-139422] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T03:01:57.918 [DEBUG] [Thread-139422] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T03:01:57.927 [DEBUG] [Thread-139422] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T03:01:57.937 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T03:01:57.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T03:01:57.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T03:01:57.955 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T03:01:57.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T03:01:57.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T03:01:57.964 [DEBUG] [Thread-139422] [transport.py] [_log()] EOF in transport thread
2026-01-01T03:02:03.486 [DEBUG] [Thread-139424 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:02:07.247 [DEBUG] [Thread-139425 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:02:09.575 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:02:09.576 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:02:18.528 [DEBUG] [Thread-139426 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:02:27.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T03:02:27.987 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T03:02:27.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T03:02:28.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 3, 2), 3.24, 80.69, 0.0, 13.02, 12.93, 0, 1, 0, 2, 0, 0),)
2026-01-01T03:02:28.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 03:02:00
2026-01-01T03:02:28.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T03:02:28.965 [DEBUG] [Thread-139427] [transport.py] [_log()] starting thread (client mode): 0xb6b01f90
2026-01-01T03:02:28.965 [DEBUG] [Thread-139427] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T03:02:28.986 [DEBUG] [Thread-139427] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T03:02:28.986 [INFO] [Thread-139427] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T03:02:28.989 [DEBUG] [Thread-139427] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T03:02:28.989 [DEBUG] [Thread-139427] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T03:02:28.989 [DEBUG] [Thread-139427] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T03:02:28.989 [DEBUG] [Thread-139427] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:02:28.990 [DEBUG] [Thread-139427] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:02:28.990 [DEBUG] [Thread-139427] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:02:28.990 [DEBUG] [Thread-139427] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:02:28.990 [DEBUG] [Thread-139427] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T03:02:28.990 [DEBUG] [Thread-139427] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T03:02:28.990 [DEBUG] [Thread-139427] [transport.py] [_log()] client lang: <none>
2026-01-01T03:02:28.990 [DEBUG] [Thread-139427] [transport.py] [_log()] server lang: <none>
2026-01-01T03:02:28.990 [DEBUG] [Thread-139427] [transport.py] [_log()] kex follows: False
2026-01-01T03:02:28.990 [DEBUG] [Thread-139427] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T03:02:28.990 [DEBUG] [Thread-139427] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T03:02:28.990 [DEBUG] [Thread-139427] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T03:02:28.990 [DEBUG] [Thread-139427] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T03:02:28.990 [DEBUG] [Thread-139427] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T03:02:28.990 [DEBUG] [Thread-139427] [transport.py] [_log()] Compression: none
2026-01-01T03:02:28.990 [DEBUG] [Thread-139427] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T03:02:29.007 [DEBUG] [Thread-139427] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T03:02:29.008 [DEBUG] [Thread-139427] [transport.py] [_log()] Switch to new keys ...
2026-01-01T03:02:29.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T03:02:29.009 [DEBUG] [Thread-139427] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T03:02:29.009 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T03:02:29.010 [DEBUG] [Thread-139427] [transport.py] [_log()] userauth is OK
2026-01-01T03:02:29.010 [DEBUG] [Thread-139427] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T03:02:29.010 [DEBUG] [Thread-139427] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T03:02:29.010 [DEBUG] [Thread-139427] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T03:02:29.010 [DEBUG] [Thread-139427] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T03:02:29.026 [INFO] [Thread-139427] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T03:02:29.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T03:02:29.683 [DEBUG] [Thread-139427] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T03:02:29.683 [DEBUG] [Thread-139427] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T03:02:29.683 [DEBUG] [Thread-139427] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T03:02:29.724 [DEBUG] [Thread-139427] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T03:02:29.724 [DEBUG] [Thread-139427] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T03:02:29.726 [DEBUG] [Thread-139427] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T03:02:29.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T03:02:29.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T03:02:29.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T03:02:29.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T03:02:29.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T03:02:29.747 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T03:02:29.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T03:02:29.747 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T03:02:29.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T03:02:29.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.043186 -999.00  +13.00   8.19     84  +10.40 1 1 1 2 1     0    0 2.95 4.47 ZNESW 7.3 8.2 219.6 11.3 13.8 -21.3 13.6 -20.7 13.4 -19.1 13.7 -20.3
2026-01-01T03:02:29.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T03:02:29.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T03:02:29.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.043186
2026-01-01T03:02:29.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T03:02:29.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T03:02:29.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T03:02:29.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T03:02:29.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T03:02:29.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T03:02:00', tmtdew=3.24, humidity=80.69, cloud=0.0, wind=13.02, temperature=12.93, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T03:02:01', seeing=1.06, atlas_timestamp='2026-01-01T01:02:11.270', atlas_cloud=1, atlas_rain=1, zp_data=[0.011749999999999261, 0.06825000000000081, 0.03074999999999939, -0.005000000000000782, 0.027499999999999858, 0.04875000000000185, 0.054999999999999716, 0.11025000000000063, 0.10499999999999865, 0.12450000000000117, 0.04374999999999929, 0.03700000000000081, 0.05799999999999983, 0.08624999999999972, 0.053999999999998494, 0.028999999999999915, 0.07225000000000037, 0.17300000000000004, 0.08699999999999974, 0.0832499999999996, 0.08749999999999858, 0.06474999999999831, 0.04925000000000068, 0.08425000000000082, 0.13099999999999845, 0.10650000000000048, 0.1667500000000004, 0.12349999999999994, 0.11749999999999972, 0.11600000000000144, 0.15000000000000036, 0.2065000000000019, 0.1377499999999987], zp_timestamp='2026-01-01T00:59:00')
2026-01-01T03:02:29.750 [DEBUG] [Thread-139427] [transport.py] [_log()] EOF in transport thread
2026-01-01T03:02:29.830 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T03:02:29.842 [DEBUG] [Thread-139430] [transport.py] [_log()] starting thread (client mode): 0xb6b14c70
2026-01-01T03:02:29.842 [DEBUG] [Thread-139430] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T03:02:29.856 [DEBUG] [Thread-139430] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T03:02:29.857 [INFO] [Thread-139430] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T03:02:29.864 [DEBUG] [Thread-139430] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T03:02:29.864 [DEBUG] [Thread-139430] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T03:02:29.864 [DEBUG] [Thread-139430] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T03:02:29.864 [DEBUG] [Thread-139430] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:02:29.864 [DEBUG] [Thread-139430] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:02:29.864 [DEBUG] [Thread-139430] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:02:29.864 [DEBUG] [Thread-139430] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:02:29.864 [DEBUG] [Thread-139430] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T03:02:29.864 [DEBUG] [Thread-139430] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T03:02:29.864 [DEBUG] [Thread-139430] [transport.py] [_log()] client lang: <none>
2026-01-01T03:02:29.864 [DEBUG] [Thread-139430] [transport.py] [_log()] server lang: <none>
2026-01-01T03:02:29.864 [DEBUG] [Thread-139430] [transport.py] [_log()] kex follows: False
2026-01-01T03:02:29.864 [DEBUG] [Thread-139430] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T03:02:29.864 [DEBUG] [Thread-139430] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T03:02:29.864 [DEBUG] [Thread-139430] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T03:02:29.864 [DEBUG] [Thread-139430] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T03:02:29.865 [DEBUG] [Thread-139430] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T03:02:29.865 [DEBUG] [Thread-139430] [transport.py] [_log()] Compression: none
2026-01-01T03:02:29.865 [DEBUG] [Thread-139430] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T03:02:29.924 [DEBUG] [Thread-139430] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T03:02:29.925 [DEBUG] [Thread-139430] [transport.py] [_log()] Switch to new keys ...
2026-01-01T03:02:29.925 [DEBUG] [Thread-139430] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T03:02:29.926 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T03:02:29.926 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T03:02:29.981 [DEBUG] [Thread-139430] [transport.py] [_log()] userauth is OK
2026-01-01T03:02:29.981 [DEBUG] [Thread-139430] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T03:02:29.982 [DEBUG] [Thread-139430] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T03:02:29.982 [DEBUG] [Thread-139430] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T03:02:29.982 [DEBUG] [Thread-139430] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T03:02:30.000 [INFO] [Thread-139430] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T03:02:30.001 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T03:02:30.001 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T03:02:30.907 [DEBUG] [Thread-139430] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T03:02:30.907 [DEBUG] [Thread-139430] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T03:02:30.955 [DEBUG] [Thread-139430] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T03:02:30.955 [DEBUG] [Thread-139430] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T03:02:30.965 [DEBUG] [Thread-139430] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T03:02:30.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T03:02:30.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T03:02:30.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T03:02:30.993 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T03:02:30.993 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T03:02:30.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T03:02:31.002 [DEBUG] [Thread-139430] [transport.py] [_log()] EOF in transport thread
2026-01-01T03:02:33.563 [DEBUG] [Thread-139432 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:02:48.604 [DEBUG] [Thread-139433 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:03:01.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T03:03:01.005 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T03:03:01.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T03:03:01.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 3, 2, 33), 3.43, 79.67, 0.0, 14.79, 13.29, 0, 0, 0, 2, 0, 0),)
2026-01-01T03:03:01.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 03:02:33
2026-01-01T03:03:01.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T03:03:01.988 [DEBUG] [Thread-139434] [transport.py] [_log()] starting thread (client mode): 0xb6b01db0
2026-01-01T03:03:01.988 [DEBUG] [Thread-139434] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T03:03:02.007 [DEBUG] [Thread-139434] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T03:03:02.007 [INFO] [Thread-139434] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T03:03:02.011 [DEBUG] [Thread-139434] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T03:03:02.011 [DEBUG] [Thread-139434] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T03:03:02.011 [DEBUG] [Thread-139434] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T03:03:02.011 [DEBUG] [Thread-139434] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:03:02.011 [DEBUG] [Thread-139434] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:03:02.011 [DEBUG] [Thread-139434] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:03:02.011 [DEBUG] [Thread-139434] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:03:02.011 [DEBUG] [Thread-139434] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T03:03:02.011 [DEBUG] [Thread-139434] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T03:03:02.011 [DEBUG] [Thread-139434] [transport.py] [_log()] client lang: <none>
2026-01-01T03:03:02.011 [DEBUG] [Thread-139434] [transport.py] [_log()] server lang: <none>
2026-01-01T03:03:02.011 [DEBUG] [Thread-139434] [transport.py] [_log()] kex follows: False
2026-01-01T03:03:02.011 [DEBUG] [Thread-139434] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T03:03:02.011 [DEBUG] [Thread-139434] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T03:03:02.011 [DEBUG] [Thread-139434] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T03:03:02.011 [DEBUG] [Thread-139434] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T03:03:02.011 [DEBUG] [Thread-139434] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T03:03:02.011 [DEBUG] [Thread-139434] [transport.py] [_log()] Compression: none
2026-01-01T03:03:02.011 [DEBUG] [Thread-139434] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T03:03:02.028 [DEBUG] [Thread-139434] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T03:03:02.028 [DEBUG] [Thread-139434] [transport.py] [_log()] Switch to new keys ...
2026-01-01T03:03:02.028 [DEBUG] [Thread-139434] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T03:03:02.028 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T03:03:02.028 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T03:03:02.028 [DEBUG] [Thread-139434] [transport.py] [_log()] userauth is OK
2026-01-01T03:03:02.028 [DEBUG] [Thread-139434] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T03:03:02.029 [DEBUG] [Thread-139434] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T03:03:02.029 [DEBUG] [Thread-139434] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T03:03:02.029 [DEBUG] [Thread-139434] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T03:03:02.038 [INFO] [Thread-139434] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T03:03:02.039 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T03:03:02.669 [DEBUG] [Thread-139434] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T03:03:02.669 [DEBUG] [Thread-139434] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T03:03:02.669 [DEBUG] [Thread-139434] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T03:03:02.710 [DEBUG] [Thread-139434] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T03:03:02.711 [DEBUG] [Thread-139434] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T03:03:02.714 [DEBUG] [Thread-139434] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T03:03:02.726 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T03:03:02.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T03:03:02.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T03:03:02.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T03:03:02.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T03:03:02.739 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T03:03:02.740 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T03:03:02.740 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T03:03:02.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T03:03:02.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.043534 -999.00  +13.00   5.02     84  +10.40 1 1 1 2 1     0    0 2.91 3.58 ZNESW 5.4 5.0 198.3 10.3 13.8 -21.1 13.6 -20.9 13.4 -19.0 13.8 -20.3
2026-01-01T03:03:02.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T03:03:02.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T03:03:02.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.043534
2026-01-01T03:03:02.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T03:03:02.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T03:03:02.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T03:03:02.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T03:03:02.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T03:03:02.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T03:02:33', tmtdew=3.43, humidity=79.67, cloud=0.0, wind=14.79, temperature=13.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T03:02:33', seeing=1.06, atlas_timestamp='2026-01-01T01:02:41.338', atlas_cloud=1, atlas_rain=1, zp_data=[0.011749999999999261, 0.06825000000000081, 0.03074999999999939, -0.005000000000000782, 0.027499999999999858, 0.04875000000000185, 0.054999999999999716, 0.11025000000000063, 0.10499999999999865, 0.12450000000000117, 0.04374999999999929, 0.03700000000000081, 0.05799999999999983, 0.08624999999999972, 0.053999999999998494, 0.028999999999999915, 0.07225000000000037, 0.17300000000000004, 0.08699999999999974, 0.0832499999999996, 0.08749999999999858, 0.06474999999999831, 0.04925000000000068, 0.08425000000000082, 0.13099999999999845, 0.10650000000000048, 0.1667500000000004, 0.12349999999999994, 0.11749999999999972, 0.11600000000000144, 0.15000000000000036, 0.2065000000000019, 0.1377499999999987], zp_timestamp='2026-01-01T00:59:00')
2026-01-01T03:03:02.742 [DEBUG] [Thread-139434] [transport.py] [_log()] EOF in transport thread
2026-01-01T03:03:02.826 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T03:03:02.840 [DEBUG] [Thread-139437] [transport.py] [_log()] starting thread (client mode): 0xb1794130
2026-01-01T03:03:02.840 [DEBUG] [Thread-139437] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T03:03:02.855 [DEBUG] [Thread-139437] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T03:03:02.855 [INFO] [Thread-139437] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T03:03:02.863 [DEBUG] [Thread-139437] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T03:03:02.863 [DEBUG] [Thread-139437] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T03:03:02.863 [DEBUG] [Thread-139437] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T03:03:02.863 [DEBUG] [Thread-139437] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:03:02.863 [DEBUG] [Thread-139437] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:03:02.863 [DEBUG] [Thread-139437] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:03:02.863 [DEBUG] [Thread-139437] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:03:02.863 [DEBUG] [Thread-139437] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T03:03:02.863 [DEBUG] [Thread-139437] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T03:03:02.863 [DEBUG] [Thread-139437] [transport.py] [_log()] client lang: <none>
2026-01-01T03:03:02.863 [DEBUG] [Thread-139437] [transport.py] [_log()] server lang: <none>
2026-01-01T03:03:02.863 [DEBUG] [Thread-139437] [transport.py] [_log()] kex follows: False
2026-01-01T03:03:02.863 [DEBUG] [Thread-139437] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T03:03:02.863 [DEBUG] [Thread-139437] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T03:03:02.864 [DEBUG] [Thread-139437] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T03:03:02.864 [DEBUG] [Thread-139437] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T03:03:02.864 [DEBUG] [Thread-139437] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T03:03:02.864 [DEBUG] [Thread-139437] [transport.py] [_log()] Compression: none
2026-01-01T03:03:02.864 [DEBUG] [Thread-139437] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T03:03:02.921 [DEBUG] [Thread-139437] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T03:03:02.921 [DEBUG] [Thread-139437] [transport.py] [_log()] Switch to new keys ...
2026-01-01T03:03:02.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T03:03:02.923 [DEBUG] [Thread-139437] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T03:03:02.924 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T03:03:02.982 [DEBUG] [Thread-139437] [transport.py] [_log()] userauth is OK
2026-01-01T03:03:02.982 [DEBUG] [Thread-139437] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T03:03:02.982 [DEBUG] [Thread-139437] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T03:03:02.983 [DEBUG] [Thread-139437] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T03:03:02.983 [DEBUG] [Thread-139437] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T03:03:03.002 [INFO] [Thread-139437] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T03:03:03.002 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T03:03:03.003 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T03:03:03.644 [DEBUG] [Thread-139439 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:03:03.814 [DEBUG] [Thread-139437] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T03:03:03.814 [DEBUG] [Thread-139437] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T03:03:03.862 [DEBUG] [Thread-139437] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T03:03:03.863 [DEBUG] [Thread-139437] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T03:03:03.872 [DEBUG] [Thread-139437] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T03:03:03.882 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T03:03:03.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T03:03:03.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T03:03:03.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T03:03:03.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T03:03:03.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T03:03:03.910 [DEBUG] [Thread-139437] [transport.py] [_log()] EOF in transport thread
2026-01-01T03:03:07.322 [DEBUG] [Thread-139440 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:03:09.777 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:03:09.778 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:03:18.695 [DEBUG] [Thread-139441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:03:33.726 [DEBUG] [Thread-139442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:03:33.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T03:03:33.933 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T03:03:33.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T03:03:34.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 3, 3, 5), 3.15, 80.92, 0.0, 11.36, 12.88, 0, 1, 0, 2, 0, 0),)
2026-01-01T03:03:34.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 03:03:05
2026-01-01T03:03:34.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T03:03:34.915 [DEBUG] [Thread-139443] [transport.py] [_log()] starting thread (client mode): 0xb6ba1ba0
2026-01-01T03:03:34.916 [DEBUG] [Thread-139443] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T03:03:34.936 [DEBUG] [Thread-139443] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T03:03:34.936 [INFO] [Thread-139443] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T03:03:34.939 [DEBUG] [Thread-139443] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T03:03:34.939 [DEBUG] [Thread-139443] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T03:03:34.939 [DEBUG] [Thread-139443] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T03:03:34.939 [DEBUG] [Thread-139443] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:03:34.939 [DEBUG] [Thread-139443] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:03:34.939 [DEBUG] [Thread-139443] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:03:34.939 [DEBUG] [Thread-139443] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:03:34.939 [DEBUG] [Thread-139443] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T03:03:34.939 [DEBUG] [Thread-139443] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T03:03:34.939 [DEBUG] [Thread-139443] [transport.py] [_log()] client lang: <none>
2026-01-01T03:03:34.939 [DEBUG] [Thread-139443] [transport.py] [_log()] server lang: <none>
2026-01-01T03:03:34.939 [DEBUG] [Thread-139443] [transport.py] [_log()] kex follows: False
2026-01-01T03:03:34.939 [DEBUG] [Thread-139443] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T03:03:34.940 [DEBUG] [Thread-139443] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T03:03:34.940 [DEBUG] [Thread-139443] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T03:03:34.940 [DEBUG] [Thread-139443] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T03:03:34.940 [DEBUG] [Thread-139443] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T03:03:34.940 [DEBUG] [Thread-139443] [transport.py] [_log()] Compression: none
2026-01-01T03:03:34.940 [DEBUG] [Thread-139443] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T03:03:34.959 [DEBUG] [Thread-139443] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T03:03:34.960 [DEBUG] [Thread-139443] [transport.py] [_log()] Switch to new keys ...
2026-01-01T03:03:34.960 [DEBUG] [Thread-139443] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T03:03:34.961 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T03:03:34.962 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T03:03:35.005 [DEBUG] [Thread-139443] [transport.py] [_log()] userauth is OK
2026-01-01T03:03:35.005 [DEBUG] [Thread-139443] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T03:03:35.005 [DEBUG] [Thread-139443] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T03:03:35.005 [DEBUG] [Thread-139443] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T03:03:35.006 [DEBUG] [Thread-139443] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T03:03:35.025 [INFO] [Thread-139443] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T03:03:35.026 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T03:03:35.688 [DEBUG] [Thread-139443] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T03:03:35.689 [DEBUG] [Thread-139443] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T03:03:35.689 [DEBUG] [Thread-139443] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T03:03:35.730 [DEBUG] [Thread-139443] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T03:03:35.730 [DEBUG] [Thread-139443] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T03:03:35.733 [DEBUG] [Thread-139443] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T03:03:35.744 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T03:03:35.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T03:03:35.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T03:03:35.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T03:03:35.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T03:03:35.754 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T03:03:35.754 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T03:03:35.754 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T03:03:35.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T03:03:35.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.043881 -999.00  +13.00   8.08     84  +10.30 1 1 1 2 1     0    0 2.92 2.55 ZNESW 7.1 8.1 212.9 14.2 13.7 -21.1 13.6 -20.8 13.4 -19.1 13.7 -20.0
2026-01-01T03:03:35.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T03:03:35.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T03:03:35.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.043881
2026-01-01T03:03:35.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T03:03:35.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T03:03:35.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T03:03:35.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T03:03:35.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T03:03:35.756 [DEBUG] [Thread-139443] [transport.py] [_log()] EOF in transport thread
2026-01-01T03:03:35.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T03:03:05', tmtdew=3.15, humidity=80.92, cloud=0.0, wind=11.36, temperature=12.88, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T03:03:05', seeing=1.03, atlas_timestamp='2026-01-01T01:03:11.318', atlas_cloud=1, atlas_rain=1, zp_data=[0.011749999999999261, 0.06825000000000081, 0.03074999999999939, -0.005000000000000782, 0.027499999999999858, 0.04875000000000185, 0.054999999999999716, 0.11025000000000063, 0.10499999999999865, 0.12450000000000117, 0.04374999999999929, 0.03700000000000081, 0.05799999999999983, 0.08624999999999972, 0.053999999999998494, 0.028999999999999915, 0.07225000000000037, 0.17300000000000004, 0.08699999999999974, 0.0832499999999996, 0.08749999999999858, 0.06474999999999831, 0.04925000000000068, 0.08425000000000082, 0.13099999999999845, 0.10650000000000048, 0.1667500000000004, 0.12349999999999994, 0.11749999999999972, 0.11600000000000144, 0.15000000000000036, 0.2065000000000019, 0.1377499999999987], zp_timestamp='2026-01-01T00:59:00')
2026-01-01T03:03:35.843 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T03:03:35.854 [DEBUG] [Thread-139446] [transport.py] [_log()] starting thread (client mode): 0xb6b144f0
2026-01-01T03:03:35.855 [DEBUG] [Thread-139446] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T03:03:35.875 [DEBUG] [Thread-139446] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T03:03:35.876 [INFO] [Thread-139446] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T03:03:35.883 [DEBUG] [Thread-139446] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T03:03:35.883 [DEBUG] [Thread-139446] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T03:03:35.884 [DEBUG] [Thread-139446] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T03:03:35.884 [DEBUG] [Thread-139446] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:03:35.884 [DEBUG] [Thread-139446] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:03:35.884 [DEBUG] [Thread-139446] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:03:35.884 [DEBUG] [Thread-139446] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:03:35.884 [DEBUG] [Thread-139446] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T03:03:35.884 [DEBUG] [Thread-139446] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T03:03:35.884 [DEBUG] [Thread-139446] [transport.py] [_log()] client lang: <none>
2026-01-01T03:03:35.884 [DEBUG] [Thread-139446] [transport.py] [_log()] server lang: <none>
2026-01-01T03:03:35.884 [DEBUG] [Thread-139446] [transport.py] [_log()] kex follows: False
2026-01-01T03:03:35.884 [DEBUG] [Thread-139446] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T03:03:35.884 [DEBUG] [Thread-139446] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T03:03:35.884 [DEBUG] [Thread-139446] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T03:03:35.884 [DEBUG] [Thread-139446] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T03:03:35.884 [DEBUG] [Thread-139446] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T03:03:35.885 [DEBUG] [Thread-139446] [transport.py] [_log()] Compression: none
2026-01-01T03:03:35.885 [DEBUG] [Thread-139446] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T03:03:35.941 [DEBUG] [Thread-139446] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T03:03:35.942 [DEBUG] [Thread-139446] [transport.py] [_log()] Switch to new keys ...
2026-01-01T03:03:35.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T03:03:35.943 [DEBUG] [Thread-139446] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T03:03:35.944 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T03:03:35.998 [DEBUG] [Thread-139446] [transport.py] [_log()] userauth is OK
2026-01-01T03:03:35.998 [DEBUG] [Thread-139446] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T03:03:35.998 [DEBUG] [Thread-139446] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T03:03:35.998 [DEBUG] [Thread-139446] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T03:03:35.998 [DEBUG] [Thread-139446] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T03:03:36.017 [INFO] [Thread-139446] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T03:03:36.017 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T03:03:36.018 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T03:03:36.846 [DEBUG] [Thread-139446] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T03:03:36.846 [DEBUG] [Thread-139446] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T03:03:36.894 [DEBUG] [Thread-139446] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T03:03:36.894 [DEBUG] [Thread-139446] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T03:03:36.904 [DEBUG] [Thread-139446] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T03:03:36.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T03:03:36.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T03:03:36.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T03:03:36.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T03:03:36.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T03:03:36.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T03:03:36.940 [DEBUG] [Thread-139446] [transport.py] [_log()] EOF in transport thread
2026-01-01T03:03:48.763 [DEBUG] [Thread-139448 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:04:03.812 [DEBUG] [Thread-139449 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:04:06.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T03:04:06.963 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T03:04:06.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T03:04:07.390 [DEBUG] [Thread-139450 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:04:07.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 3, 3, 37), 3.07, 81.55, 0.0, 14.38, 12.86, 0, 1, 0, 2, 0, 0),)
2026-01-01T03:04:07.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 03:03:37
2026-01-01T03:04:07.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T03:04:07.948 [DEBUG] [Thread-139451] [transport.py] [_log()] starting thread (client mode): 0xb6bbf1c0
2026-01-01T03:04:07.948 [DEBUG] [Thread-139451] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T03:04:07.970 [DEBUG] [Thread-139451] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T03:04:07.970 [INFO] [Thread-139451] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T03:04:07.974 [DEBUG] [Thread-139451] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T03:04:07.974 [DEBUG] [Thread-139451] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T03:04:07.974 [DEBUG] [Thread-139451] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T03:04:07.974 [DEBUG] [Thread-139451] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:04:07.974 [DEBUG] [Thread-139451] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:04:07.974 [DEBUG] [Thread-139451] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:04:07.974 [DEBUG] [Thread-139451] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:04:07.974 [DEBUG] [Thread-139451] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T03:04:07.974 [DEBUG] [Thread-139451] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T03:04:07.974 [DEBUG] [Thread-139451] [transport.py] [_log()] client lang: <none>
2026-01-01T03:04:07.974 [DEBUG] [Thread-139451] [transport.py] [_log()] server lang: <none>
2026-01-01T03:04:07.974 [DEBUG] [Thread-139451] [transport.py] [_log()] kex follows: False
2026-01-01T03:04:07.974 [DEBUG] [Thread-139451] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T03:04:07.975 [DEBUG] [Thread-139451] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T03:04:07.975 [DEBUG] [Thread-139451] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T03:04:07.975 [DEBUG] [Thread-139451] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T03:04:07.975 [DEBUG] [Thread-139451] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T03:04:07.975 [DEBUG] [Thread-139451] [transport.py] [_log()] Compression: none
2026-01-01T03:04:07.975 [DEBUG] [Thread-139451] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T03:04:07.992 [DEBUG] [Thread-139451] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T03:04:07.993 [DEBUG] [Thread-139451] [transport.py] [_log()] Switch to new keys ...
2026-01-01T03:04:07.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T03:04:07.994 [DEBUG] [Thread-139451] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T03:04:07.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T03:04:07.996 [DEBUG] [Thread-139451] [transport.py] [_log()] userauth is OK
2026-01-01T03:04:07.996 [DEBUG] [Thread-139451] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T03:04:07.996 [DEBUG] [Thread-139451] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T03:04:07.997 [DEBUG] [Thread-139451] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T03:04:07.997 [DEBUG] [Thread-139451] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T03:04:08.021 [INFO] [Thread-139451] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T03:04:08.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T03:04:08.653 [DEBUG] [Thread-139451] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T03:04:08.654 [DEBUG] [Thread-139451] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T03:04:08.654 [DEBUG] [Thread-139451] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T03:04:08.694 [DEBUG] [Thread-139451] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T03:04:08.694 [DEBUG] [Thread-139451] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T03:04:08.697 [DEBUG] [Thread-139451] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T03:04:08.709 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T03:04:08.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T03:04:08.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T03:04:08.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T03:04:08.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T03:04:08.721 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T03:04:08.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T03:04:08.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T03:04:08.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T03:04:08.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.044228 -999.00  +13.00   6.17     84  +10.40 1 1 1 2 1     0    0 2.91 2.19 ZNESW 11.5 6.2 219.8 14.7 13.7 -21.1 13.6 -20.6 13.4 -19.2 13.7 -20.2
2026-01-01T03:04:08.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T03:04:08.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T03:04:08.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.044228
2026-01-01T03:04:08.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T03:04:08.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T03:04:08.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T03:04:08.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T03:04:08.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T03:04:08.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T03:03:37', tmtdew=3.07, humidity=81.55, cloud=0.0, wind=14.38, temperature=12.86, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T03:03:37', seeing=0.88, atlas_timestamp='2026-01-01T01:03:41.299', atlas_cloud=1, atlas_rain=1, zp_data=[0.011749999999999261, 0.06825000000000081, 0.03074999999999939, -0.005000000000000782, 0.027499999999999858, 0.04875000000000185, 0.054999999999999716, 0.11025000000000063, 0.10499999999999865, 0.12450000000000117, 0.04374999999999929, 0.03700000000000081, 0.05799999999999983, 0.08624999999999972, 0.053999999999998494, 0.028999999999999915, 0.07225000000000037, 0.17300000000000004, 0.08699999999999974, 0.0832499999999996, 0.08749999999999858, 0.06474999999999831, 0.04925000000000068, 0.08425000000000082, 0.13099999999999845, 0.10650000000000048, 0.1667500000000004, 0.12349999999999994, 0.11749999999999972, 0.11600000000000144, 0.15000000000000036, 0.2065000000000019, 0.1377499999999987], zp_timestamp='2026-01-01T01:02:00')
2026-01-01T03:04:08.724 [DEBUG] [Thread-139451] [transport.py] [_log()] EOF in transport thread
2026-01-01T03:04:08.809 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T03:04:08.824 [DEBUG] [Thread-139454] [transport.py] [_log()] starting thread (client mode): 0xb95f2d10
2026-01-01T03:04:08.824 [DEBUG] [Thread-139454] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T03:04:08.845 [DEBUG] [Thread-139454] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T03:04:08.845 [INFO] [Thread-139454] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T03:04:08.853 [DEBUG] [Thread-139454] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T03:04:08.854 [DEBUG] [Thread-139454] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T03:04:08.854 [DEBUG] [Thread-139454] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T03:04:08.854 [DEBUG] [Thread-139454] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:04:08.855 [DEBUG] [Thread-139454] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:04:08.855 [DEBUG] [Thread-139454] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:04:08.855 [DEBUG] [Thread-139454] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:04:08.855 [DEBUG] [Thread-139454] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T03:04:08.855 [DEBUG] [Thread-139454] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T03:04:08.855 [DEBUG] [Thread-139454] [transport.py] [_log()] client lang: <none>
2026-01-01T03:04:08.855 [DEBUG] [Thread-139454] [transport.py] [_log()] server lang: <none>
2026-01-01T03:04:08.855 [DEBUG] [Thread-139454] [transport.py] [_log()] kex follows: False
2026-01-01T03:04:08.855 [DEBUG] [Thread-139454] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T03:04:08.855 [DEBUG] [Thread-139454] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T03:04:08.855 [DEBUG] [Thread-139454] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T03:04:08.855 [DEBUG] [Thread-139454] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T03:04:08.856 [DEBUG] [Thread-139454] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T03:04:08.856 [DEBUG] [Thread-139454] [transport.py] [_log()] Compression: none
2026-01-01T03:04:08.856 [DEBUG] [Thread-139454] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T03:04:08.914 [DEBUG] [Thread-139454] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T03:04:08.914 [DEBUG] [Thread-139454] [transport.py] [_log()] Switch to new keys ...
2026-01-01T03:04:08.915 [DEBUG] [Thread-139454] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T03:04:08.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T03:04:08.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T03:04:08.971 [DEBUG] [Thread-139454] [transport.py] [_log()] userauth is OK
2026-01-01T03:04:08.972 [DEBUG] [Thread-139454] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T03:04:08.972 [DEBUG] [Thread-139454] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T03:04:08.972 [DEBUG] [Thread-139454] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T03:04:08.972 [DEBUG] [Thread-139454] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T03:04:08.995 [INFO] [Thread-139454] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T03:04:08.996 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T03:04:08.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T03:04:09.822 [DEBUG] [Thread-139454] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T03:04:09.822 [DEBUG] [Thread-139454] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T03:04:09.870 [DEBUG] [Thread-139454] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T03:04:09.870 [DEBUG] [Thread-139454] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T03:04:09.883 [DEBUG] [Thread-139454] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T03:04:09.892 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T03:04:09.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T03:04:09.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T03:04:09.910 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T03:04:09.910 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T03:04:09.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T03:04:09.919 [DEBUG] [Thread-139454] [transport.py] [_log()] EOF in transport thread
2026-01-01T03:04:09.978 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:04:09.979 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:04:18.845 [DEBUG] [Thread-139456 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:04:33.895 [DEBUG] [Thread-139457 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:04:39.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T03:04:39.940 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T03:04:39.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T03:04:40.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 3, 4, 9), 3.06, 81.64, 0.0, 14.77, 12.86, 0, 1, 0, 2, 0, 0),)
2026-01-01T03:04:40.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 03:04:09
2026-01-01T03:04:40.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T03:04:40.977 [DEBUG] [Thread-139458] [transport.py] [_log()] starting thread (client mode): 0xb6ba0940
2026-01-01T03:04:40.978 [DEBUG] [Thread-139458] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T03:04:40.997 [DEBUG] [Thread-139458] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T03:04:40.997 [INFO] [Thread-139458] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T03:04:41.000 [DEBUG] [Thread-139458] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T03:04:41.000 [DEBUG] [Thread-139458] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T03:04:41.000 [DEBUG] [Thread-139458] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T03:04:41.000 [DEBUG] [Thread-139458] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:04:41.000 [DEBUG] [Thread-139458] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:04:41.000 [DEBUG] [Thread-139458] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:04:41.000 [DEBUG] [Thread-139458] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:04:41.000 [DEBUG] [Thread-139458] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T03:04:41.000 [DEBUG] [Thread-139458] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T03:04:41.000 [DEBUG] [Thread-139458] [transport.py] [_log()] client lang: <none>
2026-01-01T03:04:41.000 [DEBUG] [Thread-139458] [transport.py] [_log()] server lang: <none>
2026-01-01T03:04:41.000 [DEBUG] [Thread-139458] [transport.py] [_log()] kex follows: False
2026-01-01T03:04:41.001 [DEBUG] [Thread-139458] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T03:04:41.001 [DEBUG] [Thread-139458] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T03:04:41.001 [DEBUG] [Thread-139458] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T03:04:41.001 [DEBUG] [Thread-139458] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T03:04:41.001 [DEBUG] [Thread-139458] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T03:04:41.001 [DEBUG] [Thread-139458] [transport.py] [_log()] Compression: none
2026-01-01T03:04:41.001 [DEBUG] [Thread-139458] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T03:04:41.017 [DEBUG] [Thread-139458] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T03:04:41.017 [DEBUG] [Thread-139458] [transport.py] [_log()] Switch to new keys ...
2026-01-01T03:04:41.017 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T03:04:41.017 [DEBUG] [Thread-139458] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T03:04:41.017 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T03:04:41.019 [DEBUG] [Thread-139458] [transport.py] [_log()] userauth is OK
2026-01-01T03:04:41.019 [DEBUG] [Thread-139458] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T03:04:41.019 [DEBUG] [Thread-139458] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T03:04:41.019 [DEBUG] [Thread-139458] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T03:04:41.019 [DEBUG] [Thread-139458] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T03:04:41.034 [INFO] [Thread-139458] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T03:04:41.034 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T03:04:41.695 [DEBUG] [Thread-139458] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T03:04:41.695 [DEBUG] [Thread-139458] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T03:04:41.696 [DEBUG] [Thread-139458] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T03:04:41.737 [DEBUG] [Thread-139458] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T03:04:41.737 [DEBUG] [Thread-139458] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T03:04:41.739 [DEBUG] [Thread-139458] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T03:04:41.750 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T03:04:41.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T03:04:41.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T03:04:41.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T03:04:41.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T03:04:41.758 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T03:04:41.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T03:04:41.758 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T03:04:41.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T03:04:41.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.044575 -999.00  +13.00   6.97     84  +10.30 1 1 1 2 1     0    0 2.83 1.65 ZNESW 7.8 7.0 217.0 15.1 13.7 -21.1 13.6 -20.8 13.4 -19.3 13.7 -20.2
2026-01-01T03:04:41.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T03:04:41.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T03:04:41.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.044575
2026-01-01T03:04:41.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T03:04:41.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T03:04:41.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T03:04:41.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T03:04:41.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T03:04:41.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T03:04:09', tmtdew=3.06, humidity=81.64, cloud=0.0, wind=14.77, temperature=12.86, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T03:04:09', seeing=0.93, atlas_timestamp='2026-01-01T01:04:11.280', atlas_cloud=1, atlas_rain=1, zp_data=[0.011749999999999261, 0.06825000000000081, 0.03074999999999939, -0.005000000000000782, 0.027499999999999858, 0.04875000000000185, 0.054999999999999716, 0.11025000000000063, 0.10499999999999865, 0.12450000000000117, 0.04374999999999929, 0.03700000000000081, 0.05799999999999983, 0.08624999999999972, 0.053999999999998494, 0.028999999999999915, 0.07225000000000037, 0.17300000000000004, 0.08699999999999974, 0.0832499999999996, 0.08749999999999858, 0.06474999999999831, 0.04925000000000068, 0.08425000000000082, 0.13099999999999845, 0.10650000000000048, 0.1667500000000004, 0.12349999999999994, 0.11749999999999972, 0.11600000000000144, 0.15000000000000036, 0.2065000000000019, 0.1377499999999987], zp_timestamp='2026-01-01T01:02:00')
2026-01-01T03:04:41.759 [DEBUG] [Thread-139458] [transport.py] [_log()] EOF in transport thread
2026-01-01T03:04:41.837 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T03:04:41.849 [DEBUG] [Thread-139461] [transport.py] [_log()] starting thread (client mode): 0xb6ba3ee0
2026-01-01T03:04:41.849 [DEBUG] [Thread-139461] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T03:04:41.865 [DEBUG] [Thread-139461] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T03:04:41.865 [INFO] [Thread-139461] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T03:04:41.873 [DEBUG] [Thread-139461] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T03:04:41.873 [DEBUG] [Thread-139461] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T03:04:41.873 [DEBUG] [Thread-139461] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T03:04:41.873 [DEBUG] [Thread-139461] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:04:41.873 [DEBUG] [Thread-139461] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:04:41.873 [DEBUG] [Thread-139461] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:04:41.873 [DEBUG] [Thread-139461] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:04:41.873 [DEBUG] [Thread-139461] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T03:04:41.873 [DEBUG] [Thread-139461] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T03:04:41.873 [DEBUG] [Thread-139461] [transport.py] [_log()] client lang: <none>
2026-01-01T03:04:41.873 [DEBUG] [Thread-139461] [transport.py] [_log()] server lang: <none>
2026-01-01T03:04:41.873 [DEBUG] [Thread-139461] [transport.py] [_log()] kex follows: False
2026-01-01T03:04:41.873 [DEBUG] [Thread-139461] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T03:04:41.873 [DEBUG] [Thread-139461] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T03:04:41.873 [DEBUG] [Thread-139461] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T03:04:41.873 [DEBUG] [Thread-139461] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T03:04:41.873 [DEBUG] [Thread-139461] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T03:04:41.873 [DEBUG] [Thread-139461] [transport.py] [_log()] Compression: none
2026-01-01T03:04:41.873 [DEBUG] [Thread-139461] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T03:04:41.928 [DEBUG] [Thread-139461] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T03:04:41.928 [DEBUG] [Thread-139461] [transport.py] [_log()] Switch to new keys ...
2026-01-01T03:04:41.928 [DEBUG] [Thread-139461] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T03:04:41.928 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T03:04:41.928 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T03:04:41.985 [DEBUG] [Thread-139461] [transport.py] [_log()] userauth is OK
2026-01-01T03:04:41.985 [DEBUG] [Thread-139461] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T03:04:41.985 [DEBUG] [Thread-139461] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T03:04:41.985 [DEBUG] [Thread-139461] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T03:04:41.985 [DEBUG] [Thread-139461] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T03:04:41.999 [INFO] [Thread-139461] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T03:04:41.999 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T03:04:41.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T03:04:42.861 [DEBUG] [Thread-139461] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T03:04:42.861 [DEBUG] [Thread-139461] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T03:04:42.909 [DEBUG] [Thread-139461] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T03:04:42.909 [DEBUG] [Thread-139461] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T03:04:42.917 [DEBUG] [Thread-139461] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T03:04:42.925 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T03:04:42.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T03:04: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
2026-01-01T03:04:42.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T03:04:42.941 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T03:04:42.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T03:04:42.949 [DEBUG] [Thread-139461] [transport.py] [_log()] EOF in transport thread
2026-01-01T03:04:48.926 [DEBUG] [Thread-139463 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:05:03.976 [DEBUG] [Thread-139464 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:05:07.468 [DEBUG] [Thread-139465 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:05:10.179 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:05:10.180 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:05:12.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T03:05:12.972 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T03:05:12.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T03:05:13.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 3, 4, 41), 3.06, 81.6, 0.0, 13.97, 12.83, 0, 1, 0, 2, 0, 0),)
2026-01-01T03:05:13.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 03:04:41
2026-01-01T03:05:13.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T03:05:13.983 [DEBUG] [Thread-139466] [transport.py] [_log()] starting thread (client mode): 0xb95f2d10
2026-01-01T03:05:13.983 [DEBUG] [Thread-139466] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T03:05:14.010 [DEBUG] [Thread-139466] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T03:05:14.010 [INFO] [Thread-139466] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T03:05:14.012 [DEBUG] [Thread-139466] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T03:05:14.012 [DEBUG] [Thread-139466] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T03:05:14.012 [DEBUG] [Thread-139466] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T03:05:14.012 [DEBUG] [Thread-139466] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:05:14.012 [DEBUG] [Thread-139466] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:05:14.012 [DEBUG] [Thread-139466] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:05:14.012 [DEBUG] [Thread-139466] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:05:14.012 [DEBUG] [Thread-139466] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T03:05:14.012 [DEBUG] [Thread-139466] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T03:05:14.012 [DEBUG] [Thread-139466] [transport.py] [_log()] client lang: <none>
2026-01-01T03:05:14.012 [DEBUG] [Thread-139466] [transport.py] [_log()] server lang: <none>
2026-01-01T03:05:14.012 [DEBUG] [Thread-139466] [transport.py] [_log()] kex follows: False
2026-01-01T03:05:14.012 [DEBUG] [Thread-139466] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T03:05:14.012 [DEBUG] [Thread-139466] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T03:05:14.013 [DEBUG] [Thread-139466] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T03:05:14.013 [DEBUG] [Thread-139466] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T03:05:14.013 [DEBUG] [Thread-139466] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T03:05:14.013 [DEBUG] [Thread-139466] [transport.py] [_log()] Compression: none
2026-01-01T03:05:14.013 [DEBUG] [Thread-139466] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T03:05:14.024 [DEBUG] [Thread-139466] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T03:05:14.025 [DEBUG] [Thread-139466] [transport.py] [_log()] Switch to new keys ...
2026-01-01T03:05:14.025 [DEBUG] [Thread-139466] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T03:05:14.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T03:05:14.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T03:05:14.026 [DEBUG] [Thread-139466] [transport.py] [_log()] userauth is OK
2026-01-01T03:05:14.026 [DEBUG] [Thread-139466] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T03:05:14.026 [DEBUG] [Thread-139466] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T03:05:14.026 [DEBUG] [Thread-139466] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T03:05:14.026 [DEBUG] [Thread-139466] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T03:05:14.042 [INFO] [Thread-139466] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T03:05:14.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T03:05:14.623 [DEBUG] [Thread-139466] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T03:05:14.623 [DEBUG] [Thread-139466] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T03:05:14.623 [DEBUG] [Thread-139466] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T03:05:14.663 [DEBUG] [Thread-139466] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T03:05:14.663 [DEBUG] [Thread-139466] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T03:05:14.666 [DEBUG] [Thread-139466] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T03:05:14.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T03:05:14.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T03:05:14.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T03:05:14.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T03:05:14.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T03:05:14.685 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T03:05:14.686 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T03:05:14.686 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T03:05:14.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T03:05:14.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.044922 -999.00  +13.00   8.60     84  +10.30 1 1 1 2 1     0    0 2.78 1.37 ZNESW 9.3 8.6 213.5 15.2 13.7 -21.1 13.6 -20.9 13.4 -19.3 13.7 -20.1
2026-01-01T03:05:14.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T03:05:14.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T03:05:14.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.044922
2026-01-01T03:05:14.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T03:05:14.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T03:05:14.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T03:05:14.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T03:05:14.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T03:05:14.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T03:04:41', tmtdew=3.06, humidity=81.6, cloud=0.0, wind=13.97, temperature=12.83, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T03:04:41', seeing=1.02, atlas_timestamp='2026-01-01T01:04:41.261', atlas_cloud=1, atlas_rain=1, zp_data=[0.011749999999999261, 0.06825000000000081, 0.03074999999999939, -0.005000000000000782, 0.027499999999999858, 0.04875000000000185, 0.054999999999999716, 0.11025000000000063, 0.10499999999999865, 0.12450000000000117, 0.04374999999999929, 0.03700000000000081, 0.05799999999999983, 0.08624999999999972, 0.053999999999998494, 0.028999999999999915, 0.07225000000000037, 0.17300000000000004, 0.08699999999999974, 0.0832499999999996, 0.08749999999999858, 0.06474999999999831, 0.04925000000000068, 0.08425000000000082, 0.13099999999999845, 0.10650000000000048, 0.1667500000000004, 0.12349999999999994, 0.11749999999999972, 0.11600000000000144, 0.15000000000000036, 0.2065000000000019, 0.1377499999999987], zp_timestamp='2026-01-01T01:02:00')
2026-01-01T03:05:14.687 [DEBUG] [Thread-139466] [transport.py] [_log()] EOF in transport thread
2026-01-01T03:05:14.761 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T03:05:14.773 [DEBUG] [Thread-139469] [transport.py] [_log()] starting thread (client mode): 0xb1795840
2026-01-01T03:05:14.773 [DEBUG] [Thread-139469] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T03:05:14.789 [DEBUG] [Thread-139469] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T03:05:14.789 [INFO] [Thread-139469] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T03:05:14.796 [DEBUG] [Thread-139469] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T03:05:14.797 [DEBUG] [Thread-139469] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T03:05:14.797 [DEBUG] [Thread-139469] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T03:05:14.797 [DEBUG] [Thread-139469] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:05:14.797 [DEBUG] [Thread-139469] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:05:14.797 [DEBUG] [Thread-139469] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:05:14.797 [DEBUG] [Thread-139469] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:05:14.797 [DEBUG] [Thread-139469] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T03:05:14.797 [DEBUG] [Thread-139469] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T03:05:14.797 [DEBUG] [Thread-139469] [transport.py] [_log()] client lang: <none>
2026-01-01T03:05:14.797 [DEBUG] [Thread-139469] [transport.py] [_log()] server lang: <none>
2026-01-01T03:05:14.797 [DEBUG] [Thread-139469] [transport.py] [_log()] kex follows: False
2026-01-01T03:05:14.797 [DEBUG] [Thread-139469] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T03:05:14.797 [DEBUG] [Thread-139469] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T03:05:14.797 [DEBUG] [Thread-139469] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T03:05:14.797 [DEBUG] [Thread-139469] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T03:05:14.797 [DEBUG] [Thread-139469] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T03:05:14.797 [DEBUG] [Thread-139469] [transport.py] [_log()] Compression: none
2026-01-01T03:05:14.797 [DEBUG] [Thread-139469] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T03:05:14.855 [DEBUG] [Thread-139469] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T03:05:14.856 [DEBUG] [Thread-139469] [transport.py] [_log()] Switch to new keys ...
2026-01-01T03:05:14.856 [DEBUG] [Thread-139469] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T03:05:14.856 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T03:05:14.856 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T03:05:14.913 [DEBUG] [Thread-139469] [transport.py] [_log()] userauth is OK
2026-01-01T03:05:14.913 [DEBUG] [Thread-139469] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T03:05:14.913 [DEBUG] [Thread-139469] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T03:05:14.913 [DEBUG] [Thread-139469] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T03:05:14.913 [DEBUG] [Thread-139469] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T03:05:14.927 [INFO] [Thread-139469] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T03:05:14.928 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T03:05:14.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T03:05:15.811 [DEBUG] [Thread-139469] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T03:05:15.811 [DEBUG] [Thread-139469] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T03:05:15.859 [DEBUG] [Thread-139469] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T03:05:15.860 [DEBUG] [Thread-139469] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T03:05:15.869 [DEBUG] [Thread-139469] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T03:05:15.878 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T03:05:15.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T03:05: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
2026-01-01T03:05:15.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T03:05:15.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T03:05:15.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T03:05:15.905 [DEBUG] [Thread-139469] [transport.py] [_log()] EOF in transport thread
2026-01-01T03:05:19.008 [DEBUG] [Thread-139471 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:05:34.057 [DEBUG] [Thread-139472 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:05:45.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T03:05:45.927 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T03:05:45.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T03:05:46.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 3, 5, 13), 3.06, 81.62, 0.0, 14.38, 12.85, 0, 1, 0, 2, 0, 0),)
2026-01-01T03:05:46.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 03:05:13
2026-01-01T03:05:46.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T03:05:46.998 [DEBUG] [Thread-139473] [transport.py] [_log()] starting thread (client mode): 0xb1795d20
2026-01-01T03:05:46.998 [DEBUG] [Thread-139473] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T03:05:47.018 [DEBUG] [Thread-139473] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T03:05:47.018 [INFO] [Thread-139473] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T03:05:47.021 [DEBUG] [Thread-139473] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T03:05:47.021 [DEBUG] [Thread-139473] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T03:05:47.021 [DEBUG] [Thread-139473] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T03:05:47.022 [DEBUG] [Thread-139473] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:05:47.022 [DEBUG] [Thread-139473] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:05:47.022 [DEBUG] [Thread-139473] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:05:47.022 [DEBUG] [Thread-139473] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:05:47.022 [DEBUG] [Thread-139473] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T03:05:47.022 [DEBUG] [Thread-139473] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T03:05:47.022 [DEBUG] [Thread-139473] [transport.py] [_log()] client lang: <none>
2026-01-01T03:05:47.022 [DEBUG] [Thread-139473] [transport.py] [_log()] server lang: <none>
2026-01-01T03:05:47.022 [DEBUG] [Thread-139473] [transport.py] [_log()] kex follows: False
2026-01-01T03:05:47.022 [DEBUG] [Thread-139473] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T03:05:47.022 [DEBUG] [Thread-139473] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T03:05:47.022 [DEBUG] [Thread-139473] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T03:05:47.022 [DEBUG] [Thread-139473] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T03:05:47.022 [DEBUG] [Thread-139473] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T03:05:47.022 [DEBUG] [Thread-139473] [transport.py] [_log()] Compression: none
2026-01-01T03:05:47.022 [DEBUG] [Thread-139473] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T03:05:47.036 [DEBUG] [Thread-139473] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T03:05:47.036 [DEBUG] [Thread-139473] [transport.py] [_log()] Switch to new keys ...
2026-01-01T03:05:47.036 [DEBUG] [Thread-139473] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T03:05:47.036 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T03:05:47.036 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T03:05:47.037 [DEBUG] [Thread-139473] [transport.py] [_log()] userauth is OK
2026-01-01T03:05:47.037 [DEBUG] [Thread-139473] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T03:05:47.037 [DEBUG] [Thread-139473] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T03:05:47.037 [DEBUG] [Thread-139473] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T03:05:47.037 [DEBUG] [Thread-139473] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T03:05:47.052 [INFO] [Thread-139473] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T03:05:47.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T03:05:47.642 [DEBUG] [Thread-139473] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T03:05:47.642 [DEBUG] [Thread-139473] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T03:05:47.642 [DEBUG] [Thread-139473] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T03:05:47.684 [DEBUG] [Thread-139473] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T03:05:47.684 [DEBUG] [Thread-139473] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T03:05:47.686 [DEBUG] [Thread-139473] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T03:05:47.697 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T03:05:47.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T03:05:47.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T03:05:47.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T03:05:47.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T03:05:47.703 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T03:05:47.703 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T03:05:47.703 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T03:05:47.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T03:05:47.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.044922 -999.00  +13.00   8.60     84  +10.30 1 1 1 2 1     0    0 2.78 1.37 ZNESW 9.3 8.6 213.5 15.2 13.7 -21.1 13.6 -20.9 13.4 -19.3 13.7 -20.1
2026-01-01T03:05:47.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T03:05:47.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T03:05:47.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.044922
2026-01-01T03:05:47.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T03:05:47.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T03:05:47.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T03:05:47.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T03:05:47.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T03:05:47.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T03:05:13', tmtdew=3.06, humidity=81.62, cloud=0.0, wind=14.38, temperature=12.85, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T03:05:45', seeing=0.95, atlas_timestamp='2026-01-01T01:04:41.261', atlas_cloud=1, atlas_rain=1, zp_data=[0.011749999999999261, 0.06825000000000081, 0.03074999999999939, -0.005000000000000782, 0.027499999999999858, 0.04875000000000185, 0.054999999999999716, 0.11025000000000063, 0.10499999999999865, 0.12450000000000117, 0.04374999999999929, 0.03700000000000081, 0.05799999999999983, 0.08624999999999972, 0.053999999999998494, 0.028999999999999915, 0.07225000000000037, 0.17300000000000004, 0.08699999999999974, 0.0832499999999996, 0.08749999999999858, 0.06474999999999831, 0.04925000000000068, 0.08425000000000082, 0.13099999999999845, 0.10650000000000048, 0.1667500000000004, 0.12349999999999994, 0.11749999999999972, 0.11600000000000144, 0.15000000000000036, 0.2065000000000019, 0.1377499999999987], zp_timestamp='2026-01-01T01:02:00')
2026-01-01T03:05:47.704 [DEBUG] [Thread-139473] [transport.py] [_log()] EOF in transport thread
2026-01-01T03:05:47.777 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T03:05:47.788 [DEBUG] [Thread-139476] [transport.py] [_log()] starting thread (client mode): 0xb6ba14b0
2026-01-01T03:05:47.788 [DEBUG] [Thread-139476] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T03:05:47.802 [DEBUG] [Thread-139476] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T03:05:47.802 [INFO] [Thread-139476] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T03:05:47.810 [DEBUG] [Thread-139476] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T03:05:47.810 [DEBUG] [Thread-139476] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T03:05:47.810 [DEBUG] [Thread-139476] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T03:05:47.810 [DEBUG] [Thread-139476] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:05:47.810 [DEBUG] [Thread-139476] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:05:47.810 [DEBUG] [Thread-139476] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:05:47.810 [DEBUG] [Thread-139476] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:05:47.810 [DEBUG] [Thread-139476] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T03:05:47.810 [DEBUG] [Thread-139476] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T03:05:47.810 [DEBUG] [Thread-139476] [transport.py] [_log()] client lang: <none>
2026-01-01T03:05:47.810 [DEBUG] [Thread-139476] [transport.py] [_log()] server lang: <none>
2026-01-01T03:05:47.810 [DEBUG] [Thread-139476] [transport.py] [_log()] kex follows: False
2026-01-01T03:05:47.810 [DEBUG] [Thread-139476] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T03:05:47.810 [DEBUG] [Thread-139476] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T03:05:47.810 [DEBUG] [Thread-139476] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T03:05:47.810 [DEBUG] [Thread-139476] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T03:05:47.810 [DEBUG] [Thread-139476] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T03:05:47.810 [DEBUG] [Thread-139476] [transport.py] [_log()] Compression: none
2026-01-01T03:05:47.810 [DEBUG] [Thread-139476] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T03:05:47.868 [DEBUG] [Thread-139476] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T03:05:47.868 [DEBUG] [Thread-139476] [transport.py] [_log()] Switch to new keys ...
2026-01-01T03:05:47.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T03:05:47.869 [DEBUG] [Thread-139476] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T03:05:47.870 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T03:05:47.923 [DEBUG] [Thread-139476] [transport.py] [_log()] userauth is OK
2026-01-01T03:05:47.924 [DEBUG] [Thread-139476] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T03:05:47.924 [DEBUG] [Thread-139476] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T03:05:47.924 [DEBUG] [Thread-139476] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T03:05:47.924 [DEBUG] [Thread-139476] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T03:05:47.942 [INFO] [Thread-139476] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T03:05:47.943 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T03:05:47.943 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T03:05:48.746 [DEBUG] [Thread-139476] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T03:05:48.747 [DEBUG] [Thread-139476] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T03:05:48.794 [DEBUG] [Thread-139476] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T03:05:48.794 [DEBUG] [Thread-139476] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T03:05:48.803 [DEBUG] [Thread-139476] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T03:05:48.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T03:05:48.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T03:05:48.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T03:05:48.831 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T03:05:48.832 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T03:05:48.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T03:05:48.840 [DEBUG] [Thread-139476] [transport.py] [_log()] EOF in transport thread
2026-01-01T03:05:49.097 [DEBUG] [Thread-139478 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:06:04.144 [DEBUG] [Thread-139479 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:06:07.547 [DEBUG] [Thread-139480 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:06:10.375 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:06:10.377 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:06:18.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T03:06:18.862 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T03:06:18.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T03:06:19.180 [DEBUG] [Thread-139481 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:06:19.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 3, 5, 45), 3.05, 81.67, 0.0, 16.25, 12.88, 0, 1, 0, 2, 0, 0),)
2026-01-01T03:06:19.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 03:05:45
2026-01-01T03:06:19.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T03:06:19.900 [DEBUG] [Thread-139482] [transport.py] [_log()] starting thread (client mode): 0xb6bbf820
2026-01-01T03:06:19.901 [DEBUG] [Thread-139482] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T03:06:19.919 [DEBUG] [Thread-139482] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T03:06:19.919 [INFO] [Thread-139482] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T03:06:19.922 [DEBUG] [Thread-139482] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T03:06:19.923 [DEBUG] [Thread-139482] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T03:06:19.923 [DEBUG] [Thread-139482] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T03:06:19.923 [DEBUG] [Thread-139482] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:06:19.923 [DEBUG] [Thread-139482] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:06:19.923 [DEBUG] [Thread-139482] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:06:19.923 [DEBUG] [Thread-139482] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:06:19.923 [DEBUG] [Thread-139482] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T03:06:19.923 [DEBUG] [Thread-139482] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T03:06:19.923 [DEBUG] [Thread-139482] [transport.py] [_log()] client lang: <none>
2026-01-01T03:06:19.923 [DEBUG] [Thread-139482] [transport.py] [_log()] server lang: <none>
2026-01-01T03:06:19.923 [DEBUG] [Thread-139482] [transport.py] [_log()] kex follows: False
2026-01-01T03:06:19.923 [DEBUG] [Thread-139482] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T03:06:19.923 [DEBUG] [Thread-139482] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T03:06:19.923 [DEBUG] [Thread-139482] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T03:06:19.924 [DEBUG] [Thread-139482] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T03:06:19.924 [DEBUG] [Thread-139482] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T03:06:19.924 [DEBUG] [Thread-139482] [transport.py] [_log()] Compression: none
2026-01-01T03:06:19.924 [DEBUG] [Thread-139482] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T03:06:19.942 [DEBUG] [Thread-139482] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T03:06:19.942 [DEBUG] [Thread-139482] [transport.py] [_log()] Switch to new keys ...
2026-01-01T03:06:19.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T03:06:19.943 [DEBUG] [Thread-139482] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T03:06:19.944 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T03:06:19.945 [DEBUG] [Thread-139482] [transport.py] [_log()] userauth is OK
2026-01-01T03:06:19.945 [DEBUG] [Thread-139482] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T03:06:19.945 [DEBUG] [Thread-139482] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T03:06:19.945 [DEBUG] [Thread-139482] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T03:06:19.945 [DEBUG] [Thread-139482] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T03:06:19.970 [INFO] [Thread-139482] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T03:06:19.971 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T03:06:20.645 [DEBUG] [Thread-139482] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T03:06:20.645 [DEBUG] [Thread-139482] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T03:06:20.645 [DEBUG] [Thread-139482] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T03:06:20.686 [DEBUG] [Thread-139482] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T03:06:20.686 [DEBUG] [Thread-139482] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T03:06:20.689 [DEBUG] [Thread-139482] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T03:06:20.701 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T03:06:20.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T03:06:20.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T03:06:20.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T03:06:20.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T03:06:20.713 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T03:06:20.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T03:06:20.714 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T03:06:20.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T03:06:20.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.045617 -999.00  +12.90  10.82     83  +10.30 1 1 1 2 1     0    0 2.78 -0.48 ZNESW 6.4 10.8 212.4 16.4 13.7 -21.1 13.6 -20.8 13.4 -19.2 13.6 -20.3
2026-01-01T03:06:20.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T03:06:20.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T03:06:20.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.045617
2026-01-01T03:06:20.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T03:06:20.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T03:06:20.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T03:06:20.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T03:06:20.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T03:06:20.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T03:05:45', tmtdew=3.05, humidity=81.67, cloud=0.0, wind=16.25, temperature=12.88, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T03:06:17', seeing=0.95, atlas_timestamp='2026-01-01T01:05:41.309', atlas_cloud=1, atlas_rain=1, zp_data=[0.011749999999999261, 0.06825000000000081, 0.03074999999999939, -0.005000000000000782, 0.027499999999999858, 0.04875000000000185, 0.054999999999999716, 0.11025000000000063, 0.10499999999999865, 0.12450000000000117, 0.04374999999999929, 0.03700000000000081, 0.05799999999999983, 0.08624999999999972, 0.053999999999998494, 0.028999999999999915, 0.07225000000000037, 0.17300000000000004, 0.08699999999999974, 0.0832499999999996, 0.08749999999999858, 0.06474999999999831, 0.04925000000000068, 0.08425000000000082, 0.13099999999999845, 0.10650000000000048, 0.1667500000000004, 0.12349999999999994, 0.11749999999999972, 0.11600000000000144, 0.15000000000000036, 0.2065000000000019, 0.1377499999999987], zp_timestamp='2026-01-01T01:02:00')
2026-01-01T03:06:20.716 [DEBUG] [Thread-139482] [transport.py] [_log()] EOF in transport thread
2026-01-01T03:06:20.799 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T03:06:20.812 [DEBUG] [Thread-139485] [transport.py] [_log()] starting thread (client mode): 0xb6b14d90
2026-01-01T03:06:20.812 [DEBUG] [Thread-139485] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T03:06:20.827 [DEBUG] [Thread-139485] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T03:06:20.827 [INFO] [Thread-139485] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T03:06:20.835 [DEBUG] [Thread-139485] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T03:06:20.835 [DEBUG] [Thread-139485] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T03:06:20.835 [DEBUG] [Thread-139485] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T03:06:20.835 [DEBUG] [Thread-139485] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:06:20.835 [DEBUG] [Thread-139485] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:06:20.835 [DEBUG] [Thread-139485] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:06:20.835 [DEBUG] [Thread-139485] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:06:20.835 [DEBUG] [Thread-139485] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T03:06:20.835 [DEBUG] [Thread-139485] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T03:06:20.835 [DEBUG] [Thread-139485] [transport.py] [_log()] client lang: <none>
2026-01-01T03:06:20.835 [DEBUG] [Thread-139485] [transport.py] [_log()] server lang: <none>
2026-01-01T03:06:20.835 [DEBUG] [Thread-139485] [transport.py] [_log()] kex follows: False
2026-01-01T03:06:20.835 [DEBUG] [Thread-139485] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T03:06:20.835 [DEBUG] [Thread-139485] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T03:06:20.836 [DEBUG] [Thread-139485] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T03:06:20.836 [DEBUG] [Thread-139485] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T03:06:20.836 [DEBUG] [Thread-139485] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T03:06:20.836 [DEBUG] [Thread-139485] [transport.py] [_log()] Compression: none
2026-01-01T03:06:20.836 [DEBUG] [Thread-139485] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T03:06:20.893 [DEBUG] [Thread-139485] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T03:06:20.893 [DEBUG] [Thread-139485] [transport.py] [_log()] Switch to new keys ...
2026-01-01T03:06:20.894 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T03:06:20.895 [DEBUG] [Thread-139485] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T03:06:20.895 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T03:06:20.950 [DEBUG] [Thread-139485] [transport.py] [_log()] userauth is OK
2026-01-01T03:06:20.950 [DEBUG] [Thread-139485] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T03:06:20.950 [DEBUG] [Thread-139485] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T03:06:20.950 [DEBUG] [Thread-139485] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T03:06:20.950 [DEBUG] [Thread-139485] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T03:06:20.969 [INFO] [Thread-139485] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T03:06:20.970 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T03:06:20.970 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T03:06:21.822 [DEBUG] [Thread-139485] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T03:06:21.822 [DEBUG] [Thread-139485] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T03:06:21.870 [DEBUG] [Thread-139485] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T03:06:21.870 [DEBUG] [Thread-139485] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T03:06:21.880 [DEBUG] [Thread-139485] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T03:06:21.889 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T03:06:21.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T03:06:21.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T03:06:21.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T03:06:21.908 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T03:06:21.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T03:06:21.917 [DEBUG] [Thread-139485] [transport.py] [_log()] EOF in transport thread
2026-01-01T03:06:34.214 [DEBUG] [Thread-139487 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:06:49.269 [DEBUG] [Thread-139488 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:06:51.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T03:06:51.939 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T03:06:51.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T03:06:52.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 3, 6, 49), 3.07, 81.54, 0.0, 16.25, 12.86, 0, 1, 0, 2, 0, 0),)
2026-01-01T03:06:52.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 03:06:49
2026-01-01T03:06:52.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T03:06:52.956 [DEBUG] [Thread-139489] [transport.py] [_log()] starting thread (client mode): 0xb9544820
2026-01-01T03:06:52.956 [DEBUG] [Thread-139489] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T03:06:52.977 [DEBUG] [Thread-139489] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T03:06:52.977 [INFO] [Thread-139489] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T03:06:52.980 [DEBUG] [Thread-139489] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T03:06:52.980 [DEBUG] [Thread-139489] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T03:06:52.980 [DEBUG] [Thread-139489] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T03:06:52.980 [DEBUG] [Thread-139489] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:06:52.980 [DEBUG] [Thread-139489] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:06:52.980 [DEBUG] [Thread-139489] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:06:52.980 [DEBUG] [Thread-139489] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:06:52.980 [DEBUG] [Thread-139489] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T03:06:52.980 [DEBUG] [Thread-139489] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T03:06:52.980 [DEBUG] [Thread-139489] [transport.py] [_log()] client lang: <none>
2026-01-01T03:06:52.980 [DEBUG] [Thread-139489] [transport.py] [_log()] server lang: <none>
2026-01-01T03:06:52.981 [DEBUG] [Thread-139489] [transport.py] [_log()] kex follows: False
2026-01-01T03:06:52.981 [DEBUG] [Thread-139489] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T03:06:52.981 [DEBUG] [Thread-139489] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T03:06:52.981 [DEBUG] [Thread-139489] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T03:06:52.981 [DEBUG] [Thread-139489] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T03:06:52.981 [DEBUG] [Thread-139489] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T03:06:52.981 [DEBUG] [Thread-139489] [transport.py] [_log()] Compression: none
2026-01-01T03:06:52.981 [DEBUG] [Thread-139489] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T03:06:52.990 [DEBUG] [Thread-139489] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T03:06:52.991 [DEBUG] [Thread-139489] [transport.py] [_log()] Switch to new keys ...
2026-01-01T03:06:52.991 [DEBUG] [Thread-139489] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T03:06:52.991 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T03:06:52.992 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T03:06:52.993 [DEBUG] [Thread-139489] [transport.py] [_log()] userauth is OK
2026-01-01T03:06:52.993 [DEBUG] [Thread-139489] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T03:06:52.993 [DEBUG] [Thread-139489] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T03:06:52.994 [DEBUG] [Thread-139489] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T03:06:52.994 [DEBUG] [Thread-139489] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T03:06:53.013 [INFO] [Thread-139489] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T03:06:53.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T03:06:53.676 [DEBUG] [Thread-139489] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T03:06:53.677 [DEBUG] [Thread-139489] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T03:06:53.677 [DEBUG] [Thread-139489] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T03:06:53.719 [DEBUG] [Thread-139489] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T03:06:53.720 [DEBUG] [Thread-139489] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T03:06:53.724 [DEBUG] [Thread-139489] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T03:06:53.734 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T03:06:53.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T03:06:53.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T03:06:53.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T03:06:53.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T03:06:53.748 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T03:06:53.748 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T03:06:53.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T03:06:53.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T03:06:53.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.045963 -999.00  +13.00   5.12     83  +10.30 1 1 1 2 1     0    0 2.82 -1.48 ZNESW 8.3 5.1 205.0 13.3 13.7 -21.1 13.5 -20.8 13.3 -19.3 13.7 -20.2
2026-01-01T03:06:53.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T03:06:53.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T03:06:53.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.045963
2026-01-01T03:06:53.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T03:06:53.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T03:06:53.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T03:06:53.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T03:06:53.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T03:06:53.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T03:06:49', tmtdew=3.07, humidity=81.54, cloud=0.0, wind=16.25, temperature=12.86, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T03:06:49', seeing=0.99, atlas_timestamp='2026-01-01T01:06:11.203', atlas_cloud=1, atlas_rain=1, zp_data=[0.011749999999999261, 0.06825000000000081, 0.03074999999999939, -0.005000000000000782, 0.027499999999999858, 0.04875000000000185, 0.054999999999999716, 0.11025000000000063, 0.10499999999999865, 0.12450000000000117, 0.04374999999999929, 0.03700000000000081, 0.05799999999999983, 0.08624999999999972, 0.053999999999998494, 0.028999999999999915, 0.07225000000000037, 0.17300000000000004, 0.08699999999999974, 0.0832499999999996, 0.08749999999999858, 0.06474999999999831, 0.04925000000000068, 0.08425000000000082, 0.13099999999999845, 0.10650000000000048, 0.1667500000000004, 0.12349999999999994, 0.11749999999999972, 0.11600000000000144, 0.15000000000000036, 0.2065000000000019, 0.1377499999999987], zp_timestamp='2026-01-01T01:02:00')
2026-01-01T03:06:53.751 [DEBUG] [Thread-139489] [transport.py] [_log()] EOF in transport thread
2026-01-01T03:06:53.835 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T03:06:53.847 [DEBUG] [Thread-139492] [transport.py] [_log()] starting thread (client mode): 0xb95b1a80
2026-01-01T03:06:53.847 [DEBUG] [Thread-139492] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T03:06:53.866 [DEBUG] [Thread-139492] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T03:06:53.867 [INFO] [Thread-139492] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T03:06:53.874 [DEBUG] [Thread-139492] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T03:06:53.874 [DEBUG] [Thread-139492] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T03:06:53.874 [DEBUG] [Thread-139492] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T03:06:53.874 [DEBUG] [Thread-139492] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:06:53.874 [DEBUG] [Thread-139492] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:06:53.874 [DEBUG] [Thread-139492] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:06:53.875 [DEBUG] [Thread-139492] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:06:53.875 [DEBUG] [Thread-139492] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T03:06:53.875 [DEBUG] [Thread-139492] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T03:06:53.875 [DEBUG] [Thread-139492] [transport.py] [_log()] client lang: <none>
2026-01-01T03:06:53.875 [DEBUG] [Thread-139492] [transport.py] [_log()] server lang: <none>
2026-01-01T03:06:53.875 [DEBUG] [Thread-139492] [transport.py] [_log()] kex follows: False
2026-01-01T03:06:53.875 [DEBUG] [Thread-139492] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T03:06:53.875 [DEBUG] [Thread-139492] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T03:06:53.875 [DEBUG] [Thread-139492] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T03:06:53.875 [DEBUG] [Thread-139492] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T03:06:53.875 [DEBUG] [Thread-139492] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T03:06:53.875 [DEBUG] [Thread-139492] [transport.py] [_log()] Compression: none
2026-01-01T03:06:53.875 [DEBUG] [Thread-139492] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T03:06:53.933 [DEBUG] [Thread-139492] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T03:06:53.934 [DEBUG] [Thread-139492] [transport.py] [_log()] Switch to new keys ...
2026-01-01T03:06:53.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T03:06:53.935 [DEBUG] [Thread-139492] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T03:06:53.936 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T03:06:53.992 [DEBUG] [Thread-139492] [transport.py] [_log()] userauth is OK
2026-01-01T03:06:53.992 [DEBUG] [Thread-139492] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T03:06:53.992 [DEBUG] [Thread-139492] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T03:06:53.992 [DEBUG] [Thread-139492] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T03:06:53.992 [DEBUG] [Thread-139492] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T03:06:54.013 [INFO] [Thread-139492] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T03:06:54.013 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T03:06:54.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T03:06:54.881 [DEBUG] [Thread-139492] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T03:06:54.881 [DEBUG] [Thread-139492] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T03:06:54.929 [DEBUG] [Thread-139492] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T03:06:54.929 [DEBUG] [Thread-139492] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T03:06:54.939 [DEBUG] [Thread-139492] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T03:06:54.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T03:06:54.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T03:06:54.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T03:06:54.966 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T03:06:54.967 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T03:06:54.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T03:06:54.976 [DEBUG] [Thread-139492] [transport.py] [_log()] EOF in transport thread
2026-01-01T03:07:04.308 [DEBUG] [Thread-139494 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:07:07.610 [DEBUG] [Thread-139495 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:07:10.577 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:07:10.579 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:07:19.357 [DEBUG] [Thread-139496 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:07:24.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T03:07:24.997 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T03:07:24.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T03:07:25.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 3, 7, 21), 3.07, 81.54, 0.0, 15.53, 12.88, 0, 1, 0, 2, 0, 0),)
2026-01-01T03:07:25.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 03:07:21
2026-01-01T03:07:25.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T03:07:25.994 [DEBUG] [Thread-139497] [transport.py] [_log()] starting thread (client mode): 0xb6b29a80
2026-01-01T03:07:25.994 [DEBUG] [Thread-139497] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T03:07:26.014 [DEBUG] [Thread-139497] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T03:07:26.014 [INFO] [Thread-139497] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T03:07:26.018 [DEBUG] [Thread-139497] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T03:07:26.018 [DEBUG] [Thread-139497] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T03:07:26.018 [DEBUG] [Thread-139497] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T03:07:26.018 [DEBUG] [Thread-139497] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:07:26.019 [DEBUG] [Thread-139497] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:07:26.019 [DEBUG] [Thread-139497] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:07:26.019 [DEBUG] [Thread-139497] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:07:26.019 [DEBUG] [Thread-139497] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T03:07:26.019 [DEBUG] [Thread-139497] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T03:07:26.019 [DEBUG] [Thread-139497] [transport.py] [_log()] client lang: <none>
2026-01-01T03:07:26.019 [DEBUG] [Thread-139497] [transport.py] [_log()] server lang: <none>
2026-01-01T03:07:26.019 [DEBUG] [Thread-139497] [transport.py] [_log()] kex follows: False
2026-01-01T03:07:26.019 [DEBUG] [Thread-139497] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T03:07:26.019 [DEBUG] [Thread-139497] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T03:07:26.019 [DEBUG] [Thread-139497] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T03:07:26.019 [DEBUG] [Thread-139497] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T03:07:26.019 [DEBUG] [Thread-139497] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T03:07:26.019 [DEBUG] [Thread-139497] [transport.py] [_log()] Compression: none
2026-01-01T03:07:26.020 [DEBUG] [Thread-139497] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T03:07:26.037 [DEBUG] [Thread-139497] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T03:07:26.038 [DEBUG] [Thread-139497] [transport.py] [_log()] Switch to new keys ...
2026-01-01T03:07:26.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T03:07:26.039 [DEBUG] [Thread-139497] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T03:07:26.040 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T03:07:26.042 [DEBUG] [Thread-139497] [transport.py] [_log()] userauth is OK
2026-01-01T03:07:26.042 [DEBUG] [Thread-139497] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T03:07:26.042 [DEBUG] [Thread-139497] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T03:07:26.042 [DEBUG] [Thread-139497] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T03:07:26.042 [DEBUG] [Thread-139497] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T03:07:26.065 [INFO] [Thread-139497] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T03:07:26.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T03:07:26.693 [DEBUG] [Thread-139497] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T03:07:26.693 [DEBUG] [Thread-139497] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T03:07:26.693 [DEBUG] [Thread-139497] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T03:07:26.734 [DEBUG] [Thread-139497] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T03:07:26.734 [DEBUG] [Thread-139497] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T03:07:26.736 [DEBUG] [Thread-139497] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T03:07:26.748 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T03:07:26.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T03:07:26.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T03:07:26.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T03:07:26.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T03:07:26.758 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T03:07:26.759 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T03:07:26.759 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T03:07:26.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T03:07:26.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.046311 -999.00  +13.00   4.51     83  +10.30 1 1 1 2 1     0    0 2.73 -2.74 ZNESW 3.8 4.5 226.6 11.6 13.7 -21.1 13.5 -20.9 13.4 -19.2 13.6 -20.3
2026-01-01T03:07:26.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T03:07:26.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T03:07:26.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.046311
2026-01-01T03:07:26.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T03:07:26.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T03:07:26.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T03:07:26.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T03:07:26.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T03:07:26.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T03:07:21', tmtdew=3.07, humidity=81.54, cloud=0.0, wind=15.53, temperature=12.88, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T03:07:21', seeing=0.99, atlas_timestamp='2026-01-01T01:06:41.270', atlas_cloud=1, atlas_rain=1, zp_data=[0.021249999999998437, 0.07475000000000165, 0.04075000000000095, 0.027499999999999858, 0.03850000000000087, 0.05125000000000135, 0.07350000000000101, 0.16125000000000078, 0.12349999999999994, 0.15399999999999991, 0.045249999999999346, 0.06300000000000061, 0.08549999999999969, 0.13924999999999876, 0.08549999999999969, 0.0259999999999998, 0.1092499999999994, 0.18149999999999977, 0.11799999999999855, 0.08924999999999983, 0.08799999999999919, 0.08224999999999838, 0.07125000000000092, 0.1412500000000012, 0.12400000000000055, 0.16249999999999964, 0.1667500000000004, 0.15850000000000009, 0.12849999999999895, 0.11050000000000182, 0.1850000000000005, 0.27500000000000036, 0.145249999999999], zp_timestamp='2026-01-01T01:05:00')
2026-01-01T03:07:26.762 [DEBUG] [Thread-139497] [transport.py] [_log()] EOF in transport thread
2026-01-01T03:07:26.846 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T03:07:26.857 [DEBUG] [Thread-139500] [transport.py] [_log()] starting thread (client mode): 0xb6b2b400
2026-01-01T03:07:26.857 [DEBUG] [Thread-139500] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T03:07:26.872 [DEBUG] [Thread-139500] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T03:07:26.872 [INFO] [Thread-139500] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T03:07:26.879 [DEBUG] [Thread-139500] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T03:07:26.880 [DEBUG] [Thread-139500] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T03:07:26.880 [DEBUG] [Thread-139500] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T03:07:26.880 [DEBUG] [Thread-139500] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:07:26.880 [DEBUG] [Thread-139500] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:07:26.880 [DEBUG] [Thread-139500] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:07:26.880 [DEBUG] [Thread-139500] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:07:26.880 [DEBUG] [Thread-139500] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T03:07:26.880 [DEBUG] [Thread-139500] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T03:07:26.880 [DEBUG] [Thread-139500] [transport.py] [_log()] client lang: <none>
2026-01-01T03:07:26.880 [DEBUG] [Thread-139500] [transport.py] [_log()] server lang: <none>
2026-01-01T03:07:26.880 [DEBUG] [Thread-139500] [transport.py] [_log()] kex follows: False
2026-01-01T03:07:26.880 [DEBUG] [Thread-139500] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T03:07:26.880 [DEBUG] [Thread-139500] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T03:07:26.880 [DEBUG] [Thread-139500] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T03:07:26.881 [DEBUG] [Thread-139500] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T03:07:26.881 [DEBUG] [Thread-139500] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T03:07:26.881 [DEBUG] [Thread-139500] [transport.py] [_log()] Compression: none
2026-01-01T03:07:26.881 [DEBUG] [Thread-139500] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T03:07:26.937 [DEBUG] [Thread-139500] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T03:07:26.937 [DEBUG] [Thread-139500] [transport.py] [_log()] Switch to new keys ...
2026-01-01T03:07:26.938 [DEBUG] [Thread-139500] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T03:07:26.938 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T03:07:26.939 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T03:07:26.994 [DEBUG] [Thread-139500] [transport.py] [_log()] userauth is OK
2026-01-01T03:07:26.994 [DEBUG] [Thread-139500] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T03:07:26.994 [DEBUG] [Thread-139500] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T03:07:26.994 [DEBUG] [Thread-139500] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T03:07:26.994 [DEBUG] [Thread-139500] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T03:07:27.013 [INFO] [Thread-139500] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T03:07:27.014 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T03:07:27.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T03:07:27.881 [DEBUG] [Thread-139500] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T03:07:27.881 [DEBUG] [Thread-139500] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T03:07:27.929 [DEBUG] [Thread-139500] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T03:07:27.929 [DEBUG] [Thread-139500] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T03:07:27.939 [DEBUG] [Thread-139500] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T03:07:27.951 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T03:07:27.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T03:07:27.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T03:07:27.973 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T03:07:27.973 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T03:07:27.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T03:07:27.984 [DEBUG] [Thread-139500] [transport.py] [_log()] EOF in transport thread
2026-01-01T03:07:34.384 [DEBUG] [Thread-139502 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:07:49.435 [DEBUG] [Thread-139503 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:07:58.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T03:07:58.004 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T03:07:58.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T03:07:58.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 3, 7, 53), 3.13, 81.49, 0.0, 16.83, 12.93, 0, 1, 0, 2, 0, 0),)
2026-01-01T03:07:58.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 03:07:53
2026-01-01T03:07:58.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T03:07:59.022 [DEBUG] [Thread-139504] [transport.py] [_log()] starting thread (client mode): 0xb955bca0
2026-01-01T03:07:59.022 [DEBUG] [Thread-139504] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T03:07:59.043 [DEBUG] [Thread-139504] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T03:07:59.043 [INFO] [Thread-139504] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T03:07:59.046 [DEBUG] [Thread-139504] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T03:07:59.046 [DEBUG] [Thread-139504] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T03:07:59.046 [DEBUG] [Thread-139504] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T03:07:59.046 [DEBUG] [Thread-139504] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:07:59.046 [DEBUG] [Thread-139504] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:07:59.046 [DEBUG] [Thread-139504] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:07:59.046 [DEBUG] [Thread-139504] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:07:59.046 [DEBUG] [Thread-139504] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T03:07:59.046 [DEBUG] [Thread-139504] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T03:07:59.046 [DEBUG] [Thread-139504] [transport.py] [_log()] client lang: <none>
2026-01-01T03:07:59.046 [DEBUG] [Thread-139504] [transport.py] [_log()] server lang: <none>
2026-01-01T03:07:59.046 [DEBUG] [Thread-139504] [transport.py] [_log()] kex follows: False
2026-01-01T03:07:59.046 [DEBUG] [Thread-139504] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T03:07:59.046 [DEBUG] [Thread-139504] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T03:07:59.046 [DEBUG] [Thread-139504] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T03:07:59.047 [DEBUG] [Thread-139504] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T03:07:59.047 [DEBUG] [Thread-139504] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T03:07:59.047 [DEBUG] [Thread-139504] [transport.py] [_log()] Compression: none
2026-01-01T03:07:59.047 [DEBUG] [Thread-139504] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T03:07:59.061 [DEBUG] [Thread-139504] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T03:07:59.061 [DEBUG] [Thread-139504] [transport.py] [_log()] Switch to new keys ...
2026-01-01T03:07:59.061 [DEBUG] [Thread-139504] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T03:07:59.062 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T03:07:59.062 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T03:07:59.062 [DEBUG] [Thread-139504] [transport.py] [_log()] userauth is OK
2026-01-01T03:07:59.062 [DEBUG] [Thread-139504] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T03:07:59.062 [DEBUG] [Thread-139504] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T03:07:59.062 [DEBUG] [Thread-139504] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T03:07:59.062 [DEBUG] [Thread-139504] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T03:07:59.071 [INFO] [Thread-139504] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T03:07:59.071 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T03:07:59.717 [DEBUG] [Thread-139504] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T03:07:59.717 [DEBUG] [Thread-139504] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T03:07:59.717 [DEBUG] [Thread-139504] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T03:07:59.758 [DEBUG] [Thread-139504] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T03:07:59.759 [DEBUG] [Thread-139504] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T03:07:59.761 [DEBUG] [Thread-139504] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T03:07:59.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T03:07:59.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T03:07:59.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T03:07:59.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T03:07:59.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T03:07:59.775 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T03:07:59.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T03:07:59.775 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T03:07:59.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T03:07:59.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.046658 -999.00  +13.00   5.13     83  +10.30 1 1 1 2 1     0    0 2.63 -3.16 ZNESW 5.6 5.1 206.5 10.1 13.7 -21.2 13.6 -20.9 13.3 -19.2 13.6 -20.3
2026-01-01T03:07:59.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T03:07:59.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T03:07:59.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.046658
2026-01-01T03:07:59.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T03:07:59.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T03:07:59.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T03:07:59.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T03:07:59.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T03:07:59.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T03:07:53', tmtdew=3.13, humidity=81.49, cloud=0.0, wind=16.83, temperature=12.93, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T03:07:54', seeing=0.87, atlas_timestamp='2026-01-01T01:07:11.251', atlas_cloud=1, atlas_rain=1, zp_data=[0.021249999999998437, 0.07475000000000165, 0.04075000000000095, 0.027499999999999858, 0.03850000000000087, 0.05125000000000135, 0.07350000000000101, 0.16125000000000078, 0.12349999999999994, 0.15399999999999991, 0.045249999999999346, 0.06300000000000061, 0.08549999999999969, 0.13924999999999876, 0.08549999999999969, 0.0259999999999998, 0.1092499999999994, 0.18149999999999977, 0.11799999999999855, 0.08924999999999983, 0.08799999999999919, 0.08224999999999838, 0.07125000000000092, 0.1412500000000012, 0.12400000000000055, 0.16249999999999964, 0.1667500000000004, 0.15850000000000009, 0.12849999999999895, 0.11050000000000182, 0.1850000000000005, 0.27500000000000036, 0.145249999999999], zp_timestamp='2026-01-01T01:05:00')
2026-01-01T03:07:59.776 [DEBUG] [Thread-139504] [transport.py] [_log()] EOF in transport thread
2026-01-01T03:07:59.851 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T03:07:59.862 [DEBUG] [Thread-139507] [transport.py] [_log()] starting thread (client mode): 0xb6b15a50
2026-01-01T03:07:59.862 [DEBUG] [Thread-139507] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T03:07:59.878 [DEBUG] [Thread-139507] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T03:07:59.878 [INFO] [Thread-139507] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T03:07:59.885 [DEBUG] [Thread-139507] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T03:07:59.885 [DEBUG] [Thread-139507] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T03:07:59.885 [DEBUG] [Thread-139507] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T03:07:59.885 [DEBUG] [Thread-139507] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:07:59.886 [DEBUG] [Thread-139507] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:07:59.886 [DEBUG] [Thread-139507] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:07:59.886 [DEBUG] [Thread-139507] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:07:59.886 [DEBUG] [Thread-139507] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T03:07:59.886 [DEBUG] [Thread-139507] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T03:07:59.886 [DEBUG] [Thread-139507] [transport.py] [_log()] client lang: <none>
2026-01-01T03:07:59.886 [DEBUG] [Thread-139507] [transport.py] [_log()] server lang: <none>
2026-01-01T03:07:59.886 [DEBUG] [Thread-139507] [transport.py] [_log()] kex follows: False
2026-01-01T03:07:59.886 [DEBUG] [Thread-139507] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T03:07:59.886 [DEBUG] [Thread-139507] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T03:07:59.886 [DEBUG] [Thread-139507] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T03:07:59.886 [DEBUG] [Thread-139507] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T03:07:59.886 [DEBUG] [Thread-139507] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T03:07:59.886 [DEBUG] [Thread-139507] [transport.py] [_log()] Compression: none
2026-01-01T03:07:59.886 [DEBUG] [Thread-139507] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T03:07:59.943 [DEBUG] [Thread-139507] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T03:07:59.943 [DEBUG] [Thread-139507] [transport.py] [_log()] Switch to new keys ...
2026-01-01T03:07:59.943 [DEBUG] [Thread-139507] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T03:07:59.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T03:07:59.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T03:08:00.000 [DEBUG] [Thread-139507] [transport.py] [_log()] userauth is OK
2026-01-01T03:08:00.000 [DEBUG] [Thread-139507] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T03:08:00.000 [DEBUG] [Thread-139507] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T03:08:00.000 [DEBUG] [Thread-139507] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T03:08:00.000 [DEBUG] [Thread-139507] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T03:08:00.014 [INFO] [Thread-139507] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T03:08:00.015 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T03:08:00.015 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T03:08:00.851 [DEBUG] [Thread-139507] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T03:08:00.852 [DEBUG] [Thread-139507] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T03:08:00.899 [DEBUG] [Thread-139507] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T03:08:00.900 [DEBUG] [Thread-139507] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T03:08:00.908 [DEBUG] [Thread-139507] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T03:08:00.916 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T03:08: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')
2026-01-01T03:08: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
2026-01-01T03:08:00.932 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T03:08:00.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T03:08:00.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T03:08:00.939 [DEBUG] [Thread-139507] [transport.py] [_log()] EOF in transport thread
2026-01-01T03:08:04.471 [DEBUG] [Thread-139509 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:08:07.667 [DEBUG] [Thread-139510 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:08:10.788 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:08:10.789 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:08:19.529 [DEBUG] [Thread-139511 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:08:30.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T03:08:30.962 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T03:08:30.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T03:08:31.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 3, 8, 26), 3.13, 81.52, 0.0, 15.9, 12.93, 0, 1, 0, 2, 0, 0),)
2026-01-01T03:08:31.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 03:08:26
2026-01-01T03:08:31.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T03:08:31.934 [DEBUG] [Thread-139512] [transport.py] [_log()] starting thread (client mode): 0xb95b1a80
2026-01-01T03:08:31.934 [DEBUG] [Thread-139512] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T03:08:31.953 [DEBUG] [Thread-139512] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T03:08:31.953 [INFO] [Thread-139512] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T03:08:31.956 [DEBUG] [Thread-139512] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T03:08:31.956 [DEBUG] [Thread-139512] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T03:08:31.956 [DEBUG] [Thread-139512] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T03:08:31.956 [DEBUG] [Thread-139512] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:08:31.956 [DEBUG] [Thread-139512] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:08:31.956 [DEBUG] [Thread-139512] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:08:31.956 [DEBUG] [Thread-139512] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:08:31.956 [DEBUG] [Thread-139512] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T03:08:31.956 [DEBUG] [Thread-139512] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T03:08:31.956 [DEBUG] [Thread-139512] [transport.py] [_log()] client lang: <none>
2026-01-01T03:08:31.956 [DEBUG] [Thread-139512] [transport.py] [_log()] server lang: <none>
2026-01-01T03:08:31.956 [DEBUG] [Thread-139512] [transport.py] [_log()] kex follows: False
2026-01-01T03:08:31.956 [DEBUG] [Thread-139512] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T03:08:31.956 [DEBUG] [Thread-139512] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T03:08:31.956 [DEBUG] [Thread-139512] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T03:08:31.956 [DEBUG] [Thread-139512] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T03:08:31.956 [DEBUG] [Thread-139512] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T03:08:31.956 [DEBUG] [Thread-139512] [transport.py] [_log()] Compression: none
2026-01-01T03:08:31.956 [DEBUG] [Thread-139512] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T03:08:31.972 [DEBUG] [Thread-139512] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T03:08:31.973 [DEBUG] [Thread-139512] [transport.py] [_log()] Switch to new keys ...
2026-01-01T03:08:31.974 [DEBUG] [Thread-139512] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T03:08:31.974 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T03:08:31.974 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T03:08:31.976 [DEBUG] [Thread-139512] [transport.py] [_log()] userauth is OK
2026-01-01T03:08:31.976 [DEBUG] [Thread-139512] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T03:08:31.977 [DEBUG] [Thread-139512] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T03:08:31.977 [DEBUG] [Thread-139512] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T03:08:31.977 [DEBUG] [Thread-139512] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T03:08:31.992 [INFO] [Thread-139512] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T03:08:31.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T03:08:32.748 [DEBUG] [Thread-139512] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T03:08:32.749 [DEBUG] [Thread-139512] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T03:08:32.749 [DEBUG] [Thread-139512] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T03:08:32.790 [DEBUG] [Thread-139512] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T03:08:32.790 [DEBUG] [Thread-139512] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T03:08:32.794 [DEBUG] [Thread-139512] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T03:08:32.805 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T03:08:32.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T03:08:32.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T03:08:32.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T03:08:32.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T03:08:32.813 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T03:08:32.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T03:08:32.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T03:08:32.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T03:08:32.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.047006 -999.00  +12.90   8.01     84  +10.30 1 1 1 2 1     0    0 2.63 -4.40 ZNESW 8.7 8.0 221.5 12.7 13.7 -21.2 13.5 -20.9 13.4 -19.3 13.6 -20.3
2026-01-01T03:08:32.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T03:08:32.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T03:08:32.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.047006
2026-01-01T03:08:32.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T03:08:32.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T03:08:32.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T03:08:32.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T03:08:32.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T03:08:32.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T03:08:26', tmtdew=3.13, humidity=81.52, cloud=0.0, wind=15.9, temperature=12.93, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T03:08:26', seeing=1.12, atlas_timestamp='2026-01-01T01:07:41.318', atlas_cloud=1, atlas_rain=1, zp_data=[0.021249999999998437, 0.07475000000000165, 0.04075000000000095, 0.027499999999999858, 0.03850000000000087, 0.05125000000000135, 0.07350000000000101, 0.16125000000000078, 0.12349999999999994, 0.15399999999999991, 0.045249999999999346, 0.06300000000000061, 0.08549999999999969, 0.13924999999999876, 0.08549999999999969, 0.0259999999999998, 0.1092499999999994, 0.18149999999999977, 0.11799999999999855, 0.08924999999999983, 0.08799999999999919, 0.08224999999999838, 0.07125000000000092, 0.1412500000000012, 0.12400000000000055, 0.16249999999999964, 0.1667500000000004, 0.15850000000000009, 0.12849999999999895, 0.11050000000000182, 0.1850000000000005, 0.27500000000000036, 0.145249999999999], zp_timestamp='2026-01-01T01:05:00')
2026-01-01T03:08:32.814 [DEBUG] [Thread-139512] [transport.py] [_log()] EOF in transport thread
2026-01-01T03:08:32.885 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T03:08:32.896 [DEBUG] [Thread-139515] [transport.py] [_log()] starting thread (client mode): 0xb6bbfeb0
2026-01-01T03:08:32.897 [DEBUG] [Thread-139515] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T03:08:32.912 [DEBUG] [Thread-139515] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T03:08:32.913 [INFO] [Thread-139515] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T03:08:32.920 [DEBUG] [Thread-139515] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T03:08:32.921 [DEBUG] [Thread-139515] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T03:08:32.921 [DEBUG] [Thread-139515] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T03:08:32.921 [DEBUG] [Thread-139515] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:08:32.921 [DEBUG] [Thread-139515] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:08:32.921 [DEBUG] [Thread-139515] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:08:32.921 [DEBUG] [Thread-139515] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:08:32.922 [DEBUG] [Thread-139515] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T03:08:32.922 [DEBUG] [Thread-139515] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T03:08:32.922 [DEBUG] [Thread-139515] [transport.py] [_log()] client lang: <none>
2026-01-01T03:08:32.922 [DEBUG] [Thread-139515] [transport.py] [_log()] server lang: <none>
2026-01-01T03:08:32.922 [DEBUG] [Thread-139515] [transport.py] [_log()] kex follows: False
2026-01-01T03:08:32.922 [DEBUG] [Thread-139515] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T03:08:32.922 [DEBUG] [Thread-139515] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T03:08:32.922 [DEBUG] [Thread-139515] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T03:08:32.922 [DEBUG] [Thread-139515] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T03:08:32.922 [DEBUG] [Thread-139515] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T03:08:32.922 [DEBUG] [Thread-139515] [transport.py] [_log()] Compression: none
2026-01-01T03:08:32.922 [DEBUG] [Thread-139515] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T03:08:32.979 [DEBUG] [Thread-139515] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T03:08:32.980 [DEBUG] [Thread-139515] [transport.py] [_log()] Switch to new keys ...
2026-01-01T03:08:32.981 [DEBUG] [Thread-139515] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T03:08:32.981 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T03:08:32.982 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T03:08:33.039 [DEBUG] [Thread-139515] [transport.py] [_log()] userauth is OK
2026-01-01T03:08:33.040 [DEBUG] [Thread-139515] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T03:08:33.040 [DEBUG] [Thread-139515] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T03:08:33.040 [DEBUG] [Thread-139515] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T03:08:33.040 [DEBUG] [Thread-139515] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T03:08:33.059 [INFO] [Thread-139515] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T03:08:33.059 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T03:08:33.060 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T03:08:33.903 [DEBUG] [Thread-139515] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T03:08:33.904 [DEBUG] [Thread-139515] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T03:08:33.951 [DEBUG] [Thread-139515] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T03:08:33.951 [DEBUG] [Thread-139515] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T03:08:33.960 [DEBUG] [Thread-139515] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T03:08:33.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T03:08:33.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T03:08:33.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T03:08:33.985 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T03:08:33.985 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T03:08:33.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T03:08:33.993 [DEBUG] [Thread-139515] [transport.py] [_log()] EOF in transport thread
2026-01-01T03:08:34.561 [DEBUG] [Thread-139517 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:08:49.611 [DEBUG] [Thread-139518 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:09:04.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T03:09:04.005 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T03:09: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
2026-01-01T03:09:04.646 [DEBUG] [Thread-139519 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:09:04.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 3, 8, 58), 3.07, 81.57, 0.0, 12.69, 12.83, 0, 1, 0, 2, 0, 0),)
2026-01-01T03:09:04.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 03:08:58
2026-01-01T03:09:04.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T03:09:04.976 [DEBUG] [Thread-139520] [transport.py] [_log()] starting thread (client mode): 0xb6bbe770
2026-01-01T03:09:04.976 [DEBUG] [Thread-139520] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T03:09:04.996 [DEBUG] [Thread-139520] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T03:09:04.996 [INFO] [Thread-139520] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T03:09:05.000 [DEBUG] [Thread-139520] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T03:09:05.000 [DEBUG] [Thread-139520] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T03:09:05.000 [DEBUG] [Thread-139520] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T03:09:05.000 [DEBUG] [Thread-139520] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:09:05.000 [DEBUG] [Thread-139520] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:09:05.000 [DEBUG] [Thread-139520] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:09:05.000 [DEBUG] [Thread-139520] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:09:05.001 [DEBUG] [Thread-139520] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T03:09:05.001 [DEBUG] [Thread-139520] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T03:09:05.001 [DEBUG] [Thread-139520] [transport.py] [_log()] client lang: <none>
2026-01-01T03:09:05.001 [DEBUG] [Thread-139520] [transport.py] [_log()] server lang: <none>
2026-01-01T03:09:05.001 [DEBUG] [Thread-139520] [transport.py] [_log()] kex follows: False
2026-01-01T03:09:05.001 [DEBUG] [Thread-139520] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T03:09:05.001 [DEBUG] [Thread-139520] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T03:09:05.001 [DEBUG] [Thread-139520] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T03:09:05.001 [DEBUG] [Thread-139520] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T03:09:05.001 [DEBUG] [Thread-139520] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T03:09:05.001 [DEBUG] [Thread-139520] [transport.py] [_log()] Compression: none
2026-01-01T03:09:05.001 [DEBUG] [Thread-139520] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T03:09:05.020 [DEBUG] [Thread-139520] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T03:09:05.021 [DEBUG] [Thread-139520] [transport.py] [_log()] Switch to new keys ...
2026-01-01T03:09:05.021 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T03:09:05.022 [DEBUG] [Thread-139520] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T03:09:05.023 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T03:09:05.024 [DEBUG] [Thread-139520] [transport.py] [_log()] userauth is OK
2026-01-01T03:09:05.024 [DEBUG] [Thread-139520] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T03:09:05.024 [DEBUG] [Thread-139520] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T03:09:05.024 [DEBUG] [Thread-139520] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T03:09:05.024 [DEBUG] [Thread-139520] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T03:09:05.049 [INFO] [Thread-139520] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T03:09:05.050 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T03:09:05.687 [DEBUG] [Thread-139520] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T03:09:05.687 [DEBUG] [Thread-139520] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T03:09:05.688 [DEBUG] [Thread-139520] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T03:09:05.729 [DEBUG] [Thread-139520] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T03:09:05.729 [DEBUG] [Thread-139520] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T03:09:05.731 [DEBUG] [Thread-139520] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T03:09:05.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T03:09:05.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T03:09:05.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T03:09:05.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T03:09:05.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T03:09:05.746 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T03:09:05.746 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T03:09:05.746 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T03:09:05.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T03:09:05.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.047700 -999.00  +12.90   6.21     84  +10.40 1 1 1 2 1     0    0 2.52 -7.77 ZNESW 9.4 6.2 203.4 10.1 13.7 -21.2 13.5 -20.9 13.3 -19.2 13.6 -20.2
2026-01-01T03:09:05.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T03:09:05.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T03:09:05.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.047700
2026-01-01T03:09:05.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T03:09:05.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T03:09:05.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T03:09:05.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T03:09:05.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T03:09:05.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T03:08:58', tmtdew=3.07, humidity=81.57, cloud=0.0, wind=12.69, temperature=12.83, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T03:08:58', seeing=0.94, atlas_timestamp='2026-01-01T01:08:41.280', atlas_cloud=1, atlas_rain=1, zp_data=[0.021249999999998437, 0.07475000000000165, 0.04075000000000095, 0.027499999999999858, 0.03850000000000087, 0.05125000000000135, 0.07350000000000101, 0.16125000000000078, 0.12349999999999994, 0.15399999999999991, 0.045249999999999346, 0.06300000000000061, 0.08549999999999969, 0.13924999999999876, 0.08549999999999969, 0.0259999999999998, 0.1092499999999994, 0.18149999999999977, 0.11799999999999855, 0.08924999999999983, 0.08799999999999919, 0.08224999999999838, 0.07125000000000092, 0.1412500000000012, 0.12400000000000055, 0.16249999999999964, 0.1667500000000004, 0.15850000000000009, 0.12849999999999895, 0.11050000000000182, 0.1850000000000005, 0.27500000000000036, 0.145249999999999], zp_timestamp='2026-01-01T01:05:00')
2026-01-01T03:09:05.749 [DEBUG] [Thread-139520] [transport.py] [_log()] EOF in transport thread
2026-01-01T03:09:05.827 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T03:09:07.725 [DEBUG] [Thread-139523 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:09:10.985 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:09:10.987 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:09:19.677 [DEBUG] [Thread-139524 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:09:34.735 [DEBUG] [Thread-139525 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:09:49.776 [DEBUG] [Thread-139526 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:10:04.807 [DEBUG] [Thread-139527 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:10:07.800 [DEBUG] [Thread-139528 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:10:11.186 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:10:11.187 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:10:19.845 [DEBUG] [Thread-139529 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:10:34.881 [DEBUG] [Thread-139530 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:10:49.915 [DEBUG] [Thread-139531 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:11:04.955 [DEBUG] [Thread-139532 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:11:07.877 [DEBUG] [Thread-139533 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:11:11.387 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:11:11.388 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:11:19.985 [DEBUG] [Thread-139534 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:11:20.277 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2026-01-01T03:11:35.026 [DEBUG] [Thread-139535 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:11:50.060 [DEBUG] [Thread-139536 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:11:50.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T03:11:50.308 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T03:11:50.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T03:11:51.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 3, 11, 38), 2.9, 82.7, 0.0, 12.85, 12.82, 0, 1, 0, 2, 0, 0),)
2026-01-01T03:11:51.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 03:11:38
2026-01-01T03:11:51.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T03:11:51.355 [DEBUG] [Thread-139537] [transport.py] [_log()] starting thread (client mode): 0xb9559900
2026-01-01T03:11:51.356 [DEBUG] [Thread-139537] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T03:11:51.376 [DEBUG] [Thread-139537] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T03:11:51.376 [INFO] [Thread-139537] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T03:11:51.380 [DEBUG] [Thread-139537] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T03:11:51.380 [DEBUG] [Thread-139537] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T03:11:51.380 [DEBUG] [Thread-139537] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T03:11:51.380 [DEBUG] [Thread-139537] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:11:51.380 [DEBUG] [Thread-139537] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:11:51.380 [DEBUG] [Thread-139537] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:11:51.380 [DEBUG] [Thread-139537] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:11:51.380 [DEBUG] [Thread-139537] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T03:11:51.380 [DEBUG] [Thread-139537] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T03:11:51.380 [DEBUG] [Thread-139537] [transport.py] [_log()] client lang: <none>
2026-01-01T03:11:51.380 [DEBUG] [Thread-139537] [transport.py] [_log()] server lang: <none>
2026-01-01T03:11:51.380 [DEBUG] [Thread-139537] [transport.py] [_log()] kex follows: False
2026-01-01T03:11:51.380 [DEBUG] [Thread-139537] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T03:11:51.380 [DEBUG] [Thread-139537] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T03:11:51.380 [DEBUG] [Thread-139537] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T03:11:51.380 [DEBUG] [Thread-139537] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T03:11:51.380 [DEBUG] [Thread-139537] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T03:11:51.380 [DEBUG] [Thread-139537] [transport.py] [_log()] Compression: none
2026-01-01T03:11:51.380 [DEBUG] [Thread-139537] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T03:11:51.396 [DEBUG] [Thread-139537] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T03:11:51.396 [DEBUG] [Thread-139537] [transport.py] [_log()] Switch to new keys ...
2026-01-01T03:11:51.396 [DEBUG] [Thread-139537] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T03:11:51.397 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T03:11:51.397 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T03:11:51.398 [DEBUG] [Thread-139537] [transport.py] [_log()] userauth is OK
2026-01-01T03:11:51.398 [DEBUG] [Thread-139537] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T03:11:51.398 [DEBUG] [Thread-139537] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T03:11:51.398 [DEBUG] [Thread-139537] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T03:11:51.398 [DEBUG] [Thread-139537] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T03:11:51.408 [INFO] [Thread-139537] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T03:11:51.408 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T03:11:52.041 [DEBUG] [Thread-139537] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T03:11:52.042 [DEBUG] [Thread-139537] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T03:11:52.042 [DEBUG] [Thread-139537] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T03:11:52.083 [DEBUG] [Thread-139537] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T03:11:52.083 [DEBUG] [Thread-139537] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T03:11:52.085 [DEBUG] [Thread-139537] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T03:11:52.097 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T03:11:52.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T03:11:52.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T03:11:52.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T03:11:52.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T03:11:52.102 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T03:11:52.102 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T03:11:52.102 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T03:11:52.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T03:11:52.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.049436 -999.00  +12.90   7.02     84  +10.40 1 1 1 2 1     0    0 2.21 -17.24 ZNESW 6.2 7.0 244.1 11.3 13.6 -21.2 13.4 -20.8 13.3 -19.2 13.6 -20.4
2026-01-01T03:11:52.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T03:11:52.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T03:11:52.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.049436
2026-01-01T03:11:52.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T03:11:52.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T03:11:52.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T03:11:52.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T03:11:52.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T03:11:52.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T03:11:38', tmtdew=2.9, humidity=82.7, cloud=0.0, wind=12.85, temperature=12.82, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T03:11:38', seeing=0.98, atlas_timestamp='2026-01-01T01:11:11.270', atlas_cloud=1, atlas_rain=1, zp_data=[0.021249999999998437, 0.07475000000000165, 0.04075000000000095, 0.027499999999999858, 0.03850000000000087, 0.05125000000000135, 0.07350000000000101, 0.16125000000000078, 0.12349999999999994, 0.15399999999999991, 0.045249999999999346, 0.06300000000000061, 0.08549999999999969, 0.13924999999999876, 0.08549999999999969, 0.0259999999999998, 0.1092499999999994, 0.18149999999999977, 0.11799999999999855, 0.08924999999999983, 0.08799999999999919, 0.08224999999999838, 0.07125000000000092, 0.1412500000000012, 0.12400000000000055, 0.16249999999999964, 0.1667500000000004, 0.15850000000000009, 0.12849999999999895, 0.11050000000000182, 0.1850000000000005, 0.27500000000000036, 0.145249999999999], zp_timestamp='2026-01-01T01:09:00')
2026-01-01T03:11:52.104 [DEBUG] [Thread-139537] [transport.py] [_log()] EOF in transport thread
2026-01-01T03:11:52.178 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T03:11:52.190 [DEBUG] [Thread-139540] [transport.py] [_log()] starting thread (client mode): 0xb9547520
2026-01-01T03:11:52.190 [DEBUG] [Thread-139540] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T03:11:52.207 [DEBUG] [Thread-139540] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T03:11:52.207 [INFO] [Thread-139540] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T03:11:52.215 [DEBUG] [Thread-139540] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T03:11:52.215 [DEBUG] [Thread-139540] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T03:11:52.215 [DEBUG] [Thread-139540] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T03:11:52.215 [DEBUG] [Thread-139540] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:11:52.215 [DEBUG] [Thread-139540] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:11:52.215 [DEBUG] [Thread-139540] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:11:52.215 [DEBUG] [Thread-139540] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:11:52.215 [DEBUG] [Thread-139540] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T03:11:52.215 [DEBUG] [Thread-139540] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T03:11:52.215 [DEBUG] [Thread-139540] [transport.py] [_log()] client lang: <none>
2026-01-01T03:11:52.215 [DEBUG] [Thread-139540] [transport.py] [_log()] server lang: <none>
2026-01-01T03:11:52.215 [DEBUG] [Thread-139540] [transport.py] [_log()] kex follows: False
2026-01-01T03:11:52.215 [DEBUG] [Thread-139540] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T03:11:52.215 [DEBUG] [Thread-139540] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T03:11:52.215 [DEBUG] [Thread-139540] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T03:11:52.215 [DEBUG] [Thread-139540] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T03:11:52.215 [DEBUG] [Thread-139540] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T03:11:52.215 [DEBUG] [Thread-139540] [transport.py] [_log()] Compression: none
2026-01-01T03:11:52.215 [DEBUG] [Thread-139540] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T03:11:52.271 [DEBUG] [Thread-139540] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T03:11:52.271 [DEBUG] [Thread-139540] [transport.py] [_log()] Switch to new keys ...
2026-01-01T03:11:52.271 [DEBUG] [Thread-139540] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T03:11:52.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T03:11:52.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T03:11:52.328 [DEBUG] [Thread-139540] [transport.py] [_log()] userauth is OK
2026-01-01T03:11:52.328 [DEBUG] [Thread-139540] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T03:11:52.328 [DEBUG] [Thread-139540] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T03:11:52.328 [DEBUG] [Thread-139540] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T03:11:52.328 [DEBUG] [Thread-139540] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T03:11:52.344 [INFO] [Thread-139540] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T03:11:52.344 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T03:11:52.344 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T03:11:53.240 [DEBUG] [Thread-139540] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T03:11:53.240 [DEBUG] [Thread-139540] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T03:11:53.288 [DEBUG] [Thread-139540] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T03:11:53.288 [DEBUG] [Thread-139540] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T03:11:53.296 [DEBUG] [Thread-139540] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T03:11:53.304 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T03:11:53.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T03:11:53.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T03:11:53.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T03:11:53.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T03:11:53.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T03:11:53.329 [DEBUG] [Thread-139540] [transport.py] [_log()] EOF in transport thread
2026-01-01T03:12:05.089 [DEBUG] [Thread-139542 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:12:07.965 [DEBUG] [Thread-139543 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:12:11.590 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:12:11.591 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:12:20.139 [DEBUG] [Thread-139544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:12:23.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T03:12:23.347 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T03:12:23.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T03:12:24.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 3, 12, 10), 2.9, 82.68, 0.0, 14.43, 12.78, 0, 1, 0, 2, 0, 0),)
2026-01-01T03:12:24.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 03:12:10
2026-01-01T03:12:24.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T03:12:24.339 [DEBUG] [Thread-139545] [transport.py] [_log()] starting thread (client mode): 0xb9559360
2026-01-01T03:12:24.339 [DEBUG] [Thread-139545] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T03:12:24.358 [DEBUG] [Thread-139545] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T03:12:24.358 [INFO] [Thread-139545] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T03:12:24.361 [DEBUG] [Thread-139545] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T03:12:24.361 [DEBUG] [Thread-139545] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T03:12:24.361 [DEBUG] [Thread-139545] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T03:12:24.361 [DEBUG] [Thread-139545] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:12:24.361 [DEBUG] [Thread-139545] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:12:24.361 [DEBUG] [Thread-139545] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:12:24.361 [DEBUG] [Thread-139545] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:12:24.361 [DEBUG] [Thread-139545] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T03:12:24.361 [DEBUG] [Thread-139545] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T03:12:24.361 [DEBUG] [Thread-139545] [transport.py] [_log()] client lang: <none>
2026-01-01T03:12:24.361 [DEBUG] [Thread-139545] [transport.py] [_log()] server lang: <none>
2026-01-01T03:12:24.361 [DEBUG] [Thread-139545] [transport.py] [_log()] kex follows: False
2026-01-01T03:12:24.361 [DEBUG] [Thread-139545] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T03:12:24.361 [DEBUG] [Thread-139545] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T03:12:24.361 [DEBUG] [Thread-139545] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T03:12:24.361 [DEBUG] [Thread-139545] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T03:12:24.361 [DEBUG] [Thread-139545] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T03:12:24.361 [DEBUG] [Thread-139545] [transport.py] [_log()] Compression: none
2026-01-01T03:12:24.362 [DEBUG] [Thread-139545] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T03:12:24.377 [DEBUG] [Thread-139545] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T03:12:24.377 [DEBUG] [Thread-139545] [transport.py] [_log()] Switch to new keys ...
2026-01-01T03:12:24.377 [DEBUG] [Thread-139545] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T03:12:24.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T03:12:24.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T03:12:24.379 [DEBUG] [Thread-139545] [transport.py] [_log()] userauth is OK
2026-01-01T03:12:24.379 [DEBUG] [Thread-139545] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T03:12:24.379 [DEBUG] [Thread-139545] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T03:12:24.379 [DEBUG] [Thread-139545] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T03:12:24.379 [DEBUG] [Thread-139545] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T03:12:24.398 [INFO] [Thread-139545] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T03:12:24.399 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T03:12:25.047 [DEBUG] [Thread-139545] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T03:12:25.047 [DEBUG] [Thread-139545] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T03:12:25.048 [DEBUG] [Thread-139545] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T03:12:25.088 [DEBUG] [Thread-139545] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T03:12:25.088 [DEBUG] [Thread-139545] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T03:12:25.091 [DEBUG] [Thread-139545] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T03:12:25.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T03:12:25.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T03:12:25.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T03:12:25.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T03:12:25.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T03:12:25.116 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T03:12:25.116 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T03:12:25.116 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T03:12:25.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T03:12:25.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.050130 -999.00  +12.80   8.06     85  +10.40 1 1 1 2 1     0    0 2.17 -18.72 ZNESW 10.8 8.1 234.9 13.9 13.6 -21.2 13.4 -20.8 13.2 -19.1 13.6 -20.4
2026-01-01T03:12:25.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T03:12:25.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T03:12:25.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.050130
2026-01-01T03:12:25.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T03:12:25.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T03:12:25.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T03:12:25.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T03:12:25.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T03:12:25.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T03:12:10', tmtdew=2.9, humidity=82.68, cloud=0.0, wind=14.43, temperature=12.78, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T03:12:10', seeing=1.06, atlas_timestamp='2026-01-01T01:12:11.232', atlas_cloud=1, atlas_rain=1, zp_data=[0.021249999999998437, 0.07475000000000165, 0.04075000000000095, 0.027499999999999858, 0.03850000000000087, 0.05125000000000135, 0.07350000000000101, 0.16125000000000078, 0.12349999999999994, 0.15399999999999991, 0.045249999999999346, 0.06300000000000061, 0.08549999999999969, 0.13924999999999876, 0.08549999999999969, 0.0259999999999998, 0.1092499999999994, 0.18149999999999977, 0.11799999999999855, 0.08924999999999983, 0.08799999999999919, 0.08224999999999838, 0.07125000000000092, 0.1412500000000012, 0.12400000000000055, 0.16249999999999964, 0.1667500000000004, 0.15850000000000009, 0.12849999999999895, 0.11050000000000182, 0.1850000000000005, 0.27500000000000036, 0.145249999999999], zp_timestamp='2026-01-01T01:09:00')
2026-01-01T03:12:25.119 [DEBUG] [Thread-139545] [transport.py] [_log()] EOF in transport thread
2026-01-01T03:12:25.202 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T03:12:25.214 [DEBUG] [Thread-139548] [transport.py] [_log()] starting thread (client mode): 0xb6bbebc0
2026-01-01T03:12:25.214 [DEBUG] [Thread-139548] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T03:12:25.229 [DEBUG] [Thread-139548] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T03:12:25.230 [INFO] [Thread-139548] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T03:12:25.237 [DEBUG] [Thread-139548] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T03:12:25.237 [DEBUG] [Thread-139548] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T03:12:25.238 [DEBUG] [Thread-139548] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T03:12:25.238 [DEBUG] [Thread-139548] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:12:25.238 [DEBUG] [Thread-139548] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:12:25.238 [DEBUG] [Thread-139548] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:12:25.238 [DEBUG] [Thread-139548] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:12:25.238 [DEBUG] [Thread-139548] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T03:12:25.238 [DEBUG] [Thread-139548] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T03:12:25.238 [DEBUG] [Thread-139548] [transport.py] [_log()] client lang: <none>
2026-01-01T03:12:25.238 [DEBUG] [Thread-139548] [transport.py] [_log()] server lang: <none>
2026-01-01T03:12:25.238 [DEBUG] [Thread-139548] [transport.py] [_log()] kex follows: False
2026-01-01T03:12:25.238 [DEBUG] [Thread-139548] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T03:12:25.238 [DEBUG] [Thread-139548] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T03:12:25.239 [DEBUG] [Thread-139548] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T03:12:25.239 [DEBUG] [Thread-139548] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T03:12:25.239 [DEBUG] [Thread-139548] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T03:12:25.239 [DEBUG] [Thread-139548] [transport.py] [_log()] Compression: none
2026-01-01T03:12:25.239 [DEBUG] [Thread-139548] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T03:12:25.295 [DEBUG] [Thread-139548] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T03:12:25.295 [DEBUG] [Thread-139548] [transport.py] [_log()] Switch to new keys ...
2026-01-01T03:12:25.296 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T03:12:25.296 [DEBUG] [Thread-139548] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T03:12:25.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T03:12:25.351 [DEBUG] [Thread-139548] [transport.py] [_log()] userauth is OK
2026-01-01T03:12:25.351 [DEBUG] [Thread-139548] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T03:12:25.351 [DEBUG] [Thread-139548] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T03:12:25.351 [DEBUG] [Thread-139548] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T03:12:25.351 [DEBUG] [Thread-139548] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T03:12:25.369 [INFO] [Thread-139548] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T03:12:25.369 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T03:12:25.370 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T03:12:26.259 [DEBUG] [Thread-139548] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T03:12:26.260 [DEBUG] [Thread-139548] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T03:12:26.308 [DEBUG] [Thread-139548] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T03:12:26.308 [DEBUG] [Thread-139548] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T03:12:26.316 [DEBUG] [Thread-139548] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T03:12:26.324 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T03:12:26.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T03:12:26.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T03:12:26.340 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T03:12:26.340 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T03:12:26.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T03:12:26.348 [DEBUG] [Thread-139548] [transport.py] [_log()] EOF in transport thread
2026-01-01T03:12:35.169 [DEBUG] [Thread-139550 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:12:50.213 [DEBUG] [Thread-139551 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:12:56.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T03:12:56.371 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T03:12:56.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T03:12:57.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 3, 12, 42), 2.9, 82.72, 0.0, 13.08, 12.73, 0, 1, 0, 2, 0, 0),)
2026-01-01T03:12:57.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 03:12:42
2026-01-01T03:12:57.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T03:12:57.395 [DEBUG] [Thread-139552] [transport.py] [_log()] starting thread (client mode): 0xb6bbcdc0
2026-01-01T03:12:57.395 [DEBUG] [Thread-139552] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T03:12:57.416 [DEBUG] [Thread-139552] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T03:12:57.416 [INFO] [Thread-139552] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T03:12:57.419 [DEBUG] [Thread-139552] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T03:12:57.419 [DEBUG] [Thread-139552] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T03:12:57.419 [DEBUG] [Thread-139552] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T03:12:57.419 [DEBUG] [Thread-139552] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:12:57.419 [DEBUG] [Thread-139552] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:12:57.419 [DEBUG] [Thread-139552] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:12:57.419 [DEBUG] [Thread-139552] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:12:57.419 [DEBUG] [Thread-139552] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T03:12:57.419 [DEBUG] [Thread-139552] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T03:12:57.419 [DEBUG] [Thread-139552] [transport.py] [_log()] client lang: <none>
2026-01-01T03:12:57.419 [DEBUG] [Thread-139552] [transport.py] [_log()] server lang: <none>
2026-01-01T03:12:57.419 [DEBUG] [Thread-139552] [transport.py] [_log()] kex follows: False
2026-01-01T03:12:57.419 [DEBUG] [Thread-139552] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T03:12:57.419 [DEBUG] [Thread-139552] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T03:12:57.419 [DEBUG] [Thread-139552] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T03:12:57.420 [DEBUG] [Thread-139552] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T03:12:57.420 [DEBUG] [Thread-139552] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T03:12:57.420 [DEBUG] [Thread-139552] [transport.py] [_log()] Compression: none
2026-01-01T03:12:57.420 [DEBUG] [Thread-139552] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T03:12:57.436 [DEBUG] [Thread-139552] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T03:12:57.436 [DEBUG] [Thread-139552] [transport.py] [_log()] Switch to new keys ...
2026-01-01T03:12:57.437 [DEBUG] [Thread-139552] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T03:12:57.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T03:12:57.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T03:12:57.481 [DEBUG] [Thread-139552] [transport.py] [_log()] userauth is OK
2026-01-01T03:12:57.481 [DEBUG] [Thread-139552] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T03:12:57.481 [DEBUG] [Thread-139552] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T03:12:57.482 [DEBUG] [Thread-139552] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T03:12:57.482 [DEBUG] [Thread-139552] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T03:12:57.502 [INFO] [Thread-139552] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T03:12:57.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T03:12:58.122 [DEBUG] [Thread-139552] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T03:12:58.122 [DEBUG] [Thread-139552] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T03:12:58.122 [DEBUG] [Thread-139552] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T03:12:58.163 [DEBUG] [Thread-139552] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T03:12:58.163 [DEBUG] [Thread-139552] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T03:12:58.167 [DEBUG] [Thread-139552] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T03:12:58.177 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T03:12:58.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T03:12:58.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T03:12:58.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T03:12:58.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T03:12:58.189 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T03:12:58.189 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T03:12:58.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T03:12:58.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T03:12:58.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.050478 -999.00  +12.80   5.53     85  +10.40 1 1 1 2 1     0    0 2.11 -20.73 ZNESW 6.3 5.5 208.2 9.8 13.6 -21.2 13.4 -20.8 13.2 -19.1 13.5 -20.1
2026-01-01T03:12:58.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T03:12:58.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T03:12:58.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.050478
2026-01-01T03:12:58.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T03:12:58.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T03:12:58.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T03:12:58.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T03:12:58.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T03:12:58.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T03:12:42', tmtdew=2.9, humidity=82.72, cloud=0.0, wind=13.08, temperature=12.73, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T03:12:42', seeing=0.83, atlas_timestamp='2026-01-01T01:12:41.299', atlas_cloud=1, atlas_rain=1, zp_data=[0.021249999999998437, 0.07475000000000165, 0.04075000000000095, 0.027499999999999858, 0.03850000000000087, 0.05125000000000135, 0.07350000000000101, 0.16125000000000078, 0.12349999999999994, 0.15399999999999991, 0.045249999999999346, 0.06300000000000061, 0.08549999999999969, 0.13924999999999876, 0.08549999999999969, 0.0259999999999998, 0.1092499999999994, 0.18149999999999977, 0.11799999999999855, 0.08924999999999983, 0.08799999999999919, 0.08224999999999838, 0.07125000000000092, 0.1412500000000012, 0.12400000000000055, 0.16249999999999964, 0.1667500000000004, 0.15850000000000009, 0.12849999999999895, 0.11050000000000182, 0.1850000000000005, 0.27500000000000036, 0.145249999999999], zp_timestamp='2026-01-01T01:09:00')
2026-01-01T03:12:58.191 [DEBUG] [Thread-139552] [transport.py] [_log()] EOF in transport thread
2026-01-01T03:12:58.278 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T03:12:58.291 [DEBUG] [Thread-139555] [transport.py] [_log()] starting thread (client mode): 0xb6bbc0a0
2026-01-01T03:12:58.291 [DEBUG] [Thread-139555] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T03:12:58.307 [DEBUG] [Thread-139555] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T03:12:58.307 [INFO] [Thread-139555] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T03:12:58.314 [DEBUG] [Thread-139555] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T03:12:58.314 [DEBUG] [Thread-139555] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T03:12:58.314 [DEBUG] [Thread-139555] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T03:12:58.315 [DEBUG] [Thread-139555] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:12:58.315 [DEBUG] [Thread-139555] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:12:58.315 [DEBUG] [Thread-139555] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:12:58.315 [DEBUG] [Thread-139555] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:12:58.315 [DEBUG] [Thread-139555] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T03:12:58.315 [DEBUG] [Thread-139555] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T03:12:58.315 [DEBUG] [Thread-139555] [transport.py] [_log()] client lang: <none>
2026-01-01T03:12:58.315 [DEBUG] [Thread-139555] [transport.py] [_log()] server lang: <none>
2026-01-01T03:12:58.315 [DEBUG] [Thread-139555] [transport.py] [_log()] kex follows: False
2026-01-01T03:12:58.315 [DEBUG] [Thread-139555] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T03:12:58.315 [DEBUG] [Thread-139555] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T03:12:58.315 [DEBUG] [Thread-139555] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T03:12:58.315 [DEBUG] [Thread-139555] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T03:12:58.315 [DEBUG] [Thread-139555] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T03:12:58.315 [DEBUG] [Thread-139555] [transport.py] [_log()] Compression: none
2026-01-01T03:12:58.315 [DEBUG] [Thread-139555] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T03:12:58.379 [DEBUG] [Thread-139555] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T03:12:58.380 [DEBUG] [Thread-139555] [transport.py] [_log()] Switch to new keys ...
2026-01-01T03:12:58.380 [DEBUG] [Thread-139555] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T03:12:58.381 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T03:12:58.382 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T03:12:58.438 [DEBUG] [Thread-139555] [transport.py] [_log()] userauth is OK
2026-01-01T03:12:58.439 [DEBUG] [Thread-139555] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T03:12:58.439 [DEBUG] [Thread-139555] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T03:12:58.439 [DEBUG] [Thread-139555] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T03:12:58.439 [DEBUG] [Thread-139555] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T03:12:58.458 [INFO] [Thread-139555] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T03:12:58.459 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T03:12:58.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T03:12:59.350 [DEBUG] [Thread-139555] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T03:12:59.351 [DEBUG] [Thread-139555] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T03:12:59.399 [DEBUG] [Thread-139555] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T03:12:59.399 [DEBUG] [Thread-139555] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T03:12:59.408 [DEBUG] [Thread-139555] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T03:12:59.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T03:12:59.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T03:12:59.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T03:12:59.437 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T03:12:59.437 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T03:12:59.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T03:12:59.446 [DEBUG] [Thread-139555] [transport.py] [_log()] EOF in transport thread
2026-01-01T03:13:05.251 [DEBUG] [Thread-139557 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:13:08.024 [DEBUG] [Thread-139558 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:13:11.791 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:13:11.792 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:13:20.295 [DEBUG] [Thread-139559 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:13:29.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T03:13:29.468 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T03:13:29.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T03:13:30.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 3, 13, 14), 2.89, 82.75, 0.0, 13.11, 12.68, 0, 1, 0, 2, 0, 0),)
2026-01-01T03:13:30.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 03:13:14
2026-01-01T03:13:30.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T03:13:30.447 [DEBUG] [Thread-139560] [transport.py] [_log()] starting thread (client mode): 0xb9544430
2026-01-01T03:13:30.448 [DEBUG] [Thread-139560] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T03:13:30.470 [DEBUG] [Thread-139560] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T03:13:30.470 [INFO] [Thread-139560] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T03:13:30.473 [DEBUG] [Thread-139560] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T03:13:30.474 [DEBUG] [Thread-139560] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T03:13:30.474 [DEBUG] [Thread-139560] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T03:13:30.474 [DEBUG] [Thread-139560] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:13:30.474 [DEBUG] [Thread-139560] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:13:30.474 [DEBUG] [Thread-139560] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:13:30.474 [DEBUG] [Thread-139560] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:13:30.474 [DEBUG] [Thread-139560] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T03:13:30.474 [DEBUG] [Thread-139560] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T03:13:30.474 [DEBUG] [Thread-139560] [transport.py] [_log()] client lang: <none>
2026-01-01T03:13:30.474 [DEBUG] [Thread-139560] [transport.py] [_log()] server lang: <none>
2026-01-01T03:13:30.474 [DEBUG] [Thread-139560] [transport.py] [_log()] kex follows: False
2026-01-01T03:13:30.474 [DEBUG] [Thread-139560] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T03:13:30.474 [DEBUG] [Thread-139560] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T03:13:30.474 [DEBUG] [Thread-139560] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T03:13:30.474 [DEBUG] [Thread-139560] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T03:13:30.474 [DEBUG] [Thread-139560] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T03:13:30.474 [DEBUG] [Thread-139560] [transport.py] [_log()] Compression: none
2026-01-01T03:13:30.474 [DEBUG] [Thread-139560] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T03:13:30.491 [DEBUG] [Thread-139560] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T03:13:30.491 [DEBUG] [Thread-139560] [transport.py] [_log()] Switch to new keys ...
2026-01-01T03:13:30.492 [DEBUG] [Thread-139560] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T03:13:30.492 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T03:13:30.492 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T03:13:30.494 [DEBUG] [Thread-139560] [transport.py] [_log()] userauth is OK
2026-01-01T03:13:30.495 [DEBUG] [Thread-139560] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T03:13:30.495 [DEBUG] [Thread-139560] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T03:13:30.495 [DEBUG] [Thread-139560] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T03:13:30.495 [DEBUG] [Thread-139560] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T03:13:30.517 [INFO] [Thread-139560] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T03:13:30.518 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T03:13:31.120 [DEBUG] [Thread-139560] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T03:13:31.120 [DEBUG] [Thread-139560] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T03:13:31.121 [DEBUG] [Thread-139560] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T03:13:31.161 [DEBUG] [Thread-139560] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T03:13:31.161 [DEBUG] [Thread-139560] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T03:13:31.164 [DEBUG] [Thread-139560] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T03:13:31.177 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T03:13:31.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T03:13:31.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T03:13:31.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T03:13:31.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T03:13:31.184 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T03:13:31.184 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T03:13:31.184 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T03:13:31.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T03:13:31.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.050825 -999.00  +12.80   6.21     85  +10.40 1 1 1 2 1     0    0 2.02 -22.85 ZNESW 6.1 6.2 215.9 10.5 13.6 -21.2 13.4 -20.8 13.2 -19.1 13.5 -20.2
2026-01-01T03:13:31.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T03:13:31.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T03:13:31.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.050825
2026-01-01T03:13:31.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T03:13:31.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T03:13:31.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T03:13:31.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T03:13:31.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T03:13:31.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T03:13:14', tmtdew=2.89, humidity=82.75, cloud=0.0, wind=13.11, temperature=12.68, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T03:13:14', seeing=0.74, atlas_timestamp='2026-01-01T01:13:11.280', atlas_cloud=1, atlas_rain=1, zp_data=[0.03824999999999967, 0.09025000000000105, 0.05825000000000102, 0.02049999999999841, 0.037499999999999645, 0.04225000000000101, 0.10849999999999937, 0.13625000000000043, 0.17050000000000054, 0.13100000000000023, 0.05025000000000013, 0.06400000000000006, 0.08399999999999963, 0.11224999999999952, 0.06599999999999895, 0.06199999999999939, 0.11224999999999952, 0.18249999999999922, 0.11599999999999966, 0.13124999999999964, 0.11199999999999832, 0.10774999999999935, 0.08825000000000216, 0.1667500000000004, 0.13349999999999973, 0.14449999999999896, 0.19375000000000142, 0.16549999999999976, 0.10299999999999976, 0.10850000000000115, 0.17100000000000115, 0.27200000000000113, 0.1507499999999986], zp_timestamp='2026-01-01T01:11:00')
2026-01-01T03:13:31.185 [DEBUG] [Thread-139560] [transport.py] [_log()] EOF in transport thread
2026-01-01T03:13:31.261 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T03:13:31.272 [DEBUG] [Thread-139563] [transport.py] [_log()] starting thread (client mode): 0xb9546680
2026-01-01T03:13:31.272 [DEBUG] [Thread-139563] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T03:13:31.288 [DEBUG] [Thread-139563] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T03:13:31.288 [INFO] [Thread-139563] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T03:13:31.295 [DEBUG] [Thread-139563] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T03:13:31.295 [DEBUG] [Thread-139563] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T03:13:31.295 [DEBUG] [Thread-139563] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T03:13:31.296 [DEBUG] [Thread-139563] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:13:31.296 [DEBUG] [Thread-139563] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:13:31.296 [DEBUG] [Thread-139563] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:13:31.296 [DEBUG] [Thread-139563] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:13:31.296 [DEBUG] [Thread-139563] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T03:13:31.296 [DEBUG] [Thread-139563] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T03:13:31.296 [DEBUG] [Thread-139563] [transport.py] [_log()] client lang: <none>
2026-01-01T03:13:31.296 [DEBUG] [Thread-139563] [transport.py] [_log()] server lang: <none>
2026-01-01T03:13:31.296 [DEBUG] [Thread-139563] [transport.py] [_log()] kex follows: False
2026-01-01T03:13:31.296 [DEBUG] [Thread-139563] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T03:13:31.296 [DEBUG] [Thread-139563] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T03:13:31.296 [DEBUG] [Thread-139563] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T03:13:31.296 [DEBUG] [Thread-139563] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T03:13:31.296 [DEBUG] [Thread-139563] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T03:13:31.296 [DEBUG] [Thread-139563] [transport.py] [_log()] Compression: none
2026-01-01T03:13:31.296 [DEBUG] [Thread-139563] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T03:13:31.354 [DEBUG] [Thread-139563] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T03:13:31.354 [DEBUG] [Thread-139563] [transport.py] [_log()] Switch to new keys ...
2026-01-01T03:13:31.355 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T03:13:31.355 [DEBUG] [Thread-139563] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T03:13:31.356 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T03:13:31.409 [DEBUG] [Thread-139563] [transport.py] [_log()] userauth is OK
2026-01-01T03:13:31.410 [DEBUG] [Thread-139563] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T03:13:31.410 [DEBUG] [Thread-139563] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T03:13:31.410 [DEBUG] [Thread-139563] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T03:13:31.410 [DEBUG] [Thread-139563] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T03:13:31.428 [INFO] [Thread-139563] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T03:13:31.429 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T03:13:31.430 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T03:13:32.265 [DEBUG] [Thread-139563] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T03:13:32.265 [DEBUG] [Thread-139563] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T03:13:32.313 [DEBUG] [Thread-139563] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T03:13:32.313 [DEBUG] [Thread-139563] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T03:13:32.323 [DEBUG] [Thread-139563] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T03:13:32.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T03:13:32.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')
2026-01-01T03:13:32.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T03:13:32.351 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T03:13:32.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T03:13:32.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T03:13:32.360 [DEBUG] [Thread-139563] [transport.py] [_log()] EOF in transport thread
2026-01-01T03:13:35.331 [DEBUG] [Thread-139565 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:13:50.381 [DEBUG] [Thread-139566 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:14:02.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T03:14:02.382 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T03:14:02.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T03:14:03.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 3, 13, 46), 2.81, 82.92, 0.0, 13.32, 12.67, 0, 1, 0, 2, 0, 0),)
2026-01-01T03:14:03.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 03:13:46
2026-01-01T03:14:03.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T03:14:03.362 [DEBUG] [Thread-139567] [transport.py] [_log()] starting thread (client mode): 0xb6bbeb60
2026-01-01T03:14:03.362 [DEBUG] [Thread-139567] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T03:14:03.384 [DEBUG] [Thread-139567] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T03:14:03.384 [INFO] [Thread-139567] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T03:14:03.387 [DEBUG] [Thread-139567] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T03:14:03.388 [DEBUG] [Thread-139567] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T03:14:03.388 [DEBUG] [Thread-139567] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T03:14:03.388 [DEBUG] [Thread-139567] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:14:03.388 [DEBUG] [Thread-139567] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:14:03.388 [DEBUG] [Thread-139567] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:14:03.388 [DEBUG] [Thread-139567] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:14:03.388 [DEBUG] [Thread-139567] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T03:14:03.388 [DEBUG] [Thread-139567] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T03:14:03.388 [DEBUG] [Thread-139567] [transport.py] [_log()] client lang: <none>
2026-01-01T03:14:03.388 [DEBUG] [Thread-139567] [transport.py] [_log()] server lang: <none>
2026-01-01T03:14:03.388 [DEBUG] [Thread-139567] [transport.py] [_log()] kex follows: False
2026-01-01T03:14:03.388 [DEBUG] [Thread-139567] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T03:14:03.388 [DEBUG] [Thread-139567] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T03:14:03.388 [DEBUG] [Thread-139567] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T03:14:03.388 [DEBUG] [Thread-139567] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T03:14:03.388 [DEBUG] [Thread-139567] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T03:14:03.388 [DEBUG] [Thread-139567] [transport.py] [_log()] Compression: none
2026-01-01T03:14:03.389 [DEBUG] [Thread-139567] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T03:14:03.406 [DEBUG] [Thread-139567] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T03:14:03.406 [DEBUG] [Thread-139567] [transport.py] [_log()] Switch to new keys ...
2026-01-01T03:14:03.407 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T03:14:03.407 [DEBUG] [Thread-139567] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T03:14:03.408 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T03:14:03.410 [DEBUG] [Thread-139567] [transport.py] [_log()] userauth is OK
2026-01-01T03:14:03.410 [DEBUG] [Thread-139567] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T03:14:03.410 [DEBUG] [Thread-139567] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T03:14:03.410 [DEBUG] [Thread-139567] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T03:14:03.410 [DEBUG] [Thread-139567] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T03:14:03.434 [INFO] [Thread-139567] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T03:14:03.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T03:14:04.051 [DEBUG] [Thread-139567] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T03:14:04.051 [DEBUG] [Thread-139567] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T03:14:04.052 [DEBUG] [Thread-139567] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T03:14:04.092 [DEBUG] [Thread-139567] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T03:14:04.092 [DEBUG] [Thread-139567] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T03:14:04.096 [DEBUG] [Thread-139567] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T03:14:04.107 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T03:14:04.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T03:14:04.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T03:14:04.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T03:14:04.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T03:14:04.118 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T03:14:04.118 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T03:14:04.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T03:14:04.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T03:14:04.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.051172 -999.00  +12.80   6.08     85  +10.40 1 1 1 2 1     0    0 2.02 -22.76 ZNESW 5.8 6.1 242.3 9.7 13.5 -21.1 13.4 -21.0 13.2 -19.1 13.5 -20.4
2026-01-01T03:14:04.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T03:14:04.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T03:14:04.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.051172
2026-01-01T03:14:04.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T03:14:04.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T03:14:04.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T03:14:04.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T03:14:04.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T03:14:04.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T03:13:46', tmtdew=2.81, humidity=82.92, cloud=0.0, wind=13.32, temperature=12.67, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T03:13:47', seeing=0.74, atlas_timestamp='2026-01-01T01:13:41.261', atlas_cloud=1, atlas_rain=1, zp_data=[0.03824999999999967, 0.09025000000000105, 0.05825000000000102, 0.02049999999999841, 0.037499999999999645, 0.04225000000000101, 0.10849999999999937, 0.13625000000000043, 0.17050000000000054, 0.13100000000000023, 0.05025000000000013, 0.06400000000000006, 0.08399999999999963, 0.11224999999999952, 0.06599999999999895, 0.06199999999999939, 0.11224999999999952, 0.18249999999999922, 0.11599999999999966, 0.13124999999999964, 0.11199999999999832, 0.10774999999999935, 0.08825000000000216, 0.1667500000000004, 0.13349999999999973, 0.14449999999999896, 0.19375000000000142, 0.16549999999999976, 0.10299999999999976, 0.10850000000000115, 0.17100000000000115, 0.27200000000000113, 0.1507499999999986], zp_timestamp='2026-01-01T01:11:00')
2026-01-01T03:14:04.122 [DEBUG] [Thread-139567] [transport.py] [_log()] EOF in transport thread
2026-01-01T03:14:04.208 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T03:14:04.221 [DEBUG] [Thread-139570] [transport.py] [_log()] starting thread (client mode): 0xb6b29180
2026-01-01T03:14:04.221 [DEBUG] [Thread-139570] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T03:14:04.240 [DEBUG] [Thread-139570] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T03:14:04.240 [INFO] [Thread-139570] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T03:14:04.249 [DEBUG] [Thread-139570] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T03:14:04.250 [DEBUG] [Thread-139570] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T03:14:04.250 [DEBUG] [Thread-139570] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T03:14:04.250 [DEBUG] [Thread-139570] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:14:04.250 [DEBUG] [Thread-139570] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:14:04.250 [DEBUG] [Thread-139570] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:14:04.250 [DEBUG] [Thread-139570] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:14:04.250 [DEBUG] [Thread-139570] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T03:14:04.250 [DEBUG] [Thread-139570] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T03:14:04.250 [DEBUG] [Thread-139570] [transport.py] [_log()] client lang: <none>
2026-01-01T03:14:04.250 [DEBUG] [Thread-139570] [transport.py] [_log()] server lang: <none>
2026-01-01T03:14:04.250 [DEBUG] [Thread-139570] [transport.py] [_log()] kex follows: False
2026-01-01T03:14:04.250 [DEBUG] [Thread-139570] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T03:14:04.250 [DEBUG] [Thread-139570] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T03:14:04.251 [DEBUG] [Thread-139570] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T03:14:04.251 [DEBUG] [Thread-139570] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T03:14:04.251 [DEBUG] [Thread-139570] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T03:14:04.251 [DEBUG] [Thread-139570] [transport.py] [_log()] Compression: none
2026-01-01T03:14:04.251 [DEBUG] [Thread-139570] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T03:14:04.311 [DEBUG] [Thread-139570] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T03:14:04.312 [DEBUG] [Thread-139570] [transport.py] [_log()] Switch to new keys ...
2026-01-01T03:14:04.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T03:14:04.313 [DEBUG] [Thread-139570] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T03:14:04.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T03:14:04.371 [DEBUG] [Thread-139570] [transport.py] [_log()] userauth is OK
2026-01-01T03:14:04.371 [DEBUG] [Thread-139570] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T03:14:04.371 [DEBUG] [Thread-139570] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T03:14:04.371 [DEBUG] [Thread-139570] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T03:14:04.372 [DEBUG] [Thread-139570] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T03:14:04.389 [INFO] [Thread-139570] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T03:14:04.389 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T03:14:04.389 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T03:14:05.288 [DEBUG] [Thread-139570] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T03:14:05.288 [DEBUG] [Thread-139570] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T03:14:05.336 [DEBUG] [Thread-139570] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T03:14:05.336 [DEBUG] [Thread-139570] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T03:14:05.345 [DEBUG] [Thread-139570] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T03:14:05.354 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T03:14:05.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T03:14:05.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T03:14:05.372 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T03:14:05.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T03:14:05.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T03:14:05.382 [DEBUG] [Thread-139570] [transport.py] [_log()] EOF in transport thread
2026-01-01T03:14:05.409 [DEBUG] [Thread-139572 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:14:08.090 [DEBUG] [Thread-139573 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:14:11.992 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:14:11.994 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:14:20.457 [DEBUG] [Thread-139574 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:14:35.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T03:14:35.404 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T03:14:35.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T03:14:35.484 [DEBUG] [Thread-139575 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:14:36.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 3, 14, 19), 2.8, 82.98, 0.0, 13.34, 12.7, 0, 1, 0, 2, 0, 0),)
2026-01-01T03:14:36.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 03:14:19
2026-01-01T03:14:36.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T03:14:36.409 [DEBUG] [Thread-139576] [transport.py] [_log()] starting thread (client mode): 0xb6b295a0
2026-01-01T03:14:36.410 [DEBUG] [Thread-139576] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T03:14:36.424 [DEBUG] [Thread-139576] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T03:14:36.424 [INFO] [Thread-139576] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T03:14:36.427 [DEBUG] [Thread-139576] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T03:14:36.427 [DEBUG] [Thread-139576] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T03:14:36.427 [DEBUG] [Thread-139576] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T03:14:36.427 [DEBUG] [Thread-139576] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:14:36.427 [DEBUG] [Thread-139576] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:14:36.427 [DEBUG] [Thread-139576] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:14:36.427 [DEBUG] [Thread-139576] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:14:36.427 [DEBUG] [Thread-139576] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T03:14:36.427 [DEBUG] [Thread-139576] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T03:14:36.427 [DEBUG] [Thread-139576] [transport.py] [_log()] client lang: <none>
2026-01-01T03:14:36.427 [DEBUG] [Thread-139576] [transport.py] [_log()] server lang: <none>
2026-01-01T03:14:36.428 [DEBUG] [Thread-139576] [transport.py] [_log()] kex follows: False
2026-01-01T03:14:36.428 [DEBUG] [Thread-139576] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T03:14:36.428 [DEBUG] [Thread-139576] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T03:14:36.428 [DEBUG] [Thread-139576] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T03:14:36.428 [DEBUG] [Thread-139576] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T03:14:36.428 [DEBUG] [Thread-139576] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T03:14:36.428 [DEBUG] [Thread-139576] [transport.py] [_log()] Compression: none
2026-01-01T03:14:36.428 [DEBUG] [Thread-139576] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T03:14:36.445 [DEBUG] [Thread-139576] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T03:14:36.446 [DEBUG] [Thread-139576] [transport.py] [_log()] Switch to new keys ...
2026-01-01T03:14:36.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T03:14:36.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T03:14:36.447 [DEBUG] [Thread-139576] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T03:14:36.447 [DEBUG] [Thread-139576] [transport.py] [_log()] userauth is OK
2026-01-01T03:14:36.447 [DEBUG] [Thread-139576] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T03:14:36.448 [DEBUG] [Thread-139576] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T03:14:36.448 [DEBUG] [Thread-139576] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T03:14:36.448 [DEBUG] [Thread-139576] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T03:14:36.471 [INFO] [Thread-139576] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T03:14:36.472 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T03:14:37.115 [DEBUG] [Thread-139576] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T03:14:37.115 [DEBUG] [Thread-139576] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T03:14:37.115 [DEBUG] [Thread-139576] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T03:14:37.156 [DEBUG] [Thread-139576] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T03:14:37.156 [DEBUG] [Thread-139576] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T03:14:37.159 [DEBUG] [Thread-139576] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T03:14:37.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T03:14:37.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T03:14:37.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T03:14:37.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T03:14:37.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T03:14:37.181 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T03:14:37.182 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T03:14:37.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T03:14:37.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T03:14:37.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.051519 -999.00  +12.80   7.59     85  +10.40 1 1 1 2 1     0    0 1.97 -23.31 ZNESW 7.9 7.6 228.9 10.2 13.5 -21.1 13.4 -20.7 13.2 -19.2 13.5 -20.2
2026-01-01T03:14:37.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T03:14:37.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T03:14:37.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.051519
2026-01-01T03:14:37.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T03:14:37.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T03:14:37.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T03:14:37.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T03:14:37.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T03:14:37.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T03:14:19', tmtdew=2.8, humidity=82.98, cloud=0.0, wind=13.34, temperature=12.7, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T03:14:19', seeing=0.78, atlas_timestamp='2026-01-01T01:14:11.242', atlas_cloud=1, atlas_rain=1, zp_data=[0.03824999999999967, 0.09025000000000105, 0.05825000000000102, 0.02049999999999841, 0.037499999999999645, 0.04225000000000101, 0.10849999999999937, 0.13625000000000043, 0.17050000000000054, 0.13100000000000023, 0.05025000000000013, 0.06400000000000006, 0.08399999999999963, 0.11224999999999952, 0.06599999999999895, 0.06199999999999939, 0.11224999999999952, 0.18249999999999922, 0.11599999999999966, 0.13124999999999964, 0.11199999999999832, 0.10774999999999935, 0.08825000000000216, 0.1667500000000004, 0.13349999999999973, 0.14449999999999896, 0.19375000000000142, 0.16549999999999976, 0.10299999999999976, 0.10850000000000115, 0.17100000000000115, 0.27200000000000113, 0.1507499999999986], zp_timestamp='2026-01-01T01:11:00')
2026-01-01T03:14:37.185 [DEBUG] [Thread-139576] [transport.py] [_log()] EOF in transport thread
2026-01-01T03:14:37.268 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T03:14:37.280 [DEBUG] [Thread-139579] [transport.py] [_log()] starting thread (client mode): 0xb1795210
2026-01-01T03:14:37.281 [DEBUG] [Thread-139579] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T03:14:37.296 [DEBUG] [Thread-139579] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T03:14:37.296 [INFO] [Thread-139579] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T03:14:37.305 [DEBUG] [Thread-139579] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T03:14:37.306 [DEBUG] [Thread-139579] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T03:14:37.306 [DEBUG] [Thread-139579] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T03:14:37.306 [DEBUG] [Thread-139579] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:14:37.306 [DEBUG] [Thread-139579] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:14:37.306 [DEBUG] [Thread-139579] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:14:37.306 [DEBUG] [Thread-139579] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:14:37.306 [DEBUG] [Thread-139579] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T03:14:37.306 [DEBUG] [Thread-139579] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T03:14:37.306 [DEBUG] [Thread-139579] [transport.py] [_log()] client lang: <none>
2026-01-01T03:14:37.306 [DEBUG] [Thread-139579] [transport.py] [_log()] server lang: <none>
2026-01-01T03:14:37.306 [DEBUG] [Thread-139579] [transport.py] [_log()] kex follows: False
2026-01-01T03:14:37.306 [DEBUG] [Thread-139579] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T03:14:37.306 [DEBUG] [Thread-139579] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T03:14:37.306 [DEBUG] [Thread-139579] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T03:14:37.306 [DEBUG] [Thread-139579] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T03:14:37.307 [DEBUG] [Thread-139579] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T03:14:37.307 [DEBUG] [Thread-139579] [transport.py] [_log()] Compression: none
2026-01-01T03:14:37.307 [DEBUG] [Thread-139579] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T03:14:37.364 [DEBUG] [Thread-139579] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T03:14:37.365 [DEBUG] [Thread-139579] [transport.py] [_log()] Switch to new keys ...
2026-01-01T03:14:37.366 [DEBUG] [Thread-139579] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T03:14:37.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T03:14:37.367 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T03:14:37.420 [DEBUG] [Thread-139579] [transport.py] [_log()] userauth is OK
2026-01-01T03:14:37.420 [DEBUG] [Thread-139579] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T03:14:37.421 [DEBUG] [Thread-139579] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T03:14:37.421 [DEBUG] [Thread-139579] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T03:14:37.421 [DEBUG] [Thread-139579] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T03:14:37.439 [INFO] [Thread-139579] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T03:14:37.440 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T03:14:37.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T03:14:38.277 [DEBUG] [Thread-139579] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T03:14:38.277 [DEBUG] [Thread-139579] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T03:14:38.325 [DEBUG] [Thread-139579] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T03:14:38.325 [DEBUG] [Thread-139579] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T03:14:38.336 [DEBUG] [Thread-139579] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T03:14:38.345 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T03:14:38.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T03:14:38.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T03:14:38.366 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T03:14:38.367 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T03:14:38.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T03:14:38.375 [DEBUG] [Thread-139579] [transport.py] [_log()] EOF in transport thread
2026-01-01T03:14:50.520 [DEBUG] [Thread-139581 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:15:05.570 [DEBUG] [Thread-139582 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:15:08.163 [DEBUG] [Thread-139583 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:15:08.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T03:15:08.398 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T03:15:08.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T03:15:09.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 3, 14, 51), 2.78, 83.1, 0.0, 13.23, 12.68, 0, 1, 0, 2, 0, 0),)
2026-01-01T03:15:09.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 03:14:51
2026-01-01T03:15:09.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T03:15:09.433 [DEBUG] [Thread-139584] [transport.py] [_log()] starting thread (client mode): 0xb9559510
2026-01-01T03:15:09.434 [DEBUG] [Thread-139584] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T03:15:09.451 [DEBUG] [Thread-139584] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T03:15:09.451 [INFO] [Thread-139584] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T03:15:09.454 [DEBUG] [Thread-139584] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T03:15:09.454 [DEBUG] [Thread-139584] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T03:15:09.454 [DEBUG] [Thread-139584] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T03:15:09.455 [DEBUG] [Thread-139584] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:15:09.455 [DEBUG] [Thread-139584] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:15:09.455 [DEBUG] [Thread-139584] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:15:09.455 [DEBUG] [Thread-139584] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:15:09.455 [DEBUG] [Thread-139584] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T03:15:09.455 [DEBUG] [Thread-139584] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T03:15:09.455 [DEBUG] [Thread-139584] [transport.py] [_log()] client lang: <none>
2026-01-01T03:15:09.455 [DEBUG] [Thread-139584] [transport.py] [_log()] server lang: <none>
2026-01-01T03:15:09.455 [DEBUG] [Thread-139584] [transport.py] [_log()] kex follows: False
2026-01-01T03:15:09.455 [DEBUG] [Thread-139584] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T03:15:09.455 [DEBUG] [Thread-139584] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T03:15:09.455 [DEBUG] [Thread-139584] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T03:15:09.455 [DEBUG] [Thread-139584] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T03:15:09.455 [DEBUG] [Thread-139584] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T03:15:09.455 [DEBUG] [Thread-139584] [transport.py] [_log()] Compression: none
2026-01-01T03:15:09.455 [DEBUG] [Thread-139584] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T03:15:09.471 [DEBUG] [Thread-139584] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T03:15:09.471 [DEBUG] [Thread-139584] [transport.py] [_log()] Switch to new keys ...
2026-01-01T03:15:09.472 [DEBUG] [Thread-139584] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T03:15:09.472 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T03:15:09.472 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T03:15:09.474 [DEBUG] [Thread-139584] [transport.py] [_log()] userauth is OK
2026-01-01T03:15:09.474 [DEBUG] [Thread-139584] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T03:15:09.474 [DEBUG] [Thread-139584] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T03:15:09.474 [DEBUG] [Thread-139584] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T03:15:09.474 [DEBUG] [Thread-139584] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T03:15:09.487 [INFO] [Thread-139584] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T03:15:09.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T03:15:10.066 [DEBUG] [Thread-139584] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T03:15:10.066 [DEBUG] [Thread-139584] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T03:15:10.066 [DEBUG] [Thread-139584] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T03:15:10.108 [DEBUG] [Thread-139584] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T03:15:10.108 [DEBUG] [Thread-139584] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T03:15:10.110 [DEBUG] [Thread-139584] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T03:15:10.125 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T03:15:10.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T03:15:10.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T03:15:10.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T03:15:10.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T03:15:10.129 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T03:15:10.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T03:15:10.129 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T03:15:10.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T03:15:10.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.051867 -999.00  +12.80   7.62     85  +10.40 1 1 1 2 1     0    0 2.02 -24.28 ZNESW 10.2 7.6 215.9 10.5 13.5 -21.1 13.4 -20.7 13.2 -19.1 13.5 -20.3
2026-01-01T03:15:10.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T03:15:10.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T03:15:10.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.051867
2026-01-01T03:15:10.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T03:15:10.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T03:15:10.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T03:15:10.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T03:15:10.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T03:15:10.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T03:14:51', tmtdew=2.78, humidity=83.1, cloud=0.0, wind=13.23, temperature=12.68, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T03:14:51', seeing=0.73, atlas_timestamp='2026-01-01T01:14:41.309', atlas_cloud=1, atlas_rain=1, zp_data=[0.03824999999999967, 0.09025000000000105, 0.05825000000000102, 0.02049999999999841, 0.037499999999999645, 0.04225000000000101, 0.10849999999999937, 0.13625000000000043, 0.17050000000000054, 0.13100000000000023, 0.05025000000000013, 0.06400000000000006, 0.08399999999999963, 0.11224999999999952, 0.06599999999999895, 0.06199999999999939, 0.11224999999999952, 0.18249999999999922, 0.11599999999999966, 0.13124999999999964, 0.11199999999999832, 0.10774999999999935, 0.08825000000000216, 0.1667500000000004, 0.13349999999999973, 0.14449999999999896, 0.19375000000000142, 0.16549999999999976, 0.10299999999999976, 0.10850000000000115, 0.17100000000000115, 0.27200000000000113, 0.1507499999999986], zp_timestamp='2026-01-01T01:11:00')
2026-01-01T03:15:10.130 [DEBUG] [Thread-139584] [transport.py] [_log()] EOF in transport thread
2026-01-01T03:15:10.204 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T03:15:10.218 [DEBUG] [Thread-139587] [transport.py] [_log()] starting thread (client mode): 0xb955a5c0
2026-01-01T03:15:10.218 [DEBUG] [Thread-139587] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T03:15:10.234 [DEBUG] [Thread-139587] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T03:15:10.234 [INFO] [Thread-139587] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T03:15:10.242 [DEBUG] [Thread-139587] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T03:15:10.242 [DEBUG] [Thread-139587] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T03:15:10.242 [DEBUG] [Thread-139587] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T03:15:10.242 [DEBUG] [Thread-139587] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:15:10.242 [DEBUG] [Thread-139587] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:15:10.242 [DEBUG] [Thread-139587] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:15:10.242 [DEBUG] [Thread-139587] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:15:10.242 [DEBUG] [Thread-139587] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T03:15:10.242 [DEBUG] [Thread-139587] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T03:15:10.242 [DEBUG] [Thread-139587] [transport.py] [_log()] client lang: <none>
2026-01-01T03:15:10.242 [DEBUG] [Thread-139587] [transport.py] [_log()] server lang: <none>
2026-01-01T03:15:10.242 [DEBUG] [Thread-139587] [transport.py] [_log()] kex follows: False
2026-01-01T03:15:10.242 [DEBUG] [Thread-139587] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T03:15:10.242 [DEBUG] [Thread-139587] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T03:15:10.242 [DEBUG] [Thread-139587] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T03:15:10.242 [DEBUG] [Thread-139587] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T03:15:10.242 [DEBUG] [Thread-139587] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T03:15:10.242 [DEBUG] [Thread-139587] [transport.py] [_log()] Compression: none
2026-01-01T03:15:10.242 [DEBUG] [Thread-139587] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T03:15:10.297 [DEBUG] [Thread-139587] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T03:15:10.297 [DEBUG] [Thread-139587] [transport.py] [_log()] Switch to new keys ...
2026-01-01T03:15:10.298 [DEBUG] [Thread-139587] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T03:15:10.298 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T03:15:10.298 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T03:15:10.354 [DEBUG] [Thread-139587] [transport.py] [_log()] userauth is OK
2026-01-01T03:15:10.354 [DEBUG] [Thread-139587] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T03:15:10.355 [DEBUG] [Thread-139587] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T03:15:10.355 [DEBUG] [Thread-139587] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T03:15:10.355 [DEBUG] [Thread-139587] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T03:15:10.372 [INFO] [Thread-139587] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T03:15:10.372 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T03:15:10.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T03:15:11.187 [DEBUG] [Thread-139587] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T03:15:11.187 [DEBUG] [Thread-139587] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T03:15:11.235 [DEBUG] [Thread-139587] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T03:15:11.235 [DEBUG] [Thread-139587] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T03:15:11.244 [DEBUG] [Thread-139587] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T03:15:11.252 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T03:15:11.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T03:15:11.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T03:15:11.268 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T03:15:11.268 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T03:15:11.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T03:15:11.276 [DEBUG] [Thread-139587] [transport.py] [_log()] EOF in transport thread
2026-01-01T03:15:12.194 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:15:12.196 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:15:20.602 [DEBUG] [Thread-139589 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:15:35.663 [DEBUG] [Thread-139590 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:15:41.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T03:15:41.299 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T03:15:41.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T03:15:42.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 3, 15, 23), 2.78, 83.1, 0.0, 12.51, 12.65, 0, 1, 0, 2, 0, 0),)
2026-01-01T03:15:42.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 03:15:23
2026-01-01T03:15:42.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T03:15:42.290 [DEBUG] [Thread-139591] [transport.py] [_log()] starting thread (client mode): 0xb9558dc0
2026-01-01T03:15:42.290 [DEBUG] [Thread-139591] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T03:15:42.310 [DEBUG] [Thread-139591] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T03:15:42.310 [INFO] [Thread-139591] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T03:15:42.313 [DEBUG] [Thread-139591] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T03:15:42.313 [DEBUG] [Thread-139591] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T03:15:42.313 [DEBUG] [Thread-139591] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T03:15:42.313 [DEBUG] [Thread-139591] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:15:42.313 [DEBUG] [Thread-139591] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:15:42.313 [DEBUG] [Thread-139591] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:15:42.313 [DEBUG] [Thread-139591] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:15:42.313 [DEBUG] [Thread-139591] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T03:15:42.313 [DEBUG] [Thread-139591] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T03:15:42.313 [DEBUG] [Thread-139591] [transport.py] [_log()] client lang: <none>
2026-01-01T03:15:42.313 [DEBUG] [Thread-139591] [transport.py] [_log()] server lang: <none>
2026-01-01T03:15:42.313 [DEBUG] [Thread-139591] [transport.py] [_log()] kex follows: False
2026-01-01T03:15:42.313 [DEBUG] [Thread-139591] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T03:15:42.313 [DEBUG] [Thread-139591] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T03:15:42.313 [DEBUG] [Thread-139591] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T03:15:42.313 [DEBUG] [Thread-139591] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T03:15:42.313 [DEBUG] [Thread-139591] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T03:15:42.313 [DEBUG] [Thread-139591] [transport.py] [_log()] Compression: none
2026-01-01T03:15:42.313 [DEBUG] [Thread-139591] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T03:15:42.331 [DEBUG] [Thread-139591] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T03:15:42.332 [DEBUG] [Thread-139591] [transport.py] [_log()] Switch to new keys ...
2026-01-01T03:15:42.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T03:15:42.332 [DEBUG] [Thread-139591] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T03:15:42.333 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T03:15:42.334 [DEBUG] [Thread-139591] [transport.py] [_log()] userauth is OK
2026-01-01T03:15:42.335 [DEBUG] [Thread-139591] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T03:15:42.335 [DEBUG] [Thread-139591] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T03:15:42.335 [DEBUG] [Thread-139591] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T03:15:42.335 [DEBUG] [Thread-139591] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T03:15:42.373 [INFO] [Thread-139591] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T03:15:42.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T03:15:43.002 [DEBUG] [Thread-139591] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T03:15:43.002 [DEBUG] [Thread-139591] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T03:15:43.002 [DEBUG] [Thread-139591] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T03:15:43.043 [DEBUG] [Thread-139591] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T03:15:43.043 [DEBUG] [Thread-139591] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T03:15:43.046 [DEBUG] [Thread-139591] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T03:15:43.059 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T03:15:43.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T03:15:43.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T03:15:43.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T03:15:43.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T03:15:43.073 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T03:15:43.073 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T03:15:43.073 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T03:15:43.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T03:15:43.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.051867 -999.00  +12.80   7.62     85  +10.40 1 1 1 2 1     0    0 2.02 -24.28 ZNESW 10.2 7.6 215.9 10.5 13.5 -21.1 13.4 -20.7 13.2 -19.1 13.5 -20.3
2026-01-01T03:15:43.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T03:15:43.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T03:15:43.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.051867
2026-01-01T03:15:43.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T03:15:43.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T03:15:43.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T03:15:43.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T03:15:43.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T03:15:43.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T03:15:23', tmtdew=2.78, humidity=83.1, cloud=0.0, wind=12.51, temperature=12.65, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T03:15:23', seeing=0.72, atlas_timestamp='2026-01-01T01:14:41.309', atlas_cloud=1, atlas_rain=1, zp_data=[0.03824999999999967, 0.09025000000000105, 0.05825000000000102, 0.02049999999999841, 0.037499999999999645, 0.04225000000000101, 0.10849999999999937, 0.13625000000000043, 0.17050000000000054, 0.13100000000000023, 0.05025000000000013, 0.06400000000000006, 0.08399999999999963, 0.11224999999999952, 0.06599999999999895, 0.06199999999999939, 0.11224999999999952, 0.18249999999999922, 0.11599999999999966, 0.13124999999999964, 0.11199999999999832, 0.10774999999999935, 0.08825000000000216, 0.1667500000000004, 0.13349999999999973, 0.14449999999999896, 0.19375000000000142, 0.16549999999999976, 0.10299999999999976, 0.10850000000000115, 0.17100000000000115, 0.27200000000000113, 0.1507499999999986], zp_timestamp='2026-01-01T01:11:00')
2026-01-01T03:15:43.076 [DEBUG] [Thread-139591] [transport.py] [_log()] EOF in transport thread
2026-01-01T03:15:43.159 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T03:15:43.170 [DEBUG] [Thread-139594] [transport.py] [_log()] starting thread (client mode): 0xb6ba0a00
2026-01-01T03:15:43.170 [DEBUG] [Thread-139594] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T03:15:43.185 [DEBUG] [Thread-139594] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T03:15:43.185 [INFO] [Thread-139594] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T03:15:43.193 [DEBUG] [Thread-139594] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T03:15:43.193 [DEBUG] [Thread-139594] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T03:15:43.193 [DEBUG] [Thread-139594] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T03:15:43.193 [DEBUG] [Thread-139594] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:15:43.193 [DEBUG] [Thread-139594] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:15:43.193 [DEBUG] [Thread-139594] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:15:43.193 [DEBUG] [Thread-139594] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:15:43.193 [DEBUG] [Thread-139594] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T03:15:43.193 [DEBUG] [Thread-139594] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T03:15:43.193 [DEBUG] [Thread-139594] [transport.py] [_log()] client lang: <none>
2026-01-01T03:15:43.193 [DEBUG] [Thread-139594] [transport.py] [_log()] server lang: <none>
2026-01-01T03:15:43.193 [DEBUG] [Thread-139594] [transport.py] [_log()] kex follows: False
2026-01-01T03:15:43.193 [DEBUG] [Thread-139594] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T03:15:43.194 [DEBUG] [Thread-139594] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T03:15:43.194 [DEBUG] [Thread-139594] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T03:15:43.194 [DEBUG] [Thread-139594] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T03:15:43.194 [DEBUG] [Thread-139594] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T03:15:43.194 [DEBUG] [Thread-139594] [transport.py] [_log()] Compression: none
2026-01-01T03:15:43.194 [DEBUG] [Thread-139594] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T03:15:43.250 [DEBUG] [Thread-139594] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T03:15:43.251 [DEBUG] [Thread-139594] [transport.py] [_log()] Switch to new keys ...
2026-01-01T03:15:43.251 [DEBUG] [Thread-139594] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T03:15:43.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T03:15:43.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T03:15:43.306 [DEBUG] [Thread-139594] [transport.py] [_log()] userauth is OK
2026-01-01T03:15:43.307 [DEBUG] [Thread-139594] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T03:15:43.307 [DEBUG] [Thread-139594] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T03:15:43.307 [DEBUG] [Thread-139594] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T03:15:43.307 [DEBUG] [Thread-139594] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T03:15:43.332 [INFO] [Thread-139594] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T03:15:43.332 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T03:15:43.333 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T03:15:44.162 [DEBUG] [Thread-139594] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T03:15:44.162 [DEBUG] [Thread-139594] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T03:15:44.210 [DEBUG] [Thread-139594] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T03:15:44.210 [DEBUG] [Thread-139594] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T03:15:44.220 [DEBUG] [Thread-139594] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T03:15:44.229 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T03:15:44.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T03:15:44.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T03:15:44.248 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T03:15:44.248 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T03:15:44.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T03:15:44.256 [DEBUG] [Thread-139594] [transport.py] [_log()] EOF in transport thread
2026-01-01T03:15:50.693 [DEBUG] [Thread-139596 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:16:05.739 [DEBUG] [Thread-139597 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:16:08.233 [DEBUG] [Thread-139598 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:16:12.397 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:16:12.398 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:16:14.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T03:16:14.264 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T03:16:14.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
2026-01-01T03:16:14.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 3, 15, 55), 2.76, 83.16, 0.0, 14.1, 12.62, 0, 1, 0, 2, 0, 0),)
2026-01-01T03:16:14.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 03:15:55
2026-01-01T03:16:15.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T03:16:15.255 [DEBUG] [Thread-139599] [transport.py] [_log()] starting thread (client mode): 0xb6b2b0d0
2026-01-01T03:16:15.255 [DEBUG] [Thread-139599] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T03:16:15.276 [DEBUG] [Thread-139599] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T03:16:15.276 [INFO] [Thread-139599] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T03:16:15.279 [DEBUG] [Thread-139599] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T03:16:15.279 [DEBUG] [Thread-139599] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T03:16:15.279 [DEBUG] [Thread-139599] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T03:16:15.279 [DEBUG] [Thread-139599] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:16:15.279 [DEBUG] [Thread-139599] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:16:15.279 [DEBUG] [Thread-139599] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:16:15.279 [DEBUG] [Thread-139599] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:16:15.279 [DEBUG] [Thread-139599] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T03:16:15.279 [DEBUG] [Thread-139599] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T03:16:15.279 [DEBUG] [Thread-139599] [transport.py] [_log()] client lang: <none>
2026-01-01T03:16:15.279 [DEBUG] [Thread-139599] [transport.py] [_log()] server lang: <none>
2026-01-01T03:16:15.279 [DEBUG] [Thread-139599] [transport.py] [_log()] kex follows: False
2026-01-01T03:16:15.279 [DEBUG] [Thread-139599] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T03:16:15.280 [DEBUG] [Thread-139599] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T03:16:15.280 [DEBUG] [Thread-139599] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T03:16:15.280 [DEBUG] [Thread-139599] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T03:16:15.280 [DEBUG] [Thread-139599] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T03:16:15.280 [DEBUG] [Thread-139599] [transport.py] [_log()] Compression: none
2026-01-01T03:16:15.280 [DEBUG] [Thread-139599] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T03:16:15.297 [DEBUG] [Thread-139599] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T03:16:15.297 [DEBUG] [Thread-139599] [transport.py] [_log()] Switch to new keys ...
2026-01-01T03:16:15.298 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T03:16:15.298 [DEBUG] [Thread-139599] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T03:16:15.299 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T03:16:15.301 [DEBUG] [Thread-139599] [transport.py] [_log()] userauth is OK
2026-01-01T03:16:15.301 [DEBUG] [Thread-139599] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T03:16:15.301 [DEBUG] [Thread-139599] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T03:16:15.301 [DEBUG] [Thread-139599] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T03:16:15.301 [DEBUG] [Thread-139599] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T03:16:15.325 [INFO] [Thread-139599] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T03:16:15.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T03:16:15.979 [DEBUG] [Thread-139599] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T03:16:15.980 [DEBUG] [Thread-139599] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T03:16:15.981 [DEBUG] [Thread-139599] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T03:16:16.021 [DEBUG] [Thread-139599] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T03:16:16.021 [DEBUG] [Thread-139599] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T03:16:16.025 [DEBUG] [Thread-139599] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T03:16:16.037 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T03:16:16.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T03:16:16.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T03:16:16.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T03:16:16.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T03:16:16.048 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T03:16:16.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T03:16:16.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T03:16:16.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T03:16:16.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.052561 -999.00  +12.70  10.10     85  +10.40 1 1 1 2 1     0    0 1.87 -27.16 ZNESW 9.9 10.1 230.3 12.2 13.5 -21.2 13.4 -20.8 13.2 -19.2 13.4 -20.1
2026-01-01T03:16:16.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T03:16:16.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T03:16:16.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.052561
2026-01-01T03:16:16.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T03:16:16.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T03:16:16.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T03:16:16.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T03:16:16.051 [DEBUG] [Thread-139599] [transport.py] [_log()] EOF in transport thread
2026-01-01T03:16:16.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T03:16:16.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T03:15:55', tmtdew=2.76, humidity=83.16, cloud=0.0, wind=14.1, temperature=12.62, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T03:15:55', seeing=0.73, atlas_timestamp='2026-01-01T01:15:41.270', atlas_cloud=1, atlas_rain=1, zp_data=[0.027749999999999275, 0.09025000000000105, 0.04574999999999996, 0.006000000000000227, 0.0129999999999999, 0.06875000000000142, 0.09299999999999997, 0.15625, 0.1404999999999994, 0.1479999999999997, 0.049249999999998906, 0.06849999999999845, 0.08299999999999841, 0.12124999999999986, 0.0649999999999995, 0.05299999999999905, 0.09324999999999939, 0.1844999999999999, 0.1269999999999989, 0.11824999999999974, 0.07399999999999807, 0.11474999999999902, 0.06925000000000026, 0.13974999999999937, 0.1739999999999995, 0.15949999999999953, 0.1902500000000007, 0.12650000000000006, 0.125, 0.11750000000000149, 0.17050000000000054, 0.291500000000001, 0.1557499999999994], zp_timestamp='2026-01-01T01:14:00')
2026-01-01T03:16:16.134 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T03:16:16.146 [DEBUG] [Thread-139602] [transport.py] [_log()] starting thread (client mode): 0xb95593c0
2026-01-01T03:16:16.146 [DEBUG] [Thread-139602] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T03:16:16.162 [DEBUG] [Thread-139602] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T03:16:16.162 [INFO] [Thread-139602] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T03:16:16.170 [DEBUG] [Thread-139602] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T03:16:16.170 [DEBUG] [Thread-139602] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T03:16:16.170 [DEBUG] [Thread-139602] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T03:16:16.171 [DEBUG] [Thread-139602] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:16:16.171 [DEBUG] [Thread-139602] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:16:16.171 [DEBUG] [Thread-139602] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:16:16.171 [DEBUG] [Thread-139602] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:16:16.171 [DEBUG] [Thread-139602] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T03:16:16.171 [DEBUG] [Thread-139602] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T03:16:16.172 [DEBUG] [Thread-139602] [transport.py] [_log()] client lang: <none>
2026-01-01T03:16:16.172 [DEBUG] [Thread-139602] [transport.py] [_log()] server lang: <none>
2026-01-01T03:16:16.172 [DEBUG] [Thread-139602] [transport.py] [_log()] kex follows: False
2026-01-01T03:16:16.172 [DEBUG] [Thread-139602] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T03:16:16.172 [DEBUG] [Thread-139602] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T03:16:16.172 [DEBUG] [Thread-139602] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T03:16:16.172 [DEBUG] [Thread-139602] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T03:16:16.173 [DEBUG] [Thread-139602] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T03:16:16.173 [DEBUG] [Thread-139602] [transport.py] [_log()] Compression: none
2026-01-01T03:16:16.173 [DEBUG] [Thread-139602] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T03:16:16.232 [DEBUG] [Thread-139602] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T03:16:16.234 [DEBUG] [Thread-139602] [transport.py] [_log()] Switch to new keys ...
2026-01-01T03:16:16.235 [DEBUG] [Thread-139602] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T03:16:16.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T03:16:16.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T03:16:16.289 [DEBUG] [Thread-139602] [transport.py] [_log()] userauth is OK
2026-01-01T03:16:16.289 [DEBUG] [Thread-139602] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T03:16:16.290 [DEBUG] [Thread-139602] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T03:16:16.290 [DEBUG] [Thread-139602] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T03:16:16.290 [DEBUG] [Thread-139602] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T03:16:16.307 [INFO] [Thread-139602] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T03:16:16.308 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T03:16:16.308 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T03:16:17.167 [DEBUG] [Thread-139602] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T03:16:17.167 [DEBUG] [Thread-139602] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T03:16:17.215 [DEBUG] [Thread-139602] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T03:16:17.215 [DEBUG] [Thread-139602] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T03:16:17.225 [DEBUG] [Thread-139602] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T03:16:17.239 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T03:16:17.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T03:16:17.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T03:16:17.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T03:16:17.266 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T03:16:17.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T03:16:17.281 [DEBUG] [Thread-139602] [transport.py] [_log()] EOF in transport thread
2026-01-01T03:16:20.780 [DEBUG] [Thread-139604 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:16:35.834 [DEBUG] [Thread-139605 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:16:47.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T03:16:47.267 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T03:16:47.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T03:16:47.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 3, 16, 27), 2.75, 83.25, 0.0, 14.08, 12.62, 0, 1, 0, 2, 0, 0),)
2026-01-01T03:16:47.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 03:16:27
2026-01-01T03:16:48.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T03:16:48.265 [DEBUG] [Thread-139606] [transport.py] [_log()] starting thread (client mode): 0xb9559d20
2026-01-01T03:16:48.266 [DEBUG] [Thread-139606] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T03:16:48.287 [DEBUG] [Thread-139606] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T03:16:48.287 [INFO] [Thread-139606] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T03:16:48.290 [DEBUG] [Thread-139606] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T03:16:48.290 [DEBUG] [Thread-139606] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T03:16:48.290 [DEBUG] [Thread-139606] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T03:16:48.290 [DEBUG] [Thread-139606] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:16:48.290 [DEBUG] [Thread-139606] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:16:48.290 [DEBUG] [Thread-139606] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:16:48.290 [DEBUG] [Thread-139606] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:16:48.291 [DEBUG] [Thread-139606] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T03:16:48.291 [DEBUG] [Thread-139606] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T03:16:48.291 [DEBUG] [Thread-139606] [transport.py] [_log()] client lang: <none>
2026-01-01T03:16:48.291 [DEBUG] [Thread-139606] [transport.py] [_log()] server lang: <none>
2026-01-01T03:16:48.291 [DEBUG] [Thread-139606] [transport.py] [_log()] kex follows: False
2026-01-01T03:16:48.291 [DEBUG] [Thread-139606] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T03:16:48.291 [DEBUG] [Thread-139606] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T03:16:48.291 [DEBUG] [Thread-139606] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T03:16:48.291 [DEBUG] [Thread-139606] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T03:16:48.291 [DEBUG] [Thread-139606] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T03:16:48.291 [DEBUG] [Thread-139606] [transport.py] [_log()] Compression: none
2026-01-01T03:16:48.291 [DEBUG] [Thread-139606] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T03:16:48.308 [DEBUG] [Thread-139606] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T03:16:48.309 [DEBUG] [Thread-139606] [transport.py] [_log()] Switch to new keys ...
2026-01-01T03:16:48.309 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T03:16:48.310 [DEBUG] [Thread-139606] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T03:16:48.310 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T03:16:48.312 [DEBUG] [Thread-139606] [transport.py] [_log()] userauth is OK
2026-01-01T03:16:48.312 [DEBUG] [Thread-139606] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T03:16:48.312 [DEBUG] [Thread-139606] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T03:16:48.312 [DEBUG] [Thread-139606] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T03:16:48.312 [DEBUG] [Thread-139606] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T03:16:48.334 [INFO] [Thread-139606] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T03:16:48.334 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T03:16:48.956 [DEBUG] [Thread-139606] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T03:16:48.957 [DEBUG] [Thread-139606] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T03:16:48.957 [DEBUG] [Thread-139606] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T03:16:48.997 [DEBUG] [Thread-139606] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T03:16:48.997 [DEBUG] [Thread-139606] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T03:16:49.000 [DEBUG] [Thread-139606] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T03:16:49.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T03:16:49.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T03:16:49.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T03:16:49.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T03:16:49.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T03:16:49.025 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T03:16:49.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T03:16:49.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T03:16:49.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T03:16:49.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.052908 -999.00  +12.70   8.70     85  +10.30 1 1 1 2 1     0    0 1.83 -28.48 ZNESW 5.7 8.7 211.0 10.7 13.5 -21.4 13.4 -20.8 13.2 -19.2 13.5 -20.2
2026-01-01T03:16:49.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T03:16:49.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T03:16:49.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.052908
2026-01-01T03:16:49.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T03:16:49.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T03:16:49.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T03:16:49.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T03:16:49.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T03:16:49.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T03:16:27', tmtdew=2.75, humidity=83.25, cloud=0.0, wind=14.08, temperature=12.62, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T03:16:27', seeing=0.73, atlas_timestamp='2026-01-01T01:16:11.251', atlas_cloud=1, atlas_rain=1, zp_data=[0.027749999999999275, 0.09025000000000105, 0.04574999999999996, 0.006000000000000227, 0.0129999999999999, 0.06875000000000142, 0.09299999999999997, 0.15625, 0.1404999999999994, 0.1479999999999997, 0.049249999999998906, 0.06849999999999845, 0.08299999999999841, 0.12124999999999986, 0.0649999999999995, 0.05299999999999905, 0.09324999999999939, 0.1844999999999999, 0.1269999999999989, 0.11824999999999974, 0.07399999999999807, 0.11474999999999902, 0.06925000000000026, 0.13974999999999937, 0.1739999999999995, 0.15949999999999953, 0.1902500000000007, 0.12650000000000006, 0.125, 0.11750000000000149, 0.17050000000000054, 0.291500000000001, 0.1557499999999994], zp_timestamp='2026-01-01T01:14:00')
2026-01-01T03:16:49.028 [DEBUG] [Thread-139606] [transport.py] [_log()] EOF in transport thread
2026-01-01T03:16:49.111 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T03:16:49.124 [DEBUG] [Thread-139609] [transport.py] [_log()] starting thread (client mode): 0xb95f0d00
2026-01-01T03:16:49.124 [DEBUG] [Thread-139609] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T03:16:49.138 [DEBUG] [Thread-139609] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T03:16:49.139 [INFO] [Thread-139609] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T03:16:49.146 [DEBUG] [Thread-139609] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T03:16:49.147 [DEBUG] [Thread-139609] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T03:16:49.147 [DEBUG] [Thread-139609] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T03:16:49.147 [DEBUG] [Thread-139609] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:16:49.147 [DEBUG] [Thread-139609] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:16:49.147 [DEBUG] [Thread-139609] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:16:49.148 [DEBUG] [Thread-139609] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:16:49.148 [DEBUG] [Thread-139609] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T03:16:49.148 [DEBUG] [Thread-139609] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T03:16:49.148 [DEBUG] [Thread-139609] [transport.py] [_log()] client lang: <none>
2026-01-01T03:16:49.148 [DEBUG] [Thread-139609] [transport.py] [_log()] server lang: <none>
2026-01-01T03:16:49.148 [DEBUG] [Thread-139609] [transport.py] [_log()] kex follows: False
2026-01-01T03:16:49.148 [DEBUG] [Thread-139609] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T03:16:49.148 [DEBUG] [Thread-139609] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T03:16:49.148 [DEBUG] [Thread-139609] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T03:16:49.148 [DEBUG] [Thread-139609] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T03:16:49.148 [DEBUG] [Thread-139609] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T03:16:49.148 [DEBUG] [Thread-139609] [transport.py] [_log()] Compression: none
2026-01-01T03:16:49.148 [DEBUG] [Thread-139609] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T03:16:49.205 [DEBUG] [Thread-139609] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T03:16:49.205 [DEBUG] [Thread-139609] [transport.py] [_log()] Switch to new keys ...
2026-01-01T03:16:49.206 [DEBUG] [Thread-139609] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T03:16:49.206 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T03:16:49.207 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T03:16:49.261 [DEBUG] [Thread-139609] [transport.py] [_log()] userauth is OK
2026-01-01T03:16:49.261 [DEBUG] [Thread-139609] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T03:16:49.261 [DEBUG] [Thread-139609] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T03:16:49.261 [DEBUG] [Thread-139609] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T03:16:49.262 [DEBUG] [Thread-139609] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T03:16:49.283 [INFO] [Thread-139609] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T03:16:49.283 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T03:16:49.284 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T03:16:50.157 [DEBUG] [Thread-139609] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T03:16:50.157 [DEBUG] [Thread-139609] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T03:16:50.205 [DEBUG] [Thread-139609] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T03:16:50.205 [DEBUG] [Thread-139609] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T03:16:50.215 [DEBUG] [Thread-139609] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T03:16:50.224 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T03:16:50.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T03:16:50.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T03:16:50.243 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T03:16:50.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T03:16:50.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T03:16:50.252 [DEBUG] [Thread-139609] [transport.py] [_log()] EOF in transport thread
2026-01-01T03:16:50.874 [DEBUG] [Thread-139611 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:17:05.930 [DEBUG] [Thread-139612 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:17:08.305 [DEBUG] [Thread-139613 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:17:12.599 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:17:12.599 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:17:20.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T03:17:20.274 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T03:17:20.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T03:17:20.961 [DEBUG] [Thread-139614 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:17:20.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 3, 16, 59), 2.74, 83.28, 0.0, 13.52, 12.63, 0, 1, 0, 2, 0, 0),)
2026-01-01T03:17:20.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 03:16:59
2026-01-01T03:17:21.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T03:17:21.262 [DEBUG] [Thread-139615] [transport.py] [_log()] starting thread (client mode): 0xb6b03190
2026-01-01T03:17:21.262 [DEBUG] [Thread-139615] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T03:17:21.275 [DEBUG] [Thread-139615] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T03:17:21.275 [INFO] [Thread-139615] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T03:17:21.278 [DEBUG] [Thread-139615] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T03:17:21.279 [DEBUG] [Thread-139615] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T03:17:21.279 [DEBUG] [Thread-139615] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T03:17:21.279 [DEBUG] [Thread-139615] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:17:21.279 [DEBUG] [Thread-139615] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:17:21.279 [DEBUG] [Thread-139615] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:17:21.279 [DEBUG] [Thread-139615] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:17:21.279 [DEBUG] [Thread-139615] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T03:17:21.279 [DEBUG] [Thread-139615] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T03:17:21.279 [DEBUG] [Thread-139615] [transport.py] [_log()] client lang: <none>
2026-01-01T03:17:21.279 [DEBUG] [Thread-139615] [transport.py] [_log()] server lang: <none>
2026-01-01T03:17:21.279 [DEBUG] [Thread-139615] [transport.py] [_log()] kex follows: False
2026-01-01T03:17:21.279 [DEBUG] [Thread-139615] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T03:17:21.279 [DEBUG] [Thread-139615] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T03:17:21.279 [DEBUG] [Thread-139615] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T03:17:21.279 [DEBUG] [Thread-139615] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T03:17:21.279 [DEBUG] [Thread-139615] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T03:17:21.279 [DEBUG] [Thread-139615] [transport.py] [_log()] Compression: none
2026-01-01T03:17:21.279 [DEBUG] [Thread-139615] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T03:17:21.298 [DEBUG] [Thread-139615] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T03:17:21.299 [DEBUG] [Thread-139615] [transport.py] [_log()] Switch to new keys ...
2026-01-01T03:17:21.299 [DEBUG] [Thread-139615] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T03:17:21.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T03:17:21.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T03:17:21.302 [DEBUG] [Thread-139615] [transport.py] [_log()] userauth is OK
2026-01-01T03:17:21.302 [DEBUG] [Thread-139615] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T03:17:21.302 [DEBUG] [Thread-139615] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T03:17:21.303 [DEBUG] [Thread-139615] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T03:17:21.303 [DEBUG] [Thread-139615] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T03:17:21.326 [INFO] [Thread-139615] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T03:17:21.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T03:17:21.968 [DEBUG] [Thread-139615] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T03:17:21.968 [DEBUG] [Thread-139615] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T03:17:21.969 [DEBUG] [Thread-139615] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T03:17:22.009 [DEBUG] [Thread-139615] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T03:17:22.009 [DEBUG] [Thread-139615] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T03:17:22.014 [DEBUG] [Thread-139615] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T03:17:22.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T03:17:22.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T03:17:22.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T03:17:22.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T03:17:22.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T03:17:22.041 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T03:17:22.041 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T03:17:22.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T03:17:22.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T03:17:22.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.053255 -999.00  +12.70   7.31     85  +10.30 1 1 1 2 1     0    0 1.78 -30.22 ZNESW 5.7 7.3 223.2 9.6 13.4 -21.1 13.3 -20.8 13.1 -19.1 13.4 -20.2
2026-01-01T03:17:22.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T03:17:22.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T03:17:22.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.053255
2026-01-01T03:17:22.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T03:17:22.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T03:17:22.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T03:17:22.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T03:17:22.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T03:17:22.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T03:16:59', tmtdew=2.74, humidity=83.28, cloud=0.0, wind=13.52, temperature=12.63, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T03:16:59', seeing=0.78, atlas_timestamp='2026-01-01T01:16:41.232', atlas_cloud=1, atlas_rain=1, zp_data=[0.027749999999999275, 0.09025000000000105, 0.04574999999999996, 0.006000000000000227, 0.0129999999999999, 0.06875000000000142, 0.09299999999999997, 0.15625, 0.1404999999999994, 0.1479999999999997, 0.049249999999998906, 0.06849999999999845, 0.08299999999999841, 0.12124999999999986, 0.0649999999999995, 0.05299999999999905, 0.09324999999999939, 0.1844999999999999, 0.1269999999999989, 0.11824999999999974, 0.07399999999999807, 0.11474999999999902, 0.06925000000000026, 0.13974999999999937, 0.1739999999999995, 0.15949999999999953, 0.1902500000000007, 0.12650000000000006, 0.125, 0.11750000000000149, 0.17050000000000054, 0.291500000000001, 0.1557499999999994], zp_timestamp='2026-01-01T01:14:00')
2026-01-01T03:17:22.044 [DEBUG] [Thread-139615] [transport.py] [_log()] EOF in transport thread
2026-01-01T03:17:22.127 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T03:17:22.138 [DEBUG] [Thread-139618] [transport.py] [_log()] starting thread (client mode): 0xb9579ba0
2026-01-01T03:17:22.138 [DEBUG] [Thread-139618] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T03:17:22.155 [DEBUG] [Thread-139618] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T03:17:22.155 [INFO] [Thread-139618] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T03:17:22.163 [DEBUG] [Thread-139618] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T03:17:22.163 [DEBUG] [Thread-139618] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T03:17:22.163 [DEBUG] [Thread-139618] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T03:17:22.163 [DEBUG] [Thread-139618] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:17:22.164 [DEBUG] [Thread-139618] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:17:22.164 [DEBUG] [Thread-139618] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:17:22.164 [DEBUG] [Thread-139618] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:17:22.164 [DEBUG] [Thread-139618] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T03:17:22.164 [DEBUG] [Thread-139618] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T03:17:22.164 [DEBUG] [Thread-139618] [transport.py] [_log()] client lang: <none>
2026-01-01T03:17:22.164 [DEBUG] [Thread-139618] [transport.py] [_log()] server lang: <none>
2026-01-01T03:17:22.164 [DEBUG] [Thread-139618] [transport.py] [_log()] kex follows: False
2026-01-01T03:17:22.164 [DEBUG] [Thread-139618] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T03:17:22.165 [DEBUG] [Thread-139618] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T03:17:22.165 [DEBUG] [Thread-139618] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T03:17:22.165 [DEBUG] [Thread-139618] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T03:17:22.165 [DEBUG] [Thread-139618] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T03:17:22.165 [DEBUG] [Thread-139618] [transport.py] [_log()] Compression: none
2026-01-01T03:17:22.165 [DEBUG] [Thread-139618] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T03:17:22.221 [DEBUG] [Thread-139618] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T03:17:22.222 [DEBUG] [Thread-139618] [transport.py] [_log()] Switch to new keys ...
2026-01-01T03:17:22.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T03:17:22.224 [DEBUG] [Thread-139618] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T03:17:22.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T03:17:22.280 [DEBUG] [Thread-139618] [transport.py] [_log()] userauth is OK
2026-01-01T03:17:22.281 [DEBUG] [Thread-139618] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T03:17:22.281 [DEBUG] [Thread-139618] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T03:17:22.281 [DEBUG] [Thread-139618] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T03:17:22.282 [DEBUG] [Thread-139618] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T03:17:22.304 [INFO] [Thread-139618] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T03:17:22.304 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T03:17:22.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T03:17:23.127 [DEBUG] [Thread-139618] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T03:17:23.127 [DEBUG] [Thread-139618] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T03:17:23.175 [DEBUG] [Thread-139618] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T03:17:23.175 [DEBUG] [Thread-139618] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T03:17:23.185 [DEBUG] [Thread-139618] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T03:17:23.195 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T03:17: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')
2026-01-01T03:17:23.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T03:17:23.214 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T03:17:23.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T03:17:23.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T03:17:23.223 [DEBUG] [Thread-139618] [transport.py] [_log()] EOF in transport thread
2026-01-01T03:17:35.991 [DEBUG] [Thread-139620 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:17:51.044 [DEBUG] [Thread-139621 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:17:53.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T03:17:53.244 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T03:17:53.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T03:17:53.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 3, 17, 31), 2.73, 83.35, 0.0, 14.12, 12.63, 0, 1, 0, 2, 0, 0),)
2026-01-01T03:17:53.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 03:17:31
2026-01-01T03:17:54.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T03:17:54.238 [DEBUG] [Thread-139622] [transport.py] [_log()] starting thread (client mode): 0xb6ba1150
2026-01-01T03:17:54.238 [DEBUG] [Thread-139622] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T03:17:54.258 [DEBUG] [Thread-139622] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T03:17:54.258 [INFO] [Thread-139622] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T03:17:54.261 [DEBUG] [Thread-139622] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T03:17:54.261 [DEBUG] [Thread-139622] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T03:17:54.261 [DEBUG] [Thread-139622] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T03:17:54.261 [DEBUG] [Thread-139622] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:17:54.261 [DEBUG] [Thread-139622] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:17:54.261 [DEBUG] [Thread-139622] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:17:54.261 [DEBUG] [Thread-139622] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:17:54.261 [DEBUG] [Thread-139622] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T03:17:54.261 [DEBUG] [Thread-139622] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T03:17:54.261 [DEBUG] [Thread-139622] [transport.py] [_log()] client lang: <none>
2026-01-01T03:17:54.261 [DEBUG] [Thread-139622] [transport.py] [_log()] server lang: <none>
2026-01-01T03:17:54.261 [DEBUG] [Thread-139622] [transport.py] [_log()] kex follows: False
2026-01-01T03:17:54.261 [DEBUG] [Thread-139622] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T03:17:54.261 [DEBUG] [Thread-139622] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T03:17:54.261 [DEBUG] [Thread-139622] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T03:17:54.261 [DEBUG] [Thread-139622] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T03:17:54.261 [DEBUG] [Thread-139622] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T03:17:54.261 [DEBUG] [Thread-139622] [transport.py] [_log()] Compression: none
2026-01-01T03:17:54.261 [DEBUG] [Thread-139622] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T03:17:54.277 [DEBUG] [Thread-139622] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T03:17:54.278 [DEBUG] [Thread-139622] [transport.py] [_log()] Switch to new keys ...
2026-01-01T03:17:54.278 [DEBUG] [Thread-139622] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T03:17:54.279 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T03:17:54.279 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T03:17:54.281 [DEBUG] [Thread-139622] [transport.py] [_log()] userauth is OK
2026-01-01T03:17:54.281 [DEBUG] [Thread-139622] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T03:17:54.281 [DEBUG] [Thread-139622] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T03:17:54.281 [DEBUG] [Thread-139622] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T03:17:54.281 [DEBUG] [Thread-139622] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T03:17:54.317 [INFO] [Thread-139622] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T03:17:54.318 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T03:17:54.990 [DEBUG] [Thread-139622] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T03:17:54.990 [DEBUG] [Thread-139622] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T03:17:54.990 [DEBUG] [Thread-139622] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T03:17:55.031 [DEBUG] [Thread-139622] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T03:17:55.031 [DEBUG] [Thread-139622] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T03:17:55.034 [DEBUG] [Thread-139622] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T03:17:55.046 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T03:17:55.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T03:17:55.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T03:17:55.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T03:17:55.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T03:17:55.059 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T03:17:55.059 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T03:17:55.059 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T03:17:55.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T03:17:55.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.053603 -999.00  +12.70   4.67     85  +10.30 1 1 1 2 1     0    0 1.68 -30.71 ZNESW 5.6 4.7 247.0 9.1 13.5 -21.1 13.4 -20.8 13.2 -19.0 13.4 -20.1
2026-01-01T03:17:55.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T03:17:55.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T03:17:55.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.053603
2026-01-01T03:17:55.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T03:17:55.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T03:17:55.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T03:17:55.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T03:17:55.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T03:17:55.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T03:17:31', tmtdew=2.73, humidity=83.35, cloud=0.0, wind=14.12, temperature=12.63, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T03:17:31', seeing=0.78, atlas_timestamp='2026-01-01T01:17:11.299', atlas_cloud=1, atlas_rain=1, zp_data=[0.027749999999999275, 0.09025000000000105, 0.04574999999999996, 0.006000000000000227, 0.0129999999999999, 0.06875000000000142, 0.09299999999999997, 0.15625, 0.1404999999999994, 0.1479999999999997, 0.049249999999998906, 0.06849999999999845, 0.08299999999999841, 0.12124999999999986, 0.0649999999999995, 0.05299999999999905, 0.09324999999999939, 0.1844999999999999, 0.1269999999999989, 0.11824999999999974, 0.07399999999999807, 0.11474999999999902, 0.06925000000000026, 0.13974999999999937, 0.1739999999999995, 0.15949999999999953, 0.1902500000000007, 0.12650000000000006, 0.125, 0.11750000000000149, 0.17050000000000054, 0.291500000000001, 0.1557499999999994], zp_timestamp='2026-01-01T01:14:00')
2026-01-01T03:17:55.061 [DEBUG] [Thread-139622] [transport.py] [_log()] EOF in transport thread
2026-01-01T03:17:55.146 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T03:17:55.159 [DEBUG] [Thread-139625] [transport.py] [_log()] starting thread (client mode): 0xb95583d0
2026-01-01T03:17:55.159 [DEBUG] [Thread-139625] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T03:17:55.174 [DEBUG] [Thread-139625] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T03:17:55.174 [INFO] [Thread-139625] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T03:17:55.182 [DEBUG] [Thread-139625] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T03:17:55.182 [DEBUG] [Thread-139625] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T03:17:55.183 [DEBUG] [Thread-139625] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T03:17:55.183 [DEBUG] [Thread-139625] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:17:55.183 [DEBUG] [Thread-139625] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:17:55.183 [DEBUG] [Thread-139625] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:17:55.183 [DEBUG] [Thread-139625] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:17:55.183 [DEBUG] [Thread-139625] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T03:17:55.183 [DEBUG] [Thread-139625] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T03:17:55.183 [DEBUG] [Thread-139625] [transport.py] [_log()] client lang: <none>
2026-01-01T03:17:55.184 [DEBUG] [Thread-139625] [transport.py] [_log()] server lang: <none>
2026-01-01T03:17:55.184 [DEBUG] [Thread-139625] [transport.py] [_log()] kex follows: False
2026-01-01T03:17:55.184 [DEBUG] [Thread-139625] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T03:17:55.184 [DEBUG] [Thread-139625] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T03:17:55.184 [DEBUG] [Thread-139625] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T03:17:55.184 [DEBUG] [Thread-139625] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T03:17:55.184 [DEBUG] [Thread-139625] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T03:17:55.185 [DEBUG] [Thread-139625] [transport.py] [_log()] Compression: none
2026-01-01T03:17:55.185 [DEBUG] [Thread-139625] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T03:17:55.240 [DEBUG] [Thread-139625] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T03:17:55.241 [DEBUG] [Thread-139625] [transport.py] [_log()] Switch to new keys ...
2026-01-01T03:17:55.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T03:17:55.242 [DEBUG] [Thread-139625] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T03:17:55.243 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T03:17:55.296 [DEBUG] [Thread-139625] [transport.py] [_log()] userauth is OK
2026-01-01T03:17:55.296 [DEBUG] [Thread-139625] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T03:17:55.296 [DEBUG] [Thread-139625] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T03:17:55.297 [DEBUG] [Thread-139625] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T03:17:55.297 [DEBUG] [Thread-139625] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T03:17:55.316 [INFO] [Thread-139625] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T03:17:55.316 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T03:17:55.317 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T03:17:56.159 [DEBUG] [Thread-139625] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T03:17:56.159 [DEBUG] [Thread-139625] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T03:17:56.207 [DEBUG] [Thread-139625] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T03:17:56.207 [DEBUG] [Thread-139625] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T03:17:56.216 [DEBUG] [Thread-139625] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T03:17:56.225 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T03:17:56.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T03:17:56.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T03:17:56.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T03:17:56.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T03:17:56.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T03:17:56.250 [DEBUG] [Thread-139625] [transport.py] [_log()] EOF in transport thread
2026-01-01T03:18:06.076 [DEBUG] [Thread-139627 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:18:08.381 [DEBUG] [Thread-139628 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:18:12.801 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:18:12.802 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:18:21.134 [DEBUG] [Thread-139629 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:18:26.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T03:18:26.273 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T03:18:26.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T03:18:27.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 3, 18, 3), 2.74, 83.31, 0.0, 13.8, 12.58, 0, 1, 0, 2, 0, 0),)
2026-01-01T03:18:27.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 03:18:03
2026-01-01T03:18:27.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T03:18:27.314 [DEBUG] [Thread-139630] [transport.py] [_log()] starting thread (client mode): 0xb6ba3790
2026-01-01T03:18:27.314 [DEBUG] [Thread-139630] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T03:18:27.337 [DEBUG] [Thread-139630] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T03:18:27.337 [INFO] [Thread-139630] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T03:18:27.339 [DEBUG] [Thread-139630] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T03:18:27.339 [DEBUG] [Thread-139630] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T03:18:27.339 [DEBUG] [Thread-139630] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T03:18:27.339 [DEBUG] [Thread-139630] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:18:27.339 [DEBUG] [Thread-139630] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:18:27.339 [DEBUG] [Thread-139630] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:18:27.339 [DEBUG] [Thread-139630] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:18:27.339 [DEBUG] [Thread-139630] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T03:18:27.339 [DEBUG] [Thread-139630] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T03:18:27.339 [DEBUG] [Thread-139630] [transport.py] [_log()] client lang: <none>
2026-01-01T03:18:27.339 [DEBUG] [Thread-139630] [transport.py] [_log()] server lang: <none>
2026-01-01T03:18:27.339 [DEBUG] [Thread-139630] [transport.py] [_log()] kex follows: False
2026-01-01T03:18:27.339 [DEBUG] [Thread-139630] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T03:18:27.339 [DEBUG] [Thread-139630] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T03:18:27.339 [DEBUG] [Thread-139630] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T03:18:27.339 [DEBUG] [Thread-139630] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T03:18:27.339 [DEBUG] [Thread-139630] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T03:18:27.339 [DEBUG] [Thread-139630] [transport.py] [_log()] Compression: none
2026-01-01T03:18:27.339 [DEBUG] [Thread-139630] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T03:18:27.351 [DEBUG] [Thread-139630] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T03:18:27.351 [DEBUG] [Thread-139630] [transport.py] [_log()] Switch to new keys ...
2026-01-01T03:18:27.351 [DEBUG] [Thread-139630] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T03:18:27.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T03:18:27.352 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T03:18:27.352 [DEBUG] [Thread-139630] [transport.py] [_log()] userauth is OK
2026-01-01T03:18:27.352 [DEBUG] [Thread-139630] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T03:18:27.352 [DEBUG] [Thread-139630] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T03:18:27.352 [DEBUG] [Thread-139630] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T03:18:27.352 [DEBUG] [Thread-139630] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T03:18:27.382 [INFO] [Thread-139630] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T03:18:27.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T03:18:28.151 [DEBUG] [Thread-139630] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T03:18:28.151 [DEBUG] [Thread-139630] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T03:18:28.151 [DEBUG] [Thread-139630] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T03:18:28.191 [DEBUG] [Thread-139630] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T03:18:28.192 [DEBUG] [Thread-139630] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T03:18:28.194 [DEBUG] [Thread-139630] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T03:18:28.206 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T03:18:28.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T03:18:28.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T03:18:28.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T03:18:28.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T03:18:28.212 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T03:18:28.212 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T03:18:28.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T03:18:28.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T03:18:28.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.053950 -999.00  +12.70   6.95     85  +10.30 1 1 1 2 1     0    0 1.69 -32.60 ZNESW 7.1 7.0 233.8 10.3 13.5 -21.1 13.4 -20.8 13.1 -19.1 13.4 -20.3
2026-01-01T03:18:28.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T03:18:28.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T03:18:28.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.053950
2026-01-01T03:18:28.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T03:18:28.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T03:18:28.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T03:18:28.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T03:18:28.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T03:18:28.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T03:18:03', tmtdew=2.74, humidity=83.31, cloud=0.0, wind=13.8, temperature=12.58, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T03:18:03', seeing=0.81, atlas_timestamp='2026-01-01T01:17:41.280', atlas_cloud=1, atlas_rain=1, zp_data=[0.027749999999999275, 0.09025000000000105, 0.04574999999999996, 0.006000000000000227, 0.0129999999999999, 0.06875000000000142, 0.09299999999999997, 0.15625, 0.1404999999999994, 0.1479999999999997, 0.049249999999998906, 0.06849999999999845, 0.08299999999999841, 0.12124999999999986, 0.0649999999999995, 0.05299999999999905, 0.09324999999999939, 0.1844999999999999, 0.1269999999999989, 0.11824999999999974, 0.07399999999999807, 0.11474999999999902, 0.06925000000000026, 0.13974999999999937, 0.1739999999999995, 0.15949999999999953, 0.1902500000000007, 0.12650000000000006, 0.125, 0.11750000000000149, 0.17050000000000054, 0.291500000000001, 0.1557499999999994], zp_timestamp='2026-01-01T01:14:00')
2026-01-01T03:18:28.213 [DEBUG] [Thread-139630] [transport.py] [_log()] EOF in transport thread
2026-01-01T03:18:28.287 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T03:18:28.300 [DEBUG] [Thread-139633] [transport.py] [_log()] starting thread (client mode): 0xb1745ed0
2026-01-01T03:18:28.300 [DEBUG] [Thread-139633] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T03:18:28.315 [DEBUG] [Thread-139633] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T03:18:28.315 [INFO] [Thread-139633] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T03:18:28.325 [DEBUG] [Thread-139633] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T03:18:28.325 [DEBUG] [Thread-139633] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T03:18:28.325 [DEBUG] [Thread-139633] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T03:18:28.325 [DEBUG] [Thread-139633] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:18:28.325 [DEBUG] [Thread-139633] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:18:28.325 [DEBUG] [Thread-139633] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:18:28.325 [DEBUG] [Thread-139633] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:18:28.325 [DEBUG] [Thread-139633] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T03:18:28.325 [DEBUG] [Thread-139633] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T03:18:28.325 [DEBUG] [Thread-139633] [transport.py] [_log()] client lang: <none>
2026-01-01T03:18:28.325 [DEBUG] [Thread-139633] [transport.py] [_log()] server lang: <none>
2026-01-01T03:18:28.325 [DEBUG] [Thread-139633] [transport.py] [_log()] kex follows: False
2026-01-01T03:18:28.325 [DEBUG] [Thread-139633] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T03:18:28.325 [DEBUG] [Thread-139633] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T03:18:28.325 [DEBUG] [Thread-139633] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T03:18:28.325 [DEBUG] [Thread-139633] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T03:18:28.325 [DEBUG] [Thread-139633] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T03:18:28.325 [DEBUG] [Thread-139633] [transport.py] [_log()] Compression: none
2026-01-01T03:18:28.325 [DEBUG] [Thread-139633] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T03:18:28.382 [DEBUG] [Thread-139633] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T03:18:28.382 [DEBUG] [Thread-139633] [transport.py] [_log()] Switch to new keys ...
2026-01-01T03:18:28.382 [DEBUG] [Thread-139633] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T03:18:28.383 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T03:18:28.383 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T03:18:28.439 [DEBUG] [Thread-139633] [transport.py] [_log()] userauth is OK
2026-01-01T03:18:28.439 [DEBUG] [Thread-139633] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T03:18:28.439 [DEBUG] [Thread-139633] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T03:18:28.439 [DEBUG] [Thread-139633] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T03:18:28.439 [DEBUG] [Thread-139633] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T03:18:28.456 [INFO] [Thread-139633] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T03:18:28.457 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T03:18:28.457 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T03:18:29.297 [DEBUG] [Thread-139633] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T03:18:29.297 [DEBUG] [Thread-139633] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T03:18:29.345 [DEBUG] [Thread-139633] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T03:18:29.346 [DEBUG] [Thread-139633] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T03:18:29.355 [DEBUG] [Thread-139633] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T03:18:29.364 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T03:18:29.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T03:18:29.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T03:18:29.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T03:18:29.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T03:18:29.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T03:18:29.392 [DEBUG] [Thread-139633] [transport.py] [_log()] EOF in transport thread
2026-01-01T03:18:36.166 [DEBUG] [Thread-139635 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:18:51.209 [DEBUG] [Thread-139636 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:18:59.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T03:18:59.396 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T03:18:59.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T03:19:00.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 3, 18, 35), 2.67, 83.38, 0.0, 15.67, 12.53, 0, 1, 0, 2, 0, 0),)
2026-01-01T03:19:00.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 03:18:35
2026-01-01T03:19:00.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T03:19:00.398 [DEBUG] [Thread-139637] [transport.py] [_log()] starting thread (client mode): 0xb9547460
2026-01-01T03:19:00.398 [DEBUG] [Thread-139637] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T03:19:00.419 [DEBUG] [Thread-139637] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T03:19:00.420 [INFO] [Thread-139637] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T03:19:00.423 [DEBUG] [Thread-139637] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T03:19:00.423 [DEBUG] [Thread-139637] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T03:19:00.423 [DEBUG] [Thread-139637] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T03:19:00.423 [DEBUG] [Thread-139637] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:19:00.423 [DEBUG] [Thread-139637] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:19:00.423 [DEBUG] [Thread-139637] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:19:00.423 [DEBUG] [Thread-139637] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:19:00.423 [DEBUG] [Thread-139637] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T03:19:00.423 [DEBUG] [Thread-139637] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T03:19:00.423 [DEBUG] [Thread-139637] [transport.py] [_log()] client lang: <none>
2026-01-01T03:19:00.423 [DEBUG] [Thread-139637] [transport.py] [_log()] server lang: <none>
2026-01-01T03:19:00.423 [DEBUG] [Thread-139637] [transport.py] [_log()] kex follows: False
2026-01-01T03:19:00.423 [DEBUG] [Thread-139637] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T03:19:00.424 [DEBUG] [Thread-139637] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T03:19:00.424 [DEBUG] [Thread-139637] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T03:19:00.424 [DEBUG] [Thread-139637] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T03:19:00.424 [DEBUG] [Thread-139637] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T03:19:00.424 [DEBUG] [Thread-139637] [transport.py] [_log()] Compression: none
2026-01-01T03:19:00.424 [DEBUG] [Thread-139637] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T03:19:00.441 [DEBUG] [Thread-139637] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T03:19:00.442 [DEBUG] [Thread-139637] [transport.py] [_log()] Switch to new keys ...
2026-01-01T03:19:00.443 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T03:19:00.443 [DEBUG] [Thread-139637] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T03:19:00.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T03:19:00.445 [DEBUG] [Thread-139637] [transport.py] [_log()] userauth is OK
2026-01-01T03:19:00.446 [DEBUG] [Thread-139637] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T03:19:00.446 [DEBUG] [Thread-139637] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T03:19:00.446 [DEBUG] [Thread-139637] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T03:19:00.446 [DEBUG] [Thread-139637] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T03:19:00.470 [INFO] [Thread-139637] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T03:19:00.471 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T03:19:01.137 [DEBUG] [Thread-139637] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T03:19:01.138 [DEBUG] [Thread-139637] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T03:19:01.138 [DEBUG] [Thread-139637] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T03:19:01.179 [DEBUG] [Thread-139637] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T03:19:01.179 [DEBUG] [Thread-139637] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T03:19:01.183 [DEBUG] [Thread-139637] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T03:19:01.195 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T03:19:01.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T03:19:01.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T03:19:01.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T03:19:01.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T03:19:01.207 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T03:19:01.208 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T03:19:01.208 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T03:19:01.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T03:19:01.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.054297 -999.00  +12.70   9.31     85  +10.30 1 1 1 2 1     0    0 1.62 -35.50 ZNESW 7.6 9.3 214.4 11.6 13.4 -21.2 13.3 -20.8 13.1 -19.1 13.4 -20.2
2026-01-01T03:19:01.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T03:19:01.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T03:19:01.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.054297
2026-01-01T03:19:01.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T03:19:01.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T03:19:01.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T03:19:01.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T03:19:01.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T03:19:01.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T03:18:35', tmtdew=2.67, humidity=83.38, cloud=0.0, wind=15.67, temperature=12.53, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T03:18:35', seeing=0.84, atlas_timestamp='2026-01-01T01:18:11.261', atlas_cloud=1, atlas_rain=1, zp_data=[0.027749999999999275, 0.09025000000000105, 0.04574999999999996, 0.006000000000000227, 0.0129999999999999, 0.06875000000000142, 0.09299999999999997, 0.15625, 0.1404999999999994, 0.1479999999999997, 0.049249999999998906, 0.06849999999999845, 0.08299999999999841, 0.12124999999999986, 0.0649999999999995, 0.05299999999999905, 0.09324999999999939, 0.1844999999999999, 0.1269999999999989, 0.11824999999999974, 0.07399999999999807, 0.11474999999999902, 0.06925000000000026, 0.13974999999999937, 0.1739999999999995, 0.15949999999999953, 0.1902500000000007, 0.12650000000000006, 0.125, 0.11750000000000149, 0.17050000000000054, 0.291500000000001, 0.1557499999999994], zp_timestamp='2026-01-01T01:14:00')
2026-01-01T03:19:01.210 [DEBUG] [Thread-139637] [transport.py] [_log()] EOF in transport thread
2026-01-01T03:19:01.295 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T03:19:01.307 [DEBUG] [Thread-139640] [transport.py] [_log()] starting thread (client mode): 0xb6ba1cc0
2026-01-01T03:19:01.307 [DEBUG] [Thread-139640] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T03:19:01.324 [DEBUG] [Thread-139640] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T03:19:01.324 [INFO] [Thread-139640] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T03:19:01.331 [DEBUG] [Thread-139640] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T03:19:01.332 [DEBUG] [Thread-139640] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T03:19:01.332 [DEBUG] [Thread-139640] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T03:19:01.332 [DEBUG] [Thread-139640] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:19:01.332 [DEBUG] [Thread-139640] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:19:01.332 [DEBUG] [Thread-139640] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:19:01.332 [DEBUG] [Thread-139640] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:19:01.332 [DEBUG] [Thread-139640] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T03:19:01.332 [DEBUG] [Thread-139640] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T03:19:01.332 [DEBUG] [Thread-139640] [transport.py] [_log()] client lang: <none>
2026-01-01T03:19:01.332 [DEBUG] [Thread-139640] [transport.py] [_log()] server lang: <none>
2026-01-01T03:19:01.332 [DEBUG] [Thread-139640] [transport.py] [_log()] kex follows: False
2026-01-01T03:19:01.332 [DEBUG] [Thread-139640] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T03:19:01.332 [DEBUG] [Thread-139640] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T03:19:01.332 [DEBUG] [Thread-139640] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T03:19:01.333 [DEBUG] [Thread-139640] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T03:19:01.333 [DEBUG] [Thread-139640] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T03:19:01.333 [DEBUG] [Thread-139640] [transport.py] [_log()] Compression: none
2026-01-01T03:19:01.333 [DEBUG] [Thread-139640] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T03:19:01.395 [DEBUG] [Thread-139640] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T03:19:01.395 [DEBUG] [Thread-139640] [transport.py] [_log()] Switch to new keys ...
2026-01-01T03:19:01.396 [DEBUG] [Thread-139640] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T03:19:01.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T03:19:01.397 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T03:19:01.451 [DEBUG] [Thread-139640] [transport.py] [_log()] userauth is OK
2026-01-01T03:19:01.451 [DEBUG] [Thread-139640] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T03:19:01.451 [DEBUG] [Thread-139640] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T03:19:01.451 [DEBUG] [Thread-139640] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T03:19:01.452 [DEBUG] [Thread-139640] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T03:19:01.470 [INFO] [Thread-139640] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T03:19:01.471 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T03:19:01.472 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T03:19:02.357 [DEBUG] [Thread-139640] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T03:19:02.357 [DEBUG] [Thread-139640] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T03:19:02.404 [DEBUG] [Thread-139640] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T03:19:02.404 [DEBUG] [Thread-139640] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T03:19:02.413 [DEBUG] [Thread-139640] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T03:19:02.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T03:19:02.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T03:19:02.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T03:19:02.439 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T03:19:02.439 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T03:19:02.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T03:19:02.448 [DEBUG] [Thread-139640] [transport.py] [_log()] EOF in transport thread
2026-01-01T03:19:06.240 [DEBUG] [Thread-139642 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:19:08.450 [DEBUG] [Thread-139643 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:19:13.003 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:19:13.005 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:19:21.281 [DEBUG] [Thread-139644 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:19:32.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T03:19:32.464 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T03:19:32.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T03:19:33.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 3, 19, 7), 2.67, 83.43, 0.0, 14.95, 12.55, 0, 1, 0, 2, 0, 0),)
2026-01-01T03:19:33.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 03:19:07
2026-01-01T03:19:33.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T03:19:33.464 [DEBUG] [Thread-139645] [transport.py] [_log()] starting thread (client mode): 0xb957ba90
2026-01-01T03:19:33.464 [DEBUG] [Thread-139645] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T03:19:33.483 [DEBUG] [Thread-139645] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T03:19:33.483 [INFO] [Thread-139645] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T03:19:33.486 [DEBUG] [Thread-139645] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T03:19:33.486 [DEBUG] [Thread-139645] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T03:19:33.486 [DEBUG] [Thread-139645] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T03:19:33.486 [DEBUG] [Thread-139645] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:19:33.486 [DEBUG] [Thread-139645] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:19:33.486 [DEBUG] [Thread-139645] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:19:33.486 [DEBUG] [Thread-139645] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:19:33.486 [DEBUG] [Thread-139645] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T03:19:33.486 [DEBUG] [Thread-139645] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T03:19:33.486 [DEBUG] [Thread-139645] [transport.py] [_log()] client lang: <none>
2026-01-01T03:19:33.486 [DEBUG] [Thread-139645] [transport.py] [_log()] server lang: <none>
2026-01-01T03:19:33.486 [DEBUG] [Thread-139645] [transport.py] [_log()] kex follows: False
2026-01-01T03:19:33.486 [DEBUG] [Thread-139645] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T03:19:33.486 [DEBUG] [Thread-139645] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T03:19:33.486 [DEBUG] [Thread-139645] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T03:19:33.486 [DEBUG] [Thread-139645] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T03:19:33.486 [DEBUG] [Thread-139645] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T03:19:33.486 [DEBUG] [Thread-139645] [transport.py] [_log()] Compression: none
2026-01-01T03:19:33.486 [DEBUG] [Thread-139645] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T03:19:33.503 [DEBUG] [Thread-139645] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T03:19:33.503 [DEBUG] [Thread-139645] [transport.py] [_log()] Switch to new keys ...
2026-01-01T03:19:33.504 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T03:19:33.504 [DEBUG] [Thread-139645] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T03:19:33.505 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T03:19:33.506 [DEBUG] [Thread-139645] [transport.py] [_log()] userauth is OK
2026-01-01T03:19:33.506 [DEBUG] [Thread-139645] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T03:19:33.506 [DEBUG] [Thread-139645] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T03:19:33.506 [DEBUG] [Thread-139645] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T03:19:33.507 [DEBUG] [Thread-139645] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T03:19:33.531 [INFO] [Thread-139645] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T03:19:33.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T03:19:34.305 [DEBUG] [Thread-139645] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T03:19:34.305 [DEBUG] [Thread-139645] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T03:19:34.306 [DEBUG] [Thread-139645] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T03:19:34.346 [DEBUG] [Thread-139645] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T03:19:34.346 [DEBUG] [Thread-139645] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T03:19:34.350 [DEBUG] [Thread-139645] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T03:19:34.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T03:19:34.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T03:19:34.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T03:19:34.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T03:19:34.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T03:19:34.373 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T03:19:34.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T03:19:34.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T03:19:34.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T03:19:34.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.054645 -999.00  +12.60   9.73     85  +10.30 1 1 1 2 1     0    0 1.53 -36.77 ZNESW 7.1 9.7 220.2 10.6 13.4 -21.0 13.3 -20.8 13.1 -19.2 13.4 -20.1
2026-01-01T03:19:34.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T03:19:34.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T03:19:34.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.054645
2026-01-01T03:19:34.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T03:19:34.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T03:19:34.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T03:19:34.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T03:19:34.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T03:19:34.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T03:19:07', tmtdew=2.67, humidity=83.43, cloud=0.0, wind=14.95, temperature=12.55, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T03:19:07', seeing=0.85, atlas_timestamp='2026-01-01T01:18:41.328', atlas_cloud=1, atlas_rain=1, zp_data=[0.027749999999999275, 0.09025000000000105, 0.04574999999999996, 0.006000000000000227, 0.0129999999999999, 0.06875000000000142, 0.09299999999999997, 0.15625, 0.1404999999999994, 0.1479999999999997, 0.049249999999998906, 0.06849999999999845, 0.08299999999999841, 0.12124999999999986, 0.0649999999999995, 0.05299999999999905, 0.09324999999999939, 0.1844999999999999, 0.1269999999999989, 0.11824999999999974, 0.07399999999999807, 0.11474999999999902, 0.06925000000000026, 0.13974999999999937, 0.1739999999999995, 0.15949999999999953, 0.1902500000000007, 0.12650000000000006, 0.125, 0.11750000000000149, 0.17050000000000054, 0.291500000000001, 0.1557499999999994], zp_timestamp='2026-01-01T01:17:00')
2026-01-01T03:19:34.376 [DEBUG] [Thread-139645] [transport.py] [_log()] EOF in transport thread
2026-01-01T03:19:34.459 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T03:19:34.471 [DEBUG] [Thread-139648] [transport.py] [_log()] starting thread (client mode): 0xb6b2ae30
2026-01-01T03:19:34.472 [DEBUG] [Thread-139648] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T03:19:34.487 [DEBUG] [Thread-139648] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T03:19:34.487 [INFO] [Thread-139648] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T03:19:34.494 [DEBUG] [Thread-139648] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T03:19:34.495 [DEBUG] [Thread-139648] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T03:19:34.495 [DEBUG] [Thread-139648] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T03:19:34.495 [DEBUG] [Thread-139648] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:19:34.495 [DEBUG] [Thread-139648] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:19:34.495 [DEBUG] [Thread-139648] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:19:34.495 [DEBUG] [Thread-139648] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:19:34.495 [DEBUG] [Thread-139648] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T03:19:34.496 [DEBUG] [Thread-139648] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T03:19:34.496 [DEBUG] [Thread-139648] [transport.py] [_log()] client lang: <none>
2026-01-01T03:19:34.496 [DEBUG] [Thread-139648] [transport.py] [_log()] server lang: <none>
2026-01-01T03:19:34.496 [DEBUG] [Thread-139648] [transport.py] [_log()] kex follows: False
2026-01-01T03:19:34.496 [DEBUG] [Thread-139648] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T03:19:34.496 [DEBUG] [Thread-139648] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T03:19:34.496 [DEBUG] [Thread-139648] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T03:19:34.496 [DEBUG] [Thread-139648] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T03:19:34.496 [DEBUG] [Thread-139648] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T03:19:34.497 [DEBUG] [Thread-139648] [transport.py] [_log()] Compression: none
2026-01-01T03:19:34.497 [DEBUG] [Thread-139648] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T03:19:34.555 [DEBUG] [Thread-139648] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T03:19:34.555 [DEBUG] [Thread-139648] [transport.py] [_log()] Switch to new keys ...
2026-01-01T03:19:34.556 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T03:19:34.556 [DEBUG] [Thread-139648] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T03:19:34.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T03:19:34.614 [DEBUG] [Thread-139648] [transport.py] [_log()] userauth is OK
2026-01-01T03:19:34.615 [DEBUG] [Thread-139648] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T03:19:34.615 [DEBUG] [Thread-139648] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T03:19:34.615 [DEBUG] [Thread-139648] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T03:19:34.615 [DEBUG] [Thread-139648] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T03:19:34.634 [INFO] [Thread-139648] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T03:19:34.635 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T03:19:34.635 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T03:19:35.450 [DEBUG] [Thread-139648] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T03:19:35.450 [DEBUG] [Thread-139648] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T03:19:35.497 [DEBUG] [Thread-139648] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T03:19:35.497 [DEBUG] [Thread-139648] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T03:19:35.506 [DEBUG] [Thread-139648] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T03:19:35.515 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T03:19:35.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T03:19:35.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T03:19:35.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T03:19:35.536 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T03:19:35.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T03:19:35.544 [DEBUG] [Thread-139648] [transport.py] [_log()] EOF in transport thread
2026-01-01T03:19:36.320 [DEBUG] [Thread-139650 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:19:51.371 [DEBUG] [Thread-139651 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:20:05.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T03:20:05.567 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T03:20:05.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T03:20:06.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 3, 19, 39), 2.66, 83.45, 0.0, 15.02, 12.55, 0, 1, 0, 2, 0, 0),)
2026-01-01T03:20:06.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 03:19:39
2026-01-01T03:20:06.405 [DEBUG] [Thread-139652 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:20:06.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T03:20:06.553 [DEBUG] [Thread-139653] [transport.py] [_log()] starting thread (client mode): 0xb6b29660
2026-01-01T03:20:06.553 [DEBUG] [Thread-139653] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T03:20:06.574 [DEBUG] [Thread-139653] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T03:20:06.574 [INFO] [Thread-139653] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T03:20:06.576 [DEBUG] [Thread-139653] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T03:20:06.576 [DEBUG] [Thread-139653] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T03:20:06.576 [DEBUG] [Thread-139653] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T03:20:06.576 [DEBUG] [Thread-139653] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:20:06.576 [DEBUG] [Thread-139653] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:20:06.576 [DEBUG] [Thread-139653] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:20:06.576 [DEBUG] [Thread-139653] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:20:06.576 [DEBUG] [Thread-139653] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T03:20:06.576 [DEBUG] [Thread-139653] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T03:20:06.576 [DEBUG] [Thread-139653] [transport.py] [_log()] client lang: <none>
2026-01-01T03:20:06.576 [DEBUG] [Thread-139653] [transport.py] [_log()] server lang: <none>
2026-01-01T03:20:06.576 [DEBUG] [Thread-139653] [transport.py] [_log()] kex follows: False
2026-01-01T03:20:06.576 [DEBUG] [Thread-139653] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T03:20:06.576 [DEBUG] [Thread-139653] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T03:20:06.576 [DEBUG] [Thread-139653] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T03:20:06.576 [DEBUG] [Thread-139653] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T03:20:06.576 [DEBUG] [Thread-139653] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T03:20:06.576 [DEBUG] [Thread-139653] [transport.py] [_log()] Compression: none
2026-01-01T03:20:06.576 [DEBUG] [Thread-139653] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T03:20:06.589 [DEBUG] [Thread-139653] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T03:20:06.590 [DEBUG] [Thread-139653] [transport.py] [_log()] Switch to new keys ...
2026-01-01T03:20:06.590 [DEBUG] [Thread-139653] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T03:20:06.590 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T03:20:06.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T03:20:06.591 [DEBUG] [Thread-139653] [transport.py] [_log()] userauth is OK
2026-01-01T03:20:06.592 [DEBUG] [Thread-139653] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T03:20:06.592 [DEBUG] [Thread-139653] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T03:20:06.592 [DEBUG] [Thread-139653] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T03:20:06.592 [DEBUG] [Thread-139653] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T03:20:06.606 [INFO] [Thread-139653] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T03:20:06.606 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T03:20:07.961 [DEBUG] [Thread-139653] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T03:20:07.961 [DEBUG] [Thread-139653] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T03:20:07.962 [DEBUG] [Thread-139653] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T03:20:08.003 [DEBUG] [Thread-139653] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T03:20:08.003 [DEBUG] [Thread-139653] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T03:20:08.006 [DEBUG] [Thread-139653] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T03:20:08.019 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T03:20:08.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T03:20:08.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T03:20:08.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T03:20:08.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T03:20:08.031 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T03:20:08.031 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T03:20:08.031 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T03:20:08.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T03:20:08.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.055339 -999.00  +12.70   9.02     85  +10.30 1 1 1 2 1     0    0 1.53 -37.74 ZNESW 8.2 9.0 216.4 13.6 13.4 -21.1 13.3 -20.7 13.1 -19.2 13.4 -20.1
2026-01-01T03:20:08.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T03:20:08.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T03:20:08.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.055339
2026-01-01T03:20:08.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T03:20:08.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T03:20:08.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T03:20:08.033 [DEBUG] [Thread-139653] [transport.py] [_log()] EOF in transport thread
2026-01-01T03:20:08.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T03:20:08.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T03:20:08.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T03:19:39', tmtdew=2.66, humidity=83.45, cloud=0.0, wind=15.02, temperature=12.55, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T03:19:40', seeing=0.91, atlas_timestamp='2026-01-01T01:19:41.290', atlas_cloud=1, atlas_rain=1, zp_data=[0.027749999999999275, 0.09025000000000105, 0.04574999999999996, 0.006000000000000227, 0.0129999999999999, 0.06875000000000142, 0.09299999999999997, 0.15625, 0.1404999999999994, 0.1479999999999997, 0.049249999999998906, 0.06849999999999845, 0.08299999999999841, 0.12124999999999986, 0.0649999999999995, 0.05299999999999905, 0.09324999999999939, 0.1844999999999999, 0.1269999999999989, 0.11824999999999974, 0.07399999999999807, 0.11474999999999902, 0.06925000000000026, 0.13974999999999937, 0.1739999999999995, 0.15949999999999953, 0.1902500000000007, 0.12650000000000006, 0.125, 0.11750000000000149, 0.17050000000000054, 0.291500000000001, 0.1557499999999994], zp_timestamp='2026-01-01T01:17:00')
2026-01-01T03:20:08.119 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T03:20:08.130 [DEBUG] [Thread-139656] [transport.py] [_log()] starting thread (client mode): 0xb6bbeef0
2026-01-01T03:20:08.130 [DEBUG] [Thread-139656] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T03:20:08.145 [DEBUG] [Thread-139656] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T03:20:08.145 [INFO] [Thread-139656] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T03:20:08.153 [DEBUG] [Thread-139656] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T03:20:08.153 [DEBUG] [Thread-139656] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T03:20:08.153 [DEBUG] [Thread-139656] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T03:20:08.153 [DEBUG] [Thread-139656] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:20:08.153 [DEBUG] [Thread-139656] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:20:08.154 [DEBUG] [Thread-139656] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:20:08.154 [DEBUG] [Thread-139656] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:20:08.154 [DEBUG] [Thread-139656] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T03:20:08.154 [DEBUG] [Thread-139656] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T03:20:08.154 [DEBUG] [Thread-139656] [transport.py] [_log()] client lang: <none>
2026-01-01T03:20:08.154 [DEBUG] [Thread-139656] [transport.py] [_log()] server lang: <none>
2026-01-01T03:20:08.154 [DEBUG] [Thread-139656] [transport.py] [_log()] kex follows: False
2026-01-01T03:20:08.154 [DEBUG] [Thread-139656] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T03:20:08.154 [DEBUG] [Thread-139656] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T03:20:08.154 [DEBUG] [Thread-139656] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T03:20:08.155 [DEBUG] [Thread-139656] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T03:20:08.155 [DEBUG] [Thread-139656] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T03:20:08.155 [DEBUG] [Thread-139656] [transport.py] [_log()] Compression: none
2026-01-01T03:20:08.155 [DEBUG] [Thread-139656] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T03:20:08.213 [DEBUG] [Thread-139656] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T03:20:08.214 [DEBUG] [Thread-139656] [transport.py] [_log()] Switch to new keys ...
2026-01-01T03:20:08.215 [DEBUG] [Thread-139656] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T03:20:08.215 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T03:20:08.216 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T03:20:08.269 [DEBUG] [Thread-139656] [transport.py] [_log()] userauth is OK
2026-01-01T03:20:08.269 [DEBUG] [Thread-139656] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T03:20:08.269 [DEBUG] [Thread-139656] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T03:20:08.270 [DEBUG] [Thread-139656] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T03:20:08.270 [DEBUG] [Thread-139656] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T03:20:08.289 [INFO] [Thread-139656] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T03:20:08.289 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T03:20:08.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T03:20:08.515 [DEBUG] [Thread-139658 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:20:09.128 [DEBUG] [Thread-139656] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T03:20:09.128 [DEBUG] [Thread-139656] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T03:20:09.176 [DEBUG] [Thread-139656] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T03:20:09.176 [DEBUG] [Thread-139656] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T03:20:09.185 [DEBUG] [Thread-139656] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T03:20:09.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T03:20:09.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T03:20:09.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T03:20:09.211 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T03:20:09.211 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T03:20:09.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T03:20:09.219 [DEBUG] [Thread-139656] [transport.py] [_log()] EOF in transport thread
2026-01-01T03:20:13.202 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:20:13.203 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:20:21.431 [DEBUG] [Thread-139659 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:20:36.474 [DEBUG] [Thread-139660 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:20:39.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T03:20:39.242 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T03:20:39.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T03:20:39.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 3, 20, 12), 2.65, 83.5, 0.0, 15.77, 12.57, 0, 1, 0, 2, 0, 0),)
2026-01-01T03:20:39.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 03:20:12
2026-01-01T03:20:40.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T03:20:40.226 [DEBUG] [Thread-139661] [transport.py] [_log()] starting thread (client mode): 0xb6ba2fe0
2026-01-01T03:20:40.226 [DEBUG] [Thread-139661] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T03:20:40.246 [DEBUG] [Thread-139661] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T03:20:40.246 [INFO] [Thread-139661] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T03:20:40.247 [DEBUG] [Thread-139661] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T03:20:40.247 [DEBUG] [Thread-139661] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T03:20:40.247 [DEBUG] [Thread-139661] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T03:20:40.247 [DEBUG] [Thread-139661] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:20:40.247 [DEBUG] [Thread-139661] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:20:40.247 [DEBUG] [Thread-139661] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:20:40.247 [DEBUG] [Thread-139661] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:20:40.247 [DEBUG] [Thread-139661] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T03:20:40.247 [DEBUG] [Thread-139661] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T03:20:40.247 [DEBUG] [Thread-139661] [transport.py] [_log()] client lang: <none>
2026-01-01T03:20:40.247 [DEBUG] [Thread-139661] [transport.py] [_log()] server lang: <none>
2026-01-01T03:20:40.247 [DEBUG] [Thread-139661] [transport.py] [_log()] kex follows: False
2026-01-01T03:20:40.247 [DEBUG] [Thread-139661] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T03:20:40.248 [DEBUG] [Thread-139661] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T03:20:40.248 [DEBUG] [Thread-139661] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T03:20:40.248 [DEBUG] [Thread-139661] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T03:20:40.248 [DEBUG] [Thread-139661] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T03:20:40.248 [DEBUG] [Thread-139661] [transport.py] [_log()] Compression: none
2026-01-01T03:20:40.248 [DEBUG] [Thread-139661] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T03:20:40.260 [DEBUG] [Thread-139661] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T03:20:40.260 [DEBUG] [Thread-139661] [transport.py] [_log()] Switch to new keys ...
2026-01-01T03:20:40.260 [DEBUG] [Thread-139661] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T03:20:40.260 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T03:20:40.261 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T03:20:40.262 [DEBUG] [Thread-139661] [transport.py] [_log()] userauth is OK
2026-01-01T03:20:40.262 [DEBUG] [Thread-139661] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T03:20:40.262 [DEBUG] [Thread-139661] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T03:20:40.262 [DEBUG] [Thread-139661] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T03:20:40.262 [DEBUG] [Thread-139661] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T03:20:40.281 [INFO] [Thread-139661] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T03:20:40.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T03:20:41.101 [DEBUG] [Thread-139661] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T03:20:41.102 [DEBUG] [Thread-139661] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T03:20:41.102 [DEBUG] [Thread-139661] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T03:20:41.144 [DEBUG] [Thread-139661] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T03:20:41.144 [DEBUG] [Thread-139661] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T03:20:41.149 [DEBUG] [Thread-139661] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T03:20:41.160 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T03:20:41.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T03:20:41.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T03:20:41.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T03:20:41.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T03:20:41.176 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T03:20:41.176 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T03:20:41.177 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T03:20:41.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T03:20:41.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.055686 -999.00  +12.70   8.97     85  +10.30 1 1 1 2 1     0    0 1.45 -37.17 ZNESW 5.7 9.0 223.7 10.9 13.4 -21.0 13.3 -20.7 13.1 -19.0 13.4 -20.1
2026-01-01T03:20:41.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T03:20:41.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T03:20:41.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.055686
2026-01-01T03:20:41.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T03:20:41.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T03:20:41.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T03:20:41.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T03:20:41.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T03:20:41.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T03:20:12', tmtdew=2.65, humidity=83.5, cloud=0.0, wind=15.77, temperature=12.57, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T03:20:12', seeing=1.04, atlas_timestamp='2026-01-01T01:20:11.270', atlas_cloud=1, atlas_rain=1, zp_data=[0.027749999999999275, 0.09025000000000105, 0.04574999999999996, 0.006000000000000227, 0.0129999999999999, 0.06875000000000142, 0.09299999999999997, 0.15625, 0.1404999999999994, 0.1479999999999997, 0.049249999999998906, 0.06849999999999845, 0.08299999999999841, 0.12124999999999986, 0.0649999999999995, 0.05299999999999905, 0.09324999999999939, 0.1844999999999999, 0.1269999999999989, 0.11824999999999974, 0.07399999999999807, 0.11474999999999902, 0.06925000000000026, 0.13974999999999937, 0.1739999999999995, 0.15949999999999953, 0.1902500000000007, 0.12650000000000006, 0.125, 0.11750000000000149, 0.17050000000000054, 0.291500000000001, 0.1557499999999994], zp_timestamp='2026-01-01T01:17:00')
2026-01-01T03:20:41.179 [DEBUG] [Thread-139661] [transport.py] [_log()] EOF in transport thread
2026-01-01T03:20:41.263 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T03:20:41.277 [DEBUG] [Thread-139664] [transport.py] [_log()] starting thread (client mode): 0xb95b1a20
2026-01-01T03:20:41.277 [DEBUG] [Thread-139664] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T03:20:41.292 [DEBUG] [Thread-139664] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T03:20:41.292 [INFO] [Thread-139664] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T03:20:41.300 [DEBUG] [Thread-139664] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T03:20:41.300 [DEBUG] [Thread-139664] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T03:20:41.300 [DEBUG] [Thread-139664] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T03:20:41.300 [DEBUG] [Thread-139664] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:20:41.300 [DEBUG] [Thread-139664] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:20:41.300 [DEBUG] [Thread-139664] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:20:41.300 [DEBUG] [Thread-139664] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:20:41.300 [DEBUG] [Thread-139664] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T03:20:41.300 [DEBUG] [Thread-139664] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T03:20:41.300 [DEBUG] [Thread-139664] [transport.py] [_log()] client lang: <none>
2026-01-01T03:20:41.300 [DEBUG] [Thread-139664] [transport.py] [_log()] server lang: <none>
2026-01-01T03:20:41.300 [DEBUG] [Thread-139664] [transport.py] [_log()] kex follows: False
2026-01-01T03:20:41.300 [DEBUG] [Thread-139664] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T03:20:41.300 [DEBUG] [Thread-139664] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T03:20:41.300 [DEBUG] [Thread-139664] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T03:20:41.300 [DEBUG] [Thread-139664] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T03:20:41.300 [DEBUG] [Thread-139664] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T03:20:41.301 [DEBUG] [Thread-139664] [transport.py] [_log()] Compression: none
2026-01-01T03:20:41.301 [DEBUG] [Thread-139664] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T03:20:41.357 [DEBUG] [Thread-139664] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T03:20:41.357 [DEBUG] [Thread-139664] [transport.py] [_log()] Switch to new keys ...
2026-01-01T03:20:41.358 [DEBUG] [Thread-139664] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T03:20:41.358 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T03:20:41.359 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T03:20:41.413 [DEBUG] [Thread-139664] [transport.py] [_log()] userauth is OK
2026-01-01T03:20:41.413 [DEBUG] [Thread-139664] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T03:20:41.413 [DEBUG] [Thread-139664] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T03:20:41.414 [DEBUG] [Thread-139664] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T03:20:41.414 [DEBUG] [Thread-139664] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T03:20:41.439 [INFO] [Thread-139664] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T03:20:41.440 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T03:20:41.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T03:20:42.291 [DEBUG] [Thread-139664] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T03:20:42.292 [DEBUG] [Thread-139664] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T03:20:42.340 [DEBUG] [Thread-139664] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T03:20:42.340 [DEBUG] [Thread-139664] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T03:20:42.350 [DEBUG] [Thread-139664] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T03:20:42.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T03:20:42.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T03:20:42.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
2026-01-01T03:20:42.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T03:20:42.378 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T03:20:42.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T03:20:42.387 [DEBUG] [Thread-139664] [transport.py] [_log()] EOF in transport thread
2026-01-01T03:20:51.508 [DEBUG] [Thread-139666 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:21:06.564 [DEBUG] [Thread-139667 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:21:08.591 [DEBUG] [Thread-139668 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:21:12.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T03:21:12.405 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T03:21:12.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T03:21:13.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 3, 20, 44), 2.71, 83.48, 0.0, 15.65, 12.57, 0, 1, 0, 2, 0, 0),)
2026-01-01T03:21:13.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 03:20:44
2026-01-01T03:21:13.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T03:21:13.385 [DEBUG] [Thread-139669] [transport.py] [_log()] starting thread (client mode): 0xb95b3bb0
2026-01-01T03:21:13.385 [DEBUG] [Thread-139669] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T03:21:13.397 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:21:13.398 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:21:13.407 [DEBUG] [Thread-139669] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T03:21:13.407 [INFO] [Thread-139669] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T03:21:13.410 [DEBUG] [Thread-139669] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T03:21:13.410 [DEBUG] [Thread-139669] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T03:21:13.410 [DEBUG] [Thread-139669] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T03:21:13.411 [DEBUG] [Thread-139669] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:21:13.411 [DEBUG] [Thread-139669] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:21:13.411 [DEBUG] [Thread-139669] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:21:13.411 [DEBUG] [Thread-139669] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:21:13.411 [DEBUG] [Thread-139669] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T03:21:13.411 [DEBUG] [Thread-139669] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T03:21:13.411 [DEBUG] [Thread-139669] [transport.py] [_log()] client lang: <none>
2026-01-01T03:21:13.411 [DEBUG] [Thread-139669] [transport.py] [_log()] server lang: <none>
2026-01-01T03:21:13.411 [DEBUG] [Thread-139669] [transport.py] [_log()] kex follows: False
2026-01-01T03:21:13.411 [DEBUG] [Thread-139669] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T03:21:13.411 [DEBUG] [Thread-139669] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T03:21:13.411 [DEBUG] [Thread-139669] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T03:21:13.411 [DEBUG] [Thread-139669] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T03:21:13.411 [DEBUG] [Thread-139669] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T03:21:13.412 [DEBUG] [Thread-139669] [transport.py] [_log()] Compression: none
2026-01-01T03:21:13.412 [DEBUG] [Thread-139669] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T03:21:13.430 [DEBUG] [Thread-139669] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T03:21:13.431 [DEBUG] [Thread-139669] [transport.py] [_log()] Switch to new keys ...
2026-01-01T03:21:13.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T03:21:13.433 [DEBUG] [Thread-139669] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T03:21:13.433 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T03:21:13.435 [DEBUG] [Thread-139669] [transport.py] [_log()] userauth is OK
2026-01-01T03:21:13.435 [DEBUG] [Thread-139669] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T03:21:13.435 [DEBUG] [Thread-139669] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T03:21:13.435 [DEBUG] [Thread-139669] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T03:21:13.435 [DEBUG] [Thread-139669] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T03:21:13.458 [INFO] [Thread-139669] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T03:21:13.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T03:21:14.076 [DEBUG] [Thread-139669] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T03:21:14.076 [DEBUG] [Thread-139669] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T03:21:14.077 [DEBUG] [Thread-139669] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T03:21:14.117 [DEBUG] [Thread-139669] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T03:21:14.117 [DEBUG] [Thread-139669] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T03:21:14.121 [DEBUG] [Thread-139669] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T03:21:14.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T03:21:14.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T03:21:14.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T03:21:14.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T03:21:14.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T03:21:14.144 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T03:21:14.144 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T03:21:14.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T03:21:14.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T03:21:14.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.056033 -999.00  +12.70   9.92     85  +10.20 1 1 1 2 1     0    0 1.54 -38.93 ZNESW 5.6 9.9 205.8 11.8 13.4 -21.0 13.3 -20.7 13.1 -19.0 13.4 -20.2
2026-01-01T03:21:14.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T03:21:14.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T03:21:14.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.056033
2026-01-01T03:21:14.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T03:21:14.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T03:21:14.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T03:21:14.147 [DEBUG] [Thread-139669] [transport.py] [_log()] EOF in transport thread
2026-01-01T03:21:14.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T03:21:14.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T03:21:14.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T03:20:44', tmtdew=2.71, humidity=83.48, cloud=0.0, wind=15.65, temperature=12.57, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T03:20:44', seeing=1.0, atlas_timestamp='2026-01-01T01:20:41.251', atlas_cloud=1, atlas_rain=1, zp_data=[0.027749999999999275, 0.09025000000000105, 0.04574999999999996, 0.006000000000000227, 0.0129999999999999, 0.06875000000000142, 0.09299999999999997, 0.15625, 0.1404999999999994, 0.1479999999999997, 0.049249999999998906, 0.06849999999999845, 0.08299999999999841, 0.12124999999999986, 0.0649999999999995, 0.05299999999999905, 0.09324999999999939, 0.1844999999999999, 0.1269999999999989, 0.11824999999999974, 0.07399999999999807, 0.11474999999999902, 0.06925000000000026, 0.13974999999999937, 0.1739999999999995, 0.15949999999999953, 0.1902500000000007, 0.12650000000000006, 0.125, 0.11750000000000149, 0.17050000000000054, 0.291500000000001, 0.1557499999999994], zp_timestamp='2026-01-01T01:17:00')
2026-01-01T03:21:14.230 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T03:21:14.243 [DEBUG] [Thread-139672] [transport.py] [_log()] starting thread (client mode): 0xb6b160b0
2026-01-01T03:21:14.243 [DEBUG] [Thread-139672] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T03:21:14.258 [DEBUG] [Thread-139672] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T03:21:14.258 [INFO] [Thread-139672] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T03:21:14.266 [DEBUG] [Thread-139672] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T03:21:14.266 [DEBUG] [Thread-139672] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T03:21:14.266 [DEBUG] [Thread-139672] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T03:21:14.266 [DEBUG] [Thread-139672] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:21:14.266 [DEBUG] [Thread-139672] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:21:14.266 [DEBUG] [Thread-139672] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:21:14.266 [DEBUG] [Thread-139672] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:21:14.266 [DEBUG] [Thread-139672] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T03:21:14.266 [DEBUG] [Thread-139672] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T03:21:14.266 [DEBUG] [Thread-139672] [transport.py] [_log()] client lang: <none>
2026-01-01T03:21:14.266 [DEBUG] [Thread-139672] [transport.py] [_log()] server lang: <none>
2026-01-01T03:21:14.266 [DEBUG] [Thread-139672] [transport.py] [_log()] kex follows: False
2026-01-01T03:21:14.266 [DEBUG] [Thread-139672] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T03:21:14.266 [DEBUG] [Thread-139672] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T03:21:14.266 [DEBUG] [Thread-139672] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T03:21:14.266 [DEBUG] [Thread-139672] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T03:21:14.267 [DEBUG] [Thread-139672] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T03:21:14.267 [DEBUG] [Thread-139672] [transport.py] [_log()] Compression: none
2026-01-01T03:21:14.267 [DEBUG] [Thread-139672] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T03:21:14.325 [DEBUG] [Thread-139672] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T03:21:14.325 [DEBUG] [Thread-139672] [transport.py] [_log()] Switch to new keys ...
2026-01-01T03:21:14.326 [DEBUG] [Thread-139672] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T03:21:14.326 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T03:21:14.327 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T03:21:14.380 [DEBUG] [Thread-139672] [transport.py] [_log()] userauth is OK
2026-01-01T03:21:14.381 [DEBUG] [Thread-139672] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T03:21:14.381 [DEBUG] [Thread-139672] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T03:21:14.381 [DEBUG] [Thread-139672] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T03:21:14.381 [DEBUG] [Thread-139672] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T03:21:14.400 [INFO] [Thread-139672] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T03:21:14.400 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T03:21:14.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T03:21:15.249 [DEBUG] [Thread-139672] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T03:21:15.249 [DEBUG] [Thread-139672] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T03:21:15.298 [DEBUG] [Thread-139672] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T03:21:15.298 [DEBUG] [Thread-139672] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T03:21:15.307 [DEBUG] [Thread-139672] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T03:21:15.316 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T03:21:15.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T03:21:15.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T03:21:15.334 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T03:21:15.335 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T03:21:15.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T03:21:15.343 [DEBUG] [Thread-139672] [transport.py] [_log()] EOF in transport thread
2026-01-01T03:21:21.599 [DEBUG] [Thread-139674 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:21:36.653 [DEBUG] [Thread-139675 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:21:45.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T03:21:45.337 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T03:21:45.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T03:21:46.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 3, 21, 16), 2.71, 83.46, 0.0, 16.02, 12.57, 0, 1, 0, 2, 0, 0),)
2026-01-01T03:21:46.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 03:21:16
2026-01-01T03:21:46.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T03:21:46.330 [DEBUG] [Thread-139676] [transport.py] [_log()] starting thread (client mode): 0xb95b2fb0
2026-01-01T03:21:46.330 [DEBUG] [Thread-139676] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T03:21:46.350 [DEBUG] [Thread-139676] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T03:21:46.350 [INFO] [Thread-139676] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T03:21:46.353 [DEBUG] [Thread-139676] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T03:21:46.353 [DEBUG] [Thread-139676] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T03:21:46.353 [DEBUG] [Thread-139676] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T03:21:46.353 [DEBUG] [Thread-139676] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:21:46.353 [DEBUG] [Thread-139676] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:21:46.354 [DEBUG] [Thread-139676] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:21:46.354 [DEBUG] [Thread-139676] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:21:46.354 [DEBUG] [Thread-139676] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T03:21:46.354 [DEBUG] [Thread-139676] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T03:21:46.354 [DEBUG] [Thread-139676] [transport.py] [_log()] client lang: <none>
2026-01-01T03:21:46.354 [DEBUG] [Thread-139676] [transport.py] [_log()] server lang: <none>
2026-01-01T03:21:46.354 [DEBUG] [Thread-139676] [transport.py] [_log()] kex follows: False
2026-01-01T03:21:46.354 [DEBUG] [Thread-139676] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T03:21:46.354 [DEBUG] [Thread-139676] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T03:21:46.354 [DEBUG] [Thread-139676] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T03:21:46.354 [DEBUG] [Thread-139676] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T03:21:46.354 [DEBUG] [Thread-139676] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T03:21:46.354 [DEBUG] [Thread-139676] [transport.py] [_log()] Compression: none
2026-01-01T03:21:46.354 [DEBUG] [Thread-139676] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T03:21:46.369 [DEBUG] [Thread-139676] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T03:21:46.370 [DEBUG] [Thread-139676] [transport.py] [_log()] Switch to new keys ...
2026-01-01T03:21:46.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T03:21:46.371 [DEBUG] [Thread-139676] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T03:21:46.372 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T03:21:46.373 [DEBUG] [Thread-139676] [transport.py] [_log()] userauth is OK
2026-01-01T03:21:46.373 [DEBUG] [Thread-139676] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T03:21:46.373 [DEBUG] [Thread-139676] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T03:21:46.373 [DEBUG] [Thread-139676] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T03:21:46.374 [DEBUG] [Thread-139676] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T03:21:46.397 [INFO] [Thread-139676] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T03:21:46.398 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T03:21:47.020 [DEBUG] [Thread-139676] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T03:21:47.020 [DEBUG] [Thread-139676] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T03:21:47.021 [DEBUG] [Thread-139676] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T03:21:47.061 [DEBUG] [Thread-139676] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T03:21:47.062 [DEBUG] [Thread-139676] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T03:21:47.065 [DEBUG] [Thread-139676] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T03:21:47.078 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T03:21:47.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T03:21:47.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T03:21:47.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T03:21:47.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T03:21:47.092 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T03:21:47.092 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T03:21:47.092 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T03:21:47.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T03:21:47.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.056380 -999.00  +12.70   4.46     85  +10.20 1 1 1 2 1     0    0 1.50 -34.91 ZNESW 5.5 4.5 202.2 9.6 13.4 -21.0 13.3 -20.7 13.1 -19.1 13.4 -20.2
2026-01-01T03:21:47.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T03:21:47.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T03:21:47.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.056380
2026-01-01T03:21:47.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T03:21:47.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T03:21:47.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T03:21:47.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T03:21:47.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T03:21:47.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T03:21:16', tmtdew=2.71, humidity=83.46, cloud=0.0, wind=16.02, temperature=12.57, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T03:21:16', seeing=1.0, atlas_timestamp='2026-01-01T01:21:11.232', atlas_cloud=1, atlas_rain=1, zp_data=[0.027749999999999275, 0.09025000000000105, 0.04574999999999996, 0.006000000000000227, 0.0129999999999999, 0.06875000000000142, 0.09299999999999997, 0.15625, 0.1404999999999994, 0.1479999999999997, 0.049249999999998906, 0.06849999999999845, 0.08299999999999841, 0.12124999999999986, 0.0649999999999995, 0.05299999999999905, 0.09324999999999939, 0.1844999999999999, 0.1269999999999989, 0.11824999999999974, 0.07399999999999807, 0.11474999999999902, 0.06925000000000026, 0.13974999999999937, 0.1739999999999995, 0.15949999999999953, 0.1902500000000007, 0.12650000000000006, 0.125, 0.11750000000000149, 0.17050000000000054, 0.291500000000001, 0.1557499999999994], zp_timestamp='2026-01-01T01:17:00')
2026-01-01T03:21:47.095 [DEBUG] [Thread-139676] [transport.py] [_log()] EOF in transport thread
2026-01-01T03:21:47.182 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T03:21:47.192 [DEBUG] [Thread-139679] [transport.py] [_log()] starting thread (client mode): 0xb6b2b940
2026-01-01T03:21:47.192 [DEBUG] [Thread-139679] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T03:21:47.207 [DEBUG] [Thread-139679] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T03:21:47.207 [INFO] [Thread-139679] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T03:21:47.215 [DEBUG] [Thread-139679] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T03:21:47.215 [DEBUG] [Thread-139679] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T03:21:47.215 [DEBUG] [Thread-139679] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T03:21:47.215 [DEBUG] [Thread-139679] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:21:47.215 [DEBUG] [Thread-139679] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:21:47.215 [DEBUG] [Thread-139679] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:21:47.215 [DEBUG] [Thread-139679] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:21:47.215 [DEBUG] [Thread-139679] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T03:21:47.215 [DEBUG] [Thread-139679] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T03:21:47.215 [DEBUG] [Thread-139679] [transport.py] [_log()] client lang: <none>
2026-01-01T03:21:47.215 [DEBUG] [Thread-139679] [transport.py] [_log()] server lang: <none>
2026-01-01T03:21:47.215 [DEBUG] [Thread-139679] [transport.py] [_log()] kex follows: False
2026-01-01T03:21:47.215 [DEBUG] [Thread-139679] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T03:21:47.216 [DEBUG] [Thread-139679] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T03:21:47.216 [DEBUG] [Thread-139679] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T03:21:47.216 [DEBUG] [Thread-139679] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T03:21:47.216 [DEBUG] [Thread-139679] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T03:21:47.216 [DEBUG] [Thread-139679] [transport.py] [_log()] Compression: none
2026-01-01T03:21:47.216 [DEBUG] [Thread-139679] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T03:21:47.272 [DEBUG] [Thread-139679] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T03:21:47.272 [DEBUG] [Thread-139679] [transport.py] [_log()] Switch to new keys ...
2026-01-01T03:21:47.273 [DEBUG] [Thread-139679] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T03:21:47.273 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T03:21:47.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T03:21:47.328 [DEBUG] [Thread-139679] [transport.py] [_log()] userauth is OK
2026-01-01T03:21:47.328 [DEBUG] [Thread-139679] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T03:21:47.329 [DEBUG] [Thread-139679] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T03:21:47.329 [DEBUG] [Thread-139679] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T03:21:47.329 [DEBUG] [Thread-139679] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T03:21:47.347 [INFO] [Thread-139679] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T03:21:47.348 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T03:21:47.350 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T03:21:48.195 [DEBUG] [Thread-139679] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T03:21:48.196 [DEBUG] [Thread-139679] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T03:21:48.244 [DEBUG] [Thread-139679] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T03:21:48.244 [DEBUG] [Thread-139679] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T03:21:48.253 [DEBUG] [Thread-139679] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T03:21:48.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T03:21:48.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T03:21:48.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T03:21:48.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T03:21:48.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T03:21:48.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T03:21:48.290 [DEBUG] [Thread-139679] [transport.py] [_log()] EOF in transport thread
2026-01-01T03:21:51.683 [DEBUG] [Thread-139681 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:22:06.735 [DEBUG] [Thread-139682 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:22:08.660 [DEBUG] [Thread-139683 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:22:13.595 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:22:13.596 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:22:18.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T03:22:18.312 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T03:22:18.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T03:22:19.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 3, 21, 48), 2.74, 83.3, 0.0, 13.27, 12.55, 0, 1, 0, 2, 0, 0),)
2026-01-01T03:22:19.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 03:21:48
2026-01-01T03:22:19.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T03:22:19.353 [DEBUG] [Thread-139684] [transport.py] [_log()] starting thread (client mode): 0xb1796440
2026-01-01T03:22:19.353 [DEBUG] [Thread-139684] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T03:22:19.373 [DEBUG] [Thread-139684] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T03:22:19.373 [INFO] [Thread-139684] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T03:22:19.377 [DEBUG] [Thread-139684] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T03:22:19.377 [DEBUG] [Thread-139684] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T03:22:19.377 [DEBUG] [Thread-139684] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T03:22:19.377 [DEBUG] [Thread-139684] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:22:19.377 [DEBUG] [Thread-139684] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:22:19.377 [DEBUG] [Thread-139684] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:22:19.377 [DEBUG] [Thread-139684] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:22:19.377 [DEBUG] [Thread-139684] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T03:22:19.377 [DEBUG] [Thread-139684] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T03:22:19.377 [DEBUG] [Thread-139684] [transport.py] [_log()] client lang: <none>
2026-01-01T03:22:19.377 [DEBUG] [Thread-139684] [transport.py] [_log()] server lang: <none>
2026-01-01T03:22:19.377 [DEBUG] [Thread-139684] [transport.py] [_log()] kex follows: False
2026-01-01T03:22:19.377 [DEBUG] [Thread-139684] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T03:22:19.377 [DEBUG] [Thread-139684] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T03:22:19.377 [DEBUG] [Thread-139684] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T03:22:19.378 [DEBUG] [Thread-139684] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T03:22:19.378 [DEBUG] [Thread-139684] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T03:22:19.378 [DEBUG] [Thread-139684] [transport.py] [_log()] Compression: none
2026-01-01T03:22:19.378 [DEBUG] [Thread-139684] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T03:22:19.392 [DEBUG] [Thread-139684] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T03:22:19.392 [DEBUG] [Thread-139684] [transport.py] [_log()] Switch to new keys ...
2026-01-01T03:22:19.392 [DEBUG] [Thread-139684] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T03:22:19.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T03:22:19.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T03:22:19.393 [DEBUG] [Thread-139684] [transport.py] [_log()] userauth is OK
2026-01-01T03:22:19.393 [DEBUG] [Thread-139684] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T03:22:19.393 [DEBUG] [Thread-139684] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T03:22:19.393 [DEBUG] [Thread-139684] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T03:22:19.393 [DEBUG] [Thread-139684] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T03:22:19.403 [INFO] [Thread-139684] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T03:22:19.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T03:22:20.032 [DEBUG] [Thread-139684] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T03:22:20.032 [DEBUG] [Thread-139684] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T03:22:20.032 [DEBUG] [Thread-139684] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T03:22:20.072 [DEBUG] [Thread-139684] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T03:22:20.073 [DEBUG] [Thread-139684] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T03:22:20.075 [DEBUG] [Thread-139684] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T03:22:20.088 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T03:22:20.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T03:22:20.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T03:22:20.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T03:22:20.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T03:22:20.094 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T03:22:20.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T03:22:20.094 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T03:22:20.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T03:22:20.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.056727 -999.00  +12.70   8.37     85  +10.30 1 1 1 2 1     0    0 1.46 -37.65 ZNESW 5.8 8.4 225.4 11.2 13.4 -21.0 13.3 -20.8 13.0 -18.9 13.3 -20.2
2026-01-01T03:22:20.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T03:22:20.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T03:22:20.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.056727
2026-01-01T03:22:20.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T03:22:20.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T03:22:20.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T03:22:20.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T03:22:20.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T03:22:20.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T03:21:48', tmtdew=2.74, humidity=83.3, cloud=0.0, wind=13.27, temperature=12.55, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T03:21:48', seeing=1.05, atlas_timestamp='2026-01-01T01:21:41.213', atlas_cloud=1, atlas_rain=1, zp_data=[0.036749999999999616, 0.14425000000000132, 0.0652500000000007, 0.05549999999999855, 0.08050000000000068, 0.13425000000000153, 0.13399999999999856, 0.21225000000000094, 0.2184999999999988, 0.19599999999999973, 0.06074999999999875, 0.10249999999999915, 0.12399999999999878, 0.16324999999999967, 0.10249999999999915, 0.11849999999999916, 0.15674999999999883, 0.22449999999999903, 0.15399999999999991, 0.1662499999999998, 0.11199999999999832, 0.14474999999999838, 0.12625000000000064, 0.19725000000000037, 0.21099999999999852, 0.17549999999999955, 0.1977499999999992, 0.15499999999999936, 0.18599999999999994, 0.12349999999999994, 0.22600000000000087, 0.34850000000000136, 0.1897499999999983], zp_timestamp='2026-01-01T01:20:00')
2026-01-01T03:22:20.095 [DEBUG] [Thread-139684] [transport.py] [_log()] EOF in transport thread
2026-01-01T03:22:20.170 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T03:22:20.181 [DEBUG] [Thread-139687] [transport.py] [_log()] starting thread (client mode): 0xb1794310
2026-01-01T03:22:20.181 [DEBUG] [Thread-139687] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T03:22:20.196 [DEBUG] [Thread-139687] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T03:22:20.196 [INFO] [Thread-139687] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T03:22:20.204 [DEBUG] [Thread-139687] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T03:22:20.204 [DEBUG] [Thread-139687] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T03:22:20.204 [DEBUG] [Thread-139687] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T03:22:20.204 [DEBUG] [Thread-139687] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:22:20.204 [DEBUG] [Thread-139687] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:22:20.204 [DEBUG] [Thread-139687] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:22:20.204 [DEBUG] [Thread-139687] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:22:20.204 [DEBUG] [Thread-139687] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T03:22:20.204 [DEBUG] [Thread-139687] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T03:22:20.204 [DEBUG] [Thread-139687] [transport.py] [_log()] client lang: <none>
2026-01-01T03:22:20.204 [DEBUG] [Thread-139687] [transport.py] [_log()] server lang: <none>
2026-01-01T03:22:20.204 [DEBUG] [Thread-139687] [transport.py] [_log()] kex follows: False
2026-01-01T03:22:20.204 [DEBUG] [Thread-139687] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T03:22:20.204 [DEBUG] [Thread-139687] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T03:22:20.204 [DEBUG] [Thread-139687] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T03:22:20.204 [DEBUG] [Thread-139687] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T03:22:20.204 [DEBUG] [Thread-139687] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T03:22:20.204 [DEBUG] [Thread-139687] [transport.py] [_log()] Compression: none
2026-01-01T03:22:20.204 [DEBUG] [Thread-139687] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T03:22:20.265 [DEBUG] [Thread-139687] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T03:22:20.265 [DEBUG] [Thread-139687] [transport.py] [_log()] Switch to new keys ...
2026-01-01T03:22:20.265 [DEBUG] [Thread-139687] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T03:22:20.265 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T03:22:20.265 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T03:22:20.326 [DEBUG] [Thread-139687] [transport.py] [_log()] userauth is OK
2026-01-01T03:22:20.326 [DEBUG] [Thread-139687] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T03:22:20.326 [DEBUG] [Thread-139687] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T03:22:20.326 [DEBUG] [Thread-139687] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T03:22:20.326 [DEBUG] [Thread-139687] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T03:22:20.343 [INFO] [Thread-139687] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T03:22:20.343 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T03:22:20.344 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T03:22:21.167 [DEBUG] [Thread-139687] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T03:22:21.167 [DEBUG] [Thread-139687] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T03:22:21.215 [DEBUG] [Thread-139687] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T03:22:21.215 [DEBUG] [Thread-139687] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T03:22:21.224 [DEBUG] [Thread-139687] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T03:22:21.232 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T03:22:21.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T03:22:21.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-01-01T03:22:21.248 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T03:22:21.248 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T03:22:21.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T03:22:21.255 [DEBUG] [Thread-139687] [transport.py] [_log()] EOF in transport thread
2026-01-01T03:22:21.765 [DEBUG] [Thread-139689 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:22:36.808 [DEBUG] [Thread-139690 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:22:51.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T03:22:51.278 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T03:22:51.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T03:22:51.844 [DEBUG] [Thread-139691 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:22:52.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 3, 22, 20), 2.76, 83.2, 0.0, 13.82, 12.6, 0, 1, 0, 2, 0, 0),)
2026-01-01T03:22:52.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 03:22:20
2026-01-01T03:22:52.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T03:22:52.290 [DEBUG] [Thread-139692] [transport.py] [_log()] starting thread (client mode): 0xb1795480
2026-01-01T03:22:52.290 [DEBUG] [Thread-139692] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T03:22:52.305 [DEBUG] [Thread-139692] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T03:22:52.305 [INFO] [Thread-139692] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T03:22:52.308 [DEBUG] [Thread-139692] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T03:22:52.308 [DEBUG] [Thread-139692] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T03:22:52.308 [DEBUG] [Thread-139692] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T03:22:52.308 [DEBUG] [Thread-139692] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:22:52.308 [DEBUG] [Thread-139692] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:22:52.308 [DEBUG] [Thread-139692] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:22:52.308 [DEBUG] [Thread-139692] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:22:52.308 [DEBUG] [Thread-139692] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T03:22:52.309 [DEBUG] [Thread-139692] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T03:22:52.309 [DEBUG] [Thread-139692] [transport.py] [_log()] client lang: <none>
2026-01-01T03:22:52.309 [DEBUG] [Thread-139692] [transport.py] [_log()] server lang: <none>
2026-01-01T03:22:52.309 [DEBUG] [Thread-139692] [transport.py] [_log()] kex follows: False
2026-01-01T03:22:52.309 [DEBUG] [Thread-139692] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T03:22:52.309 [DEBUG] [Thread-139692] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T03:22:52.309 [DEBUG] [Thread-139692] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T03:22:52.309 [DEBUG] [Thread-139692] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T03:22:52.309 [DEBUG] [Thread-139692] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T03:22:52.309 [DEBUG] [Thread-139692] [transport.py] [_log()] Compression: none
2026-01-01T03:22:52.309 [DEBUG] [Thread-139692] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T03:22:52.324 [DEBUG] [Thread-139692] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T03:22:52.325 [DEBUG] [Thread-139692] [transport.py] [_log()] Switch to new keys ...
2026-01-01T03:22:52.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T03:22:52.326 [DEBUG] [Thread-139692] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T03:22:52.327 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T03:22:52.328 [DEBUG] [Thread-139692] [transport.py] [_log()] userauth is OK
2026-01-01T03:22:52.328 [DEBUG] [Thread-139692] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T03:22:52.328 [DEBUG] [Thread-139692] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T03:22:52.328 [DEBUG] [Thread-139692] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T03:22:52.328 [DEBUG] [Thread-139692] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T03:22:52.346 [INFO] [Thread-139692] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T03:22:52.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T03:22:52.987 [DEBUG] [Thread-139692] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T03:22:52.987 [DEBUG] [Thread-139692] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T03:22:52.987 [DEBUG] [Thread-139692] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T03:22:53.028 [DEBUG] [Thread-139692] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T03:22:53.028 [DEBUG] [Thread-139692] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T03:22:53.030 [DEBUG] [Thread-139692] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T03:22:53.042 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T03:22:53.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T03:22:53.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T03:22:53.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T03:22:53.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T03:22:53.045 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T03:22:53.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T03:22:53.045 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T03:22:53.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T03:22:53.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.057422 -999.00  +12.70   5.17     85  +10.20 1 1 1 2 1     0    0 1.56 -35.50 ZNESW 3.3 5.2 222.2 10.8 13.4 -20.9 13.2 -20.6 13.1 -19.0 13.3 -20.0
2026-01-01T03:22:53.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T03:22:53.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T03:22:53.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.057422
2026-01-01T03:22:53.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T03:22:53.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T03:22:53.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T03:22:53.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T03:22:53.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T03:22:53.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T03:22:20', tmtdew=2.76, humidity=83.2, cloud=0.0, wind=13.82, temperature=12.6, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T03:22:20', seeing=1.35, atlas_timestamp='2026-01-01T01:22:41.261', atlas_cloud=1, atlas_rain=1, zp_data=[0.036749999999999616, 0.14425000000000132, 0.0652500000000007, 0.05549999999999855, 0.08050000000000068, 0.13425000000000153, 0.13399999999999856, 0.21225000000000094, 0.2184999999999988, 0.19599999999999973, 0.06074999999999875, 0.10249999999999915, 0.12399999999999878, 0.16324999999999967, 0.10249999999999915, 0.11849999999999916, 0.15674999999999883, 0.22449999999999903, 0.15399999999999991, 0.1662499999999998, 0.11199999999999832, 0.14474999999999838, 0.12625000000000064, 0.19725000000000037, 0.21099999999999852, 0.17549999999999955, 0.1977499999999992, 0.15499999999999936, 0.18599999999999994, 0.12349999999999994, 0.22600000000000087, 0.34850000000000136, 0.1897499999999983], zp_timestamp='2026-01-01T01:20:00')
2026-01-01T03:22:53.046 [DEBUG] [Thread-139692] [transport.py] [_log()] EOF in transport thread
2026-01-01T03:22:53.121 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T03:22:53.133 [DEBUG] [Thread-139695] [transport.py] [_log()] starting thread (client mode): 0xb9579300
2026-01-01T03:22:53.133 [DEBUG] [Thread-139695] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T03:22:53.148 [DEBUG] [Thread-139695] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T03:22:53.148 [INFO] [Thread-139695] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T03:22:53.155 [DEBUG] [Thread-139695] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T03:22:53.155 [DEBUG] [Thread-139695] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T03:22:53.155 [DEBUG] [Thread-139695] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T03:22:53.155 [DEBUG] [Thread-139695] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:22:53.155 [DEBUG] [Thread-139695] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:22:53.155 [DEBUG] [Thread-139695] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:22:53.155 [DEBUG] [Thread-139695] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:22:53.155 [DEBUG] [Thread-139695] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T03:22:53.155 [DEBUG] [Thread-139695] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T03:22:53.155 [DEBUG] [Thread-139695] [transport.py] [_log()] client lang: <none>
2026-01-01T03:22:53.155 [DEBUG] [Thread-139695] [transport.py] [_log()] server lang: <none>
2026-01-01T03:22:53.155 [DEBUG] [Thread-139695] [transport.py] [_log()] kex follows: False
2026-01-01T03:22:53.155 [DEBUG] [Thread-139695] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T03:22:53.155 [DEBUG] [Thread-139695] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T03:22:53.155 [DEBUG] [Thread-139695] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T03:22:53.155 [DEBUG] [Thread-139695] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T03:22:53.155 [DEBUG] [Thread-139695] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T03:22:53.155 [DEBUG] [Thread-139695] [transport.py] [_log()] Compression: none
2026-01-01T03:22:53.155 [DEBUG] [Thread-139695] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T03:22:53.213 [DEBUG] [Thread-139695] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T03:22:53.213 [DEBUG] [Thread-139695] [transport.py] [_log()] Switch to new keys ...
2026-01-01T03:22:53.213 [DEBUG] [Thread-139695] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T03:22:53.213 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T03:22:53.213 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T03:22:53.275 [DEBUG] [Thread-139695] [transport.py] [_log()] userauth is OK
2026-01-01T03:22:53.275 [DEBUG] [Thread-139695] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T03:22:53.275 [DEBUG] [Thread-139695] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T03:22:53.275 [DEBUG] [Thread-139695] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T03:22:53.275 [DEBUG] [Thread-139695] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T03:22:53.289 [INFO] [Thread-139695] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T03:22:53.289 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T03:22:53.289 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T03:22:54.132 [DEBUG] [Thread-139695] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T03:22:54.132 [DEBUG] [Thread-139695] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T03:22:54.179 [DEBUG] [Thread-139695] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T03:22:54.179 [DEBUG] [Thread-139695] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T03:22:54.187 [DEBUG] [Thread-139695] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T03:22:54.195 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T03:22:54.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-01-01T03:22: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') -> 00000000
2026-01-01T03:22:54.211 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T03:22:54.211 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T03:22:54.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T03:22:54.219 [DEBUG] [Thread-139695] [transport.py] [_log()] EOF in transport thread
2026-01-01T03:23:06.873 [DEBUG] [Thread-139697 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:23:08.717 [DEBUG] [Thread-139698 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:23:13.805 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:23:13.807 [DEBUG] [Thread-92006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:23:21.935 [DEBUG] [Thread-139699 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:23:24.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T03:23:24.242 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T03:23: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
2026-01-01T03:23:24.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 3, 22, 52), 2.77, 83.11, 0.0, 15.85, 12.6, 0, 1, 0, 2, 0, 0),)
2026-01-01T03:23:24.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 03:22:52
2026-01-01T03:23:25.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T03:23:25.262 [DEBUG] [Thread-139700] [transport.py] [_log()] starting thread (client mode): 0xb6b14e20
2026-01-01T03:23:25.262 [DEBUG] [Thread-139700] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T03:23:25.282 [DEBUG] [Thread-139700] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T03:23:25.282 [INFO] [Thread-139700] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T03:23:25.285 [DEBUG] [Thread-139700] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T03:23:25.285 [DEBUG] [Thread-139700] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T03:23:25.285 [DEBUG] [Thread-139700] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T03:23:25.285 [DEBUG] [Thread-139700] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:23:25.285 [DEBUG] [Thread-139700] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:23:25.285 [DEBUG] [Thread-139700] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:23:25.285 [DEBUG] [Thread-139700] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:23:25.285 [DEBUG] [Thread-139700] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T03:23:25.285 [DEBUG] [Thread-139700] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T03:23:25.286 [DEBUG] [Thread-139700] [transport.py] [_log()] client lang: <none>
2026-01-01T03:23:25.286 [DEBUG] [Thread-139700] [transport.py] [_log()] server lang: <none>
2026-01-01T03:23:25.286 [DEBUG] [Thread-139700] [transport.py] [_log()] kex follows: False
2026-01-01T03:23:25.286 [DEBUG] [Thread-139700] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T03:23:25.286 [DEBUG] [Thread-139700] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T03:23:25.286 [DEBUG] [Thread-139700] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T03:23:25.286 [DEBUG] [Thread-139700] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T03:23:25.286 [DEBUG] [Thread-139700] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T03:23:25.286 [DEBUG] [Thread-139700] [transport.py] [_log()] Compression: none
2026-01-01T03:23:25.286 [DEBUG] [Thread-139700] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T03:23:25.302 [DEBUG] [Thread-139700] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T03:23:25.303 [DEBUG] [Thread-139700] [transport.py] [_log()] Switch to new keys ...
2026-01-01T03:23:25.303 [DEBUG] [Thread-139700] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T03:23:25.303 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T03:23:25.303 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T03:23:25.304 [DEBUG] [Thread-139700] [transport.py] [_log()] userauth is OK
2026-01-01T03:23:25.304 [DEBUG] [Thread-139700] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T03:23:25.304 [DEBUG] [Thread-139700] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T03:23:25.304 [DEBUG] [Thread-139700] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-01-01T03:23:25.304 [DEBUG] [Thread-139700] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T03:23:25.313 [INFO] [Thread-139700] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T03:23:25.313 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T03:23:25.972 [DEBUG] [Thread-139700] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T03:23:25.972 [DEBUG] [Thread-139700] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T03:23:25.972 [DEBUG] [Thread-139700] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-01-01T03:23:26.014 [DEBUG] [Thread-139700] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T03:23:26.014 [DEBUG] [Thread-139700] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T03:23:26.016 [DEBUG] [Thread-139700] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T03:23:26.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T03:23:26.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-01-01T03:23:26.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-01-01T03:23:26.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-01-01T03:23:26.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T03:23:26.033 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-01-01T03:23:26.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T03:23:26.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T03:23:26.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-01-01T03:23:26.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61041.057769 -999.00  +12.70   7.91     85  +10.20 1 1 1 2 1     0    0 1.47 -36.13 ZNESW 8.1 7.9 204.1 11.2 13.4 -21.0 13.3 -20.7 13.0 -19.1 13.4 -20.1
2026-01-01T03:23:26.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-01-01T03:23:26.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-01-01T03:23:26.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61041.057769
2026-01-01T03:23:26.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-01-01T03:23:26.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-01-01T03:23:26.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-01-01T03:23:26.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-01-01T03:23:26.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-01-01T03:23:26.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-01-01T03:22:52', tmtdew=2.77, humidity=83.11, cloud=0.0, wind=15.85, temperature=12.6, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-01-01T03:22:52', seeing=0.88, atlas_timestamp='2026-01-01T01:23:11.242', atlas_cloud=1, atlas_rain=1, zp_data=[0.036749999999999616, 0.14425000000000132, 0.0652500000000007, 0.05549999999999855, 0.08050000000000068, 0.13425000000000153, 0.13399999999999856, 0.21225000000000094, 0.2184999999999988, 0.19599999999999973, 0.06074999999999875, 0.10249999999999915, 0.12399999999999878, 0.16324999999999967, 0.10249999999999915, 0.11849999999999916, 0.15674999999999883, 0.22449999999999903, 0.15399999999999991, 0.1662499999999998, 0.11199999999999832, 0.14474999999999838, 0.12625000000000064, 0.19725000000000037, 0.21099999999999852, 0.17549999999999955, 0.1977499999999992, 0.15499999999999936, 0.18599999999999994, 0.12349999999999994, 0.22600000000000087, 0.34850000000000136, 0.1897499999999983], zp_timestamp='2026-01-01T01:20:00')
2026-01-01T03:23:26.034 [DEBUG] [Thread-139700] [transport.py] [_log()] EOF in transport thread
2026-01-01T03:23:26.108 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-01-01T03:23:26.119 [DEBUG] [Thread-139703] [transport.py] [_log()] starting thread (client mode): 0xb6b14700
2026-01-01T03:23:26.119 [DEBUG] [Thread-139703] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T03:23:26.134 [DEBUG] [Thread-139703] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-01-01T03:23:26.134 [INFO] [Thread-139703] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-01-01T03:23:26.142 [DEBUG] [Thread-139703] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T03:23:26.142 [DEBUG] [Thread-139703] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-01-01T03:23:26.142 [DEBUG] [Thread-139703] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T03:23:26.142 [DEBUG] [Thread-139703] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:23:26.142 [DEBUG] [Thread-139703] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:23:26.142 [DEBUG] [Thread-139703] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:23:26.142 [DEBUG] [Thread-139703] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:23:26.142 [DEBUG] [Thread-139703] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T03:23:26.142 [DEBUG] [Thread-139703] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T03:23:26.142 [DEBUG] [Thread-139703] [transport.py] [_log()] client lang: <none>
2026-01-01T03:23:26.142 [DEBUG] [Thread-139703] [transport.py] [_log()] server lang: <none>
2026-01-01T03:23:26.142 [DEBUG] [Thread-139703] [transport.py] [_log()] kex follows: False
2026-01-01T03:23:26.142 [DEBUG] [Thread-139703] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T03:23:26.142 [DEBUG] [Thread-139703] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T03:23:26.142 [DEBUG] [Thread-139703] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T03:23:26.142 [DEBUG] [Thread-139703] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T03:23:26.142 [DEBUG] [Thread-139703] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T03:23:26.142 [DEBUG] [Thread-139703] [transport.py] [_log()] Compression: none
2026-01-01T03:23:26.142 [DEBUG] [Thread-139703] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T03:23:26.197 [DEBUG] [Thread-139703] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T03:23:26.197 [DEBUG] [Thread-139703] [transport.py] [_log()] Switch to new keys ...
2026-01-01T03:23:26.197 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-01-01T03:23:26.197 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T03:23:26.197 [DEBUG] [Thread-139703] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-01-01T03:23:26.254 [DEBUG] [Thread-139703] [transport.py] [_log()] userauth is OK
2026-01-01T03:23:26.254 [DEBUG] [Thread-139703] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T03:23:26.254 [DEBUG] [Thread-139703] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T03:23:26.254 [DEBUG] [Thread-139703] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-01-01T03:23:26.254 [DEBUG] [Thread-139703] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-01-01T03:23:26.268 [INFO] [Thread-139703] [transport.py] [_log()] Authentication (publickey) successful!
2026-01-01T03:23:26.268 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-01-01T03:23:26.268 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-01-01T03:23:27.116 [DEBUG] [Thread-139703] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-01-01T03:23:27.116 [DEBUG] [Thread-139703] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-01-01T03:23:27.164 [DEBUG] [Thread-139703] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-01-01T03:23:27.165 [DEBUG] [Thread-139703] [transport.py] [_log()] Secsh channel 0 opened.
2026-01-01T03:23:27.174 [DEBUG] [Thread-139703] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-01-01T03:23:27.183 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-01-01T03:23: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')
2026-01-01T03:23: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
2026-01-01T03:23:27.202 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-01-01T03:23:27.202 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-01-01T03:23:27.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-01-01T03:23:27.211 [DEBUG] [Thread-139703] [transport.py] [_log()] EOF in transport thread
2026-01-01T03:23:36.969 [DEBUG] [Thread-139705 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:23:52.008 [DEBUG] [Thread-139706 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-01-01T03:23:57.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-01-01T03:23:57.233 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2026-01-01T03:23:57.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-01-01T03:23:58.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 1, 1, 3, 23, 24), 2.78, 83.05, 0.0, 15.03, 12.6, 0, 1, 0, 2, 0, 0),)
2026-01-01T03:23:58.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-01-01 03:23:24
2026-01-01T03:23:58.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-01-01T03:23:58.303 [DEBUG] [Thread-139707] [transport.py] [_log()] starting thread (client mode): 0xb95b3940
2026-01-01T03:23:58.303 [DEBUG] [Thread-139707] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-01-01T03:23:58.324 [DEBUG] [Thread-139707] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-01-01T03:23:58.324 [INFO] [Thread-139707] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-01-01T03:23:58.327 [DEBUG] [Thread-139707] [transport.py] [_log()] === Key exchange possibilities ===
2026-01-01T03:23:58.327 [DEBUG] [Thread-139707] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-01-01T03:23:58.327 [DEBUG] [Thread-139707] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-01-01T03:23:58.327 [DEBUG] [Thread-139707] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:23:58.327 [DEBUG] [Thread-139707] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-01-01T03:23:58.327 [DEBUG] [Thread-139707] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:23:58.327 [DEBUG] [Thread-139707] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-01-01T03:23:58.327 [DEBUG] [Thread-139707] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-01-01T03:23:58.327 [DEBUG] [Thread-139707] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-01-01T03:23:58.327 [DEBUG] [Thread-139707] [transport.py] [_log()] client lang: <none>
2026-01-01T03:23:58.327 [DEBUG] [Thread-139707] [transport.py] [_log()] server lang: <none>
2026-01-01T03:23:58.327 [DEBUG] [Thread-139707] [transport.py] [_log()] kex follows: False
2026-01-01T03:23:58.327 [DEBUG] [Thread-139707] [transport.py] [_log()] === Key exchange agreements ===
2026-01-01T03:23:58.327 [DEBUG] [Thread-139707] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-01-01T03:23:58.327 [DEBUG] [Thread-139707] [transport.py] [_log()] HostKey: ssh-ed25519
2026-01-01T03:23:58.327 [DEBUG] [Thread-139707] [transport.py] [_log()] Cipher: aes128-ctr
2026-01-01T03:23:58.327 [DEBUG] [Thread-139707] [transport.py] [_log()] MAC: hmac-sha2-256
2026-01-01T03:23:58.327 [DEBUG] [Thread-139707] [transport.py] [_log()] Compression: none
2026-01-01T03:23:58.327 [DEBUG] [Thread-139707] [transport.py] [_log()] === End of kex handshake ===
2026-01-01T03:23:58.343 [DEBUG] [Thread-139707] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-01-01T03:23:58.343 [DEBUG] [Thread-139707] [transport.py] [_log()] Switch to new keys ...
2026-01-01T03:23:58.343 [DEBUG] [Thread-139707] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-01-01T03:23:58.343 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-01-01T03:23:58.344 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-01-01T03:23:58.344 [DEBUG] [Thread-139707] [transport.py] [_log()] userauth is OK
2026-01-01T03:23:58.344 [DEBUG] [Thread-139707] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-01-01T03:23:58.344 [DEBUG] [Thread-139707] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-01-01T03:23:58.344 [DEBUG] [Thread-139707] [transport.py] [_log()] Server-side algorithm l
[file cut: first 33554432 bytes kept]
[document cut: first 32644520 of 33554432 characters kept]
